[Pkg-php-commits] [php/upstream-sid] Imported Upstream version 5.2.10.dfsg.1

Sean Finney seanius at debian.org
Tue Jun 23 22:08:39 UTC 2009


---
 NEWS                                               |  181 +-
 README.TESTING                                     |    9 +-
 Zend/FlexLexer.h                                   |    2 +-
 Zend/flex.skl                                      |    2 +-
 Zend/tests/bug39018.phpt                           |   82 +
 Zend/tests/bug39018_2.phpt                         |   18 +
 Zend/tests/bug39304.phpt                           |    4 +-
 Zend/tests/bug41919.phpt                           |    2 +
 Zend/tests/bug42143.phpt                           |   38 +
 Zend/tests/bug45877.phpt                           |   23 +
 Zend/tests/bug47704.phpt                           |    9 +
 Zend/tests/bug47801.phpt                           |   31 +
 Zend/tests/bug47836.phpt                           |   16 +
 Zend/tests/bug47981.phpt                           |   19 +
 Zend/tests/bug48228.phpt                           |   32 +
 Zend/tests/bug48248.phpt                           |   27 +
 Zend/tests/bug48408.phpt                           |   30 +
 Zend/tests/bug48409.phpt                           |   67 +
 Zend/tests/bug48428.phpt                           |   13 +
 Zend/tests/exception_010.phpt                      |   30 +
 Zend/tests/function_exists_basic.phpt              |   39 +
 Zend/tests/function_exists_error.phpt              |   37 +
 Zend/tests/function_exists_variation1.phpt         |  135 +
 Zend/tests/get_class_vars_003.phpt                 |    4 +-
 Zend/tests/get_class_vars_006.phpt                 |    4 +-
 Zend/tests/get_defined_functions_basic.phpt        |   59 +
 Zend/tests/get_defined_functions_error.phpt        |   29 +
 Zend/zend.c                                        |    6 +-
 Zend/zend.h                                        |   22 +-
 Zend/zend_API.c                                    |    3 +-
 Zend/zend_alloc.c                                  |   13 +-
 Zend/zend_builtin_functions.c                      |   53 +-
 Zend/zend_compile.c                                |   11 +-
 Zend/zend_exceptions.c                             |   11 +-
 Zend/zend_execute.c                                |    6 +-
 Zend/zend_execute.h                                |   23 +-
 Zend/zend_execute_API.c                            |    7 +-
 Zend/zend_hash.c                                   |    6 +-
 Zend/zend_hash.h                                   |   73 +-
 Zend/zend_highlight.c                              |   27 +-
 Zend/zend_ini_scanner.c                            |    2 +-
 Zend/zend_language_scanner.c                       |    8 +-
 Zend/zend_language_scanner.l                       |    6 +-
 Zend/zend_multibyte.c                              |  162 +-
 Zend/zend_object_handlers.c                        |   44 +-
 Zend/zend_operators.h                              |   14 +-
 Zend/zend_ptr_stack.h                              |    2 +-
 Zend/zend_types.h                                  |    2 +-
 Zend/zend_variables.c                              |   42 +-
 Zend/zend_variables.h                              |   18 +-
 Zend/zend_vm_def.h                                 |   30 +-
 Zend/zend_vm_execute.h                             |  220 +-
 acinclude.m4                                       |   36 +-
 aclocal.m4                                         |   36 +-
 build/order_by_dep.awk                             |    5 +-
 configure                                          | 7469 ++--
 configure.in                                       |   22 +-
 ext/curl/config.m4                                 |  119 +-
 ext/curl/interface.c                               |  425 +-
 ext/curl/php_curl.h                                |    3 +-
 ext/curl/streams.c                                 |   53 +-
 ext/curl/tests/bug45161.phpt                       |   16 +
 ext/curl/tests/bug46711.phpt                       |   36 +
 ext/curl/tests/bug46739.phpt                       |    9 +
 ext/curl/tests/bug48203.phpt                       |   33 +
 ext/curl/tests/bug48514.phpt                       |   27 +
 ext/curl/tests/curl_basic_001.phpt                 |   45 +
 ext/curl/tests/curl_basic_002.phpt                 |   41 +
 ext/curl/tests/curl_basic_003.phpt                 |   56 +
 ext/curl/tests/curl_basic_004.phpt                 |   41 +
 ext/curl/tests/curl_basic_005.phpt                 |   41 +
 ext/curl/tests/curl_basic_007.phpt                 |   24 +
 ext/curl/tests/curl_basic_008.phpt                 |   23 +
 ext/curl/tests/curl_basic_009.phpt                 |   23 +
 ext/curl/tests/curl_basic_010.phpt                 |   24 +
 ext/curl/tests/curl_basic_011.phpt                 |   38 +
 ext/curl/tests/curl_basic_012.phpt                 |   38 +
 ext/curl/tests/curl_basic_013.phpt                 |   38 +
 ext/curl/tests/curl_basic_014.phpt                 |   15 +
 ext/curl/tests/curl_basic_015.phpt                 |   16 +
 ext/curl/tests/curl_basic_016.phpt                 |   57 +
 ext/curl/tests/curl_basic_017.phpt                 |   69 +
 ext/curl/tests/curl_basic_018.phpt                 |   72 +
 ext/curl/tests/curl_basic_019.phpt                 |   28 +
 ext/curl/tests/curl_basic_020.phpt                 |   25 +
 ext/curl/tests/curl_basic_021.phpt                 |   24 +
 ext/curl/tests/responder/get.php                   |   30 +
 ext/date/config.m4                                 |   25 -
 ext/date/config0.m4                                |   25 +
 ext/date/lib/timelib_structs.h                     |    5 +-
 ext/date/lib/timezonedb.h                          | 2620 +-
 ext/date/lib/tm2unixtime.c                         |   24 +-
 ext/date/php_date.c                                |   41 +-
 ext/date/php_date.h                                |    4 +-
 ext/date/tests/DateTimeZone_clone_basic1.phpt      |   39 +
 ext/date/tests/DateTimeZone_clone_basic2.phpt      |   66 +
 ext/date/tests/DateTimeZone_clone_basic3.phpt      |   75 +
 ext/date/tests/DateTimeZone_clone_basic4.phpt      |   28 +
 ext/date/tests/DateTimeZone_compare_basic1.phpt    |   54 +
 ext/date/tests/DateTimeZone_construct_basic.phpt   |   30 +
 ext/date/tests/DateTimeZone_construct_error.phpt   |   33 +
 .../tests/DateTimeZone_construct_variation1.phpt   |  200 +
 ext/date/tests/DateTimeZone_extends_basic1.phpt    |   34 +
 ext/date/tests/DateTimeZone_getName_basic1.phpt    |   32 +
 ext/date/tests/DateTimeZone_getName_error.phpt     |   31 +
 ext/date/tests/DateTimeZone_getOffset_basic1.phpt  |   33 +
 ext/date/tests/DateTimeZone_getOffset_error.phpt   |   40 +
 .../tests/DateTimeZone_getOffset_variation1.phpt   |  252 +
 .../tests/DateTimeZone_getTransitions_basic1.phpt  |   50 +
 .../tests/DateTimeZone_getTransitions_error.phpt   |   31 +
 .../DateTimeZone_listAbbreviations_basic1.phpt     |   70 +
 .../tests/DateTimeZone_listIdentifiers_basic1.phpt | 1144 +
 ext/date/tests/DateTimeZone_serialize.phpt         |   29 +
 ext/date/tests/DateTimeZone_verify.phpt            |   78 +
 ext/date/tests/DateTime_clone_basic1.phpt          |   29 +
 ext/date/tests/DateTime_clone_basic2.phpt          |   66 +
 ext/date/tests/DateTime_clone_basic3.phpt          |   75 +
 ext/date/tests/DateTime_clone_basic4.phpt          |   31 +
 ext/date/tests/DateTime_compare_basic1.phpt        |   77 +
 ext/date/tests/DateTime_construct_basic1.phpt      |   34 +
 ext/date/tests/DateTime_construct_error.phpt       |   33 +
 ext/date/tests/DateTime_construct_variation1.phpt  |  257 +
 ext/date/tests/DateTime_construct_variation2.phpt  |  204 +
 ext/date/tests/DateTime_extends_basic1.phpt        |   49 +
 ext/date/tests/DateTime_extends_basic2.phpt        |   31 +
 ext/date/tests/DateTime_extends_basic3.phpt        |   26 +
 ext/date/tests/DateTime_format_basic1.phpt         |   40 +
 ext/date/tests/DateTime_format_basic2.phpt         |   44 +
 ext/date/tests/DateTime_format_error.phpt          |   41 +
 ext/date/tests/DateTime_format_variation1.phpt     |  208 +
 ext/date/tests/DateTime_getOffset_basic1.phpt      |   28 +
 ext/date/tests/DateTime_getOffset_error.phpt       |   33 +
 ext/date/tests/DateTime_getTimeZone_basic1.phpt    |   33 +
 ext/date/tests/DateTime_modify_basic1.phpt         |   39 +
 ext/date/tests/DateTime_modify_error.phpt          |   42 +
 ext/date/tests/DateTime_modify_variation1.phpt     |  208 +
 ext/date/tests/DateTime_serialize.phpt             |   29 +
 ext/date/tests/DateTime_setDate_basic1.phpt        |   30 +
 ext/date/tests/DateTime_setDate_error.phpt         |   53 +
 ext/date/tests/DateTime_setDate_variation1.phpt    |  224 +
 ext/date/tests/DateTime_setDate_variation2.phpt    |  225 +
 ext/date/tests/DateTime_setDate_variation3.phpt    |  224 +
 ext/date/tests/DateTime_setISODate_basic1.phpt     |   38 +
 ext/date/tests/DateTime_setISODate_error.phpt      |   51 +
 ext/date/tests/DateTime_setISODate_variation1.phpt |  224 +
 ext/date/tests/DateTime_setISODate_variation2.phpt |  224 +
 ext/date/tests/DateTime_setISODate_variation3.phpt |  224 +
 ext/date/tests/DateTime_setTime_basic1.phpt        |   46 +
 ext/date/tests/DateTime_setTime_error.phpt         |   49 +
 ext/date/tests/DateTime_setTime_variation1.phpt    |  224 +
 ext/date/tests/DateTime_setTime_variation2.phpt    |  224 +
 ext/date/tests/DateTime_setTime_variation3.phpt    |  224 +
 ext/date/tests/DateTime_setTimezone_basic1.phpt    |   29 +
 ext/date/tests/DateTime_setTimezone_error.phpt     |   39 +
 .../tests/DateTime_setTimezone_variation1.phpt     |  252 +
 ext/date/tests/DateTime_verify.phpt                |  122 +
 ext/date/tests/bug48058.phpt                       |   12 +
 ext/date/tests/bug48097.phpt                       |   20 +
 ext/date/tests/checkdate_basic1.phpt               |   54 +
 ext/date/tests/checkdate_error.phpt                |   49 +
 ext/date/tests/checkdate_variation1.phpt           |  202 +
 ext/date/tests/checkdate_variation2.phpt           |  202 +
 ext/date/tests/checkdate_variation3.phpt           |  201 +
 ext/date/tests/date_basic1.phpt                    |   41 +
 ext/date/tests/date_create-relative.phpt           |   93 +
 ext/date/tests/date_create_basic.phpt              |   34 +
 ext/date/tests/date_create_error.phpt              |   28 +
 ext/date/tests/date_create_variation1.phpt         |  269 +
 ext/date/tests/date_create_variation2.phpt         |  252 +
 ext/date/tests/date_date_set_basic1.phpt           |   30 +
 ext/date/tests/date_date_set_error.phpt            |   56 +
 ext/date/tests/date_date_set_variation1.phpt       |  254 +
 ext/date/tests/date_date_set_variation2.phpt       |  224 +
 ext/date/tests/date_date_set_variation3.phpt       |  224 +
 ext/date/tests/date_date_set_variation4.phpt       |  224 +
 ext/date/tests/date_error.phpt                     |   39 +
 ext/date/tests/date_format_basic1.phpt             |   40 +
 ext/date/tests/date_format_error.phpt              |   67 +
 ext/date/tests/date_format_variation1.phpt         |  252 +
 ext/date/tests/date_format_variation2.phpt         |  208 +
 ext/date/tests/date_isodate_set_basic1.phpt        |   38 +
 ext/date/tests/date_isodate_set_error.phpt         |   68 +
 ext/date/tests/date_isodate_set_variation1.phpt    |  254 +
 ext/date/tests/date_isodate_set_variation2.phpt    |  225 +
 ext/date/tests/date_isodate_set_variation3.phpt    |  224 +
 ext/date/tests/date_isodate_set_variation4.phpt    |  224 +
 ext/date/tests/date_modify_basic1.phpt             |   39 +
 ext/date/tests/date_modify_error.phpt              |   68 +
 ext/date/tests/date_modify_variation1.phpt         |  252 +
 ext/date/tests/date_modify_variation2.phpt         |  208 +
 ext/date/tests/date_offset_get_basic1.phpt         |   28 +
 ext/date/tests/date_offset_get_error.phpt          |   57 +
 ext/date/tests/date_offset_get_variation1.phpt     |  250 +
 ext/date/tests/date_parse_basic1.phpt              |  107 +
 ext/date/tests/date_parse_error.phpt               |   89 +
 ext/date/tests/date_parse_variation1.phpt          |  272 +
 ext/date/tests/date_time_set_basic1.phpt           |   46 +
 ext/date/tests/date_time_set_error.phpt            |   70 +
 ext/date/tests/date_time_set_variation1.phpt       |  254 +
 ext/date/tests/date_time_set_variation2.phpt       |  224 +
 ext/date/tests/date_time_set_variation3.phpt       |  224 +
 ext/date/tests/date_time_set_variation4.phpt       |  224 +
 ext/date/tests/date_timezone_get_basic1.phpt       |   35 +
 ext/date/tests/date_timezone_get_error.phpt        |   56 +
 ext/date/tests/date_timezone_get_variation1.phpt   |  250 +
 ext/date/tests/date_timezone_set_basic1.phpt       |   34 +
 ext/date/tests/date_timezone_set_error.phpt        |   64 +
 ext/date/tests/date_timezone_set_variation1.phpt   |  254 +
 ext/date/tests/date_timezone_set_variation2.phpt   |  252 +
 ext/date/tests/date_variation1.phpt                |  208 +
 ext/date/tests/date_variation2.phpt                |  222 +
 ext/date/tests/idate_error.phpt                    |   37 +
 ext/date/tests/localtime_error.phpt                |   33 +
 ext/date/tests/mktime_basic1.phpt                  |   47 +
 ext/date/tests/mktime_error.phpt                   |   45 +
 ext/date/tests/mktime_variation1.phpt              |  224 +
 ext/date/tests/mktime_variation2.phpt              |  218 +
 ext/date/tests/mktime_variation3.phpt              |  219 +
 ext/date/tests/mktime_variation4.phpt              |  220 +
 ext/date/tests/mktime_variation5.phpt              |  221 +
 ext/date/tests/mktime_variation6.phpt              |  223 +
 ext/date/tests/mktime_variation7.phpt              |  251 +
 ext/date/tests/strtotime-relative.phpt             |   98 +
 .../tests/timezone_abbreviations_list_basic1.phpt  |   70 +
 .../tests/timezone_identifiers_list_basic1.phpt    | 1144 +
 ext/date/tests/timezone_name_from_abbr_basic1.phpt |   68 +
 ext/date/tests/timezone_name_from_abbr_error.phpt  |   42 +
 .../tests/timezone_name_from_abbr_variation1.phpt  |  205 +
 .../tests/timezone_name_from_abbr_variation2.phpt  |  219 +
 .../tests/timezone_name_from_abbr_variation3.phpt  |  219 +
 ext/date/tests/timezone_name_get_error.phpt        |   56 +
 ext/date/tests/timezone_offset_get_basic1.phpt     |   34 +
 ext/date/tests/timezone_offset_get_error.phpt      |   84 +
 ext/date/tests/timezone_offset_get_variation1.phpt |  252 +
 ext/date/tests/timezone_offset_get_variation2.phpt |  252 +
 ext/date/tests/timezone_open_basic1.phpt           |   27 +
 ext/date/tests/timezone_open_error.phpt            |   35 +
 ext/date/tests/timezone_open_variation1.phpt       |  251 +
 .../tests/timezone_transitions_get_basic1.phpt     |   53 +
 ext/date/tests/timezone_transitions_get_error.phpt |   56 +
 .../tests/timezone_transitions_get_variation1.phpt |  250 +
 ext/dba/dba_db4.c                                  |    4 +-
 ext/dba/tests/bug48240.phpt                        |   25 +
 ext/dom/attr.c                                     |   21 +-
 ext/dom/document.c                                 |   25 +-
 ext/dom/node.c                                     |   31 +-
 ext/dom/tests/DOMAttr_construct_error_001.phpt     |   17 +
 ext/dom/tests/DOMAttr_name_basic_001.phpt          |   14 +
 ext/dom/tests/DOMAttr_ownerElement_error_001.phpt  |   23 +
 ext/dom/tests/DOMAttr_value_basic_002.phpt         |   15 +
 .../tests/DOMCDATASection_construct_error_001.phpt |   21 +
 .../DOMCharacterData_appendData_error_001.phpt     |   19 +
 ext/dom/tests/DOMCharacterData_data_error_002.phpt |   14 +
 .../DOMCharacterData_deleteData_basic_001.phpt     |   20 +
 .../DOMCharacterData_deleteData_error_001.phpt     |   19 +
 .../DOMCharacterData_deleteData_error_002.phpt     |   23 +
 .../DOMCharacterData_insertData_error_001.phpt     |   19 +
 .../DOMCharacterData_replaceData_error_001.phpt    |   19 +
 ext/dom/tests/DOMComment_construct_basic_001.phpt  |   19 +
 ext/dom/tests/DOMComment_construct_error_001.phpt  |   17 +
 .../DOMDocumentFragment_appendXML_basic_001.phpt   |   22 +
 .../DOMDocumentFragment_appendXML_error_001.phpt   |   14 +
 .../DOMDocumentFragment_appendXML_error_002.phpt   |   19 +
 .../DOMDocumentFragment_appendXML_error_003.phpt   |   19 +
 .../DOMDocumentFragment_construct_basic_001.phpt   |   15 +
 .../DOMDocumentFragment_construct_basic_002.phpt   |   16 +
 .../DOMDocumentFragment_construct_error_001.phpt   |   17 +
 ext/dom/tests/DOMDocumentType_basic_001.phpt       |   48 +
 .../tests/DOMDocumentType_entities_error_001.phpt  |   14 +
 .../DOMDocumentType_internalSubset_error_001.phpt  |   14 +
 ext/dom/tests/DOMDocumentType_name_error_001.phpt  |   14 +
 .../tests/DOMDocumentType_notations_error_001.phpt |   14 +
 .../tests/DOMDocumentType_publicId_basic_001.phpt  |   19 +
 .../tests/DOMDocumentType_publicId_error_001.phpt  |   14 +
 .../tests/DOMDocumentType_systemId_basic_001.phpt  |   19 +
 .../tests/DOMDocumentType_systemId_error_001.phpt  |   14 +
 ext/dom/tests/bug47430.phpt                        |   30 +
 ext/dom/tests/bug47849.phpt                        |   22 +
 ext/exif/exif.c                                    |    8 +-
 ext/exif/tests/bug48378.jpeg                       |  Bin 0 -> 2566 bytes
 ext/exif/tests/bug48378.phpt                       |   19 +
 ext/filter/filter.c                                |    4 +-
 ext/filter/logical_filters.c                       |   45 +-
 ext/filter/tests/046.phpt                          |    2 +-
 ext/filter/tests/bug46973.phpt                     |    4 +-
 ext/filter/tests/bug47745.phpt                     |   11 +
 ext/gd/gd.c                                        |    4 +-
 ext/gd/libgd/gd.c                                  |   12 +-
 ext/gd/libgd/gd_png.c                              |    5 +
 ext/gd/libgd/gdft.c                                |   24 +-
 ext/gd/tests/bug45799.phpt                         |   15 +
 ext/iconv/tests/iconv_basic.phpt                   |   72 +
 ext/iconv/tests/iconv_encoding_basic.phpt          |   94 +
 ext/iconv/tests/iconv_get_encoding_error.phpt      |  177 +
 .../iconv_mime_decode_headers_variation1.phpt      |  218 +
 .../iconv_mime_decode_headers_variation2.phpt      |  479 +
 .../iconv_mime_decode_headers_variation3.phpt      |  482 +
 ext/iconv/tests/iconv_mime_decode_variation1.phpt  |  183 +
 ext/iconv/tests/iconv_mime_decode_variation2.phpt  |  195 +
 ext/iconv/tests/iconv_mime_decode_variation3.phpt  |  222 +
 ext/iconv/tests/iconv_set_encoding_error.phpt      |  177 +
 ext/iconv/tests/iconv_set_encoding_variation.phpt  |  307 +
 ext/iconv/tests/iconv_stream_filter.phpt           |   14 +-
 ext/iconv/tests/iconv_stream_filter_delimiter.phpt |   50 +
 ext/iconv/tests/iconv_strlen_basic.phpt            |   40 +
 ext/iconv/tests/iconv_strlen_error1.phpt           |   45 +
 ext/iconv/tests/iconv_strlen_error2.phpt           |   34 +
 ext/iconv/tests/iconv_strlen_variation1.phpt       |  193 +
 ext/iconv/tests/iconv_strlen_variation2.phpt       |  204 +
 ext/iconv/tests/iconv_strpos_basic.phpt            |   57 +
 ext/iconv/tests/iconv_strpos_error1.phpt           |   50 +
 ext/iconv/tests/iconv_strpos_error2.phpt           |   34 +
 ext/iconv/tests/iconv_strpos_variation1.phpt       |  182 +
 ext/iconv/tests/iconv_strpos_variation2.phpt       |  182 +
 ext/iconv/tests/iconv_strpos_variation3.phpt       |  201 +
 ext/iconv/tests/iconv_strpos_variation3_64bit.phpt |  199 +
 ext/iconv/tests/iconv_strpos_variation4.phpt       |  207 +
 ext/iconv/tests/iconv_strpos_variation5.phpt       |  101 +
 ext/iconv/tests/iconv_strrpos_basic.phpt           |   58 +
 ext/iconv/tests/iconv_strrpos_error1.phpt          |   49 +
 ext/iconv/tests/iconv_strrpos_error2.phpt          |   35 +
 ext/iconv/tests/iconv_strrpos_variation1.phpt      |  180 +
 ext/iconv/tests/iconv_strrpos_variation2.phpt      |  182 +
 ext/iconv/tests/iconv_strrpos_variation3.phpt      |  205 +
 ext/iconv/tests/iconv_substr_basic.phpt            |   55 +
 ext/iconv/tests/iconv_substr_error1.phpt           |   50 +
 ext/iconv/tests/iconv_substr_error2.phpt           |   36 +
 ext/imap/config.w32                                |    3 +-
 ext/imap/php_imap.c                                |  535 +-
 ext/imap/tests/imap_body.phpt                      |   27 +
 ext/imap/tests/imap_expunge_error.phpt             |   27 +
 ext/imap/tests/imap_headers.phpt                   |   27 +
 ext/imap/tests/imap_num_msg_error.phpt             |   27 +
 ext/imap/tests/imap_num_recent_error.phpt          |   27 +
 ext/imap/tests/imap_open_error.phpt                |   42 +
 ext/imap/tests/imap_ping_error.phpt                |   27 +
 ext/json/JSON_parser.c                             |   24 +-
 ext/json/json.c                                    |  129 +-
 ext/json/php_json.h                                |    7 +-
 ext/json/tests/bug47644.phpt                       |   43 +
 ext/json/tests/json_decode_basic.phpt              |  187 +
 ext/json/tests/json_decode_error.phpt              |   39 +
 ext/json/tests/json_encode_basic.phpt              |  158 +
 ext/json/tests/json_encode_basic_utf8.phpt         |   26 +
 ext/json/tests/json_encode_error.phpt              |   40 +
 ext/ldap/ldap.c                                    |  147 +-
 ext/ldap/tests/bug48441.phpt                       |  169 +
 ext/ldap/tests/connect.inc                         |   61 +
 ext/ldap/tests/skipifbindfailure.inc               |   13 +
 ext/mbstring/mb_gpc.c                              |    7 +-
 ext/mbstring/mbstring.c                            |   15 +-
 ext/mbstring/mbstring.dsp                          |   12 +
 ext/mbstring/mbstring.h                            |    5 +-
 ext/mbstring/oniguruma/regint.h                    |    2 +-
 .../tests/mb_convert_encoding_stateful.phpt        |   37 +
 .../tests/mb_stripos_variation5_Bug45923.phpt      |    1 -
 .../tests/mb_strripos_variation3_Bug45923.phpt     |    1 -
 .../tests/mb_strripos_variation5_Bug45923.phpt     |    1 -
 .../tests/mb_substitute_character_variation1.phpt  |    6 -
 ext/mssql/php_mssql.h                              |    4 +-
 ext/mysqli/mysqli_api.c                            |   10 +-
 ext/mysqli/tests/bug46109.phpt                     |   17 +
 ext/odbc/php_odbc.c                                |   54 +-
 ext/odbc/tests/config.inc                          |    8 +
 ext/odbc/tests/odbc_columnprivileges_001.phpt      |   28 +
 ext/odbc/tests/odbc_columns_001.phpt               |   32 +
 ext/odbc/tests/odbc_data_source_001.phpt           |   25 +
 ext/odbc/tests/odbc_exec_001.phpt                  |   40 +
 ext/odbc/tests/odbc_exec_002.phpt                  |   36 +
 ext/odbc/tests/odbc_free_result_001.phpt           |   50 +
 ext/odbc/tests/odbc_tables_001.phpt                |   29 +
 ext/odbc/tests/skipif.inc                          |   10 +
 ext/openssl/openssl.c                              |    9 +-
 ext/openssl/tests/bug47828.phpt                    |   40 +
 ext/pcntl/pcntl.c                                  |    6 +-
 ext/pcntl/tests/001.phpt                           |    2 +-
 ext/pcntl/tests/bug47566.phpt                      |   19 +
 ext/pcre/pcrelib/AUTHORS                           |    2 +-
 ext/pcre/pcrelib/ChangeLog                         |  122 +
 ext/pcre/pcrelib/LICENCE                           |    2 +-
 ext/pcre/pcrelib/NEWS                              |    5 +
 ext/pcre/pcrelib/NON-UNIX-USE                      |   13 +-
 ext/pcre/pcrelib/README                            |   27 +-
 ext/pcre/pcrelib/config.h                          |   16 +-
 ext/pcre/pcrelib/dftables.c                        |    2 +-
 ext/pcre/pcrelib/doc/pcre.txt                      | 1894 +-
 ext/pcre/pcrelib/pcre.h                            |    9 +-
 ext/pcre/pcrelib/pcre_compile.c                    |  861 +-
 ext/pcre/pcrelib/pcre_config.c                     |    4 +-
 ext/pcre/pcrelib/pcre_exec.c                       |  233 +-
 ext/pcre/pcrelib/pcre_fullinfo.c                   |    2 +-
 ext/pcre/pcrelib/pcre_get.c                        |    2 +-
 ext/pcre/pcrelib/pcre_globals.c                    |    2 +-
 ext/pcre/pcrelib/pcre_info.c                       |    2 +-
 ext/pcre/pcrelib/pcre_internal.h                   |  588 +-
 ext/pcre/pcrelib/pcre_maketables.c                 |    2 +-
 ext/pcre/pcrelib/pcre_newline.c                    |    6 +-
 ext/pcre/pcrelib/pcre_ord2utf8.c                   |    2 +-
 ext/pcre/pcrelib/pcre_printint.src                 |    6 +-
 ext/pcre/pcrelib/pcre_refcount.c                   |    2 +-
 ext/pcre/pcrelib/pcre_study.c                      |    2 +-
 ext/pcre/pcrelib/pcre_tables.c                     |  358 +-
 ext/pcre/pcrelib/pcre_try_flipped.c                |    2 +-
 ext/pcre/pcrelib/pcre_valid_utf8.c                 |    4 +-
 ext/pcre/pcrelib/pcre_version.c                    |    2 +-
 ext/pcre/pcrelib/pcre_xclass.c                     |    7 +-
 ext/pcre/pcrelib/pcregrep.c                        |  144 +-
 ext/pcre/pcrelib/pcreposix.c                       |    1 +
 ext/pcre/pcrelib/pcreposix.h                       |    1 +
 ext/pcre/pcrelib/testdata/grepinputx               |    1 +
 ext/pcre/pcrelib/testdata/grepoutput               |   27 +-
 ext/pcre/pcrelib/testdata/testinput1               |   25 +
 ext/pcre/pcrelib/testdata/testinput2               |   47 +
 ext/pcre/pcrelib/testdata/testinput5               |    5 +
 ext/pcre/pcrelib/testdata/testinput6               |    8 +
 ext/pcre/pcrelib/testdata/testinput7               |   33 +-
 ext/pcre/pcrelib/testdata/testoutput1              |   37 +
 ext/pcre/pcrelib/testdata/testoutput2              |  202 +
 ext/pcre/pcrelib/testdata/testoutput5              |   11 +
 ext/pcre/pcrelib/testdata/testoutput6              |   10 +
 ext/pcre/pcrelib/testdata/testoutput7              |  120 +-
 ext/pcre/pcrelib/ucp.h                             |    5 +-
 ext/pcre/php_pcre.c                                |    8 +-
 ext/pcre/tests/bug47662.phpt                       |   18 +
 ext/pdo/pdo.c                                      |    8 +-
 ext/pdo/pdo_dbh.c                                  |   17 +-
 ext/pdo/pdo_stmt.c                                 |    4 +-
 ext/pdo/tests/bug47769.phpt                        |   32 +
 ext/pdo_dblib/config.w32                           |   10 +-
 ext/pdo_dblib/dblib_driver.c                       |    8 +-
 ext/pdo_dblib/dblib_stmt.c                         |   31 +-
 ext/pdo_dblib/pdo_dblib.c                          |   10 +-
 ext/pdo_dblib/php_pdo_dblib.h                      |    8 +-
 ext/pdo_firebird/firebird_driver.c                 |    5 +-
 ext/pdo_firebird/firebird_statement.c              |    9 +-
 ext/pdo_oci/oci_driver.c                           |   12 +-
 ext/pdo_oci/oci_statement.c                        |    4 +-
 ext/pdo_oci/tests/bug44301.phpt                    |   25 +
 ext/pdo_pgsql/pgsql_statement.c                    |    4 +-
 ext/pdo_sqlite/sqlite/src/keywordhash.h            |    2 +-
 ext/pdo_sqlite/sqlite_statement.c                  |   12 +-
 .../tests/pdo_sqlite_createaggregate.phpt          |    2 +
 .../tests/pdo_sqlite_createfunction.phpt           |    2 +
 ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt  |    2 +
 ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt   |    2 +
 ext/pgsql/config.w32                               |    4 +-
 ext/pgsql/pgsql.c                                  |    4 +-
 ext/pgsql/tests/80_bug14383.phpt                   |   15 +
 ext/posix/tests/posix_access.phpt                  |   51 +
 ext/posix/tests/posix_access_error_modes.phpt      |   44 +
 .../tests/posix_access_error_wrongparams.phpt      |   42 +
 ext/posix/tests/posix_access_safemode.phpt         |   23 +
 ext/posix/tests/posix_ctermid.phpt                 |   26 +
 ext/posix/tests/posix_getcwd_basic.phpt            |   22 +
 ext/posix/tests/posix_getgrgid.phpt                |   45 +
 ext/posix/tests/posix_getgrgid_basic.phpt          |   30 +
 ext/posix/tests/posix_getgrgid_macosx.phpt         |   23 +
 ext/posix/tests/posix_getgrgid_wrongparams.phpt    |   28 +
 ext/posix/tests/posix_getgrnam_basic.phpt          |   23 +
 ext/posix/tests/posix_getgroups_basic.phpt         |   24 +
 ext/posix/tests/posix_getpgid_basic.phpt           |   23 +
 ext/posix/tests/posix_getpgrp_basic.phpt           |   21 +
 ext/posix/tests/posix_getpid_basic.phpt            |   21 +
 ext/posix/tests/posix_getppid_basic.phpt           |   21 +
 ext/posix/tests/posix_getpwnam_basic.phpt          |   23 +
 ext/posix/tests/posix_getpwuid_basic.phpt          |   30 +
 ext/posix/tests/posix_getrlimit_basic.phpt         |   20 +
 ext/posix/tests/posix_getsid.phpt                  |   28 +
 ext/posix/tests/posix_getsid_basic.phpt            |   22 +
 ext/posix/tests/posix_getsid_error.phpt            |   28 +
 ext/posix/tests/posix_initgroups_basic.phpt        |   22 +
 ext/posix/tests/posix_kill_basic.phpt              |   39 +
 ext/posix/tests/posix_mkfifo_safemode.phpt         |   43 +
 ext/posix/tests/posix_mkfifo_wrongparams.phpt      |   21 +
 ext/posix/tests/posix_mknod_basic.phpt             |   18 +
 ext/posix/tests/posix_times.phpt                   |   33 +
 ext/posix/tests/posix_times_basic.phpt             |   37 +
 ext/posix/tests/posix_ttyname.phpt                 |   26 +
 .../tests/posix_ttyname_error_wrongparams.phpt     |   37 +
 ext/posix/tests/posix_uname.phpt                   |   33 +
 ext/posix/tests/posix_uname_basic.phpt             |   28 +
 ext/readline/config.m4                             |   11 +-
 ext/reflection/php_reflection.c                    |   31 +-
 ext/reflection/tests/002.phpt                      |   14 +-
 .../tests/ReflectionClass_FileInfo_basic.phpt      |   33 +
 .../tests/ReflectionClass_FileInfo_error.phpt      |   37 +
 .../tests/ReflectionClass_constructor_001.phpt     |   33 +
 .../tests/ReflectionClass_constructor_002.phpt     |   67 +
 .../tests/ReflectionClass_export_basic1.phpt       |   62 +
 .../tests/ReflectionClass_export_basic2.phpt       |   54 +
 .../tests/ReflectionClass_getConstant_basic.phpt   |   41 +
 .../tests/ReflectionClass_getConstant_error.phpt   |   37 +
 .../tests/ReflectionClass_getConstants_basic.phpt  |   48 +
 .../tests/ReflectionClass_getConstants_error.phpt  |   24 +
 .../ReflectionClass_getConstructor_basic.phpt      |   82 +
 .../ReflectionClass_getConstructor_error.phpt      |   24 +
 .../ReflectionClass_getExtensionName_basic.phpt    |   14 +
 ...ReflectionClass_getExtensionName_variation.phpt |   20 +
 .../tests/ReflectionClass_getExtension_basic.phpt  |   17 +
 .../ReflectionClass_getExtension_variation.phpt    |   20 +
 .../ReflectionClass_getInterfaceNames_basic.phpt   |   25 +
 .../tests/ReflectionClass_getMethod_001.phpt       |  146 +-
 .../tests/ReflectionClass_getMethods_001.phpt      |   98 +-
 .../tests/ReflectionClass_getModifiers_basic.phpt  |   39 +
 .../tests/ReflectionClass_getName_basic.phpt       |   25 +
 .../tests/ReflectionClass_getName_error.phpt       |   17 +
 .../tests/ReflectionClass_getName_error1.phpt      |    8 +
 .../tests/ReflectionClass_getParentClass.phpt      |   21 +
 .../tests/ReflectionClass_getProperties_001.phpt   |   82 +-
 .../tests/ReflectionClass_getProperty_001.phpt     |   90 +-
 .../tests/ReflectionClass_getProperty_003.phpt     |  152 +-
 .../tests/ReflectionClass_getProperty_004.phpt     |  152 +-
 .../tests/ReflectionClass_hasConstant_basic.phpt   |   23 +
 .../tests/ReflectionClass_hasMethod_basic.phpt     |   57 +
 .../tests/ReflectionClass_hasProperty_basic.phpt   |   38 +
 .../tests/ReflectionClass_isAbstract_basic.phpt    |   23 +
 .../tests/ReflectionClass_isFinal_basic.phpt       |   23 +
 .../tests/ReflectionClass_isInstance_basic.phpt    |   51 +
 .../tests/ReflectionClass_isInstance_error.phpt    |   39 +
 .../ReflectionClass_isInstantiable_basic.phpt      |   40 +
 .../ReflectionClass_isInstantiable_error.phpt      |   19 +
 .../ReflectionClass_isInstantiable_variation.phpt  |   50 +
 .../tests/ReflectionClass_isInterface_basic.phpt   |   27 +
 .../tests/ReflectionClass_isInternal_basic.phpt    |   22 +
 .../tests/ReflectionClass_isInternal_error.phpt    |   14 +
 .../tests/ReflectionClass_isIterateable_basic.phpt |   36 +
 .../ReflectionClass_isIterateable_variation1.phpt  |   27 +
 .../tests/ReflectionClass_isSubclassOf_basic.phpt  |  103 +
 .../tests/ReflectionClass_isSubclassOf_error.phpt  |   17 +
 .../tests/ReflectionClass_isSubclassOf_error1.phpt |   16 +
 .../tests/ReflectionClass_isUserDefined_basic.phpt |   22 +
 .../tests/ReflectionClass_isUserDefined_error.phpt |   14 +
 .../tests/ReflectionMethod_getModifiers_basic.phpt |   34 +-
 .../tests/ReflectionObject_FileInfo_basic.phpt     |   25 +
 .../tests/ReflectionObject_FileInfo_error.phpt     |   37 +
 .../tests/ReflectionObject___toString_basic1.phpt  |   36 +
 .../tests/ReflectionObject___toString_basic2.phpt  |   39 +
 .../tests/ReflectionObject_constructor_basic.phpt  |   28 +
 .../tests/ReflectionObject_constructor_error.phpt  |   49 +
 .../tests/ReflectionObject_export_basic1.phpt      |   36 +
 .../tests/ReflectionObject_export_basic2.phpt      |   39 +
 .../tests/ReflectionObject_export_basic3.phpt      |   38 +
 .../tests/ReflectionObject_getConstant_basic.phpt  |   41 +
 .../tests/ReflectionObject_getConstant_error.phpt  |   34 +
 .../tests/ReflectionObject_getConstants_basic.phpt |   49 +
 .../tests/ReflectionObject_getConstants_error.phpt |   18 +
 .../ReflectionObject_getConstructor_basic.phpt     |   82 +
 .../ReflectionObject_getConstructor_error.phpt     |   24 +
 .../tests/ReflectionObject_getName_basic.phpt      |   27 +
 .../tests/ReflectionObject_getName_error.phpt      |   23 +
 .../tests/ReflectionObject_getName_error1.phpt     |    8 +
 .../tests/ReflectionObject_isInstance_basic.phpt   |   33 +
 .../tests/ReflectionObject_isInstance_error.phpt   |   38 +
 .../ReflectionObject_isInstantiable_basic.phpt     |   36 +
 .../ReflectionObject_isInstantiable_error.phpt     |   22 +
 .../ReflectionObject_isInstantiable_variation.phpt |   78 +
 .../tests/ReflectionObject_isInternal_basic.phpt   |   23 +
 .../tests/ReflectionObject_isInternal_error.phpt   |   15 +
 .../tests/ReflectionObject_isSubclassOf_basic.phpt |  116 +
 .../tests/ReflectionObject_isSubclassOf_error.phpt |   24 +
 .../ReflectionObject_isUserDefined_basic.phpt      |   23 +
 .../ReflectionObject_isUserDefined_error.phpt      |   15 +
 ...ectionParameter_invalidMethodInConstructor.phpt |   31 +
 .../tests/ReflectionProperty_basic1.phpt           |  162 +
 .../tests/ReflectionProperty_basic2.phpt           |  105 +
 .../ReflectionProperty_constructor_error.phpt      |   46 +
 .../ReflectionProperty_constructor_variation1.phpt |   58 +
 ext/reflection/tests/ReflectionProperty_error.phpt |   70 +
 .../tests/ReflectionProperty_export_basic.phpt     |   18 +
 .../tests/ReflectionProperty_export_error.phpt     |   56 +
 ...ctionProperty_getDeclaringClass_variation1.phpt |   29 +
 .../ReflectionProperty_getDocComment_basic.phpt    |  102 +
 .../ReflectionProperty_getDocComment_error.phpt    |   31 +
 .../ReflectionProperty_getModifiers_basic.phpt     |   48 +
 .../tests/ReflectionProperty_getValue_error.phpt   |   83 +
 .../tests/ReflectionProperty_isDefault_basic.phpt  |   65 +
 .../tests/ReflectionProperty_setValue_error.phpt   |  102 +
 ext/reflection/tests/bug48336.phpt                 |   44 +
 .../tests/reflectionClass_FileInfo_basic.phpt      |   33 -
 .../tests/reflectionClass_FileInfo_error.phpt      |   37 -
 .../tests/reflectionClass_constructor_001.phpt     |   33 -
 .../tests/reflectionClass_constructor_002.phpt     |   67 -
 .../tests/reflectionClass_export_basic1.phpt       |   62 -
 .../tests/reflectionClass_export_basic2.phpt       |   54 -
 .../tests/reflectionClass_getConstant_basic.phpt   |   41 -
 .../tests/reflectionClass_getConstant_error.phpt   |   37 -
 .../tests/reflectionClass_getConstants_basic.phpt  |   48 -
 .../tests/reflectionClass_getConstants_error.phpt  |   24 -
 .../reflectionClass_getConstructor_basic.phpt      |   82 -
 .../reflectionClass_getConstructor_error.phpt      |   24 -
 .../reflectionClass_getExtensionName_basic.phpt    |   14 -
 ...reflectionClass_getExtensionName_variation.phpt |   20 -
 .../tests/reflectionClass_getExtension_basic.phpt  |   17 -
 .../reflectionClass_getExtension_variation.phpt    |   20 -
 .../reflectionClass_getInterfaceNames_basic.phpt   |   25 -
 .../tests/reflectionClass_getModifiers_basic.phpt  |   39 -
 .../tests/reflectionClass_getName_basic.phpt       |   25 -
 .../tests/reflectionClass_getName_error.phpt       |   17 -
 .../tests/reflectionClass_getName_error1.phpt      |    8 -
 .../tests/reflectionClass_getParentClass.phpt      |   21 -
 .../tests/reflectionClass_hasConstant_basic.phpt   |   23 -
 .../tests/reflectionClass_hasMethod_basic.phpt     |   57 -
 .../tests/reflectionClass_hasProperty_basic.phpt   |   38 -
 .../tests/reflectionClass_isAbstract_basic.phpt    |   23 -
 .../tests/reflectionClass_isFinal_basic.phpt       |   23 -
 .../tests/reflectionClass_isInstance_basic.phpt    |   51 -
 .../tests/reflectionClass_isInstance_error.phpt    |   39 -
 .../reflectionClass_isInstantiable_basic.phpt      |   40 -
 .../reflectionClass_isInstantiable_error.phpt      |   19 -
 .../reflectionClass_isInstantiable_variation.phpt  |   50 -
 .../tests/reflectionClass_isInterface_basic.phpt   |   27 -
 .../tests/reflectionClass_isInternal_basic.phpt    |   22 -
 .../tests/reflectionClass_isInternal_error.phpt    |   14 -
 .../tests/reflectionClass_isIterateable_basic.phpt |   36 -
 .../reflectionClass_isIterateable_variation1.phpt  |   27 -
 .../tests/reflectionClass_isSubclassOf_basic.phpt  |  103 -
 .../tests/reflectionClass_isSubclassOf_error.phpt  |   17 -
 .../tests/reflectionClass_isSubclassOf_error1.phpt |   16 -
 .../tests/reflectionClass_isUserDefined_basic.phpt |   22 -
 .../tests/reflectionClass_isUserDefined_error.phpt |   14 -
 .../tests/reflectionObject_FileInfo_basic.phpt     |   25 -
 .../tests/reflectionObject_FileInfo_error.phpt     |   37 -
 .../tests/reflectionObject___toString_basic1.phpt  |   36 -
 .../tests/reflectionObject___toString_basic2.phpt  |   39 -
 .../tests/reflectionObject_constructor_basic.phpt  |   28 -
 .../tests/reflectionObject_constructor_error.phpt  |   49 -
 .../tests/reflectionObject_export_basic1.phpt      |   36 -
 .../tests/reflectionObject_export_basic2.phpt      |   39 -
 .../tests/reflectionObject_export_basic3.phpt      |   38 -
 .../tests/reflectionObject_getConstant_basic.phpt  |   41 -
 .../tests/reflectionObject_getConstant_error.phpt  |   34 -
 .../tests/reflectionObject_getConstants_basic.phpt |   49 -
 .../tests/reflectionObject_getConstants_error.phpt |   18 -
 .../reflectionObject_getConstructor_basic.phpt     |   82 -
 .../reflectionObject_getConstructor_error.phpt     |   24 -
 .../tests/reflectionObject_getName_basic.phpt      |   27 -
 .../tests/reflectionObject_getName_error.phpt      |   23 -
 .../tests/reflectionObject_getName_error1.phpt     |    8 -
 .../tests/reflectionObject_isInstance_basic.phpt   |   33 -
 .../tests/reflectionObject_isInstance_error.phpt   |   38 -
 .../reflectionObject_isInstantiable_basic.phpt     |   36 -
 .../reflectionObject_isInstantiable_error.phpt     |   22 -
 .../reflectionObject_isInstantiable_variation.phpt |   78 -
 .../tests/reflectionObject_isInternal_basic.phpt   |   23 -
 .../tests/reflectionObject_isInternal_error.phpt   |   15 -
 .../tests/reflectionObject_isSubclassOf_basic.phpt |  116 -
 .../tests/reflectionObject_isSubclassOf_error.phpt |   24 -
 .../reflectionObject_isUserDefined_basic.phpt      |   23 -
 .../reflectionObject_isUserDefined_error.phpt      |   15 -
 ...ectionParameter_invalidMethodInConstructor.phpt |   31 -
 .../tests/reflectionProperty_basic1.phpt           |  162 -
 .../tests/reflectionProperty_basic2.phpt           |  105 -
 .../reflectionProperty_constructor_error.phpt      |   46 -
 .../reflectionProperty_constructor_variation1.phpt |   58 -
 ext/reflection/tests/reflectionProperty_error.phpt |   70 -
 .../tests/reflectionProperty_export_basic.phpt     |   18 -
 .../tests/reflectionProperty_export_error.phpt     |   56 -
 ...ctionProperty_getDeclaringClass_variation1.phpt |   29 -
 .../reflectionProperty_getDocComment_basic.phpt    |  102 -
 .../reflectionProperty_getDocComment_error.phpt    |   31 -
 .../reflectionProperty_getModifiers_basic.phpt     |   48 -
 .../tests/reflectionProperty_getValue_error.phpt   |   83 -
 .../tests/reflectionProperty_isDefault_basic.phpt  |   65 -
 .../tests/reflectionProperty_setValue_error.phpt   |  102 -
 ext/session/mod_files.c                            |   61 +-
 ext/session/mod_mm.c                               |  130 +-
 ext/session/mod_user.c                             |   79 +-
 ext/session/php_session.h                          |   42 +-
 ext/session/session.c                              | 1579 +-
 ext/session/tests/008-php4.2.3.phpt                |    2 +-
 ext/session/tests/014.phpt                         |    4 +-
 ext/session/tests/bug42596.phpt                    |   33 +
 ext/session/tests/session_decode_variation3.phpt   |   20 +-
 ext/session/tests/session_encode_error2.phpt       |   28 +-
 ext/session/tests/session_encode_variation1.phpt   |    4 +-
 ext/session/tests/session_encode_variation2.phpt   |    2 +-
 ext/session/tests/session_encode_variation6.phpt   |    6 +-
 ext/session/tests/session_encode_variation8.phpt   |   11 +-
 ext/snmp/snmp.c                                    |   15 +-
 ext/soap/php_encoding.c                            |    4 +-
 ext/soap/php_http.c                                |    7 +-
 ext/soap/tests/bug48557.phpt                       |   71 +
 ext/soap/tests/bug48557.wsdl                       |   31 +
 ext/soap/tests/bugs/bug41477.phpt                  |    7 +-
 .../tests/interop/Round2/Base/r2_base_005p.phpt    |    1 +
 .../tests/interop/Round2/Base/r2_base_005s.phpt    |    1 +
 .../tests/interop/Round2/Base/r2_base_005w.phpt    |    1 +
 ext/soap/tests/schema/skipif.inc                   |    2 +
 ext/soap/tests/typemap001.phpt                     |    1 +
 ext/soap/tests/typemap003.phpt                     |    1 +
 ext/soap/tests/typemap005.phpt                     |    1 +
 ext/soap/tests/typemap007.phpt                     |    1 +
 ext/sockets/sockets.c                              |   12 +-
 ext/sockets/tests/ipv6_skipif.inc                  |    8 +
 ext/sockets/tests/ipv6loop.phpt                    |    4 +-
 ext/sockets/tests/socket_accept-wrongparams.phpt   |   16 +
 ext/sockets/tests/socket_create_listen-nobind.phpt |   25 +
 .../tests/socket_create_listen-wrongparams.phpt    |   18 +
 ext/sockets/tests/socket_create_listen.phpt        |   18 +
 .../tests/socket_create_pair-wrongparams.phpt      |   41 +
 ext/sockets/tests/socket_create_pair.phpt          |   24 +
 ext/sockets/tests/socket_listen-wrongparams.phpt   |   21 +
 ext/sockets/tests/socket_select-wrongparams-1.phpt |   27 +
 ext/sockets/tests/socket_select-wrongparams-2.phpt |   23 +
 ext/sockets/tests/socket_select-wrongparams-3.phpt |   28 +
 ext/sockets/tests/socket_select-wrongparams-4.phpt |   29 +
 ext/sockets/tests/socket_select.phpt               |   25 +
 .../tests/socket_sentto_recvfrom_ipv4_udp.phpt     |   57 +
 .../tests/socket_sentto_recvfrom_ipv6_udp.phpt     |   58 +
 ext/sockets/tests/socket_sentto_recvfrom_unix.phpt |   55 +
 ext/sockets/tests/socket_set_block-retval.phpt     |   28 +
 .../tests/socket_set_block-wrongparams.phpt        |   18 +
 ext/sockets/tests/socket_set_nonblock-retval.phpt  |   28 +
 .../tests/socket_set_nonblock-wrongparams.phpt     |   13 +
 .../socket_set_option_error_socket_option.phpt     |   33 +
 ext/sockets/tests/socket_set_option_rcvtimeo.phpt  |   39 +
 ext/sockets/tests/socket_set_option_seolinger.phpt |   47 +
 ext/sockets/tests/socket_set_option_sndtimeo.phpt  |   39 +
 ext/spl/internal/appenditerator.inc                |    2 +-
 ext/spl/internal/cachingiterator.inc               |  312 +-
 ext/spl/internal/emptyiterator.inc                 |  122 +-
 ext/spl/internal/filteriterator.inc                |  236 +-
 ext/spl/internal/infiniteiterator.inc              |   94 +-
 ext/spl/internal/iteratoriterator.inc              |  242 +-
 ext/spl/internal/limititerator.inc                 |  250 +-
 ext/spl/internal/norewinditerator.inc              |   54 +-
 ext/spl/internal/outeriterator.inc                 |   32 +-
 ext/spl/internal/parentiterator.inc                |   46 +-
 ext/spl/internal/recursivearrayiterator.inc        |  116 +-
 ext/spl/internal/recursivecachingiterator.inc      |  180 +-
 ext/spl/internal/recursivefilteriterator.inc       |  122 +-
 ext/spl/internal/recursiveiterator.inc             |   42 +-
 ext/spl/internal/recursiveiteratoriterator.inc     |  472 +-
 ext/spl/internal/recursiveregexiterator.inc        |  104 +-
 ext/spl/internal/regexiterator.inc                 |  310 +-
 ext/spl/internal/seekableiterator.inc              |   78 +-
 ext/spl/internal/splfileobject.inc                 |  754 +-
 ext/spl/internal/splobjectstorage.inc              |  218 +-
 ext/spl/php_spl.c                                  |    3 +-
 ext/spl/spl_array.c                                |   23 +-
 ext/spl/spl_iterators.c                            |   16 +-
 ext/spl/tests/SplFileObject_fflush_basic_001.phpt  |   35 +
 ext/spl/tests/SplFileObject_fpassthru_basic.phpt   |   13 +
 ext/spl/tests/SplFileObject_fscanf_basic.phpt      |   12 +
 ext/spl/tests/SplFileObject_fseek_error_001.phpt   |   12 +
 .../tests/SplFileObject_ftruncate_error_001.phpt   |   29 +
 ext/spl/tests/SplFileObject_fwrite_error_001.phpt  |   12 +
 .../tests/SplFileObject_fwrite_variation_001.phpt  |   17 +
 .../tests/SplFileObject_fwrite_variation_002.phpt  |   17 +
 .../tests/SplFileObject_fwrite_variation_003.phpt  |   18 +
 .../SplFileObject_getCsvControl_basic_001.phpt     |   15 +
 ext/spl/tests/SplFileObject_seek_error_001.phpt    |   19 +
 ext/spl/tests/SplFileObject_testinput.csv          |    5 +
 ext/spl/tests/arrayObject___construct_basic4.phpt  |    2 -
 ext/spl/tests/arrayObject___construct_basic5.phpt  |    2 -
 ext/spl/tests/arrayObject_magicMethods6.phpt       |    2 +-
 ext/spl/tests/arrayObject_setFlags_basic1.phpt     |    2 -
 ext/spl/tests/bug38325.phpt                        |    4 +-
 ext/spl/tests/bug45614.phpt                        |   56 +
 ext/spl/tests/bug45622.phpt                        |   51 +
 ext/spl/tests/bug45622b.phpt                       |   33 +
 ext/spl/tests/bug47534.phpt                        |   14 +
 ext/spl/tests/iterator_044.phpt.orig               |  169 +
 ext/spl/tests/iterator_count.phpt                  |   26 +
 ext/spl/tests/iterator_to_array.phpt               |   25 +
 ext/spl/tests/limititerator_seek.phpt              |   18 +
 ...rsiveiteratoriterator_beginiteration_basic.phpt |   32 +
 ...cursiveiteratoriterator_enditeration_basic.phpt |   32 +
 ...rsiveiteratoriterator_getsubiterator_basic.phpt |   20 +
 ...rsiveiteratoriterator_getsubiterator_error.phpt |   15 +
 ...eiteratoriterator_getsubiterator_variation.phpt |   42 +
 ...ratoriterator_getsubiterator_variation_002.phpt |   20 +
 ...ratoriterator_getsubiterator_variation_003.phpt |   42 +
 ...ecursiveiteratoriterator_nextelement_basic.phpt |   39 +
 ext/spl/tests/regexiterator_getpregflags.phpt      |   33 +
 .../tests/regexiterator_setflags_exception.phpt    |   35 +
 ext/spl/tests/regexiterator_setpregflags.phpt      |   34 +
 .../regexiterator_setpregflags_exception.phpt      |   36 +
 .../spl_caching_iterator_constructor_flags.phpt    |   25 +
 .../spl_cachingiterator___toString_basic.phpt      |   16 +
 .../tests/spl_cachingiterator_setFlags_basic.phpt  |   16 +
 ext/spl/tests/spl_classes.phpt                     |   13 +
 .../tests/spl_fileinfo_getlinktarget_basic.phpt    |   22 +
 ext/spl/tests/spl_iterator_apply_error.phpt        |   26 +
 ext/spl/tests/spl_iterator_apply_error_001.phpt    |   20 +
 .../tests/spl_iterator_caching_count_basic.phpt    |   21 +
 .../tests/spl_iterator_caching_count_error.phpt    |   21 +
 .../tests/spl_iterator_caching_getcache_error.phpt |   21 +
 ext/spl/tests/spl_iterator_getcallchildren.phpt    |   39 +
 .../tests/spl_iterator_iterator_constructor.phpt   |   30 +
 .../spl_iterator_recursive_getiterator_error.phpt  |   16 +
 ext/spl/tests/spl_iterator_to_array_basic.phpt     |   13 +
 ext/spl/tests/spl_iterator_to_array_error.phpt     |   33 +
 ext/spl/tests/spl_limit_iterator_check_limits.phpt |   37 +
 ...eratorIterator_setMaxDepth_parameter_count.phpt |   28 +
 .../spl_recursive_iterator_iterator_key_case.phpt  |   33 +
 ext/sqlite/libsqlite/src/date.c                    |    2 +-
 ext/standard/array.c                               |    8 +-
 ext/standard/basic_functions.c                     |   58 +-
 ext/standard/dns.c                                 |    6 +-
 ext/standard/dns.h                                 |    8 +-
 ext/standard/exec.c                                |   12 +-
 ext/standard/file.c                                |   30 +-
 ext/standard/http_fopen_wrapper.c                  |   87 +-
 ext/standard/mail.c                                |    4 +-
 ext/standard/microtime.c                           |    5 +-
 ext/standard/pack.c                                |    9 +-
 ext/standard/reg.c                                 |   52 +-
 ext/standard/reg.h                                 |    3 +-
 ext/standard/streamsfuncs.c                        |   11 +-
 ext/standard/string.c                              |    2 +-
 ext/standard/strnatcmp.c                           |    6 +-
 .../tests/array/array_count_values_variation.phpt  |   14 +-
 .../tests/array/array_multisort_variation11.phpt   |   21 +
 ext/standard/tests/array/array_push_error2.phpt    |   29 +-
 ext/standard/tests/array/bug44929.phpt             |   31 +
 ext/standard/tests/array/bug48224.phpt             |   15 +
 ext/standard/tests/assert/assert02.phpt            |    2 +-
 ext/standard/tests/assert/assert03.phpt            |    2 +-
 ext/standard/tests/assert/assert04.phpt            |    2 +-
 ext/standard/tests/class_object/AutoInterface.inc  |    5 +
 ext/standard/tests/class_object/AutoLoaded.inc     |    5 +
 ext/standard/tests/class_object/AutoTest.inc       |   13 +
 .../tests/class_object/get_class_vars_error.phpt   |   38 +
 .../class_object/get_class_vars_variation1.phpt    |  181 +
 .../class_object/get_class_vars_variation2.phpt    |  168 +
 .../get_declared_classes_variation1.phpt           |   37 +
 .../get_declared_interfaces_variation1.phpt        |   37 +
 .../tests/class_object/interface_exists_error.phpt |   38 +
 .../class_object/interface_exists_variation1.phpt  |  184 +
 .../class_object/interface_exists_variation2.phpt  |  204 +
 .../class_object/interface_exists_variation3.phpt  |   35 +
 .../class_object/interface_exists_variation4.phpt  |   27 +
 .../class_object/is_subclass_of_variation_004.phpt |  175 +
 .../tests/class_object/property_exists_error.phpt  |   47 +
 .../class_object/property_exists_variation1.phpt   |   33 +
 .../tests/directory/DirectoryClass_basic_001.phpt  |    4 +-
 ext/standard/tests/file/bug44034.phpt              |   39 +
 ext/standard/tests/file/fgetcsv_variation14.phpt   |   30 +-
 ext/standard/tests/file/fgetcsv_variation21.phpt   |   30 +-
 .../tests/file/file_put_contents_variation2.phpt   |    4 +-
 ext/standard/tests/file/filetype_variation2.phpt   |   19 +-
 ext/standard/tests/file/fwrite_variation5.phpt     |    2 +-
 ext/standard/tests/file/tempnam_variation4.phpt    |   10 +
 ext/standard/tests/file/touch_basic-win32.phpt     |   12 +-
 ext/standard/tests/general_functions/bug47027.phpt |    2 +
 .../tests/general_functions/call_user_method.phpt  |   21 +
 .../get_magic_quotes_runtime.phpt                  |    2 +-
 ext/standard/tests/general_functions/intval.phpt   |    4 +-
 .../tests/general_functions/intval_variation1.phpt |  203 +
 .../tests/general_functions/intval_variation2.phpt |  185 +
 .../set_magic_quotes_runtime_basic.phpt            |    2 +-
 .../set_magic_quotes_runtime_variation1.phpt       |    2 +-
 ext/standard/tests/http/bug38802.phpt              |  172 +
 ext/standard/tests/http/ignore_errors.phpt         |  124 +
 ext/standard/tests/http/server.inc                 |   92 +
 .../tests/mail/ezmlm_hash_basic_64bit.phpt         |    4 +-
 ext/standard/tests/mail/mail_basic2.phpt           |    8 +-
 ext/standard/tests/mail/mail_variation2.phpt       |    4 +-
 ext/standard/tests/math/abs_basiclong_64bit.phpt   |   60 +
 ext/standard/tests/math/acos_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/math/acosh_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/asin_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/math/asinh_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/atan2_basiclong_64bit.phpt |  364 +
 ext/standard/tests/math/atan_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/math/atanh_basiclong_64bit.phpt |   60 +
 .../tests/math/bindec_basiclong_64bit.phpt         |   51 +
 ext/standard/tests/math/ceil_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/math/cos_basiclong_64bit.phpt   |   62 +
 ext/standard/tests/math/cosh_basiclong_64bit.phpt  |   60 +
 .../tests/math/decbin_basiclong_64bit.phpt         |   60 +
 .../tests/math/dechex_basiclong_64bit.phpt         |   60 +
 .../tests/math/decoct_basiclong_64bit.phpt         |   60 +
 .../tests/math/deg2rad_basiclong_64bit.phpt        |   60 +
 ext/standard/tests/math/exp_basiclong_64bit.phpt   |   60 +
 ext/standard/tests/math/expm1_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/floor_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/fmod_basiclong_64bit.phpt  |  364 +
 .../tests/math/hexdec_basiclong_64bit.phpt         |   51 +
 ext/standard/tests/math/hypot_basiclong_64bit.phpt |  364 +
 .../tests/math/is_finite_basiclong_64bit.phpt      |   60 +
 .../tests/math/is_infinite_basiclong_64bit.phpt    |   60 +
 .../tests/math/is_nan_basiclong_64bit.phpt         |   60 +
 ext/standard/tests/math/log10_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/log1p_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/log_basiclong_64bit.phpt   |   60 +
 .../tests/math/octdec_basiclong_64bit.phpt         |   51 +
 ext/standard/tests/math/pow_basic.phpt             |   37 +-
 ext/standard/tests/math/pow_basic_64bit.phpt       |   35 +-
 ext/standard/tests/math/pow_basiclong_64bit.phpt   |  364 +
 .../tests/math/rad2deg_basiclong_64bit.phpt        |   60 +
 ext/standard/tests/math/round_basiclong_64bit.phpt |   60 +
 ext/standard/tests/math/sin_basiclong_64bit.phpt   |   62 +
 ext/standard/tests/math/sinh_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/math/sqrt_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/math/tan_basiclong_64bit.phpt   |   62 +
 ext/standard/tests/math/tanh_basiclong_64bit.phpt  |   60 +
 ext/standard/tests/misc/time_nanosleep_basic.phpt  |   23 +
 ext/standard/tests/misc/time_nanosleep_error1.phpt |   14 +
 ext/standard/tests/misc/time_nanosleep_error2.phpt |   14 +
 ext/standard/tests/misc/time_nanosleep_error3.phpt |   17 +
 ext/standard/tests/misc/time_nanosleep_error4.phpt |   17 +
 ext/standard/tests/misc/time_nanosleep_error5.phpt |   14 +
 .../tests/network/gethostbyname_basic001.phpt      |   10 +
 .../tests/network/gethostbyname_basic002.phpt      |   11 +
 .../tests/network/gethostbyname_error001.phpt      |   10 +
 .../tests/network/gethostbyname_error002.phpt      |   10 +
 .../tests/network/gethostbyname_error003.phpt      |   10 +
 .../tests/network/gethostbyname_error004.phpt      |   11 +
 .../tests/network/gethostbyname_error005.phpt      |   12 +
 .../tests/network/gethostbyname_error006.phpt      |   10 +
 .../tests/network/gethostbynamel_error.phpt        |    2 +-
 ext/standard/tests/network/ip.phpt                 |   12 +-
 ext/standard/tests/network/ip2long_error.phpt      |    4 +-
 ext/standard/tests/network/ip2long_variation1.phpt |   38 +-
 ext/standard/tests/network/ip_x86_64.phpt          |   12 +-
 ext/standard/tests/network/long2ip_error.phpt      |    4 +-
 ext/standard/tests/network/long2ip_variation1.phpt |   24 +-
 ext/standard/tests/serialize/bug46882.phpt         |    8 +
 ext/standard/tests/streams/bug47997.phpt           |   13 +
 ext/standard/tests/streams/bug48309.phpt           |   33 +
 .../streams/stream_copy_to_stream_socket.phpt      |   30 +
 ext/standard/tests/strings/bug38770.phpt           |    2 +-
 ext/standard/tests/strings/strcoll.phpt            |   21 +
 ext/standard/tests/strings/strcoll_error.phpt      |   44 +
 ext/standard/tests/versioning/php_sapi_name.phpt   |    9 +
 .../versioning/php_sapi_name_variation001.phpt     |   14 +
 ext/standard/var_unserializer.c                    |   29 +-
 ext/standard/var_unserializer.c.orig               |   63 +-
 ext/standard/var_unserializer.re                   |   27 +-
 ext/sysvshm/sysvshm.c                              |    4 +-
 ext/tidy/tests/tidy_error.phpt                     |   41 +
 ext/wddx/tests/bug48562.phpt                       |   22 +
 ext/wddx/wddx.c                                    |   18 +-
 ext/xmlrpc/config.m4                               |   24 +-
 ext/xmlrpc/tests/bug44996.phpt                     |   49 +
 ext/xmlrpc/tests/bug47818.phpt                     |   39 +
 ext/xmlrpc/xmlrpc-epi-php.c                        |   11 +-
 ext/xmlwriter/php_xmlwriter.c                      |   32 +-
 ext/xmlwriter/tests/bug48204.phpt                  |   17 +
 .../tests/xmlwriter_open_uri_error_001.phpt        |   16 +
 .../tests/xmlwriter_open_uri_error_002.phpt        |   16 +
 .../tests/xmlwriter_open_uri_error_003.phpt        |   16 +
 .../tests/xmlwriter_open_uri_error_004.phpt        |   16 +
 .../tests/xmlwriter_open_uri_error_005.phpt        |   16 +
 .../xmlwriter_set_indent_string_basic_001.phpt     |   24 +
 .../xmlwriter_set_indent_string_error_001.phpt     |   24 +
 .../xmlwriter_write_attribute_ns_basic_001.phpt    |   28 +
 .../xmlwriter_write_attribute_ns_error_001.phpt    |   35 +
 .../tests/xmlwriter_write_dtd_basic_001.phpt       |   22 +
 .../tests/xmlwriter_write_dtd_error_001.phpt       |   15 +
 ext/xsl/tests/bug26384.phpt                        |    2 +-
 ext/xsl/tests/bug48221.phpt                        |   17 +
 ext/xsl/tests/phpfunc-nostring.xsl                 |   10 +
 ext/xsl/tests/phpfunc-undef.xsl                    |   10 +
 ext/xsl/tests/phpfunc.xsl                          |   11 +
 ext/xsl/tests/xsl-phpinfo.phpt                     |   18 +
 ext/xsl/tests/xslt001.phpt                         |    2 +-
 ext/xsl/tests/xslt002.phpt                         |    2 +-
 ext/xsl/tests/xslt003.phpt                         |    2 +-
 ext/xsl/tests/xslt004.phpt                         |    2 +-
 ext/xsl/tests/xslt005.phpt                         |    2 +-
 ext/xsl/tests/xslt006.phpt                         |    2 +-
 ext/xsl/tests/xslt007.phpt                         |    2 +-
 ext/xsl/tests/xslt008.phpt                         |    2 +-
 ext/xsl/tests/xslt009.phpt                         |    2 +-
 ext/xsl/tests/xslt010.phpt                         |    3 +-
 ext/xsl/tests/xslt011.phpt                         |    2 +-
 ext/xsl/tests/xslt012.phpt                         |    2 +-
 .../xsltprocessor_getParameter-invalidparam.phpt   |   17 +
 .../xsltprocessor_getParameter-wrongparam.phpt     |   26 +
 ext/xsl/tests/xsltprocessor_getParameter.phpt      |   19 +
 ...sltprocessor_registerPHPFunctions-allfuncs.phpt |   30 +
 ...cessor_registerPHPFunctions-array-multiple.phpt |   34 +
 ...ssor_registerPHPFunctions-array-notallowed.phpt |   28 +
 .../xsltprocessor_registerPHPFunctions-array.phpt  |   26 +
 ...rocessor_registerPHPFunctions-funcnostring.phpt |   37 +
 ...ltprocessor_registerPHPFunctions-funcundef.phpt |   36 +
 .../xsltprocessor_registerPHPFunctions-null.phpt   |   32 +
 ...essor_registerPHPFunctions-string-multiple.phpt |   32 +
 ...sor_registerPHPFunctions-string-notallowed.phpt |   28 +
 .../xsltprocessor_registerPHPFunctions-string.phpt |   26 +
 ...xsltprocessor_removeParameter-invalidparam.phpt |   18 +
 .../xsltprocessor_removeParameter-wrongparams.phpt |   23 +
 ext/xsl/tests/xsltprocessor_removeParameter.phpt   |   20 +
 .../xsltprocessor_setparameter-errorquote.phpt     |   21 +
 .../tests/xsltprocessor_setparameter-nostring.phpt |   22 +
 ext/xsl/xsltprocessor.c                            |    8 +-
 ext/zip/lib/zip_open.c                             |    4 +
 ext/zip/php_zip.c                                  |   13 +-
 ext/zip/tests/bug47667.phpt                        |   40 +
 ext/zlib/tests/008.phpt                            |   11 +
 ext/zlib/tests/bug.tar                             |  Bin 4720640 -> 0 bytes
 ext/zlib/tests/bug_40189.phpt                      |    2 +-
 ext/zlib/tests/bug_40189_2.phpt                    |   14 -
 ext/zlib/tests/gzinflate-bug42663.phpt             |   23 +
 ext/zlib/tests/gzinflate_length.phpt               |   26 +
 ext/zlib/zlib.c                                    |  212 +-
 generated_lists                                    |    2 +-
 main/main.c                                        |   10 +-
 main/network.c                                     |   15 +-
 main/output.c                                      |    6 +-
 main/php_config.h.in                               |   18 +-
 main/php_sprintf.c                                 |    6 +-
 main/php_streams.h                                 |    4 +-
 main/php_version.h                                 |    6 +-
 main/spprintf.c                                    |    3 +-
 main/streams/cast.c                                |   10 +-
 main/streams/memory.c                              |    3 +-
 main/streams/mmap.c                                |   16 +-
 main/streams/php_stream_mmap.h                     |    7 +-
 main/streams/streams.c                             |  110 +-
 pear/install-pear-nozlib.phar                      |56776 ++++++++++----------
 php.ini-recommended                                |    2 +-
 run-tests.php                                      |   98 +-
 sapi/cgi/cgi_main.c                                |   12 +-
 sapi/cli/php.1.in                                  |    4 +-
 sapi/cli/php_cli.c                                 |   43 +-
 sapi/cli/tests/006.phpt                            |    6 +-
 sapi/nsapi/nsapi.c                                 |   16 +-
 scripts/phpize.in                                  |   30 +-
 scripts/phpize.m4                                  |   16 +-
 tests/classes/inheritance_007.phpt                 |   20 +-
 tests/classes/interface_optional_arg_003.inc       |    4 +
 tests/classes/interface_optional_arg_003.phpt      |   17 +
 tests/classes/iterators_008.phpt                   |   45 +
 .../static_properties_undeclared_assign.phpt       |    9 +
 .../static_properties_undeclared_assignInc.phpt    |    9 +
 .../static_properties_undeclared_assignRef.phpt    |   10 +
 .../classes/static_properties_undeclared_inc.phpt  |    9 +
 .../static_properties_undeclared_isset.phpt        |    9 +
 .../classes/static_properties_undeclared_read.phpt |    9 +
 tests/func/ini_alter.phpt                          |   19 +
 tests/lang/bug45392.phpt                           |   21 -
 tests/lang/engine_assignExecutionOrder_001.phpt    |  152 +
 tests/lang/engine_assignExecutionOrder_002.phpt    |  135 +
 tests/lang/engine_assignExecutionOrder_003.phpt    |   96 +
 tests/lang/engine_assignExecutionOrder_004.phpt    |   52 +
 tests/lang/engine_assignExecutionOrder_005.phpt    |   74 +
 tests/lang/engine_assignExecutionOrder_006.phpt    |  138 +
 tests/lang/engine_assignExecutionOrder_007.phpt    |   47 +
 tests/lang/engine_assignExecutionOrder_008.phpt    |   75 +
 tests/lang/engine_assignExecutionOrder_009.phpt    |   36 +
 tests/lang/execution_order.phpt                    |  198 +
 tests/lang/foreachLoop.001.phpt                    |   64 +
 tests/lang/foreachLoop.002.phpt                    |  173 +
 tests/lang/foreachLoop.003.phpt                    |   46 +
 tests/lang/foreachLoop.004.phpt                    |   76 +
 tests/lang/foreachLoop.005.phpt                    |   23 +
 tests/lang/foreachLoop.006.phpt                    |   11 +
 tests/lang/foreachLoop.007.phpt                    |   11 +
 tests/lang/foreachLoop.008.phpt                    |   10 +
 tests/lang/foreachLoop.009.phpt                    |   82 +
 tests/lang/foreachLoop.010.phpt                    |   40 +
 tests/lang/foreachLoop.011.phpt                    |   34 +
 tests/lang/foreachLoop.012.phpt                    |  494 +
 tests/lang/foreachLoop.013.phpt                    |  555 +
 tests/lang/foreachLoop.014.phpt                    |  556 +
 tests/lang/foreachLoop.015.phpt                    |  557 +
 tests/lang/foreachLoop.016.phpt                    |  198 +
 tests/lang/foreachLoop.017.phpt                    |   11 +
 tests/lang/foreachLoopObjects.001.phpt             |   69 +
 tests/lang/foreachLoopObjects.002.phpt             |  585 +
 tests/lang/foreachLoopObjects.003.phpt             |  249 +
 tests/lang/foreachLoopObjects.004.phpt             |   54 +
 tests/lang/foreachLoopObjects.005.phpt             |   78 +
 tests/lang/foreachLoopObjects.006.phpt             |  147 +
 tests/lang/operators/add_basiclong_64bit.phpt      |  582 +
 tests/lang/operators/add_variationStr.phpt         |  416 +
 .../lang/operators/bitwiseAnd_basiclong_64bit.phpt |  582 +
 tests/lang/operators/bitwiseAnd_variationStr.phpt  |  416 +
 .../lang/operators/bitwiseNot_basiclong_64bit.phpt |   60 +
 tests/lang/operators/bitwiseNot_variationStr.phpt  |   48 +
 .../lang/operators/bitwiseOr_basiclong_64bit.phpt  |  583 +
 tests/lang/operators/bitwiseOr_variationStr.phpt   |  416 +
 .../bitwiseShiftLeft_basiclong_64bit.phpt          |  583 +
 .../operators/bitwiseShiftLeft_variationStr.phpt   |  421 +
 .../bitwiseShiftLeft_variationStr_64bit.phpt       |  420 +
 .../bitwiseShiftRight_basiclong_64bit.phpt         |  583 +
 .../operators/bitwiseShiftRight_variationStr.phpt  |  416 +
 .../lang/operators/bitwiseXor_basiclong_64bit.phpt |  583 +
 tests/lang/operators/bitwiseXor_variationStr.phpt  |  416 +
 tests/lang/operators/divide_basiclong_64bit.phpt   |  582 +
 tests/lang/operators/divide_variationStr.phpt      |  416 +
 tests/lang/operators/modulus_basiclong_64bit.phpt  |  582 +
 tests/lang/operators/modulus_variationStr.phpt     |  416 +
 tests/lang/operators/multiply_basiclong_64bit.phpt |  582 +
 tests/lang/operators/multiply_variationStr.phpt    |  416 +
 tests/lang/operators/negate_basiclong_64bit.phpt   |   60 +
 tests/lang/operators/negate_variationStr.phpt      |   48 +
 tests/lang/operators/operator_equals_basic.phpt    |   65 +
 .../lang/operators/operator_equals_variation.phpt  |   63 +
 .../operators/operator_equals_variation_64bit.phpt |   65 +
 tests/lang/operators/operator_gt_basic.phpt        |   65 +
 .../lang/operators/operator_gt_or_equal_basic.phpt |   65 +
 .../operators/operator_gt_or_equal_variation.phpt  |   63 +
 .../operator_gt_or_equal_variation_64bit.phpt      |   63 +
 tests/lang/operators/operator_gt_variation.phpt    |   62 +
 .../operators/operator_gt_variation_64bit.phpt     |   62 +
 tests/lang/operators/operator_identical_basic.phpt |   65 +
 .../operators/operator_identical_variation.phpt    |   63 +
 .../operator_identical_variation_64bit.phpt        |   65 +
 tests/lang/operators/operator_lt_basic.phpt        |   62 +
 .../lang/operators/operator_lt_or_equal_basic.phpt |   64 +
 .../operators/operator_lt_or_equal_variation.phpt  |   63 +
 .../operator_lt_or_equal_variation_64bit.phpt      |   63 +
 tests/lang/operators/operator_lt_variation.phpt    |   60 +
 .../operators/operator_lt_variation_64bit.phpt     |   60 +
 tests/lang/operators/operator_notequals_basic.phpt |   65 +
 .../operators/operator_notequals_variation.phpt    |   63 +
 .../operator_notequals_variation_64bit.phpt        |   65 +
 .../operators/operator_notidentical_basic.phpt     |   65 +
 .../operators/operator_notidentical_variation.phpt |   64 +
 .../operator_notidentical_variation_64bit.phpt     |   65 +
 tests/lang/operators/postdec_basiclong_64bit.phpt  |   61 +
 tests/lang/operators/postdec_variationStr.phpt     |   49 +
 tests/lang/operators/postinc_basiclong_64bit.phpt  |   61 +
 tests/lang/operators/postinc_variationStr.phpt     |   49 +
 tests/lang/operators/predec_basiclong_64bit.phpt   |   60 +
 tests/lang/operators/predec_variationStr.phpt      |   48 +
 tests/lang/operators/preinc_basiclong_64bit.phpt   |   60 +
 tests/lang/operators/preinc_variationStr.phpt      |   48 +
 tests/lang/operators/subtract_basiclong_64bit.phpt |  582 +
 tests/lang/operators/subtract_variationStr.phpt    |  416 +
 tests/lang/returnByReference.001.phpt              |   20 +
 tests/lang/returnByReference.002.phpt              |   29 +
 tests/lang/returnByReference.003.phpt              |   55 +
 tests/lang/returnByReference.004.phpt              |   57 +
 tests/lang/returnByReference.005.phpt              |   58 +
 tests/lang/returnByReference.006.phpt              |   60 +
 tests/lang/returnByReference.007.phpt              |   63 +
 tests/lang/returnByReference.008.phpt              |   64 +
 tests/lang/returnByReference.009.phpt              |   39 +
 tests/output/ob_001.phpt                           |    8 +
 tests/output/ob_002.phpt                           |    9 +
 tests/output/ob_003.phpt                           |   13 +
 tests/output/ob_004.phpt                           |   11 +
 tests/output/ob_005.phpt                           |   14 +
 tests/output/ob_006.phpt                           |   12 +
 tests/output/ob_007.phpt                           |   11 +
 tests/output/ob_008.phpt                           |   11 +
 tests/output/ob_009.phpt                           |   12 +
 tests/output/ob_010.phpt                           |   13 +
 tests/output/ob_get_status.phpt                    |   34 +
 win32/build/config.w32                             |    6 +-
 win32/build/config.w32.h.in                        |    4 +-
 1147 files changed, 105271 insertions(+), 42256 deletions(-)
 create mode 100644 Zend/tests/bug39018.phpt
 create mode 100644 Zend/tests/bug39018_2.phpt
 create mode 100644 Zend/tests/bug42143.phpt
 create mode 100644 Zend/tests/bug45877.phpt
 create mode 100644 Zend/tests/bug47704.phpt
 create mode 100644 Zend/tests/bug47801.phpt
 create mode 100644 Zend/tests/bug47836.phpt
 create mode 100644 Zend/tests/bug47981.phpt
 create mode 100644 Zend/tests/bug48228.phpt
 create mode 100644 Zend/tests/bug48248.phpt
 create mode 100644 Zend/tests/bug48408.phpt
 create mode 100644 Zend/tests/bug48409.phpt
 create mode 100644 Zend/tests/bug48428.phpt
 create mode 100644 Zend/tests/exception_010.phpt
 create mode 100644 Zend/tests/function_exists_basic.phpt
 create mode 100644 Zend/tests/function_exists_error.phpt
 create mode 100644 Zend/tests/function_exists_variation1.phpt
 create mode 100644 Zend/tests/get_defined_functions_basic.phpt
 create mode 100644 Zend/tests/get_defined_functions_error.phpt
 create mode 100644 ext/curl/tests/bug46711.phpt
 create mode 100644 ext/curl/tests/bug48203.phpt
 create mode 100644 ext/curl/tests/bug48514.phpt
 create mode 100644 ext/curl/tests/curl_basic_001.phpt
 create mode 100644 ext/curl/tests/curl_basic_002.phpt
 create mode 100644 ext/curl/tests/curl_basic_003.phpt
 create mode 100644 ext/curl/tests/curl_basic_004.phpt
 create mode 100644 ext/curl/tests/curl_basic_005.phpt
 create mode 100755 ext/curl/tests/curl_basic_007.phpt
 create mode 100755 ext/curl/tests/curl_basic_008.phpt
 create mode 100644 ext/curl/tests/curl_basic_009.phpt
 create mode 100644 ext/curl/tests/curl_basic_010.phpt
 create mode 100644 ext/curl/tests/curl_basic_011.phpt
 create mode 100644 ext/curl/tests/curl_basic_012.phpt
 create mode 100644 ext/curl/tests/curl_basic_013.phpt
 create mode 100644 ext/curl/tests/curl_basic_014.phpt
 create mode 100644 ext/curl/tests/curl_basic_015.phpt
 create mode 100644 ext/curl/tests/curl_basic_016.phpt
 create mode 100644 ext/curl/tests/curl_basic_017.phpt
 create mode 100644 ext/curl/tests/curl_basic_018.phpt
 create mode 100644 ext/curl/tests/curl_basic_019.phpt
 create mode 100644 ext/curl/tests/curl_basic_020.phpt
 create mode 100644 ext/curl/tests/curl_basic_021.phpt
 create mode 100644 ext/curl/tests/responder/get.php
 delete mode 100644 ext/date/config.m4
 create mode 100644 ext/date/config0.m4
 create mode 100644 ext/date/tests/DateTimeZone_clone_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_clone_basic2.phpt
 create mode 100644 ext/date/tests/DateTimeZone_clone_basic3.phpt
 create mode 100644 ext/date/tests/DateTimeZone_clone_basic4.phpt
 create mode 100644 ext/date/tests/DateTimeZone_compare_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_construct_basic.phpt
 create mode 100644 ext/date/tests/DateTimeZone_construct_error.phpt
 create mode 100644 ext/date/tests/DateTimeZone_construct_variation1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_extends_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getName_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getName_error.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getOffset_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getOffset_error.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getOffset_variation1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getTransitions_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_getTransitions_error.phpt
 create mode 100644 ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_listIdentifiers_basic1.phpt
 create mode 100644 ext/date/tests/DateTimeZone_serialize.phpt
 create mode 100644 ext/date/tests/DateTimeZone_verify.phpt
 create mode 100644 ext/date/tests/DateTime_clone_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_clone_basic2.phpt
 create mode 100644 ext/date/tests/DateTime_clone_basic3.phpt
 create mode 100644 ext/date/tests/DateTime_clone_basic4.phpt
 create mode 100644 ext/date/tests/DateTime_compare_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_construct_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_construct_error.phpt
 create mode 100644 ext/date/tests/DateTime_construct_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_construct_variation2.phpt
 create mode 100644 ext/date/tests/DateTime_extends_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_extends_basic2.phpt
 create mode 100644 ext/date/tests/DateTime_extends_basic3.phpt
 create mode 100644 ext/date/tests/DateTime_format_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_format_basic2.phpt
 create mode 100644 ext/date/tests/DateTime_format_error.phpt
 create mode 100644 ext/date/tests/DateTime_format_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_getOffset_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_getOffset_error.phpt
 create mode 100644 ext/date/tests/DateTime_getTimeZone_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_modify_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_modify_error.phpt
 create mode 100644 ext/date/tests/DateTime_modify_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_serialize.phpt
 create mode 100644 ext/date/tests/DateTime_setDate_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_setDate_error.phpt
 create mode 100644 ext/date/tests/DateTime_setDate_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_setDate_variation2.phpt
 create mode 100644 ext/date/tests/DateTime_setDate_variation3.phpt
 create mode 100644 ext/date/tests/DateTime_setISODate_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_setISODate_error.phpt
 create mode 100644 ext/date/tests/DateTime_setISODate_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_setISODate_variation2.phpt
 create mode 100644 ext/date/tests/DateTime_setISODate_variation3.phpt
 create mode 100644 ext/date/tests/DateTime_setTime_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_setTime_error.phpt
 create mode 100644 ext/date/tests/DateTime_setTime_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_setTime_variation2.phpt
 create mode 100644 ext/date/tests/DateTime_setTime_variation3.phpt
 create mode 100644 ext/date/tests/DateTime_setTimezone_basic1.phpt
 create mode 100644 ext/date/tests/DateTime_setTimezone_error.phpt
 create mode 100644 ext/date/tests/DateTime_setTimezone_variation1.phpt
 create mode 100644 ext/date/tests/DateTime_verify.phpt
 create mode 100644 ext/date/tests/bug48058.phpt
 create mode 100644 ext/date/tests/bug48097.phpt
 create mode 100644 ext/date/tests/checkdate_basic1.phpt
 create mode 100644 ext/date/tests/checkdate_error.phpt
 create mode 100644 ext/date/tests/checkdate_variation1.phpt
 create mode 100644 ext/date/tests/checkdate_variation2.phpt
 create mode 100644 ext/date/tests/checkdate_variation3.phpt
 create mode 100644 ext/date/tests/date_basic1.phpt
 create mode 100644 ext/date/tests/date_create-relative.phpt
 create mode 100644 ext/date/tests/date_create_basic.phpt
 create mode 100644 ext/date/tests/date_create_error.phpt
 create mode 100644 ext/date/tests/date_create_variation1.phpt
 create mode 100644 ext/date/tests/date_create_variation2.phpt
 create mode 100644 ext/date/tests/date_date_set_basic1.phpt
 create mode 100644 ext/date/tests/date_date_set_error.phpt
 create mode 100644 ext/date/tests/date_date_set_variation1.phpt
 create mode 100644 ext/date/tests/date_date_set_variation2.phpt
 create mode 100644 ext/date/tests/date_date_set_variation3.phpt
 create mode 100644 ext/date/tests/date_date_set_variation4.phpt
 create mode 100644 ext/date/tests/date_error.phpt
 create mode 100644 ext/date/tests/date_format_basic1.phpt
 create mode 100644 ext/date/tests/date_format_error.phpt
 create mode 100644 ext/date/tests/date_format_variation1.phpt
 create mode 100644 ext/date/tests/date_format_variation2.phpt
 create mode 100644 ext/date/tests/date_isodate_set_basic1.phpt
 create mode 100644 ext/date/tests/date_isodate_set_error.phpt
 create mode 100644 ext/date/tests/date_isodate_set_variation1.phpt
 create mode 100644 ext/date/tests/date_isodate_set_variation2.phpt
 create mode 100644 ext/date/tests/date_isodate_set_variation3.phpt
 create mode 100644 ext/date/tests/date_isodate_set_variation4.phpt
 create mode 100644 ext/date/tests/date_modify_basic1.phpt
 create mode 100644 ext/date/tests/date_modify_error.phpt
 create mode 100644 ext/date/tests/date_modify_variation1.phpt
 create mode 100644 ext/date/tests/date_modify_variation2.phpt
 create mode 100644 ext/date/tests/date_offset_get_basic1.phpt
 create mode 100644 ext/date/tests/date_offset_get_error.phpt
 create mode 100644 ext/date/tests/date_offset_get_variation1.phpt
 create mode 100644 ext/date/tests/date_parse_basic1.phpt
 create mode 100644 ext/date/tests/date_parse_error.phpt
 create mode 100644 ext/date/tests/date_parse_variation1.phpt
 create mode 100644 ext/date/tests/date_time_set_basic1.phpt
 create mode 100644 ext/date/tests/date_time_set_error.phpt
 create mode 100644 ext/date/tests/date_time_set_variation1.phpt
 create mode 100644 ext/date/tests/date_time_set_variation2.phpt
 create mode 100644 ext/date/tests/date_time_set_variation3.phpt
 create mode 100644 ext/date/tests/date_time_set_variation4.phpt
 create mode 100644 ext/date/tests/date_timezone_get_basic1.phpt
 create mode 100644 ext/date/tests/date_timezone_get_error.phpt
 create mode 100644 ext/date/tests/date_timezone_get_variation1.phpt
 create mode 100644 ext/date/tests/date_timezone_set_basic1.phpt
 create mode 100644 ext/date/tests/date_timezone_set_error.phpt
 create mode 100644 ext/date/tests/date_timezone_set_variation1.phpt
 create mode 100644 ext/date/tests/date_timezone_set_variation2.phpt
 create mode 100644 ext/date/tests/date_variation1.phpt
 create mode 100644 ext/date/tests/date_variation2.phpt
 create mode 100644 ext/date/tests/idate_error.phpt
 create mode 100644 ext/date/tests/localtime_error.phpt
 create mode 100644 ext/date/tests/mktime_basic1.phpt
 create mode 100644 ext/date/tests/mktime_error.phpt
 create mode 100644 ext/date/tests/mktime_variation1.phpt
 create mode 100644 ext/date/tests/mktime_variation2.phpt
 create mode 100644 ext/date/tests/mktime_variation3.phpt
 create mode 100644 ext/date/tests/mktime_variation4.phpt
 create mode 100644 ext/date/tests/mktime_variation5.phpt
 create mode 100644 ext/date/tests/mktime_variation6.phpt
 create mode 100644 ext/date/tests/mktime_variation7.phpt
 create mode 100644 ext/date/tests/strtotime-relative.phpt
 create mode 100644 ext/date/tests/timezone_abbreviations_list_basic1.phpt
 create mode 100644 ext/date/tests/timezone_identifiers_list_basic1.phpt
 create mode 100644 ext/date/tests/timezone_name_from_abbr_basic1.phpt
 create mode 100644 ext/date/tests/timezone_name_from_abbr_error.phpt
 create mode 100644 ext/date/tests/timezone_name_from_abbr_variation1.phpt
 create mode 100644 ext/date/tests/timezone_name_from_abbr_variation2.phpt
 create mode 100644 ext/date/tests/timezone_name_from_abbr_variation3.phpt
 create mode 100644 ext/date/tests/timezone_name_get_error.phpt
 create mode 100644 ext/date/tests/timezone_offset_get_basic1.phpt
 create mode 100644 ext/date/tests/timezone_offset_get_error.phpt
 create mode 100644 ext/date/tests/timezone_offset_get_variation1.phpt
 create mode 100644 ext/date/tests/timezone_offset_get_variation2.phpt
 create mode 100644 ext/date/tests/timezone_open_basic1.phpt
 create mode 100644 ext/date/tests/timezone_open_error.phpt
 create mode 100644 ext/date/tests/timezone_open_variation1.phpt
 create mode 100644 ext/date/tests/timezone_transitions_get_basic1.phpt
 create mode 100644 ext/date/tests/timezone_transitions_get_error.phpt
 create mode 100644 ext/date/tests/timezone_transitions_get_variation1.phpt
 create mode 100644 ext/dba/tests/bug48240.phpt
 create mode 100644 ext/dom/tests/DOMAttr_construct_error_001.phpt
 create mode 100644 ext/dom/tests/DOMAttr_name_basic_001.phpt
 create mode 100755 ext/dom/tests/DOMAttr_ownerElement_error_001.phpt
 create mode 100644 ext/dom/tests/DOMAttr_value_basic_002.phpt
 create mode 100644 ext/dom/tests/DOMCDATASection_construct_error_001.phpt
 create mode 100644 ext/dom/tests/DOMCharacterData_appendData_error_001.phpt
 create mode 100755 ext/dom/tests/DOMCharacterData_data_error_002.phpt
 create mode 100644 ext/dom/tests/DOMCharacterData_deleteData_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMCharacterData_deleteData_error_001.phpt
 create mode 100644 ext/dom/tests/DOMCharacterData_deleteData_error_002.phpt
 create mode 100644 ext/dom/tests/DOMCharacterData_insertData_error_001.phpt
 create mode 100644 ext/dom/tests/DOMCharacterData_replaceData_error_001.phpt
 create mode 100644 ext/dom/tests/DOMComment_construct_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMComment_construct_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_appendXML_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_appendXML_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_appendXML_error_002.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_appendXML_error_003.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_construct_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt
 create mode 100644 ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_entities_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_internalSubset_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_name_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_notations_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_publicId_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_publicId_error_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_systemId_basic_001.phpt
 create mode 100644 ext/dom/tests/DOMDocumentType_systemId_error_001.phpt
 create mode 100644 ext/dom/tests/bug47430.phpt
 create mode 100644 ext/dom/tests/bug47849.phpt
 create mode 100644 ext/exif/tests/bug48378.jpeg
 create mode 100644 ext/exif/tests/bug48378.phpt
 create mode 100644 ext/filter/tests/bug47745.phpt
 create mode 100644 ext/gd/tests/bug45799.phpt
 create mode 100644 ext/iconv/tests/iconv_basic.phpt
 create mode 100644 ext/iconv/tests/iconv_encoding_basic.phpt
 create mode 100644 ext/iconv/tests/iconv_get_encoding_error.phpt
 create mode 100644 ext/iconv/tests/iconv_mime_decode_headers_variation1.phpt
 create mode 100644 ext/iconv/tests/iconv_mime_decode_headers_variation2.phpt
 create mode 100644 ext/iconv/tests/iconv_mime_decode_headers_variation3.phpt
 create mode 100644 ext/iconv/tests/iconv_mime_decode_variation1.phpt
 create mode 100644 ext/iconv/tests/iconv_mime_decode_variation2.phpt
 create mode 100644 ext/iconv/tests/iconv_mime_decode_variation3.phpt
 create mode 100644 ext/iconv/tests/iconv_set_encoding_error.phpt
 create mode 100644 ext/iconv/tests/iconv_set_encoding_variation.phpt
 create mode 100644 ext/iconv/tests/iconv_stream_filter_delimiter.phpt
 create mode 100644 ext/iconv/tests/iconv_strlen_basic.phpt
 create mode 100644 ext/iconv/tests/iconv_strlen_error1.phpt
 create mode 100644 ext/iconv/tests/iconv_strlen_error2.phpt
 create mode 100644 ext/iconv/tests/iconv_strlen_variation1.phpt
 create mode 100644 ext/iconv/tests/iconv_strlen_variation2.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_basic.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_error1.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_error2.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_variation1.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_variation2.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_variation3.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_variation3_64bit.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_variation4.phpt
 create mode 100644 ext/iconv/tests/iconv_strpos_variation5.phpt
 create mode 100644 ext/iconv/tests/iconv_strrpos_basic.phpt
 create mode 100644 ext/iconv/tests/iconv_strrpos_error1.phpt
 create mode 100644 ext/iconv/tests/iconv_strrpos_error2.phpt
 create mode 100644 ext/iconv/tests/iconv_strrpos_variation1.phpt
 create mode 100644 ext/iconv/tests/iconv_strrpos_variation2.phpt
 create mode 100644 ext/iconv/tests/iconv_strrpos_variation3.phpt
 create mode 100644 ext/iconv/tests/iconv_substr_basic.phpt
 create mode 100644 ext/iconv/tests/iconv_substr_error1.phpt
 create mode 100644 ext/iconv/tests/iconv_substr_error2.phpt
 create mode 100644 ext/imap/tests/imap_body.phpt
 create mode 100644 ext/imap/tests/imap_expunge_error.phpt
 create mode 100644 ext/imap/tests/imap_headers.phpt
 create mode 100644 ext/imap/tests/imap_num_msg_error.phpt
 create mode 100644 ext/imap/tests/imap_num_recent_error.phpt
 create mode 100644 ext/imap/tests/imap_open_error.phpt
 create mode 100644 ext/imap/tests/imap_ping_error.phpt
 create mode 100644 ext/json/tests/bug47644.phpt
 create mode 100644 ext/json/tests/json_decode_basic.phpt
 create mode 100644 ext/json/tests/json_decode_error.phpt
 create mode 100644 ext/json/tests/json_encode_basic.phpt
 create mode 100644 ext/json/tests/json_encode_basic_utf8.phpt
 create mode 100644 ext/json/tests/json_encode_error.phpt
 create mode 100644 ext/ldap/tests/bug48441.phpt
 create mode 100644 ext/ldap/tests/connect.inc
 create mode 100644 ext/ldap/tests/skipifbindfailure.inc
 create mode 100644 ext/mbstring/tests/mb_convert_encoding_stateful.phpt
 create mode 100644 ext/mysqli/tests/bug46109.phpt
 create mode 100644 ext/odbc/tests/config.inc
 create mode 100644 ext/odbc/tests/odbc_columnprivileges_001.phpt
 create mode 100644 ext/odbc/tests/odbc_columns_001.phpt
 create mode 100644 ext/odbc/tests/odbc_data_source_001.phpt
 create mode 100644 ext/odbc/tests/odbc_exec_001.phpt
 create mode 100644 ext/odbc/tests/odbc_exec_002.phpt
 create mode 100644 ext/odbc/tests/odbc_free_result_001.phpt
 create mode 100644 ext/odbc/tests/odbc_tables_001.phpt
 create mode 100644 ext/odbc/tests/skipif.inc
 create mode 100644 ext/openssl/tests/bug47828.phpt
 create mode 100644 ext/pcntl/tests/bug47566.phpt
 create mode 100644 ext/pcre/tests/bug47662.phpt
 create mode 100644 ext/pdo/tests/bug47769.phpt
 create mode 100644 ext/pdo_oci/tests/bug44301.phpt
 create mode 100644 ext/posix/tests/posix_access.phpt
 create mode 100644 ext/posix/tests/posix_access_error_modes.phpt
 create mode 100644 ext/posix/tests/posix_access_error_wrongparams.phpt
 create mode 100644 ext/posix/tests/posix_access_safemode.phpt
 create mode 100644 ext/posix/tests/posix_ctermid.phpt
 create mode 100644 ext/posix/tests/posix_getcwd_basic.phpt
 create mode 100644 ext/posix/tests/posix_getgrgid.phpt
 create mode 100644 ext/posix/tests/posix_getgrgid_basic.phpt
 create mode 100644 ext/posix/tests/posix_getgrgid_macosx.phpt
 create mode 100644 ext/posix/tests/posix_getgrgid_wrongparams.phpt
 create mode 100644 ext/posix/tests/posix_getgrnam_basic.phpt
 create mode 100644 ext/posix/tests/posix_getgroups_basic.phpt
 create mode 100644 ext/posix/tests/posix_getpgid_basic.phpt
 create mode 100644 ext/posix/tests/posix_getpgrp_basic.phpt
 create mode 100644 ext/posix/tests/posix_getpid_basic.phpt
 create mode 100644 ext/posix/tests/posix_getppid_basic.phpt
 create mode 100644 ext/posix/tests/posix_getpwnam_basic.phpt
 create mode 100644 ext/posix/tests/posix_getpwuid_basic.phpt
 create mode 100644 ext/posix/tests/posix_getrlimit_basic.phpt
 create mode 100644 ext/posix/tests/posix_getsid.phpt
 create mode 100644 ext/posix/tests/posix_getsid_basic.phpt
 create mode 100644 ext/posix/tests/posix_getsid_error.phpt
 create mode 100644 ext/posix/tests/posix_initgroups_basic.phpt
 create mode 100644 ext/posix/tests/posix_kill_basic.phpt
 create mode 100644 ext/posix/tests/posix_mkfifo_safemode.phpt
 create mode 100644 ext/posix/tests/posix_mkfifo_wrongparams.phpt
 create mode 100644 ext/posix/tests/posix_mknod_basic.phpt
 create mode 100644 ext/posix/tests/posix_times.phpt
 create mode 100644 ext/posix/tests/posix_times_basic.phpt
 create mode 100644 ext/posix/tests/posix_ttyname.phpt
 create mode 100644 ext/posix/tests/posix_ttyname_error_wrongparams.phpt
 create mode 100644 ext/posix/tests/posix_uname.phpt
 create mode 100644 ext/posix/tests/posix_uname_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_FileInfo_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_FileInfo_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_constructor_001.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_constructor_002.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_export_basic1.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_export_basic2.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getConstant_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getConstant_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getConstants_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getConstants_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getConstructor_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getConstructor_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getExtensionName_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getExtensionName_variation.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getExtension_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getExtension_variation.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getInterfaceNames_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getModifiers_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getName_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getName_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getName_error1.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_getParentClass.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_hasConstant_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_hasMethod_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_hasProperty_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isAbstract_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isFinal_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInstance_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInstance_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInstantiable_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInstantiable_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInstantiable_variation.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInterface_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInternal_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isInternal_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isIterateable_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isIterateable_variation1.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isSubclassOf_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isSubclassOf_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isSubclassOf_error1.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isUserDefined_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionClass_isUserDefined_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_FileInfo_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_FileInfo_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject___toString_basic1.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject___toString_basic2.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_constructor_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_constructor_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_export_basic1.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_export_basic2.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_export_basic3.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getConstant_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getConstant_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getConstants_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getConstants_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getConstructor_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getConstructor_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getName_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getName_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_getName_error1.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInstance_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInstance_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInstantiable_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInstantiable_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInstantiable_variation.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInternal_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isInternal_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isSubclassOf_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isSubclassOf_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isUserDefined_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionObject_isUserDefined_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_basic1.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_basic2.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_constructor_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_constructor_variation1.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_export_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_export_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_getDeclaringClass_variation1.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_getDocComment_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_getDocComment_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_getModifiers_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_getValue_error.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_isDefault_basic.phpt
 create mode 100644 ext/reflection/tests/ReflectionProperty_setValue_error.phpt
 create mode 100644 ext/reflection/tests/bug48336.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_FileInfo_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_FileInfo_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_constructor_001.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_constructor_002.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_export_basic1.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_export_basic2.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getConstant_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getConstant_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getConstants_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getConstants_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getConstructor_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getConstructor_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getExtension_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getExtension_variation.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getModifiers_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getName_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getName_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getName_error1.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_getParentClass.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_hasConstant_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_hasMethod_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_hasProperty_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isAbstract_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isFinal_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInstance_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInstance_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInstantiable_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInstantiable_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInstantiable_variation.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInterface_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInternal_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isInternal_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isIterateable_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isSubclassOf_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isSubclassOf_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isSubclassOf_error1.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isUserDefined_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionClass_isUserDefined_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_FileInfo_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_FileInfo_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject___toString_basic1.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject___toString_basic2.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_constructor_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_constructor_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_export_basic1.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_export_basic2.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_export_basic3.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getConstant_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getConstant_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getConstants_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getConstants_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getConstructor_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getConstructor_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getName_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getName_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_getName_error1.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInstance_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInstance_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInstantiable_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInstantiable_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInstantiable_variation.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInternal_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isInternal_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isSubclassOf_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isSubclassOf_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isUserDefined_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionObject_isUserDefined_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_basic1.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_basic2.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_constructor_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_constructor_variation1.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_export_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_export_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_getDeclaringClass_variation1.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_getDocComment_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_getDocComment_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_getModifiers_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_getValue_error.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_isDefault_basic.phpt
 delete mode 100644 ext/reflection/tests/reflectionProperty_setValue_error.phpt
 create mode 100644 ext/session/tests/bug42596.phpt
 create mode 100644 ext/soap/tests/bug48557.phpt
 create mode 100644 ext/soap/tests/bug48557.wsdl
 create mode 100644 ext/sockets/tests/ipv6_skipif.inc
 create mode 100644 ext/sockets/tests/socket_accept-wrongparams.phpt
 create mode 100644 ext/sockets/tests/socket_create_listen-nobind.phpt
 create mode 100644 ext/sockets/tests/socket_create_listen-wrongparams.phpt
 create mode 100644 ext/sockets/tests/socket_create_listen.phpt
 create mode 100644 ext/sockets/tests/socket_create_pair-wrongparams.phpt
 create mode 100644 ext/sockets/tests/socket_create_pair.phpt
 create mode 100644 ext/sockets/tests/socket_listen-wrongparams.phpt
 create mode 100644 ext/sockets/tests/socket_select-wrongparams-1.phpt
 create mode 100644 ext/sockets/tests/socket_select-wrongparams-2.phpt
 create mode 100644 ext/sockets/tests/socket_select-wrongparams-3.phpt
 create mode 100644 ext/sockets/tests/socket_select-wrongparams-4.phpt
 create mode 100644 ext/sockets/tests/socket_select.phpt
 create mode 100644 ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt
 create mode 100644 ext/sockets/tests/socket_sentto_recvfrom_ipv6_udp.phpt
 create mode 100644 ext/sockets/tests/socket_sentto_recvfrom_unix.phpt
 create mode 100644 ext/sockets/tests/socket_set_block-retval.phpt
 create mode 100644 ext/sockets/tests/socket_set_block-wrongparams.phpt
 create mode 100644 ext/sockets/tests/socket_set_nonblock-retval.phpt
 create mode 100644 ext/sockets/tests/socket_set_nonblock-wrongparams.phpt
 create mode 100644 ext/sockets/tests/socket_set_option_error_socket_option.phpt
 create mode 100644 ext/sockets/tests/socket_set_option_rcvtimeo.phpt
 create mode 100644 ext/sockets/tests/socket_set_option_seolinger.phpt
 create mode 100644 ext/sockets/tests/socket_set_option_sndtimeo.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fflush_basic_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fpassthru_basic.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fscanf_basic.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fseek_error_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_ftruncate_error_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fwrite_error_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
 create mode 100644 ext/spl/tests/SplFileObject_fwrite_variation_003.phpt
 create mode 100644 ext/spl/tests/SplFileObject_getCsvControl_basic_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_seek_error_001.phpt
 create mode 100644 ext/spl/tests/SplFileObject_testinput.csv
 create mode 100644 ext/spl/tests/bug45614.phpt
 create mode 100644 ext/spl/tests/bug45622.phpt
 create mode 100644 ext/spl/tests/bug45622b.phpt
 create mode 100644 ext/spl/tests/bug47534.phpt
 create mode 100755 ext/spl/tests/iterator_044.phpt.orig
 create mode 100644 ext/spl/tests/iterator_count.phpt
 create mode 100644 ext/spl/tests/iterator_to_array.phpt
 create mode 100644 ext/spl/tests/limititerator_seek.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_beginiteration_basic.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_enditeration_basic.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_getsubiterator_basic.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_getsubiterator_error.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_002.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_003.phpt
 create mode 100644 ext/spl/tests/recursiveiteratoriterator_nextelement_basic.phpt
 create mode 100644 ext/spl/tests/regexiterator_getpregflags.phpt
 create mode 100644 ext/spl/tests/regexiterator_setflags_exception.phpt
 create mode 100644 ext/spl/tests/regexiterator_setpregflags.phpt
 create mode 100644 ext/spl/tests/regexiterator_setpregflags_exception.phpt
 create mode 100644 ext/spl/tests/spl_caching_iterator_constructor_flags.phpt
 create mode 100644 ext/spl/tests/spl_cachingiterator___toString_basic.phpt
 create mode 100644 ext/spl/tests/spl_cachingiterator_setFlags_basic.phpt
 create mode 100644 ext/spl/tests/spl_classes.phpt
 create mode 100755 ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt
 create mode 100755 ext/spl/tests/spl_iterator_apply_error.phpt
 create mode 100755 ext/spl/tests/spl_iterator_apply_error_001.phpt
 create mode 100644 ext/spl/tests/spl_iterator_caching_count_basic.phpt
 create mode 100644 ext/spl/tests/spl_iterator_caching_count_error.phpt
 create mode 100644 ext/spl/tests/spl_iterator_caching_getcache_error.phpt
 create mode 100644 ext/spl/tests/spl_iterator_getcallchildren.phpt
 create mode 100644 ext/spl/tests/spl_iterator_iterator_constructor.phpt
 create mode 100644 ext/spl/tests/spl_iterator_recursive_getiterator_error.phpt
 create mode 100644 ext/spl/tests/spl_iterator_to_array_basic.phpt
 create mode 100755 ext/spl/tests/spl_iterator_to_array_error.phpt
 create mode 100644 ext/spl/tests/spl_limit_iterator_check_limits.phpt
 create mode 100644 ext/spl/tests/spl_recursiveIteratorIterator_setMaxDepth_parameter_count.phpt
 create mode 100644 ext/spl/tests/spl_recursive_iterator_iterator_key_case.phpt
 create mode 100644 ext/standard/tests/array/array_multisort_variation11.phpt
 create mode 100644 ext/standard/tests/array/bug44929.phpt
 create mode 100644 ext/standard/tests/array/bug48224.phpt
 create mode 100644 ext/standard/tests/class_object/AutoInterface.inc
 create mode 100644 ext/standard/tests/class_object/AutoLoaded.inc
 create mode 100644 ext/standard/tests/class_object/AutoTest.inc
 create mode 100644 ext/standard/tests/class_object/get_class_vars_error.phpt
 create mode 100644 ext/standard/tests/class_object/get_class_vars_variation1.phpt
 create mode 100644 ext/standard/tests/class_object/get_class_vars_variation2.phpt
 create mode 100644 ext/standard/tests/class_object/get_declared_classes_variation1.phpt
 create mode 100644 ext/standard/tests/class_object/get_declared_interfaces_variation1.phpt
 create mode 100644 ext/standard/tests/class_object/interface_exists_error.phpt
 create mode 100644 ext/standard/tests/class_object/interface_exists_variation1.phpt
 create mode 100644 ext/standard/tests/class_object/interface_exists_variation2.phpt
 create mode 100644 ext/standard/tests/class_object/interface_exists_variation3.phpt
 create mode 100644 ext/standard/tests/class_object/interface_exists_variation4.phpt
 create mode 100644 ext/standard/tests/class_object/is_subclass_of_variation_004.phpt
 create mode 100644 ext/standard/tests/class_object/property_exists_error.phpt
 create mode 100644 ext/standard/tests/class_object/property_exists_variation1.phpt
 create mode 100644 ext/standard/tests/file/bug44034.phpt
 create mode 100644 ext/standard/tests/general_functions/call_user_method.phpt
 create mode 100644 ext/standard/tests/general_functions/intval_variation1.phpt
 create mode 100644 ext/standard/tests/general_functions/intval_variation2.phpt
 create mode 100644 ext/standard/tests/http/bug38802.phpt
 create mode 100644 ext/standard/tests/http/ignore_errors.phpt
 create mode 100644 ext/standard/tests/http/server.inc
 create mode 100644 ext/standard/tests/math/abs_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/acos_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/acosh_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/asin_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/asinh_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/atan2_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/atan_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/atanh_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/bindec_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/ceil_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/cos_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/cosh_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/decbin_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/dechex_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/decoct_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/deg2rad_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/exp_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/expm1_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/floor_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/fmod_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/hexdec_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/hypot_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/is_finite_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/is_infinite_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/is_nan_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/log10_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/log1p_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/log_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/octdec_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/pow_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/rad2deg_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/round_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/sin_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/sinh_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/sqrt_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/tan_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/math/tanh_basiclong_64bit.phpt
 create mode 100644 ext/standard/tests/misc/time_nanosleep_basic.phpt
 create mode 100644 ext/standard/tests/misc/time_nanosleep_error1.phpt
 create mode 100644 ext/standard/tests/misc/time_nanosleep_error2.phpt
 create mode 100644 ext/standard/tests/misc/time_nanosleep_error3.phpt
 create mode 100644 ext/standard/tests/misc/time_nanosleep_error4.phpt
 create mode 100644 ext/standard/tests/misc/time_nanosleep_error5.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_basic001.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_basic002.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_error001.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_error002.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_error003.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_error004.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_error005.phpt
 create mode 100644 ext/standard/tests/network/gethostbyname_error006.phpt
 create mode 100644 ext/standard/tests/serialize/bug46882.phpt
 create mode 100644 ext/standard/tests/streams/bug47997.phpt
 create mode 100644 ext/standard/tests/streams/bug48309.phpt
 create mode 100644 ext/standard/tests/streams/stream_copy_to_stream_socket.phpt
 create mode 100644 ext/standard/tests/strings/strcoll.phpt
 create mode 100644 ext/standard/tests/strings/strcoll_error.phpt
 create mode 100644 ext/standard/tests/versioning/php_sapi_name.phpt
 create mode 100644 ext/standard/tests/versioning/php_sapi_name_variation001.phpt
 create mode 100644 ext/tidy/tests/tidy_error.phpt
 create mode 100644 ext/wddx/tests/bug48562.phpt
 create mode 100644 ext/xmlrpc/tests/bug44996.phpt
 create mode 100644 ext/xmlrpc/tests/bug47818.phpt
 create mode 100644 ext/xmlwriter/tests/bug48204.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
 create mode 100644 ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
 create mode 100644 ext/xsl/tests/bug48221.phpt
 create mode 100644 ext/xsl/tests/phpfunc-nostring.xsl
 create mode 100644 ext/xsl/tests/phpfunc-undef.xsl
 create mode 100644 ext/xsl/tests/phpfunc.xsl
 create mode 100644 ext/xsl/tests/xsl-phpinfo.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_getParameter-invalidparam.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_getParameter-wrongparam.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_getParameter.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-allfuncs.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-multiple.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-notallowed.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-array.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcnostring.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcundef.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-null.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-multiple.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-notallowed.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_registerPHPFunctions-string.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_removeParameter-invalidparam.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_removeParameter-wrongparams.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_removeParameter.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_setparameter-errorquote.phpt
 create mode 100644 ext/xsl/tests/xsltprocessor_setparameter-nostring.phpt
 create mode 100644 ext/zip/tests/bug47667.phpt
 create mode 100644 ext/zlib/tests/008.phpt
 delete mode 100644 ext/zlib/tests/bug.tar
 delete mode 100644 ext/zlib/tests/bug_40189_2.phpt
 create mode 100644 ext/zlib/tests/gzinflate-bug42663.phpt
 create mode 100644 ext/zlib/tests/gzinflate_length.phpt
 create mode 100644 tests/classes/interface_optional_arg_003.inc
 create mode 100644 tests/classes/interface_optional_arg_003.phpt
 create mode 100644 tests/classes/iterators_008.phpt
 create mode 100644 tests/classes/static_properties_undeclared_assign.phpt
 create mode 100644 tests/classes/static_properties_undeclared_assignInc.phpt
 create mode 100644 tests/classes/static_properties_undeclared_assignRef.phpt
 create mode 100644 tests/classes/static_properties_undeclared_inc.phpt
 create mode 100644 tests/classes/static_properties_undeclared_isset.phpt
 create mode 100644 tests/classes/static_properties_undeclared_read.phpt
 create mode 100644 tests/func/ini_alter.phpt
 delete mode 100644 tests/lang/bug45392.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_001.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_002.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_003.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_004.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_005.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_006.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_007.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_008.phpt
 create mode 100644 tests/lang/engine_assignExecutionOrder_009.phpt
 create mode 100644 tests/lang/execution_order.phpt
 create mode 100644 tests/lang/foreachLoop.001.phpt
 create mode 100644 tests/lang/foreachLoop.002.phpt
 create mode 100644 tests/lang/foreachLoop.003.phpt
 create mode 100644 tests/lang/foreachLoop.004.phpt
 create mode 100644 tests/lang/foreachLoop.005.phpt
 create mode 100644 tests/lang/foreachLoop.006.phpt
 create mode 100644 tests/lang/foreachLoop.007.phpt
 create mode 100644 tests/lang/foreachLoop.008.phpt
 create mode 100644 tests/lang/foreachLoop.009.phpt
 create mode 100644 tests/lang/foreachLoop.010.phpt
 create mode 100644 tests/lang/foreachLoop.011.phpt
 create mode 100644 tests/lang/foreachLoop.012.phpt
 create mode 100644 tests/lang/foreachLoop.013.phpt
 create mode 100644 tests/lang/foreachLoop.014.phpt
 create mode 100644 tests/lang/foreachLoop.015.phpt
 create mode 100644 tests/lang/foreachLoop.016.phpt
 create mode 100644 tests/lang/foreachLoop.017.phpt
 create mode 100644 tests/lang/foreachLoopObjects.001.phpt
 create mode 100644 tests/lang/foreachLoopObjects.002.phpt
 create mode 100644 tests/lang/foreachLoopObjects.003.phpt
 create mode 100644 tests/lang/foreachLoopObjects.004.phpt
 create mode 100644 tests/lang/foreachLoopObjects.005.phpt
 create mode 100644 tests/lang/foreachLoopObjects.006.phpt
 create mode 100644 tests/lang/operators/add_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/add_variationStr.phpt
 create mode 100644 tests/lang/operators/bitwiseAnd_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseAnd_variationStr.phpt
 create mode 100644 tests/lang/operators/bitwiseNot_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseNot_variationStr.phpt
 create mode 100644 tests/lang/operators/bitwiseOr_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseOr_variationStr.phpt
 create mode 100644 tests/lang/operators/bitwiseShiftLeft_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseShiftLeft_variationStr.phpt
 create mode 100644 tests/lang/operators/bitwiseShiftLeft_variationStr_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseShiftRight_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseShiftRight_variationStr.phpt
 create mode 100644 tests/lang/operators/bitwiseXor_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/bitwiseXor_variationStr.phpt
 create mode 100644 tests/lang/operators/divide_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/divide_variationStr.phpt
 create mode 100644 tests/lang/operators/modulus_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/modulus_variationStr.phpt
 create mode 100644 tests/lang/operators/multiply_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/multiply_variationStr.phpt
 create mode 100644 tests/lang/operators/negate_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/negate_variationStr.phpt
 create mode 100644 tests/lang/operators/operator_equals_basic.phpt
 create mode 100644 tests/lang/operators/operator_equals_variation.phpt
 create mode 100644 tests/lang/operators/operator_equals_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_gt_basic.phpt
 create mode 100644 tests/lang/operators/operator_gt_or_equal_basic.phpt
 create mode 100644 tests/lang/operators/operator_gt_or_equal_variation.phpt
 create mode 100644 tests/lang/operators/operator_gt_or_equal_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_gt_variation.phpt
 create mode 100644 tests/lang/operators/operator_gt_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_identical_basic.phpt
 create mode 100644 tests/lang/operators/operator_identical_variation.phpt
 create mode 100644 tests/lang/operators/operator_identical_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_lt_basic.phpt
 create mode 100644 tests/lang/operators/operator_lt_or_equal_basic.phpt
 create mode 100644 tests/lang/operators/operator_lt_or_equal_variation.phpt
 create mode 100644 tests/lang/operators/operator_lt_or_equal_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_lt_variation.phpt
 create mode 100644 tests/lang/operators/operator_lt_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_notequals_basic.phpt
 create mode 100644 tests/lang/operators/operator_notequals_variation.phpt
 create mode 100644 tests/lang/operators/operator_notequals_variation_64bit.phpt
 create mode 100644 tests/lang/operators/operator_notidentical_basic.phpt
 create mode 100644 tests/lang/operators/operator_notidentical_variation.phpt
 create mode 100644 tests/lang/operators/operator_notidentical_variation_64bit.phpt
 create mode 100644 tests/lang/operators/postdec_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/postdec_variationStr.phpt
 create mode 100644 tests/lang/operators/postinc_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/postinc_variationStr.phpt
 create mode 100644 tests/lang/operators/predec_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/predec_variationStr.phpt
 create mode 100644 tests/lang/operators/preinc_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/preinc_variationStr.phpt
 create mode 100644 tests/lang/operators/subtract_basiclong_64bit.phpt
 create mode 100644 tests/lang/operators/subtract_variationStr.phpt
 create mode 100644 tests/lang/returnByReference.001.phpt
 create mode 100644 tests/lang/returnByReference.002.phpt
 create mode 100644 tests/lang/returnByReference.003.phpt
 create mode 100644 tests/lang/returnByReference.004.phpt
 create mode 100644 tests/lang/returnByReference.005.phpt
 create mode 100644 tests/lang/returnByReference.006.phpt
 create mode 100644 tests/lang/returnByReference.007.phpt
 create mode 100644 tests/lang/returnByReference.008.phpt
 create mode 100644 tests/lang/returnByReference.009.phpt
 create mode 100644 tests/output/ob_001.phpt
 create mode 100644 tests/output/ob_002.phpt
 create mode 100644 tests/output/ob_003.phpt
 create mode 100644 tests/output/ob_004.phpt
 create mode 100644 tests/output/ob_005.phpt
 create mode 100644 tests/output/ob_006.phpt
 create mode 100644 tests/output/ob_007.phpt
 create mode 100644 tests/output/ob_008.phpt
 create mode 100644 tests/output/ob_009.phpt
 create mode 100644 tests/output/ob_010.phpt
 create mode 100644 tests/output/ob_get_status.phpt

diff --git a/NEWS b/NEWS
index 269718f..d119215 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,185 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+17 Jun 2009, PHP 5.2.10
+- Updated timezone database to version 2009.9 (2009i) (Derick)
+
+- Added "ignore_errors" option to http fopen wrapper. (David Zulke, Sara)
+- Added new CURL options CURLOPT_REDIR_PROTOCOLS, CURLOPT_PROTOCOLS,
+  and CURLPROTO_* for redirect fixes in CURL 7.19.4. (Yoram Bar Haim, Stas)
+- Added support for Sun CC (FR #46595 and FR #46513). (David Soria Parra)
+
+- Changed default value of array_unique()'s optional sorting type parameter
+  back to SORT_STRING to fix backwards compatibility breakage introduced in 
+  PHP 5.2.9. (Moriyoshi)
+
+- Fixed memory corruptions while reading properties of zip files. (Ilia)
+- Fixed memory leak in ob_get_clean/ob_get_flush. (Christian)
+- Fixed segfault on invalid session.save_path. (Hannes)
+- Fixed leaks in imap when a mail_criteria is used. (Pierre)
+- Fixed missing erealloc() in fix for Bug #40091 in spl_autoload_register. (Greg)
+
+- Fixed bug #48562 (Reference recursion causes segfault when used in
+  wddx_serialize_vars()). (Felipe)
+- Fixed bug #48557 (Numeric string keys in Apache Hashmaps are not cast to
+  integers). (David Zuelke)
+- Fixed bug #48518 (curl crashes when writing into invalid file handle). (Tony)
+- Fixed bug #48514 (cURL extension uses same resource name for simple and
+  multi APIs). (Felipe)
+- Fixed bug #48469 (ldap_get_entries() leaks memory on empty search
+  results). (Patrick)
+- Fixed bug #48456 (CPPFLAGS not restored properly in phpize.m4). (Jani,
+  spisek at kerio dot com)
+- Fixed bug #48448 (Compile failure under IRIX 6.5.30 building cast.c).
+  (Kalle)
+- Fixed bug #48441 (ldap_search() sizelimit, timelimit and deref options
+  persist). (Patrick)
+- Fixed bug #48434 (Improve memory_get_usage() accuracy). (Arnaud)
+- Fixed bug #48416 (Force a cache limit in ereg() to stop excessive memory
+  usage). (Scott)
+- Fixed bug #48409 (Crash when exception is thrown while passing function
+  arguments). (Arnaud)
+- Fixed bug #48378 (exif_read_data() segfaults on certain corrupted .jpeg
+  files). (Pierre)
+- Fixed bug #48359 (Script hangs on snmprealwalk if OID is not increasing).
+  (Ilia, simonov at gmail dot com)
+- Fixed bug #48336 (ReflectionProperty::getDeclaringClass() does not work 
+  with redeclared property).
+  (patch by Markus dot Lidel at shadowconnect dot com)
+- Fixed bug #48326 (constant MSG_DONTWAIT not defined). (Arnaud)
+- Fixed bug #48313 (fgetcsv() does not return null for empty rows). (Ilia)
+- Fixed bug #48309 (stream_copy_to_stream() and fpasstru() do not update
+  stream position of plain files). (Arnaud)
+- Fixed bug #48307 (stream_copy_to_stream() copies 0 bytes when $source is a
+  socket). (Arnaud)
+- Fixed bug #48273 (snmp*_real_walk() returns SNMP errors as values).
+  (Ilia, lytboris at gmail dot com)
+- Fixed bug #48256 (Crash due to double-linking of history.o).
+  (tstarling at wikimedia dot org)
+- Fixed bug #48248 (SIGSEGV when access to private property via &__get).
+  (Felipe)
+- Fixed bug #48247 (Crash on errors during startup). (Stas)
+- Fixed bug #48240 (DBA Segmentation fault dba_nextkey). (Felipe)
+- Fixed bug #48224 (Incorrect shuffle in array_rand). (Etienne)
+- Fixed bug #48221 (memory leak when passing invalid xslt parameter).
+  (Felipe)
+- Fixed bug #48207 (CURLOPT_(FILE|WRITEHEADER options do not error out when
+  working with a non-writable stream). (Ilia)
+- Fixed bug #48206 (Iterating over an invalid data structure with
+  RecursiveIteratorIterator leads to a segfault). (Scott)
+- Fixed bug #48204 (xmlwriter_open_uri() does not emit warnings on invalid
+  paths). (Ilia)
+- Fixed bug #48203 (Crash when CURLOPT_STDERR is set to regular file). (Jani)
+- Fixed bug #48202 (Out of Memory error message when passing invalid file
+  path) (Pierre)
+- Fixed bug #48156 (Added support for lcov v1.7). (Ilia)
+- Fixed bug #48132 (configure check for curl ssl support fails with
+  --disable-rpath). (Jani)
+- Fixed bug #48131 (Don't try to bind ipv4 addresses to ipv6 ips via bindto).
+  (Ilia)
+- Fixed bug #48070 (PDO_OCI: Segfault when using persistent connection).
+  (Pierre, Matteo, jarismar dot php at gmail dot com)
+- Fixed bug #48058 (Year formatter goes wrong with out-of-int range). (Derick)
+- Fixed bug #48038 (odbc_execute changes variables used to form params array).
+  (Felipe)
+- Fixed bug #47997 (stream_copy_to_stream returns 1 on empty streams). (Arnaud)
+- Fixed bug #47991 (SSL streams fail if error stack contains items). (Mikko)
+- Fixed bug #47981 (error handler not called regardless). (Hannes)
+- Fixed bug #47969 (ezmlm_hash() returns different values depend on OS). (Ilia)
+- Fixed bug #47946 (ImageConvolution overwrites background). (Ilia)
+- Fixed bug #47940 (memory leaks in imap_body). (Pierre, Jake Levitt)
+- Fixed bug #47937 (system() calls sapi_flush() regardless of output 
+  buffering). (Ilia)
+- Fixed bug #47903 ("@" operator does not work with string offsets). (Felipe)
+- Fixed bug #47893 (CLI aborts on non blocking stdout). (Arnaud)
+- Fixed bug #47849 (Non-deep import loses the namespace). (Rob)
+- Fixed bug #47845 (PDO_Firebird omits first row from query). (Lars W)
+- Fixed bug #47836 (array operator [] inconsistency when the array has
+  PHP_INT_MAX index value). (Matt)
+- Fixed bug #47831 (Compile warning for strnlen() in main/spprintf.c).
+  (Ilia, rainer dot jung at kippdata dot de)
+- Fixed bug #47828 (openssl_x509_parse() segfaults when a UTF-8 conversion
+  fails). (Scott, Kees Cook, Pierre)
+- Fixed bug #47818 (Segfault due to bound callback param). (Felipe)
+- Fixed bug #47801 (__call() accessed via parent:: operator is provided
+  incorrect method name). (Felipe)
+- Fixed bug #47769 (Strange extends PDO). (Felipe)
+- Fixed bug #47745 (FILTER_VALIDATE_INT doesn't allow minimum integer).
+  (Dmitry)
+- Fixed bug #47721 (Alignment issues in mbstring and sysvshm extension).
+  (crrodriguez at opensuse dot org, Ilia)
+- Fixed bug #47704 (PHP crashes on some "bad" operations with string
+  offsets). (Dmitry)
+- Fixed bug #47695 (build error when xmlrpc and iconv are compiled against
+  different iconv versions). (Scott)
+- Fixed bug #47667 (ZipArchive::OVERWRITE seems to have no effect).
+  (Mikko, Pierre)
+- Fixed bug #47644 (Valid integers are truncated with json_decode()). (Scott)
+- Fixed bug #47639 (pg_copy_from() WARNING: nonstandard use of \\ in a
+  string literal). (Ilia)
+- Fixed bug #47616 (curl keeps crashing). (Felipe)
+- Fixed bug #47598 (FILTER_VALIDATE_EMAIL is locale aware). (Ilia)
+- Fixed bug #47566 (pcntl_wexitstatus() returns signed status).
+  (patch by james at jamesreno dot com)
+- Fixed bug #47564 (unpacking unsigned long 32bit bit endian returns wrong
+  result). (Ilia)
+- Fixed bug #47487 (performance degraded when reading large chunks after
+  fix of bug #44607). (Arnaud)
+- Fixed bug #47468 (enable cli|cgi-only extensions for embed sapi). (Jani)
+- Fixed bug #47435 (FILTER_FLAG_NO_PRIV_RANGE does not work with ipv6
+  addresses in the filter extension). (Ilia)
+- Fixed bug #47430 (Errors after writing to nodeValue parameter of an absent
+  previousSibling). (Rob)
+- Fixed bug #47365 (ip2long() may allow some invalid values on certain 64bit
+   systems). (Ilia)
+- Fixed bug #47254 (Wrong Reflection for extends class). (Felipe)
+- Fixed bug #47042 (cgi sapi is incorrectly removing SCRIPT_FILENAME).
+  (Sriram Natarajan, David Soria Parra)
+- Fixed bug #46882 (Serialize / Unserialize misbehaviour under OS with
+  different bit numbers). (Matt)
+- Fixed bug #46812 (get_class_vars() does not include visible private variable
+  looking at subclass). (Arnaud)
+- Fixed bug #46386 (Digest authentication with SOAP module fails against MSSQL
+  SOAP services). (Ilia, lordelph at gmail dot com)
+- Fixed bug #46109 (Memory leak when mysqli::init() is called multiple times).
+  (Andrey)
+- Fixed bug #45997 (safe_mode bypass with exec/system/passthru (windows only)).
+  (Pierre)
+- Fixed bug #45877 (Array key '2147483647' left as string). (Matt)
+- Fixed bug #45822 (Near infinite-loops while parsing huge relative offsets).
+  (Derick, Mike Sullivan)
+- Fixed bug #45799 (imagepng() crashes on empty image).
+  (Martin McNickle, Takeshi Abe)
+- Fixed bug #45622 (isset($arrayObject->p) misbehaves with
+  ArrayObject::ARRAY_AS_PROPS set). (robin_fernandes at uk dot ibm dot com, Arnaud)
+- Fixed bug #45614 (ArrayIterator::current(), ::key() can show 1st private prop
+  of wrapped object). (robin_fernandes at uk dot ibm dot com, Arnaud)
+- Fixed bug #45540 (stream_context_create creates bad http request). (Arnaud)
+- Fixed bug #45202 (zlib.output_compression can not be set with ini_set()).
+  (Jani)
+- Fixed bug #45191 (error_log ignores date.timezone php.ini val when setting
+  logging timestamps). (Derick)
+- Fixed bug #45092 (header HTTP context option not being used when compiled
+  using --with-curlwrappers). (Jani)
+- Fixed bug #44996 (xmlrpc_decode() ignores time zone on iso8601.datetime).
+  (Ilia, kawai at apache dot org) 
+- Fixed bug #44827 (define() is missing error checks for class constants).
+  (Ilia)
+- Fixed bug #44214 (Crash using preg_replace_callback() and global variables).
+  (Nuno, Scott)
+- Fixed bug #43073 (TrueType bounding box is wrong for angle<>0).
+  (Martin McNickle)
+- Fixed bug #42663 (gzinflate() try to allocate all memory with truncated
+  data). (Arnaud)
+- Fixed bug #42414 (some odbc_*() functions incompatible with Oracle ODBC
+  driver). (jhml at gmx dot net)
+- Fixed bug #42362 (HTTP status codes 204 and 304 should not be gzipped).
+  (Scott, Edward Z. Yang)
+- Fixed bug #42143 (The constant NAN is reported as 0 on Windows)
+  (Kanwaljeet Singla, Venkat Raman Don)
+- Fixed bug #38805 (PDO truncates text from SQL Server text data type field).
+  (Steph)
+
+
 26 Feb 2009, PHP 5.2.9
 - Changed __call() to be invoked on private/protected method access, similar to
   properties and __get(). (Andrei)
@@ -292,7 +472,6 @@ PHP                                                                        NEWS
   (Kalle, oleg dot grenrus at dynamoid dot com)
 - Fixed bug #45405 (snmp extension memory leak).
   (Federico Cuello, Rodrigo Campos)
-- Fixed bug #45392 (ob_start()/ob_end_clean() and memory_limit). (Arnaud)
 - Fixed bug #45382 (timeout bug in stream_socket_enable_crypto). (Ilia)
 - Fixed bug #45373 (php crash on query with errors in params). (Felipe)
 - Fixed bug #45352 (Segmentation fault because of tick function on second
diff --git a/README.TESTING b/README.TESTING
index 117a360..75141d5 100644
--- a/README.TESTING
+++ b/README.TESTING
@@ -32,11 +32,12 @@ sapi/cli/php [-c /path/to/php.ini] run-tests.php [ext/foo/tests/GLOB]
 
 [Which "php" executable "make test" look for]
 ---------------------------------------------
- You must use TEST_PHP_EXECUTABLE environment variable to explicitly
-select the php executable to be used to run the tests. That can either
-be the CLI or CGI executable.
+If you are running the run-tests.php script from the command line (as above)
+you must set the TEST_PHP_EXECUTABLE environment variable to explicitly
+select the PHP executable that is to be tested, that is, used to run the test scripts.
 
- "make test" executes "run-tests.php" script with "php" binary.  Some
+If you run the tests using make test, the PHP CLI and CGI executables are 
+automatically set for you. "make test" executes "run-tests.php" script with the CLI binary.  Some
 test scripts such as session must be executed by CGI SAPI. Therefore,
 you must build PHP with CGI SAPI to perform all tests.
 
diff --git a/Zend/FlexLexer.h b/Zend/FlexLexer.h
index 614fded..08fce37 100644
--- a/Zend/FlexLexer.h
+++ b/Zend/FlexLexer.h
@@ -1,4 +1,4 @@
-// $Header: /repository/ZendEngine2/Attic/FlexLexer.h,v 1.4 2000/07/03 00:55:36 sascha Exp $
+// $Header: /repository/ZendEngine2/Attic/FlexLexer.h,v 1.4.18.1 2009/04/27 19:54:34 felipe Exp $
 
 // FlexLexer.h -- define interfaces for lexical analyzer classes generated
 //		  by flex
diff --git a/Zend/flex.skl b/Zend/flex.skl
index 9c9bbda..40170fa 100644
--- a/Zend/flex.skl
+++ b/Zend/flex.skl
@@ -1,7 +1,7 @@
 /* A Lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /repository/ZendEngine2/Attic/flex.skl,v 1.31 2003/08/11 05:24:41 fujimoto Exp $
+ * $Header: /repository/ZendEngine2/Attic/flex.skl,v 1.31.6.1 2009/04/27 19:54:34 felipe Exp $
  * vim:ft=lex:
  */
 
diff --git a/Zend/tests/bug39018.phpt b/Zend/tests/bug39018.phpt
new file mode 100644
index 0000000..1bc23d3
--- /dev/null
+++ b/Zend/tests/bug39018.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Bug #39018 (Error control operator '@' fails to suppress "Uninitialized string offset")
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+$a = 'foo';
+$a[11111111111];
+
+$a = '';
+
+$a[0];
+
+print $a[0]; // 12
+
+$a[-11111111111111111111111];
+
+print $a[-11111111111111111111111]; // 16
+
+$a[-0];
+
+$x = 'test';
+
+@$x[4];
+
+@$y = $x[4];
+
+@('a' == $x[4]);
+
+$x[4] == 'a'; // 28
+
+@$x[4] == 'a';
+
+(@$x[4]) == 'a';
+
+($x[4]) == 'a'; // 34
+
+(@($x[4])) == 'a';
+
+(($x[4])) == 'a'; // 38
+
+@($x[4]) == 'a';
+
+($x[4]) == 'a'; // 42
+
+@($x[4] == 'a');
+
+($x[4] == 'a'); // 46
+
+$y = 'foobar';
+
+$y[12.2];
+
+print $y[12.2]; // 52
+
+$y[3.5];
+
+print $y[3.5]; // 56
+
+print "\nDone\n";
+
+?>
+--EXPECTF--
+
+Notice: Uninitialized string offset: 0 in %s on line 12
+
+Notice: Uninitialized string offset: -%d in %s on line 16
+
+Notice: Uninitialized string offset: 4 in %s on line 28
+
+Notice: Uninitialized string offset: 4 in %s on line 34
+
+Notice: Uninitialized string offset: 4 in %s on line 38
+
+Notice: Uninitialized string offset: 4 in %s on line 42
+
+Notice: Uninitialized string offset: 4 in %s on line 46
+
+Notice: Uninitialized string offset: 12 in %s on line 52
+b
+Done
diff --git a/Zend/tests/bug39018_2.phpt b/Zend/tests/bug39018_2.phpt
new file mode 100644
index 0000000..81831d5
--- /dev/null
+++ b/Zend/tests/bug39018_2.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #39018 [2] (Error control operator '@' fails to suppress "Uninitialized string offset")
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+$foo = 'test';
+$x = @$foo[6];
+
+print @($foo[100] + $foo[130]);
+
+print "\nDone\n";
+
+?>
+--EXPECT--
+0
+Done
diff --git a/Zend/tests/bug39304.phpt b/Zend/tests/bug39304.phpt
index 5529d70..fe75cfa 100755
--- a/Zend/tests/bug39304.phpt
+++ b/Zend/tests/bug39304.phpt
@@ -6,4 +6,6 @@ Bug #39304 (Segmentation fault with list unpacking of string offset)
   list($a, $b) = $s[0];
 ?>
 --EXPECTF--
-Fatal error: Cannot use string offset as an array in %sbug39304.php on line 3
+Notice: Uninitialized string offset: 0 in %s on line %d
+
+Fatal error: Cannot use string offset as an array in %sbug39304.php on line %d
diff --git a/Zend/tests/bug41919.phpt b/Zend/tests/bug41919.phpt
index 0ac3276..2c4f985 100644
--- a/Zend/tests/bug41919.phpt
+++ b/Zend/tests/bug41919.phpt
@@ -8,4 +8,6 @@ $foo[3]->bar[1] = "bang";
 echo "ok\n";
 ?>
 --EXPECTF--
+Notice: Uninitialized string offset: 3 in %s on line %d
+
 Fatal error: Cannot use string offset as an object in %sbug41919.php on line %d
diff --git a/Zend/tests/bug42143.phpt b/Zend/tests/bug42143.phpt
new file mode 100644
index 0000000..8a73d41
--- /dev/null
+++ b/Zend/tests/bug42143.phpt
@@ -0,0 +1,38 @@
+--TEST--
+bug #42143 (The constant NAN is reported as 0 on Windows build)
+--CREDITS--
+Venkat Raman Don
+--FILE--
+<?php
+echo "Testing NAN:\n";
+echo "NAN= ";
+var_dump(NAN);
+var_dump(tan(-1) == 123);
+var_dump(cos(-100) == "PHP String");
+var_dump(deg2rad(-5.6) == null);
+var_dump(sqrt(-0.1) == false);
+var_dump(sqrt(cos(M_PI)) == 0.1);
+var_dump(NAN);
+var_dump(is_nan(sqrt(-1.005)) == false);
+var_dump(is_nan(floor(1)) == true);
+var_dump(log10(-1) == log(-1));
+var_dump(log10(-1) != log10(-1));
+var_dump(is_finite(log10(-1)) == false);
+var_dump(NAN == NAN);
+?>
+--EXPECT--
+Testing NAN:
+NAN= float(NAN)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+float(NAN)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(false)
+
diff --git a/Zend/tests/bug45877.phpt b/Zend/tests/bug45877.phpt
new file mode 100644
index 0000000..2703770
--- /dev/null
+++ b/Zend/tests/bug45877.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #45877 (Array key '2147483647' left as string)
+--INI--
+precision=20
+--FILE--
+<?php
+$keys = array(PHP_INT_MAX,
+	(string) PHP_INT_MAX,
+	(string) (-PHP_INT_MAX - 1),
+	-PHP_INT_MAX - 1,
+	(string) (PHP_INT_MAX + 1));
+
+var_dump(array_fill_keys($keys, 1));
+?>
+--EXPECTF--
+array(3) {
+  [%d7]=>
+  int(1)
+  [-%d8]=>
+  int(1)
+  ["%d8"]=>
+  int(1)
+}
diff --git a/Zend/tests/bug47704.phpt b/Zend/tests/bug47704.phpt
new file mode 100644
index 0000000..151754a
--- /dev/null
+++ b/Zend/tests/bug47704.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Bug #47704 (crashes on some "bad" operations with string offsets)
+--FILE--
+<?php
+$s = "abd";
+$s[0]->a += 1;
+?>
+--EXPECTF--
+Fatal error: Cannot use string offset as an object in %sbug47704.php on line %d
diff --git a/Zend/tests/bug47801.phpt b/Zend/tests/bug47801.phpt
new file mode 100644
index 0000000..3230819
--- /dev/null
+++ b/Zend/tests/bug47801.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #47801 (__call() accessed via parent:: operator is provided incorrect method name)
+--FILE--
+<?php
+
+class A
+{
+  function __call($name, $args)
+  {
+    echo("magic method called: $name\n");
+  }
+}
+
+class B extends A
+{
+  function getFoo()
+  {
+    parent::getFoo();
+  }
+}
+
+$a = new A();
+$a->getFoo();
+
+$b = new B();
+$b->getFoo();
+
+?>
+--EXPECT--
+magic method called: getFoo
+magic method called: getFoo
diff --git a/Zend/tests/bug47836.phpt b/Zend/tests/bug47836.phpt
new file mode 100644
index 0000000..5a93a44
--- /dev/null
+++ b/Zend/tests/bug47836.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #47836 (array operator [] inconsistency when the array has PHP_INT_MAX index value)
+--FILE--
+<?php
+
+$arr[PHP_INT_MAX] = 1;
+$arr[] = 2;
+
+var_dump($arr);
+?>
+--EXPECTF--
+Warning: Cannot add element to the array as the next element is already occupied in %s on line 4
+array(1) {
+  [%d]=>
+  int(1)
+}
diff --git a/Zend/tests/bug47981.phpt b/Zend/tests/bug47981.phpt
new file mode 100644
index 0000000..2d68d37
--- /dev/null
+++ b/Zend/tests/bug47981.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #47981 (error handler not called regardless)
+--INI--
+error_reporting=0
+--FILE--
+<?php
+function errh($errno, $errstr) {
+	var_dump($errstr);
+}
+set_error_handler("errh");
+
+interface a{}
+class b implements a { function f($a=1) {}}
+class c extends b {function f() {}}
+?>
+--EXPECTF--
+string(62) "Declaration of c::f() should be compatible with that of b::f()"
+
+
diff --git a/Zend/tests/bug48228.phpt b/Zend/tests/bug48228.phpt
new file mode 100644
index 0000000..ae8ba61
--- /dev/null
+++ b/Zend/tests/bug48228.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #48228 (crash when exception is thrown while passing function arguments)
+--FILE--
+<?php
+
+function do_throw() {
+	throw new Exception();
+}
+
+class aa 
+{
+	function check()
+	{
+	}
+
+	function dosome()
+	{
+		$this->check(do_throw());
+	}
+}
+$l_aa=new aa();
+
+$l_aa->dosome();
+?>
+--EXPECTF--
+
+Fatal error: Uncaught exception 'Exception' in %s
+Stack trace:
+#0 %s(%d): do_throw()
+#1 %s(%d): aa->dosome()
+#2 {main}
+  thrown in %s
diff --git a/Zend/tests/bug48248.phpt b/Zend/tests/bug48248.phpt
new file mode 100644
index 0000000..9cdb7c1
--- /dev/null
+++ b/Zend/tests/bug48248.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Bug #48248 (SIGSEGV when access to private property via &__get)
+--FILE--
+<?php
+
+class A
+{
+    public function & __get($name)
+    {
+        return $this->test;
+    }
+}
+
+class B extends A
+{
+    private $test;
+}
+
+$b = new B;
+var_dump($b->test);
+
+?>
+--EXPECTF--
+Notice: Undefined property: B::$test in %s on line %d
+
+Notice: Only variable references should be returned by reference in %s on line %d
+NULL
diff --git a/Zend/tests/bug48408.phpt b/Zend/tests/bug48408.phpt
new file mode 100644
index 0000000..20a0198
--- /dev/null
+++ b/Zend/tests/bug48408.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #48408 (crash when exception is thrown while passing function arguments)
+--FILE--
+<?php
+class B{
+	public function process($x){
+		return $x;
+	}
+}
+class C{
+	public function generate($x){
+		throw new Exception;
+	}
+}
+$b = new B;
+$c = new C;
+try{
+	$b->process($c->generate(0));
+}
+catch(Exception $e){
+	$c->generate(0);
+}
+?>
+--EXPECTF--
+
+Fatal error: Uncaught exception 'Exception' in %s
+Stack trace:
+#0 %s(%d): C->generate(0)
+#1 {main}
+  thrown in %s
diff --git a/Zend/tests/bug48409.phpt b/Zend/tests/bug48409.phpt
new file mode 100644
index 0000000..238b52e
--- /dev/null
+++ b/Zend/tests/bug48409.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Bug #48409 (crash when exception is thrown while passing function arguments)
+--FILE--
+<?php
+
+class ABCException extends Exception {}
+
+class BBB
+{
+	public function xyz($d, $x)
+	{
+		if ($x == 34) {
+			throw new ABCException;
+		}
+		return array('foo' => 'xyz');
+	}
+}
+	
+class CCC
+{
+	public function process($p)
+	{
+		return $p;
+	}
+}
+
+class AAA
+{
+	public function func()
+	{
+		$b = new BBB;
+		$c = new CCC;
+		$i = 34;
+		$item = array('foo' => 'bar');
+		try {
+			$c->process($b->xyz($item['foo'], $i));
+		}
+		catch(ABCException $e) {
+			$b->xyz($item['foo'], $i);
+		}
+	} // end func();
+}
+
+class Runner
+{
+	public function run($x)
+	{
+		try {
+			$x->func();
+		}
+		catch(ABCException $e) {
+			throw new Exception;
+		}
+	}
+}
+
+try {
+	$runner = new Runner;
+	$runner->run(new AAA);
+}
+catch(Exception $e) {
+	die('Exception thrown');
+}
+
+?>
+--EXPECT--
+Exception thrown
diff --git a/Zend/tests/bug48428.phpt b/Zend/tests/bug48428.phpt
new file mode 100644
index 0000000..ae9ac93
--- /dev/null
+++ b/Zend/tests/bug48428.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #48428 (crash when exception is thrown while passing function arguments)
+--FILE--
+<?php
+try {
+		function x() { throw new Exception("ERROR"); }
+				x(x());
+} catch(Exception $e) {
+		echo($e -> getMessage());
+}
+?>
+--EXPECT--
+ERROR
diff --git a/Zend/tests/exception_010.phpt b/Zend/tests/exception_010.phpt
new file mode 100644
index 0000000..9051731
--- /dev/null
+++ b/Zend/tests/exception_010.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Testing Exception's methods
+--FILE--
+<?php
+
+$x = new Exception;
+$x->gettraceasstring(1);
+$x->gettraceasstring();
+$x->__tostring(1);
+$x->gettrace(1);
+$x->getline(1);
+$x->getfile(1);
+$x->getmessage(1);
+$x->getcode(1);
+
+?>
+--EXPECTF--
+Warning: Wrong parameter count for Exception::getTraceAsString() in %s on line %d
+
+Warning: Wrong parameter count for Exception::__toString() in %s on line %d
+
+Warning: Wrong parameter count for Exception::getTrace() in %s on line %d
+
+Warning: Wrong parameter count for Exception::getLine() in %s on line %d
+
+Warning: Wrong parameter count for Exception::getFile() in %s on line %d
+
+Warning: Wrong parameter count for Exception::getMessage() in %s on line %d
+
+Warning: Wrong parameter count for Exception::getCode() in %s on line %d
diff --git a/Zend/tests/function_exists_basic.phpt b/Zend/tests/function_exists_basic.phpt
new file mode 100644
index 0000000..469e3d8
--- /dev/null
+++ b/Zend/tests/function_exists_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+function_exists function : basic functionality 
+--FILE--
+<?php
+/* 
+ * proto bool function_exists(string function_name)
+ * Function is implemented in Zend/zend_builtin_functions.c
+*/ 
+
+echo "*** Testing function_exists() : basic functionality ***\n";
+
+echo "Internal function: ";
+var_dump(function_exists('function_exists'));
+
+echo "User defined function: ";
+function f() {}
+var_dump(function_exists('f'));
+
+echo "Case sensitivity: ";
+var_dump(function_exists('F'));
+
+echo "Non existent function: ";
+var_dump(function_exists('g'));
+
+echo "Method: ";
+Class C {
+	static function f() {}
+}
+var_dump(function_exists('C::f'));
+?>
+===Done===
+--EXPECT--
+*** Testing function_exists() : basic functionality ***
+Internal function: bool(true)
+User defined function: bool(true)
+Case sensitivity: bool(true)
+Non existent function: bool(false)
+Method: bool(false)
+===Done===
diff --git a/Zend/tests/function_exists_error.phpt b/Zend/tests/function_exists_error.phpt
new file mode 100644
index 0000000..a4c1294
--- /dev/null
+++ b/Zend/tests/function_exists_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test function_exists() function : error conditions 
+--INI--
+--FILE--
+<?php
+/* 
+ * proto bool function_exists(string function_name)
+ * Function is implemented in Zend/zend_builtin_functions.c
+*/ 
+
+echo "*** Testing function_exists() : error conditions ***\n";
+
+$arg_0 = "ABC";
+$extra_arg = 1;
+
+echo "\nToo many arguments\n";
+var_dump(function_exists($arg_0, $extra_arg));
+
+echo "\nToo few arguments\n";
+var_dump(function_exists());
+
+?>
+===Done===
+--EXPECTF--
+*** Testing function_exists() : error conditions ***
+
+Too many arguments
+
+Warning: Wrong parameter count for function_exists() in %s on line %d
+NULL
+
+Too few arguments
+
+Warning: Wrong parameter count for function_exists() in %s on line %d
+NULL
+===Done===
+
diff --git a/Zend/tests/function_exists_variation1.phpt b/Zend/tests/function_exists_variation1.phpt
new file mode 100644
index 0000000..70cf6be
--- /dev/null
+++ b/Zend/tests/function_exists_variation1.phpt
@@ -0,0 +1,135 @@
+--TEST--
+Test function_exists() function : usage variations - test values for $str argument
+--FILE--
+<?php
+
+/* 
+ * proto bool function_exists(string function_name)
+ * Function is implemented in Zend/zend_builtin_functions.c
+*/ 
+
+echo "*** Testing function_exists() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample  {
+  public function __toString() {
+    return "sample object";
+  } 
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $str
+$inputs =  array (
+
+  // integer values
+  0,
+  1,
+  255,
+  256,
+  PHP_INT_MAX,
+  -PHP_INT_MAX,
+
+  // float values
+  10.5,
+  -20.5,
+  10.1234567e10,
+
+  // array values
+  array(),
+  array(0),
+  array(1, 2),
+
+  // boolean values
+  true,
+  false,
+  TRUE,
+  FALSE,
+
+  // null values
+  NULL,
+  null,
+
+  // objects
+  new sample(),
+
+  // resource
+  $file_handle,
+
+  // undefined variable
+  @$undefined_var,
+
+  // unset variable
+  @$unset_var
+);
+
+// loop through with each element of the $inputs array to test function_exists() function
+$count = 1;
+foreach($inputs as $input) {
+  echo "-- Iteration $count --\n";
+  var_dump( function_exists($input) );
+  $count ++;
+}
+
+fclose($file_handle);  //closing the file handle
+
+?>
+===Done===
+--EXPECTF--
+*** Testing function_exists() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+bool(false)
+-- Iteration 2 --
+bool(false)
+-- Iteration 3 --
+bool(false)
+-- Iteration 4 --
+bool(false)
+-- Iteration 5 --
+bool(false)
+-- Iteration 6 --
+bool(false)
+-- Iteration 7 --
+bool(false)
+-- Iteration 8 --
+bool(false)
+-- Iteration 9 --
+bool(false)
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+bool(false)
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+bool(false)
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+bool(false)
+-- Iteration 13 --
+bool(false)
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+bool(false)
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+bool(false)
+-- Iteration 18 --
+bool(false)
+-- Iteration 19 --
+bool(false)
+-- Iteration 20 --
+bool(false)
+-- Iteration 21 --
+bool(false)
+-- Iteration 22 --
+bool(false)
+===Done===
diff --git a/Zend/tests/get_class_vars_003.phpt b/Zend/tests/get_class_vars_003.phpt
index f9dab77..d2c82bb 100644
--- a/Zend/tests/get_class_vars_003.phpt
+++ b/Zend/tests/get_class_vars_003.phpt
@@ -33,7 +33,7 @@ new C;
 
 ?>
 --EXPECT--
-array(5) {
+array(6) {
   ["aaa"]=>
   int(7)
   ["ccc"]=>
@@ -42,6 +42,8 @@ array(5) {
   int(1)
   ["aa"]=>
   int(4)
+  ["bb"]=>
+  int(5)
   ["cc"]=>
   int(6)
 }
diff --git a/Zend/tests/get_class_vars_006.phpt b/Zend/tests/get_class_vars_006.phpt
index 73de66b..d1c2844 100644
--- a/Zend/tests/get_class_vars_006.phpt
+++ b/Zend/tests/get_class_vars_006.phpt
@@ -44,5 +44,7 @@ array(1) {
   ["a"]=>
   int(1)
 }
-array(0) {
+array(1) {
+  ["a"]=>
+  int(1)
 }
diff --git a/Zend/tests/get_defined_functions_basic.phpt b/Zend/tests/get_defined_functions_basic.phpt
new file mode 100644
index 0000000..a849e32
--- /dev/null
+++ b/Zend/tests/get_defined_functions_basic.phpt
@@ -0,0 +1,59 @@
+--TEST--
+get_defined_functions() function : basic functionality 
+--FILE--
+<?php
+
+/* Prototype  : array get_defined_functions  ( void  )
+ * Description: Gets an array of all defined functions.
+ * Source code: Zend/zend_builtin_functions.c
+*/
+
+echo "*** Testing get_defined_functions() : basic functionality ***\n";
+
+function foo() {}
+
+// mixed case function
+function HelloWorld() {}
+
+Class C {
+	function f1() {}
+	static function f2() {}
+}
+
+$func = get_defined_functions();
+
+if (!is_array($func)) {
+	echo "TEST FAILED: return type not an array\n";
+}
+
+
+if (!is_array($func["internal"])) {
+ 	echo "TEST FAILED: no element in result array with key 'internal'\n";
+} 	
+
+$internal = $func["internal"];
+
+//check for a few core functions
+if (!in_array("cos", $internal) || !in_array("strlen", $internal)) {
+ 	echo "TEST FAILED: missing elements from 'internal' array\n";
+ 	var_dump($internal);
+} 
+
+if (!is_array($func["user"])) {
+ 	echo "TEST FAILED: no element in result array with key 'user'\n";
+}
+
+$user = $func["user"];
+if (count($user) == 2 && in_array("foo", $user) && in_array("helloworld", $user)) {
+	echo "TEST PASSED\n";
+} else {
+	echo "TEST FAILED: missing elements from 'user' array\n";
+	var_dump($user);
+}	
+
+?>
+===Done===
+--EXPECT--
+*** Testing get_defined_functions() : basic functionality ***
+TEST PASSED
+===Done===
diff --git a/Zend/tests/get_defined_functions_error.phpt b/Zend/tests/get_defined_functions_error.phpt
new file mode 100644
index 0000000..0626ed0
--- /dev/null
+++ b/Zend/tests/get_defined_functions_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test get_defined_functions() function : error conditions 
+--FILE--
+<?php
+
+/* Prototype  : array get_defined_functions  ( void  )
+ * Description: Gets an array of all defined functions.
+ * Source code: Zend/zend_builtin_functions.c
+*/
+
+
+echo "*** Testing get_defined_functions() : error conditions ***\n";
+
+
+echo "\n-- Testing get_defined_functions() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( get_defined_functions($extra_arg) );
+
+?> 
+===Done===
+--EXPECTF--
+*** Testing get_defined_functions() : error conditions ***
+
+-- Testing get_defined_functions() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for get_defined_functions() in %s on line %d
+NULL
+ 
+===Done===
diff --git a/Zend/zend.c b/Zend/zend.c
index 6a171ba..4b4d498 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend.c,v 1.308.2.12.2.37 2008/12/31 11:17:32 sebastian Exp $ */
+/* $Id: zend.c,v 1.308.2.12.2.39 2009/06/16 16:09:04 rasmus Exp $ */
 
 #include "zend.h"
 #include "zend_extensions.h"
@@ -835,7 +835,7 @@ void zend_deactivate_modules(TSRMLS_D)
 	EG(opline_ptr) = NULL; /* we're no longer executing anything */
 
 	zend_try {
-		zend_hash_apply(&module_registry, (apply_func_t) module_registry_cleanup TSRMLS_CC);
+		zend_hash_reverse_apply(&module_registry, (apply_func_t) module_registry_cleanup TSRMLS_CC);
 	} zend_end_try();
 }
 
@@ -1078,7 +1078,7 @@ ZEND_API void zend_error(int type, const char *format, ...)
 	}
 }
 
-#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)
+#if defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)
 void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((alias("zend_error"),noreturn));
 #endif
 
diff --git a/Zend/zend.h b/Zend/zend.h
index 45bb90c..546de0c 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend.h,v 1.293.2.11.2.12 2008/12/31 11:17:32 sebastian Exp $ */
+/* $Id: zend.h,v 1.293.2.11.2.16 2009/06/17 08:57:04 rasmus Exp $ */
 
 #ifndef ZEND_H
 #define ZEND_H
@@ -178,6 +178,12 @@ char *alloca ();
 #endif
 
 
+#if defined(__GNUC__) && ZEND_GCC_VERSION >= 3400
+#else
+# define __restrict__
+#endif
+#define restrict __restrict__
+
 #if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(ZEND_WIN32)) && !(defined(ZTS) && defined(NETWARE)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN)
 # define do_alloca(p) alloca(p)
 # define free_alloca(p)
@@ -249,6 +255,18 @@ char *alloca ();
 #define LONG_MIN (- LONG_MAX - 1)
 #endif
 
+#if SIZEOF_LONG == 4
+#define MAX_LENGTH_OF_LONG 11
+static const char long_min_digits[] = "2147483648";
+#elif SIZEOF_LONG == 8
+#define MAX_LENGTH_OF_LONG 20
+static const char long_min_digits[] = "9223372036854775808";
+#else
+#error "Unknown SIZEOF_LONG"
+#endif
+
+#define MAX_LENGTH_OF_DOUBLE 32
+
 #undef SUCCESS
 #undef FAILURE
 #define SUCCESS 0
@@ -262,7 +280,7 @@ char *alloca ();
 #define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
 #define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, return_value_ptr, this_ptr, return_value_used TSRMLS_CC
 
-#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)
+#if defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__) && __GNUC__ >= 3
 #  define ZEND_VM_ALWAYS_INLINE  __attribute__ ((always_inline))
 void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((noreturn));
 #else
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 49568a2..7edacde 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c,v 1.296.2.27.2.41 2009/01/08 21:39:06 andrei Exp $ */
+/* $Id: zend_API.c,v 1.296.2.27.2.42 2009/03/24 16:36:20 dmitry Exp $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -1782,7 +1782,6 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, zend_function_entr
 			fname_len = strlen(ptr->fname);
 			lowercase_name = zend_str_tolower_dup(ptr->fname, fname_len);
 			if (zend_hash_exists(target_function_table, lowercase_name, fname_len+1)) {
-				efree(lowercase_name);
 				zend_error(error_type, "Function registration failed - duplicate name - %s%s%s", scope ? scope->name : "", scope ? "::" : "", ptr->fname);
 			}
 			efree(lowercase_name);
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 942b0d1..85054a9 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_alloc.c,v 1.144.2.3.2.54 2009/01/25 14:04:09 dsp Exp $ */
+/* $Id: zend_alloc.c,v 1.144.2.3.2.56 2009/05/30 16:42:24 lbarnaud Exp $ */
 
 #include "zend.h"
 #include "zend_alloc.h"
@@ -148,7 +148,12 @@ static zend_mm_segment* zend_mm_mem_mmap_realloc(zend_mm_storage *storage, zend_
 {
 	zend_mm_segment *ret;
 #ifdef HAVE_MREMAP
+#if defined(__NetBSD__)
+	/* NetBSD 5 supports mremap but takes an extra newp argument */
+	ret = (zend_mm_segment*)mremap(segment, segment->size, segment, size, MREMAP_MAYMOVE);
+#else
 	ret = (zend_mm_segment*)mremap(segment, segment->size, size, MREMAP_MAYMOVE);
+#endif
 	if (ret == MAP_FAILED) {
 #endif
 		ret = storage->handlers->_alloc(storage, size);
@@ -2472,7 +2477,11 @@ ZEND_API size_t zend_memory_usage(int real_usage TSRMLS_DC)
 	if (real_usage) {
 		return AG(mm_heap)->real_size;
 	} else {
-		return AG(mm_heap)->size;
+		size_t usage = AG(mm_heap)->size;
+#if ZEND_MM_CACHE
+		usage -= AG(mm_heap)->cached;
+#endif
+		return usage;
 	}
 }
 
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index c5525ea..b8433cb 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.33 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.39 2009/06/08 21:17:12 pajoye Exp $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -461,6 +461,7 @@ ZEND_FUNCTION(define)
 	zend_bool non_cs = 0;
 	int case_sensitive = CONST_CS;
 	zend_constant c;
+	char *p;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|b", &name, &name_len, &val, &non_cs) == FAILURE) {
 		return;
@@ -470,6 +471,34 @@ ZEND_FUNCTION(define)
 		case_sensitive = 0;
 	}
 
+	/* class constant, check if there is name and make sure class is valid & exists */
+	if ((p = zend_memnstr(name, "::", sizeof("::") - 1, name + name_len))) {
+		char *class_name;
+		int found;
+		zend_class_entry **ce;
+		ALLOCA_FLAG(use_heap)
+
+		if (p == (name + name_len - sizeof("::") + 1)) {
+			zend_error(E_WARNING, "Class constant must have a name");
+			RETURN_FALSE;
+		} else if (p == name) {
+			zend_error(E_WARNING, "Missing class name");
+			RETURN_FALSE;
+		}
+
+		class_name = do_alloca_with_limit((p - name + 1), use_heap);
+		zend_str_tolower_copy(class_name, name, (p - name));
+
+		found = zend_hash_find(EG(class_table), class_name, p - name + 1, (void **) &ce);
+
+		if (found != SUCCESS) {
+			zend_error(E_WARNING, "Class '%s' does not exist", class_name);
+			free_alloca_with_limit(class_name, use_heap);
+			RETURN_FALSE;
+		}
+		free_alloca_with_limit(class_name, use_heap);
+	}
+
 repeat:
 	switch (Z_TYPE_P(val)) {
 		case IS_LONG:
@@ -706,27 +735,22 @@ static void add_class_vars(zend_class_entry *ce, HashTable *properties, zval *re
 		while (zend_hash_get_current_data_ex(properties, (void **) &prop, &pos) == SUCCESS) {
 			char *key, *class_name, *prop_name;
 			uint key_len;
-			ulong num_index, h;
+			ulong num_index;
 			int prop_name_len = 0;			
 			zval *prop_copy;
 			zend_property_info *property_info;
+			zval zprop_name;
 
 			zend_hash_get_current_key_ex(properties, &key, &key_len, &num_index, 0, &pos);
 			zend_hash_move_forward_ex(properties, &pos);
 
 			zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name);
 			prop_name_len = strlen(prop_name);
-			
-			h = zend_get_hash_value(prop_name, prop_name_len+1);
-			if (zend_hash_quick_find(&ce->properties_info, prop_name, prop_name_len+1, h, (void **) &property_info) == FAILURE) {
-				continue;
-			}
-			
-			if (property_info->flags & ZEND_ACC_SHADOW) {
-				continue;
-			} else if ((property_info->flags & ZEND_ACC_PRIVATE) && EG(scope) != ce) {
-				continue;
-			} else if ((property_info->flags & ZEND_ACC_PROTECTED) && zend_check_protected(ce, EG(scope)) == 0) {
+
+			ZVAL_STRINGL(&zprop_name, prop_name, prop_name_len, 0);
+			property_info = zend_get_property_info(ce, &zprop_name, 1 TSRMLS_CC);
+
+			if (!property_info || property_info == &EG(std_property_info)) {
 				continue;
 			}
 
@@ -1617,7 +1641,8 @@ ZEND_FUNCTION(get_defined_constants)
 		module_names[0] = "internal";
 		zend_hash_internal_pointer_reset_ex(&module_registry, &pos);
 		while (zend_hash_get_current_data_ex(&module_registry, (void *) &module, &pos) != FAILURE) {
-			module_names[i++] = module->name;
+			module_names[module->module_number] = module->name;
+			i++;
 			zend_hash_move_forward_ex(&module_registry, &pos);
 		}
 		module_names[i] = "user";
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 5c88d09..8ad2fe6 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.c,v 1.647.2.27.2.54 2009/01/26 21:27:41 dsp Exp $ */
+/* $Id: zend_compile.c,v 1.647.2.27.2.57 2009/05/08 17:50:58 mattwil Exp $ */
 
 #include <zend_language_parser.h>
 #include "zend.h"
@@ -1536,11 +1536,8 @@ void zend_do_begin_class_member_function_call(znode *class_name, znode *method_n
 		    memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
 			zval_dtor(&opline->op2.u.constant);
 			SET_UNUSED(opline->op2);
-			efree(lcname);
-		} else {
-			efree(opline->op2.u.constant.value.str.val);
-			opline->op2.u.constant.value.str.val = lcname;
 		}
+		efree(lcname);
 	}
 
 	zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
@@ -2138,7 +2135,7 @@ static zend_bool do_inherit_method_check(HashTable *child_function_table, zend_f
 		if (!zend_do_perform_implementation_check(child, child->common.prototype)) {
 			zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(child->common.prototype), child->common.prototype->common.function_name);
 		}
-	} else if (EG(error_reporting) & E_STRICT) { /* Check E_STRICT before the check so that we save some time */
+	} else if (EG(error_reporting) & E_STRICT || EG(user_error_handler)) { /* Check E_STRICT (or custom error handler) before the check so that we save some time */
 		if (!zend_do_perform_implementation_check(child, parent)) {
 			zend_error(E_STRICT, "Declaration of %s::%s() should be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(parent), parent->common.function_name);
 		}
@@ -4195,8 +4192,6 @@ again:
 		case T_END_HEREDOC:
 			efree(Z_STRVAL(zendlval->u.constant));
 			break;
-		case EOF:
-			return EOF;
 	}
 
 	INIT_PZVAL(&zendlval->u.constant);
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index b53c227..470017d 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_exceptions.c,v 1.79.2.6.2.11 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_exceptions.c,v 1.79.2.6.2.13 2009/05/11 15:13:35 felipe Exp $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -428,9 +428,14 @@ static int _build_trace_string(zval **frame, int num_args, va_list args, zend_ha
 ZEND_METHOD(exception, getTraceAsString)
 {
 	zval *trace;
-	char *res = estrdup(""), **str = &res, *s_tmp;
+	char *res, **str, *s_tmp;
 	int res_len = 0, *len = &res_len, num = 0;
 
+	DEFAULT_0_PARAMS;
+	
+	res = estrdup("");
+	str = &res;
+
 	trace = zend_read_property(default_exception_ce, getThis(), "trace", sizeof("trace")-1, 1 TSRMLS_CC);
 	zend_hash_apply_with_arguments(Z_ARRVAL_P(trace), (apply_func_args_t)_build_trace_string, 3, str, len, &num);
 
@@ -465,6 +470,8 @@ ZEND_METHOD(exception, __toString)
 	int len;
 	zend_fcall_info fci;
 	zval fname;
+	
+	DEFAULT_0_PARAMS;
 
 	_default_exception_get_entry(getThis(), "message", sizeof("message")-1, &message TSRMLS_CC);
 	_default_exception_get_entry(getThis(), "file", sizeof("file")-1, &file TSRMLS_CC);
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 382b472..824bd0b 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.c,v 1.716.2.12.2.32 2009/02/15 14:31:17 iliaa Exp $ */
+/* $Id: zend_execute.c,v 1.716.2.12.2.33 2009/04/06 23:56:20 felipe Exp $ */
 
 #define ZEND_INTENSIVE_DEBUGGING 0
 
@@ -183,7 +183,6 @@ static inline zval *_get_zval_ptr_var(znode *node, temp_variable *Ts, zend_free_
 		if (T->str_offset.str->type != IS_STRING
 			|| ((int)T->str_offset.offset < 0)
 			|| (T->str_offset.str->value.str.len <= (int)T->str_offset.offset)) {
-			zend_error(E_NOTICE, "Uninitialized string offset:  %d", T->str_offset.offset);
 			ptr->value.str.val = STR_EMPTY_ALLOC();
 			ptr->value.str.len = 0;
 		} else {
@@ -1133,6 +1132,9 @@ static void zend_fetch_dimension_address(temp_variable *result, zval **container
 						break;
 				}
 				if (result) {
+					if (Z_LVAL_P(dim) < 0 || Z_STRLEN_P(container) <= Z_LVAL_P(dim)) {
+						zend_error(E_NOTICE, "Uninitialized string offset: %ld", Z_LVAL_P(dim));
+					}
 					container = *container_ptr;
 					result->str_offset.str = container;
 					PZVAL_LOCK(container);
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index e0aa7cd..8f884e4 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.h,v 1.84.2.4.2.10 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_execute.h,v 1.84.2.4.2.12 2009/06/14 10:05:11 pajoye Exp $ */
 
 #ifndef ZEND_EXECUTE_H
 #define ZEND_EXECUTE_H
@@ -169,6 +169,27 @@ static inline int zend_ptr_stack_get_arg(int requested_arg, void **data TSRMLS_D
 	return SUCCESS;
 }
 
+static inline void zend_arg_types_stack_2_pop(zend_ptr_stack *stack, zval **object, zend_function **fbc)
+{
+	void *a, *b;
+
+	zend_ptr_stack_2_pop(stack, &a, &b);
+
+	*object =  (zval *) a;
+	*fbc = (zend_function *) b;
+}
+
+static inline void zend_arg_types_stack_3_pop(zend_ptr_stack *stack, zend_class_entry **called_scope, zval **object, zend_function **fbc)
+{
+	void *a, *b, *c;
+
+	zend_ptr_stack_3_pop(stack, &a, &b, &c);
+
+	*called_scope = (zend_class_entry *) a;
+	*object = (zval *) b;
+	*fbc = (zend_function *) c;
+}
+
 void execute_new_code(TSRMLS_D);
 
 
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 1e3d1e0..085061f 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute_API.c,v 1.331.2.20.2.30 2009/01/15 14:23:42 dmitry Exp $ */
+/* $Id: zend_execute_API.c,v 1.331.2.20.2.31 2009/04/08 00:28:04 felipe Exp $ */
 
 #include <stdio.h>
 #include <signal.h>
@@ -835,11 +835,8 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
 				efree(function_name_lc);
 			}
 		} else if (calling_scope) {
-			char *function_name_lc = zend_str_tolower_dup(fname, fname_len);
+			EX(function_state).function = zend_std_get_static_method(calling_scope, fname, fname_len TSRMLS_CC);
 
-			EX(function_state).function = 
-				zend_std_get_static_method(calling_scope, function_name_lc, fname_len TSRMLS_CC);
-			efree(function_name_lc);
 			if (check_scope_or_static && EX(function_state).function
 			&& !(EX(function_state).function->common.fn_flags & ZEND_ACC_STATIC)
 			&& !instanceof_function(check_scope_or_static, calling_scope TSRMLS_CC)) {
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 887a754..8e27653 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_hash.c,v 1.121.2.4.2.10 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_hash.c,v 1.121.2.4.2.11 2009/06/07 19:28:32 mattwil Exp $ */
 
 #include "zend.h"
 
@@ -376,7 +376,7 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void
 			UPDATE_DATA(ht, p, pData, nDataSize);
 			HANDLE_UNBLOCK_INTERRUPTIONS();
 			if ((long)h >= (long)ht->nNextFreeElement) {
-				ht->nNextFreeElement = h + 1;
+				ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX;
 			}
 			if (pDest) {
 				*pDest = p->pData;
@@ -404,7 +404,7 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void
 	HANDLE_UNBLOCK_INTERRUPTIONS();
 
 	if ((long)h >= (long)ht->nNextFreeElement) {
-		ht->nNextFreeElement = h + 1;
+		ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX;
 	}
 	ht->nNumOfElements++;
 	ZEND_HASH_IF_FULL_DO_RESIZE(ht);
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index 0f991eb..6904112 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_hash.h,v 1.78.2.2.2.4 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_hash.h,v 1.78.2.2.2.5 2009/05/14 01:28:15 mattwil Exp $ */
 
 #ifndef ZEND_HASH_H
 #define ZEND_HASH_H
@@ -298,40 +298,41 @@ END_EXTERN_C()
 	zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent)
 
 
-#define HANDLE_NUMERIC(key, length, func) {												\
-	register char *tmp=key;																\
-																						\
-	if (*tmp=='-') {																	\
-		tmp++;																			\
-	}																					\
-	if ((*tmp>='0' && *tmp<='9')) do { /* possibly a numeric index */					\
-		char *end=key+length-1;															\
-		long idx;																		\
-																						\
-		if (*tmp++=='0' && length>2) { /* don't accept numbers with leading zeros */	\
-			break;																		\
-		}																				\
-		while (tmp<end) {																\
-			if (!(*tmp>='0' && *tmp<='9')) {											\
-				break;																	\
-			}																			\
-			tmp++;																		\
-		}																				\
-		if (tmp==end && *tmp=='\0') { /* a numeric index */								\
-			if (*key=='-') {															\
-				idx = strtol(key, NULL, 10);											\
-				if (idx!=LONG_MIN) {													\
-					return func;														\
-				}																		\
-			} else {																	\
-				idx = strtol(key, NULL, 10);											\
-				if (idx!=LONG_MAX) {													\
-					return func;														\
-				}																		\
-			}																			\
-		}																				\
-	} while (0);																		\
-}
+#define HANDLE_NUMERIC(key, length, func) do {								\
+	register const char *tmp = key;											\
+																			\
+	if (*tmp == '-') {														\
+		tmp++;																\
+	}																		\
+	if (*tmp >= '0' && *tmp <= '9') { /* possibly a numeric index */		\
+		const char *end = key + length - 1;									\
+		long idx;															\
+																			\
+		if ((*end != '\0') /* not a null terminated string */				\
+		 || (*tmp == '0' && length > 2) /* numbers with leading zeros */	\
+		 || (end - tmp > MAX_LENGTH_OF_LONG - 1) /* number too long */		\
+		 || (SIZEOF_LONG == 4 &&											\
+		     end - tmp == MAX_LENGTH_OF_LONG - 1 &&							\
+		     *tmp > '2')) { /* overflow */									\
+			break;															\
+		}																	\
+		idx = (*tmp - '0');													\
+		while (++tmp != end && *tmp >= '0' && *tmp <= '9') {				\
+			idx = (idx * 10) + (*tmp - '0');								\
+		}																	\
+		if (tmp == end) {													\
+			if (*key == '-') {												\
+				idx = -idx;													\
+				if (idx > 0) { /* overflow */								\
+					break;													\
+				}															\
+			} else if (idx < 0) { /* overflow */							\
+				break;														\
+			}																\
+			return func;													\
+		}																	\
+	}																		\
+} while (0)
 
 
 static inline int zend_symtable_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest)					\
@@ -343,7 +344,7 @@ static inline int zend_symtable_update(HashTable *ht, char *arKey, uint nKeyLeng
 
 static inline int zend_symtable_del(HashTable *ht, char *arKey, uint nKeyLength)
 {
-	HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_del(ht, idx))
+	HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_del(ht, idx));
 	return zend_hash_del(ht, arKey, nKeyLength);
 }
 
diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
index a2fe8b6..7a09246 100644
--- a/Zend/zend_highlight.c
+++ b/Zend/zend_highlight.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_highlight.c,v 1.49.2.3.2.4 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_highlight.c,v 1.49.2.3.2.5 2009/05/08 17:50:58 mattwil Exp $ */
 
 #include "zend.h"
 #include <zend_language_parser.h>
@@ -148,19 +148,11 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
 				zend_printf("<span style=\"color: %s\">", last_color);
 			}
 		}
-		switch (token_type) {
-			case T_END_HEREDOC:
-				zend_html_puts(token.value.str.val, token.value.str.len TSRMLS_CC);
-				break;
-			default:
-				zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng) TSRMLS_CC);
-				break;
-		}
+
+		zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng) TSRMLS_CC);
 
 		if (token.type == IS_STRING) {
 			switch (token_type) {
-				case EOF:
-					goto done;
 				case T_OPEN_TAG:
 				case T_OPEN_TAG_WITH_ECHO:
 				case T_CLOSE_TAG:
@@ -178,19 +170,6 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
 		token.type = 0;
 	}
 
-	/* handler for trailing comments, see bug #42767 */
-	if (LANG_SCNG(yy_leng) && LANG_SCNG(_yy_more_len)) {
-		if (last_color != syntax_highlighter_ini->highlight_comment) {
-			if (last_color != syntax_highlighter_ini->highlight_html) {
-				zend_printf("</span>");
-			}
-			if (syntax_highlighter_ini->highlight_comment != syntax_highlighter_ini->highlight_html) {
-				zend_printf("<span style=\"color: %s\">", syntax_highlighter_ini->highlight_comment);
-			}
-		}
-		zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(_yy_more_len) TSRMLS_CC);
-	}
-done:
 	if (last_color != syntax_highlighter_ini->highlight_html) {
 		zend_printf("</span>\n");
 	}
diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c
index 57f018c..e4c6068 100644
--- a/Zend/zend_ini_scanner.c
+++ b/Zend/zend_ini_scanner.c
@@ -18,7 +18,7 @@
 /* A Lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /repository/ZendEngine2/Attic/flex.skl,v 1.31 2003/08/11 05:24:41 fujimoto Exp $
+ * $Header: /repository/ZendEngine2/Attic/flex.skl,v 1.31.6.1 2009/04/27 19:54:34 felipe Exp $
  * vim:ft=lex:
  */
 
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 2e935da..5fd3857 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -18,7 +18,7 @@
 /* A Lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /repository/ZendEngine2/Attic/flex.skl,v 1.31 2003/08/11 05:24:41 fujimoto Exp $
+ * $Header: /repository/ZendEngine2/Attic/flex.skl,v 1.31.6.1 2009/04/27 19:54:34 felipe Exp $
  * vim:ft=lex:
  */
 
@@ -3031,7 +3031,7 @@ char *yytext;
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.l,v 1.131.2.11.2.17 2008/05/10 09:18:27 mattwil Exp $ */
+/* $Id: zend_language_scanner.l,v 1.131.2.11.2.18 2009/05/08 17:50:58 mattwil Exp $ */
 
 #define yyleng SCNG(yy_leng)
 #define yytext SCNG(yy_text)
@@ -5587,7 +5587,9 @@ case YY_STATE_EOF(ST_COMMENT):
 case YY_STATE_EOF(ST_DOC_COMMENT):
 {
 	zend_error(E_COMPILE_WARNING,"Unterminated comment starting line %d", CG(comment_start_line));
-	return 0;
+	yyless(yyleng - 1);
+	BEGIN(ST_IN_SCRIPTING);
+	return T_COMMENT;
 }
 	YY_BREAK
 case 158:
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 0042603..54c231f 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.l,v 1.131.2.11.2.17 2008/05/10 09:18:27 mattwil Exp $ */
+/* $Id: zend_language_scanner.l,v 1.131.2.11.2.18 2009/05/08 17:50:58 mattwil Exp $ */
 
 #define yyleng SCNG(yy_leng)
 #define yytext SCNG(yy_text)
@@ -2033,7 +2033,9 @@ wrong_label:
 
 <ST_COMMENT,ST_DOC_COMMENT><<EOF>> {
 	zend_error(E_COMPILE_WARNING,"Unterminated comment starting line %d", CG(comment_start_line));
-	return 0;
+	yyless(yyleng - 1);
+	BEGIN(ST_IN_SCRIPTING);
+	return T_COMMENT;
 }
 
 
diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c
index 90bcf80..a5cfd4b 100644
--- a/Zend/zend_multibyte.c
+++ b/Zend/zend_multibyte.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_multibyte.c,v 1.4.2.4.2.3 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_multibyte.c,v 1.4.2.4.2.4 2009/03/18 16:53:46 moriyoshi Exp $ */
 
 #include "zend.h"
 #include "zend_compile.h"
@@ -37,8 +37,8 @@ static zend_encoding* zend_multibyte_detect_utf_encoding(char *script, int scrip
 /*
  * encodings
  */
-const char *ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL};
-zend_encoding encoding_ucs2 = {
+static const char *ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL};
+static zend_encoding encoding_ucs2 = {
 	NULL,
 	NULL,
 	"UCS-2",
@@ -46,7 +46,7 @@ zend_encoding encoding_ucs2 = {
 	0
 };
 
-zend_encoding encoding_ucs2be = {
+static zend_encoding encoding_ucs2be = {
 	NULL,
 	NULL,
 	"UCS-2BE",
@@ -54,7 +54,7 @@ zend_encoding encoding_ucs2be = {
 	0
 };
 
-zend_encoding encoding_ucs2le = {
+static zend_encoding encoding_ucs2le = {
 	NULL,
 	NULL,
 	"UCS-2LE",
@@ -62,8 +62,8 @@ zend_encoding encoding_ucs2le = {
 	0
 };
 
-const char *ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL};
-zend_encoding encoding_ucs4 = {
+static const char *ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL};
+static zend_encoding encoding_ucs4 = {
 	NULL,
 	NULL,
 	"UCS-4",
@@ -71,7 +71,7 @@ zend_encoding encoding_ucs4 = {
 	0
 };
 
-zend_encoding encoding_ucs4be = {
+static zend_encoding encoding_ucs4be = {
 	NULL,
 	NULL,
 	"UCS-4BE",
@@ -79,7 +79,7 @@ zend_encoding encoding_ucs4be = {
 	0
 };
 
-zend_encoding encoding_ucs4le = {
+static zend_encoding encoding_ucs4le = {
 	NULL,
 	NULL,
 	"UCS-4LE",
@@ -87,8 +87,8 @@ zend_encoding encoding_ucs4le = {
 	0
 };
 
-const char *utf32_aliases[] = {"utf32", NULL};
-zend_encoding encoding_utf32 = {
+static const char *utf32_aliases[] = {"utf32", NULL};
+static zend_encoding encoding_utf32 = {
 	NULL,
 	NULL,
 	"UTF-32",
@@ -96,7 +96,7 @@ zend_encoding encoding_utf32 = {
 	0
 };
 
-zend_encoding encoding_utf32be = {
+static zend_encoding encoding_utf32be = {
 	NULL,
 	NULL,
 	"UTF-32BE",
@@ -104,7 +104,7 @@ zend_encoding encoding_utf32be = {
 	0
 };
 
-zend_encoding encoding_utf32le = {
+static zend_encoding encoding_utf32le = {
 	NULL,
 	NULL,
 	"UTF-32LE",
@@ -112,8 +112,8 @@ zend_encoding encoding_utf32le = {
 	0
 };
 
-const char *utf16_aliases[] = {"utf16", NULL};
-zend_encoding encoding_utf16 = {
+static const char *utf16_aliases[] = {"utf16", NULL};
+static zend_encoding encoding_utf16 = {
 	NULL,
 	NULL,
 	"UTF-16",
@@ -121,7 +121,7 @@ zend_encoding encoding_utf16 = {
 	0
 };
 
-zend_encoding encoding_utf16be = {
+static zend_encoding encoding_utf16be = {
 	NULL,
 	NULL,
 	"UTF-16BE",
@@ -129,7 +129,7 @@ zend_encoding encoding_utf16be = {
 	0
 };
 
-zend_encoding encoding_utf16le = {
+static zend_encoding encoding_utf16le = {
 	NULL,
 	NULL,
 	"UTF-16LE",
@@ -137,8 +137,8 @@ zend_encoding encoding_utf16le = {
 	0
 };
 
-const char *utf8_aliases[] = {"utf8", NULL};
-zend_encoding encoding_utf8 = {
+static const char *utf8_aliases[] = {"utf8", NULL};
+static zend_encoding encoding_utf8 = {
 	NULL,
 	NULL,
 	"UTF-8",
@@ -146,8 +146,8 @@ zend_encoding encoding_utf8 = {
 	1
 };
 
-const char *ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "cp367", "csASCII", NULL};
-zend_encoding encoding_ascii = {
+static const char *ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "cp367", "csASCII", NULL};
+static zend_encoding encoding_ascii = {
 	NULL,
 	NULL,
 	"ASCII",
@@ -155,8 +155,8 @@ zend_encoding encoding_ascii = {
 	1
 };
 
-const char *euc_jp_aliases[] = {"EUC", "EUC_JP", "eucJP", "x-euc-jp", NULL};
-zend_encoding encoding_euc_jp = {
+static const char *euc_jp_aliases[] = {"EUC", "EUC_JP", "eucJP", "x-euc-jp", NULL};
+static zend_encoding encoding_euc_jp = {
 	NULL,
 	NULL,
 	"EUC-JP",
@@ -164,8 +164,8 @@ zend_encoding encoding_euc_jp = {
 	1
 };
 
-const char *sjis_aliases[] = {"x-sjis", "SJIS", "SHIFT-JIS", NULL};
-zend_encoding encoding_sjis = {
+static const char *sjis_aliases[] = {"x-sjis", "SJIS", "SHIFT-JIS", NULL};
+static zend_encoding encoding_sjis = {
 	sjis_input_filter,
 	sjis_output_filter,
 	"Shift_JIS",
@@ -173,8 +173,8 @@ zend_encoding encoding_sjis = {
 	0
 };
 
-const char *eucjp_win_aliases[] = {"eucJP-open", NULL};
-zend_encoding encoding_eucjp_win = {
+static const char *eucjp_win_aliases[] = {"eucJP-open", NULL};
+static zend_encoding encoding_eucjp_win = {
 	NULL,
 	NULL,
 	"eucJP-win",
@@ -182,8 +182,8 @@ zend_encoding encoding_eucjp_win = {
 	1
 };
 
-const char *sjis_win_aliases[] = {"SJIS-open", "MS_Kanji", "Windows-31J", "CP932", NULL};
-zend_encoding encoding_sjis_win = {
+static const char *sjis_win_aliases[] = {"SJIS-open", "MS_Kanji", "Windows-31J", "CP932", NULL};
+static zend_encoding encoding_sjis_win = {
 	/* sjis-filters does not care about diffs of Shift_JIS and CP932 */
 	sjis_input_filter,
 	sjis_output_filter,
@@ -192,8 +192,8 @@ zend_encoding encoding_sjis_win = {
 	0
 };
 
-const char *jis_aliases[] = {"ISO-2022-JP", NULL};
-zend_encoding encoding_jis = {
+static const char *jis_aliases[] = {"ISO-2022-JP", NULL};
+static zend_encoding encoding_jis = {
 	NULL,
 	NULL,
 	"JIS",
@@ -201,8 +201,8 @@ zend_encoding encoding_jis = {
 	0
 };
 
-const char *euc_cn_aliases[] = {"CN-GB", "EUC_CN", "eucCN", "x-euc-cn", "gb2312", NULL};
-zend_encoding encoding_euc_cn = {
+static const char *euc_cn_aliases[] = {"CN-GB", "EUC_CN", "eucCN", "x-euc-cn", "gb2312", NULL};
+static zend_encoding encoding_euc_cn = {
 	NULL,
 	NULL,
 	"EUC-CN",
@@ -210,8 +210,8 @@ zend_encoding encoding_euc_cn = {
 	1
 };
 
-const char *cp936_aliases[] = {"CP-936", NULL};
-zend_encoding encoding_cp936 = {
+static const char *cp936_aliases[] = {"CP-936", NULL};
+static zend_encoding encoding_cp936 = {
 	NULL,
 	NULL,
 	"CP936",
@@ -219,8 +219,8 @@ zend_encoding encoding_cp936 = {
 	0
 };
 
-const char *hz_aliases[] = {"HZ-GB-2312", NULL};
-zend_encoding encoding_hz = {
+static const char *hz_aliases[] = {"HZ-GB-2312", NULL};
+static zend_encoding encoding_hz = {
 	NULL,
 	NULL,
 	"HZ",
@@ -228,8 +228,8 @@ zend_encoding encoding_hz = {
 	0
 };
 
-const char *euc_tw_aliases[] = {"EUC_TW", "eucTW", "x-euc-tw", NULL};
-zend_encoding encoding_euc_tw = {
+static const char *euc_tw_aliases[] = {"EUC_TW", "eucTW", "x-euc-tw", NULL};
+static zend_encoding encoding_euc_tw = {
 	NULL,
 	NULL,
 	"EUC-TW",
@@ -237,8 +237,8 @@ zend_encoding encoding_euc_tw = {
 	1
 };
 
-const char *big5_aliases[] = {"BIG5", "CN-BIG5", "BIG-FIVE", "BIGFIVE", "CP950", NULL};
-zend_encoding encoding_big5 = {
+static const char *big5_aliases[] = {"BIG5", "CN-BIG5", "BIG-FIVE", "BIGFIVE", "CP950", NULL};
+static zend_encoding encoding_big5 = {
 	NULL,
 	NULL,
 	"BIG-5",
@@ -246,8 +246,8 @@ zend_encoding encoding_big5 = {
 	0
 };
 
-const char *euc_kr_aliases[] = {"EUC_KR", "eucKR", "x-euc-kr", NULL};
-zend_encoding encoding_euc_kr = {
+static const char *euc_kr_aliases[] = {"EUC_KR", "eucKR", "x-euc-kr", NULL};
+static zend_encoding encoding_euc_kr = {
 	NULL,
 	NULL,
 	"EUC-KR",
@@ -255,8 +255,8 @@ zend_encoding encoding_euc_kr = {
 	1
 };
 
-const char *uhc_aliases[] = {"CP949", NULL};
-zend_encoding encoding_uhc = {
+static const char *uhc_aliases[] = {"CP949", NULL};
+static zend_encoding encoding_uhc = {
 	NULL,
 	NULL,
 	"UHC",
@@ -264,7 +264,7 @@ zend_encoding encoding_uhc = {
 	1
 };
 
-zend_encoding encoding_2022kr = {
+static zend_encoding encoding_2022kr = {
 	NULL,
 	NULL,
 	"ISO-2022-KR",
@@ -272,8 +272,8 @@ zend_encoding encoding_2022kr = {
 	0
 };
 
-const char *cp1252_aliases[] = {"cp1252", NULL};
-zend_encoding encoding_cp1252 = {
+static const char *cp1252_aliases[] = {"cp1252", NULL};
+static zend_encoding encoding_cp1252 = {
 	NULL,
 	NULL,
 	"Windows-1252",
@@ -281,8 +281,8 @@ zend_encoding encoding_cp1252 = {
 	1
 };
 
-const char *iso_8859_1_aliases[] = {"ISO_8859-1", "latin1", NULL};
-zend_encoding encoding_8859_1 = {
+static const char *iso_8859_1_aliases[] = {"ISO_8859-1", "latin1", NULL};
+static zend_encoding encoding_8859_1 = {
 	NULL,
 	NULL,
 	"ISO-8859-1",
@@ -290,8 +290,8 @@ zend_encoding encoding_8859_1 = {
 	1
 };
 
-const char *iso_8859_2_aliases[] = {"ISO_8859-2", "latin2", NULL};
-zend_encoding encoding_8859_2 = {
+static const char *iso_8859_2_aliases[] = {"ISO_8859-2", "latin2", NULL};
+static zend_encoding encoding_8859_2 = {
 	NULL,
 	NULL,
 	"ISO-8859-2",
@@ -299,8 +299,8 @@ zend_encoding encoding_8859_2 = {
 	1
 };
 
-const char *iso_8859_3_aliases[] = {"ISO_8859-3", "latin3", NULL};
-zend_encoding encoding_8859_3 = {
+static const char *iso_8859_3_aliases[] = {"ISO_8859-3", "latin3", NULL};
+static zend_encoding encoding_8859_3 = {
 	NULL,
 	NULL,
 	"ISO-8859-3",
@@ -308,8 +308,8 @@ zend_encoding encoding_8859_3 = {
 	1
 };
 
-const char *iso_8859_4_aliases[] = {"ISO_8859-4", "latin4", NULL};
-zend_encoding encoding_8859_4 = {
+static const char *iso_8859_4_aliases[] = {"ISO_8859-4", "latin4", NULL};
+static zend_encoding encoding_8859_4 = {
 	NULL,
 	NULL,
 	"ISO-8859-4",
@@ -317,8 +317,8 @@ zend_encoding encoding_8859_4 = {
 	1
 };
 
-const char *iso_8859_5_aliases[] = {"ISO_8859-5", "cyrillic", NULL};
-zend_encoding encoding_8859_5 = {
+static const char *iso_8859_5_aliases[] = {"ISO_8859-5", "cyrillic", NULL};
+static zend_encoding encoding_8859_5 = {
 	NULL,
 	NULL,
 	"ISO-8859-5",
@@ -326,8 +326,8 @@ zend_encoding encoding_8859_5 = {
 	1
 };
 
-const char *iso_8859_6_aliases[] = {"ISO_8859-6", "arabic", NULL};
-zend_encoding encoding_8859_6 = {
+static const char *iso_8859_6_aliases[] = {"ISO_8859-6", "arabic", NULL};
+static zend_encoding encoding_8859_6 = {
 	NULL,
 	NULL,
 	"ISO-8859-6",
@@ -335,8 +335,8 @@ zend_encoding encoding_8859_6 = {
 	1
 };
 
-const char *iso_8859_7_aliases[] = {"ISO_8859-7", "greek", NULL};
-zend_encoding encoding_8859_7 = {
+static const char *iso_8859_7_aliases[] = {"ISO_8859-7", "greek", NULL};
+static zend_encoding encoding_8859_7 = {
 	NULL,
 	NULL,
 	"ISO-8859-7",
@@ -344,8 +344,8 @@ zend_encoding encoding_8859_7 = {
 	1
 };
 
-const char *iso_8859_8_aliases[] = {"ISO_8859-8", "hebrew", NULL};
-zend_encoding encoding_8859_8 = {
+static const char *iso_8859_8_aliases[] = {"ISO_8859-8", "hebrew", NULL};
+static zend_encoding encoding_8859_8 = {
 	NULL,
 	NULL,
 	"ISO-8859-8",
@@ -353,8 +353,8 @@ zend_encoding encoding_8859_8 = {
 	1
 };
 
-const char *iso_8859_9_aliases[] = {"ISO_8859-9", "latin5", NULL};
-zend_encoding encoding_8859_9 = {
+static const char *iso_8859_9_aliases[] = {"ISO_8859-9", "latin5", NULL};
+static zend_encoding encoding_8859_9 = {
 	NULL,
 	NULL,
 	"ISO-8859-9",
@@ -362,8 +362,8 @@ zend_encoding encoding_8859_9 = {
 	1
 };
 
-const char *iso_8859_10_aliases[] = {"ISO_8859-10", "latin6", NULL};
-zend_encoding encoding_8859_10 = {
+static const char *iso_8859_10_aliases[] = {"ISO_8859-10", "latin6", NULL};
+static zend_encoding encoding_8859_10 = {
 	NULL,
 	NULL,
 	"ISO-8859-10",
@@ -371,8 +371,8 @@ zend_encoding encoding_8859_10 = {
 	1
 };
 
-const char *iso_8859_13_aliases[] = {"ISO_8859-13", NULL};
-zend_encoding encoding_8859_13 = {
+static const char *iso_8859_13_aliases[] = {"ISO_8859-13", NULL};
+static zend_encoding encoding_8859_13 = {
 	NULL,
 	NULL,
 	"ISO-8859-13",
@@ -380,8 +380,8 @@ zend_encoding encoding_8859_13 = {
 	1
 };
 
-const char *iso_8859_14_aliases[] = {"ISO_8859-14", "latin8", NULL};
-zend_encoding encoding_8859_14 = {
+static const char *iso_8859_14_aliases[] = {"ISO_8859-14", "latin8", NULL};
+static zend_encoding encoding_8859_14 = {
 	NULL,
 	NULL,
 	"ISO-8859-14",
@@ -389,8 +389,8 @@ zend_encoding encoding_8859_14 = {
 	1
 };
 
-const char *iso_8859_15_aliases[] = {"ISO_8859-15", NULL};
-zend_encoding encoding_8859_15 = {
+static const char *iso_8859_15_aliases[] = {"ISO_8859-15", NULL};
+static zend_encoding encoding_8859_15 = {
 	NULL,
 	NULL,
 	"ISO-8859-15",
@@ -398,8 +398,8 @@ zend_encoding encoding_8859_15 = {
 	1
 };
 
-const char *cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL};
-zend_encoding encoding_cp1251 = {
+static const char *cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL};
+static zend_encoding encoding_cp1251 = {
 	NULL,
 	NULL,
 	"Windows-1251",
@@ -407,8 +407,8 @@ zend_encoding encoding_cp1251 = {
 	1
 };
 
-const char *cp866_aliases[] = {"CP866", "CP-866", "IBM-866", NULL};
-zend_encoding encoding_cp866 = {
+static const char *cp866_aliases[] = {"CP866", "CP-866", "IBM-866", NULL};
+static zend_encoding encoding_cp866 = {
 	NULL,
 	NULL,
 	"CP866",
@@ -416,8 +416,8 @@ zend_encoding encoding_cp866 = {
 	1
 };
 
-const char *koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL};
-zend_encoding encoding_koi8r = {
+static const char *koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL};
+static zend_encoding encoding_koi8r = {
 	NULL,
 	NULL,
 	"KOI8-R",
@@ -425,7 +425,7 @@ zend_encoding encoding_koi8r = {
 	1
 };
 
-zend_encoding *zend_encoding_table[] = {
+static zend_encoding *zend_encoding_table[] = {
 	&encoding_ucs4,
 	&encoding_ucs4be,
 	&encoding_ucs4le,
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index b09668b..d7656b4 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_object_handlers.c,v 1.135.2.6.2.32 2009/02/17 17:09:05 iliaa Exp $ */
+/* $Id: zend_object_handlers.c,v 1.135.2.6.2.35 2009/06/12 21:33:46 felipe Exp $ */
 
 #include "zend.h"
 #include "zend_globals.h"
@@ -564,8 +564,8 @@ static zval **zend_std_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC
 		zend_guard *guard;
 
 		if (!zobj->ce->__get ||
-		    zend_get_property_guard(zobj, property_info, member, &guard) != SUCCESS ||
-		    guard->in_get) {
+			zend_get_property_guard(zobj, property_info, member, &guard) != SUCCESS ||
+			(property_info && guard->in_get)) {
 			/* we don't have access controls - will just add it */
 			new_zval = &EG(uninitialized_zval);
 
@@ -762,15 +762,15 @@ static inline zend_class_entry * zend_get_function_root_class(zend_function *fbc
 }
 
 
-static inline union _zend_function *zend_get_user_call_function(zend_object *zobj, char *method_name, int method_len) /* {{{ */
+static inline union _zend_function *zend_get_user_call_function(zend_class_entry *ce, const char *method_name, int method_len) /* {{{ */
 {
 	zend_internal_function *call_user_call = emalloc(sizeof(zend_internal_function));
 	call_user_call->type = ZEND_INTERNAL_FUNCTION;
-	call_user_call->module = zobj->ce->module;
+	call_user_call->module = ce->module;
 	call_user_call->handler = zend_std_call_user_call;
 	call_user_call->arg_info = NULL;
 	call_user_call->num_args = 0;
-	call_user_call->scope = zobj->ce;
+	call_user_call->scope = ce;
 	call_user_call->fn_flags = 0;
 	call_user_call->function_name = estrndup(method_name, method_len);
 	call_user_call->pass_rest_by_reference = 0;
@@ -796,7 +796,7 @@ static union _zend_function *zend_std_get_method(zval **object_ptr, char *method
 	if (zend_hash_find(&zobj->ce->function_table, lc_method_name, method_len+1, (void **)&fbc) == FAILURE) {
 		free_alloca_with_limit(lc_method_name, use_heap);
 		if (zobj->ce->__call) {
-			return zend_get_user_call_function(zobj, method_name, method_len);
+			return zend_get_user_call_function(zobj->ce, method_name, method_len);
 		} else {
 			return NULL;
 		}
@@ -814,7 +814,7 @@ static union _zend_function *zend_std_get_method(zval **object_ptr, char *method
 			fbc = updated_fbc;
 		} else {
 			if (zobj->ce->__call) {
-				fbc = zend_get_user_call_function(zobj, method_name, method_len);
+				fbc = zend_get_user_call_function(zobj->ce, method_name, method_len);
 			} else {
 				zend_error(E_ERROR, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), method_name, EG(scope) ? EG(scope)->name : "");
 			}
@@ -840,7 +840,7 @@ static union _zend_function *zend_std_get_method(zval **object_ptr, char *method
 			 */
 			if (!zend_check_protected(zend_get_function_root_class(fbc), EG(scope))) {
 				if (zobj->ce->__call) {
-					fbc = zend_get_user_call_function(zobj, method_name, method_len);
+					fbc = zend_get_user_call_function(zobj->ce, method_name, method_len);
 				} else {
 					zend_error(E_ERROR, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), method_name, EG(scope) ? EG(scope)->name : "");
 				}
@@ -856,27 +856,19 @@ static union _zend_function *zend_std_get_method(zval **object_ptr, char *method
 /* This is not (yet?) in the API, but it belongs in the built-in objects callbacks */
 ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, char *function_name_strval, int function_name_strlen TSRMLS_DC)
 {
-	zend_function *fbc;
+	char *lc_function_name;
+	zend_function *fbc;	
+	
+	lc_function_name = zend_str_tolower_dup(function_name_strval, function_name_strlen);
+
+	if (zend_hash_find(&ce->function_table, lc_function_name, function_name_strlen+1, (void **) &fbc)==FAILURE) {
+		efree(lc_function_name);
 
-	if (zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void **) &fbc)==FAILURE) {
 		if (ce->__call &&
 		    EG(This) &&
 		    Z_OBJ_HT_P(EG(This))->get_class_entry &&
 		    instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
-			zend_internal_function *call_user_call = emalloc(sizeof(zend_internal_function));
-
-			call_user_call->type = ZEND_INTERNAL_FUNCTION;
-			call_user_call->module = ce->module;
-			call_user_call->handler = zend_std_call_user_call;
-			call_user_call->arg_info = NULL;
-			call_user_call->num_args = 0;
-			call_user_call->scope = ce;
-			call_user_call->fn_flags = 0;
-			call_user_call->function_name = estrndup(function_name_strval, function_name_strlen);
-			call_user_call->pass_rest_by_reference = 0;
-			call_user_call->return_reference = ZEND_RETURN_VALUE;
-
-			return (union _zend_function *)call_user_call;
+			return zend_get_user_call_function(ce, function_name_strval, function_name_strlen);
 		} else {
 			char *class_name = ce->name;
 
@@ -886,6 +878,8 @@ ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, char *f
 			zend_error(E_ERROR, "Call to undefined method %s::%s()", class_name, function_name_strval);
 		}
 	}
+	efree(lc_function_name);
+
 	if (fbc->op_array.fn_flags & ZEND_ACC_PUBLIC) {
 		/* No further checks necessary, most common case */
 	} else if (fbc->op_array.fn_flags & ZEND_ACC_PRIVATE) {
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 41ec726..cd8fee6 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_operators.h,v 1.94.2.4.2.15 2009/02/15 14:31:17 iliaa Exp $ */
+/* $Id: zend_operators.h,v 1.94.2.4.2.16 2009/05/14 01:28:15 mattwil Exp $ */
 
 #ifndef ZEND_OPERATORS_H
 #define ZEND_OPERATORS_H
@@ -36,18 +36,6 @@
 #include "ext/bcmath/libbcmath/src/bcmath.h"
 #endif
 
-#if SIZEOF_LONG == 4
-#define MAX_LENGTH_OF_LONG 11
-static const char long_min_digits[] = "2147483648";
-#elif SIZEOF_LONG == 8
-#define MAX_LENGTH_OF_LONG 20
-static const char long_min_digits[] = "9223372036854775808";
-#else
-#error "Unknown SIZEOF_LONG"
-#endif
-
-#define MAX_LENGTH_OF_DOUBLE 32
-
 BEGIN_EXTERN_C()
 ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h
index 0927456..8640d6e 100644
--- a/Zend/zend_ptr_stack.h
+++ b/Zend/zend_ptr_stack.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ptr_stack.h,v 1.22.2.2.2.3 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_ptr_stack.h,v 1.22.2.2.2.5 2009/06/05 11:21:47 lbarnaud Exp $ */
 
 #ifndef ZEND_PTR_STACK_H
 #define ZEND_PTR_STACK_H
diff --git a/Zend/zend_types.h b/Zend/zend_types.h
index ef5a5ac..e2211c3 100644
--- a/Zend/zend_types.h
+++ b/Zend/zend_types.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_types.h,v 1.6.2.2.2.5 2008/12/31 11:17:33 sebastian Exp $ */
+/* $Id: zend_types.h,v 1.6.2.2.2.7 2009/06/05 11:21:47 lbarnaud Exp $ */
 
 #ifndef ZEND_TYPES_H
 #define ZEND_TYPES_H
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index ce9304c..1090a16 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_variables.c,v 1.62.2.1.2.4 2008/12/31 11:17:34 sebastian Exp $ */
+/* $Id: zend_variables.c,v 1.62.2.1.2.5 2009/05/01 20:30:59 jani Exp $ */
 
 #include <stdio.h>
 #include "zend.h"
@@ -26,8 +26,7 @@
 #include "zend_constants.h"
 #include "zend_list.h"
 
-
-ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC)
+ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC) /* {{{ */
 {
 	switch (zvalue->type & ~IS_CONSTANT_INDEX) {
 		case IS_STRING:
@@ -69,9 +68,9 @@ ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC)
 			break;
 	}
 }
+/* }}} */
 
-
-ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
+ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC) /* {{{ */
 {
 	switch (zvalue->type & ~IS_CONSTANT_INDEX) {
 		case IS_STRING:
@@ -93,15 +92,15 @@ ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
 			break;
 	}
 }
+/* }}} */
 
-
-ZEND_API void zval_add_ref(zval **p)
+ZEND_API void zval_add_ref(zval **p) /* {{{ */
 {
 	(*p)->refcount++;
 }
+/* }}} */
 
-
-ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC)
+ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) /* {{{ */
 {
 	switch (zvalue->type) {
 		case IS_RESOURCE: {
@@ -143,43 +142,44 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC)
 			break;
 	}
 }
+/* }}} */
 
-
-ZEND_API int zend_print_variable(zval *var) 
+ZEND_API int zend_print_variable(zval *var) /* {{{ */
 {
 	return zend_print_zval(var, 0);
 }
-
+/* }}} */
 
 #if ZEND_DEBUG
-ZEND_API void _zval_copy_ctor_wrapper(zval *zvalue)
+ZEND_API void _zval_copy_ctor_wrapper(zval *zvalue) /* {{{ */
 {
 	zval_copy_ctor(zvalue);
 }
+/* }}} */
 
-
-ZEND_API void _zval_dtor_wrapper(zval *zvalue)
+ZEND_API void _zval_dtor_wrapper(zval *zvalue) /* {{{ */
 {
 	zval_dtor(zvalue);
 }
+/* }}} */
 
-
-ZEND_API void _zval_internal_dtor_wrapper(zval *zvalue)
+ZEND_API void _zval_internal_dtor_wrapper(zval *zvalue) /* {{{ */
 {
 	zval_internal_dtor(zvalue);
 }
+/* }}} */
 
-
-ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr)
+ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr) /* {{{ */
 {
 	zval_ptr_dtor(zval_ptr);
 }
+/* }}} */
 
-
-ZEND_API void _zval_internal_ptr_dtor_wrapper(zval **zval_ptr)
+ZEND_API void _zval_internal_ptr_dtor_wrapper(zval **zval_ptr) /* {{{ */
 {
 	zval_internal_ptr_dtor(zval_ptr);
 }
+/* }}} */
 #endif
 
 /*
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h
index abd6130..3a57907 100644
--- a/Zend/zend_variables.h
+++ b/Zend/zend_variables.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_variables.h,v 1.34.2.1.2.3 2008/12/31 11:17:34 sebastian Exp $ */
+/* $Id: zend_variables.h,v 1.34.2.1.2.4 2009/05/01 21:47:05 jani Exp $ */
 
 #ifndef ZEND_VARIABLES_H
 #define ZEND_VARIABLES_H
@@ -29,20 +29,20 @@ ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC);
 
 static inline void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
 {
-        if (zvalue->type <= IS_BOOL) {
-                return;
-        }
-	_zval_dtor_func(zvalue ZEND_FILE_LINE_CC);
+	if (zvalue->type <= IS_BOOL) {
+		return;
+	}
+	_zval_dtor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
 }
 
 ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC);
 
 static inline void _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
 {
-        if (zvalue->type <= IS_BOOL) {
-                return;
-        }
-	_zval_copy_ctor_func(zvalue ZEND_FILE_LINE_CC);
+	if (zvalue->type <= IS_BOOL) {
+		return;
+	}
+	_zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
 }
 
 
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 7eabc5c..889ed98 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h,v 1.59.2.29.2.65 2009/02/15 14:31:17 iliaa Exp $ */
+/* $Id: zend_vm_def.h,v 1.59.2.29.2.70 2009/06/05 11:21:47 lbarnaud Exp $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -294,6 +294,10 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMP|VAR
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (OP1_TYPE == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -545,6 +549,10 @@ ZEND_VM_HELPER_EX(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMP|VAR|
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (OP1_TYPE == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -637,6 +645,10 @@ ZEND_VM_HELPER_EX(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMP|VAR
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (OP1_TYPE == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -1783,7 +1795,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, ANY, CONST|TMP|VAR|UNUSED|CV)
 
 	ce = EX_T(opline->op1.u.var).class_entry;
 	if(OP2_TYPE != IS_UNUSED) {
-		char *function_name_strval;
+		char *function_name_strval = NULL;
 		int function_name_strlen;
 		zend_bool is_const = (OP2_TYPE == IS_CONST);
 		zend_free_op free_op2;
@@ -1796,15 +1808,17 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, ANY, CONST|TMP|VAR|UNUSED|CV)
 
 			if (Z_TYPE_P(function_name) != IS_STRING) {
 				zend_error_noreturn(E_ERROR, "Function name must be a string");
+			} else {
+				function_name_strval = Z_STRVAL_P(function_name);
+				function_name_strlen = Z_STRLEN_P(function_name);
 			}
-			function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
-			function_name_strlen = function_name->value.str.len;
 		}
 
-		EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		if (function_name_strval) {
+			EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		}
 
 		if (!is_const) {
-			efree(function_name_strval);
 			FREE_OP2();
 		}
 	} else {
@@ -2070,7 +2084,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
 		EG(This) = current_this;
 		EG(scope) = current_scope;
 	}
-	zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
+	zend_arg_types_stack_2_pop(&EG(arg_types_stack), &EX(object), &EX(fbc));
 
 	zend_ptr_stack_clear_multiple(TSRMLS_C);
 
@@ -3842,7 +3856,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
 			}
 			zval_ptr_dtor(&EX(object));
 		}
-		zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
+		zend_arg_types_stack_2_pop(&EG(arg_types_stack), &EX(object), &EX(fbc));
 	}
 
 	for (i=0; i<EX(op_array)->last_brk_cont; i++) {
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 50176ad..37b493b 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -302,7 +302,7 @@ static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
 		EG(This) = current_this;
 		EG(scope) = current_scope;
 	}
-	zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
+	zend_arg_types_stack_2_pop(&EG(arg_types_stack), &EX(object), &EX(fbc));
 
 	zend_ptr_stack_clear_multiple(TSRMLS_C);
 
@@ -562,7 +562,7 @@ static int ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 			}
 			zval_ptr_dtor(&EX(object));
 		}
-		zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
+		zend_arg_types_stack_2_pop(&EG(arg_types_stack), &EX(object), &EX(fbc));
 	}
 
 	for (i=0; i<EX(op_array)->last_brk_cont; i++) {
@@ -667,7 +667,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
 
 	ce = EX_T(opline->op1.u.var).class_entry;
 	if(IS_CONST != IS_UNUSED) {
-		char *function_name_strval;
+		char *function_name_strval = NULL;
 		int function_name_strlen;
 		zend_bool is_const = (IS_CONST == IS_CONST);
 
@@ -680,15 +680,17 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
 
 			if (Z_TYPE_P(function_name) != IS_STRING) {
 				zend_error_noreturn(E_ERROR, "Function name must be a string");
+			} else {
+				function_name_strval = Z_STRVAL_P(function_name);
+				function_name_strlen = Z_STRLEN_P(function_name);
 			}
-			function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
-			function_name_strlen = function_name->value.str.len;
 		}
 
-		EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		if (function_name_strval) {
+			EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		}
 
 		if (!is_const) {
-			efree(function_name_strval);
 
 		}
 	} else {
@@ -878,7 +880,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
 	ce = EX_T(opline->op1.u.var).class_entry;
 	if(IS_TMP_VAR != IS_UNUSED) {
-		char *function_name_strval;
+		char *function_name_strval = NULL;
 		int function_name_strlen;
 		zend_bool is_const = (IS_TMP_VAR == IS_CONST);
 		zend_free_op free_op2;
@@ -891,15 +893,17 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
 			if (Z_TYPE_P(function_name) != IS_STRING) {
 				zend_error_noreturn(E_ERROR, "Function name must be a string");
+			} else {
+				function_name_strval = Z_STRVAL_P(function_name);
+				function_name_strlen = Z_STRLEN_P(function_name);
 			}
-			function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
-			function_name_strlen = function_name->value.str.len;
 		}
 
-		EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		if (function_name_strval) {
+			EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		}
 
 		if (!is_const) {
-			efree(function_name_strval);
 			zval_dtor(free_op2.var);
 		}
 	} else {
@@ -1049,7 +1053,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
 	ce = EX_T(opline->op1.u.var).class_entry;
 	if(IS_VAR != IS_UNUSED) {
-		char *function_name_strval;
+		char *function_name_strval = NULL;
 		int function_name_strlen;
 		zend_bool is_const = (IS_VAR == IS_CONST);
 		zend_free_op free_op2;
@@ -1062,15 +1066,17 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
 			if (Z_TYPE_P(function_name) != IS_STRING) {
 				zend_error_noreturn(E_ERROR, "Function name must be a string");
+			} else {
+				function_name_strval = Z_STRVAL_P(function_name);
+				function_name_strlen = Z_STRLEN_P(function_name);
 			}
-			function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
-			function_name_strlen = function_name->value.str.len;
 		}
 
-		EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		if (function_name_strval) {
+			EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		}
 
 		if (!is_const) {
-			efree(function_name_strval);
 			if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
 		}
 	} else {
@@ -1219,7 +1225,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_
 
 	ce = EX_T(opline->op1.u.var).class_entry;
 	if(IS_UNUSED != IS_UNUSED) {
-		char *function_name_strval;
+		char *function_name_strval = NULL;
 		int function_name_strlen;
 		zend_bool is_const = (IS_UNUSED == IS_CONST);
 
@@ -1232,15 +1238,17 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_
 
 			if (Z_TYPE_P(function_name) != IS_STRING) {
 				zend_error_noreturn(E_ERROR, "Function name must be a string");
+			} else {
+				function_name_strval = Z_STRVAL_P(function_name);
+				function_name_strlen = Z_STRLEN_P(function_name);
 			}
-			function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
-			function_name_strlen = function_name->value.str.len;
 		}
 
-		EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		if (function_name_strval) {
+			EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		}
 
 		if (!is_const) {
-			efree(function_name_strval);
 
 		}
 	} else {
@@ -1322,7 +1330,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
 	ce = EX_T(opline->op1.u.var).class_entry;
 	if(IS_CV != IS_UNUSED) {
-		char *function_name_strval;
+		char *function_name_strval = NULL;
 		int function_name_strlen;
 		zend_bool is_const = (IS_CV == IS_CONST);
 
@@ -1335,15 +1343,17 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
 			if (Z_TYPE_P(function_name) != IS_STRING) {
 				zend_error_noreturn(E_ERROR, "Function name must be a string");
+			} else {
+				function_name_strval = Z_STRVAL_P(function_name);
+				function_name_strlen = Z_STRLEN_P(function_name);
 			}
-			function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
-			function_name_strlen = function_name->value.str.len;
 		}
 
-		EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		if (function_name_strval) {
+			EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
+		}
 
 		if (!is_const) {
-			efree(function_name_strval);
 
 		}
 	} else {
@@ -8553,6 +8563,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(int (*binary_op)(zval
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -8803,6 +8817,10 @@ static int zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZE
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -8895,6 +8913,10 @@ static int zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, Z
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -10070,6 +10092,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*binary_op)(zval *
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -10321,6 +10347,10 @@ static int zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -10413,6 +10443,10 @@ static int zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEN
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -11591,6 +11625,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*binary_op)(zval *
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -11842,6 +11880,10 @@ static int zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -11934,6 +11976,10 @@ static int zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEN
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -12926,6 +12972,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*binary_op)(zva
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -13607,6 +13657,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_VAR_CV(int (*binary_op)(zval *r
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -13857,6 +13911,10 @@ static int zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -13949,6 +14007,10 @@ static int zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_VAR == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -15017,6 +15079,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(int (*binary_op)(z
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -15266,6 +15332,10 @@ static int zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op,
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -15358,6 +15428,10 @@ static int zend_post_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -16041,6 +16115,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*binary_op)(zva
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -16291,6 +16369,10 @@ static int zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, Z
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -16383,6 +16465,10 @@ static int zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op,
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -17022,6 +17108,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*binary_op)(zva
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -17272,6 +17362,10 @@ static int zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, Z
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -17364,6 +17458,10 @@ static int zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op,
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -18003,6 +18101,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -18269,6 +18371,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(int (*binary_op)(zval
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -18518,6 +18624,10 @@ static int zend_pre_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZE
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -18610,6 +18720,10 @@ static int zend_post_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, Z
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_UNUSED == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -20711,6 +20825,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_CV_CONST(int (*binary_op)(zval
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -20960,6 +21078,10 @@ static int zend_pre_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEN
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -21052,6 +21174,10 @@ static int zend_post_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZE
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -22220,6 +22346,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*binary_op)(zval *r
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -22470,6 +22600,10 @@ static int zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -22562,6 +22696,10 @@ static int zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -23733,6 +23871,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*binary_op)(zval *r
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -23983,6 +24125,10 @@ static int zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -24075,6 +24221,10 @@ static int zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -25059,6 +25209,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*binary_op)(zval
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -25739,6 +25893,10 @@ static int zend_binary_assign_op_obj_helper_SPEC_CV_CV(int (*binary_op)(zval *re
 	zval **retval = &EX_T(result->u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
+	}
+
 	EX_T(result->u.var).var.ptr_ptr = NULL;
 	make_real_object(object_ptr TSRMLS_CC);
 	object = *object_ptr;
@@ -25988,6 +26146,10 @@ static int zend_pre_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_O
 	zval **retval = &EX_T(opline->result.u.var).var.ptr;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
@@ -26080,6 +26242,10 @@ static int zend_post_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_
 	zval *retval = &EX_T(opline->result.u.var).tmp_var;
 	int have_get_ptr = 0;
 
+	if (IS_CV == IS_VAR && !object_ptr) {
+		zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
+	}
+
 	make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
 	object = *object_ptr;
 
diff --git a/acinclude.m4 b/acinclude.m4
index fa0b737..6436464 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: acinclude.m4,v 1.332.2.14.2.28 2008/09/08 10:24:38 tony2001 Exp $
+dnl $Id: acinclude.m4,v 1.332.2.14.2.29 2009/05/09 20:28:02 jani Exp $
 dnl
 dnl This file contains local autoconf functions.
 dnl
@@ -920,7 +920,7 @@ AC_DEFUN([PHP_GEN_BUILD_DIRS],[
 ])
 
 dnl
-dnl PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags[, cxx[, zend_ext]]]]])
+dnl PHP_NEW_EXTENSION(extname, sources [, shared [, sapi_class [, extra-cflags [, cxx [, zend_ext]]]]])
 dnl
 dnl Includes an extension in the build.
 dnl
@@ -968,12 +968,15 @@ dnl ---------------------------------------------- Shared module
   if test "$3" != "shared" && test "$3" != "yes" && test "$4" = "cli"; then
 dnl ---------------------------------------------- CLI static module
     [PHP_]translit($1,a-z_-,A-Z__)[_SHARED]=no
-    if test "$PHP_SAPI" = "cgi"; then
-      PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
-      EXT_STATIC="$EXT_STATIC $1"
-    else
-      PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,cli)
-    fi
+    case "$PHP_SAPI" in
+      cgi|embed[)]
+        PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
+        EXT_STATIC="$EXT_STATIC $1"
+        ;;
+      *[)]
+        PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,cli)
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC $1"
   fi
   PHP_ADD_BUILD_DIR($ext_builddir)
@@ -2766,6 +2769,23 @@ AC_DEFUN([PHP_DETECT_ICC],
   )
 ])
 
+dnl PHP_DETECT_SUNCC
+dnl Detect if the systems default compiler is suncc.
+dnl We also set some usefull CFLAGS if the user didn't set any
+AC_DEFUN([PHP_DETECT_SUNCC],[
+  SUNCC="no"
+  AC_MSG_CHECKING([for suncc])
+  AC_EGREP_CPP([^__SUNPRO_C], [__SUNPRO_C],
+    SUNCC="no"
+    AC_MSG_RESULT([no]),
+    SUNCC="yes"
+    GCC="no"
+    test -n "$auto_cflags" && CFLAGS="-fsimple=2 -xnorunpath -xO4 -xalias_level=basic -xipo=1 -xlibmopt -xprefetch_level=1 -xprefetch=auto -xstrconst -xtarget=native -zlazyload"
+    GCC=""
+    AC_MSG_RESULT([yes])
+  )
+])
+
 dnl
 dnl PHP_CRYPT_R_STYLE
 dnl detect the style of crypt_r() is any is available
diff --git a/aclocal.m4 b/aclocal.m4
index c573e40..41e995d 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: acinclude.m4,v 1.332.2.14.2.28 2008/09/08 10:24:38 tony2001 Exp $
+dnl $Id: acinclude.m4,v 1.332.2.14.2.29 2009/05/09 20:28:02 jani Exp $
 dnl
 dnl This file contains local autoconf functions.
 dnl
@@ -920,7 +920,7 @@ AC_DEFUN([PHP_GEN_BUILD_DIRS],[
 ])
 
 dnl
-dnl PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags[, cxx[, zend_ext]]]]])
+dnl PHP_NEW_EXTENSION(extname, sources [, shared [, sapi_class [, extra-cflags [, cxx [, zend_ext]]]]])
 dnl
 dnl Includes an extension in the build.
 dnl
@@ -968,12 +968,15 @@ dnl ---------------------------------------------- Shared module
   if test "$3" != "shared" && test "$3" != "yes" && test "$4" = "cli"; then
 dnl ---------------------------------------------- CLI static module
     [PHP_]translit($1,a-z_-,A-Z__)[_SHARED]=no
-    if test "$PHP_SAPI" = "cgi"; then
-      PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
-      EXT_STATIC="$EXT_STATIC $1"
-    else
-      PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,cli)
-    fi
+    case "$PHP_SAPI" in
+      cgi|embed[)]
+        PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
+        EXT_STATIC="$EXT_STATIC $1"
+        ;;
+      *[)]
+        PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,cli)
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC $1"
   fi
   PHP_ADD_BUILD_DIR($ext_builddir)
@@ -2766,6 +2769,23 @@ AC_DEFUN([PHP_DETECT_ICC],
   )
 ])
 
+dnl PHP_DETECT_SUNCC
+dnl Detect if the systems default compiler is suncc.
+dnl We also set some usefull CFLAGS if the user didn't set any
+AC_DEFUN([PHP_DETECT_SUNCC],[
+  SUNCC="no"
+  AC_MSG_CHECKING([for suncc])
+  AC_EGREP_CPP([^__SUNPRO_C], [__SUNPRO_C],
+    SUNCC="no"
+    AC_MSG_RESULT([no]),
+    SUNCC="yes"
+    GCC="no"
+    test -n "$auto_cflags" && CFLAGS="-fsimple=2 -xnorunpath -xO4 -xalias_level=basic -xipo=1 -xlibmopt -xprefetch_level=1 -xprefetch=auto -xstrconst -xtarget=native -zlazyload"
+    GCC=""
+    AC_MSG_RESULT([yes])
+  )
+])
+
 dnl
 dnl PHP_CRYPT_R_STYLE
 dnl detect the style of crypt_r() is any is available
diff --git a/build/order_by_dep.awk b/build/order_by_dep.awk
index 38128b2..0fdd960 100644
--- a/build/order_by_dep.awk
+++ b/build/order_by_dep.awk
@@ -51,8 +51,6 @@ function do_deps(mod_idx,        module_name, mod_name_len, dep, ext, val, depid
 			do_deps(depidx);
 		}
 	}
-
-	#printf("	phpext_%s_ptr,\n", module_name);
 	printf("	phpext_%s_ptr, at NEWLINE@", module_name);
 	delete mods[mod_idx];
 }
@@ -79,8 +77,7 @@ END {
 	out_count = 0;
 	
 	while (count(mods)) {
-		# count down, since we need to assemble it in reverse order
-		for (i = mod_count-1; i >= 0; --i) {
+		for (i = 0; i <= mod_count - 1; i++) {
 			if (i in mods) {
 				do_deps(i);
 			}
diff --git a/configure b/configure
index e05f1e3..6321ab7 100755
--- a/configure
+++ b/configure
@@ -250,6 +250,8 @@
 
 
 
+
+
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 ## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
 ## Free Software Foundation, Inc.
@@ -2149,12 +2151,12 @@ fi
 
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:2153: checking for Cygwin environment" >&5
+echo "configure:2155: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2158 "configure"
+#line 2160 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2165,7 +2167,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:2169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2171: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -2182,19 +2184,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:2186: checking for mingw32 environment" >&5
+echo "configure:2188: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2191 "configure"
+#line 2193 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:2198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -2213,7 +2215,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
 
 
 echo $ac_n "checking for egrep""... $ac_c" 1>&6
-echo "configure:2217: checking for egrep" >&5
+echo "configure:2219: checking for egrep" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_egrep'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2228,7 +2230,7 @@ echo "$ac_t""$ac_cv_prog_egrep" 1>&6
  
 
 echo $ac_n "checking for a sed that does not truncate output""... $ac_c" 1>&6
-echo "configure:2232: checking for a sed that does not truncate output" >&5
+echo "configure:2234: checking for a sed that does not truncate output" >&5
 if eval "test \"`echo '$''{'lt_cv_path_SED'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2378,7 +2380,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:2382: checking host system type" >&5
+echo "configure:2384: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -2399,7 +2401,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:2403: checking target system type" >&5
+echo "configure:2405: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -2429,7 +2431,7 @@ echo "$ac_t""$target" 1>&6
 
 PHP_MAJOR_VERSION=5
 PHP_MINOR_VERSION=2
-PHP_RELEASE_VERSION=9
+PHP_RELEASE_VERSION=10
 PHP_EXTRA_VERSION=""
 PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
 PHP_VERSION_ID=`expr $PHP_MAJOR_VERSION \* 10000 + $PHP_MINOR_VERSION \* 100 + $PHP_RELEASE_VERSION`
@@ -2522,7 +2524,7 @@ esac
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2526: checking for $ac_word" >&5
+echo "configure:2528: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2552,7 +2554,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2556: checking for $ac_word" >&5
+echo "configure:2558: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2603,7 +2605,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2607: checking for $ac_word" >&5
+echo "configure:2609: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2635,7 +2637,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2639: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2641: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2646,12 +2648,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 2650 "configure"
+#line 2652 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -2677,12 +2679,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2681: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2683: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2686: checking whether we are using GNU C" >&5
+echo "configure:2688: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2691,7 +2693,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2695: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -2710,7 +2712,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2714: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2716: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2742,7 +2744,7 @@ else
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2746: checking how to run the C preprocessor" >&5
+echo "configure:2748: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2757,13 +2759,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2761 "configure"
+#line 2763 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2767: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2774,13 +2776,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2778 "configure"
+#line 2780 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2791,13 +2793,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2795 "configure"
+#line 2797 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2803: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2824,9 +2826,9 @@ echo "$ac_t""$CPP" 1>&6
 
   ICC="no"
   echo $ac_n "checking for icc""... $ac_c" 1>&6
-echo "configure:2828: checking for icc" >&5
+echo "configure:2830: checking for icc" >&5
   cat > conftest.$ac_ext <<EOF
-#line 2830 "configure"
+#line 2832 "configure"
 #include "confdefs.h"
 __INTEL_COMPILER
 EOF
@@ -2845,12 +2847,38 @@ fi
 rm -f conftest*
 
 
+
+  SUNCC="no"
+  echo $ac_n "checking for suncc""... $ac_c" 1>&6
+echo "configure:2854: checking for suncc" >&5
+  cat > conftest.$ac_ext <<EOF
+#line 2856 "configure"
+#include "confdefs.h"
+__SUNPRO_C
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "^__SUNPRO_C" >/dev/null 2>&1; then
+  rm -rf conftest*
+  SUNCC="no"
+    echo "$ac_t""no" 1>&6
+else
+  rm -rf conftest*
+  SUNCC="yes"
+    GCC="no"
+    test -n "$auto_cflags" && CFLAGS="-fsimple=2 -xnorunpath -xO4 -xalias_level=basic -xipo=1 -xlibmopt -xprefetch_level=1 -xprefetch=auto -xstrconst -xtarget=native -zlazyload"
+    GCC=""
+    echo "$ac_t""yes" 1>&6
+  
+fi
+rm -f conftest*
+
+
 if test "x$CC" != xcc; then
   echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
-echo "configure:2851: checking whether $CC and cc understand -c and -o together" >&5
+echo "configure:2879: checking whether $CC and cc understand -c and -o together" >&5
 else
   echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
-echo "configure:2854: checking whether cc understands -c and -o together" >&5
+echo "configure:2882: checking whether cc understands -c and -o together" >&5
 fi
 set dummy $CC; ac_cc="`echo $2 |
 		       sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
@@ -2862,16 +2890,16 @@ else
 # We do the test twice because some compilers refuse to overwrite an
 # existing .o file with -o, though they will create one.
 ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
-if { (eval echo configure:2866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
-   test -f conftest.o && { (eval echo configure:2867: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+if { (eval echo configure:2894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+   test -f conftest.o && { (eval echo configure:2895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
 then
   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
   if test "x$CC" != xcc; then
     # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:2872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:2900: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
       ac_try='cc -c conftest.c -o conftest.o 1>&5'
-      if { (eval echo configure:2874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
-	 test -f conftest.o && { (eval echo configure:2875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+      if { (eval echo configure:2902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+	 test -f conftest.o && { (eval echo configure:2903: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
       then
         # cc works too.
         :
@@ -2898,7 +2926,7 @@ EOF
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2902: checking how to run the C preprocessor" >&5
+echo "configure:2930: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2913,13 +2941,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2917 "configure"
+#line 2945 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2951: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2930,13 +2958,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2934 "configure"
+#line 2962 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2940: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2947,13 +2975,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2951 "configure"
+#line 2979 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2985: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2978,9 +3006,9 @@ fi
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2982: checking for AIX" >&5
+echo "configure:3010: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2984 "configure"
+#line 3012 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -3002,7 +3030,7 @@ rm -f conftest*
 
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:3006: checking whether ln -s works" >&5
+echo "configure:3034: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3027,7 +3055,7 @@ fi
 php_with_libdir=lib
 
 echo $ac_n "checking for system library directory""... $ac_c" 1>&6
-echo "configure:3031: checking for system library directory" >&5
+echo "configure:3059: checking for system library directory" >&5
 # Check whether --with-libdir or --without-libdir was given.
 if test "${with_libdir+set}" = set; then
   withval="$with_libdir"
@@ -3053,7 +3081,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_rpath=yes
 
 echo $ac_n "checking whether to enable runpaths""... $ac_c" 1>&6
-echo "configure:3057: checking whether to enable runpaths" >&5
+echo "configure:3085: checking whether to enable runpaths" >&5
 # Check whether --enable-rpath or --disable-rpath was given.
 if test "${enable_rpath+set}" = set; then
   enableval="$enable_rpath"
@@ -3077,7 +3105,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 
 echo $ac_n "checking if compiler supports -R""... $ac_c" 1>&6
-echo "configure:3081: checking if compiler supports -R" >&5
+echo "configure:3109: checking if compiler supports -R" >&5
 if eval "test \"`echo '$''{'php_cv_cc_dashr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3085,14 +3113,14 @@ else
   SAVE_LIBS=$LIBS
   LIBS="-R /usr/$PHP_LIBDIR $LIBS"
   cat > conftest.$ac_ext <<EOF
-#line 3089 "configure"
+#line 3117 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   php_cv_cc_dashr=yes
 else
@@ -3110,7 +3138,7 @@ if test $php_cv_cc_dashr = "yes"; then
   ld_runpath_switch=-R
 else
   echo $ac_n "checking if compiler supports -Wl,-rpath,""... $ac_c" 1>&6
-echo "configure:3114: checking if compiler supports -Wl,-rpath," >&5
+echo "configure:3142: checking if compiler supports -Wl,-rpath," >&5
   if eval "test \"`echo '$''{'php_cv_cc_rpath'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3118,14 +3146,14 @@ else
     SAVE_LIBS=$LIBS
     LIBS="-Wl,-rpath,/usr/$PHP_LIBDIR $LIBS"
     cat > conftest.$ac_ext <<EOF
-#line 3122 "configure"
+#line 3150 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   php_cv_cc_rpath=yes
 else
@@ -3156,7 +3184,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3160: checking for $ac_word" >&5
+echo "configure:3188: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3197,7 +3225,7 @@ test -n "$AWK" || AWK="bork"
       ;;
     *)
       echo $ac_n "checking if $AWK is broken""... $ac_c" 1>&6
-echo "configure:3201: checking if $AWK is broken" >&5
+echo "configure:3229: checking if $AWK is broken" >&5
       if ! $AWK 'function foo() {}' >/dev/null 2>&1 ; then
         echo "$ac_t""yes" 1>&6
         { echo "configure: error: You should install GNU awk" 1>&2; exit 1; }
@@ -3216,7 +3244,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3220: checking for $ac_word" >&5
+echo "configure:3248: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3256,7 +3284,7 @@ test -n "$YACC" || YACC="yacc"
   bison_version=none
   if test "$YACC"; then
     echo $ac_n "checking for bison version""... $ac_c" 1>&6
-echo "configure:3260: checking for bison version" >&5
+echo "configure:3288: checking for bison version" >&5
 if eval "test \"`echo '$''{'php_cv_bison_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3296,7 +3324,7 @@ echo "$ac_t""$php_cv_bison_version" 1>&6
   # Extract the first word of "flex", so it can be a program name with args.
 set dummy flex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3300: checking for $ac_word" >&5
+echo "configure:3328: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3330,7 +3358,7 @@ then
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:3334: checking for yywrap in -l$ac_lib" >&5
+echo "configure:3362: checking for yywrap in -l$ac_lib" >&5
 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3338,7 +3366,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3342 "configure"
+#line 3370 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3349,7 +3377,7 @@ int main() {
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:3353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3373,7 +3401,7 @@ fi
 
   if test "$LEX" = "flex"; then
     echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:3377: checking lex output file root" >&5
+echo "configure:3405: checking lex output file root" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3394,7 +3422,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:3398: checking whether yytext is a pointer" >&5
+echo "configure:3426: checking whether yytext is a pointer" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3406,14 +3434,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 3410 "configure"
+#line 3438 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_prog_lex_yytext_pointer=yes
 else
@@ -3437,12 +3465,12 @@ fi
     :
   fi
         echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3441: checking for working const" >&5
+echo "configure:3469: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3446 "configure"
+#line 3474 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3491,7 +3519,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3523: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -3517,7 +3545,7 @@ fi
 
   if test "$LEX" = "flex"; then
     echo $ac_n "checking for flex version""... $ac_c" 1>&6
-echo "configure:3521: checking for flex version" >&5
+echo "configure:3549: checking for flex version" >&5
 if eval "test \"`echo '$''{'php_cv_flex_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3561,7 +3589,7 @@ echo "$ac_t""$php_cv_flex_version" 1>&6
   # Extract the first word of "re2c", so it can be a program name with args.
 set dummy re2c; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3565: checking for $ac_word" >&5
+echo "configure:3593: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RE2C'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3589,7 +3617,7 @@ fi
 
   if test -n "$RE2C"; then
     echo $ac_n "checking for re2c version""... $ac_c" 1>&6
-echo "configure:3593: checking for re2c version" >&5
+echo "configure:3621: checking for re2c version" >&5
 if eval "test \"`echo '$''{'php_cv_re2c_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3633,6 +3661,10 @@ case $host_cpu in
       CFLAGS="$CFLAGS -ieee"
     fi
     ;;
+  sparc*)
+    if test "$SUNCC" = "yes"; then
+      CFLAGS="$CFLAGS -xmemalign=8s"
+    fi
 esac
 
 case $host_alias in
@@ -3650,7 +3682,7 @@ case $host_alias in
       
   gcc_arg_name=ac_cv_gcc_arg_no_cpp_precomp
   echo $ac_n "checking whether $CC supports -no-cpp-precomp""... $ac_c" 1>&6
-echo "configure:3654: checking whether $CC supports -no-cpp-precomp" >&5
+echo "configure:3686: checking whether $CC supports -no-cpp-precomp" >&5
 if eval "test \"`echo '$''{'ac_cv_gcc_arg_no_cpp_precomp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3855,7 +3887,7 @@ esac
 # Disable PIC mode by default where it is known to be safe to do so,
 # to avoid the performance hit from the lost register
 echo $ac_n "checking whether to force non-PIC code in shared modules""... $ac_c" 1>&6
-echo "configure:3859: checking whether to force non-PIC code in shared modules" >&5
+echo "configure:3891: checking whether to force non-PIC code in shared modules" >&5
 case $host_alias in
   i?86-*-linux*|i?86-*-freebsd*)
     if test "${with_pic+set}" != "set" || test "$with_pic" = "no"; then
@@ -3885,7 +3917,7 @@ esac
 
 
 echo $ac_n "checking whether /dev/urandom exists""... $ac_c" 1>&6
-echo "configure:3889: checking whether /dev/urandom exists" >&5 
+echo "configure:3921: checking whether /dev/urandom exists" >&5 
 if test -r "/dev/urandom" && test -c "/dev/urandom"; then 
   cat >> confdefs.h <<\EOF
 #define HAVE_DEV_URANDOM 1
@@ -3946,7 +3978,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 3950 "configure"
+#line 3982 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -3964,7 +3996,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:3968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -3984,7 +4016,7 @@ fi
   CFLAGS=$save_CFLAGS
 
   echo $ac_n "checking for pthreads_cflags""... $ac_c" 1>&6
-echo "configure:3988: checking for pthreads_cflags" >&5
+echo "configure:4020: checking for pthreads_cflags" >&5
 if eval "test \"`echo '$''{'ac_cv_pthreads_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4006,7 +4038,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 4010 "configure"
+#line 4042 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -4024,7 +4056,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:4028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -4054,7 +4086,7 @@ fi
 echo "$ac_t""$ac_cv_pthreads_cflags" 1>&6
 
 echo $ac_n "checking for pthreads_lib""... $ac_c" 1>&6
-echo "configure:4058: checking for pthreads_lib" >&5
+echo "configure:4090: checking for pthreads_lib" >&5
 if eval "test \"`echo '$''{'ac_cv_pthreads_lib'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4076,7 +4108,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 4080 "configure"
+#line 4112 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -4094,7 +4126,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:4098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -4228,7 +4260,7 @@ ext_output=$PHP_AOLSERVER
 
 
 echo $ac_n "checking for AOLserver support""... $ac_c" 1>&6
-echo "configure:4232: checking for AOLserver support" >&5
+echo "configure:4264: checking for AOLserver support" >&5
 
 if test "$PHP_AOLSERVER" != "no"; then
   if test -d "$PHP_AOLSERVER/include"; then
@@ -4485,7 +4517,7 @@ ext_output=$PHP_APXS
 
 
 echo $ac_n "checking for Apache 1.x module support via DSO through APXS""... $ac_c" 1>&6
-echo "configure:4489: checking for Apache 1.x module support via DSO through APXS" >&5
+echo "configure:4521: checking for Apache 1.x module support via DSO through APXS" >&5
 
 if test "$PHP_APXS" != "no"; then
   if test "$PHP_APXS" = "yes"; then
@@ -4808,7 +4840,7 @@ ext_output=$PHP_APACHE
 
 
 echo $ac_n "checking for Apache 1.x module support""... $ac_c" 1>&6
-echo "configure:4812: checking for Apache 1.x module support" >&5
+echo "configure:4844: checking for Apache 1.x module support" >&5
 
 if test "$PHP_SAPI" != "apache" && test "$PHP_APACHE" != "no"; then
   
@@ -5641,7 +5673,7 @@ fi
 php_enable_mod_charset=no
 
 echo $ac_n "checking whether to enable Apache charset compatibility option""... $ac_c" 1>&6
-echo "configure:5645: checking whether to enable Apache charset compatibility option" >&5
+echo "configure:5677: checking whether to enable Apache charset compatibility option" >&5
 # Check whether --enable-mod-charset or --disable-mod-charset was given.
 if test "${enable_mod_charset+set}" = set; then
   enableval="$enable_mod_charset"
@@ -5676,7 +5708,7 @@ if test "$APACHE_MODULE" = "yes"; then
         
   gcc_arg_name=ac_cv_gcc_arg_rdynamic
   echo $ac_n "checking whether $CC supports -rdynamic""... $ac_c" 1>&6
-echo "configure:5680: checking whether $CC supports -rdynamic" >&5
+echo "configure:5712: checking whether $CC supports -rdynamic" >&5
 if eval "test \"`echo '$''{'ac_cv_gcc_arg_rdynamic'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5719,7 +5751,7 @@ if test -n "$APACHE_INSTALL"; then
 
   
 echo $ac_n "checking for member fd in BUFF *""... $ac_c" 1>&6
-echo "configure:5723: checking for member fd in BUFF *" >&5
+echo "configure:5755: checking for member fd in BUFF *" >&5
 if eval "test \"`echo '$''{'ac_cv_php_fd_in_buff'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5731,14 +5763,14 @@ else
     CPPFLAGS="$CPPFLAGS $APACHE_INCLUDE"
   fi
   cat > conftest.$ac_ext <<EOF
-#line 5735 "configure"
+#line 5767 "configure"
 #include "confdefs.h"
 #include <httpd.h>
 int main() {
 conn_rec *c; int fd = c->client->fd;
 ; return 0; }
 EOF
-if { (eval echo configure:5742: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     ac_cv_php_fd_in_buff=yes
@@ -5814,7 +5846,7 @@ ext_output=$PHP_APXS2FILTER
 
 
 echo $ac_n "checking for Apache 2.0 filter-module support via DSO through APXS""... $ac_c" 1>&6
-echo "configure:5818: checking for Apache 2.0 filter-module support via DSO through APXS" >&5
+echo "configure:5850: checking for Apache 2.0 filter-module support via DSO through APXS" >&5
 
 if test "$PHP_APXS2FILTER" != "no"; then
   if test "$PHP_APXS2FILTER" = "yes"; then
@@ -6662,7 +6694,7 @@ ext_output=$PHP_APXS2
 
 
 echo $ac_n "checking for Apache 2.0 handler-module support via DSO through APXS""... $ac_c" 1>&6
-echo "configure:6666: checking for Apache 2.0 handler-module support via DSO through APXS" >&5
+echo "configure:6698: checking for Apache 2.0 handler-module support via DSO through APXS" >&5
 
 if test "$PHP_APXS2" != "no"; then
   if test "$PHP_APXS2" = "yes"; then
@@ -7511,7 +7543,7 @@ ext_output=$PHP_APACHE_HOOKS
 
 
 echo $ac_n "checking for Apache 1.x (hooks) module support via DSO through APXS""... $ac_c" 1>&6
-echo "configure:7515: checking for Apache 1.x (hooks) module support via DSO through APXS" >&5
+echo "configure:7547: checking for Apache 1.x (hooks) module support via DSO through APXS" >&5
 
 if test "$PHP_APACHE_HOOKS" != "no"; then
   if test "$PHP_APACHE_HOOKS" = "yes"; then
@@ -7834,7 +7866,7 @@ ext_output=$PHP_APACHE_HOOKS_STATIC
 
 
 echo $ac_n "checking for Apache 1.x (hooks) module support""... $ac_c" 1>&6
-echo "configure:7838: checking for Apache 1.x (hooks) module support" >&5
+echo "configure:7870: checking for Apache 1.x (hooks) module support" >&5
 
 if test "$PHP_SAPI" != "apache" && test "$PHP_SAPI" != "apache_hooks" && test "$PHP_APACHE_HOOKS_STATIC" != "no"; then
 
@@ -8667,7 +8699,7 @@ fi
 php_enable_mod_charset=no
 
 echo $ac_n "checking whether to enable Apache charset compatibility option""... $ac_c" 1>&6
-echo "configure:8671: checking whether to enable Apache charset compatibility option" >&5
+echo "configure:8703: checking whether to enable Apache charset compatibility option" >&5
 # Check whether --enable-mod-charset or --disable-mod-charset was given.
 if test "${enable_mod_charset+set}" = set; then
   enableval="$enable_mod_charset"
@@ -8702,7 +8734,7 @@ if test "$APACHE_HOOKS_MODULE" = "yes"; then
         
   gcc_arg_name=ac_cv_gcc_arg_rdynamic
   echo $ac_n "checking whether $CC supports -rdynamic""... $ac_c" 1>&6
-echo "configure:8706: checking whether $CC supports -rdynamic" >&5
+echo "configure:8738: checking whether $CC supports -rdynamic" >&5
 if eval "test \"`echo '$''{'ac_cv_gcc_arg_rdynamic'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -8745,7 +8777,7 @@ if test -n "$APACHE_HOOKS_INSTALL"; then
 
   
 echo $ac_n "checking for member fd in BUFF *""... $ac_c" 1>&6
-echo "configure:8749: checking for member fd in BUFF *" >&5
+echo "configure:8781: checking for member fd in BUFF *" >&5
 if eval "test \"`echo '$''{'ac_cv_php_fd_in_buff'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -8757,14 +8789,14 @@ else
     CPPFLAGS="$CPPFLAGS $APACHE_INCLUDE"
   fi
   cat > conftest.$ac_ext <<EOF
-#line 8761 "configure"
+#line 8793 "configure"
 #include "confdefs.h"
 #include <httpd.h>
 int main() {
 conn_rec *c; int fd = c->client->fd;
 ; return 0; }
 EOF
-if { (eval echo configure:8768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     ac_cv_php_fd_in_buff=yes
@@ -8841,7 +8873,7 @@ ext_output=$PHP_CAUDIUM
 
 
 echo $ac_n "checking for Caudium support""... $ac_c" 1>&6
-echo "configure:8845: checking for Caudium support" >&5
+echo "configure:8877: checking for Caudium support" >&5
 
 if test "$PHP_CAUDIUM" != "no"; then
   if test "$prefix" = "NONE"; then CPREF=/usr/local/; fi
@@ -8911,7 +8943,7 @@ if test "$PHP_CAUDIUM" != "no"; then
       PIKE_C_INCLUDE=/usr/local/include/`basename $PIKE`
     fi
     echo $ac_n "checking for C includes in $PIKE_C_INCLUDE""... $ac_c" 1>&6
-echo "configure:8915: checking for C includes in $PIKE_C_INCLUDE" >&5
+echo "configure:8947: checking for C includes in $PIKE_C_INCLUDE" >&5
     if test -f $PIKE_C_INCLUDE/version.h; then
       PIKE_TEST_VER=`$PIKE -e 'string v; int rel;sscanf(version(), "Pike v%s release %d", v, rel); write(v+"."+rel);'`
       ###### VERSION MATCH CHECK #######
@@ -9192,7 +9224,7 @@ ext_output=$PHP_CLI
 
 
 echo $ac_n "checking for CLI build""... $ac_c" 1>&6
-echo "configure:9196: checking for CLI build" >&5
+echo "configure:9228: checking for CLI build" >&5
 if test "$PHP_CLI" != "no"; then
   
   src=$abs_srcdir/sapi/cli/Makefile.frag
@@ -9242,7 +9274,7 @@ echo "$ac_t""$PHP_CLI" 1>&6
 php_with_continuity=no
 
 echo $ac_n "checking for Continuity support""... $ac_c" 1>&6
-echo "configure:9246: checking for Continuity support" >&5
+echo "configure:9278: checking for Continuity support" >&5
 # Check whether --with-continuity or --without-continuity was given.
 if test "${with_continuity+set}" = set; then
   withval="$with_continuity"
@@ -9269,7 +9301,7 @@ if test "$PHP_CONTINUITY" != "no"; then
     { echo "configure: error: Please specify the path to the root of your Continuity server using --with-continuity=DIR" 1>&2; exit 1; }
   fi
   echo $ac_n "checking for Continuity include files""... $ac_c" 1>&6
-echo "configure:9273: checking for Continuity include files" >&5
+echo "configure:9305: checking for Continuity include files" >&5
   if test -d $PHP_CONTINUITY/include ; then
     CAPI_INCLUDE=$PHP_CONTINUITY/include
     echo "$ac_t""Continuity Binary Distribution" 1>&6
@@ -9519,7 +9551,7 @@ ext_output=$PHP_EMBED
 
 
 echo $ac_n "checking for embedded SAPI library support""... $ac_c" 1>&6
-echo "configure:9523: checking for embedded SAPI library support" >&5
+echo "configure:9555: checking for embedded SAPI library support" >&5
 
 if test "$PHP_EMBED" != "no"; then
   case "$PHP_EMBED" in
@@ -9736,7 +9768,7 @@ fi
 php_with_isapi=no
 
 echo $ac_n "checking for Zeus ISAPI support""... $ac_c" 1>&6
-echo "configure:9740: checking for Zeus ISAPI support" >&5
+echo "configure:9772: checking for Zeus ISAPI support" >&5
 # Check whether --with-isapi or --without-isapi was given.
 if test "${with_isapi+set}" = set; then
   withval="$with_isapi"
@@ -9985,7 +10017,7 @@ fi
 php_with_milter=no
 
 echo $ac_n "checking for Milter support""... $ac_c" 1>&6
-echo "configure:9989: checking for Milter support" >&5
+echo "configure:10021: checking for Milter support" >&5
 # Check whether --with-milter or --without-milter was given.
 if test "${with_milter+set}" = set; then
   withval="$with_milter"
@@ -10269,7 +10301,7 @@ fi
 php_with_nsapi=no
 
 echo $ac_n "checking for NSAPI support""... $ac_c" 1>&6
-echo "configure:10273: checking for NSAPI support" >&5
+echo "configure:10305: checking for NSAPI support" >&5
 # Check whether --with-nsapi or --without-nsapi was given.
 if test "${with_nsapi+set}" = set; then
   withval="$with_nsapi"
@@ -10296,7 +10328,7 @@ if test "$PHP_NSAPI" != "no"; then
     { echo "configure: error: Please specify the path to the root of your Netscape/iPlanet/Sun Webserver using --with-nsapi=DIR" 1>&2; exit 1; }
   fi
   echo $ac_n "checking for NSAPI include files""... $ac_c" 1>&6
-echo "configure:10300: checking for NSAPI include files" >&5
+echo "configure:10332: checking for NSAPI include files" >&5
   if test -d $PHP_NSAPI/include ; then
     NSAPI_INC_DIR="$PHP_NSAPI/include"
     echo "$ac_t""Netscape 3.x / Sun 7.x style" 1>&6
@@ -10304,17 +10336,17 @@ echo "configure:10300: checking for NSAPI include files" >&5
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10308: checking for $ac_hdr" >&5
+echo "configure:10340: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10313 "configure"
+#line 10345 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10350: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10349,17 +10381,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10353: checking for $ac_hdr" >&5
+echo "configure:10385: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10358 "configure"
+#line 10390 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10363: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10621,7 +10653,7 @@ fi
 php_with_phttpd=no
 
 echo $ac_n "checking for PHTTPD support""... $ac_c" 1>&6
-echo "configure:10625: checking for PHTTPD support" >&5
+echo "configure:10657: checking for PHTTPD support" >&5
 # Check whether --with-phttpd or --without-phttpd was given.
 if test "${with_phttpd+set}" = set; then
   withval="$with_phttpd"
@@ -10867,7 +10899,7 @@ fi
 php_with_pi3web=no
 
 echo $ac_n "checking for Pi3Web support""... $ac_c" 1>&6
-echo "configure:10871: checking for Pi3Web support" >&5
+echo "configure:10903: checking for Pi3Web support" >&5
 # Check whether --with-pi3web or --without-pi3web was given.
 if test "${with_pi3web+set}" = set; then
   withval="$with_pi3web"
@@ -11234,7 +11266,7 @@ ext_output=$PHP_ROXEN
 php_enable_roxen_zts=no
 
 echo $ac_n "checking whether Roxen module is build using ZTS""... $ac_c" 1>&6
-echo "configure:11238: checking whether Roxen module is build using ZTS" >&5
+echo "configure:11270: checking whether Roxen module is build using ZTS" >&5
 # Check whether --enable-roxen-zts or --disable-roxen-zts was given.
 if test "${enable_roxen_zts+set}" = set; then
   enableval="$enable_roxen_zts"
@@ -11258,7 +11290,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 RESULT=
 echo $ac_n "checking for Roxen/Pike support""... $ac_c" 1>&6
-echo "configure:11262: checking for Roxen/Pike support" >&5
+echo "configure:11294: checking for Roxen/Pike support" >&5
 if test "$PHP_ROXEN" != "no"; then
   if test ! -d $PHP_ROXEN ; then
     { echo "configure: error: You did not specify a directory" 1>&2; exit 1; }
@@ -11536,7 +11568,7 @@ ext_output=$PHP_THTTPD
 
 
 echo $ac_n "checking for thttpd""... $ac_c" 1>&6
-echo "configure:11540: checking for thttpd" >&5
+echo "configure:11572: checking for thttpd" >&5
 
 if test "$PHP_THTTPD" != "no"; then
   if test ! -d $PHP_THTTPD; then
@@ -11569,7 +11601,7 @@ if test "$PHP_THTTPD" != "no"; then
         
   gcc_arg_name=ac_cv_gcc_arg_rdynamic
   echo $ac_n "checking whether $CC supports -rdynamic""... $ac_c" 1>&6
-echo "configure:11573: checking whether $CC supports -rdynamic" >&5
+echo "configure:11605: checking whether $CC supports -rdynamic" >&5
 if eval "test \"`echo '$''{'ac_cv_gcc_arg_rdynamic'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11797,24 +11829,24 @@ ext_output=$PHP_TUX
 
 
 echo $ac_n "checking for TUX""... $ac_c" 1>&6
-echo "configure:11801: checking for TUX" >&5
+echo "configure:11833: checking for TUX" >&5
 if test "$PHP_TUX" != "no"; then
   INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PHP_TUX/php5.tux.so"
   for ac_hdr in tuxmodule.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11808: checking for $ac_hdr" >&5
+echo "configure:11840: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11813 "configure"
+#line 11845 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11850: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12043,7 +12075,7 @@ ext_output=$PHP_WEBJAMES
 
 
 echo $ac_n "checking for webjames""... $ac_c" 1>&6
-echo "configure:12047: checking for webjames" >&5
+echo "configure:12079: checking for webjames" >&5
 
 if test "$PHP_WEBJAMES" != "no"; then
   
@@ -12395,7 +12427,7 @@ ext_output=$PHP_PATH_INFO_CHECK
 
 if test "$PHP_SAPI" = "default"; then
   echo $ac_n "checking whether to build CGI binary""... $ac_c" 1>&6
-echo "configure:12399: checking whether to build CGI binary" >&5
+echo "configure:12431: checking whether to build CGI binary" >&5
   if test "$PHP_CGI" != "no"; then
     echo "$ac_t""yes" 1>&6
     
@@ -12418,7 +12450,7 @@ echo "configure:12399: checking whether to build CGI binary" >&5
 
 
         echo $ac_n "checking whether to enable fastcgi support""... $ac_c" 1>&6
-echo "configure:12422: checking whether to enable fastcgi support" >&5
+echo "configure:12454: checking whether to enable fastcgi support" >&5
     if test "$PHP_FASTCGI" = "yes"; then
       PHP_ENABLE_FASTCGI=1
       PHP_FCGI_FILES="fastcgi.c"
@@ -12433,7 +12465,7 @@ EOF
     echo "$ac_t""$PHP_FASTCGI" 1>&6
 
         echo $ac_n "checking whether to force Apache CGI redirect""... $ac_c" 1>&6
-echo "configure:12437: checking whether to force Apache CGI redirect" >&5
+echo "configure:12469: checking whether to force Apache CGI redirect" >&5
     if test "$PHP_FORCE_CGI_REDIRECT" = "yes"; then
       CGI_REDIRECT=1
     else
@@ -12446,7 +12478,7 @@ EOF
     echo "$ac_t""$PHP_FORCE_CGI_REDIRECT" 1>&6
 
         echo $ac_n "checking whether to discard path_info + path_translated""... $ac_c" 1>&6
-echo "configure:12450: checking whether to discard path_info + path_translated" >&5
+echo "configure:12482: checking whether to discard path_info + path_translated" >&5
     if test "$PHP_DISCARD_PATH" = "yes"; then
       DISCARD_PATH=1
     else
@@ -12459,7 +12491,7 @@ EOF
     echo "$ac_t""$PHP_DISCARD_PATH" 1>&6
 
         echo $ac_n "checking whether to enable path info checking""... $ac_c" 1>&6
-echo "configure:12463: checking whether to enable path info checking" >&5
+echo "configure:12495: checking whether to enable path info checking" >&5
     if test "$PHP_PATH_INFO_CHECK" = "yes"; then
       ENABLE_PATHINFO_CHECK=1
     else
@@ -12671,7 +12703,7 @@ fi
 
 
 echo $ac_n "checking for chosen SAPI module""... $ac_c" 1>&6
-echo "configure:12675: checking for chosen SAPI module" >&5
+echo "configure:12707: checking for chosen SAPI module" >&5
 echo "$ac_t""$PHP_SAPI" 1>&6
 
 if test "$enable_maintainer_zts" = "yes"; then
@@ -12728,7 +12760,7 @@ fi
   # Extract the first word of "sendmail", so it can be a program name with args.
 set dummy sendmail; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:12732: checking for $ac_word" >&5
+echo "configure:12764: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PROG_SENDMAIL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12767,7 +12799,7 @@ fi
 
 
   echo $ac_n "checking whether system uses EBCDIC""... $ac_c" 1>&6
-echo "configure:12771: checking whether system uses EBCDIC" >&5
+echo "configure:12803: checking whether system uses EBCDIC" >&5
 if eval "test \"`echo '$''{'ac_cv_ebcdic'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12778,7 +12810,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 12782 "configure"
+#line 12814 "configure"
 #include "confdefs.h"
 
 int main(void) { 
@@ -12786,7 +12818,7 @@ int main(void) {
 } 
 
 EOF
-if { (eval echo configure:12790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_ebcdic=yes
@@ -12814,7 +12846,7 @@ EOF
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:12818: checking whether byte ordering is bigendian" >&5
+echo "configure:12850: checking whether byte ordering is bigendian" >&5
 if eval "test \"`echo '$''{'ac_cv_c_bigendian_php'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12824,7 +12856,7 @@ else
   ac_cv_c_bigendian_php=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 12828 "configure"
+#line 12860 "configure"
 #include "confdefs.h"
 
 int main(void)
@@ -12840,7 +12872,7 @@ int main(void)
 }
   
 EOF
-if { (eval echo configure:12844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_bigendian_php=yes
 else
@@ -12866,7 +12898,7 @@ EOF
 
 
   echo $ac_n "checking whether writing to stdout works""... $ac_c" 1>&6
-echo "configure:12870: checking whether writing to stdout works" >&5
+echo "configure:12902: checking whether writing to stdout works" >&5
 if eval "test \"`echo '$''{'ac_cv_write_stdout'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12877,7 +12909,7 @@ else
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 12881 "configure"
+#line 12913 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_UNISTD_H
@@ -12895,7 +12927,7 @@ main()
 }
     
 EOF
-if { (eval echo configure:12899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
       ac_cv_write_stdout=yes
@@ -12970,12 +13002,12 @@ test -d /usr/ucblib &&
   unset found
   
   echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:12974: checking for socket" >&5
+echo "configure:13006: checking for socket" >&5
 if eval "test \"`echo '$''{'ac_cv_func_socket'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12979 "configure"
+#line 13011 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -12998,7 +13030,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_socket=yes"
 else
@@ -13016,12 +13048,12 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __socket""... $ac_c" 1>&6
-echo "configure:13020: checking for __socket" >&5
+echo "configure:13052: checking for __socket" >&5
 if eval "test \"`echo '$''{'ac_cv_func___socket'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13025 "configure"
+#line 13057 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __socket(); below.  */
@@ -13044,7 +13076,7 @@ __socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___socket=yes"
 else
@@ -13082,7 +13114,7 @@ EOF
   unset ac_cv_lib_socket___socket
   unset found
   echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:13086: checking for socket in -lsocket" >&5
+echo "configure:13118: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13090,7 +13122,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13094 "configure"
+#line 13126 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13101,7 +13133,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:13105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13121,7 +13153,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __socket in -lsocket""... $ac_c" 1>&6
-echo "configure:13125: checking for __socket in -lsocket" >&5
+echo "configure:13157: checking for __socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'__socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13129,7 +13161,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13133 "configure"
+#line 13165 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13140,7 +13172,7 @@ int main() {
 __socket()
 ; return 0; }
 EOF
-if { (eval echo configure:13144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13172,11 +13204,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 13176 "configure"
+#line 13208 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:13180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -13227,12 +13259,12 @@ EOF
   unset found
   
   echo $ac_n "checking for socketpair""... $ac_c" 1>&6
-echo "configure:13231: checking for socketpair" >&5
+echo "configure:13263: checking for socketpair" >&5
 if eval "test \"`echo '$''{'ac_cv_func_socketpair'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13236 "configure"
+#line 13268 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socketpair(); below.  */
@@ -13255,7 +13287,7 @@ socketpair();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_socketpair=yes"
 else
@@ -13273,12 +13305,12 @@ if eval "test \"`echo '$ac_cv_func_'socketpair`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __socketpair""... $ac_c" 1>&6
-echo "configure:13277: checking for __socketpair" >&5
+echo "configure:13309: checking for __socketpair" >&5
 if eval "test \"`echo '$''{'ac_cv_func___socketpair'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13282 "configure"
+#line 13314 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __socketpair(); below.  */
@@ -13301,7 +13333,7 @@ __socketpair();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___socketpair=yes"
 else
@@ -13339,7 +13371,7 @@ EOF
   unset ac_cv_lib_socket___socketpair
   unset found
   echo $ac_n "checking for socketpair in -lsocket""... $ac_c" 1>&6
-echo "configure:13343: checking for socketpair in -lsocket" >&5
+echo "configure:13375: checking for socketpair in -lsocket" >&5
 ac_lib_var=`echo socket'_'socketpair | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13347,7 +13379,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13351 "configure"
+#line 13383 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13358,7 +13390,7 @@ int main() {
 socketpair()
 ; return 0; }
 EOF
-if { (eval echo configure:13362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13378,7 +13410,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __socketpair in -lsocket""... $ac_c" 1>&6
-echo "configure:13382: checking for __socketpair in -lsocket" >&5
+echo "configure:13414: checking for __socketpair in -lsocket" >&5
 ac_lib_var=`echo socket'_'__socketpair | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13386,7 +13418,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13390 "configure"
+#line 13422 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13397,7 +13429,7 @@ int main() {
 __socketpair()
 ; return 0; }
 EOF
-if { (eval echo configure:13401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13429,11 +13461,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 13433 "configure"
+#line 13465 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:13437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -13484,12 +13516,12 @@ EOF
   unset found
   
   echo $ac_n "checking for htonl""... $ac_c" 1>&6
-echo "configure:13488: checking for htonl" >&5
+echo "configure:13520: checking for htonl" >&5
 if eval "test \"`echo '$''{'ac_cv_func_htonl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13493 "configure"
+#line 13525 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char htonl(); below.  */
@@ -13512,7 +13544,7 @@ htonl();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_htonl=yes"
 else
@@ -13530,12 +13562,12 @@ if eval "test \"`echo '$ac_cv_func_'htonl`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __htonl""... $ac_c" 1>&6
-echo "configure:13534: checking for __htonl" >&5
+echo "configure:13566: checking for __htonl" >&5
 if eval "test \"`echo '$''{'ac_cv_func___htonl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13539 "configure"
+#line 13571 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __htonl(); below.  */
@@ -13558,7 +13590,7 @@ __htonl();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___htonl=yes"
 else
@@ -13596,7 +13628,7 @@ EOF
   unset ac_cv_lib_socket___htonl
   unset found
   echo $ac_n "checking for htonl in -lsocket""... $ac_c" 1>&6
-echo "configure:13600: checking for htonl in -lsocket" >&5
+echo "configure:13632: checking for htonl in -lsocket" >&5
 ac_lib_var=`echo socket'_'htonl | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13604,7 +13636,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13608 "configure"
+#line 13640 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13615,7 +13647,7 @@ int main() {
 htonl()
 ; return 0; }
 EOF
-if { (eval echo configure:13619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13635,7 +13667,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __htonl in -lsocket""... $ac_c" 1>&6
-echo "configure:13639: checking for __htonl in -lsocket" >&5
+echo "configure:13671: checking for __htonl in -lsocket" >&5
 ac_lib_var=`echo socket'_'__htonl | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13643,7 +13675,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13647 "configure"
+#line 13679 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13654,7 +13686,7 @@ int main() {
 __htonl()
 ; return 0; }
 EOF
-if { (eval echo configure:13658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13686,11 +13718,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 13690 "configure"
+#line 13722 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:13694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -13741,12 +13773,12 @@ EOF
   unset found
   
   echo $ac_n "checking for gethostname""... $ac_c" 1>&6
-echo "configure:13745: checking for gethostname" >&5
+echo "configure:13777: checking for gethostname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13750 "configure"
+#line 13782 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostname(); below.  */
@@ -13769,7 +13801,7 @@ gethostname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostname=yes"
 else
@@ -13787,12 +13819,12 @@ if eval "test \"`echo '$ac_cv_func_'gethostname`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __gethostname""... $ac_c" 1>&6
-echo "configure:13791: checking for __gethostname" >&5
+echo "configure:13823: checking for __gethostname" >&5
 if eval "test \"`echo '$''{'ac_cv_func___gethostname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 13796 "configure"
+#line 13828 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __gethostname(); below.  */
@@ -13815,7 +13847,7 @@ __gethostname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___gethostname=yes"
 else
@@ -13853,7 +13885,7 @@ EOF
   unset ac_cv_lib_nsl___gethostname
   unset found
   echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
-echo "configure:13857: checking for gethostname in -lnsl" >&5
+echo "configure:13889: checking for gethostname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13861,7 +13893,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13865 "configure"
+#line 13897 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13872,7 +13904,7 @@ int main() {
 gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:13876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13892,7 +13924,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __gethostname in -lnsl""... $ac_c" 1>&6
-echo "configure:13896: checking for __gethostname in -lnsl" >&5
+echo "configure:13928: checking for __gethostname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'__gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13900,7 +13932,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13904 "configure"
+#line 13936 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13911,7 +13943,7 @@ int main() {
 __gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:13915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13943,11 +13975,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 13947 "configure"
+#line 13979 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:13951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -13998,12 +14030,12 @@ EOF
   unset found
   
   echo $ac_n "checking for gethostbyaddr""... $ac_c" 1>&6
-echo "configure:14002: checking for gethostbyaddr" >&5
+echo "configure:14034: checking for gethostbyaddr" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyaddr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14007 "configure"
+#line 14039 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyaddr(); below.  */
@@ -14026,7 +14058,7 @@ gethostbyaddr();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyaddr=yes"
 else
@@ -14044,12 +14076,12 @@ if eval "test \"`echo '$ac_cv_func_'gethostbyaddr`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __gethostbyaddr""... $ac_c" 1>&6
-echo "configure:14048: checking for __gethostbyaddr" >&5
+echo "configure:14080: checking for __gethostbyaddr" >&5
 if eval "test \"`echo '$''{'ac_cv_func___gethostbyaddr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14053 "configure"
+#line 14085 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __gethostbyaddr(); below.  */
@@ -14072,7 +14104,7 @@ __gethostbyaddr();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___gethostbyaddr=yes"
 else
@@ -14110,7 +14142,7 @@ EOF
   unset ac_cv_lib_nsl___gethostbyaddr
   unset found
   echo $ac_n "checking for gethostbyaddr in -lnsl""... $ac_c" 1>&6
-echo "configure:14114: checking for gethostbyaddr in -lnsl" >&5
+echo "configure:14146: checking for gethostbyaddr in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyaddr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14118,7 +14150,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14122 "configure"
+#line 14154 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14129,7 +14161,7 @@ int main() {
 gethostbyaddr()
 ; return 0; }
 EOF
-if { (eval echo configure:14133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14149,7 +14181,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __gethostbyaddr in -lnsl""... $ac_c" 1>&6
-echo "configure:14153: checking for __gethostbyaddr in -lnsl" >&5
+echo "configure:14185: checking for __gethostbyaddr in -lnsl" >&5
 ac_lib_var=`echo nsl'_'__gethostbyaddr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14157,7 +14189,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14161 "configure"
+#line 14193 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14168,7 +14200,7 @@ int main() {
 __gethostbyaddr()
 ; return 0; }
 EOF
-if { (eval echo configure:14172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14200,11 +14232,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 14204 "configure"
+#line 14236 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:14208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:14240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -14255,12 +14287,12 @@ EOF
   unset found
   
   echo $ac_n "checking for yp_get_default_domain""... $ac_c" 1>&6
-echo "configure:14259: checking for yp_get_default_domain" >&5
+echo "configure:14291: checking for yp_get_default_domain" >&5
 if eval "test \"`echo '$''{'ac_cv_func_yp_get_default_domain'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14264 "configure"
+#line 14296 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char yp_get_default_domain(); below.  */
@@ -14283,7 +14315,7 @@ yp_get_default_domain();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_yp_get_default_domain=yes"
 else
@@ -14301,12 +14333,12 @@ if eval "test \"`echo '$ac_cv_func_'yp_get_default_domain`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __yp_get_default_domain""... $ac_c" 1>&6
-echo "configure:14305: checking for __yp_get_default_domain" >&5
+echo "configure:14337: checking for __yp_get_default_domain" >&5
 if eval "test \"`echo '$''{'ac_cv_func___yp_get_default_domain'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14310 "configure"
+#line 14342 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __yp_get_default_domain(); below.  */
@@ -14329,7 +14361,7 @@ __yp_get_default_domain();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___yp_get_default_domain=yes"
 else
@@ -14367,7 +14399,7 @@ EOF
   unset ac_cv_lib_nsl___yp_get_default_domain
   unset found
   echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6
-echo "configure:14371: checking for yp_get_default_domain in -lnsl" >&5
+echo "configure:14403: checking for yp_get_default_domain in -lnsl" >&5
 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14375,7 +14407,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14379 "configure"
+#line 14411 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14386,7 +14418,7 @@ int main() {
 yp_get_default_domain()
 ; return 0; }
 EOF
-if { (eval echo configure:14390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14406,7 +14438,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __yp_get_default_domain in -lnsl""... $ac_c" 1>&6
-echo "configure:14410: checking for __yp_get_default_domain in -lnsl" >&5
+echo "configure:14442: checking for __yp_get_default_domain in -lnsl" >&5
 ac_lib_var=`echo nsl'_'__yp_get_default_domain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14414,7 +14446,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14418 "configure"
+#line 14450 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14425,7 +14457,7 @@ int main() {
 __yp_get_default_domain()
 ; return 0; }
 EOF
-if { (eval echo configure:14429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14457,11 +14489,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 14461 "configure"
+#line 14493 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:14465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:14497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -14513,12 +14545,12 @@ EOF
   unset found
   
   echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "configure:14517: checking for dlopen" >&5
+echo "configure:14549: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14522 "configure"
+#line 14554 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
@@ -14541,7 +14573,7 @@ dlopen();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -14559,12 +14591,12 @@ if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __dlopen""... $ac_c" 1>&6
-echo "configure:14563: checking for __dlopen" >&5
+echo "configure:14595: checking for __dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func___dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14568 "configure"
+#line 14600 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __dlopen(); below.  */
@@ -14587,7 +14619,7 @@ __dlopen();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___dlopen=yes"
 else
@@ -14625,7 +14657,7 @@ EOF
   unset ac_cv_lib_dl___dlopen
   unset found
   echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:14629: checking for dlopen in -ldl" >&5
+echo "configure:14661: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14633,7 +14665,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14637 "configure"
+#line 14669 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14644,7 +14676,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:14648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14664,7 +14696,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:14668: checking for __dlopen in -ldl" >&5
+echo "configure:14700: checking for __dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'__dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14672,7 +14704,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14676 "configure"
+#line 14708 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14683,7 +14715,7 @@ int main() {
 __dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:14687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14715,11 +14747,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 14719 "configure"
+#line 14751 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:14723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:14755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -14771,7 +14803,7 @@ EOF
 
 fi
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:14775: checking for sin in -lm" >&5
+echo "configure:14807: checking for sin in -lm" >&5
 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14779,7 +14811,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14783 "configure"
+#line 14815 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14790,7 +14822,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:14794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14824,12 +14856,12 @@ fi
   unset found
   
   echo $ac_n "checking for res_search""... $ac_c" 1>&6
-echo "configure:14828: checking for res_search" >&5
+echo "configure:14860: checking for res_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14833 "configure"
+#line 14865 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_search(); below.  */
@@ -14852,7 +14884,7 @@ res_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_search=yes"
 else
@@ -14870,12 +14902,12 @@ if eval "test \"`echo '$ac_cv_func_'res_search`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __res_search""... $ac_c" 1>&6
-echo "configure:14874: checking for __res_search" >&5
+echo "configure:14906: checking for __res_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func___res_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14879 "configure"
+#line 14911 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __res_search(); below.  */
@@ -14898,7 +14930,7 @@ __res_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___res_search=yes"
 else
@@ -14936,7 +14968,7 @@ EOF
   unset ac_cv_lib_resolv___res_search
   unset found
   echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6
-echo "configure:14940: checking for res_search in -lresolv" >&5
+echo "configure:14972: checking for res_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14944,7 +14976,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14948 "configure"
+#line 14980 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14955,7 +14987,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:14959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14975,7 +15007,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_search in -lresolv""... $ac_c" 1>&6
-echo "configure:14979: checking for __res_search in -lresolv" >&5
+echo "configure:15011: checking for __res_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14983,7 +15015,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14987 "configure"
+#line 15019 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14994,7 +15026,7 @@ int main() {
 __res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:14998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15026,11 +15058,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 15030 "configure"
+#line 15062 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:15034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -15072,7 +15104,7 @@ EOF
   unset ac_cv_lib_bind___res_search
   unset found
   echo $ac_n "checking for res_search in -lbind""... $ac_c" 1>&6
-echo "configure:15076: checking for res_search in -lbind" >&5
+echo "configure:15108: checking for res_search in -lbind" >&5
 ac_lib_var=`echo bind'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15080,7 +15112,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15084 "configure"
+#line 15116 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15091,7 +15123,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:15095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15111,7 +15143,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_search in -lbind""... $ac_c" 1>&6
-echo "configure:15115: checking for __res_search in -lbind" >&5
+echo "configure:15147: checking for __res_search in -lbind" >&5
 ac_lib_var=`echo bind'_'__res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15119,7 +15151,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15123 "configure"
+#line 15155 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15130,7 +15162,7 @@ int main() {
 __res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:15134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15162,11 +15194,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 15166 "configure"
+#line 15198 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:15170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -15208,7 +15240,7 @@ EOF
   unset ac_cv_lib_socket___res_search
   unset found
   echo $ac_n "checking for res_search in -lsocket""... $ac_c" 1>&6
-echo "configure:15212: checking for res_search in -lsocket" >&5
+echo "configure:15244: checking for res_search in -lsocket" >&5
 ac_lib_var=`echo socket'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15216,7 +15248,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15220 "configure"
+#line 15252 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15227,7 +15259,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:15231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15247,7 +15279,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_search in -lsocket""... $ac_c" 1>&6
-echo "configure:15251: checking for __res_search in -lsocket" >&5
+echo "configure:15283: checking for __res_search in -lsocket" >&5
 ac_lib_var=`echo socket'_'__res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15255,7 +15287,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15259 "configure"
+#line 15291 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15266,7 +15298,7 @@ int main() {
 __res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:15270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15298,11 +15330,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 15302 "configure"
+#line 15334 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:15306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -15360,12 +15392,12 @@ EOF
   unset found
   
   echo $ac_n "checking for inet_aton""... $ac_c" 1>&6
-echo "configure:15364: checking for inet_aton" >&5
+echo "configure:15396: checking for inet_aton" >&5
 if eval "test \"`echo '$''{'ac_cv_func_inet_aton'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15369 "configure"
+#line 15401 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char inet_aton(); below.  */
@@ -15388,7 +15420,7 @@ inet_aton();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_inet_aton=yes"
 else
@@ -15406,12 +15438,12 @@ if eval "test \"`echo '$ac_cv_func_'inet_aton`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __inet_aton""... $ac_c" 1>&6
-echo "configure:15410: checking for __inet_aton" >&5
+echo "configure:15442: checking for __inet_aton" >&5
 if eval "test \"`echo '$''{'ac_cv_func___inet_aton'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15415 "configure"
+#line 15447 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __inet_aton(); below.  */
@@ -15434,7 +15466,7 @@ __inet_aton();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___inet_aton=yes"
 else
@@ -15472,7 +15504,7 @@ EOF
   unset ac_cv_lib_resolv___inet_aton
   unset found
   echo $ac_n "checking for inet_aton in -lresolv""... $ac_c" 1>&6
-echo "configure:15476: checking for inet_aton in -lresolv" >&5
+echo "configure:15508: checking for inet_aton in -lresolv" >&5
 ac_lib_var=`echo resolv'_'inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15480,7 +15512,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15484 "configure"
+#line 15516 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15491,7 +15523,7 @@ int main() {
 inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:15495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15511,7 +15543,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __inet_aton in -lresolv""... $ac_c" 1>&6
-echo "configure:15515: checking for __inet_aton in -lresolv" >&5
+echo "configure:15547: checking for __inet_aton in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15519,7 +15551,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15523 "configure"
+#line 15555 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15530,7 +15562,7 @@ int main() {
 __inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:15534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15562,11 +15594,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 15566 "configure"
+#line 15598 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:15570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -15608,7 +15640,7 @@ EOF
   unset ac_cv_lib_bind___inet_aton
   unset found
   echo $ac_n "checking for inet_aton in -lbind""... $ac_c" 1>&6
-echo "configure:15612: checking for inet_aton in -lbind" >&5
+echo "configure:15644: checking for inet_aton in -lbind" >&5
 ac_lib_var=`echo bind'_'inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15616,7 +15648,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15620 "configure"
+#line 15652 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15627,7 +15659,7 @@ int main() {
 inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:15631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15647,7 +15679,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __inet_aton in -lbind""... $ac_c" 1>&6
-echo "configure:15651: checking for __inet_aton in -lbind" >&5
+echo "configure:15683: checking for __inet_aton in -lbind" >&5
 ac_lib_var=`echo bind'_'__inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15655,7 +15687,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15659 "configure"
+#line 15691 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15666,7 +15698,7 @@ int main() {
 __inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:15670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15698,11 +15730,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 15702 "configure"
+#line 15734 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:15706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -15756,12 +15788,12 @@ EOF
   unset found
   
   echo $ac_n "checking for dn_skipname""... $ac_c" 1>&6
-echo "configure:15760: checking for dn_skipname" >&5
+echo "configure:15792: checking for dn_skipname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dn_skipname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15765 "configure"
+#line 15797 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dn_skipname(); below.  */
@@ -15784,7 +15816,7 @@ dn_skipname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dn_skipname=yes"
 else
@@ -15802,12 +15834,12 @@ if eval "test \"`echo '$ac_cv_func_'dn_skipname`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __dn_skipname""... $ac_c" 1>&6
-echo "configure:15806: checking for __dn_skipname" >&5
+echo "configure:15838: checking for __dn_skipname" >&5
 if eval "test \"`echo '$''{'ac_cv_func___dn_skipname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15811 "configure"
+#line 15843 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __dn_skipname(); below.  */
@@ -15830,7 +15862,7 @@ __dn_skipname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___dn_skipname=yes"
 else
@@ -15868,7 +15900,7 @@ EOF
   unset ac_cv_lib_resolv___dn_skipname
   unset found
   echo $ac_n "checking for dn_skipname in -lresolv""... $ac_c" 1>&6
-echo "configure:15872: checking for dn_skipname in -lresolv" >&5
+echo "configure:15904: checking for dn_skipname in -lresolv" >&5
 ac_lib_var=`echo resolv'_'dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15876,7 +15908,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15880 "configure"
+#line 15912 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15887,7 +15919,7 @@ int main() {
 dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:15891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15907,7 +15939,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_skipname in -lresolv""... $ac_c" 1>&6
-echo "configure:15911: checking for __dn_skipname in -lresolv" >&5
+echo "configure:15943: checking for __dn_skipname in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15915,7 +15947,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15919 "configure"
+#line 15951 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15926,7 +15958,7 @@ int main() {
 __dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:15930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15958,11 +15990,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 15962 "configure"
+#line 15994 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:15966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -16004,7 +16036,7 @@ EOF
   unset ac_cv_lib_bind___dn_skipname
   unset found
   echo $ac_n "checking for dn_skipname in -lbind""... $ac_c" 1>&6
-echo "configure:16008: checking for dn_skipname in -lbind" >&5
+echo "configure:16040: checking for dn_skipname in -lbind" >&5
 ac_lib_var=`echo bind'_'dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -16012,7 +16044,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 16016 "configure"
+#line 16048 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -16023,7 +16055,7 @@ int main() {
 dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:16027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -16043,7 +16075,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_skipname in -lbind""... $ac_c" 1>&6
-echo "configure:16047: checking for __dn_skipname in -lbind" >&5
+echo "configure:16079: checking for __dn_skipname in -lbind" >&5
 ac_lib_var=`echo bind'_'__dn_skipname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -16051,7 +16083,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 16055 "configure"
+#line 16087 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -16062,7 +16094,7 @@ int main() {
 __dn_skipname()
 ; return 0; }
 EOF
-if { (eval echo configure:16066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -16094,11 +16126,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 16098 "configure"
+#line 16130 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:16102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -16150,12 +16182,12 @@ EOF
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:16154: checking for ANSI C header files" >&5
+echo "configure:16186: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16159 "configure"
+#line 16191 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -16163,7 +16195,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:16167: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:16199: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -16180,7 +16212,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 16184 "configure"
+#line 16216 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -16198,7 +16230,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 16202 "configure"
+#line 16234 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -16219,7 +16251,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 16223 "configure"
+#line 16255 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -16230,7 +16262,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:16234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -16258,12 +16290,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:16262: checking for $ac_hdr that defines DIR" >&5
+echo "configure:16294: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16267 "configure"
+#line 16299 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -16271,7 +16303,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:16275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -16296,7 +16328,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:16300: checking for opendir in -ldir" >&5
+echo "configure:16332: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -16304,7 +16336,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 16308 "configure"
+#line 16340 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -16315,7 +16347,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:16319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -16337,7 +16369,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:16341: checking for opendir in -lx" >&5
+echo "configure:16373: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -16345,7 +16377,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 16349 "configure"
+#line 16381 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -16356,7 +16388,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:16360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -16437,17 +16469,17 @@ assert.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:16441: checking for $ac_hdr" >&5
+echo "configure:16473: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16446 "configure"
+#line 16478 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:16451: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:16483: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -16482,17 +16514,17 @@ case $host_alias in
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:16486: checking for $ac_hdr" >&5
+echo "configure:16518: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16491 "configure"
+#line 16523 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:16496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:16528: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -16523,12 +16555,12 @@ esac
 
 
   echo $ac_n "checking for fopencookie""... $ac_c" 1>&6
-echo "configure:16527: checking for fopencookie" >&5
+echo "configure:16559: checking for fopencookie" >&5
 if eval "test \"`echo '$''{'ac_cv_func_fopencookie'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16532 "configure"
+#line 16564 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char fopencookie(); below.  */
@@ -16551,7 +16583,7 @@ fopencookie();
 
 ; return 0; }
 EOF
-if { (eval echo configure:16555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_fopencookie=yes"
 else
@@ -16573,7 +16605,7 @@ fi
 
   if test "$have_glibc_fopencookie" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 16577 "configure"
+#line 16609 "configure"
 #include "confdefs.h"
 
 #define _GNU_SOURCE
@@ -16583,7 +16615,7 @@ int main() {
 cookie_io_functions_t cookie;
 ; return 0; }
 EOF
-if { (eval echo configure:16587: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16619: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_cookie_io_functions_t=yes
 else
@@ -16602,7 +16634,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 16606 "configure"
+#line 16638 "configure"
 #include "confdefs.h"
 
 #define _GNU_SOURCE
@@ -16634,7 +16666,7 @@ main() {
 
 
 EOF
-if { (eval echo configure:16638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   cookie_io_functions_use_off64_t=yes
@@ -16654,7 +16686,7 @@ fi
     else
 
 cat > conftest.$ac_ext <<EOF
-#line 16658 "configure"
+#line 16690 "configure"
 #include "confdefs.h"
 
 #define _GNU_SOURCE
@@ -16664,7 +16696,7 @@ int main() {
  _IO_cookie_io_functions_t cookie; 
 ; return 0; }
 EOF
-if { (eval echo configure:16668: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16700: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_IO_cookie_io_functions_t=yes
 else
@@ -16698,7 +16730,7 @@ EOF
 
 
   echo $ac_n "checking for broken getcwd""... $ac_c" 1>&6
-echo "configure:16702: checking for broken getcwd" >&5
+echo "configure:16734: checking for broken getcwd" >&5
   os=`uname -sr 2>/dev/null`
   case $os in
     SunOS*)
@@ -16713,14 +16745,14 @@ EOF
 
 
   echo $ac_n "checking for broken libc stdio""... $ac_c" 1>&6
-echo "configure:16717: checking for broken libc stdio" >&5
+echo "configure:16749: checking for broken libc stdio" >&5
   if eval "test \"`echo '$''{'have_broken_glibc_fopen_append'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   if test "$cross_compiling" = yes; then
   cat > conftest.$ac_ext <<EOF
-#line 16724 "configure"
+#line 16756 "configure"
 #include "confdefs.h"
 
 #include <features.h>
@@ -16733,7 +16765,7 @@ choke me
 
 ; return 0; }
 EOF
-if { (eval echo configure:16737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_broken_glibc_fopen_append=yes
 else
@@ -16746,7 +16778,7 @@ rm -f conftest*
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 16750 "configure"
+#line 16782 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -16774,7 +16806,7 @@ int main(int argc, char *argv[])
 }
 
 EOF
-if { (eval echo configure:16778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   have_broken_glibc_fopen_append=no
 else
@@ -16802,12 +16834,12 @@ EOF
 
 
 echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:16806: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:16838: checking whether struct tm is in sys/time.h or time.h" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16811 "configure"
+#line 16843 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -16815,7 +16847,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:16819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -16836,12 +16868,12 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:16840: checking for tm_zone in struct tm" >&5
+echo "configure:16872: checking for tm_zone in struct tm" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16845 "configure"
+#line 16877 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -16849,7 +16881,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:16853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -16869,12 +16901,12 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:16873: checking for tzname" >&5
+echo "configure:16905: checking for tzname" >&5
 if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16878 "configure"
+#line 16910 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -16884,7 +16916,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:16888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -16908,16 +16940,16 @@ fi
 
 
   echo $ac_n "checking for missing declarations of reentrant functions""... $ac_c" 1>&6
-echo "configure:16912: checking for missing declarations of reentrant functions" >&5
+echo "configure:16944: checking for missing declarations of reentrant functions" >&5
   cat > conftest.$ac_ext <<EOF
-#line 16914 "configure"
+#line 16946 "configure"
 #include "confdefs.h"
 #include <time.h>
 int main() {
 struct tm *(*func)() = localtime_r
 ; return 0; }
 EOF
-if { (eval echo configure:16921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16953: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     :
@@ -16935,14 +16967,14 @@ EOF
 fi
 rm -f conftest*
   cat > conftest.$ac_ext <<EOF
-#line 16939 "configure"
+#line 16971 "configure"
 #include "confdefs.h"
 #include <time.h>
 int main() {
 struct tm *(*func)() = gmtime_r
 ; return 0; }
 EOF
-if { (eval echo configure:16946: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     :
@@ -16960,14 +16992,14 @@ EOF
 fi
 rm -f conftest*
   cat > conftest.$ac_ext <<EOF
-#line 16964 "configure"
+#line 16996 "configure"
 #include "confdefs.h"
 #include <time.h>
 int main() {
 char *(*func)() = asctime_r
 ; return 0; }
 EOF
-if { (eval echo configure:16971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     :
@@ -16985,14 +17017,14 @@ EOF
 fi
 rm -f conftest*
   cat > conftest.$ac_ext <<EOF
-#line 16989 "configure"
+#line 17021 "configure"
 #include "confdefs.h"
 #include <time.h>
 int main() {
 char *(*func)() = ctime_r
 ; return 0; }
 EOF
-if { (eval echo configure:16996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     :
@@ -17010,14 +17042,14 @@ EOF
 fi
 rm -f conftest*
   cat > conftest.$ac_ext <<EOF
-#line 17014 "configure"
+#line 17046 "configure"
 #include "confdefs.h"
 #include <string.h>
 int main() {
 char *(*func)() = strtok_r
 ; return 0; }
 EOF
-if { (eval echo configure:17021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     :
@@ -17038,16 +17070,16 @@ rm -f conftest*
 
 
   echo $ac_n "checking for fclose declaration""... $ac_c" 1>&6
-echo "configure:17042: checking for fclose declaration" >&5
+echo "configure:17074: checking for fclose declaration" >&5
   cat > conftest.$ac_ext <<EOF
-#line 17044 "configure"
+#line 17076 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 int (*func)() = fclose
 ; return 0; }
 EOF
-if { (eval echo configure:17051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     cat >> confdefs.h <<\EOF
@@ -17073,12 +17105,12 @@ rm -f conftest*
 
 
 echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6
-echo "configure:17077: checking for tm_gmtoff in struct tm" >&5
+echo "configure:17109: checking for tm_gmtoff in struct tm" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_tm_gmtoff'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17082 "configure"
+#line 17114 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -17086,7 +17118,7 @@ int main() {
 struct tm tm; tm.tm_gmtoff;
 ; return 0; }
 EOF
-if { (eval echo configure:17090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_gmtoff=yes
 else
@@ -17109,12 +17141,12 @@ fi
 
 
 echo $ac_n "checking for struct flock""... $ac_c" 1>&6
-echo "configure:17113: checking for struct flock" >&5
+echo "configure:17145: checking for struct flock" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_flock'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17118 "configure"
+#line 17150 "configure"
 #include "confdefs.h"
 
 #include <unistd.h>
@@ -17124,7 +17156,7 @@ int main() {
 struct flock x;
 ; return 0; }
 EOF
-if { (eval echo configure:17128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
           ac_cv_struct_flock=yes
@@ -17151,12 +17183,12 @@ fi
 
 
 echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
-echo "configure:17155: checking for socklen_t" >&5
+echo "configure:17187: checking for socklen_t" >&5
 if eval "test \"`echo '$''{'ac_cv_socklen_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17160 "configure"
+#line 17192 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -17168,7 +17200,7 @@ socklen_t x;
 
 ; return 0; }
 EOF
-if { (eval echo configure:17172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   ac_cv_socklen_t=yes
@@ -17194,7 +17226,7 @@ fi
 
 
 echo $ac_n "checking size of size_t""... $ac_c" 1>&6
-echo "configure:17198: checking size of size_t" >&5
+echo "configure:17230: checking size of size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17202,7 +17234,7 @@ else
   ac_cv_sizeof_size_t=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 17206 "configure"
+#line 17238 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -17213,7 +17245,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:17217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_size_t=`cat conftestval`
 else
@@ -17233,7 +17265,7 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:17237: checking size of long long" >&5
+echo "configure:17269: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17241,7 +17273,7 @@ else
   ac_cv_sizeof_long_long=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 17245 "configure"
+#line 17277 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -17252,7 +17284,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:17256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -17272,7 +17304,7 @@ EOF
 
 
 echo $ac_n "checking size of long long int""... $ac_c" 1>&6
-echo "configure:17276: checking size of long long int" >&5
+echo "configure:17308: checking size of long long int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17280,7 +17312,7 @@ else
   ac_cv_sizeof_long_long_int=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 17284 "configure"
+#line 17316 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -17291,7 +17323,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:17295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long_int=`cat conftestval`
 else
@@ -17311,7 +17343,7 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:17315: checking size of long" >&5
+echo "configure:17347: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17319,7 +17351,7 @@ else
   ac_cv_sizeof_long=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 17323 "configure"
+#line 17355 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -17330,7 +17362,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:17334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -17350,7 +17382,7 @@ EOF
 
 
 echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:17354: checking size of int" >&5
+echo "configure:17386: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17358,7 +17390,7 @@ else
   ac_cv_sizeof_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 17362 "configure"
+#line 17394 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -17369,7 +17401,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:17373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -17391,7 +17423,7 @@ EOF
 
 
   echo $ac_n "checking size of intmax_t""... $ac_c" 1>&6
-echo "configure:17395: checking size of intmax_t" >&5
+echo "configure:17427: checking size of intmax_t" >&5
   
   php_cache_value=php_cv_sizeof_intmax_t
   if eval "test \"`echo '$''{'php_cv_sizeof_intmax_t'+set}'`\" = set"; then
@@ -17408,7 +17440,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 17412 "configure"
+#line 17444 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #if STDC_HEADERS
@@ -17432,7 +17464,7 @@ int main()
 }
   
 EOF
-if { (eval echo configure:17436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     eval $php_cache_value=`cat conftestval`
@@ -17471,7 +17503,7 @@ EOF
 
 
   echo $ac_n "checking size of ssize_t""... $ac_c" 1>&6
-echo "configure:17475: checking size of ssize_t" >&5
+echo "configure:17507: checking size of ssize_t" >&5
   
   php_cache_value=php_cv_sizeof_ssize_t
   if eval "test \"`echo '$''{'php_cv_sizeof_ssize_t'+set}'`\" = set"; then
@@ -17488,7 +17520,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 17492 "configure"
+#line 17524 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #if STDC_HEADERS
@@ -17512,7 +17544,7 @@ int main()
 }
   
 EOF
-if { (eval echo configure:17516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     eval $php_cache_value=`cat conftestval`
@@ -17551,7 +17583,7 @@ EOF
 
 
   echo $ac_n "checking size of ptrdiff_t""... $ac_c" 1>&6
-echo "configure:17555: checking size of ptrdiff_t" >&5
+echo "configure:17587: checking size of ptrdiff_t" >&5
   
   php_cache_value=php_cv_sizeof_ptrdiff_t
   if eval "test \"`echo '$''{'php_cv_sizeof_ptrdiff_t'+set}'`\" = set"; then
@@ -17568,7 +17600,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 17572 "configure"
+#line 17604 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #if STDC_HEADERS
@@ -17592,7 +17624,7 @@ int main()
 }
   
 EOF
-if { (eval echo configure:17596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     eval $php_cache_value=`cat conftestval`
@@ -17631,12 +17663,12 @@ EOF
 
 
 echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
-echo "configure:17635: checking for st_blksize in struct stat" >&5
+echo "configure:17667: checking for st_blksize in struct stat" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17640 "configure"
+#line 17672 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -17644,7 +17676,7 @@ int main() {
 struct stat s; s.st_blksize;
 ; return 0; }
 EOF
-if { (eval echo configure:17648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_st_blksize=yes
 else
@@ -17666,12 +17698,12 @@ fi
 
 if test "`uname -s 2>/dev/null`" != "QNX"; then
   echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6
-echo "configure:17670: checking for st_blocks in struct stat" >&5
+echo "configure:17702: checking for st_blocks in struct stat" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17675 "configure"
+#line 17707 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -17679,7 +17711,7 @@ int main() {
 struct stat s; s.st_blocks;
 ; return 0; }
 EOF
-if { (eval echo configure:17683: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17715: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_st_blocks=yes
 else
@@ -17706,12 +17738,12 @@ else
   WARNING_LEVEL=0
 fi
 echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
-echo "configure:17710: checking for st_rdev in struct stat" >&5
+echo "configure:17742: checking for st_rdev in struct stat" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17715 "configure"
+#line 17747 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -17719,7 +17751,7 @@ int main() {
 struct stat s; s.st_rdev;
 ; return 0; }
 EOF
-if { (eval echo configure:17723: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_st_rdev=yes
 else
@@ -17741,12 +17773,12 @@ fi
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:17745: checking for size_t" >&5
+echo "configure:17777: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17750 "configure"
+#line 17782 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -17774,12 +17806,12 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:17778: checking for uid_t in sys/types.h" >&5
+echo "configure:17810: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17783 "configure"
+#line 17815 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -17810,12 +17842,12 @@ fi
 
 
     echo $ac_n "checking for struct sockaddr_storage""... $ac_c" 1>&6
-echo "configure:17814: checking for struct sockaddr_storage" >&5
+echo "configure:17846: checking for struct sockaddr_storage" >&5
 if eval "test \"`echo '$''{'ac_cv_sockaddr_storage'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17819 "configure"
+#line 17851 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -17823,7 +17855,7 @@ int main() {
 struct sockaddr_storage s; s
 ; return 0; }
 EOF
-if { (eval echo configure:17827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sockaddr_storage=yes
 else
@@ -17844,13 +17876,13 @@ EOF
 
   fi
     echo $ac_n "checking for field sa_len in struct sockaddr""... $ac_c" 1>&6
-echo "configure:17848: checking for field sa_len in struct sockaddr" >&5
+echo "configure:17880: checking for field sa_len in struct sockaddr" >&5
 if eval "test \"`echo '$''{'ac_cv_sockaddr_sa_len'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 17854 "configure"
+#line 17886 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -17858,7 +17890,7 @@ int main() {
 static struct sockaddr sa; int n = (int) sa.sa_len; return n;
 ; return 0; }
 EOF
-if { (eval echo configure:17862: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17894: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sockaddr_sa_len=yes
 else
@@ -17881,12 +17913,12 @@ EOF
 
 
 echo $ac_n "checking for IPv6 support""... $ac_c" 1>&6
-echo "configure:17885: checking for IPv6 support" >&5
+echo "configure:17917: checking for IPv6 support" >&5
 if eval "test \"`echo '$''{'ac_cv_ipv6_support'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17890 "configure"
+#line 17922 "configure"
 #include "confdefs.h"
  #include <sys/types.h>
 #include <sys/socket.h>
@@ -17895,7 +17927,7 @@ int main() {
 struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:17899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_ipv6_support=yes
 else
@@ -17911,12 +17943,12 @@ echo "$ac_t""$ac_cv_ipv6_support" 1>&6
 
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:17915: checking for vprintf" >&5
+echo "configure:17947: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17920 "configure"
+#line 17952 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -17939,7 +17971,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:17943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -17963,12 +17995,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:17967: checking for _doprnt" >&5
+echo "configure:17999: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17972 "configure"
+#line 18004 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -17991,7 +18023,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:17995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -18099,12 +18131,12 @@ vsnprintf \
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18103: checking for $ac_func" >&5
+echo "configure:18135: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18108 "configure"
+#line 18140 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -18127,7 +18159,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:18131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -18153,25 +18185,25 @@ done
 
 
 echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
-echo "configure:18157: checking for getaddrinfo" >&5
+echo "configure:18189: checking for getaddrinfo" >&5
 if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18162 "configure"
+#line 18194 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);
 ; return 0; }
 EOF
-if { (eval echo configure:18169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test "$cross_compiling" = yes; then
   ac_cv_func_getaddrinfo=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 18175 "configure"
+#line 18207 "configure"
 #include "confdefs.h"
 
 #include <netdb.h>
@@ -18211,7 +18243,7 @@ int main(void) {
 }
   
 EOF
-if { (eval echo configure:18215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_getaddrinfo=yes
 else
@@ -18243,12 +18275,12 @@ fi
 for ac_func in strlcat strlcpy getopt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18247: checking for $ac_func" >&5
+echo "configure:18279: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18252 "configure"
+#line 18284 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -18271,7 +18303,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:18275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -18298,7 +18330,7 @@ done
 
 
 echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6
-echo "configure:18302: checking whether utime accepts a null argument" >&5
+echo "configure:18334: checking whether utime accepts a null argument" >&5
 if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18308,7 +18340,7 @@ if test "$cross_compiling" = yes; then
   ac_cv_func_utime_null=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 18312 "configure"
+#line 18344 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -18319,7 +18351,7 @@ exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0
 && t.st_mtime - s.st_mtime < 120));
 }
 EOF
-if { (eval echo configure:18323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_utime_null=yes
 else
@@ -18345,19 +18377,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:18349: checking for working alloca.h" >&5
+echo "configure:18381: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18354 "configure"
+#line 18386 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:18361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -18378,12 +18410,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:18382: checking for alloca" >&5
+echo "configure:18414: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18387 "configure"
+#line 18419 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -18411,7 +18443,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:18415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -18443,12 +18475,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:18447: checking whether alloca needs Cray hooks" >&5
+echo "configure:18479: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18452 "configure"
+#line 18484 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -18473,12 +18505,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18477: checking for $ac_func" >&5
+echo "configure:18509: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18482 "configure"
+#line 18514 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -18501,7 +18533,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:18505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -18528,7 +18560,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:18532: checking stack direction for C alloca" >&5
+echo "configure:18564: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18536,7 +18568,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 18540 "configure"
+#line 18572 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -18555,7 +18587,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:18559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -18578,13 +18610,13 @@ fi
 
 
   echo $ac_n "checking for declared timezone""... $ac_c" 1>&6
-echo "configure:18582: checking for declared timezone" >&5
+echo "configure:18614: checking for declared timezone" >&5
 if eval "test \"`echo '$''{'ac_cv_declared_timezone'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 18588 "configure"
+#line 18620 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -18599,7 +18631,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:18603: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   ac_cv_declared_timezone=yes
@@ -18625,7 +18657,7 @@ EOF
 
 
 echo $ac_n "checking for type of reentrant time-related functions""... $ac_c" 1>&6
-echo "configure:18629: checking for type of reentrant time-related functions" >&5
+echo "configure:18661: checking for type of reentrant time-related functions" >&5
 if eval "test \"`echo '$''{'ac_cv_time_r_type'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18636,7 +18668,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 18640 "configure"
+#line 18672 "configure"
 #include "confdefs.h"
 
 #include <time.h>
@@ -18654,7 +18686,7 @@ return (1);
 }
 
 EOF
-if { (eval echo configure:18658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_time_r_type=hpux
@@ -18670,7 +18702,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 18674 "configure"
+#line 18706 "configure"
 #include "confdefs.h"
 
 #include <time.h>
@@ -18686,7 +18718,7 @@ main() {
 }
   
 EOF
-if { (eval echo configure:18690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_time_r_type=irix
@@ -18724,12 +18756,12 @@ EOF
 
 
     echo $ac_n "checking for readdir_r""... $ac_c" 1>&6
-echo "configure:18728: checking for readdir_r" >&5
+echo "configure:18760: checking for readdir_r" >&5
 if eval "test \"`echo '$''{'ac_cv_func_readdir_r'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18733 "configure"
+#line 18765 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char readdir_r(); below.  */
@@ -18752,7 +18784,7 @@ readdir_r();
 
 ; return 0; }
 EOF
-if { (eval echo configure:18756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_readdir_r=yes"
 else
@@ -18774,7 +18806,7 @@ fi
 
   if test "$ac_cv_func_readdir_r" = "yes"; then
   echo $ac_n "checking for type of readdir_r""... $ac_c" 1>&6
-echo "configure:18778: checking for type of readdir_r" >&5
+echo "configure:18810: checking for type of readdir_r" >&5
 if eval "test \"`echo '$''{'ac_cv_what_readdir_r'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18785,7 +18817,7 @@ else
    
 else
   cat > conftest.$ac_ext <<EOF
-#line 18789 "configure"
+#line 18821 "configure"
 #include "confdefs.h"
 
 #define _REENTRANT
@@ -18810,7 +18842,7 @@ main() {
 }
     
 EOF
-if { (eval echo configure:18814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
       ac_cv_what_readdir_r=POSIX
@@ -18821,7 +18853,7 @@ else
   rm -fr conftest*
   
       cat > conftest.$ac_ext <<EOF
-#line 18825 "configure"
+#line 18857 "configure"
 #include "confdefs.h"
 
 #define _REENTRANT
@@ -18831,7 +18863,7 @@ int readdir_r(DIR *, struct dirent *);
         
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:18835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:18867: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -18873,12 +18905,12 @@ EOF
 
 
 echo $ac_n "checking for in_addr_t""... $ac_c" 1>&6
-echo "configure:18877: checking for in_addr_t" >&5
+echo "configure:18909: checking for in_addr_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_in_addr_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18882 "configure"
+#line 18914 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -18912,12 +18944,12 @@ fi
 for ac_func in crypt_r
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18916: checking for $ac_func" >&5
+echo "configure:18948: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18921 "configure"
+#line 18953 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -18940,7 +18972,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:18944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -18968,14 +19000,14 @@ done
 if test "x$php_crypt_r" = "x1"; then
   
   echo $ac_n "checking which data struct is used by crypt_r""... $ac_c" 1>&6
-echo "configure:18972: checking which data struct is used by crypt_r" >&5
+echo "configure:19004: checking which data struct is used by crypt_r" >&5
 if eval "test \"`echo '$''{'php_cv_crypt_r_style'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     php_cv_crypt_r_style=none
     cat > conftest.$ac_ext <<EOF
-#line 18979 "configure"
+#line 19011 "configure"
 #include "confdefs.h"
 
 #define _REENTRANT 1
@@ -18988,7 +19020,7 @@ crypt_r("passwd", "hash", &buffer);
 
 ; return 0; }
 EOF
-if { (eval echo configure:18992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   php_cv_crypt_r_style=cryptd
 else
@@ -18999,7 +19031,7 @@ rm -f conftest*
 
     if test "$php_cv_crypt_r_style" = "none"; then
       cat > conftest.$ac_ext <<EOF
-#line 19003 "configure"
+#line 19035 "configure"
 #include "confdefs.h"
 
 #define _REENTRANT 1
@@ -19012,7 +19044,7 @@ crypt_r("passwd", "hash", &buffer);
 
 ; return 0; }
 EOF
-if { (eval echo configure:19016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   php_cv_crypt_r_style=struct_crypt_data
 else
@@ -19024,7 +19056,7 @@ rm -f conftest*
 
     if test "$php_cv_crypt_r_style" = "none"; then
       cat > conftest.$ac_ext <<EOF
-#line 19028 "configure"
+#line 19060 "configure"
 #include "confdefs.h"
 
 #define _REENTRANT 1
@@ -19038,7 +19070,7 @@ crypt_r("passwd", "hash", &buffer);
 
 ; return 0; }
 EOF
-if { (eval echo configure:19042: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   php_cv_crypt_r_style=struct_crypt_data_gnu_source
 else
@@ -19097,7 +19129,7 @@ fi
 php_enable_gcov=no
 
 echo $ac_n "checking whether to include gcov symbols""... $ac_c" 1>&6
-echo "configure:19101: checking whether to include gcov symbols" >&5
+echo "configure:19133: checking whether to include gcov symbols" >&5
 # Check whether --enable-gcov or --disable-gcov was given.
 if test "${enable_gcov+set}" = set; then
   enableval="$enable_gcov"
@@ -19134,12 +19166,12 @@ if test "$PHP_GCOV" = "yes"; then
     { echo "configure: error: ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1." 1>&2; exit 1; }
   fi
   
-  ltp_version_list="1.5 1.6"
+  ltp_version_list="1.5 1.6 1.7"
 
   # Extract the first word of "lcov", so it can be a program name with args.
 set dummy lcov; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:19143: checking for $ac_word" >&5
+echo "configure:19175: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LTP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -19168,7 +19200,7 @@ fi
   # Extract the first word of "genhtml", so it can be a program name with args.
 set dummy genhtml; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:19172: checking for $ac_word" >&5
+echo "configure:19204: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LTP_GENHTML'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -19203,7 +19235,7 @@ fi
 
   if test "$LTP"; then
     echo $ac_n "checking for ltp version""... $ac_c" 1>&6
-echo "configure:19207: checking for ltp version" >&5
+echo "configure:19239: checking for ltp version" >&5
 if eval "test \"`echo '$''{'php_cv_ltp_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -19254,13 +19286,22 @@ EOF
 
     CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
   CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage"
+  if test "$SUNCC" = "yes"; then
+    if test -n "$auto_cflags"; then
+      CFLAGS="-g"
+      CXXFLAGS="-g"
+    else
+      CFLAGS="$CFLAGS -g"
+      CXXFLAGS="$CFLAGS -g"
+    fi
+  fi
 fi
 
 
 php_enable_debug=no
 
 echo $ac_n "checking whether to include debugging symbols""... $ac_c" 1>&6
-echo "configure:19264: checking whether to include debugging symbols" >&5
+echo "configure:19305: checking whether to include debugging symbols" >&5
 # Check whether --enable-debug or --disable-debug was given.
 if test "${enable_debug+set}" = set; then
   enableval="$enable_debug"
@@ -19302,7 +19343,7 @@ fi
 php_with_layout=PHP
 
 echo $ac_n "checking layout of installed files""... $ac_c" 1>&6
-echo "configure:19306: checking layout of installed files" >&5
+echo "configure:19347: checking layout of installed files" >&5
 # Check whether --with-layout or --without-layout was given.
 if test "${with_layout+set}" = set; then
   withval="$with_layout"
@@ -19337,7 +19378,7 @@ esac
 php_with_config_file_path=DEFAULT
 
 echo $ac_n "checking path to configuration file""... $ac_c" 1>&6
-echo "configure:19341: checking path to configuration file" >&5
+echo "configure:19382: checking path to configuration file" >&5
 # Check whether --with-config-file-path or --without-config-file-path was given.
 if test "${with_config_file_path+set}" = set; then
   withval="$with_config_file_path"
@@ -19371,7 +19412,7 @@ if test "$PHP_CONFIG_FILE_PATH" = "DEFAULT"; then
 fi
 
 echo $ac_n "checking where to scan for configuration files""... $ac_c" 1>&6
-echo "configure:19375: checking where to scan for configuration files" >&5
+echo "configure:19416: checking where to scan for configuration files" >&5
 
 php_with_config_file_scan_dir=DEFAULT
 
@@ -19407,7 +19448,7 @@ test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
 php_enable_safe_mode=no
 
 echo $ac_n "checking whether to enable safe mode by default""... $ac_c" 1>&6
-echo "configure:19411: checking whether to enable safe mode by default" >&5
+echo "configure:19452: checking whether to enable safe mode by default" >&5
 # Check whether --enable-safe-mode or --disable-safe-mode was given.
 if test "${enable_safe_mode+set}" = set; then
   enableval="$enable_safe_mode"
@@ -19442,7 +19483,7 @@ EOF
 fi
 
 echo $ac_n "checking for safe mode exec dir""... $ac_c" 1>&6
-echo "configure:19446: checking for safe mode exec dir" >&5
+echo "configure:19487: checking for safe mode exec dir" >&5
 
 php_with_exec_dir=no
 
@@ -19486,7 +19527,7 @@ fi
 php_enable_sigchild=no
 
 echo $ac_n "checking whether to enable PHP's own SIGCHLD handler""... $ac_c" 1>&6
-echo "configure:19490: checking whether to enable PHP's own SIGCHLD handler" >&5
+echo "configure:19531: checking whether to enable PHP's own SIGCHLD handler" >&5
 # Check whether --enable-sigchild or --disable-sigchild was given.
 if test "${enable_sigchild+set}" = set; then
   enableval="$enable_sigchild"
@@ -19524,7 +19565,7 @@ fi
 php_enable_magic_quotes=no
 
 echo $ac_n "checking whether to enable magic quotes by default""... $ac_c" 1>&6
-echo "configure:19528: checking whether to enable magic quotes by default" >&5
+echo "configure:19569: checking whether to enable magic quotes by default" >&5
 # Check whether --enable-magic-quotes or --disable-magic-quotes was given.
 if test "${enable_magic_quotes+set}" = set; then
   enableval="$enable_magic_quotes"
@@ -19562,7 +19603,7 @@ fi
 php_enable_libgcc=no
 
 echo $ac_n "checking whether to explicitly link against libgcc""... $ac_c" 1>&6
-echo "configure:19566: checking whether to explicitly link against libgcc" >&5
+echo "configure:19607: checking whether to explicitly link against libgcc" >&5
 # Check whether --enable-libgcc or --disable-libgcc was given.
 if test "${enable_libgcc+set}" = set; then
   enableval="$enable_libgcc"
@@ -19642,7 +19683,7 @@ fi
 php_enable_short_tags=yes
 
 echo $ac_n "checking whether to enable short tags by default""... $ac_c" 1>&6
-echo "configure:19646: checking whether to enable short tags by default" >&5
+echo "configure:19687: checking whether to enable short tags by default" >&5
 # Check whether --enable-short-tags or --disable-short-tags was given.
 if test "${enable_short_tags+set}" = set; then
   enableval="$enable_short_tags"
@@ -19680,7 +19721,7 @@ fi
 php_enable_dmalloc=no
 
 echo $ac_n "checking whether to enable dmalloc""... $ac_c" 1>&6
-echo "configure:19684: checking whether to enable dmalloc" >&5
+echo "configure:19725: checking whether to enable dmalloc" >&5
 # Check whether --enable-dmalloc or --disable-dmalloc was given.
 if test "${enable_dmalloc+set}" = set; then
   enableval="$enable_dmalloc"
@@ -19704,7 +19745,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_DMALLOC" = "yes"; then
   echo $ac_n "checking for dmalloc_error in -ldmalloc""... $ac_c" 1>&6
-echo "configure:19708: checking for dmalloc_error in -ldmalloc" >&5
+echo "configure:19749: checking for dmalloc_error in -ldmalloc" >&5
 ac_lib_var=`echo dmalloc'_'dmalloc_error | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -19712,7 +19753,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldmalloc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 19716 "configure"
+#line 19757 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -19723,7 +19764,7 @@ int main() {
 dmalloc_error()
 ; return 0; }
 EOF
-if { (eval echo configure:19727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -19768,7 +19809,7 @@ fi
 php_enable_ipv6=yes
 
 echo $ac_n "checking whether to enable IPv6 support""... $ac_c" 1>&6
-echo "configure:19772: checking whether to enable IPv6 support" >&5
+echo "configure:19813: checking whether to enable IPv6 support" >&5
 # Check whether --enable-ipv6 or --disable-ipv6 was given.
 if test "${enable_ipv6+set}" = set; then
   enableval="$enable_ipv6"
@@ -19798,7 +19839,7 @@ EOF
 fi
 
 echo $ac_n "checking how big to make fd sets""... $ac_c" 1>&6
-echo "configure:19802: checking how big to make fd sets" >&5
+echo "configure:19843: checking how big to make fd sets" >&5
 
 php_enable_fd_setsize=no
 
@@ -19866,10 +19907,688 @@ fi
 # reading config stubs
 
 
+
+
+echo $ac_n "checking size of long""... $ac_c" 1>&6
+echo "configure:19914: checking size of long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_sizeof_long=8
+else
+  cat > conftest.$ac_ext <<EOF
+#line 19922 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) return(1);
+  fprintf(f, "%d\n", sizeof(long));
+  return(0);
+}
+EOF
+if { (eval echo configure:19933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_long=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+EOF
+
+
+echo $ac_n "checking size of int""... $ac_c" 1>&6
+echo "configure:19953: checking size of int" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_sizeof_int=4
+else
+  cat > conftest.$ac_ext <<EOF
+#line 19961 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) return(1);
+  fprintf(f, "%d\n", sizeof(int));
+  return(0);
+}
+EOF
+if { (eval echo configure:19972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_int=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_int=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_int" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+EOF
+
+
+
+echo $ac_n "checking for int32_t""... $ac_c" 1>&6
+echo "configure:19993: checking for int32_t" >&5
+if eval "test \"`echo '$''{'ac_cv_int_type_int32_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<EOF
+#line 19999 "configure"
+#include "confdefs.h"
+
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#elif HAVE_STDINT_H   
+# include <stdint.h>  
+#endif
+int main() {
+if ((int32_t *) 0)
+  return 0;   
+if (sizeof (int32_t))
+  return 0;
+
+; return 0; }
+EOF
+if { (eval echo configure:20018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_int_type_int32_t=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_int_type_int32_t=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_int_type_int32_t" 1>&6
+if test "$ac_cv_int_type_int32_t" = "yes"; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_INT32_T 1
+EOF
+
+fi
+
+
+echo $ac_n "checking for uint32_t""... $ac_c" 1>&6
+echo "configure:20041: checking for uint32_t" >&5
+if eval "test \"`echo '$''{'ac_cv_int_type_uint32_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<EOF
+#line 20047 "configure"
+#include "confdefs.h"
+
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#elif HAVE_STDINT_H   
+# include <stdint.h>  
+#endif
+int main() {
+if ((uint32_t *) 0)
+  return 0;   
+if (sizeof (uint32_t))
+  return 0;
+
+; return 0; }
+EOF
+if { (eval echo configure:20066: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_int_type_uint32_t=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_int_type_uint32_t=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_int_type_uint32_t" 1>&6
+if test "$ac_cv_int_type_uint32_t" = "yes"; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_UINT32_T 1
+EOF
+
+fi
+
+
+for ac_hdr in  \
+sys/types.h \
+inttypes.h \
+stdint.h \
+string.h \
+stdlib.h
+
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:20098: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 20103 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:20108: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+for ac_func in strtoll atoll strftime
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:20138: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 20143 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:20166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
+
+PHP_DATE_CFLAGS="-I at ext_builddir@/lib"
+timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c 
+                 lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c"
+
+
+  ext_builddir=ext/date
+  ext_srcdir=$abs_srcdir/ext/date
+
+  ac_extra=`echo "$PHP_DATE_CFLAGS"|$SED s#@ext_srcdir@#$ext_srcdir#g|$SED s#@ext_builddir@#$ext_builddir#g`
+
+  if test "no" != "shared" && test "no" != "yes" && test "" != "cli"; then
+    PHP_DATE_SHARED=no
+    
+  
+  case ext/date in
+  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
+  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
+  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
+  esac
+  
+  
+
+  b_c_pre=$php_c_pre
+  b_cxx_pre=$php_cxx_pre
+  b_c_meta=$php_c_meta
+  b_cxx_meta=$php_cxx_meta
+  b_c_post=$php_c_post
+  b_cxx_post=$php_cxx_post
+  b_lo=$php_lo
+
+
+  old_IFS=$IFS
+  for ac_src in php_date.c $timelib_sources; do
+  
+      IFS=.
+      set $ac_src
+      ac_obj=$1
+      IFS=$old_IFS
+      
+      PHP_GLOBAL_OBJS="$PHP_GLOBAL_OBJS $ac_bdir$ac_obj.lo"
+
+      case $ac_src in
+        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
+      esac
+
+    cat >>Makefile.objects<<EOF
+$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
+	$ac_comp
+EOF
+  done
+
+
+    EXT_STATIC="$EXT_STATIC date"
+    if test "no" != "nocli"; then
+      EXT_CLI_STATIC="$EXT_CLI_STATIC date"
+    fi
+  else
+    if test "no" = "shared" || test "no" = "yes"; then
+      PHP_DATE_SHARED=yes
+      
+  case ext/date in
+  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
+  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
+  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
+  esac
+  
+  
+
+  b_c_pre=$shared_c_pre
+  b_cxx_pre=$shared_cxx_pre
+  b_c_meta=$shared_c_meta
+  b_cxx_meta=$shared_cxx_meta
+  b_c_post=$shared_c_post
+  b_cxx_post=$shared_cxx_post
+  b_lo=$shared_lo
+
+
+  old_IFS=$IFS
+  for ac_src in php_date.c $timelib_sources; do
+  
+      IFS=.
+      set $ac_src
+      ac_obj=$1
+      IFS=$old_IFS
+      
+      shared_objects_date="$shared_objects_date $ac_bdir$ac_obj.lo"
+
+      case $ac_src in
+        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
+      esac
+
+    cat >>Makefile.objects<<EOF
+$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
+	$ac_comp
+EOF
+  done
+
+      case $host_alias in
+        *netware*)
+          
+  install_modules="install-modules"
+
+  case $host_alias in
+    *aix*)
+      suffix=so
+      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -Wl,-G -o '$ext_builddir'/phpdate.la -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(PHPDATE_SHARED_LIBADD) && mv -f '$ext_builddir'/.libs/phpdate.so '$ext_builddir'/phpdate.so'
+      ;;
+    *netware*)
+      suffix=nlm
+      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -shared -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) -L$(top_builddir)/netware -lphp5lib $(M4_SUBSTR(PHPDATE, 3)_SHARED_LIBADD)'
+      ;;
+    *)
+      suffix=la
+      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(PHPDATE_SHARED_LIBADD)'
+      ;;
+  esac
+
+  if test "x" = "xyes"; then
+    PHP_ZEND_EX="$PHP_ZEND_EX \$(phplibdir)/phpdate.$suffix"
+  else
+    PHP_MODULES="$PHP_MODULES \$(phplibdir)/phpdate.$suffix"
+  fi
+  
+  PHP_VAR_SUBST="$PHP_VAR_SUBST shared_objects_date"
+
+  cat >>Makefile.objects<<EOF
+\$(phplibdir)/phpdate.$suffix: $ext_builddir/phpdate.$suffix
+	\$(LIBTOOL) --mode=install cp $ext_builddir/phpdate.$suffix \$(phplibdir)
+
+$ext_builddir/phpdate.$suffix: \$(shared_objects_date) \$(PHPDATE_SHARED_DEPENDENCIES)
+	$link_cmd
+
+EOF
+
+          ;;
+        *)
+          
+  install_modules="install-modules"
+
+  case $host_alias in
+    *aix*)
+      suffix=so
+      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -Wl,-G -o '$ext_builddir'/date.la -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(DATE_SHARED_LIBADD) && mv -f '$ext_builddir'/.libs/date.so '$ext_builddir'/date.so'
+      ;;
+    *netware*)
+      suffix=nlm
+      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -shared -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) -L$(top_builddir)/netware -lphp5lib $(M4_SUBSTR(DATE, 3)_SHARED_LIBADD)'
+      ;;
+    *)
+      suffix=la
+      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(DATE_SHARED_LIBADD)'
+      ;;
+  esac
+
+  if test "x" = "xyes"; then
+    PHP_ZEND_EX="$PHP_ZEND_EX \$(phplibdir)/date.$suffix"
+  else
+    PHP_MODULES="$PHP_MODULES \$(phplibdir)/date.$suffix"
+  fi
+  
+  PHP_VAR_SUBST="$PHP_VAR_SUBST shared_objects_date"
+
+  cat >>Makefile.objects<<EOF
+\$(phplibdir)/date.$suffix: $ext_builddir/date.$suffix
+	\$(LIBTOOL) --mode=install cp $ext_builddir/date.$suffix \$(phplibdir)
+
+$ext_builddir/date.$suffix: \$(shared_objects_date) \$(DATE_SHARED_DEPENDENCIES)
+	$link_cmd
+
+EOF
+
+          ;;
+      esac
+      cat >> confdefs.h <<EOF
+#define COMPILE_DL_DATE 1
+EOF
+
+    fi
+  fi
+
+  if test "no" != "shared" && test "no" != "yes" && test "" = "cli"; then
+    PHP_DATE_SHARED=no
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
+  
+  case ext/date in
+  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
+  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
+  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
+  esac
+  
+  
+
+  b_c_pre=$php_c_pre
+  b_cxx_pre=$php_cxx_pre
+  b_c_meta=$php_c_meta
+  b_cxx_meta=$php_cxx_meta
+  b_c_post=$php_c_post
+  b_cxx_post=$php_cxx_post
+  b_lo=$php_lo
+
+
+  old_IFS=$IFS
+  for ac_src in php_date.c $timelib_sources; do
+  
+      IFS=.
+      set $ac_src
+      ac_obj=$1
+      IFS=$old_IFS
+      
+      PHP_GLOBAL_OBJS="$PHP_GLOBAL_OBJS $ac_bdir$ac_obj.lo"
+
+      case $ac_src in
+        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
+      esac
+
+    cat >>Makefile.objects<<EOF
+$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
+	$ac_comp
+EOF
+  done
+
+
+        EXT_STATIC="$EXT_STATIC date"
+        ;;
+      *)
+        
+  
+  case ext/date in
+  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
+  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
+  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
+  esac
+  
+  
+
+  b_c_pre=$php_c_pre
+  b_cxx_pre=$php_cxx_pre
+  b_c_meta=$php_c_meta
+  b_cxx_meta=$php_cxx_meta
+  b_c_post=$php_c_post
+  b_cxx_post=$php_cxx_post
+  b_lo=$php_lo
+
+
+  old_IFS=$IFS
+  for ac_src in php_date.c $timelib_sources; do
+  
+      IFS=.
+      set $ac_src
+      ac_obj=$1
+      IFS=$old_IFS
+      
+      PHP_CLI_OBJS="$PHP_CLI_OBJS $ac_bdir$ac_obj.lo"
+
+      case $ac_src in
+        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
+        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
+      esac
+
+    cat >>Makefile.objects<<EOF
+$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
+	$ac_comp
+EOF
+  done
+
+
+        ;;
+    esac
+    EXT_CLI_STATIC="$EXT_CLI_STATIC date"
+  fi
+  
+  
+    BUILD_DIR="$BUILD_DIR $ext_builddir"
+  
+
+
+  if test "$ext_builddir" = "."; then
+    PHP_PECL_EXTENSION=date
+    
+  PHP_VAR_SUBST="$PHP_VAR_SUBST PHP_PECL_EXTENSION"
+
+  fi
+
+
+
+  
+    $php_shtool mkdir -p $ext_builddir/lib
+  
+
+
+  if test "$ext_builddir/lib" != "/usr/include"; then
+    
+  if test -z "$ext_builddir/lib" || echo "$ext_builddir/lib" | grep '^/' >/dev/null ; then
+    ai_p=$ext_builddir/lib
+  else
+    
+    ep_dir="`echo $ext_builddir/lib|$SED 's%/*[^/][^/]*/*$%%'`"
+    
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    ai_p="$ep_realdir/`basename \"$ext_builddir/lib\"`"
+  fi
+
+    
+  
+  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "INCLUDEPATH$unique=set"
+    
+      if test ""; then
+        INCLUDES="-I$ai_p $INCLUDES"
+      else
+        INCLUDES="$INCLUDES -I$ai_p"
+      fi
+    
+  fi
+
+  fi
+
+
+  if test "$ext_srcdir/lib" != "/usr/include"; then
+    
+  if test -z "$ext_srcdir/lib" || echo "$ext_srcdir/lib" | grep '^/' >/dev/null ; then
+    ai_p=$ext_srcdir/lib
+  else
+    
+    ep_dir="`echo $ext_srcdir/lib|$SED 's%/*[^/][^/]*/*$%%'`"
+    
+    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
+    ai_p="$ep_realdir/`basename \"$ext_srcdir/lib\"`"
+  fi
+
+    
+  
+  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "INCLUDEPATH$unique=set"
+    
+      if test ""; then
+        INCLUDES="-I$ai_p $INCLUDES"
+      else
+        INCLUDES="$INCLUDES -I$ai_p"
+      fi
+    
+  fi
+
+  fi
+
+
+
+  
+    header_path=ext/date
+    for header_file in php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h; do
+      hp_hf="$header_path/$header_file"
+      
+  
+  unique=`echo $hp_hf|$SED 's/[^a-zA-Z0-9]/_/g'`
+  
+  cmd="echo $ac_n \"\$INSTALLHEADERS$unique$ac_c\""
+  if test -n "$unique" && test "`eval $cmd`" = "" ; then
+    eval "INSTALLHEADERS$unique=set"
+    
+        INSTALL_HEADERS="$INSTALL_HEADERS $hp_hf"
+      
+  fi
+
+    done 
+  
+
+
+cat > $ext_builddir/lib/timelib_config.h <<EOF
+#ifdef PHP_WIN32
+# include "config.w32.h"
+#else
+# include <php_config.h>
+#endif
+EOF
+
+
+
 php_enable_libxml=yes
 
 echo $ac_n "checking whether to enable LIBXML support""... $ac_c" 1>&6
-echo "configure:19873: checking whether to enable LIBXML support" >&5
+echo "configure:20592: checking whether to enable LIBXML support" >&5
 # Check whether --enable-libxml or --disable-libxml was given.
 if test "${enable_libxml+set}" = set; then
   enableval="$enable_libxml"
@@ -19917,7 +20636,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:19921: checking libxml2 install dir" >&5
+echo "configure:20640: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -19946,7 +20665,7 @@ if test "$PHP_LIBXML" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:19950: checking for xml2-config path" >&5
+echo "configure:20669: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -20104,7 +20823,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:20108: checking whether libxml build works" >&5
+echo "configure:20827: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -20120,7 +20839,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 20124 "configure"
+#line 20843 "configure"
 #include "confdefs.h"
 
     
@@ -20131,7 +20850,7 @@ else
     }
   
 EOF
-if { (eval echo configure:20135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:20854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -20354,8 +21073,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_LIBXML_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/libxml in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -20398,9 +21118,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC libxml"
-    else
-      
+        EXT_STATIC="$EXT_STATIC libxml"
+        ;;
+      *)
+        
   
   case ext/libxml in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -20443,7 +21164,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC libxml"
   fi
   
@@ -20493,7 +21215,7 @@ fi
 php_with_openssl=no
 
 echo $ac_n "checking for OpenSSL support""... $ac_c" 1>&6
-echo "configure:20497: checking for OpenSSL support" >&5
+echo "configure:21219: checking for OpenSSL support" >&5
 # Check whether --with-openssl or --without-openssl was given.
 if test "${with_openssl+set}" = set; then
   withval="$with_openssl"
@@ -20540,7 +21262,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_kerberos=no
 
 echo $ac_n "checking for Kerberos support""... $ac_c" 1>&6
-echo "configure:20544: checking for Kerberos support" >&5
+echo "configure:21266: checking for Kerberos support" >&5
 # Check whether --with-kerberos or --without-kerberos was given.
 if test "${with_kerberos+set}" = set; then
   withval="$with_kerberos"
@@ -20747,8 +21469,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_OPENSSL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/openssl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -20791,9 +21514,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC openssl"
-    else
-      
+        EXT_STATIC="$EXT_STATIC openssl"
+        ;;
+      *)
+        
   
   case ext/openssl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -20836,7 +21560,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC openssl"
   fi
   
@@ -20866,7 +21591,7 @@ EOF
     # Extract the first word of "krb5-config", so it can be a program name with args.
 set dummy krb5-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:20870: checking for $ac_word" >&5
+echo "configure:21595: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_KRB5_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -21226,7 +21951,7 @@ fi
   fi
 
   echo $ac_n "checking for DSA_get_default_method in -lssl""... $ac_c" 1>&6
-echo "configure:21230: checking for DSA_get_default_method in -lssl" >&5
+echo "configure:21955: checking for DSA_get_default_method in -lssl" >&5
 ac_lib_var=`echo ssl'_'DSA_get_default_method | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -21234,7 +21959,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lssl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 21238 "configure"
+#line 21963 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -21245,7 +21970,7 @@ int main() {
 DSA_get_default_method()
 ; return 0; }
 EOF
-if { (eval echo configure:21249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -21287,7 +22012,7 @@ fi
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:21291: checking for $ac_word" >&5
+echo "configure:22016: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -21492,9 +22217,9 @@ fi
     old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=-I$OPENSSL_INCDIR
     echo $ac_n "checking for OpenSSL version""... $ac_c" 1>&6
-echo "configure:21496: checking for OpenSSL version" >&5
+echo "configure:22221: checking for OpenSSL version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 21498 "configure"
+#line 22223 "configure"
 #include "confdefs.h"
 
 #include <openssl/opensslv.h>
@@ -21649,7 +22374,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for CRYPTO_free in -lcrypto""... $ac_c" 1>&6
-echo "configure:21653: checking for CRYPTO_free in -lcrypto" >&5
+echo "configure:22378: checking for CRYPTO_free in -lcrypto" >&5
 ac_lib_var=`echo crypto'_'CRYPTO_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -21657,7 +22382,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypto  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 21661 "configure"
+#line 22386 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -21668,7 +22393,7 @@ int main() {
 CRYPTO_free()
 ; return 0; }
 EOF
-if { (eval echo configure:21672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -21825,7 +22550,7 @@ fi
   done
 
   echo $ac_n "checking for SSL_CTX_set_ssl_version in -lssl""... $ac_c" 1>&6
-echo "configure:21829: checking for SSL_CTX_set_ssl_version in -lssl" >&5
+echo "configure:22554: checking for SSL_CTX_set_ssl_version in -lssl" >&5
 ac_lib_var=`echo ssl'_'SSL_CTX_set_ssl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -21833,7 +22558,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lssl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 21837 "configure"
+#line 22562 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -21844,7 +22569,7 @@ int main() {
 SSL_CTX_set_ssl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:21848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -21966,7 +22691,7 @@ fi
 php_with_pcre_regex=yes
 
 echo $ac_n "checking for PCRE support""... $ac_c" 1>&6
-echo "configure:21970: checking for PCRE support" >&5
+echo "configure:22695: checking for PCRE support" >&5
 # Check whether --with-pcre-regex or --without-pcre-regex was given.
 if test "${with_pcre_regex+set}" = set; then
   withval="$with_pcre_regex"
@@ -22195,8 +22920,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PCRE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pcre in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -22239,9 +22965,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pcre"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pcre"
+        ;;
+      *)
+        
   
   case ext/pcre in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -22284,7 +23011,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pcre"
   fi
   
@@ -22676,8 +23404,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PCRE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pcre in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -22720,9 +23449,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pcre"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pcre"
+        ;;
+      *)
+        
   
   case ext/pcre in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -22765,7 +23495,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pcre"
   fi
   
@@ -22814,7 +23545,7 @@ fi
 php_with_zlib=no
 
 echo $ac_n "checking for ZLIB support""... $ac_c" 1>&6
-echo "configure:22818: checking for ZLIB support" >&5
+echo "configure:23549: checking for ZLIB support" >&5
 # Check whether --with-zlib or --without-zlib was given.
 if test "${with_zlib+set}" = set; then
   withval="$with_zlib"
@@ -22861,7 +23592,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_zlib_dir=no
 
 echo $ac_n "checking if the location of ZLIB install directory is defined""... $ac_c" 1>&6
-echo "configure:22865: checking if the location of ZLIB install directory is defined" >&5
+echo "configure:23596: checking if the location of ZLIB install directory is defined" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -23068,8 +23799,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_ZLIB_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/zlib in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -23112,9 +23844,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC zlib"
-    else
-      
+        EXT_STATIC="$EXT_STATIC zlib"
+        ;;
+      *)
+        
   
   case ext/zlib in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -23157,7 +23890,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC zlib"
   fi
   
@@ -23304,7 +24038,7 @@ EOF
   done
 
   echo $ac_n "checking for gzgets in -lz""... $ac_c" 1>&6
-echo "configure:23308: checking for gzgets in -lz" >&5
+echo "configure:24042: checking for gzgets in -lz" >&5
 ac_lib_var=`echo z'_'gzgets | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -23312,7 +24046,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lz  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 23316 "configure"
+#line 24050 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -23323,7 +24057,7 @@ int main() {
 gzgets()
 ; return 0; }
 EOF
-if { (eval echo configure:23327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:24061: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -23463,7 +24197,7 @@ fi
 php_enable_bcmath=no
 
 echo $ac_n "checking whether to enable bc style precision math functions""... $ac_c" 1>&6
-echo "configure:23467: checking whether to enable bc style precision math functions" >&5
+echo "configure:24201: checking whether to enable bc style precision math functions" >&5
 # Check whether --enable-bcmath or --disable-bcmath was given.
 if test "${enable_bcmath+set}" = set; then
   enableval="$enable_bcmath"
@@ -23699,8 +24433,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_BCMATH_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/bcmath in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -23747,9 +24482,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC bcmath"
-    else
-      
+        EXT_STATIC="$EXT_STATIC bcmath"
+        ;;
+      *)
+        
   
   case ext/bcmath in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -23796,7 +24532,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC bcmath"
   fi
   
@@ -23828,7 +24565,7 @@ fi
 php_with_bz2=no
 
 echo $ac_n "checking for BZip2 support""... $ac_c" 1>&6
-echo "configure:23832: checking for BZip2 support" >&5
+echo "configure:24569: checking for BZip2 support" >&5
 # Check whether --with-bz2 or --without-bz2 was given.
 if test "${with_bz2+set}" = set; then
   withval="$with_bz2"
@@ -23876,7 +24613,7 @@ if test "$PHP_BZ2" != "no"; then
     BZIP_DIR=$PHP_BZ2
   else
     echo $ac_n "checking for BZip2 in default path""... $ac_c" 1>&6
-echo "configure:23880: checking for BZip2 in default path" >&5
+echo "configure:24617: checking for BZip2 in default path" >&5
     for i in /usr/local /usr; do
       if test -r $i/include/bzlib.h; then
         BZIP_DIR=$i
@@ -23989,7 +24726,7 @@ echo "configure:23880: checking for BZip2 in default path" >&5
   done
 
   echo $ac_n "checking for BZ2_bzerror in -lbz2""... $ac_c" 1>&6
-echo "configure:23993: checking for BZ2_bzerror in -lbz2" >&5
+echo "configure:24730: checking for BZ2_bzerror in -lbz2" >&5
 ac_lib_var=`echo bz2'_'BZ2_bzerror | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -23997,7 +24734,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbz2  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 24001 "configure"
+#line 24738 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -24008,7 +24745,7 @@ int main() {
 BZ2_bzerror()
 ; return 0; }
 EOF
-if { (eval echo configure:24012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:24749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -24358,8 +25095,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_BZ2_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/bz2 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -24402,9 +25140,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC bz2"
-    else
-      
+        EXT_STATIC="$EXT_STATIC bz2"
+        ;;
+      *)
+        
   
   case ext/bz2 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -24447,7 +25186,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC bz2"
   fi
   
@@ -24473,7 +25213,7 @@ fi
 php_enable_calendar=no
 
 echo $ac_n "checking whether to enable calendar conversion support""... $ac_c" 1>&6
-echo "configure:24477: checking whether to enable calendar conversion support" >&5
+echo "configure:25217: checking whether to enable calendar conversion support" >&5
 # Check whether --enable-calendar or --disable-calendar was given.
 if test "${enable_calendar+set}" = set; then
   enableval="$enable_calendar"
@@ -24705,8 +25445,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_CALENDAR_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/calendar in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -24749,9 +25490,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC calendar"
-    else
-      
+        EXT_STATIC="$EXT_STATIC calendar"
+        ;;
+      *)
+        
   
   case ext/calendar in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -24794,7 +25536,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC calendar"
   fi
   
@@ -24817,7 +25560,7 @@ fi
 php_enable_ctype=yes
 
 echo $ac_n "checking whether to enable ctype functions""... $ac_c" 1>&6
-echo "configure:24821: checking whether to enable ctype functions" >&5
+echo "configure:25564: checking whether to enable ctype functions" >&5
 # Check whether --enable-ctype or --disable-ctype was given.
 if test "${enable_ctype+set}" = set; then
   enableval="$enable_ctype"
@@ -25049,8 +25792,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_CTYPE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/ctype in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -25093,9 +25837,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC ctype"
-    else
-      
+        EXT_STATIC="$EXT_STATIC ctype"
+        ;;
+      *)
+        
   
   case ext/ctype in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -25138,7 +25883,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC ctype"
   fi
   
@@ -25161,7 +25907,7 @@ fi
 php_with_curl=no
 
 echo $ac_n "checking for cURL support""... $ac_c" 1>&6
-echo "configure:25165: checking for cURL support" >&5
+echo "configure:25911: checking for cURL support" >&5
 # Check whether --with-curl or --without-curl was given.
 if test "${with_curl+set}" = set; then
   withval="$with_curl"
@@ -25208,7 +25954,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_curlwrappers=no
 
 echo $ac_n "checking if we should use cURL for url streams""... $ac_c" 1>&6
-echo "configure:25212: checking if we should use cURL for url streams" >&5
+echo "configure:25958: checking if we should use cURL for url streams" >&5
 # Check whether --with-curlwrappers or --without-curlwrappers was given.
 if test "${with_curlwrappers+set}" = set; then
   withval="$with_curlwrappers"
@@ -25235,7 +25981,7 @@ if test "$PHP_CURL" != "no"; then
     CURL_DIR=$PHP_CURL
   else
     echo $ac_n "checking for cURL in default path""... $ac_c" 1>&6
-echo "configure:25239: checking for cURL in default path" >&5
+echo "configure:25985: checking for cURL in default path" >&5
     for i in /usr/local /usr; do
       if test -r $i/include/curl/easy.h; then
         CURL_DIR=$i
@@ -25253,7 +25999,7 @@ echo "configure:25239: checking for cURL in default path" >&5
 
   CURL_CONFIG="curl-config"
   echo $ac_n "checking for cURL 7.10.5 or greater""... $ac_c" 1>&6
-echo "configure:25257: checking for cURL 7.10.5 or greater" >&5
+echo "configure:26003: checking for cURL 7.10.5 or greater" >&5
 
   if ${CURL_DIR}/bin/curl-config --libs > /dev/null 2>&1; then
     CURL_CONFIG=${CURL_DIR}/bin/curl-config
@@ -25271,270 +26017,6 @@ echo "configure:25257: checking for cURL 7.10.5 or greater" >&5
   else
     { echo "configure: error: cURL version 7.10.5 or later is required to compile php with cURL support" 1>&2; exit 1; }
   fi
-  
-  echo $ac_n "checking for SSL support in libcurl""... $ac_c" 1>&6
-echo "configure:25277: checking for SSL support in libcurl" >&5
-  CURL_SSL=`$CURL_CONFIG --feature | $EGREP SSL`
-  if test "$CURL_SSL" = "SSL"; then
-   echo "$ac_t""yes" 1>&6
-   cat >> confdefs.h <<\EOF
-#define HAVE_CURL_SSL 1
-EOF
-
-   
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="`$CURL_CONFIG --cflags`"
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="`$CURL_CONFIG --libs` $ld_runpath_switch$CURL_DIR/$PHP_LIBDIR"
-   
-   echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:25292: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-    # This must be in double quotes, not single quotes, because CPP may get
-  # substituted into the Makefile and "${CC-cc}" will confuse make.
-  CPP="${CC-cc} -E"
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp.
-  cat > conftest.$ac_ext <<EOF
-#line 25307 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:25313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -E -traditional-cpp"
-  cat > conftest.$ac_ext <<EOF
-#line 25324 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:25330: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -nologo -E"
-  cat > conftest.$ac_ext <<EOF
-#line 25341 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:25347: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-  ac_cv_prog_CPP="$CPP"
-fi
-  CPP="$ac_cv_prog_CPP"
-else
-  ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-   echo $ac_n "checking for openssl support in libcurl""... $ac_c" 1>&6
-echo "configure:25372: checking for openssl support in libcurl" >&5
-   if test "$cross_compiling" = yes; then
-  
-    echo "$ac_t""no" 1>&6
-   
-else
-  cat > conftest.$ac_ext <<EOF
-#line 25379 "configure"
-#include "confdefs.h"
-
-    #include <curl/curl.h>
-    int main(int argc, char *argv[]) {
-     curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
-     if (data && data->ssl_version && *data->ssl_version) {
-      const char *ptr = data->ssl_version;
-      while(*ptr == ' ') ++ptr;
-      return strncasecmp(ptr, "OpenSSL", sizeof("OpenSSL")-1);
-     }
-     return 1;
-    }
-   
-EOF
-if { (eval echo configure:25394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-  
-    echo "$ac_t""yes" 1>&6
-    for ac_hdr in openssl/crypto.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:25402: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 25407 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:25412: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- 
-     cat >> confdefs.h <<\EOF
-#define HAVE_CURL_OPENSSL 1
-EOF
-
-    
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-   
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  
-    echo "$ac_t""no" 1>&6
-   
-fi
-rm -fr conftest*
-fi
-
-   
-   echo $ac_n "checking for gnutls support in libcurl""... $ac_c" 1>&6
-echo "configure:25457: checking for gnutls support in libcurl" >&5
-   if test "$cross_compiling" = yes; then
-  
-    echo "$ac_t""no" 1>&6
-   
-else
-  cat > conftest.$ac_ext <<EOF
-#line 25464 "configure"
-#include "confdefs.h"
-
-    #include <curl/curl.h>
-    int main(int argc, char *argv[]) {
-     curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
-     if (data && data->ssl_version && *data->ssl_version) {
-      const char *ptr = data->ssl_version;
-      while(*ptr == ' ') ++ptr;
-      return strncasecmp(ptr, "GnuTLS", sizeof("GnuTLS")-1);
-     }
-     return 1;
-    }
-   
-EOF
-if { (eval echo configure:25479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-  
-    echo "$ac_t""yes" 1>&6
-    ac_safe=`echo "gcrypt.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for gcrypt.h""... $ac_c" 1>&6
-echo "configure:25485: checking for gcrypt.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 25490 "configure"
-#include "confdefs.h"
-#include <gcrypt.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:25495: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  
-     cat >> confdefs.h <<\EOF
-#define HAVE_CURL_GNUTLS 1
-EOF
-
-    
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-   
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  
-    echo "$ac_t""no" 1>&6
-   
-fi
-rm -fr conftest*
-fi
-
-   
-   CFLAGS="$save_CFLAGS"
-   LDFLAGS="$save_LDFLAGS"
-  else
-   echo "$ac_t""no" 1>&6
-  fi
 
   
   if test "$CURL_DIR/include" != "/usr/include"; then
@@ -25753,6 +26235,275 @@ fi
   fi
 
 
+  
+  echo $ac_n "checking for SSL support in libcurl""... $ac_c" 1>&6
+echo "configure:26241: checking for SSL support in libcurl" >&5
+  CURL_SSL=`$CURL_CONFIG --feature | $EGREP SSL`
+  if test "$CURL_SSL" = "SSL"; then
+    echo "$ac_t""yes" 1>&6
+    cat >> confdefs.h <<\EOF
+#define HAVE_CURL_SSL 1
+EOF
+
+   
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="`$CURL_CONFIG --cflags`"
+   
+    echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:26254: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 26269 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:26275: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 26286 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:26292: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 26303 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:26309: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+    echo $ac_n "checking for openssl support in libcurl""... $ac_c" 1>&6
+echo "configure:26334: checking for openssl support in libcurl" >&5
+    if test "$cross_compiling" = yes; then
+  
+      echo "$ac_t""no" 1>&6
+    
+else
+  cat > conftest.$ac_ext <<EOF
+#line 26341 "configure"
+#include "confdefs.h"
+
+#include <curl/curl.h>
+
+int main(int argc, char *argv[])
+{
+  curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
+
+  if (data && data->ssl_version && *data->ssl_version) {
+    const char *ptr = data->ssl_version;
+
+    while(*ptr == ' ') ++ptr;
+    return strncasecmp(ptr, "OpenSSL", sizeof("OpenSSL")-1);
+  }
+  return 1;
+}
+    
+EOF
+if { (eval echo configure:26360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  
+      echo "$ac_t""yes" 1>&6
+      for ac_hdr in openssl/crypto.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:26368: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 26373 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:26378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ 
+        cat >> confdefs.h <<\EOF
+#define HAVE_CURL_OPENSSL 1
+EOF
+
+      
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+    
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  
+      echo "$ac_t""no" 1>&6
+    
+fi
+rm -fr conftest*
+fi
+
+   
+    echo $ac_n "checking for gnutls support in libcurl""... $ac_c" 1>&6
+echo "configure:26423: checking for gnutls support in libcurl" >&5
+    if test "$cross_compiling" = yes; then
+  
+      echo "$ac_t""no" 1>&6
+    
+else
+  cat > conftest.$ac_ext <<EOF
+#line 26430 "configure"
+#include "confdefs.h"
+
+#include <curl/curl.h>
+
+int main(int argc, char *argv[])
+{
+  curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
+  
+  if (data && data->ssl_version && *data->ssl_version) {
+    const char *ptr = data->ssl_version;
+
+    while(*ptr == ' ') ++ptr;
+    return strncasecmp(ptr, "GnuTLS", sizeof("GnuTLS")-1);
+  }
+  return 1;
+}
+
+EOF
+if { (eval echo configure:26449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  
+      echo "$ac_t""yes" 1>&6
+      ac_safe=`echo "gcrypt.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for gcrypt.h""... $ac_c" 1>&6
+echo "configure:26455: checking for gcrypt.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 26460 "configure"
+#include "confdefs.h"
+#include <gcrypt.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:26465: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+        cat >> confdefs.h <<\EOF
+#define HAVE_CURL_GNUTLS 1
+EOF
+
+      
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  
+      echo "$ac_t""no" 1>&6
+    
+fi
+rm -fr conftest*
+fi
+
+   
+    CFLAGS="$save_CFLAGS"
+  else
+    echo "$ac_t""no" 1>&6
+  fi
 
   
   save_old_LDFLAGS=$LDFLAGS
@@ -25852,7 +26603,7 @@ fi
   done
 
   echo $ac_n "checking for curl_easy_perform in -lcurl""... $ac_c" 1>&6
-echo "configure:25856: checking for curl_easy_perform in -lcurl" >&5
+echo "configure:26607: checking for curl_easy_perform in -lcurl" >&5
 ac_lib_var=`echo curl'_'curl_easy_perform | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -25860,7 +26611,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcurl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 25864 "configure"
+#line 26615 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -25871,7 +26622,7 @@ int main() {
 curl_easy_perform()
 ; return 0; }
 EOF
-if { (eval echo configure:25875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:26626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -26007,7 +26758,7 @@ fi
   done
 
   echo $ac_n "checking for curl_version_info in -lcurl""... $ac_c" 1>&6
-echo "configure:26011: checking for curl_version_info in -lcurl" >&5
+echo "configure:26762: checking for curl_version_info in -lcurl" >&5
 ac_lib_var=`echo curl'_'curl_version_info | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -26015,7 +26766,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcurl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 26019 "configure"
+#line 26770 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -26026,7 +26777,7 @@ int main() {
 curl_version_info()
 ; return 0; }
 EOF
-if { (eval echo configure:26030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:26781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -26160,7 +26911,7 @@ fi
   done
 
   echo $ac_n "checking for curl_easy_strerror in -lcurl""... $ac_c" 1>&6
-echo "configure:26164: checking for curl_easy_strerror in -lcurl" >&5
+echo "configure:26915: checking for curl_easy_strerror in -lcurl" >&5
 ac_lib_var=`echo curl'_'curl_easy_strerror | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -26168,7 +26919,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcurl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 26172 "configure"
+#line 26923 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -26179,7 +26930,7 @@ int main() {
 curl_easy_strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:26183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:26934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -26313,7 +27064,7 @@ fi
   done
 
   echo $ac_n "checking for curl_multi_strerror in -lcurl""... $ac_c" 1>&6
-echo "configure:26317: checking for curl_multi_strerror in -lcurl" >&5
+echo "configure:27068: checking for curl_multi_strerror in -lcurl" >&5
 ac_lib_var=`echo curl'_'curl_multi_strerror | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -26321,7 +27072,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcurl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 26325 "configure"
+#line 27076 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -26332,7 +27083,7 @@ int main() {
 curl_multi_strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:26336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:27087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -26559,8 +27310,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_CURL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/curl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -26603,9 +27355,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC curl"
-    else
-      
+        EXT_STATIC="$EXT_STATIC curl"
+        ;;
+      *)
+        
   
   case ext/curl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -26648,7 +27401,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC curl"
   fi
   
@@ -26673,681 +27427,6 @@ fi
 
 
 
-echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:26678: checking size of long" >&5
-if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_sizeof_long=8
-else
-  cat > conftest.$ac_ext <<EOF
-#line 26686 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main()
-{
-  FILE *f=fopen("conftestval", "w");
-  if (!f) return(1);
-  fprintf(f, "%d\n", sizeof(long));
-  return(0);
-}
-EOF
-if { (eval echo configure:26697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-  ac_cv_sizeof_long=`cat conftestval`
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  ac_cv_sizeof_long=0
-fi
-rm -fr conftest*
-fi
-
-fi
-echo "$ac_t""$ac_cv_sizeof_long" 1>&6
-cat >> confdefs.h <<EOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-EOF
-
-
-echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:26717: checking size of int" >&5
-if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_sizeof_int=4
-else
-  cat > conftest.$ac_ext <<EOF
-#line 26725 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main()
-{
-  FILE *f=fopen("conftestval", "w");
-  if (!f) return(1);
-  fprintf(f, "%d\n", sizeof(int));
-  return(0);
-}
-EOF
-if { (eval echo configure:26736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-  ac_cv_sizeof_int=`cat conftestval`
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  ac_cv_sizeof_int=0
-fi
-rm -fr conftest*
-fi
-
-fi
-echo "$ac_t""$ac_cv_sizeof_int" 1>&6
-cat >> confdefs.h <<EOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-EOF
-
-
-
-echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:26757: checking for int32_t" >&5
-if eval "test \"`echo '$''{'ac_cv_int_type_int32_t'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  
-cat > conftest.$ac_ext <<EOF
-#line 26763 "configure"
-#include "confdefs.h"
-
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#elif HAVE_STDINT_H   
-# include <stdint.h>  
-#endif
-int main() {
-if ((int32_t *) 0)
-  return 0;   
-if (sizeof (int32_t))
-  return 0;
-
-; return 0; }
-EOF
-if { (eval echo configure:26782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  ac_cv_int_type_int32_t=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  ac_cv_int_type_int32_t=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_int_type_int32_t" 1>&6
-if test "$ac_cv_int_type_int32_t" = "yes"; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_INT32_T 1
-EOF
-
-fi
-
-
-echo $ac_n "checking for uint32_t""... $ac_c" 1>&6
-echo "configure:26805: checking for uint32_t" >&5
-if eval "test \"`echo '$''{'ac_cv_int_type_uint32_t'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  
-cat > conftest.$ac_ext <<EOF
-#line 26811 "configure"
-#include "confdefs.h"
-
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#elif HAVE_STDINT_H   
-# include <stdint.h>  
-#endif
-int main() {
-if ((uint32_t *) 0)
-  return 0;   
-if (sizeof (uint32_t))
-  return 0;
-
-; return 0; }
-EOF
-if { (eval echo configure:26830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  ac_cv_int_type_uint32_t=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  ac_cv_int_type_uint32_t=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_int_type_uint32_t" 1>&6
-if test "$ac_cv_int_type_uint32_t" = "yes"; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_UINT32_T 1
-EOF
-
-fi
-
-
-for ac_hdr in  \
-sys/types.h \
-inttypes.h \
-stdint.h \
-string.h \
-stdlib.h
-
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:26862: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 26867 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:26872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- 
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-
-for ac_func in strtoll atoll strftime
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:26902: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 26907 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:26930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
- 
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-
-
-
-PHP_DATE_CFLAGS="-I at ext_builddir@/lib"
-timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c 
-                 lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c"
-
-
-  ext_builddir=ext/date
-  ext_srcdir=$abs_srcdir/ext/date
-
-  ac_extra=`echo "$PHP_DATE_CFLAGS"|$SED s#@ext_srcdir@#$ext_srcdir#g|$SED s#@ext_builddir@#$ext_builddir#g`
-
-  if test "no" != "shared" && test "no" != "yes" && test "" != "cli"; then
-    PHP_DATE_SHARED=no
-    
-  
-  case ext/date in
-  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
-  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
-  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
-  esac
-  
-  
-
-  b_c_pre=$php_c_pre
-  b_cxx_pre=$php_cxx_pre
-  b_c_meta=$php_c_meta
-  b_cxx_meta=$php_cxx_meta
-  b_c_post=$php_c_post
-  b_cxx_post=$php_cxx_post
-  b_lo=$php_lo
-
-
-  old_IFS=$IFS
-  for ac_src in php_date.c $timelib_sources; do
-  
-      IFS=.
-      set $ac_src
-      ac_obj=$1
-      IFS=$old_IFS
-      
-      PHP_GLOBAL_OBJS="$PHP_GLOBAL_OBJS $ac_bdir$ac_obj.lo"
-
-      case $ac_src in
-        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
-      esac
-
-    cat >>Makefile.objects<<EOF
-$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
-	$ac_comp
-EOF
-  done
-
-
-    EXT_STATIC="$EXT_STATIC date"
-    if test "no" != "nocli"; then
-      EXT_CLI_STATIC="$EXT_CLI_STATIC date"
-    fi
-  else
-    if test "no" = "shared" || test "no" = "yes"; then
-      PHP_DATE_SHARED=yes
-      
-  case ext/date in
-  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
-  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
-  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
-  esac
-  
-  
-
-  b_c_pre=$shared_c_pre
-  b_cxx_pre=$shared_cxx_pre
-  b_c_meta=$shared_c_meta
-  b_cxx_meta=$shared_cxx_meta
-  b_c_post=$shared_c_post
-  b_cxx_post=$shared_cxx_post
-  b_lo=$shared_lo
-
-
-  old_IFS=$IFS
-  for ac_src in php_date.c $timelib_sources; do
-  
-      IFS=.
-      set $ac_src
-      ac_obj=$1
-      IFS=$old_IFS
-      
-      shared_objects_date="$shared_objects_date $ac_bdir$ac_obj.lo"
-
-      case $ac_src in
-        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
-      esac
-
-    cat >>Makefile.objects<<EOF
-$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
-	$ac_comp
-EOF
-  done
-
-      case $host_alias in
-        *netware*)
-          
-  install_modules="install-modules"
-
-  case $host_alias in
-    *aix*)
-      suffix=so
-      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -Wl,-G -o '$ext_builddir'/phpdate.la -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(PHPDATE_SHARED_LIBADD) && mv -f '$ext_builddir'/.libs/phpdate.so '$ext_builddir'/phpdate.so'
-      ;;
-    *netware*)
-      suffix=nlm
-      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -shared -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) -L$(top_builddir)/netware -lphp5lib $(M4_SUBSTR(PHPDATE, 3)_SHARED_LIBADD)'
-      ;;
-    *)
-      suffix=la
-      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(PHPDATE_SHARED_LIBADD)'
-      ;;
-  esac
-
-  if test "x" = "xyes"; then
-    PHP_ZEND_EX="$PHP_ZEND_EX \$(phplibdir)/phpdate.$suffix"
-  else
-    PHP_MODULES="$PHP_MODULES \$(phplibdir)/phpdate.$suffix"
-  fi
-  
-  PHP_VAR_SUBST="$PHP_VAR_SUBST shared_objects_date"
-
-  cat >>Makefile.objects<<EOF
-\$(phplibdir)/phpdate.$suffix: $ext_builddir/phpdate.$suffix
-	\$(LIBTOOL) --mode=install cp $ext_builddir/phpdate.$suffix \$(phplibdir)
-
-$ext_builddir/phpdate.$suffix: \$(shared_objects_date) \$(PHPDATE_SHARED_DEPENDENCIES)
-	$link_cmd
-
-EOF
-
-          ;;
-        *)
-          
-  install_modules="install-modules"
-
-  case $host_alias in
-    *aix*)
-      suffix=so
-      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -Wl,-G -o '$ext_builddir'/date.la -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(DATE_SHARED_LIBADD) && mv -f '$ext_builddir'/.libs/date.so '$ext_builddir'/date.so'
-      ;;
-    *netware*)
-      suffix=nlm
-      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -shared -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) -L$(top_builddir)/netware -lphp5lib $(M4_SUBSTR(DATE, 3)_SHARED_LIBADD)'
-      ;;
-    *)
-      suffix=la
-      link_cmd='$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $(shared_objects_date) $(DATE_SHARED_LIBADD)'
-      ;;
-  esac
-
-  if test "x" = "xyes"; then
-    PHP_ZEND_EX="$PHP_ZEND_EX \$(phplibdir)/date.$suffix"
-  else
-    PHP_MODULES="$PHP_MODULES \$(phplibdir)/date.$suffix"
-  fi
-  
-  PHP_VAR_SUBST="$PHP_VAR_SUBST shared_objects_date"
-
-  cat >>Makefile.objects<<EOF
-\$(phplibdir)/date.$suffix: $ext_builddir/date.$suffix
-	\$(LIBTOOL) --mode=install cp $ext_builddir/date.$suffix \$(phplibdir)
-
-$ext_builddir/date.$suffix: \$(shared_objects_date) \$(DATE_SHARED_DEPENDENCIES)
-	$link_cmd
-
-EOF
-
-          ;;
-      esac
-      cat >> confdefs.h <<EOF
-#define COMPILE_DL_DATE 1
-EOF
-
-    fi
-  fi
-
-  if test "no" != "shared" && test "no" != "yes" && test "" = "cli"; then
-    PHP_DATE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
-  
-  case ext/date in
-  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
-  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
-  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
-  esac
-  
-  
-
-  b_c_pre=$php_c_pre
-  b_cxx_pre=$php_cxx_pre
-  b_c_meta=$php_c_meta
-  b_cxx_meta=$php_cxx_meta
-  b_c_post=$php_c_post
-  b_cxx_post=$php_cxx_post
-  b_lo=$php_lo
-
-
-  old_IFS=$IFS
-  for ac_src in php_date.c $timelib_sources; do
-  
-      IFS=.
-      set $ac_src
-      ac_obj=$1
-      IFS=$old_IFS
-      
-      PHP_GLOBAL_OBJS="$PHP_GLOBAL_OBJS $ac_bdir$ac_obj.lo"
-
-      case $ac_src in
-        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
-      esac
-
-    cat >>Makefile.objects<<EOF
-$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
-	$ac_comp
-EOF
-  done
-
-
-      EXT_STATIC="$EXT_STATIC date"
-    else
-      
-  
-  case ext/date in
-  "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
-  /*) ac_srcdir=`echo "ext/date"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
-  *) ac_srcdir="$abs_srcdir/ext/date/"; ac_bdir="ext/date/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
-  esac
-  
-  
-
-  b_c_pre=$php_c_pre
-  b_cxx_pre=$php_cxx_pre
-  b_c_meta=$php_c_meta
-  b_cxx_meta=$php_cxx_meta
-  b_c_post=$php_c_post
-  b_cxx_post=$php_cxx_post
-  b_lo=$php_lo
-
-
-  old_IFS=$IFS
-  for ac_src in php_date.c $timelib_sources; do
-  
-      IFS=.
-      set $ac_src
-      ac_obj=$1
-      IFS=$old_IFS
-      
-      PHP_CLI_OBJS="$PHP_CLI_OBJS $ac_bdir$ac_obj.lo"
-
-      case $ac_src in
-        *.c) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.s) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.S) ac_comp="$b_c_pre $ac_extra $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;;
-        *.cpp|*.cc|*.cxx) ac_comp="$b_cxx_pre $ac_extra $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;;
-      esac
-
-    cat >>Makefile.objects<<EOF
-$ac_bdir$ac_obj.lo: $ac_srcdir$ac_src
-	$ac_comp
-EOF
-  done
-
-
-    fi
-    EXT_CLI_STATIC="$EXT_CLI_STATIC date"
-  fi
-  
-  
-    BUILD_DIR="$BUILD_DIR $ext_builddir"
-  
-
-
-  if test "$ext_builddir" = "."; then
-    PHP_PECL_EXTENSION=date
-    
-  PHP_VAR_SUBST="$PHP_VAR_SUBST PHP_PECL_EXTENSION"
-
-  fi
-
-
-
-  
-    $php_shtool mkdir -p $ext_builddir/lib
-  
-
-
-  if test "$ext_builddir/lib" != "/usr/include"; then
-    
-  if test -z "$ext_builddir/lib" || echo "$ext_builddir/lib" | grep '^/' >/dev/null ; then
-    ai_p=$ext_builddir/lib
-  else
-    
-    ep_dir="`echo $ext_builddir/lib|$SED 's%/*[^/][^/]*/*$%%'`"
-    
-    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
-    ai_p="$ep_realdir/`basename \"$ext_builddir/lib\"`"
-  fi
-
-    
-  
-  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "INCLUDEPATH$unique=set"
-    
-      if test ""; then
-        INCLUDES="-I$ai_p $INCLUDES"
-      else
-        INCLUDES="$INCLUDES -I$ai_p"
-      fi
-    
-  fi
-
-  fi
-
-
-  if test "$ext_srcdir/lib" != "/usr/include"; then
-    
-  if test -z "$ext_srcdir/lib" || echo "$ext_srcdir/lib" | grep '^/' >/dev/null ; then
-    ai_p=$ext_srcdir/lib
-  else
-    
-    ep_dir="`echo $ext_srcdir/lib|$SED 's%/*[^/][^/]*/*$%%'`"
-    
-    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
-    ai_p="$ep_realdir/`basename \"$ext_srcdir/lib\"`"
-  fi
-
-    
-  
-  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "INCLUDEPATH$unique=set"
-    
-      if test ""; then
-        INCLUDES="-I$ai_p $INCLUDES"
-      else
-        INCLUDES="$INCLUDES -I$ai_p"
-      fi
-    
-  fi
-
-  fi
-
-
-
-  
-    header_path=ext/date
-    for header_file in php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h; do
-      hp_hf="$header_path/$header_file"
-      
-  
-  unique=`echo $hp_hf|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$INSTALLHEADERS$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "INSTALLHEADERS$unique=set"
-    
-        INSTALL_HEADERS="$INSTALL_HEADERS $hp_hf"
-      
-  fi
-
-    done 
-  
-
-
-cat > $ext_builddir/lib/timelib_config.h <<EOF
-#ifdef PHP_WIN32
-# include "config.w32.h"
-#else
-# include <php_config.h>
-#endif
-EOF
-
-
-
-
-
 
 
 
@@ -27717,7 +27796,7 @@ if test "$PHP_QDBM" != "no"; then
   done
 
   echo $ac_n "checking for dpopen in -l$LIB""... $ac_c" 1>&6
-echo "configure:27721: checking for dpopen in -l$LIB" >&5
+echo "configure:27800: checking for dpopen in -l$LIB" >&5
 ac_lib_var=`echo $LIB'_'dpopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -27725,7 +27804,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 27729 "configure"
+#line 27808 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -27736,7 +27815,7 @@ int main() {
 dpopen()
 ; return 0; }
 EOF
-if { (eval echo configure:27740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:27819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -27905,7 +27984,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:27909: checking for $THIS_FULL_NAME support" >&5
+echo "configure:27988: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -27933,7 +28012,7 @@ if test "$PHP_GDBM" != "no"; then
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:27937: checking for $THIS_FULL_NAME support" >&5
+echo "configure:28016: checking for $THIS_FULL_NAME support" >&5
   if test -n "You cannot combine --with-gdbm with --with-qdbm"; then
     { echo "configure: error: You cannot combine --with-gdbm with --with-qdbm" 1>&2; exit 1; }
   fi
@@ -28052,7 +28131,7 @@ echo "configure:27937: checking for $THIS_FULL_NAME support" >&5
   done
 
   echo $ac_n "checking for gdbm_open in -lgdbm""... $ac_c" 1>&6
-echo "configure:28056: checking for gdbm_open in -lgdbm" >&5
+echo "configure:28135: checking for gdbm_open in -lgdbm" >&5
 ac_lib_var=`echo gdbm'_'gdbm_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -28060,7 +28139,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgdbm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 28064 "configure"
+#line 28143 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -28071,7 +28150,7 @@ int main() {
 gdbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:28075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:28154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -28236,7 +28315,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:28240: checking for $THIS_FULL_NAME support" >&5
+echo "configure:28319: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -28365,7 +28444,7 @@ if test "$PHP_NDBM" != "no"; then
   done
 
   echo $ac_n "checking for dbm_open in -l$LIB""... $ac_c" 1>&6
-echo "configure:28369: checking for dbm_open in -l$LIB" >&5
+echo "configure:28448: checking for dbm_open in -l$LIB" >&5
 ac_lib_var=`echo $LIB'_'dbm_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -28373,7 +28452,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 28377 "configure"
+#line 28456 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -28384,7 +28463,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:28388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:28467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -28553,7 +28632,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:28557: checking for $THIS_FULL_NAME support" >&5
+echo "configure:28636: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -28620,7 +28699,7 @@ if test "$PHP_DB4" != "no"; then
   LIBS="-l$LIB $LIBS"
   
         cat > conftest.$ac_ext <<EOF
-#line 28624 "configure"
+#line 28703 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -28631,11 +28710,11 @@ int main() {
         
 ; return 0; }
 EOF
-if { (eval echo configure:28635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:28714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
           cat > conftest.$ac_ext <<EOF
-#line 28639 "configure"
+#line 28718 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -28672,14 +28751,14 @@ rm -f conftest*
   done
   if test -z "$THIS_LIBS"; then
     echo $ac_n "checking for db4 major version""... $ac_c" 1>&6
-echo "configure:28676: checking for db4 major version" >&5
+echo "configure:28755: checking for db4 major version" >&5
     { echo "configure: error: Header contains different version" 1>&2; exit 1; }
   fi
   if test "4" = "4"; then
     echo $ac_n "checking for db4 minor version and patch level""... $ac_c" 1>&6
-echo "configure:28681: checking for db4 minor version and patch level" >&5
+echo "configure:28760: checking for db4 minor version and patch level" >&5
     cat > conftest.$ac_ext <<EOF
-#line 28683 "configure"
+#line 28762 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -28705,9 +28784,9 @@ rm -f conftest*
   fi
   if test "$ext_shared" = "yes"; then
     echo $ac_n "checking if dba can be used as shared extension""... $ac_c" 1>&6
-echo "configure:28709: checking if dba can be used as shared extension" >&5
+echo "configure:28788: checking if dba can be used as shared extension" >&5
     cat > conftest.$ac_ext <<EOF
-#line 28711 "configure"
+#line 28790 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -28864,7 +28943,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:28868: checking for $THIS_FULL_NAME support" >&5
+echo "configure:28947: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -28892,7 +28971,7 @@ if test "$PHP_DB3" != "no"; then
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:28896: checking for $THIS_FULL_NAME support" >&5
+echo "configure:28975: checking for $THIS_FULL_NAME support" >&5
   if test -n "You cannot combine --with-db3 with --with-db4"; then
     { echo "configure: error: You cannot combine --with-db3 with --with-db4" 1>&2; exit 1; }
   fi
@@ -28943,7 +29022,7 @@ echo "configure:28896: checking for $THIS_FULL_NAME support" >&5
   LIBS="-l$LIB $LIBS"
   
         cat > conftest.$ac_ext <<EOF
-#line 28947 "configure"
+#line 29026 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -28954,11 +29033,11 @@ int main() {
         
 ; return 0; }
 EOF
-if { (eval echo configure:28958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:29037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
           cat > conftest.$ac_ext <<EOF
-#line 28962 "configure"
+#line 29041 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -28995,14 +29074,14 @@ rm -f conftest*
   done
   if test -z "$THIS_LIBS"; then
     echo $ac_n "checking for db3 major version""... $ac_c" 1>&6
-echo "configure:28999: checking for db3 major version" >&5
+echo "configure:29078: checking for db3 major version" >&5
     { echo "configure: error: Header contains different version" 1>&2; exit 1; }
   fi
   if test "3" = "4"; then
     echo $ac_n "checking for db4 minor version and patch level""... $ac_c" 1>&6
-echo "configure:29004: checking for db4 minor version and patch level" >&5
+echo "configure:29083: checking for db4 minor version and patch level" >&5
     cat > conftest.$ac_ext <<EOF
-#line 29006 "configure"
+#line 29085 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29028,9 +29107,9 @@ rm -f conftest*
   fi
   if test "$ext_shared" = "yes"; then
     echo $ac_n "checking if dba can be used as shared extension""... $ac_c" 1>&6
-echo "configure:29032: checking if dba can be used as shared extension" >&5
+echo "configure:29111: checking if dba can be used as shared extension" >&5
     cat > conftest.$ac_ext <<EOF
-#line 29034 "configure"
+#line 29113 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29187,7 +29266,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:29191: checking for $THIS_FULL_NAME support" >&5
+echo "configure:29270: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -29215,7 +29294,7 @@ if test "$PHP_DB2" != "no"; then
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:29219: checking for $THIS_FULL_NAME support" >&5
+echo "configure:29298: checking for $THIS_FULL_NAME support" >&5
   if test -n "You cannot combine --with-db2 with --with-db3 or --with-db4"; then
     { echo "configure: error: You cannot combine --with-db2 with --with-db3 or --with-db4" 1>&2; exit 1; }
   fi
@@ -29266,7 +29345,7 @@ echo "configure:29219: checking for $THIS_FULL_NAME support" >&5
   LIBS="-l$LIB $LIBS"
   
         cat > conftest.$ac_ext <<EOF
-#line 29270 "configure"
+#line 29349 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29277,11 +29356,11 @@ int main() {
         
 ; return 0; }
 EOF
-if { (eval echo configure:29281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:29360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
           cat > conftest.$ac_ext <<EOF
-#line 29285 "configure"
+#line 29364 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29318,14 +29397,14 @@ rm -f conftest*
   done
   if test -z "$THIS_LIBS"; then
     echo $ac_n "checking for db2 major version""... $ac_c" 1>&6
-echo "configure:29322: checking for db2 major version" >&5
+echo "configure:29401: checking for db2 major version" >&5
     { echo "configure: error: Header contains different version" 1>&2; exit 1; }
   fi
   if test "2" = "4"; then
     echo $ac_n "checking for db4 minor version and patch level""... $ac_c" 1>&6
-echo "configure:29327: checking for db4 minor version and patch level" >&5
+echo "configure:29406: checking for db4 minor version and patch level" >&5
     cat > conftest.$ac_ext <<EOF
-#line 29329 "configure"
+#line 29408 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29351,9 +29430,9 @@ rm -f conftest*
   fi
   if test "$ext_shared" = "yes"; then
     echo $ac_n "checking if dba can be used as shared extension""... $ac_c" 1>&6
-echo "configure:29355: checking if dba can be used as shared extension" >&5
+echo "configure:29434: checking if dba can be used as shared extension" >&5
     cat > conftest.$ac_ext <<EOF
-#line 29357 "configure"
+#line 29436 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29510,7 +29589,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:29514: checking for $THIS_FULL_NAME support" >&5
+echo "configure:29593: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -29530,7 +29609,7 @@ if test "$PHP_DB1" != "no"; then
   unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX THIS_RESULT
 
   echo $ac_n "checking for DB1 in library""... $ac_c" 1>&6
-echo "configure:29534: checking for DB1 in library" >&5
+echo "configure:29613: checking for DB1 in library" >&5
   if test "$HAVE_DB4" = "1"; then
     THIS_VERSION=4
     THIS_LIBS=$DB4_LIBS
@@ -29578,7 +29657,7 @@ EOF
   fi
   echo "$ac_t""$THIS_LIBS" 1>&6
   echo $ac_n "checking for DB1 in header""... $ac_c" 1>&6
-echo "configure:29582: checking for DB1 in header" >&5
+echo "configure:29661: checking for DB1 in header" >&5
   echo "$ac_t""$THIS_INCLUDE" 1>&6
   if test -n "$THIS_INCLUDE"; then
     
@@ -29588,7 +29667,7 @@ echo "configure:29582: checking for DB1 in header" >&5
   LIBS="-l$THIS_LIBS $LIBS"
   
       cat > conftest.$ac_ext <<EOF
-#line 29592 "configure"
+#line 29671 "configure"
 #include "confdefs.h"
 
 #include "$THIS_INCLUDE"
@@ -29599,7 +29678,7 @@ int main() {
       
 ; return 0; }
 EOF
-if { (eval echo configure:29603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:29682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
         cat >> confdefs.h <<EOF
@@ -29749,7 +29828,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:29753: checking for $THIS_FULL_NAME support" >&5
+echo "configure:29832: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -29777,7 +29856,7 @@ if test "$PHP_DBM" != "no"; then
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:29781: checking for $THIS_FULL_NAME support" >&5
+echo "configure:29860: checking for $THIS_FULL_NAME support" >&5
   if test -n "You cannot combine --with-dbm with --with-qdbm"; then
     { echo "configure: error: You cannot combine --with-dbm with --with-qdbm" 1>&2; exit 1; }
   fi
@@ -29901,7 +29980,7 @@ echo "configure:29781: checking for $THIS_FULL_NAME support" >&5
   done
 
   echo $ac_n "checking for dbminit in -l$LIB""... $ac_c" 1>&6
-echo "configure:29905: checking for dbminit in -l$LIB" >&5
+echo "configure:29984: checking for dbminit in -l$LIB" >&5
 ac_lib_var=`echo $LIB'_'dbminit | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -29909,7 +29988,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 29913 "configure"
+#line 29992 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -29920,7 +29999,7 @@ int main() {
 dbminit()
 ; return 0; }
 EOF
-if { (eval echo configure:29924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:30003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -29940,7 +30019,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
     ext_shared=$save_ext_shared
     
         echo $ac_n "checking for DBM using GDBM""... $ac_c" 1>&6
-echo "configure:29944: checking for DBM using GDBM" >&5
+echo "configure:30023: checking for DBM using GDBM" >&5
         cat >> confdefs.h <<EOF
 #define DBM_INCLUDE_FILE "$THIS_INCLUDE"
 EOF
@@ -30104,7 +30183,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:30108: checking for $THIS_FULL_NAME support" >&5
+echo "configure:30187: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -30325,7 +30404,7 @@ elif test "$PHP_CDB" != "no"; then
   done
 
   echo $ac_n "checking for cdb_read in -l$LIB""... $ac_c" 1>&6
-echo "configure:30329: checking for cdb_read in -l$LIB" >&5
+echo "configure:30408: checking for cdb_read in -l$LIB" >&5
 ac_lib_var=`echo $LIB'_'cdb_read | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -30333,7 +30412,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 30337 "configure"
+#line 30416 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -30344,7 +30423,7 @@ int main() {
 cdb_read()
 ; return 0; }
 EOF
-if { (eval echo configure:30348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:30427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -30513,7 +30592,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:30517: checking for $THIS_FULL_NAME support" >&5
+echo "configure:30596: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -30544,7 +30623,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:30548: checking for $THIS_FULL_NAME support" >&5
+echo "configure:30627: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -30575,7 +30654,7 @@ fi
     THIS_FULL_NAME="$THIS_NAME"
   fi
   echo $ac_n "checking for $THIS_FULL_NAME support""... $ac_c" 1>&6
-echo "configure:30579: checking for $THIS_FULL_NAME support" >&5
+echo "configure:30658: checking for $THIS_FULL_NAME support" >&5
   if test -n ""; then
     { echo "configure: error: " 1>&2; exit 1; }
   fi
@@ -30590,7 +30669,7 @@ echo "configure:30579: checking for $THIS_FULL_NAME support" >&5
 
 
 echo $ac_n "checking whether to enable DBA interface""... $ac_c" 1>&6
-echo "configure:30594: checking whether to enable DBA interface" >&5
+echo "configure:30673: checking whether to enable DBA interface" >&5
 if test "$HAVE_DBA" = "1"; then
   if test "$ext_shared" = "yes"; then
     echo "$ac_t""yes, shared" 1>&6
@@ -30785,8 +30864,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_DBA_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/dba in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -30829,9 +30909,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC dba"
-    else
-      
+        EXT_STATIC="$EXT_STATIC dba"
+        ;;
+      *)
+        
   
   case ext/dba in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -30874,7 +30955,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC dba"
   fi
   
@@ -30917,7 +30999,7 @@ fi
 php_enable_dbase=no
 
 echo $ac_n "checking whether to enable dbase support""... $ac_c" 1>&6
-echo "configure:30921: checking whether to enable dbase support" >&5
+echo "configure:31003: checking whether to enable dbase support" >&5
 # Check whether --enable-dbase or --disable-dbase was given.
 if test "${enable_dbase+set}" = set; then
   enableval="$enable_dbase"
@@ -31149,8 +31231,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_DBASE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/dbase in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -31193,9 +31276,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC dbase"
-    else
-      
+        EXT_STATIC="$EXT_STATIC dbase"
+        ;;
+      *)
+        
   
   case ext/dbase in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -31238,7 +31322,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC dbase"
   fi
   
@@ -31261,7 +31346,7 @@ fi
 php_enable_dom=yes
 
 echo $ac_n "checking whether to enable DOM support""... $ac_c" 1>&6
-echo "configure:31265: checking whether to enable DOM support" >&5
+echo "configure:31350: checking whether to enable DOM support" >&5
 # Check whether --enable-dom or --disable-dom was given.
 if test "${enable_dom+set}" = set; then
   enableval="$enable_dom"
@@ -31309,7 +31394,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:31313: checking libxml2 install dir" >&5
+echo "configure:31398: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -31340,7 +31425,7 @@ if test "$PHP_DOM" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:31344: checking for xml2-config path" >&5
+echo "configure:31429: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -31498,7 +31583,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:31502: checking whether libxml build works" >&5
+echo "configure:31587: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -31514,7 +31599,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 31518 "configure"
+#line 31603 "configure"
 #include "confdefs.h"
 
     
@@ -31525,7 +31610,7 @@ else
     }
   
 EOF
-if { (eval echo configure:31529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:31614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -31766,8 +31851,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_DOM_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/dom in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -31819,9 +31905,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC dom"
-    else
-      
+        EXT_STATIC="$EXT_STATIC dom"
+        ;;
+      *)
+        
   
   case ext/dom in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -31873,7 +31960,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC dom"
   fi
   
@@ -31945,7 +32033,7 @@ fi
 php_enable_exif=no
 
 echo $ac_n "checking whether to enable EXIF (metadata from images) support""... $ac_c" 1>&6
-echo "configure:31949: checking whether to enable EXIF (metadata from images) support" >&5
+echo "configure:32037: checking whether to enable EXIF (metadata from images) support" >&5
 # Check whether --enable-exif or --disable-exif was given.
 if test "${enable_exif+set}" = set; then
   enableval="$enable_exif"
@@ -32177,8 +32265,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_EXIF_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/exif in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -32221,9 +32310,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC exif"
-    else
-      
+        EXT_STATIC="$EXT_STATIC exif"
+        ;;
+      *)
+        
   
   case ext/exif in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -32266,7 +32356,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC exif"
   fi
   
@@ -32289,7 +32380,7 @@ fi
 php_with_fbsql=no
 
 echo $ac_n "checking for FrontBase SQL92 (fbsql) support""... $ac_c" 1>&6
-echo "configure:32293: checking for FrontBase SQL92 (fbsql) support" >&5
+echo "configure:32384: checking for FrontBase SQL92 (fbsql) support" >&5
 # Check whether --with-fbsql or --without-fbsql was given.
 if test "${with_fbsql+set}" = set; then
   withval="$with_fbsql"
@@ -32522,8 +32613,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_FBSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/fbsql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -32566,9 +32658,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC fbsql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC fbsql"
+        ;;
+      *)
+        
   
   case ext/fbsql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -32611,7 +32704,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC fbsql"
   fi
   
@@ -32793,7 +32887,7 @@ fi
 php_with_fdftk=no
 
 echo $ac_n "checking for FDF support""... $ac_c" 1>&6
-echo "configure:32797: checking for FDF support" >&5
+echo "configure:32891: checking for FDF support" >&5
 # Check whether --with-fdftk or --without-fdftk was given.
 if test "${with_fdftk+set}" = set; then
   withval="$with_fdftk"
@@ -33011,7 +33105,7 @@ EOF
   done
 
   echo $ac_n "checking for FDFOpen in -l$file""... $ac_c" 1>&6
-echo "configure:33015: checking for FDFOpen in -l$file" >&5
+echo "configure:33109: checking for FDFOpen in -l$file" >&5
 ac_lib_var=`echo $file'_'FDFOpen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -33019,7 +33113,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$file  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 33023 "configure"
+#line 33117 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -33030,7 +33124,7 @@ int main() {
 FDFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:33034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:33128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -33157,7 +33251,7 @@ fi
   done
 
   echo $ac_n "checking for FDFGetFDFVersion in -l$file""... $ac_c" 1>&6
-echo "configure:33161: checking for FDFGetFDFVersion in -l$file" >&5
+echo "configure:33255: checking for FDFGetFDFVersion in -l$file" >&5
 ac_lib_var=`echo $file'_'FDFGetFDFVersion | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -33165,7 +33259,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$file  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 33169 "configure"
+#line 33263 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -33176,7 +33270,7 @@ int main() {
 FDFGetFDFVersion()
 ; return 0; }
 EOF
-if { (eval echo configure:33180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:33274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -33502,8 +33596,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_FDF_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/fdf in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -33546,9 +33641,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC fdf"
-    else
-      
+        EXT_STATIC="$EXT_STATIC fdf"
+        ;;
+      *)
+        
   
   case ext/fdf in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -33591,7 +33687,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC fdf"
   fi
   
@@ -33621,7 +33718,7 @@ fi
 php_enable_filter=yes
 
 echo $ac_n "checking whether to enable input filter support""... $ac_c" 1>&6
-echo "configure:33625: checking whether to enable input filter support" >&5
+echo "configure:33722: checking whether to enable input filter support" >&5
 # Check whether --enable-filter or --disable-filter was given.
 if test "${enable_filter+set}" = set; then
   enableval="$enable_filter"
@@ -33668,7 +33765,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_pcre_dir=no
 
 echo $ac_n "checking pcre install prefix""... $ac_c" 1>&6
-echo "configure:33672: checking pcre install prefix" >&5
+echo "configure:33769: checking pcre install prefix" >&5
 # Check whether --with-pcre-dir or --without-pcre-dir was given.
 if test "${with_pcre_dir+set}" = set; then
   withval="$with_pcre_dir"
@@ -33698,7 +33795,7 @@ if test "$PHP_FILTER" != "no"; then
         old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=$INCLUDES
     cat > conftest.$ac_ext <<EOF
-#line 33702 "configure"
+#line 33799 "configure"
 #include "confdefs.h"
 
 #include <main/php_config.h>
@@ -33717,7 +33814,7 @@ else
   rm -rf conftest*
   
       cat > conftest.$ac_ext <<EOF
-#line 33721 "configure"
+#line 33818 "configure"
 #include "confdefs.h"
 
 #include <main/php_config.h>
@@ -33931,8 +34028,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_FILTER_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/filter in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -33975,9 +34073,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC filter"
-    else
-      
+        EXT_STATIC="$EXT_STATIC filter"
+        ;;
+      *)
+        
   
   case ext/filter in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -34020,7 +34119,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC filter"
   fi
   
@@ -34084,7 +34184,7 @@ fi
 php_enable_ftp=no
 
 echo $ac_n "checking whether to enable FTP support""... $ac_c" 1>&6
-echo "configure:34088: checking whether to enable FTP support" >&5
+echo "configure:34188: checking whether to enable FTP support" >&5
 # Check whether --enable-ftp or --disable-ftp was given.
 if test "${enable_ftp+set}" = set; then
   enableval="$enable_ftp"
@@ -34131,7 +34231,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_openssl_dir=no
 
 echo $ac_n "checking OpenSSL dir for FTP""... $ac_c" 1>&6
-echo "configure:34135: checking OpenSSL dir for FTP" >&5
+echo "configure:34235: checking OpenSSL dir for FTP" >&5
 # Check whether --with-openssl-dir or --without-openssl-dir was given.
 if test "${with_openssl_dir+set}" = set; then
   withval="$with_openssl_dir"
@@ -34342,8 +34442,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_FTP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/ftp in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -34386,9 +34487,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC ftp"
-    else
-      
+        EXT_STATIC="$EXT_STATIC ftp"
+        ;;
+      *)
+        
   
   case ext/ftp in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -34431,7 +34533,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC ftp"
   fi
   
@@ -34469,7 +34572,7 @@ EOF
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:34473: checking for $ac_word" >&5
+echo "configure:34576: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -34674,9 +34777,9 @@ fi
     old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=-I$OPENSSL_INCDIR
     echo $ac_n "checking for OpenSSL version""... $ac_c" 1>&6
-echo "configure:34678: checking for OpenSSL version" >&5
+echo "configure:34781: checking for OpenSSL version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 34680 "configure"
+#line 34783 "configure"
 #include "confdefs.h"
 
 #include <openssl/opensslv.h>
@@ -34831,7 +34934,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for CRYPTO_free in -lcrypto""... $ac_c" 1>&6
-echo "configure:34835: checking for CRYPTO_free in -lcrypto" >&5
+echo "configure:34938: checking for CRYPTO_free in -lcrypto" >&5
 ac_lib_var=`echo crypto'_'CRYPTO_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -34839,7 +34942,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypto  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 34843 "configure"
+#line 34946 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -34850,7 +34953,7 @@ int main() {
 CRYPTO_free()
 ; return 0; }
 EOF
-if { (eval echo configure:34854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:34957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -35007,7 +35110,7 @@ fi
   done
 
   echo $ac_n "checking for SSL_CTX_set_ssl_version in -lssl""... $ac_c" 1>&6
-echo "configure:35011: checking for SSL_CTX_set_ssl_version in -lssl" >&5
+echo "configure:35114: checking for SSL_CTX_set_ssl_version in -lssl" >&5
 ac_lib_var=`echo ssl'_'SSL_CTX_set_ssl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -35015,7 +35118,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lssl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 35019 "configure"
+#line 35122 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -35026,7 +35129,7 @@ int main() {
 SSL_CTX_set_ssl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:35030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:35133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -35145,7 +35248,7 @@ fi
 php_with_gd=no
 
 echo $ac_n "checking for GD support""... $ac_c" 1>&6
-echo "configure:35149: checking for GD support" >&5
+echo "configure:35252: checking for GD support" >&5
 # Check whether --with-gd or --without-gd was given.
 if test "${with_gd+set}" = set; then
   withval="$with_gd"
@@ -35193,7 +35296,7 @@ if test -z "$PHP_JPEG_DIR"; then
 php_with_jpeg_dir=no
 
 echo $ac_n "checking for the location of libjpeg""... $ac_c" 1>&6
-echo "configure:35197: checking for the location of libjpeg" >&5
+echo "configure:35300: checking for the location of libjpeg" >&5
 # Check whether --with-jpeg-dir or --without-jpeg-dir was given.
 if test "${with_jpeg_dir+set}" = set; then
   withval="$with_jpeg_dir"
@@ -35221,7 +35324,7 @@ if test -z "$PHP_PNG_DIR"; then
 php_with_png_dir=no
 
 echo $ac_n "checking for the location of libpng""... $ac_c" 1>&6
-echo "configure:35225: checking for the location of libpng" >&5
+echo "configure:35328: checking for the location of libpng" >&5
 # Check whether --with-png-dir or --without-png-dir was given.
 if test "${with_png_dir+set}" = set; then
   withval="$with_png_dir"
@@ -35249,7 +35352,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:35253: checking for the location of libz" >&5
+echo "configure:35356: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -35276,7 +35379,7 @@ fi
 php_with_xpm_dir=no
 
 echo $ac_n "checking for the location of libXpm""... $ac_c" 1>&6
-echo "configure:35280: checking for the location of libXpm" >&5
+echo "configure:35383: checking for the location of libXpm" >&5
 # Check whether --with-xpm-dir or --without-xpm-dir was given.
 if test "${with_xpm_dir+set}" = set; then
   withval="$with_xpm_dir"
@@ -35302,7 +35405,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_ttf=no
 
 echo $ac_n "checking for FreeType 1.x support""... $ac_c" 1>&6
-echo "configure:35306: checking for FreeType 1.x support" >&5
+echo "configure:35409: checking for FreeType 1.x support" >&5
 # Check whether --with-ttf or --without-ttf was given.
 if test "${with_ttf+set}" = set; then
   withval="$with_ttf"
@@ -35328,7 +35431,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_freetype_dir=no
 
 echo $ac_n "checking for FreeType 2""... $ac_c" 1>&6
-echo "configure:35332: checking for FreeType 2" >&5
+echo "configure:35435: checking for FreeType 2" >&5
 # Check whether --with-freetype-dir or --without-freetype-dir was given.
 if test "${with_freetype_dir+set}" = set; then
   withval="$with_freetype_dir"
@@ -35354,7 +35457,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_t1lib=no
 
 echo $ac_n "checking for T1lib support""... $ac_c" 1>&6
-echo "configure:35358: checking for T1lib support" >&5
+echo "configure:35461: checking for T1lib support" >&5
 # Check whether --with-t1lib or --without-t1lib was given.
 if test "${with_t1lib+set}" = set; then
   withval="$with_t1lib"
@@ -35380,7 +35483,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_gd_native_ttf=no
 
 echo $ac_n "checking whether to enable truetype string function in GD""... $ac_c" 1>&6
-echo "configure:35384: checking whether to enable truetype string function in GD" >&5
+echo "configure:35487: checking whether to enable truetype string function in GD" >&5
 # Check whether --enable-gd-native-ttf or --disable-gd-native-ttf was given.
 if test "${enable_gd_native_ttf+set}" = set; then
   enableval="$enable_gd_native_ttf"
@@ -35406,7 +35509,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_gd_jis_conv=no
 
 echo $ac_n "checking whether to enable JIS-mapped Japanese font support in GD""... $ac_c" 1>&6
-echo "configure:35410: checking whether to enable JIS-mapped Japanese font support in GD" >&5
+echo "configure:35513: checking whether to enable JIS-mapped Japanese font support in GD" >&5
 # Check whether --enable-gd-jis-conv or --disable-gd-jis-conv was given.
 if test "${enable_gd_jis_conv+set}" = set; then
   enableval="$enable_gd_jis_conv"
@@ -35462,12 +35565,12 @@ if test "$PHP_GD" = "yes"; then
   for ac_func in fabsf floorf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:35466: checking for $ac_func" >&5
+echo "configure:35569: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 35471 "configure"
+#line 35574 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -35490,7 +35593,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:35494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:35597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -35662,7 +35765,7 @@ EOF
   done
 
   echo $ac_n "checking for jpeg_read_header in -ljpeg""... $ac_c" 1>&6
-echo "configure:35666: checking for jpeg_read_header in -ljpeg" >&5
+echo "configure:35769: checking for jpeg_read_header in -ljpeg" >&5
 ac_lib_var=`echo jpeg'_'jpeg_read_header | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -35670,7 +35773,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ljpeg  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 35674 "configure"
+#line 35777 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -35681,7 +35784,7 @@ int main() {
 jpeg_read_header()
 ; return 0; }
 EOF
-if { (eval echo configure:35685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:35788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -35963,7 +36066,7 @@ fi
   done
 
   echo $ac_n "checking for png_write_image in -lpng""... $ac_c" 1>&6
-echo "configure:35967: checking for png_write_image in -lpng" >&5
+echo "configure:36070: checking for png_write_image in -lpng" >&5
 ac_lib_var=`echo png'_'png_write_image | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -35971,7 +36074,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpng  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 35975 "configure"
+#line 36078 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -35982,7 +36085,7 @@ int main() {
 png_write_image()
 ; return 0; }
 EOF
-if { (eval echo configure:35986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:36089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -36362,7 +36465,7 @@ fi
   done
 
   echo $ac_n "checking for XpmFreeXpmImage in -lXpm""... $ac_c" 1>&6
-echo "configure:36366: checking for XpmFreeXpmImage in -lXpm" >&5
+echo "configure:36469: checking for XpmFreeXpmImage in -lXpm" >&5
 ac_lib_var=`echo Xpm'_'XpmFreeXpmImage | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -36370,7 +36473,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXpm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 36374 "configure"
+#line 36477 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -36381,7 +36484,7 @@ int main() {
 XpmFreeXpmImage()
 ; return 0; }
 EOF
-if { (eval echo configure:36385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:36488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -36756,7 +36859,7 @@ fi
   done
 
   echo $ac_n "checking for FT_New_Face in -lfreetype""... $ac_c" 1>&6
-echo "configure:36760: checking for FT_New_Face in -lfreetype" >&5
+echo "configure:36863: checking for FT_New_Face in -lfreetype" >&5
 ac_lib_var=`echo freetype'_'FT_New_Face | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -36764,7 +36867,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lfreetype  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 36768 "configure"
+#line 36871 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -36775,7 +36878,7 @@ int main() {
 FT_New_Face()
 ; return 0; }
 EOF
-if { (eval echo configure:36779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:36882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -37138,7 +37241,7 @@ EOF
 
     else
       echo $ac_n "checking for FreeType 1 support""... $ac_c" 1>&6
-echo "configure:37142: checking for FreeType 1 support" >&5
+echo "configure:37245: checking for FreeType 1 support" >&5
       echo "$ac_t""no - FreeType 2.x is to be used instead" 1>&6
     fi
   fi
@@ -37252,7 +37355,7 @@ echo "configure:37142: checking for FreeType 1 support" >&5
   done
 
   echo $ac_n "checking for T1_StrError in -lt1""... $ac_c" 1>&6
-echo "configure:37256: checking for T1_StrError in -lt1" >&5
+echo "configure:37359: checking for T1_StrError in -lt1" >&5
 ac_lib_var=`echo t1'_'T1_StrError | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -37260,7 +37363,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lt1  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 37264 "configure"
+#line 37367 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -37271,7 +37374,7 @@ int main() {
 T1_StrError()
 ; return 0; }
 EOF
-if { (eval echo configure:37275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:37378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -37713,7 +37816,7 @@ EOF
   done
 
   echo $ac_n "checking for jpeg_read_header in -ljpeg""... $ac_c" 1>&6
-echo "configure:37717: checking for jpeg_read_header in -ljpeg" >&5
+echo "configure:37820: checking for jpeg_read_header in -ljpeg" >&5
 ac_lib_var=`echo jpeg'_'jpeg_read_header | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -37721,7 +37824,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ljpeg  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 37725 "configure"
+#line 37828 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -37732,7 +37835,7 @@ int main() {
 jpeg_read_header()
 ; return 0; }
 EOF
-if { (eval echo configure:37736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:37839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -38014,7 +38117,7 @@ fi
   done
 
   echo $ac_n "checking for png_write_image in -lpng""... $ac_c" 1>&6
-echo "configure:38018: checking for png_write_image in -lpng" >&5
+echo "configure:38121: checking for png_write_image in -lpng" >&5
 ac_lib_var=`echo png'_'png_write_image | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -38022,7 +38125,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpng  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 38026 "configure"
+#line 38129 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -38033,7 +38136,7 @@ int main() {
 png_write_image()
 ; return 0; }
 EOF
-if { (eval echo configure:38037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:38140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -38413,7 +38516,7 @@ fi
   done
 
   echo $ac_n "checking for XpmFreeXpmImage in -lXpm""... $ac_c" 1>&6
-echo "configure:38417: checking for XpmFreeXpmImage in -lXpm" >&5
+echo "configure:38520: checking for XpmFreeXpmImage in -lXpm" >&5
 ac_lib_var=`echo Xpm'_'XpmFreeXpmImage | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -38421,7 +38524,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXpm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 38425 "configure"
+#line 38528 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -38432,7 +38535,7 @@ int main() {
 XpmFreeXpmImage()
 ; return 0; }
 EOF
-if { (eval echo configure:38436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:38539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -38807,7 +38910,7 @@ fi
   done
 
   echo $ac_n "checking for FT_New_Face in -lfreetype""... $ac_c" 1>&6
-echo "configure:38811: checking for FT_New_Face in -lfreetype" >&5
+echo "configure:38914: checking for FT_New_Face in -lfreetype" >&5
 ac_lib_var=`echo freetype'_'FT_New_Face | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -38815,7 +38918,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lfreetype  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 38819 "configure"
+#line 38922 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -38826,7 +38929,7 @@ int main() {
 FT_New_Face()
 ; return 0; }
 EOF
-if { (eval echo configure:38830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:38933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -39189,7 +39292,7 @@ EOF
 
     else
       echo $ac_n "checking for FreeType 1 support""... $ac_c" 1>&6
-echo "configure:39193: checking for FreeType 1 support" >&5
+echo "configure:39296: checking for FreeType 1 support" >&5
       echo "$ac_t""no - FreeType 2.x is to be used instead" 1>&6
     fi
   fi
@@ -39303,7 +39406,7 @@ echo "configure:39193: checking for FreeType 1 support" >&5
   done
 
   echo $ac_n "checking for T1_StrError in -lt1""... $ac_c" 1>&6
-echo "configure:39307: checking for T1_StrError in -lt1" >&5
+echo "configure:39410: checking for T1_StrError in -lt1" >&5
 ac_lib_var=`echo t1'_'T1_StrError | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -39311,7 +39414,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lt1  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 39315 "configure"
+#line 39418 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -39322,7 +39425,7 @@ int main() {
 T1_StrError()
 ; return 0; }
 EOF
-if { (eval echo configure:39326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:39429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -39697,7 +39800,7 @@ EOF
   done
 
   echo $ac_n "checking for gdImageString16 in -lgd""... $ac_c" 1>&6
-echo "configure:39701: checking for gdImageString16 in -lgd" >&5
+echo "configure:39804: checking for gdImageString16 in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageString16 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -39705,7 +39808,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 39709 "configure"
+#line 39812 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -39716,7 +39819,7 @@ int main() {
 gdImageString16()
 ; return 0; }
 EOF
-if { (eval echo configure:39720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:39823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -39845,7 +39948,7 @@ fi
   done
 
   echo $ac_n "checking for gdImagePaletteCopy in -lgd""... $ac_c" 1>&6
-echo "configure:39849: checking for gdImagePaletteCopy in -lgd" >&5
+echo "configure:39952: checking for gdImagePaletteCopy in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImagePaletteCopy | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -39853,7 +39956,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 39857 "configure"
+#line 39960 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -39864,7 +39967,7 @@ int main() {
 gdImagePaletteCopy()
 ; return 0; }
 EOF
-if { (eval echo configure:39868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:39971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -39993,7 +40096,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreateFromPng in -lgd""... $ac_c" 1>&6
-echo "configure:39997: checking for gdImageCreateFromPng in -lgd" >&5
+echo "configure:40100: checking for gdImageCreateFromPng in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreateFromPng | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40001,7 +40104,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40005 "configure"
+#line 40108 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40012,7 +40115,7 @@ int main() {
 gdImageCreateFromPng()
 ; return 0; }
 EOF
-if { (eval echo configure:40016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:40119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -40141,7 +40244,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreateFromGif in -lgd""... $ac_c" 1>&6
-echo "configure:40145: checking for gdImageCreateFromGif in -lgd" >&5
+echo "configure:40248: checking for gdImageCreateFromGif in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreateFromGif | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40149,7 +40252,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40153 "configure"
+#line 40256 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40160,7 +40263,7 @@ int main() {
 gdImageCreateFromGif()
 ; return 0; }
 EOF
-if { (eval echo configure:40164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:40267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -40289,7 +40392,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageGif in -lgd""... $ac_c" 1>&6
-echo "configure:40293: checking for gdImageGif in -lgd" >&5
+echo "configure:40396: checking for gdImageGif in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageGif | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40297,7 +40400,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40301 "configure"
+#line 40404 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40308,7 +40411,7 @@ int main() {
 gdImageGif()
 ; return 0; }
 EOF
-if { (eval echo configure:40312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:40415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -40437,7 +40540,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageWBMP in -lgd""... $ac_c" 1>&6
-echo "configure:40441: checking for gdImageWBMP in -lgd" >&5
+echo "configure:40544: checking for gdImageWBMP in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageWBMP | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40445,7 +40548,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40449 "configure"
+#line 40552 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40456,7 +40559,7 @@ int main() {
 gdImageWBMP()
 ; return 0; }
 EOF
-if { (eval echo configure:40460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:40563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -40585,7 +40688,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreateFromJpeg in -lgd""... $ac_c" 1>&6
-echo "configure:40589: checking for gdImageCreateFromJpeg in -lgd" >&5
+echo "configure:40692: checking for gdImageCreateFromJpeg in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreateFromJpeg | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40593,7 +40696,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40597 "configure"
+#line 40700 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40604,7 +40707,7 @@ int main() {
 gdImageCreateFromJpeg()
 ; return 0; }
 EOF
-if { (eval echo configure:40608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:40711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -40733,7 +40836,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreateFromXpm in -lgd""... $ac_c" 1>&6
-echo "configure:40737: checking for gdImageCreateFromXpm in -lgd" >&5
+echo "configure:40840: checking for gdImageCreateFromXpm in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreateFromXpm | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40741,7 +40844,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40745 "configure"
+#line 40848 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40752,7 +40855,7 @@ int main() {
 gdImageCreateFromXpm()
 ; return 0; }
 EOF
-if { (eval echo configure:40756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:40859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -40881,7 +40984,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreateFromGd2 in -lgd""... $ac_c" 1>&6
-echo "configure:40885: checking for gdImageCreateFromGd2 in -lgd" >&5
+echo "configure:40988: checking for gdImageCreateFromGd2 in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreateFromGd2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -40889,7 +40992,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 40893 "configure"
+#line 40996 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -40900,7 +41003,7 @@ int main() {
 gdImageCreateFromGd2()
 ; return 0; }
 EOF
-if { (eval echo configure:40904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41029,7 +41132,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreateTrueColor in -lgd""... $ac_c" 1>&6
-echo "configure:41033: checking for gdImageCreateTrueColor in -lgd" >&5
+echo "configure:41136: checking for gdImageCreateTrueColor in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreateTrueColor | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41037,7 +41140,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41041 "configure"
+#line 41144 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41048,7 +41151,7 @@ int main() {
 gdImageCreateTrueColor()
 ; return 0; }
 EOF
-if { (eval echo configure:41052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41177,7 +41280,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageSetTile in -lgd""... $ac_c" 1>&6
-echo "configure:41181: checking for gdImageSetTile in -lgd" >&5
+echo "configure:41284: checking for gdImageSetTile in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageSetTile | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41185,7 +41288,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41189 "configure"
+#line 41292 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41196,7 +41299,7 @@ int main() {
 gdImageSetTile()
 ; return 0; }
 EOF
-if { (eval echo configure:41200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41325,7 +41428,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageEllipse in -lgd""... $ac_c" 1>&6
-echo "configure:41329: checking for gdImageEllipse in -lgd" >&5
+echo "configure:41432: checking for gdImageEllipse in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageEllipse | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41333,7 +41436,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41337 "configure"
+#line 41440 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41344,7 +41447,7 @@ int main() {
 gdImageEllipse()
 ; return 0; }
 EOF
-if { (eval echo configure:41348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41473,7 +41576,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageSetBrush in -lgd""... $ac_c" 1>&6
-echo "configure:41477: checking for gdImageSetBrush in -lgd" >&5
+echo "configure:41580: checking for gdImageSetBrush in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageSetBrush | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41481,7 +41584,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41485 "configure"
+#line 41588 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41492,7 +41595,7 @@ int main() {
 gdImageSetBrush()
 ; return 0; }
 EOF
-if { (eval echo configure:41496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41621,7 +41724,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageStringTTF in -lgd""... $ac_c" 1>&6
-echo "configure:41625: checking for gdImageStringTTF in -lgd" >&5
+echo "configure:41728: checking for gdImageStringTTF in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageStringTTF | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41629,7 +41732,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41633 "configure"
+#line 41736 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41640,7 +41743,7 @@ int main() {
 gdImageStringTTF()
 ; return 0; }
 EOF
-if { (eval echo configure:41644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41769,7 +41872,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageStringFT in -lgd""... $ac_c" 1>&6
-echo "configure:41773: checking for gdImageStringFT in -lgd" >&5
+echo "configure:41876: checking for gdImageStringFT in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageStringFT | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41777,7 +41880,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41781 "configure"
+#line 41884 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41788,7 +41891,7 @@ int main() {
 gdImageStringFT()
 ; return 0; }
 EOF
-if { (eval echo configure:41792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:41895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -41917,7 +42020,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageStringFTEx in -lgd""... $ac_c" 1>&6
-echo "configure:41921: checking for gdImageStringFTEx in -lgd" >&5
+echo "configure:42024: checking for gdImageStringFTEx in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageStringFTEx | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -41925,7 +42028,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 41929 "configure"
+#line 42032 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -41936,7 +42039,7 @@ int main() {
 gdImageStringFTEx()
 ; return 0; }
 EOF
-if { (eval echo configure:41940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42065,7 +42168,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageColorClosestHWB in -lgd""... $ac_c" 1>&6
-echo "configure:42069: checking for gdImageColorClosestHWB in -lgd" >&5
+echo "configure:42172: checking for gdImageColorClosestHWB in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageColorClosestHWB | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42073,7 +42176,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42077 "configure"
+#line 42180 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42084,7 +42187,7 @@ int main() {
 gdImageColorClosestHWB()
 ; return 0; }
 EOF
-if { (eval echo configure:42088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42213,7 +42316,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageColorResolve in -lgd""... $ac_c" 1>&6
-echo "configure:42217: checking for gdImageColorResolve in -lgd" >&5
+echo "configure:42320: checking for gdImageColorResolve in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageColorResolve | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42221,7 +42324,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42225 "configure"
+#line 42328 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42232,7 +42335,7 @@ int main() {
 gdImageColorResolve()
 ; return 0; }
 EOF
-if { (eval echo configure:42236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42361,7 +42464,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageGifCtx in -lgd""... $ac_c" 1>&6
-echo "configure:42365: checking for gdImageGifCtx in -lgd" >&5
+echo "configure:42468: checking for gdImageGifCtx in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageGifCtx | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42369,7 +42472,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42373 "configure"
+#line 42476 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42380,7 +42483,7 @@ int main() {
 gdImageGifCtx()
 ; return 0; }
 EOF
-if { (eval echo configure:42384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42509,7 +42612,7 @@ fi
   done
 
   echo $ac_n "checking for gdCacheCreate in -lgd""... $ac_c" 1>&6
-echo "configure:42513: checking for gdCacheCreate in -lgd" >&5
+echo "configure:42616: checking for gdCacheCreate in -lgd" >&5
 ac_lib_var=`echo gd'_'gdCacheCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42517,7 +42620,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42521 "configure"
+#line 42624 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42528,7 +42631,7 @@ int main() {
 gdCacheCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:42532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42657,7 +42760,7 @@ fi
   done
 
   echo $ac_n "checking for gdFontCacheShutdown in -lgd""... $ac_c" 1>&6
-echo "configure:42661: checking for gdFontCacheShutdown in -lgd" >&5
+echo "configure:42764: checking for gdFontCacheShutdown in -lgd" >&5
 ac_lib_var=`echo gd'_'gdFontCacheShutdown | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42665,7 +42768,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42669 "configure"
+#line 42772 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42676,7 +42779,7 @@ int main() {
 gdFontCacheShutdown()
 ; return 0; }
 EOF
-if { (eval echo configure:42680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42805,7 +42908,7 @@ fi
   done
 
   echo $ac_n "checking for gdFreeFontCache in -lgd""... $ac_c" 1>&6
-echo "configure:42809: checking for gdFreeFontCache in -lgd" >&5
+echo "configure:42912: checking for gdFreeFontCache in -lgd" >&5
 ac_lib_var=`echo gd'_'gdFreeFontCache | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42813,7 +42916,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42817 "configure"
+#line 42920 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42824,7 +42927,7 @@ int main() {
 gdFreeFontCache()
 ; return 0; }
 EOF
-if { (eval echo configure:42828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:42931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -42953,7 +43056,7 @@ fi
   done
 
   echo $ac_n "checking for gdFontCacheMutexSetup in -lgd""... $ac_c" 1>&6
-echo "configure:42957: checking for gdFontCacheMutexSetup in -lgd" >&5
+echo "configure:43060: checking for gdFontCacheMutexSetup in -lgd" >&5
 ac_lib_var=`echo gd'_'gdFontCacheMutexSetup | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -42961,7 +43064,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 42965 "configure"
+#line 43068 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -42972,7 +43075,7 @@ int main() {
 gdFontCacheMutexSetup()
 ; return 0; }
 EOF
-if { (eval echo configure:42976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:43079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -43101,7 +43204,7 @@ fi
   done
 
   echo $ac_n "checking for gdNewDynamicCtxEx in -lgd""... $ac_c" 1>&6
-echo "configure:43105: checking for gdNewDynamicCtxEx in -lgd" >&5
+echo "configure:43208: checking for gdNewDynamicCtxEx in -lgd" >&5
 ac_lib_var=`echo gd'_'gdNewDynamicCtxEx | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -43109,7 +43212,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 43113 "configure"
+#line 43216 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -43120,7 +43223,7 @@ int main() {
 gdNewDynamicCtxEx()
 ; return 0; }
 EOF
-if { (eval echo configure:43124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:43227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -43175,7 +43278,7 @@ fi
         old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS=-I$GD_INCLUDE
   cat > conftest.$ac_ext <<EOF
-#line 43179 "configure"
+#line 43282 "configure"
 #include "confdefs.h"
 
 #include <gd.h>
@@ -43189,7 +43292,7 @@ ctx->gd_free = 1;
   
 ; return 0; }
 EOF
-if { (eval echo configure:43193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:43296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     cat >> confdefs.h <<\EOF
@@ -43392,8 +43495,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_GD_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/gd in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -43436,9 +43540,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC gd"
-    else
-      
+        EXT_STATIC="$EXT_STATIC gd"
+        ;;
+      *)
+        
   
   case ext/gd in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -43481,7 +43586,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC gd"
   fi
   
@@ -43516,7 +43622,7 @@ EOF
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 43520 "configure"
+#line 43626 "configure"
 #include "confdefs.h"
 
     char foobar () {}
@@ -43527,7 +43633,7 @@ else
     }
   
 EOF
-if { (eval echo configure:43531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:43637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -43679,7 +43785,7 @@ fi
   done
 
   echo $ac_n "checking for gdImageCreate in -lgd""... $ac_c" 1>&6
-echo "configure:43683: checking for gdImageCreate in -lgd" >&5
+echo "configure:43789: checking for gdImageCreate in -lgd" >&5
 ac_lib_var=`echo gd'_'gdImageCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -43687,7 +43793,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 43691 "configure"
+#line 43797 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -43698,7 +43804,7 @@ int main() {
 gdImageCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:43702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:43808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -43763,7 +43869,7 @@ fi
 php_with_gettext=no
 
 echo $ac_n "checking for GNU gettext support""... $ac_c" 1>&6
-echo "configure:43767: checking for GNU gettext support" >&5
+echo "configure:43873: checking for GNU gettext support" >&5
 # Check whether --with-gettext or --without-gettext was given.
 if test "${with_gettext+set}" = set; then
   withval="$with_gettext"
@@ -43821,7 +43927,7 @@ if test "$PHP_GETTEXT" != "no"; then
   O_LDFLAGS=$LDFLAGS
   LDFLAGS="$LDFLAGS -L$GETTEXT_LIBDIR"
   echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:43825: checking for bindtextdomain in -lintl" >&5
+echo "configure:43931: checking for bindtextdomain in -lintl" >&5
 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -43829,7 +43935,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 43833 "configure"
+#line 43939 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -43840,7 +43946,7 @@ int main() {
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:43844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:43950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -43862,7 +43968,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for bindtextdomain in -lc""... $ac_c" 1>&6
-echo "configure:43866: checking for bindtextdomain in -lc" >&5
+echo "configure:43972: checking for bindtextdomain in -lc" >&5
 ac_lib_var=`echo c'_'bindtextdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -43870,7 +43976,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 43874 "configure"
+#line 43980 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -43881,7 +43987,7 @@ int main() {
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:43885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:43991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -44100,8 +44206,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_GETTEXT_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/gettext in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -44144,9 +44251,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC gettext"
-    else
-      
+        EXT_STATIC="$EXT_STATIC gettext"
+        ;;
+      *)
+        
   
   case ext/gettext in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -44189,7 +44297,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC gettext"
   fi
   
@@ -44342,7 +44451,7 @@ EOF
 
 
   echo $ac_n "checking for ngettext in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6
-echo "configure:44346: checking for ngettext in -l$GETTEXT_CHECK_IN_LIB" >&5
+echo "configure:44455: checking for ngettext in -l$GETTEXT_CHECK_IN_LIB" >&5
 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'ngettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -44350,7 +44459,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$GETTEXT_CHECK_IN_LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 44354 "configure"
+#line 44463 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -44361,7 +44470,7 @@ int main() {
 ngettext()
 ; return 0; }
 EOF
-if { (eval echo configure:44365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:44474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -44385,7 +44494,7 @@ else
 fi
 
   echo $ac_n "checking for dngettext in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6
-echo "configure:44389: checking for dngettext in -l$GETTEXT_CHECK_IN_LIB" >&5
+echo "configure:44498: checking for dngettext in -l$GETTEXT_CHECK_IN_LIB" >&5
 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'dngettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -44393,7 +44502,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$GETTEXT_CHECK_IN_LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 44397 "configure"
+#line 44506 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -44404,7 +44513,7 @@ int main() {
 dngettext()
 ; return 0; }
 EOF
-if { (eval echo configure:44408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:44517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -44428,7 +44537,7 @@ else
 fi
 
   echo $ac_n "checking for dcngettext in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6
-echo "configure:44432: checking for dcngettext in -l$GETTEXT_CHECK_IN_LIB" >&5
+echo "configure:44541: checking for dcngettext in -l$GETTEXT_CHECK_IN_LIB" >&5
 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'dcngettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -44436,7 +44545,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$GETTEXT_CHECK_IN_LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 44440 "configure"
+#line 44549 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -44447,7 +44556,7 @@ int main() {
 dcngettext()
 ; return 0; }
 EOF
-if { (eval echo configure:44451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:44560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -44471,7 +44580,7 @@ else
 fi
 
   echo $ac_n "checking for bind_textdomain_codeset in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6
-echo "configure:44475: checking for bind_textdomain_codeset in -l$GETTEXT_CHECK_IN_LIB" >&5
+echo "configure:44584: checking for bind_textdomain_codeset in -l$GETTEXT_CHECK_IN_LIB" >&5
 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'bind_textdomain_codeset | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -44479,7 +44588,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$GETTEXT_CHECK_IN_LIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 44483 "configure"
+#line 44592 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -44490,7 +44599,7 @@ int main() {
 bind_textdomain_codeset()
 ; return 0; }
 EOF
-if { (eval echo configure:44494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:44603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -44521,7 +44630,7 @@ fi
 php_with_gmp=no
 
 echo $ac_n "checking for GNU MP support""... $ac_c" 1>&6
-echo "configure:44525: checking for GNU MP support" >&5
+echo "configure:44634: checking for GNU MP support" >&5
 # Check whether --with-gmp or --without-gmp was given.
 if test "${with_gmp+set}" = set; then
   withval="$with_gmp"
@@ -44672,7 +44781,7 @@ if test "$PHP_GMP" != "no"; then
   done
 
   echo $ac_n "checking for __gmp_randinit_lc_2exp_size in -lgmp""... $ac_c" 1>&6
-echo "configure:44676: checking for __gmp_randinit_lc_2exp_size in -lgmp" >&5
+echo "configure:44785: checking for __gmp_randinit_lc_2exp_size in -lgmp" >&5
 ac_lib_var=`echo gmp'_'__gmp_randinit_lc_2exp_size | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -44680,7 +44789,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgmp  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 44684 "configure"
+#line 44793 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -44691,7 +44800,7 @@ int main() {
 __gmp_randinit_lc_2exp_size()
 ; return 0; }
 EOF
-if { (eval echo configure:44695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:44804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -44816,7 +44925,7 @@ else
   done
 
   echo $ac_n "checking for gmp_randinit_lc_2exp_size in -lgmp""... $ac_c" 1>&6
-echo "configure:44820: checking for gmp_randinit_lc_2exp_size in -lgmp" >&5
+echo "configure:44929: checking for gmp_randinit_lc_2exp_size in -lgmp" >&5
 ac_lib_var=`echo gmp'_'gmp_randinit_lc_2exp_size | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -44824,7 +44933,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgmp  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 44828 "configure"
+#line 44937 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -44835,7 +44944,7 @@ int main() {
 gmp_randinit_lc_2exp_size()
 ; return 0; }
 EOF
-if { (eval echo configure:44839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:44948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -45185,8 +45294,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_GMP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/gmp in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -45229,9 +45339,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC gmp"
-    else
-      
+        EXT_STATIC="$EXT_STATIC gmp"
+        ;;
+      *)
+        
   
   case ext/gmp in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -45274,7 +45385,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC gmp"
   fi
   
@@ -45304,7 +45416,7 @@ fi
 php_enable_hash=yes
 
 echo $ac_n "checking whether to enable hash support""... $ac_c" 1>&6
-echo "configure:45308: checking whether to enable hash support" >&5
+echo "configure:45420: checking whether to enable hash support" >&5
 # Check whether --enable-hash or --disable-hash was given.
 if test "${enable_hash+set}" = set; then
   enableval="$enable_hash"
@@ -45354,7 +45466,7 @@ EOF
 
 
   echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:45358: checking whether byte ordering is bigendian" >&5
+echo "configure:45470: checking whether byte ordering is bigendian" >&5
 if eval "test \"`echo '$''{'ac_cv_c_bigendian_php'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -45364,7 +45476,7 @@ else
   ac_cv_c_bigendian_php=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 45368 "configure"
+#line 45480 "configure"
 #include "confdefs.h"
 
 int main(void)
@@ -45380,7 +45492,7 @@ int main(void)
 }
   
 EOF
-if { (eval echo configure:45384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:45496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_bigendian_php=yes
 else
@@ -45405,7 +45517,7 @@ EOF
 
 
   echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:45409: checking size of short" >&5
+echo "configure:45521: checking size of short" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -45413,7 +45525,7 @@ else
   ac_cv_sizeof_short=2
 else
   cat > conftest.$ac_ext <<EOF
-#line 45417 "configure"
+#line 45529 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -45424,7 +45536,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:45428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:45540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -45444,7 +45556,7 @@ EOF
 
 
   echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:45448: checking size of int" >&5
+echo "configure:45560: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -45452,7 +45564,7 @@ else
   ac_cv_sizeof_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 45456 "configure"
+#line 45568 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -45463,7 +45575,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:45467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:45579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -45483,7 +45595,7 @@ EOF
 
 
   echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:45487: checking size of long" >&5
+echo "configure:45599: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -45491,7 +45603,7 @@ else
   ac_cv_sizeof_long=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 45495 "configure"
+#line 45607 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -45502,7 +45614,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:45506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:45618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -45522,7 +45634,7 @@ EOF
 
 
   echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:45526: checking size of long long" >&5
+echo "configure:45638: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -45530,7 +45642,7 @@ else
   ac_cv_sizeof_long_long=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 45534 "configure"
+#line 45646 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -45541,7 +45653,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:45545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:45657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -45752,8 +45864,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_HASH_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/hash in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -45796,9 +45909,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC hash"
-    else
-      
+        EXT_STATIC="$EXT_STATIC hash"
+        ;;
+      *)
+        
   
   case ext/hash in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -45841,7 +45955,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC hash"
   fi
   
@@ -45886,7 +46001,7 @@ fi
 php_with_iconv=yes
 
 echo $ac_n "checking for iconv support""... $ac_c" 1>&6
-echo "configure:45890: checking for iconv support" >&5
+echo "configure:46005: checking for iconv support" >&5
 # Check whether --with-iconv or --without-iconv was given.
 if test "${with_iconv+set}" = set; then
   withval="$with_iconv"
@@ -45949,12 +46064,12 @@ if test "$PHP_ICONV" != "no"; then
 
         if test "$PHP_ICONV" = "yes"; then
     echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:45953: checking for iconv" >&5
+echo "configure:46068: checking for iconv" >&5
 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 45958 "configure"
+#line 46073 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char iconv(); below.  */
@@ -45977,7 +46092,7 @@ iconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:45981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:46096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_iconv=yes"
 else
@@ -45998,12 +46113,12 @@ else
   echo "$ac_t""no" 1>&6
 
       echo $ac_n "checking for libiconv""... $ac_c" 1>&6
-echo "configure:46002: checking for libiconv" >&5
+echo "configure:46117: checking for libiconv" >&5
 if eval "test \"`echo '$''{'ac_cv_func_libiconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 46007 "configure"
+#line 46122 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char libiconv(); below.  */
@@ -46026,7 +46141,7 @@ libiconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:46030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:46145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_libiconv=yes"
 else
@@ -46182,7 +46297,7 @@ EOF
   done
 
   echo $ac_n "checking for libiconv in -l$iconv_lib_name""... $ac_c" 1>&6
-echo "configure:46186: checking for libiconv in -l$iconv_lib_name" >&5
+echo "configure:46301: checking for libiconv in -l$iconv_lib_name" >&5
 ac_lib_var=`echo $iconv_lib_name'_'libiconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -46190,7 +46305,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$iconv_lib_name  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 46194 "configure"
+#line 46309 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -46201,7 +46316,7 @@ int main() {
 libiconv()
 ; return 0; }
 EOF
-if { (eval echo configure:46205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:46320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -46335,7 +46450,7 @@ else
   done
 
   echo $ac_n "checking for iconv in -l$iconv_lib_name""... $ac_c" 1>&6
-echo "configure:46339: checking for iconv in -l$iconv_lib_name" >&5
+echo "configure:46454: checking for iconv in -l$iconv_lib_name" >&5
 ac_lib_var=`echo $iconv_lib_name'_'iconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -46343,7 +46458,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$iconv_lib_name  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 46347 "configure"
+#line 46462 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -46354,7 +46469,7 @@ int main() {
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:46358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:46473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -46565,16 +46680,16 @@ else
     fi 
 
     echo $ac_n "checking if iconv is glibc's""... $ac_c" 1>&6
-echo "configure:46569: checking if iconv is glibc's" >&5
+echo "configure:46684: checking if iconv is glibc's" >&5
     cat > conftest.$ac_ext <<EOF
-#line 46571 "configure"
+#line 46686 "configure"
 #include "confdefs.h"
 #include <gnu/libc-version.h>
 int main() {
 gnu_get_libc_version();
 ; return 0; }
 EOF
-if { (eval echo configure:46578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:46693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -46592,7 +46707,7 @@ rm -f conftest*
 
     if test -z "$iconv_impl_name"; then
       echo $ac_n "checking if using GNU libiconv""... $ac_c" 1>&6
-echo "configure:46596: checking if using GNU libiconv" >&5
+echo "configure:46711: checking if using GNU libiconv" >&5
       php_iconv_old_ld="$LDFLAGS"
       LDFLAGS="-liconv $LDFLAGS"
       if test "$cross_compiling" = yes; then
@@ -46602,7 +46717,7 @@ echo "configure:46596: checking if using GNU libiconv" >&5
       
 else
   cat > conftest.$ac_ext <<EOF
-#line 46606 "configure"
+#line 46721 "configure"
 #include "confdefs.h"
 
 #include <$PHP_ICONV_H_PATH>
@@ -46612,7 +46727,7 @@ int main() {
 }
       
 EOF
-if { (eval echo configure:46616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:46731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
         echo "$ac_t""yes" 1>&6
@@ -46634,16 +46749,16 @@ fi
 
     if test -z "$iconv_impl_name"; then
       echo $ac_n "checking if iconv is Konstantin Chuguev's""... $ac_c" 1>&6
-echo "configure:46638: checking if iconv is Konstantin Chuguev's" >&5
+echo "configure:46753: checking if iconv is Konstantin Chuguev's" >&5
       cat > conftest.$ac_ext <<EOF
-#line 46640 "configure"
+#line 46755 "configure"
 #include "confdefs.h"
 #include <iconv.h>
 int main() {
 iconv_ccs_init(NULL, NULL);
 ; return 0; }
 EOF
-if { (eval echo configure:46647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:46762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
         echo "$ac_t""yes" 1>&6
@@ -46811,7 +46926,7 @@ EOF
     esac
 
     echo $ac_n "checking if iconv supports errno""... $ac_c" 1>&6
-echo "configure:46815: checking if iconv supports errno" >&5
+echo "configure:46930: checking if iconv supports errno" >&5
     if test "$cross_compiling" = yes; then
   
       echo "$ac_t""no" 1>&6
@@ -46825,7 +46940,7 @@ EOF
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 46829 "configure"
+#line 46944 "configure"
 #include "confdefs.h"
 
 #include <$PHP_ICONV_H_PATH>
@@ -46846,7 +46961,7 @@ int main() {
 }
     
 EOF
-if { (eval echo configure:46850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:46965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
       echo "$ac_t""yes" 1>&6
@@ -46878,9 +46993,9 @@ fi
 
 
     echo $ac_n "checking if your cpp allows macro usage in include lines""... $ac_c" 1>&6
-echo "configure:46882: checking if your cpp allows macro usage in include lines" >&5
+echo "configure:46997: checking if your cpp allows macro usage in include lines" >&5
     cat > conftest.$ac_ext <<EOF
-#line 46884 "configure"
+#line 46999 "configure"
 #include "confdefs.h"
 
 #define FOO <$PHP_ICONV_H_PATH>
@@ -46890,7 +47005,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:46894: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:47009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -47096,8 +47211,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_ICONV_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/iconv in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -47140,9 +47256,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC iconv"
-    else
-      
+        EXT_STATIC="$EXT_STATIC iconv"
+        ;;
+      *)
+        
   
   case ext/iconv in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -47185,7 +47302,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC iconv"
   fi
   
@@ -47243,7 +47361,7 @@ fi
 php_with_imap=no
 
 echo $ac_n "checking for IMAP support""... $ac_c" 1>&6
-echo "configure:47247: checking for IMAP support" >&5
+echo "configure:47365: checking for IMAP support" >&5
 # Check whether --with-imap or --without-imap was given.
 if test "${with_imap+set}" = set; then
   withval="$with_imap"
@@ -47290,7 +47408,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_kerberos=no
 
 echo $ac_n "checking for IMAP Kerberos support""... $ac_c" 1>&6
-echo "configure:47294: checking for IMAP Kerberos support" >&5
+echo "configure:47412: checking for IMAP Kerberos support" >&5
 # Check whether --with-kerberos or --without-kerberos was given.
 if test "${with_kerberos+set}" = set; then
   withval="$with_kerberos"
@@ -47316,7 +47434,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_imap_ssl=no
 
 echo $ac_n "checking for IMAP SSL support""... $ac_c" 1>&6
-echo "configure:47320: checking for IMAP SSL support" >&5
+echo "configure:47438: checking for IMAP SSL support" >&5
 # Check whether --with-imap-ssl or --without-imap-ssl was given.
 if test "${with_imap_ssl+set}" = set; then
   withval="$with_imap_ssl"
@@ -47527,8 +47645,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_IMAP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/imap in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -47571,9 +47690,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC imap"
-    else
-      
+        EXT_STATIC="$EXT_STATIC imap"
+        ;;
+      *)
+        
   
   case ext/imap in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -47616,7 +47736,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC imap"
   fi
   
@@ -47720,7 +47841,7 @@ EOF
     done
 
         cat > conftest.$ac_ext <<EOF
-#line 47724 "configure"
+#line 47845 "configure"
 #include "confdefs.h"
 #include <$IMAP_INC_DIR/mail.h>
 EOF
@@ -47740,12 +47861,12 @@ rm -f conftest*
         old_CFLAGS=$CFLAGS
     CFLAGS="-I$IMAP_INC_DIR"
     echo $ac_n "checking for utf8_mime2text signature""... $ac_c" 1>&6
-echo "configure:47744: checking for utf8_mime2text signature" >&5
+echo "configure:47865: checking for utf8_mime2text signature" >&5
 if eval "test \"`echo '$''{'ac_cv_utf8_mime2text'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 47749 "configure"
+#line 47870 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -47758,7 +47879,7 @@ int main() {
       
 ; return 0; }
 EOF
-if { (eval echo configure:47762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:47883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
         ac_cv_utf8_mime2text=old
@@ -47787,12 +47908,12 @@ EOF
     old_CFLAGS=$CFLAGS
     CFLAGS="-I$IMAP_INC_DIR"
     echo $ac_n "checking for U8T_CANONICAL""... $ac_c" 1>&6
-echo "configure:47791: checking for U8T_CANONICAL" >&5
+echo "configure:47912: checking for U8T_CANONICAL" >&5
 if eval "test \"`echo '$''{'ac_cv_u8t_canonical'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 47796 "configure"
+#line 47917 "configure"
 #include "confdefs.h"
 
 #include <c-client.h>
@@ -47803,7 +47924,7 @@ int main() {
       
 ; return 0; }
 EOF
-if { (eval echo configure:47807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:47928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
          ac_cv_u8t_canonical=yes
@@ -47833,7 +47954,7 @@ echo "$ac_t""$ac_cv_u8t_canonical" 1>&6
         old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=-I$IMAP_INC_DIR
     cat > conftest.$ac_ext <<EOF
-#line 47837 "configure"
+#line 47958 "configure"
 #include "confdefs.h"
 
 #include "imap4r1.h"
@@ -47952,7 +48073,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for pam_start in -lpam""... $ac_c" 1>&6
-echo "configure:47956: checking for pam_start in -lpam" >&5
+echo "configure:48077: checking for pam_start in -lpam" >&5
 ac_lib_var=`echo pam'_'pam_start | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -47960,7 +48081,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpam  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 47964 "configure"
+#line 48085 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -47971,7 +48092,7 @@ int main() {
 pam_start()
 ; return 0; }
 EOF
-if { (eval echo configure:47975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:48096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -48126,7 +48247,7 @@ fi
   done
 
   echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:48130: checking for crypt in -lcrypt" >&5
+echo "configure:48251: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -48134,7 +48255,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 48138 "configure"
+#line 48259 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -48145,7 +48266,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:48149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:48270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -48349,7 +48470,7 @@ fi
     # Extract the first word of "krb5-config", so it can be a program name with args.
 set dummy krb5-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:48353: checking for $ac_word" >&5
+echo "configure:48474: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_KRB5_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -48718,7 +48839,7 @@ else
 
   else
     cat > conftest.$ac_ext <<EOF
-#line 48722 "configure"
+#line 48843 "configure"
 #include "confdefs.h"
 #include <$IMAP_INC_DIR/linkage.h>
 EOF
@@ -48759,7 +48880,7 @@ rm -f conftest*
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:48763: checking for $ac_word" >&5
+echo "configure:48884: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -48964,9 +49085,9 @@ fi
     old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=-I$OPENSSL_INCDIR
     echo $ac_n "checking for OpenSSL version""... $ac_c" 1>&6
-echo "configure:48968: checking for OpenSSL version" >&5
+echo "configure:49089: checking for OpenSSL version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 48970 "configure"
+#line 49091 "configure"
 #include "confdefs.h"
 
 #include <openssl/opensslv.h>
@@ -49121,7 +49242,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for CRYPTO_free in -lcrypto""... $ac_c" 1>&6
-echo "configure:49125: checking for CRYPTO_free in -lcrypto" >&5
+echo "configure:49246: checking for CRYPTO_free in -lcrypto" >&5
 ac_lib_var=`echo crypto'_'CRYPTO_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -49129,7 +49250,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypto  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 49133 "configure"
+#line 49254 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -49140,7 +49261,7 @@ int main() {
 CRYPTO_free()
 ; return 0; }
 EOF
-if { (eval echo configure:49144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:49265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -49297,7 +49418,7 @@ fi
   done
 
   echo $ac_n "checking for SSL_CTX_set_ssl_version in -lssl""... $ac_c" 1>&6
-echo "configure:49301: checking for SSL_CTX_set_ssl_version in -lssl" >&5
+echo "configure:49422: checking for SSL_CTX_set_ssl_version in -lssl" >&5
 ac_lib_var=`echo ssl'_'SSL_CTX_set_ssl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -49305,7 +49426,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lssl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 49309 "configure"
+#line 49430 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -49316,7 +49437,7 @@ int main() {
 SSL_CTX_set_ssl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:49320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:49441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -49435,7 +49556,7 @@ else
 
   elif test -f "$IMAP_INC_DIR/linkage.c"; then
     cat > conftest.$ac_ext <<EOF
-#line 49439 "configure"
+#line 49560 "configure"
 #include "confdefs.h"
 #include <$IMAP_INC_DIR/linkage.c>
 EOF
@@ -49466,7 +49587,7 @@ rm -f conftest*
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 49470 "configure"
+#line 49591 "configure"
 #include "confdefs.h"
 
     
@@ -49493,7 +49614,7 @@ else
     }
   
 EOF
-if { (eval echo configure:49497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:49618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -49520,7 +49641,7 @@ fi
 
 
     echo $ac_n "checking whether build with IMAP works""... $ac_c" 1>&6
-echo "configure:49524: checking whether build with IMAP works" >&5
+echo "configure:49645: checking whether build with IMAP works" >&5
     
   
   old_LIBS=$LIBS
@@ -49531,7 +49652,7 @@ echo "configure:49524: checking whether build with IMAP works" >&5
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 49535 "configure"
+#line 49656 "configure"
 #include "confdefs.h"
 
     
@@ -49558,7 +49679,7 @@ else
     }
   
 EOF
-if { (eval echo configure:49562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:49683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -49585,7 +49706,7 @@ fi
 
 
     echo $ac_n "checking whether rfc822_output_address_list function present""... $ac_c" 1>&6
-echo "configure:49589: checking whether rfc822_output_address_list function present" >&5
+echo "configure:49710: checking whether rfc822_output_address_list function present" >&5
     
   old_LIBS=$LIBS
   LIBS="
@@ -49597,7 +49718,7 @@ echo "configure:49589: checking whether rfc822_output_address_list function pres
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 49601 "configure"
+#line 49722 "configure"
 #include "confdefs.h"
 
     
@@ -49627,7 +49748,7 @@ else
     }
   
 EOF
-if { (eval echo configure:49631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:49752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -49662,7 +49783,7 @@ fi
 php_with_interbase=no
 
 echo $ac_n "checking for InterBase support""... $ac_c" 1>&6
-echo "configure:49666: checking for InterBase support" >&5
+echo "configure:49787: checking for InterBase support" >&5
 # Check whether --with-interbase or --without-interbase was given.
 if test "${with_interbase+set}" = set; then
   withval="$with_interbase"
@@ -49812,7 +49933,7 @@ if test "$PHP_INTERBASE" != "no"; then
   done
 
   echo $ac_n "checking for isc_detach_database in -lfbclient""... $ac_c" 1>&6
-echo "configure:49816: checking for isc_detach_database in -lfbclient" >&5
+echo "configure:49937: checking for isc_detach_database in -lfbclient" >&5
 ac_lib_var=`echo fbclient'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -49820,7 +49941,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lfbclient  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 49824 "configure"
+#line 49945 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -49831,7 +49952,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:49835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:49956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -49958,7 +50079,7 @@ else
   done
 
   echo $ac_n "checking for isc_detach_database in -lgds""... $ac_c" 1>&6
-echo "configure:49962: checking for isc_detach_database in -lgds" >&5
+echo "configure:50083: checking for isc_detach_database in -lgds" >&5
 ac_lib_var=`echo gds'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -49966,7 +50087,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgds  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 49970 "configure"
+#line 50091 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -49977,7 +50098,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:49981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:50102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -50104,7 +50225,7 @@ else
   done
 
   echo $ac_n "checking for isc_detach_database in -lib_util""... $ac_c" 1>&6
-echo "configure:50108: checking for isc_detach_database in -lib_util" >&5
+echo "configure:50229: checking for isc_detach_database in -lib_util" >&5
 ac_lib_var=`echo ib_util'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -50112,7 +50233,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lib_util  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 50116 "configure"
+#line 50237 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -50123,7 +50244,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:50127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:50248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -50482,8 +50603,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_INTERBASE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/interbase in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -50526,9 +50648,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC interbase"
-    else
-      
+        EXT_STATIC="$EXT_STATIC interbase"
+        ;;
+      *)
+        
   
   case ext/interbase in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -50571,7 +50694,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC interbase"
   fi
   
@@ -50597,7 +50721,7 @@ fi
 php_enable_json=yes
 
 echo $ac_n "checking whether to enable JavaScript Object Serialization support""... $ac_c" 1>&6
-echo "configure:50601: checking whether to enable JavaScript Object Serialization support" >&5
+echo "configure:50725: checking whether to enable JavaScript Object Serialization support" >&5
 # Check whether --enable-json or --disable-json was given.
 if test "${enable_json+set}" = set; then
   enableval="$enable_json"
@@ -50646,12 +50770,12 @@ if test "$PHP_JSON" != "no"; then
 EOF
 
   echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:50650: checking for ANSI C header files" >&5
+echo "configure:50774: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 50655 "configure"
+#line 50779 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -50659,7 +50783,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:50663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:50787: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -50676,7 +50800,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 50680 "configure"
+#line 50804 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -50694,7 +50818,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 50698 "configure"
+#line 50822 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -50715,7 +50839,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 50719 "configure"
+#line 50843 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -50726,7 +50850,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:50730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:50854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -50934,8 +51058,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_JSON_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/json in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -50978,9 +51103,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC json"
-    else
-      
+        EXT_STATIC="$EXT_STATIC json"
+        ;;
+      *)
+        
   
   case ext/json in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -51023,7 +51149,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC json"
   fi
   
@@ -51053,7 +51180,7 @@ fi
 php_with_ldap=no
 
 echo $ac_n "checking for LDAP support""... $ac_c" 1>&6
-echo "configure:51057: checking for LDAP support" >&5
+echo "configure:51184: checking for LDAP support" >&5
 # Check whether --with-ldap or --without-ldap was given.
 if test "${with_ldap+set}" = set; then
   withval="$with_ldap"
@@ -51100,7 +51227,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_ldap_sasl=no
 
 echo $ac_n "checking for LDAP Cyrus SASL support""... $ac_c" 1>&6
-echo "configure:51104: checking for LDAP Cyrus SASL support" >&5
+echo "configure:51231: checking for LDAP Cyrus SASL support" >&5
 # Check whether --with-ldap-sasl or --without-ldap-sasl was given.
 if test "${with_ldap_sasl+set}" = set; then
   withval="$with_ldap_sasl"
@@ -51308,8 +51435,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_LDAP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/ldap in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -51352,9 +51480,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC ldap"
-    else
-      
+        EXT_STATIC="$EXT_STATIC ldap"
+        ;;
+      *)
+        
   
   case ext/ldap in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -51397,7 +51526,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC ldap"
   fi
   
@@ -53442,19 +53572,19 @@ EOF
   LIBS="$LIBS $LDAP_SHARED_LIBADD"
 
     echo $ac_n "checking for 3 arg ldap_set_rebind_proc""... $ac_c" 1>&6
-echo "configure:53446: checking for 3 arg ldap_set_rebind_proc" >&5
+echo "configure:53576: checking for 3 arg ldap_set_rebind_proc" >&5
 if eval "test \"`echo '$''{'ac_cv_3arg_setrebindproc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 53451 "configure"
+#line 53581 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 int main() {
 ldap_set_rebind_proc(0,0,0)
 ; return 0; }
 EOF
-if { (eval echo configure:53458: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:53588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_3arg_setrebindproc=yes
 else
@@ -53477,12 +53607,12 @@ EOF
       for ac_func in ldap_parse_result ldap_parse_reference ldap_start_tls_s
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:53481: checking for $ac_func" >&5
+echo "configure:53611: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 53486 "configure"
+#line 53616 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -53505,7 +53635,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:53509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:53639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -53667,7 +53797,7 @@ EOF
   done
 
   echo $ac_n "checking for sasl_version in -lldap""... $ac_c" 1>&6
-echo "configure:53671: checking for sasl_version in -lldap" >&5
+echo "configure:53801: checking for sasl_version in -lldap" >&5
 ac_lib_var=`echo ldap'_'sasl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -53675,7 +53805,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lldap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 53679 "configure"
+#line 53809 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -53686,7 +53816,7 @@ int main() {
 sasl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:53690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:53820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -53855,12 +53985,12 @@ fi
   fi
 
         echo $ac_n "checking for ldap_bind_s""... $ac_c" 1>&6
-echo "configure:53859: checking for ldap_bind_s" >&5
+echo "configure:53989: checking for ldap_bind_s" >&5
 if eval "test \"`echo '$''{'ac_cv_func_ldap_bind_s'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 53864 "configure"
+#line 53994 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char ldap_bind_s(); below.  */
@@ -53883,7 +54013,7 @@ ldap_bind_s();
 
 ; return 0; }
 EOF
-if { (eval echo configure:53887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:54017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_ldap_bind_s=yes"
 else
@@ -53934,7 +54064,7 @@ fi
 php_enable_mbstring=no
 
 echo $ac_n "checking whether to enable multibyte string support""... $ac_c" 1>&6
-echo "configure:53938: checking whether to enable multibyte string support" >&5
+echo "configure:54068: checking whether to enable multibyte string support" >&5
 # Check whether --enable-mbstring or --disable-mbstring was given.
 if test "${enable_mbstring+set}" = set; then
   enableval="$enable_mbstring"
@@ -53981,7 +54111,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_mbregex=yes
 
 echo $ac_n "checking whether to enable multibyte regex support""... $ac_c" 1>&6
-echo "configure:53985: checking whether to enable multibyte regex support" >&5
+echo "configure:54115: checking whether to enable multibyte regex support" >&5
 # Check whether --enable-mbregex or --disable-mbregex was given.
 if test "${enable_mbregex+set}" = set; then
   enableval="$enable_mbregex"
@@ -54007,7 +54137,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_mbregex_backtrack=yes
 
 echo $ac_n "checking whether to check multibyte regex backtrack""... $ac_c" 1>&6
-echo "configure:54011: checking whether to check multibyte regex backtrack" >&5
+echo "configure:54141: checking whether to check multibyte regex backtrack" >&5
 # Check whether --enable-mbregex_backtrack or --disable-mbregex_backtrack was given.
 if test "${enable_mbregex_backtrack+set}" = set; then
   enableval="$enable_mbregex_backtrack"
@@ -54033,7 +54163,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_libmbfl=no
 
 echo $ac_n "checking for external libmbfl""... $ac_c" 1>&6
-echo "configure:54037: checking for external libmbfl" >&5
+echo "configure:54167: checking for external libmbfl" >&5
 # Check whether --with-libmbfl or --without-libmbfl was given.
 if test "${with_libmbfl+set}" = set; then
   withval="$with_libmbfl"
@@ -54069,7 +54199,7 @@ EOF
     
   if test "$PHP_MBREGEX" = "yes"; then
     echo $ac_n "checking for variable length prototypes and stdarg.h""... $ac_c" 1>&6
-echo "configure:54073: checking for variable length prototypes and stdarg.h" >&5
+echo "configure:54203: checking for variable length prototypes and stdarg.h" >&5
 if eval "test \"`echo '$''{'cv_php_mbstring_stdarg'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -54087,7 +54217,7 @@ else
       
 else
   cat > conftest.$ac_ext <<EOF
-#line 54091 "configure"
+#line 54221 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
@@ -54102,7 +54232,7 @@ int foo(int x, ...) {
 int main() { return foo(10, "", 3.14); }
       
 EOF
-if { (eval echo configure:54106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:54236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cv_php_mbstring_stdarg=yes
 else
@@ -54123,17 +54253,17 @@ echo "$ac_t""$cv_php_mbstring_stdarg" 1>&6
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:54127: checking for $ac_hdr" >&5
+echo "configure:54257: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54132 "configure"
+#line 54262 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:54137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:54267: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -54160,7 +54290,7 @@ fi
 done
 
     echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:54164: checking size of int" >&5
+echo "configure:54294: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -54168,7 +54298,7 @@ else
   ac_cv_sizeof_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 54172 "configure"
+#line 54302 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -54179,7 +54309,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:54183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:54313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -54199,7 +54329,7 @@ EOF
 
 
     echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:54203: checking size of short" >&5
+echo "configure:54333: checking size of short" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -54207,7 +54337,7 @@ else
   ac_cv_sizeof_short=2
 else
   cat > conftest.$ac_ext <<EOF
-#line 54211 "configure"
+#line 54341 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -54218,7 +54348,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:54222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:54352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -54238,7 +54368,7 @@ EOF
 
 
     echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:54242: checking size of long" >&5
+echo "configure:54372: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -54246,7 +54376,7 @@ else
   ac_cv_sizeof_long=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 54250 "configure"
+#line 54380 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -54257,7 +54387,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:54261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:54391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -54277,12 +54407,12 @@ EOF
 
 
     echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:54281: checking for working const" >&5
+echo "configure:54411: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54286 "configure"
+#line 54416 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -54331,7 +54461,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:54335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:54465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -54352,12 +54482,12 @@ EOF
 fi
 
     echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:54356: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:54486: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54361 "configure"
+#line 54491 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -54366,7 +54496,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:54370: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:54500: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -54389,19 +54519,19 @@ fi
     # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:54393: checking for working alloca.h" >&5
+echo "configure:54523: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54398 "configure"
+#line 54528 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:54405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:54535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -54422,12 +54552,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:54426: checking for alloca" >&5
+echo "configure:54556: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54431 "configure"
+#line 54561 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -54455,7 +54585,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:54459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:54589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -54487,12 +54617,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:54491: checking whether alloca needs Cray hooks" >&5
+echo "configure:54621: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54496 "configure"
+#line 54626 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -54517,12 +54647,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:54521: checking for $ac_func" >&5
+echo "configure:54651: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 54526 "configure"
+#line 54656 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -54545,7 +54675,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:54549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:54679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -54572,7 +54702,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:54576: checking stack direction for C alloca" >&5
+echo "configure:54706: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -54580,7 +54710,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 54584 "configure"
+#line 54714 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -54599,7 +54729,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:54603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:54733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -54621,7 +54751,7 @@ EOF
 fi
 
     echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:54625: checking for 8-bit clean memcmp" >&5
+echo "configure:54755: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -54629,7 +54759,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 54633 "configure"
+#line 54763 "configure"
 #include "confdefs.h"
 
 main()
@@ -54639,7 +54769,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:54643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:54773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -54982,7 +55112,7 @@ EOF
   done
 
   echo $ac_n "checking for mbfl_buffer_converter_new in -lmbfl""... $ac_c" 1>&6
-echo "configure:54986: checking for mbfl_buffer_converter_new in -lmbfl" >&5
+echo "configure:55116: checking for mbfl_buffer_converter_new in -lmbfl" >&5
 ac_lib_var=`echo mbfl'_'mbfl_buffer_converter_new | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -54990,7 +55120,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmbfl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 54994 "configure"
+#line 55124 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -55001,7 +55131,7 @@ int main() {
 mbfl_buffer_converter_new()
 ; return 0; }
 EOF
-if { (eval echo configure:55005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:55135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -55318,8 +55448,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MBSTRING_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mbstring in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -55362,9 +55493,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mbstring"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mbstring"
+        ;;
+      *)
+        
   
   case ext/mbstring in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -55407,7 +55539,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mbstring"
   fi
   
@@ -55632,7 +55765,7 @@ fi
 php_with_mcrypt=no
 
 echo $ac_n "checking for mcrypt support""... $ac_c" 1>&6
-echo "configure:55636: checking for mcrypt support" >&5
+echo "configure:55769: checking for mcrypt support" >&5
 # Check whether --with-mcrypt or --without-mcrypt was given.
 if test "${with_mcrypt+set}" = set; then
   withval="$with_mcrypt"
@@ -55688,9 +55821,9 @@ if test "$PHP_MCRYPT" != "no"; then
   old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS=-I$MCRYPT_DIR/include
   echo $ac_n "checking for libmcrypt version""... $ac_c" 1>&6
-echo "configure:55692: checking for libmcrypt version" >&5
+echo "configure:55825: checking for libmcrypt version" >&5
   cat > conftest.$ac_ext <<EOF
-#line 55694 "configure"
+#line 55827 "configure"
 #include "confdefs.h"
 
 #include <mcrypt.h>
@@ -55814,7 +55947,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for mcrypt_module_open in -lmcrypt""... $ac_c" 1>&6
-echo "configure:55818: checking for mcrypt_module_open in -lmcrypt" >&5
+echo "configure:55951: checking for mcrypt_module_open in -lmcrypt" >&5
 ac_lib_var=`echo mcrypt'_'mcrypt_module_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -55822,7 +55955,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 55826 "configure"
+#line 55959 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -55833,7 +55966,7 @@ int main() {
 mcrypt_module_open()
 ; return 0; }
 EOF
-if { (eval echo configure:55837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:55970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -55986,7 +56119,7 @@ else
   done
 
   echo $ac_n "checking for mcrypt_module_open in -lmcrypt""... $ac_c" 1>&6
-echo "configure:55990: checking for mcrypt_module_open in -lmcrypt" >&5
+echo "configure:56123: checking for mcrypt_module_open in -lmcrypt" >&5
 ac_lib_var=`echo mcrypt'_'mcrypt_module_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -55994,7 +56127,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 55998 "configure"
+#line 56131 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -56005,7 +56138,7 @@ int main() {
 mcrypt_module_open()
 ; return 0; }
 EOF
-if { (eval echo configure:56009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:56142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -56363,8 +56496,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MCRYPT_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mcrypt in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -56407,9 +56541,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mcrypt"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mcrypt"
+        ;;
+      *)
+        
   
   case ext/mcrypt in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -56452,7 +56587,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mcrypt"
   fi
   
@@ -56475,7 +56611,7 @@ fi
 php_with_mhash=no
 
 echo $ac_n "checking for mhash support""... $ac_c" 1>&6
-echo "configure:56479: checking for mhash support" >&5
+echo "configure:56615: checking for mhash support" >&5
 # Check whether --with-mhash or --without-mhash was given.
 if test "${with_mhash+set}" = set; then
   withval="$with_mhash"
@@ -56840,8 +56976,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MHASH_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mhash in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -56884,9 +57021,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mhash"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mhash"
+        ;;
+      *)
+        
   
   case ext/mhash in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -56929,7 +57067,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mhash"
   fi
   
@@ -56959,7 +57098,7 @@ fi
 php_with_mime_magic=no
 
 echo $ac_n "checking whether to include mime_magic support""... $ac_c" 1>&6
-echo "configure:56963: checking whether to include mime_magic support" >&5
+echo "configure:57102: checking whether to include mime_magic support" >&5
 # Check whether --with-mime-magic or --without-mime-magic was given.
 if test "${with_mime_magic+set}" = set; then
   withval="$with_mime_magic"
@@ -57188,8 +57327,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MIME_MAGIC_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mime_magic in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -57232,9 +57372,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mime_magic"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mime_magic"
+        ;;
+      *)
+        
   
   case ext/mime_magic in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -57277,7 +57418,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mime_magic"
   fi
   
@@ -57325,7 +57467,7 @@ fi
 php_with_ming=no
 
 echo $ac_n "checking for MING support""... $ac_c" 1>&6
-echo "configure:57329: checking for MING support" >&5
+echo "configure:57471: checking for MING support" >&5
 # Check whether --with-ming or --without-ming was given.
 if test "${with_ming+set}" = set; then
   withval="$with_ming"
@@ -57370,7 +57512,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_MING" != "no"; then
   echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:57374: checking for sin in -lm" >&5
+echo "configure:57516: checking for sin in -lm" >&5
 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -57378,7 +57520,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 57382 "configure"
+#line 57524 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -57389,7 +57531,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:57393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:57535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -57536,7 +57678,7 @@ fi
   done
 
   echo $ac_n "checking for Ming_useSWFVersion in -lming""... $ac_c" 1>&6
-echo "configure:57540: checking for Ming_useSWFVersion in -lming" >&5
+echo "configure:57682: checking for Ming_useSWFVersion in -lming" >&5
 ac_lib_var=`echo ming'_'Ming_useSWFVersion | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -57544,7 +57686,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lming  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 57548 "configure"
+#line 57690 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -57555,7 +57697,7 @@ int main() {
 Ming_useSWFVersion()
 ; return 0; }
 EOF
-if { (eval echo configure:57559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:57701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -57818,7 +57960,7 @@ fi
   done
 
   echo $ac_n "checking for SWFPrebuiltClip in -lming""... $ac_c" 1>&6
-echo "configure:57822: checking for SWFPrebuiltClip in -lming" >&5
+echo "configure:57964: checking for SWFPrebuiltClip in -lming" >&5
 ac_lib_var=`echo ming'_'SWFPrebuiltClip | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -57826,7 +57968,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lming  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 57830 "configure"
+#line 57972 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -57837,7 +57979,7 @@ int main() {
 SWFPrebuiltClip()
 ; return 0; }
 EOF
-if { (eval echo configure:57841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:57983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -57966,7 +58108,7 @@ fi
   done
 
   echo $ac_n "checking for SWFMovie_namedAnchor in -lming""... $ac_c" 1>&6
-echo "configure:57970: checking for SWFMovie_namedAnchor in -lming" >&5
+echo "configure:58112: checking for SWFMovie_namedAnchor in -lming" >&5
 ac_lib_var=`echo ming'_'SWFMovie_namedAnchor | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -57974,7 +58116,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lming  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 57978 "configure"
+#line 58120 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -57985,7 +58127,7 @@ int main() {
 SWFMovie_namedAnchor()
 ; return 0; }
 EOF
-if { (eval echo configure:57989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:58131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -58114,7 +58256,7 @@ fi
   done
 
   echo $ac_n "checking for Ming_setSWFCompression in -lming""... $ac_c" 1>&6
-echo "configure:58118: checking for Ming_setSWFCompression in -lming" >&5
+echo "configure:58260: checking for Ming_setSWFCompression in -lming" >&5
 ac_lib_var=`echo ming'_'Ming_setSWFCompression | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -58122,7 +58264,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lming  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 58126 "configure"
+#line 58268 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -58133,7 +58275,7 @@ int main() {
 Ming_setSWFCompression()
 ; return 0; }
 EOF
-if { (eval echo configure:58137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:58279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -58170,14 +58312,14 @@ fi
   old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS=-I$MING_INC_DIR
   echo $ac_n "checking for destroySWFBlock""... $ac_c" 1>&6
-echo "configure:58174: checking for destroySWFBlock" >&5
+echo "configure:58316: checking for destroySWFBlock" >&5
   if test "$cross_compiling" = yes; then
   
     echo "$ac_t""unknown" 1>&6
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 58181 "configure"
+#line 58323 "configure"
 #include "confdefs.h"
 
 #include "ming.h"
@@ -58189,7 +58331,7 @@ int main() {
 }
   
 EOF
-if { (eval echo configure:58193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:58335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     echo "$ac_t""missing" 1>&6
@@ -58211,7 +58353,7 @@ fi
  
 
   cat > conftest.$ac_ext <<EOF
-#line 58215 "configure"
+#line 58357 "configure"
 #include "confdefs.h"
 
 #include <ming.h>
@@ -58238,7 +58380,7 @@ rm -f conftest*
 
 
     cat > conftest.$ac_ext <<EOF
-#line 58242 "configure"
+#line 58384 "configure"
 #include "confdefs.h"
 
 #include <ming.h>
@@ -58249,7 +58391,7 @@ SWFMovie_output(NULL, NULL, NULL, 0);
   
 ; return 0; }
 EOF
-if { (eval echo configure:58253: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:58395: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     cat >> confdefs.h <<\EOF
@@ -58448,8 +58590,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MING_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/ming in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -58492,9 +58635,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC ming"
-    else
-      
+        EXT_STATIC="$EXT_STATIC ming"
+        ;;
+      *)
+        
   
   case ext/ming in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -58537,7 +58681,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC ming"
   fi
   
@@ -58565,7 +58710,7 @@ fi
 php_with_msql=no
 
 echo $ac_n "checking for mSQL support""... $ac_c" 1>&6
-echo "configure:58569: checking for mSQL support" >&5
+echo "configure:58714: checking for mSQL support" >&5
 # Check whether --with-msql or --without-msql was given.
 if test "${with_msql+set}" = set; then
   withval="$with_msql"
@@ -58935,8 +59080,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/msql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -58979,9 +59125,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC msql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC msql"
+        ;;
+      *)
+        
   
   case ext/msql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -59024,7 +59171,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC msql"
   fi
   
@@ -59042,11 +59190,11 @@ EOF
 
     
   echo $ac_n "checking mSQL version""... $ac_c" 1>&6
-echo "configure:59046: checking mSQL version" >&5
+echo "configure:59194: checking mSQL version" >&5
   ac_php_oldcppflags=$CPPFLAGS
   CPPFLAGS="$INCLUDES $CPPFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 59050 "configure"
+#line 59198 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include "msql.h"
@@ -59054,7 +59202,7 @@ int main() {
 int i = IDX_TYPE
 ; return 0; }
 EOF
-if { (eval echo configure:59058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:59206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     cat >> confdefs.h <<\EOF
@@ -59086,7 +59234,7 @@ rm -f conftest*
 php_with_mssql=no
 
 echo $ac_n "checking for MSSQL support via FreeTDS""... $ac_c" 1>&6
-echo "configure:59090: checking for MSSQL support via FreeTDS" >&5
+echo "configure:59238: checking for MSSQL support via FreeTDS" >&5
 # Check whether --with-mssql or --without-mssql was given.
 if test "${with_mssql+set}" = set; then
   withval="$with_mssql"
@@ -59478,8 +59626,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MSSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mssql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -59522,9 +59671,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mssql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mssql"
+        ;;
+      *)
+        
   
   case ext/mssql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -59567,7 +59717,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mssql"
   fi
   
@@ -59584,7 +59735,7 @@ EOF
   fi
 
   echo $ac_n "checking for dnet_addr in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:59588: checking for dnet_addr in -ldnet_stub" >&5
+echo "configure:59739: checking for dnet_addr in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_addr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -59592,7 +59743,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 59596 "configure"
+#line 59747 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -59603,7 +59754,7 @@ int main() {
 dnet_addr()
 ; return 0; }
 EOF
-if { (eval echo configure:59607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:59758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -59747,7 +59898,7 @@ fi
 php_with_mysql=no
 
 echo $ac_n "checking for MySQL support""... $ac_c" 1>&6
-echo "configure:59751: checking for MySQL support" >&5
+echo "configure:59902: checking for MySQL support" >&5
 # Check whether --with-mysql or --without-mysql was given.
 if test "${with_mysql+set}" = set; then
   withval="$with_mysql"
@@ -59794,7 +59945,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_mysql_sock=no
 
 echo $ac_n "checking for specified location of the MySQL UNIX socket""... $ac_c" 1>&6
-echo "configure:59798: checking for specified location of the MySQL UNIX socket" >&5
+echo "configure:59949: checking for specified location of the MySQL UNIX socket" >&5
 # Check whether --with-mysql-sock or --without-mysql-sock was given.
 if test "${with_mysql_sock+set}" = set; then
   withval="$with_mysql_sock"
@@ -59821,7 +59972,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:59825: checking for the location of libz" >&5
+echo "configure:59976: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -59852,7 +60003,7 @@ EOF
 
 
   echo $ac_n "checking for MySQL UNIX socket location""... $ac_c" 1>&6
-echo "configure:59856: checking for MySQL UNIX socket location" >&5
+echo "configure:60007: checking for MySQL UNIX socket location" >&5
   if test "$PHP_MYSQL_SOCK" != "no" && test "$PHP_MYSQL_SOCK" != "yes"; then
     MYSQL_SOCK=$PHP_MYSQL_SOCK
     cat >> confdefs.h <<EOF
@@ -60043,7 +60194,7 @@ Note that the MySQL client library is not bundled anymore!" 1>&2; exit 1; }
   done
 
   echo $ac_n "checking for mysql_close in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:60047: checking for mysql_close in -l$MYSQL_LIBNAME" >&5
+echo "configure:60198: checking for mysql_close in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'mysql_close | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -60051,7 +60202,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 60055 "configure"
+#line 60206 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -60062,7 +60213,7 @@ int main() {
 mysql_close()
 ; return 0; }
 EOF
-if { (eval echo configure:60066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:60217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -60285,7 +60436,7 @@ else
   done
 
   echo $ac_n "checking for mysql_error in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:60289: checking for mysql_error in -l$MYSQL_LIBNAME" >&5
+echo "configure:60440: checking for mysql_error in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'mysql_error | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -60293,7 +60444,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 60297 "configure"
+#line 60448 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -60304,7 +60455,7 @@ int main() {
 mysql_error()
 ; return 0; }
 EOF
-if { (eval echo configure:60308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:60459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -60459,7 +60610,7 @@ fi
   done
 
   echo $ac_n "checking for mysql_errno in -l$MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:60463: checking for mysql_errno in -l$MYSQL_LIBNAME" >&5
+echo "configure:60614: checking for mysql_errno in -l$MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $MYSQL_LIBNAME'_'mysql_errno | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -60467,7 +60618,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 60471 "configure"
+#line 60622 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -60478,7 +60629,7 @@ int main() {
 mysql_errno()
 ; return 0; }
 EOF
-if { (eval echo configure:60482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:60633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -60830,8 +60981,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MYSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mysql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -60874,9 +61026,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mysql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mysql"
+        ;;
+      *)
+        
   
   case ext/mysql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -60919,7 +61072,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mysql"
   fi
   
@@ -60968,7 +61122,7 @@ fi
 php_with_mysqli=no
 
 echo $ac_n "checking for MySQLi support""... $ac_c" 1>&6
-echo "configure:60972: checking for MySQLi support" >&5
+echo "configure:61126: checking for MySQLi support" >&5
 # Check whether --with-mysqli or --without-mysqli was given.
 if test "${with_mysqli+set}" = set; then
   withval="$with_mysqli"
@@ -61015,7 +61169,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_embedded_mysqli=no
 
 echo $ac_n "checking whether to enable embedded MySQLi support""... $ac_c" 1>&6
-echo "configure:61019: checking whether to enable embedded MySQLi support" >&5
+echo "configure:61173: checking whether to enable embedded MySQLi support" >&5
 # Check whether --enable-embedded_mysqli or --disable-embedded_mysqli was given.
 if test "${enable_embedded_mysqli+set}" = set; then
   enableval="$enable_embedded_mysqli"
@@ -61166,7 +61320,7 @@ EOF
   done
 
   echo $ac_n "checking for mysql_set_server_option in -l$MYSQL_LIB_NAME""... $ac_c" 1>&6
-echo "configure:61170: checking for mysql_set_server_option in -l$MYSQL_LIB_NAME" >&5
+echo "configure:61324: checking for mysql_set_server_option in -l$MYSQL_LIB_NAME" >&5
 ac_lib_var=`echo $MYSQL_LIB_NAME'_'mysql_set_server_option | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -61174,7 +61328,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIB_NAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 61178 "configure"
+#line 61332 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -61185,7 +61339,7 @@ int main() {
 mysql_set_server_option()
 ; return 0; }
 EOF
-if { (eval echo configure:61189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:61343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -61433,7 +61587,7 @@ EOF
   done
 
   echo $ac_n "checking for mysql_stmt_field_count in -l$MYSQL_LIB_NAME""... $ac_c" 1>&6
-echo "configure:61437: checking for mysql_stmt_field_count in -l$MYSQL_LIB_NAME" >&5
+echo "configure:61591: checking for mysql_stmt_field_count in -l$MYSQL_LIB_NAME" >&5
 ac_lib_var=`echo $MYSQL_LIB_NAME'_'mysql_stmt_field_count | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -61441,7 +61595,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$MYSQL_LIB_NAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 61445 "configure"
+#line 61599 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -61452,7 +61606,7 @@ int main() {
 mysql_stmt_field_count()
 ; return 0; }
 EOF
-if { (eval echo configure:61456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:61610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -61683,8 +61837,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_MYSQLI_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/mysqli in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -61727,9 +61882,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC mysqli"
-    else
-      
+        EXT_STATIC="$EXT_STATIC mysqli"
+        ;;
+      *)
+        
   
   case ext/mysqli in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -61772,7 +61928,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC mysqli"
   fi
   
@@ -61798,7 +61955,7 @@ fi
 php_with_ncurses=no
 
 echo $ac_n "checking for ncurses support""... $ac_c" 1>&6
-echo "configure:61802: checking for ncurses support" >&5
+echo "configure:61959: checking for ncurses support" >&5
 # Check whether --with-ncurses or --without-ncurses was given.
 if test "${with_ncurses+set}" = set; then
   withval="$with_ncurses"
@@ -62005,7 +62162,7 @@ EOF
   done
 
   echo $ac_n "checking for $LIBSYMBOL in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:62009: checking for $LIBSYMBOL in -l$LIBNAME" >&5
+echo "configure:62166: checking for $LIBSYMBOL in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'$LIBSYMBOL | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62013,7 +62170,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62017 "configure"
+#line 62174 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62024,7 +62181,7 @@ int main() {
 $LIBSYMBOL()
 ; return 0; }
 EOF
-if { (eval echo configure:62028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -62243,7 +62400,7 @@ EOF
   done
 
   echo $ac_n "checking for new_panel in -lpanel""... $ac_c" 1>&6
-echo "configure:62247: checking for new_panel in -lpanel" >&5
+echo "configure:62404: checking for new_panel in -lpanel" >&5
 ac_lib_var=`echo panel'_'new_panel | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62251,7 +62408,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpanel  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62255 "configure"
+#line 62412 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62262,7 +62419,7 @@ int main() {
 new_panel()
 ; return 0; }
 EOF
-if { (eval echo configure:62266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -62410,7 +62567,7 @@ fi
 
  
    echo $ac_n "checking for color_set in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:62414: checking for color_set in -l$LIBNAME" >&5
+echo "configure:62571: checking for color_set in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'color_set | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62418,7 +62575,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62422 "configure"
+#line 62579 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62429,7 +62586,7 @@ int main() {
 color_set()
 ; return 0; }
 EOF
-if { (eval echo configure:62433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -62453,7 +62610,7 @@ else
 fi
 
    echo $ac_n "checking for slk_color in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:62457: checking for slk_color in -l$LIBNAME" >&5
+echo "configure:62614: checking for slk_color in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'slk_color | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62461,7 +62618,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62465 "configure"
+#line 62622 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62472,7 +62629,7 @@ int main() {
 slk_color()
 ; return 0; }
 EOF
-if { (eval echo configure:62476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -62496,7 +62653,7 @@ else
 fi
 
    echo $ac_n "checking for assume_default_colors in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:62500: checking for assume_default_colors in -l$LIBNAME" >&5
+echo "configure:62657: checking for assume_default_colors in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'assume_default_colors | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62504,7 +62661,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62508 "configure"
+#line 62665 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62515,7 +62672,7 @@ int main() {
 assume_default_colors()
 ; return 0; }
 EOF
-if { (eval echo configure:62519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -62539,7 +62696,7 @@ else
 fi
 
    echo $ac_n "checking for use_extended_names in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:62543: checking for use_extended_names in -l$LIBNAME" >&5
+echo "configure:62700: checking for use_extended_names in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'use_extended_names | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -62547,7 +62704,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 62551 "configure"
+#line 62708 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -62558,7 +62715,7 @@ int main() {
 use_extended_names()
 ; return 0; }
 EOF
-if { (eval echo configure:62562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:62719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -62766,8 +62923,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" = "cli"; then
     PHP_NCURSES_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/ncurses in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -62810,9 +62968,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC ncurses"
-    else
-      
+        EXT_STATIC="$EXT_STATIC ncurses"
+        ;;
+      *)
+        
   
   case ext/ncurses in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -62855,7 +63014,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC ncurses"
   fi
   
@@ -62898,7 +63058,7 @@ fi
 php_with_oci8=no
 
 echo $ac_n "checking for Oracle (OCI8) support""... $ac_c" 1>&6
-echo "configure:62902: checking for Oracle (OCI8) support" >&5
+echo "configure:63062: checking for Oracle (OCI8) support" >&5
 # Check whether --with-oci8 or --without-oci8 was given.
 if test "${with_oci8+set}" = set; then
   withval="$with_oci8"
@@ -62943,7 +63103,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_OCI8" != "no"; then 
   echo $ac_n "checking PHP version""... $ac_c" 1>&6
-echo "configure:62947: checking PHP version" >&5
+echo "configure:63107: checking PHP version" >&5
 
   tmp_version=$PHP_VERSION
   if test -z "$tmp_version"; then
@@ -62999,7 +63159,7 @@ fi
 if test "$PHP_OCI8" != "no" && test "$PHP_OCI8_INSTANT_CLIENT" = "no"; then
 
   echo $ac_n "checking Oracle Install Directory""... $ac_c" 1>&6
-echo "configure:63003: checking Oracle Install Directory" >&5
+echo "configure:63163: checking Oracle Install Directory" >&5
   if test "$PHP_OCI8" = "yes"; then
     OCI8_DIR=$ORACLE_HOME
   else
@@ -63009,7 +63169,7 @@ echo "configure:63003: checking Oracle Install Directory" >&5
 
   
   echo $ac_n "checking size of long int""... $ac_c" 1>&6
-echo "configure:63013: checking size of long int" >&5
+echo "configure:63173: checking size of long int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -63017,7 +63177,7 @@ else
   ac_cv_sizeof_long_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 63021 "configure"
+#line 63181 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -63028,7 +63188,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:63032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:63192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_int=`cat conftestval`
 else
@@ -63048,7 +63208,7 @@ EOF
 
 
   echo $ac_n "checking if we're on a 64-bit platform""... $ac_c" 1>&6
-echo "configure:63052: checking if we're on a 64-bit platform" >&5
+echo "configure:63212: checking if we're on a 64-bit platform" >&5
   if test "$ac_cv_sizeof_long_int" = "4" ; then
     echo "$ac_t""no" 1>&6
     TMP_OCI8_LIB_DIR=lib32 
@@ -63058,7 +63218,7 @@ echo "configure:63052: checking if we're on a 64-bit platform" >&5
   fi
 
   echo $ac_n "checking OCI8 libraries dir""... $ac_c" 1>&6
-echo "configure:63062: checking OCI8 libraries dir" >&5
+echo "configure:63222: checking OCI8 libraries dir" >&5
   if test -d "$OCI8_DIR/lib" && test ! -d "$OCI8_DIR/lib32"; then
     OCI8_LIB_DIR=lib
   elif test ! -d "$OCI8_DIR/lib" && test -d "$OCI8_DIR/lib32"; then
@@ -63392,7 +63552,7 @@ echo "configure:63062: checking OCI8 libraries dir" >&5
 
   
   echo $ac_n "checking Oracle version""... $ac_c" 1>&6
-echo "configure:63396: checking Oracle version" >&5
+echo "configure:63556: checking Oracle version" >&5
   if test -s "$OCI8_DIR/orainst/unix.rgs"; then
     OCI8_VERSION=`grep '"ocommon"' $OCI8_DIR/orainst/unix.rgs | $PHP_OCI8_SED 's/  */:/g' | cut -d: -f 6 | cut -c 2-4`
     test -z "$OCI8_VERSION" && OCI8_VERSION=7.3
@@ -63907,7 +64067,7 @@ echo "configure:63396: checking Oracle version" >&5
   done
 
   echo $ac_n "checking for OCIEnvCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:63911: checking for OCIEnvCreate in -lclntsh" >&5
+echo "configure:64071: checking for OCIEnvCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -63915,7 +64075,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 63919 "configure"
+#line 64079 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -63926,7 +64086,7 @@ int main() {
 OCIEnvCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:63930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:64090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -64060,7 +64220,7 @@ fi
   done
 
   echo $ac_n "checking for OCIStmtPrepare2 in -lclntsh""... $ac_c" 1>&6
-echo "configure:64064: checking for OCIStmtPrepare2 in -lclntsh" >&5
+echo "configure:64224: checking for OCIStmtPrepare2 in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIStmtPrepare2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -64068,7 +64228,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 64072 "configure"
+#line 64232 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -64079,7 +64239,7 @@ int main() {
 OCIStmtPrepare2()
 ; return 0; }
 EOF
-if { (eval echo configure:64083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:64243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -64277,7 +64437,7 @@ fi
   done
 
   echo $ac_n "checking for OCIEnvCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:64281: checking for OCIEnvCreate in -lclntsh" >&5
+echo "configure:64441: checking for OCIEnvCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -64285,7 +64445,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 64289 "configure"
+#line 64449 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -64296,7 +64456,7 @@ int main() {
 OCIEnvCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:64300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:64460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -64430,7 +64590,7 @@ fi
   done
 
   echo $ac_n "checking for OCIStmtPrepare2 in -lclntsh""... $ac_c" 1>&6
-echo "configure:64434: checking for OCIStmtPrepare2 in -lclntsh" >&5
+echo "configure:64594: checking for OCIStmtPrepare2 in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIStmtPrepare2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -64438,7 +64598,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 64442 "configure"
+#line 64602 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -64449,7 +64609,7 @@ int main() {
 OCIStmtPrepare2()
 ; return 0; }
 EOF
-if { (eval echo configure:64453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:64613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -64489,7 +64649,7 @@ fi
   old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS=$OCI8_INCLUDES
   cat > conftest.$ac_ext <<EOF
-#line 64493 "configure"
+#line 64653 "configure"
 #include "confdefs.h"
 
 #include <oci.h>
@@ -64684,7 +64844,7 @@ EOF
   done
 
   echo $ac_n "checking for OCIEnvNlsCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:64688: checking for OCIEnvNlsCreate in -lclntsh" >&5
+echo "configure:64848: checking for OCIEnvNlsCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvNlsCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -64692,7 +64852,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 64696 "configure"
+#line 64856 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -64703,7 +64863,7 @@ int main() {
 OCIEnvNlsCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:64707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:64867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -64820,7 +64980,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   done
 
   echo $ac_n "checking for OCINlsCharSetNameToId in -lclntsh""... $ac_c" 1>&6
-echo "configure:64824: checking for OCINlsCharSetNameToId in -lclntsh" >&5
+echo "configure:64984: checking for OCINlsCharSetNameToId in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCINlsCharSetNameToId | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -64828,7 +64988,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 64832 "configure"
+#line 64992 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -64839,7 +64999,7 @@ int main() {
 OCINlsCharSetNameToId()
 ; return 0; }
 EOF
-if { (eval echo configure:64843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -64986,7 +65146,7 @@ fi
   done
 
   echo $ac_n "checking for OCIEnvCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:64990: checking for OCIEnvCreate in -lclntsh" >&5
+echo "configure:65150: checking for OCIEnvCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -64994,7 +65154,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 64998 "configure"
+#line 65158 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -65005,7 +65165,7 @@ int main() {
 OCIEnvCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:65009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -65139,7 +65299,7 @@ fi
   done
 
   echo $ac_n "checking for OCIStmtPrepare2 in -lclntsh""... $ac_c" 1>&6
-echo "configure:65143: checking for OCIStmtPrepare2 in -lclntsh" >&5
+echo "configure:65303: checking for OCIStmtPrepare2 in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIStmtPrepare2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -65147,7 +65307,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 65151 "configure"
+#line 65311 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -65158,7 +65318,7 @@ int main() {
 OCIStmtPrepare2()
 ; return 0; }
 EOF
-if { (eval echo configure:65162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -65292,7 +65452,7 @@ fi
   done
 
   echo $ac_n "checking for OCILobRead2 in -lclntsh""... $ac_c" 1>&6
-echo "configure:65296: checking for OCILobRead2 in -lclntsh" >&5
+echo "configure:65456: checking for OCILobRead2 in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCILobRead2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -65300,7 +65460,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 65304 "configure"
+#line 65464 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -65311,7 +65471,7 @@ int main() {
 OCILobRead2()
 ; return 0; }
 EOF
-if { (eval echo configure:65315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -65543,7 +65703,7 @@ EOF
   done
 
   echo $ac_n "checking for OCILobIsTemporary in -lclntsh""... $ac_c" 1>&6
-echo "configure:65547: checking for OCILobIsTemporary in -lclntsh" >&5
+echo "configure:65707: checking for OCILobIsTemporary in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCILobIsTemporary | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -65551,7 +65711,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 65555 "configure"
+#line 65715 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -65562,7 +65722,7 @@ int main() {
 OCILobIsTemporary()
 ; return 0; }
 EOF
-if { (eval echo configure:65566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -65692,7 +65852,7 @@ else
   done
 
   echo $ac_n "checking for OCILobIsTemporary in -locijdbc8""... $ac_c" 1>&6
-echo "configure:65696: checking for OCILobIsTemporary in -locijdbc8" >&5
+echo "configure:65856: checking for OCILobIsTemporary in -locijdbc8" >&5
 ac_lib_var=`echo ocijdbc8'_'OCILobIsTemporary | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -65700,7 +65860,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-locijdbc8  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 65704 "configure"
+#line 65864 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -65711,7 +65871,7 @@ int main() {
 OCILobIsTemporary()
 ; return 0; }
 EOF
-if { (eval echo configure:65715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:65875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -65872,7 +66032,7 @@ fi
   done
 
   echo $ac_n "checking for OCICollAssign in -lclntsh""... $ac_c" 1>&6
-echo "configure:65876: checking for OCICollAssign in -lclntsh" >&5
+echo "configure:66036: checking for OCICollAssign in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCICollAssign | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -65880,7 +66040,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 65884 "configure"
+#line 66044 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -65891,7 +66051,7 @@ int main() {
 OCICollAssign()
 ; return 0; }
 EOF
-if { (eval echo configure:65895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:66055: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -66098,8 +66258,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_OCI8_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/oci8 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -66142,9 +66303,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC oci8"
-    else
-      
+        EXT_STATIC="$EXT_STATIC oci8"
+        ;;
+      *)
+        
   
   case ext/oci8 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -66187,7 +66349,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC oci8"
   fi
   
@@ -66396,8 +66559,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_OCI8_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/oci8 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -66440,9 +66604,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC oci8"
-    else
-      
+        EXT_STATIC="$EXT_STATIC oci8"
+        ;;
+      *)
+        
   
   case ext/oci8 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -66485,7 +66650,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC oci8"
   fi
   
@@ -66533,7 +66699,7 @@ EOF
 elif test "$PHP_OCI8" != "no" && test "$PHP_OCI8_INSTANT_CLIENT" != "no"; then
 
   echo $ac_n "checking size of long int""... $ac_c" 1>&6
-echo "configure:66537: checking size of long int" >&5
+echo "configure:66703: checking size of long int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -66541,7 +66707,7 @@ else
   ac_cv_sizeof_long_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 66545 "configure"
+#line 66711 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -66552,7 +66718,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:66556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:66722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_int=`cat conftestval`
 else
@@ -66577,7 +66743,7 @@ EOF
   fi
 
   echo $ac_n "checking Oracle Instant Client directory""... $ac_c" 1>&6
-echo "configure:66581: checking Oracle Instant Client directory" >&5
+echo "configure:66747: checking Oracle Instant Client directory" >&5
   if test "$PHP_OCI8_INSTANT_CLIENT" = "yes"; then
     PHP_OCI8_INSTANT_CLIENT=`ls -d /usr/lib/oracle/*/client${LIBDIR_SUFFIX}/lib 2> /dev/null | tail -1`
     if test -z "$PHP_OCI8_INSTANT_CLIENT"; then
@@ -66589,7 +66755,7 @@ echo "configure:66581: checking Oracle Instant Client directory" >&5
   OCI8_DIR=$PHP_OCI8_INSTANT_CLIENT
 
   echo $ac_n "checking Oracle Instant Client SDK header directory""... $ac_c" 1>&6
-echo "configure:66593: checking Oracle Instant Client SDK header directory" >&5
+echo "configure:66759: checking Oracle Instant Client SDK header directory" >&5
 
   OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/lib/oracle/\(.*\)/client\('${LIBDIR_SUFFIX}'\)*/lib/*$!/usr/include/oracle/\1/client\2!'`
 
@@ -66798,7 +66964,7 @@ echo "configure:66593: checking Oracle Instant Client SDK header directory" >&5
 
   
   echo $ac_n "checking Oracle Instant Client version""... $ac_c" 1>&6
-echo "configure:66802: checking Oracle Instant Client version" >&5
+echo "configure:66968: checking Oracle Instant Client version" >&5
   if test -f $PHP_OCI8_INSTANT_CLIENT/libnnz11.$SHLIB_SUFFIX_NAME; then
     if test -f $PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
       if test ! -f $PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME; then
@@ -67109,8 +67275,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_OCI8_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/oci8 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -67153,9 +67320,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC oci8"
-    else
-      
+        EXT_STATIC="$EXT_STATIC oci8"
+        ;;
+      *)
+        
   
   case ext/oci8 in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -67198,7 +67366,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC oci8"
   fi
   
@@ -67300,7 +67469,7 @@ esac
 
   if test "$PHP_ADABAS" != "no"; then
     echo $ac_n "checking for Adabas support""... $ac_c" 1>&6
-echo "configure:67304: checking for Adabas support" >&5
+echo "configure:67473: checking for Adabas support" >&5
     if test "$PHP_ADABAS" = "yes"; then
       PHP_ADABAS=/usr/local
     fi
@@ -67506,7 +67675,7 @@ esac
 
   if test "$PHP_SAPDB" != "no"; then
     echo $ac_n "checking for SAP DB support""... $ac_c" 1>&6
-echo "configure:67510: checking for SAP DB support" >&5
+echo "configure:67679: checking for SAP DB support" >&5
     if test "$PHP_SAPDB" = "yes"; then
       PHP_SAPDB=/usr/local
     fi
@@ -67642,7 +67811,7 @@ esac
 
   if test "$PHP_SOLID" != "no"; then
     echo $ac_n "checking for Solid support""... $ac_c" 1>&6
-echo "configure:67646: checking for Solid support" >&5
+echo "configure:67815: checking for Solid support" >&5
     if test "$PHP_SOLID" = "yes"; then
       PHP_SOLID=/usr/local/solid
     fi
@@ -67669,7 +67838,7 @@ EOF
     echo "$ac_t""$ext_output" 1>&6
     
   echo $ac_n "checking Solid library file""... $ac_c" 1>&6
-echo "configure:67673: checking Solid library file" >&5  
+echo "configure:67842: checking Solid library file" >&5  
   ac_solid_uname_r=`uname -r 2>/dev/null`
   ac_solid_uname_s=`uname -s 2>/dev/null`
   case $ac_solid_uname_s in
@@ -67793,7 +67962,7 @@ esac
 
   if test "$PHP_IBM_DB2" != "no"; then
     echo $ac_n "checking for IBM DB2 support""... $ac_c" 1>&6
-echo "configure:67797: checking for IBM DB2 support" >&5
+echo "configure:67966: checking for IBM DB2 support" >&5
     if test "$PHP_IBM_DB2" = "yes"; then
       ODBC_INCDIR=/home/db2inst1/sqllib/include
       ODBC_LIBDIR=/home/db2inst1/sqllib/lib
@@ -67824,7 +67993,7 @@ fi
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 67828 "configure"
+#line 67997 "configure"
 #include "confdefs.h"
 
     
@@ -67835,7 +68004,7 @@ else
     }
   
 EOF
-if { (eval echo configure:67839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:68008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -67919,7 +68088,7 @@ esac
 
   if test "$PHP_ODBCROUTER" != "no"; then
     echo $ac_n "checking for ODBCRouter.com support""... $ac_c" 1>&6
-echo "configure:67923: checking for ODBCRouter.com support" >&5
+echo "configure:68092: checking for ODBCRouter.com support" >&5
     if test "$PHP_ODBCROUTER" = "yes"; then
       PHP_ODBCROUTER=/usr
     fi
@@ -67986,7 +68155,7 @@ esac
 
   if test "$PHP_EMPRESS" != "no"; then
     echo $ac_n "checking for Empress support""... $ac_c" 1>&6
-echo "configure:67990: checking for Empress support" >&5
+echo "configure:68159: checking for Empress support" >&5
     if test "$PHP_EMPRESS" = "yes"; then
       ODBC_INCDIR=$EMPRESSPATH/include/odbc
       ODBC_LIBDIR=$EMPRESSPATH/shlib
@@ -68004,7 +68173,7 @@ EOF
     echo "$ac_t""$ext_output" 1>&6
     
   echo $ac_n "checking Empress library file""... $ac_c" 1>&6
-echo "configure:68008: checking Empress library file" >&5
+echo "configure:68177: checking Empress library file" >&5
   ODBC_LIBS=`echo $ODBC_LIBDIR/libempodbccl.so | cut -d' ' -f1`
   if test ! -f $ODBC_LIBS; then
     ODBC_LIBS=`echo $ODBC_LIBDIR/libempodbccl.so | cut -d' ' -f1`
@@ -68063,7 +68232,7 @@ esac
 
   if test "$PHP_EMPRESS_BCS" != "no"; then
     echo $ac_n "checking for Empress local access support""... $ac_c" 1>&6
-echo "configure:68067: checking for Empress local access support" >&5
+echo "configure:68236: checking for Empress local access support" >&5
     if test "$PHP_EMPRESS_BCS" = "yes"; then
       ODBC_INCDIR=$EMPRESSPATH/include/odbc
       ODBC_LIBDIR=$EMPRESSPATH/shlib
@@ -68097,7 +68266,7 @@ EOF
     echo "$ac_t""$ext_output" 1>&6
     
   echo $ac_n "checking Empress local access library file""... $ac_c" 1>&6
-echo "configure:68101: checking Empress local access library file" >&5
+echo "configure:68270: checking Empress local access library file" >&5
   ODBCBCS_LIBS=`echo $ODBC_LIBDIR/libempodbcbcs.a | cut -d' ' -f1`
   if test ! -f $ODBCBCS_LIBS; then
     ODBCBCS_LIBS=`echo $ODBC_LIBDIR/libempodbcbcs.a | cut -d' ' -f1`
@@ -68156,7 +68325,7 @@ esac
   
   if test "$PHP_BIRDSTEP" != "no"; then
     echo $ac_n "checking for Birdstep support""... $ac_c" 1>&6
-echo "configure:68160: checking for Birdstep support" >&5
+echo "configure:68329: checking for Birdstep support" >&5
     if test "$PHP_BIRDSTEP" = "yes"; then
         ODBC_INCDIR=/usr/local/birdstep/include
         ODBC_LIBDIR=/usr/local/birdstep/lib
@@ -68271,7 +68440,7 @@ esac
 
   if test "$PHP_CUSTOM_ODBC" != "no"; then
     echo $ac_n "checking for a custom ODBC support""... $ac_c" 1>&6
-echo "configure:68275: checking for a custom ODBC support" >&5
+echo "configure:68444: checking for a custom ODBC support" >&5
     if test "$PHP_CUSTOM_ODBC" = "yes"; then
       PHP_CUSTOM_ODBC=/usr/local
     fi
@@ -68338,7 +68507,7 @@ esac
 
   if test "$PHP_IODBC" != "no"; then
     echo $ac_n "checking for iODBC support""... $ac_c" 1>&6
-echo "configure:68342: checking for iODBC support" >&5
+echo "configure:68511: checking for iODBC support" >&5
     if test "$PHP_IODBC" = "yes"; then
       PHP_IODBC=/usr/local
     fi
@@ -68487,7 +68656,7 @@ esac
 
   if test "$PHP_ESOOB" != "no"; then
     echo $ac_n "checking for Easysoft ODBC-ODBC Bridge support""... $ac_c" 1>&6
-echo "configure:68491: checking for Easysoft ODBC-ODBC Bridge support" >&5
+echo "configure:68660: checking for Easysoft ODBC-ODBC Bridge support" >&5
     if test "$PHP_ESOOB" = "yes"; then
       PHP_ESOOB=/usr/local/easysoft/oob/client
     fi
@@ -68554,7 +68723,7 @@ esac
 
   if test "$PHP_UNIXODBC" != "no"; then
     echo $ac_n "checking for unixODBC support""... $ac_c" 1>&6
-echo "configure:68558: checking for unixODBC support" >&5
+echo "configure:68727: checking for unixODBC support" >&5
     if test "$PHP_UNIXODBC" = "yes"; then
       PHP_UNIXODBC=/usr/local
     fi
@@ -68626,7 +68795,7 @@ esac
 
   if test "$PHP_DBMAKER" != "no"; then
     echo $ac_n "checking for DBMaker support""... $ac_c" 1>&6
-echo "configure:68630: checking for DBMaker support" >&5
+echo "configure:68799: checking for DBMaker support" >&5
     if test "$PHP_DBMAKER" = "yes"; then
       # find dbmaker's home directory
       DBMAKER_HOME=`grep "^dbmaker:" /etc/passwd | $AWK -F: '{print $6}'`
@@ -69073,8 +69242,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_ODBC_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/odbc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -69117,9 +69287,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC odbc"
-    else
-      
+        EXT_STATIC="$EXT_STATIC odbc"
+        ;;
+      *)
+        
   
   case ext/odbc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -69162,7 +69333,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC odbc"
   fi
   
@@ -69185,7 +69357,7 @@ fi
 php_enable_pcntl=no
 
 echo $ac_n "checking whether to enable pcntl support""... $ac_c" 1>&6
-echo "configure:69189: checking whether to enable pcntl support" >&5
+echo "configure:69361: checking whether to enable pcntl support" >&5
 # Check whether --enable-pcntl or --disable-pcntl was given.
 if test "${enable_pcntl+set}" = set; then
   enableval="$enable_pcntl"
@@ -69233,12 +69405,12 @@ if test "$PHP_PCNTL" != "no"; then
   for ac_func in fork
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:69237: checking for $ac_func" >&5
+echo "configure:69409: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 69242 "configure"
+#line 69414 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -69261,7 +69433,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:69265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -69292,12 +69464,12 @@ done
   for ac_func in waitpid
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:69296: checking for $ac_func" >&5
+echo "configure:69468: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 69301 "configure"
+#line 69473 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -69320,7 +69492,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:69324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -69351,12 +69523,12 @@ done
   for ac_func in sigaction
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:69355: checking for $ac_func" >&5
+echo "configure:69527: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 69360 "configure"
+#line 69532 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -69379,7 +69551,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:69383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -69410,12 +69582,12 @@ done
   for ac_func in getpriority setpriority wait3
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:69414: checking for $ac_func" >&5
+echo "configure:69586: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 69419 "configure"
+#line 69591 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -69438,7 +69610,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:69442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:69614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -69647,8 +69819,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" = "cli"; then
     PHP_PCNTL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pcntl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -69691,9 +69864,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pcntl"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pcntl"
+        ;;
+      *)
+        
   
   case ext/pcntl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -69736,7 +69910,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pcntl"
   fi
   
@@ -69761,7 +69936,7 @@ fi
 php_enable_pdo=yes
 
 echo $ac_n "checking whether to enable PDO support""... $ac_c" 1>&6
-echo "configure:69765: checking whether to enable PDO support" >&5
+echo "configure:69940: checking whether to enable PDO support" >&5
 # Check whether --enable-pdo or --disable-pdo was given.
 if test "${enable_pdo+set}" = set; then
   enableval="$enable_pdo"
@@ -70029,8 +70204,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -70073,9 +70249,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo"
+        ;;
+      *)
+        
   
   case ext/pdo in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -70118,7 +70295,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo"
   fi
   
@@ -70194,7 +70372,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_dblib=no
 
 echo $ac_n "checking for PDO_DBLIB support via FreeTDS""... $ac_c" 1>&6
-echo "configure:70198: checking for PDO_DBLIB support via FreeTDS" >&5
+echo "configure:70376: checking for PDO_DBLIB support via FreeTDS" >&5
 # Check whether --with-pdo-dblib or --without-pdo-dblib was given.
 if test "${with_pdo_dblib+set}" = set; then
   withval="$with_pdo_dblib"
@@ -70411,13 +70589,13 @@ if test "$PHP_PDO_DBLIB" != "no"; then
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:70415: checking for PDO includes" >&5
+echo "configure:70593: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:70421: checking for PDO includes" >&5
+echo "configure:70599: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -70622,8 +70800,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_DBLIB_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_dblib in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -70666,9 +70845,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_dblib"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_dblib"
+        ;;
+      *)
+        
   
   case ext/pdo_dblib in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -70711,7 +70891,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_dblib"
   fi
   
@@ -70728,7 +70909,7 @@ EOF
   fi
 
   echo $ac_n "checking for dnet_addr in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:70732: checking for dnet_addr in -ldnet_stub" >&5
+echo "configure:70913: checking for dnet_addr in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_addr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -70736,7 +70917,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 70740 "configure"
+#line 70921 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -70747,7 +70928,7 @@ int main() {
 dnet_addr()
 ; return 0; }
 EOF
-if { (eval echo configure:70751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:70932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -70912,7 +71093,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_firebird=no
 
 echo $ac_n "checking for Firebird support for PDO""... $ac_c" 1>&6
-echo "configure:70916: checking for Firebird support for PDO" >&5
+echo "configure:71097: checking for Firebird support for PDO" >&5
 # Check whether --with-pdo-firebird or --without-pdo-firebird was given.
 if test "${with_pdo_firebird+set}" = set; then
   withval="$with_pdo_firebird"
@@ -71062,7 +71243,7 @@ if test "$PHP_PDO_FIREBIRD" != "no"; then
   done
 
   echo $ac_n "checking for isc_detach_database in -lfbclient""... $ac_c" 1>&6
-echo "configure:71066: checking for isc_detach_database in -lfbclient" >&5
+echo "configure:71247: checking for isc_detach_database in -lfbclient" >&5
 ac_lib_var=`echo fbclient'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -71070,7 +71251,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lfbclient  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 71074 "configure"
+#line 71255 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -71081,7 +71262,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:71085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:71266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71208,7 +71389,7 @@ else
   done
 
   echo $ac_n "checking for isc_detach_database in -lgds""... $ac_c" 1>&6
-echo "configure:71212: checking for isc_detach_database in -lgds" >&5
+echo "configure:71393: checking for isc_detach_database in -lgds" >&5
 ac_lib_var=`echo gds'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -71216,7 +71397,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgds  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 71220 "configure"
+#line 71401 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -71227,7 +71408,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:71231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:71412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71354,7 +71535,7 @@ else
   done
 
   echo $ac_n "checking for isc_detach_database in -lib_util""... $ac_c" 1>&6
-echo "configure:71358: checking for isc_detach_database in -lib_util" >&5
+echo "configure:71539: checking for isc_detach_database in -lib_util" >&5
 ac_lib_var=`echo ib_util'_'isc_detach_database | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -71362,7 +71543,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lib_util  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 71366 "configure"
+#line 71547 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -71373,7 +71554,7 @@ int main() {
 isc_detach_database()
 ; return 0; }
 EOF
-if { (eval echo configure:71377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:71558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -71418,13 +71599,13 @@ fi
  
   
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:71422: checking for PDO includes" >&5
+echo "configure:71603: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:71428: checking for PDO includes" >&5
+echo "configure:71609: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -71759,8 +71940,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_FIREBIRD_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_firebird in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -71803,9 +71985,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_firebird"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_firebird"
+        ;;
+      *)
+        
   
   case ext/pdo_firebird in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -71848,7 +72031,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_firebird"
   fi
   
@@ -71899,7 +72083,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_mysql=no
 
 echo $ac_n "checking for MySQL support for PDO""... $ac_c" 1>&6
-echo "configure:71903: checking for MySQL support for PDO" >&5
+echo "configure:72087: checking for MySQL support for PDO" >&5
 # Check whether --with-pdo-mysql or --without-pdo-mysql was given.
 if test "${with_pdo_mysql+set}" = set; then
   withval="$with_pdo_mysql"
@@ -71947,7 +72131,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:71951: checking for the location of libz" >&5
+echo "configure:72135: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -71977,7 +72161,7 @@ EOF
 
 
   echo $ac_n "checking for mysql_config""... $ac_c" 1>&6
-echo "configure:71981: checking for mysql_config" >&5
+echo "configure:72165: checking for mysql_config" >&5
 
   if test -f $PHP_PDO_MYSQL && test -x $PHP_PDO_MYSQL ; then
     PDO_MYSQL_CONFIG=$PHP_PDO_MYSQL
@@ -72011,7 +72195,7 @@ echo "configure:71981: checking for mysql_config" >&5
       # Extract the first word of "sed", so it can be a program name with args.
 set dummy sed; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:72015: checking for $ac_word" >&5
+echo "configure:72199: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SED'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -72059,7 +72243,7 @@ fi
   else
     echo "$ac_t""not found" 1>&6
     echo $ac_n "checking for mysql install under $PDO_MYSQL_DIR""... $ac_c" 1>&6
-echo "configure:72063: checking for mysql install under $PDO_MYSQL_DIR" >&5
+echo "configure:72247: checking for mysql install under $PDO_MYSQL_DIR" >&5
     if test -r $PDO_MYSQL_DIR/include/mysql; then
       PDO_MYSQL_INC_DIR=$PDO_MYSQL_DIR/include/mysql
     else
@@ -72313,7 +72497,7 @@ EOF
   done
 
   echo $ac_n "checking for mysql_query in -l$PDO_MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:72317: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
+echo "configure:72501: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $PDO_MYSQL_LIBNAME'_'mysql_query | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -72321,7 +72505,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$PDO_MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 72325 "configure"
+#line 72509 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -72332,7 +72516,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:72336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:72520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -72685,7 +72869,7 @@ else
   done
 
   echo $ac_n "checking for mysql_query in -l$PDO_MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:72689: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
+echo "configure:72873: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $PDO_MYSQL_LIBNAME'_'mysql_query | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -72693,7 +72877,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$PDO_MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 72697 "configure"
+#line 72881 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -72704,7 +72888,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:72708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:72892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -72859,7 +73043,7 @@ fi
   done
 
   echo $ac_n "checking for mysql_query in -l$PDO_MYSQL_LIBNAME""... $ac_c" 1>&6
-echo "configure:72863: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
+echo "configure:73047: checking for mysql_query in -l$PDO_MYSQL_LIBNAME" >&5
 ac_lib_var=`echo $PDO_MYSQL_LIBNAME'_'mysql_query | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -72867,7 +73051,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$PDO_MYSQL_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 72871 "configure"
+#line 73055 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -72878,7 +73062,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:72882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -73051,12 +73235,12 @@ fi
   for ac_func in mysql_commit mysql_stmt_prepare mysql_next_result mysql_sqlstate
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:73055: checking for $ac_func" >&5
+echo "configure:73239: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 73060 "configure"
+#line 73244 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -73079,7 +73263,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:73083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:73267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -73108,13 +73292,13 @@ done
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:73112: checking for PDO includes" >&5
+echo "configure:73296: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:73118: checking for PDO includes" >&5
+echo "configure:73302: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -73318,8 +73502,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_MYSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_mysql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -73362,9 +73547,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_mysql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_mysql"
+        ;;
+      *)
+        
   
   case ext/pdo_mysql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -73407,7 +73593,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_mysql"
   fi
   
@@ -73470,7 +73657,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_oci=no
 
 echo $ac_n "checking Oracle OCI support for PDO""... $ac_c" 1>&6
-echo "configure:73474: checking Oracle OCI support for PDO" >&5
+echo "configure:73661: checking Oracle OCI support for PDO" >&5
 # Check whether --with-pdo-oci or --without-pdo-oci was given.
 if test "${with_pdo_oci+set}" = set; then
   withval="$with_pdo_oci"
@@ -73515,7 +73702,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_PDO_OCI" != "no"; then
   echo $ac_n "checking Oracle Install-Dir""... $ac_c" 1>&6
-echo "configure:73519: checking Oracle Install-Dir" >&5
+echo "configure:73706: checking Oracle Install-Dir" >&5
   if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then
     PDO_OCI_DIR=$ORACLE_HOME
   else
@@ -73524,7 +73711,7 @@ echo "configure:73519: checking Oracle Install-Dir" >&5
   echo "$ac_t""$PHP_PDO_OCI" 1>&6
 
   echo $ac_n "checking if that is sane""... $ac_c" 1>&6
-echo "configure:73528: checking if that is sane" >&5
+echo "configure:73715: checking if that is sane" >&5
   if test -z "$PDO_OCI_DIR"; then
     { echo "configure: error: 
 You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_HOME.
@@ -73537,7 +73724,7 @@ You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_
     PDO_OCI_IC_PREFIX="`echo $PDO_OCI_DIR | cut -d, -f2`"
     PDO_OCI_IC_VERS="`echo $PDO_OCI_DIR | cut -d, -f3`"
     echo $ac_n "checking for oci.h""... $ac_c" 1>&6
-echo "configure:73541: checking for oci.h" >&5
+echo "configure:73728: checking for oci.h" >&5
     if test -f $PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/client/oci.h ; then
       
   if test "$PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/client" != "/usr/include"; then
@@ -73686,7 +73873,7 @@ echo "configure:73541: checking for oci.h" >&5
   else
     
   echo $ac_n "checking size of long int""... $ac_c" 1>&6
-echo "configure:73690: checking size of long int" >&5
+echo "configure:73877: checking size of long int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -73694,7 +73881,7 @@ else
   ac_cv_sizeof_long_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 73698 "configure"
+#line 73885 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -73705,7 +73892,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:73709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:73896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_int=`cat conftestval`
 else
@@ -73725,7 +73912,7 @@ EOF
 
 
   echo $ac_n "checking if we're on a 64-bit platform""... $ac_c" 1>&6
-echo "configure:73729: checking if we're on a 64-bit platform" >&5
+echo "configure:73916: checking if we're on a 64-bit platform" >&5
   if test "$ac_cv_sizeof_long_int" = "4" ; then
     echo "$ac_t""no" 1>&6
     TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32"
@@ -73735,7 +73922,7 @@ echo "configure:73729: checking if we're on a 64-bit platform" >&5
   fi
 
   echo $ac_n "checking OCI8 libraries dir""... $ac_c" 1>&6
-echo "configure:73739: checking OCI8 libraries dir" >&5
+echo "configure:73926: checking OCI8 libraries dir" >&5
   if test -d "$PDO_OCI_DIR/lib" && test ! -d "$PDO_OCI_DIR/lib32"; then
     PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib"
   elif test ! -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then
@@ -74102,7 +74289,7 @@ echo "configure:73739: checking OCI8 libraries dir" >&5
     fi
     
   echo $ac_n "checking Oracle version""... $ac_c" 1>&6
-echo "configure:74106: checking Oracle version" >&5
+echo "configure:74293: checking Oracle version" >&5
   if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then
     PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/  */:/g' | cut -d: -f 6 | cut -c 2-4`
     test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3
@@ -74793,7 +74980,7 @@ echo "configure:74106: checking Oracle version" >&5
   done
 
   echo $ac_n "checking for OCIEnvCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:74797: checking for OCIEnvCreate in -lclntsh" >&5
+echo "configure:74984: checking for OCIEnvCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -74801,7 +74988,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 74805 "configure"
+#line 74992 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -74812,7 +74999,7 @@ int main() {
 OCIEnvCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:74816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -74946,7 +75133,7 @@ fi
   done
 
   echo $ac_n "checking for OCIEnvNlsCreate in -lclntsh""... $ac_c" 1>&6
-echo "configure:74950: checking for OCIEnvNlsCreate in -lclntsh" >&5
+echo "configure:75137: checking for OCIEnvNlsCreate in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIEnvNlsCreate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -74954,7 +75141,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 74958 "configure"
+#line 75145 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -74965,7 +75152,7 @@ int main() {
 OCIEnvNlsCreate()
 ; return 0; }
 EOF
-if { (eval echo configure:74969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75099,7 +75286,7 @@ fi
   done
 
   echo $ac_n "checking for OCILobIsTemporary in -lclntsh""... $ac_c" 1>&6
-echo "configure:75103: checking for OCILobIsTemporary in -lclntsh" >&5
+echo "configure:75290: checking for OCILobIsTemporary in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCILobIsTemporary | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75107,7 +75294,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75111 "configure"
+#line 75298 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75118,7 +75305,7 @@ int main() {
 OCILobIsTemporary()
 ; return 0; }
 EOF
-if { (eval echo configure:75122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75248,7 +75435,7 @@ else
   done
 
   echo $ac_n "checking for OCILobIsTemporary in -locijdbc8""... $ac_c" 1>&6
-echo "configure:75252: checking for OCILobIsTemporary in -locijdbc8" >&5
+echo "configure:75439: checking for OCILobIsTemporary in -locijdbc8" >&5
 ac_lib_var=`echo ocijdbc8'_'OCILobIsTemporary | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75256,7 +75443,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-locijdbc8  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75260 "configure"
+#line 75447 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75267,7 +75454,7 @@ int main() {
 OCILobIsTemporary()
 ; return 0; }
 EOF
-if { (eval echo configure:75271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75428,7 +75615,7 @@ fi
   done
 
   echo $ac_n "checking for OCICollAssign in -lclntsh""... $ac_c" 1>&6
-echo "configure:75432: checking for OCICollAssign in -lclntsh" >&5
+echo "configure:75619: checking for OCICollAssign in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCICollAssign | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75436,7 +75623,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75440 "configure"
+#line 75627 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75447,7 +75634,7 @@ int main() {
 OCICollAssign()
 ; return 0; }
 EOF
-if { (eval echo configure:75451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75581,7 +75768,7 @@ fi
   done
 
   echo $ac_n "checking for OCIStmtFetch2 in -lclntsh""... $ac_c" 1>&6
-echo "configure:75585: checking for OCIStmtFetch2 in -lclntsh" >&5
+echo "configure:75772: checking for OCIStmtFetch2 in -lclntsh" >&5
 ac_lib_var=`echo clntsh'_'OCIStmtFetch2 | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -75589,7 +75776,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lclntsh  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 75593 "configure"
+#line 75780 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -75600,7 +75787,7 @@ int main() {
 OCIStmtFetch2()
 ; return 0; }
 EOF
-if { (eval echo configure:75604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:75791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -75639,13 +75826,13 @@ fi
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:75643: checking for PDO includes" >&5
+echo "configure:75830: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:75649: checking for PDO includes" >&5
+echo "configure:75836: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -75849,8 +76036,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_OCI_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_oci in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -75893,9 +76081,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_oci"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_oci"
+        ;;
+      *)
+        
   
   case ext/pdo_oci in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -75938,7 +76127,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_oci"
   fi
   
@@ -76013,7 +76203,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_odbc=no
 
 echo $ac_n "checking for ODBC v3 support for PDO""... $ac_c" 1>&6
-echo "configure:76017: checking for ODBC v3 support for PDO" >&5
+echo "configure:76207: checking for ODBC v3 support for PDO" >&5
 # Check whether --with-pdo-odbc or --without-pdo-odbc was given.
 if test "${with_pdo_odbc+set}" = set; then
   withval="$with_pdo_odbc"
@@ -76064,13 +76254,13 @@ if test "$PHP_PDO_ODBC" != "no"; then
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:76068: checking for PDO includes" >&5
+echo "configure:76258: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:76074: checking for PDO includes" >&5
+echo "configure:76264: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -76091,7 +76281,7 @@ echo "$ac_t""$pdo_inc_path" 1>&6
   
 
   echo $ac_n "checking for selected PDO ODBC flavour""... $ac_c" 1>&6
-echo "configure:76095: checking for selected PDO ODBC flavour" >&5
+echo "configure:76285: checking for selected PDO ODBC flavour" >&5
 
   pdo_odbc_flavour="`echo $PHP_PDO_ODBC | cut -d, -f1`"
   pdo_odbc_dir="`echo $PHP_PDO_ODBC | cut -d, -f2`"
@@ -76164,7 +76354,7 @@ echo "configure:76095: checking for selected PDO ODBC flavour" >&5
 
   
   echo $ac_n "checking for odbc.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76168: checking for odbc.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76358: checking for odbc.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/odbc.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76178,7 +76368,7 @@ EOF
 
   
   echo $ac_n "checking for odbcsdk.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76182: checking for odbcsdk.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76372: checking for odbcsdk.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/odbcsdk.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76192,7 +76382,7 @@ EOF
 
   
   echo $ac_n "checking for iodbc.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76196: checking for iodbc.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76386: checking for iodbc.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/iodbc.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76206,7 +76396,7 @@ EOF
 
   
   echo $ac_n "checking for sqlunix.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76210: checking for sqlunix.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76400: checking for sqlunix.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlunix.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76220,7 +76410,7 @@ EOF
 
   
   echo $ac_n "checking for sqltypes.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76224: checking for sqltypes.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76414: checking for sqltypes.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqltypes.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76234,7 +76424,7 @@ EOF
 
   
   echo $ac_n "checking for sqlucode.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76238: checking for sqlucode.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76428: checking for sqlucode.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlucode.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76248,7 +76438,7 @@ EOF
 
   
   echo $ac_n "checking for sql.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76252: checking for sql.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76442: checking for sql.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sql.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76262,7 +76452,7 @@ EOF
 
   
   echo $ac_n "checking for isql.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76266: checking for isql.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76456: checking for isql.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/isql.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76276,7 +76466,7 @@ EOF
 
   
   echo $ac_n "checking for sqlext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76280: checking for sqlext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76470: checking for sqlext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76290,7 +76480,7 @@ EOF
 
   
   echo $ac_n "checking for isqlext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76294: checking for isqlext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76484: checking for isqlext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/isqlext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76304,7 +76494,7 @@ EOF
 
   
   echo $ac_n "checking for udbcext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76308: checking for udbcext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76498: checking for udbcext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/udbcext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76318,7 +76508,7 @@ EOF
 
   
   echo $ac_n "checking for sqlcli1.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76322: checking for sqlcli1.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76512: checking for sqlcli1.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/sqlcli1.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76332,7 +76522,7 @@ EOF
 
   
   echo $ac_n "checking for LibraryManager.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76336: checking for LibraryManager.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76526: checking for LibraryManager.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/LibraryManager.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76346,7 +76536,7 @@ EOF
 
   
   echo $ac_n "checking for cli0core.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76350: checking for cli0core.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76540: checking for cli0core.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0core.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76360,7 +76550,7 @@ EOF
 
   
   echo $ac_n "checking for cli0ext.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76364: checking for cli0ext.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76554: checking for cli0ext.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0ext.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76374,7 +76564,7 @@ EOF
 
   
   echo $ac_n "checking for cli0cli.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76378: checking for cli0cli.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76568: checking for cli0cli.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0cli.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76388,7 +76578,7 @@ EOF
 
   
   echo $ac_n "checking for cli0defs.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76392: checking for cli0defs.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76582: checking for cli0defs.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0defs.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76402,7 +76592,7 @@ EOF
 
   
   echo $ac_n "checking for cli0env.h in $PDO_ODBC_INCDIR""... $ac_c" 1>&6
-echo "configure:76406: checking for cli0env.h in $PDO_ODBC_INCDIR" >&5
+echo "configure:76596: checking for cli0env.h in $PDO_ODBC_INCDIR" >&5
   if test -f "$PDO_ODBC_INCDIR/cli0env.h"; then
     php_pdo_have_header=yes
     cat >> confdefs.h <<\EOF
@@ -76608,7 +76798,7 @@ EOF
   done
 
   echo $ac_n "checking for SQLBindCol in -l$pdo_odbc_def_lib""... $ac_c" 1>&6
-echo "configure:76612: checking for SQLBindCol in -l$pdo_odbc_def_lib" >&5
+echo "configure:76802: checking for SQLBindCol in -l$pdo_odbc_def_lib" >&5
 ac_lib_var=`echo $pdo_odbc_def_lib'_'SQLBindCol | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76616,7 +76806,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$pdo_odbc_def_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76620 "configure"
+#line 76810 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76627,7 +76817,7 @@ int main() {
 SQLBindCol()
 ; return 0; }
 EOF
-if { (eval echo configure:76631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76742,7 +76932,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   done
 
   echo $ac_n "checking for SQLAllocHandle in -l$pdo_odbc_def_lib""... $ac_c" 1>&6
-echo "configure:76746: checking for SQLAllocHandle in -l$pdo_odbc_def_lib" >&5
+echo "configure:76936: checking for SQLAllocHandle in -l$pdo_odbc_def_lib" >&5
 ac_lib_var=`echo $pdo_odbc_def_lib'_'SQLAllocHandle | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -76750,7 +76940,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$pdo_odbc_def_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 76754 "configure"
+#line 76944 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -76761,7 +76951,7 @@ int main() {
 SQLAllocHandle()
 ; return 0; }
 EOF
-if { (eval echo configure:76765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:76955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -76996,8 +77186,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_ODBC_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_odbc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -77040,9 +77231,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_odbc"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_odbc"
+        ;;
+      *)
+        
   
   case ext/pdo_odbc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -77085,7 +77277,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_odbc"
   fi
   
@@ -77136,7 +77329,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_pgsql=no
 
 echo $ac_n "checking for PostgreSQL support for PDO""... $ac_c" 1>&6
-echo "configure:77140: checking for PostgreSQL support for PDO" >&5
+echo "configure:77333: checking for PostgreSQL support for PDO" >&5
 # Check whether --with-pdo-pgsql or --without-pdo-pgsql was given.
 if test "${with_pdo_pgsql+set}" = set; then
   withval="$with_pdo_pgsql"
@@ -77193,7 +77386,7 @@ if test "$PHP_PDO_PGSQL" != "no"; then
 
 
   echo $ac_n "checking for pg_config""... $ac_c" 1>&6
-echo "configure:77197: checking for pg_config" >&5
+echo "configure:77390: checking for pg_config" >&5
   for i in $PHP_PDO_PGSQL $PHP_PDO_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
     if test -x $i/pg_config; then
       PG_CONFIG="$i/pg_config"
@@ -77257,13 +77450,13 @@ EOF
 
 
   echo $ac_n "checking for openssl dependencies""... $ac_c" 1>&6
-echo "configure:77261: checking for openssl dependencies" >&5
+echo "configure:77454: checking for openssl dependencies" >&5
   if grep -q openssl $PGSQL_INCLUDE/libpq-fe.h ; then
     echo "$ac_t""yes" 1>&6
         # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:77267: checking for $ac_word" >&5
+echo "configure:77460: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -77307,7 +77500,7 @@ fi
   old_LDFLAGS=$LDFLAGS
   LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR"
   echo $ac_n "checking for PQescapeString in -lpq""... $ac_c" 1>&6
-echo "configure:77311: checking for PQescapeString in -lpq" >&5
+echo "configure:77504: checking for PQescapeString in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeString | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77315,7 +77508,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77319 "configure"
+#line 77512 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77326,7 +77519,7 @@ int main() {
 PQescapeString()
 ; return 0; }
 EOF
-if { (eval echo configure:77330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77350,7 +77543,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeStringConn in -lpq""... $ac_c" 1>&6
-echo "configure:77354: checking for PQescapeStringConn in -lpq" >&5
+echo "configure:77547: checking for PQescapeStringConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeStringConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77358,7 +77551,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77362 "configure"
+#line 77555 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77369,7 +77562,7 @@ int main() {
 PQescapeStringConn()
 ; return 0; }
 EOF
-if { (eval echo configure:77373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77393,7 +77586,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeByteaConn in -lpq""... $ac_c" 1>&6
-echo "configure:77397: checking for PQescapeByteaConn in -lpq" >&5
+echo "configure:77590: checking for PQescapeByteaConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeByteaConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77401,7 +77594,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77405 "configure"
+#line 77598 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77412,7 +77605,7 @@ int main() {
 PQescapeByteaConn()
 ; return 0; }
 EOF
-if { (eval echo configure:77416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77436,7 +77629,7 @@ else
 fi
 
   echo $ac_n "checking for PQsetnonblocking in -lpq""... $ac_c" 1>&6
-echo "configure:77440: checking for PQsetnonblocking in -lpq" >&5
+echo "configure:77633: checking for PQsetnonblocking in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetnonblocking | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77444,7 +77637,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77448 "configure"
+#line 77641 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77455,7 +77648,7 @@ int main() {
 PQsetnonblocking()
 ; return 0; }
 EOF
-if { (eval echo configure:77459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77479,7 +77672,7 @@ else
 fi
 
   echo $ac_n "checking for PQcmdTuples in -lpq""... $ac_c" 1>&6
-echo "configure:77483: checking for PQcmdTuples in -lpq" >&5
+echo "configure:77676: checking for PQcmdTuples in -lpq" >&5
 ac_lib_var=`echo pq'_'PQcmdTuples | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77487,7 +77680,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77491 "configure"
+#line 77684 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77498,7 +77691,7 @@ int main() {
 PQcmdTuples()
 ; return 0; }
 EOF
-if { (eval echo configure:77502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77522,7 +77715,7 @@ else
 fi
 
   echo $ac_n "checking for PQoidValue in -lpq""... $ac_c" 1>&6
-echo "configure:77526: checking for PQoidValue in -lpq" >&5
+echo "configure:77719: checking for PQoidValue in -lpq" >&5
 ac_lib_var=`echo pq'_'PQoidValue | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77530,7 +77723,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77534 "configure"
+#line 77727 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77541,7 +77734,7 @@ int main() {
 PQoidValue()
 ; return 0; }
 EOF
-if { (eval echo configure:77545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77565,7 +77758,7 @@ else
 fi
 
   echo $ac_n "checking for PQclientEncoding in -lpq""... $ac_c" 1>&6
-echo "configure:77569: checking for PQclientEncoding in -lpq" >&5
+echo "configure:77762: checking for PQclientEncoding in -lpq" >&5
 ac_lib_var=`echo pq'_'PQclientEncoding | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77573,7 +77766,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77577 "configure"
+#line 77770 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77584,7 +77777,7 @@ int main() {
 PQclientEncoding()
 ; return 0; }
 EOF
-if { (eval echo configure:77588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77608,7 +77801,7 @@ else
 fi
 
   echo $ac_n "checking for PQparameterStatus in -lpq""... $ac_c" 1>&6
-echo "configure:77612: checking for PQparameterStatus in -lpq" >&5
+echo "configure:77805: checking for PQparameterStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQparameterStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77616,7 +77809,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77620 "configure"
+#line 77813 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77627,7 +77820,7 @@ int main() {
 PQparameterStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:77631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77651,7 +77844,7 @@ else
 fi
 
   echo $ac_n "checking for PQprotocolVersion in -lpq""... $ac_c" 1>&6
-echo "configure:77655: checking for PQprotocolVersion in -lpq" >&5
+echo "configure:77848: checking for PQprotocolVersion in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprotocolVersion | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77659,7 +77852,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77663 "configure"
+#line 77856 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77670,7 +77863,7 @@ int main() {
 PQprotocolVersion()
 ; return 0; }
 EOF
-if { (eval echo configure:77674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77694,7 +77887,7 @@ else
 fi
 
   echo $ac_n "checking for PQtransactionStatus in -lpq""... $ac_c" 1>&6
-echo "configure:77698: checking for PQtransactionStatus in -lpq" >&5
+echo "configure:77891: checking for PQtransactionStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQtransactionStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77702,7 +77895,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77706 "configure"
+#line 77899 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77713,7 +77906,7 @@ int main() {
 PQtransactionStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:77717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77737,7 +77930,7 @@ else
 fi
 
   echo $ac_n "checking for PQunescapeBytea in -lpq""... $ac_c" 1>&6
-echo "configure:77741: checking for PQunescapeBytea in -lpq" >&5
+echo "configure:77934: checking for PQunescapeBytea in -lpq" >&5
 ac_lib_var=`echo pq'_'PQunescapeBytea | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77745,7 +77938,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77749 "configure"
+#line 77942 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77756,7 +77949,7 @@ int main() {
 PQunescapeBytea()
 ; return 0; }
 EOF
-if { (eval echo configure:77760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77780,7 +77973,7 @@ else
 fi
 
   echo $ac_n "checking for PQExecParams in -lpq""... $ac_c" 1>&6
-echo "configure:77784: checking for PQExecParams in -lpq" >&5
+echo "configure:77977: checking for PQExecParams in -lpq" >&5
 ac_lib_var=`echo pq'_'PQExecParams | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77788,7 +77981,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77792 "configure"
+#line 77985 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77799,7 +77992,7 @@ int main() {
 PQExecParams()
 ; return 0; }
 EOF
-if { (eval echo configure:77803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:77996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77823,7 +78016,7 @@ else
 fi
 
   echo $ac_n "checking for PQresultErrorField in -lpq""... $ac_c" 1>&6
-echo "configure:77827: checking for PQresultErrorField in -lpq" >&5
+echo "configure:78020: checking for PQresultErrorField in -lpq" >&5
 ac_lib_var=`echo pq'_'PQresultErrorField | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77831,7 +78024,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77835 "configure"
+#line 78028 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77842,7 +78035,7 @@ int main() {
 PQresultErrorField()
 ; return 0; }
 EOF
-if { (eval echo configure:77846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:78039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77866,7 +78059,7 @@ else
 fi
 
   echo $ac_n "checking for pg_encoding_to_char in -lpq""... $ac_c" 1>&6
-echo "configure:77870: checking for pg_encoding_to_char in -lpq" >&5
+echo "configure:78063: checking for pg_encoding_to_char in -lpq" >&5
 ac_lib_var=`echo pq'_'pg_encoding_to_char | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77874,7 +78067,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77878 "configure"
+#line 78071 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77885,7 +78078,7 @@ int main() {
 pg_encoding_to_char()
 ; return 0; }
 EOF
-if { (eval echo configure:77889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:78082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -77910,7 +78103,7 @@ fi
 
   
   echo $ac_n "checking for PQprepare in -lpq""... $ac_c" 1>&6
-echo "configure:77914: checking for PQprepare in -lpq" >&5
+echo "configure:78107: checking for PQprepare in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprepare | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -77918,7 +78111,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 77922 "configure"
+#line 78115 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -77929,7 +78122,7 @@ int main() {
 PQprepare()
 ; return 0; }
 EOF
-if { (eval echo configure:77933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:78126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -78092,13 +78285,13 @@ fi
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:78096: checking for PDO includes" >&5
+echo "configure:78289: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:78102: checking for PDO includes" >&5
+echo "configure:78295: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -78302,8 +78495,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_PGSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_pgsql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -78346,9 +78540,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_pgsql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_pgsql"
+        ;;
+      *)
+        
   
   case ext/pdo_pgsql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -78391,7 +78586,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_pgsql"
   fi
   
@@ -78439,7 +78635,7 @@ if test "$PHP_PDO" != "no"; then
 php_with_pdo_sqlite=yes
 
 echo $ac_n "checking for sqlite 3 support for PDO""... $ac_c" 1>&6
-echo "configure:78443: checking for sqlite 3 support for PDO" >&5
+echo "configure:78639: checking for sqlite 3 support for PDO" >&5
 # Check whether --with-pdo-sqlite or --without-pdo-sqlite was given.
 if test "${with_pdo_sqlite+set}" = set; then
   withval="$with_pdo_sqlite"
@@ -78487,13 +78683,13 @@ if test "$PHP_PDO_SQLITE" != "no"; then
   
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:78491: checking for PDO includes" >&5
+echo "configure:78687: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:78497: checking for PDO includes" >&5
+echo "configure:78693: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -78522,7 +78718,7 @@ echo "$ac_t""$pdo_inc_path" 1>&6
       PDO_SQLITE_DIR=$PHP_PDO_SQLITE
     else # search default path list
       echo $ac_n "checking for sqlite3 files in default path""... $ac_c" 1>&6
-echo "configure:78526: checking for sqlite3 files in default path" >&5
+echo "configure:78722: checking for sqlite3 files in default path" >&5
       for i in $SEARCH_PATH ; do
         if test -r $i/$SEARCH_FOR; then
           PDO_SQLITE_DIR=$i
@@ -78668,7 +78864,7 @@ echo "configure:78526: checking for sqlite3 files in default path" >&5
   done
 
   echo $ac_n "checking for $LIBSYMBOL in -l$LIBNAME""... $ac_c" 1>&6
-echo "configure:78672: checking for $LIBSYMBOL in -l$LIBNAME" >&5
+echo "configure:78868: checking for $LIBSYMBOL in -l$LIBNAME" >&5
 ac_lib_var=`echo $LIBNAME'_'$LIBSYMBOL | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -78676,7 +78872,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 78680 "configure"
+#line 78876 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -78687,7 +78883,7 @@ int main() {
 $LIBSYMBOL()
 ; return 0; }
 EOF
-if { (eval echo configure:78691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:78887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -78917,7 +79113,7 @@ fi
   done
 
   echo $ac_n "checking for sqlite3_key in -lsqlite3""... $ac_c" 1>&6
-echo "configure:78921: checking for sqlite3_key in -lsqlite3" >&5
+echo "configure:79117: checking for sqlite3_key in -lsqlite3" >&5
 ac_lib_var=`echo sqlite3'_'sqlite3_key | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -78925,7 +79121,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsqlite3  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 78929 "configure"
+#line 79125 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -78936,7 +79132,7 @@ int main() {
 sqlite3_key()
 ; return 0; }
 EOF
-if { (eval echo configure:78940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79159,8 +79355,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_SQLITE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_sqlite in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -79203,9 +79400,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_sqlite"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_sqlite"
+        ;;
+      *)
+        
   
   case ext/pdo_sqlite in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -79248,7 +79446,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_sqlite"
   fi
   
@@ -79468,8 +79667,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PDO_SQLITE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pdo_sqlite in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -79512,9 +79712,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pdo_sqlite"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pdo_sqlite"
+        ;;
+      *)
+        
   
   case ext/pdo_sqlite in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -79557,7 +79758,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pdo_sqlite"
   fi
   
@@ -79583,7 +79785,7 @@ EOF
   
 
       echo $ac_n "checking size of char *""... $ac_c" 1>&6
-echo "configure:79587: checking size of char *" >&5
+echo "configure:79789: checking size of char *" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_char_p'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -79591,7 +79793,7 @@ else
   ac_cv_sizeof_char_p=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 79595 "configure"
+#line 79797 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -79602,7 +79804,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:79606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:79808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_char_p=`cat conftestval`
 else
@@ -79649,12 +79851,12 @@ EOF
       for ac_func in usleep nanosleep
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:79653: checking for $ac_func" >&5
+echo "configure:79855: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 79658 "configure"
+#line 79860 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -79677,7 +79879,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:79681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:79883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -79705,17 +79907,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:79709: checking for $ac_hdr" >&5
+echo "configure:79911: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 79714 "configure"
+#line 79916 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:79719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:79921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -79839,7 +80041,7 @@ done
   done
 
   echo $ac_n "checking for fdatasync in -lrt""... $ac_c" 1>&6
-echo "configure:79843: checking for fdatasync in -lrt" >&5
+echo "configure:80045: checking for fdatasync in -lrt" >&5
 ac_lib_var=`echo rt'_'fdatasync | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -79847,7 +80049,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lrt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 79851 "configure"
+#line 80053 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -79858,7 +80060,7 @@ int main() {
 fdatasync()
 ; return 0; }
 EOF
-if { (eval echo configure:79862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -79941,7 +80143,7 @@ fi
 php_with_pgsql=no
 
 echo $ac_n "checking for PostgreSQL support""... $ac_c" 1>&6
-echo "configure:79945: checking for PostgreSQL support" >&5
+echo "configure:80147: checking for PostgreSQL support" >&5
 # Check whether --with-pgsql or --without-pgsql was given.
 if test "${with_pgsql+set}" = set; then
   withval="$with_pgsql"
@@ -79998,7 +80200,7 @@ if test "$PHP_PGSQL" != "no"; then
 
 
   echo $ac_n "checking for pg_config""... $ac_c" 1>&6
-echo "configure:80002: checking for pg_config" >&5
+echo "configure:80204: checking for pg_config" >&5
   for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
 	if test -x $i/pg_config; then
       PG_CONFIG="$i/pg_config"
@@ -80066,7 +80268,7 @@ EOF
   old_LDFLAGS=$LDFLAGS
   LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR"
   echo $ac_n "checking for PQescapeString in -lpq""... $ac_c" 1>&6
-echo "configure:80070: checking for PQescapeString in -lpq" >&5
+echo "configure:80272: checking for PQescapeString in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeString | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80074,7 +80276,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80078 "configure"
+#line 80280 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80085,7 +80287,7 @@ int main() {
 PQescapeString()
 ; return 0; }
 EOF
-if { (eval echo configure:80089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80109,7 +80311,7 @@ else
 fi
 
   echo $ac_n "checking for PQunescapeBytea in -lpq""... $ac_c" 1>&6
-echo "configure:80113: checking for PQunescapeBytea in -lpq" >&5
+echo "configure:80315: checking for PQunescapeBytea in -lpq" >&5
 ac_lib_var=`echo pq'_'PQunescapeBytea | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80117,7 +80319,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80121 "configure"
+#line 80323 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80128,7 +80330,7 @@ int main() {
 PQunescapeBytea()
 ; return 0; }
 EOF
-if { (eval echo configure:80132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80152,7 +80354,7 @@ else
 fi
 
   echo $ac_n "checking for PQsetnonblocking in -lpq""... $ac_c" 1>&6
-echo "configure:80156: checking for PQsetnonblocking in -lpq" >&5
+echo "configure:80358: checking for PQsetnonblocking in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetnonblocking | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80160,7 +80362,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80164 "configure"
+#line 80366 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80171,7 +80373,7 @@ int main() {
 PQsetnonblocking()
 ; return 0; }
 EOF
-if { (eval echo configure:80175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80195,7 +80397,7 @@ else
 fi
 
   echo $ac_n "checking for PQcmdTuples in -lpq""... $ac_c" 1>&6
-echo "configure:80199: checking for PQcmdTuples in -lpq" >&5
+echo "configure:80401: checking for PQcmdTuples in -lpq" >&5
 ac_lib_var=`echo pq'_'PQcmdTuples | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80203,7 +80405,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80207 "configure"
+#line 80409 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80214,7 +80416,7 @@ int main() {
 PQcmdTuples()
 ; return 0; }
 EOF
-if { (eval echo configure:80218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80238,7 +80440,7 @@ else
 fi
 
   echo $ac_n "checking for PQoidValue in -lpq""... $ac_c" 1>&6
-echo "configure:80242: checking for PQoidValue in -lpq" >&5
+echo "configure:80444: checking for PQoidValue in -lpq" >&5
 ac_lib_var=`echo pq'_'PQoidValue | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80246,7 +80448,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80250 "configure"
+#line 80452 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80257,7 +80459,7 @@ int main() {
 PQoidValue()
 ; return 0; }
 EOF
-if { (eval echo configure:80261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80281,7 +80483,7 @@ else
 fi
 
   echo $ac_n "checking for PQclientEncoding in -lpq""... $ac_c" 1>&6
-echo "configure:80285: checking for PQclientEncoding in -lpq" >&5
+echo "configure:80487: checking for PQclientEncoding in -lpq" >&5
 ac_lib_var=`echo pq'_'PQclientEncoding | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80289,7 +80491,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80293 "configure"
+#line 80495 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80300,7 +80502,7 @@ int main() {
 PQclientEncoding()
 ; return 0; }
 EOF
-if { (eval echo configure:80304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80324,7 +80526,7 @@ else
 fi
 
   echo $ac_n "checking for PQparameterStatus in -lpq""... $ac_c" 1>&6
-echo "configure:80328: checking for PQparameterStatus in -lpq" >&5
+echo "configure:80530: checking for PQparameterStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQparameterStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80332,7 +80534,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80336 "configure"
+#line 80538 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80343,7 +80545,7 @@ int main() {
 PQparameterStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:80347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80367,7 +80569,7 @@ else
 fi
 
   echo $ac_n "checking for PQprotocolVersion in -lpq""... $ac_c" 1>&6
-echo "configure:80371: checking for PQprotocolVersion in -lpq" >&5
+echo "configure:80573: checking for PQprotocolVersion in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprotocolVersion | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80375,7 +80577,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80379 "configure"
+#line 80581 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80386,7 +80588,7 @@ int main() {
 PQprotocolVersion()
 ; return 0; }
 EOF
-if { (eval echo configure:80390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80410,7 +80612,7 @@ else
 fi
 
   echo $ac_n "checking for PQtransactionStatus in -lpq""... $ac_c" 1>&6
-echo "configure:80414: checking for PQtransactionStatus in -lpq" >&5
+echo "configure:80616: checking for PQtransactionStatus in -lpq" >&5
 ac_lib_var=`echo pq'_'PQtransactionStatus | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80418,7 +80620,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80422 "configure"
+#line 80624 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80429,7 +80631,7 @@ int main() {
 PQtransactionStatus()
 ; return 0; }
 EOF
-if { (eval echo configure:80433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80453,7 +80655,7 @@ else
 fi
 
   echo $ac_n "checking for PQexecParams in -lpq""... $ac_c" 1>&6
-echo "configure:80457: checking for PQexecParams in -lpq" >&5
+echo "configure:80659: checking for PQexecParams in -lpq" >&5
 ac_lib_var=`echo pq'_'PQexecParams | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80461,7 +80663,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80465 "configure"
+#line 80667 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80472,7 +80674,7 @@ int main() {
 PQexecParams()
 ; return 0; }
 EOF
-if { (eval echo configure:80476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80496,7 +80698,7 @@ else
 fi
 
   echo $ac_n "checking for PQprepare in -lpq""... $ac_c" 1>&6
-echo "configure:80500: checking for PQprepare in -lpq" >&5
+echo "configure:80702: checking for PQprepare in -lpq" >&5
 ac_lib_var=`echo pq'_'PQprepare | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80504,7 +80706,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80508 "configure"
+#line 80710 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80515,7 +80717,7 @@ int main() {
 PQprepare()
 ; return 0; }
 EOF
-if { (eval echo configure:80519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80539,7 +80741,7 @@ else
 fi
 
   echo $ac_n "checking for PQexecPrepared in -lpq""... $ac_c" 1>&6
-echo "configure:80543: checking for PQexecPrepared in -lpq" >&5
+echo "configure:80745: checking for PQexecPrepared in -lpq" >&5
 ac_lib_var=`echo pq'_'PQexecPrepared | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80547,7 +80749,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80551 "configure"
+#line 80753 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80558,7 +80760,7 @@ int main() {
 PQexecPrepared()
 ; return 0; }
 EOF
-if { (eval echo configure:80562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80582,7 +80784,7 @@ else
 fi
 
   echo $ac_n "checking for PQresultErrorField in -lpq""... $ac_c" 1>&6
-echo "configure:80586: checking for PQresultErrorField in -lpq" >&5
+echo "configure:80788: checking for PQresultErrorField in -lpq" >&5
 ac_lib_var=`echo pq'_'PQresultErrorField | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80590,7 +80792,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80594 "configure"
+#line 80796 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80601,7 +80803,7 @@ int main() {
 PQresultErrorField()
 ; return 0; }
 EOF
-if { (eval echo configure:80605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80625,7 +80827,7 @@ else
 fi
 
   echo $ac_n "checking for PQsendQueryParams in -lpq""... $ac_c" 1>&6
-echo "configure:80629: checking for PQsendQueryParams in -lpq" >&5
+echo "configure:80831: checking for PQsendQueryParams in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsendQueryParams | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80633,7 +80835,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80637 "configure"
+#line 80839 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80644,7 +80846,7 @@ int main() {
 PQsendQueryParams()
 ; return 0; }
 EOF
-if { (eval echo configure:80648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80668,7 +80870,7 @@ else
 fi
 
   echo $ac_n "checking for PQsendPrepare in -lpq""... $ac_c" 1>&6
-echo "configure:80672: checking for PQsendPrepare in -lpq" >&5
+echo "configure:80874: checking for PQsendPrepare in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsendPrepare | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80676,7 +80878,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80680 "configure"
+#line 80882 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80687,7 +80889,7 @@ int main() {
 PQsendPrepare()
 ; return 0; }
 EOF
-if { (eval echo configure:80691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80711,7 +80913,7 @@ else
 fi
 
   echo $ac_n "checking for PQsendQueryPrepared in -lpq""... $ac_c" 1>&6
-echo "configure:80715: checking for PQsendQueryPrepared in -lpq" >&5
+echo "configure:80917: checking for PQsendQueryPrepared in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsendQueryPrepared | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80719,7 +80921,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80723 "configure"
+#line 80925 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80730,7 +80932,7 @@ int main() {
 PQsendQueryPrepared()
 ; return 0; }
 EOF
-if { (eval echo configure:80734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80754,7 +80956,7 @@ else
 fi
 
   echo $ac_n "checking for PQputCopyData in -lpq""... $ac_c" 1>&6
-echo "configure:80758: checking for PQputCopyData in -lpq" >&5
+echo "configure:80960: checking for PQputCopyData in -lpq" >&5
 ac_lib_var=`echo pq'_'PQputCopyData | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80762,7 +80964,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80766 "configure"
+#line 80968 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80773,7 +80975,7 @@ int main() {
 PQputCopyData()
 ; return 0; }
 EOF
-if { (eval echo configure:80777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:80979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80797,7 +80999,7 @@ else
 fi
 
   echo $ac_n "checking for PQputCopyEnd in -lpq""... $ac_c" 1>&6
-echo "configure:80801: checking for PQputCopyEnd in -lpq" >&5
+echo "configure:81003: checking for PQputCopyEnd in -lpq" >&5
 ac_lib_var=`echo pq'_'PQputCopyEnd | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80805,7 +81007,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80809 "configure"
+#line 81011 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80816,7 +81018,7 @@ int main() {
 PQputCopyEnd()
 ; return 0; }
 EOF
-if { (eval echo configure:80820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80840,7 +81042,7 @@ else
 fi
 
   echo $ac_n "checking for PQgetCopyData in -lpq""... $ac_c" 1>&6
-echo "configure:80844: checking for PQgetCopyData in -lpq" >&5
+echo "configure:81046: checking for PQgetCopyData in -lpq" >&5
 ac_lib_var=`echo pq'_'PQgetCopyData | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80848,7 +81050,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80852 "configure"
+#line 81054 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80859,7 +81061,7 @@ int main() {
 PQgetCopyData()
 ; return 0; }
 EOF
-if { (eval echo configure:80863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80883,7 +81085,7 @@ else
 fi
 
   echo $ac_n "checking for PQfreemem in -lpq""... $ac_c" 1>&6
-echo "configure:80887: checking for PQfreemem in -lpq" >&5
+echo "configure:81089: checking for PQfreemem in -lpq" >&5
 ac_lib_var=`echo pq'_'PQfreemem | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80891,7 +81093,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80895 "configure"
+#line 81097 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80902,7 +81104,7 @@ int main() {
 PQfreemem()
 ; return 0; }
 EOF
-if { (eval echo configure:80906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80926,7 +81128,7 @@ else
 fi
 
   echo $ac_n "checking for PQsetErrorVerbosity in -lpq""... $ac_c" 1>&6
-echo "configure:80930: checking for PQsetErrorVerbosity in -lpq" >&5
+echo "configure:81132: checking for PQsetErrorVerbosity in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetErrorVerbosity | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80934,7 +81136,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80938 "configure"
+#line 81140 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80945,7 +81147,7 @@ int main() {
 PQsetErrorVerbosity()
 ; return 0; }
 EOF
-if { (eval echo configure:80949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -80969,7 +81171,7 @@ else
 fi
 
   echo $ac_n "checking for PQftable in -lpq""... $ac_c" 1>&6
-echo "configure:80973: checking for PQftable in -lpq" >&5
+echo "configure:81175: checking for PQftable in -lpq" >&5
 ac_lib_var=`echo pq'_'PQftable | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -80977,7 +81179,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 80981 "configure"
+#line 81183 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -80988,7 +81190,7 @@ int main() {
 PQftable()
 ; return 0; }
 EOF
-if { (eval echo configure:80992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -81012,7 +81214,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeStringConn in -lpq""... $ac_c" 1>&6
-echo "configure:81016: checking for PQescapeStringConn in -lpq" >&5
+echo "configure:81218: checking for PQescapeStringConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeStringConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -81020,7 +81222,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 81024 "configure"
+#line 81226 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -81031,7 +81233,7 @@ int main() {
 PQescapeStringConn()
 ; return 0; }
 EOF
-if { (eval echo configure:81035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -81055,7 +81257,7 @@ else
 fi
 
   echo $ac_n "checking for PQescapeByteaConn in -lpq""... $ac_c" 1>&6
-echo "configure:81059: checking for PQescapeByteaConn in -lpq" >&5
+echo "configure:81261: checking for PQescapeByteaConn in -lpq" >&5
 ac_lib_var=`echo pq'_'PQescapeByteaConn | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -81063,7 +81265,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 81067 "configure"
+#line 81269 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -81074,7 +81276,7 @@ int main() {
 PQescapeByteaConn()
 ; return 0; }
 EOF
-if { (eval echo configure:81078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -81098,7 +81300,7 @@ else
 fi
 
   echo $ac_n "checking for pg_encoding_to_char in -lpq""... $ac_c" 1>&6
-echo "configure:81102: checking for pg_encoding_to_char in -lpq" >&5
+echo "configure:81304: checking for pg_encoding_to_char in -lpq" >&5
 ac_lib_var=`echo pq'_'pg_encoding_to_char | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -81106,7 +81308,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 81110 "configure"
+#line 81312 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -81117,7 +81319,7 @@ int main() {
 pg_encoding_to_char()
 ; return 0; }
 EOF
-if { (eval echo configure:81121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:81323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -81460,8 +81662,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PGSQL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pgsql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -81504,9 +81707,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pgsql"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pgsql"
+        ;;
+      *)
+        
   
   case ext/pgsql in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -81549,7 +81753,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pgsql"
   fi
   
@@ -81574,7 +81779,7 @@ fi
 php_enable_posix=yes
 
 echo $ac_n "checking whether to enable POSIX-like functions""... $ac_c" 1>&6
-echo "configure:81578: checking whether to enable POSIX-like functions" >&5
+echo "configure:81783: checking whether to enable POSIX-like functions" >&5
 # Check whether --enable-posix or --disable-posix was given.
 if test "${enable_posix+set}" = set; then
   enableval="$enable_posix"
@@ -81806,8 +82011,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_POSIX_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/posix in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -81850,9 +82056,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC posix"
-    else
-      
+        EXT_STATIC="$EXT_STATIC posix"
+        ;;
+      *)
+        
   
   case ext/posix in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -81895,7 +82102,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC posix"
   fi
   
@@ -81916,17 +82124,17 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:81920: checking for $ac_hdr" >&5
+echo "configure:82128: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 81925 "configure"
+#line 82133 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:81930: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:82138: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -81956,12 +82164,12 @@ done
   for ac_func in seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev initgroups getpwuid_r getgrgid_r
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:81960: checking for $ac_func" >&5
+echo "configure:82168: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 81965 "configure"
+#line 82173 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -81984,7 +82192,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:81988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:82196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -82010,14 +82218,14 @@ done
 
 
   echo $ac_n "checking for working ttyname_r() implementation""... $ac_c" 1>&6
-echo "configure:82014: checking for working ttyname_r() implementation" >&5
+echo "configure:82222: checking for working ttyname_r() implementation" >&5
   if test "$cross_compiling" = yes; then
   
     echo "$ac_t""no, cannot detect working ttyname_r() when cross compiling. posix_ttyname() will be thread-unsafe" 1>&6
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 82021 "configure"
+#line 82229 "configure"
 #include "confdefs.h"
 
 #include <unistd.h>
@@ -82030,7 +82238,7 @@ int main(int argc, char *argv[])
 }
   
 EOF
-if { (eval echo configure:82034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:82242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     echo "$ac_t""yes" 1>&6
@@ -82052,13 +82260,13 @@ fi
 
 
   echo $ac_n "checking for utsname.domainname""... $ac_c" 1>&6
-echo "configure:82056: checking for utsname.domainname" >&5
+echo "configure:82264: checking for utsname.domainname" >&5
 if eval "test \"`echo '$''{'ac_cv_have_utsname_domainname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 82062 "configure"
+#line 82270 "configure"
 #include "confdefs.h"
 
       #define _GNU_SOURCE
@@ -82070,7 +82278,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:82074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:82282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       ac_cv_have_utsname_domainname=yes
@@ -82101,7 +82309,7 @@ fi
 php_with_pspell=no
 
 echo $ac_n "checking for PSPELL support""... $ac_c" 1>&6
-echo "configure:82105: checking for PSPELL support" >&5
+echo "configure:82313: checking for PSPELL support" >&5
 # Check whether --with-pspell or --without-pspell was given.
 if test "${with_pspell+set}" = set; then
   withval="$with_pspell"
@@ -82329,8 +82537,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_PSPELL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/pspell in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -82373,9 +82582,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC pspell"
-    else
-      
+        EXT_STATIC="$EXT_STATIC pspell"
+        ;;
+      *)
+        
   
   case ext/pspell in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -82418,7 +82628,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC pspell"
   fi
   
@@ -82651,7 +82862,7 @@ EOF
   done
 
   echo $ac_n "checking for new_aspell_config in -laspell""... $ac_c" 1>&6
-echo "configure:82655: checking for new_aspell_config in -laspell" >&5
+echo "configure:82866: checking for new_aspell_config in -laspell" >&5
 ac_lib_var=`echo aspell'_'new_aspell_config | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -82659,7 +82870,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-laspell  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 82663 "configure"
+#line 82874 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -82670,7 +82881,7 @@ int main() {
 new_aspell_config()
 ; return 0; }
 EOF
-if { (eval echo configure:82674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:82885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -82844,7 +83055,7 @@ fi
 php_with_libedit=no
 
 echo $ac_n "checking for libedit readline replacement""... $ac_c" 1>&6
-echo "configure:82848: checking for libedit readline replacement" >&5
+echo "configure:83059: checking for libedit readline replacement" >&5
 # Check whether --with-libedit or --without-libedit was given.
 if test "${with_libedit+set}" = set; then
   withval="$with_libedit"
@@ -82892,7 +83103,7 @@ if test "$PHP_LIBEDIT" = "no"; then
 php_with_readline=no
 
 echo $ac_n "checking for readline support""... $ac_c" 1>&6
-echo "configure:82896: checking for readline support" >&5
+echo "configure:83107: checking for readline support" >&5
 # Check whether --with-readline or --without-readline was given.
 if test "${with_readline+set}" = set; then
   withval="$with_readline"
@@ -82979,7 +83190,7 @@ if test "$PHP_READLINE" && test "$PHP_READLINE" != "no"; then
 
   PHP_READLINE_LIBS=""
   echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:82983: checking for tgetent in -lncurses" >&5
+echo "configure:83194: checking for tgetent in -lncurses" >&5
 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -82987,7 +83198,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lncurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 82991 "configure"
+#line 83202 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -82998,7 +83209,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:83002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:83213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -83043,7 +83254,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:83047: checking for tgetent in -ltermcap" >&5
+echo "configure:83258: checking for tgetent in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -83051,7 +83262,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltermcap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 83055 "configure"
+#line 83266 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -83062,7 +83273,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:83066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:83277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -83209,7 +83420,7 @@ fi
   done
 
   echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
-echo "configure:83213: checking for readline in -lreadline" >&5
+echo "configure:83424: checking for readline in -lreadline" >&5
 ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -83217,7 +83428,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lreadline  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 83221 "configure"
+#line 83432 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -83228,7 +83439,7 @@ int main() {
 readline()
 ; return 0; }
 EOF
-if { (eval echo configure:83232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:83443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -83457,7 +83668,7 @@ fi
   done
 
   echo $ac_n "checking for rl_callback_read_char in -lreadline""... $ac_c" 1>&6
-echo "configure:83461: checking for rl_callback_read_char in -lreadline" >&5
+echo "configure:83672: checking for rl_callback_read_char in -lreadline" >&5
 ac_lib_var=`echo readline'_'rl_callback_read_char | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -83465,7 +83676,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lreadline  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 83469 "configure"
+#line 83680 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -83476,7 +83687,7 @@ int main() {
 rl_callback_read_char()
 ; return 0; }
 EOF
-if { (eval echo configure:83480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:83691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -83512,254 +83723,6 @@ else
 fi
 
 
-  
-  save_old_LDFLAGS=$LDFLAGS
-  ac_stuff="
-    -L$READLINE_DIR/$PHP_LIBDIR $PHP_READLINE_LIBS
-  "
-  
-  save_ext_shared=$ext_shared
-  ext_shared=yes
-  
-  for ac_i in $ac_stuff; do
-    case $ac_i in
-    -pthread)
-      if test "$ext_shared" = "yes"; then
-        LDFLAGS="$LDFLAGS -pthread"
-      else
-        
-  
-  unique=`echo $ac_i|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$EXTRA_LDFLAGS$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "EXTRA_LDFLAGS$unique=set"
-    EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ac_i"
-  fi
-
-      fi
-    ;;
-    -l*)
-      ac_ii=`echo $ac_i|cut -c 3-`
-      
-  
-  case $ac_ii in
-  c|c_r|pthread*) ;;
-  *) 
-    if test "$ext_shared" = "yes"; then
-        LDFLAGS="$LDFLAGS -l$ac_ii" 
-    else
-      
-  
-  case $ac_ii in
-  c|c_r|pthread*) ;;
-  *) 
-      LIBS="$LIBS -l$ac_ii" 
-   ;;
-  esac
-
-
-    fi
-   ;;
-  esac
-
-
-    ;;
-    -L*)
-      ac_ii=`echo $ac_i|cut -c 3-`
-      
-  if test "$ac_ii" != "/usr/$PHP_LIBDIR" && test "$ac_ii" != "/usr/lib"; then
-    
-  if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then
-    ai_p=$ac_ii
-  else
-    
-    ep_dir="`echo $ac_ii|$SED 's%/*[^/][^/]*/*$%%'`"
-    
-    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
-    ai_p="$ep_realdir/`basename \"$ac_ii\"`"
-  fi
-
-    
-      if test "$ext_shared" = "yes"; then
-        LDFLAGS="-L$ai_p $LDFLAGS"
-        test -n "$ld_runpath_switch" && LDFLAGS="$ld_runpath_switch$ai_p $LDFLAGS"
-      else
-        
-  
-  
-  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "LIBPATH$unique=set"
-    
-    test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
-    LDFLAGS="$LDFLAGS -L$ai_p"
-    PHP_RPATHS="$PHP_RPATHS $ai_p"
-  
-  fi
-
-
-      fi
-    
-  fi
-
-    ;;
-    esac
-  done
-
-  echo $ac_n "checking for add_history in -lhistory""... $ac_c" 1>&6
-echo "configure:83614: checking for add_history in -lhistory" >&5
-ac_lib_var=`echo history'_'add_history | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lhistory  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 83622 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char add_history();
-
-int main() {
-add_history()
-; return 0; }
-EOF
-if { (eval echo configure:83633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  
-    LDFLAGS=$save_old_LDFLAGS
-    ext_shared=$save_ext_shared
-    
-    
-
-  if test "$ext_shared" = "yes"; then
-    READLINE_SHARED_LIBADD="-lhistory $READLINE_SHARED_LIBADD"
-    if test -n "$READLINE_DIR/$PHP_LIBDIR"; then
-      
-  if test "$READLINE_DIR/$PHP_LIBDIR" != "/usr/$PHP_LIBDIR" && test "$READLINE_DIR/$PHP_LIBDIR" != "/usr/lib"; then
-    
-  if test -z "$READLINE_DIR/$PHP_LIBDIR" || echo "$READLINE_DIR/$PHP_LIBDIR" | grep '^/' >/dev/null ; then
-    ai_p=$READLINE_DIR/$PHP_LIBDIR
-  else
-    
-    ep_dir="`echo $READLINE_DIR/$PHP_LIBDIR|$SED 's%/*[^/][^/]*/*$%%'`"
-    
-    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
-    ai_p="$ep_realdir/`basename \"$READLINE_DIR/$PHP_LIBDIR\"`"
-  fi
-
-    
-      if test "$ext_shared" = "yes"; then
-        READLINE_SHARED_LIBADD="-L$ai_p $READLINE_SHARED_LIBADD"
-        test -n "$ld_runpath_switch" && READLINE_SHARED_LIBADD="$ld_runpath_switch$ai_p $READLINE_SHARED_LIBADD"
-      else
-        
-  
-  
-  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "LIBPATH$unique=set"
-    
-    test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
-    LDFLAGS="$LDFLAGS -L$ai_p"
-    PHP_RPATHS="$PHP_RPATHS $ai_p"
-  
-  fi
-
-
-      fi
-    
-  fi
-
-    fi
-  else
-    
-
-  if test -n "$READLINE_DIR/$PHP_LIBDIR"; then
-    
-  if test "$READLINE_DIR/$PHP_LIBDIR" != "/usr/$PHP_LIBDIR" && test "$READLINE_DIR/$PHP_LIBDIR" != "/usr/lib"; then
-    
-  if test -z "$READLINE_DIR/$PHP_LIBDIR" || echo "$READLINE_DIR/$PHP_LIBDIR" | grep '^/' >/dev/null ; then
-    ai_p=$READLINE_DIR/$PHP_LIBDIR
-  else
-    
-    ep_dir="`echo $READLINE_DIR/$PHP_LIBDIR|$SED 's%/*[^/][^/]*/*$%%'`"
-    
-    ep_realdir="`(cd \"$ep_dir\" && pwd)`"
-    ai_p="$ep_realdir/`basename \"$READLINE_DIR/$PHP_LIBDIR\"`"
-  fi
-
-    
-      
-  
-  
-  unique=`echo $ai_p|$SED 's/[^a-zA-Z0-9]/_/g'`
-  
-  cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\""
-  if test -n "$unique" && test "`eval $cmd`" = "" ; then
-    eval "LIBPATH$unique=set"
-    
-    test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
-    LDFLAGS="$LDFLAGS -L$ai_p"
-    PHP_RPATHS="$PHP_RPATHS $ai_p"
-  
-  fi
-
-
-    
-  fi
-
-  fi
-  
-  
-  case history in
-  c|c_r|pthread*) ;;
-  *) 
-      LIBS="-lhistory $LIBS" 
-   ;;
-  esac
-
-
-
-
-  fi
-
-
-  
-  
-else
-  echo "$ac_t""no" 1>&6
-
-    LDFLAGS=$save_old_LDFLAGS
-    ext_shared=$save_ext_shared
-    unset ac_cv_lib_history_add_history
-    
-    { echo "configure: error: history library required by readline not found" 1>&2; exit 1; }
-  
-  
-fi
-
-
   cat >> confdefs.h <<\EOF
 #define HAVE_LIBREADLINE 1
 EOF
@@ -83808,7 +83771,7 @@ elif test "$PHP_LIBEDIT" != "no"; then
 
 
   echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:83812: checking for tgetent in -lncurses" >&5
+echo "configure:83775: checking for tgetent in -lncurses" >&5
 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -83816,7 +83779,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lncurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 83820 "configure"
+#line 83783 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -83827,7 +83790,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:83831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:83794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -83871,7 +83834,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:83875: checking for tgetent in -ltermcap" >&5
+echo "configure:83838: checking for tgetent in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -83879,7 +83842,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltermcap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 83883 "configure"
+#line 83846 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -83890,7 +83853,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:83894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:83857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84036,7 +83999,7 @@ fi
   done
 
   echo $ac_n "checking for readline in -ledit""... $ac_c" 1>&6
-echo "configure:84040: checking for readline in -ledit" >&5
+echo "configure:84003: checking for readline in -ledit" >&5
 ac_lib_var=`echo edit'_'readline | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84044,7 +84007,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ledit  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84048 "configure"
+#line 84011 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84055,7 +84018,7 @@ int main() {
 readline()
 ; return 0; }
 EOF
-if { (eval echo configure:84059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84196,12 +84159,12 @@ if test "$PHP_READLINE" != "no" || test "$PHP_LIBEDIT" != "no"; then
   for ac_func in rl_completion_matches
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:84200: checking for $ac_func" >&5
+echo "configure:84163: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 84205 "configure"
+#line 84168 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -84224,7 +84187,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:84228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -84432,8 +84395,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" = "cli"; then
     PHP_READLINE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/readline in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -84476,9 +84440,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC readline"
-    else
-      
+        EXT_STATIC="$EXT_STATIC readline"
+        ;;
+      *)
+        
   
   case ext/readline in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -84521,7 +84486,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC readline"
   fi
   
@@ -84547,7 +84513,7 @@ fi
 php_with_recode=no
 
 echo $ac_n "checking for recode support""... $ac_c" 1>&6
-echo "configure:84551: checking for recode support" >&5
+echo "configure:84517: checking for recode support" >&5
 # Check whether --with-recode or --without-recode was given.
 if test "${with_recode+set}" = set; then
   withval="$with_recode"
@@ -84714,7 +84680,7 @@ if test "$PHP_RECODE" != "no"; then
   done
 
   echo $ac_n "checking for recode_format_table in -lrecode""... $ac_c" 1>&6
-echo "configure:84718: checking for recode_format_table in -lrecode" >&5
+echo "configure:84684: checking for recode_format_table in -lrecode" >&5
 ac_lib_var=`echo recode'_'recode_format_table | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -84722,7 +84688,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lrecode  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 84726 "configure"
+#line 84692 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -84733,7 +84699,7 @@ int main() {
 recode_format_table()
 ; return 0; }
 EOF
-if { (eval echo configure:84737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -84863,7 +84829,7 @@ else
     LDFLAGS="$LDFLAGS -L$RECODE_DIR/$RECODE_LIB"
     LIBS="$LIBS -lrecode"
     cat > conftest.$ac_ext <<EOF
-#line 84867 "configure"
+#line 84833 "configure"
 #include "confdefs.h"
 
 char *program_name;
@@ -84874,7 +84840,7 @@ recode_format_table();
     
 ; return 0; }
 EOF
-if { (eval echo configure:84878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:84844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
       
@@ -85037,17 +85003,17 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:85041: checking for $ac_hdr" >&5
+echo "configure:85007: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 85046 "configure"
+#line 85012 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:85051: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:85017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -85257,8 +85223,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_RECODE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/recode in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -85301,9 +85268,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC recode"
-    else
-      
+        EXT_STATIC="$EXT_STATIC recode"
+        ;;
+      *)
+        
   
   case ext/recode in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -85346,7 +85314,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC recode"
   fi
   
@@ -85369,7 +85338,7 @@ fi
 php_enable_reflection=yes
 
 echo $ac_n "checking whether to enable reflection support""... $ac_c" 1>&6
-echo "configure:85373: checking whether to enable reflection support" >&5
+echo "configure:85342: checking whether to enable reflection support" >&5
 # Check whether --enable-reflection or --disable-reflection was given.
 if test "${enable_reflection+set}" = set; then
   enableval="$enable_reflection"
@@ -85580,8 +85549,9 @@ EOF
 
   if test "no" != "shared" && test "no" != "yes" && test "" = "cli"; then
     PHP_REFLECTION_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/reflection in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -85624,9 +85594,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC reflection"
-    else
-      
+        EXT_STATIC="$EXT_STATIC reflection"
+        ;;
+      *)
+        
   
   case ext/reflection in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -85669,7 +85640,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC reflection"
   fi
   
@@ -85692,7 +85664,7 @@ fi
 php_enable_session=yes
 
 echo $ac_n "checking whether to enable PHP sessions""... $ac_c" 1>&6
-echo "configure:85696: checking whether to enable PHP sessions" >&5
+echo "configure:85668: checking whether to enable PHP sessions" >&5
 # Check whether --enable-session or --disable-session was given.
 if test "${enable_session+set}" = set; then
   enableval="$enable_session"
@@ -85739,7 +85711,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_mm=no
 
 echo $ac_n "checking for mm support""... $ac_c" 1>&6
-echo "configure:85743: checking for mm support" >&5
+echo "configure:85715: checking for mm support" >&5
 # Check whether --with-mm or --without-mm was given.
 if test "${with_mm+set}" = set; then
   withval="$with_mm"
@@ -85764,7 +85736,7 @@ echo "$ac_t""$ext_output" 1>&6
 if test "$PHP_SESSION" != "no"; then
   
   echo $ac_n "checking whether pwrite works""... $ac_c" 1>&6
-echo "configure:85768: checking whether pwrite works" >&5
+echo "configure:85740: checking whether pwrite works" >&5
 if eval "test \"`echo '$''{'ac_cv_pwrite'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -85776,7 +85748,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 85780 "configure"
+#line 85752 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -85797,7 +85769,7 @@ else
 
   
 EOF
-if { (eval echo configure:85801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:85773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pwrite=yes
@@ -85822,7 +85794,7 @@ fi
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 85826 "configure"
+#line 85798 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -85843,7 +85815,7 @@ ssize_t pwrite(int, void *, size_t, off64_t);
 
   
 EOF
-if { (eval echo configure:85847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:85819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pwrite=yes
@@ -85884,7 +85856,7 @@ EOF
 
   
   echo $ac_n "checking whether pread works""... $ac_c" 1>&6
-echo "configure:85888: checking whether pread works" >&5
+echo "configure:85860: checking whether pread works" >&5
 if eval "test \"`echo '$''{'ac_cv_pread'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -85897,7 +85869,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 85901 "configure"
+#line 85873 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -85917,7 +85889,7 @@ else
     }
   
 EOF
-if { (eval echo configure:85921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:85893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pread=yes
@@ -85944,7 +85916,7 @@ fi
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 85948 "configure"
+#line 85920 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -85964,7 +85936,7 @@ ssize_t pread(int, void *, size_t, off64_t);
     }
   
 EOF
-if { (eval echo configure:85968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:85940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_cv_pread=yes
@@ -86188,8 +86160,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SESSION_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/session in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -86232,9 +86205,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC session"
-    else
-      
+        EXT_STATIC="$EXT_STATIC session"
+        ;;
+      *)
+        
   
   case ext/session in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -86277,7 +86251,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC session"
   fi
   
@@ -86487,7 +86462,7 @@ fi
 php_enable_shmop=no
 
 echo $ac_n "checking whether to enable shmop support""... $ac_c" 1>&6
-echo "configure:86491: checking whether to enable shmop support" >&5
+echo "configure:86466: checking whether to enable shmop support" >&5
 # Check whether --enable-shmop or --disable-shmop was given.
 if test "${enable_shmop+set}" = set; then
   enableval="$enable_shmop"
@@ -86719,8 +86694,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SHMOP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/shmop in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -86763,9 +86739,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC shmop"
-    else
-      
+        EXT_STATIC="$EXT_STATIC shmop"
+        ;;
+      *)
+        
   
   case ext/shmop in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -86808,7 +86785,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC shmop"
   fi
   
@@ -86831,7 +86809,7 @@ fi
 php_enable_simplexml=yes
 
 echo $ac_n "checking whether to enable SimpleXML support""... $ac_c" 1>&6
-echo "configure:86835: checking whether to enable SimpleXML support" >&5
+echo "configure:86813: checking whether to enable SimpleXML support" >&5
 # Check whether --enable-simplexml or --disable-simplexml was given.
 if test "${enable_simplexml+set}" = set; then
   enableval="$enable_simplexml"
@@ -86879,7 +86857,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:86883: checking libxml2 install dir" >&5
+echo "configure:86861: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -86910,7 +86888,7 @@ if test "$PHP_SIMPLEXML" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:86914: checking for xml2-config path" >&5
+echo "configure:86892: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87068,7 +87046,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:87072: checking whether libxml build works" >&5
+echo "configure:87050: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87084,7 +87062,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 87088 "configure"
+#line 87066 "configure"
 #include "confdefs.h"
 
     
@@ -87095,7 +87073,7 @@ else
     }
   
 EOF
-if { (eval echo configure:87099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:87077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -87318,8 +87296,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SIMPLEXML_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/simplexml in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -87362,9 +87341,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC simplexml"
-    else
-      
+        EXT_STATIC="$EXT_STATIC simplexml"
+        ;;
+      *)
+        
   
   case ext/simplexml in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -87407,7 +87387,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC simplexml"
   fi
   
@@ -87480,7 +87461,7 @@ fi
 php_with_snmp=no
 
 echo $ac_n "checking for SNMP support""... $ac_c" 1>&6
-echo "configure:87484: checking for SNMP support" >&5
+echo "configure:87465: checking for SNMP support" >&5
 # Check whether --with-snmp or --without-snmp was given.
 if test "${with_snmp+set}" = set; then
   withval="$with_snmp"
@@ -87527,7 +87508,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_openssl_dir=no
 
 echo $ac_n "checking OpenSSL dir for SNMP""... $ac_c" 1>&6
-echo "configure:87531: checking OpenSSL dir for SNMP" >&5
+echo "configure:87512: checking OpenSSL dir for SNMP" >&5
 # Check whether --with-openssl-dir or --without-openssl-dir was given.
 if test "${with_openssl_dir+set}" = set; then
   withval="$with_openssl_dir"
@@ -87553,7 +87534,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_ucd_snmp_hack=no
 
 echo $ac_n "checking whether to enable UCD SNMP hack""... $ac_c" 1>&6
-echo "configure:87557: checking whether to enable UCD SNMP hack" >&5
+echo "configure:87538: checking whether to enable UCD SNMP hack" >&5
 # Check whether --enable-ucd-snmp-hack or --disable-ucd-snmp-hack was given.
 if test "${enable_ucd_snmp_hack+set}" = set; then
   enableval="$enable_ucd_snmp_hack"
@@ -87581,7 +87562,7 @@ if test "$PHP_SNMP" != "no"; then
     # Extract the first word of "net-snmp-config", so it can be a program name with args.
 set dummy net-snmp-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:87585: checking for $ac_word" >&5
+echo "configure:87566: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SNMP_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -87782,17 +87763,17 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:87786: checking for $ac_hdr" >&5
+echo "configure:87767: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 87791 "configure"
+#line 87772 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:87796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:87777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -87820,9 +87801,9 @@ done
 
     if test "$ac_cv_header_default_store_h" = "yes"; then
       echo $ac_n "checking for OpenSSL support in SNMP libraries""... $ac_c" 1>&6
-echo "configure:87824: checking for OpenSSL support in SNMP libraries" >&5
+echo "configure:87805: checking for OpenSSL support in SNMP libraries" >&5
       cat > conftest.$ac_ext <<EOF
-#line 87826 "configure"
+#line 87807 "configure"
 #include "confdefs.h"
 
 #include <ucd-snmp-config.h>
@@ -87877,7 +87858,7 @@ rm -f conftest*
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:87881: checking for $ac_word" >&5
+echo "configure:87862: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -88082,9 +88063,9 @@ fi
     old_CPPFLAGS=$CPPFLAGS
     CPPFLAGS=-I$OPENSSL_INCDIR
     echo $ac_n "checking for OpenSSL version""... $ac_c" 1>&6
-echo "configure:88086: checking for OpenSSL version" >&5
+echo "configure:88067: checking for OpenSSL version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 88088 "configure"
+#line 88069 "configure"
 #include "confdefs.h"
 
 #include <openssl/opensslv.h>
@@ -88239,7 +88220,7 @@ rm -f conftest*
   done
 
   echo $ac_n "checking for CRYPTO_free in -lcrypto""... $ac_c" 1>&6
-echo "configure:88243: checking for CRYPTO_free in -lcrypto" >&5
+echo "configure:88224: checking for CRYPTO_free in -lcrypto" >&5
 ac_lib_var=`echo crypto'_'CRYPTO_free | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88247,7 +88228,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypto  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88251 "configure"
+#line 88232 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88258,7 +88239,7 @@ int main() {
 CRYPTO_free()
 ; return 0; }
 EOF
-if { (eval echo configure:88262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88415,7 +88396,7 @@ fi
   done
 
   echo $ac_n "checking for SSL_CTX_set_ssl_version in -lssl""... $ac_c" 1>&6
-echo "configure:88419: checking for SSL_CTX_set_ssl_version in -lssl" >&5
+echo "configure:88400: checking for SSL_CTX_set_ssl_version in -lssl" >&5
 ac_lib_var=`echo ssl'_'SSL_CTX_set_ssl_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88423,7 +88404,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lssl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88427 "configure"
+#line 88408 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88434,7 +88415,7 @@ int main() {
 SSL_CTX_set_ssl_version()
 ; return 0; }
 EOF
-if { (eval echo configure:88438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88547,7 +88528,7 @@ else
     fi
 
     echo $ac_n "checking for kstat_read in -lkstat""... $ac_c" 1>&6
-echo "configure:88551: checking for kstat_read in -lkstat" >&5
+echo "configure:88532: checking for kstat_read in -lkstat" >&5
 ac_lib_var=`echo kstat'_'kstat_read | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88555,7 +88536,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lkstat  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88559 "configure"
+#line 88540 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88566,7 +88547,7 @@ int main() {
 kstat_read()
 ; return 0; }
 EOF
-if { (eval echo configure:88570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88837,7 +88818,7 @@ fi
   done
 
   echo $ac_n "checking for snmp_parse_oid in -l$SNMP_LIBNAME""... $ac_c" 1>&6
-echo "configure:88841: checking for snmp_parse_oid in -l$SNMP_LIBNAME" >&5
+echo "configure:88822: checking for snmp_parse_oid in -l$SNMP_LIBNAME" >&5
 ac_lib_var=`echo $SNMP_LIBNAME'_'snmp_parse_oid | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88845,7 +88826,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$SNMP_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 88849 "configure"
+#line 88830 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -88856,7 +88837,7 @@ int main() {
 snmp_parse_oid()
 ; return 0; }
 EOF
-if { (eval echo configure:88860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -88990,7 +88971,7 @@ fi
   done
 
   echo $ac_n "checking for init_snmp in -l$SNMP_LIBNAME""... $ac_c" 1>&6
-echo "configure:88994: checking for init_snmp in -l$SNMP_LIBNAME" >&5
+echo "configure:88975: checking for init_snmp in -l$SNMP_LIBNAME" >&5
 ac_lib_var=`echo $SNMP_LIBNAME'_'init_snmp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -88998,7 +88979,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$SNMP_LIBNAME  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 89002 "configure"
+#line 88983 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -89009,7 +88990,7 @@ int main() {
 init_snmp()
 ; return 0; }
 EOF
-if { (eval echo configure:89013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:88994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -89238,8 +89219,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SNMP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/snmp in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -89282,9 +89264,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC snmp"
-    else
-      
+        EXT_STATIC="$EXT_STATIC snmp"
+        ;;
+      *)
+        
   
   case ext/snmp in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -89327,7 +89310,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC snmp"
   fi
   
@@ -89353,7 +89337,7 @@ fi
 php_enable_soap=no
 
 echo $ac_n "checking whether to enable SOAP support""... $ac_c" 1>&6
-echo "configure:89357: checking whether to enable SOAP support" >&5
+echo "configure:89341: checking whether to enable SOAP support" >&5
 # Check whether --enable-soap or --disable-soap was given.
 if test "${enable_soap+set}" = set; then
   enableval="$enable_soap"
@@ -89401,7 +89385,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:89405: checking libxml2 install dir" >&5
+echo "configure:89389: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -89432,7 +89416,7 @@ if test "$PHP_SOAP" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:89436: checking for xml2-config path" >&5
+echo "configure:89420: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -89590,7 +89574,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:89594: checking whether libxml build works" >&5
+echo "configure:89578: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -89606,7 +89590,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 89610 "configure"
+#line 89594 "configure"
 #include "confdefs.h"
 
     
@@ -89617,7 +89601,7 @@ else
     }
   
 EOF
-if { (eval echo configure:89621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:89605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -89840,8 +89824,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SOAP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/soap in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -89884,9 +89869,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC soap"
-    else
-      
+        EXT_STATIC="$EXT_STATIC soap"
+        ;;
+      *)
+        
   
   case ext/soap in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -89929,7 +89915,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC soap"
   fi
   
@@ -89964,7 +89951,7 @@ fi
 php_enable_sockets=no
 
 echo $ac_n "checking whether to enable sockets support""... $ac_c" 1>&6
-echo "configure:89968: checking whether to enable sockets support" >&5
+echo "configure:89955: checking whether to enable sockets support" >&5
 # Check whether --enable-sockets or --disable-sockets was given.
 if test "${enable_sockets+set}" = set; then
   enableval="$enable_sockets"
@@ -90009,13 +89996,13 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_SOCKETS" != "no"; then
     echo $ac_n "checking for struct cmsghdr""... $ac_c" 1>&6
-echo "configure:90013: checking for struct cmsghdr" >&5
+echo "configure:90000: checking for struct cmsghdr" >&5
 if eval "test \"`echo '$''{'ac_cv_cmsghdr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 90019 "configure"
+#line 90006 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -90024,7 +90011,7 @@ int main() {
 struct cmsghdr s; s
 ; return 0; }
 EOF
-if { (eval echo configure:90028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:90015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cmsghdr=yes
 else
@@ -90049,12 +90036,12 @@ EOF
   for ac_func in hstrerror socketpair
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:90053: checking for $ac_func" >&5
+echo "configure:90040: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 90058 "configure"
+#line 90045 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -90077,7 +90064,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:90081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:90068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -90105,17 +90092,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:90109: checking for $ac_hdr" >&5
+echo "configure:90096: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 90114 "configure"
+#line 90101 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:90119: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:90106: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -90142,7 +90129,7 @@ fi
 done
 
   cat > conftest.$ac_ext <<EOF
-#line 90146 "configure"
+#line 90133 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -90152,7 +90139,7 @@ int main() {
 static struct msghdr tp; int n = (int) tp.msg_flags; return n
 ; return 0; }
 EOF
-if { (eval echo configure:90156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:90143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -90354,8 +90341,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SOCKETS_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sockets in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -90398,9 +90386,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sockets"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sockets"
+        ;;
+      *)
+        
   
   case ext/sockets in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -90443,7 +90432,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sockets"
   fi
   
@@ -90466,7 +90456,7 @@ fi
 php_enable_spl=yes
 
 echo $ac_n "checking enable SPL suppport""... $ac_c" 1>&6
-echo "configure:90470: checking enable SPL suppport" >&5
+echo "configure:90460: checking enable SPL suppport" >&5
 # Check whether --enable-spl or --disable-spl was given.
 if test "${enable_spl+set}" = set; then
   enableval="$enable_spl"
@@ -90511,7 +90501,7 @@ echo "$ac_t""$ext_output" 1>&6
 
 if test "$PHP_SPL" != "no"; then
   echo $ac_n "checking whether zend_object_value is packed""... $ac_c" 1>&6
-echo "configure:90515: checking whether zend_object_value is packed" >&5
+echo "configure:90505: checking whether zend_object_value is packed" >&5
   old_CPPFLAGS=$CPPFLAGS
   CPPFLAGS="$INCLUDES -I$abs_srcdir $CPPFLAGS"
   if test "$cross_compiling" = yes; then
@@ -90521,7 +90511,7 @@ echo "configure:90515: checking whether zend_object_value is packed" >&5
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 90525 "configure"
+#line 90515 "configure"
 #include "confdefs.h"
 
 #include "Zend/zend_types.h"
@@ -90530,7 +90520,7 @@ int main(int argc, char **argv) {
 }
   
 EOF
-if { (eval echo configure:90534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:90524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     ac_result=1
@@ -90741,8 +90731,9 @@ EOF
 
   if test "no" != "shared" && test "no" != "yes" && test "" = "cli"; then
     PHP_SPL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/spl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -90785,9 +90776,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC spl"
-    else
-      
+        EXT_STATIC="$EXT_STATIC spl"
+        ;;
+      *)
+        
   
   case ext/spl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -90830,7 +90822,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC spl"
   fi
   
@@ -90892,7 +90885,7 @@ fi
 php_with_sqlite=yes
 
 echo $ac_n "checking for sqlite support""... $ac_c" 1>&6
-echo "configure:90896: checking for sqlite support" >&5
+echo "configure:90889: checking for sqlite support" >&5
 # Check whether --with-sqlite or --without-sqlite was given.
 if test "${with_sqlite+set}" = set; then
   withval="$with_sqlite"
@@ -90939,7 +90932,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_enable_sqlite_utf8=no
 
 echo $ac_n "checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)""... $ac_c" 1>&6
-echo "configure:90943: checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)" >&5
+echo "configure:90936: checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)" >&5
 # Check whether --enable-sqlite-utf8 or --disable-sqlite-utf8 was given.
 if test "${enable_sqlite_utf8+set}" = set; then
   enableval="$enable_sqlite_utf8"
@@ -90970,13 +90963,13 @@ if test "$PHP_SQLITE" != "no"; then
   if test "$PHP_PDO" != "no"; then
     
   echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:90974: checking for PDO includes" >&5
+echo "configure:90967: checking for PDO includes" >&5
 if eval "test \"`echo '$''{'pdo_inc_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     echo $ac_n "checking for PDO includes""... $ac_c" 1>&6
-echo "configure:90980: checking for PDO includes" >&5
+echo "configure:90973: checking for PDO includes" >&5
     if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
       pdo_inc_path=$abs_srcdir/ext
     elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
@@ -91010,7 +91003,7 @@ EOF
       SQLITE_DIR=$PHP_SQLITE
     else # search default path list
       echo $ac_n "checking for sqlite files in default path""... $ac_c" 1>&6
-echo "configure:91014: checking for sqlite files in default path" >&5
+echo "configure:91007: checking for sqlite files in default path" >&5
       for i in $SEARCH_PATH ; do
         if test -r $i/$SEARCH_FOR; then
           SQLITE_DIR=$i
@@ -91122,7 +91115,7 @@ echo "configure:91014: checking for sqlite files in default path" >&5
   done
 
   echo $ac_n "checking for sqlite_open in -lsqlite""... $ac_c" 1>&6
-echo "configure:91126: checking for sqlite_open in -lsqlite" >&5
+echo "configure:91119: checking for sqlite_open in -lsqlite" >&5
 ac_lib_var=`echo sqlite'_'sqlite_open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -91130,7 +91123,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsqlite  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 91134 "configure"
+#line 91127 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -91141,7 +91134,7 @@ int main() {
 sqlite_open()
 ; return 0; }
 EOF
-if { (eval echo configure:91145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -91314,7 +91307,7 @@ fi
   # Extract the first word of "lemon", so it can be a program name with args.
 set dummy lemon; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:91318: checking for $ac_word" >&5
+echo "configure:91311: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEMON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91342,7 +91335,7 @@ fi
 
   if test "$LEMON"; then
     echo $ac_n "checking for lemon version""... $ac_c" 1>&6
-echo "configure:91346: checking for lemon version" >&5
+echo "configure:91339: checking for lemon version" >&5
 if eval "test \"`echo '$''{'php_cv_lemon_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91573,8 +91566,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SQLITE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sqlite in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -91617,9 +91611,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sqlite"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sqlite"
+        ;;
+      *)
+        
   
   case ext/sqlite in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -91662,7 +91657,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sqlite"
   fi
   
@@ -91752,7 +91748,7 @@ but you've either not enabled pdo, or have disabled it.
   
 
     echo $ac_n "checking size of char *""... $ac_c" 1>&6
-echo "configure:91756: checking size of char *" >&5
+echo "configure:91752: checking size of char *" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_char_p'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91760,7 +91756,7 @@ else
   ac_cv_sizeof_char_p=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 91764 "configure"
+#line 91760 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -91771,7 +91767,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:91775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_char_p=`cat conftestval`
 else
@@ -91833,12 +91829,12 @@ EOF
   for ac_func in usleep nanosleep
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:91837: checking for $ac_func" >&5
+echo "configure:91833: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 91842 "configure"
+#line 91838 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -91861,7 +91857,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:91865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:91861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -91889,17 +91885,17 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:91893: checking for $ac_hdr" >&5
+echo "configure:91889: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 91898 "configure"
+#line 91894 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:91903: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:91899: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -91930,7 +91926,7 @@ fi
 
 
 echo $ac_n "checking whether flush should be called explicitly after a buffered io""... $ac_c" 1>&6
-echo "configure:91934: checking whether flush should be called explicitly after a buffered io" >&5
+echo "configure:91930: checking whether flush should be called explicitly after a buffered io" >&5
 if eval "test \"`echo '$''{'ac_cv_flush_io'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -91941,7 +91937,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 91945 "configure"
+#line 91941 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -91979,7 +91975,7 @@ int main(int argc, char **argv)
 }
 
 EOF
-if { (eval echo configure:91983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:91979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_flush_io=no
@@ -92007,7 +92003,7 @@ fi
 
 if test "$ac_cv_func_crypt" = "no"; then
   echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:92011: checking for crypt in -lcrypt" >&5
+echo "configure:92007: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -92015,7 +92011,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 92019 "configure"
+#line 92015 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -92026,7 +92022,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:92030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -92055,7 +92051,7 @@ fi
 fi
   
 echo $ac_n "checking for standard DES crypt""... $ac_c" 1>&6
-echo "configure:92059: checking for standard DES crypt" >&5
+echo "configure:92055: checking for standard DES crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_des'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -92066,7 +92062,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 92070 "configure"
+#line 92066 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -92085,7 +92081,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:92089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_des=yes
@@ -92115,7 +92111,7 @@ EOF
 
 
 echo $ac_n "checking for extended DES crypt""... $ac_c" 1>&6
-echo "configure:92119: checking for extended DES crypt" >&5
+echo "configure:92115: checking for extended DES crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_ext_des'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -92126,7 +92122,7 @@ else
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 92130 "configure"
+#line 92126 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -92145,7 +92141,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:92149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_ext_des=yes
@@ -92175,7 +92171,7 @@ EOF
 
 
 echo $ac_n "checking for MD5 crypt""... $ac_c" 1>&6
-echo "configure:92179: checking for MD5 crypt" >&5
+echo "configure:92175: checking for MD5 crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_md5'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -92186,7 +92182,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 92190 "configure"
+#line 92186 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -92214,7 +92210,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:92218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_md5=yes
@@ -92273,7 +92269,7 @@ EOF
 
 
 echo $ac_n "checking for Blowfish crypt""... $ac_c" 1>&6
-echo "configure:92277: checking for Blowfish crypt" >&5
+echo "configure:92273: checking for Blowfish crypt" >&5
 if eval "test \"`echo '$''{'ac_cv_crypt_blowfish'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -92284,7 +92280,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 92288 "configure"
+#line 92284 "configure"
 #include "confdefs.h"
 
 #if HAVE_UNISTD_H
@@ -92309,7 +92305,7 @@ main() {
 #endif
 }
 EOF
-if { (eval echo configure:92313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_crypt_blowfish=yes
@@ -92341,12 +92337,12 @@ EOF
 for ac_func in getcwd getwd asinh acosh atanh log1p hypot glob strfmon nice fpclass isinf isnan
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:92345: checking for $ac_func" >&5
+echo "configure:92341: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 92350 "configure"
+#line 92346 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -92369,7 +92365,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:92373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -92394,7 +92390,7 @@ fi
 done
 
 echo $ac_n "checking for working fnmatch""... $ac_c" 1>&6
-echo "configure:92398: checking for working fnmatch" >&5
+echo "configure:92394: checking for working fnmatch" >&5
 if eval "test \"`echo '$''{'ac_cv_func_fnmatch_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -92405,11 +92401,11 @@ if test "$cross_compiling" = yes; then
   ac_cv_func_fnmatch_works=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 92409 "configure"
+#line 92405 "configure"
 #include "confdefs.h"
 main() { exit (fnmatch ("a*", "abc", 0) != 0); }
 EOF
-if { (eval echo configure:92413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_fnmatch_works=yes
 else
@@ -92540,13 +92536,13 @@ elif test "$REGEX_TYPE" = "system"; then
 EOF
 
     echo $ac_n "checking whether field re_magic exists in struct regex_t""... $ac_c" 1>&6
-echo "configure:92544: checking whether field re_magic exists in struct regex_t" >&5
+echo "configure:92540: checking whether field re_magic exists in struct regex_t" >&5
 if eval "test \"`echo '$''{'ac_cv_regex_t_re_magic'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 92550 "configure"
+#line 92546 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <regex.h>
@@ -92554,7 +92550,7 @@ int main() {
 regex_t rt; rt.re_magic;
 ; return 0; }
 EOF
-if { (eval echo configure:92558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:92554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_regex_t_re_magic=yes
 else
@@ -92575,11 +92571,11 @@ EOF
   fi 
 fi   
 echo $ac_n "checking which regex library to use""... $ac_c" 1>&6
-echo "configure:92579: checking which regex library to use" >&5
+echo "configure:92575: checking which regex library to use" >&5
 echo "$ac_t""$REGEX_TYPE" 1>&6
 
 echo $ac_n "checking whether rounding works as expected""... $ac_c" 1>&6
-echo "configure:92583: checking whether rounding works as expected" >&5
+echo "configure:92579: checking whether rounding works as expected" >&5
 if test "$cross_compiling" = yes; then
   
   PHP_ROUND_FUZZ=0.50000000001
@@ -92587,7 +92583,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 92591 "configure"
+#line 92587 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -92600,7 +92596,7 @@ else
   }
 
 EOF
-if { (eval echo configure:92604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   PHP_ROUND_FUZZ=0.5
@@ -92630,12 +92626,12 @@ else
 for ac_func in fork CreateProcess
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:92634: checking for $ac_func" >&5
+echo "configure:92630: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 92639 "configure"
+#line 92635 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -92658,7 +92654,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:92662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -92690,7 +92686,7 @@ done
 fi
 
 echo $ac_n "checking if your OS can spawn processes with inherited handles""... $ac_c" 1>&6
-echo "configure:92694: checking if your OS can spawn processes with inherited handles" >&5
+echo "configure:92690: checking if your OS can spawn processes with inherited handles" >&5
 if test "$php_can_support_proc_open" = "yes"; then
   echo "$ac_t""yes" 1>&6
   cat >> confdefs.h <<\EOF
@@ -92715,12 +92711,12 @@ fi
   unset found
   
   echo $ac_n "checking for res_nmkquery""... $ac_c" 1>&6
-echo "configure:92719: checking for res_nmkquery" >&5
+echo "configure:92715: checking for res_nmkquery" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_nmkquery'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 92724 "configure"
+#line 92720 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_nmkquery(); below.  */
@@ -92743,7 +92739,7 @@ res_nmkquery();
 
 ; return 0; }
 EOF
-if { (eval echo configure:92747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_nmkquery=yes"
 else
@@ -92761,12 +92757,12 @@ if eval "test \"`echo '$ac_cv_func_'res_nmkquery`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __res_nmkquery""... $ac_c" 1>&6
-echo "configure:92765: checking for __res_nmkquery" >&5
+echo "configure:92761: checking for __res_nmkquery" >&5
 if eval "test \"`echo '$''{'ac_cv_func___res_nmkquery'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 92770 "configure"
+#line 92766 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __res_nmkquery(); below.  */
@@ -92789,7 +92785,7 @@ __res_nmkquery();
 
 ; return 0; }
 EOF
-if { (eval echo configure:92793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___res_nmkquery=yes"
 else
@@ -92827,7 +92823,7 @@ EOF
   unset ac_cv_lib_resolv___res_nmkquery
   unset found
   echo $ac_n "checking for res_nmkquery in -lresolv""... $ac_c" 1>&6
-echo "configure:92831: checking for res_nmkquery in -lresolv" >&5
+echo "configure:92827: checking for res_nmkquery in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_nmkquery | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -92835,7 +92831,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 92839 "configure"
+#line 92835 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -92846,7 +92842,7 @@ int main() {
 res_nmkquery()
 ; return 0; }
 EOF
-if { (eval echo configure:92850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -92866,7 +92862,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nmkquery in -lresolv""... $ac_c" 1>&6
-echo "configure:92870: checking for __res_nmkquery in -lresolv" >&5
+echo "configure:92866: checking for __res_nmkquery in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__res_nmkquery | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -92874,7 +92870,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 92878 "configure"
+#line 92874 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -92885,7 +92881,7 @@ int main() {
 __res_nmkquery()
 ; return 0; }
 EOF
-if { (eval echo configure:92889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -92917,11 +92913,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 92921 "configure"
+#line 92917 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:92925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:92921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -92963,7 +92959,7 @@ EOF
   unset ac_cv_lib_bind___res_nmkquery
   unset found
   echo $ac_n "checking for res_nmkquery in -lbind""... $ac_c" 1>&6
-echo "configure:92967: checking for res_nmkquery in -lbind" >&5
+echo "configure:92963: checking for res_nmkquery in -lbind" >&5
 ac_lib_var=`echo bind'_'res_nmkquery | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -92971,7 +92967,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 92975 "configure"
+#line 92971 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -92982,7 +92978,7 @@ int main() {
 res_nmkquery()
 ; return 0; }
 EOF
-if { (eval echo configure:92986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:92982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93002,7 +92998,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nmkquery in -lbind""... $ac_c" 1>&6
-echo "configure:93006: checking for __res_nmkquery in -lbind" >&5
+echo "configure:93002: checking for __res_nmkquery in -lbind" >&5
 ac_lib_var=`echo bind'_'__res_nmkquery | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93010,7 +93006,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93014 "configure"
+#line 93010 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93021,7 +93017,7 @@ int main() {
 __res_nmkquery()
 ; return 0; }
 EOF
-if { (eval echo configure:93025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93053,11 +93049,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 93057 "configure"
+#line 93053 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:93061: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:93057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -93099,7 +93095,7 @@ EOF
   unset ac_cv_lib_socket___res_nmkquery
   unset found
   echo $ac_n "checking for res_nmkquery in -lsocket""... $ac_c" 1>&6
-echo "configure:93103: checking for res_nmkquery in -lsocket" >&5
+echo "configure:93099: checking for res_nmkquery in -lsocket" >&5
 ac_lib_var=`echo socket'_'res_nmkquery | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93107,7 +93103,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93111 "configure"
+#line 93107 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93118,7 +93114,7 @@ int main() {
 res_nmkquery()
 ; return 0; }
 EOF
-if { (eval echo configure:93122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93138,7 +93134,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nmkquery in -lsocket""... $ac_c" 1>&6
-echo "configure:93142: checking for __res_nmkquery in -lsocket" >&5
+echo "configure:93138: checking for __res_nmkquery in -lsocket" >&5
 ac_lib_var=`echo socket'_'__res_nmkquery | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93146,7 +93142,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93150 "configure"
+#line 93146 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93157,7 +93153,7 @@ int main() {
 __res_nmkquery()
 ; return 0; }
 EOF
-if { (eval echo configure:93161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93189,11 +93185,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 93193 "configure"
+#line 93189 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:93197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:93193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -93250,12 +93246,12 @@ EOF
   unset found
   
   echo $ac_n "checking for res_nsend""... $ac_c" 1>&6
-echo "configure:93254: checking for res_nsend" >&5
+echo "configure:93250: checking for res_nsend" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_nsend'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 93259 "configure"
+#line 93255 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_nsend(); below.  */
@@ -93278,7 +93274,7 @@ res_nsend();
 
 ; return 0; }
 EOF
-if { (eval echo configure:93282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_nsend=yes"
 else
@@ -93296,12 +93292,12 @@ if eval "test \"`echo '$ac_cv_func_'res_nsend`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __res_nsend""... $ac_c" 1>&6
-echo "configure:93300: checking for __res_nsend" >&5
+echo "configure:93296: checking for __res_nsend" >&5
 if eval "test \"`echo '$''{'ac_cv_func___res_nsend'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 93305 "configure"
+#line 93301 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __res_nsend(); below.  */
@@ -93324,7 +93320,7 @@ __res_nsend();
 
 ; return 0; }
 EOF
-if { (eval echo configure:93328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___res_nsend=yes"
 else
@@ -93362,7 +93358,7 @@ EOF
   unset ac_cv_lib_resolv___res_nsend
   unset found
   echo $ac_n "checking for res_nsend in -lresolv""... $ac_c" 1>&6
-echo "configure:93366: checking for res_nsend in -lresolv" >&5
+echo "configure:93362: checking for res_nsend in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_nsend | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93370,7 +93366,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93374 "configure"
+#line 93370 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93381,7 +93377,7 @@ int main() {
 res_nsend()
 ; return 0; }
 EOF
-if { (eval echo configure:93385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93401,7 +93397,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nsend in -lresolv""... $ac_c" 1>&6
-echo "configure:93405: checking for __res_nsend in -lresolv" >&5
+echo "configure:93401: checking for __res_nsend in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__res_nsend | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93409,7 +93405,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93413 "configure"
+#line 93409 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93420,7 +93416,7 @@ int main() {
 __res_nsend()
 ; return 0; }
 EOF
-if { (eval echo configure:93424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93452,11 +93448,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 93456 "configure"
+#line 93452 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:93460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:93456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -93498,7 +93494,7 @@ EOF
   unset ac_cv_lib_bind___res_nsend
   unset found
   echo $ac_n "checking for res_nsend in -lbind""... $ac_c" 1>&6
-echo "configure:93502: checking for res_nsend in -lbind" >&5
+echo "configure:93498: checking for res_nsend in -lbind" >&5
 ac_lib_var=`echo bind'_'res_nsend | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93506,7 +93502,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93510 "configure"
+#line 93506 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93517,7 +93513,7 @@ int main() {
 res_nsend()
 ; return 0; }
 EOF
-if { (eval echo configure:93521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93537,7 +93533,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nsend in -lbind""... $ac_c" 1>&6
-echo "configure:93541: checking for __res_nsend in -lbind" >&5
+echo "configure:93537: checking for __res_nsend in -lbind" >&5
 ac_lib_var=`echo bind'_'__res_nsend | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93545,7 +93541,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93549 "configure"
+#line 93545 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93556,7 +93552,7 @@ int main() {
 __res_nsend()
 ; return 0; }
 EOF
-if { (eval echo configure:93560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93588,11 +93584,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 93592 "configure"
+#line 93588 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:93596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:93592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -93634,7 +93630,7 @@ EOF
   unset ac_cv_lib_socket___res_nsend
   unset found
   echo $ac_n "checking for res_nsend in -lsocket""... $ac_c" 1>&6
-echo "configure:93638: checking for res_nsend in -lsocket" >&5
+echo "configure:93634: checking for res_nsend in -lsocket" >&5
 ac_lib_var=`echo socket'_'res_nsend | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93642,7 +93638,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93646 "configure"
+#line 93642 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93653,7 +93649,7 @@ int main() {
 res_nsend()
 ; return 0; }
 EOF
-if { (eval echo configure:93657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93673,7 +93669,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __res_nsend in -lsocket""... $ac_c" 1>&6
-echo "configure:93677: checking for __res_nsend in -lsocket" >&5
+echo "configure:93673: checking for __res_nsend in -lsocket" >&5
 ac_lib_var=`echo socket'_'__res_nsend | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93681,7 +93677,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93685 "configure"
+#line 93681 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93692,7 +93688,7 @@ int main() {
 __res_nsend()
 ; return 0; }
 EOF
-if { (eval echo configure:93696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93724,11 +93720,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 93728 "configure"
+#line 93724 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:93732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:93728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -93785,12 +93781,12 @@ EOF
   unset found
   
   echo $ac_n "checking for dn_expand""... $ac_c" 1>&6
-echo "configure:93789: checking for dn_expand" >&5
+echo "configure:93785: checking for dn_expand" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dn_expand'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 93794 "configure"
+#line 93790 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dn_expand(); below.  */
@@ -93813,7 +93809,7 @@ dn_expand();
 
 ; return 0; }
 EOF
-if { (eval echo configure:93817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dn_expand=yes"
 else
@@ -93831,12 +93827,12 @@ if eval "test \"`echo '$ac_cv_func_'dn_expand`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
  echo $ac_n "checking for __dn_expand""... $ac_c" 1>&6
-echo "configure:93835: checking for __dn_expand" >&5
+echo "configure:93831: checking for __dn_expand" >&5
 if eval "test \"`echo '$''{'ac_cv_func___dn_expand'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 93840 "configure"
+#line 93836 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char __dn_expand(); below.  */
@@ -93859,7 +93855,7 @@ __dn_expand();
 
 ; return 0; }
 EOF
-if { (eval echo configure:93863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func___dn_expand=yes"
 else
@@ -93897,7 +93893,7 @@ EOF
   unset ac_cv_lib_resolv___dn_expand
   unset found
   echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6
-echo "configure:93901: checking for dn_expand in -lresolv" >&5
+echo "configure:93897: checking for dn_expand in -lresolv" >&5
 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93905,7 +93901,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93909 "configure"
+#line 93905 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93916,7 +93912,7 @@ int main() {
 dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:93920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93936,7 +93932,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_expand in -lresolv""... $ac_c" 1>&6
-echo "configure:93940: checking for __dn_expand in -lresolv" >&5
+echo "configure:93936: checking for __dn_expand in -lresolv" >&5
 ac_lib_var=`echo resolv'_'__dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -93944,7 +93940,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 93948 "configure"
+#line 93944 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -93955,7 +93951,7 @@ int main() {
 __dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:93959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:93955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -93987,11 +93983,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 93991 "configure"
+#line 93987 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:93995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:93991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -94033,7 +94029,7 @@ EOF
   unset ac_cv_lib_bind___dn_expand
   unset found
   echo $ac_n "checking for dn_expand in -lbind""... $ac_c" 1>&6
-echo "configure:94037: checking for dn_expand in -lbind" >&5
+echo "configure:94033: checking for dn_expand in -lbind" >&5
 ac_lib_var=`echo bind'_'dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94041,7 +94037,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94045 "configure"
+#line 94041 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94052,7 +94048,7 @@ int main() {
 dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:94056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94072,7 +94068,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_expand in -lbind""... $ac_c" 1>&6
-echo "configure:94076: checking for __dn_expand in -lbind" >&5
+echo "configure:94072: checking for __dn_expand in -lbind" >&5
 ac_lib_var=`echo bind'_'__dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94080,7 +94076,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94084 "configure"
+#line 94080 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94091,7 +94087,7 @@ int main() {
 __dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:94095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94123,11 +94119,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 94127 "configure"
+#line 94123 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:94131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:94127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -94169,7 +94165,7 @@ EOF
   unset ac_cv_lib_socket___dn_expand
   unset found
   echo $ac_n "checking for dn_expand in -lsocket""... $ac_c" 1>&6
-echo "configure:94173: checking for dn_expand in -lsocket" >&5
+echo "configure:94169: checking for dn_expand in -lsocket" >&5
 ac_lib_var=`echo socket'_'dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94177,7 +94173,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94181 "configure"
+#line 94177 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94188,7 +94184,7 @@ int main() {
 dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:94192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94208,7 +94204,7 @@ else
   echo "$ac_t""no" 1>&6
 
     echo $ac_n "checking for __dn_expand in -lsocket""... $ac_c" 1>&6
-echo "configure:94212: checking for __dn_expand in -lsocket" >&5
+echo "configure:94208: checking for __dn_expand in -lsocket" >&5
 ac_lib_var=`echo socket'_'__dn_expand | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -94216,7 +94212,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 94220 "configure"
+#line 94216 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -94227,7 +94223,7 @@ int main() {
 __dn_expand()
 ; return 0; }
 EOF
-if { (eval echo configure:94231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -94259,11 +94255,11 @@ fi
   found=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 94263 "configure"
+#line 94259 "configure"
 #include "confdefs.h"
 main() { return (0); }
 EOF
-if { (eval echo configure:94267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:94263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   found=yes
 else
@@ -94316,7 +94312,7 @@ EOF
 
 
 echo $ac_n "checking whether atof() accepts NAN""... $ac_c" 1>&6
-echo "configure:94320: checking whether atof() accepts NAN" >&5
+echo "configure:94316: checking whether atof() accepts NAN" >&5
 if eval "test \"`echo '$''{'ac_cv_atof_accept_nan'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -94327,7 +94323,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 94331 "configure"
+#line 94327 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -94347,7 +94343,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:94351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:94347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_atof_accept_nan=yes
@@ -94374,7 +94370,7 @@ EOF
 fi
 
 echo $ac_n "checking whether atof() accepts INF""... $ac_c" 1>&6
-echo "configure:94378: checking whether atof() accepts INF" >&5
+echo "configure:94374: checking whether atof() accepts INF" >&5
 if eval "test \"`echo '$''{'ac_cv_atof_accept_inf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -94385,7 +94381,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 94389 "configure"
+#line 94385 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -94408,7 +94404,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:94412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:94408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_atof_accept_inf=yes
@@ -94435,7 +94431,7 @@ EOF
 fi
 
 echo $ac_n "checking whether HUGE_VAL == INF""... $ac_c" 1>&6
-echo "configure:94439: checking whether HUGE_VAL == INF" >&5
+echo "configure:94435: checking whether HUGE_VAL == INF" >&5
 if eval "test \"`echo '$''{'ac_cv_huge_val_inf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -94446,7 +94442,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 94450 "configure"
+#line 94446 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -94469,7 +94465,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:94473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:94469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_huge_val_inf=yes
@@ -94496,7 +94492,7 @@ EOF
 fi
 
 echo $ac_n "checking whether HUGE_VAL + -HUGEVAL == NAN""... $ac_c" 1>&6
-echo "configure:94500: checking whether HUGE_VAL + -HUGEVAL == NAN" >&5
+echo "configure:94496: checking whether HUGE_VAL + -HUGEVAL == NAN" >&5
 if eval "test \"`echo '$''{'ac_cv_huge_val_nan'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -94507,7 +94503,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 94511 "configure"
+#line 94507 "configure"
 #include "confdefs.h"
 
 #include <math.h>
@@ -94532,7 +94528,7 @@ int main(int argc, char** argv)
 }
 
 EOF
-if { (eval echo configure:94536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:94532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   ac_cv_huge_val_nan=yes
@@ -94559,13 +94555,13 @@ EOF
 fi
 
 echo $ac_n "checking whether strptime() declaration fails""... $ac_c" 1>&6
-echo "configure:94563: checking whether strptime() declaration fails" >&5
+echo "configure:94559: checking whether strptime() declaration fails" >&5
 if eval "test \"`echo '$''{'ac_cv_strptime_decl_fails'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 94569 "configure"
+#line 94565 "configure"
 #include "confdefs.h"
 
 #include <time.h>
@@ -94581,7 +94577,7 @@ int strptime(const char *s, const char *format, struct tm *tm);
 
 ; return 0; }
 EOF
-if { (eval echo configure:94585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:94581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   ac_cv_strptime_decl_fails=no
@@ -94609,17 +94605,17 @@ for ac_hdr in wchar.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:94613: checking for $ac_hdr" >&5
+echo "configure:94609: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 94618 "configure"
+#line 94614 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:94623: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:94619: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -94648,12 +94644,12 @@ done
 for ac_func in mblen
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:94652: checking for $ac_func" >&5
+echo "configure:94648: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 94657 "configure"
+#line 94653 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -94676,7 +94672,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:94680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -94703,12 +94699,12 @@ done
 for ac_func in mbrlen mbsinit
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:94707: checking for $ac_func" >&5
+echo "configure:94703: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 94712 "configure"
+#line 94708 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -94731,7 +94727,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:94735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:94731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -94756,13 +94752,13 @@ fi
 done
 
 echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:94760: checking for mbstate_t" >&5
+echo "configure:94756: checking for mbstate_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mbstate_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 94766 "configure"
+#line 94762 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_WCHAR_H
@@ -94775,7 +94771,7 @@ int __tmp__() { mbstate_t a; }
 
 ; return 0; }
 EOF
-if { (eval echo configure:94779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:94775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   ac_cv_type_mbstate_t=yes
@@ -95003,8 +94999,9 @@ EOF
 
   if test "" != "shared" && test "" != "yes" && test "" = "cli"; then
     PHP_STANDARD_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/standard in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -95057,9 +95054,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC standard"
-    else
-      
+        EXT_STATIC="$EXT_STATIC standard"
+        ;;
+      *)
+        
   
   case ext/standard in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -95112,7 +95110,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC standard"
   fi
   
@@ -95159,7 +95158,7 @@ EOF
 php_with_sybase=no
 
 echo $ac_n "checking for Sybase support""... $ac_c" 1>&6
-echo "configure:95163: checking for Sybase support" >&5
+echo "configure:95162: checking for Sybase support" >&5
 # Check whether --with-sybase or --without-sybase was given.
 if test "${with_sybase+set}" = set; then
   withval="$with_sybase"
@@ -95522,8 +95521,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SYBASE_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sybase in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -95566,9 +95566,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sybase"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sybase"
+        ;;
+      *)
+        
   
   case ext/sybase in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -95611,7 +95612,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sybase"
   fi
   
@@ -95628,7 +95630,7 @@ EOF
   fi
 
   echo $ac_n "checking for dnet_addr in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:95632: checking for dnet_addr in -ldnet_stub" >&5
+echo "configure:95634: checking for dnet_addr in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_addr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -95636,7 +95638,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 95640 "configure"
+#line 95642 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -95647,7 +95649,7 @@ int main() {
 dnet_addr()
 ; return 0; }
 EOF
-if { (eval echo configure:95651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:95653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -95773,7 +95775,7 @@ fi
 EOF
 
   echo $ac_n "checking for tdsdbopen in -lsybdb""... $ac_c" 1>&6
-echo "configure:95777: checking for tdsdbopen in -lsybdb" >&5
+echo "configure:95779: checking for tdsdbopen in -lsybdb" >&5
 ac_lib_var=`echo sybdb'_'tdsdbopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -95781,7 +95783,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsybdb  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 95785 "configure"
+#line 95787 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -95792,7 +95794,7 @@ int main() {
 tdsdbopen()
 ; return 0; }
 EOF
-if { (eval echo configure:95796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:95798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -95834,7 +95836,7 @@ fi
 php_with_sybase_ct=no
 
 echo $ac_n "checking for Sybase-CT support""... $ac_c" 1>&6
-echo "configure:95838: checking for Sybase-CT support" >&5
+echo "configure:95840: checking for Sybase-CT support" >&5
 # Check whether --with-sybase-ct or --without-sybase-ct was given.
 if test "${with_sybase_ct+set}" = set; then
   withval="$with_sybase_ct"
@@ -96071,8 +96073,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SYBASE_CT_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sybase_ct in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -96115,9 +96118,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sybase_ct"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sybase_ct"
+        ;;
+      *)
+        
   
   case ext/sybase_ct in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -96160,7 +96164,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sybase_ct"
   fi
   
@@ -96481,7 +96486,7 @@ EOF
   done
 
   echo $ac_n "checking for netg_errstr in -ltcl""... $ac_c" 1>&6
-echo "configure:96485: checking for netg_errstr in -ltcl" >&5
+echo "configure:96490: checking for netg_errstr in -ltcl" >&5
 ac_lib_var=`echo tcl'_'netg_errstr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -96489,7 +96494,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltcl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 96493 "configure"
+#line 96498 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -96500,7 +96505,7 @@ int main() {
 netg_errstr()
 ; return 0; }
 EOF
-if { (eval echo configure:96504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:96509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -96675,7 +96680,7 @@ fi
   done
 
   echo $ac_n "checking for insck__getVdate in -linsck""... $ac_c" 1>&6
-echo "configure:96679: checking for insck__getVdate in -linsck" >&5
+echo "configure:96684: checking for insck__getVdate in -linsck" >&5
 ac_lib_var=`echo insck'_'insck__getVdate | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -96683,7 +96688,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 96687 "configure"
+#line 96692 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -96694,7 +96699,7 @@ int main() {
 insck__getVdate()
 ; return 0; }
 EOF
-if { (eval echo configure:96698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:96703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -96842,7 +96847,7 @@ fi
   done
 
   echo $ac_n "checking for bsd_tcp in -linsck""... $ac_c" 1>&6
-echo "configure:96846: checking for bsd_tcp in -linsck" >&5
+echo "configure:96851: checking for bsd_tcp in -linsck" >&5
 ac_lib_var=`echo insck'_'bsd_tcp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -96850,7 +96855,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linsck  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 96854 "configure"
+#line 96859 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -96861,7 +96866,7 @@ int main() {
 bsd_tcp()
 ; return 0; }
 EOF
-if { (eval echo configure:96865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:96870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -96921,7 +96926,7 @@ fi
 php_enable_sysvmsg=no
 
 echo $ac_n "checking whether to enable System V IPC support""... $ac_c" 1>&6
-echo "configure:96925: checking whether to enable System V IPC support" >&5
+echo "configure:96930: checking whether to enable System V IPC support" >&5
 # Check whether --enable-sysvmsg or --disable-sysvmsg was given.
 if test "${enable_sysvmsg+set}" = set; then
   enableval="$enable_sysvmsg"
@@ -96967,17 +96972,17 @@ echo "$ac_t""$ext_output" 1>&6
 if test "$PHP_SYSVMSG" != "no"; then
   ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6
-echo "configure:96971: checking for sys/msg.h" >&5
+echo "configure:96976: checking for sys/msg.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 96976 "configure"
+#line 96981 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:96981: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:96986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -97189,8 +97194,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SYSVMSG_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sysvmsg in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -97233,9 +97239,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sysvmsg"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sysvmsg"
+        ;;
+      *)
+        
   
   case ext/sysvmsg in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -97278,7 +97285,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sysvmsg"
   fi
   
@@ -97301,7 +97309,7 @@ fi
 php_enable_sysvsem=no
 
 echo $ac_n "checking whether to enable System V semaphore support""... $ac_c" 1>&6
-echo "configure:97305: checking whether to enable System V semaphore support" >&5
+echo "configure:97313: checking whether to enable System V semaphore support" >&5
 # Check whether --enable-sysvsem or --disable-sysvsem was given.
 if test "${enable_sysvsem+set}" = set; then
   enableval="$enable_sysvsem"
@@ -97529,8 +97537,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SYSVSEM_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sysvsem in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -97573,9 +97582,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sysvsem"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sysvsem"
+        ;;
+      *)
+        
   
   case ext/sysvsem in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -97618,7 +97628,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sysvsem"
   fi
   
@@ -97639,12 +97650,12 @@ EOF
 EOF
 
  echo $ac_n "checking for union semun""... $ac_c" 1>&6
-echo "configure:97643: checking for union semun" >&5
+echo "configure:97654: checking for union semun" >&5
 if eval "test \"`echo '$''{'php_cv_semun'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 97648 "configure"
+#line 97659 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -97655,7 +97666,7 @@ int main() {
 union semun x;
 ; return 0; }
 EOF
-if { (eval echo configure:97659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:97670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
      php_cv_semun=yes
@@ -97691,7 +97702,7 @@ fi
 php_enable_sysvshm=no
 
 echo $ac_n "checking whether to enable System V shared memory support""... $ac_c" 1>&6
-echo "configure:97695: checking whether to enable System V shared memory support" >&5
+echo "configure:97706: checking whether to enable System V shared memory support" >&5
 # Check whether --enable-sysvshm or --disable-sysvshm was given.
 if test "${enable_sysvshm+set}" = set; then
   enableval="$enable_sysvshm"
@@ -97923,8 +97934,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_SYSVSHM_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/sysvshm in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -97967,9 +97979,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC sysvshm"
-    else
-      
+        EXT_STATIC="$EXT_STATIC sysvshm"
+        ;;
+      *)
+        
   
   case ext/sysvshm in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -98012,7 +98025,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC sysvshm"
   fi
   
@@ -98035,7 +98049,7 @@ fi
 php_with_tidy=no
 
 echo $ac_n "checking for TIDY support""... $ac_c" 1>&6
-echo "configure:98039: checking for TIDY support" >&5
+echo "configure:98053: checking for TIDY support" >&5
 # Check whether --with-tidy or --without-tidy was given.
 if test "${with_tidy+set}" = set; then
   withval="$with_tidy"
@@ -98327,7 +98341,7 @@ if test "$PHP_TIDY" != "no"; then
   done
 
   echo $ac_n "checking for tidyOptGetDoc in -ltidy""... $ac_c" 1>&6
-echo "configure:98331: checking for tidyOptGetDoc in -ltidy" >&5
+echo "configure:98345: checking for tidyOptGetDoc in -ltidy" >&5
 ac_lib_var=`echo tidy'_'tidyOptGetDoc | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -98335,7 +98349,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltidy  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 98339 "configure"
+#line 98353 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -98346,7 +98360,7 @@ int main() {
 tidyOptGetDoc()
 ; return 0; }
 EOF
-if { (eval echo configure:98350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:98364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -98567,8 +98581,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_TIDY_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/tidy in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -98611,9 +98626,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC tidy"
-    else
-      
+        EXT_STATIC="$EXT_STATIC tidy"
+        ;;
+      *)
+        
   
   case ext/tidy in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -98656,7 +98672,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC tidy"
   fi
   
@@ -98687,7 +98704,7 @@ fi
 php_enable_tokenizer=yes
 
 echo $ac_n "checking whether to enable tokenizer support""... $ac_c" 1>&6
-echo "configure:98691: checking whether to enable tokenizer support" >&5
+echo "configure:98708: checking whether to enable tokenizer support" >&5
 # Check whether --enable-tokenizer or --disable-tokenizer was given.
 if test "${enable_tokenizer+set}" = set; then
   enableval="$enable_tokenizer"
@@ -98915,8 +98932,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_TOKENIZER_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/tokenizer in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -98959,9 +98977,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC tokenizer"
-    else
-      
+        EXT_STATIC="$EXT_STATIC tokenizer"
+        ;;
+      *)
+        
   
   case ext/tokenizer in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -99004,7 +99023,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC tokenizer"
   fi
   
@@ -99033,7 +99053,7 @@ fi
 php_enable_wddx=no
 
 echo $ac_n "checking whether to enable WDDX support""... $ac_c" 1>&6
-echo "configure:99037: checking whether to enable WDDX support" >&5
+echo "configure:99057: checking whether to enable WDDX support" >&5
 # Check whether --enable-wddx or --disable-wddx was given.
 if test "${enable_wddx+set}" = set; then
   enableval="$enable_wddx"
@@ -99081,7 +99101,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:99085: checking libxml2 install dir" >&5
+echo "configure:99105: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -99108,7 +99128,7 @@ fi
 php_with_libexpat_dir=no
 
 echo $ac_n "checking libexpat dir for WDDX""... $ac_c" 1>&6
-echo "configure:99112: checking libexpat dir for WDDX" >&5
+echo "configure:99132: checking libexpat dir for WDDX" >&5
 # Check whether --with-libexpat-dir or --without-libexpat-dir was given.
 if test "${with_libexpat_dir+set}" = set; then
   withval="$with_libexpat_dir"
@@ -99139,7 +99159,7 @@ if test "$PHP_WDDX" != "no"; then
 
     
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:99143: checking for xml2-config path" >&5
+echo "configure:99163: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -99297,7 +99317,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:99301: checking whether libxml build works" >&5
+echo "configure:99321: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -99313,7 +99333,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 99317 "configure"
+#line 99337 "configure"
 #include "confdefs.h"
 
     
@@ -99324,7 +99344,7 @@ else
     }
   
 EOF
-if { (eval echo configure:99328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:99348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -99754,8 +99774,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_WDDX_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/wddx in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -99798,9 +99819,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC wddx"
-    else
-      
+        EXT_STATIC="$EXT_STATIC wddx"
+        ;;
+      *)
+        
   
   case ext/wddx in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -99843,7 +99865,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC wddx"
   fi
   
@@ -99888,7 +99911,7 @@ fi
 php_enable_xml=yes
 
 echo $ac_n "checking whether to enable XML support""... $ac_c" 1>&6
-echo "configure:99892: checking whether to enable XML support" >&5
+echo "configure:99915: checking whether to enable XML support" >&5
 # Check whether --enable-xml or --disable-xml was given.
 if test "${enable_xml+set}" = set; then
   enableval="$enable_xml"
@@ -99936,7 +99959,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:99940: checking libxml2 install dir" >&5
+echo "configure:99963: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -99963,7 +99986,7 @@ fi
 php_with_libexpat_dir=no
 
 echo $ac_n "checking libexpat install dir""... $ac_c" 1>&6
-echo "configure:99967: checking libexpat install dir" >&5
+echo "configure:99990: checking libexpat install dir" >&5
 # Check whether --with-libexpat-dir or --without-libexpat-dir was given.
 if test "${with_libexpat_dir+set}" = set; then
   withval="$with_libexpat_dir"
@@ -99995,7 +100018,7 @@ if test "$PHP_XML" != "no"; then
 
     
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:99999: checking for xml2-config path" >&5
+echo "configure:100022: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100153,7 +100176,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:100157: checking whether libxml build works" >&5
+echo "configure:100180: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100169,7 +100192,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 100173 "configure"
+#line 100196 "configure"
 #include "confdefs.h"
 
     
@@ -100180,7 +100203,7 @@ else
     }
   
 EOF
-if { (eval echo configure:100184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:100207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -100576,8 +100599,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_XML_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/xml in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -100620,9 +100644,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC xml"
-    else
-      
+        EXT_STATIC="$EXT_STATIC xml"
+        ;;
+      *)
+        
   
   case ext/xml in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -100665,7 +100690,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC xml"
   fi
   
@@ -100713,7 +100739,7 @@ fi
 php_enable_xmlreader=yes
 
 echo $ac_n "checking whether to enable XMLReader support""... $ac_c" 1>&6
-echo "configure:100717: checking whether to enable XMLReader support" >&5
+echo "configure:100743: checking whether to enable XMLReader support" >&5
 # Check whether --enable-xmlreader or --disable-xmlreader was given.
 if test "${enable_xmlreader+set}" = set; then
   enableval="$enable_xmlreader"
@@ -100761,7 +100787,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:100765: checking libxml2 install dir" >&5
+echo "configure:100791: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -100792,7 +100818,7 @@ if test "$PHP_XMLREADER" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:100796: checking for xml2-config path" >&5
+echo "configure:100822: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100950,7 +100976,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:100954: checking whether libxml build works" >&5
+echo "configure:100980: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -100966,7 +100992,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 100970 "configure"
+#line 100996 "configure"
 #include "confdefs.h"
 
     
@@ -100977,7 +101003,7 @@ else
     }
   
 EOF
-if { (eval echo configure:100981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:101007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -101200,8 +101226,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_XMLREADER_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/xmlreader in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -101244,9 +101271,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC xmlreader"
-    else
-      
+        EXT_STATIC="$EXT_STATIC xmlreader"
+        ;;
+      *)
+        
   
   case ext/xmlreader in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -101289,7 +101317,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC xmlreader"
   fi
   
@@ -101356,7 +101385,7 @@ fi
 php_with_xmlrpc=no
 
 echo $ac_n "checking for XMLRPC-EPI support""... $ac_c" 1>&6
-echo "configure:101360: checking for XMLRPC-EPI support" >&5
+echo "configure:101389: checking for XMLRPC-EPI support" >&5
 # Check whether --with-xmlrpc or --without-xmlrpc was given.
 if test "${with_xmlrpc+set}" = set; then
   withval="$with_xmlrpc"
@@ -101404,7 +101433,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:101408: checking libxml2 install dir" >&5
+echo "configure:101437: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -101431,7 +101460,7 @@ fi
 php_with_libexpat_dir=no
 
 echo $ac_n "checking libexpat dir for XMLRPC-EPI""... $ac_c" 1>&6
-echo "configure:101435: checking libexpat dir for XMLRPC-EPI" >&5
+echo "configure:101464: checking libexpat dir for XMLRPC-EPI" >&5
 # Check whether --with-libexpat-dir or --without-libexpat-dir was given.
 if test "${with_libexpat_dir+set}" = set; then
   withval="$with_libexpat_dir"
@@ -101457,7 +101486,7 @@ echo "$ac_t""$ext_output" 1>&6
 php_with_iconv_dir=no
 
 echo $ac_n "checking iconv dir for XMLRPC-EPI""... $ac_c" 1>&6
-echo "configure:101461: checking iconv dir for XMLRPC-EPI" >&5
+echo "configure:101490: checking iconv dir for XMLRPC-EPI" >&5
 # Check whether --with-iconv-dir or --without-iconv-dir was given.
 if test "${with_iconv_dir+set}" = set; then
   withval="$with_iconv_dir"
@@ -101516,7 +101545,7 @@ EOF
 
     
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:101520: checking for xml2-config path" >&5
+echo "configure:101549: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -101674,7 +101703,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:101678: checking whether libxml build works" >&5
+echo "configure:101707: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -101690,7 +101719,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 101694 "configure"
+#line 101723 "configure"
 #include "confdefs.h"
 
     
@@ -101701,7 +101730,7 @@ else
     }
   
 EOF
-if { (eval echo configure:101705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:101734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -101941,15 +101970,17 @@ EOF
     fi
   fi
 
-  if test "$PHP_ICONV_DIR" != "no"; then
-    PHP_ICONV=$PHP_ICONV_DIR
-  fi
-  
-  if test -z "$PHP_ICONV" || test "$PHP_ICONV" = "no"; then
-    PHP_ICONV=yes
-  fi
+    if test "$PHP_ICONV_SHARED" = "yes" || test "$PHP_ICONV" = "no"; then
+
+    if test "$PHP_ICONV_DIR" != "no"; then
+      PHP_ICONV=$PHP_ICONV_DIR
+    fi
   
+    if test -z "$PHP_ICONV" || test "$PHP_ICONV" = "no"; then
+      PHP_ICONV=yes
+    fi
   
+    
   found_iconv=no
   unset ICONV_DIR
 
@@ -101967,12 +101998,12 @@ EOF
 
         if test "$PHP_ICONV" = "yes"; then
     echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:101971: checking for iconv" >&5
+echo "configure:102002: checking for iconv" >&5
 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 101976 "configure"
+#line 102007 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char iconv(); below.  */
@@ -101995,7 +102026,7 @@ iconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:101999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:102030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_iconv=yes"
 else
@@ -102016,12 +102047,12 @@ else
   echo "$ac_t""no" 1>&6
 
       echo $ac_n "checking for libiconv""... $ac_c" 1>&6
-echo "configure:102020: checking for libiconv" >&5
+echo "configure:102051: checking for libiconv" >&5
 if eval "test \"`echo '$''{'ac_cv_func_libiconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 102025 "configure"
+#line 102056 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char libiconv(); below.  */
@@ -102044,7 +102075,7 @@ libiconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:102048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:102079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_libiconv=yes"
 else
@@ -102200,7 +102231,7 @@ EOF
   done
 
   echo $ac_n "checking for libiconv in -l$iconv_lib_name""... $ac_c" 1>&6
-echo "configure:102204: checking for libiconv in -l$iconv_lib_name" >&5
+echo "configure:102235: checking for libiconv in -l$iconv_lib_name" >&5
 ac_lib_var=`echo $iconv_lib_name'_'libiconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -102208,7 +102239,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$iconv_lib_name  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 102212 "configure"
+#line 102243 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -102219,7 +102250,7 @@ int main() {
 libiconv()
 ; return 0; }
 EOF
-if { (eval echo configure:102223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:102254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -102353,7 +102384,7 @@ else
   done
 
   echo $ac_n "checking for iconv in -l$iconv_lib_name""... $ac_c" 1>&6
-echo "configure:102357: checking for iconv in -l$iconv_lib_name" >&5
+echo "configure:102388: checking for iconv in -l$iconv_lib_name" >&5
 ac_lib_var=`echo $iconv_lib_name'_'iconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -102361,7 +102392,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$iconv_lib_name  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 102365 "configure"
+#line 102396 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -102372,7 +102403,7 @@ int main() {
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:102376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:102407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -102551,17 +102582,18 @@ EOF
     fi
     
 else 
-    { echo "configure: error: iconv not found, in order to build xmlrpc you need the iconv library" 1>&2; exit 1; }
-  
+      { echo "configure: error: iconv not found, in order to build xmlrpc you need the iconv library" 1>&2; exit 1; }
+    
   fi
 
+  fi
 fi
 
 if test "$PHP_XMLRPC" = "yes"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:102565: checking for $ac_word" >&5
+echo "configure:102597: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -102589,21 +102621,21 @@ else
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:102593: checking for inline" >&5
+echo "configure:102625: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 102600 "configure"
+#line 102632 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:102607: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:102639: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -102641,12 +102673,12 @@ EOF
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:102645: checking for ANSI C header files" >&5
+echo "configure:102677: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 102650 "configure"
+#line 102682 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -102654,7 +102686,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:102658: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:102690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -102671,7 +102703,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 102675 "configure"
+#line 102707 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -102689,7 +102721,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 102693 "configure"
+#line 102725 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -102710,7 +102742,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 102714 "configure"
+#line 102746 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -102721,7 +102753,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:102725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:102757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -102748,17 +102780,17 @@ for ac_hdr in xmlparse.h xmltok.h stdlib.h strings.h string.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:102752: checking for $ac_hdr" >&5
+echo "configure:102784: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 102757 "configure"
+#line 102789 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:102762: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:102794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -102790,7 +102822,7 @@ done
 
 
 echo $ac_n "checking size of char""... $ac_c" 1>&6
-echo "configure:102794: checking size of char" >&5
+echo "configure:102826: checking size of char" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -102798,7 +102830,7 @@ else
   ac_cv_sizeof_char=1
 else
   cat > conftest.$ac_ext <<EOF
-#line 102802 "configure"
+#line 102834 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -102809,7 +102841,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:102813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:102845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_char=`cat conftestval`
 else
@@ -102830,7 +102862,7 @@ EOF
 
 
 echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:102834: checking size of int" >&5
+echo "configure:102866: checking size of int" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -102838,7 +102870,7 @@ else
   ac_cv_sizeof_int=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 102842 "configure"
+#line 102874 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -102849,7 +102881,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:102853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:102885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -102869,7 +102901,7 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:102873: checking size of long" >&5
+echo "configure:102905: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -102877,7 +102909,7 @@ else
   ac_cv_sizeof_long=4
 else
   cat > conftest.$ac_ext <<EOF
-#line 102881 "configure"
+#line 102913 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -102888,7 +102920,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:102892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:102924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -102908,7 +102940,7 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:102912: checking size of long long" >&5
+echo "configure:102944: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -102916,7 +102948,7 @@ else
   ac_cv_sizeof_long_long=8
 else
   cat > conftest.$ac_ext <<EOF
-#line 102920 "configure"
+#line 102952 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main()
@@ -102927,7 +102959,7 @@ int main()
   return(0);
 }
 EOF
-if { (eval echo configure:102931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:102963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -102947,12 +102979,12 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:102951: checking for size_t" >&5
+echo "configure:102983: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 102956 "configure"
+#line 102988 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -102980,12 +103012,12 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:102984: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:103016: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 102989 "configure"
+#line 103021 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -102994,7 +103026,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:102998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:103030: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -103015,12 +103047,12 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:103019: checking for uid_t in sys/types.h" >&5
+echo "configure:103051: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 103024 "configure"
+#line 103056 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -103060,12 +103092,12 @@ for ac_func in \
  memcpy memmove
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:103064: checking for $ac_func" >&5
+echo "configure:103096: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 103069 "configure"
+#line 103101 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -103088,7 +103120,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:103092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:103124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -103309,8 +103341,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_XMLRPC_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/xmlrpc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -103358,9 +103391,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC xmlrpc"
-    else
-      
+        EXT_STATIC="$EXT_STATIC xmlrpc"
+        ;;
+      *)
+        
   
   case ext/xmlrpc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -103408,7 +103442,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC xmlrpc"
   fi
   
@@ -103439,7 +103474,7 @@ elif test "$PHP_XMLRPC" != "no"; then
     XMLRPC_DIR=$PHP_XMLRPC/include/xmlrpc-epi
   else
     echo $ac_n "checking for XMLRPC-EPI in default path""... $ac_c" 1>&6
-echo "configure:103443: checking for XMLRPC-EPI in default path" >&5
+echo "configure:103478: checking for XMLRPC-EPI in default path" >&5
     for i in /usr/local /usr; do
       if test -r $i/include/xmlrpc.h; then
         XMLRPC_DIR=$i/include
@@ -103766,8 +103801,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_XMLRPC_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/xmlrpc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -103810,9 +103846,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC xmlrpc"
-    else
-      
+        EXT_STATIC="$EXT_STATIC xmlrpc"
+        ;;
+      *)
+        
   
   case ext/xmlrpc in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -103855,7 +103892,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC xmlrpc"
   fi
   
@@ -103879,7 +103917,7 @@ fi
 php_enable_xmlwriter=yes
 
 echo $ac_n "checking whether to enable XMLWriter support""... $ac_c" 1>&6
-echo "configure:103883: checking whether to enable XMLWriter support" >&5
+echo "configure:103921: checking whether to enable XMLWriter support" >&5
 # Check whether --enable-xmlwriter or --disable-xmlwriter was given.
 if test "${enable_xmlwriter+set}" = set; then
   enableval="$enable_xmlwriter"
@@ -103927,7 +103965,7 @@ if test -z "$PHP_LIBXML_DIR"; then
 php_with_libxml_dir=no
 
 echo $ac_n "checking libxml2 install dir""... $ac_c" 1>&6
-echo "configure:103931: checking libxml2 install dir" >&5
+echo "configure:103969: checking libxml2 install dir" >&5
 # Check whether --with-libxml-dir or --without-libxml-dir was given.
 if test "${with_libxml_dir+set}" = set; then
   withval="$with_libxml_dir"
@@ -103958,7 +103996,7 @@ if test "$PHP_XMLWRITER" != "no"; then
 
   
 echo $ac_n "checking for xml2-config path""... $ac_c" 1>&6
-echo "configure:103962: checking for xml2-config path" >&5
+echo "configure:104000: checking for xml2-config path" >&5
 if eval "test \"`echo '$''{'ac_cv_php_xml2_config_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -104116,7 +104154,7 @@ echo "$ac_t""$ac_cv_php_xml2_config_path" 1>&6
 
 
             echo $ac_n "checking whether libxml build works""... $ac_c" 1>&6
-echo "configure:104120: checking whether libxml build works" >&5
+echo "configure:104158: checking whether libxml build works" >&5
 if eval "test \"`echo '$''{'php_cv_libxml_build_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -104132,7 +104170,7 @@ else
   
 else
   cat > conftest.$ac_ext <<EOF
-#line 104136 "configure"
+#line 104174 "configure"
 #include "confdefs.h"
 
     
@@ -104143,7 +104181,7 @@ else
     }
   
 EOF
-if { (eval echo configure:104147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:104185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
     LIBS=$old_LIBS
@@ -104366,8 +104404,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_XMLWRITER_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/xmlwriter in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -104410,9 +104449,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC xmlwriter"
-    else
-      
+        EXT_STATIC="$EXT_STATIC xmlwriter"
+        ;;
+      *)
+        
   
   case ext/xmlwriter in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -104455,7 +104495,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC xmlwriter"
   fi
   
@@ -104490,7 +104531,7 @@ fi
 php_with_xsl=no
 
 echo $ac_n "checking for XSL support""... $ac_c" 1>&6
-echo "configure:104494: checking for XSL support" >&5
+echo "configure:104535: checking for XSL support" >&5
 # Check whether --with-xsl or --without-xsl was given.
 if test "${with_xsl+set}" = set; then
   withval="$with_xsl"
@@ -104693,7 +104734,7 @@ if test "$PHP_XSL" != "no"; then
 
       
       echo $ac_n "checking for EXSLT support""... $ac_c" 1>&6
-echo "configure:104697: checking for EXSLT support" >&5
+echo "configure:104738: checking for EXSLT support" >&5
       for i in $PHP_XSL /usr/local /usr; do
         if test -r "$i/include/libexslt/exslt.h"; then
           PHP_XSL_EXSL_DIR=$i
@@ -105032,8 +105073,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_XSL_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/xsl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -105076,9 +105118,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC xsl"
-    else
-      
+        EXT_STATIC="$EXT_STATIC xsl"
+        ;;
+      *)
+        
   
   case ext/xsl in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -105121,7 +105164,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC xsl"
   fi
   
@@ -105166,7 +105210,7 @@ fi
 php_enable_zip=no
 
 echo $ac_n "checking for zip archive read/writesupport""... $ac_c" 1>&6
-echo "configure:105170: checking for zip archive read/writesupport" >&5
+echo "configure:105214: checking for zip archive read/writesupport" >&5
 # Check whether --enable-zip or --disable-zip was given.
 if test "${enable_zip+set}" = set; then
   enableval="$enable_zip"
@@ -105214,7 +105258,7 @@ if test -z "$PHP_ZLIB_DIR"; then
 php_with_zlib_dir=no
 
 echo $ac_n "checking for the location of libz""... $ac_c" 1>&6
-echo "configure:105218: checking for the location of libz" >&5
+echo "configure:105262: checking for the location of libz" >&5
 # Check whether --with-zlib-dir or --without-zlib-dir was given.
 if test "${with_zlib_dir+set}" = set; then
   withval="$with_zlib_dir"
@@ -105262,7 +105306,7 @@ if test "$PHP_ZIP" != "no"; then
 	fi
 
 		echo $ac_n "checking for the location of zlib""... $ac_c" 1>&6
-echo "configure:105266: checking for the location of zlib" >&5
+echo "configure:105310: checking for the location of zlib" >&5
 	if test "$PHP_ZLIB_DIR" = "no"; then
 		{ echo "configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located" 1>&2; exit 1; }
 	else
@@ -105605,8 +105649,9 @@ EOF
 
   if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" = "cli"; then
     PHP_ZIP_SHARED=no
-    if test "$PHP_SAPI" = "cgi"; then
-      
+    case "$PHP_SAPI" in
+      cgi|embed)
+        
   
   case ext/zip in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -105649,9 +105694,10 @@ EOF
   done
 
 
-      EXT_STATIC="$EXT_STATIC zip"
-    else
-      
+        EXT_STATIC="$EXT_STATIC zip"
+        ;;
+      *)
+        
   
   case ext/zip in
   "") ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
@@ -105694,7 +105740,8 @@ EOF
   done
 
 
-    fi
+        ;;
+    esac
     EXT_CLI_STATIC="$EXT_CLI_STATIC zip"
   fi
   
@@ -105794,7 +105841,7 @@ fi
 php_with_pear=DEFAULT
 
 echo $ac_n "checking whether to install PEAR""... $ac_c" 1>&6
-echo "configure:105798: checking whether to install PEAR" >&5
+echo "configure:105845: checking whether to install PEAR" >&5
 # Check whether --with-pear or --without-pear was given.
 if test "${with_pear+set}" = set; then
   withval="$with_pear"
@@ -105904,7 +105951,7 @@ fi
   bison_version=none
   if test "$YACC"; then
     echo $ac_n "checking for bison version""... $ac_c" 1>&6
-echo "configure:105908: checking for bison version" >&5
+echo "configure:105955: checking for bison version" >&5
 if eval "test \"`echo '$''{'php_cv_bison_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -105961,17 +106008,17 @@ dlfcn.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:105965: checking for $ac_hdr" >&5
+echo "configure:106012: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 105970 "configure"
+#line 106017 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:105975: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:106022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -105999,12 +106046,12 @@ done
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:106003: checking for size_t" >&5
+echo "configure:106050: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106008 "configure"
+#line 106055 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -106032,12 +106079,12 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:106036: checking return type of signal handlers" >&5
+echo "configure:106083: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106041 "configure"
+#line 106088 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -106054,7 +106101,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:106058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:106105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -106078,12 +106125,12 @@ EOF
 
 
 echo $ac_n "checking for uint""... $ac_c" 1>&6
-echo "configure:106082: checking for uint" >&5
+echo "configure:106129: checking for uint" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uint'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106087 "configure"
+#line 106134 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -106111,12 +106158,12 @@ EOF
 fi
 
 echo $ac_n "checking for ulong""... $ac_c" 1>&6
-echo "configure:106115: checking for ulong" >&5
+echo "configure:106162: checking for ulong" >&5
 if eval "test \"`echo '$''{'ac_cv_type_ulong'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106120 "configure"
+#line 106167 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -106146,9 +106193,9 @@ fi
 
 
 echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:106150: checking for int32_t" >&5
+echo "configure:106197: checking for int32_t" >&5
 cat > conftest.$ac_ext <<EOF
-#line 106152 "configure"
+#line 106199 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TYPES_H  
@@ -106167,7 +106214,7 @@ if (sizeof (int32_t))
 
 ; return 0; }
 EOF
-if { (eval echo configure:106171: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:106218: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   cat >> confdefs.h <<EOF
@@ -106186,9 +106233,9 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for uint32_t""... $ac_c" 1>&6
-echo "configure:106190: checking for uint32_t" >&5
+echo "configure:106237: checking for uint32_t" >&5
 cat > conftest.$ac_ext <<EOF
-#line 106192 "configure"
+#line 106239 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TYPES_H  
@@ -106207,7 +106254,7 @@ if (sizeof (uint32_t))
 
 ; return 0; }
 EOF
-if { (eval echo configure:106211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:106258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
   cat >> confdefs.h <<EOF
@@ -106226,12 +106273,12 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:106230: checking for vprintf" >&5
+echo "configure:106277: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106235 "configure"
+#line 106282 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -106254,7 +106301,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:106258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -106278,12 +106325,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:106282: checking for _doprnt" >&5
+echo "configure:106329: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106287 "configure"
+#line 106334 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -106306,7 +106353,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:106310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -106331,7 +106378,7 @@ fi
 fi
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:106335: checking for 8-bit clean memcmp" >&5
+echo "configure:106382: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -106339,7 +106386,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 106343 "configure"
+#line 106390 "configure"
 #include "confdefs.h"
 
 main()
@@ -106349,7 +106396,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:106353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -106369,19 +106416,19 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:106373: checking for working alloca.h" >&5
+echo "configure:106420: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106378 "configure"
+#line 106425 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:106385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -106402,12 +106449,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:106406: checking for alloca" >&5
+echo "configure:106453: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106411 "configure"
+#line 106458 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -106435,7 +106482,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:106439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -106467,12 +106514,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:106471: checking whether alloca needs Cray hooks" >&5
+echo "configure:106518: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106476 "configure"
+#line 106523 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -106497,12 +106544,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:106501: checking for $ac_func" >&5
+echo "configure:106548: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106506 "configure"
+#line 106553 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -106525,7 +106572,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:106529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -106552,7 +106599,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:106556: checking stack direction for C alloca" >&5
+echo "configure:106603: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -106560,7 +106607,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 106564 "configure"
+#line 106611 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -106579,7 +106626,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:106583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -106603,12 +106650,12 @@ fi
 for ac_func in memcpy strdup getpid kill strtod strtol finite fpclass
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:106607: checking for $ac_func" >&5
+echo "configure:106654: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106612 "configure"
+#line 106659 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -106631,7 +106678,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:106635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -106657,7 +106704,7 @@ done
 
 
   echo $ac_n "checking whether sprintf is broken""... $ac_c" 1>&6
-echo "configure:106661: checking whether sprintf is broken" >&5
+echo "configure:106708: checking whether sprintf is broken" >&5
 if eval "test \"`echo '$''{'ac_cv_broken_sprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -106668,11 +106715,11 @@ else
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 106672 "configure"
+#line 106719 "configure"
 #include "confdefs.h"
 main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }
 EOF
-if { (eval echo configure:106676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:106723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
       ac_cv_broken_sprintf=no
@@ -106706,12 +106753,12 @@ EOF
 for ac_func in finite isfinite isinf isnan
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:106710: checking for $ac_func" >&5
+echo "configure:106757: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106715 "configure"
+#line 106762 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -106734,7 +106781,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:106738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:106785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -106761,13 +106808,13 @@ done
 
 
   echo $ac_n "checking whether fp_except is defined""... $ac_c" 1>&6
-echo "configure:106765: checking whether fp_except is defined" >&5
+echo "configure:106812: checking whether fp_except is defined" >&5
 if eval "test \"`echo '$''{'ac_cv_type_fp_except'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 106771 "configure"
+#line 106818 "configure"
 #include "confdefs.h"
 
 #include <floatingpoint.h>
@@ -106778,7 +106825,7 @@ fp_except x = (fp_except) 0;
 
 ; return 0; }
 EOF
-if { (eval echo configure:106782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:106829: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
      ac_cv_type_fp_except=yes
@@ -106808,17 +106855,17 @@ for ac_hdr in dlfcn.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:106812: checking for $ac_hdr" >&5
+echo "configure:106859: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 106817 "configure"
+#line 106864 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:106822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:106869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -106846,14 +106893,14 @@ done
 
 
 echo $ac_n "checking whether dlsym() requires a leading underscore in symbol names""... $ac_c" 1>&6
-echo "configure:106850: checking whether dlsym() requires a leading underscore in symbol names" >&5
+echo "configure:106897: checking whether dlsym() requires a leading underscore in symbol names" >&5
 if test "$cross_compiling" = yes; then :
   
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 106857 "configure"
+#line 106904 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -106914,7 +106961,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:106918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:106965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -106997,23 +107044,23 @@ fi
 
 
 echo $ac_n "checking virtual machine dispatch method""... $ac_c" 1>&6
-echo "configure:107001: checking virtual machine dispatch method" >&5
+echo "configure:107048: checking virtual machine dispatch method" >&5
 echo "$ac_t""$PHP_ZEND_VM" 1>&6
 
 echo $ac_n "checking whether to enable thread-safety""... $ac_c" 1>&6
-echo "configure:107005: checking whether to enable thread-safety" >&5
+echo "configure:107052: checking whether to enable thread-safety" >&5
 echo "$ac_t""$ZEND_MAINTAINER_ZTS" 1>&6
 
 echo $ac_n "checking whether to enable inline optimization for GCC""... $ac_c" 1>&6
-echo "configure:107009: checking whether to enable inline optimization for GCC" >&5
+echo "configure:107056: checking whether to enable inline optimization for GCC" >&5
 echo "$ac_t""$ZEND_INLINE_OPTIMIZATION" 1>&6
 
 echo $ac_n "checking whether to enable Zend debugging""... $ac_c" 1>&6
-echo "configure:107013: checking whether to enable Zend debugging" >&5
+echo "configure:107060: checking whether to enable Zend debugging" >&5
 echo "$ac_t""$ZEND_DEBUG" 1>&6
 
 echo $ac_n "checking whether to enable Zend multibyte""... $ac_c" 1>&6
-echo "configure:107017: checking whether to enable Zend multibyte" >&5
+echo "configure:107064: checking whether to enable Zend multibyte" >&5
 echo "$ac_t""$ZEND_MULTIBYTE" 1>&6
 	
 case $PHP_ZEND_VM in
@@ -107086,21 +107133,21 @@ fi
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:107090: checking for inline" >&5
+echo "configure:107137: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 107097 "configure"
+#line 107144 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:107104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:107151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -107129,7 +107176,7 @@ esac
 
 
 echo $ac_n "checking target system is Darwin""... $ac_c" 1>&6
-echo "configure:107133: checking target system is Darwin" >&5
+echo "configure:107180: checking target system is Darwin" >&5
 if echo "$target" | grep "darwin" > /dev/null; then
   cat >> confdefs.h <<\EOF
 #define DARWIN 1
@@ -107141,7 +107188,7 @@ else
 fi
 
 echo $ac_n "checking for MM alignment and log values""... $ac_c" 1>&6
-echo "configure:107145: checking for MM alignment and log values" >&5
+echo "configure:107192: checking for MM alignment and log values" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -107149,7 +107196,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 107153 "configure"
+#line 107200 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -107185,7 +107232,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:107189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:107236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   LIBZEND_MM_ALIGN=`cat conftest.zend | cut -d ' ' -f 1`
@@ -107210,7 +107257,7 @@ fi
 echo "$ac_t""done" 1>&6
 
 echo $ac_n "checking for memory allocation using mmap(MAP_ANON)""... $ac_c" 1>&6
-echo "configure:107214: checking for memory allocation using mmap(MAP_ANON)" >&5
+echo "configure:107261: checking for memory allocation using mmap(MAP_ANON)" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -107218,7 +107265,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 107222 "configure"
+#line 107269 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -107254,7 +107301,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:107258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:107305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   cat >> confdefs.h <<\EOF
@@ -107276,7 +107323,7 @@ fi
 
 
 echo $ac_n "checking for memory allocation using mmap("/dev/zero")""... $ac_c" 1>&6
-echo "configure:107280: checking for memory allocation using mmap("/dev/zero")" >&5
+echo "configure:107327: checking for memory allocation using mmap("/dev/zero")" >&5
 
 if test "$cross_compiling" = yes; then
   
@@ -107284,7 +107331,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 107288 "configure"
+#line 107335 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -107330,7 +107377,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:107334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:107381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   cat >> confdefs.h <<\EOF
@@ -107354,12 +107401,12 @@ fi
 for ac_func in mremap
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:107358: checking for $ac_func" >&5
+echo "configure:107405: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 107363 "configure"
+#line 107410 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -107382,7 +107429,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:107386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:107433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -107449,17 +107496,17 @@ for ac_hdr in stdarg.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:107453: checking for $ac_hdr" >&5
+echo "configure:107500: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 107458 "configure"
+#line 107505 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:107463: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:107510: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -107536,7 +107583,7 @@ if test "$TSRM_PTH" != "no"; then
   
 
 echo $ac_n "checking for GNU Pth""... $ac_c" 1>&6
-echo "configure:107540: checking for GNU Pth" >&5
+echo "configure:107587: checking for GNU Pth" >&5
 PTH_PREFIX="`$TSRM_PTH --prefix`"
 if test -z "$PTH_PREFIX"; then
   echo "$ac_t""Please check your Pth installation" 1>&6
@@ -107566,17 +107613,17 @@ elif test "$TSRM_ST" != "no"; then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:107570: checking for $ac_hdr" >&5
+echo "configure:107617: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 107575 "configure"
+#line 107622 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:107580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:107627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -107606,7 +107653,7 @@ done
 
   LIBS="$LIBS -lst"
   echo $ac_n "checking for SGI's State Threads""... $ac_c" 1>&6
-echo "configure:107610: checking for SGI's State Threads" >&5
+echo "configure:107657: checking for SGI's State Threads" >&5
   echo "$ac_t""yes" 1>&6
   cat >> confdefs.h <<\EOF
 #define TSRM_ST 1
@@ -107645,7 +107692,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 107649 "configure"
+#line 107696 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -107663,7 +107710,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:107667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:107714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -107683,7 +107730,7 @@ fi
   CFLAGS=$save_CFLAGS
 
   echo $ac_n "checking for pthreads_cflags""... $ac_c" 1>&6
-echo "configure:107687: checking for pthreads_cflags" >&5
+echo "configure:107734: checking for pthreads_cflags" >&5
 if eval "test \"`echo '$''{'ac_cv_pthreads_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107705,7 +107752,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 107709 "configure"
+#line 107756 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -107723,7 +107770,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:107727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:107774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -107753,7 +107800,7 @@ fi
 echo "$ac_t""$ac_cv_pthreads_cflags" 1>&6
 
 echo $ac_n "checking for pthreads_lib""... $ac_c" 1>&6
-echo "configure:107757: checking for pthreads_lib" >&5
+echo "configure:107804: checking for pthreads_lib" >&5
 if eval "test \"`echo '$''{'ac_cv_pthreads_lib'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -107775,7 +107822,7 @@ if test "$cross_compiling" = yes; then
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 107779 "configure"
+#line 107826 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
@@ -107793,7 +107840,7 @@ int main() {
     return pthread_create(&thd, NULL, thread_routine, &data);
 } 
 EOF
-if { (eval echo configure:107797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:107844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
   pthreads_working=yes
@@ -107844,7 +107891,7 @@ EOF
 
 
   echo $ac_n "checking for POSIX threads""... $ac_c" 1>&6
-echo "configure:107848: checking for POSIX threads" >&5
+echo "configure:107895: checking for POSIX threads" >&5
   echo "$ac_t""yes" 1>&6
 fi
 
@@ -108476,7 +108523,7 @@ fi
 
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:108480: checking build system type" >&5
+echo "configure:108527: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -108505,7 +108552,7 @@ ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
   echo $ac_n "checking for ld used by $CC""... $ac_c" 1>&6
-echo "configure:108509: checking for ld used by $CC" >&5
+echo "configure:108556: checking for ld used by $CC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -108535,10 +108582,10 @@ echo "configure:108509: checking for ld used by $CC" >&5
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:108539: checking for GNU ld" >&5
+echo "configure:108586: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:108542: checking for non-GNU ld" >&5
+echo "configure:108589: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -108577,7 +108624,7 @@ else
 fi
 test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
 echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:108581: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:108628: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108597,7 +108644,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:108601: checking for $LD option to reload object files" >&5
+echo "configure:108648: checking for $LD option to reload object files" >&5
 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108622,7 +108669,7 @@ case $host_os in
 esac
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:108626: checking for BSD-compatible nm" >&5
+echo "configure:108673: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108668,7 +108715,7 @@ echo "$ac_t""$lt_cv_path_NM" 1>&6
 NM="$lt_cv_path_NM"
 
 echo $ac_n "checking how to recognise dependent libraries""... $ac_c" 1>&6
-echo "configure:108672: checking how to recognise dependent libraries" >&5
+echo "configure:108719: checking how to recognise dependent libraries" >&5
 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108846,13 +108893,13 @@ deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:108850: checking for object suffix" >&5
+echo "configure:108897: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:108856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:108903: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -108872,7 +108919,7 @@ ac_objext=$ac_cv_objext
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:108876: checking for executable suffix" >&5
+echo "configure:108923: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -108882,7 +108929,7 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:108886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:108933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj) ;;
@@ -108925,7 +108972,7 @@ case $host in
 ia64-*-hpux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo configure:108929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:108976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case `/usr/bin/file conftest.$ac_objext` in
     *ELF-32*)
       HPUX_IA64_MODE="32"
@@ -108939,8 +108986,8 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 108943 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:108944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 108990 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:108991: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    if test "$lt_cv_prog_gnu_ld" = yes; then
     case `/usr/bin/file conftest.$ac_objext` in
     *32-bit*)
@@ -108973,7 +109020,7 @@ ia64-*-hpux*)
 x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo configure:108977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:109024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case `/usr/bin/file conftest.o` in
     *32-bit*)
       case $host in
@@ -109017,7 +109064,7 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:109021: checking whether the C compiler needs -belf" >&5
+echo "configure:109068: checking whether the C compiler needs -belf" >&5
 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109030,14 +109077,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 109034 "configure"
+#line 109081 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:109041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:109088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   lt_cv_cc_needs_belf=yes
 else
@@ -109082,7 +109129,7 @@ fi
 
 # find the maximum length of command line arguments
 echo $ac_n "checking the maximum length of command line arguments""... $ac_c" 1>&6
-echo "configure:109086: checking the maximum length of command line arguments" >&5
+echo "configure:109133: checking the maximum length of command line arguments" >&5
 if eval "test \"`echo '$''{'lt_cv_sys_max_cmd_len'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109183,7 +109230,7 @@ fi
 
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 echo $ac_n "checking command to parse $NM output from $compiler object""... $ac_c" 1>&6
-echo "configure:109187: checking command to parse $NM output from $compiler object" >&5
+echo "configure:109234: checking command to parse $NM output from $compiler object" >&5
 if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109278,10 +109325,10 @@ void nm_test_func(){}
 int main(){nm_test_var='a';nm_test_func();return(0);}
 EOF
 
-  if { (eval echo configure:109282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:109329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { (eval echo configure:109285: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
+    if { (eval echo configure:109332: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -109332,7 +109379,7 @@ EOF
 	  lt_save_CFLAGS="$CFLAGS"
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { (eval echo configure:109336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+	  if { (eval echo configure:109383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
 	  LIBS="$lt_save_LIBS"
@@ -109372,7 +109419,7 @@ else
 fi
 
 echo $ac_n "checking for objdir""... $ac_c" 1>&6
-echo "configure:109376: checking for objdir" >&5
+echo "configure:109423: checking for objdir" >&5
 if eval "test \"`echo '$''{'lt_cv_objdir'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109438,7 +109485,7 @@ with_gnu_ld="$lt_cv_prog_gnu_ld"
 # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:109442: checking for $ac_word" >&5
+echo "configure:109489: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109470,7 +109517,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:109474: checking for $ac_word" >&5
+echo "configure:109521: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109505,7 +109552,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:109509: checking for $ac_word" >&5
+echo "configure:109556: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109537,7 +109584,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:109541: checking for $ac_word" >&5
+echo "configure:109588: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109572,7 +109619,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:109576: checking for $ac_word" >&5
+echo "configure:109623: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109604,7 +109651,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:109608: checking for $ac_word" >&5
+echo "configure:109655: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109690,7 +109737,7 @@ case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:109694: checking for ${ac_tool_prefix}file" >&5
+echo "configure:109741: checking for ${ac_tool_prefix}file" >&5
 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109750,7 +109797,7 @@ fi
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:109754: checking for file" >&5
+echo "configure:109801: checking for file" >&5
 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109909,7 +109956,7 @@ fi
 # Check to make sure the static flag actually works.
 #
 echo $ac_n "checking if $compiler static flag $lt_prog_compiler_static works""... $ac_c" 1>&6
-echo "configure:109913: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo "configure:109960: checking if $compiler static flag $lt_prog_compiler_static works" >&5
 if eval "test \"`echo '$''{'lt_prog_compiler_static_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109959,7 +110006,7 @@ if test "$GCC" = yes; then
 
   
 echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6
-echo "configure:109963: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo "configure:110010: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_rtti_exceptions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -109976,11 +110023,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:109980: $lt_compile\"" >&5)
+   (eval echo "\"configure:110027: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "configure:109984: \$? = $ac_status" >&5
+   echo "configure:110031: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -110009,7 +110056,7 @@ lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
 echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
-echo "configure:110013: checking for $compiler option to produce PIC" >&5
+echo "configure:110060: checking for $compiler option to produce PIC" >&5
  
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -110228,7 +110275,7 @@ echo "$ac_t""$lt_prog_compiler_pic" 1>&6
 if test -n "$lt_prog_compiler_pic"; then
   
 echo $ac_n "checking if $compiler PIC flag $lt_prog_compiler_pic works""... $ac_c" 1>&6
-echo "configure:110232: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo "configure:110279: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 if eval "test \"`echo '$''{'lt_prog_compiler_pic_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -110245,11 +110292,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:110249: $lt_compile\"" >&5)
+   (eval echo "\"configure:110296: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "configure:110253: \$? = $ac_status" >&5
+   echo "configure:110300: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -110287,7 +110334,7 @@ case $host_os in
 esac
 
 echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
-echo "configure:110291: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo "configure:110338: checking if $compiler supports -c -o file.$ac_objext" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_c_o'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -110307,11 +110354,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:110311: $lt_compile\"" >&5)
+   (eval echo "\"configure:110358: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "configure:110315: \$? = $ac_status" >&5
+   echo "configure:110362: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -110341,7 +110388,7 @@ hard_links="nottested"
 if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
   # do not overwrite the value of need_locks provided by the user
   echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
-echo "configure:110345: checking if we can lock with hard links" >&5
+echo "configure:110392: checking if we can lock with hard links" >&5
   hard_links=yes
   $rm conftest*
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
@@ -110358,7 +110405,7 @@ else
 fi
 
 echo $ac_n "checking whether the $compiler linker ($LD) supports shared libraries""... $ac_c" 1>&6
-echo "configure:110362: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo "configure:110409: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 
   runpath_var=
   allow_undefined_flag=
@@ -110711,12 +110758,12 @@ EOF
        # Determine the default libpath from the value encoded in an empty executable.
        
 cat > conftest.$ac_ext <<EOF
-#line 110715 "configure"
+#line 110762 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:110720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:110767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   
 aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 }'`
@@ -110742,12 +110789,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	 # Determine the default libpath from the value encoded in an empty executable.
 	 
 cat > conftest.$ac_ext <<EOF
-#line 110746 "configure"
+#line 110793 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:110751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:110798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   
 aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 }'`
@@ -111219,11 +111266,11 @@ x|xyes)
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
       echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
-echo "configure:111223: checking whether -lc should be explicitly linked in" >&5
+echo "configure:111270: checking whether -lc should be explicitly linked in" >&5
       $rm conftest*
       printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { (eval echo configure:111227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
+      if { (eval echo configure:111274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
         soname=conftest
         lib=conftest
         libobjs=conftest.$ac_objext
@@ -111236,7 +111283,7 @@ echo "configure:111223: checking whether -lc should be explicitly linked in" >&5
         libname=conftest
         lt_save_allow_undefined_flag=$allow_undefined_flag
         allow_undefined_flag=
-        if { (eval echo configure:111240: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
+        if { (eval echo configure:111287: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
         then
 	  archive_cmds_need_lc=no
         else
@@ -111255,7 +111302,7 @@ echo "configure:111223: checking whether -lc should be explicitly linked in" >&5
 esac
 
 echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
-echo "configure:111259: checking dynamic linker characteristics" >&5
+echo "configure:111306: checking dynamic linker characteristics" >&5
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
@@ -111629,8 +111676,8 @@ linux*)
   libsuff=
   case $host_cpu in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 111633 "configure"' > conftest.$ac_ext
-    if { (eval echo configure:111634: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    echo '#line 111680 "configure"' > conftest.$ac_ext
+    if { (eval echo configure:111681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
       case `/usr/bin/file conftest.$ac_objext` in
       *64-bit*)
         libsuff=64
@@ -111829,7 +111876,7 @@ echo "$ac_t""$dynamic_linker" 1>&6
 test "$dynamic_linker" = no && can_build_shared=no
 
 echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
-echo "configure:111833: checking how to hardcode library paths into programs" >&5
+echo "configure:111880: checking how to hardcode library paths into programs" >&5
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" || \
    test -n "$runpath_var" || \
@@ -111867,7 +111914,7 @@ fi
 striplib=
 old_striplib=
 echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6
-echo "configure:111871: checking whether stripping libraries is possible" >&5
+echo "configure:111918: checking whether stripping libraries is possible" >&5
 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
@@ -111917,7 +111964,7 @@ else
   darwin*)
   # if libdl is installed we need to link against it
     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:111921: checking for dlopen in -ldl" >&5
+echo "configure:111968: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -111925,7 +111972,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 111929 "configure"
+#line 111976 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -111936,7 +111983,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:111940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:111987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -111965,12 +112012,12 @@ fi
 
   *)
     echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "configure:111969: checking for shl_load" >&5
+echo "configure:112016: checking for shl_load" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 111974 "configure"
+#line 112021 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shl_load(); below.  */
@@ -111993,7 +112040,7 @@ shl_load();
 
 ; return 0; }
 EOF
-if { (eval echo configure:111997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shl_load=yes"
 else
@@ -112011,7 +112058,7 @@ if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:112015: checking for shl_load in -ldld" >&5
+echo "configure:112062: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -112019,7 +112066,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 112023 "configure"
+#line 112070 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -112030,7 +112077,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:112034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -112049,12 +112096,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "configure:112053: checking for dlopen" >&5
+echo "configure:112100: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 112058 "configure"
+#line 112105 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
@@ -112077,7 +112124,7 @@ dlopen();
 
 ; return 0; }
 EOF
-if { (eval echo configure:112081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -112095,7 +112142,7 @@ if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:112099: checking for dlopen in -ldl" >&5
+echo "configure:112146: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -112103,7 +112150,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 112107 "configure"
+#line 112154 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -112114,7 +112161,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:112118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -112133,7 +112180,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
-echo "configure:112137: checking for dlopen in -lsvld" >&5
+echo "configure:112184: checking for dlopen in -lsvld" >&5
 ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -112141,7 +112188,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsvld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 112145 "configure"
+#line 112192 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -112152,7 +112199,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:112156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -112171,7 +112218,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "configure:112175: checking for dld_link in -ldld" >&5
+echo "configure:112222: checking for dld_link in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -112179,7 +112226,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 112183 "configure"
+#line 112230 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -112190,7 +112237,7 @@ int main() {
 dld_link()
 ; return 0; }
 EOF
-if { (eval echo configure:112194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:112241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -112246,7 +112293,7 @@ fi
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "configure:112250: checking whether a program can dlopen itself" >&5
+echo "configure:112297: checking whether a program can dlopen itself" >&5
 if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -112256,7 +112303,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 112260 "configure"
+#line 112307 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -112317,7 +112364,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:112321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:112368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -112340,7 +112387,7 @@ echo "$ac_t""$lt_cv_dlopen_self" 1>&6
     if test "x$lt_cv_dlopen_self" = xyes; then
       LDFLAGS="$LDFLAGS $link_static_flag"
       echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "configure:112344: checking whether a statically linked program can dlopen itself" >&5
+echo "configure:112391: checking whether a statically linked program can dlopen itself" >&5
 if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -112350,7 +112397,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 112354 "configure"
+#line 112401 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -112411,7 +112458,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:112415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:112462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -112452,11 +112499,11 @@ fi
 
 # Report which librarie types wil actually be built
 echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6
-echo "configure:112456: checking if libtool supports shared libraries" >&5
+echo "configure:112503: checking if libtool supports shared libraries" >&5
 echo "$ac_t""$can_build_shared" 1>&6
 
 echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6
-echo "configure:112460: checking whether to build shared libraries" >&5
+echo "configure:112507: checking whether to build shared libraries" >&5
 test "$can_build_shared" = "no" && enable_shared=no
 
 # On AIX, shared libraries and static libraries use the same namespace, and
@@ -112479,7 +112526,7 @@ esac
 echo "$ac_t""$enable_shared" 1>&6
 
 echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6
-echo "configure:112483: checking whether to build static libraries" >&5
+echo "configure:112530: checking whether to build static libraries" >&5
 # Make sure either enable_shared or enable_static is yes.
 test "$enable_shared" = yes || enable_static=yes
 echo "$ac_t""$enable_static" 1>&6
@@ -113148,7 +113195,7 @@ ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
   echo $ac_n "checking for ld used by $CC""... $ac_c" 1>&6
-echo "configure:113152: checking for ld used by $CC" >&5
+echo "configure:113199: checking for ld used by $CC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -113178,10 +113225,10 @@ echo "configure:113152: checking for ld used by $CC" >&5
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:113182: checking for GNU ld" >&5
+echo "configure:113229: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:113185: checking for non-GNU ld" >&5
+echo "configure:113232: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -113220,7 +113267,7 @@ else
 fi
 test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
 echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:113224: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:113271: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -113286,7 +113333,7 @@ fi
 
 # PORTME: fill in a description of your system's C++ link characteristics
 echo $ac_n "checking whether the $compiler linker ($LD) supports shared libraries""... $ac_c" 1>&6
-echo "configure:113290: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo "configure:113337: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 ld_shlibs_CXX=yes
 case $host_os in
   aix3*)
@@ -113382,12 +113429,12 @@ case $host_os in
       # Determine the default libpath from the value encoded in an empty executable.
       
 cat > conftest.$ac_ext <<EOF
-#line 113386 "configure"
+#line 113433 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:113391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:113438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   
 aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 }'`
@@ -113414,12 +113461,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	# Determine the default libpath from the value encoded in an empty executable.
 	
 cat > conftest.$ac_ext <<EOF
-#line 113418 "configure"
+#line 113465 "configure"
 #include "confdefs.h"
 int main() {
 ; return 0; }
 EOF
-if { (eval echo configure:113423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:113470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   
 aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 }'`
@@ -114126,7 +114173,7 @@ private:
 };
 EOF
 
-if { (eval echo configure:114130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:114177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   # Parse the compiler output and extract the necessary
   # objects, libraries and library flags.
 
@@ -114236,7 +114283,7 @@ lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
 echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
-echo "configure:114240: checking for $compiler option to produce PIC" >&5
+echo "configure:114287: checking for $compiler option to produce PIC" >&5
  
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -114517,7 +114564,7 @@ echo "$ac_t""$lt_prog_compiler_pic_CXX" 1>&6
 if test -n "$lt_prog_compiler_pic_CXX"; then
   
 echo $ac_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works""... $ac_c" 1>&6
-echo "configure:114521: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo "configure:114568: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
 if eval "test \"`echo '$''{'lt_prog_compiler_pic_works_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -114534,11 +114581,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:114538: $lt_compile\"" >&5)
+   (eval echo "\"configure:114585: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "configure:114542: \$? = $ac_status" >&5
+   echo "configure:114589: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -114576,7 +114623,7 @@ case $host_os in
 esac
 
 echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
-echo "configure:114580: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo "configure:114627: checking if $compiler supports -c -o file.$ac_objext" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_compiler_c_o_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -114596,11 +114643,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"configure:114600: $lt_compile\"" >&5)
+   (eval echo "\"configure:114647: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "configure:114604: \$? = $ac_status" >&5
+   echo "configure:114651: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -114630,7 +114677,7 @@ hard_links="nottested"
 if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
   # do not overwrite the value of need_locks provided by the user
   echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
-echo "configure:114634: checking if we can lock with hard links" >&5
+echo "configure:114681: checking if we can lock with hard links" >&5
   hard_links=yes
   $rm conftest*
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
@@ -114647,7 +114694,7 @@ else
 fi
 
 echo $ac_n "checking whether the $compiler linker ($LD) supports shared libraries""... $ac_c" 1>&6
-echo "configure:114651: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo "configure:114698: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 
   export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
   case $host_os in
@@ -114697,11 +114744,11 @@ x|xyes)
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
       echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
-echo "configure:114701: checking whether -lc should be explicitly linked in" >&5
+echo "configure:114748: checking whether -lc should be explicitly linked in" >&5
       $rm conftest*
       printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { (eval echo configure:114705: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
+      if { (eval echo configure:114752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } 2>conftest.err; then
         soname=conftest
         lib=conftest
         libobjs=conftest.$ac_objext
@@ -114714,7 +114761,7 @@ echo "configure:114701: checking whether -lc should be explicitly linked in" >&5
         libname=conftest
         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
         allow_undefined_flag_CXX=
-        if { (eval echo configure:114718: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
+        if { (eval echo configure:114765: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
         then
 	  archive_cmds_need_lc_CXX=no
         else
@@ -114733,7 +114780,7 @@ echo "configure:114701: checking whether -lc should be explicitly linked in" >&5
 esac
 
 echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
-echo "configure:114737: checking dynamic linker characteristics" >&5
+echo "configure:114784: checking dynamic linker characteristics" >&5
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
@@ -115107,8 +115154,8 @@ linux*)
   libsuff=
   case $host_cpu in
   x86_64*|s390x*|powerpc64*)
-    echo '#line 115111 "configure"' > conftest.$ac_ext
-    if { (eval echo configure:115112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    echo '#line 115158 "configure"' > conftest.$ac_ext
+    if { (eval echo configure:115159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
       case `/usr/bin/file conftest.$ac_objext` in
       *64-bit*)
         libsuff=64
@@ -115307,7 +115354,7 @@ echo "$ac_t""$dynamic_linker" 1>&6
 test "$dynamic_linker" = no && can_build_shared=no
 
 echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
-echo "configure:115311: checking how to hardcode library paths into programs" >&5
+echo "configure:115358: checking how to hardcode library paths into programs" >&5
 hardcode_action_CXX=
 if test -n "$hardcode_libdir_flag_spec_CXX" || \
    test -n "$runpath_var_CXX" || \
@@ -115345,7 +115392,7 @@ fi
 striplib=
 old_striplib=
 echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6
-echo "configure:115349: checking whether stripping libraries is possible" >&5
+echo "configure:115396: checking whether stripping libraries is possible" >&5
 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
@@ -115395,7 +115442,7 @@ else
   darwin*)
   # if libdl is installed we need to link against it
     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:115399: checking for dlopen in -ldl" >&5
+echo "configure:115446: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -115403,7 +115450,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 115407 "configure"
+#line 115454 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -115417,7 +115464,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:115421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -115446,12 +115493,12 @@ fi
 
   *)
     echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "configure:115450: checking for shl_load" >&5
+echo "configure:115497: checking for shl_load" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 115455 "configure"
+#line 115502 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shl_load(); below.  */
@@ -115477,7 +115524,7 @@ shl_load();
 
 ; return 0; }
 EOF
-if { (eval echo configure:115481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shl_load=yes"
 else
@@ -115495,7 +115542,7 @@ if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:115499: checking for shl_load in -ldld" >&5
+echo "configure:115546: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -115503,7 +115550,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 115507 "configure"
+#line 115554 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -115517,7 +115564,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:115521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -115536,12 +115583,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "configure:115540: checking for dlopen" >&5
+echo "configure:115587: checking for dlopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 115545 "configure"
+#line 115592 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen(); below.  */
@@ -115567,7 +115614,7 @@ dlopen();
 
 ; return 0; }
 EOF
-if { (eval echo configure:115571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlopen=yes"
 else
@@ -115585,7 +115632,7 @@ if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:115589: checking for dlopen in -ldl" >&5
+echo "configure:115636: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -115593,7 +115640,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 115597 "configure"
+#line 115644 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -115607,7 +115654,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:115611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -115626,7 +115673,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
-echo "configure:115630: checking for dlopen in -lsvld" >&5
+echo "configure:115677: checking for dlopen in -lsvld" >&5
 ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -115634,7 +115681,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsvld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 115638 "configure"
+#line 115685 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -115648,7 +115695,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:115652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -115667,7 +115714,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "configure:115671: checking for dld_link in -ldld" >&5
+echo "configure:115718: checking for dld_link in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -115675,7 +115722,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 115679 "configure"
+#line 115726 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -115689,7 +115736,7 @@ int main() {
 dld_link()
 ; return 0; }
 EOF
-if { (eval echo configure:115693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:115740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -115745,7 +115792,7 @@ fi
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "configure:115749: checking whether a program can dlopen itself" >&5
+echo "configure:115796: checking whether a program can dlopen itself" >&5
 if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -115755,7 +115802,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 115759 "configure"
+#line 115806 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -115816,7 +115863,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:115820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:115867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -115839,7 +115886,7 @@ echo "$ac_t""$lt_cv_dlopen_self" 1>&6
     if test "x$lt_cv_dlopen_self" = xyes; then
       LDFLAGS="$LDFLAGS $link_static_flag"
       echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "configure:115843: checking whether a statically linked program can dlopen itself" >&5
+echo "configure:115890: checking whether a statically linked program can dlopen itself" >&5
 if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -115849,7 +115896,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 115853 "configure"
+#line 115900 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -115910,7 +115957,7 @@ int main ()
     exit (status);
 }
 EOF
-  if { (eval echo configure:115914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  if { (eval echo configure:115961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
diff --git a/configure.in b/configure.in
index 11678c2..366e815 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-## $Id: configure.in,v 1.579.2.52.2.131 2009/02/25 14:56:50 iliaa Exp $ -*- autoconf -*-
+## $Id: configure.in,v 1.579.2.52.2.139 2009/06/17 12:22:41 iliaa Exp $ -*- autoconf -*-
 dnl ## Process this file with autoconf to produce a configure script.
 
 divert(1)
@@ -41,7 +41,7 @@ AC_CONFIG_HEADER(main/php_config.h)
 
 PHP_MAJOR_VERSION=5
 PHP_MINOR_VERSION=2
-PHP_RELEASE_VERSION=9
+PHP_RELEASE_VERSION=10
 PHP_EXTRA_VERSION=""
 PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
 PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION`
@@ -140,8 +140,9 @@ esac
 dnl Checks for programs.
 dnl -------------------------------------------------------------------------
 
-AC_PROG_CC
+AC_PROG_CC([cc gcc])
 PHP_DETECT_ICC
+PHP_DETECT_SUNCC
 AC_PROG_CC_C_O
 dnl Change to AC_PROG_CC_STDC when we start requiring a post-2.13 autoconf
 dnl AC_PROG_CC_STDC
@@ -187,6 +188,10 @@ case $host_cpu in
       CFLAGS="$CFLAGS -ieee"
     fi
     ;;
+  sparc*)
+    if test "$SUNCC" = "yes"; then
+      CFLAGS="$CFLAGS -xmemalign=8s"
+    fi
 esac
 
 case $host_alias in
@@ -685,7 +690,7 @@ if test "$PHP_GCOV" = "yes"; then
     AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
   fi
   
-  ltp_version_list="1.5 1.6"
+  ltp_version_list="1.5 1.6 1.7"
 
   AC_CHECK_PROG(LTP, lcov, lcov)
   AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
@@ -731,6 +736,15 @@ if test "$PHP_GCOV" = "yes"; then
   dnl Add the special gcc flags
   CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
   CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage"
+  if test "$SUNCC" = "yes"; then
+    if test -n "$auto_cflags"; then
+      CFLAGS="-g"
+      CXXFLAGS="-g"
+    else
+      CFLAGS="$CFLAGS -g"
+      CXXFLAGS="$CFLAGS -g"
+    fi
+  fi
 fi
 
 PHP_ARG_ENABLE(debug, whether to include debugging symbols,
diff --git a/ext/curl/config.m4 b/ext/curl/config.m4
index d53422a..92063bb 100644
--- a/ext/curl/config.m4
+++ b/ext/curl/config.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: config.m4,v 1.28.2.3.2.8 2008/11/07 21:18:45 felipe Exp $ 
+dnl $Id: config.m4,v 1.28.2.3.2.9 2009/05/02 19:55:14 jani Exp $ 
 dnl
 
 PHP_ARG_WITH(curl, for cURL support,
@@ -48,75 +48,80 @@ if test "$PHP_CURL" != "no"; then
   else
     AC_MSG_ERROR(cURL version 7.10.5 or later is required to compile php with cURL support)
   fi
+
+  PHP_ADD_INCLUDE($CURL_DIR/include)
+  PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD)
+  PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/$PHP_LIBDIR, CURL_SHARED_LIBADD)
   
   AC_MSG_CHECKING([for SSL support in libcurl])
   CURL_SSL=`$CURL_CONFIG --feature | $EGREP SSL`
   if test "$CURL_SSL" = "SSL"; then
-   AC_MSG_RESULT([yes])
-   AC_DEFINE([HAVE_CURL_SSL], [1], [Have cURL with  SSL support])
+    AC_MSG_RESULT([yes])
+    AC_DEFINE([HAVE_CURL_SSL], [1], [Have cURL with  SSL support])
    
-   save_CFLAGS="$CFLAGS"
-   CFLAGS="`$CURL_CONFIG --cflags`"
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="`$CURL_CONFIG --libs` $ld_runpath_switch$CURL_DIR/$PHP_LIBDIR"
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="`$CURL_CONFIG --cflags`"
    
-   AC_PROG_CPP
-   AC_MSG_CHECKING([for openssl support in libcurl])
-   AC_TRY_RUN([
-    #include <curl/curl.h>
-    int main(int argc, char *argv[]) {
-     curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
-     if (data && data->ssl_version && *data->ssl_version) {
-      const char *ptr = data->ssl_version;
-      while(*ptr == ' ') ++ptr;
-      return strncasecmp(ptr, "OpenSSL", sizeof("OpenSSL")-1);
-     }
-     return 1;
-    }
-   ],[
-    AC_MSG_RESULT([yes])
-    AC_CHECK_HEADERS([openssl/crypto.h], [
-     AC_DEFINE([HAVE_CURL_OPENSSL], [1], [Have cURL with OpenSSL support])
+    AC_PROG_CPP
+    AC_MSG_CHECKING([for openssl support in libcurl])
+    AC_TRY_RUN([
+#include <curl/curl.h>
+
+int main(int argc, char *argv[])
+{
+  curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
+
+  if (data && data->ssl_version && *data->ssl_version) {
+    const char *ptr = data->ssl_version;
+
+    while(*ptr == ' ') ++ptr;
+    return strncasecmp(ptr, "OpenSSL", sizeof("OpenSSL")-1);
+  }
+  return 1;
+}
+    ],[
+      AC_MSG_RESULT([yes])
+      AC_CHECK_HEADERS([openssl/crypto.h], [
+        AC_DEFINE([HAVE_CURL_OPENSSL], [1], [Have cURL with OpenSSL support])
+      ])
+    ], [
+      AC_MSG_RESULT([no])
+    ], [
+      AC_MSG_RESULT([no])
     ])
-   ], [
-    AC_MSG_RESULT([no])
-   ], [
-    AC_MSG_RESULT([no])
-   ])
    
-   AC_MSG_CHECKING([for gnutls support in libcurl])
-   AC_TRY_RUN([
-    #include <curl/curl.h>
-    int main(int argc, char *argv[]) {
-     curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
-     if (data && data->ssl_version && *data->ssl_version) {
-      const char *ptr = data->ssl_version;
-      while(*ptr == ' ') ++ptr;
-      return strncasecmp(ptr, "GnuTLS", sizeof("GnuTLS")-1);
-     }
-     return 1;
-    }
-   ], [
-    AC_MSG_RESULT([yes])
-    AC_CHECK_HEADER([gcrypt.h], [
-     AC_DEFINE([HAVE_CURL_GNUTLS], [1], [Have cURL with GnuTLS support])
+    AC_MSG_CHECKING([for gnutls support in libcurl])
+    AC_TRY_RUN([
+#include <curl/curl.h>
+
+int main(int argc, char *argv[])
+{
+  curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
+  
+  if (data && data->ssl_version && *data->ssl_version) {
+    const char *ptr = data->ssl_version;
+
+    while(*ptr == ' ') ++ptr;
+    return strncasecmp(ptr, "GnuTLS", sizeof("GnuTLS")-1);
+  }
+  return 1;
+}
+], [
+      AC_MSG_RESULT([yes])
+      AC_CHECK_HEADER([gcrypt.h], [
+        AC_DEFINE([HAVE_CURL_GNUTLS], [1], [Have cURL with GnuTLS support])
+      ])
+    ], [
+      AC_MSG_RESULT([no])
+    ], [
+      AC_MSG_RESULT([no])
     ])
-   ], [
-    AC_MSG_RESULT([no])
-   ], [
-    AC_MSG_RESULT([no])
-   ])
    
-   CFLAGS="$save_CFLAGS"
-   LDFLAGS="$save_LDFLAGS"
+    CFLAGS="$save_CFLAGS"
   else
-   AC_MSG_RESULT([no])
+    AC_MSG_RESULT([no])
   fi
 
-  PHP_ADD_INCLUDE($CURL_DIR/include)
-  PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD)
-  PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/$PHP_LIBDIR, CURL_SHARED_LIBADD)
-
   PHP_CHECK_LIBRARY(curl,curl_easy_perform, 
   [ 
     AC_DEFINE(HAVE_CURL,1,[ ])
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 9c72e39..7a10bf2 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: interface.c,v 1.62.2.14.2.41 2009/01/26 15:25:23 iliaa Exp $ */
+/* $Id: interface.c,v 1.62.2.14.2.57 2009/06/15 12:38:11 iliaa Exp $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
@@ -147,6 +147,7 @@ static struct gcry_thread_cbs php_curl_gnutls_tsl = {
 #endif
 /* }}} */
 
+static void _php_curl_close_ex(php_curl *ch TSRMLS_DC);
 static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC);
 
 #define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err;
@@ -157,36 +158,51 @@ static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC);
 #define CAAZ(s, v) add_assoc_zval_ex(return_value, s, sizeof(s), (zval *) v);
 
 #if defined(PHP_WIN32) || defined(__GNUC__)
- #define php_curl_ret(__ret) RETVAL_FALSE; return __ret;
+# define php_curl_ret(__ret) RETVAL_FALSE; return __ret;
 #else
- #define php_curl_ret(__ret) RETVAL_FALSE; return;
+# define php_curl_ret(__ret) RETVAL_FALSE; return;
 #endif
 
-#define PHP_CURL_CHECK_OPEN_BASEDIR(str, len, __ret)													\
-	if (((PG(open_basedir) && *PG(open_basedir)) || PG(safe_mode)) &&                                                \
-	    strncasecmp(str, "file:", sizeof("file:") - 1) == 0)								\
-	{ 																							\
-		php_url *tmp_url; 																		\
-															\
-		if (!(tmp_url = php_url_parse_ex(str, len))) {											\
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid URL '%s'", str);				\
-			php_curl_ret(__ret);											\
-		} 													\
-															\
-		if (tmp_url->host || !php_memnstr(str, tmp_url->path, strlen(tmp_url->path), str + len)) {				\
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "URL '%s' contains unencoded control characters", str);	\
-			php_url_free(tmp_url); 																\
-			php_curl_ret(__ret);											\
-		}													\
-																								\
-		if (tmp_url->query || tmp_url->fragment || php_check_open_basedir(tmp_url->path TSRMLS_CC) || 									\
-			(PG(safe_mode) && !php_checkuid(tmp_url->path, "rb+", CHECKUID_CHECK_MODE_PARAM))	\
-		) { 																					\
-			php_url_free(tmp_url); 																\
-			php_curl_ret(__ret);											\
-		} 																						\
-		php_url_free(tmp_url); 																	\
+static int php_curl_option_url(php_curl *ch, const char *url, const int len) /* {{{ */
+{
+	CURLcode error = CURLE_OK;
+#if LIBCURL_VERSION_NUM < 0x071100
+	char *copystr = NULL;
+#endif
+	TSRMLS_FETCH();
+
+	/* Disable file:// if open_basedir or safe_mode are used */
+	if ((PG(open_basedir) && *PG(open_basedir)) || PG(safe_mode)) {
+#if LIBCURL_VERSION_NUM >= 0x071304
+		error = curl_easy_setopt(ch->cp, CURLOPT_PROTOCOLS, CURLPROTO_ALL & ~CURLPROTO_FILE);
+#else
+		php_url *uri;
+
+		if (!(uri = php_url_parse_ex(url, len))) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid URL '%s'", url);
+			return 0;
+		}
+
+		if (!strncasecmp("file", uri->scheme, sizeof("file"))) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Protocol 'file' disabled in cURL");
+			php_url_free(uri);
+			return 0;
+		}
+		php_url_free(uri);
+#endif
 	}
+	/* Strings passed to libcurl as 'char *' arguments, are copied by the library... NOTE: before 7.17.0 strings were not copied. */
+#if LIBCURL_VERSION_NUM >= 0x071100
+	error = curl_easy_setopt(ch->cp, CURLOPT_URL, url);
+#else
+	copystr = estrndup(url, len);
+	error = curl_easy_setopt(ch->cp, CURLOPT_URL, copystr);
+	zend_llist_add_element(&ch->to_free.str, &copystr);
+#endif
+
+	return (error == CURLE_OK ? 1 : 0);
+}
+/* }}} */
 
 /* {{{ arginfo */
 static
@@ -279,14 +295,13 @@ ZEND_END_ARG_INFO()
 static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_info_read, 0, 0, 1)
 	ZEND_ARG_INFO(0, mh)
-	ZEND_ARG_INFO(0, msgs_in_queue)
+	ZEND_ARG_INFO(1, msgs_in_queue)
 ZEND_END_ARG_INFO()
 
 static
 ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_close, 0)
 	ZEND_ARG_INFO(0, mh)
 ZEND_END_ARG_INFO()
-
 /* }}} */
 
 /* {{{ curl_functions[]
@@ -352,8 +367,12 @@ PHP_MINFO_FUNCTION(curl)
 PHP_MINIT_FUNCTION(curl)
 {
 	le_curl = zend_register_list_destructors_ex(_php_curl_close, NULL, "curl", module_number);
-	le_curl_multi_handle = zend_register_list_destructors_ex(_php_curl_multi_close, NULL, "curl", module_number);
-	
+	le_curl_multi_handle = zend_register_list_destructors_ex(_php_curl_multi_close, NULL, "curl_multi", module_number);
+
+	/* See http://curl.haxx.se/lxr/source/docs/libcurl/symbols-in-versions
+	   or curl src/docs/libcurl/symbols-in-versions for a (almost) complete list
+	   of options and which version they were introduced */
+
 	/* Constants for curl_setopt() */
 	REGISTER_CURL_CONSTANT(CURLOPT_DNS_USE_GLOBAL_CACHE);
 	REGISTER_CURL_CONSTANT(CURLOPT_DNS_CACHE_TIMEOUT);
@@ -421,7 +440,7 @@ PHP_MINIT_FUNCTION(curl)
 	REGISTER_CURL_CONSTANT(CURLOPT_FILETIME);
 	REGISTER_CURL_CONSTANT(CURLOPT_WRITEFUNCTION);
 	REGISTER_CURL_CONSTANT(CURLOPT_READFUNCTION);
-#if CURLOPT_PASSWDFUNCTION != 0 
+#if CURLOPT_PASSWDFUNCTION != 0
 	REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);
 #endif
 	REGISTER_CURL_CONSTANT(CURLOPT_HEADERFUNCTION);
@@ -467,14 +486,14 @@ PHP_MINIT_FUNCTION(curl)
 	REGISTER_CURL_CONSTANT(CURL_TIMECOND_LASTMOD);
 
 #if LIBCURL_VERSION_NUM > 0x070a05 /* CURLOPT_HTTPAUTH is available since curl 7.10.6 */
- 	REGISTER_CURL_CONSTANT(CURLOPT_HTTPAUTH);
- 	/* http authentication options */
- 	REGISTER_CURL_CONSTANT(CURLAUTH_BASIC);
- 	REGISTER_CURL_CONSTANT(CURLAUTH_DIGEST);
- 	REGISTER_CURL_CONSTANT(CURLAUTH_GSSNEGOTIATE);
- 	REGISTER_CURL_CONSTANT(CURLAUTH_NTLM);
- 	REGISTER_CURL_CONSTANT(CURLAUTH_ANY);
- 	REGISTER_CURL_CONSTANT(CURLAUTH_ANYSAFE);
+	REGISTER_CURL_CONSTANT(CURLOPT_HTTPAUTH);
+	/* http authentication options */
+	REGISTER_CURL_CONSTANT(CURLAUTH_BASIC);
+	REGISTER_CURL_CONSTANT(CURLAUTH_DIGEST);
+	REGISTER_CURL_CONSTANT(CURLAUTH_GSSNEGOTIATE);
+	REGISTER_CURL_CONSTANT(CURLAUTH_NTLM);
+	REGISTER_CURL_CONSTANT(CURLAUTH_ANY);
+	REGISTER_CURL_CONSTANT(CURLAUTH_ANYSAFE);
 #endif
 
 #if LIBCURL_VERSION_NUM > 0x070a06 /* CURLOPT_PROXYAUTH & CURLOPT_FTP_CREATE_MISSING_DIRS are available since curl 7.10.7 */
@@ -520,7 +539,7 @@ PHP_MINIT_FUNCTION(curl)
 	REGISTER_CURL_CONSTANT(CURL_VERSION_KERBEROS4);
 	REGISTER_CURL_CONSTANT(CURL_VERSION_SSL);
 	REGISTER_CURL_CONSTANT(CURL_VERSION_LIBZ);
-	
+
 	/* version constants */
 	REGISTER_CURL_CONSTANT(CURLVERSION_NOW);
 
@@ -594,8 +613,8 @@ PHP_MINIT_FUNCTION(curl)
 #if LIBCURL_VERSION_NUM >= 0x070b00
 	REGISTER_CURL_CONSTANT(CURLE_FTP_SSL_FAILED);
 #endif
-
 	REGISTER_CURL_CONSTANT(CURLPROXY_HTTP);
+	REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS4);
 	REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS5);
 
 	REGISTER_CURL_CONSTANT(CURL_NETRC_OPTIONAL);
@@ -605,7 +624,7 @@ PHP_MINIT_FUNCTION(curl)
 	REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_NONE);
 	REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_0);
 	REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_1);
-	
+
 	REGISTER_CURL_CONSTANT(CURLM_CALL_MULTI_PERFORM);
 	REGISTER_CURL_CONSTANT(CURLM_OK);
 	REGISTER_CURL_CONSTANT(CURLM_BAD_HANDLE);
@@ -630,16 +649,34 @@ PHP_MINIT_FUNCTION(curl)
 	REGISTER_CURL_CONSTANT(CURLFTPSSL_ALL);
 #endif
 
+#if LIBCURL_VERSION_NUM >= 0x071304
+	REGISTER_CURL_CONSTANT(CURLOPT_REDIR_PROTOCOLS);
+	REGISTER_CURL_CONSTANT(CURLOPT_PROTOCOLS);
+	REGISTER_CURL_CONSTANT(CURLPROTO_HTTP);
+	REGISTER_CURL_CONSTANT(CURLPROTO_HTTPS);
+	REGISTER_CURL_CONSTANT(CURLPROTO_FTP);
+	REGISTER_CURL_CONSTANT(CURLPROTO_FTPS);
+	REGISTER_CURL_CONSTANT(CURLPROTO_SCP);
+	REGISTER_CURL_CONSTANT(CURLPROTO_SFTP);
+	REGISTER_CURL_CONSTANT(CURLPROTO_TELNET);
+	REGISTER_CURL_CONSTANT(CURLPROTO_LDAP);
+	REGISTER_CURL_CONSTANT(CURLPROTO_LDAPS);
+	REGISTER_CURL_CONSTANT(CURLPROTO_DICT);
+	REGISTER_CURL_CONSTANT(CURLPROTO_FILE);
+	REGISTER_CURL_CONSTANT(CURLPROTO_TFTP);
+	REGISTER_CURL_CONSTANT(CURLPROTO_ALL);
+#endif
+
 #ifdef PHP_CURL_NEED_OPENSSL_TSL
 	if (!CRYPTO_get_id_callback()) {
 		int i, c = CRYPTO_num_locks();
-		
+
 		php_curl_openssl_tsl = malloc(c * sizeof(MUTEX_T));
-		
+
 		for (i = 0; i < c; ++i) {
 			php_curl_openssl_tsl[i] = tsrm_mutex_alloc();
 		}
-		
+
 		CRYPTO_set_id_callback(php_curl_ssl_id);
 		CRYPTO_set_locking_callback(php_curl_ssl_lock);
 	}
@@ -647,7 +684,7 @@ PHP_MINIT_FUNCTION(curl)
 #ifdef PHP_CURL_NEED_GNUTLS_TSL
 	gcry_control(GCRYCTL_SET_THREAD_CBS, &php_curl_gnutls_tsl);
 #endif
-	
+
 	if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) {
 		return FAILURE;
 	}
@@ -669,7 +706,7 @@ PHP_MINIT_FUNCTION(curl)
 	php_register_url_stream_wrapper("ldap", &php_curl_wrapper TSRMLS_CC);
 # endif
 #endif
-	
+
 	return SUCCESS;
 }
 /* }}} */
@@ -688,14 +725,14 @@ PHP_MSHUTDOWN_FUNCTION(curl)
 #ifdef PHP_CURL_NEED_OPENSSL_TSL
 	if (php_curl_openssl_tsl) {
 		int i, c = CRYPTO_num_locks();
-		
+
 		CRYPTO_set_id_callback(NULL);
 		CRYPTO_set_locking_callback(NULL);
-			
+
 		for (i = 0; i < c; ++i) {
 			tsrm_mutex_free(php_curl_openssl_tsl[i]);
 		}
-			
+
 		free(php_curl_openssl_tsl);
 		php_curl_openssl_tsl = NULL;
 	}
@@ -717,7 +754,7 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
 	fprintf(stderr, "curl_write() called\n");
 	fprintf(stderr, "data = %s, size = %d, nmemb = %d, ctx = %x\n", data, size, nmemb, ctx);
 #endif
-	
+
 	switch (t->method) {
 		case PHP_CURL_STDOUT:
 			PHPWRITE(data, length);
@@ -741,7 +778,7 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
 			ZVAL_RESOURCE(handle, ch->id);
 			zend_list_addref(ch->id);
 			argv[0] = &handle;
-	
+
 			MAKE_STD_ZVAL(zdata);
 			ZVAL_STRINGL(zdata, data, length, 1);
 			argv[1] = &zdata;
@@ -832,7 +869,7 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx)
 			error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC);
 			ch->in_callback = 0;
 			if (error == FAILURE) {
-				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot call the CURLOPT_READFUNCTION"); 
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot call the CURLOPT_READFUNCTION");
 #if LIBCURL_VERSION_NUM >= 0x070c01 /* 7.12.1 */
 				length = CURL_READFUNC_ABORT;
 #endif
@@ -863,7 +900,7 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx
 	php_curl_write *t   = ch->handlers->write_header;
 	size_t          length = size * nmemb;
 	TSRMLS_FETCH_FROM_CTX(ch->thread_ctx);
-	
+
 	switch (t->method) {
 		case PHP_CURL_STDOUT:
 			/* Handle special case write when we're returning the entire transfer
@@ -939,7 +976,7 @@ static int curl_debug(CURL *cp, curl_infotype type, char *buf, size_t buf_len, v
 
 	if (type == CURLINFO_HEADER_OUT) {
 		if (ch->header.str_len) {
-			efree(ch->header.str);		
+			efree(ch->header.str);
 		}
 		if (buf_len > 0) {
 			ch->header.str = estrndup(buf, buf_len);
@@ -985,7 +1022,7 @@ static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen)
 	} else {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "User handler '%s' did not return a string", Z_STRVAL_P(func));
 	}
-	
+
 	zval_ptr_dtor(&argv[0]);
 	zval_ptr_dtor(&argv[1]);
 	zval_ptr_dtor(&argv[2]);
@@ -1002,7 +1039,7 @@ static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen)
 static void curl_free_string(void **string)
 {
 	efree(*string);
-}	
+}
 /* }}} */
 #endif
 
@@ -1027,7 +1064,7 @@ static void curl_free_slist(void **slist)
 PHP_FUNCTION(curl_version)
 {
 	curl_version_info_data *d;
-	long                    uversion = CURLVERSION_NOW;
+	long uversion = CURLVERSION_NOW;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &uversion) == FAILURE) {
 		return;
@@ -1057,7 +1094,8 @@ PHP_FUNCTION(curl_version)
 		array_init(protocol_list);
 
 		while (*p != NULL) {
-			add_next_index_string(protocol_list,  *p++, 1);
+			add_next_index_string(protocol_list,  *p, 1);
+			p++;
 		}
 		CAAZ("protocols", protocol_list);
 	}
@@ -1076,9 +1114,9 @@ static void alloc_curl_handle(php_curl **ch)
 
 	(*ch)->in_callback = 0;
 	(*ch)->header.str_len = 0;
-		
+
 	memset(&(*ch)->err, 0, sizeof((*ch)->err));
-	
+
 #if LIBCURL_VERSION_NUM < 0x071101
 	zend_llist_init(&(*ch)->to_free.str,   sizeof(char *),            (llist_dtor_func_t) curl_free_string, 0);
 #endif
@@ -1091,10 +1129,10 @@ static void alloc_curl_handle(php_curl **ch)
    Initialize a cURL session */
 PHP_FUNCTION(curl_init)
 {
-	zval       **url;
-	php_curl    *ch;
-	CURL        *cp;
-	int          argc = ZEND_NUM_ARGS();
+	php_curl	*ch;
+	zval		**url;
+	CURL		*cp;
+	int			argc = ZEND_NUM_ARGS();
 
 	if (argc < 0 || argc > 1 || zend_get_parameters_ex(argc, &url) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -1102,7 +1140,6 @@ PHP_FUNCTION(curl_init)
 
 	if (argc > 0) {
 		convert_to_string_ex(url);
-		PHP_CURL_CHECK_OPEN_BASEDIR(Z_STRVAL_PP(url), Z_STRLEN_PP(url), (void) NULL);
 	}
 
 	cp = curl_easy_init();
@@ -1115,7 +1152,7 @@ PHP_FUNCTION(curl_init)
 	TSRMLS_SET_CTX(ch->thread_ctx);
 
 	ch->cp = cp;
-	
+
 	ch->handlers->write->method = PHP_CURL_STDOUT;
 	ch->handlers->write->type   = PHP_CURL_ASCII;
 	ch->handlers->read->method  = PHP_CURL_DIRECT;
@@ -1140,15 +1177,10 @@ PHP_FUNCTION(curl_init)
 #endif
 
 	if (argc > 0) {
-#if LIBCURL_VERSION_NUM >= 0x071100
-		curl_easy_setopt(ch->cp, CURLOPT_URL, Z_STRVAL_PP(url));
-#else
-		char *urlcopy;
-
-		urlcopy = estrndup(Z_STRVAL_PP(url), Z_STRLEN_PP(url));
-		curl_easy_setopt(ch->cp, CURLOPT_URL, urlcopy);
-		zend_llist_add_element(&ch->to_free.str, &urlcopy);
-#endif
+		if (!php_curl_option_url(ch, Z_STRVAL_PP(url), Z_STRLEN_PP(url))) {
+			_php_curl_close_ex(ch TSRMLS_CC);
+			RETURN_FALSE;
+		}
 	}
 
 	ZEND_REGISTER_RESOURCE(return_value, ch, le_curl);
@@ -1160,14 +1192,14 @@ PHP_FUNCTION(curl_init)
    Copy a cURL handle along with all of it's preferences */
 PHP_FUNCTION(curl_copy_handle)
 {
-	zval     **zid;
-	CURL      *cp;
-	php_curl  *ch;
-	php_curl  *dupch;
+	CURL		*cp;
+	zval		**zid;
+	php_curl	*ch, *dupch;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
 		WRONG_PARAM_COUNT;
 	}
+
 	ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
 
 	cp = curl_easy_duphandle(ch->cp);
@@ -1180,6 +1212,7 @@ PHP_FUNCTION(curl_copy_handle)
 	TSRMLS_SET_CTX(dupch->thread_ctx);
 
 	dupch->cp = cp;
+	dupch->uses = 0;
 	dupch->handlers->write->method = ch->handlers->write->method;
 	dupch->handlers->write->type   = ch->handlers->write->type;
 	dupch->handlers->read->method  = ch->handlers->read->method;
@@ -1303,7 +1336,18 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 #if LIBCURL_VERSION_NUM > 0x070b01 /* CURLOPT_TCP_NODELAY is available since curl 7.11.2 */
 		case CURLOPT_TCP_NODELAY:
 #endif
+#if LIBCURL_VERSION_NUM >= 0x71304
+		case CURLOPT_REDIR_PROTOCOLS:
+		case CURLOPT_PROTOCOLS:
+#endif
 			convert_to_long_ex(zvalue);
+#if LIBCURL_VERSION_NUM >= 0x71304
+			if (((PG(open_basedir) && *PG(open_basedir)) || PG(safe_mode)) && (Z_LVAL_PP(zvalue) & CURLPROTO_FILE)) {
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "CURLPROTO_FILE cannot be activated when in safe_mode or an open_basedir is set");
+					RETVAL_FALSE;
+					return 1;
+			}
+#endif
 			error = curl_easy_setopt(ch->cp, option, Z_LVAL_PP(zvalue));
 			break;
 		case CURLOPT_FOLLOWLOCATION:
@@ -1329,47 +1373,50 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 		case CURLOPT_COOKIE:
 		case CURLOPT_REFERER:
 		case CURLOPT_INTERFACE:
-		case CURLOPT_KRB4LEVEL: 
+		case CURLOPT_KRB4LEVEL:
 		case CURLOPT_EGDSOCKET:
-		case CURLOPT_CAINFO: 
+		case CURLOPT_CAINFO:
 		case CURLOPT_CAPATH:
-		case CURLOPT_SSL_CIPHER_LIST: 
+		case CURLOPT_SSL_CIPHER_LIST:
 		case CURLOPT_SSLKEY:
-		case CURLOPT_SSLKEYTYPE: 
-		case CURLOPT_SSLKEYPASSWD: 
-		case CURLOPT_SSLENGINE: 
+		case CURLOPT_SSLKEYTYPE:
+		case CURLOPT_SSLKEYPASSWD:
+		case CURLOPT_SSLENGINE:
 		case CURLOPT_SSLENGINE_DEFAULT:
 		case CURLOPT_SSLCERTTYPE:
-		case CURLOPT_ENCODING: {
+		case CURLOPT_ENCODING:
+		{
 #if LIBCURL_VERSION_NUM < 0x071100
 			char *copystr = NULL;
 #endif
-	
+
 			convert_to_string_ex(zvalue);
 
 			if (option == CURLOPT_URL) {
-				PHP_CURL_CHECK_OPEN_BASEDIR(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue), 1);
-			}
-
+				if (!php_curl_option_url(ch, Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue))) {
+					RETVAL_FALSE;
+					return 1;
+				}
+			} else {
 #if LIBCURL_VERSION_NUM >= 0x071100
-			/* Strings passed to libcurl as ’char *’ arguments, are copied by the library... NOTE: before 7.17.0 strings were not copied. */
-			error = curl_easy_setopt(ch->cp, option, Z_STRVAL_PP(zvalue));
+				/* Strings passed to libcurl as ’char *’ arguments, are copied by the library... NOTE: before 7.17.0 strings were not copied. */
+				error = curl_easy_setopt(ch->cp, option, Z_STRVAL_PP(zvalue));
 #else
-			copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
-			error = curl_easy_setopt(ch->cp, option, copystr);
-			zend_llist_add_element(&ch->to_free.str, &copystr);
+				copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
+				error = curl_easy_setopt(ch->cp, option, copystr);
+				zend_llist_add_element(&ch->to_free.str, &copystr);
 #endif
-
+			}
 			break;
 		}
 		case CURLOPT_FILE:
-		case CURLOPT_INFILE: 
+		case CURLOPT_INFILE:
 		case CURLOPT_WRITEHEADER:
 		case CURLOPT_STDERR: {
 			FILE *fp = NULL;
 			int type;
 			void * what;
-		
+
 			what = zend_fetch_resource(zvalue TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream());
 			if (!what) {
 				RETVAL_FALSE;
@@ -1389,18 +1436,46 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 			error = CURLE_OK;
 			switch (option) {
 				case CURLOPT_FILE:
-					ch->handlers->write->fp = fp;
-					ch->handlers->write->method = PHP_CURL_FILE;
+					if (((php_stream *) what)->mode[0] != 'r') {
+						zend_list_addref(Z_LVAL_PP(zvalue));
+						ch->handlers->write->fp = fp;
+						ch->handlers->write->method = PHP_CURL_FILE;
+					} else {
+						php_error_docref(NULL TSRMLS_CC, E_WARNING, "the provided file handle is not writable");
+						RETVAL_FALSE;
+						return 1;
+					}
 					break;
 				case CURLOPT_WRITEHEADER:
-					ch->handlers->write_header->fp = fp;
-					ch->handlers->write_header->method = PHP_CURL_FILE;
+					if (((php_stream *) what)->mode[0] != 'r') {
+						zend_list_addref(Z_LVAL_PP(zvalue));
+						ch->handlers->write_header->fp = fp;
+						ch->handlers->write_header->method = PHP_CURL_FILE;
+					} else {
+						php_error_docref(NULL TSRMLS_CC, E_WARNING, "the provided file handle is not writable");
+						RETVAL_FALSE;
+						return 1;
+					}
 					break;
 				case CURLOPT_INFILE:
 					zend_list_addref(Z_LVAL_PP(zvalue));
 					ch->handlers->read->fp = fp;
 					ch->handlers->read->fd = Z_LVAL_PP(zvalue);
 					break;
+				case CURLOPT_STDERR:
+					if (((php_stream *) what)->mode[0] != 'r') {
+						if (ch->handlers->std_err) {
+							zval_ptr_dtor(&ch->handlers->std_err);
+						}
+						zval_add_ref(zvalue);
+						ch->handlers->std_err = *zvalue;
+						zend_list_addref(Z_LVAL_PP(zvalue));
+					} else {
+						php_error_docref(NULL TSRMLS_CC, E_WARNING, "the provided file handle is not writable");
+						RETVAL_FALSE;
+						return 1;
+					}
+					/* break omitted intentionally */
 				default:
 					error = curl_easy_setopt(ch->cp, option, fp);
 					break;
@@ -1418,7 +1493,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 			}
 			break;
 		case CURLOPT_BINARYTRANSFER:
-			convert_to_long_ex(zvalue);	
+			convert_to_long_ex(zvalue);
 
 			if (Z_LVAL_PP(zvalue)) {
 				ch->handlers->write->type = PHP_CURL_BINARY;
@@ -1476,8 +1551,8 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 				uint              string_key_len;
 
 				postfields = HASH_OF(*zvalue);
-				if (! postfields) {
-					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't get HashTable in CURLOPT_POSTFIELDS"); 
+				if (!postfields) {
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't get HashTable in CURLOPT_POSTFIELDS");
 					RETVAL_FALSE;
 					return 1;
 				}
@@ -1491,7 +1566,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 					convert_to_string_ex(current);
 
 					zend_hash_get_current_key_ex(postfields, &string_key, &string_key_len, &num_key, 0, NULL);
-				
+
 					postval = Z_STRVAL_PP(current);
 
 					/* The arguments after _NAMELENGTH and _CONTENTSLENGTH
@@ -1513,7 +1588,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 							return 1;
 						}
 						if (type) {
-							error = curl_formadd(&first, &last, 
+							error = curl_formadd(&first, &last,
 											 CURLFORM_COPYNAME, string_key,
 											 CURLFORM_NAMELENGTH, (long)string_key_len - 1,
 											 CURLFORM_FILE, postval,
@@ -1521,7 +1596,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 											 CURLFORM_END);
 							*type = ';';
 						} else {
-							error = curl_formadd(&first, &last, 
+							error = curl_formadd(&first, &last,
 											 CURLFORM_COPYNAME, string_key,
 											 CURLFORM_NAMELENGTH, (long)string_key_len - 1,
 											 CURLFORM_FILE, postval,
@@ -1529,10 +1604,10 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 
 						}
 					} else {
-						error = curl_formadd(&first, &last, 
+						error = curl_formadd(&first, &last,
 											 CURLFORM_COPYNAME, string_key,
 											 CURLFORM_NAMELENGTH, (long)string_key_len - 1,
-											 CURLFORM_COPYCONTENTS, postval, 
+											 CURLFORM_COPYCONTENTS, postval,
 											 CURLFORM_CONTENTSLENGTH, (long)Z_STRLEN_PP(current),
 											 CURLFORM_END);
 					}
@@ -1549,6 +1624,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 
 			} else {
 #if LIBCURL_VERSION_NUM >= 0x071101
+				convert_to_string_ex(zvalue);
 				/* with curl 7.17.0 and later, we can use COPYPOSTFIELDS, but we have to provide size before */
 				error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue));
 				error = curl_easy_setopt(ch->cp, CURLOPT_COPYPOSTFIELDS, Z_STRVAL_PP(zvalue));
@@ -1564,7 +1640,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 #endif
 			}
 			break;
-		case CURLOPT_HTTPHEADER: 
+		case CURLOPT_HTTPHEADER:
 		case CURLOPT_QUOTE:
 		case CURLOPT_HTTP200ALIASES:
 		case CURLOPT_POSTQUOTE: {
@@ -1588,7 +1664,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 
 				slist = curl_slist_append(slist, Z_STRVAL_PP(current));
 				if (!slist) {
-					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not build curl_slist"); 
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not build curl_slist");
 					RETVAL_FALSE;
 					return 1;
 				}
@@ -1655,7 +1731,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
 PHP_FUNCTION(curl_setopt)
 {
 	zval       **zid, **zoption, **zvalue;
-	php_curl    *ch;
+	php_curl   *ch;
 
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &zid, &zoption, &zvalue) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -1679,24 +1755,24 @@ PHP_FUNCTION(curl_setopt_array)
 {
 	zval		*zid, *arr, **entry;
 	php_curl	*ch;
-	long		option;
+	ulong		option;
 	HashPosition	pos;
-	char 		*string_key;
-	int 		str_key_len;
+	char		*string_key;
+	uint		str_key_len;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "za", &zid, &arr) == FAILURE) {
-		RETURN_FALSE;
+		return;
 	}
 
 	ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl);
 
 	zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
 	while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **)&entry, &pos) == SUCCESS) {
-		if (zend_hash_get_current_key_ex(Z_ARRVAL_P(arr), &string_key, &str_key_len, &option, 0, &pos) == HASH_KEY_IS_STRING) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array keys must be CURLOPT constants or equivalent integer values"); 
+		if (zend_hash_get_current_key_ex(Z_ARRVAL_P(arr), &string_key, &str_key_len, &option, 0, &pos) != HASH_KEY_IS_LONG) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array keys must be CURLOPT constants or equivalent integer values");
 			RETURN_FALSE;
 		}
-		if (_php_curl_setopt(ch, option, entry, return_value TSRMLS_CC)) {
+		if (_php_curl_setopt(ch, (long) option, entry, return_value TSRMLS_CC)) {
 			RETURN_FALSE;
 		}
 		zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
@@ -1705,7 +1781,7 @@ PHP_FUNCTION(curl_setopt_array)
 }
 /* }}} */
 
-/* {{{ _php_curl_cleanup_handle(ch) 
+/* {{{ _php_curl_cleanup_handle(ch)
    Cleanup an execution phase */
 void _php_curl_cleanup_handle(php_curl *ch)
 {
@@ -1726,9 +1802,9 @@ void _php_curl_cleanup_handle(php_curl *ch)
    Perform a cURL session */
 PHP_FUNCTION(curl_exec)
 {
-	zval      **zid;
-	php_curl   *ch;
-	CURLcode    error;
+	CURLcode	error;
+	zval		**zid;
+	php_curl	*ch;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -1737,7 +1813,7 @@ PHP_FUNCTION(curl_exec)
 	ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
 
 	_php_curl_cleanup_handle(ch);
-	
+
 	error = curl_easy_perform(ch->cp);
 	SAVE_CURL_ERROR(ch, error);
 	/* CURLE_PARTIAL_FILE is returned by HEAD requests */
@@ -1748,14 +1824,11 @@ PHP_FUNCTION(curl_exec)
 		RETURN_FALSE;
 	}
 
-	ch->uses++;
-
 	if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) {
-		--ch->uses;
 		smart_str_0(&ch->handlers->write->buf);
 		RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 1);
 	}
-	--ch->uses;
+
 	if (ch->handlers->write->method == PHP_CURL_RETURN) {
 		RETURN_EMPTY_STRING();
 	} else {
@@ -1768,10 +1841,9 @@ PHP_FUNCTION(curl_exec)
    Get information regarding a specific transfer */
 PHP_FUNCTION(curl_getinfo)
 {
-	zval       **zid, 
-	           **zoption;
-	php_curl    *ch;
-	int          option, argc = ZEND_NUM_ARGS();
+	zval		**zid, **zoption;
+	php_curl	*ch;
+	int			option, argc = ZEND_NUM_ARGS();
 
 	if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &zid, &zoption) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -1860,22 +1932,22 @@ PHP_FUNCTION(curl_getinfo)
 		option = Z_LVAL_PP(zoption);
 		switch (option) {
 			case CURLINFO_PRIVATE:
-			case CURLINFO_EFFECTIVE_URL: 
+			case CURLINFO_EFFECTIVE_URL:
 			case CURLINFO_CONTENT_TYPE: {
- 				char *s_code = NULL;
+				char *s_code = NULL;
 
- 				if (curl_easy_getinfo(ch->cp, option, &s_code) == CURLE_OK && s_code) {
- 					RETURN_STRING(s_code, 1);
- 				} else {
- 					RETURN_FALSE;
- 				}
+				if (curl_easy_getinfo(ch->cp, option, &s_code) == CURLE_OK && s_code) {
+					RETURN_STRING(s_code, 1);
+				} else {
+					RETURN_FALSE;
+				}
 				break;
 			}
-			case CURLINFO_HTTP_CODE: 
-			case CURLINFO_HEADER_SIZE: 
-			case CURLINFO_REQUEST_SIZE: 
-			case CURLINFO_FILETIME: 
-			case CURLINFO_SSL_VERIFYRESULT: 
+			case CURLINFO_HTTP_CODE:
+			case CURLINFO_HEADER_SIZE:
+			case CURLINFO_REQUEST_SIZE:
+			case CURLINFO_FILETIME:
+			case CURLINFO_SSL_VERIFYRESULT:
 			case CURLINFO_REDIRECT_COUNT: {
 				long code = 0;
 
@@ -1886,16 +1958,16 @@ PHP_FUNCTION(curl_getinfo)
 				}
 				break;
 			}
-			case CURLINFO_TOTAL_TIME: 
-			case CURLINFO_NAMELOOKUP_TIME: 
+			case CURLINFO_TOTAL_TIME:
+			case CURLINFO_NAMELOOKUP_TIME:
 			case CURLINFO_CONNECT_TIME:
-			case CURLINFO_PRETRANSFER_TIME: 
-			case CURLINFO_SIZE_UPLOAD: 
+			case CURLINFO_PRETRANSFER_TIME:
+			case CURLINFO_SIZE_UPLOAD:
 			case CURLINFO_SIZE_DOWNLOAD:
-			case CURLINFO_SPEED_DOWNLOAD: 
-			case CURLINFO_SPEED_UPLOAD: 
+			case CURLINFO_SPEED_DOWNLOAD:
+			case CURLINFO_SPEED_UPLOAD:
 			case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
-			case CURLINFO_CONTENT_LENGTH_UPLOAD: 
+			case CURLINFO_CONTENT_LENGTH_UPLOAD:
 			case CURLINFO_STARTTRANSFER_TIME:
 			case CURLINFO_REDIRECT_TIME: {
 				double code = 0.0;
@@ -1922,9 +1994,9 @@ PHP_FUNCTION(curl_getinfo)
    Return a string contain the last error for the current session */
 PHP_FUNCTION(curl_error)
 {
-	zval      **zid;
-	php_curl   *ch;
-	
+	zval		**zid;
+	php_curl	*ch;
+
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
 		WRONG_PARAM_COUNT;
 	}
@@ -1940,8 +2012,8 @@ PHP_FUNCTION(curl_error)
    Return an integer containing the last error number */
 PHP_FUNCTION(curl_errno)
 {
-	zval      **zid;
-	php_curl   *ch;
+	zval		**zid;
+	php_curl	*ch;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -1957,8 +2029,8 @@ PHP_FUNCTION(curl_errno)
    Close a cURL session */
 PHP_FUNCTION(curl_close)
 {
-	zval      **zid;
-	php_curl   *ch;
+	zval		**zid;
+	php_curl	*ch;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -1970,8 +2042,8 @@ PHP_FUNCTION(curl_close)
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to close cURL handle from a callback");
 		return;
 	}
-	
-	if (ch->uses) {	
+
+	if (ch->uses) {
 		ch->uses--;
 	} else {
 		zend_list_delete(Z_LVAL_PP(zid));
@@ -1981,14 +2053,17 @@ PHP_FUNCTION(curl_close)
 
 /* {{{ _php_curl_close()
    List destructor for curl handles */
-static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void _php_curl_close_ex(php_curl *ch TSRMLS_DC)
 {
-	php_curl *ch = (php_curl *) rsrc->ptr;
-
 #if PHP_CURL_DEBUG
 	fprintf(stderr, "DTOR CALLED, ch = %x\n", ch);
 #endif
-	
+
+	/* Prevent crash inside cURL if passed file has already been closed */
+	if (ch->handlers->std_err && ch->handlers->std_err->refcount <= 0) {
+		curl_easy_setopt(ch->cp, CURLOPT_STDERR, stderr);
+	}
+
 	curl_easy_cleanup(ch->cp);
 #if LIBCURL_VERSION_NUM < 0x071101
 	zend_llist_clean(&ch->to_free.str);
@@ -2011,16 +2086,28 @@ static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 	if (ch->handlers->passwd) {
 		zval_ptr_dtor(&ch->handlers->passwd);
 	}
+	if (ch->handlers->std_err) {
+		zval_ptr_dtor(&ch->handlers->std_err);
+	}
 	if (ch->header.str_len > 0) {
 		efree(ch->header.str);
 	}
-	
+
 	efree(ch->handlers->write);
 	efree(ch->handlers->write_header);
 	efree(ch->handlers->read);
 	efree(ch->handlers);
 	efree(ch);
-}	
+}
+/* }}} */
+
+/* {{{ _php_curl_close()
+   List destructor for curl handles */
+static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+{
+	php_curl *ch = (php_curl *) rsrc->ptr;
+	_php_curl_close_ex(ch TSRMLS_CC);
+}
 /* }}} */
 
 #endif /* HAVE_CURL */
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
index f38e200..f75d02a 100644
--- a/ext/curl/php_curl.h
+++ b/ext/curl/php_curl.h
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_curl.h,v 1.44.2.2.2.5 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: php_curl.h,v 1.44.2.2.2.7 2009/05/27 22:38:53 pajoye Exp $ */
 
 #ifndef _PHP_CURL_H
 #define _PHP_CURL_H
@@ -101,6 +101,7 @@ typedef struct {
 	php_curl_write *write_header;
 	php_curl_read  *read;
 	zval           *passwd;
+	zval           *std_err;
 } php_curl_handlers;
 
 struct _php_curl_error  {
diff --git a/ext/curl/streams.c b/ext/curl/streams.c
index c2a9a5d..d908d6f 100644
--- a/ext/curl/streams.c
+++ b/ext/curl/streams.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: streams.c,v 1.14.2.2.2.13 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: streams.c,v 1.14.2.2.2.14 2009/05/05 00:33:02 jani Exp $ */
 
 /* This file implements cURL based wrappers.
  * NOTE: If you are implementing your own streams that are intended to
@@ -48,6 +48,7 @@
 #include "ext/standard/php_smart_str.h"
 #include "ext/standard/info.h"
 #include "ext/standard/file.h"
+#include "ext/standard/php_string.h"
 #include "php_curl.h"
 
 static size_t on_data_available(char *data, size_t size, size_t nmemb, void *ctx)
@@ -258,6 +259,7 @@ php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename,
 	php_stream *stream;
 	php_curl_stream *curlstream;
 	zval *tmp, **ctx_opt = NULL;
+	struct curl_slist *slist = NULL;
 
 	curlstream = emalloc(sizeof(php_curl_stream));
 	memset(curlstream, 0, sizeof(php_curl_stream));
@@ -306,6 +308,15 @@ php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename,
 	
 	/* TODO: read cookies and options from context */
 	if (context && !strncasecmp(filename, "http", sizeof("http")-1)) {
+		/* Protocol version */
+		if (SUCCESS == php_stream_context_get_option(context, "http", "protocol_version", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_DOUBLE) {
+			if (Z_DVAL_PP(ctx_opt) == 1.1) {
+				curl_easy_setopt(curlstream->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+			} else {
+				curl_easy_setopt(curlstream->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+			}
+		}
+
 		if (SUCCESS == php_stream_context_get_option(context, "http", "curl_verify_ssl_host", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_BOOL && Z_LVAL_PP(ctx_opt) == 1) {
 			curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYHOST, 1);
 		} else {
@@ -321,20 +332,34 @@ php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename,
 		if (SUCCESS == php_stream_context_get_option(context, "http", "user_agent", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) {
 			curl_easy_setopt(curlstream->curl, CURLOPT_USERAGENT, Z_STRVAL_PP(ctx_opt));
 		}
-		if (SUCCESS == php_stream_context_get_option(context, "http", "header", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_ARRAY) {
-			HashPosition pos;
-			zval **header = NULL;
-			struct curl_slist *hl = NULL;
+		if (SUCCESS == php_stream_context_get_option(context, "http", "header", &ctx_opt)) {
+			if (Z_TYPE_PP(ctx_opt) == IS_ARRAY) {
+				HashPosition pos;
+				zval **header = NULL;
 			
-			for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(ctx_opt), &pos);
-				SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(ctx_opt), (void *)&header, &pos);
-				zend_hash_move_forward_ex(Z_ARRVAL_PP(ctx_opt), &pos)) {
-				if (Z_TYPE_PP(header) == IS_STRING) {
-					hl = curl_slist_append(hl, Z_STRVAL_PP(header));
+				for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(ctx_opt), &pos);
+					SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(ctx_opt), (void *)&header, &pos);
+					zend_hash_move_forward_ex(Z_ARRVAL_PP(ctx_opt), &pos)
+				) {
+					if (Z_TYPE_PP(header) == IS_STRING) {
+						slist = curl_slist_append(slist, Z_STRVAL_PP(header));
+					}
+				}
+			} else if (Z_TYPE_PP(ctx_opt) == IS_STRING && Z_STRLEN_PP(ctx_opt)) {
+				char *p, *token, *trimmed, *copy_ctx_opt;
+
+				copy_ctx_opt = php_trim(Z_STRVAL_PP(ctx_opt), Z_STRLEN_PP(ctx_opt), NULL, 0, NULL, 3 TSRMLS_CC);
+				p = php_strtok_r(copy_ctx_opt, "\r\n", &token);
+				while (p) {
+					trimmed = php_trim(p, strlen(p), NULL, 0, NULL, 3 TSRMLS_CC);
+					slist = curl_slist_append(slist, trimmed);
+					efree(trimmed);
+					p = php_strtok_r(NULL, "\r\n", &token);
 				}
+				efree(copy_ctx_opt);
 			}
-			if (hl) {
-				curl_easy_setopt(curlstream->curl, CURLOPT_HTTPHEADER, hl);
+			if (slist) {
+				curl_easy_setopt(curlstream->curl, CURLOPT_HTTPHEADER, slist);
 			}
 		}
 		if (SUCCESS == php_stream_context_get_option(context, "http", "method", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) {
@@ -467,7 +492,9 @@ php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename,
 			return NULL;
 		}
 	}
-	
+	if (slist) {
+		curl_slist_free_all(slist);
+	}
 	return stream;
 }
 
diff --git a/ext/curl/tests/bug45161.phpt b/ext/curl/tests/bug45161.phpt
index eab1fd4..1ae8187 100644
--- a/ext/curl/tests/bug45161.phpt
+++ b/ext/curl/tests/bug45161.phpt
@@ -1,5 +1,21 @@
 --TEST--
 Bug #45161 (Reusing a curl handle leaks memory)
+--SKIPIF--
+<?php 
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+	exit("skip not for Windows");
+}
+if (!extension_loaded("curl")) {
+	exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  {
+	exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+$curl_version = curl_version(); 
+if ($curl_version['version_number'] < 0x071100) {
+	exit("skip: test works only with curl >= 7.17.0");
+}
+?>
 --FILE--
 <?php
 
diff --git a/ext/curl/tests/bug46711.phpt b/ext/curl/tests/bug46711.phpt
new file mode 100644
index 0000000..8eef556
--- /dev/null
+++ b/ext/curl/tests/bug46711.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #46711 (lost memory when foreach is used for values passed to curl_setopt())
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) {
+	exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  {
+	exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+$ch = curl_init();
+
+$opt = array(
+	CURLOPT_AUTOREFERER  => TRUE,
+	CURLOPT_BINARYTRANSFER => TRUE
+);
+
+curl_setopt( $ch, CURLOPT_AUTOREFERER  , TRUE );
+
+foreach( $opt as $option => $value ) {
+	curl_setopt( $ch, $option, $value );
+}
+
+var_dump($opt); // with this bug, $opt[58] becomes NULL
+
+?>
+--EXPECT--
+array(2) {
+  [58]=>
+  bool(true)
+  [19914]=>
+  bool(true)
+}
diff --git a/ext/curl/tests/bug46739.phpt b/ext/curl/tests/bug46739.phpt
index 06a84ea..52bfbc8 100644
--- a/ext/curl/tests/bug46739.phpt
+++ b/ext/curl/tests/bug46739.phpt
@@ -1,5 +1,14 @@
 --TEST--
 Bug #46739 (array returned by curl_getinfo should contain content_type key)
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) {
+	exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  {
+	exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
 --FILE--
 <?php
 $ch = curl_init('http://127.0.0.1:9/');
diff --git a/ext/curl/tests/bug48203.phpt b/ext/curl/tests/bug48203.phpt
new file mode 100644
index 0000000..84fcf83
--- /dev/null
+++ b/ext/curl/tests/bug48203.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #48203 (Crash when CURLOPT_STDERR is set to regular file)
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) {
+	exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  {
+	exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+
+$fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w');
+
+$ch = curl_init();
+
+curl_setopt($ch, CURLOPT_VERBOSE, 1);
+curl_setopt($ch, CURLOPT_STDERR, $fp);
+curl_setopt($ch, CURLOPT_URL, "");
+
+fclose($fp); // <-- premature close of $fp caused a crash!
+
+curl_exec($ch);
+
+echo "Ok\n";
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?>
+--EXPECT--
+Ok
diff --git a/ext/curl/tests/bug48514.phpt b/ext/curl/tests/bug48514.phpt
new file mode 100644
index 0000000..0ea2575
--- /dev/null
+++ b/ext/curl/tests/bug48514.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Bug #48514 (cURL extension uses same resource name for simple and multi APIs)
+--SKIPIF--
+<?php
+
+if (!extension_loaded('curl')) {
+	exit("skip curl extension not loaded");
+}
+
+?>
+--FILE--
+<?php
+
+$ch1 = curl_init();
+var_dump($ch1);
+var_dump(get_resource_type($ch1));
+
+$ch2 = curl_multi_init();
+var_dump($ch2);
+var_dump(get_resource_type($ch2));
+
+?>
+--EXPECTF--
+resource(%d) of type (curl)
+%string|unicode%(4) "curl"
+resource(%d) of type (curl_multi)
+%string|unicode%(10) "curl_multi"
diff --git a/ext/curl/tests/curl_basic_001.phpt b/ext/curl/tests/curl_basic_001.phpt
new file mode 100644
index 0000000..fa362b3
--- /dev/null
+++ b/ext/curl/tests/curl_basic_001.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test curl_exec() function with basic functionality 
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch at 9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype  : bool curl_exec(resource ch)
+ * Description: Perform a cURL session 
+ * Source code: ext/curl/interface.c
+ * Alias to functions: 
+ */
+	
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo "*** Testing curl_exec() : basic functionality ***\n";
+
+  $url = "{$host}/get.php?test=get";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  $ok = curl_exec($ch);
+  curl_close($ch);
+  $curl_content = ob_get_contents();
+  ob_end_clean();
+
+  if($ok) {
+    var_dump( $curl_content );
+  } else {
+    echo "curl_exec returned false";
+  }
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_exec() : basic functionality ***
+string(25) "Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_002.phpt b/ext/curl/tests/curl_basic_002.phpt
new file mode 100644
index 0000000..e46f323
--- /dev/null
+++ b/ext/curl/tests/curl_basic_002.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with CURLOPT_RETURNTRANSFER parameter set to 1
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch at 9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ***' . "\n";
+
+  $url = "{$host}/get.php?test=get";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ***
+string(25) "Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_003.phpt b/ext/curl/tests/curl_basic_003.phpt
new file mode 100644
index 0000000..eb2aecd
--- /dev/null
+++ b/ext/curl/tests/curl_basic_003.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test curl_opt() function with POST parameters
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch at 9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl sending through GET an POST ***' . "\n";
+
+  $url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_POST, 1);
+  curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello=World&Foo=Bar&Person=John%20Doe");
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl sending through GET an POST ***
+string(208) "array(2) {
+  ["test"]=>
+  string(7) "getpost"
+  ["get_param"]=>
+  string(11) "Hello World"
+}
+array(3) {
+  ["Hello"]=>
+  string(5) "World"
+  ["Foo"]=>
+  string(3) "Bar"
+  ["Person"]=>
+  string(8) "John Doe"
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_004.phpt b/ext/curl/tests/curl_basic_004.phpt
new file mode 100644
index 0000000..ea2eeca
--- /dev/null
+++ b/ext/curl/tests/curl_basic_004.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with setting referer
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch at 9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl setting referer ***' . "\n";
+
+  $url = "{$host}/get.php?test=referer";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_REFERER, 'http://www.refer.er');
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl setting referer ***
+string(19) "http://www.refer.er"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_005.phpt b/ext/curl/tests/curl_basic_005.phpt
new file mode 100644
index 0000000..9285c10
--- /dev/null
+++ b/ext/curl/tests/curl_basic_005.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with user agent
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch at 9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php 
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl with user agent ***' . "\n";
+
+  $url = "{$host}/get.php?test=useragent";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_USERAGENT, 'cURL phpt');
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with user agent ***
+string(9) "cURL phpt"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_007.phpt b/ext/curl/tests/curl_basic_007.phpt
new file mode 100755
index 0000000..b7eba4b
--- /dev/null
+++ b/ext/curl/tests/curl_basic_007.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test curl_error() & curl_errno() function without url
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick at noparking.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+//In January 2008 , level 7.18.0 of the curl lib, many of the messages changed.
+//The final crlf was removed. This test is coded to work with or without the crlf.
+
+$ch = curl_init();
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%string|unicode%(%d) "No URL set!%w"
+int(3)
diff --git a/ext/curl/tests/curl_basic_008.phpt b/ext/curl/tests/curl_basic_008.phpt
new file mode 100755
index 0000000..32de4d0
--- /dev/null
+++ b/ext/curl/tests/curl_basic_008.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test curl_error() & curl_errno() function with problematic host
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick at noparking.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$url = "http://www.".uniqid().".".uniqid();
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_URL, $url);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%unicode|string%(%d) "%r(Couldn't resolve host|Could not resolve host:)%r %Swww.%s"
+int(6)
diff --git a/ext/curl/tests/curl_basic_009.phpt b/ext/curl/tests/curl_basic_009.phpt
new file mode 100644
index 0000000..529e590
--- /dev/null
+++ b/ext/curl/tests/curl_basic_009.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test curl_error() & curl_errno() function with problematic protocol
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick at noparking.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$url = uniqid()."://www.".uniqid().".".uniqid();
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_URL, $url);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%unicode|string%(%d) "%Srotocol%s"
+int(1)
diff --git a/ext/curl/tests/curl_basic_010.phpt b/ext/curl/tests/curl_basic_010.phpt
new file mode 100644
index 0000000..9a595b3
--- /dev/null
+++ b/ext/curl/tests/curl_basic_010.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test curl_error() & curl_errno() function with problematic proxy
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick at noparking.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$url = "http://www.example.org";
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_PROXY, uniqid().":".uniqid());
+curl_setopt($ch, CURLOPT_URL, $url);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%unicode|string%(%d) "%r(Couldn't resolve proxy|Could not resolve proxy:)%r %s"
+int(5)
diff --git a/ext/curl/tests/curl_basic_011.phpt b/ext/curl/tests/curl_basic_011.phpt
new file mode 100644
index 0000000..dfdc8f9
--- /dev/null
+++ b/ext/curl/tests/curl_basic_011.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl_opt() function with COOKIE 
+--CREDITS--
+TestFest 2009 - AFUP - Xavier Gorse <xgorse at elao.com>      
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl with cookie ***' . "\n";
+
+  $url = "{$host}/get.php?test=cookie";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_COOKIE, 'foo=bar');    
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with cookie ***
+string(3) "bar"
+===DONE===
+                     
\ No newline at end of file
diff --git a/ext/curl/tests/curl_basic_012.phpt b/ext/curl/tests/curl_basic_012.phpt
new file mode 100644
index 0000000..e4706fa
--- /dev/null
+++ b/ext/curl/tests/curl_basic_012.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl_opt() function with CURLOPT_HTTP_VERSION/CURL_HTTP_VERSION_1_0    
+--CREDITS--
+TestFest 2009 - AFUP - Xavier Gorse <xgorse at elao.com>   
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl with HTTP/1.0 ***' . "\n";
+
+  $url = "{$host}/get.php?test=httpversion";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with HTTP/1.0 ***
+string(8) "HTTP/1.0"
+===DONE===
+                     
\ No newline at end of file
diff --git a/ext/curl/tests/curl_basic_013.phpt b/ext/curl/tests/curl_basic_013.phpt
new file mode 100644
index 0000000..c49d187
--- /dev/null
+++ b/ext/curl/tests/curl_basic_013.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl_opt() function with CURLOPT_HTTP_VERSION/CURL_HTTP_VERSION_1_1 
+--CREDITS--
+TestFest 2009 - AFUP - Xavier Gorse <xgorse at elao.com>      
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo '*** Testing curl with HTTP/1.1 ***' . "\n";
+
+  $url = "{$host}/get.php?test=httpversion";
+  $ch = curl_init();
+
+  ob_start(); // start output buffering
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+  curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+  
+  $curl_content = curl_exec($ch);
+  curl_close($ch);
+
+  var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with HTTP/1.1 ***
+string(8) "HTTP/1.1"
+===DONE===
+                     
\ No newline at end of file
diff --git a/ext/curl/tests/curl_basic_014.phpt b/ext/curl/tests/curl_basic_014.phpt
new file mode 100644
index 0000000..4037970
--- /dev/null
+++ b/ext/curl/tests/curl_basic_014.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Test curl_init() function with basic functionality
+--CREDITS--
+Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
+--FILE--
+<?php
+  $ch = curl_init();
+  var_dump($ch);
+?>
+===DONE===
+--EXPECTF--
+resource(%d) of type (curl)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_015.phpt b/ext/curl/tests/curl_basic_015.phpt
new file mode 100644
index 0000000..e8e43e5
--- /dev/null
+++ b/ext/curl/tests/curl_basic_015.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Test curl_init() function with $url parameter defined
+--CREDITS--
+Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
+--FILE--
+<?php
+  $url = 'http://www.example.com/'; 
+  $ch  = curl_init($url);
+  var_dump($url == curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
+?>
+===DONE===
+--EXPECTF--
+bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_016.phpt b/ext/curl/tests/curl_basic_016.phpt
new file mode 100644
index 0000000..5c947eb
--- /dev/null
+++ b/ext/curl/tests/curl_basic_016.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test curl_getinfo() function with basic functionality
+--CREDITS--
+Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
+--FILE--
+<?php
+  $ch   = curl_init();
+  $info = curl_getinfo($ch);
+  var_dump($info);
+?>
+===DONE===
+--EXPECTF--
+array(20) {
+  [%u|b%"url"]=>
+  string(0) ""
+  ["content_type"]=>
+  NULL
+  ["http_code"]=>
+  int(0)
+  ["header_size"]=>
+  int(0)
+  ["request_size"]=>
+  int(0)
+  ["filetime"]=>
+  int(0)
+  ["ssl_verify_result"]=>
+  int(0)
+  ["redirect_count"]=>
+  int(0)
+  ["total_time"]=>
+  float(0)
+  ["namelookup_time"]=>
+  float(0)
+  ["connect_time"]=>
+  float(0)
+  ["pretransfer_time"]=>
+  float(0)
+  ["size_upload"]=>
+  float(0)
+  ["size_download"]=>
+  float(0)
+  ["speed_download"]=>
+  float(0)
+  ["speed_upload"]=>
+  float(0)
+  ["download_content_length"]=>
+  float(%f)
+  ["upload_content_length"]=>
+  float(%f)
+  ["starttransfer_time"]=>
+  float(0)
+  ["redirect_time"]=>
+  float(0)
+}
+===DONE===
diff --git a/ext/curl/tests/curl_basic_017.phpt b/ext/curl/tests/curl_basic_017.phpt
new file mode 100644
index 0000000..09247b2
--- /dev/null
+++ b/ext/curl/tests/curl_basic_017.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test curl_multi_exec() function with basic functionality 
+--CREDITS--
+TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix at gmail.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype  : bool curl_multi_exec(resource ch)
+ * Description: Perform a cURL session 
+ * Source code: ext/curl/multi.c
+ * Alias to functions: 
+ */
+	
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo "*** Testing curl_exec() : basic functionality ***\n";
+
+  $url = "{$host}/get.php?test=get";
+  $chs = array(
+    0 => curl_init(),
+    1 => curl_init(),
+    2 => curl_init(),
+  );
+  
+  ob_start(); // start output buffering
+  
+  curl_setopt($chs[0], CURLOPT_URL, $url); //set the url we want to use
+  curl_setopt($chs[1], CURLOPT_URL, $url); //set the url we want to use
+  curl_setopt($chs[2], CURLOPT_URL, $url); //set the url we want to use
+  
+  $mh = curl_multi_init();
+  
+  // add handlers
+  curl_multi_add_handle($mh, $chs[0]);
+  curl_multi_add_handle($mh, $chs[1]);
+  curl_multi_add_handle($mh, $chs[2]);
+  
+  $running=null;
+  //execute the handles
+  $state = null;
+  do {
+    $state = curl_multi_exec($mh, $running);
+  } while ($running > 0);
+  
+  //close the handles
+  curl_multi_remove_handle($mh, $chs[0]);
+  curl_multi_remove_handle($mh, $chs[1]);
+  curl_multi_remove_handle($mh, $chs[2]);
+  curl_multi_close($mh);
+  
+  $curl_content = ob_get_contents();
+  ob_end_clean();
+
+  if($state === CURLM_OK) {
+    var_dump( $curl_content );
+  } else {
+    echo "curl_exec returned false";
+  }
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_exec() : basic functionality ***
+string(75) "Hello World!
+Hello World!Hello World!
+Hello World!Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_018.phpt b/ext/curl/tests/curl_basic_018.phpt
new file mode 100644
index 0000000..7cffb89
--- /dev/null
+++ b/ext/curl/tests/curl_basic_018.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Test curl_setopt() with curl_multi function with basic functionality 
+--CREDITS--
+TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix at gmail.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype  : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+	
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  // start testing
+  echo "*** Testing curl_exec() : basic functionality ***\n";
+
+  $url = "{$host}/get.php?test=get";
+  $chs = array(
+    0 => curl_init(),
+    1 => curl_init(),
+    2 => curl_init(),
+  );
+  
+  ob_start(); // start output buffering
+  
+  $options = array(
+    CURLOPT_RETURNTRANSFER => 1,
+    CURLOPT_URL => $url,
+  );
+  
+  curl_setopt_array($chs[0], $options); //set the options
+  curl_setopt_array($chs[1], $options); //set the options
+  curl_setopt_array($chs[2], $options); //set the options
+  
+  $mh = curl_multi_init();
+  
+  // add handlers
+  curl_multi_add_handle($mh, $chs[0]);
+  curl_multi_add_handle($mh, $chs[1]);
+  curl_multi_add_handle($mh, $chs[2]);
+  
+  $running=null;
+  //execute the handles
+  do {
+    curl_multi_exec($mh, $running);
+  } while ($running > 0);
+
+  $curl_content = '';
+  $curl_content .= curl_multi_getcontent($chs[0]);
+  $curl_content .= curl_multi_getcontent($chs[1]);
+  $curl_content .= curl_multi_getcontent($chs[2]);
+  
+  //close the handles
+  curl_multi_remove_handle($mh, $chs[0]);
+  curl_multi_remove_handle($mh, $chs[1]);
+  curl_multi_remove_handle($mh, $chs[2]);
+  curl_multi_close($mh);
+  
+  var_dump( $curl_content );
+  
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_exec() : basic functionality ***
+%unicode|string%(75) "Hello World!
+Hello World!Hello World!
+Hello World!Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_019.phpt b/ext/curl/tests/curl_basic_019.phpt
new file mode 100644
index 0000000..ab605a8
--- /dev/null
+++ b/ext/curl/tests/curl_basic_019.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test curl_getinfo() function with CURLINFO_EFFECTIVE_URL parameter
+--CREDITS--
+Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  $url = "{$host}/get.php?test=";
+  $ch  = curl_init();
+
+  curl_setopt($ch, CURLOPT_URL, $url);
+  curl_exec($ch);
+  $info = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
+  var_dump($url == $info);
+  
+  curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+Hello World!
+Hello World!bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_020.phpt b/ext/curl/tests/curl_basic_020.phpt
new file mode 100644
index 0000000..d622053
--- /dev/null
+++ b/ext/curl/tests/curl_basic_020.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test curl_getinfo() function with CURLINFO_HTTP_CODE parameter
+--CREDITS--
+Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+  $url = "{$host}/get.php?test=";
+  $ch  = curl_init();
+  curl_setopt($ch, CURLOPT_URL, $url);
+  curl_exec($ch);
+  var_dump(curl_getinfo($ch, CURLINFO_HTTP_CODE));
+  curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+Hello World!
+Hello World!int(200)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_021.phpt b/ext/curl/tests/curl_basic_021.phpt
new file mode 100644
index 0000000..3b4798d
--- /dev/null
+++ b/ext/curl/tests/curl_basic_021.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test curl_getinfo() function with CURLINFO_CONTENT_TYPE parameter
+--CREDITS--
+Jean-Marc Fontaine <jmf at durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER'))  exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+  $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+  $url  = "{$host}/get.php?test=contenttype";
+
+  $ch = curl_init();
+  curl_setopt($ch, CURLOPT_URL, $url);
+  curl_exec($ch);
+  var_dump(curl_getinfo($ch, CURLINFO_CONTENT_TYPE));
+  curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+%unicode|string%(24) "text/plain;charset=utf-8"
+===DONE===
diff --git a/ext/curl/tests/responder/get.php b/ext/curl/tests/responder/get.php
new file mode 100644
index 0000000..26dd519
--- /dev/null
+++ b/ext/curl/tests/responder/get.php
@@ -0,0 +1,30 @@
+<?php
+  switch($_GET['test']) {
+    case 'getpost':
+      var_dump($_GET);
+      var_dump($_POST);
+      break;
+    case 'referer':
+      echo $_SERVER['HTTP_REFERER'];
+      break;
+    case 'useragent':
+      echo $_SERVER['HTTP_USER_AGENT'];
+      break;
+    case 'httpversion':
+      echo $_SERVER['SERVER_PROTOCOL'];
+      break;
+    case 'cookie':
+      echo $_COOKIE['foo'];
+      break;
+    case 'encoding':
+      echo $_SERVER['HTTP_ACCEPT_ENCODING'];  
+      break;
+    case 'contenttype':
+      header('Content-Type: text/plain;charset=utf-8');
+      break;
+    default:
+      echo "Hello World!\n";
+      echo "Hello World!";
+      break;
+  }
+?>
diff --git a/ext/date/config.m4 b/ext/date/config.m4
deleted file mode 100644
index 33e26bd..0000000
--- a/ext/date/config.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-dnl $Id: config.m4,v 1.10.2.2 2005/12/19 13:00:32 derick Exp $
-dnl config.m4 for date extension
-
-sinclude(ext/date/lib/timelib.m4)
-sinclude(lib/timelib.m4)
-
-PHP_DATE_CFLAGS="-I at ext_builddir@/lib"
-timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c 
-                 lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c"
-
-PHP_NEW_EXTENSION(date, php_date.c $timelib_sources, no,, $PHP_DATE_CFLAGS)
-
-PHP_ADD_BUILD_DIR([$ext_builddir/lib], 1)
-PHP_ADD_INCLUDE([$ext_builddir/lib])
-PHP_ADD_INCLUDE([$ext_srcdir/lib])
-
-PHP_INSTALL_HEADERS([ext/date], [php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h])
-
-cat > $ext_builddir/lib/timelib_config.h <<EOF
-#ifdef PHP_WIN32
-# include "config.w32.h"
-#else
-# include <php_config.h>
-#endif
-EOF
diff --git a/ext/date/config0.m4 b/ext/date/config0.m4
new file mode 100644
index 0000000..7b036b4
--- /dev/null
+++ b/ext/date/config0.m4
@@ -0,0 +1,25 @@
+dnl $Id: config0.m4,v 1.1.4.2 2009/05/14 18:34:27 jani Exp $
+dnl config.m4 for date extension
+
+sinclude(ext/date/lib/timelib.m4)
+sinclude(lib/timelib.m4)
+
+PHP_DATE_CFLAGS="-I at ext_builddir@/lib"
+timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c 
+                 lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c"
+
+PHP_NEW_EXTENSION(date, php_date.c $timelib_sources, no,, $PHP_DATE_CFLAGS)
+
+PHP_ADD_BUILD_DIR([$ext_builddir/lib], 1)
+PHP_ADD_INCLUDE([$ext_builddir/lib])
+PHP_ADD_INCLUDE([$ext_srcdir/lib])
+
+PHP_INSTALL_HEADERS([ext/date], [php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h])
+
+cat > $ext_builddir/lib/timelib_config.h <<EOF
+#ifdef PHP_WIN32
+# include "config.w32.h"
+#else
+# include <php_config.h>
+#endif
+EOF
diff --git a/ext/date/lib/timelib_structs.h b/ext/date/lib/timelib_structs.h
index 2b1bc46..7c1a5b6 100644
--- a/ext/date/lib/timelib_structs.h
+++ b/ext/date/lib/timelib_structs.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: timelib_structs.h,v 1.13.2.6.2.6 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: timelib_structs.h,v 1.13.2.6.2.7 2009/05/03 18:22:59 derick Exp $ */
 
 #ifndef __TIMELIB_STRUCTS_H__
 #define __TIMELIB_STRUCTS_H__
@@ -200,6 +200,9 @@ typedef struct _timelib_tzdb {
 #define SECS_PER_DAY   86400
 #define DAYS_PER_YEAR    365
 #define DAYS_PER_LYEAR   366
+/* 400*365 days + 97 leap days */
+#define DAYS_PER_LYEAR_PERIOD 146097
+#define YEARS_PER_LYEAR_PERIOD 400
 
 #define timelib_is_leap(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
 
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h
index 223a75c..4083900 100644
--- a/ext/date/lib/timezonedb.h
+++ b/ext/date/lib/timezonedb.h
@@ -14,43 +14,43 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[560] = {
 	{ "Africa/Bujumbura"                  , 0x000571 },
 	{ "Africa/Cairo"                      , 0x0005B5 },
 	{ "Africa/Casablanca"                 , 0x00097C },
-	{ "Africa/Ceuta"                      , 0x000A4E },
-	{ "Africa/Conakry"                    , 0x000D55 },
-	{ "Africa/Dakar"                      , 0x000DC0 },
-	{ "Africa/Dar_es_Salaam"              , 0x000E26 },
-	{ "Africa/Djibouti"                   , 0x000E93 },
-	{ "Africa/Douala"                     , 0x000EE8 },
-	{ "Africa/El_Aaiun"                   , 0x000F3D },
-	{ "Africa/Freetown"                   , 0x000FA3 },
-	{ "Africa/Gaborone"                   , 0x0010B2 },
-	{ "Africa/Harare"                     , 0x00110D },
-	{ "Africa/Johannesburg"               , 0x001162 },
-	{ "Africa/Kampala"                    , 0x0011D0 },
-	{ "Africa/Khartoum"                   , 0x00124F },
-	{ "Africa/Kigali"                     , 0x001362 },
-	{ "Africa/Kinshasa"                   , 0x0013B7 },
-	{ "Africa/Lagos"                      , 0x001412 },
-	{ "Africa/Libreville"                 , 0x001467 },
-	{ "Africa/Lome"                       , 0x0014BC },
-	{ "Africa/Luanda"                     , 0x001500 },
-	{ "Africa/Lubumbashi"                 , 0x001555 },
-	{ "Africa/Lusaka"                     , 0x0015B0 },
-	{ "Africa/Malabo"                     , 0x001605 },
-	{ "Africa/Maputo"                     , 0x00166B },
-	{ "Africa/Maseru"                     , 0x0016C0 },
-	{ "Africa/Mbabane"                    , 0x001728 },
-	{ "Africa/Mogadishu"                  , 0x00177E },
-	{ "Africa/Monrovia"                   , 0x0017D9 },
-	{ "Africa/Nairobi"                    , 0x00183F },
-	{ "Africa/Ndjamena"                   , 0x0018BE },
-	{ "Africa/Niamey"                     , 0x00192A },
-	{ "Africa/Nouakchott"                 , 0x00199D },
-	{ "Africa/Ouagadougou"                , 0x001A08 },
-	{ "Africa/Porto-Novo"                 , 0x001A5D },
-	{ "Africa/Sao_Tome"                   , 0x001AC3 },
-	{ "Africa/Timbuktu"                   , 0x001B18 },
-	{ "Africa/Tripoli"                    , 0x001B83 },
-	{ "Africa/Tunis"                      , 0x001C7D },
+	{ "Africa/Ceuta"                      , 0x000A58 },
+	{ "Africa/Conakry"                    , 0x000D5F },
+	{ "Africa/Dakar"                      , 0x000DCA },
+	{ "Africa/Dar_es_Salaam"              , 0x000E30 },
+	{ "Africa/Djibouti"                   , 0x000E9D },
+	{ "Africa/Douala"                     , 0x000EF2 },
+	{ "Africa/El_Aaiun"                   , 0x000F47 },
+	{ "Africa/Freetown"                   , 0x000FAD },
+	{ "Africa/Gaborone"                   , 0x0010BC },
+	{ "Africa/Harare"                     , 0x001117 },
+	{ "Africa/Johannesburg"               , 0x00116C },
+	{ "Africa/Kampala"                    , 0x0011DA },
+	{ "Africa/Khartoum"                   , 0x001259 },
+	{ "Africa/Kigali"                     , 0x00136C },
+	{ "Africa/Kinshasa"                   , 0x0013C1 },
+	{ "Africa/Lagos"                      , 0x00141C },
+	{ "Africa/Libreville"                 , 0x001471 },
+	{ "Africa/Lome"                       , 0x0014C6 },
+	{ "Africa/Luanda"                     , 0x00150A },
+	{ "Africa/Lubumbashi"                 , 0x00155F },
+	{ "Africa/Lusaka"                     , 0x0015BA },
+	{ "Africa/Malabo"                     , 0x00160F },
+	{ "Africa/Maputo"                     , 0x001675 },
+	{ "Africa/Maseru"                     , 0x0016CA },
+	{ "Africa/Mbabane"                    , 0x001732 },
+	{ "Africa/Mogadishu"                  , 0x001788 },
+	{ "Africa/Monrovia"                   , 0x0017E3 },
+	{ "Africa/Nairobi"                    , 0x001849 },
+	{ "Africa/Ndjamena"                   , 0x0018C8 },
+	{ "Africa/Niamey"                     , 0x001934 },
+	{ "Africa/Nouakchott"                 , 0x0019A7 },
+	{ "Africa/Ouagadougou"                , 0x001A12 },
+	{ "Africa/Porto-Novo"                 , 0x001A67 },
+	{ "Africa/Sao_Tome"                   , 0x001ACD },
+	{ "Africa/Timbuktu"                   , 0x001B22 },
+	{ "Africa/Tripoli"                    , 0x001B8D },
+	{ "Africa/Tunis"                      , 0x001C87 },
 	{ "Africa/Windhoek"                   , 0x001EB1 },
 	{ "America/Adak"                      , 0x0020F8 },
 	{ "America/Anchorage"                 , 0x00246E },
@@ -68,500 +68,500 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[560] = {
 	{ "America/Argentina/Salta"           , 0x0039FD },
 	{ "America/Argentina/San_Juan"        , 0x003BA9 },
 	{ "America/Argentina/San_Luis"        , 0x003D61 },
-	{ "America/Argentina/Tucuman"         , 0x003F13 },
-	{ "America/Argentina/Ushuaia"         , 0x0041EC },
-	{ "America/Aruba"                     , 0x0043A7 },
-	{ "America/Asuncion"                  , 0x00440D },
-	{ "America/Atikokan"                  , 0x0046F2 },
-	{ "America/Atka"                      , 0x0047C8 },
-	{ "America/Bahia"                     , 0x004B2E },
-	{ "America/Barbados"                  , 0x004CB7 },
-	{ "America/Belem"                     , 0x004D51 },
-	{ "America/Belize"                    , 0x004E4C },
-	{ "America/Blanc-Sablon"              , 0x004FC8 },
-	{ "America/Boa_Vista"                 , 0x00507C },
-	{ "America/Bogota"                    , 0x005185 },
-	{ "America/Boise"                     , 0x0051F1 },
-	{ "America/Buenos_Aires"              , 0x005588 },
-	{ "America/Cambridge_Bay"             , 0x00583E },
-	{ "America/Campo_Grande"              , 0x005B66 },
-	{ "America/Cancun"                    , 0x005E55 },
-	{ "America/Caracas"                   , 0x006097 },
-	{ "America/Catamarca"                 , 0x0060FE },
-	{ "America/Cayenne"                   , 0x0062A4 },
-	{ "America/Cayman"                    , 0x006306 },
-	{ "America/Chicago"                   , 0x00635B },
-	{ "America/Chihuahua"                 , 0x006872 },
-	{ "America/Coral_Harbour"             , 0x006AC1 },
-	{ "America/Cordoba"                   , 0x006B53 },
-	{ "America/Costa_Rica"                , 0x006E16 },
-	{ "America/Cuiaba"                    , 0x006EA0 },
-	{ "America/Curacao"                   , 0x00717E },
-	{ "America/Danmarkshavn"              , 0x0071E4 },
-	{ "America/Dawson"                    , 0x007328 },
-	{ "America/Dawson_Creek"              , 0x007645 },
-	{ "America/Denver"                    , 0x00781F },
-	{ "America/Detroit"                   , 0x007BA5 },
-	{ "America/Dominica"                  , 0x007F04 },
-	{ "America/Edmonton"                  , 0x007F59 },
-	{ "America/Eirunepe"                  , 0x008311 },
-	{ "America/El_Salvador"               , 0x008424 },
-	{ "America/Ensenada"                  , 0x008499 },
-	{ "America/Fort_Wayne"                , 0x008940 },
-	{ "America/Fortaleza"                 , 0x008802 },
-	{ "America/Glace_Bay"                 , 0x008BAA },
-	{ "America/Godthab"                   , 0x008F21 },
-	{ "America/Goose_Bay"                 , 0x0091E5 },
-	{ "America/Grand_Turk"                , 0x0096A2 },
-	{ "America/Grenada"                   , 0x009951 },
-	{ "America/Guadeloupe"                , 0x0099A6 },
-	{ "America/Guatemala"                 , 0x0099FB },
-	{ "America/Guayaquil"                 , 0x009A84 },
-	{ "America/Guyana"                    , 0x009AE1 },
-	{ "America/Halifax"                   , 0x009B62 },
-	{ "America/Havana"                    , 0x00A078 },
-	{ "America/Hermosillo"                , 0x00A3EB },
-	{ "America/Indiana/Indianapolis"      , 0x00A4C9 },
-	{ "America/Indiana/Knox"              , 0x00A75A },
-	{ "America/Indiana/Marengo"           , 0x00AAF1 },
-	{ "America/Indiana/Petersburg"        , 0x00AD97 },
-	{ "America/Indiana/Tell_City"         , 0x00B2E4 },
-	{ "America/Indiana/Vevay"             , 0x00B57D },
-	{ "America/Indiana/Vincennes"         , 0x00B7B8 },
-	{ "America/Indiana/Winamac"           , 0x00BA6C },
-	{ "America/Indianapolis"              , 0x00B07A },
-	{ "America/Inuvik"                    , 0x00BD25 },
-	{ "America/Iqaluit"                   , 0x00C01C },
-	{ "America/Jamaica"                   , 0x00C33E },
-	{ "America/Jujuy"                     , 0x00C403 },
-	{ "America/Juneau"                    , 0x00C5AD },
-	{ "America/Kentucky/Louisville"       , 0x00C92B },
-	{ "America/Kentucky/Monticello"       , 0x00CD49 },
-	{ "America/Knox_IN"                   , 0x00D0CE },
-	{ "America/La_Paz"                    , 0x00D43F },
-	{ "America/Lima"                      , 0x00D4A6 },
-	{ "America/Los_Angeles"               , 0x00D54E },
-	{ "America/Louisville"                , 0x00D95F },
-	{ "America/Maceio"                    , 0x00DD54 },
-	{ "America/Managua"                   , 0x00DE8E },
-	{ "America/Manaus"                    , 0x00DF41 },
-	{ "America/Marigot"                   , 0x00E043 },
-	{ "America/Martinique"                , 0x00E098 },
-	{ "America/Mazatlan"                  , 0x00E104 },
-	{ "America/Mendoza"                   , 0x00E371 },
-	{ "America/Menominee"                 , 0x00E525 },
-	{ "America/Merida"                    , 0x00E8A6 },
-	{ "America/Mexico_City"               , 0x00EAE1 },
-	{ "America/Miquelon"                  , 0x00ED5C },
-	{ "America/Moncton"                   , 0x00EFCE },
-	{ "America/Monterrey"                 , 0x00F465 },
-	{ "America/Montevideo"                , 0x00F6AC },
-	{ "America/Montreal"                  , 0x00F9BE },
-	{ "America/Montserrat"                , 0x00FED4 },
-	{ "America/Nassau"                    , 0x00FF29 },
-	{ "America/New_York"                  , 0x01026E },
-	{ "America/Nipigon"                   , 0x010779 },
-	{ "America/Nome"                      , 0x010ACA },
-	{ "America/Noronha"                   , 0x010E48 },
-	{ "America/North_Dakota/Center"       , 0x010F78 },
-	{ "America/North_Dakota/New_Salem"    , 0x01130C },
-	{ "America/Panama"                    , 0x0116B5 },
-	{ "America/Pangnirtung"               , 0x01170A },
-	{ "America/Paramaribo"                , 0x011A40 },
-	{ "America/Phoenix"                   , 0x011AD2 },
-	{ "America/Port-au-Prince"            , 0x011B80 },
-	{ "America/Port_of_Spain"             , 0x011D9B },
-	{ "America/Porto_Acre"                , 0x011C9C },
-	{ "America/Porto_Velho"               , 0x011DF0 },
-	{ "America/Puerto_Rico"               , 0x011EE6 },
-	{ "America/Rainy_River"               , 0x011F51 },
-	{ "America/Rankin_Inlet"              , 0x012289 },
-	{ "America/Recife"                    , 0x01256F },
-	{ "America/Regina"                    , 0x012699 },
-	{ "America/Resolute"                  , 0x012857 },
-	{ "America/Rio_Branco"                , 0x012B50 },
-	{ "America/Rosario"                   , 0x012C53 },
-	{ "America/Santarem"                  , 0x012F16 },
-	{ "America/Santiago"                  , 0x01301B },
-	{ "America/Santo_Domingo"             , 0x0133C4 },
-	{ "America/Sao_Paulo"                 , 0x01348A },
-	{ "America/Scoresbysund"              , 0x013799 },
-	{ "America/Shiprock"                  , 0x013A87 },
-	{ "America/St_Barthelemy"             , 0x013E16 },
-	{ "America/St_Johns"                  , 0x013E6B },
-	{ "America/St_Kitts"                  , 0x0143BE },
-	{ "America/St_Lucia"                  , 0x014413 },
-	{ "America/St_Thomas"                 , 0x014468 },
-	{ "America/St_Vincent"                , 0x0144BD },
-	{ "America/Swift_Current"             , 0x014512 },
-	{ "America/Tegucigalpa"               , 0x014633 },
-	{ "America/Thule"                     , 0x0146B2 },
-	{ "America/Thunder_Bay"               , 0x0148F9 },
-	{ "America/Tijuana"                   , 0x014C42 },
-	{ "America/Toronto"                   , 0x014FB7 },
-	{ "America/Tortola"                   , 0x0154CE },
-	{ "America/Vancouver"                 , 0x015523 },
-	{ "America/Virgin"                    , 0x015960 },
-	{ "America/Whitehorse"                , 0x0159B5 },
-	{ "America/Winnipeg"                  , 0x015CD2 },
-	{ "America/Yakutat"                   , 0x016112 },
-	{ "America/Yellowknife"               , 0x01647D },
-	{ "Antarctica/Casey"                  , 0x01678D },
-	{ "Antarctica/Davis"                  , 0x016801 },
-	{ "Antarctica/DumontDUrville"         , 0x01687E },
-	{ "Antarctica/Mawson"                 , 0x016910 },
-	{ "Antarctica/McMurdo"                , 0x01697F },
-	{ "Antarctica/Palmer"                 , 0x016C81 },
-	{ "Antarctica/Rothera"                , 0x016F9D },
-	{ "Antarctica/South_Pole"             , 0x017013 },
-	{ "Antarctica/Syowa"                  , 0x01731B },
-	{ "Antarctica/Vostok"                 , 0x017389 },
-	{ "Arctic/Longyearbyen"               , 0x0173FE },
-	{ "Asia/Aden"                         , 0x017730 },
-	{ "Asia/Almaty"                       , 0x017785 },
-	{ "Asia/Amman"                        , 0x017904 },
-	{ "Asia/Anadyr"                       , 0x017BC4 },
-	{ "Asia/Aqtau"                        , 0x017EB2 },
-	{ "Asia/Aqtobe"                       , 0x0180B1 },
-	{ "Asia/Ashgabat"                     , 0x018269 },
-	{ "Asia/Ashkhabad"                    , 0x018386 },
-	{ "Asia/Baghdad"                      , 0x0184A3 },
-	{ "Asia/Bahrain"                      , 0x018618 },
-	{ "Asia/Baku"                         , 0x01867E },
-	{ "Asia/Bangkok"                      , 0x018966 },
-	{ "Asia/Beirut"                       , 0x0189BB },
-	{ "Asia/Bishkek"                      , 0x018CC8 },
-	{ "Asia/Brunei"                       , 0x018E74 },
-	{ "Asia/Calcutta"                     , 0x018ED6 },
-	{ "Asia/Choibalsan"                   , 0x018F4F },
-	{ "Asia/Chongqing"                    , 0x0190C8 },
-	{ "Asia/Chungking"                    , 0x0191B7 },
-	{ "Asia/Colombo"                      , 0x019266 },
-	{ "Asia/Dacca"                        , 0x019302 },
-	{ "Asia/Damascus"                     , 0x019391 },
-	{ "Asia/Dhaka"                        , 0x0196E1 },
-	{ "Asia/Dili"                         , 0x019770 },
-	{ "Asia/Dubai"                        , 0x0197F9 },
-	{ "Asia/Dushanbe"                     , 0x01984E },
-	{ "Asia/Gaza"                         , 0x019951 },
-	{ "Asia/Harbin"                       , 0x019C9A },
-	{ "Asia/Ho_Chi_Minh"                  , 0x019D81 },
-	{ "Asia/Hong_Kong"                    , 0x019DF9 },
-	{ "Asia/Hovd"                         , 0x019FAF },
-	{ "Asia/Irkutsk"                      , 0x01A127 },
-	{ "Asia/Istanbul"                     , 0x01A40E },
-	{ "Asia/Jakarta"                      , 0x01A7FB },
-	{ "Asia/Jayapura"                     , 0x01A8A5 },
-	{ "Asia/Jerusalem"                    , 0x01A929 },
-	{ "Asia/Kabul"                        , 0x01AC58 },
-	{ "Asia/Kamchatka"                    , 0x01ACA9 },
-	{ "Asia/Karachi"                      , 0x01AF8E },
-	{ "Asia/Kashgar"                      , 0x01B039 },
-	{ "Asia/Kathmandu"                    , 0x01B10A },
-	{ "Asia/Katmandu"                     , 0x01B170 },
-	{ "Asia/Kolkata"                      , 0x01B1D6 },
-	{ "Asia/Krasnoyarsk"                  , 0x01B24F },
-	{ "Asia/Kuala_Lumpur"                 , 0x01B538 },
-	{ "Asia/Kuching"                      , 0x01B5F5 },
-	{ "Asia/Kuwait"                       , 0x01B6E3 },
-	{ "Asia/Macao"                        , 0x01B738 },
-	{ "Asia/Macau"                        , 0x01B873 },
-	{ "Asia/Magadan"                      , 0x01B9AE },
-	{ "Asia/Makassar"                     , 0x01BC91 },
-	{ "Asia/Manila"                       , 0x01BD4A },
-	{ "Asia/Muscat"                       , 0x01BDCF },
-	{ "Asia/Nicosia"                      , 0x01BE24 },
-	{ "Asia/Novosibirsk"                  , 0x01C10C },
-	{ "Asia/Omsk"                         , 0x01C400 },
-	{ "Asia/Oral"                         , 0x01C6E8 },
-	{ "Asia/Phnom_Penh"                   , 0x01C8B8 },
-	{ "Asia/Pontianak"                    , 0x01C930 },
-	{ "Asia/Pyongyang"                    , 0x01C9F1 },
-	{ "Asia/Qatar"                        , 0x01CA5E },
-	{ "Asia/Qyzylorda"                    , 0x01CAC4 },
-	{ "Asia/Rangoon"                      , 0x01CC9A },
-	{ "Asia/Riyadh"                       , 0x01CD12 },
-	{ "Asia/Saigon"                       , 0x01CD67 },
-	{ "Asia/Sakhalin"                     , 0x01CDDF },
-	{ "Asia/Samarkand"                    , 0x01D0DF },
-	{ "Asia/Seoul"                        , 0x01D215 },
-	{ "Asia/Shanghai"                     , 0x01D2B9 },
-	{ "Asia/Singapore"                    , 0x01D399 },
-	{ "Asia/Taipei"                       , 0x01D450 },
-	{ "Asia/Tashkent"                     , 0x01D568 },
-	{ "Asia/Tbilisi"                      , 0x01D699 },
-	{ "Asia/Tehran"                       , 0x01D853 },
-	{ "Asia/Tel_Aviv"                     , 0x01DAC1 },
-	{ "Asia/Thimbu"                       , 0x01DDF0 },
-	{ "Asia/Thimphu"                      , 0x01DE56 },
-	{ "Asia/Tokyo"                        , 0x01DEBC },
-	{ "Asia/Ujung_Pandang"                , 0x01DF45 },
-	{ "Asia/Ulaanbaatar"                  , 0x01DFC1 },
-	{ "Asia/Ulan_Bator"                   , 0x01E11C },
-	{ "Asia/Urumqi"                       , 0x01E269 },
-	{ "Asia/Vientiane"                    , 0x01E330 },
-	{ "Asia/Vladivostok"                  , 0x01E3A8 },
-	{ "Asia/Yakutsk"                      , 0x01E695 },
-	{ "Asia/Yekaterinburg"                , 0x01E97B },
-	{ "Asia/Yerevan"                      , 0x01EC87 },
-	{ "Atlantic/Azores"                   , 0x01EF8B },
-	{ "Atlantic/Bermuda"                  , 0x01F48E },
-	{ "Atlantic/Canary"                   , 0x01F76F },
-	{ "Atlantic/Cape_Verde"               , 0x01FA45 },
-	{ "Atlantic/Faeroe"                   , 0x01FABE },
-	{ "Atlantic/Faroe"                    , 0x01FD62 },
-	{ "Atlantic/Jan_Mayen"                , 0x020006 },
-	{ "Atlantic/Madeira"                  , 0x020338 },
-	{ "Atlantic/Reykjavik"                , 0x020841 },
-	{ "Atlantic/South_Georgia"            , 0x0209FA },
-	{ "Atlantic/St_Helena"                , 0x020D12 },
-	{ "Atlantic/Stanley"                  , 0x020A3E },
-	{ "Australia/ACT"                     , 0x020D67 },
-	{ "Australia/Adelaide"                , 0x021084 },
-	{ "Australia/Brisbane"                , 0x0213B0 },
-	{ "Australia/Broken_Hill"             , 0x021477 },
-	{ "Australia/Canberra"                , 0x0217B5 },
-	{ "Australia/Currie"                  , 0x021AD2 },
-	{ "Australia/Darwin"                  , 0x021E05 },
-	{ "Australia/Eucla"                   , 0x021E8B },
-	{ "Australia/Hobart"                  , 0x021F60 },
-	{ "Australia/LHI"                     , 0x0222BE },
-	{ "Australia/Lindeman"                , 0x022559 },
-	{ "Australia/Lord_Howe"               , 0x02263A },
-	{ "Australia/Melbourne"               , 0x0228E5 },
-	{ "Australia/North"                   , 0x022C0A },
-	{ "Australia/NSW"                     , 0x022C7E },
-	{ "Australia/Perth"                   , 0x022F9B },
-	{ "Australia/Queensland"              , 0x023073 },
-	{ "Australia/South"                   , 0x02311F },
-	{ "Australia/Sydney"                  , 0x02343C },
-	{ "Australia/Tasmania"                , 0x023779 },
-	{ "Australia/Victoria"                , 0x023ABE },
-	{ "Australia/West"                    , 0x023DDB },
-	{ "Australia/Yancowinna"              , 0x023E91 },
-	{ "Brazil/Acre"                       , 0x0241B3 },
-	{ "Brazil/DeNoronha"                  , 0x0242B2 },
-	{ "Brazil/East"                       , 0x0243D2 },
-	{ "Brazil/West"                       , 0x0246AF },
-	{ "Canada/Atlantic"                   , 0x0247A7 },
-	{ "Canada/Central"                    , 0x024C8F },
-	{ "Canada/East-Saskatchewan"          , 0x025599 },
-	{ "Canada/Eastern"                    , 0x0250A9 },
-	{ "Canada/Mountain"                   , 0x025722 },
-	{ "Canada/Newfoundland"               , 0x025A98 },
-	{ "Canada/Pacific"                    , 0x025FC3 },
-	{ "Canada/Saskatchewan"               , 0x0263DC },
-	{ "Canada/Yukon"                      , 0x026565 },
-	{ "CET"                               , 0x026868 },
-	{ "Chile/Continental"                 , 0x026B71 },
-	{ "Chile/EasterIsland"                , 0x026F0C },
-	{ "CST6CDT"                           , 0x02724E },
-	{ "Cuba"                              , 0x02759F },
-	{ "EET"                               , 0x027912 },
-	{ "Egypt"                             , 0x027BC5 },
-	{ "Eire"                              , 0x027F8C },
-	{ "EST"                               , 0x02849D },
-	{ "EST5EDT"                           , 0x0284E1 },
-	{ "Etc/GMT"                           , 0x028832 },
-	{ "Etc/GMT+0"                         , 0x0288FE },
-	{ "Etc/GMT+1"                         , 0x028988 },
-	{ "Etc/GMT+10"                        , 0x028A15 },
-	{ "Etc/GMT+11"                        , 0x028AA3 },
-	{ "Etc/GMT+12"                        , 0x028B31 },
-	{ "Etc/GMT+2"                         , 0x028C4C },
-	{ "Etc/GMT+3"                         , 0x028CD8 },
-	{ "Etc/GMT+4"                         , 0x028D64 },
-	{ "Etc/GMT+5"                         , 0x028DF0 },
-	{ "Etc/GMT+6"                         , 0x028E7C },
-	{ "Etc/GMT+7"                         , 0x028F08 },
-	{ "Etc/GMT+8"                         , 0x028F94 },
-	{ "Etc/GMT+9"                         , 0x029020 },
-	{ "Etc/GMT-0"                         , 0x0288BA },
-	{ "Etc/GMT-1"                         , 0x028942 },
-	{ "Etc/GMT-10"                        , 0x0289CE },
-	{ "Etc/GMT-11"                        , 0x028A5C },
-	{ "Etc/GMT-12"                        , 0x028AEA },
-	{ "Etc/GMT-13"                        , 0x028B78 },
-	{ "Etc/GMT-14"                        , 0x028BBF },
-	{ "Etc/GMT-2"                         , 0x028C06 },
-	{ "Etc/GMT-3"                         , 0x028C92 },
-	{ "Etc/GMT-4"                         , 0x028D1E },
-	{ "Etc/GMT-5"                         , 0x028DAA },
-	{ "Etc/GMT-6"                         , 0x028E36 },
-	{ "Etc/GMT-7"                         , 0x028EC2 },
-	{ "Etc/GMT-8"                         , 0x028F4E },
-	{ "Etc/GMT-9"                         , 0x028FDA },
-	{ "Etc/GMT0"                          , 0x028876 },
-	{ "Etc/Greenwich"                     , 0x029066 },
-	{ "Etc/UCT"                           , 0x0290AA },
-	{ "Etc/Universal"                     , 0x0290EE },
-	{ "Etc/UTC"                           , 0x029132 },
-	{ "Etc/Zulu"                          , 0x029176 },
-	{ "Europe/Amsterdam"                  , 0x0291BA },
-	{ "Europe/Andorra"                    , 0x0295F8 },
-	{ "Europe/Athens"                     , 0x029874 },
-	{ "Europe/Belfast"                    , 0x029BB7 },
-	{ "Europe/Belgrade"                   , 0x02A0EE },
-	{ "Europe/Berlin"                     , 0x02A3B7 },
-	{ "Europe/Bratislava"                 , 0x02A70D },
-	{ "Europe/Brussels"                   , 0x02AA3F },
-	{ "Europe/Bucharest"                  , 0x02AE76 },
-	{ "Europe/Budapest"                   , 0x02B1A0 },
-	{ "Europe/Chisinau"                   , 0x02B513 },
-	{ "Europe/Copenhagen"                 , 0x02B8A1 },
-	{ "Europe/Dublin"                     , 0x02BBAB },
-	{ "Europe/Gibraltar"                  , 0x02C0BC },
-	{ "Europe/Guernsey"                   , 0x02C513 },
-	{ "Europe/Helsinki"                   , 0x02CA4A },
-	{ "Europe/Isle_of_Man"                , 0x02CD00 },
-	{ "Europe/Istanbul"                   , 0x02D237 },
-	{ "Europe/Jersey"                     , 0x02D624 },
-	{ "Europe/Kaliningrad"                , 0x02DB5B },
-	{ "Europe/Kiev"                       , 0x02DEBE },
-	{ "Europe/Lisbon"                     , 0x02E1D5 },
-	{ "Europe/Ljubljana"                  , 0x02E6D9 },
-	{ "Europe/London"                     , 0x02E9A2 },
-	{ "Europe/Luxembourg"                 , 0x02EED9 },
-	{ "Europe/Madrid"                     , 0x02F32F },
-	{ "Europe/Malta"                      , 0x02F6F5 },
-	{ "Europe/Mariehamn"                  , 0x02FAAE },
-	{ "Europe/Minsk"                      , 0x02FD64 },
-	{ "Europe/Monaco"                     , 0x03006F },
-	{ "Europe/Moscow"                     , 0x0304AA },
-	{ "Europe/Nicosia"                    , 0x0307FC },
-	{ "Europe/Oslo"                       , 0x030AE4 },
-	{ "Europe/Paris"                      , 0x030E16 },
-	{ "Europe/Podgorica"                  , 0x03125C },
-	{ "Europe/Prague"                     , 0x031525 },
-	{ "Europe/Riga"                       , 0x031857 },
-	{ "Europe/Rome"                       , 0x031B9C },
-	{ "Europe/Samara"                     , 0x031F5F },
-	{ "Europe/San_Marino"                 , 0x03228B },
-	{ "Europe/Sarajevo"                   , 0x03264E },
-	{ "Europe/Simferopol"                 , 0x032917 },
-	{ "Europe/Skopje"                     , 0x032C42 },
-	{ "Europe/Sofia"                      , 0x032F0B },
-	{ "Europe/Stockholm"                  , 0x033213 },
-	{ "Europe/Tallinn"                    , 0x0334C2 },
-	{ "Europe/Tirane"                     , 0x0337FC },
-	{ "Europe/Tiraspol"                   , 0x033B02 },
-	{ "Europe/Uzhgorod"                   , 0x033E90 },
-	{ "Europe/Vaduz"                      , 0x0341A7 },
-	{ "Europe/Vatican"                    , 0x03443A },
-	{ "Europe/Vienna"                     , 0x0347FD },
-	{ "Europe/Vilnius"                    , 0x034B2A },
-	{ "Europe/Volgograd"                  , 0x034E69 },
-	{ "Europe/Warsaw"                     , 0x035172 },
-	{ "Europe/Zagreb"                     , 0x035553 },
-	{ "Europe/Zaporozhye"                 , 0x03581C },
-	{ "Europe/Zurich"                     , 0x035B5D },
-	{ "Factory"                           , 0x035E0C },
-	{ "GB"                                , 0x035E7D },
-	{ "GB-Eire"                           , 0x0363B4 },
-	{ "GMT"                               , 0x0368EB },
-	{ "GMT+0"                             , 0x0369B7 },
-	{ "GMT-0"                             , 0x036973 },
-	{ "GMT0"                              , 0x03692F },
-	{ "Greenwich"                         , 0x0369FB },
-	{ "Hongkong"                          , 0x036A3F },
-	{ "HST"                               , 0x036BF5 },
-	{ "Iceland"                           , 0x036C39 },
-	{ "Indian/Antananarivo"               , 0x036DF2 },
-	{ "Indian/Chagos"                     , 0x036E66 },
-	{ "Indian/Christmas"                  , 0x036EC8 },
-	{ "Indian/Cocos"                      , 0x036F0C },
-	{ "Indian/Comoro"                     , 0x036F50 },
-	{ "Indian/Kerguelen"                  , 0x036FA5 },
-	{ "Indian/Mahe"                       , 0x036FFA },
-	{ "Indian/Maldives"                   , 0x03704F },
-	{ "Indian/Mauritius"                  , 0x0370A4 },
-	{ "Indian/Mayotte"                    , 0x037247 },
-	{ "Indian/Reunion"                    , 0x03729C },
-	{ "Iran"                              , 0x0372F1 },
-	{ "Israel"                            , 0x03755F },
-	{ "Jamaica"                           , 0x03788E },
-	{ "Japan"                             , 0x037953 },
-	{ "Kwajalein"                         , 0x0379DC },
-	{ "Libya"                             , 0x037A3F },
-	{ "MET"                               , 0x037B39 },
-	{ "Mexico/BajaNorte"                  , 0x037E42 },
-	{ "Mexico/BajaSur"                    , 0x0381AB },
-	{ "Mexico/General"                    , 0x0383F0 },
-	{ "MST"                               , 0x03864E },
-	{ "MST7MDT"                           , 0x038692 },
-	{ "Navajo"                            , 0x0389E3 },
-	{ "NZ"                                , 0x038D5C },
-	{ "NZ-CHAT"                           , 0x0390DA },
-	{ "Pacific/Apia"                      , 0x0393C2 },
-	{ "Pacific/Auckland"                  , 0x039429 },
-	{ "Pacific/Chatham"                   , 0x0397B5 },
-	{ "Pacific/Easter"                    , 0x039AAC },
-	{ "Pacific/Efate"                     , 0x039E0A },
-	{ "Pacific/Enderbury"                 , 0x039ED0 },
-	{ "Pacific/Fakaofo"                   , 0x039F3E },
-	{ "Pacific/Fiji"                      , 0x039F82 },
-	{ "Pacific/Funafuti"                  , 0x039FF8 },
-	{ "Pacific/Galapagos"                 , 0x03A03C },
-	{ "Pacific/Gambier"                   , 0x03A0B4 },
-	{ "Pacific/Guadalcanal"               , 0x03A119 },
-	{ "Pacific/Guam"                      , 0x03A16E },
-	{ "Pacific/Honolulu"                  , 0x03A1C4 },
-	{ "Pacific/Johnston"                  , 0x03A258 },
-	{ "Pacific/Kiritimati"                , 0x03A2AA },
-	{ "Pacific/Kosrae"                    , 0x03A315 },
-	{ "Pacific/Kwajalein"                 , 0x03A372 },
-	{ "Pacific/Majuro"                    , 0x03A3DE },
-	{ "Pacific/Marquesas"                 , 0x03A43D },
-	{ "Pacific/Midway"                    , 0x03A4A4 },
-	{ "Pacific/Nauru"                     , 0x03A52E },
-	{ "Pacific/Niue"                      , 0x03A5A6 },
-	{ "Pacific/Norfolk"                   , 0x03A604 },
-	{ "Pacific/Noumea"                    , 0x03A659 },
-	{ "Pacific/Pago_Pago"                 , 0x03A6E9 },
-	{ "Pacific/Palau"                     , 0x03A772 },
-	{ "Pacific/Pitcairn"                  , 0x03A7B6 },
-	{ "Pacific/Ponape"                    , 0x03A80B },
-	{ "Pacific/Port_Moresby"              , 0x03A860 },
-	{ "Pacific/Rarotonga"                 , 0x03A8A4 },
-	{ "Pacific/Saipan"                    , 0x03A980 },
-	{ "Pacific/Samoa"                     , 0x03A9E3 },
-	{ "Pacific/Tahiti"                    , 0x03AA6C },
-	{ "Pacific/Tarawa"                    , 0x03AAD1 },
-	{ "Pacific/Tongatapu"                 , 0x03AB25 },
-	{ "Pacific/Truk"                      , 0x03ABB1 },
-	{ "Pacific/Wake"                      , 0x03AC0A },
-	{ "Pacific/Wallis"                    , 0x03AC5A },
-	{ "Pacific/Yap"                       , 0x03AC9E },
-	{ "Poland"                            , 0x03ACE3 },
-	{ "Portugal"                          , 0x03B0C4 },
-	{ "PRC"                               , 0x03B5C0 },
-	{ "PST8PDT"                           , 0x03B671 },
-	{ "ROC"                               , 0x03B9C2 },
-	{ "ROK"                               , 0x03BADA },
-	{ "Singapore"                         , 0x03BB7E },
-	{ "Turkey"                            , 0x03BC35 },
-	{ "UCT"                               , 0x03C022 },
-	{ "Universal"                         , 0x03C066 },
-	{ "US/Alaska"                         , 0x03C0AA },
-	{ "US/Aleutian"                       , 0x03C413 },
-	{ "US/Arizona"                        , 0x03C779 },
-	{ "US/Central"                        , 0x03C807 },
-	{ "US/East-Indiana"                   , 0x03D211 },
-	{ "US/Eastern"                        , 0x03CD12 },
-	{ "US/Hawaii"                         , 0x03D47B },
-	{ "US/Indiana-Starke"                 , 0x03D509 },
-	{ "US/Michigan"                       , 0x03D87A },
-	{ "US/Mountain"                       , 0x03DBB1 },
-	{ "US/Pacific"                        , 0x03DF2A },
-	{ "US/Pacific-New"                    , 0x03E32F },
-	{ "US/Samoa"                          , 0x03E734 },
-	{ "UTC"                               , 0x03E7BD },
-	{ "W-SU"                              , 0x03EAB4 },
-	{ "WET"                               , 0x03E801 },
-	{ "Zulu"                              , 0x03EDEF },
+	{ "America/Argentina/Tucuman"         , 0x004035 },
+	{ "America/Argentina/Ushuaia"         , 0x00430E },
+	{ "America/Aruba"                     , 0x0044C9 },
+	{ "America/Asuncion"                  , 0x00452F },
+	{ "America/Atikokan"                  , 0x004814 },
+	{ "America/Atka"                      , 0x0048EA },
+	{ "America/Bahia"                     , 0x004C50 },
+	{ "America/Barbados"                  , 0x004DD9 },
+	{ "America/Belem"                     , 0x004E73 },
+	{ "America/Belize"                    , 0x004F6E },
+	{ "America/Blanc-Sablon"              , 0x0050EA },
+	{ "America/Boa_Vista"                 , 0x00519E },
+	{ "America/Bogota"                    , 0x0052A7 },
+	{ "America/Boise"                     , 0x005313 },
+	{ "America/Buenos_Aires"              , 0x0056AA },
+	{ "America/Cambridge_Bay"             , 0x005960 },
+	{ "America/Campo_Grande"              , 0x005C88 },
+	{ "America/Cancun"                    , 0x005F77 },
+	{ "America/Caracas"                   , 0x0061B9 },
+	{ "America/Catamarca"                 , 0x006220 },
+	{ "America/Cayenne"                   , 0x0063C6 },
+	{ "America/Cayman"                    , 0x006428 },
+	{ "America/Chicago"                   , 0x00647D },
+	{ "America/Chihuahua"                 , 0x006994 },
+	{ "America/Coral_Harbour"             , 0x006BE3 },
+	{ "America/Cordoba"                   , 0x006C75 },
+	{ "America/Costa_Rica"                , 0x006F38 },
+	{ "America/Cuiaba"                    , 0x006FC2 },
+	{ "America/Curacao"                   , 0x0072A0 },
+	{ "America/Danmarkshavn"              , 0x007306 },
+	{ "America/Dawson"                    , 0x00744A },
+	{ "America/Dawson_Creek"              , 0x007767 },
+	{ "America/Denver"                    , 0x007941 },
+	{ "America/Detroit"                   , 0x007CC7 },
+	{ "America/Dominica"                  , 0x008026 },
+	{ "America/Edmonton"                  , 0x00807B },
+	{ "America/Eirunepe"                  , 0x008433 },
+	{ "America/El_Salvador"               , 0x008546 },
+	{ "America/Ensenada"                  , 0x0085BB },
+	{ "America/Fort_Wayne"                , 0x008A62 },
+	{ "America/Fortaleza"                 , 0x008924 },
+	{ "America/Glace_Bay"                 , 0x008CCC },
+	{ "America/Godthab"                   , 0x009043 },
+	{ "America/Goose_Bay"                 , 0x009307 },
+	{ "America/Grand_Turk"                , 0x0097C4 },
+	{ "America/Grenada"                   , 0x009A73 },
+	{ "America/Guadeloupe"                , 0x009AC8 },
+	{ "America/Guatemala"                 , 0x009B1D },
+	{ "America/Guayaquil"                 , 0x009BA6 },
+	{ "America/Guyana"                    , 0x009C03 },
+	{ "America/Halifax"                   , 0x009C84 },
+	{ "America/Havana"                    , 0x00A19A },
+	{ "America/Hermosillo"                , 0x00A50D },
+	{ "America/Indiana/Indianapolis"      , 0x00A5EB },
+	{ "America/Indiana/Knox"              , 0x00A87C },
+	{ "America/Indiana/Marengo"           , 0x00AC13 },
+	{ "America/Indiana/Petersburg"        , 0x00AEB9 },
+	{ "America/Indiana/Tell_City"         , 0x00B406 },
+	{ "America/Indiana/Vevay"             , 0x00B69F },
+	{ "America/Indiana/Vincennes"         , 0x00B8DA },
+	{ "America/Indiana/Winamac"           , 0x00BB8E },
+	{ "America/Indianapolis"              , 0x00B19C },
+	{ "America/Inuvik"                    , 0x00BE47 },
+	{ "America/Iqaluit"                   , 0x00C13E },
+	{ "America/Jamaica"                   , 0x00C460 },
+	{ "America/Jujuy"                     , 0x00C525 },
+	{ "America/Juneau"                    , 0x00C6CF },
+	{ "America/Kentucky/Louisville"       , 0x00CA4D },
+	{ "America/Kentucky/Monticello"       , 0x00CE6B },
+	{ "America/Knox_IN"                   , 0x00D1F0 },
+	{ "America/La_Paz"                    , 0x00D561 },
+	{ "America/Lima"                      , 0x00D5C8 },
+	{ "America/Los_Angeles"               , 0x00D670 },
+	{ "America/Louisville"                , 0x00DA81 },
+	{ "America/Maceio"                    , 0x00DE76 },
+	{ "America/Managua"                   , 0x00DFB0 },
+	{ "America/Manaus"                    , 0x00E063 },
+	{ "America/Marigot"                   , 0x00E165 },
+	{ "America/Martinique"                , 0x00E1BA },
+	{ "America/Mazatlan"                  , 0x00E226 },
+	{ "America/Mendoza"                   , 0x00E493 },
+	{ "America/Menominee"                 , 0x00E647 },
+	{ "America/Merida"                    , 0x00E9C8 },
+	{ "America/Mexico_City"               , 0x00EC03 },
+	{ "America/Miquelon"                  , 0x00EE7E },
+	{ "America/Moncton"                   , 0x00F0F0 },
+	{ "America/Monterrey"                 , 0x00F587 },
+	{ "America/Montevideo"                , 0x00F7CE },
+	{ "America/Montreal"                  , 0x00FAE0 },
+	{ "America/Montserrat"                , 0x00FFF6 },
+	{ "America/Nassau"                    , 0x01004B },
+	{ "America/New_York"                  , 0x010390 },
+	{ "America/Nipigon"                   , 0x01089B },
+	{ "America/Nome"                      , 0x010BEC },
+	{ "America/Noronha"                   , 0x010F6A },
+	{ "America/North_Dakota/Center"       , 0x01109A },
+	{ "America/North_Dakota/New_Salem"    , 0x01142E },
+	{ "America/Panama"                    , 0x0117D7 },
+	{ "America/Pangnirtung"               , 0x01182C },
+	{ "America/Paramaribo"                , 0x011B62 },
+	{ "America/Phoenix"                   , 0x011BF4 },
+	{ "America/Port-au-Prince"            , 0x011CA2 },
+	{ "America/Port_of_Spain"             , 0x011EBD },
+	{ "America/Porto_Acre"                , 0x011DBE },
+	{ "America/Porto_Velho"               , 0x011F12 },
+	{ "America/Puerto_Rico"               , 0x012008 },
+	{ "America/Rainy_River"               , 0x012073 },
+	{ "America/Rankin_Inlet"              , 0x0123AB },
+	{ "America/Recife"                    , 0x012691 },
+	{ "America/Regina"                    , 0x0127BB },
+	{ "America/Resolute"                  , 0x012979 },
+	{ "America/Rio_Branco"                , 0x012C72 },
+	{ "America/Rosario"                   , 0x012D75 },
+	{ "America/Santarem"                  , 0x013038 },
+	{ "America/Santiago"                  , 0x01313D },
+	{ "America/Santo_Domingo"             , 0x0134E6 },
+	{ "America/Sao_Paulo"                 , 0x0135AC },
+	{ "America/Scoresbysund"              , 0x0138BB },
+	{ "America/Shiprock"                  , 0x013BA9 },
+	{ "America/St_Barthelemy"             , 0x013F38 },
+	{ "America/St_Johns"                  , 0x013F8D },
+	{ "America/St_Kitts"                  , 0x0144E0 },
+	{ "America/St_Lucia"                  , 0x014535 },
+	{ "America/St_Thomas"                 , 0x01458A },
+	{ "America/St_Vincent"                , 0x0145DF },
+	{ "America/Swift_Current"             , 0x014634 },
+	{ "America/Tegucigalpa"               , 0x014755 },
+	{ "America/Thule"                     , 0x0147D4 },
+	{ "America/Thunder_Bay"               , 0x014A1B },
+	{ "America/Tijuana"                   , 0x014D64 },
+	{ "America/Toronto"                   , 0x0150D9 },
+	{ "America/Tortola"                   , 0x0155F0 },
+	{ "America/Vancouver"                 , 0x015645 },
+	{ "America/Virgin"                    , 0x015A82 },
+	{ "America/Whitehorse"                , 0x015AD7 },
+	{ "America/Winnipeg"                  , 0x015DF4 },
+	{ "America/Yakutat"                   , 0x016234 },
+	{ "America/Yellowknife"               , 0x01659F },
+	{ "Antarctica/Casey"                  , 0x0168AF },
+	{ "Antarctica/Davis"                  , 0x016923 },
+	{ "Antarctica/DumontDUrville"         , 0x0169A0 },
+	{ "Antarctica/Mawson"                 , 0x016A32 },
+	{ "Antarctica/McMurdo"                , 0x016AA1 },
+	{ "Antarctica/Palmer"                 , 0x016DA3 },
+	{ "Antarctica/Rothera"                , 0x0170BF },
+	{ "Antarctica/South_Pole"             , 0x017135 },
+	{ "Antarctica/Syowa"                  , 0x01743D },
+	{ "Antarctica/Vostok"                 , 0x0174AB },
+	{ "Arctic/Longyearbyen"               , 0x017520 },
+	{ "Asia/Aden"                         , 0x017852 },
+	{ "Asia/Almaty"                       , 0x0178A7 },
+	{ "Asia/Amman"                        , 0x017A26 },
+	{ "Asia/Anadyr"                       , 0x017CE6 },
+	{ "Asia/Aqtau"                        , 0x017FD4 },
+	{ "Asia/Aqtobe"                       , 0x0181D3 },
+	{ "Asia/Ashgabat"                     , 0x01838B },
+	{ "Asia/Ashkhabad"                    , 0x0184A8 },
+	{ "Asia/Baghdad"                      , 0x0185C5 },
+	{ "Asia/Bahrain"                      , 0x01873A },
+	{ "Asia/Baku"                         , 0x0187A0 },
+	{ "Asia/Bangkok"                      , 0x018A88 },
+	{ "Asia/Beirut"                       , 0x018ADD },
+	{ "Asia/Bishkek"                      , 0x018DEA },
+	{ "Asia/Brunei"                       , 0x018F96 },
+	{ "Asia/Calcutta"                     , 0x018FF8 },
+	{ "Asia/Choibalsan"                   , 0x019071 },
+	{ "Asia/Chongqing"                    , 0x0191EA },
+	{ "Asia/Chungking"                    , 0x0192D9 },
+	{ "Asia/Colombo"                      , 0x019388 },
+	{ "Asia/Dacca"                        , 0x019424 },
+	{ "Asia/Damascus"                     , 0x0194C5 },
+	{ "Asia/Dhaka"                        , 0x019815 },
+	{ "Asia/Dili"                         , 0x0198B6 },
+	{ "Asia/Dubai"                        , 0x01993F },
+	{ "Asia/Dushanbe"                     , 0x019994 },
+	{ "Asia/Gaza"                         , 0x019A97 },
+	{ "Asia/Harbin"                       , 0x019DE0 },
+	{ "Asia/Ho_Chi_Minh"                  , 0x019EC7 },
+	{ "Asia/Hong_Kong"                    , 0x019F3F },
+	{ "Asia/Hovd"                         , 0x01A0F5 },
+	{ "Asia/Irkutsk"                      , 0x01A26D },
+	{ "Asia/Istanbul"                     , 0x01A554 },
+	{ "Asia/Jakarta"                      , 0x01A941 },
+	{ "Asia/Jayapura"                     , 0x01A9EB },
+	{ "Asia/Jerusalem"                    , 0x01AA6F },
+	{ "Asia/Kabul"                        , 0x01AD9E },
+	{ "Asia/Kamchatka"                    , 0x01ADEF },
+	{ "Asia/Karachi"                      , 0x01B0D4 },
+	{ "Asia/Kashgar"                      , 0x01B189 },
+	{ "Asia/Kathmandu"                    , 0x01B25A },
+	{ "Asia/Katmandu"                     , 0x01B2C0 },
+	{ "Asia/Kolkata"                      , 0x01B326 },
+	{ "Asia/Krasnoyarsk"                  , 0x01B39F },
+	{ "Asia/Kuala_Lumpur"                 , 0x01B688 },
+	{ "Asia/Kuching"                      , 0x01B745 },
+	{ "Asia/Kuwait"                       , 0x01B833 },
+	{ "Asia/Macao"                        , 0x01B888 },
+	{ "Asia/Macau"                        , 0x01B9C3 },
+	{ "Asia/Magadan"                      , 0x01BAFE },
+	{ "Asia/Makassar"                     , 0x01BDE1 },
+	{ "Asia/Manila"                       , 0x01BE9A },
+	{ "Asia/Muscat"                       , 0x01BF1F },
+	{ "Asia/Nicosia"                      , 0x01BF74 },
+	{ "Asia/Novosibirsk"                  , 0x01C25C },
+	{ "Asia/Omsk"                         , 0x01C550 },
+	{ "Asia/Oral"                         , 0x01C838 },
+	{ "Asia/Phnom_Penh"                   , 0x01CA08 },
+	{ "Asia/Pontianak"                    , 0x01CA80 },
+	{ "Asia/Pyongyang"                    , 0x01CB41 },
+	{ "Asia/Qatar"                        , 0x01CBAE },
+	{ "Asia/Qyzylorda"                    , 0x01CC14 },
+	{ "Asia/Rangoon"                      , 0x01CDEA },
+	{ "Asia/Riyadh"                       , 0x01CE62 },
+	{ "Asia/Saigon"                       , 0x01CEB7 },
+	{ "Asia/Sakhalin"                     , 0x01CF2F },
+	{ "Asia/Samarkand"                    , 0x01D22F },
+	{ "Asia/Seoul"                        , 0x01D365 },
+	{ "Asia/Shanghai"                     , 0x01D409 },
+	{ "Asia/Singapore"                    , 0x01D4E9 },
+	{ "Asia/Taipei"                       , 0x01D5A0 },
+	{ "Asia/Tashkent"                     , 0x01D6B8 },
+	{ "Asia/Tbilisi"                      , 0x01D7E9 },
+	{ "Asia/Tehran"                       , 0x01D9A3 },
+	{ "Asia/Tel_Aviv"                     , 0x01DC11 },
+	{ "Asia/Thimbu"                       , 0x01DF40 },
+	{ "Asia/Thimphu"                      , 0x01DFA6 },
+	{ "Asia/Tokyo"                        , 0x01E00C },
+	{ "Asia/Ujung_Pandang"                , 0x01E095 },
+	{ "Asia/Ulaanbaatar"                  , 0x01E111 },
+	{ "Asia/Ulan_Bator"                   , 0x01E26C },
+	{ "Asia/Urumqi"                       , 0x01E3B9 },
+	{ "Asia/Vientiane"                    , 0x01E480 },
+	{ "Asia/Vladivostok"                  , 0x01E4F8 },
+	{ "Asia/Yakutsk"                      , 0x01E7E5 },
+	{ "Asia/Yekaterinburg"                , 0x01EACB },
+	{ "Asia/Yerevan"                      , 0x01EDD7 },
+	{ "Atlantic/Azores"                   , 0x01F0DB },
+	{ "Atlantic/Bermuda"                  , 0x01F5DE },
+	{ "Atlantic/Canary"                   , 0x01F8BF },
+	{ "Atlantic/Cape_Verde"               , 0x01FB95 },
+	{ "Atlantic/Faeroe"                   , 0x01FC0E },
+	{ "Atlantic/Faroe"                    , 0x01FEB2 },
+	{ "Atlantic/Jan_Mayen"                , 0x020156 },
+	{ "Atlantic/Madeira"                  , 0x020488 },
+	{ "Atlantic/Reykjavik"                , 0x020991 },
+	{ "Atlantic/South_Georgia"            , 0x020B4A },
+	{ "Atlantic/St_Helena"                , 0x020E62 },
+	{ "Atlantic/Stanley"                  , 0x020B8E },
+	{ "Australia/ACT"                     , 0x020EB7 },
+	{ "Australia/Adelaide"                , 0x0211D4 },
+	{ "Australia/Brisbane"                , 0x021500 },
+	{ "Australia/Broken_Hill"             , 0x0215C7 },
+	{ "Australia/Canberra"                , 0x021905 },
+	{ "Australia/Currie"                  , 0x021C22 },
+	{ "Australia/Darwin"                  , 0x021F55 },
+	{ "Australia/Eucla"                   , 0x021FDB },
+	{ "Australia/Hobart"                  , 0x0220B0 },
+	{ "Australia/LHI"                     , 0x02240E },
+	{ "Australia/Lindeman"                , 0x0226A9 },
+	{ "Australia/Lord_Howe"               , 0x02278A },
+	{ "Australia/Melbourne"               , 0x022A35 },
+	{ "Australia/North"                   , 0x022D5A },
+	{ "Australia/NSW"                     , 0x022DCE },
+	{ "Australia/Perth"                   , 0x0230EB },
+	{ "Australia/Queensland"              , 0x0231C3 },
+	{ "Australia/South"                   , 0x02326F },
+	{ "Australia/Sydney"                  , 0x02358C },
+	{ "Australia/Tasmania"                , 0x0238C9 },
+	{ "Australia/Victoria"                , 0x023C0E },
+	{ "Australia/West"                    , 0x023F2B },
+	{ "Australia/Yancowinna"              , 0x023FE1 },
+	{ "Brazil/Acre"                       , 0x024303 },
+	{ "Brazil/DeNoronha"                  , 0x024402 },
+	{ "Brazil/East"                       , 0x024522 },
+	{ "Brazil/West"                       , 0x0247FF },
+	{ "Canada/Atlantic"                   , 0x0248F7 },
+	{ "Canada/Central"                    , 0x024DDF },
+	{ "Canada/East-Saskatchewan"          , 0x0256E9 },
+	{ "Canada/Eastern"                    , 0x0251F9 },
+	{ "Canada/Mountain"                   , 0x025872 },
+	{ "Canada/Newfoundland"               , 0x025BE8 },
+	{ "Canada/Pacific"                    , 0x026113 },
+	{ "Canada/Saskatchewan"               , 0x02652C },
+	{ "Canada/Yukon"                      , 0x0266B5 },
+	{ "CET"                               , 0x0269B8 },
+	{ "Chile/Continental"                 , 0x026CC1 },
+	{ "Chile/EasterIsland"                , 0x02705C },
+	{ "CST6CDT"                           , 0x02739E },
+	{ "Cuba"                              , 0x0276EF },
+	{ "EET"                               , 0x027A62 },
+	{ "Egypt"                             , 0x027D15 },
+	{ "Eire"                              , 0x0280DC },
+	{ "EST"                               , 0x0285ED },
+	{ "EST5EDT"                           , 0x028631 },
+	{ "Etc/GMT"                           , 0x028982 },
+	{ "Etc/GMT+0"                         , 0x028A4E },
+	{ "Etc/GMT+1"                         , 0x028AD8 },
+	{ "Etc/GMT+10"                        , 0x028B65 },
+	{ "Etc/GMT+11"                        , 0x028BF3 },
+	{ "Etc/GMT+12"                        , 0x028C81 },
+	{ "Etc/GMT+2"                         , 0x028D9C },
+	{ "Etc/GMT+3"                         , 0x028E28 },
+	{ "Etc/GMT+4"                         , 0x028EB4 },
+	{ "Etc/GMT+5"                         , 0x028F40 },
+	{ "Etc/GMT+6"                         , 0x028FCC },
+	{ "Etc/GMT+7"                         , 0x029058 },
+	{ "Etc/GMT+8"                         , 0x0290E4 },
+	{ "Etc/GMT+9"                         , 0x029170 },
+	{ "Etc/GMT-0"                         , 0x028A0A },
+	{ "Etc/GMT-1"                         , 0x028A92 },
+	{ "Etc/GMT-10"                        , 0x028B1E },
+	{ "Etc/GMT-11"                        , 0x028BAC },
+	{ "Etc/GMT-12"                        , 0x028C3A },
+	{ "Etc/GMT-13"                        , 0x028CC8 },
+	{ "Etc/GMT-14"                        , 0x028D0F },
+	{ "Etc/GMT-2"                         , 0x028D56 },
+	{ "Etc/GMT-3"                         , 0x028DE2 },
+	{ "Etc/GMT-4"                         , 0x028E6E },
+	{ "Etc/GMT-5"                         , 0x028EFA },
+	{ "Etc/GMT-6"                         , 0x028F86 },
+	{ "Etc/GMT-7"                         , 0x029012 },
+	{ "Etc/GMT-8"                         , 0x02909E },
+	{ "Etc/GMT-9"                         , 0x02912A },
+	{ "Etc/GMT0"                          , 0x0289C6 },
+	{ "Etc/Greenwich"                     , 0x0291B6 },
+	{ "Etc/UCT"                           , 0x0291FA },
+	{ "Etc/Universal"                     , 0x02923E },
+	{ "Etc/UTC"                           , 0x029282 },
+	{ "Etc/Zulu"                          , 0x0292C6 },
+	{ "Europe/Amsterdam"                  , 0x02930A },
+	{ "Europe/Andorra"                    , 0x029748 },
+	{ "Europe/Athens"                     , 0x0299C4 },
+	{ "Europe/Belfast"                    , 0x029D07 },
+	{ "Europe/Belgrade"                   , 0x02A23E },
+	{ "Europe/Berlin"                     , 0x02A507 },
+	{ "Europe/Bratislava"                 , 0x02A85D },
+	{ "Europe/Brussels"                   , 0x02AB8F },
+	{ "Europe/Bucharest"                  , 0x02AFC6 },
+	{ "Europe/Budapest"                   , 0x02B2F0 },
+	{ "Europe/Chisinau"                   , 0x02B663 },
+	{ "Europe/Copenhagen"                 , 0x02B9F1 },
+	{ "Europe/Dublin"                     , 0x02BCFB },
+	{ "Europe/Gibraltar"                  , 0x02C20C },
+	{ "Europe/Guernsey"                   , 0x02C663 },
+	{ "Europe/Helsinki"                   , 0x02CB9A },
+	{ "Europe/Isle_of_Man"                , 0x02CE50 },
+	{ "Europe/Istanbul"                   , 0x02D387 },
+	{ "Europe/Jersey"                     , 0x02D774 },
+	{ "Europe/Kaliningrad"                , 0x02DCAB },
+	{ "Europe/Kiev"                       , 0x02E00E },
+	{ "Europe/Lisbon"                     , 0x02E325 },
+	{ "Europe/Ljubljana"                  , 0x02E829 },
+	{ "Europe/London"                     , 0x02EAF2 },
+	{ "Europe/Luxembourg"                 , 0x02F029 },
+	{ "Europe/Madrid"                     , 0x02F47F },
+	{ "Europe/Malta"                      , 0x02F845 },
+	{ "Europe/Mariehamn"                  , 0x02FBFE },
+	{ "Europe/Minsk"                      , 0x02FEB4 },
+	{ "Europe/Monaco"                     , 0x0301BF },
+	{ "Europe/Moscow"                     , 0x0305FA },
+	{ "Europe/Nicosia"                    , 0x03094C },
+	{ "Europe/Oslo"                       , 0x030C34 },
+	{ "Europe/Paris"                      , 0x030F66 },
+	{ "Europe/Podgorica"                  , 0x0313AC },
+	{ "Europe/Prague"                     , 0x031675 },
+	{ "Europe/Riga"                       , 0x0319A7 },
+	{ "Europe/Rome"                       , 0x031CEC },
+	{ "Europe/Samara"                     , 0x0320AF },
+	{ "Europe/San_Marino"                 , 0x0323DB },
+	{ "Europe/Sarajevo"                   , 0x03279E },
+	{ "Europe/Simferopol"                 , 0x032A67 },
+	{ "Europe/Skopje"                     , 0x032D92 },
+	{ "Europe/Sofia"                      , 0x03305B },
+	{ "Europe/Stockholm"                  , 0x033363 },
+	{ "Europe/Tallinn"                    , 0x033612 },
+	{ "Europe/Tirane"                     , 0x03394C },
+	{ "Europe/Tiraspol"                   , 0x033C52 },
+	{ "Europe/Uzhgorod"                   , 0x033FE0 },
+	{ "Europe/Vaduz"                      , 0x0342F7 },
+	{ "Europe/Vatican"                    , 0x03458A },
+	{ "Europe/Vienna"                     , 0x03494D },
+	{ "Europe/Vilnius"                    , 0x034C7A },
+	{ "Europe/Volgograd"                  , 0x034FB9 },
+	{ "Europe/Warsaw"                     , 0x0352C2 },
+	{ "Europe/Zagreb"                     , 0x0356A3 },
+	{ "Europe/Zaporozhye"                 , 0x03596C },
+	{ "Europe/Zurich"                     , 0x035CAD },
+	{ "Factory"                           , 0x035F5C },
+	{ "GB"                                , 0x035FCD },
+	{ "GB-Eire"                           , 0x036504 },
+	{ "GMT"                               , 0x036A3B },
+	{ "GMT+0"                             , 0x036B07 },
+	{ "GMT-0"                             , 0x036AC3 },
+	{ "GMT0"                              , 0x036A7F },
+	{ "Greenwich"                         , 0x036B4B },
+	{ "Hongkong"                          , 0x036B8F },
+	{ "HST"                               , 0x036D45 },
+	{ "Iceland"                           , 0x036D89 },
+	{ "Indian/Antananarivo"               , 0x036F42 },
+	{ "Indian/Chagos"                     , 0x036FB6 },
+	{ "Indian/Christmas"                  , 0x037018 },
+	{ "Indian/Cocos"                      , 0x03705C },
+	{ "Indian/Comoro"                     , 0x0370A0 },
+	{ "Indian/Kerguelen"                  , 0x0370F5 },
+	{ "Indian/Mahe"                       , 0x03714A },
+	{ "Indian/Maldives"                   , 0x03719F },
+	{ "Indian/Mauritius"                  , 0x0371F4 },
+	{ "Indian/Mayotte"                    , 0x037397 },
+	{ "Indian/Reunion"                    , 0x0373EC },
+	{ "Iran"                              , 0x037441 },
+	{ "Israel"                            , 0x0376AF },
+	{ "Jamaica"                           , 0x0379DE },
+	{ "Japan"                             , 0x037AA3 },
+	{ "Kwajalein"                         , 0x037B2C },
+	{ "Libya"                             , 0x037B8F },
+	{ "MET"                               , 0x037C89 },
+	{ "Mexico/BajaNorte"                  , 0x037F92 },
+	{ "Mexico/BajaSur"                    , 0x0382FB },
+	{ "Mexico/General"                    , 0x038540 },
+	{ "MST"                               , 0x03879E },
+	{ "MST7MDT"                           , 0x0387E2 },
+	{ "Navajo"                            , 0x038B33 },
+	{ "NZ"                                , 0x038EAC },
+	{ "NZ-CHAT"                           , 0x03922A },
+	{ "Pacific/Apia"                      , 0x039512 },
+	{ "Pacific/Auckland"                  , 0x039579 },
+	{ "Pacific/Chatham"                   , 0x039905 },
+	{ "Pacific/Easter"                    , 0x039BFC },
+	{ "Pacific/Efate"                     , 0x039F5A },
+	{ "Pacific/Enderbury"                 , 0x03A020 },
+	{ "Pacific/Fakaofo"                   , 0x03A08E },
+	{ "Pacific/Fiji"                      , 0x03A0D2 },
+	{ "Pacific/Funafuti"                  , 0x03A148 },
+	{ "Pacific/Galapagos"                 , 0x03A18C },
+	{ "Pacific/Gambier"                   , 0x03A204 },
+	{ "Pacific/Guadalcanal"               , 0x03A269 },
+	{ "Pacific/Guam"                      , 0x03A2BE },
+	{ "Pacific/Honolulu"                  , 0x03A314 },
+	{ "Pacific/Johnston"                  , 0x03A3A8 },
+	{ "Pacific/Kiritimati"                , 0x03A3FA },
+	{ "Pacific/Kosrae"                    , 0x03A465 },
+	{ "Pacific/Kwajalein"                 , 0x03A4C2 },
+	{ "Pacific/Majuro"                    , 0x03A52E },
+	{ "Pacific/Marquesas"                 , 0x03A58D },
+	{ "Pacific/Midway"                    , 0x03A5F4 },
+	{ "Pacific/Nauru"                     , 0x03A67E },
+	{ "Pacific/Niue"                      , 0x03A6F6 },
+	{ "Pacific/Norfolk"                   , 0x03A754 },
+	{ "Pacific/Noumea"                    , 0x03A7A9 },
+	{ "Pacific/Pago_Pago"                 , 0x03A839 },
+	{ "Pacific/Palau"                     , 0x03A8C2 },
+	{ "Pacific/Pitcairn"                  , 0x03A906 },
+	{ "Pacific/Ponape"                    , 0x03A95B },
+	{ "Pacific/Port_Moresby"              , 0x03A9B0 },
+	{ "Pacific/Rarotonga"                 , 0x03A9F4 },
+	{ "Pacific/Saipan"                    , 0x03AAD0 },
+	{ "Pacific/Samoa"                     , 0x03AB33 },
+	{ "Pacific/Tahiti"                    , 0x03ABBC },
+	{ "Pacific/Tarawa"                    , 0x03AC21 },
+	{ "Pacific/Tongatapu"                 , 0x03AC75 },
+	{ "Pacific/Truk"                      , 0x03AD01 },
+	{ "Pacific/Wake"                      , 0x03AD5A },
+	{ "Pacific/Wallis"                    , 0x03ADAA },
+	{ "Pacific/Yap"                       , 0x03ADEE },
+	{ "Poland"                            , 0x03AE33 },
+	{ "Portugal"                          , 0x03B214 },
+	{ "PRC"                               , 0x03B710 },
+	{ "PST8PDT"                           , 0x03B7C1 },
+	{ "ROC"                               , 0x03BB12 },
+	{ "ROK"                               , 0x03BC2A },
+	{ "Singapore"                         , 0x03BCCE },
+	{ "Turkey"                            , 0x03BD85 },
+	{ "UCT"                               , 0x03C172 },
+	{ "Universal"                         , 0x03C1B6 },
+	{ "US/Alaska"                         , 0x03C1FA },
+	{ "US/Aleutian"                       , 0x03C563 },
+	{ "US/Arizona"                        , 0x03C8C9 },
+	{ "US/Central"                        , 0x03C957 },
+	{ "US/East-Indiana"                   , 0x03D361 },
+	{ "US/Eastern"                        , 0x03CE62 },
+	{ "US/Hawaii"                         , 0x03D5CB },
+	{ "US/Indiana-Starke"                 , 0x03D659 },
+	{ "US/Michigan"                       , 0x03D9CA },
+	{ "US/Mountain"                       , 0x03DD01 },
+	{ "US/Pacific"                        , 0x03E07A },
+	{ "US/Pacific-New"                    , 0x03E47F },
+	{ "US/Samoa"                          , 0x03E884 },
+	{ "UTC"                               , 0x03E90D },
+	{ "W-SU"                              , 0x03EC04 },
+	{ "WET"                               , 0x03E951 },
+	{ "Zulu"                              , 0x03EF3F },
 };
 /* This is a generated file, do not modify */
-const unsigned char timelib_timezone_db_data_builtin[257587] = {
+const unsigned char timelib_timezone_db_data_builtin[257923] = {
 
 
 /* Africa/Abidjan */
@@ -569,8 +569,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x92, 0x48, 
 0x01, 0xFF, 0xFF, 0xFC, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x71, 0x12, 0x01, 0x0C, 0x9B, 
+0x05, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Accra */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -582,16 +582,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xCC, 0x95, 0x80, 0x00, 0xCD, 0x35, 0x00, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x04, 
 0xB0, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x48, 0x53, 
-0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xCC, 0x38, 
+0x01, 0x12, 0xFD, 0x22, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Addis_Ababa */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xC0, 0xAF, 0xF2, 0x98, 
 0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D, 
-0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x1C, 0xE5, 0x01, 0x4D, 
+0xB5, 0xB0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Algiers */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -612,15 +612,15 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x50, 0x4D, 0x54, 0x00, 0x57, 
 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 
 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0xC1, 0x74, 0xBD, 0x01, 0x17, 0x4F, 0xE8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Asmara */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xC0, 0xAF, 0xF2, 0x98, 
 0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D, 
-0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xB9, 0xD5, 0x01, 0x4D, 
+0xFD, 0x4D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Asmera */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -637,15 +637,15 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xBC, 0x92, 0xB8, 0x80, 0xEE, 0x11, 0x87, 0x10, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x9C, 0xA1, 0xA8, 0x01, 0x06, 0x73, 0x80, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Bangui */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x7D, 0x14, 
 0x01, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xFD, 0xFA, 0x01, 0x2F, 0x03, 
+0x9D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Banjul */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -654,8 +654,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xBE, 0x2A, 0x27, 0x9C, 0xF4, 0xB6, 0x36, 0x10, 0x01, 0x02, 0x03, 0xFF, 0xFF, 0xF0, 0x64, 0x00, 
 0x00, 0xFF, 0xFF, 0xF0, 0x64, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x47, 
-0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xE0, 0xAA, 0x00, 
+0xFB, 0x3C, 0x68, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Bissau */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -663,30 +663,30 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x91, 0xC4, 0x93, 0x1C, 
 0x09, 0x67, 0x61, 0x10, 0x01, 0x02, 0xFF, 0xFF, 0xF1, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 
 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 
-0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x69, 0x28, 0x00, 0xFC, 
+0xA8, 0xFD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Blantyre */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC3, 0xB0, 
 0x01, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xA2, 0xDD, 0x01, 0x48, 0x10, 
+0x60, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Brazzaville */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x80, 0x2C, 
 0x01, 0x00, 0x00, 0x0E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xA1, 0xEA, 0x01, 0x29, 0xFA, 
+0x8D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Bujumbura */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 
-0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x85, 0x56, 0x1D, 0x01, 0x3F, 0x77, 0xDA, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Cairo */
@@ -722,21 +722,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3F, 0x73, 0x57, 0x50, 0x40, 0x91, 0x7A, 0xE0, 0x41, 0x5C, 0x73, 0xD0, 0x42, 0x71, 0x5C, 0xE0, 
 0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, 
 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 
-0x4A, 0x96, 0xF3, 0xD0, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x76, 0xD5, 0xD0, 0x4D, 0xB9, 0xE3, 0x60, 
-0x4E, 0x56, 0xB7, 0xD0, 0x4F, 0x99, 0xC5, 0x60, 0x50, 0x3F, 0xD4, 0x50, 0x51, 0x79, 0xA7, 0x60, 
-0x52, 0x1F, 0xB6, 0x50, 0x53, 0x59, 0x89, 0x60, 0x53, 0xFF, 0x98, 0x50, 0x55, 0x39, 0x6B, 0x60, 
-0x55, 0xDF, 0x7A, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0xBF, 0x5C, 0x50, 0x59, 0x02, 0x69, 0xE0, 
-0x59, 0xA8, 0x78, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5B, 0x88, 0x5A, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 
-0x5D, 0x68, 0x3C, 0xD0, 0x5E, 0xA2, 0x0F, 0xE0, 0x5F, 0x48, 0x1E, 0xD0, 0x60, 0x8B, 0x2C, 0x60, 
-0x61, 0x28, 0x00, 0xD0, 0x62, 0x6B, 0x0E, 0x60, 0x63, 0x07, 0xE2, 0xD0, 0x64, 0x4A, 0xF0, 0x60, 
-0x64, 0xF0, 0xFF, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xD0, 0xE1, 0x50, 0x68, 0x0A, 0xB4, 0x60, 
-0x68, 0xB0, 0xC3, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0x90, 0xA5, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 
-0x6C, 0x70, 0x87, 0x50, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x59, 0xA3, 0xD0, 0x6F, 0x93, 0x76, 0xE0, 
-0x70, 0x39, 0x85, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x19, 0x67, 0xD0, 0x73, 0x53, 0x3A, 0xE0, 
-0x73, 0xF9, 0x49, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x75, 0xD9, 0x2B, 0xD0, 0x77, 0x1C, 0x39, 0x60, 
-0x77, 0xB9, 0x0D, 0xD0, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xA2, 0x2A, 0x50, 0x7A, 0xDB, 0xFD, 0x60, 
-0x7B, 0x82, 0x0C, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x61, 0xEE, 0x50, 0x7E, 0x9B, 0xC1, 0x60, 
-0x7F, 0x41, 0xD0, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
+0x4A, 0xBB, 0xDD, 0xD0, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0xA4, 0xFA, 0x50, 0x4D, 0xB9, 0xE3, 0x60, 
+0x4E, 0x84, 0xDC, 0x50, 0x4F, 0x99, 0xC5, 0x60, 0x50, 0x64, 0xBE, 0x50, 0x51, 0x79, 0xA7, 0x60, 
+0x52, 0x44, 0xA0, 0x50, 0x53, 0x59, 0x89, 0x60, 0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 
+0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 
+0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 
+0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xA2, 0x0F, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x8B, 0x2C, 0x60, 
+0x61, 0x56, 0x25, 0x50, 0x62, 0x6B, 0x0E, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, 
+0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, 
+0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 
+0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, 
+0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, 
+0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, 
+0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, 
+0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, 
+0x7F, 0x66, 0xBA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
@@ -749,24 +749,24 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 
 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 
 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 
-0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, 
+0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Casablanca */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C, 
+0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C, 
 0xC6, 0xFF, 0x14, 0x80, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xED, 0x80, 0xD2, 0xA1, 0x32, 0xF0, 
 0xDB, 0x35, 0xA4, 0x00, 0xDB, 0xEE, 0x27, 0xF0, 0xFB, 0x25, 0x72, 0x40, 0xFB, 0xC2, 0xEF, 0x70, 
 0x08, 0x6B, 0x84, 0x80, 0x08, 0xC6, 0x6D, 0xF0, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0, 
 0x0D, 0xC9, 0x3F, 0x80, 0x0E, 0x8E, 0xF2, 0x70, 0x0F, 0xD3, 0x51, 0x80, 0x10, 0x27, 0xA3, 0x70, 
 0x1A, 0xB7, 0xA6, 0x00, 0x1E, 0x18, 0x6F, 0xF0, 0x48, 0x41, 0xE6, 0x80, 0x48, 0xBB, 0x22, 0x70, 
-0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
-0x02, 0x03, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 
-0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 
-0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
-0x00, 0x00, 
+0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
+0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 
+0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 
+0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0xBC, 0xAC, 0xC8, 0x01, 0x08, 0xDD, 0xFD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Ceuta */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -815,8 +815,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x45, 0x54, 0x00, 
 0x57, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x43, 0x65, 0x75, 0x74, 0x61, 0x20, 0x26, 0x20, 
+0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC0, 0x15, 0x2D, 
+0x01, 0x0B, 0x83, 0x12, 0x00, 0x00, 0x00, 0x0F, 0x43, 0x65, 0x75, 0x74, 0x61, 0x20, 0x26, 0x20, 
 0x4D, 0x65, 0x6C, 0x69, 0x6C, 0x6C, 0x61, 
 
 /* Africa/Conakry */
@@ -826,7 +826,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xBC, 0x92, 0xB8, 0x80, 0xED, 0x30, 0x16, 0x90, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF3, 0x24, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x97, 0xD9, 0xB2, 0x00, 0xFF, 0xEA, 0x52, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Dakar */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -834,8 +834,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9E, 0xD8, 
 0xCA, 0x3B, 0x10, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xEF, 0xA8, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 
 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 
-0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xB5, 0x6A, 0x00, 0xF9, 
+0x61, 0x25, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Dar_es_Salaam */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -844,23 +844,23 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xD6, 0x9D, 0x7F, 0xD0, 0xEF, 0x12, 0x66, 0xE3, 0x01, 0x02, 0x01, 0x00, 0x00, 0x24, 0xD4, 0x00, 
 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x81, 0x65, 0x00, 0x01, 0x4E, 0x99, 0x8D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Djibouti */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF3, 0xD2, 0x0C, 
 0x01, 0x00, 0x00, 0x28, 0x74, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x07, 0x80, 0x01, 0x54, 0x7F, 
+0xF8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Douala */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x85, 0x68, 
 0x01, 0x00, 0x00, 0x09, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x82, 0x48, 0x01, 0x21, 0x75, 
+0x90, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/El_Aaiun */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -868,8 +868,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xBC, 0x48, 0xF0, 0xE0, 
 0x0B, 0xD1, 0xB0, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 
 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 
-0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xC1, 0xB8, 0x00, 0xFF, 
+0x20, 0x7F, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Freetown */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -888,7 +888,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x46, 0x4D, 0x54, 0x00, 0x53, 0x4C, 0x53, 0x54, 0x00, 0x57, 
 0x41, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x96, 0x4C, 0x90, 0x00, 0xFF, 0x34, 0x08, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Gaborone */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -896,15 +896,15 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xCE, 0x8E, 0x6E, 0x80, 
 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 
 0x01, 0x04, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x65, 0xB3, 0x28, 0x01, 0x3A, 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Harare */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC7, 0x64, 
 0x01, 0x00, 0x00, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xA9, 0x25, 0x01, 0x42, 0x09, 
+0x68, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Johannesburg */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -913,7 +913,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 
 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x62, 0x09, 0xA8, 0x01, 0x3D, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Kampala */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -923,7 +923,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x1E, 0x64, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x23, 0x28, 
 0x00, 0x08, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 
 0x42, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x89, 0xCF, 0xF2, 0x01, 0x44, 0x1F, 0x42, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Khartoum */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -942,7 +942,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 
 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x4C, 0x4D, 
 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x22, 0x00, 0x01, 0x44, 0x4C, 0xD5, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Africa/Kigali */
@@ -950,14 +950,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xBE, 0xF1, 0x0E, 0x50, 
 0x01, 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x40, 0xB8, 0x01, 0x40, 0x89, 
+0x4A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Kinshasa */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 
-0x00, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x83, 0xAE, 0xF0, 0x01, 0x2A, 0x01, 0x10, 
 0x00, 0x00, 0x00, 0x17, 0x77, 0x65, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, 0x65, 
 0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F, 
 
@@ -966,22 +966,22 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA1, 0x51, 0xF3, 0x50, 
 0x01, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x2B, 0xC8, 0x01, 0x17, 0xD8, 
+0xA0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Libreville */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x85, 0xA4, 
 0x01, 0x00, 0x00, 0x08, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xE9, 0xFD, 0x01, 0x21, 0x13, 
+0xE8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Lome */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x92, 0xB0, 0x15, 0x01, 0x14, 0x83, 0xC2, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Luanda */
@@ -989,14 +989,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xC4, 0x78, 0x4C, 
 0x01, 0x00, 0x00, 0x0C, 0x34, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x41, 0x4F, 0x54, 
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x57, 0xC0, 0x01, 0x26, 0xD9, 
+0xC5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Lubumbashi */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 
-0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x79, 0x8F, 0xCA, 0x01, 0x3C, 0x91, 0xAA, 
 0x00, 0x00, 0x00, 0x17, 0x65, 0x61, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, 0x65, 
 0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F, 
 
@@ -1005,8 +1005,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC9, 0xFC, 
 0x01, 0x00, 0x00, 0x1A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x13, 0xA2, 0x01, 0x3D, 0xD0, 
+0xAD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Malabo */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1014,16 +1014,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x86, 0x44, 
 0xF4, 0x9F, 0xBE, 0x80, 0x01, 0x02, 0x00, 0x00, 0x08, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 
-0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x0D, 0x18, 0x01, 0x20, 
+0x0F, 0x7D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Maputo */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, 
 0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xA8, 0x3A, 0x01, 0x44, 0x60, 
+0x5D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Maseru */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1031,16 +1031,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xCA, 0xB8, 
 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x19, 0xC8, 0x00, 
 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xCA, 0x6A, 
+0x01, 0x3C, 0x9E, 0xB0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Mbabane */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xC7, 0x58, 
 0x01, 0x00, 0x00, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x1D, 0x30, 0x01, 0x42, 
+0x1C, 0xF0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Mogadishu */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1048,7 +1048,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xB6, 0xA3, 0xCE, 0x50, 
 0xE7, 0x8C, 0x4A, 0xD8, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x23, 0x28, 
 0x00, 0x04, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x8C, 0x7B, 0x8A, 0x01, 0x57, 0xE1, 0xDA, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Monrovia */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1056,8 +1056,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA0, 0x5F, 0x6C, 0x9C, 
 0x04, 0x61, 0xF6, 0xEE, 0x01, 0x02, 0xFF, 0xFF, 0xF5, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xF5, 0x92, 
 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4D, 0x4D, 0x54, 0x00, 0x4C, 0x52, 0x54, 0x00, 
-0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xF1, 0x30, 0x01, 0x04, 
+0x98, 0x3D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Nairobi */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1067,7 +1067,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x22, 0x84, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x23, 0x28, 
 0x00, 0x08, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 
 0x42, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x88, 0x3C, 0x4D, 0x01, 0x4A, 0xD6, 0x02, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Ndjamena */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1076,7 +1076,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x12, 0x66, 0x71, 0x70, 0x13, 0x26, 0xDE, 0x60, 0x01, 0x02, 0x01, 0x00, 0x00, 0x0E, 0x1C, 0x00, 
 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x57, 0x41, 0x54, 0x00, 0x57, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x9B, 0xD1, 0x52, 0x01, 0x29, 0x9F, 0x68, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Niamey */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1085,7 +1085,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xBC, 0x92, 0xC6, 0x90, 0xED, 0x30, 0x08, 0x80, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0xFC, 0x00, 
 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E, 
 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xF4, 0x32, 0x01, 0x15, 0xE3, 0x52, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Africa/Nouakchott */
@@ -1095,15 +1095,15 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xBC, 0x92, 0xB8, 0x80, 0xEE, 0xE5, 0xC8, 0x90, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF1, 0x0C, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0xA4, 0xF2, 0x90, 0x00, 0xFD, 0x38, 0x37, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Ouagadougou */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x8F, 0xEC, 
 0x01, 0xFF, 0xFF, 0xFE, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x32, 0xFA, 0x01, 0x11, 0xEB, 
+0xB2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Porto-Novo */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1111,16 +1111,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x8C, 0x0C, 
 0xBC, 0x92, 0xB8, 0x80, 0x01, 0x02, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 
-0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x38, 0xCD, 0x01, 0x16, 
+0xA6, 0xA2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Sao_Tome */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x97, 0x10, 
 0x01, 0xFF, 0xFF, 0xF7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xD6, 0x75, 0x01, 0x1C, 0xEE, 
+0xB5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Timbuktu */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1146,13 +1146,13 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C, 
 0x5C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 
 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 
-0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 
+0x87, 0xD0, 0x01, 0x26, 0xC6, 0x3D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Tunis */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x60, 0x50, 0x4F, 
+0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x60, 0x50, 0x4F, 
 0xC6, 0x3A, 0x88, 0xE0, 0xC7, 0x58, 0x9E, 0x60, 0xC7, 0xDB, 0x22, 0xE0, 0xCA, 0xE2, 0x54, 0xE0, 
 0xCB, 0xAD, 0x69, 0xF0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCD, 0xC2, 0x16, 0x00, 
 0xCD, 0xCC, 0xB0, 0x10, 0xCE, 0xA2, 0x35, 0x00, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x89, 0xE3, 0xE0, 
@@ -1161,31 +1161,30 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x3C, 0xC3, 0x70, 0x27, 0x05, 0x27, 0x70, 
 0x42, 0x74, 0x0D, 0xF0, 0x43, 0x3C, 0x80, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 
 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
+0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 
+0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 
+0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 
+0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 
+0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 
+0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 
+0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 
+0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 
+0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 
+0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 
+0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 
+0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 
+0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 
+0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 
+0x03, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
-0x02, 0x01, 0x02, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 
-0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 
-0x04, 0x50, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
-0x00, 0x00, 0x00, 0x00, 
+0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 
+0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 
+0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x50, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 
+0x43, 0x45, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 
+0x7B, 0x40, 0x01, 0x22, 0x32, 0x5D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Africa/Windhoek */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1223,8 +1222,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x01, 0x53, 0x57, 0x41, 0x54, 
 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x57, 0x41, 0x53, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x9F, 0xDA, 0x01, 
+0x2C, 0xC0, 0x30, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Adak */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1280,8 +1279,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 
 0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, 
 0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x41, 0x6C, 0x65, 0x75, 0x74, 0x69, 0x61, 0x6E, 0x20, 0x49, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x7D, 0xE0, 0x00, 0x07, 
+0x1B, 0x8D, 0x00, 0x00, 0x00, 0x10, 0x41, 0x6C, 0x65, 0x75, 0x74, 0x69, 0x61, 0x6E, 0x20, 0x49, 
 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* America/Anchorage */
@@ -1338,8 +1337,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x1C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x21, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x57, 0x54, 0x00, 
 0x43, 0x41, 0x50, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, 0x41, 0x48, 0x44, 0x54, 0x00, 0x59, 
 0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0B, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xBD, 
+0x8D, 0x00, 0x30, 0xAD, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 
 0x54, 0x69, 0x6D, 0x65, 
 
 /* America/Anguilla */
@@ -1347,8 +1346,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x37, 0x35, 0x20, 
 0x01, 0xFF, 0xFF, 0xC4, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x19, 0xA0, 0x00, 0xB2, 0xA1, 
+0x2A, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Antigua */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1356,8 +1355,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x37, 0x33, 0xF0, 
 0xDC, 0x42, 0xDC, 0x50, 0x01, 0x02, 0xFF, 0xFF, 0xC6, 0x10, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 
 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0x58, 0x68, 0x00, 0xB6, 
+0xCC, 0xE0, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Araguaina */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1380,7 +1379,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0xFF, 0xFF, 0xD2, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 
 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xF4, 0x00, 0x00, 0xC9, 0xB8, 0x9F, 0x00, 0x00, 
 0x00, 0x09, 0x54, 0x6F, 0x63, 0x61, 0x6E, 0x74, 0x69, 0x6E, 0x73, 
 
 /* America/Argentina/Buenos_Aires */
@@ -1426,8 +1425,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 
 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 
 0xD0, 0x00, 0x04, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x42, 0x75, 0x65, 0x6E, 0x6F, 0x73, 0x20, 0x41, 0x69, 0x72, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x5D, 0x60, 0x00, 0xBA, 
+0xD8, 0x08, 0x00, 0x00, 0x00, 0x15, 0x42, 0x75, 0x65, 0x6E, 0x6F, 0x73, 0x20, 0x41, 0x69, 0x72, 
 0x65, 0x73, 0x20, 0x28, 0x42, 0x41, 0x2C, 0x20, 0x43, 0x46, 0x29, 
 
 /* America/Argentina/Catamarca */
@@ -1456,8 +1455,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 
 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 
 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x61, 0x74, 0x61, 0x6D, 0x61, 0x72, 0x63, 0x61, 0x20, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x51, 0x0A, 0x00, 0xB0, 
+0xAB, 0xDD, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x61, 0x74, 0x61, 0x6D, 0x61, 0x72, 0x63, 0x61, 0x20, 
 0x28, 0x43, 0x54, 0x29, 0x2C, 0x20, 0x43, 0x68, 0x75, 0x62, 0x75, 0x74, 0x20, 0x28, 0x43, 0x48, 
 0x29, 
 
@@ -1534,7 +1533,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 
 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 
 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA3, 0x20, 0x00, 0xB1, 0x48, 0x1D, 0x00, 
 0x00, 0x00, 0x2F, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 
 0x73, 0x20, 0x28, 0x43, 0x42, 0x2C, 0x20, 0x43, 0x43, 0x2C, 0x20, 0x43, 0x4E, 0x2C, 0x20, 0x45, 
 0x52, 0x2C, 0x20, 0x46, 0x4D, 0x2C, 0x20, 0x4D, 0x4E, 0x2C, 0x20, 0x53, 0x45, 0x2C, 0x20, 0x53, 
@@ -1566,8 +1565,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 
 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x4A, 0x75, 0x6A, 0x75, 0x79, 0x20, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 
+0xFC, 0xDD, 0x00, 0xAF, 0xEF, 0x10, 0x00, 0x00, 0x00, 0x0A, 0x4A, 0x75, 0x6A, 0x75, 0x79, 0x20, 
 0x28, 0x4A, 0x59, 0x29, 
 
 /* America/Argentina/La_Rioja */
@@ -1597,7 +1596,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 
 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 
 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x61, 0x20, 0x52, 0x69, 
+0x5D, 0xBD, 0x65, 0x00, 0xAF, 0x3F, 0x48, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x61, 0x20, 0x52, 0x69, 
 0x6F, 0x6A, 0x61, 0x20, 0x28, 0x4C, 0x52, 0x29, 
 
 /* America/Argentina/Mendoza */
@@ -1627,7 +1626,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 
 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 
 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xD9, 0x4D, 0x00, 0xAC, 0x25, 0x02, 
 0x00, 0x00, 0x00, 0x0C, 0x4D, 0x65, 0x6E, 0x64, 0x6F, 0x7A, 0x61, 0x20, 0x28, 0x4D, 0x5A, 0x29, 
 
 
@@ -1657,8 +1656,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 
 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 
 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x61, 0x6E, 0x74, 0x61, 0x20, 0x43, 0x72, 0x75, 0x7A, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x79, 0xC5, 0x00, 0xA9, 
+0xB4, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x61, 0x6E, 0x74, 0x61, 0x20, 0x43, 0x72, 0x75, 0x7A, 
 0x20, 0x28, 0x53, 0x43, 0x29, 
 
 /* America/Argentina/Salta */
@@ -1687,7 +1686,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 
 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x28, 0x53, 0x41, 0x2C, 
+0x00, 0x65, 0xE7, 0x3D, 0x00, 0xB0, 0x1C, 0xA2, 0x00, 0x00, 0x00, 0x10, 0x28, 0x53, 0x41, 0x2C, 
 0x20, 0x4C, 0x50, 0x2C, 0x20, 0x4E, 0x51, 0x2C, 0x20, 0x52, 0x4E, 0x29, 
 
 /* America/Argentina/San_Juan */
@@ -1717,13 +1716,13 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 
 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 
 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x53, 0x61, 0x6E, 0x20, 0x4A, 
+0x5A, 0xD7, 0x35, 0x00, 0xAB, 0xAF, 0xD2, 0x00, 0x00, 0x00, 0x0D, 0x53, 0x61, 0x6E, 0x20, 0x4A, 
 0x75, 0x61, 0x6E, 0x20, 0x28, 0x53, 0x4A, 0x29, 
 
 /* America/Argentina/San_Luis */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30, 
+0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30, 
 0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, 
 0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, 
 0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, 
@@ -1738,17 +1737,35 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xFD, 0xA5, 0xA0, 0x27, 0x19, 0x34, 0x40, 
 0x27, 0xCD, 0xC3, 0xB0, 0x28, 0x47, 0x1B, 0xC0, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 
 0x40, 0xBA, 0x9F, 0xB0, 0x41, 0x03, 0x30, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0x93, 0xFC, 0xA0, 
+0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xDA, 0x92, 0xC0, 0x4B, 0xA5, 0x8B, 0xB0, 0x4C, 0xBA, 0x74, 0xC0, 
+0x4D, 0x85, 0x6D, 0xB0, 0x4E, 0x9A, 0x56, 0xC0, 0x4F, 0x65, 0x4F, 0xB0, 0x50, 0x83, 0x73, 0x40, 
+0x51, 0x45, 0x31, 0xB0, 0x52, 0x63, 0x55, 0x40, 0x53, 0x25, 0x13, 0xB0, 0x54, 0x43, 0x37, 0x40, 
+0x55, 0x04, 0xF5, 0xB0, 0x56, 0x23, 0x19, 0x40, 0x56, 0xEE, 0x12, 0x30, 0x58, 0x02, 0xFB, 0x40, 
+0x58, 0xCD, 0xF4, 0x30, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xAD, 0xD6, 0x30, 0x5B, 0xCB, 0xF9, 0xC0, 
+0x5C, 0x8D, 0xB8, 0x30, 0x5D, 0xAB, 0xDB, 0xC0, 0x5E, 0x6D, 0x9A, 0x30, 0x5F, 0x8B, 0xBD, 0xC0, 
+0x60, 0x56, 0xB6, 0xB0, 0x61, 0x6B, 0x9F, 0xC0, 0x62, 0x36, 0x98, 0xB0, 0x63, 0x4B, 0x81, 0xC0, 
+0x64, 0x16, 0x7A, 0xB0, 0x65, 0x2B, 0x63, 0xC0, 0x65, 0xF6, 0x5C, 0xB0, 0x67, 0x14, 0x80, 0x40, 
+0x67, 0xD6, 0x3E, 0xB0, 0x68, 0xF4, 0x62, 0x40, 0x69, 0xB6, 0x20, 0xB0, 0x6A, 0xD4, 0x44, 0x40, 
+0x6B, 0x9F, 0x3D, 0x30, 0x6C, 0xB4, 0x26, 0x40, 0x6D, 0x7F, 0x1F, 0x30, 0x6E, 0x94, 0x08, 0x40, 
+0x6F, 0x5F, 0x01, 0x30, 0x70, 0x7D, 0x24, 0xC0, 0x71, 0x3E, 0xE3, 0x30, 0x72, 0x5D, 0x06, 0xC0, 
+0x73, 0x1E, 0xC5, 0x30, 0x74, 0x3C, 0xE8, 0xC0, 0x75, 0x07, 0xE1, 0xB0, 0x76, 0x1C, 0xCA, 0xC0, 
+0x76, 0xE7, 0xC3, 0xB0, 0x77, 0xFC, 0xAC, 0xC0, 0x78, 0xC7, 0xA5, 0xB0, 0x79, 0xDC, 0x8E, 0xC0, 
+0x7A, 0xA7, 0x87, 0xB0, 0x7B, 0xC5, 0xAB, 0x40, 0x7C, 0x87, 0x69, 0xB0, 0x7D, 0xA5, 0x8D, 0x40, 
+0x7E, 0x67, 0x4B, 0xB0, 0x7F, 0x85, 0x6F, 0x40, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 
-0x06, 0x05, 0x04, 0x06, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 
-0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 
-0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 
-0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 
-0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x0D, 0x53, 0x61, 0x6E, 0x20, 0x4C, 0x75, 0x69, 0x73, 0x20, 0x28, 0x53, 
-0x4C, 0x29, 
+0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x04, 0x06, 0x04, 0x05, 0x04, 0x03, 
+0x04, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 
+0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 
+0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 
+0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 
+0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 
+0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 
+0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 
+0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x75, 0x52, 0x00, 
+0xAE, 0x7B, 0xF8, 0x00, 0x00, 0x00, 0x0D, 0x53, 0x61, 0x6E, 0x20, 0x4C, 0x75, 0x69, 0x73, 0x20, 
+0x28, 0x53, 0x4C, 0x29, 
 
 /* America/Argentina/Tucuman */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1795,7 +1812,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 
 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 
 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x54, 0x75, 0x63, 
+0x00, 0x00, 0x62, 0xE7, 0x02, 0x00, 0xAF, 0xCE, 0x82, 0x00, 0x00, 0x00, 0x0C, 0x54, 0x75, 0x63, 
 0x75, 0x6D, 0x61, 0x6E, 0x20, 0x28, 0x54, 0x4D, 0x29, 
 
 /* America/Argentina/Ushuaia */
@@ -1824,8 +1841,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 
 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 
 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x54, 0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x64, 0x65, 0x6C, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x26, 0xFF, 0x00, 0xAB, 
+0x5B, 0x30, 0x00, 0x00, 0x00, 0x15, 0x54, 0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x64, 0x65, 0x6C, 
 0x20, 0x46, 0x75, 0x65, 0x67, 0x6F, 0x20, 0x28, 0x54, 0x46, 0x29, 
 
 /* America/Aruba */
@@ -1834,8 +1851,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x1E, 0x2F, 0x38, 
 0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xBE, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8, 
 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4E, 0x54, 0x00, 
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x67, 0x10, 0x00, 0xAA, 
+0xD8, 0xFA, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Asuncion */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1883,8 +1900,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0xFF, 0xFF, 0xC9, 0xF0, 
 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 
 0xD5, 0xD0, 0x01, 0x08, 0x41, 0x4D, 0x54, 0x00, 0x50, 0x59, 0x54, 0x00, 0x50, 0x59, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x96, 0xCA, 0x00, 0xBC, 0xB3, 
+0x4A, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Atikokan */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -1895,7 +1912,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 
 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 
 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xD3, 0xBA, 0x95, 0x00, 0x88, 0xC0, 0x76, 0x00, 0x00, 
 0x00, 0x44, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 
 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x74, 0x69, 0x6B, 0x6F, 0x6B, 
 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x61, 0x6E, 0x64, 0x20, 
@@ -1983,7 +2000,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xDB, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 
 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0xDD, 0x00, 0xD9, 0x76, 0x92, 
 0x00, 0x00, 0x00, 0x05, 0x42, 0x61, 0x68, 0x69, 0x61, 
 
 /* America/Barbados */
@@ -1995,8 +2012,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x14, 0x30, 0x3E, 0x50, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 
 0xC8, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xC8, 0x1C, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 
 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x41, 0x44, 
-0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 
+0x51, 0x70, 0x00, 0xB9, 0x92, 0x82, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Belem */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2013,7 +2030,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xD2, 
 0x8C, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 
 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x41, 0x6D, 
+0x00, 0x00, 0x00, 0x88, 0x7D, 0x68, 0x00, 0xCA, 0x27, 0x4D, 0x00, 0x00, 0x00, 0x0D, 0x41, 0x6D, 
 0x61, 0x70, 0x61, 0x2C, 0x20, 0x45, 0x20, 0x50, 0x61, 0x72, 0x61, 
 
 /* America/Belize */
@@ -2040,7 +2057,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xAD, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xB2, 0xA8, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 
 0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x44, 0x54, 0x00, 
 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0xA4, 0x08, 0x30, 0x00, 0x8C, 0xAF, 0xA0, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Blanc-Sablon */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2050,7 +2067,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x02, 0x03, 0x01, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 
 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0x41, 0x44, 0x54, 
 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xD7, 0xC8, 0xE2, 0x00, 0xBB, 0xDC, 0x72, 0x00, 0x00, 0x00, 
 0x33, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 
 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x51, 0x75, 0x65, 0x62, 0x65, 0x63, 
 0x20, 0x2D, 0x20, 0x4C, 0x6F, 0x77, 0x65, 0x72, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x53, 
@@ -2072,7 +2089,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0xFF, 0xFF, 0xC7, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 
 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xA0, 0x82, 0x00, 0xB8, 0x1F, 0x6A, 0x00, 0x00, 
 0x00, 0x07, 0x52, 0x6F, 0x72, 0x61, 0x69, 0x6D, 0x61, 
 
 /* America/Bogota */
@@ -2082,7 +2099,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x2A, 0x03, 0x73, 0x50, 0x2B, 0xBE, 0x5D, 0x40, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xBA, 0x8C, 0x00, 
 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x42, 0x4D, 0x54, 
 0x00, 0x43, 0x4F, 0x53, 0x54, 0x00, 0x43, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x90, 0x59, 0x20, 0x00, 0xA1, 0xDE, 0xCD, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Boise */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2139,7 +2156,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x14, 0x50, 0x44, 
 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53, 
 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x29, 0x4D, 0x6F, 
+0x00, 0x00, 0x00, 0xCB, 0xE0, 0xD1, 0x00, 0x61, 0xF7, 0x1A, 0x00, 0x00, 0x00, 0x29, 0x4D, 0x6F, 
 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x73, 0x6F, 
 0x75, 0x74, 0x68, 0x20, 0x49, 0x64, 0x61, 0x68, 0x6F, 0x20, 0x26, 0x20, 0x65, 0x61, 0x73, 0x74, 
 0x20, 0x4F, 0x72, 0x65, 0x67, 0x6F, 0x6E, 
@@ -2239,7 +2256,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x44, 0x54, 0x00, 0x4D, 0x44, 
 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x4D, 0x6F, 0x75, 0x6E, 
+0x00, 0xF2, 0xC9, 0xDC, 0x00, 0x72, 0x85, 0x7D, 0x00, 0x00, 0x00, 0x1C, 0x4D, 0x6F, 0x75, 0x6E, 
 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 
 0x20, 0x4E, 0x75, 0x6E, 0x61, 0x76, 0x75, 0x74, 
 
@@ -2289,7 +2306,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xCC, 0xCC, 
 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 
 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x12, 0x4D, 0x61, 0x74, 
+0x00, 0x00, 0x6B, 0x7F, 0x88, 0x00, 0xC1, 0x33, 0xA2, 0x00, 0x00, 0x00, 0x12, 0x4D, 0x61, 0x74, 
 0x6F, 0x20, 0x47, 0x72, 0x6F, 0x73, 0x73, 0x6F, 0x20, 0x64, 0x6F, 0x20, 0x53, 0x75, 0x6C, 
 
 /* America/Cancun */
@@ -2326,8 +2343,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xAE, 0xA8, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 
 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 
 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x7F, 0xED, 0x00, 
+0x90, 0x9A, 0x3A, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 
 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x51, 0x75, 0x69, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x20, 0x52, 
 0x6F, 0x6F, 
 
@@ -2337,8 +2354,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x93, 0x1E, 0x2C, 0x3C, 
 0xF6, 0x98, 0xEC, 0x48, 0x47, 0x5B, 0x92, 0x70, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC1, 0x44, 0x00, 
 0x00, 0xFF, 0xFF, 0xC0, 0xB8, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x43, 0x4D, 0x54, 
-0x00, 0x56, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x56, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x59, 0xD0, 0x00, 
+0xAF, 0x5F, 0xD5, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Catamarca */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2375,7 +2392,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x2B, 0x90, 
 0xFB, 0xC3, 0x35, 0xC0, 0x01, 0x02, 0xFF, 0xFF, 0xCE, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x46, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xDB, 0x55, 0x00, 0xC3, 0xD2, 0x35, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* America/Cayman */
@@ -2383,8 +2400,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x0F, 0xB5, 0x00, 
 0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x4B, 0x4D, 0x54, 
-0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xC7, 0x50, 0x00, 0x97, 0xA5, 
+0x9D, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Chicago */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2467,7 +2484,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 
 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 
 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x43, 0x65, 0x6E, 0x74, 0x72, 
+0xC9, 0x2F, 0xE8, 0x00, 0x8E, 0xE6, 0x08, 0x00, 0x00, 0x00, 0x0C, 0x43, 0x65, 0x6E, 0x74, 0x72, 
 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 
 /* America/Chihuahua */
@@ -2505,8 +2522,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x9C, 0x8C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 
 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 
 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0x05, 0x25, 0x00, 0x71, 
+0x0A, 0xCD, 0x00, 0x00, 0x00, 0x19, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 
 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x68, 0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 
 
 /* America/Coral_Harbour */
@@ -2576,8 +2593,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x27, 0x97, 0xE0, 0x60, 0x28, 0x6E, 0xB6, 0xD0, 0x29, 0x77, 0xC2, 0x60, 0x29, 0xC2, 0xD9, 0xD0, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB1, 0x2C, 0x00, 0x00, 0xFF, 
 0xFF, 0xB9, 0xB0, 0x01, 0x05, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x09, 0x53, 0x4A, 0x4D, 0x54, 0x00, 
-0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 
+0x7C, 0x75, 0x00, 0x92, 0x9C, 0x8D, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Cuiaba */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2624,7 +2641,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0xFF, 0xFF, 0xCB, 0x6C, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 
 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x54, 0xBD, 0x00, 0xBD, 0x56, 0x0D, 0x00, 
 0x00, 0x00, 0x0B, 0x4D, 0x61, 0x74, 0x6F, 0x20, 0x47, 0x72, 0x6F, 0x73, 0x73, 0x6F, 
 
 /* America/Curacao */
@@ -2633,8 +2650,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x1E, 0x2E, 0x20, 
 0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xBF, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8, 
 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4E, 0x54, 0x00, 
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xEB, 0x5D, 0x00, 0xA9, 
+0x5F, 0x60, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Danmarkshavn */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2654,7 +2671,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 
 0xE3, 0xE0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x47, 
 0x54, 0x00, 0x57, 0x47, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x77, 0x3A, 0x00, 0xF8, 0x35, 0xAA, 0x00, 
 0x00, 0x00, 0x21, 0x65, 0x61, 0x73, 0x74, 0x20, 0x63, 0x6F, 0x61, 0x73, 0x74, 0x2C, 0x20, 0x6E, 
 0x6F, 0x72, 0x74, 0x68, 0x20, 0x6F, 0x66, 0x20, 0x53, 0x63, 0x6F, 0x72, 0x65, 0x73, 0x62, 0x79, 
 0x73, 0x75, 0x6E, 0x64, 
@@ -2707,7 +2724,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00, 
 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 
 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x16, 0x4A, 0x00, 0x3F, 0x32, 0x62, 0x00, 
 0x00, 0x00, 0x1A, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 
 0x2D, 0x20, 0x6E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x59, 0x75, 0x6B, 0x6F, 0x6E, 
 
@@ -2736,7 +2753,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 
 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x10, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 
 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xE4, 0x86, 0x9A, 0x00, 0x5B, 0xE8, 0xA5, 0x00, 0x00, 0x00, 
 0x49, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 
 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x44, 0x61, 0x77, 0x73, 0x6F, 0x6E, 
 0x20, 0x43, 0x72, 0x65, 0x65, 0x6B, 0x20, 0x26, 0x20, 0x46, 0x6F, 0x72, 0x74, 0x20, 0x53, 0x61, 
@@ -2798,8 +2815,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB, 
 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 
 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 
-0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 
+0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xC5, 0xF7, 
+0x5C, 0x00, 0x75, 0x77, 0xF0, 0x00, 0x00, 0x00, 0x0D, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 
 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 
 /* America/Detroit */
@@ -2853,8 +2870,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 
 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 
 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x28, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xC9, 0xEB, 0xF2, 0x00, 
+0x94, 0x14, 0x87, 0x00, 0x00, 0x00, 0x28, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 
 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61, 0x6E, 0x20, 0x2D, 
 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
@@ -2863,8 +2880,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x34, 0x4C, 
 0x01, 0xFF, 0xFF, 0xC6, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xAC, 0xD0, 0x00, 0xB6, 0x30, 
+0xA0, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Edmonton */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -2921,8 +2938,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x95, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 
 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 
 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x42, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xDB, 0x0A, 0x38, 0x00, 0x66, 
+0xF2, 0x2A, 0x00, 0x00, 0x00, 0x42, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 
 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C, 0x62, 0x65, 0x72, 0x74, 0x61, 0x2C, 0x20, 0x65, 
 0x61, 0x73, 0x74, 0x20, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x43, 0x6F, 0x6C, 0x75, 
 0x6D, 0x62, 0x69, 0x61, 0x20, 0x26, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x53, 0x61, 0x73, 0x6B, 
@@ -2944,8 +2961,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0xFF, 0xFF, 0xBE, 0x80, 
 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 
 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 
-0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F, 
+0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x30, 
+0xEA, 0x00, 0xAA, 0xB1, 0xEA, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F, 
 0x6E, 0x61, 0x73, 
 
 /* America/El_Salvador */
@@ -2955,8 +2972,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x20, 0x9A, 0xDC, 0xE0, 0x21, 0x5C, 0x9B, 0x50, 0x22, 0x7A, 0xBE, 0xE0, 0x23, 0x3C, 0x7D, 0x50, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAC, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 
 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x3B, 0xD0, 0x00, 0x8B, 0x29, 
+0x00, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Ensenada */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -3033,7 +3050,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 
 0xFF, 0xDB, 0xE8, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 
 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0xD8, 0x52, 0x00, 0xD9, 0x70, 0x10, 0x00, 0x00, 0x00, 0x1E, 
 0x4E, 0x45, 0x20, 0x42, 0x72, 0x61, 0x7A, 0x69, 0x6C, 0x20, 0x28, 0x4D, 0x41, 0x2C, 0x20, 0x50, 
 0x49, 0x2C, 0x20, 0x43, 0x45, 0x2C, 0x20, 0x52, 0x4E, 0x2C, 0x20, 0x50, 0x42, 0x29, 
 
@@ -3129,7 +3146,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 
 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 
 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x47, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0xCF, 0xD3, 0x1F, 0x00, 0xBA, 0x14, 0xB8, 0x00, 0x00, 0x00, 0x47, 
 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 
 0x4E, 0x6F, 0x76, 0x61, 0x20, 0x53, 0x63, 0x6F, 0x74, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x70, 0x6C, 
 0x61, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6E, 0x6F, 
@@ -3179,8 +3196,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 
 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 
 0xE0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x47, 0x54, 0x00, 0x57, 0x47, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xEB, 0x43, 0xDD, 0x00, 0xC5, 
+0xF5, 0x15, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 
 0x69, 0x6F, 0x6E, 0x73, 
 
 /* America/Goose_Bay */
@@ -3256,7 +3273,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xC0, 0x00, 0x14, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x18, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x44, 0x54, 
 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 
 0x00, 0x41, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB5, 0x95, 0x00, 0xB7, 0xBD, 0xC2, 
 0x00, 0x00, 0x00, 0x29, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 
 0x65, 0x20, 0x2D, 0x20, 0x4C, 0x61, 0x62, 0x72, 0x61, 0x64, 0x6F, 0x72, 0x20, 0x2D, 0x20, 0x6D, 
 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
@@ -3304,23 +3321,23 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 
 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 
 0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0xAA, 0x15, 0xAA, 0x00, 0xA6, 0x86, 0x35, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Grenada */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x34, 0x64, 
 0x01, 0xFF, 0xFF, 0xC6, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xB7, 0x48, 0x00, 0xB6, 0xB9, 
+0x58, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Guadeloupe */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xD5, 0xE1, 0xB0, 
 0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x19, 0x65, 0x00, 0xB6, 0x64, 
+0xB5, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Guatemala */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -3330,16 +3347,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x27, 0xEA, 0xEE, 0xE0, 0x28, 0xC8, 0x5C, 0xD0, 0x44, 0x54, 0x52, 0x60, 0x45, 0x1F, 0x4B, 0x50, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAB, 0x24, 0x00, 0x00, 0xFF, 
 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 
-0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xA8, 
+0x65, 0x00, 0x8A, 0x1E, 0x12, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Guayaquil */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xB6, 0xA4, 0x42, 0x18, 
 0x01, 0xFF, 0xFF, 0xB6, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x51, 0x4D, 0x54, 
-0x00, 0x45, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 0x69, 0x6E, 0x6C, 0x61, 0x6E, 0x64, 
+0x00, 0x45, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x88, 0x1A, 0x00, 0x9B, 0x62, 
+0xA5, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 0x69, 0x6E, 0x6C, 0x61, 0x6E, 0x64, 
 
 /* America/Guyana */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -3349,7 +3366,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xC9, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0xCB, 0x44, 0x00, 0x04, 0xFF, 0xFF, 0xCB, 0x44, 
 0x00, 0x09, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 
 0x54, 0x00, 0x47, 0x42, 0x47, 0x54, 0x00, 0x47, 0x59, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xB4, 0x80, 0x00, 0xBA, 0x69, 0x5A, 0x00, 0x00, 0x00, 
 0x00, 
 
 /* America/Halifax */
@@ -3430,8 +3447,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xC4, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 
 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2E, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xCD, 0x75, 0xA8, 
+0x00, 0xB3, 0x71, 0x80, 0x00, 0x00, 0x00, 0x2E, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x76, 0x61, 0x20, 0x53, 0x63, 0x6F, 
 0x74, 0x69, 0x61, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x73, 
 0x29, 0x2C, 0x20, 0x50, 0x45, 0x49, 
@@ -3464,21 +3481,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3A, 0xC6, 0xB5, 0xD0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xD2, 0x50, 0x3D, 0xBB, 0x72, 0xD0, 
 0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0x96, 0x50, 0x45, 0x44, 0x35, 0x50, 
 0x45, 0xF3, 0x8C, 0xD0, 0x47, 0x24, 0x17, 0x50, 0x47, 0xDC, 0xA9, 0x50, 0x49, 0x03, 0xF9, 0x50, 
-0x49, 0xBC, 0x8B, 0x50, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0xA5, 0xA7, 0xD0, 0x4C, 0xCC, 0xF7, 0xD0, 
-0x4D, 0x85, 0x89, 0xD0, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x65, 0x6B, 0xD0, 0x50, 0x8C, 0xBB, 0xD0, 
-0x51, 0x45, 0x4D, 0xD0, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x25, 0x2F, 0xD0, 0x54, 0x4C, 0x7F, 0xD0, 
-0x55, 0x05, 0x11, 0xD0, 0x56, 0x2C, 0x61, 0xD0, 0x56, 0xEE, 0x2E, 0x50, 0x58, 0x15, 0x7E, 0x50, 
-0x58, 0xCE, 0x10, 0x50, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xAD, 0xF2, 0x50, 0x5B, 0xD5, 0x42, 0x50, 
-0x5C, 0x8D, 0xD4, 0x50, 0x5D, 0xB5, 0x24, 0x50, 0x5E, 0x6D, 0xB6, 0x50, 0x5F, 0x95, 0x06, 0x50, 
-0x60, 0x56, 0xD2, 0xD0, 0x61, 0x7E, 0x22, 0xD0, 0x62, 0x36, 0xB4, 0xD0, 0x63, 0x5E, 0x04, 0xD0, 
-0x64, 0x16, 0x96, 0xD0, 0x65, 0x3D, 0xE6, 0xD0, 0x65, 0xF6, 0x78, 0xD0, 0x67, 0x1D, 0xC8, 0xD0, 
-0x67, 0xD6, 0x5A, 0xD0, 0x68, 0xFD, 0xAA, 0xD0, 0x69, 0xB6, 0x3C, 0xD0, 0x6A, 0xDD, 0x8C, 0xD0, 
-0x6B, 0x9F, 0x59, 0x50, 0x6C, 0xC6, 0xA9, 0x50, 0x6D, 0x7F, 0x3B, 0x50, 0x6E, 0xA6, 0x8B, 0x50, 
-0x6F, 0x5F, 0x1D, 0x50, 0x70, 0x86, 0x6D, 0x50, 0x71, 0x3E, 0xFF, 0x50, 0x72, 0x66, 0x4F, 0x50, 
-0x73, 0x1E, 0xE1, 0x50, 0x74, 0x46, 0x31, 0x50, 0x75, 0x07, 0xFD, 0xD0, 0x76, 0x2F, 0x4D, 0xD0, 
-0x76, 0xE7, 0xDF, 0xD0, 0x78, 0x0F, 0x2F, 0xD0, 0x78, 0xC7, 0xC1, 0xD0, 0x79, 0xEF, 0x11, 0xD0, 
-0x7A, 0xA7, 0xA3, 0xD0, 0x7B, 0xCE, 0xF3, 0xD0, 0x7C, 0x87, 0x85, 0xD0, 0x7D, 0xAE, 0xD5, 0xD0, 
-0x7E, 0x67, 0x67, 0xD0, 0x7F, 0x8E, 0xB7, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
+0x49, 0xB3, 0x50, 0xD0, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0x9C, 0x6D, 0x50, 0x4C, 0xCC, 0xF7, 0xD0, 
+0x4D, 0x7C, 0x4F, 0x50, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x5C, 0x31, 0x50, 0x50, 0x8C, 0xBB, 0xD0, 
+0x51, 0x3C, 0x13, 0x50, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x1B, 0xF5, 0x50, 0x54, 0x4C, 0x7F, 0xD0, 
+0x54, 0xFB, 0xD7, 0x50, 0x56, 0x2C, 0x61, 0xD0, 0x56, 0xE4, 0xF3, 0xD0, 0x58, 0x15, 0x7E, 0x50, 
+0x58, 0xC4, 0xD5, 0xD0, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xA4, 0xB7, 0xD0, 0x5B, 0xD5, 0x42, 0x50, 
+0x5C, 0x84, 0x99, 0xD0, 0x5D, 0xB5, 0x24, 0x50, 0x5E, 0x64, 0x7B, 0xD0, 0x5F, 0x95, 0x06, 0x50, 
+0x60, 0x4D, 0x98, 0x50, 0x61, 0x7E, 0x22, 0xD0, 0x62, 0x2D, 0x7A, 0x50, 0x63, 0x5E, 0x04, 0xD0, 
+0x64, 0x0D, 0x5C, 0x50, 0x65, 0x3D, 0xE6, 0xD0, 0x65, 0xED, 0x3E, 0x50, 0x67, 0x1D, 0xC8, 0xD0, 
+0x67, 0xCD, 0x20, 0x50, 0x68, 0xFD, 0xAA, 0xD0, 0x69, 0xAD, 0x02, 0x50, 0x6A, 0xDD, 0x8C, 0xD0, 
+0x6B, 0x96, 0x1E, 0xD0, 0x6C, 0xC6, 0xA9, 0x50, 0x6D, 0x76, 0x00, 0xD0, 0x6E, 0xA6, 0x8B, 0x50, 
+0x6F, 0x55, 0xE2, 0xD0, 0x70, 0x86, 0x6D, 0x50, 0x71, 0x35, 0xC4, 0xD0, 0x72, 0x66, 0x4F, 0x50, 
+0x73, 0x15, 0xA6, 0xD0, 0x74, 0x46, 0x31, 0x50, 0x74, 0xFE, 0xC3, 0x50, 0x76, 0x2F, 0x4D, 0xD0, 
+0x76, 0xDE, 0xA5, 0x50, 0x78, 0x0F, 0x2F, 0xD0, 0x78, 0xBE, 0x87, 0x50, 0x79, 0xEF, 0x11, 0xD0, 
+0x7A, 0x9E, 0x69, 0x50, 0x7B, 0xCE, 0xF3, 0xD0, 0x7C, 0x7E, 0x4B, 0x50, 0x7D, 0xAE, 0xD5, 0xD0, 
+0x7E, 0x5E, 0x2D, 0x50, 0x7F, 0x8E, 0xB7, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
@@ -3491,7 +3508,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xB2, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 
 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 
 0x04, 0x48, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0xB5, 0x00, 0x96, 0x18, 0x7A, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* America/Hermosillo */
@@ -3506,7 +3523,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, 
 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 
 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x4D, 
+0x00, 0x00, 0x00, 0x00, 0xB5, 0xAE, 0x6A, 0x00, 0x6C, 0x49, 0x5A, 0x00, 0x00, 0x00, 0x1F, 0x4D, 
 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x53, 0x6F, 0x6E, 0x6F, 0x72, 0x61, 
 
@@ -3548,8 +3565,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 
 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 
 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x27, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC6, 
+0x02, 0xC1, 0x00, 0x8F, 0xAC, 0x7D, 0x00, 0x00, 0x00, 0x27, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 
 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 
 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 
 0x73, 
@@ -3609,7 +3626,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 
 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 
 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xC8, 0x57, 0x6F, 0x00, 0x90, 0x62, 0xE4, 0x00, 0x00, 0x00, 
 0x26, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 
 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x53, 0x74, 0x61, 0x72, 0x6B, 0x65, 
 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79, 
@@ -3654,7 +3671,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 
 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 
 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x28, 0x45, 0x61, 
+0x00, 0x00, 0x00, 0xC3, 0xE2, 0xB3, 0x00, 0x8F, 0xF5, 0x68, 0x00, 0x00, 0x00, 0x28, 0x45, 0x61, 
 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 
 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x43, 0x72, 0x61, 0x77, 0x66, 0x6F, 0x72, 0x64, 0x20, 
 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79, 
@@ -3703,7 +3720,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 
 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 
 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x24, 0x45, 
+0x01, 0x00, 0x00, 0x00, 0xC4, 0x10, 0x2A, 0x00, 0x8E, 0x54, 0xF5, 0x00, 0x00, 0x00, 0x24, 0x45, 
 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 0x6E, 
 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x50, 0x69, 0x6B, 0x65, 0x20, 0x43, 0x6F, 0x75, 
 0x6E, 0x74, 0x79, 
@@ -3788,7 +3805,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 
 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 
 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC3, 0x3D, 0xA9, 0x00, 0x90, 0x98, 0x2A, 
 0x00, 0x00, 0x00, 0x25, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x50, 0x65, 0x72, 
 0x72, 0x79, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79, 
@@ -3826,7 +3843,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 
 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 
 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2B, 
+0x00, 0x01, 0x00, 0x00, 0x00, 0xC4, 0x74, 0x19, 0x00, 0x91, 0x0F, 0xA2, 0x00, 0x00, 0x00, 0x2B, 
 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 
 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x53, 0x77, 0x69, 0x74, 0x7A, 0x65, 0x72, 
 0x6C, 0x61, 0x6E, 0x64, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79, 
@@ -3870,7 +3887,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 
 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 
 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC4, 0x58, 0x8A, 0x00, 0x8E, 0xB6, 0x9D, 
 0x00, 0x00, 0x00, 0x40, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x44, 0x61, 0x76, 
 0x69, 0x65, 0x73, 0x73, 0x2C, 0x20, 0x44, 0x75, 0x62, 0x6F, 0x69, 0x73, 0x2C, 0x20, 0x4B, 0x6E, 
@@ -3918,7 +3935,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 
 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC7, 0xF7, 0xF2, 0x00, 0x90, 0x5A, 0x51, 0x00, 0x00, 
 0x00, 0x27, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 
 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x50, 0x75, 0x6C, 0x61, 0x73, 
 0x6B, 0x69, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79, 
@@ -3968,7 +3985,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x09, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0D, 0xFF, 0xFF, 0xAB, 0xA0, 
 0x01, 0x11, 0x7A, 0x7A, 0x7A, 0x00, 0x50, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 
 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2A, 0x4D, 0x6F, 0x75, 
+0x00, 0x00, 0xF1, 0x9F, 0x5C, 0x00, 0x48, 0xCF, 0x52, 0x00, 0x00, 0x00, 0x2A, 0x4D, 0x6F, 0x75, 
 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 
 0x74, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x77, 0x65, 0x73, 0x74, 0x20, 0x54, 0x65, 0x72, 0x72, 
 0x69, 0x74, 0x6F, 0x72, 0x69, 0x65, 0x73, 
@@ -4020,8 +4037,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xA0, 0x00, 0x19, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x1D, 0x7A, 0x7A, 0x7A, 0x00, 0x45, 0x50, 0x54, 
 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x44, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x57, 
 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x2C, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x94, 0x15, 0x00, 0xAB, 
+0x9C, 0x4A, 0x00, 0x00, 0x00, 0x2C, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 
 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, 0x4E, 0x75, 0x6E, 0x61, 0x76, 0x75, 
 0x74, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 
 0x6E, 0x73, 
@@ -4038,7 +4055,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 
 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 
 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 
-0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
+0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xCB, 0x80, 0x00, 0x9F, 0xE9, 
 0x80, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Jujuy */
@@ -4124,7 +4141,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x1D, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, 
 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 
 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x4A, 0x72, 0x00, 0x46, 0xD4, 0xB4, 0x00, 0x00, 0x00, 0x1E, 
 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C, 
 0x61, 0x73, 0x6B, 0x61, 0x20, 0x70, 0x61, 0x6E, 0x68, 0x61, 0x6E, 0x64, 0x6C, 0x65, 
 
@@ -4191,8 +4208,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 
 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 
 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x29, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC3, 0xB3, 0x48, 0x00, 0x92, 0x1E, 
+0x08, 0x00, 0x00, 0x00, 0x29, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 
 0x65, 0x20, 0x2D, 0x20, 0x4B, 0x65, 0x6E, 0x74, 0x75, 0x63, 0x6B, 0x79, 0x20, 0x2D, 0x20, 0x4C, 
 0x6F, 0x75, 0x69, 0x73, 0x76, 0x69, 0x6C, 0x6C, 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 
 
@@ -4250,7 +4267,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x43, 
 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 
 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 0x45, 
+0x01, 0x00, 0x00, 0x00, 0xC1, 0x86, 0xDC, 0x00, 0x93, 0xC7, 0xB4, 0x00, 0x00, 0x00, 0x26, 0x45, 
 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4B, 0x65, 
 0x6E, 0x74, 0x75, 0x63, 0x6B, 0x79, 0x20, 0x2D, 0x20, 0x57, 0x61, 0x79, 0x6E, 0x65, 0x20, 0x43, 
 0x6F, 0x75, 0x6E, 0x74, 0x79, 
@@ -4319,8 +4336,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xB8, 0x1E, 0x96, 0xE4, 
 0xB8, 0xEE, 0xD5, 0xD4, 0x01, 0x02, 0xFF, 0xFF, 0xC0, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xCE, 0x2C, 
 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x43, 0x4D, 0x54, 0x00, 0x42, 0x4F, 0x53, 0x54, 
-0x00, 0x42, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x42, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xAD, 0x90, 0x00, 
+0xAB, 0x20, 0x98, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Lima */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -4332,8 +4349,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x2D, 0x25, 0x03, 0x50, 0x2D, 0x9B, 0x9C, 0x40, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB7, 0xAC, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 
 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x45, 0x53, 
-0x54, 0x00, 0x50, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x50, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x18, 0x48, 
+0x00, 0x9D, 0x3D, 0xE8, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Los_Angeles */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -4399,8 +4416,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, 
 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 
 0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x0C, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xBD, 0x49, 0xE6, 0x00, 0x5E, 0xF9, 
+0x95, 0x00, 0x00, 0x00, 0x0C, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 
 0x65, 
 
 /* America/Louisville */
@@ -4487,8 +4504,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xDE, 0x84, 0x00, 0x00, 0xFF, 
 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 
-0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x41, 0x6C, 0x61, 0x67, 0x6F, 0x61, 
+0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 
+0x9D, 0x0A, 0x00, 0xDE, 0x58, 0x92, 0x00, 0x00, 0x00, 0x10, 0x41, 0x6C, 0x61, 0x67, 0x6F, 0x61, 
 0x73, 0x2C, 0x20, 0x53, 0x65, 0x72, 0x67, 0x69, 0x70, 0x65, 
 
 /* America/Managua */
@@ -4502,7 +4519,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0xFF, 0xFF, 0xAF, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 
 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x4D, 
 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xDE, 0x58, 0x00, 0x8F, 0xDD, 0x6D, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* America/Manaus */
@@ -4520,8 +4537,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC7, 0xBC, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 
 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 
-0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F, 0x6E, 
+0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xF4, 0x75, 
+0x00, 0xB7, 0x21, 0x82, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F, 0x6E, 
 0x61, 0x73, 
 
 /* America/Marigot */
@@ -4529,8 +4546,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xD5, 0xE1, 0xB0, 
 0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xE5, 0x8A, 0x00, 0xB2, 0xA7, 
+0xAD, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Martinique */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -4539,7 +4556,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x13, 0x4D, 0x6E, 0x40, 0x14, 0x34, 0x16, 0xB0, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC6, 0xBC, 0x00, 
 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x05, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x09, 0x46, 0x46, 0x4D, 
 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x9F, 0x9B, 0x60, 0x00, 0xB5, 0xB4, 0xED, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Mazatlan */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -4577,8 +4594,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 
 0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 
 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x28, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xC1, 0x42, 0x00, 0x71, 0x8D, 
+0x02, 0x00, 0x00, 0x00, 0x28, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 
 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x53, 0x20, 0x42, 0x61, 0x6A, 0x61, 0x2C, 0x20, 0x4E, 0x61, 0x79, 
 0x61, 0x72, 0x69, 0x74, 0x2C, 0x20, 0x53, 0x69, 0x6E, 0x61, 0x6C, 0x6F, 0x61, 
 
@@ -4663,8 +4680,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 
 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 
 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 
-0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x47, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 
+0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xCE, 
+0x28, 0x79, 0x00, 0x8E, 0xD8, 0x08, 0x00, 0x00, 0x00, 0x47, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 
 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61, 
 0x6E, 0x20, 0x2D, 0x20, 0x44, 0x69, 0x63, 0x6B, 0x69, 0x6E, 0x73, 0x6F, 0x6E, 0x2C, 0x20, 0x47, 
 0x6F, 0x67, 0x65, 0x62, 0x69, 0x63, 0x2C, 0x20, 0x49, 0x72, 0x6F, 0x6E, 0x20, 0x26, 0x20, 0x4D, 
@@ -4705,7 +4722,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xAB, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 
 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 
 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x43, 0x65, 0x6E, 0x74, 0x72, 
+0xA9, 0x52, 0x5A, 0x00, 0x8B, 0xCB, 0xC2, 0x00, 0x00, 0x00, 0x20, 0x43, 0x65, 0x6E, 0x74, 0x72, 
 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x61, 0x6D, 0x70, 0x65, 0x63, 
 0x68, 0x65, 0x2C, 0x20, 0x59, 0x75, 0x63, 0x61, 0x74, 0x61, 0x6E, 
 
@@ -4747,7 +4764,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 
 0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 
 0x43, 0x44, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x43, 0x65, 
+0x00, 0x00, 0x00, 0xA6, 0xEE, 0x60, 0x00, 0x7B, 0xD3, 0x38, 0x00, 0x00, 0x00, 0x1D, 0x43, 0x65, 
 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 
 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
@@ -4790,7 +4807,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xCB, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 
 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 
 0x41, 0x53, 0x54, 0x00, 0x50, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x1F, 0x28, 0x00, 0xBD, 0xB7, 0xB5, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* America/Moncton */
@@ -4864,8 +4881,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 
 0xC7, 0xC0, 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 
 0x45, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 
-0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 
+0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xCF, 
+0xAC, 0x10, 0x00, 0xB2, 0x32, 0x7D, 0x00, 0x00, 0x00, 0x1D, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 
 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x65, 0x77, 0x20, 0x42, 0x72, 
 0x75, 0x6E, 0x73, 0x77, 0x69, 0x63, 0x6B, 
 
@@ -4902,7 +4919,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 
 0xFF, 0xA1, 0xF4, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 
 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x38, 0x43, 
+0x00, 0x00, 0x00, 0x00, 0xB0, 0x7E, 0x4A, 0x00, 0x7A, 0x8D, 0xB2, 0x00, 0x00, 0x00, 0x38, 0x43, 
 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x6F, 
 0x61, 0x68, 0x75, 0x69, 0x6C, 0x61, 0x2C, 0x20, 0x44, 0x75, 0x72, 0x61, 0x6E, 0x67, 0x6F, 0x2C, 
 0x20, 0x4E, 0x75, 0x65, 0x76, 0x6F, 0x20, 0x4C, 0x65, 0x6F, 0x6E, 0x2C, 0x20, 0x54, 0x61, 0x6D, 
@@ -4957,7 +4974,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xC8, 0x00, 0x0A, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0A, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x0E, 0xFF, 
 0xFF, 0xDC, 0xD8, 0x01, 0x04, 0x4D, 0x4D, 0x54, 0x00, 0x55, 0x59, 0x48, 0x53, 0x54, 0x00, 0x55, 
 0x59, 0x54, 0x00, 0x55, 0x59, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0xCC, 0x0D, 0x00, 0xBD, 0x7D, 0x1D, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* America/Montreal */
@@ -5039,7 +5056,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 
 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 
 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0xCE, 0xC8, 0x32, 0x00, 0xA4, 0x22, 0x3A, 0x00, 0x00, 0x00, 0x26, 
 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x51, 
 0x75, 0x65, 0x62, 0x65, 0x63, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 
 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
@@ -5049,8 +5066,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x35, 0x10, 
 0x01, 0xFF, 0xFF, 0xC5, 0xAC, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xD6, 0x32, 0x00, 0xB4, 0x62, 
+0x62, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Nassau */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -5104,8 +5121,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB7, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 
 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x9A, 0x6D, 0x00, 0x9D, 0xB3, 
+0x18, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/New_York */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -5187,7 +5204,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 
 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45, 
 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x45, 
+0x00, 0x00, 0x01, 0x00, 0xC7, 0x74, 0x38, 0x00, 0xA1, 0xC0, 0xBE, 0x00, 0x00, 0x00, 0x0C, 0x45, 
 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 
 /* America/Nipigon */
@@ -5238,8 +5255,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 
 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x4B, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xD4, 0x1F, 0x62, 0x00, 0x8C, 
+0xC9, 0xAA, 0x00, 0x00, 0x00, 0x4B, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 
 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x26, 0x20, 0x51, 
 0x75, 0x65, 0x62, 0x65, 0x63, 0x20, 0x2D, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x73, 0x20, 0x74, 
 0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x6F, 0x62, 0x73, 0x65, 
@@ -5300,8 +5317,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x18, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x1D, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 
 0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x41, 
 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x19, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xBF, 0xFF, 0x00, 0x17, 0x82, 
+0x1E, 0x00, 0x00, 0x00, 0x19, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 
 
 /* America/Noronha */
@@ -5322,7 +5339,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 
 0xFF, 0xE1, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 
 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4E, 0x53, 0x54, 0x00, 0x46, 0x4E, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x0C, 0x68, 0x00, 0xE2, 0x77, 0x42, 0x00, 0x00, 0x00, 0x10, 
 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x69, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 
@@ -5380,8 +5397,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 
 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 
 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD1, 0x39, 
+0x16, 0x00, 0x79, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x2B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x44, 0x61, 
 0x6B, 0x6F, 0x74, 0x61, 0x20, 0x2D, 0x20, 0x4F, 0x6C, 0x69, 0x76, 0x65, 0x72, 0x20, 0x43, 0x6F, 
 0x75, 0x6E, 0x74, 0x79, 
@@ -5440,8 +5457,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 
 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 
 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x40, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD0, 0xCF, 
+0x14, 0x00, 0x79, 0x2B, 0xDB, 0x00, 0x00, 0x00, 0x40, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x44, 0x61, 
 0x6B, 0x6F, 0x74, 0x61, 0x20, 0x2D, 0x20, 0x4D, 0x6F, 0x72, 0x74, 0x6F, 0x6E, 0x20, 0x43, 0x6F, 
 0x75, 0x6E, 0x74, 0x79, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x4D, 0x61, 0x6E, 
@@ -5452,8 +5469,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x8B, 0xF4, 0x61, 0xE8, 
 0x01, 0xFF, 0xFF, 0xB5, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x43, 0x4D, 0x54, 
-0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x02, 0xDA, 0x00, 0x9A, 0xED, 
+0x75, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Pangnirtung */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -5504,7 +5521,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x44, 0x54, 0x00, 0x41, 
 0x44, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 
 0x44, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x3D, 0x95, 0x00, 0xB0, 0x98, 0x55, 0x00, 
 0x00, 0x00, 0x23, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 
 0x2D, 0x20, 0x50, 0x61, 0x6E, 0x67, 0x6E, 0x69, 0x72, 0x74, 0x75, 0x6E, 0x67, 0x2C, 0x20, 0x4E, 
 0x75, 0x6E, 0x61, 0x76, 0x75, 0x74, 
@@ -5518,7 +5535,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0xFF, 0xFF, 0xCC, 0x4C, 0x00, 0x04, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x08, 0xFF, 0xFF, 0xCE, 
 0xC8, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x4D, 0x54, 
 0x00, 0x4E, 0x45, 0x47, 0x54, 0x00, 0x53, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x3A, 0xE5, 0x00, 0xBE, 0xFD, 0x3A, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* America/Phoenix */
@@ -5530,7 +5547,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFB, 0xE8, 0x58, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0xFF, 0xFF, 
 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 
 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x4D, 0x6F, 
+0x00, 0x00, 0x00, 0xBC, 0x5E, 0x01, 0x00, 0x67, 0xDF, 0x25, 0x00, 0x00, 0x00, 0x20, 0x4D, 0x6F, 
 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 
 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x72, 0x69, 0x7A, 0x6F, 0x6E, 0x61, 
 
@@ -5552,7 +5569,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 
 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x50, 0x50, 0x4D, 0x54, 0x00, 0x45, 0x44, 
 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0xA5, 0x9B, 0xD5, 0x00, 0xA5, 0x4D, 0xB5, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Porto_Acre */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -5577,8 +5594,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x37, 0x33, 0xAC, 
 0x01, 0xFF, 0xFF, 0xC6, 0x54, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x94, 0x68, 0x00, 0xB6, 0x5E, 
+0x32, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Porto_Velho */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -5595,7 +5612,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC4, 
 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 
 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x52, 0x6F, 
+0x00, 0x00, 0x00, 0x7E, 0x4A, 0xBA, 0x00, 0xB3, 0xE6, 0xB0, 0x00, 0x00, 0x00, 0x08, 0x52, 0x6F, 
 0x6E, 0x64, 0x6F, 0x6E, 0x69, 0x61, 
 
 /* America/Puerto_Rico */
@@ -5605,7 +5622,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 
 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0x41, 0x53, 0x54, 
 0x00, 0x41, 0x50, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0xA5, 0x82, 0x71, 0x00, 0xAE, 0x1C, 0xB3, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Rainy_River */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -5655,8 +5672,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 
 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 
 0x01, 0x0C, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x32, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xD3, 0xAA, 0x32, 0x00, 0x84, 
+0x17, 0x1A, 0x00, 0x00, 0x00, 0x32, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 
 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x52, 0x61, 0x69, 0x6E, 0x79, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72, 
 0x20, 0x26, 0x20, 0x46, 0x6F, 0x72, 0x74, 0x20, 0x46, 0x72, 0x61, 0x6E, 0x63, 0x65, 0x73, 0x2C, 
 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 
@@ -5705,8 +5722,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 
 0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x11, 0x7A, 0x7A, 0x7A, 
 0x00, 0x43, 0x44, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x45, 0x53, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x2E, 0x02, 
+0x00, 0x86, 0x67, 0x71, 0x00, 0x00, 0x00, 0x1E, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 
 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x4E, 
 0x75, 0x6E, 0x61, 0x76, 0x75, 0x74, 
 
@@ -5728,7 +5745,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 
 0xFF, 0xDF, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 
 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x32, 0xC8, 0x00, 0xE0, 0x26, 0xD0, 0x00, 0x00, 0x00, 0x0A, 
 0x50, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x62, 0x75, 0x63, 0x6F, 
 
 /* America/Regina */
@@ -5755,8 +5772,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 
 0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, 
 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x35, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xD6, 0x3B, 
+0xC0, 0x00, 0x74, 0xF5, 0x68, 0x00, 0x00, 0x00, 0x35, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 
 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 
 0x20, 0x53, 0x61, 0x73, 0x6B, 0x61, 0x74, 0x63, 0x68, 0x65, 0x77, 0x61, 0x6E, 0x20, 0x2D, 0x20, 
 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
@@ -5806,7 +5823,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x11, 0xFF, 0xFF, 0xB9, 
 0xB0, 0x00, 0x0D, 0x7A, 0x7A, 0x7A, 0x00, 0x43, 0x44, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 
 0x43, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x29, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x4E, 0x33, 0x00, 0x84, 0x7D, 0xA4, 0x00, 0x00, 0x00, 0x29, 
 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x65, 
 0x2C, 0x20, 0x4E, 0x75, 0x6E, 0x61, 0x76, 0x75, 0x74, 
@@ -5827,7 +5844,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 
 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 
 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x04, 0x41, 
+0x00, 0x00, 0x00, 0x00, 0x7D, 0x12, 0x3A, 0x00, 0xAD, 0xA5, 0x20, 0x00, 0x00, 0x00, 0x04, 0x41, 
 0x63, 0x72, 0x65, 
 
 /* America/Rosario */
@@ -5893,7 +5910,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0xFF, 0xFF, 0xCC, 0xB8, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 
 0xC7, 0xC0, 0x00, 0x09, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 
 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x57, 
+0x00, 0x00, 0x00, 0x00, 0x86, 0xF0, 0x45, 0x00, 0xC1, 0x95, 0x4A, 0x00, 0x00, 0x00, 0x06, 0x57, 
 0x20, 0x50, 0x61, 0x72, 0x61, 
 
 /* America/Santiago */
@@ -5954,7 +5971,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 
 0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 
+0x57, 0xA9, 0x68, 0x00, 0xA8, 0xDD, 0x2A, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 
 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* America/Santo_Domingo */
@@ -5969,8 +5986,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 
 0xC0, 0xB8, 0x01, 0x0D, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0x53, 0x44, 0x4D, 0x54, 0x00, 0x45, 
 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x48, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x81, 0xCA, 0x00, 0xAA, 
+0xBE, 0xF0, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Sao_Paulo */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -6018,7 +6035,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xD4, 0x4C, 
 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 
 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x32, 0x53, 0x20, 0x26, 
+0x00, 0x00, 0x67, 0x0C, 0x35, 0x00, 0xCD, 0x68, 0xA2, 0x00, 0x00, 0x00, 0x32, 0x53, 0x20, 0x26, 
 0x20, 0x53, 0x45, 0x20, 0x42, 0x72, 0x61, 0x7A, 0x69, 0x6C, 0x20, 0x28, 0x47, 0x4F, 0x2C, 0x20, 
 0x44, 0x46, 0x2C, 0x20, 0x4D, 0x47, 0x2C, 0x20, 0x45, 0x53, 0x2C, 0x20, 0x52, 0x4A, 0x2C, 0x20, 
 0x53, 0x50, 0x2C, 0x20, 0x50, 0x52, 0x2C, 0x20, 0x53, 0x43, 0x2C, 0x20, 0x52, 0x53, 0x29, 
@@ -6068,7 +6085,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xF0, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x4C, 
 0x4D, 0x54, 0x00, 0x43, 0x47, 0x54, 0x00, 0x43, 0x47, 0x53, 0x54, 0x00, 0x45, 0x47, 0x54, 0x00, 
 0x45, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x53, 
+0x01, 0x01, 0x00, 0x00, 0xF4, 0xE0, 0xCD, 0x00, 0xF4, 0x16, 0xFA, 0x00, 0x00, 0x00, 0x1F, 0x53, 
 0x63, 0x6F, 0x72, 0x65, 0x73, 0x62, 0x79, 0x73, 0x75, 0x6E, 0x64, 0x20, 0x2F, 0x20, 0x49, 0x74, 
 0x74, 0x6F, 0x71, 0x71, 0x6F, 0x72, 0x74, 0x6F, 0x6F, 0x72, 0x6D, 0x69, 0x69, 0x74, 
 
@@ -6127,8 +6144,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB, 
 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 
 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 
-0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 
+0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xC1, 0x75, 
+0x9B, 0x00, 0x6E, 0xE9, 0x1E, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 
 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x61, 0x76, 0x61, 0x6A, 0x6F, 
 
 /* America/St_Barthelemy */
@@ -6136,8 +6153,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xD5, 0xE1, 0xB0, 
 0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x9D, 0xED, 0x00, 0xB5, 0x59, 
+0xC8, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/St_Johns */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -6222,7 +6239,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x10, 0x4E, 0x44, 0x54, 0x00, 
 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 0x44, 0x44, 0x54, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x28, 0x4E, 0x65, 0x77, 0x66, 0x6F, 
+0xD1, 0xE8, 0xFA, 0x00, 0xC4, 0x67, 0xF2, 0x00, 0x00, 0x00, 0x28, 0x4E, 0x65, 0x77, 0x66, 0x6F, 
 0x75, 0x6E, 0x64, 0x6C, 0x61, 0x6E, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2C, 0x20, 0x69, 0x6E, 
 0x63, 0x6C, 0x75, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x53, 0x45, 0x20, 0x4C, 0x61, 0x62, 0x72, 0x61, 
 0x64, 0x6F, 0x72, 
@@ -6232,32 +6249,32 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x37, 0x34, 0xCC, 
 0x01, 0xFF, 0xFF, 0xC5, 0x34, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xBA, 0x10, 0x00, 0xB5, 0x25, 
+0xB2, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/St_Lucia */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0xC7, 0xB0, 
 0x01, 0xFF, 0xFF, 0xC6, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x43, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xB7, 0x82, 0x00, 0xB5, 0x94, 
+0x60, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/St_Thomas */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x37, 0x60, 
 0x01, 0xFF, 0xFF, 0xC3, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x54, 0x38, 0x00, 0xB2, 0x6D, 
+0x15, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/St_Vincent */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0xC7, 0xE8, 
 0x01, 0xFF, 0xFF, 0xC6, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4B, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x64, 0xF8, 0x00, 0xB5, 0xEF, 
+0x85, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Swift_Current */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -6274,7 +6291,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 
 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 
 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xD6, 0x0E, 0x2D, 0x00, 0x70, 0xA9, 0x25, 0x00, 
 0x00, 0x00, 0x2E, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 
 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x53, 0x61, 0x73, 0x6B, 0x61, 
 0x74, 0x63, 0x68, 0x65, 0x77, 0x61, 0x6E, 0x20, 0x2D, 0x20, 0x6D, 0x69, 0x64, 0x77, 0x65, 0x73, 
@@ -6288,7 +6305,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x44, 0x5D, 0x8C, 0xE0, 0x44, 0xD6, 0xC8, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 
 0xFF, 0xAE, 0x3C, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 
 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x9E, 0xD8, 0x10, 0x00, 0x8E, 0x3C, 0xC2, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Thule */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -6325,8 +6342,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xBF, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 
 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x44, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x54, 0x68, 0x75, 0x6C, 0x65, 0x20, 0x2F, 0x20, 0x50, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x29, 0x1A, 0x00, 
+0xAC, 0x17, 0xFD, 0x00, 0x00, 0x00, 0x10, 0x54, 0x68, 0x75, 0x6C, 0x65, 0x20, 0x2F, 0x20, 0x50, 
 0x69, 0x74, 0x75, 0x66, 0x66, 0x69, 0x6B, 
 
 /* America/Thunder_Bay */
@@ -6379,8 +6396,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xAB, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 
 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0x43, 0x53, 0x54, 0x00, 
 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x23, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xD3, 0x27, 0xFD, 0x00, 0x8B, 
+0x3C, 0x88, 0x00, 0x00, 0x00, 0x23, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 
 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x54, 0x68, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x20, 0x42, 0x61, 0x79, 
 0x2C, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 
 
@@ -6438,8 +6455,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 
 0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 
 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xBA, 0xF8, 
+0x95, 0x00, 0x60, 0x27, 0xE2, 0x00, 0x00, 0x00, 0x0C, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 
 
 /* America/Toronto */
@@ -6521,7 +6538,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 
 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 
 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x27, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0xCB, 0xEF, 0x08, 0x00, 0x9A, 0xB2, 0xDD, 0x00, 0x00, 0x00, 0x27, 
 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4F, 
 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 
 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
@@ -6531,8 +6548,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x37, 0x14, 
 0x01, 0xFF, 0xFF, 0xC3, 0x6C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x7B, 0x48, 0x00, 0xB1, 0xF1, 
+0x62, 0x00, 0x00, 0x00, 0x00, 
 
 /* America/Vancouver */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -6599,8 +6616,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 
 0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 
 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 
-0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x24, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 
+0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xD4, 0x81, 
+0x0A, 0x00, 0x57, 0x27, 0x32, 0x00, 0x00, 0x00, 0x24, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 
 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x42, 0x72, 0x69, 
 0x74, 0x69, 0x73, 0x68, 0x20, 0x43, 0x6F, 0x6C, 0x75, 0x6D, 0x62, 0x69, 0x61, 
 
@@ -6660,7 +6677,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00, 
 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, 
 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xF9, 0xB2, 0x00, 0x44, 0xBD, 0xA8, 0x00, 
 0x00, 0x00, 0x1A, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 
 0x2D, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x59, 0x75, 0x6B, 0x6F, 0x6E, 
 
@@ -6729,8 +6746,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 
 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 
 0x00, 0x04, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD5, 
+0x71, 0xED, 0x00, 0x7E, 0xE0, 0x78, 0x00, 0x00, 0x00, 0x26, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 
 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 
 0x61, 0x20, 0x26, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 
 
@@ -6787,8 +6804,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x8F, 0x80, 0x01, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, 
 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x15, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 
 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x23, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 
+0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x30, 0xC6, 
+0x00, 0x3F, 0xAB, 0xB2, 0x00, 0x00, 0x00, 0x23, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 
 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x70, 0x61, 0x6E, 
 0x68, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x20, 0x6E, 0x65, 0x63, 0x6B, 
 
@@ -6838,7 +6855,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 
 0x01, 0x15, 0x7A, 0x7A, 0x7A, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53, 
 0x54, 0x00, 0x4D, 0x44, 0x44, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x9E, 0xC7, 0x00, 0x65, 0x3D, 0xF7, 0x00, 
 0x00, 0x00, 0x2D, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 
 0x20, 0x2D, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 
 0x77, 0x65, 0x73, 0x74, 0x20, 0x54, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6F, 0x72, 0x69, 0x65, 0x73, 
@@ -6849,8 +6866,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xFE, 0x1E, 0xCC, 0x80, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 
-0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x1F, 0x43, 0x61, 0x73, 0x65, 0x79, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 
+0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x0D, 0xAD, 0x01, 0xBB, 0x4B, 
+0x12, 0x00, 0x00, 0x00, 0x1F, 0x43, 0x61, 0x73, 0x65, 0x79, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 
 0x6F, 0x6E, 0x2C, 0x20, 0x42, 0x61, 0x69, 0x6C, 0x65, 0x79, 0x20, 0x50, 0x65, 0x6E, 0x69, 0x6E, 
 0x73, 0x75, 0x6C, 0x61, 
 
@@ -6860,7 +6877,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE7, 0x9C, 0x40, 0x00, 
 0xF6, 0x47, 0xDF, 0x10, 0xFE, 0x47, 0xAB, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 0x00, 0x44, 0x41, 0x56, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x75, 0x9D, 0x01, 0x89, 0xA0, 0x3A, 0x00, 0x00, 0x00, 0x1D, 
 0x44, 0x61, 0x76, 0x69, 0x73, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x56, 
 0x65, 0x73, 0x74, 0x66, 0x6F, 0x6C, 0x64, 0x20, 0x48, 0x69, 0x6C, 0x6C, 0x73, 
 
@@ -6871,7 +6888,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xDE, 0x34, 0x60, 0x60, 0xE7, 0x3C, 0x02, 0x80, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x08, 0x7A, 0x7A, 0x7A, 
 0x00, 0x50, 0x4D, 0x54, 0x00, 0x44, 0x44, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 0x44, 0x75, 0x6D, 0x6F, 
+0x00, 0x25, 0xA3, 0x6A, 0x01, 0xE8, 0x4E, 0x82, 0x00, 0x00, 0x00, 0x26, 0x44, 0x75, 0x6D, 0x6F, 
 0x6E, 0x74, 0x2D, 0x64, 0x27, 0x55, 0x72, 0x76, 0x69, 0x6C, 0x6C, 0x65, 0x20, 0x53, 0x74, 0x61, 
 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x54, 0x65, 0x72, 0x72, 0x65, 0x20, 0x41, 0x64, 0x65, 0x6C, 
 0x69, 0x65, 
@@ -6881,8 +6898,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE2, 0x20, 0x32, 0x80, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 
-0x00, 0x4D, 0x41, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 0x4D, 0x61, 0x77, 0x73, 0x6F, 0x6E, 0x20, 0x53, 0x74, 0x61, 
+0x00, 0x4D, 0x41, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x02, 0xBF, 0x01, 0x72, 
+0x9C, 0x4D, 0x00, 0x00, 0x00, 0x19, 0x4D, 0x61, 0x77, 0x73, 0x6F, 0x6E, 0x20, 0x53, 0x74, 0x61, 
 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x48, 0x6F, 0x6C, 0x6D, 0x65, 0x20, 0x42, 0x61, 0x79, 
 
 /* Antarctica/McMurdo */
@@ -6931,8 +6948,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x00, 0x00, 
 0xA8, 0xC0, 0x00, 0x09, 0x7A, 0x7A, 0x7A, 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x4E, 0x5A, 0x53, 
-0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x4D, 0x63, 0x4D, 0x75, 0x72, 0x64, 0x6F, 0x20, 0x53, 0x74, 
+0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x1B, 0xA5, 0x02, 0x10, 
+0xDE, 0xA0, 0x00, 0x00, 0x00, 0x1C, 0x4D, 0x63, 0x4D, 0x75, 0x72, 0x64, 0x6F, 0x20, 0x53, 0x74, 
 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x52, 0x6F, 0x73, 0x73, 0x20, 0x49, 0x73, 0x6C, 0x61, 
 0x6E, 0x64, 
 
@@ -6984,7 +7001,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x0D, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0x7A, 0x7A, 0x7A, 
 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x43, 
 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x50, 
+0x01, 0x01, 0x00, 0x00, 0x28, 0xE4, 0xBF, 0x00, 0xB1, 0x27, 0x90, 0x00, 0x00, 0x00, 0x1D, 0x50, 
 0x61, 0x6C, 0x6D, 0x65, 0x72, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x41, 
 0x6E, 0x76, 0x65, 0x72, 0x73, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
 
@@ -6993,8 +7010,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x0D, 0x02, 0x2D, 0x00, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 
-0x00, 0x52, 0x4F, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x52, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x61, 0x20, 0x53, 0x74, 
+0x00, 0x52, 0x4F, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0xF5, 0xBA, 0x00, 0xAB, 
+0x1A, 0x15, 0x00, 0x00, 0x00, 0x20, 0x52, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x61, 0x20, 0x53, 0x74, 
 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x41, 0x64, 0x65, 0x6C, 0x61, 0x69, 0x64, 0x65, 0x20, 
 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
 
@@ -7044,7 +7061,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x00, 0x00, 
 0xA8, 0xC0, 0x00, 0x09, 0x7A, 0x7A, 0x7A, 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x4E, 0x5A, 0x53, 
-0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
+0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 
 0xA8, 0x80, 0x00, 0x00, 0x00, 0x22, 0x41, 0x6D, 0x75, 0x6E, 0x64, 0x73, 0x65, 0x6E, 0x2D, 0x53, 
 0x63, 0x6F, 0x74, 0x74, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x53, 0x6F, 
 0x75, 0x74, 0x68, 0x20, 0x50, 0x6F, 0x6C, 0x65, 
@@ -7054,8 +7071,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE7, 0xB1, 0x58, 0x00, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 
-0x00, 0x53, 0x59, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x18, 0x53, 0x79, 0x6F, 0x77, 0x61, 0x20, 0x53, 0x74, 0x61, 0x74, 
+0x00, 0x53, 0x59, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0D, 0x83, 0x01, 0x4F, 
+0x11, 0x58, 0x00, 0x00, 0x00, 0x18, 0x53, 0x79, 0x6F, 0x77, 0x61, 0x20, 0x53, 0x74, 0x61, 0x74, 
 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x45, 0x20, 0x4F, 0x6E, 0x67, 0x75, 0x6C, 0x20, 0x49, 
 
 /* Antarctica/Vostok */
@@ -7063,8 +7080,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE9, 0x58, 0x89, 0x80, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 
-0x00, 0x56, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, 0x20, 0x53, 0x74, 0x61, 
+0x00, 0x56, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xEB, 0xC0, 0x01, 0xB5, 
+0xC6, 0x4F, 0x00, 0x00, 0x00, 0x1F, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, 0x20, 0x53, 0x74, 0x61, 
 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x53, 0x20, 0x4D, 0x61, 0x67, 0x6E, 0x65, 0x74, 0x69, 0x63, 
 0x20, 0x50, 0x6F, 0x6C, 0x65, 
 
@@ -7119,7 +7136,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 
 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 
 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x59, 0x00, 0x01, 0x2B, 0x12, 0x80, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* Asia/Aden */
@@ -7127,8 +7144,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x38, 0x20, 
 0x01, 0x00, 0x00, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xC8, 0xB8, 0x01, 0x57, 0xA0, 
+0xC0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Almaty */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7153,7 +7170,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 
 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4C, 
 0x4D, 0x54, 0x00, 0x41, 0x4C, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x52, 0xC8, 0x01, 0x88, 0x13, 0x18, 0x00, 0x00, 0x00, 
 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* Asia/Amman */
@@ -7170,37 +7187,37 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x2B, 0xBB, 0x65, 0xE0, 0x2C, 0xAB, 0x48, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x78, 0xB5, 0xD0, 
 0x2F, 0x84, 0x64, 0x60, 0x30, 0x58, 0xA5, 0xE0, 0x31, 0x64, 0x46, 0x60, 0x32, 0x41, 0xC2, 0x60, 
 0x33, 0x44, 0x28, 0x60, 0x34, 0x21, 0xA4, 0x60, 0x35, 0x24, 0x0A, 0x60, 0x36, 0x01, 0x86, 0x60, 
-0x37, 0x7A, 0x93, 0x60, 0x37, 0xF2, 0x8B, 0xE0, 0x38, 0xE2, 0x7C, 0xE0, 0x39, 0xD2, 0x6D, 0xE0, 
-0x3A, 0xC2, 0x5E, 0xE0, 0x3B, 0xB2, 0x4F, 0xE0, 0x3C, 0xA2, 0x40, 0xE0, 0x3D, 0x92, 0x31, 0xE0, 
-0x3E, 0x82, 0x22, 0xE0, 0x3F, 0x98, 0x4F, 0x60, 0x40, 0x62, 0x04, 0xE0, 0x41, 0x6E, 0xF6, 0xE0, 
-0x42, 0x4B, 0x21, 0x60, 0x43, 0x3C, 0x63, 0xE0, 0x44, 0x2B, 0x03, 0x60, 0x45, 0x41, 0x2F, 0xE0, 
-0x46, 0x0A, 0xE5, 0x60, 0x47, 0x21, 0x11, 0xE0, 0x47, 0xEA, 0xC7, 0x60, 0x49, 0x0A, 0x2E, 0x60, 
-0x49, 0xCA, 0xA9, 0x60, 0x4A, 0xEA, 0x10, 0x60, 0x4B, 0xAA, 0x8B, 0x60, 0x4C, 0xC9, 0xF2, 0x60, 
-0x4D, 0x93, 0xA7, 0xE0, 0x4E, 0xA9, 0xD4, 0x60, 0x4F, 0x73, 0x89, 0xE0, 0x50, 0x89, 0xB6, 0x60, 
-0x51, 0x53, 0x6B, 0xE0, 0x52, 0x69, 0x98, 0x60, 0x53, 0x33, 0x4D, 0xE0, 0x54, 0x52, 0xB4, 0xE0, 
-0x55, 0x13, 0x2F, 0xE0, 0x56, 0x32, 0x96, 0xE0, 0x56, 0xFC, 0x4C, 0x60, 0x58, 0x12, 0x78, 0xE0, 
-0x58, 0xDC, 0x2E, 0x60, 0x59, 0xF2, 0x5A, 0xE0, 0x5A, 0xBC, 0x10, 0x60, 0x5B, 0xD2, 0x3C, 0xE0, 
-0x5C, 0x9B, 0xF2, 0x60, 0x5D, 0xB2, 0x1E, 0xE0, 0x5E, 0x7B, 0xD4, 0x60, 0x5F, 0x9B, 0x3B, 0x60, 
-0x60, 0x5B, 0xB6, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x44, 0xD2, 0xE0, 0x63, 0x5A, 0xFF, 0x60, 
-0x64, 0x24, 0xB4, 0xE0, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x04, 0x96, 0xE0, 0x67, 0x1A, 0xC3, 0x60, 
-0x67, 0xE4, 0x78, 0xE0, 0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC4, 0x5A, 0xE0, 0x6A, 0xE3, 0xC1, 0xE0, 
-0x6B, 0xA4, 0x3C, 0xE0, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x8D, 0x59, 0x60, 0x6E, 0xA3, 0x85, 0xE0, 
-0x6F, 0x6D, 0x3B, 0x60, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x4D, 0x1D, 0x60, 0x72, 0x63, 0x49, 0xE0, 
-0x73, 0x2C, 0xFF, 0x60, 0x74, 0x4C, 0x66, 0x60, 0x75, 0x0C, 0xE1, 0x60, 0x76, 0x2C, 0x48, 0x60, 
-0x76, 0xF5, 0xFD, 0xE0, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD5, 0xDF, 0xE0, 0x79, 0xEC, 0x0C, 0x60, 
-0x7A, 0xB5, 0xC1, 0xE0, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x95, 0xA3, 0xE0, 0x7D, 0xB5, 0x0A, 0xE0, 
-0x7E, 0x75, 0x85, 0xE0, 0x7F, 0x94, 0xEC, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
+0x37, 0x7A, 0x93, 0x60, 0x37, 0xEA, 0xA2, 0xE0, 0x38, 0xE2, 0x7C, 0xE0, 0x39, 0xD3, 0xBF, 0x60, 
+0x3A, 0xC2, 0x5E, 0xE0, 0x3B, 0xB3, 0xA1, 0x60, 0x3C, 0xA3, 0x92, 0x60, 0x3D, 0x93, 0x83, 0x60, 
+0x3E, 0x83, 0x74, 0x60, 0x3F, 0x98, 0x4F, 0x60, 0x40, 0x63, 0x56, 0x60, 0x41, 0x6E, 0xF6, 0xE0, 
+0x42, 0x4C, 0x72, 0xE0, 0x43, 0x3C, 0x63, 0xE0, 0x44, 0x2C, 0x54, 0xE0, 0x45, 0x41, 0x2F, 0xE0, 
+0x46, 0x0C, 0x36, 0xE0, 0x47, 0x21, 0x11, 0xE0, 0x47, 0xEC, 0x18, 0xE0, 0x49, 0x0A, 0x2E, 0x60, 
+0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xEA, 0x10, 0x60, 0x4B, 0xAB, 0xDC, 0xE0, 0x4C, 0xC9, 0xF2, 0x60, 
+0x4D, 0x94, 0xF9, 0x60, 0x4E, 0xA9, 0xD4, 0x60, 0x4F, 0x74, 0xDB, 0x60, 0x50, 0x89, 0xB6, 0x60, 
+0x51, 0x54, 0xBD, 0x60, 0x52, 0x69, 0x98, 0x60, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x52, 0xB4, 0xE0, 
+0x55, 0x14, 0x81, 0x60, 0x56, 0x32, 0x96, 0xE0, 0x56, 0xFD, 0x9D, 0xE0, 0x58, 0x12, 0x78, 0xE0, 
+0x58, 0xDD, 0x7F, 0xE0, 0x59, 0xF2, 0x5A, 0xE0, 0x5A, 0xBD, 0x61, 0xE0, 0x5B, 0xD2, 0x3C, 0xE0, 
+0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB2, 0x1E, 0xE0, 0x5E, 0x7D, 0x25, 0xE0, 0x5F, 0x9B, 0x3B, 0x60, 
+0x60, 0x5D, 0x07, 0xE0, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x46, 0x24, 0x60, 0x63, 0x5A, 0xFF, 0x60, 
+0x64, 0x26, 0x06, 0x60, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x05, 0xE8, 0x60, 0x67, 0x1A, 0xC3, 0x60, 
+0x67, 0xE5, 0xCA, 0x60, 0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC5, 0xAC, 0x60, 0x6A, 0xE3, 0xC1, 0xE0, 
+0x6B, 0xA5, 0x8E, 0x60, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x8E, 0xAA, 0xE0, 0x6E, 0xA3, 0x85, 0xE0, 
+0x6F, 0x6E, 0x8C, 0xE0, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x4E, 0x6E, 0xE0, 0x72, 0x63, 0x49, 0xE0, 
+0x73, 0x2E, 0x50, 0xE0, 0x74, 0x4C, 0x66, 0x60, 0x75, 0x0E, 0x32, 0xE0, 0x76, 0x2C, 0x48, 0x60, 
+0x76, 0xF7, 0x4F, 0x60, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD7, 0x31, 0x60, 0x79, 0xEC, 0x0C, 0x60, 
+0x7A, 0xB7, 0x13, 0x60, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x96, 0xF5, 0x60, 0x7D, 0xB5, 0x0A, 0xE0, 
+0x7E, 0x76, 0xD7, 0x60, 0x7F, 0x94, 0xEC, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 
+0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 
+0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 
+0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 
+0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 
+0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x00, 
 0x00, 0x21, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 
 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 
 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x14, 0xB8, 0x01, 0x49, 0x7C, 0xF5, 0x00, 0x00, 0x00, 0x00, 
 
 
 /* Asia/Anadyr */
@@ -7248,8 +7265,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00, 
 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x41, 
 0x4E, 0x41, 0x54, 0x00, 0x41, 0x4E, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x31, 
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x21, 0x38, 
+0x02, 0x21, 0x79, 0xED, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x31, 
 0x30, 0x20, 0x2D, 0x20, 0x42, 0x65, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x53, 0x65, 0x61, 
 
 /* Asia/Aqtau */
@@ -7281,7 +7298,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x45, 0x54, 0x00, 0x53, 0x48, 0x45, 0x53, 0x54, 0x00, 0x41, 0x51, 0x54, 0x53, 0x54, 0x00, 0x41, 
 0x51, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 
 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x31, 0x41, 0x74, 
+0x00, 0x00, 0x00, 0xCD, 0x41, 0x92, 0x01, 0x5F, 0x5B, 0xEA, 0x00, 0x00, 0x00, 0x31, 0x41, 0x74, 
 0x79, 0x72, 0x61, 0x75, 0x20, 0x28, 0x41, 0x74, 0x69, 0x72, 0x61, 0x75, 0x2C, 0x20, 0x47, 0x75, 
 0x72, 0x27, 0x79, 0x65, 0x76, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6E, 0x67, 0x67, 0x68, 0x79, 0x73, 
 0x74, 0x61, 0x75, 0x20, 0x28, 0x4D, 0x61, 0x6E, 0x6B, 0x69, 0x73, 0x74, 0x61, 0x75, 0x29, 
@@ -7312,8 +7329,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x15, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x15, 0x4C, 0x4D, 0x54, 
 0x00, 0x41, 0x4B, 0x54, 0x54, 0x00, 0x41, 0x4B, 0x54, 0x53, 0x54, 0x00, 0x41, 0x51, 0x54, 0x53, 
 0x54, 0x00, 0x41, 0x51, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x41, 0x71, 0x74, 0x6F, 0x62, 0x65, 0x20, 
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x0E, 
+0x2D, 0x01, 0x69, 0xE3, 0x3A, 0x00, 0x00, 0x00, 0x0F, 0x41, 0x71, 0x74, 0x6F, 0x62, 0x65, 0x20, 
 0x28, 0x41, 0x6B, 0x74, 0x6F, 0x62, 0x65, 0x29, 
 
 /* Asia/Ashgabat */
@@ -7334,7 +7351,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53, 
 0x48, 0x54, 0x00, 0x41, 0x53, 0x48, 0x53, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0xC3, 0x3C, 0x78, 0x01, 0x6B, 0xBE, 0x7D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Ashkhabad */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7379,8 +7396,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x29, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 
 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, 
 0x40, 0x01, 0x08, 0x42, 0x4D, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0x37, 0x98, 0x01, 0x56, 0x6E, 
+0xC2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Bahrain */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7388,8 +7405,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x9E, 0x14, 
 0x04, 0x8A, 0x92, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x2F, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 
 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x53, 0x54, 0x00, 
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x96, 0x3D, 0x01, 0x5F, 
+0xD7, 0x9D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Baku */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7437,16 +7454,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x01, 0x13, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x41, 
 0x4B, 0x54, 0x00, 0x42, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x41, 0x5A, 0x54, 0x00, 0x41, 0x5A, 0x53, 
 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xC6, 0xF2, 0xFD, 
+0x01, 0x5E, 0xB9, 0x28, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Bangkok */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA2, 0x6A, 0x67, 0xC4, 
 0x01, 0x00, 0x00, 0x5E, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x42, 0x4D, 0x54, 
-0x00, 0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x4F, 0x58, 0x01, 0xAC, 0x08, 
+0xD2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Beirut */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7497,7 +7514,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 
 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0xBD, 0x07, 0xED, 0x01, 0x48, 0xD3, 0xB0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Bishkek */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7526,7 +7543,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x52, 0x55, 0x54, 0x00, 0x46, 0x52, 0x55, 0x53, 0x54, 
 0x00, 0x4B, 0x47, 0x53, 0x54, 0x00, 0x4B, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 
 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0xCA, 0xCA, 0x10, 0x01, 0x84, 0x7D, 0x20, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Brunei */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7534,7 +7551,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0xAD, 0x8A, 0x02, 0x44, 
 0xBA, 0x67, 0x47, 0x88, 0x01, 0x02, 0x00, 0x00, 0x6B, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x69, 0x78, 
 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4E, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xDB, 0x55, 0x01, 0xC2, 0x01, 0xD2, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* Asia/Calcutta */
@@ -7569,8 +7586,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 
 0x00, 0x8C, 0xA0, 0x01, 0x0E, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x55, 
 0x4C, 0x41, 0x54, 0x00, 0x43, 0x48, 0x4F, 0x54, 0x00, 0x43, 0x48, 0x4F, 0x53, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x12, 0x44, 0x6F, 0x72, 0x6E, 0x6F, 0x64, 0x2C, 0x20, 0x53, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xAC, 0x4A, 0x01, 
+0xC1, 0x5F, 0x10, 0x00, 0x00, 0x00, 0x12, 0x44, 0x6F, 0x72, 0x6E, 0x6F, 0x64, 0x2C, 0x20, 0x53, 
 0x75, 0x6B, 0x68, 0x62, 0x61, 0x61, 0x74, 0x61, 0x72, 
 
 /* Asia/Chongqing */
@@ -7584,7 +7601,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 
 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4C, 0x4F, 
 0x4E, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x40, 0x63, 
+0x00, 0x00, 0x00, 0x00, 0xB6, 0x71, 0xBA, 0x01, 0xB5, 0x4A, 0x9D, 0x00, 0x00, 0x00, 0x40, 0x63, 
 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x43, 0x68, 0x69, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x53, 
 0x69, 0x63, 0x68, 0x75, 0x61, 0x6E, 0x2C, 0x20, 0x59, 0x75, 0x6E, 0x6E, 0x61, 0x6E, 0x2C, 0x20, 
 0x47, 0x75, 0x61, 0x6E, 0x67, 0x78, 0x69, 0x2C, 0x20, 0x53, 0x68, 0x61, 0x61, 0x6E, 0x78, 0x69, 
@@ -7613,18 +7630,20 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x08, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x0D, 0x00, 0x00, 0x54, 
 0x60, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x48, 0x53, 0x54, 0x00, 
 0x4C, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x93, 0xE8, 0x95, 0x01, 0x8C, 0x7F, 0xE8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Dacca */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xCA, 0xDB, 0x86, 0xB0, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1B, 0xCA, 0xDB, 0x86, 0xB0, 
 0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xDD, 0xA8, 0xD2, 0x98, 0x02, 0x4F, 0x9D, 0x20, 
-0x01, 0x02, 0x01, 0x03, 0x04, 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 
-0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x54, 
-0x60, 0x00, 0x12, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 
-0x44, 0x41, 0x43, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x4A, 0x3B, 0xD2, 0x20, 0x01, 0x02, 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 
+0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 
+0x00, 0x0D, 0x00, 0x00, 0x54, 0x60, 0x00, 0x12, 0x00, 0x00, 0x62, 0x70, 0x01, 0x16, 0x48, 0x4D, 
+0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x44, 0x41, 0x43, 0x54, 0x00, 
+0x42, 0x44, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 
 
 /* Asia/Damascus */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7653,21 +7672,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3E, 0x88, 0xBA, 0x60, 0x3F, 0x79, 0xEE, 0xD0, 0x40, 0x6B, 0x3F, 0x60, 0x41, 0x5C, 0x73, 0xD0, 
 0x42, 0x4C, 0x72, 0xE0, 0x43, 0x3D, 0xA7, 0x50, 0x44, 0x2D, 0xA6, 0x60, 0x45, 0x12, 0xFD, 0x50, 
 0x46, 0x0C, 0x36, 0xE0, 0x47, 0x2A, 0x3E, 0x50, 0x47, 0xF5, 0x53, 0x60, 0x49, 0x0B, 0x71, 0xD0, 
-0x49, 0xD5, 0x35, 0x60, 0x4A, 0xEC, 0xA5, 0x50, 0x4B, 0xB5, 0x17, 0x60, 0x4C, 0xCD, 0xD8, 0xD0, 
-0x4D, 0x94, 0xF9, 0x60, 0x4E, 0xAF, 0x0C, 0x50, 0x4F, 0x7E, 0x15, 0xE0, 0x50, 0x91, 0x91, 0x50, 
-0x51, 0x5D, 0xF7, 0xE0, 0x52, 0x72, 0xC4, 0xD0, 0x53, 0x3D, 0xD9, 0xE0, 0x54, 0x53, 0xF8, 0x50, 
-0x55, 0x1D, 0xBB, 0xE0, 0x56, 0x35, 0x2B, 0xD0, 0x56, 0xFD, 0x9D, 0xE0, 0x58, 0x17, 0xB0, 0xD0, 
-0x58, 0xE6, 0xBA, 0x60, 0x59, 0xF8, 0xE4, 0x50, 0x5A, 0xC6, 0x9C, 0x60, 0x5B, 0xDA, 0x17, 0xD0, 
-0x5C, 0xA6, 0x7E, 0x60, 0x5D, 0xBB, 0x4B, 0x50, 0x5E, 0x86, 0x60, 0x60, 0x5F, 0x9D, 0xD0, 0x50, 
-0x60, 0x66, 0x42, 0x60, 0x61, 0x7F, 0x03, 0xD0, 0x62, 0x46, 0x24, 0x60, 0x63, 0x60, 0x37, 0x50, 
-0x64, 0x2F, 0x40, 0xE0, 0x65, 0x41, 0x6A, 0xD0, 0x66, 0x0F, 0x22, 0xE0, 0x67, 0x23, 0xEF, 0xD0, 
-0x67, 0xEF, 0x04, 0xE0, 0x69, 0x05, 0x23, 0x50, 0x69, 0xCE, 0xE6, 0xE0, 0x6A, 0xE6, 0x56, 0xD0, 
-0x6B, 0xAE, 0xC8, 0xE0, 0x6C, 0xC7, 0x8A, 0x50, 0x6D, 0x97, 0xE5, 0x60, 0x6E, 0xAA, 0x0F, 0x50, 
-0x6F, 0x77, 0xC7, 0x60, 0x70, 0x8B, 0x42, 0xD0, 0x71, 0x57, 0xA9, 0x60, 0x72, 0x6C, 0x76, 0x50, 
-0x73, 0x37, 0x8B, 0x60, 0x74, 0x4D, 0xA9, 0xD0, 0x75, 0x17, 0x6D, 0x60, 0x76, 0x30, 0x2E, 0xD0, 
-0x76, 0xF7, 0x4F, 0x60, 0x78, 0x11, 0x62, 0x50, 0x78, 0xE0, 0x6B, 0xE0, 0x79, 0xF2, 0x95, 0xD0, 
-0x7A, 0xC0, 0x4D, 0xE0, 0x7B, 0xD3, 0xC9, 0x50, 0x7C, 0xA0, 0x2F, 0xE0, 0x7D, 0xB6, 0x4E, 0x50, 
-0x7E, 0x80, 0x11, 0xE0, 0x7F, 0x97, 0x81, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
+0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xEC, 0xA5, 0x50, 0x4B, 0xAB, 0xDC, 0xE0, 0x4C, 0xCD, 0xD8, 0xD0, 
+0x4D, 0x8B, 0xBE, 0xE0, 0x4E, 0xAF, 0x0C, 0x50, 0x4F, 0x74, 0xDB, 0x60, 0x50, 0x91, 0x91, 0x50, 
+0x51, 0x54, 0xBD, 0x60, 0x52, 0x72, 0xC4, 0xD0, 0x53, 0x34, 0x9F, 0x60, 0x54, 0x53, 0xF8, 0x50, 
+0x55, 0x14, 0x81, 0x60, 0x56, 0x35, 0x2B, 0xD0, 0x56, 0xF4, 0x63, 0x60, 0x58, 0x17, 0xB0, 0xD0, 
+0x58, 0xDD, 0x7F, 0xE0, 0x59, 0xF8, 0xE4, 0x50, 0x5A, 0xBD, 0x61, 0xE0, 0x5B, 0xDA, 0x17, 0xD0, 
+0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xBB, 0x4B, 0x50, 0x5E, 0x7D, 0x25, 0xE0, 0x5F, 0x9D, 0xD0, 0x50, 
+0x60, 0x5D, 0x07, 0xE0, 0x61, 0x7F, 0x03, 0xD0, 0x62, 0x3C, 0xE9, 0xE0, 0x63, 0x60, 0x37, 0x50, 
+0x64, 0x26, 0x06, 0x60, 0x65, 0x41, 0x6A, 0xD0, 0x66, 0x05, 0xE8, 0x60, 0x67, 0x23, 0xEF, 0xD0, 
+0x67, 0xE5, 0xCA, 0x60, 0x69, 0x05, 0x23, 0x50, 0x69, 0xC5, 0xAC, 0x60, 0x6A, 0xE6, 0x56, 0xD0, 
+0x6B, 0xA5, 0x8E, 0x60, 0x6C, 0xC7, 0x8A, 0x50, 0x6D, 0x8E, 0xAA, 0xE0, 0x6E, 0xAA, 0x0F, 0x50, 
+0x6F, 0x6E, 0x8C, 0xE0, 0x70, 0x8B, 0x42, 0xD0, 0x71, 0x4E, 0x6E, 0xE0, 0x72, 0x6C, 0x76, 0x50, 
+0x73, 0x2E, 0x50, 0xE0, 0x74, 0x4D, 0xA9, 0xD0, 0x75, 0x0E, 0x32, 0xE0, 0x76, 0x30, 0x2E, 0xD0, 
+0x76, 0xEE, 0x14, 0xE0, 0x78, 0x11, 0x62, 0x50, 0x78, 0xD7, 0x31, 0x60, 0x79, 0xF2, 0x95, 0xD0, 
+0x7A, 0xB7, 0x13, 0x60, 0x7B, 0xD3, 0xC9, 0x50, 0x7C, 0x96, 0xF5, 0x60, 0x7D, 0xB6, 0x4E, 0x50, 
+0x7E, 0x76, 0xD7, 0x60, 0x7F, 0x97, 0x81, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
@@ -7679,19 +7698,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 
 0x00, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 
 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0x72, 0x30, 0x01, 0x4A, 0x0C, 0x30, 0x00, 0x00, 0x00, 0x00, 
 
 
 /* Asia/Dhaka */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xCA, 0xDB, 0x86, 0xB0, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1B, 0xCA, 0xDB, 0x86, 0xB0, 
 0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xDD, 0xA8, 0xD2, 0x98, 0x02, 0x4F, 0x9D, 0x20, 
-0x01, 0x02, 0x01, 0x03, 0x04, 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 
-0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x54, 
-0x60, 0x00, 0x12, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 
-0x44, 0x41, 0x43, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x4A, 0x3B, 0xD2, 0x20, 0x01, 0x02, 0x01, 0x03, 0x04, 0x05, 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 
+0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 
+0x00, 0x0D, 0x00, 0x00, 0x54, 0x60, 0x00, 0x12, 0x00, 0x00, 0x62, 0x70, 0x01, 0x16, 0x48, 0x4D, 
+0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x44, 0x41, 0x43, 0x54, 0x00, 
+0x42, 0x44, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x84, 0x92, 0x01, 0x9C, 0x9F, 0x82, 0x00, 0x00, 0x00, 
+0x00, 
 
 /* Asia/Dili */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7701,16 +7722,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 
 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x70, 
 0x80, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4C, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x43, 
-0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xF6, 
+0x18, 0x01, 0xD2, 0x48, 0x7D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Dubai */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA1, 0xF2, 0x99, 0xA8, 
 0x01, 0x00, 0x00, 0x33, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAF, 0xEF, 0x10, 0x01, 0x67, 0x0A, 
+0x10, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Dushanbe */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7728,7 +7749,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 
 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x44, 0x55, 0x53, 0x54, 0x00, 0x44, 0x55, 0x53, 
 0x53, 0x54, 0x00, 0x54, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x33, 0xDD, 0x01, 0x7B, 0xA3, 0x80, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Asia/Gaza */
@@ -7756,21 +7777,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3D, 0xAF, 0x24, 0xD0, 0x3E, 0x9F, 0x23, 0xE0, 0x3F, 0x8F, 0x06, 0xD0, 0x40, 0x7F, 0x05, 0xE0, 
 0x41, 0x5C, 0x81, 0xE0, 0x42, 0x5E, 0xE7, 0xE0, 0x43, 0x41, 0xB7, 0xF0, 0x44, 0x2D, 0xA6, 0x60, 
 0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x46, 0xE8, 0x6F, 0x70, 0x47, 0xF1, 0x5E, 0xE0, 
-0x48, 0xB5, 0xDC, 0x70, 0x49, 0xD2, 0x92, 0x60, 0x4A, 0x95, 0xBE, 0x70, 0x4B, 0xB3, 0xC5, 0xE0, 
-0x4C, 0x75, 0xA0, 0x70, 0x4D, 0x94, 0xF9, 0x60, 0x4E, 0x55, 0x82, 0x70, 0x4F, 0x77, 0x7E, 0x60, 
-0x50, 0x3E, 0x9E, 0xF0, 0x51, 0x58, 0xB1, 0xE0, 0x52, 0x1E, 0x80, 0xF0, 0x53, 0x39, 0xE5, 0x60, 
-0x53, 0xFE, 0x62, 0xF0, 0x55, 0x1B, 0x18, 0xE0, 0x55, 0xDE, 0x44, 0xF0, 0x56, 0xFD, 0x9D, 0xE0, 
-0x57, 0xBE, 0x26, 0xF0, 0x58, 0xDE, 0xD1, 0x60, 0x59, 0xA7, 0x43, 0x70, 0x5A, 0xC0, 0x04, 0xE0, 
-0x5B, 0x87, 0x25, 0x70, 0x5C, 0xA1, 0x38, 0x60, 0x5D, 0x67, 0x07, 0x70, 0x5E, 0x83, 0xBD, 0x60, 
-0x5F, 0x46, 0xE9, 0x70, 0x60, 0x64, 0xF0, 0xE0, 0x61, 0x26, 0xCB, 0x70, 0x62, 0x46, 0x24, 0x60, 
-0x63, 0x06, 0xAD, 0x70, 0x64, 0x27, 0x57, 0xE0, 0x64, 0xEF, 0xC9, 0xF0, 0x66, 0x09, 0xDC, 0xE0, 
-0x66, 0xCF, 0xAB, 0xF0, 0x67, 0xEB, 0x10, 0x60, 0x68, 0xAF, 0x8D, 0xF0, 0x69, 0xCC, 0x43, 0xE0, 
-0x6A, 0x8F, 0x6F, 0xF0, 0x6B, 0xAD, 0x77, 0x60, 0x6C, 0x6F, 0x51, 0xF0, 0x6D, 0x8F, 0xFC, 0x60, 
-0x6E, 0x58, 0x6E, 0x70, 0x6F, 0x71, 0x2F, 0xE0, 0x70, 0x38, 0x50, 0x70, 0x71, 0x52, 0x63, 0x60, 
-0x72, 0x18, 0x32, 0x70, 0x73, 0x33, 0x96, 0xE0, 0x73, 0xF8, 0x14, 0x70, 0x75, 0x16, 0x1B, 0xE0, 
-0x75, 0xD7, 0xF6, 0x70, 0x76, 0xF7, 0x4F, 0x60, 0x77, 0xB7, 0xD8, 0x70, 0x78, 0xD8, 0x82, 0xE0, 
-0x79, 0xA0, 0xF4, 0xF0, 0x7A, 0xB9, 0xB6, 0x60, 0x7B, 0x80, 0xD6, 0xF0, 0x7C, 0x9C, 0x3B, 0x60, 
-0x7D, 0x60, 0xB8, 0xF0, 0x7E, 0x7D, 0x6E, 0xE0, 0x7F, 0x40, 0x9A, 0xF0, 0x00, 0x01, 0x00, 0x01, 
+0x48, 0xB7, 0x2D, 0xF0, 0x49, 0xCB, 0xFA, 0xE0, 0x4A, 0xBF, 0xEE, 0x70, 0x4B, 0xAB, 0xDC, 0xE0, 
+0x4C, 0x9F, 0xD0, 0x70, 0x4D, 0x8B, 0xBE, 0xE0, 0x4E, 0x7F, 0xB2, 0x70, 0x4F, 0x74, 0xDB, 0x60, 
+0x50, 0x5F, 0x94, 0x70, 0x51, 0x54, 0xBD, 0x60, 0x52, 0x48, 0xB0, 0xF0, 0x53, 0x34, 0x9F, 0x60, 
+0x54, 0x28, 0x92, 0xF0, 0x55, 0x14, 0x81, 0x60, 0x56, 0x08, 0x74, 0xF0, 0x56, 0xF4, 0x63, 0x60, 
+0x57, 0xE8, 0x56, 0xF0, 0x58, 0xDD, 0x7F, 0xE0, 0x59, 0xC8, 0x38, 0xF0, 0x5A, 0xBD, 0x61, 0xE0, 
+0x5B, 0xA8, 0x1A, 0xF0, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0x91, 0x37, 0x70, 0x5E, 0x7D, 0x25, 0xE0, 
+0x5F, 0x71, 0x19, 0x70, 0x60, 0x5D, 0x07, 0xE0, 0x61, 0x50, 0xFB, 0x70, 0x62, 0x3C, 0xE9, 0xE0, 
+0x63, 0x30, 0xDD, 0x70, 0x64, 0x26, 0x06, 0x60, 0x65, 0x10, 0xBF, 0x70, 0x66, 0x05, 0xE8, 0x60, 
+0x66, 0xF9, 0xDB, 0xF0, 0x67, 0xE5, 0xCA, 0x60, 0x68, 0xD9, 0xBD, 0xF0, 0x69, 0xC5, 0xAC, 0x60, 
+0x6A, 0xB9, 0x9F, 0xF0, 0x6B, 0xA5, 0x8E, 0x60, 0x6C, 0x99, 0x81, 0xF0, 0x6D, 0x8E, 0xAA, 0xE0, 
+0x6E, 0x79, 0x63, 0xF0, 0x6F, 0x6E, 0x8C, 0xE0, 0x70, 0x59, 0x45, 0xF0, 0x71, 0x4E, 0x6E, 0xE0, 
+0x72, 0x42, 0x62, 0x70, 0x73, 0x2E, 0x50, 0xE0, 0x74, 0x22, 0x44, 0x70, 0x75, 0x0E, 0x32, 0xE0, 
+0x76, 0x02, 0x26, 0x70, 0x76, 0xEE, 0x14, 0xE0, 0x77, 0xE2, 0x08, 0x70, 0x78, 0xD7, 0x31, 0x60, 
+0x79, 0xC1, 0xEA, 0x70, 0x7A, 0xB7, 0x13, 0x60, 0x7B, 0xA1, 0xCC, 0x70, 0x7C, 0x96, 0xF5, 0x60, 
+0x7D, 0x8A, 0xE8, 0xF0, 0x7E, 0x76, 0xD7, 0x60, 0x7F, 0x6A, 0xCA, 0xF0, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 
 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 
@@ -7783,8 +7804,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 
 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 
 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x64, 
+0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Harbin */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7798,8 +7819,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x00, 0x00, 0x76, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x77, 0x88, 0x00, 0x04, 0x00, 0x00, 0x70, 
 0x80, 0x00, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x0D, 0x4C, 
 0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x21, 0x48, 0x65, 0x69, 0x6C, 0x6F, 0x6E, 0x67, 0x6A, 0x69, 0x61, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0x23, 0x58, 0x01, 0xD3, 
+0xF6, 0x2D, 0x00, 0x00, 0x00, 0x21, 0x48, 0x65, 0x69, 0x6C, 0x6F, 0x6E, 0x67, 0x6A, 0x69, 0x61, 
 0x6E, 0x67, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x4D, 0x6F, 0x68, 0x65, 0x29, 
 0x2C, 0x20, 0x4A, 0x69, 0x6C, 0x69, 0x6E, 
 
@@ -7810,8 +7831,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02, 
 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 
 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0xBB, 0x78, 
+0x01, 0xB5, 0x6B, 0x2A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Hong_Kong */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7840,8 +7861,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 
 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4B, 0x53, 0x54, 0x00, 
-0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x54, 0xAD, 0x01, 0xC0, 
+0xD6, 0x57, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Hovd */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -7864,7 +7885,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x00, 0x00, 0x55, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 
 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4F, 
 0x56, 0x54, 0x00, 0x48, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2B, 0x42, 0x61, 0x79, 
+0x00, 0x00, 0xD2, 0x98, 0xC2, 0x01, 0x9E, 0x81, 0x47, 0x00, 0x00, 0x00, 0x2B, 0x42, 0x61, 0x79, 
 0x61, 0x6E, 0x2D, 0x4F, 0x6C, 0x67, 0x69, 0x79, 0x2C, 0x20, 0x47, 0x6F, 0x76, 0x69, 0x2D, 0x41, 
 0x6C, 0x74, 0x61, 0x69, 0x2C, 0x20, 0x48, 0x6F, 0x76, 0x64, 0x2C, 0x20, 0x55, 0x76, 0x73, 0x2C, 
 0x20, 0x5A, 0x61, 0x76, 0x6B, 0x68, 0x61, 0x6E, 
@@ -7914,7 +7935,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 
 0x00, 0x62, 0x70, 0x00, 0x04, 0x49, 0x4D, 0x54, 0x00, 0x49, 0x52, 0x4B, 0x54, 0x00, 0x49, 0x52, 
 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x14, 0xEA, 0x01, 0xB1, 0xDB, 0xB5, 0x00, 0x00, 0x00, 0x17, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x35, 0x20, 0x2D, 0x20, 0x4C, 0x61, 0x6B, 0x65, 
 0x20, 0x42, 0x61, 0x69, 0x6B, 0x61, 0x6C, 
 
@@ -7993,7 +8014,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0D, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x00, 0x00, 0x62, 
 0x70, 0x00, 0x09, 0x4A, 0x4D, 0x54, 0x00, 0x4A, 0x41, 0x56, 0x54, 0x00, 0x57, 0x49, 0x54, 0x00, 
 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x4A, 0x61, 0x76, 0x61, 
+0x00, 0x80, 0x6D, 0x9A, 0x01, 0xB5, 0x9F, 0x40, 0x00, 0x00, 0x00, 0x0E, 0x4A, 0x61, 0x76, 0x61, 
 0x20, 0x26, 0x20, 0x53, 0x75, 0x6D, 0x61, 0x74, 0x72, 0x61, 
 
 /* Asia/Jayapura */
@@ -8003,7 +8024,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xD0, 0x58, 0xB9, 0xF0, 0xF4, 0xB5, 0xA2, 0x68, 0x01, 0x02, 0x01, 0x00, 0x00, 0x83, 0xE8, 0x00, 
 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x85, 0x98, 0x00, 0x08, 0x4C, 0x4D, 0x54, 
 0x00, 0x45, 0x49, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 0x49, 0x72, 0x69, 0x61, 0x6E, 
+0x87, 0x17, 0x55, 0x01, 0xE9, 0x59, 0x70, 0x00, 0x00, 0x00, 0x19, 0x49, 0x72, 0x69, 0x61, 0x6E, 
 0x20, 0x4A, 0x61, 0x79, 0x61, 0x20, 0x26, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4D, 0x6F, 0x6C, 0x75, 
 0x63, 0x63, 0x61, 0x73, 
 
@@ -8058,14 +8079,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 
 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44, 
 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0xB9, 0xCD, 0x1A, 0x01, 0x48, 0x6B, 0x85, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Kabul */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0xD0, 0xF9, 0xD7, 0x40, 
 0x01, 0x00, 0x00, 0x38, 0x40, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x48, 0x00, 0x00, 0x41, 0x46, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xFF, 0x52, 0x01, 0x7C, 0x3F, 0xC0, 0x00, 0x00, 0x00, 
 0x00, 
 
 /* Asia/Kamchatka */
@@ -8113,22 +8134,23 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xC0, 0x00, 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 
 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x45, 0x54, 0x54, 0x00, 0x50, 0x45, 
 0x54, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x39, 0xE2, 0x02, 0x04, 0xBD, 0x28, 0x00, 0x00, 0x00, 0x15, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x39, 0x20, 0x2D, 0x20, 0x4B, 0x61, 0x6D, 0x63, 
 0x68, 0x61, 0x74, 0x6B, 0x61, 
 
 /* Asia/Karachi */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x89, 0x7E, 0xFC, 0xA4, 
+0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x89, 0x7E, 0xFC, 0xA4, 
 0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0xDD, 0xA8, 0xE0, 0xA8, 0x02, 0x4F, 0xAB, 0x30, 
 0x3C, 0xAF, 0x45, 0xEC, 0x3D, 0x9F, 0x28, 0xDC, 0x48, 0x41, 0xA0, 0x30, 0x49, 0x0B, 0x47, 0xA0, 
-0x01, 0x02, 0x01, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x3E, 0xDC, 0x00, 0x00, 0x00, 
-0x00, 0x4D, 0x58, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 
-0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0D, 0x00, 0x00, 0x46, 0x50, 0x00, 0x12, 0x4C, 0x4D, 0x54, 
-0x00, 0x49, 0x53, 0x54, 0x00, 0x4B, 0x41, 0x52, 0x54, 0x00, 0x50, 0x4B, 0x53, 0x54, 0x00, 0x50, 
-0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x49, 0xE4, 0xDD, 0x30, 0x4A, 0xEC, 0x7B, 0x20, 0x01, 0x02, 0x01, 0x03, 0x05, 0x04, 0x05, 0x04, 
+0x05, 0x04, 0x05, 0x00, 0x00, 0x3E, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x04, 0x00, 
+0x00, 0x5B, 0x68, 0x01, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 
+0x0D, 0x00, 0x00, 0x46, 0x50, 0x00, 0x12, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x4B, 
+0x41, 0x52, 0x54, 0x00, 0x50, 0x4B, 0x53, 0x54, 0x00, 0x50, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x45, 0xCA, 0x01, 0x78, 0xF7, 
+0xE8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Kashgar */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8142,7 +8164,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x58, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 
 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x41, 0x53, 0x54, 0x00, 0x43, 0x44, 
 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x77, 0x65, 0x73, 0x74, 
+0x00, 0xC5, 0x93, 0x6D, 0x01, 0x86, 0x99, 0x7D, 0x00, 0x00, 0x00, 0x15, 0x77, 0x65, 0x73, 0x74, 
 0x20, 0x54, 0x69, 0x62, 0x65, 0x74, 0x20, 0x26, 0x20, 0x58, 0x69, 0x6E, 0x6A, 0x69, 0x61, 0x6E, 
 0x67, 
 
@@ -8152,8 +8174,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x7D, 0x84, 
 0x1E, 0x18, 0x30, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x4F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, 
 0x00, 0x04, 0x00, 0x00, 0x50, 0xDC, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 
-0x4E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x4E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x9F, 0x12, 0x01, 0x94, 
+0xD7, 0x52, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Katmandu */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8171,8 +8193,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0x01, 0x02, 0x03, 0x02, 
 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, 
 0x00, 0x09, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 
-0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xB6, 
+0x55, 0x01, 0x99, 0x7E, 0xBA, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Krasnoyarsk */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8219,7 +8241,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 
 0x00, 0x54, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52, 
 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xCD, 0xC2, 0x01, 0xA0, 0x4F, 0x85, 0x00, 0x00, 0x00, 0x19, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x34, 0x20, 0x2D, 0x20, 0x59, 0x65, 0x6E, 0x69, 
 0x73, 0x65, 0x69, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72, 
 
@@ -8233,8 +8255,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x09, 0x00, 0x00, 0x67, 0x20, 0x00, 0x04, 0x00, 0x00, 0x69, 0x78, 0x00, 0x04, 0x00, 0x00, 0x7E, 
 0x90, 0x00, 0x0F, 0x00, 0x00, 0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, 
 0x54, 0x00, 0x4D, 0x41, 0x4C, 0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x4D, 0x59, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x13, 0x70, 0x65, 0x6E, 0x69, 0x6E, 0x73, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 
+0x29, 0x3A, 0x01, 0xAD, 0xD7, 0x10, 0x00, 0x00, 0x00, 0x13, 0x70, 0x65, 0x6E, 0x69, 0x6E, 0x73, 
 0x75, 0x6C, 0x61, 0x72, 0x20, 0x4D, 0x61, 0x6C, 0x61, 0x79, 0x73, 0x69, 0x61, 
 
 /* Asia/Kuching */
@@ -8251,7 +8273,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x10, 0x00, 0x00, 0x70, 0x80, 0x00, 0x14, 0x4C, 
 0x4D, 0x54, 0x00, 0x42, 0x4F, 0x52, 0x54, 0x00, 0x42, 0x4F, 0x52, 0x54, 0x53, 0x54, 0x00, 0x4A, 
 0x53, 0x54, 0x00, 0x4D, 0x59, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 
+0x00, 0x00, 0x00, 0x00, 0x8B, 0xB1, 0xB8, 0x01, 0xBB, 0x03, 0x75, 0x00, 0x00, 0x00, 0x0F, 0x53, 
 0x61, 0x62, 0x61, 0x68, 0x20, 0x26, 0x20, 0x53, 0x61, 0x72, 0x61, 0x77, 0x61, 0x6B, 
 
 /* Asia/Kuwait */
@@ -8259,8 +8281,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x35, 0x84, 
 0x01, 0x00, 0x00, 0x2C, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x16, 0x95, 0x01, 0x5B, 0xDF, 
+0xFD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Macao */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8304,7 +8326,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x6A, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 
 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4F, 0x53, 0x54, 0x00, 0x4D, 
 0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0xAB, 0x41, 0x25, 0x01, 0xBF, 0xF8, 0xFD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Magadan */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8351,7 +8373,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB0, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 
 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x47, 0x54, 0x00, 0x4D, 0x41, 
 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x13, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x38, 0x7A, 0x01, 0xF8, 0xC2, 0xC0, 0x00, 0x00, 0x00, 0x13, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x38, 0x20, 0x2D, 0x20, 0x4D, 0x61, 0x67, 0x61, 
 0x64, 0x61, 0x6E, 
 
@@ -8363,7 +8385,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 
 0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 
 0x43, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x3D, 0x65, 0x61, 0x73, 0x74, 
+0x00, 0x81, 0xE0, 0xB2, 0x01, 0xC8, 0xD9, 0x1F, 0x00, 0x00, 0x00, 0x3D, 0x65, 0x61, 0x73, 0x74, 
 0x20, 0x26, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x42, 0x6F, 0x72, 0x6E, 0x65, 0x6F, 0x2C, 
 0x20, 0x43, 0x65, 0x6C, 0x65, 0x62, 0x65, 0x73, 0x2C, 0x20, 0x42, 0x61, 0x6C, 0x69, 0x2C, 0x20, 
 0x4E, 0x75, 0x73, 0x61, 0x20, 0x54, 0x65, 0x6E, 0x67, 0x61, 0x72, 0x72, 0x61, 0x2C, 0x20, 0x77, 
@@ -8377,16 +8399,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xE2, 0xD5, 0xA2, 0xF0, 0x0F, 0x75, 0x46, 0x80, 0x10, 0x66, 0x7A, 0xF0, 0x00, 0x01, 0x02, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x05, 
 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x50, 0x48, 0x53, 0x54, 0x00, 0x50, 0x48, 0x54, 0x00, 0x4A, 
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x94, 0xDD, 0x01, 0xCB, 0x4A, 
+0x20, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Muscat */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4F, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA1, 0xF2, 0x96, 0x94, 
 0x01, 0x00, 0x00, 0x36, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x57, 0x00, 0x01, 0x6C, 0x0C, 
+0x9D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Nicosia */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8434,8 +8456,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A, 
 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 
 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xBE, 0xFD, 0x3A, 
+0x01, 0x45, 0x92, 0x5A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Novosibirsk */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8483,7 +8505,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 
 0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 
+0x00, 0x00, 0xDD, 0x4D, 0xA5, 0x01, 0x91, 0x2D, 0xD2, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 
 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x33, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x76, 0x6F, 0x73, 0x69, 0x62, 
 0x69, 0x72, 0x73, 0x6B, 
 
@@ -8532,7 +8554,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 
 0x00, 0x46, 0x50, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4F, 0x4D, 0x53, 0x54, 0x00, 0x4F, 0x4D, 
 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x18, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x40, 0xA0, 0x01, 0x82, 0xA8, 0x60, 0x00, 0x00, 0x00, 0x18, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x33, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 
 0x20, 0x53, 0x69, 0x62, 0x65, 0x72, 0x69, 0x61, 
 
@@ -8564,7 +8586,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x4D, 0x54, 0x00, 0x55, 0x52, 0x41, 0x54, 0x00, 0x55, 0x52, 0x41, 0x53, 0x54, 0x00, 0x4F, 0x52, 
 0x41, 0x53, 0x54, 0x00, 0x4F, 0x52, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 
 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x7A, 0xC2, 0x01, 0x61, 0x03, 0x18, 0x00, 0x00, 0x00, 
 0x0F, 0x57, 0x65, 0x73, 0x74, 0x20, 0x4B, 0x61, 0x7A, 0x61, 0x6B, 0x68, 0x73, 0x74, 0x61, 0x6E, 
 
 
@@ -8575,8 +8597,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02, 
 0x00, 0x00, 0x62, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 
 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xF3, 0xF8, 
+0x01, 0xB2, 0xBF, 0x92, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Pontianak */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8589,7 +8611,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x10, 0x00, 0x00, 0x62, 0x70, 0x00, 0x08, 0x4C, 0x4D, 
 0x54, 0x00, 0x50, 0x4D, 0x54, 0x00, 0x57, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x43, 0x49, 
 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x77, 0x65, 0x73, 0x74, 
+0x00, 0x89, 0x61, 0x45, 0x01, 0xB9, 0x7C, 0xD5, 0x00, 0x00, 0x00, 0x15, 0x77, 0x65, 0x73, 0x74, 
 0x20, 0x26, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x42, 0x6F, 0x72, 0x6E, 0x65, 
 0x6F, 
 
@@ -8600,7 +8622,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xF0, 0x35, 0x78, 0x80, 
 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 
 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0xC4, 0xDD, 0x22, 0x01, 0xD2, 0x89, 0x98, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Qatar */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x51, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8608,8 +8630,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x9D, 0x30, 
 0x04, 0x8A, 0x92, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 
 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x53, 0x54, 0x00, 
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAF, 0xE8, 0x8D, 0x01, 0x61, 
+0x4A, 0xB5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Qyzylorda */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8638,8 +8660,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x14, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x49, 0x5A, 0x54, 
 0x00, 0x4B, 0x49, 0x5A, 0x53, 0x54, 0x00, 0x51, 0x59, 0x5A, 0x54, 0x00, 0x51, 0x59, 0x5A, 0x53, 
 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x51, 0x79, 0x7A, 0x79, 0x6C, 0x6F, 0x72, 0x64, 0x61, 0x20, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xB0, 0x40, 0x01, 0x76, 
+0x8D, 0x6A, 0x00, 0x00, 0x00, 0x20, 0x51, 0x79, 0x7A, 0x79, 0x6C, 0x6F, 0x72, 0x64, 0x61, 0x20, 
 0x28, 0x4B, 0x79, 0x7A, 0x79, 0x6C, 0x6F, 0x72, 0x64, 0x61, 0x2C, 0x20, 0x4B, 0x7A, 0x79, 0x6C, 
 0x2D, 0x4F, 0x72, 0x64, 0x61, 0x29, 
 
@@ -8650,16 +8672,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xCB, 0xF2, 0xFC, 0x18, 0xD1, 0x9A, 0x67, 0xF0, 0x01, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x24, 0x00, 
 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 0x00, 0x5B, 
 0x68, 0x00, 0x0D, 0x52, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 
-0x4D, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x4D, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xF0, 0x3D, 
+0x01, 0xA5, 0x65, 0x9A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Riyadh */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x36, 0xB4, 
 0x01, 0x00, 0x00, 0x2B, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAE, 0xEA, 0xA5, 0x01, 0x59, 0xF1, 
+0x32, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Saigon */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8717,8 +8739,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xA8, 0xC0, 0x01, 0x0C, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x0C, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x12, 
 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x4A, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x41, 0x4B, 0x53, 
 0x54, 0x00, 0x53, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x1B, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20, 0x2D, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFE, 0x9A, 0x01, 0xEC, 0x66, 
+0xB0, 0x00, 0x00, 0x00, 0x1B, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20, 0x2D, 
 0x20, 0x53, 0x61, 0x6B, 0x68, 0x61, 0x6C, 0x69, 0x6E, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
 
 
@@ -8740,8 +8762,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x54, 0x60, 0x01, 0x18, 0x00, 0x00, 0x46, 0x50, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41, 
 0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x54, 0x41, 0x53, 0x54, 0x00, 0x55, 0x5A, 
 0x54, 0x00, 0x55, 0x5A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x77, 0x65, 0x73, 0x74, 0x20, 0x55, 0x7A, 0x62, 0x65, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC5, 0xDB, 0x0A, 0x01, 
+0x78, 0x96, 0x40, 0x00, 0x00, 0x00, 0x0F, 0x77, 0x65, 0x73, 0x74, 0x20, 0x55, 0x7A, 0x62, 0x65, 
 0x6B, 0x69, 0x73, 0x74, 0x61, 0x6E, 
 
 /* Asia/Seoul */
@@ -8754,7 +8776,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x00, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00, 
 0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 
 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x04, 0x4B, 0x53, 0x54, 0x00, 0x4B, 0x44, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xA0, 0x38, 0x01, 0xD4, 0x64, 0xDA, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Shanghai */
@@ -8768,7 +8790,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 
 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0xFC, 0xC5, 0x01, 0xCC, 0x00, 0x6A, 0x00, 0x00, 0x00, 
 0x2F, 0x65, 0x61, 0x73, 0x74, 0x20, 0x43, 0x68, 0x69, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x42, 0x65, 
 0x69, 0x6A, 0x69, 0x6E, 0x67, 0x2C, 0x20, 0x47, 0x75, 0x61, 0x6E, 0x67, 0x64, 0x6F, 0x6E, 0x67, 
 0x2C, 0x20, 0x53, 0x68, 0x61, 0x6E, 0x67, 0x68, 0x61, 0x69, 0x2C, 0x20, 0x65, 0x74, 0x63, 0x2E, 
@@ -8785,8 +8807,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0F, 0x00, 0x00, 0x69, 0x78, 0x00, 0x13, 0x00, 0x00, 
 0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, 0x54, 0x00, 0x4D, 0x41, 0x4C, 
 0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x49, 0x8D, 0x01, 
+0xB1, 0x1E, 0xE8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Taipei */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8805,8 +8827,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 
-0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x8D, 0x68, 
+0x01, 0xCC, 0x0D, 0x70, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Tashkent */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8826,7 +8848,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x54, 0x60, 0x01, 0x13, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x41, 
 0x53, 0x54, 0x00, 0x54, 0x41, 0x53, 0x53, 0x54, 0x00, 0x55, 0x5A, 0x54, 0x00, 0x55, 0x5A, 0x53, 
 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x66, 0x15, 0x01, 0x7C, 0x66, 0xD0, 0x00, 0x00, 
 0x00, 0x0F, 0x65, 0x61, 0x73, 0x74, 0x20, 0x55, 0x7A, 0x62, 0x65, 0x6B, 0x69, 0x73, 0x74, 0x61, 
 0x6E, 
 
@@ -8857,8 +8879,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x10, 0x00, 0x00, 0x46, 0x50, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x00, 0x10, 0x54, 0x42, 0x4D, 
 0x54, 0x00, 0x54, 0x42, 0x49, 0x54, 0x00, 0x54, 0x42, 0x49, 0x53, 0x54, 0x00, 0x47, 0x45, 0x54, 
 0x00, 0x47, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 
+0xFB, 0xD2, 0x01, 0x57, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Tehran */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8899,7 +8921,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x08, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 
 0x3F, 0x48, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x49, 0x52, 0x53, 0x54, 
 0x00, 0x49, 0x52, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0xBF, 0xC0, 0x8A, 0x01, 0x61, 0x23, 0xA5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Tel_Aviv */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8969,8 +8991,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xD5, 0xE6, 0x15, 0x74, 
 0x21, 0x61, 0x4D, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x54, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, 
 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 
-0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x3D, 0x6A, 0x01, 0x9B, 
+0x74, 0x07, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Tokyo */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -8980,8 +9002,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xDB, 0x07, 0x1D, 0x10, 0xDB, 0xAB, 0xDA, 0x80, 0xDC, 0xE6, 0xFF, 0x10, 0xDD, 0x8B, 0xBC, 0x80, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00, 
 0x00, 0x8C, 0xA0, 0x01, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x43, 0x4A, 0x54, 0x00, 0x4A, 
-0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xBB, 
+0xC4, 0x01, 0xE7, 0xE4, 0x48, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Ujung_Pandang */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -9014,7 +9036,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x00, 0x00, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 
 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C, 
 0x41, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 
+0x00, 0x00, 0xD2, 0x71, 0xB2, 0x01, 0xB5, 0xBF, 0xCD, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 
 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* Asia/Ulan_Bator */
@@ -9051,7 +9073,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x00, 0x00, 0x52, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 
 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x52, 
 0x55, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x18, 0x6D, 
+0x00, 0x00, 0x00, 0x00, 0xCC, 0x29, 0xA0, 0x01, 0x98, 0x4C, 0xBD, 0x00, 0x00, 0x00, 0x18, 0x6D, 
 0x6F, 0x73, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x54, 0x69, 0x62, 0x65, 0x74, 0x20, 0x26, 0x20, 0x58, 
 0x69, 0x6E, 0x6A, 0x69, 0x61, 0x6E, 0x67, 
 
@@ -9062,8 +9084,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02, 
 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 
 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xBE, 0x7A, 
+0x01, 0xAF, 0x36, 0xA0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Asia/Vladivostok */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -9110,8 +9132,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x0F, 0x00, 
 0x00, 0x7E, 0x90, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x54, 0x00, 0x56, 0x4C, 
 0x41, 0x53, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x3A, 0x01, 
+0xDB, 0xF8, 0xF5, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 
 0x20, 0x2D, 0x20, 0x41, 0x6D, 0x75, 0x72, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72, 
 
 /* Asia/Yakutsk */
@@ -9159,7 +9181,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x90, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 
 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x41, 0x4B, 0x54, 0x00, 0x59, 0x41, 
 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xEF, 0x00, 0x01, 0xD8, 0x83, 0x8A, 0x00, 0x00, 0x00, 0x16, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x36, 0x20, 0x2D, 0x20, 0x4C, 0x65, 0x6E, 0x61, 
 0x20, 0x52, 0x69, 0x76, 0x65, 0x72, 
 
@@ -9211,7 +9233,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x53, 0x56, 0x45, 0x54, 0x00, 0x53, 0x56, 0x45, 0x53, 0x54, 0x00, 0x59, 0x45, 0x4B, 0x53, 
 0x54, 0x00, 0x59, 0x45, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 
 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x11, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 
+0xE0, 0x13, 0x48, 0x01, 0x6F, 0x20, 0x60, 0x00, 0x00, 0x00, 0x11, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 
 0x77, 0x2B, 0x30, 0x32, 0x20, 0x2D, 0x20, 0x55, 0x72, 0x61, 0x6C, 0x73, 
 
 /* Asia/Yerevan */
@@ -9262,7 +9284,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x38, 0x40, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x45, 0x52, 0x54, 0x00, 0x59, 0x45, 0x52, 
 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA4, 0xDD, 0x01, 0x56, 0x8F, 0x50, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Atlantic/Azores */
@@ -9345,7 +9367,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x48, 0x4D, 0x54, 0x00, 0x41, 0x5A, 0x4F, 0x53, 0x54, 0x00, 0x41, 0x5A, 0x4F, 0x54, 0x00, 0x41, 
 0x5A, 0x4F, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x41, 0x7A, 0x6F, 
+0x01, 0x00, 0xC2, 0xE7, 0xD5, 0x00, 0xED, 0x87, 0x4A, 0x00, 0x00, 0x00, 0x06, 0x41, 0x7A, 0x6F, 
 0x72, 0x65, 0x73, 
 
 /* Atlantic/Bermuda */
@@ -9394,7 +9416,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 
 0x01, 0xFF, 0xFF, 0xC3, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 
 0xD0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x96, 0xED, 0x00, 0xB2, 0x2B, 0xFA, 0x00, 0x00, 0x00, 
 0x00, 
 
 /* Atlantic/Canary */
@@ -9441,8 +9463,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 
 0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0D, 0x4C, 0x4D, 
 0x54, 0x00, 0x43, 0x41, 0x4E, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x43, 0x61, 0x6E, 0x61, 0x72, 0x79, 0x20, 0x49, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xB4, 0x34, 0xD0, 
+0x00, 0xFC, 0x61, 0x60, 0x00, 0x00, 0x00, 0x0E, 0x43, 0x61, 0x6E, 0x61, 0x72, 0x79, 0x20, 0x49, 
 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Atlantic/Cape_Verde */
@@ -9452,8 +9474,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xCC, 0x95, 0x9C, 0x20, 0xD2, 0x74, 0x7C, 0x10, 0x0B, 0x17, 0xF7, 0x40, 0x01, 0x02, 0x01, 0x03, 
 0xFF, 0xFF, 0xE9, 0xF4, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 
 0x01, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x56, 0x54, 0x00, 
-0x43, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x43, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x17, 
+0x12, 0x00, 0xF0, 0x59, 0xF2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Atlantic/Faeroe */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -9542,7 +9564,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF9, 0xA8, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0xE7, 0xF5, 0x82, 0x01, 0x0A, 0xAC, 0x3A, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Atlantic/Jan_Mayen */
@@ -9678,8 +9700,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x15, 0x46, 0x4D, 0x54, 0x00, 0x4D, 0x41, 
 0x44, 0x53, 0x54, 0x00, 0x4D, 0x41, 0x44, 0x54, 0x00, 0x4D, 0x41, 0x44, 0x4D, 0x54, 0x00, 0x57, 
 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x4D, 0x61, 0x64, 0x65, 0x69, 0x72, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xBB, 
+0x1F, 0xA5, 0x00, 0xFB, 0x9E, 0x10, 0x00, 0x00, 0x00, 0x0F, 0x4D, 0x61, 0x64, 0x65, 0x69, 0x72, 
 0x61, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Atlantic/Reykjavik */
@@ -9709,14 +9731,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 
 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 
 0x52, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x53, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x36, 
+0xD8, 0x00, 0xF3, 0xE9, 0x68, 0x00, 0x00, 0x00, 0x00, 
 
 /* Atlantic/South_Georgia */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 
-0x00, 0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x37, 0x56, 0xAA, 0x00, 0xDC, 0x8A, 0x55, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Atlantic/Stanley */
@@ -9764,7 +9786,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC9, 0xC4, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 
 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 
 0x09, 0x53, 0x4D, 0x54, 0x00, 0x46, 0x4B, 0x53, 0x54, 0x00, 0x46, 0x4B, 0x54, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x93, 0xD0, 0x00, 0xBC, 0xFA, 0xE8, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Atlantic/St_Helena */
@@ -9772,8 +9794,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDC, 0x42, 0x9B, 0x58, 
 0x01, 0xFF, 0xFF, 0xFA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A, 0x4D, 0x54, 
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xD6, 0xF2, 0x01, 0x0C, 0x18, 
+0xD0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Australia/ACT */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -9877,7 +9899,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x93, 
 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 
 0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x6F, 0x75, 
+0x00, 0x00, 0x56, 0xD9, 0x12, 0x01, 0xE6, 0x1E, 0x9D, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x6F, 0x75, 
 0x74, 0x68, 0x20, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6C, 0x69, 0x61, 
 
 /* Australia/Brisbane */
@@ -9891,7 +9913,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0, 
 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 
 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1B, 0x51, 0x75, 0x65, 0x65, 
+0x00, 0x60, 0xD7, 0xAA, 0x01, 0xFC, 0x2B, 0x25, 0x00, 0x00, 0x00, 0x1B, 0x51, 0x75, 0x65, 0x65, 
 0x6E, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 
 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
@@ -9945,7 +9967,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 
 0x03, 0x02, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, 
 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x79, 0xF8, 0x01, 0xEA, 0x7E, 0x68, 0x00, 0x00, 
 0x00, 0x1C, 0x4E, 0x65, 0x77, 0x20, 0x53, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x57, 0x61, 0x6C, 0x65, 
 0x73, 0x20, 0x2D, 0x20, 0x59, 0x61, 0x6E, 0x63, 0x6F, 0x77, 0x69, 0x6E, 0x6E, 0x61, 
 
@@ -10051,7 +10073,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, 
 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 
 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x54, 0x61, 0x73, 
+0x00, 0x00, 0x4F, 0x3E, 0x75, 0x01, 0xEE, 0x2E, 0x6A, 0x00, 0x00, 0x00, 0x16, 0x54, 0x61, 0x73, 
 0x6D, 0x61, 0x6E, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x4B, 0x69, 0x6E, 0x67, 0x20, 0x49, 0x73, 0x6C, 
 0x61, 0x6E, 0x64, 
 
@@ -10062,7 +10084,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, 
 0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 
-0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xBB, 0x0A, 0x01, 0xDA, 0x4B, 0x45, 
 0x00, 0x00, 0x00, 0x12, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x65, 0x72, 
 0x72, 0x69, 0x74, 0x6F, 0x72, 0x79, 
 
@@ -10077,8 +10099,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x49, 0xCE, 0x5B, 0x14, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x89, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x0C, 
 0x00, 0x00, 0x00, 0x00, 0x89, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x00, 0x00, 0x43, 0x57, 
-0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x41, 
+0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x1E, 0xD2, 0x01, 
+0xD7, 0x4B, 0x0A, 0x00, 0x00, 0x00, 0x1E, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x41, 
 0x75, 0x73, 0x74, 0x72, 0x61, 0x6C, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x45, 0x75, 0x63, 0x6C, 0x61, 
 0x20, 0x61, 0x72, 0x65, 0x61, 
 
@@ -10134,8 +10156,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 
 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 
 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x19, 0x54, 0x61, 0x73, 0x6D, 0x61, 0x6E, 0x69, 0x61, 0x20, 0x2D, 0x20, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x97, 0x0D, 0x01, 0xF3, 0x72, 
+0x12, 0x00, 0x00, 0x00, 0x19, 0x54, 0x61, 0x73, 0x6D, 0x61, 0x6E, 0x69, 0x61, 0x20, 0x2D, 0x20, 
 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* Australia/LHI */
@@ -10194,8 +10216,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 
 0x01, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 
 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x1C, 0x51, 0x75, 0x65, 0x65, 0x6E, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x37, 0xEA, 0x01, 0xF6, 0x03, 
+0xA0, 0x00, 0x00, 0x00, 0x1C, 0x51, 0x75, 0x65, 0x65, 0x6E, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20, 
 0x2D, 0x20, 0x48, 0x6F, 0x6C, 0x69, 0x64, 0x61, 0x79, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
 0x73, 
 
@@ -10241,7 +10263,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 
 0x01, 0x04, 0x00, 0x00, 0x93, 0xA8, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x45, 0x53, 
 0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x4C, 0x6F, 0x72, 0x64, 0x20, 
+0x5A, 0xDD, 0xB8, 0x02, 0x05, 0x66, 0x6D, 0x00, 0x00, 0x00, 0x10, 0x4C, 0x6F, 0x72, 0x64, 0x20, 
 0x48, 0x6F, 0x77, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
 
 /* Australia/Melbourne */
@@ -10294,7 +10316,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, 
 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 
 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x56, 0x69, 0x63, 
+0x00, 0x00, 0x52, 0x1E, 0x22, 0x01, 0xEF, 0xDC, 0x1A, 0x00, 0x00, 0x00, 0x08, 0x56, 0x69, 0x63, 
 0x74, 0x6F, 0x72, 0x69, 0x61, 
 
 /* Australia/North */
@@ -10370,8 +10392,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x49, 0xCE, 0x65, 0xA0, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 
 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x57, 0x53, 
-0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x22, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x41, 0x75, 
+0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x79, 0xF8, 0x01, 0xC3, 
+0x6E, 0x68, 0x00, 0x00, 0x00, 0x22, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x41, 0x75, 
 0x73, 0x74, 0x72, 0x61, 0x6C, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 
 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
@@ -10490,7 +10512,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, 
 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 
 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x65, 0x77, 
+0x00, 0x00, 0x58, 0x4C, 0x2A, 0x01, 0xF9, 0x65, 0x82, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x65, 0x77, 
 0x20, 0x53, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x57, 0x61, 0x6C, 0x65, 0x73, 0x20, 0x2D, 0x20, 0x6D, 
 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
@@ -11570,21 +11592,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3A, 0xC6, 0xB5, 0xD0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xD2, 0x50, 0x3D, 0xBB, 0x72, 0xD0, 
 0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0x96, 0x50, 0x45, 0x44, 0x35, 0x50, 
 0x45, 0xF3, 0x8C, 0xD0, 0x47, 0x24, 0x17, 0x50, 0x47, 0xDC, 0xA9, 0x50, 0x49, 0x03, 0xF9, 0x50, 
-0x49, 0xBC, 0x8B, 0x50, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0xA5, 0xA7, 0xD0, 0x4C, 0xCC, 0xF7, 0xD0, 
-0x4D, 0x85, 0x89, 0xD0, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x65, 0x6B, 0xD0, 0x50, 0x8C, 0xBB, 0xD0, 
-0x51, 0x45, 0x4D, 0xD0, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x25, 0x2F, 0xD0, 0x54, 0x4C, 0x7F, 0xD0, 
-0x55, 0x05, 0x11, 0xD0, 0x56, 0x2C, 0x61, 0xD0, 0x56, 0xEE, 0x2E, 0x50, 0x58, 0x15, 0x7E, 0x50, 
-0x58, 0xCE, 0x10, 0x50, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xAD, 0xF2, 0x50, 0x5B, 0xD5, 0x42, 0x50, 
-0x5C, 0x8D, 0xD4, 0x50, 0x5D, 0xB5, 0x24, 0x50, 0x5E, 0x6D, 0xB6, 0x50, 0x5F, 0x95, 0x06, 0x50, 
-0x60, 0x56, 0xD2, 0xD0, 0x61, 0x7E, 0x22, 0xD0, 0x62, 0x36, 0xB4, 0xD0, 0x63, 0x5E, 0x04, 0xD0, 
-0x64, 0x16, 0x96, 0xD0, 0x65, 0x3D, 0xE6, 0xD0, 0x65, 0xF6, 0x78, 0xD0, 0x67, 0x1D, 0xC8, 0xD0, 
-0x67, 0xD6, 0x5A, 0xD0, 0x68, 0xFD, 0xAA, 0xD0, 0x69, 0xB6, 0x3C, 0xD0, 0x6A, 0xDD, 0x8C, 0xD0, 
-0x6B, 0x9F, 0x59, 0x50, 0x6C, 0xC6, 0xA9, 0x50, 0x6D, 0x7F, 0x3B, 0x50, 0x6E, 0xA6, 0x8B, 0x50, 
-0x6F, 0x5F, 0x1D, 0x50, 0x70, 0x86, 0x6D, 0x50, 0x71, 0x3E, 0xFF, 0x50, 0x72, 0x66, 0x4F, 0x50, 
-0x73, 0x1E, 0xE1, 0x50, 0x74, 0x46, 0x31, 0x50, 0x75, 0x07, 0xFD, 0xD0, 0x76, 0x2F, 0x4D, 0xD0, 
-0x76, 0xE7, 0xDF, 0xD0, 0x78, 0x0F, 0x2F, 0xD0, 0x78, 0xC7, 0xC1, 0xD0, 0x79, 0xEF, 0x11, 0xD0, 
-0x7A, 0xA7, 0xA3, 0xD0, 0x7B, 0xCE, 0xF3, 0xD0, 0x7C, 0x87, 0x85, 0xD0, 0x7D, 0xAE, 0xD5, 0xD0, 
-0x7E, 0x67, 0x67, 0xD0, 0x7F, 0x8E, 0xB7, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
+0x49, 0xB3, 0x50, 0xD0, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0x9C, 0x6D, 0x50, 0x4C, 0xCC, 0xF7, 0xD0, 
+0x4D, 0x7C, 0x4F, 0x50, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x5C, 0x31, 0x50, 0x50, 0x8C, 0xBB, 0xD0, 
+0x51, 0x3C, 0x13, 0x50, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x1B, 0xF5, 0x50, 0x54, 0x4C, 0x7F, 0xD0, 
+0x54, 0xFB, 0xD7, 0x50, 0x56, 0x2C, 0x61, 0xD0, 0x56, 0xE4, 0xF3, 0xD0, 0x58, 0x15, 0x7E, 0x50, 
+0x58, 0xC4, 0xD5, 0xD0, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xA4, 0xB7, 0xD0, 0x5B, 0xD5, 0x42, 0x50, 
+0x5C, 0x84, 0x99, 0xD0, 0x5D, 0xB5, 0x24, 0x50, 0x5E, 0x64, 0x7B, 0xD0, 0x5F, 0x95, 0x06, 0x50, 
+0x60, 0x4D, 0x98, 0x50, 0x61, 0x7E, 0x22, 0xD0, 0x62, 0x2D, 0x7A, 0x50, 0x63, 0x5E, 0x04, 0xD0, 
+0x64, 0x0D, 0x5C, 0x50, 0x65, 0x3D, 0xE6, 0xD0, 0x65, 0xED, 0x3E, 0x50, 0x67, 0x1D, 0xC8, 0xD0, 
+0x67, 0xCD, 0x20, 0x50, 0x68, 0xFD, 0xAA, 0xD0, 0x69, 0xAD, 0x02, 0x50, 0x6A, 0xDD, 0x8C, 0xD0, 
+0x6B, 0x96, 0x1E, 0xD0, 0x6C, 0xC6, 0xA9, 0x50, 0x6D, 0x76, 0x00, 0xD0, 0x6E, 0xA6, 0x8B, 0x50, 
+0x6F, 0x55, 0xE2, 0xD0, 0x70, 0x86, 0x6D, 0x50, 0x71, 0x35, 0xC4, 0xD0, 0x72, 0x66, 0x4F, 0x50, 
+0x73, 0x15, 0xA6, 0xD0, 0x74, 0x46, 0x31, 0x50, 0x74, 0xFE, 0xC3, 0x50, 0x76, 0x2F, 0x4D, 0xD0, 
+0x76, 0xDE, 0xA5, 0x50, 0x78, 0x0F, 0x2F, 0xD0, 0x78, 0xBE, 0x87, 0x50, 0x79, 0xEF, 0x11, 0xD0, 
+0x7A, 0x9E, 0x69, 0x50, 0x7B, 0xCE, 0xF3, 0xD0, 0x7C, 0x7E, 0x4B, 0x50, 0x7D, 0xAE, 0xD5, 0xD0, 
+0x7E, 0x5E, 0x2D, 0x50, 0x7F, 0x8E, 0xB7, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
@@ -11679,21 +11701,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x3F, 0x73, 0x57, 0x50, 0x40, 0x91, 0x7A, 0xE0, 0x41, 0x5C, 0x73, 0xD0, 0x42, 0x71, 0x5C, 0xE0, 
 0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, 
 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 
-0x4A, 0x96, 0xF3, 0xD0, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x76, 0xD5, 0xD0, 0x4D, 0xB9, 0xE3, 0x60, 
-0x4E, 0x56, 0xB7, 0xD0, 0x4F, 0x99, 0xC5, 0x60, 0x50, 0x3F, 0xD4, 0x50, 0x51, 0x79, 0xA7, 0x60, 
-0x52, 0x1F, 0xB6, 0x50, 0x53, 0x59, 0x89, 0x60, 0x53, 0xFF, 0x98, 0x50, 0x55, 0x39, 0x6B, 0x60, 
-0x55, 0xDF, 0x7A, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0xBF, 0x5C, 0x50, 0x59, 0x02, 0x69, 0xE0, 
-0x59, 0xA8, 0x78, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5B, 0x88, 0x5A, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 
-0x5D, 0x68, 0x3C, 0xD0, 0x5E, 0xA2, 0x0F, 0xE0, 0x5F, 0x48, 0x1E, 0xD0, 0x60, 0x8B, 0x2C, 0x60, 
-0x61, 0x28, 0x00, 0xD0, 0x62, 0x6B, 0x0E, 0x60, 0x63, 0x07, 0xE2, 0xD0, 0x64, 0x4A, 0xF0, 0x60, 
-0x64, 0xF0, 0xFF, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xD0, 0xE1, 0x50, 0x68, 0x0A, 0xB4, 0x60, 
-0x68, 0xB0, 0xC3, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0x90, 0xA5, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 
-0x6C, 0x70, 0x87, 0x50, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x59, 0xA3, 0xD0, 0x6F, 0x93, 0x76, 0xE0, 
-0x70, 0x39, 0x85, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x19, 0x67, 0xD0, 0x73, 0x53, 0x3A, 0xE0, 
-0x73, 0xF9, 0x49, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x75, 0xD9, 0x2B, 0xD0, 0x77, 0x1C, 0x39, 0x60, 
-0x77, 0xB9, 0x0D, 0xD0, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xA2, 0x2A, 0x50, 0x7A, 0xDB, 0xFD, 0x60, 
-0x7B, 0x82, 0x0C, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x61, 0xEE, 0x50, 0x7E, 0x9B, 0xC1, 0x60, 
-0x7F, 0x41, 0xD0, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
+0x4A, 0xBB, 0xDD, 0xD0, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0xA4, 0xFA, 0x50, 0x4D, 0xB9, 0xE3, 0x60, 
+0x4E, 0x84, 0xDC, 0x50, 0x4F, 0x99, 0xC5, 0x60, 0x50, 0x64, 0xBE, 0x50, 0x51, 0x79, 0xA7, 0x60, 
+0x52, 0x44, 0xA0, 0x50, 0x53, 0x59, 0x89, 0x60, 0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 
+0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 
+0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 
+0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xA2, 0x0F, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x8B, 0x2C, 0x60, 
+0x61, 0x56, 0x25, 0x50, 0x62, 0x6B, 0x0E, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, 
+0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, 
+0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 
+0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, 
+0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, 
+0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, 
+0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, 
+0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, 
+0x7F, 0x66, 0xBA, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
@@ -12169,7 +12191,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x45, 0x54, 0x00, 0x4E, 0x45, 0x53, 0x54, 0x00, 0x43, 
 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 
 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0x00, 0xD9, 0x3B, 0xFA, 0x01, 0x1A, 0x22, 0x90, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Andorra */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12211,7 +12233,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 
 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x57, 0x45, 0x54, 0x00, 0x43, 
 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0xCA, 0x2D, 0xD0, 0x01, 0x14, 0xF8, 0xF2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Athens */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12265,7 +12287,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x41, 
 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 
 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC3, 0x42, 0xFA, 0x01, 0x36, 0xD8, 0xD2, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Europe/Belfast */
@@ -12398,8 +12420,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCD, 0xBD, 
+0x45, 0x01, 0x31, 0xF0, 0x50, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Berlin */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12454,8 +12476,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 
 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD9, 0x70, 0x10, 0x01, 0x27, 
+0x0D, 0xDA, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Bratislava */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12508,7 +12530,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 
 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 
 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD2, 0xCC, 0xD8, 0x01, 0x2C, 0xC6, 0xB2, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* Europe/Brussels */
@@ -12578,8 +12600,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 
 0x00, 0x0E, 0x10, 0x00, 0x04, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 
 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xD6, 0xE5, 0x05, 0x01, 
+0x19, 0x45, 0x35, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Bucharest */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12631,8 +12653,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 
 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 
 0x20, 0x00, 0x09, 0x42, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCD, 
+0x21, 0x05, 0x01, 0x3A, 0x7B, 0xD0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Budapest */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12689,7 +12711,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 
 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD1, 0xCE, 0xF0, 0x01, 0x2F, 0xC6, 0xED, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Europe/Chisinau */
@@ -12749,7 +12771,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 
 0x4D, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 
 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x01, 0x00, 0xD1, 0x0B, 0xA0, 0x01, 0x3E, 0xA7, 0x85, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Copenhagen */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12799,8 +12821,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 
 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 
 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 
-0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xDE, 
+0x45, 0x0A, 0x01, 0x25, 0xDB, 0xDD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Dublin */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -12883,7 +12905,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x0C, 0x44, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 
 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xDA, 0xB5, 0x95, 0x01, 0x09, 0xE2, 0x68, 0x00, 0x00, 0x00, 
 0x00, 
 
 /* Europe/Gibraltar */
@@ -12955,8 +12977,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x1C, 
 0x20, 0x01, 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 
 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x01, 
-0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC0, 0x76, 0xD5, 0x01, 
+0x0B, 0x90, 0x18, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Guernsey */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13041,8 +13063,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 
 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xD4, 0xC8, 0xA7, 0x01, 
+0x10, 0x6B, 0x95, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Helsinki */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13087,8 +13109,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 
 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 
 0x20, 0x00, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xE5, 0x22, 0xDA, 0x01, 0x38, 
+0xC1, 0x1A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Isle_of_Man */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13173,8 +13195,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 
 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xDB, 0xF4, 0x98, 0x01, 
+0x0D, 0x44, 0x4A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Istanbul */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13239,7 +13261,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 
 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0xC7, 0xEA, 0x62, 0x01, 0x3E, 0xDB, 0x9A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Jersey */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13324,8 +13346,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 
 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xD4, 0x66, 0xFF, 0x01, 
+0x0F, 0xC8, 0xD2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Kaliningrad */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13380,7 +13402,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x45, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 
 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 
+0x00, 0xDC, 0xD1, 0xF2, 0x01, 0x31, 0xF0, 0x50, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 
 0x6F, 0x77, 0x2D, 0x30, 0x31, 0x20, 0x2D, 0x20, 0x4B, 0x61, 0x6C, 0x69, 0x6E, 0x69, 0x6E, 0x67, 
 0x72, 0x61, 0x64, 
 
@@ -13432,8 +13454,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 
 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 
 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD6, 0x48, 
+0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 
 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* Europe/Lisbon */
@@ -13516,7 +13538,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54, 
 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 
 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 0x69, 0x6E, 
+0x00, 0xC4, 0x67, 0xF2, 0x01, 0x05, 0x20, 0xF5, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 0x69, 0x6E, 
 0x6C, 0x61, 0x6E, 0x64, 
 
 /* Europe/Ljubljana */
@@ -13563,8 +13585,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCF, 0x98, 
+0x88, 0x01, 0x28, 0xCF, 0x12, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/London */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13649,8 +13671,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 
 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 
 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xD7, 0xEC, 0xB1, 0x01, 
+0x12, 0xD9, 0x6F, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Luxembourg */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13721,8 +13743,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
 0x00, 0x43, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 
 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD5, 0x03, 0x40, 0x01, 0x1C, 
+0x0A, 0xD8, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Madrid */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13784,7 +13806,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x13, 0x57, 0x45, 0x53, 0x54, 0x00, 
 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 
 0x54, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 
+0x01, 0x01, 0x00, 0xC6, 0xF9, 0x80, 0x01, 0x0F, 0x1F, 0x8D, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 
 0x69, 0x6E, 0x6C, 0x61, 0x6E, 0x64, 
 
 /* Europe/Malta */
@@ -13846,8 +13868,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 
-0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC0, 0x1B, 
+0xB0, 0x01, 0x28, 0xCF, 0x12, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Mariehamn */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13892,8 +13914,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 
 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 
 0x20, 0x00, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xE5, 0x08, 0xD0, 0x01, 0x31, 
+0x19, 0x78, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Minsk */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -13944,7 +13966,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 
 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0xDB, 0x92, 0xF0, 0x01, 0x3C, 0xB8, 0xBA, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Monaco */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14014,7 +14036,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x50, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 
 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0xCC, 0x02, 0x8F, 0x01, 0x1D, 0xEC, 0x9D, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Moscow */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14068,7 +14090,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x4D, 0x44, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 
 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 
+0xDE, 0x65, 0x98, 0x01, 0x4C, 0x01, 0x7D, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 
 0x77, 0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x52, 0x75, 0x73, 0x73, 
 0x69, 0x61, 
 
@@ -14172,7 +14194,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 
 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 
 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xE4, 0xC1, 0x32, 0x01, 0x23, 0x0F, 0xB8, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* Europe/Paris */
@@ -14243,8 +14265,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x50, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 
 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x4D, 
 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD3, 0xE4, 0xCA, 0x01, 0x16, 
+0x37, 0xF5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Podgorica */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14290,8 +14312,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCA, 0x13, 
+0xC5, 0x01, 0x30, 0x0E, 0x8A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Prague */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14344,7 +14366,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 
 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 
 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD5, 0xC0, 0x0D, 0x01, 0x28, 0xAE, 0x85, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* Europe/Riga */
@@ -14399,8 +14421,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 
 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xE0, 0x3A, 0x57, 0x01, 0x37, 0x6E, 
+0x90, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Rome */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14462,7 +14484,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 
 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 
 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC9, 0x43, 0x70, 0x01, 0x25, 0xB4, 0xCD, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Europe/Samara */
@@ -14514,7 +14536,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4B, 0x55, 0x59, 0x53, 0x54, 0x00, 0x4B, 0x55, 0x59, 
 0x54, 0x00, 0x53, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 
 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1C, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x81, 0x7F, 0x01, 0x5F, 0x2E, 0x58, 0x00, 0x00, 0x00, 0x1C, 
 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x31, 0x20, 0x2D, 0x20, 0x53, 0x61, 0x6D, 0x61, 
 0x72, 0x61, 0x2C, 0x20, 0x55, 0x64, 0x6D, 0x75, 0x72, 0x74, 0x69, 0x61, 
 
@@ -14578,7 +14600,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 
 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 
 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCC, 0x57, 0x32, 0x01, 0x25, 0xAE, 0x4A, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Europe/Sarajevo */
@@ -14625,8 +14647,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCC, 0x43, 
+0xAA, 0x01, 0x2E, 0xC2, 0x82, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Simferopol */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14678,7 +14700,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 
 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x63, 0x65, 0x6E, 
+0x01, 0x00, 0xCD, 0xEA, 0xD7, 0x01, 0x46, 0xB0, 0xD0, 0x00, 0x00, 0x00, 0x0E, 0x63, 0x65, 0x6E, 
 0x74, 0x72, 0x61, 0x6C, 0x20, 0x43, 0x72, 0x69, 0x6D, 0x65, 0x61, 
 
 /* Europe/Skopje */
@@ -14725,8 +14747,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC9, 0x63, 
+0xFD, 0x01, 0x33, 0x5C, 0xE5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Sofia */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14776,8 +14798,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 
 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x45, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 
 0x43, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCA, 0x75, 0x6D, 
+0x01, 0x36, 0x3C, 0x92, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Stockholm */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14822,7 +14844,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 
 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0xE3, 0xDD, 0x55, 0x01, 0x2E, 0x33, 0x48, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Tallinn */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14875,8 +14897,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x19, 0x54, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 
 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 
 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xE3, 
+0xFD, 0xE2, 0x01, 0x38, 0x6C, 0x78, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Tirane */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -14926,8 +14948,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x12, 0x98, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 
 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 
 0x20, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC8, 0x66, 0x15, 0x01, 0x30, 
+0xEB, 0xE5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Tiraspol */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -15037,7 +15059,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x11, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 
 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x52, 
+0x00, 0x01, 0x01, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x08, 0x52, 
 0x75, 0x74, 0x68, 0x65, 0x6E, 0x69, 0x61, 
 
 /* Europe/Vaduz */
@@ -15081,7 +15103,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 
 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0xD1, 0x46, 0x38, 0x01, 0x21, 0x2D, 0xF2, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Europe/Vatican */
@@ -15144,7 +15166,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 
 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 
 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xC9, 0x44, 0x4E, 0x01, 0x25, 0xA8, 0xF9, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Europe/Vienna */
@@ -15198,7 +15220,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 
 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0xD2, 0xE6, 0xE2, 0x01, 0x2B, 0x94, 0xB5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Vilnius */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -15252,7 +15274,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x53, 0x4B, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x01, 0x01, 0x01, 0x00, 0xDC, 0xC4, 0xED, 0x01, 0x39, 0x49, 0xD2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Volgograd */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -15301,7 +15323,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x14, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x53, 0x41, 0x54, 0x00, 
 0x53, 0x54, 0x41, 0x54, 0x00, 0x56, 0x4F, 0x4C, 0x53, 0x54, 0x00, 0x56, 0x4F, 0x4C, 0x54, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB0, 0xB5, 0x01, 0x56, 0x6E, 0xC2, 0x00, 0x00, 
 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x43, 0x61, 
 0x73, 0x70, 0x69, 0x61, 0x6E, 0x20, 0x53, 0x65, 0x61, 
 
@@ -15367,7 +15389,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x4D, 0x54, 0x00, 0x43, 
 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 
 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD9, 0x0E, 0x68, 0x01, 0x32, 0xB3, 0xA0, 0x00, 0x00, 0x00, 
 0x00, 
 
 /* Europe/Zagreb */
@@ -15414,8 +15436,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 
 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 
 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xCF, 0x36, 
+0xE0, 0x01, 0x2B, 0x05, 0x7A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Europe/Zaporozhye */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -15466,7 +15488,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x43, 0x55, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 
 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 
 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, 0x7A, 0x00, 
 0x00, 0x00, 0x2E, 0x5A, 0x61, 0x70, 0x6F, 0x72, 0x6F, 0x7A, 0x68, 0x27, 0x79, 0x65, 0x2C, 0x20, 
 0x45, 0x20, 0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, 0x20, 0x2F, 0x20, 0x5A, 0x61, 0x70, 0x6F, 
 0x72, 0x69, 0x7A, 0x68, 0x69, 0x61, 0x2C, 0x20, 0x45, 0x20, 0x4C, 0x75, 0x68, 0x61, 0x6E, 0x73, 
@@ -15515,7 +15537,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 
 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 
 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0xD1, 0xA1, 0x5D, 0x01, 0x1F, 0xAD, 0xD5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Factory */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -15808,7 +15830,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xE2, 0x33, 0xC0, 0xC0, 0xE2, 0xAB, 0xB9, 0x40, 0x01, 0x02, 0x03, 0x00, 0x00, 0x2C, 0x8C, 0x00, 
 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x08, 0x00, 0x00, 0x2A, 
 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00, 
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x43, 0x12, 0x01, 0x5B, 0x29, 0xB2, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Chagos */
@@ -15817,21 +15839,21 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x89, 0x7E, 0xF7, 0x9C, 
 0x30, 0xE6, 0xDD, 0xB0, 0x01, 0x02, 0x00, 0x00, 0x43, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 
 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x4F, 0x54, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x28, 0x15, 0x01, 0x81, 0x28, 0x42, 0x00, 0x00, 
 0x00, 0x00, 
 
 /* Indian/Christmas */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 
-0x00, 0x00, 0x43, 0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x43, 0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB4, 0xC2, 0x01, 0xB3, 0xF8, 0x12, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Cocos */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68, 
-0x00, 0x00, 0x43, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x43, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x77, 0x45, 0xDA, 0x01, 0xA6, 0x8A, 0x92, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Comoro */
@@ -15839,32 +15861,32 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF3, 0xD1, 0xF0, 
 0x01, 0x00, 0x00, 0x28, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x96, 0x4D, 0x01, 0x54, 0xAD, 
+0x8A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Kerguelen */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x62, 0x80, 
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 
-0x00, 0x54, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x54, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x19, 0x6D, 0x01, 0x7D, 0xCD, 
+0x36, 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Mahe */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x88, 0x64, 0xE6, 0x84, 
 0x01, 0x00, 0x00, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x53, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x53, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x3E, 0x2A, 0x01, 0x67, 0x4B, 
+0x2A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Maldives */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xED, 0x2F, 0xC3, 0x98, 
 0x01, 0x00, 0x00, 0x44, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x4D, 0x4D, 0x54, 
-0x00, 0x4D, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x4D, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xAF, 0xDA, 0x01, 0x82, 0xCF, 
+0x70, 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Mauritius */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -15892,7 +15914,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x04, 0x03, 0x00, 0x00, 0x35, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x01, 0x04, 0x00, 0x00, 
 0x38, 0x40, 0x00, 0x09, 0x00, 0x00, 0x46, 0x50, 0x01, 0x04, 0x00, 0x00, 0x38, 0x40, 0x00, 0x09, 
 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x55, 0x53, 0x54, 0x00, 0x4D, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x10, 0xDA, 0x01, 0x6A, 0x65, 0x70, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Indian/Mayotte */
@@ -15900,16 +15922,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF3, 0xD0, 0x18, 
 0x01, 0x00, 0x00, 0x2A, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x36, 0xBD, 0x01, 0x57, 0xAD, 
+0xC5, 0x00, 0x00, 0x00, 0x00, 
 
 /* Indian/Reunion */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xCC, 0x39, 0x80, 
 0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x52, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x52, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x22, 0x4A, 0x01, 0x67, 0x4B, 
+0x2A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Iran */
 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16479,8 +16501,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x05, 0xFC, 0x00, 
 0xDA, 0x62, 0x04, 0x38, 0x01, 0x02, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 
 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 
-0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xC3, 0xA5, 0x00, 
+0x0E, 0xDA, 0x15, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Auckland */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16538,7 +16560,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0xA8, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x0A, 0x00, 0x00, 0xA8, 0xC0, 0x00, 
 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4E, 0x5A, 0x53, 0x54, 0x00, 0x4E, 0x5A, 0x4D, 0x54, 
 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 
+0x00, 0x00, 0x00, 0x53, 0xB8, 0x4A, 0x02, 0x1D, 0x54, 0xBA, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 
 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* Pacific/Chatham */
@@ -16587,8 +16609,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0xAB, 0xFC, 
 0x00, 0x00, 0x00, 0x00, 0xC1, 0x5C, 0x01, 0x04, 0x00, 0x00, 0xB3, 0x4C, 0x00, 0x0A, 0x00, 0x00, 
 0xB3, 0x4C, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x44, 0x54, 0x00, 0x43, 0x48, 
-0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x43, 0x68, 0x61, 0x74, 0x68, 0x61, 0x6D, 0x20, 
+0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x2A, 0x78, 
+0x00, 0x06, 0xF1, 0x58, 0x00, 0x00, 0x00, 0x0F, 0x43, 0x68, 0x61, 0x74, 0x68, 0x61, 0x6D, 0x20, 
 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Easter */
@@ -16643,7 +16665,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 
 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0x45, 0x4D, 0x54, 0x00, 0x45, 
 0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 
-0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 
+0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x60, 0x5B, 0xF8, 0x00, 0x6C, 0xFF, 0xA5, 0x00, 0x00, 
 0x00, 0x1C, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20, 
 0x26, 0x20, 0x53, 0x61, 0x6C, 0x61, 0x20, 0x79, 0x20, 0x47, 0x6F, 0x6D, 0x65, 0x7A, 
 
@@ -16659,8 +16681,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x9D, 0xCC, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x01, 
 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x55, 0x53, 0x54, 0x00, 
-0x56, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x56, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x68, 0x0A, 0x02, 0x13, 
+0xA4, 0x42, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Enderbury */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16668,14 +16690,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x12, 0x56, 0x04, 0xC0, 
 0x2F, 0x06, 0x8B, 0x30, 0x01, 0x02, 0xFF, 0xFF, 0x57, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x65, 0x50, 
 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x50, 0x48, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x50, 
+0x00, 0x00, 0x00, 0x00, 0x84, 0xF4, 0x75, 0x00, 0x0D, 0xDC, 0x2D, 0x00, 0x00, 0x00, 0x0F, 0x50, 
 0x68, 0x6F, 0x65, 0x6E, 0x69, 0x78, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Fakaofo */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60, 
-0x00, 0x00, 0x54, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x54, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x27, 0xDA, 0x00, 0x0E, 0x16, 0xC5, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Fiji */
@@ -16685,14 +16707,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x36, 0x3B, 0x17, 0xE0, 0x36, 0xD7, 0xFA, 0x60, 0x38, 0x24, 0x34, 0x60, 0x38, 0xB7, 0xDC, 0x60, 
 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0xA7, 0x44, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 
 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4A, 0x53, 0x54, 0x00, 
-0x46, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x46, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x11, 0x15, 0x02, 0x22, 
+0xE6, 0x82, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Funafuti */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 
-0x00, 0x00, 0x54, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x54, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xE9, 0x12, 0x02, 0x24, 0x1F, 0x02, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Galapagos */
@@ -16701,8 +16723,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xB6, 0xA4, 0x4C, 0x80, 
 0x1E, 0x18, 0xC4, 0x50, 0x01, 0x02, 0xFF, 0xFF, 0xAC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 
 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x43, 0x54, 0x00, 
-0x47, 0x41, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x11, 0x47, 0x61, 0x6C, 0x61, 0x70, 0x61, 0x67, 0x6F, 0x73, 
+0x47, 0x41, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB3, 0xD0, 0x00, 
+0x8B, 0xC5, 0x40, 0x00, 0x00, 0x00, 0x11, 0x47, 0x61, 0x6C, 0x61, 0x70, 0x61, 0x67, 0x6F, 0x73, 
 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Gambier */
@@ -16710,8 +16732,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x94, 0x50, 0x48, 0x04, 
 0x01, 0xFF, 0xFF, 0x81, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x47, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x47, 0x61, 0x6D, 0x62, 0x69, 0x65, 0x72, 0x20, 0x49, 0x73, 
+0x00, 0x47, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6F, 0xF5, 0x00, 0x47, 
+0xA3, 0xD7, 0x00, 0x00, 0x00, 0x0F, 0x47, 0x61, 0x6D, 0x62, 0x69, 0x65, 0x72, 0x20, 0x49, 0x73, 
 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Guadalcanal */
@@ -16719,16 +16741,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x94, 0x4F, 0x33, 0x8C, 
 0x01, 0x00, 0x00, 0x95, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x53, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x53, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x68, 0xF5, 0x02, 0x07, 0x1A, 
+0xA0, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Guam */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x3A, 0x43, 0x5E, 0x60, 
 0x01, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x47, 0x53, 0x54, 
-0x00, 0x43, 0x68, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x43, 0x68, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xE0, 0xAA, 0x01, 0xEF, 
+0x87, 0x78, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Honolulu */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16739,14 +16761,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68, 
 0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, 
 0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x48, 0x61, 
+0x01, 0x00, 0x00, 0xA9, 0xD7, 0x46, 0x00, 0x24, 0x67, 0xA9, 0x00, 0x00, 0x00, 0x06, 0x48, 0x61, 
 0x77, 0x61, 0x69, 0x69, 
 
 /* Pacific/Johnston */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60, 
-0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xE3, 0x38, 0x00, 0x11, 0x92, 0xB2, 
 0x00, 0x00, 0x00, 0x0E, 0x4A, 0x6F, 0x68, 0x6E, 0x73, 0x74, 0x6F, 0x6E, 0x20, 0x41, 0x74, 0x6F, 
 0x6C, 0x6C, 
 
@@ -16756,7 +16778,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x12, 0x55, 0xF2, 0x00, 
 0x2F, 0x06, 0x7D, 0x20, 0x01, 0x02, 0xFF, 0xFF, 0x6A, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 
 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x00, 0x00, 0x4C, 0x49, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x4C, 
+0x00, 0x00, 0x00, 0x00, 0x8C, 0x2D, 0x6A, 0x00, 0x23, 0x9A, 0x95, 0x00, 0x00, 0x00, 0x0C, 0x4C, 
 0x69, 0x6E, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Kosrae */
@@ -16764,8 +16786,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0xFF, 0x86, 0x1B, 0x50, 
 0x36, 0x8B, 0x67, 0x40, 0x01, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 
-0x00, 0x00, 0x4B, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 
-0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x4B, 0x6F, 0x73, 0x72, 0x61, 0x65, 
+0x00, 0x00, 0x4B, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x71, 0x12, 0x02, 
+0x0B, 0x59, 0xDD, 0x00, 0x00, 0x00, 0x06, 0x4B, 0x6F, 0x73, 0x72, 0x61, 0x65, 
 
 /* Pacific/Kwajalein */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16773,7 +16795,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x1B, 0x50, 
 0x2C, 0x74, 0xBC, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0x57, 0x40, 
 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, 0x00, 0x4B, 0x57, 0x41, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x30, 0x6D, 0x02, 0x11, 0xFD, 0x15, 0x00, 
 0x00, 0x00, 0x09, 0x4B, 0x77, 0x61, 0x6A, 0x61, 0x6C, 0x65, 0x69, 0x6E, 
 
 /* Pacific/Majuro */
@@ -16781,7 +16803,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0xFF, 0x86, 0x1B, 0x50, 
 0x01, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x3D, 0x38, 0x02, 0x17, 0xE3, 0x80, 0x00, 0x00, 0x00, 
 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
 
 /* Pacific/Marquesas */
@@ -16789,8 +16811,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x94, 0x50, 0x4C, 0x48, 
 0x01, 0xFF, 0xFF, 0x7D, 0x38, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x4D, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x11, 0x4D, 0x61, 0x72, 0x71, 0x75, 0x65, 0x73, 0x61, 0x73, 0x20, 
+0x00, 0x4D, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x98, 0xA0, 0x00, 0x3F, 
+0x52, 0xF0, 0x00, 0x00, 0x00, 0x11, 0x4D, 0x61, 0x72, 0x71, 0x75, 0x65, 0x73, 0x61, 0x73, 0x20, 
 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Midway */
@@ -16801,7 +16823,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x04, 0xFF, 0xFF, 0x65, 0x50, 
 0x00, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x44, 0x54, 0x00, 
 0x42, 0x53, 0x54, 0x00, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x4D, 0x69, 0x64, 0x77, 
+0x00, 0xB4, 0x62, 0x62, 0x00, 0x05, 0x23, 0x1A, 0x00, 0x00, 0x00, 0x0E, 0x4D, 0x69, 0x64, 0x77, 
 0x61, 0x79, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Nauru */
@@ -16811,8 +16833,8 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xCB, 0xB4, 0xBF, 0x48, 0xD0, 0x42, 0x50, 0x70, 0x11, 0x8B, 0x04, 0xC8, 0x01, 0x02, 0x01, 0x03, 
 0x00, 0x00, 0x9C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 
 0x00, 0x08, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x52, 0x54, 0x00, 
-0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 
-0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1E, 0x12, 
+0x02, 0x11, 0x5A, 0x52, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Niue */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16820,15 +16842,15 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0xDC, 0x43, 0x35, 0x60, 
 0x10, 0x74, 0xCA, 0x38, 0x01, 0x02, 0xFF, 0xFF, 0x60, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 
 0x00, 0x00, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0x4E, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x6C, 0x5C, 0xE2, 0x00, 0x12, 0x2E, 0xF2, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Norfolk */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDC, 0x41, 0xF8, 0x80, 
 0x01, 0x00, 0x00, 0x9D, 0x80, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x04, 0x4E, 0x4D, 0x54, 
-0x00, 0x4E, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x4E, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x27, 0xA8, 0x02, 0x12, 0xF4, 
+0x7A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Noumea */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16839,7 +16861,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x9C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 
 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 
 0x00, 0x4E, 0x43, 0x53, 0x54, 0x00, 0x4E, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x2A, 0xAA, 0x02, 0x10, 0xA4, 0x08, 0x00, 0x00, 0x00, 0x00, 
 
 
 /* Pacific/Pago_Pago */
@@ -16850,14 +16872,14 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, 
 0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D, 
 0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53, 
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 
-0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x5F, 
+0xAA, 0x00, 0x10, 0x53, 0xAF, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Palau */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 
-0x00, 0x00, 0x50, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x50, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x94, 0x84, 0xD5, 0x01, 0xDF, 0xDD, 0x0D, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Pitcairn */
@@ -16865,22 +16887,22 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x35, 0x44, 0x42, 0x08, 
 0x01, 0xFF, 0xFF, 0x88, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0x50, 0x4E, 0x54, 
-0x00, 0x50, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x50, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x48, 0xAA, 0x00, 0x4C, 0x6B, 
+0xCD, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Ponape */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x9A, 0xB0, 
-0x00, 0x00, 0x50, 0x4F, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x10, 0x50, 0x6F, 0x6E, 0x61, 0x70, 0x65, 0x20, 0x28, 0x50, 0x6F, 0x68, 
+0x00, 0x00, 0x50, 0x4F, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x93, 0xF5, 0x9A, 0x02, 0x04, 0x13, 
+0xE2, 0x00, 0x00, 0x00, 0x10, 0x50, 0x6F, 0x6E, 0x61, 0x70, 0x65, 0x20, 0x28, 0x50, 0x6F, 0x68, 
 0x6E, 0x70, 0x65, 0x69, 0x29, 
 
 /* Pacific/Port_Moresby */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 
-0x00, 0x00, 0x50, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x50, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x5B, 0xF0, 0x01, 0xF3, 0x37, 0x7A, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Rarotonga */
@@ -16897,7 +16919,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 
 0x6C, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 
 0x43, 0x4B, 0x54, 0x00, 0x43, 0x4B, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x69, 0xA4, 0x45, 0x00, 0x21, 0x36, 0x9A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Saipan */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
@@ -16905,7 +16927,7 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x37, 0x70, 
 0x3A, 0x43, 0x5E, 0x60, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 
 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x68, 0x53, 0x54, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x85, 0xC0, 0x01, 0xF1, 0x0E, 0x18, 0x00, 
 0x00, 0x00, 0x00, 
 
 /* Pacific/Samoa */
@@ -16924,16 +16946,16 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x94, 0x50, 0x55, 0xB8, 
 0x01, 0xFF, 0xFF, 0x73, 0xC8, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 
-0x00, 0x54, 0x41, 0x48, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 
-0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x6F, 0x63, 0x69, 0x65, 0x74, 0x79, 0x20, 0x49, 0x73, 
+0x00, 0x54, 0x41, 0x48, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x33, 0xF5, 0x00, 0x30, 
+0x2A, 0xBA, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x6F, 0x63, 0x69, 0x65, 0x74, 0x79, 0x20, 0x49, 0x73, 
 0x6C, 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Tarawa */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xA8, 0xC0, 
-0x00, 0x00, 0x47, 0x49, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x0F, 0x47, 0x69, 0x6C, 0x62, 0x65, 0x72, 0x74, 0x20, 0x49, 0x73, 0x6C, 
+0x00, 0x00, 0x47, 0x49, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0xA2, 0x02, 0x1A, 0xA2, 
+0xA0, 0x00, 0x00, 0x00, 0x0F, 0x47, 0x69, 0x6C, 0x62, 0x65, 0x72, 0x74, 0x20, 0x49, 0x73, 0x6C, 
 0x61, 0x6E, 0x64, 0x73, 
 
 /* Pacific/Tongatapu */
@@ -16945,29 +16967,29 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0xAD, 0x70, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x01, 
 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x01, 0x04, 0x54, 0x4F, 0x54, 
 0x00, 0x54, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x69, 0x8A, 0x3A, 0x00, 0x07, 0xE2, 0x3A, 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Truk */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x8C, 0xA0, 
-0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x14, 0x54, 0x72, 0x75, 0x6B, 0x20, 0x28, 0x43, 0x68, 0x75, 0x75, 0x6B, 
+0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x94, 0xA5, 0x62, 0x01, 0xFA, 0x42, 
+0xDD, 0x00, 0x00, 0x00, 0x14, 0x54, 0x72, 0x75, 0x6B, 0x20, 0x28, 0x43, 0x68, 0x75, 0x75, 0x6B, 
 0x29, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x59, 0x61, 0x70, 
 
 /* Pacific/Wake */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xA8, 0xC0, 
-0x00, 0x00, 0x57, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 
-0x80, 0x00, 0x00, 0x00, 0x0B, 0x57, 0x61, 0x6B, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
+0x00, 0x00, 0x57, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xC0, 0xCD, 0x02, 0x10, 0xE5, 
+0x22, 0x00, 0x00, 0x00, 0x0B, 0x57, 0x61, 0x6B, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 
 
 
 /* Pacific/Wallis */
 0x50, 0x48, 0x50, 0x31, 0x01, 0x57, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 
-0x00, 0x00, 0x57, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
+0x00, 0x00, 0x57, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x75, 0xF3, 0x50, 0x00, 0x06, 0x5B, 0x9A, 
 0x00, 0x00, 0x00, 0x00, 
 
 /* Pacific/Yap */
@@ -18091,4 +18113,4 @@ const unsigned char timelib_timezone_db_data_builtin[257587] = {
 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 
 0x00, 0x00, 0x00, 0x00, };
 
-const timelib_tzdb timezonedb_builtin = { "2009.1", 560, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+const timelib_tzdb timezonedb_builtin = { "2009.9", 560, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
diff --git a/ext/date/lib/tm2unixtime.c b/ext/date/lib/tm2unixtime.c
index 2a0f53a..4cd3584 100644
--- a/ext/date/lib/tm2unixtime.c
+++ b/ext/date/lib/tm2unixtime.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: tm2unixtime.c,v 1.13.2.3.2.7 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: tm2unixtime.c,v 1.13.2.3.2.8 2009/05/03 18:22:59 derick Exp $ */
 
 #include "timelib.h"
 
@@ -31,20 +31,12 @@ static int days_in_month[13]      = {  31,  31,  28,  31,  30,  31,  30,  31,  3
 static int do_range_limit(timelib_sll start, timelib_sll end, timelib_sll adj, timelib_sll *a, timelib_sll *b)
 {
 	if (*a < start) {
-		*a += adj;
-		(*b)--;
-		return 1;
+		*b -= (start - *a - 1) / adj + 1;
+		*a += adj * ((start - *a - 1) / adj + 1);
 	}
 	if (*a >= end) {
-		if (start == 0) {
-			(*b) += (*a / end);
-			(*a) -= (end * (*a / end));
-			return 0;
-		}
-
-		*a -= adj;
-		(*b)++;
-		return 1;
+		*b += *a / adj;
+		*a -= adj * (*a / adj);
 	}
 	return 0;
 }
@@ -55,6 +47,12 @@ static int do_range_limit_days(timelib_sll *y, timelib_sll *m, timelib_sll *d)
 	timelib_sll days_this_month;
 	timelib_sll last_month, last_year;
 	timelib_sll days_last_month;
+	
+	/* can jump an entire leap year period quickly */
+	if (*d >= DAYS_PER_LYEAR_PERIOD || *d <= -DAYS_PER_LYEAR_PERIOD) {
+		*y += YEARS_PER_LYEAR_PERIOD * (*d / DAYS_PER_LYEAR_PERIOD);
+		*d -= DAYS_PER_LYEAR_PERIOD * (*d / DAYS_PER_LYEAR_PERIOD);
+	}
 
 	do_range_limit(1, 13, 12, m, y);
 
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 840bd70..e25e70a 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_date.c,v 1.43.2.45.2.64 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: php_date.c,v 1.43.2.45.2.71 2009/06/05 22:34:30 rasmus Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -30,6 +30,14 @@
 #include "lib/timelib.h"
 #include <time.h>
 
+#ifdef PHP_WIN32
+static __inline __int64 llabs( __int64 i ) { return i >= 0? i: -i; }
+#endif
+
+#if defined(__GNUC__) && __GNUC__ < 3
+static __inline __int64_t llabs( __int64_t i ) { return i >= 0 ? i : -i; }
+#endif
+
 /* {{{ arginfo */
 static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_date, 0, 0, 1)
@@ -312,17 +320,11 @@ static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC);
 static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC);
 static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC);
 
-/* This is need to ensure that session extension request shutdown occurs 1st, because it uses the date extension */ 
-static zend_module_dep date_deps[] = {
-        ZEND_MOD_OPTIONAL("session")
-        {NULL, NULL, NULL}
-};
-
 /* {{{ Module struct */
 zend_module_entry date_module_entry = {
 	STANDARD_MODULE_HEADER_EX,
 	NULL,
-	date_deps,
+	NULL,
 	"date",                     /* extension name */
 	date_functions,             /* function list */
 	PHP_MINIT(date),            /* process startup */
@@ -345,6 +347,7 @@ static PHP_GINIT_FUNCTION(date)
 {
 	date_globals->default_timezone = NULL;
 	date_globals->timezone = NULL;
+	date_globals->tzcache = NULL;
 }
 /* }}} */
 
@@ -363,7 +366,7 @@ PHP_RINIT_FUNCTION(date)
 		efree(DATEG(timezone));
 	}
 	DATEG(timezone) = NULL;
-	zend_hash_init(&DATEG(tzcache), 4, NULL, _php_date_tzinfo_dtor, 0);
+	DATEG(tzcache) = NULL;
 
 	return SUCCESS;
 }
@@ -376,8 +379,11 @@ PHP_RSHUTDOWN_FUNCTION(date)
 		efree(DATEG(timezone));
 	}
 	DATEG(timezone) = NULL;
-	zend_hash_destroy(&DATEG(tzcache));
-
+	if(DATEG(tzcache)) {
+		zend_hash_destroy(DATEG(tzcache));
+		FREE_HASHTABLE(DATEG(tzcache));
+		DATEG(tzcache) = NULL;
+	}
 	return SUCCESS;
 }
 /* }}} */
@@ -554,13 +560,18 @@ static timelib_tzinfo *php_date_parse_tzfile(char *formal_tzname, const timelib_
 {
 	timelib_tzinfo *tzi, **ptzi;
 
-	if (zend_hash_find(&DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void **) &ptzi) == SUCCESS) {
+	if(!DATEG(tzcache)) {
+		ALLOC_HASHTABLE(DATEG(tzcache));
+		zend_hash_init(DATEG(tzcache), 4, NULL, _php_date_tzinfo_dtor, 0);
+	}
+
+	if (zend_hash_find(DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void **) &ptzi) == SUCCESS) {
 		return *ptzi;
 	}
 
 	tzi = timelib_parse_tzfile(formal_tzname, tzdb);
 	if (tzi) {
-		zend_hash_add(&DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void *) &tzi, sizeof(timelib_tzinfo*), NULL);
+		zend_hash_add(DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void *) &tzi, sizeof(timelib_tzinfo*), NULL);
 	}
 	return tzi;
 }
@@ -656,7 +667,7 @@ PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D)
 {
 	char *tz;
 	timelib_tzinfo *tzi;
-	
+
 	tz = guess_timezone(DATE_TIMEZONEDB TSRMLS_CC);
 	tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC);
 	if (! tzi) {
@@ -787,7 +798,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
 			/* year */
 			case 'L': length = slprintf(buffer, 32, "%d", timelib_is_leap((int) t->y)); break;
 			case 'y': length = slprintf(buffer, 32, "%02d", (int) t->y % 100); break;
-			case 'Y': length = slprintf(buffer, 32, "%s%04d", t->y < 0 ? "-" : "", abs((int) t->y)); break;
+			case 'Y': length = slprintf(buffer, 32, "%s%04ld", t->y < 0 ? "-" : "", llabs(t->y)); break;
 
 			/* time */
 			case 'a': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "pm" : "am"); break;
diff --git a/ext/date/php_date.h b/ext/date/php_date.h
index 4e07c8f..33328fd 100644
--- a/ext/date/php_date.h
+++ b/ext/date/php_date.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_date.h,v 1.17.2.11.2.5 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: php_date.h,v 1.17.2.11.2.6 2009/05/31 20:43:57 stas Exp $ */
 
 #ifndef PHP_DATE_H
 #define PHP_DATE_H
@@ -87,7 +87,7 @@ PHP_MINFO_FUNCTION(date);
 ZEND_BEGIN_MODULE_GLOBALS(date)
 	char      *default_timezone;
 	char      *timezone;
-	HashTable  tzcache;
+	HashTable *tzcache;
 ZEND_END_MODULE_GLOBALS(date)
 
 #ifdef ZTS
diff --git a/ext/date/tests/DateTimeZone_clone_basic1.phpt b/ext/date/tests/DateTimeZone_clone_basic1.phpt
new file mode 100644
index 0000000..6de5d4b
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_clone_basic1.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test clone on DateTimeZone objects
+--FILE--
+<?php
+
+//Set the default time zone 
+date_default_timezone_set('Europe/London');
+
+echo "*** Testing clone on DateTime objects ***\n";
+
+// Create a DateTimeZone object..
+$orig =  new DateTimeZone("GMT");
+
+// ..create a clone of it ..Clone 
+$clone = clone $orig;
+
+var_dump($orig);
+var_dump($clone); 
+
+if ($clone != $orig) { 
+	echo "TEST FAILED : objects not equal\n"; 
+}else if ($clone === $orig) { 
+	echo "TEST FAILED : objects identical\n"; 
+} else {
+	echo "TEST PASSED : Objects equal but not indetical\n"; 
+}		
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone on DateTime objects ***
+object(DateTimeZone)#%d (0) {
+}
+object(DateTimeZone)#%d (0) {
+}
+TEST PASSED : Objects equal but not indetical
+===DONE===
+
+
diff --git a/ext/date/tests/DateTimeZone_clone_basic2.phpt b/ext/date/tests/DateTimeZone_clone_basic2.phpt
new file mode 100644
index 0000000..a499510
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_clone_basic2.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Testing clone on objects whoose class derived from DateTimeZone class 
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+class DateTimeZoneExt1 extends DateTimeZone {
+	public $property1 = 99;
+	public $property2 = "Hello";
+}
+
+class DateTimeZoneExt2 extends DateTimeZoneExt1 {
+	public $property3 = true;
+	public $property4 = 10.5;
+}
+
+echo "*** Testing clone on objects whoose class derived from DateTimeZone class ***\n";
+
+$d1 = new DateTimeZoneExt1("Europe/London");
+var_dump($d1);
+$d1_clone = clone $d1;
+var_dump($d1_clone);
+
+$d2 = new DateTimeZoneExt2("Europe/London");
+var_dump($d2);
+$d2_clone = clone $d2;
+var_dump($d2_clone);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone on objects whoose class derived from DateTimeZone class ***
+object(DateTimeZoneExt1)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+object(DateTimeZoneExt1)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+object(DateTimeZoneExt2)#%d (4) {
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+object(DateTimeZoneExt2)#%d (4) {
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_clone_basic3.phpt b/ext/date/tests/DateTimeZone_clone_basic3.phpt
new file mode 100644
index 0000000..e85f42e
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_clone_basic3.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test clone of DateTimeZOne objects
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing clone on DateTime objects ***\n";
+
+echo "\n-- Create a DateTimeZone object --\n";
+$d1 = new DateTimeZone("Europe/London");
+var_dump($d1);
+echo "\n-- Add some properties --\n";
+$d1->property1 = 99;
+$d1->property2 = "Hello";
+var_dump($d1);
+echo "\n-- clone it --\n";
+$d1_clone = clone $d1;
+var_dump($d1_clone);
+echo "\n-- Add some more properties --\n";
+$d1_clone->property3 = true;
+$d1_clone->property4 = 10.5;
+var_dump($d1_clone);
+echo "\n-- clone it --\n";
+$d2_clone = clone $d1_clone;
+var_dump($d2_clone);
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone on DateTime objects ***
+
+-- Create a DateTimeZone object --
+object(DateTimeZone)#%d (0) {
+}
+
+-- Add some properties --
+object(DateTimeZone)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+
+-- clone it --
+object(DateTimeZone)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+
+-- Add some more properties --
+object(DateTimeZone)#%d (4) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+}
+
+-- clone it --
+object(DateTimeZone)#%d (4) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+}
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_clone_basic4.phpt b/ext/date/tests/DateTimeZone_clone_basic4.phpt
new file mode 100644
index 0000000..a295b91
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_clone_basic4.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test clone of DateTimeZone derived objects with __clone magic method
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+class DateTimeZoneExt1 extends DateTimeZone {
+	public function __clone() {
+		echo "-- DateTimeExt1 __clone magic method called --\n"; 
+	}
+}
+
+echo "*** Testing clone of objects derived from DateTimeZone class with __clone magic method***\n";
+
+$d1 = new DateTimeZoneExt1("America/New_York");
+$d1_clone = clone $d1;
+
+//verify clone by calling method on new object
+var_dump( $d1_clone->getName() ); 
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone of objects derived from DateTimeZone class with __clone magic method***
+-- DateTimeExt1 __clone magic method called --
+string(16) "America/New_York"
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_compare_basic1.phpt b/ext/date/tests/DateTimeZone_compare_basic1.phpt
new file mode 100644
index 0000000..f3648cb
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_compare_basic1.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test of compare object handler for DateTime objects
+--FILE--
+<?php 
+
+// NB: DateTimeZone class does not define a customized compare class handler so standard object handler will be used  
+
+echo "Simple test for DateTimeZone compare object handler\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+class DateTimeZoneExt1 extends DateTimeZone {
+}
+
+class DateTimeZoneExt2 extends DateTimeZone{
+	public $foo = "Hello";
+	private $bar = 99;
+}
+
+class DateTimeZoneExt3 extends DateTimeZoneExt2 {
+}
+
+$obj1 = new DateTimeZone("Europe/London");
+$obj2 = new DateTimeZoneExt1("Europe/London");
+$obj3 = new DateTimeZoneExt2("Europe/London");
+$obj4 = new DateTimeZoneExt3("Europe/London");
+
+echo "\n-- All the following tests should compare equal --\n";
+var_dump($obj1 == $obj1);
+echo "\n-- All the following tests should compare NOT equal --\n";
+var_dump($obj1 == $obj2);
+var_dump($obj1 == $obj3);
+var_dump($obj1 == $obj4);
+var_dump($obj2 == $obj3);
+var_dump($obj2 == $obj4);
+var_dump($obj3 == $obj4);
+
+?>
+===DONE===
+--EXPECT--
+Simple test for DateTimeZone compare object handler
+
+-- All the following tests should compare equal --
+bool(true)
+
+-- All the following tests should compare NOT equal --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_construct_basic.phpt b/ext/date/tests/DateTimeZone_construct_basic.phpt
new file mode 100644
index 0000000..b681e8f
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_construct_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test new DateTimeZone() : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTimeZone::__construct  ( string $timezone  )
+ * Description: Returns new DateTimeZone object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing new DateTimeZone() : basic functionality ***\n";
+
+var_dump( new DateTimeZone("GMT") );
+var_dump( new DateTimeZone("Europe/London") );
+var_dump( new DateTimeZone("America/Los_Angeles") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing new DateTimeZone() : basic functionality ***
+object(DateTimeZone)#%d (0) {
+}
+object(DateTimeZone)#%d (0) {
+}
+object(DateTimeZone)#%d (0) {
+}
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_construct_error.phpt b/ext/date/tests/DateTimeZone_construct_error.phpt
new file mode 100644
index 0000000..79dc3c5
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_construct_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test new DateTimeZone() : error conditions 
+--FILE--
+<?php
+/* Prototype  : DateTimeZone::__construct  ( string $timezone  )
+ * Description: Returns new DateTimeZone object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+echo "*** Testing DateTimeZone() : error conditions ***\n";
+
+echo "\n-- Testing new DateTimeZone() with more than expected no. of arguments --\n";
+$timezone = "GMT";
+$extra_arg = 99;
+var_dump( new DateTimeZone($timezone, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTimeZone() : error conditions ***
+
+-- Testing new DateTimeZone() with more than expected no. of arguments --
+
+Fatal error: Uncaught exception 'Exception' with message 'DateTimeZone::__construct() expects exactly 1 parameter, 2 given' in %s:%d
+Stack trace:
+#0 %s(%d): DateTimeZone->__construct('GMT', 99)
+#1 {main}
+  thrown in %s on line %d
+  
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_construct_variation1.phpt b/ext/date/tests/DateTimeZone_construct_variation1.phpt
new file mode 100644
index 0000000..65e575e
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_construct_variation1.phpt
@@ -0,0 +1,200 @@
+--TEST--
+Test DateTime::__construct() function : usage variation - Passing unexpected values to first argument $timezone.
+--FILE--
+<?php
+/* Prototype  : DateTimeZone::__construct  ( string $timezone  )
+ * Description: Returns new DateTimeZone object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing DateTime::__construct() : usage variation -  unexpected values to first argument \$timezone***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+foreach($inputs as $variation =>$timezone) {
+      echo "\n-- $variation --\n";
+      try {
+      	var_dump( new DateTimezone($timezone) );
+      } catch(Exception $e) {
+      	  $msg = $e->getMessage();
+      	  echo "FAILED: " . $msg . "\n";
+      }	
+      
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::__construct() : usage variation -  unexpected values to first argument $timezone***
+
+-- int 0 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (0)
+
+-- int 1 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (1)
+
+-- int 12345 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (12345)
+
+-- int -12345 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (-12345)
+
+-- float 10.5 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (10.5)
+
+-- float -10.5 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (-10.5)
+
+-- float .5 --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (0.5)
+
+-- empty array --
+FAILED: DateTimeZone::__construct() expects parameter 1 to be string, array given
+
+-- int indexed array --
+FAILED: DateTimeZone::__construct() expects parameter 1 to be string, array given
+
+-- associative array --
+FAILED: DateTimeZone::__construct() expects parameter 1 to be string, array given
+
+-- nested arrays --
+FAILED: DateTimeZone::__construct() expects parameter 1 to be string, array given
+
+-- uppercase NULL --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- lowercase null --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- lowercase true --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (1)
+
+-- lowercase false --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- uppercase TRUE --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (1)
+
+-- uppercase FALSE --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- empty string DQ --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- empty string SQ --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- string DQ --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (string)
+
+-- string SQ --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (string)
+
+-- mixed case string --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (sTrInG)
+
+-- heredoc --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (hello world)
+
+-- instance of classWithToString --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone (Class A object)
+
+-- instance of classWithoutToString --
+FAILED: DateTimeZone::__construct() expects parameter 1 to be string, object given
+
+-- undefined var --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- unset var --
+FAILED: DateTimeZone::__construct(): Unknown or bad timezone ()
+
+-- resource --
+FAILED: DateTimeZone::__construct() expects parameter 1 to be string, resource given
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_extends_basic1.phpt b/ext/date/tests/DateTimeZone_extends_basic1.phpt
new file mode 100644
index 0000000..afc2ed6
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_extends_basic1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test DateTimeZone class inheritance  
+--FILE--
+<?php
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing basic DateTimeZone inheritance() ***\n";
+
+class DateTimeZoneExt extends DateTimeZone
+{
+	public function __toString()
+	{
+		return parent::getName();
+	}
+}
+
+echo "\n-- Create an instance of DateTimeZoneExt --\n";
+$d = new DateTimeZoneExt("America/Los_Angeles");
+
+echo "\n-- Invoke __toString --\n";
+echo $d . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing basic DateTimeZone inheritance() ***
+
+-- Create an instance of DateTimeZoneExt --
+
+-- Invoke __toString --
+America/Los_Angeles
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_getName_basic1.phpt b/ext/date/tests/DateTimeZone_getName_basic1.phpt
new file mode 100644
index 0000000..de5ca65
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getName_basic1.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test DateTimeZone::getName() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public string DateTimeZone::getName  ( void  )
+ * Description: Returns the name of the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_name_get()
+ */
+
+echo "*** Testing DateTimeZone::getName() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$tz1 = new DateTimeZone("Europe/London");
+var_dump( $tz1->getName() );
+
+$tz2 = new DateTimeZone("America/New_York");
+var_dump( $tz2->getName() );
+
+$tz3 = new DateTimeZone("America/Los_Angeles");
+var_dump( $tz3->getName() );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing DateTimeZone::getName() : basic functionality ***
+string(13) "Europe/London"
+string(16) "America/New_York"
+string(19) "America/Los_Angeles"
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_getName_error.phpt b/ext/date/tests/DateTimeZone_getName_error.phpt
new file mode 100644
index 0000000..0a87b10
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getName_error.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test DateTimeZone::getName() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : public string DateTimeZone::getName  ( void  )
+ * Description: Returns the name of the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_name_get()
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$tz = new DateTimeZone("Europe/London");
+ 
+echo "*** Testing DateTimeZone::getName() : error conditions ***\n";
+
+echo "\n-- Testing DateTimeZone::getName() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( $tz->getName($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTimeZone::getName() : error conditions ***
+
+-- Testing DateTimeZone::getName() function with more than expected no. of arguments --
+
+Warning: DateTimeZone::getName() expects exactly 0 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_getOffset_basic1.phpt b/ext/date/tests/DateTimeZone_getOffset_basic1.phpt
new file mode 100644
index 0000000..ea3c280
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getOffset_basic1.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test DateTimeZone::getOffset() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : int DateTimeZone::getOffset  ( DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_offset_get()
+ */
+
+echo "*** Testing DateTimeZone::getOffset() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$tz1 = new DateTimeZone("Europe/London");
+$date = new DateTime("GMT");
+var_dump( $tz1->getOffset($date) );
+
+$tz2 = new DateTimeZone("America/New_York");
+var_dump( $tz2->getOffset($date) );
+
+$tz3 = new DateTimeZone("America/Los_Angeles");
+var_dump( $tz3->getOffset($date) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTimeZone::getOffset() : basic functionality ***
+%rint\(0\)|int\(3600\)%r
+%rint\(-18000\)|int\(-14400\)%r
+%rint\(-28800\)|int\(-25200\)%r
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_getOffset_error.phpt b/ext/date/tests/DateTimeZone_getOffset_error.phpt
new file mode 100644
index 0000000..56e45b7
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getOffset_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test DateTimeZone::getOffset() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : int DateTimeZone::getOffset  ( DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_offset_get()
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$tz = new DateTimeZone("Europe/London");
+$date = date_create("GMT");
+ 
+echo "*** Testing DateTimeZone::getOffset() : error conditions ***\n";
+
+echo "\n-- Testing DateTimeZone::getOffset() function with zero arguments --\n";
+var_dump( $tz->getOffset() );
+
+echo "\n-- Testing DateTimeZone::getOffset() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( $tz->getOffset($date, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTimeZone::getOffset() : error conditions ***
+
+-- Testing DateTimeZone::getOffset() function with zero arguments --
+
+Warning: DateTimeZone::getOffset() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing DateTimeZone::getOffset() function with more than expected no. of arguments --
+
+Warning: DateTimeZone::getOffset() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_getOffset_variation1.phpt b/ext/date/tests/DateTimeZone_getOffset_variation1.phpt
new file mode 100644
index 0000000..a86d5e1
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getOffset_variation1.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test DateTimeZone::getOffset() function : usage variation - Passing unexpected values to first argument $datetime.
+--FILE--
+<?php
+/* Prototype  : int DateTimeZone::getOffset  ( DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_offset_get()
+ */
+ 
+echo "*** Testing DateTimeZone::getOffset() : usage variation -  unexpected values to first argument \$datetime***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$timezone = new DateTimezone("Europe/London");
+
+foreach($inputs as $variation =>$datetime) {
+    echo "\n-- $variation --\n";
+   	var_dump( $timezone->getOffset($datetime) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTimeZone::getOffset() : usage variation -  unexpected values to first argument $datetime***
+
+-- int 0 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: DateTimeZone::getOffset() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt b/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt
new file mode 100644
index 0000000..b6e3ee2
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test DateTimeZone::getTransitions() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array DateTimeZone::getTransitions  ()
+ * Description: Returns all transitions for the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_transitions_get()
+ */
+
+echo "*** Testing DateTimeZone::getTransitions() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+// Create a DateTimeZone object
+$tz = new DateTimeZone("Europe/London");
+
+$tran = $tz->getTransitions();
+
+if (!is_array($tran)) {
+	echo "TEST FAILED: Expected an array\n";
+}
+
+echo "\n-- Total number of transitions: " . count($tran). " --\n"; 
+
+echo "\n-- Format a sample entry for Spring 1963 --\n";
+var_dump( $tran[96] );	
+
+?>
+===DONE===
+--EXPECT--
+*** Testing DateTimeZone::getTransitions() : basic functionality ***
+
+-- Total number of transitions: 242 --
+
+-- Format a sample entry for Spring 1963 --
+array(5) {
+  ["ts"]=>
+  int(-213228000)
+  ["time"]=>
+  string(24) "1963-03-31T02:00:00+0000"
+  ["offset"]=>
+  int(3600)
+  ["isdst"]=>
+  bool(true)
+  ["abbr"]=>
+  string(3) "BST"
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_getTransitions_error.phpt b/ext/date/tests/DateTimeZone_getTransitions_error.phpt
new file mode 100644
index 0000000..555ded1
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_getTransitions_error.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test DateTimeZone::getTransitions() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : array DateTimeZone::getTransitions ()
+ * Description: Returns all transitions for the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_transitions_get()
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$tz = new DateTimeZone("Europe/London");
+ 
+echo "*** Testing DateTimeZone::getTransitions() : error conditions ***\n";
+
+echo "\n-- Testing DateTimeZone::getTransitions() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( $tz->getTransitions($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTimeZone::getTransitions() : error conditions ***
+
+-- Testing DateTimeZone::getTransitions() function with more than expected no. of arguments --
+
+Warning: DateTimeZone::getTransitions() expects exactly 0 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt b/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt
new file mode 100644
index 0000000..bd6344f
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_listAbbreviations_basic1.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test DateTimeZone::listAbbreviations() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array DateTimeZone::listAbbreviations  ( void  )
+ * Description: Returns associative array containing dst, offset and the timezone name
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_abbreviations_list
+ */
+
+echo "*** Testing DateTimeZone::listAbbreviations() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$abbr = DateTimeZone::listAbbreviations();
+
+var_dump( gettype($abbr) );
+var_dump( count($abbr) );
+
+echo "\n-- Format a sample entry --\n";
+var_dump( $abbr["acst"] );	
+
+?>
+===DONE===
+--EXPECT--
+*** Testing DateTimeZone::listAbbreviations() : basic functionality ***
+string(5) "array"
+int(338)
+
+-- Format a sample entry --
+array(4) {
+  [0]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(18) "America/Porto_Acre"
+  }
+  [1]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(16) "America/Eirunepe"
+  }
+  [2]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(18) "America/Rio_Branco"
+  }
+  [3]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(11) "Brazil/Acre"
+  }
+}
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_listIdentifiers_basic1.phpt b/ext/date/tests/DateTimeZone_listIdentifiers_basic1.phpt
new file mode 100644
index 0000000..e9b6116
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_listIdentifiers_basic1.phpt
@@ -0,0 +1,1144 @@
+--TEST--
+Test DateTimeZone::listIdentifiers function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array DateTimeZone::listIdentifiers ( void )
+ * Description: Returns numerically index array with all timezone identifiers  
+ * Source code: ext/date/php_date.c
+ * Alias to functions: timezone_identifiers_list
+ */
+
+echo "*** Testing DateTimeZone::listIdentifiers() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+var_dump( DateTimeZone::listIdentifiers() );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing DateTimeZone::listIdentifiers() : basic functionality ***
+array(560) {
+  [0]=>
+  string(14) "Africa/Abidjan"
+  [1]=>
+  string(12) "Africa/Accra"
+  [2]=>
+  string(18) "Africa/Addis_Ababa"
+  [3]=>
+  string(14) "Africa/Algiers"
+  [4]=>
+  string(13) "Africa/Asmara"
+  [5]=>
+  string(13) "Africa/Asmera"
+  [6]=>
+  string(13) "Africa/Bamako"
+  [7]=>
+  string(13) "Africa/Bangui"
+  [8]=>
+  string(13) "Africa/Banjul"
+  [9]=>
+  string(13) "Africa/Bissau"
+  [10]=>
+  string(15) "Africa/Blantyre"
+  [11]=>
+  string(18) "Africa/Brazzaville"
+  [12]=>
+  string(16) "Africa/Bujumbura"
+  [13]=>
+  string(12) "Africa/Cairo"
+  [14]=>
+  string(17) "Africa/Casablanca"
+  [15]=>
+  string(12) "Africa/Ceuta"
+  [16]=>
+  string(14) "Africa/Conakry"
+  [17]=>
+  string(12) "Africa/Dakar"
+  [18]=>
+  string(20) "Africa/Dar_es_Salaam"
+  [19]=>
+  string(15) "Africa/Djibouti"
+  [20]=>
+  string(13) "Africa/Douala"
+  [21]=>
+  string(15) "Africa/El_Aaiun"
+  [22]=>
+  string(15) "Africa/Freetown"
+  [23]=>
+  string(15) "Africa/Gaborone"
+  [24]=>
+  string(13) "Africa/Harare"
+  [25]=>
+  string(19) "Africa/Johannesburg"
+  [26]=>
+  string(14) "Africa/Kampala"
+  [27]=>
+  string(15) "Africa/Khartoum"
+  [28]=>
+  string(13) "Africa/Kigali"
+  [29]=>
+  string(15) "Africa/Kinshasa"
+  [30]=>
+  string(12) "Africa/Lagos"
+  [31]=>
+  string(17) "Africa/Libreville"
+  [32]=>
+  string(11) "Africa/Lome"
+  [33]=>
+  string(13) "Africa/Luanda"
+  [34]=>
+  string(17) "Africa/Lubumbashi"
+  [35]=>
+  string(13) "Africa/Lusaka"
+  [36]=>
+  string(13) "Africa/Malabo"
+  [37]=>
+  string(13) "Africa/Maputo"
+  [38]=>
+  string(13) "Africa/Maseru"
+  [39]=>
+  string(14) "Africa/Mbabane"
+  [40]=>
+  string(16) "Africa/Mogadishu"
+  [41]=>
+  string(15) "Africa/Monrovia"
+  [42]=>
+  string(14) "Africa/Nairobi"
+  [43]=>
+  string(15) "Africa/Ndjamena"
+  [44]=>
+  string(13) "Africa/Niamey"
+  [45]=>
+  string(17) "Africa/Nouakchott"
+  [46]=>
+  string(18) "Africa/Ouagadougou"
+  [47]=>
+  string(17) "Africa/Porto-Novo"
+  [48]=>
+  string(15) "Africa/Sao_Tome"
+  [49]=>
+  string(15) "Africa/Timbuktu"
+  [50]=>
+  string(14) "Africa/Tripoli"
+  [51]=>
+  string(12) "Africa/Tunis"
+  [52]=>
+  string(15) "Africa/Windhoek"
+  [53]=>
+  string(12) "America/Adak"
+  [54]=>
+  string(17) "America/Anchorage"
+  [55]=>
+  string(16) "America/Anguilla"
+  [56]=>
+  string(15) "America/Antigua"
+  [57]=>
+  string(17) "America/Araguaina"
+  [58]=>
+  string(30) "America/Argentina/Buenos_Aires"
+  [59]=>
+  string(27) "America/Argentina/Catamarca"
+  [60]=>
+  string(32) "America/Argentina/ComodRivadavia"
+  [61]=>
+  string(25) "America/Argentina/Cordoba"
+  [62]=>
+  string(23) "America/Argentina/Jujuy"
+  [63]=>
+  string(26) "America/Argentina/La_Rioja"
+  [64]=>
+  string(25) "America/Argentina/Mendoza"
+  [65]=>
+  string(30) "America/Argentina/Rio_Gallegos"
+  [66]=>
+  string(23) "America/Argentina/Salta"
+  [67]=>
+  string(26) "America/Argentina/San_Juan"
+  [68]=>
+  string(26) "America/Argentina/San_Luis"
+  [69]=>
+  string(25) "America/Argentina/Tucuman"
+  [70]=>
+  string(25) "America/Argentina/Ushuaia"
+  [71]=>
+  string(13) "America/Aruba"
+  [72]=>
+  string(16) "America/Asuncion"
+  [73]=>
+  string(16) "America/Atikokan"
+  [74]=>
+  string(12) "America/Atka"
+  [75]=>
+  string(13) "America/Bahia"
+  [76]=>
+  string(16) "America/Barbados"
+  [77]=>
+  string(13) "America/Belem"
+  [78]=>
+  string(14) "America/Belize"
+  [79]=>
+  string(20) "America/Blanc-Sablon"
+  [80]=>
+  string(17) "America/Boa_Vista"
+  [81]=>
+  string(14) "America/Bogota"
+  [82]=>
+  string(13) "America/Boise"
+  [83]=>
+  string(20) "America/Buenos_Aires"
+  [84]=>
+  string(21) "America/Cambridge_Bay"
+  [85]=>
+  string(20) "America/Campo_Grande"
+  [86]=>
+  string(14) "America/Cancun"
+  [87]=>
+  string(15) "America/Caracas"
+  [88]=>
+  string(17) "America/Catamarca"
+  [89]=>
+  string(15) "America/Cayenne"
+  [90]=>
+  string(14) "America/Cayman"
+  [91]=>
+  string(15) "America/Chicago"
+  [92]=>
+  string(17) "America/Chihuahua"
+  [93]=>
+  string(21) "America/Coral_Harbour"
+  [94]=>
+  string(15) "America/Cordoba"
+  [95]=>
+  string(18) "America/Costa_Rica"
+  [96]=>
+  string(14) "America/Cuiaba"
+  [97]=>
+  string(15) "America/Curacao"
+  [98]=>
+  string(20) "America/Danmarkshavn"
+  [99]=>
+  string(14) "America/Dawson"
+  [100]=>
+  string(20) "America/Dawson_Creek"
+  [101]=>
+  string(14) "America/Denver"
+  [102]=>
+  string(15) "America/Detroit"
+  [103]=>
+  string(16) "America/Dominica"
+  [104]=>
+  string(16) "America/Edmonton"
+  [105]=>
+  string(16) "America/Eirunepe"
+  [106]=>
+  string(19) "America/El_Salvador"
+  [107]=>
+  string(16) "America/Ensenada"
+  [108]=>
+  string(18) "America/Fort_Wayne"
+  [109]=>
+  string(17) "America/Fortaleza"
+  [110]=>
+  string(17) "America/Glace_Bay"
+  [111]=>
+  string(15) "America/Godthab"
+  [112]=>
+  string(17) "America/Goose_Bay"
+  [113]=>
+  string(18) "America/Grand_Turk"
+  [114]=>
+  string(15) "America/Grenada"
+  [115]=>
+  string(18) "America/Guadeloupe"
+  [116]=>
+  string(17) "America/Guatemala"
+  [117]=>
+  string(17) "America/Guayaquil"
+  [118]=>
+  string(14) "America/Guyana"
+  [119]=>
+  string(15) "America/Halifax"
+  [120]=>
+  string(14) "America/Havana"
+  [121]=>
+  string(18) "America/Hermosillo"
+  [122]=>
+  string(28) "America/Indiana/Indianapolis"
+  [123]=>
+  string(20) "America/Indiana/Knox"
+  [124]=>
+  string(23) "America/Indiana/Marengo"
+  [125]=>
+  string(26) "America/Indiana/Petersburg"
+  [126]=>
+  string(25) "America/Indiana/Tell_City"
+  [127]=>
+  string(21) "America/Indiana/Vevay"
+  [128]=>
+  string(25) "America/Indiana/Vincennes"
+  [129]=>
+  string(23) "America/Indiana/Winamac"
+  [130]=>
+  string(20) "America/Indianapolis"
+  [131]=>
+  string(14) "America/Inuvik"
+  [132]=>
+  string(15) "America/Iqaluit"
+  [133]=>
+  string(15) "America/Jamaica"
+  [134]=>
+  string(13) "America/Jujuy"
+  [135]=>
+  string(14) "America/Juneau"
+  [136]=>
+  string(27) "America/Kentucky/Louisville"
+  [137]=>
+  string(27) "America/Kentucky/Monticello"
+  [138]=>
+  string(15) "America/Knox_IN"
+  [139]=>
+  string(14) "America/La_Paz"
+  [140]=>
+  string(12) "America/Lima"
+  [141]=>
+  string(19) "America/Los_Angeles"
+  [142]=>
+  string(18) "America/Louisville"
+  [143]=>
+  string(14) "America/Maceio"
+  [144]=>
+  string(15) "America/Managua"
+  [145]=>
+  string(14) "America/Manaus"
+  [146]=>
+  string(15) "America/Marigot"
+  [147]=>
+  string(18) "America/Martinique"
+  [148]=>
+  string(16) "America/Mazatlan"
+  [149]=>
+  string(15) "America/Mendoza"
+  [150]=>
+  string(17) "America/Menominee"
+  [151]=>
+  string(14) "America/Merida"
+  [152]=>
+  string(19) "America/Mexico_City"
+  [153]=>
+  string(16) "America/Miquelon"
+  [154]=>
+  string(15) "America/Moncton"
+  [155]=>
+  string(17) "America/Monterrey"
+  [156]=>
+  string(18) "America/Montevideo"
+  [157]=>
+  string(16) "America/Montreal"
+  [158]=>
+  string(18) "America/Montserrat"
+  [159]=>
+  string(14) "America/Nassau"
+  [160]=>
+  string(16) "America/New_York"
+  [161]=>
+  string(15) "America/Nipigon"
+  [162]=>
+  string(12) "America/Nome"
+  [163]=>
+  string(15) "America/Noronha"
+  [164]=>
+  string(27) "America/North_Dakota/Center"
+  [165]=>
+  string(30) "America/North_Dakota/New_Salem"
+  [166]=>
+  string(14) "America/Panama"
+  [167]=>
+  string(19) "America/Pangnirtung"
+  [168]=>
+  string(18) "America/Paramaribo"
+  [169]=>
+  string(15) "America/Phoenix"
+  [170]=>
+  string(22) "America/Port-au-Prince"
+  [171]=>
+  string(21) "America/Port_of_Spain"
+  [172]=>
+  string(18) "America/Porto_Acre"
+  [173]=>
+  string(19) "America/Porto_Velho"
+  [174]=>
+  string(19) "America/Puerto_Rico"
+  [175]=>
+  string(19) "America/Rainy_River"
+  [176]=>
+  string(20) "America/Rankin_Inlet"
+  [177]=>
+  string(14) "America/Recife"
+  [178]=>
+  string(14) "America/Regina"
+  [179]=>
+  string(16) "America/Resolute"
+  [180]=>
+  string(18) "America/Rio_Branco"
+  [181]=>
+  string(15) "America/Rosario"
+  [182]=>
+  string(16) "America/Santarem"
+  [183]=>
+  string(16) "America/Santiago"
+  [184]=>
+  string(21) "America/Santo_Domingo"
+  [185]=>
+  string(17) "America/Sao_Paulo"
+  [186]=>
+  string(20) "America/Scoresbysund"
+  [187]=>
+  string(16) "America/Shiprock"
+  [188]=>
+  string(21) "America/St_Barthelemy"
+  [189]=>
+  string(16) "America/St_Johns"
+  [190]=>
+  string(16) "America/St_Kitts"
+  [191]=>
+  string(16) "America/St_Lucia"
+  [192]=>
+  string(17) "America/St_Thomas"
+  [193]=>
+  string(18) "America/St_Vincent"
+  [194]=>
+  string(21) "America/Swift_Current"
+  [195]=>
+  string(19) "America/Tegucigalpa"
+  [196]=>
+  string(13) "America/Thule"
+  [197]=>
+  string(19) "America/Thunder_Bay"
+  [198]=>
+  string(15) "America/Tijuana"
+  [199]=>
+  string(15) "America/Toronto"
+  [200]=>
+  string(15) "America/Tortola"
+  [201]=>
+  string(17) "America/Vancouver"
+  [202]=>
+  string(14) "America/Virgin"
+  [203]=>
+  string(18) "America/Whitehorse"
+  [204]=>
+  string(16) "America/Winnipeg"
+  [205]=>
+  string(15) "America/Yakutat"
+  [206]=>
+  string(19) "America/Yellowknife"
+  [207]=>
+  string(16) "Antarctica/Casey"
+  [208]=>
+  string(16) "Antarctica/Davis"
+  [209]=>
+  string(25) "Antarctica/DumontDUrville"
+  [210]=>
+  string(17) "Antarctica/Mawson"
+  [211]=>
+  string(18) "Antarctica/McMurdo"
+  [212]=>
+  string(17) "Antarctica/Palmer"
+  [213]=>
+  string(18) "Antarctica/Rothera"
+  [214]=>
+  string(21) "Antarctica/South_Pole"
+  [215]=>
+  string(16) "Antarctica/Syowa"
+  [216]=>
+  string(17) "Antarctica/Vostok"
+  [217]=>
+  string(19) "Arctic/Longyearbyen"
+  [218]=>
+  string(9) "Asia/Aden"
+  [219]=>
+  string(11) "Asia/Almaty"
+  [220]=>
+  string(10) "Asia/Amman"
+  [221]=>
+  string(11) "Asia/Anadyr"
+  [222]=>
+  string(10) "Asia/Aqtau"
+  [223]=>
+  string(11) "Asia/Aqtobe"
+  [224]=>
+  string(13) "Asia/Ashgabat"
+  [225]=>
+  string(14) "Asia/Ashkhabad"
+  [226]=>
+  string(12) "Asia/Baghdad"
+  [227]=>
+  string(12) "Asia/Bahrain"
+  [228]=>
+  string(9) "Asia/Baku"
+  [229]=>
+  string(12) "Asia/Bangkok"
+  [230]=>
+  string(11) "Asia/Beirut"
+  [231]=>
+  string(12) "Asia/Bishkek"
+  [232]=>
+  string(11) "Asia/Brunei"
+  [233]=>
+  string(13) "Asia/Calcutta"
+  [234]=>
+  string(15) "Asia/Choibalsan"
+  [235]=>
+  string(14) "Asia/Chongqing"
+  [236]=>
+  string(14) "Asia/Chungking"
+  [237]=>
+  string(12) "Asia/Colombo"
+  [238]=>
+  string(10) "Asia/Dacca"
+  [239]=>
+  string(13) "Asia/Damascus"
+  [240]=>
+  string(10) "Asia/Dhaka"
+  [241]=>
+  string(9) "Asia/Dili"
+  [242]=>
+  string(10) "Asia/Dubai"
+  [243]=>
+  string(13) "Asia/Dushanbe"
+  [244]=>
+  string(9) "Asia/Gaza"
+  [245]=>
+  string(11) "Asia/Harbin"
+  [246]=>
+  string(16) "Asia/Ho_Chi_Minh"
+  [247]=>
+  string(14) "Asia/Hong_Kong"
+  [248]=>
+  string(9) "Asia/Hovd"
+  [249]=>
+  string(12) "Asia/Irkutsk"
+  [250]=>
+  string(13) "Asia/Istanbul"
+  [251]=>
+  string(12) "Asia/Jakarta"
+  [252]=>
+  string(13) "Asia/Jayapura"
+  [253]=>
+  string(14) "Asia/Jerusalem"
+  [254]=>
+  string(10) "Asia/Kabul"
+  [255]=>
+  string(14) "Asia/Kamchatka"
+  [256]=>
+  string(12) "Asia/Karachi"
+  [257]=>
+  string(12) "Asia/Kashgar"
+  [258]=>
+  string(14) "Asia/Kathmandu"
+  [259]=>
+  string(13) "Asia/Katmandu"
+  [260]=>
+  string(12) "Asia/Kolkata"
+  [261]=>
+  string(16) "Asia/Krasnoyarsk"
+  [262]=>
+  string(17) "Asia/Kuala_Lumpur"
+  [263]=>
+  string(12) "Asia/Kuching"
+  [264]=>
+  string(11) "Asia/Kuwait"
+  [265]=>
+  string(10) "Asia/Macao"
+  [266]=>
+  string(10) "Asia/Macau"
+  [267]=>
+  string(12) "Asia/Magadan"
+  [268]=>
+  string(13) "Asia/Makassar"
+  [269]=>
+  string(11) "Asia/Manila"
+  [270]=>
+  string(11) "Asia/Muscat"
+  [271]=>
+  string(12) "Asia/Nicosia"
+  [272]=>
+  string(16) "Asia/Novosibirsk"
+  [273]=>
+  string(9) "Asia/Omsk"
+  [274]=>
+  string(9) "Asia/Oral"
+  [275]=>
+  string(15) "Asia/Phnom_Penh"
+  [276]=>
+  string(14) "Asia/Pontianak"
+  [277]=>
+  string(14) "Asia/Pyongyang"
+  [278]=>
+  string(10) "Asia/Qatar"
+  [279]=>
+  string(14) "Asia/Qyzylorda"
+  [280]=>
+  string(12) "Asia/Rangoon"
+  [281]=>
+  string(11) "Asia/Riyadh"
+  [282]=>
+  string(11) "Asia/Saigon"
+  [283]=>
+  string(13) "Asia/Sakhalin"
+  [284]=>
+  string(14) "Asia/Samarkand"
+  [285]=>
+  string(10) "Asia/Seoul"
+  [286]=>
+  string(13) "Asia/Shanghai"
+  [287]=>
+  string(14) "Asia/Singapore"
+  [288]=>
+  string(11) "Asia/Taipei"
+  [289]=>
+  string(13) "Asia/Tashkent"
+  [290]=>
+  string(12) "Asia/Tbilisi"
+  [291]=>
+  string(11) "Asia/Tehran"
+  [292]=>
+  string(13) "Asia/Tel_Aviv"
+  [293]=>
+  string(11) "Asia/Thimbu"
+  [294]=>
+  string(12) "Asia/Thimphu"
+  [295]=>
+  string(10) "Asia/Tokyo"
+  [296]=>
+  string(18) "Asia/Ujung_Pandang"
+  [297]=>
+  string(16) "Asia/Ulaanbaatar"
+  [298]=>
+  string(15) "Asia/Ulan_Bator"
+  [299]=>
+  string(11) "Asia/Urumqi"
+  [300]=>
+  string(14) "Asia/Vientiane"
+  [301]=>
+  string(16) "Asia/Vladivostok"
+  [302]=>
+  string(12) "Asia/Yakutsk"
+  [303]=>
+  string(18) "Asia/Yekaterinburg"
+  [304]=>
+  string(12) "Asia/Yerevan"
+  [305]=>
+  string(15) "Atlantic/Azores"
+  [306]=>
+  string(16) "Atlantic/Bermuda"
+  [307]=>
+  string(15) "Atlantic/Canary"
+  [308]=>
+  string(19) "Atlantic/Cape_Verde"
+  [309]=>
+  string(15) "Atlantic/Faeroe"
+  [310]=>
+  string(14) "Atlantic/Faroe"
+  [311]=>
+  string(18) "Atlantic/Jan_Mayen"
+  [312]=>
+  string(16) "Atlantic/Madeira"
+  [313]=>
+  string(18) "Atlantic/Reykjavik"
+  [314]=>
+  string(22) "Atlantic/South_Georgia"
+  [315]=>
+  string(18) "Atlantic/St_Helena"
+  [316]=>
+  string(16) "Atlantic/Stanley"
+  [317]=>
+  string(13) "Australia/ACT"
+  [318]=>
+  string(18) "Australia/Adelaide"
+  [319]=>
+  string(18) "Australia/Brisbane"
+  [320]=>
+  string(21) "Australia/Broken_Hill"
+  [321]=>
+  string(18) "Australia/Canberra"
+  [322]=>
+  string(16) "Australia/Currie"
+  [323]=>
+  string(16) "Australia/Darwin"
+  [324]=>
+  string(15) "Australia/Eucla"
+  [325]=>
+  string(16) "Australia/Hobart"
+  [326]=>
+  string(13) "Australia/LHI"
+  [327]=>
+  string(18) "Australia/Lindeman"
+  [328]=>
+  string(19) "Australia/Lord_Howe"
+  [329]=>
+  string(19) "Australia/Melbourne"
+  [330]=>
+  string(15) "Australia/North"
+  [331]=>
+  string(13) "Australia/NSW"
+  [332]=>
+  string(15) "Australia/Perth"
+  [333]=>
+  string(20) "Australia/Queensland"
+  [334]=>
+  string(15) "Australia/South"
+  [335]=>
+  string(16) "Australia/Sydney"
+  [336]=>
+  string(18) "Australia/Tasmania"
+  [337]=>
+  string(18) "Australia/Victoria"
+  [338]=>
+  string(14) "Australia/West"
+  [339]=>
+  string(20) "Australia/Yancowinna"
+  [340]=>
+  string(11) "Brazil/Acre"
+  [341]=>
+  string(16) "Brazil/DeNoronha"
+  [342]=>
+  string(11) "Brazil/East"
+  [343]=>
+  string(11) "Brazil/West"
+  [344]=>
+  string(15) "Canada/Atlantic"
+  [345]=>
+  string(14) "Canada/Central"
+  [346]=>
+  string(24) "Canada/East-Saskatchewan"
+  [347]=>
+  string(14) "Canada/Eastern"
+  [348]=>
+  string(15) "Canada/Mountain"
+  [349]=>
+  string(19) "Canada/Newfoundland"
+  [350]=>
+  string(14) "Canada/Pacific"
+  [351]=>
+  string(19) "Canada/Saskatchewan"
+  [352]=>
+  string(12) "Canada/Yukon"
+  [353]=>
+  string(3) "CET"
+  [354]=>
+  string(17) "Chile/Continental"
+  [355]=>
+  string(18) "Chile/EasterIsland"
+  [356]=>
+  string(7) "CST6CDT"
+  [357]=>
+  string(4) "Cuba"
+  [358]=>
+  string(3) "EET"
+  [359]=>
+  string(5) "Egypt"
+  [360]=>
+  string(4) "Eire"
+  [361]=>
+  string(3) "EST"
+  [362]=>
+  string(7) "EST5EDT"
+  [363]=>
+  string(7) "Etc/GMT"
+  [364]=>
+  string(9) "Etc/GMT+0"
+  [365]=>
+  string(9) "Etc/GMT+1"
+  [366]=>
+  string(10) "Etc/GMT+10"
+  [367]=>
+  string(10) "Etc/GMT+11"
+  [368]=>
+  string(10) "Etc/GMT+12"
+  [369]=>
+  string(9) "Etc/GMT+2"
+  [370]=>
+  string(9) "Etc/GMT+3"
+  [371]=>
+  string(9) "Etc/GMT+4"
+  [372]=>
+  string(9) "Etc/GMT+5"
+  [373]=>
+  string(9) "Etc/GMT+6"
+  [374]=>
+  string(9) "Etc/GMT+7"
+  [375]=>
+  string(9) "Etc/GMT+8"
+  [376]=>
+  string(9) "Etc/GMT+9"
+  [377]=>
+  string(9) "Etc/GMT-0"
+  [378]=>
+  string(9) "Etc/GMT-1"
+  [379]=>
+  string(10) "Etc/GMT-10"
+  [380]=>
+  string(10) "Etc/GMT-11"
+  [381]=>
+  string(10) "Etc/GMT-12"
+  [382]=>
+  string(10) "Etc/GMT-13"
+  [383]=>
+  string(10) "Etc/GMT-14"
+  [384]=>
+  string(9) "Etc/GMT-2"
+  [385]=>
+  string(9) "Etc/GMT-3"
+  [386]=>
+  string(9) "Etc/GMT-4"
+  [387]=>
+  string(9) "Etc/GMT-5"
+  [388]=>
+  string(9) "Etc/GMT-6"
+  [389]=>
+  string(9) "Etc/GMT-7"
+  [390]=>
+  string(9) "Etc/GMT-8"
+  [391]=>
+  string(9) "Etc/GMT-9"
+  [392]=>
+  string(8) "Etc/GMT0"
+  [393]=>
+  string(13) "Etc/Greenwich"
+  [394]=>
+  string(7) "Etc/UCT"
+  [395]=>
+  string(13) "Etc/Universal"
+  [396]=>
+  string(7) "Etc/UTC"
+  [397]=>
+  string(8) "Etc/Zulu"
+  [398]=>
+  string(16) "Europe/Amsterdam"
+  [399]=>
+  string(14) "Europe/Andorra"
+  [400]=>
+  string(13) "Europe/Athens"
+  [401]=>
+  string(14) "Europe/Belfast"
+  [402]=>
+  string(15) "Europe/Belgrade"
+  [403]=>
+  string(13) "Europe/Berlin"
+  [404]=>
+  string(17) "Europe/Bratislava"
+  [405]=>
+  string(15) "Europe/Brussels"
+  [406]=>
+  string(16) "Europe/Bucharest"
+  [407]=>
+  string(15) "Europe/Budapest"
+  [408]=>
+  string(15) "Europe/Chisinau"
+  [409]=>
+  string(17) "Europe/Copenhagen"
+  [410]=>
+  string(13) "Europe/Dublin"
+  [411]=>
+  string(16) "Europe/Gibraltar"
+  [412]=>
+  string(15) "Europe/Guernsey"
+  [413]=>
+  string(15) "Europe/Helsinki"
+  [414]=>
+  string(18) "Europe/Isle_of_Man"
+  [415]=>
+  string(15) "Europe/Istanbul"
+  [416]=>
+  string(13) "Europe/Jersey"
+  [417]=>
+  string(18) "Europe/Kaliningrad"
+  [418]=>
+  string(11) "Europe/Kiev"
+  [419]=>
+  string(13) "Europe/Lisbon"
+  [420]=>
+  string(16) "Europe/Ljubljana"
+  [421]=>
+  string(13) "Europe/London"
+  [422]=>
+  string(17) "Europe/Luxembourg"
+  [423]=>
+  string(13) "Europe/Madrid"
+  [424]=>
+  string(12) "Europe/Malta"
+  [425]=>
+  string(16) "Europe/Mariehamn"
+  [426]=>
+  string(12) "Europe/Minsk"
+  [427]=>
+  string(13) "Europe/Monaco"
+  [428]=>
+  string(13) "Europe/Moscow"
+  [429]=>
+  string(14) "Europe/Nicosia"
+  [430]=>
+  string(11) "Europe/Oslo"
+  [431]=>
+  string(12) "Europe/Paris"
+  [432]=>
+  string(16) "Europe/Podgorica"
+  [433]=>
+  string(13) "Europe/Prague"
+  [434]=>
+  string(11) "Europe/Riga"
+  [435]=>
+  string(11) "Europe/Rome"
+  [436]=>
+  string(13) "Europe/Samara"
+  [437]=>
+  string(17) "Europe/San_Marino"
+  [438]=>
+  string(15) "Europe/Sarajevo"
+  [439]=>
+  string(17) "Europe/Simferopol"
+  [440]=>
+  string(13) "Europe/Skopje"
+  [441]=>
+  string(12) "Europe/Sofia"
+  [442]=>
+  string(16) "Europe/Stockholm"
+  [443]=>
+  string(14) "Europe/Tallinn"
+  [444]=>
+  string(13) "Europe/Tirane"
+  [445]=>
+  string(15) "Europe/Tiraspol"
+  [446]=>
+  string(15) "Europe/Uzhgorod"
+  [447]=>
+  string(12) "Europe/Vaduz"
+  [448]=>
+  string(14) "Europe/Vatican"
+  [449]=>
+  string(13) "Europe/Vienna"
+  [450]=>
+  string(14) "Europe/Vilnius"
+  [451]=>
+  string(16) "Europe/Volgograd"
+  [452]=>
+  string(13) "Europe/Warsaw"
+  [453]=>
+  string(13) "Europe/Zagreb"
+  [454]=>
+  string(17) "Europe/Zaporozhye"
+  [455]=>
+  string(13) "Europe/Zurich"
+  [456]=>
+  string(7) "Factory"
+  [457]=>
+  string(2) "GB"
+  [458]=>
+  string(7) "GB-Eire"
+  [459]=>
+  string(3) "GMT"
+  [460]=>
+  string(5) "GMT+0"
+  [461]=>
+  string(5) "GMT-0"
+  [462]=>
+  string(4) "GMT0"
+  [463]=>
+  string(9) "Greenwich"
+  [464]=>
+  string(8) "Hongkong"
+  [465]=>
+  string(3) "HST"
+  [466]=>
+  string(7) "Iceland"
+  [467]=>
+  string(19) "Indian/Antananarivo"
+  [468]=>
+  string(13) "Indian/Chagos"
+  [469]=>
+  string(16) "Indian/Christmas"
+  [470]=>
+  string(12) "Indian/Cocos"
+  [471]=>
+  string(13) "Indian/Comoro"
+  [472]=>
+  string(16) "Indian/Kerguelen"
+  [473]=>
+  string(11) "Indian/Mahe"
+  [474]=>
+  string(15) "Indian/Maldives"
+  [475]=>
+  string(16) "Indian/Mauritius"
+  [476]=>
+  string(14) "Indian/Mayotte"
+  [477]=>
+  string(14) "Indian/Reunion"
+  [478]=>
+  string(4) "Iran"
+  [479]=>
+  string(6) "Israel"
+  [480]=>
+  string(7) "Jamaica"
+  [481]=>
+  string(5) "Japan"
+  [482]=>
+  string(9) "Kwajalein"
+  [483]=>
+  string(5) "Libya"
+  [484]=>
+  string(3) "MET"
+  [485]=>
+  string(16) "Mexico/BajaNorte"
+  [486]=>
+  string(14) "Mexico/BajaSur"
+  [487]=>
+  string(14) "Mexico/General"
+  [488]=>
+  string(3) "MST"
+  [489]=>
+  string(7) "MST7MDT"
+  [490]=>
+  string(6) "Navajo"
+  [491]=>
+  string(2) "NZ"
+  [492]=>
+  string(7) "NZ-CHAT"
+  [493]=>
+  string(12) "Pacific/Apia"
+  [494]=>
+  string(16) "Pacific/Auckland"
+  [495]=>
+  string(15) "Pacific/Chatham"
+  [496]=>
+  string(14) "Pacific/Easter"
+  [497]=>
+  string(13) "Pacific/Efate"
+  [498]=>
+  string(17) "Pacific/Enderbury"
+  [499]=>
+  string(15) "Pacific/Fakaofo"
+  [500]=>
+  string(12) "Pacific/Fiji"
+  [501]=>
+  string(16) "Pacific/Funafuti"
+  [502]=>
+  string(17) "Pacific/Galapagos"
+  [503]=>
+  string(15) "Pacific/Gambier"
+  [504]=>
+  string(19) "Pacific/Guadalcanal"
+  [505]=>
+  string(12) "Pacific/Guam"
+  [506]=>
+  string(16) "Pacific/Honolulu"
+  [507]=>
+  string(16) "Pacific/Johnston"
+  [508]=>
+  string(18) "Pacific/Kiritimati"
+  [509]=>
+  string(14) "Pacific/Kosrae"
+  [510]=>
+  string(17) "Pacific/Kwajalein"
+  [511]=>
+  string(14) "Pacific/Majuro"
+  [512]=>
+  string(17) "Pacific/Marquesas"
+  [513]=>
+  string(14) "Pacific/Midway"
+  [514]=>
+  string(13) "Pacific/Nauru"
+  [515]=>
+  string(12) "Pacific/Niue"
+  [516]=>
+  string(15) "Pacific/Norfolk"
+  [517]=>
+  string(14) "Pacific/Noumea"
+  [518]=>
+  string(17) "Pacific/Pago_Pago"
+  [519]=>
+  string(13) "Pacific/Palau"
+  [520]=>
+  string(16) "Pacific/Pitcairn"
+  [521]=>
+  string(14) "Pacific/Ponape"
+  [522]=>
+  string(20) "Pacific/Port_Moresby"
+  [523]=>
+  string(17) "Pacific/Rarotonga"
+  [524]=>
+  string(14) "Pacific/Saipan"
+  [525]=>
+  string(13) "Pacific/Samoa"
+  [526]=>
+  string(14) "Pacific/Tahiti"
+  [527]=>
+  string(14) "Pacific/Tarawa"
+  [528]=>
+  string(17) "Pacific/Tongatapu"
+  [529]=>
+  string(12) "Pacific/Truk"
+  [530]=>
+  string(12) "Pacific/Wake"
+  [531]=>
+  string(14) "Pacific/Wallis"
+  [532]=>
+  string(11) "Pacific/Yap"
+  [533]=>
+  string(6) "Poland"
+  [534]=>
+  string(8) "Portugal"
+  [535]=>
+  string(3) "PRC"
+  [536]=>
+  string(7) "PST8PDT"
+  [537]=>
+  string(3) "ROC"
+  [538]=>
+  string(3) "ROK"
+  [539]=>
+  string(9) "Singapore"
+  [540]=>
+  string(6) "Turkey"
+  [541]=>
+  string(3) "UCT"
+  [542]=>
+  string(9) "Universal"
+  [543]=>
+  string(9) "US/Alaska"
+  [544]=>
+  string(11) "US/Aleutian"
+  [545]=>
+  string(10) "US/Arizona"
+  [546]=>
+  string(10) "US/Central"
+  [547]=>
+  string(15) "US/East-Indiana"
+  [548]=>
+  string(10) "US/Eastern"
+  [549]=>
+  string(9) "US/Hawaii"
+  [550]=>
+  string(17) "US/Indiana-Starke"
+  [551]=>
+  string(11) "US/Michigan"
+  [552]=>
+  string(11) "US/Mountain"
+  [553]=>
+  string(10) "US/Pacific"
+  [554]=>
+  string(14) "US/Pacific-New"
+  [555]=>
+  string(8) "US/Samoa"
+  [556]=>
+  string(3) "UTC"
+  [557]=>
+  string(4) "W-SU"
+  [558]=>
+  string(3) "WET"
+  [559]=>
+  string(4) "Zulu"
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_serialize.phpt b/ext/date/tests/DateTimeZone_serialize.phpt
new file mode 100644
index 0000000..08dd934
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_serialize.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test serialization of DateTimeZone objects
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+$tz1 = new DateTimeZone("America/New_York");
+var_dump( $tz1 );
+$serialized = serialize($tz1);
+var_dump($serialized); 
+
+$tz2 = unserialize($serialized);
+var_dump($tz2);
+// Try to use unserialzied object 
+var_dump( $tz2->getName() ); 
+
+?>
+===DONE=== 
+--EXPECTF--
+object(DateTimeZone)#%d (0) {
+}
+string(24) "O:12:"DateTimeZone":0:{}"
+object(DateTimeZone)#%d (0) {
+}
+
+Warning: DateTimeZone::getName(): The DateTimeZone object has not been correctly initialized by its constructor in %s on line %d
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTimeZone_verify.phpt b/ext/date/tests/DateTimeZone_verify.phpt
new file mode 100644
index 0000000..aa0f4cd
--- /dev/null
+++ b/ext/date/tests/DateTimeZone_verify.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Test DateTimeZone class registration
+--SKIPIF--
+<?php if (!extension_loaded("reflection")) die("skip"); ?>
+--FILE--
+<?php
+
+echo "*** Verify DateTimeZone class ***\n";
+
+echo "Verify DateTimeZone class registered OK\n";
+$class = new ReflectionClass('DateTimeZone');
+var_dump($class);
+
+echo "..and get names of all its methods\n";
+$methods = $class->getMethods(); 
+var_dump($methods);
+
+echo "..and get names of all its class constants\n"; 
+$constants = $class->getConstants();
+var_dump($constants);
+?>
+===DONE===
+--EXPECTF--
+*** Verify DateTimeZone class ***
+Verify DateTimeZone class registered OK
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(12) "DateTimeZone"
+}
+..and get names of all its methods
+array(6) {
+  [0]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(11) "__construct"
+    ["class"]=>
+    string(12) "DateTimeZone"
+  }
+  [1]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(7) "getName"
+    ["class"]=>
+    string(12) "DateTimeZone"
+  }
+  [2]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(9) "getOffset"
+    ["class"]=>
+    string(12) "DateTimeZone"
+  }
+  [3]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(14) "getTransitions"
+    ["class"]=>
+    string(12) "DateTimeZone"
+  }
+  [4]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(17) "listAbbreviations"
+    ["class"]=>
+    string(12) "DateTimeZone"
+  }
+  [5]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(15) "listIdentifiers"
+    ["class"]=>
+    string(12) "DateTimeZone"
+  }
+}
+..and get names of all its class constants
+array(0) {
+}
+===DONE===
diff --git a/ext/date/tests/DateTime_clone_basic1.phpt b/ext/date/tests/DateTime_clone_basic1.phpt
new file mode 100644
index 0000000..cef6621
--- /dev/null
+++ b/ext/date/tests/DateTime_clone_basic1.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test clone on DateTime objects
+--FILE--
+<?php
+
+//Set the default time zone 
+date_default_timezone_set('Europe/London');
+
+echo "*** Testing clone on DateTime objects ***\n";
+
+// Create a DateTime object..
+$orig = new DateTime('2008-07-02 14:25:41');
+
+// ..create a clone of it ..Clone 
+$clone = clone $orig;
+
+// ..and modify original
+$orig->setTime(22, 41, 50);
+
+echo "Original: " . $orig->format("H:i:s") . "\n";
+echo "Clone: " . $clone->format("H:i:s") . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone on DateTime objects ***
+Original: 22:41:50
+Clone: 14:25:41
+===DONE===
diff --git a/ext/date/tests/DateTime_clone_basic2.phpt b/ext/date/tests/DateTime_clone_basic2.phpt
new file mode 100644
index 0000000..61f646a
--- /dev/null
+++ b/ext/date/tests/DateTime_clone_basic2.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test clone of objects whoose class derived from DateTime class
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+class DateTimeExt1 extends DateTime {
+	public $property1 = 99;
+	public $property2 = "Hello";
+
+}
+
+class DateTimeExt2 extends DateTimeExt1 {
+	public $property3 = true;
+	public $property4 = 10.5;
+}
+
+echo "*** Testing clone on objects whoose class derived from DateTime class ***\n";
+
+$d1 = new DateTimeExt1("2009-02-03 12:34:41 GMT");
+var_dump($d1);
+$d1_clone = clone $d1;
+var_dump($d1_clone);
+
+$d2 = new DateTimeExt2("2009-02-03 12:34:41 GMT");
+var_dump($d2);
+$d2_clone = clone $d2;
+var_dump($d2_clone);
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone on objects whoose class derived from DateTime class ***
+object(DateTimeExt1)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+object(DateTimeExt1)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+object(DateTimeExt2)#%d (4) {
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+object(DateTimeExt2)#%d (4) {
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTime_clone_basic3.phpt b/ext/date/tests/DateTime_clone_basic3.phpt
new file mode 100644
index 0000000..50826c5
--- /dev/null
+++ b/ext/date/tests/DateTime_clone_basic3.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test clone of DateTime objects
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing clone on DateTime objects ***\n";
+
+echo "\n-- Create a DateTime object --\n";
+$d1 = new DateTime("2009-02-03 12:34:41 GMT");
+var_dump($d1);
+echo "\n-- Add some properties --\n";
+$d1->property1 = 99;
+$d1->property2 = "Hello";
+var_dump($d1);
+echo "\n-- clone it --\n";
+$d1_clone = clone $d1;
+var_dump($d1_clone);
+echo "\n-- Add some more properties --\n";
+$d1_clone->property3 = true;
+$d1_clone->property4 = 10.5;
+var_dump($d1_clone);
+echo "\n-- clone it --\n";
+$d2_clone = clone $d1_clone;
+var_dump($d2_clone);
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone on DateTime objects ***
+
+-- Create a DateTime object --
+object(DateTime)#%d (0) {
+}
+
+-- Add some properties --
+object(DateTime)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+
+-- clone it --
+object(DateTime)#%d (2) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+}
+
+-- Add some more properties --
+object(DateTime)#%d (4) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+}
+
+-- clone it --
+object(DateTime)#%d (4) {
+  ["property1"]=>
+  int(99)
+  ["property2"]=>
+  string(5) "Hello"
+  ["property3"]=>
+  bool(true)
+  ["property4"]=>
+  float(10.5)
+}
+===DONE===
diff --git a/ext/date/tests/DateTime_clone_basic4.phpt b/ext/date/tests/DateTime_clone_basic4.phpt
new file mode 100644
index 0000000..f19f23d
--- /dev/null
+++ b/ext/date/tests/DateTime_clone_basic4.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test clone of DateTime derived objects with __clone magic method
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+class DateTimeExt1 extends DateTime {
+	public function __clone() {
+		echo "-- DateTimeExt1 __clone magic method called --\n"; 
+	}
+}
+
+echo "*** Testing clone of objects derived from DateTime class with __clone magic method***\n";
+
+$d1 = new DateTimeExt1("2009-02-03 12:34:41 GMT");
+$d1_clone = clone $d1;
+
+//verify clone by calling method on new object
+var_dump( $d1_clone->format( "m.d.y") ); 
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing clone of objects derived from DateTime class with __clone magic method***
+-- DateTimeExt1 __clone magic method called --
+string(8) "02.03.09"
+===DONE===
diff --git a/ext/date/tests/DateTime_compare_basic1.phpt b/ext/date/tests/DateTime_compare_basic1.phpt
new file mode 100644
index 0000000..313dab1
--- /dev/null
+++ b/ext/date/tests/DateTime_compare_basic1.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Test of compare object handler for DateTime objects
+--FILE--
+<?php 
+
+echo "Simple test for DateTime compare object handler\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+class DateTimeExt1 extends DateTime {
+}
+
+class DateTimeExt2 extends DateTime{
+	public $foo = "Hello";
+	private $bar = 99;
+}
+
+class DateTimeExt3 extends DateTimeExt2 {
+}
+
+$obj1 = new DateTime("2009-02-12 12:47:41 GMT");
+$obj2 = new DateTimeExt1("2009-02-12 12:47:41 GMT");
+$obj3 = new DateTimeExt2("2009-02-12 12:47:41 GMT");
+$obj4 = new DateTimeExt3("2009-02-12 12:47:41 GMT");
+
+echo "\n-- All the following tests should compare equal --\n";
+var_dump($obj1 == $obj1);
+var_dump($obj1 == $obj2);
+var_dump($obj1 == $obj3);
+var_dump($obj1 == $obj4);
+var_dump($obj2 == $obj3);
+var_dump($obj2 == $obj4);
+var_dump($obj3 == $obj4);
+
+date_modify($obj1, "+1 day"); 
+echo "\n-- The following test should still compare equal --\n";
+var_dump($obj1 == $obj1);
+echo "\n-- All the following tests should now compare NOT equal --\n";
+var_dump($obj1 == $obj2);
+var_dump($obj1 == $obj3);
+var_dump($obj1 == $obj4);
+
+echo "\n-- All the following tests should again compare equal --\n";
+date_modify($obj2, "+1 day");
+date_modify($obj3, "+1 day");
+date_modify($obj4, "+1 day");   
+var_dump($obj1 == $obj2);
+var_dump($obj1 == $obj3);
+var_dump($obj1 == $obj4);
+?>
+===DONE===
+--EXPECT--
+Simple test for DateTime compare object handler
+
+-- All the following tests should compare equal --
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+
+-- The following test should still compare equal --
+bool(true)
+
+-- All the following tests should now compare NOT equal --
+bool(false)
+bool(false)
+bool(false)
+
+-- All the following tests should again compare equal --
+bool(true)
+bool(true)
+bool(true)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTime_construct_basic1.phpt b/ext/date/tests/DateTime_construct_basic1.phpt
new file mode 100644
index 0000000..a49c5e6
--- /dev/null
+++ b/ext/date/tests/DateTime_construct_basic1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test new DateTime() : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTime::__construct  ([ string $time="now"  [, DateTimeZone $timezone=NULL  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing new DateTime() : basic functionality ***\n";
+
+var_dump( new DateTime('') );
+
+var_dump( new DateTime("GMT") );
+var_dump( new DateTime("2005-07-14 22:30:41") );
+var_dump( new DateTime("2005-07-14 22:30:41 GMT") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing new DateTime() : basic functionality ***
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+===DONE===
diff --git a/ext/date/tests/DateTime_construct_error.phpt b/ext/date/tests/DateTime_construct_error.phpt
new file mode 100644
index 0000000..21856c2
--- /dev/null
+++ b/ext/date/tests/DateTime_construct_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test new DateTime() : error conditions 
+--FILE--
+<?php
+/* Prototype  : DateTime::__construct  ([ string $time="now"  [, DateTimeZone $timezone=NULL  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+echo "*** Testing date_create() : error conditions ***\n";
+
+echo "\n-- Testing new DateTime() with more than expected no. of arguments --\n";
+$time = "GMT";
+$timezone  = timezone_open("GMT");
+$extra_arg = 99;
+var_dump( new DateTime($time, $timezone, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_create() : error conditions ***
+
+-- Testing new DateTime() with more than expected no. of arguments --
+
+Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() expects at most 2 parameters, 3 given' in %s:%d
+Stack trace:
+#0 %s(%d): DateTime->__construct('GMT', Object(DateTimeZone), 99)
+#1 {main}
+  thrown in %s on line %d
\ No newline at end of file
diff --git a/ext/date/tests/DateTime_construct_variation1.phpt b/ext/date/tests/DateTime_construct_variation1.phpt
new file mode 100644
index 0000000..a641d7a
--- /dev/null
+++ b/ext/date/tests/DateTime_construct_variation1.phpt
@@ -0,0 +1,257 @@
+--TEST--
+Test new DateTime() function : usage variation - Passing unexpected values to first argument $time.
+--FILE--
+<?php
+/* Prototype  : DateTime::__construct  ([ string $time="now"  [, DateTimeZone $timezone=NULL  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_create
+ */
+
+echo "*** Testing new DateTime(): usage variation -  unexpected values to first argument \$time***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$timezone = new DateTimeZone("Europe/London");
+
+foreach($inputs as $variation =>$time) {
+      echo "\n-- $variation --\n";
+      
+      try {
+      	var_dump( new DateTime($time) );
+      } catch(Exception $e) {
+      	  $msg = $e->getMessage();
+      	  echo "FAILED: " . $msg . "\n";
+      }	
+      
+      try {
+      	var_dump( new DateTime($time, $timezone) );
+      } catch(Exception$e) {
+      	 $msg = $e->getMessage();
+      	 echo "FAILED: " . $msg . "\n";
+      }	
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing new DateTime(): usage variation -  unexpected values to first argument $time***
+
+-- int 0 --
+FAILED: DateTime::__construct(): Failed to parse time string (0) at position 0 (0): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (0) at position 0 (0): Unexpected character
+
+-- int 1 --
+FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
+
+-- int 12345 --
+FAILED: DateTime::__construct(): Failed to parse time string (12345) at position 4 (5): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (12345) at position 4 (5): Unexpected character
+
+-- int -12345 --
+FAILED: DateTime::__construct(): Failed to parse time string (-12345) at position 5 (5): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (-12345) at position 5 (5): Unexpected character
+
+-- float 10.5 --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- float -10.5 --
+FAILED: DateTime::__construct(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (-10.5) at position 4 (5): Unexpected character
+
+-- float .5 --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- empty array --
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+
+-- int indexed array --
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+
+-- associative array --
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+
+-- nested arrays --
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+FAILED: DateTime::__construct() expects parameter 1 to be string, array given
+
+-- uppercase NULL --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- lowercase null --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- lowercase true --
+FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
+
+-- lowercase false --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- uppercase TRUE --
+FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
+FAILED: DateTime::__construct(): Failed to parse time string (1) at position 0 (1): Unexpected character
+
+-- uppercase FALSE --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- empty string DQ --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- empty string SQ --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- string DQ --
+FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
+FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
+
+-- string SQ --
+FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
+FAILED: DateTime::__construct(): Failed to parse time string (string) at position 0 (s): The timezone could not be found in the database
+
+-- mixed case string --
+FAILED: DateTime::__construct(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database
+FAILED: DateTime::__construct(): Failed to parse time string (sTrInG) at position 0 (s): The timezone could not be found in the database
+
+-- heredoc --
+FAILED: DateTime::__construct(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database
+FAILED: DateTime::__construct(): Failed to parse time string (hello world) at position 0 (h): The timezone could not be found in the database
+
+-- instance of classWithToString --
+FAILED: DateTime::__construct(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database
+FAILED: DateTime::__construct(): Failed to parse time string (Class A object) at position 0 (C): The timezone could not be found in the database
+
+-- instance of classWithoutToString --
+FAILED: DateTime::__construct() expects parameter 1 to be string, object given
+FAILED: DateTime::__construct() expects parameter 1 to be string, object given
+
+-- undefined var --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- unset var --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- resource --
+FAILED: DateTime::__construct() expects parameter 1 to be string, resource given
+FAILED: DateTime::__construct() expects parameter 1 to be string, resource given
+===DONE===
diff --git a/ext/date/tests/DateTime_construct_variation2.phpt b/ext/date/tests/DateTime_construct_variation2.phpt
new file mode 100644
index 0000000..5f754ec
--- /dev/null
+++ b/ext/date/tests/DateTime_construct_variation2.phpt
@@ -0,0 +1,204 @@
+--TEST--
+Test new DateTime() function : usage variation - Passing unexpected values to second argument $timezone.
+--FILE--
+<?php
+/* Prototype  : DateTime::__construct  ([ string $time="now"  [, DateTimeZone $timezone=NULL  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_create
+ */
+
+echo "*** Testing new DateTime() : usage variation -  unexpected values to second argument \$timezone***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$time = "2005-07-14 22:30:41";
+
+foreach($inputs as $variation =>$timezone) {
+      echo "\n-- $variation --\n";
+      
+      try {
+			var_dump( new DateTime($time, $timezone) );
+      } catch(Exception $e) {
+			$msg = $e->getMessage();
+			echo "FAILED: " . $msg . "\n";
+      }	
+      
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing new DateTime() : usage variation -  unexpected values to second argument $timezone***
+
+-- int 0 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, integer given
+
+-- int 1 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, integer given
+
+-- int 12345 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, integer given
+
+-- int -12345 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, integer given
+
+-- float 10.5 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, double given
+
+-- float -10.5 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, double given
+
+-- float .5 --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, double given
+
+-- empty array --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, array given
+
+-- int indexed array --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, array given
+
+-- associative array --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, array given
+
+-- nested arrays --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, array given
+
+-- uppercase NULL --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+
+-- lowercase null --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+
+-- lowercase true --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, boolean given
+
+-- lowercase false --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, boolean given
+
+-- uppercase TRUE --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, boolean given
+
+-- uppercase FALSE --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, boolean given
+
+-- empty string DQ --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, string given
+
+-- empty string SQ --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, string given
+
+-- string DQ --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, string given
+
+-- string SQ --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, string given
+
+-- mixed case string --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, string given
+
+-- heredoc --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, string given
+
+-- instance of classWithToString --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, object given
+
+-- instance of classWithoutToString --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, object given
+
+-- undefined var --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+
+-- unset var --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, null given
+
+-- resource --
+FAILED: DateTime::__construct() expects parameter 2 to be DateTimeZone, resource given
+===DONE===
+
diff --git a/ext/date/tests/DateTime_extends_basic1.phpt b/ext/date/tests/DateTime_extends_basic1.phpt
new file mode 100644
index 0000000..8fe53d6
--- /dev/null
+++ b/ext/date/tests/DateTime_extends_basic1.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test DateTime class inheritance  
+--FILE--
+<?php
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing basic DateTime inheritance() ***\n";
+
+
+class DateTimeExt extends DateTime
+{
+	public static $format = "F j, Y, g:i:s a";
+	
+	public function __toString()
+	{
+		return parent::format(self::$format);
+	}
+}
+
+echo "\n-- Create an instance of DateTimeExt --\n";
+$d = new DateTimeExt("1967-05-01 22:30:41");
+
+echo "\n-- Invoke __toString --\n";
+echo $d . "\n";
+
+echo "\n -- modify date and time --\n";
+$d->setDate(1963, 7, 2); 
+$d->setTime(10, 45, 30); 
+
+echo "\n-- Invoke __toString again --\n";
+echo $d . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing basic DateTime inheritance() ***
+
+-- Create an instance of DateTimeExt --
+
+-- Invoke __toString --
+May 1, 1967, 10:30:41 pm
+
+ -- modify date and time --
+
+-- Invoke __toString again --
+July 2, 1963, 10:45:30 am
+===DONE===
diff --git a/ext/date/tests/DateTime_extends_basic2.phpt b/ext/date/tests/DateTime_extends_basic2.phpt
new file mode 100644
index 0000000..0ea865c
--- /dev/null
+++ b/ext/date/tests/DateTime_extends_basic2.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test DateTime class inheritance : with user space __construct magic method
+--FILE--
+<?php
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing new DateTime() : with user space __construct magic method ***\n";
+
+class DateTimeExt extends DateTime
+{
+	public function __construct ($date = null, DateTimeZone  $dtz = null)
+    {
+        if($dtz === null)
+        {
+            $dtz = new DateTimeZone(date_default_timezone_get());
+        }
+        parent::__construct($date, $dtz);
+    }
+}
+
+$d = new DateTimeExt("1967-05-01 22:30:41");
+echo $d->format("F j, Y, g:i:s a") . "\n"; 
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing new DateTime() : with user space __construct magic method ***
+May 1, 1967, 10:30:41 pm
+===DONE===
diff --git a/ext/date/tests/DateTime_extends_basic3.phpt b/ext/date/tests/DateTime_extends_basic3.phpt
new file mode 100644
index 0000000..bee395a
--- /dev/null
+++ b/ext/date/tests/DateTime_extends_basic3.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test DateTime class inheritance : with user space fromat() method  
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing new DateTime() : with user format() method ***\n";
+
+class DateTimeExt extends DateTime
+{
+	public function format($format = "F j, Y, g:i:s a")
+	{
+		return parent::format($format);
+	}
+}
+
+$d = new DateTimeExt("1967-05-01 22:30:41");
+echo $d->format() . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing new DateTime() : with user format() method ***
+May 1, 1967, 10:30:41 pm
+===DONE===
diff --git a/ext/date/tests/DateTime_format_basic1.phpt b/ext/date/tests/DateTime_format_basic1.phpt
new file mode 100644
index 0000000..b5bbecf
--- /dev/null
+++ b/ext/date/tests/DateTime_format_basic1.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test DateTime::format() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public string DateTime::format  ( string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_format
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::format() : basic functionality ***\n";
+$date = new DateTime("2005-07-14 22:30:41");
+
+var_dump( $date->format( "F j, Y, g:i a") );                 
+var_dump( $date->format( "m.d.y") );                         
+var_dump( $date->format( "j, n, Y") );                       
+var_dump( $date->format( "Ymd") );                          
+var_dump( $date->format( 'h-i-s, j-m-y, it is w Day') );     
+var_dump( $date->format( '\i\t \i\s \t\h\e jS \d\a\y.') );   
+var_dump( $date->format( "D M j G:i:s T Y") );               
+var_dump( $date->format( 'H:m:s \m \i\s\ \m\o\n\t\h') );     
+var_dump( $date->format( "H:i:s") );                         
+
+?>
+===DONE===
+--EXPECT--
+*** Testing DateTime::format() : basic functionality ***
+string(23) "July 14, 2005, 10:30 pm"
+string(8) "07.14.05"
+string(11) "14, 7, 2005"
+string(8) "20050714"
+string(39) "10-30-41, 14-07-05, 3031 3041 4 Thupm05"
+string(19) "it is the 14th day."
+string(28) "Thu Jul 14 22:30:41 BST 2005"
+string(19) "22:07:41 m is month"
+string(8) "22:30:41"
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTime_format_basic2.phpt b/ext/date/tests/DateTime_format_basic2.phpt
new file mode 100644
index 0000000..d7adaa5
--- /dev/null
+++ b/ext/date/tests/DateTime_format_basic2.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test date_format() function : basic functionality  
+--FILE--
+<?php
+/* Prototype  : public string DateTime::format  ( string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_format
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_format() : basic functionality - formatting coinstants ***\n";
+$date = new DateTime("2005-07-14 22:30:41");
+
+var_dump( $date->format( DateTime::ATOM) ) ;
+var_dump( $date->format( DateTime::COOKIE) ) ;
+var_dump( $date->format( DateTime::ISO8601) ) ;
+var_dump( $date->format( DateTime::RFC822) ) ;
+var_dump( $date->format( DateTime::RFC850) ) ;
+var_dump( $date->format( DateTime::RFC1036) ) ;
+var_dump( $date->format( DateTime::RFC1123) ) ;
+var_dump( $date->format( DateTime:: RFC2822) ) ;
+var_dump( $date->format( DateTime::RFC3339) ) ;
+var_dump( $date->format( DateTime::RSS) ) ;
+var_dump( $date->format( DateTime::W3C) ) ;
+
+?>
+===DONE===
+--EXPECT--
+*** Testing date_format() : basic functionality - formatting coinstants ***
+string(25) "2005-07-14T22:30:41+01:00"
+string(32) "Thursday, 14-Jul-05 22:30:41 BST"
+string(24) "2005-07-14T22:30:41+0100"
+string(29) "Thu, 14 Jul 05 22:30:41 +0100"
+string(32) "Thursday, 14-Jul-05 22:30:41 BST"
+string(29) "Thu, 14 Jul 05 22:30:41 +0100"
+string(31) "Thu, 14 Jul 2005 22:30:41 +0100"
+string(31) "Thu, 14 Jul 2005 22:30:41 +0100"
+string(25) "2005-07-14T22:30:41+01:00"
+string(31) "Thu, 14 Jul 2005 22:30:41 +0100"
+string(25) "2005-07-14T22:30:41+01:00"
+===DONE===
diff --git a/ext/date/tests/DateTime_format_error.phpt b/ext/date/tests/DateTime_format_error.phpt
new file mode 100644
index 0000000..db1be92
--- /dev/null
+++ b/ext/date/tests/DateTime_format_error.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test DateTime::format() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : public string DateTime::format  ( string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_format
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+// Craete a date object
+$date = new DateTime("2005-07-14 22:30:41");
+
+echo "*** Testing DateTime::format() : error conditions ***\n";
+
+echo "\n-- Testing date_date_formatcreate() function with zero arguments --\n";
+var_dump( $date->format() );
+
+echo "\n-- Testing date_date_formatcreate() function with more than expected no. of arguments --\n";
+$format = "F j, Y, g:i a";
+$extra_arg = 10;
+var_dump( $date->format($format, $extra_arg) );   
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::format() : error conditions ***
+
+-- Testing date_date_formatcreate() function with zero arguments --
+
+Warning: DateTime::format() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_date_formatcreate() function with more than expected no. of arguments --
+
+Warning: DateTime::format() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_format_variation1.phpt b/ext/date/tests/DateTime_format_variation1.phpt
new file mode 100644
index 0000000..87a9922
--- /dev/null
+++ b/ext/date/tests/DateTime_format_variation1.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test DateTime::format() function : usage variation - Passing unexpected values to first argument $format.
+--FILE--
+<?php
+/* Prototype  : public string DateTime::format  ( string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_format
+ */
+ 
+echo "*** Testing DateTime::format() : usage variation -  unexpected values to first argument \$format***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2005-07-14 22:30:41");
+
+foreach($inputs as $variation =>$format) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->format($format) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::format() : usage variation -  unexpected values to first argument $format***
+
+-- int 0 --
+string(1) "0"
+
+-- int 1 --
+string(1) "1"
+
+-- int 12345 --
+string(5) "12345"
+
+-- int -12345 --
+string(6) "-12345"
+
+-- float 10.5 --
+string(4) "10.5"
+
+-- float -10.5 --
+string(5) "-10.5"
+
+-- float .5 --
+string(3) "0.5"
+
+-- empty array --
+
+Warning: DateTime::format() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::format() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::format() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::format() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(0) ""
+
+-- lowercase null --
+string(0) ""
+
+-- lowercase true --
+string(1) "1"
+
+-- lowercase false --
+string(0) ""
+
+-- uppercase TRUE --
+string(1) "1"
+
+-- uppercase FALSE --
+string(0) ""
+
+-- empty string DQ --
+string(0) ""
+
+-- empty string SQ --
+string(0) ""
+
+-- string DQ --
+string(40) "4131Thu, 14 Jul 2005 22:30:41 +010030710"
+
+-- string SQ --
+string(40) "4131Thu, 14 Jul 2005 22:30:41 +010030710"
+
+-- mixed case string --
+string(40) "41BSTThu, 14 Jul 2005 22:30:41 +01001722"
+
+-- heredoc --
+string(82) "10Europe/LondonThursdayThursday2005 42005Thu, 14 Jul 2005 22:30:41 +0100Thursday14"
+
+-- instance of classWithToString --
+string(66) "CThursdaypm4141 PM 2005b14Europe/London2005-07-14T22:30:41+01:0031"
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::format() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(0) ""
+
+-- unset var --
+string(0) ""
+
+-- resource --
+
+Warning: DateTime::format() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_getOffset_basic1.phpt b/ext/date/tests/DateTime_getOffset_basic1.phpt
new file mode 100644
index 0000000..41b1a78
--- /dev/null
+++ b/ext/date/tests/DateTime_getOffset_basic1.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test DateTime::getOffset() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public int DateTime::getOffset  ( void  )
+ * Description: Returns the daylight saving time offset
+ * Source code: ext/date/php_date.c
+ * Alias to functions:  date_offset_get
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set('Europe/London');
+
+echo "*** Testing DateTime::getOffset() : basic functionality ***\n";
+
+$winter = new DateTime('2008-12-25 14:25:41');
+$summer = new DateTime('2008-07-02 14:25:41');
+
+echo "Winter offset: " . $winter->getOffset() / 3600 . " hours\n"; 
+echo "Summer offset: " . $summer->getOffset() / 3600 . " hours\n"; 
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::getOffset() : basic functionality ***
+Winter offset: 0 hours
+Summer offset: 1 hours
+===DONE===
diff --git a/ext/date/tests/DateTime_getOffset_error.phpt b/ext/date/tests/DateTime_getOffset_error.phpt
new file mode 100644
index 0000000..6e9c3f4
--- /dev/null
+++ b/ext/date/tests/DateTime_getOffset_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test DateTime::getOffset() function : error conditions 
+--FILE--
+<?php
+
+/* Prototype  : public int DateTime::getOffset  ( void  )
+ * Description: Returns the daylight saving time offset
+ * Source code: ext/date/php_date.c
+ * Alias to functions:  date_offset_get
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::getOffset() : error conditions ***\n";
+
+echo "\n-- Testing DateTime::getOffset() function with more than expected no. of arguments --\n";
+$datetime = new DateTime("2009-01-30 19:34:10");
+$extra_arg = 30;
+
+var_dump( $datetime->getOffset($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::getOffset() : error conditions ***
+
+-- Testing DateTime::getOffset() function with more than expected no. of arguments --
+
+Warning: DateTime::getOffset() expects exactly 0 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/DateTime_getTimeZone_basic1.phpt b/ext/date/tests/DateTime_getTimeZone_basic1.phpt
new file mode 100644
index 0000000..ee8a0db
--- /dev/null
+++ b/ext/date/tests/DateTime_getTimeZone_basic1.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test DateTime::getTimezone() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public DateTimeZone DateTime::getTimezone  ( void  )
+ * Description: Return time zone relative to given DateTime
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_timezone_get
+ */
+
+echo "*** Testing DateTime::getTimezone() : basic functionality ***\n";
+
+date_default_timezone_set("Europe/London");
+$object = new DateTime("2009-01-30 17:57:32");
+var_dump( $object->getTimeZone()->getName() ); 
+
+
+date_default_timezone_set("America/New_York");
+$object = new DateTime("2009-01-30 17:57:32");
+var_dump( $object->getTimeZone()->getName() ); 
+
+$la_time = new DateTimeZone("America/Los_Angeles");
+$object->setTimeZone($la_time);
+var_dump( $object->getTimeZone()->getName() ); 
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::getTimezone() : basic functionality ***
+string(13) "Europe/London"
+string(16) "America/New_York"
+string(19) "America/Los_Angeles"
+===DONE===
diff --git a/ext/date/tests/DateTime_modify_basic1.phpt b/ext/date/tests/DateTime_modify_basic1.phpt
new file mode 100644
index 0000000..052524d
--- /dev/null
+++ b/ext/date/tests/DateTime_modify_basic1.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test DateTime::modify() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public DateTime DateTime::modify  ( string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public date_modify()
+ */
+
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::modify() : basic functionality ***\n";
+
+// Create a date object to modify
+$datetime = new DateTime("2009-01-31 14:28:41");
+
+$datetime->modify("+1 day"); 
+echo "After modification 1: " . $datetime->format("D, d M Y") . "\n"; 
+
+$datetime->modify("+1 week 2 days 4 hours 2 seconds"); 
+echo "After modification 2: " . $datetime->format("D, d M Y H:i:s") . "\n";
+
+$datetime->modify("next Thursday"); 
+echo "After modification 3: " . $datetime->format("D, d M Y") . "\n"; 
+
+$datetime->modify("last Sunday"); 
+echo "After modification 4: " . $datetime->format("D, d M Y") . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::modify() : basic functionality ***
+After modification 1: Sun, 01 Feb 2009
+After modification 2: Tue, 10 Feb 2009 18:28:43
+After modification 3: Thu, 12 Feb 2009
+After modification 4: Sun, 08 Feb 2009
+===DONE===
diff --git a/ext/date/tests/DateTime_modify_error.phpt b/ext/date/tests/DateTime_modify_error.phpt
new file mode 100644
index 0000000..bc4f242
--- /dev/null
+++ b/ext/date/tests/DateTime_modify_error.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test DateTime::modify() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : public DateTime DateTime::modify  ( string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public date_modify()
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::modify() : error conditions ***\n";
+
+// Create a date object
+$object = new DateTime("2009-01-30 19:34:10");
+
+echo "\n-- Testing DateTime::modify() function with less than expected no. of arguments --\n";
+var_dump( $object->modify() );
+
+echo "\n-- Testing DateTime::modify() function with more than expected no. of arguments --\n";
+$modify = "+1 day";
+$extra_arg = 99;
+var_dump( $object->modify($modify, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::modify() : error conditions ***
+
+-- Testing DateTime::modify() function with less than expected no. of arguments --
+
+Warning: DateTime::modify() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::modify() function with more than expected no. of arguments --
+
+Warning: DateTime::modify() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/DateTime_modify_variation1.phpt b/ext/date/tests/DateTime_modify_variation1.phpt
new file mode 100644
index 0000000..495a717
--- /dev/null
+++ b/ext/date/tests/DateTime_modify_variation1.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test DateTime::modify() function : usage variation - Passing unexpected values to first argument $modify.
+--FILE--
+<?php
+/* Prototype  : public DateTime DateTime::modify  ( string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public date_modify()
+ */
+
+echo "*** Testing DateTime::modify() : usage variation -  unexpected values to first argument \$modify***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-01-31 14:28:41");
+
+foreach($inputs as $variation =>$format) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->modify($format) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::modify() : usage variation -  unexpected values to first argument $modify***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::modify() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+NULL
+
+-- empty string SQ --
+NULL
+
+-- string DQ --
+NULL
+
+-- string SQ --
+NULL
+
+-- mixed case string --
+NULL
+
+-- heredoc --
+NULL
+
+-- instance of classWithToString --
+NULL
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::modify() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::modify() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_serialize.phpt b/ext/date/tests/DateTime_serialize.phpt
new file mode 100644
index 0000000..8bce70c
--- /dev/null
+++ b/ext/date/tests/DateTime_serialize.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test serialization of DateTime objects
+--FILE--
+<?php
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+$date1 = new DateTime("2005-07-14 22:30:41");
+var_dump($date1);
+$serialized = serialize($date1);
+var_dump($serialized); 
+
+$date2 = unserialize($serialized);
+var_dump($date2);
+// Try to use unserialzied object 
+var_dump( $date2->format( "F j, Y, g:i a") ); 
+
+?>
+===DONE=== 
+--EXPECTF--
+object(DateTime)#%d (0) {
+}
+string(19) "O:8:"DateTime":0:{}"
+object(DateTime)#%d (0) {
+}
+
+Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in %s on line %d
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTime_setDate_basic1.phpt b/ext/date/tests/DateTime_setDate_basic1.phpt
new file mode 100644
index 0000000..eec5d77
--- /dev/null
+++ b/ext/date/tests/DateTime_setDate_basic1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test DateTime::setDate() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setDate  ( int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_date_set()
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::setDate() : basic functionality ***\n";
+
+$datetime = new DateTime("2009-01-30 19:34:10");
+
+echo $datetime->format(DATE_RFC2822) . "\n";
+
+$datetime->setDate(2008, 02, 01);
+
+echo $datetime->format(DATE_RFC2822) . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setDate() : basic functionality ***
+Fri, 30 Jan 2009 19:34:10 +0000
+Fri, 01 Feb 2008 19:34:10 +0000
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/DateTime_setDate_error.phpt b/ext/date/tests/DateTime_setDate_error.phpt
new file mode 100644
index 0000000..c5e4462
--- /dev/null
+++ b/ext/date/tests/DateTime_setDate_error.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test DateTime::setDate() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setDate  ( int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_date_set()
+ */
+ 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::setDate() : error conditions ***\n";
+
+$datetime = new DateTime("2009-01-30 19:34:10");
+
+echo "\n-- Testing DateTime::setDate() function with zero arguments --\n";
+var_dump( $datetime->setDate() );
+
+echo "\n-- Testing DateTime::setDate() function with less than expected no. of arguments --\n";
+$year = 2009;
+$month = 1;
+$day = 30;
+var_dump( $datetime->setDate($year) );
+var_dump( $datetime->setDate($year, $month) );
+
+echo "\n-- Testing DateTime::setDate() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( $datetime->setDate($year, $month, $day, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setDate() : error conditions ***
+
+-- Testing DateTime::setDate() function with zero arguments --
+
+Warning: DateTime::setDate() expects exactly 3 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::setDate() function with less than expected no. of arguments --
+
+Warning: DateTime::setDate() expects exactly 3 parameters, 1 given in %s on line %d
+bool(false)
+
+Warning: DateTime::setDate() expects exactly 3 parameters, 2 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::setDate() function with more than expected no. of arguments --
+
+Warning: DateTime::setDate() expects exactly 3 parameters, 4 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setDate_variation1.phpt b/ext/date/tests/DateTime_setDate_variation1.phpt
new file mode 100644
index 0000000..a84ccc6
--- /dev/null
+++ b/ext/date/tests/DateTime_setDate_variation1.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setDate() function : usage variation - Passing unexpected values to first argument $year.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setDate  ( int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_date_set
+ */
+
+echo "*** Testing DateTime::setDate() : usage variation -  unexpected values to first argument \$year***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-02-27 08:34:10");
+$day = 2;
+$month = 7;
+
+foreach($inputs as $variation =>$year) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setDate($year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setDate() : usage variation -  unexpected values to first argument $year***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setDate() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setDate_variation2.phpt b/ext/date/tests/DateTime_setDate_variation2.phpt
new file mode 100644
index 0000000..656ee34
--- /dev/null
+++ b/ext/date/tests/DateTime_setDate_variation2.phpt
@@ -0,0 +1,225 @@
+--TEST--
+Test DateTime::setDate() function : usage variation - Passing unexpected values to second argument $month.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setDate  ( int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_date_set
+ */
+
+echo "*** Testing DateTime::setDate() : usage variation -  unexpected values to second argument \$month***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-02-27 08:34:10");
+$day = 2;
+$year = 1963;
+
+foreach($inputs as $variation =>$month) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setDate($year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+
+*** Testing DateTime::setDate() : usage variation -  unexpected values to second argument $month***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setDate() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setDate_variation3.phpt b/ext/date/tests/DateTime_setDate_variation3.phpt
new file mode 100644
index 0000000..ff313ad
--- /dev/null
+++ b/ext/date/tests/DateTime_setDate_variation3.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setDate() function : usage variation - Passing unexpected values to third argument $day.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setDate  ( int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_date_set
+ */
+
+echo "*** Testing DateTime::setDate() : usage variation -  unexpected values to third argument \$day***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-02-27 08:34:10");
+$month = 7;
+$year = 1963;
+
+foreach($inputs as $variation =>$day) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setDate($year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setDate() : usage variation -  unexpected values to third argument $day***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setDate() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setISODate_basic1.phpt b/ext/date/tests/DateTime_setISODate_basic1.phpt
new file mode 100644
index 0000000..33d2624
--- /dev/null
+++ b/ext/date/tests/DateTime_setISODate_basic1.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test DateTime::setISODate() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setISODate  ( int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_isodate_set
+ */
+
+echo "*** Testing DateTime::setISODate() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+// Create a deate object
+$datetime = new DateTime("2009-01-30 17:57:32");
+
+// Which month is week 40 ?
+$datetime->setISODate(2008, 40);
+echo "Week 40 of 2009 is in \"" . $datetime->format("F") . "\"\n";
+
+// What date is week  week 30 day 3 ?
+$datetime->setISODate(2009, 30, 3);
+echo "Week 30 day 3 of 2009 is \"" . $datetime->format("D M j") . "\"\n";
+
+// What date was is last year  ?
+$datetime->setISODate(2008, 30, 3);
+echo "..same day last year was \"" . $datetime->format("D M j") . "\"\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setISODate() : basic functionality ***
+Week 40 of 2009 is in "September"
+Week 30 day 3 of 2009 is "Wed Jul 22"
+..same day last year was "Wed Jul 23"
+===DONE===
diff --git a/ext/date/tests/DateTime_setISODate_error.phpt b/ext/date/tests/DateTime_setISODate_error.phpt
new file mode 100644
index 0000000..a218dbc
--- /dev/null
+++ b/ext/date/tests/DateTime_setISODate_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test DateTime::setISODate () function : error conditions 
+--FILE--
+<?php
+
+/* Prototype  : public void DateTime::setISODate  ( int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_isodate_set
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+$datetime = new DateTime("2009-01-30 19:34:10");
+
+echo "*** Testing DateTime::setISODate () : error conditions ***\n";
+
+echo "\n-- Testing DateTime::setISODate() function with zero arguments --\n";
+var_dump( $datetime->setISODate() );
+
+$year = 2009;
+echo "\n-- Testing DateTime::setISODate() function with less than expected no. of arguments --\n";
+var_dump( $datetime->setISODate($year) );
+
+echo "\n-- Testing date_isodate_set() function with more than expected no. of arguments --\n";
+$week = 30; 
+$day = 7;
+$extra_arg = 30;
+var_dump(  $datetime->setISODate($year, $week, $day, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setISODate () : error conditions ***
+
+-- Testing DateTime::setISODate() function with zero arguments --
+
+Warning: DateTime::setISODate() expects at least 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::setISODate() function with less than expected no. of arguments --
+
+Warning: DateTime::setISODate() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing date_isodate_set() function with more than expected no. of arguments --
+
+Warning: DateTime::setISODate() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setISODate_variation1.phpt b/ext/date/tests/DateTime_setISODate_variation1.phpt
new file mode 100644
index 0000000..0e738b4
--- /dev/null
+++ b/ext/date/tests/DateTime_setISODate_variation1.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setISODate() function : usage variation - Passing unexpected values to first argument $year.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setISODate  ( int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_isodate_set
+ */
+
+echo "*** Testing DateTime::setISODate() : usage variation -  unexpected values to first argument \$year***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-02-27 08:34:10");
+$day = 2;
+$month = 7;
+
+foreach($inputs as $variation =>$year) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setISODate($year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setISODate() : usage variation -  unexpected values to first argument $year***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setISODate() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setISODate_variation2.phpt b/ext/date/tests/DateTime_setISODate_variation2.phpt
new file mode 100644
index 0000000..95aadd6
--- /dev/null
+++ b/ext/date/tests/DateTime_setISODate_variation2.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setISODate() function : usage variation - Passing unexpected values to second argument $week.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setISODate  ( int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_isodate_set
+ */
+
+echo "*** Testing DateTime::setISODate() : usage variation -  unexpected values to second argument \$week***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$day = 2;
+$year = 1963;
+
+foreach($inputs as $variation =>$month) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setISODate($year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setISODate() : usage variation -  unexpected values to second argument $week***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setISODate() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setISODate_variation3.phpt b/ext/date/tests/DateTime_setISODate_variation3.phpt
new file mode 100644
index 0000000..ef21887
--- /dev/null
+++ b/ext/date/tests/DateTime_setISODate_variation3.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setISODate() function : usage variation - Passing unexpected values to third argument $day.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setISODate  ( int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_isodate_set
+ */
+
+echo "*** Testing DateTime::setISODate() : usage variation -  unexpected values to third argument \$day***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$year = 1963;
+$month = 7;
+
+foreach($inputs as $variation =>$day) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setISODate($year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setISODate() : usage variation -  unexpected values to third argument $day***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setISODate() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setTime_basic1.phpt b/ext/date/tests/DateTime_setTime_basic1.phpt
new file mode 100644
index 0000000..cac067b
--- /dev/null
+++ b/ext/date/tests/DateTime_setTime_basic1.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test DateTime::setTime() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setTime  ( int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_time_set
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::setTime() : basic functionality ***\n";
+
+// Create a DateTime object
+$datetime = new DateTime("2009-01-31 15:14:10");
+
+echo "Initial date: " . $datetime ->format(DATE_RFC2822) . "\n";
+
+$datetime->setTime(17, 20);
+echo "After modification1 " . $datetime ->format(DATE_RFC2822) . "\n";
+
+$datetime->setTime(19, 05, 59);
+echo "After modification2 " . $datetime ->format(DATE_RFC2822) . "\n";
+
+$datetime->setTime(24, 10);
+echo "After modification3 " . $datetime ->format(DATE_RFC2822) . "\n";
+
+$datetime->setTime(47, 35, 47);
+echo "After modification4 " . $datetime ->format(DATE_RFC2822) . "\n";
+
+$datetime->setTime(54, 25);
+echo "After modification5 " . $datetime ->format(DATE_RFC2822) . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTime() : basic functionality ***
+Initial date: Sat, 31 Jan 2009 15:14:10 +0000
+After modification1 Sat, 31 Jan 2009 17:20:00 +0000
+After modification2 Sat, 31 Jan 2009 19:05:59 +0000
+After modification3 Sun, 01 Feb 2009 00:10:00 +0000
+After modification4 Mon, 02 Feb 2009 23:35:47 +0000
+After modification5 Wed, 04 Feb 2009 06:25:00 +0000
+===DONE===
diff --git a/ext/date/tests/DateTime_setTime_error.phpt b/ext/date/tests/DateTime_setTime_error.phpt
new file mode 100644
index 0000000..4438fce
--- /dev/null
+++ b/ext/date/tests/DateTime_setTime_error.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test DateTime::setTime() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setTime  ( int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_time_set
+ */
+ 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::setTime() : error conditions ***\n";
+
+$datetime = date_create("2009-01-31 15:34:10");
+
+echo "\n-- Testing DateTime::setTime() function with zero arguments --\n";
+var_dump( $datetime->setTime() );
+
+echo "\n-- Testing DateTime::setTime() function with less than expected no. of arguments --\n";
+$hour = 18;
+var_dump( $datetime->setTime($hour) );
+
+echo "\n-- Testing DateTime::setTime() function with more than expected no. of arguments --\n";
+$min = 15;
+$sec = 30;
+$extra_arg = 10;
+var_dump( $datetime->setTime($hour, $min, $sec, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTime() : error conditions ***
+
+-- Testing DateTime::setTime() function with zero arguments --
+
+Warning: DateTime::setTime() expects at least 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::setTime() function with less than expected no. of arguments --
+
+Warning: DateTime::setTime() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::setTime() function with more than expected no. of arguments --
+
+Warning: DateTime::setTime() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setTime_variation1.phpt b/ext/date/tests/DateTime_setTime_variation1.phpt
new file mode 100644
index 0000000..c9b1259
--- /dev/null
+++ b/ext/date/tests/DateTime_setTime_variation1.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setTime() function : usage variation - Passing unexpected values to first argument $hour.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setTime  ( int $hour  , int $minute  [, int $second  ] )   
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_time_set
+ */
+
+echo "*** Testing DateTime::setTime() : usage variation -  unexpected values to first argument \$hour***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-01-31 15:14:10");
+$minute = 13;
+$sec = 45;
+
+foreach($inputs as $variation =>$hour) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setTime($hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTime() : usage variation -  unexpected values to first argument $hour***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setTime() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setTime_variation2.phpt b/ext/date/tests/DateTime_setTime_variation2.phpt
new file mode 100644
index 0000000..54c4ceb
--- /dev/null
+++ b/ext/date/tests/DateTime_setTime_variation2.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setTime() function : usage variation - Passing unexpected values to second argument $minute.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setTime  ( int $hour  , int $minute  [, int $second  ] )   
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_time_set
+ */
+
+echo "*** Testing DateTime::setTime() : usage variation -  unexpected values to second argument \$minute***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-01-31 15:14:10");
+$hour = 10;
+$sec = 45;
+
+foreach($inputs as $variation =>$minute) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setTime($hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTime() : usage variation -  unexpected values to second argument $minute***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setTime() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setTime_variation3.phpt b/ext/date/tests/DateTime_setTime_variation3.phpt
new file mode 100644
index 0000000..4266d3d
--- /dev/null
+++ b/ext/date/tests/DateTime_setTime_variation3.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test DateTime::setTime() function : usage variation - Passing unexpected values to third argument $second.
+--FILE--
+<?php
+/* Prototype  : public void DateTime::setTime  ( int $hour  , int $minute  [, int $second  ] )   
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_time_set
+ */
+
+echo "*** Testing DateTime::setTime() : usage variation -  unexpected values to third argument \$second***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-01-31 15:14:10");
+$hour = 10;
+$minute = 13;
+
+foreach($inputs as $variation =>$sec) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setTime($hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTime() : usage variation -  unexpected values to third argument $second***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: DateTime::setTime() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setTimezone_basic1.phpt b/ext/date/tests/DateTime_setTimezone_basic1.phpt
new file mode 100644
index 0000000..f4f479f
--- /dev/null
+++ b/ext/date/tests/DateTime_setTimezone_basic1.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test DateTime::setTimezone() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : public DateTime DateTime::setTimezone  ( DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_timezone_set
+ */
+
+echo "*** Testing DateTime::setTimezone() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+$datetime = new DateTime("2009-01-30 17:57:32");
+echo "Default timezone: " . date_timezone_get($datetime)->getName() . "\n";
+
+$la_time = new DateTimezone("America/Los_Angeles");
+$datetime->setTimezone($la_time);
+echo "New timezone: " . date_timezone_get($datetime)->getName() . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTimezone() : basic functionality ***
+Default timezone: Europe/London
+New timezone: America/Los_Angeles
+===DONE===
diff --git a/ext/date/tests/DateTime_setTimezone_error.phpt b/ext/date/tests/DateTime_setTimezone_error.phpt
new file mode 100644
index 0000000..32d03fb
--- /dev/null
+++ b/ext/date/tests/DateTime_setTimezone_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test DateTime::setTimezone () function : error conditions 
+--FILE--
+<?php
+/* Prototype  : public DateTime DateTime::setTimezone  ( DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_timezone_set
+ */
+ 
+date_default_timezone_set("UTC");
+
+echo "*** Testing DateTime::setTimezone () : error conditions ***\n";
+
+$datetime = new DateTime("2009-01-30 17:57:32");
+
+echo "\n-- Testing DateTime::setTimezone () function with zero arguments --\n";
+var_dump( $datetime->setTimezone() ); 
+
+echo "\n-- Testing DateTime::setTimezone () function with more than expected no. of arguments --\n";
+$timezone  = new DateTimezone("GMT");
+$extra_arg = 99;
+var_dump( $datetime->setTimezone($timezone, $extra_arg) );
+  
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTimezone () : error conditions ***
+
+-- Testing DateTime::setTimezone () function with zero arguments --
+
+Warning: DateTime::setTimezone() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing DateTime::setTimezone () function with more than expected no. of arguments --
+
+Warning: DateTime::setTimezone() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_setTimezone_variation1.phpt b/ext/date/tests/DateTime_setTimezone_variation1.phpt
new file mode 100644
index 0000000..9ccfce0
--- /dev/null
+++ b/ext/date/tests/DateTime_setTimezone_variation1.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test DateTime::setTimezone() function : usage variation - Passing unexpected values to first argument $timezone.
+--FILE--
+<?php
+/* Prototype  : public DateTime DateTime::setTimezone  ( DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: date_timezone_set
+ */
+
+echo "*** Testing DateTime::setTimezone() : usage variation -  unexpected values to first argument \$timezone***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTime("2009-01-30 17:57:32");
+
+foreach($inputs as $variation =>$timezone) {
+      echo "\n-- $variation --\n";
+      var_dump( $object->setTimezone($timezone) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::setTimezone() : usage variation -  unexpected values to first argument $timezone***
+
+-- int 0 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/DateTime_verify.phpt b/ext/date/tests/DateTime_verify.phpt
new file mode 100644
index 0000000..002a792
--- /dev/null
+++ b/ext/date/tests/DateTime_verify.phpt
@@ -0,0 +1,122 @@
+--TEST--
+Test DateTime class registration
+--SKIPIF--
+<?php if (!extension_loaded("reflection")) die("skip"); ?>
+--FILE--
+<?php
+
+echo "*** Verify DateTime class ***\n";
+
+echo "Verify DateTime class registered OK\n";
+$class = new ReflectionClass('DateTime');
+var_dump($class);
+
+echo "..and get names of all its methods\n";
+$methods = $class->getMethods(); 
+var_dump($methods);
+
+echo "..and get names of all its class constants\n"; 
+$constants = $class->getConstants();
+var_dump($constants);
+
+?>
+===DONE===
+--EXPECTF--
+*** Verify DateTime class ***
+Verify DateTime class registered OK
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(8) "DateTime"
+}
+..and get names of all its methods
+array(9) {
+  [0]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(11) "__construct"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [1]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(6) "format"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [2]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(6) "modify"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [3]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(11) "getTimezone"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [4]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(11) "setTimezone"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [5]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(9) "getOffset"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [6]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(7) "setTime"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [7]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(7) "setDate"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+  [8]=>
+  &object(ReflectionMethod)#%d (2) {
+    ["name"]=>
+    string(10) "setISODate"
+    ["class"]=>
+    string(8) "DateTime"
+  }
+}
+..and get names of all its class constants
+array(11) {
+  ["ATOM"]=>
+  string(13) "Y-m-d\TH:i:sP"
+  ["COOKIE"]=>
+  string(16) "l, d-M-y H:i:s T"
+  ["ISO8601"]=>
+  string(13) "Y-m-d\TH:i:sO"
+  ["RFC822"]=>
+  string(16) "D, d M y H:i:s O"
+  ["RFC850"]=>
+  string(16) "l, d-M-y H:i:s T"
+  ["RFC1036"]=>
+  string(16) "D, d M y H:i:s O"
+  ["RFC1123"]=>
+  string(16) "D, d M Y H:i:s O"
+  ["RFC2822"]=>
+  string(16) "D, d M Y H:i:s O"
+  ["RFC3339"]=>
+  string(13) "Y-m-d\TH:i:sP"
+  ["RSS"]=>
+  string(16) "D, d M Y H:i:s O"
+  ["W3C"]=>
+  string(13) "Y-m-d\TH:i:sP"
+}
+===DONE===
diff --git a/ext/date/tests/bug48058.phpt b/ext/date/tests/bug48058.phpt
new file mode 100644
index 0000000..8d0ceff
--- /dev/null
+++ b/ext/date/tests/bug48058.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #48058 (Year formatter goes wrong with out-of-int range)
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+$base_time = '28 Feb 2008 12:00:00';
+$dt = date_create( "$base_time +10000000000 years" );
+echo date_format( $dt, DATE_ISO8601 );
+?>
+--EXPECT--
+10000002008-02-28T12:00:00+0000
diff --git a/ext/date/tests/bug48097.phpt b/ext/date/tests/bug48097.phpt
new file mode 100644
index 0000000..d29f0da
--- /dev/null
+++ b/ext/date/tests/bug48097.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #48097 (date_timezone_set function produces wrong datetime result)
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+$d = date_create( "Mon, 23 May 1955 00:00:00 +0200" );
+echo $d->format( DATE_ISO8601 ), "\n";
+echo $d->format( 'U' ), "\n\n";
+
+$d->setTimeZone( new DateTimeZone( 'Europe/Budapest' ) );
+echo $d->format( DATE_ISO8601 ), "\n\n";
+echo $d->format( 'U' ), "\n\n";
+--EXPECT--
+1955-05-23T00:00:00+0200
+-461124000
+
+1955-05-22T23:00:00+0100
+
+-461124000
diff --git a/ext/date/tests/checkdate_basic1.phpt b/ext/date/tests/checkdate_basic1.phpt
new file mode 100644
index 0000000..2937f29
--- /dev/null
+++ b/ext/date/tests/checkdate_basic1.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test date_create() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : bool checkdate  ( int $month  , int $day  , int $year  )
+ * Description: Checks the validity of the date formed by the arguments. 
+ *              A date is considered valid if each parameter is properly defined. 
+ * Source code: ext/date/php_date.c
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing checkdate() : basic functionality ***\n";
+
+echo "-- The following are all valid dates --\n";
+var_dump( checkdate(1, 1, 2009) );
+var_dump( checkdate(12, 31, 2009) );
+var_dump( checkdate(7, 2, 1963) );
+var_dump( checkdate(5, 31, 2009) );
+var_dump( checkdate(2, 28, 2009) ); // non-leap year
+var_dump( checkdate(2, 29, 2008) ); // leap year
+var_dump( checkdate(7, 2, 1) );     // min year 
+var_dump( checkdate(7, 2, 32767) ); // max year 
+
+echo "-- The following are all invalid dates --\n";
+var_dump( checkdate(13, 1, 2009) );
+var_dump( checkdate(2, 31, 2009) );
+var_dump( checkdate(1, 32, 2009) );
+var_dump( checkdate(2, 29, 2009) ); // non-leap year
+var_dump( checkdate(7, 2, 32768) ); // >max year
+var_dump( checkdate(7, 2, 0) ); // <min year  
+
+?>
+===DONE===
+--EXPECT--
+*** Testing checkdate() : basic functionality ***
+-- The following are all valid dates --
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+-- The following are all invalid dates --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/checkdate_error.phpt b/ext/date/tests/checkdate_error.phpt
new file mode 100644
index 0000000..4546408
--- /dev/null
+++ b/ext/date/tests/checkdate_error.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test checkdate() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : bool checkdate  ( int $month  , int $day  , int $year  )
+ * Description: Validate a Gregorian date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing checkdate() : error conditions ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("America/Chicago");
+
+$arg_0 = 1;
+$arg_1 = 1;
+$arg_2 = 1;
+$extra_arg = 1;
+
+echo "\n-- Testing checkdate() function with more than expected no. of arguments --\n";
+var_dump (checkdate($arg_0, $arg_1, $arg_2, $extra_arg));
+
+echo "\n-- Testing checkdate() function with less than expected no. of arguments --\n";
+var_dump (checkdate());
+var_dump (checkdate($arg_0));
+var_dump (checkdate($arg_0, $arg_1));
+
+?>
+===DONE=== 
+--EXPECTF--
+*** Testing checkdate() : error conditions ***
+
+-- Testing checkdate() function with more than expected no. of arguments --
+
+Warning: checkdate() expects exactly 3 parameters, 4 given in %s on line %d
+bool(false)
+
+-- Testing checkdate() function with less than expected no. of arguments --
+
+Warning: checkdate() expects exactly 3 parameters, 0 given in %s on line %d
+bool(false)
+
+Warning: checkdate() expects exactly 3 parameters, 1 given in %s on line %d
+bool(false)
+
+Warning: checkdate() expects exactly 3 parameters, 2 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/checkdate_variation1.phpt b/ext/date/tests/checkdate_variation1.phpt
new file mode 100644
index 0000000..378270c
--- /dev/null
+++ b/ext/date/tests/checkdate_variation1.phpt
@@ -0,0 +1,202 @@
+--TEST--
+Test checkdate() function : usage variation - Passing unexpected values to first argument $month.
+--FILE--
+<?php
+/* Prototype  : bool checkdate  ( int $month  , int $day  , int $year  )
+ * Description: Checks the validity of the date formed by the arguments. 
+ *              A date is considered valid if each parameter is properly defined. 
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing checkdate() : usage variation -  unexpected values to first argument \$month***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$day = 2;
+$year = 1963;
+
+foreach($inputs as $variation =>$month) {
+      echo "\n-- $variation --\n";
+      var_dump( checkdate($month, $day, $year) );
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing checkdate() : usage variation -  unexpected values to first argument $month***
+
+-- float 10.5 --
+bool(true)
+
+-- float -10.5 --
+bool(false)
+
+-- float .5 --
+bool(false)
+
+-- empty array --
+
+Warning: checkdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: checkdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: checkdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: checkdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+bool(false)
+
+-- lowercase null --
+bool(false)
+
+-- lowercase true --
+bool(true)
+
+-- lowercase false --
+bool(false)
+
+-- uppercase TRUE --
+bool(true)
+
+-- uppercase FALSE --
+bool(false)
+
+-- empty string DQ --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: checkdate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: checkdate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+bool(false)
+
+-- unset var --
+bool(false)
+
+-- resource --
+
+Warning: checkdate() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/checkdate_variation2.phpt b/ext/date/tests/checkdate_variation2.phpt
new file mode 100644
index 0000000..76afbdc
--- /dev/null
+++ b/ext/date/tests/checkdate_variation2.phpt
@@ -0,0 +1,202 @@
+--TEST--
+Test checkdate() function : usage variation - Passing unexpected values to second argument $day.
+--FILE--
+<?php
+/* Prototype  : bool checkdate  ( int $month  , int $day  , int $year  )
+ * Description: Checks the validity of the date formed by the arguments. 
+ *              A date is considered valid if each parameter is properly defined. 
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing checkdate() : usage variation -  unexpected values to second argument \$day***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$month = 7;
+$year = 1963;
+
+foreach($inputs as $variation =>$day) {
+      echo "\n-- $variation --\n";
+      var_dump( checkdate($month, $day, $year) );
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing checkdate() : usage variation -  unexpected values to second argument $day***
+
+-- float 10.5 --
+bool(true)
+
+-- float -10.5 --
+bool(false)
+
+-- float .5 --
+bool(false)
+
+-- empty array --
+
+Warning: checkdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: checkdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: checkdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: checkdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+bool(false)
+
+-- lowercase null --
+bool(false)
+
+-- lowercase true --
+bool(true)
+
+-- lowercase false --
+bool(false)
+
+-- uppercase TRUE --
+bool(true)
+
+-- uppercase FALSE --
+bool(false)
+
+-- empty string DQ --
+
+Warning: checkdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: checkdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: checkdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: checkdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: checkdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: checkdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: checkdate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: checkdate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+bool(false)
+
+-- unset var --
+bool(false)
+
+-- resource --
+
+Warning: checkdate() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/checkdate_variation3.phpt b/ext/date/tests/checkdate_variation3.phpt
new file mode 100644
index 0000000..b946056
--- /dev/null
+++ b/ext/date/tests/checkdate_variation3.phpt
@@ -0,0 +1,201 @@
+--TEST--
+Test checkdate() function : usage variation - Passing unexpected values to third argument $year.
+--FILE--
+<?php
+/* Prototype  : bool checkdate  ( int $month  , int $day  , int $year  )
+ * Description: Checks the validity of the date formed by the arguments. 
+ *              A date is considered valid if each parameter is properly defined. 
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing checkdate() : usage variation -  unexpected values to third argument \$year***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$day = 2;
+$month = 7;
+
+foreach($inputs as $variation =>$year) {
+      echo "\n-- $variation --\n";
+      var_dump( checkdate($month, $day, $year) );
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing checkdate() : usage variation -  unexpected values to third argument $year***
+
+-- float 10.5 --
+bool(true)
+
+-- float -10.5 --
+bool(false)
+
+-- float .5 --
+bool(false)
+
+-- empty array --
+
+Warning: checkdate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: checkdate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: checkdate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: checkdate() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+bool(false)
+
+-- lowercase null --
+bool(false)
+
+-- lowercase true --
+bool(true)
+
+-- lowercase false --
+bool(false)
+
+-- uppercase TRUE --
+bool(true)
+
+-- uppercase FALSE --
+bool(false)
+
+-- empty string DQ --
+
+Warning: checkdate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: checkdate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: checkdate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: checkdate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: checkdate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: checkdate() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: checkdate() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: checkdate() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+bool(false)
+
+-- unset var --
+bool(false)
+
+-- resource --
+
+Warning: checkdate() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_basic1.phpt b/ext/date/tests/date_basic1.phpt
new file mode 100644
index 0000000..f4d922b
--- /dev/null
+++ b/ext/date/tests/date_basic1.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test date() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : string date  ( string $format  [, int $timestamp  ] )
+ * Description: Format a local time/date.
+ * Source code: ext/date/php_date.c
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date() : basic functionality ***\n";
+
+$timestamp = mktime(10, 44, 30, 2, 27, 2009);
+
+var_dump( date("F j, Y, g:i a", $timestamp) );     
+var_dump( date("m.d.y", $timestamp) );                         
+var_dump( date("j, n, Y", $timestamp) );             
+var_dump( date("Ymd", $timestamp) );      
+var_dump( date('h-i-s, j-m-y, it is w Day', $timestamp) );    
+var_dump( date('\i\t \i\s \t\h\e jS \d\a\y.', $timestamp) );
+var_dump( date("D M j G:i:s T Y", $timestamp) );
+var_dump( date('H:m:s \m \i\s\ \m\o\n\t\h', $timestamp) );  
+var_dump( date("H:i:s", $timestamp) );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing date() : basic functionality ***
+string(27) "February 27, 2009, 10:44 am"
+string(8) "02.27.09"
+string(11) "27, 2, 2009"
+string(8) "20090227"
+string(39) "10-44-30, 27-02-09, 4428 4430 5 Friam09"
+string(19) "it is the 27th day."
+string(28) "Fri Feb 27 10:44:30 GMT 2009"
+string(19) "10:02:30 m is month"
+string(8) "10:44:30"
+===DONE===
+
diff --git a/ext/date/tests/date_create-relative.phpt b/ext/date/tests/date_create-relative.phpt
new file mode 100644
index 0000000..8a90931
--- /dev/null
+++ b/ext/date/tests/date_create-relative.phpt
@@ -0,0 +1,93 @@
+--TEST--
+date_create() with large relative offsets
+--FILE--
+<?php
+
+date_default_timezone_set('UTC');
+
+if (!defined('PHP_INT_MIN')) {
+	define('PHP_INT_MIN', intval(-PHP_INT_MAX - 1));
+}
+
+$base_time = '28 Feb 2008 12:00:00'; 
+
+// Most offsets tested in strtotime-relative.phpt. These are tests for dates outside the 32-bit range.
+$offsets = array(
+	// around 10 leap year periods (4000 years) in days
+	'1460000 days',
+	'1460969 days',
+	'1460970 days',
+	'1460971 days',
+	'1462970 days',
+	
+	// around 1 leap year period in years
+	'398 years',
+	'399 years',
+	'400 years',
+	'401 years',
+	
+	// around 40000 years
+	'39755 years',
+	'39999 years',
+	'40000 years',
+	'40001 years',
+	'41010 years',
+	
+	// bigger than int (32-bit)
+	'10000000000 seconds',
+	'10000000000 minutes',
+	'10000000000 hours',
+	'10000000000 days',
+	'10000000000 months',
+	'10000000000 years',
+);
+
+foreach ($offsets AS $offset) {
+	foreach (array('+', '-') AS $direction) {
+		$dt = date_create("$base_time $direction$offset");
+		echo "$direction$offset: " . date_format($dt, DATE_ISO8601) . "\n";
+	}
+}
+
+?>
+--EXPECT--
++1460000 days: 6005-07-03T12:00:00+0000
+-1460000 days: -1990-10-25T12:00:00+0000
++1460969 days: 6008-02-27T12:00:00+0000
+-1460969 days: -1992-02-29T12:00:00+0000
++1460970 days: 6008-02-28T12:00:00+0000
+-1460970 days: -1992-02-28T12:00:00+0000
++1460971 days: 6008-02-29T12:00:00+0000
+-1460971 days: -1992-02-27T12:00:00+0000
++1462970 days: 6013-08-20T12:00:00+0000
+-1462970 days: -1998-09-07T12:00:00+0000
++398 years: 2406-02-28T12:00:00+0000
+-398 years: 1610-02-28T12:00:00+0000
++399 years: 2407-02-28T12:00:00+0000
+-399 years: 1609-02-28T12:00:00+0000
++400 years: 2408-02-28T12:00:00+0000
+-400 years: 1608-02-28T12:00:00+0000
++401 years: 2409-02-28T12:00:00+0000
+-401 years: 1607-02-28T12:00:00+0000
++39755 years: 41763-02-28T12:00:00+0000
+-39755 years: -37747-02-28T12:00:00+0000
++39999 years: 42007-02-28T12:00:00+0000
+-39999 years: -37991-02-28T12:00:00+0000
++40000 years: 42008-02-28T12:00:00+0000
+-40000 years: -37992-02-28T12:00:00+0000
++40001 years: 42009-02-28T12:00:00+0000
+-40001 years: -37993-02-28T12:00:00+0000
++41010 years: 43018-02-28T12:00:00+0000
+-41010 years: -39002-02-28T12:00:00+0000
++10000000000 seconds: 2325-01-18T05:46:40+0000
+-10000000000 seconds: 1691-04-09T18:13:20+0000
++10000000000 minutes: 21021-05-27T22:40:00+0000
+-10000000000 minutes: -17006-12-01T01:20:00+0000
++10000000000 hours: 1142802-09-30T04:00:00+0000
+-10000000000 hours: -1138787-07-28T20:00:00+0000
++10000000000 days: 27381078-03-25T12:00:00+0000
+-10000000000 days: -27377062-02-02T12:00:00+0000
++10000000000 months: 833335341-06-28T12:00:00+0000
+-10000000000 months: -833331326-10-28T12:00:00+0000
++10000000000 years: 10000002008-02-28T12:00:00+0000
+-10000000000 years: -9999997992-02-28T12:00:00+0000
diff --git a/ext/date/tests/date_create_basic.phpt b/ext/date/tests/date_create_basic.phpt
new file mode 100644
index 0000000..9cb5053
--- /dev/null
+++ b/ext/date/tests/date_create_basic.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test date_create() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTime date_create  ([ string $time  [, DateTimeZone $timezone  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_create() : basic functionality ***\n";
+
+var_dump( date_create() );
+
+var_dump( date_create("GMT") );
+var_dump( date_create("2005-07-14 22:30:41") );
+var_dump( date_create("2005-07-14 22:30:41 GMT") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_create() : basic functionality ***
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+===DONE===
diff --git a/ext/date/tests/date_create_error.phpt b/ext/date/tests/date_create_error.phpt
new file mode 100644
index 0000000..0a42f28
--- /dev/null
+++ b/ext/date/tests/date_create_error.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test date_create() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : DateTime date_create  ([ string $time  [, DateTimeZone $timezone  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct
+ */
+
+echo "*** Testing date_create() : error conditions ***\n";
+
+echo "\n-- Testing date_create() function with more than expected no. of arguments --\n";
+$time = "GMT";
+$timezone  = timezone_open("GMT");
+$extra_arg = 99;
+var_dump( date_create($time, $timezone, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_create() : error conditions ***
+
+-- Testing date_create() function with more than expected no. of arguments --
+
+Warning: date_create() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_create_variation1.phpt b/ext/date/tests/date_create_variation1.phpt
new file mode 100644
index 0000000..db510bb
--- /dev/null
+++ b/ext/date/tests/date_create_variation1.phpt
@@ -0,0 +1,269 @@
+--TEST--
+Test date_create() function : usage variation - Passing unexpected values to first argument $time.
+--FILE--
+<?php
+/* Prototype  : DateTime date_create  ([ string $time  [, DateTimeZone $timezone  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct
+ */
+
+echo "*** Testing date_create() : usage variation -  unexpected values to first argument \$time***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$timezone = new DateTimeZone("Europe/London");
+
+foreach($inputs as $variation =>$time) {
+      echo "\n-- $variation --\n";
+      var_dump( date_create($time) );
+      var_dump( date_create($time, $timezone) );
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_create() : usage variation -  unexpected values to first argument $time***
+
+-- int 0 --
+bool(false)
+bool(false)
+
+-- int 1 --
+bool(false)
+bool(false)
+
+-- int 12345 --
+bool(false)
+bool(false)
+
+-- int -12345 --
+bool(false)
+bool(false)
+
+-- float 10.5 --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- float -10.5 --
+bool(false)
+bool(false)
+
+-- float .5 --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- empty array --
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: date_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- lowercase null --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- lowercase true --
+bool(false)
+bool(false)
+
+-- lowercase false --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- uppercase TRUE --
+bool(false)
+bool(false)
+
+-- uppercase FALSE --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- empty string DQ --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- empty string SQ --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- string DQ --
+bool(false)
+bool(false)
+
+-- string SQ --
+bool(false)
+bool(false)
+
+-- mixed case string --
+bool(false)
+bool(false)
+
+-- heredoc --
+bool(false)
+bool(false)
+
+-- instance of classWithToString --
+bool(false)
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_create() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+Warning: date_create() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- unset var --
+object(DateTime)#%d (0) {
+}
+object(DateTime)#%d (0) {
+}
+
+-- resource --
+
+Warning: date_create() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+
+Warning: date_create() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_create_variation2.phpt b/ext/date/tests/date_create_variation2.phpt
new file mode 100644
index 0000000..25e5a2a
--- /dev/null
+++ b/ext/date/tests/date_create_variation2.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test date_create() function : usage variation - Passing unexpected values to second argument $timezone.
+--FILE--
+<?php
+/* Prototype  : DateTime date_create  ([ string $time  [, DateTimeZone $timezone  ]] )
+ * Description: Returns new DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct
+ */
+
+echo "*** Testing date_create() : usage variation -  unexpected values to second argument \$timezone***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$time = "2005-07-14 22:30:41";
+
+foreach($inputs as $variation =>$timezone) {
+      echo "\n-- $variation --\n";
+        var_dump( date_create($time, $timezone) );
+};
+
+// closing the resource
+fclose( $file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_create() : usage variation -  unexpected values to second argument $timezone***
+
+-- int 0 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_create() expects parameter 2 to be DateTimeZone, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_date_set_basic1.phpt b/ext/date/tests/date_date_set_basic1.phpt
new file mode 100644
index 0000000..24d772d
--- /dev/null
+++ b/ext/date/tests/date_date_set_basic1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test date_date_set() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : void date_date_set  ( DateTime $object  , int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setDate
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_date_set() : basic functionality ***\n";
+
+$datetime = date_create("2009-01-30 19:34:10");
+
+echo date_format($datetime, DATE_RFC2822) . "\n";
+
+date_date_set($datetime, 2008, 02, 01);
+
+echo date_format($datetime, DATE_RFC2822) . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_date_set() : basic functionality ***
+Fri, 30 Jan 2009 19:34:10 +0000
+Fri, 01 Feb 2008 19:34:10 +0000
+===DONE===
diff --git a/ext/date/tests/date_date_set_error.phpt b/ext/date/tests/date_date_set_error.phpt
new file mode 100644
index 0000000..6dc4870
--- /dev/null
+++ b/ext/date/tests/date_date_set_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test date_date_set() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : void date_date_set  ( DateTime $object  , int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setDate
+ */
+ 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_date_set() : error conditions ***\n";
+
+echo "\n-- Testing date_date_set() function with zero arguments --\n";
+var_dump( date_date_set() );
+
+echo "\n-- Testing date_date_set() function with less than expected no. of arguments --\n";
+$datetime = date_create("2009-01-30 19:34:10");
+$year = 2009;
+$month = 1;
+$day = 30;
+var_dump( date_date_set($datetime) );
+var_dump( date_date_set($datetime, $year) );
+var_dump( date_date_set($datetime, $year, $month) );
+
+echo "\n-- Testing date_date_set() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( date_date_set($datetime, $year, $month, $day, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_date_set() : error conditions ***
+
+-- Testing date_date_set() function with zero arguments --
+
+Warning: date_date_set() expects exactly 4 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_date_set() function with less than expected no. of arguments --
+
+Warning: date_date_set() expects exactly 4 parameters, 1 given in %s on line %d
+bool(false)
+
+Warning: date_date_set() expects exactly 4 parameters, 2 given in %s on line %d
+bool(false)
+
+Warning: date_date_set() expects exactly 4 parameters, 3 given in %s on line %d
+bool(false)
+
+-- Testing date_date_set() function with more than expected no. of arguments --
+
+Warning: date_date_set() expects exactly 4 parameters, 5 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_date_set_variation1.phpt b/ext/date/tests/date_date_set_variation1.phpt
new file mode 100644
index 0000000..f05e3c8
--- /dev/null
+++ b/ext/date/tests/date_date_set_variation1.phpt
@@ -0,0 +1,254 @@
+--TEST--
+Test date_date_set() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : void date_date_set  ( DateTime $object  , int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setDate
+ */
+
+echo "*** Testing date_date_set() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$day = 2;
+$month = 7;
+$year = 1963;
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_date_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_date_set() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_date_set() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_date_set_variation2.phpt b/ext/date/tests/date_date_set_variation2.phpt
new file mode 100644
index 0000000..31257f4
--- /dev/null
+++ b/ext/date/tests/date_date_set_variation2.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_date_set() function : usage variation - Passing unexpected values to second argument $year.
+--FILE--
+<?php
+/* Prototype  : void date_date_set  ( DateTime $object  , int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setDate
+ */
+
+echo "*** Testing date_date_set() : usage variation -  unexpected values to second argument \$year***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$day = 2;
+$month = 7;
+
+foreach($inputs as $variation =>$year) {
+      echo "\n-- $variation --\n";
+      var_dump( date_date_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_date_set() : usage variation -  unexpected values to second argument $year***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_date_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_date_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_date_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_date_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_date_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_date_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_date_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_date_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_date_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_date_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_date_set() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_date_set() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_date_set() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_date_set_variation3.phpt b/ext/date/tests/date_date_set_variation3.phpt
new file mode 100644
index 0000000..c9f3c29
--- /dev/null
+++ b/ext/date/tests/date_date_set_variation3.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_date_set() function : usage variation - Passing unexpected values to third argument $month.
+--FILE--
+<?php
+/* Prototype  : void date_date_set  ( DateTime $object  , int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setDate
+ */
+
+echo "*** Testing date_date_set() : usage variation -  unexpected values to third argument \$month***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$day = 2;
+$year = 1963;
+
+foreach($inputs as $variation =>$month) {
+      echo "\n-- $variation --\n";
+      var_dump( date_date_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_date_set() : usage variation -  unexpected values to third argument $month***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_date_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_date_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_date_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_date_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_date_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_date_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_date_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_date_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_date_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_date_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_date_set() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_date_set() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_date_set() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_date_set_variation4.phpt b/ext/date/tests/date_date_set_variation4.phpt
new file mode 100644
index 0000000..ddd3583
--- /dev/null
+++ b/ext/date/tests/date_date_set_variation4.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_date_set() function : usage variation - Passing unexpected values to forth argument $day.
+--FILE--
+<?php
+/* Prototype  : void date_date_set  ( DateTime $object  , int $year  , int $month  , int $day  )
+ * Description: Resets the current date of the DateTime object to a different date. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setDate
+ */
+
+echo "*** Testing date_date_set() : usage variation -  unexpected values to forth argument \$day***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$month = 7;
+$year = 1963;
+
+foreach($inputs as $variation =>$day) {
+      echo "\n-- $variation --\n";
+      var_dump( date_date_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_date_set() : usage variation -  unexpected values to forth argument $day***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_date_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_date_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_date_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_date_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_date_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_date_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_date_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_date_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_date_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_date_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_date_set() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_date_set() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_date_set() expects parameter 4 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_error.phpt b/ext/date/tests/date_error.phpt
new file mode 100644
index 0000000..ee9b8f9
--- /dev/null
+++ b/ext/date/tests/date_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test date() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : string date  ( string $format  [, int $timestamp  ] )
+ * Description: Format a local time/date.
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date() : error conditions ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("America/Chicago");
+
+$format = "m.d.y";
+$timestamp = mktime(10, 44, 30, 2, 27, 2009);
+
+echo "\n-- Testing date function with no arguments --\n";
+var_dump (date());
+
+echo "\n-- Testing date function with more than expected no. of arguments --\n";
+$extra_arg = true;
+var_dump (checkdate($format, $timestamp, $extra_arg));
+
+?>
+===DONE=== 
+--EXPECTF--
+*** Testing date() : error conditions ***
+
+-- Testing date function with no arguments --
+
+Warning: date() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date function with more than expected no. of arguments --
+
+Warning: checkdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_format_basic1.phpt b/ext/date/tests/date_format_basic1.phpt
new file mode 100644
index 0000000..dc55efb
--- /dev/null
+++ b/ext/date/tests/date_format_basic1.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test date_format() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : string date_format  ( DateTime $object  , string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::format
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_format() : basic functionality ***\n";
+$date = date_create("2005-07-14 22:30:41");
+
+var_dump( date_format($date, "F j, Y, g:i a") );                 
+var_dump( date_format($date, "m.d.y") );                         
+var_dump( date_format($date, "j, n, Y") );                       
+var_dump( date_format($date, "Ymd") );                          
+var_dump( date_format($date, 'h-i-s, j-m-y, it is w Day') );     
+var_dump( date_format($date, '\i\t \i\s \t\h\e jS \d\a\y.') );   
+var_dump( date_format($date, "D M j G:i:s T Y") );               
+var_dump( date_format($date, 'H:m:s \m \i\s\ \m\o\n\t\h') );     
+var_dump( date_format($date, "H:i:s") );                         
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_format() : basic functionality ***
+string(23) "July 14, 2005, 10:30 pm"
+string(8) "07.14.05"
+string(11) "14, 7, 2005"
+string(8) "20050714"
+string(39) "10-30-41, 14-07-05, 3031 3041 4 Thupm05"
+string(19) "it is the 14th day."
+string(28) "Thu Jul 14 22:30:41 BST 2005"
+string(19) "22:07:41 m is month"
+string(8) "22:30:41"
+===DONE===
diff --git a/ext/date/tests/date_format_error.phpt b/ext/date/tests/date_format_error.phpt
new file mode 100644
index 0000000..967695a
--- /dev/null
+++ b/ext/date/tests/date_format_error.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Test date_format() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : string date_format  ( DateTime $object  , string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::format
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_format() : error conditions ***\n";
+
+echo "\n-- Testing date_create() function with zero arguments --\n";
+var_dump( date_format() );
+
+$date = date_create("2005-07-14 22:30:41");
+
+echo "\n-- Testing date_create() function with less than expected no. of arguments --\n";
+var_dump( date_format($date) );
+
+echo "\n-- Testing date_create() function with more than expected no. of arguments --\n";
+$format = "F j, Y, g:i a";
+$extra_arg = 10;
+var_dump( date_format($date, $format, $extra_arg) );
+
+echo "\n-- Testing date_create() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_format($invalid_obj, $format) );  
+$invalid_obj = 10;
+var_dump( date_format($invalid_obj, $format) );
+$invalid_obj = null;
+var_dump( date_format($invalid_obj, $format) );    
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_format() : error conditions ***
+
+-- Testing date_create() function with zero arguments --
+
+Warning: date_format() expects exactly 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_create() function with less than expected no. of arguments --
+
+Warning: date_format() expects exactly 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing date_create() function with more than expected no. of arguments --
+
+Warning: date_format() expects exactly 2 parameters, 3 given in %s on line %d
+bool(false)
+
+-- Testing date_create() function with an invalid values for $object argument --
+
+Warning: date_format() expects parameter 1 to be DateTime, object given in %sp on line %d
+bool(false)
+
+Warning: date_format() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_format() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_format_variation1.phpt b/ext/date/tests/date_format_variation1.phpt
new file mode 100644
index 0000000..025b7d3
--- /dev/null
+++ b/ext/date/tests/date_format_variation1.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test date_format() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : string date_format  ( DateTime $object  , string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::format
+ */
+ 
+echo "*** Testing date_format() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$format = 'H:m:s \m \i\s\ \m\o\n\t\h';
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_format($object, $format) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_format() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_format() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_format() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_format() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_format() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_format() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_format() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_format() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_format() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_format() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_format() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_format() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_format() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_format() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_format() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_format() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_format() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_format() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_format() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_format() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_format() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_format() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_format() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_format() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_format() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_format() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_format() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_format() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_format() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_format_variation2.phpt b/ext/date/tests/date_format_variation2.phpt
new file mode 100644
index 0000000..1a90951
--- /dev/null
+++ b/ext/date/tests/date_format_variation2.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test date_format() function : usage variation - Passing unexpected values to second argument $format.
+--FILE--
+<?php
+/* Prototype  : string date_format  ( DateTime $object  , string $format  )
+ * Description: Returns date formatted according to given format
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::format
+ */
+ 
+echo "*** Testing date_format() : usage variation -  unexpected values to second argument \$format***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2005-07-14 22:30:41");
+
+foreach($inputs as $variation =>$format) {
+      echo "\n-- $variation --\n";
+      var_dump( date_format($object, $format) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_format() : usage variation -  unexpected values to second argument $format***
+
+-- int 0 --
+string(1) "0"
+
+-- int 1 --
+string(1) "1"
+
+-- int 12345 --
+string(5) "12345"
+
+-- int -12345 --
+string(6) "-12345"
+
+-- float 10.5 --
+string(4) "10.5"
+
+-- float -10.5 --
+string(5) "-10.5"
+
+-- float .5 --
+string(3) "0.5"
+
+-- empty array --
+
+Warning: date_format() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_format() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_format() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_format() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(0) ""
+
+-- lowercase null --
+string(0) ""
+
+-- lowercase true --
+string(1) "1"
+
+-- lowercase false --
+string(0) ""
+
+-- uppercase TRUE --
+string(1) "1"
+
+-- uppercase FALSE --
+string(0) ""
+
+-- empty string DQ --
+string(0) ""
+
+-- empty string SQ --
+string(0) ""
+
+-- string DQ --
+string(40) "4131Thu, 14 Jul 2005 22:30:41 +010030710"
+
+-- string SQ --
+string(40) "4131Thu, 14 Jul 2005 22:30:41 +010030710"
+
+-- mixed case string --
+string(40) "41BSTThu, 14 Jul 2005 22:30:41 +01001722"
+
+-- heredoc --
+string(82) "10Europe/LondonThursdayThursday2005 42005Thu, 14 Jul 2005 22:30:41 +0100Thursday14"
+
+-- instance of classWithToString --
+string(66) "CThursdaypm4141 PM 2005b14Europe/London2005-07-14T22:30:41+01:0031"
+
+-- instance of classWithoutToString --
+
+Warning: date_format() expects parameter 2 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(0) ""
+
+-- unset var --
+string(0) ""
+
+-- resource --
+
+Warning: date_format() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_isodate_set_basic1.phpt b/ext/date/tests/date_isodate_set_basic1.phpt
new file mode 100644
index 0000000..dc8daba
--- /dev/null
+++ b/ext/date/tests/date_isodate_set_basic1.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test date_isodate_set() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTime date_isodate_set  ( DateTime $object  , int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setISODate
+ */
+
+echo "*** Testing date_isodate_set() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+// Create a deate object
+$datetime = date_create("2009-01-30 17:57:32");
+
+// Which month is week 40 ?
+date_isodate_set($datetime, 2008, 40);
+echo "Week 40 of 2009 is in \"" . date_format($datetime, "F") . "\"\n";
+
+// What date is week  week 30 day 3 ?
+date_isodate_set($datetime, 2009, 30, 3);
+echo "Week 30 day 3 of 2009 is \"" . date_format($datetime, "D M j") . "\"\n";
+
+// What date was is last year  ?
+date_isodate_set($datetime, 2008, 30, 3);
+echo "..same day last year was \"" . date_format($datetime, "D M j") . "\"\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_isodate_set() : basic functionality ***
+Week 40 of 2009 is in "September"
+Week 30 day 3 of 2009 is "Wed Jul 22"
+..same day last year was "Wed Jul 23"
+===DONE===
diff --git a/ext/date/tests/date_isodate_set_error.phpt b/ext/date/tests/date_isodate_set_error.phpt
new file mode 100644
index 0000000..9accd92
--- /dev/null
+++ b/ext/date/tests/date_isodate_set_error.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test date_isodate_set() function : error conditions 
+--FILE--
+<?php
+
+/* Prototype  : DateTime date_isodate_set  ( DateTime $object  , int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setISODate
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_isodate_set() : error conditions ***\n";
+
+echo "\n-- Testing date_isodate_set() function with zero arguments --\n";
+var_dump( date_isodate_set() );
+
+$datetime = date_create("2009-01-30 19:34:10");
+echo "\n-- Testing date_isodate_set() function with less than expected no. of arguments --\n";
+var_dump( date_isodate_set($datetime) );
+
+echo "\n-- Testing date_isodate_set() function with more than expected no. of arguments --\n";
+$year = 2009;
+$week = 30; 
+$day = 7;
+$extra_arg = 30;
+var_dump( date_isodate_set($datetime, $year, $week, $day, $extra_arg) );
+
+echo "\n-- Testing date_isodate_set() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_isodate_set($invalid_obj, $year, $week, $day) );  
+$invalid_obj = 10;
+var_dump( date_isodate_set($invalid_obj, $year, $week, $day) );
+$invalid_obj = null;
+var_dump( date_isodate_set($invalid_obj, $year, $week, $day) );  
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_isodate_set() : error conditions ***
+
+-- Testing date_isodate_set() function with zero arguments --
+
+Warning: date_isodate_set() expects at least 3 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_isodate_set() function with less than expected no. of arguments --
+
+Warning: date_isodate_set() expects at least 3 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing date_isodate_set() function with more than expected no. of arguments --
+
+Warning: date_isodate_set() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing date_isodate_set() function with an invalid values for $object argument --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_isodate_set_variation1.phpt b/ext/date/tests/date_isodate_set_variation1.phpt
new file mode 100644
index 0000000..ad88f55
--- /dev/null
+++ b/ext/date/tests/date_isodate_set_variation1.phpt
@@ -0,0 +1,254 @@
+--TEST--
+Test date_isodate_set() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : void date_isodate_set  ( DateTime $object  , int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setISODate
+ */
+
+echo "*** Testing date_isodate_set() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$day = 2;
+$month = 7;
+$year = 1963;
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_isodate_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_isodate_set() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_isodate_set() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_isodate_set_variation2.phpt b/ext/date/tests/date_isodate_set_variation2.phpt
new file mode 100644
index 0000000..309904d
--- /dev/null
+++ b/ext/date/tests/date_isodate_set_variation2.phpt
@@ -0,0 +1,225 @@
+--TEST--
+Test date_isodate_set() function : usage variation - Passing unexpected values to second argument $year.
+--FILE--
+<?php
+/* Prototype  : void date_isodate_set  ( DateTime $object  , int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setISODate
+ */
+
+echo "*** Testing date_isodate_set() : usage variation -  unexpected values to second argument \$year***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$day = 2;
+$month = 7;
+
+foreach($inputs as $variation =>$year) {
+      echo "\n-- $variation --\n";
+      var_dump( date_isodate_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_isodate_set() : usage variation -  unexpected values to second argument $year***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_isodate_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_isodate_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_isodate_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_isodate_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_isodate_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_isodate_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_isodate_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_isodate_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_isodate_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_isodate_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_isodate_set() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_isodate_set() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_isodate_set() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/date_isodate_set_variation3.phpt b/ext/date/tests/date_isodate_set_variation3.phpt
new file mode 100644
index 0000000..9a6adae
--- /dev/null
+++ b/ext/date/tests/date_isodate_set_variation3.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_isodate_set() function : usage variation - Passing unexpected values to third argument $week.
+--FILE--
+<?php
+/* Prototype  : void date_isodate_set  ( DateTime $object  , int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setISODate
+ */
+
+echo "*** Testing date_isodate_set() : usage variation -  unexpected values to third argument \$week***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$day = 2;
+$year = 1963;
+
+foreach($inputs as $variation =>$month) {
+      echo "\n-- $variation --\n";
+      var_dump( date_isodate_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_isodate_set() : usage variation -  unexpected values to third argument $week***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_isodate_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_isodate_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_isodate_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_isodate_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_isodate_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_isodate_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_isodate_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_isodate_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_isodate_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_isodate_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_isodate_set() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_isodate_set() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_isodate_set() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_isodate_set_variation4.phpt b/ext/date/tests/date_isodate_set_variation4.phpt
new file mode 100644
index 0000000..07371a8
--- /dev/null
+++ b/ext/date/tests/date_isodate_set_variation4.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_isodate_set() function : usage variation - Passing unexpected values to forth argument $day.
+--FILE--
+<?php
+/* Prototype  : void date_isodate_set  ( DateTime $object  , int $year  , int $week  [, int $day  ] )
+ * Description: Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setISODate
+ */
+
+echo "*** Testing date_isodate_set() : usage variation -  unexpected values to forth argument \$day***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-02-27 08:34:10");
+$year = 1963;
+$month = 7;
+
+foreach($inputs as $variation =>$day) {
+      echo "\n-- $variation --\n";
+      var_dump( date_isodate_set($object, $year, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_isodate_set() : usage variation -  unexpected values to forth argument $day***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_isodate_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_isodate_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_isodate_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_isodate_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_isodate_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_isodate_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_isodate_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_isodate_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_isodate_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_isodate_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_isodate_set() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_isodate_set() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_isodate_set() expects parameter 4 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_modify_basic1.phpt b/ext/date/tests/date_modify_basic1.phpt
new file mode 100644
index 0000000..943f65f
--- /dev/null
+++ b/ext/date/tests/date_modify_basic1.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test date_modify() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : void date_modify  ( DateTime $object  , string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public DateTime DateTime::modify()
+ */
+
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_modify() : basic functionality ***\n";
+
+// Create a date object to modify
+$datetime = date_create("2009-01-31 14:28:41");
+
+date_modify($datetime, "+1 day"); 
+echo "After modification 1: " . date_format($datetime, "D, d M Y") . "\n"; 
+
+date_modify($datetime, "+1 week 2 days 4 hours 2 seconds"); 
+echo "After modification 2: " . date_format($datetime, "D, d M Y H:i:s") . "\n";
+
+date_modify($datetime, "next Thursday"); 
+echo "After modification 3: " . date_format($datetime, "D, d M Y") . "\n"; 
+
+date_modify($datetime, "last Sunday"); 
+echo "After modification 4: " . date_format($datetime, "D, d M Y") . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_modify() : basic functionality ***
+After modification 1: Sun, 01 Feb 2009
+After modification 2: Tue, 10 Feb 2009 18:28:43
+After modification 3: Thu, 12 Feb 2009
+After modification 4: Sun, 08 Feb 2009
+===DONE===
diff --git a/ext/date/tests/date_modify_error.phpt b/ext/date/tests/date_modify_error.phpt
new file mode 100644
index 0000000..47dc74a
--- /dev/null
+++ b/ext/date/tests/date_modify_error.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test date_modify() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : void date_modify  ( DateTime $object  , string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public DateTime DateTime::modify()
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_modify() : error conditions ***\n";
+
+echo "\n-- Testing date_modify() function with zero arguments --\n";
+var_dump( date_modify() );
+
+// Create a date object
+$datetime = date_create("2009-01-30 19:34:10");
+
+echo "\n-- Testing date_modify() function with less than expected no. of arguments --\n";
+var_dump( date_modify($datetime) );
+
+echo "\n-- Testing date_modify() function with more than expected no. of arguments --\n";
+$modify = "+1 day";
+$extra_arg = 99;
+var_dump( date_modify($datetime, $modify, $extra_arg) );
+
+echo "\n-- Testing date_modify() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_modify($invalid_obj, $modify) );  
+$invalid_obj = 10;
+var_dump( date_modify($invalid_obj, $modify) );
+$invalid_obj = null;
+var_dump( date_modify($invalid_obj, $modify) );  
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_modify() : error conditions ***
+
+-- Testing date_modify() function with zero arguments --
+
+Warning: date_modify() expects exactly 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_modify() function with less than expected no. of arguments --
+
+Warning: date_modify() expects exactly 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing date_modify() function with more than expected no. of arguments --
+
+Warning: date_modify() expects exactly 2 parameters, 3 given in %s on line %d
+bool(false)
+
+-- Testing date_modify() function with an invalid values for $object argument --
+
+Warning: date_modify() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: date_modify() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_modify() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_modify_variation1.phpt b/ext/date/tests/date_modify_variation1.phpt
new file mode 100644
index 0000000..a59f62f
--- /dev/null
+++ b/ext/date/tests/date_modify_variation1.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test date_modify() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : void date_modify  ( DateTime $object  , string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public DateTime DateTime::modify()
+ */
+
+echo "*** Testing date_modify() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$format = "D, d M Y";
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_modify($object, $format) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_modify() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_modify() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_modify() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_modify() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_modify() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_modify() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_modify() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_modify() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_modify() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_modify() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_modify() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_modify() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_modify() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_modify() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_modify() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_modify() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_modify() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_modify() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_modify() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_modify() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_modify() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_modify() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_modify() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_modify_variation2.phpt b/ext/date/tests/date_modify_variation2.phpt
new file mode 100644
index 0000000..c823683
--- /dev/null
+++ b/ext/date/tests/date_modify_variation2.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test date_modify() function : usage variation - Passing unexpected values to second argument $format.
+--FILE--
+<?php
+/* Prototype  : void date_modify  ( DateTime $object  , string $modify  )
+ * Description: Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime(). 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: public DateTime DateTime::modify()
+ */
+
+echo "*** Testing date_modify() : usage variation -  unexpected values to second argument \$format***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-01-31 14:28:41");
+
+foreach($inputs as $variation =>$format) {
+      echo "\n-- $variation --\n";
+      var_dump( date_modify($object, $format) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_modify() : usage variation -  unexpected values to second argument $format***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_modify() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_modify() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_modify() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_modify() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+NULL
+
+-- empty string SQ --
+NULL
+
+-- string DQ --
+NULL
+
+-- string SQ --
+NULL
+
+-- mixed case string --
+NULL
+
+-- heredoc --
+NULL
+
+-- instance of classWithToString --
+NULL
+
+-- instance of classWithoutToString --
+
+Warning: date_modify() expects parameter 2 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_modify() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_offset_get_basic1.phpt b/ext/date/tests/date_offset_get_basic1.phpt
new file mode 100644
index 0000000..42f3893
--- /dev/null
+++ b/ext/date/tests/date_offset_get_basic1.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test date_offset_get() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : int date_offset_get  ( DateTime $object  )
+ * Description: Returns the daylight saving time offset
+ * Source code: ext/date/php_date.c
+ * Alias to functions:  DateTime::getOffset
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set('Europe/London');
+
+echo "*** Testing date_offset_get() : basic functionality ***\n";
+
+$winter = date_create('2008-12-25 14:25:41');
+$summer = date_create('2008-07-02 14:25:41');
+
+echo "Winter offset: " . date_offset_get($winter) / 3600 . " hours\n"; 
+echo "Summer offset: " . date_offset_get($summer) / 3600 . " hours\n"; 
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_offset_get() : basic functionality ***
+Winter offset: 0 hours
+Summer offset: 1 hours
+===DONE===
diff --git a/ext/date/tests/date_offset_get_error.phpt b/ext/date/tests/date_offset_get_error.phpt
new file mode 100644
index 0000000..bd4e429
--- /dev/null
+++ b/ext/date/tests/date_offset_get_error.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test date_offset_get() function : error conditions 
+--FILE--
+<?php
+
+/* Prototype  : int date_offset_get  ( DateTime $object  )
+ * Description: Returns the daylight saving time offset
+ * Source code: ext/date/php_date.c
+ * Alias to functions:  DateTime::getOffset
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_offset_get() : error conditions ***\n";
+
+echo "\n-- Testing date_offset_get() function with zero arguments --\n";
+var_dump( date_offset_get() );
+
+echo "\n-- Testing date_offset_get() function with more than expected no. of arguments --\n";
+$datetime = date_create("2009-01-30 19:34:10");
+$extra_arg = 30;
+var_dump( date_offset_get($datetime, $extra_arg) );
+
+echo "\n-- Testing date_offset_get() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_offset_get($invalid_obj) );  
+$invalid_obj = 10;
+var_dump( date_offset_get($invalid_obj) );
+$invalid_obj = null;
+var_dump( date_offset_get($invalid_obj) ); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_offset_get() : error conditions ***
+
+-- Testing date_offset_get() function with zero arguments --
+
+Warning: date_offset_get() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_offset_get() function with more than expected no. of arguments --
+
+Warning: date_offset_get() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing date_offset_get() function with an invalid values for $object argument --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_offset_get_variation1.phpt b/ext/date/tests/date_offset_get_variation1.phpt
new file mode 100644
index 0000000..9df6e2d
--- /dev/null
+++ b/ext/date/tests/date_offset_get_variation1.phpt
@@ -0,0 +1,250 @@
+--TEST--
+Test date_offset_get() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : int date_offset_get  ( DateTime $object  )
+ * Description: Returns the daylight saving time offset
+ * Source code: ext/date/php_date.c
+ * Alias to functions:  DateTime::getOffset
+ */
+
+echo "*** Testing date_offset_get() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_offset_get($object) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_offset_get() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_offset_get() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_parse_basic1.phpt b/ext/date/tests/date_parse_basic1.phpt
new file mode 100644
index 0000000..04710d1
--- /dev/null
+++ b/ext/date/tests/date_parse_basic1.phpt
@@ -0,0 +1,107 @@
+--TEST--
+Test date_parse() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array date_parse  ( string $date  ) 
+ * Description: Returns associative array with detailed info about given date.
+ * Source code: ext/date/php_date.c
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_parse() : basic functionality ***\n";
+
+var_dump( date_parse("2009-02-27 10:00:00.5") );
+var_dump( date_parse("10:00:00.5") );
+var_dump( date_parse("2009-02-27") );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing date_parse() : basic functionality ***
+array(12) {
+  ["year"]=>
+  int(2009)
+  ["month"]=>
+  int(2)
+  ["day"]=>
+  int(27)
+  ["hour"]=>
+  int(10)
+  ["minute"]=>
+  int(0)
+  ["second"]=>
+  int(0)
+  ["fraction"]=>
+  float(0.5)
+  ["warning_count"]=>
+  int(0)
+  ["warnings"]=>
+  array(0) {
+  }
+  ["error_count"]=>
+  int(0)
+  ["errors"]=>
+  array(0) {
+  }
+  ["is_localtime"]=>
+  bool(false)
+}
+array(12) {
+  ["year"]=>
+  bool(false)
+  ["month"]=>
+  bool(false)
+  ["day"]=>
+  bool(false)
+  ["hour"]=>
+  int(10)
+  ["minute"]=>
+  int(0)
+  ["second"]=>
+  int(0)
+  ["fraction"]=>
+  float(0.5)
+  ["warning_count"]=>
+  int(0)
+  ["warnings"]=>
+  array(0) {
+  }
+  ["error_count"]=>
+  int(0)
+  ["errors"]=>
+  array(0) {
+  }
+  ["is_localtime"]=>
+  bool(false)
+}
+array(12) {
+  ["year"]=>
+  int(2009)
+  ["month"]=>
+  int(2)
+  ["day"]=>
+  int(27)
+  ["hour"]=>
+  bool(false)
+  ["minute"]=>
+  bool(false)
+  ["second"]=>
+  bool(false)
+  ["fraction"]=>
+  bool(false)
+  ["warning_count"]=>
+  int(0)
+  ["warnings"]=>
+  array(0) {
+  }
+  ["error_count"]=>
+  int(0)
+  ["errors"]=>
+  array(0) {
+  }
+  ["is_localtime"]=>
+  bool(false)
+}
+===DONE===
diff --git a/ext/date/tests/date_parse_error.phpt b/ext/date/tests/date_parse_error.phpt
new file mode 100644
index 0000000..ba07c9d
--- /dev/null
+++ b/ext/date/tests/date_parse_error.phpt
@@ -0,0 +1,89 @@
+--TEST--
+Test date_parse() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : array date_parse  ( string $date  ) 
+ * Description: Returns associative array with detailed info about given date.
+ * Source code: ext/date/php_date.c
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_parse() : error conditions ***\n";
+
+echo "\n-- Testing date_parse() function with zero arguments --\n";
+var_dump( date_parse() );
+
+echo "\n-- Testing date_parse() function with more than expected no. of arguments --\n";
+$date = "2009-02-27 10:00:00.5";
+$extra_arg = 10;
+var_dump( date_parse($date, $extra_arg) );
+
+echo "\n-- Testing date_parse() function with unexpected characters in \$date argument --\n";
+$invalid_date = "2OO9-02--27 10:00?00.5";
+var_dump( date_parse($invalid_date) );  
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_parse() : error conditions ***
+
+-- Testing date_parse() function with zero arguments --
+
+Warning: date_parse() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_parse() function with more than expected no. of arguments --
+
+Warning: date_parse() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing date_parse() function with unexpected characters in $date argument --
+array(13) {
+  ["year"]=>
+  bool(false)
+  ["month"]=>
+  bool(false)
+  ["day"]=>
+  bool(false)
+  ["hour"]=>
+  int(10)
+  ["minute"]=>
+  int(0)
+  ["second"]=>
+  int(0)
+  ["fraction"]=>
+  float(0)
+  ["warning_count"]=>
+  int(2)
+  ["warnings"]=>
+  array(2) {
+    [4]=>
+    string(29) "Double timezone specification"
+    [8]=>
+    string(29) "Double timezone specification"
+  }
+  ["error_count"]=>
+  int(6)
+  ["errors"]=>
+  array(6) {
+    [0]=>
+    string(20) "Unexpected character"
+    [1]=>
+    string(47) "The timezone could not be found in the database"
+    [3]=>
+    string(20) "Unexpected character"
+    [7]=>
+    string(20) "Unexpected character"
+    [17]=>
+    string(20) "Unexpected character"
+    [18]=>
+    string(25) "Double time specification"
+  }
+  ["is_localtime"]=>
+  bool(true)
+  ["zone_type"]=>
+  int(0)
+}
+===DONE===
diff --git a/ext/date/tests/date_parse_variation1.phpt b/ext/date/tests/date_parse_variation1.phpt
new file mode 100644
index 0000000..8086f4d
--- /dev/null
+++ b/ext/date/tests/date_parse_variation1.phpt
@@ -0,0 +1,272 @@
+--TEST--
+Test date_parse() function : usage variation - Passing unexpected values to first argument $date.
+--FILE--
+<?php
+/* Prototype  : array date_parse  ( string $date  ) 
+ * Description: Returns associative array with detailed info about given date.
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date_parse() : usage variation -  unexpected values to first argument \$date***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+foreach($inputs as $variation =>$date) {
+      echo "\n-- $variation --\n";
+      $result = date_parse($date);
+      if (is_array($result)) {
+      	  var_dump($result["errors"]);
+      } else {
+      	  var_dump($result); 
+      }		
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_parse() : usage variation -  unexpected values to first argument $date***
+
+-- int 0 --
+array(1) {
+  [0]=>
+  string(20) "Unexpected character"
+}
+
+-- int 1 --
+array(1) {
+  [0]=>
+  string(20) "Unexpected character"
+}
+
+-- int 12345 --
+array(1) {
+  [4]=>
+  string(20) "Unexpected character"
+}
+
+-- int -12345 --
+array(1) {
+  [5]=>
+  string(20) "Unexpected character"
+}
+
+-- float 10.5 --
+array(0) {
+}
+
+-- float -10.5 --
+array(1) {
+  [4]=>
+  string(20) "Unexpected character"
+}
+
+-- float .5 --
+array(0) {
+}
+
+-- empty array --
+
+Warning: date_parse() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_parse() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_parse() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_parse() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- lowercase null --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- lowercase true --
+array(1) {
+  [0]=>
+  string(20) "Unexpected character"
+}
+
+-- lowercase false --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- uppercase TRUE --
+array(1) {
+  [0]=>
+  string(20) "Unexpected character"
+}
+
+-- uppercase FALSE --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- empty string DQ --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- empty string SQ --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- string DQ --
+array(1) {
+  [0]=>
+  string(47) "The timezone could not be found in the database"
+}
+
+-- string SQ --
+array(1) {
+  [0]=>
+  string(47) "The timezone could not be found in the database"
+}
+
+-- mixed case string --
+array(1) {
+  [0]=>
+  string(47) "The timezone could not be found in the database"
+}
+
+-- heredoc --
+array(1) {
+  [0]=>
+  string(47) "The timezone could not be found in the database"
+}
+
+-- instance of classWithToString --
+array(1) {
+  [0]=>
+  string(47) "The timezone could not be found in the database"
+}
+
+-- instance of classWithoutToString --
+
+Warning: date_parse() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- unset var --
+array(1) {
+  [0]=>
+  string(12) "Empty string"
+}
+
+-- resource --
+
+Warning: date_parse() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_time_set_basic1.phpt b/ext/date/tests/date_time_set_basic1.phpt
new file mode 100644
index 0000000..0ef5536
--- /dev/null
+++ b/ext/date/tests/date_time_set_basic1.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test date_time_set() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : void date_time_set  ( DateTime $object  , int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTime
+ */
+ 
+ //Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_time_set() : basic functionality ***\n";
+
+// Create a DateTime object
+$datetime = date_create("2009-01-31 15:14:10");
+
+echo "Initial date: " . date_format($datetime, DATE_RFC2822) . "\n";
+
+date_time_set($datetime, 17, 20);
+echo "After modification1 " . date_format($datetime, DATE_RFC2822) . "\n";
+
+date_time_set($datetime, 19, 05, 59);
+echo "After modification2 " . date_format($datetime, DATE_RFC2822) . "\n";
+
+date_time_set($datetime, 24, 10);
+echo "After modification3 " . date_format($datetime, DATE_RFC2822) . "\n";
+
+date_time_set($datetime, 47, 35, 47);
+echo "After modification4 " . date_format($datetime, DATE_RFC2822) . "\n";
+
+date_time_set($datetime, 54, 25);
+echo "After modification5 " . date_format($datetime, DATE_RFC2822) . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_time_set() : basic functionality ***
+Initial date: Sat, 31 Jan 2009 15:14:10 +0000
+After modification1 Sat, 31 Jan 2009 17:20:00 +0000
+After modification2 Sat, 31 Jan 2009 19:05:59 +0000
+After modification3 Sun, 01 Feb 2009 00:10:00 +0000
+After modification4 Mon, 02 Feb 2009 23:35:47 +0000
+After modification5 Wed, 04 Feb 2009 06:25:00 +0000
+===DONE===
diff --git a/ext/date/tests/date_time_set_error.phpt b/ext/date/tests/date_time_set_error.phpt
new file mode 100644
index 0000000..403ab9c
--- /dev/null
+++ b/ext/date/tests/date_time_set_error.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test date_time_set() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : void date_time_set  ( DateTime $object  , int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTime
+ */
+ 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_time_set() : error conditions ***\n";
+
+echo "\n-- Testing date_time_set() function with zero arguments --\n";
+var_dump( date_time_set() );
+
+echo "\n-- Testing date_time_set() function with less than expected no. of arguments --\n";
+$datetime = date_create("2009-01-31 15:34:10");
+$hour = 18;
+var_dump( date_time_set($datetime) );
+var_dump( date_time_set($datetime, $hour) );
+
+echo "\n-- Testing date_time_set() function with more than expected no. of arguments --\n";
+$min = 15;
+$sec = 30;
+$extra_arg = 10;
+var_dump( date_time_set($datetime, $hour, $min, $sec, $extra_arg) );
+
+echo "\n-- Testing date_time_set() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_time_set($invalid_obj, $hour, $min, $sec) );  
+$invalid_obj = 10;
+var_dump( date_time_set($invalid_obj, $hour, $min, $sec) );
+$invalid_obj = null;
+var_dump( date_time_set($invalid_obj, $hour, $min, $sec) ); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_time_set() : error conditions ***
+
+-- Testing date_time_set() function with zero arguments --
+
+Warning: date_time_set() expects at least 3 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_time_set() function with less than expected no. of arguments --
+
+Warning: date_time_set() expects at least 3 parameters, 1 given in %s on line %d
+bool(false)
+
+Warning: date_time_set() expects at least 3 parameters, 2 given in %s on line %d
+bool(false)
+
+-- Testing date_time_set() function with more than expected no. of arguments --
+
+Warning: date_time_set() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing date_time_set() function with an invalid values for $object argument --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: date_time_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_time_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_time_set_variation1.phpt b/ext/date/tests/date_time_set_variation1.phpt
new file mode 100644
index 0000000..bcaec57
--- /dev/null
+++ b/ext/date/tests/date_time_set_variation1.phpt
@@ -0,0 +1,254 @@
+--TEST--
+Test date_time_set() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : void date_time_set  ( DateTime $object  , int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTime
+ */
+
+echo "*** Testing date_time_set() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 13;
+$sec = 45;
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_time_set($object, $hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_time_set() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_time_set() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_time_set_variation2.phpt b/ext/date/tests/date_time_set_variation2.phpt
new file mode 100644
index 0000000..6c416df
--- /dev/null
+++ b/ext/date/tests/date_time_set_variation2.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_time_set() function : usage variation - Passing unexpected values to second argument $hour.
+--FILE--
+<?php
+/* Prototype  : void date_time_set  ( DateTime $object  , int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTime
+ */
+
+echo "*** Testing date_time_set() : usage variation -  unexpected values to second argument \$hour***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-01-31 15:14:10");
+$minute = 13;
+$sec = 45;
+
+foreach($inputs as $variation =>$hour) {
+      echo "\n-- $variation --\n";
+      var_dump( date_time_set($object, $hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_time_set() : usage variation -  unexpected values to second argument $hour***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_time_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_time_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_time_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_time_set() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_time_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_time_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_time_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_time_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_time_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_time_set() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_time_set() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_time_set() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_time_set() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_time_set_variation3.phpt b/ext/date/tests/date_time_set_variation3.phpt
new file mode 100644
index 0000000..192b7fe
--- /dev/null
+++ b/ext/date/tests/date_time_set_variation3.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_time_set() function : usage variation - Passing unexpected values to third argument $minute.
+--FILE--
+<?php
+/* Prototype  : void date_time_set  ( DateTime $object  , int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTime
+ */
+
+echo "*** Testing date_time_set() : usage variation -  unexpected values to third argument \$minute***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-01-31 15:14:10");
+$hour = 10;
+$sec = 45;
+
+foreach($inputs as $variation =>$minute) {
+      echo "\n-- $variation --\n";
+      var_dump( date_time_set($object, $hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_time_set() : usage variation -  unexpected values to third argument $minute***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_time_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_time_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_time_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_time_set() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_time_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_time_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_time_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_time_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_time_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_time_set() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_time_set() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_time_set() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_time_set() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_time_set_variation4.phpt b/ext/date/tests/date_time_set_variation4.phpt
new file mode 100644
index 0000000..cd1e37d
--- /dev/null
+++ b/ext/date/tests/date_time_set_variation4.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test date_time_set() function : usage variation - Passing unexpected values to forth argument $sec.
+--FILE--
+<?php
+/* Prototype  : void date_time_set  ( DateTime $object  , int $hour  , int $minute  [, int $second  ] )
+ * Description: Resets the current time of the DateTime object to a different time. 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTime
+ */
+
+echo "*** Testing date_time_set() : usage variation -  unexpected values to forth argument \$sec***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-01-31 15:14:10");
+$hour = 10;
+$minute = 13;
+
+foreach($inputs as $variation =>$sec) {
+      echo "\n-- $variation --\n";
+      var_dump( date_time_set($object, $hour, $minute, $sec) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_time_set() : usage variation -  unexpected values to forth argument $sec***
+
+-- int 0 --
+NULL
+
+-- int 1 --
+NULL
+
+-- int 12345 --
+NULL
+
+-- int -12345 --
+NULL
+
+-- float 10.5 --
+NULL
+
+-- float -10.5 --
+NULL
+
+-- float .5 --
+NULL
+
+-- empty array --
+
+Warning: date_time_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_time_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_time_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_time_set() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+NULL
+
+-- lowercase null --
+NULL
+
+-- lowercase true --
+NULL
+
+-- lowercase false --
+NULL
+
+-- uppercase TRUE --
+NULL
+
+-- uppercase FALSE --
+NULL
+
+-- empty string DQ --
+
+Warning: date_time_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_time_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_time_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_time_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_time_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_time_set() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_time_set() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_time_set() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+NULL
+
+-- unset var --
+NULL
+
+-- resource --
+
+Warning: date_time_set() expects parameter 4 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_timezone_get_basic1.phpt b/ext/date/tests/date_timezone_get_basic1.phpt
new file mode 100644
index 0000000..f77352e
--- /dev/null
+++ b/ext/date/tests/date_timezone_get_basic1.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test date_timezone_get() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTimeZone date_timezone_get  ( DateTime $object  )
+ * Description: Return time zone relative to given DateTime
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTimezone
+ */
+
+echo "*** Testing date_timezone_get() : basic functionality ***\n";
+
+date_default_timezone_set("Europe/London");
+$object = date_create("2009-01-30 17:57:32");
+$tz = date_timezone_get($object); 
+var_dump( timezone_name_get($tz) );
+
+date_default_timezone_set("America/New_York");
+$object = date_create("2009-01-30 17:57:32");
+$tz = date_timezone_get($object); 
+var_dump( timezone_name_get($tz) );
+
+$la_time = timezone_open("America/Los_Angeles");
+date_timezone_set($object, $la_time);
+$tz = date_timezone_get($object); 
+var_dump( timezone_name_get($tz) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_get() : basic functionality ***
+string(13) "Europe/London"
+string(16) "America/New_York"
+string(19) "America/Los_Angeles"
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/date_timezone_get_error.phpt b/ext/date/tests/date_timezone_get_error.phpt
new file mode 100644
index 0000000..1310cbe
--- /dev/null
+++ b/ext/date/tests/date_timezone_get_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test date_timezone_get() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : DateTimeZone date_timezone_get  ( DateTime $object  )
+ * Description: Return time zone relative to given DateTime
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::getTimezone
+ */
+ 
+// Set timezone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing date_timezone_get() : error conditions ***\n";
+
+echo "\n-- Testing date_timezone_get() function with zero arguments --\n";
+var_dump( date_timezone_get() ); 
+
+echo "\n-- Testing date_timezone_get() function with more than expected no. of arguments --\n";
+$datetime = date_create("2009-01-30 17:57:32");
+$extra_arg = 99;
+var_dump( date_timezone_get($datetime, $extra_arg) );
+
+echo "\n-- Testing date_timezone_get() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_timezone_get($invalid_obj) );  
+$invalid_obj = 10;
+var_dump( date_timezone_get($invalid_obj) );
+$invalid_obj = null;
+var_dump( date_timezone_get($invalid_obj) ); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_get() : error conditions ***
+
+-- Testing date_timezone_get() function with zero arguments --
+
+Warning: date_timezone_get() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_timezone_get() function with more than expected no. of arguments --
+
+Warning: date_timezone_get() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing date_timezone_get() function with an invalid values for $object argument --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_timezone_get_variation1.phpt b/ext/date/tests/date_timezone_get_variation1.phpt
new file mode 100644
index 0000000..3b2034e
--- /dev/null
+++ b/ext/date/tests/date_timezone_get_variation1.phpt
@@ -0,0 +1,250 @@
+--TEST--
+Test date_timezone_get() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : DateTimeZone date_timezone_get  ( DateTime $object  )
+ * Description: Return time zone relative to given DateTime
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::getTimezone
+ */
+
+echo "*** Testing date_timezone_get() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_timezone_get($object) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_get() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_timezone_get() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_timezone_set_basic1.phpt b/ext/date/tests/date_timezone_set_basic1.phpt
new file mode 100644
index 0000000..2e9154c
--- /dev/null
+++ b/ext/date/tests/date_timezone_set_basic1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test date_timezone_set() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTime date_timezone_set  ( DateTime $object  , DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTimezone
+ */
+
+echo "*** Testing date_timezone_set() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+$datetime = date_create("2009-01-30 17:57:32");
+$tz = date_timezone_get($datetime);
+echo "Default timezone: " . timezone_name_get($tz) . "\n";
+
+$datetime = date_create("2009-01-30 22:57:32");
+$la_time = timezone_open("America/Los_Angeles");
+
+date_timezone_set($datetime, $la_time);
+$tz = date_timezone_get($datetime);
+echo "New timezone: " . timezone_name_get($tz) . "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_set() : basic functionality ***
+Default timezone: Europe/London
+New timezone: America/Los_Angeles
+===DONE===
+
diff --git a/ext/date/tests/date_timezone_set_error.phpt b/ext/date/tests/date_timezone_set_error.phpt
new file mode 100644
index 0000000..8c9c00d
--- /dev/null
+++ b/ext/date/tests/date_timezone_set_error.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test date_timezone_set() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : DateTime date_timezone_set  ( DateTime $object  , DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTimezone
+ */
+ 
+date_default_timezone_set("UTC");
+
+echo "*** Testing date_timezone_set() : error conditions ***\n";
+
+echo "\n-- Testing date_timezone_set() function with zero arguments --\n";
+var_dump( date_timezone_set() ); 
+
+echo "\n-- Testing date_timezone_set() function with less than expected no. of arguments --\n";
+$datetime = date_create("2009-01-30 17:57:32");
+var_dump( date_timezone_set($datetime) ); 
+
+echo "\n-- Testing date_timezone_set() function with more than expected no. of arguments --\n";
+$timezone  = timezone_open("GMT");
+$extra_arg = 99;
+var_dump( date_timezone_set($datetime, $timezone, $extra_arg) );
+
+echo "\n-- Testing date_timezone_set() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( date_timezone_set($invalid_obj, $timezone) );  
+$invalid_obj = 10;
+var_dump( date_timezone_set($invalid_obj, $timezone) );
+$invalid_obj = null;
+var_dump( date_timezone_set($invalid_obj, $timezone) );  
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_set() : error conditions ***
+
+-- Testing date_timezone_set() function with zero arguments --
+
+Warning: date_timezone_set() expects exactly 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_timezone_set() function with less than expected no. of arguments --
+
+Warning: date_timezone_set() expects exactly 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing date_timezone_set() function with more than expected no. of arguments --
+
+Warning: date_timezone_set() expects exactly 2 parameters, 3 given in %s on line %d
+bool(false)
+
+-- Testing date_timezone_set() function with an invalid values for $object argument --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_timezone_set_variation1.phpt b/ext/date/tests/date_timezone_set_variation1.phpt
new file mode 100644
index 0000000..cde2d69
--- /dev/null
+++ b/ext/date/tests/date_timezone_set_variation1.phpt
@@ -0,0 +1,254 @@
+--TEST--
+Test date_timezone_set() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : DateTime date_timezone_set  ( DateTime $object  , DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTimezone
+ */
+
+echo "*** Testing date_timezone_set() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$timezone = timezone_open("America/Los_Angeles");
+
+foreach($inputs as $variation =>$object) {
+      echo "\n-- $variation --\n";
+      var_dump( date_timezone_set($object, $timezone) );
+};
+
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_set() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_timezone_set() expects parameter 1 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/date_timezone_set_variation2.phpt b/ext/date/tests/date_timezone_set_variation2.phpt
new file mode 100644
index 0000000..b85ddef
--- /dev/null
+++ b/ext/date/tests/date_timezone_set_variation2.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test date_timezone_set() function : usage variation - Passing unexpected values to second argument $timezone.
+--FILE--
+<?php
+/* Prototype  : DateTime date_timezone_set  ( DateTime $object  , DateTimeZone $timezone  )
+ * Description: Sets the time zone for the DateTime object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::setTimezone
+ */
+
+echo "*** Testing date_timezone_set() : usage variation -  unexpected values to second argument \$timezone***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = date_create("2009-01-30 17:57:32");
+
+foreach($inputs as $variation =>$timezone) {
+      echo "\n-- $variation --\n";
+      var_dump( date_timezone_set($object, $timezone) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_timezone_set() : usage variation -  unexpected values to second argument $timezone***
+
+-- int 0 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: date_timezone_set() expects parameter 2 to be DateTimeZone, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_variation1.phpt b/ext/date/tests/date_variation1.phpt
new file mode 100644
index 0000000..a719359
--- /dev/null
+++ b/ext/date/tests/date_variation1.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test date() function : usage variation - Passing unexpected values to first argument $format.
+--FILE--
+<?php
+/* Prototype  : string date  ( string $format  [, int $timestamp  ] )
+ * Description: Format a local time/date.
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date() : usage variation -  unexpected values to first argument \$format***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$timestamp = mktime(10, 44, 30, 2, 27, 2009);
+
+foreach($inputs as $variation =>$format) {
+      echo "\n-- $variation --\n";
+      var_dump( date($format, $timestamp) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date() : usage variation -  unexpected values to first argument $format***
+
+-- int 0 --
+string(1) "0"
+
+-- int 1 --
+string(1) "1"
+
+-- int 12345 --
+string(5) "12345"
+
+-- int -12345 --
+string(6) "-12345"
+
+-- float 10.5 --
+string(4) "10.5"
+
+-- float -10.5 --
+string(5) "-10.5"
+
+-- float .5 --
+string(3) "0.5"
+
+-- empty array --
+
+Warning: date() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(0) ""
+
+-- lowercase null --
+string(0) ""
+
+-- lowercase true --
+string(1) "1"
+
+-- lowercase false --
+string(0) ""
+
+-- uppercase TRUE --
+string(1) "1"
+
+-- uppercase FALSE --
+string(0) ""
+
+-- empty string DQ --
+string(0) ""
+
+-- empty string SQ --
+string(0) ""
+
+-- string DQ --
+string(40) "3028Fri, 27 Feb 2009 10:44:30 +000044210"
+
+-- string SQ --
+string(40) "3028Fri, 27 Feb 2009 10:44:30 +000044210"
+
+-- mixed case string --
+string(40) "30GMTFri, 27 Feb 2009 10:44:30 +00000210"
+
+-- heredoc --
+string(76) "10Europe/LondonFridayFriday2009 52009Fri, 27 Feb 2009 10:44:30 +0000Friday27"
+
+-- instance of classWithToString --
+string(64) "CFridayam3030 AM 2009b27Europe/London2009-02-27T10:44:30+00:0028"
+
+-- instance of classWithoutToString --
+
+Warning: date() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(0) ""
+
+-- unset var --
+string(0) ""
+
+-- resource --
+
+Warning: date() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/date_variation2.phpt b/ext/date/tests/date_variation2.phpt
new file mode 100644
index 0000000..f30e6ed
--- /dev/null
+++ b/ext/date/tests/date_variation2.phpt
@@ -0,0 +1,222 @@
+--TEST--
+Test date() function : usage variation - Passing unexpected values to second argument $timestamp.
+--FILE--
+<?php
+/* Prototype  : string date  ( string $format  [, int $timestamp  ] )
+ * Description: Format a local time/date.
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date() : usage variation -  unexpected values to second argument \$timestamp***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$format = "F j, Y, g:i a";
+
+foreach($inputs as $variation =>$timestamp) {
+      echo "\n-- $variation --\n";
+      var_dump( date($format, $timestamp) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date() : usage variation -  unexpected values to second argument $timestamp***
+
+-- int 0 --
+string(24) "January 1, 1970, 1:00 am"
+
+-- int 1 --
+string(24) "January 1, 1970, 1:00 am"
+
+-- int 12345 --
+string(24) "January 1, 1970, 4:25 am"
+
+-- int -12345 --
+string(26) "December 31, 1969, 9:34 pm"
+
+-- float 10.5 --
+string(24) "January 1, 1970, 1:00 am"
+
+-- float -10.5 --
+string(25) "January 1, 1970, 12:59 am"
+
+-- float .5 --
+string(24) "January 1, 1970, 1:00 am"
+
+-- empty array --
+
+Warning: date() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: date() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: date() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: date() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(24) "January 1, 1970, 1:00 am"
+
+-- lowercase null --
+string(24) "January 1, 1970, 1:00 am"
+
+-- lowercase true --
+string(24) "January 1, 1970, 1:00 am"
+
+-- lowercase false --
+string(24) "January 1, 1970, 1:00 am"
+
+-- uppercase TRUE --
+string(24) "January 1, 1970, 1:00 am"
+
+-- uppercase FALSE --
+string(24) "January 1, 1970, 1:00 am"
+
+-- empty string DQ --
+
+Warning: date() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: date() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: date() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: date() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: date() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: date() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: date() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: date() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(24) "January 1, 1970, 1:00 am"
+
+-- unset var --
+string(24) "January 1, 1970, 1:00 am"
+
+-- resource --
+
+Warning: date() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/idate_error.phpt b/ext/date/tests/idate_error.phpt
new file mode 100644
index 0000000..7dad460
--- /dev/null
+++ b/ext/date/tests/idate_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test idate() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing idate() : error conditions ***\n";
+
+echo "\n-- Testing idate() function with Zero arguments --\n";
+var_dump( idate() );
+
+echo "\n-- Testing idate() function with more than expected no. of arguments --\n";
+$format = '%b %d %Y %H:%M:%S';
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+$extra_arg = 10;
+var_dump( idate($format, $timestamp, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : error conditions ***
+
+-- Testing idate() function with Zero arguments --
+
+Warning: idate() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing idate() function with more than expected no. of arguments --
+
+Warning: idate() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/localtime_error.phpt b/ext/date/tests/localtime_error.phpt
new file mode 100644
index 0000000..b231ed0
--- /dev/null
+++ b/ext/date/tests/localtime_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test localtime() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array 
+ * if the associative_array argument is set to 1 other wise it is a regular array 
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing localtime() : error conditions ***\n";
+
+echo "\n-- Testing localtime() function with more than expected no. of arguments --\n";
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+$assoc = true;
+$extra_arg = 10;
+var_dump( localtime($timestamp, $assoc, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing localtime() : error conditions ***
+
+-- Testing localtime() function with more than expected no. of arguments --
+
+Warning: localtime() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/mktime_basic1.phpt b/ext/date/tests/mktime_basic1.phpt
new file mode 100644
index 0000000..0f7cd8c
--- /dev/null
+++ b/ext/date/tests/mktime_basic1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test mktime() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+error_reporting(E_ALL | E_STRICT);
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing DateTime::modify() : basic functionality ***\n";
+
+$hour = 10;
+$minute = 30;
+$sec = 45;
+$month = 7;
+$day = 2;
+$year = 1963;
+$is_dst = 0; 
+
+var_dump( mktime($hour) );
+var_dump( mktime($hour, $minute) );
+var_dump( mktime($hour, $minute, $sec) );
+var_dump( mktime($hour, $minute, $sec, $month) );
+var_dump( mktime($hour, $minute, $sec, $month, $day) );
+var_dump( mktime($hour, $minute, $sec, $month, $day, $year) );
+var_dump( mktime($hour, $minute, $sec, $month, $day, $year, $is_dst) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing DateTime::modify() : basic functionality ***
+int(%i)
+int(%i)
+int(%i)
+int(%i)
+int(%i)
+int(%i)
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+===DONE===
+
diff --git a/ext/date/tests/mktime_error.phpt b/ext/date/tests/mktime_error.phpt
new file mode 100644
index 0000000..f517dc8
--- /dev/null
+++ b/ext/date/tests/mktime_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test mktime() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+error_reporting(E_ALL | E_STRICT);
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing mktime() : error conditions ***\n";
+
+echo "\n-- Testing mktime() function with Zero arguments --\n";
+var_dump( mktime() );
+
+echo "\n-- Testing mktime() function with more than expected no. of arguments --\n";
+$hour = 10;
+$minute = 30;
+$sec = 45;
+$month = 7;
+$day = 2;
+$year = 1963;
+$is_dst = 0; 
+$extra_arg = 10;
+var_dump( mktime($hour, $minute, $sec, $month, $day, $year, $is_dst, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : error conditions ***
+
+-- Testing mktime() function with Zero arguments --
+
+Strict Standards: mktime(): You should be using the time() function instead in %s on line %d
+int(%d)
+
+-- Testing mktime() function with more than expected no. of arguments --
+
+Warning: mktime() expects at most 7 parameters, 8 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/mktime_variation1.phpt b/ext/date/tests/mktime_variation1.phpt
new file mode 100644
index 0000000..eec97da
--- /dev/null
+++ b/ext/date/tests/mktime_variation1.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to first argument $hour.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to first argument \$hour***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 30;
+$sec = 45;
+$month = 7;
+$day = 2;
+$year = 1963;
+$is_dst = 0; 
+
+foreach($inputs as $variation =>$hour) {
+      echo "\n-- $variation --\n";
+      var_dump( mktime($hour) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to first argument $hour***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+int(%i)
+
+-- int -12345 --
+int(%i)
+
+-- float 10.5 --
+int(%i)
+
+-- float -10.5 --
+int(%i)
+
+-- float .5 --
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+int(%i)
+
+-- lowercase null --
+int(%i)
+
+-- lowercase true --
+int(%i)
+
+-- lowercase false --
+int(%i)
+
+-- uppercase TRUE --
+int(%i)
+
+-- uppercase FALSE --
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+int(%i)
+
+-- unset var --
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/mktime_variation2.phpt b/ext/date/tests/mktime_variation2.phpt
new file mode 100644
index 0000000..a969b32
--- /dev/null
+++ b/ext/date/tests/mktime_variation2.phpt
@@ -0,0 +1,218 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to second argument $minute.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to second argument \$minute***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+
+foreach($inputs as $variation =>$minute) {
+      echo "\n-- $variation --\n";
+      var_dump( mktime($hour, $minute) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to second argument $minute***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+int(%i)
+
+-- int -12345 --
+int(%i)
+
+-- float 10.5 --
+int(%i)
+
+-- float -10.5 --
+int(%i)
+
+-- float .5 --
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+int(%i)
+
+-- lowercase null --
+int(%i)
+
+-- lowercase true --
+int(%i)
+
+-- lowercase false --
+int(%i)
+
+-- uppercase TRUE --
+int(%i)
+
+-- uppercase FALSE --
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+int(%i)
+
+-- unset var --
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/mktime_variation3.phpt b/ext/date/tests/mktime_variation3.phpt
new file mode 100644
index 0000000..52155f8
--- /dev/null
+++ b/ext/date/tests/mktime_variation3.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to third argument $second.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to third argument \$second***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 30;
+
+foreach($inputs as $variation =>$second) {
+      echo "\n-- $variation --\n";
+      var_dump( mktime($hour, $minute, $second) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to third argument $second***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+int(%i)
+
+-- int -12345 --
+int(%i)
+
+-- float 10.5 --
+int(%i)
+
+-- float -10.5 --
+int(%i)
+
+-- float .5 --
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+int(%i)
+
+-- lowercase null --
+int(%i)
+
+-- lowercase true --
+int(%i)
+
+-- lowercase false --
+int(%i)
+
+-- uppercase TRUE --
+int(%i)
+
+-- uppercase FALSE --
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+int(%i)
+
+-- unset var --
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/mktime_variation4.phpt b/ext/date/tests/mktime_variation4.phpt
new file mode 100644
index 0000000..3b0e200
--- /dev/null
+++ b/ext/date/tests/mktime_variation4.phpt
@@ -0,0 +1,220 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to forth argument $month.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to forth argument \$month***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 30;
+$second = 45;
+
+foreach($inputs as $variation =>$month) {
+      echo "\n-- $variation --\n";
+      var_dump( mktime($hour, $minute, $second, $month) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to forth argument $month***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+%rint\(-?[1-9][0-9]*\)|bool\(false\)%r
+
+-- int -12345 --
+%rint\(-?[1-9][0-9]*\)|bool\(false\)%r
+
+-- float 10.5 --
+int(%i)
+
+-- float -10.5 --
+int(%i)
+
+-- float .5 --
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+int(%i)
+
+-- lowercase null --
+int(%i)
+
+-- lowercase true --
+int(%i)
+
+-- lowercase false --
+int(%i)
+
+-- uppercase TRUE --
+int(%i)
+
+-- uppercase FALSE --
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+int(%i)
+
+-- unset var --
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 4 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/mktime_variation5.phpt b/ext/date/tests/mktime_variation5.phpt
new file mode 100644
index 0000000..4e3690a
--- /dev/null
+++ b/ext/date/tests/mktime_variation5.phpt
@@ -0,0 +1,221 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to fifth argument $day.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to fifth argument \$day***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 30;
+$second = 45;
+$month = 7;
+
+foreach($inputs as $variation =>$day) {
+      echo "\n-- $variation --\n";
+      var_dump( mktime($hour, $minute, $second, $month, $day) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to fifth argument $day***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+%rint\(-?[1-9][0-9]*\)|bool\(false\)%r
+
+-- int -12345 --
+int(%i)
+
+-- float 10.5 --
+int(%i)
+
+-- float -10.5 --
+int(%i)
+
+-- float .5 --
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+int(%i)
+
+-- lowercase null --
+int(%i)
+
+-- lowercase true --
+int(%i)
+
+-- lowercase false --
+int(%i)
+
+-- uppercase TRUE --
+int(%i)
+
+-- uppercase FALSE --
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 5 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 5 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+int(%i)
+
+-- unset var --
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 5 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/mktime_variation6.phpt b/ext/date/tests/mktime_variation6.phpt
new file mode 100644
index 0000000..d0961ff
--- /dev/null
+++ b/ext/date/tests/mktime_variation6.phpt
@@ -0,0 +1,223 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to sixth argument $year.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to sixth argument \$year***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 30;
+$second = 45;
+$month = 7;
+$day = 2;
+
+foreach($inputs as $variation =>$year) {
+    echo "\n-- $variation --\n";
+	var_dump( mktime($hour, $minute, $second, $month, $day, $year) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to sixth argument $year***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+%rint\(-?[1-9][0-9]*\)|bool\(false\)%r
+
+-- int -12345 --
+%rint\(-?[1-9][0-9]*\)|bool\(false\)%r
+
+-- float 10.5 --
+int(%i)
+
+-- float -10.5 --
+%rint\(-?[1-9][0-9]*\)|bool\(false\)%r
+
+-- float .5 --
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+int(%i)
+
+-- lowercase null --
+int(%i)
+
+-- lowercase true --
+int(%i)
+
+-- lowercase false --
+int(%i)
+
+-- uppercase TRUE --
+int(%i)
+
+-- uppercase FALSE --
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 6 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 6 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+int(%i)
+
+-- unset var --
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 6 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/date/tests/mktime_variation7.phpt b/ext/date/tests/mktime_variation7.phpt
new file mode 100644
index 0000000..b10f400
--- /dev/null
+++ b/ext/date/tests/mktime_variation7.phpt
@@ -0,0 +1,251 @@
+--TEST--
+Test mktime() function : usage variation - Passing unexpected values to seventh argument $is_dst.
+--FILE--
+<?php
+/* Prototype  : int mktime  ([ int $hour= date("H")  [, int $minute= date("i")  [, int $second= date("s")  [, int $month= date("n")  [, int $day= date("j")  [, int $year= date("Y")  [, int $is_dst= -1  ]]]]]]] )
+ * Description: Get Unix timestamp for a date
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing mktime() : usage variation -  unexpected values to seventh argument \$is_dst***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 0' => 1,
+      'int 0' => -1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$hour = 10;
+$minute = 30;
+$second = 45;
+$month = 7;
+$day = 2;
+$year = 1963;
+
+foreach($inputs as $variation =>$is_dst) {
+      echo "\n-- $variation --\n";
+      var_dump( mktime($hour, $minute, $second, $month, $day, $year, $is_dst) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mktime() : usage variation -  unexpected values to seventh argument $is_dst***
+
+-- int 0 --
+int(%i)
+
+-- int 12345 --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- int -12345 --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- float 10.5 --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- float -10.5 --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- float .5 --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- empty array --
+
+Warning: mktime() expects parameter 7 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: mktime() expects parameter 7 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: mktime() expects parameter 7 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: mktime() expects parameter 7 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- lowercase null --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- lowercase true --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- lowercase false --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- uppercase TRUE --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- uppercase FALSE --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- empty string DQ --
+
+Warning: mktime() expects parameter 7 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: mktime() expects parameter 7 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: mktime() expects parameter 7 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: mktime() expects parameter 7 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: mktime() expects parameter 7 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: mktime() expects parameter 7 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: mktime() expects parameter 7 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: mktime() expects parameter 7 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- unset var --
+
+Strict Standards: mktime(): The is_dst parameter is deprecated in %s on line %d
+int(%i)
+
+-- resource --
+
+Warning: mktime() expects parameter 7 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strtotime-relative.phpt b/ext/date/tests/strtotime-relative.phpt
new file mode 100644
index 0000000..769cd2e
--- /dev/null
+++ b/ext/date/tests/strtotime-relative.phpt
@@ -0,0 +1,98 @@
+--TEST--
+strtotime() with relative offsets
+--FILE--
+<?php
+
+date_default_timezone_set('UTC');
+
+$base_time = 1204200000; // 28 Feb 2008 12:00:00
+
+$offsets = array(
+	// offset around a day
+	'80412 seconds',
+	'86399 seconds',
+	'86400 seconds',
+	'86401 seconds',
+	'112913 seconds',
+	
+	// offset around 7 days
+	'134 hours',
+	'167 hours',
+	'168 hours',
+	'169 hours',
+	'183 hours',
+	
+	// offset around 6 months
+	'178 days',
+	'179 days',
+	'180 days',
+	'183 days',
+	'184 days',
+	
+	// offset around 10 years
+	'115 months',
+	'119 months',
+	'120 months',
+	'121 months',
+	'128 months',
+	
+	// offset around 25 years (can't do much more reliably with strtotime)
+	'24 years',
+	'25 years',
+	'26 years'
+);
+
+foreach ($offsets AS $offset) {
+	foreach (array('+', '-') AS $direction) {
+		echo "$direction$offset: " . date(DATE_ISO8601, strtotime("$direction$offset", $base_time)) . "\n";
+	}
+}	
+
+?>
+--EXPECT--
++80412 seconds: 2008-02-29T10:20:12+0000
+-80412 seconds: 2008-02-27T13:39:48+0000
++86399 seconds: 2008-02-29T11:59:59+0000
+-86399 seconds: 2008-02-27T12:00:01+0000
++86400 seconds: 2008-02-29T12:00:00+0000
+-86400 seconds: 2008-02-27T12:00:00+0000
++86401 seconds: 2008-02-29T12:00:01+0000
+-86401 seconds: 2008-02-27T11:59:59+0000
++112913 seconds: 2008-02-29T19:21:53+0000
+-112913 seconds: 2008-02-27T04:38:07+0000
++134 hours: 2008-03-05T02:00:00+0000
+-134 hours: 2008-02-22T22:00:00+0000
++167 hours: 2008-03-06T11:00:00+0000
+-167 hours: 2008-02-21T13:00:00+0000
++168 hours: 2008-03-06T12:00:00+0000
+-168 hours: 2008-02-21T12:00:00+0000
++169 hours: 2008-03-06T13:00:00+0000
+-169 hours: 2008-02-21T11:00:00+0000
++183 hours: 2008-03-07T03:00:00+0000
+-183 hours: 2008-02-20T21:00:00+0000
++178 days: 2008-08-24T12:00:00+0000
+-178 days: 2007-09-03T12:00:00+0000
++179 days: 2008-08-25T12:00:00+0000
+-179 days: 2007-09-02T12:00:00+0000
++180 days: 2008-08-26T12:00:00+0000
+-180 days: 2007-09-01T12:00:00+0000
++183 days: 2008-08-29T12:00:00+0000
+-183 days: 2007-08-29T12:00:00+0000
++184 days: 2008-08-30T12:00:00+0000
+-184 days: 2007-08-28T12:00:00+0000
++115 months: 2017-09-28T12:00:00+0000
+-115 months: 1998-07-28T12:00:00+0000
++119 months: 2018-01-28T12:00:00+0000
+-119 months: 1998-03-28T12:00:00+0000
++120 months: 2018-02-28T12:00:00+0000
+-120 months: 1998-02-28T12:00:00+0000
++121 months: 2018-03-28T12:00:00+0000
+-121 months: 1998-01-28T12:00:00+0000
++128 months: 2018-10-28T12:00:00+0000
+-128 months: 1997-06-28T12:00:00+0000
++24 years: 2032-02-28T12:00:00+0000
+-24 years: 1984-02-28T12:00:00+0000
++25 years: 2033-02-28T12:00:00+0000
+-25 years: 1983-02-28T12:00:00+0000
++26 years: 2034-02-28T12:00:00+0000
+-26 years: 1982-02-28T12:00:00+0000
diff --git a/ext/date/tests/timezone_abbreviations_list_basic1.phpt b/ext/date/tests/timezone_abbreviations_list_basic1.phpt
new file mode 100644
index 0000000..6fc3480
--- /dev/null
+++ b/ext/date/tests/timezone_abbreviations_list_basic1.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test timezone_abbreviations_list() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array timezone_abbreviations_list  ( void  )
+ * Description: Returns associative array containing dst, offset and the timezone name
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::listAbbreviations
+ */
+
+echo "*** Testing timezone_abbreviations_list() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$abbr = timezone_abbreviations_list();
+
+var_dump( gettype($abbr) );
+var_dump( count($abbr) );
+
+echo "\n-- Format a sample entry --\n";
+var_dump( $abbr["acst"] );	
+
+?>
+===DONE===
+--EXPECT--
+*** Testing timezone_abbreviations_list() : basic functionality ***
+string(5) "array"
+int(338)
+
+-- Format a sample entry --
+array(4) {
+  [0]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(18) "America/Porto_Acre"
+  }
+  [1]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(16) "America/Eirunepe"
+  }
+  [2]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(18) "America/Rio_Branco"
+  }
+  [3]=>
+  array(3) {
+    ["dst"]=>
+    bool(true)
+    ["offset"]=>
+    int(-14400)
+    ["timezone_id"]=>
+    string(11) "Brazil/Acre"
+  }
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_identifiers_list_basic1.phpt b/ext/date/tests/timezone_identifiers_list_basic1.phpt
new file mode 100644
index 0000000..0e87b80
--- /dev/null
+++ b/ext/date/tests/timezone_identifiers_list_basic1.phpt
@@ -0,0 +1,1144 @@
+--TEST--
+Test timezone_identifiers_list() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array timezone_identifiers_list  ( void )
+ * Description: Returns numerically index array with all timezone identifiers  
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing timezone_identifiers_list() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+var_dump (timezone_identifiers_list() );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_identifiers_list() : basic functionality ***
+array(560) {
+  [0]=>
+  string(14) "Africa/Abidjan"
+  [1]=>
+  string(12) "Africa/Accra"
+  [2]=>
+  string(18) "Africa/Addis_Ababa"
+  [3]=>
+  string(14) "Africa/Algiers"
+  [4]=>
+  string(13) "Africa/Asmara"
+  [5]=>
+  string(13) "Africa/Asmera"
+  [6]=>
+  string(13) "Africa/Bamako"
+  [7]=>
+  string(13) "Africa/Bangui"
+  [8]=>
+  string(13) "Africa/Banjul"
+  [9]=>
+  string(13) "Africa/Bissau"
+  [10]=>
+  string(15) "Africa/Blantyre"
+  [11]=>
+  string(18) "Africa/Brazzaville"
+  [12]=>
+  string(16) "Africa/Bujumbura"
+  [13]=>
+  string(12) "Africa/Cairo"
+  [14]=>
+  string(17) "Africa/Casablanca"
+  [15]=>
+  string(12) "Africa/Ceuta"
+  [16]=>
+  string(14) "Africa/Conakry"
+  [17]=>
+  string(12) "Africa/Dakar"
+  [18]=>
+  string(20) "Africa/Dar_es_Salaam"
+  [19]=>
+  string(15) "Africa/Djibouti"
+  [20]=>
+  string(13) "Africa/Douala"
+  [21]=>
+  string(15) "Africa/El_Aaiun"
+  [22]=>
+  string(15) "Africa/Freetown"
+  [23]=>
+  string(15) "Africa/Gaborone"
+  [24]=>
+  string(13) "Africa/Harare"
+  [25]=>
+  string(19) "Africa/Johannesburg"
+  [26]=>
+  string(14) "Africa/Kampala"
+  [27]=>
+  string(15) "Africa/Khartoum"
+  [28]=>
+  string(13) "Africa/Kigali"
+  [29]=>
+  string(15) "Africa/Kinshasa"
+  [30]=>
+  string(12) "Africa/Lagos"
+  [31]=>
+  string(17) "Africa/Libreville"
+  [32]=>
+  string(11) "Africa/Lome"
+  [33]=>
+  string(13) "Africa/Luanda"
+  [34]=>
+  string(17) "Africa/Lubumbashi"
+  [35]=>
+  string(13) "Africa/Lusaka"
+  [36]=>
+  string(13) "Africa/Malabo"
+  [37]=>
+  string(13) "Africa/Maputo"
+  [38]=>
+  string(13) "Africa/Maseru"
+  [39]=>
+  string(14) "Africa/Mbabane"
+  [40]=>
+  string(16) "Africa/Mogadishu"
+  [41]=>
+  string(15) "Africa/Monrovia"
+  [42]=>
+  string(14) "Africa/Nairobi"
+  [43]=>
+  string(15) "Africa/Ndjamena"
+  [44]=>
+  string(13) "Africa/Niamey"
+  [45]=>
+  string(17) "Africa/Nouakchott"
+  [46]=>
+  string(18) "Africa/Ouagadougou"
+  [47]=>
+  string(17) "Africa/Porto-Novo"
+  [48]=>
+  string(15) "Africa/Sao_Tome"
+  [49]=>
+  string(15) "Africa/Timbuktu"
+  [50]=>
+  string(14) "Africa/Tripoli"
+  [51]=>
+  string(12) "Africa/Tunis"
+  [52]=>
+  string(15) "Africa/Windhoek"
+  [53]=>
+  string(12) "America/Adak"
+  [54]=>
+  string(17) "America/Anchorage"
+  [55]=>
+  string(16) "America/Anguilla"
+  [56]=>
+  string(15) "America/Antigua"
+  [57]=>
+  string(17) "America/Araguaina"
+  [58]=>
+  string(30) "America/Argentina/Buenos_Aires"
+  [59]=>
+  string(27) "America/Argentina/Catamarca"
+  [60]=>
+  string(32) "America/Argentina/ComodRivadavia"
+  [61]=>
+  string(25) "America/Argentina/Cordoba"
+  [62]=>
+  string(23) "America/Argentina/Jujuy"
+  [63]=>
+  string(26) "America/Argentina/La_Rioja"
+  [64]=>
+  string(25) "America/Argentina/Mendoza"
+  [65]=>
+  string(30) "America/Argentina/Rio_Gallegos"
+  [66]=>
+  string(23) "America/Argentina/Salta"
+  [67]=>
+  string(26) "America/Argentina/San_Juan"
+  [68]=>
+  string(26) "America/Argentina/San_Luis"
+  [69]=>
+  string(25) "America/Argentina/Tucuman"
+  [70]=>
+  string(25) "America/Argentina/Ushuaia"
+  [71]=>
+  string(13) "America/Aruba"
+  [72]=>
+  string(16) "America/Asuncion"
+  [73]=>
+  string(16) "America/Atikokan"
+  [74]=>
+  string(12) "America/Atka"
+  [75]=>
+  string(13) "America/Bahia"
+  [76]=>
+  string(16) "America/Barbados"
+  [77]=>
+  string(13) "America/Belem"
+  [78]=>
+  string(14) "America/Belize"
+  [79]=>
+  string(20) "America/Blanc-Sablon"
+  [80]=>
+  string(17) "America/Boa_Vista"
+  [81]=>
+  string(14) "America/Bogota"
+  [82]=>
+  string(13) "America/Boise"
+  [83]=>
+  string(20) "America/Buenos_Aires"
+  [84]=>
+  string(21) "America/Cambridge_Bay"
+  [85]=>
+  string(20) "America/Campo_Grande"
+  [86]=>
+  string(14) "America/Cancun"
+  [87]=>
+  string(15) "America/Caracas"
+  [88]=>
+  string(17) "America/Catamarca"
+  [89]=>
+  string(15) "America/Cayenne"
+  [90]=>
+  string(14) "America/Cayman"
+  [91]=>
+  string(15) "America/Chicago"
+  [92]=>
+  string(17) "America/Chihuahua"
+  [93]=>
+  string(21) "America/Coral_Harbour"
+  [94]=>
+  string(15) "America/Cordoba"
+  [95]=>
+  string(18) "America/Costa_Rica"
+  [96]=>
+  string(14) "America/Cuiaba"
+  [97]=>
+  string(15) "America/Curacao"
+  [98]=>
+  string(20) "America/Danmarkshavn"
+  [99]=>
+  string(14) "America/Dawson"
+  [100]=>
+  string(20) "America/Dawson_Creek"
+  [101]=>
+  string(14) "America/Denver"
+  [102]=>
+  string(15) "America/Detroit"
+  [103]=>
+  string(16) "America/Dominica"
+  [104]=>
+  string(16) "America/Edmonton"
+  [105]=>
+  string(16) "America/Eirunepe"
+  [106]=>
+  string(19) "America/El_Salvador"
+  [107]=>
+  string(16) "America/Ensenada"
+  [108]=>
+  string(18) "America/Fort_Wayne"
+  [109]=>
+  string(17) "America/Fortaleza"
+  [110]=>
+  string(17) "America/Glace_Bay"
+  [111]=>
+  string(15) "America/Godthab"
+  [112]=>
+  string(17) "America/Goose_Bay"
+  [113]=>
+  string(18) "America/Grand_Turk"
+  [114]=>
+  string(15) "America/Grenada"
+  [115]=>
+  string(18) "America/Guadeloupe"
+  [116]=>
+  string(17) "America/Guatemala"
+  [117]=>
+  string(17) "America/Guayaquil"
+  [118]=>
+  string(14) "America/Guyana"
+  [119]=>
+  string(15) "America/Halifax"
+  [120]=>
+  string(14) "America/Havana"
+  [121]=>
+  string(18) "America/Hermosillo"
+  [122]=>
+  string(28) "America/Indiana/Indianapolis"
+  [123]=>
+  string(20) "America/Indiana/Knox"
+  [124]=>
+  string(23) "America/Indiana/Marengo"
+  [125]=>
+  string(26) "America/Indiana/Petersburg"
+  [126]=>
+  string(25) "America/Indiana/Tell_City"
+  [127]=>
+  string(21) "America/Indiana/Vevay"
+  [128]=>
+  string(25) "America/Indiana/Vincennes"
+  [129]=>
+  string(23) "America/Indiana/Winamac"
+  [130]=>
+  string(20) "America/Indianapolis"
+  [131]=>
+  string(14) "America/Inuvik"
+  [132]=>
+  string(15) "America/Iqaluit"
+  [133]=>
+  string(15) "America/Jamaica"
+  [134]=>
+  string(13) "America/Jujuy"
+  [135]=>
+  string(14) "America/Juneau"
+  [136]=>
+  string(27) "America/Kentucky/Louisville"
+  [137]=>
+  string(27) "America/Kentucky/Monticello"
+  [138]=>
+  string(15) "America/Knox_IN"
+  [139]=>
+  string(14) "America/La_Paz"
+  [140]=>
+  string(12) "America/Lima"
+  [141]=>
+  string(19) "America/Los_Angeles"
+  [142]=>
+  string(18) "America/Louisville"
+  [143]=>
+  string(14) "America/Maceio"
+  [144]=>
+  string(15) "America/Managua"
+  [145]=>
+  string(14) "America/Manaus"
+  [146]=>
+  string(15) "America/Marigot"
+  [147]=>
+  string(18) "America/Martinique"
+  [148]=>
+  string(16) "America/Mazatlan"
+  [149]=>
+  string(15) "America/Mendoza"
+  [150]=>
+  string(17) "America/Menominee"
+  [151]=>
+  string(14) "America/Merida"
+  [152]=>
+  string(19) "America/Mexico_City"
+  [153]=>
+  string(16) "America/Miquelon"
+  [154]=>
+  string(15) "America/Moncton"
+  [155]=>
+  string(17) "America/Monterrey"
+  [156]=>
+  string(18) "America/Montevideo"
+  [157]=>
+  string(16) "America/Montreal"
+  [158]=>
+  string(18) "America/Montserrat"
+  [159]=>
+  string(14) "America/Nassau"
+  [160]=>
+  string(16) "America/New_York"
+  [161]=>
+  string(15) "America/Nipigon"
+  [162]=>
+  string(12) "America/Nome"
+  [163]=>
+  string(15) "America/Noronha"
+  [164]=>
+  string(27) "America/North_Dakota/Center"
+  [165]=>
+  string(30) "America/North_Dakota/New_Salem"
+  [166]=>
+  string(14) "America/Panama"
+  [167]=>
+  string(19) "America/Pangnirtung"
+  [168]=>
+  string(18) "America/Paramaribo"
+  [169]=>
+  string(15) "America/Phoenix"
+  [170]=>
+  string(22) "America/Port-au-Prince"
+  [171]=>
+  string(21) "America/Port_of_Spain"
+  [172]=>
+  string(18) "America/Porto_Acre"
+  [173]=>
+  string(19) "America/Porto_Velho"
+  [174]=>
+  string(19) "America/Puerto_Rico"
+  [175]=>
+  string(19) "America/Rainy_River"
+  [176]=>
+  string(20) "America/Rankin_Inlet"
+  [177]=>
+  string(14) "America/Recife"
+  [178]=>
+  string(14) "America/Regina"
+  [179]=>
+  string(16) "America/Resolute"
+  [180]=>
+  string(18) "America/Rio_Branco"
+  [181]=>
+  string(15) "America/Rosario"
+  [182]=>
+  string(16) "America/Santarem"
+  [183]=>
+  string(16) "America/Santiago"
+  [184]=>
+  string(21) "America/Santo_Domingo"
+  [185]=>
+  string(17) "America/Sao_Paulo"
+  [186]=>
+  string(20) "America/Scoresbysund"
+  [187]=>
+  string(16) "America/Shiprock"
+  [188]=>
+  string(21) "America/St_Barthelemy"
+  [189]=>
+  string(16) "America/St_Johns"
+  [190]=>
+  string(16) "America/St_Kitts"
+  [191]=>
+  string(16) "America/St_Lucia"
+  [192]=>
+  string(17) "America/St_Thomas"
+  [193]=>
+  string(18) "America/St_Vincent"
+  [194]=>
+  string(21) "America/Swift_Current"
+  [195]=>
+  string(19) "America/Tegucigalpa"
+  [196]=>
+  string(13) "America/Thule"
+  [197]=>
+  string(19) "America/Thunder_Bay"
+  [198]=>
+  string(15) "America/Tijuana"
+  [199]=>
+  string(15) "America/Toronto"
+  [200]=>
+  string(15) "America/Tortola"
+  [201]=>
+  string(17) "America/Vancouver"
+  [202]=>
+  string(14) "America/Virgin"
+  [203]=>
+  string(18) "America/Whitehorse"
+  [204]=>
+  string(16) "America/Winnipeg"
+  [205]=>
+  string(15) "America/Yakutat"
+  [206]=>
+  string(19) "America/Yellowknife"
+  [207]=>
+  string(16) "Antarctica/Casey"
+  [208]=>
+  string(16) "Antarctica/Davis"
+  [209]=>
+  string(25) "Antarctica/DumontDUrville"
+  [210]=>
+  string(17) "Antarctica/Mawson"
+  [211]=>
+  string(18) "Antarctica/McMurdo"
+  [212]=>
+  string(17) "Antarctica/Palmer"
+  [213]=>
+  string(18) "Antarctica/Rothera"
+  [214]=>
+  string(21) "Antarctica/South_Pole"
+  [215]=>
+  string(16) "Antarctica/Syowa"
+  [216]=>
+  string(17) "Antarctica/Vostok"
+  [217]=>
+  string(19) "Arctic/Longyearbyen"
+  [218]=>
+  string(9) "Asia/Aden"
+  [219]=>
+  string(11) "Asia/Almaty"
+  [220]=>
+  string(10) "Asia/Amman"
+  [221]=>
+  string(11) "Asia/Anadyr"
+  [222]=>
+  string(10) "Asia/Aqtau"
+  [223]=>
+  string(11) "Asia/Aqtobe"
+  [224]=>
+  string(13) "Asia/Ashgabat"
+  [225]=>
+  string(14) "Asia/Ashkhabad"
+  [226]=>
+  string(12) "Asia/Baghdad"
+  [227]=>
+  string(12) "Asia/Bahrain"
+  [228]=>
+  string(9) "Asia/Baku"
+  [229]=>
+  string(12) "Asia/Bangkok"
+  [230]=>
+  string(11) "Asia/Beirut"
+  [231]=>
+  string(12) "Asia/Bishkek"
+  [232]=>
+  string(11) "Asia/Brunei"
+  [233]=>
+  string(13) "Asia/Calcutta"
+  [234]=>
+  string(15) "Asia/Choibalsan"
+  [235]=>
+  string(14) "Asia/Chongqing"
+  [236]=>
+  string(14) "Asia/Chungking"
+  [237]=>
+  string(12) "Asia/Colombo"
+  [238]=>
+  string(10) "Asia/Dacca"
+  [239]=>
+  string(13) "Asia/Damascus"
+  [240]=>
+  string(10) "Asia/Dhaka"
+  [241]=>
+  string(9) "Asia/Dili"
+  [242]=>
+  string(10) "Asia/Dubai"
+  [243]=>
+  string(13) "Asia/Dushanbe"
+  [244]=>
+  string(9) "Asia/Gaza"
+  [245]=>
+  string(11) "Asia/Harbin"
+  [246]=>
+  string(16) "Asia/Ho_Chi_Minh"
+  [247]=>
+  string(14) "Asia/Hong_Kong"
+  [248]=>
+  string(9) "Asia/Hovd"
+  [249]=>
+  string(12) "Asia/Irkutsk"
+  [250]=>
+  string(13) "Asia/Istanbul"
+  [251]=>
+  string(12) "Asia/Jakarta"
+  [252]=>
+  string(13) "Asia/Jayapura"
+  [253]=>
+  string(14) "Asia/Jerusalem"
+  [254]=>
+  string(10) "Asia/Kabul"
+  [255]=>
+  string(14) "Asia/Kamchatka"
+  [256]=>
+  string(12) "Asia/Karachi"
+  [257]=>
+  string(12) "Asia/Kashgar"
+  [258]=>
+  string(14) "Asia/Kathmandu"
+  [259]=>
+  string(13) "Asia/Katmandu"
+  [260]=>
+  string(12) "Asia/Kolkata"
+  [261]=>
+  string(16) "Asia/Krasnoyarsk"
+  [262]=>
+  string(17) "Asia/Kuala_Lumpur"
+  [263]=>
+  string(12) "Asia/Kuching"
+  [264]=>
+  string(11) "Asia/Kuwait"
+  [265]=>
+  string(10) "Asia/Macao"
+  [266]=>
+  string(10) "Asia/Macau"
+  [267]=>
+  string(12) "Asia/Magadan"
+  [268]=>
+  string(13) "Asia/Makassar"
+  [269]=>
+  string(11) "Asia/Manila"
+  [270]=>
+  string(11) "Asia/Muscat"
+  [271]=>
+  string(12) "Asia/Nicosia"
+  [272]=>
+  string(16) "Asia/Novosibirsk"
+  [273]=>
+  string(9) "Asia/Omsk"
+  [274]=>
+  string(9) "Asia/Oral"
+  [275]=>
+  string(15) "Asia/Phnom_Penh"
+  [276]=>
+  string(14) "Asia/Pontianak"
+  [277]=>
+  string(14) "Asia/Pyongyang"
+  [278]=>
+  string(10) "Asia/Qatar"
+  [279]=>
+  string(14) "Asia/Qyzylorda"
+  [280]=>
+  string(12) "Asia/Rangoon"
+  [281]=>
+  string(11) "Asia/Riyadh"
+  [282]=>
+  string(11) "Asia/Saigon"
+  [283]=>
+  string(13) "Asia/Sakhalin"
+  [284]=>
+  string(14) "Asia/Samarkand"
+  [285]=>
+  string(10) "Asia/Seoul"
+  [286]=>
+  string(13) "Asia/Shanghai"
+  [287]=>
+  string(14) "Asia/Singapore"
+  [288]=>
+  string(11) "Asia/Taipei"
+  [289]=>
+  string(13) "Asia/Tashkent"
+  [290]=>
+  string(12) "Asia/Tbilisi"
+  [291]=>
+  string(11) "Asia/Tehran"
+  [292]=>
+  string(13) "Asia/Tel_Aviv"
+  [293]=>
+  string(11) "Asia/Thimbu"
+  [294]=>
+  string(12) "Asia/Thimphu"
+  [295]=>
+  string(10) "Asia/Tokyo"
+  [296]=>
+  string(18) "Asia/Ujung_Pandang"
+  [297]=>
+  string(16) "Asia/Ulaanbaatar"
+  [298]=>
+  string(15) "Asia/Ulan_Bator"
+  [299]=>
+  string(11) "Asia/Urumqi"
+  [300]=>
+  string(14) "Asia/Vientiane"
+  [301]=>
+  string(16) "Asia/Vladivostok"
+  [302]=>
+  string(12) "Asia/Yakutsk"
+  [303]=>
+  string(18) "Asia/Yekaterinburg"
+  [304]=>
+  string(12) "Asia/Yerevan"
+  [305]=>
+  string(15) "Atlantic/Azores"
+  [306]=>
+  string(16) "Atlantic/Bermuda"
+  [307]=>
+  string(15) "Atlantic/Canary"
+  [308]=>
+  string(19) "Atlantic/Cape_Verde"
+  [309]=>
+  string(15) "Atlantic/Faeroe"
+  [310]=>
+  string(14) "Atlantic/Faroe"
+  [311]=>
+  string(18) "Atlantic/Jan_Mayen"
+  [312]=>
+  string(16) "Atlantic/Madeira"
+  [313]=>
+  string(18) "Atlantic/Reykjavik"
+  [314]=>
+  string(22) "Atlantic/South_Georgia"
+  [315]=>
+  string(18) "Atlantic/St_Helena"
+  [316]=>
+  string(16) "Atlantic/Stanley"
+  [317]=>
+  string(13) "Australia/ACT"
+  [318]=>
+  string(18) "Australia/Adelaide"
+  [319]=>
+  string(18) "Australia/Brisbane"
+  [320]=>
+  string(21) "Australia/Broken_Hill"
+  [321]=>
+  string(18) "Australia/Canberra"
+  [322]=>
+  string(16) "Australia/Currie"
+  [323]=>
+  string(16) "Australia/Darwin"
+  [324]=>
+  string(15) "Australia/Eucla"
+  [325]=>
+  string(16) "Australia/Hobart"
+  [326]=>
+  string(13) "Australia/LHI"
+  [327]=>
+  string(18) "Australia/Lindeman"
+  [328]=>
+  string(19) "Australia/Lord_Howe"
+  [329]=>
+  string(19) "Australia/Melbourne"
+  [330]=>
+  string(15) "Australia/North"
+  [331]=>
+  string(13) "Australia/NSW"
+  [332]=>
+  string(15) "Australia/Perth"
+  [333]=>
+  string(20) "Australia/Queensland"
+  [334]=>
+  string(15) "Australia/South"
+  [335]=>
+  string(16) "Australia/Sydney"
+  [336]=>
+  string(18) "Australia/Tasmania"
+  [337]=>
+  string(18) "Australia/Victoria"
+  [338]=>
+  string(14) "Australia/West"
+  [339]=>
+  string(20) "Australia/Yancowinna"
+  [340]=>
+  string(11) "Brazil/Acre"
+  [341]=>
+  string(16) "Brazil/DeNoronha"
+  [342]=>
+  string(11) "Brazil/East"
+  [343]=>
+  string(11) "Brazil/West"
+  [344]=>
+  string(15) "Canada/Atlantic"
+  [345]=>
+  string(14) "Canada/Central"
+  [346]=>
+  string(24) "Canada/East-Saskatchewan"
+  [347]=>
+  string(14) "Canada/Eastern"
+  [348]=>
+  string(15) "Canada/Mountain"
+  [349]=>
+  string(19) "Canada/Newfoundland"
+  [350]=>
+  string(14) "Canada/Pacific"
+  [351]=>
+  string(19) "Canada/Saskatchewan"
+  [352]=>
+  string(12) "Canada/Yukon"
+  [353]=>
+  string(3) "CET"
+  [354]=>
+  string(17) "Chile/Continental"
+  [355]=>
+  string(18) "Chile/EasterIsland"
+  [356]=>
+  string(7) "CST6CDT"
+  [357]=>
+  string(4) "Cuba"
+  [358]=>
+  string(3) "EET"
+  [359]=>
+  string(5) "Egypt"
+  [360]=>
+  string(4) "Eire"
+  [361]=>
+  string(3) "EST"
+  [362]=>
+  string(7) "EST5EDT"
+  [363]=>
+  string(7) "Etc/GMT"
+  [364]=>
+  string(9) "Etc/GMT+0"
+  [365]=>
+  string(9) "Etc/GMT+1"
+  [366]=>
+  string(10) "Etc/GMT+10"
+  [367]=>
+  string(10) "Etc/GMT+11"
+  [368]=>
+  string(10) "Etc/GMT+12"
+  [369]=>
+  string(9) "Etc/GMT+2"
+  [370]=>
+  string(9) "Etc/GMT+3"
+  [371]=>
+  string(9) "Etc/GMT+4"
+  [372]=>
+  string(9) "Etc/GMT+5"
+  [373]=>
+  string(9) "Etc/GMT+6"
+  [374]=>
+  string(9) "Etc/GMT+7"
+  [375]=>
+  string(9) "Etc/GMT+8"
+  [376]=>
+  string(9) "Etc/GMT+9"
+  [377]=>
+  string(9) "Etc/GMT-0"
+  [378]=>
+  string(9) "Etc/GMT-1"
+  [379]=>
+  string(10) "Etc/GMT-10"
+  [380]=>
+  string(10) "Etc/GMT-11"
+  [381]=>
+  string(10) "Etc/GMT-12"
+  [382]=>
+  string(10) "Etc/GMT-13"
+  [383]=>
+  string(10) "Etc/GMT-14"
+  [384]=>
+  string(9) "Etc/GMT-2"
+  [385]=>
+  string(9) "Etc/GMT-3"
+  [386]=>
+  string(9) "Etc/GMT-4"
+  [387]=>
+  string(9) "Etc/GMT-5"
+  [388]=>
+  string(9) "Etc/GMT-6"
+  [389]=>
+  string(9) "Etc/GMT-7"
+  [390]=>
+  string(9) "Etc/GMT-8"
+  [391]=>
+  string(9) "Etc/GMT-9"
+  [392]=>
+  string(8) "Etc/GMT0"
+  [393]=>
+  string(13) "Etc/Greenwich"
+  [394]=>
+  string(7) "Etc/UCT"
+  [395]=>
+  string(13) "Etc/Universal"
+  [396]=>
+  string(7) "Etc/UTC"
+  [397]=>
+  string(8) "Etc/Zulu"
+  [398]=>
+  string(16) "Europe/Amsterdam"
+  [399]=>
+  string(14) "Europe/Andorra"
+  [400]=>
+  string(13) "Europe/Athens"
+  [401]=>
+  string(14) "Europe/Belfast"
+  [402]=>
+  string(15) "Europe/Belgrade"
+  [403]=>
+  string(13) "Europe/Berlin"
+  [404]=>
+  string(17) "Europe/Bratislava"
+  [405]=>
+  string(15) "Europe/Brussels"
+  [406]=>
+  string(16) "Europe/Bucharest"
+  [407]=>
+  string(15) "Europe/Budapest"
+  [408]=>
+  string(15) "Europe/Chisinau"
+  [409]=>
+  string(17) "Europe/Copenhagen"
+  [410]=>
+  string(13) "Europe/Dublin"
+  [411]=>
+  string(16) "Europe/Gibraltar"
+  [412]=>
+  string(15) "Europe/Guernsey"
+  [413]=>
+  string(15) "Europe/Helsinki"
+  [414]=>
+  string(18) "Europe/Isle_of_Man"
+  [415]=>
+  string(15) "Europe/Istanbul"
+  [416]=>
+  string(13) "Europe/Jersey"
+  [417]=>
+  string(18) "Europe/Kaliningrad"
+  [418]=>
+  string(11) "Europe/Kiev"
+  [419]=>
+  string(13) "Europe/Lisbon"
+  [420]=>
+  string(16) "Europe/Ljubljana"
+  [421]=>
+  string(13) "Europe/London"
+  [422]=>
+  string(17) "Europe/Luxembourg"
+  [423]=>
+  string(13) "Europe/Madrid"
+  [424]=>
+  string(12) "Europe/Malta"
+  [425]=>
+  string(16) "Europe/Mariehamn"
+  [426]=>
+  string(12) "Europe/Minsk"
+  [427]=>
+  string(13) "Europe/Monaco"
+  [428]=>
+  string(13) "Europe/Moscow"
+  [429]=>
+  string(14) "Europe/Nicosia"
+  [430]=>
+  string(11) "Europe/Oslo"
+  [431]=>
+  string(12) "Europe/Paris"
+  [432]=>
+  string(16) "Europe/Podgorica"
+  [433]=>
+  string(13) "Europe/Prague"
+  [434]=>
+  string(11) "Europe/Riga"
+  [435]=>
+  string(11) "Europe/Rome"
+  [436]=>
+  string(13) "Europe/Samara"
+  [437]=>
+  string(17) "Europe/San_Marino"
+  [438]=>
+  string(15) "Europe/Sarajevo"
+  [439]=>
+  string(17) "Europe/Simferopol"
+  [440]=>
+  string(13) "Europe/Skopje"
+  [441]=>
+  string(12) "Europe/Sofia"
+  [442]=>
+  string(16) "Europe/Stockholm"
+  [443]=>
+  string(14) "Europe/Tallinn"
+  [444]=>
+  string(13) "Europe/Tirane"
+  [445]=>
+  string(15) "Europe/Tiraspol"
+  [446]=>
+  string(15) "Europe/Uzhgorod"
+  [447]=>
+  string(12) "Europe/Vaduz"
+  [448]=>
+  string(14) "Europe/Vatican"
+  [449]=>
+  string(13) "Europe/Vienna"
+  [450]=>
+  string(14) "Europe/Vilnius"
+  [451]=>
+  string(16) "Europe/Volgograd"
+  [452]=>
+  string(13) "Europe/Warsaw"
+  [453]=>
+  string(13) "Europe/Zagreb"
+  [454]=>
+  string(17) "Europe/Zaporozhye"
+  [455]=>
+  string(13) "Europe/Zurich"
+  [456]=>
+  string(7) "Factory"
+  [457]=>
+  string(2) "GB"
+  [458]=>
+  string(7) "GB-Eire"
+  [459]=>
+  string(3) "GMT"
+  [460]=>
+  string(5) "GMT+0"
+  [461]=>
+  string(5) "GMT-0"
+  [462]=>
+  string(4) "GMT0"
+  [463]=>
+  string(9) "Greenwich"
+  [464]=>
+  string(8) "Hongkong"
+  [465]=>
+  string(3) "HST"
+  [466]=>
+  string(7) "Iceland"
+  [467]=>
+  string(19) "Indian/Antananarivo"
+  [468]=>
+  string(13) "Indian/Chagos"
+  [469]=>
+  string(16) "Indian/Christmas"
+  [470]=>
+  string(12) "Indian/Cocos"
+  [471]=>
+  string(13) "Indian/Comoro"
+  [472]=>
+  string(16) "Indian/Kerguelen"
+  [473]=>
+  string(11) "Indian/Mahe"
+  [474]=>
+  string(15) "Indian/Maldives"
+  [475]=>
+  string(16) "Indian/Mauritius"
+  [476]=>
+  string(14) "Indian/Mayotte"
+  [477]=>
+  string(14) "Indian/Reunion"
+  [478]=>
+  string(4) "Iran"
+  [479]=>
+  string(6) "Israel"
+  [480]=>
+  string(7) "Jamaica"
+  [481]=>
+  string(5) "Japan"
+  [482]=>
+  string(9) "Kwajalein"
+  [483]=>
+  string(5) "Libya"
+  [484]=>
+  string(3) "MET"
+  [485]=>
+  string(16) "Mexico/BajaNorte"
+  [486]=>
+  string(14) "Mexico/BajaSur"
+  [487]=>
+  string(14) "Mexico/General"
+  [488]=>
+  string(3) "MST"
+  [489]=>
+  string(7) "MST7MDT"
+  [490]=>
+  string(6) "Navajo"
+  [491]=>
+  string(2) "NZ"
+  [492]=>
+  string(7) "NZ-CHAT"
+  [493]=>
+  string(12) "Pacific/Apia"
+  [494]=>
+  string(16) "Pacific/Auckland"
+  [495]=>
+  string(15) "Pacific/Chatham"
+  [496]=>
+  string(14) "Pacific/Easter"
+  [497]=>
+  string(13) "Pacific/Efate"
+  [498]=>
+  string(17) "Pacific/Enderbury"
+  [499]=>
+  string(15) "Pacific/Fakaofo"
+  [500]=>
+  string(12) "Pacific/Fiji"
+  [501]=>
+  string(16) "Pacific/Funafuti"
+  [502]=>
+  string(17) "Pacific/Galapagos"
+  [503]=>
+  string(15) "Pacific/Gambier"
+  [504]=>
+  string(19) "Pacific/Guadalcanal"
+  [505]=>
+  string(12) "Pacific/Guam"
+  [506]=>
+  string(16) "Pacific/Honolulu"
+  [507]=>
+  string(16) "Pacific/Johnston"
+  [508]=>
+  string(18) "Pacific/Kiritimati"
+  [509]=>
+  string(14) "Pacific/Kosrae"
+  [510]=>
+  string(17) "Pacific/Kwajalein"
+  [511]=>
+  string(14) "Pacific/Majuro"
+  [512]=>
+  string(17) "Pacific/Marquesas"
+  [513]=>
+  string(14) "Pacific/Midway"
+  [514]=>
+  string(13) "Pacific/Nauru"
+  [515]=>
+  string(12) "Pacific/Niue"
+  [516]=>
+  string(15) "Pacific/Norfolk"
+  [517]=>
+  string(14) "Pacific/Noumea"
+  [518]=>
+  string(17) "Pacific/Pago_Pago"
+  [519]=>
+  string(13) "Pacific/Palau"
+  [520]=>
+  string(16) "Pacific/Pitcairn"
+  [521]=>
+  string(14) "Pacific/Ponape"
+  [522]=>
+  string(20) "Pacific/Port_Moresby"
+  [523]=>
+  string(17) "Pacific/Rarotonga"
+  [524]=>
+  string(14) "Pacific/Saipan"
+  [525]=>
+  string(13) "Pacific/Samoa"
+  [526]=>
+  string(14) "Pacific/Tahiti"
+  [527]=>
+  string(14) "Pacific/Tarawa"
+  [528]=>
+  string(17) "Pacific/Tongatapu"
+  [529]=>
+  string(12) "Pacific/Truk"
+  [530]=>
+  string(12) "Pacific/Wake"
+  [531]=>
+  string(14) "Pacific/Wallis"
+  [532]=>
+  string(11) "Pacific/Yap"
+  [533]=>
+  string(6) "Poland"
+  [534]=>
+  string(8) "Portugal"
+  [535]=>
+  string(3) "PRC"
+  [536]=>
+  string(7) "PST8PDT"
+  [537]=>
+  string(3) "ROC"
+  [538]=>
+  string(3) "ROK"
+  [539]=>
+  string(9) "Singapore"
+  [540]=>
+  string(6) "Turkey"
+  [541]=>
+  string(3) "UCT"
+  [542]=>
+  string(9) "Universal"
+  [543]=>
+  string(9) "US/Alaska"
+  [544]=>
+  string(11) "US/Aleutian"
+  [545]=>
+  string(10) "US/Arizona"
+  [546]=>
+  string(10) "US/Central"
+  [547]=>
+  string(15) "US/East-Indiana"
+  [548]=>
+  string(10) "US/Eastern"
+  [549]=>
+  string(9) "US/Hawaii"
+  [550]=>
+  string(17) "US/Indiana-Starke"
+  [551]=>
+  string(11) "US/Michigan"
+  [552]=>
+  string(11) "US/Mountain"
+  [553]=>
+  string(10) "US/Pacific"
+  [554]=>
+  string(14) "US/Pacific-New"
+  [555]=>
+  string(8) "US/Samoa"
+  [556]=>
+  string(3) "UTC"
+  [557]=>
+  string(4) "W-SU"
+  [558]=>
+  string(3) "WET"
+  [559]=>
+  string(4) "Zulu"
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_name_from_abbr_basic1.phpt b/ext/date/tests/timezone_name_from_abbr_basic1.phpt
new file mode 100644
index 0000000..b591fe2
--- /dev/null
+++ b/ext/date/tests/timezone_name_from_abbr_basic1.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test timezone_name_from_abbr() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : string timezone_name_from_abbr  ( string $abbr  [, int $gmtOffset= -1  [, int $isdst= -1  ]] )
+ * Description: Returns the timezone name from abbrevation
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing timezone_name_from_abbr() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "-- Tests with special cases first - no lookup needed --\n"; 
+var_dump( timezone_name_from_abbr("GMT") );
+var_dump( timezone_name_from_abbr("UTC") );
+
+echo "-- Lookup with just name --\n";
+var_dump( timezone_name_from_abbr("CET") );
+var_dump( timezone_name_from_abbr("EDT") );
+
+echo "-- Lookup with name and offset--\n"; 
+var_dump( timezone_name_from_abbr("ADT", -10800) );
+var_dump( timezone_name_from_abbr("ADT", 14400) );
+var_dump( timezone_name_from_abbr("AKTT", 14400) );
+var_dump( timezone_name_from_abbr("aktt", 18000) );
+var_dump( timezone_name_from_abbr("Aktt", 21600) );
+var_dump( timezone_name_from_abbr("AMST", -10800) );
+var_dump( timezone_name_from_abbr("amst", 180000) );
+
+echo "-- Tests without valid name - uses gmtOffset and isdst to find match --\n"; 
+var_dump( timezone_name_from_abbr("", 3600, 1) );
+var_dump( timezone_name_from_abbr("FOO", -7200, 1) );
+var_dump( timezone_name_from_abbr("", -14400, 1) );
+var_dump( timezone_name_from_abbr("", -14400, 0) );
+
+echo "-- Tests with invalid offsets --\n"; 
+var_dump( timezone_name_from_abbr("", 5400) ); // offset = 1.5 hrs
+var_dump( timezone_name_from_abbr("", 62400) ); // offset = 24 hrs
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_name_from_abbr() : basic functionality ***
+-- Tests with special cases first - no lookup needed --
+string(3) "UTC"
+string(3) "UTC"
+-- Lookup with just name --
+string(13) "Europe/Berlin"
+string(16) "America/New_York"
+-- Lookup with name and offset--
+string(15) "America/Halifax"
+string(12) "Asia/Baghdad"
+string(11) "Asia/Aqtobe"
+string(11) "Asia/Aqtobe"
+string(11) "Asia/Aqtobe"
+string(17) "America/Boa_Vista"
+string(12) "Asia/Yerevan"
+-- Tests without valid name - uses gmtOffset and isdst to find match --
+string(13) "Europe/London"
+string(17) "America/Sao_Paulo"
+string(16) "America/New_York"
+string(15) "America/Halifax"
+-- Tests with invalid offsets --
+bool(false)
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_name_from_abbr_error.phpt b/ext/date/tests/timezone_name_from_abbr_error.phpt
new file mode 100644
index 0000000..640caae
--- /dev/null
+++ b/ext/date/tests/timezone_name_from_abbr_error.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test timezone_name_from_abbr() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : string timezone_name_from_abbr  ( string $abbr  [, int $gmtOffset= -1  [, int $isdst= -1  ]] )
+ * Description: Returns the timezone name from abbrevation
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+error_reporting(E_ALL | E_STRICT);
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing timezone_name_from_abbr() : error conditions ***\n";
+
+echo "\n-- Testing timezone_name_from_abbr() function with Zero arguments --\n";
+var_dump( timezone_name_from_abbr() );
+
+echo "\n-- Testing timezone_name_from_abbr() function with more than expected no. of arguments --\n";
+$abbr = 10;
+$gmtOffset = 30;
+$isdst = 45;
+$extra_arg = 10;
+var_dump( timezone_name_from_abbr($abbr, $gmtOffset, $isdst, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_name_from_abbr() : error conditions ***
+
+-- Testing timezone_name_from_abbr() function with Zero arguments --
+
+Warning: timezone_name_from_abbr() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing timezone_name_from_abbr() function with more than expected no. of arguments --
+
+Warning: timezone_name_from_abbr() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_name_from_abbr_variation1.phpt b/ext/date/tests/timezone_name_from_abbr_variation1.phpt
new file mode 100644
index 0000000..4825d09
--- /dev/null
+++ b/ext/date/tests/timezone_name_from_abbr_variation1.phpt
@@ -0,0 +1,205 @@
+--TEST--
+Test timezone_name_from_abbr() function : usage variation - Passing unexpected values to first argument $abbr.
+--FILE--
+<?php
+/* Prototype  : string timezone_name_from_abbr  ( string $abbr  [, int $gmtOffset= -1  [, int $isdst= -1  ]] )
+ * Description: Returns the timezone name from abbrevation
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing timezone_name_from_abbr() : usage variation -  unexpected values to first argument \$abbr***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$gmtOffset= 3600;
+$isdst = 1;
+
+foreach($inputs as $variation =>$abbr) {
+      echo "\n-- $variation --\n";
+      var_dump( timezone_name_from_abbr($abbr, $gmtOffset, $isdst) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_name_from_abbr() : usage variation -  unexpected values to first argument $abbr***
+
+-- int 0 --
+string(13) "Europe/London"
+
+-- int 12345 --
+string(13) "Europe/London"
+
+-- int -12345 --
+string(13) "Europe/London"
+
+-- float 10.5 --
+string(13) "Europe/London"
+
+-- float -10.5 --
+string(13) "Europe/London"
+
+-- float .5 --
+string(13) "Europe/London"
+
+-- empty array --
+
+Warning: timezone_name_from_abbr() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_name_from_abbr() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_name_from_abbr() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_name_from_abbr() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(13) "Europe/London"
+
+-- lowercase null --
+string(13) "Europe/London"
+
+-- lowercase true --
+string(13) "Europe/London"
+
+-- lowercase false --
+string(13) "Europe/London"
+
+-- uppercase TRUE --
+string(13) "Europe/London"
+
+-- uppercase FALSE --
+string(13) "Europe/London"
+
+-- empty string DQ --
+string(13) "Europe/London"
+
+-- empty string SQ --
+string(13) "Europe/London"
+
+-- string DQ --
+string(13) "Europe/London"
+
+-- string SQ --
+string(13) "Europe/London"
+
+-- mixed case string --
+string(13) "Europe/London"
+
+-- heredoc --
+string(13) "Europe/London"
+
+-- instance of classWithToString --
+string(13) "Europe/London"
+
+-- instance of classWithoutToString --
+
+Warning: timezone_name_from_abbr() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(13) "Europe/London"
+
+-- unset var --
+string(13) "Europe/London"
+
+-- resource --
+
+Warning: timezone_name_from_abbr() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_name_from_abbr_variation2.phpt b/ext/date/tests/timezone_name_from_abbr_variation2.phpt
new file mode 100644
index 0000000..0a587a3
--- /dev/null
+++ b/ext/date/tests/timezone_name_from_abbr_variation2.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test timezone_name_from_abbr() function : usage variation - Passing unexpected values to second argument $gmtOffset.
+--FILE--
+<?php
+/* Prototype  : string timezone_name_from_abbr  ( string $abbr  [, int $gmtOffset= -1  [, int $isdst= -1  ]] )
+ * Description: Returns the timezone name from abbrevation
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing timezone_name_from_abbr() : usage variation -  unexpected values to second argument \$gmtOffset***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$abbr= "GMT";
+$isdst = 1;
+
+foreach($inputs as $variation =>$gmtOffset) {
+      echo "\n-- $variation --\n";
+      var_dump( timezone_name_from_abbr($abbr, $gmtOffset, $isdst) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_name_from_abbr() : usage variation -  unexpected values to second argument $gmtOffset***
+
+-- int 0 --
+string(3) "UTC"
+
+-- int 12345 --
+string(3) "UTC"
+
+-- int -12345 --
+string(3) "UTC"
+
+-- float 10.5 --
+string(3) "UTC"
+
+-- float -10.5 --
+string(3) "UTC"
+
+-- float .5 --
+string(3) "UTC"
+
+-- empty array --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(3) "UTC"
+
+-- lowercase null --
+string(3) "UTC"
+
+-- lowercase true --
+string(3) "UTC"
+
+-- lowercase false --
+string(3) "UTC"
+
+-- uppercase TRUE --
+string(3) "UTC"
+
+-- uppercase FALSE --
+string(3) "UTC"
+
+-- empty string DQ --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(3) "UTC"
+
+-- unset var --
+string(3) "UTC"
+
+-- resource --
+
+Warning: timezone_name_from_abbr() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_name_from_abbr_variation3.phpt b/ext/date/tests/timezone_name_from_abbr_variation3.phpt
new file mode 100644
index 0000000..66cb210
--- /dev/null
+++ b/ext/date/tests/timezone_name_from_abbr_variation3.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test timezone_name_from_abbr() function : usage variation - Passing unexpected values to third argument $isdst.
+--FILE--
+<?php
+/* Prototype  : string timezone_name_from_abbr  ( string $abbr  [, int $gmtOffset= -1  [, int $isdst= -1  ]] )
+ * Description: Returns the timezone name from abbrevation
+ * Source code: ext/date/php_date.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing timezone_name_from_abbr() : usage variation -  unexpected values to third argument \$isdst***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$abbr= "GMT";
+$gmtOffset = 3600;
+
+foreach($inputs as $variation =>$isdst) {
+      echo "\n-- $variation --\n";
+      var_dump( timezone_name_from_abbr($abbr, $gmtOffset, $isdst) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_name_from_abbr() : usage variation -  unexpected values to third argument $isdst***
+
+-- int 0 --
+string(3) "UTC"
+
+-- int 12345 --
+string(3) "UTC"
+
+-- int -12345 --
+string(3) "UTC"
+
+-- float 10.5 --
+string(3) "UTC"
+
+-- float -10.5 --
+string(3) "UTC"
+
+-- float .5 --
+string(3) "UTC"
+
+-- empty array --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+string(3) "UTC"
+
+-- lowercase null --
+string(3) "UTC"
+
+-- lowercase true --
+string(3) "UTC"
+
+-- lowercase false --
+string(3) "UTC"
+
+-- uppercase TRUE --
+string(3) "UTC"
+
+-- uppercase FALSE --
+string(3) "UTC"
+
+-- empty string DQ --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+string(3) "UTC"
+
+-- unset var --
+string(3) "UTC"
+
+-- resource --
+
+Warning: timezone_name_from_abbr() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_name_get_error.phpt b/ext/date/tests/timezone_name_get_error.phpt
new file mode 100644
index 0000000..3c33e33
--- /dev/null
+++ b/ext/date/tests/timezone_name_get_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test timezone_name_get() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : string timezone_name_get ( DateTime $object  )
+ * Description: Returns the name of the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getName() 
+ */
+ 
+// Set timezone 
+date_default_timezone_set("Europe/London");
+
+echo "*** Testing timezone_name_get() : error conditions ***\n";
+
+echo "\n-- Testing timezone_name_get() function with zero arguments --\n";
+var_dump( timezone_name_get() ); 
+
+echo "\n-- Testing date_timezone_set() function with more than expected no. of arguments --\n";
+$datetime = date_create("2009-01-30 17:57:32");
+$extra_arg = 99;
+var_dump( timezone_name_get($datetime,  $extra_arg) );
+
+echo "\n-- Testing timezone_name_get() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( timezone_name_get($invalid_obj) );  
+$invalid_obj = 10;
+var_dump( timezone_name_get($invalid_obj) );
+$invalid_obj = null;
+var_dump( timezone_name_get($invalid_obj) ); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_name_get() : error conditions ***
+
+-- Testing timezone_name_get() function with zero arguments --
+
+Warning: timezone_name_get() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_timezone_set() function with more than expected no. of arguments --
+
+Warning: timezone_name_get() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing timezone_name_get() function with an invalid values for $object argument --
+
+Warning: timezone_name_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+Warning: timezone_name_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+Warning: timezone_name_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_offset_get_basic1.phpt b/ext/date/tests/timezone_offset_get_basic1.phpt
new file mode 100644
index 0000000..aa658e9
--- /dev/null
+++ b/ext/date/tests/timezone_offset_get_basic1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test timezone_offset_get() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : int timezone_offset_get  ( DateTimeZone $object  , DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getOffset
+ */
+
+echo "*** Testing timezone_offset_get() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("GMT");
+
+$tz = timezone_open("Europe/London");
+$date = date_create("GMT");
+
+var_dump(timezone_offset_get($tz, $date));
+
+$tz = timezone_open("America/New_York");
+var_dump(timezone_offset_get($tz, $date));
+
+$tz = timezone_open("America/Los_Angeles");
+var_dump(timezone_offset_get($tz, $date));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_offset_get() : basic functionality ***
+%rint\(0\)|int\(3600\)%r
+%rint\(-18000\)|int\(-14400\)%r
+%rint\(-28800\)|int\(-25200\)%r
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_offset_get_error.phpt b/ext/date/tests/timezone_offset_get_error.phpt
new file mode 100644
index 0000000..b8ca2c1
--- /dev/null
+++ b/ext/date/tests/timezone_offset_get_error.phpt
@@ -0,0 +1,84 @@
+--TEST--
+Test timezone_offset_get() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : int timezone_offset_get  ( DateTimeZone $object  , DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getOffset
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("GMT");
+$tz = timezone_open("Europe/London");
+$date = date_create("GMT");
+ 
+echo "*** Testing timezone_offset_get() : error conditions ***\n";
+
+echo "\n-- Testing timezone_offset_get() function with zero arguments --\n";
+var_dump( timezone_offset_get() );
+
+echo "\n-- Testing timezone_offset_get() function with less than expected no. of arguments --\n";
+var_dump( timezone_offset_get($tz) );
+
+echo "\n-- Testing timezone_offset_get() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( timezone_offset_get($tz, $date, $extra_arg) );
+
+echo "\n-- Testing timezone_offset_get() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( timezone_offset_get($invalid_obj, $date) );  
+$invalid_obj = 10;
+var_dump( timezone_offset_get($invalid_obj, $date) );
+$invalid_obj = null;
+var_dump( timezone_offset_get($invalid_obj, $date) );
+
+echo "\n-- Testing timezone_offset_get() function with an invalid values for \$datetime argument --\n";
+$invalid_obj = new stdClass();
+var_dump( timezone_offset_get($tz, $invalid_obj) );  
+$invalid_obj = 10;
+var_dump( timezone_offset_get($tz, $invalid_obj) );
+$invalid_obj = null;
+var_dump( timezone_offset_get($tz, $invalid_obj) );  
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_offset_get() : error conditions ***
+
+-- Testing timezone_offset_get() function with zero arguments --
+
+Warning: timezone_offset_get() expects exactly 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- Testing timezone_offset_get() function with less than expected no. of arguments --
+
+Warning: timezone_offset_get() expects exactly 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing timezone_offset_get() function with more than expected no. of arguments --
+
+Warning: timezone_offset_get() expects exactly 2 parameters, 3 given in %s on line %d
+bool(false)
+
+-- Testing timezone_offset_get() function with an invalid values for $object argument --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- Testing timezone_offset_get() function with an invalid values for $datetime argument --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, object given in %s on line %d
+bool(false)
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+bool(false)
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_offset_get_variation1.phpt b/ext/date/tests/timezone_offset_get_variation1.phpt
new file mode 100644
index 0000000..5fd5e8b
--- /dev/null
+++ b/ext/date/tests/timezone_offset_get_variation1.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test timezone_offset_get() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : int timezone_offset_get  ( DateTimeZone $object  , DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getOffset()
+ */
+ 
+echo "*** Testing timezone_offset_get() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$datetime = new DateTime("2009-01-31 15:14:10");
+
+foreach($inputs as $variation =>$object) {
+    echo "\n-- $variation --\n";
+   	var_dump( timezone_offset_get($object, $datetime) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_offset_get() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_offset_get_variation2.phpt b/ext/date/tests/timezone_offset_get_variation2.phpt
new file mode 100644
index 0000000..93311f3
--- /dev/null
+++ b/ext/date/tests/timezone_offset_get_variation2.phpt
@@ -0,0 +1,252 @@
+--TEST--
+Test timezone_offset_get() function : usage variation - Passing unexpected values to second argument $datetime.
+--FILE--
+<?php
+/* Prototype  : int timezone_offset_get  ( DateTimeZone $object  , DateTime $datetime  )
+ * Description: Returns the timezone offset from GMT
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getOffset()
+ */
+ 
+echo "*** Testing timezone_offset_get() : usage variation -  unexpected values to second argument \$datetime***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+$object = new DateTimezone("Europe/London");
+
+foreach($inputs as $variation =>$datetime) {
+    echo "\n-- $variation --\n";
+   	var_dump( timezone_offset_get($object, $datetime) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_offset_get() : usage variation -  unexpected values to second argument $datetime***
+
+-- int 0 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: timezone_offset_get() expects parameter 2 to be DateTime, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_open_basic1.phpt b/ext/date/tests/timezone_open_basic1.phpt
new file mode 100644
index 0000000..7a98936
--- /dev/null
+++ b/ext/date/tests/timezone_open_basic1.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test timezone_open() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : DateTimeZone timezone_open  ( string $timezone  )
+ * Description: Returns new DateTimeZone object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct()
+ */
+
+echo "*** Testing timezone_open() : basic functionality ***\n";
+
+var_dump( timezone_open("GMT") );
+var_dump( timezone_open("Europe/London") );
+var_dump( timezone_open("America/Los_Angeles") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_open() : basic functionality ***
+object(DateTimeZone)#%d (0) {
+}
+object(DateTimeZone)#%d (0) {
+}
+object(DateTimeZone)#%d (0) {
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_open_error.phpt b/ext/date/tests/timezone_open_error.phpt
new file mode 100644
index 0000000..16c5f0b
--- /dev/null
+++ b/ext/date/tests/timezone_open_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test timezone_open() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : DateTimeZone timezone_open  ( string $timezone  )
+ * Description: Returns new DateTimeZone object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct()
+ */
+ 
+echo "*** Testing timezone_open() : error conditions ***\n";
+
+echo "\n-- Testing timezone_open() function with zero arguments --\n";
+var_dump( timezone_open() );
+
+echo "\n-- Testing timezone_open() function with more than expected no. of arguments --\n";
+$time = "GMT";
+$extra_arg = 99;
+var_dump( timezone_open($time, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_open() : error conditions ***
+
+-- Testing timezone_open() function with zero arguments --
+
+Warning: timezone_open() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing timezone_open() function with more than expected no. of arguments --
+
+Warning: timezone_open() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_open_variation1.phpt b/ext/date/tests/timezone_open_variation1.phpt
new file mode 100644
index 0000000..9a069f6
--- /dev/null
+++ b/ext/date/tests/timezone_open_variation1.phpt
@@ -0,0 +1,251 @@
+--TEST--
+Test timezone_open function : usage variation - Passing unexpected values to first argument $timezone.
+--FILE--
+<?php
+/* Prototype  : DateTimeZone timezone_open  ( string $timezone  )
+ * Description: Returns new DateTimeZone object
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTime::__construct()
+ */
+
+echo "*** Testing timezone_open() : usage variation -  unexpected values to first argument \$timezone***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+foreach($inputs as $variation =>$timezone) {
+    echo "\n-- $variation --\n";
+	var_dump( timezone_open($timezone) );
+      
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_open() : usage variation -  unexpected values to first argument $timezone***
+
+-- int 0 --
+
+Warning: timezone_open(): Unknown or bad timezone (0) in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: timezone_open(): Unknown or bad timezone (1) in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: timezone_open(): Unknown or bad timezone (12345) in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: timezone_open(): Unknown or bad timezone (-12345) in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: timezone_open(): Unknown or bad timezone (10.5) in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: timezone_open(): Unknown or bad timezone (-10.5) in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: timezone_open(): Unknown or bad timezone (0.5) in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: timezone_open() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_open() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_open() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_open() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: timezone_open(): Unknown or bad timezone (1) in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: timezone_open(): Unknown or bad timezone (1) in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: timezone_open(): Unknown or bad timezone (string) in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: timezone_open(): Unknown or bad timezone (string) in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: timezone_open(): Unknown or bad timezone (sTrInG) in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: timezone_open(): Unknown or bad timezone (hello world) in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: timezone_open(): Unknown or bad timezone (Class A object) in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: timezone_open() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: timezone_open(): Unknown or bad timezone () in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: timezone_open() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_transitions_get_basic1.phpt b/ext/date/tests/timezone_transitions_get_basic1.phpt
new file mode 100644
index 0000000..304a177
--- /dev/null
+++ b/ext/date/tests/timezone_transitions_get_basic1.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test timezone_transitions_get() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : array timezone_transitions_get  ( DateTimeZone $object, [ int $timestamp_begin  [, int $timestamp_end  ]]  )
+ * Description: Returns all transitions for the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getTransitions()
+ */
+
+echo "*** Testing timezone_transitions_get() : basic functionality ***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+// Create a DateTimeZone object
+$tz = timezone_open("Europe/London");
+
+$tran = timezone_transitions_get($tz);
+
+echo "\n-- Get all transitions --\n"; 
+$tran = timezone_transitions_get($tz);
+var_dump( gettype($tran) );
+
+echo "\n-- Total number of transitions: " . count($tran). " --\n"; 
+
+echo "\n-- Format a sample entry pfor Spring 1963 --\n";
+var_dump( $tran[96] );	
+
+?>
+===DONE===
+--EXPECT--
+*** Testing timezone_transitions_get() : basic functionality ***
+
+-- Get all transitions --
+string(5) "array"
+
+-- Total number of transitions: 242 --
+
+-- Format a sample entry pfor Spring 1963 --
+array(5) {
+  ["ts"]=>
+  int(-213228000)
+  ["time"]=>
+  string(24) "1963-03-31T02:00:00+0000"
+  ["offset"]=>
+  int(3600)
+  ["isdst"]=>
+  bool(true)
+  ["abbr"]=>
+  string(3) "BST"
+}
+===DONE===
\ No newline at end of file
diff --git a/ext/date/tests/timezone_transitions_get_error.phpt b/ext/date/tests/timezone_transitions_get_error.phpt
new file mode 100644
index 0000000..a8d9dbb
--- /dev/null
+++ b/ext/date/tests/timezone_transitions_get_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test timezone_transitions_get() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : array timezone_transitions_get  ( DateTimeZone $object )
+ * Description: Returns all transitions for the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getTransitions()
+ */
+ 
+//Set the default time zone 
+date_default_timezone_set("GMT");
+$tz = timezone_open("Europe/London");
+ 
+echo "*** Testing timezone_transitions_get() : error conditions ***\n";
+
+echo "\n-- Testing timezone_transitions_get() function with zero arguments --\n";
+var_dump( timezone_transitions_get() );
+
+echo "\n-- Testing timezone_transitions_get() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( timezone_transitions_get($tz, $extra_arg) );
+
+echo "\n-- Testing timezone_transitions_get() function with an invalid values for \$object argument --\n";
+$invalid_obj = new stdClass();
+var_dump( timezone_transitions_get($invalid_obj) );  
+$invalid_obj = 10;
+var_dump( timezone_transitions_get($invalid_obj) );
+$invalid_obj = null;
+var_dump( timezone_transitions_get($invalid_obj) ); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_transitions_get() : error conditions ***
+
+-- Testing timezone_transitions_get() function with zero arguments --
+
+Warning: timezone_transitions_get() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing timezone_transitions_get() function with more than expected no. of arguments --
+
+Warning: timezone_transitions_get() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing timezone_transitions_get() function with an invalid values for $object argument --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/timezone_transitions_get_variation1.phpt b/ext/date/tests/timezone_transitions_get_variation1.phpt
new file mode 100644
index 0000000..a8570ad
--- /dev/null
+++ b/ext/date/tests/timezone_transitions_get_variation1.phpt
@@ -0,0 +1,250 @@
+--TEST--
+Test timezone_transitions_get() function : usage variation - Passing unexpected values to first argument $object.
+--FILE--
+<?php
+/* Prototype  : array timezone_transitions_get  ( DateTimeZone $object )
+ * Description: Returns all transitions for the timezone
+ * Source code: ext/date/php_date.c
+ * Alias to functions: DateTimeZone::getTransitions()
+ */
+ 
+echo "*** Testing timezone_transitions_get() : usage variation -  unexpected values to first argument \$object***\n";
+
+//Set the default time zone 
+date_default_timezone_set("Europe/London");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -12345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+      
+      // resource 
+      'resource' => $file_handle
+);
+
+foreach($inputs as $variation =>$object) {
+    echo "\n-- $variation --\n";
+   	var_dump( timezone_transitions_get($object) );
+};
+
+// closing the resource
+fclose( $file_handle );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing timezone_transitions_get() : usage variation -  unexpected values to first argument $object***
+
+-- int 0 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, integer given in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, double given in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, array given in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, boolean given in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, string given in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, null given in %s on line %d
+bool(false)
+
+-- resource --
+
+Warning: timezone_transitions_get() expects parameter 1 to be DateTimeZone, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c
index 9bb3e97..9a95aa2 100644
--- a/ext/dba/dba_db4.c
+++ b/ext/dba/dba_db4.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_db4.c,v 1.15.2.3.2.4 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: dba_db4.c,v 1.15.2.3.2.5 2009/05/13 02:16:36 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -219,7 +219,7 @@ DBA_NEXTKEY_FUNC(db4)
 		gkey.flags |= DB_DBT_MALLOC;
 		gval.flags |= DB_DBT_MALLOC;
 	}
-	if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) {
+	if (dba->cursor && dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) {
 		if (gkey.data) {
 			nkey = estrndup(gkey.data, gkey.size);
 			if (newlen) *newlen = gkey.size;
diff --git a/ext/dba/tests/bug48240.phpt b/ext/dba/tests/bug48240.phpt
new file mode 100644
index 0000000..72dc439
--- /dev/null
+++ b/ext/dba/tests/bug48240.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #48240 (DBA Segmentation fault dba_nextkey)
+--SKIPIF--
+<?php 
+	$handler = 'db4';
+	require_once('skipif.inc');
+?>
+--FILE--
+<?php
+
+$handler = 'db4';
+require_once('test.inc');
+
+$db = dba_open($db_filename, 'c', 'db4');
+
+var_dump(dba_nextkey($db));
+
+dba_close($db);
+unlink($db_filename);
+
+?>
+===DONE===
+--EXPECT--
+bool(false)
+===DONE===
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
index ea45383..cac7d94 100644
--- a/ext/dom/attr.c
+++ b/ext/dom/attr.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: attr.c,v 1.18.2.2.2.5 2008/12/31 11:17:37 sebastian Exp $ */
+/* $Id: attr.c,v 1.18.2.2.2.6 2009/03/13 13:41:42 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -29,7 +29,6 @@
 
 #include "php_dom.h"
 
-
 /* {{{ arginfo */
 static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_attr_is_id, 0, 0, 0)
@@ -99,7 +98,6 @@ PHP_METHOD(domattr, __construct)
 
 /* }}} end DOMAttr::__construct */
 
-
 /* {{{ name	string	
 readonly=yes 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1112119403
@@ -124,8 +122,6 @@ int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ specified	boolean	
 readonly=yes 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-862529273
@@ -141,8 +137,6 @@ int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ value	string	
 readonly=no 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-221662474
@@ -210,8 +204,6 @@ int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ ownerElement	DOMElement	
 readonly=yes 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-ownerElement
@@ -229,13 +221,14 @@ int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC)
 		return FAILURE;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	nodeparent = nodep->parent;
 	if (!nodeparent) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
-
 	if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING,  "Cannot create required DOM object");
 		return FAILURE;
@@ -246,8 +239,6 @@ int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ schemaTypeInfo	DOMTypeInfo	
 readonly=yes 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-schemaTypeInfo
@@ -263,8 +254,6 @@ int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ proto boolean dom_attr_is_id();
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId
 Since: DOM Level 3
diff --git a/ext/dom/document.c b/ext/dom/document.c
index f699ac7..73ebcef 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: document.c,v 1.68.2.3.2.11 2009/01/26 19:11:19 rrichards Exp $ */
+/* $Id: document.c,v 1.68.2.3.2.13 2009/04/07 15:33:20 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -283,12 +283,14 @@ int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC)
 		return FAILURE;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	dtdptr = xmlGetIntSubset(docp);
 	if (!dtdptr) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
 	if (NULL == (*retval = php_dom_create_object((xmlNodePtr) dtdptr, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
 		return FAILURE;
@@ -299,8 +301,6 @@ int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ implementation	DOMImplementation	
 readonly=yes 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1B793EBA
@@ -315,8 +315,6 @@ int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ documentElement	DOMElement	
 readonly=yes 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-87CD092
@@ -335,12 +333,14 @@ int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC)
 		return FAILURE;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	root = xmlDocGetRootElement(docp);
 	if (!root) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
 	if (NULL == (*retval = php_dom_create_object(root, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
 		return FAILURE;
@@ -421,8 +421,6 @@ int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ standalone	boolean	
 readonly=no 
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-standalone
@@ -487,8 +485,6 @@ int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC)
 
 /* }}} */
 
-
-
 /* {{{ version	string	
 readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-version
@@ -1249,6 +1245,9 @@ PHP_FUNCTION(dom_document_import_node)
 	if (nodep->doc == docp) {
 		retnodep = nodep;
 	} else {
+		if ((recursive == 0) && (nodep->type == XML_ELEMENT_NODE)) {
+			recursive = 2;
+		}
 		retnodep = xmlDocCopyNode(nodep, docp, recursive);
 		if (!retnodep) {
 			RETURN_FALSE;
diff --git a/ext/dom/node.c b/ext/dom/node.c
index 138c59d..24e05e5 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: node.c,v 1.37.2.3.2.13 2008/12/31 11:17:37 sebastian Exp $ */
+/* $Id: node.c,v 1.37.2.3.2.14 2009/03/13 13:41:42 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -260,7 +260,6 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
 			break;
 		default:
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node Type");
-			return FAILURE;
 	}
 
 	ALLOC_ZVAL(*retval);
@@ -428,13 +427,14 @@ int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
 		return FAILURE;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	nodeparent = nodep->parent;
 	if (!nodeparent) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
-
 	if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
 		return FAILURE;
@@ -501,12 +501,13 @@ int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
 		first = nodep->children;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	if (!first) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
-
 	if (NULL == (*retval = php_dom_create_object(first, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
 		return FAILURE;
@@ -539,12 +540,13 @@ int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
 		last = nodep->last;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	if (!last) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
-
 	if (NULL == (*retval = php_dom_create_object(last, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
 		return FAILURE;
@@ -573,13 +575,14 @@ int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
 		return FAILURE;
 	}
 
+	ALLOC_ZVAL(*retval);
+
 	prevsib = nodep->prev;
 	if (!prevsib) {
-		return FAILURE;
+		ZVAL_NULL(*retval);
+		return SUCCESS;
 	}
 
-	ALLOC_ZVAL(*retval);
-
 	if (NULL == (*retval = php_dom_create_object(prevsib, &ret, NULL, *retval, obj TSRMLS_CC))) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
 		return FAILURE;
diff --git a/ext/dom/tests/DOMAttr_construct_error_001.phpt b/ext/dom/tests/DOMAttr_construct_error_001.phpt
new file mode 100644
index 0000000..08734ca
--- /dev/null
+++ b/ext/dom/tests/DOMAttr_construct_error_001.phpt
@@ -0,0 +1,17 @@
+--TEST--
+DOMAttr __construct() with no arguments.
+--CREDITS--
+Josh Sweeney <jsweeney at alt-invest.net>
+# TestFest Atlanta 2009-05-14
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$attr = new DOMAttr();
+?>
+--EXPECTF--
+Fatal error: Uncaught exception 'DOMException' with message 'DOMAttr::__construct() expects at least 1 parameter, 0 given' in %s:%d
+Stack trace:
+#0 %s(%d): DOMAttr->__construct()
+#1 {main}
+  thrown in %s on line %d
diff --git a/ext/dom/tests/DOMAttr_name_basic_001.phpt b/ext/dom/tests/DOMAttr_name_basic_001.phpt
new file mode 100644
index 0000000..29ca8c5
--- /dev/null
+++ b/ext/dom/tests/DOMAttr_name_basic_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMAttr read $name property.
+--CREDITS--
+Nic Rosental <nicrosental at gmail.com>
+# TestFest Atlanta 2009-05-14
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$attr = new DOMAttr('category', 'books');
+print $attr->name;
+?>
+--EXPECT--
+category
\ No newline at end of file
diff --git a/ext/dom/tests/DOMAttr_ownerElement_error_001.phpt b/ext/dom/tests/DOMAttr_ownerElement_error_001.phpt
new file mode 100755
index 0000000..a776654
--- /dev/null
+++ b/ext/dom/tests/DOMAttr_ownerElement_error_001.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Read $ownerElement with null parent.
+--CREDITS--
+Travis Pew
+# TestFest Atlanta 2009-05-14
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+$attr = $root->setAttribute('category', 'books');
+$document->removeChild($root);
+$root = null;
+var_dump($attr->ownerElement);
+?>
+--EXPECTF--
+Warning: Couldn't fetch DOMAttr. Node no longer exists in %s on line %d
+
+Notice: Undefined property: DOMAttr::$ownerElement in %s on line %d
+NULL
diff --git a/ext/dom/tests/DOMAttr_value_basic_002.phpt b/ext/dom/tests/DOMAttr_value_basic_002.phpt
new file mode 100644
index 0000000..cf71eeb
--- /dev/null
+++ b/ext/dom/tests/DOMAttr_value_basic_002.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Write non-string $value property
+--CREDIT--
+Eric Berg <ehberg at gmail.com>
+# TestFest Atlanta 2009-05-14
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$attr = new DOMAttr('category');
+$attr->value = 1;
+print $attr->value;
+?>
+--EXPECTF--
+1
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCDATASection_construct_error_001.phpt b/ext/dom/tests/DOMCDATASection_construct_error_001.phpt
new file mode 100644
index 0000000..4db2130
--- /dev/null
+++ b/ext/dom/tests/DOMCDATASection_construct_error_001.phpt
@@ -0,0 +1,21 @@
+--TEST--
+__construct() with no arguments.
+--CREDITS--
+Nic Rosental nicrosental at gmail.com
+# TestFest Atlanta 2009-5-14 
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+	try 
+	{
+	    $section = new DOMCDataSection();
+		
+	} 
+	catch (Exception $e) 
+	{
+	    echo $e->getMessage();
+	}
+?>
+--EXPECT--
+DOMCdataSection::__construct() expects exactly 1 parameter, 0 given
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_appendData_error_001.phpt b/ext/dom/tests/DOMCharacterData_appendData_error_001.phpt
new file mode 100644
index 0000000..4126f99
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_appendData_error_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMCharacterData::appendData() with no arguments.
+--CREDITS--
+Eric Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createCDATASection('test');
+$root->appendChild($cdata);
+$cdata->appendData();
+?>
+--EXPECTF--
+Warning: DOMCharacterData::appendData() expects exactly 1 parameter, 0 given in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_data_error_002.phpt b/ext/dom/tests/DOMCharacterData_data_error_002.phpt
new file mode 100755
index 0000000..9dae096
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_data_error_002.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Invalid State Error when getting data on DOMCharacterData out of content.
+--CREDIT--
+Eric Berg <ehberg at gmail.com>
+# TestFest Atlanta 2009-05-14
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$character_data = new DOMCharacterData();
+print $character_data->data;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_deleteData_basic_001.phpt b/ext/dom/tests/DOMCharacterData_deleteData_basic_001.phpt
new file mode 100644
index 0000000..ad104f1
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_deleteData_basic_001.phpt
@@ -0,0 +1,20 @@
+--TEST--
+DOMCharacterData::deleteData() with count exceeding string size.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createCDATASection('test');
+$root->appendChild($cdata);
+$cdata->deleteData(1, 10);
+var_dump($cdata->data);
+?>
+--EXPECTF--
+%unicode|string%(%d) "t"
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_deleteData_error_001.phpt b/ext/dom/tests/DOMCharacterData_deleteData_error_001.phpt
new file mode 100644
index 0000000..3fa7fba
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_deleteData_error_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMCharacterData::deleteData() with no arguments.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createCDATASection('test');
+$root->appendChild($cdata);
+$cdata->deleteData();
+?>
+--EXPECTF--
+Warning: DOMCharacterData::deleteData() expects exactly 2 parameters, 0 given in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_deleteData_error_002.phpt b/ext/dom/tests/DOMCharacterData_deleteData_error_002.phpt
new file mode 100644
index 0000000..117d5de
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_deleteData_error_002.phpt
@@ -0,0 +1,23 @@
+--TEST--
+DOMCharacterData::deleteData() with offset exceeding string size.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createCDATASection('test');
+$root->appendChild($cdata);
+$cdata->deleteData(5, 1);
+?>
+--EXPECTF--
+Fatal error: Uncaught exception 'DOMException' with message 'Index Size Error' in %s:%d
+Stack trace:
+#0 %s(%d): DOMCharacterData->deleteData(5, 1)
+#1 {main}
+  thrown in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_insertData_error_001.phpt b/ext/dom/tests/DOMCharacterData_insertData_error_001.phpt
new file mode 100644
index 0000000..813a0be
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_insertData_error_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMCharacterData::insertData() with no arguments.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createCDATASection('test');
+$root->appendChild($cdata);
+$cdata->insertData();
+?>
+--EXPECTF--
+Warning: DOMCharacterData::insertData() expects exactly 2 parameters, 0 given in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMCharacterData_replaceData_error_001.phpt b/ext/dom/tests/DOMCharacterData_replaceData_error_001.phpt
new file mode 100644
index 0000000..45d25dd
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_replaceData_error_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMCharacterData::replaceData() with no arguments.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createCDATASection('test');
+$root->appendChild($cdata);
+$cdata->replaceData();
+?>
+--EXPECTF--
+Warning: DOMCharacterData::replaceData() expects exactly 3 parameters, 0 given in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMComment_construct_basic_001.phpt b/ext/dom/tests/DOMComment_construct_basic_001.phpt
new file mode 100644
index 0000000..902f7bb
--- /dev/null
+++ b/ext/dom/tests/DOMComment_construct_basic_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMComment::__construct() with constructor called twice.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$dom = new DOMDocument('1.0', 'UTF-8');
+$element = $dom->appendChild(new DOMElement('root'));
+$comment = new DOMComment("This is the first comment.");
+$comment->__construct("This is the second comment.");
+$comment = $element->appendChild($comment);
+print $dom->saveXML();
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<root><!--This is the second comment.--></root>
diff --git a/ext/dom/tests/DOMComment_construct_error_001.phpt b/ext/dom/tests/DOMComment_construct_error_001.phpt
new file mode 100644
index 0000000..89142fe
--- /dev/null
+++ b/ext/dom/tests/DOMComment_construct_error_001.phpt
@@ -0,0 +1,17 @@
+--TEST--
+DOMComment::__construct() with more arguments than acceptable.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$comment = new DOMComment("comment1", "comment2");
+?>
+--EXPECTF--
+Fatal error: Uncaught exception 'DOMException' with message 'DOMComment::__construct() expects at most 1 parameter, 2 given' in %s:%d
+Stack trace:
+#0 %s(%d): DOMComment->__construct('comment1', 'comment2')
+#1 {main}
+  thrown in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentFragment_appendXML_basic_001.phpt b/ext/dom/tests/DOMDocumentFragment_appendXML_basic_001.phpt
new file mode 100644
index 0000000..a6f381b
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_appendXML_basic_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+DOMDocumentFragment::appendXML() with children with properties.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$fragment = $document->createDocumentFragment();
+$fragment->appendXML('<foo id="baz">bar</foo>');
+$root->appendChild($fragment);
+
+print $document->saveXML();
+?>
+--EXPECT--
+<?xml version="1.0"?>
+<root><foo id="baz">bar</foo></root>
diff --git a/ext/dom/tests/DOMDocumentFragment_appendXML_error_001.phpt b/ext/dom/tests/DOMDocumentFragment_appendXML_error_001.phpt
new file mode 100644
index 0000000..6ffe510
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_appendXML_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentFragment::appendXML() with no arguments.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$fragment = new DOMDocumentFragment();
+$fragment->appendXML();
+?>
+--EXPECTF--
+Warning: DOMDocumentFragment::appendXML() expects exactly 1 parameter, 0 given in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentFragment_appendXML_error_002.phpt b/ext/dom/tests/DOMDocumentFragment_appendXML_error_002.phpt
new file mode 100644
index 0000000..c02c920
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_appendXML_error_002.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMDocumentFragment::appendXML() with unbound fragment.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$fragment = new DOMDocumentFragment();
+$fragment->appendXML('<bait>crankbait</bait>');
+$document->appendChild($fragment);
+?>
+--EXPECTF--
+Fatal error: Uncaught exception 'DOMException' with message 'No Modification Allowed Error' in %s:%d
+Stack trace:
+#0 %s(%d): DOMDocumentFragment->appendXML('<bait>crankbait...')
+#1 {main}
+  thrown in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentFragment_appendXML_error_003.phpt b/ext/dom/tests/DOMDocumentFragment_appendXML_error_003.phpt
new file mode 100644
index 0000000..8735ae6
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_appendXML_error_003.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMDocumentFragment::appendXML() with unbalanced chunks.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$fragment = $document->createDocumentFragment();
+@$fragment->appendXML('<foo>is<bar>great</foo>');
+$root->appendChild($fragment);
+?>
+--EXPECTF--
+Warning: DOMNode::appendChild(): Document Fragment is empty in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentFragment_construct_basic_001.phpt b/ext/dom/tests/DOMDocumentFragment_construct_basic_001.phpt
new file mode 100644
index 0000000..6021bac
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_construct_basic_001.phpt
@@ -0,0 +1,15 @@
+--TEST--
+DOMDocumentFragment::__construct().
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$fragment = new DOMDocumentFragment();
+var_dump($fragment);
+?>
+--EXPECTF--
+object(DOMDocumentFragment)#%d (%d) {
+}
diff --git a/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt b/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt
new file mode 100644
index 0000000..0d73445
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt
@@ -0,0 +1,16 @@
+--TEST--
+DOMDocumentFragment::__construct() called twice.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$fragment = new DOMDocumentFragment();
+$fragment->__construct();
+var_dump($fragment);
+?>
+--EXPECTF--
+object(DOMDocumentFragment)#%d (%d) {
+}
diff --git a/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt b/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt
new file mode 100644
index 0000000..91173c4
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt
@@ -0,0 +1,17 @@
+--TEST--
+DOMDocumentFragment::__construct() with too many errors.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-24
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$fragment = new DOMDocumentFragment("root");
+?>
+--EXPECTF--
+Fatal error: Uncaught exception 'DOMException' with message 'DOMDocumentFragment::__construct() expects exactly 0 parameters, 1 given' in %s:%d
+Stack trace:
+#0 %s(%d): DOMDocumentFragment->__construct('root')
+#1 {main}
+  thrown in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_basic_001.phpt b/ext/dom/tests/DOMDocumentType_basic_001.phpt
new file mode 100644
index 0000000..8991ed9
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_basic_001.phpt
@@ -0,0 +1,48 @@
+--TEST--
+DOMDocumentType: basic access to all properties.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+// Access publicId, systemId, name, internalSubset all with values.
+$xml  = '<?xml version="1.0" encoding="UTF-8" ?>';
+$xml .= '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML//EN" "docbookx.dtd">';
+$xml .= '<chapter>1</chapter>';
+$doc = new DOMDocument();
+$doc->loadXML($xml);
+$doctype = $doc->doctype;
+print "publicId: ".$doctype->publicId."\n";
+print "systemId: ".$doctype->systemId."\n";
+print "name: ".$doctype->name."\n";
+print "internalSubset: ".$doctype->internalSubset."\n";
+
+
+// Access entities and notations with values.
+$xml  = '<?xml version="1.0" encoding="UTF-8" ?>';
+$xml .= '<!DOCTYPE img [';
+$xml .= '  <!ELEMENT img EMPTY>';
+$xml .= '  <!ATTLIST img src ENTITY #REQUIRED>';
+$xml .= '  <!ENTITY logo SYSTEM "http://www.xmlwriter.net/logo.gif" NDATA gif>';
+$xml .= '  <!NOTATION gif PUBLIC "gif viewer">';
+$xml .= ']>';
+$xml .= '<img src="logo"/>';
+$doc = new DOMDocument();
+$doc->loadXML($xml);
+$doctype = $doc->doctype;
+$entities = $doctype->entities;
+$entity = $entities->item(0);
+print 'entity: '.$entity->nodeName."\n";
+$notations = $doctype->notations;
+$notation = $notations->item(0);
+print 'notation: '.$notation->nodeName."\n";
+?>
+--EXPECT--
+publicId: -//OASIS//DTD DocBook XML//EN
+systemId: docbookx.dtd
+name: chapter
+internalSubset: <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML//EN" "docbookx.dtd">
+entity: logo
+notation: gif
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_entities_error_001.phpt b/ext/dom/tests/DOMDocumentType_entities_error_001.phpt
new file mode 100644
index 0000000..73655b0
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_entities_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentType::entities with invalid state.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doctype = new DOMDocumentType();
+$entities = $doctype->entities;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_internalSubset_error_001.phpt b/ext/dom/tests/DOMDocumentType_internalSubset_error_001.phpt
new file mode 100644
index 0000000..c1f7d9b
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_internalSubset_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentType::internalSubset with invalid state.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doctype = new DOMDocumentType();
+$internalSubset = $doctype->internalSubset;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_name_error_001.phpt b/ext/dom/tests/DOMDocumentType_name_error_001.phpt
new file mode 100644
index 0000000..d2426e8
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_name_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentType::name with invalid state.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doctype = new DOMDocumentType();
+$name = $doctype->name;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_notations_error_001.phpt b/ext/dom/tests/DOMDocumentType_notations_error_001.phpt
new file mode 100644
index 0000000..e4d1c3c
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_notations_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentType::notations with invalid state.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doctype = new DOMDocumentType();
+$notations = $doctype->notations;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_publicId_basic_001.phpt b/ext/dom/tests/DOMDocumentType_publicId_basic_001.phpt
new file mode 100644
index 0000000..49a7eec
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_publicId_basic_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMDocumentType::publicId with empty value.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$xml  = '<?xml version="1.0" encoding="UTF-8" ?>';
+$xml .= '<!DOCTYPE chapter SYSTEM "http://www.xmlwriter.net/logo.gif">';
+$xml .= '<chapter>1</chapter>';
+$doc = new DOMDocument();
+$doc->loadXML($xml);
+$doctype = $doc->doctype;
+var_dump($doctype->publicId);
+?>
+--EXPECT--
+string(0) ""
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_publicId_error_001.phpt b/ext/dom/tests/DOMDocumentType_publicId_error_001.phpt
new file mode 100644
index 0000000..275bb65
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_publicId_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentType::publicId with invalid state.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doctype = new DOMDocumentType();
+$publicId = $doctype->publicId;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_systemId_basic_001.phpt b/ext/dom/tests/DOMDocumentType_systemId_basic_001.phpt
new file mode 100644
index 0000000..56f7ddd
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_systemId_basic_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+DOMDocumentType::systemId with empty value.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$xml  = '<?xml version="1.0" encoding="UTF-8" ?>';
+$xml .= '<!DOCTYPE chapter>';
+$xml .= '<chapter>1</chapter>';
+$doc = new DOMDocument();
+$doc->loadXML($xml);
+$doctype = $doc->doctype;
+var_dump($doctype->systemId);
+?>
+--EXPECT--
+string(0) ""
\ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentType_systemId_error_001.phpt b/ext/dom/tests/DOMDocumentType_systemId_error_001.phpt
new file mode 100644
index 0000000..a4aadd7
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentType_systemId_error_001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+DOMDocumentType::systemId with invalid state.
+--CREDITS--
+Eric Lee Stewart <ericleestewart at gmail.com>
+# TestFest Atlanta 2009-05-25
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doctype = new DOMDocumentType();
+$systemId = $doctype->systemId;
+?>
+--EXPECTF--
+Warning: main(): Invalid State Error in %s on line %d
\ No newline at end of file
diff --git a/ext/dom/tests/bug47430.phpt b/ext/dom/tests/bug47430.phpt
new file mode 100644
index 0000000..d3ca435
--- /dev/null
+++ b/ext/dom/tests/bug47430.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #47430 (Errors after writing to nodeValue parameter of an absent previousSibling).
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php 
+$xml = '<?xml
+version="1.0"?><html><p><i>Hello</i></p><p><i>World!</i></p></html>';
+$dom = new DOMDocument();
+$dom->loadXML($xml);
+
+$elements = $dom->getElementsByTagName('i');
+foreach ($elements as $i) {
+  $i->previousSibling->nodeValue = '';
+}
+
+$arr = array();
+$arr[0] = 'Value';
+
+print_r($arr);
+
+?>
+--EXPECTF--
+Strict Standards: Creating default object from empty value in %s on line %d
+
+Strict Standards: Creating default object from empty value in %s on line %d
+Array
+(
+    [0] => Value
+)
diff --git a/ext/dom/tests/bug47849.phpt b/ext/dom/tests/bug47849.phpt
new file mode 100644
index 0000000..7e6b02c
--- /dev/null
+++ b/ext/dom/tests/bug47849.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #47849 (Non-deep import loses the namespace).
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php 
+
+$aDOM= new DOMDocument();
+$aDOM->appendChild($aDOM->createElementNS('urn::root','r:root'));
+
+$fromdom= new DOMDocument();
+$fromdom->loadXML('<data xmlns="urn::data">aaa</data>');
+
+$data= $fromdom->documentElement;
+$aDOM->documentElement->appendChild($aDOM->importNode($data));
+
+echo $aDOM->saveXML();
+
+?>
+--EXPECT--
+<?xml version="1.0"?>
+<r:root xmlns:r="urn::root"><data xmlns="urn::data"/></r:root>
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
index 69ee596..13e0cf8 100644
--- a/ext/exif/exif.c
+++ b/ext/exif/exif.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: exif.c,v 1.173.2.5.2.27 2008/12/31 11:17:37 sebastian Exp $ */
+/* $Id: exif.c,v 1.173.2.5.2.28 2009/05/28 14:03:09 pajoye Exp $ */
 
 /*  ToDos
  *
@@ -142,7 +142,7 @@ zend_function_entry exif_functions[] = {
 };
 /* }}} */
 
-#define EXIF_VERSION "1.4 $Id: exif.c,v 1.173.2.5.2.27 2008/12/31 11:17:37 sebastian Exp $"
+#define EXIF_VERSION "1.4 $Id: exif.c,v 1.173.2.5.2.28 2009/05/28 14:03:09 pajoye Exp $"
 
 /* {{{ PHP_MINFO_FUNCTION
  */
@@ -3215,6 +3215,10 @@ static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf,
 		exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF start (1)");
 		return;
 	}
+	if (offset_of_ifd > length) {
+		exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid IFD start");
+		return;
+	}
 
 	ImageInfo->sections_found |= FOUND_IFD0;
 	/* First directory starts at offset 8. Offsets starts at 0. */
diff --git a/ext/exif/tests/bug48378.jpeg b/ext/exif/tests/bug48378.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..759d8057098948ac0fe579805aecff6997489888
GIT binary patch
literal 2566
zcmex=<Nrg3HrI;GGzJDwPb~&c1_uTv1|vo$1`!4Z1~nkgY-eF$1kzSOoB+f|1_qW^
z2Bua<CJKfYRt9EPie^B0<_QoTK0p;9fT7CJ3}`MR6U3}Kpb91sTL7e%1&BEq{@-Re
z%)rXb!otGL3M5!rS=-ooIM{)JpPQSLN047gNRVGpP*_YxTv$X(R8UYtQ9?>qR$g9S
zSX at a(NlryZPG0W+0S0akW(lSgMn*w~|3?@kK~7@?IUf#K+1QymfKuuLj6gRqGcYnU
zvqB{qnV3~r*#w2y6%B<&M8%bq9UK4OV&DMjw`cek0XG7f;egCxU{FBiGNE!Ycn&Bc
z>%Z at Nc&KEZvH!&9#ph&m_x_PG*}t{x($C!I=PqY<tX&<k^=;<-t=XBs|MA}YcxlUy
zTD$b}?O*@q8CRv5nj05IWHu)yf0lS}_T&CPpGDQ at uiV>t#cbQwol<!(Qm#FGd;0#D
z9j`0q1kRd~=`nLlb<OmXf)RiGkKH>{yLbMjx3=l!^KZQV72Dr&^O@<QbbI;sa at lW&
zE|qU?%lMz#S1mu|KSRNE6xV_|f&Uhi?tORqUX^cgM)up%ciP$Mlkfe_Z#n)>v;E7~
z)gR~YIlpsL{EdF4!sGk==RNviH>=j|!aw~<=MNXn-o0B!>>SUnKV{FwMXuhub??T_
z8^>pv8>X&F-dg;4&3&Gz`lE)XTYSUfU(U~JKb`gQ%HxeG4 at --`?$erCoRf6A;<3f6
z=xp7$c44`nZq9l<|IM1)=j#mPkH;^atG at MBkuAUb)R(vJ=-Dl`uC{5{t=(fSZRxw`
zMp44njlQ~;N;}n6pY3_tb$+AQPkZ_34Is~;Boj=p!bRYb3QWClHe42!;Q-_|pbBB<
zfieLQIDkpq1XLMr1t6IQ{L%zv33&=;fCG#{9*xT{3Q*&~g#(n0>LdrKC<cWQg$)==
zfC36|K at 9b{+|&Tqf?y~hm_v)jL|F<!#07E;;S2(7!Gsa+Sac&B?tm)KfyxE*5HW|W
z5uBs2DaT?0MM4hvbra)ZkO`=6hnk5HRDg;gQwUjPQKH!tYR9yv0aJ*8NCPzPNYY7?
eVpIp9Yek71k`fCd(V^NvUmn!`WX2 at _|C<2yEdUq*

literal 0
HcmV?d00001

diff --git a/ext/exif/tests/bug48378.phpt b/ext/exif/tests/bug48378.phpt
new file mode 100644
index 0000000..286ce61
--- /dev/null
+++ b/ext/exif/tests/bug48378.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #48378 (Infinite recursion due to corrupt JPEG)
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+exif_read_data(
+dirname(__FILE__) . "/bug48378.jpeg", 
+"FILE,COMPUTED,ANY_TAG"
+);
+?>
+--EXPECTF--
+Warning: exif_read_data(%s): Invalid IFD start in %s48378.php on line %d
+
+Warning: exif_read_data(%s): Error reading from file: got=x08B4(=2228) != itemlen-2=x1FFE(=8190) in %s48378.php on line %d
+
+Warning: exif_read_data(%s): Invalid JPEG file in %s48378.php on line %d
+
+
diff --git a/ext/filter/filter.c b/ext/filter/filter.c
index 497668c..b94ed53 100644
--- a/ext/filter/filter.c
+++ b/ext/filter/filter.c
@@ -19,7 +19,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: filter.c,v 1.52.2.45 2008/12/31 11:17:37 sebastian Exp $ */
+/* $Id: filter.c,v 1.52.2.47 2009/04/14 14:18:49 tony2001 Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -275,7 +275,7 @@ PHP_MINFO_FUNCTION(filter)
 {
 	php_info_print_table_start();
 	php_info_print_table_row( 2, "Input Validation and Filtering", "enabled" );
-	php_info_print_table_row( 2, "Revision", "$Revision: 1.52.2.45 $");
+	php_info_print_table_row( 2, "Revision", "$Revision: 1.52.2.47 $");
 	php_info_print_table_end();
 
 	DISPLAY_INI_ENTRIES();
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index 1d56eda..1155290 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: logical_filters.c,v 1.1.2.28 2009/02/02 23:51:58 iliaa Exp $ */
+/* $Id: logical_filters.c,v 1.1.2.34 2009/06/10 19:05:49 felipe Exp $ */
 
 #include "php_filter.h"
 #include "filter_private.h"
@@ -30,8 +30,6 @@
 # include <arpa/inet.h>
 #endif
 
-#define LONG_SIGN_MASK (1L << (8*sizeof(long)-1))
-
 #ifndef INADDR_NONE
 # define INADDR_NONE ((unsigned long int) -1)
 #endif
@@ -70,14 +68,12 @@
 
 static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret TSRMLS_DC) { /* {{{ */
 	long ctx_value;
-	long sign = 1;
+	int sign = 0;
 	const char *end = str + str_len;
-	double dval;
-	long overflow;
 
 	switch (*str) {
 		case '-':
-			sign = -1;
+			sign = 1;
 		case '+':
 			str++;
 		default:
@@ -91,22 +87,29 @@ static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret
 		return -1;
 	}
 
+	if ((end - str > MAX_LENGTH_OF_LONG - 1) /* number too long */
+	 || (SIZEOF_LONG == 4 && end - str == MAX_LENGTH_OF_LONG - 1 && *str > '2')) {
+		/* overflow */
+		return -1;
+	}
+
 	while (str < end) {
 		if (*str >= '0' && *str <= '9') {
-			ZEND_SIGNED_MULTIPLY_LONG(ctx_value, 10, ctx_value, dval, overflow);
-			if (overflow) {
-				return -1;
-			}
-			ctx_value += ((*(str++)) - '0');
-			if (ctx_value & LONG_SIGN_MASK) {
-				return -1;
-			}
+			ctx_value = (ctx_value * 10) + (*(str++) - '0');
 		} else {
 			return -1;
 		}
 	}
+	if (sign) {
+		ctx_value = -ctx_value;
+		if (ctx_value > 0) { /* overflow */
+			return -1;
+		}
+	} else if (ctx_value < 0) { /* overflow */
+		return -1;
+	}
 
-	*ret = ctx_value * sign;
+	*ret = ctx_value;
 	return 1;
 }
 /* }}} */
@@ -469,7 +472,7 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 {
 	/* From http://cvs.php.net/co.php/pear/HTML_QuickForm/QuickForm/Rule/Email.php?r=1.4 */
-	const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?\\.?)+[A-Za-z\\-]*))$/D";
+	const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z\\-]))?)+[A-Za-z\\-]*))$/D";
 
 	pcre       *re = NULL;
 	pcre_extra *pcre_extra = NULL;
@@ -567,7 +570,7 @@ static int _php_filter_validate_ipv6(char *str, int str_len TSRMLS_DC) /* {{{ */
 			}
 			if (*str == ':') {
 				if (compressed || --blocks == 0) {
-					return ipv4 != NULL;
+					return 0;
 				}			
 				if (++str == end || (ipv4 && ipv4 == str)) {
 					return 1;
@@ -655,6 +658,12 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 				if (res < 1) {
 					RETURN_VALIDATION_FAILED
 				}
+				/* Check flags */
+				if (flags & FILTER_FLAG_NO_PRIV_RANGE) {
+					if (Z_STRLEN_P(value) >=2 && (!strncasecmp("FC", Z_STRVAL_P(value), 2) || !strncasecmp("FD", Z_STRVAL_P(value), 2))) {
+						RETURN_VALIDATION_FAILED
+					}
+				}
 			}
 			break;
 	}
diff --git a/ext/filter/tests/046.phpt b/ext/filter/tests/046.phpt
index 4ab1ce6..8394da9 100755
--- a/ext/filter/tests/046.phpt
+++ b/ext/filter/tests/046.phpt
@@ -13,7 +13,7 @@ var_dump(filter_var($s, FILTER_VALIDATE_INT));
 $s = sprintf("%d", -PHP_INT_MAX);
 var_dump(is_long(filter_var($s, FILTER_VALIDATE_INT)));
 
-$s = sprintf("%.0f", -(PHP_INT_MAX+1));
+$s = sprintf("%.0f", ~(PHP_INT_MAX)-1);
 var_dump(filter_var($s, FILTER_VALIDATE_INT));
 ?>
 --EXPECT--
diff --git a/ext/filter/tests/bug46973.phpt b/ext/filter/tests/bug46973.phpt
index c9c5ba4..01a5118 100644
--- a/ext/filter/tests/bug46973.phpt
+++ b/ext/filter/tests/bug46973.phpt
@@ -9,6 +9,6 @@ var_dump(filter_var('1fff::a88:85a3::172.31.128.1', FILTER_VALIDATE_IP,FILTER_FL
  
 ?>
 --EXPECTF--
-string(28) "1fff::a88:85a3::172.31.128.1"
+bool(false)
 string(39) "3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344"
-string(28) "1fff::a88:85a3::172.31.128.1"
+bool(false)
diff --git a/ext/filter/tests/bug47745.phpt b/ext/filter/tests/bug47745.phpt
new file mode 100644
index 0000000..a8656fd
--- /dev/null
+++ b/ext/filter/tests/bug47745.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Bug #47745 (FILTER_VALIDATE_INT doesn't allow minimum integer)
+--FILE--
+<?php
+$s = (string)(-PHP_INT_MAX-1);
+var_dump(intval($s));
+var_dump(filter_var($s, FILTER_VALIDATE_INT));
+?>
+--EXPECTF--
+int(-%d)
+int(-%d)
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index af40a2b..cfde5eb 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd.c,v 1.312.2.20.2.38 2009/01/31 15:28:34 kalle Exp $ */
+/* $Id: gd.c,v 1.312.2.20.2.40 2009/05/28 14:06:06 pajoye Exp $ */
 
 /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
    Cold Spring Harbor Labs. */
@@ -73,6 +73,8 @@ static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC);
 #include <gdfontmb.h> /* 3 Medium bold font */
 #include <gdfontl.h>  /* 4 Large font */
 #include <gdfontg.h>  /* 5 Giant font */
+#include "libgd/gdhelpers.h"
+
 #ifdef HAVE_GD_WBMP
 #include "libgd/wbmp.h"
 #endif
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
index a2677c1..212c666 100644
--- a/ext/gd/libgd/gd.c
+++ b/ext/gd/libgd/gd.c
@@ -3864,7 +3864,7 @@ int gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, flo
 	int         x, y, i, j, new_a;
 	float       new_r, new_g, new_b;
 	int         new_pxl, pxl=0;
-	gdImagePtr  srcback;
+	gdImagePtr  srcback, srctrans;
 	typedef int (*FuncPtr)(gdImagePtr, int, int);
 	FuncPtr f;
 
@@ -3874,11 +3874,14 @@ int gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, flo
 
 	/* We need the orinal image with each safe neoghb. pixel */
 	srcback = gdImageCreateTrueColor (src->sx, src->sy);
-	gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
-
 	if (srcback==NULL) {
 		return 0;
 	}
+	srcback->saveAlphaFlag = 1;
+	srctrans = gdImageColorAllocateAlpha(srcback, 0, 0, 0, 127);
+	gdImageFill(srcback, 0, 0, srctrans);
+
+	gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
 
 	f = GET_PIXEL_FUNCTION(src);
 
@@ -3936,11 +3939,10 @@ int gdImageSelectiveBlur( gdImagePtr src)
 
 	/* We need the orinal image with each safe neoghb. pixel */
 	srcback = gdImageCreateTrueColor (src->sx, src->sy);
-	gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
-
 	if (srcback==NULL) {
 		return 0;
 	}
+	gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
 
 	f = GET_PIXEL_FUNCTION(src);
 
diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c
index 7591dc0..bb53e0d 100644
--- a/ext/gd/libgd/gd_png.c
+++ b/ext/gd/libgd/gd_png.c
@@ -535,6 +535,10 @@ void gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level, int basefilte
 				++colors;
 			}
 		}
+		if (colors == 0) {
+			php_gd_error("gd-png error: no colors in palette");
+			goto bail;
+		}
 		if (colors < im->colorsTotal) {
 			remap = TRUE;
 		}
@@ -732,6 +736,7 @@ void gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level, int basefilte
 		}
 	}
 	/* 1.6.3: maybe we should give that memory BACK! TBB */
+ bail:
 	png_destroy_write_struct(&png_ptr, &info_ptr);
 }
 
diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c
index e543f2f..9c4b9b5 100644
--- a/ext/gd/libgd/gdft.c
+++ b/ext/gd/libgd/gdft.c
@@ -1108,15 +1108,23 @@ gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist, double ptsi
 		double d1 = sin (angle + 0.78539816339744830962);
 		double d2 = sin (angle - 0.78539816339744830962);
 
+		/* make the center of rotation at (0, 0) */
+		FT_BBox normbox;
+
+		normbox.xMin = 0;
+		normbox.yMin = 0;
+		normbox.xMax = bbox.xMax - bbox.xMin;
+		normbox.yMax = bbox.yMax - bbox.yMin;
+
 		/* rotate bounding rectangle */
-		brect[0] = (int) (bbox.xMin * cos_a - bbox.yMin * sin_a);
-		brect[1] = (int) (bbox.xMin * sin_a + bbox.yMin * cos_a);
-		brect[2] = (int) (bbox.xMax * cos_a - bbox.yMin * sin_a);
-		brect[3] = (int) (bbox.xMax * sin_a + bbox.yMin * cos_a);
-		brect[4] = (int) (bbox.xMax * cos_a - bbox.yMax * sin_a);
-		brect[5] = (int) (bbox.xMax * sin_a + bbox.yMax * cos_a);
-		brect[6] = (int) (bbox.xMin * cos_a - bbox.yMax * sin_a);
-		brect[7] = (int) (bbox.xMin * sin_a + bbox.yMax * cos_a);
+		brect[0] = (int) (normbox.xMin * cos_a - normbox.yMin * sin_a);
+		brect[1] = (int) (normbox.xMin * sin_a + normbox.yMin * cos_a);
+		brect[2] = (int) (normbox.xMax * cos_a - normbox.yMin * sin_a);
+		brect[3] = (int) (normbox.xMax * sin_a + normbox.yMin * cos_a);
+		brect[4] = (int) (normbox.xMax * cos_a - normbox.yMax * sin_a);
+		brect[5] = (int) (normbox.xMax * sin_a + normbox.yMax * cos_a);
+		brect[6] = (int) (normbox.xMin * cos_a - normbox.yMax * sin_a);
+		brect[7] = (int) (normbox.xMin * sin_a + normbox.yMax * cos_a);
 
 		/* scale, round and offset brect */
 		brect[0] = x + gdroundupdown(brect[0], d2 > 0);
diff --git a/ext/gd/tests/bug45799.phpt b/ext/gd/tests/bug45799.phpt
new file mode 100644
index 0000000..a28f940
--- /dev/null
+++ b/ext/gd/tests/bug45799.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #45799 (imagepng() crashes on empty image).
+--SKIPIF--
+<?php
+	if (!extension_loaded('gd')) die("skip gd extension not available\n");
+?>
+--FILE--
+<?php
+$img = imagecreate(500,500);
+imagepng($img);
+imagedestroy($img);
+?>
+--EXPECTF--
+
+Warning: imagepng(): gd-png error: no colors in palette in %s on line %d
diff --git a/ext/iconv/tests/iconv_basic.phpt b/ext/iconv/tests/iconv_basic.phpt
new file mode 100644
index 0000000..e0e2cb2
--- /dev/null
+++ b/ext/iconv/tests/iconv_basic.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Test iconv() function : basic functionality 
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv') or die("skip iconv() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv(string in_charset, string out_charset, string str)
+ * Description: Returns converted string in desired encoding 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test basic functionality of iconv()
+ */
+
+echo "*** Testing iconv() : basic functionality ***\n";
+
+//All strings are the same when displayed in their respective encodings
+$sjis_string = base64_decode(b'k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
+$euc_jp_string = base64_decode(b'xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==');
+$utf8_string = base64_decode(b'5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- Convert to EUC-JP --\n";
+echo "Expected EUC-JP encoded string in base64:\n";
+var_dump(bin2hex($euc_jp_string));
+echo "Converted Strings:\n";
+var_dump(bin2hex(iconv('SJIS', 'EUC-JP', $sjis_string )));
+var_dump(bin2hex(iconv('UTF-8', 'EUC-JP', $utf8_string)));
+
+echo "\n-- Convert to SJIS --\n";
+echo "Expected SJIS encoded string in base64:\n";
+var_dump(bin2hex($sjis_string));
+echo "Converted Strings:\n";
+var_dump(bin2hex(iconv('EUC-JP', 'SJIS', $euc_jp_string)));
+var_dump(bin2hex(iconv('UTF-8', 'SJIS', $utf8_string)));
+
+echo "\n-- Convert to UTF-8 --\n";
+echo "Expected UTF-8 encoded string in base64:\n";
+var_dump(bin2hex($utf8_string));
+echo "Converted Strings:\n";
+var_dump(bin2hex(iconv('SJIS', 'UTF-8', $sjis_string)));
+var_dump(bin2hex(iconv('EUC-JP', 'UTF-8', $euc_jp_string)));
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing iconv() : basic functionality ***
+
+-- Convert to EUC-JP --
+Expected EUC-JP encoded string in base64:
+string(74) "c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3"
+Converted Strings:
+string(74) "c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3"
+string(74) "c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3"
+
+-- Convert to SJIS --
+Expected SJIS encoded string in base64:
+string(74) "93fa967b8cea8365834c8358836782c582b781423031323334825482558256825782588142"
+Converted Strings:
+string(74) "93fa967b8cea8365834c8358836782c582b781423031323334825482558256825782588142"
+string(74) "93fa967b8cea8365834c8358836782c582b781423031323334825482558256825782588142"
+
+-- Convert to UTF-8 --
+Expected UTF-8 encoded string in base64:
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+Converted Strings:
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_encoding_basic.phpt b/ext/iconv/tests/iconv_encoding_basic.phpt
new file mode 100644
index 0000000..150f49b
--- /dev/null
+++ b/ext/iconv/tests/iconv_encoding_basic.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test iconv_get_encoding()/iconv_set_encoding() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_get_encoding') or die("skip iconv_get_encoding() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : mixed iconv_get_encoding([string type])
+ * Description: Get internal encoding and output encoding for ob_iconv_handler() 
+ * Prototype  : bool iconv_set_encoding(string type, string charset)
+ * Description: Sets internal encoding and output encoding for ob_iconv_handler()
+ * Source code: ext/iconv/iconv.c 
+ */
+
+/*
+ * Test Basic functionality of iconv_get_encoding/iconv_set_encoding
+ */
+
+echo "*** Testing iconv_get_encoding()/iconv_set_encoding() : basic functionality ***\n";
+
+echo "--- Default get_encoding ---\n";
+var_dump(iconv_get_encoding());
+var_dump(iconv_get_encoding("input_encoding"));
+var_dump(iconv_get_encoding("output_encoding"));
+var_dump(iconv_get_encoding("internal_encoding"));
+var_dump(iconv_get_encoding("all"));
+
+echo "\n--- Altering encodings ---\n";
+var_dump(iconv_set_encoding("input_encoding", "UTF-8"));
+var_dump(iconv_set_encoding("output_encoding", "UTF-8"));
+var_dump(iconv_set_encoding("internal_encoding", "UTF-8"));
+
+
+echo "\n--- results of alterations ---\n";
+var_dump(iconv_get_encoding());
+var_dump(iconv_get_encoding("input_encoding"));
+var_dump(iconv_get_encoding("output_encoding"));
+var_dump(iconv_get_encoding("internal_encoding"));
+var_dump(iconv_get_encoding("all"));
+
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_get_encoding()/iconv_set_encoding() : basic functionality ***
+--- Default get_encoding ---
+array(3) {
+  ["input_encoding"]=>
+  string(10) "ISO-8859-1"
+  ["output_encoding"]=>
+  string(10) "ISO-8859-1"
+  ["internal_encoding"]=>
+  string(10) "ISO-8859-1"
+}
+string(10) "ISO-8859-1"
+string(10) "ISO-8859-1"
+string(10) "ISO-8859-1"
+array(3) {
+  ["input_encoding"]=>
+  string(10) "ISO-8859-1"
+  ["output_encoding"]=>
+  string(10) "ISO-8859-1"
+  ["internal_encoding"]=>
+  string(10) "ISO-8859-1"
+}
+
+--- Altering encodings ---
+bool(true)
+bool(true)
+bool(true)
+
+--- results of alterations ---
+array(3) {
+  ["input_encoding"]=>
+  string(5) "UTF-8"
+  ["output_encoding"]=>
+  string(5) "UTF-8"
+  ["internal_encoding"]=>
+  string(5) "UTF-8"
+}
+string(5) "UTF-8"
+string(5) "UTF-8"
+string(5) "UTF-8"
+array(3) {
+  ["input_encoding"]=>
+  string(5) "UTF-8"
+  ["output_encoding"]=>
+  string(5) "UTF-8"
+  ["internal_encoding"]=>
+  string(5) "UTF-8"
+}
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_get_encoding_error.phpt b/ext/iconv/tests/iconv_get_encoding_error.phpt
new file mode 100644
index 0000000..b0c3e07
--- /dev/null
+++ b/ext/iconv/tests/iconv_get_encoding_error.phpt
@@ -0,0 +1,177 @@
+--TEST--
+Test iconv_get_encoding() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_get_encoding') or die("skip iconv_get_encoding() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : mixed iconv_get_encoding([string type])
+ * Description: Get internal encoding and output encoding for ob_iconv_handler() 
+ * Source code: ext/iconv/iconv.c 
+ */
+
+/*
+ * Test Error functionality of iconv_get_encoding
+ */
+
+echo "*** Testing iconv_get_encoding() : error functionality ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "UTF-8";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+Nothing
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // invalid string data
+/*18*/ "Nothing",
+       'Nothing',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_regex_encoding()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_get_encoding($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_get_encoding() : error functionality ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: iconv_get_encoding() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_mime_decode_headers_variation1.phpt b/ext/iconv/tests/iconv_mime_decode_headers_variation1.phpt
new file mode 100644
index 0000000..7cc32c7
--- /dev/null
+++ b/ext/iconv/tests/iconv_mime_decode_headers_variation1.phpt
@@ -0,0 +1,218 @@
+--TEST--
+Test iconv_mime_encode() function : usage variations - Pass different data types to headers arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_mime_decode_headers') or die("skip iconv_mime_decode_headers() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : array iconv_mime_decode_headers(string headers [, int mode, string charset])
+ * Description: Decodes multiple mime header fields
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass different data types to $str argument to see how iconv_mime_decode_headers() behaves
+ */
+
+echo "*** Testing iconv_mime_decode_headers() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$headers = <<<EOF
+Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
+To: example at example.com
+Date: Thu, 1 Jan 1970 00:00:00 +0000
+Message-Id: <example at example.com>
+Received: from localhost (localhost [127.0.0.1]) by localhost
+    with SMTP id example for <example at example.com>;
+    Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
+    (envelope-from example-return-0000-example=example.com at example.com)
+Received: (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000
+
+EOF;
+
+$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+$charset = 'ISO-8859-1';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_mime_decode_headers()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_mime_decode_headers($input, $mode, $charset));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_mime_decode_headers() : usage variations ***
+
+-- Iteration 1 --
+array(0) {
+}
+
+-- Iteration 2 --
+array(0) {
+}
+
+-- Iteration 3 --
+array(0) {
+}
+
+-- Iteration 4 --
+array(0) {
+}
+
+-- Iteration 5 --
+array(0) {
+}
+
+-- Iteration 6 --
+array(0) {
+}
+
+-- Iteration 7 --
+array(0) {
+}
+
+-- Iteration 8 --
+array(0) {
+}
+
+-- Iteration 9 --
+array(0) {
+}
+
+-- Iteration 10 --
+array(0) {
+}
+
+-- Iteration 11 --
+array(0) {
+}
+
+-- Iteration 12 --
+array(0) {
+}
+
+-- Iteration 13 --
+array(0) {
+}
+
+-- Iteration 14 --
+array(0) {
+}
+
+-- Iteration 15 --
+array(0) {
+}
+
+-- Iteration 16 --
+array(0) {
+}
+
+-- Iteration 17 --
+array(0) {
+}
+
+-- Iteration 18 --
+array(0) {
+}
+
+-- Iteration 19 --
+array(0) {
+}
+
+-- Iteration 20 --
+array(0) {
+}
+
+-- Iteration 21 --
+array(0) {
+}
+
+-- Iteration 22 --
+array(0) {
+}
+
+-- Iteration 23 --
+array(0) {
+}
+
+-- Iteration 24 --
+
+Warning: iconv_mime_decode_headers() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_mime_decode_headers_variation2.phpt b/ext/iconv/tests/iconv_mime_decode_headers_variation2.phpt
new file mode 100644
index 0000000..5ceb801
--- /dev/null
+++ b/ext/iconv/tests/iconv_mime_decode_headers_variation2.phpt
@@ -0,0 +1,479 @@
+--TEST--
+Test iconv_mime_encode() function : usage variations - Pass different data types to mode arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_mime_decode_headers') or die("skip iconv_mime_decode_headers() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : array iconv_mime_decode_headers(string headers [, int mode, string charset])
+ * Description: Decodes multiple mime header fields
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass different data types to $str argument to see how iconv_mime_decode_headers() behaves
+ */
+
+echo "*** Testing iconv_mime_decode_headers() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$headers = <<<EOF
+Subject: =?UTF-8?B?QSBTYW1wbGUgVGVzdA==?=
+To: example at example.com
+Date: Thu, 1 Jan 1970 00:00:00 +0000
+Message-Id: <example at example.com>
+Received: from localhost (localhost [127.0.0.1]) by localhost
+    with SMTP id example for <example at example.com>;
+    Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
+    (envelope-from example-return-0000-example=example.com at example.com)
+Received: (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000
+
+EOF;
+
+$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+$charset = 'UTF-8';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_mime_decode_headers()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_mime_decode_headers($headers, $input, $charset));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_mime_decode_headers() : usage variations ***
+
+-- Iteration 1 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 2 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 3 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 4 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 5 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 6 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 7 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 8 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 9 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 10 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 11 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 12 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 13 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 14 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 15 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 16 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 23 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 24 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_mime_decode_headers_variation3.phpt b/ext/iconv/tests/iconv_mime_decode_headers_variation3.phpt
new file mode 100644
index 0000000..c4a9cc4
--- /dev/null
+++ b/ext/iconv/tests/iconv_mime_decode_headers_variation3.phpt
@@ -0,0 +1,482 @@
+--TEST--
+Test iconv_mime_encode() function : usage variations - Pass different data types to charset arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_mime_decode_headers') or die("skip iconv_mime_decode_headers() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : array iconv_mime_decode_headers(string headers [, int mode, string charset])
+ * Description: Decodes multiple mime header fields
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass different data types to $str argument to see how iconv_mime_decode_headers() behaves
+ */
+
+echo "*** Testing iconv_mime_decode_headers() : usage variations ***\n";
+
+// Some of the parameters actually passed to charset will request to use
+// a default charset determined by the platform. In order for this test to
+// run on both linux and windows, the subject will have to be ascii only.
+// Initialise function arguments not being substituted
+$headers = <<<EOF
+Subject: =?UTF-8?B?QSBTYW1wbGUgVGVzdA==?=
+To: example at example.com
+Date: Thu, 1 Jan 1970 00:00:00 +0000
+Message-Id: <example at example.com>
+Received: from localhost (localhost [127.0.0.1]) by localhost
+    with SMTP id example for <example at example.com>;
+    Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
+    (envelope-from example-return-0000-example=example.com at example.com)
+Received: (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000
+
+EOF;
+
+$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+$charset = 'UTF-8';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_mime_decode_headers()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_mime_decode_headers($headers, $input, $charset));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_mime_decode_headers() : usage variations ***
+
+-- Iteration 1 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 2 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 3 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 4 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 5 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 6 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 7 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 8 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 9 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 10 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 11 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 12 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 13 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 14 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 15 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 16 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 23 --
+array(5) {
+  ["Subject"]=>
+  string(13) "A Sample Test"
+  ["To"]=>
+  string(19) "example at example.com"
+  ["Date"]=>
+  string(30) "Thu, 1 Jan 1970 00:00:00 +0000"
+  ["Message-Id"]=>
+  string(21) "<example at example.com>"
+  ["Received"]=>
+  array(2) {
+    [0]=>
+    string(204) "from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example at example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com at example.com)"
+    [1]=>
+    string(57) "(qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000"
+  }
+}
+
+-- Iteration 24 --
+
+Warning: iconv_mime_decode_headers() expects parameter 2 to be long, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_mime_decode_variation1.phpt b/ext/iconv/tests/iconv_mime_decode_variation1.phpt
new file mode 100644
index 0000000..a42b0de
--- /dev/null
+++ b/ext/iconv/tests/iconv_mime_decode_variation1.phpt
@@ -0,0 +1,183 @@
+--TEST--
+Test iconv_mime_decode() function : usage variations - Pass different data types to header arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_mime_decode') or die("skip iconv_mime_decode() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv_mime_decode(string encoded_string [, int mode, string charset])
+ * Description: Decodes a mime header field
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass different data types to $str argument to see how iconv_mime_decode() behaves
+ */
+
+echo "*** Testing iconv_mime_decode() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$header = b'Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=';
+$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+$charset = 'ISO-8859-1';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_mime_decode()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_mime_decode($input, $mode, $charset));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_mime_decode() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(5) "12345"
+
+-- Iteration 4 --
+string(5) "-2345"
+
+-- Iteration 5 --
+string(4) "10.5"
+
+-- Iteration 6 --
+string(5) "-10.5"
+
+-- Iteration 7 --
+string(12) "123456789000"
+
+-- Iteration 8 --
+string(13) "1.23456789E-9"
+
+-- Iteration 9 --
+string(3) "0.5"
+
+-- Iteration 10 --
+string(0) ""
+
+-- Iteration 11 --
+string(0) ""
+
+-- Iteration 12 --
+string(1) "1"
+
+-- Iteration 13 --
+string(0) ""
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(0) ""
+
+-- Iteration 16 --
+string(0) ""
+
+-- Iteration 17 --
+string(0) ""
+
+-- Iteration 18 --
+string(6) "string"
+
+-- Iteration 19 --
+string(6) "string"
+
+-- Iteration 20 --
+string(11) "hello world"
+
+-- Iteration 21 --
+string(14) "Class A object"
+
+-- Iteration 22 --
+string(0) ""
+
+-- Iteration 23 --
+string(0) ""
+
+-- Iteration 24 --
+
+Warning: iconv_mime_decode() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_mime_decode_variation2.phpt b/ext/iconv/tests/iconv_mime_decode_variation2.phpt
new file mode 100644
index 0000000..1d82822
--- /dev/null
+++ b/ext/iconv/tests/iconv_mime_decode_variation2.phpt
@@ -0,0 +1,195 @@
+--TEST--
+Test iconv_mime_decode() function : usage variations - Pass different data types to mode arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_mime_decode') or die("skip iconv_mime_decode() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv_mime_decode(string encoded_string [, int mode, string charset])
+ * Description: Decodes a mime header field
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass different data types to $str argument to see how iconv_mime_decode() behaves
+ */
+
+echo "*** Testing iconv_mime_decode() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$header = b'Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=';
+$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+$charset = 'UTF-8';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_mime_decode()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( bin2hex(iconv_mime_decode($header, $input, $charset)));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_mime_decode() : usage variations ***
+
+-- Iteration 1 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 2 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 3 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 4 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 5 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 6 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 7 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 8 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 9 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 10 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 11 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 12 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 13 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 14 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 15 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 16 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, string given in %s on line %d
+string(0) ""
+
+-- Iteration 17 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, string given in %s on line %d
+string(0) ""
+
+-- Iteration 18 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, string given in %s on line %d
+string(0) ""
+
+-- Iteration 19 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, string given in %s on line %d
+string(0) ""
+
+-- Iteration 20 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, string given in %s on line %d
+string(0) ""
+
+-- Iteration 21 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, object given in %s on line %d
+string(0) ""
+
+-- Iteration 22 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 23 --
+string(52) "5375626a6563743a205072c3bc66756e67205072c3bc66756e67"
+
+-- Iteration 24 --
+
+Warning: iconv_mime_decode() expects parameter 2 to be long, resource given in %s on line %d
+string(0) ""
+Done
diff --git a/ext/iconv/tests/iconv_mime_decode_variation3.phpt b/ext/iconv/tests/iconv_mime_decode_variation3.phpt
new file mode 100644
index 0000000..cd5c719
--- /dev/null
+++ b/ext/iconv/tests/iconv_mime_decode_variation3.phpt
@@ -0,0 +1,222 @@
+--TEST--
+Test iconv_mime_decode() function : usage variations - Pass different data types to charset arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_mime_decode') or die("skip iconv_mime_decode() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv_mime_decode(string encoded_string [, int mode, string charset])
+ * Description: Decodes a mime header field
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass different data types to $str argument to see how iconv_mime_decode() behaves
+ */
+
+echo "*** Testing iconv_mime_decode() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+// Some of the parameters actually passed to charset will request to use
+// a default charset determined by the platform. In order for this test to
+// run on both linux and windows, the subject will have to be ascii only.
+$header = b'Subject: =?UTF-8?B?QSBTYW1wbGUgVGVzdA==?=';
+$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
+$charset = 'UTF-8';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_mime_decode()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  $res = iconv_mime_decode($header, $mode, $input);
+  if ($res !== false) {
+  	 var_dump(bin2hex($res));
+  }
+  else {
+     var_dump($res);
+  }
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_mime_decode() : usage variations ***
+
+-- Iteration 1 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `0' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `12345' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `-2345' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `10.5' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `-10.5' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `123456789000' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1.23456789E-9' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `0.5' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 11 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 12 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 14 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 16 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 17 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 18 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `string' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `string' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `hello world' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `Class A object' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 23 --
+string(44) "5375626a6563743a20412053616d706c652054657374"
+
+-- Iteration 24 --
+
+Warning: iconv_mime_decode() expects parameter 3 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_set_encoding_error.phpt b/ext/iconv/tests/iconv_set_encoding_error.phpt
new file mode 100644
index 0000000..4ba8400
--- /dev/null
+++ b/ext/iconv/tests/iconv_set_encoding_error.phpt
@@ -0,0 +1,177 @@
+--TEST--
+Test iconv_set_encoding() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_set_encoding') or die("skip iconv_set_encoding() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : bool iconv_set_encoding(string type, string charset)
+ * Description: Sets internal encoding and output encoding for ob_iconv_handler()
+ * Source code: ext/iconv/iconv.c 
+ */
+
+/*
+ * Test Error functionality of iconv_get_encoding
+ */
+
+echo "*** Testing iconv_set_encoding() : error functionality ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "UTF-8";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+Nothing
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // invalid string data
+/*18*/ "Nothing",
+       'Nothing',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_regex_encoding()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_set_encoding($input, "UTF-8") );
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_set_encoding() : error functionality ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: iconv_set_encoding() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_set_encoding_variation.phpt b/ext/iconv/tests/iconv_set_encoding_variation.phpt
new file mode 100644
index 0000000..311a9f9
--- /dev/null
+++ b/ext/iconv/tests/iconv_set_encoding_variation.phpt
@@ -0,0 +1,307 @@
+--TEST--
+Test iconv_set_encoding() function : error functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_set_encoding') or die("skip iconv_set_encoding() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : bool iconv_set_encoding(string type, string charset)
+ * Description: Sets internal encoding and output encoding for ob_iconv_handler()
+ * Source code: ext/iconv/iconv.c 
+ */
+
+/*
+ * Test Error functionality of iconv_get_encoding
+ */
+
+echo "*** Testing iconv_set_encoding() : error functionality ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "UTF-8";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+Nothing
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // invalid string data
+/*18*/ "Nothing",
+       'Nothing',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_regex_encoding()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_set_encoding("internal_encoding", $input) );
+  var_dump( iconv_set_encoding("input_encoding", $input) );
+  var_dump( iconv_set_encoding("output_encoding", $input) );
+  var_dump( iconv_get_encoding("internal_encoding") );
+  var_dump( iconv_get_encoding("input_encoding") );
+  var_dump( iconv_get_encoding("output_encoding") );
+
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_set_encoding() : error functionality ***
+
+-- Iteration 1 --
+bool(true)
+bool(true)
+bool(true)
+string(1) "0"
+string(1) "0"
+string(1) "0"
+
+-- Iteration 2 --
+bool(true)
+bool(true)
+bool(true)
+string(1) "1"
+string(1) "1"
+string(1) "1"
+
+-- Iteration 3 --
+bool(true)
+bool(true)
+bool(true)
+string(5) "12345"
+string(5) "12345"
+string(5) "12345"
+
+-- Iteration 4 --
+bool(true)
+bool(true)
+bool(true)
+string(5) "-2345"
+string(5) "-2345"
+string(5) "-2345"
+
+-- Iteration 5 --
+bool(true)
+bool(true)
+bool(true)
+string(4) "10.5"
+string(4) "10.5"
+string(4) "10.5"
+
+-- Iteration 6 --
+bool(true)
+bool(true)
+bool(true)
+string(5) "-10.5"
+string(5) "-10.5"
+string(5) "-10.5"
+
+-- Iteration 7 --
+bool(true)
+bool(true)
+bool(true)
+string(12) "123456789000"
+string(12) "123456789000"
+string(12) "123456789000"
+
+-- Iteration 8 --
+bool(true)
+bool(true)
+bool(true)
+string(13) "1.23456789E-9"
+string(13) "1.23456789E-9"
+string(13) "1.23456789E-9"
+
+-- Iteration 9 --
+bool(true)
+bool(true)
+bool(true)
+string(3) "0.5"
+string(3) "0.5"
+string(3) "0.5"
+
+-- Iteration 10 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 11 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 12 --
+bool(true)
+bool(true)
+bool(true)
+string(1) "1"
+string(1) "1"
+string(1) "1"
+
+-- Iteration 13 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 14 --
+bool(true)
+bool(true)
+bool(true)
+string(1) "1"
+string(1) "1"
+string(1) "1"
+
+-- Iteration 15 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 16 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 17 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 18 --
+bool(true)
+bool(true)
+bool(true)
+string(7) "Nothing"
+string(7) "Nothing"
+string(7) "Nothing"
+
+-- Iteration 19 --
+bool(true)
+bool(true)
+bool(true)
+string(7) "Nothing"
+string(7) "Nothing"
+string(7) "Nothing"
+
+-- Iteration 20 --
+bool(true)
+bool(true)
+bool(true)
+string(7) "Nothing"
+string(7) "Nothing"
+string(7) "Nothing"
+
+-- Iteration 21 --
+bool(true)
+bool(true)
+bool(true)
+string(5) "UTF-8"
+string(5) "UTF-8"
+string(5) "UTF-8"
+
+-- Iteration 22 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 23 --
+bool(true)
+bool(true)
+bool(true)
+string(0) ""
+string(0) ""
+string(0) ""
+
+-- Iteration 24 --
+
+Warning: iconv_set_encoding() expects parameter 2 to be string, resource given in %s on line %d
+NULL
+
+Warning: iconv_set_encoding() expects parameter 2 to be string, resource given in %s on line %d
+NULL
+
+Warning: iconv_set_encoding() expects parameter 2 to be string, resource given in %s on line %d
+NULL
+string(0) ""
+string(0) ""
+string(0) ""
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_stream_filter.phpt b/ext/iconv/tests/iconv_stream_filter.phpt
index 70facdc..6a60baf 100644
--- a/ext/iconv/tests/iconv_stream_filter.phpt
+++ b/ext/iconv/tests/iconv_stream_filter.phpt
@@ -22,9 +22,9 @@ fclose($fp);
 $fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
 stream_filter_append($fp, 'string.rot13'); // this will make conversion fail.
 stream_filter_append($fp, 'convert.iconv.ISO-2022-JP/EUC-JP');
-var_dump(bin2hex(fread($fp, 10)));
-var_dump(bin2hex(fread($fp, 5)));
-var_dump(bin2hex(fread($fp, 1)));
+var_dump(bin2hex(fread($fp, 10)) != "a4b3a4f3a4cba4c1a4cf");
+var_dump(bin2hex(fread($fp, 5)) != "69636f6e76");
+var_dump(bin2hex(fread($fp, 1)) != "0a");
 fclose($fp);
 ?>
 --EXPECTF--
@@ -34,8 +34,6 @@ string(2) "42"
 string(20) "a4b3a4f3a4cba4c1a4cf"
 string(10) "69636f6e76"
 string(2) "0a"
-
-Warning: fread(): iconv stream filter ("ISO-2022-JP"=>"EUC-JP"): invalid multibyte sequence in %s on line %d
-string(0) ""
-string(0) ""
-string(0) ""
+bool(true)
+bool(true)
+bool(true)
diff --git a/ext/iconv/tests/iconv_stream_filter_delimiter.phpt b/ext/iconv/tests/iconv_stream_filter_delimiter.phpt
new file mode 100644
index 0000000..e28ebab
--- /dev/null
+++ b/ext/iconv/tests/iconv_stream_filter_delimiter.phpt
@@ -0,0 +1,50 @@
+--TEST--
+iconv stream filter
+--SKIPIF--
+<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
+--INI--
+iconv.internal_charset=iso-8859-1
+--FILE--
+<?php
+$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
+var_dump(bin2hex(fread($fp, 10)));
+var_dump(bin2hex(fread($fp, 5)));
+var_dump(bin2hex(fread($fp, 1)));
+fclose($fp);
+
+$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
+stream_filter_append($fp, 'convert.iconv.ISO-2022-JP/EUC-JP');
+var_dump(bin2hex(fread($fp, 10)));
+var_dump(bin2hex(fread($fp, 5)));
+var_dump(bin2hex(fread($fp, 1)));
+fclose($fp);
+
+$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
+stream_filter_append($fp, 'convert.iconv.ISO-2022-JP.EUC-JP');
+var_dump(bin2hex(fread($fp, 10)));
+var_dump(bin2hex(fread($fp, 5)));
+var_dump(bin2hex(fread($fp, 1)));
+fclose($fp);
+
+$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
+stream_filter_append($fp, 'convert.iconv.ISO-2022-JP\0EUC-JP');
+var_dump(bin2hex(fread($fp, 10)));
+var_dump(bin2hex(fread($fp, 5)));
+var_dump(bin2hex(fread($fp, 1)));
+fclose($fp);
+?>
+--EXPECTF--
+string(20) "1b244224332473244b24"
+string(10) "41244f1b28"
+string(2) "42"
+string(20) "a4b3a4f3a4cba4c1a4cf"
+string(10) "69636f6e76"
+string(2) "0a"
+string(20) "a4b3a4f3a4cba4c1a4cf"
+string(10) "69636f6e76"
+string(2) "0a"
+
+Warning: stream_filter_append(): unable to create or locate filter "convert.iconv.ISO-2022-JP\0EUC-JP" in %s/iconv_stream_filter_delimiter.php on line %d
+string(20) "1b244224332473244b24"
+string(10) "41244f1b28"
+string(2) "42"
diff --git a/ext/iconv/tests/iconv_strlen_basic.phpt b/ext/iconv/tests/iconv_strlen_basic.phpt
new file mode 100644
index 0000000..5777435
--- /dev/null
+++ b/ext/iconv/tests/iconv_strlen_basic.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test iconv_strlen() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strlen') or die("skip iconv_strlen() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strlen(string str [, string charset])
+ * Description: Get character numbers of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test basic functionality of iconv_strlen()
+ */
+
+echo "*** Testing iconv_strlen() : basic functionality***\n";
+
+$string_ascii = b'abc def';
+//Japanese string in UTF-8
+$string_mb = base64_decode(b'5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII String --\n";
+var_dump(iconv_strlen($string_ascii));
+
+echo "\n-- Multibyte String --\n";
+var_dump(iconv_strlen($string_mb, 'UTF-8'));
+?>
+===DONE===
+--EXPECTF--
+*** Testing iconv_strlen() : basic functionality***
+
+-- ASCII String --
+int(7)
+
+-- Multibyte String --
+int(21)
+===DONE===
diff --git a/ext/iconv/tests/iconv_strlen_error1.phpt b/ext/iconv/tests/iconv_strlen_error1.phpt
new file mode 100644
index 0000000..3c63b20
--- /dev/null
+++ b/ext/iconv/tests/iconv_strlen_error1.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test iconv_strlen() function : error conditions - pass incorrect number of args
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strlen') or die("skip iconv_strlen() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strlen(string str [, string charset])
+ * Description: Get character numbers of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strlen an incorrect number of arguments to test behaviour
+ */
+
+echo "*** Testing iconv_strlen() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing iconv_strlen() function with Zero arguments --\n";
+var_dump( iconv_strlen() );
+
+//Test iconv_strlen with one more than the expected number of arguments
+echo "\n-- Testing iconv_strlen() function with more than expected no. of arguments --\n";
+$str = 'string_val';
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( iconv_strlen($str, $encoding, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing iconv_strlen() : error conditions ***
+
+-- Testing iconv_strlen() function with Zero arguments --
+
+Warning: iconv_strlen() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing iconv_strlen() function with more than expected no. of arguments --
+
+Warning: iconv_strlen() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/iconv/tests/iconv_strlen_error2.phpt b/ext/iconv/tests/iconv_strlen_error2.phpt
new file mode 100644
index 0000000..6c760b1
--- /dev/null
+++ b/ext/iconv/tests/iconv_strlen_error2.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test iconv_strlen() function : error conditions - pass an unknown encoding
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strlen') or die("skip iconv_strlen() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strlen(string str [, string charset])
+ * Description: Get character numbers of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test iconv_strlen when passed an unknown encoding
+ */
+
+echo "*** Testing iconv_strlen() : error ***\n";
+
+$string = 'abcdef';
+
+$encoding = 'unknown-encoding';
+
+var_dump(iconv_strlen($string, $encoding));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing iconv_strlen() : error ***
+
+Notice: iconv_strlen(): Wrong charset, conversion from `unknown-encoding' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/iconv/tests/iconv_strlen_variation1.phpt b/ext/iconv/tests/iconv_strlen_variation1.phpt
new file mode 100644
index 0000000..e3e25aa
--- /dev/null
+++ b/ext/iconv/tests/iconv_strlen_variation1.phpt
@@ -0,0 +1,193 @@
+--TEST--
+Test iconv_strlen() function : usage variations - Pass different data types as $str arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strlen') or die("skip iconv_strlen() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strlen(string str [, string charset])
+ * Description: Get character numbers of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test iconv_strlen by passing different data types as $str argument
+ */
+
+echo "*** Testing iconv_strlen() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $str argument
+$inputs = array(
+
+       // int data
+/*1*/ 
+	 'int 0' => 0,
+     'int 1' => 1,
+     'int 12345' => 12345,
+     'int -12345' => -12345,
+
+       // float data
+/*5*/ 
+	 'float 10.5' => 10.5,
+     'float -10.5' => -10.5,
+     'float 12.3456789000e10' => 12.3456789000e10,
+     'float 12.3456789000e-10' => 12.3456789000e-10,
+     'float .5' => .5,
+
+       // null data
+/*10*/ 
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+       
+       // boolean data
+/*12*/ 
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+              
+       // empty data
+/*16*/ 
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+       
+       // string data
+/*18*/ 
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+             
+       // object data
+/*21*/ 
+      'instance of class' => new classA(),
+       
+       // undefined data
+/*22*/ 
+      'undefined var' => @$undefined_var,
+
+       // unset data
+/*23*/ 
+      'unset var' => @$unset_var,
+
+       // resource variable
+/*24*/
+       'resource' => $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strlen()
+$iterator = 1;
+foreach($inputs as $key =>$value) {
+  echo "\n--$key--\n";
+  var_dump( iconv_strlen($value, $encoding));
+  $iterator++;
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing iconv_strlen() : usage variations ***
+
+--int 0--
+int(1)
+
+--int 1--
+int(1)
+
+--int 12345--
+int(5)
+
+--int -12345--
+int(6)
+
+--float 10.5--
+int(4)
+
+--float -10.5--
+int(5)
+
+--float 12.3456789000e10--
+int(12)
+
+--float 12.3456789000e-10--
+int(13)
+
+--float .5--
+int(3)
+
+--uppercase NULL--
+int(0)
+
+--lowercase null--
+int(0)
+
+--lowercase true--
+int(1)
+
+--lowercase false--
+int(0)
+
+--uppercase TRUE--
+int(1)
+
+--uppercase FALSE--
+int(0)
+
+--empty string DQ--
+int(0)
+
+--empty string SQ--
+int(0)
+
+--string DQ--
+int(6)
+
+--string SQ--
+int(6)
+
+--mixed case string--
+int(6)
+
+--heredoc--
+int(11)
+
+--instance of class--
+int(14)
+
+--undefined var--
+int(0)
+
+--unset var--
+int(0)
+
+--resource--
+
+Warning: iconv_strlen() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/iconv/tests/iconv_strlen_variation2.phpt b/ext/iconv/tests/iconv_strlen_variation2.phpt
new file mode 100644
index 0000000..85dd048
--- /dev/null
+++ b/ext/iconv/tests/iconv_strlen_variation2.phpt
@@ -0,0 +1,204 @@
+--TEST--
+Test iconv_strlen() function : usage variations - Pass different data types as $encoding arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strlen') or die("skip iconv_strlen() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strlen(string str [, string charset])
+ * Description: Get character numbers of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test iconv_strlen() by passing different data types as $encoding argument.
+ * Where possible 'UTF-8' has been entered as a string value
+ */
+
+echo "*** Testing iconv_strlen() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$str = 'string value';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "UTF-8";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $input argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "UTF-8",
+       'UTF-8',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strlen()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strlen($str, $input));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing iconv_strlen() : usage variations ***
+
+-- Iteration 1 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `0' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `12345' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `-2345' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `10.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `-10.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `123456789000' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `1.23456789E-9' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `0.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+int(12)
+
+-- Iteration 11 --
+int(12)
+
+-- Iteration 12 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+int(12)
+
+-- Iteration 14 --
+
+Notice: iconv_strlen(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+int(12)
+
+-- Iteration 16 --
+int(12)
+
+-- Iteration 17 --
+int(12)
+
+-- Iteration 18 --
+int(12)
+
+-- Iteration 19 --
+int(12)
+
+-- Iteration 20 --
+int(12)
+
+-- Iteration 21 --
+int(12)
+
+-- Iteration 22 --
+int(12)
+
+-- Iteration 23 --
+int(12)
+
+-- Iteration 24 --
+
+Warning: iconv_strlen() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strpos_basic.phpt b/ext/iconv/tests/iconv_strpos_basic.phpt
new file mode 100644
index 0000000..1604465
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_basic.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test iconv_strpos() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test basic functionality of iconv_strpos with ASCII and multibyte characters
+ */
+
+echo "*** Testing iconv_strpos() : basic functionality***\n";
+
+iconv_set_encoding("internal_encoding", "UTF-8");
+
+$string_ascii = b'abc def';
+//Japanese string in UTF-8
+$string_mb = base64_decode(b'5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII string 1 --\n";
+var_dump(iconv_strpos($string_ascii, b'd', 2, 'ISO-8859-1'));
+
+echo "\n-- ASCII string 2 --\n";
+var_dump(iconv_strpos($string_ascii, b'123'));
+
+echo "\n-- Multibyte string 1 --\n";
+$needle1 = base64_decode('5pel5pys6Kqe');
+var_dump(iconv_strpos($string_mb, $needle1));
+
+echo "\n-- Multibyte string 2 --\n";
+$needle2 = base64_decode(b"44GT44KT44Gr44Gh44Gv44CB5LiW55WM");
+var_dump(iconv_strpos($string_mb, $needle2));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : basic functionality***
+
+-- ASCII string 1 --
+int(4)
+
+-- ASCII string 2 --
+bool(false)
+
+-- Multibyte string 1 --
+int(0)
+
+-- Multibyte string 2 --
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strpos_error1.phpt b/ext/iconv/tests/iconv_strpos_error1.phpt
new file mode 100644
index 0000000..2324665
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_error1.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test iconv_strpos() function : error conditions - Pass incorrect number of args
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test how iconv_strpos behaves when passed an incorrect number of arguments
+ */
+
+echo "*** Testing iconv_strpos() : error conditions ***\n";
+
+
+//Test iconv_strpos with one more than the expected number of arguments
+echo "\n-- Testing iconv_strpos() function with more than expected no. of arguments --\n";
+$haystack = 'string_val';
+$needle = 'string_val';
+$offset = 10;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( iconv_strpos($haystack, $needle, $offset, $encoding, $extra_arg) );
+
+// Testing iconv_strpos with one less than the expected number of arguments
+echo "\n-- Testing iconv_strpos() function with less than expected no. of arguments --\n";
+$haystack = 'string_val';
+var_dump( iconv_strpos($haystack) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : error conditions ***
+
+-- Testing iconv_strpos() function with more than expected no. of arguments --
+
+Warning: iconv_strpos() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing iconv_strpos() function with less than expected no. of arguments --
+
+Warning: iconv_strpos() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+Done
diff --git a/ext/iconv/tests/iconv_strpos_error2.phpt b/ext/iconv/tests/iconv_strpos_error2.phpt
new file mode 100644
index 0000000..01e728a
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_error2.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test iconv_strpos() function : error conditions - Pass unknown encoding
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass an unknown encoding to iconv_strpos() to test behaviour
+ */
+
+echo "*** Testing iconv_strpos() : error conditions ***\n";
+$haystack = 'Hello, world';
+$needle = 'world';
+$offset = 2;
+$encoding = 'unknown-encoding';
+
+var_dump( iconv_strpos($haystack, $needle, $offset, $encoding) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : error conditions ***
+
+Notice: iconv_strpos(): Wrong charset, conversion from `unknown-encoding' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+Done
diff --git a/ext/iconv/tests/iconv_strpos_variation1.phpt b/ext/iconv/tests/iconv_strpos_variation1.phpt
new file mode 100644
index 0000000..38dc353
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_variation1.phpt
@@ -0,0 +1,182 @@
+--TEST--
+Test iconv_strpos() function : usage variations - pass different data types to $haystack arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strpos different data types as $haystack arg to test behaviour
+ */
+
+echo "*** Testing iconv_strpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = 'string_val';
+$offset = 0;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $haystack argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strpos($input, $needle, $offset, $encoding));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: iconv_strpos() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strpos_variation2.phpt b/ext/iconv/tests/iconv_strpos_variation2.phpt
new file mode 100644
index 0000000..e702ca9
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_variation2.phpt
@@ -0,0 +1,182 @@
+--TEST--
+Test iconv_strpos() function : usage variations - pass different data types as $needle arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strpos different data types as $needle arg to test behaviour
+ */
+
+echo "*** Testing iconv_strpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = 'string_val';
+$offset = 0;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $needle argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strpos($haystack, $input, $offset, $encoding));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: iconv_strpos() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strpos_variation3.phpt b/ext/iconv/tests/iconv_strpos_variation3.phpt
new file mode 100644
index 0000000..3c333bf
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_variation3.phpt
@@ -0,0 +1,201 @@
+--TEST--
+Test iconv_strpos() function : usage variations - pass different data types as $offset arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strpos different data types as $offset arg to test behaviour
+ */
+
+echo "*** Testing iconv_strpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = b'a';
+$haystack = b'string_val';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $offest argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strpos($haystack, $needle, $input, $encoding));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : usage variations ***
+
+-- Iteration 1 --
+int(8)
+
+-- Iteration 2 --
+int(8)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+int(8)
+
+-- Iteration 9 --
+int(8)
+
+-- Iteration 10 --
+int(8)
+
+-- Iteration 11 --
+int(8)
+
+-- Iteration 12 --
+int(8)
+
+-- Iteration 13 --
+int(8)
+
+-- Iteration 14 --
+int(8)
+
+-- Iteration 15 --
+int(8)
+
+-- Iteration 16 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+int(8)
+
+-- Iteration 23 --
+int(8)
+
+-- Iteration 24 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strpos_variation3_64bit.phpt b/ext/iconv/tests/iconv_strpos_variation3_64bit.phpt
new file mode 100644
index 0000000..1cc8a84
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_variation3_64bit.phpt
@@ -0,0 +1,199 @@
+--TEST--
+Test iconv_strpos() function : usage variations - pass different data types as $offset arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strpos different data types as $offset arg to test behaviour
+ */
+
+echo "*** Testing iconv_strpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = b'a';
+$haystack = b'string_val';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "Class A object";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $offest argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strpos($haystack, $needle, $input, $encoding));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strpos() : usage variations ***
+
+-- Iteration 1 --
+int(8)
+
+-- Iteration 2 --
+int(8)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+int(8)
+
+-- Iteration 8 --
+int(8)
+
+-- Iteration 9 --
+int(8)
+
+-- Iteration 10 --
+int(8)
+
+-- Iteration 11 --
+int(8)
+
+-- Iteration 12 --
+int(8)
+
+-- Iteration 13 --
+int(8)
+
+-- Iteration 14 --
+int(8)
+
+-- Iteration 15 --
+int(8)
+
+-- Iteration 16 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+int(8)
+
+-- Iteration 23 --
+int(8)
+
+-- Iteration 24 --
+
+Warning: iconv_strpos() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strpos_variation4.phpt b/ext/iconv/tests/iconv_strpos_variation4.phpt
new file mode 100644
index 0000000..43ab3e5
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_variation4.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test iconv_strpos() function : usage variations - pass different data types as $charset arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+
+/*
+ * Pass iconv_strpos different data types as $encoding arg to test behaviour
+ * Where possible 'UTF-8' has been entered as a string value
+ */
+
+echo "*** Testing iconv_strpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = b'string_val';
+$needle = b'val';
+$offset = 0;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "UTF-8";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $input argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "UTF-8",
+       'UTF-8',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strpos($haystack, $needle, $offset, $input));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing iconv_strpos() : usage variations ***
+
+-- Iteration 1 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `0' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `12345' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `-2345' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `10.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `-10.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `123456789000' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `1.23456789E-9' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `0.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+int(7)
+
+-- Iteration 11 --
+int(7)
+
+-- Iteration 12 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+int(7)
+
+-- Iteration 14 --
+
+Notice: iconv_strpos(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+int(7)
+
+-- Iteration 16 --
+int(7)
+
+-- Iteration 17 --
+int(7)
+
+-- Iteration 18 --
+int(7)
+
+-- Iteration 19 --
+int(7)
+
+-- Iteration 20 --
+int(7)
+
+-- Iteration 21 --
+int(7)
+
+-- Iteration 22 --
+int(7)
+
+-- Iteration 23 --
+int(7)
+
+-- Iteration 24 --
+
+Warning: iconv_strpos() expects parameter 4 to be string, resource given in %s on line %d
+bool(false)
+Done
diff --git a/ext/iconv/tests/iconv_strpos_variation5.phpt b/ext/iconv/tests/iconv_strpos_variation5.phpt
new file mode 100644
index 0000000..57a7a90
--- /dev/null
+++ b/ext/iconv/tests/iconv_strpos_variation5.phpt
@@ -0,0 +1,101 @@
+--TEST--
+Test iconv_strpos() function : usage variations - Pass different integers as $offset argument
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strpos') or die("skip iconv_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : int iconv_strpos(string haystack, string needle [, int offset [, string charset]])
+ * Description: Find position of first occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test how iconv_strpos() behaves when passed different integers as $offset argument
+ * The character length of $string_ascii and $string_mb is the same, 
+ * and the needle appears at the same positions in both strings
+ */
+
+iconv_set_encoding("internal_encoding", "UTF-8");
+
+echo "*** Testing iconv_strpos() : usage variations ***\n";
+
+$string_ascii = b'+Is an English string'; //21 chars
+$needle_ascii = b'g';
+
+$string_mb = base64_decode(b'5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars
+$needle_mb = base64_decode(b'44CC');
+
+/*
+ * Loop through integers as multiples of ten for $offset argument
+ * iconv_strpos should not be able to accept negative values as $offset.
+ * 60 is larger than *BYTE* count for $string_mb
+ */
+for ($i = -10; $i <= 60; $i += 10) {
+	echo "\n**-- Offset is: $i --**\n";
+	echo "-- ASCII String --\n";
+	var_dump(iconv_strpos($string_ascii, $needle_ascii, $i));
+	echo "--Multibyte String --\n";
+	var_dump(iconv_strpos($string_mb, $needle_mb, $i, 'UTF-8'));
+}
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing iconv_strpos() : usage variations ***
+
+**-- Offset is: -10 --**
+-- ASCII String --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: iconv_strpos(): Offset not contained in string. in %s on line %d
+bool(false)
+
+**-- Offset is: 0 --**
+-- ASCII String --
+int(9)
+--Multibyte String --
+int(9)
+
+**-- Offset is: 10 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 20 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 30 --**
+-- ASCII String --
+bool(false)
+--Multibyte String --
+bool(false)
+
+**-- Offset is: 40 --**
+-- ASCII String --
+bool(false)
+--Multibyte String --
+bool(false)
+
+**-- Offset is: 50 --**
+-- ASCII String --
+bool(false)
+--Multibyte String --
+bool(false)
+
+**-- Offset is: 60 --**
+-- ASCII String --
+bool(false)
+--Multibyte String --
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strrpos_basic.phpt b/ext/iconv/tests/iconv_strrpos_basic.phpt
new file mode 100644
index 0000000..e275681
--- /dev/null
+++ b/ext/iconv/tests/iconv_strrpos_basic.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test iconv_strrpos() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : proto int iconv_strrpos(string haystack, string needle [, string charset])
+ * Description: Find position of last occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test basic functionality of iconv_strrpos()
+ */
+
+echo "*** Testing iconv_strrpos() : basic ***\n";
+
+iconv_set_encoding("internal_encoding", "UTF-8");
+
+$string_ascii = b'This is an English string. 0123456789.';
+//Japanese string in UTF-8
+$string_mb = base64_decode(b'5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII string 1 --\n";
+var_dump(iconv_strrpos($string_ascii, b'is', 'ISO-8859-1'));
+
+echo "\n-- ASCII string 2 --\n";
+var_dump(iconv_strrpos($string_ascii, b'hello, world'));
+
+echo "\n-- Multibyte string 1 --\n";
+$needle1 = base64_decode(b'44CC');
+var_dump(iconv_strrpos($string_mb, $needle1));
+
+echo "\n-- Multibyte string 2 --\n";
+$needle2 = base64_decode(b'44GT44KT44Gr44Gh44Gv44CB5LiW55WM');
+var_dump(iconv_strrpos($string_mb, $needle2));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strrpos() : basic ***
+
+-- ASCII string 1 --
+int(15)
+
+-- ASCII string 2 --
+bool(false)
+
+-- Multibyte string 1 --
+int(20)
+
+-- Multibyte string 2 --
+bool(false)
+Done
+
diff --git a/ext/iconv/tests/iconv_strrpos_error1.phpt b/ext/iconv/tests/iconv_strrpos_error1.phpt
new file mode 100644
index 0000000..9d185c7
--- /dev/null
+++ b/ext/iconv/tests/iconv_strrpos_error1.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test iconv_strrpos() function : error conditions - pass incorrect number of args
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : proto int iconv_strrpos(string haystack, string needle [, string charset])
+ * Description: Find position of last occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strrpos() an incorrect number of arguments
+ */
+
+echo "*** Testing iconv_strrpos() : error conditions ***\n";
+
+
+//Test iconv_strrpos with one more than the expected number of arguments
+echo "\n-- Testing iconv_strrpos() function with more than expected no. of arguments --\n";
+$haystack = 'string_val';
+$needle = 'string_val';
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( iconv_strrpos($haystack, $needle, $encoding, $extra_arg) );
+
+// Testing iconv_strrpos with one less than the expected number of arguments
+echo "\n-- Testing iconv_strrpos() function with less than expected no. of arguments --\n";
+$haystack = 'string_val';
+var_dump( iconv_strrpos($haystack) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strrpos() : error conditions ***
+
+-- Testing iconv_strrpos() function with more than expected no. of arguments --
+
+Warning: iconv_strrpos() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+
+-- Testing iconv_strrpos() function with less than expected no. of arguments --
+
+Warning: iconv_strrpos() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strrpos_error2.phpt b/ext/iconv/tests/iconv_strrpos_error2.phpt
new file mode 100644
index 0000000..ea72322
--- /dev/null
+++ b/ext/iconv/tests/iconv_strrpos_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test iconv_strrpos() function : error conditions - pass an unknown encoding
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : proto int iconv_strrpos(string haystack, string needle [, string charset])
+ * Description: Find position of last occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strrpos() an encoding that doesn't exist
+ */
+
+echo "*** Testing iconv_strrpos() : error conditions ***\n";
+
+$haystack = 'This is an English string. 0123456789.';
+$needle = '123';
+$offset = 5;
+$encoding = 'unknown-encoding';
+
+var_dump(iconv_strrpos($haystack, $needle , $encoding));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_strrpos() : error conditions ***
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `unknown-encoding' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strrpos_variation1.phpt b/ext/iconv/tests/iconv_strrpos_variation1.phpt
new file mode 100644
index 0000000..e4ed011
--- /dev/null
+++ b/ext/iconv/tests/iconv_strrpos_variation1.phpt
@@ -0,0 +1,180 @@
+--TEST--
+Test iconv_strrpos() function : usage variations - pass different data types to $haystack arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : proto int iconv_strrpos(string haystack, string needle [, string charset])
+ * Description: Find position of last occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strrpos() different data types as $haystack argument to test behaviour
+ */
+
+echo "*** Testing iconv_strrpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = 'world';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "hello, world";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello, world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $haystack argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "hello, world",
+       'hello, world',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strrpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strrpos($input, $needle, $encoding));
+  $iterator++;
+};
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing iconv_strrpos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+int(7)
+
+-- Iteration 19 --
+int(7)
+
+-- Iteration 20 --
+int(7)
+
+-- Iteration 21 --
+int(7)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: iconv_strrpos() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strrpos_variation2.phpt b/ext/iconv/tests/iconv_strrpos_variation2.phpt
new file mode 100644
index 0000000..a0001f5
--- /dev/null
+++ b/ext/iconv/tests/iconv_strrpos_variation2.phpt
@@ -0,0 +1,182 @@
+--TEST--
+Test iconv_strrpos() function : usage variations - Pass different data types to $needle arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : proto int iconv_strrpos(string haystack, string needle [, string charset])
+ * Description: Find position of last occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strrpos() different data types as $needle argument to test behaviour
+ */
+
+echo "*** Testing iconv_strrpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = 'hello, world';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "world";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $needle argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "world",
+       'world',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strrpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strrpos($haystack, $input, $encoding));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing iconv_strrpos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+int(7)
+
+-- Iteration 19 --
+int(7)
+
+-- Iteration 20 --
+int(7)
+
+-- Iteration 21 --
+int(7)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: iconv_strrpos() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_strrpos_variation3.phpt b/ext/iconv/tests/iconv_strrpos_variation3.phpt
new file mode 100644
index 0000000..87a21bd
--- /dev/null
+++ b/ext/iconv/tests/iconv_strrpos_variation3.phpt
@@ -0,0 +1,205 @@
+--TEST--
+Test iconv_strrpos() function : usage variations - pass different data types as $encoding arg
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_strrpos') or die("skip iconv_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : proto int iconv_strrpos(string haystack, string needle [, string charset])
+ * Description: Find position of last occurrence of a string within another 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass iconv_strrpos() different data types as $encoding argument to test behaviour
+ * Where possible 'UTF-8' has been entered as a string value
+ */
+
+echo "*** Testing iconv_strrpos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = b'hello, world';
+$needle = b'world';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "UTF-8";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+
+       // string data
+/*18*/ "UTF-8",
+       'UTF-8',
+       $heredoc,
+       
+       // object data
+/*21*/ new classA(),
+
+       // undefined data
+/*22*/ @$undefined_var,
+
+       // unset data
+/*23*/ @$unset_var,
+
+       // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of iconv_strrpos()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( iconv_strrpos($haystack, $needle, $input));
+  $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing iconv_strrpos() : usage variations ***
+
+-- Iteration 1 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `0' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `12345' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `-2345' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `10.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `-10.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `123456789000' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `1.23456789E-9' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `0.5' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+int(7)
+
+-- Iteration 11 --
+int(7)
+
+-- Iteration 12 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+int(7)
+
+-- Iteration 14 --
+
+Notice: iconv_strrpos(): Wrong charset, conversion from `1' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+int(7)
+
+-- Iteration 16 --
+int(7)
+
+-- Iteration 17 --
+int(7)
+
+-- Iteration 18 --
+int(7)
+
+-- Iteration 19 --
+int(7)
+
+-- Iteration 20 --
+int(7)
+
+-- Iteration 21 --
+int(7)
+
+-- Iteration 22 --
+int(7)
+
+-- Iteration 23 --
+int(7)
+
+-- Iteration 24 --
+
+Warning: iconv_strrpos() expects parameter 3 to be string, resource given in %s on line %d
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_substr_basic.phpt b/ext/iconv/tests/iconv_substr_basic.phpt
new file mode 100644
index 0000000..b8db8a1
--- /dev/null
+++ b/ext/iconv/tests/iconv_substr_basic.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test iconv_substr() function : basic functionality 
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_substr') or die("skip iconv_substr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv_substr(string str, int offset, [int length, string charset])
+ * Description: Returns part of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Test Basic Functionality of iconv_substr with ASCII characters and multibyte strings.
+ */
+
+echo "*** Testing iconv_substr() : basic functionality ***\n";
+
+$string_ascii = b'ABCDEF';
+//Japanese string in UTF-8
+$string_mb = base64_decode(b'5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII string 1 --\n";
+var_dump(bin2hex(iconv_substr($string_ascii, 3)));
+
+echo "\n-- ASCII string 2 --\n";
+var_dump(bin2hex(iconv_substr($string_ascii, 3, 5, 'ISO-8859-1')));
+
+echo "\n-- Multibyte string 1 --\n";
+$result_1 = iconv_substr($string_mb, 2, 7);
+var_dump(bin2hex($result_1));
+
+echo "\n-- Multibyte string 2 --\n";
+$result_2 = iconv_substr($string_mb, 2, 7, 'utf-8');
+var_dump(bin2hex($result_2));
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing iconv_substr() : basic functionality ***
+
+-- ASCII string 1 --
+string(6) "444546"
+
+-- ASCII string 2 --
+string(6) "444546"
+
+-- Multibyte string 1 --
+string(14) "a5e69cace8aa9e"
+
+-- Multibyte string 2 --
+string(42) "e8aa9ee38386e382ade382b9e38388e381a7e38199"
+Done
\ No newline at end of file
diff --git a/ext/iconv/tests/iconv_substr_error1.phpt b/ext/iconv/tests/iconv_substr_error1.phpt
new file mode 100644
index 0000000..7a30c7d
--- /dev/null
+++ b/ext/iconv/tests/iconv_substr_error1.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test iconv_substr() function : error conditions - Pass incorrect number of args
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_substr') or die("skip iconv_substr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv_substr(string str, int offset, [int length, string charset])
+ * Description: Returns part of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass incorrect number of arguments to iconv_substr() to test behaviour
+ */
+
+echo "*** Testing iconv_substr() : error conditions ***\n";
+
+//Test iconv_substr with one more than the expected number of arguments
+echo "\n-- Testing iconv_substr() function with more than expected no. of arguments --\n";
+$str = 'string_val';
+$start = 10;
+$length = 10;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( iconv_substr($str, $start, $length, $encoding, $extra_arg) );
+
+// Testing iconv_substr with one less than the expected number of arguments
+echo "\n-- Testing iconv_substr() function with less than expected no. of arguments --\n";
+$str = 'string_val';
+var_dump( iconv_substr($str) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_substr() : error conditions ***
+
+-- Testing iconv_substr() function with more than expected no. of arguments --
+
+Warning: iconv_substr() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing iconv_substr() function with less than expected no. of arguments --
+
+Warning: iconv_substr() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+Done
+
diff --git a/ext/iconv/tests/iconv_substr_error2.phpt b/ext/iconv/tests/iconv_substr_error2.phpt
new file mode 100644
index 0000000..ac50813
--- /dev/null
+++ b/ext/iconv/tests/iconv_substr_error2.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test iconv_substr() function : error conditions - Pass an unknown encoding
+--SKIPIF--
+<?php
+extension_loaded('iconv') or die('skip');
+function_exists('iconv_substr') or die("skip iconv_substr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype  : string iconv_substr(string str, int offset, [int length, string charset])
+ * Description: Returns part of a string 
+ * Source code: ext/iconv/iconv.c
+ */
+
+/*
+ * Pass an unknown encoding to iconv_substr() to test behaviour
+ */
+
+echo "*** Testing iconv_substr() : error conditions ***\n";
+
+$str = 'Hello, world';
+$start = 1;
+$length = 5;
+$encoding = 'unknown-encoding';
+
+var_dump( iconv_substr($str, $start, $length, $encoding));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing iconv_substr() : error conditions ***
+
+Notice: iconv_substr(): Wrong charset, conversion from `unknown-encoding' to `UCS-4LE' is not allowed in %s on line %d
+bool(false)
+Done
+
diff --git a/ext/imap/config.w32 b/ext/imap/config.w32
index d567bc3..92a2218 100644
--- a/ext/imap/config.w32
+++ b/ext/imap/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32,v 1.4.4.2 2008/12/01 00:03:03 pajoye Exp $
+// $Id: config.w32,v 1.4.4.4 2009/05/05 13:49:05 pajoye Exp $
 // vim:ft=javascript
 
 ARG_WITH("imap", "IMAP Support", "no");
@@ -16,6 +16,7 @@ if (PHP_IMAP == "yes") {
 		ADD_FLAG("CFLAGS_IMAP", "/D HAVE_IMAP2000=1 /D HAVE_IMAP2004=1 /D HAVE_IMAP_SSL=1");
 		AC_DEFINE('HAVE_IMAP', 1, 'Have IMAP support', true);
 		AC_DEFINE('HAVE_RFC822_OUTPUT_ADDRESS_LIST', 1, 'Have rfc822_output_address_list', true);
+		AC_DEFINE('HAVE_NEW_MIME2TEXT', 1, 'Have utf8_mime2text', true);
 	} else {
 		WARNING("imap not enabled; libraries and headers not found");
 	}
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index e58e997..718ce20 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -26,7 +26,7 @@
    | PHP 4.0 updates:  Zeev Suraski <zeev at zend.com>                       |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_imap.c,v 1.208.2.7.2.43 2008/12/31 11:17:38 sebastian Exp $ */
+/* $Id: php_imap.c,v 1.208.2.7.2.51 2009/04/30 18:55:44 pajoye Exp $ */
 
 #define IMAP41
 
@@ -241,7 +241,7 @@ static void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 static int add_assoc_object(zval *arg, char *key, zval *tmp TSRMLS_DC)
 {
 	HashTable *symtable;
-	
+
 	if (Z_TYPE_P(arg) == IS_OBJECT) {
 		symtable = Z_OBJPROP_P(arg);
 	} else {
@@ -256,14 +256,14 @@ static int add_assoc_object(zval *arg, char *key, zval *tmp TSRMLS_DC)
 static inline int add_next_index_object(zval *arg, zval *tmp TSRMLS_DC)
 {
 	HashTable *symtable;
-	
+
 	if (Z_TYPE_P(arg) == IS_OBJECT) {
 		symtable = Z_OBJPROP_P(arg);
 	} else {
 		symtable = Z_ARRVAL_P(arg);
 	}
 
-	return zend_hash_next_index_insert(symtable, (void *) &tmp, sizeof(zval *), NULL); 
+	return zend_hash_next_index_insert(symtable, (void *) &tmp, sizeof(zval *), NULL);
 }
 /* }}} */
 
@@ -275,7 +275,7 @@ static inline int add_next_index_object(zval *arg, zval *tmp TSRMLS_DC)
  */
 FOBJECTLIST *mail_newfolderobjectlist(void)
 {
-  return (FOBJECTLIST *) memset(fs_get(sizeof(FOBJECTLIST)), 0, sizeof(FOBJECTLIST));
+	return (FOBJECTLIST *) memset(fs_get(sizeof(FOBJECTLIST)), 0, sizeof(FOBJECTLIST));
 }
 /* }}} */
 
@@ -334,7 +334,7 @@ void mail_free_errorlist(ERRORLIST **errlist)
 /* }}} */
 
 /* {{{ mail_newmessagelist
- * 
+ *
  * Mail instantiate MESSAGELIST
  * Returns: new MESSAGELIST list
  * Author: CJH
@@ -365,8 +365,8 @@ void mail_free_messagelist(MESSAGELIST **msglist, MESSAGELIST **tail)
 }
 /* }}} */
 
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) 
-/* {{{ mail_getquota 
+#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
+/* {{{ mail_getquota
  *
  * Mail GET_QUOTA callback
  * Called via the mail_parameter function in c-client:src/c-client/mail.c
@@ -377,7 +377,7 @@ void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist)
 {
 	zval *t_map, *return_value;
 	TSRMLS_FETCH();
-	
+
 	return_value = *IMAPG(quota_return);
 
 /* put parsing code here */
@@ -472,7 +472,7 @@ PHP_MINIT_FUNCTION(imap)
 
 #ifndef PHP_WIN32
 	auth_link(&auth_log);		/* link in the log authenticator */
-	auth_link(&auth_md5);       /* link in the cram-md5 authenticator */ 
+	auth_link(&auth_md5);       /* link in the cram-md5 authenticator */
 #if HAVE_IMAP_KRB && defined(HAVE_IMAP_AUTH_GSS)
 	auth_link(&auth_gss);		/* link in the gss authenticator */
 #endif
@@ -487,7 +487,7 @@ PHP_MINIT_FUNCTION(imap)
 	REGISTER_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);
 
 	/* plug in our gets */
-	mail_parameters(NIL, SET_GETS, (void *) php_mail_gets);
+	mail_parameters(NIL, SET_GETS, (void *) NIL);
 
 	/* set default timeout values */
 	mail_parameters(NIL, SET_OPENTIMEOUT, (void *) FG(default_socket_timeout));
@@ -522,13 +522,13 @@ PHP_MINIT_FUNCTION(imap)
 	REGISTER_LONG_CONSTANT("OP_SECURE", OP_SECURE, CONST_PERSISTENT | CONST_CS);
 	/* don't do non-secure authentication */
 
-	/* 
+	/*
 	PHP re-assigns CL_EXPUNGE a custom value that can be used as part of the imap_open() bitfield
-	because it seems like a good idea to be able to indicate that the mailbox should be 
+	because it seems like a good idea to be able to indicate that the mailbox should be
 	automatically expunged during imap_open in case the script get interrupted and it doesn't get
 	to the imap_close() where this option is normally placed.  If the c-client library adds other
-	options and the value for this one conflicts, simply make PHP_EXPUNGE higher at the top of 
-	this file 
+	options and the value for this one conflicts, simply make PHP_EXPUNGE higher at the top of
+	this file
 	*/
 	REGISTER_LONG_CONSTANT("CL_EXPUNGE", PHP_EXPUNGE, CONST_PERSISTENT | CONST_CS);
 	/* expunge silently */
@@ -719,8 +719,17 @@ PHP_RSHUTDOWN_FUNCTION(imap)
 }
 /* }}} */
 
+
 #if !defined(CCLIENTVERSION)
-#if HAVE_IMAP2004
+#if HAVE_IMAP2007e
+#define CCLIENTVERSION "2007e"
+#elif HAVE_IMAP2007d
+#define CCLIENTVERSION "2007d"
+#elif HAVE_IMAP2007b
+#define CCLIENTVERSION "2007b"
+#elif HAVE_IMAP2007a
+#define CCLIENTVERSION "2007a"
+#elif HAVE_IMAP2004
 #define CCLIENTVERSION "2004"
 #elif HAVE_IMAP2001
 #define CCLIENTVERSION "2001"
@@ -759,7 +768,7 @@ static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 	long flags=NIL;
 	long cl_flags=NIL;
 	int myargc = ZEND_NUM_ARGS();
-	
+
 	if (myargc < 3 || myargc > 5 || zend_get_parameters_ex(myargc, &mailbox, &user, &passwd, &options, &retries) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
@@ -776,17 +785,17 @@ static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 		}
 	}
 
-	if (IMAPG(imap_user)) { 
+	if (IMAPG(imap_user)) {
 		efree(IMAPG(imap_user));
 	}
 
-	if (IMAPG(imap_password)) { 
+	if (IMAPG(imap_password)) {
 		efree(IMAPG(imap_password));
 	}
 
 	/* local filename, need to perform open_basedir and safe_mode checks */
-	if (Z_STRVAL_PP(mailbox)[0] != '{' && 
-			(php_check_open_basedir(Z_STRVAL_PP(mailbox) TSRMLS_CC) || 
+	if (Z_STRVAL_PP(mailbox)[0] != '{' &&
+			(php_check_open_basedir(Z_STRVAL_PP(mailbox) TSRMLS_CC) ||
 			(PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(mailbox), NULL, CHECKUID_CHECK_FILE_AND_DIR)))) {
 		RETURN_FALSE;
 	}
@@ -816,7 +825,7 @@ static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 
 	imap_le_struct = emalloc(sizeof(pils));
 	imap_le_struct->imap_stream = imap_stream;
-	imap_le_struct->flags = cl_flags;	
+	imap_le_struct->flags = cl_flags;
 
 	ZEND_REGISTER_RESOURCE(return_value, imap_le_struct, le_imap);
 }
@@ -835,7 +844,7 @@ PHP_FUNCTION(imap_open)
 PHP_FUNCTION(imap_reopen)
 {
 	zval **streamind, **mailbox, **options, **retries;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	MAILSTREAM *imap_stream;
 	long flags=NIL;
 	long cl_flags=NIL;
@@ -856,7 +865,7 @@ PHP_FUNCTION(imap_reopen)
 			cl_flags = CL_EXPUNGE;
 			flags ^= PHP_EXPUNGE;
 		}
-		imap_le_struct->flags = cl_flags;	
+		imap_le_struct->flags = cl_flags;
 	}
 #ifdef SET_MAXLOGINTRIALS
 	if (myargc == 4) {
@@ -865,8 +874,8 @@ PHP_FUNCTION(imap_reopen)
 	}
 #endif
 	/* local filename, need to perform open_basedir and safe_mode checks */
-	if (Z_STRVAL_PP(mailbox)[0] != '{' && 
-			(php_check_open_basedir(Z_STRVAL_PP(mailbox) TSRMLS_CC) || 
+	if (Z_STRVAL_PP(mailbox)[0] != '{' &&
+			(php_check_open_basedir(Z_STRVAL_PP(mailbox) TSRMLS_CC) ||
 			(PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(mailbox), NULL, CHECKUID_CHECK_FILE_AND_DIR)))) {
 		RETURN_FALSE;
 	}
@@ -886,14 +895,14 @@ PHP_FUNCTION(imap_reopen)
 PHP_FUNCTION(imap_append)
 {
 	zval **streamind, **folder, **message, **flags;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	STRING st;
 	int myargc=ZEND_NUM_ARGS();
-  
+
 	if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &folder, &message, &flags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-  
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_string_ex(folder);
@@ -918,7 +927,7 @@ PHP_FUNCTION(imap_append)
 PHP_FUNCTION(imap_num_msg)
 {
 	zval **streamind;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -935,7 +944,7 @@ PHP_FUNCTION(imap_num_msg)
 PHP_FUNCTION(imap_ping)
 {
 	zval **streamind;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -1042,7 +1051,7 @@ PHP_FUNCTION(imap_set_quota)
 	limits.text.size = Z_LVAL_PP(mailbox_size);
 	limits.next = NIL;
 
-	RETURN_BOOL(imap_setquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot), &limits)); 
+	RETURN_BOOL(imap_setquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot), &limits));
 }
 /* }}} */
 
@@ -1052,7 +1061,7 @@ PHP_FUNCTION(imap_setacl)
 {
 	zval **streamind, **mailbox, **id, **rights;
 	pils *imap_le_struct;
-	
+
 	if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &streamind, &mailbox, &id, &rights) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
@@ -1108,7 +1117,7 @@ PHP_FUNCTION(imap_getacl)
 PHP_FUNCTION(imap_expunge)
 {
 	zval **streamind;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -1127,7 +1136,7 @@ PHP_FUNCTION(imap_expunge)
 PHP_FUNCTION(imap_close)
 {
 	zval **options, **streamind=NULL;
-	pils *imap_le_struct=NULL; 
+	pils *imap_le_struct=NULL;
 	long flags = NIL;
 	int myargcount=ZEND_NUM_ARGS();
 
@@ -1141,17 +1150,17 @@ PHP_FUNCTION(imap_close)
 		convert_to_long_ex(options);
 		flags = Z_LVAL_PP(options);
 
-                /* Check that flags is exactly equal to PHP_EXPUNGE or Zero*/
-                if (flags && ((flags & ~PHP_EXPUNGE) != 0)) {
-                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the flags parameter");
-                         RETURN_FALSE;
-                }
+		/* Check that flags is exactly equal to PHP_EXPUNGE or Zero*/
+		if (flags && ((flags & ~PHP_EXPUNGE) != 0)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the flags parameter");
+			RETURN_FALSE;
+		}
 
 		/* Do the translation from PHP's internal PHP_EXPUNGE define to c-client's CL_EXPUNGE */
 		if (flags & PHP_EXPUNGE) {
 			flags ^= PHP_EXPUNGE;
 			flags |= CL_EXPUNGE;
-		}	
+		}
 		imap_le_struct->flags = flags;
 	}
 
@@ -1166,21 +1175,21 @@ PHP_FUNCTION(imap_close)
 PHP_FUNCTION(imap_headers)
 {
 	zval **streamind;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	unsigned long i;
 	char *t;
 	unsigned int msgno;
 	char tmp[MAILTMPLEN];
-	
+
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	/* Initialize return array */
 	array_init(return_value);
-	
+
 	for (msgno = 1; msgno <= imap_le_struct->imap_stream->nmsgs; msgno++) {
 		MESSAGECACHE * cache = mail_elt (imap_le_struct->imap_stream, msgno);
 		mail_fetchstructure(imap_le_struct->imap_stream, msgno, NIL);
@@ -1216,9 +1225,11 @@ PHP_FUNCTION(imap_headers)
 PHP_FUNCTION(imap_body)
 {
 	zval **streamind, **msgno, **pflags;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	int msgindex, myargc=ZEND_NUM_ARGS();
 	long flags=0L;
+	char *body;
+	unsigned long body_len = 0;
 
 	if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &pflags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -1226,15 +1237,15 @@ PHP_FUNCTION(imap_body)
 
 
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-	
+
 	convert_to_long_ex(msgno);
 	if (myargc == 3) {
 		convert_to_long_ex(pflags);
 		flags = Z_LVAL_PP(pflags);
-	        if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
-       	        	php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
-       	       		RETURN_FALSE;
-       		}
+		if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+			RETURN_FALSE;
+		}
 	}
 
 	if ((myargc == 3) && (flags & FT_UID)) {
@@ -1249,8 +1260,12 @@ PHP_FUNCTION(imap_body)
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad message number");
 		RETURN_FALSE;
 	}
-
-	RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL), 1);
+	body = mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), &body_len, (myargc==3 ? Z_LVAL_PP(pflags) : NIL));
+	if (body_len == 0) {
+		RETVAL_EMPTY_STRING();
+	} else {
+		RETVAL_STRINGL(body, body_len, 1);
+	}
 }
 /* }}} */
 
@@ -1259,7 +1274,7 @@ PHP_FUNCTION(imap_body)
 PHP_FUNCTION(imap_mail_copy)
 {
 	zval **streamind, **seq, **folder, **options;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	int myargcount = ZEND_NUM_ARGS();
 
 	if (myargcount > 4 || myargcount < 3 || zend_get_parameters_ex(myargcount, &streamind, &seq, &folder, &options) == FAILURE) {
@@ -1287,7 +1302,7 @@ PHP_FUNCTION(imap_mail_copy)
 PHP_FUNCTION(imap_mail_move)
 {
 	zval **streamind, **seq, **folder, **options;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	int myargcount = ZEND_NUM_ARGS();
 
 	if (myargcount > 4 || myargcount < 3 || zend_get_parameters_ex(myargcount, &streamind, &seq, &folder, &options) == FAILURE) {
@@ -1315,7 +1330,7 @@ PHP_FUNCTION(imap_mail_move)
 PHP_FUNCTION(imap_createmailbox)
 {
 	zval **streamind, **folder;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 
 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -1338,7 +1353,7 @@ PHP_FUNCTION(imap_createmailbox)
 PHP_FUNCTION(imap_renamemailbox)
 {
 	zval **streamind, **old_mailbox, **new_mailbox;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &old_mailbox, &new_mailbox) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -1362,7 +1377,7 @@ PHP_FUNCTION(imap_renamemailbox)
 PHP_FUNCTION(imap_deletemailbox)
 {
 	zval **streamind, **folder;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 
 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -1385,7 +1400,7 @@ PHP_FUNCTION(imap_deletemailbox)
 PHP_FUNCTION(imap_list)
 {
 	zval **streamind, **ref, **pat;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	STRINGLIST *cur=NIL;
 
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
@@ -1399,7 +1414,7 @@ PHP_FUNCTION(imap_list)
 
 	/* set flag for normal, old mailbox list */
 	IMAPG(folderlist_style) = FLIST_ARRAY;
-	
+
 	IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
 	mail_list(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
 	if (IMAPG(imap_folders) == NIL) {
@@ -1424,14 +1439,14 @@ PHP_FUNCTION(imap_list)
 PHP_FUNCTION(imap_list_full)
 {
 	zval **streamind, **ref, **pat, *mboxob;
-	pils *imap_le_struct; 
+	pils *imap_le_struct;
 	FOBJECTLIST *cur=NIL;
 	char *delim=NIL;
-	
+
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_string_ex(ref);
@@ -1439,13 +1454,13 @@ PHP_FUNCTION(imap_list_full)
 
 	/* set flag for new, improved array of objects mailbox list */
 	IMAPG(folderlist_style) = FLIST_OBJECT;
-	
+
 	IMAPG(imap_folder_objects) = IMAPG(imap_folder_objects_tail) = NIL;
 	mail_list(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
 	if (IMAPG(imap_folder_objects) == NIL) {
 		RETURN_FALSE;
 	}
-	
+
 	array_init(return_value);
 	delim = safe_emalloc(2, sizeof(char), 0);
 	cur=IMAPG(imap_folder_objects);
@@ -1545,18 +1560,18 @@ PHP_FUNCTION(imap_delete)
 	zval **streamind, **sequence, **flags;
 	pils *imap_le_struct;
 	int myargc=ZEND_NUM_ARGS();
-	
+
 	if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_string_ex(sequence);
 	if (myargc == 3) {
 		convert_to_long_ex(flags);
 	}
-	
+
 	mail_setflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), "\\DELETED", myargc==3 ? Z_LVAL_PP(flags) : NIL);
 	RETVAL_TRUE;
 }
@@ -1573,9 +1588,9 @@ PHP_FUNCTION(imap_undelete)
 	if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-	
+
 	convert_to_string_ex(sequence);
 	if (myargc == 3) {
 		convert_to_long_ex(flags);
@@ -1596,11 +1611,11 @@ PHP_FUNCTION(imap_headerinfo)
 	ENVELOPE *en;
 	char dummy[2000], fulladdress[MAILTMPLEN + 1];
 	int myargc = ZEND_NUM_ARGS();
-	
+
 	if (myargc < 2 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &msgno, &fromlength, &subjectlength, &defaulthost) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_long_ex(msgno);
@@ -1625,7 +1640,7 @@ PHP_FUNCTION(imap_headerinfo)
 	if (myargc == 5) {
 		convert_to_string_ex(defaulthost);
 	}
-	
+
 	PHP_IMAP_CHECK_MSGNO(Z_LVAL_PP(msgno));
 
 	if (mail_fetchstructure(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL)) {
@@ -1633,13 +1648,13 @@ PHP_FUNCTION(imap_headerinfo)
 	} else {
 		RETURN_FALSE;
 	}
-	
+
 	en = mail_fetchenvelope(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
 
 	/* call a function to parse all the text, so that we can use the
 	   same function to parse text from other sources */
 	_php_make_header_object(return_value, en TSRMLS_CC);
-	
+
 	/* now run through properties that are only going to be returned
 	   from a server, not text headers */
 	add_property_string(return_value, "Recent", cache->recent ? (cache->seen ? "R": "N") : " ", 1);
@@ -1648,18 +1663,18 @@ PHP_FUNCTION(imap_headerinfo)
 	add_property_string(return_value, "Answered", cache->answered ? "A" : " ", 1);
 	add_property_string(return_value, "Deleted", cache->deleted ? "D" : " ", 1);
 	add_property_string(return_value, "Draft", cache->draft ? "X" : " ", 1);
-	
+
 	snprintf(dummy, sizeof(dummy), "%4ld", cache->msgno);
 	add_property_string(return_value, "Msgno", dummy, 1);
-	
+
 	mail_date(dummy, cache);
 	add_property_string(return_value, "MailDate", dummy, 1);
-	
-	snprintf(dummy, sizeof(dummy), "%ld", cache->rfc822_size); 
+
+	snprintf(dummy, sizeof(dummy), "%ld", cache->rfc822_size);
 	add_property_string(return_value, "Size", dummy, 1);
-	
+
 	add_property_long(return_value, "udate", mail_longdate(cache));
-	
+
 	if (en->from && fromlength) {
 		fulladdress[0] = 0x00;
 		mail_fetchfrom(fulladdress, imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_LVAL_PP(fromlength));
@@ -1684,18 +1699,18 @@ PHP_FUNCTION(imap_rfc822_parse_headers)
 	if (myargc < 1 || myargc > 2 || zend_get_parameters_ex(myargc, &headers, &defaulthost) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	convert_to_string_ex(headers);
 	if (myargc == 2) {
 		convert_to_string_ex(defaulthost);
 	}
-	
+
 	if (myargc == 2) {
 		rfc822_parse_msg(&en, NULL, Z_STRVAL_PP(headers), Z_STRLEN_PP(headers), NULL, Z_STRVAL_PP(defaulthost), NIL);
 	} else {
 		rfc822_parse_msg(&en, NULL, Z_STRVAL_PP(headers), Z_STRLEN_PP(headers), NULL, "UNKNOWN", NIL);
 	}
-	
+
 	/* call a function to parse all the text, so that we can use the
 	   same function no matter where the headers are from */
 	_php_make_header_object(return_value, en TSRMLS_CC);
@@ -1712,19 +1727,19 @@ PHP_FUNCTION(imap_lsub)
 	zval **streamind, **ref, **pat;
 	pils *imap_le_struct;
 	STRINGLIST *cur=NIL;
-	
+
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-	
+
 	convert_to_string_ex(ref);
 	convert_to_string_ex(pat);
 
 	/* set flag for normal, old mailbox list */
 	IMAPG(folderlist_style) = FLIST_ARRAY;
-	
+
 	IMAPG(imap_sfolders) = NIL;
 	mail_lsub(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
 	if (IMAPG(imap_sfolders) == NIL) {
@@ -1751,11 +1766,11 @@ PHP_FUNCTION(imap_lsub_full)
 	pils *imap_le_struct;
 	FOBJECTLIST *cur=NIL;
 	char *delim=NIL;
-	
+
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_string_ex(ref);
@@ -1763,13 +1778,13 @@ PHP_FUNCTION(imap_lsub_full)
 
 	/* set flag for new, improved array of objects list */
 	IMAPG(folderlist_style) = FLIST_OBJECT;
-	
+
 	IMAPG(imap_sfolder_objects) = IMAPG(imap_sfolder_objects_tail) = NIL;
 	mail_lsub(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
 	if (IMAPG(imap_sfolder_objects) == NIL) {
 		RETURN_FALSE;
 	}
-	
+
 	array_init(return_value);
 	delim = safe_emalloc(2, sizeof(char), 0);
 	cur=IMAPG(imap_sfolder_objects);
@@ -1804,7 +1819,7 @@ PHP_FUNCTION(imap_subscribe)
 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_string_ex(folder);
@@ -1854,7 +1869,7 @@ PHP_FUNCTION(imap_fetchstructure)
 		ZEND_WRONG_PARAM_COUNT();
 	}
 
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
 
 	convert_to_long_ex(msgno);
@@ -1865,10 +1880,10 @@ PHP_FUNCTION(imap_fetchstructure)
 		convert_to_long_ex(pflags);
 		flags = Z_LVAL_PP(pflags);
 
-	        if (flags && ((flags & ~FT_UID) != 0)) {
-       	        	php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
-       	        	RETURN_FALSE;
-       		}
+		if (flags && ((flags & ~FT_UID) != 0)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+			RETURN_FALSE;
+		}
 	}
 
 	object_init(return_value);
@@ -1884,12 +1899,12 @@ PHP_FUNCTION(imap_fetchstructure)
 	PHP_IMAP_CHECK_MSGNO(msgindex);
 
 	mail_fetchstructure_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), &body , myargc == 3 ? Z_LVAL_PP(pflags) : NIL);
-	
+
 	if (!body) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body information available");
 		RETURN_FALSE;
 	}
-	
+
 	_php_imap_add_body(return_value, body TSRMLS_CC);
 }
 /* }}} */
@@ -1901,7 +1916,7 @@ PHP_FUNCTION(imap_fetchbody)
 	zval **streamind, **msgno, **sec, **pflags;
 	pils *imap_le_struct;
 	char *body;
-        long flags=0L;
+	long flags=0L;
 	unsigned long len;
 	int myargc=ZEND_NUM_ARGS();
 
@@ -1917,10 +1932,10 @@ PHP_FUNCTION(imap_fetchbody)
 	if (myargc == 4) {
 		convert_to_long_ex(pflags);
 		flags = Z_LVAL_PP(pflags);
- 		if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
-       	        	php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
-                	RETURN_FALSE;
-       		 }
+		if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+			RETURN_FALSE;
+		}
 	}
 
 	if (myargc < 4 || !(flags & FT_UID)) {
@@ -1949,17 +1964,17 @@ PHP_FUNCTION(imap_savebody)
 	char *section = "";
 	int section_len = 0, close_stream = 1;
 	long msgno, flags = 0;
-	
+
 	if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rZl|sl", &stream, &out, &msgno, &section, &section_len, &flags)) {
 		RETURN_FALSE;
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_ptr, pils *, &stream, -1, "imap", le_imap);
-	
+
 	if (!imap_ptr) {
 		RETURN_FALSE;
 	}
-	
+
 	switch (Z_TYPE_PP(out))
 	{
 		case IS_LONG:
@@ -1973,19 +1988,21 @@ PHP_FUNCTION(imap_savebody)
 			writer = php_stream_open_wrapper(Z_STRVAL_PP(out), "wb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
 		break;
 	}
-	
+
 	if (!writer) {
 		RETURN_FALSE;
 	}
-	
+
 	IMAPG(gets_stream) = writer;
+	mail_parameters(NIL, SET_GETS, (void *) php_mail_gets);
 	mail_fetchbody_full(imap_ptr->imap_stream, msgno, section, NULL, flags);
+	mail_parameters(NIL, SET_GETS, (void *) NIL);
 	IMAPG(gets_stream) = NULL;
-	
+
 	if (close_stream) {
 		php_stream_close(writer);
 	}
-	
+
 	RETURN_TRUE;
 }
 /* }}} */
@@ -2225,7 +2242,7 @@ PHP_FUNCTION(imap_rfc822_parse_adrlist)
 		}
 		add_next_index_object(return_value, tovals TSRMLS_CC);
 	} while ((addresstmp = addresstmp->next));
-	
+
 	mail_free_envelope(&env);
 }
 /* }}} */
@@ -2236,13 +2253,13 @@ PHP_FUNCTION(imap_utf8)
 {
 	zval **str;
 	SIZEDTEXT src, dest;
-	
+
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
 
 	convert_to_string_ex(str);
-	
+
 	src.data  = NULL;
 	src.size  = 0;
 	dest.data = NULL;
@@ -2266,9 +2283,9 @@ PHP_FUNCTION(imap_utf8)
 /* }}} */
 
 
-/* {{{ macros for the modified utf7 conversion functions 
+/* {{{ macros for the modified utf7 conversion functions
  *
- * author: Andrew Skalski <askalski at chek.com> 
+ * author: Andrew Skalski <askalski at chek.com>
  */
 
 /* tests `c' and returns true if it is a special character */
@@ -2307,14 +2324,14 @@ PHP_FUNCTION(imap_utf7_decode)
 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	convert_to_string_ex(arg);		/*	Is this string really modified?
 										If it is use and you don't want it to be seen outside of the function
 										then use zend_get_parameters() */
 
 	in = (const unsigned char *) Z_STRVAL_PP(arg);
 	inlen = Z_STRLEN_PP(arg);
-	
+
 	/* validate and compute length of output string */
 	outlen = 0;
 	state = ST_NORMAL;
@@ -2614,7 +2631,7 @@ PHP_FUNCTION(imap_sort)
 	SORTPGM *mypgm=NIL;
 	SEARCHPGM *spg=NIL;
 	int myargc = ZEND_NUM_ARGS();
-	
+
 	if (myargc < 3 || myargc > 6 || zend_get_parameters_ex(myargc, &streamind, &pgm, &rev, &flags, &criteria, &charset) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
@@ -2645,12 +2662,12 @@ PHP_FUNCTION(imap_sort)
 	} else {
 		spg = mail_newsearchpgm();
 	}
-	
+
 	mypgm = mail_newsortpgm();
 	mypgm->reverse = Z_LVAL_PP(rev);
 	mypgm->function = (short) Z_LVAL_PP(pgm);
 	mypgm->next = NIL;
-	
+
 	slst = mail_sort(imap_le_struct->imap_stream, (myargc == 6 ? Z_STRVAL_PP(charset) : NIL), spg, mypgm, (myargc >= 4 ? Z_LVAL_PP(flags) : NIL));
 
 	if (spg) {
@@ -2659,7 +2676,7 @@ PHP_FUNCTION(imap_sort)
 
 	array_init(return_value);
 	if (slst != NIL && slst != 0) {
-		for (sl = slst; *sl; sl++) { 
+		for (sl = slst; *sl; sl++) {
 			add_next_index_long(return_value, *sl);
 		}
 		fs_give ((void **) &slst);
@@ -2674,8 +2691,8 @@ PHP_FUNCTION(imap_fetchheader)
 	zval **streamind, **msgno, **pflags;
 	pils *imap_le_struct;
 	int msgindex, myargc = ZEND_NUM_ARGS();
-        long flags=0L;
-	
+	long flags=0L;
+
 	if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &pflags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
@@ -2685,14 +2702,14 @@ PHP_FUNCTION(imap_fetchheader)
 	convert_to_long_ex(msgno);
 	if (myargc == 3) {
 		convert_to_long_ex(pflags);
-                flags =  Z_LVAL_PP(pflags);
-	        if (flags && ((flags & ~(FT_UID|FT_INTERNAL|FT_PREFETCHTEXT)) != 0)) {
-       	        	php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
-       	        	RETURN_FALSE;
+		flags =  Z_LVAL_PP(pflags);
+		if (flags && ((flags & ~(FT_UID|FT_INTERNAL|FT_PREFETCHTEXT)) != 0)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+			RETURN_FALSE;
 		}
-        }
+	}
+
 
-	
 	if ((myargc == 3) && (flags & FT_UID)) {
 		/* This should be cached; if it causes an extra RTT to the
 		   IMAP server, then that's the price we pay for making sure
@@ -2715,15 +2732,15 @@ PHP_FUNCTION(imap_uid)
  	zval **streamind, **msgno;
 	pils *imap_le_struct;
  	int msgindex;
- 
+
  	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &msgno) == FAILURE) {
  		ZEND_WRONG_PARAM_COUNT();
  	}
 
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
- 	
+
  	convert_to_long_ex(msgno);
- 
+
 	msgindex = Z_LVAL_PP(msgno);
 	if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad message number");
@@ -2740,15 +2757,15 @@ PHP_FUNCTION(imap_msgno)
 {
  	zval **streamind, **msgno;
 	pils *imap_le_struct;
-	 
+
  	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &msgno) == FAILURE) {
  		ZEND_WRONG_PARAM_COUNT();
  	}
 
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
- 	
+
  	convert_to_long_ex(msgno);
- 
+
  	RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno)));
 }
 /* }}} */
@@ -2807,9 +2824,9 @@ PHP_FUNCTION(imap_bodystruct)
 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &msg, &section) == FAILURE) {
  		ZEND_WRONG_PARAM_COUNT();
  	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
- 	
+
  	convert_to_long_ex(msg);
 	convert_to_string_ex(section);
 
@@ -2819,7 +2836,7 @@ PHP_FUNCTION(imap_bodystruct)
 	}
 
 	object_init(return_value);
-	
+
 	body=mail_body(imap_le_struct->imap_stream, Z_LVAL_PP(msg), Z_STRVAL_PP(section));
 	if (body == NULL) {
 		zval_dtor(return_value);
@@ -2831,14 +2848,14 @@ PHP_FUNCTION(imap_bodystruct)
 	if (body->encoding <= ENCMAX) {
 		add_property_long(return_value, "encoding", body->encoding);
 	}
-	
+
 	if (body->subtype) {
 		add_property_long(return_value, "ifsubtype", 1);
 		add_property_string(return_value, "subtype",  body->subtype, 1);
 	} else {
 		add_property_long(return_value, "ifsubtype", 0);
 	}
-	
+
 	if (body->description) {
 		add_property_long(return_value, "ifdescription", 1);
 		add_property_string(return_value, "description",  body->description, 1);
@@ -2852,7 +2869,7 @@ PHP_FUNCTION(imap_bodystruct)
 		add_property_long(return_value, "ifid", 0);
 	}
 
-	
+
 	if (body->size.lines) {
 		add_property_long(return_value, "lines", body->size.lines);
 	}
@@ -2866,7 +2883,7 @@ PHP_FUNCTION(imap_bodystruct)
 	} else {
 		add_property_long(return_value, "ifdisposition", 0);
 	}
-	
+
 	if (body->disposition.parameter) {
 		dpar = body->disposition.parameter;
 		add_property_long(return_value, "ifdparameters", 1);
@@ -2884,10 +2901,10 @@ PHP_FUNCTION(imap_bodystruct)
 		add_property_long(return_value, "ifdparameters", 0);
 	}
 #endif
-	
+
 	if ((par = body->parameter)) {
 		add_property_long(return_value, "ifparameters", 1);
-		
+
 		MAKE_STD_ZVAL(parametres);
 		array_init(parametres);
 		do {
@@ -2899,7 +2916,7 @@ PHP_FUNCTION(imap_bodystruct)
 			if (par->value) {
 				add_property_string(param, "value", par->value, 1);
 			}
-			
+
 			add_next_index_object(parametres, param TSRMLS_CC);
 		} while ((par = par->next));
 	} else {
@@ -2913,7 +2930,7 @@ PHP_FUNCTION(imap_bodystruct)
 /* }}} */
 
 /* {{{ proto array imap_fetch_overview(resource stream_id, int msg_no [, int options])
-   Read an overview of the information in the headers of the given message sequence */ 
+   Read an overview of the information in the headers of the given message sequence */
 PHP_FUNCTION(imap_fetch_overview)
 {
  	zval **streamind, **sequence, **pflags;
@@ -2922,7 +2939,7 @@ PHP_FUNCTION(imap_fetch_overview)
 	char *address;
 	long status, flags=0L;
 	int myargc = ZEND_NUM_ARGS();
-	
+
 	if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &pflags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
@@ -2934,23 +2951,23 @@ PHP_FUNCTION(imap_fetch_overview)
 	if(myargc == 3) {
 		convert_to_long_ex(pflags);
 		flags = Z_LVAL_PP(pflags);
-                if (flags && ((flags & ~FT_UID) != 0)) {
+		if (flags && ((flags & ~FT_UID) != 0)) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
-		 	RETURN_FALSE;
-		} 
+			RETURN_FALSE;
+		}
 	}
 
 	array_init(return_value);
-	
-	status = (flags & FT_UID) 
+
+	status = (flags & FT_UID)
 		? mail_uid_sequence (imap_le_struct->imap_stream, Z_STRVAL_PP(sequence))
 		: mail_sequence (imap_le_struct->imap_stream, Z_STRVAL_PP(sequence));
-	
-	if (status) {  
+
+	if (status) {
 		MESSAGECACHE *elt;
 		ENVELOPE *env;
 		unsigned long i;
-		
+
 		for (i = 1; i <= imap_le_struct->imap_stream->nmsgs; i++) {
 			if (((elt = mail_elt (imap_le_struct->imap_stream, i))->sequence) &&
 				(env = mail_fetch_structure (imap_le_struct->imap_stream, i, NIL, NIL))) {
@@ -3222,7 +3239,7 @@ PHP_FUNCTION(imap_mail_compose)
 
 			if (type != TYPEMULTIPART) {
 				bod->type = type;
-			}			
+			}
 
 			if (zend_hash_find(Z_ARRVAL_PP(data), "encoding", sizeof("encoding"), (void **) &pvalue)== SUCCESS) {
 				convert_to_long_ex(pvalue);
@@ -3256,7 +3273,7 @@ PHP_FUNCTION(imap_mail_compose)
 			}
 			if (zend_hash_find(Z_ARRVAL_PP(data), "subtype", sizeof("subtype"), (void **) &pvalue)== SUCCESS) {
 				convert_to_string_ex(pvalue);
-				bod->subtype = cpystr(Z_STRVAL_PP(pvalue));	
+				bod->subtype = cpystr(Z_STRVAL_PP(pvalue));
 			}
 			if (zend_hash_find(Z_ARRVAL_PP(data), "id", sizeof("id"), (void **) &pvalue)== SUCCESS) {
 				convert_to_string_ex(pvalue);
@@ -3335,7 +3352,7 @@ PHP_FUNCTION(imap_mail_compose)
 		tmp[l] = '\0';
 		tempstring = emalloc(l);
 		memcpy(tempstring, tmp, l);
-		
+
 		do {
 			l2 = strlen(custom_headers_param->value);
 			tempstring = erealloc(tempstring, l + l2 + CRLF_LEN + 1);
@@ -3344,7 +3361,7 @@ PHP_FUNCTION(imap_mail_compose)
 			l += l2 + CRLF_LEN;
 		} while ((custom_headers_param = custom_headers_param->next));
 
-		mail_free_body_parameter(&tp);		
+		mail_free_body_parameter(&tp);
 
 		mystring = emalloc(l + CRLF_LEN + 1);
 		memcpy(mystring, tempstring, l);
@@ -3358,10 +3375,10 @@ PHP_FUNCTION(imap_mail_compose)
 
 	bod = topbod;
 
-	if (bod && bod->type == TYPEMULTIPART) {	
+	if (bod && bod->type == TYPEMULTIPART) {
 
 		/* first body part */
-			part = bod->nested.part;	
+			part = bod->nested.part;
 
 		/* find cookie */
 			for (param = bod->parameter; param && !cookie; param = param->next) {
@@ -3372,17 +3389,17 @@ PHP_FUNCTION(imap_mail_compose)
 
 		/* yucky default */
 			if (!cookie) {
-				cookie = "-";  
+				cookie = "-";
 			} else if (strlen(cookie) > (SENDBUFLEN - 2 - 2 - 2)) {  /* validate cookie length -- + CRLF * 2 */
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "The boudary should be no longer then 4kb");
 				RETVAL_FALSE;
-				goto done;	
+				goto done;
 			}
 
 		/* for each part */
 			do {
 				t = tmp;
-			
+
 			/* append mini-header */
 				*t = '\0';
 				rfc822_write_body_header(&t, &part->body);
@@ -3632,7 +3649,7 @@ PHP_FUNCTION(imap_mail)
 		convert_to_string_ex(argv[3]);
 		headers = Z_STRVAL_PP(argv[3]);
 	}
-	
+
 	/* cc */
 	if (argc > 4) {
 		convert_to_string_ex(argv[4]);
@@ -3669,6 +3686,7 @@ PHP_FUNCTION(imap_search)
 	char *search_criteria;
 	MESSAGELIST *cur;
 	int argc = ZEND_NUM_ARGS();
+	SEARCHPGM *pgm = NIL;
 
 	if (argc < 2 || argc > 4 || zend_get_parameters_ex(argc, &streamind, &criteria, &search_flags, &charset) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
@@ -3678,7 +3696,7 @@ PHP_FUNCTION(imap_search)
 
 	convert_to_string_ex(criteria);
 	search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
-	
+
 	if (argc == 2) {
 		flags = SE_FREE;
 	} else {
@@ -3688,14 +3706,21 @@ PHP_FUNCTION(imap_search)
 			convert_to_string_ex(charset);
 		}
 	}
-	
+
+	pgm = mail_criteria(search_criteria);
 	IMAPG(imap_messages) = IMAPG(imap_messages_tail) = NIL;
-	mail_search_full(imap_le_struct->imap_stream, (argc == 4 ? Z_STRVAL_PP(charset) : NIL), mail_criteria(search_criteria), flags);
+
+	mail_search_full(imap_le_struct->imap_stream, (argc == 4 ? Z_STRVAL_PP(charset) : NIL), pgm, flags);
+
+	if (pgm) {
+		mail_free_searchpgm(&pgm);
+	}
+
 	if (IMAPG(imap_messages) == NIL) {
 		efree(search_criteria);
 		RETURN_FALSE;
 	}
-	
+
 	array_init(return_value);
 
 	cur = IMAPG(imap_messages);
@@ -3717,12 +3742,12 @@ PHP_FUNCTION(imap_alerts)
 
 	if (ZEND_NUM_ARGS() > 0) {
 		ZEND_WRONG_PARAM_COUNT();
-	} 
-  
+	}
+
 	if (IMAPG(imap_alertstack) == NIL) {
 		RETURN_FALSE;
 	}
-  
+
 	array_init(return_value);
 
 	cur = IMAPG(imap_alertstack);
@@ -3744,12 +3769,12 @@ PHP_FUNCTION(imap_errors)
 
 	if (ZEND_NUM_ARGS() > 0) {
 		ZEND_WRONG_PARAM_COUNT();
-	} 
-  
+	}
+
 	if (IMAPG(imap_errorstack) == NIL) {
 		RETURN_FALSE;
 	}
-  
+
 	array_init(return_value);
 
 	cur = IMAPG(imap_errorstack);
@@ -3762,7 +3787,7 @@ PHP_FUNCTION(imap_errors)
 }
 /* }}} */
 
-/* {{{ proto string imap_last_error(void) 
+/* {{{ proto string imap_last_error(void)
    Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call. */
 /* Author: CJH */
 PHP_FUNCTION(imap_last_error)
@@ -3771,12 +3796,12 @@ PHP_FUNCTION(imap_last_error)
 
 	if (ZEND_NUM_ARGS() > 0) {
 		ZEND_WRONG_PARAM_COUNT();
-	} 
-  
+	}
+
 	if (IMAPG(imap_errorstack) == NIL) {
 		RETURN_FALSE;
 	}
-  
+
 	cur = IMAPG(imap_errorstack);
 	while (cur != NIL) {
 		if (cur->next == NIL) {
@@ -3807,7 +3832,7 @@ PHP_FUNCTION(imap_mime_header_decode)
 
 	string = Z_STRVAL_PP(str);
 	end = Z_STRLEN_PP(str);
-			
+
 	charset = (char *) safe_emalloc((end + 1), 2, 0);
 	text = &charset[end + 1];
 	while (offset < end) {	/* Reached end of the string? */
@@ -3879,45 +3904,18 @@ PHP_FUNCTION(imap_mime_header_decode)
 		add_property_string(myobject, "charset", "default", 1);
 		add_property_string(myobject, "text", text, 1);
 		zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
-			
+
 		offset = end;	/* We have reached the end of the string. */
 	}
 	efree(charset);
 }
 /* }}} */
 
-/* {{{ _php_rfc822_len
- * Calculate string length based on imap's rfc822_cat function.
- */	
-static int _php_rfc822_len(char *str)
-{
-	int len;
-	char *p;
-
-	if (!str || !*str) {
-		return 0;
-	}
-
-	/* strings with special characters will need to be quoted, as a safety measure we
-	 * add 2 bytes for the quotes just in case.
-	 */
-	len = strlen(str) + 2;
-	p = str;
-	/* rfc822_cat() will escape all " and \ characters, therefor we need to increase
-	 * our buffer length to account for these characters.
-	 */
-	while ((p = strpbrk(p, "\\\""))) {
-		p++;
-		len++;
-	}
-
-	return len;
-}
-/* }}} */
 
 /* Support Functions */
 
 #ifdef HAVE_RFC822_OUTPUT_ADDRESS_LIST
+
 /* {{{ _php_rfc822_soutr
  */
 static long _php_rfc822_soutr (void *stream, char *string)
@@ -3925,7 +3923,7 @@ static long _php_rfc822_soutr (void *stream, char *string)
 	smart_str *ret = (smart_str*)stream;
 	int len = strlen(string);
 
-	smart_str_appendl(ret, string, len);	
+	smart_str_appendl(ret, string, len);
 	return LONGT;
 }
 
@@ -3953,6 +3951,36 @@ static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
 
 #else
 
+/* {{{ _php_rfc822_len
+ * Calculate string length based on imap's rfc822_cat function.
+ */
+static int _php_rfc822_len(char *str)
+{
+	int len;
+	char *p;
+
+	if (!str || !*str) {
+		return 0;
+	}
+
+	/* strings with special characters will need to be quoted, as a safety measure we
+	 * add 2 bytes for the quotes just in case.
+	 */
+	len = strlen(str) + 2;
+	p = str;
+	/* rfc822_cat() will escape all " and \ characters, therefor we need to increase
+	 * our buffer length to account for these characters.
+	 */
+	while ((p = strpbrk(p, "\\\""))) {
+		p++;
+		len++;
+	}
+
+	return len;
+}
+/* }}} */
+
+
 /* {{{ _php_imap_get_address_size
  */
 static int _php_imap_address_size (ADDRESS *addresslist)
@@ -3970,8 +3998,8 @@ static int _php_imap_address_size (ADDRESS *addresslist)
 		num_ent++;
 	} while ((tmp = tmp->next));
 
-	/* 
-	 * rfc822_write_address_full() needs some extra space for '<>,', etc. 
+	/*
+	 * rfc822_write_address_full() needs some extra space for '<>,', etc.
 	 * for this perpouse we allocate additional PHP_IMAP_ADDRESS_SIZE_BUF bytes
 	 * by default this buffer is 10 bytes long
 	*/
@@ -4005,11 +4033,11 @@ static char* _php_imap_parse_address (ADDRESS *addresslist, zval *paddress TSRML
 	char *fulladdress;
 	ADDRESS *addresstmp;
 	zval *tmpvals;
-		
+
 	addresstmp = addresslist;
 
 	fulladdress = _php_rfc822_write_address(addresstmp TSRMLS_CC);
-	
+
 	addresstmp = addresslist;
 	do {
 		MAKE_STD_ZVAL(tmpvals);
@@ -4030,9 +4058,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
 {
 	zval *paddress;
 	char *fulladdress=NULL;
-	
+
 	object_init(myzvalue);
-	
+
 	if (en->remail) add_property_string(myzvalue, "remail", en->remail, 1);
 	if (en->date) add_property_string(myzvalue, "date", en->date, 1);
 	if (en->date) add_property_string(myzvalue, "Date", en->date, 1);
@@ -4043,7 +4071,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
 	if (en->newsgroups) add_property_string(myzvalue, "newsgroups", en->newsgroups, 1);
 	if (en->followup_to) add_property_string(myzvalue, "followup_to", en->followup_to, 1);
 	if (en->references) add_property_string(myzvalue, "references", en->references, 1);
-	
+
 	if (en->to) {
 		MAKE_STD_ZVAL(paddress);
 		array_init(paddress);
@@ -4053,7 +4081,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
 		}
 		add_assoc_object(myzvalue, "to", paddress TSRMLS_CC);
 	}
-	
+
 	if (en->from) {
 		MAKE_STD_ZVAL(paddress);
 		array_init(paddress);
@@ -4063,7 +4091,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
 		}
 		add_assoc_object(myzvalue, "from", paddress TSRMLS_CC);
 	}
-	
+
 	if (en->cc) {
 		MAKE_STD_ZVAL(paddress);
 		array_init(paddress);
@@ -4073,7 +4101,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
 		}
 		add_assoc_object(myzvalue, "cc", paddress TSRMLS_CC);
 	}
-	
+
 	if (en->bcc) {
 		MAKE_STD_ZVAL(paddress);
 		array_init(paddress);
@@ -4083,7 +4111,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
 		}
 		add_assoc_object(myzvalue, "bcc", paddress TSRMLS_CC);
 	}
-	
+
 	if (en->reply_to) {
 		MAKE_STD_ZVAL(paddress);
 		array_init(paddress);
@@ -4123,7 +4151,7 @@ void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC)
 	zval *parametres, *param, *dparametres, *dparam;
 	PARAMETER *par, *dpar;
 	PART *part;
-	
+
 	if (body->type <= TYPEMAX) {
 		add_property_long(arg, "type", body->type);
 	}
@@ -4152,7 +4180,7 @@ void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC)
 	} else {
 		add_property_long(arg, "ifid", 0);
 	}
-	
+
 	if (body->size.lines) {
 		add_property_long(arg, "lines", body->size.lines);
 	}
@@ -4186,7 +4214,7 @@ void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC)
 		add_property_long(arg, "ifdparameters", 0);
 	}
 #endif
- 
+
 	if ((par = body->parameter)) {
 		add_property_long(arg, "ifparameters", 1);
 
@@ -4223,7 +4251,7 @@ void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC)
 		}
 		add_assoc_object(arg, "parts", parametres TSRMLS_CC);
 	}
-	
+
 	/* encapsulated message ? */
 	if ((body->type == TYPEMESSAGE) && (!strcasecmp(body->subtype, "rfc822"))) {
 		body = body->CONTENT_MSG_BODY;
@@ -4264,14 +4292,14 @@ static void build_thread_tree_helper(THREADNODE *cur, zval *tree, long *numNodes
 	if(cur->branch) {
 		(*numNodes)++;
 		add_assoc_long(tree, buf, *numNodes);
-		build_thread_tree_helper(cur->branch, tree, numNodes, buf);	    
+		build_thread_tree_helper(cur->branch, tree, numNodes, buf);
 	} else { /* "null pointer" */
 		add_assoc_long(tree, buf, 0);
 	}
 }
 /* }}} */
 
-/* {{{ build_thread_tree 
+/* {{{ build_thread_tree
  */
 static int build_thread_tree(THREADNODE *top, zval **tree)
 {
@@ -4279,7 +4307,7 @@ static int build_thread_tree(THREADNODE *top, zval **tree)
 	char buf[25];
 
 	array_init(*tree);
-	
+
 	build_thread_tree_helper(top, *tree, &numNodes, buf);
 
 	return SUCCESS;
@@ -4296,21 +4324,26 @@ PHP_FUNCTION(imap_thread)
 	char criteria[] = "ALL";
 	THREADNODE *top;
 	int argc = ZEND_NUM_ARGS();
+	SEARCHPGM *pgm = NIL;
 
 	if ( argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &streamind, &search_flags) == FAILURE) {
 		ZEND_WRONG_PARAM_COUNT();
 	}
-	
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-	
+
 	if (argc == 1) {
 		flags = SE_FREE;
 	} else {
 		convert_to_long_ex(search_flags);
 		flags = Z_LVAL_PP(search_flags);
 	}
-	
-	top = mail_thread(imap_le_struct->imap_stream, "REFERENCES", NIL, mail_criteria(criteria), flags);
+
+	pgm = mail_criteria(criteria);
+	top = mail_thread(imap_le_struct->imap_stream, "REFERENCES", NIL, pgm, flags);
+	if (pgm) {
+		mail_free_searchpgm(&pgm);
+	}
 
 	if(top == NIL) {
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function returned an empty tree");
@@ -4390,15 +4423,15 @@ PHP_FUNCTION(imap_timeout)
 static char *php_mail_gets(readfn_t f, void *stream, unsigned long size, GETS_DATA *md)
 {
 	TSRMLS_FETCH();
-	
-	/*	write to the gets stream if it is set, 
+
+	/*	write to the gets stream if it is set,
 		otherwise forward to c-clients gets */
 	if (IMAPG(gets_stream)) {
 		char buf[GETS_FETCH_SIZE];
-		
+
 		while (size) {
 			unsigned long read;
-			
+
 			if (size > GETS_FETCH_SIZE) {
 				read = GETS_FETCH_SIZE;
 				size -=GETS_FETCH_SIZE;
@@ -4406,7 +4439,7 @@ static char *php_mail_gets(readfn_t f, void *stream, unsigned long size, GETS_DA
 				read = size;
 				size = 0;
 			}
-			
+
 			if (!f(stream, read, buf)) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to read from socket");
 				break;
@@ -4418,7 +4451,7 @@ static char *php_mail_gets(readfn_t f, void *stream, unsigned long size, GETS_DA
 		return NULL;
 	} else {
 		char *buf = pemalloc(size + 1, 1);
-		
+
 		if (f(stream, size, buf)) {
 			buf[size] = '\0';
 		} else {
@@ -4431,7 +4464,7 @@ static char *php_mail_gets(readfn_t f, void *stream, unsigned long size, GETS_DA
 }
 /* }}} */
 
-/* {{{ Interfaces to C-client 
+/* {{{ Interfaces to C-client
  */
 void mm_searched(MAILSTREAM *stream, unsigned long number)
 {
@@ -4470,12 +4503,12 @@ void mm_notify(MAILSTREAM *stream, char *str, long errflg)
 {
 	STRINGLIST *cur = NIL;
 	TSRMLS_FETCH();
-  
+
 	if (strncmp(str, "[ALERT] ", 8) == 0) {
 		if (IMAPG(imap_alertstack) == NIL) {
 			IMAPG(imap_alertstack) = mail_newstringlist();
 			IMAPG(imap_alertstack)->LSIZE = strlen(IMAPG(imap_alertstack)->LTEXT = cpystr(str));
-			IMAPG(imap_alertstack)->next = NIL; 
+			IMAPG(imap_alertstack)->next = NIL;
 		} else {
 			cur = IMAPG(imap_alertstack);
 			while (cur->next != NIL) {
@@ -4494,7 +4527,7 @@ void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes
 	STRINGLIST *cur=NIL;
 	FOBJECTLIST *ocur=NIL;
 	TSRMLS_FETCH();
-	
+
 	if (IMAPG(folderlist_style) == FLIST_OBJECT) {
 		/* build up a the new array of objects */
 		/* Author: CJH */
@@ -4515,14 +4548,14 @@ void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes
 			ocur->next = NIL;
 			IMAPG(imap_folder_objects_tail) = ocur;
 		}
-		
+
 	} else {
 		/* build the old IMAPG(imap_folders) variable to allow old imap_listmailbox() to work */
 		if (!(attributes & LATT_NOSELECT)) {
 			if (IMAPG(imap_folders) == NIL) {
 				IMAPG(imap_folders)=mail_newstringlist();
 				IMAPG(imap_folders)->LSIZE=strlen(IMAPG(imap_folders)->LTEXT=cpystr(mailbox));
-				IMAPG(imap_folders)->next=NIL; 
+				IMAPG(imap_folders)->next=NIL;
 				IMAPG(imap_folders_tail) = IMAPG(imap_folders);
 			} else {
 				cur=IMAPG(imap_folders_tail);
@@ -4541,7 +4574,7 @@ void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes
 	STRINGLIST *cur=NIL;
 	FOBJECTLIST *ocur=NIL;
 	TSRMLS_FETCH();
-	
+
 	if (IMAPG(folderlist_style) == FLIST_OBJECT) {
 		/* build the array of objects */
 		/* Author: CJH */
@@ -4567,7 +4600,7 @@ void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes
 		if (IMAPG(imap_sfolders) == NIL) {
 			IMAPG(imap_sfolders)=mail_newstringlist();
 			IMAPG(imap_sfolders)->LSIZE=strlen(IMAPG(imap_sfolders)->LTEXT=cpystr(mailbox));
-			IMAPG(imap_sfolders)->next=NIL; 
+			IMAPG(imap_sfolders)->next=NIL;
 			IMAPG(imap_sfolders_tail) = IMAPG(imap_sfolders);
 		} else {
 			cur=IMAPG(imap_sfolders_tail);
@@ -4606,14 +4639,14 @@ void mm_log(char *str, long errflg)
 {
 	ERRORLIST *cur = NIL;
 	TSRMLS_FETCH();
-  
+
 	/* Author: CJH */
 	if (errflg != NIL) { /* CJH: maybe put these into a more comprehensive log for debugging purposes? */
 		if (IMAPG(imap_errorstack) == NIL) {
 			IMAPG(imap_errorstack) = mail_newerrorlist();
 			IMAPG(imap_errorstack)->LSIZE = strlen(IMAPG(imap_errorstack)->LTEXT = cpystr(str));
 			IMAPG(imap_errorstack)->errflg = errflg;
-			IMAPG(imap_errorstack)->next = NIL; 
+			IMAPG(imap_errorstack)->next = NIL;
 		} else {
 			cur = IMAPG(imap_errorstack);
 			while (cur->next != NIL) {
diff --git a/ext/imap/tests/imap_body.phpt b/ext/imap/tests/imap_body.phpt
new file mode 100644
index 0000000..0a882b5
--- /dev/null
+++ b/ext/imap/tests/imap_body.phpt
@@ -0,0 +1,27 @@
+--TEST--
+imap_body() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_body();
+
+echo  "Checking with incorrect parameter type\n";
+imap_body('');
+imap_body(false);
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_body() in %s on line %d
+Checking with incorrect parameter type
+
+Warning: Wrong parameter count for imap_body() in %s on line %d
+
+Warning: Wrong parameter count for imap_body() in %s on line %d
diff --git a/ext/imap/tests/imap_expunge_error.phpt b/ext/imap/tests/imap_expunge_error.phpt
new file mode 100644
index 0000000..e34dcf2
--- /dev/null
+++ b/ext/imap/tests/imap_expunge_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+imap_num_recent() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_num_recent();
+
+echo  "Checking with incorrect parameter type\n";
+imap_num_recent('');
+imap_num_recent(false);
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_num_recent() in %s on line %d
+Checking with incorrect parameter type
+
+Warning: imap_num_recent(): supplied argument is not a valid imap resource in %s on line %d
+
+Warning: imap_num_recent(): supplied argument is not a valid imap resource in %s on line %d
diff --git a/ext/imap/tests/imap_headers.phpt b/ext/imap/tests/imap_headers.phpt
new file mode 100644
index 0000000..76f38a7
--- /dev/null
+++ b/ext/imap/tests/imap_headers.phpt
@@ -0,0 +1,27 @@
+--TEST--
+imap_headers() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_headers();
+
+echo  "Checking with incorrect parameter type\n";
+imap_headers('');
+imap_headers(false);
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_headers() in %s on line %d
+Checking with incorrect parameter type
+
+Warning: imap_headers(): supplied argument is not a valid imap resource in %s on line %d
+
+Warning: imap_headers(): supplied argument is not a valid imap resource in %s on line %d
diff --git a/ext/imap/tests/imap_num_msg_error.phpt b/ext/imap/tests/imap_num_msg_error.phpt
new file mode 100644
index 0000000..c3d54ee
--- /dev/null
+++ b/ext/imap/tests/imap_num_msg_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+imap_num_msg() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_num_msg();
+
+echo  "Checking with incorrect parameter type\n";
+imap_num_msg('');
+imap_num_msg(false);
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_num_msg() in %s on line %d
+Checking with incorrect parameter type
+
+Warning: imap_num_msg(): supplied argument is not a valid imap resource in %s on line %d
+
+Warning: imap_num_msg(): supplied argument is not a valid imap resource in %s on line %d
diff --git a/ext/imap/tests/imap_num_recent_error.phpt b/ext/imap/tests/imap_num_recent_error.phpt
new file mode 100644
index 0000000..3aa4680
--- /dev/null
+++ b/ext/imap/tests/imap_num_recent_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+imap_expunge() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_expunge();
+
+echo  "Checking with incorrect parameter type\n";
+imap_expunge('');
+imap_expunge(false);
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_expunge() in %s on line %d
+Checking with incorrect parameter type
+
+Warning: imap_expunge(): supplied argument is not a valid imap resource in %s on line %d
+
+Warning: imap_expunge(): supplied argument is not a valid imap resource in %s on line %d
diff --git a/ext/imap/tests/imap_open_error.phpt b/ext/imap/tests/imap_open_error.phpt
new file mode 100644
index 0000000..ed63f74
--- /dev/null
+++ b/ext/imap/tests/imap_open_error.phpt
@@ -0,0 +1,42 @@
+--TEST--
+imap_open() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_open();
+imap_open(false);
+imap_open(false, false);
+imap_open('');
+imap_open('', '');
+
+echo "Checking with incorrect parameters\n" ;
+imap_open('', '', '');
+imap_open('', '', '', -1);
+
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_open() in %s on line %d
+
+Warning: Wrong parameter count for imap_open() in %s on line %d
+
+Warning: Wrong parameter count for imap_open() in %s on line %d
+
+Warning: Wrong parameter count for imap_open() in %s on line %d
+
+Warning: Wrong parameter count for imap_open() in %s on line %d
+Checking with incorrect parameters
+
+Warning: imap_open(): Couldn't open stream  in %s on line %d
+
+Warning: imap_open(): Couldn't open stream  in %s on line %d
+
+Notice: Unknown: Can't open mailbox : no such mailbox (errflg=2) in Unknown on line 0
diff --git a/ext/imap/tests/imap_ping_error.phpt b/ext/imap/tests/imap_ping_error.phpt
new file mode 100644
index 0000000..b4bcbb5
--- /dev/null
+++ b/ext/imap/tests/imap_ping_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+imap_ping() incorrect parameter count
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+echo "Checking with no parameters\n";
+imap_ping();
+
+echo  "Checking with incorrect parameter type\n";
+imap_ping('');
+imap_ping(false);
+?>
+--EXPECTF--
+Checking with no parameters
+
+Warning: Wrong parameter count for imap_ping() in %s on line %d
+Checking with incorrect parameter type
+
+Warning: imap_ping(): supplied argument is not a valid imap resource in %s on line %d
+
+Warning: imap_ping(): supplied argument is not a valid imap resource in %s on line %d
diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c
index a88dde9..607c490 100644
--- a/ext/json/JSON_parser.c
+++ b/ext/json/JSON_parser.c
@@ -284,15 +284,27 @@ static void json_create_zval(zval **z, smart_str *buf, int type)
 
     if (type == IS_LONG)
     {
-	double d = zend_strtod(buf->c, NULL);
-	if (d > LONG_MAX || d < LONG_MIN) {
-		ZVAL_DOUBLE(*z, d);
-	} else {
-		ZVAL_LONG(*z, (long)d);
-	}
+		if (buf->c[0] == '-') {
+			buf->len--;
+		}
+
+		if (buf->len >= MAX_LENGTH_OF_LONG - 1) {
+			if (buf->len == MAX_LENGTH_OF_LONG - 1) {
+				int cmp = strcmp(buf->c + (buf->c[0] == '-'), long_min_digits);
+
+				if (!(cmp < 0 || (cmp == 0 && buf->c[0] == '-'))) {
+					goto use_double;
+				}
+			} else {
+				goto use_double;
+			}
+		}
+
+		ZVAL_LONG(*z, strtol(buf->c, NULL, 10));
     }
     else if (type == IS_DOUBLE)
     {
+use_double:
         ZVAL_DOUBLE(*z, zend_strtod(buf->c, NULL));
     }
     else if (type == IS_STRING)
diff --git a/ext/json/json.c b/ext/json/json.c
index 826d367..3113519 100644
--- a/ext/json/json.c
+++ b/ext/json/json.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: json.c,v 1.9.2.26 2009/02/12 00:36:23 scottmac Exp $ */
+/* $Id: json.c,v 1.9.2.29 2009/06/01 14:03:24 tony2001 Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -83,7 +83,6 @@ static PHP_MINFO_FUNCTION(json)
 }
 /* }}} */
 
-static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC);
 static void json_escape_string(smart_str *buf, char *s, int len TSRMLS_DC);
 
 static int json_determine_array_type(zval **val TSRMLS_DC)  /* {{{ */
@@ -176,7 +175,7 @@ static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) { /* {{{ */
                         need_comma = 1;
                     }
  
-                    json_encode_r(buf, *data TSRMLS_CC);
+                    php_json_encode(buf, *data TSRMLS_CC);
                 } else if (r == 1) {
                     if (i == HASH_KEY_IS_STRING) {
                         if (key[0] == '\0' && Z_TYPE_PP(val) == IS_OBJECT) {
@@ -196,7 +195,7 @@ static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) { /* {{{ */
                         json_escape_string(buf, key, key_len - 1 TSRMLS_CC);
                         smart_str_appendc(buf, ':');
 
-                        json_encode_r(buf, *data TSRMLS_CC);
+                        php_json_encode(buf, *data TSRMLS_CC);
                     } else {
                         if (need_comma) {
                             smart_str_appendc(buf, ',');
@@ -209,7 +208,7 @@ static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) { /* {{{ */
                         smart_str_appendc(buf, '"');
                         smart_str_appendc(buf, ':');
 
-                        json_encode_r(buf, *data TSRMLS_CC);
+                        php_json_encode(buf, *data TSRMLS_CC);
                     }
                 }
 
@@ -342,7 +341,7 @@ static void json_escape_string(smart_str *buf, char *s, int len TSRMLS_DC) /* {{
 }
 /* }}} */
 
-static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) /* {{{ */
+PHPAPI void php_json_encode(smart_str *buf, zval *val TSRMLS_DC) /* {{{ */
 {
     switch (Z_TYPE_P(val)) {
         case IS_NULL:
@@ -372,7 +371,7 @@ static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) /* {{{ */
 			smart_str_appendl(buf, d, len);
 			efree(d);
                 } else {
-                    zend_error(E_WARNING, "[json] (json_encode_r) double %.9g does not conform to the JSON spec, encoded as 0.", dbl);
+                    zend_error(E_WARNING, "[json] (php_json_encode) double %.9g does not conform to the JSON spec, encoded as 0", dbl);
                     smart_str_appendc(buf, '0');
                 }
             }
@@ -385,7 +384,7 @@ static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) /* {{{ */
             json_encode_array(buf, &val TSRMLS_CC);
             break;
         default:
-            zend_error(E_WARNING, "[json] (json_encode_r) type is unsupported, encoded as null.");
+            zend_error(E_WARNING, "[json] (php_json_encode) type is unsupported, encoded as null");
             smart_str_appendl(buf, "null", 4);
             break;
     }
@@ -394,6 +393,64 @@ static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) /* {{{ */
 }
 /* }}} */
 
+PHPAPI void php_json_decode(zval *return_value, char *buf, int buf_len, zend_bool assoc TSRMLS_DC) /* {{{ */
+{
+	unsigned short *utf16;
+	int utf16_len;
+	zval *z;
+
+	utf16 = (unsigned short *) safe_emalloc((buf_len+1), sizeof(unsigned short), 1);
+
+	utf16_len = utf8_to_utf16(utf16, buf, buf_len);
+	if (utf16_len <= 0)
+	{
+		if (utf16)
+		{
+			efree(utf16);
+		}
+
+		RETURN_NULL();
+	}
+
+	ALLOC_INIT_ZVAL(z);
+	if (JSON_parser(z, utf16, utf16_len, assoc TSRMLS_CC))
+	{
+		*return_value = *z;
+
+		FREE_ZVAL(z);
+		efree(utf16);
+	}
+	else
+	{
+		double d;
+		int type;
+		long p;
+
+		zval_dtor(z);
+		FREE_ZVAL(z);
+		efree(utf16);
+
+		if (buf_len == 4) {
+			if (!strcasecmp(buf, "null")) {
+				RETURN_NULL();
+			} else if (!strcasecmp(buf, "true")) {
+				RETURN_BOOL(1);
+			}
+		} else if (buf_len == 5 && !strcasecmp(buf, "false")) {
+			RETURN_BOOL(0);
+		}
+		if ((type = is_numeric_string(buf, buf_len, &p, &d, 0)) != 0) {
+			if (type == IS_LONG) {
+				RETURN_LONG(p);
+			} else if (type == IS_DOUBLE) {
+				RETURN_DOUBLE(d);
+			}
+		}
+		RETURN_NULL();
+	}
+}
+/* }}} */
+
 /* {{{ proto string json_encode(mixed data)
    Returns the JSON representation of a value */
 static PHP_FUNCTION(json_encode)
@@ -405,7 +462,7 @@ static PHP_FUNCTION(json_encode)
         return;
     }
 
-    json_encode_r(&buf, parameter TSRMLS_CC);
+    php_json_encode(&buf, parameter TSRMLS_CC);
 
     ZVAL_STRINGL(return_value, buf.c, buf.len, 1);
 
@@ -418,10 +475,8 @@ static PHP_FUNCTION(json_encode)
 static PHP_FUNCTION(json_decode)
 {
     char *parameter;
-    int parameter_len, utf16_len;
+    int parameter_len;
     zend_bool assoc = 0; /* return JS objects as PHP objects by default */
-    zval *z;
-    unsigned short *utf16;
 
     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &parameter, &parameter_len, &assoc) == FAILURE) {
         return;
@@ -432,55 +487,7 @@ static PHP_FUNCTION(json_decode)
         RETURN_NULL();
     }
 
-    utf16 = (unsigned short *) safe_emalloc((parameter_len+1), sizeof(unsigned short), 1);
-
-    utf16_len = utf8_to_utf16(utf16, parameter, parameter_len);
-    if (utf16_len <= 0)
-    {
-        if (utf16)
-        {
-            efree(utf16);
-        }
-
-        RETURN_NULL();
-    }
-
-    ALLOC_INIT_ZVAL(z);
-    if (JSON_parser(z, utf16, utf16_len, assoc TSRMLS_CC))
-    {
-        *return_value = *z;
-
-        FREE_ZVAL(z);
-        efree(utf16);
-    }
-    else
-    {
-	double d;
-	int type;
-	long p;
-
-        zval_dtor(z);
-        FREE_ZVAL(z);
-        efree(utf16);
-
-	if (parameter_len == 4) {
-		if (!strcasecmp(parameter, "null")) {
-			RETURN_NULL();
-		} else if (!strcasecmp(parameter, "true")) {
-			RETURN_BOOL(1);
-		}
-	} else if (parameter_len == 5 && !strcasecmp(parameter, "false")) {
-		RETURN_BOOL(0);
-	}
-	if ((type = is_numeric_string(parameter, parameter_len, &p, &d, 0)) != 0) {
-		if (type == IS_LONG) {
-			RETURN_LONG(p);
-		} else if (type == IS_DOUBLE) {
-			RETURN_DOUBLE(d);
-		}
-	}
-		RETURN_NULL();
-    }
+	php_json_decode(return_value, parameter, parameter_len, assoc TSRMLS_CC);
 }
 /* }}} */
 
diff --git a/ext/json/php_json.h b/ext/json/php_json.h
index 13aab3c..055fa11 100644
--- a/ext/json/php_json.h
+++ b/ext/json/php_json.h
@@ -16,13 +16,15 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_json.h,v 1.8.2.4 2008/12/31 11:17:38 sebastian Exp $ */
+/* $Id: php_json.h,v 1.8.2.7 2009/06/01 14:03:24 tony2001 Exp $ */
 
 #ifndef PHP_JSON_H
 #define PHP_JSON_H
 
 #define PHP_JSON_VERSION "1.2.1"
 
+#include "ext/standard/php_smart_str.h"
+
 extern zend_module_entry json_module_entry;
 #define phpext_json_ptr &json_module_entry
 
@@ -42,6 +44,9 @@ extern zend_module_entry json_module_entry;
 #define JSON_G(v) (json_globals.v)
 #endif
 
+PHPAPI void php_json_encode(smart_str *buf, zval *val TSRMLS_DC);
+PHPAPI void php_json_decode(zval *return_value, char *buf, int buf_len, zend_bool assoc TSRMLS_DC);
+
 #endif  /* PHP_JSON_H */
 
 
diff --git a/ext/json/tests/bug47644.phpt b/ext/json/tests/bug47644.phpt
new file mode 100644
index 0000000..5e996b6
--- /dev/null
+++ b/ext/json/tests/bug47644.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #47644 (valid large integers are truncated)
+--SKIPIF--
+<?php
+  if (!extension_loaded('json')) die('skip: json extension not available');
+  if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+
+for ($i = 10000000000000000; $i < 10000000000000006; $i++) {
+	var_dump(json_decode("[$i]"));
+}
+
+
+echo "Done\n";
+?>
+--EXPECT--	
+array(1) {
+  [0]=>
+  int(10000000000000000)
+}
+array(1) {
+  [0]=>
+  int(10000000000000001)
+}
+array(1) {
+  [0]=>
+  int(10000000000000002)
+}
+array(1) {
+  [0]=>
+  int(10000000000000003)
+}
+array(1) {
+  [0]=>
+  int(10000000000000004)
+}
+array(1) {
+  [0]=>
+  int(10000000000000005)
+}
+Done
diff --git a/ext/json/tests/json_decode_basic.phpt b/ext/json/tests/json_decode_basic.phpt
new file mode 100644
index 0000000..6dbeadb
--- /dev/null
+++ b/ext/json/tests/json_decode_basic.phpt
@@ -0,0 +1,187 @@
+--TEST--
+Test json_decode() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("json")) {
+ 	die('skip JSON extension not available in this build');
+}	 
+?>
+--FILE--
+<?php
+/* Prototype  : mixed json_decode  ( string $json  [, bool $assoc  ] )
+ * Description: Decodes a JSON string
+ * Source code: ext/json/php_json.c
+ * Alias to functions: 
+ */
+echo "*** Testing json_decode() : basic functionality ***\n";
+
+// array with different values for $string
+$inputs =  array (
+		'0',
+		'123',
+		'-123',
+		'2147483647',
+		'-2147483648',
+		'123.456',
+		'1230',
+		'-1230',
+		'true',
+		'false',
+		'null',
+		'"abc"',
+		'"Hello World\r\n"',
+		'[]',
+		'[1,2,3,4,5]',
+		'{"myInt":99,"myFloat":123.45,"myNull":null,"myBool":true,"myString":"Hello World"}',
+		'{"Jan":31,"Feb":29,"Mar":31,"April":30,"May":31,"June":30}',
+		'""',
+		'{}'
+);  
+
+// loop through with each element of the $inputs array to test json_decode() function
+$count = 1;
+foreach($inputs as $input) {
+  echo "-- Iteration $count --\n";	
+  var_dump(json_decode($input)); 
+   var_dump(json_decode($input, TRUE)); 
+  $count ++;
+}
+
+?>
+===Done===
+--EXPECTF-- 
+*** Testing json_decode() : basic functionality ***
+-- Iteration 1 --
+int(0)
+int(0)
+-- Iteration 2 --
+int(123)
+int(123)
+-- Iteration 3 --
+int(-123)
+int(-123)
+-- Iteration 4 --
+int(2147483647)
+int(2147483647)
+-- Iteration 5 --
+int(-2147483648)
+int(-2147483648)
+-- Iteration 6 --
+float(123.456)
+float(123.456)
+-- Iteration 7 --
+int(1230)
+int(1230)
+-- Iteration 8 --
+int(-1230)
+int(-1230)
+-- Iteration 9 --
+bool(true)
+bool(true)
+-- Iteration 10 --
+bool(false)
+bool(false)
+-- Iteration 11 --
+NULL
+NULL
+-- Iteration 12 --
+string(3) "abc"
+string(3) "abc"
+-- Iteration 13 --
+string(13) "Hello World
+"
+string(13) "Hello World
+"
+-- Iteration 14 --
+array(0) {
+}
+array(0) {
+}
+-- Iteration 15 --
+array(5) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  int(3)
+  [3]=>
+  int(4)
+  [4]=>
+  int(5)
+}
+array(5) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  int(3)
+  [3]=>
+  int(4)
+  [4]=>
+  int(5)
+}
+-- Iteration 16 --
+object(stdClass)#%d (5) {
+  ["myInt"]=>
+  int(99)
+  ["myFloat"]=>
+  float(123.45)
+  ["myNull"]=>
+  NULL
+  ["myBool"]=>
+  bool(true)
+  ["myString"]=>
+  string(11) "Hello World"
+}
+array(5) {
+  ["myInt"]=>
+  int(99)
+  ["myFloat"]=>
+  float(123.45)
+  ["myNull"]=>
+  NULL
+  ["myBool"]=>
+  bool(true)
+  ["myString"]=>
+  string(11) "Hello World"
+}
+-- Iteration 17 --
+object(stdClass)#%d (6) {
+  ["Jan"]=>
+  int(31)
+  ["Feb"]=>
+  int(29)
+  ["Mar"]=>
+  int(31)
+  ["April"]=>
+  int(30)
+  ["May"]=>
+  int(31)
+  ["June"]=>
+  int(30)
+}
+array(6) {
+  ["Jan"]=>
+  int(31)
+  ["Feb"]=>
+  int(29)
+  ["Mar"]=>
+  int(31)
+  ["April"]=>
+  int(30)
+  ["May"]=>
+  int(31)
+  ["June"]=>
+  int(30)
+}
+-- Iteration 18 --
+string(0) ""
+string(0) ""
+-- Iteration 19 --
+object(stdClass)#%d (0) {
+}
+array(0) {
+}
+===Done===
diff --git a/ext/json/tests/json_decode_error.phpt b/ext/json/tests/json_decode_error.phpt
new file mode 100644
index 0000000..4cdc05c
--- /dev/null
+++ b/ext/json/tests/json_decode_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test json_decode() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("json")) {
+ 	die('skip JSON extension not available in this build');
+}	 
+?>
+--FILE--
+<?php
+/* Prototype  : mixed json_decode  ( string $json  [, bool $assoc  ] )
+ * Description: Decodes a JSON string
+ * Source code: ext/json/php_json.c
+ * Alias to functions: 
+ */
+echo "*** Testing json_decode() : error conditions ***\n";
+
+echo "\n-- Testing json_decode() function with no arguments --\n";
+var_dump( json_decode() );
+
+echo "\n-- Testing json_decode() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( json_decode('"abc"', TRUE, $extra_arg) );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing json_decode() : error conditions ***
+
+-- Testing json_decode() function with no arguments --
+
+Warning: json_decode() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing json_decode() function with more than expected no. of arguments --
+
+Warning: json_decode() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+===Done===
diff --git a/ext/json/tests/json_encode_basic.phpt b/ext/json/tests/json_encode_basic.phpt
new file mode 100644
index 0000000..4124d06
--- /dev/null
+++ b/ext/json/tests/json_encode_basic.phpt
@@ -0,0 +1,158 @@
+--TEST--
+Test json_encode() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("json")) {
+ 	die('skip JSON extension not available in this build');
+}	 
+?>
+--FILE--
+<?php
+/* Prototype  : string json_encode  ( mixed $value  )
+ * Description: Returns the JSON representation of a value
+ * Source code: ext/json/php_json.c
+ * Alias to functions: 
+ */
+echo "*** Testing json_encode() : basic functionality ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// get an object
+class sample  {
+}
+
+$obj = new sample();
+$obj->MyInt = 99;
+$obj->MyFloat = 123.45;
+$obj->MyBool = true;
+$obj->MyNull = null;
+$obj->MyString = "Hello World";
+
+// array with different values for $string
+$inputs =  array (
+
+		// integers
+/*1*/	0,
+  		123,
+  		-123,
+ 		 2147483647,
+  		-2147483648,
+  
+  		// floats 
+/*6*/	123.456,
+  		1.23E3,
+  		-1.23E3,
+  
+ 		 // boolean
+/*9*/	TRUE,
+  		true,
+  		FALSE,
+  		false,
+
+		// NULL
+/*13*/	NULL,
+  		null,
+  
+  		// strings
+/*15*/	"abc",
+        'abc', 
+  		"Hello\t\tWorld\n",
+  
+  		// arrays
+/*18*/	array(),
+  		array(1,2,3,4,5),
+ 		array(1 => "Sun", 2=>"Mon", 3 => "Tue", 4 => "Wed", 5 => "Thur", 6 => "Fri", 7 => "Sat"),
+  		array("Jan" => 31, "Feb" => 29, "Mar" => 31, "April" => 30, "May" => 31, "June" => 30),
+  
+       // empty data
+/*22*/ "",
+       '',
+
+       // undefined data
+/*24*/ @$undefined_var,
+
+       // unset data
+/*25*/ @$unset_var,
+
+       // resource variable
+/*26*/ $fp,
+
+	  // object variable
+/*27*/ $obj 
+  
+);  
+
+// loop through with each element of the $inputs array to test json_encode() function
+$count = 1;
+foreach($inputs as $input) {
+  echo "-- Iteration $count --\n";	
+  var_dump(json_encode($input)); 
+  $count ++;
+}
+
+?>
+===Done===
+--EXPECTF-- 
+*** Testing json_encode() : basic functionality ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(3) "123"
+-- Iteration 3 --
+string(4) "-123"
+-- Iteration 4 --
+string(10) "2147483647"
+-- Iteration 5 --
+string(11) "-2147483648"
+-- Iteration 6 --
+string(7) "123.456"
+-- Iteration 7 --
+string(4) "1230"
+-- Iteration 8 --
+string(5) "-1230"
+-- Iteration 9 --
+string(4) "true"
+-- Iteration 10 --
+string(4) "true"
+-- Iteration 11 --
+string(5) "false"
+-- Iteration 12 --
+string(5) "false"
+-- Iteration 13 --
+string(4) "null"
+-- Iteration 14 --
+string(4) "null"
+-- Iteration 15 --
+string(5) ""abc""
+-- Iteration 16 --
+string(5) ""abc""
+-- Iteration 17 --
+string(18) ""Hello\t\tWorld\n""
+-- Iteration 18 --
+string(2) "[]"
+-- Iteration 19 --
+string(11) "[1,2,3,4,5]"
+-- Iteration 20 --
+string(72) "{"1":"Sun","2":"Mon","3":"Tue","4":"Wed","5":"Thur","6":"Fri","7":"Sat"}"
+-- Iteration 21 --
+string(58) "{"Jan":31,"Feb":29,"Mar":31,"April":30,"May":31,"June":30}"
+-- Iteration 22 --
+string(2) """"
+-- Iteration 23 --
+string(2) """"
+-- Iteration 24 --
+string(4) "null"
+-- Iteration 25 --
+string(4) "null"
+-- Iteration 26 --
+
+Warning: [json] (php_json_encode) type is unsupported, encoded as null in %s on line %d
+string(4) "null"
+-- Iteration 27 --
+string(82) "{"MyInt":99,"MyFloat":123.45,"MyBool":true,"MyNull":null,"MyString":"Hello World"}"
+===Done===
\ No newline at end of file
diff --git a/ext/json/tests/json_encode_basic_utf8.phpt b/ext/json/tests/json_encode_basic_utf8.phpt
new file mode 100644
index 0000000..a8e8b42
--- /dev/null
+++ b/ext/json/tests/json_encode_basic_utf8.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test json_encode() function : basic functionality with UTF8 string input
+--SKIPIF--
+<?php 
+if (!extension_loaded("json")) {
+ 	die('skip JSON extension not available in this build');
+}	 
+?> 
+--FILE--
+<?php
+/* Prototype  : string json_encode  ( mixed $value  )
+ * Description: Returns the JSON representation of a value
+ * Source code: ext/json/php_json.c
+ * Alias to functions: 
+ */
+echo "*** Testing json_encode() : basic functionality with UTF-8 input***\n";
+
+$utf8_string = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+var_dump(json_encode($utf8_string)); 
+
+?>
+===Done===
+--EXPECTF-- 
+*** Testing json_encode() : basic functionality with UTF-8 input***
+string(103) ""\u65e5\u672c\u8a9e\u30c6\u30ad\u30b9\u30c8\u3067\u3059\u300201234\uff15\uff16\uff17\uff18\uff19\u3002""
+===Done===
diff --git a/ext/json/tests/json_encode_error.phpt b/ext/json/tests/json_encode_error.phpt
new file mode 100644
index 0000000..b0aaa49
--- /dev/null
+++ b/ext/json/tests/json_encode_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test json_encode() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("json")) {
+ 	die('skip JSON extension not available in this build');
+}	 
+?>
+--FILE--
+<?php
+/* Prototype  : string json_encode  ( mixed $value  )
+ * Description: Returns the JSON representation of a value
+ * Source code: ext/json/php_json.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing json_encode() : error conditions ***\n";
+
+echo "\n-- Testing json_encode() function with no arguments --\n";
+var_dump( json_encode() );
+
+echo "\n-- Testing json_encode() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( json_encode("abc", $extra_arg) );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing json_encode() : error conditions ***
+
+-- Testing json_encode() function with no arguments --
+
+Warning: json_encode() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing json_encode() function with more than expected no. of arguments --
+
+Warning: json_encode() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===Done===
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index 50d09df..420b871 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -23,7 +23,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: ldap.c,v 1.161.2.3.2.14 2008/12/31 11:17:39 sebastian Exp $ */
+/* $Id: ldap.c,v 1.161.2.3.2.18 2009/06/15 15:18:48 patrickallaert Exp $ */
 #define IS_EXT_MODULE
 
 #ifdef HAVE_CONFIG_H
@@ -322,7 +322,7 @@ PHP_MINFO_FUNCTION(ldap)
 
 	php_info_print_table_start();
 	php_info_print_table_row(2, "LDAP Support", "enabled");
-	php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.14 2008/12/31 11:17:39 sebastian Exp $");
+	php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.18 2009/06/15 15:18:48 patrickallaert Exp $");
 
 	if (LDAPG(max_links) == -1) {
 		snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
@@ -641,13 +641,15 @@ PHP_FUNCTION(ldap_unbind)
 
 /* {{{ php_set_opts
  */
-static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref)
+static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, int *old_sizelimit, int *old_timelimit, int *old_deref)
 {
 	/* sizelimit */
 	if (sizelimit > -1) {
 #if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP_10
+		ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_sizelimit);
 		ldap_set_option(ldap, LDAP_OPT_SIZELIMIT, &sizelimit);
 #else
+		*old_sizelimit = ldap->ld_sizelimit; 
 		ldap->ld_sizelimit = sizelimit; 
 #endif
 	}
@@ -655,8 +657,10 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref)
 	/* timelimit */
 	if (timelimit > -1) {
 #if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP_10
+		ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_timelimit);
 		ldap_set_option(ldap, LDAP_OPT_TIMELIMIT, &timelimit);
 #else
+		*old_timelimit = ldap->ld_timelimit; 
 		ldap->ld_timelimit = timelimit; 
 #endif
 	}
@@ -664,8 +668,10 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref)
 	/* deref */
 	if (deref > -1) {
 #if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP_10
+		ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_deref);
 		ldap_set_option(ldap, LDAP_OPT_DEREF, &deref);
 #else
+		*old_deref = ldap->ld_deref; 
 		ldap->ld_deref = deref; 
 #endif
 	}
@@ -686,9 +692,13 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 	int ldap_sizelimit = -1; 
 	int ldap_timelimit = -1; 
 	int ldap_deref = -1;	 
+	int old_ldap_sizelimit = -1; 
+	int old_ldap_timelimit = -1; 
+	int old_ldap_deref = -1;	 
 	int num_attribs = 0;
 	int i, errno;
 	int myargcount = ZEND_NUM_ARGS();
+	int ret = 1;
 
 	if (myargcount < 3 || myargcount > 8 || zend_get_parameters_ex(myargcount, &link, &base_dn, &filter, &attrs, &attrsonly, &sizelimit, &timelimit, &deref) == FAILURE) {
 		WRONG_PARAM_COUNT;
@@ -715,7 +725,8 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 		case 4 : 
 			if (Z_TYPE_PP(attrs) != IS_ARRAY) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected Array as last element");
-				RETURN_FALSE;
+				ret = 0;
+				goto cleanup;
 			}
 
 			num_attribs = zend_hash_num_elements(Z_ARRVAL_PP(attrs));
@@ -724,8 +735,8 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 			for (i = 0; i<num_attribs; i++) {
 				if (zend_hash_index_find(Z_ARRVAL_PP(attrs), i, (void **) &attr) == FAILURE) {
 					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array initialization wrong");
-					efree(ldap_attrs);
-					RETURN_FALSE;
+					ret = 0;
+					goto cleanup;
 				}
 
 				SEPARATE_ZVAL(attr);
@@ -735,16 +746,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 			ldap_attrs[num_attribs] = NULL;
 		
 		case 3 :
-			/* parallel search? */
-			if (Z_TYPE_PP(link) != IS_ARRAY) {
-				convert_to_string_ex(filter);
-				ldap_filter = Z_STRVAL_PP(filter);
-
-				/* If anything else than string is passed, ldap_base_dn = NULL */
-				if (Z_TYPE_PP(base_dn) == IS_STRING) {
-					ldap_base_dn = Z_STRVAL_PP(base_dn);
-				}
-			}
+		
 		break;
 
 		default:
@@ -761,20 +763,16 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 		nlinks = zend_hash_num_elements(Z_ARRVAL_PP(link));
 		if (nlinks == 0) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "No links in link array");
-			if (ldap_attrs != NULL) {
-				efree(ldap_attrs);
-			}
-			RETURN_FALSE;
+			ret = 0;
+			goto cleanup;
 		}
 
 		if (Z_TYPE_PP(base_dn) == IS_ARRAY) {
 			nbases = zend_hash_num_elements(Z_ARRVAL_PP(base_dn));
 			if (nbases != nlinks) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Base must either be a string, or an array with the same number of elements as the links array");
-				if (ldap_attrs != NULL) {
-					efree(ldap_attrs);
-				}
-				RETURN_FALSE;
+				ret = 0;
+				goto cleanup;
 			}
 			zend_hash_internal_pointer_reset(Z_ARRVAL_PP(base_dn));
 		} else {
@@ -791,10 +789,8 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 			nfilters = zend_hash_num_elements(Z_ARRVAL_PP(filter));
 			if (nfilters != nlinks) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Filter must either be a string, or an array with the same number of elements as the links array");
-				if (ldap_attrs != NULL) {
-					efree(ldap_attrs);
-				}
-				RETURN_FALSE;
+				ret = 0;
+				goto cleanup;
 			}
 			zend_hash_internal_pointer_reset(Z_ARRVAL_PP(filter));
 		} else {
@@ -812,12 +808,8 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 
 			ld = (ldap_linkdata *) zend_fetch_resource(entry TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
 			if (ld == NULL) {
-				efree(lds);
-				efree(rcs);
-				if (ldap_attrs != NULL) {
-					efree(ldap_attrs);
-				}
-				RETURN_FALSE;
+				ret = 0;
+				goto cleanup_parallel;
 			}
 			if (nbases != 0) { /* base_dn an array? */
 				zend_hash_get_current_data(Z_ARRVAL_PP(base_dn), (void **)&entry);
@@ -837,7 +829,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 				ldap_filter = Z_STRVAL_PP(entry);
 			}
 
-			php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref);
+			php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref, &old_ldap_sizelimit, &old_ldap_timelimit, &old_ldap_deref);
 
 			/* Run the actual search */	
 			rcs[i] = ldap_search(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly);
@@ -845,10 +837,6 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 			zend_hash_move_forward(Z_ARRVAL_PP(link));
 		}
 		
-		if (ldap_attrs != NULL) {
-			efree(ldap_attrs);
-		}
-		
 		array_init(return_value);
 
 		/* Collect results from the searches */
@@ -864,50 +852,63 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
 				add_next_index_bool(return_value, 0);
 			}
 		}
+
+cleanup_parallel:
 		efree(lds);
 		efree(rcs);
-		return;
-	}
+	} else {
+		convert_to_string_ex(filter);
+		ldap_filter = Z_STRVAL_PP(filter);
 
-	ld = (ldap_linkdata *) zend_fetch_resource(link TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
-	if (ld == NULL) {
-		if (ldap_attrs != NULL) {
-			efree(ldap_attrs);
+		/* If anything else than string is passed, ldap_base_dn = NULL */
+		if (Z_TYPE_PP(base_dn) == IS_STRING) {
+			ldap_base_dn = Z_STRVAL_PP(base_dn);
 		}
-		RETURN_FALSE;
-	}
 
-	php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref);
+		ld = (ldap_linkdata *) zend_fetch_resource(link TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
+		if (ld == NULL) {
+			ret = 0;
+			goto cleanup;
+		}
 
-	/* Run the actual search */	
-	errno = ldap_search_s(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly, &ldap_res);
+		php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref, &old_ldap_sizelimit, &old_ldap_timelimit, &old_ldap_deref);
 
-	if (ldap_attrs != NULL) {
-		efree(ldap_attrs);
-	}
-
-	if (errno != LDAP_SUCCESS
-		&& errno != LDAP_SIZELIMIT_EXCEEDED
+		/* Run the actual search */	
+		errno = ldap_search_s(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly, &ldap_res);
+	
+		if (errno != LDAP_SUCCESS
+			&& errno != LDAP_SIZELIMIT_EXCEEDED
 #ifdef LDAP_ADMINLIMIT_EXCEEDED
-		&& errno != LDAP_ADMINLIMIT_EXCEEDED
+			&& errno != LDAP_ADMINLIMIT_EXCEEDED
 #endif
 #ifdef LDAP_REFERRAL
-		&& errno != LDAP_REFERRAL
+			&& errno != LDAP_REFERRAL
 #endif
-	) {
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Search: %s", ldap_err2string(errno));
-		RETVAL_FALSE; 
-	} else {
-		if (errno == LDAP_SIZELIMIT_EXCEEDED) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Sizelimit exceeded");
-		}
+		) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Search: %s", ldap_err2string(errno));
+			ret = 0;
+		} else {
+			if (errno == LDAP_SIZELIMIT_EXCEEDED) {
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Sizelimit exceeded");
+			}
 #ifdef LDAP_ADMINLIMIT_EXCEEDED
-		else if (errno == LDAP_ADMINLIMIT_EXCEEDED) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Adminlimit exceeded");
-		}
+			else if (errno == LDAP_ADMINLIMIT_EXCEEDED) {
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Adminlimit exceeded");
+			}
 #endif
-		
-		ZEND_REGISTER_RESOURCE(return_value, ldap_res, le_result);
+			
+			ZEND_REGISTER_RESOURCE(return_value, ldap_res, le_result);
+		}
+	}
+
+cleanup:
+	// Restoring previous options
+	php_set_opts(ld->link, old_ldap_sizelimit, old_ldap_timelimit, old_ldap_deref, &ldap_sizelimit, &ldap_timelimit, &ldap_deref);
+	if (ldap_attrs != NULL) {
+		efree(ldap_attrs);
+	}
+	if (!ret) {
+		RETVAL_BOOL(ret);
 	}
 }
 /* }}} */
@@ -1057,15 +1058,15 @@ PHP_FUNCTION(ldap_get_entries)
 	ldap = ld->link;
 	num_entries = ldap_count_entries(ldap, ldap_result);
 
-	array_init(return_value);
-	add_assoc_long(return_value, "count", num_entries);
-
 	if (num_entries == 0) return;
 	num_entries = 0;
 	
 	ldap_result_entry = ldap_first_entry(ldap, ldap_result);
 	if (ldap_result_entry == NULL) RETURN_FALSE;
 
+	array_init(return_value);
+	add_assoc_long(return_value, "count", num_entries);
+
 	while (ldap_result_entry != NULL) {
 
 		MAKE_STD_ZVAL(tmp1);
diff --git a/ext/ldap/tests/bug48441.phpt b/ext/ldap/tests/bug48441.phpt
new file mode 100644
index 0000000..8725661
--- /dev/null
+++ b/ext/ldap/tests/bug48441.phpt
@@ -0,0 +1,169 @@
+--TEST--
+ldap_search() bug 48441 - options persists after specifying them in ldap_search
+--CREDITS--
+Patrick Allaert <patrickallaert at php.net>
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifbindfailure.inc');
+?>
+--FILE--
+<?php
+include "connect.inc";
+
+$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
+insert_dummy_data($link);
+
+$dn = "dc=my-domain,dc=com";
+$filter = "(objectclass=person)";
+
+var_dump(
+	$result = ldap_search($link, $dn, $filter, array('sn')),
+	ldap_get_entries($link, $result)
+);
+var_dump(
+	$result = ldap_search($link, $dn, $filter, array('sn'), 1, 1, 1, LDAP_DEREF_ALWAYS),
+	ldap_get_entries($link, $result)
+);
+var_dump(
+	$result = ldap_search($link, $dn, $filter, array('sn')),
+	ldap_get_entries($link, $result)
+);
+?>
+===DONE===
+--CLEAN--
+<?php
+include "connect.inc";
+
+$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
+remove_dummy_data($link);
+?>
+--EXPECTF--
+resource(%d) of type (ldap result)
+array(4) {
+  ["count"]=>
+  int(3)
+  [0]=>
+  array(4) {
+    ["sn"]=>
+    array(2) {
+      ["count"]=>
+      int(1)
+      [0]=>
+      string(7) "testSN1"
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(28) "cn=userA,dc=my-domain,dc=com"
+  }
+  [1]=>
+  array(4) {
+    ["sn"]=>
+    array(2) {
+      ["count"]=>
+      int(1)
+      [0]=>
+      string(7) "testSN2"
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(28) "cn=userB,dc=my-domain,dc=com"
+  }
+  [2]=>
+  array(4) {
+    ["sn"]=>
+    array(2) {
+      ["count"]=>
+      int(1)
+      [0]=>
+      string(7) "testSN3"
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(37) "cn=userC,cn=userB,dc=my-domain,dc=com"
+  }
+}
+
+Warning: ldap_search(): Partial search results returned: Sizelimit exceeded in %s on line %d
+resource(%d) of type (ldap result)
+array(2) {
+  ["count"]=>
+  int(1)
+  [0]=>
+  array(4) {
+    ["sn"]=>
+    array(1) {
+      ["count"]=>
+      int(0)
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(28) "cn=userA,dc=my-domain,dc=com"
+  }
+}
+resource(%d) of type (ldap result)
+array(4) {
+  ["count"]=>
+  int(3)
+  [0]=>
+  array(4) {
+    ["sn"]=>
+    array(2) {
+      ["count"]=>
+      int(1)
+      [0]=>
+      string(7) "testSN1"
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(28) "cn=userA,dc=my-domain,dc=com"
+  }
+  [1]=>
+  array(4) {
+    ["sn"]=>
+    array(2) {
+      ["count"]=>
+      int(1)
+      [0]=>
+      string(7) "testSN2"
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(28) "cn=userB,dc=my-domain,dc=com"
+  }
+  [2]=>
+  array(4) {
+    ["sn"]=>
+    array(2) {
+      ["count"]=>
+      int(1)
+      [0]=>
+      string(7) "testSN3"
+    }
+    [0]=>
+    string(2) "sn"
+    ["count"]=>
+    int(1)
+    ["dn"]=>
+    string(37) "cn=userC,cn=userB,dc=my-domain,dc=com"
+  }
+}
+===DONE===
diff --git a/ext/ldap/tests/connect.inc b/ext/ldap/tests/connect.inc
new file mode 100644
index 0000000..ddb5782
--- /dev/null
+++ b/ext/ldap/tests/connect.inc
@@ -0,0 +1,61 @@
+<?php
+
+/*
+Default values are "localhost", "root", database "test" and empty password.
+Change the LDAP_TEST_* environment values if you want to use another configuration.
+*/
+
+$host			= getenv("LDAP_TEST_HOST")	? getenv("LDAP_TEST_HOST")	: "localhost";
+$port			= getenv("LDAP_TEST_PORT")	? getenv("LDAP_TEST_PORT")	: 389;
+$user			= getenv("LDAP_TEST_USER")	? getenv("LDAP_TEST_USER")	: "cn=Manager,dc=my-domain,dc=com";
+$sasl_user		= getenv("LDAP_TEST_SASL_USER")	? getenv("LDAP_TEST_SASL_USER")	: "Manager";
+$passwd			= getenv("LDAP_TEST_PASSWD")	? getenv("LDAP_TEST_PASSWD")	: "secret";
+$protocol_version	= getenv("LDAP_TEST_OPT_PROTOCOL_VERSION")	? getenv("LDAP_TEST_OPT_PROTOCOL_VERSION")	: 3;
+$skip_on_bind_failure	= getenv("LDAP_TEST_SKIP_BIND_FAILURE") ? getenv("LDAP_TEST_SKIP_BIND_FAILURE") : true;
+
+function ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version) {
+	$link = ldap_connect($host, $port);
+	ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version);
+	ldap_bind($link, $user, $passwd);
+	return $link;
+}
+
+function insert_dummy_data($link) {
+	ldap_add($link, "dc=my-domain,dc=com", array(
+	        "objectClass"   => array(
+	                "top",
+	                "dcObject",
+	                "organization"),
+	        "dc"                    => "my-domain",
+	        "o"                             => "my-domain",
+	));
+	ldap_add($link, "cn=userA,dc=my-domain,dc=com", array(
+	        "objectclass" => "person",
+	        "cn" => "userA",
+	        "sn" => "testSN1",
+	        "userPassword" => "oops",
+	        "telephoneNumber" => "xx-xx-xx-xx-xx",
+	        "description" => "user A",
+	));
+	ldap_add($link, "cn=userB,dc=my-domain,dc=com", array(
+	        "objectclass" => "person",
+	        "cn" => "userB",
+	        "sn" => "testSN2",
+	        "userPassword" => "oopsIDitItAgain",
+	        "description" => "user B",
+	));
+	ldap_add($link, "cn=userC,cn=userB,dc=my-domain,dc=com", array(
+	        "objectclass" => "person",
+	        "cn" => "userC",
+	        "sn" => "testSN3",
+	        "userPassword" => "0r1g1na1 passw0rd",
+	));
+}
+
+function remove_dummy_data($link) {
+	ldap_delete($link, "cn=userC,cn=userB,dc=my-domain,dc=com");
+	ldap_delete($link, "cn=userA,dc=my-domain,dc=com");
+	ldap_delete($link, "cn=userB,dc=my-domain,dc=com");
+	ldap_delete($link, "dc=my-domain,dc=com");
+}
+?>
diff --git a/ext/ldap/tests/skipifbindfailure.inc b/ext/ldap/tests/skipifbindfailure.inc
new file mode 100644
index 0000000..f79bb9d
--- /dev/null
+++ b/ext/ldap/tests/skipifbindfailure.inc
@@ -0,0 +1,13 @@
+<?php
+require_once 'connect.inc';
+
+if ($skip_on_bind_failure) {
+
+	$link = ldap_connect($host, $port);
+	ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version);
+	if (!@ldap_bind($link, $user, $passwd))
+		die(sprintf("skip Can't bind to LDAP Server - [%d] %s", ldap_errno($link), ldap_error($link)));
+
+	ldap_unbind($link);
+}
+?>
diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c
index 98efdcb..fc59fba 100644
--- a/ext/mbstring/mb_gpc.c
+++ b/ext/mbstring/mb_gpc.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mb_gpc.c,v 1.17.2.2.2.5 2008/12/31 11:17:39 sebastian Exp $ */
+/* $Id: mb_gpc.c,v 1.17.2.2.2.6 2009/03/15 20:44:17 moriyoshi Exp $ */
 
 /* {{{ includes */
 #ifdef HAVE_CONFIG_H
@@ -59,6 +59,11 @@ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
 	enum mbfl_no_encoding detected;
 	php_mb_encoding_handler_info_t info;
 
+	{
+		char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0);
+		_php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC);
+	}
+
 	if (!MBSTRG(encoding_translation)) {
 		php_default_treat_data(arg, str, destArray TSRMLS_CC);
 		return;
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index 211b2d6..fad85a3 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.c,v 1.224.2.22.2.46 2009/02/15 07:11:23 moriyoshi Exp $ */
+/* $Id: mbstring.c,v 1.224.2.22.2.47 2009/03/15 20:44:17 moriyoshi Exp $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring"
@@ -656,7 +656,7 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output)
 /* }}} */
 
 /* {{{ static _php_mb_ini_mbstring_internal_encoding_set */
-static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC)
+int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC)
 {
 	enum mbfl_no_encoding no_encoding;
 	const char *enc_name = NULL;
@@ -826,7 +826,6 @@ static PHP_INI_MH(OnUpdate_mbstring_encoding_translation)
 	if (MBSTRG(encoding_translation)) {
 		sapi_unregister_post_entry(php_post_entries TSRMLS_CC);
 		sapi_register_post_entries(mbstr_post_entries TSRMLS_CC);
-		sapi_register_treat_data(mbstr_treat_data);
 	} else {
 		sapi_unregister_post_entry(mbstr_post_entries TSRMLS_CC);
 		sapi_register_post_entries(php_post_entries TSRMLS_CC);
@@ -927,9 +926,12 @@ PHP_MINIT_FUNCTION(mbstring)
 
 	REGISTER_INI_ENTRIES();
 
+	/* This is a global handler. Should not be set in a per-request handler. */
+	sapi_register_treat_data(mbstr_treat_data);
+
+	/* Post handlers are stored in the thread-local context. */
 	if (MBSTRG(encoding_translation)) {
 		sapi_register_post_entries(mbstr_post_entries TSRMLS_CC);
-		sapi_register_treat_data(mbstr_treat_data);
 	}
 
 	REGISTER_LONG_CONSTANT("MB_OVERLOAD_MAIL", MB_OVERLOAD_MAIL, CONST_CS | CONST_PERSISTENT);
@@ -968,11 +970,6 @@ PHP_RINIT_FUNCTION(mbstring)
 	zend_function *func, *orig;
 	const struct mb_overload_def *p;
 
-	{
-		char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0);
-		_php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC);
-	}
-
 	MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding);
 	MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding);
 	MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode);
diff --git a/ext/mbstring/mbstring.dsp b/ext/mbstring/mbstring.dsp
index 63a7fa6..629b0bd 100644
--- a/ext/mbstring/mbstring.dsp
+++ b/ext/mbstring/mbstring.dsp
@@ -366,6 +366,10 @@ SOURCE=.\libmbfl\filters\mbfilter_koi8r.c
 # End Source File
 # Begin Source File
 
+SOURCE=.\libmbfl\filters\mbfilter_koi8u.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\libmbfl\filters\mbfilter_armscii8.c
 # End Source File
 # Begin Source File
@@ -675,6 +679,10 @@ SOURCE=.\libmbfl\filters\mbfilter_koi8r.h
 # End Source File
 # Begin Source File
 
+SOURCE=.\libmbfl\filters\mbfilter_koi8u.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\libmbfl\filters\mbfilter_armscii8.h
 # End Source File
 # Begin Source File
@@ -895,6 +903,10 @@ SOURCE=.\libmbfl\filters\unicode_table_koi8r.h
 # End Source File
 # Begin Source File
 
+SOURCE=.\libmbfl\filters\unicode_table_koi8u.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\libmbfl\filters\unicode_table_armscii8.h
 # End Source File
 # Begin Source File
diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h
index 6585f17..461faeb 100644
--- a/ext/mbstring/mbstring.h
+++ b/ext/mbstring/mbstring.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.h,v 1.66.2.4.2.9 2008/12/31 11:17:39 sebastian Exp $ */
+/* $Id: mbstring.h,v 1.66.2.4.2.10 2009/03/15 20:44:17 moriyoshi Exp $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring" (currently only for Japanese)
@@ -159,6 +159,9 @@ MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length
 
 MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_len, char *old_needle, int old_needle_len, long offset, char *from_encoding TSRMLS_DC);
 
+/* internal use only */
+int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC);
+
 ZEND_BEGIN_MODULE_GLOBALS(mbstring)
 	enum mbfl_no_language language;
 	enum mbfl_no_encoding internal_encoding;
diff --git a/ext/mbstring/oniguruma/regint.h b/ext/mbstring/oniguruma/regint.h
index cd238bb..ba84fab 100644
--- a/ext/mbstring/oniguruma/regint.h
+++ b/ext/mbstring/oniguruma/regint.h
@@ -256,7 +256,7 @@
 #define NULL_UCHARP                   ((UChar* )0)
 
 #ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-#define WORD_ALIGNMENT_SIZE       SIZEOF_INT
+#define WORD_ALIGNMENT_SIZE       SIZEOF_LONG
 
 #define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
   (pad_size) = WORD_ALIGNMENT_SIZE \
diff --git a/ext/mbstring/tests/mb_convert_encoding_stateful.phpt b/ext/mbstring/tests/mb_convert_encoding_stateful.phpt
new file mode 100644
index 0000000..a8c1e39
--- /dev/null
+++ b/ext/mbstring/tests/mb_convert_encoding_stateful.phpt
@@ -0,0 +1,37 @@
+--TEST--
+mb_convert_encoding() with stateful encodings
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--INI--
+output_handler=
+mbstring.language=Japanese
+--FILE--
+<?php
+echo "ISO-2022-JP empty segment\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b24401b24402121"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b24421b24422121"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b28421b284261626364"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b284a1b284a61626364"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b24401b284261626364"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b24401b284a61626364"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b24421b284261626364"), "UTF-8", "ISO-2022-JP")), "\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b24421b284a61626364"), "UTF-8", "ISO-2022-JP")), "\n";
+echo "ISO-2022-KR empty segment\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "1b2429430e0f61626364"), "UTF-8", "ISO-2022-KR")), "\n";
+echo "HZ empty segment\n";
+echo bin2hex(mb_convert_encoding(pack("H*", "7e7b7e7d61626364"), "UTF-8", "HZ")), "\n";
+?>
+--EXPECT--
+ISO-2022-JP empty segment
+e38080
+e38080
+61626364
+61626364
+61626364
+61626364
+61626364
+61626364
+ISO-2022-KR empty segment
+61626364
+HZ empty segment
+61626364
diff --git a/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
index 134a4c3..4d0b254 100644
--- a/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
+++ b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
@@ -1,6 +1,5 @@
 --TEST--
 Test mb_stripos() function : usage variations - Pass different integers as $offset argument
---XFAIL--
 --SKIPIF--
 <?php
 extension_loaded('mbstring') or die('skip');
diff --git a/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt
index eb23d80..2586580 100644
--- a/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt
+++ b/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt
@@ -1,6 +1,5 @@
 --TEST--
 Test mb_strripos() function : usage variations - pass different data types as $offset arg
---XFAIL--
 --SKIPIF--
 <?php
 extension_loaded('mbstring') or die('skip');
diff --git a/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
index 8c40a6f..3cdfeff 100644
--- a/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
+++ b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
@@ -1,6 +1,5 @@
 --TEST--
 Test mb_strripos() function : usage variations - Pass different integers as $offset argument
---XFAIL--
 --SKIPIF--
 <?php
 extension_loaded('mbstring') or die('skip');
diff --git a/ext/mbstring/tests/mb_substitute_character_variation1.phpt b/ext/mbstring/tests/mb_substitute_character_variation1.phpt
index 435f95a..59b8cf4 100644
--- a/ext/mbstring/tests/mb_substitute_character_variation1.phpt
+++ b/ext/mbstring/tests/mb_substitute_character_variation1.phpt
@@ -105,9 +105,6 @@ $inputs = array(
 
       // unset data
       'unset var' => @$unset_var,
-      
-      // resource variable
-      'resource' => $fp      
 );
 
 // loop through each element of the array for substchar
@@ -232,7 +229,4 @@ bool(false)
 --unset var--
 Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
 bool(false)
-
---resource--
-bool(true)
 ===DONE===
diff --git a/ext/mssql/php_mssql.h b/ext/mssql/php_mssql.h
index 5868644..e161201 100644
--- a/ext/mssql/php_mssql.h
+++ b/ext/mssql/php_mssql.h
@@ -17,7 +17,7 @@
  */
 
 
-/* $Id: php_mssql.h,v 1.42.2.3.2.3 2008/12/31 11:17:40 sebastian Exp $ */
+/* $Id: php_mssql.h,v 1.42.2.3.2.4 2009/05/26 12:37:52 felipe Exp $ */
 
 #ifndef PHP_MSSQL_H
 #define PHP_MSSQL_H
@@ -66,7 +66,9 @@ typedef short TDS_SHORT;
 #define DBMSGHANDLE(a, b) dbmsghandle(b)
 #define DBSETOPT(a, b, c) dbsetopt(a, b, c, -1)
 #define NO_MORE_RPC_RESULTS 3
+#ifndef dbfreelogin
 #define dbfreelogin dbloginfree
+#endif
 #define dbrpcexec dbrpcsend
 typedef unsigned char	*LPBYTE;
 typedef float           DBFLT4;
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 2ea5bf7..917268e 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -15,7 +15,7 @@
   | Author: Georg Richter <georg at php.net>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_api.c,v 1.118.2.22.2.22 2008/12/31 11:17:40 sebastian Exp $ 
+  $Id: mysqli_api.c,v 1.118.2.22.2.23 2009/06/09 01:00:47 scottmac Exp $ 
 */
 
 #ifdef HAVE_CONFIG_H
@@ -1099,7 +1099,13 @@ PHP_FUNCTION(mysqli_info)
 PHP_FUNCTION(mysqli_init)
 {
 	MYSQLI_RESOURCE *mysqli_resource;
-	MY_MYSQL *mysql = (MY_MYSQL *)ecalloc(1, sizeof(MY_MYSQL));
+	MY_MYSQL *mysql;
+
+	if (getThis() && ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr) {
+		return;
+	}
+
+	mysql = (MY_MYSQL *)ecalloc(1, sizeof(MY_MYSQL));
 
 	if (!(mysql->mysql = mysql_init(NULL))) {
 		efree(mysql);
diff --git a/ext/mysqli/tests/bug46109.phpt b/ext/mysqli/tests/bug46109.phpt
new file mode 100644
index 0000000..358f1bf
--- /dev/null
+++ b/ext/mysqli/tests/bug46109.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #46109 (MySQLi::init - Memory leaks)
+--SKIPIF--
+<?php 
+require_once('skipif.inc'); 
+?>
+--FILE--
+<?php
+	include "connect.inc";
+
+	$mysqli = new mysqli();
+	$mysqli->init();
+	$mysqli->init();
+	echo "done";	
+?>
+--EXPECTF--
+done
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
index 4724439..0fb53d7 100644
--- a/ext/odbc/php_odbc.c
+++ b/ext/odbc/php_odbc.c
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_odbc.c,v 1.189.2.4.2.11 2008/12/31 11:17:40 sebastian Exp $ */
+/* $Id: php_odbc.c,v 1.189.2.4.2.14 2009/05/14 17:25:51 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1035,7 +1035,7 @@ PHP_FUNCTION(odbc_execute)
 			}
 
 			otype = (*tmp)->type;
-			convert_to_string(*tmp);
+			convert_to_string_ex(tmp);
 			if (Z_TYPE_PP(tmp) != IS_STRING) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
 				SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
@@ -2863,7 +2863,7 @@ PHP_FUNCTION(odbc_setoption)
 PHP_FUNCTION(odbc_tables)
 {
 	zval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_type;
-	odbc_result   *result = NULL;
+	odbc_result *result = NULL;
 	odbc_connection *conn;
 	char *cat = NULL, *schema = NULL, *table = NULL, *type = NULL;
 	RETCODE rc;
@@ -2884,8 +2884,10 @@ PHP_FUNCTION(odbc_tables)
 			convert_to_string_ex(pv_schema);
 			schema = Z_STRVAL_PP(pv_schema);
 		case 2:
-			convert_to_string_ex(pv_cat);
-			cat = Z_STRVAL_PP(pv_cat);
+			if (Z_TYPE_PP(pv_cat) != IS_NULL) {
+				convert_to_string_ex(pv_cat);
+				cat = Z_STRVAL_PP(pv_cat);
+			}
 	}
 
 	ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
@@ -2967,9 +2969,11 @@ PHP_FUNCTION(odbc_columns)
 			schema = Z_STRVAL_PP(pv_schema);
 			schema_len = Z_STRLEN_PP(pv_schema);
 		case 2:
-			convert_to_string_ex(pv_cat);
-			cat = Z_STRVAL_PP(pv_cat);
-			cat_len = Z_STRLEN_PP(pv_cat);
+			if (Z_TYPE_PP(pv_cat) != NULL) {
+				convert_to_string_ex(pv_cat);
+				cat = Z_STRVAL_PP(pv_cat);
+				cat_len = Z_STRLEN_PP(pv_cat);
+			}
 	}
 
 	ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
@@ -3040,8 +3044,10 @@ PHP_FUNCTION(odbc_columnprivileges)
 		if (zend_get_parameters_ex(5, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_column) == FAILURE) {
 			WRONG_PARAM_COUNT;
 		}
-		convert_to_string_ex(pv_cat);
-		cat = Z_STRVAL_PP(pv_cat);
+		if (Z_TYPE_PP(pv_cat) != IS_NULL) {
+			convert_to_string_ex(pv_cat);
+			cat = Z_STRVAL_PP(pv_cat);
+		}
 		convert_to_string_ex(pv_schema);
 		schema = Z_STRVAL_PP(pv_schema);
 		convert_to_string_ex(pv_table);
@@ -3106,7 +3112,7 @@ PHP_FUNCTION(odbc_foreignkeys)
 {
 	zval **pv_conn, **pv_pcat, **pv_pschema, **pv_ptable;
 	zval **pv_fcat, **pv_fschema, **pv_ftable;
-	odbc_result   *result = NULL;
+	odbc_result *result = NULL;
 	odbc_connection *conn;
 	char *pcat = NULL, *pschema = NULL, *ptable = NULL;
 	char *fcat = NULL, *fschema = NULL, *ftable = NULL;
@@ -3119,8 +3125,10 @@ PHP_FUNCTION(odbc_foreignkeys)
 					&pv_fcat, &pv_fschema, &pv_ftable) == FAILURE) {
 			WRONG_PARAM_COUNT;
 		}
-		convert_to_string_ex(pv_pcat);
-		pcat = Z_STRVAL_PP(pv_pcat);
+		if (Z_TYPE_PP(pv_pcat) != IS_NULL) {
+			convert_to_string_ex(pv_pcat);
+			pcat = Z_STRVAL_PP(pv_pcat);
+		}
 		convert_to_string_ex(pv_pschema);
 		pschema = Z_STRVAL_PP(pv_pschema);
 		convert_to_string_ex(pv_ptable);
@@ -3279,8 +3287,10 @@ PHP_FUNCTION(odbc_primarykeys)
 		if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_table) == FAILURE) {
 			WRONG_PARAM_COUNT;
 		}
-		convert_to_string_ex(pv_cat);
-		cat = Z_STRVAL_PP(pv_cat);
+		if (Z_TYPE_PP(pv_cat) != IS_NULL) {
+			convert_to_string_ex(pv_cat);
+			cat = Z_STRVAL_PP(pv_cat);
+		}
 		convert_to_string_ex(pv_schema);
 		schema = Z_STRVAL_PP(pv_schema);
 		convert_to_string_ex(pv_table);
@@ -3497,7 +3507,7 @@ PHP_FUNCTION(odbc_specialcolumns)
 {
 	zval **pv_conn, **pv_type, **pv_cat, **pv_schema, **pv_name;
 	zval **pv_scope, **pv_nullable;
-	odbc_result   *result = NULL;
+	odbc_result *result = NULL;
 	odbc_connection *conn;
 	char *cat = NULL, *schema = NULL, *name = NULL;
 	SQLUSMALLINT type;
@@ -3513,8 +3523,10 @@ PHP_FUNCTION(odbc_specialcolumns)
 		}
 		convert_to_long_ex(pv_type);
 		type = (SQLUSMALLINT) Z_LVAL_PP(pv_type);
-		convert_to_string_ex(pv_cat);
-		cat = Z_STRVAL_PP(pv_cat);
+		if (Z_TYPE_PP(pv_cat) != IS_NULL) {
+			convert_to_string_ex(pv_cat);
+			cat = Z_STRVAL_PP(pv_cat);
+		}
 		convert_to_string_ex(pv_schema);
 		schema = Z_STRVAL_PP(pv_schema);
 		convert_to_string_ex(pv_name);
@@ -3594,8 +3606,10 @@ PHP_FUNCTION(odbc_statistics)
 					&pv_name, &pv_unique, &pv_reserved) == FAILURE) {
 			WRONG_PARAM_COUNT;
 		}
-		convert_to_string_ex(pv_cat);
-		cat = Z_STRVAL_PP(pv_cat);
+		if (Z_TYPE_PP(pv_cat) != IS_NULL) {
+			convert_to_string_ex(pv_cat);
+			cat = Z_STRVAL_PP(pv_cat);
+		}
 		convert_to_string_ex(pv_schema);
 		schema = Z_STRVAL_PP(pv_schema);
 		convert_to_string_ex(pv_name);
diff --git a/ext/odbc/tests/config.inc b/ext/odbc/tests/config.inc
new file mode 100644
index 0000000..a88eea4
--- /dev/null
+++ b/ext/odbc/tests/config.inc
@@ -0,0 +1,8 @@
+<?php
+
+putenv('ODBCINI=/etc/odbc.ini');
+putenv('ODBCSYSINI=/etc');
+
+$dsn = 'myodbc3';
+$user = 'root';
+$pass = '';
diff --git a/ext/odbc/tests/odbc_columnprivileges_001.phpt b/ext/odbc/tests/odbc_columnprivileges_001.phpt
new file mode 100644
index 0000000..062985d
--- /dev/null
+++ b/ext/odbc/tests/odbc_columnprivileges_001.phpt
@@ -0,0 +1,28 @@
+--TEST--
+odbc_columnprivileges(): Basic test
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+var_dump($result = odbc_columnprivileges($conn, '', '', '', ''));
+var_dump(odbc_fetch_row($result));
+
+var_dump($result = odbc_columnprivileges($conn, NULL, NULL, NULL, NULL));
+var_dump(odbc_fetch_row($result));
+
+var_dump($result = odbc_columnprivileges($conn, 'FOO', 'FOO', 'FOO', 'FOO'));
+var_dump(odbc_fetch_row($result));
+
+?>
+--EXPECTF--
+resource(%d) of type (odbc result)
+bool(false)
+resource(%d) of type (odbc result)
+bool(false)
+resource(%d) of type (odbc result)
+bool(false)
diff --git a/ext/odbc/tests/odbc_columns_001.phpt b/ext/odbc/tests/odbc_columns_001.phpt
new file mode 100644
index 0000000..9932213
--- /dev/null
+++ b/ext/odbc/tests/odbc_columns_001.phpt
@@ -0,0 +1,32 @@
+--TEST--
+odbc_columns(): Basic test
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+var_dump($result = odbc_columns($conn, '', '', '', ''));
+var_dump(odbc_fetch_row($result));
+
+var_dump($result = odbc_columns($conn, NULL, NULL, NULL, NULL));
+var_dump(odbc_fetch_row($result));
+
+var_dump($result = odbc_columns($conn, 'FOO', 'FOO', 'FOO', 'FOO'));
+var_dump(odbc_fetch_row($result));
+
+?>
+--EXPECTF--
+resource(%d) of type (odbc result)
+bool(false)
+resource(%d) of type (odbc result)
+bool(false)
+
+Warning: odbc_columns(): SQL error: Failed to fetch error message, SQL state HY000 in SQLColumns in %s on line %d
+bool(false)
+
+Warning: odbc_fetch_row(): supplied argument is not a valid ODBC result resource in %s on line %d
+bool(false)
diff --git a/ext/odbc/tests/odbc_data_source_001.phpt b/ext/odbc/tests/odbc_data_source_001.phpt
new file mode 100644
index 0000000..44761fe
--- /dev/null
+++ b/ext/odbc/tests/odbc_data_source_001.phpt
@@ -0,0 +1,25 @@
+--TEST--
+odbc_data_source(): Basic test
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+var_dump(odbc_data_source($conn, NULL));
+var_dump(odbc_data_source($conn, ''));
+var_dump(odbc_data_source($conn, SQL_FETCH_FIRST));
+
+?>
+--EXPECTF--
+Warning: odbc_data_source(): Invalid fetch type (0) in %s on line %d
+bool(false)
+
+Warning: odbc_data_source(): Invalid fetch type (0) in %s on line %d
+bool(false)
+array(%d) {
+%a
+}
diff --git a/ext/odbc/tests/odbc_exec_001.phpt b/ext/odbc/tests/odbc_exec_001.phpt
new file mode 100644
index 0000000..02b16ae
--- /dev/null
+++ b/ext/odbc/tests/odbc_exec_001.phpt
@@ -0,0 +1,40 @@
+--TEST--
+odbc_exec(): Basic test
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+odbc_exec($conn, 'foo', 'bar');
+odbc_exec($conn, 'foo');
+
+odbc_exec($conn, '', '');
+odbc_exec($conn, '');
+
+odbc_exec($conn, 1, 1);
+odbc_exec($conn, 1);
+
+odbc_exec($conn, NULL, NULL);
+odbc_exec($conn, NULL);
+
+?>
+--EXPECTF--
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
+
+Warning: odbc_exec(): SQL error: %s in %s on line %d
diff --git a/ext/odbc/tests/odbc_exec_002.phpt b/ext/odbc/tests/odbc_exec_002.phpt
new file mode 100644
index 0000000..8f9672d
--- /dev/null
+++ b/ext/odbc/tests/odbc_exec_002.phpt
@@ -0,0 +1,36 @@
+--TEST--
+odbc_exec(): Getting data from query
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+odbc_exec($conn, 'CREATE DATABASE odbcTEST');
+
+odbc_exec($conn, 'CREATE TABLE FOO (TEST INT)');
+
+odbc_exec($conn, 'INSERT INTO FOO VALUES (1)');
+odbc_exec($conn, 'INSERT INTO FOO VALUES (2)');
+
+$res = odbc_exec($conn, 'SELECT * FROM FOO');
+
+var_dump(odbc_fetch_row($res));
+var_dump(odbc_result($res, 'test'));
+var_dump(odbc_fetch_array($res));
+
+odbc_exec($conn, 'DROP TABLE FOO');
+
+odbc_exec($conn, 'DROP DATABASE odbcTEST');
+
+?>
+--EXPECTF--
+bool(true)
+string(1) "1"
+array(1) {
+  ["TEST"]=>
+  string(1) "2"
+}
diff --git a/ext/odbc/tests/odbc_free_result_001.phpt b/ext/odbc/tests/odbc_free_result_001.phpt
new file mode 100644
index 0000000..cd7a15e
--- /dev/null
+++ b/ext/odbc/tests/odbc_free_result_001.phpt
@@ -0,0 +1,50 @@
+--TEST--
+odbc_free_result(): Basic test
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+odbc_exec($conn, 'CREATE DATABASE odbcTEST');
+
+odbc_exec($conn, 'CREATE TABLE FOO (TEST INT)');
+odbc_exec($conn, 'ALTER TABLE FOO ADD PRIMARY KEY FOO(TEST)');
+
+odbc_exec($conn, 'INSERT INTO FOO VALUES (1)');
+odbc_exec($conn, 'INSERT INTO FOO VALUES (2)');
+
+$res = odbc_exec($conn, 'SELECT * FROM FOO');
+
+var_dump(odbc_fetch_row($res));
+var_dump(odbc_result($res, 'test'));
+var_dump(odbc_free_result($res));
+var_dump(odbc_free_result($conn));
+var_dump(odbc_free_result(NULL));
+var_dump(odbc_fetch_row($res));
+var_dump(odbc_result($res, 'test'));
+
+odbc_exec($conn, 'DROP TABLE FOO');
+
+odbc_exec($conn, 'DROP DATABASE odbcTEST');
+
+?>
+--EXPECTF--
+bool(true)
+string(1) "1"
+bool(true)
+
+Warning: odbc_free_result(): supplied resource is not a valid ODBC result resource in %s on line %d
+bool(false)
+
+Warning: odbc_free_result(): supplied argument is not a valid ODBC result resource in %s on line %d
+bool(false)
+
+Warning: odbc_fetch_row(): %d is not a valid ODBC result resource in %s on line %d
+bool(false)
+
+Warning: odbc_result(): %d is not a valid ODBC result resource in %s on line %d
+bool(false)
diff --git a/ext/odbc/tests/odbc_tables_001.phpt b/ext/odbc/tests/odbc_tables_001.phpt
new file mode 100644
index 0000000..6b922f2
--- /dev/null
+++ b/ext/odbc/tests/odbc_tables_001.phpt
@@ -0,0 +1,29 @@
+--TEST--
+odbc_tables(): Basic test
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$conn = odbc_connect($dsn, $user, $pass);
+
+var_dump($result = odbc_tables($conn, '', '', '', ''));
+var_dump(odbc_fetch_row($result));
+
+var_dump($result = odbc_tables($conn, NULL, NULL, NULL, NULL));
+var_dump(odbc_fetch_row($result));
+
+var_dump($result = odbc_tables($conn, 'FOO', 'FOO', 'FOO', 'FOO'));
+var_dump(odbc_fetch_row($result));
+
+
+?>
+--EXPECTF--
+resource(%d) of type (odbc result)
+bool(false)
+resource(%d) of type (odbc result)
+bool(false)
+resource(%d) of type (odbc result)
+bool(false)
diff --git a/ext/odbc/tests/skipif.inc b/ext/odbc/tests/skipif.inc
new file mode 100644
index 0000000..179a5b1
--- /dev/null
+++ b/ext/odbc/tests/skipif.inc
@@ -0,0 +1,10 @@
+<?php
+
+if (!extension_loaded('odbc')) die('skip');
+
+include 'config.inc';
+
+$conn = @odbc_connect($dsn, $user, $pass);
+if (!$conn) {
+	die('skip could not connect');
+}
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index 52627ad..3c237d7 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: openssl.c,v 1.98.2.5.2.51 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: openssl.c,v 1.98.2.5.2.53 2009/04/20 10:00:41 mkoppanen Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -301,7 +301,9 @@ static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int s
 				str = X509_NAME_ENTRY_get_data(ne);
 				if (ASN1_STRING_type(str) != V_ASN1_UTF8STRING) {
 					to_add_len = ASN1_STRING_to_UTF8(&to_add, str);
-					add_next_index_stringl(subentries, (char *)to_add, to_add_len, 1);
+					if (to_add_len != -1) {
+						add_next_index_stringl(subentries, (char *)to_add, to_add_len, 1);
+					}
 				} else {
 					to_add = ASN1_STRING_data(str);
 					to_add_len = ASN1_STRING_length(str);
@@ -317,7 +319,7 @@ static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int s
 		} else {
 			zval_dtor(subentries);
 			FREE_ZVAL(subentries);
-			if (obj_cnt && str) {
+			if (obj_cnt && str && to_add_len > -1) {
 				add_assoc_stringl(subitem, sname, (char *)to_add, to_add_len, 1);
 			}
 		}
@@ -3892,6 +3894,7 @@ SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC) /* {{{
 	char *cipherlist = NULL;
 	int ok = 1;
 
+	ERR_clear_error();
 
 	/* look at context options in the stream and set appropriate verification flags */
 	if (GET_VER_OPT("verify_peer") && zval_is_true(*val)) {
diff --git a/ext/openssl/tests/bug47828.phpt b/ext/openssl/tests/bug47828.phpt
new file mode 100644
index 0000000..a3161fa
--- /dev/null
+++ b/ext/openssl/tests/bug47828.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #47828 (segfaults when a UTF-8 conversion fails openssl_x509_parse())
+--SKIPIF--
+<?php if (!extension_loaded("openssl")) die("skip"); ?>
+--FILE--
+<?php
+$csr = "-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgICAtUwDQYJKoZIhvcNAQEFBQAwgewxFjAUBgNVBC0DDQBT
+UFI5NjEyMTdOSzkxETAPBgNVBAcTCENveW9hY+FuMQswCQYDVQQIEwJERjELMAkG
+A1UEBhMCTVgxDjAMBgNVBBETBTA0MDAwMR8wHQYDVQQJExZQYW56YWNvbGEgIzYy
+IDFlciBwaXNvMSgwJgYDVQQDEx9BdXRvcmlkYWQgY2VydGlmaWNhZG9yYSBJbnRl
+cm5hMRMwEQYDVQQLEwpUZWNub2xvZ+1hMRMwEQYDVQQKEwpTZWd1cmlEYXRhMSAw
+HgYJKoZIhvcNAQkBFhFhY0BzZWd1cmlkYXRhLmNvbTAeFw0wNzAyMTIwMDAwMDBa
+Fw0xMjAyMjkwMDAwMDBaMIIBDDEWMBQGA1UELQMNAFNQUjk2MTIxN05LOTEXMBUG
+A1UEBxMOQWx2YXJvIE9icmVnb24xDTALBgNVBAgTBEQuRi4xCzAJBgNVBAYTAk1Y
+MQ4wDAYDVQQREwUwMTAwMDEoMCYGA1UECRMfSW5zdXJnZW50ZXMgU3VyIDIzNzUs
+IDNlci4gUGlzbzEbMBkGA1UEAxMSd3d3LnNlZ3VyaWRhdGEuY29tMREwDwYDVQQL
+EwhJbnRlcm5ldDEpMCcGA1UEChMgU2VndXJpRGF0YSBQcml2YWRhLCBTLkEuIGRl
+IEMuVi4xKDAmBgkqhkiG9w0BCQEWGXBvc3RtYXN0ZXJAc2VndXJpZGF0YS5jb20w
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANG/rb52Ou//dnkHysR5m7T4r8QM
+KOM/CP0OEXTOC+a+47RsZjqNiZsBkSeR92OFPpkw5bJ85IAD/Tgx7Tli3ryJfrdk
+WMfkXpzWW0YmeTrghL0DMNd8nYc9voVv+OGnIZ0W4Mhz31eiThmyy7Fs8ZlFyfkR
+REj5OQvq+z+NP/n/AgMBAAGjODA2MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1Ud
+DwQFAwMH6AAwEQYJYIZIAYb4QgEBBAQDAgBAMA0GCSqGSIb3DQEBBQUAA4IBAQCq
+nBqQEb7H6Gxi4KXBn1lrPd5KWO40iSD7BREU8e0eI1ZLZvi4IEAlmyG81Le037jo
+irMUDS2Ue5WI61QnGw4LhnYlCIuffU7fTs+UbrOE4qNU67G+XBfjk0gHkXHmEYbb
+EOR9OHeDcYFgcl3j4SLg/ff6oRYbMkQRCrgQzrl/MNkuqDWJrcigS9OD6OTgRyEo
+7Zvf7/ofWIzTIvINbfjQzSTr8AbI4SbuU9iKgVGDQQF6cfpBmOYgnr3QPuoTQCoU
+pz9H9wBlz/Nmw12YtfCmGqpIFAxpRGFQTGPNJWr4FdZkUM792lm7Sf3zzSvi8Ruz
+M3dwifRsZyZyruy4tMsu
+-----END CERTIFICATE-----
+";
+$cert = str_replace("\\n", "\n", $csr);
+$arr = openssl_x509_parse($cert);
+var_dump($arr['hash']);
+echo "Done";
+?>
+--EXPECT--
+string(8) "9337ed77"
+Done
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index f14358f..c133fa3 100755
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: pcntl.c,v 1.48.2.2.2.7 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: pcntl.c,v 1.48.2.2.2.8 2009/05/26 14:02:34 lbarnaud Exp $ */
 
 #define PCNTL_DEBUG 0
 
@@ -374,9 +374,7 @@ PHP_FUNCTION(pcntl_wexitstatus)
 	
 	status_word = (int) Z_LVAL_PP(status);
 
-	/* WEXITSTATUS only returns 8 bits so we *MUST* cast this to signed char
-	   if you want to have valid negative exit codes */
-	RETURN_LONG((signed char) WEXITSTATUS(status_word));
+	RETURN_LONG(WEXITSTATUS(status_word));
 #else
 	RETURN_FALSE;
 #endif
diff --git a/ext/pcntl/tests/001.phpt b/ext/pcntl/tests/001.phpt
index 74c5291..9543d57 100644
--- a/ext/pcntl/tests/001.phpt
+++ b/ext/pcntl/tests/001.phpt
@@ -73,7 +73,7 @@ test_stop_signal();
 Staring wait.h tests....
 
 Testing pcntl_wifexited and wexitstatus....
-Exited With: -1
+Exited With: 255
 
 Testing pcntl_wifsignaled....
 Process was terminated by signal : SIGTERM
diff --git a/ext/pcntl/tests/bug47566.phpt b/ext/pcntl/tests/bug47566.phpt
new file mode 100644
index 0000000..8a69e6b
--- /dev/null
+++ b/ext/pcntl/tests/bug47566.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #47566 (return value of pcntl_wexitstatus())
+--SKIPIF--
+<?php if (!extension_loaded("pcntl")) print "skip"; ?>
+--FILE--
+<?
+$pid = pcntl_fork();
+if ($pid == -1) {
+ echo "Unable to fork";
+ exit;
+} elseif ($pid) {
+ $epid = pcntl_waitpid(-1,$status);
+ var_dump(pcntl_wexitstatus($status));
+} else {
+ exit(128);
+}
+?>
+--EXPECT--
+int(128)
diff --git a/ext/pcre/pcrelib/AUTHORS b/ext/pcre/pcrelib/AUTHORS
index 88b993b..44ff433 100644
--- a/ext/pcre/pcrelib/AUTHORS
+++ b/ext/pcre/pcrelib/AUTHORS
@@ -8,7 +8,7 @@ Email domain:     cam.ac.uk
 University of Cambridge Computing Service,
 Cambridge, England.
 
-Copyright (c) 1997-2008 University of Cambridge
+Copyright (c) 1997-2009 University of Cambridge
 All rights reserved
 
 
diff --git a/ext/pcre/pcrelib/ChangeLog b/ext/pcre/pcrelib/ChangeLog
index fa137fb..93a5415 100644
--- a/ext/pcre/pcrelib/ChangeLog
+++ b/ext/pcre/pcrelib/ChangeLog
@@ -1,6 +1,128 @@
 ChangeLog for PCRE
 ------------------
 
+Version 7.9 11-Apr-09
+---------------------
+
+1.  When building with support for bzlib/zlib (pcregrep) and/or readline
+    (pcretest), all targets were linked against these libraries. This included
+    libpcre, libpcreposix, and libpcrecpp, even though they do not use these
+    libraries. This caused unwanted dependencies to be created. This problem
+    has been fixed, and now only pcregrep is linked with bzlib/zlib and only
+    pcretest is linked with readline.
+
+2.  The "typedef int BOOL" in pcre_internal.h that was included inside the
+    "#ifndef FALSE" condition by an earlier change (probably 7.8/18) has been
+    moved outside it again, because FALSE and TRUE are already defined in AIX,
+    but BOOL is not.
+
+3.  The pcre_config() function was treating the PCRE_MATCH_LIMIT and
+    PCRE_MATCH_LIMIT_RECURSION values as ints, when they should be long ints.
+
+4.  The pcregrep documentation said spaces were inserted as well as colons (or
+    hyphens) following file names and line numbers when outputting matching
+    lines. This is not true; no spaces are inserted. I have also clarified the
+    wording for the --colour (or --color) option.
+
+5.  In pcregrep, when --colour was used with -o, the list of matching strings
+    was not coloured; this is different to GNU grep, so I have changed it to be
+    the same.
+
+6.  When --colo(u)r was used in pcregrep, only the first matching substring in
+    each matching line was coloured. Now it goes on to look for further matches
+    of any of the test patterns, which is the same behaviour as GNU grep.
+
+7.  A pattern that could match an empty string could cause pcregrep to loop; it
+    doesn't make sense to accept an empty string match in pcregrep, so I have
+    locked it out (using PCRE's PCRE_NOTEMPTY option). By experiment, this
+    seems to be how GNU grep behaves.
+
+8.  The pattern (?(?=.*b)b|^) was incorrectly compiled as "match must be at
+    start or after a newline", because the conditional assertion was not being
+    correctly handled. The rule now is that both the assertion and what follows
+    in the first alternative must satisfy the test.
+
+9.  If auto-callout was enabled in a pattern with a conditional group whose
+    condition was an assertion, PCRE could crash during matching, both with
+    pcre_exec() and pcre_dfa_exec().
+
+10. The PCRE_DOLLAR_ENDONLY option was not working when pcre_dfa_exec() was
+    used for matching.
+
+11. Unicode property support in character classes was not working for
+    characters (bytes) greater than 127 when not in UTF-8 mode.
+
+12. Added the -M command line option to pcretest.
+
+14. Added the non-standard REG_NOTEMPTY option to the POSIX interface.
+
+15. Added the PCRE_NO_START_OPTIMIZE match-time option.
+
+16. Added comments and documentation about mis-use of no_arg in the C++
+    wrapper.
+
+17. Implemented support for UTF-8 encoding in EBCDIC environments, a patch
+    from Martin Jerabek that uses macro names for all relevant character and
+    string constants.
+
+18. Added to pcre_internal.h two configuration checks: (a) If both EBCDIC and
+    SUPPORT_UTF8 are set, give an error; (b) If SUPPORT_UCP is set without
+    SUPPORT_UTF8, define SUPPORT_UTF8. The "configure" script handles both of
+    these, but not everybody uses configure.
+
+19. A conditional group that had only one branch was not being correctly
+    recognized as an item that could match an empty string. This meant that an
+    enclosing group might also not be so recognized, causing infinite looping
+    (and probably a segfault) for patterns such as ^"((?(?=[a])[^"])|b)*"$
+    with the subject "ab", where knowledge that the repeated group can match
+    nothing is needed in order to break the loop.
+
+20. If a pattern that was compiled with callouts was matched using pcre_dfa_
+    exec(), but without supplying a callout function, matching went wrong.
+
+21. If PCRE_ERROR_MATCHLIMIT occurred during a recursion, there was a memory
+    leak if the size of the offset vector was greater than 30. When the vector
+    is smaller, the saved offsets during recursion go onto a local stack
+    vector, but for larger vectors malloc() is used. It was failing to free
+    when the recursion yielded PCRE_ERROR_MATCH_LIMIT (or any other "abnormal"
+    error, in fact).
+
+22. There was a missing #ifdef SUPPORT_UTF8 round one of the variables in the
+    heapframe that is used only when UTF-8 support is enabled. This caused no
+    problem, but was untidy.
+
+23. Steven Van Ingelgem's patch to CMakeLists.txt to change the name
+    CMAKE_BINARY_DIR to PROJECT_BINARY_DIR so that it works when PCRE is
+    included within another project.
+
+24. Steven Van Ingelgem's patches to add more options to the CMake support,
+    slightly modified by me:
+
+      (a) PCRE_BUILD_TESTS can be set OFF not to build the tests, including
+          not building pcregrep.
+
+      (b) PCRE_BUILD_PCREGREP can be see OFF not to build pcregrep, but only
+          if PCRE_BUILD_TESTS is also set OFF, because the tests use pcregrep.
+
+25. Forward references, both numeric and by name, in patterns that made use of
+    duplicate group numbers, could behave incorrectly or give incorrect errors,
+    because when scanning forward to find the reference group, PCRE was not
+    taking into account the duplicate group numbers. A pattern such as
+    ^X(?3)(a)(?|(b)|(q))(Y) is an example.
+
+26. Changed a few more instances of "const unsigned char *" to USPTR, making
+    the feature of a custom pointer more persuasive (as requested by a user).
+
+27. Wrapped the definitions of fileno and isatty for Windows, which appear in
+    pcretest.c, inside #ifndefs, because it seems they are sometimes already
+    pre-defined.
+
+28. Added support for (*UTF8) at the start of a pattern.
+
+29. Arrange for flags added by the "release type" setting in CMake to be shown
+    in the configuration summary.
+
+
 Version 7.8 05-Sep-08
 ---------------------
 
diff --git a/ext/pcre/pcrelib/LICENCE b/ext/pcre/pcrelib/LICENCE
index 03fabc6..ff443a9 100644
--- a/ext/pcre/pcrelib/LICENCE
+++ b/ext/pcre/pcrelib/LICENCE
@@ -22,7 +22,7 @@ Email domain:     cam.ac.uk
 University of Cambridge Computing Service,
 Cambridge, England.
 
-Copyright (c) 1997-2008 University of Cambridge
+Copyright (c) 1997-2009 University of Cambridge
 All rights reserved.
 
 
diff --git a/ext/pcre/pcrelib/NEWS b/ext/pcre/pcrelib/NEWS
index 43e47b6..2b26fcc 100644
--- a/ext/pcre/pcrelib/NEWS
+++ b/ext/pcre/pcrelib/NEWS
@@ -1,6 +1,11 @@
 News about PCRE releases
 ------------------------
 
+Release 7.9 11-Apr-09
+---------------------
+
+Mostly bugfixes and tidies with just a couple of minor functional additions.
+
 
 Release 7.8 05-Sep-08
 ---------------------
diff --git a/ext/pcre/pcrelib/NON-UNIX-USE b/ext/pcre/pcrelib/NON-UNIX-USE
index bf5c41a..803e73e 100644
--- a/ext/pcre/pcrelib/NON-UNIX-USE
+++ b/ext/pcre/pcrelib/NON-UNIX-USE
@@ -23,8 +23,8 @@ I (Philip Hazel) have no experience of Windows or VMS sytems and how their
 libraries work. The items in the PCRE distribution and Makefile that relate to
 anything other than Unix-like systems are untested by me.
 
-There are some other comments and files in the Contrib directory on the ftp
-site that you may find useful. See
+There are some other comments and files (including some documentation in CHM
+format) in the Contrib directory on the FTP site:
 
   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
 
@@ -373,6 +373,13 @@ Michael Roy sent these comments about building PCRE under Windows with BCC5.5:
   line.
 
 
+BUILDING UNDER WINDOWS CE WITH VISUAL STUDIO 200x
+
+Vincent Richomme sent a zip archive of files to help with this process. They
+can be found in the file "pcre-vsbuild.zip" in the Contrib directory of the FTP
+site.
+
+
 BUILDING PCRE ON OPENVMS
 
 Dan Mooney sent the following comments about building PCRE on OpenVMS. They
@@ -437,5 +444,5 @@ $!   Locale could not be set to fr
 $!
 =========================
 
-Last Updated: 05 September 2008
+Last Updated: 17 March 2009
 ****
diff --git a/ext/pcre/pcrelib/README b/ext/pcre/pcrelib/README
index 3879038..6b7c83f 100644
--- a/ext/pcre/pcrelib/README
+++ b/ext/pcre/pcrelib/README
@@ -85,6 +85,10 @@ documentation is supplied in two other forms:
      in various ways, and rooted in a file called index.html, is distributed in
      doc/html and installed in <prefix>/share/doc/pcre/html.
 
+Users of PCRE have contributed files containing the documentation for various
+releases in CHM format. These can be found in the Contrib directory of the FTP
+site (see next section).
+
 
 Contributions by users of PCRE
 ------------------------------
@@ -161,10 +165,13 @@ library. You can read more about them in the pcrebuild man page.
   it will try to find a C++ compiler and C++ header files, and if it succeeds,
   it will try to build the C++ wrapper.
 
-. If you want to make use of the support for UTF-8 character strings in PCRE,
-  you must add --enable-utf8 to the "configure" command. Without it, the code
-  for handling UTF-8 is not included in the library. (Even when included, it
-  still has to be enabled by an option at run time.)
+. If you want to make use of the support for UTF-8 Unicode character strings in
+  PCRE, you must add --enable-utf8 to the "configure" command. Without it, the
+  code for handling UTF-8 is not included in the library. Even when included,
+  it still has to be enabled by an option at run time. When PCRE is compiled
+  with this option, its input can only either be ASCII or UTF-8, even when
+  running on EBCDIC platforms. It is not possible to use both --enable-utf8 and
+  --enable-ebcdic at the same time.
 
 . If, in addition to support for UTF-8 character strings, you want to include
   support for the \P, \p, and \X sequences that recognize Unicode character
@@ -255,11 +262,13 @@ library. You can read more about them in the pcrebuild man page.
   pcre_chartables.c.dist. See "Character tables" below for further information.
 
 . It is possible to compile PCRE for use on systems that use EBCDIC as their
-  default character code (as opposed to ASCII) by specifying
+  character code (as opposed to ASCII) by specifying
 
   --enable-ebcdic
 
-  This automatically implies --enable-rebuild-chartables (see above).
+  This automatically implies --enable-rebuild-chartables (see above). However,
+  when PCRE is built this way, it always operates in EBCDIC. It cannot support
+  both EBCDIC and UTF-8.
 
 . It is possible to compile pcregrep to use libz and/or libbz2, in order to
   read .gz and .bz2 files (respectively), by specifying one or both of
@@ -286,7 +295,9 @@ library. You can read more about them in the pcrebuild man page.
   to specify something like LIBS="-lncurses" as well. This is because, to quote
   the readline INSTALL, "Readline uses the termcap functions, but does not link
   with the termcap or curses library itself, allowing applications which link
-  with readline the to choose an appropriate library."
+  with readline the to choose an appropriate library." If you get error
+  messages about missing functions tgetstr, tgetent, tputs, tgetflag, or tgoto,
+  this is the problem, and linking with the ncurses library should fix it.
 
 The "configure" script builds the following files for the basic C library:
 
@@ -753,4 +764,4 @@ The distribution should contain the following files:
 Philip Hazel
 Email local part: ph10
 Email domain: cam.ac.uk
-Last updated: 05 September 2008
+Last updated: 21 March 2009
diff --git a/ext/pcre/pcrelib/config.h b/ext/pcre/pcrelib/config.h
index dc6f267..21eabe5 100644
--- a/ext/pcre/pcrelib/config.h
+++ b/ext/pcre/pcrelib/config.h
@@ -40,7 +40,10 @@ them both to 0; an emulation function will be used. */
 
 /* If you are compiling for a system that uses EBCDIC instead of ASCII
    character codes, define this macro as 1. On systems that can use
-   "configure", this can be done via --enable-ebcdic. */
+   "configure", this can be done via --enable-ebcdic. PCRE will then assume
+   that all input strings are in EBCDIC. If you do not define this macro, PCRE
+   will assume input strings are ASCII or UTF-8 Unicode. It is not possible to
+   build a version of PCRE that supports both EBCDIC and UTF-8. */
 /* #undef EBCDIC */
 
 /* Define to 1 if you have the `bcopy' function. */
@@ -249,13 +252,13 @@ them both to 0; an emulation function will be used. */
 #define PACKAGE_NAME "PCRE"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PCRE 7.8"
+#define PACKAGE_STRING "PCRE 7.9"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "pcre"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "7.8"
+#define PACKAGE_VERSION "7.9"
 
 
 /* If you are compiling for a system other than a Unix-like system or
@@ -303,12 +306,15 @@ them both to 0; an emulation function will be used. */
 /* Define to enable support for Unicode properties */
 /* #undef SUPPORT_UCP */
 
-/* Define to enable support for the UTF-8 Unicode encoding. */
+/* Define to enable support for the UTF-8 Unicode encoding. This will work
+   even in an EBCDIC environment, but it is incompatible with the EBCDIC
+   macro. That is, PCRE can support *either* EBCDIC code *or* ASCII/UTF-8, but
+   not both at once. */
 /* #undef SUPPORT_UTF8 */
 
 /* Version number of package */
 #ifndef VERSION
-#define VERSION "7.8"
+#define VERSION "7.9"
 #endif
 
 /* Define to empty if `const' does not conform to ANSI C. */
diff --git a/ext/pcre/pcrelib/dftables.c b/ext/pcre/pcrelib/dftables.c
index 9593e64..63fc707 100644
--- a/ext/pcre/pcrelib/dftables.c
+++ b/ext/pcre/pcrelib/dftables.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/doc/pcre.txt b/ext/pcre/pcrelib/doc/pcre.txt
index d07bfea..9a2ce31 100644
--- a/ext/pcre/pcrelib/doc/pcre.txt
+++ b/ext/pcre/pcrelib/doc/pcre.txt
@@ -28,7 +28,7 @@ INTRODUCTION
        mately with Perl 5.10, including support for UTF-8 encoded strings  and
        Unicode general category properties. However, UTF-8 and Unicode support
        has to be explicitly enabled; it is not the default. The Unicode tables
-       correspond to Unicode release 5.0.0.
+       correspond to Unicode release 5.1.
 
        In  addition to the Perl-compatible matching function, PCRE contains an
        alternative matching function that matches the same  compiled  patterns
@@ -94,21 +94,21 @@ USER DOCUMENTATION
          pcrestack         discussion of stack usage
          pcretest          description of the pcretest testing command
 
-       In  addition,  in the "man" and HTML formats, there is a short page for
+       In addition, in the "man" and HTML formats, there is a short  page  for
        each C library function, listing its arguments and results.
 
 
 LIMITATIONS
 
-       There are some size limitations in PCRE but it is hoped that they  will
+       There  are some size limitations in PCRE but it is hoped that they will
        never in practice be relevant.
 
-       The  maximum  length of a compiled pattern is 65539 (sic) bytes if PCRE
+       The maximum length of a compiled pattern is 65539 (sic) bytes  if  PCRE
        is compiled with the default internal linkage size of 2. If you want to
-       process  regular  expressions  that are truly enormous, you can compile
-       PCRE with an internal linkage size of 3 or 4 (see the  README  file  in
-       the  source  distribution and the pcrebuild documentation for details).
-       In these cases the limit is substantially larger.  However,  the  speed
+       process regular expressions that are truly enormous,  you  can  compile
+       PCRE  with  an  internal linkage size of 3 or 4 (see the README file in
+       the source distribution and the pcrebuild documentation  for  details).
+       In  these  cases the limit is substantially larger.  However, the speed
        of execution is slower.
 
        All values in repeating quantifiers must be less than 65536.
@@ -119,26 +119,27 @@ LIMITATIONS
        The maximum length of name for a named subpattern is 32 characters, and
        the maximum number of named subpatterns is 10000.
 
-       The  maximum  length of a subject string is the largest positive number
-       that an integer variable can hold. However, when using the  traditional
+       The maximum length of a subject string is the largest  positive  number
+       that  an integer variable can hold. However, when using the traditional
        matching function, PCRE uses recursion to handle subpatterns and indef-
-       inite repetition.  This means that the available stack space may  limit
+       inite  repetition.  This means that the available stack space may limit
        the size of a subject string that can be processed by certain patterns.
        For a discussion of stack issues, see the pcrestack documentation.
 
 
 UTF-8 AND UNICODE PROPERTY SUPPORT
 
-       From release 3.3, PCRE has  had  some  support  for  character  strings
-       encoded  in the UTF-8 format. For release 4.0 this was greatly extended
-       to cover most common requirements, and in release 5.0  additional  sup-
+       From  release  3.3,  PCRE  has  had  some support for character strings
+       encoded in the UTF-8 format. For release 4.0 this was greatly  extended
+       to  cover  most common requirements, and in release 5.0 additional sup-
        port for Unicode general category properties was added.
 
-       In  order  process  UTF-8 strings, you must build PCRE to include UTF-8
-       support in the code, and, in addition,  you  must  call  pcre_compile()
-       with  the PCRE_UTF8 option flag. When you do this, both the pattern and
-       any subject strings that are matched against it are  treated  as  UTF-8
-       strings instead of just strings of bytes.
+       In order process UTF-8 strings, you must build PCRE  to  include  UTF-8
+       support  in  the  code,  and, in addition, you must call pcre_compile()
+       with the PCRE_UTF8 option flag, or the  pattern  must  start  with  the
+       sequence  (*UTF8).  When  either of these is the case, both the pattern
+       and any subject strings that are matched  against  it  are  treated  as
+       UTF-8 strings instead of just strings of bytes.
 
        If  you compile PCRE with UTF-8 support, but do not use it at run time,
        the library will be a bit bigger, but the additional run time  overhead
@@ -224,24 +225,25 @@ UTF-8 AND UNICODE PROPERTY SUPPORT
        includes Unicode property support, because to do otherwise  would  slow
        down  PCRE in many common cases. If you really want to test for a wider
        sense of, say, "digit", you must use Unicode  property  tests  such  as
-       \p{Nd}.
+       \p{Nd}.  Note  that  this  also applies to \b, because it is defined in
+       terms of \w and \W.
 
-       7.  Similarly,  characters that match the POSIX named character classes
+       7. Similarly, characters that match the POSIX named  character  classes
        are all low-valued characters.
 
-       8. However, the Perl 5.10 horizontal and vertical  whitespace  matching
+       8.  However,  the Perl 5.10 horizontal and vertical whitespace matching
        escapes (\h, \H, \v, and \V) do match all the appropriate Unicode char-
        acters.
 
-       9. Case-insensitive matching applies only to  characters  whose  values
-       are  less than 128, unless PCRE is built with Unicode property support.
-       Even when Unicode property support is available, PCRE  still  uses  its
-       own  character  tables when checking the case of low-valued characters,
-       so as not to degrade performance.  The Unicode property information  is
+       9.  Case-insensitive  matching  applies only to characters whose values
+       are less than 128, unless PCRE is built with Unicode property  support.
+       Even  when  Unicode  property support is available, PCRE still uses its
+       own character tables when checking the case of  low-valued  characters,
+       so  as not to degrade performance.  The Unicode property information is
        used only for characters with higher values. Even when Unicode property
        support is available, PCRE supports case-insensitive matching only when
-       there  is  a  one-to-one  mapping between a letter's cases. There are a
-       small number of many-to-one mappings in Unicode;  these  are  not  sup-
+       there is a one-to-one mapping between a letter's  cases.  There  are  a
+       small  number  of  many-to-one  mappings in Unicode; these are not sup-
        ported by PCRE.
 
 
@@ -251,15 +253,15 @@ AUTHOR
        University Computing Service
        Cambridge CB2 3QH, England.
 
-       Putting  an actual email address here seems to have been a spam magnet,
-       so I've taken it away. If you want to email me, use  my  two  initials,
+       Putting an actual email address here seems to have been a spam  magnet,
+       so  I've  taken  it away. If you want to email me, use my two initials,
        followed by the two digits 10, at the domain cam.ac.uk.
 
 
 REVISION
 
-       Last updated: 12 April 2008
-       Copyright (c) 1997-2008 University of Cambridge.
+       Last updated: 11 April 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -307,7 +309,7 @@ C++ SUPPORT
 
 UTF-8 SUPPORT
 
-       To build PCRE with support for UTF-8 character strings, add
+       To build PCRE with support for UTF-8 Unicode character strings, add
 
          --enable-utf8
 
@@ -316,6 +318,12 @@ UTF-8 SUPPORT
        have have to set the PCRE_UTF8 option when you call the  pcre_compile()
        function.
 
+       If  you set --enable-utf8 when compiling in an EBCDIC environment, PCRE
+       expects its input to be either ASCII or UTF-8 (depending on the runtime
+       option).  It  is not possible to support both EBCDIC and UTF-8 codes in
+       the same  version  of  the  library.  Consequently,  --enable-utf8  and
+       --enable-ebcdic are mutually exclusive.
+
 
 UNICODE CHARACTER PROPERTY SUPPORT
 
@@ -337,10 +345,10 @@ UNICODE CHARACTER PROPERTY SUPPORT
 
 CODE VALUE OF NEWLINE
 
-       By default, PCRE interprets character 10 (linefeed, LF)  as  indicating
+       By default, PCRE interprets the linefeed (LF) character  as  indicating
        the  end  of  a line. This is the normal newline character on Unix-like
-       systems. You can compile PCRE to use character 13 (carriage return, CR)
-       instead, by adding
+       systems. You can compile PCRE to use carriage return (CR)  instead,  by
+       adding
 
          --enable-newline-is-cr
 
@@ -363,28 +371,28 @@ CODE VALUE OF NEWLINE
 
        causes PCRE to recognize any Unicode newline sequence.
 
-       Whatever  line  ending convention is selected when PCRE is built can be
-       overridden when the library functions are called. At build time  it  is
+       Whatever line ending convention is selected when PCRE is built  can  be
+       overridden  when  the library functions are called. At build time it is
        conventional to use the standard for your operating system.
 
 
 WHAT \R MATCHES
 
-       By  default,  the  sequence \R in a pattern matches any Unicode newline
-       sequence, whatever has been selected as the line  ending  sequence.  If
+       By default, the sequence \R in a pattern matches  any  Unicode  newline
+       sequence,  whatever  has  been selected as the line ending sequence. If
        you specify
 
          --enable-bsr-anycrlf
 
-       the  default  is changed so that \R matches only CR, LF, or CRLF. What-
-       ever is selected when PCRE is built can be overridden when the  library
+       the default is changed so that \R matches only CR, LF, or  CRLF.  What-
+       ever  is selected when PCRE is built can be overridden when the library
        functions are called.
 
 
 BUILDING SHARED AND STATIC LIBRARIES
 
-       The  PCRE building process uses libtool to build both shared and static
-       Unix libraries by default. You can suppress one of these by adding  one
+       The PCRE building process uses libtool to build both shared and  static
+       Unix  libraries by default. You can suppress one of these by adding one
        of
 
          --disable-shared
@@ -396,9 +404,9 @@ BUILDING SHARED AND STATIC LIBRARIES
 POSIX MALLOC USAGE
 
        When PCRE is called through the POSIX interface (see the pcreposix doc-
-       umentation), additional working storage is  required  for  holding  the
-       pointers  to capturing substrings, because PCRE requires three integers
-       per substring, whereas the POSIX interface provides only  two.  If  the
+       umentation),  additional  working  storage  is required for holding the
+       pointers to capturing substrings, because PCRE requires three  integers
+       per  substring,  whereas  the POSIX interface provides only two. If the
        number of expected substrings is small, the wrapper function uses space
        on the stack, because this is faster than using malloc() for each call.
        The default threshold above which the stack is no longer used is 10; it
@@ -411,112 +419,113 @@ POSIX MALLOC USAGE
 
 HANDLING VERY LARGE PATTERNS
 
-       Within a compiled pattern, offset values are used  to  point  from  one
-       part  to another (for example, from an opening parenthesis to an alter-
-       nation metacharacter). By default, two-byte values are used  for  these
-       offsets,  leading  to  a  maximum size for a compiled pattern of around
-       64K. This is sufficient to handle all but the most  gigantic  patterns.
-       Nevertheless,  some  people do want to process enormous patterns, so it
-       is possible to compile PCRE to use three-byte or four-byte  offsets  by
+       Within  a  compiled  pattern,  offset values are used to point from one
+       part to another (for example, from an opening parenthesis to an  alter-
+       nation  metacharacter).  By default, two-byte values are used for these
+       offsets, leading to a maximum size for a  compiled  pattern  of  around
+       64K.  This  is sufficient to handle all but the most gigantic patterns.
+       Nevertheless, some people do want to process enormous patterns,  so  it
+       is  possible  to compile PCRE to use three-byte or four-byte offsets by
        adding a setting such as
 
          --with-link-size=3
 
-       to  the  configure  command.  The value given must be 2, 3, or 4. Using
-       longer offsets slows down the operation of PCRE because it has to  load
+       to the configure command. The value given must be 2,  3,  or  4.  Using
+       longer  offsets slows down the operation of PCRE because it has to load
        additional bytes when handling them.
 
 
 AVOIDING EXCESSIVE STACK USAGE
 
        When matching with the pcre_exec() function, PCRE implements backtrack-
-       ing by making recursive calls to an internal function  called  match().
-       In  environments  where  the size of the stack is limited, this can se-
-       verely limit PCRE's operation. (The Unix environment does  not  usually
+       ing  by  making recursive calls to an internal function called match().
+       In environments where the size of the stack is limited,  this  can  se-
+       verely  limit  PCRE's operation. (The Unix environment does not usually
        suffer from this problem, but it may sometimes be necessary to increase
-       the maximum stack size.  There is a discussion in the  pcrestack  docu-
-       mentation.)  An alternative approach to recursion that uses memory from
-       the heap to remember data, instead of using recursive  function  calls,
-       has  been  implemented to work round the problem of limited stack size.
+       the  maximum  stack size.  There is a discussion in the pcrestack docu-
+       mentation.) An alternative approach to recursion that uses memory  from
+       the  heap  to remember data, instead of using recursive function calls,
+       has been implemented to work round the problem of limited  stack  size.
        If you want to build a version of PCRE that works this way, add
 
          --disable-stack-for-recursion
 
-       to the configure command. With this configuration, PCRE  will  use  the
-       pcre_stack_malloc  and pcre_stack_free variables to call memory manage-
-       ment functions. By default these point to malloc() and free(), but  you
+       to  the  configure  command. With this configuration, PCRE will use the
+       pcre_stack_malloc and pcre_stack_free variables to call memory  manage-
+       ment  functions. By default these point to malloc() and free(), but you
        can replace the pointers so that your own functions are used.
 
-       Separate  functions  are  provided  rather  than  using pcre_malloc and
-       pcre_free because the  usage  is  very  predictable:  the  block  sizes
-       requested  are  always  the  same,  and  the blocks are always freed in
-       reverse order. A calling program might be able to  implement  optimized
-       functions  that  perform  better  than  malloc()  and free(). PCRE runs
+       Separate functions are  provided  rather  than  using  pcre_malloc  and
+       pcre_free  because  the  usage  is  very  predictable:  the block sizes
+       requested are always the same, and  the  blocks  are  always  freed  in
+       reverse  order.  A calling program might be able to implement optimized
+       functions that perform better  than  malloc()  and  free().  PCRE  runs
        noticeably more slowly when built in this way. This option affects only
-       the   pcre_exec()   function;   it   is   not   relevant  for  the  the
+       the  pcre_exec()  function;  it   is   not   relevant   for   the   the
        pcre_dfa_exec() function.
 
 
 LIMITING PCRE RESOURCE USAGE
 
-       Internally, PCRE has a function called match(), which it calls  repeat-
-       edly   (sometimes   recursively)  when  matching  a  pattern  with  the
-       pcre_exec() function. By controlling the maximum number of  times  this
-       function  may be called during a single matching operation, a limit can
-       be placed on the resources used by a single call  to  pcre_exec().  The
-       limit  can be changed at run time, as described in the pcreapi documen-
-       tation. The default is 10 million, but this can be changed by adding  a
+       Internally,  PCRE has a function called match(), which it calls repeat-
+       edly  (sometimes  recursively)  when  matching  a  pattern   with   the
+       pcre_exec()  function.  By controlling the maximum number of times this
+       function may be called during a single matching operation, a limit  can
+       be  placed  on  the resources used by a single call to pcre_exec(). The
+       limit can be changed at run time, as described in the pcreapi  documen-
+       tation.  The default is 10 million, but this can be changed by adding a
        setting such as
 
          --with-match-limit=500000
 
-       to   the   configure  command.  This  setting  has  no  effect  on  the
+       to  the  configure  command.  This  setting  has  no  effect   on   the
        pcre_dfa_exec() matching function.
 
-       In some environments it is desirable to limit the  depth  of  recursive
+       In  some  environments  it is desirable to limit the depth of recursive
        calls of match() more strictly than the total number of calls, in order
-       to restrict the maximum amount of stack (or heap,  if  --disable-stack-
+       to  restrict  the maximum amount of stack (or heap, if --disable-stack-
        for-recursion is specified) that is used. A second limit controls this;
-       it defaults to the value that  is  set  for  --with-match-limit,  which
-       imposes  no  additional constraints. However, you can set a lower limit
+       it  defaults  to  the  value  that is set for --with-match-limit, which
+       imposes no additional constraints. However, you can set a  lower  limit
        by adding, for example,
 
          --with-match-limit-recursion=10000
 
-       to the configure command. This value can  also  be  overridden  at  run
+       to  the  configure  command.  This  value can also be overridden at run
        time.
 
 
 CREATING CHARACTER TABLES AT BUILD TIME
 
-       PCRE  uses fixed tables for processing characters whose code values are
-       less than 256. By default, PCRE is built with a set of tables that  are
-       distributed  in  the  file pcre_chartables.c.dist. These tables are for
+       PCRE uses fixed tables for processing characters whose code values  are
+       less  than 256. By default, PCRE is built with a set of tables that are
+       distributed in the file pcre_chartables.c.dist. These  tables  are  for
        ASCII codes only. If you add
 
          --enable-rebuild-chartables
 
-       to the configure command, the distributed tables are  no  longer  used.
-       Instead,  a  program  called dftables is compiled and run. This outputs
+       to  the  configure  command, the distributed tables are no longer used.
+       Instead, a program called dftables is compiled and  run.  This  outputs
        the source for new set of tables, created in the default locale of your
        C runtime system. (This method of replacing the tables does not work if
-       you are cross compiling, because dftables is run on the local host.  If
-       you  need  to  create alternative tables when cross compiling, you will
+       you  are cross compiling, because dftables is run on the local host. If
+       you need to create alternative tables when cross  compiling,  you  will
        have to do so "by hand".)
 
 
 USING EBCDIC CODE
 
-       PCRE assumes by default that it will run in an  environment  where  the
-       character  code  is  ASCII  (or Unicode, which is a superset of ASCII).
-       This is the case for most computer operating systems.  PCRE  can,  how-
+       PCRE  assumes  by  default that it will run in an environment where the
+       character code is ASCII (or Unicode, which is  a  superset  of  ASCII).
+       This  is  the  case for most computer operating systems. PCRE can, how-
        ever, be compiled to run in an EBCDIC environment by adding
 
          --enable-ebcdic
 
        to the configure command. This setting implies --enable-rebuild-charta-
-       bles. You should only use it if you know that  you  are  in  an  EBCDIC
-       environment (for example, an IBM mainframe operating system).
+       bles.  You  should  only  use  it if you know that you are in an EBCDIC
+       environment (for example,  an  IBM  mainframe  operating  system).  The
+       --enable-ebcdic option is incompatible with --enable-utf8.
 
 
 PCREGREP OPTIONS FOR COMPRESSED FILE SUPPORT
@@ -578,8 +587,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 13 April 2008
-       Copyright (c) 1997-2008 University of Cambridge.
+       Last updated: 17 March 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -999,7 +1008,7 @@ MULTITHREADING
        pcre_malloc, pcre_free, pcre_stack_malloc, and pcre_stack_free, and the
        callout function pointed to by pcre_callout, are shared by all threads.
 
-       The compiled form of a regular expression is not altered during  match-
+       The  compiled form of a regular expression is not altered during match-
        ing, so the same compiled pattern can safely be used by several threads
        at once.
 
@@ -1007,10 +1016,10 @@ MULTITHREADING
 SAVING PRECOMPILED PATTERNS FOR LATER USE
 
        The compiled form of a regular expression can be saved and re-used at a
-       later  time,  possibly by a different program, and even on a host other
-       than the one on which  it  was  compiled.  Details  are  given  in  the
-       pcreprecompile  documentation.  However, compiling a regular expression
-       with one version of PCRE for use with a different version is not  guar-
+       later time, possibly by a different program, and even on a  host  other
+       than  the  one  on  which  it  was  compiled.  Details are given in the
+       pcreprecompile documentation. However, compiling a  regular  expression
+       with  one version of PCRE for use with a different version is not guar-
        anteed to work and may cause crashes.
 
 
@@ -1018,33 +1027,34 @@ CHECKING BUILD-TIME OPTIONS
 
        int pcre_config(int what, void *where);
 
-       The  function pcre_config() makes it possible for a PCRE client to dis-
+       The function pcre_config() makes it possible for a PCRE client to  dis-
        cover which optional features have been compiled into the PCRE library.
-       The  pcrebuild documentation has more details about these optional fea-
+       The pcrebuild documentation has more details about these optional  fea-
        tures.
 
-       The first argument for pcre_config() is an  integer,  specifying  which
+       The  first  argument  for pcre_config() is an integer, specifying which
        information is required; the second argument is a pointer to a variable
-       into which the information is  placed.  The  following  information  is
+       into  which  the  information  is  placed. The following information is
        available:
 
          PCRE_CONFIG_UTF8
 
-       The  output is an integer that is set to one if UTF-8 support is avail-
+       The output is an integer that is set to one if UTF-8 support is  avail-
        able; otherwise it is set to zero.
 
          PCRE_CONFIG_UNICODE_PROPERTIES
 
-       The output is an integer that is set to  one  if  support  for  Unicode
+       The  output  is  an  integer  that is set to one if support for Unicode
        character properties is available; otherwise it is set to zero.
 
          PCRE_CONFIG_NEWLINE
 
-       The  output  is  an integer whose value specifies the default character
-       sequence that is recognized as meaning "newline". The four values  that
+       The output is an integer whose value specifies  the  default  character
+       sequence  that is recognized as meaning "newline". The four values that
        are supported are: 10 for LF, 13 for CR, 3338 for CRLF, -2 for ANYCRLF,
-       and -1 for ANY. The default should normally be  the  standard  sequence
-       for your operating system.
+       and  -1  for  ANY.  Though they are derived from ASCII, the same values
+       are returned in EBCDIC environments. The default should normally corre-
+       spond to the standard sequence for your operating system.
 
          PCRE_CONFIG_BSR
 
@@ -1071,24 +1081,25 @@ CHECKING BUILD-TIME OPTIONS
 
          PCRE_CONFIG_MATCH_LIMIT
 
-       The output is an integer that gives the default limit for the number of
-       internal  matching  function  calls in a pcre_exec() execution. Further
-       details are given with pcre_exec() below.
+       The output is a long integer that gives the default limit for the  num-
+       ber  of  internal  matching  function calls in a pcre_exec() execution.
+       Further details are given with pcre_exec() below.
 
          PCRE_CONFIG_MATCH_LIMIT_RECURSION
 
-       The output is an integer that gives the default limit for the depth  of
-       recursion  when calling the internal matching function in a pcre_exec()
-       execution. Further details are given with pcre_exec() below.
+       The output is a long integer that gives the default limit for the depth
+       of   recursion  when  calling  the  internal  matching  function  in  a
+       pcre_exec() execution.  Further  details  are  given  with  pcre_exec()
+       below.
 
          PCRE_CONFIG_STACKRECURSE
 
-       The output is an integer that is set to one if internal recursion  when
+       The  output is an integer that is set to one if internal recursion when
        running pcre_exec() is implemented by recursive function calls that use
-       the stack to remember their state. This is the usual way that  PCRE  is
+       the  stack  to remember their state. This is the usual way that PCRE is
        compiled. The output is zero if PCRE was compiled to use blocks of data
-       on the  heap  instead  of  recursive  function  calls.  In  this  case,
-       pcre_stack_malloc  and  pcre_stack_free  are  called  to  manage memory
+       on  the  heap  instead  of  recursive  function  calls.  In  this case,
+       pcre_stack_malloc and  pcre_stack_free  are  called  to  manage  memory
        blocks on the heap, thus avoiding the use of the stack.
 
 
@@ -1105,31 +1116,32 @@ COMPILING A PATTERN
 
        Either of the functions pcre_compile() or pcre_compile2() can be called
        to compile a pattern into an internal form. The only difference between
-       the two interfaces is that pcre_compile2() has an additional  argument,
+       the  two interfaces is that pcre_compile2() has an additional argument,
        errorcodeptr, via which a numerical error code can be returned.
 
        The pattern is a C string terminated by a binary zero, and is passed in
-       the pattern argument. A pointer to a single block  of  memory  that  is
-       obtained  via  pcre_malloc is returned. This contains the compiled code
+       the  pattern  argument.  A  pointer to a single block of memory that is
+       obtained via pcre_malloc is returned. This contains the  compiled  code
        and related data. The pcre type is defined for the returned block; this
        is a typedef for a structure whose contents are not externally defined.
        It is up to the caller to free the memory (via pcre_free) when it is no
        longer required.
 
-       Although  the compiled code of a PCRE regex is relocatable, that is, it
+       Although the compiled code of a PCRE regex is relocatable, that is,  it
        does not depend on memory location, the complete pcre data block is not
-       fully  relocatable, because it may contain a copy of the tableptr argu-
+       fully relocatable, because it may contain a copy of the tableptr  argu-
        ment, which is an address (see below).
 
        The options argument contains various bit settings that affect the com-
-       pilation.  It  should be zero if no options are required. The available
-       options are described below. Some of them, in  particular,  those  that
-       are  compatible  with  Perl,  can also be set and unset from within the
-       pattern (see the detailed description  in  the  pcrepattern  documenta-
-       tion).  For  these options, the contents of the options argument speci-
-       fies their initial settings at the start of compilation and  execution.
-       The  PCRE_ANCHORED  and PCRE_NEWLINE_xxx options can be set at the time
-       of matching as well as at compile time.
+       pilation. It should be zero if no options are required.  The  available
+       options  are  described  below. Some of them (in particular, those that
+       are compatible with Perl, but also some others) can  also  be  set  and
+       unset  from  within  the  pattern  (see the detailed description in the
+       pcrepattern documentation). For those options that can be different  in
+       different  parts  of  the pattern, the contents of the options argument
+       specifies their initial settings at the start of compilation and execu-
+       tion.  The PCRE_ANCHORED and PCRE_NEWLINE_xxx options can be set at the
+       time of matching as well as at compile time.
 
        If errptr is NULL, pcre_compile() returns NULL immediately.  Otherwise,
        if  compilation  of  a  pattern fails, pcre_compile() returns NULL, and
@@ -1335,51 +1347,51 @@ COMPILING A PATTERN
        and are therefore ignored.
 
        The newline option that is set at compile time becomes the default that
-       is  used for pcre_exec() and pcre_dfa_exec(), but it can be overridden.
+       is used for pcre_exec() and pcre_dfa_exec(), but it can be overridden.
 
          PCRE_NO_AUTO_CAPTURE
 
        If this option is set, it disables the use of numbered capturing paren-
-       theses  in the pattern. Any opening parenthesis that is not followed by
-       ? behaves as if it were followed by ?: but named parentheses can  still
-       be  used  for  capturing  (and  they acquire numbers in the usual way).
+       theses in the pattern. Any opening parenthesis that is not followed  by
+       ?  behaves as if it were followed by ?: but named parentheses can still
+       be used for capturing (and they acquire  numbers  in  the  usual  way).
        There is no equivalent of this option in Perl.
 
          PCRE_UNGREEDY
 
-       This option inverts the "greediness" of the quantifiers  so  that  they
-       are  not greedy by default, but become greedy if followed by "?". It is
-       not compatible with Perl. It can also be set by a (?U)  option  setting
+       This  option  inverts  the "greediness" of the quantifiers so that they
+       are not greedy by default, but become greedy if followed by "?". It  is
+       not  compatible  with Perl. It can also be set by a (?U) option setting
        within the pattern.
 
          PCRE_UTF8
 
-       This  option  causes PCRE to regard both the pattern and the subject as
-       strings of UTF-8 characters instead of single-byte  character  strings.
-       However,  it is available only when PCRE is built to include UTF-8 sup-
-       port. If not, the use of this option provokes an error. Details of  how
-       this  option  changes the behaviour of PCRE are given in the section on
+       This option causes PCRE to regard both the pattern and the  subject  as
+       strings  of  UTF-8 characters instead of single-byte character strings.
+       However, it is available only when PCRE is built to include UTF-8  sup-
+       port.  If not, the use of this option provokes an error. Details of how
+       this option changes the behaviour of PCRE are given in the  section  on
        UTF-8 support in the main pcre page.
 
          PCRE_NO_UTF8_CHECK
 
        When PCRE_UTF8 is set, the validity of the pattern as a UTF-8 string is
-       automatically  checked.  There  is  a  discussion about the validity of
-       UTF-8 strings in the main pcre page. If an invalid  UTF-8  sequence  of
-       bytes  is  found,  pcre_compile() returns an error. If you already know
+       automatically checked. There is a  discussion  about  the  validity  of
+       UTF-8  strings  in  the main pcre page. If an invalid UTF-8 sequence of
+       bytes is found, pcre_compile() returns an error. If  you  already  know
        that your pattern is valid, and you want to skip this check for perfor-
-       mance  reasons,  you  can set the PCRE_NO_UTF8_CHECK option. When it is
-       set, the effect of passing an invalid UTF-8  string  as  a  pattern  is
-       undefined.  It  may  cause your program to crash. Note that this option
-       can also be passed to pcre_exec() and pcre_dfa_exec(), to suppress  the
+       mance reasons, you can set the PCRE_NO_UTF8_CHECK option.  When  it  is
+       set,  the  effect  of  passing  an invalid UTF-8 string as a pattern is
+       undefined. It may cause your program to crash. Note  that  this  option
+       can  also be passed to pcre_exec() and pcre_dfa_exec(), to suppress the
        UTF-8 validity checking of subject strings.
 
 
 COMPILATION ERROR CODES
 
-       The  following  table  lists  the  error  codes than may be returned by
-       pcre_compile2(), along with the error messages that may be returned  by
-       both  compiling functions. As PCRE has developed, some error codes have
+       The following table lists the error  codes  than  may  be  returned  by
+       pcre_compile2(),  along with the error messages that may be returned by
+       both compiling functions. As PCRE has developed, some error codes  have
        fallen out of use. To avoid confusion, they have not been re-used.
 
           0  no error
@@ -1435,7 +1447,7 @@ COMPILATION ERROR CODES
          50  [this code is not in use]
          51  octal value is greater than \377 (not in UTF-8 mode)
          52  internal error: overran compiling workspace
-         53  internal  error:  previously-checked  referenced  subpattern  not
+         53   internal  error:  previously-checked  referenced  subpattern not
        found
          54  DEFINE group contains more than one branch
          55  repeating a DEFINE group is not allowed
@@ -1450,7 +1462,7 @@ COMPILATION ERROR CODES
          63  digit expected after (?+
          64  ] is an invalid data character in JavaScript compatibility mode
 
-       The  numbers  32  and 10000 in errors 48 and 49 are defaults; different
+       The numbers 32 and 10000 in errors 48 and 49  are  defaults;  different
        values may be used if the limits were changed when PCRE was built.
 
 
@@ -1459,32 +1471,32 @@ STUDYING A PATTERN
        pcre_extra *pcre_study(const pcre *code, int options
             const char **errptr);
 
-       If a compiled pattern is going to be used several times,  it  is  worth
+       If  a  compiled  pattern is going to be used several times, it is worth
        spending more time analyzing it in order to speed up the time taken for
-       matching. The function pcre_study() takes a pointer to a compiled  pat-
+       matching.  The function pcre_study() takes a pointer to a compiled pat-
        tern as its first argument. If studying the pattern produces additional
-       information that will help speed up matching,  pcre_study()  returns  a
-       pointer  to a pcre_extra block, in which the study_data field points to
+       information  that  will  help speed up matching, pcre_study() returns a
+       pointer to a pcre_extra block, in which the study_data field points  to
        the results of the study.
 
        The  returned  value  from  pcre_study()  can  be  passed  directly  to
-       pcre_exec().  However,  a  pcre_extra  block also contains other fields
-       that can be set by the caller before the block  is  passed;  these  are
+       pcre_exec(). However, a pcre_extra block  also  contains  other  fields
+       that  can  be  set  by the caller before the block is passed; these are
        described below in the section on matching a pattern.
 
-       If  studying  the  pattern  does not produce any additional information
+       If studying the pattern does not  produce  any  additional  information
        pcre_study() returns NULL. In that circumstance, if the calling program
-       wants  to  pass  any of the other fields to pcre_exec(), it must set up
+       wants to pass any of the other fields to pcre_exec(), it  must  set  up
        its own pcre_extra block.
 
-       The second argument of pcre_study() contains option bits.  At  present,
+       The  second  argument of pcre_study() contains option bits. At present,
        no options are defined, and this argument should always be zero.
 
-       The  third argument for pcre_study() is a pointer for an error message.
-       If studying succeeds (even if no data is  returned),  the  variable  it
-       points  to  is  set  to NULL. Otherwise it is set to point to a textual
+       The third argument for pcre_study() is a pointer for an error  message.
+       If  studying  succeeds  (even  if no data is returned), the variable it
+       points to is set to NULL. Otherwise it is set to  point  to  a  textual
        error message. This is a static string that is part of the library. You
-       must  not  try  to  free it. You should test the error pointer for NULL
+       must not try to free it. You should test the  error  pointer  for  NULL
        after calling pcre_study(), to be sure that it has run successfully.
 
        This is a typical call to pcre_study():
@@ -1496,62 +1508,62 @@ STUDYING A PATTERN
            &error);        /* set to NULL or points to a message */
 
        At present, studying a pattern is useful only for non-anchored patterns
-       that  do not have a single fixed starting character. A bitmap of possi-
+       that do not have a single fixed starting character. A bitmap of  possi-
        ble starting bytes is created.
 
 
 LOCALE SUPPORT
 
-       PCRE handles caseless matching, and determines whether  characters  are
-       letters,  digits, or whatever, by reference to a set of tables, indexed
-       by character value. When running in UTF-8 mode, this  applies  only  to
-       characters  with  codes  less than 128. Higher-valued codes never match
-       escapes such as \w or \d, but can be tested with \p if  PCRE  is  built
-       with  Unicode  character property support. The use of locales with Uni-
-       code is discouraged. If you are handling characters with codes  greater
-       than  128, you should either use UTF-8 and Unicode, or use locales, but
+       PCRE  handles  caseless matching, and determines whether characters are
+       letters, digits, or whatever, by reference to a set of tables,  indexed
+       by  character  value.  When running in UTF-8 mode, this applies only to
+       characters with codes less than 128. Higher-valued  codes  never  match
+       escapes  such  as  \w or \d, but can be tested with \p if PCRE is built
+       with Unicode character property support. The use of locales  with  Uni-
+       code  is discouraged. If you are handling characters with codes greater
+       than 128, you should either use UTF-8 and Unicode, or use locales,  but
        not try to mix the two.
 
-       PCRE contains an internal set of tables that are used  when  the  final
-       argument  of  pcre_compile()  is  NULL.  These  are sufficient for many
+       PCRE  contains  an  internal set of tables that are used when the final
+       argument of pcre_compile() is  NULL.  These  are  sufficient  for  many
        applications.  Normally, the internal tables recognize only ASCII char-
        acters. However, when PCRE is built, it is possible to cause the inter-
        nal tables to be rebuilt in the default "C" locale of the local system,
        which may cause them to be different.
 
-       The  internal tables can always be overridden by tables supplied by the
+       The internal tables can always be overridden by tables supplied by  the
        application that calls PCRE. These may be created in a different locale
-       from  the  default.  As more and more applications change to using Uni-
+       from the default. As more and more applications change  to  using  Uni-
        code, the need for this locale support is expected to die away.
 
-       External tables are built by calling  the  pcre_maketables()  function,
-       which  has no arguments, in the relevant locale. The result can then be
-       passed to pcre_compile() or pcre_exec()  as  often  as  necessary.  For
-       example,  to  build  and use tables that are appropriate for the French
-       locale (where accented characters with  values  greater  than  128  are
+       External  tables  are  built by calling the pcre_maketables() function,
+       which has no arguments, in the relevant locale. The result can then  be
+       passed  to  pcre_compile()  or  pcre_exec()  as often as necessary. For
+       example, to build and use tables that are appropriate  for  the  French
+       locale  (where  accented  characters  with  values greater than 128 are
        treated as letters), the following code could be used:
 
          setlocale(LC_CTYPE, "fr_FR");
          tables = pcre_maketables();
          re = pcre_compile(..., tables);
 
-       The  locale  name "fr_FR" is used on Linux and other Unix-like systems;
+       The locale name "fr_FR" is used on Linux and other  Unix-like  systems;
        if you are using Windows, the name for the French locale is "french".
 
-       When pcre_maketables() runs, the tables are built  in  memory  that  is
-       obtained  via  pcre_malloc. It is the caller's responsibility to ensure
-       that the memory containing the tables remains available for as long  as
+       When  pcre_maketables()  runs,  the  tables are built in memory that is
+       obtained via pcre_malloc. It is the caller's responsibility  to  ensure
+       that  the memory containing the tables remains available for as long as
        it is needed.
 
        The pointer that is passed to pcre_compile() is saved with the compiled
-       pattern, and the same tables are used via this pointer by  pcre_study()
+       pattern,  and the same tables are used via this pointer by pcre_study()
        and normally also by pcre_exec(). Thus, by default, for any single pat-
        tern, compilation, studying and matching all happen in the same locale,
        but different patterns can be compiled in different locales.
 
-       It  is  possible to pass a table pointer or NULL (indicating the use of
-       the internal tables) to pcre_exec(). Although  not  intended  for  this
-       purpose,  this facility could be used to match a pattern in a different
+       It is possible to pass a table pointer or NULL (indicating the  use  of
+       the  internal  tables)  to  pcre_exec(). Although not intended for this
+       purpose, this facility could be used to match a pattern in a  different
        locale from the one in which it was compiled. Passing table pointers at
        run time is discussed below in the section on matching a pattern.
 
@@ -1561,15 +1573,15 @@ INFORMATION ABOUT A PATTERN
        int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
             int what, void *where);
 
-       The  pcre_fullinfo() function returns information about a compiled pat-
+       The pcre_fullinfo() function returns information about a compiled  pat-
        tern. It replaces the obsolete pcre_info() function, which is neverthe-
        less retained for backwards compability (and is documented below).
 
-       The  first  argument  for  pcre_fullinfo() is a pointer to the compiled
-       pattern. The second argument is the result of pcre_study(), or NULL  if
-       the  pattern  was not studied. The third argument specifies which piece
-       of information is required, and the fourth argument is a pointer  to  a
-       variable  to  receive  the  data. The yield of the function is zero for
+       The first argument for pcre_fullinfo() is a  pointer  to  the  compiled
+       pattern.  The second argument is the result of pcre_study(), or NULL if
+       the pattern was not studied. The third argument specifies  which  piece
+       of  information  is required, and the fourth argument is a pointer to a
+       variable to receive the data. The yield of the  function  is  zero  for
        success, or one of the following negative numbers:
 
          PCRE_ERROR_NULL       the argument code was NULL
@@ -1577,9 +1589,9 @@ INFORMATION ABOUT A PATTERN
          PCRE_ERROR_BADMAGIC   the "magic number" was not found
          PCRE_ERROR_BADOPTION  the value of what was invalid
 
-       The "magic number" is placed at the start of each compiled  pattern  as
-       an  simple check against passing an arbitrary memory pointer. Here is a
-       typical call of pcre_fullinfo(), to obtain the length of  the  compiled
+       The  "magic  number" is placed at the start of each compiled pattern as
+       an simple check against passing an arbitrary memory pointer. Here is  a
+       typical  call  of pcre_fullinfo(), to obtain the length of the compiled
        pattern:
 
          int rc;
@@ -1590,76 +1602,76 @@ INFORMATION ABOUT A PATTERN
            PCRE_INFO_SIZE,   /* what is required */
            &length);         /* where to put the data */
 
-       The  possible  values for the third argument are defined in pcre.h, and
+       The possible values for the third argument are defined in  pcre.h,  and
        are as follows:
 
          PCRE_INFO_BACKREFMAX
 
-       Return the number of the highest back reference  in  the  pattern.  The
-       fourth  argument  should  point to an int variable. Zero is returned if
+       Return  the  number  of  the highest back reference in the pattern. The
+       fourth argument should point to an int variable. Zero  is  returned  if
        there are no back references.
 
          PCRE_INFO_CAPTURECOUNT
 
-       Return the number of capturing subpatterns in the pattern.  The  fourth
+       Return  the  number of capturing subpatterns in the pattern. The fourth
        argument should point to an int variable.
 
          PCRE_INFO_DEFAULT_TABLES
 
-       Return  a pointer to the internal default character tables within PCRE.
-       The fourth argument should point to an unsigned char *  variable.  This
+       Return a pointer to the internal default character tables within  PCRE.
+       The  fourth  argument should point to an unsigned char * variable. This
        information call is provided for internal use by the pcre_study() func-
-       tion. External callers can cause PCRE to use  its  internal  tables  by
+       tion.  External  callers  can  cause PCRE to use its internal tables by
        passing a NULL table pointer.
 
          PCRE_INFO_FIRSTBYTE
 
-       Return  information  about  the first byte of any matched string, for a
-       non-anchored pattern. The fourth argument should point to an int  vari-
-       able.  (This option used to be called PCRE_INFO_FIRSTCHAR; the old name
+       Return information about the first byte of any matched  string,  for  a
+       non-anchored  pattern. The fourth argument should point to an int vari-
+       able. (This option used to be called PCRE_INFO_FIRSTCHAR; the old  name
        is still recognized for backwards compatibility.)
 
-       If there is a fixed first byte, for example, from  a  pattern  such  as
+       If  there  is  a  fixed first byte, for example, from a pattern such as
        (cat|cow|coyote), its value is returned. Otherwise, if either
 
-       (a)  the pattern was compiled with the PCRE_MULTILINE option, and every
+       (a) the pattern was compiled with the PCRE_MULTILINE option, and  every
        branch starts with "^", or
 
        (b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not
        set (if it were set, the pattern would be anchored),
 
-       -1  is  returned, indicating that the pattern matches only at the start
-       of a subject string or after any newline within the  string.  Otherwise
+       -1 is returned, indicating that the pattern matches only at  the  start
+       of  a  subject string or after any newline within the string. Otherwise
        -2 is returned. For anchored patterns, -2 is returned.
 
          PCRE_INFO_FIRSTTABLE
 
-       If  the pattern was studied, and this resulted in the construction of a
+       If the pattern was studied, and this resulted in the construction of  a
        256-bit table indicating a fixed set of bytes for the first byte in any
-       matching  string, a pointer to the table is returned. Otherwise NULL is
-       returned. The fourth argument should point to an unsigned char *  vari-
+       matching string, a pointer to the table is returned. Otherwise NULL  is
+       returned.  The fourth argument should point to an unsigned char * vari-
        able.
 
          PCRE_INFO_HASCRORLF
 
-       Return  1  if  the  pattern  contains any explicit matches for CR or LF
-       characters, otherwise 0. The fourth argument should  point  to  an  int
-       variable.  An explicit match is either a literal CR or LF character, or
+       Return 1 if the pattern contains any explicit  matches  for  CR  or  LF
+       characters,  otherwise  0.  The  fourth argument should point to an int
+       variable. An explicit match is either a literal CR or LF character,  or
        \r or \n.
 
          PCRE_INFO_JCHANGED
 
-       Return 1 if the (?J) or (?-J) option setting is used  in  the  pattern,
-       otherwise  0. The fourth argument should point to an int variable. (?J)
+       Return  1  if  the (?J) or (?-J) option setting is used in the pattern,
+       otherwise 0. The fourth argument should point to an int variable.  (?J)
        and (?-J) set and unset the local PCRE_DUPNAMES option, respectively.
 
          PCRE_INFO_LASTLITERAL
 
-       Return the value of the rightmost literal byte that must exist  in  any
-       matched  string,  other  than  at  its  start,  if such a byte has been
+       Return  the  value of the rightmost literal byte that must exist in any
+       matched string, other than at its  start,  if  such  a  byte  has  been
        recorded. The fourth argument should point to an int variable. If there
-       is  no such byte, -1 is returned. For anchored patterns, a last literal
-       byte is recorded only if it follows something of variable  length.  For
+       is no such byte, -1 is returned. For anchored patterns, a last  literal
+       byte  is  recorded only if it follows something of variable length. For
        example, for the pattern /^a\d+z\d+/ the returned value is "z", but for
        /^a\dz\d/ the returned value is -1.
 
@@ -1667,34 +1679,34 @@ INFORMATION ABOUT A PATTERN
          PCRE_INFO_NAMEENTRYSIZE
          PCRE_INFO_NAMETABLE
 
-       PCRE supports the use of named as well as numbered capturing  parenthe-
-       ses.  The names are just an additional way of identifying the parenthe-
+       PCRE  supports the use of named as well as numbered capturing parenthe-
+       ses. The names are just an additional way of identifying the  parenthe-
        ses, which still acquire numbers. Several convenience functions such as
-       pcre_get_named_substring()  are  provided  for extracting captured sub-
-       strings by name. It is also possible to extract the data  directly,  by
-       first  converting  the  name to a number in order to access the correct
+       pcre_get_named_substring() are provided for  extracting  captured  sub-
+       strings  by  name. It is also possible to extract the data directly, by
+       first converting the name to a number in order to  access  the  correct
        pointers in the output vector (described with pcre_exec() below). To do
-       the  conversion,  you  need  to  use  the  name-to-number map, which is
+       the conversion, you need  to  use  the  name-to-number  map,  which  is
        described by these three values.
 
        The map consists of a number of fixed-size entries. PCRE_INFO_NAMECOUNT
        gives the number of entries, and PCRE_INFO_NAMEENTRYSIZE gives the size
-       of each entry; both of these  return  an  int  value.  The  entry  size
-       depends  on the length of the longest name. PCRE_INFO_NAMETABLE returns
-       a pointer to the first entry of the table  (a  pointer  to  char).  The
+       of  each  entry;  both  of  these  return  an int value. The entry size
+       depends on the length of the longest name. PCRE_INFO_NAMETABLE  returns
+       a  pointer  to  the  first  entry of the table (a pointer to char). The
        first two bytes of each entry are the number of the capturing parenthe-
-       sis, most significant byte first. The rest of the entry is  the  corre-
-       sponding  name,  zero  terminated. The names are in alphabetical order.
+       sis,  most  significant byte first. The rest of the entry is the corre-
+       sponding name, zero terminated. The names are  in  alphabetical  order.
        When PCRE_DUPNAMES is set, duplicate names are in order of their paren-
-       theses  numbers.  For  example,  consider the following pattern (assume
-       PCRE_EXTENDED is  set,  so  white  space  -  including  newlines  -  is
+       theses numbers. For example, consider  the  following  pattern  (assume
+       PCRE_EXTENDED  is  set,  so  white  space  -  including  newlines  - is
        ignored):
 
          (?<date> (?<year>(\d\d)?\d\d) -
          (?<month>\d\d) - (?<day>\d\d) )
 
-       There  are  four  named subpatterns, so the table has four entries, and
-       each entry in the table is eight bytes long. The table is  as  follows,
+       There are four named subpatterns, so the table has  four  entries,  and
+       each  entry  in the table is eight bytes long. The table is as follows,
        with non-printing bytes shows in hexadecimal, and undefined bytes shown
        as ??:
 
@@ -1703,29 +1715,29 @@ INFORMATION ABOUT A PATTERN
          00 04 m  o  n  t  h  00
          00 02 y  e  a  r  00 ??
 
-       When writing code to extract data  from  named  subpatterns  using  the
-       name-to-number  map,  remember that the length of the entries is likely
+       When  writing  code  to  extract  data from named subpatterns using the
+       name-to-number map, remember that the length of the entries  is  likely
        to be different for each compiled pattern.
 
          PCRE_INFO_OKPARTIAL
 
-       Return 1 if the pattern can be used for partial matching, otherwise  0.
-       The  fourth  argument  should point to an int variable. The pcrepartial
-       documentation lists the restrictions that apply to patterns  when  par-
+       Return  1 if the pattern can be used for partial matching, otherwise 0.
+       The fourth argument should point to an int  variable.  The  pcrepartial
+       documentation  lists  the restrictions that apply to patterns when par-
        tial matching is used.
 
          PCRE_INFO_OPTIONS
 
-       Return  a  copy of the options with which the pattern was compiled. The
-       fourth argument should point to an unsigned long  int  variable.  These
+       Return a copy of the options with which the pattern was  compiled.  The
+       fourth  argument  should  point to an unsigned long int variable. These
        option bits are those specified in the call to pcre_compile(), modified
        by any top-level option settings at the start of the pattern itself. In
-       other  words,  they are the options that will be in force when matching
-       starts. For example, if the pattern /(?im)abc(?-i)d/ is  compiled  with
-       the  PCRE_EXTENDED option, the result is PCRE_CASELESS, PCRE_MULTILINE,
+       other words, they are the options that will be in force  when  matching
+       starts.  For  example, if the pattern /(?im)abc(?-i)d/ is compiled with
+       the PCRE_EXTENDED option, the result is PCRE_CASELESS,  PCRE_MULTILINE,
        and PCRE_EXTENDED.
 
-       A pattern is automatically anchored by PCRE if  all  of  its  top-level
+       A  pattern  is  automatically  anchored by PCRE if all of its top-level
        alternatives begin with one of the following:
 
          ^     unless PCRE_MULTILINE is set
@@ -1739,7 +1751,7 @@ INFORMATION ABOUT A PATTERN
 
          PCRE_INFO_SIZE
 
-       Return the size of the compiled pattern, that is, the  value  that  was
+       Return  the  size  of the compiled pattern, that is, the value that was
        passed as the argument to pcre_malloc() when PCRE was getting memory in
        which to place the compiled data. The fourth argument should point to a
        size_t variable.
@@ -1747,9 +1759,9 @@ INFORMATION ABOUT A PATTERN
          PCRE_INFO_STUDYSIZE
 
        Return the size of the data block pointed to by the study_data field in
-       a pcre_extra block. That is,  it  is  the  value  that  was  passed  to
+       a  pcre_extra  block.  That  is,  it  is  the  value that was passed to
        pcre_malloc() when PCRE was getting memory into which to place the data
-       created by pcre_study(). The fourth argument should point to  a  size_t
+       created  by  pcre_study(). The fourth argument should point to a size_t
        variable.
 
 
@@ -1757,21 +1769,21 @@ OBSOLETE INFO FUNCTION
 
        int pcre_info(const pcre *code, int *optptr, int *firstcharptr);
 
-       The  pcre_info()  function is now obsolete because its interface is too
-       restrictive to return all the available data about a compiled  pattern.
-       New   programs   should  use  pcre_fullinfo()  instead.  The  yield  of
-       pcre_info() is the number of capturing subpatterns, or one of the  fol-
+       The pcre_info() function is now obsolete because its interface  is  too
+       restrictive  to return all the available data about a compiled pattern.
+       New  programs  should  use  pcre_fullinfo()  instead.  The   yield   of
+       pcre_info()  is the number of capturing subpatterns, or one of the fol-
        lowing negative numbers:
 
          PCRE_ERROR_NULL       the argument code was NULL
          PCRE_ERROR_BADMAGIC   the "magic number" was not found
 
-       If  the  optptr  argument is not NULL, a copy of the options with which
-       the pattern was compiled is placed in the integer  it  points  to  (see
+       If the optptr argument is not NULL, a copy of the  options  with  which
+       the  pattern  was  compiled  is placed in the integer it points to (see
        PCRE_INFO_OPTIONS above).
 
-       If  the  pattern  is  not anchored and the firstcharptr argument is not
-       NULL, it is used to pass back information about the first character  of
+       If the pattern is not anchored and the  firstcharptr  argument  is  not
+       NULL,  it is used to pass back information about the first character of
        any matched string (see PCRE_INFO_FIRSTBYTE above).
 
 
@@ -1779,21 +1791,21 @@ REFERENCE COUNTS
 
        int pcre_refcount(pcre *code, int adjust);
 
-       The  pcre_refcount()  function is used to maintain a reference count in
+       The pcre_refcount() function is used to maintain a reference  count  in
        the data block that contains a compiled pattern. It is provided for the
-       benefit  of  applications  that  operate  in an object-oriented manner,
+       benefit of applications that  operate  in  an  object-oriented  manner,
        where different parts of the application may be using the same compiled
        pattern, but you want to free the block when they are all done.
 
        When a pattern is compiled, the reference count field is initialized to
-       zero.  It is changed only by calling this function, whose action is  to
-       add  the  adjust  value  (which may be positive or negative) to it. The
+       zero.   It is changed only by calling this function, whose action is to
+       add the adjust value (which may be positive or  negative)  to  it.  The
        yield of the function is the new value. However, the value of the count
-       is  constrained to lie between 0 and 65535, inclusive. If the new value
+       is constrained to lie between 0 and 65535, inclusive. If the new  value
        is outside these limits, it is forced to the appropriate limit value.
 
-       Except when it is zero, the reference count is not correctly  preserved
-       if  a  pattern  is  compiled on one host and then transferred to a host
+       Except  when it is zero, the reference count is not correctly preserved
+       if a pattern is compiled on one host and then  transferred  to  a  host
        whose byte-order is different. (This seems a highly unlikely scenario.)
 
 
@@ -1887,51 +1899,51 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
        the  total number of calls, because not all calls to match() are recur-
        sive.  This limit is of use only if it is set smaller than match_limit.
 
-       Limiting  the  recursion  depth  limits the amount of stack that can be
+       Limiting the recursion depth limits the amount of  stack  that  can  be
        used, or, when PCRE has been compiled to use memory on the heap instead
        of the stack, the amount of heap memory that can be used.
 
-       The  default  value  for  match_limit_recursion can be set when PCRE is
-       built; the default default  is  the  same  value  as  the  default  for
-       match_limit.  You can override the default by suppling pcre_exec() with
-       a  pcre_extra  block  in  which  match_limit_recursion  is   set,   and
-       PCRE_EXTRA_MATCH_LIMIT_RECURSION  is  set  in  the  flags field. If the
+       The default value for match_limit_recursion can be  set  when  PCRE  is
+       built;  the  default  default  is  the  same  value  as the default for
+       match_limit. You can override the default by suppling pcre_exec()  with
+       a   pcre_extra   block  in  which  match_limit_recursion  is  set,  and
+       PCRE_EXTRA_MATCH_LIMIT_RECURSION is set in  the  flags  field.  If  the
        limit is exceeded, pcre_exec() returns PCRE_ERROR_RECURSIONLIMIT.
 
-       The pcre_callout field is used in conjunction with the  "callout"  fea-
+       The  pcre_callout  field is used in conjunction with the "callout" fea-
        ture, which is described in the pcrecallout documentation.
 
-       The  tables  field  is  used  to  pass  a  character  tables pointer to
-       pcre_exec(); this overrides the value that is stored with the  compiled
-       pattern.  A  non-NULL value is stored with the compiled pattern only if
-       custom tables were supplied to pcre_compile() via  its  tableptr  argu-
+       The tables field  is  used  to  pass  a  character  tables  pointer  to
+       pcre_exec();  this overrides the value that is stored with the compiled
+       pattern. A non-NULL value is stored with the compiled pattern  only  if
+       custom  tables  were  supplied to pcre_compile() via its tableptr argu-
        ment.  If NULL is passed to pcre_exec() using this mechanism, it forces
-       PCRE's internal tables to be used. This facility is  helpful  when  re-
-       using  patterns  that  have been saved after compiling with an external
-       set of tables, because the external tables  might  be  at  a  different
-       address  when  pcre_exec() is called. See the pcreprecompile documenta-
+       PCRE's  internal  tables  to be used. This facility is helpful when re-
+       using patterns that have been saved after compiling  with  an  external
+       set  of  tables,  because  the  external tables might be at a different
+       address when pcre_exec() is called. See the  pcreprecompile  documenta-
        tion for a discussion of saving compiled patterns for later use.
 
    Option bits for pcre_exec()
 
-       The unused bits of the options argument for pcre_exec() must  be  zero.
-       The  only  bits  that  may  be set are PCRE_ANCHORED, PCRE_NEWLINE_xxx,
-       PCRE_NOTBOL,   PCRE_NOTEOL,   PCRE_NOTEMPTY,   PCRE_NO_UTF8_CHECK   and
-       PCRE_PARTIAL.
+       The  unused  bits of the options argument for pcre_exec() must be zero.
+       The only bits that may  be  set  are  PCRE_ANCHORED,  PCRE_NEWLINE_xxx,
+       PCRE_NOTBOL,    PCRE_NOTEOL,   PCRE_NOTEMPTY,   PCRE_NO_START_OPTIMIZE,
+       PCRE_NO_UTF8_CHECK and PCRE_PARTIAL.
 
          PCRE_ANCHORED
 
-       The  PCRE_ANCHORED  option  limits pcre_exec() to matching at the first
-       matching position. If a pattern was  compiled  with  PCRE_ANCHORED,  or
-       turned  out to be anchored by virtue of its contents, it cannot be made
+       The PCRE_ANCHORED option limits pcre_exec() to matching  at  the  first
+       matching  position.  If  a  pattern was compiled with PCRE_ANCHORED, or
+       turned out to be anchored by virtue of its contents, it cannot be  made
        unachored at matching time.
 
          PCRE_BSR_ANYCRLF
          PCRE_BSR_UNICODE
 
        These options (which are mutually exclusive) control what the \R escape
-       sequence  matches.  The choice is either to match only CR, LF, or CRLF,
-       or to match any Unicode newline sequence. These  options  override  the
+       sequence matches. The choice is either to match only CR, LF,  or  CRLF,
+       or  to  match  any Unicode newline sequence. These options override the
        choice that was made or defaulted when the pattern was compiled.
 
          PCRE_NEWLINE_CR
@@ -1940,77 +1952,88 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
          PCRE_NEWLINE_ANYCRLF
          PCRE_NEWLINE_ANY
 
-       These  options  override  the  newline  definition  that  was chosen or
-       defaulted when the pattern was compiled. For details, see the  descrip-
-       tion  of  pcre_compile()  above.  During  matching,  the newline choice
-       affects the behaviour of the dot, circumflex,  and  dollar  metacharac-
-       ters.  It may also alter the way the match position is advanced after a
+       These options override  the  newline  definition  that  was  chosen  or
+       defaulted  when the pattern was compiled. For details, see the descrip-
+       tion of pcre_compile()  above.  During  matching,  the  newline  choice
+       affects  the  behaviour  of the dot, circumflex, and dollar metacharac-
+       ters. It may also alter the way the match position is advanced after  a
        match failure for an unanchored pattern.
 
-       When PCRE_NEWLINE_CRLF, PCRE_NEWLINE_ANYCRLF,  or  PCRE_NEWLINE_ANY  is
-       set,  and a match attempt for an unanchored pattern fails when the cur-
-       rent position is at a  CRLF  sequence,  and  the  pattern  contains  no
-       explicit  matches  for  CR  or  LF  characters,  the  match position is
+       When  PCRE_NEWLINE_CRLF,  PCRE_NEWLINE_ANYCRLF,  or PCRE_NEWLINE_ANY is
+       set, and a match attempt for an unanchored pattern fails when the  cur-
+       rent  position  is  at  a  CRLF  sequence,  and the pattern contains no
+       explicit matches for  CR  or  LF  characters,  the  match  position  is
        advanced by two characters instead of one, in other words, to after the
        CRLF.
 
        The above rule is a compromise that makes the most common cases work as
-       expected. For example, if the  pattern  is  .+A  (and  the  PCRE_DOTALL
+       expected.  For  example,  if  the  pattern  is .+A (and the PCRE_DOTALL
        option is not set), it does not match the string "\r\nA" because, after
-       failing at the start, it skips both the CR and the LF before  retrying.
-       However,  the  pattern  [\r\n]A does match that string, because it con-
+       failing  at the start, it skips both the CR and the LF before retrying.
+       However, the pattern [\r\n]A does match that string,  because  it  con-
        tains an explicit CR or LF reference, and so advances only by one char-
        acter after the first failure.
 
        An explicit match for CR of LF is either a literal appearance of one of
-       those characters, or one of the \r or  \n  escape  sequences.  Implicit
-       matches  such  as [^X] do not count, nor does \s (which includes CR and
+       those  characters,  or  one  of the \r or \n escape sequences. Implicit
+       matches such as [^X] do not count, nor does \s (which includes  CR  and
        LF in the characters that it matches).
 
-       Notwithstanding the above, anomalous effects may still occur when  CRLF
+       Notwithstanding  the above, anomalous effects may still occur when CRLF
        is a valid newline sequence and explicit \r or \n escapes appear in the
        pattern.
 
          PCRE_NOTBOL
 
        This option specifies that first character of the subject string is not
-       the  beginning  of  a  line, so the circumflex metacharacter should not
-       match before it. Setting this without PCRE_MULTILINE (at compile  time)
-       causes  circumflex  never to match. This option affects only the behav-
+       the beginning of a line, so the  circumflex  metacharacter  should  not
+       match  before it. Setting this without PCRE_MULTILINE (at compile time)
+       causes circumflex never to match. This option affects only  the  behav-
        iour of the circumflex metacharacter. It does not affect \A.
 
          PCRE_NOTEOL
 
        This option specifies that the end of the subject string is not the end
-       of  a line, so the dollar metacharacter should not match it nor (except
-       in multiline mode) a newline immediately before it. Setting this  with-
+       of a line, so the dollar metacharacter should not match it nor  (except
+       in  multiline mode) a newline immediately before it. Setting this with-
        out PCRE_MULTILINE (at compile time) causes dollar never to match. This
-       option affects only the behaviour of the dollar metacharacter. It  does
+       option  affects only the behaviour of the dollar metacharacter. It does
        not affect \Z or \z.
 
          PCRE_NOTEMPTY
 
        An empty string is not considered to be a valid match if this option is
-       set. If there are alternatives in the pattern, they are tried.  If  all
-       the  alternatives  match  the empty string, the entire match fails. For
+       set.  If  there are alternatives in the pattern, they are tried. If all
+       the alternatives match the empty string, the entire  match  fails.  For
        example, if the pattern
 
          a?b?
 
-       is applied to a string not beginning with "a" or "b",  it  matches  the
-       empty  string at the start of the subject. With PCRE_NOTEMPTY set, this
+       is  applied  to  a string not beginning with "a" or "b", it matches the
+       empty string at the start of the subject. With PCRE_NOTEMPTY set,  this
        match is not valid, so PCRE searches further into the string for occur-
        rences of "a" or "b".
 
        Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a spe-
-       cial case of a pattern match of the empty  string  within  its  split()
-       function,  and  when  using  the /g modifier. It is possible to emulate
+       cial  case  of  a  pattern match of the empty string within its split()
+       function, and when using the /g modifier. It  is  possible  to  emulate
        Perl's behaviour after matching a null string by first trying the match
        again at the same offset with PCRE_NOTEMPTY and PCRE_ANCHORED, and then
-       if that fails by advancing the starting offset (see below)  and  trying
+       if  that  fails by advancing the starting offset (see below) and trying
        an ordinary match again. There is some code that demonstrates how to do
        this in the pcredemo.c sample program.
 
+         PCRE_NO_START_OPTIMIZE
+
+       There  are a number of optimizations that pcre_exec() uses at the start
+       of a match, in order to speed up the process. For  example,  if  it  is
+       known  that  a  match must start with a specific character, it searches
+       the subject for that character, and fails immediately if it cannot find
+       it,  without actually running the main matching function. When callouts
+       are in use, these optimizations can cause  them  to  be  skipped.  This
+       option  disables  the  "start-up" optimizations, causing performance to
+       suffer, but ensuring that the callouts do occur.
+
          PCRE_NO_UTF8_CHECK
 
        When PCRE_UTF8 is set at compile time, the validity of the subject as a
@@ -2239,12 +2262,12 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
 
          PCRE_ERROR_BADCOUNT       (-15)
 
-       This error is given if the value of the ovecsize argument is  negative.
+       This error is given if the value of the ovecsize argument is negative.
 
          PCRE_ERROR_RECURSIONLIMIT (-21)
 
        The internal recursion limit, as specified by the match_limit_recursion
-       field in a pcre_extra structure (or defaulted)  was  reached.  See  the
+       field  in  a  pcre_extra  structure (or defaulted) was reached. See the
        description above.
 
          PCRE_ERROR_BADNEWLINE     (-23)
@@ -2267,78 +2290,78 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
        int pcre_get_substring_list(const char *subject,
             int *ovector, int stringcount, const char ***listptr);
 
-       Captured  substrings  can  be  accessed  directly  by using the offsets
-       returned by pcre_exec() in  ovector.  For  convenience,  the  functions
+       Captured substrings can be  accessed  directly  by  using  the  offsets
+       returned  by  pcre_exec()  in  ovector.  For convenience, the functions
        pcre_copy_substring(),    pcre_get_substring(),    and    pcre_get_sub-
-       string_list() are provided for extracting captured substrings  as  new,
-       separate,  zero-terminated strings. These functions identify substrings
-       by number. The next section describes functions  for  extracting  named
+       string_list()  are  provided for extracting captured substrings as new,
+       separate, zero-terminated strings. These functions identify  substrings
+       by  number.  The  next section describes functions for extracting named
        substrings.
 
-       A  substring that contains a binary zero is correctly extracted and has
-       a further zero added on the end, but the result is not, of course, a  C
-       string.   However,  you  can  process such a string by referring to the
-       length that is  returned  by  pcre_copy_substring()  and  pcre_get_sub-
+       A substring that contains a binary zero is correctly extracted and  has
+       a  further zero added on the end, but the result is not, of course, a C
+       string.  However, you can process such a string  by  referring  to  the
+       length  that  is  returned  by  pcre_copy_substring() and pcre_get_sub-
        string().  Unfortunately, the interface to pcre_get_substring_list() is
-       not adequate for handling strings containing binary zeros, because  the
+       not  adequate for handling strings containing binary zeros, because the
        end of the final string is not independently indicated.
 
-       The  first  three  arguments  are the same for all three of these func-
-       tions: subject is the subject string that has  just  been  successfully
+       The first three arguments are the same for all  three  of  these  func-
+       tions:  subject  is  the subject string that has just been successfully
        matched, ovector is a pointer to the vector of integer offsets that was
        passed to pcre_exec(), and stringcount is the number of substrings that
-       were  captured  by  the match, including the substring that matched the
+       were captured by the match, including the substring  that  matched  the
        entire regular expression. This is the value returned by pcre_exec() if
-       it  is greater than zero. If pcre_exec() returned zero, indicating that
-       it ran out of space in ovector, the value passed as stringcount  should
+       it is greater than zero. If pcre_exec() returned zero, indicating  that
+       it  ran out of space in ovector, the value passed as stringcount should
        be the number of elements in the vector divided by three.
 
-       The  functions pcre_copy_substring() and pcre_get_substring() extract a
-       single substring, whose number is given as  stringnumber.  A  value  of
-       zero  extracts  the  substring that matched the entire pattern, whereas
-       higher values  extract  the  captured  substrings.  For  pcre_copy_sub-
-       string(),  the  string  is  placed  in buffer, whose length is given by
-       buffersize, while for pcre_get_substring() a new  block  of  memory  is
-       obtained  via  pcre_malloc,  and its address is returned via stringptr.
-       The yield of the function is the length of the  string,  not  including
+       The functions pcre_copy_substring() and pcre_get_substring() extract  a
+       single  substring,  whose  number  is given as stringnumber. A value of
+       zero extracts the substring that matched the  entire  pattern,  whereas
+       higher  values  extract  the  captured  substrings.  For pcre_copy_sub-
+       string(), the string is placed in buffer,  whose  length  is  given  by
+       buffersize,  while  for  pcre_get_substring()  a new block of memory is
+       obtained via pcre_malloc, and its address is  returned  via  stringptr.
+       The  yield  of  the function is the length of the string, not including
        the terminating zero, or one of these error codes:
 
          PCRE_ERROR_NOMEMORY       (-6)
 
-       The  buffer  was too small for pcre_copy_substring(), or the attempt to
+       The buffer was too small for pcre_copy_substring(), or the  attempt  to
        get memory failed for pcre_get_substring().
 
          PCRE_ERROR_NOSUBSTRING    (-7)
 
        There is no substring whose number is stringnumber.
 
-       The pcre_get_substring_list()  function  extracts  all  available  sub-
-       strings  and  builds  a list of pointers to them. All this is done in a
+       The  pcre_get_substring_list()  function  extracts  all  available sub-
+       strings and builds a list of pointers to them. All this is  done  in  a
        single block of memory that is obtained via pcre_malloc. The address of
-       the  memory  block  is returned via listptr, which is also the start of
-       the list of string pointers. The end of the list is marked  by  a  NULL
-       pointer.  The  yield  of  the function is zero if all went well, or the
+       the memory block is returned via listptr, which is also  the  start  of
+       the  list  of  string pointers. The end of the list is marked by a NULL
+       pointer. The yield of the function is zero if all  went  well,  or  the
        error code
 
          PCRE_ERROR_NOMEMORY       (-6)
 
        if the attempt to get the memory block failed.
 
-       When any of these functions encounter a substring that is unset,  which
-       can  happen  when  capturing subpattern number n+1 matches some part of
-       the subject, but subpattern n has not been used at all, they return  an
+       When  any of these functions encounter a substring that is unset, which
+       can happen when capturing subpattern number n+1 matches  some  part  of
+       the  subject, but subpattern n has not been used at all, they return an
        empty string. This can be distinguished from a genuine zero-length sub-
-       string by inspecting the appropriate offset in ovector, which is  nega-
+       string  by inspecting the appropriate offset in ovector, which is nega-
        tive for unset substrings.
 
-       The  two convenience functions pcre_free_substring() and pcre_free_sub-
-       string_list() can be used to free the memory  returned  by  a  previous
+       The two convenience functions pcre_free_substring() and  pcre_free_sub-
+       string_list()  can  be  used  to free the memory returned by a previous
        call  of  pcre_get_substring()  or  pcre_get_substring_list(),  respec-
-       tively. They do nothing more than  call  the  function  pointed  to  by
-       pcre_free,  which  of course could be called directly from a C program.
-       However, PCRE is used in some situations where it is linked via a  spe-
-       cial   interface  to  another  programming  language  that  cannot  use
-       pcre_free directly; it is for these cases that the functions  are  pro-
+       tively.  They  do  nothing  more  than  call the function pointed to by
+       pcre_free, which of course could be called directly from a  C  program.
+       However,  PCRE is used in some situations where it is linked via a spe-
+       cial  interface  to  another  programming  language  that  cannot   use
+       pcre_free  directly;  it is for these cases that the functions are pro-
        vided.
 
 
@@ -2357,7 +2380,7 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
             int stringcount, const char *stringname,
             const char **stringptr);
 
-       To  extract a substring by name, you first have to find associated num-
+       To extract a substring by name, you first have to find associated  num-
        ber.  For example, for this pattern
 
          (a+)b(?<xxx>\d+)...
@@ -2366,29 +2389,34 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
        be unique (PCRE_DUPNAMES was not set), you can find the number from the
        name by calling pcre_get_stringnumber(). The first argument is the com-
        piled pattern, and the second is the name. The yield of the function is
-       the subpattern number, or PCRE_ERROR_NOSUBSTRING (-7) if  there  is  no
+       the  subpattern  number,  or PCRE_ERROR_NOSUBSTRING (-7) if there is no
        subpattern of that name.
 
        Given the number, you can extract the substring directly, or use one of
        the functions described in the previous section. For convenience, there
        are also two functions that do the whole job.
 
-       Most    of    the    arguments   of   pcre_copy_named_substring()   and
-       pcre_get_named_substring() are the same  as  those  for  the  similarly
-       named  functions  that extract by number. As these are described in the
-       previous section, they are not re-described here. There  are  just  two
+       Most   of   the   arguments    of    pcre_copy_named_substring()    and
+       pcre_get_named_substring()  are  the  same  as  those for the similarly
+       named functions that extract by number. As these are described  in  the
+       previous  section,  they  are not re-described here. There are just two
        differences:
 
-       First,  instead  of a substring number, a substring name is given. Sec-
+       First, instead of a substring number, a substring name is  given.  Sec-
        ond, there is an extra argument, given at the start, which is a pointer
-       to  the compiled pattern. This is needed in order to gain access to the
+       to the compiled pattern. This is needed in order to gain access to  the
        name-to-number translation table.
 
-       These functions call pcre_get_stringnumber(), and if it succeeds,  they
-       then  call  pcre_copy_substring() or pcre_get_substring(), as appropri-
-       ate. NOTE: If PCRE_DUPNAMES is set and there are duplicate  names,  the
+       These  functions call pcre_get_stringnumber(), and if it succeeds, they
+       then call pcre_copy_substring() or pcre_get_substring(),  as  appropri-
+       ate.  NOTE:  If PCRE_DUPNAMES is set and there are duplicate names, the
        behaviour may not be what you want (see the next section).
 
+       Warning: If the pattern uses the "(?|" feature to set up multiple  sub-
+       patterns  with  the  same  number,  you cannot use names to distinguish
+       them, because names are not included in the compiled code. The matching
+       process uses only numbers.
+
 
 DUPLICATE SUBPATTERN NAMES
 
@@ -2596,7 +2624,7 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
 SEE ALSO
 
        pcrebuild(3), pcrecallout(3), pcrecpp(3)(3), pcrematching(3),  pcrepar-
-       tial(3),  pcreposix(3), pcreprecompile(3), pcresample(3), pcrestack(3).
+       tial(3), pcreposix(3), pcreprecompile(3), pcresample(3), pcrestack(3).
 
 
 AUTHOR
@@ -2608,8 +2636,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 24 August 2008
-       Copyright (c) 1997-2008 University of Cambridge.
+       Last updated: 11 April 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -2660,8 +2688,8 @@ PCRE CALLOUTS
 MISSING CALLOUTS
 
        You  should  be  aware  that,  because of optimizations in the way PCRE
-       matches patterns, callouts sometimes do not happen. For example, if the
-       pattern is
+       matches patterns by default, callouts  sometimes  do  not  happen.  For
+       example, if the pattern is
 
          ab(?C4)cd
 
@@ -2670,13 +2698,18 @@ MISSING CALLOUTS
        ever  start,  and  the  callout is never reached. However, with "abyd",
        though the result is still no match, the callout is obeyed.
 
+       You can disable these optimizations by passing the  PCRE_NO_START_OPTI-
+       MIZE  option  to  pcre_exec()  or  pcre_dfa_exec(). This slows down the
+       matching process, but does ensure that callouts  such  as  the  example
+       above are obeyed.
+
 
 THE CALLOUT INTERFACE
 
-       During matching, when PCRE reaches a callout point, the external  func-
-       tion  defined by pcre_callout is called (if it is set). This applies to
-       both the pcre_exec() and the pcre_dfa_exec()  matching  functions.  The
-       only  argument  to  the callout function is a pointer to a pcre_callout
+       During  matching, when PCRE reaches a callout point, the external func-
+       tion defined by pcre_callout is called (if it is set). This applies  to
+       both  the  pcre_exec()  and the pcre_dfa_exec() matching functions. The
+       only argument to the callout function is a pointer  to  a  pcre_callout
        block. This structure contains the following fields:
 
          int          version;
@@ -2692,9 +2725,9 @@ THE CALLOUT INTERFACE
          int          pattern_position;
          int          next_item_length;
 
-       The version field is an integer containing the version  number  of  the
-       block  format. The initial version was 0; the current version is 1. The
-       version number will change again in future  if  additional  fields  are
+       The  version  field  is an integer containing the version number of the
+       block format. The initial version was 0; the current version is 1.  The
+       version  number  will  change  again in future if additional fields are
        added, but the intention is never to remove any of the existing fields.
 
        The callout_number field contains the number of the  callout,  as  com-
@@ -2779,8 +2812,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 29 May 2007
-       Copyright (c) 1997-2007 University of Cambridge.
+       Last updated: 15 March 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -2952,10 +2985,16 @@ PCRE REGULAR EXPRESSION DETAILS
        The original operation of PCRE was on strings of  one-byte  characters.
        However,  there is now also support for UTF-8 character strings. To use
        this, you must build PCRE to  include  UTF-8  support,  and  then  call
-       pcre_compile()  with  the  PCRE_UTF8  option.  How this affects pattern
-       matching is mentioned in several places below. There is also a  summary
-       of  UTF-8  features  in  the  section on UTF-8 support in the main pcre
-       page.
+       pcre_compile()  with  the  PCRE_UTF8  option.  There  is also a special
+       sequence that can be given at the start of a pattern:
+
+         (*UTF8)
+
+       Starting a pattern with this sequence  is  equivalent  to  setting  the
+       PCRE_UTF8  option.  This  feature  is  not Perl-compatible. How setting
+       UTF-8 mode affects pattern matching  is  mentioned  in  several  places
+       below.  There  is  also  a  summary of UTF-8 features in the section on
+       UTF-8 support in the main pcre page.
 
        The remainder of this document discusses the  patterns  that  are  sup-
        ported  by  PCRE when its main matching function, pcre_exec(), is used.
@@ -3059,33 +3098,33 @@ CHARACTERS AND METACHARACTERS
                   syntax)
          ]      terminates the character class
 
-       The  following sections describe the use of each of the metacharacters.
+       The following sections describe the use of each of the metacharacters.
 
 
 BACKSLASH
 
        The backslash character has several uses. Firstly, if it is followed by
-       a  non-alphanumeric  character,  it takes away any special meaning that
-       character may have. This  use  of  backslash  as  an  escape  character
+       a non-alphanumeric character, it takes away any  special  meaning  that
+       character  may  have.  This  use  of  backslash  as an escape character
        applies both inside and outside character classes.
 
-       For  example,  if  you want to match a * character, you write \* in the
-       pattern.  This escaping action applies whether  or  not  the  following
-       character  would  otherwise be interpreted as a metacharacter, so it is
-       always safe to precede a non-alphanumeric  with  backslash  to  specify
-       that  it stands for itself. In particular, if you want to match a back-
+       For example, if you want to match a * character, you write  \*  in  the
+       pattern.   This  escaping  action  applies whether or not the following
+       character would otherwise be interpreted as a metacharacter, so  it  is
+       always  safe  to  precede  a non-alphanumeric with backslash to specify
+       that it stands for itself. In particular, if you want to match a  back-
        slash, you write \\.
 
-       If a pattern is compiled with the PCRE_EXTENDED option,  whitespace  in
-       the  pattern (other than in a character class) and characters between a
+       If  a  pattern is compiled with the PCRE_EXTENDED option, whitespace in
+       the pattern (other than in a character class) and characters between  a
        # outside a character class and the next newline are ignored. An escap-
-       ing  backslash  can  be  used to include a whitespace or # character as
+       ing backslash can be used to include a whitespace  or  #  character  as
        part of the pattern.
 
-       If you want to remove the special meaning from a  sequence  of  charac-
-       ters,  you can do so by putting them between \Q and \E. This is differ-
-       ent from Perl in that $ and  @  are  handled  as  literals  in  \Q...\E
-       sequences  in  PCRE, whereas in Perl, $ and @ cause variable interpola-
+       If  you  want  to remove the special meaning from a sequence of charac-
+       ters, you can do so by putting them between \Q and \E. This is  differ-
+       ent  from  Perl  in  that  $  and  @ are handled as literals in \Q...\E
+       sequences in PCRE, whereas in Perl, $ and @ cause  variable  interpola-
        tion. Note the following examples:
 
          Pattern            PCRE matches   Perl matches
@@ -3095,16 +3134,16 @@ BACKSLASH
          \Qabc\$xyz\E       abc\$xyz       abc\$xyz
          \Qabc\E\$\Qxyz\E   abc$xyz        abc$xyz
 
-       The \Q...\E sequence is recognized both inside  and  outside  character
+       The  \Q...\E  sequence  is recognized both inside and outside character
        classes.
 
    Non-printing characters
 
        A second use of backslash provides a way of encoding non-printing char-
-       acters in patterns in a visible manner. There is no restriction on  the
-       appearance  of non-printing characters, apart from the binary zero that
-       terminates a pattern, but when a pattern  is  being  prepared  by  text
-       editing,  it  is  usually  easier  to  use  one of the following escape
+       acters  in patterns in a visible manner. There is no restriction on the
+       appearance of non-printing characters, apart from the binary zero  that
+       terminates  a  pattern,  but  when  a pattern is being prepared by text
+       editing, it is usually easier  to  use  one  of  the  following  escape
        sequences than the binary character it represents:
 
          \a        alarm, that is, the BEL character (hex 07)
@@ -3118,48 +3157,48 @@ BACKSLASH
          \xhh      character with hex code hh
          \x{hhh..} character with hex code hhh..
 
-       The precise effect of \cx is as follows: if x is a lower  case  letter,
-       it  is converted to upper case. Then bit 6 of the character (hex 40) is
-       inverted.  Thus \cz becomes hex 1A, but \c{ becomes hex 3B,  while  \c;
+       The  precise  effect of \cx is as follows: if x is a lower case letter,
+       it is converted to upper case. Then bit 6 of the character (hex 40)  is
+       inverted.   Thus  \cz becomes hex 1A, but \c{ becomes hex 3B, while \c;
        becomes hex 7B.
 
-       After  \x, from zero to two hexadecimal digits are read (letters can be
-       in upper or lower case). Any number of hexadecimal  digits  may  appear
-       between  \x{  and  },  but the value of the character code must be less
+       After \x, from zero to two hexadecimal digits are read (letters can  be
+       in  upper  or  lower case). Any number of hexadecimal digits may appear
+       between \x{ and }, but the value of the character  code  must  be  less
        than 256 in non-UTF-8 mode, and less than 2**31 in UTF-8 mode. That is,
-       the  maximum value in hexadecimal is 7FFFFFFF. Note that this is bigger
+       the maximum value in hexadecimal is 7FFFFFFF. Note that this is  bigger
        than the largest Unicode code point, which is 10FFFF.
 
-       If characters other than hexadecimal digits appear between \x{  and  },
+       If  characters  other than hexadecimal digits appear between \x{ and },
        or if there is no terminating }, this form of escape is not recognized.
-       Instead, the initial \x will be  interpreted  as  a  basic  hexadecimal
-       escape,  with  no  following  digits, giving a character whose value is
+       Instead,  the  initial  \x  will  be interpreted as a basic hexadecimal
+       escape, with no following digits, giving a  character  whose  value  is
        zero.
 
        Characters whose value is less than 256 can be defined by either of the
-       two  syntaxes  for  \x. There is no difference in the way they are han-
+       two syntaxes for \x. There is no difference in the way  they  are  han-
        dled. For example, \xdc is exactly the same as \x{dc}.
 
-       After \0 up to two further octal digits are read. If  there  are  fewer
-       than  two  digits,  just  those  that  are  present  are used. Thus the
+       After  \0  up  to two further octal digits are read. If there are fewer
+       than two digits, just  those  that  are  present  are  used.  Thus  the
        sequence \0\x\07 specifies two binary zeros followed by a BEL character
-       (code  value 7). Make sure you supply two digits after the initial zero
+       (code value 7). Make sure you supply two digits after the initial  zero
        if the pattern character that follows is itself an octal digit.
 
        The handling of a backslash followed by a digit other than 0 is compli-
        cated.  Outside a character class, PCRE reads it and any following dig-
-       its as a decimal number. If the number is less than  10,  or  if  there
+       its  as  a  decimal  number. If the number is less than 10, or if there
        have been at least that many previous capturing left parentheses in the
-       expression, the entire  sequence  is  taken  as  a  back  reference.  A
-       description  of how this works is given later, following the discussion
+       expression,  the  entire  sequence  is  taken  as  a  back reference. A
+       description of how this works is given later, following the  discussion
        of parenthesized subpatterns.
 
-       Inside a character class, or if the decimal number is  greater  than  9
-       and  there have not been that many capturing subpatterns, PCRE re-reads
+       Inside  a  character  class, or if the decimal number is greater than 9
+       and there have not been that many capturing subpatterns, PCRE  re-reads
        up to three octal digits following the backslash, and uses them to gen-
-       erate  a data character. Any subsequent digits stand for themselves. In
-       non-UTF-8 mode, the value of a character specified  in  octal  must  be
-       less  than  \400.  In  UTF-8 mode, values up to \777 are permitted. For
+       erate a data character. Any subsequent digits stand for themselves.  In
+       non-UTF-8  mode,  the  value  of a character specified in octal must be
+       less than \400. In UTF-8 mode, values up to  \777  are  permitted.  For
        example:
 
          \040   is another way of writing a space
@@ -3177,30 +3216,30 @@ BACKSLASH
          \81    is either a back reference, or a binary zero
                    followed by the two characters "8" and "1"
 
-       Note that octal values of 100 or greater must not be  introduced  by  a
+       Note  that  octal  values of 100 or greater must not be introduced by a
        leading zero, because no more than three octal digits are ever read.
 
        All the sequences that define a single character value can be used both
-       inside and outside character classes. In addition, inside  a  character
-       class,  the  sequence \b is interpreted as the backspace character (hex
-       08), and the sequences \R and \X are interpreted as the characters  "R"
-       and  "X", respectively. Outside a character class, these sequences have
+       inside  and  outside character classes. In addition, inside a character
+       class, the sequence \b is interpreted as the backspace  character  (hex
+       08),  and the sequences \R and \X are interpreted as the characters "R"
+       and "X", respectively. Outside a character class, these sequences  have
        different meanings (see below).
 
    Absolute and relative back references
 
-       The sequence \g followed by an unsigned or a negative  number,  option-
-       ally  enclosed  in braces, is an absolute or relative back reference. A
+       The  sequence  \g followed by an unsigned or a negative number, option-
+       ally enclosed in braces, is an absolute or relative back  reference.  A
        named back reference can be coded as \g{name}. Back references are dis-
        cussed later, following the discussion of parenthesized subpatterns.
 
    Absolute and relative subroutine calls
 
-       For  compatibility with Oniguruma, the non-Perl syntax \g followed by a
+       For compatibility with Oniguruma, the non-Perl syntax \g followed by  a
        name or a number enclosed either in angle brackets or single quotes, is
-       an  alternative  syntax for referencing a subpattern as a "subroutine".
-       Details are discussed later.   Note  that  \g{...}  (Perl  syntax)  and
-       \g<...>  (Oniguruma  syntax)  are  not synonymous. The former is a back
+       an alternative syntax for referencing a subpattern as  a  "subroutine".
+       Details  are  discussed  later.   Note  that  \g{...} (Perl syntax) and
+       \g<...> (Oniguruma syntax) are not synonymous. The  former  is  a  back
        reference; the latter is a subroutine call.
 
    Generic character types
@@ -3220,25 +3259,26 @@ BACKSLASH
          \W     any "non-word" character
 
        Each pair of escape sequences partitions the complete set of characters
-       into two disjoint sets. Any given character matches one, and only  one,
+       into  two disjoint sets. Any given character matches one, and only one,
        of each pair.
 
        These character type sequences can appear both inside and outside char-
-       acter classes. They each match one character of the  appropriate  type.
-       If  the current matching point is at the end of the subject string, all
+       acter  classes.  They each match one character of the appropriate type.
+       If the current matching point is at the end of the subject string,  all
        of them fail, since there is no character to match.
 
-       For compatibility with Perl, \s does not match the VT  character  (code
-       11).   This makes it different from the the POSIX "space" class. The \s
-       characters are HT (9), LF (10), FF (12), CR (13), and  space  (32).  If
+       For  compatibility  with Perl, \s does not match the VT character (code
+       11).  This makes it different from the the POSIX "space" class. The  \s
+       characters  are  HT  (9), LF (10), FF (12), CR (13), and space (32). If
        "use locale;" is included in a Perl script, \s may match the VT charac-
        ter. In PCRE, it never does.
 
-       In UTF-8 mode, characters with values greater than 128 never match  \d,
+       In  UTF-8 mode, characters with values greater than 128 never match \d,
        \s, or \w, and always match \D, \S, and \W. This is true even when Uni-
-       code character property support is available.  These  sequences  retain
+       code  character  property  support is available. These sequences retain
        their original meanings from before UTF-8 support was available, mainly
-       for efficiency reasons.
+       for  efficiency  reasons. Note that this also affects \b, because it is
+       defined in terms of \w and \W.
 
        The sequences \h, \H, \v, and \V are Perl 5.10 features. In contrast to
        the  other  sequences, these do match certain high-valued codepoints in
@@ -3764,17 +3804,17 @@ POSIX CHARACTER CLASSES
 
 VERTICAL BAR
 
-       Vertical  bar characters are used to separate alternative patterns. For
+       Vertical bar characters are used to separate alternative patterns.  For
        example, the pattern
 
          gilbert|sullivan
 
-       matches either "gilbert" or "sullivan". Any number of alternatives  may
-       appear,  and  an  empty  alternative  is  permitted (matching the empty
+       matches  either "gilbert" or "sullivan". Any number of alternatives may
+       appear, and an empty  alternative  is  permitted  (matching  the  empty
        string). The matching process tries each alternative in turn, from left
-       to  right, and the first one that succeeds is used. If the alternatives
-       are within a subpattern (defined below), "succeeds" means matching  the
-       rest  of the main pattern as well as the alternative in the subpattern.
+       to right, and the first one that succeeds is used. If the  alternatives
+       are  within a subpattern (defined below), "succeeds" means matching the
+       rest of the main pattern as well as the alternative in the subpattern.
 
 
 INTERNAL OPTION SETTING
@@ -3800,11 +3840,11 @@ INTERNAL OPTION SETTING
        can  be changed in the same way as the Perl-compatible options by using
        the characters J, U and X respectively.
 
-       When an option change occurs at top level (that is, not inside  subpat-
-       tern  parentheses),  the change applies to the remainder of the pattern
-       that follows.  If the change is placed right at the start of a pattern,
-       PCRE extracts it into the global options (and it will therefore show up
-       in data extracted by the pcre_fullinfo() function).
+       When one of these option changes occurs at  top  level  (that  is,  not
+       inside  subpattern parentheses), the change applies to the remainder of
+       the pattern that follows. If the change is placed right at the start of
+       a pattern, PCRE extracts it into the global options (and it will there-
+       fore show up in data extracted by the pcre_fullinfo() function).
 
        An option change within a subpattern (see below for  a  description  of
        subpatterns) affects only that part of the current pattern that follows
@@ -3827,9 +3867,11 @@ INTERNAL OPTION SETTING
 
        Note:  There  are  other  PCRE-specific  options that can be set by the
        application when the compile or match functions  are  called.  In  some
-       cases  the  pattern  can  contain special leading sequences to override
-       what the application has set or what has been  defaulted.  Details  are
-       given in the section entitled "Newline sequences" above.
+       cases the pattern can contain special leading sequences such as (*CRLF)
+       to override what the application has set or what  has  been  defaulted.
+       Details  are  given  in the section entitled "Newline sequences" above.
+       There is also the (*UTF8) leading sequence that  can  be  used  to  set
+       UTF-8 mode; this is equivalent to setting the PCRE_UTF8 option.
 
 
 SUBPATTERNS
@@ -3968,6 +4010,10 @@ NAMED SUBPATTERNS
        lowest  number  is used. For further details of the interfaces for han-
        dling named subpatterns, see the pcreapi documentation.
 
+       Warning: You cannot use different names to distinguish between two sub-
+       patterns  with  the same number (see the previous section) because PCRE
+       uses only the numbers when matching.
+
 
 REPETITION
 
@@ -4008,44 +4054,44 @@ REPETITION
        the syntax of a quantifier, is taken as a literal character. For  exam-
        ple, {,6} is not a quantifier, but a literal string of four characters.
 
-       In UTF-8 mode, quantifiers apply to UTF-8  characters  rather  than  to
+       In  UTF-8  mode,  quantifiers  apply to UTF-8 characters rather than to
        individual bytes. Thus, for example, \x{100}{2} matches two UTF-8 char-
        acters, each of which is represented by a two-byte sequence. Similarly,
        when Unicode property support is available, \X{3} matches three Unicode
-       extended sequences, each of which may be several bytes long  (and  they
+       extended  sequences,  each of which may be several bytes long (and they
        may be of different lengths).
 
        The quantifier {0} is permitted, causing the expression to behave as if
        the previous item and the quantifier were not present. This may be use-
-       ful  for  subpatterns that are referenced as subroutines from elsewhere
+       ful for subpatterns that are referenced as subroutines  from  elsewhere
        in the pattern. Items other than subpatterns that have a {0} quantifier
        are omitted from the compiled pattern.
 
-       For  convenience, the three most common quantifiers have single-charac-
+       For convenience, the three most common quantifiers have  single-charac-
        ter abbreviations:
 
          *    is equivalent to {0,}
          +    is equivalent to {1,}
          ?    is equivalent to {0,1}
 
-       It is possible to construct infinite loops by  following  a  subpattern
+       It  is  possible  to construct infinite loops by following a subpattern
        that can match no characters with a quantifier that has no upper limit,
        for example:
 
          (a?)*
 
        Earlier versions of Perl and PCRE used to give an error at compile time
-       for  such  patterns. However, because there are cases where this can be
-       useful, such patterns are now accepted, but if any  repetition  of  the
-       subpattern  does in fact match no characters, the loop is forcibly bro-
+       for such patterns. However, because there are cases where this  can  be
+       useful,  such  patterns  are now accepted, but if any repetition of the
+       subpattern does in fact match no characters, the loop is forcibly  bro-
        ken.
 
-       By default, the quantifiers are "greedy", that is, they match  as  much
-       as  possible  (up  to  the  maximum number of permitted times), without
-       causing the rest of the pattern to fail. The classic example  of  where
+       By  default,  the quantifiers are "greedy", that is, they match as much
+       as possible (up to the maximum  number  of  permitted  times),  without
+       causing  the  rest of the pattern to fail. The classic example of where
        this gives problems is in trying to match comments in C programs. These
-       appear between /* and */ and within the comment,  individual  *  and  /
-       characters  may  appear. An attempt to match C comments by applying the
+       appear  between  /*  and  */ and within the comment, individual * and /
+       characters may appear. An attempt to match C comments by  applying  the
        pattern
 
          /\*.*\*/
@@ -4054,19 +4100,19 @@ REPETITION
 
          /* first comment */  not comment  /* second comment */
 
-       fails, because it matches the entire string owing to the greediness  of
+       fails,  because it matches the entire string owing to the greediness of
        the .*  item.
 
-       However,  if  a quantifier is followed by a question mark, it ceases to
+       However, if a quantifier is followed by a question mark, it  ceases  to
        be greedy, and instead matches the minimum number of times possible, so
        the pattern
 
          /\*.*?\*/
 
-       does  the  right  thing with the C comments. The meaning of the various
-       quantifiers is not otherwise changed,  just  the  preferred  number  of
-       matches.   Do  not  confuse this use of question mark with its use as a
-       quantifier in its own right. Because it has two uses, it can  sometimes
+       does the right thing with the C comments. The meaning  of  the  various
+       quantifiers  is  not  otherwise  changed,  just the preferred number of
+       matches.  Do not confuse this use of question mark with its  use  as  a
+       quantifier  in its own right. Because it has two uses, it can sometimes
        appear doubled, as in
 
          \d??\d
@@ -4074,36 +4120,36 @@ REPETITION
        which matches one digit by preference, but can match two if that is the
        only way the rest of the pattern matches.
 
-       If the PCRE_UNGREEDY option is set (an option that is not available  in
-       Perl),  the  quantifiers are not greedy by default, but individual ones
-       can be made greedy by following them with a  question  mark.  In  other
+       If  the PCRE_UNGREEDY option is set (an option that is not available in
+       Perl), the quantifiers are not greedy by default, but  individual  ones
+       can  be  made  greedy  by following them with a question mark. In other
        words, it inverts the default behaviour.
 
-       When  a  parenthesized  subpattern  is quantified with a minimum repeat
-       count that is greater than 1 or with a limited maximum, more memory  is
-       required  for  the  compiled  pattern, in proportion to the size of the
+       When a parenthesized subpattern is quantified  with  a  minimum  repeat
+       count  that is greater than 1 or with a limited maximum, more memory is
+       required for the compiled pattern, in proportion to  the  size  of  the
        minimum or maximum.
 
        If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equiv-
-       alent  to  Perl's  /s) is set, thus allowing the dot to match newlines,
-       the pattern is implicitly anchored, because whatever  follows  will  be
-       tried  against every character position in the subject string, so there
-       is no point in retrying the overall match at  any  position  after  the
-       first.  PCRE  normally treats such a pattern as though it were preceded
+       alent to Perl's /s) is set, thus allowing the dot  to  match  newlines,
+       the  pattern  is  implicitly anchored, because whatever follows will be
+       tried against every character position in the subject string, so  there
+       is  no  point  in  retrying the overall match at any position after the
+       first. PCRE normally treats such a pattern as though it  were  preceded
        by \A.
 
-       In cases where it is known that the subject  string  contains  no  new-
-       lines,  it  is  worth setting PCRE_DOTALL in order to obtain this opti-
+       In  cases  where  it  is known that the subject string contains no new-
+       lines, it is worth setting PCRE_DOTALL in order to  obtain  this  opti-
        mization, or alternatively using ^ to indicate anchoring explicitly.
 
-       However, there is one situation where the optimization cannot be  used.
-       When  .*   is  inside  capturing  parentheses that are the subject of a
-       backreference elsewhere in the pattern, a match at the start  may  fail
+       However,  there is one situation where the optimization cannot be used.
+       When .*  is inside capturing parentheses that  are  the  subject  of  a
+       backreference  elsewhere  in the pattern, a match at the start may fail
        where a later one succeeds. Consider, for example:
 
          (.*)abc\1
 
-       If  the subject is "xyz123abc123" the match point is the fourth charac-
+       If the subject is "xyz123abc123" the match point is the fourth  charac-
        ter. For this reason, such a pattern is not implicitly anchored.
 
        When a capturing subpattern is repeated, the value captured is the sub-
@@ -4112,8 +4158,8 @@ REPETITION
          (tweedle[dume]{3}\s*)+
 
        has matched "tweedledum tweedledee" the value of the captured substring
-       is "tweedledee". However, if there are  nested  capturing  subpatterns,
-       the  corresponding captured values may have been set in previous itera-
+       is  "tweedledee".  However,  if there are nested capturing subpatterns,
+       the corresponding captured values may have been set in previous  itera-
        tions. For example, after
 
          /(a|(b))+/
@@ -4123,28 +4169,28 @@ REPETITION
 
 ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
 
-       With both maximizing ("greedy") and minimizing ("ungreedy"  or  "lazy")
-       repetition,  failure  of what follows normally causes the repeated item
-       to be re-evaluated to see if a different number of repeats  allows  the
-       rest  of  the pattern to match. Sometimes it is useful to prevent this,
-       either to change the nature of the match, or to cause it  fail  earlier
-       than  it otherwise might, when the author of the pattern knows there is
+       With  both  maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
+       repetition, failure of what follows normally causes the  repeated  item
+       to  be  re-evaluated to see if a different number of repeats allows the
+       rest of the pattern to match. Sometimes it is useful to  prevent  this,
+       either  to  change the nature of the match, or to cause it fail earlier
+       than it otherwise might, when the author of the pattern knows there  is
        no point in carrying on.
 
-       Consider, for example, the pattern \d+foo when applied to  the  subject
+       Consider,  for  example, the pattern \d+foo when applied to the subject
        line
 
          123456bar
 
        After matching all 6 digits and then failing to match "foo", the normal
-       action of the matcher is to try again with only 5 digits  matching  the
-       \d+  item,  and  then  with  4,  and  so on, before ultimately failing.
-       "Atomic grouping" (a term taken from Jeffrey  Friedl's  book)  provides
-       the  means for specifying that once a subpattern has matched, it is not
+       action  of  the matcher is to try again with only 5 digits matching the
+       \d+ item, and then with  4,  and  so  on,  before  ultimately  failing.
+       "Atomic  grouping"  (a  term taken from Jeffrey Friedl's book) provides
+       the means for specifying that once a subpattern has matched, it is  not
        to be re-evaluated in this way.
 
-       If we use atomic grouping for the previous example, the  matcher  gives
-       up  immediately  on failing to match "foo" the first time. The notation
+       If  we  use atomic grouping for the previous example, the matcher gives
+       up immediately on failing to match "foo" the first time.  The  notation
        is a kind of special parenthesis, starting with (?> as in this example:
 
          (?>\d+)foo
@@ -4222,44 +4268,44 @@ ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
 
          ((?>\D+)|<\d+>)*[!?]
 
-       sequences of non-digits cannot be broken, and failure happens  quickly.
+       sequences of non-digits cannot be broken, and failure happens quickly.
 
 
 BACK REFERENCES
 
        Outside a character class, a backslash followed by a digit greater than
        0 (and possibly further digits) is a back reference to a capturing sub-
-       pattern  earlier  (that is, to its left) in the pattern, provided there
+       pattern earlier (that is, to its left) in the pattern,  provided  there
        have been that many previous capturing left parentheses.
 
        However, if the decimal number following the backslash is less than 10,
-       it  is  always  taken  as a back reference, and causes an error only if
-       there are not that many capturing left parentheses in the  entire  pat-
-       tern.  In  other words, the parentheses that are referenced need not be
-       to the left of the reference for numbers less than 10. A "forward  back
-       reference"  of  this  type can make sense when a repetition is involved
-       and the subpattern to the right has participated in an  earlier  itera-
+       it is always taken as a back reference, and causes  an  error  only  if
+       there  are  not that many capturing left parentheses in the entire pat-
+       tern. In other words, the parentheses that are referenced need  not  be
+       to  the left of the reference for numbers less than 10. A "forward back
+       reference" of this type can make sense when a  repetition  is  involved
+       and  the  subpattern to the right has participated in an earlier itera-
        tion.
 
-       It  is  not  possible to have a numerical "forward back reference" to a
-       subpattern whose number is 10 or  more  using  this  syntax  because  a
-       sequence  such  as  \50 is interpreted as a character defined in octal.
+       It is not possible to have a numerical "forward back  reference"  to  a
+       subpattern  whose  number  is  10  or  more using this syntax because a
+       sequence such as \50 is interpreted as a character  defined  in  octal.
        See the subsection entitled "Non-printing characters" above for further
-       details  of  the  handling of digits following a backslash. There is no
-       such problem when named parentheses are used. A back reference  to  any
+       details of the handling of digits following a backslash.  There  is  no
+       such  problem  when named parentheses are used. A back reference to any
        subpattern is possible using named parentheses (see below).
 
-       Another  way  of  avoiding  the ambiguity inherent in the use of digits
+       Another way of avoiding the ambiguity inherent in  the  use  of  digits
        following a backslash is to use the \g escape sequence, which is a fea-
-       ture  introduced  in  Perl  5.10.  This  escape  must be followed by an
-       unsigned number or a negative number, optionally  enclosed  in  braces.
+       ture introduced in Perl 5.10.  This  escape  must  be  followed  by  an
+       unsigned  number  or  a negative number, optionally enclosed in braces.
        These examples are all identical:
 
          (ring), \1
          (ring), \g1
          (ring), \g{1}
 
-       An  unsigned number specifies an absolute reference without the ambigu-
+       An unsigned number specifies an absolute reference without the  ambigu-
        ity that is present in the older syntax. It is also useful when literal
        digits follow the reference. A negative number is a relative reference.
        Consider this example:
@@ -4267,33 +4313,33 @@ BACK REFERENCES
          (abc(def)ghi)\g{-1}
 
        The sequence \g{-1} is a reference to the most recently started captur-
-       ing  subpattern  before \g, that is, is it equivalent to \2. Similarly,
+       ing subpattern before \g, that is, is it equivalent to  \2.  Similarly,
        \g{-2} would be equivalent to \1. The use of relative references can be
-       helpful  in  long  patterns,  and  also in patterns that are created by
+       helpful in long patterns, and also in  patterns  that  are  created  by
        joining together fragments that contain references within themselves.
 
-       A back reference matches whatever actually matched the  capturing  sub-
-       pattern  in  the  current subject string, rather than anything matching
+       A  back  reference matches whatever actually matched the capturing sub-
+       pattern in the current subject string, rather  than  anything  matching
        the subpattern itself (see "Subpatterns as subroutines" below for a way
        of doing that). So the pattern
 
          (sens|respons)e and \1ibility
 
-       matches  "sense and sensibility" and "response and responsibility", but
-       not "sense and responsibility". If caseful matching is in force at  the
-       time  of the back reference, the case of letters is relevant. For exam-
+       matches "sense and sensibility" and "response and responsibility",  but
+       not  "sense and responsibility". If caseful matching is in force at the
+       time of the back reference, the case of letters is relevant. For  exam-
        ple,
 
          ((?i)rah)\s+\1
 
-       matches "rah rah" and "RAH RAH", but not "RAH  rah",  even  though  the
+       matches  "rah  rah"  and  "RAH RAH", but not "RAH rah", even though the
        original capturing subpattern is matched caselessly.
 
-       There  are  several  different ways of writing back references to named
-       subpatterns. The .NET syntax \k{name} and the Perl syntax  \k<name>  or
-       \k'name'  are supported, as is the Python syntax (?P=name). Perl 5.10's
+       There are several different ways of writing back  references  to  named
+       subpatterns.  The  .NET syntax \k{name} and the Perl syntax \k<name> or
+       \k'name' are supported, as is the Python syntax (?P=name). Perl  5.10's
        unified back reference syntax, in which \g can be used for both numeric
-       and  named  references,  is  also supported. We could rewrite the above
+       and named references, is also supported. We  could  rewrite  the  above
        example in any of the following ways:
 
          (?<p1>(?i)rah)\s+\k<p1>
@@ -4301,57 +4347,57 @@ BACK REFERENCES
          (?P<p1>(?i)rah)\s+(?P=p1)
          (?<p1>(?i)rah)\s+\g{p1}
 
-       A subpattern that is referenced by  name  may  appear  in  the  pattern
+       A  subpattern  that  is  referenced  by  name may appear in the pattern
        before or after the reference.
 
-       There  may be more than one back reference to the same subpattern. If a
-       subpattern has not actually been used in a particular match,  any  back
+       There may be more than one back reference to the same subpattern. If  a
+       subpattern  has  not actually been used in a particular match, any back
        references to it always fail. For example, the pattern
 
          (a|(bc))\2
 
-       always  fails if it starts to match "a" rather than "bc". Because there
-       may be many capturing parentheses in a pattern,  all  digits  following
-       the  backslash  are taken as part of a potential back reference number.
+       always fails if it starts to match "a" rather than "bc". Because  there
+       may  be  many  capturing parentheses in a pattern, all digits following
+       the backslash are taken as part of a potential back  reference  number.
        If the pattern continues with a digit character, some delimiter must be
-       used  to  terminate  the back reference. If the PCRE_EXTENDED option is
-       set, this can be whitespace.  Otherwise an  empty  comment  (see  "Com-
+       used to terminate the back reference. If the  PCRE_EXTENDED  option  is
+       set,  this  can  be  whitespace.  Otherwise an empty comment (see "Com-
        ments" below) can be used.
 
-       A  back reference that occurs inside the parentheses to which it refers
-       fails when the subpattern is first used, so, for example,  (a\1)  never
-       matches.   However,  such references can be useful inside repeated sub-
+       A back reference that occurs inside the parentheses to which it  refers
+       fails  when  the subpattern is first used, so, for example, (a\1) never
+       matches.  However, such references can be useful inside  repeated  sub-
        patterns. For example, the pattern
 
          (a|b\1)+
 
        matches any number of "a"s and also "aba", "ababbaa" etc. At each iter-
-       ation  of  the  subpattern,  the  back  reference matches the character
-       string corresponding to the previous iteration. In order  for  this  to
-       work,  the  pattern must be such that the first iteration does not need
-       to match the back reference. This can be done using alternation, as  in
+       ation of the subpattern,  the  back  reference  matches  the  character
+       string  corresponding  to  the previous iteration. In order for this to
+       work, the pattern must be such that the first iteration does  not  need
+       to  match the back reference. This can be done using alternation, as in
        the example above, or by a quantifier with a minimum of zero.
 
 
 ASSERTIONS
 
-       An  assertion  is  a  test on the characters following or preceding the
-       current matching point that does not actually consume  any  characters.
-       The  simple  assertions  coded  as  \b, \B, \A, \G, \Z, \z, ^ and $ are
+       An assertion is a test on the characters  following  or  preceding  the
+       current  matching  point that does not actually consume any characters.
+       The simple assertions coded as \b, \B, \A, \G, \Z,  \z,  ^  and  $  are
        described above.
 
-       More complicated assertions are coded as  subpatterns.  There  are  two
-       kinds:  those  that  look  ahead of the current position in the subject
-       string, and those that look  behind  it.  An  assertion  subpattern  is
-       matched  in  the  normal way, except that it does not cause the current
+       More  complicated  assertions  are  coded as subpatterns. There are two
+       kinds: those that look ahead of the current  position  in  the  subject
+       string,  and  those  that  look  behind  it. An assertion subpattern is
+       matched in the normal way, except that it does not  cause  the  current
        matching position to be changed.
 
-       Assertion subpatterns are not capturing subpatterns,  and  may  not  be
-       repeated,  because  it  makes no sense to assert the same thing several
-       times. If any kind of assertion contains capturing  subpatterns  within
-       it,  these are counted for the purposes of numbering the capturing sub-
+       Assertion  subpatterns  are  not  capturing subpatterns, and may not be
+       repeated, because it makes no sense to assert the  same  thing  several
+       times.  If  any kind of assertion contains capturing subpatterns within
+       it, these are counted for the purposes of numbering the capturing  sub-
        patterns in the whole pattern.  However, substring capturing is carried
-       out  only  for  positive assertions, because it does not make sense for
+       out only for positive assertions, because it does not  make  sense  for
        negative assertions.
 
    Lookahead assertions
@@ -4361,37 +4407,37 @@ ASSERTIONS
 
          \w+(?=;)
 
-       matches  a word followed by a semicolon, but does not include the semi-
+       matches a word followed by a semicolon, but does not include the  semi-
        colon in the match, and
 
          foo(?!bar)
 
-       matches any occurrence of "foo" that is not  followed  by  "bar".  Note
+       matches  any  occurrence  of  "foo" that is not followed by "bar". Note
        that the apparently similar pattern
 
          (?!foo)bar
 
-       does  not  find  an  occurrence  of "bar" that is preceded by something
-       other than "foo"; it finds any occurrence of "bar" whatsoever,  because
+       does not find an occurrence of "bar"  that  is  preceded  by  something
+       other  than "foo"; it finds any occurrence of "bar" whatsoever, because
        the assertion (?!foo) is always true when the next three characters are
        "bar". A lookbehind assertion is needed to achieve the other effect.
 
        If you want to force a matching failure at some point in a pattern, the
-       most  convenient  way  to  do  it  is with (?!) because an empty string
-       always matches, so an assertion that requires there not to be an  empty
+       most convenient way to do it is  with  (?!)  because  an  empty  string
+       always  matches, so an assertion that requires there not to be an empty
        string must always fail.
 
    Lookbehind assertions
 
-       Lookbehind  assertions start with (?<= for positive assertions and (?<!
+       Lookbehind assertions start with (?<= for positive assertions and  (?<!
        for negative assertions. For example,
 
          (?<!foo)bar
 
-       does find an occurrence of "bar" that is not  preceded  by  "foo".  The
-       contents  of  a  lookbehind  assertion are restricted such that all the
+       does  find  an  occurrence  of "bar" that is not preceded by "foo". The
+       contents of a lookbehind assertion are restricted  such  that  all  the
        strings it matches must have a fixed length. However, if there are sev-
-       eral  top-level  alternatives,  they  do  not all have to have the same
+       eral top-level alternatives, they do not all  have  to  have  the  same
        fixed length. Thus
 
          (?<=bullock|donkey)
@@ -4400,59 +4446,59 @@ ASSERTIONS
 
          (?<!dogs?|cats?)
 
-       causes an error at compile time. Branches that match  different  length
-       strings  are permitted only at the top level of a lookbehind assertion.
-       This is an extension compared with  Perl  (at  least  for  5.8),  which
-       requires  all branches to match the same length of string. An assertion
+       causes  an  error at compile time. Branches that match different length
+       strings are permitted only at the top level of a lookbehind  assertion.
+       This  is  an  extension  compared  with  Perl (at least for 5.8), which
+       requires all branches to match the same length of string. An  assertion
        such as
 
          (?<=ab(c|de))
 
-       is not permitted, because its single top-level  branch  can  match  two
-       different  lengths,  but  it is acceptable if rewritten to use two top-
+       is  not  permitted,  because  its single top-level branch can match two
+       different lengths, but it is acceptable if rewritten to  use  two  top-
        level branches:
 
          (?<=abc|abde)
 
        In some cases, the Perl 5.10 escape sequence \K (see above) can be used
-       instead  of  a lookbehind assertion; this is not restricted to a fixed-
+       instead of a lookbehind assertion; this is not restricted to  a  fixed-
        length.
 
-       The implementation of lookbehind assertions is, for  each  alternative,
-       to  temporarily  move the current position back by the fixed length and
+       The  implementation  of lookbehind assertions is, for each alternative,
+       to temporarily move the current position back by the fixed  length  and
        then try to match. If there are insufficient characters before the cur-
        rent position, the assertion fails.
 
        PCRE does not allow the \C escape (which matches a single byte in UTF-8
-       mode) to appear in lookbehind assertions, because it makes it  impossi-
-       ble  to  calculate the length of the lookbehind. The \X and \R escapes,
+       mode)  to appear in lookbehind assertions, because it makes it impossi-
+       ble to calculate the length of the lookbehind. The \X and  \R  escapes,
        which can match different numbers of bytes, are also not permitted.
 
-       Possessive quantifiers can  be  used  in  conjunction  with  lookbehind
-       assertions  to  specify  efficient  matching  at the end of the subject
+       Possessive  quantifiers  can  be  used  in  conjunction with lookbehind
+       assertions to specify efficient matching at  the  end  of  the  subject
        string. Consider a simple pattern such as
 
          abcd$
 
-       when applied to a long string that does  not  match.  Because  matching
+       when  applied  to  a  long string that does not match. Because matching
        proceeds from left to right, PCRE will look for each "a" in the subject
-       and then see if what follows matches the rest of the  pattern.  If  the
+       and  then  see  if what follows matches the rest of the pattern. If the
        pattern is specified as
 
          ^.*abcd$
 
-       the  initial .* matches the entire string at first, but when this fails
+       the initial .* matches the entire string at first, but when this  fails
        (because there is no following "a"), it backtracks to match all but the
-       last  character,  then all but the last two characters, and so on. Once
-       again the search for "a" covers the entire string, from right to  left,
+       last character, then all but the last two characters, and so  on.  Once
+       again  the search for "a" covers the entire string, from right to left,
        so we are no better off. However, if the pattern is written as
 
          ^.*+(?<=abcd)
 
-       there  can  be  no backtracking for the .*+ item; it can match only the
-       entire string. The subsequent lookbehind assertion does a  single  test
-       on  the last four characters. If it fails, the match fails immediately.
-       For long strings, this approach makes a significant difference  to  the
+       there can be no backtracking for the .*+ item; it can  match  only  the
+       entire  string.  The subsequent lookbehind assertion does a single test
+       on the last four characters. If it fails, the match fails  immediately.
+       For  long  strings, this approach makes a significant difference to the
        processing time.
 
    Using multiple assertions
@@ -4461,18 +4507,18 @@ ASSERTIONS
 
          (?<=\d{3})(?<!999)foo
 
-       matches  "foo" preceded by three digits that are not "999". Notice that
-       each of the assertions is applied independently at the  same  point  in
-       the  subject  string.  First  there  is a check that the previous three
-       characters are all digits, and then there is  a  check  that  the  same
+       matches "foo" preceded by three digits that are not "999". Notice  that
+       each  of  the  assertions is applied independently at the same point in
+       the subject string. First there is a  check  that  the  previous  three
+       characters  are  all  digits,  and  then there is a check that the same
        three characters are not "999".  This pattern does not match "foo" pre-
-       ceded by six characters, the first of which are  digits  and  the  last
-       three  of  which  are not "999". For example, it doesn't match "123abc-
+       ceded  by  six  characters,  the first of which are digits and the last
+       three of which are not "999". For example, it  doesn't  match  "123abc-
        foo". A pattern to do that is
 
          (?<=\d{3}...)(?<!999)foo
 
-       This time the first assertion looks at the  preceding  six  characters,
+       This  time  the  first assertion looks at the preceding six characters,
        checking that the first three are digits, and then the second assertion
        checks that the preceding three characters are not "999".
 
@@ -4480,79 +4526,79 @@ ASSERTIONS
 
          (?<=(?<!foo)bar)baz
 
-       matches an occurrence of "baz" that is preceded by "bar" which in  turn
+       matches  an occurrence of "baz" that is preceded by "bar" which in turn
        is not preceded by "foo", while
 
          (?<=\d{3}(?!999)...)foo
 
-       is  another pattern that matches "foo" preceded by three digits and any
+       is another pattern that matches "foo" preceded by three digits and  any
        three characters that are not "999".
 
 
 CONDITIONAL SUBPATTERNS
 
-       It is possible to cause the matching process to obey a subpattern  con-
-       ditionally  or to choose between two alternative subpatterns, depending
-       on the result of an assertion, or whether a previous capturing  subpat-
-       tern  matched  or not. The two possible forms of conditional subpattern
+       It  is possible to cause the matching process to obey a subpattern con-
+       ditionally or to choose between two alternative subpatterns,  depending
+       on  the result of an assertion, or whether a previous capturing subpat-
+       tern matched or not. The two possible forms of  conditional  subpattern
        are
 
          (?(condition)yes-pattern)
          (?(condition)yes-pattern|no-pattern)
 
-       If the condition is satisfied, the yes-pattern is used;  otherwise  the
-       no-pattern  (if  present)  is used. If there are more than two alterna-
+       If  the  condition is satisfied, the yes-pattern is used; otherwise the
+       no-pattern (if present) is used. If there are more  than  two  alterna-
        tives in the subpattern, a compile-time error occurs.
 
-       There are four kinds of condition: references  to  subpatterns,  refer-
+       There  are  four  kinds of condition: references to subpatterns, refer-
        ences to recursion, a pseudo-condition called DEFINE, and assertions.
 
    Checking for a used subpattern by number
 
-       If  the  text between the parentheses consists of a sequence of digits,
-       the condition is true if the capturing subpattern of  that  number  has
-       previously  matched.  An  alternative notation is to precede the digits
+       If the text between the parentheses consists of a sequence  of  digits,
+       the  condition  is  true if the capturing subpattern of that number has
+       previously matched. An alternative notation is to  precede  the  digits
        with a plus or minus sign. In this case, the subpattern number is rela-
        tive rather than absolute.  The most recently opened parentheses can be
-       referenced by (?(-1), the next most recent by (?(-2),  and  so  on.  In
+       referenced  by  (?(-1),  the  next most recent by (?(-2), and so on. In
        looping constructs it can also make sense to refer to subsequent groups
        with constructs such as (?(+2).
 
-       Consider the following pattern, which  contains  non-significant  white
+       Consider  the  following  pattern, which contains non-significant white
        space to make it more readable (assume the PCRE_EXTENDED option) and to
        divide it into three parts for ease of discussion:
 
          ( \( )?    [^()]+    (?(1) \) )
 
-       The first part matches an optional opening  parenthesis,  and  if  that
+       The  first  part  matches  an optional opening parenthesis, and if that
        character is present, sets it as the first captured substring. The sec-
-       ond part matches one or more characters that are not  parentheses.  The
+       ond  part  matches one or more characters that are not parentheses. The
        third part is a conditional subpattern that tests whether the first set
        of parentheses matched or not. If they did, that is, if subject started
        with an opening parenthesis, the condition is true, and so the yes-pat-
-       tern is executed and a  closing  parenthesis  is  required.  Otherwise,
-       since  no-pattern  is  not  present, the subpattern matches nothing. In
-       other words,  this  pattern  matches  a  sequence  of  non-parentheses,
+       tern  is  executed  and  a  closing parenthesis is required. Otherwise,
+       since no-pattern is not present, the  subpattern  matches  nothing.  In
+       other  words,  this  pattern  matches  a  sequence  of non-parentheses,
        optionally enclosed in parentheses.
 
-       If  you  were  embedding  this pattern in a larger one, you could use a
+       If you were embedding this pattern in a larger one,  you  could  use  a
        relative reference:
 
          ...other stuff... ( \( )?    [^()]+    (?(-1) \) ) ...
 
-       This makes the fragment independent of the parentheses  in  the  larger
+       This  makes  the  fragment independent of the parentheses in the larger
        pattern.
 
    Checking for a used subpattern by name
 
-       Perl  uses  the  syntax  (?(<name>)...) or (?('name')...) to test for a
-       used subpattern by name. For compatibility  with  earlier  versions  of
-       PCRE,  which  had this facility before Perl, the syntax (?(name)...) is
-       also recognized. However, there is a possible ambiguity with this  syn-
-       tax,  because  subpattern  names  may  consist entirely of digits. PCRE
-       looks first for a named subpattern; if it cannot find one and the  name
-       consists  entirely  of digits, PCRE looks for a subpattern of that num-
-       ber, which must be greater than zero. Using subpattern names that  con-
+       Perl uses the syntax (?(<name>)...) or (?('name')...)  to  test  for  a
+       used  subpattern  by  name.  For compatibility with earlier versions of
+       PCRE, which had this facility before Perl, the syntax  (?(name)...)  is
+       also  recognized. However, there is a possible ambiguity with this syn-
+       tax, because subpattern names may  consist  entirely  of  digits.  PCRE
+       looks  first for a named subpattern; if it cannot find one and the name
+       consists entirely of digits, PCRE looks for a subpattern of  that  num-
+       ber,  which must be greater than zero. Using subpattern names that con-
        sist entirely of digits is not recommended.
 
        Rewriting the above example to use a named subpattern gives this:
@@ -4563,85 +4609,85 @@ CONDITIONAL SUBPATTERNS
    Checking for pattern recursion
 
        If the condition is the string (R), and there is no subpattern with the
-       name R, the condition is true if a recursive call to the whole  pattern
+       name  R, the condition is true if a recursive call to the whole pattern
        or any subpattern has been made. If digits or a name preceded by amper-
        sand follow the letter R, for example:
 
          (?(R3)...) or (?(R&name)...)
 
-       the condition is true if the most recent recursion is into the  subpat-
-       tern  whose  number or name is given. This condition does not check the
+       the  condition is true if the most recent recursion is into the subpat-
+       tern whose number or name is given. This condition does not  check  the
        entire recursion stack.
 
-       At "top level", all these recursion test conditions are  false.  Recur-
+       At  "top  level", all these recursion test conditions are false. Recur-
        sive patterns are described below.
 
    Defining subpatterns for use by reference only
 
-       If  the  condition  is  the string (DEFINE), and there is no subpattern
-       with the name DEFINE, the condition is  always  false.  In  this  case,
-       there  may  be  only  one  alternative  in the subpattern. It is always
-       skipped if control reaches this point  in  the  pattern;  the  idea  of
-       DEFINE  is that it can be used to define "subroutines" that can be ref-
-       erenced from elsewhere. (The use of "subroutines" is described  below.)
-       For  example,  a pattern to match an IPv4 address could be written like
+       If the condition is the string (DEFINE), and  there  is  no  subpattern
+       with  the  name  DEFINE,  the  condition is always false. In this case,
+       there may be only one alternative  in  the  subpattern.  It  is  always
+       skipped  if  control  reaches  this  point  in the pattern; the idea of
+       DEFINE is that it can be used to define "subroutines" that can be  ref-
+       erenced  from elsewhere. (The use of "subroutines" is described below.)
+       For example, a pattern to match an IPv4 address could be  written  like
        this (ignore whitespace and line breaks):
 
          (?(DEFINE) (?<byte> 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )
          \b (?&byte) (\.(?&byte)){3} \b
 
-       The first part of the pattern is a DEFINE group inside which a  another
-       group  named "byte" is defined. This matches an individual component of
-       an IPv4 address (a number less than 256). When  matching  takes  place,
-       this  part  of  the pattern is skipped because DEFINE acts like a false
+       The  first part of the pattern is a DEFINE group inside which a another
+       group named "byte" is defined. This matches an individual component  of
+       an  IPv4  address  (a number less than 256). When matching takes place,
+       this part of the pattern is skipped because DEFINE acts  like  a  false
        condition.
 
        The rest of the pattern uses references to the named group to match the
-       four  dot-separated  components of an IPv4 address, insisting on a word
+       four dot-separated components of an IPv4 address, insisting on  a  word
        boundary at each end.
 
    Assertion conditions
 
-       If the condition is not in any of the above  formats,  it  must  be  an
-       assertion.   This may be a positive or negative lookahead or lookbehind
-       assertion. Consider  this  pattern,  again  containing  non-significant
+       If  the  condition  is  not  in any of the above formats, it must be an
+       assertion.  This may be a positive or negative lookahead or  lookbehind
+       assertion.  Consider  this  pattern,  again  containing non-significant
        white space, and with the two alternatives on the second line:
 
          (?(?=[^a-z]*[a-z])
          \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )
 
-       The  condition  is  a  positive  lookahead  assertion  that  matches an
-       optional sequence of non-letters followed by a letter. In other  words,
-       it  tests  for the presence of at least one letter in the subject. If a
-       letter is found, the subject is matched against the first  alternative;
-       otherwise  it  is  matched  against  the  second.  This pattern matches
-       strings in one of the two forms dd-aaa-dd or dd-dd-dd,  where  aaa  are
+       The condition  is  a  positive  lookahead  assertion  that  matches  an
+       optional  sequence of non-letters followed by a letter. In other words,
+       it tests for the presence of at least one letter in the subject.  If  a
+       letter  is found, the subject is matched against the first alternative;
+       otherwise it is  matched  against  the  second.  This  pattern  matches
+       strings  in  one  of the two forms dd-aaa-dd or dd-dd-dd, where aaa are
        letters and dd are digits.
 
 
 COMMENTS
 
-       The  sequence (?# marks the start of a comment that continues up to the
-       next closing parenthesis. Nested parentheses  are  not  permitted.  The
-       characters  that make up a comment play no part in the pattern matching
+       The sequence (?# marks the start of a comment that continues up to  the
+       next  closing  parenthesis.  Nested  parentheses are not permitted. The
+       characters that make up a comment play no part in the pattern  matching
        at all.
 
-       If the PCRE_EXTENDED option is set, an unescaped # character outside  a
-       character  class  introduces  a  comment  that continues to immediately
+       If  the PCRE_EXTENDED option is set, an unescaped # character outside a
+       character class introduces a  comment  that  continues  to  immediately
        after the next newline in the pattern.
 
 
 RECURSIVE PATTERNS
 
-       Consider the problem of matching a string in parentheses, allowing  for
-       unlimited  nested  parentheses.  Without the use of recursion, the best
-       that can be done is to use a pattern that  matches  up  to  some  fixed
-       depth  of  nesting.  It  is not possible to handle an arbitrary nesting
+       Consider  the problem of matching a string in parentheses, allowing for
+       unlimited nested parentheses. Without the use of  recursion,  the  best
+       that  can  be  done  is  to use a pattern that matches up to some fixed
+       depth of nesting. It is not possible to  handle  an  arbitrary  nesting
        depth.
 
        For some time, Perl has provided a facility that allows regular expres-
-       sions  to recurse (amongst other things). It does this by interpolating
-       Perl code in the expression at run time, and the code can refer to  the
+       sions to recurse (amongst other things). It does this by  interpolating
+       Perl  code in the expression at run time, and the code can refer to the
        expression itself. A Perl pattern using code interpolation to solve the
        parentheses problem can be created like this:
 
@@ -4651,117 +4697,117 @@ RECURSIVE PATTERNS
        refers recursively to the pattern in which it appears.
 
        Obviously, PCRE cannot support the interpolation of Perl code. Instead,
-       it supports special syntax for recursion of  the  entire  pattern,  and
-       also  for  individual  subpattern  recursion. After its introduction in
-       PCRE and Python, this kind of recursion was  introduced  into  Perl  at
+       it  supports  special  syntax  for recursion of the entire pattern, and
+       also for individual subpattern recursion.  After  its  introduction  in
+       PCRE  and  Python,  this  kind of recursion was introduced into Perl at
        release 5.10.
 
-       A  special  item  that consists of (? followed by a number greater than
+       A special item that consists of (? followed by a  number  greater  than
        zero and a closing parenthesis is a recursive call of the subpattern of
-       the  given  number, provided that it occurs inside that subpattern. (If
-       not, it is a "subroutine" call, which is described  in  the  next  sec-
-       tion.)  The special item (?R) or (?0) is a recursive call of the entire
+       the given number, provided that it occurs inside that  subpattern.  (If
+       not,  it  is  a  "subroutine" call, which is described in the next sec-
+       tion.) The special item (?R) or (?0) is a recursive call of the  entire
        regular expression.
 
-       In PCRE (like Python, but unlike Perl), a recursive subpattern call  is
+       In  PCRE (like Python, but unlike Perl), a recursive subpattern call is
        always treated as an atomic group. That is, once it has matched some of
        the subject string, it is never re-entered, even if it contains untried
        alternatives and there is a subsequent matching failure.
 
-       This  PCRE  pattern  solves  the nested parentheses problem (assume the
+       This PCRE pattern solves the nested  parentheses  problem  (assume  the
        PCRE_EXTENDED option is set so that white space is ignored):
 
          \( ( (?>[^()]+) | (?R) )* \)
 
-       First it matches an opening parenthesis. Then it matches any number  of
-       substrings  which  can  either  be  a sequence of non-parentheses, or a
-       recursive match of the pattern itself (that is, a  correctly  parenthe-
+       First  it matches an opening parenthesis. Then it matches any number of
+       substrings which can either be a  sequence  of  non-parentheses,  or  a
+       recursive  match  of the pattern itself (that is, a correctly parenthe-
        sized substring).  Finally there is a closing parenthesis.
 
-       If  this  were  part of a larger pattern, you would not want to recurse
+       If this were part of a larger pattern, you would not  want  to  recurse
        the entire pattern, so instead you could use this:
 
          ( \( ( (?>[^()]+) | (?1) )* \) )
 
-       We have put the pattern into parentheses, and caused the  recursion  to
+       We  have  put the pattern into parentheses, and caused the recursion to
        refer to them instead of the whole pattern.
 
-       In  a  larger  pattern,  keeping  track  of  parenthesis numbers can be
-       tricky. This is made easier by the use of relative references. (A  Perl
-       5.10  feature.)   Instead  of  (?1)  in the pattern above you can write
+       In a larger pattern,  keeping  track  of  parenthesis  numbers  can  be
+       tricky.  This is made easier by the use of relative references. (A Perl
+       5.10 feature.)  Instead of (?1) in the  pattern  above  you  can  write
        (?-2) to refer to the second most recently opened parentheses preceding
-       the  recursion.  In  other  words,  a  negative number counts capturing
+       the recursion. In other  words,  a  negative  number  counts  capturing
        parentheses leftwards from the point at which it is encountered.
 
-       It is also possible to refer to  subsequently  opened  parentheses,  by
-       writing  references  such  as (?+2). However, these cannot be recursive
-       because the reference is not inside the  parentheses  that  are  refer-
-       enced.  They  are  always  "subroutine" calls, as described in the next
+       It  is  also  possible  to refer to subsequently opened parentheses, by
+       writing references such as (?+2). However, these  cannot  be  recursive
+       because  the  reference  is  not inside the parentheses that are refer-
+       enced. They are always "subroutine" calls, as  described  in  the  next
        section.
 
-       An alternative approach is to use named parentheses instead.  The  Perl
-       syntax  for  this  is (?&name); PCRE's earlier syntax (?P>name) is also
+       An  alternative  approach is to use named parentheses instead. The Perl
+       syntax for this is (?&name); PCRE's earlier syntax  (?P>name)  is  also
        supported. We could rewrite the above example as follows:
 
          (?<pn> \( ( (?>[^()]+) | (?&pn) )* \) )
 
-       If there is more than one subpattern with the same name,  the  earliest
+       If  there  is more than one subpattern with the same name, the earliest
        one is used.
 
-       This  particular  example pattern that we have been looking at contains
-       nested unlimited repeats, and so the use of atomic grouping for  match-
-       ing  strings  of non-parentheses is important when applying the pattern
+       This particular example pattern that we have been looking  at  contains
+       nested  unlimited repeats, and so the use of atomic grouping for match-
+       ing strings of non-parentheses is important when applying  the  pattern
        to strings that do not match. For example, when this pattern is applied
        to
 
          (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
 
-       it  yields "no match" quickly. However, if atomic grouping is not used,
-       the match runs for a very long time indeed because there  are  so  many
-       different  ways  the  + and * repeats can carve up the subject, and all
+       it yields "no match" quickly. However, if atomic grouping is not  used,
+       the  match  runs  for a very long time indeed because there are so many
+       different ways the + and * repeats can carve up the  subject,  and  all
        have to be tested before failure can be reported.
 
        At the end of a match, the values set for any capturing subpatterns are
        those from the outermost level of the recursion at which the subpattern
-       value is set.  If you want to obtain  intermediate  values,  a  callout
-       function  can be used (see below and the pcrecallout documentation). If
+       value  is  set.   If  you want to obtain intermediate values, a callout
+       function can be used (see below and the pcrecallout documentation).  If
        the pattern above is matched against
 
          (ab(cd)ef)
 
-       the value for the capturing parentheses is  "ef",  which  is  the  last
-       value  taken  on at the top level. If additional parentheses are added,
+       the  value  for  the  capturing  parentheses is "ef", which is the last
+       value taken on at the top level. If additional parentheses  are  added,
        giving
 
          \( ( ( (?>[^()]+) | (?R) )* ) \)
             ^                        ^
             ^                        ^
 
-       the string they capture is "ab(cd)ef", the contents of  the  top  level
-       parentheses.  If there are more than 15 capturing parentheses in a pat-
+       the  string  they  capture is "ab(cd)ef", the contents of the top level
+       parentheses. If there are more than 15 capturing parentheses in a  pat-
        tern, PCRE has to obtain extra memory to store data during a recursion,
-       which  it  does  by  using pcre_malloc, freeing it via pcre_free after-
-       wards. If  no  memory  can  be  obtained,  the  match  fails  with  the
+       which it does by using pcre_malloc, freeing  it  via  pcre_free  after-
+       wards.  If  no  memory  can  be  obtained,  the  match  fails  with the
        PCRE_ERROR_NOMEMORY error.
 
-       Do  not  confuse  the (?R) item with the condition (R), which tests for
-       recursion.  Consider this pattern, which matches text in  angle  brack-
-       ets,  allowing for arbitrary nesting. Only digits are allowed in nested
-       brackets (that is, when recursing), whereas any characters are  permit-
+       Do not confuse the (?R) item with the condition (R),  which  tests  for
+       recursion.   Consider  this pattern, which matches text in angle brack-
+       ets, allowing for arbitrary nesting. Only digits are allowed in  nested
+       brackets  (that is, when recursing), whereas any characters are permit-
        ted at the outer level.
 
          < (?: (?(R) \d++  | [^<>]*+) | (?R)) * >
 
-       In  this  pattern, (?(R) is the start of a conditional subpattern, with
-       two different alternatives for the recursive and  non-recursive  cases.
+       In this pattern, (?(R) is the start of a conditional  subpattern,  with
+       two  different  alternatives for the recursive and non-recursive cases.
        The (?R) item is the actual recursive call.
 
 
 SUBPATTERNS AS SUBROUTINES
 
        If the syntax for a recursive subpattern reference (either by number or
-       by name) is used outside the parentheses to which it refers,  it  oper-
-       ates  like a subroutine in a programming language. The "called" subpat-
+       by  name)  is used outside the parentheses to which it refers, it oper-
+       ates like a subroutine in a programming language. The "called"  subpat-
        tern may be defined before or after the reference. A numbered reference
        can be absolute or relative, as in these examples:
 
@@ -4773,105 +4819,105 @@ SUBPATTERNS AS SUBROUTINES
 
          (sens|respons)e and \1ibility
 
-       matches  "sense and sensibility" and "response and responsibility", but
+       matches "sense and sensibility" and "response and responsibility",  but
        not "sense and responsibility". If instead the pattern
 
          (sens|respons)e and (?1)ibility
 
-       is used, it does match "sense and responsibility" as well as the  other
-       two  strings.  Another  example  is  given  in the discussion of DEFINE
+       is  used, it does match "sense and responsibility" as well as the other
+       two strings. Another example is  given  in  the  discussion  of  DEFINE
        above.
 
        Like recursive subpatterns, a "subroutine" call is always treated as an
-       atomic  group. That is, once it has matched some of the subject string,
-       it is never re-entered, even if it contains  untried  alternatives  and
+       atomic group. That is, once it has matched some of the subject  string,
+       it  is  never  re-entered, even if it contains untried alternatives and
        there is a subsequent matching failure.
 
-       When  a  subpattern is used as a subroutine, processing options such as
+       When a subpattern is used as a subroutine, processing options  such  as
        case-independence are fixed when the subpattern is defined. They cannot
        be changed for different calls. For example, consider this pattern:
 
          (abc)(?i:(?-1))
 
-       It  matches  "abcabc". It does not match "abcABC" because the change of
+       It matches "abcabc". It does not match "abcABC" because the  change  of
        processing option does not affect the called subpattern.
 
 
 ONIGURUMA SUBROUTINE SYNTAX
 
-       For compatibility with Oniguruma, the non-Perl syntax \g followed by  a
+       For  compatibility with Oniguruma, the non-Perl syntax \g followed by a
        name or a number enclosed either in angle brackets or single quotes, is
-       an alternative syntax for referencing a  subpattern  as  a  subroutine,
-       possibly  recursively. Here are two of the examples used above, rewrit-
+       an  alternative  syntax  for  referencing a subpattern as a subroutine,
+       possibly recursively. Here are two of the examples used above,  rewrit-
        ten using this syntax:
 
          (?<pn> \( ( (?>[^()]+) | \g<pn> )* \) )
          (sens|respons)e and \g'1'ibility
 
-       PCRE supports an extension to Oniguruma: if a number is preceded  by  a
+       PCRE  supports  an extension to Oniguruma: if a number is preceded by a
        plus or a minus sign it is taken as a relative reference. For example:
 
          (abc)(?i:\g<-1>)
 
-       Note  that \g{...} (Perl syntax) and \g<...> (Oniguruma syntax) are not
-       synonymous. The former is a back reference; the latter is a  subroutine
+       Note that \g{...} (Perl syntax) and \g<...> (Oniguruma syntax) are  not
+       synonymous.  The former is a back reference; the latter is a subroutine
        call.
 
 
 CALLOUTS
 
        Perl has a feature whereby using the sequence (?{...}) causes arbitrary
-       Perl code to be obeyed in the middle of matching a regular  expression.
+       Perl  code to be obeyed in the middle of matching a regular expression.
        This makes it possible, amongst other things, to extract different sub-
        strings that match the same pair of parentheses when there is a repeti-
        tion.
 
        PCRE provides a similar feature, but of course it cannot obey arbitrary
        Perl code. The feature is called "callout". The caller of PCRE provides
-       an  external function by putting its entry point in the global variable
-       pcre_callout.  By default, this variable contains NULL, which  disables
+       an external function by putting its entry point in the global  variable
+       pcre_callout.   By default, this variable contains NULL, which disables
        all calling out.
 
-       Within  a  regular  expression,  (?C) indicates the points at which the
-       external function is to be called. If you want  to  identify  different
-       callout  points, you can put a number less than 256 after the letter C.
-       The default value is zero.  For example, this pattern has  two  callout
+       Within a regular expression, (?C) indicates the  points  at  which  the
+       external  function  is  to be called. If you want to identify different
+       callout points, you can put a number less than 256 after the letter  C.
+       The  default  value is zero.  For example, this pattern has two callout
        points:
 
          (?C1)abc(?C2)def
 
        If the PCRE_AUTO_CALLOUT flag is passed to pcre_compile(), callouts are
-       automatically installed before each item in the pattern. They  are  all
+       automatically  installed  before each item in the pattern. They are all
        numbered 255.
 
        During matching, when PCRE reaches a callout point (and pcre_callout is
-       set), the external function is called. It is provided with  the  number
-       of  the callout, the position in the pattern, and, optionally, one item
-       of data originally supplied by the caller of pcre_exec().  The  callout
-       function  may cause matching to proceed, to backtrack, or to fail alto-
+       set),  the  external function is called. It is provided with the number
+       of the callout, the position in the pattern, and, optionally, one  item
+       of  data  originally supplied by the caller of pcre_exec(). The callout
+       function may cause matching to proceed, to backtrack, or to fail  alto-
        gether. A complete description of the interface to the callout function
        is given in the pcrecallout documentation.
 
 
 BACKTRACKING CONTROL
 
-       Perl  5.10 introduced a number of "Special Backtracking Control Verbs",
+       Perl 5.10 introduced a number of "Special Backtracking Control  Verbs",
        which are described in the Perl documentation as "experimental and sub-
-       ject  to  change or removal in a future version of Perl". It goes on to
-       say: "Their usage in production code should be noted to avoid  problems
+       ject to change or removal in a future version of Perl". It goes  on  to
+       say:  "Their usage in production code should be noted to avoid problems
        during upgrades." The same remarks apply to the PCRE features described
        in this section.
 
-       Since these verbs are specifically related  to  backtracking,  most  of
-       them  can  be  used  only  when  the  pattern  is  to  be matched using
+       Since  these  verbs  are  specifically related to backtracking, most of
+       them can be  used  only  when  the  pattern  is  to  be  matched  using
        pcre_exec(), which uses a backtracking algorithm. With the exception of
        (*FAIL), which behaves like a failing negative assertion, they cause an
        error if encountered by pcre_dfa_exec().
 
-       The new verbs make use of what was previously invalid syntax: an  open-
+       The  new verbs make use of what was previously invalid syntax: an open-
        ing parenthesis followed by an asterisk. In Perl, they are generally of
        the form (*VERB:ARG) but PCRE does not support the use of arguments, so
-       its  general  form is just (*VERB). Any number of these verbs may occur
+       its general form is just (*VERB). Any number of these verbs  may  occur
        in a pattern. There are two kinds:
 
    Verbs that act immediately
@@ -4880,94 +4926,94 @@ BACKTRACKING CONTROL
 
           (*ACCEPT)
 
-       This verb causes the match to end successfully, skipping the  remainder
-       of  the pattern. When inside a recursion, only the innermost pattern is
-       ended immediately. PCRE differs  from  Perl  in  what  happens  if  the
-       (*ACCEPT)  is inside capturing parentheses. In Perl, the data so far is
+       This  verb causes the match to end successfully, skipping the remainder
+       of the pattern. When inside a recursion, only the innermost pattern  is
+       ended  immediately.  PCRE  differs  from  Perl  in  what happens if the
+       (*ACCEPT) is inside capturing parentheses. In Perl, the data so far  is
        captured: in PCRE no data is captured. For example:
 
          A(A|B(*ACCEPT)|C)D
 
-       This matches "AB", "AAD", or "ACD", but when it matches "AB",  no  data
+       This  matches  "AB", "AAD", or "ACD", but when it matches "AB", no data
        is captured.
 
          (*FAIL) or (*F)
 
-       This  verb  causes the match to fail, forcing backtracking to occur. It
-       is equivalent to (?!) but easier to read. The Perl documentation  notes
-       that  it  is  probably  useful only when combined with (?{}) or (??{}).
-       Those are, of course, Perl features that are not present in  PCRE.  The
-       nearest  equivalent is the callout feature, as for example in this pat-
+       This verb causes the match to fail, forcing backtracking to  occur.  It
+       is  equivalent to (?!) but easier to read. The Perl documentation notes
+       that it is probably useful only when combined  with  (?{})  or  (??{}).
+       Those  are,  of course, Perl features that are not present in PCRE. The
+       nearest equivalent is the callout feature, as for example in this  pat-
        tern:
 
          a+(?C)(*FAIL)
 
-       A match with the string "aaaa" always fails, but the callout  is  taken
+       A  match  with the string "aaaa" always fails, but the callout is taken
        before each backtrack happens (in this example, 10 times).
 
    Verbs that act after backtracking
 
        The following verbs do nothing when they are encountered. Matching con-
-       tinues with what follows, but if there is no subsequent match, a  fail-
-       ure  is  forced.   The  verbs  differ  in  exactly what kind of failure
+       tinues  with what follows, but if there is no subsequent match, a fail-
+       ure is forced.  The verbs  differ  in  exactly  what  kind  of  failure
        occurs.
 
          (*COMMIT)
 
-       This verb causes the whole match to fail outright if the  rest  of  the
-       pattern  does  not match. Even if the pattern is unanchored, no further
-       attempts to find a match by advancing the start point take place.  Once
-       (*COMMIT)  has been passed, pcre_exec() is committed to finding a match
+       This  verb  causes  the whole match to fail outright if the rest of the
+       pattern does not match. Even if the pattern is unanchored,  no  further
+       attempts  to find a match by advancing the start point take place. Once
+       (*COMMIT) has been passed, pcre_exec() is committed to finding a  match
        at the current starting point, or not at all. For example:
 
          a+(*COMMIT)b
 
-       This matches "xxaab" but not "aacaab". It can be thought of as  a  kind
+       This  matches  "xxaab" but not "aacaab". It can be thought of as a kind
        of dynamic anchor, or "I've started, so I must finish."
 
          (*PRUNE)
 
-       This  verb causes the match to fail at the current position if the rest
+       This verb causes the match to fail at the current position if the  rest
        of the pattern does not match. If the pattern is unanchored, the normal
-       "bumpalong"  advance to the next starting character then happens. Back-
-       tracking can occur as usual to the left of (*PRUNE), or  when  matching
-       to  the right of (*PRUNE), but if there is no match to the right, back-
-       tracking cannot cross (*PRUNE).  In simple cases, the use  of  (*PRUNE)
+       "bumpalong" advance to the next starting character then happens.  Back-
+       tracking  can  occur as usual to the left of (*PRUNE), or when matching
+       to the right of (*PRUNE), but if there is no match to the right,  back-
+       tracking  cannot  cross (*PRUNE).  In simple cases, the use of (*PRUNE)
        is just an alternative to an atomic group or possessive quantifier, but
-       there are some uses of (*PRUNE) that cannot be expressed in  any  other
+       there  are  some uses of (*PRUNE) that cannot be expressed in any other
        way.
 
          (*SKIP)
 
-       This  verb  is like (*PRUNE), except that if the pattern is unanchored,
-       the "bumpalong" advance is not to the next character, but to the  posi-
-       tion  in  the  subject where (*SKIP) was encountered. (*SKIP) signifies
-       that whatever text was matched leading up to it cannot  be  part  of  a
+       This verb is like (*PRUNE), except that if the pattern  is  unanchored,
+       the  "bumpalong" advance is not to the next character, but to the posi-
+       tion in the subject where (*SKIP) was  encountered.  (*SKIP)  signifies
+       that  whatever  text  was  matched leading up to it cannot be part of a
        successful match. Consider:
 
          a+(*SKIP)b
 
-       If  the  subject  is  "aaaac...",  after  the first match attempt fails
-       (starting at the first character in the  string),  the  starting  point
+       If the subject is "aaaac...",  after  the  first  match  attempt  fails
+       (starting  at  the  first  character in the string), the starting point
        skips on to start the next attempt at "c". Note that a possessive quan-
-       tifer does not have the same effect in this example; although it  would
-       suppress  backtracking  during  the  first  match  attempt,  the second
-       attempt would start at the second character instead of skipping  on  to
+       tifer  does not have the same effect in this example; although it would
+       suppress backtracking  during  the  first  match  attempt,  the  second
+       attempt  would  start at the second character instead of skipping on to
        "c".
 
          (*THEN)
 
        This verb causes a skip to the next alternation if the rest of the pat-
        tern does not match. That is, it cancels pending backtracking, but only
-       within  the  current  alternation.  Its name comes from the observation
+       within the current alternation. Its name  comes  from  the  observation
        that it can be used for a pattern-based if-then-else block:
 
          ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...
 
-       If the COND1 pattern matches, FOO is tried (and possibly further  items
-       after  the  end  of  the group if FOO succeeds); on failure the matcher
-       skips to the second alternative and tries COND2,  without  backtracking
-       into  COND1.  If  (*THEN)  is  used outside of any alternation, it acts
+       If  the COND1 pattern matches, FOO is tried (and possibly further items
+       after the end of the group if FOO succeeds);  on  failure  the  matcher
+       skips  to  the second alternative and tries COND2, without backtracking
+       into COND1. If (*THEN) is used outside  of  any  alternation,  it  acts
        exactly like (*PRUNE).
 
 
@@ -4985,8 +5031,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 19 April 2008
-       Copyright (c) 1997-2008 University of Cambridge.
+       Last updated: 11 April 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -5098,14 +5144,16 @@ GENERAL CATEGORY PROPERTY CODES FOR \p and \P
 SCRIPT NAMES FOR \p AND \P
 
        Arabic,  Armenian,  Balinese,  Bengali,  Bopomofo,  Braille,  Buginese,
-       Buhid,  Canadian_Aboriginal,  Cherokee,  Common,   Coptic,   Cuneiform,
-       Cypriot, Cyrillic, Deseret, Devanagari, Ethiopic, Georgian, Glagolitic,
-       Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew,  Hira-
-       gana,  Inherited,  Kannada,  Katakana,  Kharoshthi,  Khmer, Lao, Latin,
-       Limbu,  Linear_B,  Malayalam,  Mongolian,  Myanmar,  New_Tai_Lue,  Nko,
-       Ogham,  Old_Italic,  Old_Persian, Oriya, Osmanya, Phags_Pa, Phoenician,
-       Runic,  Shavian,  Sinhala,  Syloti_Nagri,  Syriac,  Tagalog,  Tagbanwa,
-       Tai_Le, Tamil, Telugu, Thaana, Thai, Tibetan, Tifinagh, Ugaritic, Yi.
+       Buhid, Canadian_Aboriginal, Carian, Cham, Cherokee, Common, Coptic, Cu-
+       neiform,  Cypriot,  Cyrillic,  Deseret, Devanagari, Ethiopic, Georgian,
+       Glagolitic, Gothic, Greek, Gujarati, Gurmukhi,  Han,  Hangul,  Hanunoo,
+       Hebrew,  Hiragana,  Inherited, Kannada, Katakana, Kayah_Li, Kharoshthi,
+       Khmer, Lao, Latin, Lepcha, Limbu, Linear_B, Lycian, Lydian,  Malayalam,
+       Mongolian,  Myanmar,  New_Tai_Lue, Nko, Ogham, Old_Italic, Old_Persian,
+       Ol_Chiki, Oriya, Osmanya, Phags_Pa, Phoenician, Rejang, Runic, Saurash-
+       tra,  Shavian,  Sinhala,  Sudanese, Syloti_Nagri, Syriac, Tagalog, Tag-
+       banwa,  Tai_Le,  Tamil,  Telugu,  Thaana,  Thai,   Tibetan,   Tifinagh,
+       Ugaritic, Vai, Yi.
 
 
 CHARACTER CLASSES
@@ -5157,7 +5205,7 @@ QUANTIFIERS
 
 ANCHORS AND SIMPLE ASSERTIONS
 
-         \b          word boundary
+         \b          word boundary (only ASCII letters recognized)
          \B          not a word boundary
          ^           start of subject
                       also after internal newline in multiline mode
@@ -5183,75 +5231,80 @@ ALTERNATION
 
 CAPTURING
 
-         (...)          capturing group
-         (?<name>...)   named capturing group (Perl)
-         (?'name'...)   named capturing group (Perl)
-         (?P<name>...)  named capturing group (Python)
-         (?:...)        non-capturing group
-         (?|...)        non-capturing group; reset group numbers for
-                         capturing groups in each alternative
+         (...)           capturing group
+         (?<name>...)    named capturing group (Perl)
+         (?'name'...)    named capturing group (Perl)
+         (?P<name>...)   named capturing group (Python)
+         (?:...)         non-capturing group
+         (?|...)         non-capturing group; reset group numbers for
+                          capturing groups in each alternative
 
 
 ATOMIC GROUPS
 
-         (?>...)        atomic, non-capturing group
+         (?>...)         atomic, non-capturing group
 
 
 COMMENT
 
-         (?#....)       comment (not nestable)
+         (?#....)        comment (not nestable)
 
 
 OPTION SETTING
 
-         (?i)           caseless
-         (?J)           allow duplicate names
-         (?m)           multiline
-         (?s)           single line (dotall)
-         (?U)           default ungreedy (lazy)
-         (?x)           extended (ignore white space)
-         (?-...)        unset option(s)
+         (?i)            caseless
+         (?J)            allow duplicate names
+         (?m)            multiline
+         (?s)            single line (dotall)
+         (?U)            default ungreedy (lazy)
+         (?x)            extended (ignore white space)
+         (?-...)         unset option(s)
+
+       The following is recognized only at the start of a pattern or after one
+       of the newline-setting options with similar syntax:
+
+         (*UTF8)         set UTF-8 mode
 
 
 LOOKAHEAD AND LOOKBEHIND ASSERTIONS
 
-         (?=...)        positive look ahead
-         (?!...)        negative look ahead
-         (?<=...)       positive look behind
-         (?<!...)       negative look behind
+         (?=...)         positive look ahead
+         (?!...)         negative look ahead
+         (?<=...)        positive look behind
+         (?<!...)        negative look behind
 
        Each top-level branch of a look behind must be of a fixed length.
 
 
 BACKREFERENCES
 
-         \n             reference by number (can be ambiguous)
-         \gn            reference by number
-         \g{n}          reference by number
-         \g{-n}         relative reference by number
-         \k<name>       reference by name (Perl)
-         \k'name'       reference by name (Perl)
-         \g{name}       reference by name (Perl)
-         \k{name}       reference by name (.NET)
-         (?P=name)      reference by name (Python)
+         \n              reference by number (can be ambiguous)
+         \gn             reference by number
+         \g{n}           reference by number
+         \g{-n}          relative reference by number
+         \k<name>        reference by name (Perl)
+         \k'name'        reference by name (Perl)
+         \g{name}        reference by name (Perl)
+         \k{name}        reference by name (.NET)
+         (?P=name)       reference by name (Python)
 
 
 SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)
 
-         (?R)           recurse whole pattern
-         (?n)           call subpattern by absolute number
-         (?+n)          call subpattern by relative number
-         (?-n)          call subpattern by relative number
-         (?&name)       call subpattern by name (Perl)
-         (?P>name)      call subpattern by name (Python)
-         \g<name>       call subpattern by name (Oniguruma)
-         \g'name'       call subpattern by name (Oniguruma)
-         \g<n>          call subpattern by absolute number (Oniguruma)
-         \g'n'          call subpattern by absolute number (Oniguruma)
-         \g<+n>         call subpattern by relative number (PCRE extension)
-         \g'+n'         call subpattern by relative number (PCRE extension)
-         \g<-n>         call subpattern by relative number (PCRE extension)
-         \g'-n'         call subpattern by relative number (PCRE extension)
+         (?R)            recurse whole pattern
+         (?n)            call subpattern by absolute number
+         (?+n)           call subpattern by relative number
+         (?-n)           call subpattern by relative number
+         (?&name)        call subpattern by name (Perl)
+         (?P>name)       call subpattern by name (Python)
+         \g<name>        call subpattern by name (Oniguruma)
+         \g'name'        call subpattern by name (Oniguruma)
+         \g<n>           call subpattern by absolute number (Oniguruma)
+         \g'n'           call subpattern by absolute number (Oniguruma)
+         \g<+n>          call subpattern by relative number (PCRE extension)
+         \g'+n'          call subpattern by relative number (PCRE extension)
+         \g<-n>          call subpattern by relative number (PCRE extension)
+         \g'-n'          call subpattern by relative number (PCRE extension)
 
 
 CONDITIONAL PATTERNS
@@ -5259,56 +5312,56 @@ CONDITIONAL PATTERNS
          (?(condition)yes-pattern)
          (?(condition)yes-pattern|no-pattern)
 
-         (?(n)...       absolute reference condition
-         (?(+n)...      relative reference condition
-         (?(-n)...      relative reference condition
-         (?(<name>)...  named reference condition (Perl)
-         (?('name')...  named reference condition (Perl)
-         (?(name)...    named reference condition (PCRE)
-         (?(R)...       overall recursion condition
-         (?(Rn)...      specific group recursion condition
-         (?(R&name)...  specific recursion condition
-         (?(DEFINE)...  define subpattern for reference
-         (?(assert)...  assertion condition
+         (?(n)...        absolute reference condition
+         (?(+n)...       relative reference condition
+         (?(-n)...       relative reference condition
+         (?(<name>)...   named reference condition (Perl)
+         (?('name')...   named reference condition (Perl)
+         (?(name)...     named reference condition (PCRE)
+         (?(R)...        overall recursion condition
+         (?(Rn)...       specific group recursion condition
+         (?(R&name)...   specific recursion condition
+         (?(DEFINE)...   define subpattern for reference
+         (?(assert)...   assertion condition
 
 
 BACKTRACKING CONTROL
 
        The following act immediately they are reached:
 
-         (*ACCEPT)      force successful match
-         (*FAIL)        force backtrack; synonym (*F)
+         (*ACCEPT)       force successful match
+         (*FAIL)         force backtrack; synonym (*F)
 
-       The following act only when a subsequent match failure causes  a  back-
+       The  following  act only when a subsequent match failure causes a back-
        track to reach them. They all force a match failure, but they differ in
        what happens afterwards. Those that advance the start-of-match point do
        so only if the pattern is not anchored.
 
-         (*COMMIT)      overall failure, no advance of starting point
-         (*PRUNE)       advance to next starting character
-         (*SKIP)        advance start to current matching position
-         (*THEN)        local failure, backtrack to next alternation
+         (*COMMIT)       overall failure, no advance of starting point
+         (*PRUNE)        advance to next starting character
+         (*SKIP)         advance start to current matching position
+         (*THEN)         local failure, backtrack to next alternation
 
 
 NEWLINE CONVENTIONS
 
-       These  are  recognized only at the very start of the pattern or after a
-       (*BSR_...) option.
+       These are recognized only at the very start of the pattern or  after  a
+       (*BSR_...) or (*UTF8) option.
 
-         (*CR)
-         (*LF)
-         (*CRLF)
-         (*ANYCRLF)
-         (*ANY)
+         (*CR)           carriage return only
+         (*LF)           linefeed only
+         (*CRLF)         carriage return followed by linefeed
+         (*ANYCRLF)      all three of the above
+         (*ANY)          any Unicode newline sequence
 
 
 WHAT \R MATCHES
 
-       These are recognized only at the very start of the pattern or  after  a
-       (*...) option that sets the newline convention.
+       These  are  recognized only at the very start of the pattern or after a
+       (*...) option that sets the newline convention or UTF-8 mode.
 
-         (*BSR_ANYCRLF)
-         (*BSR_UNICODE)
+         (*BSR_ANYCRLF)  CR, LF, or CRLF
+         (*BSR_UNICODE)  any Unicode newline sequence
 
 
 CALLOUTS
@@ -5331,8 +5384,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 09 April 2008
-       Copyright (c) 1997-2008 University of Cambridge.
+       Last updated: 11 April 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -5514,13 +5567,13 @@ MULTI-SEGMENT MATCHING WITH pcre_dfa_exec()
           0: dogsbody
           1: dog
 
-       The  pattern matches the words "dog" or "dogsbody". When the subject is
-       presented in several parts ("do" and "gsb" being  the  first  two)  the
-       match  stops  when "dog" has been found, and it is not possible to con-
-       tinue. On the other hand,  if  "dogsbody"  is  presented  as  a  single
+       The pattern matches the words "dog" or "dogsbody". When the subject  is
+       presented  in  several  parts  ("do" and "gsb" being the first two) the
+       match stops when "dog" has been found, and it is not possible  to  con-
+       tinue.  On  the  other  hand,  if  "dogsbody"  is presented as a single
        string, both matches are found.
 
-       Because  of  this  phenomenon,  it does not usually make sense to end a
+       Because of this phenomenon, it does not usually make  sense  to  end  a
        pattern that is going to be matched in this way with a variable repeat.
 
        4. Patterns that contain alternatives at the top level which do not all
@@ -5867,12 +5920,12 @@ DESCRIPTION
        command  for  linking  an application that uses them. Because the POSIX
        functions call the native ones, it is also necessary to add -lpcre.
 
-       I have implemented only those option bits that can be reasonably mapped
-       to PCRE native options. In addition, the option REG_EXTENDED is defined
-       with the value zero. This has no effect, but since  programs  that  are
-       written  to  the  POSIX interface often use it, this makes it easier to
-       slot in PCRE as a replacement library. Other POSIX options are not even
-       defined.
+       I have implemented only those POSIX option bits that can be  reasonably
+       mapped  to PCRE native options. In addition, the option REG_EXTENDED is
+       defined with the value zero. This has no  effect,  but  since  programs
+       that  are  written  to  the POSIX interface often use it, this makes it
+       easier to slot in PCRE as a replacement library.  Other  POSIX  options
+       are not even defined.
 
        When  PCRE  is  called  via these functions, it is only the API that is
        POSIX-like in style. The syntax and semantics of  the  regular  expres-
@@ -5952,9 +6005,9 @@ COMPILING A PATTERN
 MATCHING NEWLINE CHARACTERS
 
        This area is not simple, because POSIX and Perl take different views of
-       things.  It is not possible to get PCRE to obey  POSIX  semantics,  but
-       then  PCRE was never intended to be a POSIX engine. The following table
-       lists the different possibilities for matching  newline  characters  in
+       things.   It  is  not possible to get PCRE to obey POSIX semantics, but
+       then PCRE was never intended to be a POSIX engine. The following  table
+       lists  the  different  possibilities for matching newline characters in
        PCRE:
 
                                  Default   Change with
@@ -5976,19 +6029,19 @@ MATCHING NEWLINE CHARACTERS
          ^ matches \n in middle     no     REG_NEWLINE
 
        PCRE's behaviour is the same as Perl's, except that there is no equiva-
-       lent for PCRE_DOLLAR_ENDONLY in Perl. In both PCRE and Perl,  there  is
+       lent  for  PCRE_DOLLAR_ENDONLY in Perl. In both PCRE and Perl, there is
        no way to stop newline from matching [^a].
 
-       The   default  POSIX  newline  handling  can  be  obtained  by  setting
-       PCRE_DOTALL and PCRE_DOLLAR_ENDONLY, but there is no way to  make  PCRE
+       The  default  POSIX  newline  handling  can  be  obtained  by   setting
+       PCRE_DOTALL  and  PCRE_DOLLAR_ENDONLY, but there is no way to make PCRE
        behave exactly as for the REG_NEWLINE action.
 
 
 MATCHING A PATTERN
 
-       The  function  regexec()  is  called  to  match a compiled pattern preg
-       against a given string, which is by default terminated by a  zero  byte
-       (but  see  REG_STARTEND below), subject to the options in eflags. These
+       The function regexec() is called  to  match  a  compiled  pattern  preg
+       against  a  given string, which is by default terminated by a zero byte
+       (but see REG_STARTEND below), subject to the options in  eflags.  These
        can be:
 
          REG_NOTBOL
@@ -5996,6 +6049,13 @@ MATCHING A PATTERN
        The PCRE_NOTBOL option is set when calling the underlying PCRE matching
        function.
 
+         REG_NOTEMPTY
+
+       The PCRE_NOTEMPTY option is set when calling the underlying PCRE match-
+       ing function. Note that REG_NOTEMPTY is not part of the POSIX standard.
+       However, setting this option can give more POSIX-like behaviour in some
+       situations.
+
          REG_NOTEOL
 
        The PCRE_NOTEOL option is set when calling the underlying PCRE matching
@@ -6058,8 +6118,8 @@ AUTHOR
 
 REVISION
 
-       Last updated: 05 April 2008
-       Copyright (c) 1997-2008 University of Cambridge.
+       Last updated: 11 March 2009
+       Copyright (c) 1997-2009 University of Cambridge.
 ------------------------------------------------------------------------------
 
 
@@ -6163,6 +6223,10 @@ MATCHING INTERFACE
        need    more,    consider    using    the    more   general   interface
        pcrecpp::RE::DoMatch. See pcrecpp.h for the signature for DoMatch.
 
+       NOTE: Do not use no_arg, which is used internally to mark the end of  a
+       list  of optional arguments, as a placeholder for missing arguments, as
+       this can lead to segfaults.
+
 
 QUOTING METACHARACTERS
 
@@ -6396,7 +6460,7 @@ AUTHOR
 
 REVISION
 
-       Last updated: 12 November 2007
+       Last updated: 17 March 2009
 ------------------------------------------------------------------------------
 
 
diff --git a/ext/pcre/pcrelib/pcre.h b/ext/pcre/pcrelib/pcre.h
index efd105a..c5fc4c1 100644
--- a/ext/pcre/pcrelib/pcre.h
+++ b/ext/pcre/pcrelib/pcre.h
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
 /* The current PCRE version information. */
 
 #define PCRE_MAJOR          7
-#define PCRE_MINOR          8
+#define PCRE_MINOR          9
 #define PCRE_PRERELEASE     
-#define PCRE_DATE           2008-09-05
+#define PCRE_DATE           2009-04-11
 
 /* When an application links to a PCRE DLL in Windows, the symbols that are
 imported have to be identified as such. When building PCRE, the appropriate
@@ -95,7 +95,8 @@ it is needed here for malloc. */
 extern "C" {
 #endif
 
-/* Options */
+/* Options. Some are compile-time only, some are run-time only, and some are
+both, so we keep them all distinct. */
 
 #define PCRE_CASELESS           0x00000001
 #define PCRE_MULTILINE          0x00000002
@@ -125,6 +126,8 @@ extern "C" {
 #define PCRE_BSR_ANYCRLF        0x00800000
 #define PCRE_BSR_UNICODE        0x01000000
 #define PCRE_JAVASCRIPT_COMPAT  0x02000000
+#define PCRE_NO_START_OPTIMIZE  0x04000000
+#define PCRE_NO_START_OPTIMISE  0x04000000
 
 /* Exec-time and get/set-time error codes */
 
diff --git a/ext/pcre/pcrelib/pcre_compile.c b/ext/pcre/pcrelib/pcre_compile.c
index b079d19..1e0672c 100644
--- a/ext/pcre/pcrelib/pcre_compile.c
+++ b/ext/pcre/pcrelib/pcre_compile.c
@@ -95,21 +95,56 @@ are simple data values; negative values are for special things like \d and so
 on. Zero means further processing is needed (for things like \x), or the escape
 is invalid. */
 
-#ifndef EBCDIC  /* This is the "normal" table for ASCII systems */
+#ifndef EBCDIC
+
+/* This is the "normal" table for ASCII systems or for EBCDIC systems running
+in UTF-8 mode. */
+
 static const short int escapes[] = {
-     0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
-     0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
-   '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
--ESC_H,      0,      0, -ESC_K,      0,      0,      0,      0,   /* H - O */
--ESC_P, -ESC_Q, -ESC_R, -ESC_S,      0,      0, -ESC_V, -ESC_W,   /* P - W */
--ESC_X,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
-   '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
--ESC_h,      0,      0, -ESC_k,      0,      0,  ESC_n,      0,   /* h - o */
--ESC_p,      0,  ESC_r, -ESC_s,  ESC_tee,    0, -ESC_v, -ESC_w,   /* p - w */
-     0,      0, -ESC_z                                            /* x - z */
+     0,                       0,
+     0,                       0,
+     0,                       0,
+     0,                       0,
+     0,                       0,
+     CHAR_COLON,              CHAR_SEMICOLON,
+     CHAR_LESS_THAN_SIGN,     CHAR_EQUALS_SIGN,
+     CHAR_GREATER_THAN_SIGN,  CHAR_QUESTION_MARK,
+     CHAR_COMMERCIAL_AT,      -ESC_A,
+     -ESC_B,                  -ESC_C,
+     -ESC_D,                  -ESC_E,
+     0,                       -ESC_G,
+     -ESC_H,                  0,
+     0,                       -ESC_K,
+     0,                       0,
+     0,                       0,
+     -ESC_P,                  -ESC_Q,
+     -ESC_R,                  -ESC_S,
+     0,                       0,
+     -ESC_V,                  -ESC_W,
+     -ESC_X,                  0,
+     -ESC_Z,                  CHAR_LEFT_SQUARE_BRACKET,
+     CHAR_BACKSLASH,          CHAR_RIGHT_SQUARE_BRACKET,
+     CHAR_CIRCUMFLEX_ACCENT,  CHAR_UNDERSCORE,
+     CHAR_GRAVE_ACCENT,       7,
+     -ESC_b,                  0,
+     -ESC_d,                  ESC_e,
+     ESC_f,                   0,
+     -ESC_h,                  0,
+     0,                       -ESC_k,
+     0,                       0,
+     ESC_n,                   0,
+     -ESC_p,                  0,
+     ESC_r,                   -ESC_s,
+     ESC_tee,                 0,
+     -ESC_v,                  -ESC_w,
+     0,                       0,
+     -ESC_z
 };
 
-#else           /* This is the "abnormal" table for EBCDIC systems */
+#else
+
+/* This is the "abnormal" table for EBCDIC systems without UTF-8 support. */
+
 static const short int escapes[] = {
 /*  48 */     0,     0,      0,     '.',    '<',   '(',    '+',    '|',
 /*  50 */   '&',     0,      0,       0,      0,     0,      0,      0,
@@ -140,7 +175,9 @@ static const short int escapes[] = {
 
 /* Table of special "verbs" like (*PRUNE). This is a short table, so it is
 searched linearly. Put all the names into a single string, in order to reduce
-the number of relocations when a shared library is dynamically linked. */
+the number of relocations when a shared library is dynamically linked. The
+string is built from string macros so that it works in UTF-8 mode on EBCDIC
+platforms. */
 
 typedef struct verbitem {
   int   len;
@@ -148,13 +185,13 @@ typedef struct verbitem {
 } verbitem;
 
 static const char verbnames[] =
-  "ACCEPT\0"
-  "COMMIT\0"
-  "F\0"
-  "FAIL\0"
-  "PRUNE\0"
-  "SKIP\0"
-  "THEN";
+  STRING_ACCEPT0
+  STRING_COMMIT0
+  STRING_F0
+  STRING_FAIL0
+  STRING_PRUNE0
+  STRING_SKIP0
+  STRING_THEN;
 
 static const verbitem verbs[] = {
   { 6, OP_ACCEPT },
@@ -176,9 +213,10 @@ length entry. The first three must be alpha, lower, upper, as this is assumed
 for handling case independence. */
 
 static const char posix_names[] =
-  "alpha\0"  "lower\0"  "upper\0"  "alnum\0"  "ascii\0"  "blank\0"
-  "cntrl\0"  "digit\0"  "graph\0"  "print\0"  "punct\0"  "space\0"
-  "word\0"   "xdigit";
+  STRING_alpha0 STRING_lower0 STRING_upper0 STRING_alnum0
+  STRING_ascii0 STRING_blank0 STRING_cntrl0 STRING_digit0
+  STRING_graph0 STRING_print0 STRING_punct0 STRING_space0
+  STRING_word0  STRING_xdigit;
 
 static const uschar posix_name_lengths[] = {
   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
@@ -320,7 +358,11 @@ For convenience, we use the same bit definitions as in chartables:
 
 Then we can use ctype_digit and ctype_xdigit in the code. */
 
-#ifndef EBCDIC  /* This is the "normal" case, for ASCII systems */
+#ifndef EBCDIC
+
+/* This is the "normal" case, for ASCII systems, and EBCDIC systems running in
+UTF-8 mode. */
+
 static const unsigned char digitab[] =
   {
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
@@ -356,7 +398,10 @@ static const unsigned char digitab[] =
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
 
-#else           /* This is the "abnormal" case, for EBCDIC systems */
+#else
+
+/* This is the "abnormal" case, for EBCDIC systems not running in UTF-8 mode. */
+
 static const unsigned char digitab[] =
   {
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7  0 */
@@ -501,9 +546,9 @@ if (c == 0) *errorcodeptr = ERR1;
 in a table. A non-zero result is something that can be returned immediately.
 Otherwise further processing may be required. */
 
-#ifndef EBCDIC  /* ASCII coding */
-else if (c < '0' || c > 'z') {}                           /* Not alphanumeric */
-else if ((i = escapes[c - '0']) != 0) c = i;
+#ifndef EBCDIC  /* ASCII/UTF-8 coding */
+else if (c < CHAR_0 || c > CHAR_z) {}                     /* Not alphanumeric */
+else if ((i = escapes[c - CHAR_0]) != 0) c = i;
 
 #else           /* EBCDIC coding */
 else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {}   /* Not alphanumeric */
@@ -522,11 +567,11 @@ else
     /* A number of Perl escapes are not handled by PCRE. We give an explicit
     error. */
 
-    case 'l':
-    case 'L':
-    case 'N':
-    case 'u':
-    case 'U':
+    case CHAR_l:
+    case CHAR_L:
+    case CHAR_N:
+    case CHAR_u:
+    case CHAR_U:
     *errorcodeptr = ERR37;
     break;
 
@@ -546,8 +591,8 @@ else
     (possibly recursive) subroutine calls, _not_ backreferences. Just return
     the -ESC_g code (cf \k). */
 
-    case 'g':
-    if (ptr[1] == '<' || ptr[1] == '\'')
+    case CHAR_g:
+    if (ptr[1] == CHAR_LESS_THAN_SIGN || ptr[1] == CHAR_APOSTROPHE)
       {
       c = -ESC_g;
       break;
@@ -555,12 +600,12 @@ else
 
     /* Handle the Perl-compatible cases */
 
-    if (ptr[1] == '{')
+    if (ptr[1] == CHAR_LEFT_CURLY_BRACKET)
       {
       const uschar *p;
-      for (p = ptr+2; *p != 0 && *p != '}'; p++)
-        if (*p != '-' && (digitab[*p] & ctype_digit) == 0) break;
-      if (*p != 0 && *p != '}')
+      for (p = ptr+2; *p != 0 && *p != CHAR_RIGHT_CURLY_BRACKET; p++)
+        if (*p != CHAR_MINUS && (digitab[*p] & ctype_digit) == 0) break;
+      if (*p != 0 && *p != CHAR_RIGHT_CURLY_BRACKET)
         {
         c = -ESC_k;
         break;
@@ -570,7 +615,7 @@ else
       }
     else braced = FALSE;
 
-    if (ptr[1] == '-')
+    if (ptr[1] == CHAR_MINUS)
       {
       negated = TRUE;
       ptr++;
@@ -579,7 +624,7 @@ else
 
     c = 0;
     while ((digitab[ptr[1]] & ctype_digit) != 0)
-      c = c * 10 + *(++ptr) - '0';
+      c = c * 10 + *(++ptr) - CHAR_0;
 
     if (c < 0)   /* Integer overflow */
       {
@@ -587,7 +632,7 @@ else
       break;
       }
 
-    if (braced && *(++ptr) != '}')
+    if (braced && *(++ptr) != CHAR_RIGHT_CURLY_BRACKET)
       {
       *errorcodeptr = ERR57;
       break;
@@ -624,15 +669,15 @@ else
     value is greater than 377, the least significant 8 bits are taken. Inside a
     character class, \ followed by a digit is always an octal number. */
 
-    case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
+    case CHAR_1: case CHAR_2: case CHAR_3: case CHAR_4: case CHAR_5:
+    case CHAR_6: case CHAR_7: case CHAR_8: case CHAR_9:
 
     if (!isclass)
       {
       oldptr = ptr;
-      c -= '0';
+      c -= CHAR_0;
       while ((digitab[ptr[1]] & ctype_digit) != 0)
-        c = c * 10 + *(++ptr) - '0';
+        c = c * 10 + *(++ptr) - CHAR_0;
       if (c < 0)    /* Integer overflow */
         {
         *errorcodeptr = ERR61;
@@ -650,7 +695,7 @@ else
     generates a binary zero byte and treats the digit as a following literal.
     Thus we have to pull back the pointer by one. */
 
-    if ((c = *ptr) >= '8')
+    if ((c = *ptr) >= CHAR_8)
       {
       ptr--;
       c = 0;
@@ -663,10 +708,10 @@ else
     to do). Nowadays we allow for larger numbers in UTF-8 mode, but no more
     than 3 octal digits. */
 
-    case '0':
-    c -= '0';
-    while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7')
-        c = c * 8 + *(++ptr) - '0';
+    case CHAR_0:
+    c -= CHAR_0;
+    while(i++ < 2 && ptr[1] >= CHAR_0 && ptr[1] <= CHAR_7)
+        c = c * 8 + *(++ptr) - CHAR_0;
     if (!utf8 && c > 255) *errorcodeptr = ERR51;
     break;
 
@@ -674,8 +719,8 @@ else
     than 0xff in utf8 mode, but only if the ddd are hex digits. If not, { is
     treated as a data character. */
 
-    case 'x':
-    if (ptr[1] == '{')
+    case CHAR_x:
+    if (ptr[1] == CHAR_LEFT_CURLY_BRACKET)
       {
       const uschar *pt = ptr + 2;
       int count = 0;
@@ -684,19 +729,19 @@ else
       while ((digitab[*pt] & ctype_xdigit) != 0)
         {
         register int cc = *pt++;
-        if (c == 0 && cc == '0') continue;     /* Leading zeroes */
+        if (c == 0 && cc == CHAR_0) continue;     /* Leading zeroes */
         count++;
 
-#ifndef EBCDIC  /* ASCII coding */
-        if (cc >= 'a') cc -= 32;               /* Convert to upper case */
-        c = (c << 4) + cc - ((cc < 'A')? '0' : ('A' - 10));
+#ifndef EBCDIC  /* ASCII/UTF-8 coding */
+        if (cc >= CHAR_a) cc -= 32;               /* Convert to upper case */
+        c = (c << 4) + cc - ((cc < CHAR_A)? CHAR_0 : (CHAR_A - 10));
 #else           /* EBCDIC coding */
-        if (cc >= 'a' && cc <= 'z') cc += 64;  /* Convert to upper case */
-        c = (c << 4) + cc - ((cc >= '0')? '0' : ('A' - 10));
+        if (cc >= CHAR_a && cc <= CHAR_z) cc += 64;  /* Convert to upper case */
+        c = (c << 4) + cc - ((cc >= CHAR_0)? CHAR_0 : (CHAR_A - 10));
 #endif
         }
 
-      if (*pt == '}')
+      if (*pt == CHAR_RIGHT_CURLY_BRACKET)
         {
         if (c < 0 || count > (utf8? 8 : 2)) *errorcodeptr = ERR34;
         ptr = pt;
@@ -712,14 +757,14 @@ else
     c = 0;
     while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0)
       {
-      int cc;                               /* Some compilers don't like ++ */
-      cc = *(++ptr);                        /* in initializers */
-#ifndef EBCDIC  /* ASCII coding */
-      if (cc >= 'a') cc -= 32;              /* Convert to upper case */
-      c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
+      int cc;                                  /* Some compilers don't like */
+      cc = *(++ptr);                           /* ++ in initializers */
+#ifndef EBCDIC  /* ASCII/UTF-8 coding */
+      if (cc >= CHAR_a) cc -= 32;              /* Convert to upper case */
+      c = c * 16 + cc - ((cc < CHAR_A)? CHAR_0 : (CHAR_A - 10));
 #else           /* EBCDIC coding */
-      if (cc <= 'z') cc += 64;              /* Convert to upper case */
-      c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
+      if (cc <= CHAR_z) cc += 64;              /* Convert to upper case */
+      c = c * 16 + cc - ((cc >= CHAR_0)? CHAR_0 : (CHAR_A - 10));
 #endif
       }
     break;
@@ -728,7 +773,7 @@ else
     This coding is ASCII-specific, but then the whole concept of \cx is
     ASCII-specific. (However, an EBCDIC equivalent has now been added.) */
 
-    case 'c':
+    case CHAR_c:
     c = *(++ptr);
     if (c == 0)
       {
@@ -736,11 +781,11 @@ else
       break;
       }
 
-#ifndef EBCDIC  /* ASCII coding */
-    if (c >= 'a' && c <= 'z') c -= 32;
+#ifndef EBCDIC  /* ASCII/UTF-8 coding */
+    if (c >= CHAR_a && c <= CHAR_z) c -= 32;
     c ^= 0x40;
 #else           /* EBCDIC coding */
-    if (c >= 'a' && c <= 'z') c += 64;
+    if (c >= CHAR_a && c <= CHAR_z) c += 64;
     c ^= 0xC0;
 #endif
     break;
@@ -802,9 +847,9 @@ if (c == 0) goto ERROR_RETURN;
 /* \P or \p can be followed by a name in {}, optionally preceded by ^ for
 negation. */
 
-if (c == '{')
+if (c == CHAR_LEFT_CURLY_BRACKET)
   {
-  if (ptr[1] == '^')
+  if (ptr[1] == CHAR_CIRCUMFLEX_ACCENT)
     {
     *negptr = TRUE;
     ptr++;
@@ -813,10 +858,10 @@ if (c == '{')
     {
     c = *(++ptr);
     if (c == 0) goto ERROR_RETURN;
-    if (c == '}') break;
+    if (c == CHAR_RIGHT_CURLY_BRACKET) break;
     name[i] = c;
     }
-  if (c !='}') goto ERROR_RETURN;
+  if (c != CHAR_RIGHT_CURLY_BRACKET) goto ERROR_RETURN;
   name[i] = 0;
   }
 
@@ -881,15 +926,15 @@ is_counted_repeat(const uschar *p)
 {
 if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
 while ((digitab[*p] & ctype_digit) != 0) p++;
-if (*p == '}') return TRUE;
+if (*p == CHAR_RIGHT_CURLY_BRACKET) return TRUE;
 
-if (*p++ != ',') return FALSE;
-if (*p == '}') return TRUE;
+if (*p++ != CHAR_COMMA) return FALSE;
+if (*p == CHAR_RIGHT_CURLY_BRACKET) return TRUE;
 
 if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
 while ((digitab[*p] & ctype_digit) != 0) p++;
 
-return (*p == '}');
+return (*p == CHAR_RIGHT_CURLY_BRACKET);
 }
 
 
@@ -922,7 +967,7 @@ int max = -1;
 /* Read the minimum value and do a paranoid check: a negative value indicates
 an integer overflow. */
 
-while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
+while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - CHAR_0;
 if (min < 0 || min > 65535)
   {
   *errorcodeptr = ERR5;
@@ -932,12 +977,12 @@ if (min < 0 || min > 65535)
 /* Read the maximum value if there is one, and again do a paranoid on its size.
 Also, max must not be less than min. */
 
-if (*p == '}') max = min; else
+if (*p == CHAR_RIGHT_CURLY_BRACKET) max = min; else
   {
-  if (*(++p) != '}')
+  if (*(++p) != CHAR_RIGHT_CURLY_BRACKET)
     {
     max = 0;
-    while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
+    while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - CHAR_0;
     if (max < 0 || max > 65535)
       {
       *errorcodeptr = ERR5;
@@ -962,47 +1007,116 @@ return p;
 
 
 /*************************************************
-*       Find forward referenced subpattern       *
+*  Subroutine for finding forward reference      *
 *************************************************/
 
-/* This function scans along a pattern's text looking for capturing
+/* This recursive function is called only from find_parens() below. The
+top-level call starts at the beginning of the pattern. All other calls must
+start at a parenthesis. It scans along a pattern's text looking for capturing
 subpatterns, and counting them. If it finds a named pattern that matches the
 name it is given, it returns its number. Alternatively, if the name is NULL, it
-returns when it reaches a given numbered subpattern. This is used for forward
-references to subpatterns. We know that if (?P< is encountered, the name will
-be terminated by '>' because that is checked in the first pass.
+returns when it reaches a given numbered subpattern. We know that if (?P< is
+encountered, the name will be terminated by '>' because that is checked in the
+first pass. Recursion is used to keep track of subpatterns that reset the
+capturing group numbers - the (?| feature.
 
 Arguments:
-  ptr          current position in the pattern
+  ptrptr       address of the current character pointer (updated)
   cd           compile background data
   name         name to seek, or NULL if seeking a numbered subpattern
   lorn         name length, or subpattern number if name is NULL
   xmode        TRUE if we are in /x mode
+  count        pointer to the current capturing subpattern number (updated)
 
 Returns:       the number of the named subpattern, or -1 if not found
 */
 
 static int
-find_parens(const uschar *ptr, compile_data *cd, const uschar *name, int lorn,
-  BOOL xmode)
+find_parens_sub(uschar **ptrptr, compile_data *cd, const uschar *name, int lorn,
+  BOOL xmode, int *count)
 {
-const uschar *thisname;
-int count = cd->bracount;
+uschar *ptr = *ptrptr;
+int start_count = *count;
+int hwm_count = start_count;
+BOOL dup_parens = FALSE;
 
-for (; *ptr != 0; ptr++)
+/* If the first character is a parenthesis, check on the type of group we are
+dealing with. The very first call may not start with a parenthesis. */
+
+if (ptr[0] == CHAR_LEFT_PARENTHESIS)
   {
-  int term;
+  if (ptr[1] == CHAR_QUESTION_MARK &&
+      ptr[2] == CHAR_VERTICAL_LINE)
+    {
+    ptr += 3;
+    dup_parens = TRUE;
+    }
+
+  /* Handle a normal, unnamed capturing parenthesis */
+
+  else if (ptr[1] != CHAR_QUESTION_MARK && ptr[1] != CHAR_ASTERISK)
+    {
+    *count += 1;
+    if (name == NULL && *count == lorn) return *count;
+    ptr++;
+    }
+
+  /* Handle a condition. If it is an assertion, just carry on so that it
+  is processed as normal. If not, skip to the closing parenthesis of the
+  condition (there can't be any nested parens. */
+
+  else if (ptr[2] == CHAR_LEFT_PARENTHESIS)
+    {
+    ptr += 2;
+    if (ptr[1] != CHAR_QUESTION_MARK)
+      {
+      while (*ptr != 0 && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
+      if (*ptr != 0) ptr++;
+      }
+    }
+
+  /* We have either (? or (* and not a condition */
+
+  else
+    {
+    ptr += 2;
+    if (*ptr == CHAR_P) ptr++;                      /* Allow optional P */
+
+    /* We have to disambiguate (?<! and (?<= from (?<name> for named groups */
+
+    if ((*ptr == CHAR_LESS_THAN_SIGN && ptr[1] != CHAR_EXCLAMATION_MARK &&
+        ptr[1] != CHAR_EQUALS_SIGN) || *ptr == CHAR_APOSTROPHE)
+      {
+      int term;
+      const uschar *thisname;
+      *count += 1;
+      if (name == NULL && *count == lorn) return *count;
+      term = *ptr++;
+      if (term == CHAR_LESS_THAN_SIGN) term = CHAR_GREATER_THAN_SIGN;
+      thisname = ptr;
+      while (*ptr != term) ptr++;
+      if (name != NULL && lorn == ptr - thisname &&
+          strncmp((const char *)name, (const char *)thisname, lorn) == 0)
+        return *count;
+      }
+    }
+  }
 
+/* Past any initial parenthesis handling, scan for parentheses or vertical
+bars. */
+
+for (; *ptr != 0; ptr++)
+  {
   /* Skip over backslashed characters and also entire \Q...\E */
 
-  if (*ptr == '\\')
+  if (*ptr == CHAR_BACKSLASH)
     {
-    if (*(++ptr) == 0) return -1;
-    if (*ptr == 'Q') for (;;)
+    if (*(++ptr) == 0) goto FAIL_EXIT;
+    if (*ptr == CHAR_Q) for (;;)
       {
-      while (*(++ptr) != 0 && *ptr != '\\') {};
-      if (*ptr == 0) return -1;
-      if (*(++ptr) == 'E') break;
+      while (*(++ptr) != 0 && *ptr != CHAR_BACKSLASH) {};
+      if (*ptr == 0) goto FAIL_EXIT;
+      if (*(++ptr) == CHAR_E) break;
       }
     continue;
     }
@@ -1010,21 +1124,26 @@ for (; *ptr != 0; ptr++)
   /* Skip over character classes; this logic must be similar to the way they
   are handled for real. If the first character is '^', skip it. Also, if the
   first few characters (either before or after ^) are \Q\E or \E we skip them
-  too. This makes for compatibility with Perl. */
+  too. This makes for compatibility with Perl. Note the use of STR macros to
+  encode "Q\\E" so that it works in UTF-8 on EBCDIC platforms. */
 
-  if (*ptr == '[')
+  if (*ptr == CHAR_LEFT_SQUARE_BRACKET)
     {
     BOOL negate_class = FALSE;
     for (;;)
       {
       int c = *(++ptr);
-      if (c == '\\')
+      if (c == CHAR_BACKSLASH)
         {
-        if (ptr[1] == 'E') ptr++;
-          else if (strncmp((const char *)ptr+1, "Q\\E", 3) == 0) ptr += 3;
-            else break;
+        if (ptr[1] == CHAR_E)
+          ptr++;
+        else if (strncmp((const char *)ptr+1,
+                 STR_Q STR_BACKSLASH STR_E, 3) == 0)
+          ptr += 3;
+        else
+          break;
         }
-      else if (!negate_class && c == '^')
+      else if (!negate_class && c == CHAR_CIRCUMFLEX_ACCENT)
         negate_class = TRUE;
       else break;
       }
@@ -1032,20 +1151,21 @@ for (; *ptr != 0; ptr++)
     /* If the next character is ']', it is a data character that must be
     skipped, except in JavaScript compatibility mode. */
 
-    if (ptr[1] == ']' && (cd->external_options & PCRE_JAVASCRIPT_COMPAT) == 0)
+    if (ptr[1] == CHAR_RIGHT_SQUARE_BRACKET &&
+        (cd->external_options & PCRE_JAVASCRIPT_COMPAT) == 0)
       ptr++;
 
-    while (*(++ptr) != ']')
+    while (*(++ptr) != CHAR_RIGHT_SQUARE_BRACKET)
       {
       if (*ptr == 0) return -1;
-      if (*ptr == '\\')
+      if (*ptr == CHAR_BACKSLASH)
         {
-        if (*(++ptr) == 0) return -1;
-        if (*ptr == 'Q') for (;;)
+        if (*(++ptr) == 0) goto FAIL_EXIT;
+        if (*ptr == CHAR_Q) for (;;)
           {
-          while (*(++ptr) != 0 && *ptr != '\\') {};
-          if (*ptr == 0) return -1;
-          if (*(++ptr) == 'E') break;
+          while (*(++ptr) != 0 && *ptr != CHAR_BACKSLASH) {};
+          if (*ptr == 0) goto FAIL_EXIT;
+          if (*(++ptr) == CHAR_E) break;
           }
         continue;
         }
@@ -1055,49 +1175,92 @@ for (; *ptr != 0; ptr++)
 
   /* Skip comments in /x mode */
 
-  if (xmode && *ptr == '#')
+  if (xmode && *ptr == CHAR_NUMBER_SIGN)
     {
-    while (*(++ptr) != 0 && *ptr != '\n') {};
-    if (*ptr == 0) return -1;
+    while (*(++ptr) != 0 && *ptr != CHAR_NL) {};
+    if (*ptr == 0) goto FAIL_EXIT;
     continue;
     }
 
-  /* An opening parens must now be a real metacharacter */
+  /* Check for the special metacharacters */
 
-  if (*ptr != '(') continue;
-  if (ptr[1] != '?' && ptr[1] != '*')
+  if (*ptr == CHAR_LEFT_PARENTHESIS)
     {
-    count++;
-    if (name == NULL && count == lorn) return count;
-    continue;
+    int rc = find_parens_sub(&ptr, cd, name, lorn, xmode, count);
+    if (rc > 0) return rc;
+    if (*ptr == 0) goto FAIL_EXIT;
+    }
+
+  else if (*ptr == CHAR_RIGHT_PARENTHESIS)
+    {
+    if (dup_parens && *count < hwm_count) *count = hwm_count;
+    *ptrptr = ptr;
+    return -1;
     }
 
-  ptr += 2;
-  if (*ptr == 'P') ptr++;                      /* Allow optional P */
+  else if (*ptr == CHAR_VERTICAL_LINE && dup_parens)
+    {
+    if (*count > hwm_count) hwm_count = *count;
+    *count = start_count;
+    }
+  }
+
+FAIL_EXIT:
+*ptrptr = ptr;
+return -1;
+}
+
 
-  /* We have to disambiguate (?<! and (?<= from (?<name> */
 
-  if ((*ptr != '<' || ptr[1] == '!' || ptr[1] == '=') &&
-       *ptr != '\'')
-    continue;
 
-  count++;
+/*************************************************
+*       Find forward referenced subpattern       *
+*************************************************/
+
+/* This function scans along a pattern's text looking for capturing
+subpatterns, and counting them. If it finds a named pattern that matches the
+name it is given, it returns its number. Alternatively, if the name is NULL, it
+returns when it reaches a given numbered subpattern. This is used for forward
+references to subpatterns. We used to be able to start this scan from the
+current compiling point, using the current count value from cd->bracount, and
+do it all in a single loop, but the addition of the possibility of duplicate
+subpattern numbers means that we have to scan from the very start, in order to
+take account of such duplicates, and to use a recursive function to keep track
+of the different types of group.
+
+Arguments:
+  cd           compile background data
+  name         name to seek, or NULL if seeking a numbered subpattern
+  lorn         name length, or subpattern number if name is NULL
+  xmode        TRUE if we are in /x mode
+
+Returns:       the number of the found subpattern, or -1 if not found
+*/
+
+static int
+find_parens(compile_data *cd, const uschar *name, int lorn, BOOL xmode)
+{
+uschar *ptr = (uschar *)cd->start_pattern;
+int count = 0;
+int rc;
 
-  if (name == NULL && count == lorn) return count;
-  term = *ptr++;
-  if (term == '<') term = '>';
-  thisname = ptr;
-  while (*ptr != term) ptr++;
-  if (name != NULL && lorn == ptr - thisname &&
-      strncmp((const char *)name, (const char *)thisname, lorn) == 0)
-    return count;
+/* If the pattern does not start with an opening parenthesis, the first call
+to find_parens_sub() will scan right to the end (if necessary). However, if it
+does start with a parenthesis, find_parens_sub() will return when it hits the
+matching closing parens. That is why we have to have a loop. */
+
+for (;;)
+  {
+  rc = find_parens_sub(&ptr, cd, name, lorn, xmode, &count);
+  if (rc > 0 || *ptr++ == 0) break;
   }
 
-return -1;
+return rc;
 }
 
 
 
+
 /*************************************************
 *      Find first significant op code            *
 *************************************************/
@@ -1611,17 +1774,25 @@ for (code = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, TRUE
     BOOL empty_branch;
     if (GET(code, 1) == 0) return TRUE;    /* Hit unclosed bracket */
 
-    /* Scan a closed bracket */
+    /* If a conditional group has only one branch, there is a second, implied,
+    empty branch, so just skip over the conditional, because it could be empty.
+    Otherwise, scan the individual branches of the group. */
 
-    empty_branch = FALSE;
-    do
-      {
-      if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
-        empty_branch = TRUE;
+    if (c == OP_COND && code[GET(code, 1)] != OP_ALT)
       code += GET(code, 1);
+    else
+      {
+      empty_branch = FALSE;
+      do
+        {
+        if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
+          empty_branch = TRUE;
+        code += GET(code, 1);
+        }
+      while (*code == OP_ALT);
+      if (!empty_branch) return FALSE;   /* All branches are non-empty */
       }
-    while (*code == OP_ALT);
-    if (!empty_branch) return FALSE;   /* All branches are non-empty */
+
     c = *code;
     continue;
     }
@@ -1823,10 +1994,10 @@ int terminator;          /* Don't combine these lines; the Solaris cc */
 terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
 for (++ptr; *ptr != 0; ptr++)
   {
-  if (*ptr == '\\' && ptr[1] == ']') ptr++; else
+  if (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET) ptr++; else
     {
-    if (*ptr == ']') return FALSE;
-    if (*ptr == terminator && ptr[1] == ']')
+    if (*ptr == CHAR_RIGHT_SQUARE_BRACKET) return FALSE;
+    if (*ptr == terminator && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET)
       {
       *endptr = ptr;
       return TRUE;
@@ -2072,7 +2243,7 @@ if ((options & PCRE_EXTENDED) != 0)
   for (;;)
     {
     while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++;
-    if (*ptr == '#')
+    if (*ptr == CHAR_NUMBER_SIGN)
       {
       while (*(++ptr) != 0)
         if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; }
@@ -2084,7 +2255,7 @@ if ((options & PCRE_EXTENDED) != 0)
 /* If the next item is one that we can handle, get its value. A non-negative
 value is a character, a negative value is an escape value. */
 
-if (*ptr == '\\')
+if (*ptr == CHAR_BACKSLASH)
   {
   int temperrorcode = 0;
   next = check_escape(&ptr, &temperrorcode, cd->bracount, options, FALSE);
@@ -2109,7 +2280,7 @@ if ((options & PCRE_EXTENDED) != 0)
   for (;;)
     {
     while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++;
-    if (*ptr == '#')
+    if (*ptr == CHAR_NUMBER_SIGN)
       {
       while (*(++ptr) != 0)
         if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; }
@@ -2120,8 +2291,9 @@ if ((options & PCRE_EXTENDED) != 0)
 
 /* If the next thing is itself optional, we have to give up. */
 
-if (*ptr == '*' || *ptr == '?' || strncmp((char *)ptr, "{0,", 3) == 0)
-  return FALSE;
+if (*ptr == CHAR_ASTERISK || *ptr == CHAR_QUESTION_MARK ||
+  strncmp((char *)ptr, STR_LEFT_CURLY_BRACKET STR_0 STR_COMMA, 3) == 0)
+    return FALSE;
 
 /* Now compare the next item with the previous opcode. If the previous is a
 positive single character match, "item" either contains the character or, if
@@ -2559,7 +2731,7 @@ for (;; ptr++)
 
   if (inescq && c != 0)
     {
-    if (c == '\\' && ptr[1] == 'E')
+    if (c == CHAR_BACKSLASH && ptr[1] == CHAR_E)
       {
       inescq = FALSE;
       ptr++;
@@ -2585,8 +2757,9 @@ for (;; ptr++)
   /* Fill in length of a previous callout, except when the next thing is
   a quantifier. */
 
-  is_quantifier = c == '*' || c == '+' || c == '?' ||
-    (c == '{' && is_counted_repeat(ptr+1));
+  is_quantifier =
+    c == CHAR_ASTERISK || c == CHAR_PLUS || c == CHAR_QUESTION_MARK ||
+    (c == CHAR_LEFT_CURLY_BRACKET && is_counted_repeat(ptr+1));
 
   if (!is_quantifier && previous_callout != NULL &&
        after_manual_callout-- <= 0)
@@ -2601,7 +2774,7 @@ for (;; ptr++)
   if ((options & PCRE_EXTENDED) != 0)
     {
     if ((cd->ctypes[c] & ctype_space) != 0) continue;
-    if (c == '#')
+    if (c == CHAR_NUMBER_SIGN)
       {
       while (*(++ptr) != 0)
         {
@@ -2626,8 +2799,8 @@ for (;; ptr++)
     {
     /* ===================================================================*/
     case 0:                        /* The branch terminates at string end */
-    case '|':                      /* or | or ) */
-    case ')':
+    case CHAR_VERTICAL_LINE:       /* or | or ) */
+    case CHAR_RIGHT_PARENTHESIS:
     *firstbyteptr = firstbyte;
     *reqbyteptr = reqbyte;
     *codeptr = code;
@@ -2649,7 +2822,7 @@ for (;; ptr++)
     /* Handle single-character metacharacters. In multiline mode, ^ disables
     the setting of any following char as a first character. */
 
-    case '^':
+    case CHAR_CIRCUMFLEX_ACCENT:
     if ((options & PCRE_MULTILINE) != 0)
       {
       if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
@@ -2658,7 +2831,7 @@ for (;; ptr++)
     *code++ = OP_CIRC;
     break;
 
-    case '$':
+    case CHAR_DOLLAR_SIGN:
     previous = NULL;
     *code++ = OP_DOLL;
     break;
@@ -2666,7 +2839,7 @@ for (;; ptr++)
     /* There can never be a first char if '.' is first, whatever happens about
     repeats. The value of reqbyte doesn't change either. */
 
-    case '.':
+    case CHAR_DOT:
     if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
     zerofirstbyte = firstbyte;
     zeroreqbyte = reqbyte;
@@ -2690,7 +2863,7 @@ for (;; ptr++)
     In JavaScript compatibility mode, an isolated ']' causes an error. In
     default (Perl) mode, it is treated as a data character. */
 
-    case ']':
+    case CHAR_RIGHT_SQUARE_BRACKET:
     if ((cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
       {
       *errorcodeptr = ERR64;
@@ -2698,16 +2871,17 @@ for (;; ptr++)
       }
     goto NORMAL_CHAR;
 
-    case '[':
+    case CHAR_LEFT_SQUARE_BRACKET:
     previous = code;
 
     /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
     they are encountered at the top level, so we'll do that too. */
 
-    if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
+    if ((ptr[1] == CHAR_COLON || ptr[1] == CHAR_DOT ||
+         ptr[1] == CHAR_EQUALS_SIGN) &&
         check_posix_syntax(ptr, &tempptr))
       {
-      *errorcodeptr = (ptr[1] == ':')? ERR13 : ERR31;
+      *errorcodeptr = (ptr[1] == CHAR_COLON)? ERR13 : ERR31;
       goto FAILED;
       }
 
@@ -2719,13 +2893,17 @@ for (;; ptr++)
     for (;;)
       {
       c = *(++ptr);
-      if (c == '\\')
+      if (c == CHAR_BACKSLASH)
         {
-        if (ptr[1] == 'E') ptr++;
-          else if (strncmp((const char *)ptr+1, "Q\\E", 3) == 0) ptr += 3;
-            else break;
+        if (ptr[1] == CHAR_E)
+          ptr++;
+        else if (strncmp((const char *)ptr+1,
+                          STR_Q STR_BACKSLASH STR_E, 3) == 0)
+          ptr += 3;
+        else
+          break;
         }
-      else if (!negate_class && c == '^')
+      else if (!negate_class && c == CHAR_CIRCUMFLEX_ACCENT)
         negate_class = TRUE;
       else break;
       }
@@ -2735,7 +2913,8 @@ for (;; ptr++)
     that. In JS mode, [] must always fail, so generate OP_FAIL, whereas
     [^] must match any character, so generate OP_ALLANY. */
 
-    if (c ==']' && (cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
+    if (c == CHAR_RIGHT_SQUARE_BRACKET &&
+        (cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
       {
       *code++ = negate_class? OP_ALLANY : OP_FAIL;
       if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
@@ -2800,7 +2979,7 @@ for (;; ptr++)
 
       if (inescq)
         {
-        if (c == '\\' && ptr[1] == 'E')     /* If we are at \E */
+        if (c == CHAR_BACKSLASH && ptr[1] == CHAR_E)  /* If we are at \E */
           {
           inescq = FALSE;                   /* Reset literal state */
           ptr++;                            /* Skip the 'E' */
@@ -2815,23 +2994,23 @@ for (;; ptr++)
       [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
       5.6 and 5.8 do. */
 
-      if (c == '[' &&
-          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
-          check_posix_syntax(ptr, &tempptr))
+      if (c == CHAR_LEFT_SQUARE_BRACKET &&
+          (ptr[1] == CHAR_COLON || ptr[1] == CHAR_DOT ||
+           ptr[1] == CHAR_EQUALS_SIGN) && check_posix_syntax(ptr, &tempptr))
         {
         BOOL local_negate = FALSE;
         int posix_class, taboffset, tabopt;
         register const uschar *cbits = cd->cbits;
         uschar pbits[32];
 
-        if (ptr[1] != ':')
+        if (ptr[1] != CHAR_COLON)
           {
           *errorcodeptr = ERR31;
           goto FAILED;
           }
 
         ptr += 2;
-        if (*ptr == '^')
+        if (*ptr == CHAR_CIRCUMFLEX_ACCENT)
           {
           local_negate = TRUE;
           should_flip_negation = TRUE;  /* Note negative special */
@@ -2904,17 +3083,17 @@ for (;; ptr++)
       to 'or' into the one we are building. We assume they have more than one
       character in them, so set class_charcount bigger than one. */
 
-      if (c == '\\')
+      if (c == CHAR_BACKSLASH)
         {
         c = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE);
         if (*errorcodeptr != 0) goto FAILED;
 
-        if (-c == ESC_b) c = '\b';       /* \b is backspace in a class */
-        else if (-c == ESC_X) c = 'X';   /* \X is literal X in a class */
-        else if (-c == ESC_R) c = 'R';   /* \R is literal R in a class */
+        if (-c == ESC_b) c = CHAR_BS;       /* \b is backspace in a class */
+        else if (-c == ESC_X) c = CHAR_X;   /* \X is literal X in a class */
+        else if (-c == ESC_R) c = CHAR_R;   /* \R is literal R in a class */
         else if (-c == ESC_Q)            /* Handle start of quoted string */
           {
-          if (ptr[1] == '\\' && ptr[2] == 'E')
+          if (ptr[1] == CHAR_BACKSLASH && ptr[2] == CHAR_E)
             {
             ptr += 2; /* avoid empty string */
             }
@@ -3140,7 +3319,7 @@ for (;; ptr++)
       entirely. The code for handling \Q and \E is messy. */
 
       CHECK_RANGE:
-      while (ptr[1] == '\\' && ptr[2] == 'E')
+      while (ptr[1] == CHAR_BACKSLASH && ptr[2] == CHAR_E)
         {
         inescq = FALSE;
         ptr += 2;
@@ -3150,28 +3329,29 @@ for (;; ptr++)
 
       /* Remember \r or \n */
 
-      if (c == '\r' || c == '\n') cd->external_flags |= PCRE_HASCRORLF;
+      if (c == CHAR_CR || c == CHAR_NL) cd->external_flags |= PCRE_HASCRORLF;
 
       /* Check for range */
 
-      if (!inescq && ptr[1] == '-')
+      if (!inescq && ptr[1] == CHAR_MINUS)
         {
         int d;
         ptr += 2;
-        while (*ptr == '\\' && ptr[1] == 'E') ptr += 2;
+        while (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_E) ptr += 2;
 
         /* If we hit \Q (not followed by \E) at this point, go into escaped
         mode. */
 
-        while (*ptr == '\\' && ptr[1] == 'Q')
+        while (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_Q)
           {
           ptr += 2;
-          if (*ptr == '\\' && ptr[1] == 'E') { ptr += 2; continue; }
+          if (*ptr == CHAR_BACKSLASH && ptr[1] == CHAR_E)
+            { ptr += 2; continue; }
           inescq = TRUE;
           break;
           }
 
-        if (*ptr == 0 || (!inescq && *ptr == ']'))
+        if (*ptr == 0 || (!inescq && *ptr == CHAR_RIGHT_SQUARE_BRACKET))
           {
           ptr = oldptr;
           goto LONE_SINGLE_CHARACTER;
@@ -3190,7 +3370,7 @@ for (;; ptr++)
         not any of the other escapes. Perl 5.6 treats a hyphen as a literal
         in such circumstances. */
 
-        if (!inescq && d == '\\')
+        if (!inescq && d == CHAR_BACKSLASH)
           {
           d = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE);
           if (*errorcodeptr != 0) goto FAILED;
@@ -3200,9 +3380,9 @@ for (;; ptr++)
 
           if (d < 0)
             {
-            if (d == -ESC_b) d = '\b';
-            else if (d == -ESC_X) d = 'X';
-            else if (d == -ESC_R) d = 'R'; else
+            if (d == -ESC_b) d = CHAR_BS;
+            else if (d == -ESC_X) d = CHAR_X;
+            else if (d == -ESC_R) d = CHAR_R; else
               {
               ptr = oldptr;
               goto LONE_SINGLE_CHARACTER;  /* A few lines below */
@@ -3223,7 +3403,7 @@ for (;; ptr++)
 
         /* Remember \r or \n */
 
-        if (d == '\r' || d == '\n') cd->external_flags |= PCRE_HASCRORLF;
+        if (d == CHAR_CR || d == CHAR_NL) cd->external_flags |= PCRE_HASCRORLF;
 
         /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
         matching, we have to use an XCLASS with extra data items. Caseless
@@ -3370,7 +3550,7 @@ for (;; ptr++)
 
     /* Loop until ']' reached. This "while" is the end of the "do" above. */
 
-    while ((c = *(++ptr)) != 0 && (c != ']' || inescq));
+    while ((c = *(++ptr)) != 0 && (c != CHAR_RIGHT_SQUARE_BRACKET || inescq));
 
     if (c == 0)                          /* Missing terminating ']' */
       {
@@ -3515,23 +3695,23 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
     /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
     has been tested above. */
 
-    case '{':
+    case CHAR_LEFT_CURLY_BRACKET:
     if (!is_quantifier) goto NORMAL_CHAR;
     ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorcodeptr);
     if (*errorcodeptr != 0) goto FAILED;
     goto REPEAT;
 
-    case '*':
+    case CHAR_ASTERISK:
     repeat_min = 0;
     repeat_max = -1;
     goto REPEAT;
 
-    case '+':
+    case CHAR_PLUS:
     repeat_min = 1;
     repeat_max = -1;
     goto REPEAT;
 
-    case '?':
+    case CHAR_QUESTION_MARK:
     repeat_min = 0;
     repeat_max = 1;
 
@@ -3566,13 +3746,13 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
     but if PCRE_UNGREEDY is set, it works the other way round. We change the
     repeat type to the non-default. */
 
-    if (ptr[1] == '+')
+    if (ptr[1] == CHAR_PLUS)
       {
       repeat_type = 0;                  /* Force greedy */
       possessive_quantifier = TRUE;
       ptr++;
       }
-    else if (ptr[1] == '?')
+    else if (ptr[1] == CHAR_QUESTION_MARK)
       {
       repeat_type = greedy_non_default;
       ptr++;
@@ -4205,7 +4385,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
     lookbehind or option setting or condition or all the other extended
     parenthesis forms.  */
 
-    case '(':
+    case CHAR_LEFT_PARENTHESIS:
     newoptions = options;
     skipbytes = 0;
     bravalue = OP_CBRA;
@@ -4214,19 +4394,19 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
     /* First deal with various "verbs" that can be introduced by '*'. */
 
-    if (*(++ptr) == '*' && (cd->ctypes[ptr[1]] & ctype_letter) != 0)
+    if (*(++ptr) == CHAR_ASTERISK && (cd->ctypes[ptr[1]] & ctype_letter) != 0)
       {
       int i, namelen;
       const char *vn = verbnames;
       const uschar *name = ++ptr;
       previous = NULL;
       while ((cd->ctypes[*++ptr] & ctype_letter) != 0) {};
-      if (*ptr == ':')
+      if (*ptr == CHAR_COLON)
         {
         *errorcodeptr = ERR59;   /* Not supported */
         goto FAILED;
         }
-      if (*ptr != ')')
+      if (*ptr != CHAR_RIGHT_PARENTHESIS)
         {
         *errorcodeptr = ERR60;
         goto FAILED;
@@ -4251,7 +4431,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
     /* Deal with the extended parentheses; all are introduced by '?', and the
     appearance of any of them means that this is not a capturing group. */
 
-    else if (*ptr == '?')
+    else if (*ptr == CHAR_QUESTION_MARK)
       {
       int i, set, unset, namelen;
       int *optset;
@@ -4260,9 +4440,9 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
       switch (*(++ptr))
         {
-        case '#':                 /* Comment; skip to ket */
+        case CHAR_NUMBER_SIGN:                 /* Comment; skip to ket */
         ptr++;
-        while (*ptr != 0 && *ptr != ')') ptr++;
+        while (*ptr != 0 && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
         if (*ptr == 0)
           {
           *errorcodeptr = ERR18;
@@ -4272,19 +4452,19 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case '|':                 /* Reset capture count for each branch */
+        case CHAR_VERTICAL_LINE:  /* Reset capture count for each branch */
         reset_bracount = TRUE;
         /* Fall through */
 
         /* ------------------------------------------------------------ */
-        case ':':                 /* Non-capturing bracket */
+        case CHAR_COLON:          /* Non-capturing bracket */
         bravalue = OP_BRA;
         ptr++;
         break;
 
 
         /* ------------------------------------------------------------ */
-        case '(':
+        case CHAR_LEFT_PARENTHESIS:
         bravalue = OP_COND;       /* Conditional group */
 
         /* A condition can be an assertion, a number (referring to a numbered
@@ -4304,7 +4484,8 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         the switch. This will take control down to where bracketed groups,
         including assertions, are processed. */
 
-        if (ptr[1] == '?' && (ptr[2] == '=' || ptr[2] == '!' || ptr[2] == '<'))
+        if (ptr[1] == CHAR_QUESTION_MARK && (ptr[2] == CHAR_EQUALS_SIGN ||
+            ptr[2] == CHAR_EXCLAMATION_MARK || ptr[2] == CHAR_LESS_THAN_SIGN))
           break;
 
         /* Most other conditions use OP_CREF (a couple change to OP_RREF
@@ -4316,7 +4497,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
         /* Check for a test for recursion in a named group. */
 
-        if (ptr[1] == 'R' && ptr[2] == '&')
+        if (ptr[1] == CHAR_R && ptr[2] == CHAR_AMPERSAND)
           {
           terminator = -1;
           ptr += 2;
@@ -4326,20 +4507,20 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         /* Check for a test for a named group's having been set, using the Perl
         syntax (?(<name>) or (?('name') */
 
-        else if (ptr[1] == '<')
+        else if (ptr[1] == CHAR_LESS_THAN_SIGN)
           {
-          terminator = '>';
+          terminator = CHAR_GREATER_THAN_SIGN;
           ptr++;
           }
-        else if (ptr[1] == '\'')
+        else if (ptr[1] == CHAR_APOSTROPHE)
           {
-          terminator = '\'';
+          terminator = CHAR_APOSTROPHE;
           ptr++;
           }
         else
           {
           terminator = 0;
-          if (ptr[1] == '-' || ptr[1] == '+') refsign = *(++ptr);
+          if (ptr[1] == CHAR_MINUS || ptr[1] == CHAR_PLUS) refsign = *(++ptr);
           }
 
         /* We now expect to read a name; any thing else is an error */
@@ -4359,12 +4540,13 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
           {
           if (recno >= 0)
             recno = ((digitab[*ptr] & ctype_digit) != 0)?
-              recno * 10 + *ptr - '0' : -1;
+              recno * 10 + *ptr - CHAR_0 : -1;
           ptr++;
           }
         namelen = ptr - name;
 
-        if ((terminator > 0 && *ptr++ != terminator) || *ptr++ != ')')
+        if ((terminator > 0 && *ptr++ != terminator) ||
+            *ptr++ != CHAR_RIGHT_PARENTHESIS)
           {
           ptr--;      /* Error offset */
           *errorcodeptr = ERR26;
@@ -4386,7 +4568,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
             *errorcodeptr = ERR58;
             goto FAILED;
             }
-          recno = (refsign == '-')?
+          recno = (refsign == CHAR_MINUS)?
             cd->bracount - recno + 1 : recno +cd->bracount;
           if (recno <= 0 || recno > cd->final_bracount)
             {
@@ -4417,7 +4599,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
         /* Search the pattern for a forward reference */
 
-        else if ((i = find_parens(ptr, cd, name, namelen,
+        else if ((i = find_parens(cd, name, namelen,
                         (options & PCRE_EXTENDED) != 0)) > 0)
           {
           PUT2(code, 2+LINK_SIZE, i);
@@ -4438,7 +4620,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         /* Check for (?(R) for recursion. Allow digits after R to specify a
         specific group number. */
 
-        else if (*name == 'R')
+        else if (*name == CHAR_R)
           {
           recno = 0;
           for (i = 1; i < namelen; i++)
@@ -4448,7 +4630,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
               *errorcodeptr = ERR15;
               goto FAILED;
               }
-            recno = recno * 10 + name[i] - '0';
+            recno = recno * 10 + name[i] - CHAR_0;
             }
           if (recno == 0) recno = RREF_ANY;
           code[1+LINK_SIZE] = OP_RREF;      /* Change test type */
@@ -4458,7 +4640,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         /* Similarly, check for the (?(DEFINE) "condition", which is always
         false. */
 
-        else if (namelen == 6 && strncmp((char *)name, "DEFINE", 6) == 0)
+        else if (namelen == 6 && strncmp((char *)name, STRING_DEFINE, 6) == 0)
           {
           code[1+LINK_SIZE] = OP_DEF;
           skipbytes = 1;
@@ -4483,16 +4665,16 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case '=':                 /* Positive lookahead */
+        case CHAR_EQUALS_SIGN:                 /* Positive lookahead */
         bravalue = OP_ASSERT;
         ptr++;
         break;
 
 
         /* ------------------------------------------------------------ */
-        case '!':                 /* Negative lookahead */
+        case CHAR_EXCLAMATION_MARK:            /* Negative lookahead */
         ptr++;
-        if (*ptr == ')')          /* Optimize (?!) */
+        if (*ptr == CHAR_RIGHT_PARENTHESIS)    /* Optimize (?!) */
           {
           *code++ = OP_FAIL;
           previous = NULL;
@@ -4503,15 +4685,15 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case '<':                 /* Lookbehind or named define */
+        case CHAR_LESS_THAN_SIGN:              /* Lookbehind or named define */
         switch (ptr[1])
           {
-          case '=':               /* Positive lookbehind */
+          case CHAR_EQUALS_SIGN:               /* Positive lookbehind */
           bravalue = OP_ASSERTBACK;
           ptr += 2;
           break;
 
-          case '!':               /* Negative lookbehind */
+          case CHAR_EXCLAMATION_MARK:          /* Negative lookbehind */
           bravalue = OP_ASSERTBACK_NOT;
           ptr += 2;
           break;
@@ -4526,22 +4708,22 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case '>':                 /* One-time brackets */
+        case CHAR_GREATER_THAN_SIGN:           /* One-time brackets */
         bravalue = OP_ONCE;
         ptr++;
         break;
 
 
         /* ------------------------------------------------------------ */
-        case 'C':                 /* Callout - may be followed by digits; */
+        case CHAR_C:                 /* Callout - may be followed by digits; */
         previous_callout = code;  /* Save for later completion */
         after_manual_callout = 1; /* Skip one item before completing */
         *code++ = OP_CALLOUT;
           {
           int n = 0;
           while ((digitab[*(++ptr)] & ctype_digit) != 0)
-            n = n * 10 + *ptr - '0';
-          if (*ptr != ')')
+            n = n * 10 + *ptr - CHAR_0;
+          if (*ptr != CHAR_RIGHT_PARENTHESIS)
             {
             *errorcodeptr = ERR39;
             goto FAILED;
@@ -4561,14 +4743,15 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case 'P':                 /* Python-style named subpattern handling */
-        if (*(++ptr) == '=' || *ptr == '>')  /* Reference or recursion */
+        case CHAR_P:              /* Python-style named subpattern handling */
+        if (*(++ptr) == CHAR_EQUALS_SIGN ||
+            *ptr == CHAR_GREATER_THAN_SIGN)  /* Reference or recursion */
           {
-          is_recurse = *ptr == '>';
-          terminator = ')';
+          is_recurse = *ptr == CHAR_GREATER_THAN_SIGN;
+          terminator = CHAR_RIGHT_PARENTHESIS;
           goto NAMED_REF_OR_RECURSE;
           }
-        else if (*ptr != '<')    /* Test for Python-style definition */
+        else if (*ptr != CHAR_LESS_THAN_SIGN)  /* Test for Python-style defn */
           {
           *errorcodeptr = ERR41;
           goto FAILED;
@@ -4578,9 +4761,10 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
         /* ------------------------------------------------------------ */
         DEFINE_NAME:    /* Come here from (?< handling */
-        case '\'':
+        case CHAR_APOSTROPHE:
           {
-          terminator = (*ptr == '<')? '>' : '\'';
+          terminator = (*ptr == CHAR_LESS_THAN_SIGN)?
+            CHAR_GREATER_THAN_SIGN : CHAR_APOSTROPHE;
           name = ++ptr;
 
           while ((cd->ctypes[*ptr] & ctype_word) != 0) ptr++;
@@ -4654,8 +4838,8 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case '&':                 /* Perl recursion/subroutine syntax */
-        terminator = ')';
+        case CHAR_AMPERSAND:            /* Perl recursion/subroutine syntax */
+        terminator = CHAR_RIGHT_PARENTHESIS;
         is_recurse = TRUE;
         /* Fall through */
 
@@ -4714,7 +4898,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
             recno = GET2(slot, 0);
             }
           else if ((recno =                /* Forward back reference */
-                    find_parens(ptr, cd, name, namelen,
+                    find_parens(cd, name, namelen,
                       (options & PCRE_EXTENDED) != 0)) <= 0)
             {
             *errorcodeptr = ERR15;
@@ -4730,18 +4914,18 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
 
         /* ------------------------------------------------------------ */
-        case 'R':                 /* Recursion */
+        case CHAR_R:              /* Recursion */
         ptr++;                    /* Same as (?0)      */
         /* Fall through */
 
 
         /* ------------------------------------------------------------ */
-        case '-': case '+':
-        case '0': case '1': case '2': case '3': case '4':   /* Recursion or */
-        case '5': case '6': case '7': case '8': case '9':   /* subroutine */
+        case CHAR_MINUS: case CHAR_PLUS:  /* Recursion or subroutine */
+        case CHAR_0: case CHAR_1: case CHAR_2: case CHAR_3: case CHAR_4:
+        case CHAR_5: case CHAR_6: case CHAR_7: case CHAR_8: case CHAR_9:
           {
           const uschar *called;
-          terminator = ')';
+          terminator = CHAR_RIGHT_PARENTHESIS;
 
           /* Come here from the \g<...> and \g'...' code (Oniguruma
           compatibility). However, the syntax has been checked to ensure that
@@ -4751,7 +4935,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
           HANDLE_NUMERICAL_RECURSION:
 
-          if ((refsign = *ptr) == '+')
+          if ((refsign = *ptr) == CHAR_PLUS)
             {
             ptr++;
             if ((digitab[*ptr] & ctype_digit) == 0)
@@ -4760,7 +4944,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
               goto FAILED;
               }
             }
-          else if (refsign == '-')
+          else if (refsign == CHAR_MINUS)
             {
             if ((digitab[ptr[1]] & ctype_digit) == 0)
               goto OTHER_CHAR_AFTER_QUERY;
@@ -4769,7 +4953,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
           recno = 0;
           while((digitab[*ptr] & ctype_digit) != 0)
-            recno = recno * 10 + *ptr++ - '0';
+            recno = recno * 10 + *ptr++ - CHAR_0;
 
           if (*ptr != terminator)
             {
@@ -4777,7 +4961,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
             goto FAILED;
             }
 
-          if (refsign == '-')
+          if (refsign == CHAR_MINUS)
             {
             if (recno == 0)
               {
@@ -4791,7 +4975,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
               goto FAILED;
               }
             }
-          else if (refsign == '+')
+          else if (refsign == CHAR_PLUS)
             {
             if (recno == 0)
               {
@@ -4824,7 +5008,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
             if (called == NULL)
               {
-              if (find_parens(ptr, cd, NULL, recno,
+              if (find_parens(cd, NULL, recno,
                     (options & PCRE_EXTENDED) != 0) < 0)
                 {
                 *errorcodeptr = ERR15;
@@ -4877,23 +5061,23 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         set = unset = 0;
         optset = &set;
 
-        while (*ptr != ')' && *ptr != ':')
+        while (*ptr != CHAR_RIGHT_PARENTHESIS && *ptr != CHAR_COLON)
           {
           switch (*ptr++)
             {
-            case '-': optset = &unset; break;
+            case CHAR_MINUS: optset = &unset; break;
 
-            case 'J':    /* Record that it changed in the external options */
+            case CHAR_J:    /* Record that it changed in the external options */
             *optset |= PCRE_DUPNAMES;
             cd->external_flags |= PCRE_JCHANGED;
             break;
 
-            case 'i': *optset |= PCRE_CASELESS; break;
-            case 'm': *optset |= PCRE_MULTILINE; break;
-            case 's': *optset |= PCRE_DOTALL; break;
-            case 'x': *optset |= PCRE_EXTENDED; break;
-            case 'U': *optset |= PCRE_UNGREEDY; break;
-            case 'X': *optset |= PCRE_EXTRA; break;
+            case CHAR_i: *optset |= PCRE_CASELESS; break;
+            case CHAR_m: *optset |= PCRE_MULTILINE; break;
+            case CHAR_s: *optset |= PCRE_DOTALL; break;
+            case CHAR_x: *optset |= PCRE_EXTENDED; break;
+            case CHAR_U: *optset |= PCRE_UNGREEDY; break;
+            case CHAR_X: *optset |= PCRE_EXTRA; break;
 
             default:  *errorcodeptr = ERR12;
                       ptr--;    /* Correct the offset */
@@ -4927,7 +5111,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         options if this setting actually changes any of them, and reset the
         greedy defaults and the case value for firstbyte and reqbyte. */
 
-        if (*ptr == ')')
+        if (*ptr == CHAR_RIGHT_PARENTHESIS)
           {
           if (code == cd->start_code + 1 + LINK_SIZE &&
                (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))
@@ -5067,7 +5251,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
     /* Error if hit end of pattern */
 
-    if (*ptr != ')')
+    if (*ptr != CHAR_RIGHT_PARENTHESIS)
       {
       *errorcodeptr = ERR14;
       goto FAILED;
@@ -5165,7 +5349,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
     We can test for values between ESC_b and ESC_Z for the latter; this may
     have to change if any new ones are ever created. */
 
-    case '\\':
+    case CHAR_BACKSLASH:
     tempptr = ptr;
     c = check_escape(&ptr, errorcodeptr, cd->bracount, options, FALSE);
     if (*errorcodeptr != 0) goto FAILED;
@@ -5174,8 +5358,9 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
       {
       if (-c == ESC_Q)            /* Handle start of quoted string */
         {
-        if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */
-          else inescq = TRUE;
+        if (ptr[1] == CHAR_BACKSLASH && ptr[2] == CHAR_E)
+          ptr += 2;               /* avoid empty string */
+            else inescq = TRUE;
         continue;
         }
 
@@ -5203,7 +5388,8 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
         {
         const uschar *p;
         save_hwm = cd->hwm;   /* Normally this is set when '(' is read */
-        terminator = (*(++ptr) == '<')? '>' : '\'';
+        terminator = (*(++ptr) == CHAR_LESS_THAN_SIGN)?
+          CHAR_GREATER_THAN_SIGN : CHAR_APOSTROPHE;
 
         /* These two statements stop the compiler for warning about possibly
         unset variables caused by the jump to HANDLE_NUMERICAL_RECURSION. In
@@ -5215,7 +5401,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
         /* Test for a name */
 
-        if (ptr[1] != '+' && ptr[1] != '-')
+        if (ptr[1] != CHAR_PLUS && ptr[1] != CHAR_MINUS)
           {
           BOOL isnumber = TRUE;
           for (p = ptr + 1; *p != 0 && *p != terminator; p++)
@@ -5253,10 +5439,13 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
       /* \k<name> or \k'name' is a back reference by name (Perl syntax).
       We also support \k{name} (.NET syntax) */
 
-      if (-c == ESC_k && (ptr[1] == '<' || ptr[1] == '\'' || ptr[1] == '{'))
+      if (-c == ESC_k && (ptr[1] == CHAR_LESS_THAN_SIGN ||
+          ptr[1] == CHAR_APOSTROPHE || ptr[1] == CHAR_LEFT_CURLY_BRACKET))
         {
         is_recurse = FALSE;
-        terminator = (*(++ptr) == '<')? '>' : (*ptr == '\'')? '\'' : '}';
+        terminator = (*(++ptr) == CHAR_LESS_THAN_SIGN)?
+          CHAR_GREATER_THAN_SIGN : (*ptr == CHAR_APOSTROPHE)?
+          CHAR_APOSTROPHE : CHAR_RIGHT_CURLY_BRACKET;
         goto NAMED_REF_OR_RECURSE;
         }
 
@@ -5359,7 +5548,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
 
     /* Remember if \r or \n were seen */
 
-    if (mcbuffer[0] == '\r' || mcbuffer[0] == '\n')
+    if (mcbuffer[0] == CHAR_CR || mcbuffer[0] == CHAR_NL)
       cd->external_flags |= PCRE_HASCRORLF;
 
     /* Set the first and required bytes appropriately. If no previous first
@@ -5604,7 +5793,7 @@ for (;;)
   compile a resetting op-code following, except at the very end of the pattern.
   Return leaving the pointer at the terminating char. */
 
-  if (*ptr != '|')
+  if (*ptr != CHAR_VERTICAL_LINE)
     {
     if (lengthptr == NULL)
       {
@@ -5627,7 +5816,7 @@ for (;;)
 
     /* Resetting option if needed */
 
-    if ((options & PCRE_IMS) != oldims && *ptr == ')')
+    if ((options & PCRE_IMS) != oldims && *ptr == CHAR_RIGHT_PARENTHESIS)
       {
       *code++ = OP_OPT;
       *code++ = oldims;
@@ -5809,6 +5998,32 @@ do {
      NULL, 0, FALSE);
    register int op = *scode;
 
+   /* If we are at the start of a conditional assertion group, *both* the
+   conditional assertion *and* what follows the condition must satisfy the test
+   for start of line. Other kinds of condition fail. Note that there may be an
+   auto-callout at the start of a condition. */
+
+   if (op == OP_COND)
+     {
+     scode += 1 + LINK_SIZE;
+     if (*scode == OP_CALLOUT) scode += _pcre_OP_lengths[OP_CALLOUT];
+     switch (*scode)
+       {
+       case OP_CREF:
+       case OP_RREF:
+       case OP_DEF:
+       return FALSE;
+
+       default:     /* Assertion */
+       if (!is_startline(scode, bracket_map, backref_map)) return FALSE;
+       do scode += GET(scode, 1); while (*scode == OP_ALT);
+       scode += 1 + LINK_SIZE;
+       break;
+       }
+     scode = first_significant_code(scode, NULL, 0, FALSE);
+     op = *scode;
+     }
+
    /* Non-capturing brackets */
 
    if (op == OP_BRA)
@@ -5827,8 +6042,10 @@ do {
 
    /* Other brackets */
 
-   else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
-     { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
+   else if (op == OP_ASSERT || op == OP_ONCE)
+     {
+     if (!is_startline(scode, bracket_map, backref_map)) return FALSE;
+     }
 
    /* .* means "start at start or after \n" if it isn't in brackets that
    may be referenced. */
@@ -6007,30 +6224,6 @@ if (erroroffset == NULL)
 
 *erroroffset = 0;
 
-/* Can't support UTF8 unless PCRE has been compiled to include the code. */
-
-#ifdef SUPPORT_UTF8
-utf8 = (options & PCRE_UTF8) != 0;
-if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
-     (*erroroffset = _pcre_valid_utf8((uschar *)pattern, -1)) >= 0)
-  {
-  errorcode = ERR44;
-  goto PCRE_EARLY_ERROR_RETURN2;
-  }
-#else
-if ((options & PCRE_UTF8) != 0)
-  {
-  errorcode = ERR32;
-  goto PCRE_EARLY_ERROR_RETURN;
-  }
-#endif
-
-if ((options & ~PUBLIC_OPTIONS) != 0)
-  {
-  errorcode = ERR17;
-  goto PCRE_EARLY_ERROR_RETURN;
-  }
-
 /* Set up pointers to the individual character tables */
 
 if (tables == NULL) tables = _pcre_default_tables;
@@ -6039,28 +6232,40 @@ cd->fcc = tables + fcc_offset;
 cd->cbits = tables + cbits_offset;
 cd->ctypes = tables + ctypes_offset;
 
+/* Check that all undefined public option bits are zero */
+
+if ((options & ~PUBLIC_COMPILE_OPTIONS) != 0)
+  {
+  errorcode = ERR17;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+
 /* Check for global one-time settings at the start of the pattern, and remember
 the offset for later. */
 
-while (ptr[skipatstart] == '(' && ptr[skipatstart+1] == '*')
+while (ptr[skipatstart] == CHAR_LEFT_PARENTHESIS &&
+       ptr[skipatstart+1] == CHAR_ASTERISK)
   {
   int newnl = 0;
   int newbsr = 0;
 
-  if (strncmp((char *)(ptr+skipatstart+2), "CR)", 3) == 0)
+  if (strncmp((char *)(ptr+skipatstart+2), STRING_UTF8_RIGHTPAR, 5) == 0)
+    { skipatstart += 7; options |= PCRE_UTF8; continue; }
+
+  if (strncmp((char *)(ptr+skipatstart+2), STRING_CR_RIGHTPAR, 3) == 0)
     { skipatstart += 5; newnl = PCRE_NEWLINE_CR; }
-  else if (strncmp((char *)(ptr+skipatstart+2), "LF)", 3)  == 0)
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_LF_RIGHTPAR, 3)  == 0)
     { skipatstart += 5; newnl = PCRE_NEWLINE_LF; }
-  else if (strncmp((char *)(ptr+skipatstart+2), "CRLF)", 5)  == 0)
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_CRLF_RIGHTPAR, 5)  == 0)
     { skipatstart += 7; newnl = PCRE_NEWLINE_CR + PCRE_NEWLINE_LF; }
-  else if (strncmp((char *)(ptr+skipatstart+2), "ANY)", 4) == 0)
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_ANY_RIGHTPAR, 4) == 0)
     { skipatstart += 6; newnl = PCRE_NEWLINE_ANY; }
-  else if (strncmp((char *)(ptr+skipatstart+2), "ANYCRLF)", 8)  == 0)
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_ANYCRLF_RIGHTPAR, 8) == 0)
     { skipatstart += 10; newnl = PCRE_NEWLINE_ANYCRLF; }
 
-  else if (strncmp((char *)(ptr+skipatstart+2), "BSR_ANYCRLF)", 12) == 0)
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_BSR_ANYCRLF_RIGHTPAR, 12) == 0)
     { skipatstart += 14; newbsr = PCRE_BSR_ANYCRLF; }
-  else if (strncmp((char *)(ptr+skipatstart+2), "BSR_UNICODE)", 12) == 0)
+  else if (strncmp((char *)(ptr+skipatstart+2), STRING_BSR_UNICODE_RIGHTPAR, 12) == 0)
     { skipatstart += 14; newbsr = PCRE_BSR_UNICODE; }
 
   if (newnl != 0)
@@ -6070,6 +6275,24 @@ while (ptr[skipatstart] == '(' && ptr[skipatstart+1] == '*')
   else break;
   }
 
+/* Can't support UTF8 unless PCRE has been compiled to include the code. */
+
+#ifdef SUPPORT_UTF8
+utf8 = (options & PCRE_UTF8) != 0;
+if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
+     (*erroroffset = _pcre_valid_utf8((uschar *)pattern, -1)) >= 0)
+  {
+  errorcode = ERR44;
+  goto PCRE_EARLY_ERROR_RETURN2;
+  }
+#else
+if ((options & PCRE_UTF8) != 0)
+  {
+  errorcode = ERR32;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+#endif
+
 /* Check validity of \R options. */
 
 switch (options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE))
@@ -6088,10 +6311,10 @@ current code allows for fixed one- or two-byte sequences, plus "any" and
 switch (options & PCRE_NEWLINE_BITS)
   {
   case 0: newline = NEWLINE; break;   /* Build-time default */
-  case PCRE_NEWLINE_CR: newline = '\r'; break;
-  case PCRE_NEWLINE_LF: newline = '\n'; break;
+  case PCRE_NEWLINE_CR: newline = CHAR_CR; break;
+  case PCRE_NEWLINE_LF: newline = CHAR_NL; break;
   case PCRE_NEWLINE_CR+
-       PCRE_NEWLINE_LF: newline = ('\r' << 8) | '\n'; break;
+       PCRE_NEWLINE_LF: newline = (CHAR_CR << 8) | CHAR_NL; break;
   case PCRE_NEWLINE_ANY: newline = -1; break;
   case PCRE_NEWLINE_ANYCRLF: newline = -2; break;
   default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN;
diff --git a/ext/pcre/pcrelib/pcre_config.c b/ext/pcre/pcrelib/pcre_config.c
index 5796f75..3e74215 100644
--- a/ext/pcre/pcrelib/pcre_config.c
+++ b/ext/pcre/pcrelib/pcre_config.c
@@ -102,11 +102,11 @@ switch (what)
   break;
 
   case PCRE_CONFIG_MATCH_LIMIT:
-  *((unsigned int *)where) = MATCH_LIMIT;
+  *((unsigned long int *)where) = MATCH_LIMIT;
   break;
 
   case PCRE_CONFIG_MATCH_LIMIT_RECURSION:
-  *((unsigned int *)where) = MATCH_LIMIT_RECURSION;
+  *((unsigned long int *)where) = MATCH_LIMIT_RECURSION;
   break;
 
   case PCRE_CONFIG_STACKRECURSE:
diff --git a/ext/pcre/pcrelib/pcre_exec.c b/ext/pcre/pcrelib/pcre_exec.c
index 91b5047..073cf24 100644
--- a/ext/pcre/pcrelib/pcre_exec.c
+++ b/ext/pcre/pcrelib/pcre_exec.c
@@ -320,9 +320,9 @@ typedef struct heapframe {
 
   /* Function arguments that may change */
 
-  const uschar *Xeptr;
+  USPTR Xeptr;
   const uschar *Xecode;
-  const uschar *Xmstart;
+  USPTR Xmstart;
   int Xoffset_top;
   long int Xims;
   eptrblock *Xeptrb;
@@ -331,13 +331,15 @@ typedef struct heapframe {
 
   /* Function local variables */
 
-  const uschar *Xcallpat;
-  const uschar *Xcharptr;
-  const uschar *Xdata;
-  const uschar *Xnext;
-  const uschar *Xpp;
-  const uschar *Xprev;
-  const uschar *Xsaved_eptr;
+  USPTR Xcallpat;
+#ifdef SUPPORT_UTF8
+  USPTR Xcharptr;
+#endif
+  USPTR Xdata;
+  USPTR Xnext;
+  USPTR Xpp;
+  USPTR Xprev;
+  USPTR Xsaved_eptr;
 
   recursion_info Xnew_recursive;
 
@@ -358,6 +360,7 @@ typedef struct heapframe {
   uschar Xocchars[8];
 #endif
 
+  int Xcodelink;
   int Xctype;
   unsigned int Xfc;
   int Xfi;
@@ -423,7 +426,7 @@ Returns:       MATCH_MATCH if matched            )  these values are >= 0
 */
 
 static int
-match(REGISTER USPTR eptr, REGISTER const uschar *ecode, const uschar *mstart,
+match(REGISTER USPTR eptr, REGISTER const uschar *ecode, USPTR mstart,
   int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
   int flags, unsigned int rdepth)
 {
@@ -437,6 +440,7 @@ register unsigned int c;   /* Character values not kept over RMATCH() calls */
 register BOOL utf8;        /* Local copy of UTF-8 flag for speed */
 
 BOOL minimize, possessive; /* Quantifier options */
+int condcode;
 
 /* When recursion is not being used, all "local" variables that have to be
 preserved over calls to RMATCH() are part of a "frame" which is obtained from
@@ -479,6 +483,7 @@ HEAP_RECURSE:
 #define charptr            frame->Xcharptr
 #endif
 #define callpat            frame->Xcallpat
+#define codelink           frame->Xcodelink
 #define data               frame->Xdata
 #define next               frame->Xnext
 #define pp                 frame->Xpp
@@ -559,6 +564,7 @@ int oclength;
 uschar occhars[8];
 #endif
 
+int codelink;
 int ctype;
 int length;
 int max;
@@ -785,7 +791,39 @@ for (;;)
 
     case OP_COND:
     case OP_SCOND:
-    if (ecode[LINK_SIZE+1] == OP_RREF)         /* Recursion test */
+    codelink= GET(ecode, 1);
+
+    /* Because of the way auto-callout works during compile, a callout item is
+    inserted between OP_COND and an assertion condition. */
+
+    if (ecode[LINK_SIZE+1] == OP_CALLOUT)
+      {
+      if (pcre_callout != NULL)
+        {
+        pcre_callout_block cb;
+        cb.version          = 1;   /* Version 1 of the callout block */
+        cb.callout_number   = ecode[LINK_SIZE+2];
+        cb.offset_vector    = md->offset_vector;
+        cb.subject          = (PCRE_SPTR)md->start_subject;
+        cb.subject_length   = md->end_subject - md->start_subject;
+        cb.start_match      = mstart - md->start_subject;
+        cb.current_position = eptr - md->start_subject;
+        cb.pattern_position = GET(ecode, LINK_SIZE + 3);
+        cb.next_item_length = GET(ecode, 3 + 2*LINK_SIZE);
+        cb.capture_top      = offset_top/2;
+        cb.capture_last     = md->capture_last;
+        cb.callout_data     = md->callout_data;
+        if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH);
+        if (rrc < 0) RRETURN(rrc);
+        }
+      ecode += _pcre_OP_lengths[OP_CALLOUT];
+      }
+
+    condcode = ecode[LINK_SIZE+1];
+
+    /* Now see what the actual condition is */
+
+    if (condcode == OP_RREF)         /* Recursion test */
       {
       offset = GET2(ecode, LINK_SIZE + 2);     /* Recursion group number*/
       condition = md->recursive != NULL &&
@@ -793,14 +831,14 @@ for (;;)
       ecode += condition? 3 : GET(ecode, 1);
       }
 
-    else if (ecode[LINK_SIZE+1] == OP_CREF)    /* Group used test */
+    else if (condcode == OP_CREF)    /* Group used test */
       {
       offset = GET2(ecode, LINK_SIZE+2) << 1;  /* Doubled ref number */
       condition = offset < offset_top && md->offset_vector[offset] >= 0;
       ecode += condition? 3 : GET(ecode, 1);
       }
 
-    else if (ecode[LINK_SIZE+1] == OP_DEF)     /* DEFINE - always false */
+    else if (condcode == OP_DEF)     /* DEFINE - always false */
       {
       condition = FALSE;
       ecode += GET(ecode, 1);
@@ -827,7 +865,7 @@ for (;;)
       else
         {
         condition = FALSE;
-        ecode += GET(ecode, 1);
+        ecode += codelink;
         }
       }
 
@@ -850,7 +888,7 @@ for (;;)
         goto TAIL_RECURSE;
         }
       }
-    else                         /* Condition false & no 2nd alternative */
+    else                         /* Condition false & no alternative */
       {
       ecode += 1 + LINK_SIZE;
       }
@@ -1073,6 +1111,8 @@ for (;;)
         else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN)
           {
           DPRINTF(("Recursion gave error %d\n", rrc));
+          if (new_recursive.offset_save != stacksave)
+            (pcre_free)(new_recursive.offset_save);
           RRETURN(rrc);
           }
 
@@ -1419,7 +1459,7 @@ for (;;)
         {
         if (eptr == md->start_subject) prev_is_word = FALSE; else
           {
-          const uschar *lastptr = eptr - 1;
+          USPTR lastptr = eptr - 1;
           while((*lastptr & 0xc0) == 0x80) lastptr--;
           GETCHAR(c, lastptr);
           prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
@@ -1677,7 +1717,7 @@ for (;;)
     if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
     GETCHARINCTEST(c, eptr);
       {
-      const ucd_record * prop = GET_UCD(c);
+      const ucd_record *prop = GET_UCD(c);
 
       switch(ecode[1])
         {
@@ -2045,7 +2085,8 @@ for (;;)
 
 
     /* Match an extended character class. This opcode is encountered only
-    in UTF-8 mode, because that's the only time it is compiled. */
+    when UTF-8 mode mode is supported. Nevertheless, we may not be in UTF-8
+    mode, because Unicode properties are supported in non-UTF-8 mode. */
 
 #ifdef SUPPORT_UTF8
     case OP_XCLASS:
@@ -2087,7 +2128,7 @@ for (;;)
       for (i = 1; i <= min; i++)
         {
         if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-        GETCHARINC(c, eptr);
+        GETCHARINCTEST(c, eptr);
         if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH);
         }
 
@@ -2106,7 +2147,7 @@ for (;;)
           RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM20);
           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
           if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          GETCHARINC(c, eptr);
+          GETCHARINCTEST(c, eptr);
           if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH);
           }
         /* Control never gets here */
@@ -2121,7 +2162,7 @@ for (;;)
           {
           int len = 1;
           if (eptr >= md->end_subject) break;
-          GETCHARLEN(c, eptr, len);
+          GETCHARLENTEST(c, eptr, len);
           if (!_pcre_xclass(c, data)) break;
           eptr += len;
           }
@@ -4531,10 +4572,10 @@ switch ((((options & PCRE_NEWLINE_BITS) == 0)? re->options :
         (pcre_uint32)options) & PCRE_NEWLINE_BITS)
   {
   case 0: newline = NEWLINE; break;   /* Compile-time default */
-  case PCRE_NEWLINE_CR: newline = '\r'; break;
-  case PCRE_NEWLINE_LF: newline = '\n'; break;
+  case PCRE_NEWLINE_CR: newline = CHAR_CR; break;
+  case PCRE_NEWLINE_LF: newline = CHAR_NL; break;
   case PCRE_NEWLINE_CR+
-       PCRE_NEWLINE_LF: newline = ('\r' << 8) | '\n'; break;
+       PCRE_NEWLINE_LF: newline = (CHAR_CR << 8) | CHAR_NL; break;
   case PCRE_NEWLINE_ANY: newline = -1; break;
   case PCRE_NEWLINE_ANYCRLF: newline = -2; break;
   default: return PCRE_ERROR_BADNEWLINE;
@@ -4576,11 +4617,11 @@ back the character offset. */
 #ifdef SUPPORT_UTF8
 if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
   {
-  if (_pcre_valid_utf8((uschar *)subject, length) >= 0)
+  if (_pcre_valid_utf8((USPTR)subject, length) >= 0)
     return PCRE_ERROR_BADUTF8;
   if (start_offset > 0 && start_offset < length)
     {
-    int tb = ((uschar *)subject)[start_offset];
+    int tb = ((USPTR)subject)[start_offset];
     if (tb > 127)
       {
       tb &= 0xc0;
@@ -4686,11 +4727,11 @@ for(;;)
     while (iptr < iend) *iptr++ = -1;
     }
 
-  /* Advance to a unique first char if possible. If firstline is TRUE, the
-  start of the match is constrained to the first line of a multiline string.
-  That is, the match must be before or at the first newline. Implement this by
-  temporarily adjusting end_subject so that we stop scanning at a newline. If
-  the match fails at the newline, later code breaks this loop. */
+  /* If firstline is TRUE, the start of the match is constrained to the first
+  line of a multiline string. That is, the match must be before or at the first
+  newline. Implement this by temporarily adjusting end_subject so that we stop
+  scanning at a newline. If the match fails at the newline, later code breaks
+  this loop. */
 
   if (firstline)
     {
@@ -4710,62 +4751,70 @@ for(;;)
     end_subject = t;
     }
 
-  /* Now advance to a unique first byte if there is one. */
+  /* There are some optimizations that avoid running the match if a known
+  starting point is not found, or if a known later character is not present.
+  However, there is an option that disables these, for testing and for ensuring
+  that all callouts do actually occur. */
 
-  if (first_byte >= 0)
+  if ((options & PCRE_NO_START_OPTIMIZE) == 0)
     {
-    if (first_byte_caseless)
-      while (start_match < end_subject && md->lcc[*start_match] != first_byte)
-        start_match++;
-    else
-      while (start_match < end_subject && *start_match != first_byte)
-        start_match++;
-    }
+    /* Advance to a unique first byte if there is one. */
 
-  /* Or to just after a linebreak for a multiline match */
+    if (first_byte >= 0)
+      {
+      if (first_byte_caseless)
+        while (start_match < end_subject && md->lcc[*start_match] != first_byte)
+          start_match++;
+      else
+        while (start_match < end_subject && *start_match != first_byte)
+          start_match++;
+      }
 
-  else if (startline)
-    {
-    if (start_match > md->start_subject + start_offset)
+    /* Or to just after a linebreak for a multiline match */
+
+    else if (startline)
       {
-#ifdef SUPPORT_UTF8
-      if (utf8)
+      if (start_match > md->start_subject + start_offset)
         {
-        while (start_match < end_subject && !WAS_NEWLINE(start_match))
+#ifdef SUPPORT_UTF8
+        if (utf8)
           {
-          start_match++;
-          while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
+          while (start_match < end_subject && !WAS_NEWLINE(start_match))
+            {
             start_match++;
+            while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
+              start_match++;
+            }
           }
-        }
-      else
+        else
 #endif
-      while (start_match < end_subject && !WAS_NEWLINE(start_match))
-        start_match++;
-
-      /* If we have just passed a CR and the newline option is ANY or ANYCRLF,
-      and we are now at a LF, advance the match position by one more character.
-      */
-
-      if (start_match[-1] == '\r' &&
-           (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) &&
-           start_match < end_subject &&
-           *start_match == '\n')
-        start_match++;
+        while (start_match < end_subject && !WAS_NEWLINE(start_match))
+          start_match++;
+
+        /* If we have just passed a CR and the newline option is ANY or ANYCRLF,
+        and we are now at a LF, advance the match position by one more character.
+        */
+
+        if (start_match[-1] == CHAR_CR &&
+             (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) &&
+             start_match < end_subject &&
+             *start_match == CHAR_NL)
+          start_match++;
+        }
       }
-    }
 
-  /* Or to a non-unique first byte after study */
+    /* Or to a non-unique first byte after study */
 
-  else if (start_bits != NULL)
-    {
-    while (start_match < end_subject)
+    else if (start_bits != NULL)
       {
-      register unsigned int c = *start_match;
-      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++;
-        else break;
+      while (start_match < end_subject)
+        {
+        register unsigned int c = *start_match;
+        if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++;
+          else break;
+        }
       }
-    }
+    }   /* Starting optimizations */
 
   /* Restore fudged end_subject */
 
@@ -4777,23 +4826,25 @@ for(;;)
   printf("\n");
 #endif
 
-  /* If req_byte is set, we know that that character must appear in the subject
-  for the match to succeed. If the first character is set, req_byte must be
-  later in the subject; otherwise the test starts at the match point. This
-  optimization can save a huge amount of backtracking in patterns with nested
-  unlimited repeats that aren't going to match. Writing separate code for
-  cased/caseless versions makes it go faster, as does using an autoincrement
-  and backing off on a match.
-
-  HOWEVER: when the subject string is very, very long, searching to its end can
-  take a long time, and give bad performance on quite ordinary patterns. This
-  showed up when somebody was matching something like /^\d+C/ on a 32-megabyte
-  string... so we don't do this when the string is sufficiently long.
-
-  ALSO: this processing is disabled when partial matching is requested.
-  */
-
-  if (req_byte >= 0 &&
+  /* If req_byte is set, we know that that character must appear in the
+  subject for the match to succeed. If the first character is set, req_byte
+  must be later in the subject; otherwise the test starts at the match point.
+  This optimization can save a huge amount of backtracking in patterns with
+  nested unlimited repeats that aren't going to match. Writing separate code
+  for cased/caseless versions makes it go faster, as does using an
+  autoincrement and backing off on a match.
+
+  HOWEVER: when the subject string is very, very long, searching to its end
+  can take a long time, and give bad performance on quite ordinary patterns.
+  This showed up when somebody was matching something like /^\d+C/ on a
+  32-megabyte string... so we don't do this when the string is sufficiently
+  long.
+
+  ALSO: this processing is disabled when partial matching is requested, or if
+  disabling is explicitly requested. */
+
+  if ((options & PCRE_NO_START_OPTIMIZE) == 0 &&
+      req_byte >= 0 &&
       end_subject - start_match < REQ_BYTE_MAX &&
       !md->partial)
     {
@@ -4901,9 +4952,9 @@ for(;;)
   not contain any explicit matches for \r or \n, and the newline option is CRLF
   or ANY or ANYCRLF, advance the match position by one more character. */
 
-  if (start_match[-1] == '\r' &&
+  if (start_match[-1] == CHAR_CR &&
       start_match < end_subject &&
-      *start_match == '\n' &&
+      *start_match == CHAR_NL &&
       (re->flags & PCRE_HASCRORLF) == 0 &&
         (md->nltype == NLTYPE_ANY ||
          md->nltype == NLTYPE_ANYCRLF ||
diff --git a/ext/pcre/pcrelib/pcre_fullinfo.c b/ext/pcre/pcrelib/pcre_fullinfo.c
index 4012b7a..44fa91b 100644
--- a/ext/pcre/pcrelib/pcre_fullinfo.c
+++ b/ext/pcre/pcrelib/pcre_fullinfo.c
@@ -87,7 +87,7 @@ if (re->magic_number != MAGIC_NUMBER)
 switch (what)
   {
   case PCRE_INFO_OPTIONS:
-  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
+  *((unsigned long int *)where) = re->options & PUBLIC_COMPILE_OPTIONS;
   break;
 
   case PCRE_INFO_SIZE:
diff --git a/ext/pcre/pcrelib/pcre_get.c b/ext/pcre/pcrelib/pcre_get.c
index 65a81c9..92b3808 100644
--- a/ext/pcre/pcrelib/pcre_get.c
+++ b/ext/pcre/pcrelib/pcre_get.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_globals.c b/ext/pcre/pcrelib/pcre_globals.c
index f684edb..aa3ef90 100644
--- a/ext/pcre/pcrelib/pcre_globals.c
+++ b/ext/pcre/pcrelib/pcre_globals.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_info.c b/ext/pcre/pcrelib/pcre_info.c
index 0e0a02f..e6d435b 100644
--- a/ext/pcre/pcrelib/pcre_info.c
+++ b/ext/pcre/pcrelib/pcre_info.c
@@ -81,7 +81,7 @@ if (re->magic_number != MAGIC_NUMBER)
   re = _pcre_try_flipped(re, &internal_re, NULL, NULL);
   if (re == NULL) return PCRE_ERROR_BADMAGIC;
   }
-if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
+if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_COMPILE_OPTIONS);
 if (first_byte != NULL)
   *first_byte = ((re->flags & PCRE_FIRSTSET) != 0)? re->first_byte :
      ((re->flags & PCRE_STARTLINE) != 0)? -1 : -2;
diff --git a/ext/pcre/pcrelib/pcre_internal.h b/ext/pcre/pcrelib/pcre_internal.h
index c652ed9..e168f39 100644
--- a/ext/pcre/pcrelib/pcre_internal.h
+++ b/ext/pcre/pcrelib/pcre_internal.h
@@ -51,6 +51,20 @@ functions whose names all begin with "_pcre_". */
 #define DEBUG
 #endif
 
+/* We do not support both EBCDIC and UTF-8 at the same time. The "configure"
+script prevents both being selected, but not everybody uses "configure". */
+
+#if defined EBCDIC && defined SUPPORT_UTF8
+#error The use of both EBCDIC and SUPPORT_UTF8 is not supported.
+#endif
+
+/* If SUPPORT_UCP is defined, SUPPORT_UTF8 must also be defined. The
+"configure" script ensures this, but not everybody uses "configure". */
+
+#if defined SUPPORT_UCP && !defined SUPPORT_UTF8
+#define SUPPORT_UTF8 1
+#endif
+
 /* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
 inline, and there are *still* stupid compilers about that don't like indented
 pre-processor statements, or at least there were when I first wrote this. After
@@ -478,6 +492,26 @@ if there are extra bytes. This is called when we know we are in UTF-8 mode. */
     len += gcaa; \
     }
 
+/* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the
+pointer, incrementing length if there are extra bytes. This is called when we
+know we are in UTF-8 mode. */
+
+#define GETCHARLENTEST(c, eptr, len) \
+  c = *eptr; \
+  if (utf8 && c >= 0xc0) \
+    { \
+    int gcii; \
+    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
+    int gcss = 6*gcaa; \
+    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
+    for (gcii = 1; gcii <= gcaa; gcii++) \
+      { \
+      gcss -= 6; \
+      c |= (eptr[gcii] & 0x3f) << gcss; \
+      } \
+    len += gcaa; \
+    }
+
 /* If the pointer is not at the start of a character, move it back until
 it is. This is called only in UTF-8 mode - we don't put a test within the macro
 because almost all calls are already within a block of UTF-8 only code. */
@@ -520,7 +554,7 @@ time, run time, or study time, respectively. */
 #define PCRE_NEWLINE_BITS (PCRE_NEWLINE_CR|PCRE_NEWLINE_LF|PCRE_NEWLINE_ANY| \
                            PCRE_NEWLINE_ANYCRLF)
 
-#define PUBLIC_OPTIONS \
+#define PUBLIC_COMPILE_OPTIONS \
   (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
    PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
    PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \
@@ -529,12 +563,13 @@ time, run time, or study time, respectively. */
 
 #define PUBLIC_EXEC_OPTIONS \
   (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
-   PCRE_PARTIAL|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)
+   PCRE_PARTIAL|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \
+   PCRE_NO_START_OPTIMIZE)
 
 #define PUBLIC_DFA_EXEC_OPTIONS \
   (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
    PCRE_PARTIAL|PCRE_DFA_SHORTEST|PCRE_DFA_RESTART|PCRE_NEWLINE_BITS| \
-   PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)
+   PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE|PCRE_NO_START_OPTIMIZE)
 
 #define PUBLIC_STUDY_OPTIONS 0   /* None defined */
 
@@ -560,38 +595,571 @@ variable-length repeat, or a anything other than literal characters. */
 #define REQ_VARY     0x0200    /* reqbyte followed non-literal item */
 
 /* Miscellaneous definitions. The #ifndef is to pacify compiler warnings in
-environments where these macros are defined elsewhere. */
+environments where these macros are defined elsewhere. Unfortunately, there
+is no way to do the same for the typedef. */
 
-#ifndef FALSE
 typedef int BOOL;
 
+#ifndef FALSE
 #define FALSE   0
 #define TRUE    1
 #endif
 
+/* If PCRE is to support UTF-8 on EBCDIC platforms, we cannot use normal
+character constants like '*' because the compiler would emit their EBCDIC code,
+which is different from their ASCII/UTF-8 code. Instead we define macros for
+the characters so that they always use the ASCII/UTF-8 code when UTF-8 support
+is enabled. When UTF-8 support is not enabled, the definitions use character
+literals. Both character and string versions of each character are needed, and
+there are some longer strings as well.
+
+This means that, on EBCDIC platforms, the PCRE library can handle either
+EBCDIC, or UTF-8, but not both. To support both in the same compiled library
+would need different lookups depending on whether PCRE_UTF8 was set or not.
+This would make it impossible to use characters in switch/case statements,
+which would reduce performance. For a theoretical use (which nobody has asked
+for) in a minority area (EBCDIC platforms), this is not sensible. Any
+application that did need both could compile two versions of the library, using
+macros to give the functions distinct names. */
+
+#ifndef SUPPORT_UTF8
+
+/* UTF-8 support is not enabled; use the platform-dependent character literals
+so that PCRE works on both ASCII and EBCDIC platforms, in non-UTF-mode only. */
+
+#define CHAR_HT                     '\t'
+#define CHAR_VT                     '\v'
+#define CHAR_FF                     '\f'
+#define CHAR_CR                     '\r'
+#define CHAR_NL                     '\n'
+#define CHAR_BS                     '\b'
+#define CHAR_BEL                    '\a'
+#ifdef EBCDIC
+#define CHAR_ESC                    '\047'
+#define CHAR_DEL                    '\007'
+#else
+#define CHAR_ESC                    '\033'
+#define CHAR_DEL                    '\177'
+#endif
+
+#define CHAR_SPACE                  ' '
+#define CHAR_EXCLAMATION_MARK       '!'
+#define CHAR_QUOTATION_MARK         '"'
+#define CHAR_NUMBER_SIGN            '#'
+#define CHAR_DOLLAR_SIGN            '$'
+#define CHAR_PERCENT_SIGN           '%'
+#define CHAR_AMPERSAND              '&'
+#define CHAR_APOSTROPHE             '\''
+#define CHAR_LEFT_PARENTHESIS       '('
+#define CHAR_RIGHT_PARENTHESIS      ')'
+#define CHAR_ASTERISK               '*'
+#define CHAR_PLUS                   '+'
+#define CHAR_COMMA                  ','
+#define CHAR_MINUS                  '-'
+#define CHAR_DOT                    '.'
+#define CHAR_SLASH                  '/'
+#define CHAR_0                      '0'
+#define CHAR_1                      '1'
+#define CHAR_2                      '2'
+#define CHAR_3                      '3'
+#define CHAR_4                      '4'
+#define CHAR_5                      '5'
+#define CHAR_6                      '6'
+#define CHAR_7                      '7'
+#define CHAR_8                      '8'
+#define CHAR_9                      '9'
+#define CHAR_COLON                  ':'
+#define CHAR_SEMICOLON              ';'
+#define CHAR_LESS_THAN_SIGN         '<'
+#define CHAR_EQUALS_SIGN            '='
+#define CHAR_GREATER_THAN_SIGN      '>'
+#define CHAR_QUESTION_MARK          '?'
+#define CHAR_COMMERCIAL_AT          '@'
+#define CHAR_A                      'A'
+#define CHAR_B                      'B'
+#define CHAR_C                      'C'
+#define CHAR_D                      'D'
+#define CHAR_E                      'E'
+#define CHAR_F                      'F'
+#define CHAR_G                      'G'
+#define CHAR_H                      'H'
+#define CHAR_I                      'I'
+#define CHAR_J                      'J'
+#define CHAR_K                      'K'
+#define CHAR_L                      'L'
+#define CHAR_M                      'M'
+#define CHAR_N                      'N'
+#define CHAR_O                      'O'
+#define CHAR_P                      'P'
+#define CHAR_Q                      'Q'
+#define CHAR_R                      'R'
+#define CHAR_S                      'S'
+#define CHAR_T                      'T'
+#define CHAR_U                      'U'
+#define CHAR_V                      'V'
+#define CHAR_W                      'W'
+#define CHAR_X                      'X'
+#define CHAR_Y                      'Y'
+#define CHAR_Z                      'Z'
+#define CHAR_LEFT_SQUARE_BRACKET    '['
+#define CHAR_BACKSLASH              '\\'
+#define CHAR_RIGHT_SQUARE_BRACKET   ']'
+#define CHAR_CIRCUMFLEX_ACCENT      '^'
+#define CHAR_UNDERSCORE             '_'
+#define CHAR_GRAVE_ACCENT           '`'
+#define CHAR_a                      'a'
+#define CHAR_b                      'b'
+#define CHAR_c                      'c'
+#define CHAR_d                      'd'
+#define CHAR_e                      'e'
+#define CHAR_f                      'f'
+#define CHAR_g                      'g'
+#define CHAR_h                      'h'
+#define CHAR_i                      'i'
+#define CHAR_j                      'j'
+#define CHAR_k                      'k'
+#define CHAR_l                      'l'
+#define CHAR_m                      'm'
+#define CHAR_n                      'n'
+#define CHAR_o                      'o'
+#define CHAR_p                      'p'
+#define CHAR_q                      'q'
+#define CHAR_r                      'r'
+#define CHAR_s                      's'
+#define CHAR_t                      't'
+#define CHAR_u                      'u'
+#define CHAR_v                      'v'
+#define CHAR_w                      'w'
+#define CHAR_x                      'x'
+#define CHAR_y                      'y'
+#define CHAR_z                      'z'
+#define CHAR_LEFT_CURLY_BRACKET     '{'
+#define CHAR_VERTICAL_LINE          '|'
+#define CHAR_RIGHT_CURLY_BRACKET    '}'
+#define CHAR_TILDE                  '~'
+
+#define STR_HT                      "\t"
+#define STR_VT                      "\v"
+#define STR_FF                      "\f"
+#define STR_CR                      "\r"
+#define STR_NL                      "\n"
+#define STR_BS                      "\b"
+#define STR_BEL                     "\a"
+#ifdef EBCDIC
+#define STR_ESC                     "\047"
+#define STR_DEL                     "\007"
+#else
+#define STR_ESC                     "\033"
+#define STR_DEL                     "\177"
+#endif
+
+#define STR_SPACE                   " "
+#define STR_EXCLAMATION_MARK        "!"
+#define STR_QUOTATION_MARK          "\""
+#define STR_NUMBER_SIGN             "#"
+#define STR_DOLLAR_SIGN             "$"
+#define STR_PERCENT_SIGN            "%"
+#define STR_AMPERSAND               "&"
+#define STR_APOSTROPHE              "'"
+#define STR_LEFT_PARENTHESIS        "("
+#define STR_RIGHT_PARENTHESIS       ")"
+#define STR_ASTERISK                "*"
+#define STR_PLUS                    "+"
+#define STR_COMMA                   ","
+#define STR_MINUS                   "-"
+#define STR_DOT                     "."
+#define STR_SLASH                   "/"
+#define STR_0                       "0"
+#define STR_1                       "1"
+#define STR_2                       "2"
+#define STR_3                       "3"
+#define STR_4                       "4"
+#define STR_5                       "5"
+#define STR_6                       "6"
+#define STR_7                       "7"
+#define STR_8                       "8"
+#define STR_9                       "9"
+#define STR_COLON                   ":"
+#define STR_SEMICOLON               ";"
+#define STR_LESS_THAN_SIGN          "<"
+#define STR_EQUALS_SIGN             "="
+#define STR_GREATER_THAN_SIGN       ">"
+#define STR_QUESTION_MARK           "?"
+#define STR_COMMERCIAL_AT           "@"
+#define STR_A                       "A"
+#define STR_B                       "B"
+#define STR_C                       "C"
+#define STR_D                       "D"
+#define STR_E                       "E"
+#define STR_F                       "F"
+#define STR_G                       "G"
+#define STR_H                       "H"
+#define STR_I                       "I"
+#define STR_J                       "J"
+#define STR_K                       "K"
+#define STR_L                       "L"
+#define STR_M                       "M"
+#define STR_N                       "N"
+#define STR_O                       "O"
+#define STR_P                       "P"
+#define STR_Q                       "Q"
+#define STR_R                       "R"
+#define STR_S                       "S"
+#define STR_T                       "T"
+#define STR_U                       "U"
+#define STR_V                       "V"
+#define STR_W                       "W"
+#define STR_X                       "X"
+#define STR_Y                       "Y"
+#define STR_Z                       "Z"
+#define STR_LEFT_SQUARE_BRACKET     "["
+#define STR_BACKSLASH               "\\"
+#define STR_RIGHT_SQUARE_BRACKET    "]"
+#define STR_CIRCUMFLEX_ACCENT       "^"
+#define STR_UNDERSCORE              "_"
+#define STR_GRAVE_ACCENT            "`"
+#define STR_a                       "a"
+#define STR_b                       "b"
+#define STR_c                       "c"
+#define STR_d                       "d"
+#define STR_e                       "e"
+#define STR_f                       "f"
+#define STR_g                       "g"
+#define STR_h                       "h"
+#define STR_i                       "i"
+#define STR_j                       "j"
+#define STR_k                       "k"
+#define STR_l                       "l"
+#define STR_m                       "m"
+#define STR_n                       "n"
+#define STR_o                       "o"
+#define STR_p                       "p"
+#define STR_q                       "q"
+#define STR_r                       "r"
+#define STR_s                       "s"
+#define STR_t                       "t"
+#define STR_u                       "u"
+#define STR_v                       "v"
+#define STR_w                       "w"
+#define STR_x                       "x"
+#define STR_y                       "y"
+#define STR_z                       "z"
+#define STR_LEFT_CURLY_BRACKET      "{"
+#define STR_VERTICAL_LINE           "|"
+#define STR_RIGHT_CURLY_BRACKET     "}"
+#define STR_TILDE                   "~"
+
+#define STRING_ACCEPT0              "ACCEPT\0"
+#define STRING_COMMIT0              "COMMIT\0"
+#define STRING_F0                   "F\0"
+#define STRING_FAIL0                "FAIL\0"
+#define STRING_PRUNE0               "PRUNE\0"
+#define STRING_SKIP0                "SKIP\0"
+#define STRING_THEN                 "THEN"
+
+#define STRING_alpha0               "alpha\0"
+#define STRING_lower0               "lower\0"
+#define STRING_upper0               "upper\0"
+#define STRING_alnum0               "alnum\0"
+#define STRING_ascii0               "ascii\0"
+#define STRING_blank0               "blank\0"
+#define STRING_cntrl0               "cntrl\0"
+#define STRING_digit0               "digit\0"
+#define STRING_graph0               "graph\0"
+#define STRING_print0               "print\0"
+#define STRING_punct0               "punct\0"
+#define STRING_space0               "space\0"
+#define STRING_word0                "word\0"
+#define STRING_xdigit               "xdigit"
+
+#define STRING_DEFINE               "DEFINE"
+
+#define STRING_CR_RIGHTPAR          "CR)"
+#define STRING_LF_RIGHTPAR          "LF)"
+#define STRING_CRLF_RIGHTPAR        "CRLF)"
+#define STRING_ANY_RIGHTPAR         "ANY)"
+#define STRING_ANYCRLF_RIGHTPAR     "ANYCRLF)"
+#define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)"
+#define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)"
+#define STRING_UTF8_RIGHTPAR        "UTF8)"
+
+#else  /* SUPPORT_UTF8 */
+
+/* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This
+works in both modes non-EBCDIC platforms, and on EBCDIC platforms in UTF-8 mode
+only. */
+
+#define CHAR_HT                     '\011'
+#define CHAR_VT                     '\013'
+#define CHAR_FF                     '\014'
+#define CHAR_CR                     '\015'
+#define CHAR_NL                     '\012'
+#define CHAR_BS                     '\010'
+#define CHAR_BEL                    '\007'
+#define CHAR_ESC                    '\033'
+#define CHAR_DEL                    '\177'
+
+#define CHAR_SPACE                  '\040'
+#define CHAR_EXCLAMATION_MARK       '\041'
+#define CHAR_QUOTATION_MARK         '\042'
+#define CHAR_NUMBER_SIGN            '\043'
+#define CHAR_DOLLAR_SIGN            '\044'
+#define CHAR_PERCENT_SIGN           '\045'
+#define CHAR_AMPERSAND              '\046'
+#define CHAR_APOSTROPHE             '\047'
+#define CHAR_LEFT_PARENTHESIS       '\050'
+#define CHAR_RIGHT_PARENTHESIS      '\051'
+#define CHAR_ASTERISK               '\052'
+#define CHAR_PLUS                   '\053'
+#define CHAR_COMMA                  '\054'
+#define CHAR_MINUS                  '\055'
+#define CHAR_DOT                    '\056'
+#define CHAR_SLASH                  '\057'
+#define CHAR_0                      '\060'
+#define CHAR_1                      '\061'
+#define CHAR_2                      '\062'
+#define CHAR_3                      '\063'
+#define CHAR_4                      '\064'
+#define CHAR_5                      '\065'
+#define CHAR_6                      '\066'
+#define CHAR_7                      '\067'
+#define CHAR_8                      '\070'
+#define CHAR_9                      '\071'
+#define CHAR_COLON                  '\072'
+#define CHAR_SEMICOLON              '\073'
+#define CHAR_LESS_THAN_SIGN         '\074'
+#define CHAR_EQUALS_SIGN            '\075'
+#define CHAR_GREATER_THAN_SIGN      '\076'
+#define CHAR_QUESTION_MARK          '\077'
+#define CHAR_COMMERCIAL_AT          '\100'
+#define CHAR_A                      '\101'
+#define CHAR_B                      '\102'
+#define CHAR_C                      '\103'
+#define CHAR_D                      '\104'
+#define CHAR_E                      '\105'
+#define CHAR_F                      '\106'
+#define CHAR_G                      '\107'
+#define CHAR_H                      '\110'
+#define CHAR_I                      '\111'
+#define CHAR_J                      '\112'
+#define CHAR_K                      '\113'
+#define CHAR_L                      '\114'
+#define CHAR_M                      '\115'
+#define CHAR_N                      '\116'
+#define CHAR_O                      '\117'
+#define CHAR_P                      '\120'
+#define CHAR_Q                      '\121'
+#define CHAR_R                      '\122'
+#define CHAR_S                      '\123'
+#define CHAR_T                      '\124'
+#define CHAR_U                      '\125'
+#define CHAR_V                      '\126'
+#define CHAR_W                      '\127'
+#define CHAR_X                      '\130'
+#define CHAR_Y                      '\131'
+#define CHAR_Z                      '\132'
+#define CHAR_LEFT_SQUARE_BRACKET    '\133'
+#define CHAR_BACKSLASH              '\134'
+#define CHAR_RIGHT_SQUARE_BRACKET   '\135'
+#define CHAR_CIRCUMFLEX_ACCENT      '\136'
+#define CHAR_UNDERSCORE             '\137'
+#define CHAR_GRAVE_ACCENT           '\140'
+#define CHAR_a                      '\141'
+#define CHAR_b                      '\142'
+#define CHAR_c                      '\143'
+#define CHAR_d                      '\144'
+#define CHAR_e                      '\145'
+#define CHAR_f                      '\146'
+#define CHAR_g                      '\147'
+#define CHAR_h                      '\150'
+#define CHAR_i                      '\151'
+#define CHAR_j                      '\152'
+#define CHAR_k                      '\153'
+#define CHAR_l                      '\154'
+#define CHAR_m                      '\155'
+#define CHAR_n                      '\156'
+#define CHAR_o                      '\157'
+#define CHAR_p                      '\160'
+#define CHAR_q                      '\161'
+#define CHAR_r                      '\162'
+#define CHAR_s                      '\163'
+#define CHAR_t                      '\164'
+#define CHAR_u                      '\165'
+#define CHAR_v                      '\166'
+#define CHAR_w                      '\167'
+#define CHAR_x                      '\170'
+#define CHAR_y                      '\171'
+#define CHAR_z                      '\172'
+#define CHAR_LEFT_CURLY_BRACKET     '\173'
+#define CHAR_VERTICAL_LINE          '\174'
+#define CHAR_RIGHT_CURLY_BRACKET    '\175'
+#define CHAR_TILDE                  '\176'
+
+#define STR_HT                      "\011"
+#define STR_VT                      "\013"
+#define STR_FF                      "\014"
+#define STR_CR                      "\015"
+#define STR_NL                      "\012"
+#define STR_BS                      "\010"
+#define STR_BEL                     "\007"
+#define STR_ESC                     "\033"
+#define STR_DEL                     "\177"
+
+#define STR_SPACE                   "\040"
+#define STR_EXCLAMATION_MARK        "\041"
+#define STR_QUOTATION_MARK          "\042"
+#define STR_NUMBER_SIGN             "\043"
+#define STR_DOLLAR_SIGN             "\044"
+#define STR_PERCENT_SIGN            "\045"
+#define STR_AMPERSAND               "\046"
+#define STR_APOSTROPHE              "\047"
+#define STR_LEFT_PARENTHESIS        "\050"
+#define STR_RIGHT_PARENTHESIS       "\051"
+#define STR_ASTERISK                "\052"
+#define STR_PLUS                    "\053"
+#define STR_COMMA                   "\054"
+#define STR_MINUS                   "\055"
+#define STR_DOT                     "\056"
+#define STR_SLASH                   "\057"
+#define STR_0                       "\060"
+#define STR_1                       "\061"
+#define STR_2                       "\062"
+#define STR_3                       "\063"
+#define STR_4                       "\064"
+#define STR_5                       "\065"
+#define STR_6                       "\066"
+#define STR_7                       "\067"
+#define STR_8                       "\070"
+#define STR_9                       "\071"
+#define STR_COLON                   "\072"
+#define STR_SEMICOLON               "\073"
+#define STR_LESS_THAN_SIGN          "\074"
+#define STR_EQUALS_SIGN             "\075"
+#define STR_GREATER_THAN_SIGN       "\076"
+#define STR_QUESTION_MARK           "\077"
+#define STR_COMMERCIAL_AT           "\100"
+#define STR_A                       "\101"
+#define STR_B                       "\102"
+#define STR_C                       "\103"
+#define STR_D                       "\104"
+#define STR_E                       "\105"
+#define STR_F                       "\106"
+#define STR_G                       "\107"
+#define STR_H                       "\110"
+#define STR_I                       "\111"
+#define STR_J                       "\112"
+#define STR_K                       "\113"
+#define STR_L                       "\114"
+#define STR_M                       "\115"
+#define STR_N                       "\116"
+#define STR_O                       "\117"
+#define STR_P                       "\120"
+#define STR_Q                       "\121"
+#define STR_R                       "\122"
+#define STR_S                       "\123"
+#define STR_T                       "\124"
+#define STR_U                       "\125"
+#define STR_V                       "\126"
+#define STR_W                       "\127"
+#define STR_X                       "\130"
+#define STR_Y                       "\131"
+#define STR_Z                       "\132"
+#define STR_LEFT_SQUARE_BRACKET     "\133"
+#define STR_BACKSLASH               "\134"
+#define STR_RIGHT_SQUARE_BRACKET    "\135"
+#define STR_CIRCUMFLEX_ACCENT       "\136"
+#define STR_UNDERSCORE              "\137"
+#define STR_GRAVE_ACCENT            "\140"
+#define STR_a                       "\141"
+#define STR_b                       "\142"
+#define STR_c                       "\143"
+#define STR_d                       "\144"
+#define STR_e                       "\145"
+#define STR_f                       "\146"
+#define STR_g                       "\147"
+#define STR_h                       "\150"
+#define STR_i                       "\151"
+#define STR_j                       "\152"
+#define STR_k                       "\153"
+#define STR_l                       "\154"
+#define STR_m                       "\155"
+#define STR_n                       "\156"
+#define STR_o                       "\157"
+#define STR_p                       "\160"
+#define STR_q                       "\161"
+#define STR_r                       "\162"
+#define STR_s                       "\163"
+#define STR_t                       "\164"
+#define STR_u                       "\165"
+#define STR_v                       "\166"
+#define STR_w                       "\167"
+#define STR_x                       "\170"
+#define STR_y                       "\171"
+#define STR_z                       "\172"
+#define STR_LEFT_CURLY_BRACKET      "\173"
+#define STR_VERTICAL_LINE           "\174"
+#define STR_RIGHT_CURLY_BRACKET     "\175"
+#define STR_TILDE                   "\176"
+
+#define STRING_ACCEPT0              STR_A STR_C STR_C STR_E STR_P STR_T "\0"
+#define STRING_COMMIT0              STR_C STR_O STR_M STR_M STR_I STR_T "\0"
+#define STRING_F0                   STR_F "\0"
+#define STRING_FAIL0                STR_F STR_A STR_I STR_L "\0"
+#define STRING_PRUNE0               STR_P STR_R STR_U STR_N STR_E "\0"
+#define STRING_SKIP0                STR_S STR_K STR_I STR_P "\0"
+#define STRING_THEN                 STR_T STR_H STR_E STR_N
+
+#define STRING_alpha0               STR_a STR_l STR_p STR_h STR_a "\0"
+#define STRING_lower0               STR_l STR_o STR_w STR_e STR_r "\0"
+#define STRING_upper0               STR_u STR_p STR_p STR_e STR_r "\0"
+#define STRING_alnum0               STR_a STR_l STR_n STR_u STR_m "\0"
+#define STRING_ascii0               STR_a STR_s STR_c STR_i STR_i "\0"
+#define STRING_blank0               STR_b STR_l STR_a STR_n STR_k "\0"
+#define STRING_cntrl0               STR_c STR_n STR_t STR_r STR_l "\0"
+#define STRING_digit0               STR_d STR_i STR_g STR_i STR_t "\0"
+#define STRING_graph0               STR_g STR_r STR_a STR_p STR_h "\0"
+#define STRING_print0               STR_p STR_r STR_i STR_n STR_t "\0"
+#define STRING_punct0               STR_p STR_u STR_n STR_c STR_t "\0"
+#define STRING_space0               STR_s STR_p STR_a STR_c STR_e "\0"
+#define STRING_word0                STR_w STR_o STR_r STR_d       "\0"
+#define STRING_xdigit               STR_x STR_d STR_i STR_g STR_i STR_t
+
+#define STRING_DEFINE               STR_D STR_E STR_F STR_I STR_N STR_E
+
+#define STRING_CR_RIGHTPAR          STR_C STR_R STR_RIGHT_PARENTHESIS
+#define STRING_LF_RIGHTPAR          STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_CRLF_RIGHTPAR        STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_ANY_RIGHTPAR         STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS
+#define STRING_ANYCRLF_RIGHTPAR     STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_BSR_ANYCRLF_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS
+#define STRING_BSR_UNICODE_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS
+#define STRING_UTF8_RIGHTPAR        STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS
+
+#endif  /* SUPPORT_UTF8 */
+
 /* Escape items that are just an encoding of a particular data value. */
 
 #ifndef ESC_e
-#define ESC_e 27
+#define ESC_e CHAR_ESC
 #endif
 
 #ifndef ESC_f
-#define ESC_f '\f'
+#define ESC_f CHAR_FF
 #endif
 
 #ifndef ESC_n
-#define ESC_n '\n'
+#define ESC_n CHAR_NL
 #endif
 
 #ifndef ESC_r
-#define ESC_r '\r'
+#define ESC_r CHAR_CR
 #endif
 
 /* We can't officially use ESC_t because it is a POSIX reserved identifier
 (presumably because of all the others like size_t). */
 
 #ifndef ESC_tee
-#define ESC_tee '\t'
+#define ESC_tee CHAR_HT
 #endif
 
 /* Codes for different types of Unicode property */
diff --git a/ext/pcre/pcrelib/pcre_maketables.c b/ext/pcre/pcrelib/pcre_maketables.c
index 5b12322..2ba612c 100644
--- a/ext/pcre/pcrelib/pcre_maketables.c
+++ b/ext/pcre/pcrelib/pcre_maketables.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_newline.c b/ext/pcre/pcrelib/pcre_newline.c
index 0b68243..3f6160e 100644
--- a/ext/pcre/pcrelib/pcre_newline.c
+++ b/ext/pcre/pcrelib/pcre_newline.c
@@ -71,8 +71,7 @@ Returns:       TRUE or FALSE
 */
 
 BOOL
-_pcre_is_newline(const uschar *ptr, int type, const uschar *endptr,
-  int *lenptr, BOOL utf8)
+_pcre_is_newline(USPTR ptr, int type, USPTR endptr, int *lenptr, BOOL utf8)
 {
 int c;
 if (utf8) { GETCHAR(c, ptr); } else c = *ptr;
@@ -121,8 +120,7 @@ Returns:       TRUE or FALSE
 */
 
 BOOL
-_pcre_was_newline(const uschar *ptr, int type, const uschar *startptr,
-  int *lenptr, BOOL utf8)
+_pcre_was_newline(USPTR ptr, int type, USPTR startptr, int *lenptr, BOOL utf8)
 {
 int c;
 ptr--;
diff --git a/ext/pcre/pcrelib/pcre_ord2utf8.c b/ext/pcre/pcrelib/pcre_ord2utf8.c
index c0a574c..7931241 100644
--- a/ext/pcre/pcrelib/pcre_ord2utf8.c
+++ b/ext/pcre/pcrelib/pcre_ord2utf8.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_printint.src b/ext/pcre/pcrelib/pcre_printint.src
index 98b42aa..5f45fc1 100644
--- a/ext/pcre/pcrelib/pcre_printint.src
+++ b/ext/pcre/pcrelib/pcre_printint.src
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2008 University of Cambridge
+           Copyright (c) 1997-2009 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -54,7 +54,11 @@ hexadecimal. We don't use isprint() because that can vary from system to system
 (even without the use of locales) and we want the output always to be the same,
 for testing purposes. This macro is used in pcretest as well as in this file. */
 
+#ifdef EBCDIC
+#define PRINTABLE(c) ((c) >= 64 && (c) < 255)
+#else
 #define PRINTABLE(c) ((c) >= 32 && (c) < 127)
+#endif
 
 /* The table of operator names. */
 
diff --git a/ext/pcre/pcrelib/pcre_refcount.c b/ext/pcre/pcrelib/pcre_refcount.c
index 2cc5a9d..c92d578 100644
--- a/ext/pcre/pcrelib/pcre_refcount.c
+++ b/ext/pcre/pcrelib/pcre_refcount.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_study.c b/ext/pcre/pcrelib/pcre_study.c
index 97e3a92..226cc65 100644
--- a/ext/pcre/pcrelib/pcre_study.c
+++ b/ext/pcre/pcrelib/pcre_study.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_tables.c b/ext/pcre/pcrelib/pcre_tables.c
index 08e5a4a..87e3c73 100644
--- a/ext/pcre/pcrelib/pcre_tables.c
+++ b/ext/pcre/pcrelib/pcre_tables.c
@@ -107,126 +107,248 @@ putting all the names into a single, large string and then using offsets in the
 table itself. Maintenance is more error-prone, but frequent changes to this
 data are unlikely.
 
-July 2008: There is now a script called maint/GenerateUtt.py which can be used
-to generate this data instead of maintaining it entirely by hand. */
+July 2008: There is now a script called maint/GenerateUtt.py that can be used
+to generate this data instead of maintaining it entirely by hand.
+
+The script was updated in March 2009 to generate a new EBCDIC-compliant
+version. Like all other character and string literals that are compared against
+the regular expression pattern, we must use STR_ macros instead of literal
+strings to make sure that UTF-8 support works on EBCDIC platforms. */
+
+#define STRING_Any0 STR_A STR_n STR_y "\0"
+#define STRING_Arabic0 STR_A STR_r STR_a STR_b STR_i STR_c "\0"
+#define STRING_Armenian0 STR_A STR_r STR_m STR_e STR_n STR_i STR_a STR_n "\0"
+#define STRING_Balinese0 STR_B STR_a STR_l STR_i STR_n STR_e STR_s STR_e "\0"
+#define STRING_Bengali0 STR_B STR_e STR_n STR_g STR_a STR_l STR_i "\0"
+#define STRING_Bopomofo0 STR_B STR_o STR_p STR_o STR_m STR_o STR_f STR_o "\0"
+#define STRING_Braille0 STR_B STR_r STR_a STR_i STR_l STR_l STR_e "\0"
+#define STRING_Buginese0 STR_B STR_u STR_g STR_i STR_n STR_e STR_s STR_e "\0"
+#define STRING_Buhid0 STR_B STR_u STR_h STR_i STR_d "\0"
+#define STRING_C0 STR_C "\0"
+#define STRING_Canadian_Aboriginal0 STR_C STR_a STR_n STR_a STR_d STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_b STR_o STR_r STR_i STR_g STR_i STR_n STR_a STR_l "\0"
+#define STRING_Carian0 STR_C STR_a STR_r STR_i STR_a STR_n "\0"
+#define STRING_Cc0 STR_C STR_c "\0"
+#define STRING_Cf0 STR_C STR_f "\0"
+#define STRING_Cham0 STR_C STR_h STR_a STR_m "\0"
+#define STRING_Cherokee0 STR_C STR_h STR_e STR_r STR_o STR_k STR_e STR_e "\0"
+#define STRING_Cn0 STR_C STR_n "\0"
+#define STRING_Co0 STR_C STR_o "\0"
+#define STRING_Common0 STR_C STR_o STR_m STR_m STR_o STR_n "\0"
+#define STRING_Coptic0 STR_C STR_o STR_p STR_t STR_i STR_c "\0"
+#define STRING_Cs0 STR_C STR_s "\0"
+#define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0"
+#define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0"
+#define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0"
+#define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0"
+#define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0"
+#define STRING_Ethiopic0 STR_E STR_t STR_h STR_i STR_o STR_p STR_i STR_c "\0"
+#define STRING_Georgian0 STR_G STR_e STR_o STR_r STR_g STR_i STR_a STR_n "\0"
+#define STRING_Glagolitic0 STR_G STR_l STR_a STR_g STR_o STR_l STR_i STR_t STR_i STR_c "\0"
+#define STRING_Gothic0 STR_G STR_o STR_t STR_h STR_i STR_c "\0"
+#define STRING_Greek0 STR_G STR_r STR_e STR_e STR_k "\0"
+#define STRING_Gujarati0 STR_G STR_u STR_j STR_a STR_r STR_a STR_t STR_i "\0"
+#define STRING_Gurmukhi0 STR_G STR_u STR_r STR_m STR_u STR_k STR_h STR_i "\0"
+#define STRING_Han0 STR_H STR_a STR_n "\0"
+#define STRING_Hangul0 STR_H STR_a STR_n STR_g STR_u STR_l "\0"
+#define STRING_Hanunoo0 STR_H STR_a STR_n STR_u STR_n STR_o STR_o "\0"
+#define STRING_Hebrew0 STR_H STR_e STR_b STR_r STR_e STR_w "\0"
+#define STRING_Hiragana0 STR_H STR_i STR_r STR_a STR_g STR_a STR_n STR_a "\0"
+#define STRING_Inherited0 STR_I STR_n STR_h STR_e STR_r STR_i STR_t STR_e STR_d "\0"
+#define STRING_Kannada0 STR_K STR_a STR_n STR_n STR_a STR_d STR_a "\0"
+#define STRING_Katakana0 STR_K STR_a STR_t STR_a STR_k STR_a STR_n STR_a "\0"
+#define STRING_Kayah_Li0 STR_K STR_a STR_y STR_a STR_h STR_UNDERSCORE STR_L STR_i "\0"
+#define STRING_Kharoshthi0 STR_K STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i "\0"
+#define STRING_Khmer0 STR_K STR_h STR_m STR_e STR_r "\0"
+#define STRING_L0 STR_L "\0"
+#define STRING_L_AMPERSAND0 STR_L STR_AMPERSAND "\0"
+#define STRING_Lao0 STR_L STR_a STR_o "\0"
+#define STRING_Latin0 STR_L STR_a STR_t STR_i STR_n "\0"
+#define STRING_Lepcha0 STR_L STR_e STR_p STR_c STR_h STR_a "\0"
+#define STRING_Limbu0 STR_L STR_i STR_m STR_b STR_u "\0"
+#define STRING_Linear_B0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_B "\0"
+#define STRING_Ll0 STR_L STR_l "\0"
+#define STRING_Lm0 STR_L STR_m "\0"
+#define STRING_Lo0 STR_L STR_o "\0"
+#define STRING_Lt0 STR_L STR_t "\0"
+#define STRING_Lu0 STR_L STR_u "\0"
+#define STRING_Lycian0 STR_L STR_y STR_c STR_i STR_a STR_n "\0"
+#define STRING_Lydian0 STR_L STR_y STR_d STR_i STR_a STR_n "\0"
+#define STRING_M0 STR_M "\0"
+#define STRING_Malayalam0 STR_M STR_a STR_l STR_a STR_y STR_a STR_l STR_a STR_m "\0"
+#define STRING_Mc0 STR_M STR_c "\0"
+#define STRING_Me0 STR_M STR_e "\0"
+#define STRING_Mn0 STR_M STR_n "\0"
+#define STRING_Mongolian0 STR_M STR_o STR_n STR_g STR_o STR_l STR_i STR_a STR_n "\0"
+#define STRING_Myanmar0 STR_M STR_y STR_a STR_n STR_m STR_a STR_r "\0"
+#define STRING_N0 STR_N "\0"
+#define STRING_Nd0 STR_N STR_d "\0"
+#define STRING_New_Tai_Lue0 STR_N STR_e STR_w STR_UNDERSCORE STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_u STR_e "\0"
+#define STRING_Nko0 STR_N STR_k STR_o "\0"
+#define STRING_Nl0 STR_N STR_l "\0"
+#define STRING_No0 STR_N STR_o "\0"
+#define STRING_Ogham0 STR_O STR_g STR_h STR_a STR_m "\0"
+#define STRING_Ol_Chiki0 STR_O STR_l STR_UNDERSCORE STR_C STR_h STR_i STR_k STR_i "\0"
+#define STRING_Old_Italic0 STR_O STR_l STR_d STR_UNDERSCORE STR_I STR_t STR_a STR_l STR_i STR_c "\0"
+#define STRING_Old_Persian0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_s STR_i STR_a STR_n "\0"
+#define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0"
+#define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0"
+#define STRING_P0 STR_P "\0"
+#define STRING_Pc0 STR_P STR_c "\0"
+#define STRING_Pd0 STR_P STR_d "\0"
+#define STRING_Pe0 STR_P STR_e "\0"
+#define STRING_Pf0 STR_P STR_f "\0"
+#define STRING_Phags_Pa0 STR_P STR_h STR_a STR_g STR_s STR_UNDERSCORE STR_P STR_a "\0"
+#define STRING_Phoenician0 STR_P STR_h STR_o STR_e STR_n STR_i STR_c STR_i STR_a STR_n "\0"
+#define STRING_Pi0 STR_P STR_i "\0"
+#define STRING_Po0 STR_P STR_o "\0"
+#define STRING_Ps0 STR_P STR_s "\0"
+#define STRING_Rejang0 STR_R STR_e STR_j STR_a STR_n STR_g "\0"
+#define STRING_Runic0 STR_R STR_u STR_n STR_i STR_c "\0"
+#define STRING_S0 STR_S "\0"
+#define STRING_Saurashtra0 STR_S STR_a STR_u STR_r STR_a STR_s STR_h STR_t STR_r STR_a "\0"
+#define STRING_Sc0 STR_S STR_c "\0"
+#define STRING_Shavian0 STR_S STR_h STR_a STR_v STR_i STR_a STR_n "\0"
+#define STRING_Sinhala0 STR_S STR_i STR_n STR_h STR_a STR_l STR_a "\0"
+#define STRING_Sk0 STR_S STR_k "\0"
+#define STRING_Sm0 STR_S STR_m "\0"
+#define STRING_So0 STR_S STR_o "\0"
+#define STRING_Sundanese0 STR_S STR_u STR_n STR_d STR_a STR_n STR_e STR_s STR_e "\0"
+#define STRING_Syloti_Nagri0 STR_S STR_y STR_l STR_o STR_t STR_i STR_UNDERSCORE STR_N STR_a STR_g STR_r STR_i "\0"
+#define STRING_Syriac0 STR_S STR_y STR_r STR_i STR_a STR_c "\0"
+#define STRING_Tagalog0 STR_T STR_a STR_g STR_a STR_l STR_o STR_g "\0"
+#define STRING_Tagbanwa0 STR_T STR_a STR_g STR_b STR_a STR_n STR_w STR_a "\0"
+#define STRING_Tai_Le0 STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_e "\0"
+#define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0"
+#define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0"
+#define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0"
+#define STRING_Thai0 STR_T STR_h STR_a STR_i "\0"
+#define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0"
+#define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0"
+#define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0"
+#define STRING_Vai0 STR_V STR_a STR_i "\0"
+#define STRING_Yi0 STR_Y STR_i "\0"
+#define STRING_Z0 STR_Z "\0"
+#define STRING_Zl0 STR_Z STR_l "\0"
+#define STRING_Zp0 STR_Z STR_p "\0"
+#define STRING_Zs0 STR_Z STR_s "\0"
 
 const char _pcre_utt_names[] =
-  "Any\0"
-  "Arabic\0"
-  "Armenian\0"
-  "Balinese\0"
-  "Bengali\0"
-  "Bopomofo\0"
-  "Braille\0"
-  "Buginese\0"
-  "Buhid\0"
-  "C\0"
-  "Canadian_Aboriginal\0"
-  "Carian\0"
-  "Cc\0"
-  "Cf\0"
-  "Cham\0"
-  "Cherokee\0"
-  "Cn\0"
-  "Co\0"
-  "Common\0"
-  "Coptic\0"
-  "Cs\0"
-  "Cuneiform\0"
-  "Cypriot\0"
-  "Cyrillic\0"
-  "Deseret\0"
-  "Devanagari\0"
-  "Ethiopic\0"
-  "Georgian\0"
-  "Glagolitic\0"
-  "Gothic\0"
-  "Greek\0"
-  "Gujarati\0"
-  "Gurmukhi\0"
-  "Han\0"
-  "Hangul\0"
-  "Hanunoo\0"
-  "Hebrew\0"
-  "Hiragana\0"
-  "Inherited\0"
-  "Kannada\0"
-  "Katakana\0"
-  "Kayah_Li\0"
-  "Kharoshthi\0"
-  "Khmer\0"
-  "L\0"
-  "L&\0"
-  "Lao\0"
-  "Latin\0"
-  "Lepcha\0"
-  "Limbu\0"
-  "Linear_B\0"
-  "Ll\0"
-  "Lm\0"
-  "Lo\0"
-  "Lt\0"
-  "Lu\0"
-  "Lycian\0"
-  "Lydian\0"
-  "M\0"
-  "Malayalam\0"
-  "Mc\0"
-  "Me\0"
-  "Mn\0"
-  "Mongolian\0"
-  "Myanmar\0"
-  "N\0"
-  "Nd\0"
-  "New_Tai_Lue\0"
-  "Nko\0"
-  "Nl\0"
-  "No\0"
-  "Ogham\0"
-  "Ol_Chiki\0"
-  "Old_Italic\0"
-  "Old_Persian\0"
-  "Oriya\0"
-  "Osmanya\0"
-  "P\0"
-  "Pc\0"
-  "Pd\0"
-  "Pe\0"
-  "Pf\0"
-  "Phags_Pa\0"
-  "Phoenician\0"
-  "Pi\0"
-  "Po\0"
-  "Ps\0"
-  "Rejang\0"
-  "Runic\0"
-  "S\0"
-  "Saurashtra\0"
-  "Sc\0"
-  "Shavian\0"
-  "Sinhala\0"
-  "Sk\0"
-  "Sm\0"
-  "So\0"
-  "Sundanese\0"
-  "Syloti_Nagri\0"
-  "Syriac\0"
-  "Tagalog\0"
-  "Tagbanwa\0"
-  "Tai_Le\0"
-  "Tamil\0"
-  "Telugu\0"
-  "Thaana\0"
-  "Thai\0"
-  "Tibetan\0"
-  "Tifinagh\0"
-  "Ugaritic\0"
-  "Vai\0"
-  "Yi\0"
-  "Z\0"
-  "Zl\0"
-  "Zp\0"
-  "Zs\0";
+  STRING_Any0
+  STRING_Arabic0
+  STRING_Armenian0
+  STRING_Balinese0
+  STRING_Bengali0
+  STRING_Bopomofo0
+  STRING_Braille0
+  STRING_Buginese0
+  STRING_Buhid0
+  STRING_C0
+  STRING_Canadian_Aboriginal0
+  STRING_Carian0
+  STRING_Cc0
+  STRING_Cf0
+  STRING_Cham0
+  STRING_Cherokee0
+  STRING_Cn0
+  STRING_Co0
+  STRING_Common0
+  STRING_Coptic0
+  STRING_Cs0
+  STRING_Cuneiform0
+  STRING_Cypriot0
+  STRING_Cyrillic0
+  STRING_Deseret0
+  STRING_Devanagari0
+  STRING_Ethiopic0
+  STRING_Georgian0
+  STRING_Glagolitic0
+  STRING_Gothic0
+  STRING_Greek0
+  STRING_Gujarati0
+  STRING_Gurmukhi0
+  STRING_Han0
+  STRING_Hangul0
+  STRING_Hanunoo0
+  STRING_Hebrew0
+  STRING_Hiragana0
+  STRING_Inherited0
+  STRING_Kannada0
+  STRING_Katakana0
+  STRING_Kayah_Li0
+  STRING_Kharoshthi0
+  STRING_Khmer0
+  STRING_L0
+  STRING_L_AMPERSAND0
+  STRING_Lao0
+  STRING_Latin0
+  STRING_Lepcha0
+  STRING_Limbu0
+  STRING_Linear_B0
+  STRING_Ll0
+  STRING_Lm0
+  STRING_Lo0
+  STRING_Lt0
+  STRING_Lu0
+  STRING_Lycian0
+  STRING_Lydian0
+  STRING_M0
+  STRING_Malayalam0
+  STRING_Mc0
+  STRING_Me0
+  STRING_Mn0
+  STRING_Mongolian0
+  STRING_Myanmar0
+  STRING_N0
+  STRING_Nd0
+  STRING_New_Tai_Lue0
+  STRING_Nko0
+  STRING_Nl0
+  STRING_No0
+  STRING_Ogham0
+  STRING_Ol_Chiki0
+  STRING_Old_Italic0
+  STRING_Old_Persian0
+  STRING_Oriya0
+  STRING_Osmanya0
+  STRING_P0
+  STRING_Pc0
+  STRING_Pd0
+  STRING_Pe0
+  STRING_Pf0
+  STRING_Phags_Pa0
+  STRING_Phoenician0
+  STRING_Pi0
+  STRING_Po0
+  STRING_Ps0
+  STRING_Rejang0
+  STRING_Runic0
+  STRING_S0
+  STRING_Saurashtra0
+  STRING_Sc0
+  STRING_Shavian0
+  STRING_Sinhala0
+  STRING_Sk0
+  STRING_Sm0
+  STRING_So0
+  STRING_Sundanese0
+  STRING_Syloti_Nagri0
+  STRING_Syriac0
+  STRING_Tagalog0
+  STRING_Tagbanwa0
+  STRING_Tai_Le0
+  STRING_Tamil0
+  STRING_Telugu0
+  STRING_Thaana0
+  STRING_Thai0
+  STRING_Tibetan0
+  STRING_Tifinagh0
+  STRING_Ugaritic0
+  STRING_Vai0
+  STRING_Yi0
+  STRING_Z0
+  STRING_Zl0
+  STRING_Zp0
+  STRING_Zs0;
 
 const ucp_type_table _pcre_utt[] = {
   {   0, PT_ANY, 0 },
diff --git a/ext/pcre/pcrelib/pcre_try_flipped.c b/ext/pcre/pcrelib/pcre_try_flipped.c
index 6a8a770..5e67943 100644
--- a/ext/pcre/pcrelib/pcre_try_flipped.c
+++ b/ext/pcre/pcrelib/pcre_try_flipped.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_valid_utf8.c b/ext/pcre/pcrelib/pcre_valid_utf8.c
index 62f47b9..3c81dc9 100644
--- a/ext/pcre/pcrelib/pcre_valid_utf8.c
+++ b/ext/pcre/pcrelib/pcre_valid_utf8.c
@@ -73,10 +73,10 @@ Returns:       < 0    if the string is a valid UTF-8 string
 */
 
 int
-_pcre_valid_utf8(const uschar *string, int length)
+_pcre_valid_utf8(USPTR string, int length)
 {
 #ifdef SUPPORT_UTF8
-register const uschar *p;
+register USPTR p;
 
 if (length < 0)
   {
diff --git a/ext/pcre/pcrelib/pcre_version.c b/ext/pcre/pcrelib/pcre_version.c
index 13330d1..bd63f41 100644
--- a/ext/pcre/pcrelib/pcre_version.c
+++ b/ext/pcre/pcrelib/pcre_version.c
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.
 
                        Written by Philip Hazel
-           Copyright (c) 1997-2009 University of Cambridge
+           Copyright (c) 1997-2008 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_xclass.c b/ext/pcre/pcrelib/pcre_xclass.c
index c939662..3fc3ba3 100644
--- a/ext/pcre/pcrelib/pcre_xclass.c
+++ b/ext/pcre/pcrelib/pcre_xclass.c
@@ -39,8 +39,7 @@ POSSIBILITY OF SUCH DAMAGE.
 
 
 /* This module contains an internal function that is used to match an extended
-class (one that contains characters whose values are > 255). It is used by both
-pcre_exec() and pcre_def_exec(). */
+class. It is used by both pcre_exec() and pcre_def_exec(). */
 
 
 #include "config.h"
@@ -53,7 +52,7 @@ pcre_exec() and pcre_def_exec(). */
 *************************************************/
 
 /* This function is called to match a character against an extended class that
-might contain values > 255.
+might contain values > 255 and/or Unicode properties.
 
 Arguments:
   c           the character
@@ -102,7 +101,7 @@ while ((t = *data++) != XCL_END)
 #ifdef SUPPORT_UCP
   else  /* XCL_PROP & XCL_NOTPROP */
     {
-    const ucd_record * prop = GET_UCD(c);
+    const ucd_record *prop = GET_UCD(c);
 
     switch(*data)
       {
diff --git a/ext/pcre/pcrelib/pcregrep.c b/ext/pcre/pcrelib/pcregrep.c
index f6774a9..4aa2065 100644
--- a/ext/pcre/pcrelib/pcregrep.c
+++ b/ext/pcre/pcrelib/pcregrep.c
@@ -69,6 +69,7 @@ POSSIBILITY OF SUCH DAMAGE.
 typedef int BOOL;
 
 #define MAX_PATTERN_COUNT 100
+#define OFFSET_SIZE 99
 
 #if BUFSIZ > 8192
 #define MBUFTHIRD BUFSIZ
@@ -819,6 +820,60 @@ if (after_context > 0 && lastmatchnumber > 0)
 
 
 /*************************************************
+*   Apply patterns to subject till one matches   *
+*************************************************/
+
+/* This function is called to run through all patterns, looking for a match. It
+is used multiple times for the same subject when colouring is enabled, in order
+to find all possible matches.
+
+Arguments:
+  matchptr    the start of the subject
+  length      the length of the subject to match
+  offsets     the offets vector to fill in
+  mrc         address of where to put the result of pcre_exec()
+
+Returns:      TRUE if there was a match
+              FALSE if there was no match
+              invert if there was a non-fatal error
+*/
+
+static BOOL
+match_patterns(char *matchptr, size_t length, int *offsets, int *mrc)
+{
+int i;
+for (i = 0; i < pattern_count; i++)
+  {
+  *mrc = pcre_exec(pattern_list[i], hints_list[i], matchptr, length, 0,
+    PCRE_NOTEMPTY, offsets, OFFSET_SIZE);
+  if (*mrc >= 0) return TRUE;
+  if (*mrc == PCRE_ERROR_NOMATCH) continue;
+  fprintf(stderr, "pcregrep: pcre_exec() error %d while matching ", *mrc);
+  if (pattern_count > 1) fprintf(stderr, "pattern number %d to ", i+1);
+  fprintf(stderr, "this text:\n");
+  fwrite(matchptr, 1, length, stderr);  /* In case binary zero included */
+  fprintf(stderr, "\n");
+  if (error_count == 0 &&
+      (*mrc == PCRE_ERROR_MATCHLIMIT || *mrc == PCRE_ERROR_RECURSIONLIMIT))
+    {
+    fprintf(stderr, "pcregrep: error %d means that a resource limit "
+      "was exceeded\n", *mrc);
+    fprintf(stderr, "pcregrep: check your regex for nested unlimited loops\n");
+    }
+  if (error_count++ > 20)
+    {
+    fprintf(stderr, "pcregrep: too many errors - abandoned\n");
+    exit(2);
+    }
+  return invert;    /* No more matching; don't show the line again */
+  }
+
+return FALSE;  /* No match, no errors */
+}
+
+
+
+/*************************************************
 *            Grep an individual file             *
 *************************************************/
 
@@ -851,7 +906,7 @@ int linenumber = 1;
 int lastmatchnumber = 0;
 int count = 0;
 int filepos = 0;
-int offsets[99];
+int offsets[OFFSET_SIZE];
 char *lastmatchrestart = NULL;
 char buffer[3*MBUFTHIRD];
 char *ptr = buffer;
@@ -907,9 +962,9 @@ way, the buffer is shifted left and re-filled. */
 
 while (ptr < endptr)
   {
-  int i, endlinelength;
+  int endlinelength;
   int mrc = 0;
-  BOOL match = FALSE;
+  BOOL match;
   char *matchptr = ptr;
   char *t = ptr;
   size_t length, linelength;
@@ -917,9 +972,10 @@ while (ptr < endptr)
   /* At this point, ptr is at the start of a line. We need to find the length
   of the subject string to pass to pcre_exec(). In multiline mode, it is the
   length remainder of the data in the buffer. Otherwise, it is the length of
-  the next line. After matching, we always advance by the length of the next
-  line. In multiline mode the PCRE_FIRSTLINE option is used for compiling, so
-  that any match is constrained to be in the first line. */
+  the next line, excluding the terminating newline. After matching, we always
+  advance by the length of the next line. In multiline mode the PCRE_FIRSTLINE
+  option is used for compiling, so that any match is constrained to be in the
+  first line. */
 
   t = end_of_line(t, endptr, &endlinelength);
   linelength = t - ptr - endlinelength;
@@ -934,6 +990,7 @@ while (ptr < endptr)
       #include <time.h>
       struct timeval start_time, end_time;
       struct timezone dummy;
+      int i;
 
       if (jfriedl_XT)
       {
@@ -959,7 +1016,8 @@ while (ptr < endptr)
 
 
       for (i = 0; i < jfriedl_XR; i++)
-          match = (pcre_exec(pattern_list[0], hints_list[0], ptr, length, 0, 0, offsets, 99) >= 0);
+          match = (pcre_exec(pattern_list[0], hints_list[0], ptr, length, 0,
+              PCRE_NOTEMPTY, offsets, OFFSET_SIZE) >= 0);
 
       if (gettimeofday(&end_time, &dummy) != 0)
               perror("bad gettimeofday");
@@ -978,37 +1036,11 @@ while (ptr < endptr)
 
   ONLY_MATCHING_RESTART:
 
-  /* Run through all the patterns until one matches. Note that we don't include
-  the final newline in the subject string. */
+  /* Run through all the patterns until one matches or there is an error other
+  than NOMATCH. This code is in a subroutine so that it can be re-used for
+  finding subsequent matches when colouring matched lines. */
 
-  for (i = 0; i < pattern_count; i++)
-    {
-    mrc = pcre_exec(pattern_list[i], hints_list[i], matchptr, length, 0, 0,
-      offsets, 99);
-    if (mrc >= 0) { match = TRUE; break; }
-    if (mrc != PCRE_ERROR_NOMATCH)
-      {
-      fprintf(stderr, "pcregrep: pcre_exec() error %d while matching ", mrc);
-      if (pattern_count > 1) fprintf(stderr, "pattern number %d to ", i+1);
-      fprintf(stderr, "this line:\n");
-      fwrite(matchptr, 1, linelength, stderr);  /* In case binary zero included */
-      fprintf(stderr, "\n");
-      if (error_count == 0 &&
-          (mrc == PCRE_ERROR_MATCHLIMIT || mrc == PCRE_ERROR_RECURSIONLIMIT))
-        {
-        fprintf(stderr, "pcregrep: error %d means that a resource limit "
-          "was exceeded\n", mrc);
-        fprintf(stderr, "pcregrep: check your regex for nested unlimited loops\n");
-        }
-      if (error_count++ > 20)
-        {
-        fprintf(stderr, "pcregrep: too many errors - abandoned\n");
-        exit(2);
-        }
-      match = invert;    /* No more matching; don't show the line again */
-      break;
-      }
-    }
+  match = match_patterns(matchptr, length, offsets, &mrc);
 
   /* If it's a match or a not-match (as required), do what's wanted. */
 
@@ -1058,7 +1090,11 @@ while (ptr < endptr)
           fprintf(stdout, "%d,%d", (int)(filepos + matchptr + offsets[0] - ptr),
             offsets[1] - offsets[0]);
         else
+          {
+          if (do_colour) fprintf(stdout, "%c[%sm", 0x1b, colour_string);
           fwrite(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout);
+          if (do_colour) fprintf(stdout, "%c[00m", 0x1b);
+          }
         fprintf(stdout, "\n");
         matchptr += offsets[1];
         length -= offsets[1];
@@ -1195,17 +1231,33 @@ while (ptr < endptr)
       else
 #endif
 
-      /* We have to split the line(s) up if colouring. */
+      /* We have to split the line(s) up if colouring, and search for further
+      matches. */
 
       if (do_colour)
         {
+        int last_offset = 0;
         fwrite(ptr, 1, offsets[0], stdout);
         fprintf(stdout, "%c[%sm", 0x1b, colour_string);
         fwrite(ptr + offsets[0], 1, offsets[1] - offsets[0], stdout);
         fprintf(stdout, "%c[00m", 0x1b);
-        fwrite(ptr + offsets[1], 1, (linelength + endlinelength) - offsets[1],
+        for (;;)
+          {
+          last_offset += offsets[1];
+          matchptr += offsets[1];
+          length -= offsets[1];
+          if (!match_patterns(matchptr, length, offsets, &mrc)) break;
+          fwrite(matchptr, 1, offsets[0], stdout);
+          fprintf(stdout, "%c[%sm", 0x1b, colour_string);
+          fwrite(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout);
+          fprintf(stdout, "%c[00m", 0x1b);
+          }
+        fwrite(ptr + last_offset, 1, (linelength + endlinelength) - last_offset,
           stdout);
         }
+
+      /* Not colouring; no need to search for further matches */
+
       else fwrite(ptr, 1, linelength + endlinelength, stdout);
       }
 
@@ -1817,16 +1869,18 @@ const char *error;
 
 /* Set the default line ending value from the default in the PCRE library;
 "lf", "cr", "crlf", and "any" are supported. Anything else is treated as "lf".
-*/
+Note that the return values from pcre_config(), though derived from the ASCII
+codes, are the same in EBCDIC environments, so we must use the actual values
+rather than escapes such as as '\r'. */
 
 (void)pcre_config(PCRE_CONFIG_NEWLINE, &i);
 switch(i)
   {
-  default:                 newline = (char *)"lf"; break;
-  case '\r':               newline = (char *)"cr"; break;
-  case ('\r' << 8) | '\n': newline = (char *)"crlf"; break;
-  case -1:                 newline = (char *)"any"; break;
-  case -2:                 newline = (char *)"anycrlf"; break;
+  default:               newline = (char *)"lf"; break;
+  case 13:               newline = (char *)"cr"; break;
+  case (13 << 8) | 10:   newline = (char *)"crlf"; break;
+  case -1:               newline = (char *)"any"; break;
+  case -2:               newline = (char *)"anycrlf"; break;
   }
 
 /* Process the options */
diff --git a/ext/pcre/pcrelib/pcreposix.c b/ext/pcre/pcrelib/pcreposix.c
index 87c695b..645e060 100644
--- a/ext/pcre/pcrelib/pcreposix.c
+++ b/ext/pcre/pcrelib/pcreposix.c
@@ -272,6 +272,7 @@ BOOL nosub =
 
 if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;
 if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;
+if ((eflags & REG_NOTEMPTY) != 0) options |= PCRE_NOTEMPTY;
 
 ((regex_t *)preg)->re_erroffset = (size_t)(-1);  /* Only has meaning after compile */
 
diff --git a/ext/pcre/pcrelib/pcreposix.h b/ext/pcre/pcrelib/pcreposix.h
index 4f59d91..7c5af72 100644
--- a/ext/pcre/pcrelib/pcreposix.h
+++ b/ext/pcre/pcrelib/pcreposix.h
@@ -60,6 +60,7 @@ extern "C" {
 #define REG_NOSUB     0x0020
 #define REG_UTF8      0x0040   /* NOT defined by POSIX. */
 #define REG_STARTEND  0x0080   /* BSD feature: pass subject string by so,eo */
+#define REG_NOTEMPTY  0x0100   /* NOT defined by POSIX. */
 
 /* This is not used by PCRE, but by defining it we make it easier
 to slot PCRE into existing programs that make POSIX calls. */
diff --git a/ext/pcre/pcrelib/testdata/grepinputx b/ext/pcre/pcrelib/testdata/grepinputx
index aebba02..730cc8a 100644
--- a/ext/pcre/pcrelib/testdata/grepinputx
+++ b/ext/pcre/pcrelib/testdata/grepinputx
@@ -39,4 +39,5 @@ eighteen
 nineteen
 twenty
 
+This line contains pattern not on a line by itself.
 This is the last line of this file.
diff --git a/ext/pcre/pcrelib/testdata/grepoutput b/ext/pcre/pcrelib/testdata/grepoutput
index 3241984..882344e 100644
--- a/ext/pcre/pcrelib/testdata/grepoutput
+++ b/ext/pcre/pcrelib/testdata/grepoutput
@@ -18,6 +18,7 @@ PATTERN at the start of a line.
 ./testdata/grepinput:608:Check up on PATTERN near the end.
 ./testdata/grepinputx:3:Here is the pattern again.
 ./testdata/grepinputx:5:Pattern
+./testdata/grepinputx:42:This line contains pattern not on a line by itself.
 ---------------------------- Test 6 ------------------------------
 7:PATTERN at the start of a line.
 8:In the middle of a line, PATTERN appears.
@@ -25,6 +26,7 @@ PATTERN at the start of a line.
 608:Check up on PATTERN near the end.
 3:Here is the pattern again.
 5:Pattern
+42:This line contains pattern not on a line by itself.
 ---------------------------- Test 7 ------------------------------
 ./testdata/grepinput
 ./testdata/grepinputx
@@ -75,12 +77,13 @@ RC=1
 39:nineteen
 40:twenty
 41:
-42:This is the last line of this file.
+43:This is the last line of this file.
 ---------------------------- Test 12 -----------------------------
 Pattern
 ---------------------------- Test 13 -----------------------------
 Here is the pattern again.
 That time it was on a line by itself.
+This line contains pattern not on a line by itself.
 ---------------------------- Test 14 -----------------------------
 ./testdata/grepinputx:To pat or not to pat, that is the question.
 ---------------------------- Test 15 -----------------------------
@@ -157,6 +160,7 @@ eighteen
 nineteen
 twenty
 
+This line contains pattern not on a line by itself.
 This is the last line of this file.
 ---------------------------- Test 25 -----------------------------
 15-
@@ -207,6 +211,7 @@ eighteen
 nineteen
 twenty
 
+This line contains pattern not on a line by itself.
 This is the last line of this file.
 ---------------------------- Test 27 -----------------------------
 four
@@ -227,6 +232,7 @@ eighteen
 nineteen
 twenty
 
+This line contains pattern not on a line by itself.
 This is the last line of this file.
 ---------------------------- Test 28 -----------------------------
 14-of lines all by themselves.
@@ -279,6 +285,7 @@ eighteen
 nineteen
 twenty
 
+This line contains pattern not on a line by itself.
 This is the last line of this file.
 ---------------------------- Test 30 -----------------------------
 ./testdata/grepinput-4-features should be added at the end, because some of the tests involve the
@@ -299,6 +306,11 @@ This is the last line of this file.
 ./testdata/grepinputx:3:Here is the pattern again.
 ./testdata/grepinputx-4-
 ./testdata/grepinputx:5:Pattern
+--
+./testdata/grepinputx-39-nineteen
+./testdata/grepinputx-40-twenty
+./testdata/grepinputx-41-
+./testdata/grepinputx:42:This line contains pattern not on a line by itself.
 ---------------------------- Test 31 -----------------------------
 ./testdata/grepinput:7:PATTERN at the start of a line.
 ./testdata/grepinput:8:In the middle of a line, PATTERN appears.
@@ -317,6 +329,9 @@ This is the last line of this file.
 ./testdata/grepinputx-6-That time it was on a line by itself.
 ./testdata/grepinputx-7-
 ./testdata/grepinputx-8-To pat or not to pat, that is the question.
+--
+./testdata/grepinputx:42:This line contains pattern not on a line by itself.
+./testdata/grepinputx-43-This is the last line of this file.
 ---------------------------- Test 32 -----------------------------
 ./testdata/grepinputx
 ---------------------------- Test 33 -----------------------------
@@ -336,11 +351,11 @@ aaaaa0
 aaaaa2
 RC=0
 ======== STDERR ========
-pcregrep: pcre_exec() error -8 while matching this line:
+pcregrep: pcre_exec() error -8 while matching this text:
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 pcregrep: error -8 means that a resource limit was exceeded
 pcregrep: check your regex for nested unlimited loops
-pcregrep: pcre_exec() error -8 while matching this line:
+pcregrep: pcre_exec() error -8 while matching this text:
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 ---------------------------- Test 38 ------------------------------
 This line contains a binary zero here > < for testing.
@@ -388,8 +403,10 @@ PUT NEW DATA ABOVE THIS LINE.
 ---------------------------- Test 49 ------------------------------
 ---------------------------- Test 50 ------------------------------
 over the lazy dog.
+This time it jumps and jumps and jumps.
 ---------------------------- Test 51 ------------------------------
 fox jumps
+This time it jumps and jumps and jumps.
 ---------------------------- Test 52 ------------------------------
 36972,6
 36990,4
@@ -402,3 +419,7 @@ fox jumps
 596:28,4
 597:15,5
 597:32,4
+---------------------------- Test 54 -----------------------------
+Here is the pattern again.
+That time it was on a line by itself.
+This line contains pattern not on a line by itself.
diff --git a/ext/pcre/pcrelib/testdata/testinput1 b/ext/pcre/pcrelib/testdata/testinput1
index 081575b..8b0caa4 100644
--- a/ext/pcre/pcrelib/testdata/testinput1
+++ b/ext/pcre/pcrelib/testdata/testinput1
@@ -4039,4 +4039,29 @@
 /.*[op][xyz]/
     fooabcfoo
 
+/(?(?=.*b)b|^)/
+   adc
+   abc 
+
+/(?(?=^.*b)b|^)/
+   adc
+   abc 
+
+/(?(?=.*b)b|^)*/
+   adc
+   abc 
+
+/(?(?=.*b)b|^)+/
+   adc
+   abc 
+
+/(?(?=b).*b|^d)/
+    abc
+
+/(?(?=.*b).*b|^d)/
+    abc
+
+/^%((?(?=[a])[^%])|b)*%$/
+    %ab%
+
 / End of testinput1 /
diff --git a/ext/pcre/pcrelib/testdata/testinput2 b/ext/pcre/pcrelib/testdata/testinput2
index 2b64546..beca157 100644
--- a/ext/pcre/pcrelib/testdata/testinput2
+++ b/ext/pcre/pcrelib/testdata/testinput2
@@ -2726,4 +2726,51 @@ a random value. /Ix
 
 /(abc|pqr|123){0}[xyz]/SI
 
+/(?(?=.*b)b|^)/CI
+   adc
+   abc 
+   
+/(?(?=b).*b|^d)/I
+
+/(?(?=.*b).*b|^d)/I
+
+/a?|b?/P
+    abc
+    ** Failers
+    ddd\N   
+
+/xyz/C
+  xyz 
+  abcxyz 
+  abcxyz\Y
+  ** Failers 
+  abc
+  abc\Y
+  abcxypqr  
+  abcxypqr\Y  
+
+/^"((?(?=[a])[^"])|b)*"$/C
+    "ab"
+
+/^"((?(?=[a])[^"])|b)*"$/
+    "ab"
+
+/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
+    XYabcdY
+
+/^X(?5)(a)(?|(b)|(q))(c)(d)Y/
+    XYabcdY
+
+/^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
+    XYabcdY
+ 
+/^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/
+    XYabcdY
+
+/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
+    XYabcdY
+
+/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
+    XYabcdY
+
 / End of testinput2 /
diff --git a/ext/pcre/pcrelib/testdata/testinput5 b/ext/pcre/pcrelib/testdata/testinput5
index 7d64b43..38e22b8 100644
--- a/ext/pcre/pcrelib/testdata/testinput5
+++ b/ext/pcre/pcrelib/testdata/testinput5
@@ -480,4 +480,9 @@ can't tell the difference.) --/
 /X/8f<any> 
     A\x{1ec5}ABCXYZ
 
+/(*UTF8)\x{1234}/
+  abcd\x{1234}pqr
+
+/(*CRLF)(*UTF8)(*BSR_UNICODE)a\Rb/I
+
 / End of testinput5 /
diff --git a/ext/pcre/pcrelib/testdata/testinput6 b/ext/pcre/pcrelib/testdata/testinput6
index a8640f9..628646d 100644
--- a/ext/pcre/pcrelib/testdata/testinput6
+++ b/ext/pcre/pcrelib/testdata/testinput6
@@ -942,5 +942,13 @@ was broken in all cases./
     \x{10a}\x{10b}
     \x{10b}\x{10b}
     \x{10b}\x{10a}
+    
+/The next two tests are for property support in non-UTF-8 mode/
+
+/(?:\p{Lu}|\x20)+/
+    \x41\x20\x50\xC2\x54\xC9\x20\x54\x4F\x44\x41\x59
+
+/[\p{Lu}\x20]+/
+    \x41\x20\x50\xC2\x54\xC9\x20\x54\x4F\x44\x41\x59
 
 / End of testinput6 /
diff --git a/ext/pcre/pcrelib/testdata/testinput7 b/ext/pcre/pcrelib/testdata/testinput7
index 5ec4827..047a975 100644
--- a/ext/pcre/pcrelib/testdata/testinput7
+++ b/ext/pcre/pcrelib/testdata/testinput7
@@ -2733,8 +2733,6 @@
     abc
     abq
 
-/ab{1,}bc/
-
 /ab+bc/
     abbbbc
 
@@ -4392,4 +4390,35 @@
     ** Failers
     ab  
 
+/X$/E
+    X
+    ** Failers 
+    X\n 
+
+/X$/
+    X
+    X\n 
+
+/xyz/C
+  xyz 
+  abcxyz 
+  abcxyz\Y
+  ** Failers 
+  abc
+  abc\Y
+  abcxypqr  
+  abcxypqr\Y  
+  
+/(?C)ab/
+  ab
+  \C-ab
+  
+/ab/C
+  ab
+  \C-ab    
+
+/^"((?(?=[a])[^"])|b)*"$/C
+    "ab"
+    \C-"ab"
+
 / End of testinput7 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput1 b/ext/pcre/pcrelib/testdata/testoutput1
index 208df49..81b0cb8 100644
--- a/ext/pcre/pcrelib/testdata/testoutput1
+++ b/ext/pcre/pcrelib/testdata/testoutput1
@@ -6609,4 +6609,41 @@ No match
     fooabcfoo
 No match
 
+/(?(?=.*b)b|^)/
+   adc
+ 0: 
+   abc 
+ 0: b
+
+/(?(?=^.*b)b|^)/
+   adc
+ 0: 
+   abc 
+No match
+
+/(?(?=.*b)b|^)*/
+   adc
+ 0: 
+   abc 
+ 0: 
+
+/(?(?=.*b)b|^)+/
+   adc
+ 0: 
+   abc 
+ 0: b
+
+/(?(?=b).*b|^d)/
+    abc
+ 0: b
+
+/(?(?=.*b).*b|^d)/
+    abc
+ 0: ab
+
+/^%((?(?=[a])[^%])|b)*%$/
+    %ab%
+ 0: %ab%
+ 1: 
+
 / End of testinput1 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput2 b/ext/pcre/pcrelib/testdata/testoutput2
index 2ac018b..420e75d 100644
--- a/ext/pcre/pcrelib/testdata/testoutput2
+++ b/ext/pcre/pcrelib/testdata/testoutput2
@@ -9638,4 +9638,206 @@ No first char
 No need char
 Starting byte set: x y z 
 
+/(?(?=.*b)b|^)/CI
+Capturing subpattern count = 0
+Partial matching not supported
+Options:
+No first char
+No need char
+   adc
+--->adc
+ +0 ^       (?(?=.*b)b|^)
+ +2 ^       (?=.*b)
+ +5 ^       .*
+ +7 ^  ^    b
+ +7 ^ ^     b
+ +7 ^^      b
+ +7 ^       b
++12 ^       )
++13 ^       
+ 0: 
+   abc 
+--->abc
+ +0 ^       (?(?=.*b)b|^)
+ +2 ^       (?=.*b)
+ +5 ^       .*
+ +7 ^  ^    b
+ +7 ^ ^     b
+ +7 ^^      b
+ +8 ^ ^     )
+ +9 ^       b
+ +0  ^      (?(?=.*b)b|^)
+ +2  ^      (?=.*b)
+ +5  ^      .*
+ +7  ^ ^    b
+ +7  ^^     b
+ +7  ^      b
+ +8  ^^     )
+ +9  ^      b
++10  ^^     |
++13  ^^     
+ 0: b
+   
+/(?(?=b).*b|^d)/I
+Capturing subpattern count = 0
+Partial matching not supported
+No options
+No first char
+No need char
+
+/(?(?=.*b).*b|^d)/I
+Capturing subpattern count = 0
+Partial matching not supported
+No options
+First char at start or follows newline
+No need char
+
+/a?|b?/P
+    abc
+ 0: a
+    ** Failers
+ 0: 
+    ddd\N   
+No match: POSIX code 17: match failed
+
+/xyz/C
+  xyz 
+--->xyz
+ +0 ^       x
+ +1 ^^      y
+ +2 ^ ^     z
+ +3 ^  ^    
+ 0: xyz
+  abcxyz 
+--->abcxyz
+ +0    ^       x
+ +1    ^^      y
+ +2    ^ ^     z
+ +3    ^  ^    
+ 0: xyz
+  abcxyz\Y
+--->abcxyz
+ +0 ^          x
+ +0  ^         x
+ +0   ^        x
+ +0    ^       x
+ +1    ^^      y
+ +2    ^ ^     z
+ +3    ^  ^    
+ 0: xyz
+  ** Failers 
+No match
+  abc
+No match
+  abc\Y
+--->abc
+ +0 ^       x
+ +0  ^      x
+ +0   ^     x
+ +0    ^    x
+No match
+  abcxypqr  
+No match
+  abcxypqr\Y  
+--->abcxypqr
+ +0 ^            x
+ +0  ^           x
+ +0   ^          x
+ +0    ^         x
+ +1    ^^        y
+ +2    ^ ^       z
+ +0     ^        x
+ +0      ^       x
+ +0       ^      x
+ +0        ^     x
+ +0         ^    x
+No match
+
+/^"((?(?=[a])[^"])|b)*"$/C
+    "ab"
+--->"ab"
+ +0 ^        ^
+ +1 ^        "
+ +2 ^^       ((?(?=[a])[^"])|b)*
+ +3 ^^       (?(?=[a])[^"])
+ +5 ^^       (?=[a])
+ +8 ^^       [a]
++11 ^ ^      )
++12 ^^       [^"]
++16 ^ ^      )
++17 ^ ^      |
+ +3 ^ ^      (?(?=[a])[^"])
+ +5 ^ ^      (?=[a])
+ +8 ^ ^      [a]
++21 ^ ^      "
++18 ^ ^      b
++19 ^  ^     )
+ +3 ^  ^     (?(?=[a])[^"])
+ +5 ^  ^     (?=[a])
+ +8 ^  ^     [a]
++21 ^  ^     "
++22 ^   ^    $
++23 ^   ^    
+ 0: "ab"
+ 1: 
+
+/^"((?(?=[a])[^"])|b)*"$/
+    "ab"
+ 0: "ab"
+ 1: 
+
+/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
+    XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: Y
+
+/^X(?5)(a)(?|(b)|(q))(c)(d)Y/
+Failed: reference to non-existent subpattern at offset 5
+
+/^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
+    XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: c
+ 4: d
+ 5: Y
+ 
+/^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/
+    XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: <unset>
+ 4: <unset>
+ 5: c
+ 6: d
+ 7: Y
+
+/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
+    XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: <unset>
+ 4: <unset>
+ 5: c
+ 6: d
+ 7: Y
+
+/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
+    XYabcdY
+ 0: XYabcdY
+ 1: a
+ 2: b
+ 3: <unset>
+ 4: <unset>
+ 5: c
+ 6: d
+ 7: Y
+
 / End of testinput2 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput5 b/ext/pcre/pcrelib/testdata/testoutput5
index 9567233..75630b4 100644
--- a/ext/pcre/pcrelib/testdata/testoutput5
+++ b/ext/pcre/pcrelib/testdata/testoutput5
@@ -1641,4 +1641,15 @@ No match
     A\x{1ec5}ABCXYZ
  0: X
 
+/(*UTF8)\x{1234}/
+  abcd\x{1234}pqr
+ 0: \x{1234}
+
+/(*CRLF)(*UTF8)(*BSR_UNICODE)a\Rb/I
+Capturing subpattern count = 0
+Options: bsr_unicode utf8
+Forced newline sequence: CRLF
+First char = 'a'
+Need char = 'b'
+
 / End of testinput5 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput6 b/ext/pcre/pcrelib/testdata/testoutput6
index caba466..cb6f7d5 100644
--- a/ext/pcre/pcrelib/testdata/testoutput6
+++ b/ext/pcre/pcrelib/testdata/testoutput6
@@ -1746,5 +1746,15 @@ No match
     \x{10b}\x{10a}
  0: \x{10b}\x{10a}
  1: \x{10b}
+    
+/The next two tests are for property support in non-UTF-8 mode/
+
+/(?:\p{Lu}|\x20)+/
+    \x41\x20\x50\xC2\x54\xC9\x20\x54\x4F\x44\x41\x59
+ 0: A P\xc2T\xc9 TODAY
+
+/[\p{Lu}\x20]+/
+    \x41\x20\x50\xC2\x54\xC9\x20\x54\x4F\x44\x41\x59
+ 0: A P\xc2T\xc9 TODAY
 
 / End of testinput6 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput7 b/ext/pcre/pcrelib/testdata/testoutput7
index aef4b6c..78c8923 100644
--- a/ext/pcre/pcrelib/testdata/testoutput7
+++ b/ext/pcre/pcrelib/testdata/testoutput7
@@ -4573,8 +4573,6 @@ No match
     abq
 No match
 
-/ab{1,}bc/
-
 /ab+bc/
     abbbbc
  0: abbbbc
@@ -7254,4 +7252,122 @@ No match
     ab  
 No match
 
+/X$/E
+    X
+ 0: X
+    ** Failers 
+No match
+    X\n 
+No match
+
+/X$/
+    X
+ 0: X
+    X\n 
+ 0: X
+
+/xyz/C
+  xyz 
+--->xyz
+ +0 ^       x
+ +1 ^^      y
+ +2 ^ ^     z
+ +3 ^  ^    
+ 0: xyz
+  abcxyz 
+--->abcxyz
+ +0    ^       x
+ +1    ^^      y
+ +2    ^ ^     z
+ +3    ^  ^    
+ 0: xyz
+  abcxyz\Y
+--->abcxyz
+ +0 ^          x
+ +0  ^         x
+ +0   ^        x
+ +0    ^       x
+ +1    ^^      y
+ +2    ^ ^     z
+ +3    ^  ^    
+ 0: xyz
+  ** Failers 
+No match
+  abc
+No match
+  abc\Y
+--->abc
+ +0 ^       x
+ +0  ^      x
+ +0   ^     x
+ +0    ^    x
+No match
+  abcxypqr  
+No match
+  abcxypqr\Y  
+--->abcxypqr
+ +0 ^            x
+ +0  ^           x
+ +0   ^          x
+ +0    ^         x
+ +1    ^^        y
+ +2    ^ ^       z
+ +0     ^        x
+ +0      ^       x
+ +0       ^      x
+ +0        ^     x
+ +0         ^    x
+No match
+  
+/(?C)ab/
+  ab
+--->ab
+  0 ^      a
+ 0: ab
+  \C-ab
+ 0: ab
+  
+/ab/C
+  ab
+--->ab
+ +0 ^      a
+ +1 ^^     b
+ +2 ^ ^    
+ 0: ab
+  \C-ab    
+ 0: ab
+
+/^"((?(?=[a])[^"])|b)*"$/C
+    "ab"
+--->"ab"
+ +0 ^        ^
+ +1 ^        "
+ +2 ^^       ((?(?=[a])[^"])|b)*
++21 ^^       "
+ +3 ^^       (?(?=[a])[^"])
++18 ^^       b
+ +5 ^^       (?=[a])
+ +8  ^       [a]
++11  ^^      )
++12 ^^       [^"]
++16 ^ ^      )
++17 ^ ^      |
++21 ^ ^      "
+ +3 ^ ^      (?(?=[a])[^"])
++18 ^ ^      b
+ +5 ^ ^      (?=[a])
+ +8   ^      [a]
++19 ^  ^     )
++21 ^  ^     "
+ +3 ^  ^     (?(?=[a])[^"])
++18 ^  ^     b
+ +5 ^  ^     (?=[a])
+ +8    ^     [a]
++17 ^  ^     |
++22 ^   ^    $
++23 ^   ^    
+ 0: "ab"
+    \C-"ab"
+ 0: "ab"
+
 / End of testinput7 /
diff --git a/ext/pcre/pcrelib/ucp.h b/ext/pcre/pcrelib/ucp.h
index 1968e47..ef62e40 100644
--- a/ext/pcre/pcrelib/ucp.h
+++ b/ext/pcre/pcrelib/ucp.h
@@ -6,9 +6,8 @@
 #define _UCP_H
 
 /* This file contains definitions of the property values that are returned by
-the function _pcre_ucp_findprop(). New values that are added for new releases
-of Unicode should always be at the end of each enum, for backwards
-compatibility. */
+the UCD access macros. New values that are added for new releases of Unicode
+should always be at the end of each enum, for backwards compatibility. */
 
 /* These are the general character categories. */
 
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index 19bd50b..e8da13e 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_pcre.c,v 1.168.2.9.2.30 2009/01/13 19:23:31 andrei Exp $ */
+/* $Id: php_pcre.c,v 1.168.2.9.2.32 2009/06/08 21:52:08 scottmac Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -209,7 +209,7 @@ static char **make_subpats_table(int num_subpats, pcre_cache_entry *pce TSRMLS_D
 		}
 
 		while (ni++ < name_cnt) {
-			name_idx = 0xff * name_table[0] + name_table[1];
+			name_idx = 0xff * (unsigned char)name_table[0] + (unsigned char)name_table[1];
 			subpat_names[name_idx] = name_table + 2;
 			if (is_numeric_string(subpat_names[name_idx], strlen(subpat_names[name_idx]), NULL, NULL, 0) > 0) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Numeric named subpatterns are not allowed");
@@ -842,8 +842,8 @@ static int preg_do_repl_func(zval *function, char *subject, int *offsets, char *
 		result_len = offsets[1] - offsets[0];
 		*result = estrndup(&subject[offsets[0]], result_len);
 	}
-	zval_dtor(subpats);
-	FREE_ZVAL(subpats);
+
+	zval_ptr_dtor(&subpats);
 
 	return result_len;
 }
diff --git a/ext/pcre/tests/bug47662.phpt b/ext/pcre/tests/bug47662.phpt
new file mode 100644
index 0000000..d605674
--- /dev/null
+++ b/ext/pcre/tests/bug47662.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #47662 (support more than 127 named subpatterns)
+--FILE--
+<?php
+
+$regex = '@';
+for($bar=0; $bar<1027; $bar++) {
+	$regex .= '((?P<x'.$bar.'>))';
+}
+$regex .= 'fo+bar@';
+
+var_dump(preg_match($regex, 'foobar'));
+echo "Done!\n";
+
+?>
+--EXPECT--
+int(1)
+Done!
diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c
index cb7118a..647ab04 100755
--- a/ext/pdo/pdo.c
+++ b/ext/pdo/pdo.c
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo.c,v 1.57.2.17.2.11 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: pdo.c,v 1.57.2.17.2.13 2009/05/02 15:58:39 iliaa Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -102,7 +102,11 @@ PHP_FUNCTION(pdo_drivers)
 {
 	HashPosition pos;
 	pdo_driver_t **pdriver;
-	
+
+	if (ZEND_NUM_ARGS()) {
+		WRONG_PARAM_COUNT;
+	}
+
 	array_init(return_value);
 
 	zend_hash_internal_pointer_reset_ex(&pdo_driver_hash, &pos);
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index 927d9fe..ed94694 100755
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dbh.c,v 1.82.2.31.2.25 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: pdo_dbh.c,v 1.82.2.31.2.28 2009/05/02 15:58:39 iliaa Exp $ */
 
 /* The PDO Database Handle Class */
 
@@ -1127,7 +1127,7 @@ static PHP_METHOD(PDO, __sleep)
 }
 /* }}} */
 
-/* {{{ proto array pdo_drivers()
+/* {{{ proto array PDO::getAvailableDrivers()
    Return array of available PDO drivers */
 static PHP_METHOD(PDO, getAvailableDrivers)
 {
@@ -1137,7 +1137,7 @@ static PHP_METHOD(PDO, getAvailableDrivers)
 	if (ZEND_NUM_ARGS()) {
 		WRONG_PARAM_COUNT;
 	}
-	
+
 	array_init(return_value);
 
 	zend_hash_internal_pointer_reset_ex(&pdo_driver_hash, &pos);
@@ -1277,7 +1277,7 @@ static union _zend_function *dbh_method_get(
 	lc_method_name = emalloc(method_len + 1);
 	zend_str_tolower_copy(lc_method_name, method_name, method_len);
 
-	if (zend_hash_find(&dbh->ce->function_table, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
+	if ((fbc = std_object_handlers.get_method(object_pp, lc_method_name, method_len TSRMLS_CC)) == NULL) {
 		/* not a pre-defined method, nor a user-defined method; check
 		 * the driver specific methods */
 		if (!dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH]) {
@@ -1290,23 +1290,14 @@ static union _zend_function *dbh_method_get(
 
 		if (zend_hash_find(dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH],
 				lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
-
 			if (!fbc) {
 				fbc = NULL;
 			}
-
-			goto out;
 		}
 		/* got it */
 	}
 
 out:
-	if (!fbc) {
-		if (std_object_handlers.get_method) {
-			fbc = std_object_handlers.get_method(object_pp, lc_method_name, method_len TSRMLS_CC);
-		}
-	}
-
 	efree(lc_method_name);
 	return fbc;
 }
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index 1b6ff26..406556f 100755
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_stmt.c,v 1.118.2.38.2.46 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.38.2.47 2009/03/12 16:13:39 andrei Exp $ */
 
 /* The PDO Statement Handle Class */
 
@@ -2717,7 +2717,7 @@ static union _zend_function *row_get_ctor(zval *object TSRMLS_DC)
 
 static zend_class_entry *row_get_ce(zval *object TSRMLS_DC)
 {
-	return pdo_dbstmt_ce;
+	return pdo_row_ce;
 }
 
 static int row_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
diff --git a/ext/pdo/tests/bug47769.phpt b/ext/pdo/tests/bug47769.phpt
new file mode 100644
index 0000000..a6fafcd
--- /dev/null
+++ b/ext/pdo/tests/bug47769.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #47769 (Strange extends PDO)
+--FILE--
+<?php
+
+class test extends PDO
+{
+	protected function isProtected() {
+		echo "this is a protected method.\n";
+	}
+	private function isPrivate() {
+		echo "this is a private method.\n";
+	}
+    
+    public function quote($str, $paramtype = NULL) {
+    	$this->isProtected();
+    	$this->isPrivate();
+    	print $str ."\n";
+	}
+}
+
+$test = new test('sqlite::memory:');
+$test->quote('foo');
+$test->isProtected();
+
+?>
+--EXPECTF--
+this is a protected method.
+this is a private method.
+foo
+
+Fatal error: Call to protected method test::isprotected() from context '' in %s on line %d
diff --git a/ext/pdo_dblib/config.w32 b/ext/pdo_dblib/config.w32
index c853e63..81931f4 100755
--- a/ext/pdo_dblib/config.w32
+++ b/ext/pdo_dblib/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32,v 1.7.4.1 2006/05/11 21:43:58 edink Exp $
+// $Id: config.w32,v 1.7.4.2 2009/05/19 10:22:31 kalle Exp $
 // vim:ft=javascript
 
 ARG_WITH("pdo-dblib", "freetds dblib (Sybase, MS-SQL) support for PDO", "no");
@@ -13,8 +13,10 @@ if (PHP_PDO_DBLIB != "no") {
 	{
 		EXTENSION("pdo_dblib", "pdo_dblib.c dblib_driver.c dblib_stmt.c");
 		ADD_FLAG('CFLAGS_PDO_DBLIB', "/D PDO_DBLIB_FLAVOUR=\\\"freetds\\\"");
+		ADD_EXTENSION_DEP('pdo_dblib', 'pdo');
+	} else {
+		WARNING("pdo_dblib not enabled, libraries or headers not found")
 	}
-	ADD_EXTENSION_DEP('pdo_dblib', 'pdo');
 }
 
 ARG_WITH("pdo-mssql", "Native MS-SQL support for PDO", "no");
@@ -64,6 +66,8 @@ if (PHP_PDO_MSSQL != "no") {
 			PDO_DBLIB_FLAVOUR = "MSSQL_" + PDO_DBLIB_FLAVOUR;
 		}
 		ADD_FLAG('CFLAGS_PDO_MSSQL', "/D PDO_DBLIB_FLAVOUR=\\\"" + PDO_DBLIB_FLAVOUR + "\\\"");
+		ADD_EXTENSION_DEP('pdo_mssql', 'pdo');
+	} else {
+		WARNING("pdo_mssql not enabled, libraries or headers not found")
 	}
-	ADD_EXTENSION_DEP('pdo_mssql', 'pdo');
 }
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 35a0e8a..f93d7d4 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dblib_driver.c,v 1.9.2.2.2.4 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: dblib_driver.c,v 1.9.2.2.2.5 2009/03/20 22:14:17 sfox Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -229,7 +229,11 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
 	if (H->link == NULL) {
 		goto cleanup;
 	}
-	
+
+	if (DBSETOPT(H->link, DBTEXTLIMIT, "2147483647") == FAIL) {
+		goto cleanup;
+	}
+
 	if (vars[3].optval && FAIL == dbuse(H->link, vars[3].optval)) {
 		goto cleanup;
 	}
diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c
index 1846ecf..5d58d06 100644
--- a/ext/pdo_dblib/dblib_stmt.c
+++ b/ext/pdo_dblib/dblib_stmt.c
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dblib_stmt.c,v 1.6.2.2.2.6 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: dblib_stmt.c,v 1.6.2.2.2.7 2009/03/20 22:14:17 sfox Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -113,18 +113,27 @@ static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
 		stmt->column_count = S->ncols;
 	
 		for (i = 0, j = 0; i < S->ncols; i++) {
+			char *tmp = NULL;
+
 			S->cols[i].coltype = dbcoltype(H->link, i+1);
-			S->cols[i].name = dbcolname(H->link, i+1);
-			if (S->cols[i].name) {
-				S->cols[i].name = estrdup(S->cols[i].name);
-			} else if (j) {
-				spprintf(&S->cols[i].name, 0, "computed%d", j++);
-			} else {
-				S->cols[i].name = estrdup("computed");
-				j++;
+			S->cols[i].name = (char*)dbcolname(H->link, i+1);
+
+			if (!strlen(S->cols[i].name)) {
+				if (j) {
+					spprintf(&tmp, 0, "computed%d", j++);
+					strlcpy(S->cols[i].name, tmp, strlen(tmp)+1);
+					efree(tmp);
+				} else {
+					S->cols[i].name = "computed";
+					j++;
+				}
 			}
-			S->cols[i].source = dbcolsource(H->link, i+1);
-			S->cols[i].source = estrdup(S->cols[i].source ? S->cols[i].source : "");
+
+			S->cols[i].source = (char*)dbcolsource(H->link, i+1);
+			tmp = estrdup(S->cols[i].source ? S->cols[i].source : "");
+			S->cols[i].source = tmp;
+			efree(tmp);
+
 			S->cols[i].maxlen = dbcollen(H->link, i+1);
 		}
 	}
diff --git a/ext/pdo_dblib/pdo_dblib.c b/ext/pdo_dblib/pdo_dblib.c
index 36f33e3..000ef89 100644
--- a/ext/pdo_dblib/pdo_dblib.c
+++ b/ext/pdo_dblib/pdo_dblib.c
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dblib.c,v 1.9.2.6.2.5 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: pdo_dblib.c,v 1.9.2.6.2.7 2009/05/20 10:19:28 kalle Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -46,7 +46,11 @@ static zend_module_dep pdo_dblib_deps[] = {
 };
 #endif
 
+#if PDO_DBLIB_IS_MSSQL
+zend_module_entry pdo_mssql_module_entry = {
+#else
 zend_module_entry pdo_dblib_module_entry = {
+#endif
 #if ZEND_MODULE_API_NO >= 20050922
 	STANDARD_MODULE_HEADER_EX, NULL,
 	pdo_dblib_deps,
@@ -75,8 +79,12 @@ zend_module_entry pdo_dblib_module_entry = {
 };
 
 #if defined(COMPILE_DL_PDO_DBLIB) || defined(COMPILE_DL_PDO_MSSQL)
+#if PDO_DBLIB_IS_MSSQL
+ZEND_GET_MODULE(pdo_mssql)
+#else
 ZEND_GET_MODULE(pdo_dblib)
 #endif
+#endif
 
 int error_handler(DBPROCESS *dbproc, int severity, int dberr,
 	int oserr, char *dberrstr, char *oserrstr)
diff --git a/ext/pdo_dblib/php_pdo_dblib.h b/ext/pdo_dblib/php_pdo_dblib.h
index 174cb94..7218f6f 100644
--- a/ext/pdo_dblib/php_pdo_dblib.h
+++ b/ext/pdo_dblib/php_pdo_dblib.h
@@ -17,14 +17,18 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdo_dblib.h,v 1.2.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: php_pdo_dblib.h,v 1.2.2.1.2.4 2009/05/19 10:22:31 kalle Exp $ */
 
 #ifndef PHP_PDO_DBLIB_H
 #define PHP_PDO_DBLIB_H
 
-
+#if PDO_DBLIB_IS_MSSQL
+extern zend_module_entry pdo_mssql_module_entry;
+#define phpext_pdo_mssql_ptr &pdo_mssql_module_entry
+#else
 extern zend_module_entry pdo_dblib_module_entry;
 #define phpext_pdo_dblib_ptr &pdo_dblib_module_entry
+#endif
 
 #ifdef PHP_WIN32
 # define PHP_PDO_DBLIB_API __declspec(dllexport)
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
index 954b2a0..66b982e 100644
--- a/ext/pdo_firebird/firebird_driver.c
+++ b/ext/pdo_firebird/firebird_driver.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: firebird_driver.c,v 1.17.2.2.2.6 2008/12/31 11:17:41 sebastian Exp $ */
+/* $Id: firebird_driver.c,v 1.17.2.2.2.8 2009/04/18 18:56:58 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -25,6 +25,9 @@
 #define _GNU_SOURCE
 
 #include "php.h"
+#ifdef ZEND_ENGINE_2
+# include "zend_exceptions.h"
+#endif
 #include "php_ini.h"
 #include "ext/standard/info.h"
 #include "pdo/php_pdo.h"
diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c
index aa1b35c..2bd2d9e 100644
--- a/ext/pdo_firebird/firebird_statement.c
+++ b/ext/pdo_firebird/firebird_statement.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: firebird_statement.c,v 1.18.2.1.2.8 2009/02/09 12:07:35 felipe Exp $ */
+/* $Id: firebird_statement.c,v 1.18.2.1.2.9 2009/04/03 22:14:05 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -170,6 +170,7 @@ static int firebird_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) /* {{{
 	col->maxlen = var->sqllen;
 	col->namelen = var->aliasname_length;
 	col->name = estrndup(var->aliasname,var->aliasname_length);
+	col->param_type = PDO_PARAM_STR;
 	
 	return 1;
 }
@@ -301,11 +302,7 @@ static int firebird_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr,  /* {{
 		/* A NULL value */
 		*ptr = NULL;
 		*len = 0;
-	} else {
-		/* override the column param type */
-		/* set_param_type(&stmt->columns[colno].param_type,var); */
-		stmt->columns[colno].param_type = PDO_PARAM_STR;
-		
+	} else {		
 		if (var->sqlscale < 0) {
 			static ISC_INT64 const scales[] = { 1, 10, 100, 1000, 10000, 100000, 1000000,
 				100000000, 1000000000, 1000000000, LL_LIT(10000000000),LL_LIT(100000000000),
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index a91fcaf..c19f266 100755
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: oci_driver.c,v 1.24.2.4.2.11 2008/12/31 11:17:42 sebastian Exp $ */
+/* $Id: oci_driver.c,v 1.24.2.4.2.12 2009/05/12 21:57:40 mbeccati Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -70,15 +70,13 @@ ub4 _oci_error(OCIError *err, pdo_dbh_t *dbh, pdo_stmt_t *stmt, char *what, swor
 		S = (pdo_oci_stmt*)stmt->driver_data;
 		einfo = &S->einfo;
 		pdo_err = &stmt->error_code;
-		if (einfo->errmsg) {
-			efree(einfo->errmsg);
-		}
 	}
 	else {
 		einfo = &H->einfo;
-		if (einfo->errmsg) {
-			pefree(einfo->errmsg, dbh->is_persistent);
-		}
+	}
+
+	if (einfo->errmsg) {
+		pefree(einfo->errmsg, dbh->is_persistent);
 	}
 
 	einfo->errmsg = NULL;
diff --git a/ext/pdo_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c
index e5fc91b..a32b7f4 100755
--- a/ext/pdo_oci/oci_statement.c
+++ b/ext/pdo_oci/oci_statement.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: oci_statement.c,v 1.16.2.10.2.9 2008/12/31 11:17:42 sebastian Exp $ */
+/* $Id: oci_statement.c,v 1.16.2.10.2.10 2009/05/12 21:57:41 mbeccati Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -87,7 +87,7 @@ static int oci_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
 	}
 
 	if (S->einfo.errmsg) {
-		efree(S->einfo.errmsg);
+		pefree(S->einfo.errmsg, stmt->dbh->is_persistent);
 		S->einfo.errmsg = NULL;
 	}
 
diff --git a/ext/pdo_oci/tests/bug44301.phpt b/ext/pdo_oci/tests/bug44301.phpt
new file mode 100644
index 0000000..c0f7935
--- /dev/null
+++ b/ext/pdo_oci/tests/bug44301.phpt
@@ -0,0 +1,25 @@
+--TEST--
+PDO OCI Bug #44301 (Segfault when an exception is thrown on persistent connections)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require dirname(__FILE__).'/../../pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+putenv("PDO_OCI_TEST_ATTR=" . serialize(array(PDO::ATTR_PERSISTENT => true)));
+require 'ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory('ext/pdo_oci/tests/common.phpt');
+$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+
+try {
+    $stmt = $db->prepare('SELECT * FROM no_table');
+    $stmt->execute();
+} catch (PDOException $e) {
+    print $e->getMessage();
+}
+$db = null;
+--EXPECTF--
+SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view does not exist
+ (%s/ext/pdo_oci/oci_statement.c:%d)
diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c
index 1842ad5..cc80ab9 100644
--- a/ext/pdo_pgsql/pgsql_statement.c
+++ b/ext/pdo_pgsql/pgsql_statement.c
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pgsql_statement.c,v 1.31.2.12.2.14 2008/12/31 11:17:42 sebastian Exp $ */
+/* $Id: pgsql_statement.c,v 1.31.2.12.2.15 2009/05/25 19:41:41 kalle Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -152,7 +152,7 @@ stmt_retry:
 					char *sqlstate = pdo_pgsql_sqlstate(S->result);
 					/* 42P05 means that the prepared statement already existed. this can happen if you use 
 					 * a connection pooling software line pgpool which doesn't close the db-connection once 
-					 * php disconnects. if php dies (no chanche to run RSHUTDOWN) during execution it has no 
+					 * php disconnects. if php dies (no chance to run RSHUTDOWN) during execution it has no 
 					 * chance to DEALLOCATE the prepared statements it has created. so, if we hit a 42P05 we 
 					 * deallocate it and retry ONCE (thies 2005.12.15)
 					 */
diff --git a/ext/pdo_sqlite/sqlite/src/keywordhash.h b/ext/pdo_sqlite/sqlite/src/keywordhash.h
index 87111ce..a8072a1 100644
--- a/ext/pdo_sqlite/sqlite/src/keywordhash.h
+++ b/ext/pdo_sqlite/sqlite/src/keywordhash.h
@@ -2,7 +2,7 @@
 **
 ** The code in this file has been automatically generated by
 **
-**     $Header: /repository/php-src/ext/pdo_sqlite/sqlite/src/Attic/keywordhash.h,v 1.2.2.1.2.4 2007/05/16 21:04:46 iliaa Exp $
+**     $Header: /repository/php-src/ext/pdo_sqlite/sqlite/src/Attic/keywordhash.h,v 1.2.2.1.2.5 2009/04/27 19:54:34 felipe Exp $
 **
 ** The code in this file implements a function that determines whether
 ** or not a given identifier is really an SQL keyword.  The same thing
diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c
index b096fcb..e4dd49b 100644
--- a/ext/pdo_sqlite/sqlite_statement.c
+++ b/ext/pdo_sqlite/sqlite_statement.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite_statement.c,v 1.18.2.4.2.5 2008/12/31 11:17:42 sebastian Exp $ */
+/* $Id: sqlite_statement.c,v 1.18.2.4.2.8 2009/05/20 15:03:16 iliaa Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -231,16 +231,6 @@ static int pdo_sqlite_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsi
 			*len = sqlite3_column_bytes(S->stmt, colno);
 			return 1;
 
-		case SQLITE3_TEXT:
-			*ptr = (char*)sqlite3_column_text(S->stmt, colno);
-			*len = sqlite3_column_bytes(S->stmt, colno);
-			if (*len) {
-				/* sqlite3.h says "the NUL terminator is included in the byte count
-				 * for TEXT values" */
-				*len--;
-			}
-			return 1;
-		
 		default:
 			*ptr = (char*)sqlite3_column_text(S->stmt, colno);
 			*len = sqlite3_column_bytes(S->stmt, colno);
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt
index 8661e36..f5341d0 100644
--- a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt
@@ -1,5 +1,7 @@
 --TEST--
 PDO_sqlite: Testing sqliteCreateAggregate()
+--SKIPIF--
+<?php if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; ?>
 --FILE--
 <?php
 
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt
index 74a79fa..da92f87 100644
--- a/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt
@@ -1,5 +1,7 @@
 --TEST--
 PDO_sqlite: Testing sqliteCreateFunction()
+--SKIPIF--
+<?php if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; ?>
 --FILE--
 <?php
 
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt
index d930e7f..ebddf8d 100644
--- a/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt
@@ -1,5 +1,7 @@
 --TEST--
 PDO_sqlite: Testing lastInsertId()
+--SKIPIF--
+<?php if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; ?>
 --FILE--
 <?php
 
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt
index 75f4169..23c1493 100644
--- a/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt
@@ -1,5 +1,7 @@
 --TEST--
 PDO_sqlite: Testing transaction
+--SKIPIF--
+<?php if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; ?>
 --FILE--
 <?php
 
diff --git a/ext/pgsql/config.w32 b/ext/pgsql/config.w32
index 87ef7c9..9b17148 100644
--- a/ext/pgsql/config.w32
+++ b/ext/pgsql/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32,v 1.7.4.5 2007/02/19 17:26:15 edink Exp $
+// $Id: config.w32,v 1.7.4.6 2009/05/11 10:44:25 pajoye Exp $
 // vim:ft=javascript
 
 ARG_WITH("pgsql", "PostgreSQL support", "no");
@@ -8,7 +8,7 @@ if (PHP_PGSQL != "no") {
 		CHECK_HEADER_ADD_INCLUDE("libpq-fe.h", "CFLAGS_PGSQL", PHP_PGSQL + "\\include;" + PHP_PHP_BUILD + "\\include\\pgsql;" + PHP_PGSQL)) {
 		EXTENSION("pgsql", "pgsql.c");
 		AC_DEFINE('HAVE_PGSQL', 1, 'Have PostgreSQL library');
-		ADD_FLAG("CFLAGS_PGSQL", "/D HAVE_PG_CONFIG_H /D PGSQL_EXPORTS /D HAVE_PQSETNONBLOCKING /D HAVE_PQCMDTUPLES /D HAVE_PQCLIENTENCODING /D HAVE_PQESCAPE /D HAVE_PQPARAMETERSTATUS /D HAVE_PGTRANSACTIONSTATUS /D HAVE_PQEXECPARAMS /D HAVE_PQPREPARE /D HAVE_PQEXECPREPARED /D HAVE_PQRESULTERRORFIELD /D HAVE_PQSENDQUERYPARAMS /D HAVE_PQSENDPREPARE /D HAVE_PQSENDQUERYPREPARED /D HAVE_PQPUTCOPYDATA /D HAVE_PQPUTCOPYEND /D HAVE_PQGETCOPYDATA /D HAVE_PQSETERRORVERBOSITY /D HAVE_PQUNESCAPEBYTEA /D HAVE_PQFTABLE /D HAVE_PQESCAPE_CONN /D HAVE_PQESCAPE_BYTEA_CONN /D HAVE_PQFREEMEM /D HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT");
+		ADD_FLAG("CFLAGS_PGSQL", "/D HAVE_PG_CONFIG_H /D PGSQL_EXPORTS /D HAVE_PQSETNONBLOCKING /D HAVE_PQCMDTUPLES /D HAVE_PQCLIENTENCODING /D HAVE_PQESCAPE /D HAVE_PQPARAMETERSTATUS /D HAVE_PGTRANSACTIONSTATUS /D HAVE_PQEXECPARAMS /D HAVE_PQPREPARE /D HAVE_PQEXECPREPARED /D HAVE_PQRESULTERRORFIELD /D HAVE_PQSENDQUERYPARAMS /D HAVE_PQSENDPREPARE /D HAVE_PQSENDQUERYPREPARED /D HAVE_PQPUTCOPYDATA /D HAVE_PQPUTCOPYEND /D HAVE_PQGETCOPYDATA /D HAVE_PQSETERRORVERBOSITY /D HAVE_PQUNESCAPEBYTEA /D HAVE_PQFTABLE /D HAVE_PQESCAPE_CONN /D HAVE_PQESCAPE_BYTEA_CONN /D HAVE_PQFREEMEM /D HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT /D HAVE_PQPROTOCOLVERSION ");
 	} else {
 		WARNING("pgsql not enabled; libraries and headers not found");
 	}
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 05493d8..51c7ade 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: pgsql.c,v 1.331.2.13.2.36 2009/01/27 14:44:07 felipe Exp $ */
+/* $Id: pgsql.c,v 1.331.2.13.2.37 2009/03/12 22:54:15 iliaa Exp $ */
 
 #include <stdlib.h>
 
@@ -3469,7 +3469,7 @@ PHP_FUNCTION(pg_copy_from)
 
 	ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
 
-	spprintf(&query, 0, "COPY \"%s\" FROM STDIN DELIMITERS '%c' WITH NULL AS '%s'", table_name, *pg_delim, pg_null_as);
+	spprintf(&query, 0, "COPY \"%s\" FROM STDIN DELIMITERS E'%c' WITH NULL AS E'%s'", table_name, *pg_delim, pg_null_as);
 	while ((pgsql_result = PQgetResult(pgsql))) {
 		PQclear(pgsql_result);
 	}
diff --git a/ext/pgsql/tests/80_bug14383.phpt b/ext/pgsql/tests/80_bug14383.phpt
index 40bd915..a736f34 100644
--- a/ext/pgsql/tests/80_bug14383.phpt
+++ b/ext/pgsql/tests/80_bug14383.phpt
@@ -35,3 +35,18 @@ array(3) {
   ["key5"]=>
   string(23) "The last content string"
 }
+--NO-LOCK--
+3NYNYY
+Content String 2
+Content 2 replaced
+Read during write: not allowed
+Content 2 replaced 2nd time
+The 6th value
+array(3) {
+  ["key number 6"]=>
+  string(13) "The 6th value"
+  ["key2"]=>
+  string(27) "Content 2 replaced 2nd time"
+  ["key5"]=>
+  string(23) "The last content string"
+}
diff --git a/ext/posix/tests/posix_access.phpt b/ext/posix/tests/posix_access.phpt
new file mode 100644
index 0000000..7082924
--- /dev/null
+++ b/ext/posix/tests/posix_access.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test posix_access() function test
+--DESCRIPTION--
+checks for existence, read-access, write-access, execute-access
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+
+if (posix_geteuid() == 0) {
+    die('SKIP Cannot run test as root.');
+}
+?>
+--INI--
+safe_mode = 1
+--FILE--
+<?php
+$filename = dirname(__FILE__) . '/foo.test';
+$fp = fopen($filename,"w");
+fwrite($fp,"foo");
+fclose($fp);
+
+chmod ($filename, 0000);
+var_dump(posix_access($filename, POSIX_F_OK));
+
+chmod ($filename, 0400);
+var_dump(posix_access($filename, POSIX_R_OK));
+
+chmod ($filename, 0600);
+var_dump(posix_access($filename, POSIX_W_OK));
+
+chmod ($filename, 0700);
+var_dump(posix_access($filename, POSIX_X_OK));
+?>
+===DONE===
+--CLEAN--
+<?php
+$filename = dirname(__FILE__) . '/foo.test';
+chmod ($filename, 0700);
+unlink($filename);
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+===DONE===
diff --git a/ext/posix/tests/posix_access_error_modes.phpt b/ext/posix/tests/posix_access_error_modes.phpt
new file mode 100644
index 0000000..6e0d5dc
--- /dev/null
+++ b/ext/posix/tests/posix_access_error_modes.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test posix_access() function test error conditions
+--DESCRIPTION--
+checks if posix_access() failes for wrong permissions
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+if (posix_geteuid() == 0) {
+    die('SKIP Cannot run test as root.');
+}
+?>
+--INI--
+safe_mode = 1
+--FILE--
+<?php
+$filename = dirname(__FILE__) . '/foo.test';
+var_dump(posix_access($filename, POSIX_F_OK));
+$fp = fopen($filename,"w");
+fwrite($fp,"foo");
+fclose($fp);
+
+chmod ($filename, 0000);
+var_dump(posix_access($filename, POSIX_R_OK));
+var_dump(posix_access($filename, POSIX_W_OK));
+var_dump(posix_access($filename, POSIX_X_OK));
+?>
+===DONE===
+--CLEAN--
+<?php
+$filename = dirname(__FILE__) . '/foo.test';
+chmod ($filename, 0700);
+unlink($filename);
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_access_error_wrongparams.phpt b/ext/posix/tests/posix_access_error_wrongparams.phpt
new file mode 100644
index 0000000..56a2a65
--- /dev/null
+++ b/ext/posix/tests/posix_access_error_wrongparams.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test posix_access() function : parameter validation 
+--DESCRIPTION--
+cases: no params, wrong param1, wrong param2, null directory, wrong directory,
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+if (posix_geteuid() == 0) {
+    die('SKIP Cannot run test as root.');
+}
+?>
+--INI--
+safe_mode = 1
+--FILE--
+<?php
+
+var_dump( posix_access() );
+var_dump( posix_access(array()) );
+var_dump( posix_access('foo',array()) );
+var_dump( posix_access(null) );
+
+var_dump(posix_access('./foobar'));
+?>
+===DONE===
+--EXPECTF--
+
+Warning: posix_access() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+Warning: posix_access() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: posix_access() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_access_safemode.phpt b/ext/posix/tests/posix_access_safemode.phpt
new file mode 100644
index 0000000..51baf18
--- /dev/null
+++ b/ext/posix/tests/posix_access_safemode.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test posix_access() with safe_mode enabled.
+--CREDITS--
+Till Klampaeckel, till at php.net
+TestFest Berlin 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+if (posix_geteuid() == 0) {
+    die('SKIP Cannot run test as root.');
+}
+--INI--
+safe_mode = 1
+--FILE--
+<?php
+var_dump(posix_access('/tmp', POSIX_W_OK));
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_ctermid.phpt b/ext/posix/tests/posix_ctermid.phpt
new file mode 100644
index 0000000..f77da00
--- /dev/null
+++ b/ext/posix/tests/posix_ctermid.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test posix_ctermid()
+--DESCRIPTION--
+Gets path name of controlling terminal.
+Source code: ext/posix/posix.c
+--CREDITS--
+Falko Menge, mail at falko-menge dot de
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) { 
+        die('SKIP - POSIX extension not available');
+    }
+    // needed because of #ifdef HAVE_CTERMID in posix.c
+    if (!function_exists('posix_ctermid')) { 
+        die('SKIP - Fuction posix_ctermid() not available');
+    }
+?>
+--FILE--
+<?php
+    var_dump(posix_ctermid());
+?>
+===DONE===
+--EXPECTF--
+string(%d) "%s"
+===DONE===
diff --git a/ext/posix/tests/posix_getcwd_basic.phpt b/ext/posix/tests/posix_getcwd_basic.phpt
new file mode 100644
index 0000000..6dbed50
--- /dev/null
+++ b/ext/posix/tests/posix_getcwd_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+posix_getcwd(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+if (!function_exists('posix_getcwd')) die('skip posix_getcwd() not found');
+?>
+--FILE--
+<?php
+echo "Basic test of POSIX posix_getcwd function\n"; 
+var_dump(posix_getcwd());
+var_dump(posix_getcwd(1));
+
+?>
+===DONE===
+--EXPECTF--
+Basic test of POSIX posix_getcwd function
+string(%d) "%s"
+
+Warning: Wrong parameter count for posix_getcwd() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/posix/tests/posix_getgrgid.phpt b/ext/posix/tests/posix_getgrgid.phpt
new file mode 100644
index 0000000..0209d09
--- /dev/null
+++ b/ext/posix/tests/posix_getgrgid.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test posix_getgrgid().
+--CREDITS--
+Till Klampaeckel, till at php.net
+TestFest Berlin 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+?>
+--FILE--
+<?php
+$grp = posix_getgrgid(0);
+if (!isset($grp['name'])) {
+    die('Array index "name" does not exist.');
+}
+if (!isset($grp['passwd'])) {
+    die('Array index "passwd" does not exist.');
+}
+if (!isset($grp['members'])) {
+    die('Array index "members" does not exist.');
+} elseif (!is_array($grp['members'])) {
+    die('Array index "members" must be an array.');
+} else {
+    if (count($grp['members']) > 0) {
+        foreach ($grp['members'] as $idx => $username) {
+            if (!is_int($idx)) {
+                die('Index in members Array is not an int.');
+            }
+            if (!is_string($username)) {
+                die('Username in members Array is not of type string.');
+            }
+        }
+    }
+}
+if (!isset($grp['gid'])) {
+    die('Array index "gid" does not exist.');
+}
+var_dump($grp['gid']);
+?>
+===DONE===
+--EXPECT--
+int(0)
+===DONE===
diff --git a/ext/posix/tests/posix_getgrgid_basic.phpt b/ext/posix/tests/posix_getgrgid_basic.phpt
new file mode 100644
index 0000000..866e116
--- /dev/null
+++ b/ext/posix/tests/posix_getgrgid_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test posix_getgrgid() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getgid and getgrid fucntions\n"; 
+  	
+  $gid = posix_getgid();
+  $groupinfo = posix_getgrgid($gid);
+  
+  print_r($groupinfo);
+  
+?>
+===DONE===
+--EXPECTF--
+Basic test of POSIX getgid and getgrid fucntions
+Array
+(
+    [name] => %s
+    [passwd] => %s
+    [members] => Array
+%a
+
+    [gid] => %d
+)
+===DONE===
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getgrgid_macosx.phpt b/ext/posix/tests/posix_getgrgid_macosx.phpt
new file mode 100644
index 0000000..f9e6cc1
--- /dev/null
+++ b/ext/posix/tests/posix_getgrgid_macosx.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test return values of posix_getgrgid() on MacOSX.
+--CREDITS--
+Till Klampaeckel, till at php.net
+TestFest Berlin 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+if (strtolower(PHP_OS) != 'darwin') {
+    die('SKIP This test requires MacOSX/Darwin.');
+}
+?>
+--FILE--
+<?php
+$grp = posix_getgrgid(-1);
+var_dump($grp['name']);
+?>
+===DONE===
+--EXPECT--
+string(7) "nogroup"
+===DONE===
diff --git a/ext/posix/tests/posix_getgrgid_wrongparams.phpt b/ext/posix/tests/posix_getgrgid_wrongparams.phpt
new file mode 100644
index 0000000..d1ff77d
--- /dev/null
+++ b/ext/posix/tests/posix_getgrgid_wrongparams.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test parameters on posix_getgrgid().
+--CREDITS--
+Till Klampaeckel, till at php.net
+TestFest Berlin 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+if (strtolower(PHP_OS) == 'darwin') {
+    die('SKIP This test doesn\'t run on MacOSX/Darwin.');
+}
+--FILE--
+<?php
+$gid = PHP_INT_MAX; // obscene high gid
+var_dump(posix_getgrgid($gid));
+var_dump(posix_getgrgid(-1));
+var_dump(posix_getgrgid());
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+
+Warning: posix_getgrgid() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_getgrnam_basic.phpt b/ext/posix/tests/posix_getgrnam_basic.phpt
new file mode 100644
index 0000000..fd5bf23
--- /dev/null
+++ b/ext/posix/tests/posix_getgrnam_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+posix_getgrnam(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+if (!function_exists('posix_getgrnam')) die('skip posix_getgrnam() not found');
+?>
+--FILE--
+<?php
+echo "Basic test of POSIX posix_getgrnam function\n"; 		
+
+var_dump(posix_getgrnam(NULL));
+var_dump(posix_getgrnam(1));
+var_dump(posix_getgrnam(''));
+
+?>
+===DONE===
+--EXPECT--
+Basic test of POSIX posix_getgrnam function
+bool(false)
+bool(false)
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getgroups_basic.phpt b/ext/posix/tests/posix_getgroups_basic.phpt
new file mode 100644
index 0000000..f062468
--- /dev/null
+++ b/ext/posix/tests/posix_getgroups_basic.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test posix_getgroups() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getgroups\n";
+   
+  $groups = posix_getgroups();
+  
+  if (!is_array($groups)) {
+  	echo "TEST FAILED - array result expected\n"; 
+  } else {
+  	echo "TEST PASSED\n";
+  }		 
+  
+?>
+===DONE===
+--EXPECT--
+Basic test of POSIX getgroups
+TEST PASSED
+===DONE===
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getpgid_basic.phpt b/ext/posix/tests/posix_getpgid_basic.phpt
new file mode 100644
index 0000000..3195387
--- /dev/null
+++ b/ext/posix/tests/posix_getpgid_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test posix_getpgid() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of posix_getpgid function\n"; 
+  
+  $pid = posix_getpid();	
+  $pgid = posix_getpgid($pid);
+  
+  var_dump($pgid); 
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of posix_getpgid function
+int(%d)
+===DONE====
+
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getpgrp_basic.phpt b/ext/posix/tests/posix_getpgrp_basic.phpt
new file mode 100644
index 0000000..a737019
--- /dev/null
+++ b/ext/posix/tests/posix_getpgrp_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test posix_getpgrp() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getpgrp function\n"; 
+  	
+  $pgrp = posix_getpgrp();
+  
+  var_dump($pgrp); 
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX getpgrp function
+int(%d)
+===DONE====
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getpid_basic.phpt b/ext/posix/tests/posix_getpid_basic.phpt
new file mode 100644
index 0000000..a144441
--- /dev/null
+++ b/ext/posix/tests/posix_getpid_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test posix_getpid() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getpid function\n"; 
+  	
+  $pid = posix_getpid();
+  
+  var_dump($pid); 
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX getpid function
+int(%d)
+===DONE====
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getppid_basic.phpt b/ext/posix/tests/posix_getppid_basic.phpt
new file mode 100644
index 0000000..2da591c
--- /dev/null
+++ b/ext/posix/tests/posix_getppid_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test posix_getppid() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getppid function\n"; 
+  	
+  $ppid = posix_getppid();
+  
+  var_dump($ppid); 
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX getppid function
+int(%d)
+===DONE====
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getpwnam_basic.phpt b/ext/posix/tests/posix_getpwnam_basic.phpt
new file mode 100644
index 0000000..d675d6c
--- /dev/null
+++ b/ext/posix/tests/posix_getpwnam_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+posix_getpwnam(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+if (!function_exists('posix_getpwnam')) die('skip posix_getpwnam() not found');
+?>
+--FILE--
+<?php
+echo "Basic test of POSIX posix_getpwnam function\n"; 
+
+var_dump(posix_getpwnam(1));
+var_dump(posix_getpwnam(''));
+var_dump(posix_getpwnam(NULL));
+
+?>
+===DONE====
+--EXPECT--
+Basic test of POSIX posix_getpwnam function
+bool(false)
+bool(false)
+bool(false)
+===DONE====
diff --git a/ext/posix/tests/posix_getpwuid_basic.phpt b/ext/posix/tests/posix_getpwuid_basic.phpt
new file mode 100644
index 0000000..1bcd59d
--- /dev/null
+++ b/ext/posix/tests/posix_getpwuid_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test posix_getpwuid() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getpwuid\n";
+   
+  	
+  $pwuid = posix_getpwuid(posix_getuid());
+  
+  print_r($pwuid);
+  
+?>
+===DONE====
+--EXPECTREGEX--
+Basic test of POSIX getpwuid
+Array
+\(
+    \[name\] => [^\r\n]+
+    \[passwd\] => [^\r\n]+
+    \[uid\] => [0-9]+
+    \[gid\] => [0-9]+
+    \[gecos\] => [^\r\n]*
+    \[dir\] => [^\r\n]+
+    \[shell\] => [^\r\n]+
+\)
+===DONE====
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getrlimit_basic.phpt b/ext/posix/tests/posix_getrlimit_basic.phpt
new file mode 100644
index 0000000..7fdd0e7
--- /dev/null
+++ b/ext/posix/tests/posix_getrlimit_basic.phpt
@@ -0,0 +1,20 @@
+--TEST--
+posix_getrlimit(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+if (!function_exists('posix_getrlimit')) die('skip posix_getrlimit() not found');
+?>
+--FILE--
+<?php
+echo "Basic test of POSIX posix_getrlimit function\n"; 
+var_dump(posix_getrlimit());
+
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX posix_getrlimit function
+array(%d) {
+%a
+}
+===DONE====
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getsid.phpt b/ext/posix/tests/posix_getsid.phpt
new file mode 100644
index 0000000..62ed3c9
--- /dev/null
+++ b/ext/posix/tests/posix_getsid.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test posix_getsid() function test
+--DESCRIPTION--
+Get the current session id of a process pid (POSIX.1, 4.2.1) 
+Source code: ext/posix/posix.c
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if(!extension_loaded("posix")) print "SKIP - POSIX extension not loaded"; 
+?>
+--FILE--
+<?php
+echo "*** Testing posix_getsid() : function test ***\n";
+
+$pid = posix_getpid();
+echo "\n-- Testing posix_getsid() function with current process pid --\n";
+var_dump( is_long(posix_getsid($pid)) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing posix_getsid() : function test ***
+
+-- Testing posix_getsid() function with current process pid --
+bool(true)
+===DONE===
diff --git a/ext/posix/tests/posix_getsid_basic.phpt b/ext/posix/tests/posix_getsid_basic.phpt
new file mode 100644
index 0000000..a53e1df
--- /dev/null
+++ b/ext/posix/tests/posix_getsid_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Test posix_getsid() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of posix_getsid function\n"; 
+  
+  $pid = posix_getpid();	
+  $sid = posix_getsid($pid);
+  
+  var_dump($sid); 
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of posix_getsid function
+int(%d)
+===DONE====
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_getsid_error.phpt b/ext/posix/tests/posix_getsid_error.phpt
new file mode 100644
index 0000000..445bc5a
--- /dev/null
+++ b/ext/posix/tests/posix_getsid_error.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test posix_getsid() function : error conditions 
+--DESCRIPTION--
+cases: no params, wrong param, wrong param range
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if(!extension_loaded("posix")) {
+        die("SKIP - POSIX extension not loaded"); 
+    }
+?>
+--FILE--
+<?php
+var_dump( posix_getsid() );
+var_dump( posix_getsid(array()) );
+var_dump( posix_getsid(-1) );
+?>
+===DONE===
+--EXPECTF--
+Warning: posix_getsid() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+Warning: posix_getsid() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_initgroups_basic.phpt b/ext/posix/tests/posix_initgroups_basic.phpt
new file mode 100644
index 0000000..4a50059
--- /dev/null
+++ b/ext/posix/tests/posix_initgroups_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+posix_initgroups(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+if (!function_exists('posix_initgroups')) die('skip posix_initgroups() not found');
+?>
+--FILE--
+<?php
+echo "Basic test of POSIX posix_initgroups function\n"; 
+var_dump(posix_initgroups('foo', 'bar'));
+var_dump(posix_initgroups(NULL, NULL));
+
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX posix_initgroups function
+
+Warning: posix_initgroups() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+bool(false)
+===DONE====
diff --git a/ext/posix/tests/posix_kill_basic.phpt b/ext/posix/tests/posix_kill_basic.phpt
new file mode 100644
index 0000000..c995031
--- /dev/null
+++ b/ext/posix/tests/posix_kill_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test posix_kill(), posix_get_last_error and posix_strerror() functions : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX getpgid(), kill(), get_last_error() and strerror() functions\n"; 
+  	
+  	// Don't rely on PCNTL extension being around
+  	$SIGKILL = 9;
+  	
+  	// TODO Once we have PS open working beef up this test to create a process and kill it
+  	// for now start at a low pid and find first pid which does not exist.
+  	$pid = 999;
+  	do {
+  		$pid += 1;   	
+  		$result = shell_exec("ps -p " . $pid);
+	} while (stripos($result, (string)$pid) != FALSE); 
+  	
+  	echo "Kill pid=" . $pid . "\n";
+	var_dump(posix_kill($pid,$SIGKILL));
+	
+	$errno = posix_get_last_error(); 
+	
+	var_dump($errno);
+	var_dump(posix_strerror($errno));
+	
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX getpgid(), kill(), get_last_error() and strerror() functions
+Kill pid=%d
+bool(false)
+int(%d)
+string(%d) %sNo such process%s
+===DONE====
+  
\ No newline at end of file
diff --git a/ext/posix/tests/posix_mkfifo_safemode.phpt b/ext/posix/tests/posix_mkfifo_safemode.phpt
new file mode 100644
index 0000000..6a928f8
--- /dev/null
+++ b/ext/posix/tests/posix_mkfifo_safemode.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test posix_mkfifo() with safe_mode.
+--DESCRIPTION--
+The test attempts to enable safe_mode, catches all the relevant E_WARNING's and tries to create a fifo in /tmp.
+
+The first attempt (writing to /tmp) should effectively fail because /tmp is owned by root.
+
+The second attempt (writing to a local created file) works.
+--CREDITS--
+Till Klampaeckel, till at php.net
+TestFest Berlin 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+if (posix_geteuid() == 0) {
+    die('SKIP Cannot run test as root.');
+}
+?>
+--INI--
+safe_mode = 1
+--FILE--
+<?php
+var_dump(posix_mkfifo('/tmp/foobar', 0644));
+
+$dir = dirname(__FILE__) . '/foo';
+mkdir ($dir);
+var_dump(posix_mkfifo($dir . '/bar', 0644));
+?>
+===DONE===
+--CLEAN--
+<?php
+$dir = dirname(__FILE__) . '/foo';
+unlink($dir . '/bar');
+rmdir($dir);
+?>
+--EXPECTF--
+
+Warning: posix_mkfifo(): SAFE MODE Restriction in effect.  The script whose uid is %d is not allowed to access /tmp owned by uid %d in %s on line %d
+bool(false)
+bool(true)
+===DONE===
diff --git a/ext/posix/tests/posix_mkfifo_wrongparams.phpt b/ext/posix/tests/posix_mkfifo_wrongparams.phpt
new file mode 100644
index 0000000..0d4df7b
--- /dev/null
+++ b/ext/posix/tests/posix_mkfifo_wrongparams.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test parameter validation in posix_mkfifo().
+--CREDITS--
+Till Klampaeckel, till at php.net
+TestFest Berlin 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) {
+    die('SKIP The posix extension is not loaded.');
+}
+?>
+--FILE--
+<?php
+posix_mkfifo(null);
+var_dump(posix_mkfifo(null, 0644));
+?>
+===DONE===
+--EXPECTF--
+Warning: posix_mkfifo() expects exactly 2 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_mknod_basic.phpt b/ext/posix/tests/posix_mknod_basic.phpt
new file mode 100644
index 0000000..bc35156
--- /dev/null
+++ b/ext/posix/tests/posix_mknod_basic.phpt
@@ -0,0 +1,18 @@
+--TEST--
+posix_mknod(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+if (!function_exists('posix_mknod')) die('skip posix_mknod() not found');
+?>
+--FILE--
+<?php
+echo "Basic test of POSIX posix_mknod function\n"; 
+var_dump(posix_mknod(NULL, NULL, NULL, NULL));
+
+?>
+===DONE====
+--EXPECT--
+Basic test of POSIX posix_mknod function
+bool(false)
+===DONE====
\ No newline at end of file
diff --git a/ext/posix/tests/posix_times.phpt b/ext/posix/tests/posix_times.phpt
new file mode 100644
index 0000000..6ad3407
--- /dev/null
+++ b/ext/posix/tests/posix_times.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test posix_times()
+--DESCRIPTION--
+Gets information about the current CPU usage.
+Source code: ext/posix/posix.c
+--CREDITS--
+Falko Menge, mail at falko-menge dot de
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) { 
+        die('SKIP - POSIX extension not available');
+    }
+?>
+--FILE--
+<?php
+    var_dump(posix_times());
+?>
+===DONE===
+--EXPECTF--
+array(5) {
+  ["ticks"]=>
+  int(%i)
+  ["utime"]=>
+  int(%d)
+  ["stime"]=>
+  int(%d)
+  ["cutime"]=>
+  int(%d)
+  ["cstime"]=>
+  int(%d)
+}
+===DONE===
diff --git a/ext/posix/tests/posix_times_basic.phpt b/ext/posix/tests/posix_times_basic.phpt
new file mode 100644
index 0000000..eb8af10
--- /dev/null
+++ b/ext/posix/tests/posix_times_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test posix_times() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX times function\n"; 
+  	
+  $times = posix_times();
+  
+  var_dump($times); 
+  
+  
+  if ($times == FALSE) {
+  	$errno= posix_get_last_error();
+  	var_dump(posix_strerror($errno)); 
+  }
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX times function
+array(5) {
+  ["ticks"]=>
+  int(%d)
+  ["utime"]=>
+  int(%d)
+  ["stime"]=>
+  int(%d)
+  ["cutime"]=>
+  int(%d)
+  ["cstime"]=>
+  int(%d)
+}
+===DONE====
diff --git a/ext/posix/tests/posix_ttyname.phpt b/ext/posix/tests/posix_ttyname.phpt
new file mode 100644
index 0000000..76dff4e
--- /dev/null
+++ b/ext/posix/tests/posix_ttyname.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test posix_ttyname()
+--DESCRIPTION--
+Gets the absolute path to the current terminal device that is open on a given file descriptor.
+Source code: ext/posix/posix.c
+--CREDITS--
+Falko Menge, mail at falko-menge dot de
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) { 
+        die('SKIP - POSIX extension not available');
+    }
+?>
+--FILE--
+<?php
+    var_dump(posix_ttyname(STDIN));
+    var_dump(posix_ttyname(STDERR));
+    var_dump(posix_ttyname(STDOUT));
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_ttyname_error_wrongparams.phpt b/ext/posix/tests/posix_ttyname_error_wrongparams.phpt
new file mode 100644
index 0000000..daa487f
--- /dev/null
+++ b/ext/posix/tests/posix_ttyname_error_wrongparams.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test posix_ttyname() with wrong parameters
+--DESCRIPTION--
+Gets the absolute path to the current terminal device that is open on a given file descriptor.
+Source code: ext/posix/posix.c
+--CREDITS--
+Falko Menge, mail at falko-menge dot de
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) { 
+        die('SKIP - POSIX extension not available');
+    }
+	if (!extension_loaded('gd')) { 
+        die('SKIP - GD extension not available');
+    }
+    if (!function_exists('imagecreate')) {
+        die('SKIP - Function imagecreate() not available');
+    }
+?>
+--FILE--
+<?php
+    var_dump(posix_ttyname()); // param missing
+    var_dump(posix_ttyname(0)); // param not a ressource
+    var_dump(posix_ttyname(imagecreate(1, 1))); // wrong resource type
+?>
+===DONE===
+--EXPECTF--
+Warning: posix_ttyname() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+bool(false)
+
+Warning: posix_ttyname(): supplied resource is not a valid stream resource in %s on line %s
+
+Warning: posix_ttyname(): expects argument 1 to be a valid stream resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/posix/tests/posix_uname.phpt b/ext/posix/tests/posix_uname.phpt
new file mode 100644
index 0000000..12c4bae
--- /dev/null
+++ b/ext/posix/tests/posix_uname.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test posix_uname()
+--DESCRIPTION--
+Gets information about the system.
+Source code: ext/posix/posix.c
+--CREDITS--
+Falko Menge, mail at falko-menge dot de
+PHP Testfest Berlin 2009-05-10
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) { 
+        die('SKIP - POSIX extension not available');
+    }
+?>
+--FILE--
+<?php
+    var_dump(posix_uname());
+?>
+===DONE===
+--EXPECTF--
+array(5) {
+  ["sysname"]=>
+  string(%d) "%s"
+  ["nodename"]=>
+  string(%d) "%s"
+  ["release"]=>
+  string(%d) "%s"
+  ["version"]=>
+  string(%d) "%s"
+  ["machine"]=>
+  string(%d) "%s"
+}
+===DONE===
diff --git a/ext/posix/tests/posix_uname_basic.phpt b/ext/posix/tests/posix_uname_basic.phpt
new file mode 100644
index 0000000..7dd3781
--- /dev/null
+++ b/ext/posix/tests/posix_uname_basic.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test posix_uname() function : basic functionality 
+--SKIPIF--
+<?php 
+	if (!extension_loaded('posix')) die('skip - POSIX extension not loaded'); 
+?>
+--FILE--
+<?php 
+  echo "Basic test of POSIX uname function\n"; 
+  	
+  $uname = posix_uname();  
+  
+  print_r($uname);
+  
+?>
+===DONE====
+--EXPECTF--
+Basic test of POSIX uname function
+Array
+(
+    [sysname] => %s
+    [nodename] => %s
+    [release] => %s
+    [version] => %s
+    [machine] => %s
+)
+===DONE====
+  
\ No newline at end of file
diff --git a/ext/readline/config.m4 b/ext/readline/config.m4
index a1a9d60..224be20 100644
--- a/ext/readline/config.m4
+++ b/ext/readline/config.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: config.m4,v 1.25.2.3 2005/11/28 23:04:01 sniper Exp $
+dnl $Id: config.m4,v 1.25.2.3.2.1 2009/05/14 13:43:52 jani Exp $
 dnl
 
 PHP_ARG_WITH(libedit,for libedit readline replacement, 
@@ -50,15 +50,6 @@ if test "$PHP_READLINE" && test "$PHP_READLINE" != "no"; then
     -L$READLINE_DIR/$PHP_LIBDIR $PHP_READLINE_LIBS
   ])
 
-  PHP_CHECK_LIBRARY(history, add_history,
-  [
-    PHP_ADD_LIBRARY_WITH_PATH(history, $READLINE_DIR/$PHP_LIBDIR, READLINE_SHARED_LIBADD)
-  ], [
-    AC_MSG_ERROR(history library required by readline not found)
-  ], [
-    -L$READLINE_DIR/$PHP_LIBDIR $PHP_READLINE_LIBS
-  ])
-
   AC_DEFINE(HAVE_LIBREADLINE, 1, [ ])
 
 elif test "$PHP_LIBEDIT" != "no"; then
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 0f53f6d..4fd185e 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_reflection.c,v 1.164.2.33.2.55 2008/12/31 11:17:42 sebastian Exp $ */
+/* $Id: php_reflection.c,v 1.164.2.33.2.57 2009/05/21 16:05:11 lbarnaud Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1122,7 +1122,7 @@ static void reflection_method_factory(zend_class_entry *ce, zend_function *metho
 	MAKE_STD_ZVAL(name);
 	MAKE_STD_ZVAL(classname);
 	ZVAL_STRING(name, method->common.function_name, 1);
-	ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+	ZVAL_STRINGL(classname, method->common.scope->name, method->common.scope->name_length, 1);
 	reflection_instantiate(reflection_method_ptr, object TSRMLS_CC);
 	intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
 	intern->ptr = method;
@@ -1164,7 +1164,7 @@ static void reflection_property_factory(zend_class_entry *ce, zend_property_info
 	MAKE_STD_ZVAL(name);
 	MAKE_STD_ZVAL(classname);
 	ZVAL_STRING(name, prop_name, 1);
-	ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+	ZVAL_STRINGL(classname, prop->ce->name, prop->ce->name_length, 1);
 
 	reflection_instantiate(reflection_property_ptr, object TSRMLS_CC);
 	intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
@@ -2249,11 +2249,6 @@ ZEND_METHOD(reflection_method, __construct)
 		zval_dtor(&ztmp);
 	}
 
-	MAKE_STD_ZVAL(classname);
-	ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
-
-	zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
-	
 	lcname = zend_str_tolower_dup(name_str, name_len);
 
 	if (zend_hash_find(&ce->function_table, lcname, name_len + 1, (void **) &mptr) == FAILURE) {
@@ -2264,6 +2259,11 @@ ZEND_METHOD(reflection_method, __construct)
 	}
 	efree(lcname);
 
+	MAKE_STD_ZVAL(classname);
+	ZVAL_STRINGL(classname, mptr->common.scope->name, mptr->common.scope->name_length, 1);
+
+	zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
+	
 	MAKE_STD_ZVAL(name);
 	ZVAL_STRING(name, mptr->common.function_name, 1);
 	zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL);
@@ -3866,17 +3866,18 @@ ZEND_METHOD(reflection_property, __construct)
 		}
 	}
 
-	MAKE_STD_ZVAL(classname);
-	ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
-	zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
-	
+	MAKE_STD_ZVAL(classname);	
 	MAKE_STD_ZVAL(propname);
+	
 	if (dynam_prop == 0) {
 		zend_unmangle_property_name(property_info->name, property_info->name_length, &class_name, &prop_name);
+		ZVAL_STRINGL(classname, property_info->ce->name, property_info->ce->name_length, 1);
 		ZVAL_STRING(propname, prop_name, 1);
 	} else {
+		ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);	
 		ZVAL_STRINGL(propname, name_str, name_len, 1);
 	}
+	zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
 	zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &propname, sizeof(zval *), NULL);
 
 	reference = (property_reference*) emalloc(sizeof(property_reference));
@@ -4125,6 +4126,10 @@ ZEND_METHOD(reflection_property, getDeclaringClass)
 			break;
 		}
 		ce = tmp_ce;
+		if (tmp_ce == tmp_info->ce) {
+			/* declared in this class, done */
+			break;
+		}
 		tmp_ce = tmp_ce->parent;
 	}
 
@@ -4947,7 +4952,7 @@ PHP_MINFO_FUNCTION(reflection) /* {{{ */
 	php_info_print_table_start();
 	php_info_print_table_header(2, "Reflection", "enabled");
 
-	php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.55 2008/12/31 11:17:42 sebastian Exp $");
+	php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.57 2009/05/21 16:05:11 lbarnaud Exp $");
 
 	php_info_print_table_end();
 } /* }}} */
diff --git a/ext/reflection/tests/002.phpt b/ext/reflection/tests/002.phpt
index e522ac8..2c8aedf 100755
--- a/ext/reflection/tests/002.phpt
+++ b/ext/reflection/tests/002.phpt
@@ -52,14 +52,14 @@ var_dump($r->bar);
 ===DONE===
 --EXPECTF--
 ReflectionMethodEx::__construct
-string(18) "ReflectionMethodEx"
-string(7) "getName"
-string(3) "xyz"
+%unicode|string%(26) "ReflectionFunctionAbstract"
+%unicode|string%(7) "getName"
+%unicode|string%(3) "xyz"
 NULL
 Cannot set read-only property ReflectionMethodEx::$class
 Cannot set read-only property ReflectionMethodEx::$name
-string(18) "ReflectionMethodEx"
-string(7) "getName"
-string(3) "bar"
-string(3) "baz"
+%unicode|string%(26) "ReflectionFunctionAbstract"
+%unicode|string%(7) "getName"
+%unicode|string%(3) "bar"
+%unicode|string%(3) "baz"
 ===DONE===
diff --git a/ext/reflection/tests/ReflectionClass_FileInfo_basic.phpt b/ext/reflection/tests/ReflectionClass_FileInfo_basic.phpt
new file mode 100644
index 0000000..da276e6
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_FileInfo_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+ReflectionClass::getFileName(), ReflectionClass::getStartLine(), ReflectionClass::getEndLine()
+--FILE-- 
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Get the file name of the PHP script in which C is defined
+var_dump($rc->getFileName());
+
+//Get the line number at the start of the definition of class C
+var_dump($rc->getStartLine());
+
+//Get the line number at the end of the definition of class C
+var_dump($rc->getEndLine());
+
+//Same tests as above but stdclass is internal - so all results should be false. 
+$rc = new ReflectionClass("stdClass");
+var_dump($rc->getFileName());
+var_dump($rc->getStartLine());
+var_dump($rc->getEndLine());
+
+Class C {
+
+}
+?>
+--EXPECTF--
+string(%d) "%sReflectionClass_FileInfo_basic.php"
+int(20)
+int(22)
+bool(false)
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_FileInfo_error.phpt b/ext/reflection/tests/ReflectionClass_FileInfo_error.phpt
new file mode 100644
index 0000000..766cdf3
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_FileInfo_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+ReflectionClass::getFileName(), ReflectionClass::getStartLine(), ReflectionClass::getEndLine() - bad params
+--FILE-- 
+<?php
+Class C { }
+
+$rc = new ReflectionClass("C");
+$methods = array("getFileName", "getStartLine", "getEndLine");
+
+foreach ($methods as $method) {
+	var_dump($rc->$method());
+	var_dump($rc->$method(null));
+	var_dump($rc->$method('X', 0));	
+}
+?>
+--EXPECTF--
+string(%d) "%s"
+
+Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 10
+NULL
+int(2)
+
+Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 10
+NULL
+int(2)
+
+Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 10
+NULL
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_constructor_001.phpt b/ext/reflection/tests/ReflectionClass_constructor_001.phpt
new file mode 100644
index 0000000..1a70fe1
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_constructor_001.phpt
@@ -0,0 +1,33 @@
+--TEST--
+ReflectionClass::__constructor()
+--FILE--
+<?php
+$r1 = new ReflectionClass("stdClass");
+
+$myInstance = new stdClass;
+$r2 = new ReflectionClass($myInstance);
+
+class TrickClass {
+	function __toString() {
+		//Return the name of another class
+		return "Exception";
+	}
+}
+$myTrickClass = new TrickClass;
+$r3 = new ReflectionClass($myTrickClass);
+
+var_dump($r1, $r2, $r3);
+?>
+--EXPECTF--
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(8) "stdClass"
+}
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(8) "stdClass"
+}
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(10) "TrickClass"
+}
diff --git a/ext/reflection/tests/ReflectionClass_constructor_002.phpt b/ext/reflection/tests/ReflectionClass_constructor_002.phpt
new file mode 100644
index 0000000..3685c63
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_constructor_002.phpt
@@ -0,0 +1,67 @@
+--TEST--
+ReflectionClass::__constructor() - bad arguments
+--FILE--
+<?php
+try {
+	var_dump(new ReflectionClass());
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+try {
+	var_dump(new ReflectionClass(null));
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+try {
+	var_dump(new ReflectionClass(true));
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+try {
+	var_dump(new ReflectionClass(1));
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+try {
+	var_dump(new ReflectionClass(array(1,2,3)));
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+try {
+	var_dump(new ReflectionClass("stdClass", 1));
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+try {
+	var_dump(new ReflectionClass("X"));
+} catch (Exception $e) {
+	echo $e->getMessage() . "\n";  
+}
+
+?>
+--EXPECTF--
+
+Warning: ReflectionClass::__construct() expects exactly 1 parameter, 0 given in %s on line 3
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+Class  does not exist
+Class 1 does not exist
+Class 1 does not exist
+
+Notice: Array to string conversion in %s on line 27
+Class Array does not exist
+
+Warning: ReflectionClass::__construct() expects exactly 1 parameter, 2 given in %s on line 33
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+Class X does not exist
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_export_basic1.phpt b/ext/reflection/tests/ReflectionClass_export_basic1.phpt
new file mode 100644
index 0000000..8729731
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_export_basic1.phpt
@@ -0,0 +1,62 @@
+--TEST--
+ReflectionClass::export() - various parameters
+--FILE--
+<?php
+Class A { 
+	public function privf(Exception $a) {}
+	public function pubf(A $a,
+						 $b,
+						 C $c = null,
+						 $d = K,
+						 $e = "15 chars long -",
+						 $f = null,
+						 $g = false,
+						 array $h = null) {}
+}
+
+Class C extends A { }
+
+define('K', "16 chars long --");
+ReflectionClass::export("C");
+?>
+--EXPECTF--
+Class [ <user> class C extends A ] {
+  @@ %s 14-14
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [0] {
+  }
+
+  - Methods [2] {
+    Method [ <user, inherits A> public method privf ] {
+      @@ %s 3 - 3
+
+      - Parameters [1] {
+        Parameter #0 [ <required> Exception $a ]
+      }
+    }
+
+    Method [ <user, inherits A> public method pubf ] {
+      @@ %s 4 - 11
+
+      - Parameters [8] {
+        Parameter #0 [ <required> A $a ]
+        Parameter #1 [ <required> $b ]
+        Parameter #2 [ <optional> C or NULL $c = NULL ]
+        Parameter #3 [ <optional> $d = '16 chars long -...' ]
+        Parameter #4 [ <optional> $e = '15 chars long -' ]
+        Parameter #5 [ <optional> $f = NULL ]
+        Parameter #6 [ <optional> $g = false ]
+        Parameter #7 [ <optional> array or NULL $h = NULL ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_export_basic2.phpt b/ext/reflection/tests/ReflectionClass_export_basic2.phpt
new file mode 100644
index 0000000..b664488
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_export_basic2.phpt
@@ -0,0 +1,54 @@
+--TEST--
+ReflectionClass::export() - ensure inherited private props are hidden.
+--FILE--
+<?php
+Class c {
+	private $a;
+	static private $b;
+}
+
+class d extends c {}
+
+ReflectionClass::export("c");
+ReflectionClass::export("d");
+?>
+--EXPECTF--
+Class [ <user> class c ] {
+  @@ %s 2-5
+
+  - Constants [0] {
+  }
+
+  - Static properties [1] {
+    Property [ private static $b ]
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [1] {
+    Property [ <default> private $a ]
+  }
+
+  - Methods [0] {
+  }
+}
+
+Class [ <user> class d extends c ] {
+  @@ %s 7-7
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [0] {
+  }
+
+  - Methods [0] {
+  }
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getConstant_basic.phpt b/ext/reflection/tests/ReflectionClass_getConstant_basic.phpt
new file mode 100644
index 0000000..6e05111
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getConstant_basic.phpt
@@ -0,0 +1,41 @@
+--TEST--
+ReflectionClass::getConstants()
+--FILE--
+<?php
+class C {
+	const a = 'hello from C';
+}
+class D extends C {
+}
+class E extends D {
+}
+class F extends E {
+	const a = 'hello from F';
+}
+class X {
+}
+
+$classes = array("C", "D", "E", "F", "X");
+foreach($classes as $class) {
+	echo "Reflecting on class $class: \n";
+	$rc = new ReflectionClass($class);
+	var_dump($rc->getConstant('a'));
+	var_dump($rc->getConstant('doesntexist'));
+}
+?>
+--EXPECTF--
+Reflecting on class C: 
+string(12) "hello from C"
+bool(false)
+Reflecting on class D: 
+string(12) "hello from C"
+bool(false)
+Reflecting on class E: 
+string(12) "hello from C"
+bool(false)
+Reflecting on class F: 
+string(12) "hello from F"
+bool(false)
+Reflecting on class X: 
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_getConstant_error.phpt b/ext/reflection/tests/ReflectionClass_getConstant_error.phpt
new file mode 100644
index 0000000..907d6d8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getConstant_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+ReflectionClass::getConstant() - bad params
+--FILE--
+<?php
+class C {
+	const myConst = 1;
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+var_dump($rc->getConstant());
+var_dump($rc->getConstant("myConst", "myConst"));
+var_dump($rc->getConstant(null));
+var_dump($rc->getConstant(1));
+var_dump($rc->getConstant(1.5));
+var_dump($rc->getConstant(true));
+var_dump($rc->getConstant(array(1,2,3)));
+var_dump($rc->getConstant(new C));
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 0 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 2 given in %s on line 9
+NULL
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: ReflectionClass::getConstant() expects parameter 1 to be string, array given in %s on line 14
+NULL
+
+Warning: ReflectionClass::getConstant() expects parameter 1 to be string, object given in %s on line 15
+NULL
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getConstants_basic.phpt b/ext/reflection/tests/ReflectionClass_getConstants_basic.phpt
new file mode 100644
index 0000000..9abdcc8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getConstants_basic.phpt
@@ -0,0 +1,48 @@
+--TEST--
+ReflectionClass::getConstants()
+--FILE--
+<?php
+class C {
+	const a = 'hello from C';
+}
+class D extends C {
+}
+class E extends D {
+}
+class F extends E {
+	const a = 'hello from F';
+}
+class X {
+}
+
+$classes = array('C', 'D', 'E', 'F', 'X');
+foreach($classes as $class) {
+	echo "Constants from class $class: \n";
+	$rc = new ReflectionClass($class);
+	var_dump($rc->getConstants());
+}
+?>
+--EXPECTF--
+Constants from class C: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from C"
+}
+Constants from class D: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from C"
+}
+Constants from class E: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from C"
+}
+Constants from class F: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from F"
+}
+Constants from class X: 
+array(0) {
+}
diff --git a/ext/reflection/tests/ReflectionClass_getConstants_error.phpt b/ext/reflection/tests/ReflectionClass_getConstants_error.phpt
new file mode 100644
index 0000000..73c407d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getConstants_error.phpt
@@ -0,0 +1,24 @@
+--TEST--
+ReflectionClass::getConstants()
+--FILE--
+<?php
+class X {
+}
+
+$rc = new reflectionClass('X');
+
+//Test invalid arguments
+$rc->getConstants('X');
+$rc->getConstants(true);
+$rc->getConstants(null);
+$rc->getConstants('A', 'B');
+
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 8
+
+Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 9
+
+Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 10
+
+Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 11
diff --git a/ext/reflection/tests/ReflectionClass_getConstructor_basic.phpt b/ext/reflection/tests/ReflectionClass_getConstructor_basic.phpt
new file mode 100644
index 0000000..f3881c5
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getConstructor_basic.phpt
@@ -0,0 +1,82 @@
+--TEST--
+ReflectionClass::getConstructor()
+--FILE--
+<?php
+class NewCtor {
+	function __construct() {}
+}
+
+class ExtendsNewCtor extends NewCtor {
+}
+
+class OldCtor {
+	function OldCtor() {}
+}
+
+class ExtendsOldCtor extends OldCtor {
+}
+
+
+class X {
+	function Y() {}
+}
+
+class Y extends X {
+}
+
+class OldAndNewCtor {
+	function OldAndNewCtor() {}
+	function __construct() {}
+}
+
+class NewAndOldCtor {
+	function __construct() {}
+	function NewAndOldCtor() {}
+}
+class B {
+	function B() {}
+}
+
+class C extends B {
+	function C() {}
+}
+
+class D1 extends C {
+	function __construct() {}
+}
+
+class D2 extends C {
+}
+
+$classes = array('NewCtor', 'ExtendsNewCtor', 'OldCtor', 'ExtendsOldCtor', 
+				 'OldAndNewCtor', 'NewAndOldCtor', 'B', 'C', 'D1', 'D2', 'X', 'Y');
+
+foreach ($classes as $class) {
+	$rc = new ReflectionClass($class);
+	$rm = $rc->getConstructor();
+	if ($rm != null) {
+		echo "Constructor of $class: " . $rm->getName() . "\n";
+	}  else {
+		echo "No constructor for $class\n";
+	}
+	
+}				 
+				 
+?>
+--EXPECTF--
+
+Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line 26
+
+Strict Standards: %s for class NewAndOldCtor in %s on line 31
+Constructor of NewCtor: __construct
+Constructor of ExtendsNewCtor: __construct
+Constructor of OldCtor: OldCtor
+Constructor of ExtendsOldCtor: OldCtor
+Constructor of OldAndNewCtor: __construct
+Constructor of NewAndOldCtor: __construct
+Constructor of B: B
+Constructor of C: C
+Constructor of D1: __construct
+Constructor of D2: C
+No constructor for X
+No constructor for Y
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getConstructor_error.phpt b/ext/reflection/tests/ReflectionClass_getConstructor_error.phpt
new file mode 100644
index 0000000..8892b1d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getConstructor_error.phpt
@@ -0,0 +1,24 @@
+--TEST--
+ReflectionClass::getConstructor() - bad params
+--FILE--
+<?php
+class C {}
+$rc = new ReflectionClass('C');
+var_dump($rc->getConstructor(null));
+var_dump($rc->getConstructor('X'));
+var_dump($rc->getConstructor(true));
+var_dump($rc->getConstructor(array(1,2,3)));
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 7
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_getExtensionName_basic.phpt b/ext/reflection/tests/ReflectionClass_getExtensionName_basic.phpt
new file mode 100644
index 0000000..7813cca
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getExtensionName_basic.phpt
@@ -0,0 +1,14 @@
+--TEST--
+ReflectionClass::getExtensionName() method - basic test for getExtensionName() method
+--SKIPIF--
+<?php extension_loaded('reflection') && extension_loaded('dom') or die('skip - reflection or dom extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein at velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+ 	$rc=new reflectionClass('domDocument');
+ 	var_dump( $rc->getExtensionName()) ;
+?>
+--EXPECT--
+string(3) "dom"
diff --git a/ext/reflection/tests/ReflectionClass_getExtensionName_variation.phpt b/ext/reflection/tests/ReflectionClass_getExtensionName_variation.phpt
new file mode 100644
index 0000000..35372c4
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getExtensionName_variation.phpt
@@ -0,0 +1,20 @@
+--TEST--
+ReflectionClass::getExtensionName() method - variation test for getExtensionName()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein at velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+
+	class myClass
+	{	
+		public $varX;
+		public $varY;
+	}
+	$rc=new reflectionClass('myClass');
+	var_dump( $rc->getExtensionName()) ;
+?>
+--EXPECT--
+bool(false)
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getExtension_basic.phpt b/ext/reflection/tests/ReflectionClass_getExtension_basic.phpt
new file mode 100644
index 0000000..efc1ed8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getExtension_basic.phpt
@@ -0,0 +1,17 @@
+--TEST--
+ReflectionClass::getExtension() method - basic test for getExtension() method
+--SKIPIF--
+<?php extension_loaded('reflection') && extension_loaded('dom') or die('skip - reflection or dom extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein at velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+ 	$rc=new reflectionClass('domDocument');
+ 	var_dump($rc->getExtension()) ;
+?>
+--EXPECTF--
+object(ReflectionExtension)#%d (1) {
+  ["name"]=>
+  string(3) "dom"
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getExtension_variation.phpt b/ext/reflection/tests/ReflectionClass_getExtension_variation.phpt
new file mode 100644
index 0000000..f227277
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getExtension_variation.phpt
@@ -0,0 +1,20 @@
+--TEST--
+ReflectionClass::getExtension() method - variation test for getExtension()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein at velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+
+	class myClass
+	{	
+		public $varX;
+		public $varY;
+	}
+	$rc=new reflectionClass('myClass');
+	var_dump( $rc->getExtension()) ;
+?>
+--EXPECT--
+NULL
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getInterfaceNames_basic.phpt b/ext/reflection/tests/ReflectionClass_getInterfaceNames_basic.phpt
new file mode 100644
index 0000000..abbaa35
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getInterfaceNames_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+ReflectionClass::getInterfaceNames()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Michelangelo van Dam <dragonbe at gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+interface Foo { }
+
+interface Bar { }
+
+class Baz implements Foo, Bar { }
+
+$rc1 = new ReflectionClass("Baz");
+var_dump($rc1->getInterfaceNames());
+?>
+--EXPECT--
+array(2) {
+  [0]=>
+  string(3) "Foo"
+  [1]=>
+  string(3) "Bar"
+}
diff --git a/ext/reflection/tests/ReflectionClass_getMethod_001.phpt b/ext/reflection/tests/ReflectionClass_getMethod_001.phpt
index 5821eba..2f2d790 100644
--- a/ext/reflection/tests/ReflectionClass_getMethod_001.phpt
+++ b/ext/reflection/tests/ReflectionClass_getMethod_001.phpt
@@ -48,121 +48,121 @@ foreach($classes as $class) {
 --EXPECTF--
 Reflecting on class pubf: 
   --> Check for f(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(4) "pubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for s(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(4) "pubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for F(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(4) "pubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for doesntExist(): Method doesntExist does not exist
 Reflecting on class subpubf: 
   --> Check for f(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(7) "subpubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for s(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(7) "subpubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for F(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(7) "subpubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for doesntExist(): Method doesntExist does not exist
 Reflecting on class protf: 
   --> Check for f(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(5) "protf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for s(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(5) "protf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for F(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(5) "protf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for doesntExist(): Method doesntExist does not exist
 Reflecting on class subprotf: 
   --> Check for f(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(8) "subprotf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for s(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(8) "subprotf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for F(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(8) "subprotf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for doesntExist(): Method doesntExist does not exist
 Reflecting on class privf: 
   --> Check for f(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(5) "privf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for s(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(5) "privf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for F(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(5) "privf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for doesntExist(): Method doesntExist does not exist
 Reflecting on class subprivf: 
   --> Check for f(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(8) "subprivf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for s(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(8) "subprivf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for F(): object(ReflectionMethod)#%d (2) {
-  ["name"]=>
-  string(1) "f"
-  ["class"]=>
-  string(8) "subprivf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "f"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
-  --> Check for doesntExist(): Method doesntExist does not exist
\ No newline at end of file
+  --> Check for doesntExist(): Method doesntExist does not exist
diff --git a/ext/reflection/tests/ReflectionClass_getMethods_001.phpt b/ext/reflection/tests/ReflectionClass_getMethods_001.phpt
index 867d669..ce5c980 100644
--- a/ext/reflection/tests/ReflectionClass_getMethods_001.phpt
+++ b/ext/reflection/tests/ReflectionClass_getMethods_001.phpt
@@ -40,101 +40,101 @@ Reflecting on class pubf:
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(4) "pubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "f"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(4) "pubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
 }
 Reflecting on class subpubf: 
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(7) "subpubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "f"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(7) "subpubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
 }
 Reflecting on class protf: 
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(5) "protf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "f"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(5) "protf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
 }
 Reflecting on class subprotf: 
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(8) "subprotf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "f"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(8) "subprotf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
 }
 Reflecting on class privf: 
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(5) "privf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "f"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "privf"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(5) "privf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "privf"
   }
 }
 Reflecting on class subprivf: 
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(8) "subprivf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "f"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "privf"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(8) "subprivf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "privf"
   }
-}
\ No newline at end of file
+}
diff --git a/ext/reflection/tests/ReflectionClass_getModifiers_basic.phpt b/ext/reflection/tests/ReflectionClass_getModifiers_basic.phpt
new file mode 100644
index 0000000..33a2539
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getModifiers_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionClass::getModifiers()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher at gmail.com>
+--FILE--
+<?php
+
+class a {}
+abstract class b {}
+final class c {}
+interface d {}
+class e implements d {}
+interface f extends d {}
+class g extends b {}
+
+function dump_modifiers($class) {
+	$obj = new ReflectionClass($class);
+	var_dump($obj->getModifiers());
+}
+
+dump_modifiers('a');
+dump_modifiers('b');
+dump_modifiers('c');
+dump_modifiers('d');
+dump_modifiers('e');
+dump_modifiers('f');
+dump_modifiers('g');
+
+?>
+--EXPECT--
+int(0)
+int(32)
+int(64)
+int(128)
+int(0)
+int(128)
+int(0)
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getName_basic.phpt b/ext/reflection/tests/ReflectionClass_getName_basic.phpt
new file mode 100644
index 0000000..158413f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getName_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+ReflectionClass::getName()
+--FILE--
+<?php
+class TrickClass {
+	function __toString() {
+		//Return the name of another class
+		return "Exception";
+	}
+}
+
+$r1 = new ReflectionClass("stdClass");
+
+$myInstance = new stdClass;
+$r2 = new ReflectionClass($myInstance);
+
+$r3 = new ReflectionClass("TrickClass");
+
+var_dump($r1->getName(), $r2->getName(), $r3->getName());
+
+?> 
+--EXPECTF--
+string(8) "stdClass"
+string(8) "stdClass"
+string(10) "TrickClass"
diff --git a/ext/reflection/tests/ReflectionClass_getName_error.phpt b/ext/reflection/tests/ReflectionClass_getName_error.phpt
new file mode 100644
index 0000000..6f5699c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getName_error.phpt
@@ -0,0 +1,17 @@
+--TEST--
+ReflectionClass::getName() - invalid params
+--FILE--
+<?php
+
+$r1 = new ReflectionClass("stdClass");
+
+var_dump($r1->getName('X'));
+var_dump($r1->getName('X', true));
+?> 
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 6
+NULL
+ 
diff --git a/ext/reflection/tests/ReflectionClass_getName_error1.phpt b/ext/reflection/tests/ReflectionClass_getName_error1.phpt
new file mode 100644
index 0000000..5590137
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getName_error1.phpt
@@ -0,0 +1,8 @@
+--TEST--
+ReflectionClass::getName - forbid static invocation
+--FILE--
+<?php
+ReflectionClass::getName();
+?>
+--EXPECTF--
+Fatal error: Non-static method ReflectionClass::getName() cannot be called statically in %s on line 2
diff --git a/ext/reflection/tests/ReflectionClass_getParentClass.phpt b/ext/reflection/tests/ReflectionClass_getParentClass.phpt
new file mode 100644
index 0000000..46884ca
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getParentClass.phpt
@@ -0,0 +1,21 @@
+--TEST--
+ReflectionClass::getParentClass()
+--CREDITS--
+Michelangelo van Dam <dragonbe at gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+class Foo {}
+
+class Bar extends Foo {}
+
+$rc1 = new ReflectionClass("Bar");
+var_dump($rc1->getParentClass());
+?>
+
+--EXPECTF--
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(3) "Foo"
+}
diff --git a/ext/reflection/tests/ReflectionClass_getProperties_001.phpt b/ext/reflection/tests/ReflectionClass_getProperties_001.phpt
index 5eecc5d..b4f99ca 100644
--- a/ext/reflection/tests/ReflectionClass_getProperties_001.phpt
+++ b/ext/reflection/tests/ReflectionClass_getProperties_001.phpt
@@ -40,87 +40,87 @@ Reflecting on class pubf:
 array(2) {
   [0]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "a"
-    ["class"]=>
-    string(4) "pubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "a"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
   [1]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(4) "pubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
 }
 Reflecting on class subpubf: 
 array(2) {
   [0]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "a"
-    ["class"]=>
-    string(7) "subpubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "a"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
   [1]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(7) "subpubf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(4) "pubf"
   }
 }
 Reflecting on class protf: 
 array(2) {
   [0]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "a"
-    ["class"]=>
-    string(5) "protf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "a"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
   [1]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(5) "protf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
 }
 Reflecting on class subprotf: 
 array(2) {
   [0]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "a"
-    ["class"]=>
-    string(8) "subprotf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "a"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
   [1]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(8) "subprotf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "protf"
   }
 }
 Reflecting on class privf: 
 array(2) {
   [0]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "a"
-    ["class"]=>
-    string(5) "privf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "a"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "privf"
   }
   [1]=>
   &object(ReflectionProperty)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(5) "privf"
+    [%u|b%"name"]=>
+    %unicode|string%(1) "s"
+    [%u|b%"class"]=>
+    %unicode|string%(5) "privf"
   }
 }
 Reflecting on class subprivf: 
 array(0) {
-}
\ No newline at end of file
+}
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_001.phpt b/ext/reflection/tests/ReflectionClass_getProperty_001.phpt
index fa5deaa..9e174b7 100644
--- a/ext/reflection/tests/ReflectionClass_getProperty_001.phpt
+++ b/ext/reflection/tests/ReflectionClass_getProperty_001.phpt
@@ -61,86 +61,86 @@ foreach($classes as $class) {
 --EXPECTF--
 Reflecting on class pubf: 
   --> Check for s: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(4) "pubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for a: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "a"
-  ["class"]=>
-  string(4) "pubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "a"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for A: Property A does not exist
   --> Check for doesntExist: Property doesntExist does not exist
 Reflecting on class subpubf: 
   --> Check for s: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(7) "subpubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for a: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "a"
-  ["class"]=>
-  string(7) "subpubf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "a"
+  [%u|b%"class"]=>
+  %unicode|string%(4) "pubf"
 }
   --> Check for A: Property A does not exist
   --> Check for doesntExist: Property doesntExist does not exist
 Reflecting on class protf: 
   --> Check for s: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(5) "protf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for a: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "a"
-  ["class"]=>
-  string(5) "protf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "a"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for A: Property A does not exist
   --> Check for doesntExist: Property doesntExist does not exist
 Reflecting on class subprotf: 
   --> Check for s: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(8) "subprotf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for a: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "a"
-  ["class"]=>
-  string(8) "subprotf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "a"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "protf"
 }
   --> Check for A: Property A does not exist
   --> Check for doesntExist: Property doesntExist does not exist
 Reflecting on class privf: 
   --> Check for s: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(5) "privf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for a: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "a"
-  ["class"]=>
-  string(5) "privf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "a"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for A: Property A does not exist
   --> Check for doesntExist: Property doesntExist does not exist
 Reflecting on class subprivf: 
   --> Check for s: object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(1) "s"
-  ["class"]=>
-  string(8) "subprivf"
+  [%u|b%"name"]=>
+  %unicode|string%(1) "s"
+  [%u|b%"class"]=>
+  %unicode|string%(5) "privf"
 }
   --> Check for a: Property a does not exist
   --> Check for A: Property A does not exist
-  --> Check for doesntExist: Property doesntExist does not exist
\ No newline at end of file
+  --> Check for doesntExist: Property doesntExist does not exist
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_003.phpt b/ext/reflection/tests/ReflectionClass_getProperty_003.phpt
index dddd226..515d986 100644
--- a/ext/reflection/tests/ReflectionClass_getProperty_003.phpt
+++ b/ext/reflection/tests/ReflectionClass_getProperty_003.phpt
@@ -97,146 +97,146 @@ showInfo("doesntexist::doesntExist");
 --EXPECTF--
 --- (Reflecting on pubA) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubA"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubA"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
-string(9) "pubA in A"
+%unicode|string%(9) "pubA in A"
 --- (Reflecting on protA) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protA"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protA"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
 Cannot access non-public member C::protA
 --- (Reflecting on privA) ---
 Property privA does not exist
 --- (Reflecting on pubB) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubB"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubB"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
-string(9) "pubB in B"
+%unicode|string%(9) "pubB in B"
 --- (Reflecting on protB) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protB"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protB"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
 Cannot access non-public member C::protB
 --- (Reflecting on privB) ---
 Property privB does not exist
 --- (Reflecting on pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::protC
 --- (Reflecting on privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::privC
 --- (Reflecting on doesntExist) ---
 Property doesntExist does not exist
 --- (Reflecting on A::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "A"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
-string(9) "pubC in A"
+%unicode|string%(9) "pubC in A"
 --- (Reflecting on A::protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "A"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
 Cannot access non-public member A::protC
 --- (Reflecting on A::privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "A"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
 Cannot access non-public member A::privC
 --- (Reflecting on B::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "B"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
-string(9) "pubC in B"
+%unicode|string%(9) "pubC in B"
 --- (Reflecting on B::protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "B"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
 Cannot access non-public member B::protC
 --- (Reflecting on B::privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "B"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
 Cannot access non-public member B::privC
 --- (Reflecting on c::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on c::PUBC) ---
 Property PUBC does not exist
 --- (Reflecting on C::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on C::protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::protC
 --- (Reflecting on C::privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::privC
 --- (Reflecting on X::pubC) ---
@@ -248,4 +248,4 @@ Fully qualified property name X::privC does not specify a base class of C
 --- (Reflecting on X::doesntExist) ---
 Fully qualified property name X::doesntExist does not specify a base class of C
 --- (Reflecting on doesntexist::doesntExist) ---
-Class doesntexist does not exist
\ No newline at end of file
+Class doesntexist does not exist
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_004.phpt b/ext/reflection/tests/ReflectionClass_getProperty_004.phpt
index 791f5e1..1070d57 100644
--- a/ext/reflection/tests/ReflectionClass_getProperty_004.phpt
+++ b/ext/reflection/tests/ReflectionClass_getProperty_004.phpt
@@ -97,146 +97,146 @@ showInfo("doesntexist::doesntExist");
 --EXPECTF--
 --- (Reflecting on pubA) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubA"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubA"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
-string(9) "pubA in A"
+%unicode|string%(9) "pubA in A"
 --- (Reflecting on protA) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protA"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protA"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
 Cannot access non-public member C::protA
 --- (Reflecting on privA) ---
 Property privA does not exist
 --- (Reflecting on pubB) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubB"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubB"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
-string(9) "pubB in B"
+%unicode|string%(9) "pubB in B"
 --- (Reflecting on protB) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protB"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protB"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
 Cannot access non-public member C::protB
 --- (Reflecting on privB) ---
 Property privB does not exist
 --- (Reflecting on pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::protC
 --- (Reflecting on privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::privC
 --- (Reflecting on doesntExist) ---
 Property doesntExist does not exist
 --- (Reflecting on A::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "A"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on A::protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "A"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
 Cannot access non-public member A::protC
 --- (Reflecting on A::privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "A"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "A"
 }
 Cannot access non-public member A::privC
 --- (Reflecting on B::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "B"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on B::protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "B"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
 Cannot access non-public member B::protC
 --- (Reflecting on B::privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "B"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "B"
 }
 Cannot access non-public member B::privC
 --- (Reflecting on c::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on c::PUBC) ---
 Property PUBC does not exist
 --- (Reflecting on C::pubC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(4) "pubC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(4) "pubC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
-string(9) "pubC in C"
+%unicode|string%(9) "pubC in C"
 --- (Reflecting on C::protC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "protC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "protC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::protC
 --- (Reflecting on C::privC) ---
 object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(5) "privC"
-  ["class"]=>
-  string(1) "C"
+  [%u|b%"name"]=>
+  %unicode|string%(5) "privC"
+  [%u|b%"class"]=>
+  %unicode|string%(1) "C"
 }
 Cannot access non-public member C::privC
 --- (Reflecting on X::pubC) ---
@@ -248,4 +248,4 @@ Fully qualified property name X::privC does not specify a base class of C
 --- (Reflecting on X::doesntExist) ---
 Fully qualified property name X::doesntExist does not specify a base class of C
 --- (Reflecting on doesntexist::doesntExist) ---
-Class doesntexist does not exist
\ No newline at end of file
+Class doesntexist does not exist
diff --git a/ext/reflection/tests/ReflectionClass_hasConstant_basic.phpt b/ext/reflection/tests/ReflectionClass_hasConstant_basic.phpt
new file mode 100644
index 0000000..4957015
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasConstant_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionClass::hasConstant()
+--CREDIT--
+Marc Veldman <marc at ibuildings.nl>
+#testfest roosendaal on 2008-05-10
+--FILE-- 
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Check if C has constant foo
+var_dump($rc->hasConstant('foo'));
+
+//C should not have constant bar
+var_dump($rc->hasConstant('bar'));
+
+Class C {
+  const foo=1;
+}
+?>
+--EXPECTF--
+bool(true)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_hasMethod_basic.phpt b/ext/reflection/tests/ReflectionClass_hasMethod_basic.phpt
new file mode 100644
index 0000000..3ef5ac9
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasMethod_basic.phpt
@@ -0,0 +1,57 @@
+--TEST--
+ReflectionClass::hasMethod()
+--CREDIT--
+Marc Veldman <marc at ibuildings.nl>
+#testfest roosendaal on 2008-05-10
+--FILE-- 
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Check if C has public method publicFoo
+var_dump($rc->hasMethod('publicFoo'));
+
+//Check if C has protected method protectedFoo
+var_dump($rc->hasMethod('protectedFoo'));
+
+//Check if C has private method privateFoo
+var_dump($rc->hasMethod('privateFoo'));
+
+//Check if C has static method staticFoo
+var_dump($rc->hasMethod('staticFoo'));
+
+//C should not have method bar
+var_dump($rc->hasMethod('bar'));
+
+//Method names are case insensitive
+var_dump($rc->hasMethod('PUBLICfOO'));
+
+Class C {
+  public function publicFoo()
+  {
+    return true;
+  }
+
+  protected function protectedFoo()
+  {
+    return true;
+  }
+
+  private function privateFoo()
+  {
+    return true;
+  }
+
+  static function staticFoo()
+  {
+    return true;
+  }
+}
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_hasProperty_basic.phpt b/ext/reflection/tests/ReflectionClass_hasProperty_basic.phpt
new file mode 100644
index 0000000..b3264e0
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasProperty_basic.phpt
@@ -0,0 +1,38 @@
+--TEST--
+ReflectionClass::hasProperty()
+--CREDIT--
+Marc Veldman <marc at ibuildings.nl>
+#testfest roosendaal on 2008-05-10
+--FILE-- 
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Check if C has public property publicFoo
+var_dump($rc->hasProperty('publicFoo'));
+
+//Check if C has protected property protectedFoo
+var_dump($rc->hasProperty('protectedFoo'));
+
+//Check if C has private property privateFoo
+var_dump($rc->hasProperty('privateFoo'));
+
+//Check if C has static property staticFoo
+var_dump($rc->hasProperty('staticFoo'));
+
+//C should not have property bar
+var_dump($rc->hasProperty('bar'));
+
+Class C {
+  public $publicFoo;
+  protected $protectedFoo;
+  private $privateFoo;
+  public static $staticFoo;
+}
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_isAbstract_basic.phpt b/ext/reflection/tests/ReflectionClass_isAbstract_basic.phpt
new file mode 100644
index 0000000..7a3d577
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isAbstract_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionClass::isAbstract() method
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher at gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+class TestClass {}
+abstract class TestAbstractClass {}
+
+$testClass = new ReflectionClass('TestClass');
+$abstractClass = new ReflectionClass('TestAbstractClass');
+
+var_dump($testClass->isAbstract());
+var_dump($abstractClass->isAbstract());
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_isFinal_basic.phpt b/ext/reflection/tests/ReflectionClass_isFinal_basic.phpt
new file mode 100644
index 0000000..efa1317
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isFinal_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionClass::isFinal() method
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher at gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+class TestClass {}
+final class TestFinalClass {}
+
+$normalClass = new ReflectionClass('TestClass');
+$finalClass = new ReflectionClass('TestFinalClass');
+
+var_dump($normalClass->isFinal());
+var_dump($finalClass->isFinal());
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_isInstance_basic.phpt b/ext/reflection/tests/ReflectionClass_isInstance_basic.phpt
new file mode 100644
index 0000000..e8b1e9d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInstance_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+ReflectionClass::isInstance()
+--FILE--
+<?php
+class A {}
+class B extends A {}
+
+interface I {}
+class C implements I {}
+
+class X {}
+
+$classes = array("A", "B", "C", "I", "X");
+
+$instances = array(	"myA" => new A,
+					"myB" => new B,
+					"myC" => new C,
+					"myX" => new X );
+
+foreach ($classes as $class) {
+	$rc = new ReflectionClass($class);
+
+	foreach ($instances as $name => $instance) {
+		echo "is $name a $class? ";
+		var_dump($rc->isInstance($instance));	
+	}
+
+}
+
+?>
+--EXPECTF--
+is myA a A? bool(true)
+is myB a A? bool(false)
+is myC a A? bool(false)
+is myX a A? bool(false)
+is myA a B? bool(false)
+is myB a B? bool(true)
+is myC a B? bool(false)
+is myX a B? bool(false)
+is myA a C? bool(false)
+is myB a C? bool(false)
+is myC a C? bool(true)
+is myX a C? bool(false)
+is myA a I? bool(false)
+is myB a I? bool(false)
+is myC a I? bool(false)
+is myX a I? bool(false)
+is myA a X? bool(false)
+is myB a X? bool(false)
+is myC a X? bool(false)
+is myX a X? bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_isInstance_error.phpt b/ext/reflection/tests/ReflectionClass_isInstance_error.phpt
new file mode 100644
index 0000000..2c4f49b
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInstance_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionClass::isInstance() - invalid params
+--FILE--
+<?php
+class X {}
+
+$rc = new ReflectionClass("X");
+$instance = new X;
+
+var_dump($rc->isInstance());
+var_dump($rc->isInstance($instance, $instance));
+var_dump($rc->isInstance(1));
+var_dump($rc->isInstance(1.5));
+var_dump($rc->isInstance(true));
+var_dump($rc->isInstance('X'));
+var_dump($rc->isInstance(null));
+
+?>
+--EXPECTF--
+Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 0 given in %s on line 7
+NULL
+
+Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 2 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, %s given in %s on line 9
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, double given in %s on line 10
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, boolean given in %s on line 11
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, string given in %s on line 12
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, null given in %s on line 13
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_isInstantiable_basic.phpt b/ext/reflection/tests/ReflectionClass_isInstantiable_basic.phpt
new file mode 100644
index 0000000..6ebcfa9
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInstantiable_basic.phpt
@@ -0,0 +1,40 @@
+--TEST--
+ReflectionClass::IsInstantiable()
+--FILE--
+<?php
+class C {
+}
+
+interface iface {
+	function f1();
+}
+
+class ifaceImpl implements iface {
+	function f1() {}
+}
+
+abstract class abstractClass {
+	function f1() {}
+	abstract function f2();
+}
+
+class D extends abstractClass {
+	function f2() {}
+}
+
+$classes = array("C", "iface", "ifaceImpl", "abstractClass", "D");
+
+foreach($classes  as $class ) {
+	$reflectionClass = new ReflectionClass($class);
+	echo "Is $class instantiable?  ";
+	var_dump($reflectionClass->IsInstantiable()); 
+
+}
+
+?>
+--EXPECTF--
+Is C instantiable?  bool(true)
+Is iface instantiable?  bool(false)
+Is ifaceImpl instantiable?  bool(true)
+Is abstractClass instantiable?  bool(false)
+Is D instantiable?  bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_isInstantiable_error.phpt b/ext/reflection/tests/ReflectionClass_isInstantiable_error.phpt
new file mode 100644
index 0000000..cc31a2f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInstantiable_error.phpt
@@ -0,0 +1,19 @@
+--TEST--
+ReflectionClass::IsInstantiable()
+--FILE--
+<?php
+class privateCtorOld {
+	private function privateCtorOld() {}
+}
+$reflectionClass = new ReflectionClass("privateCtorOld");
+
+var_dump($reflectionClass->IsInstantiable('X'));
+var_dump($reflectionClass->IsInstantiable(0, null));
+
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 7
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 8
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_isInstantiable_variation.phpt b/ext/reflection/tests/ReflectionClass_isInstantiable_variation.phpt
new file mode 100644
index 0000000..1cf3e61
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInstantiable_variation.phpt
@@ -0,0 +1,50 @@
+--TEST--
+ReflectionClass::IsInstantiable()
+--FILE--
+<?php
+class noCtor {
+}
+
+class publicCtorNew {
+	public function __construct() {}
+}
+
+class protectedCtorNew {
+	protected function __construct() {}
+}
+
+class privateCtorNew {
+	private function __construct() {}
+}
+
+class publicCtorOld {
+	public function publicCtorOld() {}
+}
+
+class protectedCtorOld {
+	protected function protectedCtorOld() {}
+}
+
+class privateCtorOld {
+	private function privateCtorOld() {}
+}
+
+
+$classes = array("noCtor", "publicCtorNew", "protectedCtorNew", "privateCtorNew",
+				 	"publicCtorOld", "protectedCtorOld", "privateCtorOld");
+
+foreach($classes  as $class ) {
+	$reflectionClass = new ReflectionClass($class);
+	echo "Is $class instantiable?  ";
+	var_dump($reflectionClass->IsInstantiable()); 
+}
+
+?>
+--EXPECTF--
+Is noCtor instantiable?  bool(true)
+Is publicCtorNew instantiable?  bool(true)
+Is protectedCtorNew instantiable?  bool(false)
+Is privateCtorNew instantiable?  bool(false)
+Is publicCtorOld instantiable?  bool(true)
+Is protectedCtorOld instantiable?  bool(false)
+Is privateCtorOld instantiable?  bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_isInterface_basic.phpt b/ext/reflection/tests/ReflectionClass_isInterface_basic.phpt
new file mode 100644
index 0000000..2870725
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInterface_basic.phpt
@@ -0,0 +1,27 @@
+--TEST--
+ReflectionClass::isInterface() method
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher at gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+interface TestInterface {}
+class TestClass {}
+interface DerivedInterface extends TestInterface {}
+
+$reflectionClass = new ReflectionClass('TestInterface');
+$reflectionClass2 = new ReflectionClass('TestClass');
+$reflectionClass3 = new ReflectionClass('DerivedInterface');
+
+var_dump($reflectionClass->isInterface());
+var_dump($reflectionClass2->isInterface());
+var_dump($reflectionClass3->isInterface());
+
+?>
+--EXPECT--
+bool(true)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_isInternal_basic.phpt b/ext/reflection/tests/ReflectionClass_isInternal_basic.phpt
new file mode 100644
index 0000000..2eaacb6
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInternal_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+ReflectionClass::isInternal()
+--FILE--
+<?php
+class C {
+}
+
+$r1 = new ReflectionClass("stdClass");
+$r2 = new ReflectionClass("ReflectionClass");
+$r3 = new ReflectionClass("ReflectionProperty");
+$r4 = new ReflectionClass("Exception");
+$r5 = new ReflectionClass("C");
+
+var_dump($r1->isInternal(), $r2->isInternal(), $r3->isInternal(), 
+		 $r4->isInternal(), $r5->isInternal());
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_isInternal_error.phpt b/ext/reflection/tests/ReflectionClass_isInternal_error.phpt
new file mode 100644
index 0000000..b1117e8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isInternal_error.phpt
@@ -0,0 +1,14 @@
+--TEST--
+ReflectionClass::isInternal() - invalid params
+--FILE--
+<?php
+$r1 = new ReflectionClass("stdClass");
+var_dump($r1->isInternal('X'));
+var_dump($r1->isInternal('X', true));
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 3
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 4
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_isIterateable_basic.phpt b/ext/reflection/tests/ReflectionClass_isIterateable_basic.phpt
new file mode 100644
index 0000000..c5fc434
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isIterateable_basic.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionClass::isIterateable() basic
+--SKIPIF--
+<?php (extension_loaded('reflection') && extension_loaded('spl')) or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher at gmail.com>, Marc Veldman <marc at ibuildings.nl>
+--FILE--
+<?php
+
+class IteratorClass implements Iterator {
+	public function __construct() { }
+	public function key() {}
+	public function current() {}
+	function next()	{}
+	function valid() {}
+	function rewind() {}
+}
+class DerivedClass extends IteratorClass {}
+class NonIterator {}
+
+function dump_iterateable($class) {
+	$reflection = new ReflectionClass($class);
+	var_dump($reflection->isIterateable());
+}
+
+$classes = array("ArrayObject", "IteratorClass", "DerivedClass", "NonIterator");
+foreach ($classes as $class) {
+	echo "Is $class iterateable? ";
+	dump_iterateable($class);
+}
+?>
+--EXPECT--
+Is ArrayObject iterateable? bool(true)
+Is IteratorClass iterateable? bool(true)
+Is DerivedClass iterateable? bool(true)
+Is NonIterator iterateable? bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_isIterateable_variation1.phpt b/ext/reflection/tests/ReflectionClass_isIterateable_variation1.phpt
new file mode 100644
index 0000000..6d737bb
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isIterateable_variation1.phpt
@@ -0,0 +1,27 @@
+--TEST--
+ReflectionClass::isIterateable() variations
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher at gmail.com>
+--FILE--
+<?php
+
+class BasicClass {}
+
+function dump_iterateable($obj)
+{
+	$reflection = new ReflectionClass($obj);
+	var_dump($reflection->isIterateable());
+}
+
+$basicClass = new BasicClass();
+$stdClass = new StdClass();
+
+dump_iterateable($basicClass);
+dump_iterateable($stdClass);
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_isSubclassOf_basic.phpt b/ext/reflection/tests/ReflectionClass_isSubclassOf_basic.phpt
new file mode 100644
index 0000000..94fcf00
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isSubclassOf_basic.phpt
@@ -0,0 +1,103 @@
+--TEST--
+ReflectionClass::isSubclassOf()
+--FILE--
+<?php
+class A {}
+class B extends A {}
+class C extends B {}
+
+interface I {}
+class X implements I {}
+
+$classNames = array('A', 'B', 'C', 'I', 'X'); 
+
+foreach ($classNames as $className) {
+	$rcs[$className] = new ReflectionClass($className);
+}
+
+foreach ($rcs as $childName => $child) {
+	foreach ($rcs as $parentName => $parent) {
+		echo "Is " . $childName . " a subclass of " . $parentName . "? \n";
+		echo "   - Using object argument: ";
+		var_dump($child->isSubclassOf($parent));
+		echo "   - Using string argument: ";
+		var_dump($child->isSubclassOf($parentName)); 
+	}
+}
+?>
+--EXPECTF--
+Is A a subclass of A? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of B? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of C? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of I? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of X? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of A? 
+   - Using object argument: bool(true)
+   - Using string argument: bool(true)
+Is B a subclass of B? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of C? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of I? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of X? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is C a subclass of A? 
+   - Using object argument: bool(true)
+   - Using string argument: bool(true)
+Is C a subclass of B? 
+   - Using object argument: bool(true)
+   - Using string argument: bool(true)
+Is C a subclass of C? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is C a subclass of I? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is C a subclass of X? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is I a subclass of A? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is I a subclass of B? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is I a subclass of C? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is I a subclass of I? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is I a subclass of X? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of A? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of B? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of C? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of I? 
+   - Using object argument: bool(true)
+   - Using string argument: bool(true)
+Is X a subclass of X? 
+   - Using object argument: bool(false)
+   - Using string argument: bool(false)
diff --git a/ext/reflection/tests/ReflectionClass_isSubclassOf_error.phpt b/ext/reflection/tests/ReflectionClass_isSubclassOf_error.phpt
new file mode 100644
index 0000000..7d929fa
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isSubclassOf_error.phpt
@@ -0,0 +1,17 @@
+--TEST--
+ReflectionClass::isSubclassOf() - invalid number of parameters
+--FILE--
+<?php
+class A {}
+$rc = new ReflectionClass('A');
+
+var_dump($rc->isSubclassOf());
+var_dump($rc->isSubclassOf('A',5));
+
+?>
+--EXPECTF--
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 0 given in %s on line 5
+NULL
+
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 2 given in %s on line 6
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_isSubclassOf_error1.phpt b/ext/reflection/tests/ReflectionClass_isSubclassOf_error1.phpt
new file mode 100644
index 0000000..2fabd02
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isSubclassOf_error1.phpt
@@ -0,0 +1,16 @@
+--TEST--
+ReflectionClass::isSubclassOf() - non-existent class error
+--FILE--
+<?php
+class A {}
+$rc = new ReflectionClass('A');
+
+var_dump($rc->isSubclassOf('X'));
+
+?>
+--EXPECTF--
+Fatal error: Uncaught exception 'ReflectionException' with message 'Class X does not exist' in %s:5
+Stack trace:
+#0 %s(5): ReflectionClass->isSubclassOf('X')
+#1 {main}
+  thrown in %s on line 5
diff --git a/ext/reflection/tests/ReflectionClass_isUserDefined_basic.phpt b/ext/reflection/tests/ReflectionClass_isUserDefined_basic.phpt
new file mode 100644
index 0000000..af43fce
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isUserDefined_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+ReflectionClass::isUserDefined()
+--FILE--
+<?php
+class C {
+}
+
+$r1 = new ReflectionClass("stdClass");
+$r2 = new ReflectionClass("ReflectionClass");
+$r3 = new ReflectionClass("ReflectionProperty");
+$r4 = new ReflectionClass("Exception");
+$r5 = new ReflectionClass("C");
+
+var_dump($r1->isUserDefined(), $r2->isUserDefined(), $r3->isUserDefined(), 
+		 $r4->isUserDefined(), $r5->isUserDefined());
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/ReflectionClass_isUserDefined_error.phpt b/ext/reflection/tests/ReflectionClass_isUserDefined_error.phpt
new file mode 100644
index 0000000..077e4d6
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isUserDefined_error.phpt
@@ -0,0 +1,14 @@
+--TEST--
+ReflectionClass::isUserDefined() - invalid params.
+--FILE--
+<?php
+$r1 = new ReflectionClass("stdClass");
+var_dump($r1->isUserDefined('X'));
+var_dump($r1->isUserDefined('X', true));
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 3
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 4
+NULL
diff --git a/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt b/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt
index 74b96f8..12cb5b7 100644
--- a/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt
+++ b/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt
@@ -156,71 +156,71 @@ Modifiers for method TestClass::__autoload():
 int(65792)
 
 
-Modifiers for method DerivedClass::foo():
+Modifiers for method TestClass::foo():
 int(65792)
 
 
-Modifiers for method DerivedClass::stat():
+Modifiers for method TestClass::stat():
 int(257)
 
 
-Modifiers for method DerivedClass::priv():
+Modifiers for method TestClass::priv():
 int(66560)
 
 
-Modifiers for method DerivedClass::prot():
+Modifiers for method TestClass::prot():
 int(66048)
 
 
-Modifiers for method DerivedClass::fin():
+Modifiers for method TestClass::fin():
 int(65796)
 
 
-Modifiers for method DerivedClass::__destruct():
+Modifiers for method TestClass::__destruct():
 int(16640)
 
 
-Modifiers for method DerivedClass::__call():
+Modifiers for method TestClass::__call():
 int(256)
 
 
-Modifiers for method DerivedClass::__clone():
+Modifiers for method TestClass::__clone():
 int(33024)
 
 
-Modifiers for method DerivedClass::__get():
+Modifiers for method TestClass::__get():
 int(256)
 
 
-Modifiers for method DerivedClass::__set():
+Modifiers for method TestClass::__set():
 int(256)
 
 
-Modifiers for method DerivedClass::__unset():
+Modifiers for method TestClass::__unset():
 int(256)
 
 
-Modifiers for method DerivedClass::__isset():
+Modifiers for method TestClass::__isset():
 int(256)
 
 
-Modifiers for method DerivedClass::__tostring():
+Modifiers for method TestClass::__tostring():
 int(256)
 
 
-Modifiers for method DerivedClass::__sleep():
+Modifiers for method TestClass::__sleep():
 int(65792)
 
 
-Modifiers for method DerivedClass::__wakeup():
+Modifiers for method TestClass::__wakeup():
 int(65792)
 
 
-Modifiers for method DerivedClass::__set_state():
+Modifiers for method TestClass::__set_state():
 int(65792)
 
 
-Modifiers for method DerivedClass::__autoload():
+Modifiers for method TestClass::__autoload():
 int(65792)
 
 
diff --git a/ext/reflection/tests/ReflectionObject_FileInfo_basic.phpt b/ext/reflection/tests/ReflectionObject_FileInfo_basic.phpt
new file mode 100644
index 0000000..00214dc
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_FileInfo_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+ReflectionObject::getFileName(), ReflectionObject::getStartLine(), ReflectionObject::getEndLine() - basic function
+--FILE-- 
+<?php
+$rc = new ReflectionObject(new C);
+var_dump($rc->getFileName());
+var_dump($rc->getStartLine());
+var_dump($rc->getEndLine());
+
+$rc = new ReflectionObject(new stdclass);
+var_dump($rc->getFileName());
+var_dump($rc->getStartLine());
+var_dump($rc->getEndLine());
+
+Class C {
+
+}
+?>
+--EXPECTF--
+string(%d) "%sReflectionObject_FileInfo_basic.php"
+int(12)
+int(14)
+bool(false)
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionObject_FileInfo_error.phpt b/ext/reflection/tests/ReflectionObject_FileInfo_error.phpt
new file mode 100644
index 0000000..f66d2fb
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_FileInfo_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+ReflectionObject::getFileName(), ReflectionObject::getStartLine(), ReflectionObject::getEndLine() -invalid aparams 
+--FILE-- 
+<?php
+Class C { }
+
+$rc = new ReflectionObject(new C);
+$methods = array("getFileName", "getStartLine", "getEndLine");
+
+foreach ($methods as $method) {
+	var_dump($rc->$method());
+	var_dump($rc->$method(null));
+	var_dump($rc->$method('X', 0));	
+}
+?>
+--EXPECTF--
+string(%d) "%s"
+
+Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 10
+NULL
+int(2)
+
+Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 10
+NULL
+int(2)
+
+Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 10
+NULL
diff --git a/ext/reflection/tests/ReflectionObject___toString_basic1.phpt b/ext/reflection/tests/ReflectionObject___toString_basic1.phpt
new file mode 100644
index 0000000..fefa220
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject___toString_basic1.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionObject::__toString() : very basic test with no dynamic properties
+--FILE--
+<?php
+
+class Foo  {
+	public $bar = 1;
+}
+$f = new foo;
+
+echo new ReflectionObject($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+  @@ %s 3-5
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [1] {
+    Property [ <default> public $bar ]
+  }
+
+  - Dynamic properties [0] {
+  }
+
+  - Methods [0] {
+  }
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionObject___toString_basic2.phpt b/ext/reflection/tests/ReflectionObject___toString_basic2.phpt
new file mode 100644
index 0000000..332386a
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject___toString_basic2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionObject::__toString() : very basic test with dynamic properties
+--FILE--
+<?php
+
+class Foo  {
+	public $bar = 1;
+}
+$f = new foo;
+$f->dynProp = 'hello';
+$f->dynProp2 = 'hello again';
+echo new ReflectionObject($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+  @@ %s 3-5
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [1] {
+    Property [ <default> public $bar ]
+  }
+
+  - Dynamic properties [2] {
+    Property [ <dynamic> public $dynProp ]
+    Property [ <dynamic> public $dynProp2 ]
+  }
+
+  - Methods [0] {
+  }
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionObject_constructor_basic.phpt b/ext/reflection/tests/ReflectionObject_constructor_basic.phpt
new file mode 100644
index 0000000..8f4a908
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_constructor_basic.phpt
@@ -0,0 +1,28 @@
+--TEST--
+ReflectionObject::__construct - basic function test
+--FILE--
+<?php
+$r1 = new ReflectionObject(new stdClass);
+var_dump($r1);
+
+class C { }
+$myInstance = new C;
+$r2 = new ReflectionObject($myInstance);
+var_dump($r2);
+
+$r3 = new ReflectionObject($r2);
+var_dump($r3);
+?>
+--EXPECTF--
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(8) "stdClass"
+}
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(1) "C"
+}
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(16) "ReflectionObject"
+}
diff --git a/ext/reflection/tests/ReflectionObject_constructor_error.phpt b/ext/reflection/tests/ReflectionObject_constructor_error.phpt
new file mode 100644
index 0000000..baa6129
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_constructor_error.phpt
@@ -0,0 +1,49 @@
+--TEST--
+ReflectionObject::__construct - invalid arguments
+--FILE--
+<?php
+
+var_dump(new ReflectionObject());
+var_dump(new ReflectionObject('stdClass'));
+$myInstance = new stdClass;
+var_dump(new ReflectionObject($myInstance, $myInstance));
+var_dump(new ReflectionObject(0));
+var_dump(new ReflectionObject(null));
+var_dump(new ReflectionObject(array(1,2)));
+?>
+--EXPECTF--
+Warning: ReflectionObject::__construct() expects exactly 1 parameter, 0 given in %s on line 3
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+
+Warning: ReflectionObject::__construct() expects parameter 1 to be object, string given in %s on line 4
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+
+Warning: ReflectionObject::__construct() expects exactly 1 parameter, 2 given in %s on line 6
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+
+Warning: ReflectionObject::__construct() expects parameter 1 to be object, integer given in %s on line 7
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+
+Warning: ReflectionObject::__construct() expects parameter 1 to be object, null given in %s on line 8
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
+
+Warning: ReflectionObject::__construct() expects parameter 1 to be object, array given in %s on line 9
+object(ReflectionObject)#%d (1) {
+  ["name"]=>
+  string(0) ""
+}
diff --git a/ext/reflection/tests/ReflectionObject_export_basic1.phpt b/ext/reflection/tests/ReflectionObject_export_basic1.phpt
new file mode 100644
index 0000000..f7dfef8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_export_basic1.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionObject::export() : very basic test with no dynamic properties
+--FILE--
+<?php
+
+class Foo  {
+	public $bar = 1;
+}
+$f = new foo;
+
+ReflectionObject::export($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+  @@ %s 3-5
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [1] {
+    Property [ <default> public $bar ]
+  }
+
+  - Dynamic properties [0] {
+  }
+
+  - Methods [0] {
+  }
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionObject_export_basic2.phpt b/ext/reflection/tests/ReflectionObject_export_basic2.phpt
new file mode 100644
index 0000000..277f06e
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_export_basic2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionObject::export() : very basic test with dynamic properties
+--FILE--
+<?php
+
+class Foo  {
+	public $bar = 1;
+}
+$f = new foo;
+$f->dynProp = 'hello';
+$f->dynProp2 = 'hello again';
+ReflectionObject::export($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+  @@ %s 3-5
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [1] {
+    Property [ <default> public $bar ]
+  }
+
+  - Dynamic properties [2] {
+    Property [ <dynamic> public $dynProp ]
+    Property [ <dynamic> public $dynProp2 ]
+  }
+
+  - Methods [0] {
+  }
+}
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionObject_export_basic3.phpt b/ext/reflection/tests/ReflectionObject_export_basic3.phpt
new file mode 100644
index 0000000..7c1da34
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_export_basic3.phpt
@@ -0,0 +1,38 @@
+--TEST--
+ReflectionObject::export() - ensure dynamic property with same name as inherited private property is shown. 
+--FILE--
+<?php
+class C {
+	private $p = 1;
+}
+
+class D extends C{
+}
+
+$Obj = new D;
+$Obj->p = 'value';
+ReflectionObject::export($Obj)
+?>
+--EXPECTF--
+Object of class [ <user> class D extends C ] {
+  @@ %s 6-7
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [0] {
+  }
+
+  - Dynamic properties [0] {
+  }
+
+  - Methods [0] {
+  }
+}
+
diff --git a/ext/reflection/tests/ReflectionObject_getConstant_basic.phpt b/ext/reflection/tests/ReflectionObject_getConstant_basic.phpt
new file mode 100644
index 0000000..3d151bc
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getConstant_basic.phpt
@@ -0,0 +1,41 @@
+--TEST--
+ReflectionObject::getConstant() basic function test
+--FILE--
+<?php
+class C {
+	const a = 'hello from C';
+}
+class D extends C {
+}
+class E extends D {
+}
+class F extends E {
+	const a = 'hello from F';
+}
+class X {
+}
+
+$classes = array("C", "D", "E", "F", "X");
+foreach($classes as $class) {
+	echo "Reflecting on instance of class $class: \n";
+	$rc = new ReflectionObject(new $class);
+	var_dump($rc->getConstant('a'));
+	var_dump($rc->getConstant('doesntexist'));
+}
+?>
+--EXPECTF--
+Reflecting on instance of class C: 
+string(12) "hello from C"
+bool(false)
+Reflecting on instance of class D: 
+string(12) "hello from C"
+bool(false)
+Reflecting on instance of class E: 
+string(12) "hello from C"
+bool(false)
+Reflecting on instance of class F: 
+string(12) "hello from F"
+bool(false)
+Reflecting on instance of class X: 
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionObject_getConstant_error.phpt b/ext/reflection/tests/ReflectionObject_getConstant_error.phpt
new file mode 100644
index 0000000..3f12f3a
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getConstant_error.phpt
@@ -0,0 +1,34 @@
+--TEST--
+ReflectionObject::getConstant() - invalid params
+--FILE--
+<?php
+class C {
+	const myConst = 1;
+}
+
+$rc = new ReflectionObject(new C);
+var_dump($rc->getConstant());
+var_dump($rc->getConstant("myConst", "myConst"));
+var_dump($rc->getConstant(null));
+var_dump($rc->getConstant(1));
+var_dump($rc->getConstant(1.5));
+var_dump($rc->getConstant(true));
+var_dump($rc->getConstant(array(1,2,3)));
+var_dump($rc->getConstant(new C));
+?>
+--EXPECTF--
+Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 0 given in %s on line 7
+NULL
+
+Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 2 given in %s on line 8
+NULL
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: ReflectionClass::getConstant() expects parameter 1 to be string, array given in %s on line 13
+NULL
+
+Warning: ReflectionClass::getConstant() expects parameter 1 to be string, object given in %s on line 14
+NULL
diff --git a/ext/reflection/tests/ReflectionObject_getConstants_basic.phpt b/ext/reflection/tests/ReflectionObject_getConstants_basic.phpt
new file mode 100644
index 0000000..6479ec9
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getConstants_basic.phpt
@@ -0,0 +1,49 @@
+--TEST--
+ReflectionObject::getConstants() - basic function test 
+--FILE--
+<?php
+class C {
+	const a = 'hello from C';
+}
+class D extends C {
+}
+class E extends D {
+}
+class F extends E {
+	const a = 'hello from F';
+}
+class X {
+}
+
+$classes = array("C", "D", "E", "F", "X");
+foreach($classes as $class) {
+	echo "Reflecting on instance of class $class: \n";
+	$rc = new ReflectionObject(new $class);
+	var_dump($rc->getConstants());
+}
+
+?>
+--EXPECTF--
+Reflecting on instance of class C: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from C"
+}
+Reflecting on instance of class D: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from C"
+}
+Reflecting on instance of class E: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from C"
+}
+Reflecting on instance of class F: 
+array(1) {
+  ["a"]=>
+  string(12) "hello from F"
+}
+Reflecting on instance of class X: 
+array(0) {
+}
diff --git a/ext/reflection/tests/ReflectionObject_getConstants_error.phpt b/ext/reflection/tests/ReflectionObject_getConstants_error.phpt
new file mode 100644
index 0000000..81ec9ed
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getConstants_error.phpt
@@ -0,0 +1,18 @@
+--TEST--
+ReflectionObject::getConstants() - invalid params
+--FILE--
+<?php
+class X {
+}
+
+$rc = new ReflectionObject(new X);
+
+$rc->getConstants('X');
+$rc->getConstants(true);
+
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 7
+
+Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 8
+
diff --git a/ext/reflection/tests/ReflectionObject_getConstructor_basic.phpt b/ext/reflection/tests/ReflectionObject_getConstructor_basic.phpt
new file mode 100644
index 0000000..a784f6d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getConstructor_basic.phpt
@@ -0,0 +1,82 @@
+--TEST--
+ReflectionObject::getConstructor() - basic function test
+--FILE--
+<?php
+class NewCtor {
+	function __construct() {}
+}
+
+class ExtendsNewCtor extends NewCtor {
+}
+
+class OldCtor {
+	function OldCtor() {}
+}
+
+class ExtendsOldCtor extends OldCtor {
+}
+
+
+class X {
+	function Y() {}
+}
+
+class Y extends X {
+}
+
+class OldAndNewCtor {
+	function OldAndNewCtor() {}
+	function __construct() {}
+}
+
+class NewAndOldCtor {
+	function __construct() {}
+	function NewAndOldCtor() {}
+}
+class B {
+	function B() {}
+}
+
+class C extends B {
+	function C() {}
+}
+
+class D1 extends C {
+	function __construct() {}
+}
+
+class D2 extends C {
+}
+
+$classes = array('NewCtor', 'ExtendsNewCtor', 'OldCtor', 'ExtendsOldCtor', 
+				 'OldAndNewCtor', 'NewAndOldCtor', 'B', 'C', 'D1', 'D2', 'X', 'Y');
+
+foreach ($classes as $class) {
+	$rc = new ReflectionObject(new $class);
+	$rm = $rc->getConstructor();
+	if ($rm != null) {
+		echo "Constructor of $class: " . $rm->getName() . "\n";
+	}  else {
+		echo "No constructor for $class\n";
+	}
+	
+}				 
+				
+?>
+--EXPECTF--
+
+Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line 26
+
+Strict Standards: %s for class NewAndOldCtor in %s on line 31
+Constructor of NewCtor: __construct
+Constructor of ExtendsNewCtor: __construct
+Constructor of OldCtor: OldCtor
+Constructor of ExtendsOldCtor: OldCtor
+Constructor of OldAndNewCtor: __construct
+Constructor of NewAndOldCtor: __construct
+Constructor of B: B
+Constructor of C: C
+Constructor of D1: __construct
+Constructor of D2: C
+No constructor for X
+No constructor for Y
diff --git a/ext/reflection/tests/ReflectionObject_getConstructor_error.phpt b/ext/reflection/tests/ReflectionObject_getConstructor_error.phpt
new file mode 100644
index 0000000..5cabc2e
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getConstructor_error.phpt
@@ -0,0 +1,24 @@
+--TEST--
+ReflectionObject::getConstructor() - invalid params
+--FILE--
+<?php
+class C {}
+$rc = new ReflectionObject(new C);
+var_dump($rc->getConstructor(null));
+var_dump($rc->getConstructor('X'));
+var_dump($rc->getConstructor(true));
+var_dump($rc->getConstructor(array(1,2,3)));
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 7
+NULL
diff --git a/ext/reflection/tests/ReflectionObject_getName_basic.phpt b/ext/reflection/tests/ReflectionObject_getName_basic.phpt
new file mode 100644
index 0000000..db0cbfb
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getName_basic.phpt
@@ -0,0 +1,27 @@
+--TEST--
+ReflectionObject::getName() - basic function test
+--FILE--
+<?php
+$r0 = new ReflectionObject();
+var_dump($r0->getName());
+
+$r1 = new ReflectionObject(new stdClass);
+var_dump($r1->getName());
+
+class C { }
+$myInstance = new C;
+$r2 = new ReflectionObject($myInstance);
+var_dump($r2->getName());
+
+$r3 = new ReflectionObject($r2);
+var_dump($r3->getName());
+
+?>
+--EXPECTF--
+
+Warning: ReflectionObject::__construct() expects exactly 1 parameter, 0 given in %s on line 2
+string(0) ""
+string(8) "stdClass"
+string(1) "C"
+string(16) "ReflectionObject"
+
diff --git a/ext/reflection/tests/ReflectionObject_getName_error.phpt b/ext/reflection/tests/ReflectionObject_getName_error.phpt
new file mode 100644
index 0000000..eb64244
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getName_error.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionObject::getname() - invalid params
+--FILE--
+<?php
+class C { }
+$myInstance = new C;
+$r2 = new ReflectionObject($myInstance);
+
+$r3 = new ReflectionObject($r2);
+
+var_dump($r3->getName(null));
+var_dump($r3->getName('x','y'));
+var_dump($r3->getName(0));
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 8
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 10
+NULL
diff --git a/ext/reflection/tests/ReflectionObject_getName_error1.phpt b/ext/reflection/tests/ReflectionObject_getName_error1.phpt
new file mode 100644
index 0000000..26c342d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_getName_error1.phpt
@@ -0,0 +1,8 @@
+--TEST--
+ReflectionObject::getName - forbid static invocation
+--FILE--
+<?php
+ReflectionObject::getName();
+?> 
+--EXPECTF--
+Fatal error: Non-static method ReflectionClass::getName() cannot be called statically in %s on line 2
diff --git a/ext/reflection/tests/ReflectionObject_isInstance_basic.phpt b/ext/reflection/tests/ReflectionObject_isInstance_basic.phpt
new file mode 100644
index 0000000..51d42fd
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInstance_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+ReflectionObject::isInstance() - basic function test
+--FILE--
+<?php
+class A {}
+class B extends A {}
+class X {}
+
+$classes = array("A", "B", "X");
+
+$instances = array(	"myA" => new A,
+					"myB" => new B,
+					"myX" => new X );
+
+foreach ($classes as $class) {
+	$ro = new ReflectionObject(new $class);
+	foreach ($instances as $name => $instance) {
+		echo "is $name a $class? ";
+		var_dump($ro->isInstance($instance));	
+	}
+}
+
+?>
+--EXPECTF--
+is myA a A? bool(true)
+is myB a A? bool(false)
+is myX a A? bool(false)
+is myA a B? bool(false)
+is myB a B? bool(true)
+is myX a B? bool(false)
+is myA a X? bool(false)
+is myB a X? bool(false)
+is myX a X? bool(true)
diff --git a/ext/reflection/tests/ReflectionObject_isInstance_error.phpt b/ext/reflection/tests/ReflectionObject_isInstance_error.phpt
new file mode 100644
index 0000000..692c2f8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInstance_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+ReflectionObject::isInstance() - invalid params
+--FILE--
+<?php
+class X {}
+$instance = new X;
+$ro = new ReflectionObject(new X);
+
+var_dump($ro->isInstance());
+var_dump($ro->isInstance($instance, $instance));
+var_dump($ro->isInstance(1));
+var_dump($ro->isInstance(1.5));
+var_dump($ro->isInstance(true));
+var_dump($ro->isInstance('X'));
+var_dump($ro->isInstance(null));
+
+?>
+--EXPECTF--
+Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 0 given in %s on line 6
+NULL
+
+Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 2 given in %s on line 7
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, integer given in %s on line 8
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, double given in %s on line 9
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, boolean given in %s on line 10
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, string given in %s on line 11
+NULL
+
+Warning: ReflectionClass::isInstance() expects parameter 1 to be object, null given in %s on line 12
+NULL
diff --git a/ext/reflection/tests/ReflectionObject_isInstantiable_basic.phpt b/ext/reflection/tests/ReflectionObject_isInstantiable_basic.phpt
new file mode 100644
index 0000000..4b8a6ec
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInstantiable_basic.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionObject::IsInstantiable() - basic function test
+--FILE--
+<?php
+class C {
+}
+
+interface iface {
+	function f1();
+}
+
+class ifaceImpl implements iface {
+	function f1() {}
+}
+
+abstract class abstractClass {
+	function f1() {}
+	abstract function f2();
+}
+
+class D extends abstractClass {
+	function f2() {}
+}
+
+$classes = array("C", "ifaceImpl", "D");
+
+foreach($classes  as $class ) {
+	$ro = new ReflectionObject(new $class);
+	echo "Is $class instantiable?  ";
+	var_dump($ro->IsInstantiable()); 
+}
+?>
+--EXPECTF--
+Is C instantiable?  bool(true)
+Is ifaceImpl instantiable?  bool(true)
+Is D instantiable?  bool(true)
diff --git a/ext/reflection/tests/ReflectionObject_isInstantiable_error.phpt b/ext/reflection/tests/ReflectionObject_isInstantiable_error.phpt
new file mode 100644
index 0000000..8f418ac
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInstantiable_error.phpt
@@ -0,0 +1,22 @@
+--TEST--
+ReflectionObject::IsInstantiable() - invalid params
+--FILE--
+<?php
+class privateCtorOld {
+	private function privateCtorOld() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+$reflectionObject =  privateCtorOld::reflectionObjectFactory();
+
+var_dump($reflectionObject->IsInstantiable('X'));
+var_dump($reflectionObject->IsInstantiable(0, null));
+
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 10
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 11
+NULL
diff --git a/ext/reflection/tests/ReflectionObject_isInstantiable_variation.phpt b/ext/reflection/tests/ReflectionObject_isInstantiable_variation.phpt
new file mode 100644
index 0000000..ac7199c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInstantiable_variation.phpt
@@ -0,0 +1,78 @@
+--TEST--
+ReflectionObject::IsInstantiable() - variation - constructors
+--FILE--
+<?php
+
+class noCtor {
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+class publicCtorNew {
+	public function __construct() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+class protectedCtorNew {
+	protected function __construct() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+class privateCtorNew {
+	private function __construct() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+class publicCtorOld {
+	public function publicCtorOld() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+class protectedCtorOld {
+	protected function protectedCtorOld() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+class privateCtorOld {
+	private function privateCtorOld() {}
+	public static function reflectionObjectFactory() {
+		return new ReflectionObject(new self);
+	}	
+}
+
+
+$reflectionObjects = array(
+		noCtor::reflectionObjectFactory(),
+		publicCtorNew::reflectionObjectFactory(),
+		protectedCtorNew::reflectionObjectFactory(),
+		privateCtorNew::reflectionObjectFactory(),
+		publicCtorOld::reflectionObjectFactory(), 
+		protectedCtorOld::reflectionObjectFactory(),
+		privateCtorOld::reflectionObjectFactory()
+	);
+
+foreach($reflectionObjects  as $reflectionObject ) {
+	$name = $reflectionObject->getName();
+	echo "Is $name instantiable? ";
+	var_dump($reflectionObject->IsInstantiable()); 
+}
+?>
+--EXPECTF--
+Is noCtor instantiable? bool(true)
+Is publicCtorNew instantiable? bool(true)
+Is protectedCtorNew instantiable? bool(false)
+Is privateCtorNew instantiable? bool(false)
+Is publicCtorOld instantiable? bool(true)
+Is protectedCtorOld instantiable? bool(false)
+Is privateCtorOld instantiable? bool(false)
diff --git a/ext/reflection/tests/ReflectionObject_isInternal_basic.phpt b/ext/reflection/tests/ReflectionObject_isInternal_basic.phpt
new file mode 100644
index 0000000..066bca7
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInternal_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionObject::isInternal() - basic function test
+--FILE--
+<?php
+class C {
+}
+
+$r1 = new ReflectionObject(new stdClass);
+$r2 = new ReflectionObject(new ReflectionClass('C'));
+$r3 = new ReflectionObject(new ReflectionProperty('Exception', 'message'));
+$r4 = new ReflectionObject(new Exception);
+$r5 = new ReflectionObject(new C);
+
+var_dump($r1->isInternal(), $r2->isInternal(), $r3->isInternal(), 
+		 $r4->isInternal(), $r5->isInternal());
+
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/reflection/tests/ReflectionObject_isInternal_error.phpt b/ext/reflection/tests/ReflectionObject_isInternal_error.phpt
new file mode 100644
index 0000000..c22d748
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isInternal_error.phpt
@@ -0,0 +1,15 @@
+--TEST--
+ReflectionObject::isInternal() - invalid params
+--FILE--
+<?php
+
+$r1 = new ReflectionObject(new stdClass);
+var_dump($r1->isInternal('X'));
+var_dump($r1->isInternal('X', true));
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 5
+NULL
diff --git a/ext/reflection/tests/ReflectionObject_isSubclassOf_basic.phpt b/ext/reflection/tests/ReflectionObject_isSubclassOf_basic.phpt
new file mode 100644
index 0000000..e89066a
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isSubclassOf_basic.phpt
@@ -0,0 +1,116 @@
+--TEST--
+ReflectionObject::isSubclassOf() - basic function test
+--FILE--
+<?php
+class A {}
+class B extends A {}
+class C extends B {}
+
+interface I {}
+class X implements I {}
+
+$classNames = array('A', 'B', 'C', 'I', 'X'); 
+
+//Create ReflectionClasses
+foreach ($classNames as $className) {
+	$rcs[$className] = new ReflectionClass($className);
+}
+
+//Create ReflectionObjects
+foreach ($classNames as $className) {
+	if ($rcs[$className]->isInstantiable()) {
+		$ros[$className] = new ReflectionObject(new $className);
+	}
+}
+
+foreach ($ros as $childName => $child) {
+	foreach ($rcs as $parentName => $parent) {
+		echo "Is " . $childName . " a subclass of " . $parentName . "? \n";
+		echo "   - Using ReflectionClass object argument: ";
+		var_dump($child->isSubclassOf($parent));
+		if ($parent->isInstantiable()) {
+			echo "   - Using ReflectionObject object argument: ";
+			var_dump($child->isSubclassOf($ros[$parentName]));
+		}
+		echo "   - Using string argument: ";
+		var_dump($child->isSubclassOf($parentName)); 
+	}
+}
+?>
+--EXPECTF--
+Is A a subclass of A? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of B? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of C? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of I? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using string argument: bool(false)
+Is A a subclass of X? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of A? 
+   - Using ReflectionClass object argument: bool(true)
+   - Using ReflectionObject object argument: bool(true)
+   - Using string argument: bool(true)
+Is B a subclass of B? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of C? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of I? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using string argument: bool(false)
+Is B a subclass of X? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is C a subclass of A? 
+   - Using ReflectionClass object argument: bool(true)
+   - Using ReflectionObject object argument: bool(true)
+   - Using string argument: bool(true)
+Is C a subclass of B? 
+   - Using ReflectionClass object argument: bool(true)
+   - Using ReflectionObject object argument: bool(true)
+   - Using string argument: bool(true)
+Is C a subclass of C? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is C a subclass of I? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using string argument: bool(false)
+Is C a subclass of X? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of A? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of B? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of C? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
+Is X a subclass of I? 
+   - Using ReflectionClass object argument: bool(true)
+   - Using string argument: bool(true)
+Is X a subclass of X? 
+   - Using ReflectionClass object argument: bool(false)
+   - Using ReflectionObject object argument: bool(false)
+   - Using string argument: bool(false)
diff --git a/ext/reflection/tests/ReflectionObject_isSubclassOf_error.phpt b/ext/reflection/tests/ReflectionObject_isSubclassOf_error.phpt
new file mode 100644
index 0000000..9387b7d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isSubclassOf_error.phpt
@@ -0,0 +1,24 @@
+--TEST--
+ReflectionObject::isSubclassOf() - invalid params
+--FILE--
+<?php
+class A {}
+$ro = new ReflectionObject(new A);
+
+var_dump($ro->isSubclassOf());
+var_dump($ro->isSubclassOf('A',5));
+var_dump($ro->isSubclassOf('X'));
+
+?>
+--EXPECTF--
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 0 given in %s on line 5
+NULL
+
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 2 given in %s on line 6
+NULL
+
+Fatal error: Uncaught exception 'ReflectionException' with message 'Class X does not exist' in %s:7
+Stack trace:
+#0 %s(7): ReflectionClass->isSubclassOf('X')
+#1 {main}
+  thrown in %s on line 7
diff --git a/ext/reflection/tests/ReflectionObject_isUserDefined_basic.phpt b/ext/reflection/tests/ReflectionObject_isUserDefined_basic.phpt
new file mode 100644
index 0000000..4cb08fc
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isUserDefined_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionObject::isUserDefined() - basic function test
+--FILE--
+<?php
+class C {
+}
+
+$r1 = new ReflectionObject(new stdClass);
+$r2 = new ReflectionObject(new ReflectionClass('C'));
+$r3 = new ReflectionObject(new ReflectionProperty('Exception', 'message'));
+$r4 = new ReflectionObject(new Exception);
+$r5 = new ReflectionObject(new C);
+
+var_dump($r1->isUserDefined(), $r2->isUserDefined(), $r3->isUserDefined(), 
+		 $r4->isUserDefined(), $r5->isUserDefined());
+
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/ReflectionObject_isUserDefined_error.phpt b/ext/reflection/tests/ReflectionObject_isUserDefined_error.phpt
new file mode 100644
index 0000000..70533cf
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isUserDefined_error.phpt
@@ -0,0 +1,15 @@
+--TEST--
+ReflectionObject::isUserDefined() - invalid params
+--FILE--
+<?php
+$r1 = new ReflectionObject(new stdClass);
+
+var_dump($r1->isUserDefined('X'));
+var_dump($r1->isUserDefined('X', true));
+?>
+--EXPECTF--
+Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 5
+NULL
diff --git a/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt b/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt
new file mode 100644
index 0000000..3118c17
--- /dev/null
+++ b/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt
@@ -0,0 +1,31 @@
+--TEST--
+ReflectionParameter::__construct(): Invalid method as constructor
+--FILE-- 
+<?php
+
+// Invalid class name
+try {
+	new ReflectionParameter (array ('A', 'b'), 0);
+} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
+
+// Invalid class method
+try {
+	new ReflectionParameter (array ('C', 'b'), 0);
+} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
+
+// Invalid object method
+try {
+	new ReflectionParameter (array (new C, 'b'), 0);
+} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
+
+echo "Done.\n";
+
+class C {
+}
+
+?>
+--EXPECTF--
+Class A does not exist
+Method C::b() does not exist
+Method C::b() does not exist
+Done.
diff --git a/ext/reflection/tests/ReflectionProperty_basic1.phpt b/ext/reflection/tests/ReflectionProperty_basic1.phpt
new file mode 100644
index 0000000..f7c1c8f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_basic1.phpt
@@ -0,0 +1,162 @@
+--TEST--
+Test usage of ReflectionProperty methods __toString(), export(), getName(), isPublic(), isPrivate(), isProtected(), isStatic(), getValue() and setValue().
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+function reflectProperty($class, $property) {
+    $propInfo = new ReflectionProperty($class, $property);
+    echo "**********************************\n";
+    echo "Reflecting on property $class::$property\n\n";
+    echo "__toString():\n";
+    var_dump($propInfo->__toString());
+    echo "export():\n";
+    var_dump(ReflectionProperty::export($class, $property, true));
+    echo "export():\n";
+    var_dump(ReflectionProperty::export($class, $property, false));
+    echo "getName():\n";
+    var_dump($propInfo->getName());
+    echo "isPublic():\n";
+    var_dump($propInfo->isPublic());
+    echo "isPrivate():\n";
+    var_dump($propInfo->isPrivate());
+    echo "isProtected():\n";
+    var_dump($propInfo->isProtected());
+    echo "isStatic():\n";
+    var_dump($propInfo->isStatic());
+    $instance = new $class();
+    if ($propInfo->isPublic()) {
+        echo "getValue():\n";
+        var_dump($propInfo->getValue($instance));
+        $propInfo->setValue($instance, "NewValue");
+        echo "getValue() after a setValue():\n";
+        var_dump($propInfo->getValue($instance));
+    }
+    echo "\n**********************************\n";
+}
+
+class TestClass {
+    public $pub;
+    static public $stat = "static property";
+    protected $prot = 4;
+    private $priv = "keepOut";
+}
+
+reflectProperty("TestClass", "pub");
+reflectProperty("TestClass", "stat");
+reflectProperty("TestClass", "prot");
+reflectProperty("TestClass", "priv");
+
+?>
+--EXPECT--
+**********************************
+Reflecting on property TestClass::pub
+
+__toString():
+string(35) "Property [ <default> public $pub ]
+"
+export():
+string(35) "Property [ <default> public $pub ]
+"
+export():
+Property [ <default> public $pub ]
+
+NULL
+getName():
+string(3) "pub"
+isPublic():
+bool(true)
+isPrivate():
+bool(false)
+isProtected():
+bool(false)
+isStatic():
+bool(false)
+getValue():
+NULL
+getValue() after a setValue():
+string(8) "NewValue"
+
+**********************************
+**********************************
+Reflecting on property TestClass::stat
+
+__toString():
+string(33) "Property [ public static $stat ]
+"
+export():
+string(33) "Property [ public static $stat ]
+"
+export():
+Property [ public static $stat ]
+
+NULL
+getName():
+string(4) "stat"
+isPublic():
+bool(true)
+isPrivate():
+bool(false)
+isProtected():
+bool(false)
+isStatic():
+bool(true)
+getValue():
+string(15) "static property"
+getValue() after a setValue():
+string(8) "NewValue"
+
+**********************************
+**********************************
+Reflecting on property TestClass::prot
+
+__toString():
+string(39) "Property [ <default> protected $prot ]
+"
+export():
+string(39) "Property [ <default> protected $prot ]
+"
+export():
+Property [ <default> protected $prot ]
+
+NULL
+getName():
+string(4) "prot"
+isPublic():
+bool(false)
+isPrivate():
+bool(false)
+isProtected():
+bool(true)
+isStatic():
+bool(false)
+
+**********************************
+**********************************
+Reflecting on property TestClass::priv
+
+__toString():
+string(37) "Property [ <default> private $priv ]
+"
+export():
+string(37) "Property [ <default> private $priv ]
+"
+export():
+Property [ <default> private $priv ]
+
+NULL
+getName():
+string(4) "priv"
+isPublic():
+bool(false)
+isPrivate():
+bool(true)
+isProtected():
+bool(false)
+isStatic():
+bool(false)
+
+**********************************
+
+
diff --git a/ext/reflection/tests/ReflectionProperty_basic2.phpt b/ext/reflection/tests/ReflectionProperty_basic2.phpt
new file mode 100644
index 0000000..f2b5ff4
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_basic2.phpt
@@ -0,0 +1,105 @@
+--TEST--
+Test usage of ReflectionProperty methods isDefault(), getModifiers(), getDeclaringClass() and getDocComment().
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+function reflectProperty($class, $property) {
+    $propInfo = new ReflectionProperty($class, $property);
+    echo "**********************************\n";
+    echo "Reflecting on property $class::$property\n\n";
+    echo "isDefault():\n";
+    var_dump($propInfo->isDefault());
+    echo "getModifiers():\n";
+    var_dump($propInfo->getModifiers());
+    echo "getDeclaringClass():\n";
+    var_dump($propInfo->getDeclaringClass());
+    echo "getDocComment():\n";
+    var_dump($propInfo->getDocComment());
+    echo "\n**********************************\n";
+}
+
+class TestClass {
+    public $pub;
+    static public $stat = "static property";
+    /**
+     * This property has a comment.
+     */
+    protected $prot = 4;
+    private $priv = "keepOut";
+}
+
+reflectProperty("TestClass", "pub");
+reflectProperty("TestClass", "stat");
+reflectProperty("TestClass", "prot");
+reflectProperty("TestClass", "priv");
+
+?> 
+--EXPECTF--
+**********************************
+Reflecting on property TestClass::pub
+
+isDefault():
+bool(true)
+getModifiers():
+int(256)
+getDeclaringClass():
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(9) "TestClass"
+}
+getDocComment():
+bool(false)
+
+**********************************
+**********************************
+Reflecting on property TestClass::stat
+
+isDefault():
+bool(true)
+getModifiers():
+int(257)
+getDeclaringClass():
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(9) "TestClass"
+}
+getDocComment():
+bool(false)
+
+**********************************
+**********************************
+Reflecting on property TestClass::prot
+
+isDefault():
+bool(true)
+getModifiers():
+int(512)
+getDeclaringClass():
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(9) "TestClass"
+}
+getDocComment():
+string(%d) "/**
+     * This property has a comment.
+     */"
+
+**********************************
+**********************************
+Reflecting on property TestClass::priv
+
+isDefault():
+bool(true)
+getModifiers():
+int(1024)
+getDeclaringClass():
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(9) "TestClass"
+}
+getDocComment():
+bool(false)
+
+**********************************
diff --git a/ext/reflection/tests/ReflectionProperty_constructor_error.phpt b/ext/reflection/tests/ReflectionProperty_constructor_error.phpt
new file mode 100644
index 0000000..46cdc87
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_constructor_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test ReflectionProperty class constructor errors.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class TestClass {
+}
+
+$a = 5;
+
+echo "Non-existent class:\n";
+try {
+    $propInfo = new ReflectionProperty("NonExistentClass", "prop");
+}
+catch(Exception $e) {
+    echo $e->getMessage();
+}
+
+echo "\n\nWrong property parameter type:\n";
+try {
+    $propInfo = new ReflectionProperty($a, 'TestClass');
+}
+catch(ReflectionException $e) {
+    echo $e->getMessage();
+}
+
+echo "\n\nNon-existent property:\n";
+try {
+    $propInfo = new ReflectionProperty('TestClass', "nonExistentProperty");
+}
+catch(Exception $e) {
+    echo $e->getMessage();
+}
+
+?>
+--EXPECT--
+Non-existent class:
+Class NonExistentClass does not exist
+
+Wrong property parameter type:
+The parameter class is expected to be either a string or an object
+
+Non-existent property:
+Property TestClass::$nonExistentProperty does not exist
diff --git a/ext/reflection/tests/ReflectionProperty_constructor_variation1.phpt b/ext/reflection/tests/ReflectionProperty_constructor_variation1.phpt
new file mode 100644
index 0000000..d614803
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_constructor_variation1.phpt
@@ -0,0 +1,58 @@
+--TEST--
+ReflectionProperty::__construct(): ensure inherited private props can't be accessed through ReflectionProperty.
+--FILE--
+<?php
+
+class C {
+	private $p = 1;
+	
+	static function testFromC() {
+		try {
+		  $rp = new ReflectionProperty("D", "p");
+		  var_dump($rp);
+		} catch (Exception $e) {
+			echo $e->getMessage();
+		}		
+	}
+}
+
+class D extends C{
+	static function testFromD() {
+		try {
+		  $rp = new ReflectionProperty("D", "p");
+		  var_dump($rp);
+		} catch (Exception $e) {
+			echo $e->getMessage();
+		}		
+	}
+}
+
+echo "--> Reflect inherited private from global scope:\n";
+try {
+  $rp = new ReflectionProperty("D", "p");
+  var_dump($rp);
+} catch (Exception $e) {
+	echo $e->getMessage();
+}
+
+echo "\n\n--> Reflect inherited private from declaring scope:\n";
+C::testFromC();
+
+echo "\n\n--> Reflect inherited private from declaring scope via subclass:\n";
+D::testFromC();
+
+echo "\n\n--> Reflect inherited private from subclass:\n";
+D::testFromD();
+?>
+--EXPECTF--
+--> Reflect inherited private from global scope:
+Property D::$p does not exist
+
+--> Reflect inherited private from declaring scope:
+Property D::$p does not exist
+
+--> Reflect inherited private from declaring scope via subclass:
+Property D::$p does not exist
+
+--> Reflect inherited private from subclass:
+Property D::$p does not exist
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionProperty_error.phpt b/ext/reflection/tests/ReflectionProperty_error.phpt
new file mode 100644
index 0000000..bae255c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_error.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test ReflectionProperty class errors.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class C {
+    public static $p;
+}
+
+var_dump(new ReflectionProperty());
+var_dump(new ReflectionProperty('C::p'));
+var_dump(new ReflectionProperty('C', 'p', 'x'));
+$rp = new ReflectionProperty('C', 'p');
+var_dump($rp->getName(1));
+var_dump($rp->isPrivate(1));
+var_dump($rp->isProtected(1));
+var_dump($rp->isPublic(1));
+var_dump($rp->isStatic(1));
+var_dump($rp->getModifiers(1));
+var_dump($rp->isDefault(1));
+
+?>
+--EXPECTF--
+
+Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 0 given in %s on line %d
+object(ReflectionProperty)#%d (2) {
+  ["name"]=>
+  string(0) ""
+  ["class"]=>
+  string(0) ""
+}
+
+Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 1 given in %s on line %d
+object(ReflectionProperty)#%d (2) {
+  ["name"]=>
+  string(0) ""
+  ["class"]=>
+  string(0) ""
+}
+
+Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 3 given in %s on line %d
+object(ReflectionProperty)#%d (2) {
+  ["name"]=>
+  string(0) ""
+  ["class"]=>
+  string(0) ""
+}
+
+Warning: Wrong parameter count for ReflectionProperty::getName() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::isPrivate() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::isProtected() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::isPublic() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::isStatic() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::getModifiers() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::isDefault() in %s on line %d
+NULL
diff --git a/ext/reflection/tests/ReflectionProperty_export_basic.phpt b/ext/reflection/tests/ReflectionProperty_export_basic.phpt
new file mode 100644
index 0000000..331fdb6
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_export_basic.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test ReflectionProperty::export() usage.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class TestClass {
+    public $proper = 5;
+}
+
+var_dump(ReflectionProperty::export('TestClass', 'proper'));
+
+?>
+--EXPECT--
+Property [ <default> public $proper ]
+
+NULL
diff --git a/ext/reflection/tests/ReflectionProperty_export_error.phpt b/ext/reflection/tests/ReflectionProperty_export_error.phpt
new file mode 100644
index 0000000..9351846
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_export_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test ReflectionProperty::export() errors.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class TestClass {
+}
+
+$a = 5;
+
+echo "Non-existent class:\n";
+try {
+    ReflectionProperty::export("NonExistentClass", "prop", true);
+}
+catch(Exception $e) {
+    echo $e->getMessage();
+}
+
+echo "\n\nWrong property parameter type:\n";
+try {
+    ReflectionProperty::export($a, 'TestClass', false);
+}
+catch(ReflectionException $e) {
+    echo $e->getMessage();
+}
+
+echo "\n\nNon-existent property:\n";
+try {
+    ReflectionProperty::export('TestClass', "nonExistentProperty", true);
+}
+catch(Exception $e) {
+    echo $e->getMessage();
+}
+
+echo "\n\nIncorrect number of args:\n";
+ReflectionProperty::export();
+ReflectionProperty::export('TestClass', "nonExistentProperty", true, false);
+
+?>
+--EXPECTF--
+Non-existent class:
+Class NonExistentClass does not exist
+
+Wrong property parameter type:
+The parameter class is expected to be either a string or an object
+
+Non-existent property:
+Property TestClass::$nonExistentProperty does not exist
+
+Incorrect number of args:
+
+Warning: ReflectionProperty::export() expects at least 2 parameters, 0 given in %s on line %d
+
+Warning: ReflectionProperty::export() expects at most 3 parameters, 4 given in %s on line %d
diff --git a/ext/reflection/tests/ReflectionProperty_getDeclaringClass_variation1.phpt b/ext/reflection/tests/ReflectionProperty_getDeclaringClass_variation1.phpt
new file mode 100644
index 0000000..3df3b26
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_getDeclaringClass_variation1.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test ReflectionProperty::getDeclaringClass() with inherited properties.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class A {
+    public $prop;
+}
+
+class B extends A {
+}
+
+$propInfo = new ReflectionProperty('B', 'prop');
+var_dump($propInfo->getDeclaringClass());
+
+echo "Wrong number of params:\n";
+$propInfo->getDeclaringClass(1);
+
+?> 
+--EXPECTF--
+object(ReflectionClass)#%d (1) {
+  ["name"]=>
+  string(1) "A"
+}
+Wrong number of params:
+
+Warning: Wrong parameter count for ReflectionProperty::getDeclaringClass() in %s on line %d
diff --git a/ext/reflection/tests/ReflectionProperty_getDocComment_basic.phpt b/ext/reflection/tests/ReflectionProperty_getDocComment_basic.phpt
new file mode 100644
index 0000000..44416b7
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_getDocComment_basic.phpt
@@ -0,0 +1,102 @@
+--TEST--
+Test ReflectionProperty::getDocComment() usage.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class A {
+    /**
+     * My Doc Comment for $a
+     *
+     */
+    public $a = 2, $b, $c = 1;
+    /**
+     * My Doc Comment for $d
+     */
+    var $d;
+    /**Not a doc comment */
+    private $e;
+    /**
+     * Doc comment for $f
+     */
+    static protected $f;
+}
+
+class B extends A {
+    public $a = 2;
+    /** A doc comment for $b */
+    var $b, $c = 1;
+    /** A doc comment for $e */
+    var $e;
+}
+
+foreach(array('A', 'B') as $class) {
+    $rc = new ReflectionClass($class);
+    $rps = $rc->getProperties();
+    foreach($rps as $rp) {
+        echo "\n\n---> Doc comment for $class::$" . $rp->getName() . ":\n";
+        var_dump($rp->getDocComment());
+    }
+}
+
+?>
+--EXPECTF--
+
+---> Doc comment for A::$a:
+string(%d) "/**
+     * My Doc Comment for $a
+     *
+     */"
+
+
+---> Doc comment for A::$b:
+bool(false)
+
+
+---> Doc comment for A::$c:
+bool(false)
+
+
+---> Doc comment for A::$d:
+string(%d) "/**
+     * My Doc Comment for $d
+     */"
+
+
+---> Doc comment for A::$e:
+bool(false)
+
+
+---> Doc comment for A::$f:
+string(%d) "/**
+     * Doc comment for $f
+     */"
+
+
+---> Doc comment for B::$a:
+bool(false)
+
+
+---> Doc comment for B::$b:
+string(%d) "/** A doc comment for $b */"
+
+
+---> Doc comment for B::$c:
+bool(false)
+
+
+---> Doc comment for B::$e:
+string(%d) "/** A doc comment for $e */"
+
+
+---> Doc comment for B::$d:
+string(%d) "/**
+     * My Doc Comment for $d
+     */"
+
+
+---> Doc comment for B::$f:
+string(%d) "/**
+     * Doc comment for $f
+     */"
diff --git a/ext/reflection/tests/ReflectionProperty_getDocComment_error.phpt b/ext/reflection/tests/ReflectionProperty_getDocComment_error.phpt
new file mode 100644
index 0000000..8c1b68e
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_getDocComment_error.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test ReflectionProperty::getDocComment() errors.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class C {
+    public $a;
+}
+
+$rc = new ReflectionProperty('C', 'a');
+var_dump($rc->getDocComment(null));
+var_dump($rc->getDocComment('X'));
+var_dump($rc->getDocComment(true));
+var_dump($rc->getDocComment(array(1, 2, 3)));
+
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
+NULL
diff --git a/ext/reflection/tests/ReflectionProperty_getModifiers_basic.phpt b/ext/reflection/tests/ReflectionProperty_getModifiers_basic.phpt
new file mode 100644
index 0000000..907a7e7
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_getModifiers_basic.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test ReflectionProperty::getModifiers() usage.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class C {
+    public $a1;
+    protected $a2;
+    private $a3;
+    static public $a4;
+    static protected $a5;
+    static private $a6;
+}
+
+class D extends C {
+    public $a1;
+    protected $a2;
+    private $a3;
+    static public $a4;
+    static protected $a5;
+    static private $a6;
+}
+
+for ($i = 1;$i <= 6;$i++) {
+    $rp = new ReflectionProperty("C", "a$i");
+    echo "C::a$i: ";
+    var_dump($rp->getModifiers());
+    $rp = new ReflectionProperty("D", "a$i");
+    echo "D::a$i: ";
+    var_dump($rp->getModifiers());
+}
+
+?>
+--EXPECTF--
+C::a1: int(256)
+D::a1: int(256)
+C::a2: int(512)
+D::a2: int(512)
+C::a3: int(1024)
+D::a3: int(3072)
+C::a4: int(257)
+D::a4: int(257)
+C::a5: int(513)
+D::a5: int(513)
+C::a6: int(1025)
+D::a6: int(3073)
\ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionProperty_getValue_error.phpt b/ext/reflection/tests/ReflectionProperty_getValue_error.phpt
new file mode 100644
index 0000000..acfc3b0
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_getValue_error.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Test ReflectionProperty::getValue() errors.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class TestClass {
+    public $pub;
+    public $pub2 = 5;
+    static public $stat = "static property";
+    protected $prot = 4;
+    private $priv = "keepOut";
+}
+
+class AnotherClass {
+}
+
+$instance = new TestClass();
+$instanceWithNoProperties = new AnotherClass();
+$propInfo = new ReflectionProperty('TestClass', 'pub2');
+
+echo "Too few args:\n";
+var_dump($propInfo->getValue());
+
+echo "\nToo many args:\n";
+var_dump($propInfo->getValue($instance, true));
+
+echo "\nWrong type of arg:\n";
+var_dump($propInfo->getValue(true));
+
+echo "\nInstance without property:\n";
+$propInfo = new ReflectionProperty('TestClass', 'stat');
+
+echo "\nStatic property / too many args:\n";
+var_dump($propInfo->getValue($instance, true));
+
+echo "\nStatic property / wrong type of arg:\n";
+var_dump($propInfo->getValue(true));
+
+echo "\nProtected property:\n";
+try {
+    $propInfo = new ReflectionProperty('TestClass', 'prot');
+    var_dump($propInfo->getValue($instance));
+}
+catch(Exception $exc) {
+    echo $exc->getMessage();
+}
+
+echo "\n\nInstance without property:\n";
+$propInfo = new ReflectionProperty('TestClass', 'pub2');
+var_dump($propInfo->getValue($instanceWithNoProperties));
+
+?>
+--EXPECTF--
+Too few args:
+
+Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+Too many args:
+
+Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+
+Wrong type of arg:
+
+Warning: ReflectionProperty::getValue() expects parameter 1 to be object, boolean given in %s on line %d
+NULL
+
+Instance without property:
+
+Static property / too many args:
+string(15) "static property"
+
+Static property / wrong type of arg:
+string(15) "static property"
+
+Protected property:
+Cannot access non-public member TestClass::prot
+
+Instance without property:
+NULL
diff --git a/ext/reflection/tests/ReflectionProperty_isDefault_basic.phpt b/ext/reflection/tests/ReflectionProperty_isDefault_basic.phpt
new file mode 100644
index 0000000..57c3d0f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_isDefault_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test ReflectionProperty::isDefault() usage.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+function reflectProperty($class, $property) {
+    $propInfo = new ReflectionProperty($class, $property);
+    echo "**********************************\n";
+    echo "Reflecting on property $class::$property\n\n";
+    echo "isDefault():\n";
+    var_dump($propInfo->isDefault());
+    echo "\n**********************************\n";
+}
+
+class TestClass {
+    public $pub;
+    static public $stat = "static property";
+    protected $prot = 4;
+    private $priv = "keepOut";
+}
+
+reflectProperty("TestClass", "pub");
+reflectProperty("TestClass", "stat");
+reflectProperty("TestClass", "prot");
+reflectProperty("TestClass", "priv");
+
+echo "Wrong number of params:\n";
+$propInfo = new ReflectionProperty('TestClass', 'pub');
+$propInfo->isDefault(1);
+
+?> 
+--EXPECTF--
+**********************************
+Reflecting on property TestClass::pub
+
+isDefault():
+bool(true)
+
+**********************************
+**********************************
+Reflecting on property TestClass::stat
+
+isDefault():
+bool(true)
+
+**********************************
+**********************************
+Reflecting on property TestClass::prot
+
+isDefault():
+bool(true)
+
+**********************************
+**********************************
+Reflecting on property TestClass::priv
+
+isDefault():
+bool(true)
+
+**********************************
+Wrong number of params:
+
+Warning: Wrong parameter count for ReflectionProperty::isDefault() in %s on line %d
diff --git a/ext/reflection/tests/ReflectionProperty_setValue_error.phpt b/ext/reflection/tests/ReflectionProperty_setValue_error.phpt
new file mode 100644
index 0000000..9607782
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_setValue_error.phpt
@@ -0,0 +1,102 @@
+--TEST--
+Test ReflectionProperty::setValue() error cases.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class TestClass {
+    public $pub;
+    public $pub2 = 5;
+    static public $stat = "static property";
+    protected $prot = 4;
+    private $priv = "keepOut";
+}
+
+class AnotherClass {
+}
+
+$instance = new TestClass();
+$instanceWithNoProperties = new AnotherClass();
+$propInfo = new ReflectionProperty('TestClass', 'pub2');
+
+echo "Too few args:\n";
+var_dump($propInfo->setValue());
+var_dump($propInfo->setValue($instance));
+
+echo "\nToo many args:\n";
+var_dump($propInfo->setValue($instance, "NewValue", true));
+
+echo "\nWrong type of arg:\n";
+var_dump($propInfo->setValue(true, "NewValue"));
+$propInfo = new ReflectionProperty('TestClass', 'stat');
+
+echo "\nStatic property / too many args:\n";
+var_dump($propInfo->setValue($instance, "NewValue", true));
+
+echo "\nStatic property / too few args:\n";
+var_dump($propInfo->setValue("A new value"));
+var_dump(TestClass::$stat);
+var_dump($propInfo->setValue());
+var_dump(TestClass::$stat);
+
+echo "\nStatic property / wrong type of arg:\n";
+var_dump($propInfo->setValue(true, "Another new value"));
+var_dump(TestClass::$stat);
+
+echo "\nProtected property:\n";
+try {
+    $propInfo = new ReflectionProperty('TestClass', 'prot');
+    var_dump($propInfo->setValue($instance, "NewValue"));
+}
+catch(Exception $exc) {
+    echo $exc->getMessage();
+}
+
+echo "\n\nInstance without property:\n";
+$propInfo = new ReflectionProperty('TestClass', 'pub2');
+var_dump($propInfo->setValue($instanceWithNoProperties, "NewValue"));
+var_dump($instanceWithNoProperties->pub2);
+?>
+--EXPECTF--
+Too few args:
+
+Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 0 given in %s on line %d
+NULL
+
+Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 1 given in %s on line %d
+NULL
+
+Too many args:
+
+Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 3 given in %s on line %d
+NULL
+
+Wrong type of arg:
+
+Warning: ReflectionProperty::setValue() expects parameter 1 to be object, boolean given in %s on line %d
+NULL
+
+Static property / too many args:
+
+Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 3 given in %s on line %d
+NULL
+
+Static property / too few args:
+NULL
+string(11) "A new value"
+
+Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 0 given in %s on line %d
+NULL
+string(11) "A new value"
+
+Static property / wrong type of arg:
+NULL
+string(17) "Another new value"
+
+Protected property:
+Cannot access non-public member TestClass::prot
+
+Instance without property:
+NULL
+string(8) "NewValue"
diff --git a/ext/reflection/tests/bug48336.phpt b/ext/reflection/tests/bug48336.phpt
new file mode 100644
index 0000000..ee90675
--- /dev/null
+++ b/ext/reflection/tests/bug48336.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Bug #48286 (ReflectionProperty::getDeclaringClass() does not work with redeclared properties)
+--FILE--
+<?php
+class A {
+}
+
+class B extends A {
+  static protected $prop;
+}
+
+class C extends B {
+  static protected $prop;
+}
+
+class D extends C {
+}
+
+class E extends D {
+}
+
+class F extends E {
+  static protected $prop;
+}
+
+$class = 'A';
+for($class = 'A'; $class <= 'F'; $class ++) {
+  print($class.' => ');
+  try {
+    $rp = new ReflectionProperty($class, 'prop');
+    print($rp->getDeclaringClass()->getName());
+  } catch(Exception $e) {
+    print('N/A');
+  }
+  print("\n");
+}
+?>
+--EXPECT--
+A => N/A
+B => B
+C => C
+D => C
+E => C
+F => F
diff --git a/ext/reflection/tests/reflectionClass_FileInfo_basic.phpt b/ext/reflection/tests/reflectionClass_FileInfo_basic.phpt
deleted file mode 100644
index 27b4bc2..0000000
--- a/ext/reflection/tests/reflectionClass_FileInfo_basic.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ReflectionClass::getFileName(), ReflectionClass::getStartLine(), ReflectionClass::getEndLine()
---FILE-- 
-<?php
-//New instance of class C - defined below
-$rc = new ReflectionClass("C");
-
-//Get the file name of the PHP script in which C is defined
-var_dump($rc->getFileName());
-
-//Get the line number at the start of the definition of class C
-var_dump($rc->getStartLine());
-
-//Get the line number at the end of the definition of class C
-var_dump($rc->getEndLine());
-
-//Same tests as above but stdclass is internal - so all results should be false. 
-$rc = new ReflectionClass("stdClass");
-var_dump($rc->getFileName());
-var_dump($rc->getStartLine());
-var_dump($rc->getEndLine());
-
-Class C {
-
-}
-?>
---EXPECTF--
-string(%d) "%sreflectionClass_FileInfo_basic.php"
-int(20)
-int(22)
-bool(false)
-bool(false)
-bool(false)
diff --git a/ext/reflection/tests/reflectionClass_FileInfo_error.phpt b/ext/reflection/tests/reflectionClass_FileInfo_error.phpt
deleted file mode 100644
index 766cdf3..0000000
--- a/ext/reflection/tests/reflectionClass_FileInfo_error.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-ReflectionClass::getFileName(), ReflectionClass::getStartLine(), ReflectionClass::getEndLine() - bad params
---FILE-- 
-<?php
-Class C { }
-
-$rc = new ReflectionClass("C");
-$methods = array("getFileName", "getStartLine", "getEndLine");
-
-foreach ($methods as $method) {
-	var_dump($rc->$method());
-	var_dump($rc->$method(null));
-	var_dump($rc->$method('X', 0));	
-}
-?>
---EXPECTF--
-string(%d) "%s"
-
-Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 10
-NULL
-int(2)
-
-Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 10
-NULL
-int(2)
-
-Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 10
-NULL
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_constructor_001.phpt b/ext/reflection/tests/reflectionClass_constructor_001.phpt
deleted file mode 100644
index 1a70fe1..0000000
--- a/ext/reflection/tests/reflectionClass_constructor_001.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ReflectionClass::__constructor()
---FILE--
-<?php
-$r1 = new ReflectionClass("stdClass");
-
-$myInstance = new stdClass;
-$r2 = new ReflectionClass($myInstance);
-
-class TrickClass {
-	function __toString() {
-		//Return the name of another class
-		return "Exception";
-	}
-}
-$myTrickClass = new TrickClass;
-$r3 = new ReflectionClass($myTrickClass);
-
-var_dump($r1, $r2, $r3);
-?>
---EXPECTF--
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(8) "stdClass"
-}
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(8) "stdClass"
-}
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(10) "TrickClass"
-}
diff --git a/ext/reflection/tests/reflectionClass_constructor_002.phpt b/ext/reflection/tests/reflectionClass_constructor_002.phpt
deleted file mode 100644
index 3685c63..0000000
--- a/ext/reflection/tests/reflectionClass_constructor_002.phpt
+++ /dev/null
@@ -1,67 +0,0 @@
---TEST--
-ReflectionClass::__constructor() - bad arguments
---FILE--
-<?php
-try {
-	var_dump(new ReflectionClass());
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-try {
-	var_dump(new ReflectionClass(null));
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-try {
-	var_dump(new ReflectionClass(true));
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-try {
-	var_dump(new ReflectionClass(1));
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-try {
-	var_dump(new ReflectionClass(array(1,2,3)));
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-try {
-	var_dump(new ReflectionClass("stdClass", 1));
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-try {
-	var_dump(new ReflectionClass("X"));
-} catch (Exception $e) {
-	echo $e->getMessage() . "\n";  
-}
-
-?>
---EXPECTF--
-
-Warning: ReflectionClass::__construct() expects exactly 1 parameter, 0 given in %s on line 3
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-Class  does not exist
-Class 1 does not exist
-Class 1 does not exist
-
-Notice: Array to string conversion in %s on line 27
-Class Array does not exist
-
-Warning: ReflectionClass::__construct() expects exactly 1 parameter, 2 given in %s on line 33
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-Class X does not exist
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_export_basic1.phpt b/ext/reflection/tests/reflectionClass_export_basic1.phpt
deleted file mode 100644
index 8729731..0000000
--- a/ext/reflection/tests/reflectionClass_export_basic1.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-ReflectionClass::export() - various parameters
---FILE--
-<?php
-Class A { 
-	public function privf(Exception $a) {}
-	public function pubf(A $a,
-						 $b,
-						 C $c = null,
-						 $d = K,
-						 $e = "15 chars long -",
-						 $f = null,
-						 $g = false,
-						 array $h = null) {}
-}
-
-Class C extends A { }
-
-define('K', "16 chars long --");
-ReflectionClass::export("C");
-?>
---EXPECTF--
-Class [ <user> class C extends A ] {
-  @@ %s 14-14
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [0] {
-  }
-
-  - Methods [2] {
-    Method [ <user, inherits A> public method privf ] {
-      @@ %s 3 - 3
-
-      - Parameters [1] {
-        Parameter #0 [ <required> Exception $a ]
-      }
-    }
-
-    Method [ <user, inherits A> public method pubf ] {
-      @@ %s 4 - 11
-
-      - Parameters [8] {
-        Parameter #0 [ <required> A $a ]
-        Parameter #1 [ <required> $b ]
-        Parameter #2 [ <optional> C or NULL $c = NULL ]
-        Parameter #3 [ <optional> $d = '16 chars long -...' ]
-        Parameter #4 [ <optional> $e = '15 chars long -' ]
-        Parameter #5 [ <optional> $f = NULL ]
-        Parameter #6 [ <optional> $g = false ]
-        Parameter #7 [ <optional> array or NULL $h = NULL ]
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_export_basic2.phpt b/ext/reflection/tests/reflectionClass_export_basic2.phpt
deleted file mode 100644
index b664488..0000000
--- a/ext/reflection/tests/reflectionClass_export_basic2.phpt
+++ /dev/null
@@ -1,54 +0,0 @@
---TEST--
-ReflectionClass::export() - ensure inherited private props are hidden.
---FILE--
-<?php
-Class c {
-	private $a;
-	static private $b;
-}
-
-class d extends c {}
-
-ReflectionClass::export("c");
-ReflectionClass::export("d");
-?>
---EXPECTF--
-Class [ <user> class c ] {
-  @@ %s 2-5
-
-  - Constants [0] {
-  }
-
-  - Static properties [1] {
-    Property [ private static $b ]
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [1] {
-    Property [ <default> private $a ]
-  }
-
-  - Methods [0] {
-  }
-}
-
-Class [ <user> class d extends c ] {
-  @@ %s 7-7
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [0] {
-  }
-
-  - Methods [0] {
-  }
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getConstant_basic.phpt b/ext/reflection/tests/reflectionClass_getConstant_basic.phpt
deleted file mode 100644
index 6e05111..0000000
--- a/ext/reflection/tests/reflectionClass_getConstant_basic.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-ReflectionClass::getConstants()
---FILE--
-<?php
-class C {
-	const a = 'hello from C';
-}
-class D extends C {
-}
-class E extends D {
-}
-class F extends E {
-	const a = 'hello from F';
-}
-class X {
-}
-
-$classes = array("C", "D", "E", "F", "X");
-foreach($classes as $class) {
-	echo "Reflecting on class $class: \n";
-	$rc = new ReflectionClass($class);
-	var_dump($rc->getConstant('a'));
-	var_dump($rc->getConstant('doesntexist'));
-}
-?>
---EXPECTF--
-Reflecting on class C: 
-string(12) "hello from C"
-bool(false)
-Reflecting on class D: 
-string(12) "hello from C"
-bool(false)
-Reflecting on class E: 
-string(12) "hello from C"
-bool(false)
-Reflecting on class F: 
-string(12) "hello from F"
-bool(false)
-Reflecting on class X: 
-bool(false)
-bool(false)
diff --git a/ext/reflection/tests/reflectionClass_getConstant_error.phpt b/ext/reflection/tests/reflectionClass_getConstant_error.phpt
deleted file mode 100644
index 907d6d8..0000000
--- a/ext/reflection/tests/reflectionClass_getConstant_error.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-ReflectionClass::getConstant() - bad params
---FILE--
-<?php
-class C {
-	const myConst = 1;
-}
-
-$rc = new ReflectionClass("C");
-echo "Check invalid params:\n";
-var_dump($rc->getConstant());
-var_dump($rc->getConstant("myConst", "myConst"));
-var_dump($rc->getConstant(null));
-var_dump($rc->getConstant(1));
-var_dump($rc->getConstant(1.5));
-var_dump($rc->getConstant(true));
-var_dump($rc->getConstant(array(1,2,3)));
-var_dump($rc->getConstant(new C));
-?>
---EXPECTF--
-Check invalid params:
-
-Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 0 given in %s on line 8
-NULL
-
-Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 2 given in %s on line 9
-NULL
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
-Warning: ReflectionClass::getConstant() expects parameter 1 to be string, array given in %s on line 14
-NULL
-
-Warning: ReflectionClass::getConstant() expects parameter 1 to be string, object given in %s on line 15
-NULL
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getConstants_basic.phpt b/ext/reflection/tests/reflectionClass_getConstants_basic.phpt
deleted file mode 100644
index 9abdcc8..0000000
--- a/ext/reflection/tests/reflectionClass_getConstants_basic.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-ReflectionClass::getConstants()
---FILE--
-<?php
-class C {
-	const a = 'hello from C';
-}
-class D extends C {
-}
-class E extends D {
-}
-class F extends E {
-	const a = 'hello from F';
-}
-class X {
-}
-
-$classes = array('C', 'D', 'E', 'F', 'X');
-foreach($classes as $class) {
-	echo "Constants from class $class: \n";
-	$rc = new ReflectionClass($class);
-	var_dump($rc->getConstants());
-}
-?>
---EXPECTF--
-Constants from class C: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from C"
-}
-Constants from class D: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from C"
-}
-Constants from class E: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from C"
-}
-Constants from class F: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from F"
-}
-Constants from class X: 
-array(0) {
-}
diff --git a/ext/reflection/tests/reflectionClass_getConstants_error.phpt b/ext/reflection/tests/reflectionClass_getConstants_error.phpt
deleted file mode 100644
index 73c407d..0000000
--- a/ext/reflection/tests/reflectionClass_getConstants_error.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ReflectionClass::getConstants()
---FILE--
-<?php
-class X {
-}
-
-$rc = new reflectionClass('X');
-
-//Test invalid arguments
-$rc->getConstants('X');
-$rc->getConstants(true);
-$rc->getConstants(null);
-$rc->getConstants('A', 'B');
-
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 8
-
-Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 9
-
-Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 10
-
-Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 11
diff --git a/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt b/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt
deleted file mode 100644
index f3881c5..0000000
--- a/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-ReflectionClass::getConstructor()
---FILE--
-<?php
-class NewCtor {
-	function __construct() {}
-}
-
-class ExtendsNewCtor extends NewCtor {
-}
-
-class OldCtor {
-	function OldCtor() {}
-}
-
-class ExtendsOldCtor extends OldCtor {
-}
-
-
-class X {
-	function Y() {}
-}
-
-class Y extends X {
-}
-
-class OldAndNewCtor {
-	function OldAndNewCtor() {}
-	function __construct() {}
-}
-
-class NewAndOldCtor {
-	function __construct() {}
-	function NewAndOldCtor() {}
-}
-class B {
-	function B() {}
-}
-
-class C extends B {
-	function C() {}
-}
-
-class D1 extends C {
-	function __construct() {}
-}
-
-class D2 extends C {
-}
-
-$classes = array('NewCtor', 'ExtendsNewCtor', 'OldCtor', 'ExtendsOldCtor', 
-				 'OldAndNewCtor', 'NewAndOldCtor', 'B', 'C', 'D1', 'D2', 'X', 'Y');
-
-foreach ($classes as $class) {
-	$rc = new ReflectionClass($class);
-	$rm = $rc->getConstructor();
-	if ($rm != null) {
-		echo "Constructor of $class: " . $rm->getName() . "\n";
-	}  else {
-		echo "No constructor for $class\n";
-	}
-	
-}				 
-				 
-?>
---EXPECTF--
-
-Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line 26
-
-Strict Standards: %s for class NewAndOldCtor in %s on line 31
-Constructor of NewCtor: __construct
-Constructor of ExtendsNewCtor: __construct
-Constructor of OldCtor: OldCtor
-Constructor of ExtendsOldCtor: OldCtor
-Constructor of OldAndNewCtor: __construct
-Constructor of NewAndOldCtor: __construct
-Constructor of B: B
-Constructor of C: C
-Constructor of D1: __construct
-Constructor of D2: C
-No constructor for X
-No constructor for Y
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getConstructor_error.phpt b/ext/reflection/tests/reflectionClass_getConstructor_error.phpt
deleted file mode 100644
index 8892b1d..0000000
--- a/ext/reflection/tests/reflectionClass_getConstructor_error.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ReflectionClass::getConstructor() - bad params
---FILE--
-<?php
-class C {}
-$rc = new ReflectionClass('C');
-var_dump($rc->getConstructor(null));
-var_dump($rc->getConstructor('X'));
-var_dump($rc->getConstructor(true));
-var_dump($rc->getConstructor(array(1,2,3)));
-?>
---EXPECTF--
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 4
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 5
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 6
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 7
-NULL
diff --git a/ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt b/ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt
deleted file mode 100644
index 7813cca..0000000
--- a/ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-ReflectionClass::getExtensionName() method - basic test for getExtensionName() method
---SKIPIF--
-<?php extension_loaded('reflection') && extension_loaded('dom') or die('skip - reflection or dom extension not loaded'); ?>
---CREDITS--
-Rein Velt <rein at velt.org>
-#testFest Roosendaal 2008-05-10
---FILE--
-<?php
- 	$rc=new reflectionClass('domDocument');
- 	var_dump( $rc->getExtensionName()) ;
-?>
---EXPECT--
-string(3) "dom"
diff --git a/ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt b/ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt
deleted file mode 100644
index 35372c4..0000000
--- a/ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ReflectionClass::getExtensionName() method - variation test for getExtensionName()
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
---CREDITS--
-Rein Velt <rein at velt.org>
-#testFest Roosendaal 2008-05-10
---FILE--
-<?php
-
-	class myClass
-	{	
-		public $varX;
-		public $varY;
-	}
-	$rc=new reflectionClass('myClass');
-	var_dump( $rc->getExtensionName()) ;
-?>
---EXPECT--
-bool(false)
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getExtension_basic.phpt b/ext/reflection/tests/reflectionClass_getExtension_basic.phpt
deleted file mode 100644
index efc1ed8..0000000
--- a/ext/reflection/tests/reflectionClass_getExtension_basic.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-ReflectionClass::getExtension() method - basic test for getExtension() method
---SKIPIF--
-<?php extension_loaded('reflection') && extension_loaded('dom') or die('skip - reflection or dom extension not loaded'); ?>
---CREDITS--
-Rein Velt <rein at velt.org>
-#testFest Roosendaal 2008-05-10
---FILE--
-<?php
- 	$rc=new reflectionClass('domDocument');
- 	var_dump($rc->getExtension()) ;
-?>
---EXPECTF--
-object(ReflectionExtension)#%d (1) {
-  ["name"]=>
-  string(3) "dom"
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getExtension_variation.phpt b/ext/reflection/tests/reflectionClass_getExtension_variation.phpt
deleted file mode 100644
index f227277..0000000
--- a/ext/reflection/tests/reflectionClass_getExtension_variation.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ReflectionClass::getExtension() method - variation test for getExtension()
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
---CREDITS--
-Rein Velt <rein at velt.org>
-#testFest Roosendaal 2008-05-10
---FILE--
-<?php
-
-	class myClass
-	{	
-		public $varX;
-		public $varY;
-	}
-	$rc=new reflectionClass('myClass');
-	var_dump( $rc->getExtension()) ;
-?>
---EXPECT--
-NULL
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt b/ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt
deleted file mode 100644
index abbaa35..0000000
--- a/ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-ReflectionClass::getInterfaceNames()
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
---CREDITS--
-Michelangelo van Dam <dragonbe at gmail.com>
-#testfest roosendaal on 2008-05-10
---FILE--
-<?php
-interface Foo { }
-
-interface Bar { }
-
-class Baz implements Foo, Bar { }
-
-$rc1 = new ReflectionClass("Baz");
-var_dump($rc1->getInterfaceNames());
-?>
---EXPECT--
-array(2) {
-  [0]=>
-  string(3) "Foo"
-  [1]=>
-  string(3) "Bar"
-}
diff --git a/ext/reflection/tests/reflectionClass_getModifiers_basic.phpt b/ext/reflection/tests/reflectionClass_getModifiers_basic.phpt
deleted file mode 100644
index 33a2539..0000000
--- a/ext/reflection/tests/reflectionClass_getModifiers_basic.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-ReflectionClass::getModifiers()
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---CREDITS--
-Felix De Vliegher <felix.devliegher at gmail.com>
---FILE--
-<?php
-
-class a {}
-abstract class b {}
-final class c {}
-interface d {}
-class e implements d {}
-interface f extends d {}
-class g extends b {}
-
-function dump_modifiers($class) {
-	$obj = new ReflectionClass($class);
-	var_dump($obj->getModifiers());
-}
-
-dump_modifiers('a');
-dump_modifiers('b');
-dump_modifiers('c');
-dump_modifiers('d');
-dump_modifiers('e');
-dump_modifiers('f');
-dump_modifiers('g');
-
-?>
---EXPECT--
-int(0)
-int(32)
-int(64)
-int(128)
-int(0)
-int(128)
-int(0)
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getName_basic.phpt b/ext/reflection/tests/reflectionClass_getName_basic.phpt
deleted file mode 100644
index 158413f..0000000
--- a/ext/reflection/tests/reflectionClass_getName_basic.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-ReflectionClass::getName()
---FILE--
-<?php
-class TrickClass {
-	function __toString() {
-		//Return the name of another class
-		return "Exception";
-	}
-}
-
-$r1 = new ReflectionClass("stdClass");
-
-$myInstance = new stdClass;
-$r2 = new ReflectionClass($myInstance);
-
-$r3 = new ReflectionClass("TrickClass");
-
-var_dump($r1->getName(), $r2->getName(), $r3->getName());
-
-?> 
---EXPECTF--
-string(8) "stdClass"
-string(8) "stdClass"
-string(10) "TrickClass"
diff --git a/ext/reflection/tests/reflectionClass_getName_error.phpt b/ext/reflection/tests/reflectionClass_getName_error.phpt
deleted file mode 100644
index 6f5699c..0000000
--- a/ext/reflection/tests/reflectionClass_getName_error.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-ReflectionClass::getName() - invalid params
---FILE--
-<?php
-
-$r1 = new ReflectionClass("stdClass");
-
-var_dump($r1->getName('X'));
-var_dump($r1->getName('X', true));
-?> 
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 5
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 6
-NULL
- 
diff --git a/ext/reflection/tests/reflectionClass_getName_error1.phpt b/ext/reflection/tests/reflectionClass_getName_error1.phpt
deleted file mode 100644
index 5590137..0000000
--- a/ext/reflection/tests/reflectionClass_getName_error1.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-ReflectionClass::getName - forbid static invocation
---FILE--
-<?php
-ReflectionClass::getName();
-?>
---EXPECTF--
-Fatal error: Non-static method ReflectionClass::getName() cannot be called statically in %s on line 2
diff --git a/ext/reflection/tests/reflectionClass_getParentClass.phpt b/ext/reflection/tests/reflectionClass_getParentClass.phpt
deleted file mode 100644
index 46884ca..0000000
--- a/ext/reflection/tests/reflectionClass_getParentClass.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-ReflectionClass::getParentClass()
---CREDITS--
-Michelangelo van Dam <dragonbe at gmail.com>
-#testfest roosendaal on 2008-05-10
---FILE--
-<?php
-
-class Foo {}
-
-class Bar extends Foo {}
-
-$rc1 = new ReflectionClass("Bar");
-var_dump($rc1->getParentClass());
-?>
-
---EXPECTF--
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(3) "Foo"
-}
diff --git a/ext/reflection/tests/reflectionClass_hasConstant_basic.phpt b/ext/reflection/tests/reflectionClass_hasConstant_basic.phpt
deleted file mode 100644
index 4957015..0000000
--- a/ext/reflection/tests/reflectionClass_hasConstant_basic.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-ReflectionClass::hasConstant()
---CREDIT--
-Marc Veldman <marc at ibuildings.nl>
-#testfest roosendaal on 2008-05-10
---FILE-- 
-<?php
-//New instance of class C - defined below
-$rc = new ReflectionClass("C");
-
-//Check if C has constant foo
-var_dump($rc->hasConstant('foo'));
-
-//C should not have constant bar
-var_dump($rc->hasConstant('bar'));
-
-Class C {
-  const foo=1;
-}
-?>
---EXPECTF--
-bool(true)
-bool(false)
diff --git a/ext/reflection/tests/reflectionClass_hasMethod_basic.phpt b/ext/reflection/tests/reflectionClass_hasMethod_basic.phpt
deleted file mode 100644
index 3ef5ac9..0000000
--- a/ext/reflection/tests/reflectionClass_hasMethod_basic.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-ReflectionClass::hasMethod()
---CREDIT--
-Marc Veldman <marc at ibuildings.nl>
-#testfest roosendaal on 2008-05-10
---FILE-- 
-<?php
-//New instance of class C - defined below
-$rc = new ReflectionClass("C");
-
-//Check if C has public method publicFoo
-var_dump($rc->hasMethod('publicFoo'));
-
-//Check if C has protected method protectedFoo
-var_dump($rc->hasMethod('protectedFoo'));
-
-//Check if C has private method privateFoo
-var_dump($rc->hasMethod('privateFoo'));
-
-//Check if C has static method staticFoo
-var_dump($rc->hasMethod('staticFoo'));
-
-//C should not have method bar
-var_dump($rc->hasMethod('bar'));
-
-//Method names are case insensitive
-var_dump($rc->hasMethod('PUBLICfOO'));
-
-Class C {
-  public function publicFoo()
-  {
-    return true;
-  }
-
-  protected function protectedFoo()
-  {
-    return true;
-  }
-
-  private function privateFoo()
-  {
-    return true;
-  }
-
-  static function staticFoo()
-  {
-    return true;
-  }
-}
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
-bool(true)
diff --git a/ext/reflection/tests/reflectionClass_hasProperty_basic.phpt b/ext/reflection/tests/reflectionClass_hasProperty_basic.phpt
deleted file mode 100644
index b3264e0..0000000
--- a/ext/reflection/tests/reflectionClass_hasProperty_basic.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ReflectionClass::hasProperty()
---CREDIT--
-Marc Veldman <marc at ibuildings.nl>
-#testfest roosendaal on 2008-05-10
---FILE-- 
-<?php
-//New instance of class C - defined below
-$rc = new ReflectionClass("C");
-
-//Check if C has public property publicFoo
-var_dump($rc->hasProperty('publicFoo'));
-
-//Check if C has protected property protectedFoo
-var_dump($rc->hasProperty('protectedFoo'));
-
-//Check if C has private property privateFoo
-var_dump($rc->hasProperty('privateFoo'));
-
-//Check if C has static property staticFoo
-var_dump($rc->hasProperty('staticFoo'));
-
-//C should not have property bar
-var_dump($rc->hasProperty('bar'));
-
-Class C {
-  public $publicFoo;
-  protected $protectedFoo;
-  private $privateFoo;
-  public static $staticFoo;
-}
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isAbstract_basic.phpt b/ext/reflection/tests/reflectionClass_isAbstract_basic.phpt
deleted file mode 100644
index 7a3d577..0000000
--- a/ext/reflection/tests/reflectionClass_isAbstract_basic.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-ReflectionClass::isAbstract() method
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
---CREDITS--
-Felix De Vliegher <felix.devliegher at gmail.com>
-#testfest roosendaal on 2008-05-10
---FILE--
-<?php
-
-class TestClass {}
-abstract class TestAbstractClass {}
-
-$testClass = new ReflectionClass('TestClass');
-$abstractClass = new ReflectionClass('TestAbstractClass');
-
-var_dump($testClass->isAbstract());
-var_dump($abstractClass->isAbstract());
-
-?>
---EXPECT--
-bool(false)
-bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isFinal_basic.phpt b/ext/reflection/tests/reflectionClass_isFinal_basic.phpt
deleted file mode 100644
index efa1317..0000000
--- a/ext/reflection/tests/reflectionClass_isFinal_basic.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-ReflectionClass::isFinal() method
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
---CREDITS--
-Felix De Vliegher <felix.devliegher at gmail.com>
-#testfest roosendaal on 2008-05-10
---FILE--
-<?php
-
-class TestClass {}
-final class TestFinalClass {}
-
-$normalClass = new ReflectionClass('TestClass');
-$finalClass = new ReflectionClass('TestFinalClass');
-
-var_dump($normalClass->isFinal());
-var_dump($finalClass->isFinal());
-
-?>
---EXPECT--
-bool(false)
-bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isInstance_basic.phpt b/ext/reflection/tests/reflectionClass_isInstance_basic.phpt
deleted file mode 100644
index e8b1e9d..0000000
--- a/ext/reflection/tests/reflectionClass_isInstance_basic.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-ReflectionClass::isInstance()
---FILE--
-<?php
-class A {}
-class B extends A {}
-
-interface I {}
-class C implements I {}
-
-class X {}
-
-$classes = array("A", "B", "C", "I", "X");
-
-$instances = array(	"myA" => new A,
-					"myB" => new B,
-					"myC" => new C,
-					"myX" => new X );
-
-foreach ($classes as $class) {
-	$rc = new ReflectionClass($class);
-
-	foreach ($instances as $name => $instance) {
-		echo "is $name a $class? ";
-		var_dump($rc->isInstance($instance));	
-	}
-
-}
-
-?>
---EXPECTF--
-is myA a A? bool(true)
-is myB a A? bool(false)
-is myC a A? bool(false)
-is myX a A? bool(false)
-is myA a B? bool(false)
-is myB a B? bool(true)
-is myC a B? bool(false)
-is myX a B? bool(false)
-is myA a C? bool(false)
-is myB a C? bool(false)
-is myC a C? bool(true)
-is myX a C? bool(false)
-is myA a I? bool(false)
-is myB a I? bool(false)
-is myC a I? bool(false)
-is myX a I? bool(false)
-is myA a X? bool(false)
-is myB a X? bool(false)
-is myC a X? bool(false)
-is myX a X? bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isInstance_error.phpt b/ext/reflection/tests/reflectionClass_isInstance_error.phpt
deleted file mode 100644
index 2c4f49b..0000000
--- a/ext/reflection/tests/reflectionClass_isInstance_error.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-ReflectionClass::isInstance() - invalid params
---FILE--
-<?php
-class X {}
-
-$rc = new ReflectionClass("X");
-$instance = new X;
-
-var_dump($rc->isInstance());
-var_dump($rc->isInstance($instance, $instance));
-var_dump($rc->isInstance(1));
-var_dump($rc->isInstance(1.5));
-var_dump($rc->isInstance(true));
-var_dump($rc->isInstance('X'));
-var_dump($rc->isInstance(null));
-
-?>
---EXPECTF--
-Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 0 given in %s on line 7
-NULL
-
-Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 2 given in %s on line 8
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, %s given in %s on line 9
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, double given in %s on line 10
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, boolean given in %s on line 11
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, string given in %s on line 12
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, null given in %s on line 13
-NULL
diff --git a/ext/reflection/tests/reflectionClass_isInstantiable_basic.phpt b/ext/reflection/tests/reflectionClass_isInstantiable_basic.phpt
deleted file mode 100644
index 6ebcfa9..0000000
--- a/ext/reflection/tests/reflectionClass_isInstantiable_basic.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-ReflectionClass::IsInstantiable()
---FILE--
-<?php
-class C {
-}
-
-interface iface {
-	function f1();
-}
-
-class ifaceImpl implements iface {
-	function f1() {}
-}
-
-abstract class abstractClass {
-	function f1() {}
-	abstract function f2();
-}
-
-class D extends abstractClass {
-	function f2() {}
-}
-
-$classes = array("C", "iface", "ifaceImpl", "abstractClass", "D");
-
-foreach($classes  as $class ) {
-	$reflectionClass = new ReflectionClass($class);
-	echo "Is $class instantiable?  ";
-	var_dump($reflectionClass->IsInstantiable()); 
-
-}
-
-?>
---EXPECTF--
-Is C instantiable?  bool(true)
-Is iface instantiable?  bool(false)
-Is ifaceImpl instantiable?  bool(true)
-Is abstractClass instantiable?  bool(false)
-Is D instantiable?  bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isInstantiable_error.phpt b/ext/reflection/tests/reflectionClass_isInstantiable_error.phpt
deleted file mode 100644
index cc31a2f..0000000
--- a/ext/reflection/tests/reflectionClass_isInstantiable_error.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-ReflectionClass::IsInstantiable()
---FILE--
-<?php
-class privateCtorOld {
-	private function privateCtorOld() {}
-}
-$reflectionClass = new ReflectionClass("privateCtorOld");
-
-var_dump($reflectionClass->IsInstantiable('X'));
-var_dump($reflectionClass->IsInstantiable(0, null));
-
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 7
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 8
-NULL
diff --git a/ext/reflection/tests/reflectionClass_isInstantiable_variation.phpt b/ext/reflection/tests/reflectionClass_isInstantiable_variation.phpt
deleted file mode 100644
index 1cf3e61..0000000
--- a/ext/reflection/tests/reflectionClass_isInstantiable_variation.phpt
+++ /dev/null
@@ -1,50 +0,0 @@
---TEST--
-ReflectionClass::IsInstantiable()
---FILE--
-<?php
-class noCtor {
-}
-
-class publicCtorNew {
-	public function __construct() {}
-}
-
-class protectedCtorNew {
-	protected function __construct() {}
-}
-
-class privateCtorNew {
-	private function __construct() {}
-}
-
-class publicCtorOld {
-	public function publicCtorOld() {}
-}
-
-class protectedCtorOld {
-	protected function protectedCtorOld() {}
-}
-
-class privateCtorOld {
-	private function privateCtorOld() {}
-}
-
-
-$classes = array("noCtor", "publicCtorNew", "protectedCtorNew", "privateCtorNew",
-				 	"publicCtorOld", "protectedCtorOld", "privateCtorOld");
-
-foreach($classes  as $class ) {
-	$reflectionClass = new ReflectionClass($class);
-	echo "Is $class instantiable?  ";
-	var_dump($reflectionClass->IsInstantiable()); 
-}
-
-?>
---EXPECTF--
-Is noCtor instantiable?  bool(true)
-Is publicCtorNew instantiable?  bool(true)
-Is protectedCtorNew instantiable?  bool(false)
-Is privateCtorNew instantiable?  bool(false)
-Is publicCtorOld instantiable?  bool(true)
-Is protectedCtorOld instantiable?  bool(false)
-Is privateCtorOld instantiable?  bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isInterface_basic.phpt b/ext/reflection/tests/reflectionClass_isInterface_basic.phpt
deleted file mode 100644
index 2870725..0000000
--- a/ext/reflection/tests/reflectionClass_isInterface_basic.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ReflectionClass::isInterface() method
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---CREDITS--
-Felix De Vliegher <felix.devliegher at gmail.com>
-#testfest roosendaal on 2008-05-10
---FILE--
-<?php
-
-interface TestInterface {}
-class TestClass {}
-interface DerivedInterface extends TestInterface {}
-
-$reflectionClass = new ReflectionClass('TestInterface');
-$reflectionClass2 = new ReflectionClass('TestClass');
-$reflectionClass3 = new ReflectionClass('DerivedInterface');
-
-var_dump($reflectionClass->isInterface());
-var_dump($reflectionClass2->isInterface());
-var_dump($reflectionClass3->isInterface());
-
-?>
---EXPECT--
-bool(true)
-bool(false)
-bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isInternal_basic.phpt b/ext/reflection/tests/reflectionClass_isInternal_basic.phpt
deleted file mode 100644
index 2eaacb6..0000000
--- a/ext/reflection/tests/reflectionClass_isInternal_basic.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-ReflectionClass::isInternal()
---FILE--
-<?php
-class C {
-}
-
-$r1 = new ReflectionClass("stdClass");
-$r2 = new ReflectionClass("ReflectionClass");
-$r3 = new ReflectionClass("ReflectionProperty");
-$r4 = new ReflectionClass("Exception");
-$r5 = new ReflectionClass("C");
-
-var_dump($r1->isInternal(), $r2->isInternal(), $r3->isInternal(), 
-		 $r4->isInternal(), $r5->isInternal());
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isInternal_error.phpt b/ext/reflection/tests/reflectionClass_isInternal_error.phpt
deleted file mode 100644
index b1117e8..0000000
--- a/ext/reflection/tests/reflectionClass_isInternal_error.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-ReflectionClass::isInternal() - invalid params
---FILE--
-<?php
-$r1 = new ReflectionClass("stdClass");
-var_dump($r1->isInternal('X'));
-var_dump($r1->isInternal('X', true));
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 3
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 4
-NULL
diff --git a/ext/reflection/tests/reflectionClass_isIterateable_basic.phpt b/ext/reflection/tests/reflectionClass_isIterateable_basic.phpt
deleted file mode 100644
index 3e1228a..0000000
--- a/ext/reflection/tests/reflectionClass_isIterateable_basic.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-ReflectionClass::isIterateable() basic
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---CREDITS--
-Felix De Vliegher <felix.devliegher at gmail.com>, Marc Veldman <marc at ibuildings.nl>
---FILE--
-<?php
-
-class IteratorClass implements Iterator {
-	public function __construct() { }
-	public function key() {}
-	public function current() {}
-	function next()	{}
-	function valid() {}
-	function rewind() {}
-}
-class DerivedClass extends IteratorClass {}
-class NonIterator {}
-
-function dump_iterateable($class) {
-	$reflection = new ReflectionClass($class);
-	var_dump($reflection->isIterateable());
-}
-
-$classes = array("ArrayObject", "IteratorClass", "DerivedClass", "NonIterator");
-foreach ($classes as $class) {
-	echo "Is $class iterateable? ";
-	dump_iterateable($class);
-}
-?>
---EXPECT--
-Is ArrayObject iterateable? bool(true)
-Is IteratorClass iterateable? bool(true)
-Is DerivedClass iterateable? bool(true)
-Is NonIterator iterateable? bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt b/ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt
deleted file mode 100644
index 6d737bb..0000000
--- a/ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ReflectionClass::isIterateable() variations
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---CREDITS--
-Felix De Vliegher <felix.devliegher at gmail.com>
---FILE--
-<?php
-
-class BasicClass {}
-
-function dump_iterateable($obj)
-{
-	$reflection = new ReflectionClass($obj);
-	var_dump($reflection->isIterateable());
-}
-
-$basicClass = new BasicClass();
-$stdClass = new StdClass();
-
-dump_iterateable($basicClass);
-dump_iterateable($stdClass);
-
-?>
---EXPECT--
-bool(false)
-bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isSubclassOf_basic.phpt b/ext/reflection/tests/reflectionClass_isSubclassOf_basic.phpt
deleted file mode 100644
index 94fcf00..0000000
--- a/ext/reflection/tests/reflectionClass_isSubclassOf_basic.phpt
+++ /dev/null
@@ -1,103 +0,0 @@
---TEST--
-ReflectionClass::isSubclassOf()
---FILE--
-<?php
-class A {}
-class B extends A {}
-class C extends B {}
-
-interface I {}
-class X implements I {}
-
-$classNames = array('A', 'B', 'C', 'I', 'X'); 
-
-foreach ($classNames as $className) {
-	$rcs[$className] = new ReflectionClass($className);
-}
-
-foreach ($rcs as $childName => $child) {
-	foreach ($rcs as $parentName => $parent) {
-		echo "Is " . $childName . " a subclass of " . $parentName . "? \n";
-		echo "   - Using object argument: ";
-		var_dump($child->isSubclassOf($parent));
-		echo "   - Using string argument: ";
-		var_dump($child->isSubclassOf($parentName)); 
-	}
-}
-?>
---EXPECTF--
-Is A a subclass of A? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of B? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of C? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of I? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of X? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of A? 
-   - Using object argument: bool(true)
-   - Using string argument: bool(true)
-Is B a subclass of B? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of C? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of I? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of X? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is C a subclass of A? 
-   - Using object argument: bool(true)
-   - Using string argument: bool(true)
-Is C a subclass of B? 
-   - Using object argument: bool(true)
-   - Using string argument: bool(true)
-Is C a subclass of C? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is C a subclass of I? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is C a subclass of X? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is I a subclass of A? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is I a subclass of B? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is I a subclass of C? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is I a subclass of I? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is I a subclass of X? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of A? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of B? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of C? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of I? 
-   - Using object argument: bool(true)
-   - Using string argument: bool(true)
-Is X a subclass of X? 
-   - Using object argument: bool(false)
-   - Using string argument: bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isSubclassOf_error.phpt b/ext/reflection/tests/reflectionClass_isSubclassOf_error.phpt
deleted file mode 100644
index 7d929fa..0000000
--- a/ext/reflection/tests/reflectionClass_isSubclassOf_error.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-ReflectionClass::isSubclassOf() - invalid number of parameters
---FILE--
-<?php
-class A {}
-$rc = new ReflectionClass('A');
-
-var_dump($rc->isSubclassOf());
-var_dump($rc->isSubclassOf('A',5));
-
-?>
---EXPECTF--
-Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 0 given in %s on line 5
-NULL
-
-Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 2 given in %s on line 6
-NULL
diff --git a/ext/reflection/tests/reflectionClass_isSubclassOf_error1.phpt b/ext/reflection/tests/reflectionClass_isSubclassOf_error1.phpt
deleted file mode 100644
index 2fabd02..0000000
--- a/ext/reflection/tests/reflectionClass_isSubclassOf_error1.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-ReflectionClass::isSubclassOf() - non-existent class error
---FILE--
-<?php
-class A {}
-$rc = new ReflectionClass('A');
-
-var_dump($rc->isSubclassOf('X'));
-
-?>
---EXPECTF--
-Fatal error: Uncaught exception 'ReflectionException' with message 'Class X does not exist' in %s:5
-Stack trace:
-#0 %s(5): ReflectionClass->isSubclassOf('X')
-#1 {main}
-  thrown in %s on line 5
diff --git a/ext/reflection/tests/reflectionClass_isUserDefined_basic.phpt b/ext/reflection/tests/reflectionClass_isUserDefined_basic.phpt
deleted file mode 100644
index af43fce..0000000
--- a/ext/reflection/tests/reflectionClass_isUserDefined_basic.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-ReflectionClass::isUserDefined()
---FILE--
-<?php
-class C {
-}
-
-$r1 = new ReflectionClass("stdClass");
-$r2 = new ReflectionClass("ReflectionClass");
-$r3 = new ReflectionClass("ReflectionProperty");
-$r4 = new ReflectionClass("Exception");
-$r5 = new ReflectionClass("C");
-
-var_dump($r1->isUserDefined(), $r2->isUserDefined(), $r3->isUserDefined(), 
-		 $r4->isUserDefined(), $r5->isUserDefined());
-?>
---EXPECTF--
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isUserDefined_error.phpt b/ext/reflection/tests/reflectionClass_isUserDefined_error.phpt
deleted file mode 100644
index 077e4d6..0000000
--- a/ext/reflection/tests/reflectionClass_isUserDefined_error.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-ReflectionClass::isUserDefined() - invalid params.
---FILE--
-<?php
-$r1 = new ReflectionClass("stdClass");
-var_dump($r1->isUserDefined('X'));
-var_dump($r1->isUserDefined('X', true));
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 3
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 4
-NULL
diff --git a/ext/reflection/tests/reflectionObject_FileInfo_basic.phpt b/ext/reflection/tests/reflectionObject_FileInfo_basic.phpt
deleted file mode 100644
index a1334f4..0000000
--- a/ext/reflection/tests/reflectionObject_FileInfo_basic.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-ReflectionObject::getFileName(), ReflectionObject::getStartLine(), ReflectionObject::getEndLine() - basic function
---FILE-- 
-<?php
-$rc = new ReflectionObject(new C);
-var_dump($rc->getFileName());
-var_dump($rc->getStartLine());
-var_dump($rc->getEndLine());
-
-$rc = new ReflectionObject(new stdclass);
-var_dump($rc->getFileName());
-var_dump($rc->getStartLine());
-var_dump($rc->getEndLine());
-
-Class C {
-
-}
-?>
---EXPECTF--
-string(%d) "%sreflectionObject_FileInfo_basic.php"
-int(12)
-int(14)
-bool(false)
-bool(false)
-bool(false)
diff --git a/ext/reflection/tests/reflectionObject_FileInfo_error.phpt b/ext/reflection/tests/reflectionObject_FileInfo_error.phpt
deleted file mode 100644
index f66d2fb..0000000
--- a/ext/reflection/tests/reflectionObject_FileInfo_error.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-ReflectionObject::getFileName(), ReflectionObject::getStartLine(), ReflectionObject::getEndLine() -invalid aparams 
---FILE-- 
-<?php
-Class C { }
-
-$rc = new ReflectionObject(new C);
-$methods = array("getFileName", "getStartLine", "getEndLine");
-
-foreach ($methods as $method) {
-	var_dump($rc->$method());
-	var_dump($rc->$method(null));
-	var_dump($rc->$method('X', 0));	
-}
-?>
---EXPECTF--
-string(%d) "%s"
-
-Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 10
-NULL
-int(2)
-
-Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 10
-NULL
-int(2)
-
-Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 10
-NULL
diff --git a/ext/reflection/tests/reflectionObject___toString_basic1.phpt b/ext/reflection/tests/reflectionObject___toString_basic1.phpt
deleted file mode 100644
index fefa220..0000000
--- a/ext/reflection/tests/reflectionObject___toString_basic1.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-ReflectionObject::__toString() : very basic test with no dynamic properties
---FILE--
-<?php
-
-class Foo  {
-	public $bar = 1;
-}
-$f = new foo;
-
-echo new ReflectionObject($f);
-
-?>
---EXPECTF--
-Object of class [ <user> class Foo ] {
-  @@ %s 3-5
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [1] {
-    Property [ <default> public $bar ]
-  }
-
-  - Dynamic properties [0] {
-  }
-
-  - Methods [0] {
-  }
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject___toString_basic2.phpt b/ext/reflection/tests/reflectionObject___toString_basic2.phpt
deleted file mode 100644
index 332386a..0000000
--- a/ext/reflection/tests/reflectionObject___toString_basic2.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-ReflectionObject::__toString() : very basic test with dynamic properties
---FILE--
-<?php
-
-class Foo  {
-	public $bar = 1;
-}
-$f = new foo;
-$f->dynProp = 'hello';
-$f->dynProp2 = 'hello again';
-echo new ReflectionObject($f);
-
-?>
---EXPECTF--
-Object of class [ <user> class Foo ] {
-  @@ %s 3-5
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [1] {
-    Property [ <default> public $bar ]
-  }
-
-  - Dynamic properties [2] {
-    Property [ <dynamic> public $dynProp ]
-    Property [ <dynamic> public $dynProp2 ]
-  }
-
-  - Methods [0] {
-  }
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject_constructor_basic.phpt b/ext/reflection/tests/reflectionObject_constructor_basic.phpt
deleted file mode 100644
index 8f4a908..0000000
--- a/ext/reflection/tests/reflectionObject_constructor_basic.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-ReflectionObject::__construct - basic function test
---FILE--
-<?php
-$r1 = new ReflectionObject(new stdClass);
-var_dump($r1);
-
-class C { }
-$myInstance = new C;
-$r2 = new ReflectionObject($myInstance);
-var_dump($r2);
-
-$r3 = new ReflectionObject($r2);
-var_dump($r3);
-?>
---EXPECTF--
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(8) "stdClass"
-}
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(1) "C"
-}
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(16) "ReflectionObject"
-}
diff --git a/ext/reflection/tests/reflectionObject_constructor_error.phpt b/ext/reflection/tests/reflectionObject_constructor_error.phpt
deleted file mode 100644
index baa6129..0000000
--- a/ext/reflection/tests/reflectionObject_constructor_error.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-ReflectionObject::__construct - invalid arguments
---FILE--
-<?php
-
-var_dump(new ReflectionObject());
-var_dump(new ReflectionObject('stdClass'));
-$myInstance = new stdClass;
-var_dump(new ReflectionObject($myInstance, $myInstance));
-var_dump(new ReflectionObject(0));
-var_dump(new ReflectionObject(null));
-var_dump(new ReflectionObject(array(1,2)));
-?>
---EXPECTF--
-Warning: ReflectionObject::__construct() expects exactly 1 parameter, 0 given in %s on line 3
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-
-Warning: ReflectionObject::__construct() expects parameter 1 to be object, string given in %s on line 4
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-
-Warning: ReflectionObject::__construct() expects exactly 1 parameter, 2 given in %s on line 6
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-
-Warning: ReflectionObject::__construct() expects parameter 1 to be object, integer given in %s on line 7
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-
-Warning: ReflectionObject::__construct() expects parameter 1 to be object, null given in %s on line 8
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
-
-Warning: ReflectionObject::__construct() expects parameter 1 to be object, array given in %s on line 9
-object(ReflectionObject)#%d (1) {
-  ["name"]=>
-  string(0) ""
-}
diff --git a/ext/reflection/tests/reflectionObject_export_basic1.phpt b/ext/reflection/tests/reflectionObject_export_basic1.phpt
deleted file mode 100644
index f7dfef8..0000000
--- a/ext/reflection/tests/reflectionObject_export_basic1.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-ReflectionObject::export() : very basic test with no dynamic properties
---FILE--
-<?php
-
-class Foo  {
-	public $bar = 1;
-}
-$f = new foo;
-
-ReflectionObject::export($f);
-
-?>
---EXPECTF--
-Object of class [ <user> class Foo ] {
-  @@ %s 3-5
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [1] {
-    Property [ <default> public $bar ]
-  }
-
-  - Dynamic properties [0] {
-  }
-
-  - Methods [0] {
-  }
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject_export_basic2.phpt b/ext/reflection/tests/reflectionObject_export_basic2.phpt
deleted file mode 100644
index 277f06e..0000000
--- a/ext/reflection/tests/reflectionObject_export_basic2.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-ReflectionObject::export() : very basic test with dynamic properties
---FILE--
-<?php
-
-class Foo  {
-	public $bar = 1;
-}
-$f = new foo;
-$f->dynProp = 'hello';
-$f->dynProp2 = 'hello again';
-ReflectionObject::export($f);
-
-?>
---EXPECTF--
-Object of class [ <user> class Foo ] {
-  @@ %s 3-5
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [1] {
-    Property [ <default> public $bar ]
-  }
-
-  - Dynamic properties [2] {
-    Property [ <dynamic> public $dynProp ]
-    Property [ <dynamic> public $dynProp2 ]
-  }
-
-  - Methods [0] {
-  }
-}
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject_export_basic3.phpt b/ext/reflection/tests/reflectionObject_export_basic3.phpt
deleted file mode 100644
index 7c1da34..0000000
--- a/ext/reflection/tests/reflectionObject_export_basic3.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ReflectionObject::export() - ensure dynamic property with same name as inherited private property is shown. 
---FILE--
-<?php
-class C {
-	private $p = 1;
-}
-
-class D extends C{
-}
-
-$Obj = new D;
-$Obj->p = 'value';
-ReflectionObject::export($Obj)
-?>
---EXPECTF--
-Object of class [ <user> class D extends C ] {
-  @@ %s 6-7
-
-  - Constants [0] {
-  }
-
-  - Static properties [0] {
-  }
-
-  - Static methods [0] {
-  }
-
-  - Properties [0] {
-  }
-
-  - Dynamic properties [0] {
-  }
-
-  - Methods [0] {
-  }
-}
-
diff --git a/ext/reflection/tests/reflectionObject_getConstant_basic.phpt b/ext/reflection/tests/reflectionObject_getConstant_basic.phpt
deleted file mode 100644
index 3d151bc..0000000
--- a/ext/reflection/tests/reflectionObject_getConstant_basic.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-ReflectionObject::getConstant() basic function test
---FILE--
-<?php
-class C {
-	const a = 'hello from C';
-}
-class D extends C {
-}
-class E extends D {
-}
-class F extends E {
-	const a = 'hello from F';
-}
-class X {
-}
-
-$classes = array("C", "D", "E", "F", "X");
-foreach($classes as $class) {
-	echo "Reflecting on instance of class $class: \n";
-	$rc = new ReflectionObject(new $class);
-	var_dump($rc->getConstant('a'));
-	var_dump($rc->getConstant('doesntexist'));
-}
-?>
---EXPECTF--
-Reflecting on instance of class C: 
-string(12) "hello from C"
-bool(false)
-Reflecting on instance of class D: 
-string(12) "hello from C"
-bool(false)
-Reflecting on instance of class E: 
-string(12) "hello from C"
-bool(false)
-Reflecting on instance of class F: 
-string(12) "hello from F"
-bool(false)
-Reflecting on instance of class X: 
-bool(false)
-bool(false)
diff --git a/ext/reflection/tests/reflectionObject_getConstant_error.phpt b/ext/reflection/tests/reflectionObject_getConstant_error.phpt
deleted file mode 100644
index 3f12f3a..0000000
--- a/ext/reflection/tests/reflectionObject_getConstant_error.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-ReflectionObject::getConstant() - invalid params
---FILE--
-<?php
-class C {
-	const myConst = 1;
-}
-
-$rc = new ReflectionObject(new C);
-var_dump($rc->getConstant());
-var_dump($rc->getConstant("myConst", "myConst"));
-var_dump($rc->getConstant(null));
-var_dump($rc->getConstant(1));
-var_dump($rc->getConstant(1.5));
-var_dump($rc->getConstant(true));
-var_dump($rc->getConstant(array(1,2,3)));
-var_dump($rc->getConstant(new C));
-?>
---EXPECTF--
-Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 0 given in %s on line 7
-NULL
-
-Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 2 given in %s on line 8
-NULL
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
-Warning: ReflectionClass::getConstant() expects parameter 1 to be string, array given in %s on line 13
-NULL
-
-Warning: ReflectionClass::getConstant() expects parameter 1 to be string, object given in %s on line 14
-NULL
diff --git a/ext/reflection/tests/reflectionObject_getConstants_basic.phpt b/ext/reflection/tests/reflectionObject_getConstants_basic.phpt
deleted file mode 100644
index 6479ec9..0000000
--- a/ext/reflection/tests/reflectionObject_getConstants_basic.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-ReflectionObject::getConstants() - basic function test 
---FILE--
-<?php
-class C {
-	const a = 'hello from C';
-}
-class D extends C {
-}
-class E extends D {
-}
-class F extends E {
-	const a = 'hello from F';
-}
-class X {
-}
-
-$classes = array("C", "D", "E", "F", "X");
-foreach($classes as $class) {
-	echo "Reflecting on instance of class $class: \n";
-	$rc = new ReflectionObject(new $class);
-	var_dump($rc->getConstants());
-}
-
-?>
---EXPECTF--
-Reflecting on instance of class C: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from C"
-}
-Reflecting on instance of class D: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from C"
-}
-Reflecting on instance of class E: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from C"
-}
-Reflecting on instance of class F: 
-array(1) {
-  ["a"]=>
-  string(12) "hello from F"
-}
-Reflecting on instance of class X: 
-array(0) {
-}
diff --git a/ext/reflection/tests/reflectionObject_getConstants_error.phpt b/ext/reflection/tests/reflectionObject_getConstants_error.phpt
deleted file mode 100644
index 81ec9ed..0000000
--- a/ext/reflection/tests/reflectionObject_getConstants_error.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-ReflectionObject::getConstants() - invalid params
---FILE--
-<?php
-class X {
-}
-
-$rc = new ReflectionObject(new X);
-
-$rc->getConstants('X');
-$rc->getConstants(true);
-
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 7
-
-Warning: Wrong parameter count for ReflectionClass::getConstants() in %s on line 8
-
diff --git a/ext/reflection/tests/reflectionObject_getConstructor_basic.phpt b/ext/reflection/tests/reflectionObject_getConstructor_basic.phpt
deleted file mode 100644
index a784f6d..0000000
--- a/ext/reflection/tests/reflectionObject_getConstructor_basic.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-ReflectionObject::getConstructor() - basic function test
---FILE--
-<?php
-class NewCtor {
-	function __construct() {}
-}
-
-class ExtendsNewCtor extends NewCtor {
-}
-
-class OldCtor {
-	function OldCtor() {}
-}
-
-class ExtendsOldCtor extends OldCtor {
-}
-
-
-class X {
-	function Y() {}
-}
-
-class Y extends X {
-}
-
-class OldAndNewCtor {
-	function OldAndNewCtor() {}
-	function __construct() {}
-}
-
-class NewAndOldCtor {
-	function __construct() {}
-	function NewAndOldCtor() {}
-}
-class B {
-	function B() {}
-}
-
-class C extends B {
-	function C() {}
-}
-
-class D1 extends C {
-	function __construct() {}
-}
-
-class D2 extends C {
-}
-
-$classes = array('NewCtor', 'ExtendsNewCtor', 'OldCtor', 'ExtendsOldCtor', 
-				 'OldAndNewCtor', 'NewAndOldCtor', 'B', 'C', 'D1', 'D2', 'X', 'Y');
-
-foreach ($classes as $class) {
-	$rc = new ReflectionObject(new $class);
-	$rm = $rc->getConstructor();
-	if ($rm != null) {
-		echo "Constructor of $class: " . $rm->getName() . "\n";
-	}  else {
-		echo "No constructor for $class\n";
-	}
-	
-}				 
-				
-?>
---EXPECTF--
-
-Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line 26
-
-Strict Standards: %s for class NewAndOldCtor in %s on line 31
-Constructor of NewCtor: __construct
-Constructor of ExtendsNewCtor: __construct
-Constructor of OldCtor: OldCtor
-Constructor of ExtendsOldCtor: OldCtor
-Constructor of OldAndNewCtor: __construct
-Constructor of NewAndOldCtor: __construct
-Constructor of B: B
-Constructor of C: C
-Constructor of D1: __construct
-Constructor of D2: C
-No constructor for X
-No constructor for Y
diff --git a/ext/reflection/tests/reflectionObject_getConstructor_error.phpt b/ext/reflection/tests/reflectionObject_getConstructor_error.phpt
deleted file mode 100644
index 5cabc2e..0000000
--- a/ext/reflection/tests/reflectionObject_getConstructor_error.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ReflectionObject::getConstructor() - invalid params
---FILE--
-<?php
-class C {}
-$rc = new ReflectionObject(new C);
-var_dump($rc->getConstructor(null));
-var_dump($rc->getConstructor('X'));
-var_dump($rc->getConstructor(true));
-var_dump($rc->getConstructor(array(1,2,3)));
-?>
---EXPECTF--
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 4
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 5
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 6
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 7
-NULL
diff --git a/ext/reflection/tests/reflectionObject_getName_basic.phpt b/ext/reflection/tests/reflectionObject_getName_basic.phpt
deleted file mode 100644
index db0cbfb..0000000
--- a/ext/reflection/tests/reflectionObject_getName_basic.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ReflectionObject::getName() - basic function test
---FILE--
-<?php
-$r0 = new ReflectionObject();
-var_dump($r0->getName());
-
-$r1 = new ReflectionObject(new stdClass);
-var_dump($r1->getName());
-
-class C { }
-$myInstance = new C;
-$r2 = new ReflectionObject($myInstance);
-var_dump($r2->getName());
-
-$r3 = new ReflectionObject($r2);
-var_dump($r3->getName());
-
-?>
---EXPECTF--
-
-Warning: ReflectionObject::__construct() expects exactly 1 parameter, 0 given in %s on line 2
-string(0) ""
-string(8) "stdClass"
-string(1) "C"
-string(16) "ReflectionObject"
-
diff --git a/ext/reflection/tests/reflectionObject_getName_error.phpt b/ext/reflection/tests/reflectionObject_getName_error.phpt
deleted file mode 100644
index eb64244..0000000
--- a/ext/reflection/tests/reflectionObject_getName_error.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-ReflectionObject::getname() - invalid params
---FILE--
-<?php
-class C { }
-$myInstance = new C;
-$r2 = new ReflectionObject($myInstance);
-
-$r3 = new ReflectionObject($r2);
-
-var_dump($r3->getName(null));
-var_dump($r3->getName('x','y'));
-var_dump($r3->getName(0));
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 8
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getName() in %s on line 10
-NULL
diff --git a/ext/reflection/tests/reflectionObject_getName_error1.phpt b/ext/reflection/tests/reflectionObject_getName_error1.phpt
deleted file mode 100644
index 26c342d..0000000
--- a/ext/reflection/tests/reflectionObject_getName_error1.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-ReflectionObject::getName - forbid static invocation
---FILE--
-<?php
-ReflectionObject::getName();
-?> 
---EXPECTF--
-Fatal error: Non-static method ReflectionClass::getName() cannot be called statically in %s on line 2
diff --git a/ext/reflection/tests/reflectionObject_isInstance_basic.phpt b/ext/reflection/tests/reflectionObject_isInstance_basic.phpt
deleted file mode 100644
index 51d42fd..0000000
--- a/ext/reflection/tests/reflectionObject_isInstance_basic.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ReflectionObject::isInstance() - basic function test
---FILE--
-<?php
-class A {}
-class B extends A {}
-class X {}
-
-$classes = array("A", "B", "X");
-
-$instances = array(	"myA" => new A,
-					"myB" => new B,
-					"myX" => new X );
-
-foreach ($classes as $class) {
-	$ro = new ReflectionObject(new $class);
-	foreach ($instances as $name => $instance) {
-		echo "is $name a $class? ";
-		var_dump($ro->isInstance($instance));	
-	}
-}
-
-?>
---EXPECTF--
-is myA a A? bool(true)
-is myB a A? bool(false)
-is myX a A? bool(false)
-is myA a B? bool(false)
-is myB a B? bool(true)
-is myX a B? bool(false)
-is myA a X? bool(false)
-is myB a X? bool(false)
-is myX a X? bool(true)
diff --git a/ext/reflection/tests/reflectionObject_isInstance_error.phpt b/ext/reflection/tests/reflectionObject_isInstance_error.phpt
deleted file mode 100644
index 692c2f8..0000000
--- a/ext/reflection/tests/reflectionObject_isInstance_error.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ReflectionObject::isInstance() - invalid params
---FILE--
-<?php
-class X {}
-$instance = new X;
-$ro = new ReflectionObject(new X);
-
-var_dump($ro->isInstance());
-var_dump($ro->isInstance($instance, $instance));
-var_dump($ro->isInstance(1));
-var_dump($ro->isInstance(1.5));
-var_dump($ro->isInstance(true));
-var_dump($ro->isInstance('X'));
-var_dump($ro->isInstance(null));
-
-?>
---EXPECTF--
-Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 0 given in %s on line 6
-NULL
-
-Warning: ReflectionClass::isInstance() expects exactly 1 parameter, 2 given in %s on line 7
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, integer given in %s on line 8
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, double given in %s on line 9
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, boolean given in %s on line 10
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, string given in %s on line 11
-NULL
-
-Warning: ReflectionClass::isInstance() expects parameter 1 to be object, null given in %s on line 12
-NULL
diff --git a/ext/reflection/tests/reflectionObject_isInstantiable_basic.phpt b/ext/reflection/tests/reflectionObject_isInstantiable_basic.phpt
deleted file mode 100644
index 4b8a6ec..0000000
--- a/ext/reflection/tests/reflectionObject_isInstantiable_basic.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-ReflectionObject::IsInstantiable() - basic function test
---FILE--
-<?php
-class C {
-}
-
-interface iface {
-	function f1();
-}
-
-class ifaceImpl implements iface {
-	function f1() {}
-}
-
-abstract class abstractClass {
-	function f1() {}
-	abstract function f2();
-}
-
-class D extends abstractClass {
-	function f2() {}
-}
-
-$classes = array("C", "ifaceImpl", "D");
-
-foreach($classes  as $class ) {
-	$ro = new ReflectionObject(new $class);
-	echo "Is $class instantiable?  ";
-	var_dump($ro->IsInstantiable()); 
-}
-?>
---EXPECTF--
-Is C instantiable?  bool(true)
-Is ifaceImpl instantiable?  bool(true)
-Is D instantiable?  bool(true)
diff --git a/ext/reflection/tests/reflectionObject_isInstantiable_error.phpt b/ext/reflection/tests/reflectionObject_isInstantiable_error.phpt
deleted file mode 100644
index 8f418ac..0000000
--- a/ext/reflection/tests/reflectionObject_isInstantiable_error.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-ReflectionObject::IsInstantiable() - invalid params
---FILE--
-<?php
-class privateCtorOld {
-	private function privateCtorOld() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-$reflectionObject =  privateCtorOld::reflectionObjectFactory();
-
-var_dump($reflectionObject->IsInstantiable('X'));
-var_dump($reflectionObject->IsInstantiable(0, null));
-
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 10
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::isInstantiable() in %s on line 11
-NULL
diff --git a/ext/reflection/tests/reflectionObject_isInstantiable_variation.phpt b/ext/reflection/tests/reflectionObject_isInstantiable_variation.phpt
deleted file mode 100644
index ac7199c..0000000
--- a/ext/reflection/tests/reflectionObject_isInstantiable_variation.phpt
+++ /dev/null
@@ -1,78 +0,0 @@
---TEST--
-ReflectionObject::IsInstantiable() - variation - constructors
---FILE--
-<?php
-
-class noCtor {
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-class publicCtorNew {
-	public function __construct() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-class protectedCtorNew {
-	protected function __construct() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-class privateCtorNew {
-	private function __construct() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-class publicCtorOld {
-	public function publicCtorOld() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-class protectedCtorOld {
-	protected function protectedCtorOld() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-class privateCtorOld {
-	private function privateCtorOld() {}
-	public static function reflectionObjectFactory() {
-		return new ReflectionObject(new self);
-	}	
-}
-
-
-$reflectionObjects = array(
-		noCtor::reflectionObjectFactory(),
-		publicCtorNew::reflectionObjectFactory(),
-		protectedCtorNew::reflectionObjectFactory(),
-		privateCtorNew::reflectionObjectFactory(),
-		publicCtorOld::reflectionObjectFactory(), 
-		protectedCtorOld::reflectionObjectFactory(),
-		privateCtorOld::reflectionObjectFactory()
-	);
-
-foreach($reflectionObjects  as $reflectionObject ) {
-	$name = $reflectionObject->getName();
-	echo "Is $name instantiable? ";
-	var_dump($reflectionObject->IsInstantiable()); 
-}
-?>
---EXPECTF--
-Is noCtor instantiable? bool(true)
-Is publicCtorNew instantiable? bool(true)
-Is protectedCtorNew instantiable? bool(false)
-Is privateCtorNew instantiable? bool(false)
-Is publicCtorOld instantiable? bool(true)
-Is protectedCtorOld instantiable? bool(false)
-Is privateCtorOld instantiable? bool(false)
diff --git a/ext/reflection/tests/reflectionObject_isInternal_basic.phpt b/ext/reflection/tests/reflectionObject_isInternal_basic.phpt
deleted file mode 100644
index 066bca7..0000000
--- a/ext/reflection/tests/reflectionObject_isInternal_basic.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-ReflectionObject::isInternal() - basic function test
---FILE--
-<?php
-class C {
-}
-
-$r1 = new ReflectionObject(new stdClass);
-$r2 = new ReflectionObject(new ReflectionClass('C'));
-$r3 = new ReflectionObject(new ReflectionProperty('Exception', 'message'));
-$r4 = new ReflectionObject(new Exception);
-$r5 = new ReflectionObject(new C);
-
-var_dump($r1->isInternal(), $r2->isInternal(), $r3->isInternal(), 
-		 $r4->isInternal(), $r5->isInternal());
-
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
diff --git a/ext/reflection/tests/reflectionObject_isInternal_error.phpt b/ext/reflection/tests/reflectionObject_isInternal_error.phpt
deleted file mode 100644
index c22d748..0000000
--- a/ext/reflection/tests/reflectionObject_isInternal_error.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ReflectionObject::isInternal() - invalid params
---FILE--
-<?php
-
-$r1 = new ReflectionObject(new stdClass);
-var_dump($r1->isInternal('X'));
-var_dump($r1->isInternal('X', true));
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 4
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::isInternal() in %s on line 5
-NULL
diff --git a/ext/reflection/tests/reflectionObject_isSubclassOf_basic.phpt b/ext/reflection/tests/reflectionObject_isSubclassOf_basic.phpt
deleted file mode 100644
index e89066a..0000000
--- a/ext/reflection/tests/reflectionObject_isSubclassOf_basic.phpt
+++ /dev/null
@@ -1,116 +0,0 @@
---TEST--
-ReflectionObject::isSubclassOf() - basic function test
---FILE--
-<?php
-class A {}
-class B extends A {}
-class C extends B {}
-
-interface I {}
-class X implements I {}
-
-$classNames = array('A', 'B', 'C', 'I', 'X'); 
-
-//Create ReflectionClasses
-foreach ($classNames as $className) {
-	$rcs[$className] = new ReflectionClass($className);
-}
-
-//Create ReflectionObjects
-foreach ($classNames as $className) {
-	if ($rcs[$className]->isInstantiable()) {
-		$ros[$className] = new ReflectionObject(new $className);
-	}
-}
-
-foreach ($ros as $childName => $child) {
-	foreach ($rcs as $parentName => $parent) {
-		echo "Is " . $childName . " a subclass of " . $parentName . "? \n";
-		echo "   - Using ReflectionClass object argument: ";
-		var_dump($child->isSubclassOf($parent));
-		if ($parent->isInstantiable()) {
-			echo "   - Using ReflectionObject object argument: ";
-			var_dump($child->isSubclassOf($ros[$parentName]));
-		}
-		echo "   - Using string argument: ";
-		var_dump($child->isSubclassOf($parentName)); 
-	}
-}
-?>
---EXPECTF--
-Is A a subclass of A? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of B? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of C? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of I? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using string argument: bool(false)
-Is A a subclass of X? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of A? 
-   - Using ReflectionClass object argument: bool(true)
-   - Using ReflectionObject object argument: bool(true)
-   - Using string argument: bool(true)
-Is B a subclass of B? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of C? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of I? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using string argument: bool(false)
-Is B a subclass of X? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is C a subclass of A? 
-   - Using ReflectionClass object argument: bool(true)
-   - Using ReflectionObject object argument: bool(true)
-   - Using string argument: bool(true)
-Is C a subclass of B? 
-   - Using ReflectionClass object argument: bool(true)
-   - Using ReflectionObject object argument: bool(true)
-   - Using string argument: bool(true)
-Is C a subclass of C? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is C a subclass of I? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using string argument: bool(false)
-Is C a subclass of X? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of A? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of B? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of C? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
-Is X a subclass of I? 
-   - Using ReflectionClass object argument: bool(true)
-   - Using string argument: bool(true)
-Is X a subclass of X? 
-   - Using ReflectionClass object argument: bool(false)
-   - Using ReflectionObject object argument: bool(false)
-   - Using string argument: bool(false)
diff --git a/ext/reflection/tests/reflectionObject_isSubclassOf_error.phpt b/ext/reflection/tests/reflectionObject_isSubclassOf_error.phpt
deleted file mode 100644
index 9387b7d..0000000
--- a/ext/reflection/tests/reflectionObject_isSubclassOf_error.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ReflectionObject::isSubclassOf() - invalid params
---FILE--
-<?php
-class A {}
-$ro = new ReflectionObject(new A);
-
-var_dump($ro->isSubclassOf());
-var_dump($ro->isSubclassOf('A',5));
-var_dump($ro->isSubclassOf('X'));
-
-?>
---EXPECTF--
-Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 0 given in %s on line 5
-NULL
-
-Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 2 given in %s on line 6
-NULL
-
-Fatal error: Uncaught exception 'ReflectionException' with message 'Class X does not exist' in %s:7
-Stack trace:
-#0 %s(7): ReflectionClass->isSubclassOf('X')
-#1 {main}
-  thrown in %s on line 7
diff --git a/ext/reflection/tests/reflectionObject_isUserDefined_basic.phpt b/ext/reflection/tests/reflectionObject_isUserDefined_basic.phpt
deleted file mode 100644
index 4cb08fc..0000000
--- a/ext/reflection/tests/reflectionObject_isUserDefined_basic.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-ReflectionObject::isUserDefined() - basic function test
---FILE--
-<?php
-class C {
-}
-
-$r1 = new ReflectionObject(new stdClass);
-$r2 = new ReflectionObject(new ReflectionClass('C'));
-$r3 = new ReflectionObject(new ReflectionProperty('Exception', 'message'));
-$r4 = new ReflectionObject(new Exception);
-$r5 = new ReflectionObject(new C);
-
-var_dump($r1->isUserDefined(), $r2->isUserDefined(), $r3->isUserDefined(), 
-		 $r4->isUserDefined(), $r5->isUserDefined());
-
-?>
---EXPECTF--
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(true)
diff --git a/ext/reflection/tests/reflectionObject_isUserDefined_error.phpt b/ext/reflection/tests/reflectionObject_isUserDefined_error.phpt
deleted file mode 100644
index 70533cf..0000000
--- a/ext/reflection/tests/reflectionObject_isUserDefined_error.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ReflectionObject::isUserDefined() - invalid params
---FILE--
-<?php
-$r1 = new ReflectionObject(new stdClass);
-
-var_dump($r1->isUserDefined('X'));
-var_dump($r1->isUserDefined('X', true));
-?>
---EXPECTF--
-Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 4
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::isUserDefined() in %s on line 5
-NULL
diff --git a/ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt b/ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt
deleted file mode 100644
index 3118c17..0000000
--- a/ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ReflectionParameter::__construct(): Invalid method as constructor
---FILE-- 
-<?php
-
-// Invalid class name
-try {
-	new ReflectionParameter (array ('A', 'b'), 0);
-} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
-
-// Invalid class method
-try {
-	new ReflectionParameter (array ('C', 'b'), 0);
-} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
-
-// Invalid object method
-try {
-	new ReflectionParameter (array (new C, 'b'), 0);
-} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
-
-echo "Done.\n";
-
-class C {
-}
-
-?>
---EXPECTF--
-Class A does not exist
-Method C::b() does not exist
-Method C::b() does not exist
-Done.
diff --git a/ext/reflection/tests/reflectionProperty_basic1.phpt b/ext/reflection/tests/reflectionProperty_basic1.phpt
deleted file mode 100644
index f7c1c8f..0000000
--- a/ext/reflection/tests/reflectionProperty_basic1.phpt
+++ /dev/null
@@ -1,162 +0,0 @@
---TEST--
-Test usage of ReflectionProperty methods __toString(), export(), getName(), isPublic(), isPrivate(), isProtected(), isStatic(), getValue() and setValue().
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-function reflectProperty($class, $property) {
-    $propInfo = new ReflectionProperty($class, $property);
-    echo "**********************************\n";
-    echo "Reflecting on property $class::$property\n\n";
-    echo "__toString():\n";
-    var_dump($propInfo->__toString());
-    echo "export():\n";
-    var_dump(ReflectionProperty::export($class, $property, true));
-    echo "export():\n";
-    var_dump(ReflectionProperty::export($class, $property, false));
-    echo "getName():\n";
-    var_dump($propInfo->getName());
-    echo "isPublic():\n";
-    var_dump($propInfo->isPublic());
-    echo "isPrivate():\n";
-    var_dump($propInfo->isPrivate());
-    echo "isProtected():\n";
-    var_dump($propInfo->isProtected());
-    echo "isStatic():\n";
-    var_dump($propInfo->isStatic());
-    $instance = new $class();
-    if ($propInfo->isPublic()) {
-        echo "getValue():\n";
-        var_dump($propInfo->getValue($instance));
-        $propInfo->setValue($instance, "NewValue");
-        echo "getValue() after a setValue():\n";
-        var_dump($propInfo->getValue($instance));
-    }
-    echo "\n**********************************\n";
-}
-
-class TestClass {
-    public $pub;
-    static public $stat = "static property";
-    protected $prot = 4;
-    private $priv = "keepOut";
-}
-
-reflectProperty("TestClass", "pub");
-reflectProperty("TestClass", "stat");
-reflectProperty("TestClass", "prot");
-reflectProperty("TestClass", "priv");
-
-?>
---EXPECT--
-**********************************
-Reflecting on property TestClass::pub
-
-__toString():
-string(35) "Property [ <default> public $pub ]
-"
-export():
-string(35) "Property [ <default> public $pub ]
-"
-export():
-Property [ <default> public $pub ]
-
-NULL
-getName():
-string(3) "pub"
-isPublic():
-bool(true)
-isPrivate():
-bool(false)
-isProtected():
-bool(false)
-isStatic():
-bool(false)
-getValue():
-NULL
-getValue() after a setValue():
-string(8) "NewValue"
-
-**********************************
-**********************************
-Reflecting on property TestClass::stat
-
-__toString():
-string(33) "Property [ public static $stat ]
-"
-export():
-string(33) "Property [ public static $stat ]
-"
-export():
-Property [ public static $stat ]
-
-NULL
-getName():
-string(4) "stat"
-isPublic():
-bool(true)
-isPrivate():
-bool(false)
-isProtected():
-bool(false)
-isStatic():
-bool(true)
-getValue():
-string(15) "static property"
-getValue() after a setValue():
-string(8) "NewValue"
-
-**********************************
-**********************************
-Reflecting on property TestClass::prot
-
-__toString():
-string(39) "Property [ <default> protected $prot ]
-"
-export():
-string(39) "Property [ <default> protected $prot ]
-"
-export():
-Property [ <default> protected $prot ]
-
-NULL
-getName():
-string(4) "prot"
-isPublic():
-bool(false)
-isPrivate():
-bool(false)
-isProtected():
-bool(true)
-isStatic():
-bool(false)
-
-**********************************
-**********************************
-Reflecting on property TestClass::priv
-
-__toString():
-string(37) "Property [ <default> private $priv ]
-"
-export():
-string(37) "Property [ <default> private $priv ]
-"
-export():
-Property [ <default> private $priv ]
-
-NULL
-getName():
-string(4) "priv"
-isPublic():
-bool(false)
-isPrivate():
-bool(true)
-isProtected():
-bool(false)
-isStatic():
-bool(false)
-
-**********************************
-
-
diff --git a/ext/reflection/tests/reflectionProperty_basic2.phpt b/ext/reflection/tests/reflectionProperty_basic2.phpt
deleted file mode 100644
index f2b5ff4..0000000
--- a/ext/reflection/tests/reflectionProperty_basic2.phpt
+++ /dev/null
@@ -1,105 +0,0 @@
---TEST--
-Test usage of ReflectionProperty methods isDefault(), getModifiers(), getDeclaringClass() and getDocComment().
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-function reflectProperty($class, $property) {
-    $propInfo = new ReflectionProperty($class, $property);
-    echo "**********************************\n";
-    echo "Reflecting on property $class::$property\n\n";
-    echo "isDefault():\n";
-    var_dump($propInfo->isDefault());
-    echo "getModifiers():\n";
-    var_dump($propInfo->getModifiers());
-    echo "getDeclaringClass():\n";
-    var_dump($propInfo->getDeclaringClass());
-    echo "getDocComment():\n";
-    var_dump($propInfo->getDocComment());
-    echo "\n**********************************\n";
-}
-
-class TestClass {
-    public $pub;
-    static public $stat = "static property";
-    /**
-     * This property has a comment.
-     */
-    protected $prot = 4;
-    private $priv = "keepOut";
-}
-
-reflectProperty("TestClass", "pub");
-reflectProperty("TestClass", "stat");
-reflectProperty("TestClass", "prot");
-reflectProperty("TestClass", "priv");
-
-?> 
---EXPECTF--
-**********************************
-Reflecting on property TestClass::pub
-
-isDefault():
-bool(true)
-getModifiers():
-int(256)
-getDeclaringClass():
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(9) "TestClass"
-}
-getDocComment():
-bool(false)
-
-**********************************
-**********************************
-Reflecting on property TestClass::stat
-
-isDefault():
-bool(true)
-getModifiers():
-int(257)
-getDeclaringClass():
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(9) "TestClass"
-}
-getDocComment():
-bool(false)
-
-**********************************
-**********************************
-Reflecting on property TestClass::prot
-
-isDefault():
-bool(true)
-getModifiers():
-int(512)
-getDeclaringClass():
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(9) "TestClass"
-}
-getDocComment():
-string(%d) "/**
-     * This property has a comment.
-     */"
-
-**********************************
-**********************************
-Reflecting on property TestClass::priv
-
-isDefault():
-bool(true)
-getModifiers():
-int(1024)
-getDeclaringClass():
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(9) "TestClass"
-}
-getDocComment():
-bool(false)
-
-**********************************
diff --git a/ext/reflection/tests/reflectionProperty_constructor_error.phpt b/ext/reflection/tests/reflectionProperty_constructor_error.phpt
deleted file mode 100644
index 46cdc87..0000000
--- a/ext/reflection/tests/reflectionProperty_constructor_error.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-Test ReflectionProperty class constructor errors.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class TestClass {
-}
-
-$a = 5;
-
-echo "Non-existent class:\n";
-try {
-    $propInfo = new ReflectionProperty("NonExistentClass", "prop");
-}
-catch(Exception $e) {
-    echo $e->getMessage();
-}
-
-echo "\n\nWrong property parameter type:\n";
-try {
-    $propInfo = new ReflectionProperty($a, 'TestClass');
-}
-catch(ReflectionException $e) {
-    echo $e->getMessage();
-}
-
-echo "\n\nNon-existent property:\n";
-try {
-    $propInfo = new ReflectionProperty('TestClass', "nonExistentProperty");
-}
-catch(Exception $e) {
-    echo $e->getMessage();
-}
-
-?>
---EXPECT--
-Non-existent class:
-Class NonExistentClass does not exist
-
-Wrong property parameter type:
-The parameter class is expected to be either a string or an object
-
-Non-existent property:
-Property TestClass::$nonExistentProperty does not exist
diff --git a/ext/reflection/tests/reflectionProperty_constructor_variation1.phpt b/ext/reflection/tests/reflectionProperty_constructor_variation1.phpt
deleted file mode 100644
index d614803..0000000
--- a/ext/reflection/tests/reflectionProperty_constructor_variation1.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-ReflectionProperty::__construct(): ensure inherited private props can't be accessed through ReflectionProperty.
---FILE--
-<?php
-
-class C {
-	private $p = 1;
-	
-	static function testFromC() {
-		try {
-		  $rp = new ReflectionProperty("D", "p");
-		  var_dump($rp);
-		} catch (Exception $e) {
-			echo $e->getMessage();
-		}		
-	}
-}
-
-class D extends C{
-	static function testFromD() {
-		try {
-		  $rp = new ReflectionProperty("D", "p");
-		  var_dump($rp);
-		} catch (Exception $e) {
-			echo $e->getMessage();
-		}		
-	}
-}
-
-echo "--> Reflect inherited private from global scope:\n";
-try {
-  $rp = new ReflectionProperty("D", "p");
-  var_dump($rp);
-} catch (Exception $e) {
-	echo $e->getMessage();
-}
-
-echo "\n\n--> Reflect inherited private from declaring scope:\n";
-C::testFromC();
-
-echo "\n\n--> Reflect inherited private from declaring scope via subclass:\n";
-D::testFromC();
-
-echo "\n\n--> Reflect inherited private from subclass:\n";
-D::testFromD();
-?>
---EXPECTF--
---> Reflect inherited private from global scope:
-Property D::$p does not exist
-
---> Reflect inherited private from declaring scope:
-Property D::$p does not exist
-
---> Reflect inherited private from declaring scope via subclass:
-Property D::$p does not exist
-
---> Reflect inherited private from subclass:
-Property D::$p does not exist
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionProperty_error.phpt b/ext/reflection/tests/reflectionProperty_error.phpt
deleted file mode 100644
index bae255c..0000000
--- a/ext/reflection/tests/reflectionProperty_error.phpt
+++ /dev/null
@@ -1,70 +0,0 @@
---TEST--
-Test ReflectionProperty class errors.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class C {
-    public static $p;
-}
-
-var_dump(new ReflectionProperty());
-var_dump(new ReflectionProperty('C::p'));
-var_dump(new ReflectionProperty('C', 'p', 'x'));
-$rp = new ReflectionProperty('C', 'p');
-var_dump($rp->getName(1));
-var_dump($rp->isPrivate(1));
-var_dump($rp->isProtected(1));
-var_dump($rp->isPublic(1));
-var_dump($rp->isStatic(1));
-var_dump($rp->getModifiers(1));
-var_dump($rp->isDefault(1));
-
-?>
---EXPECTF--
-
-Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 0 given in %s on line %d
-object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(0) ""
-  ["class"]=>
-  string(0) ""
-}
-
-Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 1 given in %s on line %d
-object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(0) ""
-  ["class"]=>
-  string(0) ""
-}
-
-Warning: ReflectionProperty::__construct() expects exactly 2 parameters, 3 given in %s on line %d
-object(ReflectionProperty)#%d (2) {
-  ["name"]=>
-  string(0) ""
-  ["class"]=>
-  string(0) ""
-}
-
-Warning: Wrong parameter count for ReflectionProperty::getName() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::isPrivate() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::isProtected() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::isPublic() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::isStatic() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::getModifiers() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::isDefault() in %s on line %d
-NULL
diff --git a/ext/reflection/tests/reflectionProperty_export_basic.phpt b/ext/reflection/tests/reflectionProperty_export_basic.phpt
deleted file mode 100644
index 331fdb6..0000000
--- a/ext/reflection/tests/reflectionProperty_export_basic.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Test ReflectionProperty::export() usage.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class TestClass {
-    public $proper = 5;
-}
-
-var_dump(ReflectionProperty::export('TestClass', 'proper'));
-
-?>
---EXPECT--
-Property [ <default> public $proper ]
-
-NULL
diff --git a/ext/reflection/tests/reflectionProperty_export_error.phpt b/ext/reflection/tests/reflectionProperty_export_error.phpt
deleted file mode 100644
index 9351846..0000000
--- a/ext/reflection/tests/reflectionProperty_export_error.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-Test ReflectionProperty::export() errors.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class TestClass {
-}
-
-$a = 5;
-
-echo "Non-existent class:\n";
-try {
-    ReflectionProperty::export("NonExistentClass", "prop", true);
-}
-catch(Exception $e) {
-    echo $e->getMessage();
-}
-
-echo "\n\nWrong property parameter type:\n";
-try {
-    ReflectionProperty::export($a, 'TestClass', false);
-}
-catch(ReflectionException $e) {
-    echo $e->getMessage();
-}
-
-echo "\n\nNon-existent property:\n";
-try {
-    ReflectionProperty::export('TestClass', "nonExistentProperty", true);
-}
-catch(Exception $e) {
-    echo $e->getMessage();
-}
-
-echo "\n\nIncorrect number of args:\n";
-ReflectionProperty::export();
-ReflectionProperty::export('TestClass', "nonExistentProperty", true, false);
-
-?>
---EXPECTF--
-Non-existent class:
-Class NonExistentClass does not exist
-
-Wrong property parameter type:
-The parameter class is expected to be either a string or an object
-
-Non-existent property:
-Property TestClass::$nonExistentProperty does not exist
-
-Incorrect number of args:
-
-Warning: ReflectionProperty::export() expects at least 2 parameters, 0 given in %s on line %d
-
-Warning: ReflectionProperty::export() expects at most 3 parameters, 4 given in %s on line %d
diff --git a/ext/reflection/tests/reflectionProperty_getDeclaringClass_variation1.phpt b/ext/reflection/tests/reflectionProperty_getDeclaringClass_variation1.phpt
deleted file mode 100644
index 3df3b26..0000000
--- a/ext/reflection/tests/reflectionProperty_getDeclaringClass_variation1.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Test ReflectionProperty::getDeclaringClass() with inherited properties.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class A {
-    public $prop;
-}
-
-class B extends A {
-}
-
-$propInfo = new ReflectionProperty('B', 'prop');
-var_dump($propInfo->getDeclaringClass());
-
-echo "Wrong number of params:\n";
-$propInfo->getDeclaringClass(1);
-
-?> 
---EXPECTF--
-object(ReflectionClass)#%d (1) {
-  ["name"]=>
-  string(1) "A"
-}
-Wrong number of params:
-
-Warning: Wrong parameter count for ReflectionProperty::getDeclaringClass() in %s on line %d
diff --git a/ext/reflection/tests/reflectionProperty_getDocComment_basic.phpt b/ext/reflection/tests/reflectionProperty_getDocComment_basic.phpt
deleted file mode 100644
index 44416b7..0000000
--- a/ext/reflection/tests/reflectionProperty_getDocComment_basic.phpt
+++ /dev/null
@@ -1,102 +0,0 @@
---TEST--
-Test ReflectionProperty::getDocComment() usage.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class A {
-    /**
-     * My Doc Comment for $a
-     *
-     */
-    public $a = 2, $b, $c = 1;
-    /**
-     * My Doc Comment for $d
-     */
-    var $d;
-    /**Not a doc comment */
-    private $e;
-    /**
-     * Doc comment for $f
-     */
-    static protected $f;
-}
-
-class B extends A {
-    public $a = 2;
-    /** A doc comment for $b */
-    var $b, $c = 1;
-    /** A doc comment for $e */
-    var $e;
-}
-
-foreach(array('A', 'B') as $class) {
-    $rc = new ReflectionClass($class);
-    $rps = $rc->getProperties();
-    foreach($rps as $rp) {
-        echo "\n\n---> Doc comment for $class::$" . $rp->getName() . ":\n";
-        var_dump($rp->getDocComment());
-    }
-}
-
-?>
---EXPECTF--
-
----> Doc comment for A::$a:
-string(%d) "/**
-     * My Doc Comment for $a
-     *
-     */"
-
-
----> Doc comment for A::$b:
-bool(false)
-
-
----> Doc comment for A::$c:
-bool(false)
-
-
----> Doc comment for A::$d:
-string(%d) "/**
-     * My Doc Comment for $d
-     */"
-
-
----> Doc comment for A::$e:
-bool(false)
-
-
----> Doc comment for A::$f:
-string(%d) "/**
-     * Doc comment for $f
-     */"
-
-
----> Doc comment for B::$a:
-bool(false)
-
-
----> Doc comment for B::$b:
-string(%d) "/** A doc comment for $b */"
-
-
----> Doc comment for B::$c:
-bool(false)
-
-
----> Doc comment for B::$e:
-string(%d) "/** A doc comment for $e */"
-
-
----> Doc comment for B::$d:
-string(%d) "/**
-     * My Doc Comment for $d
-     */"
-
-
----> Doc comment for B::$f:
-string(%d) "/**
-     * Doc comment for $f
-     */"
diff --git a/ext/reflection/tests/reflectionProperty_getDocComment_error.phpt b/ext/reflection/tests/reflectionProperty_getDocComment_error.phpt
deleted file mode 100644
index 8c1b68e..0000000
--- a/ext/reflection/tests/reflectionProperty_getDocComment_error.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Test ReflectionProperty::getDocComment() errors.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class C {
-    public $a;
-}
-
-$rc = new ReflectionProperty('C', 'a');
-var_dump($rc->getDocComment(null));
-var_dump($rc->getDocComment('X'));
-var_dump($rc->getDocComment(true));
-var_dump($rc->getDocComment(array(1, 2, 3)));
-
-?>
---EXPECTF--
-
-Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for ReflectionProperty::getDocComment() in %s on line %d
-NULL
diff --git a/ext/reflection/tests/reflectionProperty_getModifiers_basic.phpt b/ext/reflection/tests/reflectionProperty_getModifiers_basic.phpt
deleted file mode 100644
index 907a7e7..0000000
--- a/ext/reflection/tests/reflectionProperty_getModifiers_basic.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-Test ReflectionProperty::getModifiers() usage.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class C {
-    public $a1;
-    protected $a2;
-    private $a3;
-    static public $a4;
-    static protected $a5;
-    static private $a6;
-}
-
-class D extends C {
-    public $a1;
-    protected $a2;
-    private $a3;
-    static public $a4;
-    static protected $a5;
-    static private $a6;
-}
-
-for ($i = 1;$i <= 6;$i++) {
-    $rp = new ReflectionProperty("C", "a$i");
-    echo "C::a$i: ";
-    var_dump($rp->getModifiers());
-    $rp = new ReflectionProperty("D", "a$i");
-    echo "D::a$i: ";
-    var_dump($rp->getModifiers());
-}
-
-?>
---EXPECTF--
-C::a1: int(256)
-D::a1: int(256)
-C::a2: int(512)
-D::a2: int(512)
-C::a3: int(1024)
-D::a3: int(3072)
-C::a4: int(257)
-D::a4: int(257)
-C::a5: int(513)
-D::a5: int(513)
-C::a6: int(1025)
-D::a6: int(3073)
\ No newline at end of file
diff --git a/ext/reflection/tests/reflectionProperty_getValue_error.phpt b/ext/reflection/tests/reflectionProperty_getValue_error.phpt
deleted file mode 100644
index acfc3b0..0000000
--- a/ext/reflection/tests/reflectionProperty_getValue_error.phpt
+++ /dev/null
@@ -1,83 +0,0 @@
---TEST--
-Test ReflectionProperty::getValue() errors.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class TestClass {
-    public $pub;
-    public $pub2 = 5;
-    static public $stat = "static property";
-    protected $prot = 4;
-    private $priv = "keepOut";
-}
-
-class AnotherClass {
-}
-
-$instance = new TestClass();
-$instanceWithNoProperties = new AnotherClass();
-$propInfo = new ReflectionProperty('TestClass', 'pub2');
-
-echo "Too few args:\n";
-var_dump($propInfo->getValue());
-
-echo "\nToo many args:\n";
-var_dump($propInfo->getValue($instance, true));
-
-echo "\nWrong type of arg:\n";
-var_dump($propInfo->getValue(true));
-
-echo "\nInstance without property:\n";
-$propInfo = new ReflectionProperty('TestClass', 'stat');
-
-echo "\nStatic property / too many args:\n";
-var_dump($propInfo->getValue($instance, true));
-
-echo "\nStatic property / wrong type of arg:\n";
-var_dump($propInfo->getValue(true));
-
-echo "\nProtected property:\n";
-try {
-    $propInfo = new ReflectionProperty('TestClass', 'prot');
-    var_dump($propInfo->getValue($instance));
-}
-catch(Exception $exc) {
-    echo $exc->getMessage();
-}
-
-echo "\n\nInstance without property:\n";
-$propInfo = new ReflectionProperty('TestClass', 'pub2');
-var_dump($propInfo->getValue($instanceWithNoProperties));
-
-?>
---EXPECTF--
-Too few args:
-
-Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given in %s on line %d
-NULL
-
-Too many args:
-
-Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 2 given in %s on line %d
-NULL
-
-Wrong type of arg:
-
-Warning: ReflectionProperty::getValue() expects parameter 1 to be object, boolean given in %s on line %d
-NULL
-
-Instance without property:
-
-Static property / too many args:
-string(15) "static property"
-
-Static property / wrong type of arg:
-string(15) "static property"
-
-Protected property:
-Cannot access non-public member TestClass::prot
-
-Instance without property:
-NULL
diff --git a/ext/reflection/tests/reflectionProperty_isDefault_basic.phpt b/ext/reflection/tests/reflectionProperty_isDefault_basic.phpt
deleted file mode 100644
index 57c3d0f..0000000
--- a/ext/reflection/tests/reflectionProperty_isDefault_basic.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-Test ReflectionProperty::isDefault() usage.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-function reflectProperty($class, $property) {
-    $propInfo = new ReflectionProperty($class, $property);
-    echo "**********************************\n";
-    echo "Reflecting on property $class::$property\n\n";
-    echo "isDefault():\n";
-    var_dump($propInfo->isDefault());
-    echo "\n**********************************\n";
-}
-
-class TestClass {
-    public $pub;
-    static public $stat = "static property";
-    protected $prot = 4;
-    private $priv = "keepOut";
-}
-
-reflectProperty("TestClass", "pub");
-reflectProperty("TestClass", "stat");
-reflectProperty("TestClass", "prot");
-reflectProperty("TestClass", "priv");
-
-echo "Wrong number of params:\n";
-$propInfo = new ReflectionProperty('TestClass', 'pub');
-$propInfo->isDefault(1);
-
-?> 
---EXPECTF--
-**********************************
-Reflecting on property TestClass::pub
-
-isDefault():
-bool(true)
-
-**********************************
-**********************************
-Reflecting on property TestClass::stat
-
-isDefault():
-bool(true)
-
-**********************************
-**********************************
-Reflecting on property TestClass::prot
-
-isDefault():
-bool(true)
-
-**********************************
-**********************************
-Reflecting on property TestClass::priv
-
-isDefault():
-bool(true)
-
-**********************************
-Wrong number of params:
-
-Warning: Wrong parameter count for ReflectionProperty::isDefault() in %s on line %d
diff --git a/ext/reflection/tests/reflectionProperty_setValue_error.phpt b/ext/reflection/tests/reflectionProperty_setValue_error.phpt
deleted file mode 100644
index 9607782..0000000
--- a/ext/reflection/tests/reflectionProperty_setValue_error.phpt
+++ /dev/null
@@ -1,102 +0,0 @@
---TEST--
-Test ReflectionProperty::setValue() error cases.
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class TestClass {
-    public $pub;
-    public $pub2 = 5;
-    static public $stat = "static property";
-    protected $prot = 4;
-    private $priv = "keepOut";
-}
-
-class AnotherClass {
-}
-
-$instance = new TestClass();
-$instanceWithNoProperties = new AnotherClass();
-$propInfo = new ReflectionProperty('TestClass', 'pub2');
-
-echo "Too few args:\n";
-var_dump($propInfo->setValue());
-var_dump($propInfo->setValue($instance));
-
-echo "\nToo many args:\n";
-var_dump($propInfo->setValue($instance, "NewValue", true));
-
-echo "\nWrong type of arg:\n";
-var_dump($propInfo->setValue(true, "NewValue"));
-$propInfo = new ReflectionProperty('TestClass', 'stat');
-
-echo "\nStatic property / too many args:\n";
-var_dump($propInfo->setValue($instance, "NewValue", true));
-
-echo "\nStatic property / too few args:\n";
-var_dump($propInfo->setValue("A new value"));
-var_dump(TestClass::$stat);
-var_dump($propInfo->setValue());
-var_dump(TestClass::$stat);
-
-echo "\nStatic property / wrong type of arg:\n";
-var_dump($propInfo->setValue(true, "Another new value"));
-var_dump(TestClass::$stat);
-
-echo "\nProtected property:\n";
-try {
-    $propInfo = new ReflectionProperty('TestClass', 'prot');
-    var_dump($propInfo->setValue($instance, "NewValue"));
-}
-catch(Exception $exc) {
-    echo $exc->getMessage();
-}
-
-echo "\n\nInstance without property:\n";
-$propInfo = new ReflectionProperty('TestClass', 'pub2');
-var_dump($propInfo->setValue($instanceWithNoProperties, "NewValue"));
-var_dump($instanceWithNoProperties->pub2);
-?>
---EXPECTF--
-Too few args:
-
-Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 0 given in %s on line %d
-NULL
-
-Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 1 given in %s on line %d
-NULL
-
-Too many args:
-
-Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 3 given in %s on line %d
-NULL
-
-Wrong type of arg:
-
-Warning: ReflectionProperty::setValue() expects parameter 1 to be object, boolean given in %s on line %d
-NULL
-
-Static property / too many args:
-
-Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 3 given in %s on line %d
-NULL
-
-Static property / too few args:
-NULL
-string(11) "A new value"
-
-Warning: ReflectionProperty::setValue() expects exactly 2 parameters, 0 given in %s on line %d
-NULL
-string(11) "A new value"
-
-Static property / wrong type of arg:
-NULL
-string(17) "Another new value"
-
-Protected property:
-Cannot access non-public member TestClass::prot
-
-Instance without property:
-NULL
-string(8) "NewValue"
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index d903488..173fdcc 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_files.c,v 1.100.2.3.2.12 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: mod_files.c,v 1.100.2.3.2.15 2009/05/26 10:15:08 jani Exp $ */
 
 #include "php.h"
 
@@ -86,7 +86,7 @@ static int ps_files_valid_key(const char *key)
 	}
 
 	len = p - key;
-	
+
 	if (len == 0) {
 		ret = 0;
 	}
@@ -100,7 +100,7 @@ static char *ps_files_path_create(char *buf, size_t buflen, ps_files *data, cons
 	const char *p;
 	int i;
 	int n;
-	
+
 	key_len = strlen(key);
 	if (key_len <= data->dirdepth ||
 		buflen < (strlen(data->basedir) + 2 * data->dirdepth + key_len + 5 + sizeof(FILE_PREFIX))) {
@@ -120,18 +120,18 @@ static char *ps_files_path_create(char *buf, size_t buflen, ps_files *data, cons
 	memcpy(buf + n, key, key_len);
 	n += key_len;
 	buf[n] = '\0';
-	
+
 	return buf;
 }
 
 #ifndef O_BINARY
-#define O_BINARY 0
-#endif 
+# define O_BINARY 0
+#endif
 
 static void ps_files_close(ps_files *data)
 {
 	if (data->fd != -1) {
-#ifdef PHP_WIN32 
+#ifdef PHP_WIN32
 		/* On Win32 locked files that are closed without being explicitly unlocked
 		   will be unlocked only when "system resources become available". */
 		flock(data->fd, LOCK_UN);
@@ -177,13 +177,12 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
 					return;
 				}
 				if (
-					S_ISLNK(sbuf.st_mode) && 
+					S_ISLNK(sbuf.st_mode) &&
 					(
 						php_check_open_basedir(buf TSRMLS_CC) ||
 						(PG(safe_mode) && !php_checkuid(buf, NULL, CHECKUID_CHECK_FILE_AND_DIR))
 					)
 				) {
-
 					close(data->fd);
 					return;
 				}
@@ -200,8 +199,7 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
 			}
 #endif
 		} else {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf, 
-					strerror(errno), errno);
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf, strerror(errno), errno);
 		}
 	}
 }
@@ -230,7 +228,7 @@ static int ps_files_cleanup_dir(const char *dirname, int maxlifetime TSRMLS_DC)
 	/* Prepare buffer (dirname never changes) */
 	memcpy(buf, dirname, dirname_len);
 	buf[dirname_len] = PHP_DIR_SEPARATOR;
-	
+
 	while (php_readdir_r(dir, (struct dirent *) dentry, &entry) == 0 && entry) {
 		/* does the file start with our prefix? */
 		if (!strncmp(entry->d_name, FILE_PREFIX, sizeof(FILE_PREFIX) - 1)) {
@@ -245,7 +243,7 @@ static int ps_files_cleanup_dir(const char *dirname, int maxlifetime TSRMLS_DC)
 				buf[dirname_len + entry_len + 1] = '\0';
 
 				/* check whether its last access was more than maxlifet ago */
-				if (VCWD_STAT(buf, &sbuf) == 0 && 
+				if (VCWD_STAT(buf, &sbuf) == 0 &&
 #ifdef NETWARE
 						(now - sbuf.st_mtime.tv_sec) > maxlifetime) {
 #else
@@ -287,7 +285,7 @@ PS_OPEN_FUNC(files)
 			}
 		}
 	}
-	
+
 	/* split up input parameter */
 	last = save_path;
 	p = strchr(save_path, ';');
@@ -295,7 +293,7 @@ PS_OPEN_FUNC(files)
 		argv[argc++] = last;
 		last = ++p;
 		p = strchr(p, ';');
-		if (argc > 2) break;
+		if (argc > 1) break;
 	}
 	argv[argc++] = last;
 
@@ -307,7 +305,7 @@ PS_OPEN_FUNC(files)
 			return FAILURE;
 		}
 	}
-	
+
 	if (argc > 2) {
 		errno = 0;
 		filemode = strtol(argv[1], NULL, 8);
@@ -318,17 +316,16 @@ PS_OPEN_FUNC(files)
 	}
 	save_path = argv[argc - 1];
 
-	data = emalloc(sizeof(*data));
-	memset(data, 0, sizeof(*data));
-	
+	data = ecalloc(1, sizeof(*data));
+
 	data->fd = -1;
 	data->dirdepth = dirdepth;
 	data->filemode = filemode;
 	data->basedir_len = strlen(save_path);
 	data->basedir = estrndup(save_path, data->basedir_len);
-	
+
 	PS_SET_MOD_DATA(data);
-	
+
 	return SUCCESS;
 }
 
@@ -389,7 +386,7 @@ PS_READ_FUNC(files)
 		efree(*val);
 		return FAILURE;
 	}
-	
+
 	return SUCCESS;
 }
 
@@ -403,11 +400,8 @@ PS_WRITE_FUNC(files)
 		return FAILURE;
 	}
 
-	/* 
-	 * truncate file, if the amount of new data is smaller than
-	 * the existing data set.
-	 */
-	
+	/* Truncate file if the amount of new data is smaller than the existing data set. */
+
 	if (vallen < (int)data->st_size) {
 		ftruncate(data->fd, 0);
 	}
@@ -442,11 +436,10 @@ PS_DESTROY_FUNC(files)
 
 	if (data->fd != -1) {
 		ps_files_close(data);
-	
+
 		if (VCWD_UNLINK(buf) == -1) {
 			/* This is a little safety check for instances when we are dealing with a regenerated session
-			 * that was not yet written to disk
-			 */
+			 * that was not yet written to disk. */
 			if (!VCWD_ACCESS(buf, F_OK)) {
 				return FAILURE;
 			}
@@ -456,14 +449,14 @@ PS_DESTROY_FUNC(files)
 	return SUCCESS;
 }
 
-PS_GC_FUNC(files) 
+PS_GC_FUNC(files)
 {
 	PS_FILES_DATA;
-	
+
 	/* we don't perform any cleanup, if dirdepth is larger than 0.
 	   we return SUCCESS, since all cleanup should be handled by
 	   an external entity (i.e. find -ctime x | xargs rm) */
-	   
+
 	if (data->dirdepth == 0) {
 		*nrdels = ps_files_cleanup_dir(data->basedir, maxlifetime TSRMLS_CC);
 	}
diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c
index f6a5f21..36da40b 100644
--- a/ext/session/mod_mm.c
+++ b/ext/session/mod_mm.c
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_mm.c,v 1.46.2.1.2.7 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: mod_mm.c,v 1.46.2.1.2.8 2009/05/18 17:23:42 jani Exp $ */
 
 #include "php.h"
 
@@ -42,9 +42,7 @@
 /* For php_uint32 */
 #include "ext/standard/basic_functions.h"
 
-/*
- * this list holds all data associated with one session 
- */
+/* This list holds all data associated with one session. */
 
 typedef struct ps_sd {
 	struct ps_sd *next;
@@ -67,21 +65,21 @@ typedef struct {
 static ps_mm *ps_mm_instance = NULL;
 
 #if 0
-#define ps_mm_debug(a) printf a
+# define ps_mm_debug(a) printf a
 #else
-#define ps_mm_debug(a)
+# define ps_mm_debug(a)
 #endif
 
 static inline php_uint32 ps_sd_hash(const char *data, int len)
 {
 	php_uint32 h;
 	const char *e = data + len;
-	
+
 	for (h = 2166136261U; data < e; ) {
 		h *= 16777619;
 		h ^= *data++;
 	}
-	
+
 	return h;
 }
 
@@ -91,10 +89,10 @@ static void hash_split(ps_mm *data)
 	ps_sd **nhash;
 	ps_sd **ohash, **ehash;
 	ps_sd *ps, *next;
-	
+
 	nmax = ((data->hash_max + 1) << 1) - 1;
 	nhash = mm_calloc(data->mm, nmax + 1, sizeof(*data->hash));
-	
+
 	if (!nhash) {
 		/* no further memory to expand hash table */
 		return;
@@ -119,9 +117,9 @@ static ps_sd *ps_sd_new(ps_mm *data, const char *key)
 	php_uint32 hv, slot;
 	ps_sd *sd;
 	int keylen;
-	
+
 	keylen = strlen(key);
-	
+
 	sd = mm_malloc(data->mm, sizeof(ps_sd) + keylen);
 	if (!sd) {
 		TSRMLS_FETCH();
@@ -132,24 +130,25 @@ static ps_sd *ps_sd_new(ps_mm *data, const char *key)
 
 	hv = ps_sd_hash(key, keylen);
 	slot = hv & data->hash_max;
-	
+
 	sd->ctime = 0;
 	sd->hv = hv;
 	sd->data = NULL;
 	sd->alloclen = sd->datalen = 0;
-	
+
 	memcpy(sd->key, key, keylen + 1);
-	
+
 	sd->next = data->hash[slot];
 	data->hash[slot] = sd;
 
 	data->hash_cnt++;
-	
+
 	if (!sd->next) {
-		if (data->hash_cnt >= data->hash_max)
+		if (data->hash_cnt >= data->hash_max) {
 			hash_split(data);
+		}
 	}
-	
+
 	ps_mm_debug(("inserting %s(%p) into slot %d\n", key, sd, slot));
 
 	return sd;
@@ -161,19 +160,22 @@ static void ps_sd_destroy(ps_mm *data, ps_sd *sd)
 
 	slot = ps_sd_hash(sd->key, strlen(sd->key)) & data->hash_max;
 
-	if (data->hash[slot] == sd)
+	if (data->hash[slot] == sd) {
 		data->hash[slot] = sd->next;
-	else {
+	} else {
 		ps_sd *prev;
 
 		/* There must be some entry before the one we want to delete */
 		for (prev = data->hash[slot]; prev->next != sd; prev = prev->next);
 		prev->next = sd->next;
 	}
-		
+
 	data->hash_cnt--;
-	if (sd->data) 
+
+	if (sd->data) {
 		mm_free(data->mm, sd->data);
+	}
+
 	mm_free(data->mm, sd);
 }
 
@@ -184,22 +186,25 @@ static ps_sd *ps_sd_lookup(ps_mm *data, const char *key, int rw)
 
 	hv = ps_sd_hash(key, strlen(key));
 	slot = hv & data->hash_max;
-	
-	for (prev = NULL, ret = data->hash[slot]; ret; prev = ret, ret = ret->next)
-		if (ret->hv == hv && !strcmp(ret->key, key)) 
+
+	for (prev = NULL, ret = data->hash[slot]; ret; prev = ret, ret = ret->next) {
+		if (ret->hv == hv && !strcmp(ret->key, key)) {
 			break;
-	
+		}
+	}
+
 	if (ret && rw && ret != data->hash[slot]) {
 		/* Move the entry to the top of the linked list */
-		
-		if (prev)
+		if (prev) {
 			prev->next = ret->next;
+		}
+
 		ret->next = data->hash[slot];
 		data->hash[slot] = ret;
 	}
 
 	ps_mm_debug(("lookup(%s): ret=%p,hv=%u,slot=%d\n", key, ret, hv, slot));
-	
+
 	return ret;
 }
 
@@ -214,6 +219,9 @@ static int ps_mm_initialize(ps_mm *data, const char *path)
 	data->owner = getpid();
 	data->mm = mm_create(0, path);
 	if (!data->mm) {
+		TSRMLS_FETCH();
+
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "mm_create(0, %s) failed, err %s", path, mm_error());
 		return FAILURE;
 	}
 
@@ -236,14 +244,17 @@ static void ps_mm_destroy(ps_mm *data)
 	/* This function is called during each module shutdown,
 	   but we must not release the shared memory pool, when
 	   an Apache child dies! */
-	if (data->owner != getpid()) return;
+	if (data->owner != getpid()) {
+		return;
+	}
 
-	for (h = 0; h < data->hash_max + 1; h++)
+	for (h = 0; h < data->hash_max + 1; h++) {
 		for (sd = data->hash[h]; sd; sd = next) {
 			next = sd->next;
 			ps_sd_destroy(data, sd);
 		}
-	
+	}
+
 	mm_free(data->mm, data->hash);
 	mm_destroy(data->mm);
 	free(data);
@@ -258,17 +269,17 @@ PHP_MINIT_FUNCTION(ps_mm)
 	int ret;
 
 	ps_mm_instance = calloc(sizeof(*ps_mm_instance), 1);
-   	if (!ps_mm_instance) {
+	if (!ps_mm_instance) {
 		return FAILURE;
 	}
 
 	if (!(euid_len = slprintf(euid, sizeof(euid), "%d", geteuid()))) {
 		return FAILURE;
 	}
-		
-	/* Directory + '/' + File + Module Name + Effective UID + \0 */	
+
+	/* Directory + '/' + File + Module Name + Effective UID + \0 */
 	ps_mm_path = emalloc(save_path_len + 1 + (sizeof(PS_MM_FILE) - 1) + mod_name_len + euid_len + 1);
-	
+
 	memcpy(ps_mm_path, PS(save_path), save_path_len);
 	if (PS(save_path)[save_path_len - 1] != DEFAULT_SLASH) {
 		ps_mm_path[save_path_len] = DEFAULT_SLASH;
@@ -282,15 +293,15 @@ PHP_MINIT_FUNCTION(ps_mm)
 	ps_mm_path[save_path_len + euid_len] = '\0';
 
 	ret = ps_mm_initialize(ps_mm_instance, ps_mm_path);
-		
+
 	efree(ps_mm_path);
-   
+
 	if (ret != SUCCESS) {
 		free(ps_mm_instance);
 		ps_mm_instance = NULL;
 		return FAILURE;
 	}
-	
+
 	php_session_register_module(&ps_mod_mm);
 	return SUCCESS;
 }
@@ -307,12 +318,12 @@ PHP_MSHUTDOWN_FUNCTION(ps_mm)
 PS_OPEN_FUNC(mm)
 {
 	ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance));
-	
-	if (!ps_mm_instance)
+
+	if (!ps_mm_instance) {
 		return FAILURE;
-	
+	}
 	PS_SET_MOD_DATA(ps_mm_instance);
-	
+
 	return SUCCESS;
 }
 
@@ -330,7 +341,7 @@ PS_READ_FUNC(mm)
 	int ret = FAILURE;
 
 	mm_lock(data->mm, MM_LOCK_RD);
-	
+
 	sd = ps_sd_lookup(data, key, 0);
 	if (sd) {
 		*vallen = sd->datalen;
@@ -341,7 +352,7 @@ PS_READ_FUNC(mm)
 	}
 
 	mm_unlock(data->mm);
-	
+
 	return ret;
 }
 
@@ -360,8 +371,9 @@ PS_WRITE_FUNC(mm)
 
 	if (sd) {
 		if (vallen >= sd->alloclen) {
-			if (data->mm) 
+			if (data->mm) {
 				mm_free(data->mm, sd->data);
+			}
 			sd->alloclen = vallen + 1;
 			sd->data = mm_malloc(data->mm, sd->alloclen);
 
@@ -379,7 +391,7 @@ PS_WRITE_FUNC(mm)
 	}
 
 	mm_unlock(data->mm);
-	
+
 	return sd ? SUCCESS : FAILURE;
 }
 
@@ -387,28 +399,29 @@ PS_DESTROY_FUNC(mm)
 {
 	PS_MM_DATA;
 	ps_sd *sd;
-	
+
 	mm_lock(data->mm, MM_LOCK_RW);
-	
+
 	sd = ps_sd_lookup(data, key, 0);
-	if (sd)
+	if (sd) {
 		ps_sd_destroy(data, sd);
-	
+	}
+
 	mm_unlock(data->mm);
-	
+
 	return SUCCESS;
 }
 
-PS_GC_FUNC(mm) 
+PS_GC_FUNC(mm)
 {
 	PS_MM_DATA;
 	time_t limit;
 	ps_sd **ohash, **ehash;
 	ps_sd *sd, *next;
-	
+
 	*nrdels = 0;
 	ps_mm_debug(("gc\n"));
-		
+
 	time(&limit);
 
 	limit -= maxlifetime;
@@ -416,7 +429,7 @@ PS_GC_FUNC(mm)
 	mm_lock(data->mm, MM_LOCK_RW);
 
 	ehash = data->hash + data->hash_max + 1;
-	for (ohash = data->hash; ohash < ehash; ohash++)
+	for (ohash = data->hash; ohash < ehash; ohash++) {
 		for (sd = *ohash; sd; sd = next) {
 			next = sd->next;
 			if (sd->ctime < limit) {
@@ -425,9 +438,10 @@ PS_GC_FUNC(mm)
 				(*nrdels)++;
 			}
 		}
+	}
 
 	mm_unlock(data->mm);
-	
+
 	return SUCCESS;
 }
 
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
index 4f8686a..36bb70c 100644
--- a/ext/session/mod_user.c
+++ b/ext/session/mod_user.c
@@ -1,4 +1,4 @@
-/* 
+/*
    +----------------------------------------------------------------------+
    | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_user.c,v 1.29.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: mod_user.c,v 1.29.2.1.2.4 2009/05/18 17:23:42 jani Exp $ */
 
 #include "php.h"
 #include "php_session.h"
@@ -26,39 +26,31 @@ ps_module ps_mod_user = {
 	PS_MOD(user)
 };
 
-#define SESS_ZVAL_LONG(val, a) 					\
-{											\
-	MAKE_STD_ZVAL(a); 						\
-	Z_TYPE_P(a) = IS_LONG; 						\
-	Z_LVAL_P(a) = val; 					\
+#define SESS_ZVAL_LONG(val, a)						\
+{													\
+	MAKE_STD_ZVAL(a);								\
+	ZVAL_LONG(a, val);								\
 }
 
-#define SESS_ZVAL_STRING(vl, a) 					\
-{											\
-	int len = strlen(vl); 					\
-	MAKE_STD_ZVAL(a); 						\
-	Z_TYPE_P(a) = IS_STRING; 					\
-	Z_STRLEN_P(a) = len; 				\
-	Z_STRVAL_P(a) = estrndup(vl, len); 	\
+#define SESS_ZVAL_STRING(vl, a)						\
+{													\
+	char *__vl = vl;								\
+	SESS_ZVAL_STRINGN(__vl, strlen(__vl), a);		\
 }
 
-#define SESS_ZVAL_STRINGN(vl, ln, a) 			\
-{											\
-	MAKE_STD_ZVAL(a); 						\
-	Z_TYPE_P(a) = IS_STRING; 					\
-	Z_STRLEN_P(a) = ln; 					\
-	Z_STRVAL_P(a) = estrndup(vl, ln); 	\
+#define SESS_ZVAL_STRINGN(vl, ln, a)				\
+{													\
+	MAKE_STD_ZVAL(a);								\
+	ZVAL_STRINGL(a, vl, ln, 1);						\
 }
 
-
 static zval *ps_call_handler(zval *func, int argc, zval **argv TSRMLS_DC)
 {
 	int i;
 	zval *retval = NULL;
-	
+
 	MAKE_STD_ZVAL(retval);
-	if (call_user_function(EG(function_table), NULL, func, retval, 
-				argc, argv TSRMLS_CC) == FAILURE) {
+	if (call_user_function(EG(function_table), NULL, func, retval, argc, argv TSRMLS_CC) == FAILURE) {
 		zval_ptr_dtor(&retval);
 		retval = NULL;
 	}
@@ -70,33 +62,33 @@ static zval *ps_call_handler(zval *func, int argc, zval **argv TSRMLS_DC)
 	return retval;
 }
 
-#define STDVARS 							\
-	zval *retval; 							\
-	int ret = FAILURE; 						\
+#define STDVARS								\
+	zval *retval;							\
+	int ret = FAILURE;						\
 	ps_user *mdata = PS_GET_MOD_DATA();		\
-	if (!mdata) 							\
+	if (!mdata)								\
 		return FAILURE
 
 #define PSF(a) mdata->name.ps_##a
 
-#define FINISH 								\
+#define FINISH								\
 	if (retval) {							\
 		convert_to_long(retval);			\
-		ret = Z_LVAL_P(retval);			\
+		ret = Z_LVAL_P(retval);				\
 		zval_ptr_dtor(&retval);				\
-	} 										\
+	}										\
 	return ret
 
 PS_OPEN_FUNC(user)
 {
 	zval *args[2];
 	STDVARS;
-	
-	SESS_ZVAL_STRING(save_path, args[0]);
-	SESS_ZVAL_STRING(session_name, args[1]);
-	
+
+	SESS_ZVAL_STRING((char*)save_path, args[0]);
+	SESS_ZVAL_STRING((char*)session_name, args[1]);
+
 	retval = ps_call_handler(PSF(open), 2, args TSRMLS_CC);
-	
+
 	FINISH;
 }
 
@@ -107,8 +99,9 @@ PS_CLOSE_FUNC(user)
 
 	retval = ps_call_handler(PSF(close), 0, NULL TSRMLS_CC);
 
-	for (i = 0; i < 6; i++)
+	for (i = 0; i < 6; i++) {
 		zval_ptr_dtor(&mdata->names[i]);
+	}
 	efree(mdata);
 
 	PS_SET_MOD_DATA(NULL);
@@ -121,10 +114,10 @@ PS_READ_FUNC(user)
 	zval *args[1];
 	STDVARS;
 
-	SESS_ZVAL_STRING(key, args[0]);
+	SESS_ZVAL_STRING((char*)key, args[0]);
 
 	retval = ps_call_handler(PSF(read), 1, args TSRMLS_CC);
-	
+
 	if (retval) {
 		if (Z_TYPE_P(retval) == IS_STRING) {
 			*val = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
@@ -141,9 +134,9 @@ PS_WRITE_FUNC(user)
 {
 	zval *args[2];
 	STDVARS;
-	
-	SESS_ZVAL_STRING(key, args[0]);
-	SESS_ZVAL_STRINGN(val, vallen, args[1]);
+
+	SESS_ZVAL_STRING((char*)key, args[0]);
+	SESS_ZVAL_STRINGN((char*)val, vallen, args[1]);
 
 	retval = ps_call_handler(PSF(write), 2, args TSRMLS_CC);
 
@@ -155,7 +148,7 @@ PS_DESTROY_FUNC(user)
 	zval *args[1];
 	STDVARS;
 
-	SESS_ZVAL_STRING(key, args[0]);
+	SESS_ZVAL_STRING((char*)key, args[0]);
 
 	retval = ps_call_handler(PSF(destroy), 1, args TSRMLS_CC);
 
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index b69e98c..5224f9e 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_session.h,v 1.101.2.2.2.7 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: php_session.h,v 1.101.2.2.2.9 2009/05/18 17:23:42 jani Exp $ */
 
 #ifndef PHP_SESSION_H
 #define PHP_SESSION_H
@@ -134,26 +134,6 @@ typedef php_ps_globals zend_ps_globals;
 extern zend_module_entry session_module_entry;
 #define phpext_session_ptr &session_module_entry
 
-PHP_FUNCTION(session_name);
-PHP_FUNCTION(session_module_name);
-PHP_FUNCTION(session_save_path);
-PHP_FUNCTION(session_id);
-PHP_FUNCTION(session_regenerate_id);
-PHP_FUNCTION(session_decode);
-PHP_FUNCTION(session_register);
-PHP_FUNCTION(session_unregister);
-PHP_FUNCTION(session_is_registered);
-PHP_FUNCTION(session_encode);
-PHP_FUNCTION(session_start);
-PHP_FUNCTION(session_destroy);
-PHP_FUNCTION(session_unset);
-PHP_FUNCTION(session_set_save_handler);
-PHP_FUNCTION(session_cache_expire);
-PHP_FUNCTION(session_cache_limiter);
-PHP_FUNCTION(session_set_cookie_params);
-PHP_FUNCTION(session_get_cookie_params);
-PHP_FUNCTION(session_write_close);
-
 #ifdef ZTS
 #define PS(v) TSRMG(ps_globals_id, php_ps_globals *, v)
 #else
@@ -222,18 +202,18 @@ PHPAPI const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC);
 	zval **struc;
 
 #define PS_ENCODE_LOOP(code) do {									\
-		HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars)); \
-		int key_type;						\
+		HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars));			\
+		int key_type;												\
 																	\
-		for (zend_hash_internal_pointer_reset(_ht);			\
+		for (zend_hash_internal_pointer_reset(_ht);					\
 				(key_type = zend_hash_get_current_key_ex(_ht, &key, &key_length, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT; \
-				zend_hash_move_forward(_ht)) {				\
-			if (key_type == HASH_KEY_IS_LONG) {                                             \
-				php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Skipping numeric key %ld.", num_key); \
-				continue;                                                               \
-			}										\
-			key_length--;										\
-			if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \
+					zend_hash_move_forward(_ht)) {					\
+			if (key_type == HASH_KEY_IS_LONG) {						\
+				php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Skipping numeric key %ld", num_key);	\
+				continue;											\
+			}														\
+			key_length--;											\
+			if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) {	\
 				code;		 										\
 			} 														\
 		}															\
diff --git a/ext/session/session.c b/ext/session/session.c
index 9e47529..1c9608b 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: session.c,v 1.417.2.8.2.46 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: session.c,v 1.417.2.8.2.48 2009/05/18 17:23:42 jani Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -43,7 +43,7 @@
 #include "ext/date/php_date.h"
 #include "ext/standard/php_lcg.h"
 #include "ext/standard/url_scanner_ex.h"
-#include "ext/standard/php_rand.h"                   /* for RAND_MAX */
+#include "ext/standard/php_rand.h" /* for RAND_MAX */
 #include "ext/standard/info.h"
 #include "ext/standard/php_smart_str.h"
 #include "ext/standard/url.h"
@@ -55,276 +55,89 @@
 #include "mod_mm.h"
 #endif
 
-/* {{{ session_functions[]
- */
-zend_function_entry session_functions[] = {
-	PHP_FE(session_name,              NULL)
-	PHP_FE(session_module_name,       NULL)
-	PHP_FE(session_save_path,         NULL)
-	PHP_FE(session_id,                NULL)
-	PHP_FE(session_regenerate_id,     NULL)
-	PHP_FE(session_decode,            NULL)
-	PHP_FE(session_register,          NULL)
-	PHP_FE(session_unregister,        NULL)
-	PHP_FE(session_is_registered,     NULL)
-	PHP_FE(session_encode,            NULL)
-	PHP_FE(session_start,             NULL)
-	PHP_FE(session_destroy,           NULL)
-	PHP_FE(session_unset,             NULL)
-	PHP_FE(session_set_save_handler,  NULL)
-	PHP_FE(session_cache_limiter,     NULL)
-	PHP_FE(session_cache_expire,      NULL)
-	PHP_FE(session_set_cookie_params, NULL)
-	PHP_FE(session_get_cookie_params, NULL)
-	PHP_FE(session_write_close,       NULL)
-	PHP_FALIAS(session_commit, session_write_close, NULL)
-	{NULL, NULL, NULL}
-};
-/* }}} */
-
 PHPAPI ZEND_DECLARE_MODULE_GLOBALS(ps);
-static PHP_GINIT_FUNCTION(ps);
 
-#define SESSION_CHECK_ACTIVE_STATE	\
-	if (PS(session_status) == php_session_active) {	\
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "A session is active. You cannot change the session module's ini settings at this time.");	\
-		return FAILURE;	\
-	}	\
+/* ***********
+   * Helpers *
+   *********** */
 
-static PHP_INI_MH(OnUpdateSaveHandler)
-{
-	ps_module *tmp;
-	SESSION_CHECK_ACTIVE_STATE;
+#ifdef NETWARE
+# define SESS_SB_MTIME(sb)	((sb).st_mtime.tv_sec)
+#else
+# define SESS_SB_MTIME(sb)	((sb).st_mtime)
+#endif
 
-	tmp = _php_find_ps_module(new_value TSRMLS_CC);
+#define IF_SESSION_VARS() \
+	if (PS(http_session_vars) && PS(http_session_vars)->type == IS_ARRAY)
 
-	if (PG(modules_activated) && !tmp) {
-		int err_type;
-		if (stage == ZEND_INI_STAGE_RUNTIME) {
-			err_type = E_WARNING;
-		} else {
-			err_type = E_ERROR;
-		}
-		php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find save handler %s", new_value);
-		return FAILURE;
+#define SESSION_CHECK_ACTIVE_STATE	\
+	if (PS(session_status) == php_session_active) {	\
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "A session is active. You cannot change the session module's ini settings at this time");	\
+		return FAILURE;	\
 	}
-	PS(mod) = tmp;
-
-	return SUCCESS;
-}
 
-static PHP_INI_MH(OnUpdateTransSid)
+/* Dispatched by RINIT and by php_session_destroy */
+static inline void php_rinit_session_globals(TSRMLS_D) /* {{{ */
 {
-	SESSION_CHECK_ACTIVE_STATE;
-
-	if (!strncasecmp(new_value, "on", sizeof("on"))) {
-		PS(use_trans_sid) = (zend_bool) 1;
-	} else {
-		PS(use_trans_sid) = (zend_bool) atoi(new_value);
-	}
-
-	return SUCCESS;
+	PS(id) = NULL;
+	PS(session_status) = php_session_none;
+	PS(mod_data) = NULL;
+	/* Do NOT init PS(mod_user_names) here! */
+	PS(http_session_vars) = NULL;
 }
+/* }}} */
 
-static PHP_INI_MH(OnUpdateSerializer)
+/* Dispatched by RSHUTDOWN and by php_session_destroy */
+static inline void php_rshutdown_session_globals(TSRMLS_D) /* {{{ */
 {
-	const ps_serializer *tmp;
-	SESSION_CHECK_ACTIVE_STATE;
-
-	tmp = _php_find_ps_serializer(new_value TSRMLS_CC);
-
-	if (PG(modules_activated) && !tmp) {
-		int err_type;
-		if (stage == ZEND_INI_STAGE_RUNTIME) {
-			err_type = E_WARNING;
-		} else {
-			err_type = E_ERROR;
-		}
-		php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find serialization handler %s", new_value);
-		return FAILURE;
+	if (PS(http_session_vars)) {
+		zval_ptr_dtor(&PS(http_session_vars));
+		PS(http_session_vars) = NULL;
 	}
-	PS(serializer) = tmp;
-
-	return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdateSaveDir)
-{
-	/* Only do the safemode/open_basedir check at runtime */
-	if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) {
-		char *p;
-
-		if (memchr(new_value, '\0', new_value_length) != NULL) {
-			return FAILURE;
-		}
-
-		if ((p = zend_memrchr(new_value, ';', new_value_length))) {
-			p++;
-		} else {
-			p = new_value;
-		}
-
-		if (PG(safe_mode) && (!php_checkuid(p, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
-			return FAILURE;
-		}
-
-		if (PG(open_basedir) && php_check_open_basedir(p TSRMLS_CC)) {
-			return FAILURE;
-		}
+	/* Do NOT destroy PS(mod_user_names) here! */
+	if (PS(mod_data)) {
+		zend_try {
+			PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
+		} zend_end_try();
+	}
+	if (PS(id)) {
+		efree(PS(id));
 	}
-	OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-	return SUCCESS;
 }
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-	STD_PHP_INI_BOOLEAN("session.bug_compat_42",    "1",         PHP_INI_ALL, OnUpdateBool,   bug_compat,         php_ps_globals,    ps_globals)
-	STD_PHP_INI_BOOLEAN("session.bug_compat_warn",  "1",         PHP_INI_ALL, OnUpdateBool,   bug_compat_warn,    php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.save_path",          "",          PHP_INI_ALL, OnUpdateSaveDir,save_path,          php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.name",               "PHPSESSID", PHP_INI_ALL, OnUpdateString, session_name,       php_ps_globals,    ps_globals)
-	PHP_INI_ENTRY("session.save_handler",           "files",     PHP_INI_ALL, OnUpdateSaveHandler)
-	STD_PHP_INI_BOOLEAN("session.auto_start",       "0",         PHP_INI_ALL, OnUpdateBool,   auto_start,         php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.gc_probability",     "1",         PHP_INI_ALL, OnUpdateLong,    gc_probability,     php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.gc_divisor",         "100",       PHP_INI_ALL, OnUpdateLong,    gc_divisor,        php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.gc_maxlifetime",     "1440",      PHP_INI_ALL, OnUpdateLong,    gc_maxlifetime,     php_ps_globals,    ps_globals)
-	PHP_INI_ENTRY("session.serialize_handler",      "php",       PHP_INI_ALL, OnUpdateSerializer)
-	STD_PHP_INI_ENTRY("session.cookie_lifetime",    "0",         PHP_INI_ALL, OnUpdateLong,    cookie_lifetime,    php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.cookie_path",        "/",         PHP_INI_ALL, OnUpdateString, cookie_path,        php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.cookie_domain",      "",          PHP_INI_ALL, OnUpdateString, cookie_domain,      php_ps_globals,    ps_globals)
-	STD_PHP_INI_BOOLEAN("session.cookie_secure",    "",          PHP_INI_ALL, OnUpdateBool,   cookie_secure,      php_ps_globals,    ps_globals)
-	STD_PHP_INI_BOOLEAN("session.cookie_httponly",  "",          PHP_INI_ALL, OnUpdateBool,   cookie_httponly,    php_ps_globals,    ps_globals)
-	STD_PHP_INI_BOOLEAN("session.use_cookies",      "1",         PHP_INI_ALL, OnUpdateBool,   use_cookies,        php_ps_globals,    ps_globals)
-	STD_PHP_INI_BOOLEAN("session.use_only_cookies", "0",         PHP_INI_ALL, OnUpdateBool,   use_only_cookies,   php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.referer_check",      "",          PHP_INI_ALL, OnUpdateString, extern_referer_chk, php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.entropy_file",       "",          PHP_INI_ALL, OnUpdateString, entropy_file,       php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.entropy_length",     "0",         PHP_INI_ALL, OnUpdateLong,    entropy_length,     php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.cache_limiter",      "nocache",   PHP_INI_ALL, OnUpdateString, cache_limiter,      php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.cache_expire",       "180",       PHP_INI_ALL, OnUpdateLong,    cache_expire,       php_ps_globals,    ps_globals)
-	PHP_INI_ENTRY("session.use_trans_sid",    	"0",         PHP_INI_ALL, OnUpdateTransSid)
-	STD_PHP_INI_ENTRY("session.hash_function",      "0",         PHP_INI_ALL, OnUpdateLong,    hash_func,          php_ps_globals,    ps_globals)
-	STD_PHP_INI_ENTRY("session.hash_bits_per_character",      "4",         PHP_INI_ALL, OnUpdateLong,    hash_bits_per_character,          php_ps_globals,    ps_globals)
-
-	/* Commented out until future discussion */
-	/* PHP_INI_ENTRY("session.encode_sources", "globals,track", PHP_INI_ALL, NULL) */
-PHP_INI_END()
 /* }}} */
 
-PS_SERIALIZER_FUNCS(php);
-PS_SERIALIZER_FUNCS(php_binary);
-
-#define MAX_SERIALIZERS 10
-#define PREDEFINED_SERIALIZERS 2
-
-static ps_serializer ps_serializers[MAX_SERIALIZERS + 1] = {
-	PS_SERIALIZER_ENTRY(php),
-	PS_SERIALIZER_ENTRY(php_binary)
-};
-
-#define MAX_MODULES 10
-#define PREDEFINED_MODULES 2
-
-static ps_module *ps_modules[MAX_MODULES + 1] = {
-	ps_files_ptr,
-	ps_user_ptr
-};
-
-#define IF_SESSION_VARS() \
-	if (PS(http_session_vars) && PS(http_session_vars)->type == IS_ARRAY)
-
-PHPAPI int php_session_register_serializer(const char *name,
-		int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
-		int (*decode)(PS_SERIALIZER_DECODE_ARGS))
+static int php_session_destroy(TSRMLS_D) /* {{{ */
 {
-	int ret = -1;
-	int i;
+	int retval = SUCCESS;
 
-	for (i = 0; i < MAX_SERIALIZERS; i++) {
-		if (ps_serializers[i].name == NULL) {
-			ps_serializers[i].name = name;
-			ps_serializers[i].encode = encode;
-			ps_serializers[i].decode = decode;
-			ps_serializers[i + 1].name = NULL;
-			ret = 0;
-			break;
-		}
+	if (PS(session_status) != php_session_active) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to destroy uninitialized session");
+		return FAILURE;
 	}
 
-	return ret;
-}
-
-PHPAPI int php_session_register_module(ps_module *ptr)
-{
-	int ret = -1;
-	int i;
-
-	for (i = 0; i < MAX_MODULES; i++) {
-		if (!ps_modules[i]) {
-			ps_modules[i] = ptr;
-			ret = 0;
-			break;
-		}
+	if (PS(mod)->s_destroy(&PS(mod_data), PS(id) TSRMLS_CC) == FAILURE) {
+		retval = FAILURE;
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Session object destruction failed");
 	}
 
-	return ret;
-}
-
-PHP_MINIT_FUNCTION(session);
-PHP_RINIT_FUNCTION(session);
-PHP_MSHUTDOWN_FUNCTION(session);
-PHP_RSHUTDOWN_FUNCTION(session);
-PHP_MINFO_FUNCTION(session);
-
-static void php_rinit_session_globals(TSRMLS_D);
-static void php_rshutdown_session_globals(TSRMLS_D);
-static int php_session_destroy(TSRMLS_D);
-
-zend_module_entry session_module_entry = {
-	STANDARD_MODULE_HEADER,
-	"session",
-	session_functions,
-	PHP_MINIT(session), PHP_MSHUTDOWN(session),
-	PHP_RINIT(session), PHP_RSHUTDOWN(session),
-	PHP_MINFO(session),
-	NO_VERSION_YET,
-	PHP_MODULE_GLOBALS(ps),
-	PHP_GINIT(ps),
-	NULL,
-	NULL,
-	STANDARD_MODULE_PROPERTIES_EX
-};
-
-#ifdef COMPILE_DL_SESSION
-ZEND_GET_MODULE(session)
-#endif
-
-typedef struct {
-	char *name;
-	void (*func)(TSRMLS_D);
-} php_session_cache_limiter_t;
-
-#define CACHE_LIMITER(name) _php_cache_limiter_##name
-#define CACHE_LIMITER_FUNC(name) static void CACHE_LIMITER(name)(TSRMLS_D)
-#define CACHE_LIMITER_ENTRY(name) { #name, CACHE_LIMITER(name) },
-
-#define ADD_HEADER(a) sapi_add_header(a, strlen(a), 1);
+	php_rshutdown_session_globals(TSRMLS_C);
+	php_rinit_session_globals(TSRMLS_C);
 
-#define MAX_STR 512
+	return retval;
+}
+/* }}} */
 
-PHPAPI void php_add_session_var(char *name, size_t namelen TSRMLS_DC)
+PHPAPI void php_add_session_var(char *name, size_t namelen TSRMLS_DC) /* {{{ */
 {
 	zval **sym_track = NULL;
 
 	IF_SESSION_VARS() {
-		zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1,
-				(void *) &sym_track);
+		zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, (void *) &sym_track);
 	} else {
 		return;
 	}
 
-	/*
-	 * Set up a proper reference between $_SESSION["x"] and $x.
-	 */
+	/* Set up a proper reference between $_SESSION["x"] and $x. */
 
 	if (PG(register_globals)) {
 		zval **sym_global = NULL;
@@ -358,8 +171,9 @@ PHPAPI void php_add_session_var(char *name, size_t namelen TSRMLS_DC)
 		}
 	}
 }
+/* }}} */
 
-PHPAPI void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC)
+PHPAPI void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC) /* {{{ */
 {
 	if (PG(register_globals)) {
 		zval **old_symbol;
@@ -368,8 +182,7 @@ PHPAPI void php_set_session_var(char *name, size_t namelen, zval *state_val, php
 				return;
 			}
 
-			/*
-			 * A global symbol with the same name exists already. That
+			/* A global symbol with the same name exists already. That
 			 * symbol might have been created by other means (e.g. $_GET).
 			 *
 			 * hash_update in zend_set_hash_symbol is not good, because
@@ -377,17 +190,13 @@ PHPAPI void php_set_session_var(char *name, size_t namelen, zval *state_val, php
 			 * of a global variable) dangling.
 			 *
 			 * BTW: if you use register_globals references between
-			 * session-vars won't work because of this very reason!
-			 */
-
+			 * session-vars won't work because of this very reason! */
 
 			REPLACE_ZVAL_VALUE(old_symbol,state_val,1);
 
-			/*
-			 * The following line will update the reference table used for
+			/* The following line will update the reference table used for
 			 * unserialization.  It is optional, because some storage
-			 * formats may not be able to represent references.
-			 */
+			 * formats may not be able to represent references. */
 
 			if (var_hash) {
 				PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash,state_val,*old_symbol);
@@ -401,208 +210,34 @@ PHPAPI void php_set_session_var(char *name, size_t namelen, zval *state_val, php
 		zend_set_hash_symbol(state_val, name, namelen, PZVAL_IS_REF(state_val), 1, Z_ARRVAL_P(PS(http_session_vars)));
 	}
 }
+/* }}} */
 
-PHPAPI int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC)
+PHPAPI int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC) /* {{{ */
 {
 	int ret = FAILURE;
 
 	IF_SESSION_VARS() {
-		ret = zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name,
-				namelen+1, (void **) state_var);
+		ret = zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, (void **) state_var);
 
-		/*
-		 * If register_globals is enabled, and
+		/* If register_globals is enabled, and
 		 * if there is an entry for the slot in $_SESSION, and
 		 * if that entry is still set to NULL, and
 		 * if the global var exists, then
-		 * we prefer the same key in the global sym table
-		 */
+		 * we prefer the same key in the global sym table. */
 
-		if (PG(register_globals) && ret == SUCCESS
-				&& Z_TYPE_PP(*state_var) == IS_NULL) {
+		if (PG(register_globals) && ret == SUCCESS && Z_TYPE_PP(*state_var) == IS_NULL) {
 			zval **tmp;
 
-			if (zend_hash_find(&EG(symbol_table), name, namelen + 1,
-						(void **) &tmp) == SUCCESS) {
+			if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) {
 				*state_var = tmp;
 			}
 		}
 	}
-
 	return ret;
 }
+/* }}} */
 
-#define PS_BIN_NR_OF_BITS 8
-#define PS_BIN_UNDEF (1<<(PS_BIN_NR_OF_BITS-1))
-#define PS_BIN_MAX (PS_BIN_UNDEF-1)
-
-PS_SERIALIZER_ENCODE_FUNC(php_binary)
-{
-	smart_str buf = {0};
-	php_serialize_data_t var_hash;
-	PS_ENCODE_VARS;
-
-	PHP_VAR_SERIALIZE_INIT(var_hash);
-
-	PS_ENCODE_LOOP(
-			if (key_length > PS_BIN_MAX) continue;
-			smart_str_appendc(&buf, (unsigned char) key_length);
-			smart_str_appendl(&buf, key, key_length);
-
-			php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
-		} else {
-			if (key_length > PS_BIN_MAX) continue;
-			smart_str_appendc(&buf, (unsigned char) (key_length & PS_BIN_UNDEF));
-			smart_str_appendl(&buf, key, key_length);
-	);
-
-	if (newlen) *newlen = buf.len;
-	*newstr = buf.c;
-	PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
-	return SUCCESS;
-}
-
-PS_SERIALIZER_DECODE_FUNC(php_binary)
-{
-	const char *p;
-	char *name;
-	const char *endptr = val + vallen;
-	zval *current;
-	int namelen;
-	int has_value;
-	php_unserialize_data_t var_hash;
-
-	PHP_VAR_UNSERIALIZE_INIT(var_hash);
-
-	for (p = val; p < endptr; ) {
-		zval **tmp;
-		namelen = *p & (~PS_BIN_UNDEF);
-
-		if (namelen < 0 || namelen > PS_BIN_MAX || (p + namelen) >= endptr) {
-			return FAILURE;
-		}
-
-		has_value = *p & PS_BIN_UNDEF ? 0 : 1;
-
-		name = estrndup(p + 1, namelen);
-
-		p += namelen + 1;
-
-		if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) {
-			if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) {
-				efree(name);
-				continue;
-			}
-		}
-
-		if (has_value) {
-			ALLOC_INIT_ZVAL(current);
-			if (php_var_unserialize(&current, (const unsigned char **) &p, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) {
-				php_set_session_var(name, namelen, current, &var_hash  TSRMLS_CC);
-			}
-			zval_ptr_dtor(&current);
-		}
-		PS_ADD_VARL(name, namelen);
-		efree(name);
-	}
-
-	PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
-	return SUCCESS;
-}
-
-#define PS_DELIMITER '|'
-#define PS_UNDEF_MARKER '!'
-
-PS_SERIALIZER_ENCODE_FUNC(php)
-{
-	smart_str buf = {0};
-	php_serialize_data_t var_hash;
-	PS_ENCODE_VARS;
-
-	PHP_VAR_SERIALIZE_INIT(var_hash);
-
-	PS_ENCODE_LOOP(
-			smart_str_appendl(&buf, key, key_length);
-			if (memchr(key, PS_DELIMITER, key_length)) {
-				PHP_VAR_SERIALIZE_DESTROY(var_hash);
-				smart_str_free(&buf);
-				return FAILURE;
-			}
-			smart_str_appendc(&buf, PS_DELIMITER);
-
-			php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
-		} else {
-			smart_str_appendc(&buf, PS_UNDEF_MARKER);
-			smart_str_appendl(&buf, key, key_length);
-			smart_str_appendc(&buf, PS_DELIMITER);
-	);
-
-	if (newlen) *newlen = buf.len;
-	*newstr = buf.c;
-
-	PHP_VAR_SERIALIZE_DESTROY(var_hash);
-	return SUCCESS;
-}
-
-PS_SERIALIZER_DECODE_FUNC(php)
-{
-	const char *p, *q;
-	char *name;
-	const char *endptr = val + vallen;
-	zval *current;
-	int namelen;
-	int has_value;
-	php_unserialize_data_t var_hash;
-
-	PHP_VAR_UNSERIALIZE_INIT(var_hash);
-
-	p = val;
-
-	while (p < endptr) {
-		zval **tmp;
-		q = p;
-		while (*q != PS_DELIMITER)
-			if (++q >= endptr) goto break_outer_loop;
-
-		if (p[0] == PS_UNDEF_MARKER) {
-			p++;
-			has_value = 0;
-		} else {
-			has_value = 1;
-		}
-
-		namelen = q - p;
-		name = estrndup(p, namelen);
-		q++;
-
-		if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) {
-			if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) {
-				goto skip;
-			}
-		}
-
-		if (has_value) {
-			ALLOC_INIT_ZVAL(current);
-			if (php_var_unserialize(&current, (const unsigned char **) &q, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) {
-				php_set_session_var(name, namelen, current, &var_hash  TSRMLS_CC);
-			}
-			zval_ptr_dtor(&current);
-		}
-		PS_ADD_VARL(name, namelen);
-skip:
-		efree(name);
-		p = q;
-	}
-break_outer_loop:
-
-	PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
-	return SUCCESS;
-}
-
-static void php_session_track_init(TSRMLS_D)
+static void php_session_track_init(TSRMLS_D) /* {{{ */
 {
 	zval *session_vars = NULL;
 
@@ -626,37 +261,38 @@ static void php_session_track_init(TSRMLS_D)
 		ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 2, 1);
 	}
 }
+/* }}} */
 
-static char *php_session_encode(int *newlen TSRMLS_DC)
+static char *php_session_encode(int *newlen TSRMLS_DC) /* {{{ */
 {
 	char *ret = NULL;
 
 	IF_SESSION_VARS() {
 		if (!PS(serializer)) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown session.serialize_handler. Failed to encode session object.");
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown session.serialize_handler. Failed to encode session object");
 			ret = NULL;
-		}
-		else if (PS(serializer)->encode(&ret, newlen TSRMLS_CC) == FAILURE)
+		} else if (PS(serializer)->encode(&ret, newlen TSRMLS_CC) == FAILURE) {
 			ret = NULL;
+		}
 	} else {
-		 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot encode non-existent session.");
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot encode non-existent session");
 	}
-
 	return ret;
 }
+/* }}} */
 
-static void php_session_decode(const char *val, int vallen TSRMLS_DC)
+static void php_session_decode(const char *val, int vallen TSRMLS_DC) /* {{{ */
 {
 	if (!PS(serializer)) {
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown session.serialize_handler. Failed to decode session object.");
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown session.serialize_handler. Failed to decode session object");
 		return;
 	}
 	if (PS(serializer)->decode(val, vallen TSRMLS_CC) == FAILURE) {
 		php_session_destroy(TSRMLS_C);
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to decode session object. Session has been destroyed.");
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to decode session object. Session has been destroyed");
 	}
 }
-
+/* }}} */
 
 /*
  * Note that we cannot use the BASE64 alphabet here, because
@@ -672,7 +308,7 @@ enum {
 };
 
 /* returns a pointer to the byte after the last valid character in out */
-static char *bin_to_readable(char *in, size_t inlen, char *out, char nbits)
+static char *bin_to_readable(char *in, size_t inlen, char *out, char nbits) /* {{{ */
 {
 	unsigned char *p, *q;
 	unsigned short w;
@@ -708,8 +344,9 @@ static char *bin_to_readable(char *in, size_t inlen, char *out, char nbits)
 	*out = '\0';
 	return out;
 }
+/* }}} */
 
-PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
+PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS) /* {{{ */
 {
 	PHP_MD5_CTX md5_context;
 	PHP_SHA1_CTX sha1_context;
@@ -724,33 +361,31 @@ PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
 
 	gettimeofday(&tv, NULL);
 
-	if (zend_hash_find(&EG(symbol_table), "_SERVER",
-				sizeof("_SERVER"), (void **) &array) == SUCCESS &&
-			Z_TYPE_PP(array) == IS_ARRAY &&
-			zend_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR",
-				sizeof("REMOTE_ADDR"), (void **) &token) == SUCCESS) {
+	if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &array) == SUCCESS &&
+		Z_TYPE_PP(array) == IS_ARRAY &&
+		zend_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **) &token) == SUCCESS
+	) {
 		remote_addr = Z_STRVAL_PP(token);
 	}
 
 	/* maximum 15+19+19+10 bytes */
-	spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "",
-			tv.tv_sec, (long int)tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
+	spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "", tv.tv_sec, (long int)tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
 
 	switch (PS(hash_func)) {
-	case PS_HASH_FUNC_MD5:
-		PHP_MD5Init(&md5_context);
-		PHP_MD5Update(&md5_context, (unsigned char *) buf, strlen(buf));
-		digest_len = 16;
-		break;
-	case PS_HASH_FUNC_SHA1:
-		PHP_SHA1Init(&sha1_context);
-		PHP_SHA1Update(&sha1_context, (unsigned char *) buf, strlen(buf));
-		digest_len = 20;
-		break;
-	default:
-		php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function");
-		efree(buf);
-		return NULL;
+		case PS_HASH_FUNC_MD5:
+			PHP_MD5Init(&md5_context);
+			PHP_MD5Update(&md5_context, (unsigned char *) buf, strlen(buf));
+			digest_len = 16;
+			break;
+		case PS_HASH_FUNC_SHA1:
+			PHP_SHA1Init(&sha1_context);
+			PHP_SHA1Update(&sha1_context, (unsigned char *) buf, strlen(buf));
+			digest_len = 20;
+			break;
+		default:
+			php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function");
+			efree(buf);
+			return NULL;
 	}
 
 	if (PS(entropy_length) > 0) {
@@ -767,12 +402,12 @@ PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
 				if (n <= 0) break;
 
 				switch (PS(hash_func)) {
-				case PS_HASH_FUNC_MD5:
-					PHP_MD5Update(&md5_context, rbuf, n);
-					break;
-				case PS_HASH_FUNC_SHA1:
-					PHP_SHA1Update(&sha1_context, rbuf, n);
-					break;
+					case PS_HASH_FUNC_MD5:
+						PHP_MD5Update(&md5_context, rbuf, n);
+						break;
+					case PS_HASH_FUNC_SHA1:
+						PHP_SHA1Update(&sha1_context, rbuf, n);
+						break;
 				}
 				to_read -= n;
 			}
@@ -781,12 +416,12 @@ PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
 	}
 
 	switch (PS(hash_func)) {
-	case PS_HASH_FUNC_MD5:
-		PHP_MD5Final(digest, &md5_context);
-		break;
-	case PS_HASH_FUNC_SHA1:
-		PHP_SHA1Final(digest, &sha1_context);
-		break;
+		case PS_HASH_FUNC_MD5:
+			PHP_MD5Final(digest, &md5_context);
+			break;
+		case PS_HASH_FUNC_SHA1:
+			PHP_SHA1Final(digest, &sha1_context);
+			break;
 	}
 
 	if (PS(hash_bits_per_character) < 4
@@ -797,12 +432,15 @@ PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
 	}
 	j = (int) (bin_to_readable((char *)digest, digest_len, buf, PS(hash_bits_per_character)) - buf);
 
-	if (newlen)
+	if (newlen) {
 		*newlen = j;
+	}
+
 	return buf;
 }
+/* }}} */
 
-static void php_session_initialize(TSRMLS_D)
+static void php_session_initialize(TSRMLS_D) /* {{{ */
 {
 	char *val;
 	int vallen;
@@ -814,7 +452,7 @@ static void php_session_initialize(TSRMLS_D)
 	}
 
 	if (!PS(mod)) {
-		php_error_docref(NULL TSRMLS_CC, E_ERROR, "No storage module chosen - failed to initialize session.");
+		php_error_docref(NULL TSRMLS_CC, E_ERROR, "No storage module chosen - failed to initialize session");
 		return;
 	}
 
@@ -837,8 +475,7 @@ new_session:
 	/* Question: if you create a SID here, should you also try to read data?
 	 * I'm not sure, but while not doing so will remove one session operation
 	 * it could prove usefull for those sites which wish to have "default"
-	 * session information
-	 */
+	 * session information. */
 	php_session_track_init(TSRMLS_C);
 	PS(invalid_session_id) = 0;
 	if (PS(mod)->s_read(&PS(mod_data), PS(id), &val, &vallen TSRMLS_CC) == SUCCESS) {
@@ -851,8 +488,9 @@ new_session:
 		goto new_session;
 	}
 }
+/* }}} */
 
-static int migrate_global(HashTable *ht, HashPosition *pos TSRMLS_DC)
+static int migrate_global(HashTable *ht, HashPosition *pos TSRMLS_DC) /* {{{ */
 {
 	char *str;
 	uint str_len;
@@ -865,25 +503,24 @@ static int migrate_global(HashTable *ht, HashPosition *pos TSRMLS_DC)
 
 	switch (n) {
 		case HASH_KEY_IS_STRING:
-			if (zend_hash_find(&EG(symbol_table), str, str_len,
-						(void **) &val) == SUCCESS
-					&& val && Z_TYPE_PP(val) != IS_NULL) {
-				ZEND_SET_SYMBOL_WITH_LENGTH(ht, str, str_len, *val,
-						(*val)->refcount + 1 , 1);
+			if (zend_hash_find(&EG(symbol_table), str, str_len, (void **) &val) == SUCCESS &&
+				val && Z_TYPE_PP(val) != IS_NULL
+			) {
+				ZEND_SET_SYMBOL_WITH_LENGTH(ht, str, str_len, *val, (*val)->refcount + 1 , 1);
 				ret = 1;
 			}
 			break;
 		case HASH_KEY_IS_LONG:
 			php_error_docref(NULL TSRMLS_CC, E_NOTICE, "The session bug compatibility code will not "
 					"try to locate the global variable $%lu due to its "
-					"numeric nature.", num_key);
+					"numeric nature", num_key);
 			break;
 	}
-
 	return ret;
 }
+/* }}} */
 
-static void php_session_save_current_state(TSRMLS_D)
+static void php_session_save_current_state(TSRMLS_D) /* {{{ */
 {
 	int ret = FAILURE;
 
@@ -896,17 +533,17 @@ static void php_session_save_current_state(TSRMLS_D)
 
 			zend_hash_internal_pointer_reset_ex(ht, &pos);
 
-			while (zend_hash_get_current_data_ex(ht,
-						(void **) &val, &pos) != FAILURE) {
+			while (zend_hash_get_current_data_ex(ht, (void **) &val, &pos) != FAILURE) {
 				if (Z_TYPE_PP(val) == IS_NULL) {
-					if (migrate_global(ht, &pos TSRMLS_CC))
+					if (migrate_global(ht, &pos TSRMLS_CC)) {
 						do_warn = 1;
+					}
 				}
 				zend_hash_move_forward_ex(ht, &pos);
 			}
 
 			if (do_warn && PS(bug_compat_warn)) {
-				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.");
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively");
 			}
 		}
 
@@ -923,17 +560,412 @@ static void php_session_save_current_state(TSRMLS_D)
 			}
 		}
 
-		if (ret == FAILURE)
+		if (ret == FAILURE) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write session data (%s). Please "
 					"verify that the current setting of session.save_path "
 					"is correct (%s)",
 					PS(mod)->s_name,
 					PS(save_path));
+		}
 	}
 
-	if (PS(mod_data))
+	if (PS(mod_data)) {
 		PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
+	}
+}
+/* }}} */
+
+/* *************************
+   * INI Settings/Handlers *
+   ************************* */
+
+static PHP_INI_MH(OnUpdateSaveHandler) /* {{{ */
+{
+	ps_module *tmp;
+	SESSION_CHECK_ACTIVE_STATE;
+
+	tmp = _php_find_ps_module(new_value TSRMLS_CC);
+
+	if (PG(modules_activated) && !tmp) {
+		int err_type;
+
+		if (stage == ZEND_INI_STAGE_RUNTIME) {
+			err_type = E_WARNING;
+		} else {
+			err_type = E_ERROR;
+		}
+
+		/* Do not output error when restoring ini options. */
+		if (stage != ZEND_INI_STAGE_DEACTIVATE) {
+			php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find save handler '%s'", new_value);
+		}
+		return FAILURE;
+	}
+	PS(mod) = tmp;
+
+	return SUCCESS;
+}
+/* }}} */
+
+static PHP_INI_MH(OnUpdateSerializer) /* {{{ */
+{
+	const ps_serializer *tmp;
+	SESSION_CHECK_ACTIVE_STATE;
+
+	tmp = _php_find_ps_serializer(new_value TSRMLS_CC);
+
+	if (PG(modules_activated) && !tmp) {
+		int err_type;
+
+		if (stage == ZEND_INI_STAGE_RUNTIME) {
+			err_type = E_WARNING;
+		} else {
+			err_type = E_ERROR;
+		}
+
+		/* Do not output error when restoring ini options. */
+		if (stage != ZEND_INI_STAGE_DEACTIVATE) {
+			php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find serialization handler '%s'", new_value);
+		}
+		return FAILURE;
+	}
+	PS(serializer) = tmp;
+
+	return SUCCESS;
+}
+/* }}} */
+
+static PHP_INI_MH(OnUpdateTransSid) /* {{{ */
+{
+	SESSION_CHECK_ACTIVE_STATE;
+
+	if (!strncasecmp(new_value, "on", sizeof("on"))) {
+		PS(use_trans_sid) = (zend_bool) 1;
+	} else {
+		PS(use_trans_sid) = (zend_bool) atoi(new_value);
+	}
+
+	return SUCCESS;
+}
+/* }}} */
+
+static PHP_INI_MH(OnUpdateSaveDir) /* {{{ */
+{
+	/* Only do the safemode/open_basedir check at runtime */
+	if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) {
+		char *p;
+
+		if (memchr(new_value, '\0', new_value_length) != NULL) {
+			return FAILURE;
+		}
+
+		if ((p = zend_memrchr(new_value, ';', new_value_length))) {
+			p++;
+		} else {
+			p = new_value;
+		}
+
+		if (PG(safe_mode) && (!php_checkuid(p, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
+			return FAILURE;
+		}
+
+		if (PG(open_basedir) && php_check_open_basedir(p TSRMLS_CC)) {
+			return FAILURE;
+		}
+	}
+
+	OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+	return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_INI
+ */
+PHP_INI_BEGIN()
+	STD_PHP_INI_BOOLEAN("session.bug_compat_42",    "1",         PHP_INI_ALL, OnUpdateBool,   bug_compat,         php_ps_globals,    ps_globals)
+	STD_PHP_INI_BOOLEAN("session.bug_compat_warn",  "1",         PHP_INI_ALL, OnUpdateBool,   bug_compat_warn,    php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.save_path",          "",          PHP_INI_ALL, OnUpdateSaveDir,save_path,          php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.name",               "PHPSESSID", PHP_INI_ALL, OnUpdateString, session_name,       php_ps_globals,    ps_globals)
+	PHP_INI_ENTRY("session.save_handler",           "files",     PHP_INI_ALL, OnUpdateSaveHandler)
+	STD_PHP_INI_BOOLEAN("session.auto_start",       "0",         PHP_INI_ALL, OnUpdateBool,   auto_start,         php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.gc_probability",     "1",         PHP_INI_ALL, OnUpdateLong,   gc_probability,     php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.gc_divisor",         "100",       PHP_INI_ALL, OnUpdateLong,   gc_divisor,         php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.gc_maxlifetime",     "1440",      PHP_INI_ALL, OnUpdateLong,   gc_maxlifetime,     php_ps_globals,    ps_globals)
+	PHP_INI_ENTRY("session.serialize_handler",      "php",       PHP_INI_ALL, OnUpdateSerializer)
+	STD_PHP_INI_ENTRY("session.cookie_lifetime",    "0",         PHP_INI_ALL, OnUpdateLong,   cookie_lifetime,    php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.cookie_path",        "/",         PHP_INI_ALL, OnUpdateString, cookie_path,        php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.cookie_domain",      "",          PHP_INI_ALL, OnUpdateString, cookie_domain,      php_ps_globals,    ps_globals)
+	STD_PHP_INI_BOOLEAN("session.cookie_secure",    "",          PHP_INI_ALL, OnUpdateBool,   cookie_secure,      php_ps_globals,    ps_globals)
+	STD_PHP_INI_BOOLEAN("session.cookie_httponly",  "",          PHP_INI_ALL, OnUpdateBool,   cookie_httponly,    php_ps_globals,    ps_globals)
+	STD_PHP_INI_BOOLEAN("session.use_cookies",      "1",         PHP_INI_ALL, OnUpdateBool,   use_cookies,        php_ps_globals,    ps_globals)
+	STD_PHP_INI_BOOLEAN("session.use_only_cookies", "0",         PHP_INI_ALL, OnUpdateBool,   use_only_cookies,   php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.referer_check",      "",          PHP_INI_ALL, OnUpdateString, extern_referer_chk, php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.entropy_file",       "",          PHP_INI_ALL, OnUpdateString, entropy_file,       php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.entropy_length",     "0",         PHP_INI_ALL, OnUpdateLong,   entropy_length,     php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.cache_limiter",      "nocache",   PHP_INI_ALL, OnUpdateString, cache_limiter,      php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.cache_expire",       "180",       PHP_INI_ALL, OnUpdateLong,   cache_expire,       php_ps_globals,    ps_globals)
+	PHP_INI_ENTRY("session.use_trans_sid",          "0",         PHP_INI_ALL, OnUpdateTransSid)
+	STD_PHP_INI_ENTRY("session.hash_function",      "0",         PHP_INI_ALL, OnUpdateLong,   hash_func,          php_ps_globals,    ps_globals)
+	STD_PHP_INI_ENTRY("session.hash_bits_per_character", "4",    PHP_INI_ALL, OnUpdateLong,   hash_bits_per_character, php_ps_globals, ps_globals)
+
+	/* Commented out until future discussion */
+	/* PHP_INI_ENTRY("session.encode_sources", "globals,track", PHP_INI_ALL, NULL) */
+PHP_INI_END()
+/* }}} */
+
+/* ***************
+   * Serializers *
+   *************** */
+
+#define PS_BIN_NR_OF_BITS 8
+#define PS_BIN_UNDEF (1<<(PS_BIN_NR_OF_BITS-1))
+#define PS_BIN_MAX (PS_BIN_UNDEF-1)
+
+PS_SERIALIZER_ENCODE_FUNC(php_binary) /* {{{ */
+{
+	smart_str buf = {0};
+	php_serialize_data_t var_hash;
+	PS_ENCODE_VARS;
+
+	PHP_VAR_SERIALIZE_INIT(var_hash);
+
+	PS_ENCODE_LOOP(
+			if (key_length > PS_BIN_MAX) continue;
+			smart_str_appendc(&buf, (unsigned char) key_length);
+			smart_str_appendl(&buf, key, key_length);
+			php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
+		} else {
+			if (key_length > PS_BIN_MAX) continue;
+			smart_str_appendc(&buf, (unsigned char) (key_length & PS_BIN_UNDEF));
+			smart_str_appendl(&buf, key, key_length);
+	);
+
+	if (newlen) {
+		*newlen = buf.len;
+	}
+	smart_str_0(&buf);
+	*newstr = buf.c;
+	PHP_VAR_SERIALIZE_DESTROY(var_hash);
+
+	return SUCCESS;
+}
+/* }}} */
+
+PS_SERIALIZER_DECODE_FUNC(php_binary) /* {{{ */
+{
+	const char *p;
+	char *name;
+	const char *endptr = val + vallen;
+	zval *current;
+	int namelen;
+	int has_value;
+	php_unserialize_data_t var_hash;
+
+	PHP_VAR_UNSERIALIZE_INIT(var_hash);
+
+	for (p = val; p < endptr; ) {
+		zval **tmp;
+		namelen = ((unsigned char)(*p)) & (~PS_BIN_UNDEF);
+
+		if (namelen < 0 || namelen > PS_BIN_MAX || (p + namelen) >= endptr) {
+			return FAILURE;
+		}
+
+		has_value = *p & PS_BIN_UNDEF ? 0 : 1;
+
+		name = estrndup(p + 1, namelen);
+
+		p += namelen + 1;
+
+		if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) {
+			if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) {
+				efree(name);
+				continue;
+			}
+		}
+
+		if (has_value) {
+			ALLOC_INIT_ZVAL(current);
+			if (php_var_unserialize(&current, (const unsigned char **) &p, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) {
+				php_set_session_var(name, namelen, current, &var_hash  TSRMLS_CC);
+			}
+			zval_ptr_dtor(&current);
+		}
+		PS_ADD_VARL(name, namelen);
+		efree(name);
+	}
+
+	PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
+
+	return SUCCESS;
+}
+/* }}} */
+
+#define PS_DELIMITER '|'
+#define PS_UNDEF_MARKER '!'
+
+PS_SERIALIZER_ENCODE_FUNC(php) /* {{{ */
+{
+	smart_str buf = {0};
+	php_serialize_data_t var_hash;
+	PS_ENCODE_VARS;
+
+	PHP_VAR_SERIALIZE_INIT(var_hash);
+
+	PS_ENCODE_LOOP(
+			smart_str_appendl(&buf, key, key_length);
+			if (memchr(key, PS_DELIMITER, key_length)) {
+				PHP_VAR_SERIALIZE_DESTROY(var_hash);
+				smart_str_free(&buf);
+				return FAILURE;
+			}
+			smart_str_appendc(&buf, PS_DELIMITER);
+
+			php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
+		} else {
+			smart_str_appendc(&buf, PS_UNDEF_MARKER);
+			smart_str_appendl(&buf, key, key_length);
+			smart_str_appendc(&buf, PS_DELIMITER);
+	);
+
+	if (newlen) {
+		*newlen = buf.len;
+	}
+	smart_str_0(&buf);
+	*newstr = buf.c;
+
+	PHP_VAR_SERIALIZE_DESTROY(var_hash);
+	return SUCCESS;
+}
+/* }}} */
+
+PS_SERIALIZER_DECODE_FUNC(php) /* {{{ */
+{
+	const char *p, *q;
+	char *name;
+	const char *endptr = val + vallen;
+	zval *current;
+	int namelen;
+	int has_value;
+	php_unserialize_data_t var_hash;
+
+	PHP_VAR_UNSERIALIZE_INIT(var_hash);
+
+	p = val;
+
+	while (p < endptr) {
+		zval **tmp;
+		q = p;
+		while (*q != PS_DELIMITER) {
+			if (++q >= endptr) goto break_outer_loop;
+		}
+		if (p[0] == PS_UNDEF_MARKER) {
+			p++;
+			has_value = 0;
+		} else {
+			has_value = 1;
+		}
+
+		namelen = q - p;
+		name = estrndup(p, namelen);
+		q++;
+
+		if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) {
+			if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) {
+				goto skip;
+			}
+		}
+
+		if (has_value) {
+			ALLOC_INIT_ZVAL(current);
+			if (php_var_unserialize(&current, (const unsigned char **) &q, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) {
+				php_set_session_var(name, namelen, current, &var_hash  TSRMLS_CC);
+			}
+			zval_ptr_dtor(&current);
+		}
+		PS_ADD_VARL(name, namelen);
+skip:
+		efree(name);
+
+		p = q;
+	}
+break_outer_loop:
+
+	PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
+
+	return SUCCESS;
 }
+/* }}} */
+
+#define MAX_SERIALIZERS 10
+#define PREDEFINED_SERIALIZERS 2
+
+static ps_serializer ps_serializers[MAX_SERIALIZERS + 1] = {
+	PS_SERIALIZER_ENTRY(php),
+	PS_SERIALIZER_ENTRY(php_binary)
+};
+
+PHPAPI int php_session_register_serializer(const char *name, int (*encode)(PS_SERIALIZER_ENCODE_ARGS), int (*decode)(PS_SERIALIZER_DECODE_ARGS)) /* {{{ */
+{
+	int ret = -1;
+	int i;
+
+	for (i = 0; i < MAX_SERIALIZERS; i++) {
+		if (ps_serializers[i].name == NULL) {
+			ps_serializers[i].name = name;
+			ps_serializers[i].encode = encode;
+			ps_serializers[i].decode = decode;
+			ps_serializers[i + 1].name = NULL;
+			ret = 0;
+			break;
+		}
+	}
+	return ret;
+}
+/* }}} */
+
+/* *******************
+   * Storage Modules *
+   ******************* */
+
+#define MAX_MODULES 10
+#define PREDEFINED_MODULES 2
+
+static ps_module *ps_modules[MAX_MODULES + 1] = {
+	ps_files_ptr,
+	ps_user_ptr
+};
+
+PHPAPI int php_session_register_module(ps_module *ptr) /* {{{ */
+{
+	int ret = -1;
+	int i;
+
+	for (i = 0; i < MAX_MODULES; i++) {
+		if (!ps_modules[i]) {
+			ps_modules[i] = ptr;
+			ret = 0;
+			break;
+		}
+	}
+	return ret;
+}
+/* }}} */
+
+/* ******************
+   * Cache Limiters *
+   ****************** */
+
+typedef struct {
+	char *name;
+	void (*func)(TSRMLS_D);
+} php_session_cache_limiter_t;
+
+#define CACHE_LIMITER(name) _php_cache_limiter_##name
+#define CACHE_LIMITER_FUNC(name) static void CACHE_LIMITER(name)(TSRMLS_D)
+#define CACHE_LIMITER_ENTRY(name) { #name, CACHE_LIMITER(name) },
+#define ADD_HEADER(a) sapi_add_header(a, strlen(a), 1);
+#define MAX_STR 512
 
 static char *month_names[] = {
 	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
@@ -944,7 +976,7 @@ static char *week_days[] = {
 	"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
 };
 
-static void strcpy_gmt(char *ubuf, time_t *when)
+static inline void strcpy_gmt(char *ubuf, time_t *when) /* {{{ */
 {
 	char buf[MAX_STR];
 	struct tm tm, *res;
@@ -965,8 +997,9 @@ static void strcpy_gmt(char *ubuf, time_t *when)
 	memcpy(ubuf, buf, n);
 	ubuf[n] = '\0';
 }
+/* }}} */
 
-static void last_modified(TSRMLS_D)
+static inline void last_modified(TSRMLS_D) /* {{{ */
 {
 	const char *path;
 	struct stat sb;
@@ -980,16 +1013,14 @@ static void last_modified(TSRMLS_D)
 
 #define LAST_MODIFIED "Last-Modified: "
 		memcpy(buf, LAST_MODIFIED, sizeof(LAST_MODIFIED) - 1);
-#ifdef NETWARE
-		strcpy_gmt(buf + sizeof(LAST_MODIFIED) - 1, &(sb.st_mtime.tv_sec));
-#else
-		strcpy_gmt(buf + sizeof(LAST_MODIFIED) - 1, &sb.st_mtime);
-#endif
+		strcpy_gmt(buf + sizeof(LAST_MODIFIED) - 1, &SESS_SB_MTIME(sb));
 		ADD_HEADER(buf);
 	}
 }
+/* }}} */
 
-CACHE_LIMITER_FUNC(public)
+#define EXPIRES "Expires: "
+CACHE_LIMITER_FUNC(public) /* {{{ */
 {
 	char buf[MAX_STR + 1];
 	struct timeval tv;
@@ -997,7 +1028,6 @@ CACHE_LIMITER_FUNC(public)
 
 	gettimeofday(&tv, NULL);
 	now = tv.tv_sec + PS(cache_expire) * 60;
-#define EXPIRES "Expires: "
 	memcpy(buf, EXPIRES, sizeof(EXPIRES) - 1);
 	strcpy_gmt(buf + sizeof(EXPIRES) - 1, &now);
 	ADD_HEADER(buf);
@@ -1007,8 +1037,9 @@ CACHE_LIMITER_FUNC(public)
 
 	last_modified(TSRMLS_C);
 }
+/* }}} */
 
-CACHE_LIMITER_FUNC(private_no_expire)
+CACHE_LIMITER_FUNC(private_no_expire) /* {{{ */
 {
 	char buf[MAX_STR + 1];
 
@@ -1017,21 +1048,26 @@ CACHE_LIMITER_FUNC(private_no_expire)
 
 	last_modified(TSRMLS_C);
 }
+/* }}} */
 
-CACHE_LIMITER_FUNC(private)
+CACHE_LIMITER_FUNC(private) /* {{{ */
 {
 	ADD_HEADER("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
 	CACHE_LIMITER(private_no_expire)(TSRMLS_C);
 }
+/* }}} */
 
-CACHE_LIMITER_FUNC(nocache)
+CACHE_LIMITER_FUNC(nocache) /* {{{ */
 {
 	ADD_HEADER("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
+
 	/* For HTTP/1.1 conforming clients and the rest (MSIE 5) */
 	ADD_HEADER("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
+
 	/* For HTTP/1.0 conforming clients */
 	ADD_HEADER("Pragma: no-cache");
 }
+/* }}} */
 
 static php_session_cache_limiter_t php_session_cache_limiters[] = {
 	CACHE_LIMITER_ENTRY(public)
@@ -1041,7 +1077,7 @@ static php_session_cache_limiter_t php_session_cache_limiters[] = {
 	{0}
 };
 
-static int php_session_cache_limiter(TSRMLS_D)
+static int php_session_cache_limiter(TSRMLS_D) /* {{{ */
 {
 	php_session_cache_limiter_t *lim;
 
@@ -1052,8 +1088,7 @@ static int php_session_cache_limiter(TSRMLS_D)
 		int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
 
 		if (output_start_filename) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cache limiter - headers already sent (output started at %s:%d)",
-				output_start_filename, output_start_lineno);
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cache limiter - headers already sent (output started at %s:%d)", output_start_filename, output_start_lineno);
 		} else {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cache limiter - headers already sent");
 		}
@@ -1069,6 +1104,11 @@ static int php_session_cache_limiter(TSRMLS_D)
 
 	return -1;
 }
+/* }}} */
+
+/* *********************
+   * Cookie Management *
+   ********************* */
 
 #define COOKIE_SET_COOKIE "Set-Cookie: "
 #define COOKIE_EXPIRES	"; expires="
@@ -1077,7 +1117,7 @@ static int php_session_cache_limiter(TSRMLS_D)
 #define COOKIE_SECURE	"; secure"
 #define COOKIE_HTTPONLY	"; HttpOnly"
 
-static void php_session_send_cookie(TSRMLS_D)
+static void php_session_send_cookie(TSRMLS_D) /* {{{ */
 {
 	smart_str ncookie = {0};
 	char *date_fmt = NULL;
@@ -1088,8 +1128,7 @@ static void php_session_send_cookie(TSRMLS_D)
 		int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
 
 		if (output_start_filename) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cookie - headers already sent by (output started at %s:%d)",
-				output_start_filename, output_start_lineno);
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cookie - headers already sent by (output started at %s:%d)", output_start_filename, output_start_lineno);
 		} else {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cookie - headers already sent");
 		}
@@ -1147,41 +1186,44 @@ static void php_session_send_cookie(TSRMLS_D)
 		header, probably sent with setcookie() will be replaced! */
 	sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC);
 }
+/* }}} */
 
-PHPAPI ps_module *_php_find_ps_module(char *name TSRMLS_DC)
+PHPAPI ps_module *_php_find_ps_module(char *name TSRMLS_DC) /* {{{ */
 {
 	ps_module *ret = NULL;
 	ps_module **mod;
 	int i;
 
-	for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++)
+	for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++) {
 		if (*mod && !strcasecmp(name, (*mod)->s_name)) {
 			ret = *mod;
 			break;
 		}
-
+	}
 	return ret;
 }
+/* }}} */
 
-PHPAPI const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC)
+PHPAPI const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC) /* {{{ */
 {
 	const ps_serializer *ret = NULL;
 	const ps_serializer *mod;
 
-	for (mod = ps_serializers; mod->name; mod++)
+	for (mod = ps_serializers; mod->name; mod++) {
 		if (!strcasecmp(name, mod->name)) {
 			ret = mod;
 			break;
 		}
-
+	}
 	return ret;
 }
+/* }}} */
 
 #define PPID2SID \
 		convert_to_string((*ppid)); \
 		PS(id) = estrndup(Z_STRVAL_PP(ppid), Z_STRLEN_PP(ppid))
 
-static void php_session_reset_id(TSRMLS_D)
+static void php_session_reset_id(TSRMLS_D) /* {{{ */
 {
 	int module_number = PS(module_number);
 
@@ -1210,53 +1252,60 @@ static void php_session_reset_id(TSRMLS_D)
 		php_url_scanner_add_var(PS(session_name), strlen(PS(session_name)), PS(id), strlen(PS(id)), 1 TSRMLS_CC);
 	}
 }
+/* }}} */
 
-PHPAPI void php_session_start(TSRMLS_D)
+PHPAPI void php_session_start(TSRMLS_D) /* {{{ */
 {
 	zval **ppid;
 	zval **data;
-	char *p;
+	char *p, *value;
 	int nrand;
 	int lensess;
 
 	PS(apply_trans_sid) = PS(use_trans_sid);
 
-	if (PS(session_status) != php_session_none) {
-		if (PS(session_status) == php_session_disabled) {
-			char *value;
+	switch (PS(session_status)) {
+		case php_session_active:
+			php_error(E_NOTICE, "A session had already been started - ignoring session_start()");
+			return;
+			break;
 
+		case php_session_disabled:
 			value = zend_ini_string("session.save_handler", sizeof("session.save_handler"), 0);
-
-			if (value) {
-				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find save handler %s", value);
+			if (!PS(mod) && value) {
+				PS(mod) = _php_find_ps_module(value TSRMLS_CC);
+				if (!PS(mod)) {
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find save handler '%s' - session startup failed", value);
+					return;
+				}
 			}
-			else {
-				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find unknown save handler");
+			value = zend_ini_string("session.serialize_handler", sizeof("session.serialize_handler"), 0);
+			if (!PS(serializer) && value) {
+				PS(serializer) = _php_find_ps_serializer(value TSRMLS_CC);
+				if (!PS(serializer)) {
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find serialization handler '%s' - session startup failed", value);
+					return;
+				}
 			}
-			return;
-		}
+			PS(session_status) = php_session_none;
+			/* fallthrough */
 
-		php_error(E_NOTICE, "A session had already been started - ignoring session_start()");
-		return;
-	} else {
-		PS(define_sid) = 1;
-		PS(send_cookie) = 1;
+		default:
+		case php_session_none:
+			PS(define_sid) = 1;
+			PS(send_cookie) = 1;
 	}
 
 	lensess = strlen(PS(session_name));
 
-
-	/*
-	 * Cookies are preferred, because initially
-	 * cookie and get variables will be available.
-	 */
+	/* Cookies are preferred, because initially
+	 * cookie and get variables will be available. */
 
 	if (!PS(id)) {
-		if (PS(use_cookies) && zend_hash_find(&EG(symbol_table), "_COOKIE",
-					sizeof("_COOKIE"), (void **) &data) == SUCCESS &&
+		if (PS(use_cookies) && zend_hash_find(&EG(symbol_table), "_COOKIE", sizeof("_COOKIE"), (void **) &data) == SUCCESS &&
 				Z_TYPE_PP(data) == IS_ARRAY &&
-				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
-					lensess + 1, (void **) &ppid) == SUCCESS) {
+				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+		) {
 			PPID2SID;
 			PS(apply_trans_sid) = 0;
 			PS(send_cookie) = 0;
@@ -1264,36 +1313,34 @@ PHPAPI void php_session_start(TSRMLS_D)
 		}
 
 		if (!PS(use_only_cookies) && !PS(id) &&
-				zend_hash_find(&EG(symbol_table), "_GET",
-					sizeof("_GET"), (void **) &data) == SUCCESS &&
+				zend_hash_find(&EG(symbol_table), "_GET", sizeof("_GET"), (void **) &data) == SUCCESS &&
 				Z_TYPE_PP(data) == IS_ARRAY &&
-				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
-					lensess + 1, (void **) &ppid) == SUCCESS) {
+				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+		) {
 			PPID2SID;
 			PS(send_cookie) = 0;
 		}
 
 		if (!PS(use_only_cookies) && !PS(id) &&
-				zend_hash_find(&EG(symbol_table), "_POST",
-					sizeof("_POST"), (void **) &data) == SUCCESS &&
+				zend_hash_find(&EG(symbol_table), "_POST", sizeof("_POST"), (void **) &data) == SUCCESS &&
 				Z_TYPE_PP(data) == IS_ARRAY &&
-				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
-					lensess + 1, (void **) &ppid) == SUCCESS) {
+				zend_hash_find(Z_ARRVAL_PP(data), PS(session_name), lensess + 1, (void **) &ppid) == SUCCESS
+		) {
 			PPID2SID;
 			PS(send_cookie) = 0;
 		}
 	}
 
-	/* check the REQUEST_URI symbol for a string of the form
-	   '<session-name>=<session-id>' to allow URLs of the form
-	   http://yoursite/<session-name>=<session-id>/script.php */
+	/* Check the REQUEST_URI symbol for a string of the form
+	 * '<session-name>=<session-id>' to allow URLs of the form
+	 * http://yoursite/<session-name>=<session-id>/script.php */
 
 	if (!PS(use_only_cookies) && !PS(id) && PG(http_globals)[TRACK_VARS_SERVER] &&
-			zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "REQUEST_URI",
-				sizeof("REQUEST_URI"), (void **) &data) == SUCCESS &&
+			zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "REQUEST_URI", sizeof("REQUEST_URI"), (void **) &data) == SUCCESS &&
 			Z_TYPE_PP(data) == IS_STRING &&
 			(p = strstr(Z_STRVAL_PP(data), PS(session_name))) &&
-			p[lensess] == '=') {
+			p[lensess] == '='
+	) {
 		char *q;
 
 		p += lensess + 1;
@@ -1301,32 +1348,33 @@ PHPAPI void php_session_start(TSRMLS_D)
 			PS(id) = estrndup(p, q - p);
 			PS(send_cookie) = 0;
 		}
-
 	}
 
-	/* check whether the current request was referred to by
-	   an external site which invalidates the previously found id */
+	/* Check whether the current request was referred to by
+	 * an external site which invalidates the previously found id. */
 
 	if (PS(id) &&
 			PS(extern_referer_chk)[0] != '\0' &&
 			PG(http_globals)[TRACK_VARS_SERVER] &&
-			zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "HTTP_REFERER",
-				sizeof("HTTP_REFERER"), (void **) &data) == SUCCESS &&
+			zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "HTTP_REFERER", sizeof("HTTP_REFERER"), (void **) &data) == SUCCESS &&
 			Z_TYPE_PP(data) == IS_STRING &&
 			Z_STRLEN_PP(data) != 0 &&
-			strstr(Z_STRVAL_PP(data), PS(extern_referer_chk)) == NULL) {
+			strstr(Z_STRVAL_PP(data), PS(extern_referer_chk)) == NULL
+	) {
 		efree(PS(id));
 		PS(id) = NULL;
 		PS(send_cookie) = 1;
-		if (PS(use_trans_sid))
+		if (PS(use_trans_sid)) {
 			PS(apply_trans_sid) = 1;
+		}
 	}
 
 	php_session_initialize(TSRMLS_C);
 
 	if (!PS(use_cookies) && PS(send_cookie)) {
-		if (PS(use_trans_sid))
+		if (PS(use_trans_sid)) {
 			PS(apply_trans_sid) = 1;
+		}
 		PS(send_cookie) = 0;
 	}
 
@@ -1342,38 +1390,42 @@ PHPAPI void php_session_start(TSRMLS_D)
 		nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C));
 		if (nrand < PS(gc_probability)) {
 			PS(mod)->s_gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels TSRMLS_CC);
-#if 0
-			if (nrdels != -1)
+#ifdef SESSION_DEBUG
+			if (nrdels != -1) {
 				php_error_docref(NULL TSRMLS_CC, E_NOTICE, "purged %d expired session objects", nrdels);
+			}
 #endif
 		}
 	}
 }
+/* }}} */
 
-static int php_session_destroy(TSRMLS_D)
+static void php_session_flush(TSRMLS_D) /* {{{ */
 {
-	int retval = SUCCESS;
-
-	if (PS(session_status) != php_session_active) {
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to destroy uninitialized session");
-		return FAILURE;
+	if (PS(session_status) == php_session_active) {
+		PS(session_status) = php_session_none;
+		zend_try {
+			php_session_save_current_state(TSRMLS_C);
+		} zend_end_try();
 	}
+}
+/* }}} */
 
-	if (PS(mod)->s_destroy(&PS(mod_data), PS(id) TSRMLS_CC) == FAILURE) {
-		retval = FAILURE;
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Session object destruction failed");
+PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC) /* {{{ */
+{
+	if (PS(apply_trans_sid) && (PS(session_status) == php_session_active)) {
+		*new = php_url_scanner_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC);
 	}
-
-	php_rshutdown_session_globals(TSRMLS_C);
-	php_rinit_session_globals(TSRMLS_C);
-
-	return retval;
 }
+/* }}} */
 
+/* ********************************
+   * Userspace exported functions *
+   ******************************** */
 
 /* {{{ proto void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])
    Set session cookie parameters */
-PHP_FUNCTION(session_set_cookie_params)
+static PHP_FUNCTION(session_set_cookie_params)
 {
 	zval **lifetime, **path, **domain, **secure,  **httponly;
 
@@ -1385,6 +1437,7 @@ PHP_FUNCTION(session_set_cookie_params)
 		WRONG_PARAM_COUNT;
 
 	convert_to_string_ex(lifetime);
+
 	zend_alter_ini_entry("session.cookie_lifetime", sizeof("session.cookie_lifetime"), Z_STRVAL_PP(lifetime), Z_STRLEN_PP(lifetime), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
 
 	if (ZEND_NUM_ARGS() > 1) {
@@ -1398,10 +1451,10 @@ PHP_FUNCTION(session_set_cookie_params)
 				convert_to_long_ex(secure);
 				zend_alter_ini_entry("session.cookie_secure", sizeof("session.cookie_secure"), Z_BVAL_PP(secure)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
 			}
-			    if (ZEND_NUM_ARGS() > 4) {
-			    	    convert_to_long_ex(httponly);
-				    zend_alter_ini_entry("session.cookie_httponly", sizeof("session.cookie_httponly"), Z_BVAL_PP(httponly)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-			    }
+			if (ZEND_NUM_ARGS() > 4) {
+				convert_to_long_ex(httponly);
+				zend_alter_ini_entry("session.cookie_httponly", sizeof("session.cookie_httponly"), Z_BVAL_PP(httponly)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+			}
 		}
 	}
 }
@@ -1409,7 +1462,7 @@ PHP_FUNCTION(session_set_cookie_params)
 
 /* {{{ proto array session_get_cookie_params(void)
    Return the session cookie parameters */
-PHP_FUNCTION(session_get_cookie_params)
+static PHP_FUNCTION(session_get_cookie_params)
 {
 	if (ZEND_NUM_ARGS() != 0) {
 		WRONG_PARAM_COUNT;
@@ -1427,7 +1480,7 @@ PHP_FUNCTION(session_get_cookie_params)
 
 /* {{{ proto string session_name([string newname])
    Return the current session name. If newname is given, the session name is replaced with newname */
-PHP_FUNCTION(session_name)
+static PHP_FUNCTION(session_name)
 {
 	zval **p_name;
 	int ac = ZEND_NUM_ARGS();
@@ -1449,7 +1502,7 @@ PHP_FUNCTION(session_name)
 
 /* {{{ proto string session_module_name([string newname])
    Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname */
-PHP_FUNCTION(session_module_name)
+static PHP_FUNCTION(session_module_name)
 {
 	zval **p_name;
 	int ac = ZEND_NUM_ARGS();
@@ -1468,8 +1521,7 @@ PHP_FUNCTION(session_module_name)
 	if (ac == 1) {
 		convert_to_string_ex(p_name);
 		if (!_php_find_ps_module(Z_STRVAL_PP(p_name) TSRMLS_CC)) {
-			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find named PHP session module (%s)",
-					Z_STRVAL_PP(p_name));
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot find named PHP session module (%s)", Z_STRVAL_PP(p_name));
 			zval_dtor(return_value);
 			RETURN_FALSE;
 		}
@@ -1485,19 +1537,20 @@ PHP_FUNCTION(session_module_name)
 
 /* {{{ proto void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)
    Sets user-level functions */
-PHP_FUNCTION(session_set_save_handler)
+static PHP_FUNCTION(session_set_save_handler)
 {
 	zval **args[6];
 	int i;
 	ps_user *mdata;
 	char *name;
 
+	if (PS(session_status) != php_session_none) {
+		RETURN_FALSE;
+	}
+
 	if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_array_ex(6, args) == FAILURE)
 		WRONG_PARAM_COUNT;
 
-	if (PS(session_status) != php_session_none)
-		RETURN_FALSE;
-
 	for (i = 0; i < 6; i++) {
 		if (!zend_is_callable(*args[i], 0, &name)) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument %d is not a valid callback", i+1);
@@ -1533,7 +1586,7 @@ PHP_FUNCTION(session_set_save_handler)
 
 /* {{{ proto string session_save_path([string newname])
    Return the current save path passed to module_name. If newname is given, the save path is replaced with newname */
-PHP_FUNCTION(session_save_path)
+static PHP_FUNCTION(session_save_path)
 {
 	zval **p_name;
 	int ac = ZEND_NUM_ARGS();
@@ -1555,7 +1608,7 @@ PHP_FUNCTION(session_save_path)
 
 /* {{{ proto string session_id([string newid])
    Return the current session id. If newid is given, the session id is replaced with newid */
-PHP_FUNCTION(session_id)
+static PHP_FUNCTION(session_id)
 {
 	zval **p_name;
 	int ac = ZEND_NUM_ARGS();
@@ -1572,7 +1625,9 @@ PHP_FUNCTION(session_id)
 
 	if (ac == 1) {
 		convert_to_string_ex(p_name);
-		if (PS(id)) efree(PS(id));
+		if (PS(id)) {
+			efree(PS(id));
+		}
 		PS(id) = estrndup(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
 	}
 
@@ -1582,7 +1637,7 @@ PHP_FUNCTION(session_id)
 
 /* {{{ proto bool session_regenerate_id([bool delete_old_session])
    Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session. */
-PHP_FUNCTION(session_regenerate_id)
+static PHP_FUNCTION(session_regenerate_id)
 {
 	zend_bool del_ses = 0;
 
@@ -1618,7 +1673,7 @@ PHP_FUNCTION(session_regenerate_id)
 
 /* {{{ proto string session_cache_limiter([string new_cache_limiter])
    Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter */
-PHP_FUNCTION(session_cache_limiter)
+static PHP_FUNCTION(session_cache_limiter)
 {
 	zval **p_cache_limiter;
 	int ac = ZEND_NUM_ARGS();
@@ -1640,7 +1695,7 @@ PHP_FUNCTION(session_cache_limiter)
 
 /* {{{ proto int session_cache_expire([int new_cache_expire])
    Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire */
-PHP_FUNCTION(session_cache_expire)
+static PHP_FUNCTION(session_cache_expire)
 {
 	zval **p_cache_expire;
 	int ac = ZEND_NUM_ARGS();
@@ -1683,100 +1738,17 @@ static void php_register_var(zval** entry TSRMLS_DC)
 		convert_to_string_ex(entry);
 
 		if ((strcmp(Z_STRVAL_PP(entry), "HTTP_SESSION_VARS") != 0) &&
-		   (strcmp(Z_STRVAL_PP(entry), "_SESSION") != 0)) {
+			(strcmp(Z_STRVAL_PP(entry), "_SESSION") != 0)
+		) {
 			PS_ADD_VARL(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry));
 		}
 	}
 }
 /* }}} */
 
-/* {{{ proto bool session_register(mixed var_names [, mixed ...])
-   Adds varname(s) to the list of variables which are freezed at the session end */
-PHP_FUNCTION(session_register)
-{
-	zval  ***args;
-	int      argc = ZEND_NUM_ARGS();
-	int      i;
-
-	if (argc <= 0)
-		RETURN_FALSE
-	else
-		args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
-
-	if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
-		efree(args);
-		WRONG_PARAM_COUNT;
-	}
-
-	if (PS(session_status) == php_session_none || PS(session_status) == php_session_disabled) {
-		php_session_start(TSRMLS_C);
-	}
-
-	if (PS(session_status) == php_session_disabled) {
-		efree(args);
-		RETURN_FALSE;
-	}
-
-	for (i = 0; i < argc; i++) {
-		if (Z_TYPE_PP(args[i]) == IS_ARRAY)
-			SEPARATE_ZVAL(args[i]);
-		php_register_var(args[i] TSRMLS_CC);
-	}
-
-	efree(args);
-
-	RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_unregister(string varname)
-   Removes varname from the list of variables which are freezed at the session end */
-PHP_FUNCTION(session_unregister)
-{
-	zval **p_name;
-	int ac = ZEND_NUM_ARGS();
-
-	if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
-		WRONG_PARAM_COUNT;
-
-	convert_to_string_ex(p_name);
-
-	PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
-
-	RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_is_registered(string varname)
-   Checks if a variable is registered in session */
-PHP_FUNCTION(session_is_registered)
-{
-	zval **p_name;
-	zval *p_var;
-	int ac = ZEND_NUM_ARGS();
-
-	if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
-		WRONG_PARAM_COUNT;
-
-	convert_to_string_ex(p_name);
-
-	if (PS(session_status) == php_session_none)
-		RETURN_FALSE;
-
-	IF_SESSION_VARS() {
-		if (zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)),
-					Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name)+1,
-					(void **)&p_var) == SUCCESS) {
-			RETURN_TRUE;
-		}
-	}
-	RETURN_FALSE;
-}
-/* }}} */
-
 /* {{{ proto string session_encode(void)
    Serializes the current setup and returns the serialized representation */
-PHP_FUNCTION(session_encode)
+static PHP_FUNCTION(session_encode)
 {
 	int len;
 	char *enc;
@@ -1796,18 +1768,18 @@ PHP_FUNCTION(session_encode)
 
 /* {{{ proto bool session_decode(string data)
    Deserializes data and reinitializes the variables */
-PHP_FUNCTION(session_decode)
+static PHP_FUNCTION(session_decode)
 {
 	zval **str;
 
-	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
-		WRONG_PARAM_COUNT;
-	}
-
 	if (PS(session_status) == php_session_none) {
 		RETURN_FALSE;
 	}
 
+	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+
 	convert_to_string_ex(str);
 
 	php_session_decode(Z_STRVAL_PP(str), Z_STRLEN_PP(str) TSRMLS_CC);
@@ -1818,37 +1790,37 @@ PHP_FUNCTION(session_decode)
 
 /* {{{ proto bool session_start(void)
    Begin session - reinitializes freezed variables, registers browsers etc */
-PHP_FUNCTION(session_start)
+static PHP_FUNCTION(session_start)
 {
 	/* skipping check for non-zero args for performance reasons here ?*/
 	php_session_start(TSRMLS_C);
+
+	if (PS(session_status) != php_session_active) {
+		RETURN_FALSE;
+	}
 	RETURN_TRUE;
 }
 /* }}} */
 
 /* {{{ proto bool session_destroy(void)
    Destroy the current session and all data associated with it */
-PHP_FUNCTION(session_destroy)
+static PHP_FUNCTION(session_destroy)
 {
 	if (ZEND_NUM_ARGS() != 0) {
 		WRONG_PARAM_COUNT;
 	}
 
-	if (php_session_destroy(TSRMLS_C) == SUCCESS) {
-		RETURN_TRUE;
-	} else {
-		RETURN_FALSE;
-	}
+	RETURN_BOOL(php_session_destroy(TSRMLS_C) == SUCCESS);
 }
 /* }}} */
 
-
 /* {{{ proto void session_unset(void)
    Unset all registered variables */
-PHP_FUNCTION(session_unset)
+static PHP_FUNCTION(session_unset)
 {
-	if (PS(session_status) == php_session_none)
+	if (PS(session_status) == php_session_none) {
 		RETURN_FALSE;
+	}
 
 	IF_SESSION_VARS() {
 		HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));
@@ -1861,8 +1833,7 @@ PHP_FUNCTION(session_unset)
 
 			zend_hash_internal_pointer_reset_ex(ht, &pos);
 
-			while (zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key,
-						0, &pos) == HASH_KEY_IS_STRING) {
+			while (zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key, 0, &pos) == HASH_KEY_IS_STRING) {
 				zend_delete_global_variable(str, str_len-1 TSRMLS_CC);
 				zend_hash_move_forward_ex(ht, &pos);
 			}
@@ -1874,39 +1845,131 @@ PHP_FUNCTION(session_unset)
 }
 /* }}} */
 
-PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC)
+/* {{{ proto void session_write_close(void)
+   Write session data and end session */
+static PHP_FUNCTION(session_write_close)
+{
+	php_session_flush(TSRMLS_C);
+}
+/* }}} */
+
+/* {{{ proto bool session_register(mixed var_names [, mixed ...])
+   Adds varname(s) to the list of variables which are freezed at the session end */
+static PHP_FUNCTION(session_register)
 {
-	if (PS(apply_trans_sid) && (PS(session_status) == php_session_active)) {
-		*new = php_url_scanner_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC);
+	zval  ***args;
+	int      argc = ZEND_NUM_ARGS();
+	int      i;
+
+	if (argc <= 0)
+		RETURN_FALSE
+	else
+		args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
+
+	if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
+		efree(args);
+		WRONG_PARAM_COUNT;
+	}
+
+	if (PS(session_status) == php_session_none || PS(session_status) == php_session_disabled) {
+		php_session_start(TSRMLS_C);
+	}
+
+	if (PS(session_status) == php_session_disabled) {
+		efree(args);
+		RETURN_FALSE;
+	}
+
+	for (i = 0; i < argc; i++) {
+		if (Z_TYPE_PP(args[i]) == IS_ARRAY) {
+			SEPARATE_ZVAL(args[i]);
+		}
+		php_register_var(args[i] TSRMLS_CC);
 	}
+
+	efree(args);
+
+	RETURN_TRUE;
 }
+/* }}} */
 
-static void php_rinit_session_globals(TSRMLS_D)
+/* {{{ proto bool session_unregister(string varname)
+   Removes varname from the list of variables which are freezed at the session end */
+static PHP_FUNCTION(session_unregister)
 {
-	PS(id) = NULL;
-	PS(session_status) = php_session_none;
-	PS(mod_data) = NULL;
-	PS(http_session_vars) = NULL;
+	zval **p_name;
+	int ac = ZEND_NUM_ARGS();
+
+	if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+	convert_to_string_ex(p_name);
+
+	PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
+
+	RETURN_TRUE;
 }
+/* }}} */
 
-static void php_rshutdown_session_globals(TSRMLS_D)
+/* {{{ proto bool session_is_registered(string varname)
+   Checks if a variable is registered in session */
+static PHP_FUNCTION(session_is_registered)
 {
-	if (PS(http_session_vars)) {
-		zval_ptr_dtor(&PS(http_session_vars));
-		PS(http_session_vars) = NULL;
+	zval **p_name;
+	zval *p_var;
+	int ac = ZEND_NUM_ARGS();
+
+	if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE) {
+		WRONG_PARAM_COUNT;
 	}
-	if (PS(mod_data)) {
-		zend_try {
-			PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
-		} zend_end_try();
+
+	if (PS(session_status) == php_session_none) {
+		RETURN_FALSE;
 	}
-	if (PS(id)) {
-		efree(PS(id));
+
+	convert_to_string_ex(p_name);
+
+	IF_SESSION_VARS() {
+		if (zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name)+1, (void **)&p_var) == SUCCESS) {
+			RETURN_TRUE;
+		}
 	}
+	RETURN_FALSE;
 }
+/* }}} */
+
+/* {{{ session_functions[]
+ */
+static zend_function_entry session_functions[] = {
+	PHP_FE(session_name,              NULL)
+	PHP_FE(session_module_name,       NULL)
+	PHP_FE(session_save_path,         NULL)
+	PHP_FE(session_id,                NULL)
+	PHP_FE(session_regenerate_id,     NULL)
+	PHP_FE(session_decode,            NULL)
+	PHP_FE(session_register,          NULL)
+	PHP_FE(session_unregister,        NULL)
+	PHP_FE(session_is_registered,     NULL)
+	PHP_FE(session_encode,            NULL)
+	PHP_FE(session_start,             NULL)
+	PHP_FE(session_destroy,           NULL)
+	PHP_FE(session_unset,             NULL)
+	PHP_FE(session_set_save_handler,  NULL)
+	PHP_FE(session_cache_limiter,     NULL)
+	PHP_FE(session_cache_expire,      NULL)
+	PHP_FE(session_set_cookie_params, NULL)
+	PHP_FE(session_get_cookie_params, NULL)
+	PHP_FE(session_write_close,       NULL)
+	PHP_FALIAS(session_commit, session_write_close, NULL)
+	{NULL, NULL, NULL}
+};
+/* }}} */
 
+/* ********************************
+   * Module Setup and Destruction *
+   ******************************** */
 
-PHP_RINIT_FUNCTION(session)
+static PHP_RINIT_FUNCTION(session) /* {{{ */
 {
 	php_rinit_session_globals(TSRMLS_C);
 
@@ -1917,12 +1980,6 @@ PHP_RINIT_FUNCTION(session)
 		if (value) {
 			PS(mod) = _php_find_ps_module(value TSRMLS_CC);
 		}
-
-		if (!PS(mod)) {
-			/* current status is unusable */
-			PS(session_status) = php_session_disabled;
-			return SUCCESS;
-		}
 	}
 
 	if (PS(serializer) == NULL) {
@@ -1946,25 +2003,9 @@ PHP_RINIT_FUNCTION(session)
 
 	return SUCCESS;
 }
+/* }}} */
 
-static void php_session_flush(TSRMLS_D)
-{
-	if (PS(session_status) == php_session_active) {
-		PS(session_status) = php_session_none;
-		zend_try {
-			php_session_save_current_state(TSRMLS_C);
-		} zend_end_try();
-	}
-}
-
-/* {{{ proto void session_write_close(void)
-   Write session data and end session */
-PHP_FUNCTION(session_write_close)
-{
-	php_session_flush(TSRMLS_C);
-}
-
-PHP_RSHUTDOWN_FUNCTION(session)
+static PHP_RSHUTDOWN_FUNCTION(session) /* {{{ */
 {
 	php_session_flush(TSRMLS_C);
 	php_rshutdown_session_globals(TSRMLS_C);
@@ -1973,18 +2014,20 @@ PHP_RSHUTDOWN_FUNCTION(session)
 }
 /* }}} */
 
-static PHP_GINIT_FUNCTION(ps)
+static PHP_GINIT_FUNCTION(ps) /* {{{ */
 {
 	ps_globals->save_path = NULL;
 	ps_globals->session_name = NULL;
 	ps_globals->id = NULL;
 	ps_globals->mod = NULL;
+	ps_globals->serializer = NULL;
 	ps_globals->mod_data = NULL;
 	ps_globals->session_status = php_session_none;
 	ps_globals->http_session_vars = NULL;
 }
+/* }}} */
 
-PHP_MINIT_FUNCTION(session)
+static PHP_MINIT_FUNCTION(session) /* {{{ */
 {
 	zend_register_auto_global("_SESSION", sizeof("_SESSION")-1, NULL TSRMLS_CC);
 
@@ -1998,8 +2041,9 @@ PHP_MINIT_FUNCTION(session)
 #endif
 	return SUCCESS;
 }
+/* }}} */
 
-PHP_MSHUTDOWN_FUNCTION(session)
+static PHP_MSHUTDOWN_FUNCTION(session) /* {{{ */
 {
 	UNREGISTER_INI_ENTRIES();
 
@@ -2012,9 +2056,9 @@ PHP_MSHUTDOWN_FUNCTION(session)
 
 	return SUCCESS;
 }
+/* }}} */
 
-
-PHP_MINFO_FUNCTION(session)
+static PHP_MINFO_FUNCTION(session) /* {{{ */
 {
 	ps_module **mod;
 	ps_serializer *ser;
@@ -2061,7 +2105,26 @@ PHP_MINFO_FUNCTION(session)
 
 	DISPLAY_INI_ENTRIES();
 }
+/* }}} */
+
+zend_module_entry session_module_entry = {
+	STANDARD_MODULE_HEADER,
+	"session",
+	session_functions,
+	PHP_MINIT(session), PHP_MSHUTDOWN(session),
+	PHP_RINIT(session), PHP_RSHUTDOWN(session),
+	PHP_MINFO(session),
+	NO_VERSION_YET,
+	PHP_MODULE_GLOBALS(ps),
+	PHP_GINIT(ps),
+	NULL,
+	NULL,
+	STANDARD_MODULE_PROPERTIES_EX
+};
 
+#ifdef COMPILE_DL_SESSION
+ZEND_GET_MODULE(session)
+#endif
 
 /*
  * Local variables:
diff --git a/ext/session/tests/008-php4.2.3.phpt b/ext/session/tests/008-php4.2.3.phpt
index b6485b3..7d31f2e 100644
--- a/ext/session/tests/008-php4.2.3.phpt
+++ b/ext/session/tests/008-php4.2.3.phpt
@@ -59,7 +59,7 @@ session_destroy();
 ?>
 --EXPECTF--
 NULL
-session_write_close(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.
+session_write_close(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively
 array(1) {
   ["c"]=>
   float(3.14)
diff --git a/ext/session/tests/014.phpt b/ext/session/tests/014.phpt
index 4c5b14c..e5734bc 100644
--- a/ext/session/tests/014.phpt
+++ b/ext/session/tests/014.phpt
@@ -35,8 +35,8 @@ session_destroy();
 --EXPECTF--
 <a href="/link?PHPSESSID=abtest">
 
-Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time. in %s on line %d
+Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line %d
 <a href="/link?PHPSESSID=abtest">
 
-Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time. in %s on line %d
+Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in %s on line %d
 <a href="/link?PHPSESSID=abtest">
diff --git a/ext/session/tests/bug42596.phpt b/ext/session/tests/bug42596.phpt
new file mode 100644
index 0000000..fd9a602
--- /dev/null
+++ b/ext/session/tests/bug42596.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #42596 (session.save_path MODE option will not set "write" bit for group or world)
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session.use_cookies=0
+session.cache_limiter=
+session.use_trans_sid=1
+arg_separator.output="&amp;"
+session.name=PHPSESSID
+session.serialize_handler=php
+session.save_handler=files
+--FILE--
+<?php
+$sessdir = dirname(__FILE__).'/sessions/';
+ at rmdir($sessdir);
+mkdir($sessdir);
+$save_path = '0;0777;'.$sessdir;
+umask(0);
+session_save_path($save_path);
+session_start();
+echo "hello world\n";
+session_write_close();
+
+foreach (glob($sessdir. "*") as $sessfile) {
+  var_dump(decoct(fileperms($sessfile)));
+  unlink($sessfile);
+}
+rmdir($sessdir);
+--EXPECT--
+hello world
+string(6) "100777"
+
diff --git a/ext/session/tests/session_decode_variation3.phpt b/ext/session/tests/session_decode_variation3.phpt
index b7e13cc..4a6f768 100644
--- a/ext/session/tests/session_decode_variation3.phpt
+++ b/ext/session/tests/session_decode_variation3.phpt
@@ -23,8 +23,8 @@ $_SESSION["foo"] = 1234567890;
 $_SESSION["bar"] = "Blah!";
 $_SESSION["guff"] = 123.456;
 var_dump($_SESSION);
-$encoded = "A2Zvb2k6MTIzNDU2Nzg5MDs=";
-var_dump(session_decode(base64_decode($encoded)));
+$encoded = "foo|i:1234567890;";
+var_dump(session_decode($encoded));
 var_dump($_SESSION);
 var_dump(session_destroy());
 
@@ -34,10 +34,11 @@ ob_end_flush();
 --EXPECTF--
 *** Testing session_decode() : variation ***
 
-Warning: session_start(): Unknown session.serialize_handler. Failed to decode session object. in %s on line %d
-bool(true)
-array(0) {
-}
+Warning: session_start(): Cannot find serialization handler 'blah' - session startup failed in %s on line %d
+bool(false)
+
+Notice: Undefined variable: _SESSION in %s on line %d
+NULL
 array(3) {
   ["foo"]=>
   int(1234567890)
@@ -47,7 +48,7 @@ array(3) {
   float(123.456)
 }
 
-Warning: session_decode(): Unknown session.serialize_handler. Failed to decode session object. in %s on line %d
+Warning: session_decode(): Unknown session.serialize_handler. Failed to decode session object in %s on line %d
 bool(true)
 array(3) {
   ["foo"]=>
@@ -57,6 +58,7 @@ array(3) {
   ["guff"]=>
   float(123.456)
 }
-bool(true)
-Done
 
+Warning: session_destroy(): Trying to destroy uninitialized session in %s on line %d
+bool(false)
+Done
diff --git a/ext/session/tests/session_encode_error2.phpt b/ext/session/tests/session_encode_error2.phpt
index 6a019b2..2475850 100644
--- a/ext/session/tests/session_encode_error2.phpt
+++ b/ext/session/tests/session_encode_error2.phpt
@@ -100,63 +100,63 @@ ob_end_flush();
 -- Iteration 1 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 0. in %s on line %d
+Notice: session_encode(): Skipping numeric key 0 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 2 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 1. in %s on line %d
+Notice: session_encode(): Skipping numeric key 1 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 3 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 12345. in %s on line %d
+Notice: session_encode(): Skipping numeric key 12345 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 4 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key -2345. in %s on line %d
+Notice: session_encode(): Skipping numeric key -2345 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 5 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 10. in %s on line %d
+Notice: session_encode(): Skipping numeric key 10 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 6 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key -10. in %s on line %d
+Notice: session_encode(): Skipping numeric key -10 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 7 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key %s. in %s on line %d
+Notice: session_encode(): Skipping numeric key %s in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 8 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 0. in %s on line %d
+Notice: session_encode(): Skipping numeric key 0 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 9 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 0. in %s on line %d
+Notice: session_encode(): Skipping numeric key 0 in %s on line %d
 bool(false)
 bool(true)
 
@@ -173,28 +173,28 @@ bool(true)
 -- Iteration 12 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 1. in %s on line %d
+Notice: session_encode(): Skipping numeric key 1 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 13 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 0. in %s on line %d
+Notice: session_encode(): Skipping numeric key 0 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 14 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 1. in %s on line %d
+Notice: session_encode(): Skipping numeric key 1 in %s on line %d
 bool(false)
 bool(true)
 
 -- Iteration 15 --
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 0. in %s on line %d
+Notice: session_encode(): Skipping numeric key 0 in %s on line %d
 bool(false)
 bool(true)
 
@@ -245,7 +245,7 @@ bool(true)
 
 Strict Standards: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
 
-Notice: session_encode(): Skipping numeric key %d. in %s on line %d
+Notice: session_encode(): Skipping numeric key %d in %s on line %d
 bool(false)
 bool(true)
 Done
diff --git a/ext/session/tests/session_encode_variation1.phpt b/ext/session/tests/session_encode_variation1.phpt
index 9c9f64b..4f2e5e8 100644
--- a/ext/session/tests/session_encode_variation1.phpt
+++ b/ext/session/tests/session_encode_variation1.phpt
@@ -31,7 +31,7 @@ ob_end_flush();
 --EXPECTF--
 *** Testing session_encode() : variation ***
 
-Warning: session_encode(): Cannot encode non-existent session. in %s on line %d
+Warning: session_encode(): Cannot encode non-existent session in %s on line %d
 bool(false)
 bool(true)
 bool(false)
@@ -41,7 +41,7 @@ bool(true)
 bool(false)
 bool(true)
 
-Warning: session_encode(): Cannot encode non-existent session. in %s on line %d
+Warning: session_encode(): Cannot encode non-existent session in %s on line %d
 bool(false)
 Done
 
diff --git a/ext/session/tests/session_encode_variation2.phpt b/ext/session/tests/session_encode_variation2.phpt
index 7ec8a63..d9971a6 100644
--- a/ext/session/tests/session_encode_variation2.phpt
+++ b/ext/session/tests/session_encode_variation2.phpt
@@ -29,7 +29,7 @@ ob_end_flush();
 bool(false)
 bool(true)
 
-Warning: session_encode(): Cannot encode non-existent session. in %s on line %d
+Warning: session_encode(): Cannot encode non-existent session in %s on line %d
 bool(false)
 Done
 
diff --git a/ext/session/tests/session_encode_variation6.phpt b/ext/session/tests/session_encode_variation6.phpt
index 4280473..6602e02 100644
--- a/ext/session/tests/session_encode_variation6.phpt
+++ b/ext/session/tests/session_encode_variation6.phpt
@@ -35,17 +35,17 @@ ob_end_flush();
 *** Testing session_encode() : variation ***
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 0. in %s on line %d
+Notice: session_encode(): Skipping numeric key 0 in %s on line %d
 bool(false)
 bool(true)
 bool(true)
 
-Notice: session_encode(): Skipping numeric key 1234567890. in %s on line %d
+Notice: session_encode(): Skipping numeric key 1234567890 in %s on line %d
 bool(false)
 bool(true)
 bool(true)
 
-Notice: session_encode(): Skipping numeric key -1234567890. in %s on line %d
+Notice: session_encode(): Skipping numeric key -1234567890 in %s on line %d
 bool(false)
 bool(true)
 Done
diff --git a/ext/session/tests/session_encode_variation8.phpt b/ext/session/tests/session_encode_variation8.phpt
index 57c9e17..7ffa948 100644
--- a/ext/session/tests/session_encode_variation8.phpt
+++ b/ext/session/tests/session_encode_variation8.phpt
@@ -29,11 +29,12 @@ ob_end_flush();
 --EXPECTF--
 *** Testing session_encode() : variation ***
 
-Warning: session_start(): Unknown session.serialize_handler. Failed to decode session object. in %s on line %d
-bool(true)
+Warning: session_start(): Cannot find serialization handler 'blah' - session startup failed in %s on line %d
+bool(false)
 
-Warning: session_encode(): Unknown session.serialize_handler. Failed to encode session object. in %s on line %d
+Warning: session_encode(): Cannot encode non-existent session in %s on line %d
 string(0) ""
-bool(true)
-Done
 
+Warning: session_destroy(): Trying to destroy uninitialized session in %s on line %d
+bool(false)
+Done
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 7c4d0a1..11f9be6 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: snmp.c,v 1.106.2.2.2.8 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: snmp.c,v 1.106.2.2.2.10 2009/06/01 13:10:56 iliaa Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -479,7 +479,7 @@ retry:
 						return;
 					} else if (st == SNMP_CMD_WALK) {
 						add_next_index_zval(return_value,snmpval); /* Add to returned array */
-					} else if (st == SNMP_CMD_REALWALK)  {
+					} else if (st == SNMP_CMD_REALWALK && vars->type != SNMP_ENDOFMIBVIEW && vars->type != SNMP_NOSUCHOBJECT && vars->type != SNMP_NOSUCHINSTANCE) {
 #ifdef HAVE_NET_SNMP
 						snprint_objid(buf2, sizeof(buf2), vars->name, vars->name_length);
 #else
@@ -490,9 +490,14 @@ retry:
 					if (st >= SNMP_CMD_WALK && st != SNMP_CMD_SET) {
 						if (vars->type != SNMP_ENDOFMIBVIEW && 
 							vars->type != SNMP_NOSUCHOBJECT && vars->type != SNMP_NOSUCHINSTANCE) {
-							memmove((char *)name, (char *)vars->name,vars->name_length * sizeof(oid));
-							name_length = vars->name_length;
-							keepwalking = 1;
+							if (snmp_oid_compare(name, name_length, vars->name, vars->name_length) >= 0) {
+								php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error: OID not increasing: %s",name);
+								keepwalking = 0;
+							} else {
+								memmove((char *)name, (char *)vars->name,vars->name_length * sizeof(oid));
+								name_length = vars->name_length;
+								keepwalking = 1;
+							}
 						}
 					}
 				}	
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index d39d1de..447fa44 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.c,v 1.103.2.21.2.46 2009/01/26 11:09:13 dmitry Exp $ */
+/* $Id: php_encoding.c,v 1.103.2.21.2.47 2009/06/15 17:36:00 felipe Exp $ */
 
 #include <time.h>
 
@@ -2726,7 +2726,7 @@ static zval *to_zval_map(encodeTypePtr type, xmlNodePtr data)
 			value = master_to_zval(NULL, xmlValue);
 
 			if (Z_TYPE_P(key) == IS_STRING) {
-				zend_hash_update(Z_ARRVAL_P(ret), Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &value, sizeof(zval *), NULL);
+				zend_symtable_update(Z_ARRVAL_P(ret), Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &value, sizeof(zval *), NULL);
 			} else if (Z_TYPE_P(key) == IS_LONG) {
 				zend_hash_index_update(Z_ARRVAL_P(ret), Z_LVAL_P(key), &value, sizeof(zval *), NULL);
 			} else {
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 4fe7dfc..20c2ef8 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <dmitry at zend.com>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_http.c,v 1.77.2.11.2.17 2009/01/19 21:57:45 iliaa Exp $ */
+/* $Id: php_http.c,v 1.77.2.11.2.18 2009/06/03 12:41:46 iliaa Exp $ */
 
 #include "php_soap.h"
 #include "ext/standard/base64.h"
@@ -614,6 +614,11 @@ try_again:
 						smart_str_append_const(&soap_headers, "\", opaque=\"");
 						smart_str_appendl(&soap_headers, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
 					}
+					if (zend_hash_find(Z_ARRVAL_PP(digest), "algorithm", sizeof("algorithm"), (void **)&tmp) == SUCCESS &&
+						Z_TYPE_PP(tmp) == IS_STRING) {
+						smart_str_append_const(&soap_headers, "\", algorithm=\"");
+						smart_str_appendl(&soap_headers, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
+					}
 					smart_str_append_const(&soap_headers, "\"\r\n");
 				}
 			} else {
diff --git a/ext/soap/tests/bug48557.phpt b/ext/soap/tests/bug48557.phpt
new file mode 100644
index 0000000..8ef778f
--- /dev/null
+++ b/ext/soap/tests/bug48557.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Bug #48557 (Numeric string keys in Apache Hashmaps are not cast to integers)
+--FILE--
+<?php
+error_reporting(E_ALL);
+ini_set('display_errors', 1);
+ini_set("soap.wsdl_cache_enabled", 0);
+
+function test($map) {
+	var_dump($map, $map[1], $map[2]);die;
+}
+
+$y = new SoapServer(dirname(__FILE__) . '/bug48557.wsdl');
+$y->addfunction("test");
+$request = <<<XML
+<?xml version="1.0"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+	<SOAP-ENV:Body>
+		<ns1:test>
+			<testParam xsi:type="ns2:Map">
+				<item>
+					<key xsi:type="xsd:int">1</key>
+					<value xsi:type="xsd:int">123</value>
+				</item>
+				<item>
+					<key xsi:type="xsd:int">-1000</key>
+					<value xsi:type="xsd:string">123</value>
+				</item>
+				<item>
+					<key xsi:type="xsd:string">2</key>
+					<value xsi:type="xsd:float">123.5</value>
+				</item>
+				<item>
+					<key xsi:type="xsd:string">-2000</key>
+					<value xsi:type="xsd:float">123.5</value>
+				</item>
+				<item>
+					<key xsi:type="xsd:string">011</key>
+					<value xsi:type="xsd:float">123.5</value>
+				</item>
+				<item>
+					<key xsi:type="xsd:int">012</key>
+					<value xsi:type="xsd:float">123.5</value>
+				</item>
+			</testParam>
+		</ns1:test>
+	</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+XML;
+
+$y->handle($request);
+
+?>
+===DONE===
+--EXPECTF--
+array(6) {
+  [1]=>
+  int(123)
+  [-1000]=>
+  %string|unicode%(3) "123"
+  [2]=>
+  float(123.5)
+  [-2000]=>
+  float(123.5)
+  [%u|b%"011"]=>
+  float(123.5)
+  [12]=>
+  float(123.5)
+}
+int(123)
+float(123.5)
diff --git a/ext/soap/tests/bug48557.wsdl b/ext/soap/tests/bug48557.wsdl
new file mode 100644
index 0000000..dfab543
--- /dev/null
+++ b/ext/soap/tests/bug48557.wsdl
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://test-uri/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="InteropTest" targetNamespace="http://test-uri/">
+	<types>
+		<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test-uri/">
+			<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
+			<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
+		</schema>
+	</types>
+	<message name="testMessage">
+		<part xmlns:apache="http://xml.apache.org/xml-soap" name="testParam" type="apache:Map"/>
+	</message>
+	<portType name="testPortType">
+		<operation name="test">
+			<input message="testMessage"/>
+		</operation>
+	</portType>
+	<binding name="testBinding" type="testPortType">
+		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+		<operation name="test">
+			<soap:operation soapAction="#test" style="rpc"/>
+			<input>
+				<soap:body use="encoded" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+			</input>
+		</operation>
+	</binding>
+	<service name="testService">
+		<port name="testPort" binding="tns:testBinding">
+			<soap:address location="test://"/>
+		</port>
+	</service>
+</definitions>
diff --git a/ext/soap/tests/bugs/bug41477.phpt b/ext/soap/tests/bugs/bug41477.phpt
index a103e69..850058e 100644
--- a/ext/soap/tests/bugs/bug41477.phpt
+++ b/ext/soap/tests/bugs/bug41477.phpt
@@ -1,7 +1,10 @@
 --TEST--
 Bug #41477 (no arginfo about SoapClient::__soapCall())
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+if (!extension_loaded("reflection")) die("skip");
+require_once('skipif.inc');
+?>
 --FILE--
 <?php
 $objRfClass = new ReflectionClass('SoapClient');
@@ -9,7 +12,7 @@ $objRfMethod = $objRfClass->getMethod('__soapCall');
 $arrParams = $objRfMethod->getParameters();
 foreach($arrParams as $objRfParam)
 {
-        var_dump($objRfParam->getName());
+	var_dump($objRfParam->getName());
 }
 ?>
 --EXPECT--
diff --git a/ext/soap/tests/interop/Round2/Base/r2_base_005p.phpt b/ext/soap/tests/interop/Round2/Base/r2_base_005p.phpt
index 0db9ece..b4f2720 100644
--- a/ext/soap/tests/interop/Round2/Base/r2_base_005p.phpt
+++ b/ext/soap/tests/interop/Round2/Base/r2_base_005p.phpt
@@ -2,6 +2,7 @@
 SOAP Interop Round2 base 005 (php/direct): echoString(utf-8)
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!function_exists('utf8_encode')) die('skip utf8_encode() not available'); ?>
 --FILE--
 <?php
 $client = new SoapClient(NULL,array("location"=>"test://","uri"=>"http://soapinterop.org/","trace"=>1,"exceptions"=>0));
diff --git a/ext/soap/tests/interop/Round2/Base/r2_base_005s.phpt b/ext/soap/tests/interop/Round2/Base/r2_base_005s.phpt
index 342e7f5..11dbbbd 100644
--- a/ext/soap/tests/interop/Round2/Base/r2_base_005s.phpt
+++ b/ext/soap/tests/interop/Round2/Base/r2_base_005s.phpt
@@ -2,6 +2,7 @@
 SOAP Interop Round2 base 005 (soap/direct): echoString(utf-8)
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!function_exists('utf8_encode')) die('skip utf8_encode() not available'); ?>
 --FILE--
 <?php
 $client = new SoapClient(NULL,array("location"=>"test://","uri"=>"http://soapinterop.org/","trace"=>1,"exceptions"=>0));
diff --git a/ext/soap/tests/interop/Round2/Base/r2_base_005w.phpt b/ext/soap/tests/interop/Round2/Base/r2_base_005w.phpt
index 5746503..0b169f7 100644
--- a/ext/soap/tests/interop/Round2/Base/r2_base_005w.phpt
+++ b/ext/soap/tests/interop/Round2/Base/r2_base_005w.phpt
@@ -2,6 +2,7 @@
 SOAP Interop Round2 base 005 (php/wsdl): echoString(utf-8)
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!function_exists('utf8_encode')) die('skip utf8_encode() not available'); ?>
 --INI--
 soap.wsdl_cache_enabled=0
 --FILE--
diff --git a/ext/soap/tests/schema/skipif.inc b/ext/soap/tests/schema/skipif.inc
index fa8574e..8780887 100644
--- a/ext/soap/tests/schema/skipif.inc
+++ b/ext/soap/tests/schema/skipif.inc
@@ -1,3 +1,5 @@
 <?php
   if (!extension_loaded('soap')) die('skip soap extension not available');
+  /* xml parser is required by test_schema.inc */
+  if (!extension_loaded('xml'))  die('skip xml extension not available');
 ?>
diff --git a/ext/soap/tests/typemap001.phpt b/ext/soap/tests/typemap001.phpt
index 9a75bef..b5ed31d 100755
--- a/ext/soap/tests/typemap001.phpt
+++ b/ext/soap/tests/typemap001.phpt
@@ -2,6 +2,7 @@
 SOAP typemap 1: SoapServer support for typemap's from_xml()
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!extension_loaded('simplexml')) die("skip simplexml extension not available"); ?>
 --INI--
 soap.wsdl_cache_enabled=0
 --FILE--
diff --git a/ext/soap/tests/typemap003.phpt b/ext/soap/tests/typemap003.phpt
index cfe1a6d..083b452 100755
--- a/ext/soap/tests/typemap003.phpt
+++ b/ext/soap/tests/typemap003.phpt
@@ -2,6 +2,7 @@
 SOAP Typemap 3: SoapClient support for typemap's from_xml()
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!extension_loaded('simplexml')) die("skip simplexml extension not available"); ?>
 --INI--
 soap.wsdl_cache_enabled=0
 --FILE--
diff --git a/ext/soap/tests/typemap005.phpt b/ext/soap/tests/typemap005.phpt
index 1a08d11..369d026 100755
--- a/ext/soap/tests/typemap005.phpt
+++ b/ext/soap/tests/typemap005.phpt
@@ -2,6 +2,7 @@
 SOAP typemap 5: SoapServer support for typemap's from_xml() (without WSDL)
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!extension_loaded('simplexml')) die("skip simplexml extension not available"); ?>
 --INI--
 soap.wsdl_cache_enabled=0
 --FILE--
diff --git a/ext/soap/tests/typemap007.phpt b/ext/soap/tests/typemap007.phpt
index e852328..4fee8fa 100755
--- a/ext/soap/tests/typemap007.phpt
+++ b/ext/soap/tests/typemap007.phpt
@@ -2,6 +2,7 @@
 SOAP Typemap 7: SoapClient support for typemap's from_xml() (without WSDL)
 --SKIPIF--
 <?php require_once('skipif.inc'); ?>
+<?php if (!extension_loaded('simplexml')) die("skip simplexml extension not available"); ?>
 --INI--
 soap.wsdl_cache_enabled=0
 --FILE--
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index ed68130..a0b7dbd 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sockets.c,v 1.171.2.9.2.22 2009/02/03 19:22:40 iliaa Exp $ */
+/* $Id: sockets.c,v 1.171.2.9.2.26 2009/06/04 18:17:28 andrei Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -229,7 +229,7 @@ static int php_open_listen_sock(php_socket **php_sock, int port, int backlog TSR
 	sock->type = PF_INET;
 
 	if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) < 0) {
-		PHP_SOCKET_ERROR(sock, "unable to bind to given adress", errno);
+		PHP_SOCKET_ERROR(sock, "unable to bind to given address", errno);
 		close(sock->bsd_socket);
 		efree(sock);
 		return 0;
@@ -484,6 +484,9 @@ PHP_MINIT_FUNCTION(sockets)
 	REGISTER_LONG_CONSTANT("SOCK_RDM",		SOCK_RDM,		CONST_CS | CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("MSG_OOB",		MSG_OOB,		CONST_CS | CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("MSG_WAITALL",	MSG_WAITALL,	CONST_CS | CONST_PERSISTENT);
+#ifdef MSG_DONTWAIT
+	REGISTER_LONG_CONSTANT("MSG_DONTWAIT",	MSG_DONTWAIT,	CONST_CS | CONST_PERSISTENT);
+#endif
 	REGISTER_LONG_CONSTANT("MSG_PEEK",		MSG_PEEK,		CONST_CS | CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("MSG_DONTROUTE", MSG_DONTROUTE,	CONST_CS | CONST_PERSISTENT);
 #ifdef MSG_EOR
@@ -1418,6 +1421,7 @@ PHP_FUNCTION(socket_recvfrom)
 			sin.sin_family = AF_INET;
 
 			if (arg6 == NULL) {
+				efree(recv_buf);
 				WRONG_PARAM_COUNT;
 			}
 
@@ -1446,6 +1450,7 @@ PHP_FUNCTION(socket_recvfrom)
 			sin6.sin6_family = AF_INET6;
 
 			if (arg6 == NULL) {
+				efree(recv_buf);
 				WRONG_PARAM_COUNT;
 			}
 
@@ -1461,10 +1466,11 @@ PHP_FUNCTION(socket_recvfrom)
 			zval_dtor(arg5);
 			zval_dtor(arg6);
 
+			memset(addr6, 0, INET6_ADDRSTRLEN);
 			inet_ntop(AF_INET6, &sin6.sin6_addr, addr6, INET6_ADDRSTRLEN);
 
 			ZVAL_STRINGL(arg2, recv_buf, retval, 0);
-			ZVAL_STRING(arg5, addr6 ? addr6 : "::", 1);
+			ZVAL_STRING(arg5, addr6[0] ? addr6 : "::", 1);
 			ZVAL_LONG(arg6, ntohs(sin6.sin6_port));
 			break;
 #endif
diff --git a/ext/sockets/tests/ipv6_skipif.inc b/ext/sockets/tests/ipv6_skipif.inc
new file mode 100644
index 0000000..ad8cf77
--- /dev/null
+++ b/ext/sockets/tests/ipv6_skipif.inc
@@ -0,0 +1,8 @@
+<?php
+if (!defined("AF_INET6")) {
+	die('skip no IPv6 support');
+}
+/* If IPv6 is supported on the platform this will error out with code 111 - Connection refused.
+   If IPv6 is NOT supported, $errno will be set to something else (indicating parse/getaddrinfo error) */
+ at stream_socket_client('tcp://[::1]:0', $errno);
+if ($errno != 111) die('skip no IPv6 support');
diff --git a/ext/sockets/tests/ipv6loop.phpt b/ext/sockets/tests/ipv6loop.phpt
index 6fb5840..6967605 100644
--- a/ext/sockets/tests/ipv6loop.phpt
+++ b/ext/sockets/tests/ipv6loop.phpt
@@ -5,9 +5,7 @@ IPv6 Loopback test
 	if (!extension_loaded('sockets')) {
 		die('skip sockets extension not available.');
 	}
-	if (!defined("AF_INET6")) {
-		die('skip no IPv6 support');
-	}
+	require 'ipv6_skipif.inc';
 ?>
 --FILE--
 <?php
diff --git a/ext/sockets/tests/socket_accept-wrongparams.phpt b/ext/sockets/tests/socket_accept-wrongparams.phpt
new file mode 100644
index 0000000..6bce05a
--- /dev/null
+++ b/ext/sockets/tests/socket_accept-wrongparams.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Test parameter handling in socket_accept()
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+var_dump(socket_accept(null));
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009 
+--EXPECTF--
+Warning: socket_accept() expects parameter 1 to be resource, null given in %s on line %d
+NULL
diff --git a/ext/sockets/tests/socket_create_listen-nobind.phpt b/ext/sockets/tests/socket_create_listen-nobind.phpt
new file mode 100644
index 0000000..90ae26e
--- /dev/null
+++ b/ext/sockets/tests/socket_create_listen-nobind.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test if socket_create_listen() returns false, when it cannot bind to the port.
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+$filename = dirname(__FILE__) . '/006_root_check.tmp';
+$fp = fopen($filename, 'w');
+fclose($fp);
+if (fileowner($filename) == 0) {
+    unlink ($filename);
+    die('SKIP Test cannot be run as root.');
+}
+--FILE--
+<?php
+$sock = socket_create_listen(80);
+--EXPECTF--
+Warning: socket_create_listen(): unable to bind to given address [13]: Permission denied in %s on line %d
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/006_root_check.tmp');
+--CREDITS--
+Till Klampaeckel, till at php.net
+PHP Testfest Berlin 2009-05-09
\ No newline at end of file
diff --git a/ext/sockets/tests/socket_create_listen-wrongparams.phpt b/ext/sockets/tests/socket_create_listen-wrongparams.phpt
new file mode 100644
index 0000000..ecc5172
--- /dev/null
+++ b/ext/sockets/tests/socket_create_listen-wrongparams.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test if socket_create_listen throws E_WARNING with wrong parameters.
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sock1 = socket_create_listen(array());
+$sock2 = socket_create_listen(31337, array());
+--EXPECTF--
+Warning: socket_create_listen() expects parameter 1 to be long, array given in %s on line %d
+
+Warning: socket_create_listen() expects parameter 2 to be long, array given in %s on line %d
+--CREDITS--
+Till Klampaeckel, till at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_create_listen.phpt b/ext/sockets/tests/socket_create_listen.phpt
new file mode 100644
index 0000000..6d607ca
--- /dev/null
+++ b/ext/sockets/tests/socket_create_listen.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test if socket binds on 31337
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sock = socket_create_listen(31337);
+socket_getsockname($sock, $addr, $port); 
+var_dump($addr, $port);
+--EXPECT--
+string(7) "0.0.0.0"
+int(31337)
+--CREDITS--
+Till Klampaeckel, till at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_create_pair-wrongparams.phpt b/ext/sockets/tests/socket_create_pair-wrongparams.phpt
new file mode 100644
index 0000000..64c5048
--- /dev/null
+++ b/ext/sockets/tests/socket_create_pair-wrongparams.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test parameter handling in socket_create_pair()
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+var_dump(socket_create_pair(AF_INET, null, null));
+
+$domain = 'unknown';
+var_dump(socket_create_pair($domain, SOCK_STREAM, 0, $sockets));
+
+var_dump(socket_create_pair(AF_INET, null, null, $sockets));
+
+var_dump(socket_create_pair(31337, null, null, $sockets));
+
+var_dump(socket_create_pair(AF_INET, 31337, 0, $sockets));
+--EXPECTF--
+Warning: socket_create_pair() expects exactly 4 parameters, 3 given in %s on line %d
+NULL
+
+Warning: socket_create_pair() expects parameter 1 to be long, %unicode_string_optional% given in %s on line %d
+NULL
+
+Warning: socket_create_pair(): unable to create socket pair [94]: Socket type not supported in %s on line %d
+bool(false)
+
+Warning: socket_create_pair(): invalid socket domain [31337] specified for argument 1, assuming AF_INET in %s on line %d
+
+Warning: socket_create_pair(): unable to create socket pair [94]: Socket type not supported in %s on line %d
+bool(false)
+
+Warning: socket_create_pair(): invalid socket type [31337] specified for argument 2, assuming SOCK_STREAM in %s on line %d
+
+Warning: socket_create_pair(): unable to create socket pair [95]: Operation not supported in %s on line %d
+bool(false)
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_create_pair.phpt b/ext/sockets/tests/socket_create_pair.phpt
new file mode 100644
index 0000000..6af6e42
--- /dev/null
+++ b/ext/sockets/tests/socket_create_pair.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test for socket_create_pair()
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sockets = array();
+if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+    $domain = AF_INET;
+} else {
+    $domain = AF_UNIX;
+}
+socket_create_pair($domain, SOCK_STREAM, 0, $sockets);
+var_dump($sockets);
+--EXPECT--
+array(2) {
+  [0]=>
+  resource(4) of type (Socket)
+  [1]=>
+  resource(5) of type (Socket)
+}
diff --git a/ext/sockets/tests/socket_listen-wrongparams.phpt b/ext/sockets/tests/socket_listen-wrongparams.phpt
new file mode 100644
index 0000000..7dd0d15
--- /dev/null
+++ b/ext/sockets/tests/socket_listen-wrongparams.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test parameter handling in socket_listen().
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+var_dump(socket_listen(null));
+$socket = socket_create(AF_UNIX, SOCK_STREAM, 0); 
+var_dump(socket_listen($socket));
+--EXPECTF--
+Warning: socket_listen() expects parameter 1 to be resource, null given in %s on line %d
+NULL
+
+Warning: socket_listen(): unable to listen on socket [%d]: Invalid argument in %s on line %d
+bool(false)
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_select-wrongparams-1.phpt b/ext/sockets/tests/socket_select-wrongparams-1.phpt
new file mode 100644
index 0000000..e786bc2
--- /dev/null
+++ b/ext/sockets/tests/socket_select-wrongparams-1.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test parameter handling in socket_select().
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sockets = array();
+if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+    $domain = AF_INET;
+} else {
+    $domain = AF_UNIX;
+}
+socket_create_pair($domain, SOCK_STREAM, 0, $sockets);
+
+$write  = null;
+$except = null;
+$time   = -1;
+var_dump(socket_select($sockets, $write, $except, $time));
+--EXPECTF--
+Warning: socket_select(): unable to select [%d]: Invalid argument in %s on line %d
+bool(false)
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_select-wrongparams-2.phpt b/ext/sockets/tests/socket_select-wrongparams-2.phpt
new file mode 100644
index 0000000..c149973
--- /dev/null
+++ b/ext/sockets/tests/socket_select-wrongparams-2.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test parameter handling in socket_select().
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sockets = null;
+$write   = null;
+$except  = null;
+$time    = 0;
+var_dump(socket_select($sockets, $write, $except, $time));
+socket_select($sockets, $write, $except);
+--EXPECTF--
+Warning: socket_select(): no resource arrays were passed to select in %s on line %d
+bool(false)
+
+Warning: socket_select() expects at least 4 parameters, 3 given in %s on line %d
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_select-wrongparams-3.phpt b/ext/sockets/tests/socket_select-wrongparams-3.phpt
new file mode 100644
index 0000000..51686f9
--- /dev/null
+++ b/ext/sockets/tests/socket_select-wrongparams-3.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test parameter handling in socket_select().
+--DESCRIPTION--
+Time must be long, otherwise it's casted.
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sockets = array();
+if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+    $domain = AF_INET;
+} else {
+    $domain = AF_UNIX;
+}
+socket_create_pair($domain, SOCK_STREAM, 0, $sockets);
+
+$write  = null;
+$except = null;
+$time   = array();
+var_dump(socket_select($sockets, $write, $except, $time));
+--EXPECT--
+int(0)
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_select-wrongparams-4.phpt b/ext/sockets/tests/socket_select-wrongparams-4.phpt
new file mode 100644
index 0000000..7a107b4
--- /dev/null
+++ b/ext/sockets/tests/socket_select-wrongparams-4.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test parameter handling in socket_select().
+--DESCRIPTION--
+usec > 999999
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sockets = array();
+if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+    $domain = AF_INET;
+} else {
+    $domain = AF_UNIX;
+}
+socket_create_pair($domain, SOCK_STREAM, 0, $sockets);
+
+$write  = null;
+$except = null;
+$time   = 0;
+$usec   = 2000000;
+var_dump(socket_select($sockets, $write, $except, $time, $usec));
+--EXPECT--
+int(0)
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_select.phpt b/ext/sockets/tests/socket_select.phpt
new file mode 100644
index 0000000..3896a09
--- /dev/null
+++ b/ext/sockets/tests/socket_select.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test parameter handling in socket_select().
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$sockets = array();
+if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+    $domain = AF_INET;
+} else {
+    $domain = AF_UNIX;
+}
+socket_create_pair($domain, SOCK_STREAM, 0, $sockets);
+
+$write  = null;
+$except = null;
+var_dump(socket_select($sockets, $write, $except, 0));
+--EXPECT--
+int(0)
+--CREDITS--
+Till Klampaeckel, till at php.net
+Berlin TestFest 2009
diff --git a/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt b/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt
new file mode 100644
index 0000000..64b657a
--- /dev/null
+++ b/ext/sockets/tests/socket_sentto_recvfrom_ipv4_udp.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test if socket_recvfrom() receives data sent by socket_sendto() via IPv4 UDP
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
+    if (!$socket) {
+        die('Unable to create AF_INET socket');
+    }
+    if (!socket_set_nonblock($socket)) {
+        die('Unable to set nonblocking mode for socket');
+    }
+    socket_recvfrom($socket, $buf, 12, 0, $from, $port); // cause warning
+    $address = '127.0.0.1';
+    socket_sendto($socket, '', 1, 0, $address); // cause warning
+    if (!socket_bind($socket, $address, 1223)) {
+        die("Unable to bind to $address:1223");
+    }
+
+    $msg = "Ping!";
+    $len = strlen($msg);
+    $bytes_sent = socket_sendto($socket, $msg, $len, 0, $address, 1223);
+    if ($bytes_sent == -1) {
+        die('An error occured while sending to the socket');
+    } else if ($bytes_sent != $len) {
+        die($bytes_sent . ' bytes have been sent instead of the ' . $len . ' bytes expected');
+    }
+
+    $from = "";
+    $port = 0;
+    socket_recvfrom($socket, $buf, 12, 0); // cause warning
+    socket_recvfrom($socket, $buf, 12, 0, $from); // cause warning
+    $bytes_received = socket_recvfrom($socket, $buf, 12, 0, $from, $port);
+    if ($bytes_received == -1) {
+        die('An error occured while receiving from the socket');
+    } else if ($bytes_received != $len) {
+        die($bytes_received . ' bytes have been received instead of the ' . $len . ' bytes expected');
+    }
+    echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
+
+    socket_close($socket);
+--EXPECTF--
+Warning: socket_recvfrom(): unable to recvfrom [11]: Resource temporarily unavailable in %s on line %d
+
+Warning: Wrong parameter count for socket_sendto() in %s on line %d
+
+Warning: socket_recvfrom() expects at least 5 parameters, 4 given in %s on line %d
+
+Warning: Wrong parameter count for socket_recvfrom() in %s on line %d
+Received Ping! from remote address 127.0.0.1 and remote port 1223
+--CREDITS--
+Falko Menge <mail at falko-menge dot de>
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_sentto_recvfrom_ipv6_udp.phpt b/ext/sockets/tests/socket_sentto_recvfrom_ipv6_udp.phpt
new file mode 100644
index 0000000..1fa42fd
--- /dev/null
+++ b/ext/sockets/tests/socket_sentto_recvfrom_ipv6_udp.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test if socket_recvfrom() receives data sent by socket_sendto() via IPv6 UDP
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+require 'ipv6_skipif.inc';
+--FILE--
+<?php
+    $socket = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP);
+    if (!$socket) {
+        die('Unable to create AF_INET6 socket');
+    }
+    if (!socket_set_nonblock($socket)) {
+        die('Unable to set nonblocking mode for socket');
+    }
+    socket_recvfrom($socket, $buf, 12, 0, $from, $port); // cause warning
+    $address = '::1';
+    socket_sendto($socket, '', 1, 0, $address); // cause warning
+    if (!socket_bind($socket, $address, 1223)) {
+        die("Unable to bind to $address:1223");
+    }
+
+    $msg = "Ping!";
+    $len = strlen($msg);
+    $bytes_sent = socket_sendto($socket, $msg, $len, 0, $address, 1223);
+    if ($bytes_sent == -1) {
+        die('An error occured while sending to the socket');
+    } else if ($bytes_sent != $len) {
+        die($bytes_sent . ' bytes have been sent instead of the ' . $len . ' bytes expected');
+    }
+
+    $from = "";
+    $port = 0;
+    socket_recvfrom($socket, $buf, 12, 0); // cause warning
+    socket_recvfrom($socket, $buf, 12, 0, $from); // cause warning
+    $bytes_received = socket_recvfrom($socket, $buf, 12, 0, $from, $port);
+    if ($bytes_received == -1) {
+        die('An error occured while receiving from the socket');
+    } else if ($bytes_received != $len) {
+        die($bytes_received . ' bytes have been received instead of the ' . $len . ' bytes expected');
+    }
+    echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
+
+    socket_close($socket);
+--EXPECTF--
+Warning: socket_recvfrom(): unable to recvfrom [11]: Resource temporarily unavailable in %s on line %d
+
+Warning: Wrong parameter count for socket_sendto() in %s on line %d
+
+Warning: socket_recvfrom() expects at least 5 parameters, 4 given in %s on line %d
+
+Warning: Wrong parameter count for socket_recvfrom() in %s on line %d
+Received Ping! from remote address ::1 and remote port 1223
+--CREDITS--
+Falko Menge <mail at falko-menge dot de>
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt b/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt
new file mode 100644
index 0000000..94eac3b
--- /dev/null
+++ b/ext/sockets/tests/socket_sentto_recvfrom_unix.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test if socket_recvfrom() receives data sent by socket_sendto() through a Unix domain socket
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+    $socket = socket_create(AF_UNIX, SOCK_DGRAM, SOL_UDP); // cause warning
+    $socket = socket_create(AF_UNIX, SOCK_DGRAM, 0);
+    if (!$socket) {
+        die('Unable to create AF_UNIX socket');
+    }
+    if (!socket_set_nonblock($socket)) {
+        die('Unable to set nonblocking mode for socket');
+    }
+    socket_recvfrom($socket, $buf, 12, 0, $from, $port); // cause warning
+    $address = sprintf("/tmp/%s.sock", uniqid());
+    if (!socket_bind($socket, $address)) {
+        die("Unable to bind to $address");
+    }
+
+    $msg = "Ping!";
+    $len = strlen($msg);
+    $bytes_sent = socket_sendto($socket, $msg, $len, 0); // cause warning
+    $bytes_sent = socket_sendto($socket, $msg, $len, 0, $address);
+    if ($bytes_sent == -1) {
+        die('An error occured while sending to the socket');
+    } else if ($bytes_sent != $len) {
+        die($bytes_sent . ' bytes have been sent instead of the ' . $len . ' bytes expected');
+    }
+
+    $from = "";
+    var_dump(socket_recvfrom($socket, $buf, 0, 0, $from)); // expect false
+    $bytes_received = socket_recvfrom($socket, $buf, 12, 0, $from);
+    if ($bytes_received == -1) {
+        die('An error occured while receiving from the socket');
+    } else if ($bytes_received != $len) {
+        die($bytes_received . ' bytes have been received instead of the ' . $len . ' bytes expected');
+    }
+    echo "Received $buf";
+
+    socket_close($socket);
+--EXPECTF--
+Warning: socket_create(): Unable to create socket [93]: Protocol not supported in %s on line %d
+
+Warning: socket_recvfrom(): unable to recvfrom [11]: Resource temporarily unavailable in %s on line %d
+
+Warning: socket_sendto() expects at least 5 parameters, 4 given in %s on line %d
+bool(false)
+Received Ping!
+--CREDITS--
+Falko Menge <mail at falko-menge dot de>
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_set_block-retval.phpt b/ext/sockets/tests/socket_set_block-retval.phpt
new file mode 100644
index 0000000..fe09d5a
--- /dev/null
+++ b/ext/sockets/tests/socket_set_block-retval.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test socket_set_block return values
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+?>
+--FILE--
+<?php
+
+$socket = socket_create_listen(31337);
+var_dump(socket_set_block($socket));
+socket_close($socket);
+
+$socket2 = socket_create_listen(31338);
+socket_close($socket2);
+var_dump(socket_set_block($socket2));
+
+?>
+--EXPECTF--
+bool(true)
+
+Warning: socket_set_block(): %d is not a valid Socket resource in %s on line %d
+bool(false)
+--CREDITS--
+Robin Mehner, robin at coding-robin.de
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_set_block-wrongparams.phpt b/ext/sockets/tests/socket_set_block-wrongparams.phpt
new file mode 100644
index 0000000..7c80695
--- /dev/null
+++ b/ext/sockets/tests/socket_set_block-wrongparams.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test if socket_set_block throws E_WARNING with wrong parameters.
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+?>
+--FILE--
+<?php
+socket_set_block(array());
+?>
+--EXPECTF--
+Warning: socket_set_block() expects parameter 1 to be resource, array given in %s on line %d
+--CREDITS--
+Robin Mehner, robin at coding-robin.de
+PHP Testfest Berlin 2009-05-09
+
diff --git a/ext/sockets/tests/socket_set_nonblock-retval.phpt b/ext/sockets/tests/socket_set_nonblock-retval.phpt
new file mode 100644
index 0000000..3c4b515
--- /dev/null
+++ b/ext/sockets/tests/socket_set_nonblock-retval.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test socket_set_nonblock return values
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+?>
+--FILE--
+<?php
+
+$socket = socket_create_listen(31337);
+var_dump(socket_set_nonblock($socket));
+socket_close($socket);
+
+$socket2 = socket_create_listen(31338);
+socket_close($socket2);
+var_dump(socket_set_nonblock($socket2));
+
+?>
+--EXPECTF--
+bool(true)
+
+Warning: socket_set_nonblock(): %d is not a valid Socket resource in %s on line %d
+bool(false)
+--CREDITS--
+Robin Mehner, robin at coding-robin.de
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/sockets/tests/socket_set_nonblock-wrongparams.phpt b/ext/sockets/tests/socket_set_nonblock-wrongparams.phpt
new file mode 100644
index 0000000..4b7e5be
--- /dev/null
+++ b/ext/sockets/tests/socket_set_nonblock-wrongparams.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Test if socket_set_nonblock throws E_WARNING with wrong parameters.
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+    die('SKIP The sockets extension is not loaded.');
+}
+--FILE--
+<?php
+$socket = socket_set_nonblock(array());
+?>
+--EXPECTF--
+Warning: socket_set_nonblock() expects parameter 1 to be resource, array given in %s on line %d
diff --git a/ext/sockets/tests/socket_set_option_error_socket_option.phpt b/ext/sockets/tests/socket_set_option_error_socket_option.phpt
new file mode 100644
index 0000000..eaa0e64
--- /dev/null
+++ b/ext/sockets/tests/socket_set_option_error_socket_option.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test if socket_set_option() returns 'unable to set socket option' failure for invalid options
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+        die('SKIP sockets extension not available.');
+}
+$filename = dirname(__FILE__) . '/006_root_check.tmp';
+$fp = fopen($filename, 'w');
+fclose($fp);
+if (fileowner($filename) == 0) {
+    unlink ($filename);
+    die('SKIP Test cannot be run as root.');
+}
+?>
+--FILE--
+<?php
+$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+if (!$socket) {
+        die('Unable to create AF_INET socket [socket]');
+}
+
+socket_set_option( $socket, SOL_SOCKET, 1, 1);
+socket_close($socket);
+?>
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/006_root_check.tmp');
+--EXPECTF--
+Warning: socket_set_option(): unable to set socket option [%d]: Permission denied in %s on line %d
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
diff --git a/ext/sockets/tests/socket_set_option_rcvtimeo.phpt b/ext/sockets/tests/socket_set_option_rcvtimeo.phpt
new file mode 100644
index 0000000..84c533f
--- /dev/null
+++ b/ext/sockets/tests/socket_set_option_rcvtimeo.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test if socket_set_option() works, option:SO_RCVTIMEO
+--DESCRIPTION---
+-wrong params 
+-set/get params comparison 
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+        die('SKIP sockets extension not available.');
+}
+?>
+--FILE--
+<?php
+$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+if (!$socket) {
+        die('Unable to create AF_INET socket [socket]');
+}
+socket_set_block($socket);
+
+//wrong params
+$retval_1 = socket_set_option( $socket, SOL_SOCKET, SO_RCVTIMEO, array());
+
+//set/get comparison
+$options = array("sec" => 1, "usec" => 0);
+$retval_2 = socket_set_option( $socket, SOL_SOCKET, SO_RCVTIMEO, $options);
+$retval_3 = socket_get_option( $socket, SOL_SOCKET, SO_RCVTIMEO);
+
+var_dump($retval_2);
+var_dump($retval_3 === $options);
+socket_close($socket);
+?>
+
+--EXPECTF--
+Warning: socket_set_option(): no key "sec" passed in optval in %s on line %d
+bool(true)
+bool(true)
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
diff --git a/ext/sockets/tests/socket_set_option_seolinger.phpt b/ext/sockets/tests/socket_set_option_seolinger.phpt
new file mode 100644
index 0000000..05bc213
--- /dev/null
+++ b/ext/sockets/tests/socket_set_option_seolinger.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test if socket_set_option() works, option:SO_SEOLINGER
+--DESCRIPTION---
+-wrong params 
+-set/get params comparison 
+-l_linger not given
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+        die('SKIP sockets extension not available.');
+}
+?>
+--FILE--
+<?php
+$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+
+if (!$socket) {
+        die('Unable to create AF_INET socket [socket]');
+}
+// wrong params
+$retval_1 = socket_set_option( $socket, SOL_SOCKET, SO_LINGER, array());
+
+// set/get comparison
+$options = array("l_onoff" => 1, "l_linger" => 1);
+$retval_2 = socket_set_option( $socket, SOL_SOCKET, SO_LINGER, $options);
+$retval_3 = socket_get_option( $socket, SOL_SOCKET, SO_LINGER);
+
+//l_linger not given
+$options_2 = array("l_onoff" => 1);
+var_dump(socket_set_option( $socket, SOL_SOCKET, SO_LINGER, $options_2));
+
+var_dump($retval_2);
+var_dump($retval_3 === $options);
+
+socket_close($socket);
+?>
+
+--EXPECTF--
+Warning: socket_set_option(): no key "l_onoff" passed in optval in %s on line %d
+
+Warning: socket_set_option(): no key "l_linger" passed in optval in %s on line %d
+bool(false)
+bool(true)
+bool(true)
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
diff --git a/ext/sockets/tests/socket_set_option_sndtimeo.phpt b/ext/sockets/tests/socket_set_option_sndtimeo.phpt
new file mode 100644
index 0000000..c4e4851
--- /dev/null
+++ b/ext/sockets/tests/socket_set_option_sndtimeo.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test if socket_set_option() works, option:SO_SNDTIMEO
+--DESCRIPTION---
+-wrong params 
+-set/get params comparison 
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+        die('SKIP sockets extension not available.');
+}
+?>
+--FILE--
+<?php
+$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+if (!$socket) {
+        die('Unable to create AF_INET socket [socket]');
+}
+socket_set_block($socket);
+
+//wrong params
+$retval_1 = socket_set_option( $socket, SOL_SOCKET, SO_SNDTIMEO, array());
+
+//set/get comparison
+$options = array("sec" => 1, "usec" => 0);
+$retval_2 = socket_set_option( $socket, SOL_SOCKET, SO_SNDTIMEO, $options);
+$retval_3 = socket_get_option( $socket, SOL_SOCKET, SO_SNDTIMEO);
+
+var_dump($retval_2);
+var_dump($retval_3 === $options);
+socket_close($socket);
+?>
+
+--EXPECTF--
+Warning: socket_set_option(): no key "sec" passed in optval in %s on line %d
+bool(true)
+bool(true)
+--CREDITS--
+Moritz Neuhaeuser, info at xcompile.net
+PHP Testfest Berlin 2009-05-10
diff --git a/ext/spl/internal/appenditerator.inc b/ext/spl/internal/appenditerator.inc
index 74f254d..5db0804 100755
--- a/ext/spl/internal/appenditerator.inc
+++ b/ext/spl/internal/appenditerator.inc
@@ -4,7 +4,7 @@
  * @ingroup SPL
  * @brief class AppendIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
diff --git a/ext/spl/internal/cachingiterator.inc b/ext/spl/internal/cachingiterator.inc
index 6714821..7262564 100755
--- a/ext/spl/internal/cachingiterator.inc
+++ b/ext/spl/internal/cachingiterator.inc
@@ -1,157 +1,157 @@
-<?php
-
-/** @file cachingiterator.inc
- * @ingroup SPL
- * @brief class CachingIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/**
- * @brief   Cached iteration over another Iterator
- * @author  Marcus Boerger
- * @version 1.2
- * @since PHP 5.0
- *
- * This iterator wrapper does a one ahead iteration. This way it knows whether
- * the inner iterator has one more element.
- *
- * @note If you want to convert the elements into strings and the inner 
- *       Iterator is an internal Iterator then you need to provide the 
- *       flag CALL_TOSTRING to do the conversion when the actual element
- *       is being fetched. Otherwise the conversion would happen with the
- *       already changed iterator. If you do not need this then it you should
- *       omit this flag because it costs unneccessary work and time.
- */
-class CachingIterator implements OuterIterator
-{
-	const CALL_TOSTRING        = 0x00000001;
-	const CATCH_GET_CHILD      = 0x00000002;
-	const TOSTRING_USE_KEY     = 0x00000010;
-	const TOSTRING_USE_CURRENT = 0x00000020;
-
-	private $it;
-	private $current;
-	private $key;
-	private $valid;
-	private $strValue;
-
-	/** Construct from another iterator
-	 *
-	 * @param it    Iterator to cache
-	 * @param flags Bitmask: 
-	 *              - CALL_TOSTRING  (whether to call __toString() for every element)
-	 */
-	function __construct(Iterator $it, $flags = self::CALL_TOSTRING)
-	{
-		if ((($flags & self::CALL_TOSTRING) && ($flags & (self::TOSTRING_USE_KEY|self::TOSTRING_USE_CURRENT)))
-		|| ((flags & (self::CIT_TOSTRING_USE_KEY|self::CIT_TOSTRING_USE_CURRENT)) == (self::CIT_TOSTRING_USE_KEY|self::CIT_TOSTRING_USE_CURRENT)))
-		{
-			throw new InvalidArgumentException('Flags must contain only one of CIT_CALL_TOSTRING, CIT_TOSTRING_USE_KEY, CIT_TOSTRING_USE_CURRENT');
-		}
-		$this->it = $it;
-		$this->flags = $flags & (0x0000FFFF);
-		$this->next();
-	}
-
-	/** Rewind the Iterator
-	 */
-	function rewind()
-	{
-		$this->it->rewind();
-		$this->next();
-	}
-	
-	/** Forward to the next element
-	 */
-	function next()
-	{
-		if ($this->valid = $this->it->valid()) {
-			$this->current = $this->it->current();
-			$this->key = $this->it->key();
-			if ($this->flags & self::CALL_TOSTRING) {
-				if (is_object($this->current)) {
-					$this->strValue = $this->current->__toString();
-				} else {
-					$this->strValue = (string)$this->current;
-				}
-			}
-		} else {
-			$this->current = NULL;
-			$this->key = NULL;
-			$this->strValue = NULL;
-		}
-		$this->it->next();
-	}
-	
-	/** @return whether teh iterator is valid
-	 */
-	function valid()
-	{
-		return $this->valid;
-	}
-
-	/** @return whether there is one more element
-	 */
-	function hasNext()
-	{
-		return $this->it->valid();
-	}
-	
-	/** @return the current element
-	 */
-	function current()
-	{
-		return $this->current;
-	}
-
-	/** @return the current key
-	 */
-	function key()
-	{
-		return $this->key;
-	}
-
-	/** Aggregate the inner iterator
-	 *
-	 * @param func    Name of method to invoke
-	 * @param params  Array of parameters to pass to method
-	 */
-	function __call($func, $params)
-	{
-		return call_user_func_array(array($this->it, $func), $params);
-	}
-	
-	/** @return the string represenatation that was generated for the current 
-	 *          element
-	 * @throw exception when CALL_TOSTRING was not specified in constructor
-	 */
-	function __toString()
-	{
-		if ($this->flags & self::TOSTRING_USE_KEY)
-		{
-			return $this->key;
-		}
-		else if ($this->flags & self::TOSTRING_USE_CURRENT)
-		{
-			return $this->current;
-		}
-		if (!$this->flags & self::CALL_TOSTRING)
-		{
-			throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)');
-		}
-		return $this->strValue;
-	}
-	
-	/**
-	 * @return The inner iterator
-	 */	
-	function getInnerIterator()
-	{
-		return $this->it;
-	}
-}
-
+<?php
+
+/** @file cachingiterator.inc
+ * @ingroup SPL
+ * @brief class CachingIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/**
+ * @brief   Cached iteration over another Iterator
+ * @author  Marcus Boerger
+ * @version 1.2
+ * @since PHP 5.0
+ *
+ * This iterator wrapper does a one ahead iteration. This way it knows whether
+ * the inner iterator has one more element.
+ *
+ * @note If you want to convert the elements into strings and the inner 
+ *       Iterator is an internal Iterator then you need to provide the 
+ *       flag CALL_TOSTRING to do the conversion when the actual element
+ *       is being fetched. Otherwise the conversion would happen with the
+ *       already changed iterator. If you do not need this then it you should
+ *       omit this flag because it costs unneccessary work and time.
+ */
+class CachingIterator implements OuterIterator
+{
+	const CALL_TOSTRING        = 0x00000001;
+	const CATCH_GET_CHILD      = 0x00000002;
+	const TOSTRING_USE_KEY     = 0x00000010;
+	const TOSTRING_USE_CURRENT = 0x00000020;
+
+	private $it;
+	private $current;
+	private $key;
+	private $valid;
+	private $strValue;
+
+	/** Construct from another iterator
+	 *
+	 * @param it    Iterator to cache
+	 * @param flags Bitmask: 
+	 *              - CALL_TOSTRING  (whether to call __toString() for every element)
+	 */
+	function __construct(Iterator $it, $flags = self::CALL_TOSTRING)
+	{
+		if ((($flags & self::CALL_TOSTRING) && ($flags & (self::TOSTRING_USE_KEY|self::TOSTRING_USE_CURRENT)))
+		|| ((flags & (self::CIT_TOSTRING_USE_KEY|self::CIT_TOSTRING_USE_CURRENT)) == (self::CIT_TOSTRING_USE_KEY|self::CIT_TOSTRING_USE_CURRENT)))
+		{
+			throw new InvalidArgumentException('Flags must contain only one of CIT_CALL_TOSTRING, CIT_TOSTRING_USE_KEY, CIT_TOSTRING_USE_CURRENT');
+		}
+		$this->it = $it;
+		$this->flags = $flags & (0x0000FFFF);
+		$this->next();
+	}
+
+	/** Rewind the Iterator
+	 */
+	function rewind()
+	{
+		$this->it->rewind();
+		$this->next();
+	}
+	
+	/** Forward to the next element
+	 */
+	function next()
+	{
+		if ($this->valid = $this->it->valid()) {
+			$this->current = $this->it->current();
+			$this->key = $this->it->key();
+			if ($this->flags & self::CALL_TOSTRING) {
+				if (is_object($this->current)) {
+					$this->strValue = $this->current->__toString();
+				} else {
+					$this->strValue = (string)$this->current;
+				}
+			}
+		} else {
+			$this->current = NULL;
+			$this->key = NULL;
+			$this->strValue = NULL;
+		}
+		$this->it->next();
+	}
+	
+	/** @return whether teh iterator is valid
+	 */
+	function valid()
+	{
+		return $this->valid;
+	}
+
+	/** @return whether there is one more element
+	 */
+	function hasNext()
+	{
+		return $this->it->valid();
+	}
+	
+	/** @return the current element
+	 */
+	function current()
+	{
+		return $this->current;
+	}
+
+	/** @return the current key
+	 */
+	function key()
+	{
+		return $this->key;
+	}
+
+	/** Aggregate the inner iterator
+	 *
+	 * @param func    Name of method to invoke
+	 * @param params  Array of parameters to pass to method
+	 */
+	function __call($func, $params)
+	{
+		return call_user_func_array(array($this->it, $func), $params);
+	}
+	
+	/** @return the string represenatation that was generated for the current 
+	 *          element
+	 * @throw exception when CALL_TOSTRING was not specified in constructor
+	 */
+	function __toString()
+	{
+		if ($this->flags & self::TOSTRING_USE_KEY)
+		{
+			return $this->key;
+		}
+		else if ($this->flags & self::TOSTRING_USE_CURRENT)
+		{
+			return $this->current;
+		}
+		if (!$this->flags & self::CALL_TOSTRING)
+		{
+			throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)');
+		}
+		return $this->strValue;
+	}
+	
+	/**
+	 * @return The inner iterator
+	 */	
+	function getInnerIterator()
+	{
+		return $this->it;
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/emptyiterator.inc b/ext/spl/internal/emptyiterator.inc
index a72a8b1..ac80e79 100755
--- a/ext/spl/internal/emptyiterator.inc
+++ b/ext/spl/internal/emptyiterator.inc
@@ -1,62 +1,62 @@
-<?php
-
-/** @file emptyiterator.inc
- * @ingroup SPL
- * @brief class EmptyIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief   An empty Iterator
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1
- */
-class EmptyIterator implements Iterator
-{
-	/** No operation.
-	 * @return void
-	 */
-	function rewind()
-	{
-		// nothing to do
-	}
-
-	/** @return \c false
-	 */
-	function valid()
-	{
-		return false;
-	}
-
-	/** This function must not be called. It throws an exception upon access.
-	 * @throw Exception
-	 * @return void
-	 */
-	function current()
-	{
-		throw new Exception('Accessing the value of an EmptyIterator');
-	}
-
-	/** This function must not be called. It throws an exception upon access.
-	 * @throw Exception
-	 * @return void
-	 */
-	function key()
-	{
-		throw new Exception('Accessing the key of an EmptyIterator');
-	}
-
-	/** No operation.
-	 * @return void
-	 */
-	function next()
-	{
-		// nothing to do
-	}
-}
-
+<?php
+
+/** @file emptyiterator.inc
+ * @ingroup SPL
+ * @brief class EmptyIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief   An empty Iterator
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1
+ */
+class EmptyIterator implements Iterator
+{
+	/** No operation.
+	 * @return void
+	 */
+	function rewind()
+	{
+		// nothing to do
+	}
+
+	/** @return \c false
+	 */
+	function valid()
+	{
+		return false;
+	}
+
+	/** This function must not be called. It throws an exception upon access.
+	 * @throw Exception
+	 * @return void
+	 */
+	function current()
+	{
+		throw new Exception('Accessing the value of an EmptyIterator');
+	}
+
+	/** This function must not be called. It throws an exception upon access.
+	 * @throw Exception
+	 * @return void
+	 */
+	function key()
+	{
+		throw new Exception('Accessing the key of an EmptyIterator');
+	}
+
+	/** No operation.
+	 * @return void
+	 */
+	function next()
+	{
+		// nothing to do
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/filteriterator.inc b/ext/spl/internal/filteriterator.inc
index c0b5681..3330cc9 100755
--- a/ext/spl/internal/filteriterator.inc
+++ b/ext/spl/internal/filteriterator.inc
@@ -1,127 +1,127 @@
-<?php
-
+<?php
+
 /** @file filteriterator.inc
  * @ingroup SPL
  * @brief class FilterIterator
  * @author  Marcus Boerger
- * @date    2003 - 2006
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Abstract filter for iterators
- * @author  Marcus Boerger
- * @version 1.1
- * @since PHP 5.0
- *
- * Instances of this class act as a filter around iterators. In other words 
- * you can put an iterator into the constructor and the instance will only 
- * return selected (accepted) elements.
- *
- * The only thing that needs to be done to make this work is implementing 
- * method accept(). Typically this invloves reading the current element or 
- * key of the inner Iterator and checking whether it is acceptable.
- */
-abstract class FilterIterator implements OuterIterator
-{
-	private $it;
-
-	/**
-	 * Constructs a filter around another iterator.
-	 *
-	 * @param it     Iterator to filter
-	 */
-	function __construct(Iterator $it) {
-		$this->it = $it;
-	}
-
-	/**
-	 * Rewind the inner iterator.
-	 */
-	function rewind() {	
-		$this->it->rewind();
-		$this->fetch();
-	}
-
-	/**
-	 * Accept function to decide whether an element of the inner iterator
-	 * should be accessible through the Filteriterator.
-	 *
-	 * @return whether or not to expose the current element of the inner
-	 *         iterator.
-	 */
-	abstract function accept();
-
-	/**
-	 * Fetch next element and store it.
-	 *
-	 * @return void
-	 */
-	protected function fetch() {
-		while ($this->it->valid()) {
-			if ($this->accept()) {
-				return;
-			}
-			$this->it->next();
-		};
-	}
-
-	/**
-	 * Move to next element
-	 *
-	 * @return void
-	 */
-	function next() {
-		$this->it->next();
-		$this->fetch();
-	}
-	
-	/**
-	 * @return Whether more elements are available
-	 */
-	function valid() {
-		return $this->it->valid();
-	}
-	
-	/**
-	 * @return The current key
-	 */
-	function key() {
-		return $this->it->key();
-	}
-	
-	/**
-	 * @return The current value
-	 */
-	function current() {
-		return $this->it->current();
-	}
-	
-	/**
-	 * hidden __clone
-	 */
-	protected function __clone() {
-		// disallow clone 
-	}
-
-	/**
-	 * @return The inner iterator
-	 */	
-	function getInnerIterator()
-	{
-		return $this->it;
-	}
-
-	/** Aggregate the inner iterator
-	 *
-	 * @param func    Name of method to invoke
-	 * @param params  Array of parameters to pass to method
-	 */
-	function __call($func, $params)
-	{
-		return call_user_func_array(array($this->it, $func), $params);
-	}
-}
-
+/**
+ * @brief   Abstract filter for iterators
+ * @author  Marcus Boerger
+ * @version 1.1
+ * @since PHP 5.0
+ *
+ * Instances of this class act as a filter around iterators. In other words 
+ * you can put an iterator into the constructor and the instance will only 
+ * return selected (accepted) elements.
+ *
+ * The only thing that needs to be done to make this work is implementing 
+ * method accept(). Typically this invloves reading the current element or 
+ * key of the inner Iterator and checking whether it is acceptable.
+ */
+abstract class FilterIterator implements OuterIterator
+{
+	private $it;
+
+	/**
+	 * Constructs a filter around another iterator.
+	 *
+	 * @param it     Iterator to filter
+	 */
+	function __construct(Iterator $it) {
+		$this->it = $it;
+	}
+
+	/**
+	 * Rewind the inner iterator.
+	 */
+	function rewind() {	
+		$this->it->rewind();
+		$this->fetch();
+	}
+
+	/**
+	 * Accept function to decide whether an element of the inner iterator
+	 * should be accessible through the Filteriterator.
+	 *
+	 * @return whether or not to expose the current element of the inner
+	 *         iterator.
+	 */
+	abstract function accept();
+
+	/**
+	 * Fetch next element and store it.
+	 *
+	 * @return void
+	 */
+	protected function fetch() {
+		while ($this->it->valid()) {
+			if ($this->accept()) {
+				return;
+			}
+			$this->it->next();
+		};
+	}
+
+	/**
+	 * Move to next element
+	 *
+	 * @return void
+	 */
+	function next() {
+		$this->it->next();
+		$this->fetch();
+	}
+	
+	/**
+	 * @return Whether more elements are available
+	 */
+	function valid() {
+		return $this->it->valid();
+	}
+	
+	/**
+	 * @return The current key
+	 */
+	function key() {
+		return $this->it->key();
+	}
+	
+	/**
+	 * @return The current value
+	 */
+	function current() {
+		return $this->it->current();
+	}
+	
+	/**
+	 * hidden __clone
+	 */
+	protected function __clone() {
+		// disallow clone 
+	}
+
+	/**
+	 * @return The inner iterator
+	 */	
+	function getInnerIterator()
+	{
+		return $this->it;
+	}
+
+	/** Aggregate the inner iterator
+	 *
+	 * @param func    Name of method to invoke
+	 * @param params  Array of parameters to pass to method
+	 */
+	function __call($func, $params)
+	{
+		return call_user_func_array(array($this->it, $func), $params);
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/infiniteiterator.inc b/ext/spl/internal/infiniteiterator.inc
index 2dbe8d8..04d7827 100755
--- a/ext/spl/internal/infiniteiterator.inc
+++ b/ext/spl/internal/infiniteiterator.inc
@@ -1,48 +1,48 @@
-<?php
-
-/** @file infiniteiterator.inc
- * @ingroup SPL
- * @brief class InfiniteIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief   An infinite Iterator
- * @author  Marcus Boerger
- * @version 1.1
- * @since PHP 5.1
- *
- * This Iterator takes another Iterator and infinitvely iterates it by
- * rewinding it when its end is reached.
- *
- * \note Even an InfiniteIterator stops if its inner Iterator is empty.
- *
- \verbatim
- $it       = new ArrayIterator(array(1,2,3));
- $infinite = new InfiniteIterator($it);
- $limit    = new LimitIterator($infinite, 0, 5);
- foreach($limit as $val=>$key)
- {
- 	echo "$val=>$key\n";
- }
- \endverbatim
- */
-class InfiniteIterator extends IteratorIterator
-{
-	/** Move the inner Iterator forward to its next element or rewind it.
-	 * @return void
-	 */
-	function next()
-	{
-		$this->getInnerIterator()->next();
-		if (!$this->getInnerIterator()->valid())
-		{
-			$this->getInnerIterator()->rewind();
-		}
-	}
-}
-
+<?php
+
+/** @file infiniteiterator.inc
+ * @ingroup SPL
+ * @brief class InfiniteIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief   An infinite Iterator
+ * @author  Marcus Boerger
+ * @version 1.1
+ * @since PHP 5.1
+ *
+ * This Iterator takes another Iterator and infinitvely iterates it by
+ * rewinding it when its end is reached.
+ *
+ * \note Even an InfiniteIterator stops if its inner Iterator is empty.
+ *
+ \verbatim
+ $it       = new ArrayIterator(array(1,2,3));
+ $infinite = new InfiniteIterator($it);
+ $limit    = new LimitIterator($infinite, 0, 5);
+ foreach($limit as $val=>$key)
+ {
+ 	echo "$val=>$key\n";
+ }
+ \endverbatim
+ */
+class InfiniteIterator extends IteratorIterator
+{
+	/** Move the inner Iterator forward to its next element or rewind it.
+	 * @return void
+	 */
+	function next()
+	{
+		$this->getInnerIterator()->next();
+		if (!$this->getInnerIterator()->valid())
+		{
+			$this->getInnerIterator()->rewind();
+		}
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/iteratoriterator.inc b/ext/spl/internal/iteratoriterator.inc
index 13c7175..37676e0 100755
--- a/ext/spl/internal/iteratoriterator.inc
+++ b/ext/spl/internal/iteratoriterator.inc
@@ -1,121 +1,121 @@
-<?php
-
-/** @file iteratoriterator.inc
- * @ingroup SPL
- * @brief class IteratorIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief Basic Iterator wrapper
- * @since PHP 5.1
- *
- * This iterator wrapper allows to convert anything that is traversable into 
- * an Iterator. It is very important to understand that most classes that do 
- * not implement Iterator have their reasone to. Most likely they do not allow
- * the full Iterator feature set. If so you need to provide techniques to
- * prevent missuse. If you do not you must expect exceptions or fatal erros.
- *
- * It is also possible to derive the class and implement IteratorAggregate by
- * downcasting the instances returned in getIterator. See the following
- * example (assuming BaseClass implements Traversable):
- \code
- class SomeClass extends BaseClass implements IteratorAggregate
- {
-   function getIterator()
-   {
-     return new IteratorIterator($this, 'BaseClass');
-   }
- }
- \endcode
- *
- * As you can see in the example this approach requires that the class to 
- * downcast to is actually a base class of the specified iterator to wrap.
- * Omitting the downcast in the above example would result in an endless loop
- * since IteratorIterator::__construct() would call SomeClass::getIterator().
- */
-class IteratorIterator implements OuterIterator
-{
-	/** Construct an IteratorIterator from an Iterator or an IteratorAggregate.
-	 *
-	 * @param iterator  inner iterator
-	 * @param classname optional class the iterator has to be downcasted to
-	 */
-	function __construct(Traversable $iterator, $classname = null)
-	{
-		if ($iterator instanceof IteratorAggregate)
-		{
-		    $iterator = $iterator->getIterator();
-		}
-		if ($iterator instanceof Iterator)
-		{
-			$this->iterator = $iterator;
-		}
-		else
-		{
-			throw new Exception("Classes that only implement Traversable can be wrapped only after converting class IteratorIterator into c code");
-		}
-	}
-
-	/** \return the inner iterator as passed to the constructor
-	 */
-	function getInnerIterator()
-	{
-		return $this->iterator;
-	}
-
-	/** \return whether the iterator is valid
-	 */
-	function valid()
-	{
-		return $this->iterator->valid();
-	}
-
-	/** \return current key
-	 */
-	function key()
-	{
-		return $this->iterator->key();
-	}
-
-	/** \return current value
-	 */
-	function current()
-	{
-		return $this->iterator->current();
-	}
-
-	/** forward to next element
-	 */
-	function next()
-	{
-		return $this->iterator->next();
-	}
-
-	/** rewind to the first element
-	 */
-	function rewind()
-	{
-		return $this->iterator->rewind();
-	}
-
-	/** Aggregate the inner iterator
-	 *
-	 * @param func    Name of method to invoke
-	 * @param params  Array of parameters to pass to method
-	 */
-	function __call($func, $params)
-	{
-		return call_user_func_array(array($this->iterator, $func), $params);
-	}
-
-	/** The inner iterator must be private because when this class will be
-	 * converted to c code it won't no longer be available.
-	 */
-	private $iterator;
-}
-
-?>
+<?php
+
+/** @file iteratoriterator.inc
+ * @ingroup SPL
+ * @brief class IteratorIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief Basic Iterator wrapper
+ * @since PHP 5.1
+ *
+ * This iterator wrapper allows to convert anything that is traversable into 
+ * an Iterator. It is very important to understand that most classes that do 
+ * not implement Iterator have their reasone to. Most likely they do not allow
+ * the full Iterator feature set. If so you need to provide techniques to
+ * prevent missuse. If you do not you must expect exceptions or fatal erros.
+ *
+ * It is also possible to derive the class and implement IteratorAggregate by
+ * downcasting the instances returned in getIterator. See the following
+ * example (assuming BaseClass implements Traversable):
+ \code
+ class SomeClass extends BaseClass implements IteratorAggregate
+ {
+   function getIterator()
+   {
+     return new IteratorIterator($this, 'BaseClass');
+   }
+ }
+ \endcode
+ *
+ * As you can see in the example this approach requires that the class to 
+ * downcast to is actually a base class of the specified iterator to wrap.
+ * Omitting the downcast in the above example would result in an endless loop
+ * since IteratorIterator::__construct() would call SomeClass::getIterator().
+ */
+class IteratorIterator implements OuterIterator
+{
+	/** Construct an IteratorIterator from an Iterator or an IteratorAggregate.
+	 *
+	 * @param iterator  inner iterator
+	 * @param classname optional class the iterator has to be downcasted to
+	 */
+	function __construct(Traversable $iterator, $classname = null)
+	{
+		if ($iterator instanceof IteratorAggregate)
+		{
+		    $iterator = $iterator->getIterator();
+		}
+		if ($iterator instanceof Iterator)
+		{
+			$this->iterator = $iterator;
+		}
+		else
+		{
+			throw new Exception("Classes that only implement Traversable can be wrapped only after converting class IteratorIterator into c code");
+		}
+	}
+
+	/** \return the inner iterator as passed to the constructor
+	 */
+	function getInnerIterator()
+	{
+		return $this->iterator;
+	}
+
+	/** \return whether the iterator is valid
+	 */
+	function valid()
+	{
+		return $this->iterator->valid();
+	}
+
+	/** \return current key
+	 */
+	function key()
+	{
+		return $this->iterator->key();
+	}
+
+	/** \return current value
+	 */
+	function current()
+	{
+		return $this->iterator->current();
+	}
+
+	/** forward to next element
+	 */
+	function next()
+	{
+		return $this->iterator->next();
+	}
+
+	/** rewind to the first element
+	 */
+	function rewind()
+	{
+		return $this->iterator->rewind();
+	}
+
+	/** Aggregate the inner iterator
+	 *
+	 * @param func    Name of method to invoke
+	 * @param params  Array of parameters to pass to method
+	 */
+	function __call($func, $params)
+	{
+		return call_user_func_array(array($this->iterator, $func), $params);
+	}
+
+	/** The inner iterator must be private because when this class will be
+	 * converted to c code it won't no longer be available.
+	 */
+	private $iterator;
+}
+
+?>
diff --git a/ext/spl/internal/limititerator.inc b/ext/spl/internal/limititerator.inc
index c135e03..c5bddea 100755
--- a/ext/spl/internal/limititerator.inc
+++ b/ext/spl/internal/limititerator.inc
@@ -1,134 +1,134 @@
-<?php
-
+<?php
+
 /** @file limititerator.inc
  * @ingroup SPL
  * @brief class LimitIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Limited Iteration over another Iterator
- * @author  Marcus Boerger
- * @version 1.1
- * @since PHP 5.0
- *
- * A class that starts iteration at a certain offset and only iterates over
- * a specified amount of elements.
- *
- * This class uses SeekableIterator::seek() if available and rewind() plus
- * a skip loop otehrwise.
- */
-class LimitIterator implements OuterIterator
-{
-	private $it;
-	private $offset;
-	private $count;
-	private $pos;
-
-	/** Construct
-	 *
-	 * @param it     Iterator to limit
-	 * @param offset Offset to first element
-	 * @param count  Maximum number of elements to show or -1 for all
-	 */
-	function __construct(Iterator $it, $offset = 0, $count = -1)
-	{
-		if ($offset < 0) {
-			throw new exception('Parameter offset must be > 0');
-		}
-		if ($count < 0 && $count != -1) {
-			throw new exception('Parameter count must either be -1 or a value greater than or equal to 0');
-		}
-		$this->it     = $it;
-		$this->offset = $offset;
-		$this->count  = $count;
-		$this->pos    = 0;
-	}
-	
-	/** Seek to specified position
-	 * @param position offset to seek to (relative to beginning not offset
-	 *                 specified in constructor).
-	 * @throw exception when position is invalid
-	 */
-	function seek($position) {
-		if ($position < $this->offset) {
-			throw new exception('Cannot seek to '.$position.' which is below offset '.$this->offset);
-		}
-		if ($position > $this->offset + $this->count && $this->count != -1) {
-			throw new exception('Cannot seek to '.$position.' which is behind offset '.$this->offset.' plus count '.$this->count);
-		}
-		if ($this->it instanceof SeekableIterator) {
-			$this->it->seek($position);
-			$this->pos = $position;
-		} else {
-			while($this->pos < $position && $this->it->valid()) {
-				$this->next();
-			}
-		}
-	}
-
-    /** Rewind to offset specified in constructor
-     */
-	function rewind()
-	{
-		$this->it->rewind();
-		$this->pos = 0;
-		$this->seek($this->offset);
-	}
-	
-	/** @return whether iterator is valid
-	 */
-	function valid() {
-		return ($this->count == -1 || $this->pos < $this->offset + $this->count)
-			 && $this->it->valid();
-	}
-	
-	/** @return current key
-	 */
-	function key() {
-		return $this->it->key();
-	}
-
-	/** @return current element
-	 */
-	function current() {
-		return $this->it->current();
-	}
-
-	/** Forward to nect element
-	 */
-	function next() {
-		$this->it->next();
-		$this->pos++;
-	}
-
-	/** @return current position relative to zero (not to offset specified in 
-	 *          constructor).
-	 */
-	function getPosition() {
-		return $this->pos;
-	}
-
-	/**
-	 * @return The inner iterator
-	 */	
-	function getInnerIterator()
-	{
-		return $this->it;
-	}
-
-	/** Aggregate the inner iterator
-	 *
-	 * @param func    Name of method to invoke
-	 * @param params  Array of parameters to pass to method
-	 */
-	function __call($func, $params)
-	{
-		return call_user_func_array(array($this->it, $func), $params);
-	}
-}
-
+/**
+ * @brief   Limited Iteration over another Iterator
+ * @author  Marcus Boerger
+ * @version 1.1
+ * @since PHP 5.0
+ *
+ * A class that starts iteration at a certain offset and only iterates over
+ * a specified amount of elements.
+ *
+ * This class uses SeekableIterator::seek() if available and rewind() plus
+ * a skip loop otehrwise.
+ */
+class LimitIterator implements OuterIterator
+{
+	private $it;
+	private $offset;
+	private $count;
+	private $pos;
+
+	/** Construct
+	 *
+	 * @param it     Iterator to limit
+	 * @param offset Offset to first element
+	 * @param count  Maximum number of elements to show or -1 for all
+	 */
+	function __construct(Iterator $it, $offset = 0, $count = -1)
+	{
+		if ($offset < 0) {
+			throw new exception('Parameter offset must be > 0');
+		}
+		if ($count < 0 && $count != -1) {
+			throw new exception('Parameter count must either be -1 or a value greater than or equal to 0');
+		}
+		$this->it     = $it;
+		$this->offset = $offset;
+		$this->count  = $count;
+		$this->pos    = 0;
+	}
+	
+	/** Seek to specified position
+	 * @param position offset to seek to (relative to beginning not offset
+	 *                 specified in constructor).
+	 * @throw exception when position is invalid
+	 */
+	function seek($position) {
+		if ($position < $this->offset) {
+			throw new exception('Cannot seek to '.$position.' which is below offset '.$this->offset);
+		}
+		if ($position > $this->offset + $this->count && $this->count != -1) {
+			throw new exception('Cannot seek to '.$position.' which is behind offset '.$this->offset.' plus count '.$this->count);
+		}
+		if ($this->it instanceof SeekableIterator) {
+			$this->it->seek($position);
+			$this->pos = $position;
+		} else {
+			while($this->pos < $position && $this->it->valid()) {
+				$this->next();
+			}
+		}
+	}
+
+    /** Rewind to offset specified in constructor
+     */
+	function rewind()
+	{
+		$this->it->rewind();
+		$this->pos = 0;
+		$this->seek($this->offset);
+	}
+	
+	/** @return whether iterator is valid
+	 */
+	function valid() {
+		return ($this->count == -1 || $this->pos < $this->offset + $this->count)
+			 && $this->it->valid();
+	}
+	
+	/** @return current key
+	 */
+	function key() {
+		return $this->it->key();
+	}
+
+	/** @return current element
+	 */
+	function current() {
+		return $this->it->current();
+	}
+
+	/** Forward to nect element
+	 */
+	function next() {
+		$this->it->next();
+		$this->pos++;
+	}
+
+	/** @return current position relative to zero (not to offset specified in 
+	 *          constructor).
+	 */
+	function getPosition() {
+		return $this->pos;
+	}
+
+	/**
+	 * @return The inner iterator
+	 */	
+	function getInnerIterator()
+	{
+		return $this->it;
+	}
+
+	/** Aggregate the inner iterator
+	 *
+	 * @param func    Name of method to invoke
+	 * @param params  Array of parameters to pass to method
+	 */
+	function __call($func, $params)
+	{
+		return call_user_func_array(array($this->it, $func), $params);
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/norewinditerator.inc b/ext/spl/internal/norewinditerator.inc
index 296fe2b..8747a61 100755
--- a/ext/spl/internal/norewinditerator.inc
+++ b/ext/spl/internal/norewinditerator.inc
@@ -1,28 +1,28 @@
-<?php
-
-/** @file norewinditerator.inc
- * @ingroup SPL
- * @brief class NoRewindIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief   An Iterator wrapper that doesn't call rewind
- * @author  Marcus Boerger
- * @version 1.1
- * @since PHP 5.1
- */
-class NoRewindIterator extends IteratorIterator
-{
-	/** Simply prevent execution of inner iterators rewind().
-	 */
-	function rewind()
-	{
-		// nothing to do
-	}
-}
-
+<?php
+
+/** @file norewinditerator.inc
+ * @ingroup SPL
+ * @brief class NoRewindIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief   An Iterator wrapper that doesn't call rewind
+ * @author  Marcus Boerger
+ * @version 1.1
+ * @since PHP 5.1
+ */
+class NoRewindIterator extends IteratorIterator
+{
+	/** Simply prevent execution of inner iterators rewind().
+	 */
+	function rewind()
+	{
+		// nothing to do
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/outeriterator.inc b/ext/spl/internal/outeriterator.inc
index d3068f0..f26d29d 100755
--- a/ext/spl/internal/outeriterator.inc
+++ b/ext/spl/internal/outeriterator.inc
@@ -1,25 +1,25 @@
-<?php
-
+<?php
+
 /** @file outeriterator.inc
  * @ingroup SPL
  * @brief class OuterIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Interface to access the current inner iteraor of iterator wrappers
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1
- */
-interface OuterIterator extends Iterator
-{
-	/** @return inner iterator
-	 */
-    function getInnerIterator();
-}
-
+/**
+ * @brief   Interface to access the current inner iteraor of iterator wrappers
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1
+ */
+interface OuterIterator extends Iterator
+{
+	/** @return inner iterator
+	 */
+    function getInnerIterator();
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/parentiterator.inc b/ext/spl/internal/parentiterator.inc
index 84c760d..cc377fc 100755
--- a/ext/spl/internal/parentiterator.inc
+++ b/ext/spl/internal/parentiterator.inc
@@ -1,32 +1,32 @@
-<?php
-
+<?php
+
 /** @file parentiterator.inc
  * @ingroup SPL
  * @brief class FilterIterator
  * @author  Marcus Boerger
- * @date    2003 - 2006
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Iterator to filter parents
- * @author  Marcus Boerger
- * @version 1.2
- * @since PHP 5.1
- *
- * This extended FilterIterator allows a recursive iteration using 
- * RecursiveIteratorIterator that only shows those elements which have 
- * children.
- */
-class ParentIterator extends RecursiveFilterIterator
-{
-	/** @return whetehr the current element has children
-	 */
-	function accept()
-	{
-		return $this->it->hasChildren();
-	}
-}
-
+/**
+ * @brief   Iterator to filter parents
+ * @author  Marcus Boerger
+ * @version 1.2
+ * @since PHP 5.1
+ *
+ * This extended FilterIterator allows a recursive iteration using 
+ * RecursiveIteratorIterator that only shows those elements which have 
+ * children.
+ */
+class ParentIterator extends RecursiveFilterIterator
+{
+	/** @return whetehr the current element has children
+	 */
+	function accept()
+	{
+		return $this->it->hasChildren();
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/recursivearrayiterator.inc b/ext/spl/internal/recursivearrayiterator.inc
index 833a656..a9450e1 100755
--- a/ext/spl/internal/recursivearrayiterator.inc
+++ b/ext/spl/internal/recursivearrayiterator.inc
@@ -1,59 +1,59 @@
-<?php
-
-/** @file recursivearrayiterator.inc
- * @ingroup Examples
- * @brief class RecursiveArrayIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief   A recursive array iterator
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1
- *
- * Passes the RecursiveIterator interface to the inner Iterator and provides
- * the same functionality as FilterIterator. This allows you to skip parents
- * and all their childs before loading them all. You need to care about
- * function getChildren() because it may not always suit your needs. The 
- * builtin behavior uses reflection to return a new instance of the exact same
- * class it is called from. That is you extend RecursiveFilterIterator and
- * getChildren() will create instance of that class. The problem is that doing
- * this does not transport any state or control information of your accept()
- * implementation to the new instance. To overcome this problem you might 
- * need to overwrite getChildren(), call this implementation and pass the
- * control vaules manually.
- */
-class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
-{
-	/** @return whether the current element has children
-	 */
-	function hasChildren()
-	{
-		return is_array($this->current());
-	}
-
-	/** @return an iterator for the current elements children
-	 *
-	 * @note the returned iterator will be of the same class as $this
-	 */
-	function getChildren()
-	{
-		if ($this->current() instanceof self)
-		{
-			return $this->current();
-		}
-		if (empty($this->ref))
-		{
-			$this->ref = new ReflectionClass($this);
-		}
-		return $this->ref->newInstance($this->current());
-	}
-	
-	private $ref;
-}
-
+<?php
+
+/** @file recursivearrayiterator.inc
+ * @ingroup Examples
+ * @brief class RecursiveArrayIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief   A recursive array iterator
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1
+ *
+ * Passes the RecursiveIterator interface to the inner Iterator and provides
+ * the same functionality as FilterIterator. This allows you to skip parents
+ * and all their childs before loading them all. You need to care about
+ * function getChildren() because it may not always suit your needs. The 
+ * builtin behavior uses reflection to return a new instance of the exact same
+ * class it is called from. That is you extend RecursiveFilterIterator and
+ * getChildren() will create instance of that class. The problem is that doing
+ * this does not transport any state or control information of your accept()
+ * implementation to the new instance. To overcome this problem you might 
+ * need to overwrite getChildren(), call this implementation and pass the
+ * control vaules manually.
+ */
+class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
+{
+	/** @return whether the current element has children
+	 */
+	function hasChildren()
+	{
+		return is_array($this->current());
+	}
+
+	/** @return an iterator for the current elements children
+	 *
+	 * @note the returned iterator will be of the same class as $this
+	 */
+	function getChildren()
+	{
+		if ($this->current() instanceof self)
+		{
+			return $this->current();
+		}
+		if (empty($this->ref))
+		{
+			$this->ref = new ReflectionClass($this);
+		}
+		return $this->ref->newInstance($this->current());
+	}
+	
+	private $ref;
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/recursivecachingiterator.inc b/ext/spl/internal/recursivecachingiterator.inc
index 3275146..0676d43 100755
--- a/ext/spl/internal/recursivecachingiterator.inc
+++ b/ext/spl/internal/recursivecachingiterator.inc
@@ -1,99 +1,99 @@
-<?php
-
+<?php
+
 /** @file recursivecachingiterator.inc
  * @ingroup SPL
  * @brief class RecursiveCachingIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Cached recursive iteration over another Iterator
- * @author  Marcus Boerger
- * @version 1.2
- * @since PHP 5.1
- *
- * @see CachingIterator
- */
-class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator
-{
-	private $hasChildren;
-	private $getChildren;
-
-	/** Construct from another iterator
-	 *
-	 * @param it    Iterator to cache
-	 * @param flags Bitmask: 
-	 *              - CALL_TOSTRING   (whether to call __toString() for every element)
-	 *              - CATCH_GET_CHILD (whether to catch exceptions when trying to get childs)
-	 */
-	function __construct(RecursiveIterator $it, $flags = self::CALL_TOSTRING)
-	{
-		parent::__construct($it, $flags);
-	}
-
-	/** Rewind Iterator
-	 */	
-	function rewind();
-	{
-	   $this->hasChildren = false;
-	   $this->getChildren = NULL;
-	   parent::rewind();
-	}
-
-	/** Forward to next element if necessary then an Iterator for the Children
-	 * will be created.
-	 */
-	function next()
-	{
-		if ($this->hasChildren = $this->it->hasChildren())
-		{
-			try
-			{
-				$child = $this->it->getChildren();
-				if (!$this->ref)
-				{
-					$this->ref = new ReflectionClass($this);
-				}
-				$this->getChildren = $ref->newInstance($child, $this->flags);
-			}
-			catch(Exception $e)
-			{
-				if (!$this->flags & self::CATCH_GET_CHILD)
-				{
-					throw $e;
-				}
-				$this->hasChildren = false;
-				$this->getChildren = NULL;
-			}
-		} else
-		{
-			$this->getChildren = NULL;
-		}
-		parent::next();
-	}
-	
-	private $ref;
-
-	/** @return whether the current element has children
-	 * @note The check whether the Iterator for the children can be created was
-	 *       already executed. Hence when flag CATCH_GET_CHILD was given in
-	 *       constructor this fucntion returns false so that getChildren does 
-	 *       not try to access those children.
-	 */
-	function hasChildren()
-	{
-		return $this->hasChildren;
-	}
-
-	/** @return An Iterator for the children
-	 */
-	function getChildren()
-	{
-		return $this->getChildren;
-	}
-}
-
+/**
+ * @brief   Cached recursive iteration over another Iterator
+ * @author  Marcus Boerger
+ * @version 1.2
+ * @since PHP 5.1
+ *
+ * @see CachingIterator
+ */
+class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator
+{
+	private $hasChildren;
+	private $getChildren;
+
+	/** Construct from another iterator
+	 *
+	 * @param it    Iterator to cache
+	 * @param flags Bitmask: 
+	 *              - CALL_TOSTRING   (whether to call __toString() for every element)
+	 *              - CATCH_GET_CHILD (whether to catch exceptions when trying to get childs)
+	 */
+	function __construct(RecursiveIterator $it, $flags = self::CALL_TOSTRING)
+	{
+		parent::__construct($it, $flags);
+	}
+
+	/** Rewind Iterator
+	 */	
+	function rewind();
+	{
+	   $this->hasChildren = false;
+	   $this->getChildren = NULL;
+	   parent::rewind();
+	}
+
+	/** Forward to next element if necessary then an Iterator for the Children
+	 * will be created.
+	 */
+	function next()
+	{
+		if ($this->hasChildren = $this->it->hasChildren())
+		{
+			try
+			{
+				$child = $this->it->getChildren();
+				if (!$this->ref)
+				{
+					$this->ref = new ReflectionClass($this);
+				}
+				$this->getChildren = $ref->newInstance($child, $this->flags);
+			}
+			catch(Exception $e)
+			{
+				if (!$this->flags & self::CATCH_GET_CHILD)
+				{
+					throw $e;
+				}
+				$this->hasChildren = false;
+				$this->getChildren = NULL;
+			}
+		} else
+		{
+			$this->getChildren = NULL;
+		}
+		parent::next();
+	}
+	
+	private $ref;
+
+	/** @return whether the current element has children
+	 * @note The check whether the Iterator for the children can be created was
+	 *       already executed. Hence when flag CATCH_GET_CHILD was given in
+	 *       constructor this fucntion returns false so that getChildren does 
+	 *       not try to access those children.
+	 */
+	function hasChildren()
+	{
+		return $this->hasChildren;
+	}
+
+	/** @return An Iterator for the children
+	 */
+	function getChildren()
+	{
+		return $this->getChildren;
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/recursivefilteriterator.inc b/ext/spl/internal/recursivefilteriterator.inc
index 0e17845..b089919 100755
--- a/ext/spl/internal/recursivefilteriterator.inc
+++ b/ext/spl/internal/recursivefilteriterator.inc
@@ -1,62 +1,62 @@
-<?php
-
-/** @file recursivefilteriterator.inc
- * @ingroup SPL
- * @brief class RecursiveFilterIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief   Iterator to filter recursive iterators
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1
- *
- * Passes the RecursiveIterator interface to the inner Iterator and provides
- * the same functionality as FilterIterator. This allows you to skip parents
- * and all their childs before loading them all. You need to care about
- * function getChildren() because it may not always suit your needs. The 
- * builtin behavior uses reflection to return a new instance of the exact same
- * class it is called from. That is you extend RecursiveFilterIterator and
- * getChildren() will create instance of that class. The problem is that doing
- * this does not transport any state or control information of your accept()
- * implementation to the new instance. To overcome this problem you might 
- * need to overwrite getChildren(), call this implementation and pass the
- * control vaules manually.
- */
-abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator
-{
-	/** @param $it the RecursiveIterator to filter
-	 */
-	function __construct(RecursiveIterator $it)
-	{
-		parent::__construct($it);
-	}
-	
-	/** @return whether the current element has children
-	 */
-	function hasChildren()
-	{
-		return $this->getInnerIterator()->hasChildren();
-	}
-
-	/** @return an iterator for the current elements children
-	 *
-	 * @note the returned iterator will be of the same class as $this
-	 */
-	function getChildren()
-	{
-		if (empty($this->ref))
-		{
-			$this->ref = new ReflectionClass($this);
-		}
-		return $this->ref->newInstance($this->getInnerIterator()->getChildren());
-	}
-	
-	private $ref;
-}
-
+<?php
+
+/** @file recursivefilteriterator.inc
+ * @ingroup SPL
+ * @brief class RecursiveFilterIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief   Iterator to filter recursive iterators
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1
+ *
+ * Passes the RecursiveIterator interface to the inner Iterator and provides
+ * the same functionality as FilterIterator. This allows you to skip parents
+ * and all their childs before loading them all. You need to care about
+ * function getChildren() because it may not always suit your needs. The 
+ * builtin behavior uses reflection to return a new instance of the exact same
+ * class it is called from. That is you extend RecursiveFilterIterator and
+ * getChildren() will create instance of that class. The problem is that doing
+ * this does not transport any state or control information of your accept()
+ * implementation to the new instance. To overcome this problem you might 
+ * need to overwrite getChildren(), call this implementation and pass the
+ * control vaules manually.
+ */
+abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator
+{
+	/** @param $it the RecursiveIterator to filter
+	 */
+	function __construct(RecursiveIterator $it)
+	{
+		parent::__construct($it);
+	}
+	
+	/** @return whether the current element has children
+	 */
+	function hasChildren()
+	{
+		return $this->getInnerIterator()->hasChildren();
+	}
+
+	/** @return an iterator for the current elements children
+	 *
+	 * @note the returned iterator will be of the same class as $this
+	 */
+	function getChildren()
+	{
+		if (empty($this->ref))
+		{
+			$this->ref = new ReflectionClass($this);
+		}
+		return $this->ref->newInstance($this->getInnerIterator()->getChildren());
+	}
+	
+	private $ref;
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/recursiveiterator.inc b/ext/spl/internal/recursiveiterator.inc
index 07ffad7..1eab3d6 100755
--- a/ext/spl/internal/recursiveiterator.inc
+++ b/ext/spl/internal/recursiveiterator.inc
@@ -1,30 +1,30 @@
-<?php
-
+<?php
+
 /** @file recursiveiterator.inc
  * @ingroup SPL
  * @brief class RecursiveIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Interface for recursive iteration with RecursiveIteratorIterator
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.0
- */
-interface RecursiveIterator extends Iterator
-{
-	/** @return whether the current element has children
-	 */
-	function hasChildren();
-	
-	/** @return the sub iterator for the current element
-	 * @note The returned object must implement RecursiveIterator.
-	 */
-	function getChildren();
-}
-
+/**
+ * @brief   Interface for recursive iteration with RecursiveIteratorIterator
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.0
+ */
+interface RecursiveIterator extends Iterator
+{
+	/** @return whether the current element has children
+	 */
+	function hasChildren();
+	
+	/** @return the sub iterator for the current element
+	 * @note The returned object must implement RecursiveIterator.
+	 */
+	function getChildren();
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/recursiveiteratoriterator.inc b/ext/spl/internal/recursiveiteratoriterator.inc
index 8bb6573..35fa801 100755
--- a/ext/spl/internal/recursiveiteratoriterator.inc
+++ b/ext/spl/internal/recursiveiteratoriterator.inc
@@ -1,237 +1,237 @@
-<?php
-
-/** @file recursiveiteratoriterator.inc
- * @ingroup SPL
- * @brief class RecursiveIteratorIterator
- * @author  Marcus Boerger
- * @date    2003 - 2005
- *
- * SPL - Standard PHP Library
- */
-
-/**
- * @brief   Iterates through recursive iterators
- * @author  Marcus Boerger
- * @version 1.2
- * @since PHP 5.0
- *
- * The objects of this class are created by instances of RecursiveIterator. 
- * Elements of those iterators may be traversable themselves. If so these 
- * sub elements are recursed into.
- */
-class RecursiveIteratorIterator implements OuterIterator
-{
-	/** Mode: Only show leaves */
-	const LEAVES_ONLY 		= 0;
-	/** Mode: Show parents prior to their children */
-	const SELF_FIRST		= 1;
-	/** Mode: Show all children prior to their parent */
-	const CHILD_FIRST		= 2;
-
-	/** Flag: Catches exceptions during getChildren() calls and simply jumps
-	 * to the next element. */
-	const CATCH_GET_CHILD	= 0x00000002;
-
-	private $ait = array();
-	private $count = 0;
-	private $mode  = self::LEAVES_ONLY;
-	private $flags = 0;
-
-	/** Construct from RecursiveIterator
-	 *
-	 * @param it     RecursiveIterator to iterate
-	 * @param mode   Operation mode (one of):
-	 *               - LEAVES_ONLY only show leaves
-	 *               - SELF_FIRST  show parents prior to their childs
-	 *               - CHILD_FIRST show all children prior to their parent
-	 * @param flags  Control flags, zero or any combination of the following
-	 *               (since PHP 5.1).
-	 *               - CATCH_GET_CHILD which catches exceptions during
-	 *                 getChildren() calls and simply jumps to the next 
-	 *                 element.
-	 */
-	function __construct(RecursiveIterator $it, $mode = self::LEAVES_ONLY, $flags = 0)
-	{
-		$this->ait[0] = $it;
-		$this->mode   = $mode;
-		$this->flags  = $flags;
-	}
-
-	/** Rewind to top iterator as set in constructor
-	 */
-	function rewind()
-	{
-		while ($this->count) {
-			unset($this->ait[$this->count--]);
-			$this->endChildren();
-		}
-		$this->ait[0]->rewind();
-		$this->ait[0]->recursed = false;
-		callNextElement(true);
-	}
-	
-	/** @return whether iterator is valid
-	 */
-	function valid()
-	{
-		$count = $this->count;
-		while ($count) {
-			$it = $this->ait[$count];
-			if ($it->valid()) {
-				return true;
-			}
-			$count--;
-			$this->endChildren();
-		}
-		return false;
-	}
-	
-	/** @return current key
-	 */
-	function key()
-	{
-		$it = $this->ait[$this->count];
-		return $it->key();
-	}
-	
-	/** @return current element
-	 */
-	function current()
-	{
-		$it = $this->ait[$this->count];
-		return $it->current();
-	}
-	
-	/** Forward to next element
-	 */
-	function next()
-	{
-		while ($this->count) {
-			$it = $this->ait[$this->count];
-			if ($it->valid()) {
-				if (!$it->recursed && callHasChildren()) {
-					$it->recursed = true;
-					try
-					{
-						$sub = callGetChildren();
-					}
-					catch (Exception $e)
-					{
-						if (!($this->flags & self::CATCH_GET_CHILD))
-						{
-							throw $e;
-						}
-						$it->next();
-						continue;
-					}
-					$sub->recursed = false;
-					$sub->rewind();
-					if ($sub->valid()) {
-						$this->ait[++$this->count] = $sub;
-						if (!$sub instanceof RecursiveIterator) {
-							throw new Exception(get_class($sub).'::getChildren() must return an object that implements RecursiveIterator');
-						}
-						$this->beginChildren();
-						return;
-					}
-					unset($sub);
-				}
-				$it->next();
-				$it->recursed = false;
-				if ($it->valid()) {
-					return;
-				}
-				$it->recursed = false;
-			}
-			if ($this->count) {
-				unset($this->ait[$this->count--]);
-				$it = $this->ait[$this->count];
-				$this->endChildren();
-				callNextElement(false);
-			}
-		}
-		callNextElement(true);
-	}
-
-	/** @return Sub Iterator at given level or if unspecified the current sub 
-	 *          Iterator
-	 */
-	function getSubIterator($level = NULL)
-	{
-		if (is_null($level)) {
-			$level = $this->count;
-		}
-		return @$this->ait[$level];
-	}
-
-	/**
-	 * @return The inner iterator
-	 */	
-	function getInnerIterator()
-	{
-		return $this->it;
-	}
-
-	/** @return Current Depth (Number of parents)
-	 */
-	function getDepth()
-	{
-		return $this->level;
-	}
-
-	/** @return whether current sub iterators current element has children
-	 * @since PHP 5.1
-	 */
-	function callHasChildren()
-	{
-		return $this->ait[$this->count]->hasChildren();
-	}
-
-	/** @return current sub iterators current children
-	 * @since PHP 5.1
-	 */
-	function callGetChildren()
-	{
-		return $this->ait[$this->count]->getChildren();
-	}
-
-	/** Called right after calling getChildren() and its rewind().
-	 * @since PHP 5.1
-	 */
-	function beginChildren()
-	{
-	}
-	
-	/** Called after current child iterator is invalid and right before it
-	 * gets destructed.
-	 * @since PHP 5.1
-	 */
-	function endChildren()
-	{
-	}
-
-	private function callNextElement($after_move)
-	{
-		if ($this->valid())
-		{
-			if ($after_move)
-			{
-				if (($this->mode == self::SELF_FIRST && $this->callHasChildren())
-				||   $this->mode == self::LEAVES_ONLY)
-				$this->nextElement();
-			}
-			else
-			{
-				$this->nextElement();
-			}
-		}
-	}
-	
-	/** Called when the next element is available
-	 */
-	function nextElement()
-	{
-	}
-}
-
+<?php
+
+/** @file recursiveiteratoriterator.inc
+ * @ingroup SPL
+ * @brief class RecursiveIteratorIterator
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/**
+ * @brief   Iterates through recursive iterators
+ * @author  Marcus Boerger
+ * @version 1.2
+ * @since PHP 5.0
+ *
+ * The objects of this class are created by instances of RecursiveIterator. 
+ * Elements of those iterators may be traversable themselves. If so these 
+ * sub elements are recursed into.
+ */
+class RecursiveIteratorIterator implements OuterIterator
+{
+	/** Mode: Only show leaves */
+	const LEAVES_ONLY 		= 0;
+	/** Mode: Show parents prior to their children */
+	const SELF_FIRST		= 1;
+	/** Mode: Show all children prior to their parent */
+	const CHILD_FIRST		= 2;
+
+	/** Flag: Catches exceptions during getChildren() calls and simply jumps
+	 * to the next element. */
+	const CATCH_GET_CHILD	= 0x00000002;
+
+	private $ait = array();
+	private $count = 0;
+	private $mode  = self::LEAVES_ONLY;
+	private $flags = 0;
+
+	/** Construct from RecursiveIterator
+	 *
+	 * @param it     RecursiveIterator to iterate
+	 * @param mode   Operation mode (one of):
+	 *               - LEAVES_ONLY only show leaves
+	 *               - SELF_FIRST  show parents prior to their childs
+	 *               - CHILD_FIRST show all children prior to their parent
+	 * @param flags  Control flags, zero or any combination of the following
+	 *               (since PHP 5.1).
+	 *               - CATCH_GET_CHILD which catches exceptions during
+	 *                 getChildren() calls and simply jumps to the next 
+	 *                 element.
+	 */
+	function __construct(RecursiveIterator $it, $mode = self::LEAVES_ONLY, $flags = 0)
+	{
+		$this->ait[0] = $it;
+		$this->mode   = $mode;
+		$this->flags  = $flags;
+	}
+
+	/** Rewind to top iterator as set in constructor
+	 */
+	function rewind()
+	{
+		while ($this->count) {
+			unset($this->ait[$this->count--]);
+			$this->endChildren();
+		}
+		$this->ait[0]->rewind();
+		$this->ait[0]->recursed = false;
+		callNextElement(true);
+	}
+	
+	/** @return whether iterator is valid
+	 */
+	function valid()
+	{
+		$count = $this->count;
+		while ($count) {
+			$it = $this->ait[$count];
+			if ($it->valid()) {
+				return true;
+			}
+			$count--;
+			$this->endChildren();
+		}
+		return false;
+	}
+	
+	/** @return current key
+	 */
+	function key()
+	{
+		$it = $this->ait[$this->count];
+		return $it->key();
+	}
+	
+	/** @return current element
+	 */
+	function current()
+	{
+		$it = $this->ait[$this->count];
+		return $it->current();
+	}
+	
+	/** Forward to next element
+	 */
+	function next()
+	{
+		while ($this->count) {
+			$it = $this->ait[$this->count];
+			if ($it->valid()) {
+				if (!$it->recursed && callHasChildren()) {
+					$it->recursed = true;
+					try
+					{
+						$sub = callGetChildren();
+					}
+					catch (Exception $e)
+					{
+						if (!($this->flags & self::CATCH_GET_CHILD))
+						{
+							throw $e;
+						}
+						$it->next();
+						continue;
+					}
+					$sub->recursed = false;
+					$sub->rewind();
+					if ($sub->valid()) {
+						$this->ait[++$this->count] = $sub;
+						if (!$sub instanceof RecursiveIterator) {
+							throw new Exception(get_class($sub).'::getChildren() must return an object that implements RecursiveIterator');
+						}
+						$this->beginChildren();
+						return;
+					}
+					unset($sub);
+				}
+				$it->next();
+				$it->recursed = false;
+				if ($it->valid()) {
+					return;
+				}
+				$it->recursed = false;
+			}
+			if ($this->count) {
+				unset($this->ait[$this->count--]);
+				$it = $this->ait[$this->count];
+				$this->endChildren();
+				callNextElement(false);
+			}
+		}
+		callNextElement(true);
+	}
+
+	/** @return Sub Iterator at given level or if unspecified the current sub 
+	 *          Iterator
+	 */
+	function getSubIterator($level = NULL)
+	{
+		if (is_null($level)) {
+			$level = $this->count;
+		}
+		return @$this->ait[$level];
+	}
+
+	/**
+	 * @return The inner iterator
+	 */	
+	function getInnerIterator()
+	{
+		return $this->it;
+	}
+
+	/** @return Current Depth (Number of parents)
+	 */
+	function getDepth()
+	{
+		return $this->level;
+	}
+
+	/** @return whether current sub iterators current element has children
+	 * @since PHP 5.1
+	 */
+	function callHasChildren()
+	{
+		return $this->ait[$this->count]->hasChildren();
+	}
+
+	/** @return current sub iterators current children
+	 * @since PHP 5.1
+	 */
+	function callGetChildren()
+	{
+		return $this->ait[$this->count]->getChildren();
+	}
+
+	/** Called right after calling getChildren() and its rewind().
+	 * @since PHP 5.1
+	 */
+	function beginChildren()
+	{
+	}
+	
+	/** Called after current child iterator is invalid and right before it
+	 * gets destructed.
+	 * @since PHP 5.1
+	 */
+	function endChildren()
+	{
+	}
+
+	private function callNextElement($after_move)
+	{
+		if ($this->valid())
+		{
+			if ($after_move)
+			{
+				if (($this->mode == self::SELF_FIRST && $this->callHasChildren())
+				||   $this->mode == self::LEAVES_ONLY)
+				$this->nextElement();
+			}
+			else
+			{
+				$this->nextElement();
+			}
+		}
+	}
+	
+	/** Called when the next element is available
+	 */
+	function nextElement()
+	{
+	}
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/recursiveregexiterator.inc b/ext/spl/internal/recursiveregexiterator.inc
index df47d61..ffcff0c 100755
--- a/ext/spl/internal/recursiveregexiterator.inc
+++ b/ext/spl/internal/recursiveregexiterator.inc
@@ -1,61 +1,61 @@
-<?php
-
+<?php
+
 /** @file recursiveregexiterator.inc
  * @ingroup SPL
  * @brief class RegexIterator
  * @author  Marcus Boerger
- * @date    2003 - 2006
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Recursive regular expression filter for iterators
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1
- *
- * This filter iterator assumes that the inner iterator 
- */
-class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator
-{
-	/**
-	 * Constructs a regular expression filter around an iterator whose 
-	 * elemnts or keys are strings.
-	 *
-	 * @param it          inner iterator
-	 * @param regex       the regular expression to match
-	 * @param mode        operation mode (one of self::MATCH, self::GET_MATCH, 
-	 *                    self::ALL_MATCHES, self::SPLIT)
-	 * @param flags       special flags (self::USE_KEY)
-	 * @param preg_flags  global PREG_* flags, see preg_match(), 
-	 *                    preg_match_all(), preg_split()
-	 */
-	function __construct(RecursiveIterator $it, $regex, $mode = 0, $flags = 0, $preg_flags = 0) {
-		parent::__construct($it, $regex, $mode, $flags, $preg_flags);
-	}
-
-	/** @return whether the current element has children
-	 */
-	function hasChildren()
-	{
-		return $this->getInnerIterator()->hasChildren();
-	}
-
-	/** @return an iterator for the current elements children
-	 *
-	 * @note the returned iterator will be of the same class as $this
-	 */
-	function getChildren()
-	{
-		if (empty($this->ref))
-		{
-			$this->ref = new ReflectionClass($this);
-		}
-		return $this->ref->newInstance($this->getInnerIterator()->getChildren());
-	}
-	
-	private $ref;
-}
-
+/**
+ * @brief   Recursive regular expression filter for iterators
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1
+ *
+ * This filter iterator assumes that the inner iterator 
+ */
+class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator
+{
+	/**
+	 * Constructs a regular expression filter around an iterator whose 
+	 * elemnts or keys are strings.
+	 *
+	 * @param it          inner iterator
+	 * @param regex       the regular expression to match
+	 * @param mode        operation mode (one of self::MATCH, self::GET_MATCH, 
+	 *                    self::ALL_MATCHES, self::SPLIT)
+	 * @param flags       special flags (self::USE_KEY)
+	 * @param preg_flags  global PREG_* flags, see preg_match(), 
+	 *                    preg_match_all(), preg_split()
+	 */
+	function __construct(RecursiveIterator $it, $regex, $mode = 0, $flags = 0, $preg_flags = 0) {
+		parent::__construct($it, $regex, $mode, $flags, $preg_flags);
+	}
+
+	/** @return whether the current element has children
+	 */
+	function hasChildren()
+	{
+		return $this->getInnerIterator()->hasChildren();
+	}
+
+	/** @return an iterator for the current elements children
+	 *
+	 * @note the returned iterator will be of the same class as $this
+	 */
+	function getChildren()
+	{
+		if (empty($this->ref))
+		{
+			$this->ref = new ReflectionClass($this);
+		}
+		return $this->ref->newInstance($this->getInnerIterator()->getChildren());
+	}
+	
+	private $ref;
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/regexiterator.inc b/ext/spl/internal/regexiterator.inc
index 05eb4b1..8b4ffe9 100755
--- a/ext/spl/internal/regexiterator.inc
+++ b/ext/spl/internal/regexiterator.inc
@@ -1,163 +1,163 @@
-<?php
-
+<?php
+
 /** @file regexiterator.inc
  * @ingroup SPL
  * @brief class RegexIterator
  * @author  Marcus Boerger
- * @date    2003 - 2006
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Regular expression filter for iterators
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1
- *
- * This filter iterator assumes that the inner iterator 
- */
-class RegexIterator implements FilterIterator
-{
-	const USE_KEY     = 0x00000001; /**< If present in $flags the the key is 
-	                                     used rather then the current value. */
-
-	const MATCH       = 0; /**< Mode: Executed a plain match only      */
-	const GET_MATCH   = 1; /**< Mode: Return the first matche (if any) */
-	const ALL_MATCHES = 2; /**< Mode: Return all matches (if any)      */
-	const SPLIT       = 3; /**< Mode: Return the split values (if any) */
-	const REPLACE     = 4; /**< Mode: Replace the input key or current */
-	
-	private $regex;     /**< the regular expression to match against */
-	private $mode;      /**< operation mode (one of self::MATCH, 
-	                         self::GET_MATCH, self::ALL_MATCHES, self::SPLIT) */
-	private $flags;     /**< special flags (self::USE_KEY) */
-	private $preg_flags;/**< PREG_* flags, see preg_match(), preg_match_all(), 
-	                         preg_split() */ 
-	private $key;       /**< the value used for key() */
-	private $current;   /**< the value used for current() */
-
-	/**
-	 * Constructs a regular expression filter around an iterator whose 
-	 * elemnts or keys are strings.
-	 *
-	 * @param it          inner iterator
-	 * @param regex       the regular expression to match
-	 * @param mode        operation mode (one of self::MATCH, self::GET_MATCH, 
-	 *                    self::ALL_MATCHES, self::SPLIT)
-	 * @param flags       special flags (self::USE_KEY)
-	 * @param preg_flags  global PREG_* flags, see preg_match(), 
-	 *                    preg_match_all(), preg_split()
-	 */
-	function __construct(Iterator $it, $regex, $mode = 0, $flags = 0, $preg_flags = 0) {
-		parent::__construct($it);
-		$this->regex = $regex;
-		$this->flags = $flags;
-		$this->mode = $mode;
-		$this->preg_flags = $preg_flags;
-	}
-
-	/**
-	 * Match current or key against regular expression using mode, flags and
-	 * preg_flags.
-	 *
-	 * @return whether this is a match
-	 *
-	 * @warning never call this twice for the same state
-	 */
-	function accept()
-	{
-		$matches       = array();
-		$this->key     = parent::key();
-		$this->current = parent::current();
-		/* note that we use $this->current, rather than calling parent::current() */
-		$subject = ($this->flags & self::USE_KEY) ? $this->key : $this->current;
-		switch($this->mode)
-		{
-			case self::MATCH:
-				return preg_match($this->regex, $subject, $matches, $this->preg_flags);
-
-			case self::GET_MATCH:
-				$this->current = array();
-				return preg_match($this->regex, $subject, $this->current, $this->preg_flags) > 0;
-
-			case self::ALL_MATCHES:
-				$this->current = array();
-				return preg_match_all($this->regex, $subject, $this->current, $this->preg_flags) > 0;
-
-			case self::SPLIT:
-				$this->current = array();
-				preg_split($this->regex, $subject, $this->current, $this->preg_flags) > 1;
-
-			case self::REPLACE:
-				$this->current = array();
-				$result = preg_replace($this->regex, $this->replacement, $subject);
-				if ($this->flags & self::USE_KEY)
-				{
-					$this->key = $result;
-				}
-				else
-				{
-					$this->current = $result;
-				}
-		}
-	}
-
-	/** @return the key after accept has been called
-	 */
-	function key()
-	{
-		return $this->key;
-	}
-
-	/** @return the current value after accept has been called
-	 */
-	function current()
-	{
-		return $this->current;
-	}
-
-	/** @return current operation mode
-	 */
-	function getMode()
-	{
-		return $this->mode;
-	}
-
-	/** @param mode new operaion mode
-	 */
-	function setMode($mode)
-	{
-		$this->mode = $mode;
-	}
-
-	/** @return current operation flags
-	 */
-	function getFlags()
-	{
-		return $this->flags;
-	}
-
-	/** @param flags new operaion flags
-	 */
-	function setFlags($flags)
-	{
-		$this->flags = $flags;
-	}
-
-	/** @return current PREG flags
-	 */
-	function getPregFlags()
-	{
-		return $this->preg_flags;
-	}
-
-	/** @param preg_flags new PREG flags
-	 */
-	function setPregFlags($preg_flags)
-	{
-		$this->preg_flags = $preg_flags;
-	}
-}
-
-?>
\ No newline at end of file
+/**
+ * @brief   Regular expression filter for iterators
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1
+ *
+ * This filter iterator assumes that the inner iterator 
+ */
+class RegexIterator extends FilterIterator
+{
+	const USE_KEY     = 0x00000001; /**< If present in $flags the the key is 
+	                                     used rather then the current value. */
+
+	const MATCH       = 0; /**< Mode: Executed a plain match only      */
+	const GET_MATCH   = 1; /**< Mode: Return the first matche (if any) */
+	const ALL_MATCHES = 2; /**< Mode: Return all matches (if any)      */
+	const SPLIT       = 3; /**< Mode: Return the split values (if any) */
+	const REPLACE     = 4; /**< Mode: Replace the input key or current */
+	
+	private $regex;     /**< the regular expression to match against */
+	private $mode;      /**< operation mode (one of self::MATCH, 
+	                         self::GET_MATCH, self::ALL_MATCHES, self::SPLIT) */
+	private $flags;     /**< special flags (self::USE_KEY) */
+	private $preg_flags;/**< PREG_* flags, see preg_match(), preg_match_all(), 
+	                         preg_split() */ 
+	private $key;       /**< the value used for key() */
+	private $current;   /**< the value used for current() */
+
+	/**
+	 * Constructs a regular expression filter around an iterator whose 
+	 * elemnts or keys are strings.
+	 *
+	 * @param it          inner iterator
+	 * @param regex       the regular expression to match
+	 * @param mode        operation mode (one of self::MATCH, self::GET_MATCH, 
+	 *                    self::ALL_MATCHES, self::SPLIT)
+	 * @param flags       special flags (self::USE_KEY)
+	 * @param preg_flags  global PREG_* flags, see preg_match(), 
+	 *                    preg_match_all(), preg_split()
+	 */
+	function __construct(Iterator $it, $regex, $mode = 0, $flags = 0, $preg_flags = 0) {
+		parent::__construct($it);
+		$this->regex = $regex;
+		$this->flags = $flags;
+		$this->mode = $mode;
+		$this->preg_flags = $preg_flags;
+	}
+
+	/**
+	 * Match current or key against regular expression using mode, flags and
+	 * preg_flags.
+	 *
+	 * @return whether this is a match
+	 *
+	 * @warning never call this twice for the same state
+	 */
+	function accept()
+	{
+		$matches       = array();
+		$this->key     = parent::key();
+		$this->current = parent::current();
+		/* note that we use $this->current, rather than calling parent::current() */
+		$subject = ($this->flags & self::USE_KEY) ? $this->key : $this->current;
+		switch($this->mode)
+		{
+			case self::MATCH:
+				return preg_match($this->regex, $subject, $matches, $this->preg_flags);
+
+			case self::GET_MATCH:
+				$this->current = array();
+				return preg_match($this->regex, $subject, $this->current, $this->preg_flags) > 0;
+
+			case self::ALL_MATCHES:
+				$this->current = array();
+				return preg_match_all($this->regex, $subject, $this->current, $this->preg_flags) > 0;
+
+			case self::SPLIT:
+				$this->current = array();
+				preg_split($this->regex, $subject, $this->current, $this->preg_flags) > 1;
+
+			case self::REPLACE:
+				$this->current = array();
+				$result = preg_replace($this->regex, $this->replacement, $subject);
+				if ($this->flags & self::USE_KEY)
+				{
+					$this->key = $result;
+				}
+				else
+				{
+					$this->current = $result;
+				}
+		}
+	}
+
+	/** @return the key after accept has been called
+	 */
+	function key()
+	{
+		return $this->key;
+	}
+
+	/** @return the current value after accept has been called
+	 */
+	function current()
+	{
+		return $this->current;
+	}
+
+	/** @return current operation mode
+	 */
+	function getMode()
+	{
+		return $this->mode;
+	}
+
+	/** @param mode new operaion mode
+	 */
+	function setMode($mode)
+	{
+		$this->mode = $mode;
+	}
+
+	/** @return current operation flags
+	 */
+	function getFlags()
+	{
+		return $this->flags;
+	}
+
+	/** @param flags new operaion flags
+	 */
+	function setFlags($flags)
+	{
+		$this->flags = $flags;
+	}
+
+	/** @return current PREG flags
+	 */
+	function getPregFlags()
+	{
+		return $this->preg_flags;
+	}
+
+	/** @param preg_flags new PREG flags
+	 */
+	function setPregFlags($preg_flags)
+	{
+		$this->preg_flags = $preg_flags;
+	}
+}
+
+?>
diff --git a/ext/spl/internal/seekableiterator.inc b/ext/spl/internal/seekableiterator.inc
index 5ab6b9b..b4f66bd 100755
--- a/ext/spl/internal/seekableiterator.inc
+++ b/ext/spl/internal/seekableiterator.inc
@@ -1,48 +1,48 @@
-<?php
-
+<?php
+
 /** @file seekableiterator.inc
  * @ingroup SPL
  * @brief class SeekableIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/** @brief seekable iterator
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.0
- *
- * Turns a normal iterator ino a seekable iterator. When there is a way
- * to seek on an iterator LimitIterator can use this to efficiently rewind
- * to offset.
- */
-interface SeekableIterator extends Iterator
-{
-	/** Seek to an absolute position
-	 *
-	 * \param $index position to seek to
-	 * \return void
-	 *
-	 * The method should throw an exception if it is not possible to seek to 
-	 * the given position. Typically this exception should be of type 
-	 * OutOfBoundsException.
-	 \code
-	function seek($index);
-		$this->rewind();
-		$position = 0;
-		while($position < $index && $this->valid()) {
-			$this->next();
-			$position++;
-		}
-		if (!$this->valid()) {
-			throw new OutOfBoundsException('Invalid seek position');
-		}
-	}
-	 \endcode
-	 */
-	function seek($index);
-}
-
+/** @brief seekable iterator
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.0
+ *
+ * Turns a normal iterator ino a seekable iterator. When there is a way
+ * to seek on an iterator LimitIterator can use this to efficiently rewind
+ * to offset.
+ */
+interface SeekableIterator extends Iterator
+{
+	/** Seek to an absolute position
+	 *
+	 * \param $index position to seek to
+	 * \return void
+	 *
+	 * The method should throw an exception if it is not possible to seek to 
+	 * the given position. Typically this exception should be of type 
+	 * OutOfBoundsException.
+	 \code
+	function seek($index);
+		$this->rewind();
+		$position = 0;
+		while($position < $index && $this->valid()) {
+			$this->next();
+			$position++;
+		}
+		if (!$this->valid()) {
+			throw new OutOfBoundsException('Invalid seek position');
+		}
+	}
+	 \endcode
+	 */
+	function seek($index);
+}
+
 ?>
\ No newline at end of file
diff --git a/ext/spl/internal/splfileobject.inc b/ext/spl/internal/splfileobject.inc
index b78c718..46b941f 100755
--- a/ext/spl/internal/splfileobject.inc
+++ b/ext/spl/internal/splfileobject.inc
@@ -1,377 +1,377 @@
-<?php
-
-/** @file splfileobject.inc
- * @ingroup SPL
- * @brief class FileObject
- * @author  Marcus Boerger
- * @date    2003 - 2006
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup SPL
- * @brief   Object representation for any stream
- * @author  Marcus Boerger
- * @version 1.1
- * @since PHP 5.1
- */
-class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator
-{
-	/** Flag: wheter to suppress new lines */
-	const DROP_NEW_LINE   = 0x00000001;
-
-	private $fp;
-	private $fname;
-	private $line     = NULL;
-	private $lnum     = 0;
-	private $max_len  = 0;
-	private $flags    = 0;
-	private $delimiter= ',';
-	private $enclosure= '"';
-	
-	/**
-	 * Constructs a new file object
-	 * 
-	 * @param $file_name         The name of the stream to open
-	 * @param $open_mode         The file open mode
-	 * @param $use_include_path  Whether to search in include paths
-	 * @param $context           A stream context
-	 * @throw RuntimeException   If file cannot be opened (e.g. insufficient 
-	 *                           access rights).
-	 */
-	function __construct($file_name, $open_mode = 'r', $use_include_path = false, $context = NULL)
-	{
-		$this->fp = fopen($file_name, $open_mode, $use_include_path, $context);
-		if (!$this->fp)
-		{
-			throw new RuntimeException("Cannot open file $file_name");
-		}
-		$this->fname = $file_name;
-	}
-	
-	/**
-	 * @return whether the end of the stream is reached
-	 */
-	function eof()
-	{
-		return eof($this->fp);
-	}
-
-	/** increase current line number
-	 * @return next line from stream
-	 */
-	function fgets()
-	{
-		$this->freeLine();
-		$this->lnum++;
-		$buf = fgets($this->fp, $this->max_len);
-		
-		return $buf;
-	}
-
-	/**
-	 * @param delimiter  character used as field separator
-	 * @param enclosure  end of 
-	 * @return array containing read data
-	 */
-	function fgetcsv($delimiter = NULL, $enclosure = NULL)
-	{
-		$this->freeLine();
-		$this->lnum++;
-		switch(fun_num_args())
-		{
-			case 0:
-				$delimiter = $this->delimiter;
-			case 1:
-				$enclosure = $this->enclosure;
-			default:
-			case 2:
-				break;
-		}
-		return fgetcsv($this->fp, $this->max_len, $delimiter, $enclosure); 
-	}
-
-	/**
-	 * Set the delimiter and enclosure character used in fgetcsv
-	 *
-	 * @param delimiter new delimiter, defaults to ','
-	 * @param enclosure new enclosure, defaults to '"'
-	 */
-	function setCsvControl($delimiter = ';', $enclosure = '"')
-	{
-		$this->delimiter = $delimiter;
-		$this->enclosure = $enclosure;
-	}
-
-	/**
-	 * @return array(delimiter, enclosure) as used in fgetcsv
-	 */
-	function getCsvControl($delimiter = ',', $enclosure = '"')
-	{
-		return array($this->delimiter, $this->enclosure);
-	}
-
-	/**
-	 * @param operation lock operation (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB)
-	 * @retval $wouldblock  whether the operation would block
-	 */
-	function flock($operation, &$wouldblock)
-	{
-		return flock($this->fp, $operation, $wouldblock);
-	}
-
-	/**
-	 * Flush current data
-	 * @return success or failure
-	 */
-	function fflush()
-	{
-		return fflush($this->fp);
-	}
-
-	/**
-	 * @return current file position
-	 */
-	function ftell()
-	{
-		return ftell($this->fp);
-	}
-
-	/**
-	 * @param pos new file position
-	 * @param whence seek method (SEEK_SET, SEEK_CUR, SEEK_END)
-	 * @return Upon success, returns 0; otherwise, returns -1. Note that 
-	 *         seeking past EOF is not considered an error.
-	 */
-	function fseek($pos, $whence = SEEK_SET)
-	{
-		return fseek($this->fp, $pos, $whence);
-	}
-
-	/**
-	 * @return next char from file
-	 * @note a new line character does not increase $this->lnum
-	 */
-	function fgetc()
-	{
-		$this->freeLine();
-		$c = fgetc($this->fp);
-		if ($c == '\n') {
-			$this->lnum++;
-		}
-	}
-
-	/** Read and return remaining part of stream
-	 * @return size of remaining part passed through
-	 */
-	function fpassthru()
-	{
-		return fpassthru($this->fp);
-	}
-
-	/** Get a line from the file and strip HTML tags
-	 * @param $allowable_tags tags to keep in the string
-	 */
-	function fgetss($allowable_tags = NULL)
-	{
-		return fgetss($this->fp, $allowable_tags);
-	}
-
-	/** Scan the next line
-	 * @param $format string specifying format to parse
-	 */	
-	function fscanf($format /* , ... */)
-	{
-		$this->freeLine();
-		$this->lnum++;
-		return fscanf($this->fp, $format /* , ... */);
-	}
-
-	/**
-	 * @param $str to write
-	 * @param $length maximum line length to write
-	 */
-	function fwrite($str, $length = NULL)
-	{
-		return fwrite($this->fp, $length);
-	}
-
-	/**
-	 * @return array of file stat information
-	 */
-	function fstat()
-	{
-		return fstat($this->fp);
-	}
-
-	/**
-	 * @param $size new size to truncate file to
-	 */
-	function ftruncate($size)
-	{
-		return ftruncate($this->fp, $size);
-	}
-
-	/**
-	 * @param $flags new flag set
-	 */
-	function setFlags($flags)
-	{
-		$this->flags = $flags;
-	}
-
-	/**
-	 *  @return current set of flags
-	 */
-	function getFlags()
-	{
-		return $this->flags;
-	}
-
-	/**
-	 * @param $max_len set the maximum line length read
-	 */
-	function setMaxLineLen($max_len)
-	{
-		$this->max_len = $max_len;
-	}
-
-	/**
-	 * @return current setting for max line
-	 */
-	function getMaxLineLen()
-	{
-		return $this->max_len;
-	}
-
-	/**
-	 * @return false
-	 */
-	function hasChildren()
-	{
-		return false;
-	}
-
-	/**
-	 * @return false
-	 */
-	function getChildren()
-	{
-		return NULL;
-	}
-
-	/**
-	 * Invalidate current line buffer and set line number to 0.
-	 */
-	function rewind()
-	{
-		$this->freeLine();
-		$this->lnum = 0;
-	}
-
-	/**
-	 * @return whether more data can be read
-	 */
-	function valid()
-	{
-		return !$this->eof();
-	}
-	
-	/**
-	 * @note Fill current line buffer if not done yet.
-	 * @return line buffer 
-	 */	
-	function current()
-	{
-		if (is_null($this->line))
-		{
-			$this->line = getCurrentLine();
-		}
-		return $this->line;
-	}
-
-	/**
-	 * @return line number 
-	 * @note fgetc() will increase the line number when reaing a new line char.
-	 *       This has the effect key() called on a read a new line will already
-	 *       return the increased line number.
-	 * @note Line counting works as long as you only read the file and do not
-	 *       use fseek().
-	 */	
-	function key()
-	{
-		return $this->lnum;
-	}
-
-	/** Invalidate current line buffer.
-	 */	
-	function next()
-	{
-		$this->freeLine();
-	}
-
-	/**
-	 * @return next line read from file and increase the line counter
-	 */
-	private function readLine()
-	{
-		if ($this->eof())
-		{
-			$this->freeLine();
-			throw new RuntimeException("Cannot read from file " . $this->fname);
-		}
-		if ($this->line) {
-			$this->lnum++;
-		}
-		$this->freeLine();
-		$this->line = fgets($this->fp, $this->max_len);
-		return $this->line;
-	}
-
-	/**
-	 * Free the current line buffer and increment the line counter
-	 */
-	private function freeLine()
-	{
-		if ($this->line) {
-			$this->line = NULL;
-		}
-	}
-
-	/*
-	 * @note If you DO overload this function key() and current() will increment
-	 *       $this->lnum automatically. If not then function reaLine() will do
-	 *       that for you.
-	 */ 
-	function getCurrentLine()
-	{
-		$this->freeLine();
-		if ($this->eof())
-		{
-			throw new RuntimeException("Cannot read from file " . $this->fname);
-		}
-		$this->readLine();
-	}
-
-	/**
-	 * @return current line
-	 */
-	function __toString()
-	{
-		return current();
-	}
-
-	/**
-	 * @param $line_pos Seek to this line
-	 */	
-	function seek($line_pos)
-	{
-		$this->rewind();
-		while($this->lnum < $line_pos && !$this->eof())
-		{
-			$this->getCurrentLine();
-		}
-	}
-}
-
-?>
+<?php
+
+/** @file splfileobject.inc
+ * @ingroup SPL
+ * @brief class FileObject
+ * @author  Marcus Boerger
+ * @date    2003 - 2009
+ *
+ * SPL - Standard PHP Library
+ */
+
+/** @ingroup SPL
+ * @brief   Object representation for any stream
+ * @author  Marcus Boerger
+ * @version 1.1
+ * @since PHP 5.1
+ */
+class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator
+{
+	/** Flag: wheter to suppress new lines */
+	const DROP_NEW_LINE   = 0x00000001;
+
+	private $fp;
+	private $fname;
+	private $line     = NULL;
+	private $lnum     = 0;
+	private $max_len  = 0;
+	private $flags    = 0;
+	private $delimiter= ',';
+	private $enclosure= '"';
+	
+	/**
+	 * Constructs a new file object
+	 * 
+	 * @param $file_name         The name of the stream to open
+	 * @param $open_mode         The file open mode
+	 * @param $use_include_path  Whether to search in include paths
+	 * @param $context           A stream context
+	 * @throw RuntimeException   If file cannot be opened (e.g. insufficient 
+	 *                           access rights).
+	 */
+	function __construct($file_name, $open_mode = 'r', $use_include_path = false, $context = NULL)
+	{
+		$this->fp = fopen($file_name, $open_mode, $use_include_path, $context);
+		if (!$this->fp)
+		{
+			throw new RuntimeException("Cannot open file $file_name");
+		}
+		$this->fname = $file_name;
+	}
+	
+	/**
+	 * @return whether the end of the stream is reached
+	 */
+	function eof()
+	{
+		return eof($this->fp);
+	}
+
+	/** increase current line number
+	 * @return next line from stream
+	 */
+	function fgets()
+	{
+		$this->freeLine();
+		$this->lnum++;
+		$buf = fgets($this->fp, $this->max_len);
+		
+		return $buf;
+	}
+
+	/**
+	 * @param delimiter  character used as field separator
+	 * @param enclosure  end of 
+	 * @return array containing read data
+	 */
+	function fgetcsv($delimiter = NULL, $enclosure = NULL)
+	{
+		$this->freeLine();
+		$this->lnum++;
+		switch(fun_num_args())
+		{
+			case 0:
+				$delimiter = $this->delimiter;
+			case 1:
+				$enclosure = $this->enclosure;
+			default:
+			case 2:
+				break;
+		}
+		return fgetcsv($this->fp, $this->max_len, $delimiter, $enclosure); 
+	}
+
+	/**
+	 * Set the delimiter and enclosure character used in fgetcsv
+	 *
+	 * @param delimiter new delimiter, defaults to ','
+	 * @param enclosure new enclosure, defaults to '"'
+	 */
+	function setCsvControl($delimiter = ';', $enclosure = '"')
+	{
+		$this->delimiter = $delimiter;
+		$this->enclosure = $enclosure;
+	}
+
+	/**
+	 * @return array(delimiter, enclosure) as used in fgetcsv
+	 */
+	function getCsvControl($delimiter = ',', $enclosure = '"')
+	{
+		return array($this->delimiter, $this->enclosure);
+	}
+
+	/**
+	 * @param operation lock operation (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB)
+	 * @retval $wouldblock  whether the operation would block
+	 */
+	function flock($operation, &$wouldblock)
+	{
+		return flock($this->fp, $operation, $wouldblock);
+	}
+
+	/**
+	 * Flush current data
+	 * @return success or failure
+	 */
+	function fflush()
+	{
+		return fflush($this->fp);
+	}
+
+	/**
+	 * @return current file position
+	 */
+	function ftell()
+	{
+		return ftell($this->fp);
+	}
+
+	/**
+	 * @param pos new file position
+	 * @param whence seek method (SEEK_SET, SEEK_CUR, SEEK_END)
+	 * @return Upon success, returns 0; otherwise, returns -1. Note that 
+	 *         seeking past EOF is not considered an error.
+	 */
+	function fseek($pos, $whence = SEEK_SET)
+	{
+		return fseek($this->fp, $pos, $whence);
+	}
+
+	/**
+	 * @return next char from file
+	 * @note a new line character does not increase $this->lnum
+	 */
+	function fgetc()
+	{
+		$this->freeLine();
+		$c = fgetc($this->fp);
+		if ($c == '\n') {
+			$this->lnum++;
+		}
+	}
+
+	/** Read and return remaining part of stream
+	 * @return size of remaining part passed through
+	 */
+	function fpassthru()
+	{
+		return fpassthru($this->fp);
+	}
+
+	/** Get a line from the file and strip HTML tags
+	 * @param $allowable_tags tags to keep in the string
+	 */
+	function fgetss($allowable_tags = NULL)
+	{
+		return fgetss($this->fp, $allowable_tags);
+	}
+
+	/** Scan the next line
+	 * @param $format string specifying format to parse
+	 */	
+	function fscanf($format /* , ... */)
+	{
+		$this->freeLine();
+		$this->lnum++;
+		return fscanf($this->fp, $format /* , ... */);
+	}
+
+	/**
+	 * @param $str to write
+	 * @param $length maximum line length to write
+	 */
+	function fwrite($str, $length = NULL)
+	{
+		return fwrite($this->fp, $length);
+	}
+
+	/**
+	 * @return array of file stat information
+	 */
+	function fstat()
+	{
+		return fstat($this->fp);
+	}
+
+	/**
+	 * @param $size new size to truncate file to
+	 */
+	function ftruncate($size)
+	{
+		return ftruncate($this->fp, $size);
+	}
+
+	/**
+	 * @param $flags new flag set
+	 */
+	function setFlags($flags)
+	{
+		$this->flags = $flags;
+	}
+
+	/**
+	 *  @return current set of flags
+	 */
+	function getFlags()
+	{
+		return $this->flags;
+	}
+
+	/**
+	 * @param $max_len set the maximum line length read
+	 */
+	function setMaxLineLen($max_len)
+	{
+		$this->max_len = $max_len;
+	}
+
+	/**
+	 * @return current setting for max line
+	 */
+	function getMaxLineLen()
+	{
+		return $this->max_len;
+	}
+
+	/**
+	 * @return false
+	 */
+	function hasChildren()
+	{
+		return false;
+	}
+
+	/**
+	 * @return false
+	 */
+	function getChildren()
+	{
+		return NULL;
+	}
+
+	/**
+	 * Invalidate current line buffer and set line number to 0.
+	 */
+	function rewind()
+	{
+		$this->freeLine();
+		$this->lnum = 0;
+	}
+
+	/**
+	 * @return whether more data can be read
+	 */
+	function valid()
+	{
+		return !$this->eof();
+	}
+	
+	/**
+	 * @note Fill current line buffer if not done yet.
+	 * @return line buffer 
+	 */	
+	function current()
+	{
+		if (is_null($this->line))
+		{
+			$this->line = getCurrentLine();
+		}
+		return $this->line;
+	}
+
+	/**
+	 * @return line number 
+	 * @note fgetc() will increase the line number when reaing a new line char.
+	 *       This has the effect key() called on a read a new line will already
+	 *       return the increased line number.
+	 * @note Line counting works as long as you only read the file and do not
+	 *       use fseek().
+	 */	
+	function key()
+	{
+		return $this->lnum;
+	}
+
+	/** Invalidate current line buffer.
+	 */	
+	function next()
+	{
+		$this->freeLine();
+	}
+
+	/**
+	 * @return next line read from file and increase the line counter
+	 */
+	private function readLine()
+	{
+		if ($this->eof())
+		{
+			$this->freeLine();
+			throw new RuntimeException("Cannot read from file " . $this->fname);
+		}
+		if ($this->line) {
+			$this->lnum++;
+		}
+		$this->freeLine();
+		$this->line = fgets($this->fp, $this->max_len);
+		return $this->line;
+	}
+
+	/**
+	 * Free the current line buffer and increment the line counter
+	 */
+	private function freeLine()
+	{
+		if ($this->line) {
+			$this->line = NULL;
+		}
+	}
+
+	/*
+	 * @note If you DO overload this function key() and current() will increment
+	 *       $this->lnum automatically. If not then function reaLine() will do
+	 *       that for you.
+	 */ 
+	function getCurrentLine()
+	{
+		$this->freeLine();
+		if ($this->eof())
+		{
+			throw new RuntimeException("Cannot read from file " . $this->fname);
+		}
+		$this->readLine();
+	}
+
+	/**
+	 * @return current line
+	 */
+	function __toString()
+	{
+		return current();
+	}
+
+	/**
+	 * @param $line_pos Seek to this line
+	 */	
+	function seek($line_pos)
+	{
+		$this->rewind();
+		while($this->lnum < $line_pos && !$this->eof())
+		{
+			$this->getCurrentLine();
+		}
+	}
+}
+
+?>
diff --git a/ext/spl/internal/splobjectstorage.inc b/ext/spl/internal/splobjectstorage.inc
index a6adafb..d5f1725 100755
--- a/ext/spl/internal/splobjectstorage.inc
+++ b/ext/spl/internal/splobjectstorage.inc
@@ -1,118 +1,118 @@
-<?php
-
+<?php
+
 /** @file splobjectstorage.inc
  * @ingroup SPL
  * @brief class SplObjectStorage
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2009
  *
  * SPL - Standard PHP Library
  */
 
-/**
- * @brief   Object storage
- * @author  Marcus Boerger
- * @version 1.0
- * @since PHP 5.1.2
- *
- * This container allows to store objects uniquly without the need to compare
- * them one by one. This is only possible internally. The code represenation
- * here therefore has a complexity of O(n) while the actual implementation has
- * complexity O(1).
- */
-class SplObjectStorage implements Iterator, Countable
-{
-	private $storage = array();
-	private $index = 0;
-
-	/** Rewind to top iterator as set in constructor
-	 */
-	function rewind()
-	{
-		rewind($this->storage);
-	}
-	
-	/** @return whether iterator is valid
-	 */
-	function valid()
-	{
-		return key($this->storage) !== false;
-	}
-	
-	/** @return current key
-	 */
-	function key()
-	{
-		return $this->index;
-	}
-	
-	/** @return current object
-	 */
-	function current()
-	{
-		return current($this->storage);
-	}
-	
-	/** Forward to next element
-	 */
-	function next()
-	{
-		next($this->storage);
-		$this->index++;
-	}
-
-	/** @return number of objects in storage
-	 */
-	function count()
-	{
-		return count($this->storage);
-	}
-
-	/** @param obj object to look for
-	 * @return whether $obj is contained in storage
-	  */
-	function contains($obj)
-	{
-		if (is_object($obj))
-		{
-			foreach($this->storage as $object)
-			{
-				if ($object === $obj)
-				{
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-
-	/** @param $obj new object to attach to storage if not yet contained
-	 */
-	function attach($obj)
-	{
-		if (is_object($obj) && !$this->contains($obj))
-		{
-			$this->storage[] = $obj;
-		}
-	}
-
-	/** @param $obj object to remove from storage
-	 */
-	function detach($obj)
-	{
-		if (is_object($obj))
-		{
-			foreach($this->storage as $idx => $object)
-			{
-				if ($object === $obj)
-				{
-					unset($this->storage[$idx]);
-					$this->rewind();
-					return;
-				}
-			}
-		}
-	}
-}
-
+/**
+ * @brief   Object storage
+ * @author  Marcus Boerger
+ * @version 1.0
+ * @since PHP 5.1.2
+ *
+ * This container allows to store objects uniquly without the need to compare
+ * them one by one. This is only possible internally. The code represenation
+ * here therefore has a complexity of O(n) while the actual implementation has
+ * complexity O(1).
+ */
+class SplObjectStorage implements Iterator, Countable
+{
+	private $storage = array();
+	private $index = 0;
+
+	/** Rewind to top iterator as set in constructor
+	 */
+	function rewind()
+	{
+		rewind($this->storage);
+	}
+	
+	/** @return whether iterator is valid
+	 */
+	function valid()
+	{
+		return key($this->storage) !== false;
+	}
+	
+	/** @return current key
+	 */
+	function key()
+	{
+		return $this->index;
+	}
+	
+	/** @return current object
+	 */
+	function current()
+	{
+		return current($this->storage);
+	}
+	
+	/** Forward to next element
+	 */
+	function next()
+	{
+		next($this->storage);
+		$this->index++;
+	}
+
+	/** @return number of objects in storage
+	 */
+	function count()
+	{
+		return count($this->storage);
+	}
+
+	/** @param obj object to look for
+	 * @return whether $obj is contained in storage
+	  */
+	function contains($obj)
+	{
+		if (is_object($obj))
+		{
+			foreach($this->storage as $object)
+			{
+				if ($object === $obj)
+				{
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/** @param $obj new object to attach to storage if not yet contained
+	 */
+	function attach($obj)
+	{
+		if (is_object($obj) && !$this->contains($obj))
+		{
+			$this->storage[] = $obj;
+		}
+	}
+
+	/** @param $obj object to remove from storage
+	 */
+	function detach($obj)
+	{
+		if (is_object($obj))
+		{
+			foreach($this->storage as $idx => $object)
+			{
+				if ($object === $obj)
+				{
+					unset($this->storage[$idx]);
+					$this->rewind();
+					return;
+				}
+			}
+		}
+	}
+}
+
 ?>
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index 49016c9..eb93552 100755
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_spl.c,v 1.52.2.28.2.20 2008/12/31 11:17:43 sebastian Exp $ */
+/* $Id: php_spl.c,v 1.52.2.28.2.21 2009/06/13 17:35:37 cellog Exp $ */
 
 #ifdef HAVE_CONFIG_H
 	#include "config.h"
@@ -464,6 +464,7 @@ PHP_FUNCTION(spl_autoload_register)
 
 		if (obj_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) {
 			/* add object id to the hash to ensure uniqueness, for more reference look at bug #40091 */
+			lc_name = erealloc(lc_name, func_name_len + 2 + sizeof(zend_object_handle));
 			memcpy(lc_name + func_name_len, &Z_OBJ_HANDLE_PP(obj_ptr), sizeof(zend_object_handle));
 			func_name_len += sizeof(zend_object_handle);
 			lc_name[func_name_len] = '\0';
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index d4827dc..d1fc0a2 100755
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_array.c,v 1.71.2.17.2.22 2008/12/31 11:17:44 sebastian Exp $ */
+/* $Id: spl_array.c,v 1.71.2.17.2.25 2009/05/21 13:26:29 lbarnaud Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -82,6 +82,8 @@ static inline HashTable *spl_array_get_hash_table(spl_array_object* intern, int
 	}
 }
 
+static void spl_array_rewind(spl_array_object *intern TSRMLS_DC);
+
 SPL_API int spl_hash_verify_pos(spl_array_object * intern TSRMLS_DC) /* {{{ */
 {
 	HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
@@ -98,7 +100,7 @@ SPL_API int spl_hash_verify_pos(spl_array_object * intern TSRMLS_DC) /* {{{ */
 		p = p->pListNext;
 	}
 /*	HASH_UNPROTECT_RECURSION(ht); */
-	zend_hash_internal_pointer_reset_ex(spl_array_get_hash_table(intern, 0 TSRMLS_CC), &intern->pos);
+	spl_array_rewind(intern TSRMLS_CC);
 	return FAILURE;
 }
 /* }}} */
@@ -218,7 +220,7 @@ static zend_object_value spl_array_object_new_ex(zend_class_entry *class_type, s
 		}
 	}
 
-	zend_hash_internal_pointer_reset_ex(spl_array_get_hash_table(intern, 0 TSRMLS_CC), &intern->pos);
+	spl_array_rewind(intern TSRMLS_CC);
 	return retval;
 }
 /* }}} */
@@ -669,16 +671,13 @@ static int spl_array_has_property(zval *object, zval *member, int has_set_exists
 {
 	spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
 
-	if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0) {
-		if (!std_object_handlers.has_property(object, member, 2 TSRMLS_CC)) {
-			return spl_array_has_dimension(object, member, has_set_exists TSRMLS_CC);
-		}
-		return 0; /* if prop doesn't exist at all mode 0/1 cannot return 1 */
+	if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
+	&& !std_object_handlers.has_property(object, member, 2 TSRMLS_CC)) {
+		return spl_array_has_dimension(object, member, has_set_exists TSRMLS_CC);
 	}
 	return std_object_handlers.has_property(object, member, has_set_exists TSRMLS_CC);
-} /* }}} */
 
-static void spl_array_rewind(spl_array_object *intern TSRMLS_DC);
+} /* }}} */
 
 static void spl_array_unset_property(zval *object, zval *member TSRMLS_DC) /* {{{ */
 {
@@ -1126,7 +1125,7 @@ SPL_METHOD(Array, seek)
 	opos = position;
 
 	if (position >= 0) { /* negative values are not supported */
-		zend_hash_internal_pointer_reset_ex(aht, &intern->pos);
+		spl_array_rewind(intern TSRMLS_CC);
 		result = SUCCESS;
 		
 		while (position-- > 0 && (result = spl_array_next(intern TSRMLS_CC)) == SUCCESS);
@@ -1155,7 +1154,7 @@ int spl_array_object_count_elements(zval *object, long *count TSRMLS_DC) /* {{{
 		 * we're going to call and which do not support 'pos' as parameter. */
 		pos = intern->pos;
 		*count = 0;
-		zend_hash_internal_pointer_reset_ex(aht, &intern->pos);
+		spl_array_rewind(intern TSRMLS_CC);
 		while(intern->pos && spl_array_next(intern TSRMLS_CC) == SUCCESS) {
 			(*count)++;
 		}
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 29b8336..5cf5a82 100755
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.73.2.30.2.35 2009/01/20 00:47:01 felipe Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.36 2009/05/09 19:48:15 scottmac Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -536,7 +536,9 @@ SPL_METHOD(RecursiveIteratorIterator, current)
 	zval                      **data;
 
 	iterator->funcs->get_current_data(iterator, &data TSRMLS_CC);
-	RETURN_ZVAL(*data, 1, 0);
+	if (data && *data) {
+		RETURN_ZVAL(*data, 1, 0);
+	}
 } /* }}} */
 
 /* {{{ proto void RecursiveIteratorIterator::next()
@@ -2400,7 +2402,9 @@ SPL_METHOD(NoRewindIterator, current)
 
 	intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
 	intern->inner.iterator->funcs->get_current_data(intern->inner.iterator, &data TSRMLS_CC);
-	RETURN_ZVAL(*data, 1, 0);
+	if (data && *data) {
+		RETURN_ZVAL(*data, 1, 0);
+	}
 } /* }}} */
 
 /* {{{ proto void NoRewindIterator::next()
@@ -2714,6 +2718,9 @@ static int spl_iterator_to_array_apply(zend_object_iterator *iter, void *puser T
 	if (EG(exception)) {
 		return ZEND_HASH_APPLY_STOP;
 	}
+	if (data == NULL || *data == NULL) {
+		return ZEND_HASH_APPLY_STOP;
+	}
 	if (iter->funcs->get_current_key) {
 		key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC);
 		if (EG(exception)) {
@@ -2745,6 +2752,9 @@ static int spl_iterator_to_values_apply(zend_object_iterator *iter, void *puser
 	if (EG(exception)) {
 		return ZEND_HASH_APPLY_STOP;
 	}
+	if (data == NULL || *data == NULL) {
+		return ZEND_HASH_APPLY_STOP;
+	}
 	(*data)->refcount++;
 	add_next_index_zval(return_value, *data);
 	return ZEND_HASH_APPLY_KEEP;
diff --git a/ext/spl/tests/SplFileObject_fflush_basic_001.phpt b/ext/spl/tests/SplFileObject_fflush_basic_001.phpt
new file mode 100644
index 0000000..baab156
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fflush_basic_001.phpt
@@ -0,0 +1,35 @@
+--TEST--
+SplFileObject::fflush function - basic test 
+--FILE--
+<?php
+/*
+ * test a successful flush
+*/
+$obj = New SplFileObject(dirname(__FILE__).'/SplFileObject_testinput.csv');
+var_dump($obj->fflush());
+
+/*
+ * test a unsuccessful flush
+*/
+//create a basic stream class
+class VariableStream {
+    var $position;
+    var $varname;
+
+    function stream_open($path, $mode, $options, &$opened_path)
+    {  
+        return true;
+    }
+}
+stream_wrapper_register("SPLtest", "VariableStream");
+$ftruncate_test = "";
+//end creating stream
+
+//open an SplFileObject using the above test stream
+$obj = New SplFileObject("SPLtest://ftruncate_test");
+var_dump($obj->fflush());
+
+?>
+--EXPECTF--
+bool(true)
+bool(false)
diff --git a/ext/spl/tests/SplFileObject_fpassthru_basic.phpt b/ext/spl/tests/SplFileObject_fpassthru_basic.phpt
new file mode 100644
index 0000000..55b7481
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fpassthru_basic.phpt
@@ -0,0 +1,13 @@
+--TEST--
+SplFileObject::fpassthru function - basic functionality test 
+--FILE--
+<?php
+$obj = New SplFileObject(dirname(__FILE__).'/SplFileObject_testinput.csv');
+$obj->fpassthru();
+?>
+--EXPECT--
+first,second,third
+1,2,3
+4,5,6
+7,8,9
+0,0,0
diff --git a/ext/spl/tests/SplFileObject_fscanf_basic.phpt b/ext/spl/tests/SplFileObject_fscanf_basic.phpt
new file mode 100644
index 0000000..5279039
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fscanf_basic.phpt
@@ -0,0 +1,12 @@
+--TEST--
+SplFileObject::fscanf function - basic functionality test 
+--FILE--
+<?php
+$obj = New SplFileObject(dirname(__FILE__).'/SplFileObject_testinput.csv');
+var_dump($obj->fscanf('%s'));
+?>
+--EXPECT--
+array(1) {
+  [0]=>
+  string(18) "first,second,third"
+}
diff --git a/ext/spl/tests/SplFileObject_fseek_error_001.phpt b/ext/spl/tests/SplFileObject_fseek_error_001.phpt
new file mode 100644
index 0000000..0efeb98
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fseek_error_001.phpt
@@ -0,0 +1,12 @@
+--TEST--
+SplFileObject::fseek function - parameters test
+--FILE--
+<?php
+$obj = New SplFileObject(__FILE__);
+$obj->fseek(1,2,3);
+$obj->fseek();
+?>
+--EXPECTF--
+Warning: SplFileObject::fseek() expects at most 2 parameters, 3 given %s
+
+Warning: SplFileObject::fseek() expects at least 1 parameter, 0 given %s
diff --git a/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt b/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt
new file mode 100644
index 0000000..90b27ec
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt
@@ -0,0 +1,29 @@
+--TEST--
+SplFileObject::ftruncate function - truncating with stream that does not support truncation 
+--FILE--
+<?php
+
+//create a basic stream class
+class VariableStream {
+    var $position;
+    var $varname;
+
+    function stream_open($path, $mode, $options, &$opened_path)
+    {
+        return true;
+    }
+}
+stream_wrapper_register("SPLtest", "VariableStream");
+$ftruncate_test = "";
+//end creating stream
+
+//open an SplFileObject using the above test stream
+$obj = New SplFileObject("SPLtest://ftruncate_test"); 
+try {
+	$obj->ftruncate(1);
+} catch (LogicException $e) {
+	echo($e->getMessage());
+}
+?>
+--EXPECTF--
+Can't truncate file %s
diff --git a/ext/spl/tests/SplFileObject_fwrite_error_001.phpt b/ext/spl/tests/SplFileObject_fwrite_error_001.phpt
new file mode 100644
index 0000000..296a1f3
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fwrite_error_001.phpt
@@ -0,0 +1,12 @@
+--TEST--
+SplFileObject::fpassthru function - parameters test 
+--FILE--
+<?php
+$obj = New SplFileObject(dirname(__FILE__).'/SplFileObject_testinput.csv');
+$obj->fwrite();
+$obj->fwrite('6,6,6',25,null);
+?>
+--EXPECTF--
+Warning: SplFileObject::fwrite() expects at least 1 parameter, 0 given in %s
+
+Warning: SplFileObject::fwrite() expects at most 2 parameters, 3 given in %s
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
new file mode 100644
index 0000000..f8d518f
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
@@ -0,0 +1,17 @@
+--TEST--
+SplFileObject::fwrite function - writing with two parameters length < input string length
+--FILE--
+<?php
+$file = dirname(__FILE__).'/SplFileObject_fwrite_variation_001.txt';
+if(file_exists($file)) {
+	unlink($file);
+}
+$obj = New SplFileObject($file,'w');
+$obj->fwrite('test_write',4);
+var_dump(file_get_contents($file));
+if(file_exists($file)) {
+	unlink($file);
+}
+?>
+--EXPECT--
+string(4) "test"
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
new file mode 100644
index 0000000..47b1332
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
@@ -0,0 +1,17 @@
+--TEST--
+SplFileObject::fwrite function - writing with two parameters, length > input string length
+--FILE--
+<?php
+$file = dirname(__FILE__).'/SplFileObject_fwrite_variation_002.txt';
+if(file_exists($file)) {
+	unlink($file);
+}
+$obj = New SplFileObject($file,'w');
+$obj->fwrite('test_write',12);
+var_dump(file_get_contents($file));
+if(file_exists($file)) {
+	unlink($file);
+}
+?>
+--EXPECT--
+string(10) "test_write"
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt
new file mode 100644
index 0000000..8e5c88e
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_003.phpt
@@ -0,0 +1,18 @@
+--TEST--
+SplFileObject::fwrite function - writing with magic_quotes_runtime ini set 
+--FILE--
+<?php
+ini_set('magic_quotes_runtime',true);
+$file = dirname(__FILE__).'/SplFileObject_fwrite_variation_002.txt';
+if(file_exists($file)) {
+	unlink($file);
+}
+$obj = New SplFileObject($file,'w');
+$obj->fwrite('"test" \'write\'');
+var_dump(file_get_contents($file));
+if(file_exists($file)) {
+	unlink($file);
+}
+?>
+--EXPECT--
+string(18) "\"test\" \'write\'"
diff --git a/ext/spl/tests/SplFileObject_getCsvControl_basic_001.phpt b/ext/spl/tests/SplFileObject_getCsvControl_basic_001.phpt
new file mode 100644
index 0000000..e21f08f
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_getCsvControl_basic_001.phpt
@@ -0,0 +1,15 @@
+--TEST--
+SplFileObject::getCsvControl function - basic test 
+--FILE--
+<?php
+$obj = New SplFileObject(dirname(__FILE__).'/SplFileObject_testinput.csv');
+var_dump($obj->getCsvControl());
+
+?>
+--EXPECTF--
+array(2) {
+  [0]=>
+  %unicode|string%(1) ","
+  [1]=>
+  %unicode|string%(1) """
+}
diff --git a/ext/spl/tests/SplFileObject_seek_error_001.phpt b/ext/spl/tests/SplFileObject_seek_error_001.phpt
new file mode 100644
index 0000000..bcf44b0
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_seek_error_001.phpt
@@ -0,0 +1,19 @@
+--TEST--
+SplFileObject::seek function - test parameters
+--FILE--
+<?php
+$obj = New SplFileObject(__FILE__);
+$obj->seek(1,2);
+$obj->seek();
+try {
+	$obj->seek(-1);
+} catch (LogicException $e) {
+	echo($e->getMessage());
+}
+?>
+--EXPECTF--
+
+Warning: SplFileObject::seek() expects exactly 1 parameter, 2 given in %s
+
+Warning: SplFileObject::seek() expects exactly 1 parameter, 0 given in %s
+Can't seek file %s to negative line %s
diff --git a/ext/spl/tests/SplFileObject_testinput.csv b/ext/spl/tests/SplFileObject_testinput.csv
new file mode 100644
index 0000000..41a9e31
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_testinput.csv
@@ -0,0 +1,5 @@
+first,second,third
+1,2,3
+4,5,6
+7,8,9
+0,0,0
diff --git a/ext/spl/tests/arrayObject___construct_basic4.phpt b/ext/spl/tests/arrayObject___construct_basic4.phpt
index bf7c355..be63b4d 100644
--- a/ext/spl/tests/arrayObject___construct_basic4.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic4.phpt
@@ -1,7 +1,5 @@
 --TEST--
 SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS. 
---XFAIL--
-Will fail until the fix to bug 45622 is backported from PHP53 to PHP52.
 --FILE--
 <?php
 class C {
diff --git a/ext/spl/tests/arrayObject___construct_basic5.phpt b/ext/spl/tests/arrayObject___construct_basic5.phpt
index 0254b70..3e69c6d 100644
--- a/ext/spl/tests/arrayObject___construct_basic5.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic5.phpt
@@ -1,7 +1,5 @@
 --TEST--
 SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS.
---XFAIL--
-Will fail unless the PHP53 fix to bug 45622 is backported to PHP52
 --FILE--
 <?php
 class C {
diff --git a/ext/spl/tests/arrayObject_magicMethods6.phpt b/ext/spl/tests/arrayObject_magicMethods6.phpt
index 3b3fff8..adb60ef 100644
--- a/ext/spl/tests/arrayObject_magicMethods6.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods6.phpt
@@ -183,4 +183,4 @@ object(UsesMagic)#%d (3) {
   int(3)
   ["priv:private"]=>
   string(6) "secret"
-}
\ No newline at end of file
+}
diff --git a/ext/spl/tests/arrayObject_setFlags_basic1.phpt b/ext/spl/tests/arrayObject_setFlags_basic1.phpt
index e420b04..4e76e39 100644
--- a/ext/spl/tests/arrayObject_setFlags_basic1.phpt
+++ b/ext/spl/tests/arrayObject_setFlags_basic1.phpt
@@ -1,7 +1,5 @@
 --TEST--
 SPL: ArrayObject::setFlags basic usage with ArrayObject::ARRAY_AS_PROPS. 
---XFAIL--
-Currently fails on php.net due to bug 45622.
 --FILE--
 <?php
 class C extends ArrayObject {
diff --git a/ext/spl/tests/bug38325.phpt b/ext/spl/tests/bug38325.phpt
index 126e1f3..a0d3d4a 100644
--- a/ext/spl/tests/bug38325.phpt
+++ b/ext/spl/tests/bug38325.phpt
@@ -5,7 +5,7 @@ Bug #38325 (spl_autoload_register() gaves wrong line for "class not found")
 --FILE--
 <?php
 spl_autoload_register();
-new Foo();
+new ThisClassDoesNotExistEverFoo();
 ?>
 --EXPECTF--
-Fatal error: spl_autoload(): Class Foo could not be loaded in %s on line 3
+Fatal error: spl_autoload(): Class ThisClassDoesNotExistEverFoo could not be loaded in %s on line 3
diff --git a/ext/spl/tests/bug45614.phpt b/ext/spl/tests/bug45614.phpt
new file mode 100644
index 0000000..8f99934
--- /dev/null
+++ b/ext/spl/tests/bug45614.phpt
@@ -0,0 +1,56 @@
+--TEST--
+SPL: Bug#45614 (ArrayIterator can show 1st private prop of wrapped object)
+--FILE--
+<?php
+class C {
+	private $priv1 = 'secret1';
+	private $priv2 = 'secret2';
+	public $pub1 = 'public1';
+	public $pub2 = 'public2';
+	public $pub3 = 'public3';
+} 
+
+function showFirstTwoItems($it) {
+  echo str_replace("\0", '\0', $it->key()) . " => " . $it->current() .
+"\n";
+  $it->next();
+  echo str_replace("\0", '\0', $it->key()) . " => " . $it->current() .
+"\n";
+}
+
+$ao = new ArrayObject(new C);
+$ai = $ao->getIterator();
+
+echo "--> Show the first two items:\n";
+showFirstTwoItems($ai);
+
+echo "\n--> Rewind and show the first two items:\n";
+$ai->rewind();
+showFirstTwoItems($ai);
+
+echo "\n--> Invalidate current position and show the first two items:\n";
+unset($ai[$ai->key()]);
+$ai->current();
+showFirstTwoItems($ai);
+
+echo "\n--> Rewind, seek and show the first two items:\n";
+$ai->rewind();
+$ai->seek(0);
+showFirstTwoItems($ai);
+?>
+--EXPECT--
+--> Show the first two items:
+pub1 => public1
+pub2 => public2
+
+--> Rewind and show the first two items:
+pub1 => public1
+pub2 => public2
+
+--> Invalidate current position and show the first two items:
+pub1 => public1
+pub3 => public3
+
+--> Rewind, seek and show the first two items:
+pub1 => public1
+pub3 => public3
diff --git a/ext/spl/tests/bug45622.phpt b/ext/spl/tests/bug45622.phpt
new file mode 100644
index 0000000..89e2330
--- /dev/null
+++ b/ext/spl/tests/bug45622.phpt
@@ -0,0 +1,51 @@
+--TEST--
+SPL: Bug #45622 (isset($arrayObject->p) misbehaves with ArrayObject::ARRAY_AS_PROPS set
+--FILE--
+<?php
+
+class C extends ArrayObject {
+	public $p = 'object property';
+}	
+
+$ao = new C(array('p'=>'array element'));
+$ao->setFlags(ArrayObject::ARRAY_AS_PROPS);
+
+echo "\n--> Access the real property:\n";
+var_dump(isset($ao->p));
+var_dump($ao->p);
+
+echo "\n--> Remove the real property and access the array element:\n";
+unset($ao->p);
+var_dump(isset($ao->p));
+var_dump($ao->p);
+
+echo "\n--> Remove the array element and try access again:\n";
+unset($ao->p);
+var_dump(isset($ao->p));
+var_dump($ao->p);
+
+echo "\n--> Re-add the real property:\n";
+$ao->p = 'object property';
+var_dump(isset($ao->p));
+var_dump($ao->p);
+?>
+--EXPECTF--
+
+--> Access the real property:
+bool(true)
+string(15) "object property"
+
+--> Remove the real property and access the array element:
+bool(true)
+string(13) "array element"
+
+--> Remove the array element and try access again:
+bool(false)
+
+Notice: Undefined index:  p in %s on line %d
+NULL
+
+--> Re-add the real property:
+bool(true)
+string(15) "object property"
+
diff --git a/ext/spl/tests/bug45622b.phpt b/ext/spl/tests/bug45622b.phpt
new file mode 100644
index 0000000..9d49392
--- /dev/null
+++ b/ext/spl/tests/bug45622b.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Ensure fix to bug45622 doesn't cause __isset() to be called when ArrayObject::ARRAY_AS_PROPS is used.
+--FILE--
+<?php
+class UsesMagic extends ArrayObject {
+	function __get($n)     {  echo "In " . __METHOD__ . "!\n"; }
+	function __set($n, $v) {  echo "In " . __METHOD__ . "!\n"; }
+	function __isset($n)   {  echo "In " . __METHOD__ . "!\n"; }
+	function __unset($n)   {  echo "In " . __METHOD__ . "!\n"; }
+}
+$ao = new UsesMagic(array(), ArrayObject::ARRAY_AS_PROPS);
+
+echo "Doesn't trigger __get.\n";
+echo $ao->prop1;
+
+echo "Doesn't trigger __set.\n";    
+$ao->prop2 = 'foo';
+
+echo "Doesn't trigger __unset.\n";
+unset($ao->prop3);
+
+echo "Shouldn't trigger __isset.\n";
+isset($ao->prop4);
+?>
+--EXPECTF--
+Doesn't trigger __get.
+
+Notice: Undefined index:  prop1 in %s on line 11
+Doesn't trigger __set.
+Doesn't trigger __unset.
+
+Notice: Undefined index:  prop3 in %s on line 17
+Shouldn't trigger __isset.
\ No newline at end of file
diff --git a/ext/spl/tests/bug47534.phpt b/ext/spl/tests/bug47534.phpt
new file mode 100644
index 0000000..44de360
--- /dev/null
+++ b/ext/spl/tests/bug47534.phpt
@@ -0,0 +1,14 @@
+--TEST--
+SPL: RecursiveDirectoryIterator bug 47534
+--FILE--
+<?php
+$it1 = new RecursiveDirectoryIterator(dirname(__FILE__), RecursiveDirectoryIterator::CURRENT_AS_PATHNAME);
+$it1->rewind();
+echo gettype($it1->current())."\n";
+
+$it2 = new RecursiveDirectoryIterator(dirname(__FILE__));
+$it2->rewind();
+echo gettype($it2->current())."\n";
+--EXPECT--
+string
+object
diff --git a/ext/spl/tests/iterator_044.phpt.orig b/ext/spl/tests/iterator_044.phpt.orig
new file mode 100755
index 0000000..d3c6253
--- /dev/null
+++ b/ext/spl/tests/iterator_044.phpt.orig
@@ -0,0 +1,169 @@
+--TEST--
+SPL: CachingIterator and offsetGet/Exists using flag FULL_CACHE
+--SKIPIF--
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--FILE--
+<?php
+
+class MyFoo
+{
+	function __toString()
+	{
+		return 'foo';
+	}
+}
+
+class MyCachingIterator extends CachingIterator
+{
+	function __construct(Iterator $it, $flags = 0)
+	{
+		parent::__construct($it, $flags);
+	}
+
+	function test($ar)
+	{
+		foreach($ar as $k => $v)
+		{
+			echo "===$k===\n";
+			var_dump($v);
+			var_dump($this->offsetExists($v));
+			var_dump($this->offsetGet($v));
+		}
+	}
+}
+
+$it = new MyCachingIterator(new ArrayIterator(array(0, 'foo'=>1, 2, 'bar'=>3, 4)));
+
+try
+{
+	var_dump($it->offsetExists(0));
+}
+catch(Exception $e)
+{
+	echo "Exception: " . $e->getMessage() . "\n";
+}
+
+try
+{
+	var_dump($it->offsetGet(0));
+}
+catch(Exception $e)
+{
+	echo "Exception: " . $e->getMessage() . "\n";
+}
+
+$it = new MyCachingIterator(new ArrayIterator(array(0, 'foo'=>1, 2, 'bar'=>3, 4)), CachingIterator::FULL_CACHE);
+
+var_dump($it->offsetExists());
+var_dump($it->offsetGet());
+
+$checks = array(0, new stdClass, new MyFoo, NULL, 2, 'foo', 3);
+
+$it->test($checks);
+
+echo "===FILL===\n";
+
+foreach($it as $v); // read all into cache
+
+$it->test($checks);
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
+
+Notice: Undefined index:  0 in %siterator_044.php on line %d
+Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
+
+Warning: CachingIterator::offsetExists() expects exactly 1 parameter, 0 given in %siterator_044.php on line %d
+NULL
+
+Warning: CachingIterator::offsetGet() expects exactly 1 parameter, 0 given in %siterator_044.php on line %d
+NULL
+===0===
+int(0)
+bool(false)
+
+Notice: Undefined index:  0 in %siterator_044.php on line %d
+NULL
+===1===
+object(stdClass)#%d (0) {
+}
+
+Warning: CachingIterator::offsetExists() expects parameter 1 to be string, object given in %siterator_044.php on line %d
+NULL
+
+Warning: CachingIterator::offsetGet() expects parameter 1 to be string, object given in %siterator_044.php on line %d
+NULL
+===2===
+object(MyFoo)#%d (0) {
+}
+bool(false)
+
+Notice: Undefined index:  foo in %siterator_044.php on line %d
+NULL
+===3===
+NULL
+bool(false)
+
+Notice: Undefined index:   in %siterator_044.php on line %d
+NULL
+===4===
+int(2)
+bool(false)
+
+Notice: Undefined index:  2 in %siterator_044.php on line %d
+NULL
+===5===
+string(3) "foo"
+bool(false)
+
+Notice: Undefined index:  foo in %siterator_044.php on line %d
+NULL
+===6===
+int(3)
+bool(false)
+
+Notice: Undefined index:  3 in %siterator_044.php on line %d
+NULL
+===FILL===
+===0===
+int(0)
+bool(true)
+int(0)
+===1===
+object(stdClass)#1 (0) {
+}
+
+Warning: CachingIterator::offsetExists() expects parameter 1 to be string, object given in %siterator_044.php on line %d
+NULL
+
+Warning: CachingIterator::offsetGet() expects parameter 1 to be string, object given in %siterator_044.php on line %d
+NULL
+===2===
+object(MyFoo)#2 (0) {
+}
+bool(true)
+int(1)
+===3===
+NULL
+bool(false)
+
+Notice: Undefined index:   in %siterator_044.php on line %d
+NULL
+===4===
+int(2)
+bool(true)
+int(4)
+===5===
+string(3) "foo"
+bool(true)
+int(1)
+===6===
+int(3)
+bool(false)
+
+Notice: Undefined index:  3 in %siterator_044.php on line %d
+NULL
+===DONE===
diff --git a/ext/spl/tests/iterator_count.phpt b/ext/spl/tests/iterator_count.phpt
new file mode 100644
index 0000000..1db568d
--- /dev/null
+++ b/ext/spl/tests/iterator_count.phpt
@@ -0,0 +1,26 @@
+--TEST--
+SPL: iterator_count() exceptions test
+--CREDITS--
+Lance Kesson jac_kesson at hotmail.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+$array=array('a','b');
+
+$iterator = new ArrayIterator($array);
+
+iterator_count();
+
+
+iterator_count($iterator,'1');
+
+iterator_count('1');
+
+
+?>
+--EXPECTF--
+Warning: iterator_count() expects exactly 1 parameter, 0 given in %s
+
+Warning: iterator_count() expects exactly 1 parameter, 2 given in %s
+
+Catchable fatal error: Argument 1 passed to iterator_count() must implement interface Traversable, %unicode_string_optional% given %s
diff --git a/ext/spl/tests/iterator_to_array.phpt b/ext/spl/tests/iterator_to_array.phpt
new file mode 100644
index 0000000..574e050
--- /dev/null
+++ b/ext/spl/tests/iterator_to_array.phpt
@@ -0,0 +1,25 @@
+--TEST--
+SPL: iterator_to_array() exceptions test
+--CREDITS--
+Lance Kesson jac_kesson at hotmail.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+$array=array('a','b');
+
+$iterator = new ArrayIterator($array);
+
+iterator_to_array();
+
+
+iterator_to_array($iterator,'test','test');
+
+iterator_to_array('test','test');
+
+?>
+--EXPECTF--
+Warning: iterator_to_array() expects at least 1 parameter, 0 given in %s
+
+Warning: iterator_to_array() expects at most 2 parameters, 3 given in %s
+
+Catchable fatal error: Argument 1 passed to iterator_to_array() must implement interface Traversable, %unicode_string_optional% given %s
diff --git a/ext/spl/tests/limititerator_seek.phpt b/ext/spl/tests/limititerator_seek.phpt
new file mode 100644
index 0000000..a59a49b
--- /dev/null
+++ b/ext/spl/tests/limititerator_seek.phpt
@@ -0,0 +1,18 @@
+--TEST--
+SPL: LimitIterator seek() arguments
+--CREDITS--
+Roshan Abraham (roshanabrahams at gmail.com)
+TestFest London May 2009
+--FILE--
+<?php
+
+$a = array(1,2,3);
+$lt = new LimitIterator(new ArrayIterator($a));
+
+$lt->seek(1,1); // Should throw a warning as seek expects only 1 argument
+
+?>
+--EXPECTF--
+
+Warning: LimitIterator::seek() expects exactly 1 parameter, 2 given in %s on line %d
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_beginiteration_basic.phpt b/ext/spl/tests/recursiveiteratoriterator_beginiteration_basic.phpt
new file mode 100644
index 0000000..c9476e0
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_beginiteration_basic.phpt
@@ -0,0 +1,32 @@
+--TEST--
+SPL: RecursiveIteratorIterator::beginIteration() is called by RecursiveIteratorIterator::rewind()
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1, 2);
+$sub_iterator = new RecursiveArrayIterator($sample_array);
+
+$iterator = new RecursiveIteratorIterator($sub_iterator);
+foreach ($iterator as $element) {
+  var_dump($element);
+}
+
+class SkipsFirstElementRecursiveIteratorIterator extends RecursiveIteratorIterator {
+  public function beginIteration() {
+    echo "::beginIteration() was invoked\n";
+    $this->next();
+  }
+}
+$iterator = new SkipsFirstElementRecursiveIteratorIterator($sub_iterator);
+foreach ($iterator as $element) {
+  var_dump($element);
+}
+?>
+--EXPECT--
+int(1)
+int(2)
+::beginIteration() was invoked
+int(2)
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_enditeration_basic.phpt b/ext/spl/tests/recursiveiteratoriterator_enditeration_basic.phpt
new file mode 100644
index 0000000..0355401
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_enditeration_basic.phpt
@@ -0,0 +1,32 @@
+--TEST--
+SPL: RecursiveIteratorIterator::endIteration() is called when ::valid() first returns false
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1, 2);
+$sub_iterator = new RecursiveArrayIterator($sample_array);
+
+$iterator = new RecursiveIteratorIterator($sub_iterator);
+foreach ($iterator as $element) {
+  var_dump($element);
+}
+
+class EndIterationRecursiveIteratorIterator extends RecursiveIteratorIterator {
+  public function endIteration() {
+    echo "::endIteration() was invoked\n";
+  }
+}
+$iterator = new EndIterationRecursiveIteratorIterator($sub_iterator);
+foreach ($iterator as $element) {
+  var_dump($element);
+}
+?>
+--EXPECT--
+int(1)
+int(2)
+int(1)
+int(2)
+::endIteration() was invoked
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_getsubiterator_basic.phpt b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_basic.phpt
new file mode 100644
index 0000000..5d1c958
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_basic.phpt
@@ -0,0 +1,20 @@
+--TEST--
+SPL: RecursiveIteratorIterator::getSubIterator() returns iterator passed in constructor
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1, 2, array(3, 4));
+
+$sub_iterator = new RecursiveArrayIterator($sample_array);
+$not_sub_iterator = new RecursiveArrayIterator($sample_array);
+$iterator = new RecursiveIteratorIterator($sub_iterator);
+
+var_dump($iterator->getSubIterator() === $sub_iterator);
+var_dump($iterator->getSubIterator() === $not_sub_iterator);
+?>
+--EXPECT--
+bool(true)
+bool(false)
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_getsubiterator_error.phpt b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_error.phpt
new file mode 100644
index 0000000..760082f
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_error.phpt
@@ -0,0 +1,15 @@
+--TEST--
+SPL: RecursiveIteratorIterator::getSubIterator() expects at most 1 parameter
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator(array()));
+$iterator->getSubIterator();
+$iterator->getSubIterator(0);
+$iterator->getSubIterator(0, 0);
+?>
+--EXPECTF--
+Warning: RecursiveIteratorIterator::getSubIterator() expects at most 1 parameter, 2 given in %s on line 5
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation.phpt b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation.phpt
new file mode 100644
index 0000000..a7b84c4
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation.phpt
@@ -0,0 +1,42 @@
+--TEST--
+SPL: RecursiveIteratorIterator::getSubIterator() returns different iterators depending on the current element
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1, 2, array(3, 4));
+
+$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($sample_array));
+
+$iterator->next();
+$iterator->next();
+var_dump(get_class($iterator->getSubIterator()));
+var_dump($iterator->getSubIterator()->getArrayCopy());
+$iterator->next();
+var_dump(get_class($iterator->getSubIterator()));
+var_dump($iterator->getSubIterator()->getArrayCopy());
+?>
+--EXPECTF--
+%unicode|string%(22) "RecursiveArrayIterator"
+array(3) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  array(2) {
+    [0]=>
+    int(3)
+    [1]=>
+    int(4)
+  }
+}
+%unicode|string%(22) "RecursiveArrayIterator"
+array(2) {
+  [0]=>
+  int(3)
+  [1]=>
+  int(4)
+}
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_002.phpt b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_002.phpt
new file mode 100644
index 0000000..aac4e65
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_002.phpt
@@ -0,0 +1,20 @@
+--TEST--
+SPL: RecursiveIteratorIterator::getSubIterator() returns NULL if there's no current element
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1);
+
+$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($sample_array));
+
+$iterator->next();
+var_dump(is_null($iterator->getSubIterator()));
+$iterator->next();
+var_dump(is_null($iterator->getSubIterator()));
+?>
+--EXPECT--
+bool(false)
+bool(false)
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_003.phpt b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_003.phpt
new file mode 100644
index 0000000..ff18840
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_getsubiterator_variation_003.phpt
@@ -0,0 +1,42 @@
+--TEST--
+SPL: RecursiveIteratorIterator::getSubIterator() with explicit level parameter
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1, 2, array(3, 4));
+
+$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($sample_array));
+
+$iterator->next();
+$iterator->next();
+$iterator->next();
+var_dump($iterator->getSubIterator(-1));
+var_dump($iterator->getSubIterator(0)->getArrayCopy());
+var_dump($iterator->getSubIterator(1)->getArrayCopy());
+var_dump($iterator->getSubIterator(2));
+?>
+--EXPECT--
+NULL
+array(3) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  array(2) {
+    [0]=>
+    int(3)
+    [1]=>
+    int(4)
+  }
+}
+array(2) {
+  [0]=>
+  int(3)
+  [1]=>
+  int(4)
+}
+NULL
+
diff --git a/ext/spl/tests/recursiveiteratoriterator_nextelement_basic.phpt b/ext/spl/tests/recursiveiteratoriterator_nextelement_basic.phpt
new file mode 100644
index 0000000..0bf4f19
--- /dev/null
+++ b/ext/spl/tests/recursiveiteratoriterator_nextelement_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+SPL: RecursiveIteratorIterator::nextElement() is called when the next element is ready
+--CREDITS--
+Matt Raines matt at raines.me.uk
+#testfest London 2009-05-09
+--FILE--
+<?php
+$sample_array = array(1, 2, array(3, 4));
+$sub_iterator = new RecursiveArrayIterator($sample_array);
+
+$iterator = new RecursiveIteratorIterator($sub_iterator);
+foreach ($iterator as $element) {
+  var_dump($element);
+}
+
+class NextElementRecursiveIteratorIterator extends RecursiveIteratorIterator {
+  public function nextElement() {
+    echo "::nextElement() was invoked\n";
+  }
+}
+$iterator = new NextElementRecursiveIteratorIterator($sub_iterator);
+foreach ($iterator as $element) {
+  var_dump($element);
+}
+?>
+--EXPECT--
+int(1)
+int(2)
+int(3)
+int(4)
+::nextElement() was invoked
+int(1)
+::nextElement() was invoked
+int(2)
+::nextElement() was invoked
+int(3)
+::nextElement() was invoked
+int(4)
+
diff --git a/ext/spl/tests/regexiterator_getpregflags.phpt b/ext/spl/tests/regexiterator_getpregflags.phpt
new file mode 100644
index 0000000..db96153
--- /dev/null
+++ b/ext/spl/tests/regexiterator_getpregflags.phpt
@@ -0,0 +1,33 @@
+--TEST--
+SPL: RegexIterator::getPregFlags()
+--CREDITS--
+Lance Kesson jac_kesson at hotmail.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+class myIterator implements Iterator {
+
+function current (){}
+function key ( ){}
+function next ( ){}
+function rewind ( ){}
+function valid ( ){}
+
+
+}
+
+class TestRegexIterator extends RegexIterator{}
+
+$rege = '/^a/';
+
+
+$r = new TestRegexIterator(new myIterator, $rege);
+
+$r->setPregFlags(PREG_OFFSET_CAPTURE);
+
+echo is_long($r->getPregFlags());
+
+?>
+--EXPECTF--
+1
\ No newline at end of file
diff --git a/ext/spl/tests/regexiterator_setflags_exception.phpt b/ext/spl/tests/regexiterator_setflags_exception.phpt
new file mode 100644
index 0000000..66c82b1
--- /dev/null
+++ b/ext/spl/tests/regexiterator_setflags_exception.phpt
@@ -0,0 +1,35 @@
+--TEST--
+SPL: RegexIterator::setFlags() exceptions test
+--CREDITS--
+Lance Kesson jac_kesson at hotmail.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+class myIterator implements Iterator {
+
+function current (){}
+function key ( ){}
+function next ( ){}
+function rewind ( ){}
+function valid ( ){}
+
+
+}
+
+class TestRegexIterator extends RegexIterator{}
+
+$rege = '/^a/';
+
+
+$r = new TestRegexIterator(new myIterator, $rege);
+
+try{	
+	$r->setFlags();
+}catch (Exception $e) {
+	echo $e->getMessage();
+}
+
+?>
+--EXPECTF--
+Warning: RegexIterator::setFlags() expects exactly 1 parameter, 0 given in %s
\ No newline at end of file
diff --git a/ext/spl/tests/regexiterator_setpregflags.phpt b/ext/spl/tests/regexiterator_setpregflags.phpt
new file mode 100644
index 0000000..a14da61
--- /dev/null
+++ b/ext/spl/tests/regexiterator_setpregflags.phpt
@@ -0,0 +1,34 @@
+--TEST--
+SPL: RegexIterator::setPregFlags()
+--CREDITS--
+Lance Kesson jac_kesson at hotmail.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+class myIterator implements Iterator {
+
+function current (){}
+function key ( ){}
+function next ( ){}
+function rewind ( ){}
+function valid ( ){}
+
+
+}
+
+class TestRegexIterator extends RegexIterator{}
+
+$rege = '/^a/';
+
+
+$r = new TestRegexIterator(new myIterator, $rege);
+
+$r->setPregFlags(PREG_OFFSET_CAPTURE);
+
+echo $r->getPregFlags();
+
+
+?>
+--EXPECTF--
+256
\ No newline at end of file
diff --git a/ext/spl/tests/regexiterator_setpregflags_exception.phpt b/ext/spl/tests/regexiterator_setpregflags_exception.phpt
new file mode 100644
index 0000000..489505c
--- /dev/null
+++ b/ext/spl/tests/regexiterator_setpregflags_exception.phpt
@@ -0,0 +1,36 @@
+--TEST--
+SPL: RegexIterator::getPregFlags() exception test
+--CREDITS--
+Lance Kesson jac_kesson at hotmail.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+class myIterator implements Iterator {
+
+function current (){}
+function key ( ){}
+function next ( ){}
+function rewind ( ){}
+function valid ( ){}
+
+
+}
+
+class TestRegexIterator extends RegexIterator{}
+
+$rege = '/^a/';
+
+
+$r = new TestRegexIterator(new myIterator, $rege);
+
+
+try{	
+	$r->setPregFlags();
+}catch (Exception $e) {
+	echo $e->getMessage();
+}
+
+?>
+--EXPECTF--
+Warning: RegexIterator::setPregFlags() expects exactly 1 parameter, 0 given in %s
\ No newline at end of file
diff --git a/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt b/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt
new file mode 100644
index 0000000..499cd67
--- /dev/null
+++ b/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt
@@ -0,0 +1,25 @@
+--TEST--
+SPL: CachingInterator constructor flag checks 
+--CREDITS--
+Sean Burlington www.practicalweb.co.uk
+TestFest London May 2009
+--FILE--
+<?php
+  //line 681 ...
+  $array = array(array(7,8,9),1,2,3,array(4,5,6));
+$arrayIterator = new ArrayIterator($array);
+try {
+$test = new CachingIterator($arrayIterator, 0);
+$test = new CachingIterator($arrayIterator, 1);
+$test = new CachingIterator($arrayIterator, 2);
+$test = new CachingIterator($arrayIterator, 3); // this throws an exception
+} catch (InvalidArgumentException $e){
+  print  $e->getMessage() . "\n";
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_CURRENT
+===DONE===
diff --git a/ext/spl/tests/spl_cachingiterator___toString_basic.phpt b/ext/spl/tests/spl_cachingiterator___toString_basic.phpt
new file mode 100644
index 0000000..0395b37
--- /dev/null
+++ b/ext/spl/tests/spl_cachingiterator___toString_basic.phpt
@@ -0,0 +1,16 @@
+--TEST--
+SPL: SplCachingIterator, Test method to convert current element to string
+--CREDITS--
+Chris Scott chris.scott at nstein.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+$ai = new ArrayIterator(array(new stdClass(), new stdClass()));
+$ci = new CachingIterator($ai);
+var_dump(
+$ci->__toString() // if conversion to string is done by echo, for example, an exeption is thrown. Invoking __toString explicitly covers different code.
+);
+?>
+--EXPECTF--
+NULL
diff --git a/ext/spl/tests/spl_cachingiterator_setFlags_basic.phpt b/ext/spl/tests/spl_cachingiterator_setFlags_basic.phpt
new file mode 100644
index 0000000..126586b
--- /dev/null
+++ b/ext/spl/tests/spl_cachingiterator_setFlags_basic.phpt
@@ -0,0 +1,16 @@
+--TEST--
+SPL: SplCachingIterator, Test method to set flags for caching iterator
+--CREDITS--
+Chris Scott chris.scott at nstein.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+$ai = new ArrayIterator(array('foo', 'bar'));
+
+$ci = new CachingIterator($ai);
+$ci->setFlags(); //expects arg
+
+?>
+--EXPECTF--
+Warning: CachingIterator::setFlags() expects exactly 1 parameter, %s
diff --git a/ext/spl/tests/spl_classes.phpt b/ext/spl/tests/spl_classes.phpt
new file mode 100644
index 0000000..172c4ab
--- /dev/null
+++ b/ext/spl/tests/spl_classes.phpt
@@ -0,0 +1,13 @@
+--TEST--
+SPL: spl_classes() function 
+--CREDITS--
+Sebastian Schürmann
+sebs at php.net
+Testfest 2009 Munich
+--FILE--
+<?php
+var_dump(is_array(spl_classes()));
+?>
+--EXPECT--
+bool(true)
+
diff --git a/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt b/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt
new file mode 100755
index 0000000..9e3debf
--- /dev/null
+++ b/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+SPL: Spl File Info test getLinkTarget
+--CREDITS--
+Nataniel McHugh nat at fishtrap.co.uk
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') die("skip this test not for Windows platforms");
+?>
+--FILE--
+<?php
+$link = 'test_link';
+symlink(__FILE__, $link );
+$fileInfo = new SplFileInfo($link);
+
+if ($fileInfo->isLink()) {
+	echo $fileInfo->getLinkTarget() == __FILE__ ? 'same' : 'different',PHP_EOL;
+}
+var_dump(unlink($link));
+?>
+--EXPECT--
+same
+bool(true)
diff --git a/ext/spl/tests/spl_iterator_apply_error.phpt b/ext/spl/tests/spl_iterator_apply_error.phpt
new file mode 100755
index 0000000..8e7cba4
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_apply_error.phpt
@@ -0,0 +1,26 @@
+--TEST--
+SPL: Error: iterator_apply when an iterator method (eg rewind) throws exception
+--FILE--
+<?php
+
+class MyArrayIterator extends ArrayIterator {
+	public function rewind() {
+		throw new Exception('Make the iterator break');
+	}
+}
+
+function test() {}
+
+$it = new MyArrayIterator(array(1, 21, 22));
+
+try {
+	$res = iterator_apply($it, 'test');
+} catch (Exception $e) {
+	echo $e->getMessage();
+}
+
+?>
+
+<?php exit(0); ?>
+--EXPECT--
+Make the iterator break
diff --git a/ext/spl/tests/spl_iterator_apply_error_001.phpt b/ext/spl/tests/spl_iterator_apply_error_001.phpt
new file mode 100755
index 0000000..54663c0
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_apply_error_001.phpt
@@ -0,0 +1,20 @@
+--TEST--
+SPL: Error: iterator_apply when the callback throws an exception
+--FILE--
+<?php
+
+function test() {
+	throw new Exception('Broken callback');
+}
+
+$it = new RecursiveArrayIterator(array(1, 21, 22));
+
+try {
+	iterator_apply($it, 'test');
+} catch (Exception $e) {
+	echo $e->getMessage();
+}
+
+?>
+--EXPECT--
+Broken callback
diff --git a/ext/spl/tests/spl_iterator_caching_count_basic.phpt b/ext/spl/tests/spl_iterator_caching_count_basic.phpt
new file mode 100644
index 0000000..b11eb7b
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_caching_count_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+SPL: Caching iterator count() cache contents
+--CREDITS--
+Lukasz Andrzejak meltir at meltir.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+$i = new ArrayIterator(array(1,1,1,1,1));
+$i = new CachingIterator($i,CachingIterator::FULL_CACHE);
+foreach ($i as $value) {
+  echo $i->count()."\n";
+}
+?>
+===DONE===
+--EXPECT--
+1
+2
+3
+4
+5
+===DONE===
\ No newline at end of file
diff --git a/ext/spl/tests/spl_iterator_caching_count_error.phpt b/ext/spl/tests/spl_iterator_caching_count_error.phpt
new file mode 100644
index 0000000..70aa2be
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_caching_count_error.phpt
@@ -0,0 +1,21 @@
+--TEST--
+SPL: Caching iterator count() cache failure
+--CREDITS--
+Lukasz Andrzejak meltir at meltir.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+$i = new ArrayIterator(array(1,1,1,1,1));
+$i = new CachingIterator($i);
+try {
+  $i->count();
+  echo "Should have caused an exception";
+} catch (BadMethodCallException $e) {
+  echo "Exception raised\n";
+}
+
+?>
+===DONE===
+--EXPECT--
+Exception raised
+===DONE===
\ No newline at end of file
diff --git a/ext/spl/tests/spl_iterator_caching_getcache_error.phpt b/ext/spl/tests/spl_iterator_caching_getcache_error.phpt
new file mode 100644
index 0000000..2ea4bd8
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_caching_getcache_error.phpt
@@ -0,0 +1,21 @@
+--TEST--
+SPL: Caching iterator getCache failure
+--CREDITS--
+Lukasz Andrzejak meltir at meltir.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+$i = new ArrayIterator(array(1,1,1,1,1));
+$i = new CachingIterator($i);
+try {
+  $i->getCache();
+  echo "Should have caused an exception";
+} catch (BadMethodCallException $e) {
+  echo "Exception raised\n";
+}
+
+?>
+===DONE===
+--EXPECT--
+Exception raised
+===DONE===
\ No newline at end of file
diff --git a/ext/spl/tests/spl_iterator_getcallchildren.phpt b/ext/spl/tests/spl_iterator_getcallchildren.phpt
new file mode 100644
index 0000000..77b03b6
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_getcallchildren.phpt
@@ -0,0 +1,39 @@
+--TEST--
+SPL: RecursiveIteratorIterator, getCallChildren
+--CREDITS--
+Sean Burlington www.practicalweb.co.uk
+TestFest London May 2009
+--FILE--
+<?php
+  //line 681 ...
+  $array = array(array(7,8,9),1,2,3,array(4,5,6));
+$recursiveArrayIterator = new RecursiveArrayIterator($array);
+$test = new RecursiveIteratorIterator($recursiveArrayIterator);
+
+var_dump($test->current());
+$test->next();
+var_dump($test->current());
+try {
+  $output = $test->callGetChildren();
+} catch (InvalidArgumentException $ilae){
+  $output = null;  
+  print "invalid argument exception\n";
+}
+var_dump($output);
+
+
+?>
+===DONE===
+--EXPECTF--
+  array(3) {
+  [0]=>
+  int(7)
+  [1]=>
+  int(8)
+  [2]=>
+  int(9)
+}
+int(7)
+invalid argument exception
+NULL
+===DONE===
diff --git a/ext/spl/tests/spl_iterator_iterator_constructor.phpt b/ext/spl/tests/spl_iterator_iterator_constructor.phpt
new file mode 100644
index 0000000..d4fdb14
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_iterator_constructor.phpt
@@ -0,0 +1,30 @@
+--TEST--
+SPL: IteratorInterator constructor checks 
+--CREDITS--
+Sean Burlington www.practicalweb.co.uk
+TestFest London May 2009
+--FILE--
+<?php
+
+  //I think this is testing line 1297 of spl_iterators.c
+
+  $array = array(array(7,8,9),1,2,3,array(4,5,6));
+$arrayIterator = new ArrayIterator($array);
+try {
+$test = new IteratorIterator($arrayIterator);
+
+$test = new IteratorIterator($arrayIterator, 1);
+$test = new IteratorIterator($arrayIterator, 1, 1);
+$test = new IteratorIterator($arrayIterator, 1, 1, 1);
+$test = new IteratorIterator($arrayIterator, 1, 1, 1, 1);
+
+} catch (InvalidArgumentException $e){
+  print  $e->getMessage() . "\n";
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+IteratorIterator::__construct() expects at most 2 parameters, 3 given
+===DONE===
diff --git a/ext/spl/tests/spl_iterator_recursive_getiterator_error.phpt b/ext/spl/tests/spl_iterator_recursive_getiterator_error.phpt
new file mode 100644
index 0000000..0d45c31
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_recursive_getiterator_error.phpt
@@ -0,0 +1,16 @@
+--TEST--
+SPL: IteratorIterator foreach by reference failure
+--CREDITS--
+Lukasz Andrzejak meltir at meltir.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+$i = new ArrayIterator(array(1,1,1,1,1));
+$iii = new IteratorIterator($i);
+p($iii);
+function p ($i) {
+  foreach ($i as &$value) {}
+}
+?>
+--EXPECTF--
+Fatal error: An iterator cannot be used with foreach by reference in %s
\ No newline at end of file
diff --git a/ext/spl/tests/spl_iterator_to_array_basic.phpt b/ext/spl/tests/spl_iterator_to_array_basic.phpt
new file mode 100644
index 0000000..68cb879
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_to_array_basic.phpt
@@ -0,0 +1,13 @@
+--TEST--
+SPL: iterator_to_array, Test function to convert iterator to array
+--CREDITS--
+Chris Scott chris.scott at nstein.com
+#testfest London 2009-05-09
+--FILE--
+<?php
+
+iterator_to_array();//requires iterator as arg
+
+?>
+--EXPECTF--
+Warning: iterator_to_array() expects at least 1 parameter, %s
diff --git a/ext/spl/tests/spl_iterator_to_array_error.phpt b/ext/spl/tests/spl_iterator_to_array_error.phpt
new file mode 100755
index 0000000..755ef7b
--- /dev/null
+++ b/ext/spl/tests/spl_iterator_to_array_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+SPL: Error: iterator_to_array when the current operation throws an exception
+--FILE--
+<?php
+
+class MyArrayIterator extends ArrayIterator {
+	public function current() {
+		throw new Exception('Make the iterator break');
+	}
+}
+
+$it = new MyArrayIterator(array(4, 6, 2));
+
+try {
+	// get keys
+	$ar = iterator_to_array($it);
+} catch (Exception $e) {
+	echo $e->getMessage() . PHP_EOL;
+}
+
+try {
+	// get values
+	$ar = iterator_to_array($it, false);
+} catch (Exception $e) {
+	echo $e->getMessage() . PHP_EOL;
+}
+
+?>
+
+<?php exit(0); ?>
+--EXPECT--
+Make the iterator break
+Make the iterator break
diff --git a/ext/spl/tests/spl_limit_iterator_check_limits.phpt b/ext/spl/tests/spl_limit_iterator_check_limits.phpt
new file mode 100644
index 0000000..01436a8
--- /dev/null
+++ b/ext/spl/tests/spl_limit_iterator_check_limits.phpt
@@ -0,0 +1,37 @@
+--TEST--
+SPL: LimitIterator check limits are valid
+--CREDITS--
+Sean Burlington www.practicalweb.co.uk
+TestFest London May 2009
+--FILE--
+<?php
+  $array = array(array(7,8,9),1,2,3,array(4,5,6));
+$arrayIterator = new ArrayIterator($array);
+
+try {
+  $limitIterator = new LimitIterator($arrayIterator, -1);
+} catch (OutOfRangeException $e){
+  print $e->getMessage(). "\n";
+}
+
+
+try {
+  $limitIterator = new LimitIterator($arrayIterator, 0, -2);
+} catch (OutOfRangeException $e){
+  print $e->getMessage() . "\n";
+}
+
+try {
+  $limitIterator = new LimitIterator($arrayIterator, 0, -1);
+} catch (OutOfRangeException $e){
+  print $e->getMessage() . "\n";
+}
+
+
+
+?>
+===DONE===
+--EXPECTF--
+Parameter offset must be > 0
+Parameter count must either be -1 or a value greater than or equal 0
+===DONE===
diff --git a/ext/spl/tests/spl_recursiveIteratorIterator_setMaxDepth_parameter_count.phpt b/ext/spl/tests/spl_recursiveIteratorIterator_setMaxDepth_parameter_count.phpt
new file mode 100644
index 0000000..d52a320
--- /dev/null
+++ b/ext/spl/tests/spl_recursiveIteratorIterator_setMaxDepth_parameter_count.phpt
@@ -0,0 +1,28 @@
+--TEST--
+SPL: RecursiveIteratorIterator, setMaxDepth check parameter count
+--CREDITS--
+Sean Burlington www.practicalweb.co.uk
+TestFest London May 2009
+--FILE--
+<?php
+  //line 681 ...
+  $array = array(array(7,8,9),1,2,3,array(4,5,6));
+$recursiveArrayIterator = new RecursiveArrayIterator($array);
+$test = new RecursiveIteratorIterator($recursiveArrayIterator);
+
+//var_dump($test->current());
+$test->setMaxDepth();
+$test->setMaxDepth(1);
+$test->setMaxDepth(1,2);
+$test->setMaxDepth(1,2,3);
+
+//var_dump($test->current());
+
+
+?>
+===DONE===
+--EXPECTF--
+Warning: RecursiveIteratorIterator::setMaxDepth() expects at most 1 parameter, 2 given in %s on line 10
+
+Warning: RecursiveIteratorIterator::setMaxDepth() expects at most 1 parameter, 3 given in %s on line 11
+===DONE===
diff --git a/ext/spl/tests/spl_recursive_iterator_iterator_key_case.phpt b/ext/spl/tests/spl_recursive_iterator_iterator_key_case.phpt
new file mode 100644
index 0000000..2498308
--- /dev/null
+++ b/ext/spl/tests/spl_recursive_iterator_iterator_key_case.phpt
@@ -0,0 +1,33 @@
+--TEST--
+SPL: Test on RecursiveIteratorIterator key function checking switch statements 
+--CREDITS--
+Rohan Abraham (rohanabrahams at gmail.com)
+TestFest London May 2009
+--FILE--
+<?php
+  $ar = array("one"=>1, "two"=>2, "three"=>array("four"=>4, "five"=>5, "six"=>array("seven"=>7)), "eight"=>8, -100 => 10, NULL => "null");
+  $it = new RecursiveArrayIterator($ar);
+  $it = new RecursiveIteratorIterator($it);
+  foreach($it as $k=>$v)
+  {
+    echo "$k=>$v\n";
+    var_dump($k);
+  }
+?>
+--EXPECTF--
+one=>1
+%unicode|string%(3) "one"
+two=>2
+%unicode|string%(3) "two"
+four=>4
+%unicode|string%(4) "four"
+five=>5
+%unicode|string%(4) "five"
+seven=>7
+%unicode|string%(5) "seven"
+eight=>8
+%unicode|string%(5) "eight"
+-100=>10
+int(-100)
+=>null
+%unicode|string%(0) ""
diff --git a/ext/sqlite/libsqlite/src/date.c b/ext/sqlite/libsqlite/src/date.c
index 28ef9d8..1fc8f96 100644
--- a/ext/sqlite/libsqlite/src/date.c
+++ b/ext/sqlite/libsqlite/src/date.c
@@ -16,7 +16,7 @@
 ** sqliteRegisterDateTimeFunctions() found at the bottom of the file.
 ** All other code has file scope.
 **
-** $Id: date.c,v 1.3.4.1.2.3 2007/06/07 09:07:36 tony2001 Exp $
+** $Id: date.c,v 1.3.4.1.2.5 2009/04/07 11:45:50 kalle Exp $
 **
 ** NOTES:
 **
diff --git a/ext/standard/array.c b/ext/standard/array.c
index bf11bdc..b94d8c0 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.308.2.21.2.65 2009/02/13 22:26:46 andrei Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.67 2009/05/15 17:03:43 moriyoshi Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -2839,7 +2839,7 @@ PHP_FUNCTION(array_unique)
 	};
 	struct bucketindex *arTmp, *cmpdata, *lastkept;
 	unsigned int i;
-	long sort_type = SORT_REGULAR;
+	long sort_type = SORT_STRING;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|l", &array, &sort_type) == FAILURE) {
 		return;
@@ -4204,10 +4204,6 @@ PHP_FUNCTION(array_rand)
 		num_avail--;
 		zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
 	}
-
-	if (num_req_val == num_avail) {
-		array_data_shuffle(return_value TSRMLS_CC);
-	}
 }
 /* }}} */
 
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 1b3b07c..0bc43a5 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c,v 1.725.2.31.2.80 2008/12/31 11:17:44 sebastian Exp $ */
+/* $Id: basic_functions.c,v 1.725.2.31.2.84 2009/05/20 12:09:33 jani Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -1113,7 +1113,7 @@ ZEND_BEGIN_ARG_INFO(arginfo_gethostbynamel, 0)
 	ZEND_ARG_INFO(0, hostname)
 ZEND_END_ARG_INFO()
 
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE))
+#if HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32) || defined(NETWARE))
 static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_check_record, 0, 0, 1)
 	ZEND_ARG_INFO(0, host)
@@ -1138,7 +1138,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_get_mx, 0, 0, 2)
 	ZEND_ARG_INFO(1, weight) /* ARRAY_INFO(1, weight, 1) */
 ZEND_END_ARG_INFO()
 # endif
-#endif /* HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE)) */
+#endif /* HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32) || defined(NETWARE)) */
 /* }}} */
 /* {{{ exec.c */
 static
@@ -4078,7 +4078,7 @@ PHP_MINIT_FUNCTION(basic)
 	php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);
 #endif
 
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE))
+#if HAVE_RES_SEARCH && !(defined(__BEOS__) ||defined(PHP_WIN32) || defined(NETWARE))
 # if HAVE_DNS_FUNCS
 	PHP_MINIT(dns)(INIT_FUNC_ARGS_PASSTHRU);
 # endif
@@ -4329,52 +4329,60 @@ PHP_NAMED_FUNCTION(php_inet_pton)
 /* }}} */
 #endif /* HAVE_INET_PTON */
 
-
-
 /* {{{ proto int ip2long(string ip_address)
    Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address */
 PHP_FUNCTION(ip2long)
 {
-	zval **str;
+	char *addr;
+	int addr_len;
+#ifdef HAVE_INET_PTON
+	struct in_addr ip;
+#else
 	unsigned long int ip;
+#endif
 
-	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
-		WRONG_PARAM_COUNT;
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &addr, &addr_len) == FAILURE) {
+		return;
 	}
 
-	convert_to_string_ex(str);
-
-	if (Z_STRLEN_PP(str) == 0 || (ip = inet_addr(Z_STRVAL_PP(str))) == INADDR_NONE) {
-		/* the only special case when we should return -1 ourselves,
+#ifdef HAVE_INET_PTON
+	if (addr_len == 0 || inet_pton(AF_INET, addr, &ip) != 1) {
+		RETURN_FALSE;
+	}
+	RETURN_LONG(ntohl(ip.s_addr));
+#else
+	if (addr_len == 0 || (ip = inet_addr(addr)) == INADDR_NONE) {
+		/* The only special case when we should return -1 ourselves,
 		 * because inet_addr() considers it wrong. We return 0xFFFFFFFF and
-		 * not -1 or ~0 because of 32/64bit issues.
-		 */
-		if (Z_STRLEN_PP(str) == sizeof("255.255.255.255") - 1 &&
-			!memcmp(Z_STRVAL_PP(str), "255.255.255.255", sizeof("255.255.255.255") - 1)) {
+		 * not -1 or ~0 because of 32/64bit issues. */
+		if (addr_len == sizeof("255.255.255.255") - 1 &&
+			!memcmp(addr, "255.255.255.255", sizeof("255.255.255.255") - 1)
+		) {
 			RETURN_LONG(0xFFFFFFFF);
 		}
-		
 		RETURN_FALSE;
 	}
-
 	RETURN_LONG(ntohl(ip));
+#endif
 }
 /* }}} */
 
+
 /* {{{ proto string long2ip(int proper_address)
    Converts an (IPv4) Internet network address into a string in Internet standard dotted format */
 PHP_FUNCTION(long2ip)
 {
-	zval **num;
+	/* "It's a long but it's not, PHP ints are signed */
+	char *ip;
+	int ip_len;
 	unsigned long n;
 	struct in_addr myaddr;
 
-	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
-		WRONG_PARAM_COUNT;
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ip, &ip_len) == FAILURE) {
+		return;
 	}
-	convert_to_string_ex(num);
-	
-	n = strtoul(Z_STRVAL_PP(num), NULL, 0);
+
+	n = strtoul(ip, NULL, 0);
 
 	myaddr.s_addr = htonl(n);
 	RETURN_STRING(inet_ntoa(myaddr), 1);
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index 9227cd3..f166858 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dns.c,v 1.70.2.7.2.9 2009/01/08 17:20:21 felipe Exp $ */
+/* $Id: dns.c,v 1.70.2.7.2.11 2009/05/20 12:09:33 jani Exp $ */
 
 /* {{{ includes */
 #include "php.h"
@@ -244,7 +244,7 @@ static char *php_gethostbyname(char *name)
 }
 /* }}} */
 
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE))
+#if HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32) || defined(NETWARE))
 
 /* {{{ proto int dns_check_record(string host [, string type])
    Check DNS records corresponding to a given Internet host name or IP address */
@@ -943,7 +943,7 @@ PHP_FUNCTION(dns_get_mx)
 /* }}} */
 #endif /* HAVE_DN_SKIPNAME && HAVE_DN_EXPAND */
 
-#endif /* HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE)) */
+#endif /* HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32) || defined(NETWARE)) */
 
 /*
  * Local variables:
diff --git a/ext/standard/dns.h b/ext/standard/dns.h
index 6c3788c..3b63e45 100644
--- a/ext/standard/dns.h
+++ b/ext/standard/dns.h
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dns.h,v 1.19.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
+/* $Id: dns.h,v 1.19.2.1.2.6 2009/05/20 12:09:33 jani Exp $ */
 
 #ifndef DNS_H
 #define DNS_H
@@ -31,19 +31,15 @@ PHP_FUNCTION(gethostbyaddr);
 PHP_FUNCTION(gethostbyname);
 PHP_FUNCTION(gethostbynamel);
 
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32))
-
+#if HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32) || defined(NETWARE))
 PHP_FUNCTION(dns_check_record);
 # if HAVE_DN_SKIPNAME && HAVE_DN_EXPAND
 PHP_FUNCTION(dns_get_mx);
 # endif
 
 # if HAVE_DNS_FUNCS
-
 PHP_FUNCTION(dns_get_record);
-
 PHP_MINIT_FUNCTION(dns);
-
 # endif
 #endif
 
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
index 19d2527..51278ec 100644
--- a/ext/standard/exec.c
+++ b/ext/standard/exec.c
@@ -16,7 +16,7 @@
    |         Ilia Alshanetsky <iliaa at php.net>                             |
    +----------------------------------------------------------------------+
  */
-/* $Id: exec.c,v 1.113.2.3.2.11 2008/12/31 11:17:44 sebastian Exp $ */
+/* $Id: exec.c,v 1.113.2.3.2.13 2009/04/30 15:25:05 pajoye Exp $ */
 
 #include <stdio.h>
 #include "php.h"
@@ -80,6 +80,12 @@ int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC)
 			goto err;
 		}
 		b = strrchr(cmd, PHP_DIR_SEPARATOR);
+#ifdef PHP_WIN32
+		if (b && *b == '\\' && b == cmd) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid absolute path.");
+			goto err;
+		}
+#endif
 		spprintf(&d, 0, "%s%s%s%s%s", PG(safe_mode_exec_dir), (b ? "" : "/"), (b ? b : cmd), (c ? " " : ""), (c ? c : ""));
 		if (c) {
 			*(c - 1) = ' ';
@@ -131,7 +137,9 @@ int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC)
 
 			if (type == 1) {
 				PHPWRITE(buf, bufl);
-				sapi_flush(TSRMLS_C);
+				if (OG(ob_nesting_level) < 1) {
+					sapi_flush(TSRMLS_C);
+				}
 			} else if (type == 2) {
 				/* strip trailing whitespaces */	
 				l = bufl;
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 10f987f..630c42d 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: file.c,v 1.409.2.6.2.38 2008/12/31 11:17:44 sebastian Exp $ */
+/* $Id: file.c,v 1.409.2.6.2.43 2009/05/24 16:02:22 iliaa Exp $ */
 
 /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
 
@@ -629,9 +629,15 @@ PHP_FUNCTION(file_put_contents)
 	}
 
 	switch (Z_TYPE_P(data)) {
-		case IS_RESOURCE:
-			numbytes = php_stream_copy_to_stream(srcstream, stream, PHP_STREAM_COPY_ALL);
+		case IS_RESOURCE: {
+			size_t len;
+			if (php_stream_copy_to_stream_ex(srcstream, stream, PHP_STREAM_COPY_ALL, &len) != SUCCESS) {
+				numbytes = -1;
+			} else {
+				numbytes = len;
+			}
 			break;
+		}
 		case IS_NULL:
 		case IS_LONG:
 		case IS_DOUBLE:
@@ -782,16 +788,20 @@ parse_eol:
 	 		} while ((p = memchr(p, eol_marker, (e-p))));
 	 	} else {
 	 		do {
- 				if (skip_blank_lines && !(p-s)) {
+				int windows_eol = 0;
+				if (p != target_buf && eol_marker == '\n' && *(p - 1) == '\r') {
+					windows_eol++;
+				}
+				if (skip_blank_lines && !(p-s-windows_eol)) {
  					s = ++p;
  					continue;
  				}
  				if (PG(magic_quotes_runtime)) {
  					/* s is in target_buf which is freed at the end of the function */
- 					slashed = php_addslashes(s, (p-s), &len, 0 TSRMLS_CC);
+					slashed = php_addslashes(s, (p-s-windows_eol), &len, 0 TSRMLS_CC);
  					add_index_stringl(return_value, i++, slashed, len, 0);
  				} else {
- 					add_index_stringl(return_value, i++, estrndup(s, p-s), p-s, 0);
+					add_index_stringl(return_value, i++, estrndup(s, p-s-windows_eol), p-s-windows_eol, 0);
 				}
  				s = ++p;
 	 		} while ((p = memchr(p, eol_marker, (e-p))));
@@ -1836,7 +1846,7 @@ safe_to_copy:
 	deststream = php_stream_open_wrapper(dest, "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
 
 	if (srcstream && deststream) {
-		ret = php_stream_copy_to_stream(srcstream, deststream, PHP_STREAM_COPY_ALL) == 0 ? FAILURE : SUCCESS;
+		ret = php_stream_copy_to_stream_ex(srcstream, deststream, PHP_STREAM_COPY_ALL, NULL);
 	}
 	if (srcstream) {
 		php_stream_close(srcstream);
@@ -2129,6 +2139,7 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, size
 
 	size_t temp_len, line_end_len;
 	int inc_len;
+	zend_bool first_field = 1;
 
 	/* initialize internal state */
 	php_mblen(NULL, 0);
@@ -2180,6 +2191,11 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, size
 		}
 
 	quit_loop_1:
+		if (first_field && bptr == line_end) {
+			add_next_index_null(return_value);
+			break;
+		}
+		first_field = 0;
 		/* 2. Read field, leaving bptr pointing at start of next field */
 		if (inc_len != 0 && *bptr == enclosure) {
 			int state = 0;
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index 022ce86..a51ad91 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -19,7 +19,7 @@
    |          Sara Golemon <pollita at php.net>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.13 2008/12/31 11:17:45 sebastian Exp $ */ 
+/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.19 2009/05/28 13:20:22 lbarnaud Exp $ */ 
 
 #include "php.h"
 #include "php_globals.h"
@@ -81,7 +81,10 @@
 #define HTTP_HEADER_CONTENT_LENGTH	16
 #define HTTP_HEADER_TYPE			32
 
-php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context, int redirect_max, int header_init STREAMS_DC TSRMLS_DC)
+#define HTTP_WRAPPER_HEADER_INIT    1
+#define HTTP_WRAPPER_REDIRECTED     2
+
+php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context, int redirect_max, int flags STREAMS_DC TSRMLS_DC) /* {{{ */
 {
 	php_stream *stream = NULL;
 	php_url *resource = NULL;
@@ -101,11 +104,13 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 	size_t chunk_size = 0, file_size = 0;
 	int eol_detect = 0;
 	char *transport_string, *errstr = NULL;
-	int transport_len, have_header = 0, request_fulluri = 0;
+	int transport_len, have_header = 0, request_fulluri = 0, ignore_errors = 0;
 	char *protocol_version = NULL;
 	int protocol_version_len = 3; /* Default: "1.0" */
 	struct timeval timeout;
 	char *user_headers = NULL;
+	int header_init = ((flags & HTTP_WRAPPER_HEADER_INIT) != 0);
+	int redirected = ((flags & HTTP_WRAPPER_REDIRECTED) != 0);
 
 	tmp_line[0] = '\0';
 
@@ -251,10 +256,17 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 
 	if (context && php_stream_context_get_option(context, "http", "method", &tmpzval) == SUCCESS) {
 		if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval) > 0) {
-			scratch_len = strlen(path) + 29 + Z_STRLEN_PP(tmpzval);
-			scratch = emalloc(scratch_len);
-			strlcpy(scratch, Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval) + 1);
-			strcat(scratch, " ");
+			/* As per the RFC, automatically redirected requests MUST NOT use other methods than
+			 * GET and HEAD unless it can be confirmed by the user */
+			if (!redirected
+				|| (Z_STRLEN_PP(tmpzval) == 3 && memcmp("GET", Z_STRVAL_PP(tmpzval), 3) == 0)
+				|| (Z_STRLEN_PP(tmpzval) == 4 && memcmp("HEAD",Z_STRVAL_PP(tmpzval), 4) == 0)
+			) {
+				scratch_len = strlen(path) + 29 + Z_STRLEN_PP(tmpzval);
+				scratch = emalloc(scratch_len);
+				strlcpy(scratch, Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval) + 1);
+				strcat(scratch, " ");
+			}
 		}
 	}
  
@@ -317,13 +329,31 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 	/* send it */
 	php_stream_write(stream, scratch, strlen(scratch));
 
-	if (context &&
-		php_stream_context_get_option(context, "http", "header", &tmpzval) == SUCCESS &&
-		Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) {
-		/* Remove newlines and spaces from start and end,
-		   php_trim will estrndup() */
-		tmp = php_trim(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval), NULL, 0, NULL, 3 TSRMLS_CC);
-		if (strlen(tmp) > 0) {
+	if (context && php_stream_context_get_option(context, "http", "header", &tmpzval) == SUCCESS) {
+		tmp = NULL;
+		
+		if (Z_TYPE_PP(tmpzval) == IS_ARRAY) {
+			HashPosition pos;
+			zval **tmpheader = NULL;
+			smart_str tmpstr = {0};
+
+			for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(tmpzval), &pos);
+				SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(tmpzval), (void *)&tmpheader, &pos);
+				zend_hash_move_forward_ex(Z_ARRVAL_PP(tmpzval), &pos)
+			) {
+				if (Z_TYPE_PP(tmpheader) == IS_STRING) {
+					smart_str_appendl(&tmpstr, Z_STRVAL_PP(tmpheader), Z_STRLEN_PP(tmpheader));
+					smart_str_appendl(&tmpstr, "\r\n", sizeof("\r\n") - 1);
+				}
+			}
+			smart_str_0(&tmpstr);
+			tmp = tmpstr.c;
+		}
+		if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) {
+			/* Remove newlines and spaces from start and end php_trim will estrndup() */
+			tmp = php_trim(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval), NULL, 0, NULL, 3 TSRMLS_CC);
+		}
+		if (tmp && strlen(tmp) > 0) {
 			if (!header_init) { /* Remove post headers for redirects */
 				int l = strlen(tmp);
 				char *s, *s2, *tmp_c = estrdup(tmp);
@@ -376,7 +406,9 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 				 have_header |= HTTP_HEADER_TYPE;
 			}
 		}
-		efree(tmp);
+		if (tmp) {
+			efree(tmp);
+		}
 	}
 
 	/* auth header if it was specified */
@@ -390,7 +422,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 		strcat(scratch, ":");
 		strcat(scratch, resource->pass);
 
-		tmp = php_base64_encode((unsigned char*)scratch, strlen(scratch), NULL);
+		tmp = (char*)php_base64_encode((unsigned char*)scratch, strlen(scratch), NULL);
 		
 		if (snprintf(scratch, scratch_len, "Authorization: Basic %s\r\n", tmp) > 0) {
 			php_stream_write(stream, scratch, strlen(scratch));
@@ -520,8 +552,11 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 			} else {
 				response_code = 0;
 			}
+			if (context && SUCCESS==php_stream_context_get_option(context, "http", "ignore_errors", &tmpzval)) {
+				ignore_errors = zend_is_true(*tmpzval);
+			}
 			/* when we request only the header, don't fail even on error codes */
-			if (options & STREAM_ONLY_GET_HEADERS) {
+			if ((options & STREAM_ONLY_GET_HEADERS) || ignore_errors) {
 				reqok = 1;
 			}
 			switch(response_code) {
@@ -599,7 +634,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 	}
 	
 	if (!reqok || location[0] != '\0') {
-		if (options & STREAM_ONLY_GET_HEADERS && redirect_max <= 1) {
+		if (((options & STREAM_ONLY_GET_HEADERS) || ignore_errors) && redirect_max <= 1) {
 			goto out;
 		}
 
@@ -665,7 +700,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 		unsigned char *s, *e;	\
 		int l;	\
 		l = php_url_decode(val, strlen(val));	\
-		s = val; e = s + l;	\
+		s = (unsigned char*)val; e = s + l;	\
 		while (s < e) {	\
 			if (iscntrl(*s)) {	\
 				php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Invalid redirect URL! %s", new_path);	\
@@ -681,7 +716,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
 				CHECK_FOR_CNTRL_CHARS(resource->pass)
 				CHECK_FOR_CNTRL_CHARS(resource->path)
 			}
-			stream = php_stream_url_wrap_http_ex(wrapper, new_path, mode, options, opened_path, context, --redirect_max, 0 STREAMS_CC TSRMLS_CC);
+			stream = php_stream_url_wrap_http_ex(wrapper, new_path, mode, options, opened_path, context, --redirect_max, HTTP_WRAPPER_REDIRECTED STREAMS_CC TSRMLS_CC);
 		} else {
 			php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "HTTP request failed! %s", tmp_line);
 		}
@@ -724,22 +759,22 @@ out:
 
 	return stream;
 }
+/* }}} */
 
-php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
+php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC) /* {{{ */
 {
-	return php_stream_url_wrap_http_ex(wrapper, path, mode, options, opened_path, context, PHP_URL_REDIRECT_MAX, 1 STREAMS_CC TSRMLS_CC);
+	return php_stream_url_wrap_http_ex(wrapper, path, mode, options, opened_path, context, PHP_URL_REDIRECT_MAX, HTTP_WRAPPER_HEADER_INIT STREAMS_CC TSRMLS_CC);
 }
+/* }}} */
 
-static int php_stream_http_stream_stat(php_stream_wrapper *wrapper,
-		php_stream *stream,
-		php_stream_statbuf *ssb
-		TSRMLS_DC)
+static int php_stream_http_stream_stat(php_stream_wrapper *wrapper, php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC) /* {{{ */
 {
 	/* one day, we could fill in the details based on Date: and Content-Length:
 	 * headers.  For now, we return with a failure code to prevent the underlying
 	 * file's details from being used instead. */
 	return -1;
 }
+/* }}} */
 
 static php_stream_wrapper_ops http_stream_wops = {
 	php_stream_url_wrap_http,
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 4000150..546a22f 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mail.c,v 1.87.2.1.2.11 2008/12/31 11:17:45 sebastian Exp $ */
+/* $Id: mail.c,v 1.87.2.1.2.12 2009/04/15 14:25:06 iliaa Exp $ */
 
 #include <stdlib.h>
 #include <ctype.h>
@@ -73,7 +73,7 @@
 PHP_FUNCTION(ezmlm_hash)
 {
 	char *str = NULL;
-	unsigned long h = 5381L;
+	unsigned int h = 5381;
 	int j, str_len;
 	
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
diff --git a/ext/standard/microtime.c b/ext/standard/microtime.c
index 9be2445..20da11c 100644
--- a/ext/standard/microtime.c
+++ b/ext/standard/microtime.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: microtime.c,v 1.53.2.2.2.5 2008/12/31 11:17:45 sebastian Exp $ */
+/* $Id: microtime.c,v 1.53.2.2.2.6 2009/05/21 14:21:53 lbarnaud Exp $ */
 
 #include "php.h"
 
@@ -54,13 +54,12 @@ static void _php_gettimeofday(INTERNAL_FUNCTION_PARAMETERS, int mode)
 {
 	zend_bool get_as_float = 0;
 	struct timeval tp = {0};
-	struct timezone tz = {0};
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &get_as_float) == FAILURE) {
 		return;
 	}
 
-	if (gettimeofday(&tp, &tz)) {
+	if (gettimeofday(&tp, NULL)) {
 		RETURN_FALSE;
 	}
 
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
index d0c01cc..51172de 100644
--- a/ext/standard/pack.c
+++ b/ext/standard/pack.c
@@ -15,7 +15,7 @@
    | Author: Chris Schneider <cschneid at relog.ch>                          |
    +----------------------------------------------------------------------+
  */
-/* $Id: pack.c,v 1.57.2.5.2.8 2008/12/31 11:17:45 sebastian Exp $ */
+/* $Id: pack.c,v 1.57.2.5.2.9 2009/05/12 12:35:45 iliaa Exp $ */
 
 #include "php.h"
 
@@ -799,6 +799,13 @@ PHP_FUNCTION(unpack)
 						}
 
 						v |= php_unpack(&input[inputpos], 4, issigned, map);
+						if (sizeof(long) > 4) {
+ 							if (type == 'l') {
+								v = (signed int) v; 
+							} else {
+								v = (unsigned int) v;
+							}
+						}
 						add_assoc_long(return_value, n, v);
 						break;
 					}
diff --git a/ext/standard/reg.c b/ext/standard/reg.c
index e95e65a..436553d 100644
--- a/ext/standard/reg.c
+++ b/ext/standard/reg.c
@@ -17,7 +17,7 @@
    |          Jaakko Hyvätti <jaakko at hyvatti.iki.fi>                      | 
    +----------------------------------------------------------------------+
  */
-/* $Id: reg.c,v 1.82.2.3.2.6 2008/12/31 11:17:45 sebastian Exp $ */
+/* $Id: reg.c,v 1.82.2.3.2.7 2009/05/29 00:03:28 scottmac Exp $ */
 
 #include <stdio.h>
 #include <ctype.h>
@@ -31,9 +31,43 @@ ZEND_DECLARE_MODULE_GLOBALS(reg)
 typedef struct {
 	regex_t preg;
 	int cflags;
+	unsigned int lastuse;
 } reg_cache;
 
 static int reg_magic = 0;
+#define EREG_CACHE_SIZE 4096
+
+/* {{{ ereg_lru_cmp */
+static int ereg_lru_cmp(const void *a, const void *b TSRMLS_DC)
+{
+	Bucket *f = *((Bucket **) a);
+	Bucket *s = *((Bucket **) b);
+
+	if (((reg_cache *)f->pData)->lastuse <
+				((reg_cache *)s->pData)->lastuse) {
+		return -1;
+	} else if (((reg_cache *)f->pData)->lastuse ==
+				((reg_cache *)s->pData)->lastuse) {
+		return 0;
+	} else {
+		return 1;
+	}
+}
+/* }}} */
+
+/* {{{ static ereg_clean_cache */
+static int ereg_clean_cache(void *data, void *arg TSRMLS_DC)
+{
+	int *num_clean = (int *)arg;
+
+	if (*num_clean > 0) {
+		(*num_clean)--;
+		return ZEND_HASH_APPLY_REMOVE;
+	} else {
+		return ZEND_HASH_APPLY_STOP;
+	}
+}
+/* }}} */
 
 /* {{{ _php_regcomp
  */
@@ -43,7 +77,17 @@ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
 	int patlen = strlen(pattern);
 	reg_cache *rc = NULL;
 	TSRMLS_FETCH();
-	
+
+	if (zend_hash_num_elements(&REG(ht_rc)) >= EREG_CACHE_SIZE) {
+		if (REG(lru_counter) >= (1 << 31) || zend_hash_sort(&REG(ht_rc), zend_qsort, ereg_lru_cmp, 0 TSRMLS_CC) == FAILURE) {
+			zend_hash_clean(&REG(ht_rc));
+			REG(lru_counter) = 0;
+		} else {
+			int num_clean = EREG_CACHE_SIZE / 2;
+			zend_hash_apply_with_argument(&REG(ht_rc), ereg_clean_cache, &num_clean TSRMLS_CC);
+		}
+	}
+
 	if(zend_hash_find(&REG(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == SUCCESS
 	   && rc->cflags == cflags) {
 #ifdef HAVE_REGEX_T_RE_MAGIC
@@ -53,6 +97,7 @@ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
 		 */
 		if (rc->preg.re_magic != reg_magic) {
 			zend_hash_clean(&REG(ht_rc));
+			REG(lru_counter) = 0;
 		} else {
 			memcpy(preg, &rc->preg, sizeof(*preg));
 			return r;
@@ -64,6 +109,7 @@ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
 		reg_cache rcp;
 
 		rcp.cflags = cflags;
+		rcp.lastuse = ++(REG(lru_counter));
 		memcpy(&rcp.preg, preg, sizeof(*preg));
 		/*
 		 * Since we don't have access to the actual MAGIC1 definition in the private
@@ -82,6 +128,7 @@ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
 			reg_cache rcp;
 
 			rcp.cflags = cflags;
+			rcp.lastuse = ++(REG(lru_counter));
 			memcpy(&rcp.preg, preg, sizeof(*preg));
 			zend_hash_update(&REG(ht_rc), (char *) pattern, patlen+1,
 							 (void *) &rcp, sizeof(rcp), NULL);
@@ -105,6 +152,7 @@ static void _free_reg_cache(reg_cache *rc)
 static void php_reg_init_globals(zend_reg_globals *reg_globals TSRMLS_DC)
 {
 	zend_hash_init(&reg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_reg_cache, 1);
+	reg_globals->lru_counter = 0;
 }
 
 static void php_reg_destroy_globals(zend_reg_globals *reg_globals TSRMLS_DC)
diff --git a/ext/standard/reg.h b/ext/standard/reg.h
index 12c490e..3812e33 100644
--- a/ext/standard/reg.h
+++ b/ext/standard/reg.h
@@ -17,7 +17,7 @@
 */
 
 
-/* $Id: reg.h,v 1.21.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
+/* $Id: reg.h,v 1.21.2.1.2.4 2009/05/29 00:03:28 scottmac Exp $ */
 
 #ifndef REG_H
 #define REG_H
@@ -34,6 +34,7 @@ PHPAPI PHP_FUNCTION(sql_regcase);
 
 ZEND_BEGIN_MODULE_GLOBALS(reg)
 	HashTable ht_rc;
+	unsigned int lru_counter;
 ZEND_END_MODULE_GLOBALS(reg)
 
 PHP_MINIT_FUNCTION(regex);
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index 2dedc8d..f114b65 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: streamsfuncs.c,v 1.58.2.6.2.31 2009/01/08 17:03:42 lbarnaud Exp $ */
+/* $Id: streamsfuncs.c,v 1.58.2.6.2.33 2009/04/19 17:10:52 lbarnaud Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -437,6 +437,8 @@ PHP_FUNCTION(stream_copy_to_stream)
 	php_stream *src, *dest;
 	zval *zsrc, *zdest;
 	long maxlen = PHP_STREAM_COPY_ALL, pos = 0;
+	size_t len;
+	int ret;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|ll", &zsrc, &zdest, &maxlen, &pos) == FAILURE) {
 		RETURN_FALSE;
@@ -450,7 +452,12 @@ PHP_FUNCTION(stream_copy_to_stream)
 		RETURN_FALSE;
 	}
 
-	RETURN_LONG(php_stream_copy_to_stream(src, dest, maxlen));
+	ret = php_stream_copy_to_stream_ex(src, dest, maxlen, &len);
+
+	if (ret != SUCCESS) {
+		RETURN_FALSE;
+	}
+	RETURN_LONG(len);
 }
 /* }}} */
 
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 5feca51..dd66edc 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c,v 1.445.2.14.2.81 2009/02/14 07:00:24 moriyoshi Exp $ */
+/* $Id: string.c,v 1.445.2.14.2.83 2009/04/01 17:07:46 mattwil Exp $ */
 
 /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
 
diff --git a/ext/standard/strnatcmp.c b/ext/standard/strnatcmp.c
index 84351f9..f6abfb5 100644
--- a/ext/standard/strnatcmp.c
+++ b/ext/standard/strnatcmp.c
@@ -38,7 +38,7 @@
 
 #if 0
 static char const *version UNUSED =
-    "$Id: strnatcmp.c,v 1.10 2004/07/15 01:26:03 iliaa Exp $";
+    "$Id: strnatcmp.c,v 1.10.6.2 2009/04/09 16:04:15 rasmus Exp $";
 #endif
 /* {{{ compare_right
  */
@@ -116,10 +116,10 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len
 		ca = *ap; cb = *bp;
 
 		/* skip over leading spaces or zeros */
-		while (isspace((int)(unsigned char)ca))
+		while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && (*(ap+1)!='.')))
 			ca = *++ap;
 
-		while (isspace((int)(unsigned char)cb))
+		while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && (*(bp+1)!='.')))
 			cb = *++bp;
 
 		/* process run of digits */
diff --git a/ext/standard/tests/array/array_count_values_variation.phpt b/ext/standard/tests/array/array_count_values_variation.phpt
index efd3c81..906b2e3 100644
--- a/ext/standard/tests/array/array_count_values_variation.phpt
+++ b/ext/standard/tests/array/array_count_values_variation.phpt
@@ -22,17 +22,19 @@ class A {
 
 $ob = new A();
 
-$fp = fopen("array_count_file", "w+");
+$fp = fopen(dirname(__FILE__) . "/array_count_file", "w+");
 
 $arrays = array ("bobk" => "bobv", "val", 6 => "val6",  $fp, $ob);
 
 var_dump (@array_count_values ($arrays));
-echo "\n";
 
-
-echo "Done";
+fclose($fp);
+echo "\nDone\n";
+?>
+--CLEAN--
+<?php
+unlink (dirname(__FILE__) . "/array_count_file");
 ?>
-
 --EXPECTF--
 *** Testing array_count_values() : parameter variations ***
 array(3) {
@@ -44,4 +46,4 @@ array(3) {
   int(1)
 }
 
-Done
\ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/array_multisort_variation11.phpt b/ext/standard/tests/array/array_multisort_variation11.phpt
new file mode 100644
index 0000000..520dd3d
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation11.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test array_multisort() function : usage variation - testing with empty array
+--FILE--
+<?php
+/* Prototype  : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : Testing with empty array ***\n";
+
+var_dump(array_multisort(array()));
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+*** Testing array_multisort() : Testing with empty array ***
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/array/array_push_error2.phpt b/ext/standard/tests/array/array_push_error2.phpt
index 86f8df7..e0c8bd3 100644
--- a/ext/standard/tests/array/array_push_error2.phpt
+++ b/ext/standard/tests/array/array_push_error2.phpt
@@ -1,9 +1,5 @@
 --TEST--
-Test array_push() function : error conditions - min and max int values as keys
---SKIPIF--
-<?php
-if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
-?>
+Test array_push() function : error conditions - max int value as key
 --FILE--
 <?php
 /* Prototype  : int array_push(array $stack, mixed $var [, mixed $...])
@@ -12,42 +8,27 @@ if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
  */
 
 /*
- * Use PHP's minimum and maximum integer values as array keys
+ * Use PHP's maximum integer value as array key
  * then try and push new elements onto the array
  */
 
 echo "*** Testing array_push() : error conditions ***\n";
 
-$array = array(-PHP_INT_MAX => 'min', PHP_INT_MAX => 'max');
+$array = array(PHP_INT_MAX => 'max');
 
 var_dump(array_push($array, 'new'));
 var_dump($array);
-var_dump(array_push($array, 'var'));
-var_dump($array);
 
 echo "Done";
 ?>
 
 --EXPECTF--
 *** Testing array_push() : error conditions ***
-int(3)
-array(3) {
-  [-2147483647]=>
-  string(3) "min"
-  [2147483647]=>
-  string(3) "max"
-  [-2147483648]=>
-  string(3) "new"
-}
 
 Warning: array_push(): Cannot add element to the array as the next element is already occupied in %s on line %d
 bool(false)
-array(3) {
-  [-2147483647]=>
-  string(3) "min"
-  [2147483647]=>
+array(1) {
+  [%d]=>
   string(3) "max"
-  [-2147483648]=>
-  string(3) "new"
 }
 Done
diff --git a/ext/standard/tests/array/bug44929.phpt b/ext/standard/tests/array/bug44929.phpt
new file mode 100644
index 0000000..dd2b0db
--- /dev/null
+++ b/ext/standard/tests/array/bug44929.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #44929 (natsort doesn't handle leading zeros well)
+--FILE--
+<?php
+$a = array('001','008','005','00011','03','000014','-123','0.002','00','0');
+natsort($a);
+var_dump($a);
+?>
+--EXPECT--
+array(10) {
+  [6]=>
+  string(4) "-123"
+  [8]=>
+  string(2) "00"
+  [9]=>
+  string(1) "0"
+  [7]=>
+  string(5) "0.002"
+  [0]=>
+  string(3) "001"
+  [4]=>
+  string(2) "03"
+  [2]=>
+  string(3) "005"
+  [1]=>
+  string(3) "008"
+  [3]=>
+  string(5) "00011"
+  [5]=>
+  string(6) "000014"
+}
diff --git a/ext/standard/tests/array/bug48224.phpt b/ext/standard/tests/array/bug48224.phpt
new file mode 100644
index 0000000..5b46e18
--- /dev/null
+++ b/ext/standard/tests/array/bug48224.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #48224 (array_rand no longer shuffles)
+--FILE--
+<?php
+$a = range(0, 100);
+$a1 = array_rand($a, count($a));
+$a2 = array_rand($a, count($a));
+$a3 = array_rand($a, count($a));
+$a4 = array_rand($a, count($a));
+
+var_dump($a1 === $a2 && $a1 === $a3 && $a1 === $a4);
+
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/assert/assert02.phpt b/ext/standard/tests/assert/assert02.phpt
index f3d00a3..1748029 100644
--- a/ext/standard/tests/assert/assert02.phpt
+++ b/ext/standard/tests/assert/assert02.phpt
@@ -1,6 +1,6 @@
 --TEST--
 catch assert() errors
----INI---
+--INI--
 assert.active = 1
 assert.warning = 1
 assert.callback = 
diff --git a/ext/standard/tests/assert/assert03.phpt b/ext/standard/tests/assert/assert03.phpt
index 3fe6abd..d839414 100644
--- a/ext/standard/tests/assert/assert03.phpt
+++ b/ext/standard/tests/assert/assert03.phpt
@@ -1,6 +1,6 @@
 --TEST--
 assert() - set callback using ini_set()
----INI---
+--INI--
 assert.active = 1
 assert.warning = 0
 assert.callback = 
diff --git a/ext/standard/tests/assert/assert04.phpt b/ext/standard/tests/assert/assert04.phpt
index dbd2d8d..a81db6c 100644
--- a/ext/standard/tests/assert/assert04.phpt
+++ b/ext/standard/tests/assert/assert04.phpt
@@ -1,6 +1,6 @@
 --TEST--
 misc assert() tests tests
----INI---
+--INI--
 assert.active = 1
 assert.warning = 1
 assert.callback = 
diff --git a/ext/standard/tests/class_object/AutoInterface.inc b/ext/standard/tests/class_object/AutoInterface.inc
new file mode 100644
index 0000000..f1e5b1f
--- /dev/null
+++ b/ext/standard/tests/class_object/AutoInterface.inc
@@ -0,0 +1,5 @@
+<?php
+
+Interface AutoInterface {}
+
+?>
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/AutoLoaded.inc b/ext/standard/tests/class_object/AutoLoaded.inc
new file mode 100644
index 0000000..52e6671
--- /dev/null
+++ b/ext/standard/tests/class_object/AutoLoaded.inc
@@ -0,0 +1,5 @@
+<?php
+
+class AutoLoaded {}
+
+?>
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/AutoTest.inc b/ext/standard/tests/class_object/AutoTest.inc
new file mode 100644
index 0000000..0627096
--- /dev/null
+++ b/ext/standard/tests/class_object/AutoTest.inc
@@ -0,0 +1,13 @@
+<?php
+
+class autoTest {
+  public static $bob = "bob";
+  
+    public function __get($name) {
+    echo "attempt to access $name\n";
+    return "foo";
+  }
+  
+}
+
+?>
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_vars_error.phpt b/ext/standard/tests/class_object/get_class_vars_error.phpt
new file mode 100644
index 0000000..0399e60
--- /dev/null
+++ b/ext/standard/tests/class_object/get_class_vars_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test get_class_vars() function : error conditions
+--FILE--
+<?php
+/* Prototype  : array get_class_vars(string class_name)
+ * Description: Returns an array of default properties of the class.
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing get_class_vars() : error conditions ***\n";
+
+
+//Test get_class_vars with one more than the expected number of arguments
+echo "\n-- Testing get_class_vars() function with more than expected no. of arguments --\n";
+$obj = new stdclass();
+$extra_arg = 10;
+var_dump(get_class_vars($obj,$extra_arg) );
+
+// Testing get_class_vars with one less than the expected number of arguments
+echo "\n-- Testing get_class_vars() function with less than expected no. of arguments --\n";
+var_dump(get_class_vars());
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_class_vars() : error conditions ***
+
+-- Testing get_class_vars() function with more than expected no. of arguments --
+
+Warning: get_class_vars() expects exactly 1 parameter, 2 given in %sget_class_vars_error.php on line %d
+NULL
+
+-- Testing get_class_vars() function with less than expected no. of arguments --
+
+Warning: get_class_vars() expects exactly 1 parameter, 0 given in %sget_class_vars_error.php on line %d
+NULL
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_vars_variation1.phpt b/ext/standard/tests/class_object/get_class_vars_variation1.phpt
new file mode 100644
index 0000000..649e9ae
--- /dev/null
+++ b/ext/standard/tests/class_object/get_class_vars_variation1.phpt
@@ -0,0 +1,181 @@
+--TEST--
+Test get_class_vars() function : usage variation 
+--FILE--
+<?php
+/* Prototype  : array get_class_vars(string class_name)
+ * Description: Returns an array of default properties of the class. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_class_vars() : usage variation ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -2345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float 12.3456789000e10' => 12.3456789000e10,
+      'float -12.3456789000e10' => -12.3456789000e10,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for method_name
+
+foreach($inputs as $key =>$value) {
+      echo "\n--$key--\n";
+      var_dump( get_class_vars($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_class_vars() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+
+Warning: get_class_vars() expects parameter 1 to be string, array given in %sget_class_vars_variation1.php on line %d
+NULL
+
+--int indexed array--
+
+Warning: get_class_vars() expects parameter 1 to be string, array given in %sget_class_vars_variation1.php on line %d
+NULL
+
+--associative array--
+
+Warning: get_class_vars() expects parameter 1 to be string, array given in %sget_class_vars_variation1.php on line %d
+NULL
+
+--nested arrays--
+
+Warning: get_class_vars() expects parameter 1 to be string, array given in %sget_class_vars_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: get_class_vars() expects parameter 1 to be string, object given in %sget_class_vars_variation1.php on line %d
+NULL
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/class_object/get_class_vars_variation2.phpt b/ext/standard/tests/class_object/get_class_vars_variation2.phpt
new file mode 100644
index 0000000..fad5716
--- /dev/null
+++ b/ext/standard/tests/class_object/get_class_vars_variation2.phpt
@@ -0,0 +1,168 @@
+--TEST--
+Test get_class_vars() function : testing visibility 
+--FILE--
+<?php
+/* Prototype  : array get_class_vars(string class_name)
+ * Description: Returns an array of default properties of the class. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+class Ancestor {
+  function test() {
+    var_dump(get_class_vars("Tester"));
+  }
+  
+  static function testStatic() {
+    var_dump(get_class_vars("Tester"));
+  }
+}
+
+class Tester extends Ancestor {
+  public $pub = "public var";
+  protected $prot = "protected var";
+  private $priv = "private var";
+  
+  static public $pubs = "public static var";
+  static protected $prots = "protected static var";
+  static private $privs = "private static var";
+  
+  function test() {
+    var_dump(get_class_vars("Tester"));
+  }
+  
+  static function testStatic() {
+    var_dump(get_class_vars("Tester"));
+  }
+}
+
+class Child extends Tester {
+  function test() {
+    var_dump(get_class_vars("Tester"));
+  }
+  
+  static function testStatic() {
+    var_dump(get_class_vars("Tester"));
+  }
+}
+
+echo "*** Testing get_class_vars() : testing visibility\n";
+
+echo "\n-- From global context --\n";
+var_dump(get_class_vars("Tester"));
+
+echo "\n-- From inside an object instance --\n";
+$instance = new Tester();
+$instance->test();
+
+echo "\n-- From  a static context --\n";
+Tester::testStatic();
+
+
+echo "\n-- From inside an  parent object instance --\n";
+$parent = new Ancestor();
+$parent->test();
+
+echo "\n-- From a parents static context --\n";
+Ancestor::testStatic();
+
+
+echo "\n-- From inside a child object instance --\n";
+$child = new Child();
+$child->test();
+
+echo "\n-- From a child's static context --\n";
+Child::testStatic();
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_class_vars() : testing visibility
+
+-- From global context --
+array(2) {
+  ["pub"]=>
+  string(10) "public var"
+  ["pubs"]=>
+  string(17) "public static var"
+}
+
+-- From inside an object instance --
+array(6) {
+  ["pub"]=>
+  string(10) "public var"
+  ["prot"]=>
+  string(13) "protected var"
+  ["priv"]=>
+  string(11) "private var"
+  ["pubs"]=>
+  string(17) "public static var"
+  ["prots"]=>
+  string(20) "protected static var"
+  ["privs"]=>
+  string(18) "private static var"
+}
+
+-- From  a static context --
+array(6) {
+  ["pub"]=>
+  string(10) "public var"
+  ["prot"]=>
+  string(13) "protected var"
+  ["priv"]=>
+  string(11) "private var"
+  ["pubs"]=>
+  string(17) "public static var"
+  ["prots"]=>
+  string(20) "protected static var"
+  ["privs"]=>
+  string(18) "private static var"
+}
+
+-- From inside an  parent object instance --
+array(4) {
+  ["pub"]=>
+  string(10) "public var"
+  ["prot"]=>
+  string(13) "protected var"
+  ["pubs"]=>
+  string(17) "public static var"
+  ["prots"]=>
+  string(20) "protected static var"
+}
+
+-- From a parents static context --
+array(4) {
+  ["pub"]=>
+  string(10) "public var"
+  ["prot"]=>
+  string(13) "protected var"
+  ["pubs"]=>
+  string(17) "public static var"
+  ["prots"]=>
+  string(20) "protected static var"
+}
+
+-- From inside a child object instance --
+array(4) {
+  ["pub"]=>
+  string(10) "public var"
+  ["prot"]=>
+  string(13) "protected var"
+  ["pubs"]=>
+  string(17) "public static var"
+  ["prots"]=>
+  string(20) "protected static var"
+}
+
+-- From a child's static context --
+array(4) {
+  ["pub"]=>
+  string(10) "public var"
+  ["prot"]=>
+  string(13) "protected var"
+  ["pubs"]=>
+  string(17) "public static var"
+  ["prots"]=>
+  string(20) "protected static var"
+}
+===DONE===
diff --git a/ext/standard/tests/class_object/get_declared_classes_variation1.phpt b/ext/standard/tests/class_object/get_declared_classes_variation1.phpt
new file mode 100644
index 0000000..259f5dc
--- /dev/null
+++ b/ext/standard/tests/class_object/get_declared_classes_variation1.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test get_declared_classes() function : testing autoloaded classes 
+--FILE--
+<?php
+/* Prototype  : proto array get_declared_classes()
+ * Description: Returns an array of all declared classes. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+
+echo "*** Testing get_declared_classes() : testing autoloaded classes ***\n";
+
+function __autoload($class_name) {
+    require_once $class_name . '.inc';
+}
+
+echo "\n-- before instance is declared --\n";
+var_dump(in_array('AutoLoaded', get_declared_classes()));
+
+echo "\n-- after instance is declared --\n";
+$class = new AutoLoaded();
+var_dump(in_array('AutoLoaded', get_declared_classes()));
+
+echo "\nDONE\n";
+
+?>
+--EXPECTF--
+*** Testing get_declared_classes() : testing autoloaded classes ***
+
+-- before instance is declared --
+bool(false)
+
+-- after instance is declared --
+bool(true)
+
+DONE
diff --git a/ext/standard/tests/class_object/get_declared_interfaces_variation1.phpt b/ext/standard/tests/class_object/get_declared_interfaces_variation1.phpt
new file mode 100644
index 0000000..56e6161
--- /dev/null
+++ b/ext/standard/tests/class_object/get_declared_interfaces_variation1.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test get_declared_interfaces() function : autoloading of interfaces
+--FILE--
+<?php
+/* Prototype  : proto array get_declared_interfaces()
+ * Description: Returns an array of all declared interfaces. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+
+echo "*** Testing get_declared_interfaces() : autoloading of interfaces ***\n";
+
+function __autoload($class_name) {
+    require_once $class_name . '.inc';
+}
+
+echo "\n-- before interface is used --\n";
+var_dump(in_array('AutoInterface', get_declared_interfaces()));
+
+
+echo "\n-- after interface is used --\n";
+class Implementor implements AutoInterface {}
+var_dump(in_array('AutoInterface', get_declared_interfaces()));
+
+echo "\nDONE\n";
+?>
+--EXPECTF--
+*** Testing get_declared_interfaces() : autoloading of interfaces ***
+
+-- before interface is used --
+bool(false)
+
+-- after interface is used --
+bool(true)
+
+DONE
diff --git a/ext/standard/tests/class_object/interface_exists_error.phpt b/ext/standard/tests/class_object/interface_exists_error.phpt
new file mode 100644
index 0000000..bf95a43
--- /dev/null
+++ b/ext/standard/tests/class_object/interface_exists_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test interface_exists() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : bool interface_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing interface_exists() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing interface_exists() function with Zero arguments --\n";
+var_dump( interface_exists() );
+
+//Test interface_exists with one more than the expected number of arguments
+echo "\n-- Testing interface_exists() function with more than expected no. of arguments --\n";
+$classname = 'string_val';
+$autoload = true;
+$extra_arg = 10;
+var_dump( interface_exists($classname, $autoload, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing interface_exists() : error conditions ***
+
+-- Testing interface_exists() function with Zero arguments --
+
+Warning: interface_exists() expects at least 1 parameter, 0 given in %sinterface_exists_error.php on line %d
+NULL
+
+-- Testing interface_exists() function with more than expected no. of arguments --
+
+Warning: interface_exists() expects at most 2 parameters, 3 given in %sinterface_exists_error.php on line %d
+NULL
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/interface_exists_variation1.phpt b/ext/standard/tests/class_object/interface_exists_variation1.phpt
new file mode 100644
index 0000000..34d0e1e
--- /dev/null
+++ b/ext/standard/tests/class_object/interface_exists_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test interface_exists() function : usage variation 
+--FILE--
+<?php
+/* Prototype  : bool interface_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing interface_exists() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$autoload = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -2345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float 12.3456789000e10' => 12.3456789000e10,
+      'float -12.3456789000e10' => -12.3456789000e10,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for classname
+
+foreach($inputs as $key =>$value) {
+      echo "\n--$key--\n";
+      var_dump( interface_exists($value, $autoload) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing interface_exists() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+
+Warning: interface_exists() expects parameter 1 to be string, array given in %sinterface_exists_variation1.php on line %d
+NULL
+
+--int indexed array--
+
+Warning: interface_exists() expects parameter 1 to be string, array given in %sinterface_exists_variation1.php on line %d
+NULL
+
+--associative array--
+
+Warning: interface_exists() expects parameter 1 to be string, array given in %sinterface_exists_variation1.php on line %d
+NULL
+
+--nested arrays--
+
+Warning: interface_exists() expects parameter 1 to be string, array given in %sinterface_exists_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: interface_exists() expects parameter 1 to be string, object given in %sinterface_exists_variation1.php on line %d
+NULL
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/interface_exists_variation2.phpt b/ext/standard/tests/class_object/interface_exists_variation2.phpt
new file mode 100644
index 0000000..4137d8a
--- /dev/null
+++ b/ext/standard/tests/class_object/interface_exists_variation2.phpt
@@ -0,0 +1,204 @@
+--TEST--
+Test interface_exists() function : usage variation 
+--FILE--
+<?php
+/* Prototype  : bool interface_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing interface_exists() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$classname = 'aBogusInterfaceName';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -2345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float 12.3456789000e10' => 12.3456789000e10,
+      'float -12.3456789000e10' => -12.3456789000e10,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for autoload
+
+foreach($inputs as $key =>$value) {
+      echo "\n--$key--\n";
+      var_dump( interface_exists($classname, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing interface_exists() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+
+Warning: interface_exists() expects parameter 2 to be boolean, array given in %sinterface_exists_variation2.php on line %d
+NULL
+
+--int indexed array--
+
+Warning: interface_exists() expects parameter 2 to be boolean, array given in %sinterface_exists_variation2.php on line %d
+NULL
+
+--associative array--
+
+Warning: interface_exists() expects parameter 2 to be boolean, array given in %sinterface_exists_variation2.php on line %d
+NULL
+
+--nested arrays--
+
+Warning: interface_exists() expects parameter 2 to be boolean, array given in %sinterface_exists_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--string DQ--
+bool(false)
+
+--string SQ--
+bool(false)
+
+--mixed case string--
+bool(false)
+
+--heredoc--
+bool(false)
+
+--instance of classWithToString--
+
+Warning: interface_exists() expects parameter 2 to be boolean, object given in %sinterface_exists_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: interface_exists() expects parameter 2 to be boolean, object given in %sinterface_exists_variation2.php on line %d
+NULL
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/class_object/interface_exists_variation3.phpt b/ext/standard/tests/class_object/interface_exists_variation3.phpt
new file mode 100644
index 0000000..d25d74b
--- /dev/null
+++ b/ext/standard/tests/class_object/interface_exists_variation3.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test interface_exists() function : autoloaded interface 
+--FILE--
+<?php
+/* Prototype  : bool interface_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing interface_exists() : autoloaded interface ***\n";
+
+function __autoload($class_name) {
+    require_once $class_name . '.inc';
+}
+
+echo "\n-- no autoloading --\n";
+var_dump(interface_exists("AutoInterface", false));
+
+echo "\n-- with autoloading --\n";
+var_dump(interface_exists("AutoInterface", true));
+
+echo "\nDONE\n";
+
+?>
+--EXPECTF--
+*** Testing interface_exists() : autoloaded interface ***
+
+-- no autoloading --
+bool(false)
+
+-- with autoloading --
+bool(true)
+
+DONE
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/interface_exists_variation4.phpt b/ext/standard/tests/class_object/interface_exists_variation4.phpt
new file mode 100644
index 0000000..c059805
--- /dev/null
+++ b/ext/standard/tests/class_object/interface_exists_variation4.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test interface_exists() function : test autoload default value 
+--FILE--
+<?php
+/* Prototype  : bool interface_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing interface_exists() : test autoload default value ***\n";
+
+function __autoload($class_name) {
+    require_once $class_name . '.inc';
+}
+
+
+var_dump(interface_exists("AutoInterface"));
+
+echo "\nDONE\n";
+
+?>
+--EXPECTF--
+*** Testing interface_exists() : test autoload default value ***
+bool(true)
+
+DONE
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_subclass_of_variation_004.phpt b/ext/standard/tests/class_object/is_subclass_of_variation_004.phpt
new file mode 100644
index 0000000..72a02a0
--- /dev/null
+++ b/ext/standard/tests/class_object/is_subclass_of_variation_004.phpt
@@ -0,0 +1,175 @@
+--TEST--
+Test is_subclass_of() function : usage variations  - unexpected type for arg 1 with valid class in arg 2.
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+// Note: basic use cases in Zend/tests/is_a.phpt
+function __autoload($className) {
+	echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+	echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+
+echo "*** Testing is_subclass_of() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$class_name = 'stdClass';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'String',
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for object
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( is_subclass_of($value, $class_name) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_subclass_of() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(69)
+Error: 8 - Undefined variable: unset_var, %s(72)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value  
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value string 
+In __autoload(string)
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value String 
+In __autoload(String)
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/property_exists_error.phpt b/ext/standard/tests/class_object/property_exists_error.phpt
new file mode 100644
index 0000000..fd81a66
--- /dev/null
+++ b/ext/standard/tests/class_object/property_exists_error.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test property_exists() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : bool property_exists(mixed object_or_class, string property_name)
+ * Description: Checks if the object or class has a property 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing property_exists() : error conditions ***\n";
+
+$object_or_class = "obj";
+$property_name = 'string_val';
+$extra_arg = 10;
+
+
+echo "\n-- Testing property_exists() function with more than expected no. of arguments --\n";
+var_dump( property_exists($object_or_class, $property_name, $extra_arg) );
+
+
+echo "\n-- Testing property_exists() function with less than expected no. of arguments --\n";
+var_dump( property_exists($object_or_class) );
+
+echo "\n-- Testing property_exists() function with incorrect arguments --\n";
+var_dump( property_exists(10, $property_name) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing property_exists() : error conditions ***
+
+-- Testing property_exists() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for property_exists() in %sproperty_exists_error.php on line %d
+NULL
+
+-- Testing property_exists() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for property_exists() in %sproperty_exists_error.php on line %d
+NULL
+
+-- Testing property_exists() function with incorrect arguments --
+
+Warning: First parameter must either be an object or the name of an existing class in %sproperty_exists_error.php on line %d
+NULL
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/property_exists_variation1.phpt b/ext/standard/tests/class_object/property_exists_variation1.phpt
new file mode 100644
index 0000000..1505a4b
--- /dev/null
+++ b/ext/standard/tests/class_object/property_exists_variation1.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test property_exists() function : class auto loading  
+--FILE--
+<?php
+/* Prototype  : bool property_exists(mixed object_or_class, string property_name)
+ * Description: Checks if the object or class has a property 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing property_exists() : class auto loading ***\n";
+
+function __autoload($class_name) {
+    require_once $class_name . '.inc';
+}
+
+echo "\ntesting property in autoloaded class\n";
+var_dump(property_exists("AutoTest", "bob"));
+
+echo "\ntesting __get magic method\n";
+var_dump(property_exists("AutoTest", "foo"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing property_exists() : class auto loading ***
+
+testing property in autoloaded class
+bool(true)
+
+testing __get magic method
+bool(false)
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/directory/DirectoryClass_basic_001.phpt b/ext/standard/tests/directory/DirectoryClass_basic_001.phpt
index e8ffd57..a68ee1b 100644
--- a/ext/standard/tests/directory/DirectoryClass_basic_001.phpt
+++ b/ext/standard/tests/directory/DirectoryClass_basic_001.phpt
@@ -1,5 +1,7 @@
 --TEST--
 Directory class behaviour.
+--SKIPIF--
+<?php if (!extension_loaded("reflection")) die("skip"); ?>
 --FILE--
 <?php
 /* 
@@ -50,4 +52,4 @@ object(Directory)#%d (0) {
 }
 
 Warning: Directory::read(): Unable to find my handle property in %s on line 15
-bool(false)
\ No newline at end of file
+bool(false)
diff --git a/ext/standard/tests/file/bug44034.phpt b/ext/standard/tests/file/bug44034.phpt
new file mode 100644
index 0000000..0a8df3e
--- /dev/null
+++ b/ext/standard/tests/file/bug44034.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Bug #44034
+--FILE--
+<?php
+
+$urls = array();
+$urls[] = "data://text/plain,foo\r\nbar\r\n";
+$urls[] = "data://text/plain,\r\nfoo\r\nbar\r\n";
+$urls[] = "data://text/plain,foo\r\nbar";
+
+foreach($urls as $url) {
+	echo strtr($url, array("\r" => "\\r", "\n" => "\\n")) . "\n";
+	var_dump(file($url, FILE_IGNORE_NEW_LINES));
+}
+?>
+--EXPECTF--
+data://text/plain,foo\r\nbar\r\n
+array(2) {
+  [0]=>
+  string(3) "foo"
+  [1]=>
+  string(3) "bar"
+}
+data://text/plain,\r\nfoo\r\nbar\r\n
+array(3) {
+  [0]=>
+  string(0) ""
+  [1]=>
+  string(3) "foo"
+  [2]=>
+  string(3) "bar"
+}
+data://text/plain,foo\r\nbar
+array(2) {
+  [0]=>
+  string(3) "foo"
+  [1]=>
+  string(3) "bar"
+}
diff --git a/ext/standard/tests/file/fgetcsv_variation14.phpt b/ext/standard/tests/file/fgetcsv_variation14.phpt
index 8a64caf..927bf8a 100644
--- a/ext/standard/tests/file/fgetcsv_variation14.phpt
+++ b/ext/standard/tests/file/fgetcsv_variation14.phpt
@@ -75,7 +75,7 @@ echo "Done\n";
 -- Testing fgetcsv() with file opened using r mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -86,7 +86,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using rb mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -97,7 +97,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using rt mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -108,7 +108,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using r+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -119,7 +119,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using r+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -130,7 +130,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using r+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -141,7 +141,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using a+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -152,7 +152,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using a+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -163,7 +163,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using a+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -174,7 +174,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using w+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -185,7 +185,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using w+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -196,7 +196,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using w+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -207,7 +207,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using x+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -218,7 +218,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using x+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -229,7 +229,7 @@ bool(true)
 -- Testing fgetcsv() with file opened using x+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
diff --git a/ext/standard/tests/file/fgetcsv_variation21.phpt b/ext/standard/tests/file/fgetcsv_variation21.phpt
index 69059bb..e6a9ee5 100644
--- a/ext/standard/tests/file/fgetcsv_variation21.phpt
+++ b/ext/standard/tests/file/fgetcsv_variation21.phpt
@@ -72,7 +72,7 @@ echo "Done\n";
 -- Testing fgetcsv() with file opened using r mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -80,7 +80,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using rb mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -88,7 +88,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using rt mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -96,7 +96,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using r+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -104,7 +104,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using r+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -112,7 +112,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using r+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -120,7 +120,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using a+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -128,7 +128,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using a+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -136,7 +136,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using a+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -144,7 +144,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using w+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -152,7 +152,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using w+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -160,7 +160,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using w+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -168,7 +168,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using x+ mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -176,7 +176,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using x+b mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
@@ -184,7 +184,7 @@ bool(false)
 -- Testing fgetcsv() with file opened using x+t mode --
 array(1) {
   [0]=>
-  string(0) ""
+  NULL
 }
 int(1)
 bool(false)
diff --git a/ext/standard/tests/file/file_put_contents_variation2.phpt b/ext/standard/tests/file/file_put_contents_variation2.phpt
index dccb967..6fe7353 100644
--- a/ext/standard/tests/file/file_put_contents_variation2.phpt
+++ b/ext/standard/tests/file/file_put_contents_variation2.phpt
@@ -23,7 +23,7 @@ set_error_handler('test_error_handler');
 
 // Initialise function arguments not being substituted (if any)
 
-$filename = 'fwriteVar5.tmp';
+$filename = dirname(__FILE__) . '/fwriteVar5.tmp';
 
 
 
@@ -164,4 +164,4 @@ Class A object
 --undefined var--
 
 --unset var--
-===DONE===
\ No newline at end of file
+===DONE===
diff --git a/ext/standard/tests/file/filetype_variation2.phpt b/ext/standard/tests/file/filetype_variation2.phpt
index 9588575..d538e32 100644
--- a/ext/standard/tests/file/filetype_variation2.phpt
+++ b/ext/standard/tests/file/filetype_variation2.phpt
@@ -1,5 +1,5 @@
 --TEST--
-Test filetype() function: Variations
+Test filetype() function: Check character type
 --CREDITS--
 Dave Kelsey <d_kelsey at uk.ibm.com>
 --SKIPIF--
@@ -7,6 +7,9 @@ Dave Kelsey <d_kelsey at uk.ibm.com>
 if (substr(PHP_OS, 0, 3) == 'WIN') {
     die('skip no /dev on Windows');
 }
+if (!file_exists("/dev/console")) {
+    die('skip /dev/console not available');
+}    
 ?>
 --FILE--
 <?php
@@ -16,21 +19,11 @@ Description: Returns the type of the file. Possible values are fifo, char,
              dir, block, link, file, and unknown. 
 */
 
-echo "*** Testing filetype() with various types ***\n";
 echo "-- Checking for char --\n";
 print( filetype("/dev/console") )."\n";
-
-echo "-- Checking for block --\n";
-//we have cheated in our mac build by creating a ram0 block device.
-print( filetype("/dev/ram0") )."\n";
-
-echo "\n*** Done ***\n";
 ?>
+===DONE===
 --EXPECTF--
-*** Testing filetype() with various types ***
 -- Checking for char --
 char
--- Checking for block --
-block
-
-*** Done ***
+===DONE===
diff --git a/ext/standard/tests/file/fwrite_variation5.phpt b/ext/standard/tests/file/fwrite_variation5.phpt
index efe4967..0293c5f 100644
--- a/ext/standard/tests/file/fwrite_variation5.phpt
+++ b/ext/standard/tests/file/fwrite_variation5.phpt
@@ -23,7 +23,7 @@ set_error_handler('test_error_handler');
 
 // Initialise function arguments not being substituted (if any)
 
-$filename = 'fwriteVar5.tmp';
+$filename = dirname(__FILE__) . '/fwriteVar5.tmp';
 
 
 
diff --git a/ext/standard/tests/file/tempnam_variation4.phpt b/ext/standard/tests/file/tempnam_variation4.phpt
index 5525b58..d06aa4d 100644
--- a/ext/standard/tests/file/tempnam_variation4.phpt
+++ b/ext/standard/tests/file/tempnam_variation4.phpt
@@ -5,6 +5,16 @@ Test tempnam() function: usage variations - permissions(0000 to 0777) of dir
 if (substr(PHP_OS, 0, 3) == 'WIN') {
     die('skip Not valid for Windows');
 }
+// Skip if being run by root
+$filename = dirname(__FILE__)."/is_readable_root_check.tmp";
+$fp = fopen($filename, 'w');
+fclose($fp);
+if(fileowner($filename) == 0) {
+        unlink ($filename);
+        die('skip cannot be run as root');
+}
+
+unlink($filename);
 ?>
 --FILE--
 <?php
diff --git a/ext/standard/tests/file/touch_basic-win32.phpt b/ext/standard/tests/file/touch_basic-win32.phpt
index 3bd22ae..0e4cc31 100644
--- a/ext/standard/tests/file/touch_basic-win32.phpt
+++ b/ext/standard/tests/file/touch_basic-win32.phpt
@@ -1,7 +1,5 @@
 --TEST--
 Test touch() function : basic functionality 
---CREDITS--
-Dave Kelsey <d_kelsey at uk.ibm.com>
 --SKIPIF--
 <?php
 if (substr(PHP_OS, 0, 3) != 'WIN') {
@@ -16,6 +14,12 @@ if (substr(PHP_OS, 0, 3) != 'WIN') {
  * Alias to functions: 
  */
 
+ /*
+  * NOTE: Windows UTime functionality is influenced by DST so outputs 
+  * different values during DST. This is WAD according to Microsoft. The test has been
+  * modified to reflect this in the expected output
+  */
+
 echo "*** Testing touch() : basic functionality ***\n";
 
 $filename = dirname(__FILE__)."/touch.dat";
@@ -90,6 +94,6 @@ stat data differs at mtime
  --- testing touch using all parameters ---
 bool(true)
 ctime=%d
-mtime=10000
-atime=20470
+mtime=%r10000|6400%r
+atime=%r20470|16870%r
 Done
diff --git a/ext/standard/tests/general_functions/bug47027.phpt b/ext/standard/tests/general_functions/bug47027.phpt
index e4f5aae..b9d31c3 100644
--- a/ext/standard/tests/general_functions/bug47027.phpt
+++ b/ext/standard/tests/general_functions/bug47027.phpt
@@ -1,5 +1,7 @@
 --TEST--
 Bug #47027 (var_export doesn't show numeric indices on ArrayObject)
+--SKIPIF--
+<?php extension_loaded("spl") or die("skip"); ?>
 --FILE--
 <?php
 $ao = new ArrayObject(array (2 => "foo", "bar" => "baz"));
diff --git a/ext/standard/tests/general_functions/call_user_method.phpt b/ext/standard/tests/general_functions/call_user_method.phpt
new file mode 100644
index 0000000..f671f6c
--- /dev/null
+++ b/ext/standard/tests/general_functions/call_user_method.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Basic behaviour of call_user_method() test
+--CREDITS--
+Sebastian Schürmann 
+sebs at php.net
+Testfest 2009 Munich
+--FILE--
+<?php
+class a {
+	static function b() {
+		return true;
+	}
+}
+$a = new a();
+$res = call_user_method('b', $a);
+var_dump($res);
+?>
+--EXPECTF--
+Strict Standards: Function call_user_method() is deprecated in %s
+bool(true)
+
diff --git a/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt b/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt
index 94aa3a7..07929b3 100644
--- a/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt
+++ b/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt
@@ -1,6 +1,6 @@
 --TEST--
 Test get_magic_quotes_runtime() function
---INI-
+--INI--
 magic_quotes_runtime = 0
 --FILE--
 <?php
diff --git a/ext/standard/tests/general_functions/intval.phpt b/ext/standard/tests/general_functions/intval.phpt
index 998d260..7986e2d 100644
--- a/ext/standard/tests/general_functions/intval.phpt
+++ b/ext/standard/tests/general_functions/intval.phpt
@@ -256,8 +256,8 @@ int(100000000)
 int(-1000000000)
 int(10)
 int(1050000)
-int(5)
-int(6)
+int(%d)
+int(%d)
 int(0)
 int(1)
 int(1)
diff --git a/ext/standard/tests/general_functions/intval_variation1.phpt b/ext/standard/tests/general_functions/intval_variation1.phpt
new file mode 100644
index 0000000..bf88c7c
--- /dev/null
+++ b/ext/standard/tests/general_functions/intval_variation1.phpt
@@ -0,0 +1,203 @@
+--TEST--
+Test intval() function : usage variation 
+--FILE--
+<?php
+/* Prototype  : int intval(mixed var [, int base])
+ * Description: Get the integer value of a variable using the optional base for the conversion 
+ * Source code: ext/standard/type.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing intval() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+	if (error_reporting() != 0) {
+		// report non-silenced errors
+		echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+	}
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$base = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+      // int data
+      'int 0' => 0,
+      'int 1' => 1,
+      'int 12345' => 12345,
+      'int -12345' => -2345,
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float 12.3456789e5' => 12.3456789e5,
+      'float -12.3456789e5' => -12.3456789e5,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for var
+
+foreach($inputs as $key =>$value) {
+      echo "\n--$key--\n";
+      var_dump( intval($value, $base) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing intval() : usage variation ***
+
+--int 0--
+int(0)
+
+--int 1--
+int(1)
+
+--int 12345--
+int(12345)
+
+--int -12345--
+int(-2345)
+
+--float 10.5--
+int(10)
+
+--float -10.5--
+int(-10)
+
+--float 12.3456789e5--
+int(1234567)
+
+--float -12.3456789e5--
+int(-1234567)
+
+--float .5--
+int(0)
+
+--empty array--
+int(0)
+
+--int indexed array--
+int(1)
+
+--associative array--
+int(1)
+
+--nested arrays--
+int(1)
+
+--uppercase NULL--
+int(0)
+
+--lowercase null--
+int(0)
+
+--lowercase true--
+int(1)
+
+--lowercase false--
+int(0)
+
+--uppercase TRUE--
+int(1)
+
+--uppercase FALSE--
+int(0)
+
+--empty string DQ--
+int(0)
+
+--empty string SQ--
+int(0)
+
+--string DQ--
+int(0)
+
+--string SQ--
+int(0)
+
+--mixed case string--
+int(0)
+
+--heredoc--
+int(0)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+int(1)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+int(1)
+
+--undefined var--
+int(0)
+
+--unset var--
+int(0)
+===DONE===
diff --git a/ext/standard/tests/general_functions/intval_variation2.phpt b/ext/standard/tests/general_functions/intval_variation2.phpt
new file mode 100644
index 0000000..2d9913b
--- /dev/null
+++ b/ext/standard/tests/general_functions/intval_variation2.phpt
@@ -0,0 +1,185 @@
+--TEST--
+Test intval() function : usage variation 
+--FILE--
+<?php
+/* Prototype  : int intval(mixed var [, int base])
+ * Description: Get the integer value of a variable using the optional base for the conversion 
+ * Source code: ext/standard/type.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing intval() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+	if (error_reporting() != 0) {
+		// report non-silenced errors
+		echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+	}
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$var = 1;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+	public function __toString() {
+		return "Class A object";
+	}
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+      // float data
+      'float 10.5' => 10.5,
+      'float -10.5' => -10.5,
+      'float 12.3456789000e10' => 12.3456789000e10,
+      'float -12.3456789000e10' => -12.3456789000e10,
+      'float .5' => .5,
+
+      // array data
+      'empty array' => array(),
+      'int indexed array' => $index_array,
+      'associative array' => $assoc_array,
+      'nested arrays' => array('foo', $index_array, $assoc_array),
+
+      // null data
+      'uppercase NULL' => NULL,
+      'lowercase null' => null,
+
+      // boolean data
+      'lowercase true' => true,
+      'lowercase false' =>false,
+      'uppercase TRUE' =>TRUE,
+      'uppercase FALSE' =>FALSE,
+
+      // empty data
+      'empty string DQ' => "",
+      'empty string SQ' => '',
+
+      // string data
+      'string DQ' => "string",
+      'string SQ' => 'string',
+      'mixed case string' => "sTrInG",
+      'heredoc' => $heredoc,
+
+      // object data
+      'instance of classWithToString' => new classWithToString(),
+      'instance of classWithoutToString' => new classWithoutToString(),
+
+      // undefined data
+      'undefined var' => @$undefined_var,
+
+      // unset data
+      'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for base
+
+foreach($inputs as $key =>$value) {
+      echo "\n--$key--\n";
+      var_dump( intval($var, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing intval() : usage variation ***
+
+--float 10.5--
+int(1)
+
+--float -10.5--
+int(1)
+
+--float 12.3456789000e10--
+int(1)
+
+--float -12.3456789000e10--
+int(1)
+
+--float .5--
+int(1)
+
+--empty array--
+int(1)
+
+--int indexed array--
+int(1)
+
+--associative array--
+int(1)
+
+--nested arrays--
+int(1)
+
+--uppercase NULL--
+int(1)
+
+--lowercase null--
+int(1)
+
+--lowercase true--
+int(1)
+
+--lowercase false--
+int(1)
+
+--uppercase TRUE--
+int(1)
+
+--uppercase FALSE--
+int(1)
+
+--empty string DQ--
+int(1)
+
+--empty string SQ--
+int(1)
+
+--string DQ--
+int(1)
+
+--string SQ--
+int(1)
+
+--mixed case string--
+int(1)
+
+--heredoc--
+int(1)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+int(1)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+int(1)
+
+--undefined var--
+int(1)
+
+--unset var--
+int(1)
+===DONE===
diff --git a/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt b/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt
index 7101f42..f6bdc94 100644
--- a/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt
+++ b/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt
@@ -1,6 +1,6 @@
 --TEST--
 Test set_magic_quotes_runtime() function -  basic test 
---INI-
+--INI--
 magic_quotes_runtime = 0
 --FILE--
 <?php
diff --git a/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt b/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt
index 425a8dd..0ee09e8 100644
--- a/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt
+++ b/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt
@@ -1,6 +1,6 @@
 --TEST--
 Test set_magic_quotes_runtime() function -  usage variation
---INI-
+--INI--
 magic_quotes_runtime = 0
 --FILE--
 <?php
diff --git a/ext/standard/tests/http/bug38802.phpt b/ext/standard/tests/http/bug38802.phpt
new file mode 100644
index 0000000..91fd1cc
--- /dev/null
+++ b/ext/standard/tests/http/bug38802.phpt
@@ -0,0 +1,172 @@
+--TEST--
+Bug #38802 (ignore_errors and max_redirects)
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+function do_test($context_options) {
+
+	$context = stream_context_create(array('http' => $context_options));
+
+	$responses = array(
+		"data://text/plain,HTTP/1.0 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar2\r\n\r\n1",
+		"data://text/plain,HTTP/1.0 301 Moved Permanently\r\nLocation: http://127.0.0.1:12342/foo/bar3\r\n\r\n",
+		"data://text/plain,HTTP/1.0 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar4\r\n\r\n3",
+		"data://text/plain,HTTP/1.0 200 OK\r\n\r\ndone.",
+	);
+
+	$pid = http_server("tcp://127.0.0.1:12342", $responses, $output);
+
+	$fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context);
+	var_dump($fd);
+
+	if ($fd) {
+		$meta_data = stream_get_meta_data($fd);
+		var_dump($meta_data['wrapper_data']);
+
+		var_dump(stream_get_contents($fd));
+	}
+
+	fseek($output, 0, SEEK_SET);
+	var_dump(stream_get_contents($output));
+
+	http_server_kill($pid);
+}
+
+echo "-- Test: follow all redirections --\n";
+
+do_test(array(), 4);
+
+echo "-- Test: fail after 2 redirections --\n";
+
+do_test(array('max_redirects' => 2), 2);
+
+echo "-- Test: fail at first redirection --\n";
+
+do_test(array('max_redirects' => 0), 1);
+
+echo "-- Test: fail at first redirection (2) --\n";
+
+do_test(array('max_redirects' => 1), 1);
+
+echo "-- Test: return at first redirection --\n";
+
+do_test(array('max_redirects' => 0, 'ignore_errors' => 1), 1);
+
+echo "-- Test: return at first redirection (2) --\n";
+
+do_test(array('max_redirects' => 1, 'ignore_errors' => 1), 1);
+
+echo "-- Test: return at second redirection --\n";
+
+do_test(array('max_redirects' => 2, 'ignore_errors' => 1), 2);
+
+?>
+--EXPECTF--
+-- Test: follow all redirections --
+resource(%d) of type (stream)
+array(7) {
+  [0]=>
+  string(30) "HTTP/1.0 302 Moved Temporarily"
+  [1]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar2"
+  [2]=>
+  string(30) "HTTP/1.0 301 Moved Permanently"
+  [3]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar3"
+  [4]=>
+  string(30) "HTTP/1.0 302 Moved Temporarily"
+  [5]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar4"
+  [6]=>
+  string(15) "HTTP/1.0 200 OK"
+}
+string(5) "done."
+string(195) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+GET /foo/bar2 HTTP/1.0
+Host: 127.0.0.1:12342
+
+GET /foo/bar3 HTTP/1.0
+Host: 127.0.0.1:12342
+
+GET /foo/bar4 HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: fail after 2 redirections --
+
+Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s
+bool(false)
+string(97) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+GET /foo/bar2 HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: fail at first redirection --
+
+Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s
+bool(false)
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: fail at first redirection (2) --
+
+Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s
+bool(false)
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: return at first redirection --
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(30) "HTTP/1.0 302 Moved Temporarily"
+  [1]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar2"
+}
+string(1) "1"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: return at first redirection (2) --
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(30) "HTTP/1.0 302 Moved Temporarily"
+  [1]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar2"
+}
+string(1) "1"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: return at second redirection --
+resource(%d) of type (stream)
+array(4) {
+  [0]=>
+  string(30) "HTTP/1.0 302 Moved Temporarily"
+  [1]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar2"
+  [2]=>
+  string(30) "HTTP/1.0 301 Moved Permanently"
+  [3]=>
+  string(41) "Location: http://127.0.0.1:12342/foo/bar3"
+}
+string(0) ""
+string(97) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+GET /foo/bar2 HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
diff --git a/ext/standard/tests/http/ignore_errors.phpt b/ext/standard/tests/http/ignore_errors.phpt
new file mode 100644
index 0000000..c7e1acb
--- /dev/null
+++ b/ext/standard/tests/http/ignore_errors.phpt
@@ -0,0 +1,124 @@
+--TEST--
+http:// and ignore_errors
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+function do_test($context_options) {
+
+	$context = stream_context_create(array('http' => $context_options));
+
+	$responses = array(
+		"data://text/plain,HTTP/1.0 200 Ok\r\nX-Foo: bar\r\n\r\n1",
+		"data://text/plain,HTTP/1.0 404 Not found\r\nX-bar: baz\r\n\r\n2",
+	);
+
+	$pid = http_server("tcp://127.0.0.1:12342", $responses, $output);
+
+	foreach($responses as $r) {
+
+		$fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context);
+		var_dump($fd);
+
+		if ($fd) {
+			$meta_data = stream_get_meta_data($fd);
+			var_dump($meta_data['wrapper_data']);
+	
+			var_dump(stream_get_contents($fd));
+		}
+
+		fseek($output, 0, SEEK_SET);
+		var_dump(stream_get_contents($output));
+		fseek($output, 0, SEEK_SET);
+	}
+
+	http_server_kill($pid);
+}
+
+echo "-- Test: requests without ignore_errors --\n";
+
+do_test(array());
+
+echo "-- Test: requests with ignore_errors --\n";
+
+do_test(array('ignore_errors' => true));
+
+echo "-- Test: requests with ignore_errors (2) --\n";
+
+do_test(array('ignore_errors' => 1));
+
+?>
+--EXPECTF--
+-- Test: requests without ignore_errors --
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(15) "HTTP/1.0 200 Ok"
+  [1]=>
+  string(10) "X-Foo: bar"
+}
+string(1) "1"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+
+Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: HTTP request failed! HTTP/1.0 404 Not found
+ in %s on line %d
+bool(false)
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: requests with ignore_errors --
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(15) "HTTP/1.0 200 Ok"
+  [1]=>
+  string(10) "X-Foo: bar"
+}
+string(1) "1"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(22) "HTTP/1.0 404 Not found"
+  [1]=>
+  string(10) "X-bar: baz"
+}
+string(1) "2"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+-- Test: requests with ignore_errors (2) --
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(15) "HTTP/1.0 200 Ok"
+  [1]=>
+  string(10) "X-Foo: bar"
+}
+string(1) "1"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
+resource(%d) of type (stream)
+array(2) {
+  [0]=>
+  string(22) "HTTP/1.0 404 Not found"
+  [1]=>
+  string(10) "X-bar: baz"
+}
+string(1) "2"
+string(48) "GET /foo/bar HTTP/1.0
+Host: 127.0.0.1:12342
+
+"
diff --git a/ext/standard/tests/http/server.inc b/ext/standard/tests/http/server.inc
new file mode 100644
index 0000000..b9ade0e
--- /dev/null
+++ b/ext/standard/tests/http/server.inc
@@ -0,0 +1,92 @@
+<?php
+
+function http_server_skipif($socket_string) {
+
+	if (!function_exists('pcntl_fork')) die('skip pcntl_fork() not available');
+	if (!function_exists('posix_kill')) die('skip posix_kill() not available');
+	if (!stream_socket_server($socket_string)) die('skip stream_socket_server() failed');
+}
+
+/* Minimal HTTP server with predefined responses.
+ *
+ * $socket_string is the socket to create and listen on (e.g. tcp://127.0.0.1:1234)
+ * $files is an array of files containing N responses for N expected requests. Server dies after N requests.
+ * $output is a stream on which everything sent by clients is written to
+ */
+function http_server($socket_string, array $files, &$output = null) {
+
+	pcntl_alarm(60);
+
+	$server = stream_socket_server($socket_string, $errno, $errstr);
+	if (!$server) {
+		return false;
+	}
+
+	if ($output === null) {
+		$output = tmpfile();
+		if ($output === false) {
+			return false;
+		}
+	}
+
+	$pid = pcntl_fork();
+	if ($pid == -1) {
+		die('could not fork');
+	} else if ($pid) {
+		return $pid;
+	}
+
+	foreach($files as $file) {
+
+		$sock = stream_socket_accept($server);
+		if (!$sock) {
+			exit(1);
+		}
+
+		// read headers
+
+		$content_length = 0;
+
+		stream_set_blocking($sock, 0);
+		while (!feof($sock)) {
+
+			list($r, $w, $e) = array(array($sock), null, null);
+			if (!stream_select($r, $w, $e, 1)) continue;
+
+			$line = stream_get_line($sock, 8192, "\r\n");
+			if ($line === b'') {
+				fwrite($output, b"\r\n");
+				break;
+			} else if ($line !== false) {
+				fwrite($output, b"$line\r\n");
+
+				if (preg_match(b'#^Content-Length\s*:\s*([[:digit:]]+)\s*$#i', $line, $matches)) {
+					$content_length = (int) $matches[1];
+				}
+			}
+		}
+		stream_set_blocking($sock, 1);
+
+		// read content
+
+		if ($content_length > 0) {
+			stream_copy_to_stream($sock, $output, $content_length);
+		}
+
+		// send response
+
+		$fd = fopen($file, 'rb');
+		stream_copy_to_stream($fd, $sock);
+
+		fclose($sock);
+	}
+
+	exit(0);
+}
+
+function http_server_kill($pid) {
+	posix_kill($pid, SIGTERM);
+	pcntl_waitpid($pid, $status);
+}
+
+?>
diff --git a/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt b/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt
index cd79137..03ac67b 100644
--- a/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt
+++ b/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt
@@ -20,6 +20,6 @@ var_dump(ezmlm_hash(b"foo at somewhere.com"));
 ===Done===
 --EXPECT--
 *** Testing ezmlm_hash() : basic functionality ***
-int(27)
-int(48)
+int(1)
+int(7)
 ===Done===
diff --git a/ext/standard/tests/mail/mail_basic2.phpt b/ext/standard/tests/mail/mail_basic2.phpt
index bb2e42e..8f9ef64 100644
--- a/ext/standard/tests/mail/mail_basic2.phpt
+++ b/ext/standard/tests/mail/mail_basic2.phpt
@@ -1,12 +1,12 @@
 --TEST--
 Test mail() function : basic functionality 
---INI--
-sendmail_path=echo --- > mailBasic2.out
 --SKIPIF--
 <?php
 if(substr(PHP_OS, 0, 3) == "WIN")
   die("skip Won't run on Windows");
 ?>
+--INI--
+sendmail_path="echo --- > /tmp/php_test_mailBasic2.out"
 --FILE--
 <?php
 /* Prototype  : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
@@ -24,7 +24,7 @@ $subject = 'Test Subject';
 $message = 'A Message';
 $additional_headers = 'KHeaders';
 $additional_parameters = "Extras";
-$outFile = "mailBasic2.out";
+$outFile = "/tmp/php_test_mailBasic2.out";
 @unlink($outFile);
 
 echo "-- extra parameters --\n";
@@ -37,7 +37,7 @@ var_dump( mail($to, $subject, $message, $additional_headers, $additional_paramet
 
 sleep(5);
 echo file_get_contents($outFile);
-//unlink($outFile);
+unlink($outFile);
 ?>
 ===DONE===
 --EXPECT--
diff --git a/ext/standard/tests/mail/mail_variation2.phpt b/ext/standard/tests/mail/mail_variation2.phpt
index 1a0fcc6..59ef1d9 100644
--- a/ext/standard/tests/mail/mail_variation2.phpt
+++ b/ext/standard/tests/mail/mail_variation2.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test mail() function : variation force extra parameters
 --INI--
-sendmail_path=echo --- > mailBasic2.out
+sendmail_path="echo --- > /tmp/php_test_mailVariation2.out"
 mail.force_extra_parameters="forced params"
 --SKIPIF--
 <?php
@@ -23,7 +23,7 @@ echo "*** Testing mail() : basic functionality ***\n";
 $to = 'user at company.com';
 $subject = 'Test Subject';
 $message = 'A Message';
-$outFile = "mailBasic2.out";
+$outFile = "/tmp/php_test_mailVariation2.out";
 @unlink($outFile);
 
 var_dump( mail($to, $subject, $message) );
diff --git a/ext/standard/tests/math/abs_basiclong_64bit.phpt b/ext/standard/tests/math/abs_basiclong_64bit.phpt
new file mode 100644
index 0000000..ccb2556
--- /dev/null
+++ b/ext/standard/tests/math/abs_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test abs function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(abs($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 2147483647 ---
+int(2147483647)
+--- testing: -2147483648 ---
+int(2147483648)
+--- testing: 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: -9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 2147483648 ---
+int(2147483648)
+--- testing: -2147483649 ---
+int(2147483649)
+--- testing: 4294967294 ---
+int(4294967294)
+--- testing: 4294967295 ---
+int(4294967295)
+--- testing: 4294967293 ---
+int(4294967293)
+--- testing: 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+===DONE===
diff --git a/ext/standard/tests/math/acos_basiclong_64bit.phpt b/ext/standard/tests/math/acos_basiclong_64bit.phpt
new file mode 100644
index 0000000..3d811f5
--- /dev/null
+++ b/ext/standard/tests/math/acos_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test acos function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(acos($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(NAN)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(NAN)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(NAN)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(NAN)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(NAN)
+--- testing: 4294967295 ---
+float(NAN)
+--- testing: 4294967293 ---
+float(NAN)
+--- testing: 9223372036854775806 ---
+float(NAN)
+--- testing: 9.2233720368548E+18 ---
+float(NAN)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/acosh_basiclong_64bit.phpt b/ext/standard/tests/math/acosh_basiclong_64bit.phpt
new file mode 100644
index 0000000..80c33b2
--- /dev/null
+++ b/ext/standard/tests/math/acosh_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test acosh function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(acosh($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(44.361419555836)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(22.180709777453)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(44.361419555604)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(22.180709777918)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(22.873856958013)
+--- testing: 4294967295 ---
+float(22.873856958245)
+--- testing: 4294967293 ---
+float(22.87385695778)
+--- testing: 9223372036854775806 ---
+float(44.361419555836)
+--- testing: 9.2233720368548E+18 ---
+float(44.361419555836)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/asin_basiclong_64bit.phpt b/ext/standard/tests/math/asin_basiclong_64bit.phpt
new file mode 100644
index 0000000..7e17f2d
--- /dev/null
+++ b/ext/standard/tests/math/asin_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test asin function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(asin($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(NAN)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(NAN)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(NAN)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(NAN)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(NAN)
+--- testing: 4294967295 ---
+float(NAN)
+--- testing: 4294967293 ---
+float(NAN)
+--- testing: 9223372036854775806 ---
+float(NAN)
+--- testing: 9.2233720368548E+18 ---
+float(NAN)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/asinh_basiclong_64bit.phpt b/ext/standard/tests/math/asinh_basiclong_64bit.phpt
new file mode 100644
index 0000000..a501d75
--- /dev/null
+++ b/ext/standard/tests/math/asinh_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test asinh function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(asinh($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(44.361419555836)
+--- testing: -9223372036854775808 ---
+float(-44.361419555836)
+--- testing: 2147483647 ---
+float(22.180709777453)
+--- testing: -2147483648 ---
+float(-22.180709777918)
+--- testing: 9223372034707292160 ---
+float(44.361419555604)
+--- testing: -9223372034707292160 ---
+float(-44.361419555604)
+--- testing: 2147483648 ---
+float(22.180709777918)
+--- testing: -2147483649 ---
+float(-22.180709778384)
+--- testing: 4294967294 ---
+float(22.873856958013)
+--- testing: 4294967295 ---
+float(22.873856958245)
+--- testing: 4294967293 ---
+float(22.87385695778)
+--- testing: 9223372036854775806 ---
+float(44.361419555836)
+--- testing: 9.2233720368548E+18 ---
+float(44.361419555836)
+--- testing: -9223372036854775807 ---
+float(-44.361419555836)
+--- testing: -9.2233720368548E+18 ---
+float(-44.361419555836)
+===DONE===
diff --git a/ext/standard/tests/math/atan2_basiclong_64bit.phpt b/ext/standard/tests/math/atan2_basiclong_64bit.phpt
new file mode 100644
index 0000000..e0548a0
--- /dev/null
+++ b/ext/standard/tests/math/atan2_basiclong_64bit.phpt
@@ -0,0 +1,364 @@
+--TEST--
+Test atan2 function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MIN_32Bit, MAX_64Bit, MIN_64Bit);
+
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal, $otherVal ---\n";   
+      var_dump(atan2($longVal, $otherVal));
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807, 0 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, 1 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, -1 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, 7 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, 9 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, 65 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, -44 ---
+float(1.5707963267949)
+--- testing: 9223372036854775807, 2147483647 ---
+float(1.5707963265621)
+--- testing: 9223372036854775807, -2147483648 ---
+float(1.5707963270277)
+--- testing: 9223372036854775807, 9223372036854775807 ---
+float(0.78539816339745)
+--- testing: 9223372036854775807, -9223372036854775808 ---
+float(2.3561944901923)
+--- testing: -9223372036854775808, 0 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, 1 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, -1 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, 7 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, 9 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, 65 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, -44 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775808, 2147483647 ---
+float(-1.5707963265621)
+--- testing: -9223372036854775808, -2147483648 ---
+float(-1.5707963270277)
+--- testing: -9223372036854775808, 9223372036854775807 ---
+float(-0.78539816339745)
+--- testing: -9223372036854775808, -9223372036854775808 ---
+float(-2.3561944901923)
+--- testing: 2147483647, 0 ---
+float(1.5707963267949)
+--- testing: 2147483647, 1 ---
+float(1.5707963263292)
+--- testing: 2147483647, -1 ---
+float(1.5707963272606)
+--- testing: 2147483647, 7 ---
+float(1.5707963235353)
+--- testing: 2147483647, 9 ---
+float(1.5707963226039)
+--- testing: 2147483647, 65 ---
+float(1.5707962965269)
+--- testing: 2147483647, -44 ---
+float(1.570796347284)
+--- testing: 2147483647, 2147483647 ---
+float(0.78539816339745)
+--- testing: 2147483647, -2147483648 ---
+float(2.3561944904252)
+--- testing: 2147483647, 9223372036854775807 ---
+float(2.3283064354545E-10)
+--- testing: 2147483647, -9223372036854775808 ---
+float(3.141592653357)
+--- testing: -2147483648, 0 ---
+float(-1.5707963267949)
+--- testing: -2147483648, 1 ---
+float(-1.5707963263292)
+--- testing: -2147483648, -1 ---
+float(-1.5707963272606)
+--- testing: -2147483648, 7 ---
+float(-1.5707963235353)
+--- testing: -2147483648, 9 ---
+float(-1.5707963226039)
+--- testing: -2147483648, 65 ---
+float(-1.5707962965269)
+--- testing: -2147483648, -44 ---
+float(-1.570796347284)
+--- testing: -2147483648, 2147483647 ---
+float(-0.78539816363028)
+--- testing: -2147483648, -2147483648 ---
+float(-2.3561944901923)
+--- testing: -2147483648, 9223372036854775807 ---
+float(-2.3283064365387E-10)
+--- testing: -2147483648, -9223372036854775808 ---
+float(-3.141592653357)
+--- testing: 9223372034707292160, 0 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, 1 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, -1 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, 7 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, 9 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, 65 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, -44 ---
+float(1.5707963267949)
+--- testing: 9223372034707292160, 2147483647 ---
+float(1.5707963265621)
+--- testing: 9223372034707292160, -2147483648 ---
+float(1.5707963270277)
+--- testing: 9223372034707292160, 9223372036854775807 ---
+float(0.78539816328103)
+--- testing: 9223372034707292160, -9223372036854775808 ---
+float(2.3561944903088)
+--- testing: -9223372034707292160, 0 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, 1 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, -1 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, 7 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, 9 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, 65 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, -44 ---
+float(-1.5707963267949)
+--- testing: -9223372034707292160, 2147483647 ---
+float(-1.5707963265621)
+--- testing: -9223372034707292160, -2147483648 ---
+float(-1.5707963270277)
+--- testing: -9223372034707292160, 9223372036854775807 ---
+float(-0.78539816328103)
+--- testing: -9223372034707292160, -9223372036854775808 ---
+float(-2.3561944903088)
+--- testing: 2147483648, 0 ---
+float(1.5707963267949)
+--- testing: 2147483648, 1 ---
+float(1.5707963263292)
+--- testing: 2147483648, -1 ---
+float(1.5707963272606)
+--- testing: 2147483648, 7 ---
+float(1.5707963235353)
+--- testing: 2147483648, 9 ---
+float(1.5707963226039)
+--- testing: 2147483648, 65 ---
+float(1.5707962965269)
+--- testing: 2147483648, -44 ---
+float(1.570796347284)
+--- testing: 2147483648, 2147483647 ---
+float(0.78539816363028)
+--- testing: 2147483648, -2147483648 ---
+float(2.3561944901923)
+--- testing: 2147483648, 9223372036854775807 ---
+float(2.3283064365387E-10)
+--- testing: 2147483648, -9223372036854775808 ---
+float(3.141592653357)
+--- testing: -2147483649, 0 ---
+float(-1.5707963267949)
+--- testing: -2147483649, 1 ---
+float(-1.5707963263292)
+--- testing: -2147483649, -1 ---
+float(-1.5707963272606)
+--- testing: -2147483649, 7 ---
+float(-1.5707963235353)
+--- testing: -2147483649, 9 ---
+float(-1.5707963226039)
+--- testing: -2147483649, 65 ---
+float(-1.5707962965269)
+--- testing: -2147483649, -44 ---
+float(-1.570796347284)
+--- testing: -2147483649, 2147483647 ---
+float(-0.78539816386311)
+--- testing: -2147483649, -2147483648 ---
+float(-2.3561944899595)
+--- testing: -2147483649, 9223372036854775807 ---
+float(-2.3283064376229E-10)
+--- testing: -2147483649, -9223372036854775808 ---
+float(-3.141592653357)
+--- testing: 4294967294, 0 ---
+float(1.5707963267949)
+--- testing: 4294967294, 1 ---
+float(1.5707963265621)
+--- testing: 4294967294, -1 ---
+float(1.5707963270277)
+--- testing: 4294967294, 7 ---
+float(1.5707963251651)
+--- testing: 4294967294, 9 ---
+float(1.5707963246994)
+--- testing: 4294967294, 65 ---
+float(1.5707963116609)
+--- testing: 4294967294, -44 ---
+float(1.5707963370394)
+--- testing: 4294967294, 2147483647 ---
+float(1.1071487177941)
+--- testing: 4294967294, -2147483648 ---
+float(2.034443935982)
+--- testing: 4294967294, 9223372036854775807 ---
+float(4.656612870909E-10)
+--- testing: 4294967294, -9223372036854775808 ---
+float(3.1415926531241)
+--- testing: 4294967295, 0 ---
+float(1.5707963267949)
+--- testing: 4294967295, 1 ---
+float(1.5707963265621)
+--- testing: 4294967295, -1 ---
+float(1.5707963270277)
+--- testing: 4294967295, 7 ---
+float(1.5707963251651)
+--- testing: 4294967295, 9 ---
+float(1.5707963246994)
+--- testing: 4294967295, 65 ---
+float(1.5707963116609)
+--- testing: 4294967295, -44 ---
+float(1.5707963370394)
+--- testing: 4294967295, 2147483647 ---
+float(1.1071487178872)
+--- testing: 4294967295, -2147483648 ---
+float(2.0344439358888)
+--- testing: 4294967295, 9223372036854775807 ---
+float(4.6566128719932E-10)
+--- testing: 4294967295, -9223372036854775808 ---
+float(3.1415926531241)
+--- testing: 4294967293, 0 ---
+float(1.5707963267949)
+--- testing: 4294967293, 1 ---
+float(1.5707963265621)
+--- testing: 4294967293, -1 ---
+float(1.5707963270277)
+--- testing: 4294967293, 7 ---
+float(1.5707963251651)
+--- testing: 4294967293, 9 ---
+float(1.5707963246994)
+--- testing: 4294967293, 65 ---
+float(1.5707963116609)
+--- testing: 4294967293, -44 ---
+float(1.5707963370394)
+--- testing: 4294967293, 2147483647 ---
+float(1.107148717701)
+--- testing: 4294967293, -2147483648 ---
+float(2.0344439360751)
+--- testing: 4294967293, 9223372036854775807 ---
+float(4.6566128698248E-10)
+--- testing: 4294967293, -9223372036854775808 ---
+float(3.1415926531241)
+--- testing: 9223372036854775806, 0 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, 1 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, -1 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, 7 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, 9 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, 65 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, -44 ---
+float(1.5707963267949)
+--- testing: 9223372036854775806, 2147483647 ---
+float(1.5707963265621)
+--- testing: 9223372036854775806, -2147483648 ---
+float(1.5707963270277)
+--- testing: 9223372036854775806, 9223372036854775807 ---
+float(0.78539816339745)
+--- testing: 9223372036854775806, -9223372036854775808 ---
+float(2.3561944901923)
+--- testing: 9.2233720368548E+18, 0 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, 1 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, -1 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, 7 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, 9 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, 65 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, -44 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18, 2147483647 ---
+float(1.5707963265621)
+--- testing: 9.2233720368548E+18, -2147483648 ---
+float(1.5707963270277)
+--- testing: 9.2233720368548E+18, 9223372036854775807 ---
+float(0.78539816339745)
+--- testing: 9.2233720368548E+18, -9223372036854775808 ---
+float(2.3561944901923)
+--- testing: -9223372036854775807, 0 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, 1 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, -1 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, 7 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, 9 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, 65 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, -44 ---
+float(-1.5707963267949)
+--- testing: -9223372036854775807, 2147483647 ---
+float(-1.5707963265621)
+--- testing: -9223372036854775807, -2147483648 ---
+float(-1.5707963270277)
+--- testing: -9223372036854775807, 9223372036854775807 ---
+float(-0.78539816339745)
+--- testing: -9223372036854775807, -9223372036854775808 ---
+float(-2.3561944901923)
+--- testing: -9.2233720368548E+18, 0 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, 1 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, -1 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, 7 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, 9 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, 65 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, -44 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18, 2147483647 ---
+float(-1.5707963265621)
+--- testing: -9.2233720368548E+18, -2147483648 ---
+float(-1.5707963270277)
+--- testing: -9.2233720368548E+18, 9223372036854775807 ---
+float(-0.78539816339745)
+--- testing: -9.2233720368548E+18, -9223372036854775808 ---
+float(-2.3561944901923)
+===DONE===
diff --git a/ext/standard/tests/math/atan_basiclong_64bit.phpt b/ext/standard/tests/math/atan_basiclong_64bit.phpt
new file mode 100644
index 0000000..ffdfe24
--- /dev/null
+++ b/ext/standard/tests/math/atan_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test atan function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(atan($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(1.5707963267949)
+--- testing: -9223372036854775808 ---
+float(-1.5707963267949)
+--- testing: 2147483647 ---
+float(1.5707963263292)
+--- testing: -2147483648 ---
+float(-1.5707963263292)
+--- testing: 9223372034707292160 ---
+float(1.5707963267949)
+--- testing: -9223372034707292160 ---
+float(-1.5707963267949)
+--- testing: 2147483648 ---
+float(1.5707963263292)
+--- testing: -2147483649 ---
+float(-1.5707963263292)
+--- testing: 4294967294 ---
+float(1.5707963265621)
+--- testing: 4294967295 ---
+float(1.5707963265621)
+--- testing: 4294967293 ---
+float(1.5707963265621)
+--- testing: 9223372036854775806 ---
+float(1.5707963267949)
+--- testing: 9.2233720368548E+18 ---
+float(1.5707963267949)
+--- testing: -9223372036854775807 ---
+float(-1.5707963267949)
+--- testing: -9.2233720368548E+18 ---
+float(-1.5707963267949)
+===DONE===
diff --git a/ext/standard/tests/math/atanh_basiclong_64bit.phpt b/ext/standard/tests/math/atanh_basiclong_64bit.phpt
new file mode 100644
index 0000000..d7608ca
--- /dev/null
+++ b/ext/standard/tests/math/atanh_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test atanh function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(atanh($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(NAN)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(NAN)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(NAN)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(NAN)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(NAN)
+--- testing: 4294967295 ---
+float(NAN)
+--- testing: 4294967293 ---
+float(NAN)
+--- testing: 9223372036854775806 ---
+float(NAN)
+--- testing: 9.2233720368548E+18 ---
+float(NAN)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/bindec_basiclong_64bit.phpt b/ext/standard/tests/math/bindec_basiclong_64bit.phpt
new file mode 100644
index 0000000..3cc57d5
--- /dev/null
+++ b/ext/standard/tests/math/bindec_basiclong_64bit.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test bindec function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$binLongStrs = array(
+   '0'.str_repeat('1',63), 
+   str_repeat('1',64), 
+   '0'.str_repeat('1',31), 
+   str_repeat('1',32), 
+   '0'.str_repeat('1',64),
+   str_repeat('1',65), 
+   '0'.str_repeat('1',32), 
+   str_repeat('1',33)
+);
+
+
+foreach ($binLongStrs as $strVal) {
+   echo "--- testing: $strVal ---\n";
+   var_dump(bindec($strVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 0111111111111111111111111111111111111111111111111111111111111111 ---
+int(9223372036854775807)
+--- testing: 1111111111111111111111111111111111111111111111111111111111111111 ---
+float(1.844674407371E+19)
+--- testing: 01111111111111111111111111111111 ---
+int(2147483647)
+--- testing: 11111111111111111111111111111111 ---
+int(4294967295)
+--- testing: 01111111111111111111111111111111111111111111111111111111111111111 ---
+float(1.844674407371E+19)
+--- testing: 11111111111111111111111111111111111111111111111111111111111111111 ---
+float(3.6893488147419E+19)
+--- testing: 011111111111111111111111111111111 ---
+int(4294967295)
+--- testing: 111111111111111111111111111111111 ---
+int(8589934591)
+===DONE===
diff --git a/ext/standard/tests/math/ceil_basiclong_64bit.phpt b/ext/standard/tests/math/ceil_basiclong_64bit.phpt
new file mode 100644
index 0000000..b4c23d8
--- /dev/null
+++ b/ext/standard/tests/math/ceil_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test ceil function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(ceil($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: 2147483647 ---
+float(2147483647)
+--- testing: -2147483648 ---
+float(-2147483648)
+--- testing: 9223372034707292160 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160 ---
+float(-9.2233720347073E+18)
+--- testing: 2147483648 ---
+float(2147483648)
+--- testing: -2147483649 ---
+float(-2147483649)
+--- testing: 4294967294 ---
+float(4294967294)
+--- testing: 4294967295 ---
+float(4294967295)
+--- testing: 4294967293 ---
+float(4294967293)
+--- testing: 9223372036854775806 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/ext/standard/tests/math/cos_basiclong_64bit.phpt b/ext/standard/tests/math/cos_basiclong_64bit.phpt
new file mode 100644
index 0000000..d9c3c7c
--- /dev/null
+++ b/ext/standard/tests/math/cos_basiclong_64bit.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test cos function : 64bit long tests
+--INI--
+precision=10
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(cos($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(0.01180007651)
+--- testing: -9223372036854775808 ---
+float(0.01180007651)
+--- testing: 2147483647 ---
+float(-0.6888366919)
+--- testing: -2147483648 ---
+float(0.2378161946)
+--- testing: 9223372034707292160 ---
+float(-0.9684363007)
+--- testing: -9223372034707292160 ---
+float(-0.9684363007)
+--- testing: 2147483648 ---
+float(0.2378161946)
+--- testing: -2147483649 ---
+float(0.9458219685)
+--- testing: 4294967294 ---
+float(-0.05100802385)
+--- testing: 4294967295 ---
+float(-0.8679353474)
+--- testing: 4294967293 ---
+float(0.8128158416)
+--- testing: 9223372036854775806 ---
+float(0.01180007651)
+--- testing: 9.223372037E+18 ---
+float(0.01180007651)
+--- testing: -9223372036854775807 ---
+float(0.01180007651)
+--- testing: -9.223372037E+18 ---
+float(0.01180007651)
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/math/cosh_basiclong_64bit.phpt b/ext/standard/tests/math/cosh_basiclong_64bit.phpt
new file mode 100644
index 0000000..0916839
--- /dev/null
+++ b/ext/standard/tests/math/cosh_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test cosh function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(cosh($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(INF)
+--- testing: -9223372036854775808 ---
+float(INF)
+--- testing: 2147483647 ---
+float(INF)
+--- testing: -2147483648 ---
+float(INF)
+--- testing: 9223372034707292160 ---
+float(INF)
+--- testing: -9223372034707292160 ---
+float(INF)
+--- testing: 2147483648 ---
+float(INF)
+--- testing: -2147483649 ---
+float(INF)
+--- testing: 4294967294 ---
+float(INF)
+--- testing: 4294967295 ---
+float(INF)
+--- testing: 4294967293 ---
+float(INF)
+--- testing: 9223372036854775806 ---
+float(INF)
+--- testing: 9.2233720368548E+18 ---
+float(INF)
+--- testing: -9223372036854775807 ---
+float(INF)
+--- testing: -9.2233720368548E+18 ---
+float(INF)
+===DONE===
diff --git a/ext/standard/tests/math/decbin_basiclong_64bit.phpt b/ext/standard/tests/math/decbin_basiclong_64bit.phpt
new file mode 100644
index 0000000..3dc61c4
--- /dev/null
+++ b/ext/standard/tests/math/decbin_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test decbin function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(decbin($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+string(63) "111111111111111111111111111111111111111111111111111111111111111"
+--- testing: -9223372036854775808 ---
+string(64) "1000000000000000000000000000000000000000000000000000000000000000"
+--- testing: 2147483647 ---
+string(31) "1111111111111111111111111111111"
+--- testing: -2147483648 ---
+string(64) "1111111111111111111111111111111110000000000000000000000000000000"
+--- testing: 9223372034707292160 ---
+string(63) "111111111111111111111111111111110000000000000000000000000000000"
+--- testing: -9223372034707292160 ---
+string(64) "1000000000000000000000000000000010000000000000000000000000000000"
+--- testing: 2147483648 ---
+string(32) "10000000000000000000000000000000"
+--- testing: -2147483649 ---
+string(64) "1111111111111111111111111111111101111111111111111111111111111111"
+--- testing: 4294967294 ---
+string(32) "11111111111111111111111111111110"
+--- testing: 4294967295 ---
+string(32) "11111111111111111111111111111111"
+--- testing: 4294967293 ---
+string(32) "11111111111111111111111111111101"
+--- testing: 9223372036854775806 ---
+string(63) "111111111111111111111111111111111111111111111111111111111111110"
+--- testing: 9.2233720368548E+18 ---
+string(64) "1000000000000000000000000000000000000000000000000000000000000000"
+--- testing: -9223372036854775807 ---
+string(64) "1000000000000000000000000000000000000000000000000000000000000001"
+--- testing: -9.2233720368548E+18 ---
+string(64) "1000000000000000000000000000000000000000000000000000000000000000"
+===DONE===
diff --git a/ext/standard/tests/math/dechex_basiclong_64bit.phpt b/ext/standard/tests/math/dechex_basiclong_64bit.phpt
new file mode 100644
index 0000000..40b0879
--- /dev/null
+++ b/ext/standard/tests/math/dechex_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test dechex function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(dechex($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+string(16) "7fffffffffffffff"
+--- testing: -9223372036854775808 ---
+string(16) "8000000000000000"
+--- testing: 2147483647 ---
+string(8) "7fffffff"
+--- testing: -2147483648 ---
+string(16) "ffffffff80000000"
+--- testing: 9223372034707292160 ---
+string(16) "7fffffff80000000"
+--- testing: -9223372034707292160 ---
+string(16) "8000000080000000"
+--- testing: 2147483648 ---
+string(8) "80000000"
+--- testing: -2147483649 ---
+string(16) "ffffffff7fffffff"
+--- testing: 4294967294 ---
+string(8) "fffffffe"
+--- testing: 4294967295 ---
+string(8) "ffffffff"
+--- testing: 4294967293 ---
+string(8) "fffffffd"
+--- testing: 9223372036854775806 ---
+string(16) "7ffffffffffffffe"
+--- testing: 9.2233720368548E+18 ---
+string(16) "8000000000000000"
+--- testing: -9223372036854775807 ---
+string(16) "8000000000000001"
+--- testing: -9.2233720368548E+18 ---
+string(16) "8000000000000000"
+===DONE===
diff --git a/ext/standard/tests/math/decoct_basiclong_64bit.phpt b/ext/standard/tests/math/decoct_basiclong_64bit.phpt
new file mode 100644
index 0000000..d743417
--- /dev/null
+++ b/ext/standard/tests/math/decoct_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test decoct function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(decoct($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+string(21) "777777777777777777777"
+--- testing: -9223372036854775808 ---
+string(22) "1000000000000000000000"
+--- testing: 2147483647 ---
+string(11) "17777777777"
+--- testing: -2147483648 ---
+string(22) "1777777777760000000000"
+--- testing: 9223372034707292160 ---
+string(21) "777777777760000000000"
+--- testing: -9223372034707292160 ---
+string(22) "1000000000020000000000"
+--- testing: 2147483648 ---
+string(11) "20000000000"
+--- testing: -2147483649 ---
+string(22) "1777777777757777777777"
+--- testing: 4294967294 ---
+string(11) "37777777776"
+--- testing: 4294967295 ---
+string(11) "37777777777"
+--- testing: 4294967293 ---
+string(11) "37777777775"
+--- testing: 9223372036854775806 ---
+string(21) "777777777777777777776"
+--- testing: 9.2233720368548E+18 ---
+string(22) "1000000000000000000000"
+--- testing: -9223372036854775807 ---
+string(22) "1000000000000000000001"
+--- testing: -9.2233720368548E+18 ---
+string(22) "1000000000000000000000"
+===DONE===
diff --git a/ext/standard/tests/math/deg2rad_basiclong_64bit.phpt b/ext/standard/tests/math/deg2rad_basiclong_64bit.phpt
new file mode 100644
index 0000000..c646276
--- /dev/null
+++ b/ext/standard/tests/math/deg2rad_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test deg2rad function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(deg2rad($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(1.6097821017949E+17)
+--- testing: -9223372036854775808 ---
+float(-1.6097821017949E+17)
+--- testing: 2147483647 ---
+float(37480660.272886)
+--- testing: -2147483648 ---
+float(-37480660.290339)
+--- testing: 9223372034707292160 ---
+float(1.6097821014201E+17)
+--- testing: -9223372034707292160 ---
+float(-1.6097821014201E+17)
+--- testing: 2147483648 ---
+float(37480660.290339)
+--- testing: -2147483649 ---
+float(-37480660.307792)
+--- testing: 4294967294 ---
+float(74961320.545771)
+--- testing: 4294967295 ---
+float(74961320.563225)
+--- testing: 4294967293 ---
+float(74961320.528318)
+--- testing: 9223372036854775806 ---
+float(1.6097821017949E+17)
+--- testing: 9.2233720368548E+18 ---
+float(1.6097821017949E+17)
+--- testing: -9223372036854775807 ---
+float(-1.6097821017949E+17)
+--- testing: -9.2233720368548E+18 ---
+float(-1.6097821017949E+17)
+===DONE===
diff --git a/ext/standard/tests/math/exp_basiclong_64bit.phpt b/ext/standard/tests/math/exp_basiclong_64bit.phpt
new file mode 100644
index 0000000..5156d05
--- /dev/null
+++ b/ext/standard/tests/math/exp_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test exp function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(exp($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(INF)
+--- testing: -9223372036854775808 ---
+float(0)
+--- testing: 2147483647 ---
+float(INF)
+--- testing: -2147483648 ---
+float(0)
+--- testing: 9223372034707292160 ---
+float(INF)
+--- testing: -9223372034707292160 ---
+float(0)
+--- testing: 2147483648 ---
+float(INF)
+--- testing: -2147483649 ---
+float(0)
+--- testing: 4294967294 ---
+float(INF)
+--- testing: 4294967295 ---
+float(INF)
+--- testing: 4294967293 ---
+float(INF)
+--- testing: 9223372036854775806 ---
+float(INF)
+--- testing: 9.2233720368548E+18 ---
+float(INF)
+--- testing: -9223372036854775807 ---
+float(0)
+--- testing: -9.2233720368548E+18 ---
+float(0)
+===DONE===
diff --git a/ext/standard/tests/math/expm1_basiclong_64bit.phpt b/ext/standard/tests/math/expm1_basiclong_64bit.phpt
new file mode 100644
index 0000000..6963976
--- /dev/null
+++ b/ext/standard/tests/math/expm1_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test expm1 function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(expm1($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(INF)
+--- testing: -9223372036854775808 ---
+float(-1)
+--- testing: 2147483647 ---
+float(INF)
+--- testing: -2147483648 ---
+float(-1)
+--- testing: 9223372034707292160 ---
+float(INF)
+--- testing: -9223372034707292160 ---
+float(-1)
+--- testing: 2147483648 ---
+float(INF)
+--- testing: -2147483649 ---
+float(-1)
+--- testing: 4294967294 ---
+float(INF)
+--- testing: 4294967295 ---
+float(INF)
+--- testing: 4294967293 ---
+float(INF)
+--- testing: 9223372036854775806 ---
+float(INF)
+--- testing: 9.2233720368548E+18 ---
+float(INF)
+--- testing: -9223372036854775807 ---
+float(-1)
+--- testing: -9.2233720368548E+18 ---
+float(-1)
+===DONE===
diff --git a/ext/standard/tests/math/floor_basiclong_64bit.phpt b/ext/standard/tests/math/floor_basiclong_64bit.phpt
new file mode 100644
index 0000000..65a50fc
--- /dev/null
+++ b/ext/standard/tests/math/floor_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test floor function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(floor($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: 2147483647 ---
+float(2147483647)
+--- testing: -2147483648 ---
+float(-2147483648)
+--- testing: 9223372034707292160 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160 ---
+float(-9.2233720347073E+18)
+--- testing: 2147483648 ---
+float(2147483648)
+--- testing: -2147483649 ---
+float(-2147483649)
+--- testing: 4294967294 ---
+float(4294967294)
+--- testing: 4294967295 ---
+float(4294967295)
+--- testing: 4294967293 ---
+float(4294967293)
+--- testing: 9223372036854775806 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/ext/standard/tests/math/fmod_basiclong_64bit.phpt b/ext/standard/tests/math/fmod_basiclong_64bit.phpt
new file mode 100644
index 0000000..1502b65
--- /dev/null
+++ b/ext/standard/tests/math/fmod_basiclong_64bit.phpt
@@ -0,0 +1,364 @@
+--TEST--
+Test fmod function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MIN_32Bit, MAX_64Bit, MIN_64Bit);
+
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal, $otherVal ---\n";   
+      var_dump(fmod($longVal, $otherVal));
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807, 0 ---
+float(NAN)
+--- testing: 9223372036854775807, 1 ---
+float(0)
+--- testing: 9223372036854775807, -1 ---
+float(0)
+--- testing: 9223372036854775807, 7 ---
+float(1)
+--- testing: 9223372036854775807, 9 ---
+float(8)
+--- testing: 9223372036854775807, 65 ---
+float(8)
+--- testing: 9223372036854775807, -44 ---
+float(8)
+--- testing: 9223372036854775807, 2147483647 ---
+float(2)
+--- testing: 9223372036854775807, -2147483648 ---
+float(0)
+--- testing: 9223372036854775807, 9223372036854775807 ---
+float(0)
+--- testing: 9223372036854775807, -9223372036854775808 ---
+float(0)
+--- testing: -9223372036854775808, 0 ---
+float(NAN)
+--- testing: -9223372036854775808, 1 ---
+float(-0)
+--- testing: -9223372036854775808, -1 ---
+float(-0)
+--- testing: -9223372036854775808, 7 ---
+float(-1)
+--- testing: -9223372036854775808, 9 ---
+float(-8)
+--- testing: -9223372036854775808, 65 ---
+float(-8)
+--- testing: -9223372036854775808, -44 ---
+float(-8)
+--- testing: -9223372036854775808, 2147483647 ---
+float(-2)
+--- testing: -9223372036854775808, -2147483648 ---
+float(-0)
+--- testing: -9223372036854775808, 9223372036854775807 ---
+float(-0)
+--- testing: -9223372036854775808, -9223372036854775808 ---
+float(-0)
+--- testing: 2147483647, 0 ---
+float(NAN)
+--- testing: 2147483647, 1 ---
+float(0)
+--- testing: 2147483647, -1 ---
+float(0)
+--- testing: 2147483647, 7 ---
+float(1)
+--- testing: 2147483647, 9 ---
+float(1)
+--- testing: 2147483647, 65 ---
+float(62)
+--- testing: 2147483647, -44 ---
+float(23)
+--- testing: 2147483647, 2147483647 ---
+float(0)
+--- testing: 2147483647, -2147483648 ---
+float(2147483647)
+--- testing: 2147483647, 9223372036854775807 ---
+float(2147483647)
+--- testing: 2147483647, -9223372036854775808 ---
+float(2147483647)
+--- testing: -2147483648, 0 ---
+float(NAN)
+--- testing: -2147483648, 1 ---
+float(-0)
+--- testing: -2147483648, -1 ---
+float(-0)
+--- testing: -2147483648, 7 ---
+float(-2)
+--- testing: -2147483648, 9 ---
+float(-2)
+--- testing: -2147483648, 65 ---
+float(-63)
+--- testing: -2147483648, -44 ---
+float(-24)
+--- testing: -2147483648, 2147483647 ---
+float(-1)
+--- testing: -2147483648, -2147483648 ---
+float(-0)
+--- testing: -2147483648, 9223372036854775807 ---
+float(-2147483648)
+--- testing: -2147483648, -9223372036854775808 ---
+float(-2147483648)
+--- testing: 9223372034707292160, 0 ---
+float(NAN)
+--- testing: 9223372034707292160, 1 ---
+float(0)
+--- testing: 9223372034707292160, -1 ---
+float(0)
+--- testing: 9223372034707292160, 7 ---
+float(6)
+--- testing: 9223372034707292160, 9 ---
+float(6)
+--- testing: 9223372034707292160, 65 ---
+float(10)
+--- testing: 9223372034707292160, -44 ---
+float(28)
+--- testing: 9223372034707292160, 2147483647 ---
+float(1)
+--- testing: 9223372034707292160, -2147483648 ---
+float(0)
+--- testing: 9223372034707292160, 9223372036854775807 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, -9223372036854775808 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 0 ---
+float(NAN)
+--- testing: -9223372034707292160, 1 ---
+float(-0)
+--- testing: -9223372034707292160, -1 ---
+float(-0)
+--- testing: -9223372034707292160, 7 ---
+float(-6)
+--- testing: -9223372034707292160, 9 ---
+float(-6)
+--- testing: -9223372034707292160, 65 ---
+float(-10)
+--- testing: -9223372034707292160, -44 ---
+float(-28)
+--- testing: -9223372034707292160, 2147483647 ---
+float(-1)
+--- testing: -9223372034707292160, -2147483648 ---
+float(-0)
+--- testing: -9223372034707292160, 9223372036854775807 ---
+float(-9.2233720347073E+18)
+--- testing: -9223372034707292160, -9223372036854775808 ---
+float(-9.2233720347073E+18)
+--- testing: 2147483648, 0 ---
+float(NAN)
+--- testing: 2147483648, 1 ---
+float(0)
+--- testing: 2147483648, -1 ---
+float(0)
+--- testing: 2147483648, 7 ---
+float(2)
+--- testing: 2147483648, 9 ---
+float(2)
+--- testing: 2147483648, 65 ---
+float(63)
+--- testing: 2147483648, -44 ---
+float(24)
+--- testing: 2147483648, 2147483647 ---
+float(1)
+--- testing: 2147483648, -2147483648 ---
+float(0)
+--- testing: 2147483648, 9223372036854775807 ---
+float(2147483648)
+--- testing: 2147483648, -9223372036854775808 ---
+float(2147483648)
+--- testing: -2147483649, 0 ---
+float(NAN)
+--- testing: -2147483649, 1 ---
+float(-0)
+--- testing: -2147483649, -1 ---
+float(-0)
+--- testing: -2147483649, 7 ---
+float(-3)
+--- testing: -2147483649, 9 ---
+float(-3)
+--- testing: -2147483649, 65 ---
+float(-64)
+--- testing: -2147483649, -44 ---
+float(-25)
+--- testing: -2147483649, 2147483647 ---
+float(-2)
+--- testing: -2147483649, -2147483648 ---
+float(-1)
+--- testing: -2147483649, 9223372036854775807 ---
+float(-2147483649)
+--- testing: -2147483649, -9223372036854775808 ---
+float(-2147483649)
+--- testing: 4294967294, 0 ---
+float(NAN)
+--- testing: 4294967294, 1 ---
+float(0)
+--- testing: 4294967294, -1 ---
+float(0)
+--- testing: 4294967294, 7 ---
+float(2)
+--- testing: 4294967294, 9 ---
+float(2)
+--- testing: 4294967294, 65 ---
+float(59)
+--- testing: 4294967294, -44 ---
+float(2)
+--- testing: 4294967294, 2147483647 ---
+float(0)
+--- testing: 4294967294, -2147483648 ---
+float(2147483646)
+--- testing: 4294967294, 9223372036854775807 ---
+float(4294967294)
+--- testing: 4294967294, -9223372036854775808 ---
+float(4294967294)
+--- testing: 4294967295, 0 ---
+float(NAN)
+--- testing: 4294967295, 1 ---
+float(0)
+--- testing: 4294967295, -1 ---
+float(0)
+--- testing: 4294967295, 7 ---
+float(3)
+--- testing: 4294967295, 9 ---
+float(3)
+--- testing: 4294967295, 65 ---
+float(60)
+--- testing: 4294967295, -44 ---
+float(3)
+--- testing: 4294967295, 2147483647 ---
+float(1)
+--- testing: 4294967295, -2147483648 ---
+float(2147483647)
+--- testing: 4294967295, 9223372036854775807 ---
+float(4294967295)
+--- testing: 4294967295, -9223372036854775808 ---
+float(4294967295)
+--- testing: 4294967293, 0 ---
+float(NAN)
+--- testing: 4294967293, 1 ---
+float(0)
+--- testing: 4294967293, -1 ---
+float(0)
+--- testing: 4294967293, 7 ---
+float(1)
+--- testing: 4294967293, 9 ---
+float(1)
+--- testing: 4294967293, 65 ---
+float(58)
+--- testing: 4294967293, -44 ---
+float(1)
+--- testing: 4294967293, 2147483647 ---
+float(2147483646)
+--- testing: 4294967293, -2147483648 ---
+float(2147483645)
+--- testing: 4294967293, 9223372036854775807 ---
+float(4294967293)
+--- testing: 4294967293, -9223372036854775808 ---
+float(4294967293)
+--- testing: 9223372036854775806, 0 ---
+float(NAN)
+--- testing: 9223372036854775806, 1 ---
+float(0)
+--- testing: 9223372036854775806, -1 ---
+float(0)
+--- testing: 9223372036854775806, 7 ---
+float(1)
+--- testing: 9223372036854775806, 9 ---
+float(8)
+--- testing: 9223372036854775806, 65 ---
+float(8)
+--- testing: 9223372036854775806, -44 ---
+float(8)
+--- testing: 9223372036854775806, 2147483647 ---
+float(2)
+--- testing: 9223372036854775806, -2147483648 ---
+float(0)
+--- testing: 9223372036854775806, 9223372036854775807 ---
+float(0)
+--- testing: 9223372036854775806, -9223372036854775808 ---
+float(0)
+--- testing: 9.2233720368548E+18, 0 ---
+float(NAN)
+--- testing: 9.2233720368548E+18, 1 ---
+float(0)
+--- testing: 9.2233720368548E+18, -1 ---
+float(0)
+--- testing: 9.2233720368548E+18, 7 ---
+float(1)
+--- testing: 9.2233720368548E+18, 9 ---
+float(8)
+--- testing: 9.2233720368548E+18, 65 ---
+float(8)
+--- testing: 9.2233720368548E+18, -44 ---
+float(8)
+--- testing: 9.2233720368548E+18, 2147483647 ---
+float(2)
+--- testing: 9.2233720368548E+18, -2147483648 ---
+float(0)
+--- testing: 9.2233720368548E+18, 9223372036854775807 ---
+float(0)
+--- testing: 9.2233720368548E+18, -9223372036854775808 ---
+float(0)
+--- testing: -9223372036854775807, 0 ---
+float(NAN)
+--- testing: -9223372036854775807, 1 ---
+float(-0)
+--- testing: -9223372036854775807, -1 ---
+float(-0)
+--- testing: -9223372036854775807, 7 ---
+float(-1)
+--- testing: -9223372036854775807, 9 ---
+float(-8)
+--- testing: -9223372036854775807, 65 ---
+float(-8)
+--- testing: -9223372036854775807, -44 ---
+float(-8)
+--- testing: -9223372036854775807, 2147483647 ---
+float(-2)
+--- testing: -9223372036854775807, -2147483648 ---
+float(-0)
+--- testing: -9223372036854775807, 9223372036854775807 ---
+float(-0)
+--- testing: -9223372036854775807, -9223372036854775808 ---
+float(-0)
+--- testing: -9.2233720368548E+18, 0 ---
+float(NAN)
+--- testing: -9.2233720368548E+18, 1 ---
+float(-0)
+--- testing: -9.2233720368548E+18, -1 ---
+float(-0)
+--- testing: -9.2233720368548E+18, 7 ---
+float(-1)
+--- testing: -9.2233720368548E+18, 9 ---
+float(-8)
+--- testing: -9.2233720368548E+18, 65 ---
+float(-8)
+--- testing: -9.2233720368548E+18, -44 ---
+float(-8)
+--- testing: -9.2233720368548E+18, 2147483647 ---
+float(-2)
+--- testing: -9.2233720368548E+18, -2147483648 ---
+float(-0)
+--- testing: -9.2233720368548E+18, 9223372036854775807 ---
+float(-0)
+--- testing: -9.2233720368548E+18, -9223372036854775808 ---
+float(-0)
+===DONE===
diff --git a/ext/standard/tests/math/hexdec_basiclong_64bit.phpt b/ext/standard/tests/math/hexdec_basiclong_64bit.phpt
new file mode 100644
index 0000000..29c684a
--- /dev/null
+++ b/ext/standard/tests/math/hexdec_basiclong_64bit.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test hexdec function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$hexLongStrs = array(
+   '7'.str_repeat('f',15), 
+   str_repeat('f',16), 
+   '7'.str_repeat('f',7), 
+   str_repeat('f',8), 
+   '7'.str_repeat('f',16),
+   str_repeat('f',18),
+   '7'.str_repeat('f',8), 
+   str_repeat('f',9)
+);
+
+
+foreach ($hexLongStrs as $strVal) {
+   echo "--- testing: $strVal ---\n";
+   var_dump(hexdec($strVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 7fffffffffffffff ---
+int(9223372036854775807)
+--- testing: ffffffffffffffff ---
+float(1.844674407371E+19)
+--- testing: 7fffffff ---
+int(2147483647)
+--- testing: ffffffff ---
+int(4294967295)
+--- testing: 7ffffffffffffffff ---
+float(1.4757395258968E+20)
+--- testing: ffffffffffffffffff ---
+float(4.7223664828696E+21)
+--- testing: 7ffffffff ---
+int(34359738367)
+--- testing: fffffffff ---
+int(68719476735)
+===DONE===
diff --git a/ext/standard/tests/math/hypot_basiclong_64bit.phpt b/ext/standard/tests/math/hypot_basiclong_64bit.phpt
new file mode 100644
index 0000000..241fa9c
--- /dev/null
+++ b/ext/standard/tests/math/hypot_basiclong_64bit.phpt
@@ -0,0 +1,364 @@
+--TEST--
+Test hypot function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MIN_32Bit, MAX_64Bit, MIN_64Bit);
+
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal, $otherVal ---\n";   
+      var_dump(hypot($longVal, $otherVal));
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807, 0 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, 1 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, -1 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, 7 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, 9 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, 65 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, -44 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, 2147483647 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, -2147483648 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807, 9223372036854775807 ---
+float(1.3043817825333E+19)
+--- testing: 9223372036854775807, -9223372036854775808 ---
+float(1.3043817825333E+19)
+--- testing: -9223372036854775808, 0 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, 1 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, -1 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, 7 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, 9 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, 65 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, -44 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, 2147483647 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, -2147483648 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808, 9223372036854775807 ---
+float(1.3043817825333E+19)
+--- testing: -9223372036854775808, -9223372036854775808 ---
+float(1.3043817825333E+19)
+--- testing: 2147483647, 0 ---
+float(2147483647)
+--- testing: 2147483647, 1 ---
+float(2147483647)
+--- testing: 2147483647, -1 ---
+float(2147483647)
+--- testing: 2147483647, 7 ---
+float(2147483647)
+--- testing: 2147483647, 9 ---
+float(2147483647)
+--- testing: 2147483647, 65 ---
+float(2147483647)
+--- testing: 2147483647, -44 ---
+float(2147483647)
+--- testing: 2147483647, 2147483647 ---
+float(3037000498.5618)
+--- testing: 2147483647, -2147483648 ---
+float(3037000499.2689)
+--- testing: 2147483647, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 2147483647, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: -2147483648, 0 ---
+float(2147483648)
+--- testing: -2147483648, 1 ---
+float(2147483648)
+--- testing: -2147483648, -1 ---
+float(2147483648)
+--- testing: -2147483648, 7 ---
+float(2147483648)
+--- testing: -2147483648, 9 ---
+float(2147483648)
+--- testing: -2147483648, 65 ---
+float(2147483648)
+--- testing: -2147483648, -44 ---
+float(2147483648)
+--- testing: -2147483648, 2147483647 ---
+float(3037000499.2689)
+--- testing: -2147483648, -2147483648 ---
+float(3037000499.976)
+--- testing: -2147483648, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -2147483648, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 9223372034707292160, 0 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, 1 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, -1 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, 7 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, 9 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, 65 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, -44 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, 2147483647 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, -2147483648 ---
+float(9.2233720347073E+18)
+--- testing: 9223372034707292160, 9223372036854775807 ---
+float(1.3043817823814E+19)
+--- testing: 9223372034707292160, -9223372036854775808 ---
+float(1.3043817823814E+19)
+--- testing: -9223372034707292160, 0 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 1 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, -1 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 7 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 9 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 65 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, -44 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 2147483647 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, -2147483648 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160, 9223372036854775807 ---
+float(1.3043817823814E+19)
+--- testing: -9223372034707292160, -9223372036854775808 ---
+float(1.3043817823814E+19)
+--- testing: 2147483648, 0 ---
+float(2147483648)
+--- testing: 2147483648, 1 ---
+float(2147483648)
+--- testing: 2147483648, -1 ---
+float(2147483648)
+--- testing: 2147483648, 7 ---
+float(2147483648)
+--- testing: 2147483648, 9 ---
+float(2147483648)
+--- testing: 2147483648, 65 ---
+float(2147483648)
+--- testing: 2147483648, -44 ---
+float(2147483648)
+--- testing: 2147483648, 2147483647 ---
+float(3037000499.2689)
+--- testing: 2147483648, -2147483648 ---
+float(3037000499.976)
+--- testing: 2147483648, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 2147483648, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: -2147483649, 0 ---
+float(2147483649)
+--- testing: -2147483649, 1 ---
+float(2147483649)
+--- testing: -2147483649, -1 ---
+float(2147483649)
+--- testing: -2147483649, 7 ---
+float(2147483649)
+--- testing: -2147483649, 9 ---
+float(2147483649)
+--- testing: -2147483649, 65 ---
+float(2147483649)
+--- testing: -2147483649, -44 ---
+float(2147483649)
+--- testing: -2147483649, 2147483647 ---
+float(3037000499.976)
+--- testing: -2147483649, -2147483648 ---
+float(3037000500.6832)
+--- testing: -2147483649, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -2147483649, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 4294967294, 0 ---
+float(4294967294)
+--- testing: 4294967294, 1 ---
+float(4294967294)
+--- testing: 4294967294, -1 ---
+float(4294967294)
+--- testing: 4294967294, 7 ---
+float(4294967294)
+--- testing: 4294967294, 9 ---
+float(4294967294)
+--- testing: 4294967294, 65 ---
+float(4294967294)
+--- testing: 4294967294, -44 ---
+float(4294967294)
+--- testing: 4294967294, 2147483647 ---
+float(4801919415.2612)
+--- testing: 4294967294, -2147483648 ---
+float(4801919415.7084)
+--- testing: 4294967294, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 4294967294, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 4294967295, 0 ---
+float(4294967295)
+--- testing: 4294967295, 1 ---
+float(4294967295)
+--- testing: 4294967295, -1 ---
+float(4294967295)
+--- testing: 4294967295, 7 ---
+float(4294967295)
+--- testing: 4294967295, 9 ---
+float(4294967295)
+--- testing: 4294967295, 65 ---
+float(4294967295)
+--- testing: 4294967295, -44 ---
+float(4294967295)
+--- testing: 4294967295, 2147483647 ---
+float(4801919416.1556)
+--- testing: 4294967295, -2147483648 ---
+float(4801919416.6028)
+--- testing: 4294967295, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 4294967295, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 4294967293, 0 ---
+float(4294967293)
+--- testing: 4294967293, 1 ---
+float(4294967293)
+--- testing: 4294967293, -1 ---
+float(4294967293)
+--- testing: 4294967293, 7 ---
+float(4294967293)
+--- testing: 4294967293, 9 ---
+float(4294967293)
+--- testing: 4294967293, 65 ---
+float(4294967293)
+--- testing: 4294967293, -44 ---
+float(4294967293)
+--- testing: 4294967293, 2147483647 ---
+float(4801919414.3667)
+--- testing: 4294967293, -2147483648 ---
+float(4801919414.8139)
+--- testing: 4294967293, 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 4294967293, -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 0 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 1 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, -1 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 7 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 9 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 65 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, -44 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 2147483647 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, -2147483648 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806, 9223372036854775807 ---
+float(1.3043817825333E+19)
+--- testing: 9223372036854775806, -9223372036854775808 ---
+float(1.3043817825333E+19)
+--- testing: 9.2233720368548E+18, 0 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, 1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, -1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, 7 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, 9 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, 65 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, -44 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, 2147483647 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, -2147483648 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, 9223372036854775807 ---
+float(1.3043817825333E+19)
+--- testing: 9.2233720368548E+18, -9223372036854775808 ---
+float(1.3043817825333E+19)
+--- testing: -9223372036854775807, 0 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, 1 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, -1 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, 7 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, 9 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, 65 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, -44 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, 2147483647 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, -2147483648 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807, 9223372036854775807 ---
+float(1.3043817825333E+19)
+--- testing: -9223372036854775807, -9223372036854775808 ---
+float(1.3043817825333E+19)
+--- testing: -9.2233720368548E+18, 0 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, 1 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, -1 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, 7 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, 9 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, 65 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, -44 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, 2147483647 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, -2147483648 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, 9223372036854775807 ---
+float(1.3043817825333E+19)
+--- testing: -9.2233720368548E+18, -9223372036854775808 ---
+float(1.3043817825333E+19)
+===DONE===
diff --git a/ext/standard/tests/math/is_finite_basiclong_64bit.phpt b/ext/standard/tests/math/is_finite_basiclong_64bit.phpt
new file mode 100644
index 0000000..bbc43f7
--- /dev/null
+++ b/ext/standard/tests/math/is_finite_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test is_finite function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(is_finite($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+bool(true)
+--- testing: -9223372036854775808 ---
+bool(true)
+--- testing: 2147483647 ---
+bool(true)
+--- testing: -2147483648 ---
+bool(true)
+--- testing: 9223372034707292160 ---
+bool(true)
+--- testing: -9223372034707292160 ---
+bool(true)
+--- testing: 2147483648 ---
+bool(true)
+--- testing: -2147483649 ---
+bool(true)
+--- testing: 4294967294 ---
+bool(true)
+--- testing: 4294967295 ---
+bool(true)
+--- testing: 4294967293 ---
+bool(true)
+--- testing: 9223372036854775806 ---
+bool(true)
+--- testing: 9.2233720368548E+18 ---
+bool(true)
+--- testing: -9223372036854775807 ---
+bool(true)
+--- testing: -9.2233720368548E+18 ---
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/math/is_infinite_basiclong_64bit.phpt b/ext/standard/tests/math/is_infinite_basiclong_64bit.phpt
new file mode 100644
index 0000000..ab15ec7
--- /dev/null
+++ b/ext/standard/tests/math/is_infinite_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test is_infinite function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(is_infinite($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+bool(false)
+--- testing: -9223372036854775808 ---
+bool(false)
+--- testing: 2147483647 ---
+bool(false)
+--- testing: -2147483648 ---
+bool(false)
+--- testing: 9223372034707292160 ---
+bool(false)
+--- testing: -9223372034707292160 ---
+bool(false)
+--- testing: 2147483648 ---
+bool(false)
+--- testing: -2147483649 ---
+bool(false)
+--- testing: 4294967294 ---
+bool(false)
+--- testing: 4294967295 ---
+bool(false)
+--- testing: 4294967293 ---
+bool(false)
+--- testing: 9223372036854775806 ---
+bool(false)
+--- testing: 9.2233720368548E+18 ---
+bool(false)
+--- testing: -9223372036854775807 ---
+bool(false)
+--- testing: -9.2233720368548E+18 ---
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/math/is_nan_basiclong_64bit.phpt b/ext/standard/tests/math/is_nan_basiclong_64bit.phpt
new file mode 100644
index 0000000..6f66d6b
--- /dev/null
+++ b/ext/standard/tests/math/is_nan_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test is_nan function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(is_nan($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+bool(false)
+--- testing: -9223372036854775808 ---
+bool(false)
+--- testing: 2147483647 ---
+bool(false)
+--- testing: -2147483648 ---
+bool(false)
+--- testing: 9223372034707292160 ---
+bool(false)
+--- testing: -9223372034707292160 ---
+bool(false)
+--- testing: 2147483648 ---
+bool(false)
+--- testing: -2147483649 ---
+bool(false)
+--- testing: 4294967294 ---
+bool(false)
+--- testing: 4294967295 ---
+bool(false)
+--- testing: 4294967293 ---
+bool(false)
+--- testing: 9223372036854775806 ---
+bool(false)
+--- testing: 9.2233720368548E+18 ---
+bool(false)
+--- testing: -9223372036854775807 ---
+bool(false)
+--- testing: -9.2233720368548E+18 ---
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/math/log10_basiclong_64bit.phpt b/ext/standard/tests/math/log10_basiclong_64bit.phpt
new file mode 100644
index 0000000..be1b7ef
--- /dev/null
+++ b/ext/standard/tests/math/log10_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test log10 function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(log10($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(18.964889726831)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(9.3319298653812)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(18.96488972673)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(9.3319298655834)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(9.6329598610452)
+--- testing: 4294967295 ---
+float(9.6329598611463)
+--- testing: 4294967293 ---
+float(9.632959860944)
+--- testing: 9223372036854775806 ---
+float(18.964889726831)
+--- testing: 9.2233720368548E+18 ---
+float(18.964889726831)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/log1p_basiclong_64bit.phpt b/ext/standard/tests/math/log1p_basiclong_64bit.phpt
new file mode 100644
index 0000000..a0b32bd
--- /dev/null
+++ b/ext/standard/tests/math/log1p_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test log1p function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(log1p($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(43.668272375277)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(21.487562597358)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(43.668272375044)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(21.487562597824)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(22.180709777685)
+--- testing: 4294967295 ---
+float(22.180709777918)
+--- testing: 4294967293 ---
+float(22.180709777453)
+--- testing: 9223372036854775806 ---
+float(43.668272375277)
+--- testing: 9.2233720368548E+18 ---
+float(43.668272375277)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/log_basiclong_64bit.phpt b/ext/standard/tests/math/log_basiclong_64bit.phpt
new file mode 100644
index 0000000..9a8f8a6
--- /dev/null
+++ b/ext/standard/tests/math/log_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test log function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(log($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(43.668272375277)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(21.487562596893)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(43.668272375044)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(21.487562597358)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(22.180709777453)
+--- testing: 4294967295 ---
+float(22.180709777685)
+--- testing: 4294967293 ---
+float(22.18070977722)
+--- testing: 9223372036854775806 ---
+float(43.668272375277)
+--- testing: 9.2233720368548E+18 ---
+float(43.668272375277)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/octdec_basiclong_64bit.phpt b/ext/standard/tests/math/octdec_basiclong_64bit.phpt
new file mode 100644
index 0000000..651b09d
--- /dev/null
+++ b/ext/standard/tests/math/octdec_basiclong_64bit.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test octdec function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$octLongStrs = array(
+   '777777777777777777777', 
+   '1777777777777777777777', 
+   '17777777777',
+   '37777777777',
+   '377777777777777777777777',
+   '17777777777777777777777777',
+   '377777777777',
+   '777777777777',
+);
+
+
+foreach ($octLongStrs as $strVal) {
+   echo "--- testing: $strVal ---\n";
+   var_dump(octdec($strVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 777777777777777777777 ---
+int(9223372036854775807)
+--- testing: 1777777777777777777777 ---
+float(1.844674407371E+19)
+--- testing: 17777777777 ---
+int(2147483647)
+--- testing: 37777777777 ---
+int(4294967295)
+--- testing: 377777777777777777777777 ---
+float(2.3611832414348E+21)
+--- testing: 17777777777777777777777777 ---
+float(7.5557863725914E+22)
+--- testing: 377777777777 ---
+int(34359738367)
+--- testing: 777777777777 ---
+int(68719476735)
+===DONE===
diff --git a/ext/standard/tests/math/pow_basic.phpt b/ext/standard/tests/math/pow_basic.phpt
index 0fdb158..b7d96ca 100644
--- a/ext/standard/tests/math/pow_basic.phpt
+++ b/ext/standard/tests/math/pow_basic.phpt
@@ -11,7 +11,7 @@ if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
 $bases = array(23,
 				-23,
 				23.1,
-				-23,1,
+				-23.1,
 				2.345e1,
 				-2.345e1,
 				0x17,
@@ -47,9 +47,7 @@ foreach($bases as $base) {
 }
 ?>
 ===Done===
---EXPECTF--
-
-
+--EXPECT--
 Base = 23
 ..... Exponent = 0 Result = 1
 ..... Exponent = 1 Result = 23
@@ -101,14 +99,14 @@ Base = 23.1
 
 
 
-Base = -23
+Base = -23.1
 ..... Exponent = 0 Result = 1
-..... Exponent = 1 Result = -23
-..... Exponent = -1 Result = -0.043478260869565
-..... Exponent = 2 Result = 529
-..... Exponent = -2 Result = 0.001890359168242
-..... Exponent = 3 Result = -12167
-..... Exponent = -3 Result = -8.2189529053999E-5
+..... Exponent = 1 Result = -23.1
+..... Exponent = -1 Result = -0.043290043290043
+..... Exponent = 2 Result = 533.61
+..... Exponent = -2 Result = 0.0018740278480538
+..... Exponent = 3 Result = -12326.391
+..... Exponent = -3 Result = -8.1126746668997E-5
 ..... Exponent = 2.5 Result = NAN
 ..... Exponent = -2.5 Result = NAN
 ..... Exponent = 500 Result = INF
@@ -118,23 +116,6 @@ Base = -23
 
 
 
-Base = 1
-..... Exponent = 0 Result = 1
-..... Exponent = 1 Result = 1
-..... Exponent = -1 Result = 1
-..... Exponent = 2 Result = 1
-..... Exponent = -2 Result = 1
-..... Exponent = 3 Result = 1
-..... Exponent = -3 Result = 1
-..... Exponent = 2.5 Result = 1
-..... Exponent = -2.5 Result = 1
-..... Exponent = 500 Result = 1
-..... Exponent = -500 Result = 1
-..... Exponent = 2147483647 Result = 1
-..... Exponent = -2147483648 Result = 1
-
-
-
 Base = 23.45
 ..... Exponent = 0 Result = 1
 ..... Exponent = 1 Result = 23.45
diff --git a/ext/standard/tests/math/pow_basic_64bit.phpt b/ext/standard/tests/math/pow_basic_64bit.phpt
index 3391541..898f6ef 100644
--- a/ext/standard/tests/math/pow_basic_64bit.phpt
+++ b/ext/standard/tests/math/pow_basic_64bit.phpt
@@ -11,7 +11,7 @@ if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
 $bases = array(23,
 				-23,
 				23.1,
-				-23,1,
+				-23.1,
 				2.345e1,
 				-2.345e1,
 				0x17,
@@ -99,14 +99,14 @@ Base = 23.1
 
 
 
-Base = -23
+Base = -23.1
 ..... Exponent = 0 Result = 1
-..... Exponent = 1 Result = -23
-..... Exponent = -1 Result = -0.043478260869565
-..... Exponent = 2 Result = 529
-..... Exponent = -2 Result = 0.001890359168242
-..... Exponent = 3 Result = -12167
-..... Exponent = -3 Result = -8.2189529053999E-5
+..... Exponent = 1 Result = -23.1
+..... Exponent = -1 Result = -0.043290043290043
+..... Exponent = 2 Result = 533.61
+..... Exponent = -2 Result = 0.0018740278480538
+..... Exponent = 3 Result = -12326.391
+..... Exponent = -3 Result = -8.1126746668997E-5
 ..... Exponent = 2.5 Result = NAN
 ..... Exponent = -2.5 Result = NAN
 ..... Exponent = 500 Result = INF
@@ -116,23 +116,6 @@ Base = -23
 
 
 
-Base = 1
-..... Exponent = 0 Result = 1
-..... Exponent = 1 Result = 1
-..... Exponent = -1 Result = 1
-..... Exponent = 2 Result = 1
-..... Exponent = -2 Result = 1
-..... Exponent = 3 Result = 1
-..... Exponent = -3 Result = 1
-..... Exponent = 2.5 Result = 1
-..... Exponent = -2.5 Result = 1
-..... Exponent = 500 Result = 1
-..... Exponent = -500 Result = 1
-..... Exponent = 2147483647 Result = 1
-..... Exponent = -2147483648 Result = 1
-
-
-
 Base = 23.45
 ..... Exponent = 0 Result = 1
 ..... Exponent = 1 Result = 23.45
@@ -284,4 +267,4 @@ Base = -9223372036854775808
 ..... Exponent = 2147483647 Result = -INF
 ..... Exponent = -2147483648 Result = 0
 
-===Done===
\ No newline at end of file
+===Done===
diff --git a/ext/standard/tests/math/pow_basiclong_64bit.phpt b/ext/standard/tests/math/pow_basiclong_64bit.phpt
new file mode 100644
index 0000000..dfff0f6
--- /dev/null
+++ b/ext/standard/tests/math/pow_basiclong_64bit.phpt
@@ -0,0 +1,364 @@
+--TEST--
+Test pow function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MIN_32Bit, MAX_64Bit, MIN_64Bit);
+
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal, $otherVal ---\n";   
+      var_dump(pow($longVal, $otherVal));
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807, 0 ---
+int(1)
+--- testing: 9223372036854775807, 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807, -1 ---
+float(1.0842021724855E-19)
+--- testing: 9223372036854775807, 7 ---
+float(5.6784275335594E+132)
+--- testing: 9223372036854775807, 9 ---
+float(4.8306719037716E+170)
+--- testing: 9223372036854775807, 65 ---
+float(INF)
+--- testing: 9223372036854775807, -44 ---
+float(0)
+--- testing: 9223372036854775807, 2147483647 ---
+float(INF)
+--- testing: 9223372036854775807, -2147483648 ---
+float(0)
+--- testing: 9223372036854775807, 9223372036854775807 ---
+float(INF)
+--- testing: 9223372036854775807, -9223372036854775808 ---
+float(0)
+--- testing: -9223372036854775808, 0 ---
+int(1)
+--- testing: -9223372036854775808, 1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808, -1 ---
+float(-1.0842021724855E-19)
+--- testing: -9223372036854775808, 7 ---
+float(-5.6784275335594E+132)
+--- testing: -9223372036854775808, 9 ---
+float(-4.8306719037716E+170)
+--- testing: -9223372036854775808, 65 ---
+float(-INF)
+--- testing: -9223372036854775808, -44 ---
+float(0)
+--- testing: -9223372036854775808, 2147483647 ---
+float(-INF)
+--- testing: -9223372036854775808, -2147483648 ---
+float(0)
+--- testing: -9223372036854775808, 9223372036854775807 ---
+float(-INF)
+--- testing: -9223372036854775808, -9223372036854775808 ---
+float(0)
+--- testing: 2147483647, 0 ---
+int(1)
+--- testing: 2147483647, 1 ---
+int(2147483647)
+--- testing: 2147483647, -1 ---
+float(4.6566128752458E-10)
+--- testing: 2147483647, 7 ---
+float(2.1062458265056E+65)
+--- testing: 2147483647, 9 ---
+float(9.7133444204205E+83)
+--- testing: 2147483647, 65 ---
+float(INF)
+--- testing: 2147483647, -44 ---
+float(0)
+--- testing: 2147483647, 2147483647 ---
+float(INF)
+--- testing: 2147483647, -2147483648 ---
+float(0)
+--- testing: 2147483647, 9223372036854775807 ---
+float(INF)
+--- testing: 2147483647, -9223372036854775808 ---
+float(0)
+--- testing: -2147483648, 0 ---
+int(1)
+--- testing: -2147483648, 1 ---
+int(-2147483648)
+--- testing: -2147483648, -1 ---
+float(-4.6566128730774E-10)
+--- testing: -2147483648, 7 ---
+float(-2.1062458333711E+65)
+--- testing: -2147483648, 9 ---
+float(-9.7133444611286E+83)
+--- testing: -2147483648, 65 ---
+float(-INF)
+--- testing: -2147483648, -44 ---
+float(0)
+--- testing: -2147483648, 2147483647 ---
+float(-INF)
+--- testing: -2147483648, -2147483648 ---
+float(0)
+--- testing: -2147483648, 9223372036854775807 ---
+float(-INF)
+--- testing: -2147483648, -9223372036854775808 ---
+float(0)
+--- testing: 9223372034707292160, 0 ---
+int(1)
+--- testing: 9223372034707292160, 1 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160, -1 ---
+float(1.0842021727379E-19)
+--- testing: 9223372034707292160, 7 ---
+float(5.6784275243046E+132)
+--- testing: 9223372034707292160, 9 ---
+float(4.830671893649E+170)
+--- testing: 9223372034707292160, 65 ---
+float(INF)
+--- testing: 9223372034707292160, -44 ---
+float(0)
+--- testing: 9223372034707292160, 2147483647 ---
+float(INF)
+--- testing: 9223372034707292160, -2147483648 ---
+float(0)
+--- testing: 9223372034707292160, 9223372036854775807 ---
+float(INF)
+--- testing: 9223372034707292160, -9223372036854775808 ---
+float(0)
+--- testing: -9223372034707292160, 0 ---
+int(1)
+--- testing: -9223372034707292160, 1 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160, -1 ---
+float(-1.0842021727379E-19)
+--- testing: -9223372034707292160, 7 ---
+float(-5.6784275243046E+132)
+--- testing: -9223372034707292160, 9 ---
+float(-4.830671893649E+170)
+--- testing: -9223372034707292160, 65 ---
+float(-INF)
+--- testing: -9223372034707292160, -44 ---
+float(0)
+--- testing: -9223372034707292160, 2147483647 ---
+float(-INF)
+--- testing: -9223372034707292160, -2147483648 ---
+float(0)
+--- testing: -9223372034707292160, 9223372036854775807 ---
+float(-INF)
+--- testing: -9223372034707292160, -9223372036854775808 ---
+float(0)
+--- testing: 2147483648, 0 ---
+int(1)
+--- testing: 2147483648, 1 ---
+int(2147483648)
+--- testing: 2147483648, -1 ---
+float(4.6566128730774E-10)
+--- testing: 2147483648, 7 ---
+float(2.1062458333711E+65)
+--- testing: 2147483648, 9 ---
+float(9.7133444611286E+83)
+--- testing: 2147483648, 65 ---
+float(INF)
+--- testing: 2147483648, -44 ---
+float(0)
+--- testing: 2147483648, 2147483647 ---
+float(INF)
+--- testing: 2147483648, -2147483648 ---
+float(0)
+--- testing: 2147483648, 9223372036854775807 ---
+float(INF)
+--- testing: 2147483648, -9223372036854775808 ---
+float(0)
+--- testing: -2147483649, 0 ---
+int(1)
+--- testing: -2147483649, 1 ---
+int(-2147483649)
+--- testing: -2147483649, -1 ---
+float(-4.656612870909E-10)
+--- testing: -2147483649, 7 ---
+float(-2.1062458402367E+65)
+--- testing: -2147483649, 9 ---
+float(-9.7133445018368E+83)
+--- testing: -2147483649, 65 ---
+float(-INF)
+--- testing: -2147483649, -44 ---
+float(0)
+--- testing: -2147483649, 2147483647 ---
+float(-INF)
+--- testing: -2147483649, -2147483648 ---
+float(0)
+--- testing: -2147483649, 9223372036854775807 ---
+float(-INF)
+--- testing: -2147483649, -9223372036854775808 ---
+float(0)
+--- testing: 4294967294, 0 ---
+int(1)
+--- testing: 4294967294, 1 ---
+int(4294967294)
+--- testing: 4294967294, -1 ---
+float(2.3283064376229E-10)
+--- testing: 4294967294, 7 ---
+float(2.6959946579271E+67)
+--- testing: 4294967294, 9 ---
+float(4.9732323432553E+86)
+--- testing: 4294967294, 65 ---
+float(INF)
+--- testing: 4294967294, -44 ---
+float(0)
+--- testing: 4294967294, 2147483647 ---
+float(INF)
+--- testing: 4294967294, -2147483648 ---
+float(0)
+--- testing: 4294967294, 9223372036854775807 ---
+float(INF)
+--- testing: 4294967294, -9223372036854775808 ---
+float(0)
+--- testing: 4294967295, 0 ---
+int(1)
+--- testing: 4294967295, 1 ---
+int(4294967295)
+--- testing: 4294967295, -1 ---
+float(2.3283064370808E-10)
+--- testing: 4294967295, 7 ---
+float(2.6959946623211E+67)
+--- testing: 4294967295, 9 ---
+float(4.9732323536766E+86)
+--- testing: 4294967295, 65 ---
+float(INF)
+--- testing: 4294967295, -44 ---
+float(0)
+--- testing: 4294967295, 2147483647 ---
+float(INF)
+--- testing: 4294967295, -2147483648 ---
+float(0)
+--- testing: 4294967295, 9223372036854775807 ---
+float(INF)
+--- testing: 4294967295, -9223372036854775808 ---
+float(0)
+--- testing: 4294967293, 0 ---
+int(1)
+--- testing: 4294967293, 1 ---
+int(4294967293)
+--- testing: 4294967293, -1 ---
+float(2.328306438165E-10)
+--- testing: 4294967293, 7 ---
+float(2.6959946535332E+67)
+--- testing: 4294967293, 9 ---
+float(4.973232332834E+86)
+--- testing: 4294967293, 65 ---
+float(INF)
+--- testing: 4294967293, -44 ---
+float(0)
+--- testing: 4294967293, 2147483647 ---
+float(INF)
+--- testing: 4294967293, -2147483648 ---
+float(0)
+--- testing: 4294967293, 9223372036854775807 ---
+float(INF)
+--- testing: 4294967293, -9223372036854775808 ---
+float(0)
+--- testing: 9223372036854775806, 0 ---
+int(1)
+--- testing: 9223372036854775806, 1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806, -1 ---
+float(1.0842021724855E-19)
+--- testing: 9223372036854775806, 7 ---
+float(5.6784275335594E+132)
+--- testing: 9223372036854775806, 9 ---
+float(4.8306719037716E+170)
+--- testing: 9223372036854775806, 65 ---
+float(INF)
+--- testing: 9223372036854775806, -44 ---
+float(0)
+--- testing: 9223372036854775806, 2147483647 ---
+float(INF)
+--- testing: 9223372036854775806, -2147483648 ---
+float(0)
+--- testing: 9223372036854775806, 9223372036854775807 ---
+float(INF)
+--- testing: 9223372036854775806, -9223372036854775808 ---
+float(0)
+--- testing: 9.2233720368548E+18, 0 ---
+float(1)
+--- testing: 9.2233720368548E+18, 1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18, -1 ---
+float(1.0842021724855E-19)
+--- testing: 9.2233720368548E+18, 7 ---
+float(5.6784275335594E+132)
+--- testing: 9.2233720368548E+18, 9 ---
+float(4.8306719037716E+170)
+--- testing: 9.2233720368548E+18, 65 ---
+float(INF)
+--- testing: 9.2233720368548E+18, -44 ---
+float(0)
+--- testing: 9.2233720368548E+18, 2147483647 ---
+float(INF)
+--- testing: 9.2233720368548E+18, -2147483648 ---
+float(0)
+--- testing: 9.2233720368548E+18, 9223372036854775807 ---
+float(INF)
+--- testing: 9.2233720368548E+18, -9223372036854775808 ---
+float(0)
+--- testing: -9223372036854775807, 0 ---
+int(1)
+--- testing: -9223372036854775807, 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807, -1 ---
+float(-1.0842021724855E-19)
+--- testing: -9223372036854775807, 7 ---
+float(-5.6784275335594E+132)
+--- testing: -9223372036854775807, 9 ---
+float(-4.8306719037716E+170)
+--- testing: -9223372036854775807, 65 ---
+float(-INF)
+--- testing: -9223372036854775807, -44 ---
+float(0)
+--- testing: -9223372036854775807, 2147483647 ---
+float(-INF)
+--- testing: -9223372036854775807, -2147483648 ---
+float(0)
+--- testing: -9223372036854775807, 9223372036854775807 ---
+float(-INF)
+--- testing: -9223372036854775807, -9223372036854775808 ---
+float(0)
+--- testing: -9.2233720368548E+18, 0 ---
+float(1)
+--- testing: -9.2233720368548E+18, 1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18, -1 ---
+float(-1.0842021724855E-19)
+--- testing: -9.2233720368548E+18, 7 ---
+float(-5.6784275335594E+132)
+--- testing: -9.2233720368548E+18, 9 ---
+float(-4.8306719037716E+170)
+--- testing: -9.2233720368548E+18, 65 ---
+float(-INF)
+--- testing: -9.2233720368548E+18, -44 ---
+float(0)
+--- testing: -9.2233720368548E+18, 2147483647 ---
+float(-INF)
+--- testing: -9.2233720368548E+18, -2147483648 ---
+float(0)
+--- testing: -9.2233720368548E+18, 9223372036854775807 ---
+float(INF)
+--- testing: -9.2233720368548E+18, -9223372036854775808 ---
+float(0)
+===DONE===
diff --git a/ext/standard/tests/math/rad2deg_basiclong_64bit.phpt b/ext/standard/tests/math/rad2deg_basiclong_64bit.phpt
new file mode 100644
index 0000000..4f43ef1
--- /dev/null
+++ b/ext/standard/tests/math/rad2deg_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test rad2deg function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(rad2deg($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(5.2846029059076E+20)
+--- testing: -9223372036854775808 ---
+float(-5.2846029059076E+20)
+--- testing: 2147483647 ---
+float(123041749546.46)
+--- testing: -2147483648 ---
+float(-123041749603.76)
+--- testing: 9223372034707292160 ---
+float(5.2846029046772E+20)
+--- testing: -9223372034707292160 ---
+float(-5.2846029046772E+20)
+--- testing: 2147483648 ---
+float(123041749603.76)
+--- testing: -2147483649 ---
+float(-123041749661.05)
+--- testing: 4294967294 ---
+float(246083499092.92)
+--- testing: 4294967295 ---
+float(246083499150.22)
+--- testing: 4294967293 ---
+float(246083499035.63)
+--- testing: 9223372036854775806 ---
+float(5.2846029059076E+20)
+--- testing: 9.2233720368548E+18 ---
+float(5.2846029059076E+20)
+--- testing: -9223372036854775807 ---
+float(-5.2846029059076E+20)
+--- testing: -9.2233720368548E+18 ---
+float(-5.2846029059076E+20)
+===DONE===
diff --git a/ext/standard/tests/math/round_basiclong_64bit.phpt b/ext/standard/tests/math/round_basiclong_64bit.phpt
new file mode 100644
index 0000000..19db12e
--- /dev/null
+++ b/ext/standard/tests/math/round_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test round function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(round($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: 2147483647 ---
+float(2147483647)
+--- testing: -2147483648 ---
+float(-2147483648)
+--- testing: 9223372034707292160 ---
+float(9.2233720347073E+18)
+--- testing: -9223372034707292160 ---
+float(-9.2233720347073E+18)
+--- testing: 2147483648 ---
+float(2147483648)
+--- testing: -2147483649 ---
+float(-2147483649)
+--- testing: 4294967294 ---
+float(4294967294)
+--- testing: 4294967295 ---
+float(4294967295)
+--- testing: 4294967293 ---
+float(4294967293)
+--- testing: 9223372036854775806 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/ext/standard/tests/math/sin_basiclong_64bit.phpt b/ext/standard/tests/math/sin_basiclong_64bit.phpt
new file mode 100644
index 0000000..0f0f087
--- /dev/null
+++ b/ext/standard/tests/math/sin_basiclong_64bit.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test sin function : 64bit long tests
+--INI--
+precision=10
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(sin($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(0.9999303767)
+--- testing: -9223372036854775808 ---
+float(-0.9999303767)
+--- testing: 2147483647 ---
+float(-0.7249165551)
+--- testing: -2147483648 ---
+float(0.9713101758)
+--- testing: 9223372034707292160 ---
+float(0.2492611714)
+--- testing: -9223372034707292160 ---
+float(-0.2492611714)
+--- testing: 2147483648 ---
+float(-0.9713101758)
+--- testing: -2147483649 ---
+float(0.3246857002)
+--- testing: 4294967294 ---
+float(0.9986982435)
+--- testing: 4294967295 ---
+float(0.4966771918)
+--- testing: 4294967293 ---
+float(0.5825207359)
+--- testing: 9223372036854775806 ---
+float(0.9999303767)
+--- testing: 9.223372037E+18 ---
+float(0.9999303767)
+--- testing: -9223372036854775807 ---
+float(-0.9999303767)
+--- testing: -9.223372037E+18 ---
+float(-0.9999303767)
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/math/sinh_basiclong_64bit.phpt b/ext/standard/tests/math/sinh_basiclong_64bit.phpt
new file mode 100644
index 0000000..5206814
--- /dev/null
+++ b/ext/standard/tests/math/sinh_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test sinh function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(sinh($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(INF)
+--- testing: -9223372036854775808 ---
+float(-INF)
+--- testing: 2147483647 ---
+float(INF)
+--- testing: -2147483648 ---
+float(-INF)
+--- testing: 9223372034707292160 ---
+float(INF)
+--- testing: -9223372034707292160 ---
+float(-INF)
+--- testing: 2147483648 ---
+float(INF)
+--- testing: -2147483649 ---
+float(-INF)
+--- testing: 4294967294 ---
+float(INF)
+--- testing: 4294967295 ---
+float(INF)
+--- testing: 4294967293 ---
+float(INF)
+--- testing: 9223372036854775806 ---
+float(INF)
+--- testing: 9.2233720368548E+18 ---
+float(INF)
+--- testing: -9223372036854775807 ---
+float(-INF)
+--- testing: -9.2233720368548E+18 ---
+float(-INF)
+===DONE===
diff --git a/ext/standard/tests/math/sqrt_basiclong_64bit.phpt b/ext/standard/tests/math/sqrt_basiclong_64bit.phpt
new file mode 100644
index 0000000..99091e2
--- /dev/null
+++ b/ext/standard/tests/math/sqrt_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test sqrt function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(sqrt($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(3037000499.976)
+--- testing: -9223372036854775808 ---
+float(NAN)
+--- testing: 2147483647 ---
+float(46340.950001052)
+--- testing: -2147483648 ---
+float(NAN)
+--- testing: 9223372034707292160 ---
+float(3037000499.6225)
+--- testing: -9223372034707292160 ---
+float(NAN)
+--- testing: 2147483648 ---
+float(46340.950011842)
+--- testing: -2147483649 ---
+float(NAN)
+--- testing: 4294967294 ---
+float(65535.999984741)
+--- testing: 4294967295 ---
+float(65535.999992371)
+--- testing: 4294967293 ---
+float(65535.999977112)
+--- testing: 9223372036854775806 ---
+float(3037000499.976)
+--- testing: 9.2233720368548E+18 ---
+float(3037000499.976)
+--- testing: -9223372036854775807 ---
+float(NAN)
+--- testing: -9.2233720368548E+18 ---
+float(NAN)
+===DONE===
diff --git a/ext/standard/tests/math/tan_basiclong_64bit.phpt b/ext/standard/tests/math/tan_basiclong_64bit.phpt
new file mode 100644
index 0000000..761f860
--- /dev/null
+++ b/ext/standard/tests/math/tan_basiclong_64bit.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test tan function : 64bit long tests
+--INI--
+precision=10
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(tan($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(84.73931297)
+--- testing: -9223372036854775808 ---
+float(-84.73931297)
+--- testing: 2147483647 ---
+float(1.052377964)
+--- testing: -2147483648 ---
+float(4.084289455)
+--- testing: 9223372034707292160 ---
+float(-0.2573852005)
+--- testing: -9223372034707292160 ---
+float(0.2573852005)
+--- testing: 2147483648 ---
+float(-4.084289455)
+--- testing: -2147483649 ---
+float(0.3432841603)
+--- testing: 4294967294 ---
+float(-19.57923809)
+--- testing: 4294967295 ---
+float(-0.5722513702)
+--- testing: 4294967293 ---
+float(0.7166700082)
+--- testing: 9223372036854775806 ---
+float(84.73931297)
+--- testing: 9.223372037E+18 ---
+float(84.73931297)
+--- testing: -9223372036854775807 ---
+float(-84.73931297)
+--- testing: -9.223372037E+18 ---
+float(-84.73931297)
+===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/math/tanh_basiclong_64bit.phpt b/ext/standard/tests/math/tanh_basiclong_64bit.phpt
new file mode 100644
index 0000000..02e6c10
--- /dev/null
+++ b/ext/standard/tests/math/tanh_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test tanh function : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1,
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(tanh($longVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(1)
+--- testing: -9223372036854775808 ---
+float(-1)
+--- testing: 2147483647 ---
+float(1)
+--- testing: -2147483648 ---
+float(-1)
+--- testing: 9223372034707292160 ---
+float(1)
+--- testing: -9223372034707292160 ---
+float(-1)
+--- testing: 2147483648 ---
+float(1)
+--- testing: -2147483649 ---
+float(-1)
+--- testing: 4294967294 ---
+float(1)
+--- testing: 4294967295 ---
+float(1)
+--- testing: 4294967293 ---
+float(1)
+--- testing: 9223372036854775806 ---
+float(1)
+--- testing: 9.2233720368548E+18 ---
+float(1)
+--- testing: -9223372036854775807 ---
+float(-1)
+--- testing: -9.2233720368548E+18 ---
+float(-1)
+===DONE===
diff --git a/ext/standard/tests/misc/time_nanosleep_basic.phpt b/ext/standard/tests/misc/time_nanosleep_basic.phpt
new file mode 100644
index 0000000..799c572
--- /dev/null
+++ b/ext/standard/tests/misc/time_nanosleep_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+time_nanosleep — Delay for a number of seconds and nanoseconds
+--SKIPIF--
+<?php if (!function_exists('time_nanosleep')) die("skip"); ?>
+--CREDITS--
+Àlex Corretgé - alex at corretge.cat
+--FILE--
+<?php
+$nano = time_nanosleep(2, 100000);
+
+if ($nano === true) {
+    echo "Slept for 2 seconds, 100 milliseconds.\n";
+} elseif ($nano === false) {
+    echo "Sleeping failed.\n";
+} elseif (is_array($nano)) {
+    $seconds = $nano['seconds'];
+    $nanoseconds = $nano['nanoseconds'];
+    echo "Interrupted by a signal.\n";
+    echo "Time remaining: $seconds seconds, $nanoseconds nanoseconds.";
+}
+?>
+--EXPECT--
+Slept for 2 seconds, 100 milliseconds.
diff --git a/ext/standard/tests/misc/time_nanosleep_error1.phpt b/ext/standard/tests/misc/time_nanosleep_error1.phpt
new file mode 100644
index 0000000..1f0ad75
--- /dev/null
+++ b/ext/standard/tests/misc/time_nanosleep_error1.phpt
@@ -0,0 +1,14 @@
+--TEST--
+time_nanosleep — Delay for a number of seconds and nanoseconds
+--SKIPIF--
+<?php if (!function_exists('time_nanosleep')) die("skip"); ?>
+--CREDITS--
+Àlex Corretgé - alex at corretge.cat
+--FILE--
+<?php
+
+$nano = time_nanosleep('A', 100000);
+
+?>
+--EXPECTF--
+Warning: time_nanosleep() expects parameter 1 to be long, %unicode_string_optional% given in %s.php on line %d
diff --git a/ext/standard/tests/misc/time_nanosleep_error2.phpt b/ext/standard/tests/misc/time_nanosleep_error2.phpt
new file mode 100644
index 0000000..008a07d
--- /dev/null
+++ b/ext/standard/tests/misc/time_nanosleep_error2.phpt
@@ -0,0 +1,14 @@
+--TEST--
+time_nanosleep — Delay for a number of seconds and nanoseconds
+--SKIPIF--
+<?php if (!function_exists('time_nanosleep')) die("skip"); ?>
+--CREDITS--
+Àlex Corretgé - alex at corretge.cat
+--FILE--
+<?php
+
+$nano = time_nanosleep(2, 'B');
+
+?>
+--EXPECTF--
+Warning: time_nanosleep() expects parameter 2 to be long, %unicode_string_optional% given in %s.php on line %d
diff --git a/ext/standard/tests/misc/time_nanosleep_error3.phpt b/ext/standard/tests/misc/time_nanosleep_error3.phpt
new file mode 100644
index 0000000..eab7847
--- /dev/null
+++ b/ext/standard/tests/misc/time_nanosleep_error3.phpt
@@ -0,0 +1,17 @@
+--TEST--
+time_nanosleep — Delay for a number of seconds and nanoseconds
+--SKIPIF--
+<?php 
+if (strpos(strtoupper(PHP_OS), 'WIN') !== false) die("skip Test is not valid for Windows");
+if (!function_exists('time_nanosleep')) die("skip");
+?>
+--CREDITS--
+Àlex Corretgé - alex at corretge.cat
+--FILE--
+<?php
+
+$nano = time_nanosleep(-2, 1000);
+
+?>
+--EXPECTF--
+Warning: time_nanosleep(): nanoseconds was not in the range 0 to 999 999 999 or seconds was negative in %s.php on line %d
diff --git a/ext/standard/tests/misc/time_nanosleep_error4.phpt b/ext/standard/tests/misc/time_nanosleep_error4.phpt
new file mode 100644
index 0000000..918d254
--- /dev/null
+++ b/ext/standard/tests/misc/time_nanosleep_error4.phpt
@@ -0,0 +1,17 @@
+--TEST--
+time_nanosleep — Delay for a number of seconds and nanoseconds
+--SKIPIF--
+<?php
+if (substr(strtoupper(PHP_OS, 'WIN'))) die("skip Test is not valid for Windows");
+if (!function_exists('time_nanosleep')) die("skip");
+?>
+--CREDITS--
+Àlex Corretgé - alex at corretge.cat
+--FILE--
+<?php
+
+$nano = time_nanosleep(0, -10);
+
+?>
+--EXPECTF--
+Warning: time_nanosleep(): nanoseconds was not in the range 0 to 999 999 999 or seconds was negative in %s.php on line %d
diff --git a/ext/standard/tests/misc/time_nanosleep_error5.phpt b/ext/standard/tests/misc/time_nanosleep_error5.phpt
new file mode 100644
index 0000000..2f1f3a1
--- /dev/null
+++ b/ext/standard/tests/misc/time_nanosleep_error5.phpt
@@ -0,0 +1,14 @@
+--TEST--
+time_nanosleep — Delay for a number of seconds and nanoseconds
+--SKIPIF--
+<?php if (!function_exists('time_nanosleep')) die("skip"); ?>
+--CREDITS--
+Àlex Corretgé - alex at corretge.cat
+--FILE--
+<?php
+
+$nano = time_nanosleep(0, 1000000000);
+
+?>
+--EXPECTF--
+Warning: time_nanosleep(): nanoseconds was not in the range 0 to 999 999 999 or seconds was negative in %s.php on line %d
diff --git a/ext/standard/tests/network/gethostbyname_basic001.phpt b/ext/standard/tests/network/gethostbyname_basic001.phpt
new file mode 100644
index 0000000..0cfc1b4
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_basic001.phpt
@@ -0,0 +1,10 @@
+--TEST--
+gethostbyname() function - basic type return test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	var_dump(is_string(gethostbyname("www.php.net")));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/gethostbyname_basic002.phpt b/ext/standard/tests/network/gethostbyname_basic002.phpt
new file mode 100644
index 0000000..b4e191b
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_basic002.phpt
@@ -0,0 +1,11 @@
+--TEST--
+gethostbyname() function - basic invalid parameter test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	$ip = gethostbyname("www.php.net");
+	var_dump((bool) ip2long($ip));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/gethostbyname_error001.phpt b/ext/standard/tests/network/gethostbyname_error001.phpt
new file mode 100644
index 0000000..f141be8
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_error001.phpt
@@ -0,0 +1,10 @@
+--TEST--
+gethostbyname() function - basic type return error test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	var_dump(is_string(gethostbyname("192.168.0.101")));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/gethostbyname_error002.phpt b/ext/standard/tests/network/gethostbyname_error002.phpt
new file mode 100644
index 0000000..2430a7f
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_error002.phpt
@@ -0,0 +1,10 @@
+--TEST--
+gethostbyname() function - basic type return error test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	var_dump(is_string(gethostbyname("1234567890")));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/gethostbyname_error003.phpt b/ext/standard/tests/network/gethostbyname_error003.phpt
new file mode 100644
index 0000000..3d4bb7a
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_error003.phpt
@@ -0,0 +1,10 @@
+--TEST--
+gethostbyname() function - basic type return error test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	var_dump(is_string(gethostbyname("asdfasdf")));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/gethostbyname_error004.phpt b/ext/standard/tests/network/gethostbyname_error004.phpt
new file mode 100644
index 0000000..1d0f7d7
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_error004.phpt
@@ -0,0 +1,11 @@
+--TEST--
+gethostbyname() function - basic return valid ip address test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	$ip = gethostbyname("www.php.net");
+	var_dump((bool) ip2long($ip));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/gethostbyname_error005.phpt b/ext/standard/tests/network/gethostbyname_error005.phpt
new file mode 100644
index 0000000..be4b159
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_error005.phpt
@@ -0,0 +1,12 @@
+--TEST--
+gethostbyname() function - basic invalid parameter test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--INI--
+display_errors=false
+--FILE--
+<?php
+	var_dump(gethostbyname());
+?>
+--EXPECT--
+NULL
diff --git a/ext/standard/tests/network/gethostbyname_error006.phpt b/ext/standard/tests/network/gethostbyname_error006.phpt
new file mode 100644
index 0000000..dc509a1
--- /dev/null
+++ b/ext/standard/tests/network/gethostbyname_error006.phpt
@@ -0,0 +1,10 @@
+--TEST--
+gethostbyname() function - basic invalid parameter test
+--CREDITS--
+"Sylvain R." <sracine at phpquebec.org>
+--FILE--
+<?php
+	var_dump(gethostbyname(".toto.toto.toto"));
+?>
+--EXPECTF--
+%string|unicode%(15) ".toto.toto.toto"
diff --git a/ext/standard/tests/network/gethostbynamel_error.phpt b/ext/standard/tests/network/gethostbynamel_error.phpt
index 7e58d5a..80205e0 100644
--- a/ext/standard/tests/network/gethostbynamel_error.phpt
+++ b/ext/standard/tests/network/gethostbynamel_error.phpt
@@ -21,7 +21,7 @@ $extra_arg = 10;
 var_dump( gethostbynamel($hostname, $extra_arg) );
 
 echo "\n-- Testing gethostbynamel() with an unknown host --\n";
-$hostname = 'unknownhost_zzz_xxx_yyy';
+$hostname = 'unknownhost_zzz_xxx_yyy.';
 var_dump( gethostbynamel($hostname) );
 
 echo "Done";
diff --git a/ext/standard/tests/network/ip.phpt b/ext/standard/tests/network/ip.phpt
index c7d550f..1220fac 100644
--- a/ext/standard/tests/network/ip.phpt
+++ b/ext/standard/tests/network/ip.phpt
@@ -48,20 +48,20 @@ string(7) "0.0.0.0"
 int(1118019956)
 string(14) "66.163.161.116"
 
-Warning: Wrong parameter count for ip2long() in %s on line %d
+Warning: ip2long() expects exactly 1 parameter, 0 given in %s on line 17
 NULL
 bool(false)
 bool(false)
 int(1869573999)
 
-Notice: Array to string conversion in %s on line %d
-bool(false)
+Warning: ip2long() expects parameter 1 to be string, array given in %s on line 21
+NULL
 
-Warning: Wrong parameter count for long2ip() in %s on line %d
+Warning: long2ip() expects exactly 1 parameter, 0 given in %s on line 23
 NULL
 string(13) "255.254.82.80"
 string(7) "0.0.0.0"
 
-Notice: Array to string conversion in %s on line %d
-string(7) "0.0.0.0"
+Warning: long2ip() expects parameter 1 to be string, array given in %s on line 26
+NULL
 Done
diff --git a/ext/standard/tests/network/ip2long_error.phpt b/ext/standard/tests/network/ip2long_error.phpt
index 219363e..65e7315 100644
--- a/ext/standard/tests/network/ip2long_error.phpt
+++ b/ext/standard/tests/network/ip2long_error.phpt
@@ -27,11 +27,11 @@ var_dump( ip2long($ip_address, $extra_arg) );
 
 -- Testing ip2long() function with Zero arguments --
 
-Warning: Wrong parameter count for ip2long() in %s on line %d
+Warning: ip2long() expects exactly 1 parameter, 0 given in %s on line %d
 NULL
 
 -- Testing ip2long() function with more than expected no. of arguments --
 
-Warning: Wrong parameter count for ip2long() in %s on line %d
+Warning: ip2long() expects exactly 1 parameter, 2 given in %s on line %d
 NULL
 ===DONE===
diff --git a/ext/standard/tests/network/ip2long_variation1.phpt b/ext/standard/tests/network/ip2long_variation1.phpt
index c4af004..ac3c9c8 100644
--- a/ext/standard/tests/network/ip2long_variation1.phpt
+++ b/ext/standard/tests/network/ip2long_variation1.phpt
@@ -114,19 +114,19 @@ fclose($res);
 *** Testing ip2long() : usage variation ***
 
 --int 0--
-int(0)
+bool(false)
 
 --int 1--
-int(1)
+bool(false)
 
 --int 12345--
-int(12345)
+bool(false)
 
 --int -12345--
 bool(false)
 
 --float 10.5--
-int(167772165)
+bool(false)
 
 --float -10.5--
 bool(false)
@@ -138,23 +138,23 @@ bool(false)
 bool(false)
 
 --float .5--
-int(5)
+bool(false)
 
 --empty array--
-Error: 8 - Array to string conversion, %s(%d)
-bool(false)
+Error: 2 - ip2long() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --int indexed array--
-Error: 8 - Array to string conversion, %s(%d)
-bool(false)
+Error: 2 - ip2long() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --associative array--
-Error: 8 - Array to string conversion, %s(%d)
-bool(false)
+Error: 2 - ip2long() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --nested arrays--
-Error: 8 - Array to string conversion, %s(%d)
-bool(false)
+Error: 2 - ip2long() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --uppercase NULL--
 bool(false)
@@ -163,13 +163,13 @@ bool(false)
 bool(false)
 
 --lowercase true--
-int(1)
+bool(false)
 
 --lowercase false--
 bool(false)
 
 --uppercase TRUE--
-int(1)
+bool(false)
 
 --uppercase FALSE--
 bool(false)
@@ -184,9 +184,8 @@ bool(false)
 bool(false)
 
 --instance of classWithoutToString--
-Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
-Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
-bool(false)
+Error: 2 - ip2long() expects parameter 1 to be string, object given, %s(%d)
+NULL
 
 --undefined var--
 bool(false)
@@ -195,5 +194,6 @@ bool(false)
 bool(false)
 
 --resource--
-bool(false)
+Error: 2 - ip2long() expects parameter 1 to be string, resource given, %s(%d)
+NULL
 ===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/network/ip_x86_64.phpt b/ext/standard/tests/network/ip_x86_64.phpt
index bc3e72c..1fcb8b2 100644
--- a/ext/standard/tests/network/ip_x86_64.phpt
+++ b/ext/standard/tests/network/ip_x86_64.phpt
@@ -48,20 +48,20 @@ string(7) "0.0.0.0"
 int(1118019956)
 string(14) "66.163.161.116"
 
-Warning: Wrong parameter count for ip2long() in %s on line %d
+Warning: ip2long() expects exactly 1 parameter, 0 given in %s on line %d
 NULL
 bool(false)
 bool(false)
 int(1869573999)
 
-Notice: Array to string conversion in %s on line %d
-bool(false)
+Warning: ip2long() expects parameter 1 to be string, array given in %s on line %d
+NULL
 
-Warning: Wrong parameter count for long2ip() in %s on line %d
+Warning: long2ip() expects exactly 1 parameter, 0 given in %s on line %d
 NULL
 string(13) "255.254.82.80"
 string(7) "0.0.0.0"
 
-Notice: Array to string conversion in %s on line %d
-string(7) "0.0.0.0"
+Warning: long2ip() expects parameter 1 to be string, array given in %s on line %d
+NULL
 Done
diff --git a/ext/standard/tests/network/long2ip_error.phpt b/ext/standard/tests/network/long2ip_error.phpt
index 61fb34a..d56397c 100644
--- a/ext/standard/tests/network/long2ip_error.phpt
+++ b/ext/standard/tests/network/long2ip_error.phpt
@@ -27,11 +27,11 @@ var_dump( long2ip($proper_address, $extra_arg) );
 
 -- Testing long2ip() function with Zero arguments --
 
-Warning: Wrong parameter count for long2ip() in %s on line %d
+Warning: long2ip() expects exactly 1 parameter, 0 given in %s on line %d
 NULL
 
 -- Testing long2ip() function with more than expected no. of arguments --
 
-Warning: Wrong parameter count for long2ip() in %s on line %d
+Warning: long2ip() expects exactly 1 parameter, 2 given in %s on line %d
 NULL
 ===DONE===
\ No newline at end of file
diff --git a/ext/standard/tests/network/long2ip_variation1.phpt b/ext/standard/tests/network/long2ip_variation1.phpt
index a4a8672..2dc6fb1 100644
--- a/ext/standard/tests/network/long2ip_variation1.phpt
+++ b/ext/standard/tests/network/long2ip_variation1.phpt
@@ -126,20 +126,20 @@ string(15) "255.255.255.246"
 string(7) "0.0.0.0"
 
 --empty array--
-Error: 8 - Array to string conversion, %s(%d)
-string(7) "0.0.0.0"
+Error: 2 - long2ip() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --int indexed array--
-Error: 8 - Array to string conversion, %s(%d)
-string(7) "0.0.0.0"
+Error: 2 - long2ip() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --associative array--
-Error: 8 - Array to string conversion, %s(%d)
-string(7) "0.0.0.0"
+Error: 2 - long2ip() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --nested arrays--
-Error: 8 - Array to string conversion, %s(%d)
-string(7) "0.0.0.0"
+Error: 2 - long2ip() expects parameter 1 to be string, array given, %s(%d)
+NULL
 
 --uppercase NULL--
 string(7) "0.0.0.0"
@@ -181,9 +181,8 @@ string(7) "0.0.0.0"
 string(7) "0.0.0.0"
 
 --instance of classWithoutToString--
-Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
-Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
-string(7) "0.0.0.0"
+Error: 2 - long2ip() expects parameter 1 to be string, object given, %s(%d)
+NULL
 
 --undefined var--
 string(7) "0.0.0.0"
@@ -192,5 +191,6 @@ string(7) "0.0.0.0"
 string(7) "0.0.0.0"
 
 --resource--
-string(7) "0.0.0.0"
+Error: 2 - long2ip() expects parameter 1 to be string, resource given, %s(%d)
+NULL
 ===DONE===
diff --git a/ext/standard/tests/serialize/bug46882.phpt b/ext/standard/tests/serialize/bug46882.phpt
new file mode 100644
index 0000000..cc64c64
--- /dev/null
+++ b/ext/standard/tests/serialize/bug46882.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Bug #46882 (Serialize / Unserialize misbehaviour under OS with different bit numbers)
+--FILE--
+<?php
+var_dump(unserialize('i:5000000000;') == 5000000000);
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/streams/bug47997.phpt b/ext/standard/tests/streams/bug47997.phpt
new file mode 100644
index 0000000..1ad2890
--- /dev/null
+++ b/ext/standard/tests/streams/bug47997.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #47997 (stream_copy_to_stream returns 1 on empty streams)
+--FILE--
+<?php
+
+$in = fopen('data://text/plain,', 'rb+');
+$out = fopen('php://memory', 'wb+');
+
+var_dump(stream_copy_to_stream($in, $out));
+
+?>
+--EXPECT--
+int(0)
diff --git a/ext/standard/tests/streams/bug48309.phpt b/ext/standard/tests/streams/bug48309.phpt
new file mode 100644
index 0000000..d347cc3
--- /dev/null
+++ b/ext/standard/tests/streams/bug48309.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #48309 (stream_copy_to_stream() and fpasstru() do not update stream position)
+--FILE--
+<?php
+
+$tmp = tmpfile();
+fwrite($tmp, b'test');
+fseek($tmp, 0, SEEK_SET);
+
+echo "-- stream_copy_to_stream() --\n";
+
+fseek($tmp, 0, SEEK_SET);
+stream_copy_to_stream($tmp, STDOUT, 2);
+
+echo "\n";
+var_dump(stream_get_contents($tmp));
+
+echo "-- fpassthru() --\n";
+
+fseek($tmp, 0, SEEK_SET);
+fpassthru($tmp);
+
+echo "\n";
+var_dump(stream_get_contents($tmp));
+
+?>
+--EXPECTF--
+-- stream_copy_to_stream() --
+te
+string(2) "st"
+-- fpassthru() --
+test
+string(0) ""
diff --git a/ext/standard/tests/streams/stream_copy_to_stream_socket.phpt b/ext/standard/tests/streams/stream_copy_to_stream_socket.phpt
new file mode 100644
index 0000000..7e304b1
--- /dev/null
+++ b/ext/standard/tests/streams/stream_copy_to_stream_socket.phpt
@@ -0,0 +1,30 @@
+--TEST--
+stream_copy_to_stream() with socket as $source
+--SKIPIF--
+<?php
+$sockets = @stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+if (!$sockets) die("skip stream_socket_pair");
+?>
+--FILE--
+<?php
+
+$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+$tmp = tmpfile();
+
+fwrite($sockets[0], b"a");
+stream_socket_shutdown($sockets[0], STREAM_SHUT_WR);
+stream_copy_to_stream($sockets[1], $tmp);
+
+fseek($tmp, 0, SEEK_SET);
+var_dump(stream_get_contents($tmp));
+
+stream_copy_to_stream($sockets[1], $tmp);
+
+fseek($tmp, 0, SEEK_SET);
+var_dump(stream_get_contents($tmp));
+
+
+?>
+--EXPECT--
+string(1) "a"
+string(1) "a"
diff --git a/ext/standard/tests/strings/bug38770.phpt b/ext/standard/tests/strings/bug38770.phpt
index 2494a91..75522ee 100644
--- a/ext/standard/tests/strings/bug38770.phpt
+++ b/ext/standard/tests/strings/bug38770.phpt
@@ -12,7 +12,7 @@ echo "Done\n";
 --EXPECT--	
 Array
 (
-    [1] => -30000
+    [1] => 4294937296
 )
 Array
 (
diff --git a/ext/standard/tests/strings/strcoll.phpt b/ext/standard/tests/strings/strcoll.phpt
new file mode 100644
index 0000000..6fbfa04
--- /dev/null
+++ b/ext/standard/tests/strings/strcoll.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Testing Basic behaviour of strcoll()
+--CREDITS--
+Sebastian Schürmann
+sebs at php.net
+Testfest 2009 Munich
+--FILE--
+<?php
+
+ $a = 'a';
+ $b = 'A';
+
+setlocale (LC_COLLATE, 'C');
+$result = strcoll($a, $b);
+if($result > 0) {
+	echo "Pass\n";
+}
+?>
+--EXPECT--
+Pass
+
diff --git a/ext/standard/tests/strings/strcoll_error.phpt b/ext/standard/tests/strings/strcoll_error.phpt
new file mode 100644
index 0000000..72bbfea
--- /dev/null
+++ b/ext/standard/tests/strings/strcoll_error.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test strcoll() function : error conditions 
+--FILE--
+<?php
+/* Prototype: int strcoll  ( string $str1  , string $str2  )
+   Description: Locale based string comparison
+*/
+
+echo "*** Testing strcoll() : error conditions ***\n";
+
+echo "\n-- Testing strcoll() function with no arguments --\n";
+var_dump( strcoll() );
+var_dump( strcoll("") );
+
+echo "\n-- Testing strcoll() function with one argument --\n";
+var_dump( strcoll("Hello World") );  
+
+echo "\n-- Testing strcoll() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( strcoll("Hello World",  "World", $extra_arg) );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing strcoll() : error conditions ***
+
+-- Testing strcoll() function with no arguments --
+
+Warning: Wrong parameter count for strcoll() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for strcoll() in %s on line %d
+NULL
+
+-- Testing strcoll() function with one argument --
+
+Warning: Wrong parameter count for strcoll() in %s on line %d
+NULL
+
+-- Testing strcoll() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for strcoll() in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/versioning/php_sapi_name.phpt b/ext/standard/tests/versioning/php_sapi_name.phpt
new file mode 100644
index 0000000..0747b32
--- /dev/null
+++ b/ext/standard/tests/versioning/php_sapi_name.phpt
@@ -0,0 +1,9 @@
+--TEST--
+php_sapi_name test
+--FILE--
+<?php
+
+var_dump(php_sapi_name());
+
+--EXPECTF--
+string(3) "c%ci"
diff --git a/ext/standard/tests/versioning/php_sapi_name_variation001.phpt b/ext/standard/tests/versioning/php_sapi_name_variation001.phpt
new file mode 100644
index 0000000..2796c47
--- /dev/null
+++ b/ext/standard/tests/versioning/php_sapi_name_variation001.phpt
@@ -0,0 +1,14 @@
+--TEST--
+php_sapi_name() function when switching to webserver by using post 
+--POST--
+foo=BAR
+--CREDITS--
+Sebastian Schürmann
+sebs at php.net
+Testfest 2009 Munich
+--FILE--
+<?php
+echo php_sapi_name();
+?>
+--EXPECTF--
+cgi%S
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index 4917799..cb869ac 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -1,9 +1,9 @@
-/* Generated by re2c 0.13.5 on Sat Oct  4 10:07:18 2008 */
+/* Generated by re2c 0.13.5 on Tue Mar 17 16:18:30 2009 */
 /*
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2006 The PHP Group                                |
+  | Copyright (c) 1997-2009 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: var_unserializer.c,v 1.70.2.4.2.10 2008/10/04 13:11:36 felipe Exp $ */
+/* $Id: var_unserializer.c,v 1.70.2.4.2.12 2009/03/17 23:10:13 felipe Exp $ */
 
 #include "php.h"
 #include "ext/standard/php_var.h"
@@ -898,6 +898,9 @@ yy61:
 yy63:
 	++YYCURSOR;
 	{
+#if SIZEOF_LONG == 4
+use_double:
+#endif
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
 	ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
@@ -1002,6 +1005,26 @@ yy79:
 	if (yych != ';') goto yy18;
 	++YYCURSOR;
 	{
+#if SIZEOF_LONG == 4
+	int digits = YYCURSOR - start - 3;
+
+	if (start[2] == '-' || start[2] == '+') {
+		digits--;
+	}
+
+	/* Use double for large long values that were serialized on a 64-bit system */
+	if (digits >= MAX_LENGTH_OF_LONG - 1) {
+		if (digits == MAX_LENGTH_OF_LONG - 1) {
+			int cmp = strncmp(YYCURSOR - MAX_LENGTH_OF_LONG, long_min_digits, MAX_LENGTH_OF_LONG - 1);
+
+			if (!(cmp < 0 || (cmp == 0 && start[2] == '-'))) {
+				goto use_double;
+			}
+		} else {
+			goto use_double;
+		}
+	}
+#endif
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
 	ZVAL_LONG(*rval, parse_iv(start + 2));
diff --git a/ext/standard/var_unserializer.c.orig b/ext/standard/var_unserializer.c.orig
index 10af38f..393bfc8 100644
--- a/ext/standard/var_unserializer.c.orig
+++ b/ext/standard/var_unserializer.c.orig
@@ -1,10 +1,10 @@
-/* Generated by re2c 0.13.5 on Sat Oct  4 10:07:18 2008 */
+/* Generated by re2c 0.13.5 on Tue Mar 17 16:18:30 2009 */
 #line 1 "ext/standard/var_unserializer.re"
 /*
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2006 The PHP Group                                |
+  | Copyright (c) 1997-2009 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: var_unserializer.c,v 1.70.2.4.2.10 2008/10/04 13:11:36 felipe Exp $ */
+/* $Id: var_unserializer.c,v 1.70.2.4.2.12 2009/03/17 23:10:13 felipe Exp $ */
 
 #include "php.h"
 #include "ext/standard/php_var.h"
@@ -458,7 +458,7 @@ yy2:
 	yych = *(YYMARKER = ++YYCURSOR);
 	if (yych == ':') goto yy95;
 yy3:
-#line 698 "ext/standard/var_unserializer.re"
+#line 721 "ext/standard/var_unserializer.re"
 	{ return 0; }
 #line 464 "ext/standard/var_unserializer.c"
 yy4:
@@ -503,7 +503,7 @@ yy13:
 	goto yy3;
 yy14:
 	++YYCURSOR;
-#line 692 "ext/standard/var_unserializer.re"
+#line 715 "ext/standard/var_unserializer.re"
 	{
 	/* this is the case where we have less data than planned */
 	php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
@@ -539,7 +539,7 @@ yy20:
 	yych = *++YYCURSOR;
 	if (yych != '"') goto yy18;
 	++YYCURSOR;
-#line 580 "ext/standard/var_unserializer.re"
+#line 603 "ext/standard/var_unserializer.re"
 	{
 	size_t len, len2, len3, maxlen;
 	long elements;
@@ -676,7 +676,7 @@ yy27:
 	yych = *++YYCURSOR;
 	if (yych != '"') goto yy18;
 	++YYCURSOR;
-#line 572 "ext/standard/var_unserializer.re"
+#line 595 "ext/standard/var_unserializer.re"
 	{
 
 	INIT_PZVAL(*rval);
@@ -705,7 +705,7 @@ yy34:
 	yych = *++YYCURSOR;
 	if (yych != '{') goto yy18;
 	++YYCURSOR;
-#line 550 "ext/standard/var_unserializer.re"
+#line 573 "ext/standard/var_unserializer.re"
 	{
 	long elements = parse_iv(start + 2);
 	/* use iv() not uiv() in order to check data range */
@@ -748,7 +748,7 @@ yy41:
 	yych = *++YYCURSOR;
 	if (yych != '"') goto yy18;
 	++YYCURSOR;
-#line 521 "ext/standard/var_unserializer.re"
+#line 544 "ext/standard/var_unserializer.re"
 	{
 	size_t len, maxlen;
 	char *str;
@@ -798,7 +798,7 @@ yy48:
 	yych = *++YYCURSOR;
 	if (yych != '"') goto yy18;
 	++YYCURSOR;
-#line 493 "ext/standard/var_unserializer.re"
+#line 516 "ext/standard/var_unserializer.re"
 	{
 	size_t len, maxlen;
 	char *str;
@@ -914,14 +914,17 @@ yy61:
 	}
 yy63:
 	++YYCURSOR;
-#line 486 "ext/standard/var_unserializer.re"
+#line 506 "ext/standard/var_unserializer.re"
 	{
+#if SIZEOF_LONG == 4
+use_double:
+#endif
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
 	ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
 	return 1;
 }
-#line 925 "ext/standard/var_unserializer.c"
+#line 928 "ext/standard/var_unserializer.c"
 yy65:
 	yych = *++YYCURSOR;
 	if (yych <= ',') {
@@ -980,7 +983,7 @@ yy73:
 	yych = *++YYCURSOR;
 	if (yych != ';') goto yy18;
 	++YYCURSOR;
-#line 471 "ext/standard/var_unserializer.re"
+#line 491 "ext/standard/var_unserializer.re"
 	{
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
@@ -995,7 +998,7 @@ yy73:
 
 	return 1;
 }
-#line 999 "ext/standard/var_unserializer.c"
+#line 1002 "ext/standard/var_unserializer.c"
 yy76:
 	yych = *++YYCURSOR;
 	if (yych == 'N') goto yy73;
@@ -1024,12 +1027,32 @@ yy79:
 	++YYCURSOR;
 #line 464 "ext/standard/var_unserializer.re"
 	{
+#if SIZEOF_LONG == 4
+	int digits = YYCURSOR - start - 3;
+
+	if (start[2] == '-' || start[2] == '+') {
+		digits--;
+	}
+
+	/* Use double for large long values that were serialized on a 64-bit system */
+	if (digits >= MAX_LENGTH_OF_LONG - 1) {
+		if (digits == MAX_LENGTH_OF_LONG - 1) {
+			int cmp = strncmp(YYCURSOR - MAX_LENGTH_OF_LONG, long_min_digits, MAX_LENGTH_OF_LONG - 1);
+
+			if (!(cmp < 0 || (cmp == 0 && start[2] == '-'))) {
+				goto use_double;
+			}
+		} else {
+			goto use_double;
+		}
+	}
+#endif
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
 	ZVAL_LONG(*rval, parse_iv(start + 2));
 	return 1;
 }
-#line 1033 "ext/standard/var_unserializer.c"
+#line 1056 "ext/standard/var_unserializer.c"
 yy83:
 	yych = *++YYCURSOR;
 	if (yych <= '/') goto yy18;
@@ -1044,7 +1067,7 @@ yy83:
 	ZVAL_BOOL(*rval, parse_iv(start + 2));
 	return 1;
 }
-#line 1048 "ext/standard/var_unserializer.c"
+#line 1071 "ext/standard/var_unserializer.c"
 yy87:
 	++YYCURSOR;
 #line 450 "ext/standard/var_unserializer.re"
@@ -1054,7 +1077,7 @@ yy87:
 	ZVAL_NULL(*rval);
 	return 1;
 }
-#line 1058 "ext/standard/var_unserializer.c"
+#line 1081 "ext/standard/var_unserializer.c"
 yy89:
 	yych = *++YYCURSOR;
 	if (yych <= ',') {
@@ -1100,7 +1123,7 @@ yy91:
 	
 	return 1;
 }
-#line 1104 "ext/standard/var_unserializer.c"
+#line 1127 "ext/standard/var_unserializer.c"
 yy95:
 	yych = *++YYCURSOR;
 	if (yych <= ',') {
@@ -1144,9 +1167,9 @@ yy97:
 	
 	return 1;
 }
-#line 1148 "ext/standard/var_unserializer.c"
+#line 1171 "ext/standard/var_unserializer.c"
 }
-#line 700 "ext/standard/var_unserializer.re"
+#line 723 "ext/standard/var_unserializer.re"
 
 
 	return 0;
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index f478fa4..c3adfb1 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -2,7 +2,7 @@
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
-  | Copyright (c) 1997-2006 The PHP Group                                |
+  | Copyright (c) 1997-2009 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: var_unserializer.re,v 1.52.2.2.2.8 2008/10/04 13:11:36 felipe Exp $ */
+/* $Id: var_unserializer.re,v 1.52.2.2.2.10 2009/03/17 23:10:13 felipe Exp $ */
 
 #include "php.h"
 #include "ext/standard/php_var.h"
@@ -462,6 +462,26 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
 }
 
 "i:" iv ";"	{
+#if SIZEOF_LONG == 4
+	int digits = YYCURSOR - start - 3;
+
+	if (start[2] == '-' || start[2] == '+') {
+		digits--;
+	}
+
+	/* Use double for large long values that were serialized on a 64-bit system */
+	if (digits >= MAX_LENGTH_OF_LONG - 1) {
+		if (digits == MAX_LENGTH_OF_LONG - 1) {
+			int cmp = strncmp(YYCURSOR - MAX_LENGTH_OF_LONG, long_min_digits, MAX_LENGTH_OF_LONG - 1);
+
+			if (!(cmp < 0 || (cmp == 0 && start[2] == '-'))) {
+				goto use_double;
+			}
+		} else {
+			goto use_double;
+		}
+	}
+#endif
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
 	ZVAL_LONG(*rval, parse_iv(start + 2));
@@ -484,6 +504,9 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
 }
 
 "d:" (iv | nv | nvexp) ";"	{
+#if SIZEOF_LONG == 4
+use_double:
+#endif
 	*p = YYCURSOR;
 	INIT_PZVAL(*rval);
 	ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
diff --git a/ext/sysvshm/sysvshm.c b/ext/sysvshm/sysvshm.c
index 25dac42..9679cce 100644
--- a/ext/sysvshm/sysvshm.c
+++ b/ext/sysvshm/sysvshm.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: sysvshm.c,v 1.70.2.2.2.7 2008/12/31 11:17:46 sebastian Exp $ */
+/* $Id: sysvshm.c,v 1.70.2.2.2.8 2009/03/19 23:10:44 iliaa Exp $ */
 
 /* This has been built and tested on Linux 2.2.14 
  *
@@ -375,7 +375,7 @@ static int php_put_shm_data(sysvshm_chunk_head *ptr, long key, char *data, long
 	long total_size;
 	long shm_varpos;
 
-	total_size = ((long) (len + sizeof(sysvshm_chunk) - 1) / 4) * 4 + 4; /* 4-byte alligment */
+	total_size = ((long) (len + sizeof(sysvshm_chunk) - 1) / sizeof(long)) * sizeof(long) + sizeof(long); /* long alligment */
 
 	if ((shm_varpos = php_check_shm_data(ptr, key)) > 0) {
 		php_remove_shm_data(ptr, shm_varpos);
diff --git a/ext/tidy/tests/tidy_error.phpt b/ext/tidy/tests/tidy_error.phpt
new file mode 100644
index 0000000..5416da8
--- /dev/null
+++ b/ext/tidy/tests/tidy_error.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Ensure tidy_get_status() returns correct status
+--CREDITS--
+Stefan Priebsch
+--SKIPIF--
+<?php
+ if (!extension_loaded("tidy")) print "skip tidy extension not loaded";
+?>
+--FILE--
+<?php
+
+$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<p>paragraph</p>
+</body>
+</html>';
+$tidy = tidy_parse_string($html);
+
+echo tidy_get_status($tidy);
+// status 0 indicates no errors or warnings
+
+$html = '<p>paragraph</i>';
+$tidy = tidy_parse_string($html);
+
+echo tidy_get_status($tidy);
+// status 1 indicates warnings
+
+$html = '<bogus>test</bogus>';
+$tidy = tidy_parse_string($html);
+
+echo tidy_get_status($tidy);
+// status 2 indicates error
+
+?>
+--EXPECT--
+012
+
diff --git a/ext/wddx/tests/bug48562.phpt b/ext/wddx/tests/bug48562.phpt
new file mode 100644
index 0000000..d9ae376
--- /dev/null
+++ b/ext/wddx/tests/bug48562.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #48562 (Reference recursion causes segfault when used in wddx_serialize_vars())
+--FILE--
+<?php
+
+$foo = 'bar';
+
+$a['x'] = 'foo';
+$a['x'] = &$a;
+
+var_dump(wddx_serialize_vars($a));
+
+$a['x'] = 'foo';
+$a['x'] = $a;
+
+var_dump(wddx_serialize_vars($a));
+
+?>
+--EXPECTF--
+Warning: wddx_serialize_vars(): recursion detected in %s on line %d
+string(78) "<wddxPacket version='1.0'><header/><data><struct></struct></data></wddxPacket>"
+string(120) "<wddxPacket version='1.0'><header/><data><struct><var name='foo'><string>bar</string></var></struct></data></wddxPacket>"
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index 415d40b..ae8453a 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: wddx.c,v 1.119.2.10.2.22 2008/12/31 11:17:46 sebastian Exp $ */
+/* $Id: wddx.c,v 1.119.2.10.2.23 2009/06/16 02:59:10 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -672,13 +672,27 @@ static void php_wddx_add_var(wddx_packet *packet, zval *name_var)
 	}
 	else if (Z_TYPE_P(name_var) == IS_ARRAY || Z_TYPE_P(name_var) == IS_OBJECT)
 	{
+		int is_array = Z_TYPE_P(name_var) == IS_ARRAY;
+		
 		target_hash = HASH_OF(name_var);
+
+		if (is_array && target_hash->nApplyCount > 1) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
+			return;
+		}
 		
 		zend_hash_internal_pointer_reset(target_hash);
 
 		while(zend_hash_get_current_data(target_hash, (void**)&val) == SUCCESS) {
+			if (is_array) {
+				target_hash->nApplyCount++;
+			}
+			
 			php_wddx_add_var(packet, *val);
-				
+
+			if (is_array) {
+				target_hash->nApplyCount--;
+			}
 			zend_hash_move_forward(target_hash);
 		}
 	}
diff --git a/ext/xmlrpc/config.m4 b/ext/xmlrpc/config.m4
index 4df3219..1d78990 100644
--- a/ext/xmlrpc/config.m4
+++ b/ext/xmlrpc/config.m4
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: config.m4,v 1.25.2.3 2005/11/29 18:26:02 tony2001 Exp $
+dnl $Id: config.m4,v 1.25.2.3.2.1 2009/04/27 18:38:58 scottmac Exp $
 dnl
 
 sinclude(ext/xmlrpc/libxmlrpc/acinclude.m4)
@@ -61,17 +61,21 @@ if test "$PHP_XMLRPC" != "no"; then
     fi
   fi
 
-  if test "$PHP_ICONV_DIR" != "no"; then
-    PHP_ICONV=$PHP_ICONV_DIR
-  fi
+  dnl if iconv is shared or missing then we should build iconv ourselves
+  if test "$PHP_ICONV_SHARED" = "yes" || test "$PHP_ICONV" = "no"; then
+
+    if test "$PHP_ICONV_DIR" != "no"; then
+      PHP_ICONV=$PHP_ICONV_DIR
+    fi
   
-  if test -z "$PHP_ICONV" || test "$PHP_ICONV" = "no"; then
-    PHP_ICONV=yes
-  fi
+    if test -z "$PHP_ICONV" || test "$PHP_ICONV" = "no"; then
+      PHP_ICONV=yes
+    fi
   
-  PHP_SETUP_ICONV(XMLRPC_SHARED_LIBADD, [], [
-    AC_MSG_ERROR([iconv not found, in order to build xmlrpc you need the iconv library])
-  ])
+    PHP_SETUP_ICONV(XMLRPC_SHARED_LIBADD, [], [
+      AC_MSG_ERROR([iconv not found, in order to build xmlrpc you need the iconv library])
+    ])
+  fi
 fi
 
 if test "$PHP_XMLRPC" = "yes"; then
diff --git a/ext/xmlrpc/tests/bug44996.phpt b/ext/xmlrpc/tests/bug44996.phpt
new file mode 100644
index 0000000..dc1bc5d
--- /dev/null
+++ b/ext/xmlrpc/tests/bug44996.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Bug #44996 (xmlrpc_decode() ignores time zone on iso8601.datetime)
+--FILE--
+<?php
+
+function DecodeDatetime($datetime) {
+  print "\nISO 8601 datetime $datetime\n";
+  $obj = xmlrpc_decode("<?xml version=\"1.0\"?><methodResponse><params><param><value><dateTime.iso8601>$datetime</dateTime.iso8601></value></param></params></methodResponse>");
+  print_r($obj);
+}
+
+DecodeDatetime("20010909T01:46:40Z");
+DecodeDatetime("20010909T00:46:40-01");
+DecodeDatetime("2001-09-09T08:46:40+07:00");
+DecodeDatetime("2001-09-08T21:46:40-0400");
+
+?>
+--EXPECT--
+ISO 8601 datetime 20010909T01:46:40Z
+stdClass Object
+(
+    [scalar] => 20010909T01:46:40Z
+    [xmlrpc_type] => datetime
+    [timestamp] => 1000000000
+)
+
+ISO 8601 datetime 20010909T00:46:40-01
+stdClass Object
+(
+    [scalar] => 20010909T00:46:40-01
+    [xmlrpc_type] => datetime
+    [timestamp] => 1000000000
+)
+
+ISO 8601 datetime 2001-09-09T08:46:40+07:00
+stdClass Object
+(
+    [scalar] => 2001-09-09T08:46:40+07:00
+    [xmlrpc_type] => datetime
+    [timestamp] => 1000000000
+)
+
+ISO 8601 datetime 2001-09-08T21:46:40-0400
+stdClass Object
+(
+    [scalar] => 2001-09-08T21:46:40-0400
+    [xmlrpc_type] => datetime
+    [timestamp] => 1000000000
+)
diff --git a/ext/xmlrpc/tests/bug47818.phpt b/ext/xmlrpc/tests/bug47818.phpt
new file mode 100644
index 0000000..57e1090
--- /dev/null
+++ b/ext/xmlrpc/tests/bug47818.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Bug #47818 (Segfault due to bound callback param)
+--FILE--
+<?php
+
+class MyXmlRpc {
+    private $s;
+    private $method;
+
+    function impl($method_name, $params, $user_data){
+        $this->method = $method_name;
+        print "Inside impl(): {$this->method}\n";
+        return array_sum($params);
+    }
+
+    function __construct() {
+        $this->s = xmlrpc_server_create();
+        xmlrpc_server_register_method($this->s, 'add', array($this, 'impl'));
+    }
+
+    function call($req) {
+        return xmlrpc_server_call_method($this->s, $req, null);
+    }
+
+    function getMethod() {return $this->method;}
+
+}
+
+$x = new MyXmlRpc;
+$resp = $x->call(xmlrpc_encode_request('add', array(1, 2, 3)));
+
+$method = $x->getMethod();
+
+print "Global scope: $method\n";
+
+?>
+--EXPECTF--
+Inside impl(): add
+Global scope: add
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index 4155424..d8b8a7a 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -51,7 +51,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: xmlrpc-epi-php.c,v 1.39.2.5.2.13 2009/01/27 15:02:43 felipe Exp $ */
+/* $Id: xmlrpc-epi-php.c,v 1.39.2.5.2.17 2009/05/22 12:50:44 felipe Exp $ */
 
 /**********************************************************************
 * BUGS:                                                               *
@@ -67,6 +67,7 @@
 
 #include "php.h"
 #include "ext/standard/info.h"
+#include "ext/date/php_date.h"
 #include "php_ini.h"
 #include "php_xmlrpc.h"
 #include "xmlrpc.h"
@@ -1113,8 +1114,8 @@ PHP_FUNCTION(xmlrpc_server_call_method)
 			}
 
 			/* cleanup after ourselves.  what a sty! */
-			zval_dtor(data.xmlrpc_method);
-			FREE_ZVAL(data.xmlrpc_method);
+			zval_ptr_dtor(&data.xmlrpc_method);
+
 			zval_dtor(data.return_data);
 			FREE_ZVAL(data.return_data);
 
@@ -1300,8 +1301,8 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype)
 			if(newtype == xmlrpc_datetime) {
 				XMLRPC_VALUE v = XMLRPC_CreateValueDateTime_ISO8601(NULL, value->value.str.val);
 				if(v) {
-					time_t timestamp = XMLRPC_GetValueDateTime(v);
-					if(timestamp) {
+					time_t timestamp = (time_t) php_parse_date((char *)XMLRPC_GetValueDateTime_ISO8601(v), NULL);
+					if (timestamp != -1) {
 						zval* ztimestamp;
 
 						MAKE_STD_ZVAL(ztimestamp);
diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c
index fbb8b56..8fce924 100644
--- a/ext/xmlwriter/php_xmlwriter.c
+++ b/ext/xmlwriter/php_xmlwriter.c
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_xmlwriter.c,v 1.20.2.12.2.20 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: php_xmlwriter.c,v 1.20.2.12.2.23 2009/05/26 08:09:37 pajoye Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -310,7 +310,10 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
 
 	if (uri->scheme != NULL) {
 		/* absolute file uris - libxml only supports localhost or empty host */
-		if (strncasecmp(source, "file:///",8) == 0) {
+		if (strncasecmp(source, "file:///", 8) == 0) {
+			if (source[sizeof("file:///") - 1] == '\0') {
+				return NULL;
+			}
 			isFileUri = 1;
 #ifdef PHP_WIN32
 			source += 8;
@@ -318,6 +321,10 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
 			source += 7;
 #endif
 		} else if (strncasecmp(source, "file://localhost/",17) == 0) {
+			if (source[sizeof("file://localhost/") - 1] == '\0') {
+				return NULL;
+			}
+
 			isFileUri = 1;
 #ifdef PHP_WIN32
 			source += 17;
@@ -330,11 +337,28 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
 	file_dest = source;
 
 	if ((uri->scheme == NULL || isFileUri)) {
+		char file_dirname[MAXPATHLEN];
+		size_t dir_len;
+
 		if (!VCWD_REALPATH(source, resolved_path) && !expand_filepath(source, resolved_path TSRMLS_CC)) {
 			xmlFreeURI(uri);
 			return NULL;
 		}
+
+		memcpy(file_dirname, source, strlen(source));
+		dir_len = php_dirname(file_dirname, strlen(source));
+
+		if (dir_len > 0) {
+			struct stat buf;
+			if (php_sys_stat(file_dirname, &buf) != 0) {
+				xmlFreeURI(uri);
+				return NULL;
+			}
+		}
+
 		file_dest = resolved_path;
+	} else {
+		file_dest = source;
 	}
 
 	xmlFreeURI(uri);
@@ -1451,9 +1475,13 @@ static PHP_FUNCTION(xmlwriter_open_uri)
 
 	valid_file = _xmlwriter_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
 	if (!valid_file) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to resolve file path");
 		RETURN_FALSE;
 	}
 
+	/* TODO: Fix either the PHP stream or libxml APIs: it can then detect when a given 
+		 path is valid and not report out of memory error. Once it is done, remove the
+		 directory check in _xmlwriter_get_valid_file_path */
 #ifndef ZEND_ENGINE_2
 	ioctx = php_xmlwriter_streams_IO_open_write_wrapper(valid_file TSRMLS_CC);
 	if (ioctx == NULL) {
diff --git a/ext/xmlwriter/tests/bug48204.phpt b/ext/xmlwriter/tests/bug48204.phpt
new file mode 100644
index 0000000..86ab668
--- /dev/null
+++ b/ext/xmlwriter/tests/bug48204.phpt
@@ -0,0 +1,17 @@
+--TEST--
+xmlwriter_open_uri with PHP_MAXPATHLEN + 1
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+$path = str_repeat('a', PHP_MAXPATHLEN + 1);
+var_dump(xmlwriter_open_uri('file:///' . $path));
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
new file mode 100644
index 0000000..8bdf7ea
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with empty string as parameter
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+var_dump(xmlwriter_open_uri(''));
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Empty string as source in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
new file mode 100644
index 0000000..cfda44e
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri without parameter
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+var_dump(xmlwriter_open_uri());
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri() expects exactly %d parameter, %d given in %s on line %d
+NULL
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
new file mode 100644
index 0000000..49a2938
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with non existing file
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+var_dump(xmlwriter_open_uri('foo/bar.tmp'));
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
new file mode 100644
index 0000000..d4e72ff
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with file:///
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+var_dump(xmlwriter_open_uri('file:///'));
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
new file mode 100644
index 0000000..20a28af
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with file://localhost/
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+var_dump(xmlwriter_open_uri('file://localhost/'));
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
new file mode 100644
index 0000000..896778b
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+xmlwriter_set_indent_string passing xmlwriter resource
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string.tmp";
+	$fp = fopen($temp_filename, "w");
+	fwrite ($fp, "Hi");
+	fclose($fp);
+$resource = xmlwriter_open_uri($temp_filename);
+var_dump(xmlwriter_set_indent_string($resource, '  '));
+?>
+--CLEAN--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string.tmp";
+unlink($temp_filename);
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECT--
+bool(true)
diff --git a/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
new file mode 100644
index 0000000..c39678d
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+xmlwriter_set_indent_string with missing param(s)
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php 
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string_error.tmp";
+	$fp = fopen($temp_filename, "w");
+	fwrite ($fp, "Hi");
+	fclose($fp);
+$resource = xmlwriter_open_uri($temp_filename);
+var_dump(xmlwriter_set_indent_string($resource));
+?>
+--CLEAN--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string_error.tmp";
+unlink($temp_filename);
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_set_indent_string() expects exactly %d parameters, %d given in %s on line %d
+NULL
diff --git a/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
new file mode 100644
index 0000000..090327b
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
@@ -0,0 +1,28 @@
+--TEST--
+xmlwriter_write_attribute_ns basic function tests
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute_ns($xw, 'prefix', 'id', 'http://www.php.net/uri', 'elem1');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_end_element($xw);
+xmlwriter_full_end_element($xw);
+xmlwriter_end_document($xw);
+
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<root prefix:id="elem1" xmlns:prefix="http://www.php.net/uri">
+ <elem1 attr1="first"/>
+</root>
+
diff --git a/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
new file mode 100644
index 0000000..2516723
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
@@ -0,0 +1,35 @@
+--TEST--
+xmlwriter_write_attribute_ns with missing param
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute_ns($xw, 'prefix', '', 'http://www.php.net/uri');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_end_element($xw);
+xmlwriter_full_end_element($xw);
+xmlwriter_end_document($xw);
+
+$output = xmlwriter_flush($xw, true);
+print $output;
+
+// write attribute_ns without start_element first
+$xw = xmlwriter_open_memory();
+var_dump(xmlwriter_write_attribute_ns($xw, 'prefix', 'id', 'http://www.php.net/uri', 'elem1'));
+print xmlwriter_output_memory($xw);
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_write_attribute_ns() expects exactly %d parameters, %d given in %s on line %d
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+ <elem1 attr1="first"/>
+</root>
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
new file mode 100644
index 0000000..62adce8
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+xmlwriter_write_dtd basic function tests
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+
+$xmlwriter = xmlwriter_open_memory();
+var_dump(xmlwriter_write_dtd($xmlwriter, 'bla1', 'bla2', 'bla3', 'bla4'));
+$output = xmlwriter_flush($xmlwriter, true);
+print $output . PHP_EOL;
+
+var_dump(xmlwriter_write_dtd($xmlwriter, '', '', ''));
+$output = xmlwriter_flush($xmlwriter, true);
+print $output;
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+--EXPECT--
+bool(true)
+<!DOCTYPE bla1 PUBLIC "bla2" "bla3" [bla4]>
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
new file mode 100644
index 0000000..7968eb4
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
@@ -0,0 +1,15 @@
+--TEST--
+xmlwriter_write_dtd with missing param(s)
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xmlwriter = xmlwriter_open_memory();
+var_dump(xmlwriter_write_dtd($xmlwriter));
+?>
+--CREDIT--
+Koen Kuipers koenk82 at gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_write_dtd() expects at least %d parameters, %d given in %s on line %d
+NULL
diff --git a/ext/xsl/tests/bug26384.phpt b/ext/xsl/tests/bug26384.phpt
index b8f80f8..e415ec9 100644
--- a/ext/xsl/tests/bug26384.phpt
+++ b/ext/xsl/tests/bug26384.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Bug #26384 (domxslt->process causes segfault with xsl:key)
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 $dom = new domDocument;
diff --git a/ext/xsl/tests/bug48221.phpt b/ext/xsl/tests/bug48221.phpt
new file mode 100644
index 0000000..2d08b3d
--- /dev/null
+++ b/ext/xsl/tests/bug48221.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #48221 (memory leak when passing invalid xslt parameter)
+--SKIPIF--
+<?php
+if (!extension_loaded('xsl')) die("skip Extension XSL is required\n");
+?>
+--FILE--
+<?php
+include('prepare.inc');
+$proc->importStylesheet($xsl);
+$proc->setParameter('', '', '"\'');
+$proc->transformToXml($dom);
+--EXPECTF--
+Warning: XSLTProcessor::transformToXml(): Cannot create XPath expression (string contains both quote and double-quotes) in %s on line %d
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/phpfunc-nostring.xsl b/ext/xsl/tests/phpfunc-nostring.xsl
new file mode 100644
index 0000000..48002dc
--- /dev/null
+++ b/ext/xsl/tests/phpfunc-nostring.xsl
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- $Id: phpfunc-nostring.xsl,v 1.1.4.2 2009/05/23 14:52:54 felipe Exp $ -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:php="http://php.net/xsl"
+>
+    <xsl:output  method="text" encoding="iso-8859-1" indent="no"/>
+    <xsl:template match="/">
+     <xsl:value-of select="php:function(123,'this is an example')"/>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/ext/xsl/tests/phpfunc-undef.xsl b/ext/xsl/tests/phpfunc-undef.xsl
new file mode 100644
index 0000000..cdf89e1
--- /dev/null
+++ b/ext/xsl/tests/phpfunc-undef.xsl
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- $Id: phpfunc-undef.xsl,v 1.1.4.2 2009/05/23 14:52:54 felipe Exp $ -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:php="http://php.net/xsl"
+>
+    <xsl:output  method="text" encoding="iso-8859-1" indent="no"/>
+    <xsl:template match="/">
+     <xsl:value-of select="php:function('undefinedfunc','this is an example')"/>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/ext/xsl/tests/phpfunc.xsl b/ext/xsl/tests/phpfunc.xsl
new file mode 100644
index 0000000..3cd93d2
--- /dev/null
+++ b/ext/xsl/tests/phpfunc.xsl
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- $Id: phpfunc.xsl,v 1.1.4.2 2009/05/23 14:52:54 felipe Exp $ -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:php="http://php.net/xsl"
+>
+    <xsl:output  method="text" encoding="iso-8859-1" indent="no"/>
+<!--    <xsl:param name="foo" select="'bar'"/>-->
+    <xsl:template match="/">
+     <xsl:value-of select="php:function('ucwords','this is an example')"/>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/ext/xsl/tests/xsl-phpinfo.phpt b/ext/xsl/tests/xsl-phpinfo.phpt
new file mode 100644
index 0000000..83e6729
--- /dev/null
+++ b/ext/xsl/tests/xsl-phpinfo.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Test phpinfo() displays xsl info
+--SKIPIF--
+<?php 
+	if (!extension_loaded("xsl")) {
+		die("SKIP extension gettext not loaded\n");
+	}
+?>
+--FILE--
+<?php
+phpinfo();
+?>
+--EXPECTF--
+%a
+libxslt compiled against libxml Version%a
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xslt001.phpt b/ext/xsl/tests/xslt001.phpt
index 885e7c9..ec5538a 100644
--- a/ext/xsl/tests/xslt001.phpt
+++ b/ext/xsl/tests/xslt001.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 1: Transform To XML String
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 1: Transform To XML String";
diff --git a/ext/xsl/tests/xslt002.phpt b/ext/xsl/tests/xslt002.phpt
index 6c9f0c6..5ce2eb9 100644
--- a/ext/xsl/tests/xslt002.phpt
+++ b/ext/xsl/tests/xslt002.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 2: Transform To HTML String
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 2: Transform To HTML String";
diff --git a/ext/xsl/tests/xslt003.phpt b/ext/xsl/tests/xslt003.phpt
index a3c848b..60a8427 100644
--- a/ext/xsl/tests/xslt003.phpt
+++ b/ext/xsl/tests/xslt003.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 3: Using Parameters
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 3: Using Parameters";
diff --git a/ext/xsl/tests/xslt004.phpt b/ext/xsl/tests/xslt004.phpt
index 6e8f476..e543232 100644
--- a/ext/xsl/tests/xslt004.phpt
+++ b/ext/xsl/tests/xslt004.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 4: Checking UTF8 Output
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 4: Checking UTF8 Output";
diff --git a/ext/xsl/tests/xslt005.phpt b/ext/xsl/tests/xslt005.phpt
index a70e6ea..5492bf8 100644
--- a/ext/xsl/tests/xslt005.phpt
+++ b/ext/xsl/tests/xslt005.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 5: Checking Indent
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 5: Checking Indent";
diff --git a/ext/xsl/tests/xslt006.phpt b/ext/xsl/tests/xslt006.phpt
index 26fada1..2c0cfed 100644
--- a/ext/xsl/tests/xslt006.phpt
+++ b/ext/xsl/tests/xslt006.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 6: Transform To Doc
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 6: Transform To Doc";
diff --git a/ext/xsl/tests/xslt007.phpt b/ext/xsl/tests/xslt007.phpt
index bc6ad84..486560b 100644
--- a/ext/xsl/tests/xslt007.phpt
+++ b/ext/xsl/tests/xslt007.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 7: Transform To Uri
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 7: Transform To Uri";
diff --git a/ext/xsl/tests/xslt008.phpt b/ext/xsl/tests/xslt008.phpt
index 0efc88e..438a566 100644
--- a/ext/xsl/tests/xslt008.phpt
+++ b/ext/xsl/tests/xslt008.phpt
@@ -2,7 +2,7 @@
 Test 8: Stream Wrapper Includes
 --SKIPIF--
 <?php
-	require_once('skipif.inc');
+	require_once dirname(__FILE__) .'/skipif.inc';
 	if (!extension_loaded('zlib')) die('skip zlib extension not available');
 ?>
 --FILE--
diff --git a/ext/xsl/tests/xslt009.phpt b/ext/xsl/tests/xslt009.phpt
index f763e84..67b0d67 100644
--- a/ext/xsl/tests/xslt009.phpt
+++ b/ext/xsl/tests/xslt009.phpt
@@ -2,7 +2,7 @@
 Test 9: Stream Wrapper XPath-Document() 
 --SKIPIF--
 <?php
-	require_once('skipif.inc');
+	require_once dirname(__FILE__) .'/skipif.inc';
 	if (!extension_loaded('zlib')) die('skip zlib extension not available');
 ?>
 --FILE--
diff --git a/ext/xsl/tests/xslt010.phpt b/ext/xsl/tests/xslt010.phpt
index 1ac1a49..75729c2 100644
--- a/ext/xsl/tests/xslt010.phpt
+++ b/ext/xsl/tests/xslt010.phpt
@@ -1,7 +1,8 @@
 --TEST--
 Test 10: EXSLT Support
 --SKIPIF--
-<?php require_once('skipif.inc'); 
+<?php 
+require_once dirname(__FILE__) .'/skipif.inc';
 $proc = new xsltprocessor;
 if (!$proc->hasExsltSupport()) die('skip EXSLT support not available');
 if (LIBXSLT_VERSION < 10117) die('skip too old libxsl');
diff --git a/ext/xsl/tests/xslt011.phpt b/ext/xsl/tests/xslt011.phpt
index 5f78652..8cf99e4 100644
--- a/ext/xsl/tests/xslt011.phpt
+++ b/ext/xsl/tests/xslt011.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 11: php:function Support
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 print "Test 11: php:function Support\n";
diff --git a/ext/xsl/tests/xslt012.phpt b/ext/xsl/tests/xslt012.phpt
index 60387af..9fd3fbd 100644
--- a/ext/xsl/tests/xslt012.phpt
+++ b/ext/xsl/tests/xslt012.phpt
@@ -1,7 +1,7 @@
 --TEST--
 Test 12: Using Associative Array of Parameters
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php require_once dirname(__FILE__) .'/skipif.inc'; ?>
 --FILE--
 <?php
 echo "Test 12: Using Associative Array of Parameters";
diff --git a/ext/xsl/tests/xsltprocessor_getParameter-invalidparam.phpt b/ext/xsl/tests/xsltprocessor_getParameter-invalidparam.phpt
new file mode 100644
index 0000000..19f7791
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_getParameter-invalidparam.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Check xsltprocessor::getParameter with undefined parameter
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+var_dump($proc->getParameter('', 'doesnotexist'));
+--EXPECTF--
+bool(false)
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_getParameter-wrongparam.phpt b/ext/xsl/tests/xsltprocessor_getParameter-wrongparam.phpt
new file mode 100644
index 0000000..758d4ba
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_getParameter-wrongparam.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Check xsltprocessor::getparameter error handling
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+var_dump($proc->getParameter());
+var_dump($proc->getParameter(array(), array()));
+var_dump($proc->getParameter('', array()));
+--EXPECTF--
+Warning: XSLTProcessor::getParameter() expects exactly 2 parameters, 0 given in %s on line %d
+bool(false)
+
+Warning: XSLTProcessor::getParameter() expects parameter 1 to be %binary_string_optional%, array given in %s on line %d
+bool(false)
+
+Warning: XSLTProcessor::getParameter() expects parameter 2 to be %binary_string_optional%, array given in %s on line %d
+bool(false)
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_getParameter.phpt b/ext/xsl/tests/xsltprocessor_getParameter.phpt
new file mode 100644
index 0000000..2430bc8
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_getParameter.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Check xsltprocessor::getparameter functionality
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$proc->importStylesheet($xsl);
+$proc->setParameter('', 'key', 'value');
+var_dump($proc->getParameter('', 'key'));
+--EXPECTF--
+%string|unicode%(5) "value"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-allfuncs.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-allfuncs.phpt
new file mode 100644
index 0000000..1f0453e
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-allfuncs.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions());
+var_dump($proc->transformToXml($dom));
+
+//var_dump($proc->registerPHPFunctions(array()));
+//var_dump($proc->transformToXml($dom));
+
+--EXPECTF--
+NULL
+string(18) "This Is An Example"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-multiple.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-multiple.phpt
new file mode 100644
index 0000000..7462ee9
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-multiple.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions with array called multiple times
+--DESCRIPTION--
+When being called multiple times with an array,
+registerPHPFunctions adds the new functions to the allowed parameter
+list - it does not replace the previously allowed functions.
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions(array('strpos', 'ucwords')));
+var_dump($proc->registerPHPFunctions(array('strrev', 'array_key_exists')));
+var_dump($proc->registerPHPFunctions(array()));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+string(18) "This Is An Example"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-notallowed.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-notallowed.phpt
new file mode 100644
index 0000000..996fdd1
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array-notallowed.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions with array and a not allowed function
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions(array()));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+bool(true)
+
+Warning: XSLTProcessor::transformToXml(): Not allowed to call handler 'ucwords()' in %s on line %d
+NULL
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array.phpt
new file mode 100644
index 0000000..6a7b961
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-array.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions with array
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions(array('ucwords')));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+bool(true)
+string(18) "This Is An Example"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcnostring.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcnostring.phpt
new file mode 100644
index 0000000..a0d6bf6
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcnostring.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions and a non-string function in xsl
+--DESCRIPTION--
+The XSL script tries to call a php function that is not a string which
+is expected to fail
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc-nostring.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions());
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+NULL
+
+Warning: XSLTProcessor::transformToXml(): Handler name must be a string in %s on line %d
+
+Warning: XSLTProcessor::transformToXml(): xmlXPathCompiledEval: evaluation failed in %s on line %d
+
+Warning: XSLTProcessor::transformToXml(): runtime error: file %s line %d element value-of in %s on line %d
+
+Warning: XSLTProcessor::transformToXml(): XPath evaluation returned no result. in %s on line %d
+NULL
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcundef.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcundef.phpt
new file mode 100644
index 0000000..1aa7bb0
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-funcundef.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions and a undefined php function
+--DESCRIPTION--
+The XSL script tries to call a php function that is not defined
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc-undef.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions());
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+NULL
+
+Warning: XSLTProcessor::transformToXml(): Unable to call handler undefinedfunc() in %s on line %d
+
+Warning: XSLTProcessor::transformToXml(): xmlXPathCompiledEval: evaluation failed in %s on line %d
+
+Warning: XSLTProcessor::transformToXml(): runtime error: file %s line %d element value-of in %s on line %d
+
+Warning: XSLTProcessor::transformToXml(): XPath evaluation returned no result. in %s on line %d
+NULL
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-null.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-null.phpt
new file mode 100644
index 0000000..f74d785
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-null.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions called with null to reset
+--DESCRIPTION--
+When being called multiple times with an array,
+registerPHPFunctions adds the new functions to the allowed parameter
+list - it does not replace the previously allowed functions.
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions('ucwords'));
+var_dump($proc->registerPHPFunctions(null));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+NULL
+NULL
+string(18) "This Is An Example"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-multiple.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-multiple.phpt
new file mode 100644
index 0000000..f15c08d
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-multiple.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions with string called multiple times
+--DESCRIPTION--
+When being called multiple times with a stringular function name only,
+registerPHPFunctions adds the new function to the allowed parameter
+list - it does not replace the old function.
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions('ucwords'));
+var_dump($proc->registerPHPFunctions('strpos'));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+NULL
+NULL
+string(18) "This Is An Example"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-notallowed.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-notallowed.phpt
new file mode 100644
index 0000000..9257749
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string-notallowed.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions with string and not allowed function
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions('strpos'));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+NULL
+
+Warning: XSLTProcessor::transformToXml(): Not allowed to call handler 'ucwords()' in %s on line %d
+NULL
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string.phpt b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string.phpt
new file mode 100644
index 0000000..5fbba90
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_registerPHPFunctions-string.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Check xsltprocessor::registerPHPFunctions with string
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$phpfuncxsl = new domDocument();
+$phpfuncxsl->load(dirname(__FILE__)."/phpfunc.xsl");
+if(!$phpfuncxsl) {
+  echo "Error while parsing the xsl document\n";
+  exit;
+}
+$proc->importStylesheet($phpfuncxsl);
+var_dump($proc->registerPHPFunctions('ucwords'));
+var_dump($proc->transformToXml($dom));
+--EXPECTF--
+NULL
+string(18) "This Is An Example"
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_removeParameter-invalidparam.phpt b/ext/xsl/tests/xsltprocessor_removeParameter-invalidparam.phpt
new file mode 100644
index 0000000..f35b470
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_removeParameter-invalidparam.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Check xsltprocessor::removeParameter with invalid parameter
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$proc->importStylesheet($xsl);
+var_dump($proc->removeParameter('', 'doesnotexist'));
+--EXPECT--
+bool(false)
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_removeParameter-wrongparams.phpt b/ext/xsl/tests/xsltprocessor_removeParameter-wrongparams.phpt
new file mode 100644
index 0000000..c2b4f4c
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_removeParameter-wrongparams.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Check xsltprocessor::removeParameter wrong parameter handling
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$proc->removeParameter();
+$proc->removeParameter(array(), array());
+$proc->removeParameter('', array());
+--EXPECTF--
+Warning: XSLTProcessor::removeParameter() expects exactly 2 parameters, 0 given in %s on line %d
+
+Warning: XSLTProcessor::removeParameter() expects parameter 1 to be %binary_string_optional%, array given in %s on line %d
+
+Warning: XSLTProcessor::removeParameter() expects parameter 2 to be %binary_string_optional%, array given in %s on line %d
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_removeParameter.phpt b/ext/xsl/tests/xsltprocessor_removeParameter.phpt
new file mode 100644
index 0000000..92be056
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_removeParameter.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Check xsltprocessor::removeParameter functionality
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$proc->importStylesheet($xsl);
+$proc->setParameter('', 'key', 'value');
+$proc->removeParameter('', 'key');
+var_dump($proc->getParameter('', 'key'));
+--EXPECT--
+bool(false)
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_setparameter-errorquote.phpt b/ext/xsl/tests/xsltprocessor_setparameter-errorquote.phpt
new file mode 100644
index 0000000..44e49de
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_setparameter-errorquote.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Check xsltprocessor::setparameter error handling with both single and double quotes
+--DESCRIPTION--
+Memleak: http://bugs.php.net/bug.php?id=48221
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$proc->importStylesheet($xsl);
+$proc->setParameter('', '', '"\'');
+$proc->transformToXml($dom);
+--EXPECTF--
+Warning: XSLTProcessor::transformToXml(): Cannot create XPath expression (string contains both quote and double-quotes) in %s on line %d
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/tests/xsltprocessor_setparameter-nostring.phpt b/ext/xsl/tests/xsltprocessor_setparameter-nostring.phpt
new file mode 100644
index 0000000..c4fcd70
--- /dev/null
+++ b/ext/xsl/tests/xsltprocessor_setparameter-nostring.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Check xsltprocessor::setparameter error handling with no-string
+--DESCRIPTION--
+Memleak: http://bugs.php.net/bug.php?id=48221
+--SKIPIF--
+<?php 
+        if (!extension_loaded('xsl')) {
+                die("skip\n");
+        }
+?>
+--FILE--
+<?php
+include dirname(__FILE__) .'/prepare.inc';
+$proc->importStylesheet($xsl);
+var_dump($proc->setParameter('', array(4, 'abc')));
+$proc->transformToXml($dom);
+--EXPECTF--
+Warning: XSLTProcessor::setParameter(): Invalid parameter array in %s on line %d
+bool(false)
+--CREDITS--
+Christian Weiske, cweiske at php.net
+PHP Testfest Berlin 2009-05-09
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index 17f2f19..f5efb02 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: xsltprocessor.c,v 1.39.2.2.2.16 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: xsltprocessor.c,v 1.39.2.2.2.18 2009/05/23 14:31:15 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -157,11 +157,13 @@ static char **php_xsl_xslt_make_params(HashTable *parht, int xpath_params TSRMLS
 			if (!xpath_params) {
 				xpath_expr = php_xsl_xslt_string_to_xpathexpr(Z_STRVAL_PP(value) TSRMLS_CC);
 			} else {
-				xpath_expr = estrndup(Z_STRVAL_PP(value), strlen(Z_STRVAL_PP(value)));
+				xpath_expr = estrndup(Z_STRVAL_PP(value), Z_STRLEN_PP(value));
 			}
 			if (xpath_expr) {
 				params[i++] = string_key;
 				params[i++] = xpath_expr;
+			} else {
+				efree(string_key);
 			}
 		}
 	}
@@ -318,7 +320,7 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", callable);
 		
 	} else if ( intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable, strlen(callable) + 1) == 0) { 
-		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%s()'.", callable);
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%s()'", callable);
 		/* Push an empty string, so that we at least have an xslt result... */
 		valuePush(ctxt, xmlXPathNewString(""));
 	} else {
diff --git a/ext/zip/lib/zip_open.c b/ext/zip/lib/zip_open.c
index 0880eef..4b21955 100644
--- a/ext/zip/lib/zip_open.c
+++ b/ext/zip/lib/zip_open.c
@@ -65,6 +65,10 @@ zip_open(const char *fn, int flags, int *zep)
     struct zip_cdir *cdir;
     int i;
     off_t len;
+
+    if (flags & ZIP_OVERWRITE) {
+	return _zip_allocate_new(fn, zep);
+    }
     
     switch (_zip_file_exists(fn, flags, zep)) {
     case -1:
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index de2a3d0..31f57d0 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_zip.c,v 1.1.2.49 2009/02/05 19:53:22 pajoye Exp $ */
+/* $Id: php_zip.c,v 1.1.2.50 2009/03/01 17:35:25 iliaa Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -806,6 +806,7 @@ static int php_zip_property_reader(ze_zip_object *obj, zip_prop_handler *hnd, zv
 			} else {
 				if (hnd->read_const_char_from_obj_func) {
 					retchar = hnd->read_const_char_from_obj_func(obj TSRMLS_CC);
+					len = strlen(retchar);
 				}
 			}
 		}
@@ -818,7 +819,7 @@ static int php_zip_property_reader(ze_zip_object *obj, zip_prop_handler *hnd, zv
 	switch (hnd->type) {
 		case IS_STRING:
 			if (retchar) {
-				ZVAL_STRING(*retval, (char *) retchar, 1);
+				ZVAL_STRINGL(*retval, (char *) retchar, len, 1);
 			} else {
 				ZVAL_EMPTY_STRING(*retval);
 			}
@@ -941,10 +942,11 @@ static int php_zip_has_property(zval *object, zval *member, int type TSRMLS_DC)
 
 	if (ret == SUCCESS) {
 		zval *tmp;
+		ALLOC_INIT_ZVAL(tmp);
 
 		if (type == 2) {
 			retval = 1;
-		} else if (php_zip_property_reader(obj, hnd, &tmp, 1 TSRMLS_CC) == SUCCESS) {
+		} else if (php_zip_property_reader(obj, hnd, &tmp, 0 TSRMLS_CC) == SUCCESS) {
 			Z_SET_REFCOUNT_P(tmp, 1);
 			Z_UNSET_ISREF_P(tmp);
 			if (type == 1) {
@@ -952,8 +954,9 @@ static int php_zip_has_property(zval *object, zval *member, int type TSRMLS_DC)
 			} else if (type == 0) {
 				retval = (Z_TYPE_P(tmp) != IS_NULL);
 			}
-			zval_ptr_dtor(&tmp);
 		}
+
+		zval_ptr_dtor(&tmp);
 	} else {
 		std_hnd = zend_get_std_object_handlers();
 		retval = std_hnd->has_property(object, member, type TSRMLS_CC);
@@ -2557,7 +2560,7 @@ static PHP_MINFO_FUNCTION(zip)
 	php_info_print_table_start();
 
 	php_info_print_table_row(2, "Zip", "enabled");
-	php_info_print_table_row(2, "Extension Version","$Id: php_zip.c,v 1.1.2.49 2009/02/05 19:53:22 pajoye Exp $");
+	php_info_print_table_row(2, "Extension Version","$Id: php_zip.c,v 1.1.2.50 2009/03/01 17:35:25 iliaa Exp $");
 	php_info_print_table_row(2, "Zip version", PHP_ZIP_VERSION_STRING);
 	php_info_print_table_row(2, "Libzip version", "0.9.0");
 
diff --git a/ext/zip/tests/bug47667.phpt b/ext/zip/tests/bug47667.phpt
new file mode 100644
index 0000000..d28194f
--- /dev/null
+++ b/ext/zip/tests/bug47667.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #47667 (ZipArchive::OVERWRITE seems to have no effect)
+--SKIPIF--
+<?php
+/* $Id: bug47667.phpt,v 1.1.4.2 2009/03/16 10:22:13 mkoppanen Exp $ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+$thisdir = dirname(__FILE__);
+$filename = $thisdir . "/bug47667.zip";
+
+$zip = new ZipArchive();
+if ($zip->open($filename, ZipArchive::CREATE) !== true) {
+	exit("Unable to open the zip file");
+} else {
+	$zip->addFromString('foo.txt', 'foo bar foobar');
+	$zip->close();
+}
+
+for ($i = 0; $i < 10; $i++) {
+	$zip = new ZipArchive();
+	if ($zip->open($filename, ZipArchive::OVERWRITE) !== true) {
+		exit("Unable to open the zip file");
+	}	
+	$zip->addFromString("foo_{$i}.txt", 'foo bar foobar');
+	$zip->close();
+}
+
+$zip = new ZipArchive();
+if ($zip->open($filename, ZipArchive::CREATE) !== true) {
+	exit("Unable to open the zip file");
+}
+
+echo "files: " , $zip->numFiles;
+
+unlink($filename);
+
+--EXPECT--
+files: 1
diff --git a/ext/zlib/tests/008.phpt b/ext/zlib/tests/008.phpt
new file mode 100644
index 0000000..4102e0c
--- /dev/null
+++ b/ext/zlib/tests/008.phpt
@@ -0,0 +1,11 @@
+--TEST--
+zlib.output_compression=1 with client not accepting compression
+--SKIPIF--
+<?php if (!extension_loaded('zlib')) die('skip'); ?>
+--INI--
+zlib.output_compression=1
+display_startup_errors=1
+--FILE--
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/ext/zlib/tests/bug.tar b/ext/zlib/tests/bug.tar
deleted file mode 100644
index 77fd77832fa2690ee295fbfc6b23958b4003ec2c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4720640
zcmeFa`$AhsvNxK4!&9sf?U6{3K-kzZHcqg?8NO{}Zy=LoutyQn5-8Sfv?OEV$@c{3
z1<w1N^IqrotLodj=z=f#W}h8R#z<>*S65e8S65e6SC1}7&#w2{{qCT;Rjb!)x2o~r
zqSs9>H$MAlpG|!3Zf}3azxZVT%Cq|B-K{&@^?H5#)@PgbTX*kneHLwhGz{hdnkJLx
zIEp?S4~LUE#TLGwSNGre-Du|c<4ym%NzSOXlB9;8 at 7oOy@SWSYv*T`l-`?EXy7gIl
z{O{hrUH>fFeBTCdQtyBG_&@j-1G}>ERrIFY--(iV62)&v%|Uz8JdcvA-P_S5!9NNA
z-HE>1K*_IGBK{YB_a+`E-QgfA9kzF(Jhw#k&3oIM(H7=@wZ2u|tVi`bJDd2g{`aUC
z_wPj|K-pOF5CME6N{0P-((T8|dUO>>y<rkZrN;5WfBkT9a(Y(&HEDFl&3;^dwbG6|
z-9cO_zj(IScyhe=?4Z0J_eYcKN at 4M}=-a3~?p|C@%F#|S#I^e?DWJ~|j}D*x at T~Fp
z`Lk!wkIL)OWIT;gXdM4 at +8xJ@;h+^q<=RHCdp>TCyK%D78ut6cL9IJzakiA_6;1xx
z8#TvCJg%X-Db4ObJ2^av?nIU51T<<U6QM^m9gLcj)@9s|49%0Z=(3qaqw(+ at q)b4k
zX1hDMh#sGu5X#kMJcxb+<OWb0jpIbdshdQ@!AiFiRY<cRPL3Ooj-UT{a&X+(`~KkQ
zG}_&b%7+K#=r4bXvIYKja4fIylvnt=(j9ag7xAQ0W+S!XbTXPw!nVq5YirTFl?Wde
z1zXK7x*nCEcRFQI_V*RRuJrxW=a2TDo}85@@!LtG-5r--p><%_n~cjAZb?Qn!c!gA
z`_fve7k4In$iEnY-=nw(7E)Av74w$(xf&J>umA~9;z2uV4aeiSHHjwIqj+cKGH$lx
zai#otIGDtPN%fRZBjUIL0eL at aU2;SxyN4&wtKWRHeXm+)rwHtE6N48inLv=J)$0O4
zRE;KhJQ%j*^*^Wa_&NetfWIg4IO;cF$4Qh-$1#e5A10UGgupu8UL0X8$1z78JRzgq
z8V)+$3*s=ih!cnF!P^mdHQ9;EQ7yXYx0 at 48nf>*s9X*SFj{dsS-ATyVm~fS~=<Dd#
zoz2ZPlq^TzKRXrdzkRrJIqCNd1v}_^HR=9_ev9CU;@0I5)9K{k<mB-A(V5If&<CiL
zUsWFpi?9x>09^F#LmlM-_+=f^rU&Yxd62L<j+^;L>TzExw7YL=-AUY!dd>6LB6D?#
zN7ZE1Yyq9Y at M_!~Nnr at H@7gigzJ=blDPwB-*1(@pk8PyN^_%01?qDa{RMr|b+ni(a
z8$6<dld~z){nN{s0;>8DW8QlGHx-hV@>cC`Z4>jtAOX6rbcW-;`8lU8GHJV;jC#%M
z9WYN1Qct?sjJo{`Q~i8625VZ>D9#~TAS)mtx^KWQU<uOUOGx!zJjFX<_9U9L*UiIZ
z6t}vaZmaMm*rs{jOaNrkHZ219q}yuts?A>a0z~R}+wGnphQ<$$_KOjqw5MQu6RTj8
z!Hdr0$yE%A)ddqL5f&fe2pKp&TF at ftqvWefuRw*`E%Ht9g7e)y|D8w-hFIt(<7T8N
zU{VTgqE_7N39Zo6TF`nhKp6a*vTn22YmUdmtJEM?!<iu%k?&pW0ajr_Vra|V at m#MX
z1{HPEO+fD?HQv?p;bbzzvb|ZuL;*#6-FEclojdpNNp;_s+qQ%;+#G<ASLhq&L9SJ$
zjY`oD#14pAg#4mLv%|Ew$yReTp^l+V&#JFn1;H=M0mQZlXfn|Guzmd{|7noGPbgb0
z37f6g7vte{(5|+Iy&)z~*dw<DwK|YwXXU4;{pjK`3zlCwIYv^A`pw?(Vz at 4JV<UnC
zX6frhpV`Ut6eDQbrogikr-hXu9xLT^8V6(Yk%u*nUW&hG&1bS}DEU15g6*tq{xSo&
zxpO(B^wCi}&r#a(DA!sFgwDiL30uzz2acrW^M<gV&~9o4Kg(2;$#pNT%F2w%Oqod3
zf>)zq(k1WgaN$k5ZBrtc$gGg<TOQf>V~Y&#y>5zyg?2^F&sdvuwTWc4DPqkR!!Eh#
zU_kj^euYH_BBzLkz3zgcS=3w8Qf4M-t>4*bQLBET%948)+Zj2Op&~fIF at cc<ECFg}
z#hQ6cxtN+-!Sf<{nU{)L0A7?9%uQKYxcIS|yf6}G7d7vyJ7{Cs2nAI5T<6UkPBr8S
z>QLr2p&HmpH>WcB?yB3KT<&0tw)r1!5*I at 2bmLx|+rkj1>SQ=F)8DN2L0$IB_w;=D
zRvw_-_fUt1(fRbk%<r>SubCvf)PkT0_8|wcl)e(7dDd<33P^3<b?%iFDMsI^kKUSL
z#8N)MQa%P0*CA}O1c<9{YMT{|gQU!1sBz~Wh(YQA*~^%lMNo)q6cG+r#tc?b8m_MS
z0>}W~dSAe*W?1;CLCfN~<?*!o^p}<Z2EV!W$q7L}g>V==PdiHF^WpF{IP3LLR%NS=
zn5n2tQ8SA=Xvi&;g(FO`;<%|6jJm;&ifz at BeXDlc&fMH+ndY3bCk+~MVE2r%;*S}U
z6ljfON}UK87?wm0hZuU9=S$0W8JJ@%{laVjstr3Zss43kyW`tPy);8yFujzL?2GBK
zmpz`w at 6(wqJ~R3}6SL-YGSrEZLCn9f<ET$`nSb2ufg at mS1-)feuVMe7PuNMUSs{Z)
zzh?_UBWIxk<*BeNwv&F}blw}bUf)N#0-%eum3d3zBZ#adE?yLKO<fvJznPA4dim%=
zG}J)x%#d%=HX9Obca at QD)`a%r876i-&aCV!SiAi=y^HKlQ&cX{lk>RNB6a5sj*$f+
z1IP;TT*b(G6kpU}o5F^6G{nptH7{Z^iJMLD)h8v|^8xfBtFSwO+z~@K&4Qa<Oo0FS
z6k9FqPO(v>i84BufgdMPg}DFca6myf9Ir)Kf+FEISe|52gC&!u8`OxKual at 9C)hBv
zdkQk-QnR}!o1)26YZl>rvEScC)T|*BuXZAtTrAAekiJ+#rv%KOy4cohcV)q?Jb4n;
zYcTEL?U$ycm+XcNxixhj;~#T*%<qV%Jqz9tS1d+XW-&b<_S*NedU{rcSD8|%A)~87
z15T%&u|gDrprDzfbUN(4$~vnwAsPASmLky>b at X7LZcckJ+tHBDy^2^BYWTSx@!u9k
z54#in(QHk+u!-nEIAf0rEuohqN)78g_WSa${#Al{#d=nW%;FWA%g`b>4zRm4&jn3r
zQUfAsFcR^zL(>93cFA+K+T-D9LyYe^0H&82IGs)iCzf4HJ1PLv3 at DX>@#G2JO2j2B
zl-k``w4caF>690YUwTM$w^?NPQ_#n4uQ1EZxRFwrS%OGvC=CYZJ#2xAs@*54QJUK&
z$8b9KhM_`LihLG~F1H<G;4)SpW9*tSH8K{3`iLF{nu#1r6c+E#t9f$H6B=eA3uH1o
zXO|R at +!8QOuZC8xdl=qwVg_488h0yID*M$jyd+Z?!#BNlX$Zt3GK;fibTV5O6|=^M
zA9a~5GVIED>rtK=!x<iaPqC_--!o=2v|*j?A?~6HwPScGU>>BQL+v0yIfWAEP>L(x
zYtRCM8v$p9M!~$b@&h)0BS|uXU^-4{a+{8Om3f0Lw)7Xx$)%3<#t>uF9W;9z5YHR1
zVh_i((XPRtq0%;-W0+iEZ7%a>!IPy?7DpPJ)ZVM6UJAd+m>SnrZNr-FzF9>fHw&SL
zyIJUVA(^3cKfNs?yP^O;D^rJU5yC)+`bAV<zqP)-es{fAs}Xw)B;HKMH7Vv1)CVd-
z-fM7!8EF{)4easSoFKBbetZ4S`Zqa5u$4l&5EFUw0jT8o3<P|wOOvHaND2EkM8Q0J
zFC;{*dse6kgPUaj&qfBrV&s4yD$*nO&=t(n&WME+P1TxO at aX-!IB&}m)!sCFQ>%`I
z`z;ZX_ZRH1u@!C);{*;)I3wW{N}@8Hapg!Vdp0)PY-y at +gN;fuEmGKsKG|vZyFGZr
zRv!<i at Vt+sqxfodJu<)6BY5G55IilZZ>rat6MAjEGr_FQ<JhRA1)A#bE3R^{$8dwR
z4stPu*Gf>Nq*0F>T{TmYDzulRp6PV59u0`-;mE)<3ap_nW?-&v_5pVr2svoSF#5q?
zC7{*akZ&@D1-3RFxcQbUiyguM4qA}RT6$8NHt<Y=PPFX$3ig9>lY10+t(8ON!46jX
z$tCHP?Tx8v1ddh-Z2^G_?3Q?=YR?B%8+eD01^5jOON($w at tmm{y5;gzjwW<7!9iNX
z4zD$inzKj@?f<;@1kq;j3`f at IJwrLq_6`OOFqN>Fc$lK*&UuV2cwEq!)|KH~Sk^2o
znI6oBt>sf4F@^1bs|yZs2WO1J$c=bGN17c_WVwFKDmtSZ^NXi at A!T!&cqN at M>O^Yn
zu@;Gm1YYpV$@#SBwoFFD8L4MRqy!aJ(RL7)f<O+cCT3?S!2u at vB^^vLCz=4^C1ErH
zBD3-z25dz~2S3tofuNp<4b>@wXOtF)X$=m|?tqq^=(4_^ebnUZp&?PxUNu}WtalT#
zLM%lBITgi`5-FsRou|&HlM~EzmjWQW)`!o-*^9p9ubf%Kdmp=f7?wUz>15v<BB*Pl
z!3E-bh;pEFd9P!r*Q#X4evcv$F8f at yaXgCYRUZti`qh-s4U9GXdUr?C?LmtaGJM&;
zhMk{X*D;g50Kz)pn9e*jV`eBG;wP>Upr@^x5x7mS1%-T?tj+@$_*y>(Wf|Yo2$6D*
zPBN5+fzgl`&^@b2`yiAo(#}={-4ML(RuQ**1~1WZ$F4elGC at AYZr5ih`2zfO2!`vn
zLZbkqM!GEoRK{20WB|d~H&F_D-7kCHMhm9EN!+kLZ!<0*nV#p3L44IlaG|g%#!=f=
ztA3-0II&ODZX&Q}G%LJ{NI?Y7i1jOtlzFRhbe{^lX42};zz*Sf{rH_s>5n`ZNkd at g
z+hvqigA?}?HG4TsCfQaQ;}x_C*8k|e6 at iDKaq=FQ8^?Y+#Hzx4qAn}&Y^Sy1H;B~b
zCOY{<Z3DjPb+*fh)omdV_mj13;1_q>O}J0h at 1jYi6vuHAY@9w#yXOssUfk((xKoA~
zcI)!dSsYq?al2Nmf3lYILLD*tbew$>rUsD(dbYF1S@((BROs0 at HN3eoLfps|RHIMR
z;Y8uLvyFq98VDu(RE+}s#jw-KwhA?_(H^?U&yUQ;=K?#|=H-Y>(x>Sujz%<+>wd0H
z^z#y)RdN1)BBmnzY`ZF at Y@GC`kyDB87;-B^a at EDLjz;^OOV%e67Z_myukpj#-gkP_
z<g#IV4^!PIp*;F8hZS7wM%$jJDeF!E8)dcOBlOXq3o${tSrr_L23=~{u}H+Py677;
zkHF(jYm0U+*sU2GpxKt2(+q%K81T!To^Bs at _|<*35roG7Z}MN=F|mD#d at _N4AJ#DU
zV1y_tr0s>-q-}3*vQZ*qar03)Gj`%3Fz at HKZn!X*+<OVbIyPWteqAxF5_KDOfnz{C
z at 6piTW-wCQf0jm}4((OueadpkUKUv#%%%<oRRrwWxUtMm&pmhc1%^HnqIUt(Gf4lc
zx=8IFn`J^uhI>@EvDa}I0~A#2!LWVaIG=Vp at pv>G_8QX!J4JicqTs!_=em>YG*QBa
z{0^N&f^Dy%g3BB_@>?on4892@#ac`arW%g}TPwgfhD>wK1{Ns=g(ysKcl|(Et>MU$
z<pUw5gBEj)^<L2bd5&#721EPJ#d%r6+nTW5G(=P^SCPypd?Box6N!&5#Fd8=a0RbK
z+NrB=R&DXV&8e;4xkCG8{bu&dd+%kvyoc`3v0mzoDGZY at h;cJv@>pRYE9hf%W}2FL
z03*Krnib*m&x?euJ#rSvFk-<hJ>eX81~0R|g+LyskDh2X4Y&vX^am^Q8IQ4eif at Rz
zvXG6Lqm@;Bx(Ywz2(A^ndl%5=BIo0^epNpJ&O?e32wkW(^@ZNBOXAfvF3%4fjv0<q
zJr^yEWF;^g-O%%7;7BaqQTrUHHxW<I<D0NEHhFXt;exOiw&kdb9EgT{-#t+GaOwe0
z?7_$6O5oR}|7B!|UCO<^cv&{f69<xA4qb{{%fL5F!!2*3pLZq<5U9NbUIiV!a7_*T
z1evmsuIyjxa6?!#?3rIADJFARsz!iCULz;Pw$0Xpvth8#CKD(sa(GhF{Kz}51iKt(
zk|UY{eD6Hy4*ZFwpuo*yB~=Y3QS{(js&g5O_{?BQ at xJJhUt%ktZ}ij%zYF;b)`NR1
zD at EsG8_${ps6seISAB?G$6)d}N#r=X9N~vM1^W9<vN!x$_5&$^-S~|BFVJ9Rgy_fk
zknA6yNuH0{`9JD+Zf)Pr=Kt8LZ~mG8;{%6wsp>j^vBrO3{*NrT;Aq+HyWeQ`4<rED
zycgB)?cA>K-1=r__KzDR)}Z^EIY_>bVK(8)>g at Um!$IH?j`l#7^7Q{?i1%1-5t7jz
zG1mZ7W0*Z;f>T~h>5#~}TM}+>h}&*gl6}le;Gs2xTpugUnIT91U)U55Nd>3Fo7a_c
z`y9$HQ$Z-!`;xju5k~|haU92!=@^l8L+S-B9JP;zok#*4RZ+k$0kHyb8uFN&qKmf;
z)<&`m5FZ6NNxx;D2V#Qr4Kcz(V`k+*I221(O6~Iii<5XVK|X^-e3Y=yh(iv9nqb>1
zEzBMdTRKQyQi9HUY=8hIMPXu}Btnx)(7GEru5RosM^ScB>@a_{rbxblv4qmZlmLNq
z8(}l&G{mA*5|a(29#pChM?LAnzk{cI@!e$D9!C9mi~}Xg2BSD`Pe)NhH-pXIbpwz=
zb|Sq0=#W`WbTfxcGt*wLvPMV<)&TLZ&#xy4A3&xA0U?ZnLn}P{VnYHG<n*Z5qyIHU
zs2CF8)FqP$Gb=PPe5M}kQ4u_|h+2Dgeez#VqrYi}2%IEA$8Xm*IUapPPN}WCy{0))
z#3*(0x;uI*&7F!9OY)*<UK*pBm5}U%rw()k*df_lR>~)Teg0$g{Kdghbh`KG>A^|#
z<oNkB$qK at r(<JuKDMFHjN0<QQKC^#tfk)pT at st+R%Lvh>WeyVDh*CnfTc+JFcB4*{
z8COga8DcP)_8ZiND+al>=wXDTD5_nt2?ReOw6jv0^hW{WotU;!RCM*iItDegt(aht
z`-l$y%`g$|4}u)a at k1mLP<YV*X<L_-@^@X#i6q`Vt5@&6`ue*rvY at d2v&~m7s75R5
zzole|1UJmna%PGlC5;ghVY%O3qyC#^tq#HkVF=~;xGq5`*y_Zv3kM-yy2f(2*zuK0
z#e=-;_^w9-F!;LTe56=9{<(2-`uzC741I{1ZTP(g*aCXrfwuKYqA#*Eas!ehmaWFW
zC8V%2#E$|d3ulKAE;>2gJN;qd^oX7w{^vpTvP^M{yf6t)GD8>%3zLO7gI at YM6e423
z3qs_0e*8!(*TcUxY=I9P&Y2OhK=`+$((mjQf57g;N`R}gm(RkF&4<Kk?WC=p$YDYI
zJp<h=Xh)b{<!JYzn=><7bIfhQ`B`C~%%2^$l>IAH1JN^xv|M)jO$RckKoU%GoqmRz
zzjFsDJcSLpn|K1<@sj0xLBJ2w`|^zwt8CVGeQ5z{hISUan9gOzq#wc}?(idG(J7Ww
zb_5JL(N;i3+T^Tub0}*$%o@<TTpF_>7DVAU9M#ZVMymdZ&V{A0gJ@>NieF3A6wZTU
z3E}$P92g}C3E^l$$Fq$U)1QC}*+p9wof7G)lLKX2Nc95Is=tByilnY8KR6#p8xIlQ
z$)&npi;kc#a)r}XH-xb37cI?tl}yG*!&6xfpD>RMT>t>GRf|q8d3ZzMV0qH at T%xF<
zE{NGadbk_is%_n>ZQg>$V0DYE@(`ph!?yT=z~f))p8Pw0DDw*s9)?yB;3Zhmg7;tp
zFK3lH=Fy=xGM6nV$3$nDLXtI*EI~e|?sryZr%&j|lvp at 7^9`AS24y9r)A)p|Gz6sJ
z2FeqRav^%j9|awH3 at sMQV1O%XqyL0qs6k7Psqe5WC13&6W2`)QKz`Def$umv$hJx_
zG*ZdH6Xy5RhjbZYt*1(&+75E<iCkr9M>xIMd-P~BoQ_6F4d=?7l at E@-KRh}hDVVtK
z+41*{XFngF>^(yQJ^T6BzcBKP>pnTyKRDhyJ=k}t?<|0lD7Ni}>5<2u1+1j^?crgj
zhNx;@bbC>dqTAO-Y_RiZWmzQ~OdJSnwgWEwIYweTX7pGMxzW-W`4{n(*%!;S=a$J(
ztA4y4q at XSn&q-dgW>4H)A$=8%qdnw(d?ktH1b}CEl0f&i4l)PJ%6Y7j`R+KO&&vEb
zer!jQ=4^LW{Cx&(En}OpzxY=sMKCxa%h+;eUUX$zQ1q&pIGXm))0`9%e4R2#rjFKI
zeK}b5gFw)Q!_F7d-VNI+0Pm<tn3g^p6UZYzcz_%YnnQ1QRsROG3P!eIqL3f#7#e7V
z$d8Vre%F5&N*!CcgeWaDJ^TzlEANAqVf7tc at MIzK9tQXv4%+cs_byFbLiI9)^TL47
z7vr|JQqnPvb&5j$m=3xVNQ6j~ZhiR(o67y+)c~?aQC*L2tw;3&h0oFlG){5jauiRY
zLLQRMpI|hH^z3n-{O<Td7nTC^DP+6=W%#>z7Ib&@)~ZEcjs7z^WPCXIA(4e=DZcR1
z%eSf=mG1=k=ZnbXi=|ej!oaLDkSN(1YghbS$@IvV2Cxkz4N3KYVfNa^Tq<R2nKhAh
zprG2SvvAf}a;ESE-mY|n)uo_^Ka9}RxUppE$IM`93m20l=x~}8W)Lj)s=cUBW_Oi&
zr-E^3p^UKRqosPBMT-?PZS#@SmiQz5P-La1Q&yLvPV-oZd<q(K=3ogk>QF{dS-5jy
zQU=3jgf^474M7yE1|d0E139EkI^xf6P!%EDwEbH!X+0~k&<x_H8RQQkt~U9H5;xP!
zKZ>|>=Mx9z<1;R2 at E=OrbRRzkWl0$O$q)#<PX*nJd6rAFetuaHZ6!Txd=<A5aRLLo
z5i20(Em(<cWjoYSb^C?9KY4Y_Zz!qC6)CPkbE<4EwY=wB3U)qhiUVPnQNJUc*|BOh
zTiETXC^+Ws_*C^_`&Q=&G#`(sSA1BMN?K0yu_*fyxB*E-QL`A#R(K3C(v0J{Kptc7
z`j^3ZGP<wZ3uPVrt2<77 at jR%EgjL(RdO~AIM-Kgp4Ff$}d7wTi$u7RT%9w_YUz=}m
zl7gNptd1KS5572iyuWw4cec`*4&)>+6FLtjJa-1q#5)-ym>l+p`ds`b44{@594H11
z3_BGKL#;{WwFoxcGVB%Ng=(jEm0>x0YuJ5S$u>4#z2atDal<#Un&`jih$NIV{m`sd
zt9C0WO*RmJi!Jr4qSfAAm8Yxl+9AzAdb^0(^MYL at zpf%D7*eITUYiQq?N!)oZ2Ill
zE-IyU;GYA<mvV^y4=Xg=|37MX8VMX8{pN>x{}=fG>$mURy?Zy~|G#r*3-`bLdH=_!
zXGRrRH}(G`)dr1fnCtL-o?l1Lns2Ea?<2||$y~)>tL6{BL>jz%^rF%qi_?z5ogpa>
zL&U(=t$QY7;5P3I*}S*2T}RNs-=o$wjzGh!k-jrT-T#t~4~9&nlo!dV-u&5;K^@|O
zWU#Wj&>{Z5{_xrDOL9S7muM3XeCR7Tb)p}^ZVC5icn3+=HP2gAFo}_#5lv#bN3?;M
zG&ve_tpwh454X+?hujq4cY8P}BR?u~6mvo8^AWQe;@T7B0an+0mq7 at KlaH{xjNrU&
z!BUSCS+B9dn_R+8T;uCg242W{9=Za~5mgU<fsG&jCY-<&fBp4v3Wq?O?ZE*P!84C1
z;{Zo<1xN21siY7b0Th`u<6<~$N4OCIH?Y8WpTseJ$S~L%b1nM}gb+4BG%(;O3Oe1d
z(wo1bE}xLrXJrUGqECCRuByg7$LKcz09(WM7q?fP5&MA2r_>b3G7pU(0Z+Wqtc0M8
z#$?#I7y?OJ1Det0IPUDOiX~i(<}doqJwuou#$DK=u)S<uzUFxu7tSGIG(;S4fr75f
zf?=q2+F*;L;p9j31rB at aT^<EowDMr1`49`fMbhgjPuNe43*#)J7yC~*ex#iSP&~s`
zBpN?~NKD-AF-2qv)b8M#niFJS-Z(){n$8-lB7b{uJrCeDo;*J~g^#_wAOG6?+myu_
zU@&Kvv at j$a6aGs=h=WF>XAa&Xk560ON2^Z&+vpl1b>QM>5@>zP5w-njws`tB8colk
zP)N_nHLNb^is4%Hbv)tC5YoiyWBxK~7F*}%D~LJf0^;>M-8b03<L?mG{|S5yri5l7
zModyvdfULc0v#~<eVzH;LqNj#0^CtI4hbnWDSVnRUv2<v(w(G!i)Dcq4+LeNPbW;Q
zOz(&KZjDwa&0vstqEQM2b at qB)I6Q&}5=jfF(ml~^l at O;0(_y2e5;z08+q5+qjtvzo
zxkL;&1@>25xP@>hoQ%OBF*qxZ>?nE&J0eG-7k_<m3$tAY$3p9~{v~e^!3$p_)8=>J
zf+h~~V39)HN(rI}!vw_`kzu at gM`E225VDSdp)mw<7m;B-MvWmYLK|cr#m16`8BhR;
zW?Ye{+_fNZhk<4N{(98v6GnHCt=#Xv#mow at Q1KsC_F(GWyN&;EqkY6<Aps8lULabC
z!Wt5c at ng2<!hPXCl(pI`!Na$jVRjv??<~Xb?2zpl*(5KNS>5=U at vM|WN<nx%WrU1$
z96$Pf{xZG5 at 4ee)1@}&Y0&t1(R at H~fOOE*rSFvGJK;~GgHPeo3!0tnA&KwggwrVk5
zTSf2>Rvid?d|XGcoJ- at C5`%#NO?Dge&^(ip4D8Xe23g$<I=BtoT|`z&3<Z6cx#6;I
zX5aZ-xRZ2#aL#6wMueubjj#9tWvv6!1B&)eq7ux8n465e(C!%Nq}B9aF7)U$Wy*d0
zd4P5X=lJ&Z*JjAW!uTFwk$?oRb}?(P0Lk)N(FQH`@Yka(h0Wktklxzjzfm9$CObO;
z;k38LxE%--jG2mViaO5R4o=1mF)4I8NpQ{3pxdAJG4tWMMkdG!rXQmNHMHN#Upr&W
z+-(mb^>L4!NP#ruc_nRIKLxEVQ~u{A%QG<FAU+Q))5K}_T&be at T|A9>_1X!S4cMjl
zhfIM%lvN4eH}PFoB=g;^Mpc$_t5CH*W7=4l3f%Ls;S$?SxC)X}%xl}SqTp+bg-Q9$
zAOwpAaLDkwf#Ps3={FC at vtR(xbZQ<%*Kb3CEJWx2%19zd>{Ta)WXJ*r$8rquK^0a=
zhb!iA-;^0wH at v#yq_~#F)OoV7l&0R#6iY3HG&OPU#nKOCG9~R=^&><o0&`Fd at onae
zEG`g4?CLOE1?C#$Q-`t>{V3;|PzP{jX-5z*61~!nLj}^`frmWk2notG?U01rMvC<Q
zu$?WDYRTe<3-Pe40dPYkS_?4+p|fYvEt)q`ur59Zl^3jw4K`wC)D`B)rI|SskQ56c
zmqk5&WoH!SFsB*h8Tw?32+I0g&N}mPZi*2!;BVOJA{^s+vBa1a{4?{t&LHViNl at jK
zehXE_V2Ce0<R4ee at RvyO88pZRORguvY);=FHxUEn_?$YX8Sc!er}+GmF}&D|Km)Re
zp=@w?f;$2ku#OjCgLyz~TCfiQF$WJ53;q6B6arYpnomK$MXX608`gYF`F$;-ev99>
za at _T{4)&>(@TY1SOvLqChM^c85z69#0k0JV{x}dK(r1HE$r^xoyQNrcc at Q_oLP1;y
zAa06<_D at I*f at CSD=*|@Sj_R}Lf~YlbMNzr7g5R?DGCIp!$I0{99+!ujE6-f1MO+2M
ze)@S4TS0~R>DuxYiIe9g9mEe9LjiE at 0leP`YIjO+1<3`&=6khZ+_<v*^pQqwnekX=
zIP7SA{E^V9Kte(`ELsLgLqTN;5++nX+t}H_(8TSk;Zet`1xk-AD at S8Q;3nE*TBequ
zC9PT~Xln_Q+M<TC#4t--INCrL-vgS;6e;Zl6<gK=FYDh0D>H!ER-v7<!Nn|VE8LLk
zlu;@5aUR)og_oi=rRR^lRc;AlyRwGbVqeOVyChFZO#QN$nhtD5t1LlJS7iY~_pKi{
zACb-tjWZ2qtwj_bdW;Vd?AYczx?l8$=TLIQz(WWu2!jUnR%>8ort*~i=Q~r!D#2F4
zmQ!-($a+_eAe<kjv{9<H1$(BB**~WR=%fpqJe*MHffbc1>;|$ONY}7O_7Gml`+_5X
z3~K>GCXLNf&}I9ATfsHm_{=Izp3H;R{Trl?VmZ6$AVOwx>|kcrC=xa^cHHeQHrq1h
z4RdM%Je*hW&G66-;q at W=P)8HX7zYY}NPj~j{A!=)YxuV$53}W>Ai8}#9Uw0-Vc-YD
zUO6tosk7M@`1}c1 at +m*YH!_0L;~`DIRShL|=}XX(xJT5T at nGW|#}G#1Iq|*`!r`v`
z3loHyB3Lf`GDpvRXm}ccCy+M+IJD`0Nn at g~h?BTxQm|$ePIpOJ3-wJS*3-k2xndQ^
zHSW%#L&N2)^SKTXJwe9Z6cUyRIxJn`%klk`hP77?#_Yk(g-5XOGgVx&G_0)F1S;?Y
zqXxF?U at GI0k&zEe<805cFS3eeXEo*<%fBM}Rb)-MU|VU(n+9x&rR8eTMAa?6F&DE9
z12r>&74sac<)^OM4+Q`-6Mojh<7iW4ul}o?MK`PGJ4F$L0<ELOnB7j_?0NOskFcc-
z;7d(#>ITGxR}`}eeoyh*(j|^(*egRt;mU&Z#u4K=#BQx#Qg!BV*wMl%0odV<#Km&1
z(z_k4Dq^b~Gw0&<<Js$;kDFuTqyRK4!XVeILsCQ*{;?SFL@*9H;0Zk#%s}bcSS)q+
zao*w=BRh+_LLpO64xS!7KE+x$>nyXIH~})e%^T<O^^9hX)1BiO9DokWieFfXmWr(=
z)i6DyAOCuAjLS}tX`AWJcFlQE!ozX=z2I0V4&Ji@&WpNnB at 6+whqU7ym&Rc1Kx9c}
zDtj`qatX%oNds;)J(ehBX*82YYl^c3j!=ddS%IIDvcPWi9ns|R?9_=<12S95?Fy)W
zR%qoaKf*ut+r<UN<^-eHo%Lwi>U76E3L))+pzNvKkO7KXF!=k}o;O!CosHNi$=c?O
zGEWCKR*jWa;OoDRrS-mzqRBOv^|jhfS>Lj+AFc&lEj}Lf^yf;ozFkbxG#!>Az0UxL
zCFlj{u4jvM_0WY*$5q}9E5f21?*`|;bA0Ko#}LjOm|%>_N$H4oj4bNHl2SgNF=o=+
zEySg|2~jw1kIaR`;ApX2_HcHLDKBVI<q_b`?5+XA3=<D_M|)MVgKwm^b%^7bHjYeV
zcOf7>8rfoXQw;6TF0^F}$w-pNeOVcM;9BUyU>{72$cO<`jIZYvmn=%Rw6!r0oq{mZ
z=H-hCttZ!zhUUrZ^=Qk0GmbVl8|aC%^jX4<X-QV-$>gq>-uU79uTaR5Q-Gq~5uFnf
zhYtJ025sL4GZPQNcl>bu(Et-HIZ~Y_-(-63Zcr6pJ9b`hSoE;XOhX@>yBG#E!F at CW
zUb7^_nS4)KHVSJu#1hVVDL<uRBlw;l$Sm1gIq!7_guVtNq1}4=o%&$Ac(HjuDs`g=
z^uanj`3T<Fj6X}7v<T%pa8~LD2QCFc;`q9YSQs{wqKd+5B2<EGSMUyjGH+(R8_+*g
zTu+#}n@!+hk&#x7%Lk*~Eozx%!VxDT-65{bGJ|VXmV`^HP$Sndf^exMg!?Ura#EKR
zfmc9M=QeYZn1_ORAv{x{TFujn%}Kv?rWLk@*{zKg4JrZfgA7ALbkkOGOMcpGCA*;6
zU;JxEA<a~I2dS-MJI^73Ilq7%Skh3`oRFQ}*EON%?DvlD^GFeLKo>{5+g%1yftNY_
zItPGg;YbnJrH6yvored3$rSqf>*C>H0e-L(m&r7D>{u{AetgQ0sXD8r;)=_ST}V!u
zy`OY4;rNHTbwON6w%H<g%~)%-|L)%fgjjlT=M5~*REiKYZ50o0p5*x_MiBEd9V~I-
z0&V+amWeYXZ9o*!D|Cir);iXa{uwz>4W?ijV6kw8QcYzh#MxMb4=Uvc53)*_z*lfw
zlq%(oQ^pcT6)}Hg<~B4SEIr(UtSyG~LYGW|W7bEdivU3C&749=T!bVd9Sh?!ScD%t
z7K-u<N>eseu^I+kl>$U2JvV4Gn#<Em5D=ER0Rl&4F-5=(4V|R|1*%wA^y%eMNOx`@
z8 at T99fY$-FvgH-K=O$wF3|c1!2F5be)oA0VpZ_jdokH#26^Ghr#!<?=DjH0ogQygl
z99=p9`fnQ3Csd?zWPsG2GXVL)d`j_}qooMlg|y5=!%d)YGgS#sq<cpBV}(2qq`LJG
zangCAktzZ|J|sf6SQ;(_v(krq0;;uOU8=Cg>q|uNv0#g3jCmUd>q0v-Pc!nxLXsJh
zpZBTP8_esHML%7_^3MEHo&!=c3wrSk7DzYZhCWr>t}20^zE*`~T?(X*KZm~vOlDwH
z*yP7O^*TT1I^IP)EQF!sECa&Mb7lt>j2aOcl=A#$+f47%^nFoNEg1H3f6Uy5Tp8aC
zXL~AO)sA=JPR}AGytQGAhN33LqDu`FO%Kly=M`-r)q at 2Ya+@VDr-|FY!gwIAMkHLj
zDlh;b_G{Y5c@%mh{X{e9>r+mkt73W{GvgpEu1%O2FjZe0m-9QPjABl63L|+a at BDO+
zvB3k>U>_zx8Z8JSmwk$01MUlViMmN-0am#$8^jFke)BEjde4EEE;mQ#Pbo_5W><Sg
z8IKYKq^pA;?oyYg6I0oGl7rU_IIFObte-F>AZ*y7fL at CX)7%!|99#{|q+EgN*FcsN
z;2hXT2x5L+DP0CV29!1e!^C{dNV;HnY}enLS{Xe`<KvW4o;1Eg<S3w%(0F0}qUit{
zmcXa<)>92enxC>dpctY|-?K&>)(`uvv4M`L0$x!>GA>w2C3FSDC-Hg#-B^&b)$GoM
zFLih`y$&FPIY9jsM9b1rHBE}#x+Q0H<>Hefbe|!MW!J|RD$@jfr^dsl;Z!DSpat%Z
zg(pD{azi at X5Kq3u$B+>d9C1k?JoG7&;yNION7Mo1baY4>5HJcm&dZ9-Jcml{cMb+1
zgW5X5qswRr=QplDxx$hDeseHoa3Ys;nF_8BhbP4aME;VyVI5#MBTmtGgv)02ep3wA
zOO~{t9#6;5{gIU%8L~ZdB7szc$+A#7_OYylrZ$o<(bHczuGxhD2V=|GNrgqGPITqE
zS!yxv^e+ZmphpuKg~?gDbrq%r6MCR*!4 at YqHGR<6_?cYJ>K~YkjmQ{&)Js>8gCeP}
zs)1JA(#mVllaXC!(?>BD2s#?fU=w$T99CbBaecf5?~-PIVyH|<QRIq3j85=IdIyOQ
zHCf{NN<0m5P6Y)WrW-alym%WJmxBHzG1K0Lwlb^*>6PTy%x^J)hiLLaVArwMF=Kel
z;nG5JVw|-oO0V#;xC=5tVYu`S^9ettd>`}$UJ>_Fx1dg at 6RyIbSJVVTAQ1g)GxXWQ
zo{W6r(MNWxY^Pbk;F(1y4W)zyaMxx8ZC#z=qzNn at Yp>S61 at F6GJDb5-Cf9h6^PLP@
z)ViQ2lq&KC5C%U|3Jd_M{aOS?OQA1?Bf+=n?#L6#s9CU7 at TG8@PzLLMew^~qKJjQ5
zW)f3Gvy9<!^WRJ=_0piHeL?;TE<4cNZ6vu3H!ufB?fGwwST{$AHS<CC^r#;AbjL^O
z_&Pq#93VYDZJhFmwV`$pC$WEnbEEJU at T!>bD5qd1u4e6+9N|>)?4*S}({(E-WNuu`
z_%VXA63~x%dMBtPibL=l`T&k0(P8DBC9)_49mKM2PTo at Ww&WJPb^XZ3$=OggJ(|_Q
z6qgN~DePj{jBg1%aEf3CtE at 4a1hE5CO^Hti38F&nNSVhx`^eEk9RoZQ{GmgsBgb<*
zKT0TLsnaP~LAjnIRBZS<!J+w!i)-pLxLC4Q13FkpaW)i+Zx6v45-t(s$O9WP%uJ8d
zn?aF7_$E+?i!GwiL@`E5c)TQdgPss`)JSOgt#$!jv%waKtO#PdvZn`4OFTX(U$auh
ztmT%KWSbG_&CnzOzxoim?TMVHwY1??M!eU6H0H<8!4yR1Nh|_TMzmE>Tg!ljxL_l7
zVh1boqf~(aCvf4CXtEWWfwZ!pLm}ctP1}|Wg@>Kvo>S6?P>be-(I&%zG^}X;_%PcP
z^Dbc2zsfE&xAQmsHH~6lm)hqmN36Mxo)Sk3i!9JVUD$Wqc<Kah(0L>#a@)N*VgSDA
zUJP!R17w^boKYrEv_>nrqYc?3T`;BKocAI*qNV0GBL~LZNECqu!__cDdAtlaYFxM^
z6=Z!M-ug$&D$*CKDZ;?yN_R|F&KxY!6FmY)^;^32PCEx=1F3<MK3c^U(D`8GC3)PP
z|4>HZ(xBhMjaktwN=;y+|0rTPAtWLK)BhA!^~XHDSHTS$fqWpDeG at pVriBm*!cdc~
zZ-Sy;5J{7^hclbhow6XnPGdjxIyoyJpCVQ)CpQp2RxQKA0(Wa5`HJ)_PelU|i`8t1
zkZ9!~oYQRV*l8u39pK_l*s<c$VS?&)fJCUf;R<Fr@~OxUzf&pyM{To%Xdly6sUg<;
zw_-poE~Svv$X_U5CH#jGK#vL9vLn7`$vl at T%hMPuyFZp_ch7TrpBvbZkMNxNlo}&@
z&L+*_eigJ!QR=;)CgCJ0m>^r*3 at LNC+*CP$&e9upTXiJvmUJAQ?pp_o2&t(Ach at vj
zEmRf5ag)&+a}nKhWdY%`z)gX&9zR7?s3XNjeG3d(-?|lWl~xFK7yCpol!a3EVmh77
zqEx6x*@^|N*Kgw#W_|k}LbA59F_Wz31y=r-;4w>tvAApRW at 1bSDl5sP{UT}RTM9(v
z%(-iTXM~yn_pF!(dD97O5?ISnxVbA?O5R7<7=$yNp`^9Kl?&m_iR(LqHSCF7o^<x{
zB|lD~5(AB!M;l+sAgg4A@$ZPim=E)jD`|A(pot4{hLK8edm<S#PWsq at Ai_3WqL7s-
zg at e&VWjE{;T2UuvDzn^vrOIOqeWM&aq6DUo1r at 1U`JG@<sgJIZ8O6wIlj-fIn0!rq
zV#S_m&>{Rv1~>bUNs=meiQ-ZWTHDUbx&e{&C3vPfr0QpZ4k?mUz>(lKr5o;MGgr3R
zR&!^(Qu||EoR&I&WsgRrb{DC$5t^~q^1{vz8Q=bLTb*@nUC;{)<csU>z#uzk8-vxF
z1`{!DVBw(t`j-;p{~B1o<)6vrd>s}uN5b^|$$}t?A0T;R%AuWG`5~nO4E&TS at zy=4
zW%~ywkB<)@9mqzKT at FqQc+7*jW-kr$_XSPH*XAZR0$uLvEy{#1EGVXPXVZljs?FC4
zDJQJ1myQW<cMb<gBh+o5p7)MGZ|b!HCBiMTU!g=HXyPO<xBuRMXHCv}mx at Jo@g;6%
zG!&Y~IROL$IsG`K+E&F=Z0 at 4nWrsCnNyoD^Cxqjpi+Q%F@@wec6S17(M8@(4x^<5B
z+2Uj_2~rhwXY|S>2k at OStY?n6V8eB7PPw=uFlw*^0WZ3>AYlHR9d}7fCnJ|Q)9K9r
zpwlh{z>_XGhwA1!=9b=|#(rc@%=l8W$4H%=@vt)Uo|Bcfp3GxUb32;~PRz)(lnZfY
zU5V!?|H&ujV{-^NJ|(RlGuPEpQ&Tf<E4PJvbkKz)_NRR?!-6XaMU>+o!>8h0)2u9O
z?pZ)Xg-=6pB~$9!mx7cCb!A68(?<BtV0RHu_VtwY6G|4|M46UGDd0#>8vBh%dR*Dh
z at Pf9(qy2-QW*!pDaN2!rSC_dMkxXET3aw!N4VR?wJOOF$`$H at cT(7yk5^IYjqF^ll
zXM8OyCA0_lh{`XH51;KF|6J(qVnsu6vk&tEwhZ$LqGSvxPg~aE#|z!`FQ>v9ySDpX
zq)zf2s5$HC%4w?2v=*6m!B~ZdVK%R^!oX`#VA;nbYt=9E!PvuxALfR6+epSOu;DfT
zDv`u(f?qsi9VW at dp*A^p9h7>@lWt77bS+<kH&?jW137tjqiv&@1V&TX*^xL2`DKwm
zDadoDQwX%+2c1`q7-~Pyd8z}&dPan$)5>2#X-8%l3K=hzQWlLDO*PTIS;*YTWNk-;
zckKRjZInI`N1M+ocqPQ*fIfl%*74>Tx3-$1RxDH>s at 4#!><~M=yr~1Czimj2306)g
ze8Ntd_Nxy?P*Tp~D-7ZY+7R+pA3EcazP!dO9AgAlaFf=y8E9Zjs!k&2CxeUQ_ROrv
z(7;a*4r;&y#&DiE<=@T)8T<?n6xy|s%oitw;VqLyXvk0NK`lt)#ytlPVi?Rh2gMu@
zJF{!oY?S^uTeqW|n!AzhV1RR^(l>BJH_JSMg*#CEMTUk|bGlm_90zy!e^^H-sm+fB
zF(5RKp($;qw=#}WeQVyM(0 at d?(~`9GYu065lH0wl6V<V%g(Uo5ftiYS?X_^Pr6u$|
zE#3>>v&hW)G=t5nukFvSukD+xkQR0R4W=T0QX#>lVJIaR^A_(u69Sx-+JS=4q9q=n
zt}vBY1%$*k+Ct_GJZI|K2RA+zCqb!+i3lqTrz5kxo~M7df}a7f!We at B=%H=Z&FOB3
zzFywWiN9_H)5aNW)nSf{f212(ZAP0ldmK}`tHvH^Wwd)?lG)5{Mtd{sj?uMJzhq4k
zIVIZ)yA-*DpSrey6hY;n>uEd-TIQPN!P{kx^i_a4_-2u_n5TZ~$~Uw5A~J=Jm4(Qn
z_a4`!NZ|;htFy1YWKV;>V70+~90tL0V_fmVd~^&<Oa3{YRBk%v9-SGT0pQKrT^O^&
z;dQ at e@<xS~IIS2MCs^tNraM#7MjQ}Pc03|RS8?^cg!?F?^M`c^vO8p8Pl#ZNSlA;n
zi6_l0mH}+0U9=N0H6!M*9R_I|z?U1NG$tP~NNGU-$GbFVm?${;(NTh(-7f=HP&*+#
zOYvIXz- at Joo7%YhILgEj2C9u|rFxzcE~>0O{2YRCN>@Q`I`f!T_CwlA!ElW&Fc!lq
zY{}#7zV?CY_Xbk2+1D1u$vq*KUek>kV}1%T at YCStUfbXDKCASVC^2={U}hfo=K-d6
z<1werK)9D=CM*NbVkM&xV69jN;*tnT)^BJ*23ckg$Z&k7f=0>*H4tOWO-dlSgBpUg
zZNv6pej`%Kwc_d&HRF|?Hgmt?P8Wop*iKP5<{p@>r|8H9(G}H(W|qAbmX&_kqEayh
z_jXt|4L4sHWs%SwRwd}Rr8cE=8<#JX+H}XdZpjV-n*dO|ojW&fNUlq4Fdm_)TBMT>
z4e3G?K{~WMC}0)>wnegm(^6LNprpLd!%`(S#Ca>XqfuOPIM=h<cNXVNAh7E at Q9+kJ
z9?G|tMfoF=c}DL8G6&r+-YR@@y50;&$H8WxRD}zebSoHeS0*=@w$!3kw8*YEW5F#9
zvgVZy2_v!*>=*Iimt>19j=4_X*h7&nLA>y0`%8O{Pe07eCz9Klo2&;&EPdm+C%45E
zzwLA|84ONx$B~L+sfk3^a!@6_*avxybI%fH#!c5l5)7Q at z%iE1Oy%Mi?!to9B|_(g
zmk7D*5>jQyg=K{-f!j(=pVl!86oH*^USPR`R+b=NGDrAlcU^~G(SbYSaCHY(OPnzh
z&~t7-NZB>DaLPVesGk%o8`xt$>kgjr at T36B=?!)+>(Jm|6qMCfMi7gHR8#Yy{Vr4q
zS0k-q$2R~Xk30~X5iJn48|I-%3UrWH7A%KKm&y7qD)~y1GCN&K9{EZ(Saa6w_Jo>k
zmo!Hh?5r?ppNt!Lu5milY5#w$7CR!UNH#$??&z{nNpYvfC((ha41AGF;Uf%#qh6uX
zo4?=QFnnQQ at D%e$8q80*t;y-_%A^u`tX~CEc9H}tje+K<Wv5&r1_85sx76&eru6ZJ
zeNC4x>};wC=aWc>kJ#H(1F5L3?80s*ULu~nU|c*q1p|;Bci^7cVWkVF at jz+&Al%B#
z5+5N?&lVss-0B&ji?K^qZKg`@ybrYl>(ereEOyAa2n5&3xH^R^f%grHvOvb0F%z-S
z3}46J1DV_ziefK<Gd}2n)1)Gn`d|wtmfe%kIDtTRM1Goo0%nH&kQR(23a%TWLDomr
zfc~(D>q$wZBS7rQRvp>na6&StHcPXtO at vUC=V0+g9(OL?qo8?G1t{#j8N%Juo{n%c
zA}`c(EXVh<yWpwD!aPNe7C5c#Tg@~<Fi4+uE{Pi}y0EY1qR-h&qU?9Ws?`K$N>P;j
z-d9$)qPC>VayA`iQv7EkMFoXSdB at AaDJ}O5#CNoCL**`)DH<p}r%QLygXk6xh|>Kt
zXP{6{M~Sqv-_3|!WiSm%?aErK7fH;|GGx|vJegG?oK0rEkHz!1w38z7T{0KPH$XW@
zME4-GPYCCq3l?A-fljHD#EL%S8#e;L$pJNweV{LNfiMY-NqMuES{4mH#i}TaSV0Zb
zNy--~72j!f4rS&HI3;ltSKQi#(o!Rdc&^X>$}yXLQGIAuT-$s@&`qI$VeAG&C<C23
zWbDS!hcCNFnPE-$bkTA^onnR#Sva63e8}t~U^(edcwIuqvAuXOMVWCUDZi91x<{C`
zX0UTonC35gFbCA*b9G8XjmRCl%8sC_Ix>9nH8*zh)D4_8Xhtn;G*Cu-`@t}(#x!r7
z1TwM|&6<ACr$`u~i#AqMcjlH+0ZoK~_Uu~hreZccfDr|59S<O6E0|4RI_}z;2U7b#
z(}WAv4x6}Xr1pCRYA;}|g-QpQ=6Ets;UG8BWe!0*JF+>jT)O4Krn{)5l5 at M)PpwlL
zzNWlyl3I(#;4vvvrQDhJdZcD}0tqW2B9t;GlW`y#m<r*+6^uQ>Eu~})4q8-s*2M+V
zk8lgQnOBr=5_!h3Ps|mY%AEi-JNV3Sy$=s^wIoISy+<dAa1|sZ8T*1 at Qtd%;0(RHC
zU?z$#Wh>=oyLo|h{)N$+u3ly(c0`7;&w-%9A5pS3bTxIRkRqKQjA55IFyh+v*8^T6
z-{E-TU^>PTcPApc2KO~m_oQ&)Jily?MltLUyd)l%fAfegE(n0g#aE<I>fj%Q>hHMK
zi(NH0dsqZ>VU0L)WB3E8+d(lA{EM(xen!GDNG3*#vV22^%K}}GPLF>$2&lhImGU7t
zoz$Ual-J8*RoRIS2h{bXZ?nWG1u`e}ED=iaWI`U7a3|V3I9ZEIFC+Z)CR`^mRok)R
zFSuIToKWEbYOF at lGAC8uL;lTCww7C)a{wSOaQEW{h%T8EF5UH`xj;5c17+pZzgF8Z
zngAks!Q7BRR4+Dwn0(QYxH(Xe6MTGq#rc4Xho`u>bQtkQ4c_w(Kz+IRoylk}^fb6c
zp;>SyEVEc^;ec at 4JL4YJd?nCAbsU`ixg1V=ZN2$iCmk>n14~xz`M9fZ<`9tqE at 5aS
zJz3OJz2Jb-hpm%H?|0d4T_R5tFD7+L50xwY4z*|VNQ#ic<~Qg^-*Lm8$uQ50?lvFc
z)^~dAiY_xZy`~7U3v+PB0*~zZ%y30k#Vl+ZSFL97 at xmNJ=MdM*cjd+^N at 3b|(&<e=
zZejo&t=$KDMn!IBH#f3NA96BpBDsB$^2!|L&K?5VKR;<*#{H(8F>vcEFG*p~><Hw*
znv7c{sqco7vREvv7lmA+PoZ5%nqfrIGM|W`m4k{xdsE!zKCYBUm!oIbdu>?3<yZ$d
zFn>EZJ~@1Tl&d9I5FMSrfc^kQHXH?M3Q5%@t4Mi2{<ZnH=}B{tAk1IxF=^w;n`we4
zyq_slbQH at ORUfgwuUkDI_S(w<h{s)?whtTUqnlL at n`iCf_U+aHLuAZnfsZORE}C=2
zmRIbG6-W%ukYv{6j^!qPhD1~C5ITd3TG0 at w9HNGbNOFTr$&}(J#YKJjgo>XwV$WU{
z>VEHemybP>1ZE4hbxIRxCVmbD^Mo`gRvis>mOqB_g%A|LiVq2DOT{T&Wp-HJ$Q>wt
z(e4}#Ph})iXNk!=RFZJ8uzZAcj#?s^l)t;vF5LEM_zsBi9b59Jkj$wUgI`V|hOkt~
zV(Mnq%o#Bc+n%fCZleg(5)>sONyIrQdhD#*AN6FL^AhtBk09+_oA%V1A2IKFK-c at c
zumsXs0A~K#P}>imipFo(hFk}Q_$u#mQwjmvxtoBbyqCH`i~`#tfncB7fBqN&*Oqj_
zn6QkK!wY7yFYB8NgnW>k#0g2x at Ra0TuJ727B1x%ZL#Vng^-4jW6_3{=cQKG#uwXr~
z#;qojpy-M=lK{N4u2O!txyjp(3<Br^kKV6kGW%KQnDdc;<GDgGQn~5<?ZNwiR2v8h
z9&|@EDmhW;Z9;CyW*dY^(PHPGFn8Y56(DD3lKPK%KY>*tz%r+t8pb&eTKHAKcAW2v
ze0f3V*p!U8)^=J?mg#4rWX{_Fvs|lbYWsN at z%tCA1g?JZ(WSc`FoTDJ*=!T at iC)cU
zjMQ!m%@~x_0fB7Jakp2Yi{Bb!HPpk!@u|riLBNKyJD1+vZXzvQSz~@*cZOYw7x3lP
z%Mrl3^6yOChl8aY2>z8Es60S{7!prCKh2;w@@(`8`)d0jopZx4U2wl#Ab}87QFbql
zpT at TXiawflaX4I}KqSF3DI3}j-2}+t1c8t~HNoQmuDGz6)AF;-rNAIjy%8+uAyNLc
z{1Q0-JpP_Ha at bkGO1YGVgkDR+0I-WUXno4N3GKEkG-CmY8W6CDwT-hE_7NgA^RTtM
zo-isqN;^nAwM{XFIOB!@`XESQ7(x^s9+ at jg?D`BvYHa}yGNotK^kc};(Brf~SJuYV
z{fN*cLbgI_Z0zrO`xPGWCK0)q3W at c*t>_8{3alxu*WCAOFRYTw=q5uU^C+YuO=gEQ
zr12cxWpl#Jks|_uZY-7ttz*yIVJXz?(r6E<m?b<q1SgH*^fMuJVU;%xBkg1oJ^#<B
zf|-WY_prAkpI$N at jfS|kxjPsPF~$xI(s9Me*Tj9bn7BY9Ir;9%H)~zOi9*%pa#JsU
zi?d#Y2w<FDIOO?6xh5XNO(Mo at SKDlV&T;E<xOo7V>LTKRWt(A%0_<_cZgArs3-RMS
z;o!;QYIsm$8lqh!>;=|E4G{(z0Ru?+WhiZj%h*0e&(OPAA)J!9hdl1FxrLhmf)8LJ
zzcxX^rsZABK?yd8L-jCQP1J}!9ybxnsi$ApU~+9WX%55iUIo^mp&Qr?C>jCjquE73
z^OL=&CkG;sDFMkXY(!FewTAr>_yCK%XOR#Rg|1J<1!A3*4K0)x#7^M!mz<q91Z5Ud
zBYwk(ky5}M*&vk}O{N~pXy$Z(+qM_!?g?ql5LEBW%)KfK3P=|R49SkR6E%AY%!Dul
zTd6>`A6I2~>zErQR4NTHH*8=j+uap&wV!|}BWs<JVYtGMG%L*hk`2ztf;VHIf-Sv(
z%7MdcX1?aOWd+Fy2syQWrUp>56NK_z_#%92#t52&Jk2vv>T!NV(Y_zZ><=MVNLI`A
z;nbEw8R-|k=TM}(NGtlW9jc7W-jg)Yg!9!!zs|UdL*r$*5~XXCpXgT5hGsY)0<Xi2
z5;g{VB^!pA*(|QS6CSnJPV0cgcm)Pi{1P*x;)GE+eg0Ugsj>u?kgcFMG6r?s{M51%
zqXSbe^5Xg8*v1LLo_CN2WrE8E;HT5$%2+krHNgr1mpr&_vII<+J+YVkPAnB~tGt3|
zcAhq)9k)E1>J#%rOTiK-yHzt9!YXzP|5K$NYMPuV@`?!N%G++^dgN5MX;wRu3sB7+
zz3*r}vR2#G|JdAW<C+3<u^6|lARYe09lP>(iN54efv%iEU7>_1cIjMGLzd`X(il$B
zh~b%r`0VaIPs5<ynWS;rniX_m3YRB`2T%7;X4(b?FEQEN5A})nlX97X-3kX*-icsR
zV<mV)WY!a=tO;+w at Ics|Lgvzxg91k`3=}dJFd0EPs)YmN at mSwnudj1F77s_*YA`Hb
zuF6f9LQrzPeDQM5Upk-_a$_$^b7{GmHEpy;n(y*F7aDc)(?X3l%W*%ikdsd6Y&Kn9
z4vT>ELxk*d;H^vxr-UPmZT~mW$861)7goQ8$t1K3%ZXdhjoxmib0!#CE6c=}0 at GNb
z at cB(<*?gOsVixed$)tQknJU6I2P-dJGP#)D(5lA=vQh7<4--Ud89SH0feiaCC*&aE
zDCC&FxM)`8`V>s20u%rxk3dhHWKJ)nAKvm7*n<SbF3LVhUNF_U)de`BqRa$!a0Ab<
z-{++Rn11jD5WusaPyXv^<M8Ozy3V49yV31U*oAUx4=Z!I^-VuEPr_VWK{vh3$Yav)
z_Hkh<G0C;VS1_gW(i_voXNS)Y!Zy|;Zs<}iIU>2RP*UKl2%$*E*@Rs#W>Q}dYq{b!
zgpZ}YL4fUMvxJ at QJ$iZ&ot*BS{%{gKJ^asu+4d5dItEGd&CBw#S;NGME!9o$XQ|!6
zytLWHP@`gwc2F-AD9BQdG*Kk-x9T8IJw?vuaPd+Px*6tTXlBIo0No3~EQf1ssfD=I
z39JGb)fq5-0fkHI_lAsXN#gcCDl;g2G9(0zr!<{-oT|8%Yk4|CY~Z|>fA9rv)^fUH
zzGX24&FeA^Me_b;?LH3cxn><RTej_t;~1tECW|Xb<2N0^v>QBk)n`wg*YUL)Ymp(V
zi4ztyQuJND<>%0U9{hY`B at I{h+KXkv1o&{-A;TZ8Q?aR%0&yTJ$|2w5ZBZq;3Zby3
zf!bhHX<>oUYfWSxyrlMZg^bP&d87FSW);M?T{aUswt;*t68a%bfwmoCUPn7rebbG7
zhM4zPNdf6mv-Ns9lF`xBN(j2P)FTS6RZ2UN$)cRzAY-5#jGEPKk!8uJ38b*Yn&^cS
z8{(&A$#$mtaH<w{!Hl!gFCDCnt{of3Gn6cn<S1C!C*0WV86vyd5WHojAo-yuNkLzz
zGFtA^?#wEl?uKngxX%#6*M$Cg5 at Sz;&`JpG02e$(4g3dw&TSzqzjARa0(mqXG^T?t
z;Ht_k10Ft1_m2cLYlxJ5+#JJ_3`sn>hNPNDyqTR!fxt)`1_%MCaYz#lV}BTiqF&KN
zF83&PhCST5NIN$o?3kdik2_+Jam%ON;^3nGLb|`eyos?rV|o2pH0_%-h6 at 4u)zAWR
zPXcEZn{uEia0&)csg-5{a7t?ac%p`LF^zI|U{9v!h(sAr7LDr7(DG0nPX19EAwSB_
zD3vyy>Ri^0r{?s&860QooWITmHn*acO?Jl=&_l%aO}h4c3EMD70r_>lPIv>e!*by|
zy8BMdt-y9Yw;EosXcISnz}})1Q1ltE4woReDJYDsCuzSh;n%7C!Ppow3%CLeJ%O;H
zIUJ{qWD$c(fRJ#h6XOMMKH>srPjWE3B)w5r<1Vff#jR)EL23a4MEIa2QZ)6PBwyet
zlIF4Cr|Pj+<`ydhp)jV2R4ZNLR$tRb-Zxa3(IZ<e;}GNPkfoXZFT=HAqnX-n3Ira7
z49}W#7rMB&>{iU2suFsT1)g1FJI5{Dt=iTtPn|HNq@*`A=UjRrQ-}xMG?J70>CG{d
z<b=kLQ|{u8w8J_k+h%MD at He%+P>V>Qvk84IYUwcvCUS^mu(7xyjwh4mL^lto*i$Hy
z2FC#CM?f*yfxHKby35F+7y$hUDEh6+dtfM{Cx at U1`2qM at Hr>^|es(U2G0GZfz=Mp=
zgBd0?rVB?&Iat{PP7Bznzz~zWk<6$=ftO+}g1aqrc}Svd++{r*$t at f+h8bzv>U75m
zHecb4F}C5gyc2^x;3t at ITj=C0K&RIuMmK&ioW03pyeu4^A)kfM5l)9K3uj)x5PsFf
zR(5Gnb7+0=b}~jB`*Jk8JqHktkICsU2g=J_j2oquI>UrR_HO4`L`K(2b6#hHH5AvZ
z-p%Mrvo2i15^BBmu!Zno3{U)EqaXn%QMrc;VdAk5m|=7Lq}CRFBss$;L&O7gxXcen
zFt^|$b43Z;EjX}y3~_(~ExnJF>Vd{&!66y9+6!H`wu4wRmh$T*e+5jQsXCj({5o@^
z5iQf82!Y{DxPf%=sK5vDBL^g at Xi{a)VX`UzPqvruct$qKVSIZ#bvsJY00teN$Nhhb
zhh7g}+}TWUL-8;V)Q!Z$tvRA^mUtj{*-tS3^FZB{#|^Ca<Z;W_hR5YrJkXv%_5Ufh
zcG6D!f*IqTDl`JS_wR4kDowDex!t5LacSuYAvlgzGDZDs9vBwSaD?C*hGtbGB!sy>
zzs4S<8r`c!|7(hU36ibU9daBH05O3&Fpl!XT#QXu#I}>2D1pW25~juk#s&oc{&PA+
z8Wf0Ho at o_Hi960x&?xv3A9w*b#sv2gl)w8&1z`V0m}@U9mD<;9FV{-nbs>VJd;HTM
z<@7J&#TRE=w2&p!bC|&u>^L6vnyt99`d#JhAM3By%H{9i`Concvi|aA8Q;q5qHt?n
zipGq9Q^<y}EQMsAFx^$er8gO4XQc1}hrsxsK}6hpYeg15(yD>;lw<MS(CV5Zi8Of*
zTasK6o>>XxCG66OA;r?=JfD1QKc(N|@eqf1HP=lF^z8jw1}7f(1bVxx`ge6!H-LeR
zo+HC|j}DJ;iHeMvoC6`?IW*1G{`<l4^CyQ-pT2MXAC68Azdt(IUs#`fXZH1iVOAq`
z#N=D_viz69c`~|RK!-p{c9q=dfe#VPIhOFSv+^lmF$AZqL<*fhu4*v0Gb-CY7FG|&
zenxdm;%xPdj)B_LZo3G&mHuaK)uOR!KZ|Hr%GNhsP79=Tn*!4Ie<`4j6br#xy4(nC
z<Y=`BzCBDLreMF!7PTh5RO7N}{SmD0<+5y)vQLkm7plSJ6}5J{mdK$;KRkU}$e)(C
z_%}`QAcO at F6sFOl(mjUI*M%#+K_o<dE}qEX$dNf7a~8BPGmwQ)_)$ncu0rgN64fIL
zXzHG5Umi>8GVu)|BAGY`3yU{Tfefm{2Icd2hv-_A60HIxWcqw9BL#G`C;OZ-gA0`G
z!BZJ_c%j3s?-4doaNDMy{Y>{qK{F}8gkupbnt+*RP;~_7L1;0f<K<shTnlP{OpUT>
zr{GO4*jY?o)rV^HGM2~`EMG%-K}Z0f`5cVwRw at NXQ7U{jivq5THpW6s8OFk4pXD0?
z19+97L49C at 8bM)&voarZeZk&X at yKyhX5}pPWQrjt31+JpY?hgK>8VWlV;xt^4AL5J
z8_Xd_c3%pL8MuW|vb{0UN%Ofvthwb^xDj at KIfF!)rG_0apLDGLyIfxl)$bHi{gdFC
z9<iBPn~6_QrnnPkyJXKYqFxAm%<BsAjiL^GDK*302kUKorK}}3L$luwrJ-DS1kUCS
z(b()P&xaXimbNzH*5wca03T7rz09X at FiID`uD%?sW~k!EsQ_KhDp at puAP@~&E-0Lm
z+P-(imCUAiA#hX9$&s|+6^S%M8rKnfIumCDHZ7nFaRx<2)vyknS-QxaSqv=mvw=eu
z5YcR+7fe7iQEx8r5sjOr1`*&V&EM%?(({zVj?%w4jE=AZp;)*~EJF#f8si at e>ld>N
zTjnQ?`|qJw)%m;9E?*shv=squ at CpV6sVDU$CT?bk6Jhh*4znSyxP}T&HmulNC7&Ur
z3A=xs;=@If8!M!m)qE*bcwE7xopJ;trr`^$T!>)7rb(S#l48c9EPvCnc?}j&H-fm@
zG$jqRU8LNiLQ}`Wi7m4AnDt<f2tOHM2!9xk18DMFG_fLZ!nC+~0<oM4lOpnLkzG0k
znM{EIaOO=>6R;9zGU{ZypDUp7bB~LF+e`@|EmHW~0t(aqDgqU_b3$mI6hQ%n7CaDu
zFJz?3FUnMMxJ5CR{t%pe-?b`*X5XQ{s=0(v4=#cGE7r}ghXZklma(qj`IQpRW`-y6
zb&(7B5fig$$n0Zb1p9+LhVMB-<5|!({IW at cR=$0>@|n-EQ{Af7>$O|e7&fqOa=8)X
zX0tJ~(tP%zA6{c{=l1Q-_!pn--`n*&cR#Cd-rc&hU9Z=-Z+*5|-)8Y>^Fte6rv4Px
zL(IO<cqiJt@{8WjtNU;K?!mVhVF*e at DfVFqg>5u`J3>?kL_w5X?cR<i3I0j=?+%5h
zc$U73Jlo*p at C1G&;TC)4vq|^!6~t}y9g?Yu94Z~QceEIp3LciNZ|>1fd$+oIyIQ{!
z)o<<G+S<9j{r9MKjf26BNk1xyye4*s1Dbk~r3o3beq%@&P#Ghdt~-t!LnbRM*EV|H
z^Ko;GK%Wg?u7-z_SqZZZV3 at cPmsoTe!;rYOfYF>2Tu9qEKKQR64o*(b$~{~!%IyvO
zz}=()O$$vHytj%5!ViJcZge^6_mWZELJ}{W at 8hxO97rr8p|8l+EXM-~3al@(IOP$-
z<v;WA(bo<gy((xPHd-NzjMgjn;2xfbjNSarqK<j*(Bba|)G<}E2$`B?;V#7qHXZl^
zFyhlmr}~ZLpq2dPKb at Rth*E3Z?BE1;^uzH}2~T3VyD;W6t>u^uE~y7&_)S-sLQWoG
zWfpK~V&yV!wqs-;Gp7%$r@($En#6A>8>Hxc3ujj}e**#19Mbf`7dTLP`tyqe;e_bL
z509Q6K8{wa8yi2~dc3i*f4U$2^w-m8PjP?nW^@9sYE3pa4vto%)yv6bw6n2sb#+y{
zx>XyFFE&n(H{P<nI;)wlRdQl$Qfp7zt7wg{qqqIuAlWSdP``KYp4MAsp&jz*?yAi9
zNVYG+d-tPnAFg8Fj?=I3K;Ezw(Bq-#XAijXVm#RHYPU5UtVWmc%j~Y!Hag8Wd{Dzb
ztKw5Zfj+dVjki at TxRC>ZWo<lZVNSm%BuO6k(2Jo58~Q{Mg at K}pF_?_1lo4-sSHr=S
z1e`ory1QC1sv&{Q;3|!5ACk#6d_?3-Q@@oY7!9fd55A~Y<%^7r--L{CN(&N1bUv#-
z^qXTOyL69KnLZ!3ucKi1(!mMXYNy%n_O2nEk)y7P!~xxoSC^$g()|q_n!ugk^KV2q
z*onT>HP=5sM=b2ccsL!jtG39KZT`;}v8dJKzCKjsF6#kiwoKsY at x83wvNhS;0LOam
zcJ9p;GK*YJb|Plb^Eg=CI`Z+)3()U$*vAml(b9-+hv=LS$C&vTk{WuBl%GB1ksQYX
zQiYAj_=JsbY*ed;9X5nlFo!mD5<TGfa!S<$&V|=9<T)}H84h*oC^~wmD>T;yyT at rr
zItyg4!s#%0AhEA$sLQf(F=|0;g<LLr!^Bqaggs^YQ!6zKr5wQNj*J^LT(wm2A~HN9
znez~WrOsC38p4i at NCDGzk)hB#|NQ)WP{2#jto|<>4 at mV+_o5*qDhV>*2Ww8xIr{(R
z?YrA){eNroc75wl{r`PvebYKBU2d%ZpD=eKve3ZW&aAn=VizUHq9oO_*$lwDjy0aj
zI-|t9gH~^fa0=xpDE9fyK{3a1r*O;f6gKP8=DnTm`p)fo(N2M2W!E4QY88>diUQ7T
zLGMG%wze<1>2Z`q?6WJv-t>SdzLkT<-qWWLd1i;f&4pI0p%->L!QJzJ|IeKHACIwh
zYha*3l at GE5ESmp!Z{JDJ|N7lO=l>tXTJJai3+8T?Ti$cp&fe71Ld`vfpMk~}u|LFK
zUJj;638cmvzZMY?Oy9sZpor$7S<^=9AcnY_76Ow}A!a3=H4VFeh1QO_gxzH!N+x5z
zooe1>VLPZ-a%d+zuv0O4m^Xl=Z6EqRKn8MZj-Z-7|0n0Y2KFuD+WMgBFZRCK>;G2$
zPQ9L;|MkuKpX>i0Ap$<u{LgaB&8NQ@=j5J+7ILHEe6z9Ug{)p+>&s2#*%IWGX1|);
z8f+Kw(yvKlGHi^eyl at xS-3(g1@*}DJn)u0D(5Tvof=RXlvy`6GbJnFq?EZ3A<^?l%
z(Bfo6&C5ux4;QcaTgu#AIbRh5UyuM*r}}h^+aHG5f=;GmoGl-U5vvIu2B*SAW#NNn
z#E4iJu_rOJcL=pgc-vrY^oaw5672A|v{-T5cM%U_+~N}Bt}4n at 77f#H5FaCYPBrgg
zpXc6jTQl+r3VtGPMKbUiqy+AzNN_wJsV5P}+VA320#YDCM3tJ at RMW{}4#Wi>OD#yp
zTSFivZhIOOg6HC*L3`d<3%N2hER=#5Xo7BzRN-(}o`tC%d%5Hz4KsM*U<S`Zm?e+9
zD;hk)J-?t#+&10Qn(#PV>Z1;?sIfci0K at hWJ98Xh<l$V0T}h*!F{HFovj5<@(=m)f
zjEz=~88_SAAus8f!11S8<3K&w1fz6IL&P+Y*+fRP1{@o6s8Y)_g*q63 at BtU+Tl5|}
z9Aw6whQ8YU=<BbUiR_(}Wa$9^cV*YMUdq$`-F1US`C;)=K|%4onWP4$a at dMi#@K5M
zrl6jt?<(51NZLO=w>>#!zqmCihPLQZExmthdR~8Vb6Sq=&1=rNz|GlG_Z!1!*~Fw{
zrjjIdi{uz2y~9p$$R at 4XqmYu>EwV}Z>}Grbt}JhsnP5~>Vv27?SP2p++NoAj3}ZYm
zp7qX3UG=+|0VX^0nZ%oJ<^oHxEyE5oO#T`KHk%oPR2CF^BK>!E?Cg8OjBO`y)>JYr
z!9%L(P<dn1?g4JAx|m$19yM*Su|73XDOw*UOwI7gcM`@}@LVG3Tnhul)~4V?-12B#
z0d(`GVNPR9vKb5}V*S~gg9x|97<mWSiwtslcuPvtWo>cukJG4`nFhdJt`ByS$+XhC
zB1~nRm_Q>pRN#x}1Ds$}Cd4U8%ZfN8j>IY=D&?Lfg at e?<Ff1TpGL|^azl)#`*DRZt
zrXihhoS;ZT<S;`)$R#wKL(O)^GfX*pa(H}l3Q23<*}p0GoqcHkh5+`SoE{uYco?~l
zreiVER<PK%;}-9o2-mOh*o}pj7GN_QUZ&ABk5}unqwaj80o?UyZ-3v$(&q$>DVRG{
zp|wiiQPp8QsVrcYdAN8%bzq7QXgGTJFa**%vmD4MnOw at kFUUKN6^w}wXi5TS3?iy*
z1ZWdG03O7doR(~#*JRj8cg7N><1Tpkhi~L4(LSy);Sbo$4;b%I!OSWDfJDhwRdVAd
zIjs4XJu&(f`oghd+ILvsacP*09N28{DaT$jisc}gn-=7xjnWlrnG(mq6XmX<N7W(w
zC3UmDvR#^tueC)a%(9KIv1deWIQDf_!w at uOLZn|Cy^PbxF}erXXpOG9^tcun2*<-D
zt}KWiEG=OwBEPU`Vkte;9xg4G%U#ML)okozVw;j!26|4Bu=Pz&jg&HD>!hb~!Fpy2
z5(ci<#-+DK5(U>T>jyMZk!Pw=h^Cuhxm*u)E&Em1H at I@Ko}?Eayeev!z-%ugvzj at +
z%t7EFflc%H_?b<BxmnDI{J56*qhL<^`CLq0cH4H&mMH2~z*cMtP2F(Xyf{95hC^Es
zl8%{M1Wa?Jz*^CvCx&}sHI?SHNjslp_J(sQPd<;Y%nJ?#!+SY*a}&h1fG?ixj^xnP
zW=tW`FtPn}YT3fsBQ;38V8nBrCxvpnrMZcU=8cw5)1YA1NU^2njGHl1<&T&z($F6;
zTeKbJrp&QGEEI0-lVWDQu-p;O6n+0m=E>pF{=rY~o((3=<NOHN#p3htKRt9ubd%|!
zH5SbeEtQ`j`n+g{m>LVGh=;IvU2&5{EBz6(L|gg;rip22?s}qS=1dY(;FHXfAC3+Y
z{AZ?#CCk76JejeM at ZxR;H{D<%aa9(qCAM6Cw%9jC^Toc)jBdfAVoNTyu0V9TSz{{}
z&zq8c{hrM37H^>Jh)&7r0ncS_+kA!q;TqtId=dtK^21Z?N`5*uEN&b7Z?+g*G{<ik
zHh0*8+0x{zzT(a035?(C=B{VPDC)&V$z<B;xZ#@Z8n6|DcwxIL&aMQ at iW*-v=X6ll
zwYY3bZ&v|3D%(X(4`#cmDfwW<>A>V~x-OSeA*5BeyF{4ml-e~}BH38x)G^`I%MjI6
zCUJz5QBBTg5`R#fNE{P{XLDfQP1}^@1`c_oIumbRlAi{RBCgN%NB2-3%IwWlSf&Ux
z$;Ezwevg%tLLUfpHvu3Axy^}LLED)F4c2NAD3AJ0_;fOpn at xE2Km9APQ!W^DF`n|!
zt)?r9&Y0ckmE)KkiR}5@!XZz+oHyj at cdTX-%Yz;G?yUR>hXa#XQY~Q=-Z_NW&nyqv
zW{Y^hzRSWOoLuKV$@u5<&(9fri>~94v=}Jll}5TugW0#>W=xfRZ{GPH9v at g2X(6L+
z6?^Y#3m!v!o1RyBn8=Mxuu;XT>2|H$&w54H9M4U?4R9;<<0Ju43=UzK%X+wqh|P?V
z&*>u&;z&?qmqg5?%3qtwBlrsU=xqq&YfDYIU*Y#6(p1^ScWJw0T(;y2eu7AfS;cY|
zQ%-kh_M;)s{@)t(*45S)bT^ord$_NU#x?jl5%k7HHk$Pad4iZ=c5tyFMlK0>Q)#W<
zQXE-9+=?3nK*UI4tM~>h7QXWIOmCPZdI2DlAH(Y>X3)5QPN%DN!OA(8<^>KjrhuK|
zy*<-{v$@{A7^Ey0*DZ`66MEJOpPpmqVc#GDeV$zF)^- at r_j7vA2_|dS6`NNUm-5|m
zpuGUi!dC&E_u;aZnZW8x0HX>*K?RSshaVD8(^6`w-~BODUZ+Q{HCf)Rn>-aW1ld>U
zFXxTBf`NF(*%|8{Hzr;y0LAytPK4K6Fdr2mhxc2+!OmiHG!zUh*D3HHyl-a9KfgFz
zu^eD31o-%l4oAqxJ(z-vkSI}E#h|n7ES`@?Hl~Ul%_HJwM;-%s1B?g>qnMVWL4Gcv
znzVq)yWd6bEL at kM^HPJcfSbmfy7T_CJC_U4f+p~PE|zq5{8!Q%cSn<C<HMtn82@>9
zdpmpX)Bfh`O#IjO?K_D7+WzpS7en|Te*Sau_%mH7t{7kdP{XYKNiDftOj%cA!T4_>
zz&kzuTU%S3+keLYIRbvdFJFGKfplma$>qw*mywC;*O^Z(MN-A;*hAW at -Us~+Dh{H(
zuA^s26%Xy@|M|bVm(Bn8|6W-^rosB|Fa6gDMH~IXUt9jy1)RK56-iTGJ^+NXz3Sgz
zoi(e!;qPYkUgOnQFCUg89#KSY2RVOU?Iy$OH{WdEtJdvu6ulG~{I5u19lVLk{{XDY
zX=)$d_}2+;M>;`3+%#E3sw%`3AOfvA#WktSaado`+RWcF2bEu>>$RvVA-tWa+Kj5)
zdqm~0WGU4LxIq^hHgfuwzuFMwzbgOoQLx-vS<xd_y_f-ixT+VsKi-USJ)A~^SYz=d
zwh*g7eOg9+MAVIr9t;I~jmF?*d7`jz<PX6;6ME2b?XMIVN<apE=x(&-{taAF{W`(Y
z{yKKU&d%2qD+TuhBLb~JkjsRj)6xn<-O>!AjOdiwJTg1RJ6f at fJF0;vLwDq^Asdks
zKqHROTSmj6jffZ|>ljWhy-8d)(0E4yuQDFQxL74&`pKs1>B$$kN}N<AYomRtZM=~8
zHL^n at Iu6lEafBA2p1;B65bbWKqYNVdZh>){SFe!?>mLs{qId8tqGP44-^oy({pjdC
zK+NdyU-<IV>*k=zFZ++4LMh_67vt`m{Wxib-(QS}M3j#tB<U$qEk4)%AfG*h`3CdL
zg^co<OKHd-`@<8tWO}dHL;tjc!YfC5X>>rw<pyMBPTwD-`i?MFsJ7J<o#w=re?qbK
zC+LqvfyL|pIPMRzC+Bn>4||RN&DMURxnTX at yi?EUe_QoickcYT{(qz)o(smW|6f8%
zN{)_#0gtxp+gnW5ajROdSL@$I_3fRlO-a@<=>8h_kg0>!Ph`u$r9@#w|9BR4#>2iy
z|3vJV`_E6J2S}a>ciT@~0!((01ofHw;w&nC$q>SN^lAlCet-pEH&#E;=CotrrkF8$
z06&+>b%elpE;Px*Raen}J9vxeNUTDIKrjz(Nzu36$x5fYvVy&K)a6q4i`4{V`Ct92
zR;sW5vhq3ZsEY8fU{~tm+hiP7+t4YHy{61i=`IzHcirD>*!SZ#1g8}1zj06HK^xcT
zU~@TlkUrtd#q*zfO|=C*WH24weC`wV1 at r$llKy1$|IJ%S3G`?FpHDdM7IeY<&kT5U
zZ+r7L=l-2)eY3iGhsSR>k*Md+-y=8oHG9zP%t4`a;KUN~Ktn0p68%tPG#QaD0>iVV
z7YkKHZb2?Y_o at F;GGt^!7H`qqamJU^+7>-UOn21Mh-2PgHSFw!uOkMeRxMHqQZqoa
zyd<L5n9Auor$$xM$W%qIX61oNQ{zE8Kv3dvN+u1<7DL0Y;}|zRYLXk9LJ8u{mME at Q
zwFzx(ebKbzx3H at h)XdNYD!CE{Iy~+2Q6KvX7`w3ZfcFQQH)s<{!h5{4cqEQ8ujA3g
zU<DZ()kTVa89j!dLrnNgEQJjMb3y4+K)Jdi at OD>MMc&GYLFBHMzFWmGw}*mZi#s5_
zCLp+BEHzN+T&M<SN&aG^hRp<$s6gFU^vDhT-1j!%6tG|n7sKVwLpO$BX+67Ho!Qn`
zX`r&`L8T@^H>8(oIBAAg%=O=*ZhCYIK&4TNd-<j<@*mWw1(Izp at s23l4PDz0j*p)o
zBTKXle-g($%mkkn(+dm-7hj~|uqyJOOrkAe4hsoOw*AV#W^Ci6*;?V0<rZ*XW?VEK
zylH~L0~Q9Sf<-t0W+-2NW&406$h_eJyL at f{H?jG9i at ZG$44V*QeL{V#D`VhIG2!Nf
zXF~#5 at QH1N@($A`h9BuoyuxC3BrDu;R-ddJ6GHjX!S{zp(K|ScV9Kr|WcPj~z1;Z6
z%eDL1ndM%*>vk$%jF2nR?pN>s?yHoVZ<^g6&p<ZVsG#A1Y(~G|FPnC~W2m4j&b*=e
z&P!YAU&b2--#=&xQgZ&%e|yFaBOBZ(;jtsEmE$%SmDK2Tr5XgYHT9sC^2-5yi~sTs
z(I`+(HvU!G*su at RR!QO)urbjbKu<M=c567grWwjwq2>=#?I(PGS!uz_GM at r!NMeJ>
zvNsBaA>3<7$~n=o{TRa;jOL~v&9Wr#622*83_<49xU;0?l%<EA)-mX;bNg->8Ad;&
z5e5c<|8q*LRc8MDdt(ZCMJt#8$M}Ejjfs*oQQhZ_+l_i->+2d~1eR%#`v2_n|MgpU
zao9hV|8whB{m!5E|7A$~!DXt|sQR9t71ZTzq>P?|jwOpW^D9nA;v1ESs0hcx+c1FQ
zMivNdsCN6q)|BVe#f at EKv`7tb2<ntZVeZ~}bd*;;<A5Nx3Ow{BSI_Fzr?+eM+LoSG
zJ%?H93)XysVn`kb^RAXbFdwbv&{(0oQh6kd6dRLsO|yp`v8l^Vx6{FZ%LX?FzO_vr
zt75abP0qkGC$s1QmgpAf>9pArms~S~>vVL1quDg!$K5fOC37&8`BoV?f<qoHBt2k`
zKx#h2>6oBE)M-=56KXa~eP?x{r*Y*#^^RNc5fEb#V;o^{*iy5{<@%bsmgJNJ0yTzK
zLOHn_PJ8W$Sy!8c26sFZ76w|Pn(6;#7dL1PheY&Rz+&8(%TLomk?6AhFgQ>R=Mhc-
z1Bb|vLIIL41FM9-l~FTEuy*U^hQ!qv9f>m8WU0Pq3prXy$5+wwRqSkV{1lzmYzD%Z
zXbPFmoO*(rhQ;2=N=*Jl+b7Xm%Yt{m-wQuhdZA3JdIMM<XAw!{U at 8fdiTi_7D1)g(
zV8$0V!T*bGFU6iYVIJMPbN7zf>es8AcafTXr+#Or{>|T`UfjP2D<1*9r?{v}Wdhho
z0Ma?<<xcbq)}Q`$v)%6wei1|;A0O<U9z^?lI6S#`au6LpiH at G1Mh8C~o}8Yfi$~G^
z!IQloo}NaJ|GIa)_n1d6PYzDGXZ|L7{QT)t0^*MbJe>Dec&gL429w*z=n5S?5Lr;@
z1$%(3NDLd2YZ&IYi8-hWI~Ua&OMid7cXSGjpB_9uU5^frP7aRocOSn`57wg}UVsJ%
z(etBJr)ytDr_Wg#AI6-Pzv~TK&EDlOnS7)kiBBpBBBTr!{sSKUX5$>5LFE2?t)sPK
zhD%SnX2&Wl9`W4&FWvSp;NVH6USE at 8<>gONbBYWsNb3Zn5EcgBlJiTO?C}f3+Gx<I
zY;A7`<;}@=2Jf*fXXuhevH6L6nX-#`N4=8>qw0E$GZ at I>!Cxdruq#8<!UKv?g`Hnp
z;pYF~2-~`Y-DlT_CwtGpsn4Dr9G&i#?G;i9?{mEoYkw40UNG=jw5I(5#;G%0a_qwz
z>EXv{+6&Vh!HU^H!ms^^-MKxR4}?i?P~M<NvASFXCg9r_7PkBd{9_}EKR)Di*l`9v
z<*H1;3_GVQ*;wV}Di^RkXM#Cg#gn?2+h&j|?(6z5!Qid`5{}H=8S_|p5)uVM3VUI(
z9z$IDJ<Y%6OoE<^INa+cXOS)KXV7^UiK8c#Eo8k|Y8FvIF3;udb3f7xr`wW6VLpD-
z>`gJx#FES`B^BKI;^w}{aj4`s5TvXk?Bsh_k)=R-x(?R*#c&n>It1pj6E`!4+_Lrf
zH|HaJMNP6KC;9TqOKu|CWp>_h>!l=EXl40cmi45T?EgHcY at _mr3(bt6vFOPqd$YvM
z+`)gb{{(I+b8L*@)JgGg&I1<XC0W1~R}SbSPY*JyEj#5+ago)2Jm+zZsUcDC%hiA+
zM?Uz$(m2`jH$ci(Sstqlvw5<u|B|AK`>CKkGiI8s{9+%7n6f{#4|BQn*m9_p{kL4+
z1T#cvU?0D%WJ*<e58<TsmtW(oBs8~v73 at izO0=n)jJLl;o!$_hf&7Y_Eqc9l(F|Kz
zd7ROPvdGTmk5gJ{VIdG>5;mb(Ar?{0>BZ^)#>{hrO@<D=RQLlJ$7bq%Z_!aW#!HOo
ze=`*qOFpl9M;@x1h=FXaKVU#HuMdw-MgPRSwO`--5}h6%{cL|;rhbOAcE%QFi2=<{
z(S1X)8_&uQ^Z<DMW|sfQ*sg1%rF=a_=**A*s at Lz_%J_ef|9$(<`yYx(`O%*t{%e|y
z<qQZea_C8*mRO4Yut)dq-oE9m!u5N+sja at ba|`z`7^^U2KZEjBvE^_>-U=+Pw#1li
zpaLSwwyXRP*N-Mw-M8OyCx??o at P4#ns6-brA}1$1C~3VaZF9E4S4TkF*1c$9b;&B-
z>AuBshzs5NINtY0Y>g6iie_o<#JyVgSNhjD(kuv=^vU*KEld+*rY2Gwm&3lEQr<A3
zSv(W63Ja{DHf5|TzUgIdrM=_t|8|DUuW at O5rQ&|Y|HQ>$RrIqJugXdNFZ2~sGx8kh
z=NiGG7YN%Q0vLfZo6(u6`YL*W8!mX;4{q#&iwAavhc5?m3ei at I;0Z!HZJ3G0Kq7~;
zv3|9AfG1zsg>&&pISRp5L&ps>G&WmtI|CUY=%&H031^F$YlhlK5Uu8=i{7;1arzll
z&U!M$`Df$f<m>{n=C at H(TV>QwWfNz!abS`ICA7osO#H4ya5TV3z}!BI*r2Yd%&?mK
z_?4-S$96Dmc4iKVuY}vCW>?xoE<m6t2;>0&?`Y#6mD*QpFE>gXGR|LWFeKasV?^iB
z9VXW>X`+w8b#Xg-7cE=(0x`!~^h5rU6YIFXPMC!EyeX4_HW}2`5V(T*!2mM7UMf#?
zZLfpyyiDE9?I_ at 9P|GmzECkpZ17#TRB|b&?*mzH`XPG<#GP~#=Gf8i`VHXE)pdNAF
zks}NjDtnN#xINHcjtctI0Ku_%eg7RYv?lWEyUDQKL}~=W!zq89)bGV at 2UtdUh)e(#
zdYVq)yIH*=ayaC+(T?A2Fqv;ueGc&z$drGr%Jjyt+G(;IJ<$3Od9@%8Jyq;0u=?jX
zlP+B(c3{g~(crZdw>?GKRZq&Qq$#v5;$HG<D&nz*@vL3^1_AbY$r0y95KwjHb0HI|
zVRo#1uDKB^d?vnQkGpWk=ccQCN5nsu>7peuM|gLi&X3POFL6AO)amQ5<tlrYVTIpU
z at ZZYkE#yv!%?JRHzg{!TfgCC3SO^9KhrqxXlrZeNlP{dTGPs;ujvmV}H8RN98Mfw}
z>pGo~n+Wm?^E=ZR+Tv=cXZa{h9iv%6YF83rHTZ?#J32w~k<1*7YUSVt)W_=0_IDlV
zq7qDu6FDHMqxE@?yE*vNft-{xTq7e~FsKHhha?Y1Wx%9k(*e$4BzE92oMmR-_}jtp
z$>H;(^7_lDOcD5P8BvU-4UT0|`y~iDy!sNd3&#*!4A8*nt&V!Dm}ukHs;o<^m}sjz
z at Z-P1k&AH)|BQO9#g4*H4%`vx38z(h?xJ_O76pxYRsMIB$h2-Yn;REPl^(Y?&d<-6
zEIjIMv|23|&Y^GTEwDCUGtIjK^KeWRnt at uXObR2Jo^!}^fzy%xwS|LRL0_0vQ)j(h
z6`s;-Z5bSkQFesZ;44R3FK8DCNl&X6R_1##xh|`gO}<i#{y+A<y`ilm$#?z at pW;|y
zMk28!gkK2{CpO at OyZEsNCo_w^L?8i*g+wG_n`HL8-`}sQtGmxj2xB|hd##xm>70I4
zS65e8SJxw{QKoxo;?>K_g08tQq9qRg!92V&tZe5AWHZBbGV>7Jn8UiK9TXB~fN`e*
z1bp=3rLq0YaCWh}zQ8(ho%qE|=|wrAFwh&B0y*H_ru-D9JvK)On2cZC_hAsz>);B$
zNAWNRa|Tx0GjJGOmt#a5T1Xs{JsSmFj=8nRujN7o1cK1sdQ(TP7R$Kqd)Tw=ynxnW
zUpBf}miAq-DK;o^F)@jWntTRdZ5o=3G~`)zrpA_W3quiVWJx4bC3&F+ULLEc;_&OF
zR|mH^|3a)5^Cx#?`YuWK{?#13O2A^tw_YD~dXnxMTjtL0#@3S{7}zUpbfnz=VGS{!
zaCoWtN;em8w!rIQtW~+Fka#s|K`5}0+=tK`Z)OjeqJ@@UGN`adeE1|=v<`R{W#&97
z&aIOB7X=^69=2KCpqH=-Bf2*@6rdz~iv+z0S3toRREINu9C3lIKdFg8=JprY2;!f!
z4ZgQ5eqVeszQA?HX{|sCW4VeKGqRvzVHsK7Plm4*4PSi0ECzmg<&a^fbH`XXexSN&
zI`A)tvKX_do4tt>Ih<IxPDb|4Kor*&oPd&@7~oux4imBSvuGhXDzym$GUp5 at Ao=9o
z at 6ntP9i*WfvB&}@<1k?$`9*@$T at UhXI3FYu!3ldkg-4f3F(RJ1IhCHV*NTY}?_g{E
zX90n5MXuhv{p#zl{f|4ZzFup6%RIiEcYjZe>SF=vs8;#=;_c4g7nf51K^SnY-C<-t
zYuJCi6`n4Iuaf^jI^r=GI|r;XvAbsY0)m=VRB{gB_(xfeuwvY-F45S){5|Tx416~-
zm3~$Z&msXcbBZc{Q-=y#vN3Z0jA~(_N}B-esC)}s+jBYU3%d;_jUzb%Nhq-J#<!OT
zEQ5`iz!N=43>l8`Z+gRX3HK1&SHd-eItXl#lzAB%ONcoQ1$|{RP(-LC28_H}(&IZ<
zDK1GrT;of8Zb*DNpr6o<q=+v?GC5ADS&#%~Hx)Y16jZS{idC}JRqYF_r)j}e+#LKm
zytsk<IFMDO!4IzKD{e4sj%E5^YVtLHSaA!NKb>y>4`1I~_tN(Nt$TM666&-6 at 8zhy
zc8T}P|A$CHh|&YWPiP}!EQ9cN_`lkp!<1ig1H%PX5(XnO57)ftTvJVmKop2kqSN#c
zSMDp>abR=;({be&kW!(kK7t+#`a{^%Q$5LeH8)|mkMu%JB0Nsmj}x-l2J6ED-;8oC
z&tJRWn=m_?E>=W!?DteliU5l;hVM;C7L|Bd2}x`5_L4Y7--AcASW4ephOzWg(21kh
z at 6WKgKouOZ6aw=-WH!F(CN3fY9yXbAFZr3?5{%A>urxTge#htBqg_Pb{bx^icK514
z-l!Tfg`nOO7Z8XJg}nTI-GdgkH||jztM1g0(&0}LIHU{J2PX;o<1z*=uj)__u{V*c
za9mqNaLlHQkV%~@C291u4$%x)bo1`26HLCJx8|s7!+u)b5%Sp4PF&=@xC|0*H~?6~
z^<s~3WFJjxq3az9UWwfT2M*W@%RvQBy}tAPoy{HU7xqNiKz|H4Ix3+1iZX8TDIDss
z=BL#(mxQY5o?PwlaE2CWo1Lny4_wV&hZ2s%La!5zcb$qY9)PJMm1(k}TJg7|9&<Q~
z0xaO^c~_^I>ntoN<YYOKgC3V&`(O;qNzCJm=dgGKLT at Zs+nU+3R^<VmLd0^?Xf)xu
z+I=Tsuh5N`gdIsR+7<{xmN!KA(`-xYQ0#*E>U6z_A{zQ3X!lP0RCY2U_he0c+%0sn
zcm!8hzk7G;)dOplR%5XO-w`Z#%<5W2DpbBhz%WQ-vRM)o#86zlvGH_$_g~L86ZVii
zd+~64YaKFNv-$I_^=5NpcO&`dkGqez6Evu)6D2llyWebXK2bMgyYPAY_HE<stp={4
zn!C at N@7P|84Y;p$F_Lw)8=Xm~g5IT506rM66*SZO_S<i at b|pcfWxB+!Rl3L^6TV^Q
z)++tUNLqtu&V5-|t5A8qrmlOf(u3qyNlr%HqqPbq<_Hcnc+$W>6^Raw5~tue&3APz
z+03;7G8jz`;nwrMO-*`}e)oPvS-RAWCpb>O+SGE26(Hwe*tx(Tp%A)A3<qnKz)<0m
z)190QJ8KoPJ`DebGg at 6vR`oDU=kT=($)_Tbz(58lQc0TkR}V(`ckY>U9?I0PwQ9A(
zZ(s9Abh(_=<mQRXgAyryz=U-MQJD*XmuAl3XQ3Q2uJ8!5)Ce@~Dc{bmHi- at Xb;yy0
zf#2VuC+JQ-MO4r*kEQY-51AbMd&?SA<-es{i;GK{_>Zl7w_p<RS^j%(jL%;2J>|bZ
zHhONen|T$R5MI!9XXE6yNN9IVqQbV)J;pUPIQEXHFJeIn4 at 1j!IT4D)1Q#K&Epqux
z%*kZ+RANwme~1v2qXt|w!0;eq(eoc?V)!D8;lhlyApRkc6hoV11DTvHH=EoBjtA$m
z54gAE=J8oyJXez+p1eqYc($D^H5R2;lNM251x8yskQeXW{)V93V-TIzVzPK|`PSm{
zop1juIlMR+PWC4_mZA;Hfz9NHQTrf5gyB*U$(xi;KQR$@4%`SAVl@$Z9&bI_di>(?
zK3$4<(IWYUv1P|);34<oS$K7Lf<32JZ8W$6mj^AT?+f>t!J&u&I5r!Y${)`mT+{u+
z at y0P<Zwys04}{JW>UFu3Qpp}70YrF&gHcVWaa<mcO&VhpXc0`FXw`CvZVm+p?8=V&
z!vhL`P-#HO?aW0T><d{zs-jXM^h?Q#O}ZFm at s07kdZ>zT6UEj*f)dg`*LM9rbeM{9
zyVKJ6_Cm03Ddgj$7SJkWV(Z*!2mQYf?Vu$;CAz&9oE-E;bas$X-9T~>jIBsU&I<*Z
zXATNYoBp>NOJ)7}_9GEM3VQ7h``o<aZr!7(UtcKGF^@l-#1}iy_YpddIb4744N at 6g
z=R<4N&X9 at Qxqwq*Dj&qfkl*Q at m2;!nKr|*CDRILI)w2#q&Z#n>P#68P4{D>O(Zf;y
z2*aqn9El*Ry%OkDmDBcNQ57g?Q((^f)_5TeEawk at spSTgQpInRgSdHBhUFOfzHF8<
zS~#~_#l{4Ybll0nT>(i8Oy5qNrMkm7nH*x&!@2o)q_1_Sp;Q at wlo=G)9FKCkf;Am<
zs!DNBny7}239<d$r2u?Ej<Dl6f|TGXM=sbUFs!;aGxRM_HG;ky?(m%Ia<A$dAqHWW
zg+lu-Gfru_Fy+F>91f$FfSwG{5Mmiu2n=g(9zkbO;P{mHfwk(!&7_k&PX3krxZGPN
zIWd36509B}Se6#jON^k-)zg^hR|asq$E^qsKy!9R+kAHhYlHE!aw&8G)jF^}Iyzjs
z+qw(8lO0erxpM1vW2xn<ZR1{}{upN|Uh~D3eTj8+)UB`M;0CYvWpMGjWRBqNMx8+5
zLX#f!b?A0M3VOo{5<~Q{?&0e-s17K^hhL}dcXb>}){wqi0Q_-x_gNG16nuZrMs37E
zl8&VLbh$-A2{JkG?9cfIy}s2Go?_xVU8BmnBmuSEpU6TWLN{cW6v^H~q at f|Gk|6JQ
zJRBVHY)4hLDZvdGi`l|e@$8BTm(0~~d)W4{kto&6p$mo#i1dJ+6sB~zJ#gWRuX at z|
ze9V=D;HN+4ilpqKRRys^rHvwqU<Dcp6^{K`m at IV_2i>-am-X&%=e;*;m6+-(pbw!z
zJ?a)|O62G$Jag4W)(A)A=C6qHrB88&W_Qiz>W#g1hEv#czjgTt at xFy(2TKW3*97T2
zj-dF{5N+Ic_yijYB7hwk=VN<XrGd8%GbwF|I>LUr-Pd*Y>XlPKG!-iMYdpDtYBGZR
za6C4Ezp|j>$-xj7yUR#&Hey&77*H|$4*2|Jh)Zofo%@R~@CN7{og%W+d(*&f25H`H
z(}Wye#lz8Z at +D8Byk_Jxes~>oJQ^Z8dfkdV!e?V69?40|HAq*11d7yx4q&8!OSt7^
zv2h0`jS%tmZ`2dKa=HLvvC%>SsNkUd`w~6fD*;Dnd^y40bq%_nnErm)e){mi_72jt
z9UWI+?NxU<dKx!WUy<yZhL&dU^td_RS6npC2FKV>2|qv4xMAH3wXX1A{aRQ`W2I9i
z*jhY$m)u$Wdnk5>94nY3_e$Q&Kez6lz0*>fW+y`2Nh_Khm>>W(b)1AI!_!MJbc7XB
ze+w_c6M%exz&`;Dc{PS`vW#sPX3^md6-O|7ghCpxx<|O!S1crmUgM at srfi8*XAt|j
zb|e at 9Y^1WjJ`**quUnh!7Sv=!J*5i|*p=vM3P2x>o(TM3g_>+?W+tb@!}N?zA*XVp
zDJL{PYg5Qc7+FM2(NZ+JA`3F2A<5YDqoV-5E-4U`GDc5I+2%b+S0bdiCqfVb`N0TD
zApNUQlA>*9I?Ceb6Vs8nAVT4Qt$5f!fOQXb$qgq1|KYit^H>C<#0LF3aJ{#^4o%@0
zdnY`UqaU{cT3B<=`4PX at Ql=To`7I#cTa~SgCJuW8b`9P24&Y4UfKeizIvTkExC!&J
zZogADVvST9t*Jot_qwM=P;wL2=Qv@?K(p=t;c;*Y7F&z)UKlMDTeThe6hUDSqyRvA
zNXS0XU<z?Ni`>Hf7S=!$#9YRS6F<;2zIjx-p3dS&&_uoIL3hUDNbwng;phXq^hwcJ
z$X>#8KLO!U9y3t4(CdPu4+6rqV9ZDoq`3~H3Y^Qzi4N{yI^;jzZ^pCJlc8xta)ik|
zCLjoAh0bX5rdN&0E1=QMJH&fN at e4!q6O&L3UF5&n8L+ByTNi5jWzZX_7Y65zAK#=l
z#7D(A5m*{y+9`x)-6}y^oi5_Eu`)k7e%c-BOC6!M1S9IhZa?2vDy`@xEfLL(QF0S9
zBjSU(?_r4;aag&iw?f|NSnE=X?@$NgUfeZip#z~2%klv|9-&r|A8J?`<42B!P}Nkt
z(vlb&pS1^#&hRh-$WKJ^-1-{r!a8~|;mIXK6Hz^!D5AQ$+Ttxk2esOiBOdQIsiV0+
z=P!UyTJha+e5kqVp&BjORVme8Fc8XVhM+n6N(_0{+x^3H at gqnEh(8K%PiWWV{N2V`
zazcZ>Nb7I9c-m4z-{x$A#4?6xm#2x{%Gm1>E_+4;tOfX)c2MjQ4rrUySJKG{2J+Ch
zVj7R3!osuh`5}`)$&HU)<yeFJ5)N+?{2Ls;c`8S6 at 9y!w#C@(IHC63p=j(-+jrdQk
z_OkKsdhM+L at 6qAE;TQAo1Lzz6-R_^Av=<hn;CBn(&C|5UEY$H$8tjh6Nr;rij~kB+
zBen1dhNy9CR&VcaFh^olxbre-dg^^dG%O-P{i|pF>at((e9X^0&XU03T5>m%B=i-e
zP#7RZVhkT^Q=`LaP2IXmQ^eS`#+I(qm|%WdYptuah6$b4)@)6=OS(MfT{gE`RTT!H
zk?IR|0yEkKTOZ-nP0JfvyQDKcJ1W|{18N9-+-A;C>*YWy4 at q5(uod6Jokh_jgJnXJ
zf!T8;Kgc4<Q0Kigb^2!9m#;nj at 7;szE_+e{+zRki-g<?rWypH`BvGv;|2%$r%RS{Y
zp=iCzP=54Wm<3bp!LkRMXmIfm7Ma{gT-Korgw3?STNT$rB&#!ylVwOOo-ZxdGFHWy
zl<_dJhAIRi&6;rGxer~_KHx;w;sF%hNHU;16s!WbISS6k+urM*DdFbj2W}R%xFVL*
zgT4ocbaT}gAToCuvk!v%W`TEn2oa`@%e1?O%+<xJedCBMo-EHys;k_y5TzbgL2DI&
zU7@*H^cp%?v!dFFkuNv<UvjLHtz0|f^$ZNG#BB&BN(gMq7N at k%UDEZfc2?ujp;&B5
zqf^v(>?y6jJJ>(z_F;fCIIaM{IJLnZt_2$~QGn at pq@-S}q(%W?X{MEX+RR{~+0HyL
zw3z(^CbZ#gE1DR26Y6RZ<(D!LnVCNoH at wHc95+8>7#=11<5EmCNkI1*k3~Q6^4;i-
zH3_uin6|vKE0P*+u4Y#(sVQS^I;B-pR1OFUE4IQ=zoRExnbbW+Ra0eTZc!Eo3taC(
zlF<jDBZJ45JGzydL#|CPZWy<hyeo8=L67`H!olua^|#2*CKK|n(X>py433kZF~p2n
zur!tuD_mm`-kdB;?8-y!S^0#2ScL$IqF5He(o+|_t3x!!FJ1dhKpR!#C9;zQ#ex|Y
z;yp+i19v!bhA$d;oSBy(_W2+Ko(lul8N}LTCBjEFrg_wEM!q8x)o#g4YsTZ$mL+r7
zj)`z)4Y&~|HV_D4!dXcf6KZQ_+UNl#Ra6i?xql80K-}f_>gX0fRSQ!k%UM=OgmUS<
zF}-^S at AQssR0aLWFdfCRzj(ntcl#x;TOk{!CQrlwD8I&F?`pO08nLx>)ya{g<=D at U
zYi%0lC&Sk?<c%=y&6xJ8VuU0m64-$odgIZlRlUS&L#{;Zqq6&}F3-l4Wi3wAN5gp(
zp|3%jf1nw})!<q#eC=5WFK!$c(Q#Xc86-v|&Zbc+VkM+(1*kSph>VTkuL<*r)(w(Y
zb1l&E?(-L$wg8N at 9YYATCS!2hs5YOm6Gq+y!jAl5#!akpwAO4om9toZY13(a#q%jX
z4Po;9lEk7g at h*OrZr+T3;|7(_vPCy;;hTmc!%eD9sN}|C?*@s+eY48S6aC;|UYx;Z
zgb-mqS!}2+a;8$?xsDpx!BomU9+Gv^NCP2~cy(#yl%-F)9>Asp&KxLwj7)FWq2bY}
z4bvc;;kgK4$TcG8l_sxB#empTGQLNIENzcLy3WYQW=L?(?J|qeY1E6^KmZFzyt133
zGvy5?W$r^?Ie0xgVWT^7o370}Na0L0|GImTtRY_&2+!b6QPh;(M4)1QA^Mnd at jYT=
zY%fE7saB`cex6XV;}dgP`n{ACce^8Gk$`oTr9c;RS!jjE!n!g9Q791|4UuPk<Qcz-
z5 at Mb2rq`ZvM>P-`@t|l?IO%}8Mfl`$U0~aVZi%-p$Y2Tk1T~sf*9Qa87K)m;K_JvR
zscqWIW~sZdVHoAA at rBAS8Mdv>@3ST}PJv8JD#>c)oH#;e<t*z^X|Kxq`;-VHGf$y3
zzQCek)2ULrS_;niu6(xN`hBOifU_ErSkzc7D9y8D?S!z(Pca`=M0(+tKxPL+&yvhI
zWGp~;LLq2b)`pBoi)ueClN(S$#mk45YgI-TA9O_?EF!uAtzI1Ei9qV;#|a9;6lWx{
zAXGqe$#H}OhikM4Gtpu`dxV2CoH3PlUEjr&$CpBR;I-lnCmKfz3**B!j!$cdjCPLj
zB7X=DWRrCI9hm at -!T}uRGSlUlvQnKdQbu!}S0mBbJ1 at i5k{aio8>x;fUNm5m3ywty
zxnU$XpvaK180;xhNFW$C82P3H1rg$Lpn+G_#6jqX>W~n(;MROjr00-LBf`)&@ePZs
zqq{f3kkBl4B!V3&e8R>|x6+dce%O)e!okako7DVWKu>jwi#i|PgnKPY?<21iY8nj~
zS=p&bTv^dpx)cJw71VVQ8s+-_0ffYbBlq<1VdBpz)<y)yH5DLYKp|Xu8QP4O(Y)G@
zQyK&r({3BLG695y?)R;_)t8BL6}bMHHN#D|u6I}0nGkE=WtEk$3n_`cci<gv2Y0<Q
zby~cChc!TO_?ZtNWrvS_TWyN5`IFAF?*)SyC2iDP^`>w*#g}$wn|!8YPxUE8C<R=G
z#+Oz0f&+p?JnW9GJl6u=#jDjJ7<|YVg4s5#wmZXfIDpv05}Z at z2m)GQ93PNHLBmLE
zblI$H-Q>HZN`6#D@~WyN6;8n!sVzG_*m;}!Ty!Ov-^@ff>uV*Lc<tMQ)fq10^C@{i
zma3c_>9=U>q-<T<d(#XDK5utdsm86DS(a$FVzffZH>p+y>G?w<zT1=)tx@!tU!ZQ0
zv8vS-nq*-f#?nL^q+(RiC8Yv!T$lApVdg8q*-ACe0{l2KH1d93ScnBRmoZp{7Iiej
zH}*-b7oqDJT0^;lrr4xxcpSc+Q-L_eRKZG4!w}J|z2IM5sqWwmCyGP(eMl at o#QBk}
zDK5wFsot at AIcvpSN4OF)4L7nA6*pOM$;a2a9b3WlFV2iZdcb;ij#<?}&5<KOs_a$g
zUsqo-rqG)Va}3iJdf{wL>!Qm33h^LVDB`iK5e62%T}qwJuaeEvGeon{?Zp{FvpIfj
z(0S at uD4L5|2W!p3U!!0~1N2rdvo`5W1b!~7E#}D)LHe2zSr=lIj0A+2g+pO5Zi>H`
zvr?0MjP03Jqll#?W^^fMg<KC)#g}Zw0^Vqh1$@#7%lM)m;lxJ~<mrAvHe>t_Jb?EP
z{*48kLoC91G^CgnM8Z!^3@)Tx^DFrSy~_{cZA9 at d1){`r%a=L0Ks>7m8Y}UW!V+FO
z;OzYdj^@jW1fr!clw$y#GzfB at eC&C2%tU}fZu^Iks}+LSW$p+a_pe|b?8u?RB2L-u
z=~qnw<mG%1cv)N#ILfw)xGUK+4srgW8f83sWAma5D_UA?jHB at o$kNA*B0OJoX3*mf
z8sc;z-670FAgeFn7W6CLx7Wc at z=(hn0~ayU3V>zzVQ)ioS#dE7Co9-$ig{n<C5a@$
z?H*7Bmja5Ojum2UDG{*^e!|KQ->hw&ZpFhUOmc8i(9=?WLJB55wC<QgJQaXKcAqfr
z!)c>7h>AvAG&*MnYSpS5U_{2F!!Kha at aTdY9-^|?c{ja`Z~|gvO~z2c5|f}3i=vxC
zF$sAM*S_QSnO9j}iQyFLvFKw)h}=1KT>A&-*eGIt5NR=WWD!PFv>@n>gfvc%Y(?=2
zTu;n7Q3&1aNzfeB59Ff+qyJ_IkNj$Yz}w-jj(+ewmg2OB%aPIWG+_iJ<GF?>WtxDj
z58rS-nMwufmC*oBu-bq`D($kCSc6_5-ev{vJYR88nU5$^8K6}nDnaoC7kdP&<8AIZ
z)xt7l1t0`7$d|>9AqJLffxb&Th%m!7>=Iz{(ZSJdh~Peq)WjCx?!===QZH_b?~oZ=
zM}*eQ7q<gv&*+B?SnSQp8iMFTQ?#4VtpI622pXvHPNveVh|WSB(ZIopDiSa{F2R+!
zJGy~kSWxJ{?w(B`C#Drcwtebf(M)l6m=;{;2NmKS5$||Zz|7YWKzuw|nEOK(|9l&C
zg4=iG0>Ew$CMqwLz_4_ukaoL>n&;ny=9bwU`i!_;EO))xbGaE}VwvYtG-1b8z6(rI
z4dI~OV%12jVJS6RBVvmzx-gPGR9k$-##8aX^l1bm8{?-yYSumiWfb(p5f-&i$8u0B
ztRv0Q+jX4XdbM-?mlF`cE^rnv1wP=++AAFn#qPZA+D9Bm4LvS6Z+9I);AaNy72vle
z_t6J|ED0c<O91Bph`V_y4MHXtC_L8KP}7sl;(2tiY;=mSwuQA^p>Zict at X^BG7$MU
z4JL<I(opV1dxg1Fex8}hQv1q}NTZj`@})!40{U-|b5gspH+nL631jiujaYBCA^4#n
zJxREidHV$02lAUWuC!@XmDFVSMcNCd1DCDRu6HMI<(@d6W%;iA1hz0aB{CqSJSjG;
z@|F+g<e>7I>z#ow(i>NygvAg9`-TS`VQFXK_9FbTmbon$+jkd-=2l>qRMtk;h{_db
zYWYD&44Ir^79{J{X7o7Riv}T1a7*<uH?wGoxJDyGF8KHO8)l+1UxJs1`66<$!bCSV
z7p|h3UF9A}J at QhZq`lV6?PaXH2!xU at SC|>6yIDvHrup%?QhAW7t1;Aqg$HtBKVDuf
z9HvcsZuF(l8q$m?B7-#!NnY#x2ASBe!qg!{j*)N!Jbdj#Fo`I}+!@YQ-V_Ph+ef2!
zTgBI0pom4y^`84oU~Ws*w20<)-bs&oV!nu|BDevR1Cd{vrNT5$QM@&W^>HKFr8q9a
zH7 at OO^$$ss`Kb65yhj2Y$e3skQY^dbP){LI^XS%R{2ww8ee4*JinO@=Ivp1`QniSJ
zRhW6QCHt+mg%pGX_p`H#XOXE{EG$avUpqHoiR-}1tJ(B<Tq5HFjz#_Mn=ZnGcaPfV
z{Rxknd6;|+1&)1*qn56a=~ZytM1D27fq-RnWXew4a(}WlEm=8B)p6~k?^6}~$y9|0
z;tMf>KQ;)+HZs^6lqd57DfunFJ78k&TSokmn#mn$*-(mQ_ at -Z+G184)_oynutzcWg
zo~w%kCwK~VIX*(ED;zOzH#Vw`N|?H<bEaE>(1H}!2chlvVg8tKMBRuk6#T6PO at X85
zk=%j>ymu?@Pr;?GB`k(gNg)>WUFdp?I^o+OGU95FM<X!|DC#iPmc$(@ZA$hkcw;bj
zn5|8}Ewdf_c-VZYz{*)B2vOmicXcA)iT7Go(BqdNGksvu7rvYHOV%_}p+h29m4<^+
zmjq%LXHJko at Ic`9WG4TjR%0RfrLd5a4j&*1q1rD%8>FrrZmB>StF4L>9i+&9W6B^*
z{5ZJe!cthR+7~P41R^qX_b>*uhtRG>M1BauZK4_uYQ&TM9Sz-CGz&)sK>v*h(zpSR
zor0G<ZCXWzUALeTvuMv-LTiG;3~jMRCDll{vTpcymaek<u*MLwd60=H8hRi->(F)P
zEk5lz|CS!2b;*<xUOd546#nRDX71_Bh!BXUp*bx+<+iYbG(u|?t2XnD7a;k)=9!g>
zCh`w2ti~APcZWfNxND$yJ4NVc@%$7_B?f`#vf2Kaz~#n0jbilOs&D}1JXfB`56N&!
z3E1r)r4$?uK#S(-(450QG4phi<`hO*1~6A%wVchTcPmnAkP65gu?O-{h;2W+QL!vP
zZt_(Uj5#GMm2pB=e6NKXD!RRXc3#e^{IK7G#V%1X2{QM5r_f^hT_ihl60m3RsiICl
zRfZnzQ~z~qNT-TS!@iYq4Xd2z9{x?%Y|mcAe~Y;r2RdzH;}$*!<T)0 at 4ySTO7T|19
z$xkiibOxCxZPw>UDK7|%DcN0%r2q9KBRw;GY8j#A3j8l34 at K)=kSI7A?rzu3e!*1+
z3l*;uC0^ZO98X$p;tQ-GisaRNBaX#2b-5PR$!s~H39FiREex=__mSEtt6a*LQ1x1&
zV#yVbMKSZG(7i){?eoN%_C1rsa3dTKw1gKBXKk3-TSlSjb(nN_`~J+Kp;s!wfx|Uh
zpzX3Zc1)J(3ujk(oz-*gK*LI{4D|L)(xX$HwIQIM0E&r}ZX%}uF_v!yFV{j?uTBqP
z4FrXQZ4eB`N*L1FE4*Wm3uzezIiW3ra{-lkg_q$98X*m(oMzIFof&_$BLr*2)xKh8
zA6`G06if6WsUz4NKZ4k(OC0+w!3<xE5<Awos5&LZ%k@$9VSo7cs5d_0gaCigvQ!aJ
zOdb&u_h?7Hi305GWYmTUI>YOVRtVW!Mi*G7xct^cLkM~deOmN!Jv|zZ;J~o6vrS{9
zfd(*Uck&#M`Tge*3mDi(@pI-NQDQ-Vp(4Y1<7Qo7hX5~VLs)q+1f)DhgQ07Aq6WC^
zl#idCoNeK01_tEPMh*IGNF-nyxV!3bCGrhi+M~-~!n`;GB#k0nS-<Ni$IsmBOy8VC
zDJoc&szimU7I49TLKUf{b{9K-<o`jYc`Pd2e846J$zU|+$(VXrM*61`RFeqxFVNo<
z$REhi`$GgiWozxhMe_J!=RdbG7j)7guu|l~=%9y`Iirgm|9tDnqW25xpez~S0d%#w
zR-i~lhA(zOoajI`$rXKk8q*<s-bJXNzIH*jNszYL*t#^KulX<{s!^s6BlZ9Q!f^&G
z6v&k^UAcr?1`EZ_V#1Pc9r;tZ?!ohx_>JNDDSG at PrnWy+a}gcCRFaU=AS+3O283|F
ziFoA_NaT=SSDByHb!WdwQx?Zu$xslXXk1O#tUi;}^RR9a0zo3Gu!N|1m&|T$MJ)|V
zMn`R|MG{YM^0Eqx9oH<#k8P+EiP8rqEw%W)T<(McGFF!zhb%%kXk-|~wK#T^25LQr
z2&sI`to=wR#_zKi8 at iRCit%+Tc=^Vlef^cU1qb0L*%agg23IY*;!}EmQnfsOEVILs
ze1tf~*c7NL)oT^uI5?B?!V-)d%gowx`ESn<Hy#z;-oVRbIw-Lzu(~sl9B39>QSX?4
z7`L*zkfC?mz_=UH=XfS~AEGo{1W$lH6G+{_imx_sS$)Vn*}`E_=6nn~M2Z4N&UV)=
z60rx#ZmzH>wI at f^a(j|lDpfE}rZyDQG)CPf?VpMJa{-h$rR=Gs!eOosa%t>TOpyR?
zmYOrn0`6)W$x}F|jwF6P3$D@&?7m at s6<J{MQ*YV0()G2A7K7+ijnj+qZ+#}>X`=Ba
zu7xlZtA&|%13Pfj at j>{2MfCrqGNSABQeIGg^F+q>Ckl`@fKS3IR8Fvo0<U();ap at Y
zAPg=f8UXg=AtQ<Ng(LKsY!Nr_#OFR5U$XUYsIJEn4YEo1XkAkeMo+AelP(NC_E4gl
zs6Kduz<y*$t~E%s#k|MH1n~xPhcFg<wCSIS+W{k1Iip~Pje=44po3^oh{dPAn0jb+
zNowfo<yJF_Flvp2^X*6?8=Qv;yW at V4O+;vwMmcJ2ungeMcaYT}Ln4 at h1SOGNfp1uE
zi%`kyXY$rR6Y&j44UPMNiymu0qA_H!3dy5OPN41X56`*)HiNs&&q!>^Q&CQEiR2WD
zmCP4Q$+4g&-~|JRXydZQCP-unmsXKt)Nhr1lH!$BW<iqV2Vq^Dbs!5_$1q`^=yV(U
zyOeqTiR>wY@{@3=A2yODF*dVRP162hW67^_{<brM-+!eRRv&VW;o#zP!lP_v<y}y^
zrihYTbLE5{P>>Y?GW5-TdJF>(rVI*|ZZZoppGq<$0K~(c`YwsAMNtK|`#k%B{yV+S
z;AM3Jr=N+ap at kbaoZ#adC5EC#XvU4 at p@%(0uT{3n5{|z^q=PjMOOTu37~zW0O6Iux
zL6*?tt;d^?GZ5SrOQ?y{F06yFT4OIQIX9Y={{fE!*6XF~=r1b-_z`@PHTDd4TI~U?
zI)6K7Q~@_xTp0h!2S4iMZ9L=?&G&5ciSs3*WWsikk|TGvDN2dQ?RUsffb3b07HCP3
z?E_`_h(~OIbRhus+^K~A3*`E)er{`WOZx?u4v7yw6fpbZ1|uXW>-- at ME5}{FWiMqV
zof_eQg(35BSmoM-XB&^~#43wN3?$e(UO2Jl8P?Q}8>|UGTxU{L_F$CN69KnHtVJrC
z<ou!v4auLT`XgDLrLqs&vCi^hPdP^`T&tHbH)vem^qA*81S<22g?<lN)C=Z7V=a#u
z8qp{mQSTuJIPx>f;0cC!C6dO7?7^&SWFw8_Uv|O**%>b(s=A&CMMMBS_EA$fsN at fp
zL}`lBD8(dMAnPilRNj|7?BWR58^TCm%oWLrEjHsg!)JL6{UFTp{H#B0cbalRV8hZN
zL?20Gq8(n!Apb-`!$J5-7~l&*ztgQ^n-b<A&o+9ZEX5zFyt#qNrYX^)WGD9Wse&uM
zxlT40fi){WJ07*eNc*bFb=~nvt~2dI<y~y>;0^FtB$0?t#_4i1%R2Kj63`VyB{J(9
zyfwSdH$~YS6+nhB$P-imTYma8q_l!Tv0KC#3RYtz`xI(gK7eA;Ez?i3K(w#Y1%l%z
z0 at fb@DVbnGf6j_wuoltaU*p<|7w|U_0>ll=M at h0vHR?t9akqx?{b%}GOd&~MeY#e~
z6wzOJvbAuHJAXnKa9JRT=maa%*T|aiS~xk^qiq=cE)T`$KKz2Zf7Fpp{;YGfFFOZc
zB8kQM>A;u8y)Ld#k*PQocbg6ii^^l8JGemP1g{4N2X+Dc03Z!@US}~v%sF4Zj<;iZ
ztw~@RykuX^%VUEWzJ=wBdGe*J(TP6W$4r<P6TsJE5ENSp<ziA{hAdfZs%N!s3|GhO
zl%Ft3;TvzbfJGi$bd at M;^Jrr|<90%tIQEPucGV-!$-wxJ?ioZbs&rLTsszNnc62^q
zj=?f6s_jxSz}d6E&!{K>pN8xNtyH#2(P?YqLR_POcZq?yNMQ~a(|a2uUz6UnhHpFa
z>?8EK?(bSfwW|az*RLAXPcZnF>=!e^TUmZp^xag|)8z1swm2~Dz)ceByD7nAHs*#<
zq999YL7YyDwfwP at KYr#ZwW#DxQD}?axknJj=VzRuZYMw?FWHEe%ALU-u<Oom-UbOt
zkd at 4xUZL=5Xzg)Sny|-ofErWIDGzXaiNlbEf#kIayWmBl$9krWhKdX*a)9d<Br8)B
z&%e50_>FuB<0wHrjwX^i%n7*?nv%7kQV at Y;J0e}+me+WCo30&b`HU#wfU+BFQ~qHA
z`{wO_nqAG*1<Lt4#oav}K%rqLL?KTw4z at qUi~Y`lbj2`sa@)j14#aLN4}lw3yvPfw
zSx{MBjzw~#l$I#m=zh|;gX+8_0zBA=t_b!7{fC4l#MdXhR!4*8-{=)4C{CXvQd#kk
zB2fqEW-?}yy3C9FZ9ioil at G<0AjqMFOaOy^4bO4yrao*}>k%iG@%SzFJr2!v%}4zC
z%<LAhe+hVwAI=B|TJViuiUpf48Bx3Qh89V%FY(vcXzR4CQyq0L2QysF at vP7LgHvp@
z+y at 3CRBKFXnQr)$N&G`@9(qA})a&=r1E!2BbRO_&O_0COb40O&pc|M at B?{t07oR8l
z9a)R6ln`Xu@`@`KqeZO=c%@m|5nf)u6IvQrL&IbIazB2SjTCf^Tw8K#(aG23RWMgT
z$t;m&1`-_^Y~iGK^#U1@;rI010FA31r$La;PzZEt0iYWap>LDH&9T(AeTm3Jdno<6
z&v_2Qk{7izV0zmGUjWv&P8ugX4>}#`i>TfaNnyNiavi1gOYImUzJsAe8DB85AH#})
z{goa#OdkAm&KL0i#;m;Q9g9-p8i$N4NR8l~*b<OU*peLSnmL+0A}ww64WGdAR+xic
z_v;<JT}|>n3w$BkP9Uqu{ao)<w3X#*J?GCGRRyz|z*jZ}#m2*3_Xx{Q&dAY*Vq8%+
zF;-1#yaWtBu}=FAegw%=9A&`^yQ2kkF$FNEY=w4<P5L%6aP6pOe<-`sj)u1pb(pFA
zVSVOXQY~)p=m;`6Z4ub8m`Y?hh2y8nj;Hi51!e$24syhgpl#;<MU#AvJPJDV1b5IK
zlcS`tAW&@6!<LV&k~@k*HaLV8Vh1DUJ`$QL88dC0Xl*7Jw%b^$jzYlivxbKxaw(dY
zUZzj0i?X0B(EOgAq#JeTI2i{Nk(~6XRfF`B>wSvMYvgX-JL4aA<6gOrx1qeB(m798
zWbCd!K!62NTf&WXMlirZUVF;!Ge8okGY`v#QEnMDR at uvxnBl;`E`!cdIYkQ&wfv6I
z72K5c8Oa%PEYME!1guFIS45A`^qrQB at n_f8ltg_++ZWFfoNNTS2*M)j6!3)1mKg2a
z(P)pzFSA;{^>e7iPjM+B3h?$BGR?zGRs?1&CeP|s?*1S;Zmh6yN%>Kg+wAEtypalc
zpG2>{;Vf;?qe`P929f;So89(-u4_KS4-f-(NSv5D%8npoi$IQD0V*Reu%Wag{nK_2
zDd$gAnINt2+u9pvo->}=dG?{jJkCBp8};76L>$*YnO1P^#0;I}GxDb7{G1)R0hJ!R
z at sU|aAGPAf-#MUi at BEN<x&|qq!Pd at Ug}<=24o{*7u&mJwEgjvAW56t`jb)fTOqo8K
zW$vuL1ATJP&%+)8F7LxQ<fj~rZ6JK2ca`#_WE5VE11AFnayAv=4Is;ptw?4Y!_24e
z3OX}%IRRpVinfe$_NP6ijxE*olOZqjxH$)|OQr<Yi$nD555nbW%JqrZoOJaU=5q?)
zCt-B7f5YwtPleHFsK&>e{Kn_KLoV+~Sfc7hV55K}6)X{;SS}W9vu?%sUdZ+2wwNtH
z#t&Y)U(y$V^VL9UMZ0;b8%RA8R>avFC)MX&v26Yk(N?xjMbIrAQ>xzdj-G^VUIIS~
zQaGgW;$gcOhi-p}C52k|xFIWiK|CQ8#RR|&i+E+ at vXJ?O`RdE`pU)sHBFZIAKhy{y
z4Pba(h;@Swn}xMv(82A9dk54=urctg`&uBEb0LS&G#lE{h(_2~<-kZ*#Bd+vdQhzM
zT2-nwl83;Li(Mq!vb-kP@*YUW$rks)eyjc<{L749G6A(IK70(FhjiEd3o|hX;3wf?
z8}1AUDI6X}2(ijl;x>Etj!%BX28Jz*WbDdOwF|<wxkDkh=8zA#_d6|@<pd1nw<t>4
zNO*J9??L+Sl&!=csc2C>j62}4`a?0KDm~St4l^i<`zL>rna-0aF0cacepRKeT|JiH
z`SVk%Cso`-XhjRtyHU^H#5n?U=b-kDBYO-x_oIsqEYeB$!GtGoK9$qI>gcnTpiG7t
z6y}T*0vY)`lrP^y@*R&%la=oIxjioFTB;TGT_h+ua=;b>ojmrHw%PLQll5-DFU0oX
zNDi=qe^}pflC3n|QqTK{<%ao at W)LJft12nygn={*nIW&`p|AE74DHGAwXo=;ZnytI
z7#p<VqM7)l-YD$!FU;Hoyid*AqD@)ZmYW$aGso<>y_Yb&sCG>bG+`6x)~S3G+qp2r
z(DHPCSaNiEqNXrd+E8O@%x$g+0=gv+p1WV<$YQQ43&z=L`8uL=K7<Qg;f3X6gc`*a
z4G-7ri0k|{Aa$+s=L7kLGESEiiG1#Y>{Q;xEohzTTnMTy=d>bH1r?wWK46R9=ID0a
zcieIhRb1iIsPELRo6|U|_!6~5u6l&1gO^Cv))}t4X{saWwP))?<x62ETp^0?261|_
zlikgK?!peQ+lMt!G0LrV;cxMHZ9YSHGNIS$YeN!Y1z340xc&6W4}_9kZ^Mz81JQB@
zSq9yjO)E4)%V|;QSW7nEX*<s*cu}(c<Adj}aEwCsw+=4>mMNgL={4Qj5`!={Wb;xc
zQ3woHD4umfU>JCxnU4ooJB5Oio0TpTL=Qc{LR%=Ih%`uk0Y>m#nKa%5m<+W>+FZ}b
zrtY4u)JNDn)i2;J!n}gheUi&i?dvbRcRBz+$?hpjm*E at 0iL_s?Gd|rK{4A3aGYpae
zgi$yR>lsmgqh>sb)1_na`fxo#{xeBb9&3L;`iJ_B@^9RJ$vR6l{I=JD0ssSv+Wpy{
z$(I>hjg-Ba=I{n;Mm~(na9>Kn>W at p%ezGjAOZ4m&nT8%A|74D#l`q(I`%_nKT=au3
zT}xlD8$In`M2X_A_{#jQ{OU#pD`OEDpf91EqB-ZqyhSZAeGjM*CkqKC9lit-8ibTL
zuw1KI8mUx*n*|0=TQr*onvyyYET4zkp(2-nWFlPE=Ec5;5#MN^?<42}PG`T1o}+|H
zYRh|BB5pk{#MZQu{L=?;&6%x00);_}CHl+;!HVE!#?sZMLT>S{+$cG&IN{DVoI`R-
zW#-)>rP?H!1D#D0-_erB-n+IFOC~AjM3K?pFOBO91pJ2Wj!wVo5BL(E-Mnu}Pb{5P
zob4~>)7b!{JDV`hE4xP`TI$-;Wvmcqb>20<j|)gx141)P%WT@(m|cCa!=4}ZJNu%p
zh5ZRFNlA)ps=y6TYKxKSw!m>d5Ysw?MOODdrwtv!!*@bQsZ6}ssbF<6!!?(M3hUui
zM;bSn8E*toVd%YSy`?w at F_!C{HztVvP-CDjgqsJ}v)#x2`}Q)3tQBE5s^~()6-+@?
zi0Ga+7_-jGq8nCyV<^yTRRM||c$3O|C)b0n<#eQU;Umdlpf}8%i-=Lw5(G;ZDvSn3
z_JPCX*$QjsyI)rlBr<WhL5O+k+ej|d`y;7T3X}pUGUSAmox9jdVCASHDbg$Yc_088
zpd%iYqf8dh=jT!hJemm>3#R(~<p&8<VWc7_l691ZP_Aie0mFi0H8ZAmrg>b-VBhI7
z#<cJzywKir^zOm%Q=NuFP)=*+BV-rsc+_fZt|MVw!XAa-oL24z*eR_`I1V319GG7}
z=_31rY1`kz)fv{eZxOssjDJ%zDU&jP1a`O&)5$akiXVsXpf37%pmeR;KnxaguBPEI
z6hpj6->R!Z2zYsWm3k?j8v4_28@<7y-or9<DxoUqB3snWq~qZj@%KlJ`Vaw?sR6QS
zUphWxK*1i<_4EDFVIO)2dyl6ffyVbR1(1AZOr&Phg=HtEO$vpPswHQUO=+G5#J?v@
z*c|44gQnsPXF-`6x4W>h!^o)jlx<BeVW4qT>Y4NL;`O(2C=Cej$tpxOrV6!-Nnh7J
zq|Qi6%W^<(;+C!l%ki)jvSq2+8jf+$9uAh1_GHpNJYh<m6=B}ou at R(OD9NU@!qz;;
z at X-UY-n?f~3PDld*nnMLZLa1hgr*yr-Z(^wlAL!JuY15V5QqRFbQ!>@5=Bp3^@sNu
zTBfG!k0ms`C|1 at gON$zEoW&Ku3RYhGY^^dpI?85YAbiq!&Ra>g*3z-YgFQSMQl>KS
z?mHV_x<!Ssmh6aDw3;i`MayTE=CAEHZGDOek<I4njlK1a2fGjU1ocXuoeMdbtT7$^
z3Zz1kZ0ADHK>AP$lQCHkrv~8P)T~JlFSa^0(T^xP(vk;T(qj)O8FJwf<{z$V at +eSK
z=r2`DK?ucqN3|QFL2`spap4b7OhiTsSTg+f1XmGVvJpRq=rMNj%0pzdS(lO(TPkeH
zKA~g4=-c4a#$mq)TF;CruIJ8^#r3kIWJR~fyvHckcXnD=9)%6ZP3ij#sJMy3vH6J#
zySde#N>`2X<f7kgyybCvt>)*Weg}uDui=jIE{f`Zl?G4b+^;Pv!1dN*rp^Ds+IjVg
z7WTTBG>$5#O5+9c8$UU2M9=1k6<ujpdK+_GkqdN*MSD<2Dk~C2c)>;KgPWj}@`Njk
zvX%QOwvQXhLm0F&XaRga!NbSj#a(9x#-Cy8=9va_Iy(z1c%Bl-5j*u8CJvV4h~IIT
zH&6^B1^$HqgrlD%h8*YQ#%Y6<E}VqRlNV*M8_5%(p*t9!A0xQz86xUkI!XyoQ-<R*
zsZ*WVvCWI%r&H$SDBJz0^oqQO3Y^Ok;f9g+p!GsS;XMugX)e)`yWHSzZxf5cVhY5N
zQ7}spVV}PB at pOi{b0;9=W=+jOPNLzA^OK`)5ln*wAv9`IVU~&Jr|Y at i*-|5>STbR#
zqy7)Pm_2NBJSY(nC+=tiNoC;T&oIDw9RK$rQ-JE?^L at FT8QK*>gj<j`;17D)ak(XJ
zutP3(bwXPaK(S=U8}(4gAy>GgN-}8=_=t-Twp1e3Y80Qlnomn35UC1 at i#5u33!91Y
zWCenPh6P)p4q`<;Xjd>N^mP*dQ2fw5&&y1e#8-3?q;A8$)3a^`cWCNQx+1U4+iu1A
zMXoqk#T9X#TS at uDFQYAW;O?xLUwr&bP8K2)=bx(Md;Hw{%f}D(o-Nl##(zGp;gqHE
zBkxZiKTJ8>t>`cKuC36KLcQ2B6g!WzBBsI}`$)9*;oQ3XV5B3RwLO`qf|+Hl{KDEq
z++c(}a(?Lk#A#jduLB at Wf_xEZmA_;~$8h)=u4<MmUAR>WRs~R#3a$t>t55`Ynv$Fc
zFeEMWVpduHqYh7fBg=-Dn)WM>Q(J~i9Jz7o4ZjZAy(hl^dPAmPW}eNEV9JQm4F?rd
z6Z<ho={RIez3Q^7Q7lZbD0-je at f;b>-~WfoE)b{%$3mc|U_mr|jfAqiKsd#^W2q4|
z%$d);0Dy&GsNG^=EwPu06(VWBQJ1+#B!oyL>RK08)0ig~sC<};4mJJbu;XNF1{SMz
zUCrq6Wp!Ny67-y^>mHZa_UzgL?P`a|<y9l5E|p!?_;GpV4C_Y&u6p)Gc at uV@=CExI
z*yBja;n5u^&M0C3v^#>bSf`M_zn=4F_6 at e-q&6X?g4ZP*NVH{_EM2x;wtORD)iop(
zo?6QSP$4&F%cUC*U#2%5KAAoW3Kk!56eg#9yx}yzDpuM8nG)gz7Vas$;>wX&h(E-L
z<r at z4v1c(7+*T`!(t at 4XwSEcWa@)O^47oJ0HZ;0P5qmUH=T&+HWfwr<VzX$Vpoq$4
z6kgbLeKDR3o!-UceOclF#pAZN@=Mc$LTR=b5WWEc$uTo-)Xj&+MA0F;ex^X8jZJ}r
ztpbkk1$(@s<52Z%k(TeE)HD3y8{17WgUn<XzjISu4vtK+g5(c1nKQ0o(EjGx!nzpF
zQm^2K!>ea}^^rqL8G*Gql_6N6++~Zsi2pjYdNur at fGb-0Jg4Cs>n6#qI;&^X^1;aZ
z$&2mnWI1N_dltGV%1v(F+h3uH4 at lBQP+X0id(-H-m_n6R6~9yJy_pa&lyFNx*Wi?C
z{eP3Df!pg4b&i<R#BW5OE9O`G+xBPx?I2Z23{q-wn{n40Yp=|M6vFV($Bratprp)D
z6_M~@@pE!2oHS^;eW>KvS+o%qLI1pa+Lg$L(2v2|dII)KNPQS>b={7SUtnd_8_st8
zD#awu4AeOex?S8u2R)gsW+%zT8<5+^^W3|jtcfky$kOEtkO_T55wb)brF)RGOANpu
zvh5gCU7O#3_H<_#+(|vHv1@*pWS at bPsgFhmkRk;tN6!f^X}t(cR!QsGB7=gxEHISf
zBjF+q5}V at 3lS!n;l_14%p;HSmN*q*dJM>T~5%1aHPFcicrh(m*k_KOv59xh}@FavP
zg7z at 2_hpa#q^W~XQuobyl at N=}up)=Ad)-)5qD#o>MRB6dBylU&AF!{2sd4N_E;1w=
zjWtdO8`m)AjoINuKTZ!si<m<;q*3d#%NhJ?%R(_1G{nO^8fqk45<dX#bf}GY`Q==j
z;t7yVS{EA4s;W6YezH?<g8;QjiaQd(`Jne(50|Upzv6tAC*<^0rhnxaMns*3R5^tT
zLd&@;0I#IZ=%>v>N%*KIf*n~}JiFzrA&C|6%SXKt)F*BUia#jluj68nQp&{LiOzn*
zJ*A0AY7_Hew8#kZ*<M{Wx3JS#by&0h_M-Ty;Iag8OHx&e3%{s)2E(_$^J2VOV}K^7
z_kpnp2hI=L{s9h>mI2Biy-0Jw0fLIFORWZ$^wqdBZ&);MZxN_6vE0ka?X*UV&E269
zIUSh(N%5Fg!;DX9zo#~bGk4G{@1b}AGj!nRdM}FM$<<>4IK%wv>~K8Ay<I+<OFE0R
za)p%O8CxV+g at Y7ts4OhC%m<ynbh1OLjX22`Wh{7uXuv4F_zR-e4X1DrF-J1~#49l+
zf2HTzZOcZqDYWM3$B!uNq7UF;rHO&SE;T}FmXwzzI$kj{V=k3i8_s!-YYtx9?vs~a
z4DP6%9M7WnfO41&(=s#5+{T_cA0G`NLyqDErvZm~kZi9KDRZjeQXo?V^34rHFM&VW
zKnmtoU5KYkNY@%|G;59%&)!^A*KR8vi}%*rZXb$DPTBNw_*P7hGc at yF8(jfzpIDS*
zL at LtId2*nlp_&hq53|6O8D1fm!2&VofOyGAgePtSh)jMTlHce}k-$CALtW8+WeZPs
z1*hRd8+$$qZMj${ZSIjZJMX%mqPVt at aR^J?PN012G%PZEl53N}w|!f at 0nHtbST$EI
z!>7=KV}k;d=U<dtaQMkSq#oxoF(b`K^JB|_1U?$y{JD_L(Sd|#Q`n|s0wa1ZMNHTk
zklrL8%{HD&QRH)|Fv5wSV=3CLfB9Rdex$n8%s51W>wFe(CY=Mv{soJ!FUEJ5;M$}3
zWxB%xoLQ`cHNPR)`1zN(Qrp*BHN`8T&rnW=KC4rbVe5iVNB!>+R7pjS$nuwV8|^gc
zY7_g;^}5XCK(-sR9<I5lu*K15fpDy{-U9yN^2Q&BzYP6^Wfs0UW+($z>lCVT_M?m@
z8Mc@?-Jc&I9Jb_-2kB%v&OD6G#f&VrOwj};8@<tr<q^q%Io*cBu1eVSUez~7!gaRf
zv~ZW6)339 at k&-;S_9p(?U}S(rZ9&e=x1f2F59~(~1c>6BI1?4B%1hPbVNM8H%!hTT
zhONSZhL^JqljUa|WN7*$43XF<f>@~E5g`RbozM)S6z-BlUiuJj8<SnerX&xp8BkKD
zWj5kzBZ$E3 at xJSFU!_d&SdX76(g$CMsV*GCl-i+YPKt at vZM0<bh)fMX8g~gNungZ4
zNI7bl1bQW209UjeFUV*|RvryUhuxi>ZM8<*fmrnH<ZNqjGz<@-Jofrf47W1L;q?uy
zw9+}+`S>-Bx9ssxE>-$6qM^oTSee6FOu0CySyf=3prTXa!;Fp#o>#In>v2%jBn79z
zLakTo=$EE4{^ESiE4W1%Bmev(x9t^y>``sX91s-mJ?XToNun9(i)rCTk}Lp<or!ya
zO9S}ix5Z17+7F3A%M5Ey0 at sk9%rePAi?l0;;3N8v!r+e4i)I+6BTF4@!EC#|!eOJZ
zK(d;&rXs{|7+VAM)9aWfQhxMcr8hy??kq_~WR=&(hNbPNYZ`O(>r&Yx2OBMBHc`l1
z1cVd|xQsm(w9H04Y5Z?ukA}2}j|qdc=kBf~g`WtkB`gx*bda|FqcBK0zdV-qnNWTu
z`b{^kEP+iIogBeu+jvEDe592{TItB#lheLejmk<w`@D>oq6NPysMqK17*{#36%|E^
z<!q-03=U8Xamw>g@>05gS<NkOAy;L@*IqGhnm(_WaM%bur&yd&lx0^-3XxY_D+t0n
z0zrI~#iILKCJVfZ0vmeIz^FaweI=bceT9KJQz^-#H6Kx6iB<Ph8P>-8nd)YzI)}4}
z?B+YzrP5M;XiknwZqM)RA@(d1-NU+Ja{w`~TW~66`R~2zXP at f%E^gx(sq{_S%aL=>
z&wN3%`Ud}kcWTuD5#Q<VThbRYbV8T at ex13xMZFbBaCQ;oMwhNdI0buGLkFu_yEc-1
z!_ykKT16rj>+$0Sj7VI5;<9^ceMpHKfc6cfFBk7oXOk8yj*57v2=^4psU-5Wm~k`f
zFLHfR%+zq&nH8 at f*en*{)e01n21ufCmaI}>yZ%X;K?MsG_Q4k=q{mn3F4Dg^<yTlQ
zY|c+ckoHpdK{8zWt9ND9*+o#nYD^PK04#hHi7d at GJJIymO>Xq4L at x7deEd<in;$lo
z9=t&S28nAQK|_39B8W{B>?5c at ZyJGG0(}&VDgkX*+BXU~-|2ydCCamBV|t-P5qxDF
zHPp(oJ- at mlR+qUyUgd^y-<nv3-zk1V&FCEbZqmdZdFh}(7<GR;mjJb(9*rg;p|noV
z`;*?m1wx7F=*9 at UhRo+Lb|2NhL6iw3uSlLD$*9=W40zD?Ms!@(Jvg35BpxP11{;`3
zYE9%13oK0}Ztd)&Buz!8pRxnD`C%hj;;8{<Y=BH6uB0I1qT`3WG7SW|B-7%Asbaa(
z!*S7Eq&o+Wxo^N~V+;?jD?l+AW`Xbumw-^=etuqkZkP!9vok>R4f-hTPa@&{h?rT(
z3cm4B#q9VQa#&HVw&G%9Z#~}BGS4<1Icc1k2zC%2G^Q+>Lp|`7h}$XcPNu`OW+(UZ
z>RKI~g3mR4>2K#<q*Om`zw4bMo7ahs8!@eaPlt9Q{QS5L;M#{)KZT$7g0O(YYAN0e
z3~A9$Aj`_0Us=slkW(;fJCdi&z-0Qh7<DUPODTtKMsE+<0(GhQXB(2cFZa-Aty}RW
zcPWjOJ(v7)vM5>J8Qwtu>D24d!yUEf(;i(x_iP)apL)I#XE+l`QnB`>>@}9S>pj&=
z!KsdmjuYXOT*bA-*NK}!b_Zr{elDqvbc5&JK!;k#Hj~+U$0qQ;ogaa0ihB3E2;m89
zgTEruRE1ueP&DD7-YA+n+~`m!$rZQ`<205j?xxtkHR)cTsSdAuK{{3Q(#JsDLg&z<
z4OGxncHl~D8L&#lsHN=gu%KnO?uCdTz^wn3?+(-aEn;oLHX}^pFb(&Kyt!5W1jZ&Y
z<sawh<pc<js4}IM at WA*)^hhXq#V7K54~8_A&}5XKx97kX0}IM+&qftl5{qznH4>v<
z>*LVaW=P7V+uh?- at +^IZoFsh&9CC at S^jSehs$~RUWlq8F3e!bsvZyUU-aGVfuC_x?
zB}m1|XNsJeA_ZYtl8mu<HJX$JGTo1I=+eVfUcRzZR+M?j5p60(kR<9UdO at +kQ#1^~
zB+HISijK27dFpCZnmVe*>3dQVN9x6OBn=H-=~DhcYjIui;)Y$Arf^79!IPcFW`*xH
z8Parf3LJ1X+ck`XT})Urd35%a*M)s5gKz};nM2IXArxa-7Lmf^)p!IANIwdP*oE$h
zxpCGJ;8Yf{Jz!Q4J^K}=anaRpg{j=%k+`$^d>t33v~tC&TH$vq=X;4C`kt~`fwV2t
z{)EIyD<MS at A-o2YiQ!5sgVJxV!)7K9!?;<JBtX|)swpmMU`h^`6q`)H`5*%rfh0aC
z^f48XG}2R$e|w!#r1Ri>jJb&6&Cf^v?S~u92cMX*z|vC^Kfez6K7kk^=WXm at a$Ulj
zx`PS({Jek7ynhj2+1)F`;nnu8D4kH$W~6F*e=R8Y7|Ro+yM-w6<3v8Pheb~%K6CaV
z_86S{ud$J2J4i2^{M+j+p5NqZL9vRwHwc4#-L;e2QX*hA407pM?DYp5jD}#&P6IV$
zT-{KvUHg8-(c))TFf%Jqj71AqbbKj1Ud9d(^=ubr>U}6Q)KwnQDfAdK)?g^=Np#R}
zpL`S<7h2czZcF)td|%3vm?N)}E5z~e6yf{3uMZj1cwD58_X=EpQZqYm=}$(@;azv3
zPTk}Lf1fFPCdwwRvNRpx?-Gi3VfmD7owXPU<nVQMnc*8WFAHWOA;}|*1(GkQ-B02Q
z`zshT5ji{`AqQIkeICDQiEuKRoGmw- at Y+1RXm?I~gT|mcX`X-}_nADt>DrU*C{b<t
z^|5+nKrnxV2j6QB6t)gO#8KR%Tt}fySu8ld&&QV_+=wXwX(8v$m%7;S>%vU(BmyiF
zW<a}1`-oAp&L{Nc at W^T;KRH7@!7Ytd#E at c$P`S9ZEVQJEG|23qpP*hYG~y5+NTB8j
zhu}_a{^(}16zADu3l<3dD4L+qDiPz{V~KY0E6fF!n1ZKy*x{@tzCewW6LmxY<RuJ|
zk+BU4W=?JjvYtNM-T!g(!N%tEn}tD_N-I6z+<o!<$?o$9Pj()$GB?#shlUhsqx-IV
z$Zj)b<edd3i(i(bCd)eWZ1Z`D1 at A~ZA=5=d?&NX%0-i#MWAPH!k_ZKl<nC~Z2jwsq
z&iNT`$C21WJ%fT{C5&#)h6ASa4y%J0&Cp34e&ws=5j+UnlVw}1F9(>{?#ltvo at frH
zmxG0`m<^B(@gvyUm!$PbRB+bsO<c+{d4ZmNNz#f76hK;$It$7DbUr|7(nb$EW?yn|
zF$xJ-Ow6HLy!NBv&ASqC*@a<Ow|xrQvqzI5mNF>J{f<y3%)yF<nq|BqKd(Q)0;=a+
zpIkf6unY?i-dZ|uSC}RP686}K at CeHff}C|-t{?Yzx|8#>`hEC;*Q$K{)8_M?t*1}G
zvI0 at 0M(Em{eRwYhOywrdXX(*hVMHkiJdP2Y!SF6nl`f%hb<E&j1_d)FoSZ$rc)-1b
z9Mp4Hbs2;(M at wkzcWT4u)=?vg8$q>Vw`SK1Jm8bGFHRwGrUs}e{(FKHD}^DTxClHM
zg|X35h?|59j(&b%19g9ICZqE~qSlY&Hv{kmu3fW#T&^!P5 at a-oF@fKkVdO(I#*RnX
z)kjNM3rAcs2x#%uE)jQp*vR6Z{q*DrCves9Eq{%UO`<#ON0QAveu~c&7>PS)vu~7%
zcu4`GH<4Wg#3MYGG9 at y-A8K4Y51EQThd|#*<(>zJ6F9ad@<gma5yFIFOW^5w(1mve
zgGjQ`3C!UVO`s#3Q5#}9vlwtWXY}CAi^ZKj_vMEj)hieaiN>P9nPk_E*M(Bk+wOt7
zm>%JZ)|<D2_TY7Pg7FL3Oku%jmegCpJ*{_0f3@>7MCDRzSV|GeYCAbWkgl~#qtV<z
znt0|wlc+xph6eajVW`}<>_qZvwb{O}?r%6GAq5wrzbK06C<~;aPcGA7PT~CVdv9Qi
z%V-imcl(HUBi50r{iYx!iRXj}2(`cUWH)d`9OZ8>O4_48d?P6;j!cf7{jY7kaNT2k
zsoRZKV-ayvBvxL^xHvE(fp>Q}OptVwmEzqw+N*?NT$)EF4-q2g at u<o9bn*c60LfB2
zLXTMcib#f#3qS$+m_wKuMS%_wW=^N!01N`9FPT^&g?-DjmYd#2@)WYl=xq;H(~x5{
zg*9Xvr73a(;LwB&N;VzMVJGI)nBjG#52OSv5yJ3#%%}`0nwWw}C!+4}Y(B^Sw^#jf
zclX&2RXd380!d&p1W6;7)qK7Hw!tdIt(+YirzhL$^UeQ!vAMIm|Kj<UYdc$l{qFyW
zNTPV3-ONa7NDzz&3t0290K*rh95&QQwvIHOtDAQ2cYXTyxOJlrrgSJjn;_FO5FqC7
zIHFZk)XwhsVT=w?4873(%=1Jx#*wV7Mn3pQ3Zri5XgXjzjkGdID))r}G5fjk3Wh`!
zUt}Qz=T+Z`4t*R%*e>|Xv&U%J*rrO_avN(G(tX at 0@`#fq at mN_yHqQRJWSfLRJCi-W
zK~O^R4zNhH(2;PHo{ZXq at lh8OiWrtITxJ)UPdRv*Wzh5!^qCt%nv4lHKaTB#LEwzN
zqk;>Po^qeS+SE-7%<{WA;TwMYFd~~*qM#+MdM~T+XOH)JPsevVE;gmUW?N2TH!8};
zZ_CH9EJAWoTrV;K#34QaYr60|6e4NT!NPB|Il4E9Gi$^iX9tqhi116t09s!F<#_5t
zb7z?zfZ|yqiXlO`#1w<-%W$s~h{bJlfDGa6Ajsb=VO at eOaxa+oe4L<K6!}U+ at uC|<
zWnotGP$|&7^L{{I?zO%W>ImVI*3U;H?9rZ4$P_2`zIxMRMMIYPpM+W;*~kR at fX5AV
zAyf at zt2_U>Em`5lkWb0Xv3)x>nW3>%yrPm&TGiq{Hs3L5I+h;O&y6XADM+P#MS**+
z))Q|wvGWmmP6|gK?n)suo<f&vyI+{CEF+3JqZbJ%hCPxyJL2jDRNKMMPrgu3c4{<5
zZ!>uSQTM2axFT4Dw&Rl9c@?!w9D8>Ef!E_5_pxeyk)-CNzgSp=yN~Yh8gmTsh%cN7
zJ(k at cD-zO=L@^dAxqSe7TUcIgp55m<v~0D#Zoebg?IYRAT4jQ~YX|L7<^F2FdyJ&N
z_Z_=hZMxrF?3xi)T8M+6g&4h9VGlYIipU5ROFddyNYSbxS}dP&FySRbw4ho><hIOn
zJ-Py*hbsL5jIZa)m4;<A at Z93fRph0lr)vwW7FGHm!(;QvA at aUM5OT_20n6KM@aoAd
zNY2<sbBk-g=^ZOaIT|5)II)l$h_`e_1zbhK<)EaH8Xuz67S>C7F=v5<au0dOj+0ku
zi^L&kh?l9;%DI~$l$0w%5cdGWs&5wAiLZy_N08bfb&O}havZ%104bluS<8~77a&in
zSmYLtcZWg_V(<77#A`)LyLc8TD}ha1Sd#McI3bf0vT?^0izi4L4^Df6d~?m5Qp5a_
zSpG2_<eJaBxL|<D({z4y9<poC#d>_woMl4f^bWY5VhecF>jtujk?OcB;oorSxr at l$
zjzCgw+LZDD#6sM<_!s}(@agD_T6UXlbz3*x%PXjM15K}snxm*qOgPmkEF%gM__TY~
zNhCQ`SCy$Inpj+wFp??UOB2;qDEN8YmrKL73Ie~stBC5Y7SuS9Q2AU^B4JA>pY9@&
zxqYk1riil|<hlDVo^1WIx!oI_ze{Q_p|xIZY6s+jrM-5B<DyRSc&0u#p6)b%7S1qc
zr=ywsJ#8Nr^^3<d_4~Me2<7!~d?LN3hMI)48WJ}P%I<%-r6Ol~6BcG!Do#k!3qv6r
z+#JdkvAZrbDJrHm-m|GdQnO3Jw{PF_-Y>owBo+R^M8U}VdD`U-p&uvLVYU&TW5>vU
za at d7vf83S3MaUvho-{Fo-FI at Wh$c7W8Ji925_IL__Z}l~+u44vQ>E0ubZhbMJ<4CQ
z!<F)(5IGz9>i_on^ZyYB0twZZ8m(62Rvke=aCvs(a;lG;s=uo{&3t2ga%Jo+;&boL
zoxkxfKAFEui?{AB{;jomZ|UxxR;zXA*54MF7Vj-C{ViF%a!>D30og;_qa^v;2+`xG
zRln^0w7P%ccVFIU9`pvy at yXnmb6+O&Tb<=3H{rY%x_bvV at r(EBi?`~Fx0BZG<y*Ix
zTZ{jd^t-3uCiAHJrgyrGkQQf1gbw9yGJd;uJDH5}&zS!%OY>;qPJQv)dg~TcRH*np
zRA!@bBg6F2SRI;GC{`JU(t(q-ojM at SFQT`VdQ!D4?omf~>#e0rJ34%W+YeDPi7a6E
zDrB#Cb<<}%$B$M76$1~ArGJ2%K<(A-_wxh6JB%49`=-8xF%NpbcKgMH27)l^@%b6`
z1hW0eH1LjQJZPUmLo$KdK%;0PK$71jSP!4C2yA*BP)|dfEjJ)?soNdA>5Ya1-hM!&
zL0WIBxKT?7Z_RXY8wMpHWM?2>G~ftFa)>YyJ*X|9fX9qcAr^x`Kjrx)UT4ZRqD_E|
znlpXrsNDp1G|XF4zh5xb*6MBIa`D?~)2gT(McKvN6-1jCeaXT3F?FGbuZdgPEu*&Y
z))((32_jyfkBjF?rpdK;fJV;G9I&F<iCVf{Uz!2R*InrK<i>$^6NpOkrpLIeoJ{E5
z1 at X{R$PG#-)p+af<tXUDR^!5x4}#2ek)#K at 6wIJRl{u2EKDaB#F&LRMl8RAUMMen>
zLI)DTA#)GeL~J}nU;;rJRJZD_R=xGj4AVVE=diND&U1@%jlWSFi}e=nt1c%Qqg&AY
zg!K3;vq1BDQ(QVpxDpPB249$G84qP35b<f}4%XS}m}OLXE_b4K%t<Jx1%MXs)|bFU
zpcX!8PnL>lLJ96MkR>5ARcWtx-MDoEe>;%{El)^vsjDaf?Qt8?e6SCV`1+_l=4>2X
zVDZ)|)iEj;u4>Q55m><WJ%CkCs0x%Gf&dn%YyGDkpMKu4w^oY1W%-xdcwxn0UBB*v
z{=jH#`ga~F&vQHnj1syq7%Jd?b~)KaZ+h<rX7X0z7>Ul4P*_E2O?l5adHQ7gUpH)Y
zOQa-0`emb2E)_=S_;_a^lS_`B9g_4~!<$%EkJu at N?qIJ(CZEV%bAX$g!&9i<7a9?~
zi`W-um<`s$73M^2s6c$U={uL$%YJ5;xIHdn70p0!yKlQ78>cOeTf_Cw*sn{ph<y;W
zQoi9TsceD5<h+Y at L6L|veeiqlOgMX|3*K~yqew>*LL|S2!7o85xQ*tAy~FRZmZJlZ
zwhKKc*9E4YT<rkljKxo#3$#ntN=vvph7I2EZrUPqtkCQgxMynnPCNw_Vh3~MpZkxk
z-JP`xI9|PvMRbmZJ+7Zmj_Tjk&2S*RVDLN2y_LE3r;ndK-`t^55^4hj^?Sc3lLP#B
z{Cjfm_sSfvwDywuFQKJfOkT}lXak(z<%m^zF=j8z75 at PCg2KKd0XkWAXUhA@9=GOw
zMarw`m5ezjd*h>2(Hdl>@foZnc)!Yf<IatR&{X)g`K}GK?@NJOYJA&Rtd9=C8)UA!
z<K}-p*k9WJHndbUCaDI(IUYBkZ*Ffs*x6*A{Y9zu4h9H!@5~+b=H|4~wJJz|@Ve at 7
zS($HDfX%Q0C9jed(hL!cYf{8ZgHpxGL2NPM?Pqu29<BYtpUKyM|JUD7|K6$p{l~vQ
z{`<}^QVyhy!}c2O_Coo&E`qVhYnjT*{Fjxa4tZxO-7oub at K)xRv|o&Yk6p6_Tz+G1
zB&(~NPd4V}oFxWsV|i=KTSZ<g(6+wS;EqGdWWc+i(II39I9t)Uz)=L=V{`I$R4zMd
zosauHfI=~>sp`PSA at 3l_$0VMoK3rbjXX;;NEJGy2l7&aRA%T*RCrKrFInUec`h9Gk
zwIpSQ2mQi)tC}FIo{kF(41I6p%x0wBB>;t(FsY_jC%s9(dmmt#o!fj1jig#wZE7Lw
z!$Gxr(#q7!)WUnKB4EjtHq<mj93ptruYky_=di_nyom=(jbwZQmIKij;l7j+88^_|
zIG+Ocumclu2nzxZ><yZ%xX(w}!u2UmH;|2?Awo;Ml}fiH_v}y?BBFc^!je`Y=c}Nt
z!%^>Sg5xx6YoowX#r8=sT`;cR1l!6SrV>I6LYLJpnuCS!=15h9No4uX5MCK#-K4j}
zj)24CibMpzs3xzX6~yXDYci2`K*C&!t|k{(X7SbA3F%!{<WVKPCcaEyJt_%%e}#BT
z=}_7P?!*wjDH8R#c?K)_$WXp{GJ(`HR*=6;{zJvyNa8j67lSn2D!c$J9SF2_$Q5q}
zb;`+Us02NyNquzW3)oQk>hujChgTf_m!QdH=cgxLkUf1(Q<wS~Cmx08FeLnScYhVV
z!KENJ>Yfc at Xo1Lidj1US6<Y&q;uOq7T>UrXo>B9ZXkSEutWd)4s9uQiHLrY!kK8)4
zZRfkB4lx%SPs|~8^VtcU!$#!{wsDSy&>>>v`9xPX$st)1O87FNLVbX<jBTTw*6sEE
z2ix0g>%wZ2`Z+A412o3u>l+VtH|z6%C_jWX$d}2(^Il&JQc|n8F?lx$O}@Q_$?BY+
zp2bb3%X2}eyG*}ld+6;suAgB|3#r=9OLLg*0BH2JKCe)++B3|e_%~n?zs9ZQ9K{`c
zA-9{S+yLx$hC)NY&hSjk43%HZeIb_yp$lubK92_GzBoJs9Ts$p^v5`8&CPug&}|G1
z*9^)<L33s8l8%juknPlY8-h9G at j^Og0n~4RgYat at BQAOn!Ui!ad^a2{)A7k at V|gcx
zT3Ta7QN+}eg3>6T@&j?`-w=luQV;n;32~hw4<|*2+yL6$Zo(q&gNMl>GzUZqOE~n{
zYx^tfUSU`hDJ(_zR?7aCb>BGn-R<92(*CN5TmSZTfFw64x93|G{!N1g!SMaSI)*qI
zH*4RIA$BJ9Zw~`dSPC9hjpN^QwF+PyorWs8 at +-kUhn=Fo87C7Z^DqmzzX4*BzQV~z
z@@<B$Az@#q_j|v$p&zUtbdvhSciZsafVyU<`=&X7A at 60t%nS$*0ybOrH^8ANz_~%b
zTm^uy$`JAMgXd4Sp8T+!^qA|Ii^~#f@{+PDO9a<I)ZV?use5oE4_`Fr-EsR+;HR~V
zF^uO~jgP2_a4#?BSY#tqw at 5Y67B^d+U~R**wK?}P=44 at mNQoUtUJ~SbJ4 at M?ThVK)
zO7`y~+EC$$rHj2TA8fq{%ZcM$@)cGG{^9I@#bu9w at BOY#x*Cr+R0EW0qFzTM&<;U4
zggSp5|9%r~+(ZjE at BRKi3G8wq^Hs*pm$kkBPF{WWa$%4E+K=YTd9AuveYu1PL%0}z
z*{ZHI(ImliJu_f#8RSX5E{c{q!_uz3E(HM#3{dQ~>%Z4ueZ9B0EJwfPSNOhI|2FgF
zzvI{O_p%o?Y2>Sg|7d&_HH|?=l^0&lW3+_QkM(6MJ5m at l@rZ!^1H$4Al40aUDJF8J
z&KF(t5wI8?u;zAo$Onxt&*|jj-#H$xaQc*UNs!2(>Fv_+YjPqlsQ;yoRT2se&QA}Z
zXX9SjrrHoYze(0y(DK;ip+gA%Jsu(Tuwc^aQsZ7 at k)~QuIK8FX<aoTCgyZkM{Y6Q9
zzq9+`;WiH=i9hGDW=l at lQai5GdcNM0YP+!A#)`-4#34p)6J-=?LkPU?Jo0Ck<Y;o{
z%4Ee$&!!+8;P^SDwB(=R@~1tz at IOz_&auYd44T<hG?(0JP}QO$5GNIiJOzXbQ<&wV
zB2P!KI>t#{HFNzTZZFVf7w07K4u?!IxZBzmn!t=O$5{82O$LTRL)>3+zL-nyaOiTn
zrw0N13S$=KPlDwP&4-u`;zomXDeAwg5uMWnkDJsT?Wai4BS*V4lDINmr at L^?7 at f~0
zcY%|^0Qvx+%lZIghbQd#<P_pmQgiOd{)t!!I7H#Z<#lgOVE7)6y)=Dk(;^#(5m*HE
zlbS39j*vbqr|n-U2FgtjY{Vxj?UG1CQ+4c{xUyoE{5>6u@)H&3bk1H{uK!Ak3)W%k
zP?g&-ED{okqXZtQHzJ1|*pZ3m5-XUm42 at K?s2M6#SIM<i`Ut at z2Bqb1BE8J)S{aP|
z11n~T%t|s%H=}F=lM<_F43PZb1RZ%TjrNn*)GRgdKVeF<C~RCSX{AkQA_dKAGt%7{
zymtEW>YKUbTV)Jwy_i!SbbMbYP8a0jjswH&MdcAYX=il#O}Xjoj+)}GAM9wpGc%br
zF_HNPPAi?YTlenWUi{`C;Bx!&daX4#*II<*JNAo-oaJY9{wLaT)y7jJ=@Ba!`5R_t
zN@{n+^Kt_>DY#a}|Cx>r6wJL!7L7XYiT(t38{c3PvZJB-jGmFQVbCEEkQ2b&a!yo9
z?#QpgUMJ~5(S)T%xzY6k|GEJ#xA721Od#5|O_39qQqT1&3}<LeR<s~H5FV+!^yhG@
z|J_H{iK>8Z$~Azi7Z`qAmb at GyWoqRg!>=Ww;~3D{J3aw6i3?&^n}V)J6>J0>k3)M2
zE<T6Y81$<5FKmkOr+^k_pv?Zq5ftM=L+su^y%_)2- at m=z+F$y*fv+<_O{1T?w{K_c
ze#{Q2b$b!EL23J+Tet4q{%rp<18T2bq+Z9l;~F1G;0YaQ)`zFC&+Z7<FdtM&BQNU|
z2i8+KXar)zU1N77*3xW1#1b{?ro-xzNOR(W(ZFk#5I#t$jLZ<y5H3v|FPu{O25UY7
zn@~4X?ZAmvxUhC!BH*X)iq4TZsoHhBB_52T*2i^~dQ3z48bDp-F at Z3*e0zG`C#*@A
z3^+C=Zos0iqHb_&&YglF$j+ub%m(c)lCrFj77tL>lJ`jmRG?v#;D$qoWG_)F=ES7y
zk~Itiucg+KH}G1zm$Ysz-?_Eiy8U0t;l;slvOj?;X^um9Us7RZ*582Bq9hVsPJRh;
z<1c*sV0(A-c>;a%gNF}xHq)<@WMlKugBRPo2_r{7SZB$d&D{jIx!)w~Pq(+Bg_a-t
zIMA%jy+HlYIy_500OY%3Fr_zZyx5cdN1puxLf>b0>Qh8;j)o$qK8z#v_KG8MSSe`=
z$awMtP}LzyfAN2RdhncRswGQz?j#Gdpe%XvbT at hOVtd=;nGU}?BbW3|c?4bSpHJE|
zlDBpH=-U0gV&CxB0t at QzANH;>c!~Z85ZvG0&412Bp}xmYLYf+0713mlhC-eBc}<nL
zHic$d3q-n4RwZQWzS)%Bz5OAnw4{GwmIgxn<C8++fOD8g{rbdkobr5(*?>k!zghp_
z8kbMUm6uP+tehg%IzyrWknr_Sfkcj@;OdC30*yN0$v(IeRM?07Dxc0&OAwRpeP4~U
z#yPOUiw^_dC)g at +rseH<@lNSqUYiX?Eg1{qCgoOM_-c6juuQ0+_s#)kkN<qK9)-)1
zWGJV6!hRt^+s+ui{xvtpv(AwOZyc9wjnVsSQ)H?wqsh*J?MeRI$DxnH-l<UEm#8`*
zllX_haA)!T_5!o!ryThScnXen%C^HvB9dFf+iTBZ+>}k>saS09%leMK8wx)xW0?Yg
zEq4dQM_u((z!1lCkdp(${rq&;z#iVkCArQ={NvMuU^8M+eDW!=j%`jdzdr~@KEd)9
zyuq?{IO>!!>U5E7uk&nkw$?q9#!miGPcdZx=yNB<#6SLb&E=HSs18aCe4u%>#{Q&P
z%yu77n+j*2fRwU8xcCpa>_$)<N~RhF!hZj6AtwkgVD{ZniaV^s{u>%W6#=#$$w_SU
zpIbYy>lA%lwo+2VeREjR at Q=j3_^8I6+iS*xM8iwv)U?e~{@pJLf;&ppi}3Z$F9~cs
z{$+1YQa_(P-+KJu`M;9?*!)*g^U&RlyIz>1z1ZfHAGV%su06ik+IjF8`q0OZH=pdT
zF?0=mJjpd-<^f+gQCi~WToA at M3|G>sehv+A?dz7mTm#`srtJPN?Xd7Z1DJmQw|MLJ
z-P at V_zs03H_dehMy$`OhT4(h;P{15=f{6b<ua?Sv_!(ur`PEl*@HUtGILW4<S61p2
zBMxYCF_rO)!JWKwhr+ED?oMdYfJaQE2)p;MaCyam*K+L#JA at Nj8lZ^VkkoPq{d93v
zR_h*1)pt;j at e9&K3|@;H5<F)Tf$e*<&eLcHDSsQ at blv*a-E_g1yp=3|yL_j$e7lvp
z=>kaK!=vssE!(0M!U3a`CSqO+8sxi#I0B3=*>nxjR^}OcGyRBBGGUAXmlIh}bMuCw
z4Rc#S12CPaRS~6_?-(lP?Fnx at YidJ`7>&6)_51V*s`=2Zu&u4(h6?^ES_$4<b{&{b
z2_ew5G&jZ=R&@xJ<)%X>0nxC4-hf-|6#8*CY-m=YY%+eEz!%KPHIrwp`p^0^OyqKc
zkpD6oYa`uv<-Z>XLuKago-jaxWq{BO8TsBYFyza)sTPQ^`15EB09n{Uc1yg>11o6P
zp{FX5oUFf_2-3IMx>NCpG+5o_?$Mw(Gt68hP}XrXUszs{_&-cZLUWwn(VYJ-^ISj@
z_4}I90i;0sffeXFshP{e*%ZyqGknQJ!G+B+lr0YA{X;>ci!`cf8_>=e#(>DHAs)zq
zQqzT%dVOL4Q|zs+vQ+un2Fza)<tpnDhbYFh1{IIF#_GW+Y2Md=Lu5pm9EC`m`9m-z
zy;c7)I2fO;=)bLo{uP=F6&PHLci(WU9 at JpS$OJ(N$!a;<6VZeNFleEN`CME{@OL$d
z5XL88e{BI2Sv(I#3{gD?(B6FS6#**h+Rry&kRd8r3a^Mq9{Me6CA^IxS&DI^GbS at c
z+>E<jggX$ksX~;nMMp;<p}19$6JP#MAXSiU3DkV7@!q<f;?eA$AQmmXCLMbevH&rU
z3!&1`um#f<MprUjZY&sjJeGK_w27JL%1<0d|NmHotY~*DiT~8;9>PO(A7NAIYkXDt
zg5 at uf|L)w%*?%oA-TfT@>3vXr<vQ;v|2?C`FiIZ2_yO at ONFQKmK`?~uM(ZRID-c8i
z2E48iT(RLDaEh{!AQ1^wiphJ%GN<`=_au><qvT-t4#vIMC{JK}3$xNw{2?<y$Qk%3
zn5;+7Okr#k>6U1libnp=@MJKC>HO-{AR6}_#A$IcP3;sHzX{@E>n;tWZY?d}zB7xs
z*y&<uA|smEyrC)<MGr<pOf<<-R&Q)PUElrJvrU*8!|nCii-+4=>q({FZ2o*}z1iH@
z-AMlV<L={a$dHT4E+e at kIxOM<_M6SkCn`TxoO=KR5x%|EKnTI+?(^n5w%1|<?rUA{
zm0j&dXVR&lcj@%qX at 7v2#`$Ji-+ue8)~+Ndv`jH{t<oLTU+h$5zqcRv=g<@cQlJ)}
zRrnjfrYpl*g<*0lmW88vgb=)V(7->Hgm?caa0*eo`L3=7o4E$WiGeOA at 7WS;43Gr`
z-q`i-Z|A)?Yn62sH0!(Qz9P~C#7+cshU5!h_0#?e9U~Y%cC9xa*1!4Y4x*M-AiU_v
zaxo6-Nq$9Glmo3Yo?Jkd*U?HZhvP9&FNnGU>o<Nm7<MjTN0_Jp#3x4pvwj2z=l;cV
z@&G}*5MBMpZvRbp(mQM;TnY%Gj)mAe3gWj^p%=_D>YpN<@cF6j;%xDxRo47Z-BG7K
zK&$W3PoGgXGBCWwCCmvDcOAg|GQ5Jd!*E2<`1w+{hPyF*&1Svs(9#r~fjpZ^RG=<m
zC^<NmM%F4{K9Y}6aO-~248ZFEl_+(hG8Y^$GC3I{L at Q1MlZp!ziqtT05RJDvo0;B#
z4pBO5Cp|>60U1;EzE)w_Zwn18OjJchEKQupR+8`TdurK)&lQdL$>$h5U^H>^j-w at z
z96Zr+n$>pCkN1(Cfi*~%eXPiP2*tp#(QB2~B0`NfNj|LM&=d*P+F}f}a!!E-5ut$q
zu6BnHck~y&y~RX8V$^twa3zS-!^5^#W~dUx=~4tK>k30DVsFxt7LP|w{{CQReQS$+
z97Z<Af3Zy<@tGwclgg6)0Zw0SD>Fh`pAi6pA3F{|p$st9AM&UT$Aro%;zHbSG#Uun
zjxS&>aL2O-m}X>*lkWLJzX!)xa9zs^DA7~S(C%bINTBoZ{J1tx2nfK!+#iBe2S8Q&
z-~oh8Vtm#;#F7+F5mgcSUtn<ZJ7U}0vCqY~s4(+cw$p_Qat#f{m1$0*J^0Y>k}FDb
z8M;XRE_oE@!H6YF;4&XQ=DD?~u!P$ek=^Awi0b%LFy9+Q`-m3-C$L%-u2}ov*1g01
z-_8;3YrKDac8Cba|M-W5tk1p)x(TlL3}l?nvoU-F;V4>*-{I`Z;x7A8{DzM)CY&md
z5eG$rz16Cbt14se;=j0xYfK&)Rcb4=n!S4)<_}zMMF0>1SOkDG_4a0h7<EgMX{6eH
zl1jx>jI!S`t%#z4LpuVB$Hz;;f$S^v58|+jsNy)PtWdZ?#0n0!Q>>5(jaN6RZ(C0O
z!FgLrHM^kCsB}9Y_^fA=8%DDiuzh~?P?qcIk|D&Xx2d%S(L2J5O&E^}f9GV{^~}9`
zcHb>X&BB0HMOdVSz#@5T1ap>S!LKqsr>!=*U6Aw3mi{@kalz@}^79`gH7HakhetU7
z&EoBo?}VFtdHi4a1}){{|F%Bs|MPhK7*7!Y_k28(7{Ktz=}SO9)tkrDp4 at 5O5&sYu
z<uhsBSzcO{V~~XEWCUP%+(D?0GU7SH!O>9Okcc#5F8y)pDi7BXhX)r=w-zXZM|Hi6
zJAFM>T)>}m>P-jalB^?L?ji&tonI)XNtoN6-Hoj$kc^>Ym4LY-zYP;Se)?ipsyq}Q
z#^{_l^_U3YA2V4 at aEg4^#<qnR@!P}m;}iI0;+#AAesVNE;F$|OsM@}^dVe9A`{N4)
zjF`vTsl9yr^@4tVx%Uz=)?QX$zG at z?By(Sg7{D*s?mqby>kR9kv3$Cb)6$j6aJv4d
z1=pin+55kH_wIha|GP4x-=o5H9HUS->-rb at rm6Q|HfLkXD_ny1(c3NIe;Y^wyqi3K
z at g&*(acd{pS%1FuY!{(nBX_%{<iV4T<iW$IKW&P0-xeYrLf_zh at 0e~j<z$z0SC!sG
ze7M3tgidZe-DM}PND*;Bk3zH~PcT;c9k=_uj>7>JmuZxiaaL(C3nKF3y_Nh at WJYba
z#<+=zT!qrhT2>eoT?~RTWL}#K=jDCM6ST%QMnB*|5YQY9RE>ehu`xIUiU%daO!9QZ
zbKDqbNl~*Sgsr-b^C@`jWHjs(<oCh at QRZ<W1FvA at mE@GcmoaEq$Y5N;qm`Z8<s-B9
z`L3JpJC*PYrL(|(uKZ!8>v>IH+9kW-e^IFXh&NJUc;{ZYUxp{;?d98x%S-U2bfNND
z`8r;dx>icvD3iI3=TDynH%b^kdBZ0kA>@~pIcFhN=x+Jp9Vi9pXQSR5TxcUct|0LT
z<h<X77w7io`tD8GMj;m}{%+v+?&i(p#WR4m$>ksWi8i1(ekw<RDk!h|y+oWpfhy<v
zM&?S{vpabv2-F!{nWg<a)u5~gyE-OuZ?z&jvi7;8cE_r>03|T(68}vzBNGR#C+3lv
zu{-0s`-Ktw#X at arQRf&rQ(5P)A(|KKn#O9e4O&wB1tWsVSwdBH&fM&wbAcUy0F(b&
zW+UY|#bsGAA#s`XoWREo83}0#*9kU$g>&O<GYyR&(kRe at r`Ei)bl{!!tngF<2p)Aa
z6_=|4mA1tL?ma36ceGh57Z4X|4w<r$xLC{{z11UV&kU|p29P&@iE&s;o9o#2P6t?w
zet0}qM8-Xzh-ST8SP8w_`#`G)J%s<C)Ry3fGZVd%Kg>=~^jWc)x|FbIEDDcK$(i;`
zGQn3EsGOeFT9GBK*uVzAuvu6RtI!Ho+{|@!webBWNaGhr75wV~C?yBVtq#?H4jn|!
zSS6GYO1y`0vUqY0uusVDGb`!D{$EBE^#8K`fC65ds!FI>^IL=UDXCv&vTVUdYqxYp
zo^3qhU7<K}L2`wV at aIg7!SIX7C<Qx;FQC&B`Fk14rmds2Yt|KNI4k{GYJjnM|EH^z
z7q5ib*0^;sJ5(7~AJBHw{KT|-|5KX|#FXi>_KQ7`wQoPPky0vqZWJcvJ`vBCz9RR8
zLO~@}=si}v)}Nj68++N;Fqj2$s$cAjvf6)v1H%zgb|UypPHf5+g at eP4MKfe!93!*E
zXMru9-`zrwhoIz2$Y#`p<daUm`redqdYw8c@(CtB<K{C1gP3KGE}4;!DtD1n>%`-t
z4heM%qVr_^eNd(7w2&?K38q8cg5-o~tB7%UL`G6Sq2hPJai|8-Dp&QyI}#PWj%Tz)
zuD)bK%bkioxeEI|w4R@<7zP4s%=-WQI&NB_YyQ3L{txfd`v2DL+l$cu-??VLGgbfp
zJpbp^`R7p*!7;{TYLOeij%Pw>zR)H2KeukR?q%lx9#X-6zW>Q%^20y5vgeoC1M!AJ
zZx)O|Xfes8p%BGs*NXoqY1`T?IYC+8x*dfbT*L!f*S2nDtZTi)Rq_*)D~Tto8W<~S
z!VL&6%sA^J+;!Z$vn)%72aF{S)xMdy8F<dB3nq$)5Q~JV%#n#Q8dz2v6-@>WV>GW5
zbVl${OB;}hAHy at ZOlqjVPaw>4430ZLNPu`;z#wrGb-u7e8{%M&+_yMIt9O#sYEXht
z*5HSMFvKsg{vM&JYVz-Y6Lx7glsG&&wq8><ND%3gv+>&wBEBJQILwM#!Ti$RwM40j
zchsZrpS^`NOi=i-B1 at SfORh}L`X}m(_1BW6&=}vjzVuxcH~Q)RSj6>}D&qT7t03Uf
z&wd_lhS|O9U`T?jzS;|5y=piQq}cR|mRcUCzIuT7RYRwqbCE(Xfo%6-%~1PwZ1~?i
zJ)2xO(<Z*>r?_z)sc&3dwzRzdTU<*~_^NS)L~LWa7{*l`6(6->L>1n+X_|GI$iz|H
zbqe4ZfdnCohbP0y4hT2{U~$7XCPgzzF(N`XUR*5&&&;)~vnwIcyXwI-jTUNj+9P1G
zotZpvGl0_vCcwXSww~2Ae^{u-R-VqE)>AeIom7};0qlqj6E>j{Kb_97P|$NKFiAwb
zFXL7Zl)2Q5NpZ~^x`ES<%l8L*8=a2#QoQIDuG)x%V#2E8@|yQ?Sbr_Q>}VWntpkzD
z1NW+0u56hZY5j=SvdgQyvE2OT7l*SdEr*|Ip9Ow$PAz-c7|6(H7(>+H?Bj3)OcR+Q
z2n(^896bTdK#eX~JCdY~hBVCjI3)Svtn*CUpOq>B7ZEEv<cFh5?oVhH=4w^XrL$YW
z6=^fo<m at wheF|mAACy9)24^3~`%!324 at E@kg(}NuG6rWk6s{+Ej9p0V(*xu+QDHPI
z4q}lAbCpa7bWyf~#${u7gR)-Iq9BapcN`chTu?BzP1BgHG!?cxK1OuUF_|iOuPj|w
zYq*e~x}{qw@#<ZZ3XMK;7EewbKL)E#YAoe^o9WujW?5k+$+$I>wD at wb_o`udGcW}X
z{6jzl)UUNWmX*7 at uM=9?N0LT*Qv at KoLpU^AI}Np at hlx@R=JWok4g#rEmWr5FjL^cJ
z6B_+tn{nqcnY=dQWTFzBKbWpSoN9y;+Dv1qp~rzJk?rHRm`1H)G~kHEjt*?z`PINP
z1P6w9?C5~0E~RUATBHSPnjrK{R7?wf!}J=mXCuEA?%W$EqptJi;#Bq-vw$CzfGriI
z`KL#<>US0&f^S$1(3q at Fw94S*m=H)uo>M-E35>hD-;YCC5X643^NzhTWnQ%3hmJtL
z;02w7lw at q3KwubL;N7de#UKNqV-b%CG(V}rGFw+DuXq0cm%VRoYwJkX%~$7FEbGK0
z5o3Y47 at HVpFyMq4V|xs_jg!q5NPxydVstSknf>3-`&M=JWvwM4Z0B<JiJrtrYjsyw
zS65Y6S65e0uOR9Z$NTyx-p+qrZ5^HBh!)I~Ik_em5ycv_mh>Y<&sXu1vg_7W_o9WB
zo{V74(sreTH*Pwv^&zc;TsLkz)S01W?Y-E at zlb(4LI?*xLb8RtcJa&)?V=pLQO)i~
zTp>*EW?&DJVEyNAh7<k>CVVRguy9n9=duD at MQ>~-p8`jx{2UIc9WbS~P<Ob|U{0-)
zk6=o3SK#C3s^&#IV#?SME?)mA at C1U{hviW0t#vlH2#cgT&}ag02i?xb$<S8&ad9MB
zL`IV%`4<PV9L3O_o7-MHxH_}sFb*QcCJY19V9;H!tCI!f1G*4^miHpO2dQt?5x4eW
zf4qKAbo*Z at 1g2&qdT<OxmP!VoE7L<VyRv9h+phtzfb|@j%sB*sma9qod=Qf$o{WWu
z#JX|qpliOFu=1rxuvR*8Z_(l!F5qOGe9^=pAwo1~vzaL-lP%{hnb|pO|JBU8q7%<0
zTjDYpleKF}Ah<=SP4;H+c at WL+W%CL~1!k=Ld=9LiqJ1yE^H?n(N*_$cab(-P at Jl|0
z)wD_9PbE_?tBHk&@!<FCO+2enF!6{55(^!l?I2)Bq0xe)e=*1g*~$t91A`}1-(p65
zT%xygu7P4_UK_l4>NgUFmOZcJeJTa>af(w#1|sIJkMAJ=Uk-8V{?D8C6<qo)_&VQz
z^9S^szW=khytGu<|5^O={LgR0c;bJA7TxT2kzpV^@5>RA=D?k`!-19I0%l%rpWul7
z)@abZ+r%;AOYU4?RUPYJTPkI^GZ4AQ^!R>q(!SsOd;4k|cT;Z)h_98mYHd at T*!alW
z|M|})RyzI5x`0uIL0#6z%UZiW931bc2k}4uk$dAYDY+Sl%ItQ34q=2$7N9lxtdHyE
zPoHyNh1X5<8iGv(?pNrQOkeFjfBDTp$#XrUP$@#jS?SJc6PH=k>1El(ohYOFsQ;{w
ztY=$@=&#KMo!Y#>ePg)7_DyHB0M!ai?%`0tFMc*AqV4)I2n-r=zXx4C>zs_-uiNc<
zv&$bT63)q=f<f7da3+8eG?aez4jdLnLU~T=Yx2B4Ue<>f-Oi|1Ijlrv$7`(hgub%+
ztjLa)EWTLv^%4^3f%bm6717c+!JR5CJD*)`@LR*YdT_)K-{3;;9<ut#$tp6KuHmIR
z=8UY?*+53O&Z7qZMG`l8krHNzV^YUwhhTDXLC56hRIRTu3UAt1TgV8If6p?<7}jk0
z!Fu-Y-n}ofBb?lN^97Hxk1wP>7O{^M#o3?i-QBx!QSf%JyzuhcdUln<?Y2+!f>VRa
zzly{|6iy*aCZqyr7aO$h2Q>y2Z0rInvDl4Bl0$tONpgr!CrOUf(@Bye_J@%q7|WD_
z4wHOVgzXM1u#K<qKg0n4zEfpGim_nt1qymY2 at 1+-tS48yts2BDlopZey~uOgHLXdz
zi<JQ8<_(8&Ckn(sd0Dt8+9A2kSEdcvOz%ay38~d%4O>-pnRrxCOJ@<=yL1kNx`M{`
z7jB_N(ofyO{GUH#$bOsI|C3Lq+JB=XT#qL~9lxUex3qe{82_`lvifKI&u_s49~l3G
zkQ?!ah_%O)%bkmHe1^jo*w{@Q!o97hW)rqT%+Jc&iaRm8c5m at P)>vC#ez?AP-=CPJ
z4QUzl_WG^P$(5#haOa4JjM at Pn+&E|GEYfDtqd*ruk4ua3+HM&p<}FAZ3VNZdXm&~V
zg~GwFkdzz`uwSA1ytFvi)02yzw^o@>>x`jNbe5RcLTae)W7;<teKgVQKsP+PO`ii3
z*3D-?<0;|IXK2B`;bczd5DDK#@vc5>b*_@*2?^E`H}#Qp8$m35Sv5P0%ACp0;4*jh
zypQ5_m62aVx~I;4L-<jB%}0h0AN(}kx&A?bC%U5Dlm$zyf_q`HLoL)sUgw?X-|X2>
zIVFFN(=lKcgjXyrN|L`OHVs`Q7OHb|NYBq?Fas5iOo~Dqr9W-ihKtGKc<}df?l*$6
zgYj9?XX1A#)N}(_BrFIyrN5kvf$t0O#31RWVC%wFB*e*3M8>Ls5={*HjtB<K@!l8)
zBLv8pAZm*De=#jUABhgsN6Pp-j>fvTP)Snpa*4pU{YI(agn#09!8)+Fr3R~Y%Wabi
z1luOHiu{W)F6@@Fu-`4ky}5x{R+A;@M05BSabiL5*+Lt^fb>tz-z8M=1E~B;+0&Rn
z8NY?kb4<57_xVDE)`UTuQAjOl#m8MmC|XV~`2OvycE#ze36V~wr(&0!SKZ&3r#IHr
znifJC2f>?AG28}?QV=@zO}T8sxQ3lb-HG)dQov1D>XTIU4R!Ch_uOe;Q*uzcUIYG0
zs+QVeh@)BE?(5LjPoiqWZ&9`%LH&MMV|if^zK&Q)`DW_OqBGGU&f-J!s#5d>p1M(6
z6o9FqW<zy4iwAZ{n4Eg2)x7%RQ+_!IS0gNgU$5HDfqpydkKMQPPH#Md6Q1vf$UWFY
zdQ^T#D$C<Hh&`gaei6IwE;jJR1 at 6wknjdPcg;LHt1}+vxF4!~BKvtFsyAc$D^qOs*
z;>xTVl!u}!*-!Cy4@<~&I@#7i5gHz1JRy{WA=(T6 at Hg;`(rxz9oh{dynjkmCJr2Nt
zw>gMOLoI09*Y%c_YRJ+W_v}lqybVCb-c&H>Uv^rfvyGL-#rZSILA!zE(DOKlJ{k`<
zuG&L$ToKEs(lNLlp;~Gczh)<Bp$b;`b@{<^ZsE>)I;Tp1C6%TdtEcEk6O*bQs^qTI
z=(3M{Jx)8=%gGNJLcpVfY_2JZtqZ0n36fz?O`)db)N0Si=S#KDJQZY2y%TU!je$Uo
z#q7(hx>(KDC7Ahc*3o&JV(IG89co|UolIk%ogXL%9-}TF at kdpK>#JdQx3_}CN%lBv
zECC7pv!0zqE)Xl`{14tZ;By5Gxta!cxdE{F=cZsOkkjBUtpG0mnH{cq+DiJMa-M6>
z(M{Ar?iG9Q3Ag$XnBbqOn6L&v>REC2u+wD-DZ+zaheyf9cKi_hq4TrflyypEHV%e!
z47;hCW8m;@ftwlF26-R0caaYRB^!&5jmX8F;q&J6S_j!xU7tN1<#eNjNLgN7rcwua
z2cg?<Cc=@v^8&g8?40pd(i7nsholqPMGCD-Z}^5sRcxq<B-@`vtiwR>_K at Zs2WEao
z9Gt1gX!?k7?4YFA$sS2i^)}}(YKGe)-SQ3MXhq0x at F1XS*Bu5r=?q}>Q}t8n^F2Qt
zph%NrKhf)6wL)WntRRep;htJ4EIlT-p?VtXj13YkIZIOno0LmjmxRqvc^{H`0zcms
zt(}o`Wwo`TopakLxQD1j7qX6$fNL|UiR~2^h-U!pFA>us4H!$sMT?b_LBS6Li1>Wn
z%BikT!huz(Ciyp#JwgIL^Iib?KL1fGr&zCXO+D3=#d=Fq>IHAMVNrZS2C%p37*y_=
zMPTpw7i{i-Mtvt3Y-g4CU4=xe<?Cp_VH`z4gVumZnfsBiS4QX3r7!DG03^KR;%^ar
zyE1np^pn~v^Gi~@ydx8cmO!}gAf)0;?2Xm<Jt9L=`@zK8#&FYWHx?&WH@=%%eW|p1
zV7Blr%t;)RIeLe5iV_})ev3NATapfbq(Y!%iw76+K`<_I;ckQdY!5}Bhe5}l)2NQ!
zrl(jo{(wgF<%~P6+#Z)H`9d~=Rw&<KSr0jGQIB*Wq6bRaLgMr5du9w_$b5~43di4U
z+^x`_*i(gKHojJDUshg8G3{GHxG=-*X<P(6SbieSO>atE7`e%=K8Hx($db-RjDN`%
z*uM31WJ*}A^r*-V2Cb1(BLs)7;~Y3=29g>5+9utPjAsnJGHyb_nqOiaLI*ZYWjbml
zEx;U at 0v2yy=U`!KBS{>#Km&0TxYAc{yup at h#m#&$CLsouin<gQ<XRBPc*<CRfxr?B
zLw%&X634h(0M};Nm{lG>8V&IO8SDzK5G$*TcPfwFNd{k)2AjVo<oS!|I~6!F^(u^w
zinGvg4 at bTl?w3LA{zm0r$e*t{TGwT)xSyZeS6@^f|E1eR7XB|DEi at n7NebV-3%BXu
zk`n!jfCUJuT|6Q`@Pb(B=G;cbn8I7flg9AJY7Fwn>YOvbN>FtD12wpWl-LR`B$qV0
zBC<0?(@}K^7Px=UTy_`-|HJx%TTP;qBjV+Z%SZ1#J)HMgW`T_gUFIEnzAAuz*Td(N
z$Kp;Wt>iQWJ+*xNXh9*^h^e4?@GiW`-rDo*(WC)o%tdiP2Yx{FjG@=A6rPUGenU=l
z+MxvR8!;lm7$5R`jt%)Jp17~&LRPp56RLfKqe80~0&t@=cvpX>_cnT_WRc&SCxu@>
zA{(+#ACU_es1z4OV^RucR-}%lO+)ZPO%BRhK|?s1szCGNTAsT!bz%vvpmDsgIe;^P
zuR+{Q{nJM(>&tDLO2Hf=IpCA0;KL~}M-vDo%&=iCOapv0p%O4^;7S))QSGak2*5ia
z0o-?c-?iIs01QrABAX|G;W&j3t;c#bC3 at bno)eUZZkB;6E8jvxNQ_v0?NFfwnT7*~
z8`)Ys5wnGavaVx%ZXb_9=pSFXshMAyK+Gnb252YWqqQk<xMqR<-V1T;)qdOLd54O5
zXqzKAb5?39=J3|uOI|G1JhnKpD41e#Us4S2B)AB!;)QU*4rJ%AMF2wuH?BCC%A1Y~
zlr<_G#g at DV16svF<YjW4U!8?xb7(xd63Fp*Fu-0JEjE@{>?0!)Tdas@{KYrQI(jn)
zfIIo-vtXQh{=v<GAfy%sK_A<E`D1JWsktO;2u#>_jeIB%O8;09Z9we^70{#(f-rbo
zJSR?&1^- at TVyfCH6F0}vzCW=RG>wzDL{Zo=IyP?iu{uFS2a@}1ki2 at m5W&{}Qu;7O
z4(MO!kW|H?=J$O#%)a{~%9e*=vdzxXxz28veWloFmm$@$PnyXY?j^9*cn<)b<t_jN
z?j&l;Ks1;RWjVJY%lyED^2V*<U_-jSF#_aA-nyk5F7I}`W%|x5v+5(+Il|7FS#d1j
zMiwuN2E8o|*pZ at nFZ}vrmF8q3Krkj at t$5QvX+#eP(`aWeD||<%w_Yh($#@~-Mg<r7
zoj2cUJc9h{_l~;b0SX}*v6|u=K|iz*?_-bWl at f$KpZ$o`8Dknw;QWZLq4XF2YC`rQ
zK&)wfsV;gDLb>pGJrZ<Jw9p?N67=X-=#Ro?kMvvUll}%5&Cn}@;(*NDGi9e=r)LVA
zJ=1TYXZm}#o*5JeB=oFg$l}YcOI|;6$Jd1^bvc`Gi9R~C6aJNjQdvqCGl>8!#4_l$
zSg8hOJ$}6612LRC16mpXxt*$4a*$&Ps|d4~-0oy6`NCc*_?Dgkexx+Jk#3YmQ;`oe
z8sR8E{6VUWX3^L2M2sn*$LpUg;Q*ZCzT0O2d+lP}iJ{7U>XBu<-u3mB?`;vELKw~j
zLHVm3!W4R7u^%>6Vw#ZtBr1I{vObS>4@@lTA7$e8oMyuIe<Hs5_Xra3LJ%g8QX35e
zLjzM1&-)RHFq?!^^gM at 6^kxDc(vCAJipH-*8R$4;SU at 1{fh#Cim~y%DJH)+DjsLcA
ztl<ZRe@{RE*J!M*t~5SrEUqmf>0_g at y8Ovv<318V{u%%Mhm8Nm8MpQTOEBXN#3B!2
z6e3a<jzZd)vqpg%05TW0@|PEv{k2JrhgswP`s#!ARot`gu1$)A!2c?dQ~&NB@}N9T
zIA~%15gZs at h|47y{>@21u2yE4Ivz`s7Q9%HFDiX9NtD3zhf!=Yl16d%5pIMtTwpka
z`RtN8%7JIOT#Luja8)^%1^pgqV#_kRY8kh<AaP!Nb;u`&9)x-`a4b^&7S^WL*W@;g
zb|-wq0X4JJ4$fG*yq1WYs<-QSXx&9a_%B2e*}+WL8a1IIPiTrh>0?b?cDh~O=Vj<8
z&`2wOgy8Z`4n1`w^SZ)P`Ve9?Du~5*2oT)V4>*Ydrm%St^VC-$di`*MiN(!(dIBhF
zu&P*%4F8v5Xh{&V4#Cuhm6B2iL8uzbAbGCPZWJz|blK7Ysadz?1<`qFQij)u5OXGt
z9`oF3fdyVW;>ZF0pL|uKtCovS8E%TXw!UTCk$Fkl*YS!c>k_zzg!WM9BxA;H_<g#}
zih$60a0;jcM+bv-DQZV;$iF0CQacjtSV=A-tElwRaMQc=O#V4aFzXmV0`7rZ;}|z|
zzo9XQOY+|M3%p?s at s{v3mn%yoEMcrJ;tnmKjnYI at v`|>eYuBTr7e4W8KjS5WUR#u>
zP}JT(L+jgv{>Ana9?ak`No%$L at 9saw?ZK6W2E!Zys|0ePzepjAQT_M0gBWHk;iNes
z>FIc&G-aMW89UU5I2<9;6{j^wD};j%nz&GJfD^@68FXjo94CvJR#s~2xmS+38>7A9
zDK}@Znq?AMSpPWO5iFEJb6O%KM<$K-CM!DjqYmgGR$jY>K5Q6AM6D`mu>P$6*psES
zmL@)UmaXekP|g!9*x at nom}MQEB~6wXnSVjae?^!e1y3R<t_Lx^vXqF00ZoE?-E!o;
z1Ykigv|HGGcChp6f2k1s$^Iqm|Ncxa>e at +a%<y?hO(qFSXIyx?bcift;*y-Un4EI0
zalJEhYb;!cXPHxhB=edilG13rP`a^jmS+;0MJ`)NxP6)p`-n?aRBa|Goma4U9J*YB
zbmC*yv*I6R;@A{oQEK+Ip=hc&c(MIr{r8zLe*MWI>ap{q--rbq-4fkgW}UQ=UIeEw
z+#o`nipB^}1IVPwDOGI)qz<KRphgJJGIWN$Dz58gVw5%xT8gl^84os)nm1+I-PuBf
zH5{LJM!W_%BfJwo=TEhQkY@#S$~0}X&5h)I%=Kn875ra`;X{dJ^M5U6?#L{1>!S}~
zZfR!N*2qdZ78fwayU1vEq!ZJKtp5~9V%rti$fHIi16%KJE|nQRu>s-utzgl>%sK$k
z2W<%ZF`SKd5Dhur8+9C<RAv~CFE086VH7AcuRfjN_^zm at 2e}Od*qoSOKJ^LQU%!YF
zq&l2}jx>BXyZ4xpz`XQ;`c+P_4%(+UWR2sS?=A-5aXgRC3<lWfQr-lQxjtfUj}EEV
z>x<!bL_4i;4um+<_-n!JJ%qil>(*E8)17x0wQB9Z{`1A$k3SASr{#~ocWeIkVg8!?
z(rz2ZFQ$;~#M`X|&GsE=q?#R$YB`b?LI_z&lQBnVmjqNBzhO+UOJtz|tZkprQX#Ri
z6>)==%d^k7 at o_gR9Y6B~4r_r)D#Q;_R44k1>yJ4<;GS({h|iFu4#8O`Oq(<8AO>zu
z^4wukrvefG@!(#w*X&+l?GOWjf<O^yKCH9gsyNATKEHF)(HyjKK?o at pE0?&QS#Kdn
zVtQEn&FsI}kcfNmxp<A*3>j<C-=j9}FYQqWqMg99VY5*92`Thc=)qNoi#fjfuSxt=
zJJ@{kZ0A45R^+_`UlqYO^5DfbCx;3+eyP>|`}KeQ_fL2Kd+tBA*PHkL*}V7j;=PB5
zpZ#=qj*Z-P2+h#gQob==4-m-HS1<PPw*W+>ASFn-H29Gs&oP8JsnmF%N=xOHVx7gt
zNK~6&`5T?g%c at IV$a7zdixaY%N>%*xWtaw>?!=UgEgdF`W^G+WvNTR3Psp)qu-5ai
zbUkRViFv#l1m=$OqNQtWySr}YlnNM|ifW++j|t8?;@BNl=U#ScR5+**7pQQTLLXw8
zj2TsQ&RW*w`g#-+_Nqv-0|f^k&emM^skx5|fatcs3_;0<v_qh==iGv|OGTl{-Mkk>
z3aOD`WWisuT}+w$n6s$Yqs~#pG!p3o+_KMtuDJ+h)-TL=e8^7-FySxKg(8+SuM+wW
z+Pu_9$=m9SOT~OV1mQk_M2ZwTTN3xe8qP5?aSHfYvqV;NF(Wp#^r2yH!m;NdD$xvr
zX;If9##VH?X-Qwofl@<ZI2xb0T(1eueQ79T5~k{EsabY&%bGBl`!3kf0v2>~t~XL%
z&6XY$@l!bUjak&1{T0Qg5BYRQppNeZ-=0gWBJ;MHy53~fS;uuhXR#8seP^GV$!caQ
z^@wo;c-;v`lr9A?5C2U+AhWBGw^Z}UH6YZNkPdka4m|)7XSF=3O^%ww&ar3%HT)>K
zIU96#6SOmQC=tg<joWr5U59hf&^%!40v=gXwS`uNLpwMSp3)r<)C0*tXXf;zFapsK
z0TSipR5;fl7BtCCP=t59+5K2}M!-HgvYpl;_C4O5HwSM%l%xr$fGD$0h_6`JXwg_s
zr~v*5bF7kI{{?G*@G3^+>;h}D;&OvFRNQnV2GjVb;Mn at hUy@0gyg04CQp#3$wV^`}
z>lw&N>53`Qzy!}v%BNH1C*r5~M?M1btMtJ1$TVe;FwiVrDNzIo49B&g`pvl34bw~`
zpEhWFqIw4e;4BuHCvP}iGyIT}t=T6*Wgbz#HvQauI4LQ~#P9e$xMNCJ+NB*4URGa7
z at I5#z&E6|pGJCQGK`^N+EYgj)yiMu$p&|_*6WtRgY-1Wi>MRfkAsif*K!9(3rGoM2
zx*c`GHJ{L<XjvuZL#b&c<Ib_vdn>Dci<}FHHt!S^lSv~AX!5ItQ|i`pCQxwt`H(n}
zRr1bp0nYC%=@uAR5+KF1dy1<Cv4XHhT<1b|I=@Alf-p==cS at xX(#r$PCd{E?5-nS$
z@`Rb0W2?#rJFFl$2aq>ht`>exj0}56NY2=TP<<EO<vGQ=g5~O*dcFtX1~t~yu|=yW
z($B;q6}h}7!*nRzP4>Lq87h>RL46m=c+T7jV0F7TXLA)I-EJ~5nq^hm+=Q7-_KfpL
zXulk5xL%a(r<M$RDgVbiH$|sCay{$DHW^nXgo(j)`HS$E<34x3xdg-__kV++kgIoG
zRMGWvVq6afnnfa%qt#&FP~|d<U`DL$#ye(YYq+4X4Y^#}Uozli73?d0EEOz#m{7Hp
z4R>(77d-%v$syBdEsNL;$9Pb4z41BRq{re?!B2UI%cM?!9ld<a>4RMDcX4=S at F|ws
zqOKA9+c_VfXU*~GtUti%f|epbrAG7Jq#9CbqQV!lAo(@=e}v{Cf^a`U{`|I?SDeXy
z5Aly^zuS8ym%%ueN%cRD at 9AzGzI1x{rwQ+dniGlgC;#v>JIiB4wTk^41y*~0lVOjw
zwo~`OW!mlyUIP=iC{{CuD&H!j4^y^&&_z_nK{3#@zPI`P;kTR5zS+@*l(R1|iS3SH
z6fj(<>9c>KBWm|B;Sn%TOf}!7>r9_Uv}W^_W|BJ+(l9fua1$OjIJsvk$R4#vm*fx<
zhz>~fRVGBgW5!W=B(LGN=8wlR<k8NU$7xbW9K-n8t9qvePrA?}tVTVQ_vjfwd8QB8
z2OHPJMnTD5j=wg1q)}oWmfek1E+46e@*9z&4h|S(xr0P|l&dg9oX~a{ZuNZPUks1#
z6E)xV(T5>22XX at jvAJPST)cLYqV*CN;vvSgpUJhu47*e3GN3qz@(C?Q4l!k)+!#&0
zBSh%pG%AY1vJ?wV(gX^{D7($kGroV(^Y)t)7 at 3gh1w^nt{#lZLmt_bM`H4dr0s>9L
zEv;8O_<riSS9u at CBcGmM&J`Xm;Vd6VgCDd4kqc+(in;hv!YwIj{(QUnYU}IGR}wjw
zzM1g&$?ie2z3Up~9#GV3bcKN8xNONZ1WWt_PC^ygz+<j6Qb*B>gx0}cz6N$94?EQz
zJb(!B%dXd0&sHk&1aBA#3Pn-0*Xf)d>lP~^018rQZ=I|}ODua6R)<b0@&)@);45h2
zJm%#r(TG^WpxrJpSt;OPd@^IAV-2+e2KgP27<X0*Q$(R^4*6u#E1B#Z3oRZtD$xnd
zbQI#nt=CnB5hzlA%HsCKmXI2plB%Orak-dDGp&FC_KW)+#8%kkP#wW|8X`c38=yaT
zE-u<s;MG(2RVI$=k^4mpMN}a6Jz%L}o`L^j*ujoakLSD+t7m#Fj9(Tv0RkIjR4~NO
zMX(_=IMiDc+L2-RXvb?{C`iP_W1G#|D;P`@^S7(=cHP|`pI-#sjixoMDYkd0Z+DoS
zyEyb=*T86I>9xIGCap1;2_LaXtO>D3Ku|e$Y;C+I9PHY;TCoVR^6gNrIdl&AlA>&j
zOa{awhjG3J`y<!6u{b|LLIhEbP7W=S7m8kP>a2X3GW6L%5hsOd<$+O7>0E;n8S*-m
zw2U<oQ?wkVwEQHL6fsQ7K}1|?oYIl^wwC8G8Gh;htQ7p+8DIutPvqWmS|`OPk(yOY
z8S;-X`ow{{a;n@<7=6J%9sQK~VrKnw^yRQbUe)BieJMFp^%9e_oFCKjlNd6{zMnJ;
z!;g?fF1elJpTGd2I+W;)y1i5qerL(FMfL{`&c_-ZQx`>~-a}tpk5nqLlUYU#fMgX~
zzDIEo8z!Yz+yM<CJ^P3+u#M!@`v3vd;t}Fzv;;qK0|8Oayh#!(e?7E>{6H;w$n at +Z
zi?&;bC<45h&{EDk!l-ffV!OvB?l3#+oSt>@KO7(8KN!e~un4#uHI<xIE;1wvHGa9b
zdB}!d0g+uK$fy}jF?oVvctPa=LDq6&k(eN;OlU=`TaZUifMVvA;ghQay+^VJ)73Vf
z39p6)8=}h4BbNe;K<w&XUPhRl)BqB^Q$s>|F*j=ppRC$%QKb*ED(}6-P38_K<1JSJ
z3p4_kOGud9kXs%hvFq|2m63xmy(sRdF{-c$eqd1}R(%{@4;*YEhcrC|dc9{Cwl|Lg
z4--sXF__9>0NF=U8NP(`K6nSWFAkDQ)Gyeeva2+4u8qACYh|x<Jm?SmC!-AO;P#-0
zyAcp++{IDDLA8KC8mEs!j&E{Uc6V?X6RrE>bL3&m*3;sBrt4>d40!c;sG&4U2{>;Y
zk^8-XGfYJn7Va6!iu11|Dv`u8g1)3c5cp9t4wef<<*$50=)ld|;SvE^Vtm8iA%-({
z+B_o at vYh82AQ8TSe%mgP4s at 1dm^#>yW*)>v>>*ZLZhj%|95};2v_C{Tw&SzfLa#3%
z7G%CmFFR%BS-1_N4^|TO5^<4Y77K_W;YN$sNlv38rFGovAUf-iekNjLAHI at l6zfd4
z)UsFh7?6eH!J`vt1_ZVDu%ilkOTuoe%fG_r9th;rzSrq67IwEMMcyU=k1{Z at l5$)a
z;i~?(I3v?OxvfKKUogidu9|}gZr8<v80DLCRZ3z0k`RwIb-u|JR#zTh^P`C9S})88
zuYLEB#hl)^aAJbdNViK%mLgwXGQadBCWTE^KICT-h}>F{MI*Nqe at f@dtLODCi>I=y
zc~i7 at UTeTjS4h=X0%4*$sJc$k$6}Kg>+ at 6A2jeKtDE7UMC{)gxIPmM%&7}k2i^~_5
zE+=T7OB9&|9h-Nc30&LAeR$OFCKCvSR-WRXXS8M7pj1GsQm~qerwp2hkRK;|QAf at O
zo=ry+QzwF=OD%M)_)U5!R*sQPRd1M&Vx4qt_f-9qbk9T2ch6qT+C3nQ>v(Vmz14 at I
zrbpS2`=>qZLE4^2iI}kC%IvyGK}T*U4<<7MtNss?<JhV7Ubo+DZRCx-U_(-VFx4Z9
zk(?l;RnIl%G5FLpt%LO%hN{HLbAHjR8ZPL7F2%w_Iv$zt<O+K!YCpox03|waWj<?S
zQx^LytmfawHfq?*wc^~)&9dzmdk}9qk0_S1v6qO=X1Dta{iua1n6<pzkvXKBr8cYF
zILw(An6(F}CrM5%#-P-oB|xu=bx>jkbd%!jX0M+iJjJh((A*U2>x+<jAhA}OVgB?z
z0^b>oS?129(f3z>sn?T3&W`~1yT!IJ`gju|+c0J5?XxL!49oLVK7Ex<pe!8>$n=*!
zFWpV>%f0_aqB`#FLGS!2tYm@@G<M%tSiNA&7qL4^W}>1*1cl_K#IK^JnN5 at AB-iLH
zg0SBn4Hw3^k(WF1m_9C$uYgC&%=>|_1&<16C?6c;H@%|S2R%*7BmqQt=|f5)IDUIf
z;J8gO=I7Cg4fCH~ZjjZubjAXkD{kIh2*U^mk|sj3E5eSN$8SyteHizc&#;i6Qbpd|
ziB?WHekp#VN{~toeo%5q-NM$L1-BaA*-tEj(I^ZYREfMxc>YpHhr4*Mcsf at 9B9=$K
z>VBSl-PX&@w%Aj7;A(~kR2uRt-v0x<t#-G|{XfRFyEzwzSEHUe2%a;tlQu3kgkOWc
z4R4<Vak7!+4LWWzY7z!9pUR91VEB*;aG(guwMOA65xW)RDXTHrGsFvzuRaZ@)k1b5
zlmb=ik{UX{l#7keqMhs}3+ZShqfAIIWZb<-z$0+sq$6=DQB=rX<QQBedX5+h@%~(P
zhHdrlalQp|IzGg|LLRQT!!FTd;pQX`BJNWiNr8v`!A8}gVHt<=E40!&P7bV&u8h&)
zrF!<2_17gGmeFCaWO!&T0Ak6IcJ#cp^iEgRQ at xk@{fl@=(10<X!@hhGHEP)sQk7fS
zZBPVU<zq7O&DxVHYIa7TfALn}G^SZDp`j=d^A$N`S-OaDDHlg5Kh0e$4Y6FSf4+_2
z;$yjf$>fkSBi69yRTshaLTWGJ*47t%5ZA;oFV`Dfx~lh=W<MjTaAXsUY8zQZ{=YkJ
zUyNL)F9}G9mRgW?L?Ga!63lOm7s8T2Tt7nvUBS3*j*t`=9?`buRFC+>R#IHX<t5Zp
z8Wy&*O^qwy(&FU`9`3Y}bv$eongpU&Jvx;kGJaxra-<K&vvP!xaVd~7_3;Y+IbX>X
zWJF8V!>l9-hqY)9m1t)7dnwCahL`Khf|aId)601nr~>7$)5+UTGm}e=prQt+N43HH
z>HN{01T!G&1gE`EI`6PXl`e3&V!UxBQmg&$#YwG#n$S&;88Rd#gK!9cpC0W?`t_vp
z5c6}p9A34Cm^EI3;YXfhF!7UsHJqw*)w#&S?C|)OfsvfVfH82Y>ve;b`8Xsk28WWB
z{}Tmg5zJZp-PRdyn&G>}#?tc2>ix9`4>zA|ZSOpdipqMF<)dAg<tR*$-3fH!FBX2Q
zxGA38QxOpYjibJ>Y=R^l`-T)kJeq^eQSI$Q<34Fvczy at Z12ZLtAh>v?p20xC%3P;8
zZifl8$Uw;ZMz*DzMqkkV07<etQW<ku$}2iI`|-ro9QU9;>OVtHqrp~lh`Z!i7BFK=
zB`pxo528cj8MMk7)NF&qXu$Rp4 at 9O!PgEl*D<451uAC<sONA*WX<w#lLm(I at H*MY5
z3{A7qb697(UHKX`f>i?>?<X)#P)RJs4~FZj=HP9ow~o=F+58p>rkDm+U4{fiE7Tpq
zvXu%V$|TkdLXS9a-W>tu-#&)U*6=NbEzn`1GML)p)N0+%o3>oK?Q&4eaf7Xiqz}DQ
z%q1OUw<5Pd!$UOA+pRiJnY&Dr^uS?%!}Ev3|56gyLcv=PB<&Rw&Ekl`_!PIM;T#z=
zo+HrP_pqMrHLnmC2lBxFM2nJ at CJ!3=uBDSHI0!|>w7Enuu~3KY(9WSR5j_;#1zx9T
zGj~LY65~ePTvZ&@ggrYv9Q6-1EeEqs0*(&boW)}mhR?*(kzu8dj8Elq7wk at zJI|BX
zidW3tsdy!%qO;wi2ugV`KU?RwMtpaFN<vmk<QAJ$H;~R)Jp>U^%8_oK5<nmr($znZ
zbp94>vs}(LGLi$Ytv#)-<(fTP9HuN2k6UqMmF9674$vgcTUhL==1jSg01BTkDO)jL
z&roNbb;@~(@Jm at 9^7^qvVg?M+D at 3TyP;lKX&11S?68H#g78#iY?$i@!7 at XtCR=l~n
zS`SNPZ#$U6BwyH=$GkwZ=NKeazk(qT*sC{PnRptpDQ_poZ4tT{W^53lF~>Ob0}XA<
zFFZ&u?K5n^BU0w|F|MeN)*E55Fz at -97q<n4L<rt6N7Ek1psA#*(^n6KB0~C$ug^yx
z+?5e-?aD7TI23NZnCpgbJI4U4$^dR5td at xHv$HR7Rfcy`B at tZ<pVR+E&&u`QMp$+u
z<b*>icuuQr3*<_iZ#Qx~%FGW7cYNOaon4PxjGan4lKMU6{Y_nu#Y)cTYm)2HnlyN0
z*Q3<ZW1h~$%)WLR(jT3-|BB=5?ZGKb&w8u<81Xpm%K;218k&Iz>h#Q}F3fM;;5r2!
zyE3r^p5n?R<&d{C(&K!B(_7JOz$fxRCNTaowE*e+&3%|`UspsluYjh<N}v8JK1}La
zgd^-D%<q`D0i}N2KZv(4!mkQs%_$jKa})iEYI4iwHZt=taoG?q0Lgz70(WfGsXb$2
zRFCNxOq&b3cA|?<Xc|0}5lO`g3cbP7lif+0mvz99m|!#}&eFLK(cLw5x18W?x>C^i
zg$2j(bwhk*WtD^PG$M3 at yprc5pijjerj?0^N_$!^xZumYsiNY{#1K=$IYLFoQg0_;
zb82(1lseIvK^6SJ?F}V4MOEJ1E2=8Va}J#g2I`pa7(wdB!|cA`W-M_V36aHM09CPo
z_3IF&{tRv-#fUx|Z+Ap)Bfd at 7AUU@Y3n1ZW>{xnlILJX7!->V9xY{Z6KS^IEdVu6D
zxzT?T{}W#ak%?j_F-B8Yw(r%dpNc}0L at QkgIo5#QO8rjGFpS1Ma$F=Mf34$!$fsm?
z18fVtk^=ecS>>xVhx`nV3ttk9H-P{y>M&*rlB<L*O57V!No^{-lOeVDFP>3Zz&<(6
z<sJ*C*!q<uDamm<F{qR<W(2#GvIA>|6- at D$_b9wSj}qt<<R<VbYfTuc9Ivuu3BLx9
zNy4uJbBf2Lgd5e3?eR>RIUeOAvrP7wupMF^KANp5mI{~iuat{IJ$_3(CImf0o%O6n
z+dO7i0TVOf5>j)bO#CQ+1b@;X&FpIk+ikP#TIv#&ls2A<M?ee*Zxb7h_!RaE_hm)Q
zXhkKvvMgA(2JekZJqa?-iCLAm39V&uHiSm$c9>xIdDG3R#`8ncR?&pBDkZH&_Lr5)
zg=Di5%`2%KnG3ly3gX;|A}2uoOa#kpHUm#M;mn8w93J at aCv#DfTh-~pZ;{8vdmhZ&
z;vYCag~bHBsms5PJQex1XwG9H>*g(PTF_}BTPGUc>vvHQ8l|zj2z8Z6*R1C5!~<3c
z%F)Cj8qb4RU9N^@Rc(p%{Ng_jl at -Gt`))3H7Fi&YI(GY<X8kt0QitkBys)aru*U8)
zoJa(Y2xNaPcmgKo55P)Z`Y*{3(m-IOY-Hm7Bp%pWmA%(VOC8^_DN(^Ln0#8yZ)nS8
zwQ%5#g6M;8+j4eohKSt&SPr}SsB!6Tm>z9T5mkDvPb{Kh!epO9aP)42rNzaSdyA|0
z79a3{7|x%aHF4VD?_j>{(Rs7eJ#3B+&-LjWJUndmN7!w8OaMI7ge%#giM6-bDU(Z!
zyKS6b<Bq?aXCw~{`seN!9`m(U$L^o(10r8e2LXT7b<EO(Jzv~k*Vg+GKRZ4-eO=w_
zw>l?Ro1<3*S^a5)+%=D at YY;_%=C7)60}5Zved@!>iC-Xr&&PGBQi7U?JuE!Lb93l+
z<}55tv}w*8z-mJ(BLVPJNc>=saFT~+cyI`a1Lmesu!~n66mu at bGm2mbJRH(!70vRd
z;ncWeF)t6-V;^=5)$-1RqtMR|&UGUIEwhkH+|D1`N^XiLxL`}h^H)T_k3qgde?JBh
zeV!6d*GVc7>DLF7FNQyjaHe)JO at AESaSwuvWjgo7Tb%*I&Tz(ro?INVrT8PH;4B+q
zpBy^k^6W~t%Kb5<3_?x?6wMPb7~y8G{aCguUe7**p>>F>RqI&q^Je;>B8ng&%%(Hu
zRGbnq3YL<%1mn`Nym&d8Qa%!mAf~gF|5B$_n!(_S$U2!3Q)Sg;$2^g`$vC*05#~4P
zXki-5Z#(@C_|HQ5>@Jn7 at AO3SlZZ2Rp+Ni@2OwZE*{d7zWNy5|0I<18Es8n8Luc-&
z3hXrzf}91a33w#yK{I=#r_2yeZAZCiW|oG;10zoF=aQFsN*M>Kq?k89Epi=7;+RGf
zjZA!ZhO$^A1$?Gkp82h!ebhf5y|~~FWJ4}SBYQ!+JdbJcP+B*0fr~kP_u`26v_M^Z
z!I(PnYNhDP41KVL69W>j8v`|qQ&*b+n;{=&5&{@i)?mQMAV?s&fuyOa&*k)p^-9^q
zFI~`*HhHbRxu1|OF*zmS1(;(Ohdu at fbU()yN(cFj-C~6i>%u+JwjGWtqNqeGx(iEO
zci8LmD|r?Z8Y#_5>pK4GRV3OEE&U7$9G>9TnP_0Fd~1Aue&vk*&Pnb3%9X7<Dml9I
z^mwe|*$h at Fb|ZU!f at ZU@rV;MA`7g9usRZHUtLH~bEWC=Y83Fz}rkVkA5-Nqkr8rab
z6e`3c?4~o8wU1$O_in(>-VvU?=e1U0-_T0%ukRw_L at V=I)JrQBmng+gqEOTJW7Q<O
ziNF>Xc6Tg&xqq1GTjgcQZ9Gn_>bRv|$Op)msFkpVFfoACj|Vtw($;lDG|Rd=bzVS^
ziq^lh2VVS*%aogo7=*4aEbP7b=kBv-n+wl(4)(V;Ulx1oJ)Z^ep6Q)H1ONR|b1-7W
z-0X#62v-)9lOXIY`4#KX0b(o|m^?GMlp=(Jh at RPD?DR^rRZyh%ajnu+L>y0fHeol6
z3FMt0IDm2)We`fr8`!L;jBvKG^<UG{+MRh<jPEqjM8qtm?(q~8NRG7=C>GdanAbCr
zp)OOlsaEEwfkJ`@N=<680JUnQQBV5^{ci@{8aN*F)O^O@&u|qGr#cgvHpo+}_%Y@^
zDtxVXkYkxy0WIQs_*ub)j2nEea7}N%c0ch4Q)0U%cZj&4bJnUdFdim{%Y_uIPPmI=
zr2U?Btv!F at ZSr8a;l5&c4I=G!vQayk`|@NR4W9&xLbadNL%*cb>o(Txza(7ZCb_br
z0ah3tYV7Zzt-pIzsA2Q<cg3(TZKM{u%&rxX`wmg9`8Ks>^u_lChZW;KIQ-++=%s?u
z%J~uj3t7@|L1CkU3Hw$11OX3NjlqWd?uY%|?|%5|-plQ$JQvwStjAHmIlzqsCp^6g
zE=GEIWV33*AtO1{&znq!l?>-V;cX9^r)p!>aF3 at B!TFVBunqX&l_IWl8xpzb`IWaF
z-2d6>c1Bkc(jq@`=a#{tu)AiSHLq}F(+)T!;^I2CfZj2e!?gaDcfnvs3{>nv^`dnG
z1_csacY01srY#gPQv<o}+wj1O#5p|$nR}UZjopL9HKD?)?_5*~pYem|M|^%2Jug*3
z1|TjN1Bd~G8w5E1VF%qHTy|O`hWY^emrVp^?SqPeE2BPL at U5OTnHR*VS*sUu3lZ3}
zw)hR-11^ph8Qh3}_s{y53un9=@&+S(&_Bho0`llKuD!gDLxnoiSriDgkmoGsP$bXr
zj7joFG>G{-s~UR;RS*@$5m;W>&M`lNu6`4ZyH^42)^Wc-z_@`Fmsi8i<<+T6fQ?#>
zNpVS0BPl+vFV~^d!*QJ(W3y=3#40GSZq|9(4Nrf7i8~Y(9>jpy;7A6O at At+~iC6RP
z7E;Qt4887(#0gMh6($RiXx3?A>|gS7Y}^oy;~MWe*bfqcv?1hp^RZ~4cge^`3ap|L
zR-7Dr{W&K&;vwH~`zFS+WPyUDUI%H^zu-2RYKjDsryn&q4^iT94CN3fW`2f>#<T_c
z=`Io%O}xZ7o^%tT)&fce>;6z9{c8FS+t1%1ORGC$Wo6i<W1PCmsw<m|)pf5#_`E<q
zH!H2I-CwIeSo=a<L+;`IwUx#C+QYzcgm47w{7rbI4K2;w(DL%yVtx5x+K{!Lpjz6{
z%<U{KKUl6mTuIxp#%E}!F(cs`_tDPUgR~uMe1>+GW^JeOaIwC+nzmz&&(O~DjO{#F
zY1AL&hNt1$o}rnQ8Jk&sxLRMzQOz|yLo2H at wzATASYO2fO<BJ=rgkmQ(8~Q8TUmOz
zR==O)G}rPBt*p)3%HqTN+WoXIuH_k8c`#!ujg__f3Jy`k6kF1kXK3Z&tgS4r)F0$V
z-?cnLD~(x|+8QJ?*O!L2e0?iVW^H8Y!SYJ|eoin~78f7X8?$K6C$lOVZW-4XbCPL|
z&(NQl70pUxt-idJX8~<|hIVFEG`Mknv3@@%oDJ9b4DHOSY1S|j_j7V%ZO_om%&O+$
zgZjf9v$>{cXk}Jav%I=eU(V5NMO&Vsm6=t|%ES6fj-y at 6Gqf_Zs##mDujN`<(w1jv
zWoA{gv{GNoadSgko}rbQRn3E<_0-UouWw~*W>vHL at L_#9XQVCPU%OvlT?rQ1L?dl$
zR#nq at uzbJ%AU`y&@frFvv#MDF>n`Q`V~x+y&aA5DVdFu4B_}lv*Y*s}%&KYbgLxad
zW?a)Vv@)}zS$$YvYNYDfwLC*BGb@@UoSMjSz>2m!Ln|{Ynx%*J`?<a>Ys)jVGP9z&
z->9$VxNJ#Vo}rbQ6-@()S#r~JLtCDqm6;XIT2TWuwB_qtc{Tg$X=ND-EjOJZD~gEg
zEDg=9YSu6id7)Wyt<TcX?79X at AU{DjT<fzmG^?_CaDS!1ZH*;ue3o`*);6%p^OLk|
z`}$_~Z@>zxtBraiXRI&ZUwTkqUY%jmK}$39!h;4573BrhH9u3IW at iRi0IPXnb<NMz
z(yZL at aB;0*v^SQt^_d!)nH@?5)-`^8JI{6w4t8G6xOltYSgJ4PRKwasc{WQ+Uu{17
zfQDeXKVa+Ex3u&9&ek^vyWj52*xKq693Q!L!rJQn*&2KL;@R$t85=62-$NK&Q+nlN
zLe%}2goS_>|MTf5f9%i2*~Q+~W(ya!-dn0S8ujISZR8K?49^z+HC#YahkJDU*8es9
zkX~Rpxp;qN<rDtJC;xYCWohk`#^T!2{nbXJvAX=pV&neG>f$Ha;)gUkYuzz-x3lb%
zLBBtmR_D6+)9U_#-(joyrXQYNh&Y2kG2t!2Yq+ at B;IGTe%R2V=dZ!oTi#o1s!Lu8G
z2&b_KN2EZ_?lChS_cA)j?1@`mP7wsld{c54jU;jy_Rrg+4(_)_N$z^|Pc+dKc3 at jw
zgtRla6!*J0j at a6`F+$i2_>=(~+ycV}!!MtHdJDNP5OK;A&GY!h-7EaGSo<0_N&2tQ
znA~Xny<BO{e>=S&<U9U7+P`dGeBB at XjEz_Kizi{^*U9&LxCe&`c29oLZ*!mC`sLGG
zxB5uaFZob;$;qt^!3Vo2h(*C>Dqo-RzNK5Y at G6Fnvu6?|;X-7yFQn|-w5)5rSXK&?
za_G5qigEn<1 at Zl)0P5)P^{fxzsKEUUhfT)f9UN+YUh{X__Ukedx_vGCKiM2&KuaE@
z&C24%y9!ZOpn~?bKxHea2vi^Ef!;P$ufbH$a1=1r$0a}&)oXwr^+%)rc>$<C4nSoT
zz(C()Y&A0{+3EZI5sNSNspTgkPmt at 9N<WlV`oXcYG6yd0j$6X7l1hA<wA6eTw}fA%
zl|oC>sdvia=&JEOdC-YK0{<$MbaKIx_SG;Epu%7M9tC!v@&N+yaMn|Qhm&?QDu(!~
z>kCn`3UL018bG8F*m at Pvb}~!7(MRWqN}XB*<A-2>wvT&%^fC0?jzo9dy2aw$zm8-@
z*$6TgOO0?c<Sl;YSc#wshT)wN7|{(B)wqfXUk;38^8$s0khOR7*%f0q$XYlKINIa2
zUgVWFP7pF&<9n^>-;pKk-4A)~z|B$UD-~^HXzG+X<=i54Ob73<e=K}0O<85fqrP(U
zov$o~^_Ny<*?SQTztvoh3riX}5cQrm4p7#w at 9`a1MupljGTM%7UTgDpNo at pb7%gPb
z^VAV}@*V8-1ZF~C^y*5x2&qpIN-MkWuyUZz4_cLi>!>3zN~sgTMb!DhQ-`38I{bb$
z37MpMqfTjUp^gvZa5LdKazLODB3&(r7 at NtL8DCItr3hjag$3QNqYECqB_hn~WfD9|
zOk=4QpcK0HRm$!vitTsNQ{mb_mYfrt9wfVmVe%}Ph$B*yVr*@q{1S;jM`sj at S{u~@
z2Yo*W3hKK~&)%8nKy4U%bAI9EAk172yQIE{UD9p at 8>}C}rZ(- at O^F7)5fc;e{vpL%
z-<gc0cwYybc<1UTc<0&`g7-*Vs<j$uCbH+%Cn)-PFs8oD8UTh1^#rFL`*x+(uF`7g
zkW{mNhiZNd+{8O~>y|X%ue%4eD@<Ltd~kKY?&jUOThgBYU3)i2W)Zo<#1>5}uLGY{
zIKxzcb48|=3KQs}IfluqRaai!(5_&fliE7BX?6CvP(2Wgq9)4NgZA%4S1OPDmyr!n
zQyCE2mT3rR5A?)O at gUPLAV6N-P$jXKa(P4X^%y})(d#liV2jjl`KdcCAx86S|IB9f
z0-fjPGvMYvv%#83bmcZ{GaxT&lg3L-6*GJ|r#nkkFE|V*f#)(3$R(neWt>T`Re))M
zFy`+ioGhv5Uto5 at G7l#fMV-ctX%S3Ci03P*%Q?#G%Jk+&8abD4Atd&TKf2fE<2e+j
z`hQ0KKF=h5p!-MsJ(K-E at W8LG6#PFcjX(WAA8(W=Lt6Med)ql*=gDDc%nLY65TBV1
zFE>`Q(GdR(`R_U-A>E;bZ4Iy0JoE?3Aj7P7hP#D^&^Hi5WC at pecY0*##(`T1=@c6G
zmKI%#g?wIx+W8x%Qt(+h-s12AV^}}iZQ($#=Rx>`8Y at c#w{~xFncy0W>&r{)jpcu4
z$5)sf4oBzNXJ`?g8bwyV)2<nfzDHy%gdV3^Mx!6x_b<eugLk~ucmvSnrT)0rfcI9b
zx*l8YulwEBE*&8#fHT)}DwN%}t9In74kYEg=;N$W>k0`KI>(Yl1nVNna^5-{op&AV
z=ld&w6oSM><sn(7&hc>NhY#AK{|c>V&yl|M7_qC!1*|CU?xbMk1Vjl8Km!=V^b%<-
zm|y}Y&h55qRJ2~>Zju<Y5O~Wo5ebF>iJU<9N^UawRCMwPZ?TMF)A*eh#pxowlt}OD
zkyICAk;^v1Xru&ky9%R`c2peeg6H{_W5F$-rp0DmX&cjzwvIzz_=@UtJpYBS032?>
z24?46!`_pLNSY?*;1#wXNAG${f&RR8X$R@?N5h)@sqek`W`Aez#kV`K9yoA*(PX3O
zYey>=P+8jEgUR5kMWM>#RphukIS>xg46pK(C+;A6OdJAkr?|Nr!CXok6gprTtIn)1
zz*r>1jF^n)_8c8~yq6WM&z+N7N<z6LNeTFibtn1 at 3i{5GRdB-T9PN--k^^^SFsoJ^
zJlt`DYbxc26geQO7az1U#OaU0_wDlw9B_e~Rj%-y6^`psG9=2E!UJW!k#>E5R49FO
z6ghdMyjju<s~PsftbARD&J($$z;U<FTRDoH at K?6$Zg7hf+W~yugWYY_N2a8Qa4d_q
zaHC4m<5>sc9v=NjdBx6>!+|xzbO0wAzm4fvj}8D3sBsD32Nt0`sam|f(XhuHWs;di
zZ*NpvdJ|f5EFdnju~B92hHCLpEfKeNbLkxjz%NqR5TJ<mxCV at raWp23f}rxD@`%&^
zMYKkvKzisf{@}r?N{p^+r!v2~n9ov9v^`6)Iey~0xvuI-wF07wq{Ad8J)j+TaTB}Y
z<<X70jWYhRG7ypACmiRSfKoU(_PKJ_LgtSYxxsob9*f30&tp2iO48_rSrFxfoF!tJ
z9NMW6UF<1nf0d2=4?ZjbP&{jw5e&{TMSw8j_!CHO-kLCKR6o}>nc~dBh?*+!(2O{{
z^HUL|7-^T%k|XSFzB3vf9qeR**0ApM6gcxt$TFAnkj!8ibFqrr8L82h>JLIOIW|r;
zy#elX&Bj{BX#^dlsHo2W4mpp5Ym~_^6dgMZl`^7Tf{C}^bDYm`!tm$1KRJcMHibqd
ze_%=UZj=;^lq0dQ&JnVl>w^R47a3ruN?=mK_;6;3z9HO+qej2Ut&LlPsku8?fuD($
zWLH2c(Sxc!5>{|b7{tZlHUXII3Sjd9eF;KR(x^7aa#%=9JCXHrH12?N$RL3uA_Akh
z&%DP{VyWPvjby2 at a&g`?Li;*KXH0WA=8BEs-Z7iZTtROf`oYjWOLzy0Jxa{IQfie`
z3 at mK(em&oApkOizVvYtrxE?O7r&=`+Jia+E0k3BFH5w*HJGJp=YAMBD-6&CS!#P<}
z((V&1r+VtENrr)xDZ=JccM_Mj(M5MW{C)$AIDYwoUoal>0DtjY(PBxYfc)AH)fO4R
z?O|z&q|$eCz!wyoSV>A~9d@|aeA_u~j{1W-HuIU&J6z(o^X>xI0^;`3x!W7?<wnBD
zik_3~%Z}R9+(@@a{&c*1SI6niez$wjzlfocNJ5!-pbbP?^BL4l7(1&-UzwGk++<o0
z<>9xRTur at pO3u5AUID<=b`^jdM1|ng5792nx7L>gsiS`D%F%3wo=2rY;R3cr$T#kz
zv~W$wRKu#x`-_+CJh=su?!-n6Ng|+RLf5Ed%<oRByxYWmNruY%QQQ|l3SP-#RUmGc
zyA(J<1h-Zah3|velW*c4c;6M~o(5ji9|I?nC4QiE;Ia5{1hC at mApa0Uc77gLSRs3s
zA&dyLAYHZ&){%~<_s}iH4qmT-kU}+N6O$(-k at y_S>=e04U at fVoLhxK|rE{Y=BRFbY
zt|hhxTorq$5{}^~+EwcnQg6mu!INFe*0EK>cKC7B+R)IdIyOr9v>;IdK>eb5+Kz05
z06^YER>5R1<ezVTFA7Zc|Nnd39$dLCnhyv8Wzgqj|NqkJ%Gzqq|G&1pdjC)V|8Kz)
zH}?OV({M=7F)m!c5}y*YCq&$0sx0y3NAIzt1b6$=;%e~b-_IH=>#K|Fjg?8>e5};E
zE!}r854M1Gn~0(#Y28Kbzy_%ze at 48HRRCHMD+JtJ+U+-8qUNRqc1;G#n?<E`3KrfU
zTx9C*>9yQWS?kECfSuRoIkjk5?6i(tO2=5Q1J3pl6XqYbkhw*t_l1RK7t78XFLc98
z-e{@?@P(Hyt9lk&Q|dA3A=GB0^voV%M+PWLHllE`tig^TMh#e!KemItUA7E3XwXj;
zBsPWw*wWTJ3Ui1&P&A|BMA9jf6A*;Cro}pDE-e at ZWBQAuy!(=RiCw|EKtn{7BJ2}C
z+ApLV8Ta1w5DPnxNmT}i`w(4RHY<s>k!u at Gd6ZcZD@5jRdhS~{Z!2FGCOSSG_jrB6
z_R&ET*R<EP%c&bpF2S$@KswOEnNkD;j1OLHzgXus7<Po1fQQ%pa?_2ZMH2fiGyRAI
zmVvo}(z>pdtWyzp`(C*o{UfMr>r&#TD`itj$AX*2v9yFZOJ?$DTrfSrqRQDNfsM5?
zbB2rbnQq{oj?#)uAce~KS&JA;E37iE);D161d^kuzPy&bJ#^3E@}z{xwPeia`UG5P
zo%vv<rtsF~c4BgrXK_EEk|v$6BzU&qGY2~;P9KZ=eZ#@;JB?Xg<G(V$syHJtY6o{h
zJ26&Hls(H^%(+)1cV>Up2mK2K=Nui52iRir4 at C`I38YWOloY*{o<zU9$k!Hrg2j%p
zqL$=ihj2#qkhKrmDk%V06GZi!SG!wKJ4o=<LkcS?AX*<W!2 at Jbyak+YQA~I(Bkg5M
zzMFb@(|0 at zIAPvHR>vBuncz at +-p-;2<bOU)wLPDr5EOEtMx>1LE5}g0ipvdpb;x^^
zp~~$!2zLmz2^p;WrP6VO99+_WeT&><o~^2XX&p@}P5k4MG9;4<%geMphip=DzDrA&
zjpwA=Wo75)L#IeF&cIOd&KGSg8#L%ljQczBXtbm(nG>A>BI8~S9U_Z-^zr|Hi2?lh
zCnJw3otN43x+qTSmH<2!Y!s2Jcxvt~vZS&+)q-WsraZg1A$m2KJ?>SwrYA$D)T)?f
z9#jx^Gw*0RYEx>(`JxnM9*nxw=LP7_iivHAL0eoEuBT!xxN3PN#&RFMyYNaVWdjNP
zO+`66%)|0`9iWoKbOz#Lj{%3qFl*xKgFb(_jx>Ai^W-IVPFv91+3*4h at BD}t8i$%K
zJo5;7Iu}rJCcP39rXbni1IEUiU8$YgIzl{?*cYEF3(;P8=;F#&+a~crm^U%XmCGV_
zjR3+>%iHUo6}8J^X4;Y>8YF$2a7};<ZxZ%(M$a+Zf}nbznT at bBvOiAea>m(5>}n}w
za_0wh99{S0AFopWK%<{me6x+IlUm)>;9<wS7)D?US<E5suzv<kS(oXOpUz!ek<^9*
z8i9D1P5dJ_uEaN^6&R>~)Ey7PVoFdb6oMAG`MS207iJcy|79e_aJdL<OrA8W)NJCN
zgF^Czylz)GB#saE7iPK=PmJ25P8n(l=25!h?RJg^O(Yr~E}Y<yD{}L8ddD<$Xvs%b
z62Na_2UZq>G%YcCVo6wLCh8k&SY09dOf<6J-1LgkK-+4V;B|hsCuPl~CA7Kp8T<+|
z%NrDJ9*?qu^T<_)`gY$Ct3b>J6+Go%Cxh-yDM~0=_T1JnCe}QzjiBMvtb=9KU_@~&
zTf{q5bn&e}f`x<5 at uM$e2bA{Gy^tTFQW<gvqwHO%DTHu9`8~WTF`xCNb0<-*l?l{8
z$1o87Ry;v5`I09QlZK-deM58+Ng1yMBj=ltAnv}sQ}7OYz}As%8s+>u0rA29juH<C
zT^xy6M at x*!-as;QiQ~k}6Y!P~6pD5pera^~WBEx8{LEfLoG*ieR8WcR9D*sItHU5U
zlZHjnncu~4=<Nz!*6I~9I%e=XIDLu$Zo6G3Ud3d$V?R91bwstcIOdW6vTj!?B*RBp
z$<_A!fToyUxsEFu-aN%6ir-wca36`6iHvfUHhfK0e}z>nd!%`criYP_kI~paDN3|(
zBUbCk=Mj$u@&h0W?|7hjaU at _8EQ~=ENWz!=yk}oLOy9bH64;dRBUb&8=Eg_oY5sR}
zKZW`Ih|aX3cF1WDF1N7`b!RK|P8lnqPBvWrfx9-+nOqFUgrR-kjEk`|Caf4ykNkT(
z`h5*sgQsXdkS5C1QB`tk^wS`bf8)m{Au)SG9l(n1wdt<!42F#D7iS+AutpTl7st&W
zlb&3NPXez5E(+j|0v;A{A3(#_keS8YNpTBhSHAu37%jmI+k7XEMZM1 at RR7$$8>=ze
z^byhGz*fw8zo&Gj>NYnZR5E`FH;ea8zR5E`4jcPB&vv#B;K_aZ>cw953nL}*mbRkZ
zIA19+Cf%RO07v>)x#S<*E~!~uc0r{tEN~i)dWD%k`W0HrbIHWbtZGqT2*8%c3v-$f
ze?NKy^DHOGQPUsNfS2V8TB(Fic&fTN`35 at A6W_!3Pd*O(f?~)cTUh=T2J`wF!qKX6
zY$+nwiw5PB>K3;NCTDMCY)tgH&V;9;355d at 47+Mr$aXFutVl3`^-VOKsb-3K(|CX!
zCKWu(!(^;h^V6w~*`(*W&D9x;Ve9$dU1`0V+|d~IU@}97s-8KLjsylt9z)c)Z_iQV
zCm9evNXAJ{1c(>j8!QFk7bO*w6J`Q8Gwcz8>bA*^^jOK}hiqpgx~-&;s5_^S-0aCQ
zPE`MNlPN}AT=YaAelZ;=Zqu_%{KVsw2ueXnqLLT at rwB;On$U(Co5#^M8t at udt6?LA
ztyD({`9Eq75O!;G7QX7WTfD+&h+jOwF&=I-=CRX1*0Pu+JfZ?d-930Y+_-8F=jAFQ
z`Y`2Jq4XsKa%BREa6go%oJ{5m70x8=w@^bL8`Yu_$yt*m2Aswb at uPNe%a^?Mq*Ds&
zNW?H5Wo0m8SW|{dLje*w07TF4ZvFX>C;-5-x6oJZkEDU={FUHUQrmP5 at 0R?HO!5gr
z?fIu at F0uxE{a8X%wxM;Qm|?@Ka|ymcnnLbe8gJ*KH$sj**k&`Yk--IASUt+_XjPWs
zv4X%8q&}0KgdwUn8J^V7ssvJnTIUqtj$?wk<FE;$L7eb0^iYxEE7R++0zQJEOM&O=
ziS_4Tr8A1C2kp7&2>oh2EMx2F!U%lX)J#U-UYbVGeFEo&bKH%61>9<rhb6+1nlc_(
zBsf7=E#U4kUd<!+Y+}8+p(D*qZ$@q2wvn}7kx0HNleb*ZQBg2mjTlJOCBIyCH~-PE
zV&fQBVcUtM@&P|i;Z6mK(=CV1qaiNu9<>q4(19AeX)CHL*r2pDY at Wcid1xVXc}x|0
zzHgz?FgS(zf=%SB58AkV3wK0$q@$V01XLt8p%8Q#)*&jcQ2-r9Hh6=Bx?{n~k#c<7
z(oi`H7sJyq7kGCkJguRw_70B at ILXxfmZ4Lqdkn%*cnm9XeaWNl)$mx{5d!L<GXgx2
z2Vf7oo!*<n4lZveIwQXE0_GjS`MS2XC1dC~Sa-ncGjG%-t%uX at 95=3QMA!M*>N?<o
z5m+y0OJcmEj?UG!lP+Y69S*ev4d7BPfmH24wH$Kwn1k8ujyRCIZ|I=}z@@;H?aRPT
zK`|L%Qp?TW?zuNOe~SR!U%3se)F<cv?etphckSV?oBw5Tb#Zwy7yo^KW%1AaFTe80
zD|mRhZkGQgC_6fI8TTz*0zKX9T#PkVPD0%Ld6pyyJg^i3z;Bq&CEMu at k#b{*d;0W#
zzoB>r;N0Ux(IhhG65N4M;sKJb&<O_HP2LT#U&A2P#JobrGG0xOSq$zm)=u7fdyQ``
zc+X10_15Om);^-Dk-H|TXy=9nEHdbI&d29jb3Brh#z0n(pHc&tC{Cy$m7EsJENcVp
zK%m9z3)Nojjn9wpliO)>=WHMoMhh-MK#4Xr1^=h${Emj!?Dq72Z-C at excTvgoqdi#
zC8REH4~Ga~luX8w$k_a)oKdVOb*6k^BPp1=+ch7)wlW0gZsBEBpl+3{DrTf%dlvzf
zRz-aXn1%hCMstPLKxElsN^*Vu;#UTEjRmb8#xGQEzMEPZj?azkxzMz}xB30yx0}zt
z+0kjo%?q$yc1Kl46(Pe9f?r5}--_lvM)wl$iSLq{I~HQVu4{Bqdobt^_J*g8$bj;d
zl65 at mq%#wrsIg_38CFQ0jeIfqPmw)pk1pG|IFtmUw7|(LczbJ}qw+{z!!ykvk69+R
zAw5o$I^r0{hecKIwBSDwdW5;#LwS#$0TdQ#5!D6zF!~-g3XYj{4u6y3OQw6D&>xYy
zsF_tK$;VvPX94`w2Y{M}a%xW02J{tz&J at e$@iFe5<w6sh1K>N5nJXl60`ZaQ8{&y8
zTn8QO4PH^y-!O?J+$nFIjuj<@iq)5|cK0 at 4{ovP_1(hHsigV=qh&NT#)N>GOI5%Yh
zRiX at bIqg$C5y`A%q!H>w%`f~3XZX4*Ko3u_`-O|c(<9t5o0KuAuo^h at D@JXQ)}|wn
zO at KOdfGGqYr&wS>zr&Fc#85{Ei;GAEMWd)yBOQY_1d5RSMo<n}g`f;)p%KN%4;V*F
z-U_jzmi+DSi+0sJ$z(%FFKmogT-ugGF(IeWzu0x}boI>zk&DLE+9!4E*o~kqj}%{Y
zGRMgigGg~$Zia|K#o&?k0vgGp5X|rb$RI2em*nc`=Y%;XuAu9LI-+Pyt(zliN+R|@
zD~^QqyAjQ;Ifw&43DsuMUy(>BYOCLK=h;Nd`BMKMCBXbmtn5E-BU9IZQAo}Q9RIy0
z|L5Y`Y9pWjbFI->`t$tnZ^1Pmxc-CP2&09DOW+mtPK#Y(=VG{RBoAaR at 3)#)m<Qm(
z$+i)`L)(|naS{?Yw=heme=}lHx|*29tcH_3S#9+`3?tm8#zW<c%(K9%^qLX at -TDd7
zh6te(ZyE1+hv!XFw6Oun%WT+*-*G|qLnM=F3vr;#w1qsJqd_~ECFlYE3m$!2Aj10e
zAAEO)qcdi>{KS;Tw3kU`TfIR8UmX$yfN1q)2_cv)Fh7}DL_#~i@*ee1PvKmoL($i^
zNlysL<6nMy2KC&^PEOQTu^Mb6zTj at wX}P5ZC$-yX%3!cF6YVuN&^hN7I1^hi at buR0
zo}bc_=?$ZH7njvsb;Znprx<*InY)K`b5%yf6uLuHidB-$VPX%2V&qv1kLtt0G4O;r
zecC?65@(DXH~7jvEJCLuFt``(HoLhM?P5zK*gR!u2;u?gjHoajPpCv}B24ZUF%hKG
zNj}>9d%3rH$T)+i?p~AaHj_=ZYUfwRFi3>NXGLRP<Yt15ApfQ=sVWI&ohLd;ElBAr
zh2r>&J)Bqu)K_U_sraZ7A%<Y?yn4ZA6t;fVw{zU at zv<AqgOmgy#Fd3zAce5(AIqsr
z%3vNyDpn*U8-2=sqJ1cgSM6puSpqp1IU_s{v9&F{+Z_#(^SP-iLhrm6!_}TBHr(lu
zwy_<7P(s8a4-tP(s^nR*tPLKXzX at nu+%P&mt1bN4y8GF}T&4}lzvSXtu8GIl;v82h
z`R7<7kZjN~TQUf>YFZH?BQg63i6 at pt=B`AK&)byX_$cNMa{N%*E)1FN>w at L48DKxS
zwhQCdxJ09zp{debGK9&6B6X(#r*VI|oc-EjCIdaO2jE(V0C&b*V$)Lbm}deHhR|^b
z?{k?RQ3cK=pIpKAszqGY=|NuzybnX<MN`);Wpj!U8(Z7{c;viv4CO`Ek7&wC=+HH6
zs`}XYpeiRD6(!woiZ~+}8Z<~^c8K06Jc?2d6G%+{bexou!)^7cs)f4XJ(LJ_P$E~v
zdj9ixp2;hi_iw5CIfHI;4Ti}stfV7SL*3FoW7Y`U^^8RwGamwoI2pi;iL%at4#w)A
z2ezU5_pugcnTfjyosqxJE>q?MCmLL->84j7q at ktgd?KsTz$KHOc98B{p{1?oSTg8C
zwrm=ZrW0bIkQP2No|MUaUO>SVX*)M6PU*1{Vs24It0MmkK!&^(E^VqP?b}jB6}12Y
zvzhQ<KH)4`hxw<}sV!nZI)F+QwIfG7Gm|ISit7QcX-cvdPN*UFC_KwWM8t9U;-psj
zq5>ypyXX4LCV0mR?83AGd06O<h9fJ3DRVhQ#=W-W$PcL$3j{#jc|heNB2r(}N_ke3
zC{L{qZkdVIgmFqsrmO`<L?Q^)g-LNPjYxA_7U|!Ni<qRG@%jaBV=8 at tyE<W6B(H4o
zF>E7k5y9p77m~Q8^Eo+0y!B)Jaj0OPMq5m;Nx;nDPbkLaIflc?3o8mwLo>Kh5hBE?
z8EP1IT>$cKfyx)|$3}&9^hJHt|7!1GUovW7F^KzwV4H^cK|mm0b0iue at P}0Am$K4|
zKgzST{*dzewXBBqRBGrCxtWN<`iH;jx73|5)&HaC?GCXc at wU@#pT2J-09Wdh^S>?L
zZ>%k+`~OG`_NV`+bhtkH!w>iWxD%S5NuV6SDbOjRagxpdGJZlBz{917ng_1YxYt<C
z8f)vTjrEoL|HQ0t{xH4KCHt0}eb9`$VZ^g7m)KBqyYbw`w0-<U-<56jO97kqO(FWd
zbk6p=#jolbJ3aV9 at 6Mzx^p_47?p7aiU&_|o*wolYMM6ZLBA5X13?b?OUJsB;@vnaA
zS6<H0G$7HQPOs16+-6HRW^4zEZI%>&jcq6K?sH4$7iotY()B!S#zfJHlX19!#eV3q
zE=9%nKf)zf&9<dt*H1}@C)aw at ZeOIQ5sKYWpA(4hStiifjZlmsEaZ#JYP>_2EbDbs
z{$E2I<sDu{;!GBjvkZL!xfEa~ZmWqEP=1z8a5dR!Elq=@%nN>*SjgiSGe^F+&-<f&
z8nVHVp9s%)7ZZQHhc>Z-M_|?pvl0kHPn)rGf-C|qph0;e;g$0JejDam=`O$LC=u!k
zk}*K<P_`?H_L;6+Ag$a#7Oet>Hbt{+wp!l+xF2X!ERzPGGJ4h at j%auJ;gGF)Kta5F
zr`K-D;h~Z-DXmv3316dy8KfWrI15|r2u<r5>HI!DE3H at BGZK4-o<#s>@0sHXQOKUj
zY#eAs^0YVEHVHp54k+cuuXyT&iv>+zYT6m+8_sya*EyW*XrRYs#&Q3m15R^p7)}_R
z1?3#XaD0ksdt^9m^)Ie!b9KB<CQ at 5$2;;N98247H!0^rPW%CMCHFo?_CR$|VT7xyO
zGZQ+G)fX&$Oprj at Pmo0UUt^qgMPg3|hDfxM`lsc{Me}VRQ|!f{kI04d;ksygz^d@<
zZ{HPXUQJd-?(HT_h6Fr9<<7^v>ky&YG$^D2gCcn<aK5AShRI{bXaXslI*7`_4BqV{
zu5iFQZz at ur3*L)Mq*_Hw at a;8^jv;Yp|2pqo{2OO=$8Rs+UH!bYys~<K?ZLy%CtKS)
zPrv&5Z-0Nb_x$BQUhN-z^X+#(eE&~(E>l1`3qjYpfY`V%m%^cQ*e$}bU6;rP7dPoj
z(%m at sC7d4pdBmi&FBtDNM3xPpy{-;r4>(zu=QoN at 9baL>zcjy$FjvdwZ&C2lYp?=N
z?RS75?yTz|WX!nGt<SU0-Mc>Ko%3Y^2wBV=$zZ882b-gs-XDC@?e_=nI|4YdE(4={
z?#nuwAh2C<NS6OGd|BR`dy<STWAD4?am{MzMYDJ1@{;Jjofv`G2$XQGM7_fmCux0u
zC7DnObaLSr)%igZhaug293ww26N~#!N9A==pI9YoVd=w~Nax-Ef9_cQ=!>?G2ypWH
zpBZizK1xem|F5mCN*oBj=Ku0_y8dshtTmQD$yPr~>(>CmqymkdeZniCrxm^K{j|D&
z;CI)If4g_u?F`TEjYlW<9#~ean|6l-JkkHtSi8Ttl8gUYTD-sbXZ+7i$^2gBAAJc9
zz}%>p?UoKVJTxo!AGl2Y_wOyOWlN3q#fIFws~#GfcAtJGHV;nMV%;a~f(@q6uuI#&
zM4~?ANM_LUMt1OuvGbpWeJ-4q#SZ!xG<$3ERW at 7XXd32RxiB85%?BfdtkB4i2b_&r
zV(!z=)CN4n*$V9a_gcflVVm<Zj6UKqPaIs4R{I!{Al<Y;9R<)bqJ0LV<1sca*~XKr
z5uDwB?{r~6?ZH at _&%VMfPV?CT%<TE>WqX8wciuHW{p<(@zd>jdExqPo(7dWupYUw_
z-#hYWPyc+Se-8A|OZ~HhKQQ;%_}<n2Kc4aY%oy?Y)VgCh(0DGHQBz1a%@Y_{DB{2V
z1%Eej&L8IdWd}!(Vbfz7(#i-2izXgGa0|RoKRdr-9*&j6#v$f*&Ef`<w0oq9zFR$9
zobs-u-lv}-9_z4wa)?s{Z$hW{$31p?uP=WNaEm8?eTPLR{v4c*`RD1N!$12?+2Z>Q
zSz+Ll_f-2^Q))hKAF<G0bHG2F7xHJXdBtCU(>DG#?#jFIDgW%l4TL{0jz|3Sy#JPe
zw%f-fEhw^&;H|UK=wf|g;qvm53H|E5_Gm##z0mG0ScD8>k_IQ-Sz#G+mlBb7BH_SZ
z?l2}A<OVyF2&4ANxp4ZOC)pjuVcq#5g9UzPcm2*@c84jnKO;0`kL_7GT(XR%5K0bl
zkHvVP-x!ocUnb99;01OR`ru(y|MW9pw0Q)sY$IuK2f-cWv8sDQ_<VnSjKetF?H<>3
zd at H|!J0Fyk*+N#5QG2W3JLymqt1q!!LbtB4B5Dp1EF()!<+RZmx^vYZ<K`wDtpHcK
zJ0F1`Dvu#xU_>}b5y+MOfMVyoxWKJN`ee!MPUEv7wvomcnI=BDv-Fv))a>%eUYoL)
z at 5T;pMQipHIxq~g6V{M!<q8y-huti4l^(3v;c1>1LULiJztJ%s at ZyRW&s;?yt~f*J
zd8x20#iamU74zc9ksT`ziY;RpXasT~Fg+mvi<~#HEabT~z~CzEtc?Jq{s7BZq=WZs
z?M{!YW$l>mBID*1V%2Pc32+yb>MXbFk2 at 8}Bs7<C<~O5WtF<{E^>=$9EN{>dMu0<V
z^P7Vghr7?WUhVAdJU`HV>`(<cb~#7{hO&3aaxxT1QQhwm8SHo}$H`R{{!u80Ff-h-
zv4w-`=iHnooCSTB$!W1nUqz7h?JFdhN{ep|ke>?zmf=-^FF-sB5Dr<0)rNDS$k#}?
z&>kS~e%$Y47<3XBpigDz_Dl+9wI6@%A)|Ab3L8hV+cB(N+ at b9t`9|HYuK<er at w|Ph
zJ#^G#w5lK%Fnj5D%wFK2x{=v$kwBBX#U*YR=p)qT6v_doopI=)9LB*BLpo)wrU8)y
z(*eRhuKztg!+^pG0*3MZ8p?CBvc0JB9yoJ3RdAkg(5^5oHF#uhJpeoao8f4Xp#nWA
zoA}vZdPl>HFYXNWF9O%V6Uj(@19`Ms>ZRh70GPk_^k5;2QKOtO`(+b%>(aMM5(Afk
zmxUlS)I&lVFGi7UoScaGgR!*p?sqo81K+O`aG!vXFF_XgbGL_9M^Bn?_MnlkuvgEo
z=s5N!-gaPfKtr7RK?^m&BU+W!+_xt5D9^UAGeE$4A6LRf?I^#4VL>VUC at n@$d=48i
z5MoSV8jvX6uC+ow1CQfW;TTD%^c_>Z`A5(^nu(RFj>m7D-o|t?0uf<<$f-ezO%~mY
z`3+KplzsK=fcA+_0We5T`~4QC0;o6eha`7}Rf9wsGF at QaLu56gc@Ra6Sp_$H9AWkW
zN#WlaHsyMap&w;jX31%n9hU0 at iMLCZCW%*s-;unId0d91iUfsz>HCcCzJSAf at Py&!
zpaut8>R=ZSk8ydG6@^iC^>bTVlcM at t3;QxU$@cuz+G`!quL{td2Qao?C&PwAm!Bc+
zgYupJrqX%i6-h71QqReeKe4NP56%wU*wa4r0?JqPz$>;_AnI`B5xw&AhFX*xdvgH~
zDGnEl6)@Jh0_GL1NZe0quj*nqJ>C3Awp?#CtSVF*k0t&cvm0q?#}s+$Eu1ti!F$j=
z!clBik#7cW0G-WyUF3y+w^zes_`h|vP~Eg2_Hy(DHz)Rbc>Ure4A&_0kEzAvg|D&G
zYo%rJpjc|8I$#7l17~F0ewZ+~a at szA*2Mg;<hDm(Yd%9mGI^So;9uAH6NHy*@AaEK
zW*@c`+LN8HcAsZk-yFp6UNvQs)OW8ozq5Cp9)^H4dm`VG$J>4E(uwNu at 3VV!64QL6
zA3Q1jtS=^@!hsk2G`z*D9fY}!4tOvXu;hmvQ%%b3!lL18{&kj3^8UF~Q*250Yt+O*
zi+J(^>o|0w`?5cjxru=6nZJrV0T-9F?@57uF#&f)NcDTRyKN;9%*2GdP>2)_5z1#+
zs!|WBgk(6GiwOu)3{{3`04biUt at g7t@Whp%)vgw;X$5<u){Yd0mhd2hthB^{YMHXL
zde53zWRM*4C5M3|_~J_|joFclM at _Wk2<%XMrI~nG+P=2m!O)~+9U1x%7Ezq>0J(Rf
z)T5 at 9G?QBU7Mm+<O8)W~hhfgCR at mr?d`lj03p&Rm?5B>g3Swhg97-N|!pN8XYm-HN
z`4sVaozq^S4!Drdb5+Ke@&_-Gn{E?x%iGRKrAMA-e4N>HL(EqYbV9+x`)`;AAy+7q
zhe=T!B53V(uoN2Z_FlFJ&~2hb_!v_rpL4>!GocRQM at 5rT-_dUVt_f>4fh><P|I*4W
zKn`^XIV$QQcd<F<6!Vj@`{7>>uU;~^M|(ZI6642@&d)ncS-^MEvh5N(YvZ0Qo?#9k
zA1n+f5i at u=#^)E9dX8l!0!D1Y6zIRfg!<&?C4~Hqkh_h>9r_?b`SR<RnTsZ>Bi#c1
zAy}wj`%M<G%ruK>gG;?WR)4yC_=s0?J^t+Y<n;BA)hGY#Tx_GsAFDq-T96l5+`=;j
zwm{}Gx4ermPgi<e>Jqeqe7gB;f5$-qGAFWB)}1(A{lXZKZdixekrS-GnZ9IRO1stP
z_~LYcRSZFknG35V=_p+od~h^A#cGzB@~Lvb>$J<7ovt^Qp8VXoAnhwh_;S&1RWN8W
zEo~u~qt}9u8!zp<8_=z0?^u<MehZH=l{`Z-IxNT0;>+$B%34N!OP0)>QRLh(0yBvb
z4m7a<Z(fHd0V{2$MA7v!9*^Jzl!fo at 0{mSu4=2NS=Ht!b14GO*7**-C<U#IY9wIO4
zMqa$a4rocIlRA*n*Ui5=Cla_r97yzS{B_%1St(un>2>@3Cq90?fG at 8Xnm+{&u4gX`
zWZ{q|3}({+211Z{MVD!N7iHcGKBRl^$Eu?{*^6ni-ZC6bysJ1W=p}}!p&<xl67$Kj
zEapA1VLjV{xePY5=9RxdmbMeqvo?m%L&I7Xyrww;O2Cn%L1^M$yaK%Q_HOIlLEqVq
zj<D<nZt|gdpvy<J?Xn?695TX0J&_2oX|uL=!;=C*<Q<rr2~iHAAvoWepARewiwu6B
z(=*!ZSY&b1r%e_07p5>4$Yd1Q#bon#tDbEImYy<pOznXvL7io`5M|(gdJbbgn;{jO
zXdN&oS6cTVB=#&Sxo^)%Hz`*rg~?>l?Cy*QI6$h#^p-x#?3uxnt6yaR<XiHXJI#CG
zHrX0STZos^zyXp7_ZPrh;hl9`Qr&6 at K&;<<@Cg?ix*lU)F)bp81(!(xUfQ_YOPjsc
zE4{@Pc(5$goZRIap`r&r_&{2d1)aK3^_~J5*|=4%urDzfURS1__!~S%+B&;)lSa#X
z@~Zt7)0l?^M*)9A3BtydVUKW=QzUWUNFvu|tdE;hP=|b|PS>GTbr%`q*#cZ}h;?AO
zgyOKe^yDq(gR?&FWl--G86I-ZS4r`gE&?SmkN1j(a!Ax9W(_FIujz{yCr>$hg1CGQ
zA^>rg$DGfub80nbjH^EcAHaX8(}qqwzUDs9myt}NK-!!yk2cIW5%GofuSjrq!Vg~!
zzh6K-(oGl&IKF}(iW&sB*~$C34%FIP*BBx4C%OXrs8Hw`%#;8*9)BuV=laY3^6znf
zL^qoJ4a^1LeyOW^NO1G5a13deu?0WX$iN~w4WCoFhXo+$22bZxNG&TkZeSnrg3esL
zq(jyB!p1>5U_Y#Jsq!4U+?fXgfx11a4xoWH4ho*#8(v^b?gZ=OKoAf19Gf&c7{CT!
zqZh<Yq2%z?pI9FRYQ5N__j^Bk`r=h~u=(WKPJn|`AsslEzHScX8X}NFYy$ORuGAOB
zSk*F7B`PDT at PWqxHV@PvRXCnSC28l<>?7Mdvll;$1-`>R-jnvWc-b&(qqtf{oWUtJ
zu?cB=en=*#UI}QGE9aqOd7Ow_4?d$U*{j%YpEMELMiKM|dd`f)ZWoJqlR!)w2dzS@
zhQ=iK2NYrgDop-ZbHuhjriE77o(Vg3`_a)LTX-D#4bM31!q`6%YZqIe48a5ULYrig
z3XO&aG$Q0h=3l+rg5|spsVh*E04iLn7qfF*r$|z@`$4(!kbKWlbj at MDhnG}ziy+VE
zY)sn+OLN5szcwnk-7%P6Z7d(K1V9codgCN-5fG;YWA0==uVMQfRte$+xnkjpk4+A7
z{gt at c9nx+I;ozax5w^kJi1cE!7rMuS(zp*2&BkswN<Ei2vW2)tFp!bJ-a0zqE$k8Q
zH_|i|9g;AMyWTi(i4qwE<ePPjfCMX3chidyrc-}2vXe_G4`vVI;5U#Uom_+|ql2CN
zUK3H`iV$xEv+}w at vU63XPT*2343T7^J$Q;Gl5flPPYq*iK)W)$|HN&YlgUc9`A!6i
zSIBUXAff%M_P at tiKRP8Pj}Su&9)Q)TrnGDyawUp^myBis0_J7W3m1N_#Z<lRCW04#
z=S%y=^`3VOANv4a?-}MKACZO8jkesb+0^pr=yCng!qH=S<9Bp?O>IztOlmF0T}sj`
z9~6I67AHV2YF^Ag*pA++=OP9xOGH-4L_AS-ykUXSnF!&Xp{({9+ADk2Bt^5!SM*y$
zWoRCIj~?DY@<?3yW-K8;jHFN6;5IRLDT^%oYG?CcC)?h{9I?5-1Hdc*)p2o!5(y0N
zwO9Di7GN4~iuHSC+hCrJ1p%pifH4%0xIvH|Apw%KggqofIP^!#+OXz}>j?V3OIaCm
z?l)ScNaO`4vm6p^Xf`C!U$#!nVvvHI*<ioD+<uz&5Z1dY+JFVDa(R@%Q&gjV37$z2
z8m=(`{CBDf3irg)WXlM&?|IlLqJ<)g9^MyT9R+?X8X-cS7>nm%X2Rv)iH&1EZyhth
z90k8BfzGkOJg#K~j~Y9}Z$BR1vF&XmGCJ){D`EqxFX)|T3u*|WYr)d8eRLtc?x}k$
z`>5<zhy(p at ulBzcQtf|h53U9fKgXf&yS at 6kjROS)&oA-A{cis)cJb`hJ^hUmVm53e
zH}Fs@>Ni)@4=AeH_uMNvhC#3gn2XU_*(28j#Zank9>Oy1Vi444^+H0WWInPNSmTSg
zN~5TZZS5`Wz$Z{A+gM7w*~#7{3b>{3P2E_Tq at g_MVFVQFwdJ}&wGP*#C@}{XaU`-0
zaf19*SA{nAaeqqM5OV^I=qo=iv?+yQ+{;`*0=ut#KBdNvI)PBZeY>VSVldub9SoW$
zwBu0=>b<>=M9pZHx|JrB^*2H`V}ya*F;@RC)?RNhbvQtlmzLEp+effC7~UfS%SW;E
zE~XL@;D|&_w9S(w?lF#G$_6w1JyD4l*sSm+qMZu at qHYw5>lau;@VRpHQ95Nnp12j0
zL17#R&33M$kUd0A=WUb<vwk4TsBZ<1c88wb*|>liwsD at t`Jz&GKT6kBR%6PlYWs=$
z<cO#H*0OdYH1=&-hGO>KLp5aGih-2Xujz}O9-ObDE5Y!PRN(_xhq(^8Dn+m<%Rn89
zg;YAIT1EDHzHWEL!Tpqmq64MdL*DNUdV@>koDl483=?d9DWZ41aQ~L^8$;Z;ex`{C
zIFx`V<~p2%wjKb+m}Ic;yPkPwVj{Uy4yg=t_!UoFa3eAIR<uCG^g(|PpTbT6ANw_;
zx}4zXcnV8Zm1A&qaYneAPb&qtjWi459g-!M8vrKlLevxE^pIDWnV{8SW`Y`KKs_|Z
zz_un&ks->@53j6tW!U*GdE9#C;%pR`RuX1o&rtOMB8+{$VAZyCD>MQ2yw90;xQ|y7
z!H0U!Wp4#^vAnoq$xCH)!OsH%EVe_mX?9j-(6||P-8#eX-l|3&#<r-7&Ho5hU%)Nu
zx`N~vaA)(PMKCqZQ(PVb^@gn#5nSO9N&wc3;lP+|#n!X$WIqK<4lF=HZMxu$3Fw#$
zkSwT$1B>k(kGK8um}#^n%`@qj{}~EklhnF3l<&D$6g1}*@^Nk)vX=83O01h~zaf%`
z)^B!!#dAG7kd3#6F}R#*(6t!IA+jIWop;CQ_ at Xkw1zC~(4Te68iO<t^q9|OX3Rsn9
zzP3Tr$up=|@$7%g|FS;Hj-L<A*_NM4Tn-+M!Y-%$l9BZjtV at q9<aOUYaG7nPptun&
z2AWRSZt8_fksWG=%p7w+A%aP_s~Omi_!)n5!!UqnDT!!ut&1O5Vwuc=>gvKSkBji<
z5KW$YZPwrPu>{-PdaOtY0V1McB{g|gu#(lxN=2fTI~6lbvF*he05X?+Gvu%v<{skq
z1x%Asi0XF#hyM5#lIgjLwl5o?uxI(ec1;Zq>?@nf_GNqbyXHV<T(k%<l1sgLL{$!9
z+1}Ydc=ZCY*PL$E5oa@&R|fznh~aP4hA0;e&7^gvOzI{>C#+(fkw<-m1T?a;v#4j!
za`0L}9*MOyq(5bb4~`aV8ZY-@^@;MJBP1w6CY+PqYw`MF*&9{)-fLD?!ITR1Nk<gS
zzkvjFK(}xk5UY;=gV(<56+}brGIuN#FvTLbI3fOZ?eHu3#G5=)gp4Ck;zHif&F*S3
z|H#Toq$PLOS;T(WOPcNSf?wi?ui8WSA>rZYTQvyu&>$#-)r%NF=qL-(3x&j=bvWOC
zZVzx$1ar at vbzE&%A+q~wt at OlQu-k*lYVn4Gi9WX_0(4q44oUR2TP|vA=lOONv&Dci
z_S3tm at y&&Bv0w<`QnP6DE&NGlm#cl$^pB>QLs}go&dSmxYJ1-h^s_#Po&i5&(l0Zq
z6o%*}_tkff=GZs5V&#I%B!w^LLktE1Wti3&0N~1r<N%G-stW at l=f{*f at -?)^gJr1=
zo9XI7+w<0lEcYOKSTSG)N4Gj~!w3O=f-nQyyDjC5HN%jU-5x?e=(H9zBuE9-|GE1T
zFptl`q^3NjrdbXMXjdA@)Ah`rOXnrf(RY#{?ez|0tdzWbybgAC9uf0e$<*&<)U`=L
z?VTPNSIART)yL+mg(sd`k4Guu{!yXiYC at UNL_o^2#ODj^L1ui9xui%lkA+|zejLhr
z>kbb`@tg$Rno=CWy$rZ*W<L at cs6w*9IVMq9OH}EG8n$=n{*WNS9sA*5j`|k=xdYbW
zcYDRyLm4T4v4^;Yx=U5#44WPPmQ5`@@MVyPY}AfI<0zBw<e`sv!;r?oa&Q)Ov7(da
z+*izQ9-#OO1PZ?;k9Cvgpudkyq{>+0U0BfPqzs7FH3M0l5_ at nDKfz@>TEUyP&M(2N
zJ0i`f3u5bh0NiB5#J7#GDDY*p!q{Ql2U#^;Uf}US<|Fxn>Z146AHInk3Q)Z=-p)hb
zbdOv+-tdzz at x!8 at M9U_c2s0|2C~-AK_$fB1*!=@E57P?bo)Z`Bq6p)1+8tkL at P!b7
zS?1aqgOVE|C|Oz_?x^l=X_U7<!{So?!Xd`n6;>8b%R099;ouGi2426#9T^_92M|?Q
zpJ{_&e)l+TvfJKNUv=oG3_qxqssmcL>g9lStULM~cbc|bpo+ODo6wi^^0||MCdLFQ
zTY4bq6Q(Vexj`B_7TKk~21~)@3WL%W?>$EX`U(4wex+dM7lp#CsW^g{aGwLOlB)aa
zr$I&S%Z$~$@{+aEjFpI<Oi!}H=XyjAGhl+?+@&jdIfUkp_EBqsi`4k!!2{7;JjI|(
zeX*l7UI<$b(Eg%q#6~4Ip7^6WkgMKM>p=PN_yN4fx_^ny*X7SpTQ4!;Ay<71+P`Vz
z+y%_Xj at SHoI<iADW-{oMP!5dey_D#$aM(+3`9dWg{F3h_byUVNVm4#21)Ss2a~akm
zG)_mJ_}1R(+;`H!7kfxQMVPQTR}*FaU5{eGGNh=8tmGf7k!L;Zyh`AUO!PnE;;b;&
z3kQIL2Ov4!ZJY}<PK5Ier$=m};>bd)!@%AU3gjVZ(~kWx#29mIDq{qBOu^i(Dq%dk
z$3wSpwQ>VjOeSvNCIOmvhM2$+1SWP)Xaxf7Hi@`+C#E>c=~toR(vbz$RuiHtBP(7W
zU1c5fVN6vo0O|`Ozo{tHDo>w%v;VbUeaU+%tph7SYohArWEVq8WUzr26PZi<_zs`g
z&%Rw<jN&|p+8P*1{c;Q~A+iuJS8J+(s1D>LfIm9-RNQ3R03Bw&W!xucW<JB8X^l8R
zC8bs9Y>oC5w=DQ|2Y)0h?x%2uA5fIYt at xhthi7M(^<G~hWIWgdmJnYl<;t<1%!FUH
zdpZf=3+xo?46pz7QP)g5TbH}X!J<1!7w86wxY&0`5BnJhQ`s{tuv`{E^%Ubdb8bga
zX!P)r2i6~)y4{?w+WOtU!XSt_^A+YJZ&Q8M#qO!>xt_{5D=j~QNK2DiG;n%S_FH#_
z+W%$m-L~Sovb at i_EuLa0Mg?{%fZz<aoP`jwNOMpEvh1`}WB>t#1rcNfNXF at WgMNX&
z{Kn{;?*;m%dyKxw?&s-O=-+?Nwbouc4oFI8Wqth(dsL-}z1LpHx#syW8G5uMjV+AR
z`zq?Q&GzMH80%NOU~I_|dqAE3h!3L!^Ld{G^E2FkE?r|4{tRCPR>b1E99<<@2ro}m
za4EPVv^1kyUrPh`yd}JJ=K#%?CM|`7s{vH!(Os&PgQ|fNRklF<I^;10`b7AWGA7Qf
zNmQHl at XY>7k6nc=4O at EjBUkA0_TFQS_W~q$fdVGvDlqkd-o?f$2@?OK`7?fJuQcm*
z?nihtW2*qY^)=b;M8K}L3~0redlZ#XZi!#xv10A{H+v+d=bnr|Er+l4cV^sw#wTi*
zJ`0KC)Sd9WV%Lo5i-<$^N}FDcaMQo>>%*OG=l=P6r*+cp^g3rZ<YSOPpk(w}yO&ak
zRGQh7ywz>HjCXhzf6#^Dh%NdA_*{dMeuM!$(kO)(;pi;nWHg^4<KMCIW}jefv6v(y
zVB)a3UBG*YV9j<!&*jMKZJoDi{RG~)bpp~d+~&{lo(T_47ZL}y_Syt*Re79A5rRBK
zL;CKMBb-xk`NbTJd`ROKX8iGhm^q+s^iITjWM3O!AMto-(ML^0`kgW1)}HZsoPJ_o
z{JYBIgUp8dRI&9Je&xNXNmyoc&26o8?hQ%M;1VJpKByZ^cuZ)-+&97!<nxi3s_=qf
zjjPQ+D~$*HEyymJMsx4r(~5IB9z?VS!VH->n{$=P+c0+cot{SZgpD#Nf7#<<M(VgL
z=AI%5&>#6jaq$Kk)<SG&WvCbc=mSVRt-KD3SwkD at Md>7zeb3bcE#Dwx-b}0Urw6 at 1
zrNP^sCy$l307{PVT1{S%9s`MBXK9n)_no8{O~Kg4^p&wYhC_WA at gQP7tk?j%4WX1H
zW%kne%WLY_D-W>w8xo%c_R>APyi9kHc#<cNAE!vM$YS{uT)hY@%Q&sAA<g521tf7g
zni`CJhiHUjk2~`(C8(I*$Jj>KD+^|_9agNDbAHu1N|e*Bd#()V?2mp|ubs_JkA<WW
z$y2Kfeg}4)8C4D-Yo4z|7H=38d^RJ?UVhJ0W&lTNOlnxyX_`%S)`=Aq(MSlwW*RA1
zQqG00BC+y}0oiO%kLAFiRfU%Nd0TesN!(rINFxY-85v_X4BIYa at X-^=^yt2i#gr0)
zIjBP{W1f)U8#<W(BU-HcbepKPsR&Cb_O#NdbSoNLQN!-7#X9>qCZL3lkZP0<2q2a0
zhA$%mZ>Q}EP$ZEA>q^kwA;!6QW6M>1%0;I%>N*)%@8NKUox%4C0m{VHYO(@v*_5F-
zkUukNgI`g<Q&6nL5BlEPIl|AHrNj%~Svg!fHCQ*IXpk#+Q+N(X^I5SjW23)J+=;e9
z+6{a=LnKeUxvpjf-VpiGqWSTcfad)Sfv5ffOx4>rxA<9DT;C at pbcw1mb%y5-r#@hs
zTT0q;u|wT%awQmW+C!@n4!#p at 7t?>`4P@$|52Va8`A)gj_NDvoqXcr at X>jE?&@zhW
zIz`LFAmae2Pgaw1JF-sl`2+ at c>Vb?+?ibQLjbhuD`vY$rd}C^|G<bN<%~6STp99mU
z9jmy;a>vT>4kAZTMp=CVbd^|u)Qvv at VSiW;&y|-GC6M8=*ol&Y`9mQg>&SSB%w0Y-
z6?QY%o9tMGsj}=Wp{1=FOq3R$iwl5_QbLuog6&4%hFAB^DXIAoo6zyz&$pj!1*V3%
znl8*EB?oy)nMb4L#Ma&GJ49~uu9uCcD_Ed#tsE+Kxjl<o-~10u-zV<ebXM7piKn+`
z+U}r at kv1*`Ln?m?A`-Z&58)0S!dZ~4|Inq;K-s5Lh(b6U+sl%_ at pW*BsNOX#?xJz{
zzi*JDOYx3$9sdsZ^!L=Dw)<^=#D~~l4<Y{6Uba|?ei2}X$M2NkWu{}*m!kUK*u6bY
z{fCeQ-Yuq2#HSBQ4!xmGnNd=H0vLwi4M(&^PYfh?zU8qFrPOZbGN_`5FQ(b&k#3q;
z>2BiDbTB%qsw7q<^_6iJwr5|HQ&=hstpwizVc(#!w$G}{4D?G$1;*b5NR+BCen+qg
ze};KR2XXxyAGPr{*@RmZX?RR9blAoRrHJH#mjEu#i0(6lH$$U%qc0Ud?Iwf=5j%g4
ztmCQ@|BHcadE4+-W)RR2=|`9bzdb#lzq7ylUcG4hh_r}*B1BqCkd3ZD`hWs_&C|r~
zY^xw2q%`Mxc-H)JqhZdhwqyf`6Ms<lLz|#0Wz_hm<OyqjbY!7VM at Ri1NM(7N^{y}N
zS@>|oINpSjrl3gvLG%u>`NGa$-V#n)PCGmq-EB4Ng_6poxgIvZ^^@R_^pIV_JLL96
z{xN!6{<v?|Z-df|S?bT&+mkJIA)4S;gYCWbCl(7(HrVc9%u_2-^zFTk^=-{jnZje6
zX8Zi+B6u!r+mD%VEUiUsAa^oQEQr=_PQbQI7wn1#9CD?DPp!d9hsmVmno8W3BnYIZ
zrNUAUP4G)kA^*ls=(k<WGd(H$eA7ELC7s?&q)2aWE^hJB_Uo{Xb=QBz*IK*~x}Af5
zWG}?0NFgifJia&HMF#;IF@;Dbx?7xT9;V8s4#cje{&7k0P8GXfJ`I_8_^$8-JPJ<Z
zSJb5HoA`HRlz4rR%v1hX*&)Yj9{Bn&{#|}ZvLV^BZCNxhN(=8Dp1|P1=G?fqr1HUA
zjV=gXw{t=yK4Rt_4wrJ^GyJmC&}CIDlEJ}M<Hu=ncF~KFKSP{SL{xmB#HD6VaLCdu
z!&4Xx0iML{pvkP*x2 at IfRg_TqDTXKEz@1~ERLipwmGrhg1kq3>&I90LBMb2p!Z)}w
z&4q*wIVp=0LazJ<H9VWX@}r72C?ptPN8rl*wj}4q?oIf%ILS<52o5iEhFHQr+)EV5
zPqH0lRy?`Eam+;E8#4w4k07zxq)mfOl{ViWCTzQNtPo$(!#;;HW3 at 1}noCWb*R=F*
zM+*8i+Ydb(qcRx!kH&%7dPsqoCX^4bT7Zf;4O69N>(Z1xO`1EsD+<u%dEY!Oj`VCL
zhrP44vw4(!gQ#Kb`kK;#NDbT|6JWXTi)5=5$dsR@#|G00&@|d<X$aOg#<R4H{^TQQ
z81q*UB*r=94cg=rNET&vg!69xL}WVoJc&m%;kG)jYCvbBN0vB12bB%kdQs589z*@5
zHjNb37GLc{LwnvJhNu{B^VwG490B2m%aBE2AaF7=g+ at 8wYV&aVEQsS}hA2_emh_E@
zG14nXAOSr9q;o at ZzCGCu)tOWqQY~DVsF$W0!ab22AtKr$xLxH_vTd!75k3vq)b^ZK
z=IH)vvhiy2A<3Sp3wiwT)#S-5C4%sn+7O<qKvX1cE*J1BL5?`p<WD~}{)%#ZwqwEd
z-h*IyKFNy)x}kG6lEZ_9`V4X0SHvqu4I+DkQ&HBT<{!LKi&vAc_>bBd*pqpz$-a6u
zdHjls1os?dTrNOxICLYjZ>8<*apEq8MYulv?)m0m__zU at CL9P+I&U*&a}MU9)*|x_
zkvV{<(PEeBK$en40kG<+CQW~w5*f2GtM~;K6qBJNdtjZp8e4v&`A2sqETt$z`%dT*
z+*Im+!_(MrWVd!ec{|Ovx$^4oLO)XHnVXrtboLThcu%0I8r!yx3N*c<fdN(NyPCck
z7H6vVfth6V{y5Ve+(TQJkc*&+x5_TzcU;Te*1`IYME&Q8dEA>wA@#_EbpiEEiMuoG
z10hEp%^`O#D)=nWH+;*E!=quP!H+#qN0y0H65>sbEw^jx-TRV|0Hu6JtGKiN?a}_;
z%Y%%*BqdA&dz%=99ZKG99N?xVg|C(qXUF9gQjl{9fj4NEja5U|^b|p7GG>PH4MLoe
zkoxIebo|TpMo!_?BOI{Hb6S!faL1*8N^`U at FT3RO)u?{rs;&30!a!df&@Gk``7#(*
ztE>h38-P1ay>iTK&aizsWX4x{&xvELY?NzkMX!`Y)xng_^SBtejGFOXvMn^K+c<T4
zYsrW9H=nO>?R)x(hsFB#;b!^)CQHIbv9<ejYkRZAXYpY3xxZ&OddkM7<4q*pI@!mF
z0qWi>V<KgHv9y*fz~0^Ad6$gI4h_|>A~e~q(bUdC=99i|j1eWiijArOHL7XTo)<`7
z1`4&>)g2zoSG6#MsMau_cG8AB?ydp|i3}U9?x977lla_kpTRfhV>CrP*ttAd4B$X|
z^@o*tI1+?7%AGiJ%v at 99<jYG;$Wu);6y8eLSC$p&4?G(EQ;e*3rh;YCu`wCJzP4Qe
zK#;n$(D%$)=jV$EJys7&N9|Um`~qvsgGI=qhypCi{);cJa7COzevMgUm at JvKGY}N{
zw2u<p+O4O#QQ&}@wsxOveygS#yjIs$ovRk6Cvl<`)QL;&hD!kkzgF)chz04QQmeod
z-GAeG%CeT0|32paOCPAyBrBoszD)9&-`G-+LTCtY)5naq-8z0^PGrQGDY`Tp7d@`0
z8S$RTD`t3;Mkc8|U}ybH*Or-R;7t)DX%*)Rk2mcCf?U>|=f7>k^C&LKR5Qm-2zjfM
z5?fm at 2Mv<$i!$3r_4t*dNc}y29wuD64$j;>0_bHIpZ(Drw|Cj`$f?Eq#H^(H1OT{m
ze<1s`HQ~E&ynxxH^&Vz&*Mo>~&%7FfK-VPNsAko_p_^UgI*qA+<D*VYwP`P;(F_?m
z1$SIEwlx$$_&g>Oy!4!XjdN^osT+}KDdSy at QtDshRod;O7Rkk0Q^{H~kcSmUkoIrD
zcuMDDn;)8+#0!S<=TLEXM at U)ppwdQ8O_8YtIMi21(ZkJrsM{kvVegG}HE~k0)O>ne
zAw4J){41f8QKBa91<?a~DVumz&SFBR<&$#LJX<9EEnyR~y|5$T6}fxJfW|k<Cdtx4
zzt~4}$QUN54UhI<7xDZ~yRR|EpX~2FPl+|gt$Q=+I|hz1E9G+J55sBe+k-cxw2Z$2
z%e0uMqHw0{ve1qIPe%73OVWX%x|gq17UL1^9lM>UvIH6MWTH8{faRUTqRa&DX2hid
zlu&dsrx5o``x?qnU0J13QKC|^+NN8(+cB0q%)^-|_(8Tg*~&r_Y*RN7E_+pJ4*h}B
z41AO`{h__<+S6Y6QDzw_09=Fi)FLDMrmXNQZ&pDLK8Q%EbyS;$(c;hYy&yGZwi0Q|
z0`!v)lZht=)ZWy%bn)!*K9r39Zs$2QSD5n4AWuojvQaW4yid_(aZ>3)n%2Gwkl3Mu
zypgyp9gWSRhc5;0X>ue^CJl3^KwD)Oz)K2YB`85eO4>f$VOrXVHqx*M<}AYGF=m(J
zQ1=BFl6%)|;*i5|Sd<Y23GEKQ$*fdf4L19#dEnt$@gqGF(y^GWgg4z=*YF5rurwM=
zMKJ?fvNxQCzU8i+S{SSxPx51tw)z-i#_9}i3{gntcT- at wTQ@G&NiVqfb=sPnpbX~*
zJ?Po3agtZ651EL51nYKEN`}a9yWe4%@Y`L*JKE-y8-jw}ih+Y0)X?xne5SnEaV~Ni
z=KU`Jrbk+u5))#gc0%Hdg?%+cZ6YT2IOLD-Yv?Cd_UQFC_ANZIM~I<Oc*cDomvwAA
zQ&b#@n929zi<a$8>&p?H9ClD4XzFaD{k>)znLaD~EjzGbZKnPgZ;VR&A*BOCquq`v
zY!6^b8mI8=9(bu&MSNFeFT)`Dr&9fEg4J*IG;54w$xE=J`<7Tsxs_ztml7zvEx&Nh
zx-Ej{;aBA~u;ZihvJ*1_3DaF6Bc`2?4_vTL9hmyezqdc*3-2 at a1}7I&LhgmXV at rNo
zAdZFgi1pWG;zN{H%CN#ykt8pKVn-lTUwNtYE8L}MYS1H0G{lI>vELaHdlvKuXZ|?M
z;(3F;k)WW_?MJS$5UIf_w{#E)52}$K;bA<+*hatO6^JAN7M at zS#vBRlU&p+l6378@
zF+Wb5U?MUX%y?a6Hz_Qj(h10=;`tj}<L(&KGsZ_nc$Rj-z2|qmM!EJP at 7eeaqXytR
zQx!$TmHM;YtGM8k?dr+#0a*0PLg>O at Q9nRGayUpBnlcM^mI;ILd2~ZKzKq<lCS{-b
z)fcI>X&JDjIh~&EcFG$JEw|R`C_Jnm|Ju0tCr=S4k-LmdDhp>##oz*#FF{q38I&Mq
zuhCYVO4G%XQl=CeDH?Ja!aF`}-MC at Te`4F>cO1RheI`+f4FnSLDZ7n#=Q;I!FcZ5P
zUGIpE<5&6J0cr=gRqCzt{pH(UFh$ah{){g!@VQrbrwynd7S<WxK6}0}J2yM8m*N2=
z;JdC$48_9q-1K}biG2a6Dluc%D)=b1x^a7^C#;##Dw><7qCx0WuZp6svQ+H#)rHxG
zAmVZRO*&*t)hbX+DL0e|NCBF<D5g0QYguBybU~aA+A!^f^^tKwboosw7;Av=Gp^oJ
zj62T)zob$vdtGW15^#iXh4v&^37my7MhtdH?M#oy)F@$Z?KA89^Q%Ur14+6rCk~r+
zGLY<nPhNCeDW*tJ|HaKsOv2CG_2V8<6BJJDwk#DtF9QRjbOAdr4i05U3{1fg7DhNV
zU6-rI%hnr}ovzdz;8EO`j)jP8`Sw?O+(lW6(ZOE$-|1DauE$nTCO(VBp42 at 2onFPV
zID?MaT6 at 070y|ULhiqR1UF4|31j>MM@=juk$?=dfeLU?&D$tV|IHyuGNizD@<rn9~
z;}|kr at mk5RzzEg?C3p!Pze!jjJhOeUg_mn^$HV8S$0F&szf};#qPF}STAAM$$wlN4
zEY9pkv?d#&ePcyLD(%Z*-b(F9lnb4QY|A>W;9$bFrbA{PUrFL7?((bs_1(jC&v@;f
zNJ+ at Y^d=V!iy0Et7Ip*y1n&~gAklM2#zQ;W#}pLg>i+(;y>{g4T#_ at mpzF<(u29R-
zr2O`WnsGj_q^A?pB&_Yq53 at Fk#T?Pc;Dk~~A2f$pb8g5ahHryU{SXJa$oPhhNaL0!
zi2HhY0b<UMC4T*|+(Rur<wlTf5WT2JY(<2p{`qJ_1&srrk?;uz(rgmur>Eo7{`a51
zDLuT(pKn$=><>9DeO=w_^!e~z3Mma1v*~%D$_Ic~_%{1AdYA{8Fg+rA<7V&ks3B;Y
zJDuc2vlqKAFi^Yxt&nCW>)e%Pao=29s>8!c1CAs;2W7Y#ZQvk0fo66`3Crdbbmm-G
zddlv)FpBK4?)9i<y2z<P;H3IzoHRH6z at gsLNtjM&@TQe6?BQ$lPB^}6Y==>FStoIs
z{UhU3=6T&s&Iuh{^3bMkH``bSts;5{xf!CrCk$L0NfmCrZOhvXEeD^vv at T9h;11Un
z-HYt4-5zPDI}-ZDi;0UHG63#J$TW&~=QM_Puh?cqO=-~7EhQ_=u&ak`4PbNMAfDTF
z^bq2u*jSB$_lHXx>~zdI3=<P?Ty++HKLCc&>wCfMK4cSnSRyZPa2i(e$C0}!%~Ss-
z29^DMc0ZKpSf`z|_c|u85@{elqKk#B3*j#V7(q!)f)$U#?yT;B*`>^rrN7JlGFcr5
z3lk%4 at W)(vVj&bBU*6I3{)GdFm(!K-3u_{5oUk`g1_1L59=QI<9KkA-^`GDiq#>su
zj9IYy24I(Ldym2wSJ<=-Lv#mDL0ulGoqF7Lb-WmJec$C>480&pBz^VomNVGdWTZIJ
zYKGATnNFONe+6sH@<WL^uRxRzEBY5j&>b9<e)>olfGjnxMm~79_cA&Ze6zLr()|Cp
zhXYf;xV=HiVw&}UY<fI$EbJ!Ectr<3z177jPdI{o8=q=?g0PaFC38lJZelCp45T4;
zO76{{^G8UWu5Guh`B at EQ$pE0Dr~tC8hyi{Ik6kbAPcpE?8{~))TkXB~$MH+P66rKX
zonNZ(h8Uj6NM&E4b}>P0;yE)`)nEGs$rLB4DXMcI*Y6AOhiXl9b&Vct)`mjtR~p4`
zHoz6%s-j%=rNLME+OR;`0&z;~_xJvze0kHsbehYZ-Httq2F}>>_67s2q!*tDMA((6
z7HeTDW?iqdRu at +j6zP0s`mjGd-h|WA*!&av;u%y`&-kZ&rU#Iq6p3hmr^o{PRf#RI
zCuZqMUn1mZT1IOSt20Z1{AcwpPm*{KB@(&jI;!XFo1ot<^^)ZP!R0gq;J5(w%^=Uv
z3rfw-Vl*VKqxxBCq|Awy&{>U`fsJWqGk+}UY^^xJ&s1J>sQ#4#@b=mY%WDauz-ISw
z=P;Q)z>|g at jr_*DZT%{#L^=H%sa77$)~6S!3fVl#rxinieKzv^%-_0lSNx1R3o#+`
zIPqjf#x`nhxE?9G1SZX_bDC5-69b5Su&L at Qz-kx>=(phuJqRP_M%wsy`6?+}m`J93
z$r?}xO0(osy!XpaEoG}IOmPQ0C&`kX(uS4&3TasN7B)D%jz9qc<=id2HvE|ebC-n1
zWvNL77nmZ2jw<;$<8v20jGD$r7zHJaL>IsK7<DJf42)M~HHT~^5oaM~Q7ScP{3B5c
z*32YsF8do$jY}38pqzr8F~`fL1bvpcaricI)9)_uT!1P98EB-t%?Akq#+g){CigeD
z*AKV$b_abXQ*+;a--mMl{dXjDv9XC~<$l6wfUH=o#N`tC(%Rn`oR_G&^5L*gGPGW4
z8>UF7>9Jf6o%%OV#VZCNGEYR;sj;obw53m^UU?Gab+^96U(%N+ZIDT_I+G5MD<7L6
zJ<4bDJ)ij!Ov7V`P4}s9bE1kuIt-EAn5<FR0=cER`(k_hv0Vc(O)_cf2_6d7W;RP7
z&Rh9-LZhx%mBudnByw1G2@}JW8c6eJulS>Uh){CU3}T1BwI>iW2|8svVMCY7<iO}H
z^-Oj*NoMkDl;(*8kVQ9r7!lllvzB4EeXHHJ-ahqvDFu!3LAq{s)^vu#$%FL_>k6m6
zI9UH`vjnXVkI(BH&Zqw&)#H3FCb7Eaf at xe0sUGJ8>?l$i+Y`GZMY+uzttM6K07B+p
zULeCC8BoT;cHU3iJX`={?9hJrJH0Zc*nX2Zt#-M^`jr=y4yr1 at Qb946dU#jHykM3O
z at h;`to^lFmDI8}dC9aVgkpLydE!#(XS)tC%E2n(d!`%YYo7GQ!*6Fr>lEuXM6Cw`c
zF9QFe(QK7$gW!Rvxuie)e$<D3!(?6=NNIqh{4b-{0RP3<y`Q2Qkc{Rs0c;oy-b}&b
zHb>~K{hbYD5R`#Af65=sIEnDCNDorqA?JYhH2le}DWTxD?OXuw56s!Au-|dm+cvC?
zJ=tp?xWrG({o8g~sd@$qZ;T54x(Hb5K7MaA9Q9q|(z1!+YvLhn`?vNdQ!=(f2~zXP
z=(jk%Ft+c1a)Jm8QKMLBTr;tcu0y@@tWA6uA8{JZrx4Rl_kgG^I~k!1%LZDU*$at7
zFk3~>8i4oDFh%I*IZvRe$+&gRC5^pOk at V!^DI#C8$GNwG)N*kvDs6-Rf!!$(qP(FD
zFLOsC=i)s`26m;Lk|XH~Ay%0$t^Q_mJsaClL0?MnYDW&yW<04xt|O9ZZ3>o*Am$_c
z2Xop$ZPcg+^J<_Thy|gT$Mr=Q=fBEYy(80#pugxg&u?*9my!|2Og6bn<G{bOmv(Z#
zxX8InBppxg72|+qb&cgGl|CbCdkWW7et_osCa)4EFhD5I+;K!1(YFv?&mo{75Zld1
zW?T1l7E{L<C(cM>bmZ at nf4DOv>#ks^8uuE5AR%{0q<){jeq;qOy{E?{HSOLhq*B0c
z{*lG8J);ONy3|h2i~0M~dnU9GQr}d5{u#JwT=rc_ at Pkn@d>0-TJWczm#yCp|t!hTV
zxv)m{eNtYXR{IMKJCbu|%=EF0Td^L)*#0053)`#p3qt@)8S6qhUSmx3Z)z=tCKU`?
z at J6<4rr`7kl{Rqez}+<_?;vao79#rb3?_hJcwhOl?6>kbtU%+HmrB2c&TnxsBpF>L
zO>lS;_ at H6mXe7|IIR<9|x|LzQ_ZRZBu@#$RSnv*ZTwk)afp+LhAvCCDdrzDgXCm)@
zQIsf)I+@@ga5`?e;+wgoAC(y#dWj%5v}t>Qi0q#$o=Tp6E+DhN#Aq1CLq?Y8voHt=
z*CY+arkPkR#ZhM72uDL8TUE at i&N%r<`_hwRw2|?s^{mYP8;&b5reW4Pz#K&x!eW~x
z)SDIEJvr>=QXIT3hdE<t(eqeW(d^Mwx^W_nD1!igL^-aSwEnO-N3Et1nbNfwUQv#K
z_-=-!>W&*a5*Hb<RI~g5{y7zLheMQ(t}Ib?;B&$E?lxQmpPP}9v;jApC<kdHKqF|w
zkcF{<qKD%Inq7^H_KdT0<7pk-Hgu0VJnKw3FLZ_MtN^VnbkV{A|9=>`C^d0J%>q<t
zVcar)qF7^3gk1CvbzJgxGxah;mVyb^?Jh{X%!*tUpjGxK>r94tv1U>d#V*Y_A0B2+
zzv_Arf(?s4Buc{it-O=l&9j>rDX3>NdI)z;E=Js4V$7i4a9lAbdmL0Jc#O6Q_mi0Z
zGqeo8z~PrruzX!kN_XJ!Ca7=n4iNwnTJvG0V++gFi27NfA+$n`=Z>1?h5*_~Cx(Wy
z{a_kGim^ZU at fir8(ClK9>|--HC{0c|irE)1wv~!4eQOQ5{c^#N2jnfeeP!M<YibXm
z+T7eDGoKvcP5<TyS+F9fmI`?gWUP4+ENHZKk*~DOXC&V`#obA~DHOdDy<nG7NR#&E
z1WcY10<n&X^Qy$@88a#O2gAD|3Lxd1$!3?ZtafB at ng8Gw4vw~gtpYlAbaQp>d+N|I
zYFpDH1G#~==_FEkS&EY5W|P~`V<iLHwdz`ItrATNMs>`-Gf+%2UJaj#5aw|U>kIx-
zSYFC1I?yY=5ak15YWg;%BRdyIpgIJPL at Ey_%$qlOUU>?_nw(55j^ai-SPoiC@~8K2
zn23nQ<{8#{#(h9Nz?#!8S%c#0ju<S2Xl}TsEWKlXVeHiN)!%yrt#&PBPArEBiwd1v
zrbi1^{J29Hm{Z`Rj-0ZN012U at LdtKFYq-8?YxiJt|B!-3+w0$LK5 at P5MT<y7%K>4X
z6`d0^^Pd(|&{wZ^Tjq3q)4VHL|8y_nY+So_6s%w)X4N+bOkb8)IhxL354c%GHo=m_
z1nXu#Fijyq4XiR at Nv5>x5wBWVlBIpGhD#2fXq>MZ21+P_Tg&_u`Z~@xbFfGAls<}%
z0lspf&T5yz0pPT-bn5vn8#v%+zAe^e>t at 7OTFf|^sEQ3L%x at ijP=}|cnj6uf7-|WC
zEY>`!y)izc(r$rBbq0frk8|a2S`=@k^9oz8f(J2!#xD8GHt-}DV<iKWbb(}%k at p&g
zTvQQCV8vvt%2pWLp|}w^NvV}F6Daiw|A)pykz;WZWYh1T7px~-3YXlyLo$*iIU?ND
z(rOiZ8io^M*WirPBeN)07G3SyhjY6lpbS{cOI at EvUnI?}Nd_Kpt+A9W=Ymio(rdzJ
z-=1ULH8&c_pD=1b+B7;PZGa-aFX6{Qj^@Z{T}jc?#(7F&Pe at +zusGP<-rP78_f{{S
z?(gmJwxfXP-mRJN-J3-(wV{?ccL+ADtQ>SOV%;*Y`>d72o0U3HIX>qWlM$_{f(Jtu
z%;=nOhm at 4zyd<jF<jfCOypuRb5%_Rsa<Y!Xzz5Ep3_YW6)xgxX=W1`)0{q0xkr2?j
zmcVBe4~|oECD1E^s7V>0XGfG$19+}>)Bdw1ie-?Tqbw}kW(gkI=izwcw>s0&x6eQk
zU6VO*8r7>JpP|cAdvib6jUTc!JGzknlXJOZk}wa(S3##cA=0JT+kZkjfydt!<Z4kl
zyp8uvvnyLhX2mG)%fKuL;Kqu9kQ}3DX2$XebYX^UUc4I-Yz&Yz3ejdMV%@}U`9P?q
zn<c>&JjGJ)Qo`KZjpH~rL?;A+BCBl#O%7DRU|8h`%jIYj2%&*&q at YRpTKYuUL|ZHO
zjeR@%C6FsfHj9|JpAX(TyJe11ri-8m016CKRk4#@(Cku5PY{<DFQ#C8$Zh5{)H<>&
zY^LWjJAF&V2GNFaMvj<zX;<%oG~(@*$7ckjCE~fihk<c@<LeJ1pSRcS-zd>02VQR&
z&>lDIz0}i~kr8vvJ9Z}P13Ff&;nU+I&)IOKeBejY<@b&R0V4*o20}<NM#rFK3abR3
z2ppUh?;XMcjvh;2-anWZt_7fMl)>{H*>{LT8_|2nRbhG1eOU%|C4CQ at D%sOSj?mr5
zOn|~6BSyy?!%ZipdNEz;kqf%?+?yl13~$XKW8O^a2PP_8sIIg$jz$o5*3o5G5?@n<
z$PhXQ8Sh!Vj3BO8lUAN9Y=cfaWd1iU!XyND3Z;);X9y)4xh_JrPev at tPv-cxrwIm$
zuv#SvwvJ?vBCKL&`knNU5-d6ruQdYY&72OZrl_r>8Mfk72|z*N$ao>6N<e(BJP^jV
z?A!>Qu#hJhZ8R2Lja<%+#lzM{H?YIM=e;h~M}V1)SMHyUZn88eF*|&?MP-oT)IX?i
z;};s*yra?NcpMJpw1Y-et!viWHwL()Rt3ID5}BO`_u^wAZ&V|AvcWV&x(E$zbV20i
zbPr3%>?2z*?GBUo!8kebRs$l at kn_ma&};s=+ at gvg$D3O?Gr3KD>?*<yvxEXNi=~b{
zWXMF);au6M$wo{*Vy-B$%#f~$GF!$I=O3maEd`9j5D9F=Xrn~ie3YPr3qyDoQB&{B
zKz|l|<uWKUzWajNajc}2i*cJZ0iNye2OZoy!rqQ_P0~K>N=uApis(qy7BsLCyAmdr
z&%gmq0HX#X@#h3GwShzQJjxEpO^^gBkM1%fKl8O+1&O#ehPm6MB}m|HZlo<BSK-f;
zXi-wwKv!CTAtXm&6$*k)0T<J7D=hImBCh=_w2f}fin2RD1F}|EvP`*wI$x+=a!cnT
zYiwW<RgIim<=Cr7oP<|JH7ovy?Y;K*C<0eH04PV)euNVctm&ACAH&G8gx!wLdUx%U
zQSfIkr!euCF4mMsIBSf)^wuXDaTzX$^&KNqN<kttE(XWCf8ucv!Af=hqsOqeAJ(mJ
zZDrF(_v?-C?^t73x(n&=059X+4CZ}zjX+o?!1s4qUAj}ea&uG9qe+dO*pSr@?dn4o
zsx~Mx?^|nVf><YD`jF)wU%u-Gu6S7g*@`>2=)P>82|>vmQL>Z3vMhn(9i*8kZxbgG
zkVN%^I9stbcBQXxyNI=;(fg^**5*(>p8v6?DMO6mw8~MHbF_EZeAzqIb9SbWk0LK4
zgjf0{X){AxP*Fm=VBadv4RtUjx)9_KnivV=Hoy1cKu%3_@)M89^8I~|I+*K=yPi>Y
zKfZ`oHH69Hqqv<;?@04~KRR_yKXfz4+8^3|M0)oQ6ESM+)KTkb3=pOs`|g9==Z?&6
zleGikR*l@@(3^Vc#{wm28FI6pWbz24E6#Uh*LFLPf{A7X(E1GyZSL*K%v_aT6l28-
zPit^2ft^uz?)NzrQ?}NZzJ5%8haH)zjJTuXgbi{2LAp at KBA**-DZiI^gqj?D6O*4K
zowbnnxCyXAl4W#Jl>hbKY4_j=`Y1`cufBRUcuybqACGqv+KlW8RU|Nf^5!TI#(R;8
z^p-B~h1N;Z6{>Kd@%<yo?m>q0^UAT|d}T%n^D<%&8z-(bbd972H41a3=t)l<GJ1#8
zn$%fk6sLza1{rHn0dvqkl8Nhad4K0nN96ab3>WkL{X-XZAGX&(Qs~EnGOX{Y`@>EM
zeU*ovRMt_#CLJqfokgd(Jtf>R*F)ZS_`M at nrZuY^RA1k*jZWqxy1wT+*_4ejGsD_P
zbn05gd#4+ke86nKZr&Z?*NL)3N!*X_SEtG7;f>X^*c&}@=ZsRZ7E>=tpciXoN~Jrb
z7mEXnswIwJc6?->n`BEs{o)mCp#Hn%Y>pTuOmgrfvjyC?Wt12JBK~sJ^j+UCJ&@G#
znQ*0Ps)85RF_nkKg+NLsm)o+{BaE>le0%={@0p%_97gPIMOVd04KobZ-l2CPY!$~P
zCJY-IEM*d#IhlCLOF$02mj`7@^zBf5?y3 at I;vUy^_&Nly_ezayOyrY9atyxB%;#(K
zyQ%3J(2O4By)2Y^wiw%i-UC#f$%WVG8AlU*R2Voo9vVbhX-oG=aY>qX$>fu`Pwjq~
zFS(;gbW23Aev?pL|K!@jG~!JBD{a>Br5Zn!+KhnQd_(O60D$?29c7o_v!C|OdpFcu
zxk9eeyY1%yYr0Kb`;qKvcep30mRDxUb8 at D~@uFNRvwLKLf>w|_t|#PQvPAS+g!Pv!
zikMbk^qOedOvj?O_~fF#w&jM-J^QgprhiM=7a_YYO~G8 at 9N;hf5F?xArwy#m;$x%_
z>`tKn at lKNCaGEjLYw!Sb3<d3xm-CUZdSx%l>t_gG<j&S$)&}jlm{hJ`pQi~ELG3p<
zrkn)j4rV at qBL)h#xALCb6_+oe)U>FW{Lg5ejF+Rd+Xak%-<=qM2Tcqoh}_{y*QQ*)
zz4MJ0ORG5yU)~XR at Mhy`)Ha5<)t-teVg6{E*73veE1G_YnaXDR!5cVwu77Y(M=3A^
zaT;+RW(kPpbe&J-z#Y^^puxOv|FY6|sou%^*0MjO*9%mQmF~(za#F4agJ%=w<ebo`
z4m7?wW}GU`-2J#IbcpD}5|6Hl at XEaPs=yPw?StuLo04mip#>#&(6F{IIQNHb*Vbrl
zx_Zhz6Z#8;HOoD2c>SVzd2P1k8>VFaX4`5Ko1>HbDex!4>_s+-^#dg#g&0&$ZSTLJ
zW+~ns#A{<R7e{d-7iITiOKTIkv>@K(h<ZPCh+nf7qgbAHr%kSCrMid<E~fa%c0vfm
z@`A?)G&;p)J{*}XE%@>(3KhGD<>wf3pTaSQWx!4QXCojiu9na!V*iNZHmNq9-AJ%A
znlkL3_3IL=Jd~}&@!4S4#K8<k_?8aM``4G?B9CFosGC0$WjiBJd9QI+&DLT&EN+*K
zQ`8^_4w|P!cFjY6j$}hRl26Ep?W(wom~#XmB~A}F!e}o5fhSb0)1+#W+)aX6-~<e&
zQQ*@p4ntcV{U=yMiS>tE`FxV*ru2bRHL#DKO(AH{{Jl~%loOx9BMBq=U^d}<Hzr1$
zz_0`&?u*oY7ZY=9(Z!83G0Ij=10p<KOqrR5ZR7ub(T2r<+Y)B-`QJNp!(_HkwpLhK
z7pUAr(8!Y}>PDwv7PHBoz%!T<F{ZmQVa18~^vDUxK>7apoDyh3Rd%I9G%qILL*SCn
zX at KxsoB)NuApi1seh+JsT(1L at QYviJL-I(stVjxysAd_<_E{}poT<epc8ERfDQg5y
zbmc0|Mn2_%Q(RhwF at 2gbB(9Xu`Ua9MS$u{MjRY$<O&iDSWQB2tz^>29gU!lm1lQEP
zT^S_puu9)eET^_qg9gqJeVuZmIq9Typ(T$RHj>n14GIHZyvNZxdQ_K$Qyx{6^H%Hw
z4~aa6{-(YV{J`|gLW#{Vhr)>63=stn^i9Cz*+O%6FXH*p1FJq|kRV+1<>L-nEeZOL
zu9~<FV5Lz~p%Ft`6BMLsVsNWkH28I#6ES~tab+i&jMl~oXL3H9Z=MNN+zC8EsPV`2
zV1_7tB>6$mqfw%Rl^JV$)#4;07G&3c#7fj<z-N}1$<+DgF6zi)RF|WL5A_ICNd_75
z at jVz~=yX(U2&B at Ed*Uc-06iRv(J)mmiZ;>@pUPWg#Ioa!L=6$0Lc}hcr*u%f!Y#y3
zvY5Z*Rh5tCn#GSCs`Pz8xF0sA8TQB~f*fb_Qn+*wt0E$HuWi|^M25{c80>;F`kRIU
z#(?<9j7mF-O}?~7mBSUnJKJrE?V<@B1C3sXw4~hT=429~{t|<bVYI>HKJ=nh_w$Ys
zaUiJ($OAHThBQ-%AS&FW4 at n~#9yy)aC{sQTxqspXvn|0Hnw9t}ZN`Be)g8NMQ4xcV
zIQTw-6A-Ql$31=e^hfj<cPiM0gg3#fN at S3CF1fpJJCa&Tiyj?1)xUOU_FxX8w+x2^
z_DWgY6=BQ$fw2)tDA6R`5P?q$AHG7p_12iu=p}978C>ndAt%Pw@<R>bDdIXpPLB8N
zi%|fH(PFiFmy~P=W#pS}m-Y#y$EyFPV8he&L~MwGcZOZ;qcSpa at I8C-2dSsjUm?c9
zw at H`k&a16hEvF*(sZ~?ek}Bj#iSnOR&|`X7gr})>`y7s%CgLynGcjJF2EqaV#<tWB
z(o906>u##<;Td6iQ{kR_h6@!MGWpLqme|E*=WW9>nn8K_D|_6G`EK;ae#DpZq<Y*s
zUk|Ak^mB&adA5ai<NC0Z!fW{@;LRg!!M at F#=Xk+`uxz#97oh{tGM;pKSdW~ede%I0
z)n$ET?tx{RKoE+PgB(4+`x*{iyUY)9elYCWYtfbPl0UN- at o9Xd3O6Y~qF2E&w!eJe
zCTE3xbxn4l-bH$G*;3-N)80$aYAT;&Pt58X%cGil5>CxZ>0sRG!U2MXr^bu%Qm|7A
zIIp%$7DLb2CjQm5mXu)jhgo4mUQ#H5mB)k~{wvQ#L=%c&z$`w#J<k#)9a at r6ZhXVi
z&T_5ohD9V|7urkrP!pGe0s(_-HYiZ(j(Xr8n6IE9nKcZ@`o%c8#Q8)Hc%nH`V1yp)
z(5;9r!<s?bYF}F`U2F8>H7hJ5Qn*KBa_e>oycYtJluQ<9gm5U6!bjxgTh3YC-CoD6
zX-FUD2cX1QA^tb!=mQJLp_FV3D3%n7!<UWHZe#wtimS?26J#ofQ;q^GcuJlwmTZpy
zq`<KN2y*><eLGK{5JDhtZ&X+Kn1pWcFua;1#8kEKZT3gYupyJOh<%2+Id2n`5|q at k
zC2(<!)aiJ#<XqvEc_ at 3|;c#53fNDtjIJN7;r|lU!$<&gv6F at z0fdyN=&f3qj)z%_{
zQpZqL)Uq4Ugfoe=@niS8acp*0Uc#79O~<^xPA+cSZz5oAyddZhp+yl|wp%IfOoZPT
z0Nti?Lg*46+R9X?-9!wrSui&CmL054-_>mYsfQDhK}Zy3Xd>=j`3_AHK|%4QhX|E#
z!}IjuITtomUD-NC0n}2>S(YB273pE+ix+LXe5Zd9h^u*g;6UHk*6gIukpORQjZFIo
zZavK(A6T{e_%Uv$r(12Fc}0Pzoo-BXc%WBuPC-u@$_+?~qMXj<$2S{NAstFeWPUOM
zIgZF%7_StYZ0Hw&ku`AcgU=Zeg#p`>QYG-fGmGxwbpdmsLG~0iW1#^6k-7B>3av6q
z at Tzr`0`b!)59Rmgg}ou5p*xESu*x%_ju7--0jhwLkn$*d4=5+ at gf3oKuuoi&t=X;X
z*_uL%1X|ygi?L`{FLCI6N{DX_kJ9H^J1zL2(k!*&P&N*}Q3L+TpFUBh4f`&hn~<EY
zY2Ip+>Jyh`2WBDLIiRE=kMnlB?AhC<JyxgwvxqJAS(e5_kg}&(z{>Ed-H~@G{y{E{
zY8C%9cC7 at pN^@vM1uo;V2EZ}C$VZPoc{Vt`vA at z|&wI`D??~EMrr|K%fSJiscy^uw
zIel(S(829hd_WQA$XocI=|zhwYlo@)r|l3p6xRW%RXW%3nRZ5sh3)&sINPBg*sjsq
zGRax9^-C_;>7CX7G9dGhA3&u14S~O0sa~wiVy|IT?AmDzZ!a2?T||4hd3Eh<3<%rV
zZ%d&p0*Dgt=C0D^vqtZ66Te(e`kIxcj+sa at rdkDqlswkP2%l*vZOG8iG#D?#Cgq<!
zEi04xGV;-an at RrJR<B%>iAFgQ8eG#(Lrg;31gA7J1;2)edDpu#G^a+2NzdQzogw)0
zmFHaXxx&rB7Td#0Qx=OXTJ|NC01xsu_LjBYXc1(_%ikr`UiMH$==M?mMQWHHzG>o;
z!(uG<vK5o|P#C0|x7OBC3l-K+P;10IxUnO)G$N-%{`QLR8Ddgpw{_sR%&J*D4xYg5
zj`BBLk_+JG;^7y^-D2iT&^oZ^shX}-W77mm_y_KwttyIghZha2!=!)XTvT9^Vy6wL
z_-=>HZ>ns`62l`gS{xvIDrVN0=LFt*qr#uWNH^cDzlE7K*x_T##cq$wIFU#>xHS5#
z9LXNsH^MinAh~sQ{=5O}>%F69L?KUcBLz(9u~1-|>fki>>EM|5Wm;FIkIEtq5Nsc2
zii4ZGlqmO*ZGR?r3nrz%39#uUpm0@^zY;1+fNC!evf_JR<02XExV_U}SXfKe#&YN*
zLc~*p(SZAp$&Ty{RO<q%Tq2{?g_ao_w$&^=;>)b$u^4bmhpQ`wC%B5~Vj+(4;>Cmh
zA=ow9hE3cuzz9J^vdWn6intN{Lj=7gMl*4W>dFR~x4l~=Y>L;LLrGSe?44JD6{9P0
z2>ee*Yf%mREUe|Wjpu|1G^fNl^kHiZnT7jyMKuF`KMyboQCUjcp)}d10B2T+6%sn$
z5jvd>>f>cnL*Vw!RmNm5u at 7NZwujo)(jP1`Li#rz6LpL`SI-5dfXGc}#y6YasloaA
zWs_+twDq{tAPufy2 at ehS1Iuc9Tx}l|7<pS$VvueqHFSGh%F%7zB8^yD$!^GS{xD<>
zk8;VO8HQ}C<dI8V@%M`jA1r&^C8?P(aN{!53mukE`xHaj8#D at 0@sK^Gh-t2b;Egf`
z+OYm-oKI=e+UTI9ApIqbVQ3ePU67FUD*w*eG-iF&xK3%Uk2<I=ZlDG@*Bl+G{zj~p
z@}z}Exq$^0{{@n=3tG}^&`lJ?4fv&t<B_4^Quvn6*&nN}g3~N@<J7^^ObNI|8O`e;
ze&EKY_=SQ#=v=Mb5zVo^`$_07Lw&tT>@3OFLpyX8yHxZx8I1D7CaGse{>6}j1=2;+
z5q!W_UNnEyxujj>H|dy9z}pHoCA$Wdha`)DOV~Z_B03Ty>ojo1KbV9yORE&<X%of?
zm1PIKhDc_bC%cToBIa5XLk3KUo-5j|V~|TP>7#(FeC|d=j()gqo*&_$VH%Kp#%Pk1
zSKsl|1q#YGWX^@}z<-$5M;jI0O5e3kAxOd%7bH=I7$Z7fw|;D1;+1enJ8W+FU$MZ3
zR%Awk7A5QDV99<U$(1O0^i&NRs}mgppmb{M8*y&F_G^rd+0s?O-d at aTQ`VThHf8u7
zlCtTD3xa2h(k3(=Bq~SVC=R!FHXqvm9vrUkJb$P{^P74olMD`4=zmXC)$&Kf)5xY*
z=y_H0S;DFJD8-ig_YEv9Lck46)aG~2&g8K&#a^p67D<u)YE(gkd#A>t2R_bJU~|@r
zS%OQ@#snL0ymr||C0}ogB5P#yzp=T at sFyImcs)4Z7AQR2^5h+DLEjAQ$xb5KfyWNo
zVl7RZ@#1j9yo}|tSB#q`*^_PF-kgkwF<2RU!ZI3!(5{~-bGj+jw6ewx_4m|QI0p$B
z<)qy-TeHt&=bD3dq*5f*T98W76xTQ1GcA;G)HA76bX5h~n!~tF3o{pIV0Ku~`gwk(
zIb<J<fW91ffTLztcLI>!-r9ZfZLznz{oPuzZI*nlyfk64O at _IBE?_YLJ)$r{4l`(=
zp+Pk*<&DUysr#mjeamw1Fq7WF8%P%z5O~(T!&~%?WtoSqQ#71F1$Xu4=B@^74>&wK
z+>t)}6!?6~zJR%Jv8&&K;*<#@m@`fL%$I0dogET$Zkuns#bxWbixY3NH*-_D_598*
zS=@tZSfOcgK{^Yo9b|A#5)<c?B8*+((vY#>hJS`!AGc(d&W`E~&F49&x56n2E;XXw
zSLsu at h6!7jp2ndc-%1#}bU%y_)1_ro>cq9HNCT7%ZIy3JI28w~i<_%UBLH}nV`u0A
zUh(c0b*}CqGlK2!f_eS+4eOml!w{q_I-Id?jn;x~O*(kp9$Qx!mKJ0km$u+itgf8@
zjX30^z8 at +2MHKqVakaKDintN#BF3w=fEVeM#jpl5qQf>p{G at Oi+z2h6x$8T1>>Y6)
zmbuL7dteY`A4O~uxPHK$G$JraXF$0oc4_aNEAp5-A9n;RV#i~Zr2=l${E8R*7+!FE
z1NB=CvGI$Wo9nfinRoBrO^38>(<oqO#{GN)#5n+#a70hRAW%|XZNvceegAO{uGZMT
zfARwJEwW19hHbSZ&F=$Fj-;J}H*gUuNpKxlL$tKCeVEOH6a+VoA1z?!Qhds2{w~Kr
z2u1LM6>wIf2<|NCQ~1{S#8HSQb23ZjLgUkV$-1j`9^(S*{xbn5d$;A47qu2l4MjpF
z9;=Q4%2rL2c!SqM%@-BFWEdYJ^qb?U$YO*!fUSfZ1pS_#8wj?a7^c9ZTv^ib7)Ps2
zp}lOlaniq)cF{xFz;p77Yb)d52|}%tW at Z~d^nROWuWws14`@Yfe at pQwH{>4rpYetK
zlhwc10yFLCi#N)p7iw^%AK`-+_|0L*2$u2iE3=DJtXy<XeTF~NhpJ*8p7U3F>~<I0
zV;3W1WjnoaQ8bMdBvXEuEpD%+&A{&f`!T$+GO0g76fiG9dPGr8T$Wrb&G6ZQn<8Z1
zsHp+?Etoy at 0J=?G6jKk728zw#G2~6`ia9GIg%DDH^iURKhALYUfSE|l4hNbmD at 4Q_
z>Glw*0yCSmCTXNU1|AB&OO2q7`yhGP#4b8oMb?X89YShrOKRiLV|94JjF}z0t4i4y
z9<h~ZCv{H2(mk95gyNZBNCyM7ag<@zm$z3qu}3Yr=@#R0UBfLnWN693#rifp<<g+k
z;{VvpOSr?7%H)OFx6K5)fjZ_Te3L=ZQ^YK%T^4=ir%ErJM8bgCx0~>W$w%g??Bs4Z
z=T^Jk9ov?8Cu>t~m;lDc7OIqEid`1=+P`K3w&R{u+nL6l^>2@!Zf$QK9c=w^lj+DP
zCbuHvA53e9P-osU(F$zbp%{T7<8HNEA2zH{Nb$-ZN~F1#gG<7^xP~cg4H;v%BOUV-
z%7=04JA~;O=ac7p?p$UWrLtXp4q8`UD83T_RyRd!wPN%_{<K2D7aI(j#0$Uu>MH(;
zRT5}m>bA%JZS_klC8kdVQGmZ^oP@$SWcVkrkKBAqou!VF3x_$>i?@8xt4KEhA%}tT
zPk!;F%%Idn!}23>gm5KRtE at VW9y(C)63LT{jmyBxSq~u$)^G2*IM$7uWK%z}l$Uwq
z#2eFVJ|;O+ at Eu{5n{MU~CMB^s&QnS0g9vGkAL)a#lhfxH*9rcOoFK=ZTJHM<@{v;T
zMmlOx09Qn30Yh&ZY<p7n*&Q^W2>@7?F7a>+8hv#)W&cX>qUNTtVqZ;-6t(JVx+_(d
zPr+MdqqE`35aDEAYD*SnGZ5ry&rQuAZ&^aAzJ2A+H at mW#%S4ezlSMo;-)lB_PJ4(v
zGa49CraG>;SwUkceQpHJ2kSj+yyb!+nM1HJa~iI-5!8uYy;NcN-*on$Kj`_t+4|#5
z%SW6~@Cl=@;&A=31#tksWmuHU_dK#cOqaNExWE0|2KP)UFhW~=bj*dO(l-jSFlJ$p
zkip9#K=jnqF#%qToixbIy5Q=36AO!IhIR>TA~Z6-gV!yQ5^<sQ6n}~<4gG{iovxu|
zHPT6_Jss&=u5HB&8GI+q11`k3D$q0c%nBNQJ2n)fDvBbUL3d at wGu5mpFNhfAQ-$ib
zj%f*2QsV*C5l@<_I=5qgr1=|)jU{p7Q?DJ973;C(`%?xIWiW;@wg*z5+`55KHgG$b
zZv?)lJT0cY{21B6Tw!WW`agYaL)`mK-zTF#xDl?%S_jK?X3)0Dfff>DQnhF6^-kl*
zO%(>)z`R(R%XA0rt1{+-Zp;%u9_MH*o{oY}A}+Dg+QK;5eB;V^WN`Shd3<30GB1qv
zfG&bsDDYbWIw!5F0u1AWl;O$j0>QEBL~`&42cdOF%LC9wGyJITH4O^+(3gC5B72g?
z2@`(Vyo9?lycqxF-lpn#FHu`=-YU}_`Y<}w?;<{kU9>JwiEJ}cg-*r(POns3xgWU_
z|3g`T;#m96%)Hod^`b>ilk_`xtXO+uSIgb9?5e;8m}-RpI(Y?hRcY0Yy_za9s>Rq&
z37bwlBPXrvN#wUhHJo(ukgSD?_}Ga<ehC>gUn at S)4u~qc?9fbA-HeOekLe-R%Gk=7
zEg<ejmoOV)X6r{kjJybZW at IVkm_aL!$UzNlxDLUb0nxW8{OFf|;*;<EqVi9C^2cVk
zvu|OmJ at 8oKW!U~EwV{0vv~^%hm-r1w&lXcZ@!_X{l~B7gofW3!kN80|_V`a$0&`r$
z{qD=LfBE&l|7mvs-hSt9{S=Sn+T3)#K0RN<`va}-#SA$e&S#WMk~lTYbG?hddk<#$
zZ+UU?U-U2k_5E94o}Zulm-_7T+|pvbUSFL5m)ZLA-2CFd6tjQ#h#&DGWiY4}S^P`4
z)493tv-iEf at 7w=@-+l6%89cscdKY7#6cbygYejzI1*fvOQp|CDwfZdoSIpJd>Wgc0
zOMk>m=xVi?82jWCK0Lr3TfwXD5h0DSdbt4a5lkeW{?dau5zo=HU{5ibGQgd8u}<za
z at H_|-2_DUs<YL?_YBiKX?YA?vn&LK2o7mo@%ZE_7!-Ww0IZ879i-^XzOb2mJ9J0{9
z>>WPpLlez{>UXV}oUXujaq?61<YLl$58s;zN_Y0E+ExG8HI(k^px}>ifBO2e*K{V)
zE40YF>`nVNh?>awj80*PVmk=P8!c=S#TV_?4^7OvmbIzdo9;mXPh=B4Z%$Lx at Js)C
zgAgc^P_Ho#XSP_Y&(&sE_)!#}ab9 at 3z#bgSDKr=&*fbL^@pV>#_b9uh&+E0h)$sWR
z(xL6(70z5O_XL))B)I-Eu~(CyYkuNwrNOjwa#5;tDT&d0U8v2j*5>9yuhIO)MC_dL
zDKcxDg;gmjIt-BVEICP6NU*60^*ZZrcD{d-7frr==S}8o^?I!yx1oou%Q=De=8M{w
z`Zu<kU8vO;LPvr**@{dFA<<v7lEujy;IW4SxY%mS1Oq&xWzGEbAwbK)C_<!T-4$5L
zI at m@`Zn35;Ck!O+NSb701LZBH!Nevg7J;<fICn{|Gv6M)vOtCAY4{qzmrIsnJ*vRY
zol7S{TYv#bSS@!!C1)GRir1*{vs>4H+w8!DH;JZ^Ttc)t9bGm3$4=b#nrWDoT0Nde
z(2;sK2_pm*wp^H{Er}c!ik9~IE&fY5SEkOuJMrY;ijk>KE^pBUT1x!b9;J(R&QC*%
z-2Cfho8)IiZkW2Z1Ywl0 at c=2CSxg1cGCvQ-|76UsR5)XsC!y@&p6%^^Lp86x{iEmW
z`|J2=ql91!+;nYrTkI9w0hGQLtwP^T6nOyAJIuSnay<~OU16rDmVr?YpfJYhC&*{T
z_(XjiY&oWF4u|up{m=vOO$WaM9gJNbpw*Qaff-E=H{x_3S-bT76T7VL=fbyVRPC^8
zjattB<{w^c?QcFwjZ-IK&5y>5+L<&qwHy9-Jhkgxw9anQug^cXKNI>+FS5ypogX!O
zYdJZ^d1*)3=CE494qJKLI{9=mb(?1S$a@`p(Kr3+>Gw|lvwODOBztpkHTuG(H(gr)
zMH-yOKjSFa{3Zz+#>P-teDARIs2C5}X}ow{nDNn}>*?P9#^$5CP1KJNr=q6)^jEWE
zXRWbtDTJWV(BhO<(pQr(0_F5u@=U>0L0J#MmMZ~QWPlmaIp&DPirSW+$@>H1XeK#B
zi~wheBoWbM%nmLKv>SW8ez19TxWB%8u)Th`wYPilXuNUOZM|v0319&4)K*p&!GvQC
zD%8kSRe5IM6r{r*<a2RptbxdM+-Utk<Fe`M7`hQmQRS2R7*SY_E*=F9tQdD)r6xVe
zd#W at LOVY00-kjA|#vsTx50^=8)Y&l{Hhv;{k-miCZ_i0fRvqm2@?5o&V<*@J8{ory
zKFYhqS4z_nohieJ at l8*rD6=Qj&X4Ej>vLmB$IPtkRXk1j=+qo2^8rrr(YeSU1iq&7
z2qQ`VF5`$R7tOpGiKE~b^C#!%-cB@=?8q=_;^7kJ1J~DlQ@&jubDCd1S*f+gh?oo8
zl)9N4lNy1Y>FXSCcI|iheSPeQ2417uct5B&Wba7BbAtE)weu5R9wP?z;?|)mJI&=W
zd=eXXdCynGKr#tB7y&EoPWK&#>gs$5Dz{l at eJ_n&cO<QqozL-P7{ov#2jCrW?eDNY
zhSuV^GBIC$e4K+WSxh|oIUimR8*jp%L0tOJy5})F<tOzq{4 at dPd=;x>@LR3W38r<~
zpu?}*Xk^a!zCIpMlVg$!UJAG*sMO*sF-$Nnb_Gp{*#<v_5OtL+Eis$3e$`$ATaa}!
zont8QmAQ699;l-DRtRit>#N<p{mr8nhfg1kfADOprDM-YCa8R7 at P87!M$fo9*%6&M
z+ax6~edX&FMmBaga#%|A=Z<CmN+N`Bv at yi!DpT0GR-P>5NHK|j`ZU{vDtaD^V0dy}
zTUlC)dlP&o=%6%*yKC_UN=i?zg_l24LUc7YuQzNECNCf(ik;C;jU8_8JeOhh(Vwo~
z$fjS+P#SmU`l?ZroLbW|r at yuT{siL%qtU*-#tZB(M*g~2Vss{AA7g(V8)LJsy=n=`
z?zVOhi}lC*hsELM{?6Fg({%=VVn=M83-tCE|2NLAp34i<{j@|vO&B0Me>mw#cy&HH
zQHj_S1Edgwf7-D{1&-hon7DItmsNQIF_$!$at?FC`uo|%?Ao8<BmRB7_%!Do)L#GL
zpyC{ZekArmKlC35X;C3Iz8=6&WdE>2$?*x~jHlPoBKp=)uO3ZI*{<58eiq9;*?Ul%
z{_MenN$1i&34p2nkztdqVwXHiNRSh}>e=tCPk-TdZ~Df?u~xGh>yJp|*DPxFVnV}y
z7M&u0wn^6B7B+$S^wTk437g*{6dkrl+aE4`4(#OtXytu_JGe~bPsfY6?~LeO`!Yqr
zd{FcgL4K5 at k;xPW95$m~_v9$NW_33A$yXEM$z*jA45j at X?>+dB at Bd@+)%ferzSsZ0
zdNmb(zIyekJqbT29=v*0e=zRz;pi@*Y2{$q$Tkzuf}9snXqaFlI1NI&cEZ4MBKt;K
z=tQ!i<dcICnzepZHuZyW$g&NswSiaz;qT){<paG2-Dn1%a5Drc(f({U2%`=;YIL9(
zI$LWyWSXts5w9NIp|Q|7m1_~+wf#<tzxJshyt^lD at Q|@^QptH4miF$nkA?~aa5>~u
zA*})=m?F7|E`{q`AJs<|h?x6osd4DbR>1v2G2!k^W_ZW*%%-gl?t?X(<}ZOU4PaYe
z`-vkBL-mO<YNP+ki8#8*21i9V*_#2zYp*}6&CE<nXUBtAy3DWS`26a36FhdfR$uX4
z^tT^<1SEiT)UjLR>e1^_-j at yqhd6C0N;8BY*DV=a;+|32ai=Y|8T=-|bVNX)acrOC
z6Iv#JH~7<}HvVq at 8T8JRS}(n?2!5KC{!5pon6hrxI&VHLrFyj(hQQOb20n+mif6P|
z_VZEu_ldS!*gJY|2YwAF=0y0=*SHRow1nsexg=>ynseXn(<A*ik at N(`1jW{Iv_E5a
z(!-!57%y^6k(Tpm at kJGLI#2^f<Gq=QK1?_hH(^F+QB2Mx^gGjdH8x at D*EDso-r at d>
z&Ce%`FEfV2r!3UryO$w8p~;VgK=szYv3A+5pL}aWUfk*wE4y3n*gs|)BXO+`nF!Op
zn>&2Rf(j#U;U~op*n1*C{im+QY3WB#IWR?<u$?y7HnE<AG*HdLK(F|3^7HS%Uo(B)
z+UwV^emgOvhx%{wbHK0chrKeyug~Lu at d8hZwa7GT6@sP4k-?qtKfJ5*hO0^H%bR4q
zh2`b!i*(Tgh|vA73?y at +XD8;jz;8AefB at kEghrFdy_RBE;-&uV*LOG*`-#hhk+BX^
zqm$Ot3dG#c?!t&BB;{X+j)x(2ZCWH*w&==0I;%&<ht?uCiHN__E^hmH at x7z)*g8YN
z8tET>Z3Th<>DW&b|G*oerYOYT1Mq4UcdQ at i?OoJ=>PP(V1At#mQ@;ZjKyR}<9{vpf
z=(91u8`i@=Ms{@duQ5$Noj#t)huXxZ6C`K+wmnVMJGtF--ZbvU#}XRw*1!49Zw~f$
zHVY at 22k2P?Uf_k}0&n*;*%XWev%IRidx!Wa$zSg at 0H)d+B>P7Jvy}a0 at 9rO%eT?$^
zuU;!3<aO{q{||JD|H=Lzv-8XI^#T8ng{5EpKR)OHe_^9R|Bvj%i^aLwC0UQnhCZi1
z*B0j17FYgA=)3$8hWdXf4wcYQ%luxdbD&`;>SRNgxszB|RHC00`yISbir;rG+C;M!
zU*Ly-+_;(hcdUFvog9jFOd&9Es}IelZOXl%S5Ug-sZYmTXV+>!ns8ed)}coeb1vc@
z9PV%Jezmv%WOM(~_<HfU*eIS9o5j=OtKwO)Rs6pAy4Wsuirr$bcwYRW*e?!>!{SBp
zP4Tk$w)n32qa!3kMv}W*rsc^xbz5i9uo)R}jmv+$njpYya-xL}r!8)lsTN<tgfY29
zzzy}~4~-6>Y*cG)V_Mu<T$>w>@$-CyI<q!$W_?|~;XzTmE+*1zUwy8JvW<8&IWsf;
zS!73=)1OVa9o1Ll|NCgtCl6oQxFq;(?e)>?-+Hr`&$bRX51y}MHk|wq-XAl`H}IXY
zn~iS{ww^G?tIvv8?pgFvkX5|;Y-ZADZd)Tg4xtE21B#HB5e`J(VjN{s<1`Qqmm*q)
zv~&ZDhF#?ZUO7dH^2Yc?zUH4NZ0bM1`rVg5fAQ*fV90Sht+byr8mw<>#mU=X1aDfe
zNRwJWT=y9tmuE3UyZ%o-`mgeN&89y-QEu|jgKM$QtBa{DL{elqX~D=%N6^$izCsMy
zQ%~qG`wl)@eS2BmAwXqdV|}Fq0|qmSYjBOu`_{{MK?nEv7C+))2U^*b?2ZqNU`xuM
ze%ulhPuaIqapHr*g at Ge?r#M6<ADgY2%%1fTU!)6u-x^}$d>N^0->{q;jTfSNzOfT)
zpL3Muj*qY77I$?_tgnjSk`y5vvrc3Diva3?tbJiDbh#n`H=myFK>pj1S`Kb;I^nYY
ztUMflwu|K5+akt)_oZL1GY3i;Te?_V(y%hOc*|dGMXA-s#}eL_731>)X4{r(K=2#0
z^Rz}B_&Der*8|Ceo-P;9Hv)^LEDf7Da6;n;TsCd>M9Z6qCTO38&Ux5>Q1Z?A#s7_)
z0P*>UvcK=)|4^?{1fr)Hv%lX1SWdsA{eNfcFo6C1-(r34SN`u8vUVTzdEoyrkR%V_
z>X{d-i}TCkwwBBVc&?}~t<5d3)#o!F5Jqm$1(<HIev_HaphsG5*)8KwiGz6EZR16Z
zw;df2!=u3HHM}J&Fjq{9dD<n;$2*!VCRIx;_9LY<QfhCKPF&EP_yoezEas~B*m20M
z0C{a-1mn-%KSa3aKVtl-n>SQ$eMu(5h*NAt)5E}?_@|NInEc(B7~lS)J@~7LwEu-8
z at 4J9_G2r@_!S~OYN%zaoywU8bq3(&gG{NH&bA)U-KJDvLP4!>!$J3wh?WibbW;nG(
zhd!iZ^EXrPRqWn38?bz-fV_fDE8m9~#{A-<owJO=z38(*57<*5BmhQ8(KQ^-u<hVD
zDqI|T!M5>1_v3%|M(@G at rkMSu3V`?E|M}U4<$nA>KfmxR{{Lsd-hljHIq_n3es$iF
zKknnRD at DD&Hn*}i2l5{s|AAw?*)`o`9-LoM0zebw7K-1E!b1qJ1@~_#7bWE2lqg85
ztlczcu0k$>AO-xRbOk%>2YBf`8Xxpjj0*MfvBRC`Pqt_ydC3+sJ|^Fx=j(@$#uJhs
zA9IOuXZ>*FnajV??(*5IiHfwGiN?QuG#T8$!gnl>$o!km&;0Rqqy0mRUmX%@SoDD&
ze*31;Zv0%ehy6^>0lSij$Hush|H+-Pl#h*Qrkg*FLk-4<X?ZQ%fw at b?w!wQJ-=Y at z
zs*U{MZ4e1uWXF9^#!B5nc);120LSO<;47!#w{lEXUPS3fObaAJ7m#(7_biQ?^W$V4
z#(5#^@#m3zHr~A{#%F>&Yuhzb{M)}3zbR&dV at -JW7iBy_P5lZQ_}3s2n=Ard^;ym!
z&$v>(GF|NeLXhT}eE03Vp%OG)m;ZjOKjCg}WX13-eMA?L4bP(bZRO?%;eCZ=k_!bt
zf6*KC+>QIz8AOi>2TcwRg~990F<ZoxHa6SZZMmk<zFcGRW%>8CHSg<1Jw<0WgK;*-
z8<rm$0H|SUnDDLRlDc2qSYH=D54<lkNFbAsQi#OO^0WzIXP%_T=or*S5G%=RHm&V5
zpH*5<YBl%e%xUxOOq)`PvA5gn=D+TMEdKQ=Cn;C4aU6k>OwldKc`HCb>OtBPE(^Ly
zh1S at S=_8D&IP_Wcl-P*knk47=F&<N5h3fW}>ze;1_ at vRgGO4lfo8rtDU;OI?t^d`S
z8k>YQl8csDlx(h??~{n+iWtq$Mg&eqh0Y%l`Q?dJ2HrnK>qrC}i9PZ6<Az<CQ$0`y
zI9_%-sW?bnHfMlWgd))62qBXJrhU`^_?*Bk1vCF-{AiLm5-(|Dm|DmGE3fp=AjSVB
zW4wp|bKv-eDuDO!fAv{{eJk<5bF*`czsmpr6nGdS{|}sbu~=W66BiglDGP-FV+mS(
zp9;Wx%C!LIX*607AiqMR!DWumAm}T+D&#@JtDIzj%Ff)UI2fGxBrH at A4-Z4agvp{`
zQ&7K0Q}AJ3_A3TNKuy&s_CnlE;u|A(<M<vuEZoPj;&_{D<HeueofI{UYWnI=Mqr}C
zfH**u2%|Ly?-!^wB_C9o9vRh=_YVwe#6Gn973=>~Zs33IAn(EdN%>=CpZ-o2 at cZ!p
z((FP%{-2+#|0 at 6gGazF?{vSB;55fL}Ng$NQx?{ER400 at 5)O;^3!M<n2mJ5){PjO63
z4uP!o8;@^NejG)pdkPyu2eMFg<V<A<#utFUT#AF2?Hg0n2EimGVz&rY0yGiIM1kxh
zA1KSZFx(;G{=^G7<f=2x=F!Ao{{63G@~}@&2=>a>M?S8T3t8TC&FbV>@0NlTKf<Y7
zW}ZirQ5`WkhH%k5eKeanas4G54~e%F7PIFSRfVb4=|oEF&r1{7M5QBz21%+3 at +kg%
z6Mt#_HR~O}!PcWcHOZG|Z$1Na%!^8yq-b9a`=+`T6MxBn|J6DY at zlITdidXb>;7bv
zsQ;s%iyuiVMWjx<jw#>G?P<d%CjV6UUSZBtoIrKNe7l^uLUL<r)_+FQB~-tSo*T8B
zNvypHn7^$TdRBTr{-t`1f1Q~*R|L=Cba73XT$`PM7tzZ98TWkD81KRVnJvbGr2Z}n
z at IL%Mzr56s{}=1O>VHQa*+2C85dMG2nHS6ROAC?!7A<|tLNU9twy?UkIQKpYfW9j1
zzxd%{78<ZLO@*4rtEiD86+ww8wzZGpA2!qC#~**BnIWWL3cQcOAJ&CXx2uwjYcAEH
z{{z_j4BNCVU}<Xlvsa&fKJ%*n`OG!u#Jc%bl$JCTAhZDeH`?wuw8Nr!HS?-MqCR+t
z|3V8OkY-hS1Yjufg5(&u1IoAjY62WY9i#F8hN(lhJLiKRedH72|D}b6zPxWS58UFy
z(qg~;Z*g(y*ZglExyyfF^Z)n%_`im`9F3KbQPilnhRaeDU>F<GddyrrQ?sHzySij<
zBV=$=7P6u~x3;jfHeY6rn|Ou>o-!S4)E&9G?opeA5wGqV%0)Qcd&~b<bDYiaOiB2%
zX4JDG^}im3Tyitz1SZDDJfYz<X)mE%VIH53)es|;0_>CeN_}O1Wi``*H{{+W+r?B&
zsYO;f)jOpYvWywz_QI&yej`Z&^!k`ASa`Xe=3UN_!EoUrbx;nU7vx<aR+bLUrE(2K
z^rJnq#NeWJmMe(a&rqWN=#0Y7C+Dq)besk$?#LewS!9HFmPIrsOgjlN-{_Vso*E&D
zB&%<T%q8KT<-n?0A#oNtx3Gv4_xFfK&^1PVT|5uj{*`QB-q?gJ;+PE^3#qky?Ul;x
zJqA}za&@&xX2#<C=8sA-@*0;N{cG|Ry~G+$S$kT~Efn8-UBlPKR;=`l?M$T>5ci_=
zcI5eQ&17iFy|k)cbuWHT`2jLu6fa5OlIFC$ygawCT6|CPepS<ZT|DWSj~=B)n_aOC
zQg?A+Y}94*Om!OD_^qp!SJ=wb)5_e^>>R60*}i+Paapu%=7FHdE4`TV8rJjEbMv1T
z2$Mj|^PTm=U~Mkz46la8a_OD{*f&BOCKkhwU%B18c823v6kAsmDd>)8{j99k=Zo*r
zV|sn?*BHx{^Fj&Zp1#=LKHU8Fkj0%+4UgU2c(%SzbfZcslwHg&%&yeSQ}fePYnDUM
z4{~3#r!G6k%{$fO=)5Bt<4YBc-wz?RMe1yMWp#CBCEIS(!v+;*aqw*KB_ToEFLrhh
z%5PTY>q`qjpk;gZqz9Zl;1iSdZ|rYUwoRGGw>N!LEXklUv~d_$jqV+H;!RVf5`nYz
z7l(UCTf2O;v$=c7%(Anm7_Oy{LPe}hw;robiVQO5xX`a4;Vvxc)HRM^Y=CmVce+9f
z5ySxl&MgN5D$c%ZswR*w9mY51rv!ddG8SOUGy0ZGUS3?SuV#=>!jkrpk`Tx@|6QZo
zW<F`mWt=P)*i*C{oXG29fA8fH(c9R!873uGk at AD@`AVRT^Dg%lz&qOcjx6Tv$Keqv
z=`0Y-0`yfj)hqADW5#(^KvNF8gp-Xx%Mr$F(3!HxV`4P46dq42dCZY=q~72<rQ2{?
zjQzIwUOpYKi)S&vQV8hE at FP~ti@*Iha{TT5?Z5Ya`rCga?{fCxSC-0Y$XCDr+y9v^
zIdn&<j^2<Vo>?cXjkvf9Jd=Kl9NL}>>2>h~_F2Ibme3M=e$&$F7T<I(-*nz;<z*kM
zvzRo(D!|W5o at IE0gC#>xZ6)vKhsIB{v-RrtD@%mKeE-#pt=9!qk*`#tx_gFEA|hfg
z*w>x5X4&cHy`5cv2Cxh}#+aUq)Tv&Zo6P`m9v4_U9WVIyTGWHR|MuXZczb)PJV3{w
zb1EV*&ZW&jApKA(oN at yWTUW(nl5bO)XqRNxPsmScWlCb9Kh?G5%3vVYce-7mx`QT=
zsw`lZEK!~v44vj%FXvmYYrZ}&s{Hm^K!@ejZ?%62=-t(A@`11v9FnRAKhc_mkn>iY
zeYuQ13ON=B+?ggjdB}vGQ0DTGv_Ut;SER(bPLoTdezrEZoRj+H)%xP{Qc0FczZeoi
zlH-s(hZ~1S;FG;W at -rQ5?&rq^LL}pP3GxS?9%~5b0`Mf_WdA5u*=Tp(QhJiLI$l`@
zYc2q^u{tiaWutR_C$w~WY#7*}j~exN4oNClm>O65F<hF+9So1-q+;^7liI~_EyOKw
z`3x#4a3t!UCbKeI2R(t1Rd<@1M3RZu=`I-HNjQgH4r`-x$pvz`m*R&)AeT)rU)J05
z(!%mQC=*Q8q%RVyodca~#q%dm{Yp9(Hg_3A!@(USZOzg`eU<N(v0szf-+Ruc-H<n~
z+!srWuLsRD0Tu-_taZMm#pPwLOWLy6Aw9h2PN~$kSFRxKW~kJK8k3xQw&_%6Xk0f>
ztIWpwB@}hPadq6d&Gv11Rd>>^TfFy%ELAxV^hiZDDre~w5=jsvDUK*?&x?e+qnDKL
zjzx%PyCdKS;r at t9Szjl-HM_F7yb`!^8|V!GXV?%*_E>B!X#bLv7gdkdth`FM^}rqf
zq`thO%TNOJM#%X$1fuuB_#lMm0L4k`q%x1?r8;M3`0t6cUSX1g73V+-s*qivzGpl3
zNL|+`_Yoc$_;W at kxKSBzWqa9xvMSGCaeH+M@tN-btU{X|`I!F}gL>?efvd9Hx);sW
z9X0Ewt$$_`c%G8J(>+G#YQnUH%vih?L9sP)H5(4Q!jf5ajU%s{kxi5vF)z}z##Znd
zS6n?A0v8I at g9sP_KlHP)`(_BBQdYP16Gsd-5Ho9=+2%OTJ$;XJv*p0Ei}hK^TEY%0
zu!23Mu?`VG at cP{N76JI+Kd!Q6Bu+*Zpd+#jb~`lZGxFD(#*Pf%cu3ve{2P$1DzM79
z%WiN|R&UtJFbSY9dy<UQ`B~=#*D3lC1yNxaO{AP^ePLmVyOgH-(&d{-0|e4pV;m5c
zv&Kj;=Kf>=;|zWn$hmXChkSK>pDs>)d2tSuCy^`{M4WP}nyU&%8t3F3FgXyB?YeiM
zdw67)1pB0f4>@V52qaF=>m at xWU%HW?l5QvP6F+rx+f%ZkyubI7xkzkHLP|g?@@X4E
zlI^2|&F!ZTi|6Zy&)^B4?maA&$anML at aV<<7ONo5vDFzqAqrySn at v~_1mnfU6 at oD0
z0uq5|0gD+!QlDMY4sx`&*RPEavGwrlqt_9KisV`;!Qp+<c`vWbFQGk1g68htk#YUs
ztZ%>AJlfkm`s3#Qp0O)_+?<fH{aFXIv#YSwkv~(8*pSC+gWbA>S;;rPa*)$p?Z9=z
z+o<Ai>$K9^60;*jeogYGY(xNzt0%hjItc5y{z;j at HZ?BKxyUycSB2`=)Kura{Bn7D
zX>K;m)hZ+*pv$8bvaR0MKpc+A0$P=SBa9HIS#n4_IGc8eroMR7{oDTrw?yxOs)q|!
zj8o{W8w7hV2z;lSk+Sz$mUG?GKXPA`_57^(cKW;NKPp|k=@Jb3<wI#Ds(t1?k&>ll
zB%O!ocIr!ubFepJ;UMA3!x54QYiW$R at uA?7GgJ)}#a(mc1NI<~I0is}8k`X+vP=mi
zZgdOsftCVE5GDLwwq*<GB8u-3t4N0_t1(iOsq9N8k~0QfmU@!2PWd_XZwcsdj- at 2Y
zCuiq5RBT+3lhpX&gOiIZDzBFvtjtlfq9T<OJrrmI1dwA!rZ(n6IrVQ84zH~#`4wco
zWuZT%>c&SCw)}=Qup6zb+bgTD7AO*llNYAv&|xunL}pIGi*?H?FL;LQq1vF>2Y4jv
z5VPl2T0UP*1;!KawTc|WMYDV27?^~;UCG9{$V+<?zz4z8FYRnnr_HX^<`4kHNJIrs
z<f+k-or0B_&ROwfb9-xtNb!9qfmd+FMv;q+?X7%%XUBEAqNgrf<|XEq?Cd#Umvqwh
zFD);u){(9=r3mM&`NB<0G=>dhBN)6<)`s`HT=r34T%70Dx!&n at upC&iC=1j*W1bGT
z(Tu=FadhCH^bv5jajri5kV`SUGCw~{(dkd>0O<m9W4IMT?AH;cI0tY8nj2CB#sgVe
zT0x&x{J!zFap2`NoQyi1s<Kf_{I|&AIZfNZ|F`93F;rcMjZo1!ji#yuLVz=jrs(;%
z`Bhq4SXqH(NS8YtPQVa`V*|?+kwH1txm84}FgzSart9?039K#bOBa<C-B|4-QBsIV
zx#Wd;6&XoD<Z7W$>T_5eONH4kx~{;(3!ysRU!0yz-7L<{FE6kgB$w`-9&?v;>EfP~
zgqICK5C)=DCCtuQx+1uU)Wg#9(rleu?fVIEQ4EPJptTnVwe^FIt*u=DGqwM8V{WOw
zRMN+#<<*6S*<#%+P*2zYAaQ_u=p#GI4jKwm;B<?vtple?D*XxygyTi7s&&q4;`GYF
znBVv3w=F=_?t8e9E-O%#y3}H6U&2|rVv9>qF0Q^XJIkGk0uuU!AQ+)olQ*T;L{5q~
zr!{EYx(eM-6cLfK#0UuzR_cqQwn+toZchd1+c16F^l}ow+9FslDv%xHM1>?OYyeca
zE6KEW;mX^wu(~oQRc6$b`S<Yh(h*wKLX!j}f at Ir7d0%RlC|{;=NjU18j9kuYbrtTr
z_@<>C$L?5aQajt}DobP8r7{k6%(6pYB|3HvNrrKSZw$#R&-V3gkVPW94J6~Q4@`jD
z3|Uz|Q1V0fZYkAlnemk^8H#g#^f{$vmAKY&kU|Bc^lM3z?BLtQ=I)CfzYjvdPRZQ*
zDW%{U#OBg25^0R3*11ys+%U=3&DiwdCst&!bsE~Mlh)Zm^JcHh6K!acS0i#)C$0Jl
zid^+;+E8$&f_3+<jV70)sLDx~3MlN*1o-`0Whk<@msDT1N{eX_lN%s?z#U<mrh}){
zqJTYG8F<BkI+{Y}o^goxNJXBCCDq0dD)l<-x0fEM)N9p^VJhU8j{a66QhfRZ*+qxN
zx_dWw;0SePyiFu=+LEBR{$^|Qr3*x^dx`MIH+FAB$-?5K*PCH0RS?(D#0VXih8PU&
zTG}19T|-^gXW3T5fhp$JYEuQM at sRR(F=f13#2fV8`p!0L0 at -0G-`J#nUgPR=nzBH-
zsS4KX4nFh{VUoex`aY69Nw*#bgZS??uBi{M<Ksk7F52v*KP2>}*Q<Of{2Cx?0?z6C
z$xsS-(ohSu5 at n$GY2P_!dR<cZa6`51aPJ{<*3 at _Um@;<kloR0ybULw{<I5w at s25Ke
z9Ux{Xsj^HieID$4OW=zYC~?Lnx0v)}@$Kw^omSKzi|qlG{+U|`(<g-}BLyA!VB at Tr
z(iaM^h`^Yf-x+9r^NuP;Cc5YSi?>(Pc$B*^Iw-a_DSU;2>HzM)aoW3RHgAsX(UF`K
zF+s)+G?r09K(@R=j+OrH3S at kyHvH<Odq;IGn1iK-8j^0lM_au{<AhCWQ&;NbLNjz-
z{}apPKSWFP6p~vUuzhWkb<=+T>86;U`NdTUM0N!-mBpEAd`aIz-B@`{1~yS=E)_93
zyOm$qvTysHhV|4cD!1?P)}i6r8x^6SGFzWBF0BgO58sbyDTK~b69MzA<A6{q)sUS9
z5Q2}PjrrD8c<3}K6(;f|mK`O=mmo!^Bt=)T)1WN`08v4Kwr|Zc0nf{b(zZ3yULY<w
zzA<6Of!H}d>Gacgi*+nEh&@3Bw?GNaUF?;vq7-kOnj2P6Z!P at L+G+zcW|{0yUwwtK
zXf0C78D-9&5uTb+NnD3WedGl1wMw0HJNy?v<hNU1j{+&o)z13Ff#uLkHVlE5$G6?a
zo8r61+uNVY=3jwrRPAF(`)@nFzx{V8?B!d#Sl<2PSRSSJ9L(qCQHFfG-a at HVY~R9h
zK1XzIp at U?Gw(VPXE;Hg&);PVSH4VB<9pYEi40S!U1+k*<6k~=JtI%`LB#V+(O+&4M
zhH*P_h(BZosx?EEu+Ub1EpTbZS0GkUvcODZ&Uhv%kMc7}IWCRdp$Wv=A*v$>W>Blt
z?45QForf1KkmX%kqICJ_3Hd~yX`0|CbD0(r6_gGr664edKXpzh|5|_ti9{-uMLls-
z%X7>1`4ucJ5GEzdp|A^e`%a6gvJh__f1r}dquLk425RuSILHchB`$xO6eKVX?!chE
z3KwZ%esu+Y(oS^WQ_vR^DrBEnNWyERwsk5G=*dK78qYP3(diZigf}9`+1qMAaS&*p
zs(SS6a$O5c^_8V!8z+M8&Ut5B*Vc5n(x7n5#5tH=4yL!+mHDOzz805bp2Zx2mtyX{
zmJPzR%HzU7HCNP+7du-!n>9mdru(-_<dWru at FVM3*{K953#-esix1s&UsUV!mFDVz
zl6)S*x>W at dWpWxNqm3jr2fS}OW6{JZfqmraLB)W0lTQHotUZ-GVWES{Dexmg*^bTq
zfpM-8e8n_rHGZEDye7<$EByF}zy0ssc5ygeJi}=pq<WrNk at vlR&5+NkmR~b$0`PEl
zwdi5gy)~5SM(NTVPy%2w;ZS>;Qc9*<(XBDj1`XX?7#uiv5FzJnhTjra&@Ifb7B4aM
z2LTY`XnKFP1R_W6y&JEma@<tUG7=EkEP=i3V_|6(m73rUg5We0jLr#2fp8p{+Wh|a
zQzyF>euOFtELR7?$jl2+U;JS;9}O9}va-+R<|)=cp=DEm-DC*+_n|b>kgeZhx6T`H
zTIffK1HWixs9|w+ac(7$ks}~chB<jt_&o|bKiFQwvsL(frkdEr<4)k+9Bg)Dm82ol
zIG{37ZIi-ZisWYyn2HkKwh)holbh|^lLop(6_1hWtNi2uJVz0tAtQ+~0s}rnl?jpU
z{Dhj1TkkNRjH~8clkknHdAH$yV3u{9f%%D)S3WHgTwcU7;wCQ$__nT$)dw4oJozY<
zFE1^vE-zxd6Yv0{uv;P_#$Jiu3-FAt;{fLTGq9JYosbJkCTv+-NhKaGw~Nv$>4A)X
z8uT%mTlLubVbafSgZ1*)kiGmCk_5_w{xtCB$U#T?y5dRHo{O)#Q3SuSSl5u_d|g_I
zGmHVqOg9ju_cbR;T0R!J+v|#M9~z1$$=BR7gr#1oq*`7EztxL9tN{n#?8;a~7Dqfd
zW~b*%h3Imh6=Qy3Ze`Kz{N)MTz6tqd$a8LP5fz*nzTF23`W&{|&}2H%xz$;;wXoWD
zctOt87O0uuE0$HF5Gf+(iWlv74bwX~4Hx8_FcLI`&f{bsEiKFfHrUCL|3HjFZw7xx
z(hc`pS=MX;3yX6oBDdO at 4UzJnJchG?$CsYZ^caD*oAXjIch1kwW8i_SgN#t#cKoXj
zDLk1Lcf5(2;UwGng_SA*8ub=HOa0N}n5FCGoNW_Kesmy<#6eaRSuyepGn_n#g;t;%
zoI#aRusMOWNu>u`2wMjT+xFzn8e#{?{BE&s-VDV<o6Tu=*cdC at V{jv#zWb#rvl at mr
zqwQRb*O4o?D7B!$1W3h9nWY9vTz`pFz%IxVjj;WrZGrFZ(lV~C^W}-w7glk=b&i+2
zx{t)VVQNrL=$*{2SyK*j7AFo!kuHc0<vw!|p=R@^OjXT|5Rr??DuRmBuA!}4-@|w*
z6%d2EKCy}%h8xoAFdxfCJJkbc>wL61?0N6U0xiqAQcfJ at yVTgn@Ky$V)b=g?<WNuS
zQ=L(el0!l6YnJ!4xLl9AorIYahhXQ>xO~^Z9WnY?RG0M?>UXBSbF$mG#Q`Ey!Y<>4
zG`kw_Hs>a3%Q-R*+q!g(7i<OWE(#wkW$yJD^<LSny9aGZx4`8KKBMK@>MPieiXD}3
zt_2~)1VnI$sVJiNPWi<gN^N$-TuNmCZ at V+IfDX6e2JVcGRiGeXVZKX*13yaG{Gg)k
zzzpl2f~&rmxjF8f-hKH2Cqbo70i%3{0U>b-0*RoN2~LT|JKWP(kQC|*X!nafxwsyn
zd)Q#TH_a!<f-lk4CxHT^cx)W!tC+`5H&+~ndlqd$<6FD9i5<$gwf^0BK6(YSR63%n
zeVxTXvtlnC&^Bf()jWO*Gr8NjdCIjs{jl!pb1PUI%p}lm${hsVk%&fHG8w0HesxXl
z(05Z6g$QnGz2=)hx#}ebTBza8JoaeVf2CD^aiPvG7T^DXo^A3Ib2dxYLwC*%p22jE
zp}=%@oErids<u1Vv`zm|LNIu0VHWW%s`K4ha2(SmYZzB4aEC2*o*;5*8AA`s6IXdd
zK`w=m%ex*giaE!+pyj49@@G3C4WE{uB-J+CR%(=`W{kyr+zt_y#IYY^uuY37UmuM6
zR+$*|eQHQTYWw^wb99rtw!$pBFY%?T(xrPxW8Q4Potlg;9h9SrT!73}aAaW>I$~(h
zL;nBM=;9!o^O<TNrcYL8;k at G~<-#j_#gH%FHa0rsg4R_{+w}>?ouzsB_QV at XQIz~A
zMR}j^9UOkOzbR}cYdydid{c>Q$WCq+3z?2P$xg3v--I<WLZ_$Gx{lQBJ3YbW(wT at U
zk+yJQ$~{<IqGkY~*!wfCC<k}=NBxN2_Wa^f9%phsL<sMOBq1fd&EaP)d#ruspmhpS
zMKW%7(E_ at 4w;$N>cn at E^NWOa=vQ{<G8)2YCN&M$a2jJ;ocR=}xg*w~(x!DCQZ&4uF
zbfMbx<H+~05FWs8Fq2fC>FAag=HTHB$^wwNXTxn*9*3 at 5DYYGp8ekTZD`mpbDXy|4
z#&_EnMRUSxIbNi1SBqdFQEo5JP9|g%FyVhfNDWN-ITeJnW5oKNM}dfC^CcN?`=D`l
z^`Kn*(((!v$5==7GO&B+Hy7pGW!$hAWiwx-Mp<!a+L_5O%3DvG)L4*jz!!39rEY#R
z#(_!xMok%XN8KhQm@^gsfXT_M6HdZF<jvmX>ng$CZes2*lR2J>IG(~k@^v}O)ma#-
z;I1giNhkJrd+)Jv#Vr5%*Jaz~xutoG;_<M}3D$S#rh_F96ILlwrXtTZ2~HoQ#VpC}
z((1}8hVmZ}n0oFoAf7NsI~&N^cf~V#N5WyGnJ&)~`@|K(Dy29V^P2!!dnn1|54|H(
zI!vbaOB~fwy?BhVPAO}&w}P53-*9P7DZ*Y?ti3or>$*9n9&}vi?g-WO5T9 at G_N!8=
z-u3*CC at tLieV@|rIUB`&LV6h5qYHVNa-rWjZCJ-H$;~F;JrW(w&W)spzcuTyF1gt3
z=td_do<OA2CYj{mm~Y)9?F6mbMWDB{)6um~{o^__jNCpNbHk{Nk^nS%MF-yl^Fsu5
zzn^Hm{(iF8yF_&`++9<^EfM4#+y*iLw9v4~U(?i+F61cEgA;_wlpiHx02VA)5r?1=
z_W<QY<@A^qkVKZb+T6;>1ti=>6pTDX5_Kc#oGfc@(hE|drV-t0Z5FuO<9?+3Rbp=3
zVwPaT at G!vma0#81%_UUTGEFw at F6DfW$R1%Tr6W+8!h8&q=)xJPmcAP$2$ghYu7Q_C
znFjB0)c_Jryns^)TS^@~?TE{-8o|9SE#iXhWnaP$GLNM2MJvEg$)j?X{aM6h+dYvi
z)#{;iF1}!+SO49%zdy9`OPyHpS;l-QG_TW+6lE<!9CT%A>0x$V6YC<$$a*2oljED;
zQi2+ukjv?uei*}lWFDwx=ZmZJcrcZ?ATl4>q85JHqRiADwpbT)EhzGr=CBto6E?Z|
zts&JHyZS45w8t7Lpt#nhkqGe|jpFgv?)v_BPPVft)<1rV*H@=Ajy-#XVp6XA2OOk>
zEWJ3pyv(jd$;hUMExy=0_|`63#Q?kY7I^r&)x~?G^R}E5tjb5jLUchesdZWb25U*S
zTH>S@*skapin7qee~+9rhlU|@tJ-z at A<m&@25!a=CM+M_%luG?%T~Aa at vAG@>?))y
z&07Z!F0$I>YBv$bQHbdzj$7y at baw-|dwc`?9vm3p2Z;YS1d`417XoheHj+UU3#g$C
zAKiy`RJM%N`!&wE!eHUfDH{Q%5Rd!QjVw_PtVA%zgVG4X#OXzD7*N$IodABdusQOL
zj(7!Tunf at JL4Ahm`HPdg<Ic^|&DDpZmngR#CFW at W)ey6Zxhr6c*dCP!j;&$irI3;x
z-`MxmA}qN);F3R98wV~o>?QF-_8C_Y8Pkul3$=#`UM#q%23-2%7T$G82!`833AqU9
z at w#GMUo248<G4$Xr{K)uqG at 0cQ?KPGm=~iSE6hW at b1{D2?4UbW`qZ at l=x;vyF6+2`
z;dVov@&pH8g at ytgSUn7&!uAc`elonaU>Lh{b}9|GN3M2@*ClR7+0;4w=?czujv}{Y
zzBKU_j>2 at CC*o3tALRIlVjU|E<j at 3MkwQ^W`6x=Q=UO>At2M3(BJWoBi4Qr1|NDO-
zFz)~PU!j0F|MKA9Px#%P=He&1hZbb!<R`K{trbs^_s9+|iO%_iDV#B28iey at 82xlQ
z8)N0;&w>>oPR^ipesfF+*b&~&#7oVzuFhw)up>o at PhY!vR67vbV+X^(xN$kykWiW{
zcoOu{aI?-{Xs$Y=|Bt<Q?`!Kw(#Pj-zlsx$W&|E{5%`i|Ai;nWHa2(wC!4XoT7iU7
zf)I;DY&MzSYyUk at RrT#$B!TT at X1~!VG157Gt*)-Fu4^*V+wNK$z}*GfkI9dgI9AQ$
zcS5R>r{m!lUJDTJ!;~lE*aUU5MRg9}6i`G%e0XcZg7Xs+3;LwW;c*YVSf_Q-IpOg1
z2U!t_qin$H5`zsuX9ME at s13_6LK~8IXS at YfAqY@py9L(-pd+mupuL10*Id?z1CwIv
zU9}2>$O(yRgt5>*#J7)h85~=<-;4S~?xZ9v!Pwe1U%Y!#!q5B4QTzC(|GB~;g-f*)
z^~mpR(dvtVS~L_#XJEU^Ywi$Ibw<0#-AV5J=6^_L9F{a^*U^&PhKJ-{`q9+0D^MYV
z>Ly-G1^q142w<1b;(Y}Q>YadZc*d}Mb>M@|i)Q(ZCbWF>4O_~b+2tWzV1OB79UtF(
zVc0?c=c}`8Y~5%OOE(`xBn(va@~SJ^vIch#XR2FMZ40=?0k$lt0mwV<#_>6F3qCa<
zrW(c<4sC?6c!=mD6gBj(K(&dNg8h&(iRL(hLi6@(><=Pah8Dn67|Z?pk6;f!XZP1V
z3S at A=AWhA|^NsyOO*Md<6l9g}VA%+9XJPjpl2p%&<*5Q)#krlV)p`f()2j>aKy?(7
zb2Tz at bcXAsDCAR4uFfEEWAFm8*n<A(VgTL;!=uMyL}jXkw08bC=axSP+)Rbxj&0f^
z at neKydGT|o3ZQco&4+T8j at 2iuz<Sc}5>8=2J-Oe>S1 at NT+`C(540rJ(EOTJtfPq{J
z5!@X7{Y4AeDbB7byU9%fDm<vZ=ddvZ{IsQsjJt8q_I`+AsPHblF=s_p?}CfppyVc|
z06BAlnfDZX%o?KQPAy!oB!+=SRXCB&12PTD;xB(Dh!!guE?797N^gG6IRuFiE$38R
zkl$AMJ5kv8kjv?D;kKLO_(t#{SkPB36oP6Ac*CUvIQWV}I9F#SdyZ`<GQ-S-hVGm+
zL<Ad%j0mtC0j_E1u!9wk8v07N;Ri^(TeVB`dgiLj?HIQm*9>}=&^Ba<dT`|?%y3k5
zK*GuBwwBSLOFqZ>fBX{^V*WG&3~xcNd1&0_9bV!HuzTGb3&0n+W?bqGGDelE1w`k!
zVPo~&?ZnggAc8Nl at t76@{_WrfH4lxD-qloa1+DF(H#+g?3gsXfA?4^zfW?9$Cc~`@
zi;JV<Cv}e^ZfDE%NxZ_ss6m5-z2YL$)c`B#y9ml=xFO)q1PeF%-=iMZm5#^^XM-%^
zt%J>Pw!tQ=TM=6lLkS*OLujlJQ3=Jp!v@(cnfS^I+*6>_2Ej*rDiSyb(+wOqR4euo
z5thYU5Ej1~3&hWhhL#a42vQg^q3}0Wxt-deXgTp#y%7!d?LHk;V7dbw;Rg$k260cN
z0`F=7|9Nto!Z7-cj%87~<u`D0M=n<t3^eBuQQ^kq6Wio2E|w&s*e#ySQ9NpwW%1Qp
zxPr+bSanH<!|Mb?Z7Dxp99G3ff(GToHWHB~7Ln3g8f1+sD+Vb#ji?)4Q*1X3A;*Og
zB5nYugL8U7(+t^`#}$F46ADOBC=Cqv5O!0G_rpySz`cb8PrwRa=bvCU=y>6n;zXA4
zI4R+w2#XJYA48Wn7OVaF&woZ7vM-><fR`UsCg65N?*I3V)>7+>2vcrBP-o!P#wAC(
zq}hNen9e%{iBRWl0C0HTzTgghOK-1*6jSurtv)mJ>nq$}>p3_KTqk16=WmG3=EKjy
z?Si_)yNRYoz+<<zz*XpfHMEuIJOc5+!RQQu?HUc0g5rtOi4-xr=uQ$g-))FHw;hf=
zq(N&VQb_TphVA^*Als&Fq2F!;N3Kq<uEH`>5;g77Bx*gSH81R%sfRW;im(c_1QRZt
z{LX*CGZmV9cU}kfqjF8u5Ctv4nbG at f!Q}$Ce`kMcn-07UP6feBaarLF9Oq7-ntQ|+
zf_V(^2TOcP>^Wwn2G~FqN0PEgj{D32r2PB>my(|uF^-`vAx(hg7;ssX3mgz=eoGBI
zWcYH5K{9JxRkQ at R5I_ZJ=5GPG&C(zM_7I~H$bQ7yt1W~QyQufuhzG*CrklgxLG1SN
zU>QoyB}!n$M}dbtXusYfHE}aff4OkXi&O`@u0!b;maQT5L9cdqMF<p0g(CIE5(0cQ
z-TvCvyrv;bAa1IR0iX_UF^gTMz{oN2Ds6I3&MjQKl?Qf5T>A)X2<v-iQbH?UQP?%-
z;2nLN^RuWpQuc%qZvZG7+Vh$wmWzNWPa>!892_xBn(Yg!-7d4|2Rqvt^et5vi#(C+
z9JNH69Ic|dO^R58e6KsylQ!qSjTlqdP2PCouGJNxtz=XvZ&Opnc>NGb6=OioGWxJM
zp2B9#H#*<MMlIzZbi$A&wkT>g`C(8|*4-Q0wb12G;0&7#y4C=tu3?ub-QC4nFp^KJ
zg7tzW+UH=sBFj~wPEN~fLw+l+%GuZZ8 at q?tt>yz_{tLE(*EEB=Ki`~Z%shu%0P(b>
zI?#t4jbm(qY_-$-d0oyi2I_PO2Bdm-Isk;(w?q>l+(3>m2zH4D!jPB7-5~td7fo<C
zd1T6~07K{w(^XKC0y4;PflPtDpwlb$R0bZ{M8GWZ(IPn~HZC6o45r;Y)@D-<Xn0Q{
zE(`7!Xz7IZj-+$s%&_aZAE5R<qU#j$GR%cmTx<Nxc)<u4{O+A>Zg-BuU3CG@)pNrU
zV)ceVz{3URCj7bAhfx@=H^Vi!)V<?B{OaDEjMkKUfC>QY%=z)!)#zmIbMGmjKYi&=
zcMaBZ*m&KUpI@(>0rlpZvupof<G)_N9^S1t{`%M4TfTe!`k?V;W4+mUz0&;aU#;5u
z=f$$0p`AY?owbhnq;tO3%uYJ}HLT9%$4?ajM#v1k<|H8H@|@*HU2saP+r^cRYmJZp
zz05eIY5oUT(%fJCBmYkf!%y{n^-EyDorSxKZM@|H&v2rH7t(#AJBI(RWOo-(^6s6C
z|7Bl+nu-KcB7Zw<LE!I)hz6;I?~6IuM=?{}=PQeke9B-pW9`7Lf=X|9qa?E-8bxX~
z<!+Cn(2&o32K^;=TL%WQ5D9GU9K3+tb?ck$jjf&CuN$+o*)KvVv{ZSad)eab<2(QK
zJ%8PWS(F(}KoR4qu86Q~Kse7pYA+nKK)XMaF+;+Iq1lg?B+P8gFZf1qFBQcRtog}*
zG#;bd1$Z!$Q?g#2<qmjDhI;JdLXE=)PS#!M!{Dt3N()yL0L0`RCaJqq{~C4$8_y12
zH9AKsPe<$Fq42QbISBVV<76RuZ=z`Rm{V1<jTxb!{q%978eqQERZ%C5nYy#jb?d-I
zV$aXPC*sr&1s=;Xi8LX8h*ha8#9A<G_2U&Ovsr$0VbVpAvcOEEaW88$u$+V{bbyq6
z|4gS4w>qLNhGJ#}#XC7Jy!L0#gT=pSy442HQUrHfs}XsvG=gu#=yX1-y*{t8eL;7`
zn-!4<*Q#p~l1z9YtR_xE;lczdh_7{fyAGrSZpy5y0WUr>E%F;NcLHQG+~JvriM~4}
zLiC1T0xKDpi2R56u)64#I8fyVgLTr=jIk`FZ`AhgtQeo5m6!>^BU;!~Q7A}^9Cl?U
zhxC&;efz?qTMJUvVL>e7DdCRRWQBUe0}8D8WCm-((N0lJ$_cE*JoiAjGnh9vD9dTl
z{DK_<Y1M+E;c!cu*D59BlX#UnhJRwSf4Q!(4=c at Jpj_@Kd}nR_j#9yrm1A!J9?T?<
z+M^|0(k;LPXrFlUi?5N%#ca(Z&qTtRe*0omZcXuze9&8)E^JU>0dqll6>{1N40BEf
zRF+{IvNVVGnYcX7#P*<smkp)y#*;x-Fbvdo=GVY8_0J at fK>G~1aXB2*jP~ey4WtD?
zXMYC(yROy_#)xi>__6{&`JNluj7@@X|0&bae+Ay2oK-ZR{fZo4{fp7{m=VWA$agOX
z#*-a-RJ6Dj0uhI&AUqt at RM2Ji@f!gnKa$3*!9iyav^qn4$R_MZenO-%A!A2fiBbuH
zNJCAQAj5(*Z7^UE$}SHhM}hGiHV}Ttau)nx6N&&uf&kLZO6G^I#!OLL;zDAE1Q+c-
z<ACz(YuPdapbIHuCuokJ!u*gGZ9XwqCc3!R6{}EHXJ3~ffGyZbE8)Y at D9Zz!cPn<n
z_%kipAu|ocHARr_jM2HVctZQ#)Ns;V!7mpU&$P4So}<k(<XG52%wq7R6s)7z<*1cz
zFTbY>Sm?=7*k00%%sltcmnC>ntY2AuWn6WlES5&0C+YAStEbKEJ<LHV(^#u@&uhSm
z%eC6s$d0a(na(#>7fzee!NwWbF<gKP*`%z?xWB(R5N|@5?61~F=e(;5+gezdJT@`<
z%Z&pYP^f^lY3C(dwDzvfqEX9mrlJ}#MIb)mtUMpl;eKb-?c;bJT`CFt&Un~)<m1bT
zzAUUM6%G#fT}lOT8)v;3b%=i)BtPZNLkc+>z?QJIgDs;+xbY&n0udF?557S*%KmhR
zNSVp~>2xpwn at 7AkZ!vtFbC;p9;^9%TdrM|Pwm_!n=8)i4H2^>H`rHa$(Q%=t at P=he
zfz&BvO99`)qXOzl at ZMAbN@P}}t;KX5s~Mcq7Cmt#L=5-OdcvIw>QRnp7$N6(cLY8)
zAR!nXR&<|L$kzJc+Yy!w>@DmX=uRnu$hDeR1=Jw$hO5PBtp?c|+@{fD+DPx5ffdM#
zt<_G&^tL8~=(QTw6m+qs?8{nB*e4ye;oalx%k^5eFm;2ZWu?vWMR{YqxVk=(<(p!+
zO>#Ef(c>@IgF=8HS+#&C<ipl#U?_ifFwCkbX#xqhfjgdvuhwcjspkpcd4!TgXdIkJ
z5#*GWWDR~$OoB%l^RnSw7;L2Q=b at Wxebm3O5ygay4G6W1MogA?OmSAh5)fO!2!MYy
z2_dq-V$t+*Ey5d?FKkFY<R at t;Unv2QBCOWZf1Q1oe+J65s)>9Z)(E!{W=?WblV@(A
zd?M68nlPWOE@(s1$>6$C=7PWSJHjGF<}ece(Bd_>z8WLDu4^ei;^g>x00bj)uP*rN
z2{cw0h#jG)RR{*6Um|hg5EbxT;c)8Y_^t}lz}l-fAP?#KD3H at VW5hn52O!OU_*uoY
z5htQ*v#ckp9o0is>CBD`-JV0bX$jP!7#Y5DoS?pJ_1hPWRR=FjCdR_P(dV;o-e8El
zl~)WAUCk8xs&0-Go at IqGZ9;V@^Y(~V(zh(`n06|ci4K{(dna@}U8viV@$%si$@0<^
zCF?k!LFtDx=T~QE2s9%9La~mkw~Z0P7Z+F%p6J8~`=o0PoNOa<5~-deH>g=`BZyeW
zw8b7|L9qr(-TfFgU7Lor<5!UlVU;+tiiM0JW0aYZh8U**$>6>0&dmeH=h at o(ez%1L
zXV1i#sR}}Pt|Y8<@{nCY*i{4y6m*hbg7&-kG8W99?u;W_4tR)Th-JzVtTGhA<xCEI
z+ at R=DMv)e+0eGV#LE}|aWR+0YtG9=^iu3i5 at qVZeN!OEb#r5KyEFWE3W*YLfwPoQp
zS{uyv2)10sP!#JK{O4kf8^69rZp&t5=$Y(MWts}C+ySLY78N8FY81FJbv$i3m#1U{
zo0Kn0q`@XNwWzheqO(|vj#lf72ZozZGG0Qoc$X2NasmgER|HV>*9Xls(g?Q;3{1JV
z$OZIEL6sn2RSB%!aVB*69ayfoLoe4Z?bE-dXtTUq?jB5K&KGqThw_2oqNSFG at gQ(%
z(ubvku(u3mIe8dSVGcwP{ANdX`M3?wha2Y|PtFoRdKxi|CLu)8uV5%rJr7$&!}s#B
z93V(2<n*w_V1UyYkWdElQ8a>pKlW~H*B)Gy2t!s5*G7?X$82u-nD(Xc3#VhZQAsw|
zNJ<_JECmgP;~Jn*#+R?R*8D3>5+0Z0J?1aP9p1&HA{Kv7o<n~0?nbXei=jGp at TH?n
z*R_ri+R$AOBk>vB7Ihy(c*eY(&o>U3h2z=Y*9V}pddL&>6h<IL(EbmtgTuZ3ZEIKV
z9oA?(QHT1h1-*BRfsJQe at 3UDXz~PkmDPP_v66zne05P^%f4N0vBLVBQ%vhvj1%AS1
zz|E5}%z%c>2M`AB2rR3ZOw3K(_Ivph+#!~17<VYdiyH>--%cEVd6(Pb+OHr}YmEq2
zp&Na5%RY9*QAqnxr=ik5^wrotWb=y#ji9}2_8(porM$vj`;&b&8o*oROSnpP5xK!R
zPMK=a3N6TA!Oe0NP>ibOAOziom8er{=`@e!8KfYZ$2FQS2M)N35X-$DJ7-q-Cne+z
z3Eex<^8!DC=`@xBAH|fLZKMr`D^ij(B|kMUL5>w-pH(QtXcE%`0bn0%&_614N}Hfg
zjm1+&p5xZfm$+cJvr{<etkvchijK&CMmIfVv%P}A#tD$XE=s-xccIbcaxF%G=iS)$
zHCppGNGrF~hh7N_-&lnct|l6QlnVS`EgN1Quc=G`(LE074z|<BK}CM{NQ8>?)UCng
zp))#Nt2LVlB8ix?rx0oJd;1JusH7tA+sGi`ow+*;MIvgiF0|82YZxPnMGRRHi5hkp
z76y%yWLsKk)$WUWafucs at L%kR>=~fg!fF+9&CBP?*&~i#&Mw$GL3MJu#?t{xag7Bv
zQ>XF<$<n@&M5ZvTQ$pV`5uZQP at +j&UPs-aV|2GVVYEyQbvW!CBsZ?EEpc&d7uU5tC
zR4G-Ru6>Ns0<545HZ>=ZBhXzoV*x957lKn>F>m8d)dOYPdf|;B1*5<cHUOHEjn^5k
ztp7}R3;p4 at RL_5)rB#qSBPoNDEd{Y1kGdvxlP2(_TyBwa--^<B-Si6D!i~bNi#kew
zpQyGNNXqA~5d>cHen#(=a;em_&Mh`?8DbNYUt`n!6p^3!{+v4WO$pLBR=c5b{0i!g
za5u36To}kf9BP(#3WY at H#p%U1f~!jg<01Efs%(l%Sx@&Enn#Lj$S>XG8~_M97}3*<
zRwx0+2b>=8-jD$Cl5tWnIHSo>X~v5?($PRvR<Ta{843a=+~HHTydvawQv2$~b+<)Z
zMAoWaVmC&o(Jm~l3>LnkU2r^dDpcq!MEg6o1U4Y`8b%6m5(&QFR?krdB%H;R;rmTs
za@^aB!h~uhQj!nRWQ=J at 7T1ZkV}%G`BpQtPrEI4X&BcdkET+*^1T6(f;Uo>k#sLg^
zpiNk>(mW_b7St*eloW|xVS<99R5_6}5FOTm;aBW(hk9N-{fQM3It+)niQ-{(D#=|A
zLn;*xv7#X;8FX!xmcb$dj3z7z#r(XhNlOuk1(CE`Z739Jl- at o22_7&lgu;Yiew`Fh
zI4$$M;`#3*Z<)3}Z!Hm*53;kW9S(tEzw7t6l&T|d?ZE;3Ltlx3r?lr>zZ!4m)}f{R
z1_n$AqQRm_)^4fRg^0^YzN at -qmTYDemR_Y0Pnk_Ifm>NY>rbt~Q!oZ>JZ-rANP5w4
zC)}~#B_s^p;28J6tdYEy7+(J7-DpWZ4IX-xt$*M9saI^&S-<1uypN<))~;Gs_<Isg
z&(vV6ykCkD!9%jB^?iCl3kA++egQ`&e~i5XDdzbMs1gzbNCc-0y)IZv8>9_ at zlGTU
z{v=7XPOmFK at eN$YXcoM8f~=ef>l9#eYHv6=2N(4UFotrTUIAsmak~>N(CQKHomB=k
z{wDLvUyAg$2>zW=2zMY|(AxT at TqbcT;2q;lNqrkADm&MO;m_y!kbnye;r;V50dA!h
z63v&tdbw^7u8xe6n$YhMz81$_kbOAW6FQ^?3tzrP4v32ujA56S7au+v-xcj>hG{RW
z3jm_(I3q%|0QTJ970l2a_x-!slb2s32myVa^tMkg($%9&T+_s2>s}^NQ{MGpbp&Mt
zA_AXD7ztt4)Wi!{Cs?S^fEPA#peSq=K|YYaO)h}WR~f0vv>5DQVX)1s3%ZezA}|DC
z{89u;Zo at hPrV3-;=yfMD6aCEDBzjWF-6R34<Z=K;38F&euxP_>vAm4q7Q+EtT2AZ(
zq+wTqr<&0x&fg{@ML^%c7uPj#mfW0pPvbMSXJ%E}#X7rYW~iZkG`6P(-v%UI2uzpL
z!wFI$uQ-;=4MB~-&XV|Jg_i#J=N2E}zpVcg4-x^ia0C&jct=>roK%8R72L5XkYEBt
zoYLekbA_DL#R_^m;35PpzMjDVoE2m6z`(GpSHKc*6aj(7knGFMxx75>M7i{Nn at LRS
z{^Am%n`25}`AY_F{cRk`GmSp|5CQq%yD-Ik(1*4;b}GBQAG?SZxdD$}#Ara|G;9!%
zBzPXsDxAEv<ir9Mzy;$3VLfap5{if8(^wCjykrHy4n#--#Cu?n0(y6RzSM;8n0aQ5
zotsP^`aK%ohB?nODqo9%f7lxq6gO#y+fzW{`O%(Lb=W%%IQ%SOYt74_Na6%6#Q%^q
z3)b6AGYW$!ASdR{9OSgmrVTDZLTZEDKxTK3;|JD2Y(U(XVStbL!#^=Zp=E at OVTUl+
z50{aPBLFW at 2HAbB{*fdu!xE|J;j^*Oy%Ef|-A&lVIUEZ#2U%_h$eCnI*y-X|z6|SW
z%Lall<;aGj$vhEr%$FKv9OpQ&oX5FjJ$J&ol!}#aTaHtAdKl?MIt6BzPL0>_domXz
zIN*>Xi`Lr+m<o-Aol5+W3buS0F19-XQ+SoFX3I<(|3RRU=@B@~^GnO~%S+RON0U&8
z9N!8i^;SZ5JUYCK$Rvv(H`B)Hic~x>3`BGVh(35U0NEKQogwAHy1|u+z>`A(<_bm;
zoPYqTAVLGSR3LScg%k3=Z|@$qHeT$&CF@?cJext3P$(7IL0PeC$YBt at WAgUOY^f2i
z4=WyHnTW2Q^^Ue=X2S!S^>-?NN=39>L}#X3A;{ukS{Qd?HH_(D?l8ZMrXLlc2y2eZ
zIfr9l)(k$T+LyYZ8h8eRawY)fVTxtcP$se%l-1#i<6b at mpQko~c<8c(a)ZYWz!=f(
z16Y2*ds<${36hy_rQ4aut(#|jvL6Vq&Ar`S80xp4ZtOhU-r~>0{k>;2+rQCKR~&aa
zTnc0Oeq(>Pg>XZy=bQUKyf~b?Q?7R@%4{M*#WS2!SSAhB%O=YQW8!C_YMR^@hex+B
zM-9c};@gO&!GGCT5?F#5BzypjEya~6!{!oKGprON2$UCvFovHV2IbE(gfT%|$W={F
zx1 at Qf2w2C0cwtmnYO(N<K<9P7#uL4vmA9bU>r-fK#24QW6>dz at 5ROJAP($=`j{Jt@
z&BT{LM2EGXL_`h(br$Zpu)SrvV}c15RFp at VZbQcIf8<B$Usy-_d-l#RLM)8mFjGol
zp3yRvS0n`jWMDaUD4<fXyu}C|9pX!??$l*cpO9n&kz9&c8rsl-#Lf7Y{H;z}vJvMR
z%L}=jKpCf^ACe$bWULZ8FP{LlVHk9LNnl&)xO0$=Cm?W;Ed=R-AOS at m;-_imogQsW
za-*{__<8w_yO($oJP#d>2rh_GEi_NVh6DDv>U}Do>HkaZLcUPp|Id)8AWm0ERf+&S
zD0k~=kM;j=E-oR!dCvbIkwfqQ;s1YYfZw2^3X4D7|G$7OxGH{uaK{n|po!=@Uu4Zk
zD at zY60s&0e-D;ZXg4|$tR}%uIQtqZ3DbA{^hz~ckdr at IWh`#1+nMBBy$+1`vR=`kA
zeW=xQ5m#OJWcY%yuP9FT0vDPU>ur;PSv0K}$*c`d!wOIYPpN4eGCA<(JQ{blU8v)g
zSfK~@6AmaXUSD~0gkekTy;nolqqjILg&mYK)bG>3kL2AngHh2I(|e6?hO?N^2$-OL
z8y09|hXeaK7MjqM7(|S3Xa~WQ-cM-e>b!@LUgO(&DP<-!L@^_Iv++&sblyL;f at n__
zC*IvO0=HZl-71)ePV3~XWA_1A7}!f$<fGAfSYP$%!qPShyU&;pN&*=%p|p(Hm+;We
zI|ZP^Oq~JI>Jm-DPV9L9%s>?of?ebSN0gLL&7nD3a*V at hLzCUG9@4 at xZG~4{KF9#}
zVY5fQJc2{Wu9-ke*twAtoN0g)c{&R at 0Y7=QtwHLf!CC>RVs^uToW)mY$B_(V&ZRq@
zk_`<h=Z{gx-OCtV1*I{J+`wSN*zJ}meu{~RE+!5#qTwp2!vQpD=14)fNVj-Z1+8Gb
zeKoe1=1BrRGFF<!o>82GD+vTETcBW`BcWB!ujKlm0{R%qQamU_8WPH-`78jCd7d>0
z8PXTy#wCl;zf(6 at 5Xmqucej@ae`X!Kv%7_iLr?ejo_h<V5a{3b0oi(SJ+B*ev-W5&
zhAu`e>0P=|$v<{N{o*H818CRoIqj=NtpSlCu5c79!k`2hkRfVh<MTQb^S)3lqDJTr
zV)x?Un5o0=HkygL%ENqdaEw>7 at PSOYk-d7u$+M<f0bvMFfXv8%Ehik!;fXD7Zk&wV
zD2OAh^{Vl0_qxUVm&xK^?C&6y`wx&p>1B#j^q|3B(n_#yzv`d6dH^AA(mDVwZ}53l
zQkvo7n_3oH3uluiAP`j{1rCWxuT7nsaUok4%&<fDPF)Y%7L35EaNz07XV0>yJKN8;
z4yM8cXI$s-DYc?@9Udc;Pqb9QXxa~m3<AarG}g$=AWz^95CKgyRzx&`#h!v4fWDOR
z{D3U at 4?0xKH%(4KWqXW2xAZqjJ8-!3eEZ;V<M|70efpaX*$4t-!@LP9Gz5LtcrX&l
zoiZe#%he at z4g=-J^oZf1Sry_wNLqon-S^P0NMc at e%jmG$waE}gtZ2C?S&d8-XOg`|
zrdkAlLmpmQrRQNjkFqTOJ)$`<GC%c$I#X;B1Tlv{^$59TskxKPne8mh53tzXJIr>m
zj1atmEOyyap&PPO#fa350OVR9GPyIGVSS26rH#$~?Ty3jOjERL5$i3RVd!$?6+&@r
zS+ at j8DEL6CKbXhY<~<j<4vLiFyzr?^g0rwhMwub=7`Wk`a}v@$ABa^P4MXLez+<)S
zPX at +&JP|UYUY#S6Sk0Hb(gQw-J{Rvn7Xzwgas4|jnEDy=#^L_i0e_2{1oHd*xMu~W
z^)NzEQ=W$qZQz6x6i`x6&}wYVQE$YvZwAaDjP0;IDifQ%Q at 1y3h!;*xDq0m{Bq~BU
z{@^GZAs^BXB$&NpB}!uDX!K}8SseDrnsu6zFWMdVj$1>7p~qf85wUSK9V at ooW&6U5
zh6=Vx^+Ii<bS9f2dT@>mRD}@Qv;p_()6cmjoCcMIROkMR4sqb?F+2N!t|r}hWB_R`
zT2MRF=!cPMG`?3DR>y4}wV3Nv4XnkIT4YjK8Xb_xxH1`}nP}%;!Q@&=x1Y%tRxHdz
z4x`^_CLQ!#G7}D{bROYFaTdFSbRNImdVI`T*wxD~$8R?a<1b2<!^Tv)BFVerqR0i%
zPv*BoEi>1r8$z;6WJIM?iQW_^qBqbmlizM#^nP5jEIOppsl=~}bBV6NGNIpYE+ at R7
zmrNxZQR#dN?~9Y#9i&_5H=C3=PEuS_GOuKJ<Y;p8u53Q(-uVsZ^O3jC?jYSfzu`<i
z{@&RgM7W6E^BYd)6K<X-bQkSHyMuW0$D{8U{E#7Vesj)7vxJvyq_P2)Qi|$=vc<y1
zxtdok<v**qJ_8YN)d`=ao>=jP+O?2!DGtV&wct3M>iT&;Cmq4$`YD;r_a9NE>LH|*
zDc^)YN2?o12|~VsaC%j at 5bwe)^QdZ2jNTGUs+-B58YwWR0tP4orQBh=Xd7-Md^c$f
zrQomzrU6EtD5bNQ8W?4J2h*~Fl)WuXjN+guM4`W8<S$D$!g$wAxRfL{h~>HR72864
zC at EjD4Ya(y%ym(^&cf4T>&werh0=9(74&7UMzmHjLg}cYm$_;cXgqE*6=-WcsosV#
z_e+>R#*+mpolFH<PMS;^q5&9Mt?XsF5F2tW6>VT~R9TKdRFsJ5<Ax|DsG$()lFFqZ
zn}h-1;<8%JLHnvgrARDAGZ=^qv}IMW+^P34xJ5B-80QXG&|A2ueJXH-{IFk>z=F|l
zGu;m{^(f)V>xI%_QHh3#;nr47!h=wA^3B7e=4{j%{(#YzAq#AG`1jKKMYbQt;U1kv
zo=<=KTfHZKbBMDxI-Ray7(Y+Rr^poCVH3A);1Hn?L;YxMgig`K6LE4SUK at SciM5!g
zO^c!v&WCg?*r)rrFG}7pNtUA#4t>=d>{<AT&`vaj2t4VmH%6n&Fz9p~)70OE*78H@
zZ*@=FP&|D|6EIf3Y=;JP)FRD8z8m;eL=y4V5Yf~7ZSlk=;^Qs#Bv47*4tmTonD5yg
zHF1jwy#pEH`C9Ff?xiZ!&8>|HJd5pf_bhNX5L0b$FnTi{uz@=kmZV3qY9I>|-<dz1
zh?ROx#PJ+zG<|+!{5ud0FFvjJd;M<yp$b*K_X#*w7w6k#tk;{?aB%LcR at 6C5iO8CQ
zNLXC~YkfWpYR{;iU_Tu~oJ9quqJ*i;#)7>#k*}-p3Nh^ZeHv4MvO||Xe&Z&JEC)=3
zmi6l(kyDU+!D(>-gt!gBySM1+@*J9(08tK~pLmI^Qx=Rnv<Pu}IJ1sg(}`zK9ak*q
znD|r<i#j9*LI at cfDBywQ9Dw|prMv=I9wKh-tWYp30zWBcNb7bGh=XK_>H$gog^pM|
zv^nT>7!OF=q#XY7G}=l%grJrS3QN~I6qY!Q(V}r7I<vq1&3^icQL)L77Jk)`={DYA
zukdM|0c`oje_T0|cNXId>>@-w5#75bc+mWB at H1mfJY;PjwXct^nU*N~Vm|wiE9l%H
zyKlP6E|fcTcu-(;xdQBWi0JN??i~uLw@`pcs(32;#m~g4<TwPP4tDZeARGdp&osXJ
zuNl~L|H`&zU(d|U|84g5Z2hYq^rtc<{^?(MsIdh;c(vp%Dc-7H8a0grnw@#|U-#b3
zzHYp3d_`UC>(|ZKuU|__je8>E*G3RJgqk2W%TEeLK#--HjLF%Mu$wq;5m-r-8Z(W1
zY*+rX5sChZ;qQHWfH$?3)Cx+5;O*U)&u1Ec{WF}4nvc=IU(Y&#6twNWMt%gvpwt97
zDWs0r#@te+4Y7lI`tTAlo`6ACR<??-2Xfnci*z&cAbs_}-OB+piKnmJ2 at zW7SmLg!
zvW4zwt!6r;=*A9E0D6)Fpqtg6?Ce6P4q-Bm at gCH)Fm~>~Kki<@3kjKfsS}1i(n`(L
zpof)=0ls52CVJs_PD|U)v_+!jcN_cmLw22DsIN)%`z*mfE&J;A%$tC93BC~s`DMu=
zo3<hKiDFVZLaSiRJfWR`Z13+q-Ffz`vZV?2U+y04e7(E9Rau|Yx0oJ+NAX#Z&J&0f
zTQHbzk7Xu<5G3qX<51{M5t0c;vOVlzAOZe2`wOjzjdg at PbkJMkK&vVs$n8R^u&n}$
z@*xAag-yUGYe;4X)4;Itqv_Ri`=X+6S1Rtkp4&GSRb44pHRw$*+ecR*rdtS|2lqVK
zI?|C*(}<FW!0<ziSNNUFr(P^Q$!#;E`gn5Z^G&5E#!tyEa4vU-m0ZK=xdfJ;fn}Af
z5jz%VrTequ)XGsNp(kX)@`WF1VT8M!uDmr)4aelhKi9?~ZpG0xO$BE8phIpS%HOO0
zbakwgGen4<t^$0%*a!U_J^3N>5ufwmvFY*@Obd(Q<Y$J#`Q6HO!J5$ZN(ck?j35mx
z4%AHw!JqSWI0B_2{^Yc}u!@-2SlBUaC(t$i61rf-MJRy3`9)EKSkQgccF19-XKbQs
zx$a_Nm}`W83k}7w%~&7|w46XBTg1*#*5k)<ow9~Fc;2=zk>8Y?R1<_B!JO?FuCZ{E
z<(7O!HujAaCO~4oK4H_1OAajjBo3NxhR#UVt~X{)W}G0>(6~|L04 at uRFenIL420AW
z1RSPDmcpV3rlv)XhOs0(gFdbkU7rF>)BcPJFe+E~N4`KeI%Wi1N~&X|jVhq9p0vJ6
zwjuQ#Ij*kh&c<S0M~^4h&D;U)8*y0Stf9mpEf{OXoG)-^24iJ*w+qOKkn8OV!m{&G
zYlMXX<K4fYog2snjox59Ch3t5_g`)+HRm*K{bReOSBqG8i`6Uwsg at u!6i$VO8`E<h
zVZtH-=6k!@%NJX;3fp|SzfZSTKfwYVm?GpJIXFr47u&5#Q0;=58n|gBEP^%bkTvLJ
zj=4La(l{+<5oym?VWh?*QCvK6(9dU2x(M9%vu}qlVFw7J2(NU*7?)@4maybr=dG68
z_=B2|Ga|tAgBo;r1eSb+xV2|z9N{lAWlo!y%vTLczC-}*h$J><fQn(5lr$Mv4mV`G
zB`pC(e%L-pEX+c8z7Ziky>+hX>VkyiV<CQw!se;F4mYk}ybR^WY4k|vW2b_KjHDwa
zOyFJoNU3LZ(^w)aZVsv_UeQ~q<<Qif2$C9^@!^4qE_bkQMzN1HpI11No-!=NoTxCf
znazU((1f$=SsS(0g;yHfTnRMWW6}PPg*Lfeo}Bmbl+e&BWqCN`(e7I9XmE*a#dEL?
z91V~)xOwqD>$HcbxDFy@)A3J_5%Pxyi)!^&1jV=^MDkymzF0-8^p_)W7IStWMDuc1
z<Tshql?H>!cZA0d8Hi%yf*Bk?MUL+y<V5n~x|8lexQ(xjy~t$skW%|MYuRV+J4Kw9
z6lZmW$T4TQPeYIdn$859e%~eW^hC^bG<fgS6&n8#aT?(b^Xg4$HWr<m;j#270(aLE
zrBSVT4)_f|QVYh<O~S<&j08luKoScTg?xh;KX-dyj}u)?)7yI7TUZfx=u%U}N{UWg
zoCMWG2`sPis(i|~G;&qa4=X;l6iLzu`5f(%(VBFIQBUKqJwdC{5yW!0Wu1-P$V74|
za>CWl31UWsjpF5}miYo1<d1Q$&D9S2k>rJL5wy4tS}KZmEKZ^<0bp#gI{C$N`<g-E
z<`@NTC402^ms$cUf2u2Z!qRu*Vl#FRcL#+h at 5lfMUhxMQ_9B@dzU>ZX3k~ImWerE0
zJV&x|K-uD at FCODAFFGxcpM@#MgVw`BR4Nd57HU>*P3P1O3vdbd79mP-nPPk57KKvk
zM70)`3&%>s@;7eoz1%%S6y^*uCAogYipWwOpxcLqkgPGUY=r^>iKo=- at c;)VOyQ`J
zeZ9Z;@<sOKhv^#J+uuT%{3%My5=X>LXho#&afUc$s${nk?E<lp28a}&;W8Q&TI7E4
zq)PuqT#0tT#6 at MxFjocJ2ldjI(UO%ct?a~jSyT3bC@=*SHqDG(F|auAai at gnzzAM`
za9J>6`xec&Wpu(O at VWzjmR>97y#mJi9It{S4d1Iy-5)^&wN7Z*qN`36j7s|}9Fgv^
z!J9vQY`~ARSvH<AQ-j(BlxzaI%qaFVDbYl<7DSa at dVFz(uz!~PLcYVxD_+{LW0h>U
zt>*VRZ-kQcp}bZcY)9&T(;hxSMsqIJ1p_`7`K4q_!*PV@<X4BlMLgTH9-J;~>Y2pL
z%t`OE{|p|aGn93MP{aU>keSrw#~}?K+K7IvU}O84fUUA%G9s35%ua#eoMLWUbM*X3
zPkv4Xp#Y0`HcW^bpWwr_kL+TshtQD!=4&fw$GVOhL~P6$J}lW`vL(nc$PG+HdKAr>
zYz&8<iJ!y$i5<!qqR|G!r#P?(OO6LXm;%fG{+rD4ITz}z9ylDuB6EVwzTN)eo-!xd
z#@1FAJr?~~?x0Ihj7yHZ1h?5^8wO=~X8sH8EllJ_(2~8Fht~Al5-^)$UwS-bZ;V>%
zcMb6?w>AB{f5jc;&HVnoH&jD5$jjXw_{)CMy>TwKlGE;s61>RKGzb5Gdqi>urvDf4
zNF4Y7t<cDz|M9V?aEN=u9<uv9&{Znye#!Cv{D+-`jpvb_1*sx<Y&vEiZvW>YnQ5re
zhCO=kBE$xt-ODz=+1MA+9ZU-N-P29h##O~B-=HZM9tM4bO%qnasjaD-OJ9rr6M+yT
z!7Q6AA;o;`7 at Wezp>WamgZtgsbe?ezp#NUD8lu?bc-tT!<6`iWJ4*9HYZfV4%G)fX
z+>!JAW at NPvA-<6|k0qWBE*mM(UDI{V&(F)S at z*0wZp=Om#m(>N(j?{!&^g0rzhx^d
z5`1qO^up&Q7>RW#_ZCIB((pXoPvnZ at 1!J&wLi%Lb?!lz*V?+VM(C@?^<|?2?<1hgn
zyfdfrh<&RUl6FbKmXZXRBeWpJ#1tBI#1eC7or(FZFMl3<)|Zydy*6$h(xUGXXL(c2
z6G=}sj=Pgw#bskSu%upx4LEB}?bzQmxwde%{0X^o_L<<YAyNjpNz!h>E~08FV=QRg
z83rbULUm8&7w&lK6Bo^ot7ITo=g&WAC at +z@9!L-m2FsX;2#b)UA_}W5_$l|n3O_bS
ztmS at l1&zu1-sKKs9KZ)61Sg~FJPPE*pV8aa5zuGYrD`1mQE?ec9NBZh4ydA%YoqK+
z#5-W(YO(l1!fENxYY#&2UUeXdCyT?73dFobm&4vwOr@{j$!8mko*y^g?^A at KaNr|V
z`XCVE>|~S(1))wtK<HvPIEyNF1ae1F0)xO{y%Mom8)0F(ZP-#VBZDHnCxn6q`m9P)
z_CZtVP=KNn;P7PleCF1lL+2-$tb9;+cAvK%?UpE=+M9g8AJp5GM3%G8^dcdB>GO};
z6%0h-Ca8e48<1p6#M68~T+*8`i7~ozDLx1!E{>iXYG5 at 4GTse2M%@a9_@~2YM`wf-
zkU;Foi6we^BMyFp5F+ at 1tlW|=$*wG;O5sIJleD{dL)>t*w;!o(7p0StmX8oh-j$8_
zHyfp3f9V*bH^1u$l at gQ=F at 9Ax#t+ at QH(Z4e!|aGTFP&`Rec6m{^W!WQCYs(FV5U!*
zHpsCm7Gm&wIQ;Ok8mW8WPsv)2H{=}{bpCuqZ?W-8Fw+!|4L#)uqXX)V64}Z)NSZ??
z+g!M&B(e<l*ZGKkY63|Birk5GY`ah2(oa;xoe>vzQ=Ot3-hjFS+0beC@*EM{FD>9L
zOw*ui^SR-Wv`PIr<PxG**pMCU?C$PuJrNp-cA$kZQ3Nf4pf5kU9P|<Y@#wOBiAY`x
zd>aR~3<iFwxhTdEoVt9QYe at Gi-PPQB5Nq?x?#4gesyiYp+|L9i*p<B%7Pw&zr^keS
zTZt4I+$aK{<dGw;5cDiLvA8n*Y(-m$;WwpzvkQ3<Y%2Th_o^$z9q}es0(Ym;>c80E
z+uYuIxxbxl>~1{!;b42lbSQ4Wat70`+O1X$$SMYoLxe}4cJm&HlQ{h<2MGHqXT9v;
z0B*lnNl{%bU8%4 at QkF~@{msSDR^#r&+5-X&*o?O1AvmnY#pM9;<`BxgWn&g)Rc!dB
z*3Wk)xt1fPq+9~HecWwTuU<hz%ljtPuG?ow^>{woIp62)#A$0`g5^wcF|g=14CW!&
zTdPZ&xu%6oNhq^({xb|5I!|c^veD^mB1$$ACW-zGGi^GhPzjiB;L$D=>yx4nTmW(J
zogQ^C)!ptpnRTH2IlPJW?<g;YsUS}nQi@^SH94#W<TtR5TB||Qf_)2n(6`K~j$Z)w
z6`muZx*15qL=y>j+GlfOX0iec{|>T?)o|dRAnU`Be*C at Ryh?{=W+nN$S(1{J#8>vq
zcBhBz?6fRhs|i-M-qC_XeX8ZHVv0U)!Icstw*l!7k!^GlJixxNyVyFfqLIA#V`H>^
z-q|}jWROag*_^eHx=dgAA>)OeLNs9eHEDcWtT at 0Y-M2_*h)w;`huOwm>(ay3eqoqi
zI;jRSdm2Ah%#{}uJZYX{si_M#1+th`had}ix%mhI;Ke%cR+g^BL at pI^7<Nsp;H+Fx
z(DEC5e_=_fD4h}UVpbuYCj!zmN>T+EO<1C~NYUl4IH}a?f_gwiGN!PXO&aV+oET!e
zWsu>y?84(wUYFE?L{5!_)=pL18LIL$;r~-rq694=N<=ltCIn<Q6Eo>lj4B*U=?-*4
zKBEEA;X&pXnUX~cJb_R#+2;Z=2!HkZK+r3?!}i)P5j)PDjBKt%Ll%3orNxZmO60Cp
zHz#CM6!E34!~)1V=;MO8do56Yg+S{X;XG@<MND!ZcU at uNtj?Bv*1Xa%_+*UpG4s80
zK#nPaXw;fs32?weK>$raKKQywi6mLng3~H6o2Z0gky!L2WVJw?w&S7VvvLaT>Bg4`
z0=LtJ<1&Q8WL9>z{<F2SyZP+p*7lYh*vi~Q^VVws1Xf*e!xE)GEQ@)U4YLEr=tcB&
z1`TGAW~>5EC^u>WGj1GDw!hxlh133K`|LOq@@^GVm;T73AC<(w at LsmGl$~^s=IQ9a
zw34ZBQb%$-B9#|>^yT)#034;C{}>EUuiDw}bvIl65#Qmjlfk_GxP3|I$~I#^uQTvF
zGKTO->q+?N(w4%kvUjKOkHP^=wXDD0sv~z`Rt~@o9sm-OiuM=bWa{ULYdmaATnG^G
z$jP at Z0aeZiog+MVepKWq<sRp~mBsz0 at K{vHJLl(vttU=Q$6=VSOrf~?Y$i_T)IR_E
z&GyC%^)WA2N$9hi#Tqi3GQb4EW!@5421x`k#Jy5j8I4|F?{{JHsCQD9PUb#wtP<Kf
z0fZ{e_rC^bt%~zVTOIe6j*vYwz&@gQAO=#4oEC_ne1`;hG|Tt$(Eul;P3_SW`0Q at M
zV?hIK+bFhJU%4~#yn#)P<_YIoS>PCS+Pmy}*S-F5{ZH&!WM=uU^@>;yM;R*P^V3$F
z?qJd4M(<#9>uDchpd*#I{st%c?#9U_Bo&ziBkNcp6x!_~r{(d;fxv!g+tan{V4wXh
znNSKH5S)tH+L9&8tlxTcZVZAv3hoj7;tbmS8i38QO$+j=KojGv;Is&Q;FQ-FSwT5A
zw10l<hR3h*@Jd&$ddrMmw%KeUS+{*0^o=+7vWFoUN}x9WAOaokE0J|RQVEg4rAOXE
z_NW&fZUZ^CAgOTnh|0)tAKmnLrF at G^R0zMu<59cG#b1-s$8F)}-7B29-yrZ5QlXmo
z#BATdRLME}lE<uGjI5^XRpV9Z2+XWOf1Kv8Fo)ugL>Y#Q=Vk>V3$$ojONHK}j$N(D
ze!_*z(uOo-mJP+tEMgI7oO>Ebh<8;JgI;>HF}jhtv?U%548P_Q0N}n*7$HfSLdFeH
zN6>M#gjY?gb=)an70s0=SCMF5Qjd?*dI2KRg1@)%S45iw^)DD%c_b?H{rfa<6N-6L
zz=bKK5SR!#tvCsEMeqeFY6M7sIDIlWW<Hy}Y;K+2csyiUbZ*9*g49puh7k3qa#}Co
zBH}x`E%3=V;kF#>NG)^I*+=|9I**AM74Z&f%>V(m!H- at o^}7?R^H+pY?f_O!X#z9H
zy1&DYJsgbMXD>Hz3Su|46iS=}eS?j(7HOU1L(*!~0~Z$p3K;s}wdMXzXw$u%d&F<5
zXa)Q}kR^yTRg6_*X0n<1!8jEbUp(Q>CuX$E*9Pb7)4>3;51g;QbD6$7`j%<oR_-P(
zpmLha$toDA7S<N0(zoorKzxOrf4HPZ6xN7I2i)8xPMvd_Qm?E?AjlE%L-0{E_o`7$
z$CC#Nir-evLQxslae867TlquEGEy~*3>^Oi%FZWV?UK|Cw+EKVE6Ti4>GVkHb}clW
z65o@}qBchv;e|iIb&L_)5?$O~Q&KqyZYYf6-9I07S9+SB>m%z+8G^`wbPL{^@nbup
z2r8o-1vc?J>KoFM0lxSaGn^3+J<Osl9bGsvAG<Q*HX5U*2jg#dSUr{NeL6*1o<I&`
zp3&0_*=-eb61l|F-urF`64YOO6*lWpTV4m0);s9LMz^kUZ9#sm%4V%VzTxsw1i at 0g
zB2isGbh#)vA9rsuEpYN{9mEf$TVp~p(|y{7_XGLHg+sIU{@$qILwemD8~oBDN7+=d
z7ARE>6Biw#nzbb__#BB07;7P{3j4a*dVChi6#@LBM34mL_uq;f#nhnJofL#myI1|A
zE`nI3TT&zji*jUwT1}0>69KjX!N(=2n3J*;WNP^Wc~Q#mK<NP9XQD|ajI+NEBpB{v
z67lG?E2nx>06RZn1Yi94U>8YcCCn9z32BjVPT<>rpA|R&=X6{6*C}qJV31@%ow at jA
z(mgs{cmjnkl7Nk?(E!pv#Au_H$nQ at Kc3~JHfa1VJVDQl}H8<1SU}_P5n^0{dS{|e1
z{r<oslcxhZ^kIf>w9U^3uqo*cyB+MfE*%JQ0Ypm)dCkq(DEHJfwg|$P8gTGm2ZTDH
zPYA-?j6WQNo3!@&S3*LL=Mw at jo$pQH=g5EM<xk1xKdDmQ-rXwETHm=7X~|QwSwxC{
z`xf$rIDdlOx2f1SG0QPCC!d at R+7v7=;6-GAVx at CW3zh>^JD-RwLv-xbi5;}iJP5og
z at iG5D{qgyif&i>5o?mZt`n~hHrTJ!aet8b;8mRE8m}28(1}*05eaN5}@p*Xv{-5|4
zpWNT2rRIaBKQ$L0Ej at hDY&IV(|7o%L at L{w0r)=><I-R!e6@(?1S at x$(VDz{;lirW3
z`!D=XDGoAF{oF&WOU6|1zDFd=4uneC at ZH+|Y&66_L;kxWIjJ<M_g7a#81Lhw!aoZ|
z3Sk?$WyF03KSHyoP|RnS5ouNB+s;w`75D%&d)D3VUyQEPHr=a at GoWebdiy<ORm?3O
zb?b^0o?2Wg<tHExjw<nfx4jFiq3sre`h1UgaD~?eK|`U0jCp0n85}>Qt at 6P|_jm>#
z4Y|I=&hbV261qjohf7MhR^Zpku=jtz>Rw)>!l<Muq{FcLwVWd*@3)@pv__ZL8mq75
zJxpbslfY2MR8j^**wiqt<u4^&O>v%*@qVk<Eve)t2=PR}&tS}#XC<XLc8rfQjH~{6
z8K77~?T%ZWqmmXvsKIo2_16A2qR|{2zG`#^Ey+Ja4Q(D5Ln-rK4%XAvMF%*S#kxTa
z^r{QCI~@i)C8j`xkf2F4zRE6>#2e}Kj%gvE0|%_WEOSrN6E+O)y1BB>fHQ5iVBxB-
zp<$u(M^@kItYjit@`p&)Tzt5^Omn(NbBkZhHJ7u+#g)Z}D@$Me18&FtFS0tuvfynM
zVa}C_H5YQ{QH5hpLQ<xh>rfPmxQ^<gvPtKKGcpe4PW{JW3zyQ%t8>^0G)}INrWTVK
z&i^=sG|VwyEf^zr5w>8#k7<EIX+%>DybgId;S^yi=(aYWeKi_%2BKxj?fa}V07*rB
zY9uNE1DnAfk5-LBFOlJEZ~>#gcL;X?Vr)x9LX~S|M%T0fItmM2sSE8?Wd12;m})wR
zO-A!W3ub_Cy>rdQGdRh*i0A+t!*hgW21OCGO1Yy8>?tw+%nifB>N(*sX1F`BLDSkr
zq`4fZ-~F`H6~GHcH(TPyJumjf*b(8`QYms-zI1A-GAe<Hn4Dh_WwWn5p@>rzMgvvQ
zcIDWB?oAGn;&>hM`*A17O<8m)X?GS0lwc+uro{!h)zlEh1IrNy at Ca<#B-p^nP)8F`
z;Gla312{zi5;>mM!~^=%34+NQJ1_=nN=S!R4&@SX*@yit0%N1P8u*G$s$abfn8e$H
z0{Rq@?2ix&k~u#5J;a>nvAZB{m3A)=^fjfzUPxaDGV0OA-N_wE9t1dd=yJ&Eyu|6l
z#WxU&+Crd9x-bs1WzAS-)}i{6fj`$^g+wx`X4w*%+f3D9X$UQ64<!~6?Yft(n)y1T
zAUu}5jt;3fnn?Zhi^dIM-x~C!_fJ0+7Uf6OFC_&<p99ZOW_-8GaW7igC-|^}nlY`H
z%I#GG=PHctPmN at _-|D?Fy-6|2x`sqxx9<%?L?l_8JUK1L{>F6|S;Grf_}^GQhbB+1
zdN^DKC-t1oWGnHw!Zkp3l!_SR*Sy~Q+uvgN00SF~4ccTQdD0*gMU&(=1Nq8U=4Lz<
zAoNWQrI<$=`KsPC1KIRh_8E|Tv7mQjGKb!|vwr5fnoT0V)-`RN8buzGaV}#*BOGVv
z&L2Z!gvkRxU};l_r84lOybqgQtYlkSt9q>y%hBM at 29P|L?1F({Mm;lOL((sZ4Ref6
z=+#OUvx&$k{G=iDy=+fticAGW)I+Hmk3T%F9=>f(bSMctIWc~0sp!Uoqap0sh{!P|
zwk)W=EueH7HR>GsQM9-buBfFoCJBZ9$ffA}3PrzSzxY2CL%ou%V&l(1#*l?2-6wVT
zk~318EOWER5-29P6(}~?JK{k?a{coa>TzTsCEGA+nbbJli1i;yBa&{oWC6Glb=Fe4
z0e{pDXslJTJ at 6{t>hbKDvYZEHxK`wAQfrbdt`g&_g^cFrme3wyT4NT_K~Cq%Il7s+
zH}Mq0dUFC8UlgnsxvNS2U9T8E(>8L_I&#A}*K8 at i$ngMPHjgUuoK3}uqDPJ%z|L<(
zS4Q3xki?#rqlg~PzRB_UA;mrgc1Xh?9XI@}9A;=YWAQ?YSos($^!Zqvkhq$L4cb!`
zF1SugD2JZhMNH7=c~mfdpbQuERRI~?<8o{Obs(=6njMc1TJGZ`gbm=MBSe^&!w7vc
zo>XX=5}dFXW069G_8L}LZ&hgFJ1W5o7YnmMB3w+UJZiY-rRRxzSwN5QVl0BVV#?2t
zJ5pT9Pk<z@>5qdZ0`t0Wb1ac?rAlzZzZ#1bel_*%aFuxWl^!0h06Hwe4NKXkm&QiG
z5S>zT0o>f*X707hL<zXDauD-QfDoP2dMlPTS;SB}v~FW}<D*Q~uCa`xdoPzvl7bq?
zB1#n!+t}XB2j7j%ipkxZ;5 at Y;&YjO<bwM^G6-rB>F`lG6uPJ9^AMsJmF|b-eSe-Ey
z>SA+IOjhDidUibFc+%mpMJI?U$fIQ(p%pip0!R#2W4dW%n|sfnBcmQ>h)5uqBRj_W
zMAGfLYlbU`LP>YHl5M~59wULW-uHx!mVwlfEEbmsG|VPbfq0m!Lry}`YH$-s3#3kH
z-(@%3Iq{2+{C*Hs4slgL+U9d!zkIkPVDi<;iLYNRm2`oCB1Nu{L;O=+30Ii&A-H9@
zjf%Vyl1V4hbd}=>N;dftX}|4BR*I&mMgwk|x)bhEcG33F-a)(r%|Hm8OUUJJfqGjK
z!!<8|_E$lB=^-QrRj at 60`iOjz&~n^fRn(3N7Uu%cSQrRpF5PYou^^PmSzEX3gU793
z!hqNiK81<t9YPwGR;n)(ahd!OwQ&uq7^zqy;U%tWI{HF~?v0IF?{y8t--RI9=(=m3
ze^ZfA_!S8fCM>>4HzaQ=$<8oN?#d1dAaeOvOV{4N44|gF at R+qv-?6 at i11mJ}s-f{@
zsgr_ at RL&+jj}>kpWmw_f<=ZHoZef9B-tJOXv4{ydWV7xgq^~;?z1p<s;D(zDR9uVh
zui;ZlJznWkMde%6Z_!-?N|U6W+hHL*>W32G0k?WUPXt<WUPrm0=Zi^&2(aj|pU4M5
zbLBo{2INRZcd3$Cj~AA!cQo{e7e$9-BPtY_36+cZKCrc*0-~m82!#&9NI)u$!lc(Q
z`2iV)%p9i(q>1NH&mgJ=-X9^QxpoS1JH(anB}M>1;bMHd+;n+;yg-aeO(o&Bc2bZi
z+Oa~778wc5{OWjwP+ at k0IM5V)*7+i;D_|36AY*ILx%D5w5{L~HFC%?kXqfBg6-E+l
z#)+y-6LQZ29E5fwdbM$G`m576l1`liU=lqY;(tbFK>($ND_Z?ArEc4pI*1B;@TvvY
zhVu(80`QQ!Ak8HLBGdN`fkB2t)oLJ^2el`X(YFgTa412XN<_4S66+;tj4BgkdG85V
z0G7gWQBb;^opFJkDuv1Hsqtj{)WHQUBUeXNfg?mqblOIb0QI08#sOc?X`T(%(3N3k
zjCT(tR85lMQH7<~O_V&M(LwX7!o+Z3A5VA*#RFmsB5S9ea?MYPX5G`p7-$w>gL9#f
za1x9%0a6Y?LEn at E6*df_JA~J%YCcvs7Bp9333%Ml^8qnN+h;RTYiW at v`b9dt8PuGO
zM-kU^W3U4)t=VKm&^vV`yQgLY)F)NLgHeul?Ig&dG+-PDI{?7x$><s>(T4wF`S&ku
z@|6q?XHJFvA7~{^Ia)9WLmG0P1WCP{{Gicawf*1Xa`XP9oc-UU`^`sx*#F%G#<wkd
zJNrM7`RuF2(5HYcu=RP+d}OvhkLD0ctNCbU at zF~2^HN)%EgHY at 1mz6|M2qaa946IQ
zUM=YkL6E5l#yj~4XzWcws>S`JRy{VWeBd=0WXP^)T_7k5EZ>n0oaZh0CPw1jy6RtS
znPJ5c%&JCCD`a9RK<vwirxlh<Wgd=A$l1m at rp!t<#NYevU^G~RkxAIJ0v4v;=(WV9
zbjagil?LHCXLA&+C*`Ob^5L?TwWD1ULivg*3ixDoF&A?ZJVg=}25Hn(ow&cMoe90E
zaTS<(-RJ-;uffLQ8w`A;)~h#sz(`(j+sY+XaXh#-gXAS-`+c|^&U(S~J>!RY%VB8*
zt;%t|1T#rPnrLJiK(`2SfuxqU2tW}8T-a4a{1)(EFtfb-hR}N@%c2N%CtO~=aV`1g
zXRv~8Is9w9nOpC{t^tM#LtLn at E-%5$!Zy-fVtHk75<ndxR#Gx_Inm9ie_^ZTuCQ_9
zF8>k|hhG&*d>>q}Um at 9aeR0j`6srAzVFrRhVniS^eyjUd!<1RHa4E>wb>)<^3v)x=
zwc?d9p1gKYM0a)@e at cRXM$K at 3HJNifDLhoC+Gs$6xq2y%+$}sGuDP8G!!f#1+>}1%
zr+8{aSZ7p;5*Y$lDGb0=O+)QY=?F$7HLSP{2;)byt?D-aVE%4<82=9Ss`<a;)1P22
zB2tMD9M=T?Z}Cy{evbcx`^Wu1_`eSX`&89G7XKGv3pl@}<u8o$yFa(s%oe{`dC*+B
z-~2~*e0_xIf}?)X(i_SH2JZY+rrtPl3;bd=2`f>-#8&Cbsk%bcdQg}|*OLWg+zT2D
z5MiFkMJ>zW{>yDDn0|jETfP4;`W^Lzz<K{c*FW+18gu`<zua8R?f*y3hl_vg|EV_c
z2NwER`#+B at Bm(yrV<OOOt{{r?{f9XskbQ+Xl|M0tbA*ap-60}jLBtffgUEOISDamS
zx+ZdBr?#t6c`T#jHfy9*g at Ekr3=;I#B`-zXsG=iowGl-7YNm1U&EEHFT5w?LNak54
zQY(n4`#{7bjW at 4M+xBMm-qVd|2ix~pn961N7484fIyl_h-=1ZPoEOixT9jhL%V>r)
zpgx36e2Y`TSmYvUF`iUtEg`tX8XbfD$~Ah at h2DVCKxV=uJflsf9(PgP0}z{p6BKRK
z;+uORi$+AGIP{Le8_*nF()-A_MRvG2!Vr9!?~kBb{mDz0 at 3>5f>Ac)6AUA!;DZ at Qx
z)Os)X6x!-j5i2)VSFsLfJb=Kgr*{ro8~?HKpEUV_A4{iuJm?@&04mPH4wru)Q!=a&
z<@Dj7z#`cUsM#ocvGtUGjtjm1g{pou2=3OCdvzF-%(9#J7iVm;HeZ8o6<wSDs(>b2
z+t0RPgYtBL?>S@#(?fVZf7>S{`T72vZRE81ZyZ=0_kUw7mG%!?7%J`-udABMkQ!$z
z`)`55<kn>7(i|@3O<0ANAh1~n6rixPd$7HKh-6QPdmjf10K|-e01^Uj44J^a?ESs$
z`d;=k{B9zpodAyie7EroZhWxj at v;H`N+HGj8b_bAB=L~MJ@$rG1K4g}7YP4~$O=t?
z0RA>DTz_y2KYwrwr%4MH5S%4iWu<hH`ig~xxsUh(Sux+el;E1a<n7tu2<kj2a=V_%
z5sCrY$%G_OSb-GVX#+ncd_+{@$WL4^p_S?fI8)n%lLkaBbBDN#!wnKX1`F@|$Oeog
zCUoIlyBeL$eO`-{;=W=Vy0bY}zZ{&cKm$B?%qMYCbUxEqr9*lK6%QmQ?Vr0X(6yS$
z(C}n*xlIqg1H3up=3%f0R#<n|ApfL>sCNQCJ|n0lGx9^4elEUB^(+tsB8<J^#@=va
zkMlt_FpuYhPVWTShD3}gNunEWE|%C%(gA)T8}$Ed^@!=p#eV?x#qs!|x*q~|;{AUq
zum5>?|Ir`(|8IhmAB+D_u;u0wfLH}nqE9Yd-QC3*F5<Y1lfn%_t-(o}{iC=}n{bn6
z2N#nxJs5wX6O#|5Dj`l39VKcf-6vvz3wEtRyA6qf;U%xRCd_)swpS!{EmKjMvOSWy
zrmdBUTc;1RQ@#Ji5=f-;A9nknwEyofJ$l&8-TxmxTz>G!{r|Th03U1rr`RI5|7Py?
z-&`)<{*z!2pI8J~6akp=P#3ZWac&%=)DUYlL|YK<Es3#3zA(A=@j_jUhE0EN(R4bC
z9Z?$(oqZ}z^!&vG=^FD1gx~c#Ovl*FB?cZ|9<Qkm3bwv5Fza`B`jDmgmgbT9UDK0k
z=<Fnsuv*4Gg{c_;@ExNrQ(fJtWiFw2XokA&%Hop1)bq&G!2)CwlHk+C6tP|a2{fk_
zJ$rFO);&Y~f?uTjVgqC9ga0*hyGu(<p>#Btx<=Fyqx_w0Zrzz(s?0YO<5{C3DXLJ-
z3`|0Oi2AfHUtcZK@)AzAPKW`SgdAC=vTj^5szuUb!X>s5kyYlxf)5QLPL=5{6y2m5
zOq$9QvJx{|rBXWB45St1IR#y7>2pZf1kM6C-ihw&Y)TGbMIFe)S#12Q^2aG_L_KV|
zG<!V7;e>tVj&hcps)K_025ZW7&X$d46Ui;E&L=p^3%Fci*s4aYG?Tk&d=(m at oa1(w
z53_<1CQGX$!tT6D#1GEXVVqjKK=wsnrMzLL?jG}tVXfdBBQjByh7zA9c@%vKoj(1+
zB%2P<9wW}4?rcBXaza!*q5LHhqYCy|Ns*!zi<klTV at MDf3!q9i#gVJ+y5>O)v!LlD
zq at _de%A at -Mz`1N6UEzlQuG{Fq1{YCDE at 2xxgz+=PPRO+fGnq3B7$WJ;<+iM5y{;$9
z4v8yj<BCvEs1bgeGTy!Q&QU00 at t1TcPTEU*?=Wta^R|b>!Lc8 at qb2cdIR*{>f%>l+
zPZ>n25xKqBWf-g>9}G{*Q92P9BRsmwMQ3v2WwQL);A(VnHG*+ET)MB1kd_W#znG75
zCc1{Xt8i4DA0w#DasLA1XY>H67DOIcyJbjL5ky64gH=I7jj{^Z=Y7<;uQlQ+vz|_8
zjWt6^gL^2i|H<n}w&G1mlAbYH)bCx0*;(z$&hEzk56HnW!m}f|jlqHI{c-nVL`v}v
z5ij8mky)vk8c^l94SVf;gCaY6H at G?@GQqlBTcz0lyN!MOA$X!G8y(pAR|t~$_~Q<9
zd^*$kO3S}`J at ZC$BNCPgnR3+~IC2pJw7%4pFb`5+vCY*C*7$r<(at}%_xGOeJbN~_
zrHZ;QcMo>H-re3R)J-7gDq}rHgR=pg=oE9}HS`q-C=*(hLc}%J`0M%6 at ZzzV32}a5
zwr)F0WD%UvwjXw}cjNuwim at NvUi=n7=-&HXErm$mrgOTKO}OcD5tzZaZq4Ya#DUo*
zQS~t3Y|;;6s^nW6QyQtx3@$k<BsR+NQ*$K=ar98|#7F0DQ6Tgk^dp8@(jm6hDuNdM
zbT$0yeDJnC-?79dLR+x6;7*~DL?jv$h>ft{N<7u2 at Ema-@tI1KZWw~b)#X6q?^vS<
zM3>QdgIf#CzXZ5~Xjjy8*$fVNDCXUe-8dkOhw%4u(1$pIIZ;)~06r^f6X+s-Hv3)8
zA at QnVt%HgGQlN*1pX$UI&@pn^qIOF9w{hp1CFHB?D(opg9Ug;j!6yaCh<w--F8|p6
zxvfu;Ux-Wa*{jX1jl+#su^fD(75F(gX>~8#@H3e?0o2ctYxkZvKy>8R+>>Tb=D{6n
z{F at rZ>aS{WkB~a}TYFP`Gw(dUCYN+(emm^)&AeCf=|vP6)kO#{Z_o%mC9hL2&k+S{
z&jw8O<l{SbUaI2G%|$eK5Is-Pf}5iTJtn^K!*eUs3zcgV+(_+pZRPc)<WUx3vzFC=
zkHDW&{zP-eR4vN)rW*A-5q?GtT(sgJNTH~SD8G+Vs|2DF8!``ltijBTvlyj9wD#&v
zZ6&MKX5Y+11m*_k2dc`J?9Cfy!B(8XH{f?4?Dgn$09#BdNpTd4{|FF_K4D%GR5Ke^
z^`-)v_knS;dLd&&-e&o<huD_q5S)RFNcRK7XQvsywXExfjJVHCAN3;qFe}$GX7iSo
zZ9k+9kkRxF<Y$7an7Kd|w?5{+c0W`Zk7>6rk54hds$vQki`r?ay;jfY+ttaZzdR5S
zK9$}yYPgjXWLVXf47hrGeB+FRqlqI at vxTS=9v3P#&3RGtDCJNgHY3(9eA*lkh;XeE
zGkCDD7OYPpAQedSu$w^b^dT~k^8x`&Vm{VMyM07NPWMuJTFo~~tZ54&M3aUoi^w-p
zW-u%^wPTy|u;C~%l7)gXE??+|13vNxwuY>i{fZGxP8wwLb~uVn2K%pL>=>bDYqhPN
zgF_ at ZKdcE#4FGC;4}6ohCDlFs*4Ap_?YgVBx*+d?)(Z|Ds}b-FiP1)Kw;7Lp&sc8v
zs=x0O-Xz!;&yNR+!@T=$l8E=ru&%9s`@Qz&VQQ0(aI`?bpSRz$U$9oPV=Wdv`;iIi
z9-d;dfb_*#`?>`qmG0&E`5J!jvE-!PCe1zN#>BKo*R;TgbIS-?$Fn(clUT|6pkP#^
z`dR0&d2a5!cQ!XiJ*(lCuC(8B{{nkyJ-3<0ZW-R({akqSS95ftuV)!CCz)ko%jn#r
zv;!#FHy$E}VT^SWv(sUlF0k8A8wZ=nW=HQ6Itthq-CRQ`DCM<nt^D?K at AJfXV|WY_
z4XaJVjrLLZ%x!#TMNmPPILa8de%KVYwmAo$FdUKo8Z%@mkRLOw;wB6_B^XCOqg|Bs
zL5 at perBZ8(R}oU>K+ZW>9dyJAT2f-=4|Qg_dVYQI_h(xJv5))vv$=!o^HKXfFWpaF
zq+}Qv at JLUOWThyyXIiVhqjS4YP8iVuW*J(mJp{#(V>u!R;fQvWBcDw(VF1*H*rAg9
zRYImP_pb*^lF(%eJV$xUxPt#Va+ILtsBf%x`|1IL=JzgjAK{UYDzG)!_&X!Gmrx}U
zg}GE6R3kbX2kBkgWw{w$t|KLN9yx at 3X_INzokGb&USY9Dx!gtpCnnrqA>w2IB3;H5
z{Y6!0YHvs_BqAnz3PiIwZpYP^jHp=nyAMna870zGUL9i_f0 at ce!!p0{<4_Y~oVL&3
zb`cGngx>ScF_8ze)WcOEjT9`bS~2=u0vW$q<Ac;Cln2anDaxa%AY;6hBM>9{D#S2_
zVv*)6q6=%sux2iST9lwon at RautHm3r1VdANG8AP6exjL7gHxT{0mUW|+se8MG8T-|
za1Ax^tsK{607$==GS+f^eG|b*#^@20vL)bjkYDEJ2}(C!G8vBf{2g{15>1Ef;Dm&Y
zJ~@urXO5U3VWVYIl%7|7(zDzO at yu5C!yTQ3Psy62Uvk$a07pw>Y6OlT2*KEQkgTb!
zm2gaCnbe&AdIYPxUrF(Q#VucDnmPCu#GBRdJVZN_;dwh)emERI0t`*5X-mu7f?dY)
zm<6tWG9cK@?SR3W<pBAuF$>pL#x3cc%+Jq at -WPw9t?Ouoh;=2@^e_HBr!fwOXJ`LU
z0MWyPOd4Slf6_~@dlRyl`X?@}DIcU1l(NS%@h?m2@=)4t+g{XG5}(-*1@$dB64WcH
z=9rA5FIQ at u1=%T+JX4|^J9 at Bhe$X~FIS?s9GjnwH7Om61aRs7Gb3TLgZwS4Q$&4k;
z6T>i(R|s*i&<fZw#OG<_e~r+DN(lRowh<@>ZJXBa^0Iv$U`&!2i+e*-TpKY&#TGHk
z0>=zR7Roy>Z``@aY5sBk1i|o-=RSiPGwWq<vvW at TC;Yh1G_pN^^OFi|_#}5ys<2Vm
zydDVvPEB{(ro<mTzC~ak2-+Cn=cIQDArS@~rq0Guh(M!OwVT~X8WW!ug%B2fj#H``
zc<~s}H8*O%?$(xY^AuT;OXj|ob~{Lu(iyxvhjbsksPGOQ!MRAHJHg^x>ZO3d$heXw
zTYw-}29tUh2(ZY**jjB_N09B?@-PCQVxG#yqTkkXz#z_nAJNL?srgfF<=gHxq$VP@
z5qY=P(0 at yo&Pl6^D-;f77mU${NwWw+DnD>O$=fNpej{F$kCF>le7)11{VHPpkRbxx
z;hP|!bWM7BYbz?<?>sPZqi~{AHRNuEi9E^mBBPz4Fp0|o9fI;Ce!=e at Tz#nsnSXbQ
zunK4Au)}8vu}cu1wOZ at wtbGn)vyX!D4my&-J19qxQHh%2`BP}u83DsE1v_3NVyJc3
z!~2W(PC>g)M{Dq%yN5ADGk64xv$g9k3IZN+jEq{w*4Aoj-sKPzP0~K-%Lt;XRDw4h
zbH%EWt0dTp)lys`vHFqaTZ?MLVyJtr-c|BWRwWdLzAP at SYmLiMxJ`nc_B#4n1Kw1%
z*Zj9&t0fIHz=v~DaInXMP*>r8@^83%B~Sf5j86mJe-J~D-a+NFtE``+pLJdYG^om&
z^A=O{gTjot&mo4ub1zAE7pHsKgL~Or6Hzi!np#H`^j7ErXQrh}2+wjgN{B+DQm~B~
z(Q~MYinj;^OD<6$WGb9tWhx++v3}_Q-F*TDf}qeX4$vKEA5$~%TKpq}vZuBAG)?5-
zsupL(Hzk*xXgOZhf0PSi#q|b5EGb-hv*F1_t`n0;aIiQs&plNU;T%Vgh6mXwI|YIv
z17&s$&H*Q34$VrsiKV6`q&HgO^7YlVyuVl`gbOq|G(&+Lf8|#8p8;c?$%W(V9Cn8i
z!u{~E*hAvb?lv-*{#Zpdn(s;$W<GYCg%yx0`(E~i*a0<I047NN3vW<KY{(r=e8kUq
z!A?q0v<A79YTC~-Dg9UK&+t!cwTR+Trn=b%+3d70A5%lAggU6`S9l`05(teH)vY4d
zvuH at qilBGZ-?Fdc6BGg{p{4pdYI~CH9yroz01sId*H0G<IYW)GMQg>=1m_iwfyj;-
z$`pYJR4g=Fj>c6_Y?oOX&KOoYGFy&o#1KaL+5*IJ#gikfYW at ImZ;A(r^x`*qkZa_S
zEa87rjWfmE!>Ra|qDZ<#R3mJ7DxMPwxtjw2ju{P?<+h_KY-fU+()lU-_9D9v9e{7h
z$r_VUg!?JJU53$xrL5LijgAJLYpsIHw3SE|0XI}Vq?kZmDVPMrKy3|9oQ;47UUBsu
zym2^k7x+mg%ZvR6P3{M2H=yZ&KF((CnWkzh?ShLDZ0DWvyjnHTa2_^Eu%7L;vr~AT
z;w~3w`V&KX9Co;s`N)2e;XY2nC^ehdoa*f{1Xc#~&^Umv{pO)4Qe1d4+^s~nPP><e
zQ=p>+4cx#W39!*RjvpHGDi4H<I_`VQ95HS$k{7C8S%UdO`q0j-r at OBHOdpq~ta}1a
z)E=V&OJ+{`37>Y)E`~lxa2wwSz#&?XWjouhHhLeNcb$O+uEuay!$}Wa8 at gvxkQ{(9
z2hi*eO*koF!SXX%!Ejcm!ei7JLGv|$L2bPZ&tkDa1Vx(t-*wr>yj`r@&+4 at RQ1cjy
zOtiJHaGIwL!jDa2C7AJTzOYLf#WbkKv-<tmJ1ML)M`+;`z;omVqPF5;T at Q&+B8<Tu
z(Anb>NH8?)&(!7Btk_Q`978((hQ(YEjz_BKOpD;5X*L2msuK{tCl=fUqVToUG2o at k
zZH8YFt8Nx<EE7FVtl4^$9pJq<6b6$vsS+<MJLFsmqiTE8d=1u8t2s9jQTt%P{ua~1
zN+P+&nVL6h(z~$uY#^MA{KY|hRWSO<8|^{3<t8OwG0n1(842W&Fd}E9%1+#;{>~fO
z1`Lg2favi{;jj7>$g29D4Ru^&6_-RkG||RHeGePr^j#1|yJczjzj#{j`t!we=`R$<
zWdLzCQ^5G8qS1TwDncn&k$=<Wa&Pn&<mezo14w at w;jPO5IFoekU3E at 7EUEDIYmJPF
z8|03fYj-^>U2oS|)DRv~LJVASSg^Aj8F9NB?k{N;JT_?03Rx#`W at d`Q#|Y#uF%p at e
zsC1PAW<*1yFV|<EXp*~ojGr>a*gwfcb5~ObT>dQpc#1K4_*Rr1hmcCo0qM%PH(`^(
z!A^F$&;An+oZlzYN5R;b6!N%mL>`;s{2T#F!QYJCoPzOw;G289-)-+7&a at Ea<8xtG
zbW3Ofh|;r{2Rpl8>zkx&yqiVlqi4^U*Gec?N`}jKVmUNb>Ow4ULcY?a)TLx&@>RL$
z#ep&zJC+4Bv3wY;P-nc at Gctk@wokc+_3ng4WW&GBLY7UTWHsYSe*ER+Aj+3ih8N))
z{bQrCR4<G1U{To$q7KfUo#a0scIbkSv!p69t#)EKw<{c-5!z9lN^WE^efB3+k<)V%
z!5!eKDv3b%<#;F4{XbWTXDhc7xs1(c+ot;KjT#7<j1(>4Ev0xibJqK*%K%riMLiB0
z=VohX&vw4u7B%46yEgnt3eAi892moMnwK&y<|X4s@&=;U#8ffGv7_nWuqh>7C75A@
zGBG{Q<#pD%VoNd;TqFSH-f(bUSV``o603|Jy(?1Vj9)3?`IRD`U$0>rsJ0rOD-sW9
zj00{0NcopCSfCDsLYmRetpfidLopPvN*YR5Iris{t0h%S2v80^SRAl>-o~P-4<r3m
zz#??oU~<I4hnFnJq;O4)&btsz!Lq;&1MNM57bKv_s&WVcO9&NS=e&a-+-V at x<?=v#
zsdt6KO4zcxV at B9NuLpI?<l{D6kVf!QQr!*k%Scgik4~hHO&)WONsW&j)d0p%D$YMP
zFdg#bv8C$dM3!N=OTQ;B<Y;UWFJ$?LNT8?XKjHzZgrtK12}7)h&ZovcAqRhfk;-2R
z2*3r)F_xipa#wZOClK)W7y?c9Sp}#9i^P(D(LEaIBna|fN~aO`COv-8Z7U-Dy40Zg
zvi(bg at P#pxr*j1j at HsX;mLRw>`)44=VT%Z)VLkCnvIf->058pu;EB9my^GFDJ(qn?
zPJSVs1UCXXhs-4)S<HO5d;444``MEpgoviHj_67o8jkO@@>G{U9uJ{mf$JD3$P$ZT
zu|Xjr#LfkksgD1{h@>uLN(%|IZXX3`Lj14g2l at D4ON)!kf8>A3t<<OasWS3~yV=jZ
zK6E+of`e!Q90vq#$WFI*KN}74&yfGFFxrNOOhMq2T>h6bY=LXq{m)$#pht7fX4YI<
zSwbN2I0ek_7ylR5BA0M+L}soRdk2Tu<Ke;A+x(qGhXfg2e0--Ef7k^uw5Tj9S=)Nj
zL?l at VJl4EWje%tO=<yv_WC_2Qiba-C<PO93GNxIG1VPg_eb{3DWOFK(21SY5I&7je
zn6lB}3R&+o at -Lcrg-+o?tGR>4l4$C-ITCAosjBUzv~7v~8^(j9XJ>bJZ|jN5g~%$k
z4$)S4?&vZYq8)HMTTg^aBfk#h`k+2=8KoDt!6D}wz4c at X)cFwqNQyu$>ZSe at Sfa(|
zGC3NviOTi&s{WJ{15=1mwBe`@z`2pisR(*#ada at W#>TTlQ1Qw%)L7-@?9uazccQKR
zy%*V2M21F;gpBcxi}o0_y-g2>JaEbe8 at PfxhYCk{egZZLOFSd*<SSO11rQZ9=D)Eh
zn0xo~9Cvwl6zCO&Ba(_PT6QiBaxOHstK4`4^AZhkoS!Mc(QgmY8M4!0pp~*8EV`5U
z<baA681C3wk-ajmA?`g?K}TcT5vF8ZJ5MLH17?Kws1v6JYB6p&u9?a6nzEtE6RT?I
zo`x`}io)~HJB;zIrfM^YBh4tT`xYu;3r>JgddVgwFDnTOqvG|Wdr0y)n!Q7A%?0WG
zmdNQN%YM{gw6N&N1=Dq?N|q-C)J0@(3~L^-(T)&rZN7fQuiwhoZ}An at 2R^#)zgIZg
zYW|PD@(?w{Y7oND56S>Bp8vc5;K6bs|HFgjhkwL>{4^Y2+Um#R|BBcG?(fm(4>bm4
zb8)VDU%0>Jm8GS!1b{aU09$RWa7fN+UQB|GC%Z!fBcEM?d6Rj3Nx3Lch!EBWG=4#m
ziR9^2emPTzeMnKMr!UJ-n8su!G_;@%p*}9~Ub at TD;Ctyi+~TAqQL!U-B%@<6a%7e~
zrCL;;O5WE(3vN1JGj^^ccVzuT5}Ru1y7G~G#k6sHl711criUm82(oT6QKwX=w3F$N
zX|&%xf7?6ng5$u&qk2e{p*gFo9B2pI(te67;CZN`XI47rdys)6nK|!vJFwPBTt&p%
z1CyZq6=LK81Mg5Y2;()F(!Zs_M;>0YI2<*)lJ)_%Ai}{M!pRB=UZ&BF1t1P0Ma;_w
zRK(E**RhVoEe5Vwh#7_#97yUDZ^fWDgBF5>!i*dx{R_8rFPS$R*Af|%Yy}v at z@>vC
zP%fN>0iuZ1fREVuSUmFL#%YJ7%4*1DRU!sE%K7f}|E2Y at ktHWYRFym|%Z3d<w+`hn
z4Dyov%jFeW+4oJ&il-WL>$rJ519$pdv(Yne3ro9CpcqC(xFgfryBx#p<6OOTVT$2{
zuySXEb}_V2!lnCB=z?mTvb1-OT at nHmMh;WOA-7ujd<%6<{3Ww5T at +G1-~`shAcQ+s
zB*_Y^583a}LL;>_BxZnFcpch_1a}F3$~+-Be*S!W_YeTDyfKtEs;ssyhfa#q@!1eU
z9by^DIdMFhm0YzgR$XOrnO0oVHI-f`1#N8KdFvLvvbS(8{2pRLUJfuz5#&~N7qF}D
z`XMHcFK&vHis|b~W|lz7{G(=bg>)^Ghsou+Fx$q~_S21*&(yMy^wFt2HuY5aJHsWs
zXkSuRv%igmN(YCpG^e?<QNqaFS_<CPv0%1nfI#U2m_V8Ho=J*RI?=yI;H<uysK-t5
zoxF+AyFl28GE8dKVlcTXnB at vlVk}9U&fm^L5o(nufX$aHM-2bkg*3FK)>Op9t3Ik(
zAVrC(f+u1|xhUq7P16rVAm^A}NntRoc370OL`iF7!5sm$x>q3-ZWI#$<cgKU$Gy#i
zr-RGtH5acXUS0u8xfdnV%MCkMp&Dj|f+cO=5_E;8b$jL>PXJ`DbU8e8g>qmWJACm4
zDQq;6{WT)2$SMeQ`)V`*dvkm#Q3{hS2byjhG%ci2x>L+eOJKDG*V3mG2zMhbZGa+8
z%VnGz-*ZaM2s*PSjcMm>ww^5}3x__OSdv`9WYMH|J~hTAVr(K+725)XP?H#lIEb8z
zOdsIJl#D7mg&cRm2Jk@}j{7wMq#rQxoqjV1SI4wzU=la{68<A<FXorfUOwWYvvT3R
z!cJ2UNF<oLdl$@Tw%--SnKPG=p^Lg+EY``k!o>)j{?WDY at -QmaG=yA)0;xA1mO;jj
zu7P)=Wp_k1EV1;c4ge_RmMnrWR?2gf6Qs$7B_n6xD^I6TtQ?ubx^${K2l>|~8WFqX
zCFJ{<4{{0~kJWuL#+98h%7J<2`<7 at DYe6*&VSMxPP<Lb>=u^*;EIfjehp1}Tmx-6F
zf8H^qi%=6d=a6kn9Sdl<lLoIJd!r at mQV3d~T=D(Izx;}yl$~B2fE(S}RUbkQv7wfm
zTm5W++pG~4hozDl6IO~ZpYI+Bv^4u65RuzESY;RPMIz#!u7+KOX@)LC3OHf8FU2nc
zoLd;53l4AL&#?@)Hc^?<wZWC0K>}pLP?4{GHaC~;aZd{cPzo_OhZl@!M-NH-wE&@l
z_y{L7DSm1yg<*x at AsutPCN^rRBax4o>Nh>X5{sxj-G;wVRg6-l&Tgc{?vk)&B)1#9
z_{+qfltm{qsR)r{ttQPWNprJ_GI_dHW2{h7G_aD}fh8`jQw1%e`HHp!iWfWgmIm8N
zN(b*=AgMYi`<-iJ1!kC!pZDX916ax7ghS&@AR{=O#>-HE#84JUr!zy0W+)57(hJnn
zsD4@@@?uL{AXzOmk&g@*x8Y}_V~(AN%UsE10!P<AmT7LV74h<%N7?Fv22YeN^n3t6
zu(7*GWiwN3pFWzx*0{K)JXIq}Kq(=faBDS-iXfMfr*LfBwqVr~a{>A%UP_2J^ho_Q
z`z{7*>H??&91qQ=`1B?Id};Z2$T{IlL)g~V3Thfv9;4U;am>!<QXG;kqF*86%W8n)
z5-iqO7LZB;RBVr*7zI2bBGGyVC4FnlWjlK#VzO^WeFRbxoe`X{5I0BVjpC84{kc#j
z@=Ig%uO6+>uPz*|>n|-9!&JT8)o*<Xe(Oqt+`2O2#t8y*3=ygtK6&#>r)FkrcZx2S
zMF(3yqnMNu>Z^#KX}+!k0T~t~yl_BAY*>hQ-}Mm2M#a|;<`?Ie?%&JwWZd7T`M%l%
zn8gS<0Gu)#FAw)xhzz{HO`(-*Q1ZXXP!W}Al#%0vo}qotoW(ulECxG<%GcRDny$jO
z6sE?s3x!5l8udquwC8A83_js_qJYKZy3>1#M>!xU4>(sNSFF|lxhxQ?gHjaMcuWHY
z`q$}f;QqGbu5X5-5|P!`AP&uWLyz1t8rLE@@l%e`8;9Vu6i)nR$tj}_{+p>YKB|*w
zg6cdrgBBPYcR_lDDHhSYI|j$pRa2PCn%tB?#KAc<55yKIN^o%F&SFwiK?D{8_ax$2
zvbyo`l*cVdk<q63Qo=G`e0YDnLL?^}ixbIp7`RE(Cggf>!up~S39jWl3alkJCNaW>
zLH4~&`r-aSY>{3c#wP3{o4NZXO`^}?TKpCu>|CoLAexhyBO{2{S^F3nalc9+zA}IJ
z%lcPzR-p-JJb4`S5QJf_FE%#6rFivV1-p3XVB<M=7XR`k3|cmR;M>;s`#Xo*_p;4z
zwl}{$c=`Mu?xwCd7Jy~bZS7xEBVuzNf(&#sQi)~h`n>mJ7ukKk5l7 at xmoElh0gSP2
zsVum^wK|erBPR;pa`yuyLs)nra9Ov*&Y_W7XTzXA>-XoI^UWnu#o+tmd=usu2u!wP
zlmv;NKsQuRB^y*|i1kYDM_FGvD7-GGit$w%KgHSY>5~`{{Hq+n?nE^&`0|kb0tq|K
z(vwrR*s2^E)&egLkXIu-tnoZNq%uN}`(#z3_NFmZK{fV8IVIg_`$=FuMlX%&_-&6t
z4j}$~(6Q)=OFry^&XZtJ1hRcToCE_Yy{Uvs0#ApAIq21LC at 2eHebiv}^&a6x-ZDqx
zLof)+Dl9J+gN{uzcWYI6mP+Qr at dggC$x5Y6U99UWJ9eNTb1}BkuA@*J0Vw!}AQu7J
zrpz{N`6Os3s&C?)UrzycxSEi`%ZL0{wK?KaiC&(>)td8<0-q<%EfnxM?I0P=$_mu1
z<R1 at 2{XQd%yHn$!Ge-5Ku+bDdRb3f;lxO21%b85}k9UmIX90nseS(27$S&=oC+y at +
zr;4iB$LYM?X=(~C7f$fW;Ju7?^MID2TYKN{w$vGPXK%OYc9v6tB>=*uR=xL)|7P;F
zWVQ47<X0buBZ20 at EY`Zuf8e=jA)CBn4e}s)>^K?+!XyX_w{OH4l4<vfsoJ{#>XKfB
zamk2SJCQr2^@UkYAEgK_jifhdQ#KY!g9m}x5I8NIK)`B&kyG)74vP5*+_#!!r%$#M
zTjXcmYI`w6p;RuSSqb4{JIboc at _4|>=oW7|uEnWG)Vv|QnztNLvwTFU6hmO)X^U=n
z4<FbtgDnDMDa)vs`z!GjF;prsy99;h;K^aGa81yY*4Ev(F?bsv-R?dV-(6i3dgUS(
z`zHnbuw%<sA-b|SorJ6E{P~b9Lo~eb{&os9L`sAGfE0}LXawbfWQD_#5Fc$}KPs4I
zWS*PJfhQ+UudU}Ed;qX=Ed`k6U)&sYxfT?Hxrf|kp8}9_i!4D{!_^AaC5&poJc4PM
zsi*gNQ3(P9C@?hzR|gHRm5PXXeg~v|!8&+UTTh=&xxjJMLgIbeh^}q=OggJt+GsoE
z;K3tLWH~n at 76OvlAP+V^|7KzcAxJR|C=*5K(KIaM3Mm_&Rv1C1WfS7j@#0nrP^Y-C
z{T~yyPIc2G at S<zj|04p at AmvoD9%E~gk0}vL123<RM at W&Z8&wL5aK072DUk`57R*Zn
z57_t~1S`r%%K?*!Vy7FUiq0v at jC$3Fg#*wXcQKoquT?rsioQR5m=xm`AjzTXi}8T;
z<?;jM*ebwSTx$VIBp_xS^;YksC2nznI8mOjBXt#8EGa4qp>`2Fkd}x?H at rZsiqQ!K
zrjmMUQv$c)Dk;uzA~c74kg6$S8E}D|x*i-$b$hAy at q{Vljv^F~=VSBOm>|Or{3*Zj
z11{A94`wyw;DYqlxf=rH$ESlHM25rxQve_UAtGJ*GZ3}SCrr}m`seP(i at P+GVRSu%
zR552`UZO!(L209BHdl at x<~SWk5bwM^@R9fcBp at 2UXIN8xLQ<v#wOzYOV<phu41HDL
z3P-Lo0Dj}gu~~51*9U4W?u>di_x8Ts*?!fa>9l6PZNaJx>`AaEV>Pf=b==A;%gTL>
zI|Ub at UwlWbDJJ1b%aF at Aq^JtySx8M`rU7}<l4l at fkNR#CU5-|WBJcWQ?AX9in7y*Y
zg~wr<Nh=d>80;v2%ZSOYUw#{Fe&r9Kb2~mg9K=VprtZ5LZ<Yw_%J?!l&pc3L1`||k
zTCS`#0Uwb5&gyA1KQo!p^EUl$&)ZNIC|08!N?##0p`vo-{Z$Moon%bb=E?T{w}_Ye
z1D&rW(sm-YF{a-z^ajnEKX;7Vb!uIiQUHP-#Q5}{BdvZHi4ovs?BAp^EOjqwcpE_2
zw<AlQ=vk_rsSE1bIC8$*HfOzc<YmyX+i0Ff1JM$e+1p@@xG<&jkW(nqgA;k9W=Qup
znUpd@#&(cCMI}o_siHRay7SgXhpI0$DBhM7tO^)f(Qzo-4EL*Et_yh{To_Wh-6vnI
z+ZZc~69ZvV^l(^Hg%_en1&a8aFX~qJ1ny^aW6 at 1G^`Z(Qh^NSqOQ>^cJ?+67HM9xK
z0p)LQwV;)P*l4?dy1luvyYcLYe>l?y`l4_d#~J+nt_!(=zy;U;8ymh%y_6I8r-8!n
zP=}>A+ at Q9epKi(aw_j}Rj0sNhuSHMyyBF==<tHJi3JAYmo~ymxf)$U{Xag2sesVgz
z_u_Ep`Od%3)}&IskA%OUWT_o6Zm`(yZjkAQq$NmLP#9wky9kAovIk(^g at dVLbCkXD
z+;N`IdHU?-!8bSHa{}+w_}}j3K$5Tv#}wbE1)SfshfffF|LNJ)@U+_r^~k?WVgD8d
zxNNBTq9h>&Z`KTLk*+(E_nUEBGNVs|F|rtiV|jHUaNf9X?{`mNuX8@?!9t0A`dcJC
zxK at 1%4RH=(z%-@^%=hTU4fdXX<j!~x)=hKDC$NbTO*Dt{5)t8#PsP5^xsW3uDbv&;
zWa7CxqT^21Ibt<2 at o5jC?_n_0whvKhx${gY48tMq=^hP&2Iq~D6F*4TKyD{=n9*`D
zs=#>hzm8j{3%8iw2rADLr%gkspM8t&@{0Jv{0?xP;x*adN8sF8QxaI?Nhf;(<A$9X
z-Rd!B^i57;>&Z?_)u{}ZgIfuW!o<Rj at ig1&8iZ)6l8pf~J%@Y*AUSdk(&8#O9ne-@
zEy!T>goe)G1?`eBFbLN at mvGQk=MWN`)|C}i$!$o_Gpb0#z&RQK9|D=;uxDm5sHnel
z71<P~mlMet!|QVKfw-{74TU&pMCKy*Ig<{>tcBaLR2PgxRd4G+{3qGqC%Vw^>J!!9
zahpN-<zP1JYxy=rcb+B)<1pJmb%euIaaFc)z?2q at 1;q<t9dtCF0~@XXIOv at _PdCU=
zqQoGC+Bk-k-cs{-Ey08z7aL7JlQ~;9ls(&idYJvk-p+31f|azxABDCsqgO5mp!$(O
z#1t+(tRpK}R*rZ3fZ{?h=#G_2n%IH^rw at EmsKpsLFJIPhpBTDu*=uk?N_c%+E^R+I
z{DNtzZ#$_)yVSBtrm)b<t#2V(dl}u{&46EEcm*R$=BFqal;>^${x1=L;3=$cGDq=w
zLfErHsbu1!q)G*iz90R<-pWI#MFk6;e6peJ9AvvMpFPtcsUNzJ%D^)f_&EyXP2fn(
zmCym>rresV$G=#a_VrATVT*P}e5qym)S+n={7|r|;CuOC{qi!Y(o#zHOVV}b*v}Hg
zL>HQ)*O5;=P?w51bFCm6mhL#e3DUQQmc{kuY>;tH<WX!irRl;=i+X~T-BBXnin-+_
zxCxa+*w_&@aYvT0Vh)ya6iIWQZx at 28$&$dC_{Ty>ecbDlx33xp-Ah<JHxS;@F;>`i
zs8V#<1k0eAuf#F1I+{=+Jr>5CM%nt;{Z$?RZOc;KibQgr_lDcfVr=}khYubtEj|1b
zf`u(Te9&w*A1wcAvH9phbNP?>Z?}c_P3o<Fwzao;_`{2Bxfy0JUOsuYvzgWA78br=
z-dtGNI^4?s^P9ux&oVd`EG%sAsuf`EbTqnHSy*`Y?%n*m<@v$o+l9mZh4(~~W|NiN
z_xaAKLyHr>$=>(R&f%j~tlRwJi!ZcBjfGZ_M)~bpt$RNA@<97D7lpMk<HB9$a;<hY
zx at 33cZ|ggqm8^)w2ut_H!$%gDZfS1ubB3k6|8Qmbp$khVmcDF42#mx<4l$8695MqV
zOHAZ!^lt6Z=Xc02W0DB6rR*|}0A$hzeOasZpz(AWK<5`u+CTHbJpQRk*en$2!}WOK
z{hSu`DpB76Y_Km!$ILr$yO#Q0BuFRB=MdVU_w!l}s#9D-M{|dWXaqg8{(|cq!XGbi
zogU*FC>hSykVInc^UoiAF{f^eq`s>oraN5^WFuRGm&yEcHkZO0#)48%U>Jd8IJ(9S
z_q5xEmm@<eS-;0asJvBQgA}X7dHD at ktS%@}@2oOUqo|VMNslEqPZfmEg(uxhU9zjQ
z%rb#%uuxOo at I3Y>@1Ldm;o!obUT%a at 86)+z^?ia&gNh8tRlqg*a!^~xJ?L`Kfo%+&
zc*YfnIr$YPu>*BEBE<=Tomjl3Da>o at 2dtdwuW_}ouqVB at wRJ2v{$8nOX<P*;pU#Ik
zllvO+v$lSiJ{VW`r2RiN0PqNRKUw#++EW4%Xa at 6zjp0wY<Rgd^QZ+(tUt52=@pm+a
z!jiQ$=(N(6>cHdajLt)-vE{#y8wKLOAg3aVZ~p(>y?K8eM{?)=xAZD{D0={o34qs7
zHl=|VBtVH?UPFN5$XYL^0W^Ug;&L}268g-G-|sIXGAgUO8UQJIpM9+L4$*aFWk$w*
zrT=lsv$j}3PX|1cZLwOva>;vN(UjJXT)DCOUHsKN?fxQ*?#>cOixq*_C9>OEbj2GP
z;pk$hxZv{f=ximBxoAMu_y?REsrCiUJd99ltk<wp`1SOijm06Af1|(Qbfx)5cl^zh
z^U3b$37nnY2nVOnFDyc-hKG97+9h1^J&A|$`|<Mb7;dt>dqU2%ky=^7OFK+c#eU83
zdSQ0hXKL|~M=wtw<}eD33w%FB-5hQtHuU1*Ajut0MnTr$$-dQ%uX=sfvy=VyN6M5m
z)^~Q=%AqRdM$>8}bx=GS`7qS?u0P+HKgKgMcaEo{>g_|n;;$oNH(qS^yzls9yO&W3
z&8dYtgAj%l7{;rgE$qHsiFmS8VZmT?5YcJvsaGm*I)gp9YaDnEdpx)sxeA8SJFBn0
zf2Er4nce#F<lNnUJTSPwe0TY_RWy${m6ZcnRa5=#+1cupE<nac`MVT6=1^tB7IUM&
zf&<;zzIW#aFE%++<+;z`Oej3}s6`mA&e~ZG!^-j5q+Hf_>vzk9Rh+3+Hb=~I1>InF
zhGz$y6MRfh)Tum_|MqI*yXj!@_c|-(8&?qib~@UB7;pRan+_~Io8$J$^qSSlWK4|~
zWHX$eieQcXUommtk9*aAXyUkE<;|Rdy-&il1`2S;#}7H`0GA!#^gDyW^QX@@mUal8
z;NfkFlKy$TJ>USxb1G&194jAX_vGaLc;tW2OrhC*GW2-+Y`kl-i~4TbWLR!`b#;Iy
zba1k#J*8!7&x&%mHWxOQd9*vZP`bNN)Bi at pIWzfX>pm8;&P-6Xx~K%|8Ujk}?|Ww{
zWGo(Re9>O%FQ+vR(gPs~iz)7`%6gs|@4@}wfA!CI at 7(!jheF^ZY-_d0T^_uks at DPM
zQv)$L?08oP;?~@i!ry|h<zMSAD&fII$rK!OzA;S(G+XOz***iSy>0WD73;9zxh>+}
z^4)vO_wFWv54se4=W7*-5M($s1?%QF%}0WbydCWfc64U)XktSehj6su4CP}*O!jCV
z0R^Hh%3tlOAt$xHe!2eU at fM|XE$-E;t2ysFU9G{T4h%=bV}OI3|HHva_9|v3 at L+EV
zOjJU|KAJ3PGjBp}L^S~Z(9cQWrh3K at qaYnuq_8~L;(X~{#NjC+2oLa}bja6zadN)E
zn-&qVgQOW%J3;N?`Kj%k_nOd$G#_gbA+faLZ3-<_6uc%xG(~CMtG at YE$JwDZLe6|e
z72raELukvc^3L!S(N1D6?R~xa9?qq){F8v;e0aDFfKScPxwrcGe4<bo^Q*)+5POJb
zbFY#EzH?TQu2kWi(-ac4VAm~9o*8}Mr>E)LlRB#H;|PS%rfQ}_1(Z7`cMF5%^y1b)
zgWbZyvLb6ykTost8@?GgvA=hG3wC+#9Wd7p^Oe{&odpOJiwPSB3S1}Cq4 at Q2JfGvc
z>YXZgy$aTaEypsXsoJPJ?84D-@}3_TIYLWd!9qOWelL!)lYM*+USbUV`5F97n)DL3
z#F at 1}WNc0`%%OIMWK1rp-`=<jQloxxaDcD4Bc#C@?Y7E3*e8GdN**sMNZZKUZ$bZ6
zB&GflZ?#1UEoq8<#M$VGGaoW%)E*n#8Uy#5V{1c%#Xobx;mNs0N-<Yzm9Vx!pt2(<
z5bYT82SHd)vdn|c9|CF~&~8C{11SbKhpljW;N(42^DM#rm*)lCJukju8G>CJ!a8x1
z+1*%uwf<!O_b?hIHDwwht~bxXwBclLN&~X}At`}&16y(PWel-mvo&Cbsns5V?nk at G
zoHLx#$8hsQ>Vl4rNbY5PhS_)=!wl{|xOe;Zz?~c~IT*1hnS(7Mgz$Zny7l3n8S6dE
zeLmiuoJ>#Noekd7GfEDX+c#GA=lrEMuWWqW9UaCy_IH_;zWdBjYRyq<iyu1_fQ<K7
z(U|p*uJ5e=MFLWLKL at SMa>5>fS00 at oo{dl07$@rvUkMi9 at Kz^wc;U|w1(LCiu9l$;
z<LOHUfM-T$kUk=E35^*%xmen{SQ>pCA_GQ)#XmpVxCvV`_NERlT>NN+4!sUkdLV;b
zE#({b0E4m9Dp8e+&Tt9cVh&Y?`E}5ghAYEU5)eea311|~WT3JV$uWZI{61^LX39~a
z`1}3b7DNN^7$y&u4j@^%BY_4}7<XPy6%mz*K(LE1XGw6z*zHhrMASA27#ax?In8pc
z3?jvjY>g5Nsg;kOy?nG}EJUdo^1EqLdnX@`#R-?>w98>SEAx&kkw6i!HX;EFRbyc_
z7>(U2bL8IkgBz=hwK>w-hwC{=2KSa9+=Mv5`dW-c2bh7KeK0n4R$W;qwAtAUnJsPH
zw9 at vh?rclt%4KSPZTz_AyzmEq-7_(<+;j0A^a!>;+4?d~D{wEhJT8B{kJI*@6B793
zGR at S$oSv_`=yeD8SJwvQmmuwTKt9)>rE%Ox_d|JmE<`yUortWgfsuwE??V1gI_KyW
z^lE~~6e9yd+8v!5Dw$g4%s{EXZd^@9`^JnBIgOsPJdmkka~#?n(4;uUR~l3On0AF+
z9F3b=$|+eoz5r5r^h0=#vbKvRWdkyTaiZnwdtfM>fYW59H=Z-KYL+M;c)SLn at L(}c
zE5_yFb2~(b*Fu#e!??UPK0Rj#%$^G at u~nCGb#O$u|HyrZ<2ZzEv?KL`+8IfPjth$E
z<te(iDTSxS`C60%uM{i4q$=1zt}lQ(QW)x0O5YayBZ!CX`|o4)yYKkl!P4s|j|X at D
z<&SrlM6Hj08K2%Qyx(ne*E1wJS_CFkH0iH1jC!TN4(CH?vvu!GFJ?V9MH#}T<o)~M
zm}3xw_7`RQEiLKB(l6XF0}ze>cyA@=70=oz_47Nw-1Wx^(4#mal**__!wVoy2AApm
z?ynLqIjs01c(+V#fW2N|{X60tPhV_qt?8inu7Lw<ob at idfpg;ivZTtdaBtIUo(wNJ
zqHnDJSwCTN_H&l&H1F9rdR@|>41D#ncg1E$drK}NZ>&D6f3k3L?^EHuY?$*?gp>&R
z#_F5$ryuOBw6H^UZw*h`Wux>v4&Im-qJ0mO9mA>_i#`=*Y$o2rf29E)qwv}0H4LK=
zFlyE5DRNP4N^Th?5>BxPERWE=6Y3OP8D7Nzu>oCuSspy~CSYeW@@1n<FHm!i21Vlm
z+fOFgdw)CG(O^IcmI2Cz5-5YkhHK2b@|CIlyJmIP?1!P;|MDtTqVVv at aUd(yhJ!ai
zKP9t~HjKquoC~10!^yGu6HEunMVmanI4a?TH2 at _Ad{;Kf^x(!Se*$}dXw~`B!>U7L
zP_Qy2VTr>}9M2ZeVjcnmY8SI}=-ya;xykosX%)1B8%p?p+Pi<DN8}mDShI&@LFg|W
z25^)Z<&%Km%o+yVWZZ3<fiE|L$v?IqZaSp*o)n(r!J|hTGCR5a=9q)DEf_a|iPUV^
zBTKGU`wH<9NIw!Vz!|p4KBBHjZY49eI3}6|wO`(0&Q!0 at SQAz(@j+|ef{G|lsghEo
z4U>%*PEqmV|Aj+{e;gTa7T$Pp&z#hkb2j-Xz71~p_~7IOg%+++J3&wz&n9E~abh<O
z-UGBeGakCG0yAHJu^##()B`;%4>pO%=nZC0Y!%Na7zxpf+&FN`ygtzv9~Je>FHCAT
z&r0g1E~Gtsv-M=@pNslyEo}#cgwGG at P_IMi@g;x3Q|3>cj?d1`UYuf3%#Qoz7tO$u
zmiklzR~j|0#J3|MPvjEIS417MfMX!Q>4b#*!n7GVkEX6+YcCpRxAbwD|F^{8OZmBF
zTBa`V|Kc+2i!Z-uE3<Ea(nPZT{21YGfNDX1k%dlaHz34o9>J1u%?VfcXnL~>hcF!t
zxb*RtpWjuOy?w>R1Z=Z$K8&zYEJ>&_E{RH$T at 54EIghYlR~S5tI#f+*aaE484b^(B
z$(}z&c@;hsw~Ndq(*lWJiGSI<*0sENd2dP2;D6r9poQI^4(>O at x#`3WjX66I>j_$g
zZ$icR+5mRgpZqvG4gYCzwQbN^S>TrXDkRac!4`tAaG at p^D1fgo!i2>L#tqme=f}q4
z0qu17js~B|P`X)?1tHEVLMh{#z9q?RL#16{G_QFj`S}BI2UmBS_n9b&GR!xSWq4zb
zZbFe}<3xUeOtbsjcPksH#rUsj{t&m4Dxh7-4>szN1*7g_{(Z*KIozG)yASLe+O3El
zz>K7D*QVf$lMkl6nu1<Dk0VE+Q0$B+;CZ&@t`d=FA20_j8lt|$!=|09bnp=5JTLvq
z{ZfaxTus~e{l~=ETapJ8c|SCdtQ-Yjh!OY<&{%h^>Q)SzJbUo{n0ewyAOC_u6>Q$L
z$iM)FK)(D!7A!4~ixwf)BTqLr0cIkvhhGA{sl7A;{w}SD3^HdLMr}26l8zu=hp$Ci
z?*|ld7z`Qr&=>t at wKSMyocm{cAbcI}{jBnAX2=(z67(FQr~WJ9=q<CgaG1mO!>v<@
zop!7`JjL4f`WBh{RiI>(djd3__boKq1LDD=@oIKY?(v+F&r4Z5xiK7Tg=W>-pR(-I
zeYYTyq0P)#;#oJvE43y$%?FF*)GQq;L*r(}ZYxHF)RI~@8$&b>!{@xnM6)#4d}0o?
zTaWl|jP;JOjZ<=FT6!6yY=UEWG+hZ0;Tsxa{pWbLqf7=igKaPY(}e#LY6Vi|Uw0L|
z6^Ob{?yV`Rco4Mo3Z6Bhn_OV{nbBe%?tm7ipS%a#gi{21)J+^81riH-kjiQ99H^A%
zj%P!5UNLjRG<FZq)g2sb;F1{)eyqbvGc$X~X{atS#y<-fP5}FqS1=8%XJIQkew{<a
zre9d>Xl5|;w<%5eA?}#TX!XnAAD(?<9nN${=uZnfI3(T?^`gcHyylQVrO)pS?|i*`
zXS93!>%9kmynXu~T@=+B1#aWbsD}YHIKGKRZ;bNgm;W&S6KA#j!}y>6iT|z68|TEe
zpZ;M?daum4IJVDrm2Y|2kWBG^{r&#gH!@H(%d+R?-<L#w!k!4m16ZWj!Wm&uN2lTq
zpgXdfB1U7i@&K_7GwZ&3mg1 at aBL8ESQZblg@1lwWsl1{^?d*Jge`goC)nGGNm8UOX
z?-RqrcXU^kLj<MG2wy&0B3vE`X(NCW2fPfq+K29qAoTY-NodI9Op()9to*BJN|kgg
zFd_P9Dt+7OATNcYObmc$%ek%iD4095qjTu>mI+SDJYn0VD+x7Y#pd8?Je!t?x4AnR
zpW at 0Mt}YLr7=IEcmN1@~MNTuA`VbCaeu`##rXh=-nM}p`W`;^7Pf{H|!T-tCm9B)L
z6u9NVOPRtrSk6DLxWVV10%kZfVg&_FD_n=>Lp$C}g5IV5d!}oBdGwxn1al~x)&2LY
zA_8;D#`iEvwNbkVXoQ24f0}%lKg?HyeRz}j9G+9m9!0w?&Q|#}=8^Im{2JmFUcmc7
zZ>&1L+h%AUQ`QG06;Kn9GKG?N at m?77D-tt)u2kz}i3r_1Ex1i9V)6wo%WBJFi<k--
zVnhC#)w12L6hp*keE0|hGxUvGk8q at uazlV16@4*`8LX&G2h}`USXVE4#sPj~`Dy|1
z7 at Me}`c!{O^qd(o)mmZP!RYYRg{+uBcrwDDG4tjNLK at h$#41ey=l6PObLNr=bY?)K
zHi*r5W#pJFE1M>4pKm>RhhDGBB80>c%8~=}s0goS2E=S7qk=pn=cMCZa-dZqYz_ud
z`6h4LS8;z^Vi0*gNR)owGw$Z at j<Gk`0_T}#I#K4W3FEYvvMHwFE4L}mDoJ{PhE`pa
zW&?GnVM8m<hmvGngRlB#73|k*X)ZTzPIo?W&;5xl at 1wCtG>Cb^1HBBAx$$^NCo)&|
z<Qgz1R*SNhZ{SX8(6=mLW>5U3?uwihc&JyHt=D at d>*4XTTK&shLRc8Qiu1<-CfBye
z!Dg!={o`(Vm_1(wam%QpC-<-o7JnWO2T!(M*^13Nrb&V{!=n+wvzr>any3bpd3FWa
zywuSXdQF-;_S+Oa1`;wPM$sXh6rmmU{e&4~tC>)Cgt#s|wF;YC<!CMgV<nBC+~Gdf
z!pwNgXI69-_Ivbm;kORS<iZ#R@!wZC6%Y@$IN(!i-V=9=j9E$<lY^8Y24BJ1Y!sI;
z9X59jIU^%HL5wig2xd;EG5w=_X|m6p88A~0z$WuaTP^u81D71mJR`=Us2;)D1$WX5
zCw*Efa5lHf%xG!0M#EXm>e64pRGPv!BGgF0z%6lC$1DKbb~}UzOf1n88<=l?Rh%T%
zZzm1+()up?--dg at s!5DAbC8whI81^(7Wb7kdI$QE1*lw2&5Z`FJ>}8nlVb!4=E5Rj
z0;H4bU2}2Vd*);)TC>Qlh&Zu_RD4<!SRTAVd4yuvTuVYjeQqGpjUk!SMd}*fLgJIw
z45H<aYoY<d&hNLjUPa0$hs=C0%}}w8;>v1 at 5xyO-Qpe!4RZh1%jzsWco}iGLNhq1O
zR*!qO$t@(kq$F5(owas0zm1T$#2P{I#;PaT#8eHi_-ErMda2lyO)1p<+?~&Gkh$Hw
zCski5Q#n)>y(R at N;%i9723+R(yZ@^_fA>w>Z<E7IX(b}r{91Z4ZmgP at q(YxW*_Ku^
zqli>*gvVb#w8&=x4 at fixhl(DMa1bXpc9CH{lqPu^uu=KO9#KabtM9tVP$vm}PifY~
z62Wi+QWXSUyn+ at _I9B4us*sYITP%!$9c7x&w^Fgq<6GHu%H$L)j0NqD2!$3JYqXGM
zJe=Xmaqa;!g{>4&%Fi|0hZA~aU1E$ewKYyjU{8RC at m}!K;_ioI<Xn=AiH;nP at r@1n
z=bSWMsm?E<RcpjpLiwy at EOaf%t368N7UW3dgOFk|Ihd<bG>H(I@|RZj>5$?F<s_I|
zqkUA0ol>*+8jj)$o{X5E&kt25zB4|A6wH%_zy4^ve{hDBKQ)9rk<a2CNh9XA3U}My
zC^n>oup?w9?d95mdC&4CgTuWCo*ymo1BFY)Ebh_4Vo7iXY|iq|rakF|8S}q1$rT7A
z_%3?hzfM})QXIPi-(X{PK&bXb#gMKldmN>tz`#V#c9(D3UKgiZTJEvZ62<pq1{veU
zndnyx?brfS)j+yJ;{-7>G0v!y8#vOL$pqhaAzbHlhMLA|myEHtq at M=_^Mwx<7=#a*
z8{Y|w&-z)`HjoxP;Y?k)HpZd+T46If)Aq=s>F-pK9Dt%ojqzDVSK07aha*b>RQ5Os
zCxkauczLB*T{G6h2a7yZL_^#X_qt8U6gQ<eGEbzKL)e>&aFpYJ9!i=m4;E+ijp5)e
zgHRWMCE;=C)1iC5%cdx;9$Sof8f!?t?3F at y@0E0<n(bXP_=5?1PprF!iqCHnX;nTY
zGAAMhMG{|!vsons#<_rxV^wej?gj@*@PuFs3fq?Dw|#&6&i37ZDj+c(1TE7!)KD~M
z!_?RTnR{y1Y6(~l4_z}oz;R~ms-16R{&7#NVK;!9XT{pgZFG3*%<Q#m&CKKN*udVY
zSJV2j;>?CfmCWPwmDeKZN$wOLB#p|U2W<^MpoH4&ivDOGY9rZ#3X84e7{U~p%A!?P
zpDC1N<C#qpN&jx&fbSCWVPwk@?w^quJ|pi at Uh};Xtk<$7gn6MAmvQar(h2};7SN4=
zsAmuf@=_#fsJ8GSQ9z_)vdCr|^2nC_&Yc17CsVxM(mxEsHm(b;VhD-EObUvDIVfF4
zv6uh|TH<jmUp7ozrc^r5S3YjX-|Mq$l)z=hB+zpee9O!?w!yfL!imYDifbrsbLUCE
z*-{r2APmf~Ox92}D{5~m;H5I`P3pnz`=+i~k{64_2bvTfBJxv`&Qd~dddSb5gma-U
zFOXA!>_XKx)RfE*03@`4&clareylT~*c&2i%VhaiW!|=#p<P&<0+(N5MdViAU5+9@
z&+oY at dNG(5+sGpGXCFqx_tG=4(CtDo9c`b?hv1GeW-ti at de7A!=>*7n^qH|~C!AfY
zx=tkrJW$n++1eN~n289|Z8EXPyR`Gd*qd&XGN7o+;%(J}@qlAbDQ*D<E^|WBF+p-n
z-njushd!Zy7#tlHi^e5VsmM+U81zz{e0ZB0r=0H<Ur#->_-eZ$MVp at ajT`q_LsyKD
zW~p|s1OjI#XX79xLSQU88IO0XNrwnD at F$bDwK|)2q2oFwQL`wDmab{|1OmAT3dd!6
zAmtLMCHq&pV&=mdSgp|@D!J4{CpYl1&eL>#jHwi$vWfO4^+|<U7A at 2kYCCU{lj+Kp
z5(6L>C<Ga{iMB=5s+edMeR|ert0=8ybY9!kF?}4RXWZ!Gecv)Kab?{DD%tEitCb2j
zI{tY~x}y?`RMTi6k-6XKNp{vVJ7%E|sb+Y|(%a4giM!M~r0tq#Bk9c?kS8r)kAMJn
z*2D|}BSp^+t5XN{{TGUA@(#sd@)Ejeb&`9&NnS8|3%v*i8$=1od{n?%DSu3pXHhKV
zgWjRcwMjtmJpHKF!~=*!7o`UwD&}7h5SAd=iaQ7w?^rZTf?+sNoojnUv(KOtIl_Ne
zWj<>98yHmyZgKd-k*mxdc)R`PmQoYpEsB^%`aBFVt|tUBF#^-9_QAQ9IgckR>0wg0
zV?!AEx>?#T;Ng^CC!Sd*(HNEPeQ;XBr2f45ehNlg%T0?g($@eK3DwYj3YF`{f&jU0
zEvwj0;E1fISX`y(&8~B>IHEv|x{NT58-$Ynr>{5aJZ~3+hEw^PAEBT(xv|>U at BJL*
zTa at dNLdR6dd6Bxs?r7B97tAoySxjlN;`V{kbVz|Z7G>n>#PC`UQ1jPq%6Dq6k}i2Y
zReDb1hoyNmp9H79 at Cmz<qtK}~huIpfYGx&MBELO6+?Ox-;0QOW7z`QUq at NGTN$^j=
zF_k5j81e$)`p`3*B-3r+Y7g!%KUn6lXtN2562*)xa}{3#{VOcwT7`gS1rN{92pczU
zad$={puU at HkQ7*2n!X>OE+LFRSZS7u%S`UiiE2o-ppjlx&~{x0zF=IY<bdQPEUh1F
ztnuy&VHK39kjYU*u at e}%fMTWSY)lTLwRjs+w|>*YP(G(&?0EIBX2|_@`LAN=e;q8s
zF!{*g`4Js<9pQ7hzrKn}p}$foGbV)&#W7#s+iAbt^9Y*p*<W+C`b+k(fubJLmFR8F
zx;^&H#J*EK!3onB_xS4;sv6Gtqf?(}DC4nrrsrD_s5VNX+&?GxX(V0v#~f{|8CAY-
zEBF%h^Riy6c*nc_?M?F at Om*N;@{v-?#5H;+P0kM~way{LM|yK}su33cL+r;f0XXHm
zSAJd`h^Ab$DyCD~XMJ8H)SrjvD&?UB*K;acaFr&}qg12vGI`GC#v~(>d}o9^*lMae
zYGAC$;-xuKwQk2NV9c|cNd0`FCtde|GPLAQh=!#)!%?P&<taY2kIVYtLD&{N+3E_7
z`ADb#oe|>G<H)G4GWoztuZIsiNHkaxxinL&#f25hjU*e!$dhSOH+H-i!3(tB277k#
z93P)`+4{?Oyd$r#3=g+rf!bt*<RJ2 at Ew|9GNYdevTs>XNc#3p8L5c!CR?h~>PfeVx
zO|&r&Q`gEqkI4FSHZR2Vyu0sSuf5nByxCm)Zeu|E3tQLn9|l`52Rhwq;eRaTgcb%*
z*Ee2lJ$>?YV}0=GN4swr^v#z(NVHa7w5fg19B(P!h5KsL4(T?IK|^uc9Zk;S$D32U
z9i#ZM&ST|=jqw=8ty~zaQ*RUx(nOrZ&iJu;aDK+79LG;$56U$0UpC4U_C9VJLyEtn
zDK!trg{NvI5r3~8qQCmzHpV70hd$$RcT-(F;_sN_+0m){vEuTx6N=?3PU&XPhPQNx
zXE?#)aGN^UpUd>@f+LPSVxPX*Y>Q+;@6L2~Aor2Z=zSYG?{VSPbzWHX&0XIq8 at wfn
zzb)s{t%3h7>2M2AgCv%%#p^F~W)*1qzZeOZ1_EJgShS4}g>y-+3P<r`A5i~+D+b%(
z_VQf{Tf%P|^p#_YOgurjg}7>bfmI at ZnCUa4hyBFz-xANSk89nXSzcZ?ULKx+S`-M-
zFi5#RKfvYi2g}7SZJ<PYGWc^Ttl=6jHaA{xfp4$Y*S0op4c0lYY|A*75{KbbP^S`g
z=di9!;7uIxXb2vl;K$+565lNLS0ns8;jY%t9I@@^kWiPcD?8@=6z5>ux=2Cbsy)Up
zi7C-}#Z_tYOWucfrGyF!mPbKwBMJp)N9B-6^3H<8{GV>=OcEl4O75Y{l6B$isQg<B
z16gl<Afi`L_;fs=xqHQSusE`k%*sTuIFyTHLA+F8n;B`F^LCTAUVPiui7HajBnf?R
zoikxx3~vjOkZs17jv>OI;53&3qp1~J%S38Zw{Oe9ojN2b#1>V;ZQ>@?h>KDxv%*P}
z5sxu1y3`0(A#Se^&1|9!jC_-s8DQ+Y#;Jj!JRRHmVSqGYE=|7reANm}a4!JT2IxHw
zD3FmeUM&@@36xrVt1k1^>!&|FeYWx4#-;>Dz8eIQ6Iu8lDbTy}+ at 6s{SK9%y%DaUA
zw%ES5I*Vv1$$+4r*CY}vRAf$pG-y3IX|ewGPR<>kK>ec?$$8CemptCe2mD#4o0PMw
z(+u3L<6f}hbU;Tu%*|{3F5VO>r;e+g5WCYzCb&>jP>h3Kjl5$6h&SYb)<Hf@@Tz;o
zXB)1wK27g>VP``sr{WF$5<e5RkA~CnZpUq!3-Ky3<L=<NqOBq($ifRAq?1Y%bh|>t
z(nXb;-BUP?cTp%l4Xam`$Ioq?aMQy<Aiw;03s=(n__XO#ff72Qp|X1YJ$+j0v-5R&
z%~fuKd|&UNa;>>n!-N<5C1g&UBzS{8_YTcnO_$bQJ!M~&>C&`;jFmu*dc5_G$CwT<
z$?s5bRZdn7_4vCoP^p#9X*Lqc@}}=mn%EljdO_(Nj=q&vn&^RHpQQ09Pln0oTHm<V
z#PRl4Z<ic2pY$Jp^`!qO0_xz+CIu!IB5c9v{`PN_!xe30FtT!84zCcFnIdG2{)moR
z>c~Z>g+p38nhP!8`)w#Yhm%vPhkZB?#F2F+Kll+URj3vY4O at ek7eba}D^zD=)!}`~
zFSpR*x~{d(gmSR97<OHfV;71yFrRCEGzs-8LRWBBKF-2rUhY_+OSP)nKo at ArZT2pa
zAwkTktNW4g at 2&`gQ4}tFrE2Jo2_%X59=LbQaZSiM#I4pjXQJIe`$B|@bw-wT<&cm9
z9ZXf{7bR?rb~TFm0JJEXWSymlAyw4$7)N^5gb<3kg?UkIub+t5#M{@(v(6!Vg<ej}
zrC;BB?tE&h3OiF>6E0d>4zeJE0S$Qv)NhntsCv}n@!^#&)#Eu4fkr--sw*q{Tj_me
zSq69?`4*l0B7}y_k-R5$PPn4t<f>#{E|-`^x34IDrWVvDm9x|OP at yA|O<5NqTRcmG
zj_{QHM^<W#_UgO_rIaj49V!=&sv$EVU+T**!tY)(m at 4Fhrt3~q9SCm$5l>mHN3bdf
zN)zziDj!X$pmo at 0tOSEEzlgTWrm}X1eXbY7c{{stmA164nOfzgx8SuuO+8|GO9hUR
zT{HStV0AU%lfkOZw_v45rsNFEcsrrPwEseBDcWEnPlI?)9voxMAJ at Trr;#i+)oX$H
zEq`xnlfQEO)Zopr?8%E{a)@b21!JXC3Y`^5y$}pY$ILZ~@n8i+Qm_NMWGI-7AftHK
zG8ll82Pmz>hsG|Sy;(&b+cxhbs7KIktKHa;BDZK9#5ap;Jvs*|A5gwsX;AE8&UJP_
z<PgRU at EKbYZ^o{8v=`fbbbNBYf6&2gB6C8e=JW0B_G*588m0CYEmUzobuS<t{^@4P
zknVr=dODqG28L}UV=^uB+$8W2>Fg_v1B2PBcIgoYFmY)bZ-~MP+fm>0P9{t(IA!t<
zGofBz^p;e{ouxaNB-1X-KKx*Pi^-Y`E^3gI^DviMaVlIxdAWgZAqF!klmotvae5Wq
zY1JK@%L~0t2(2 at U4t27Du0@H>#}(lD+^9?I<2F!yyan}yL6cY4!N524g at 3PtF^dn2
z_EdmDHlg?aOI`+1nPStJU?hzkyXP~%QnhQUV;=MeB2&!d61$2|RGp&t$>)QH at tEOw
zHJFHr<WS{fAvz7A>ddq(f3XxX*brTl3}K7LS&7!H^udWcnvkO|&edQ=Q_WH--cW$z
zJRY#FS%s<)maHfyVJbHP%*+-cV!%0eVm6(gHDSQ?_-2Et at JfsGeEkg}YIHIbB*wsv
zjQxhb=h_2Jx<uV1vg5x%Zd>V80!WUfoe^Bu(>7tHr&bQ+I-pgi8-U4s8KeApk5mh$
zn`Zaj$q8vHMU^eSg5S~L at A1nQPo94F=JjlcKS!-jmL=MU9l$___P5hhctZpcJ*kvX
z9^H9AyWyIxR;Vzg-KIt-4IJY=kyD94<`n>k?b%Q4=N5^33btLp;TN5 at V1QODA>LFf
z>!kf~y0nGe@%kDz;4-y1rp-;9{txPZR(+MXqsv%1c0oGj|2npSU33_e(qs5v^=z>L
zqfHtWmBKoli<a4DV$qWI;GcBXw>I at 9AA8;wJ#M9Oq6v-)!0k(GhvqmDZYF<G%V~KS
zB@!&;Xlk{l?~fE&Z%c_5B|IvsvN3ZLtvbGnuc+z=u(buFN%qnyG8lpBc4E&VtMr!n
zTG<KZrW(gFDz@;h=U3<%^n#%Y8KvIffFV+dQ(BuDmW)l%vrMy4+FB0KeSUfh%?aQo
zsnXg~uu1lkg<VS#(Y)kMcyQT}Es&y`gO^8Ibi<VG;FOEOq)C6H99N{D5YMjyFCyqG
z_Ky^)6>pW?*@hn_O|4eP92~`RbFleX6hnCH0rgNFO_~8z2M)Wzn;Z}Lc~`9m1a8B6
z1iKAqm at 5h3ttVk=z+X;J%ifD_GD;@)Bq94k5QxPPthrslYmYvndst0-<S5`JeRVWk
z+nEv;JR7~4jBl*Elx|<8VTnY;F-Pz0MN;p#dwV*~iqJROprIM;n&=)=Y&isIU4fV4
zXz+S8ML~rV6NgogOB#Q^F8$bTi9*3e<EqxoMCDXgGi^(+Ozm2J5kb##yhh30Sl*|h
z0VGr%1)@>5iP-xQN{qdIcCu|3o1wRJEH5~3Mts2*x-ToU%|3aNY)-Dz#4WRd=496+
z)qtU5LRoZ)jeAA{e=~*klj9I}bTib+PM%wUdw>cu=!mE_CsITz99tj$`))giO?Ai8
z^9Jb>zOtP1QqoJcF=AMZN&Ev1m9$3VjS`BvgdJMVyoVu0_d-n`4%Xyhp++{n&t-X{
z3481dMH>Yo2ZASQLZ*rU2}HCyv1*N!h8T-5L0)14JU(b6r;a7b(fk-XZG3fP7C<7`
zezHQY$mpZ`zx=EEjQ`2a;op<1^34!xxO4CR?K}Vcwf){lpE%v-;@x|<ANVCArF(z6
z_x0EJZ~qHLp)#jsfs1=q_SM>8|Ad|>q{7QBVdQD2pCDH(zD|0ebu&R<p`jXVz?u!H
z0S7FMAwBArtHI)tonTEBU`uMws{mvLW<G+H(uQKBoomws_&_6vIyZAb_!^7@{!0kX
zIBs at B6hh^<0?Qe^bO8|9QLd^KLJg&F`A3``y|XirK%2Pev<tPRU?L}!?<g%e=Y&I3
z8xHT11<M^BIHdhjg&U{L%LGObQhW5^Gv;1}|3rdho0+{hAsNNO+S}`n$Duh at tZnWy
zFgoJkAUwK5i_^^~n|e1+)DT^I at gaUFFgfce0g0l=xn`rjI3|5XxNdFeW83PYn0%wr
zv<a=xF{yhEEPLF|nhH at n!S8TE!sGF^F<EW5>A-RXfTp-(Qq!<7I8&CWH-{d0z=A0#
ztT>#o!!@tXasWzr53KJnu#u-DW2;r}yqPlIjI42kpuIAOs`kih5Y=Rso*jyUdPNc?
z<rlxmgQAoX)feRsNS8}sTK$WR4G5-i%Dfq{Ac`t)Vv+5dL1)MWk`6QphMA*C{%pN|
zv*Af&0x6C59Hxbmt$r9UA6esKfM8r7N|)r}=(|?1xN~`qgodl68%MTj?15~2bL`0+
z#hAo at tk!Nh`OHriE<{2zbC;6kvFL7eIAA6*mVTj2Kdd}y8EnS&@PL72Cr9~xedhFl
zUgBnq85i-+aj>h{YFHz4m$u9>Y<m;kp1+!huANqrlu=+T-V{zKZ8+b2-PkgIlaJ%0
z^JaF(oc1PLlT4Ljcc76sZ-*`n5j6!C_aDsL-%VEm%D%==_S3 at 99X4bcBSmW8S*DRG
zoV5|UB at M;)s;ZilJ;ij(St<$VIvbJjE!aY at PM8s{$b6<@Je8NY*Q3{AKN5{gwg^O2
zr8ua64SFqm=X!b=60RJ~`nDag at QOTbB9x{^Hxiax_Sof<-i9M^a&1q3ZfEB1nbOnF
zH*?t5RCV8ctw2_^;rVMmIS*oCQDNoe+r5zd^^?-KyL0g`hkEI?@Th9dOkhq`n}&H7
zR=6#t$(ZdYmR+nwwk3!2HOrL4k169FvEa2DMsO0~O7X?lZK-Gc3rTxvN!3$G9CNu$
z1w_xrpV8vY*gV8dyH{vU`XDHz2AsIkHJ&-Kb53Tv!@X=$NGObM__ZZd-x~Z)fko%$
zITN0BTUG9yUQQgO={pv7Qd}!-D;;NgjU^#zvrTH6-{*~fm5n-{7ALfb1%ugCW3j?q
z;y;X+ at M#$hFZmWM56t$-e4?vXBE at Tl@i_MD)+Itkx0f15sCf<g=CkfiT!ljSP^AZp
zGA1fPEGvRWu^~SsWL-q%5{krf_D}$L%a@&?P+Sif1^<>h8FQ2J0uk!KCGXX5q&fwO
z)YJ+EbL`cU67xBlP{H4k{G-dO25k6GY5FGIQioc*Z!MN{1fTVtyI+&`dVBd!EW$*D
z7uz+cP*Xq#oGMoP*$l$@;}y8<keGu5e)BRcK(!Z$#De@`{bCoF2hX(6Xcp|R$;N<H
zS8>>KTY>W};4K=aSSMwR{KziDFPB#AOmieQoIrp#`=^dX!AdM|-nB106P=;}gn)v%
zn7ous_=m-QRCaJ4br11UBW2de4zhq(#Ow6YItYtCi9hK=a!q+_s1_Aiq^n#-jngUp
zd3r?=ci4qq%jE3=)fMjRi%f~l&1VMjKw<NxmSzyaCJaxnz>Ii3LczV$svntyC7z*3
zL!v at aF&$C589{<kt%jJ6k8)*BU~`NlQE7)30w;ZAMcsDwZ1;4bxJV&Yr%SWH7j(<3
zFRIW1>_~OzD2<%OsG2C{7=XGmxPQioHEkZHNn)d(9knkgE#Z4Lr>Sugci_leXfoyG
zi&JL_aKhVp&hf}V0Rl#aD;cpXS;oF=X^S(mJ&k)3fokW-CXA4+y7xAHOIIOXW?Rfb
zy}W<f2BU%onDX&p1fdt#+rK>c!H%J-wzxX~!2;A>ua))~hiQ<s8l-Vy(7d%J#-Xw+
z{Gz^HIS*;I>^A==xYVWHLY}~s1Yb$C3hP(B4CZWGJ*BZy%=+dOZi`YA(VbNOwzLNo
z2^HMS2^ozDynmD=aa(+LDbfBu=ux0os<&K=IZ&zLbnvKD`{PxpA&0IMk2#o8ZeN2l
z3Bgs8>ElUl3pFRvqb9P7Rpj)g at j+gc7UMf)SBO0v&SZbvPKU*B5ko?OcD&8+k9Vf0
z->4elPyXk9HPPr at f0OM{RSkN;r+Caa-C}DM9rp8WHl*ZE$dd5bTX at pjnHZOTK?dpE
zO|UQMiS8E+c5VC70A%HyG^!#fYzNXo8j?=76?YYaMM=gzczQm;SvQ(eFs>sJ2yaI{
zccZ<DJC+&}225W|=iJ1SZ2Bu4SBVD at ZE2d+LYbM`W!VS?=S4(0f(UnR-7*%B93IC0
zhi)&=_U+1{+BwSC&bMS{SLeeQ<nFRU<h>F at rF^t3h)?)>&cEa<%qFB_QZdVt*p)BH
zZv^S-gh<J8%a3C!%ARSQ5O<fUXQ9-qwyY!;5w^UYW4ZU;teRmk?SheJ=~=xtdv#e|
zb`DmA!!nr6SvEq<c5QZ;6|bNZ)l#@ZZq?LY2Pj#dgHWVb4`GiP>&++XV!8U!oKUnt
z at b6fW<H;nf0LdNyGwZKoIs?fOAG%RHjb;mE3ax^rt{8ui at 3Xj3T`(93Jo!Nx*o|3Z
zzLl;59<8|WRhfWnd=yyAI*BmCZN=`ltftD(>ob32_}GIT(^#{dI2kjEQ!3{ORw7Cj
zGKH^84Nc^j8VI at mD8Gc9yL7xk?z7pW#>wIzoSy9o3 at iLA*60^|`F&F-QfEH)s=Mhm
zO;sqjTTJDr&rBo#`+~w%3x6-o4fKah9IiyZDx!n&+pN6k{r;@DT~Kr7m-$=<L1miq
zWIJiHx!9)eEak?TbS&368q6(6>Xh|##v^XWs{SFN>XJDGba}^C-jr{MO!Z%=bLiG&
zAgJgR4amyP=bYB+%{fYXfsf(;3rRZ&>i|5MQc~>7v#NwCJJel>_+Ub(yl}<p<c)We
zg;WHkwWBEPo$G9(${|q364u`<$uQ!p(0`<f^KM at aPa0P<^Rlk}@?Bf98eZQw?3?*9
z#h64bVvrV*o)5KnnN#8wx-iaBl8;-XuupqdLoR18f~%)hHnD1RJ at cp>g_ckONfRG!
zFO-d*$%n7Pkp)zym!}_P?YgP)PVjw?y9?O0d)Ex2Pg;JlA6Gt$_-1mb7eBDU(O`3-
z^Z{Q0M^K at oHCVDpL0%xlh}97fWYGsSrvqm(vvhPRl78L_oMLBidO&H@^6eRHw4J_Y
zUD`km_C0eDJ!Bq at UXtTKnECvr>yMG<u%Ir{BAV`)iPl$X=dFT?bQ2-7W?3^cDdZzr
z-q@@#Sh8VEHOH3ZKs;$*5S-*Kv3{T7%vc^+#9oqPs463%Be*r at uo{L)Hb(H1g at BbO
zg$^3*;XWY^va83pN<CUF{bK#DJL~O+M`<HpV`gs7Y;|x+qiWRN&P@|Nn?9i%v#-xK
zS1FSh4>R>dbWo*)6gu_PkgsMxMj}#gRA>%#J#T4MJeci)_W`x8>SLYaI~W at 2p=COs
zr+9_tc$LDHaO+jP?5?~2G at FtQ=JGqLD4KHEe$$ktlf%`kC+Sw#813X6^p9DD&zy0~
z?e5rRIaOv_uD>#uQqj=CWuan8lN8c7nsb&JFR8s-j^m-qN-;GB+xEW|ET}D<+CUAG
z7HIMd2wT!2`L;Y85zjIy`B{t?6)<PpZ`koAzK>{!J{ld4)?;TEp&IvL!|_Rhd)Fb7
zpX)kC>Q{O(q<Ns(%kXa7plww*zhmMVi$?9z at X)0WB>P at 9d1a!mYm}b(?m`Q_CdaZ=
zrP!4ang*P+6EdO1H|;fP<{jde2Y7Ux<8&w=7!!w7Gz52^GhjLAOetziWIkbgfl~{n
zm18;IMz-1WOoz^5+MQ-$B4<!n;Vjd;!mm$9<?i|-kgmRTRz+`_Jr<(&qB+FZJA|*Q
z6>oun%_qVITBZ6~R?sCFQmTBeVj1~dFHXeW1|i%}Cd<Z>2n<Sd5QFfcCF98NNm-S@
zK*qz(G>r|=i*~fKpXba*>14|($6*%pncKM)C4>W=(Cr;m<5^M91R2`v at NiC|#Nn!q
zRW)*%0IoE3`SaXq=Ma2rZ<k!hDtW$1mxv>?x5JPYBKe>H=>Ob&Scfo+P~uPlDkKk)
z=7hBH&otwCvI26e$z35oV7fabM8o8dXx6^Gv22n}s`SFq#s8v$%Pkc{OPEzcDW1p&
ziqk3|Fy}?Y-NotHn~@4KvXat>Se<JHU%-npi)BN-o4b{`nqwV`@Tn0gH8o8}C@^tI
zs$|frL>PAG9I)E3vtISGFXWF+$tqJBoJ*wHvWq(NElRI7XwIr?9AX7T%Cpg0d_wsl
zUs||;E#3`OEaO(W2sxS^73Ikm48ksz0TjIUpkfndr1B?UoHu=m7IUXT>%otjA>n)U
zcfni`=Yzn_Kiv%38;V(D2fe+UR_cyO^X%AH>ZHCVJY#k~de=`2o9;R<=@Lovh-4%3
z#f80{I}5i4{Bw7q?jdcGseeMAGu$v&97M~1v^}tLGSNWk58~NKMGlIYP6_RY1)B?R
z0EC&Py*wPf(-HEpYD*cgmC87k+#siTOx>U#VX5&sY)+Odh>9k!UNJMx`y$z)WENVc
z$}Sz)<jcsHN-8&5gU+zMMiV}PPj5%kPBSwJ6GxhO!eXu>$>VgiJEo<44+5C&|GC?A
z&$sEm{`teqUWxIjY*n0d1nO0qlYtMi3Kb;qd9b&GhXYF9+qn+`@FMHhZ!MEBj`f}$
z9-bZycSbm%bD6fsA)M?Y+U#n-dU*gEs2a6jYmK{I`Qu}@l7U~3_U*)9Vo?f@$#4=X
zF at Tw7lKi=ip<xKo^?;?QjG9zJllWpnycu%Yq>Ol_3+~7(E!FQp0~T#$=W&qI?I-~v
zc&R_4_f7*{hUC|5p(}A39XVLmhuV@=46 at Fql8FtX`A?4KdV5EEf5K|ZceTS>nBiA0
zo5|O82AUJ4A!6UZ|LWfTZ-(~2HjB>C)<daRKgj)&`u at L%3pAJq{Eg0GxDs=*Vn6!^
z?8N>xREjHi{R&KvhOm>tN;AeazrM(*e}_ZeoSB4`+1E)S;KpPIUEI?J-z{y`wG|D>
zi}xzZS0Ej$S|No6F0(Q^Ua<q!Ny{BApHgzPOsR}=V3(&CXcbo9P-*I~9>3l|xw9wO
zT|Hq&vT~Y)xgoAp5SYU%O^;7ip4`h5;t<+9_~YjgR at _aed0U5jDav3g<mNEr$3;rT
zFH8|HsjEdtzz?Fc!c&qa^xP9|#Y#OQv#_ODbx9|KiyJkZa*XnlT36<9I9$$+9f84q
z5*RfYGiHM(UnP=>CZsr;Api1<S>6uZO++}gwFueIzOtHEnHKOsxaXH&;ErE<v$?dk
z`S|J6N_ER6N?9h8yf??l<E|B!TZL)YXp5(MX)kLC>Ik;MsJ)q6K*?Om0pG$8iozR`
z*3$O#uquFGA4gDOU9Y^~oQYJmn*ZHceO8}@)frr<pL<(US#9%SxaAaU+rIe9&ght|
zR;)E!5f8N|+XN5Aek28kFy1jKs<Qfc$4UZy+4 at 4L1S#0U>hH$<T3k2h8+wB at 05MdP
zDKbfNZWYm(;(v(B42^pz7G)(z66-Sr%mX*e#DuxlWW*zEC0D>F_>I#^Wg4pNE7EC|
z;oCo^VMOIuoU0Bdnqhc29n6ivH-I<8PfnaH0M-5pKm`+hR^k}- at myhpu{Q}8z0^Xc
z&Te<q3 at f25Z8IyD+pm3;2Mv^SSY_*(YiJ^Fijsn1hfyg?bi3BHU>$1uCLF=Rg-Jxn
z=V(Y1%V=xa;$sPgV8%k`(*6<%f at BIPkWw)xZo7r?ZDAWh@!U$)3eBk6PKZd_*V#p-
zZ=O?$N?1)hNS#sR4-Qsj|D;Fvs?F&S*|F;oh~720J5E%%D7!-c&Be(AGkaZIVv*Q7
zI_Q2~8)Q~Ymh_k_(W7~=mjjpEpM at 0nMVMx-pny`|z5~s|^vDsDZ2(cw*2`JNLX;^c
zGPvK<kK2RBhMc`{VedwC!J)c16z{VdHtwTuHk>F&3RdINUj9~wt4`rA!D7oaB0G2Y
zy)<8Uw%PQ(<Ckq^6wcYV<#%y?+Y1^SPlxR*|6}&X=?M|m!Whb2Z2<JhdN*w!xlqg!
z!3izN(ouob8P$PHXJb`zl~nceqyfpDGP&q72h(h91w{n5*AU8s9j&C1k2pgLl$Afr
z^H^p^Y}gmilm%&XFb<@QliIF<7Ho~%Qb}WPv8vljZ<(W=!PO8UO>|;qpU at p}W||x#
z4+X0S<KV&a*CJ-JY5L#|oK+f2jV|1ZlQ0P}(Lcpgs#)P4MZ>0<naf5JuVkZ@#m{^i
zVBq5uNW8azB(!f&8MfLn+z<Gl<m|h7ZSXwUzI*34gU#JLmjI_sSi%Wa#FbSiJu)fD
zh_oX_Rapr+l+>V5=hd8S1~#gi+b2d0x|FexNQD=2R=7l$1b%rJ;=(!h!~wo(4LEm0
z%>-TAxmZeLF&ayt*?MvK;BU|+yQK7^7V16Neo(Q at f}*X!$o1MVfp!lrfo$aZi9Z53
zD}rVsRb|dA>?E_n*H3miTmdHX#LgJKvHEKLNuYKM8k*~r<gBBiu+(&qRQpI3gDxRZ
zk2g7O60DK$*M6w>sHToi%y0{eHnfh21w}4o!|q!4Pbo$G)#5o<Q&{q6%I6%X>|R at S
zZZA~NNEe8sATq7=bH#QFv_6SlK4!fl6 at F9SYg3b8^e8!v^fE;~X+Yl1*wdNC+4kY3
zRSBiZtK!}>MlN9&>9JI^NxIDp;H)XDrB_~;=IlCXe#P(FbfQ&Gp;KdG)5dBl&~C%G
zgGdp4Mu^LnAcfFuAc6wt^acROBd3IuYfyJwRN*-@<tHazS_4STlp`+mcucH3FD26|
zv2|pxbt_QIB|#a3q0+?Oou4TyV2 at MG4o^;v(oBD3QaVR at iKNW3sj*sY&u+oAQ<S7#
z#Xb7<@%qtTm8*H+8cJ6}rK^(bu*R#juj)%Vj$N~A6AqwG{R<w2+bCGJLb+1OQYSGj
z105oCj2w$y#m_ykHi6nLtFg)sJTR1QQmBP(&@ie(tE_RiIK+W+?le at fvE1$A>STV`
z*1-P%KWP~hPGgh&bi1J1v&&cvFmms(wc+t^U4us?2n#hE&j|Hp9*=l at aFT>3X%=WQ
zM<wNfs_B+tSg-IYGk9Yr9jfocwxo`)+*n-?WzB|?$aS9NRB9|Y8g)46T<l$wOv}TU
z5UM}YCDo2H*Ut)0_ug$wd74*bk at vf!+cvdbV3*OqMS3dXQuT{6_<X9~fy;wQo7&oS
zV<fADUvL&INNAdffnMpBV22C@#1cUPd7)51K5#{<PGdqj>g4i62rbG(BpxF^8_C>N
zOlmgV`uPf#EszA+RNZUb=}yNmfKw>wz7uj-M3<ywucpH^T7RKStBc|1DttxJJ3oV+
zl<0ThTz>dRl*=M4-McN$>9a5U6l)0`;lGCtS4w#u at RAh0>4kG$FZEuF^3W}W2?^K2
zndT0Vh#PNTsuCrCqvEM$iZDvY%DawDpeEtqM3)ab$0!|(P7Wy|JGznwx(mRJ_&JWl
z>WORcsBeEqhf0(2YM+2wh09u%a(-%}^uKdE1?+c&rKQGQei>(TpD}BZ-X^~edYpTj
z+<Nr+$(qdFYXqV+MCCe|W?=#o9mf-I!qj!@AWC_BCT-Y%HY%?ZT$k+Ht<E5{aFS9<
zsg4pcRoVS$I#Xqi9G|&&${Oj3MhydV#$jqJ9ZPIiOvzC at TvM7F2?96~#2nQ*Nsw at V
z5s%w}LX4W at 1yD?dTI|^IH)Yd}=riMuQb=$M4c)s1$_(*uR~mFR4Ff58M!2rb<V=9d
zofU8HogbZ&IObr9`k$Pe!1c3^5NvCK*{yXtIE2rlQ_gb-uleEdA7ojyU~g$agXd45
zZ!F=EKb|%s#G_%b?lCH_oQ({T6H+Ec?n`s at p#y>F*ZHo at 2ePwTo`m)nkncI(R_oi|
zrJkt_-ks|VWgX+26Ekt?W?Zv*^A}*@7NzOgNoyJ>03J=;y)%ihi;U!EKpn{Cw%lOh
zhzi#;isqGD(O$yrmF=jbUbu=Lkoo_29rOw7!l;1-J)O#4wYjk=K$Qc)H`ZvQLh&-v
zT$W!!y_e~i&%mLa$GKkg>h;Ew@`i4g1M-qTY?<??81dDaXgL+jLRfpYwefnewf5-Q
z#^A36F5v67{bd|K&UI~leel<^xqlt}u=e`#_iL{g2Y3JY$HC3Pi<eu27jK?D^VpU>
z+ur<7f1 at DB+&5>>lq%~Idz(;jV7;!)M<9;)LuqveS@)Jssn?U)_cObXV*wR_C at BrM
zI%;|O=2hETpjotmDt>U?Aw-Y8m~m+s2Spj3_oCt-{gy;N*K4T6-D^nbuB;Vi7B7O!
zTB-91;+6uN1hyABK=fdt%f&wV8RP|p%aWWOTT$^aSmI%hr<{X2_J?G|t+f|<AqYtX
zvBwuGYeqihiOyas?R;`LPhG1WVj+W;oU7+t$`XUw4*m^WV$=FD`;$3hyrBd(cXkYQ
zd;+r;SjyTkZPb8G624W0wtILIZ#CT4&yk&@ciTtu+l_LlQj$OGh|2FBn9qkFdkaY%
z89Gl23#w#<vUCf{DP0diO%w<TjHr+0#)9-{0j3EPv?MuXmIp77bC$T#)Vftig?MVR
z2Tm;Wd{^0nzJJl%F1|Hq{aX;e&_O9|hBcDTmVS`7p3+~M-O~N2m6QC}rsTw2OPS33
z)U}0F4*372o4O^X<_D1jY{7SO=E<{qeEz!E<KRTCra+2Q2#ZG~2kU1 at Gtc)jrp{BJ
z!JxeKZLl8G6N7MOV2WI6YeE7ERT?9 at J)Jd91~8F^!=6A(;u(y}Jd4FL##_;>u{R at V
z>%S$=^y~=+aDw8~aA!_NY^3IGTQ7k*re*7y1~bTuz;bYY)AoQp8to3nz&l!hQ{XH;
zLfUSx3hgHiT2w#RS}Ap*O7D}_K04+^Hx*1<f}knWHmobrCWQ1Qx4Vk_I>&@VS?17*
zQEk(ybun53-K?WPW|?}!g^1J_B|gWKIi#k7rY@!kZaVtde2BML&cBT}vV2 at P`Q+GS
zm@(uWkB%9B#_1eJ`D4lGD80JjG2RnGgYAr%;23j;b3#~VNpU9<o}Fq{{zLLse$dS>
ztXCZ+VvUTk6q$pWL2B_q*$c_U^mgkvw_nrjQZ}`^GD6Y;+$U?#HaDs)4hyqmsD+W#
z1y_|?hW*Sigidu_ngTt>5$7g%uPOKFHNE!dpmE+$6wZ|gDz~xtZPQl`y at FiM31dh4
zw5)5O&Hq^=$*D?nIU^#vq9Cum62wlvcB`zl0?QjC%Rxc5Z5zBgMW><geui%A(0Ms=
z>P~+$dp^}VRp*NAP0ue>+Z;-Zqjn-H(2O3 at _-jY$Q?dACa<^X1_N+|U_LRr9+b(y#
zHvN;RNOeKLx at BOCswAk~Ga|x)U=`1m7n^5M06FN?x5b?YU at 5d=!}#^(!J6g9o50eJ
z`xB*a;b5&gSI4^thNmJ6l8%OFI4*_=LB1tokO>71+5>U(cwk#oZYP|KBjBa63Grpm
z(=S?@BMXNb^vb`hL1v at g5)Ar5meUB(nJQhu2FG0ukpjvZWDKs};XBRYLkT&7E*dV*
z0a<}cx|a&ra$+smHjfps#n*eG_8CB1(4kyZsh#0&F&WbCdsK0$V34fbJZrE5ng`-V
z;xGnf*TcaoYN}Beo~RR*89mqNO_5dWQchtqvs>D;wF_NAs(PmmkZVVQ4t?U=omB-F
zzFpbT>E=0 at ib{M|S^%cHZKs`uYGmNWH7XCAc~W?y2XicYp<#M9AYY~bv3-?1YDMm&
zcC8eJtqEgR)|2iUNh7jQTZ_tg00B4_oQX<adBKvzn4_Sc*PMcW1vi}QIlCg?)CMK0
zfqKa#Je}qb^?aioqG}DW#lhkL4xaXr`hp@%+E*n)bhMRd+YYwST%W$m;Y!0^q%h at S
zYIdiwt}h7;-dFk>48Vf#c0Av!+UHY}1omJGz$}v`<y-MQSIOIAaEm?JCkI}s)9w(p
zWeWvtFyoe}Qs=t|m2b>XLjV2Y**6Qeg$skfQ_{y&7u17qpc at 63?ZQv;3H^s%ALBfm
zzSq^6)6SjGK{p(90$~M9fVpcdir}y<5XqSr$Rkoi3GbmdFZ^REVQmbLp&|}ec`M=#
zGAZ*iN{Og=J6{rzfbCLbNW4UiMP-_tVN!b+6S>^=*=9svQ8ON4fy9&#s*PJbbsv0_
zjpNDpRf^~4#_Jz8UT@<Qe7&)`8D|fPcq at u;$O*0h*lCZo6I#a2D(TwXmD-kt!IA-A
z9g6vXE4RN~$ga!fUUo2E`RBNcz+WqO+q0 at 4c{JydI}e&+9?yB^?){ma|2_`qB1hEf
z;e~qc&tSt9y&}U?VJo(L1b4uFZ*kTHvtfW?;@}_sC at QVrBZ}il(z7vB>v4snJ%A9n
zrFcO9HnK6NYYd#jG3#2Rv6<E4xeT0Q$fi0+ at qWV7hP>BR&YW_ at vr7FDujkyF*oqGN
zco_Ownw!wl$B!SEtN-s{j0aSGPqruhBd at J1mj345#9M*3`poiA7Z(>xzx?t`M1rl*
z|C2wWlP2~@SAB}lt{fjX3tN2rbp7?M!DBU_u at h@e_gz{ii4{73jWiN86|wpBWsj!a
z*{B>{8`|tds+iZ?k`AO673Hn7fIk;%h9fOgW{zK>-NdKgL}@+K$Rrm<Z6Wl6xPjcD
zrPGg_szvvM+j{Ah_v`7j>xh#qdxY<$b5~EG%jV7f%je7kk%S_NB1vN{!SSLKYTuP=
z2D6GDZc-#Jo%~?a&2kwCaaNnm at xybgI7YuXJHbbC{WU&2*#~FmuQBic+BFU-8d5_C
zeU4OfS~sZUz>s5-;1C{K?%ywJNIrSZj-DmAA{#rddpGd*cE&}DQst at KA5GdA7pjJN
zc}jN!szB`g3+qu)!r~*^(aIk$u at 6g6E-L0#>tp#nXDaNysjHq)46)k*oJxylV0Cu^
zJ8~?u0$h>{rCRyPk|Zj%);xqonB%BH41Zhy1HSBYiX7 at d4km5iY03N#W`$^T*dsy(
z%IOL*lW)|pFsJ_<FkHUm9Pas>%`HtV1Yote at blP{r6-j_EQD3ocb+ltvW0nJ-u7+5
zJxgSxIiw=f at D+!&Bo(I7<kGsvmh(JD=h$}>%UVBpz6S&6Fal-F`HQ|uTj;nm at 4WVD
zQ+GevmGh1Y<>S#ICnMTU(=dB?M6)E>qRf5cqn%};1QvA#kQdAQ0`P|!MkA#?co#~0
zp at ISj$BrmPmY_E*1YXbV3{2JPT(WnMOJ&0J>2c(Uj`oN|R=YXxkxv6s)6vE!IIQ|0
zu)f at BEqvq)2_HoO0TFZO_U+r!=;Z_jJ2Hh0dj0ui>^aXdkf`X4%prpae;=Ut>`_mr
zS^_n~1H+VAPtzDodTFPRp1pj8nW6)mtv!?kLnOrGSoI>E(zyY9(O;LHamc|Fuu+CP
z_6asCod@@qkG}h5O#5EvLH-M9x^!LX^?1Uf>;zvn7gXVMZa;nZ?^L_NA(St@!)eMC
zoWLd|vWi2v$;iWWcb`K`!?<>9YR`56C|wq`spIJIk5A4=E9SPg?^}eC$*iy;xZU|{
zd4Sv27_lB-5I<d at xX7&An~eja3R-i^SwR#6%`DWM6%yWAvxK(J;oI)TOl~3DGYp9c
za9SdSp8zpAA*+^1w0V3IhC~E59{4p9 at 1p+;of at i?Rj~FwMJnb;@}P>Ck74DxpOS2p
zC|^H&QX;O+7hG4H;Z3gqvD`z)XOE+o7-(E at rS~SN(~C2J+i(RpSd1vCZtck!vLYl?
z(!d$ntc!MzgWBhtq^oiQ{l;nBQ8Cm^g@*(J7SHa8V@}GH%kQgZ2~HSybL-H~Xji7N
zPAGTJp`h3x$Gp#Pd>rknb at wxMR4H?4U2OQ);HO6Z_ at P`=?3dQjlEQ8H(adwW7re)2
z?U7~)D#6x)Nim%6)|v-T{4$!HSW`EhU(qml!W7g8%$#><Qh*W6hG8(<Du;^Ru>MFZ
zSfc(HEq{+rNmSDT#o}a2_c?BK6}o##doi?BPZ7o|UHFj~)8RYSwq7DGMrd0XEx<l+
zF7<<T=Yq)Fl|Z$p=7CfOIMEx=T#1dC2h)_7|4)Il?V>8dK@;ihrzxAx2E8$_u$+e1
zV_Lt#G#BnXc)l<X+c)2jPoL?On?2KAl23H6&m+F)YB*pxWl9Ws1};&n@>VVYm0e?)
zqu4c4_d_aI!7SMpKAc=OMpz_$hk&H_F1ojT_ulfo+jE%(X2gd|+lZg at X4@5lEkOnZ
zJ<ase%&JJ7%1OKXR2Co3?S{Kl%rP|+sqk>fd0Vk2m--vDhINX5*P~@eVL-h%ue;2u
z1d?i8HJhnUk35<9Y3ZU8Ma3%9#Ph1ezvyHtL6ypJti&0Wo&6V~VDUQDF-HM}mXe?<
zYl><JGn(DYY1nb>K?_owl*Q~1t-pTxYOuaW=H=SvMh<jzQ6^Fkg+ezO{mrcJ<-woN
zb)5PsM-A&d3-fO0>#beSIHydovCg{SC}KKZ(f;=7W;vt}ecPlvF~24Pwo531ZeX+e
z%uM+u>D{4;yTySzS!;sa6c}K&B4YS!?LwBu<7FkCW?rSOI&bgkkTVXn<#;pn$@b{E
zYIm#nx%Pkxw<-W4)TB at t%#r-EP30&soFB$oVX#u)!HjBJ)@Ghhy4s9*1!6k1$13?x
zC1 at u@QyomJjb&vYvYeA~TZ73wqCkbAttmwmuIk3md5B*W7JUDacM%OX*MN&f+N6r3
z;7yfHzP#+{bF*1$&a5F?6L!2y7mZQ|CD#sYS4cQ--uPI?$B(TEKdBRZv#em|#=NyS
zuac|{KngXZDLm%9<ZT)<_?-9zTNFANH_0I541!!wCsKczl&)rIM|sglpl9;s7Sj(O
z%hk$IEJ>0;Mvv47Ux`mvogBu!J+7n{R at 2&452Kzr+4bLYLJfqK7zum<Y{_sW5x~!f
zY}(#?jMVHxq+f9gzL$kAi)!={wOq6jp3Wxb%Knw?n%ptHA+~^2vRLov_~-HD<k(7Z
zu7P#yb}++QFXH9BdANuES<H>hn7XCCk}t`n0&K#Mn6RaReXPoSPK_aE?JJ4r!IIPl
zP75j(=s1~F%u!O8Km?eH+kR3WtZtEPB+e9SluzDQ2L~QxBC=UM*5hrM{o|cfB<Gvv
z;X8SkfQ6in<^d4#yS}r@*@3$U1;46G^T5?ZsyC)KNSNf{jddw4V(W%bzd+dcdEShk
z+S#YiIf!(;dA@^5vN4&QOj1vqbNiYzt at IVcR!lPx6lpTT2=cH;>Ct5w!U;pXl4M`Y
z?SWk!jT0pLLpx$C$A<{0LL$Du<myq67DKDFsNeqk!TSwXOD<b6d*?IP8GZoG81D_R
zwGMDrv*wx5$k4{AYTXH!{6 at 3zEZ>6twUhf=`o;CM%9s!;!1x&Tso~qs7tR`38l}h?
zn at NoUM|tjwUlp=H`LH(G8RK)ATx=R)&doUJf7s=1- at PVk(Caj)cn4fT9m?cE52}TK
z@>lny7g?p^iy;Oit329aYwAt+ATNf3nvI8+q7n)hW=JS7xYcOdczA(EDMuUVr at q`a
z9T_Y5<uaEjQQFn3U}AU&ExAJ&g8ni3z`GK~p+ at 9Ot*yScC(J)09^iG#b!f+iF8gS5
zkM_h*)ScMev4s?#wXR-H2J(WmoPIh!@(@Ki3N)bObF<q*>2Y?gr3bst<%Wf(UF2 at l
zI2kV-e$hkRis5^HDTdEuFR(Ri-cmS9C?$vU4Fkd>*IYr3GKFLEq>#4+Nm0cEKk~hH
zjYfjPEZ9w*!ZJi!Us9_v=M5ot)NIUQP5I*bqb;iYW;Vkw&)bcs$CyU at 2ig8=)+1Y1
zFX(zW07g`V2Bw<>KH=cIC<D&vhq at bPMUg61l5!5 at gL443{^*mSRXy&Yx*pzEuk`>d
zX8_b>Cmip$9cWvC!mo>RBl+02*b501{f_>fRq#f at b2k+#oC<am6oB?fnCY;ZCxddM
zJ2(|)$ei1Amf-3EJf|!KJjVhn%Mq%V%yQD?)b=*yrt$iP?d_`g)7*KkXCisUSuKhg
zgn2mTAkPIm2V#5MJ&4=e at W06(?cu}*LnlpW2s*$*bF&otCF+6+109S>2}1{>#E20e
ziUl%9%O~<t{cjt&;nZ+`+-hR*<_wTAVhKH-Wm$-vS%BtBq{rk`RpiFQ!H=xNb?uy)
zRA1*0yf7_9UHYc)j4*&Kv0fj+<<t_`290Q5!^wowok+qO$Y07zEoePte1$<G-OyZU
zb|oj!L}7$3(P!g&`0`9ZoWXTNCA)P6p2$9urvWP!C^1y+Y7Z6xC75B#q2!zeRwKAF
z>jhmLxOOCGlt?59=PhBA&u&rn0j$c at t4s5ETEXo~!Xy*3Vu?^-Oc0muioo+Qo9=@q
z33E2(8q- at l91o}Kk9uYqcjiqN1g$Fek>y1Nm(!BW?nm;6xK?XkcOh;ens<lZ7Bc5r
z9 at V?z*YYeF&dIDJGFTgf6{SXPBq;^0gDn at p^$F3*JDd at x$?W-{<s%EvFJ8dX78L0n
zQ)ME;H(HL$e*17vEuS_PgHqr0KX3_BgTKtbKt_c4p~+!vEzN?Wtabg-b+>72?lx^b
zYPN}!JZCvSr<ozfrd7KRsY4Y`7Ci97!T)rFh0 at YWnSPg{hGaaBaSxpP{*nnt12;HH
z!#K$2O>n-AsH55L_696&!8MdfA-Aa%=oq1!1Oj=?^wmD(aJ+0(yW)%=a0b1ilaiq*
zMVLo`d%iJ8eA{<Ye*P+bM~Zgl-J2)S=B>?l6->%%_?S${=#DMgnY*pPmwbj+(iq#=
zOZ4eXB+BRJ;g2Niy0 at Cb;X|J{w?jIY8_a1d3tevHrnSJCOo at 3{R<B$dMW%2jMcKiI
zJ2ld+mdRJyUqx@%5}x4=ua{A-v4%dZ-%#Dnpvf<@83xr>=^CE2Vl1FEzl}=DCoEcm
za}@1=QN+!6t!+W9poX&>rX8sf2U3pg12>X<ty at 57FI-zV<ZuQUWrz{-e_FZnQ2azd
zeq6SZWvOq;lRx>;2L!(}2Ncj9Q?*nDYuqR-QfvX)Co at B0S(hv=#w)!2&{<uuL at Yn>
z33%}2(5eUJs<2ZbsZjJsma$RJP;mq at Ew0=s9se;UjSltUAWc064jo-s6h)^u*ie^2
zB2aqMU1T*R+IK!5v1QYF?%KhL!Wc*(0p}Bt+LX3fgc;sdu3dYUb=K4Do$IclMU|jd
zXa0(qs2{F+-RrCwG(6kJ>=oQknyz{-=2IndIA=xc5oeqBtf_UcS(WtKv(ZO3y$<wu
zSx>dPV!)Na3d?XiaE6|dcE0Fj{qtAfHWEA;W=Z-%q=`WwmLpb`GfA=&Wi!PwCuNYA
zH^7n%Ww#4<l(k_PaBt6<ah^TVg`?#0Cf>mGNalqGVwXc|mPu2|2nKtXd8sFIy2*9E
zi}r4ZBbCWFYKmzwruKHTi$va#0`yP~(=^2*HxftlSu5OZDwtlue<U)hK**Odu-#Ww
z5?&{qr9L4XLzN6D3b&+oMYUVvn~z45_xM^aq+Gg~@34t(p0dDcg#46|3ZpQX=2ZY2
zr+M`{;4Z_&5ywy|P876O&$h;#hO}gvS)Zvr+IL%%e-Ok at 1TwdJJpks0yCD*J#VFgl
zi!W`u9cAaaKIe<&;IO#sP6p?#&6q8xaS!xf9h`PS7nf$?*3PTwl;pA#j}P|C(Th3N
z_T|qQ6GP#QC_`(&xHdDIE&FovsThqIzK1j|Ij2Fz2$Mr32}i&5*u+2LG|mN&2b~Ft
zri9Ig$a&OBp}mgXRs;@2W;sR9h88Dsc+qHF4$O#mMKV&(B+DPX1m9^(h7aFYlmvYU
zjCJkwur#yn78cLO-0`s}zr>_q9$10c7RoN(lq~W5D?eW?XXEY^PRt~}WV${NVr@|i
zMEhz_t5LC6w;T>ODekjf4#Svoj#Yjv&a%pHtXcQ8<V$9Snr at N%cgeoY%gIu`sc)a#
zL1oX|#jWzgKE#{h`G&|;a3<$PDlcb@^F(!0ysLl!LCEDJpW|OO{st?-k^)Omo^aB_
zCl;C<c|2U^aAz=3)b&gaLMll?H!?w6)NG~mX5^jkqm-VlKa$a#gi>FGQm)JVrv4rp
zV4|*BDloiy at j(zqiG%e}3j&Bn1rqxwG-x0B at eoo0tb)*;TyvKKzj$<b(js^LzU~4-
zI*OGl!`QfC=_IG at VUy`D(k(JAJPIGfLL(m8I3<M6o8*hkhJQ4iJmul>Zh?BwEvDXQ
zxpd`DrQPgMG)+38@~K0%;x92*xTl><OH~viF;VkX at s)rqeQSDgv~z+VOjap%>2c-*
z=&LAL(NWM9c at KIv9WciV4F(%WgNdmv=mfci<~2J|&ffLe@!UK}NfNI$LG}1~-OU^t
zrBsO<sa;j!M#nkrs|aYYsN?{S5V#q*=x`MO@=OHFxD<>oah_39 at fxR2+0*#Rtb5C2
zUYuK3IG{UG_^z3wDUKDEdF&Krf>T!ITZ2P1mlFQ5m&D*mp|Bxu6)6?@EU_|ejsN+A
z9f*rAio$R0*gkJ>UQR4+E0W^%BQbUGlL%;iWAm{Q(BJio)7F|Fo6px?Z`sdIu4xym
zqlu$PuK^63F`Vwg2}ONoUzWku>63{xNfA6s at j&a at oK`%n&D4ki3_@#@fJVa9zR}FN
zytp*5<9(|S*w;;f$Hc|*Rmr$Ti_T_Nq}XlTQlj04t{WBTkIk*M=dTn*E%Wu^@JNrA
z<X+x$Kf$~Wq0Iga!{QOm4AfoEH>P#5AsnOf9xq at Q{%uAGr0l}e7i+J7oZ*csoioEG
z;btdt>LeO%R2Q91KPS~s2rFhe_+dyslJgq))?`%GS;yg4`nYi$|2Fc$WS$*%qfY>B
z(XhjQ&RIknV*y>I9K(G1AjNZ8;IL_5zHDeFQ2K(HAFOwVT_{#gd0Bk=uY9ovGdn+f
zpou*^N3g at yp2T@!PwdEuf)?VW?K=%_T&@5+>kFH#(Z2%U;iFOQLqfFbWU*fo9a<FJ
zJ)j6Ts3js}jo2x$cbD(bT3Ad@>W;LX9EW4&_Z480lPuI*PfpU);<4U2(Vm~9@}Tie
zHXJbvNUBT8$mW4UzC5FAFs|UY at OUDr*}#CAdo`^(lZwo93DK=IP?gTXC3o8tz&YqY
zK9-ui<O?^vvXG at G(ND*}STd at KU68u`wv7QQ`Dw#0{>L<bub@)h0o02|T?%XP%OMJs
z8HQnPnA1i*LppF#UxQSK%u46pUol3U%Io_0%!KGVu#Z;VWU10fxF6m1bvV_KP@|kC
zIzJ<uba5t-!D$|sd}?Q6)$+Ny!oK&4=)x6+U$do<Y<x+ygO6Dalzb6-*oQX%>Ad+o
z at w49k=jZ}G;aOb;Gka&={9GGAMoLc7Mgw~BcAa=tq;>-%_E8g3#2B1qe&v8U6gX}m
z|8hUlnTO8*vHP^(9W{9JV3lFdE+9w=LLG=_$@vVLBeuN~&AQfceaZ9Xs>J-j(wsM{
z3=&~Pu!5 at r-TrI{%DLYFsFNW*d}{Y24;wh&HE^s>Rda$dxW=ALi7Tt?3!SJBPB62p
z{K#O6R2-LbK+})4SsW%~x`7*oGN-)SG9;#k(JT_oej<Crek at ZEQvmfl9%bW|Bqmwu
zHpR3Ovg6f-7<p;DhYTANxWf!z81F5`b-UPsZ^tJ at f#W(wO@*n(PY}1`L%Yluq$<gJ
zkn;P}MtRg3rTm^5#o*W8-$L-{ECARnQJ3S|7R4 at r{4e9v70ql#1K(9FTXbQvOR7%p
zO1g5eh)cOwTPk%x_&7#-dHm!s^|;o>nI%+>MXtFJH^&F>kk9qZLFhrVsAdf at B}m(g
z*Gf4=amq#)f|8e}g}Ut-V#-|>ReG@>*FxiavW)5cWY3%1_``|18d!3OB{Oqiu(%Ap
zvnggPwHNq$a&B?Q#0G+Na<X@>nrpAB6XMFUHDjn*81==3=G5m%Wp~UmM~mVeB-uVr
zG*uKI?-gAm3Yg^;>({p|_il@>5(WM90z200KxvYAr0->tsh=rt-BFmvDNX#DqjicN
zA-?3=mT_(@s0lgc8WfUn7vP+E0wjt|b<Sbi`_R44tovLKb0=+fV=y%L4zP6 at PcqF!
z2*&ASGCs`!$Vmh7m{SC07CpV{k*s2C-oI&Cl%xPGxLD;cib~2sF at wj5x~hYdBpqsy
z!0HYNSER?D9AYh>-3PJuV%>Zd-AKmU$U`WjG=>K;9ThQK%pPw0Aztsti3X+^`j4%V
zeWFL-Jz(CegM44ol)Qm!CYKFJ96v<&GrwPfz1Wn2x1dRaIh}F=Zw~aN+~{9h`qUj*
zf*S5O72vI0j7C#%!4x!Xy2hPIP>{{*(y4I+7O%nyY4x6MO12mRw3%BRdSwBrLSuHf
z&d?3T4>I%cMxnLt^*P8}SbKn|aw{|zwrC5Z1DS2mY1H$as;lV_!)G9ZQ;0sCDCR>d
z?OTQLp3-i13}|_NI<4yG{T=_>cG;b2Gg|T9#1o3Do!7T>O09uPZ`%6F;^44_ZD)B{
z^+=AzoLj?zEM!Vf72#}VR(43bSN{gBhhKMgi^`o}xk&|H*W0GOoo(1z9Bz`^)wpGR
z$$IKP51VDmRnpwCI+Nz+)i3~0n+&N2NA2>jT)k2F^_G6Nb9kM#+hg_O3-;L!<G;<?
zyMWU(9(ZV;X at J*)={&HRP5OLzOat>rbVn|D)44ncY>ik#60}MM-W-o1!=u6L(UjN{
z!ES1>Eops~%pWq;>_}y+*h~trG#@js#V9;Vwil<?dOT*)8~}SG4msUxT>o&6wzX5u
zeG9I5N#0oJNw;op;txC(ucp^Dk#(yCjd)?jIkPOfE5uqS_#B*_ojzPy;Z)FNYYwrD
z=C{J4R&K2N0?V<yzCdODWQx9s+*lb58v!M7`cs}F;O`SdWal#IK<r5{nj3fOEVyU4
z1+h81ty>Z?{^i!zR5ndG4khC(KXxfdIWHi@@pCwRbCOjY*(%G)oHuNze?a{ov8mf0
z3FCaYD7^Zt^#QMH(<NyO7+}Wz0k{%gr~bYE!62biTv$_FD*o8_ThE_i9x^4%!$M0^
zd{56 at Hq6d=zcT_Vqy$?T=(3k7S|9N?#~KpmurL6B`;pDQ>xP2u`CoeGi^7b-{GO2l
zSGKykG-sP at alIEVpK=C^G&8`87vi1G(<3yKC7xqXRi2yVEa;c(eKaB>$JX@{k8OQm
z`Ea}=K4!f}qjw13Qwtf>yU_p|Z#CqQpQ_!G^Y~n>`*F5+K`}fu$aWyp^Ta0r3hO7@
z$4H~|4|IT*)4mpjh6C^JJC~CfUs)L)uYjQwbe*O6ce;FVc0`iC5mSD%g;QcR#$qgw
z3d+uY7Orf~gJq3R`g;z1o~X~wLu|bdN|9x?>>|Fb#HGb at s${_)cWvcduf&d$`etv`
z`p}c{A+)Ng>ENJL{yUfFOxrwyo>~S-nzpoM-XWq?Aa6Z<<=PQ4d#k$1X#X7bJQsoS
z9zKd?9lee*Kcpi8485|7%&d9*%Si3lvC=k<_t}sGPl9*fQVu5 at 3p<<DnUSPihSi1t
zy|_F5`{?*4&LX=oZ{G?HIHGj%-mlI9O1vsIsFo9aKCC@$E3`;llut)Q$oY4a%0^O5
z>~$`ru1ug&IZ at ckm6=bq1^b#+eI8%n?3s*S#|JMF at 4e4=T$q0RT$e$WtT62<8i0I?
zY69O{y!V?hNAJA(mV;v+J8Y+y&9(b%XP)k9G$Y=e%W-%Eq+>pLZ)ssp42#^bJxY1B
zX}eW8w<Nq5N(DK3Z-OJet`&Q at 1EovwLO|Bpy^cGm7WmNNpFbxwIYh+z{VmF0W@&wJ
z2%aLxhZ+b=aZ(-_GGZvq2)&_{XqPYNZ~`9ay4P?Zd93_wTg!^V?^V!pv1OX#2!g_=
zjos{fFW)~iLe~}9-SXo!G#l%+7sqs254FUcX>p!(^Sd at Xy#iX!Db`1jMXg?bMkPht
zBYW%caLH0wTWKZELF+z=cn4Z1W#>$cfaNv~|DtG at j^IGVlOyLivI^P3q>%UpP1;xI
z at Q^}Oftp5E4#*~`Sv(fDPvR at B`Q}y%O+0GZcnU6!V=H|a-EpbY2T$Cq;qX$y7QGY@
zvetn(RaJ{LPyJ^o8W9{rG1 at V=f at XT?TU1ngP at mLC{0Hkn$ML^&&HZot(DAnakU6Pc
zDsQ%5Y?MJwpzv$fp{3802u}sbjgM5(zk;tHrKId$pR=Qze%68agH+8b(H7~^+BjdO
z?IT#JZIr~QHx5fFH#8Z2=s6!gd|2K;K3}FK#>({M-5Kp}MnKtNCkyIaTD|FS&1L%}
zXGV^Wm+yu4W0&$Pt at l#<;SdDx=I|&JJ_g^KAYED6dcF2y^Vw4}XY2y8xExGNqZC<{
zOe9f{k6k at Yd~Mu?))$g0M&eN*)V!@&>k5EETQfJ<jGh2lKGr4~-wc<?HSh~Dsu1r&
z>7Po6U$m~iRdJIuU|1&X(2;P(AZq9Pa=hjV;?X!Gxh9IxGZJQt!U;gf`G~ObaV<C-
zz{rzJ4nCegRl<4d4RLW}3{pu0zOE`I+}|m;oy~_Si?WQrx`^XfnUOUlmR5$dejdcP
zu60&MAFQ7-Ig8)xU<}jQzTet<RYDvA3rUC4+eQTOZR5p_13TQo*mH=|(^r1Zj-5Xu
zJPjqv^mIsi_L!Pdh^!4TnF_mummeB*Y2uYL!LjjChiZBI<PK=dv5bPNpO2x5Gn+UP
zgvC~eg3L=*-U94R)UznOelAKjhQ-c%ezCT9q}}%n7K0TcC^uR#-Tuq=lb5gGuDxF0
zSl3^keD;^6CnpnF0*So(%i;_-1N;iE8JFZt4%5qh#dntP!W8a5{L&Bi at Kmif20&MT
z@{b#NEiS}63xhvdW%xqhgcfe*Ngu*={ipT&_?zvtf76fFb&g1Lm<ir+2n)e(?hm96
zFDC^2peB^#W(!m>damOJFO|~Yt=~<4Q20oF?NWZOJwh>HCPXIJtrGrEgS$#Y7#1F7
z>5vyZhsvbtiBjzky5!__J|1XSpOHP&8TVRAI3~NhlG{(NksM}Tn%aP7Fj8d**8$9&
zg>T7Vpiq}PQiRfApB>jSxDQg$F_{b&%WJ__qeHOL at l9*OfP`}R!pv~3QdZ-iPEv45
zk`COCCP<`!Ut3ITKGF^Zyd{D6Zpw2 at FfX9&e~XNt&PxKnJVvnt?bj~X32aew)I4QH
zza8(LWtXVD0P6Hc%k+SkLEwGkMRA_f at kdfA)d<UL4?!t96s*`kN>N`q90I#DT6yle
z<A=~;A6|FD_4?GK;qLqW2`9|%75r{rmHAX37&rJS<nvVdj}(at4R&&n|ES{mwnch3
z)AgSdZJPaH`|78Dus}Z!#r&35!CTONGbIASr1+TQ#8cWbOT{A1aUhc>`$^!vWW!&b
zSSsJ_N(I`Po5 at 3d6=<uW at yOBDCX$1?*DnVzFLu(J1xo{<lmv$#Xa{B55`~=ld7Mbw
zC at a4eG)uruB_1<No4Gj`nl)w?B*C=^_O=$5aXBmfn6td!Vri;W4_w$dt|M(TH&{}?
zo1m#~=vcXF;O5?x{aQ3jRiAhwE5oupk}1RfHBgf-FxN5o$dt^2WBzL%Lo*DD6wfR;
zVMR)J|Me^_dCS(pEWOp&<|4)?aj>m}77E7C--4(t1{29W2A13w?Fk!sHOHUBk{<0F
zp1*9|43GBtQ2|788u{6Kso#lYQP12Qe09gb<?&nPxBP}X81vlvkman8_WAL7^F$qh
zw13Nac7&&A_snqfqzOy at nYqnkLY{^b;-?z+m!%fAzSly+**m}XD{9s~n#|IZf2n)-
zxA|JnlKew<<I-=;Q2`8bX@=&Q3zv`HEtU9kKd=H2TCk+qj_sRVqveF-q(d<>kcv*u
z*@*6d+B7TCcY}j>2bl77iz-&UoUF0}VXZ1=#GuOI%C`w_DGqQrilYOoQ_v^xSI&<$
zH!rZld4MIeYwaaYj&mUKhOXoNb0n05v1;b<gcQUlLyj`dT+ZeS8`76x_ak<*QvKc6
zF9AiU@$u#+fTIWKI~&Z!)-5B at uxkC&@Hrh!eTX**Yi9{dVEoQ((%)irrj7P4?g`p;
zYQN12?ec%oGLKG<Pb^o=mxrkfg2-*kKc<dI at rVM2|BA)8SVmj@=(z<DdKHkjRgQ6}
z9HtEh4HcaOK72{Zp?}Xwy>BM<ozI*|P<QV<I$V7#fDY41CvJU>83g|>#@l5)yS(|j
zs;R86ecEX9{*|}u`E{><{;2gl>rr)mW>lxyR&ha75DM=l4by#kaK(o6o&|tsTo^_I
z7BBZ4RSa>O0#e^&8KR4SxJz>YcCeKll{s-&p2R at lseIV{jEjH3DfLGiGWqCd4BZS$
zwlJ;j4gI|Vus0g&60c;4Ap3_Z%F-AhrPyjvimXb7)*=o at yv}qjqaS@!i}mxEV{J=j
z!&k~w(b$(&hsg=r)#^JW at QjY@TG#rCx(aRu*ot1$f44!7U=%&bK`6!QvWiQrz|OYy
z*~=H-ZEgHz3uo)-kTR3-Wm-6K&n9AJVI3EAXXa(DYeZ^1<+{vz_Rgow7~msg5$Y$(
zrw at RXBw^oe)f<(Vo5$ramMa-;ayw>UOQOeTlfyL{b$^&X=QIhW7d7bEa-GaR=&sT3
z_3Nz5+3Y~C{*!-vu=vsrk}5wDKbymM2;-ZI1jr2>eJ#uW$c)UH29|a<CoMBe1QB8;
zM{TY!-NHy)oP>(9 at zMEFbsW+z16am{A;$;etxQsJ79CT<VLd1dyFNRmiiHSLvRvbl
z at I3p0n(%0M-n~;e29wl_GNWFem$lhNhLQKuSyu<?o|CTe?jkznpUJW=NH=?@e{&2U
zTAST|^R*fv^bcyc`bWhWtXyJ+__Q?ZB`wc1ffe*zW^XLf+x15Y!-rA~D`l>=*=AB@
z?K2#nQJV7DMFmdOL)+V<pqW-T&GF{_#u9f90hoQ>uY0$Lo6VkiuAji_f7!GCr!|Hs
zSD6KYQ at N;c?E6JRR{lqROe(iuVk(@;5-(epBWk;!08=Uv08Mx66Qv_8yzXiLWpCP7
z*%sH3^YiV#LEl>;&lB2(T6S&t>)KbFt*wS??<^99wQCpd6;PY?GJQDUMDp=3DkDOp
zZvIw-(o?|+V3b8S at ODHA112=mW_zKRy(s0k at Qerf1*!6F8u1LPqwC;oB1dFY&P5nT
zl7}!cdIVE_Z|NAi6dn*!=D#!tX6%jjX;@9s6A=bsm|`U|t325W)@A8MRv0y)U{NG|
za=w31xRnyaau<-JR#;^fUnzzG293iA^pUQtBgBQda;e)g3z!VB%z;kQIh-8^kju;`
zwa9ZqrluZtlT_HVL3^W1^e3{x7Ivpodbm#L(ab3q3sKJEU9;?7eqJy$_^Hv3hi^*&
zPwG+w_Ok6*7(|vwB;OBZm?;94gO#t_M+eFYvYt!&MmqpyGMkO?Dl|U3OX!>ZXvKK4
zU(+E6fQT&jPfm<H_1PX at RgljsQpS_8a%yeb>3h`W;q0As&gEE6OO_`^$^Fc!zi%y>
z$4l&2vIdg6a=FM%tCi#l-x3*91<Skuk8nDtkL0(62c%2UF%+14Mf=bwV3~uEos=F9
z7Mg8Z;6T==p3`W%A;YjLK3pgWwvcpSoYt_=htDsTN14&i=$K|=2W{H4O2uXCsV#b%
z4i!5+Wo3uN!Prxm6Cn?q8A9n6X%$&leE|rm#Q~+x`l;jJrK!MS-*Sq~rzupl*x++k
z{he?tpf;t7Is&R!B=D>Ci|eRIp>ofvVXR)#wa6UIDO;~M%UCdCj)VX*YZIRSu%BQE
zUjcd=J;$<|u}UxTPnC(Vb_<%5R%YcbVty<vD06P^;3gRyZU{e)Jo_S3X73;qiZy<j
z?Wq?<N{F?KzCpY98c{P}g at 2@shjJEA9E&?WJ at IxnrEp6j-*!BraO{!AImBBNnnl<e
z3lVWaV_s;W-FA?OP|IwKm;tMbl9yvSLWo)A7!r$^5|$m4_L++q8{sqnWVp~&1-0I9
zq+dBa0sgflN1z;cG at Khw56GVo*+FN at pR5<?9mL##FjR4g5?_$N$L9xolqPy|xI|xd
zW3QGD<*(QhXE^47PS)>swmBj0&*!7b#r6hhnrIUjl_8<)71FfyLU<jswIt}W6|e#!
zyeWd(OB8Q~?}v6~j~&(_ty|~P*=Iq<kF(r-W^NzhCgbDY>G`csnPJY2JOvHQ<Tf{+
zZ9LxkRdW=@tWA-6eY4D)pEb`9ltR}KlxVf+x#s at q(ELGeRaB<FiI#hxHBa-`GH^ZD
z+4&{K$;)ghwW9a7BLe)0nUq+x5H&B!4-u~2Zt-y!bzYCiRGVf3ML~CAcHH``rIMkd
zVJ~0l49$t;_P5`h9-a*M*2fuT&kIb&wTrfro)FuDJJl?~WvTiDm_3%yeTFYeDaUb+
z_|B-Z&d+VKFe+4P6Zy at F17wyo>0^u17sDTqbN=iUO$6;%^%*wwmtTmRX6n*_lo1#Q
zts&r{o<eO-5GhZ_ at D-^LD{RWBNoxASBXR;k<o at c3r*^=wG^)lB>DQb?HL?UdELW0@
z$Y2bOL{PLfV1URvnA{rtW1N0~Gm!(>59t=%IM1 at SO_Q0UsLyr_WwwHbZ6clOIC3vd
zT^jqodpG_V7UnW#qaE{e5dixo-CW-J<!%_D?d$u$#AW<WC3T;5C2k-)tQLkXbtz<t
zTP|Gp=H<nkd$l at R1^96Cm6`V1E<##bl_{GvM5O``&aYgkf;^ZDIe`{(UiUC7>HrlN
z13UDk9LqnDZUjZa?es)A<aPH1Fo~Zs_r5cxBeks|H0 at b_o+Y9kIB^IQErV9LBYQ;`
zbeE)F7vL4OL{HeO at U`KP>85=*{LeevcOKN9K9%uu>de{U=ubDEG-<hOQ?;;1%A%6e
zukr?&8GnXxTFvjB<vS0=M1=ymnxP7sINcSsHPV{qFtAN@{fd3X&tJ*Bq8Ey63BW3I
zq8u{bwSWIFQSleO<lDvsI37vJ<_u9UF~|B3ld<!uFTW5&5gr&$6#UW!mDO5W>i>Vx
zbPh6X5of88A%6Z^WZ>9GijL^#=+Yw{9CkkH9I}xoRR0;Xf}WLu?OYCiYfhf$n-t~j
za`Kcn^RXk$68#$u1R8s=efQoCl#)*-tsL$FM~aKY?7|$_ZG2Q^Rnf!z7m(|zE68Cn
zT;wM4XWV at nRlng6kRub3locRlsghIboRuSar!=#1=)Q(wD)d!+0;2*AK(?p9%ZU5P
z+sb)HD|^EF%}6?xS&rZjs=)xgFHA}BZJM)m7usd%{_D41`q&hMTOn;fZR!5*f63Bc
z(>h^z_IPyI1c|Fl0HHUgk<j*Mjja at Sr@E|N4E{0zwGVM~!gOwHGxzZ8fcI$Rmu`hD
zyr;*0MoQU``WiF3j?2L8IUl8!v)sMTaGwwauipNi)_qMVW9G(ZjQc&z8@;bN<jV%l
ztIdd?xPIJ-Tf^+dUCq>QG~<T0f0-wyo)U4bvO%58&5(gShAz-v6~##mq5=Z+k!oJN
zF7OkyVJcN6oBmV&0OFB4O{e54sT;PNX%$Cg_TE(HvH-f-X=ZZg_rXuqFG=T$vh>DF
z!e!0D0z1~V8&Au-!M|ZRY|>+qBd&QVlvU^?hcqSBqi!hfL(g;)3o~Y^Vl=)b_YWPN
zSZ2LMbH1VTSM>#YQeH}<L~E)la)QaB%(Y~~wIE<$qXc1j at RFrX)ZNVk7*%ibT!{Ni
zOqEENN=(;WC37PJrSGXNxL#k8ox5nR6y>O6mW-GDqPEq&--c5a1<Uu%O;c~Kd at 9GI
zWiy6iVPZ}0hD{KUMJY#kktY)r*SDYoR^~{RBrDNzymVu{TBhV{N<F0u;r?od0qB%o
z$*PpFGdJ8EtqV+R*4bu(4hfJiq8y+;yI3LGPkR18a_-gwT9}NRz)pU)9wu?LYS?k|
z3d!I5ngD(nZN#*st^1KuQf3@=HBf6$6 at DYQ>Q+YS-eOPW3?ipwOcY8a6!W&z&uRG5
zWCA+9aR^c~;HTqwe${8mHrv{p=KGXS`7L2_KHW0YwOswT#bWa)4GmLKe+vlghRPvJ
z$FXsJ{$YNidb#k8;1kOOdMzpJADyD5RGF%7bw?cC=dR2DJV#T?;V90=A)kEH)S{yk
zY=HaVe6%A{FfG1e4%+Apy*oU$H0>%NgIxfiP at 2NFhS^cd<;{2q9k4*_O5sJ&Mz(ma
zWu;NXi at He4H5}<dGdZy0`N=N?B8P)J%U8j<h3$V9)2}377vDt}Rhvcyu8imEJ(a2n
zbQ~hLU%5zNnGxqIEVi+cybY##l|-0}Xq-KznJBuF&zCf8*lgGK#S3Cw%2cWm-|7+?
zCw(qJ7-h9~3g2RRDq4hZ%5Xr)Cnre+Ds^fVR-OV?{F_iWIE1*=j`6-;ml{lQt{lv6
z&E^ZeSZ{Gdj}dfmeus`=MZ)@L==?)og(e*GvyK^_pUSx#2e%5iM(dJ=emI at krYrQK
zWPcn>jltV+?<ncUAJiBLt at m$;#eIeVyb-72mI#OuaTPkGzFFN_a2GLi7-9lSfUt*)
zHi8q<j_(oI)J^#eZ>)Q_CZ$fx^!7M%yeBrC!x53sFpdNAMiX<17fOPb1zN%vDVKzj
ztQsz0Fr2QGavwnE46mvilZ at qqV2d3(uh}Yh03||Jm}Z~zD&I6_V)7d_st#7Hy=`*e
z`G_T?(h}xAF%x#4T~WfR7DcC9qj6V*q4`^dLm*GPAwy2go(oixjbY;kTkKg-X1CD}
zLdTsoD}=)yjKZNCnNo7*<(Sy6>YJ}{saHRDH@@PTnr^}II$J}iYOA%=C(W5<rKVMh
zUN7N&J{xp!DEJ*67zC3cDf>8;D{IrJpVQ2YmqmkeCxu4Y5F0J*7cD<DuWJa(7I|1S
zMNAgG#I!v*#nqSGb{~3It)`zV6auFL&YQ&3BHb!w$maLfOoC#=xP&kU(FQ at H54&n@
zahQZLn-H$%#ub+=R9vsYC15xK+39NIM^F?vxPbRt&2TNOpg#)Jm)*O7Tl#QeHlpZ}
zmq$j$Dv2&;RC5Ijs#tj~t7*f-&W(4doy&q>RpTvnu1fyQn+5y3 at e#}Xu at I$9q;-+G
z^!fmvu)?Pl8s{m0x3KY12Pn0V@)R^m?=9^KCe)2&h$gqiwJiF^d&R%#Nr+4E28&0z
zNTlO{!GWUIaU<fRk6*rdQJQcxxLL-7kc<G-wvqfx1p=GVKuSNr5Nxa(CzN-+)5qrb
zFW(Nf)*e0E7;q-c)*DV8DGfgcrNy?j+chRhxDg$EW?3<mM|A5MyTnvj0(pv;MA&4l
zwmY+)8PVZUOc1^8i+9(SmQc4nYwhF at q>yIf>g=7%Hu{IB8*i1fW~YOk>?rH35R7k?
zPmBNM7zks0aa0JdEA1o#pY#o>FT>+qvpA6|1~ciETJuq)$x0E(6g+{(w%))%hWHEu
zsQdKb+0*CQkHv*bp?3cSBJMUDt+FLh)5juIoe05FY9QJJ1&SXorsEG6^Rt=X{<!({
z?T_Cry;^@#$fvs0xI%jA`Hi=Y7LSaVGXF>NnWQ7L_07W>NlY~HvhJ0V+jHVrukhoV
za=#u;anxoG61cI-Bw+ at Mx+Gr76ht>AAEs-Dg=}1iq+-HE!?WFkofDdD*rDv&HNBlf
z!AnuR#e_%F%|5O$<_X2IoQ0$oRi<dj(UVIk{JMAss|D3x^MEqyWvKc2zVv(#g<?Ln
z7f_v46OViIJcV?cjxa-O7f=)?6u;7*QYOUER8g&xmE<Dp6&V%QD!|?ao^9_F4_1!f
zkKDgvLdHBcBARB`l!zw<%8nLvFOLkZV`xC1^`mAiZ^nHzt><0K%Xzf`Rvb6Ock&Ve
zX1ZpP)d<H%6(XY69X?zTIoOXyePJf4v1>{TFaPJlQXocV2o?6u!%{D7aHg80l_lbI
zDhYw5t&Htn*aEpvt}Lnz5m at A~$gv!;L8S%>urrxjqaN=~hOUqcT=5wDi5w|Gyc|tP
zBg4AzveTg&yP9)IP7SS?WM6j9l($r|Dy>t`=5U7L#0x7*k&X5NPk3Wt(9f0V1;)eQ
z6mhRVpW`SG!8*Cw-n&_Ve<x<t8s1P4gGE*8>WTuHJN`AYs3`xE;uF#gv{+rU<rR00
zZG;$0*aHP{GsR5^R at 0QBqXJtf0P4oPVEr_AA;YQ=c4$eXV^1{{JPpLTQkyqu*+w$f
zGdf#{;}eAefhI73+;+#lR))3-(Jm@~yR-V@<<`c-Z&!9!EkU#xA#!&N<+IVE-K0`4
zw)f<4Y&?+qR-6}=*5~R86073QA5JFkUFcvN<H1=6{eDkJ&u?_XO&qwIZXL3n&Kh3w
z0py?rb`PSbi2&jVeZ+iq>UH*ih<o$Kx{539_wVLYoHitq)0SinHeiBj*%qLVr?x~0
zp>uVQq+?k at gIfdO+<U+K{XNfGRlD}lKC(>becx^Z_C9;puxiay0mGAnw<KQ6zoN5e
zS|_R;z0(PvpLRgB#?RFF(R4M%EM4z8UF*33=Y`r86j{|io27MbDNDS|eK8(dzC;+W
z*Z2ljuQ`C9QfhjMICZ at jx}ac%|1ICeE%LbYFsTiya1b!04cociNAvFR;Pl4MBWbvt
z)VoWas2b(C!nI%)YLPVyB-_eV*w$tWK)NS@<7xsFZutGs-~Hl~spk5<hc_7 at d`7*=
z<Izn%#`=*>)B8G~4Sv4=kZ6la7)77r)@dq+{{gS)g}_0>8M;|~T`ws*9v^^P0Sfu=
z>p7<Os*yw(9*v{7&eh&&w13p88>yf^3{CFe-9PKw7hBu^p4xR6B`Vr at e6jy9`l-pg
zX(uHK46Q-YslVkr6u2_W*2b$pZ at hZ{6wwneav>b3y>?WFeDq>#<Nd?_d2+TZz30mC
z5)Npp&Z`IEJG0Ig0*5!TyEi=71?zF~q(zcUyXzNu)4k7L<e~lbt&I{fl56LEvX1Gr
zeiP_)^q<bk;>fyod>dx(2mO`7%@VF1nFOq7Kde7_w)y=1!*>R4NL1WXx_hcWK7UIB
zi07uCVqWN^H(>o!R}eRkpyXlOLAH!Sml4&X_nk~Kj5NBHozihLSffoY=UmNVf$CZH
z5;cC4p}ISe`%iDM1}r?gmmOLHnZ<Qu5pZ<44YwuDS^-G}%4hs`a`bldxVEM5Kb^G#
zg{@>h`A&vZObIq!P?1(NnTTc;TgYUS0WOkI&Sn0 at iA-njCYx8l?&Y{^d$wI3%wVzM
zc_7G#smtJmmsy`uA255RbJ$$~;fFGW8dkK%%iWsKRava`jI_07{#dAK{+Y1!>bSf^
zGgrBwFY?(eIEH7*EgQ~gSD{YP5g&@#qM=xu_{UOM#{V$&Z)Ne*>zq^G%(Rfxyw?jk
zJ`-CFcb{ITiz(@+9e6Y0R~}F3 at 5edMqccud=X6<lC-XJh%gNc4)b2f<1>x_z`UH*=
z&sLZ8Ygjr|?Bb_j^s}fX_iiU>Pjk8QLx-T(<#e>4O{+6QzX?Vv at qL&oK_Q+dxg$Sw
z6hq-G3+&>u>e4IV65(yd`_EgplA#dpCOh1xVQeLWqNb3(zc~6168c?qZ!3brqM8h8
zBA2M`fwxjk%>sYti#8jhTQOSDVWNP(G);F<g$BdcvP!!+>hb{?Rh*Pz<ZbAcUlN@|
z;|?;3LZM#aUUx#pgFb`*Z~f=Xo!7?~ZS5?NR27g<>p{ky-nzxX4sYM-t!qO3x2bk_
z6?`HGvu1IhWHvI5KRmELda1f(b2J%c_)st2Eku>+Zx~Ex?@W|Ookg^tWc!O9qa$~e
zVycj0W`D+*h=CR>6O2k;1*>iRxm|%5&ubik;Y9dzf?He?eJ%gb!`bY*N_J<%LyqP(
z6%-el7hILkUJ*QB6kgo>m^Sg0Gxf<Sj(Bq19q`*<n?GN4f1bqisbk007ow#(9odT<
z{BJ)aB$rDhqH{gLv?9LFZ1i^?t)S=3_MibPeGY!YGywjXxwh=WQ<qMcilbfdsRy7W
zoa#?#94|Gr#cu2Hagw$e%<^7Mj!fflnzxr{_ at P`EFk`ZE8XyO}h~Cw8b-{pwlYy9=
zS_zxxwo0JQj814-zSx&%K+EeQ^iUzy>Xa-;GtV~@yeG4GJ-`rWphZq8J^FF31CSqs
zfKJiX0jG_|<#yE1z-$_p>{Y~zEXQkr5Fj_z`XPVtXdJ2VxsyT{dAC#X at -#t2z28zl
z8~W|I6}}U%xzPFH`7}8lKHNLPd+&RIqV at 8R+yzq`&dI+?4XuCve|3it8QT|Bc)B~j
zp0+JBg&rtr-7%?YM0Cq85VRagptxj0xmC>XTn8QJ0VYtBT>^g9>S_U}JK7E-e-K(k
zluO-t9TN`7Yvjla#>i4$M|U2%petTDyjqXzXS$=<{;i6zf6Oblcr8+rU>mr<)+Mk+
zyS^R+khwlps?mbCH>)#oH_VRj7V=<^OLZ%{tSIW%$An`3>*SUhRKMx436c)S%{X*L
zI~*QnVL>sS8xOQMJj&7^7~~I2?^(_M;lbe`X#B&C0OL1z-iR3k;ctnC?N9ayI38tT
zH8{)8>&Y~rh%akwm9IB(eaT{=2h1*(<a at phxuaRXmIM-$cb~HNe*RWDW?t?TLimSE
zTSzzByWihQChuDocI;;N*e^1uo<E-(N9NyiApH^d$XA&(Lq5*@l`>@D-R&EVX?t|S
zO=7_7DYmI|A24gI1|l=PygN4<>c8o=uEbBe%rlsE at FjS$O1}TI{1oFY#(1NdCmH*-
z)Fjc%<87dA!plRFX1_Nt?u+*<ZhS<KF%L0ytp0(nM|knxN9KNY2U);oq>p;I%_ym0
z!;}ds1}Id6BgU2`CuZ)i9dG>tcD#Gth()1avJOwU-7uv#o$oGZ-TMbqiCIeO<a1R2
z>t+czTzNbFd^2b?Mpit6+Y$D^$E$tK$b^&~f*`06?~jNL at WHiX7rpeFaes?&EyD&L
z{`>3G)0<$=4vpVbJyUQScX4j1`(ZX)`tM7!sJ)LV1k?|~RfNy)MM96W6TQ+rT=Z{)
zBp5%1&Gk|yMo<pXQ7mZ7e{4qx)qm#U#0W~EgKU2CD%3<)e`!bgzX#UQwb-9&?{(GV
zon6p9L!}$^`27(-V(T|-tI&5)>4wMpagLvchLkAM|EYy|<H*$Aidm~`MX{KS)jQqY
zJ4lNN;-!nnhqNs7J*K$+Rn32Twj_1`SKYWnN|Jv5Ejaw=GMaouSnOv%6W{9Mnz8zk
zoah8;iQ(c_d550A3#+G%1*%j}>Uyi=(Ur>+V-x3#=jc;!_D?Ssb-~bB9kjUj>g~~2
zWNChRcV&rxmOo!w{&eN;${H1~Tlu!#S6AohJ6y_2Wt-ViiN08jQ&Qm2L<u^-!)fU|
zYB(-yfMvtH>IYY6Y5j2|qE+bsreeX-{l(?AtJ`UCxNPG(9HeIV_&P-N?_gu9=EHF6
zcS!1?xpH{KRcGOP`F+}~?yRA17jeD9){FI*1-X=C(!|HeAy**M!E%Y<F+PKL>Vj;l
zzj7Y(6RE{SS%Xt((~}V;PDK6F!$E3cc&T-9>XngXn`9OhzT=Ye6(M^P!1c2dS=7<a
z$iqTeXWm+MWi+MbMEXF<)Gm=bK8nzKx`pZnl|D~`ZXAAv*!uz*Pab_!&V at hf2wD>q
zLH%Uo&l^u)yxe%THG1*<=@0)ZzS<yIi&zY>6EzaOA%C2UheHfajBM5<eMHMVO4(V=
zL$)EQ&<fnx`rV)GULH6lq~nT<qgPxpMIBan9!V-B;}e-uVI3yh)lS<tBYC+nz?LaG
zuN?PdZi`MfwZBV%<VpQ&az at wb%yJ?KlCj{)Fhui5IUN6qz^yPU(!{`RL293b-NIwn
zIY_5`b4l$F*eF%718(F)p&{!hrJsn%$TR8rl63_3b4EBj$hNMc4t6e8gwngcQVmAM
ziw2uc9QgqvQ~SqqcNVFS<b)+}F4>BcUnhH)PT#sf%6W%6ODyb<{sr?IKMaYd=a+kX
zM4FTh%mrD84__ASA-`OisLDsn#E*hT8tJ2d$#CLmW$|;aB-+134A7d)Ngh(c56{nO
zsKBvfSq}%V+M~bViZT2TN0oK*qmH~e{rU>jW$SV at AI>iL1XbC{RVtjgXr1c~Z$j98
znj`)Jx2ap#0n0B~k5DOY{Jko!3Vo3P8J@<vG7zAiWPWO>oA34p$4AU*Ne!?xB{7Y}
z93ZH3a+t+`B0;^5cR_<fiW2Y*!6#XY``_zCy4mB0X3bsVZv2F6r;b-&ODCYlSFF+r
z5)v#eOeGLVZc$2@{j1{fac`awu#O1=IJr`=nnmzoi^_bf*}lyq&UT=tUz$Gt(ep!6
zVdBDgk=i(O7Qzy{eu={QA}QXx#IOai>3XZ|KOJ7^%d*I776u(Vd_#uebx;)fXlZqw
z*Fo{?Qi)gOPkk`Fu=OsIRK6 at 3A8}{m`xjT&^<MbBqLB(+g5?=bOT8ZTz)!;qeg at YS
z8{wSeeDmA^5-l63mJ<Snt62U}9KN~;O<z>Rt_v>K^!xYte)KIHsPHZaaOH>Lebw*E
zl2d5sCY!y%eZvE;e6zZjPV6c<qfFXDIxJZ71DuMZYZ0fH*t{(@NY^!9hnRKln~?XD
zh>_K8mbs^&zYjXKxp$|PMhuqljXDUQ9Owf1NRA~p at y@8uSeL7iXn~+`q=9X(*zJD_
zNFA4zoGe@?a>|@Nyd&n0q(8>t=bC|1^$A;d at I$MOJmdOiQb8RK25mpoEH=v(0r)rx
zB9m=X&Y*oZ4FCE`(|=5hIj1csh5s_B?J7b1oXC?)jC9XCMPRC7mwL)aP+^A5-$t9Q
zlazJ!9{v*+24du;@9m0o5MAUP%SQ%EoXXS9KW&r(ng-vxRGkX;?)}m4 at ZtZi9w4+4
z*Jz`YsCH3xu|Nypxu`_C1;XpNljj_uWT_b3n at fp)MTuuh%?*Hk1#Z2E{{*;^3Uyo#
zamM*QM at _u4j^4xJb*%3r*|1 at hd|S}+y*TEa3sjs6eIKWdOKijwmQt{v)sn^b(I5Yn
z_>8YW=IYgF>)V?zo^Op779M`|$2TiZlbNbLyY+Cpf8XaHm)@*soKt*R3JFyo#?*%#
z at fo*g5fVA$Zg(3v;-j6z?%J=(3cKLz at 08y40iU^ykLF}*AcugBh9cefe_UeKto_aE
z&{lKB%VPEIqTj6Qo3}&?)V3os75Xp<i at qeL;~C1jNckK>YV91Jygs$pA+XrzC4Ym|
zQxKm6M=HCSu^Ogj$!oDFalWP7>*Ekvw;n!jvq(K!c6-on#d=h{2gSKs0UUUndyrKm
z*8{o(&bB6nslOwA8n%omHNxdqx{Y5B`Fhg+p<}Ws$qhBR{aEzdeQRD=Ka-|jYmWDj
zT4RVl?kO&ENo*V-RcTkhHJfd=ww0Ze!|{^&K(6eRPiro60uU0;$deu~Y|&3j7lH at L
z`zWp57Y-yyRm9VjJpx#VcacKf$64z-1wf4?K-c94yxgB5=Vfg1#K at At8}XAJPUXWW
zsmN3eKxj<q7hqNtFGiA2hdgi%W<dKu(l6m9ce<Z;7DfD7JmCd~?X5H|DT;OR;r&1L
z%^Z<_ZX`OQ5~gH#g-6h)v*bv)1eVY`)dE5Iq>KrxpGZq>#*E(%u&z#<Dip~aRW~CY
z?7=FS`!%19vnvKH5_3>jYS_vF>AGg1{WWvWL1l;J0mSmd16{#P0xmiD_QM$h82G<G
zy7(eXIL;R6B6A_<xGs!d(l2~@wjjX=#w<Xz{-HnXPFY^uft&H;{AL<&V`CQ-|LDfC
zhIZS=-*zhZQ7jxzEGCv+SVX$_wSJs6$M43vky}M5OK-R}d`GU5rTx>rbNzbj;ZtEs
zpLHanO76Zs+|!aerw?r9n2 at V)BJsftv(jYWE5ajl at XABKfv@=D1R at HD4=;9)b}AAV
zScPk7{%{e(#A8FTzt|*!>4V7VnXYr3+bW!XE)XBY0#mFlP at l5xs>V{F<jqC;@ME`R
z$y8!BM9u6Z<z(M3Xp;qz4IOd&13o31S;h50<FH1B(COdOA0a?i&(!3mFvK3H!Y<~b
zx*NMprRGsC4lVSKbxt#Tm2=y at 9}4=aAYGsrk(E3VCW`g6Q^*C<_QXxrz2)R!Q(#>V
z&2Yt-_9$YaRfJqbodA%53QG~+lq9IK2~UaGeC}VX>2HL|**Q at i=T0lilf6#3CTCP<
z)*=gQXJZPr#?JUtv#VLK8s6d$$$R(SoGN9^C0U&}@(t3~zC3j>fZq`dFKrfNan=&j
zsqHL|wmA7HTN8#!qN^%bZs#Ucm2!9Y@{meuu?qEVodQj9ReGm_96JS8g4e;(=`IvE
zHMg-*VLI9L3%e?XoPK3-^v&R>bq+D?5;rh~5a}pGCaU(ucll8f4lrIWP<m+cH%YCt
z$pLl5U3Qd$gtHfi%|>DcqSNv-)LSLvf}cg`m)Q!z0*t!!X=ucqmd!91;J;nRWt7pp
zD*@+7<T;qk-7eOnH)toFer~!>R-J`hDs7|PWU1T~Dsl1F)jia8X4W9ZRyj($ilx85
zog8qdMyAHqj|#F5aCkwe>?pisv2$(rbvmi+gH}RX(U&;egkhZmDuL$U@|U!<QOT^@
zrw9kY&q{sf2+>8Z4{vKF2GE``6jh|O=ByK>*fw~<F#-1)V%{F+Yr(H*g+5vE5vY?*
z at +`rqsMpFu?R*AxsS6b#^%RP_BI1%H3KSIZ>R0eJ$f9791BJj*l?UD4Qfp8-YdV&r
zHJ9)ig+w>WkX at lG6QVUrD*r_V&~s^E1!-N(BU-OBRNA_N8_zCrDHxNr>W$~$JzLt^
z*k1VBqG!tLAT?0EY?w=)av6~^Q?%YN%9vl(Y3Igscjk8a-`?CE4E6cvl-Z89zuka2
zZ*6Tp|7P^)>H70OZCQkZLHx5j*&7Q@;Q(sxEC6WSGE*LZoq*IVIq>29GC0o8#xM`n
zuUoSe3Ll=~E)Q?I*XO^NeAU$Z^E+vAP01|Cd-3K9xH2oW6sH%>6fZbkRV3ci=YfT0
z)YsVu+4x|?(5Sd!)=pNO!Ps%S78j+fT5>`F?gmx#^hS&n=;TioJ4M)Cr<X1*0&oc!
z<R=u^lrJZA-}?^mcV{`eHTQ-0#g4xG%U}L7cMIb+Qe$;a;AA1SZhX;w;G(EsASiHJ
zsV6CD>(>IwCcf9ekWw`v0*mlTw&#vj#V_DiM4V9RvX8LPP51Ay-plia@%i52p%yKm
zvJ_no_KWaWPCoB5snOi8P9Ol(5xHIL)*QnQj~psRr1Z=({L^c&O400;<Djao>zEiF
zC+<v&3ST2js62%cr_QRTE2J^m`htqWPpuu)YO&GW(IF|3DyCSP8gQv-d-gvRb+VdA
zIVc>)kxi(-H0BJwL<{8?_!Q2i2o;pZ4pS2~cJ!m9a;=eLKrbHCCg>s$TiQ&8M9HWA
zX+ksAb1no8YM2_^=a$XoqS}7*0&%Tin#B_CYB9-hNi;Ycd(ba+Mg<vzan?CH#;;qx
zs5=_{q!cJVL%-iA2dHy?ydYP;#j+^qi(K;{M~6%VwHbO?5Kg9nYcJlLND3cjr%$0J
zCq|Qzf{ko!E~IGBu)4yQJ0l7>wYR)|17UNRGKj&WT;?tQ4T5ISoK#Ns7o3H`(Q(9O
z)u+P$l`gN-t1t>k#tmv=eZ{&ZM;iESTMe~N9la1l89*$I7wolw$|9lkVyw+c*WimP
zeZ^2v0eI!;QXbx{=Mi)wxw0;*`$hoA3HCE$6l(wrQ=wnn=4DX%e2W_()+j~fUKjB6
zI_1haCy(B5rh9U|V$Q!6ovhCPpx42zG8Z}Rek at 1wx1AsJyT9%1{8&HzTL%K(9v&yU
z)`8(EBFd1~<;!BUkFJzWRV8yf*oFnofP7t-1_H3 at zXGx$An|K><JS4Q6R)sa5^VH_
zk|F9~IZEiVRWPcCkGdI7TnGzo7MFa^Wp-0C-I~CAK|JA{?!PGKrj?29FdH`^3T;zl
zPwT)O>cG;|oyc$6x3REpU{1&M^4a=MJ(HdH9@;#44}1knb!Nl#B1k==m6~!sT#PZ}
zB?gdUx}ze#ogIi16Ob~*0feY)y}Hz)5ps1?HgJc)qxoN!&?LjMxZQ#4W@!AIk+-n)
zYN3i{heQKaJEf{={x^J at Jwz;Md>sN-_`MeqE9aYmfOVw*?TFZd{hx|{|0B%nK7Jq4
zRjw)1NG*b@`daC(Qu}Oz8KTSqf|(}Bj)M*%;oMFS{aO|!cDFc+R<8Bz#nQZbY@>$b
zrI}H=q<EirR%LxQ3WZpDrH&TqzB4$<bDW$-+K1?^91&4j^uuOm%nzJkuV)PRVT_4{
zQ2f1BL|6G#mp;$(%6j04J(t@|cJog<|ABRV=&83nXV#%h;i~)nA0K*3yv_t1#`OP_
zr#=AJy8r9Xds at -0s1f;>@ZL)DMS~gMzNB0X_Mw{6u)O#{=|3>_Ka1g(p{uZuqLF at j
z<W(Vm<+C2MEwO0g%3JEc#NA$KIPYvKNU);cpBI--0eq`EhF8)|kXKWC&Nc~^`P9Q~
z6zFw~gu?B at tq;Et$K$9yT=1o17?L^-N<)?EiOqxMhn3+fg^s@&%?dk_eQV33biixo
zO>SO-k+V(S?Tu$IpRVJJ(kdf4G^|%V5>wvv-sIt+7pH#z*gNtFZU69+NwD40I_}I&
zk6Tz?W07|79IeZ)127Uz_K4Lq2Zto<o3MKt{&CrejJC%5KO!^hQihv$iM{wW>xd|M
zaqNyqpAZ|{?g^5eAIs61JSC9}>Bn^u*%jYci8a74)~F3p)~hSAj+BrTh)3vA2$z4!
z_*Tt=v=@Pt2$dek`5HdG9W--o({qxz9fN0&__BizCg|8o>;V@%l4xi4nU%Hf)U__2
zzcC30N1mDwuat|&E7AN9C)+6l)mb}ZbiJd4ZgX85eHxrm?t-bN1mxy|oGBv}`Tof+
z7dB==>cZ%8$x#q$$yNaDt$Q(YO49O1qbRR+PCiJbI`1ks;EW{f6>xI$4b!G`()Dr8
zyt39om9vFhfAL|0BSX~SAvJ8{>K&L&*@ahU8lCR`UDxAS&$7Rt-3F^oKZof)_gtsi
z1~fGX{cH?xa+pt`$Y?~kP3s3Who&DOcVygE at jI_4)W+_33AY|zc_i+gH?V1|h2`Zb
z98ai-hbO~ab3d?TvU)B=G{FMYJ6(>OCR^)6*EBvMhT-_Q(|p<>LYDwx5(O)2Ccfx5
z-7*}ib1^DTaGnA4+6A(Wis88e at ea6xV(A|fXXhU+!Si;MShhsWKyoKHnYwEQx6bDi
zo%n+CBMJ?5i%JhfAaAMvYvRIFrx%Niq<}e*#FF(~#nBz(i|E>j6I at K4wg^}yym4D)
zFUgHd`Fw at th@WO&ayc{8jjvVPrv_bH{%@CICd}w3w(&AsrQ_dJ&enUrIpP|<sJSIK
z^-nl7)sd|}de6tl#IFuTzvSO-y#y`&U_npBNtC!^vxGXh*%^5(JQIUhLB`)zsY&v*
zI_mZdLL-7EEg}q~TMu7sF}ONazh at 3xTgvpa(N*)C-t!fBC#G?$Equ*q at A<MsL3MT!
z5A8lED1%Ox+Dhh<`N{*Fs{e<QZLFjmo{*XFmKwr6MHZzwKq6gc&Rpcpma7=7Dsos3
z)xD-WUlGumurq+e5$t%g=G;hr=W5t&4_DdL$K^41zK%BMj_WnI^7^g)n<qV{Z;Poy
z5kopDpS#_FRU23AkOr3hZp|x{9wN<1g;ZIg$FjS9F__X(=tYFS!L?G}xbl1aC*^Sf
z2amLO_6{wJ9tkDR=Oh-ElV~irs*+rAP;ZhK`Bj|zo3)bNSv_3#Kr4uFVs9qZgg8dk
za5)7_$ZFxMIcwg5+<7;>nr&*_5SI!yN+xw6R8hi<N8kM8 at a;8M5ycBpdf?$|a;OHC
zzV!9_(=9Tx`4eXxi6%JcgVhw3(EW6*MQfo&@aXG*pl&V3cIXxnmpHS581KqlFJ8ay
z&&2Tr$lEMbYqG5v`1+C{Ef-3V%LnWy5tkX0y`oqVZe|G93Ey%C5(8H=H#R3|oe=~^
zL5w+AyRVps`NZ|gYl|zC)6KURSsDNQ_|@ZOjq>X88a~of`r5JrpPmQf($-A}uQ`@-
z=T*&Ux_o<ZM)#MgMU0>}*Ot~fDk(LjvNB96JYHU0p^k{&J<4P&q+z;1GsvEKecs3T
zV#^gXrMzdzDN7!NTMQ-*UQyy$py89#%<I6j9_(F|G1bfy$ta~VIWomC226*ag~WRu
zp=L|T>8qf%c8`dRV3~2;0^MvfYH=o_*D9xwfTc6i<ZZ`A?ojP)!(n_L`75OuU%-&M
zLuq#c+Dj-`miwlf8boS2-0JYL at pyT0wa4Kaj$~dy at zCi{hZC-&x at 2~O8+#V1o|lUS
z)n-f`v at 6m`atd*mNfH6cN?Jso*NXaLQ-|av6F3x6OvdE<az0^0KJb#R+;gezM+rHv
zaoz4T0y#nlhaH;)D_4t~(o{p&M}bt3bzlnfSwrS8`tw&bQ&_%#e}xVTJb_Mi=dh0a
zc2&PUR!tqvlds*!$xk5mD`i<*!?&PifvdlqYR|-ZTnJj#01u{{?8gUqDZq7dTuK&7
z{T|1~FT_TndX)-Uqy2S=M%RW9o5#zGYh+gRsSsT~!P4APTA9aYW1?(<s}%L3CT(sO
zt>=zUsutSSb98fG0N}>85AyEDZ83%riXcXh at E+5p3-S03l&(E`eu;Cm$!|6Re7y at q
z(euPXVxH%_6R9q~6HnfoxGu*c3m}!cW|&~g&fc8g5(Piomf0E32chxV>BT7~*e$p5
z&UxvD0VdN_2umQ+XpMLuO|dTDlYl{Yph&1P2Wjmqj740fGP-#2D at b(64f6K*aLt-u
z0N<3Z9^Hc^UVR?l>WYeSq*`U1+qp6cQ%S=QN9mQj_fdBGD1B3mPIo}dR_+aB8jqJ3
z at BJ^qG;l(vn{vf~f~=NcI!;XJp<QY-oWWHDzwy~K at _7Ge-3A0J8)kv;V?!zbL$?w}
zz$~t=sFIw>3{+fi5FNBcWFI at o+>plR*80mHae!Aa(+6-5GMVkoL^F%xz at q769N9K1
z*ct47YHPl|U=ak5-1kQQ!w_ at nrBcUol*h}9_t7_lr)!c%kU-ckzu$VG6<JA!7gmlz
zZ;hT3U>=Uc?AThZ7^S|IRCU_Y;oG;Tqpd at D1$c0X!Jri3u^L$Yl$Yepn^=<9TN4N5
z!GK|)v=@`Ofz{rA0EzmF9gY}Y;Y&qKujq|WUObl9)Y_o;OS3%g1_^6&G{1t8%I#sD
zFv$BeX!>;6c=&>Ev|4I-t_EJB^TpxGg(^LIuLtu`iz2`&)=>vIA;0jz>nT53zVwFH
zu3#t9f%Eeraq;Q!k at 9$X at zc?_<QRo1 at y%Zk-%7eaLZt`f`<KW5Yb2ca7^~)W>tfZ2
zLN`u*L~K0X`g38alV2rKzmk-6x{i^RQ-^aJ-p-%8f*SNIE4RLe$G+D(K??uDKPD%V
zjv0dpnDBh}9})*-{h#MAo<&l-IJgSFNsWg>ut8P2*<CavKeF6)qxtVn4u4(xo>yqW
zb7!<Qe$AB$Oz9DU4_k?#1&(tnEO6JKMhfe(F4D23&Ae;BKiNHh`^CdA<G*W*cahD~
z5dO+>EeXae9<b<k^V;3Qf^@P4Sv6s(=!52m-G8k3c~1xa9+)9X_pPJ#6mk?-F;j$<
zZt;=6R?gL`Ut>ggDaDWoZN8yz8MT+$e at Iu=gz^g3ghA7 at XHbkn-;nSEvp7*XaZ~R<
zXJRZSRwPO+BNfY}wTp%@`Lkh6=JE34XTh9=XGmilmTc87XUk%QDSuVXV;tQkF at i{q
z#)=N1k_Mel+j{TrM6lz-C|{Zu0vI!7cXHdXmEf3!q_3i^2=gq#C#f67t4fv(6 at ztz
zy4r-%A#R`!gE+JnL4C5IRQ;bqgcxS$;`r?jLj{t|XH|j^QD0;augp1>YRbq<e4}Bf
zai`uE?a5x(>sGM%$-{&q`X--I;UqzGUZ53hi(}2g(paV~If2FrS+WWYQ?;+5K6sZX
zp}knjQ?ek+Zm~7$QZmW}HSB6`J@$HX at CT-h<Dd9(q|Ggv2Lhvhc;J8=4^+E?g7*f-
zmZ;Y=V-cqEDK6T+dSEcx0m at jE-Y8sXqjxd>^WMqO2UG{k|4?9Ma>q*d-hfx5`*-hN
zH-IbEublJf%l<b)tv<5!_Y5DrpmkiHT>MsZhZ|}C`7lB8czN-2YyPk^vk=PGRJ5Lk
zzR_OKeYln6Gx{6qZ$W`*9wUCQsDZp{(P2)kE#8531(KL|rn~_LkE2v;VH-Uj6yZr~
z>V>kxi{KiyDN(Xn6eMs>(ddSm!E`LNR0i>Cvi~jW#HTRl?oO_8^Vqncm5PUz3wHT)
z7{sq$J`+AM_=5TS+oR=$)y2cr&+adty`?`|+#jHCzsl?o`z(U_6|E8Kbn3nNC3yCe
zJcDsxEjVdcfb at C4qdrY8Zj+NK)^@<5j1Nu)67ih*mAiMB7x-u8vj<RD(Tw}u2D7HJ
z7{s=YWf6b&`F#{UhJheFr`o3LnB&L<V^1okU@@AV-l96O_`$?)a!2w5==yV<oUt!{
zqUBX)gLa`F<zyYakx|^+p$&V_Slv3EP464s7b&mB8S18wOyy at w3i0pox5d4KLv3qi
z?ekSUA#vDj?a}4IUs(e&yqWvyA6I&7iVz)Kkzm>^=KL3WPl5<yN*!{19>}4b%Uch{
zsnJs#=*(9v`kdfTE>75|R|~$RB<0A*SkkS}Y29yv&l*){Fd6;V*?+m&mHd+>G6^3}
z+C(?MVgM}P9p(voj<@{ojk!YStZa$z^2D+OP9O!6z(sK-F3P!>9&TY!HJ7SZ0w4@|
z`RgOMO*`x{@@XNx4!Q{eX=!N}LWtg1r at NzPSudM1nk9aJ_zx-pC15TgUETU<iWGN&
z$UU<OAHFLj+z01Qa3>!=OzCBbfd)!E=3?XIXB>dvLB9*@FvW|}t;Ih)+uGb%{KGBO
zM>zw>M-oft=SK^qC!kNAES$f&yby+QCJYjt8ql7rsie20afBh9*q~abi(hb+4Z~}+
zwe at sJky@S=5#c$9OiV=j5$ft_4pDZpV>KKxE4iX}PslX)A;?6+KqoPZXhu*y4%t1L
zdsU`SW{bo=RGV~3ui#Kz!z)_-WgHuZpsxD^hI%WIw_S`+q*)NTC+jq#vkhI at PxJd!
zPfZP#VkdCG<AIQ8I<HRQn4eoz-K7HJk^vS`@O=7FfTUGZnM41W>%Q_>;W#zvcKb?C
zQTHkl1%+ffW#N4E>8GFCQqZU8q=0%fYcNVo(9`$}>asDi0b5=7qH1wR(*jnNZ5|D~
zJG%WbT4~A|m$Y`B1ao-5-!uQff#^uGpXXaLXoyAr=TjJ$oOw36Az3V_>?}Blh%@31
z%MLg!uYib#I1Sfvw`K%@3zO0EyY8m%3x{R<GaN|DI>0hL8gmTUStPf2RX{p%!h(e^
z152-#CQGk$9jN+I?KG#Q-oh|*4+FMkn5=n0jC^qGh@}4H8I|NYG>F%}&|ugnbI*eb
z{f47(4|fqPC|_+t&mE^NCk&mQe^OWMX+njMNw26zypKb^&!t}|!sSc%l$08z+el`Z
zD5|gWeAtY#(8@=kXjK8d$U#8O at OLlU;k~@}zXed#E0DDSoT49o&Cx*!P!i%q0$ZD;
zvW%xe_}F#IqFaH7Xx7CJeLHt_=WJ-TLA4SH9 at j)Ipi9CW9&nGTL(9^U4Mb}M5tfCE
z%9_HVp{qr&3iBBb++}-km+uwws?x-~2niR+FQdqoXk at KKeU25A#x=ev1!MBF71d~I
zpIjZvFMF0GjIC<zg2Kz}pBzs;ewf3*$d{*?;=NdcRR8j2p?iN>W1g5+hp*lDM$SLV
z!3-&{Sh$I}JxB*eVewc<C;LeJ!Fby83_qxzL!9Xe6)Fe*j&=`eM<|b3STgg+xE^UT
z;8pY}_Cp-g@@^{1T#g6RU0PuS{4JSz61+aRPMl)V1oXN09x;kpP9xzkD|V$VoK1fJ
z at n<W`%U_6yDa9-DCS%oQ!s52kMo;&E9Ht)08rk}ivcrrtPm3WSuA}eAbqx#sqP|M@
zxnE at Vhu&2yl3Z-b{U{i%mQ}owF=Kg{k%9!tOjc at mqA;qLpdL4ZmMZX^3F>!ff&xx4
ziB}NLO8KlBW+i&`$rYNs<6q+xcbu_Q at i)$Nn37YS?Azu8bQ~d|btipjWl(VBR;Gke
z>m%_SL8kQhjXSENB{4ss=gV)q8 at merBsEub5*4FXdEq0ABNdE_k|I`qK0cIk%K$xI
z<bCPucGtD-FdBm|&sHdxX#?%e#|qri6d9%M<l#6sK<_MGG&%4S0o?iWNyAMQCaFl4
z<0(#jh>2s>k$MyztB|~&Ebm>ONSV=7qk^yd7PJZgr+i9J5pPtT8lcsf{8%|G-`Sb*
z<nZj8G?w~KlgT1|KQUFx7E3}$RMU3ub7M_jxZcUFrDmLz5n63rzqR+4o1!oHS8f?^
z?$0C=B3lL7%*<_CMUag6=9CM)UN%~#)k3HkJ5TUPLJ~ZJA60p!B;-?Sw7U|@MrC{!
zu5o$6L*!^vKaUTOJZ{15(xB;@9&Xw<)}6$bIF^Xb#uS<qog_~rtJ)0S2w9Iubg<UF
z<e2?Rt3lVTC)MP-o+^X$=f(ZW5@;fptJp`XQkwVC;lUH0YF=f|Wc5J at iroqOD|!d`
zvpB+mo_a}f#%r<l0L5U)Bjy?AA?5lkunAHl<>W~chru4_-|SVShJG2Yv+TNEhcl<P
zxNboJTLs-i+2z&<7{k1yERdrtP*|Attf=%3F*|V1b&@z#+I-jgZ44G40ZwK0>o(zl
z9$^NbLuq at HG>OZ+!kIdtRt*Ap=5S}mH*!M?#ayb!-49Y1LNd?xIxaU6Dcm!+h%j2;
zD0;)KUg%M8BXU0-eeasyzKRigX=ea=y?Kh$iE-k#Q(v1bRu at -R7gty4$juA)l#w<0
zbx(}|<mOsiT;_?mqW-jOQQ}FW^HNSl-E4`!A}Ynplhx4X9Ik8G)SH?!2>C2Gn#XIh
zVvPxILQ<^FNPO%Hb-E3!8d~y2d1u1*W~$^d;VR(^JYT+c>2S{zPSX}|*dgen;I@=^
z*mB*C1SVrBvMG^%|0svI9>R&BR>acOc%ykgIJBS3 at bYle42MPONLnw~2ABv;@qGmZ
zyE_R)db@<6yHzV0Q|O$X`=Cpvg4#*6pf2Atk{;6Bxe%+w4d)||CRsZCSgbLkyt3?9
zP+JHbH10yTmsc#(_cF+(;haHi=2O~dylWREBoWbvVajh%`cGb<=a^a^oAcokkswJ&
zXI;CZM<O#pLos$ifq at mH3vpLn2)IVT=%OT&CZu5ihXs}v1N3+CTByaFxs($~bp&np
z3PL-0BW8&X0u(nSjt>vsNF@=FtNvJ#EN$CQ#~r7h$F<c at 61sVI-lt<DPN-4AJ3)!b
zZsI%}Az;~g8lxK|&LoE(GFt2Pmd-Gk#fG;bpE<~N at hN@4w8hpd5Fyob8atc(xNQhn
zEjd44<jCJqzO1oJF3IzwqzsNnKo2xpDwtK#P?DUZkR<7yg%2tl8G5BU7lPC<F863F
z&6qnT;Ta<Oe2;WJU?MgC9Uh8~YZaUEUXv{CGy0dh`R3%rhR4{9DJ>he)9olu06T#_
z96_Wa!HdhY$dijutCyc?PIpoQJq{eMZiXU>`zbj>Eaz`AD2BM)x*iOn7W2|Yh(4Is
z{=+troC{D#x_`(x9ST;|y>zqw01>Jz46PWd3Wr8~WHLbA6_U5ZK&mFTaI+PX$|SUg
z2WO2zA<a<O!*XFZ1ghWVC{-#ne>*d?6Rl6OknPCrY0~d+k#L2+NtJ798%FJc11JX3
zg7hirUg%^o^_3H@{-`EV at B>IvKuu2AHvz!BWC%jS3=+cb%qwi9gp3LR7hoc9r4a{%
z4d8ntq{W{oq$HG^!VaQlsEx2|Z(bf0=Bo}bsb#_MILuU{J>oVau|RxwG;KMGYgF`M
z_PgQN3aUmA<<L5LiKH`UIP7FkC4A$MR-1E7;RMt8GQ(JOz#zTEk^UnUF6<y!KUD<X
z6xv>wZwWTlb=tDo3fK8g<t^7(IQcFYv3zo<`*(^|%v%Etrz_ at xv$F at xx-htpPDv#W
zRAcuZp{{QRN8MX86qhC^bhzH<GFUm*(!&~%d6E`{L1T;?%3 at odktw3*FfnpPnwk#}
z9DGu3ahrsl<<#M0?O6QScayUnCAI80nPkTfrtl2d^?N!}+wIrlk@)4h(oq{w!Av~Z
z-uNwLQAbE=r>k*v@}6om{-9&6SgvM#OzK1$D41V^5paL?W%yLFp*Mx)Lf9v-Uc3ay
zg}t6K(MjfVu?@LtIf$q0k_wabs-(!<#ngD1wlx_4;2|aojqth#TvZ7!ej%~bR7E^N
z^Q}UiG-|`0fN)^k)NbUHxdzG}rMgRtgQ!heU7nHCpywPtSq&0j<Y+6SNmLmUA at dcH
zD>$uSk>_a)rG<~1B{Z9Y$&ts7)KMa%<SJW at eq9Xtn#2X?WEs!Q+^(iUmYKhP`Q+=I
ztcZzUCUde-oyaXC#0OedlI2BEJ`JV}53>M}DNKD9B1Tu&fPb^o39=l_SE!i72?Enp
zsZjRoxBIVs10i)0EHHIc5uA2vjl*;Ey(R;32K=aLO8CV(iS&v5fszv9$x?|Ya(-(q
z5$gzeq?+NpwLs*`mP!SMhYm-e*!|<yVIG5A!DnUHS97VT&><-AIMktgj)d<b=z{M}
z7GcxCDQ1{jT231-p}Jt(Y536OKPW07EB5+Z?b>EPw!>t9;qZjGWA9$4Sef9jIteG9
z?Z1O*kS|Y?i*&Bg%!7}F)P?Nd$w)WI7td+lPkuT$6)wuSM|*Mq$c8(0u$@oI3Q?S~
zcu*$0cN>z|<2Ak^Y~MhzR_JGw(y-7P;g5XHZ2lB+($4_(>FWzSPfDK16(9qvh2S2#
z5%ml0K=?1G1nDXGN^wpOv4fQvk#0Q){S at gQcjbSDx_ch`$Ii07zI35lRUnKIF=D?;
zB#jV&l#;49=XH)j-%Wn at G^%b+CwZw;It8n+$T&@Ttz|RDJ&>a}STyJ`_RlU40%JzB
zbtTHX6m5-cEm>xw#=zyL66Eki<1Gkaa*v<*Be9m)Bk8bpi{bQ~-cXSxP3PjuSf#!6
z(jRT5#eLXfFFP at 0Y}II4J7-Efi3O(wj+LFBBq0_Pr%8KTnGt%`bC9B6FcswOgq1M2
zjwyh{CAT=*;16++TM_qOS9XgCc?%Fj5(@*GFq#d#At8TNP_Vl<I2`d(RAA|BVqH}h
z8ZF){Iin}AIsfv=DaS9KTYb4*a_VA_MF}tbuk$0unu9M$HE at B>A>=3<3~!J0dTHpQ
zOD(foAbbnony~l9*I&n^+4Ie#{fDxrec_n3_rUVVh2<0DoKU;yKfwd5hUsruyK=TY
zT+FMKQ9(Y^c_bC(qu1KxRh1~y8lCq!`q4zS|F;r3P#O*>wNUeKzYJCEivIWI-8N_E
zITQk+s=7yG3wON)rJ{)WcV{P|gDa<lZ5qrW&v?%piN3-dgtdSUoWVXcnnTiw=1xHR
z_Qm(3Kd-;qTz~X*V{4=<k7&(0sJhO5QJ3B-Q7bb-?s^V^tda7Lrph at -BVweb+!apl
zB{$@xo(dToS{%J29NpOThLl;<d`ef9{nKO6hBJ~Mwa1XfOI2;SI*XNzuV^o*sl(-d
zpRe6z`E^9;vtdBUJ2S*3W(3by96Vo9 at VpTnnTKW_pJ4P3xrlEUD85`=;XdQBQeP80
zM}K+Q$^=0p1tdT!fe*<K6m_hpf_<5Ki?)Q`I#82wv!ooO$}}wL{&Gm*TIFj0q2};k
z>qKZrtXyOo+uMJN(h}-&M?n|A=n_!MWPGadZy9xw7Ds<<TBjRhTWb2~W2M#`G&{t%
zj=4?9-Bp7~{!4+JPiDTO)*GW+P2^?i*9FhGAWQrYw`2#_#5pV_lS{+L%FNnG9 at cyw
z$!!>H^-+l1;sb?8cwfSoQ1(eMd!Z`|FX{R$V_n9fSxBMm7!~MV$-_{csYmN+!OJ^(
z4m~NIz}1DR6mjg0A_iokqY^rc<fox>$C@$uzM4)jKP<<{FcJ%C)$Zp?Cf3=TbyfdD
z3jBd2B4K2=-f8SALZ40tH6gxWJl7e^3oApPPX38u43)RNh+PvuG33O>^B#=wqo^Yd
zeZ(OYsXQFSc$ac;aukRl-cfUp7%`T;zP}%TsAI)t9sUw?=`2;9&F{8e5!AMT&kfhm
zDc8=@xcs at UrH5uqgs|HbT#z+Z1Kn}%L1bvcU-VOY{pGE2v937Kwel&*Af^!ApWGe7
zFyE|=kbGZ|Z<6z`^OJ*c81C=(FQLiILV|OIEG0mslAK2p$)JT_u`}H>JyyE1eD_mq
zXwgG*PJo9vc3y~c%M9CZ{<`_{YJ&+Bg{TY>gO5;WwflkCe0Eo^3$Xv{#@!_-k9bWN
z0N=3YMT9bmok#i<Dn#w_j6pSZK4GS at A%I2r55p=_va`b(yDc8{y9z at MkoF8$(~4b9
zE1#jKrK%P-W|%GTGC9UygL>yhM5dNdo#oz1sRo|gI6FH%Q{~%((emmXL2JQ2I$=u<
zQz`m%z|)i`mvg9(<>KaI^Lo=t3CuvXx=<<6ceIo$tDRd$A}@uET<FA(s78E`k1~1x
zJ)Rr;DnV;huH``2ZQ6HI5idTComjj;X4_TEfsmD8huVaNTZ``vsZguEMlX+nt>eTB
zMT#Di^M<du?4AT+mCv4F%y5l)gb&XqghlP!T3|6AsLOb;!X{<WQa#L1SM at n$eD6Mx
zk{fGzdEtQKUFH2<<@__;Q7d*wt$fZoastJEU?s6F^y$oK%f43B;rG%(W2M at pbxhsH
zX(enQGfCz1vdSaKQToDc+OJr0w{#9cA4<Vbc?j8r0up@)gkd80RycZIDp at CI2wNxR
zNNQVDR0mMzYZa}g;SeL~3|+%``;WB>maMUE7oST#|IjU at T|z1QJzZjJa`D2qtbOgG
zXsz at ko^48WHII5)!O4Ceku(Klf+~yJWR6y)7)4EOr&DZ(0%QW93(WbLt7sKEl{A36
zc58MKOEM5q#S-1TmaM8MRQNjnnB at cfOnmqaMnWJlry1?#HL8kX#L5Q7Kv_OLSpY|9
zwsEewV>e#w at 7rd)8UjbHQ11n}h4ER#CJbzi`F<R$Aywr|Jt1&Rmz?BYt at ib-n!upm
z0e#GATsa{<oOwj839>q)4n at yVtK~P8l+ at B%<)vRX{b2M=6?jmvLPH_Yr|H66vT;#G
z!z9Qfxn?LlOq2W@@S*THw!BT&%ul0d&mOBKj?Yg{u_o{szlhd~A}Uh`uao^?(ot)y
ze296h&TwAoIWSnJH8kR*Q at u)HSC8&ZOM at Teq3t}u)O{--uUB-@`WJVp*uo_TTTwCt
zEHhKf7<w)9-GoSQB5dBQ0dJ=D3~x?2wz0Fd{c7{^c7#cMSUX3|eFSbBXnH9gM;{i>
zE8Yd$#1;r`4{+Ai8O|&{2RJLE$4I_S`@(zfyc;LrP6Zc(W>njNxpZ+f`SR9{74D&<
z2*m at uqjFm;ShU`Df@&bTvWN*8zUej4=X3Lf!G&!7_SO=x5}2&D=^nUlyh-wOs?#xV
zt$<@zUk>}}J99c`CS`hyXRr5G?l0fpDXmz(9N|;}FZzjs3 at BvzeuAp61j(1RZR2R+
zp>MredQwY;i!q>|)=y4P-f=r#$P*d->kjh=p6zov<mmyqL%*VL^pf at KcbOIt@B1Cz
z76&v2Ye3u{{<OOxq`U@=M#IPQiuUlxH-q$X%%g{MKqKlkfuGhOilY|)!O%D6#d`nA
zp{m_tnFI#aD5S2iXyCU;k8K_4{TF}oyKtXgHe$f}F)lfr0#-f4 at v1{Ra;ljGi<52<
zeHv)(?(!GQF>iaxW!Z;*z862+lJf$@{`4&}K|JzFcqij6IO&D%+3>nbL&KhcnBl}#
zsVDT06W9C|(!%nL4s9X#G^<^GO|U*{W0J2MU{ZXPdA26?@&4Mvt_%mK51n62&aSi^
z(*$>qfNn#?^C5j6OOIu*or9<Jr|_(AkH<TNAc?kgf-FA7biu)10;?t~Es>$LpA)&|
zQ^pKRk{J%YRXg-n*OFOg?n|gLxa1hUS_P=2p_|I+9EJhXzQndnOLCIP{!l!!$5aT6
zD9Lz4MU^v8M-DNZp3y(^RVg4-3j9wYRnr^|0W4+b*}HY!2D_v-9&VlT)&B06Wu?F8
z?vpRP)Gz(-{QDW|!k6L6N&CYddSPP*a}}ElEjs!HkB_Rcsx&bl(9ETj*?(N}q<{Ny
zDMtO<Z`gSxs7V_81R|H*$#_L&cRWVTwp({LYxix~zMN8V<3EO<Fq{mza_gbl$v^?#
zTMt8Zb7+?gx>R%2j7JKeuD3$1phnQ!x5Zz5U&&Bx(w1EKP%hD0qiuXOGIGT~fD+o6
zNBg7f*@rLkg1^|z*1O}U5z_LH!Pxvq@^?>vc>$82k>BO-QS&EqcKs2(nt_Uo0k=`P
zg<SrB6gZebhc!}wJ4ah#;o6iTE<fSfB#PU>e>?((Zz8g>)%2pZ<Z?cl=}{e{&DKa=
z36d%+v`Y=(xPmdfTcVhDaZO)ak2D`4Ire0IS9LGuyFsMdV1#>XXYIp_+dVz}RcvM>
zN`PLRe3TE6K-l`Ic5ikrPItN`l;2;ekKg|_|KoV!AL|Q$y}R)F&fos+_R`?r`NiJb
z+n)g0h9o~(Ziw-dm6j4eSsnfO>Tfrg>%C)}us>P3;c(qnu3zhWhr9B*zo_PBPgKo_
zB&<4;uzK%*iK?15eUI<nB$PcU-O^ex@)x{UA>MQbUWrzSZ+-C0$O*K4BYh<%tk)pL
zGqCYSXl=Az`~xkqf86-;)y6Y!1Ks&<Yva{}-~B(|Zg0PQuuhXV%4_~%hV=j4dHT05
zaL_xm87})(yX;rxvKKuf-E6v~|M(u=T|#3fA1AeOt51#X$$V;w%1wygDoh3TBryrA
zi6(cdP?nd9G^7yla4gBGu3I2XsPq<11us at 1HP$>Pva#L!h7iut<z(1~n&FCGwJUm6
zuIRpVU&;`pk$6kuw|pM;?!WMvd!61^Dbs{|Mnhx1gz+`$4)$Iu6Kkj!SU8E*q&p@<
z at SWp-?@u~D!%=^MriFaMhbVnWg228a2>~ypn}3NWZ|<$kQld|%yV7JsmCmSb^HNpM
zll$5GY3cGr2`Wu8kax6C2=~Pa>e4{==&@()QZ_wS+)k&-xo}W%Xoj)hQ@*9DzO9y=
z>=61_`mRs+xn3FWbM43K*9xK~t`?_qAm#VtGkG%}hzlu=0 at qU4X9p-|E!cvWUhK2+
zk!rw|c1@}qq5s-CQ_?k)=_dPfZH?86M>=XM;nVzOV;{}h_)PvsY_)aS2RaM;Nq~@{
z%uxKBSy-#Gf4r>u&BcvHo at 94z`={>c at 8=wtaDzW~PHPr>8(|-XBv}u}upUYFh|)m6
zLLjC&GbTkTJWab3@)`sz2F%Z+Yl8NtFTc_y0shQ`QQ%rWr3A&5X6{z37NTmT=Gt5b
zm?(Zjy-fq0_N&UAVp4fMJ<@nYJozmOVJ}(ir^AZ}hOKE{3y2g#LSsvhBl_W5mvCkB
zv&RC+7j!^iFmbPw{e{!l3xZe&q0#)C$*-fk>m>4~i|u6p3)V}|2sY1*fWLw>##DC_
zM$|86Mb#VJG1ZlwL6?mm(*dN_f?$U*1{PZCn(Ta!s0Zlui;8KkAX1!X#gEFG?YS|A
zi9_I2qKOI`qMr!r(x1?S&d;Gp0(fCCdkT0$<keaYCQt2H=3ANzLB$L}^yM9;Z!{o}
z<=UhmgUa@|p<`0FF#)bCXv6Ltic<9!Y at ekl3Nz8B@r;R0s(=W1MwU-jLwKx1U0csa
zDxau{O)EQtCb1vmcYHqsh{- at 4L0t)7Upv3goMA2-ICMv%{O+T&z;Ha(tAbDWenL3T
zxh-4ds-5#_&KsCtUZ#$2m|<jGOVV(txBb@~TeNX9xj@(7l7d1y|I-PVdms^`*^l at Q
zc*q7sm&a^ESgZJL)gT_iu at zR2(H0)z%+b4AB at 0Ki1uPf^uC#<&gCAlyv(vi`DVZ{i
z$<5;G>gBNcU>#U=);01QGHXH*F;e#F+sVnZ*IPSF7lcUVA2hna>~XkBKh7Fx_QJa%
zw`J9o9ELIc5;zEjnZrvL@)l$xwDWDUUj?RqEf5D&5dx2BJ3so4a=Wtv=j`ZbTXM>(
z)y3M_ at VZbQCX;&y-jPNm#-|~J?i;_g97@~nzoRpTO-_zZ!hK|V4j+NnPlqfhMW-5P
zxr>yoMiays&S#BhY^gu#6C_O5+d!RJx-B+AQ;JNb9m at gX^B*aSWX#rBV#14oD1N0&
z;IUYU_LH8lH1bmFvlxJ)koXXb!lA)b6_l;#y}Q^*>=FLq?3rN51$FB>=7qQFirC^2
z{bg+&PvU-9r2 at 2WKVd@ulz{G$^(r9Akp!gTtTLF;90m)j(|6`%e?T!diXJS+sSyuy
z(>9BmVO6LB=a5d&#xVpYv4z}H)4j2)Q>V&*D{En5#=%0Ey7o_K3-IGyeo-o7;={SW
zMLIwhiCkfD$o_2GrgdG-i`LW3!M7q%-77#gMQxi<0v|G}SiB>8;y!RtQp%UyS9Q&h
ziZP_Cfy_IG?tXgj-ds88(gRXttmGxHp|dJLd=FUDFw$qFf`C9Hj&DirkRC6MmrxgX
z(7}q>lM^8 at vu%l_4I|Cys&)SMlzy at B;cN^bCfgBbNpG^%<FvdhA)l3<K_{jk(>{#M
z9AL%x at Q|v2iiN=COJBK6q{(8LzG)K<uIqbAg))E!;gwe~-8ft2uZM4&4idp}T=_6`
z7m9$>k&%?4sb)a%F!GQlM{h%8aXvhWB`tNV>vliqsdcApJdq|;Vv;A9$Gh$-u6Tjw
zk#=~V7A*-5yH!>jJ9sB9K42i#sg!6a{EKU{>ZlyAv=p=sTL88!Ao$V2DP2(U;Ee;|
z*;}zVw&63l>yKCfIR5jYx~CS|(<+jK4waQ19<R`tzD>+71-|S^X(Vup6rs|;K}-sA
zaTXFsV&3Az^)`9jv<yzmi4 at Y&ytA&fA9p7wbGk)1-Ex05RCwc{V;ZfEnXHn{$iI)f
z7-)8b7y?dNMv$p3$_JXI89%Nutw<*3;G_my6kMTsBlFAS@%paK*~xcjhlA`gxMcsu
zLF5jO{vK2wp!Pur%*qar35a&?moQ=@oW~7y^x|?8M=OXAMsxDC{<~FGb&;8)yLWXm
z6_x+N=!cE1+cC~U_)#M0U)yJATqHB67D6;gzf1?a+75*|04~U=TR@;GdY)^61=S^h
z&b@~C-xsGc_7jU12ZI9Cw2ARetMyZ7il8Cr{4lm0=~NFH<7+#ubpj{}Bt at 5@)7?4d
zM%8GAy6|I4ar_=^rq1Azh(yyQ4-=r4_W1F}+2K#4?=h1Yu{6<pV56e(dvG^FR`O|5
zkw(C^&Jcg~fU%%?@j2uQt}kWXq8Xf?9*yQKZ{}3Atd<iPqESq)sw6wbLL2F+J!yZ*
zZ~^?Pj0Hx36LZg!K^-E|Yb|Nh2($00bHB7K)=M-chm{@&%6Kh*4L21=v>al$mRHnC
zn1nEH(@}rH^9$*WT;vI-eOHCknHvvC!wvx0g6zn!NiguWCD}vTmua2>8Didfg~|3~
zbr;BHi^XQU$}JfhhtI8tow%X`uRL7g3IJ1tRc41W5-Ip*3RAZ|P*koYq`+^1$gt|h
zS6d~&{BnHp<{IWv-wD1E0%2g7XLv&oxCIbzAn5lcR~AVW$|HR1VXz^Ol&{5L+Rv<I
zWuW<e<K=5HUVG||ITHED18e at kt&66;+_VZrqx*!~Q&aAYlc1k+(PaEhB24wePTx3E
z&;J;z^y#EUQ7vDEBKhY6n#(@i{E@`^VsCW{N7%K4(^VBg-Vk3~8UE?>i+5zBg^5w~
zhrAT2{it at k(cek9FACM?o?Z(={r%<i5?fwdFNFa)IPdPApOc}fGSfI!XENnM_z9#q
za16f%bvztE%D7(`Fmg#`?t__fZPFF+gXajQ_!`KC2U%Uz6AtM3N;2D!E_ueJR>)z-
z`>L_f9bAcGX*HyAPwzWim!+88LrfXh>6=mmJ-Wbkm at +RAr&*L-SS#Q07_MB8!@V7N
z<6TQzAAsVAA#)vxv~H02^_XisZ5MmyNF<?sOKW-VoxY9B4t&JsMP(!6_jZvEqGHo%
zEq))|Vt+ChnX#4*r*sN~pD%%S at k4(Il}8v2qHUovB4&?qcziH4hL>TV?U<o1I;S at t
zgqed~JCN+?4;cngThA(KI(C(fCVXBFFQ+ at Y;I0&N<pTmX7)NtEXCF!}W`e>v at ZUh&
z7zPGij4oc_VmZtT^RK$1;RC_>%0P>6PkJzI4BJgpA}p;SkP$0F2Gvb|6;h$T70%{G
z!~&7syQ+!`Q6A6o25)H^T7P}f=89Az-cReQi->g}@r?CMu)FdC9piU2l%h|Y7+~0J
zw4IAxKt^$04K17UKDUljm#JiHNz_{;b2MuFM3554sIBV8qczN&Inag5q-dj6?8BAv
zr96Q;^JePkMo=V9`GO`G%~IGy2@^J}5eQ)OHMz7XF8C%=t4dH53r-rJ5l1(2oWDEX
zJv|Ds6RBdzoxJaf<M8=)2oR`L>F_<&)hmM+%6l|T&&ZXb9fB*p`A74$R47F20<Uud
zF?nBN-yR6ZTG2Z>sAbKlY at WE|$LgFA`ONK0E57?i!RVN&q&#=;#Pf{H+`!La7q89-
z&nHsl?I|$_E8Wg$oDx6Ko0u5T=oQ=W2&NGZ6JkSA4eR|}l`(xI@*1_Q|6*fpYRoup
zxl>#^#l1{<Iq1NwKyqz|Aa^fE;fB4A))qgtgDMWEC&r$Q-!;)3z=z}MC%o(Owq(jt
zkRp;9RE~rrxmKf(Ze6I+{IBX-r{t((n$psFm+jOSDo&(_u2-qWUlj1u)fcPF%S!R9
z-`(W(S({6$?95bRFWB4YFxs9iCDDhjZR?Igs6h|{#*2ltsD=gExofASiZm7dIz>Cz
z!fjtv2i<8xYb>?l40~37P<t{`HM832>?lG4b+2K`9~NojY(JH<;1|XM8->?P(un&Y
zFON at T9qv1^%Pv>eq1^L28ZH2wMLbcXjd`3}v|W%F=1)g-ydx3cF?2+slrDh*SL6j$
zt}XS2V#p`c42OicK8!GPA7<mT1H7psVbnxkLg6U!gV=gq7#j%s{vyfTLb`OTks7PY
zF)A%5xYZCJ$XTCNyzP{%{Bm%$QLNV;`ZVUrH%uM45y6$XL}TcIS8!ti+z>+D8I=VK
z?;|^<Fm|K>`Yr6WymF&C-T=KNx+?l!qBnSXIGgl5CyEhmqldDs*rBa$i<#GK at ml99
z;h+N)=3a9^gncdTrMv84+q}tBR7Hjac=S9588`uX>lc)j*)F4~EZs%sO$*Rl5C7zQ
zyPHR34XvtQUAjT>{vC2L$0Z4zfn+t@(fqPX+K2s1U1n8}<K5UT+0Qvw5X*|6Xa41l
zeUa+Ph8pWkCIO&zPYR}$L0Bz0p*(lm6Sl3Ot-*EVgm<V*2hpD!-?JRJhv!_>M at ETV
zAy_aGF7$dhw9F4i3n3%qofFke)R}_vAQCwDxK%<i5F4Q*T?kUz37*kK0$Qd~g!)Mo
z9gmz=hEoC%D{E)@LH<;(Fv56MxG*YZyp|RSMZxL(*sH?{5q?aWP#m3F9D~}hE%)Ef
zBy0dG)d at GAcCO-$S|JF8)O$YWcNg*Cgkqr4uEbcCd|}GR^SB#S6SH^J0JVFPO`ang
z9>t>o`!Q(sp2uZ5X;uItJkqh6_)QthXCqxSx%7yCt;mn)TV6bbOl;ssyI2ZcQJnCF
z!mn`XFRpnrEfSX&!E!Z~HNQCd`sm#?+C%TXMtPVodCZ-;%8gd6uP#q36Hc=_aL)}=
zy<#_^C8iNV#^T&7)wf~EN*wsy2r>ZA5Lj03!6B)XMW!*-5P}S5bgU}TgPz5dgrKHx
zlC|~ZQQ!qi at FtYUxJ*3Jod-Wn)N>Ys!dTG-cvuH=IIHWHEE+FYm?8Nr{1EmI5 at xhI
zW7R_OGO22a=S#(O`ZJ?A_U=~-I!@KYt`3Lr{CJfRo;zxEt?IIkc_3n`k<H$;;tci?
z>sK)DG_>?9JyY9|IqY8d7hx|%SgGfSmpDlN5FRodQf at y`>>%G}*i9Ke898uJMQErG
z%BsC)lr5MhilXdPi-m;*kJtOz;>yZL3k&?i1+1i{bRPK8lPtr2(1oKGe(V2f{0vqU
z(=1MBtxI~%YTdF8R1TZyg0GV)VaWQkb7mD9q-mkN^vARxlk&7rVI?9@{yXE6Iu(uS
ze$EBH_7B+i9am!%h*=U;KoZ3a9iylN3d>3X_Hc%lRE9z`rKsC!Pyu-#u`EuO>d0iD
z%9PI-ArfqSO6-&oIO@{&@>&TMCdXFH(ZtNyr6 at z6k3I(NMN+6wkz&yJfTN7T%aytZ
z%zxu~wPQv}Ly~9vgG(LiWFP;=sldHZO=GwLN*xTbt}4X3N{F at 7D&Ts)UM;E_j4ZMo
z`JXFRj&c4S668f8#t)%{-E0`s#pn?%-0-ZFKIK2-uK3DLu;>+4bsDkxr<2zgUvo?L
zWLrFHt0>2}ypfraff-)~`^O8ZRBYv9m$VGnyzG34Us%_8<BR>DTDe5Bn28o$wy67B
zGJ6olEM-W=fHhH4xlM6d8wAB2b3(4Eyiz)!x<j<^KX|csCr(}IBq>2IIrR&Vduuar
z$m$jF>qAHr0d1hhYCWF!mklKcj(#xmx~j<QDv?)3n#CdWA|3LcB^ql_Y3T`_a+J#p
z88w};xp^{rm7<9-=7f6sNd8I<3do&WL+f;&A}vd#KAais51{xcM564DUUg8fYf%uy
zbVtyt#Ks!2*ty%6LWO2I|4Fy1cMH4k7K-0|-cNJ^+$E)uNYTC4qn50~U6l;jryE~y
zkN)Gu=JW0fyfR}-))Kd1&H=~|=Hsu*Q?W{*E-yp#NTE+dFI<<geE06ZaaXza8Omyk
z_;kNS_Dh3KQM!PJE8jYMuzr|=E6l>06W$491OsZt<=IiZv8bEFgY<y5wILJ(s{+k2
zmm-HBDn8f5X```9Gl}uwCX$|_7S;@Qd2$Fub%L&Wq}PIP*0#3f8IQy&P#vZH$_I;5
zLP80765Iggm7u?;Jg^<y^mdZwu8r)l5sy{MFZDjTh<G^jo_Wc=Ch}6&$r5vYtT^qt
zsHz`0&cWU=t2;biZ7;0W&gR{*NSJ?n^zHVur^+CpwJd0x=gOIa+negj<%N at su=#9b
z!7*aJn~o*2gQr^vJ^`3)h4f`^H$273E=tiS3+e8LV>no3Mz#R(O6akxV1@!tB3Mw_
zy_T0MyTT#(w>Sh7St6(x+^~Y=_ at Pg5cCgKi=7Am>>W=Q at lfn?!oCvqI%rZ2XTKc1)
zaO)OL&&GLj_Hmf~O;wYV#(P;jcd>i4!v=REw(8y`^5EO=Q-eA<m_3}`E(=6qL$Qk;
zRz7TegbTVxI__U$r5eO1CjM-Gql;J5hg{yeASQ_2ly0uWb38M?soj}HPUumpht69<
zNI<rxqlVH9>a~5MVy2y!FSfRKX!W-xL;*OIWS>`LSp3Luel4n^84ivl>f9kKL0OZ>
z#pdpXV^gI6HKv5xfEGop%Hk#`kh9HBU5oPiyuoP06>>09ilBS&-Fo;`BC5Fx$ScZV
zDNUab_q3!AM;0`O<EI1EG}uaKb%)1liV#dKOkKqAxnpu>gdrPmEi5QWU#9Yx>(93~
zZwa?5I9oGe$|U|?_EP)~Pbk at Lz+0n0LTzL_3~|ngqw7?l@!vD8s{}$QNzsAn9D4qk
zn>F!EA7}G&UZv5$#B%z&il(``R&GeNshWAPH~vgu!cKnXJRe^(N0GF|2_BV@%OU`^
z>zyoA9cVOv%L#L+ at 6kdCcY%De6o&-|M at x)vI=zWsBb7sXh8?)6czNvZy^<cKup^d$
z*oUV%>7iI)AX&Cy66+N;ybDv}!%xG*(I|>`hO+)FMmT&hg_5I2oS4{on*CCBmEQ9S
zzNPY9{SZ4wfhg78Yybx|d4!Q2wL+e(M~UYTmX^+6oBSYOiWj(cx>n#ywtX3QblcC%
zy>DNBwtWAyd!PBQZhN|;3$j=5-v2b-xKPmG(@)p#BBMTzcXiG~y2|iP(W^Upj^ptz
z3c|6vZiGq#G>QmCa6SkFLI{$Az=$*2+IYJ0cw5 at 4SfaP98<HSXS>vd5;j0hjM_=2S
z$k|;6SM23H$b*{$k~idBtWe8{4;`Jpn}8(2WNiXU$HwTR+<k8ScXQ#*b#NEUFjSr`
zyvf-_D17kY9jk`S?ZA3u6TS*JxY$r_8-IzyIu11}*w~C+9ZCU^FxF0ls+`<Dwc)=^
zJ76+p-0}2oh|Wkr{bemJfUP+hY8`VmI3-LZxmZ~8zmZp|tv-o_Bg}-K2FkZM*};B9
z at thNn62mU868W`cZ at _1JPO6{|r5ckLzNg#ZdY+hW#agL0_TQK4<`{Q&h+-nv1Ma{;
zX~=m(cB79fJOH{L&wF(vgmV21`^GnMcKR#&CUVrDiMj-P_w<5u^;X$M+$zO6H}={1
z*NtDtdl!#2 at ip$o-g{wh3KU)$_AZrQ>;!=kTB{75Bn96n=hv*vvQq4qRF|c+)5b<O
z{ILWHb2u5J!tLlJJRmf6ld{L^HbL-{GvhgDCMPr4C|M;yG at x%n4?e+=fUAviZ?k!u
zudW_BaFtOc`yzErq50z%-#y><NqzI`#dj}9kA46Xyf|_8#0Kn1>dN*mj}!w?%f9nd
zA#+ at F+G7?ryG*hkBZ)LP$RE-Gvng3-i#JqyCJanxpKQ88z|C;IF5CBd^?qin8i)XP
z%~r*Gs5%ce64mUGHV$U8%y*qj;x#wG0YBfodyB52)PO<{#eNc$)g9^_zF|zT`_1}o
zxz9Gv$G6likJevq%6B38qT}UgJ)IuAXQU-59gw)?&Nz1d4$t1Nl_Rinj>9Rrv^l5D
z=+t at 1WtiMSaA5^REQsNzs%Q=$|Le;$-X?92v;g$4Q*?VIK=-bfBdk+50U#4wi7BHP
z)egdeGzm~w5$*m3Rq+sfP9L)O7jc*@{*Vf6WbiqaM)!s#3mrvLE(DnZL$U^jpr1;3
zc<59>Be7oJsXO)sASWOsaw4s<UTcqtXK2V;M_g4KHEIGvgw2pZkN_)@xQOc#l1sh5
zRH1tZlGRcmZo3UuN&lRl0<$S>RCOFbsnfVn-dE$^dbqh&a);6L!|u}nFhq2jBWO?I
zf~k<BlO_g5z?w?Wbzzh4)d7(|d=-n?1B0-;s&ggjp(R}x>(oGwqG3(Q6LN#1n|SF)
zkqa+!Z9*Ai+GgY(3{cdTgG<FLzCzaaYMbb(RgjlCdkqq50Lpl5K`iiv`iJ#Qce~TK
zQV0WyK$CKPi~79%go?%)t0D@<X1?HYo=*@egbdmJH^;l*hIe6GLako<A|bDvs`R-*
z6=d(TLk3{<cveZn4qzU<cP2Lu{IbizT9nAH5iS?N*Rrm#orBkYXTI^<rtZgmW4sRe
z*9!8l4F^&EnAY)@Z_t*Oio at tN2BO#v(ifaUp%Sz1ASF{(O$Ka(Q@=n7QXFwqfD9p$
z&nMFJTykt=hy<`UXFP%&{dy^pB{Y|*hgC_8xk6loKlknA6c at TG#<SbU`K4`VAsC#3
z)A#<mYzB}-eKF)5>qW%8xLPA<yqGuZ&2BOLZg+!5q=2;PU&O63j%ZF7kcRI|u>^M5
zt~TUUmgi;x4QmbXc;i8D>0)O_FQ+>T4(+!g&McfQG&qz(t_^HO^|(0SgD`mhNd0mU
zPf1qRdq2pT33Mde`u(L1q7pQKe at hG4dxMTQx_|$!b%FF4_Oix2g9ctF6~XZ7fDk}$
zhQudM`s2bYA?@+IY~)qEMSfO?gKuP82~spT&{FRt<;SXVZFS0|p+RT)H!nahb)dK(
z!`Zostcfl-Lkcj5cLb=)+J#a|6gwZk#-Zzk1<)Z8HMF%rA6_JW7<x-{Pc<*YvX3tD
zF&ak02N0t2km{ekv%|N=zZe-<HRGn?9fL~Vn&RuU+C<rsrIGIO2((B>_oEbLRaqup
znwnC6O&1?JnZ|ufEKC*IwLeF+4!EjQM6DjLa+Z-CrlM^Ln{vrLyd^5jfruTnum!sv
z0#iY`Tv3yjWCwaGn`zB1rZ%i7U6{cv at h~i at I+BuNcGMIc)?)mH2l;+$TDx2`CgR6K
zB-1t^ayk}`*u-wb*-tkOrQKwDa!<w&GWwFq*fV9;lvA)q@<2m0SuCdZN2LI5J+Ae{
z$wYx*uEnZgcn5zIr|};9Vycx8X&*sM#e~x>K31~JrHRUW6T3;nE!!n@`%~O=D@)gP
zd=!9*Jg%`i^X*c$-h9+#yolLwMoVdp>aW+%DbDf1bLyk%IT5YVSf!s6xs7nvzT|`H
zI<Y|JdA+3^d6sa_ZNoj}eyuVe(s73YS2*+^`GeR_7|gXzQ7Cj4 at 48~X%OaB^*D|{f
zjTWjrrG)Qb5oTKDq1m#Cj>C<rC3_mtF4!PmB4dWY+Kq-d>!XTYG?}tq?}H!WQG=2A
zHAUjrh{SK=4B!fxQ$k^B at K7~oXo7c9H^lbfh>{y6ZhEDE=a%j!k}hOzfNngC_tap*
zK-bC0om!Mj`R6-b86AY5acCSK?eCEY>aCY~qBo&+WiKh>OeMG)Wcc^f$?xJ%=|Hpc
zN*IM at BOeY?!6vG&5jrSGWU<%qA$)EmX%wqF3^?+jp40Sg`_AaQmrvHWH|~s{;26+<
zAHUj&zjIZl-g>g}mph~Nr`sE^%;3EII8wne1!w?rDS)6RM at uqp%P!}Asm4^U)0*Pt
z9<3uSTTnb+BaHs7d{@{?(V|*=RVL7ane7y&C<g^cA&g?$`x07Z;JPzT1qBsGX3Z4i
z>+0e at -gakqq3)hcee87#?vd?MXc0+Q6Bew@%)vk3g>!UC%FUd4dFL&S{pttRLge%C
z)?*umHK4852 at 2Lo8~1?4_39(=aOhEE(2p1j%Q at j%BsDz{>1SqlYqCnUIlsi0t|UZe
z5javhhFKyc64V{=(`IoNqL^I1<t+I~Nk0nB at G;ArI=z+|qpF?$@&sV)7}|r((VvS6
z3^o+0BfzTXJV^Qo$7g3<E?`#;<Mb$*f0G3}fAD<UCMY{{uwVS>_1XA9Mj(MoEdPsB
zQvS+bTn#@Ll;~m=_^EGdgVOzX#Y}J**pZXkJc?Mb0g)m=@~-lozJgxe4KHhn@@DZe
z(3p*0FV(B;l(?lOKg?#Rx_+uz&g55nr)o(}&R$pd(fff)zW(HF?r+=<W3;^!xcbEn
zzRcs`OCQF(_v}HM#WLJnaG#)p=BHZiKI?^Lm5KBJOP|er<8ylU-T%xlE#IH{)~9+a
zURueQZhs-;C9cBia*bW?GKJ8k3Wkc7(K>B0L7Hqe0XJ9bv&gB2H&EK4I-`S<`($&x
zo90Irh~>7zAW-|3gA#RFTT|YClP=IAV_(D4NYb=H(sf*7s*)Fpsd68wjs&cRI>O`L
zF=3H$zmRB<dS~~y2pjHe_)!WnY$r+ at 5WsMokYrRv#2>7>TSV$d3s)A|1H-js1B=4v
zok?Z7CWNWDE^o}%9I(;><xO!Zt-~q}1?5USU`@FvQ@&F_TO%Lk`!|O;%}A#}3qz(y
zc1MV(9GmXkg0k3(du4ap%@iVhub8=C(zd(TI?;m!5L+_S-``E!LK5IDEzpa2n0j0c
zSU+|gK_8%<;6;gN-QrU at Q{XS$iGaNrK-s!c)4K+fq%Nd@@P*#RS;nW4KgrS at WRu<v
z$X=$oB5#PRk{VaBN71<`x<C;q?wQ`HwBHtSIJoD!IYFbp?dosN+agef3ubANmr8t)
zG at T2--JBsT&2#61K4k_|4R=%zayCdhzxD7DF*P8HhXBu??_cj at Yual}89uIC4_|Cy
z#i|R%Rd?~d;g+O+%ykiIUvo0bm1NCXD`0~=91?U+NfQS38TP|H4htn^Yn*8YHscU~
zLN(Y$D!tX;uN?V~brB(mgsRq3D`A%Jb;ydg5pF- at ZXI0a7ZR!b1>O2Mye8oX;WmcP
zKU at 0zvn~3LZWEc&<X!zTzdqky6Aby&%AeqsWn>J#Lxs3PGw;@Q|88BERE8$wcfCy`
zU@`3$-H;MZw2Q#S=A3-w5)pz8QL$p)FLs!55cY)Wty}brY at rK*IUo^LY|bSdFv9N*
zdt3eZp1iGs_Fss993QH3V|T50!Ax}BWo8m!92Y(=GhKCrSd_3`hjJPgQV&CS?TpJ@
z;mV>M;elBG9FDZtQS9bzo9{X#5N at F*xj at kpgPDmHVWJ%O?#KBqN-~{0i{-=}9L4dJ
zy9>562%<r!(mgqq?%Ani(=>4k{+$Ir4o_iD3W9$+JyCQM{F(2VCjjOD+xz<}-uAyi
zCs<tO{>~$b2 at Ow-=O2`$NWoX}O*}JNjZS~UxD8!PoZa9O9}#+>8SBzwgpOrRTFQ~k
z&&i~hWllMDnnl at kbBm)#OtlhIc(i(@^s!J^s%7zu`)6ZJw_okCzjlA}g*V{6m=Cy?
zQQ0wBYZR;xbr1R=z2lTr^HMucEmUShkYZ}56&3}ZY~^5&oc at e&dO39^A-TC#P`qDb
zokwZIVhh4(uw8n9XWChBdxbYBPG#C<av)-iYmV7RTRyxZw(kws&G<3ZQSec08hXbT
zp*k3{vD1|;M`>u$I=tx(I*y~<!AF#RDWd`Dl`>DANpSLBCD3PE<V$3Lu at 2By3BlsH
zmR`3-9uW85b#b5 at oq&$$5LAUDb1zD6WC_LHuU(q5!gl=x73df0v3|z+^%hP#r($xF
zojAa3U?{(`Bj1|LJF?gnj<Se<^^=C9Zlj&pkttSzP$@Zmbr{%ZRIZn{bPyuyaBu;q
z59nr$$WIbN|7(N`YH=ot^*#A#V&YoGP#)it+Xl=33iP;erj+sh2iFj8*@s>H&lYnQ
z)RHyFF}tMo(BTyJ1;tfR56yRPwDof38oV3yVce5z<DQzZ&D?~x2+%N1%7&2gk(@d2
zB&%C5rKgCwyNlkf+lJMYD9`K|TJ^~mafWNe at GaAwA8bKoS~cTD>c<WB<iZc&><^v%
zD-FEEPYA#Jjd|!jUH+yf&0xB^of at EQWDuZim;$-J^#F;GI_QVbmhp)2a}+%<lq>5t
zI)c3F4hR#1KHnR^#kv!>Py42eE(qB_AV1#cBBoU8Hgf)qg3ZXAzo&YKA=2UTJ(occ
z$Av+?8O_ICNw=FGpRqHNSE}M;DAGhu&pfL0iwBTn%O4f}Hw#)KGbC;(7Tq1DZ%A$y
z=759PDJjvGs|ufh9ZX~?7{&lr0xFVB{NXhuH&`@qPlnq)8EHcOXQ%&wZH`BG7eDXH
zLaIW6-C=L2^5!UK5#K*Vp(`~ohC%$oEloqr<0)J^%R#6z$hoXrX~O$#_<Z!@Pi|-L
zW&=*e7k$4&f5emIJQYt<K2GLdHLL*%H<;ahPubn~7P%&MdfQ(K;>(M7t<)5(9npVp
z;pHnC79kL2@?0(c%j4+LQj<-cd1VCeF5ywP9&Y_-xsz()KMhc&ZCbKK^L^oy;*DI!
zgf at qm7=me0XL|r0IdL1vjy_(w|Ji3N at ajI^cl|ni;ETs`7`nKLCJT=)5B at 4VkZeXR
zoJmf at nYvhEWa?su-3{ngAmR?v<@OGJ9=|16B9f at CV5`yM$8aP$z|EI))s1t<>0@|d
z9Nq)>oTH0<`FQKkX)daQhqOL^lZtsg%tF2Iuh0mogV;y0a;>4fw*>j6XjzcN1W>J)
zR~CCpW6O&L&U-RGwoXJYi<5z5qgjn2Wt!v(lWewy*sF}uLnS(gSr>U54QDjTvpQ{Q
zDkuQV2NS5`IcKpv+W0l{fEU)c9&dujG}j>0Qx>`9<~MXrhtw{Q={rI?plssmq4U~G
ze66Gqw#AM03Jr7uaW2a~dCK?;-t}O8sL*v%yU`#taj(wL;dvC?7JY<)(2S=00XbBq
zrq)gjjG10Mz6kC=br-V+kYhgF*bpuCD!8^v7K;)FSOx1wsq1PDNvLFLUJseX^0yRD
zQv~L*96LqqRmaC#$sPjmg9)<noC8_G{Q+r{$6l`eT<4NCddiRYBnr;o+<M3#LFstu
z;f=i|qrW^DZH-@#&koD-1ojg}x{P#6ee2FX&75#5eii>=H@!nn7IRLyS9KCa-2lho
z)YBfvyT+3<`io-(a`B=+ioOi`$8RWbJ<G<;l^A7J7Czs0FEbgWP#OgM3^Q2?wgA3%
zH<&gtifS2>zPF_tr?tr+)_A)mCPHl2Wc>{F>B8!;^v at r_6A4g=-z7yv={R(e?iN!C
z|034PGh?Nk6!^i(#zj5FyIR_Z=v99%_1I*{m^nI>V<uZuBW4^lnxaGp>$#%Yqj-58
z1 at RF}*0o)IB0_?S20KoG_k&p$@tk8>%P8IpG4}gfy{NW8D^v4>Vf2CA!2^xcjoM3`
zpw!}zNj`C268nO?P&bB`jC|-RH2*eAeeIydm;d9Og|aKd|6 at xrG(5NFThUZ~`_*@m
zhOI+l+nAkUh(}L=gkafDF^`ceyldZ6M%AJAs8|ZkPh8WU_Xx};>pi at Hd5hLM^KG$I
zmKR&nytZSFoFA<5h$?x`9i2NV-3$7(8gGLHG{eGN<~b)N8E(u<`A{5Z>0%1rGY#CV
zG%0HZDXaNd4D at 9@G^>N_nPDt0+ge<va$HK>0Ir6v5lk)fbO3&vs$=j9rs2O!lbCC_
zs4Niz>Y!X5)4){{Ib5<#>_$E_HXBJ)rpS7qX7s#^yd3*uGc{+b!&`~H_)LY7{lHSi
zMY)H)2aTowgJ|`7gcQj0+N)PIiMc>gJ-$|9_VQ|EwKr^ri>wq&qDnm|VVK^FEu3^J
zzacc&8!tmEvXFWKDqDa8E#3UlVOY)K#ig^$IgFCBBY-GvXG_Vq%Fcnf1TjV8N1Gek
z4XH}p<&KO!KYe{cPm_G{u|sRxW^XmLgK?8LkvzpR4l`?Mfjw$(&Hy5~fkkYy*u)pz
zfjapG+7vISgJkZb#ojw?1GoCMW3jgeK0`_F9pjC~lba&-Mw|cau9(Bx+A6KkC2%!!
zw27a;JioM~ZIv><aH9yI`ag*(wiA?fcoP5h_wh$ua``M$os?qIfaGd25 at KM6ZLa4q
zolk?v1-RF`PP<ZPHnX-VQ7i{GG<EYrL!tP#QL at NKP%uzs7I^(kE@!%i$NGr&wyn^U
zLsp?VtJZ{o&Cw-!4cdIT$&$zNVLT-rDwn9El}A+Qq4A~_mKq}SD_l_QH#_pV8uYq9
z9Q5*IE^-f$;H+g$x{*R1gbfu043wYInWg$#Kb&QxD6NEcRcb`rZ<Q+a5bb8htle=#
zb{FMszL`nz`0#Pl&4<221qPG}mwqj&*g&@c-Fm6F6n2(Fc%>JNV^9lH&5CI&lzvQ&
zkQ5{}H57kvM(|L&b{v$LEcNk^zg>^?E{9j#nFUVt56q0S1G?~@&|I-FBQc`x+wG0N
zYzG$ySvA<Br!OAG18<O~3Ri~-x+%e#s9-z7ry^M at C}g!2>it`EibAD9(r8jpvxGn*
zJ70vgmfggoQcGBy)st7P%=^PZIzPT&`pQ9>5ra&WGp*KZ**6^uFa00v3|v8BEgeRD
zW*rffo+#KZR^VhRMljt#3g2V-ehA|>TVv62u5j!)8kC9~TNd!LaI!8wikD((UX~|b
z?01zyi}z!7r_V1nmNjrG>)|i(FUbfzltXd^kKjF81V~(TDSaLFWH5|2jv9r(`Z++T
zV%nn9H8Y2L9!niMz(L#SzCwui2_bg5gULk3M1T=fcCxTju!q38*ViOw6od?KM^Wbl
z;w*hKkEQBK*Tvu(3>UBpsSMpfL}~kkuryuR at sA>g)*HszcOjZXzUcM%6E-D`K@=z$
zMd2WpoX^%U_gwf3yqDsd=@yIi7fB>uEE}ycud-^M;kxozy5k38dj8$hr!k%bfti=o
zu1{~IB(#xGFF3MuH^(|6VyucZ50|3Vs|`!k#zHgKh?`BoS*f8`WQZ=U4fTD#KOEfi
z<NE~ny2F<72(#yCOXjH!28BeLW46QRu_+lw+1+YX-_6XS;K)aG)e4Ko81A at lrUlry
zyBnHS^)ZosyDdUsXdNKDlhTnu`T!uIK)ib8u!~zqk=r0CKC0p=rqpJvC+<QOC8-*}
zX5}hUVNdqSE&dJC$dmGY_GjoJF{ooq#dQ>{&}w{v?UL!I4OKKD#2 at 7M*BVRxVfLzu
zeQ!xw0jK5IERdj0q&a!RHKC<|iQ2YMG-`+v*ib())Dgi<g21cN7NoFJq_0l!`kf>2
zPau|u31cF2jDkqKM7MFFkF*pchQl+f<fP!Hj at zS8vs_&j#*uocezx2O>hd<OpQoy9
zy(U?%_g<6w-&+`jNFN$dHl=z3)zd1c4im;EHH4<S%>vP&BYNlj9naz&yd+4{l8XR!
z?WcaLtpu>)fB{$0U%6Qh)pE)idw)1Y>&N$rUv`8CxD*l}&0i8HAMZQfRM4a&D{F`%
zI2Q7i7toAAQ^RqoyrB<GE>sBeRTGMuNxPBk_ghJJi^dK(v}4ju_i8B%P};2sS+}El
z%?dP*cg?Z%+%c=)fBf0X^70qBCvnz0?lsRz#SkB^Am-F1f4d_H&tF(QM+chz>~05O
zEf*Cn-lg3Pnu3-UV?5;w+VGo1hF->g3(;Xmx&{(9qc~8-3YEg4oEFkDo#`Y5WHX{7
zQy$r}z{_ at VA=29x;|pH*&FKur at V(UDvIj3Zm|XTUC77!qMdP1M*y@&hv}C6x)MAeC
zLglTt*_^njgQaP_w&6Vf@&3<LN5~_ev0_;kS$15i^c*5;*x3Jw;DQ+9Bz$z1i7m+u
zX*PpSqWj7yxIb7GQJUALy2Tv!_ccxWre)u^C6JDp5Eq?BQkC$=JRQu!q=X%EG=%Gj
zqJY;V{!w2=t_#vU>$;W3tx!hF`bzP~@Ah}Af*I*esXEC*P|9Xmv at He0#uHcNQ(-IL
zvUW5E9qJ5yMw!@K at Ge9YoA7vLXR)DDK<2dXsBjr=uRnUaF?zM}lp8v8Yoo|ykH5d;
zIYAW#8Rof=`T2|OP+m&g{khC1-=Bor1o<J}9q-eSf93}-Uu`~HfAz!YPa8kb*3NUs
zT(>{EJ=*@^<;IuK-feEJKl|dNk2asHNQWw%?H5xk{qy?M?>4qZ^K*~q?u_OhQ+>2Q
zo+GvWqbs}1v&_BGi5KCCA$c*s)~r$Cq#dk9>aEcG!WSJM`X;2hvDKC4qiIM8SpsMU
z4)<=$3G54w=I$oE+8w_ix;<bW?!O;IWxEAH%gey$8RsH6ZRuYE(==eOe1#T0_mYLz
zuO1IWHwYx~W^n&k(Vzfg2ys?#j5u|&_k$$XSO5}0*dh#rV~FcFhQKlP#WO+Snd&Ql
zPvqtDV)DiKNS~oHL>+~iBr6c)DnfM;B3%g9pn4&cd$EsV7&dnq7otqpu{369F9pXG
zVdkl%Kn%&U)!o_#txt7G?Yk-9OHZ|cNY;r_D%i at P(L=SH(_3Ho{lUc-BL8^){$X3B
zo;7m30|(8~#dL!3hh`Z7hnH4Hw*m8Ez=%&D$BxrxC5Rl&#NtOda0`$IMTgc%^mLLw
z8wCQZK0;?Us;aDmPMv6lK|5UWqY8_3q{`fnXud4ODKx2;TNoqJEU1W}&RXjqS?)O|
zwR~*nm)|VhT15bo9Nd$DfThTYseyeAG1zx5l8dCGq2V_}H8bF8S#nB0-vo9}wiy2n
zj%%4){7n{VT4s#9_2x9|XJF>xi|8-wNkkak{msW9F}~QGW?!VYzZA{3P8qJ46(Hbi
zVEPlqY0TQcXW^W}6qKEns=|LePe?u#scUsAX&~vg8~vSImC~*4_Ca|y)?|P70=6!9
zWhHv>_5ccgb=6*p^FwKL^{4x!j&%k~QF&wB!p(e^@u;YhjkZ-CN~L(Xsn$!)J=K(|
z_y_`0kjx1Y$hzOYQG^VsgyEnvWMvu;R4C>qkwmUwt|8flTgvdZsc=lcG<0Hgax5^h
z7>)qF2LmRVn*TmSov)U0XAzUdizk&do}T4%!^@*^zb-4DZRUY1t+94XhafBXGmpU#
ziVG{qNKp7>K`Cdp-=z3g+aVIJ26B+z?!O+w3qQV3hGB;j$T`=*Ohp%7;@>gbdvdyG
z=ech6psC)ihcBOe&E`}KM5v9j;;~lLxT^+mhcFDxFbJc);JkPVO8<tUQ3qh+nB&iZ
zN~FA>?dM&MCd>GdUAZM~`K5RbabaTd9a;6Bar9=@BJSeifmzpn>&Cp?Bb_SoXOa%-
z`Z+I0F?KnyPH|uO#G=QKG6m0N at 8gN+^_EEk-J at 1BBk7>y`E6*9C`FIyJ72&)p4fQd
zL?>iR9E6d)JB9)R)>H*wH<&v at _R#w#XI|NyQo9SlPq+=j$BT214(i1=bq;Qy(`{rU
zfnKdic<6uoQk<LFi5krI5*Sc6ot<QL*>Y|7*`Tb3X!;&!d?#TWr|BbBzh^~=b#!$k
zsfBVaib at m`k%<oDlR-YP at jQILp`7BzeE0I_vrScY{+vX^P70C^X%c7GM4ecEGW&Wa
zIH`Ku?!!8#EYZfwx8((*9>^!58--0(hbO4IX(WeMhI_M($w_cO7X6hsRa4={{y$H?
z2p=UaJ1C)QI^60Th_FJ~5o}V=MUsF^RsI5q!3AZZHE~ng1&u$bC{gi`!!(9(-Mlo)
z{Nzq{^j6zY#gN;5a6iZSn3AA-cYnQimtqrwlP-1KQ!lVOm|VEwLls&uZigG4DEQ^w
z`Qb0`xPptly at mSmSt>X9lxkF1d}i`!r*LIEHNC)WD9)nX{*-IM`iJA)f=_emN1z4`
z$_$I>p&7&nQ$uh|ts}?@xCbub3@#cNxrje^Nfd!r91!FyPZ?kpY8W*Gsf}FSnah*n
zI9Y%@5*aHnSvKi8&fvs1lMW5M3Z&bZcr?D^dXi*>Xu?~`!#cnRZ<)SAW`=bHEkP|5
zB32XIh8y%DU-N8gJ(HBnk_|$|4{$qxw?Xp4$D+y=-=U+3y&1ENNC8BYkE-JJ;}|#L
zts$dygvJgA6aoB?hSY5vb+KJnVVy<Y5RnG!%fa^+k*4vdUU^6zBz_C2*u6_dptUvC
z6caaMeDWhv+7L=?A*zVwbVFzJk9D|E^5U~RgF7XWG32=X`(46 at BKTKT;rl8f at R%Ll
zT7~2BeJTq&_p`GSgt_J|fWcm4xUmAnR%AR(+6mLQEIg-8t-E+e9N$`;eW8V`)ajcJ
z`qAW+h>Tk1FKsOyE^WyVeSw!r#>fuNHf027n|3OP`K?(*tk5qpi<k}w-9|ZFk$euG
zQpPX^gZ3xVQYZotkE<bYcax6RJ4ypaZz$=Sir;#yZiHe}b#X}v at kZNoTw^otdCF8&
z3r^?5o>QbxW^BZfg?`<@QuhHO|4cO)g5efg?tei<l3-fek!JlRi8^t3w55Y`yuiDt
z>Q;nU%BO!neRHz2zgy7VlaQ}NI9K)Is*P}D#1S>UyS%>}Y*v3+p+hcZg5hXy16&D$
z8}1z$7`rhtX$fVqUbz=+B_zGi4t96Io5BSn{c!mKxk=bFV1cfS<fwtSW>b=#noY-L
z%cI|)`lP-{)zWKlSd!}ZJqXdtt&p&}RcW(qApi*<q&rP|ovyAg3O25wDl0F)u*MZq
zqsm=ju~|ijqXHy?&xQFjLA#hg?mn#kB%Ch0tkblT{<&D;Iz54&&>AY-=kY9*c}z91
z5Y-OGFgfDC2bqP}$oXj+zveOpn{L(+le(P>C$RgWmfp#2 at D*ejXE!r<dQ#!ITTSbe
zh%TYql9a3)Nad96j~6$d`OG9mtVje<#kOE^=v8B`>E1)@>qfLB0E}&NRKNsGeooTu
z#;>RaMb|ejdZZ at P#k&!~F^krwI%RL56KOA)@a&hv^HjJbXGLJh*r*ug;|iBZUPuTi
zyI!HRNafbPx^6Hv$zX8#I_CB7wqNXQJ}02?Y~%TMB#7jJN1==$0W}Q0R{=TC;$Snk
z14q!TG9}G1ok-XiTtIZy&cn9w3x}nMIy1EObtK3Ptg0>`J`)85q+<Z|7Nto#{c50`
zM0vpoPF2^?WPRv-1t2F9sgMh)Q_eWIC(}R at ivPsVx_$k~c4o?Q-A+^&DM>2RL|KnM
zOMF1^$oz`~u;cFL=AO1!&v8G?8B5_&TbNgu!KHC at +5E%k*I$1f{b5N>HuDl at a3i)^
zG=#Sg;RjDhJ(<Z09+N0R4>%pEGBpbX-~-7X0|EhXR2yYDzstUJb?1T)hZ71D?bKv!
zl$3-p%jbo~UDk(mFEQZVLp04Zb$hr<e5FQgYGs_L+Ive_(p8tzI;K(%iHD>pArcfs
zpmlk^rcuO|0VB4sYi#Tj+~6v>E at J%79+Vz<K&@S=$Z(flbhFO+0ZcL=zd-V^W=clc
zCQ4f8DI*VoYV&|bqti#I+CTVQCXtGPAW?jSw;*~!g$Q=x0ioHB1G`g;{gs?e0=mR)
z%lxSIH@<==b~a;2-L%3DS^~<ngh88}tq~O~ALgA`*Mz^%8UJJ7W6sHdcy(<tArDc!
zrGmrSpx!3)86qcZTe((|D`hi$e0Y>+U+AWDGNU!jNK at 2vB()moW-G<CV^c0PNon4a
zN(Mr&g(JxCAev&{R(caU0rLDqb<h~d?@ve?tK~Z7h9;qHrq>43EE?0Ixnn#tOc+To
zXB*ngDs_YKiLNefme}X5`1!~@MpPLMJ(T5M$--CHNEw^gZPhn?XnJRGWdTbJrJ at zX
zM6GyP9P#DgLAoZTRqauV$Rpy^582`=t^fUf#lVlR{LX<yG9d~$^=K at UTte26-!-+n
zH)FYfE>lnI`P-3{sSOAacAt)w6Qi4m+agUFRV1(7p?AkBmE8PjVZwb7ktKR{WoCTQ
z=#-GRk|CdBAVrz>U!IjR?I53?6nRO at eC3Xl_~SOIuO<iFFmi_eLQv1Q2%h7<Mil_*
z?7uFg(;tOCBe?|lz3 at WCprvQttBKt_^qXO*4JDkXEBx}UQX)g&d67wbVfR{YX&kAQ
zh)}Y`ltOY#cj%fG$+bwO<<1t}6FD*cktS>gj4yzDH6a=Vvwa4k?mQz$&#yc|_Kvn*
ztiQY!sp|M<q)-{(IRP$5%f{OOgxyh at tA3+ilDs8uK-PK(*)i?$#Dw$oy*bb!t_4w%
z8kZGBhpp6nv{3UQVTksu4S9xWy^S1&_?@o^8LJ`#nVFI{kfs80L1Smz{~eF{rM|Af
zT^P53688t>Vx0iK5Qi|BN4e8>Z)m|n@!~bEBoUaOt?lLJM7*HuNt;Ajj3o*=N=@<2
zD6V78OzJ^Mid00<3`kx*Whsj7t6mw)4UsWl7+|Eca;>n{HY+VbC(I21(b}Skm at b>h
z?n>rEc3ROPFXRguc-tI~Fs<}e{LpQ9;T2M1_gsdE9K-U~T_0bJR_ at +i9(_lK#lf44
zdL8y?d$RZDM7Lw)t(){}qlD{7)fYej8BR-(iO&+==Ic(bGE5}aV9jJahe4`lve=ek
z at 2TDc1xi=QicW30%lD^Fff?Hoqm!Hty#(KK at gexz1o#~O0C!%s(xBT;OKXA90tIWL
zNCpl!$?$tLehG<nRTgGuCad*jG4OQh1qLJ3-q>HU_8eZ=7mFv)&2xd{LsbnGA-(H@
z-?5m-k%?v(C}3!0YBc7i;73Y62P&69kV3&w#|^c>$ie`R&qf`H?F9_PhFxWC4R4Dd
z802zAsYzuDZ$iY8EG%862;8aD88_n(V#JJuL{+VV5pAR9bIfc=%8_Lh6$fWbBbW&%
z7eUtY|I0OCuwUud{DTw&04IPxzBoJjH~Pz}xyJkpyQ}|gJ^sqzQJ%}KzOYm#)R2fA
zcQde~#ZdC(m>2IHcIc+1^uU1bPB9&ch!~0zbBzRgF7_6qVsO4RMvKt0k+dIxCu%au
z)(xGKp*_T!pLvbfB!^GG8u{UAofWt^2|c}8CFY^S&+^2KP;~P at iR8PNgu$Ogn$I;W
zxcYLFqdrepvHzdFH*aX`$kx64-|J7YL+BtoAORj at 8*B{NCh^pU#GS at IIsyd92+1u8
zJEW8Eet*weReRDFV4Oau at B4=C7_n8m##L(`$c6}?J>!-$^X8D^0aznb8B!J8MtZuO
z3b0!VPn7|ZU>KeQPq&k;LXlQWD*#AHD`I9h%;mD at AA?~fHGA^1H(QS#=9x_9C*U at z
z{gbYsq|AkFD*V)31MY&fSv&SKfGGBBtTfb>s$2jgc*7}~&qP>`3~RYsvQFQDKu+VB
z3(hao*f^_eI?=R-E)hho6cEJf^z1HR1_-I=Y at N)-K-e%qe!))6JV_mhJSZToJedV1
zX%Xbwh3hfY1X&UTjB{$lXKWFQ3wK?Rv~UO=nHzK{pRo^kwdYvwV9pEmX2Hn#m7CmW
z>j_Q*HostX6q(7k&IRe1htzVVl5|jI1;VN2Qv>Arg;$hsaD*6uoCF)NE^<y$0d%oD
z1i5#*c6(!IWKMrW9uDQeVLir|keShDmo`z(fkT)^Qu7k}+-?lnb|D&vDG^BL5`dDD
z5V3=4 at fcpZN`T0|19I;qk3v&m7GnVnjYdF}u-J&$cKCoV9Tz$<N!EY^0!gJ!klO^E
zf{oNuO0PxLGe;QxKMb at n>l8%66*}`50U!8BtZN?94fCTp<yaw;7sI?GJUZgG6)*+c
zNY}s6m{kSmCsiL5UNX|f?STOZ=Jtg1K`PrzX5x-Gny at L&Sbv^h-dS#pXgXM}RwL)(
zVFm8B&n<y{Nmmk?xOBU?oTidD1skIVf*2V)dlSjQ#?7`=0SlVG_5;XCLJ20;5O+fg
zVnYy2z!HvVcIIH^n`<4)hs_gTn)y!T$k^C8dRR@~$l>vYIlCH(U=i=MKy9z#_{ax1
z?8L(kK9y`#oMZ at G_?{};DVOaGD=BhO^lcN|yCFySchdIlEDO#)*~vmf8BxWA5j?44
zDESj)9?(w8MhMlJo>M!A?$Fp=E862ILhBD`ECtm_`9qjM;Fs-y!`z%FDo)RzF__OQ
z9CMhSEil+)U05)P;X-KJp050~o at a5yjN|BT?-H=W)Kg>}7L49SBqj8SW)c_+iA=J~
z!Bn*B(ox#6uP7Q!&hp1QD#va|Zu(8z!lbRds0d4FVXTYlv+&KZ{scGKarm90dsJ-p
zzPMNea_6KYx2O)NnUh|h#<gn=>rO!kpv6rKjx!JktKS{Bx80YkA7C<@WPp;aY~qt9
z0mwAO)?)n4oQn?|hAtEC-|pUcQy*kDiJ++4>;v3K++zIkS0WIE6Lg48-v|BaTmmc!
z01S;YeAuoOH08}?8zNM16ezqz7g0%Rl{W*7nkL_Fq1-Vl?(PaKrVzWSzJFoeR%L>n
z=72O2!?gi)jWx0r6n9>B7~hjnO!EbMO^p>#WuH8L{qni|9;J7Ih`)Kd{(3!GNKo3Z
zyjV-rHhH%3!+J9F*X+#xI+LB1t#^D&nPJd3iNiHk%5PkTh{6rzc(lC{=@^Uc`)$&*
zpNWm4r?6MuKx_h77FX-jv2*^M<(Ai)%~BOmth)&d{h4DBQkM*2!S6~(*5AcgJCNoQ
zG)*a$O56zaNTxDviLEkEig*R9;d-+5bUj&lw7LFbbv=3cnDnqKtLtQV2eszzd&F<o
z8evb76 at a`Gia93`XPfzu3dPKZw_vPwb%d7fn|Qsk7omtYdXTo_aMBm^7(>Fh41-GF
zBvg3P<4&6S%DRm7yB&;OQkEmx+IP;a6^`8Qv-D4KQDVGeP at w_eOjsB#gMu)>S)76N
zbLNm1fg=j02RL?HBKi!`vZx&0mBo at 3oVrrMMSf3)EJqVxiOFfhzRh3vP6zI^QtOD+
z(J8#P#aUJ{Q1on>k3yPOUp(ngyVh59MB_Xv&d^PHl~T<FCz=KGqFMMZ=QSMUa1)lf
z%J<3Ex4d${p<i44f!Q6?)-sA#{nGQD<-eyUF{W?x3}!|lUKz52akDJr#H$bl^Y~IQ
zIR`@fnKOVtC;17<fV=p!$pC2ci6*;P&CrBX^Um|)&N_0PUX7w>C%k`<VN08hb&@WI
zi)c1E$CB2dPV8#9_g7;?2#~jY<!u~#7dM&Vzf`7cx7+?b`KvtG#Z}vL8%~<5D{sLI
z+`J=rxqqoNg!TS=LVMBRz}p&xiXpi2)@l*|D-J?K|M at H6CUJs`5x=|gHf->}VxMVS
z|3bZ{YxHHmh4~%tT(b#WaoRb8Nx5bXZuVp-wXMrUesg2db6n}?5!-^=?S}G~n4p2P
zq)!{$uBvIFQ?{!q-qZ4gnW|m*giFN(>pvDKm2_K{HawTMZCO8#2KM!&OI~A8GNq`B
zYDpb*`#S)S3Kn6?#e3^+s5xc>ZLL3l_42jCBP~92b2iz0`tnUejk1+TE1T>5{p{uH
z58+EGTh(ROmtji>rk*i$VPplTiM2MRb;{A19WAiXn|yB+JKf4Gx$Ll>IifAx=1MCo
z9xMY_Pm)&!p8)6O8Urc(wf5lE<-YQzNjqH at 3Jc}#z+tKrZ8V|ddgRE2D$OapzL5ww
zVk=2kNoMu<i%P&SKc+>pEWr?=ifcGwfveer1tF}+Flh=Y?$c@=l>#U1wy2~hnqQbw
z;K)*%TAo=hQoC~i=c*H^!by&eCkG7X%c at x?ARTRoNTE%}BMpV>9ZOfm<A6lepfDL2
zwYDRy^ps@?wD9VJt><FlDmE9wvIPXbA?#{o3AdoHrZ-|166^R6&3&*F2svRD68YCG
zt)s$BS#U-4ib-D~cmnd7>O$OhCUozBAy_6LPoQG_j=$%!tNS<`6v35 at 5HalPvQ=o+
zZ6X2kA~KAJtlcE$8lAGkVCn6`85H`VUpI at O7$>aUcFL}r7<nt?9%V1{DAhPNN$Ujb
zuDBrZY_2Sk^#AOjS{8<_xQUNxSKN1T at V33|4v1No$%=W|*10UtPBAYJq6)`ilhL^0
z3=BcKmL9 at Zc?T;q=W;iB4su at 1>x)*o{2RcI^6qi2Y1DM&WPCqkxCMC3`8Q|eb$;$c
zZ1*@^&Fb5Sv#cUK%IuboR+5EjZX}?^&<DwZreKLoX;dUtL{71^2 at Vf>&XTXoo($4d
zs#s~`@<rGU at i=wNG8x*k*D1e(3KwDl8pu$TYvO@{)~JkQR*lzBlO2P6p>i={z3a*Y
zA=Wu(c at upkoh&{K?iv#8utUL+=iDMnr9H4s6ys?KJxrTYl0a&FBg5)Y09!}_!<adi
z`(&QpAWsLYLIQAAYP6dH2$pB*+T0+8TM8xRjN+E)PMA{06bjl^8(W_C#Hmp6SHcey
zMs+M{x79V-g<>VXcwdSZNV6?d?%R>ULA#DSmgbEXY1l!l4Q5$WV6Y6)b(IOn4R=h5
z<Le?aBXjaK8 at _n+rp?K;6o%N*vd81mTI~xeEkqkOVP(pcCsEVjo;CXFf-TZ|OW~oT
z9F056u at 0*E0LO5koAk(-21FzrOYlniTBYx{&=ah6&MF}sTDWn9^;jon5|&H_nx}da
zom=gC5r2bh<u8H#)#_qu3VAZj)ElGY4_*k=>?+n7L|JC`QW(T#oGYw5H_RuSFp%W-
zJ#6DJV29m&qe)3nV>b}6`QQb_mHx#rc78T~oZ?cTJXWFyoqERI2ls*kZ*HCp7x6Hd
zFf&C0rU?cfTO=eE><r93U$m|@mQXU&N2_$)I&)$OSJAHpvY&5+EvhDv^V=0$rPMSz
zZI9f at 1)%lRyBwMc3CHOqH`I_F8SXpD+_S7x=oeHBDDY!hZBo(xSVRYcuR1!pGVg*(
z!>&2DC~UlWyKpjOzzwzbbiD;QdcP^IO<6ls^}PvROTAgt%JCfDHrAIzCPR^?G4ENS
zxqP<Ej`ir9=_Y}Y38oPCQh<cY=~6$maWWh<tQ;tAoI4GcS~&Bq)NHL4;dcl1C{(VJ
z?zxrx_+sPlp)#=h4Q04 at uV0wQZl2^^IX+^O5-#AC-9wg>^uHZ^A|#!^Q^3o+^DS1U
z{)X!D9O`xhk8c at m0JKb774e#U_6+;F7lf)Y{Q^!b`Ur=UqJtPr!o|ekS!(B+4%2p;
zpKzJ{twcTnNu5BDm;ow~baDsUTa<V>HMgL`9E6{>*FIaD5bTXvL+#E>Ya~UtVNzEk
zZpMrpuJ;#;Gw#lASG){|*JDWm2!|4tO)cj(DLflb7JIuoS*$(2ZOLNo(pZfoF*Q_`
zFjb5B at OiEgc&U$=(;#?b?glUAU4bZv$r<-C5Fyf4$Z0g8(#UYX-fNG*O16ff0QUH_
zwTDK7dLuz#Jfn>S1=~{#%&?7Sd?7JQ#8tt*K7y*FWI?`io>=_u?g at f}U1iCk=Hy^D
z4i`0p`qhR>rJVDp78D6mS)AY41fE)s1%BKgoE#6Yj!B}ot5dDo<J+WK&D at F1o-U22
z?Mf&WXYv8bJ2Cx6w|4RUG5vbrZ7kYBBtEv08;l6CdvZ!oGj>I~m{f3CU|R+4t{f(D
z_D?S&|0begdmKA84%7uLRtvD at X9cHX>L800#!N;YGbF6Txz4aZcjwN{@8%Y=B<3Ah
z6L*ZWGx7vkX1+G=mJ1l25p&a-jZo0SP%lkdVD&QK_Nlqz-#UKfV1o)riv+2NkckaM
z|HB|!`_rxG&m=>jsO65EzU~{8diO$>9~c7b$&j!79XKDQNo2K99Wgp?$oEZjhcxkS
zR*=Oga}>g1-hF;=l>e<TtV^Yqnhs>16$T)-3r9@!L%~Nns-mL6mxTx097)Syc!{}k
z@}jt=i%1t|JK*XU6FIG&6D$uRv0i3XKy?Q`>BtywSG6N79t(W{?=0QKc6#g0CI{x}
zWfotwFkW9s7wG4pk!B3spt!*XND;z)2TjIO)k)KIavrUZeQcIpBB6ogpr*Gur8~;t
z?2ry)2p!*5Kp^IF at R2*C_~GcYkXe2{8=SrQph#yx)&)qN{KEwWsF#(#j4${@U1u0=
zE>2jPq%lQ`i?#_#cYw|(xT{1-KJvauk0JkL4q^nZx-aoeQ?hU)l7-t!-fP{bNK2|2
zdwiRmzGYW=PkzbX8vfJF!&Q(}!*JGBMq->S1dr1V8UJ?iS}mi6ExO5AT0D#nwN<he
z1{YbAt+kNs-bMbR-(6M`p?#djJR&@gREVf>Hx|U5;Cw1%Q^3{Y>OLxB$Pn=GZX-us
z>U>i#oqB_3WblF-Wkd*4+&j{P=cg;8O2!f9AhQ?(A{R~r&Ee=|f4}%$49142YeBZl
z))sJ7%<Wx2t1xNBm7P77`AiAEtUK8B)Ha?)rya7*OH(30T77xB0k9hn4hH>`56#Zr
z(jpoCZyUk_FYPT|zkU0LYIfNWHa%U&@LEKe+1>~U#EF;+*H>e)ME4sU<rNFbH32EQ
zhJ*_uq- at 6tTv(W`X+9B5`QGJfnHkA=ma-jCBNq~lSBX)I5{S8Y=zBaklY7L)2P?~A
zjlQyp=C86G572^mz<k~XFuOI`z*Ea>*(3swVXKXFI%UfE(n?DZG!{OM^I~_Zc`<u@
z2VU%rVO|M{Ua%yW>MfKvHPjXQN13ajG51v?Z7L)+TXFeb22y6XkiGH4Dg_f!Q(i?v
z0y}1G+94GSExk=6u1_seM(x6H7~2;1>?`tPtgZjF{_N$e_1Bxp+#Esmhl_^ACT#o$
zS)7#r2fWXwE(Xxb7ApipdYT^Y8p7(P^x&qc at +!egNa$wJ&A>&#(ZP_c>JPRPMuwu_
zV?JkANSZ3=H)jw(wEHlVrgC8fIzqnUybPCyZ7r9HX=NbUSFDqn8dA|#lSK8=a~(3h
zr9d5MRLZwV_h1Aj#jiH^9FRmr8sd#t5V=k1m#QV;s}K?q0AW at d=nv7h<+-Y)Mid-c
zu&cAqYUuJ8UXh9dw=eqeYBHT=<=?b=38}AQri2Nvv!eaZL4KV4byTC5iVgN=v4Fj-
zHPIAGk|VevCQ{K;tbL>kk+vP`4 at V#K)i++!&rSXg<zZKC<_rzW;QpMT$rfi3hZU*c
zbC;a7=ks<$488fcMBjUHnxg&qCWh|PzC;jMmm<D(B>3xla7Er(EIloA7=zWAOO+Bp
zQa*0;<&I at C?z)ePpvtxYNEe%`{0he0u at A-_ndB-6mf8o;*$^0 at -3!7}$Sh)|H)*J3
zX82;kbOpORpQ1(UE{h|lMNeir_{MaF?i!H0r()Ss1CPA^VrWzOXjX94Lsyg=1BoQ+
zsGxzd&JN3CU;i$4IF{;M-P~MEX8>?AhLo!CePa3{y;$2oqiEg$6F#JEQ~V#KH)*Q`
z=7tD!!rdRF{n1vZr@^dH<_`@`>I?k at PSxR8^G*wWeE^(VO6F{e3HCr7WC<Pu!q1<g
zN8=evn8PX|IN(O%xo2RHx>6kbTyz38jwaol0~r7qi3^}=?APM`Ctu1=`ien_H`?3D
zwMlz%oo?D5>`6gWf5E at XUNRJmiy-Kx2<Ty9F7yeu(WUIjhV71N(8J)Cq1j+~32xWo
z)QoysFj6|B8d9CP##{~aI9u+tSz#<E`R`Ss8Kq?_PS54iRGSKPg14o07m0u|0gg?P
zt$U#KrAD_ku~p*=pY;!l9hT_g-VVv2(%EnE-rA!la7_S%c^lQrP`tNSSK-L|;H1I3
z=vZPhe}ULq8~q1C;Oa!M$C^}=?o-scffk{BxeF{NBO}smSvnQe#TE{(9>Xs6T`)Ur
zqaxH{lrMQWN%<92-b1q{Ftf8FE*?FZd3Q}y7brt!0{uv*6|ywhE*oObk<0RYwq&f)
z{|Sz0)3`%Av7jW_l&e{?c}OxesQ;?8jys)JQrq0xoLiW`eH8?&s3GbWrz0bWl8?eO
zXei=%(4O-HH~hYiO63qmVrzu)=Yvb!(2h7X?1mYl(%zsD7 at m;KY;QlomZ4V1Xa7Kt
z**&(ni)kwJZw`zK-Plk8sA7!uSMXrOqONUh6&WyGtMF+cQgzior0kZA2st?5ZEtX8
zsp7|SXsd5sKWtIJpW^B)eHms!0{iC9{<(5xj&#WE at GyBz9R2R0GAU9IpgX!Zvd7KV
zsEJ-Sep3g}E8(zh*EJ8+0#d`_G4H_BMu8=?lXtMp_jGNn!oqjo-4PnV!HVcZGgxXS
z%6-jML1^dfH3vPYhX<O;E>1WfFbjoz(Di at r)^}UE`FI7PR1Fr)C1Dcs5>*bI{mw5O
zpBM;&z{s;;dBh!@t`#i~?gx3IKumM8Otp4}gcT$- at 1DwdRx|S=d(jzrC>9$O%)3E;
zlWrnxgx32KNb2z7^KVY50(>vs`u?#N+du9>Y<3TG>od(AvvKzOv6L!#q!C8}7PNDR
z+SrA#dP3=UXLvPBtCH#>SAW_xF)@VfN at oy@4cIn;Xl&2oVXCOfT)N5mO at v6v9h(@_
z^lMLV0J|67K4V9OD6g?aiZ2O6jvo`-_N at O+NBgxaR1WiS@{0jW7tq(f0flhfP+Rd6
zxy_>hpz@?xm%>)ZL;~$4 at 6%G0v&oui`ve(lI5uZ=`5HLI-xd9cED<!5KU4Om2s)QC
zR*kVKnyc+wf})k%Bc1aY55`-O_Y(4tkQ~m%iE(-ySsi9KKgBaWchg^k4$yg$5=(wD
zx}3y$@3cmX+H$x9ocK#xklfZsmoSHa%->SULPv=0>c;uHh11+>w2UyZr$X+emP9?N
zkUrzX3Vh*){KKVKd^KKBGeI!xe`>6?gY<a~@*9kA1tONzUZ7~UZ6rwynfo0Q3*%f2
z7hv-hCJ+drh#QSg=ZuF55!RPNFL+ycUWf}H)d~rNy2<0#$w%&n9aT$D>Qpz-6CId)
zHg<+{$6%NON{?<l;7Ky8fcxUGy7fpbArDRAy8|hQJwHw1`PgGF?~^vVl;jy!C7ann
zmrt4z8S#X!sR>%&JIaAh0c*#(03Y0i0^tc-MDZUYDF%`H;{^9avvPjw{0iqUoFLTu
z1J>Ci4jl~A{|E}`iK`G)ANd!W5;;)GT~gd0cjANB)heKxLY6pR1sC(UWeo62>4tv5
z7=LQr;%IT)A}(>Dj?we&?{{_&N_|HpBj^F)`i|!ALPUz1|E8o&;G38pf)zFKmVZ|N
zz4nLENe>4pB~s7rWgNhcN*x=w2CBLdH`Z#A`b~t^;549oaN*1R at Q>QP_Y!Q9Crmcr
zg9H0$8#nB<>bu9S`u-p{x`hboDre^w2s9;u5Gw1DROJU+>EeSzybeSXxe0JQvc;k-
zW1T!6w02HPtBhvr`J_QQ62egu#jNRev!ESp10lZq8mc~SH5Q=E%NFX~9_)(+t-X4_
z(p-DA0mmsjkagOL?0VRdyfd#<*lZVInbEoe0=Zbili=(X_dJDuzgNz-<caZ<Hu^ep
zhKJlKCUatR1mQvmfRpD+*F(5&*f##EV+}dd?g5fT at JKWGhK%+c at 82G+hqYo-p*}`1
z at AHk}HAT9H?_Y<UVTnDnkx{>QlW)FWymjYZ=dkt7*Vk{{yyvIKWovachh4rHl&(R$
zhkz!vw5MjUAO!Zb5v^(Qk~xwNe~FuvjEX-Z`hDzbXd)N{Y>bKufHTT2Q<(i_rx_-m
z=U>Fg1`oO7DCeHT>aQfVn0ySYhlDMYsvGv<2}O7gzlmncG+(o05QkkDyJOlJ!DsH8
zKbJIMIB&@0YiAk1Nhri?$8ZgeNY2vYQzo9faYJ3Fkw<>-(}OkmdD0 at BxtBa8{j$^;
zLNtE&aDr<O4*0eRLpvv(u4#LM^+W at 3%PkyV4gqLjUF0&OrQBA-F=Q|1ii5ke_TQ`o
zLvVflw#a8)j4UH>LM>bceJ$C@*nS<j!!$y>aD+^9aY{8MzPmcNRSciE<M4N4!yf at W
zJROu29bzr20O4>6aV-s9U>CFe?_tr0aQ|Y|C9pNnU#8(PajQbR0wQ^ZTdM8e+T^7D
zb1<p0UhVYdx~fBX^YiA$o1dSc)?~|M%i&6C^`G4}yl}9shslWqcHpOEMUOjDb>sne
zAfx~}X2n;Oa_Gb?;1Tg->kjx13xlUzn&mzeF&%m)OT=wp`t!+A=dd&ACqEE!yGQ(&
zD7k%fI?=1|pS<s&COHP#)Zc%|k)`)70z%uI;8CmhzJsm^!kB98EVEIZjqvHKPJc8=
zUiXK;wnnGi2^(qeI%*-K>=PMbV+q$lKW{pi#iB4Iae{Q~M;#DXk;j$4oW@)E1y*j;
zDWDeByF==OBcpy3#|m5OKoU=D&JlP-YeLYiU+}Ayye*c=7vi7m$M%)BPP*+P8UK8M
z at ifv>;bB>oPPk>ImK2u^){a8(E1=56DS(v^wuo3o<}u|c0*e)O_%&&>$~rii$@WQY
zT}Lv`yqpS8UHis{It!%(k%HF&m$d3WdI;9|@pA^om!WSe>>g*=xJlBPfS@&g`AeHd
zT_^mq%Pm~r6CZ46fE2r5Z`<EGfD`aB*^}zSJR?^)gNvcSRE*%7%HLN*Z@~8^uj|UZ
z26hs7b$9|V(dpUH=SX!qH5E#yJ~cIw(Ynd^1awOCaO0}RFa~6`k8X-vW at 8+~gs6Kg
z()$!+gcIoMQucn$UCJHgwtc*kQj<+eC!b2Mm8zEvjIl&^lP#dE|KWp;&}+~Ca*+jC
zs8pG$J752R7ye<3A%95Os-vU8Q=NAwQ6;s93OEv+E!J<<=fh>q?d1^v74SCda@*9>
zc5+EXVK}nA!*5zrgPeRb{I%OTxR(l<uiMC;LkO9R%k(5^S3D6>ygHN3HiVT545*2S
z-D4#>`rT9NdNfC-dOB|z8JnEvp2AWhuN1L)3TZ3J51j!D#{S39(uAi-O+ZB28A0X>
zSHWV5K at UQasT~%_X0r-QA#08Wrb7sx2{7PnDn}!qkJ&4MjWmL;Tm-Jel22aVf4}G(
z7o5ckV#(brR~{h~B5QT}NUO8SYpC at Af4v6;{Gnx<TOV|e2$e<{Vb2MUm)8}i12I~W
zzK-aE*(<Li!v~#69wB-5_OKt)ubjpnp_S?$;wuqR;Ul~z;S6R;n8$ruYYn&!vsa!g
z(djz*-O!pG6C=s-tx-H+4{}1NVGG#^o_Fn#c-PtF2V*z)lcz1fnXd^xMEp#C=sL(?
ziI~0e>;!8LkNQV!`m8jD#2A_4kW{h=Gmu=4i#zzD)!};^3%_BmUk|DCfR(aH+&vQ&
zA8en_UU`HfM(hTX+AGr|XVZGxYT***D0~x-wd4M%?|;oEKc9e`pmDrBdqud?JRks9
zc&X8;goApEZI>j7%>dOW*&Z=1u8=Wvz at KR7If%|lvU$QnC3f at lV|$kk3-@#jc at 87N
z5j*~x8t9#43~<N8_f%bBqg2j=H+~%SfthC~-*mic;4t~A9`@utG@?$>3(3`J_^jQY
zy|U6hU at AYM%q8pUk(LH&C%!QGiFLPnC+&}%!B2e4kfg1p#z~*nzoJC`b#4U<!!d8H
z65WuzX?13=eBU}c*%4!Klpa)^I>iz|#s`Nj4xGL_sIULgIp9o3*?vA}z+Vqr9p6uA
z%9WRp3<f7nrrQq0=lukDisds=`#iJ2+}strqGqVE7<87KMo#)3{{Umw?ta3-p*_I9
zVv at _;8!(F`VcbS>cLO%e(t`t^b;or!X-;Aq(q~Y`Wypl at T>x@>HZsq3k`Q#!7 at Qm&
zDiBLHnCM&yj#45&lO{BZYai#N)-by>hWXUB5;U=kPGp#DkQ<DcBjsk}Z4nil7%)-K
zE7CP{pDA{^;5_K79uYZ(bqFJ)mZ!ulF-d at Rw10xN2`CAsJ6nFuoL*%1#49Cit8qY(
z%wX4p&m&5`&0YI}z=3_k$E~Be?(o>8WSI$i2XnqcT?kQ1vr6UhU&b`0svRLuOSMH~
z>{v<@^g+CB44DHNM%64{hisU5vQ$pAx#E>3hg^9u<dR^91T^k^fj=4Jz^5F`xxxY-
z@%_Yj?OP}dHs`n%O_&k8E}-;T&_<RPk#zSuZl1nAC-J?8yoSg_OvNvwIdikY^Cj|Y
zN{1jloH^8E?^a8h at 3|;O$cOB!ELwRw<%ckb120uKu_(cU08GvRy>A)o(;Iw>)`Pp+
z7%O>W9dea?SB=cr=7fDB)=q9vAzzu97#A!XZq4IfwDJEWP7VtKbPizze<rz0Kmois
zP|EZcWdU-&J?5Ym>QZL0U8#OV^DriVF0Xs_)rUDj_Smv$?~-LaE?x$rg00QXY|mR_
zoK`94!^UKlS2IhSZ$-wggn__%mb`aPN*k567cr7E*U8AhR*TnsC454{#Q5WOM0x|W
zY3Ni1fT1%3!!lG5=iEcZf`%<RcgLlOGKk<3S&C<}Umlrp%^Gz0&$=+upw-1PUv+Q7
zn1WZgRT;c0>Ndzqnro`LkOP%Rjw_rT8DCY`!*z=DF=Y?XwR;pzC2+r;;d|{YS^B#X
zvVzxBo*l^)Q-~s|pA=--u9LAg;W`17woSovDuo at V0<JP)|JOan+n=T at qQgZLuC{c1
z1cg at Lw7M|kwt1iIqh<?3wb$9*%ZvmSQ;zDRu#YZX1pBJ)<sjr|PR|oq7WbQiW}L>8
z)(-A+UAQLK#2>U4Z`{x<I>S5l-suTKksn~%6DV9T1w`!W6n2#lIZPue5CWq;536n8
zY|(y<ojiw?j5n^tN?Ly`B!7NIcG4Y>zlY)YVbFroV?JX)0n?KMR9dhI&pWUL-Q*?E
zy4Q!t%8Vl^C-6hJO>!-GI2$g2y73_$sVT&{{m?mr*X-_e`Z&D=Mr5^arVSV(4z~+G
z2F2-r^iDQg$Vx3pjeIP4|NDL$>)8o^!XROs1Kyuu;V|~+h^gbMr)14El=tM2dn!!~
z4QxtJ$Z6PV%ejU06h2AV_aNlcmAv6j<q>9?#>BZxG!YF|(y*?p*8|OgL19=yhGTL+
zO^#P=yCvfDyN5r#N@`eOcStqjey!NGEG72T@{{l>b*xxU9_y~Y=^S;)L)KyU1v}=u
z2VyzhRooSigWD*cowgSF$yaF^KE-ZK)u6u`Q~+=goLWvlO3b%@q^wTnY{*z<yoZud
zoY at L4FNbYdsMO<dt}9<?liE^88`JC;J(eyyu}49eZvJ)g&TdCOFn?VnGe~?~o}=X~
zR^oPw1rb*;z?zRZjs?Nr#m4V~np3#%zPm0w4@}E%hs4fpB$rFh)3O+l|2|Y1OKPx_
z^o)|2@)_gPl(EpVap(LS1$fH8Dg~*qk0jYV0v9Y9!zr_mEIZlhh`+#(<`|_UKxjY*
zgupsvPSL8;C0#8<AV%MTGmV+`h(gBBVg$tFO1g*+hD7SaJibvh0Smk29$`}@DZ`F_
zjqiv-bKI5&0F6 at CJhhF@lYU#80h0q--2)u2Mu*@{wgjat>KJE+4OFA=nfaxCe<IgT
z)CTN!xyH-|FURVW4Sb!RY$UZ+cVm8ng-W>sH=@OD{D4X6m4 at mU_YPh#rVuY5IQ0O9
zUfBAO6(g(VDL5E}Ec;@6Bk>N4$MR!2Ei5~XaD$-F$=T)3YSrj9S{zm$KaQUn-wV5`
zWCF4?_#kL7oY7*+s^4bOAD5hkZHV1{jvu{$@4&7<^|0Bf@%acyi1dK2onntT_WgCl
zW;d#)%s->{Roj{lmtHpjp-fjLzMEYtP=ldttVgyu%<qyXFS!&8Le^5E)M6`f!@~GV
zBs{R6cGRdClxLVf*-mLXcCBbcaIu!xi6YkAAZ{5{!8)|g79xN!X8Uqew-OK3E=AQ3
zG}!O)2`kx`&pD5Cj9jvh;+HK`gTX}ULU;z49IWeBGiO<4#EH|h(6m+&ntGyG+ at KIz
zz*@#Uu|tMGzX<BN-z@|;XYKczzVj at 4^QZEPg$k^xc{atwB1JdfwMUT67(J9Co3A4P
z5H}PoZ0dacY>2g*O4}Ao`bgDOLB?Z$Q_Jza^0YyPDDF`B$bSsr>v~9ZgtgKn(AcTa
zT-721w?Z)s6pRP$CN9x5#ktV`ma>n(%~`$FX}S?P6GO#XQg`Jk@~8yQ<+0URk_S(b
z;HPg*k!|F|X3h`M)P_bW3MH<aD<0JaC-r#cZ&S<slhhFD;D37~$mz;ZWtI_J&`ZMv
zjuQi9WIVxy9*utR3c;JaLI?JWkuf15<f7gXS-kA0f6>`VuFJ3`X1yVqGEg5Gs(Gw$
z%R4B%A)I0WfT~8JEP|a-q2sa>@zi8Z^eI!z2uzlzj6cewhs<W8Ar at _@S$N3;I2Vvc
zgyKkH?1FzFvn3i85f{45u$;YE)fE#!ttZWq>32Y*0p*vwXG|gdtjk)=ua`Pzpb8Uv
zb^(yi+45wGGl*&Pp$Hz%RvYi5M!`Zj2Ae_!2YXW&LIO|LnoqnC^sxENqlR+P08iGE
z_$`tW!rQ=3g*%?b7=dhq()|%S5YtkL0t!OSGa%id;4y1VC1O?Q1BA)yPB<r8+NCFJ
zi`A%P50R&OTBRN?cn_YyVNwm7f6D-8-hNWJsxY0&*H2#jn9xu<6MZajq3)3+#vpK>
z>B1w^dAa$?F%%0c|CZ+`o$#^r{9H>^1wF7c7t&xo at +Y|M85^P*%UbJr&+1Q-*kCx4
zXm<H&>205yK9#2 at 5`5B=;BRgsqRJtwWt^2ljwBLVV6HeUHd`eF6j-GRe+diq6i#Qb
z1%_|BTMPK at Rq8k^CM7!_<bYb*Jk+{?$BWI2cMzb|!lDv5#G{*zo}D+P9TrGo7LMd2
zUekFFhh^zyV`;MSzf4eiYN6Sb*xCSrlcZ87qDST9XcawR&RFo&vi67fRaFc-gF%)|
zDn&6eM=WC~FUpRV%5q<l5}1g at sW&$=Nwm4CIuj_orj|E0HqntsH|Sg&1U7Foc2r^|
zja<doVoIX$g57Fo0+o40h#!j-CNd;$1X$%DtXPX7SXaB?J4-#Gi{aW0H63H>?dkYo
zr8-%O`QS_y(m<&Wck3Li?zvz|N&}~V7o{~7>{HyG+!fh)mD}rySHY?790E4n4fhxU
zZq$cUlsdvB>L8ViNk^Lkx_48(a8Hps7`p?ykn20AAZp7>ISDB at Twa(93C4nA<BQP4
z#;fLv=W_?HUd2T3<HryY7|~hWYGWzT7ziHC3lk<lc4E`Kzz*RSvJbz;V#U1qYH}Qc
z at t7ubxfGela-lMq)~;iXCz4_z3<~snX|=@0=E^G+6ZR{^Ji>hGNV-I<WF?EC)!@>W
z7(-<3<S{&U$uwVj7eAJER&_fWYh$xq9rl7$dSmmIW}gR2U0V?iU{0)PmEsJSX~`9c
z!@|fW$vFJkLH6Z8Yv-saW0MQxtxDISvoy~#z&Q*!0U^Bq&_1{r9{B#%`je?;{W}hC
z7Fm^Y{&tJv!Gl~e5SwyAxJU8rDX$?smL2PdLvA4l_W^&)pyw+Q`R`vnspPI~5$V)Q
zFZ}>DJ4?EARJd%vw6fCc7d+`_t*!Ror<O040)2b~V{&f5!X<MNuAt$OHAcYdIo(O;
z?up!`6oE__-T{~d at t2$W^VaUvGXEqsT_Q>j;txR{$Km1FmBB~RRN_iu)RzN8WY{cR
zH0qtDf%ZIUD5+tYPq==HRN*h+GCOa~(Wp}#;rhs{LAN!&jy&yxd2IHF%?pw*R?~dB
z+2m~Q3o%o!F_wZXt=9H{lkrB&MZQBmv5w;XP^Ok&QmVnLj{d!HoX%*K+Xo&JPBA1|
z3>Cv6kueBSmditmun3ph)Y6?w4<x_e&Xd9B5TptI(~SoT_Fa9<(fICG-1;mv4w-Q#
zC|RDb4o*M7zx(gP`nXG!9n;t8T at 4c5_^B0!!X_=tYU9{mo?7<b<-P^zKC0<AQnkoA
zoljZ^9^$M*MOtgmEkf#KK(dA$p?WSG*LqaGR46vcK@)km%|OeH{nA7wb;IXCLE3XN
zmR)X=uG?WltiEe`Lrgt8lqjcR;zZLaxOGapaOVdvHwCk6vr&pKDo=otvf8;3huK1P
z!j-lFQ(10s?E2d?g1=+hM$-`CV}kdic^h2C+zEe2%E1(t!7e>?X|mNOo36pGtvz~v
zE`d#<=akTi4x44a%X8JC1XmLL+$>ru7#yT5OLy;_O)88PhN>Fr(gRF@)|VKBV$c8x
zCiho)bkGarArFpl1>!0q9l7MakBBl?X|{~XCS$%cscee0|GjAVoRgif at iAnh8F#<=
z*lspSBGw*fpew#JHcetvIsbqJ#%QJVeh|}uB2tPdeZtCKpL7 at w{T_w_(RY_%W28St
zS1bnHQ*Lcp1VQQP;Rem2arAu7JbIk(8)ApC_>tUK*(!WS=WJ9d=SwKEo!QEr%IQ+2
zxYJ0G2$u;%urIIED&6M|7AV699MZftIQx8l8S&zl2L%VOA^WG*$D?-(QDf1v8dc=J
z^DJRZ6ImczlR)MvoV~qV^dQKzZc}`VbD9)7mXh+74w+nmLy-9thHRL3#4s*$a2%v!
zY<u5q6`}Ylr%w{1oGcTaxLizCye2#Y#~Jx80gqFGIm?OH$_^v?-O!_8B&Gq785R~o
z8FbvFZmB`Mdblzu;kGyEgY~h0%AZaoD4MS`fXWYZ&Ph+&OvqcN(`Ol`%$KiV8S$y&
zX{y+PB$?-_>*q}NmflmO#V^8cn^YjtBL07p&u|tA)!v)zF5Y$?b~d&A`tfRcLa{8o
zjv+QoYBao>yRLF{HS?fyqq2vVRfQ?$d=W5V2x>9 at bBOMEKP2zc?x9kL^oW5ryGuAE
zlc)$pIZ%IL``zU;JC&4cNp0~ozQFNx+9Qw88SL*i_;2C6n~U|)FEE2FD$!r%EqL+|
zR1tY(7ju5O&>H<oZ`7|}>ZZN!e;U(1 at hqviNgh9;lP;dlWo(e5RB2+gt6e2QQYMDo
zjx1WaupEaR8Pm-o^935IO;bjUgR(y_Z=99y9XIB4<)s-AB)fi4;(gwL&tkH3c6kJ_
zk{09)?Q>p&Dj773CKpImu1FCyrvY9<jB604-5_2yygcXD&>_B5$K6VsXgbF^%Ql8D
zo1@&+(ByU|Iqk at Znor_(L7{sSx2N{#Ywn%xVsmJJqjU8S<NGbzrwfRDOKIYOjwMwE
ztrv9m0#~F$6=}IH+fAPkHmTNW8%L?lO>xIcQ<-CcLBXLJd@{|7fLkG6F-_M_I-bjc
zhdM6KKKe4n+keT`{Owsxp_7q(W;T)0ztrh%$;vo(we9wepIqKqgo?oC>q*W<40l89
zmC`nY`ct#NR1g#rMz<hBAc)n+91+Ae*7+5}2UlgPXf@*kc^tGmtf-oq%+;p(#7*qj
z5?sQ#xpK9eGs^}YYR7dM7#UTySlT-?#^Ot>nyU{iPoTxb3eUvA&+Kw*j53C{J+d2e
z$t at megN2+$%HUItvJ&<*zQekPx*HbojK^^fqu+J?6Uls%mDgDA^sV)FIq=$Ag?Hkg
zq-I90V~UJR-L>ioXHwnq*u{_`p9xCH!x_s|sCF at ors`>gdT~vDWmNd)BBnz8Z%V<T
z7F$}_rMcus6#WVw{c-E at +?`CEG#*R_ at JpT1kFU9G{FBt^-VoI5cCbG at Qwf276^0m^
zXNJ7H%puM5q~jI|ccd=FM3_Z2%82F*<7Z|OzPc_ces+G6Z^eO<vm?9>!)(rpbUQr3
zwVyDKOajq`aSM1rIazP<6z~)_k0zyL(?TwdTvO%7)N=Z<a5A8#72!drr8Q1p+RzLy
zu#yib$~xkav`lHu$uPwx$z;f?%}XV>Ar>~^ngg-vL5Z$SRXsf>VeX{m%X&eo_4nr-
zIR7NIAUkPV#Csf(mon9yl-Jiv-dtbB?OL=-;TwA)<5YL<Lr`f+;YSatkf4QHgin!O
zpp<K;HSsNhQ0s%GF95P&LX^>68wCS!iZB{-cVvex$3eS)VxlgG4qzXvkQ9##n;^a8
zhrZk|JSxf#JPLI>BS&0dbcgdxP6lP>)G`6PJB7hTmP^u_S^4Hjm@(3LZu%1p#wi7@
zs4l_x?N)EDORDi~-=3f at l#>+m*3qLAfIkXTj>!orql8ZkVZUUqC}*?}j%8`sc>U9L
zb9J|HvIk^aT(Y|?E+ifFe&-kgaj@%&(WCa)-`fCl3>((n+%ID378a&3;EtB2e!`b*
z&(oR_<g_rAb|>+ago{MKFHK#i^{39>=x}N3&Yh{GLAlu=7nd)^`_93zg=b%w?r=Dl
zu7Q*QY3CQ6>+Wz^m?v3pzsgS~?XWyspJE6nXzcX&PD#Jr(8`yu{N>M||Dheo0 at db-
zd?g-FVuk9Rkng4GseTkt^+mIx+}`}H8#n%<-~5z+-?(-2`d`Rhx_Im6!omWd=NE3>
zoL~4$GXF)RUhrko(tyvBzo`7eS+AV;{aNq+2Y+|}0jGPVagDT8$9EBUi4FOMd at p-Q
z0m<;w(v4&^<R82)mTugoFg-1=T_Fjj0xBifi|Dv{!5%-1x`yeEy}Kl2&OuPJFn{yL
zg7RM6o}0fjH@}c9+`4<?#@*|S{~+(r at ps9z`hAF1V<=4F$QzA`;7~Ld!4S)xU~zIg
z`AnVH%2O=Gi80Jrm(wNz*(^K)qA-`z7>z4&OP-M3$9?&YH%?z-x{WL1a5{r_Q*qYG
zOdVNUUXfZ}acwjA=&zAXV_~M+0X8RTDHU{VCViw9b|XInF_}vALWN?ol1t4+e_|Jm
zfl^n6Ly#^jSVDI(3h5nBUyVNeG?}Jo;`R(_Z%pWUhClJlyDQmLsPQ%v_Kj&yUeVZr
z(R%u1&~3uxVVkPcjTQPhKtxz7Oz*sI^DDQVa$sEZGnH??%SE>3(~iBYXhak989d$+
z8#@~OL{hdj;CJnjZ#HQY*k_8`;2Gs%QMS);F{GTi!WXsa-pO$@e0M)txSIUSs2VXg
z{bc6;Ugx7%CSRH&{zvHurj}=tx{dXsZ+kg>tiE_gc}SWsGkF1d*ux?~?1PB1Y6zjF
z=6LVQ?+FL0YT}*!D_5qC)4+b+WN&pgg{^!rQy{zvV=G}_%#s?elwPe(@9lUBG)>8W
znCRpqx-xAB$Pl=ok!=g$QVx1cQ at dz?#q==oVmqCC%8S_k6c)gcQ%ExK{JTd>Qy`*E
zv<$nWmxu{4MzyyyLOE||W|Oxwb`l{NdHbE7VgGDjy~lpy=0NTkZcO`Lb_m|n3YLC5
zfSkRck#5r2GqcS&A*rRN#Fj6?ZC!S*HoM7_{V|M^o30oA5x`gMsL#n<WtXOkJ2Qpa
z_1E^&)UByBhuzYYogH2#)h9Idwl~E%Fw~}XsYP6f=sB$?ehcCS02=#8LLwMlJ~^IJ
zc0-rr8Vy|?0p0VTu~IiTUTiggqRz_3%NNP=QgTzQK=REuV7O+FYOu9j|JySj*)j9(
zY8*;%$#83ZrIauaETKNX;+9g8GJ5Ti$1u~5ANXk`%#*fXwMOH2J8RA9D<W$@j81FQ
zxf6{y;J4qB8tRbth@~HY2tXFURJWS49bxj-(vp<exHIJ2&L%Uz8FXjcwLS9!Kj)cu
z0>9s8t`^ob&GP*Sktn$#;lBUw(ZG&pG-|mWSYNQ%Mm~w3rsBJ{P(Qh*_-S5Wq7c<_
zH<ThHfNsE?$0vBz_i7x<G=u!lea~j^m5!IDY`qS9HlFTshJV0>`9<>Oa{f!Uu!*gp
zi;G}wCgC#AeAC+*ez?b{+#0U>-Su$|y*j9-C=rkyzaHLZd_A~u+4dnN2_5GySRfjv
zixW-_{0&=s2EnW3DRf^0w^Slf!tdvB1!F|u!M{l;n#}*lL=u#YGZVw*nONQQ$^5@^
zu-_{2|F;*fU;mT;zx<A0{LTAct-V~``uWwmA&BJFkB^>htR_=)jRxwjMq_PjEz>+S
z8tX4y`(TCLiu#MK*NvdI&`a at ieQ!kI4P~{2hJHEj_J&ou56T^U=Wk4@(Os#~mZmVw
z|G4Sn1+il3jCm<Lz|vHABz?>Mujb|w6G6&Aj1=<St=lezEG#03BnyjoZ``_j{Z^Dh
ztPB_v#@EV~AsDSGT8_0~X-Zi<qpxngvERavSYpX;f66QbG*EDS<Ci&a*cj`;oD+7b
zba=_0aOI^`8etl9k|#bcO|81`z}yzL1FDnwU+ at 8VTA3>4UQF`4l$9@)cF0J?edCJr
z#d}=^fUfPOyqQo_rs-tB0u%)l7d^fxm2k3J<Z&BpcvB3yCkI+<(x^*O#K`D)Y;UjJ
zcb$))*4E2c$@6uBqpS)WW%G8s*x~^es|^<PQU(8kwUFJ__1XfkuSp<`U88RiSrbeF
z6>kN^j(y#QG&5~UeRlCKFlP?>IGTs#Mq*h%uLBs46Xw3*)#7bQm*{{<o<T=$qnqk3
z6k_<iegGkg*C+%#SH$M?y6|8oGf#<i=R}l}$aTVc at OiyaI8>g)IfuB(QL#DoCGoS2
zqe!IB8!q~Z4Vd>@@S+yze-1RD^e@$}nfP`YKZVUgr)?K*;(HZfT$S1-z8 at 9ZhYJ<A
z-8>gdcip0ixv2}G#NkuR-Q^N?3^bOs?Rk@`dI%Yn#;dnxbqDWLlb5PIe$mrZ7Tf|W
z*PK?a3b}7ww-TI7-TbUT7{g?78v(CaHBO~#Wh{c#W0d8)5>slLa>nsQw=H*u9ksDo
zS#PcqQA8o;fm8B{qEBh<5T!~*J&&=bAG9aY(&H8?o}pVo0n?I*qLfM2nPuR^r(9Fx
z{}va6!Vww6 at -1MSRx!maY1i<pY=a~N=D)I2K~C@}Zj?Q#FFP6w=BX4pu+t%XwF^U&
zHaXP1B2VZ2on>N`?>Baq6*6v0lsKr$1)GK`gbgUm9oBV>iCr^j=Jqm>Xl8Hwoh{<C
zCII`5R8uhr+soj25uCkaVkwL^`5{dXiBOeWi1>ohAX2`=<!I at HtQ}@gD+pgrPU&jH
zzr3ICWp8<9pX{bB at Ec!7h9Q1HV)}?DDEbgQgH*4YqqB8*+sf{`JA^p5pdPW4`|*S1
zuR<1670JZ^1SwZqQ at C`u7K3QLl(Yl$8Dmi!qO&_;B)`6oJHuAjKh{V$-0I%G{g5Cb
zbG1j&cr{m!Skv1=rFlf2 at UAMdB(?D2A?aXSlU{jAI;vxGZ5_5waUrQGI~8S1ANI)T
z%mDSHPv@@USE^mLI^-qnR4;`jePowA<<4zjL+yV|YVayYm)x^Qtsz>>>Ve2bu3}Zs
za4G#YsgWVPJ$Tqw`cn*xlyH-E at Vv!5BH8bN;IoMU at I5!QmHdPB*KBm{{jWE#KP1Tp
ze`vSP?Y%!d1GY9>WC0}KD-}TAw~lHpINR?Q7H{6Tee2e(hx!X2>vN#@(V+D!NmxPZ
z^3qlkx8cOSA{jl|B~QRvcp6hR4tN2B5~)bG-Qn<Z5dG++OT~rByQlaOYNxe6Qr3O2
z7l46h4=H7}NBTpukhk{gJLewLDp~=M{{%4jJ8}VV at Pev2<WWs(zkKZZ$A=`QB}U}}
zC$*~Jd??HodGE|&2~NEBXyeIEVWJ8&6Z885+oZrf={?*bXm(DzI7R%NcWiOAP4mtq
z#l>Dyd-7<~P;U^<k{V9jd(;o;9bE3DR`F_9g6#>*30d~Y&4(01TpU;qj_6^A&F7G$
zK3wERS>2HdqgWE*@d_-pV=KS%Fs;3E-u@}2;P7z5Adm4L#@~<?;1`|L_9!hwLY&j1
z*64COw{}9=iV0(Fklk~u-3C at fpfQ;p0dl`w1O(8x%IG_x-)go=JQ#__s7+ae4+w<~
z=Zt}VC?4^%3DP=#f at dHoxoPy1b)~C4Zh<aN4o^-lw}(2D$*cVyTTO>T8HZ#c*O8I1
zKrSVg#$a#I`qVoQ9uQE-#5!RwSw)stwkFHx<<{_o6GlRxbc6ohAI6mG$!e<$VAOsg
z?hd&4*nfB+_N_(i!9_shNgKj7d7v_fa}J5{DkT&4Cd=OWoP5aeHqbaLV0FnYqBh6T
zgrR;og-#ri-~I0`^87(GhDLvsyRCP*(Vn(<s2?_AxTh^Bo2a6g94<?%w|M80!{F~#
z=5+p#n6L6doX2WDJ?WiEET4A{zxjG`@#a0eq at MHX`t^ImU;PQ`6_OfxV<6$3Umhx*
zjS;rPlk;xIhKiw)9djbsmh#VYCgg%Yz1&W1K%^&+^z3A}MT8W7!V<PcV))3jhvXEi
z#{#8(n*2M)_kWL*o=EhB^WNgT2_`0W>{08WlhoSXee~S(ms<$6`0!t=9_e#W{aI`D
zaq_09kPbKD`)}~i-0O7jk=vA$R<#DwGe5*3;b>Uzemw7#pAoBia+VlV&eWgOK3eYn
zUoW>m&tb+$Fjd7EeeU)U>D>lIC+|?Q);Y$7<H?}^s~E^36^?3z2=2D)Bo~X19uAOy
za234>tM|O$JLsPQr;iYf29!KGB10w#?~X{Kt0FW>ZAV|UT9 at 0h7yZGf_8C}xyl at 9#
zKrxSI8wu|r at PNEY0om5@JXnCauek1)LRhcZrim;{RwDw&02%t^k|M<Uf=h4oP2X!^
zpwppX2KHaj$L{{I0`o3+8m}onat6%F0hD|AtWAD;gnqee?p|_vuT?o^5-$0vvy0j>
z`KjL}6}EZCqHuXHeGL5FTww4Jlg^_o1Y1!tdji5DQ4+N{x_y<G+Ls6>{+^OYolCB0
zv!e=0q@}L9{>jri$N`GkLP8pJl%AL9cgFLFhnF3b5<RU+oP`yQ`T+;v;cg55Wq5ds
znr5$c>ymulCS$eF0FHct7C;};e0Vt^+=QS_zF%vDI#H8*^_V~XDaC|PHTHjPC9Czk
z0Pt`Zah{-6qHa6HGGOSs2o~I=+{om?AHDykuS!n%_H0oG0Rc({c0hse`-9%-lIz_<
zh*$ZZ36SHZW2qASYd6-sK@>325H~iHtM=OGVZSXveNz7vLc#BB6F at m_eS!!aVe|s2
z<I at 3WdbuNnW#%4DTG68uO8O>0w?3Yro<f~XEcDTYan8HpKOPMTem>)l!zoB5M=2*X
z+q!Rq-Tp)12g&Lq90dQIw8l4&t&#(t*&HtGdf)grx!r&Dr{Dd>y$b$p`TxoeWEPyV
z|9`Qf%9pI?O#h#S>x=U@%l<#NZV at K%r~m(#Z2AS?y`29)-fKzG*S`oYa`wM-Cpi0m
zH#fgX-h#V}*YDo^F1p#6|6BBrGuL at 38C4q5U9c^Q1k5Phb;wR at _Dy$iFy0h?LB*2Y
zChcw_=Q!1&c+Z6q<oxq+ml!74&v#I>r&GXudQGKVu(FOQKC(lmH?;bw3NW@|1nun0
znV!jEz6~+4GY at 8zPXry0vg%z^TZ$|ZyM=d$1v|FV-u2zgi~^h~;-K!az$*2eEgNI*
zbo2H4-+o-*+_EJFH^PUbKIU562Swr{sAD at uJEJVRq=mA6R25KRZONOb>#x`45#$C0
z&BuQb-te21epaPtywawTU7rMoYqNJV8@!ofy|O_}$!poL322ZXZSa$gQ{A2kuP7yV
z&UJS>_ZUaibZMpbxVIO2-CW<4ukiMaoGF?;Jetnxv#Pawv&zXAZ{B8Ai|Fu5p;Z$7
za-2k<%L_LfvOKGBEZZ|=!SaBH{H)T4#dW5SXWmWhZxa{l$DyK?Wl<mIJGRJ-swTyO
zs#<77JjdS;o1=bnaMIKIa<}#U at J!!UzgRJ-=FFxspuQf0YG&@qV_UA|1O_M)e|Uxu
ztwqSoY5?#lA}7483{K%Gi>Pv^^`H{sWsX&+*z*l^fNky)Y0~Wa6nwsgHkwo)AL6N(
zdSZKv0MFLKx=p{=&6&=g+eKPR<hJfG=Dy|fb;mCC>ACk#U`1{$yqU8OfIA&ZT#uzn
za73n94sb(=WZ)CXz(RGvF_ at 9Th&&*l%0IjKo>L-5Mi|}g8j5AZ43 at c`!4zGS94j~!
z)MbHP)HHX;cNp(*gM%Nu+NNvuH(8?GpLd#!<mbVR3wX$)H$vdiE=5O`@YKAx6>vMn
zo4*Ol;F`l&UxD5Znq)xOJ*>?<{IA;Hjv8ETK9r+(aRw|j1hx2N>dDlDsdFM&_<G91
zG}6nqq*vHaW%k)?*QV1iwEKDg`swlUK;>r0u#?t5pA$ZVJWL3DVX at kZtNE2a2oW}h
zd6(ospPQ*YyqesFL=+)qon(^$HbGrR0<E1zeOU<atS{;qg at L*4h at wuRv;{;61u at q^
zJB>3u*>^m^gD@{M;H5V?16HGzbPCM at XL>>zdB_s<!9nNZyq3-iIEudgE(3;LCNdz4
zI?|41uy+RLP{Z-Sumqk$v2gAv#>|M93V#8E9{_HQ^R3ew`|BZIPoBMewDN3odj?cH
z^KN at asPvVoF-E7W;Y~1d2>qJ8h2vPz0BQ0IX4KBSBQxyj#o`o{_d3*oX4W3WHHuG$
zuXGZ&3T>kBSpEf8!_-w!i0BhSTP8;1+?ZdOpO1 at EPvzYT<Hns(&{%qg5eI_OB1TJj
zv;GIvM!ge|cm$C%c7l_%b~$pBcB%6eK%>9wo(|!CK!}@9U%p9JU$3uhttVS6kDjet
zatT9&b~PL%g_1+5Rfq1djcboKn)_|gkw>!C(hEN`-mfmGwm@}){&_+GhegftaHd}I
zmET`4|EJBIpCxFJcsQFo{yGBeFp15-y=sQX7AvK{xm`oytMa_B(nsKC#=py=P2x_8
zZbsHL6g&xxDrt*^6g=F~Hc4yKet1|+b8pAi$CPa;O_KTKHqB^b&3EbX#`?3h&E)ax
zm(P=lJE472JdX$_6&J%;@VBpjZf<V9e7(-XatvjTUreczf8F#;o98Ig76!GsSG_IM
z&bJPrn#cYV-}ABNlcnWC7tB?!0POZA*^3w>MJE2tc#pBi7Eszm1;z%7N2Y;?Dq2rs
zl!&n70*^03;dcxKndQ{V^9d-)MmE>X5NN9h at dsMIx&CZ at bqiKu(peD(dNx4o+aOoy
zsPpsm6ZW0anA6UFZKtz-7iQuZOrYjaG at YCA*#HukqAth#<=d=lztzMK^ml9HGYJQ%
z{_;y0<~y~>zAP;5t%6Kv-tr at 6C3imbm7)!p-4}3fz=Lyd?JU){@t38E=drEk5^i>J
zb;Z#fq;vDkEk#}EW(hN-3 at 94<b%i><Hh_e5(_e1GORrlzvxm&7xA-#|VUI<r#aAMG
zmBlOLFCebgYWT(NDG>i;+JalMLp-3Mhoddn^-=5WgVexA{0Q0%fWZ6Ya{|f;WpEj|
zq6;N#;!f3U at T=^OhT>QG6fD5Fd}11Oy5dr+ads8d%H;!n(oZ;PrkXndZ}NMIGxckf
z1MP@=|Cr1CY~%UHR<dv&Zq7}bjbYNF^o`^``hg=1t-bz1tG<WYo at bmbX${CvCV3B8
z1tBC#fPR?hDO4Qm6n^Ytj14<%5~P?-HloDez-|Th=7E7fr~Wu?U*J+;rys-MiPoe{
z#ahazz*#U31wLUFSw^?t*<HAsP-vX8B;>4w*G-E<Lqs>$lOxgxxyUv}B)FBYoHB)q
zeE)k&CS)vnXQb}J&oRkHB#i|@$ts-~liu%PX+?81I*mP<f+sljOa4>1|3S0;any{x
zvlY7UKW at HmK6?G~&F1>+=E{@x7h4Ho$uk at 4GYV8LHz5AnVy}xg&t``}Ql3Rg1X43Z
zlDJxQ0jvziCdsQL{xa^2azZR{SM}muxuuFNNagtYVh6GUL&%~k7&5E3Ew_58w`hrD
z$;yvY(E%DP<KlEA>Ry|qm&3dDD}=*dG1X<t@@~(pjt1QoMC4Dy=UA0{aPeH&gq9W#
z2=db`M0Vp2(mN3yrtb0 at J_xSr<Xfn@%HvolTF^LJ)~0&n{jfm~p at aH+BH9!w90Km%
z<K`P9u!u=8fs4^Y4-*=)4fns=UR_(+TG_sW@{z179r2`+;>^QxDVe`_g$O#T4D?2I
zd^+2wloyg3r{DXbeY(bHU-eT5I~~ircZya>XP_J}$?w_<-wVRbfVIXtXwjhFS8AIL
z{-apP(v<YB<aOFrC>zUzGY>#3Wx!NOH{c4h#~jjBk~<Bey-z-LNn5P__aqr)t=RPq
z at caX$Hfd<QIR#h~xNfrxQ5ZH`drjb5&RB8S*`r_%5+5K(5PMz>(E<ge_wCDYGTuJU
zSbB!37`E<Hwvoo8<4q%Rk1n%t$;sUY1;WL84vk3xak0)*y~V}4Pn%~0xRT#lXj6vf
zIGAC|Kyw~n%z*l7pK$=Wk++SB<fb`W3v>A{U7@}jI}<3&ae+H#>b#``nnC+xsVj8;
z5Ya0(5r5?Jy=hQ`Ku_MC4K(AOU8LeA(4`2r#A8o at GojH8dEgFbA`f89##wz9n`>Ir
z3i|ErHVIb3M}qrXNF7788I^Y|D~GLNOhg%b8w6}EgCJtTxx?+5N5WmoHlZJ+pW=J$
zmt}Sfx#AYc4H8qx>9e6ZXYP+%TPh1j&<uIUd2OfZh`RoP1UH_U&KkmF`jFrOX?pQi
zQe>MQjLj+Jhd8U<j#a~2nwqz>3_SH^wzzT=*au5G<Y^_CnX&*)m~$aNPnjE=)Vt>u
zs^~FtN+Lcihv-0M7>6E;pzU`CumdVEj3yVh)%YVM?)U&<9P^B!|LMR8?;`&Bu?jUx
zic)4G9eBvpB1v5g4zyKcQUjseI`DYGNR~D9OlKeClPPUwc!DJ{1)_Az`kHdWAJm0U
z8H_<kG~klZz-V at us}lfd6(u6!N4^RgbS88)d5~<q{&79Wb=i65-iTKTiKPD_NbB at c
z5T(IMaC{xx1wc8uAMU7Au-7aclL}va`)%w^+mq{Yn;Y(YU%V|*HnGc-YiXB-ncJC>
z=^4udo5}+^h`U`7EK}7;ib1V;(4cY<Hnu&pKBY^+6|Mb?t;SR<_NV2zk3|vq?psuG
zko>f{eJ|BXIQnnpNnHNkkB1fxFIalS!NfmzItK?p8Jf>ukg3Q;ti(XxROhVlLB*}Y
zY8{ZK-C#h*3e2lgAVsqjvQqctxTiO2L4^dPw%6yj3yQ>tn*z at 3)5wN~d#GuIO<xRd
z+S?Jv#S*f^{84yI)rEuiwx at LR?`&Jo)dv;c&Jh*sW1LXv00e(&>Yt2CM!+fbn11bZ
zO8>Nj^p2cZY$9&Q{duh7$1>Xmjm)%oSQ#?HGFiC+H}WhYnxr2}zsXdE4*jNmE_Ext
z&w^Bd0s|v&LSq_VxR!gCrmzyX=5mBtZuq*2kz#b<yEsFqr)l=GI0Fr!5P0Exr>O{l
z8M~0Xzfx3v1oSdZmHvtwVi-UVjOw~HmeXDZx!B%_x7Bay`{741?m$l3xi^@0nxrct
z+JlV9ehXc=CE>%7nO4T$3cby2dnPl1Dk^_ghndvAW5MsBuRi+6R0 at wKZ+~z#q_6Tb
z3yP-j(AX?*ww(<RXgtVtW9eGnaeDD}UsoAdYNV{2WH~7)>npe}v(D}GsnKSilqV{D
zh^%nH#OxY-*R;i_6VicCnFn66m32|s78cBBo<ir$eb2(q(U2I$B#venY+^Sl<Zalj
z9PX@}n4>9$K#lXe<UoD6Z%D&G``;nZTYu>1KJnW*c3(HgZmW23ybePExVNortpqDs
zV`r$<+z!h4z_T!cT9)tHMX-V1I~ya+M~tAR4hQ<=KelQT#^4g^GTfJ7g;=#OGJQ`;
zx^Hlj9$Fb)*v4i!Lvu<`EX=U#U|z_qe$jI=ZgadfLjwVROa>v)ETWx|_0a;sQwU|r
z%>|7>Oo(T72xi5jDOBH$@W%R(cRM--iBhVJtX21koRXSC$W?U-L;L8^^Db2Kaawi2
za>o6UmojjFV%qdA^Mr9zYSl0=g%aDS+#`lT>YX#@%N3VI=YVnvf$xic2VPFiDO9sZ
zm<XXNnx>&+I{MH(!En|Ke#_I&Itr}@e&JhmfdT3D_x8j?@MWgX)D%kGn9XI_gfXpP
z!+1aAhFBZ}iJ{7#ZBKXbh|#+BBdu%hyO}M-vZgMc5n;2ar-|YozOB`-Jse6cFO_`x
zO?xTssrBufX5%o8QhUP%a?Y{uH5F^_+4HJ$=h at eR7H8czkN0kBmHeuC4}~e5^u)zc
z>bD7l0z)Pla7?WSg<X0(75qO=db$j}Q3D-287Ct=WgxyEZqi5ZAPi#@74e?ZhD>Ve
zw9T7ceLFQZwp=-qH7RFAiqVd^R7j4<F2ulzV{TIdfh_G;p#$3uR_JeOYoM=bhelr0
z{RZq6dP%V;dBJ_`^np{#cU_+oQ`w@*6i#baWW-d9c=@Qp1g_%8#p2?0W22dVYKYPK
z2w4YiIn!h|8ajJ#6z3K|UTdKPb&jJ9|8<h%B&!?K$dZN9DkzAfB^5Q6Wx<piOt^)H
zJ8;z?$^}Ox5enTz9~txYiyxmo%P&9dq^_9V*kGb%viVku7rvV$a^=AlP$Nn6YWZOD
zZ)rM0En!soFj}@|pG&^OFszFYmLEqRgz2pP`6qPU(Tm7M#ELG~!b1HO)yCT89SV?N
zb&L|W_XWoDyTo-Oju<KpRU&WH=j#i%u9BulE|JQtqbZxLX~jM=4w=m_U*9k^Xo7dN
zDcXBB9Q7tD7Xs#bzTbEA(_WGPM^f8<EUq1?WSNuS7Pj%vaR;|`1MShz>zm0o8dv*c
zo6- at 3mVZp~RN>7`$Igs7uvrluvZbn24nzh+g{H_SSNIwg8TQ$lxRC)!3jKWHq(j%2
zSph+A8<OszC at lkCh>-{%@yr_`i8R6lnexmH74 at -I`^axNt(6r?h5++BD*>4xA1(O$
z7R6!<YX-1;vvw(_I{Rpz<g3Y_Y>$j22AjeX=}^X!l at NTSA_xZYZe%z?kO_aC(_ZAM
zPzqexq{0iCwj<wO at PZ7OPA4=j!>l(mV-0|n>J`;mKjr4>EI`XWM#yk?a755cmtA>Y
zag$$4I_TB0<>-}=x3{#_xtF5cr at 85ei?HzmL)DhKG!}NqrXHjOsgugD>UFgVdu}pf
zRU5T4L229R4xp|i^`w^lc at Aqs^7L-!uDAwa$6B6u){FWnsE7Pf_OJC!k3r%KWCYAH
zd4wF35c?@wgNuK$ML)jMHE^#_Y(dohi5Et$+d^-m9YG-nVdOSIDsL3FvrPtUZC7yc
z)ON)UiBhYes8-mjRF4%Ws^5hcpR<{1X5P+zy<RtUwtY(HnJs)8AI<!j3{!NV+{c<U
z`faa&0?9Wo$`Z`^^)5kap~nY=B+REn7rxRTcQX~A$U&0{X>ZJJ0`{_#J4N6My=}(1
zGg-88Y1e_>5huhq;V+povKyO&W4Y&H)*H$vF+HF%To=2X at q}taW!+S9ngIYX=QV2X
zCJP^a0T at Yeg>9LP%18GwP%3FBI{0*kaq$%vmV(z`Iv+8BA)C5EeA5=k!;p9_C;8`)
zQ4q~F8hO`ZLbkjR9z_h9p7-{o!kSS;0 at gqbW0^4TJ?sSwqsh4D1h75x3{$akjjkDB
zZ1D+a*A{F5*c=I;|Ksv8QKo=X?uHIPzf6LrN+h>5wMa&5cfMsNm^x5fWQpzbE6BDZ
zh at j+VO7}Ta5 at -cn>@E1e5e!Duqw2AKra`4>h81iv_G6AnIPz7j#AF;6;jhY5IKFKi
z63!C;&i}qhhrC+u4$T2oQpSHS(4Ah*cNh4bvyP^G1Iz<{2Ci-<W8valrfo~(Ul4dT
z%l0CEVa=LuWs{5+Gp)z(^_v7Pt)t?rJ~AGx#}^se+7&xczh5+Vsv at YEfH28dB~1f+
z$B=-V6#9KtDDLkfrtlHg4Ih)}^{I)Keo8%Qo6rZ88rh!}NU)-1hT&r$<-;1go(9z8
zV~*`0bWrxvrKw;ytvK;;nuYoAxsY-`6#WlOEbd9ROF5LOFG>AaLOyxiBd`zfEaX$f
zm-c$*NMYNjR)x(#Nj8qJ(iT9_E7UDuRCjZ7X2+zvv<*t at R@c}-_n`)0Osk(AV2;*R
z@@xjdIi at ZpI_Vg`O{&YVAHt(TbV6+=u%KXX5Pr&!7MPuCo at RX7vQ=iY_A$%M&m^=l
z9qKB`=z^14HEx-PM{LD@)l-47Dh};DsJ3Pd4D%{62HHW|DkDn`a-k`?I`2JmnMZl|
z9^)$Yy5R}MjWv=x_>WA#FB(>}`Hu~Og?)$}t~c7R&HQ!#&K^AWUV9hXRD(mQ5uar=
zEPpoeRqy2(&rfmr8YR0Fam=wL#XbwWKby>H{-qu#GW7s?(By<(l0b;DmSCDxGKOI>
z at L$uhlgWs-JV*2wWV7ll^hV*Z*>E-^I#kuB-u^N_PeJ;bxARhE=C`P{4E3a+LYs=-
z?pSX-e^75N>#g?(^|oid4gQ$k7JP31xIk|?aioM=#z0xObIkduu;&%$Qo7&g-f$q#
zD>+5sh~I^YWuOVTp^}W2f}lclHCxbk<?}#8^-n%XAT9Uiu#<%i2F;s%T<81^X>)?N
zWmIgY!<Kssnn=vg at azNWXHZ8EUBkoO=^Y?~Q1u<2<M}D&f07&Z1<Kg=%iV-YnbIf=
zu{PbQFLc<HLKtO}t9*u?(TSzUFLX4mxSW#@?k}#bpHO$`eqw=6A{Xaj)^y=BMcqf3
zaQubXFfLieFZqoaafUaX(Ntfdnbk6RB2&Xl_;O+29jVTNOcU1R5trfAO6-?`SM>A<
zypfNUtHsMI@>IGcQ03G;Ia7Yzf$}b=tvRDA4t$KEh#k>>0*Nlt)wI2!pgcn5M(B;P
z%bRusou0JdY=hOhNU+9;)%dAR>b8Vi#y~s2sGPVx-Pv>JB0+z&=Uod52s6-KO}>Rr
z at lTFZPo0eP7N)(>$DE4XT}!U(m1q&vA^{o+v5^rg3$lDYH~y2}RK8v{%%BM2N9_R;
z?_NTt&sUfikW229)JcyX?oeCu6!QSZ*wK$<JS*?Ni3JNuJ&fO)3(W=r;4R$PD42|e
z at iZ5D!%J>*u!@K>k~lsh<Jw89dpDVSwDDr)_0Q(Uq{RI#DlC)nOl~!5>@H6*m-$s_
zD-sYXjuW`Ht7<pKIMCo84wR-6Pko|}N!&<37M!il$OVtKr?NX=OgfD57#DIZ&|K6y
zC`E8z9kGH(wl}T|iQI|s-dFk~xM!z>sSEvx%TAqO3%w|)fXosWRbbs&_m$jr(F<W*
zh)Mkge2PL?CW#b11$;tLAFK6ovc^M}E>3EFnRy2fWfJ&RE#yMYr7O7HBIf4Kopc30
zEK6W9X<b~ce&6>X%;00MyEe?reHApq6lQt-7?tg$-p!es)kKoN;fSTFT!-d4>Zk+!
z5StX75`!nXiedZcxz{7k&;ZSalG-jVE7Xg_)g}~h8-qOSaqQ`ItZio<IYJ+6#0^hf
zJ6MNb+Zf?0bzAUieJ$KTio;d&VwB2wSWn)_wCQ?YwVQeT<BQei>eH3i<5Zn-xa%@W
z8m|L)bKD_aKbeYUvZVYJw+?NKS^22GBkaLtN2ymDKf1|ak(CKDvuwuQVj%oa2?aIV
z7X9>?;YXQe)h9tF46Bm$d&CS`D2Q)rhN5Cex-~(zHcS$CAe}+kPGv8eEX~CTm>|BC
z+qO%;w#^BQD8r5#>MYUrYRP<d*0geK*>==bIpGVBTr4>mcT&Hn15e!4m2A4!5%!?4
zvxQB%@R&tTB91woo^O0&LPcS`;_4mfv-#y5TCy(0?YI`q8Y;ktFXKW2gZA0|PGqe#
zaJG_YIx8_bady=+%X2)jWsdWSkJ3?^J0~4HF3uQh8i#X*VIZ=QS;z{rjA^c7w>k78
zuQBwfb`8_Ru}f^Rey09FW7o~y(Qq}*FWUG3L!d=TPa{p^LDfwAT!K}wu+;dZV!y_<
zH-$dVR^G6vjbRdnJOQ-90f0f_3AB!>-^znAbgS9&`eSgRb5aOZ^@aN4Y*^!XV1s-d
z6hknMph8~(9y7jDcuvOsI3F-5yc31VlA2-0Ns}5LT1*3s;ER`UFz=4<^VsYuMH{Bi
zG`;eZCaW2gr!{F*&@9bMPBy_lt5Z^6sW>^Q6XK(B2%-M*2|V~gvijre*93Dm<qfg9
zwetK`wG_%h$SAB40;ig?p5|-87n2603~#VBudP2``SICSl8%+MMo>z8R@(K<oTZ(M
zKO!vhDIc%w>k{^2<)Fr1R==iGAO*>U_l$2ni(r@=MY_e~q&v)8>~FA$mzc;k$B31L
z&0p5LftKdecx=z(I8MPg^ew at 2!Y(*b08x{@O~fn=w=^=%NI|lxLT)PgPYs%JKN9K6
zW at jdpV!Z9?_c%J7fx~A?Z=bQyuvab&e08y5!%ayEN;R;iJ<He%N*FI-Tn#qqd$P%n
z)5 at ac9UB*=kodIXb$#WH1DEO!&S7?vPF!G#sMz+}WR|gF#Br4T at AQnEDs88Ks~>r%
z%t)^>VP2JVs#*_HK at fA4OW0b0?5NJD at 6;Kcl5%j^I%=b&cQ-;J+!Ix}6ZIm_5pg^c
z1(@Uw&vQ6-It&nK9;c~L9;FYj;dszHx*G8k0b`P-SMXR#dyMQYI8!3G8uY3<Pb+#C
zHdK@{>nbIc#uq&fluS`L<B&3eWTu^+O*4h`A_|DW5D&FHxE-#Eq3L;_*_2}90T3ox
z5VQsC_m at y@b#XpUsanb(j$1SpDI2Qs%fu;sE}qdam&7%CwHn{(8~q3#sxGK&D$hDc
zz5QAENiXQ9fTyBTcxpN7+*0wnT9x8`WdBx8zHGnETKlI8G!vVA_KFItnSgaGLE+-q
zcbqn)b|8?!7|sc?8Id$qppcRRM{CCm%8SVtx^v at t+?)7&T+NZqFrAqJmMy$8rik<<
zu{#jL7ObCiJ%Rtre-*(Z{7%0r9+V19j>C)1p~NJ;U>JpBfU2roR*T(gisxHCG;=fX
z*zs4Ww#=MSqK-bdlIMZ=vof<%bqB*N&3v{*>K2kuq#L6-XXl~6LTk(^OeCZe(DV4C
zseE+-&8v}u&s42y_Jyfw&~rA~BI_*dFDmlfXmo~>Pe<T!pA-0IZd=qvT7awhdwkA$
zY2IISX1RrjAjT}3v2=WDT0Fws%b5aG(@)JEw)!Sce?>^pi_>^bQElZ&pX~?OmnW5;
z5!J})%MraEX2pqVH!WUgyf3xBkW$)p*j2!*DTHp!L$!24rPGA*Av|=k5FhGO&;CtU
zrL+i`Wh)l0#%Jnu)S%E03V=!dj6t#YeBlk5sHHDVLVsvM*DEKI4Vh0U1=a{c9poTH
z5J$mnvRsx23XOQ<j1eo00F|@8S>4Cj)}?!{Ui700yd{_TMZ&{qIGcE5aHSlbJuEBt
zT=IE2#!Nw5c1hmi$BD8bgLvc at g$MqAPd2a<>a*xCOX88 at OP^)-uVJvbisCJq2yo|M
zy<(0Z7r_5lvD8HBqHUOnp7K;C+pqi!*{j7JDVd^Dpb7ke`-%hwQEjiS06#^~m^X4J
ztJAu~GR$QJC}aU7;c0`cz^a(o9yTmTpI at AE-dZg{7rc1AEWfL{>&07WPsCFQa>_Wb
z#BCL7VQYZA9jf305{UJf$K&J_P62A9*3b7^!IGG at E!|>GLqFlj0~$$_M){W)V1>S9
zP!HAjspk602%H(`uCJUuD|yn#<N#xR1#~eM;90#HyIs=U5OPkB)>BLm=6Ao+I61bV
z83R*TQhY3DhWOcxm39DbsT}JoBm9NFg1dvg)Vx0K=NHa2_s+N*hnx?BeYBCeD(KkH
zOZ*l=L%;J$;PTJ)InDj{Y0w$9yS>^BnLdbg;PNd^;dO|%Wh&!IK4Ajwf2xyBu;;vq
zqW^{TGXm#Cz%xMIx-mZ+5<o5Tk(6<Ls%zoKx^&te&SDs)P%O4a{bk5Mpn1z%JC*n9
zkFze$wl)*84~*sMP->C~7wI6k`xDccl(N8`->r7ha*Z2!E|tb8(LXY!#2oV0T%@o%
z at rVP$^2Nr_4GLSBxr5H&AvyI{|Kg8N>`pGHm-TO%SW2R)r~Hd&px;^gzv9!f$AQfv
zy)YS<6!5m3!;}Xgx>$$ExAgI!7<>1yAH1wAE-H20tHz80rA)xs1!syXeC?Wsyg1g(
zfzjt7>HLfTsVKRKQ4OxMs0N{ffYsK5D+CE41Hf{7!guZ!n)_Q#NNvRvA#Z-UlF9iP
z0=%EMetCv(hw9Df5Yx*MuGNK<J;iIKH-l~|&M$X?vrFeQxky->_!K0DEP(9-7x5cQ
zfLByZ at mDTY&L0z~2czk6bT^eJ(1Pd4cX2qXa1P4D;6)fXI|8v43iQiggA2Jx6;4uJ
z=?CNntCE{YP}9V4!q=8$?%JZ`_R21_;Iq0|<@=d;XLf=6P@#uuEwaheYBZvWUy`ZO
ztGU%yyNXpVGqPKSiJqZZI*TLIEQ%SKKC~%kZ;8tWLoFJ}4Ch?FfkhHlylL58imH}y
zQ`FhGt6%wc7rWLZi<|YI0;7&7iXb`}QpVu3__~AV<k$a%&C9}O0G`5aG8rgKR_icU
zRO=NYnxxL7Mq;r%OMI)O1_-Krr8g67tbin+wTY2FgkwF^$u^x~c7HrnQ_B9}Q~R&9
zkw%}^(>M*!kcmLD&cn_2=;a5w6Ooj(T0vRV`dClOAf?_?bFRA2(MWxFq09P*N%&Es
z*F?qyXHDl^>qZ{Sx<FkJpY6iMQN~6nqBV_|0*($-58{vM;`5j(mySSf(Ce5DJ{qmf
zWxcgW^>SAQNfU&G1DF&}_zM)x=~Rm+t;v)QQIARv&!(3=XYZu9oQ$yYFJFwa)inNS
z@^&%$TqJIqhkk-9N(vpH?Kz!0fx at AxbNFJ6ANjb?^a`Hs0RbSrwk%z^E)z9IEjMyJ
zxf7s^%<7t_V<T!*9|ISWV=j4K;6?e2N*ZR?{w;pv6<4Udq6k0TL^)Pe#fxf$A~Mty
z{Y)@QG#cK#w9~pv<4PWl+|<;Ap==ziHPRp6p>CjuCds!eokZpKY62F%VbL%`+ZL;l
zdaU56qjH|AJLG;TCDa^@yYfRZ<L<;kG*D(XDfN>1(Wy-~Wpf~z*tRUYXo&a|4mFzO
zm!{&UDs!D)%5>zh3;p(P%#3^9 at m|1-A~n?m at 0p4`j#q`^Dt!d>!Z at CH5?o<7vNeoz
z4(jFqKUaFfbq;qgPyGiXaYco;QOXKZ9L->pU at 8D%P~Lnwj>ySw>MT>#i?lbdlVO(+
zU}*k2XG*Cp`mB9%Lp2(M{(ddh&k9weTJ)S-kNIQfT^-eir6bzLUsSoQ&4 at Ox7Z=3o
zhdEYkCXc6Ng%&DNdMa}%SC)eRsiC7e9y()s>ffi%!q<~F_)p{;vF3OR=?TDg7V6Eo
zD~I^__XInRfqpTJ*<sHA4c9%FVcG%FE_jS$jdv-%O3M>GTnv=YCkvj4T0>ML;mK4X
z{YH7&3Y2vMPA`#=qRviRFitiqda4rU%$K4>TyP3ixQv at uE-b?p){!&yex$cb--(#t
zUEddPWD#(jn1O7SOQrn_rGzNoJ2NX5Fj(7E+7iVR4{$W54RsSq*TxH1?^W><)0)!u
z^pV`HbHUHr$KuH3KO^kMcOyjLj8Aqt6i+xNw+Wsf={u!0m5=ZbQ!V9bT&3s3MQzwo
zx?qW8;-|sbc_ZcJtO`PKwt#CR{E_wyb*Q5$s3+~PCQFJj`S;RP{B#*pwMLHktT6f)
zC`T_NJzfYYXtEXTVubw35 at 2A0^nUKAf)q>=t*Rs|yO at Y{hVLu-3W(lAEh50qT&AZI
zhT0a=3vT)nRUAcR&;C_FZ*jq4526fmwlq at 2E$YHwpCE<gx8fWbB&8=DWMQ5qq at yt}
z>YiK#o^0+2{r|qK4deM5V&>B63*}eRp-ynC)uG0$Oocttru=b<4ysv!(m9MdF4 at 7z
zk~uarePduEC9Y>kSnHF)LdE)uL{lyGlLKrck5v at VTcU(fi&*_9*iTW|JUSh<RY*|&
zsd6mkSLeeJC!WK$YV66yh2p3<R;rA3?5q4c+>IKyGdBzYa=P36FaLOZ!Jb~Nxbd;u
zXfKTuo-lF-sPRSpwz*vBXw>>#O|C_Ie-5=HJH66pC?iP8E9gSwea=wTBaFdTju(u#
zqQnJiW*6VL$sirTH?NS6EOVvyH=6nWP3GL9t?RW}b0;$df11iB2xODD>~dyYy9WlP
z1%%>YS^=4mA!9L(#gjclr4|VECbdqt-J+1*4U0IW!Wogog)TLc>nU=KJMApd;cRjP
z%ywhG0=xWg+=V>Ht$R^WUtQkEAt<i$Xr*9dbWVModA1$b<H at K0N4R?Gg#LH<=Su8c
zfjfb|G+Uo at D5UE%VZH!rH2cvi-=Z?1f;1HbEdj6C?MKgEJ{khBUK?2f`{d$5Azyw!
z4ZXLFRF>|&Ljmg3nCvR%kjmV)wR;R)3vNxMZ%~a1W#w~z*|Gx^vO<xikIH<7k;O!a
zUGmIOro2CoOw8Qh8B}X%oD(QeRaG4<0&^J3tBJYvC>4y at gjgho;$>rw#F<<)uInNF
zmdSq$R!7v`o!~GE3k|!4QgSZ=33QIJVuwZR<=JG1YTH(@+R=@K>G2M(T^oBwzO;v<
zKH=1svp<a~wr~l8OuQ~hA6>-|&odHioc2#FMKj}3I;z_(LV~7AkMI$@?IGqiicpCS
zD|YS$Zl15*te8wzt;V|IpJ|rszHr6>O1a|Roa1lPdS=w=ohqfNOwANW2|qK7H*d|1
zr!3O9GqJV)h;Pi?x_R^Z#5azqymxZ!@7WtO3%73HzP-3G at eMh=#c_CJ=EmZ8H@>@d
zd-1zlINj<RoVHtsvqYoVj*hL&i?BJgX*+b}?1OEMLxDZAo-AP;l@$agV;$LjQ6x;*
z(X_MWv3=e)PYOibN|Exc8TmXl$6 at GXockW<f9>{(w+{&6xkI at lrcF9SD=|KCN#NBC
zGn*Qc1jJh0S;3*_D}Qf3-gvg&+}!xbI(H|QevieF#`cZQRI$kOl9S;j<i-L+TA}yW
zt|}t*0d+5277CX-=^yLttV5_Qc{<??@aCRSAhl|z&O3urh_ogdvyPafsUO5zXMmBU
zYC`ZTIDG?^K_B~=KR3<kG`iL33)O6;k0AUO`W&C2ZB*zM)9_g3P2Je|<H$Syb$_3n
zg^Dd!6-Uw?hB^=ki0gv^WDU{oK9$^iqsjt}v6uL}*ta2YdV15|*=!G>SLrGco%(~*
zI6^g8W&%yzU0Yz~mTG((d&+56S}HtFEdI_Wc)w$68cE?V!!rFz5M|Gpw>IT&AdVAn
zRXU~Al_$Ev=)NyaEmTs=ZXZ%{Cdtf2D#u0Te`gDfPfHFE&`^UlRSb=vrZV at F$<~i_
zK at Pv;K$tejRvfM3lY1?qw^Z*Xfd16pnd1_O&pC0X3r9tVoDy^6i#8)lo*hVgi#jLg
z$mAX+5|eRQ`o4s{!DG%J7zOzpapZGFk at HkZMZI0R$<tNxcL9SMQh<Od)43SFfJ#vI
z4Ww)$3sngAj{^FP)Mmgv#l2i9q&St{lq|gwr&QrHzj&2buCz8y{(c<o->MGKBDaEj
z at g-FP`7ZwSpw-b8f4)>Lkne4xR-g)i{*<BrXKhdylc9B-hH*+>VC$-*7!Zw|3Y+A>
zqZBBaQ!5KwsGEvI*W-e`Su~6mJI<>?oW-8(mkSxLP~h5dV`>6DO=(JJzkqD at ot7Vq
zR(Mpx{A}_a25cN<vW#$5C{%BM{;F+l!_U at Tr&IadrB^O^%mw^{6- at p|mrNOzKW4Ey
zRy$8gFh(ykH+ntN-Z~i#1yTMuI3RSl^MS;b%)leB8}CUK>`yBque85sMIGz=)M3ja
zk3H_#tI6fB5FEj33#-vyYjBUkZB at aqRh@;v;B1n26|)?Bs=b}bjp33|uT6$Ik|;_-
zB&Fh at Tf54D9?hJ&vH9PAuX9~wK6cV&Hm`fLd;<+Kp3pL6rkodtbdk$Ty0Pq_?^eB{
z at rk8IlB!TTSMAjO&hbIigu(vXPG5YRhlAY$J(&J*+#+ezaeL#qbzq9!oo4K{{-Jkp
z at t#{<0?>0iC|N0<pDBzR$PKND%N&nc*5dV39lPw`@ohEYEnuIb*ib^9=Xq0QFXvw5
zrF@`dVGh%=lHn3LsKRHLe^PP~4fUZi!?)kwyOQrb-?!}mAv-cfSvkUT7-fWo(N6bq
zA3Gx at ipHY|3e*t5C7v}cBT_oECw)6D2%W1;3p>fW53}AU?LrhQ`CjP)qB7v#mHY<C
zO-r#R=4vyC>TeYHz=dU3)ZTZp)gJk%_pQUk>s&5Pq1oMSce@{2drFhLG{xTN?~u${
z-^bVTr$r$(OduACdfeIDGgWl4eq6Rh+kTgPg9zfgXLOWunxC0N-%Kwmqv7$R%U2wH
z#S4TG`@Cm<B>p+rNWs4715-M~O)4wfDHhr8(I9 at 2dX(7d`Xn6CKYJ|Ffwl*umEnu_
zCuFC}QOBDU$4?g(H2}F;<>bXH+NPLu(+WSs9%}GZ%QKySiq33CVlP7e?-8`@IIYlK
zI_5Yu6i?r8LH^(SJLPR%>Ft3;ds_Vc#!k36`B&0Q#Fe1R-Wh|JOBrU3ZSDn7%&)fU
z(idSwdr|ObtChAZ?w68eMrBV<?USp5I<|gQ;r3I0q&l;<4?cQv{<enVw0iAN;TX at G
zT-I{ti>3&q`do|i{DZFIkXpYNTu`p*m#t`%F^h|_jZVoD`l$`8E^leT-=AP0Cx)p_
z{R^e+RU}YCB+#tt&#O)-uCth?z{p7tt%yM at J)oRltlv>;cba`thI19SP<nD%H2*u3
zo&KAf7rOUCkf8@%U&?nKP~Lcii|)+B|Jr^#e0S}?xBu(E`Incr=jXnA_pOz5u0n%x
z4&T+0l$Zli|HUa7aj?7_|6M<KKAH_lA&5z6p7c8ZJZUQ!N_^eqDQ>^5zq{~kbpipI
zmXxa6Sqcrvo}a_p6}K^M_+`-Xf}zHtqX;3t7jdM0S-{5rBqA at T{C2KniOBA_`2pn?
zB`#XgrcWsaSrbS2<FLKe+99n*F`33VT1@$!>!q|2W!jw$Zd1(bdoIT4T$YC4avE;Y
zJ7mWn^?N_Jhhu_cf%77RlDw;{956-$DwVYDoG#B++zwO9DJim@^)n0SXndKUU!%lg
z32V4=rrHj+oQ$QDj0~ST$MlPtBQK*pg~@97Fg%*=%1n-xJy#hWf7cz7O=&>suM9&^
zJK=9)9JDlXYV_6I9093Al7Xmng7^XzGcjA at +#KKACzb2zW6VHn%|TGolQsy*JKdOZ
zNtvjkv4!JOZ;u&#Dsea~!FIHPMlsYCO`w0wno^7J5D{QlDFgQcKok{I2mKKtYU9u`
z9*m-v#j`%6+xB1}`S at ZzhsGD~eE8396XZEKy;%2Y^K1Y=RRNAr@;DnjOxZiN;S^1B
zs7>ccL^G6K8Crclb6%IvLB2`krPYUi9AwYfwOsexW}8G+={;l6dzY?OUyYp)4ztIF
z39<y<5^}&FwrIh0w%h-m9vy!W+Zv63(nOM2)__ at gw?HrQcqu#}=FiIL0mazy>w at yS
zBR&)&fNjy5MwV}Zywl~(>0 at DbarWly!u;&Q&Dq8I+3WMOsS{kb;l)>RT2YWqF- at Z_
zKsiWDB+oX`g&*xh&e7M%uz!Q*)7>*SY{5tqO59&EwWT9eStfJ+W at 3B#hMREHS)?*Z
zaffmzVGD^=u-GaUOE}k9=~(nFARu1>8?F0){2{1zf)jK0AOK;n?~1wQ0yvhamu(><
zJn2VJy5C4&teBix;=!8PSGXcH<f?QnS at WD%p_I324S3wR64H7$fvI*ex97e!s-un<
zf at Gh;xPSTc=l^3nz|lTGUD+d+ZEmr?uu#7~M<Niy>kb=^W4iqV9sd`tn%p(>w{G0{
zi+=M{{(bA#{Pn*q%->$Tb#q~1;pX+f%rD%!asBpRlKC$h^@1-W8DaiT{xSgE&wAy&
z at 6USoKlnQ*#f at vp$Ida at YT`f%xTK^MEKD-|v~(jG4f$uNfA0!k1az_~pH!T at g3Y0C
zZ|?R7^1s0MmHeUf1Rc?5N<jlfU>o6~hq!AD#idPe?A^`26^tbd^EYoTkh*;S_T2oP
zxrN(&ynA!;?)>e4;NpG!T{3ML>&kT6Cxmm15X%Xusl3F|QMNX-YIAtjKOp}X-k{VN
zCjB37mAsyFfSh?)I~<KZ+-)?r>y6gjuPbx^Ksc?>y}P!Z{rT?dLysYr?;&Yem0Wdc
z>g`(!U-FM>yJuaEiRe1)pA2@}?7~4ik-L`HKbvXPOzQpDjo;_|!(#T~YEr9zyZv7Y
zMDW{hx}$rw`n9VM?cI8=w|cKV`sQGCuhGdS!|+KuAuVLcN=olEtf$7?x7Qn*?_!v*
zn4=lgyd;u^KJ=5?_J6&ty&b&mz5DiR^0rpno_qU=k8iK$$IF^uc+^E3HSW at xqt3k@
zejCUALr0COjbn;vCapdA{Sc7-xySO5lR5JYG{UHVm(9-absWFj>6s#hicAy_h>&4_
zy&Ycr`ayt^TeH6xcKzJF#+bf))E+dfpsQ}x19>7Z?X^ct$1>iw;3okV`+P8<7-y3Q
zi`VCG-S)3X{CWNM?Hf2zFWY>Qug5_<PXG1ebz2d;_u%eezx~@jmC#NG?W_MOi{N51
z$Fr7TUW0KFfZf&F_S?6*@lCEj>Ys1l)>#`ndHum}!ZyEs=>GP8_}lRCYT;zGM-d+c
zJi<H2r!CRe`tT$FW#~W`xbd;m{`7ITk+s6YbkaN0gFuqGsf!O<Jt_lY_gs3qzOq&Y
zN{?6mW`$-+$R3uVCk{Z|+PZyWJzU}ZRVvTcTni5olJgT->+hm9>@hw#yRPMbz2EvL
zYi%;MsbvksAN35El;L~l<RH$9kN+W1F at I-jnb}l9MOOdp*0<F3J&;Be4|R~YDIZ6O
zqD1w{e?Paf+JpOFJ^Jy<Z$R2_c4e+66L0YONcxYv!e^{=^{4g5>dK1};M8h7`;G6e
zI%)bg{JPr62u&Goc0ac37#9caI)tvVd(fG~jk3X0iL!P6eqb^!U{XaRpOP3B!`$Hr
zmwm-?L6vJ3Kp_l6kcv}@T1~&d{`%|WD&)v?#u2bZm>k3lpP-}HsH|9=w+q*A-`)Uv
zZ}Q(Q{<|&b)|OGj()GRIooyWq8?V=&t*>mZ(_NwK+)dKjZ*Wg;^4~4~yUo41Q=q>W
zUE}}y$|kLf72OUiiddlPbXDh6hbw(#dcN85a%{On6IR`ER%K_IxRWbl;11iZJqk$A
ztm1YKZkm(J%iTnNqYYuGdyxTMIvMTH-I13?kh&lILVQtRK=H7yV@$Th?q*50##0Yw
z>ePEQVfX%5YcE%~etxxXOlI=x$4AdLR+Fi at M&r%()kb4&Yc2Wv)2-*vlK;!zyRNmB
zB<aHaw|Jhphh>^-;VO_2Czml$WgA?@j8AQ-s_wxajX(=fTS&AdjA^&;VDAg~p8adz
z%k2C5-ZvtT>!1VJH9a#{R~u=qJVa(jMn=XF4J8NtW_JLi*<QEVsnvF$YtW=wa}r!#
zT~)7EWP=>Ms=X(abv9tWE at I2O+SS$&R`xTSER+D?E<y|Eo2lQwe_w0Qvd{*y06-g_
zc4rg+P2#q8hJ9%bbB0Da@!V;UD1kqoHT-L}cG7&u2UYw7S+tlCK}mF)*4{5_LCBYb
z$`J7PhsW^axIrrt(|+3 at a>=5JF8~G|0&ChAp)W{nu^qw2E~bCIY`@!@wTpcK;Gpx@
zr8kC71*<Mn`OO+p1+5+RTG#k<Rxj-ruZ*zS;0km?!~^*y`XO^`n3pR9HAf6 at YHkv6
zA$8vw5yoD6JnGd<dm`I5;0U(<Cks{lI%MzvF#bYftHI#*msei;%kTfV`LEu~-2c~B
zSJ%GW|8GC@<6FSZUvA=dwUhhH>nps2uk#MRbU&%z+gMrKSYEPsa1{b1`@?HEDV?R}
zn(xub84U`{XiAH4!3!2tra<X}2o{pz)z-c5W*}Xd;m$DPUm7p)e$s6%iu=(<^7|9{
zsAUy>juuav=k3ll<Q5>G^aW|3=u2CHn76c~&!F=@ZFe^k^V3)mZ6wR-d9tMc(rjdg
z#&#d%08^VIse$LsqoY0?H<2Kvdwm|2SUl=M7YOl5{o*}_KLmp)Efv*32IxVrzX1=r
z&V?2-P4W0zY^9K)$i!{HDx{m{M|1zaJ{vJRSW<jsey)(x>}<%k5SF#`05i;iY at GGz
zH1h$%9F{C->i+%5kDokYc at _v~bAtX^B{v!d0_@}T!H^2zJL+}tn#cn92A3CRPGk&p
zu)!Ks at 1^H5VR*f9M5&5($uVaElC>s>pxD~NhFHp&c6^C9T43g~Q&ld)l#paNSiq&F
zuS at 3_D$Vp{1cJ$!#mWqVE$}62Uz>86wnRJwiWm%3^oo#Y(Cf5Y$?rq7jn<L#q>Xmc
z6RfLgY1q4P-=XFdHe>_-N$-h>T#gLxV+Br-=BI~TL8r;H{XK9v*lfuaZZ$n*YJgul
z+>sL+{er(rj;@ne?YHgZNx$8K{fG$?{Y?T6MZ{%fZcdK>cJ%gb6{fk{X3L{j4+^$E
zB`x5N=4YEn7$s86&)y||DKePp4~jX{V^V}F at -1RQe{HvhXF)9)c4-~RCNai?-UW>B
zL{HW`Ie}F2C)pBUI&#mXWnhoTjZWL3M`r%~it6+lN81f3p%uk5t(4;HBBK+3jC$OV
zOzn%uXYEd_tezsVhqGzG%<Vc)LxQcOPS*<ggj+jA{RklqVTs1z=?hVB!X6C8DJKqw
zc%9Y5v6k<)Mcp9ZneD6#xF{G?Cn3p#W>1L%VwfAeQl$5b9p>QDrp#W}_OZnaHu7ZK
z{TP>E91l2A&V-bmEt~NgoXd>MK9!Dfk|{KwVYHuptXvQf1JSpq{Y8+A6a<b$8boTv
zE*PRS;-zyDas`$jn8Ty?&DnCvwlPi5n>Ls4Lf<L-k5y;RRthJ&ZV!ZLrdK}WOo!X^
z^PrW|+~S#D9XHb}!A!4AG1C>hw08biGV_m6nrCbA8f+w(XdIgOUx?T|r?JP at zLwK;
z&1~_AF8PCULi%G_%Xn_`h_>p7pPa4Udi=RrS at p95oV4>{*D4Rsno^0i&jLwi$E+=Y
zWx)1pb}r74^ANWE+&Gq5vu7kZ94rl}EdB^|Vh&|iHd9Iq>*6Z1TgDehsMZ_y7tEKI
z{c>g+E3Q!$X-Ws-`XRLaAe6q0HFF2I^zgv&NruMKY0y2A1Xdf8_8^3oSCdZjVgL at +
ze)B_)0D(h?!V)6ns8eU9b)16k*?EW?Yc0?bp_9f>Z5MW4cpoV^i5&Z~cJW?1xa^Ex
z9l!woEmKAp*sU|^cfQ|2yMwES&e((lPvxUk9HdLtHN*a6gLZq#IoW?$m`YG4h|XHD
z3vLq~@ozDxO9CnAhz_QD)o)tNy*fi)%|*J9U>Q9}Gt<gW3x~X}sJ$+z-5Q!nDIq at Q
zAXZ+)9nblr<l{`M6-}=}!PU$;<1U(JGJ0bn<b){R8CbGSfM at TXv`_n&Q0Hqw8H>GH
z!_%%OGb0n%8kQ8d7fq$RnBpo71Rx`9B6x_lYFGd0$Y03|n5~l&E`N6Qas9*k^Biz^
zaFOdF#6G=+Q)1wID?ldShGDy}dVRYP1xrfQfw^682pP7WElbdr?0Iz0oJU2g98@<Q
z^1cu+kRr?CveM3r-|K>zG9e)olBD=-3whav1xuLSkL8A2UT~9@|MAk?Zy(jh%aF#E
z;1b+hTg%%0*x!7elmD$O|1Mb@*YKx!|3BRRXZ-quEWT|*CUAOVOqhQC at 2#w at e_8)e
zf!^cVm}dQ-q%BA%r$>XS*ME6w?aTU)Te(m3{s!wGRG|b=ID(PDaQ(~mKTAt1s~P*x
zWvG9azUY5OPU<Im`TLpQf2A4Rpgy5iK<t%}UPILo)tTSVJnXa~7!I`lN$p*;UxV1U
zX3U#rW;PLuPD5|yUT)8P<zDVV3-BI%JN~6 at +RRrkG*M(CFJSwz*FElBA}D;a`#wE>
z{NvutR}U$tegViJeNL0-P>P^dpV|U=7+o(wQr){Ur4otQh$nC#a$Wu>>sLR~GJUpY
zg3X+@|2F)eKmQH=_f at J4B0L_n(fhx?y1cX+^MA`LYfJSn`+xk*-oC`wnxE^duNr1A
z!+!1TtK0^6#V(+eRYR?>`p5Md_x!vKb&GvdpP6|M<FAdczVf&-^NSjOZ+u0U;-#5a
z+RDaPUw`mzeyo1|A#Ca6%u_^BhHucuS3kadI`bpVRnh9hi;E6o=F-|`P}@ORT*mAj
z)b=PGKA~mz%)Z!KE^T~ebW|7p7SbDZdd=1#XNL(G&Dd*Sf1ruj$HlKdfZ$MF#jhcF
z at D->Y{cYK_U*8A at xabbUnV(-h1(c at itl1|*`u+u^azKJ=`^9X)$^|m-jjztH;V>8c
zMyW-8_UIBSp=SU1Y~!nLkAG+6$t&DPIg1TA8FBGGx>3+&VP<Ck@*J1J>kw3EzZg7G
zBONRCkIDWF7gmk?F$pt%6~$TnyxE0mP=a8 at XFW&_qyZa=alV_TE!avT at XZB8g)}(7
z3scGAjCh#iF)k9QgAh5gXw~GP2c0_fhFH<T8I*Dm<RAn#$UEXAS2`W|qto0H at +U+G
z>O(6@#{wvbwNo|^D4>)Sz+jx&s!6OO4KT~rFb+&?YsUAuH>?cU1T5VdgBgG5)h<s^
zzInl}+OYCWF4V77fRg at ZF!IZ0r<y#zgr`Gy2yo)5*?_chF+uz?R)-fw!j!viur!3V
zZx<jhynz3`6ktgN)4^CosHf#x*dRm1qZY4xDFGRgI_^q4DNabJQ6)6={vV$%!jEMr
zann!*#+Oj*!?Jvlj+$y1ya?&0tQ$?27=|TiiyK39_ISwHvyiOyLRid*=D)csqvAX#
zt;_QZv~v=cgEAIEpTw3^8IT69MuU&{e^FOg9iT-y4BIAO!s?O<VZ7^B7FEpbou$xJ
z!|MXk2)axdFH*o$sHz!1+s-Z~m;Nd56El3Du2wYL5N&j^1*!cu{%;sP#i`*6B`<fL
zB&U!P0=;CMKo&3^262I<_{~TO=o0~{5KsUFN#YrcY?AH~$;x*yA%;YYxFU9Wm)JLh
z8SE~|C@*Hd1}*~+7yp_pc9U_WhqaDK0r&;(phNOGhso^RhgUD3H6H!E_jIT6>cxwL
zkF!j?I9r=d-Y~SmVY1jNEX228y`K5%D+FF%?4J~snE`M3SaBJqgu>ndm8vk2(e8_z
z1|<rPl8>{s4=^HI_{(5{hKUQE_EEn{j9kFxJWmH7r)<pCuYG`g{%oOjbc+AC7vQx9
zN!o3iQ`}t`9$&Oh78G-D4xFeUV57nm$vC8LJV=2?;ww+tgwAg50}hP0M{wC~;N}iT
ztOaY|G40Sydzt2RZ6S5MVRIImpdH{GTxp5jN{a$?^J}j%>neDc=4EHdtHf9Q5S{ZI
zB8QNsHk4^{39;DxP4xpBT7XIG$AaCEYsD>yb1zF^AH4f~e>ZsrPmO20Q#F!zw4foK
z7+_A-4)z)}Bx5I`hH|qtH-x`TR_QNc9d75^H=Mx<x?|y>KfjU_H(=>TVJjpBlfz=0
zs<B#Od!Q;eXb!bXT5I2^wRT}^hSF(^lcRmj&$(%#xOF+fZ_~ImP}sH-v#D3SCiO<N
zNKFkOmficej}sGuU`9NdE$l{5gIi3BHc;4h=A`hQOhnAWG0=y=A2~s1CA8bj7(zaB
z&L-=wxT*1d30X39`Zhgf=vFZ}H5^ES58yXQ&2Kq6HkTivJG$a&oNgX%BO{s*XYOW=
z7tfjPx?r+y*o{t8z%z!vgJ6V14icU<WLCEd4=NmdDDCgD{x&}APAuhWO*0=$pVvMJ
z*Qr-o at SO1;fj-xB8`k1f?bhWU6!0F#!)tNp;lb{r9I&o$e~dnUwY#%-u<!j at lD+5q
z2M?b<b({glTTsvN3kNTDUhpg}C=s&<-$cAYL2((UTEK|YW=X5&2*<rU>Qx at QnKpB$
zT!rt;K6d5&`J&X+GeN$RKC4QBf{KRDj;N_63aVyS79M$)1 at paU%S_PB!S1t{PqE~g
z6~94C-&C{HoNFXNMrBbiRR}MPutZaM2x0758lYw2<qoXs;CjF&WE)Wq)vEDlwdFU;
z?AIUmU;O;)@oxR&tZ)(KyS}WkKqVkbpjmFGA5#s}O#cN~N71$<8U|B$V*vBVh1b#t
z36g$eP*s4Jxkf_v at b{Uon44=6k!otMWkl`M*Njl}nn%lAtyPhCgWA7UYqd(UZEg_k
za^@@En`vF!{p`2qnXgrfvUm~#Kv5}^yUjxth6GiR&Dnop8*vu`x85;?0F83uha&Ah
zi-gzfnXgToOAFFuQ!wOi^0iL=Jj|KYM-7i4S!thK<Izx)D4sJKd2-%b!@IauGq*PQ
z4<=3)a*EbUapoIY2kRg=^G$Mac9}d$kCJ6|J4#+QVRix;&oc^XumO_Ii}N2Sb{Slp
zL6TBEMmXZd#7L7RKIPIPMA6kcuu5CoNsp7|WjZmf6}6`AS7F&C?f(Fun{Myo44Ng=
zHXr~+>|P?w at D;ovA)us^DH-;!DKSE65gtK;CXUK12T|c*Ahtv5c5;GX3y6YHjR3t@
zU0S^8SU at qn<RN^}Zv&{Ggmnb&VcVR7U$I60876(p5=&+EMpNKhUaQ`7EyDu at 8n|}`
z=H*+qyn^}Q!j&5*-Cn)%rG+sw0J>Qg|H<h8^dueA%*fZH^?$GpSgXhSzxw)0ef5j}
zZ{(zYqL<?QX_%$&*4G$wiLRf^i=a#OHM)K-!S%D-{!7|H{H2)#1RQj%{55GI;>vUf
z5bO8by~_doIWJF6<S|SKp`AdA-fNA01T6|^`MHF8I7(-rxj6xi0&#_>OWKDXh{Rp<
zWG1JVO)%=i6u*ZcvY at Y^t#5?`g3ujA&gfsHBg)pPg at _>AfTgCjTZ4rDv4v9)X6lpx
z8ZOJKt07s};?RBYsTmHW`~Cx4aoR&(ia;0PP9<6ejg2AS2LLB+(MI at Y`n_}Nm(UoD
zl+k7;Aq<@325nk!&&*8Z9s7yaJKM~N{ckc&khRLzn(p_Q{a;^MU(fFU<#pJ9eu at 7!
z-8|o<^v&YG6-06iuqCN4t=?NDB|#uJ#&Q!U^7|W0>(+@}1G#A|Ir&~5hLXxP2BvUf
zD9ekgM{h&)@V at -q1(a?Li7SDCZ&8jC8~rj4d}*3t1d7IhZtg+n4BwzP-;zW-iKJVp
z)*w-5h+&NcQH9_fQD(H_xE8i&!n8b~L~wTK4$maWIYZVVCVuj;-)~;ehq+g9G43ET
z at _c1>VYY%06jDbc?!r at tt+blgQ?|hxy_3dOn!b%%viUIJu?~1bC^)+stu&dp(Mu0_
z$$+EX-3lX;&%*z^_T~*H!B0mRrGtulD5Dwiwmr1TWEj>KHCpX=5)9X7t7-67z=_3+
z at HHY?z0JI<{R4&ExXCvCY<0@%f9t3LOO)GF|KEw7{|Nif`r2~F{;R%r4=mvq`v2Kh
z-8cNH=)cDnQ2*ss1UeAvzq+_oPwMrJrR9xPQ2*m=c(cGz$%gX0*$DtAafv1R3elCp
z0`hzi1~EKIVv-K%rZ`7j#PSB!DOCtIxeMTQZ#(`m9nwa|D_fH05sX2^P{<jGz=UOi
z at y)@)f at e<8FNQGpIY;CTGQHq=d4|q%+7R{cm at yOC39|2MNYyK0hs7vGv&17$hnQlt
zMvjs|1;>?y+D81khFZ5UGo2(d6KEK$UIV#voX4pPx;_U2-w@*`<Z(|b7&y7$Ii!kZ
z^ZdS*9K8B at SD%~nm=m5Ijj5TwZx2Dj>3L^X?vD%~4|l=$NEr^>E7+&K#au}YaJ3c^
zOI|uVkztn+OJ0e;cBJMLEXzEm4c1X7uq(qK6GOi7YWI&n at 9rNQR$x8VMpU|#Nw$$X
zX0Gr}f|wx>7$3~SwevqNN_IK at S5qv6jqkU`H0tIj!5IF3b$unn|5I}Jh5z?N`ZIp}
zRP?_HTW)v~kZ9e3-R21lx?1xUZv5vj8oxYzwfFGR)7|~X-m{l4UL7Eov+;@4lH~>A
zDh*O0^r!spkUJh6N$5c)0CGLqL1U&N-<oSKq%e%e2a`j%EeAx@>(NYOQYs+o#ncKk
zdyzLC8!|(hHL>i at mR(K&lJcre_5BR8o0q7w2RTmr7)f}M1}scAsnPx9MkCyOlsS?-
z{ea|QAXy_Jr$KZcL{(fzR6&Wcqu(V-<Sf%*klI!x;v;I>+rhpVeExz~&>qudD1b<1
z5C9DVZRc+v!W3N(XW9u<(IZHmXg11qf)zDv!gN}RO2nU%w4QK1vPd+ilP!R3NiLh6
zM|+Kv6gITT6T=qgEBima_%+$z-QVAP at jP+(_yE@}WT!%YKRqUWLq8&kJPcGvHuvMx
z7mpr3Eo?1HdOb0GMR4KZweuI9aKsnE6JBc#uhD at fV{2A#R(QzEFkkk!@jaUa4zs0M
zrfiBxmI-q9Og8m`q`W!qYlx^{m|}$3mDD7$kX$NdD&-CMh$O|KZ+5?{ZC~2Ne~2YX
zU?goPzng)Wi=ZS*v$;C4L?jUpX21uTR5N}R8S8hBZUK^CMskT*q>*WZ3{mGyNh#SQ
zg~=ub#iqhnL4O)%8>VPHY6?2hhBsJyMX5u9=M4;fA<&2*a=lj=%i?X?GQDYv6I{Pd
zP9rF|x at 8G4WgI#N2G*pH5A3WV$><N}u}U^=(tM=>%&#PrHgI|nTVIj at dR%DPnGq0i
zQFqztICwOLRJQXL{>`Mm&cTAqG at 0b=D?8h6Y(y*Ny`M{HW>XN`(Ck5$B)e)Fa?8u-
z5%TbXELLuy1}xpvEEcyXY^T1oQwtn3c^>0&j@|?}U1W(P$~<h?ns%Cfzmp)~_uB?V
z98R>h=YzG+ZaXaQ-C&GJqG|BHaCL*}nqd9>Zi^7yujr(!R??8ci;|@RPPpmhQu}!f
z2t<(BS8|JDDy&RND5s at +j?(&*N;Bz%=lmq;c7B_DJLUX;7a at U9#Te at 5oWC-zqxt`J
z2nw?CAJ*5u#DD#aOn=a{;yR4Grpy0AM$01z9B+9(E<!UnKx!4Z7wJBPd()A)@+fbi
z8D`-Rfzvi6<AMJ&31NJjL^@m`)>gzUL=*|j_b5tQ`)*^k9w-tL=10L1t(?^Up<EcA
zLRr_?F}^yLH_}n2n1WdRu60!WT*guSs`(B!AG|0xXg(*7KE(z3y7&#{9Szv{6u*@N
zI2{(hj5zb+A~<iK_w1A)&067{4Ewf3X at MVmrLXqkvUWUtxKlEF0>Oa at 6P_@xZ*e=v
zCzzhY%2Nb5eL}Q)N|o`*qWefUdeG~2hV6?<%ZX3>&ZCjVchtKC0FRy%01RhVp_Bxi
zcR#ADO(HvBxF8<cfCwu$Hjt%gU)&-0;J7!Bo6(4}5{hk18MOBk7&cu6 at s-8>d33X=
zVhZj^hL}ONd^X)BvPzCC5@*EB^p6f7V}hWxM^|8=!Xe|GV8>%12Ly)2FFA(=@9YW;
zUcz)BH<=L5K9Vcq%YGVG2H~KWZ$o at W8^@jAAbzbZY5>WY3g9_4qf}7EYUYARIc}5h
z5K7NTM}MSvxe0*-3?hs;So|TGnG~LgmqVl)HCJ9*E)dzI{tcuXkg?G1md%T8B-{}*
zB-j9;-llX0He@?PO=$_jc)O5jK#l+jw at fC4-+mQ6g+^V*f-Wt|y~68vxFB#6#$qvf
z^*j1mLQQzhZjL0iRtv)84B#>&%zZ?A4Y|-$4E@|OH9}i}3m=377ls)^2Vv<Td%!kg
z^nZCLt3tl;o8&PuM17BGdt&SW={3sN8ZDc58zYW(M^ZF9cjZo3_D<npdq2d};HNKc
zExd&k_3bA+({cD>f?k8-wo9ElOsmTFYe*@c!mk><fyP=^yBzpnA0av)GLU1D%m%``
z at vbdcLL3I35cWGxkZ;5+hZUk at LuC2TMKgdi=&HR@%r!<8!?jPs{RNZawE!@`nWmw6
zctqa~wFpw5!=A%8^fVfj2MIQJ4Qvujnm9dn7O35T4g=OfGHLjyue_AxVFPYc7Y^t3
zLbBu47E)Qs0!|;8Bnef+oYU79e$igQSa9*^9fcY$;#^EEr5o;IW#3fD*0OHUm|Q|F
zmRqtXVMa^ma>Th8uV>}51O%>wM`Fu<aWmY3-Ixjk+^!%8=GQrT%-MDia>r`r&Ehr=
zlJH;^?4+`bsUB&v;H$HncpeeMLOnnxn>|}Rm_uf?wZ{=UBZL6RKCuUs at Ab6Vf5*fG
zPk;vf6d at CuN9_*$*;QNE(kv)ylp<(>APOmBA&?3Zf2v%YJ!D;k!#QL+q=+znVH6!P
zzVqT_ZNdtY7sNOI8X at 2j8H3C=+i`;E0zA>`S?ikr{@Ye=DLeLJ!>uN_9hoicX{HoH
z+6KhOR<xmp7jcYsu?RSx7}Wzw6`8ag%h{Baf9ID7SAoOw5|;%vA%DETkF#GTQI*Y+
zS&Bq%?y%q82`Da|{T at da*O0=D|021I<OK2gi$d{J!G-E at j+du5hs$rolt?P`$yQ{8
zG+{+twBmYhR{cFpy4gl}E0rGeR1UHrsd_|HfKHY|Dbv6$(kMww*;Go9Noo2dc{@6V
zlJYDlNNxh`cws7~a6R1gIHZ%=fo4aV+GI2tMA1M<e6%H7#HL`S_D9Q*=>v^J`YAE2
zll(C at -xOzETooN;I<p{6#^Ht8h)Aiv55Q9DsxC*y#)Fyf=PQ&=L$wddo}{(>%b+1J
zZ85y6Jn8n1=}fg1G!`7<Z1=G^y_f^#8J%TtWkG{}Jcc>egjq6xzX1F6DNH%~$6K>7
z1PnOp*bq>bX|gsfCp*a45{_>|ryi7Q^UmR8xGz3DlnI97E|C;p4dkbU<u)_8Q$BB$
z7jCsPk_C?cNUKooXVeS6v5U^MZLvns6ab}ppp46z2+A*~J*a^s^YaZ*NepU`jja7Q
zns|43U&1W}!EgFZ&`6FGq<EcH=-{%B$!a#40d9zBEn#8PpmOk_pVHx-#l=G~Eo{I-
zBxoC&elm`NnPFr^u`_J%0=!2UJr!GI+MN@)5-l=ikpOBrX}-k?fRWp(u#cqesRiW_
zde8RBo5e+{w3HfYS~IbT<h7+i%$8fttTUn{7K3G$r~AmGLqkfu1cQhlTeI at I`7Vv#
zTS0cAO4_4xBW5Rn2;}eX1iY2y at GQ5El||%keQKCVu(ljI;V8VFSzTYYX;z4YDcqz+
zL=t!B7*%&FEFdI0!e1pvQ1!iqs=5zJBtGT_cp;i{&md-{W;|#&Ybd2FHxcB%wG!D@
zd?6e)IQTTy?EvTGP6cijtsYhkhhjxl15OWlTaHaQZ!HatVTFP1E4CH;-k5~BeIGI4
zEX0rPQnjV}tU#p}77a9Ie5@)M{a031nhb#fn)nDxyiMenP~;V{fRHwJgi6NCj?j#e
zM)UfqcNZ9(1 at D8ei3k~mO-mNH!9pXLP?y9)97}j#qhOOJAV)p9u34DO)nEI2j;P=p
z$**S!zU7Yr0 at j2O;vE=3$2>BKnfSGUS;ujTz&!9qfx}1$5}gZkQjKczD;{$n{que@
zzlqrFVlKFSSK8KiY;w-o9>NyUSwCeADRz!l2o9~u_0U$f7PkO=Kmp~iGr6|oC01E|
zAqeVu0w&|E2Xk%Qf`_v*&|a6u+a|&%4tK*5(4Y`(#;njQk}BH_gytz?{q(?%Ng~+u
zM(fDvinC`CHlxLFpf;e~tVwM{B;5hQA;^B_R?12+GvY~OcA^`_RrFi7a5sX-$xB*^
ze$a)Flu6*d+hK+nJZrw+Inv#Fw-}g;UuUxa)=GxJ%BKpWoi1g9%7>_V{w(BS=b-UF
zBB7^fXt!qLy8|YZqI?oGHP0z-x#n=JtZ#&;>YqCUBXgpKCK?1%DY&ycbys^Gfg``x
z#6QM2+p}LJB_OP<s%|%_qn3-4Y{lZAda)FsIr5&w^yWD^DwPFSC at T`<5qvS4Xo5+C
zY~+!>ejphs9D+IAfIn!2Smrwdqw9}l^2cO-g$Tgk!|HHprQs&20Q3AoaYt>HX&oG`
zk`<BC*&<$$j}U{AVmNBS?X4!qhF%C~NeS3auUi>9!i<n>%zKM_FdWV$j|#tgf-mOA
z?UN1GtXG2pSk^)fn&Fn7Wh?Ho3O?em$fE(I?wA)8*i}RQC=x5sqr$+0rfMZOU;ARK
zX4FF1Igl?_NZvtftB72TX5rz;UKYq-Tru|r`@Kp#I5<+%EC_Z=5a3mQae-W4N{TT8
zi}K)EVPtL2uC!HUz2&Nb8NE3vo2%eh8wj4$Bn4 at wM<NB}(eVim3+Xlu7?3rUj1O|r
z!wPGI4r7q$(U at Y&sf(YC9{^dCAh(@o89m<V=s9W!9WJ?-otD(%Y3J9uCd=QVK5%Ac
z4$)&8?(%>i*1AM5*=-y#Y3J+K9zyZxy-J8#bU7g<gWbBhPRwe?@@fSWEQX2qy<H-{
zido{fLiiqN=l&XWi{7OXv4@<X`$g0J%p7mJ!oSNktci6)#>3;cI7q=$4|}HwnL7Wv
z@^$MqtzP?x8retqPFlV{@Wa&GvfuG?Q~r7ooWS5>PG&`|F$aEzIyl^zC8HWq83IY+
z6SGtz=Cgni5ZI0u*8*X&=vRho0&8P&L9FOtPA6gj?0~$6RZLig^*|%aq!2%VHh`12
zIco3lnZu5P+lNp=8iHP91f-kU!=9o5kLSYEVw}<f<iSH#8gtUEvZrtgG74r^k6CsQ
zR4d;tPytJMz>EzQbgAHaZD<ZmQ%#Oer&tUdiO4fcQ^xJbWEGEUq8D@?Sjky-+)N3i
zoZ=%$504lge?Ekr&^R%RFTrFvEqln{&ylp5UI;XL@?iTD-WO{y(Rg_=KV;LI14xDY
zd<p|t{;?PPi|tLQSJi40J|gFutequv6BP<V%%PdbS>>U=7lM>UOA!}I-)vo^bCJ+7
zrwI<`!pNGk%x#RJURH^-5O~}lcA~4Dp4!RgQHy5^d2Hr`7w1fafPu>0ucho15>%M{
zq3SmLWMmYIFNPIBUMMJfbQ(!_fMU<VbArU6X2Hnpx|7YtC7RXkJ$m$@0P}A)s9F=Z
z3c26QfCJ^P at Dj}1JOBx9U5YS?Cmn~5 at Bv-iVklO5Kr+SWlAlRmEGP<mBcTvPQv=02
zVm at 1)H5Gt86ovWz at T`ByfHNi_vEIk1bLR)v62l%=k|9eOgV|h9mr#|aGH`cVFgn;i
z6Z-0FTUA=XGb&LnjO0P3m{{dNKbN_^4Ea2(evKQX?ErMcLVjbG76=Sj$u9f_S(b3o
zW$0$Guk747YQ;?<xB~J|U|vv%Jd9q|ba0%Y0V6`tqYeSQIm2uVW3<PM)x+yRk;*tM
zBqJGA6Vszg`sVET0G>TS)CPr&Yv$xwNEqrzjQv&Qf}5Lc9+ri+(vwKXLi^?;TFsqj
z7(Ca&d;p7jtWba*a_#2yGNYq_1M&d`LkBaAfr9nqlt_<8+m3^lmv7(%4$n3)ithz|
zz|(;>)Tuyw+<kh%2!OboY=(z`zcV<Hl@}OKMz-^ZL}uy&87YUS^yLrTqrt_4WIm}U
zRS=ADDhh$Ye9>cI!D?Iu&c|X)lp$;^Nq2NN0Uz~iv6Zo}EW$u(c3=$HLaGRF)D$=)
zD<GFUV1%|9Q#S*AmanpBq#>>ag2;VuUZ)gP%TOL*domMg+L+`v9o{6d2mZ at lS<O%-
z27teo%F0f|BnJ0#volpF6VL!6I=6aYS1P6k83Vd335{)67Cbh2BzE#2UhGGiw2ZDT
zb`Hjd%nXA5(Q>gCF51}PKy^)<0kuoSb_<<jk4~9mBeaWT0mo7qn2VU8xJg$7dnUl!
zs1RO(f`|5a=nEWs+C63{i@;zG&tdr09iC(!=9rAQj*_Ola<HgWK=$*mbHrMUoT`IY
zlD$sJDBVlmY~@~<f6U8j{M6k9<Hz8T#dsxtn&md-t*`=^FxkmmJh3W1;?bPoEA&Xb
zk*P&iQ~~pw;<QNSltn0hC&vU{)n=?lQpjy)&-gBZ(b^ooNL@?j%=BcZ4#nJjneUt=
ze04Kpm?;j;PKz`iUkJ at L52qxAwZXBd=2m2|VzvPVTRn>WC6E+26v|G(Wx<}U`4$!(
z&DJ{zbjYEB<8XOQ^zJDaRf=s)y#K}kyv}*^j#42x5TJf$oIvjj2&jx#zPy=$&O8-|
z_7;tW2lLrk1^v?AC>KN^a_(aEW}Wv9l|;lXN>V7Fv!f?oh)@9Yi6x?eBd?0Kfk1tO
z;Th*Rzr5lcXUgK3w-xOov(5PMD<q=Id)y6`Tdc{C)Q+JF8`nYrym;95HUHX!;!-R-
z!#CmEPTO8d!V)9r#TN83X+8;fDnBcM_RiMg-+c42g3XrAj#BIx%wlix at bkoTP8P+S
zYPP=iHM!)37qzfYe>=A=X1DLR-{#AhiAN%0b5}GFJFK&f at h_(hT4bXr at b;Rf4%lpw
zycE2kEZB_N at pZoCzyIA+3tuw9V{;0Hv_$7lF4Rj!*v4i_FVrY3`BsIk09|ND>uBCI
zV1%VK$Q0JisJlH>`pq0|0foz*D3+-$ILivwn9bToLu#6l`W4j7alj$0wn<Nk3*gK#
zT?M^l;WHF|0`PJxYj<@MA_`)w(jrx5<x%m!40grz8XCQ{Bg4x~5w8I%ZqZ9XxLW)^
zayh5zL#5f-=J^`}b}>}hnl;;jDb%}02vh=9w2Gc=`fvWIv9wbT8fc_4H^m&bxodoW
zr(lQEocuf`5y=v^2&8dT4SRn__rA&@>{%)**Qg~&`vR3&RDc-i+3RUfM=k(>5nYck
zAsNewBPyaKgPOSpz^}e)L`tk{J^}=0TJ58eJ}Q_hl1TmO!U*Bs4{z=4QrN~u5k_j0
zC=VJ(5jiFZHA2z<AX$ng&UW_?K$Nn&ZVMX!P6A%xxLCRL{*po82}rD5K)@zv2uMLq
zzY7ThKc2=~Er~wYf3a4;DNznuWP_*<3N4&^X9?ncomrO#xCJ;<9PuOyo56P at o)4dv
z$?3x~<Y)tleeO;eAhU|p3+G!U|ITnFv at y*QnOLeH!jiRiDeP)8HGp~&LP<x_BId>`
zDZ&n&rm(OlmgMHX1G%3l5hEMV3@)$}NYBW6-o^cP#K$@fh(%BJw0F>(NA$0Z>M>Z7
z!U<&Dt+GCfI|y5J@`aHSiL&<b94BYF$_CR=IY)4uQ8318Sk=;G`xA%@M;X)oaax>g
zySgI_wK{oPjge-wIN9d%Tb?DPlj7aPqh3^aPVAj+a`gDJ3Y~22-(-A6<ObTG+;Zg?
zv6QU>EtF$e4&*wiowv;ZafHx)sK;?YA$b|ME+v_H;4v7}%mqE`X%i3h%z;`oq~;Bk
znz_aa+{j&1OrbsvdA=dd%&#U#kzY|h<!3b7W|ga2$N&4ApzW7!sS}=G#F&i9QVPo-
zFs?;RD+?Nj-9S`#7_bfA6Vb1=ep77^ZT*y23#7<FeehkSE$0tGuQMuu3et*U4=w~L
zECz%7OgV%~L-ar$D0PzR4Vr4H1X3tD$51ca^JqbHMC*y?O`gNau#`_?q|wXd(L*RQ
z$i?U7qSgJ!KkYt4nT_P%57NQ#-^;qCKDeMd8b=(!<P<j5gXG_bqgyyleqUc*S+CzK
z9o*og+D(Uu69$!e+OK_2!S+^5!Xf;j3F>94|3O3x4Ln$0Sz5pM2e|vSwpQ-lTV49D
z5dIsXM(OgFp-JXGY?oxR&I>rOcn`6;x#Kfr9d5j9i=k$+RXEsrgmLZMo%kwCQ<b{8
zSz52$=+;>P88?^_F&yw>NL8HCwo*M1L1|Ry!3K%v&u=k*_a38`wKL1VKz0~x>Xw#^
zPpr#j7V!9k3I=o-%nt_CBKQWNYp~)$a16P+dZ=tps}BwVh!@o~h}4mRP{J1f$iYEJ
zM1y>h_8W+D&t*5L&Os<`xr{!PAO|W5_Gm$gW%BlEEQ`+z$phVlG4QfA*&cWmqZxOB
zHS8K(A}dx4jz29ml%SamF-lZ%@C!o<vi1;5a)Mhd{MZMeGq9z_D5VswS4eugQkhyZ
z2sN6<<U*?9nJCX-nK9rfo$+3*STtIXsHhj<$7KsurAD?8m&`Hj at oO~1sC)6l5&#Q#
zTwF6y9W&j5AVs<IIHP$eEhzI``ZhB9EiIMZ&IerK{gm3#VJ`}?gcZtBfhiQ+xeKWD
zR0<as;8pJ`ioX;AfcKC3C;%y?V1`vATkR~3c+ACJtzy%DR1Wp2#T5HH6llR+9fxpb
z5ti!b8tyas!M0ga_S?zJ$}XWfufUK~J<CGM9^gJODrvXfYVuleMz!F!J`WQl>O*Wx
zbLdFz1j0;=Uah)BosErWOJIx;EJje+(eW%)%v2q$C}Qy}k)Dmr7UmGP_ply}-*Ac3
z555p|<{1*e(OIz;{Gi}?vT$yhh~+}&vyf3=Yk5WX%ilIa4T&tnqnH3g=72{|#J?*V
z*rV`nUTvj(o1TD%P~KeouFW7MDb>rled7*7nS)@v8TGUr6=p6%Ufd9Fqn{q9?=VBj
z%3Y^vq)cgHXNgO0k3c)M8D+O1K{yBwE at ascD{VObK-0j<!p+%G$H)|r{p7 at B@yr%b
zP1XuNXj at dljs$0w!2mVf0ai~2E-PX;veMzKHrGsWA>%-B!qtr$rp|WW&W+dII(Q*Q
zipz_AJwwFOK&beT!A6k at H3*-rAF6f>dqjO*7uyV@=?Y7clYRzTVkdW$)vvtCK#^Np
zPRosT0KxXkApsGpV9_%qrGSsN&`hovE){p#rf#hewha-ciIl;`9BngeyOEKHL7Q-U
zG5=T*|7elC((z9wjxUy!e<D$QapNL*QPw>`P>tGH%r|ip6nsVs6UT|*$BEzb;vqsH
z6w2>mF=S%EO*u4k&J!WbO8bgM?m`O=EBF(Vd*ScZIb?+VJ;r4AC_Uxac$|qKhx1CT
z#0VWfC4jb}f{V0dkq01acM**{M-fL4ew0l9w;OzR$7Ticx~$RALc8m-BR8ImxJG8#
z>?u7(6|>UW<1{=DaRNp_C)1vXa)kajIS>mkmdeo@*N4np=|;?)ZRD(Eu>zJkgY~5+
z*GLG22{0lg+1lX6vkgZ88osDZqQYzi#Dxs=p5qn704(PHvQ+heR|};n-{);|ssTM7
z!7#9mt%BNK_ at HZXSfM*tPQ_<NTgnBR_f6~WCN$B}T%fSM-;#wvPLOCSxza_>W3mp1
zmB$#Cs>JiPDw=bUOAF5Zyg9Vl0Zd)Jb~C0tJ63bC5G;MqcXy3ft)iX&3p*!jvX10#
z-r$&WBwA;U7dNzl^1x5iwV6jgFK$}d5|eLF_0kTstd%zf1DQ|Nu!6d>=%#cj%c`FC
zhCR781SnL3eEB9AL1MdL9rMX#j2oc^pSz;+%iiv<h>rm78 at Mrq-7<n3nk!eh;NeZn
z);H&p&rstgEh8l2%p+M%JH66uH5oWc>BLkWz<^58Lmj~510+7 at O}oS>I=Fvwe6q=S
zmb}w at 9pA<4edK<mOZp}bT^6GFG{4vt$3;s+#9YDaaJ!dmjbJ$o+WjQkSN8UZ{Y#ij
zpc}Vw3osnAaxrD=BdZ_WSrMU_(qY;3d0RjtZIw9gGpNv8t)hNz_*McJlGz337BWCt
zp%}jm)h#)LWV#gvZ9$c}Lmp%w#DP6#NJmS8a)C(;QV4wc`d at ekU`g`q`e6&^fs4!4
zdcC@`n08MgTs^C4jFrYw8wq(&8BF5Fqa2<8qrQF*$v)~!_m<b!>h=2C%I}uy_g2=I
zzT|(s at q|xNQSVc=Y4d+rO&YZkzz{^4MyTpj=)s^l<TDdgR0ZZXej42$V$GQKqmI+i
zi4 at -|&$P&M7s%*Qv%iPdnXay&9Q=xvjVpL3{!@>c#wuGiViw|>j-epmDg%Ami_&+1
zsC$+Ph2r!W*|!IM7#ARNGt-#1(;OgSZ;Yey1U_RE6a`>_N}0@&;G@*b-k{Bp_}MuK
zyVmx0q2nALTwhpClv|N}QH_kW7iILw4qY34fv5<W#?Itm?7^>Y6tGVa1AF8|zU-&(
z+P%w>Wu8M4l<nk5mb*c`jwY1{V>ZrACaB!l^5D-iI#_>gd2~HYcY0S at B`pgutj;qv
zASkHrGZrF;U+=h}1n at Jj{gsAQx>Ty%g&00NJzl7e87hBCn at 4ehmaxH@az!d|@mp=Y
zO|Qv)AYfHy7&fX+3~G*b($|Q$%KRS5++GV2S0#K`aG>2VKj{t9Z0r;y5nTZ5*n8J*
zfoGhHQEgNdb~6aQ6WUnrG|M-B-#ejS3Kg@&-3c0$qG5YtwIM1|AIXjaF4NER6xI{4
zVwE^1r1-EF>4 at P7bfml^e=q&=g6ESuxa`b=PEP(|QYbK4L#Wcjq4cZqUQwm1Wcz4>
z!&X0K3=1?y0^&hvQl6n96QbS$A!sWK)H|w~4v{X<IY~Lln1V&}pl5ag0HMomG>%{<
z4=d6bWjvXR;=4cRGLN$zF{OL7_x$OLACui*cAp>Yqh+1YoO`5>#a at wvcB*J7*?XS6
z){Lu}UU_lD8+Oiy{Xu4o8r*RzsU|Bhjd5{!vVA<=d$xC=LKUno8^+ZJf6ThLGb7uw
z4BQ}<Pnjov)q+8Da3ewXRZIx!6iJ-CoA><(Sc%IRP!{|K;_V^oB{IU&_`xtM>fCJ;
z#0ENi+~R&@${nJy*cAYUPugh*iDt1yA&nT~sFn#b+Fb=nJyGrV4~mRPIoTlk2k_cQ
z^JXZ3H^vWJ0Cgl`iFB1);w&NcI2gY{E5<M??j={s`xr+U8keJLB&mms6j2yxC8o(b
zoX3Kg^K%J^y+kMC&4^Zm1{Q_6fJDk-qx)sk4j+ky*VZfrAaXO`nq8*+qkW3-wCC+s
ztCJdWhy>w_aubuPh-|}w8#8}^!iq)!Pc~C=Oo+)A8}q(iAD(w0THI-R at I@pg^nN#2
za*8osOx at h^HS2=!B9?%2rk1MQDx+DHV9AYW+x97lpANS-JBS9+ZCRD7y!HeFGqMje
zq~jsjI&l9_$pWZA!n9K})i>3)QN$sLJkUFJkj~K%r@@d}iujy%Z*mb(Td}*KF(P>}
zOXFDDbk)0%98Y1CTU#1=<a(#ZQ-#Pg3tGpT{0PM>EJ#oC45bXaWo7N!8Ezt>fy_qQ
z3VZM}KP at g&wYj1$W2g+7 at de4_%1l8RpM at lt#%}?4VI|*u0J{W%v+R at v2_)L6=-lz3
z#qBL5D+|doK*5wEkdm9y?0`3Gx;7SxVhNN^nTstab5yi3&`Ewj8n&Mh;Gj_uWJNtz
zZBx|$!2u`jj~%b8ZZ)Ve%z7?hdzdbDVK?n#8{z<#El+v~2i`|^fVgB)q~;KFLz)xC
zXVxK_{%W?vOzS2Vv(Rhd>w^nJym>DrpPDFlEKe6v_JZ8t0ZlzlJDm%JYQvc-gq6QZ
zX61Jsp}oV*;j#joOc>l_ArN5Xh&QD87<bGR5eZG!a2&<rCna9O%x1(mqLMI24ppA*
z6tJq)0n~ueY&D!e(;rEgIUw+HnpB?e{^_8C91z1Ha at GlAkSz&NVvbB at 5Jnk9C?JXf
zLTNoedsz-9#IbCnhZ6jmXQ(i_i-D{l+l=-Y8!}sam1<rZ#{;T}%=2cMg+lhJB}_6G
z4$BM_h4PhfV2XF4jNeZP&H{hO7AkA8GU7ly=}|i9V2J9QX|QJK?Gri|Q-f+9*9|0p
z=nNkul!GJfEOr>?Ej#M$f=+ at 2@p`dYsTK1?c3!L*L5xQb*JrN0=70 at M8=MNIU||FE
znu*sp?;jlb%SB6-6G2JkyrbMEjIlJ-asbg>#E!8h*fAtkLxOnvunJ4&2rd`gevCqD
zEl@};<GUv*g|$Rq6?PxuOz}XB{z_?%WCVziFpDJl)dJdp-zD7tAPbfg1m1SRc*OnY
zt5rOTg4H5P|7>S~yJ~HNB0FTtl485Tv&fRAC`6KMnV5ngHc)vtie-kLEheLg!ao+Z
zS83_ZD81I5n983TDla77Y)GUzYcUPduunb%|8O0^aBP=R3fxg}4N&<wHxH_wO<L=v
zlb26hGmxK8Th+_cr>&WnuTR^8%G-S{GtZbZL>%UXOO9N_ug&#ZEy_EvGgO>#1!ut&
zk|bei at svkcRxWMjAa<Mah(+S4_}HYqn{cqks8Jd`tSEF06_?vrp?=3UEju)-YGAVF
zl+inl?VBYFal5#0fD<u1z1|IgmOw+x`iDqpXXpE*g0B at y8B%Cf5PBBzJS+ybw$%b4
ztZ2aUmsi#>#RU5m<q;}bB^nZIde)W*^0=9XfW?|Ir=X4UT7tn1W|b+eJShN*(eR$V
zaZBb>Yz9O;r#PSi?i`mG2#yrx4lD5+Ou2or+im$8CG(k|i=1Y`HfJy~+mLP-Sss^<
zDA*-;?052(M4X!4PwEYYCsNG`+PzHlL at tzL#Q9n%6y&3m5&GbA{Xd;EBpgmENf$@7
zG49o9{r}3n`n{a~e`)!P{(s!Gev<c!ZC3xU8ChVzlnk!6R+HfX|3C$|wYovUrIBnJ
zaXK#IDl4Lbt$Bo`(RhNiUupvd>rWaZ0$cH4@<XJE%V5^@YB&|wi;(}AS;SqA<1w2f
zr!^~A<%KY!c}c6}wO_m4!6gL$B8Y&w=O2v87sV5xPwf`0n3-pY*}DfwF^C-AP({!-
z0+L#qh{-f at VuCpwP&%CKziq?*5&7(mr=jL|ql+;elkozXEN2Ovu@!}Zo)IbEX{Auc
zrLFl2kIlWEKQ;EAKYsf2&h8GA#(WSa39R*VX75ob8K0&L3tvfj$9w_M=TWp`5*A55
z0;$FW8kcl&F34nsnu82QJQeLhuR=XMlLS(R&vUKZ37VmY)*Y>H;gjR~vfs|7&_d2w
z%%x<}s?@`%Oa#rG492tG4VI1Z1F4Q}@UUVEiCSaM{7 at iS)XOi0^?>;MCt19w$Q4T&
z^SoN4ygY9{JR0;mm&5euep}748IMP>M8?X-_!%Li at leqQ5NqVYpxIqGbD3rH_J!G%
z0}3>$EW?Ue&5WCRJM&UInk24)w(0pbRkEoL(!|?%y7w=;)FT!Q5Xktj)fylb$XN=1
zJ!xzqIe7K+u85vc$tF**X!6IOcVGRvv48O5)vg)1&b{)2F|4LTqRYI8)$oU8F72((
zzlHxxAo&e20PLR$aUY`;)&ThxBuiUl?EepeUzr(KBpmB%b!*%cv0E?!7EPkLwF`=H
ze<=)GsjCf^!D6wD0BF2p%@Zt9oJac%P?@&W19T3Fnuomx%%reVW at 8Jz6m6?{(CRe?
zNL$-r+)b^<y#^-R#w2H!WRIudx-BDv#|lz8<yXi84$6hTXrIhDwoDYpMoCP<?vFlq
zD5~X!AoK*Jc`ohuMH;<?fddyUffr{0PI6YCCxTwVRmeUuwMK`{Qx`d4uJybbAl3nM
z%B1IjP%(dibZ6$A=B&95fo*7CfbT;JI=fTC7o73%1^Sh~&XA0z*?|p6>l)cparB+`
zn at 2}H$GVy0YU25TgC7kttR@{Nr)5VSf$?(&7%>Z+CP*O>$R{Xk+kpj#8Mpr?0}Xx(
zLh+avivVi`!1a}hlmowwNCP-DYrGb*ph1GqFaz3h1FQpA$!@feGC$edeY&%sJbCrv
zS>Q*b8~+F=`d=@hgEG at 4l=y)?JLhBr@#Y?301?7o;q_W?yFE#VP{68T*_?wcA_cC^
zLs593zTN(m&YL=%J0B4u>f9FL%$5|v=AwcV0tN^F!+kh%gBpk&f*2!29G%+}z&0yA
z12ldh{X>bv$`fk4t>zkw+3B^9>ogTZR-``6nJ&*Isp<fa^l(FpC)h`)iOeinxdAM=
z64i2I!{b8)haC!XJ~T07^OYa|Z63}2oo(HHJwIRl_U`Mub3e3kA}R=KVToVEbGU7W
zrxqR at E-SnWvk_WI>#%g`z~KPx&maEV!kfFVVaW3XRiUq6*I&Qpi5s07l?AbA&?fIL
zAbhW`4I8!-B=fFo$8vSa4J%q=oX6g2VS&BKe*_s2Mrz<l+FsJSOudfVVTe`u2=<v&
zgdWYzv^Zo84;x=fh=9GO>>vm&P7yM+vSrBKGWoF at C^PS|kON`MnMHnpr18Q7lMSDq
z#g^G-n1hK9Em>%(Vrdws3TRmgFCMs at k0bxY8<KppoJ2ljIn+bYE*W8rROXmTXc#8(
z1CWmt2FY4<t1ge)t at pxH>CCEISp3W^TWGE)Yn^LdAjpQJ at Sxe{cRNREw8)&`5|&h6
zzS?{C at YSE4*%^D`AhnzniQWkmy0AfQkL!w_K?{g>UDyd5BD$SlgSp*lgNkAkyzC>0
zPXGE}((C6SW7q at O2TvY8-QUGBn4t&zN;%qGk7dKkclQ_>M_#3*TYIhd2R+mKsBS at M
zWhz0+yn!5VkK6{54OSU2J(>O9u$j?=N}K?GFh38U9_+qK<QgD`7 at U{f at q%NM#nJN)
zjOI*_*ln^HZhh~J#7<ckhaIH|z<vTq#l~^x)r*&j!ItD-cK^I!7(JHF(WKG__MY$T
z{;6n;4k!>i(9!^*WM~nO$ks6pk4S8E9!PC$!nFY+#L5XK6C;=&Qhmu%>@YG8C6^uZ
z!=0UQ$Z(+Za1n?jZ0)!Hkv9G0=cias7)Ok6+ZGLY3pUFS3_HzA$}lK^g at x&c;BbH%
z`ce*v$)NlB`5vx at 6Tqege?!OwH6{Seppc-2&XxZAX=ltKoT8KTW at x8UZPzvSuR#mX
zJi!p>^1Pdnb!rQ{L>d!fp=?AxgyAoOhb_Wv5}eoKVhOEnm_D%+BeXEj9d=;n`1_iJ
z(0$1<t^!tWCSCae3&9$RA;RHYJ0DBPS1{j*tRtG$Qn)q>^D`H=O{M2u%S5xBCGyzt
z44bIz3tw;w!!2Ux;_e66bMAb3-rM8V>?JHJ2Dsl-oHvr%=gwbmK#rw|@j(DrVt`YE
z5L(k}e9c}jJf$(`nU$4ESssN4a?wPiLM`)J66H!bUBMoOM?9+j)Eqp*9q}QI5D<gW
zoEvkvv>~b at 77@WQfpa3`gii4o$*xl)ekIW6;tnkwG$#;)W{S9dA*`OKzCwun^?kR6
z2#;X>3=c>nahYyBgE+zvYY0|t=!Q|kRkxfHq9bPiAhR+LLN-gKQ&JCT1KTMYtt+gQ
z9#A at a$!L`L5R2|aZHC*_a6v3M;^QemAY(Ia`g1M7%Q^RSM5|aN?cU-P%jUq<^DPgv
za(Ly<7r`8WMINdm0_1RR(t%v)4}HPdTy`$Svg4vC$e=|l`zdY*UD%UDjH{nO?qT7J
zD~b at rz6$;pRK#+USH)b_ACT5ErD}$g#)EIa4JU{##vM`|a~MLZm$bG&+Vgb?B#B`F
zAD}R@&&NXl)h?R!KYLqbrOLh`sVa4kXr8^SVR#Pv<;d`eBP--yvO!#qB22cc<(Qoe
z;pSz^kTBj%mDlH*XCJydLT(m4I0T^J12nR={bX8_&dnd*$8*?I(4gBDc60$Q`X1ut
zEypJvDVoyNbi;wEy^?T3z=@ydQS$81`+s~2t<OQ at m)%$UdoP|NP0uQnuglqGh`U$p
za*<VJo-OAW9oLxpl73)KHE~CB!pZih5(W$4`^v4KZd6(QqPdpKiL36Xck(M2S`D$O
zw37lPankXk*?f+e9+%xVNQ)WdQW at todT@pv&JHcWN`gGm5R`unS`w^q=VfeYEANO{
zhP=Ym+wm_!=RpYwrQS74iV2K(2hwX8MS3b^YGfgkN>aRWjI<eBHq2>m7e<uvE-dbh
z`6e6i^jC#kY)T0+XiE%{5reS=^6mT=C(3TegTHu%0QuAch^0L){sDJkrpSm?$KDE9
zT*!Rk&ESLUl;!w|cZNBUzOBDu92j0etYZ$4fh~Fr(CVWaaEFr|aA+W8(&L7doU=)X
z?4C<^kD%OP5yQp<H^Gz9V=&8*!JKAhlZmxW*1HoZriU8|v$#B<8-tW5FWZBkgYu|C
z#ng(%`)t8(X*g at VqLj>?^v^ZiP7l at vN9XM!Vgq3Zl0fuM=IO0aHG!W82y at 4KLgh`h
z)gF)$Z{3xP+9jUKts$Z|W2$0niNoMWYmw&7$9Sq_^-i&?JCaa%5u~-4R-+P5XFwog
z1~?!h#-$~6jL|;q^n^8M6 at 9m6>*}{>gS at jd&)s^e<w#B>1vNIesIyt#ZH7L%p5vP%
zt~3!H!G&i6$YLIFdf4Ln<)FpocpEDNj<#s!bKy7-*OgymnM`|7glpxl{rTIWYY%1*
zw1tEnIJT7 at 4sfoLt!Nz(^@lU28`&MNmyboDy~ho5(7R|K(*zKYpY>YplWYIjTx>CJ
z;?Ab^S2VlZq^jj^Hk*!{yVE>MJ0uC%n%#>_qh%B_HXB(Vqd)2CImsFZh~`-}GsiT-
zw at 5A<dRAi0<(h`l>2E3gtk#r12mv3H^G=#GbKAr9;rMc}H7kTb4Rq%3%A9Z381-q=
zF&o<+X<InB;z1vPV#R~jiV?LVS<~U>TZOC?(IUF17_$lUihSC~Z{3Unc(ZB_E3hVd
ziYdu5E5l9 at K*BqadeB2&Q_eJTob>O(ng*8x!4cvKZ!yYlsY|?N45I=?cT#uHh_9q<
z5@*f;W?xQ}3veKr$B7NOy;Z7Hc5gi2M6%-hLj#Pq)9zjd2dF>uJgH+>_7l at E(uK`3
zFWO*ANIr5k=d+hIbs6>5gbWmV%F-S>x?uo3^s!w5QOzy~L3G}vDCJYj>R3s?;3Y?w
zWPFQ{FbSJ-jmyyv_Q8AwUl#YTk<9%))tI8(XozwHcU&G}c2mr39yzP-V<aT#%UQ4c
zh8%#Q5m(KA7o0+FFL-6quUbO)gxPSiis%a~t!DN8?W_v}h{zM_r?p<0%K}R6gFN^`
zB?kLkdQY^i88QxkHQeWGw~1oLEhm1E{WM7bs)CeoC-E%wq8&!%a0v^PxXa6d81ooc
z-}pH;UHqJk;UF}QL)3OIG8kEY!1+ZN0%bBCY*|**bB5gWRv9&>1<z|n2Q|BQY$pJz
zSk^=|?Gv{thjO5}DN$A#VGR2T3p+XhyuGCtLhPxpmx04KhSGAd{A9?4*9_z%Md~Kx
zJckMdUisY;0(C}u(t~6Fep^YscCY^~!dc4ia31b^qMzU%NER0zop6)m at tzHMG&i^>
zI40T<Yd(S_HbiUIl0(8%HQ~3N?7{WKlKenc0{$^H0zo(uhCuo|5B<M`TqDX8zMKP3
zF3;s_r`J8 at m%C~l67Gw`IRKVFIM|WUcM?P55g&w~46(MaNK5nNKF_7eETC|f==*j+
z{81>grqHg8Aooh)a}y?Q7RBZ?K%gf}Tl7FVEFD~I&mvRDPTz?C4Q at spe(_Oa2j-7Y
zcR#d9V;dKoaiiewvz7fZ#3!J}@S2iu_!6<$T<lrH+pW!l=_zE>T)S+8y&~3xRd&4z
z6CXQTB-;QCwR9Tz%JDZp at oorCg1|Y2<?>^Xh+6JgkPhYi%=xtVcm)BQZx2xDaa^zj
z1v<Ql=v~;d$)V|Id>7H3Kw_{DYcS4%oYe7vWw)@*i at qKOo;@Pf9 at s<_DDkk>I#6|7
z#*(UF4Ru+<d!Suc1f2l_Ut-bf!7f5@=#tgOMMyBzvo{{XsN;BAxHXhuxc=l6!Z?2H
z5#h6)A9vcvZ)5iQ3GO<(os{vl_qwmheyh*{n18<DHydDoT?vQ!8eCLp7M_W5E5_fj
zN|V3dX%CR?bul&Vmdb)2_bw&XwL^CR&6ewOQQ=_xln9RLaCuqW)TkGhZ&UP+j#2Sk
zAtrodEs$05XOwJoq2ODz%Rke}a2&v1Y!hBuN at f*|XM8u$+Uo at e9Hz=!-%UB4+y|Ma
zF{5Uj?)D@&Hl?s9nla&K<?<@ulrc;Pvv!M<Eekk_&EuxV>@h4fD1bUzAY6)@&zMZP
zox8`2J+!63kBt~DxORTG at E6~6SeXj|&%X2a-^8UOGdUIW4h;Pwfj&Z()I}_S>Y+m=
zSWNQGfWnEDfsku346QXprt at kPm_|6*1|#q_cqC+4ytx+4sd8`KED2iz2lm6tOBbum
z21u1VEZKXqBgS>5xKQP&H$01khMc|vz$7Y!Sv5v32c7F5Z_Ns^iDE-I0ND^fSg)f7
z50H^@yG+~)X%ExBi}FP+g`vz%F?K+TA8^O)wqW{hIR>uBG-IGS+yrA_v4SypR%Gl-
zixl at 0Ej7(Y%*6UTQ_*~yf`r}|oC4^{F|XS@>YE5!z=~i;VBt4w`qqO`1S{@No4ysU
z<G5D*K%(t#F751t9|j>PxV*zml#BsMFt|VyaX at RZP8_cQlkMeZ6BK^j?6(+5w>`Wr
z?Z5|ITFyx)9*T<MMpd8Wg%UCg5|F`-&jt)|4-8Z2e!J6$PsAz$cTQgI=}@W$Nu=BM
zEb(3+atTYB^w)e7Q;wKRbFWCmHK|Nsnd{Cwkt_Nh9EnyuattuEEU>mm4p=>VWH)E5
z10clfs*p~OC%57CKr&GiJQu|=S1XD*L13(VSf?V<lBI{nK+Lsnnh`0k+%!b^!_uBx
zQXIDU8$>Dy`R*t at 7od<HLLMaGi~|9?pLFE<phR5UB_L at It~OwSl|POd9>=JvCPzhY
z98c6x%;tvL1y?_Sk|gWL9+BFMBV0PR3AnPV at Ve3L{%5jj)QZTA at De90Ykz7C4)cx*
zKwFRl2o?{KMvX=@i^9&6&AH^!8a#+GAc(72Btfu7nZOy_v2v%nTv!4Le(*^=*uOM#
zn;9sN|A27seOO}-23H8B`Wf>-EUn*L&&7XOU9Nx0|8SdiowTlAvTXbZ`n^pO1A;D6
zaZHCCwjip*+EP7PURt`hi2v%}CH1w9mF114 at BS6W66g1mIf-0gy|u)j_7g;Ou<bdj
z1{+^^=D-ZoIQxsg7ai>3yeE3LgrGy!)~z5gLZ{Qaf at T4(Vt5KIT$@h3i3VX1c*%s{
z(W?|Anms-{eQCA`qtJX1`dsqb at HBK-H!4pANvMc_5$}~I)Sz7DG+Ist+KcAp at GLZz
z!<Fl#eX6FfCH+`1%BgYA#hC|*VN@=*H;<IdCi^clC;ash4xkHp!85 at gk$iPwg63#w
zq3~bwA##m)-h0(PJ;RhsQ@$Bxv&sR at 9~<^K3w^QobRB0^XN<5FO0#Au=s!=+n(*wS
zOR};OP#i5J!uDx!a1lW{o2YLDJ+x%tItcVZtRaLraX4U9yxksqb7~=Kav at phG^IRD
z51_IIb|Lx+f>yWRAvD&h+5st^2x2zQ2dC!BFHhx~r|nX%zC?|)=?xd`#s&OZvria_
zS5c1(DGg{*Dk&JU5w(`XA}mISwO-%!PR7Y1G9rZR^V(w9IEaeDrj1X7g$0s@=t&IA
z$c}c;FK~IubmJHnt}v@(PDL3$XXXUb6nK>#i9K-L&6t6~jY($2HH|jZokET5;X2PP
zZWuy*!!n6;6av3X3w%I!2<{ZH^MZRMg`%#tqI}&&!ZS(oVcZ++M9{^b-}QqFX^wDe
z_P=b>Kb at vIAoCeSQ%GdrwfCe^Cb{*cWg?5!b6#9E*nkGEH$RAD6`12x=)v{k=?+rS
z6=>xxz}&zuAMWq}`r_3N1TB6_yyJ-<+Wzi=+l<6;RE8GEU?#hTzzLnwbD5py2Zzq)
z`L3$EH1G0U{b4}W{Wti>v?p4f*RgBPTnAxWI+`!Q&G#n+N+gSM<P*Cq0C^S|jg8?Z
zlB(+;*aFXkVgK5uH3(q7OCNL=aXzTFJc1$Ya`(=|liR!M6#1gM6~Y#HEH*VrYG4Q?
z!~?yzZP=9{V+Xt-+Hl4Ri|<_aMM4TdhwTn_3^s)3H{@{%$!>3eqY^aMH#jeWJ9&~`
z!F5&6PjS1(PNIjt_x%zYHTI|@bRv{=U~&3n+SB1<0e-%MDJSJxB$`06Ok%qrWsY!`
zpCFT21MVID>kEV>(bd6}WkdYAqJtDyOk at J0!GY^EBuRGtFr7~@^0VRaBH<ZbP0o8Q
zcm#8jX6XPqi>OrHw at 6QbnQL|sqdJ9pkCCb2UgTOvE36FS($)Y&?#&!qX1F at W)q)*`
zIqPM3MSKB^XH97=tk`4X)=i_k%RzsOk#A08QG_ijdp{UD38xL&!l7wYa8tVc+%9A=
zSj#XOXLZM7C{o(9hx7#r74$V24X_&ifS40;kUH~&dRzyRUcrel);Z3zpD!T$Ng)+K
z!MXcPvnB;HAfxOdR4($W$ai?x`92gXWN9%GEm$5AHy{F7AG>mEmR^Wh&p?kMJ%D|R
zEfyXDM^ySo&Z?<*b}1Uk#mK478>mA(48Oap{N6Z5h&wapg-Bw!u%e_KcpiytF9(7O
z${{Uo+dL}XQBAlZpvY5+bH-+L;Spjc4C9kI<0J;p6u5IEoMB`Zhq<{sKuGaOitGUy
zvkzR2kzDbHGP^=~TvbKkm|d2 at 6y-y1=@x4!1M4r{`M`5-NSy3ISX171j)ex^2baV0
z`@h=@LFt=)9UcF%zPg5-k8%FTwe{uYFZchO&GvM)Zg&5dn-%U)eH!PbycLmN#1a9A
zKa>RAUow(_`-@;n>-RU-_+KCiNPYk#EJ1(#;S3u7y!S-<$mEUlWlZSqKO&#v^-o9_
z*Xv*JJQ`QpU$4o1k1LIv1B2=vG>>dO5(e5pLiH*94>u#@|H*vFOymb+0QHUS811t7
zo!+c5W^MSj-Gb&ea`Plh*2ODbAI*?d1{E|e!sIm|Sm>(mMH at Tm_s)G5oMfH>y&9*T
z-VvCYsv%6^=f07-nD`$+76;)hfvfqhiCZ+}+KmnjQ7+*VPXAniDXx#elwuAl<s!HW
z5DF3g-js9*(%T0nm%b+$r7x-NXtdfnOls^t|K+gq)4{>Z#!oNy4>I-1vw&rImFfx%
z;Pu};&tyAfnTtzs76!KqUT6Jt<klIDl8qRT(C9ff9J3=fuKMtbZU{f0X&+`1Y37lE
zI_<v8ywIZ`#`c*HuGa%bMldrB2x^XD5vgAs!c_z?>cxZ&X7aeTi3%D|ul%Ho5rel=
z6R>u#d)&EXo<;7{gEL&_pEbKcDO_VtlJ<}iBF7lDwQMW77P2-fb0XMi**X^Mq({Vq
zLu at MP$xJT-#C32n;HG5%u(LqNN;%Elh at nk!^(tHrjv`1;cLuL9(WddK1S>=O6UbQW
zwdJ*19g)jGc%&N!F)+K;g#9xS4iKWEJv>Wr?kB6&`nRImF~Spvs7{<j-Y8h`0F_-4
zuJ)X(iK|LUd1d1xtE^mAYuWsf!TdNvL46J1b%pbU`GAzh&+tBEcaHDWKCydA^CgZw
zEySrKXz;LNx`FEBt(WU^WYK2KHEa)vLt%MQlZ>B96BD%0%cVt5UdF*<_Z7v75yuFj
z-;$e_V!T+e_#~VaAw`gW;ON3#mvRu$?st}e$<G3!u9{i~IYkLE(xT9L254!#KWPpD
ze-mUQ71s;?v?4=ckrj=i9GR{luGEbmcMl?@FvI5aL*FE)gzL^FHYKEEwBTAJT-qf#
z00}zm?(3xBu9rEUxrkiLix+Spw;KMewd;cAaBkaoAlb{buG129Ai#6ZB%omgg%QY2
z41z!IEf7{)FuoHlVW5jfYMxCC%mL{s!yYm)BMuBBBeR>gn?mw~6QOs0PCs^Llp+Xr
zU5qr^O^2=k_lXFm8IuJv${?F)RKVV~N~(7o8l%FmrmYPWIqe}fESz_TDf4uWM+93{
z2O6#w&6eE2fp2r%RgLzbhfyP-V~9<KyvU)4Pg#RE2!trx8Y%#Ei};b3L)b&im}3zh
z&q#FE9WK(yXCooUP@}>91A8uNlsz{ob~|&w;KsIjXXnM^gFnCAg~aK+lf3--(bK)h
z$?RgS_Up>yT5acGC;8J)2hW}+_3BchEOR=n)pnn&re>Dnij7+B>guX`wNmZ%PiqIS
zYVX-rot4ekMLm|%VYM}EL4vU<oxMNrbm2UhZ=!zx{(Y^fy`bO*CnIuAj3?HcW=vcV
zd{x|_n<LM5Nwb7keW^t9hT|DtnjnqH0NPJa=!|^=rWg;Z_-ED_svw@<X<B=~s0Cqf
zvFR&A+|(Z)Gp_ygt%x1tw!dA64l6uI3_nJ|lSQG3fqaP5KDbDakyT6ZVBR0FVkQGq
zkoJ%^ADibX;_-527Ae4ew>2B0nXU?8C*rA1P6p?KK0Q7=)RS4I4a%m8LQi)})6QS8
zEA%Pw1Sj?8ox{gF4-Xz5%2 at C~SUAZvKOj>gk$^>Xrw2I#G)qaGeC9^rXiz19ic^&i
zU|gI2^I%`eit-nE62(}I at _&h?4y$J+itGS6e7lIKjQx&{J*N3!9!|jVA6EP+;z_uy
zLeRmWd4dzXVWs0++137e|5fABs~5lS at 4jk0{1K^~MeDNv at X5nhd!l%uk*+9S#D)`(
zwmtO0tToP3>QOO@(Q}j=gxrsR6&C6zX at a~-X)ltj?N*(bTWO{b+V^E|n^UbwL47lj
zU@=HprfF5_cWz0AyPBpQ!;k622JpxkJxxRAP|reyp#JzwfxyBnag{@0%vE)oc08TU
zf<%Q%(_})x_F|l?X}8zQOfCi6g{33BHyIKpS3?RmPE{|Zr<LkyxXtA^1sSAw00qgk
zIb;4+P}jY6np7~6dT`<j`@wh+lMD5G$<Kor)>k^iKDASrVCjc_WkE2+P9a4^WrfI>
zj39~&FQKsRa(ii-yd&0SC;TW#BRV2fwj(nXH5nDs+2!r at v6;`rO=u4p)tarJ5E{LM
z>+BXTmAsx+ds19Gj~=0jooSh0g-wkWw376JWwDozumlet#6XEUy-ON8Ya5;ALbx&8
zx={tFQQ{KbxSQp<)}|ka3fZVCWN`CksLHl*2twrGa1D-u!Og_C-}(hqFh4%vG5h8X
zPUD&$y#8Dk7mRA{FN0ceR^WuSOpb7y;fWnIQ8PS~q9`s>AkyIW1R*r}X#u~b_}?FP
zL_5pbQ$5KyjEwtnMt=BxV?>|Ny|glWFE80yGLPEw!Z*?~o%#?x8~}c!!6V4iKQUtH
z$ZC12t-C3s*RA4Hl8Qf5cKbNfCv|-B`-*DA;8YH77udJHmYPE6T6Lzrq9vr;vkZPL
zV20ZH_5~M0ID%V`Fmw(%Lr82hF&Lxg&@BJNp!%uGK<i(8o;mFHWV#2QOmBMoX(BH_
zFk=g6%^^K5vt9|o38WdEo5RhTZ;3uAwj;PC8l>cYB|jf&-KNvge9qGThO)R^t=Fq7
ziz)IOz-pp4MA)#}C+V8{zk6$IzvEwgvVY}Stp8iRw+8#)wNKLfm_{ynTThbT^^sj~
zRMBzoN7elYem7?Qcf0S}{a%;mZ}3eVz<2NLV(QUwf!9}8v+Hhu*Oyn8V*T$j?AE^6
ze@{KnH>sfKytV(H#P%DqE2IPzeFl_37CT_=^fpai?8Efxr<V&fhPs5tW+9QR?FHK5
zBE*8CxV~x?#Vd=;OUcrAG#Ou8``6_78Xl^RAyks0!n%O<3<E_6=u5Cd<&u1lwM78!
z=WcsgdqUbw**?)3e8r47v?f`YU<!|$1VZ?mdJR{vae&Sq!!>y3gB%4Hmq+lYcO0%v
z(aW=oUy$~XS>x31O^foZk(|+s+mQUH{ow(w{__yziz*HxSK1HFSD>4LJOkjFH?;Jt
zY;INVdXFo%RPhsFZTJLS>UL<_gS?FIU_z(NqzU_71ne_LM=FC8DKFk~z|f-syiSUg
zLgQQ9SLNbO+N5vLO>p^3o#|)5<4 at uFFDftiU~+Tai1rhrG4y}s-txT+{a;#IS^Z-F
zGyQ5#U*lHv-(ZIr0ti_)#44HFYiTNwivV{(-dEPwjUCY1;?n)3zOu2jys^6UnaO*6
z2vln>U2M&m3<P#|dJ=?af4fs)uRDB!SwZBut1?ok$H4AiFJW0TU#TzCA8u(KVY`>V
zTVB4uiZk*4`n{!<<)yWid+V8S6?O%d5h!J8$%aWALFgYHV at Yz5@S<lW7|5Up-5MY{
zVo{$vmd6c0(cyJ7sM$;mISx15T_E_#rnd;Xw`Y>cmpktSFp0DS8B?nVi;pg{-O70E
z8OSD#Kt%<IMW^A9=NA*t(&_mHa*+Rq^W;0c?M#`LZa!CXEIdysj(wNzzQ4%fRS~W%
zRhQRdCMH0IMYs=*WLC0WzMK at BCtjmGe8iauMqsNpciR;}E1z!mKhM^lY&!lyHg6U?
zKHEl~Y*zkrw(3;u^BDf`VW&gRe{f^oZxa4*eLZvkuisn#V*fooFL#p~H{kz}Rg-av
zJI<hxmjjxr<ypWGeZZhB-?t9otBdt}c(Act-&m{PnEfN$a>s(9dGDV++<V at 5wtMi?
ziy-a2nv>=WfR0-TH#R6Iw_L*U8LUp`E7d9=fSXc7(kUbgG0SP?4hIk@{JdA=j(T+o
zbL+m5Kh$c)<$s3Xos{0`y{{pS1FX;yR2b?_saS>NBCdyY18BPT1h&)c!?a#lhUXcy
zQiv-D4 at rg>cUQc!R#{`vg!p9A!Z_T<HkuW=i~~8g1sU5sVQvq8VU)p%$|7}icL0qu
zQuop at 8WZ$F;?yB0`2_R1fAFdS*YU8dkt|s(i^WCsEDohc#K1fY1$hvpRakRx0%}+!
z at +Gy}oG)-#A(*Y+dzykhf!VRxEz-8cGb))164r-45Kz!sF&EKJBwRqdMuc`78z)F@
z0UwKbm;yh0YPU-PAUAH8dn9bv0;PLLz|y_5u>nFv>;IFDjlm^M0>v5DPevghnVoV|
zQG|FOoK^>sRM8%0gjUoRfLQpqFFgk0H^S^1z$8l(kntgkDAvRjw>vW&U~$Rp#u#6t
zct=lGFWT3WRk6E!veE_ncCw1$?wzd0=si4H8{tk4YnX at ux@7jAg7bj~5$8WReZ<1c
z?t6Q>7?WS?RM=0gX--_widRj!8X`%v;8cv=gv`Jg{?8)p=j8vE*4FF4i}io^>i6z_
zk^fD&gtsbo1OAU^jOu at KB!{P00UH=%5xBnks+9tYlBd49QD5JvBQDTyq2#f!+)k{=
zR`N$R;{{o at j**NlF at mwD6#sCFjWPS5D;yHT8_|I=@_*d+GXB31b*_H#|Gm||p0u*;
z|9`>-CwbRC- at vB0fJq+=P?N#c)@m{w;2-Svt<?><?XlQ5|HNBfOaerT#pm)a_5vmX
zSyq9_Binzhj#nEhQS$O7U~$lx-|;oaUb!6CrZ)>#gWC`ju-jy)cOU%IOeR&s;nL#$
zHy`Q?%OCH~f4@<kAMyL{_jkYlp|SuN%m-r(RJPg|yC92T9A~6|ahADbV<*WY*oV at k
zMcdN5ZCC>iCjK>h)5h at _V_8BMeD<-l_DXT>m4e#geHjxOrW6f_I*+U9T^BRI@^$O$
zrDgd)G}i{U`WyFk*?%P{fY;i!D##-{g;^*o$nrVUEa#|z at mGF6c(V9i1%>`8cPaMz
z9`#J}4x23PH9jGso8Wl(r<o55d65d?8Sd)sN67Ipe^(2cva)Uk=S1Z{{`dd;zyI-n
z!s%sEZXaAJ0r$KqA?5z}fBc{S_kS_VI9*m`Dp?k at ga4*HVJ4veqZ#T6PJ}V^ALc*n
zG5@!`x&||`WNA_&cAIkl!|lI51^u_TM?v*(fbQ8)5Q4>7(b0eUNe~|xp;|b`co*(K
zsf(u<aj~ql=(ZHZ_#I71KTKk8&FWK6=nDn6CrYuF6BrFC4I-7`hwD)a{QRtKWWlvC
z8xomvqW8zk9>Oc$2;vanY2lTe4ZUu?k}SAESCR=~eheqq=5!!0FRTc-3wDB%g at vhM
zW+Q|*YGhKNC32z>O-=_p0hj+zi4&-_FyV{}a8p4w9V`eNNM?YDe4``pHmAjZySih}
ze*~*IPbWCyN6yRW^M85e-fA}f^ZMEs`OnBH{bVn1BL5*y$Q2MLy&U#7+L33pjbRm{
zsmP^|dlerINRpgr>{6->lOIYhd3h$np&}TE<yEgpM389&K7lFO>Uu_kgg7&iBF~20
z_%Vh2>hndNi9OzNH}RfOQ-u<MyVsXU0)n6FT^7%)_htHwkpzgeo721UOEn+vahy9p
zLiilWo}#A6`SwdA6ZrSDoN?c}jgP-{7sNgoUc-L>EKQN2FmU at n9t^zmmI<p+t>F+k
zzizh9+ubS(aL0%7Gs$fh2C3o_N?=k1i#(x{bE{A9c6roA=w3wW-U`>hvA?^&zxU!f
zQeC0R#~KO!&EhuHw9hnBl^})lVVh_)hzs9pH at 9X*VOcabD%?3NpH0w2Lr||val5p(
zlY=RpF4cKVX)t1t3{t8up<ksyV{-seoXwx+-pp=m;8x_0X`i3k*BYRL09C6sO~&P<
zB=FG|?Al|b3+Q<fVHL{F^9H<^C5x49PvgXG%_0+}Mj6<ey>HTNEpqJe83jNt0{nxS
zIW{AZA_Rp**!a3WH~9YR<vE}CjYT}jNbOPt^DKat7 at DJC{(23~W?`+bdtmv!*+HBO
z0xQ9$U7-4E<?GeC!AA1+%G`jlR at s@!Y+_Vw%(>HUA+x4<{WG&ApmwDMH%^e}8l&;1
zi=M0-2Ul}rLvS4%Z^#!e-2}c!#nkdod=C%+<=d<b8jJ_VRiu*AxZOHbc>u8{aCaKG
zeS`}S1UP>u+^o0){#gX1d;i840GO?#PY5LDmzE7d2O)&|*1xnuSBG23dIX!0#=CZU
zWkMGD5k&9Ys7V^X4^D9`#xGJkDuDpzt`C$jPzL at wp9~V@(IfPOID|8zw!=*2h%VXK
z;_-aP#AGOe70IH(txw&kxwR2Vivbtyb4O_Y at K;>xAINxc&`2eDlp_d=fQaAB6z6oS
zvJ97xS_{Pjsj>-dh7Kd6mYF#|IjpoyXiUU>JgktmiFpdlv1;x=p%)Qp<ER~`fjSj5
z#jdp}-RBM05zj0 at TvUm^=~9U~5-ffXFgjBhk?*Gk^QeJJvO=y)(@G9PDHy_L3Pw=D
zcPoGgRz;ULm^qrpT;lKsG4W8jw(@|P;t_1FcnqFA_7Ebj#0}tMtr$AnP7XG_&~SS3
zvfA=7a6<8c-M`pM9#E%Xm=+5W8mS$_8Z?yy*M-Fq*2&L)P$vTUvBoM5a1cJ*?Jj8I
zbZ{aar__rf^=;(<)mIrPefbE;U1>UiQFyx>th?5WVf1a~V8odh<XQ2P>8nIwzI4U?
zvLCe(#YAF1O-Fk`d}A<uLpd<@Rg9m$cm(1jq<QRLKkc1*2rv4*WB6B2yWj(4p^=I)
zm_chfIL$kT+lzq>DmiE?$H-;?k+Yxmpp?kXmHPT(mWV>{j96>ajt2-V_2S|9wme{n
zu+GD+1<2wqmp^5n(pbJz<d(@yi-IV{M@~!o{ASal_2OyqZRHl(77uB;FYX5f+fO+9
z_|^4gf>F3a$_^;w%jnqy$>2Evr)mO!@`NVeN>%p{jFM|z&zPvg-&uIDGZ98Zwy+G!
zMSiqlQh2W*|Bi|*DkV*7Vz3P1B{FK7_r<tre*=`egcpzc>!0Ljko<+4NK~PrlXR?M
z`uJbd4w$7>8PUq-QLBgi35aBfYu9YzBPFKY*)U2V*&5E62 at lAjBg9CnhotZt2a>rl
zW)SEQL9se;9Nd~c?xan+7dFAkAynUtCNGEF;H<~_!2JN%BFPm5>425y;!dASSF!06
zs;evjxvIKIJL%;ZWPoH at IBlCXCbL2TGXbn4m#Mk<nl2R at Cg5^KZ|grH9?HIi?S9mI
zKQAHg%<#HB6WgdT38*Bg*qZ$j(HjSpPi)P?)Pku~I*TyzKJ9KK=j|2(Qt5TowZ#PS
zOj(Qg-i*dV`))IbGGUm}pX$j^2pyUBCHDxXcX|7#W&day)y`J7e_HX6R`_Uj`=?d^
zXjK}m+l7JaVf#3p-9|bs{56>|?wAgO9Iv*VTqg8~%T;&Odv9escK|v0>X|S<Y*d%n
zXgagG?pR*~keZIUN)z;fvAJ<vHTzwJbDiD(RlmdyhS0c at G8FS`;<3cFIT+jF$k9yF
zO*kCM(=od(>66NbVoJ$C<om?K2y1c>+R?}%jPC%u+90sSE?kOE+Qv`8#=SBdQUqh>
z6 at rf|;`{AN6xbXNxBvL_?yEm12QQM{KkYvL`C#_}B#*j3{9duOZLi>Po*+&Rd=YG)
zVbWhsn`g8AUZ)TPnH~G*-F;6#%d2#;u}zKVFQh`ab7wYjV02Oo3-4|g3Iqrx-?1$P
zs(gbpR~~KF>^oUYWZjk!v77{cT;}e={M<ovQZE at YhCAk|AeZ+PWwE6Z-nH4?nq8UQ
zR@!{?Hc_*0Vughnw>O7O{1ODJvMI{P0?&FQ25P5Y)@e4Jap`en%^M8644P=zeyAqT
zwyd>TUkh-r#gN9b>gFHhyxxw^8A%HXnyE4o`>TNj)fy`;coH>a8#TBq39SJj&PMx&
ze<kBPl3Ju42G7CCeU=`-MQ><-8xi^C4Ynx at 6rlq$DCmiAXTDXHZ$%w(TxF8h at IZG0
zD<i>_!}?{D2}O9u*T_gQ$$Sm1femReR67|k&n1Nel(4Z|vxP!g*3 at G;KP_LN{hV_f
z5+>>!utTfZ3(2q*V-9{9LZZm(IL!1NnbZs_PquSh>UW3h%f+a3!=1DIW#@d^=bw!#
z73~~uhRL_i&Ci^b+?liTNp}u7k1uCVf&P at b$S)_Pp6WM0&x>}>Z*}IZ=625NC*3)#
zUv|!yGv^=a%mL$O>_}>|?<nK455`6w_5#k*_<sey+f)TiZh|=4{u9Q0_m(sMAItUC
zFaE!iPw*{D%2_v=`=8b3(@IUkzxs&siQovNgjH)2%Cy$7V|vzx60?*1$Ny at dHUHoL
zmu#NP?;nowvtNaL9M_6zY(Oa*FF{9Ig|6H)(FIo*VHJwtvCAv?FK-oU@&a-oY6wcO
zv#I_{JP4gpgUKq$jBRv>ENUY3DS?ffLhilKTvIZmoXy0TmSv{17C5OD41WSolQ{5*
zHCGeBcO|_}qdt*4bLI8x*OdowAjq%8JTl%tplQC`6i0+0G#xHa*kK=8z|kpl5ba$I
zp?7#)Nxn^9SB#>d7?#=Bs20>2JbtzJ@?e`D3=@L4G9h at JkHbIh@4qPqgp;DLC+~W7
zvaYi;0o4L!n;P5xknvf{VA`zh>wFYdnH<iw$>5yj^5OsdRAx)2X;zBh_2k{JPt-ko
zXaB|j!>idsWJa}0 at IkQvFj4;9g6RGORh{7cFAftm#Tdq%|Mhho_EG$g<>jR>{{K@<
z at GXko;QZ%lH(mS>V*^kSYz(LNe at --za_3JvhJ<IdNZsYU%Ws6+oxIO4I}-;H$xY#W
zWoZ&x`7dpx>=rk4Irly|F>X<4Ryx)wHH?Oepu}&Frs-_5qn*8h`z!Ah at 83?+?K4E6
zop_AjnJ!25{N4E^-TsI?WD|E=Uyl17)qQ>WG at S0w5%$SZj0xz!b?<g@?Of#vzl@>(
zLhNJuU;je?C!E{c7P~e5x7a~utRVCg>6R_x5J;&0*dQ=tu7)m){1kV$a;k4&<Q29s
z8hkW{+mZc04F-GNpWrYv5&v2_Z2sUc+8a%z+Z)cmuHeS;8a81+s2$fEn)Hchi+6mW
z3^$zp`N>;4tTo?ELIIzm*U1L4X<dYZEW#i?)@!VbWX0YlO~*95J?Wsz+YF~?(m~NU
z?Vx!&m~3Ew=nNmwn5)-4Mh2L- at ILy(=@1uWch2UQK}@E6d6 at Q%zmz^YI_ at Eq%mimR
zF1<r!Y&zZ6KXB5}pCds!JbI(W4r at o@%750Q=eDHlOZ`tU0~4J8VF=FY1iuEpG3Wo<
z%4#P5_wv$uedSC1pHHy7W1Eok|9?{aw{jLBzWBwV!NNT-!RbFTG#DI>V5YmD4j-Pt
zl9ICDf?z2;xlO0 at b8uX;5l?uWL|3;b$QqMc*FqMwB at r8ig^PldY4-)a7POoLWP<i3
z0?fXqYcB|Y1}Nz^%y3GCke^S~F$OkS-%F*POFFij4EkTwey?asb+k4<Uv98B?vK&~
z4MVEa7zUWrKD#LKS>~9y+wV88i-sG<wo}}UCR5^69ai4M^>zY8+J|X>vp*J-z`KBP
zpKeJJ2MLM~v`+TRMHAxk6zv!VWUpJaRk=NZ&-JpYE?nW8bpM229z}C*0H}U`5FYh<
z5LuNWoJ5*0+0>t47D%>a$x4w=C&I)+qnr{~q!M at va1*tsTNVe9O7hC4W%_+MB^a0I
zX}^8^X|c1bjZU;Xo@?1pkDoUH;!~1gEW-^T7)!3cT|#otGQ2F?C({7(OS5yC?sdm(
zlS*@1Ak4;ULWfs5!asK>A)NvYcFK5oj!WSw+pHr2nm!onSZ?{hUx5+#Kg7xCBZZ4P
zsNCq{XQpfP{ja{Xwv^HT)sg=D%l+>+LAF at _3lB-$Zs3~Kf+bl|2ykNqB%;|U*(W2X
z#MlBM at 5=q}T)NNtnuKXXp#N;T&ryQh(1M1sM|$0=i75v!<npWB`8C31G)(-2AbzW}
zxOv`70PP^TO8aSo95U%K0+%LR+sWXpca=0xk%<SMUTN~z%d~%;U_M|fgN#?hv*s{C
zw7b4q`_OTD{*H;!&Gs6 at UZaK9hUwkp?|)D5s-YxmF7sBSf7|HZh!x#98g`vm^BmmO
zFB;Zo5CP=C;6CrYLI>(Ko3_-7MawCSa-ov at l$jR9fT{WDA!KaJ=Zg+h7?ht{m-8yw
zf#Xhc&S=)i{H&9PVVkB}B72`fq&jBPZuWbZm?=0nC40LGT>s&%cfJuuK35OH2AebU
z)Ohbl9lYiJ5L0FfVXZY*I49gpT2Pn^-91gmG=(r<!*LC%U;em;G**Eo2CF5f&HlSK
zT#xro1Y;@>2XAExLJ!SKa&$Qy_PWVcbAX9K=!UelfZ}bKpCQOsuiLq1Xq_}U>G#f)
zilR`3S=8Y`&NzTQU at Gu*n6!s*eeO3ICoO4SHLt7T^vb+Oh!o6HeoAL%23Ku_!k<Sz
zo1^pgP}T(j=mm?8k=;C6gN at 8%na|uqof~~joCEN1P=A*u7<e0Df6V6ydB@(u^`Aeb
zrzm#Pu89WWn+YMb1JT98l1|p>j_k|In*ijfQ)tQ&$Y*qyW?_oEL;(9H5WB4XUE<%E
z_6?3^24oTp#dBabh}5uaHU}d^P$1;R;vA7A>&`$_I%2*?S}1JBVjPH8;d?XJ#T{95
zLPo#Se#$A0dZP!FM)3DedVVpyj`7g;H3CN+_6V&A5YkTI9HPM>Q}A`;ZF-F<QCe)Y
zEw&6W)NbL2JP?vo`oDtqtMfDMJCD+YjpKxn{mGZ?F(CJq#Co_bun8Oy(nP!4O5Z2F
z6K-2<0916y%I?uMN+5p05aJ8a1%WjItW^et1hq&(H`*NqM}SYR&R{`{oy0Db)DoIt
zslm`0D^i?M!3R`1MMTA9K64Z$5BHO~HUh&06SbYp0U;W4u-Ih?no7cHJ!Jlf%YLVo
z9)nsTMqb!dW~z-*sBLOaLxnUh5STE7uoy+Ku~`9UQ|GdUiARz{kJ$NgA!T7bPsa=n
z`yI~LSc2zi+QM97otqt`=}r($i%byW(L at tCH^3qxMv2(i1KfjGKkpg}#)kL_=cOFo
z=E$4aLpzu`_c$|aUl8;k2|*PzOe`c_cKtVlprz%?5!4W2kD$?sV*8R^16IONcydYp
zik8_la|kWb0E!hC{@zBLDT>ZI*E&M#7D4t5K9UK$0}=#wWPUEka#%3=ch35cGv1v;
zd5{189JRH44M6Q{xF2y1P2_It27Ip%L at n?sdou`59b1Qg=UnTUCJL*^O-Do)f|d}h
zM`G9F0O at U!NO|^KIUQS8{15C8{{1G|=e+}rAs7gr7X-VVDBQ at xkRmE9;#<TW!($<A
z17yO_G7g9?jxlnKS3F60XGvPUR397GRC`%ew2Ru}63-VM%DmO&SN;!wNL(f(2ZQ75
zLm-Q8Hv5;y3}zNDEi1*>n=-V?94f&TA&-5<FgcL1{vH9{(-^P`x^wtc+?{(Jb?2Ur
z><)`8w+5{5QHro);4=UxsS)lEmmS22z!@g&0B#AF$HU8hj^j`c;z~-Rt?pYgCtaL@
z;7 at v5zi88Vs>G!+5xl~CLkzbm;K)Pvq|6-sW)K<j73^qVAVSoFo#ca!l82LvZB&Jx
zJ{*Gml=G^&Td}QTNH~9fl&qXHzlp5ob94gCd3ODfp}TYbe+(8jsC|M?DgV2-w)Q*z
z#V7k$o<;Vb^|j?S`2Veag1*N#@jpEO)7bTIHT!RmpiXG?kQ at 6ny$L>Wfu~x3SOhOY
z{`+P9$71iT3rxNKh=e~a4otuP_4>Up>woLDouq*qtv^H#=cx(DX%aq+>Wk~YzPg&F
z`{wsLT!6Cnf2;TIeaZhfYDz!ZyPN5Ml5;9Zu=Eg;K`UUTVh~{OnByXOA;$&u0|mOG
zJo-Rcw7zb$Lf>CpUQd|N=l;gp+P^}6e11QflV*yN1+g)C31-y3w@{cv3$LkUs)232
zK(?4Jq&?~T^jL!OCKm{Irb0+uw-H6VH81H!p6xx~d-n6Q#^V>yp1pVuGYFfz{e2rY
zIGT)|+OSXgsnHQ%Z=Yb|VS`S%C1%$Ljk22P-P=e at v(ek0^t!_*&GUBWn$}gx2Sjia
zPWJ at Q7f<BHhGk)8-A%yOQSC4c+ym43N88{<v(<ty%r(YFmz4j9v=tHKqBqG>buB&D
z*NA-B>&I`CQJ_2no;_wA4M?Yr95s*Mo{Fx?w=}MiN3M=-2^Tr7G~t{+X}?GOXg9Hp
zirj=q6>6N}0(CkIxPd`F`QesRZo1KV{}|5v3}Uhdtq<CNOa1th`gcoT>-5NSU!_zL
zx%WrC4s?bX^4apJHdZEUV`Wqu%M-OB6ULd#PFi+Ybv6gUn;UcoS-{_S?Ez)+{HnJ|
z0}WRM!VH-4im*h+-tBc$os}ZY`~3<&_wSqb&w9{kk7x_J&9o07Mm2bR%)?F^Y at KwY
zX=1=)w;qtrAVO=$7TgH?mi3eP#`)shX~&oSL3R_JrJW0D3_-mD94W*CX=BQLcyM;>
zU3hR-xCa5SU0V67OS&*4Kg?2_Ar&p*sC{1mbP<jO>k2%Re#7M`>h<?Htng9HDr!^l
zj%b at OSduQuQLhgS@{7uaP+UPcZ!J>V8L^b*J?&d`Wd)k!V^g5G6V}zVPI3SBi}!*z
z42o at Fn3lS0zcg9sG_Rx9kw-zc3#ZkPOVbCp8iJNzg~hqpuozHqY`9~c7CluKhrJ75
zp>EHVqG^>Wxqlyu^G>^!$RIfbg+tTR2{5{7$NxWjPXZ6+*8V$-vBnTmQ4`gb&@hO!
z3`rX$N$FPht%PjtHI_=7w5wFKs#KQtbtsXBw9~3Zt4gc(`9J4<XP6liuFL(t at BY30
z8t;0R=bUGM&U0!`L~F0D8I{B|wnX)denq5Tu5TdC at PmNY@2NB at zIK>vtF3RUBR*Ld
zy--Qgx@;OcgCX)C?*>R7M2rIX>4O1oAj^3nA1CB`X6XC+8#9K71S6+aNLUZ>qr$_W
z5br4r at TsFsgu?OlZn$L<w~d7}e0;+pAv-R=5RnfAC>xq3M1p4`bu-Wa{4ye-=FF$Q
zDQXNef{-=fx8|IHwsf(iW(rBBkw<`o$%X?4 at YhfQ&slA#Ktu`|DhQ%Eh(1aCn8-tq
zf8QcPBA%20tocZ;70y;;a5>oH_Reqtn53Z%5FFGy!6UB_2uqnNm}4Sx8q5aIs1QIM
zPh at X~fkueT01qf+vd4!R;-rwd89d{-BO0fn5GNG^s$p17(s9&0R2hMx;^- at A2TnW%
z$@|f(=n$Rg_)ZRlFoYiA8y(c51iA&Rw1y?4y$~dxLJtGP at zfa6I>E#h07_c1qOAz>
z^^2%&gaCG;FVr+sSi3kZhYk{g0<7;5zDAJ!+q+g62o9MZ=1EL8fO{CE7!4y5Yz>A4
z(IMzd;Sj?X5>bB=X`n?qF;UP9>1Ef*8N{SD7BTJ%zLQ2kYk^uzifTCyzIiz8RS2jr
zBpxWeBibJ?oMB?fGBh{rZD?$4jM|PT8zwNNwx~X0gDk0l*!qt|yBP^(V5Ak{c~^<@
zO%2TqEetJd%Eur5)e2muhlp2zr>Df}4WfFIoe)qWLFVLIf<)YqtlS7<Dg5#Al?F!P
z6cL~3^}+y6^M){`c8&s55<-k<H{K%&u+{X4$Y?9tC8+>yo<50y{V(^4z&E6=)y8cJ
z@|N4;oXQbw558f8g3&0Vt^H;reH9=9_&Nmzc+`$AOv{@73!jQYKyXiTT+zshVtt)4
z6KRHYZd at a?HMW?6qROwhI at lmQoI+sxM`-}T#an;~flmS)C3Fx&1!FY)H5a0iaHG)|
z2ZNyYdg0J86a=M6fB}uFuoJ%-R={V0RwW`ogo$(x_*jix5oS#E6NLY!jd^1_+nBi{
zy}JaMaPtfF9Ji>U843>Dnkn7O8{(5ebR&XLeY^-Bi~_|#n)5_K03fr0-yg!*@IV5D
z0Vo5b;06H<u^XUZNBGpf0apRFS3)oelnoHD1)_GtBkG7_Y29golmxsx#I^>48XBT{
zHH_C9mo(~UfiP=;6QeMQ;0Ol948vAI;fz1P6!8ZGF9)$Jq74Eji>IY;Bzyf^)+Dh$
z<ElZE>~+649tkQi_Kb)CrVUd-0N)ydgvhbr2ouJa|6WI#t58#5P!O`3)>E8+n6Gaz
zAqs;m4e3?DFy$2)<R$z>ia8^cpj`Mz#-Tobpjd`PMhHHTraK0}zE7wU)B{MwA)+P{
zeF_W)1PBCS1zpzCv08~n&mKRB7o=$^BAi@`hFyyQddL8TOhBk6*nSJgw_28uqVR*j
zJ{3jixwV}W#1+n#XkqP_dVYRZR>Fd%4Vzfae;Y`%jPT&q+WMh8roRV|P}N7h#ufR%
zpuh+bYk=4QNV8x~g%<xFXs}aUNKj;i;0=6UN;MRs>ZOUZXncG;VLx*pMh%z<G0AZz
ziuZJa%|$_RL98%*W^jb(447;1TyP=W6IU<+1uC@>lDLHMF$)z;F5yF*pa`Dg4 at HXe
zfn8P5Y?i#`9stq8Qf?zQ?vL9h>wJN0F5=&WMh1IJl<pZ68sI7Z7Jdsl78E%(*kxv@
z5P at -ei;MS2!64cn843YtD2|rEM*=|Zq6OGQzzS?3LjTnwAnFb6!Rj*>@Cw?9hOmJm
z&@1)PrkZgh+9- at q9|2p;H?9H^FcU=t0(FT91T_p9>gqfdEHsk#2-XziThWR?Lpv%9
zn<9;60ZS5tHU7RkqFb<++!UfLU}nV13fxwMYm}glM@$D|%Ru{<h6|Q0&4|FKHM#{K
zBGA=mut3j2wg4ZFk?0Htiwa9<ZxcKgo&CbcbCF;c9D*`rgh4W6q~#*{gW#!zgo0SC
z55ribIYfDV1g219!o~t&Y!L7cF_A=*1$Bx_7d4z8zO2(Y(HDh^5qi%;V6=l~3YS;G
z4otqVH at sjUIYS1%8yoUV)NZhb0}yN*XdgeKJq^;|-|`qcJ2bKZCdNd0h6<q43(m#*
zDkLmuK#;i+TxblY at UJz&C8RJS!tzC!J%Oj$^%imrd@~2}LK#*<R}BF!sj3yef89`k
zMxb|%PK8<|(!m;S7h)LoMIkR`CrH5#kVB{Xqiv?ZkqSCmxH|z0w6l~T)>x$UFyByL
zPef;fLyU-XqW7o~(%Ow^hdXSwiME>U2SL)X;U;W}j_ZOF?XKm{CQRTD=0a#lGnwLV
z)c&w6klh at WhYq3{#1gdzYO=EG)`*JCyMaR-nuLDpRwLZ>6yKRsvQ}x07coW&n+j!s
z3 at 4b=HI7Arp-#doh-|4+X4LN~FoFqA!s{{Y39*vso{$EhFNFupc9`#`Xx<aVP`K6O
zY#i`XQE=eETH#A%4%NJii+KYFqVhtGg(#1(vF041qj*J9+tws}6m8vqH9jH$v|=Mn
zL>vqMDQpx at yT+rV(A|ts<{w8#V%t&z8SBM0)VdlBL>GbsG#Ub1L7)N at Bp5Hw4@HY^
zKJ*h-hpPXtMnAm!t at sDS^iSd+qWr|fYdivqPN{z!0mVerM&RMx8b1;;<kf5+ED$@T
zsm&77q!3$$?kMqM#Qfg^NkT$N5R)WCI5jTFN-7+`dAWWtOOpr%PJ%(8PlUC!BnuH?
zK|wSBbGU2XkRU6Ns0g_V|22hg2q_E^MxlV{3uy%#l4W~0Aj=YUq4I at -9ICKxT@nH<
zE}Mde2D{4(wKQBwLuwe<WWddhQh|U%E||H}W`r=l3Ux^;??JOq5c-8m9D;BEE_9qr
zE0GAH`(1ei*nGVMLKt<tQ&QrPYWZcYN>+anw$cI^>$?1<wY(u%)L-#HQ4bXAesi=P
zx1orDT^Ir;Iuye2K5$8iy;&3gC)#__0)#;j;sw;+Z8)k7BojYBVMG<K$w<T%ipPwJ
zw-0wE5sj{`Q`C<pt-xCIveem%+T-Vkt3iMmV4Cy74c>;x*aA!UqaX^Kh!zHw&Pi|$
zz72vYNG-8(q9aIVP#@UCk!J=a!4X)Kgm<8u!qb{CKG8eEXg<+<jR3zeybf8~M9LQh
zqSQ_azeCgX_fUpX!S_{DZUo`!s=2O*lX~NaU>I;eTu=y@%FuvJ#e>XIu(mON58Yw}
zm_V$M_$^QLI7BcqP$v;IheuNpgb{DIKymg4BIg^1*C$a7(a6TViv$~B_z at 5zhTAV|
zpd+Y76#vE5a)Ff0VhX9YP#9-2V1u_1ykV%LM3;#z%!Nc5C94z<^N?D$Nln>eqzh47
zLC=xPvpEku%04{Q*Bk7)-Zc?yICFuy4q;!wS|ZV9WRRZliU7A*3lS9IsAUU5f#DHG
zc-*d01Q^tD!d{EkLdX$c5x+t&k at RqSn5H5v2nrMjtY|r6K?&ke{_EAEg6p#oL$hkY
zQXAV^-xsJvq8&z}Q%%Hxi{3y+PCOtFDnK-c$fkpA$B^*|VyE$7H)FUoWT0PI{EXa~
z#D!QKcnwk!rQ*LL_$3u0BI1z1=tLl+bZZ)JlOjGL1RLUIX_kEP*sdBH10BHo119od
z)SLP!wUDR@;3A~OK9HEJ7rqh%!APt$0c`3k)XxtUD`Y6Xc+89sLrR&RBEYV%Kzn<k
zb|CtNSYW$=WQ)04YlR6hU#ze!5vO_`vC08Cl3k$dHFjy3HiDUeKnfU)H$`l6NMjpb
zK_FWpP!O|I)S_B5(+L6~n8jjo$Rfs7>9YmtF}R0<nBc at Y4tZ(lEzJaL5(=pt at JQyG
zrv5z?kp^{9)T|TO<S!DChY(7dvRK>7`iqi?0h88Y0bvw80&wHLR--UapTJ1))i90C
zgbYdK6`Y<(zC$35aDL+gM6cR8f at 2LnNrVAUbtf;9<U9dj$Y(ElE;hBL5|xHY2y_EF
zLy(i2F4Zfzh&8shVFJwjtK%v?Y at C1@k at pIZ$ieeMK<F<lN`ssVgm*wN1q|_ASABsy
z5n-vi1fX>LOEA!&Kw~jH6nt(Z=4xo%463iuH3U`)B@@zGSU4oK at IyqmfB;L7Oerxb
zO>}M%wmfim_AnIkG*MCmx-L*Hr0EJp4P42EdjnyspI}&hj{pf1Fv!;!a(fVW2x277
zglWPgmP<)|03KK38&QE#$R2Bj%(`EppaJw=Jv<d=i<IxgutVCk)EhX^-k$Kp)cL+{
z6rKokuw&T`9K^!uXPtTl&STJ2h-OQz7*#9K{82oT1XQI_HbRO6^BEF#z43()jRB`%
zU_}QK7j5ungHYoM+bF`|f_Scn-$Hjlh79x;DsB>_QOp`=VPOS_H9k55wj{)*x*Vwn
z%><8N%%s&yG>qt)AS7OtluMH=B}+z=MbI44Peo+C#x%j3SOFp!#YUC~;2t!>P7rKR
z16>^Acz{V*jiyY<k_6CEW+c3I5KRe+pkO2f+JV%EKAr$4h=xHQ2wEs9{njr35Hw0^
z1HhOCkCEjGrT>GOphvtG80;rh5bM`CB*q=V9 at q)K*cL`uv@~NB>MLk$17fNkB8fya
znnc`_w8n_qmhk5i3l{?;K*<y=O>3}X6b1x4IY94g6$_$|wN^5`kI+k8sv`d4v;ZJU
z1i}!y0-!2ms2#`(2&}})2gvzLOl at g0Adn+M=0xR7>u9Z>CsoQLJQYlV#~wkSsMM`~
zD-0w?un<OQG-IuU>+Nc at SBf-W7hF;x04$9&nOfkn3<xra35}i>M5I9c{TF8D;$Mt%
zup8s(B%H*7J`n-pvw~q|-pv}Phtd{0);z?)ED>F+J1`_N3<Y<M at SP6(K?|-7ApvhN
z7&&UDgw&8j)FT(z76TF_50o&n)CQQKB8Wpgl2KZerI4yig<_4hL|PvSn+&Q)TKFd(
zmWkF^q8IQBi5N}MAX=%M6WJhzR#B-)Bs#OCF;X!OhVV@|_od=g4J8BIMwD2Rehb}D
z?qEN0M=!V&);MJE5}|hzTom;ltq2upRN;X^Ky(P82wG9Y)6koBW6OkW7CjX{Mw8%o
z%?a}K0?BzcF^veT82+j7N0d*Bv)Fp1F7&aq2~ulLo9a2kNb(IrJVf7069h#YQp2#t
zAtUt_0UC;Mp5K82m$pMfk>Mts0sIN&U59+JzQphaLwqK1;J^NHKuCB*lRpmi3=fCw
z<w9022{Ht%TCn{dsP)YNv2Ke^1W|bYX6!{wSAw>g)Hu;Znp4|G;Vc#{yJk3%@?0Yz
z{0`FiYFBYWTU)0$vB*+t>BMBI)2c?pMoPsscIMi7fulO|dZ6WyqL|*G%qjq&mC$-n
ze at ms*BfUbQejqY;rF<(&2gF1n5gTE>oh0x at Vq63YpJdhku<f at eY{`IZWGG9IZ;%g4
z2HJ?phsW?DK^k>Ig5-(_(@4OMtkGWx!BudNP$PsgJXkDX2Z7&KTr)FqDGq5RVr5C*
zKte;HZ at 7;ycr#$V6J8Y_Lo5CneqZbs1SI=`y}wcKg0mzTC=*Vle%tU`bVbu!w9(<j
zw_q&7aYY!Sk0^-%d4PrBi;^XKC-_pJ!w^*qkscptREC7qFR+={Uz9N-j}kLSkiejU
z5Ah{X;$I4bs3pG?G&=&%SOjawAP0bV7{l{-AO|yk?Sgfoq2V`(QKu^W20jH*S{R6R
z at 8jhQGC%MS>8}z)(%`$q)RpYP at 5?6M7wd at NWdX>L-wm92eHefIiKoVw-a4_4c%p3~
z8`qEDz51JO)c?A8FYtHkbYddj36RH-#Y%L}BRvagv$#+{9hMG3=sw&+Q$Y{?h~6jW
zwNSB>bb<+Ozcuj=!j;FhzO=f+sh+(#`d33kM5>eYd^S+87`g#wqXCmzngmT1U?uJv
zfG*TfQIT(P7}Wp?LR#<}_>2%}Ly~Q6EJL%f5@<d!0z$>W1hIKkgP;@moFE$Ah-yU0
zGNL&GsF*gjp5L=BRJv%Zk!&MqHIh+LiY+}z{)>ZAoD9`UJfhztGAYt){5t at 3ZI=<e
zy+T5!z<^B=ilU-3l1NigBPBuEXs!#(!G{d)O+^Xt at Qn+QfdO6B)<BddGD!ssB${YJ
zM)3lIWQ$T4NYrYXQe`rMz1|wvKSUZOTvs8ntU^Lts;ej=Zinx$ggT9kHIQHe_rxmb
zg--R9xG5O1#?E6iG{5i)!~hy8RG&m#?0*lYNIi5H1y_y73r#v=`3PE?A`-~=dmEqR
z_}94V1vH^XVHD_+HMBu&5{agxtK;i*1b8?>P6>(dMVN at -S%9TEpwIhGM`0)ofK|=1
z{-8j;pg?zTK%od<ccIx*FeJ?eN-y_d-|0SH0!YE&5w!}GJ4m-EOn=pEHHN#RQh!sS
zVC%0CSU*P0O0njMZ4B1jkbup;!o353(=I$`DnS{V5fFH(b!$X+RCk1%&0Zl=wI%Dr
zb)DMUU{W??4+#y1s8T at Ji4i4+l2AFCy_-a_k{u<g6fWruZ}wWD<Z$VA!e(k{j|AW5
zuTxO6^lHJ#N1##j*DDQG2>AL2Lr7h-_teXsC|7z%y<q)%2t-ge`;dZ)BfUl;Ic|YE
z>k?yPGn(e^9e@<yCP}h`fm6}uNzGpyQLbcdg3bRV%y`X6f$)-jB&&t#;$EARq8Y1$
zg8f7M{3PoG*~;A~q{cPeY!!OprPiq}AQbn*H8VaywsH6HnN#c327L>FjDxs5-ON>b
z;U!DfNKl%Z$mwRTGhASIldP54%Ff-#3$d4GM|>DbykH`PK(cPXpvdq5v^N_bD_-N3
zY_ at p>ef9<CMlGIz7=WyZ^~tA%06rJ#e at MrI_2&%=z90gitX`mlAgh8qk)qNaS$-hh
zB+6Au3}vmJQ|lv?D((x`295BH3bd`UI0!StA>CAHE<oqP16K|SL%MKHKB2Zqw{$d5
zV~|>e%Ev`MVLt_WxjD0Dp}4TUwZ1 at 6S5IxMk62-~?slQqPSjIZ8+0hz08c at PPyOHG
zxr9*Dh2|1>fnq>h3x=y+{SbW(ANe8Uo#1^jGb$RD8c&&sw?v?Q;T9R(NQz#RP|0fU
zi<y1Uivm5Eu;<{>21Ep=sJ~DYvZAv~#CU=lk6T_q91jlh at pAWy^z-u#3k8QUxGX`V
z6Na2fd5#CnK^C3H0tqY|?gU{IBqTxUT?F!*m`S-oaHEolR^u!41Pwr&1PS0|W+^Z@
z{e_|+TV$;f`frxy9TF-8%ik<X+yqo-Vl}DsX<ndi*MJa_*v1Z_ at Jq0G33k6D=vhNx
z#(hh;!Cg?3V4P}KZZuFrvu!BRTG0O#1pe~=FF@}9iT!_C_y785rcsl|U)&<yU_()u
z&+qsDF<~)H%rLS2-%QPzrY0DJ*<i`d at WTJ|{ofWljTqcUp#$2$u+7jRcFyoO9sc{s
zQQ+6mr6&viQ2lKjZ7}R$L2sEQFW|a;#Gr8zqeJ{6AYq9wX5$kAS-^*)jK|Ip$~tq}
zMc=*{Mt<((;4&yGYRAKe5BaHWuUtIEe{+rh>j(eIN&XgP{_So2Jw5oD*7xt<|M4Ju
z`SR at VTh#a;pYThTmK2`j7tZ>y%k<T~0{+8n{`>ot`$v3u{g{9H&)c_efBN+G*14Vh
z4cKK~VO7<qvYh14+q?7Ay7521cy++J;!x1f8yoMPUdF#Lt!m$(kM~cfrsn+Grp5pI
zj{h|0{bSy$RY!j9>cW3<v81G&zq8ZhBVqib!#-^{c$GEb_U&i<dwcHQd+}?(>5aVf
zsZ+P`bA0(l(fps^uH|R*ljYW~J;uMW?((JlkNL6Z&zJId>&=~;#^c?~&As(CwbPf}
zQ2viE{7o_$8J8+5-tZ6GA3j{n|Ne3R{);g&`+sht`T1=qKN0=uh%5i{!e1L{+qdWP
z&jnQN>Cexb`s;1ksZ-bZT+bIT-p!h|d*Q+Z_fIa|y!kZ0ASx at 1clXRH{yxLX$`Aak
z0S}MQ;eUC}zkh&#Eph(*z2Cn5`10lZeeS9k<=6O|75E3uA3S);Kk52)s}}#*$US>5
zJj?RFb*qAZ-04TM;?GU;?_WLOzv7)Zapgf_`t8yi*RMa`wd?$&N0q;lWxsv>^7ie=
zf`Z#$w&|Wdd;Q7dN0TQf^ZERzPoF+}_Uy@%Cof;Vtf;6cDJl8(?c4L`&v`uF_wU~;
zD=S~We*Njwrx!0?yn6NO$B!SEFJG>%uKxP<>(#4Q- at JMA<;$15ckjM?_wN1s_ix|6
zt*WYe{P^*sM~^;y_;Bmit?SpXmz9-${`~pcwQKk8-Mew)#>bBzuUxrOT3UMZ=1u;O
zYJPezel-;PvpTi&w{PG1+dG7Yrtohi$HyP!SC;UvulagxEdS8JAIWWgUgCVcwf*tA
z)!%OK`;uv&yfyDd$sYbb=GT1|g at t#Y<Zmi3KJ at ck(E9Z!?-w2VQc>`+^uWiDU*4Y$
ztID1CbG!DZ4{yJwbo_E**5^+jzZ at L!`qKJm1)DzJ*!89;`Rm8Zk2lkP?CSn*x8>_s
zFP=Rqe_rwM&Ffcr1?5MNUjA at 82%uE*^V(cMj4u(+BSypJ|HlK<FFw*6!&G+-wX<=V
zaog)l{}hjhO3p46D*YViMC8k5=A(x?Dbv}MSEct at H-i{9R&1<Iy7&6fUT&s~W>jD#
zvy_C*g~tNVz3+B at pR62XmSxn-WUItA$0Lg8s4v#|Q|s3Jt;aV9#A4+5&k37P_*|+i
zJLxy#=NYfZg=N{dD(zQ|KfH8Wb at h$##l_wj$!>OjaoLHfPkH7aq7K~aGy8E&;GgYR
z?yz`WdPr{Eoc-Ny>T|Gd0}Bpd3-0dq{cwcyXm$^0+oTgy6!n~fetq0&*FlEPj=1E}
z at z~fD#i?75PJbNcRKyPIM3GC0Hf-Zp{3na at r1XZfou)gqJ29bx)<^RRZ_gA9)!ifp
zhgOmq?po}fOjEv=_aVOL8EA1Zw0O=HZT-_7HZFNq<ehBZdDV>RYGdY*sPrP8liHQb
z_9#{tZRxjZT3+=6uI=<A*ZYL#n1|fI5J)eZ_#xf^6>$NI2)G#*dhc+^otQS){6Z$O
zMo!MTop<us?wGizMVm|%)wV7B at L8?xA?Uq#e(?rtirS0v+^DZ-W)9yKvu`3JGx+|g
znVWXmtT9UJ9nxKO7u3C6=cMNar6*p2%Fgy1p}ws4*HRtxd_P2`GlDv>u`8vSo3#9S
z`77B+c$<26d|JBGnv?2KY6hU&@4frY9ZSW*UU%C#$jsiAqdUJ1GpU`bnKFYD at T&AM
z*D!9NLXyJM{mIJVl}d~ip(?WYgXJG~jXbwm;pyun#VHzCc<HH``{dfo(%EK_h8aJS
z`?nixFpd^+?`EE2>IA1N%#a6j$WNh}jyfl2-p|?)K5ci*%saczX`h_cEq=gq&P?d&
z==|cOqyBFkCU`1Sov+>6R#lyTA*2&D{c0vR;&|j!2W=}A>apE9t6x}TV0!Z?ByxQ8
zu00<2*Bw{PSbvtDA3UM2#{CJ@*vJ`esB#S2#$7QpovRGv$WPyLs82r1oLqU0$<%mk
zga!b8x8=H7x}LFOml58{hXYIw at y*-mnud`2w-pv!9JncS=<B#+K^G2vRa}>1Isd-v
zoPOE>uT*dU=<Jf<ps9Du=<6LfS<F9vea^Vy+GM|nCaM6LXQg}YaQCSFxyZNAb<b-Y
z9hp5ZssgasvKg~1p_A76#^f8LHa+#qoc(fA+BwaUe}0>LJK?K-!sh(tcZNXeo4t1r
zbgodCu)vVcOU_g;{YJj^=bdWq#HF+8>I{xnz(xhmo-mms#+GIm)?;^83_n^tiF7a|
z$3wCBks|T at X;I$Q&y(6Ho-b2mFQ52kW=iU}3c38^KbKu{;9y=Ufd)yv+YZ0eaoy>s
z`zM&T=^MbDZMD~X?4y?tF)Dq(w&F#*OHYfrp at wN=6-n0Xcnc0Gw;!dmG<y++&Q>yW
zl*#t at I`Zx2xqFAEJd7B!7yBIGq<u1|cho=tn`^=Xm#woiETjIo>-b%h7k9JpZb5sc
z>1e)a1-NPQ{ygqs{Fxz3=`m!YV%X0&R{9BfSI&`OsK&!kS!)_zxNjL3_u!FCVnT<E
zHksNtGQVde^a7egF&dq7>NM+0{^GF=t0mJe&PptCpwIrMte#)IDWS*(b;{Qu>FCsp
z<Ovm;$BZY*gq#cVwu`LXQZa6sj2z>(Wt6p<=Nr3_*}d*9c#;yBXj~d4=ihVhl*~_|
zFc&Nm7A)vo{peGgnxfOTS;oiOWs~oE+&!s!BeRrd1HI~=u-QOHam$M-nMaSNEH|!-
zzcOb?QgP{`m*Wia>9E*)?B#_!3j>#iy2zEEm~ne@*UpujqBRdCg`@Fqn_nEadzedp
z?m+F^4>lg|;1+Rhl1qMYUH}D<!ARRWvdyU#raHc*UOIcHXcljbov{1$#s!*(v=sk9
z({$Y)EXiQ3_b2KOnT*LDx>kDZ)YO~I_5O_74G%r;-wg~eIdQUJ(2H;FhmSHiymsl8
z$qP3J(1bvfxt6$l^7L(ed at E=L6N;wK_{cK8y<jhOe>p{t(ZN#le%qv at L8P#7O(TzI
zQzy!<-K;qFY(Socdba?)XVKp48EW at tJxL&s=N8{N97TH>pp+5#VQ&A)hnL<~CgVk{
zRB%0D8&>($Hz46&R)D7cY|nGmdzSiNK6e8j*$!xAT^;kssB;WTBd?XPx*ofI`*fSJ
z#GC-CGIinro$w4y^;yT1m8TSrSIQiY+STR9Nu`<TN@&)gH{2}S4z7?1u1L>+G;YYg
z+0`A=QR}=?JPnfmSP)uipmenO4)xERXkFPWCXqKLJ;_)|20S|9y|QDp^~0$lRSs&i
zrk)7xqM4sNo;tjp?dFq;qYx*fv>8pxc#x&Q>Y}$Xo0Vy$Y2wR@{8?O<hL79S`~#)2
z+E<pQCTu>dvDDkY_%3JXpakdfueZnqJu!~0#z$ZwjKHD1j%T*Jrs*#?PV#>CC@{!z
zqBU?H!xb>RhjlJ3-}!*t`Gvhq$6W`{y(}#Yn47n!YRqJq7ry!162=&AIir0|HZ&vn
zO>lZb-t(R#CMp#nhUc4q!1mQq!~CmH7e*IlYkE#Myx?@pFCdjnXS+lhPG<R#X6Vm+
zX^|d0 at rd$~0?KLkrB{HXD6g7~XcuafZRnlZ@}D^qj|V)~UZ&cu^7S|^4DhVOF0zN>
zwEh8W|A at +eQ+jGzfA~`tee?UqKJ!0q`xNePgy<#=S=p=IMtN!%GoDs{b{jsb<B9CC
z!DYv%y@`puw0p#$V_~mXwZA)M$LC?MlQTn=+1RKXnIA at dce1`oK1tRp8aLzgi2%Lp
zj at Ij6ukuPZ4?p+$YnA<_>o+!yExK25x?NJb-`jhKe5#XoGJ3!$?e)I3-AcApgUg$E
z$@NWX)}YC4s_#~0^uN4Bql#3#r)Si`tyW8C-%034A5i>s(lPRtN|<(6wR=8MB2P$l
zI?y$#V`Y3l4c;q{myvJAOgIvG%Od3tu(^#^;XfA^U0Sb*eM<I}$un`@J0UaRoLY+B
z^!+}r%i`mi3oJ~YZ5y!wC|+QK`D&Ty?Oyare|AgiDc?)6WY*P<jIzR$;ZGd~y{Imu
z3>xi`keogDUha!!&VNR64Xo~HrbN&zz5KSV(1&R>G@(sDENXMQYTPFBLn{v>MZdSl
zu$BE2{NlZtPEH=h at 9*u~6*4}1de2#o>B?92C=Ny)O`heG$a2>*K}Wc4slDkuHS>W2
z&-!8lFZOem-@&^lmd}2Ccfpi)r;jVFOc-nw=Q^Y>S>b-EdB?$LSj(3$pPSn^r1KGT
z9gGzBu=H!Ul`D-cwJ*^!Ct1*VOBaPEyKzzv&*#tM?^*iHcmjXMOno!?b^|r;aK4OQ
zU+i{h-aDl?#rwldGqbW(k9>G~@pvj`mFB%!U0vPh>9p$Ci?G2y-=S^iGJodl>J1FF
z{A_uBUg(nHF|^7nu at BDP!ag`?I#rgF7!<XuUW225704E5zv{K&g8t!<%ceOoaf^#o
zRT=%x at IG+c%ab;$OxYW&vnlj*rQ6!&qdz5g;k at 9S?sRt^2g?mjuUJzs#9KSz2B(jO
zR?_;j{x(+r+Gnj at Nr7Vn3gxif&-WbV*secd#|^u5YNqLutWbtw at 5>ghnmTFZF(%*1
z?N!dqpFT)!(a!9*7>ODY<QC>(A?Hv)k)L5_Z+~HdkAKJY(ZjeyJ@&9wGOkZ|x|u;b
z at yAiRR#?i%eH3{=leQ at x%Qy;lHeUPpX@=Y_BZcjXDR0XNBt`AZb?f>n?^)5MoX~wi
z*=<XP7twEZ(_K6^M_ZB3X6KI|Y at 3rQ&yHqm9qju2d-e4m%soCSYmEPJ+P!dhx?x+z
z^JXk3GsQXl1MM*Nwwq1_KOHzEjg&K+(bMyOU(X~g+p5%R(F4WU2^7P at W1?MxrcN~~
z7+rMuFk_Tk<PgvDIq$z$v)CIio<C1@>63MisItSk<aSnh at 4sKa6FTW`_1op4%KCvB
z7=^`&RZN?xqMboHkg_fP`S<C{jJ2;+(u2k at QfZkiTc}TwF;`Q|!{g}1B^0-qlo`bv
zdXLoJcD+bjjjvGhNMlFw6GqnwmMLX%@=wQcFmj*IQ+#%8j+&d?u4K^d2g9%F>79G^
zY9dEF_U(hYoK7VN-qJMbE01<rKsvdyYpGTjC+<tq&x!I%H2Q9Nv)&9P$C)upoW|}O
zNKvZn9!kGd5Ti)3O1w(*c={|>KSPE#HC^ev%GY1zq0?v;hCLY%+7flTcGRk1yLO_K
zY$(r7(McLGf}?Xsr~O4NeeRR!18oM7M|>Qt5 at YJ>(1p3Sa7oOnw8h35Ozf&H_r9X#
zbk6(LJqni3;SQl$$vo-a-ibS?=sv4s<&SgR+;XPf9<si9sqHFeXV!U@&xxU)&a at MS
zBz1jeKAB1{$^0Wlrf08$E9(-q)+@`(e3%|vFy#Kg2RUXXnJGTAuu7lVBt}l2g2I(K
z9-g6?^Qa<fMS`YBmF10XKFM(--n2{Ek#;uV)91*M(do}t9}l@;Ynz2RCq|$CqmtG`
z$&0ZdLL+UN%z}ZsyiAOAzG`A8t!>dM$tn)Ar&8iqRFa+=o-8Oh_~7k&&geJQ&MEV+
zszfWsb`MSH{f at eO0V`2K!DUB`LhOwS_B^8!KaJ}X4xCe2tX{Em`1%oR<DT~*FCH8E
zR;Js_>aY(UdnWEuTcxO$I#oH;GC9Ud6Zqwsv6OoiB%kQ#-`;wzTsi4|VzTd#esZh2
zpOGc)G at h>_bKHqC=~AaEl`*#Jw83AaU#2XGcA$>m5D^k>t$%#1!`A*kADc5S&An)w
zh^2jUl{L7tt|)fbXWxT1j$4nseeeOQnim=tOH}2)D6ZnV1LNMOpB7yot&UDkc{|Y~
z_3eYloR957x5<8UzD0dRzV+6=GSLHDV1Dw3jc-MVAyr*DWXtV8D*hZbs?&hPtGizn
z$Lh~cS+vIHL@(p<(>n|qba|rgO2zkY-^*-nYcq7l<84|)j7!GEXwu4UP4J28g|(xt
zUe=G(!(!ERgES^)?#;34`TAG&P;M at xtdx@ErFU*;PB8gI(MrWi*KQL-NBD-sTC^u8
zB_)x$ITT}(%kg$|-A{PlHdA#Ay-gb1B_-yAzW(#`XR>2r-rRj3`7LE~#SQJyDcOS*
zuO>bYqvlWAshZB at m~TA`l>S_`!;Ddd^pE{il3mY^l&MJH!}w!h^k(xNG#}ZG4Ed-a
zldiivytI9+Knr`q&RZAqs`~3vf5X!LpBQP}k1h+x7JJO^^rJXLZciF_XKI08D4Wxv
z{g}jDj8`$Zm(m$j!S#rw*xY at dfuFuVH4DW)<nB1tA$7T5qCA7bmg#-0#}*aSxO45_
z&_7$3d+nR?k{8%<UGAM%vmWTYR!xw(9ZbEhiY-$&Pn;j!MRv)&1Nn+QBN)dqm(o&B
zMDOTqc_m<W=lnc8%PYLful7q-FPLh^3?&_*d}FmyI(2q9<<cUvc9dAl&VecF`%bIv
zc5a&?uUB~S;tP4Daru2xupJfmx?hjz-n*STH+ksgKSr3DO}TeW;kGs1>CqDxvN^X*
zttiOShTAr6u!{ahm1S$ZQdB>)Sqs)!wmDlgasI8R_fAgl%dNr`V#iN=FlCKpKdbTt
zkj-gRJkF2g-Y<Ab(xk1XPjF?hJ-IRr?pa!LU!AS{eJ7gDRbF-E>)g4cRqeT-bUQx$
zGV}c+E2m#BhORak8#8ghE at X9!%8wfKDA-7slzDyzJww(v$j!Wf)~g^zCBVbC_}hzX
zyB%Yf|M3Xh<Zsm7ucID(<wIe)c8WS4<uRpae1 at v)keScE?sl8fCH0us&-B2hXD++-
z^}e`mC-*+ at X_2M>$gu|pZ+ek04-$8mH>D=`O)JAb<tOZ1uWF%7dw6qB#oK+mFOSdg
zJQovqO*8%1uen|NzVM<<@jo#Bu+O{nK*e=!%REs(182?*)DEkzsCe7flgjKJdS<pP
z&&pA|ywkNMhxgqKnMCSvXiM~fu(9bAPe!q>GL>vFI{W%o*-a-R4Cn_ZS%=?z^xDOu
z1A~+Hw)E?8jw9#zHU9&fMn-NYk(IDto1f9Uj}5W|s}(jB;xrD}dc>gf*5m&d1e)ak
z at j`J#!FU{SW1v;P|Az^#9}5Zp4~u1L(dz$c3~c}IJ5u~VbSRUK`+xL}R7S%^Q~W>J
zYUKa9 at sgjuH$Cq@|Nia!H?H1z`ktS6ArI{ROBXK%&rfW0?9)e2Z`{0*ygAv+H#vDj
za#3;7=@X~H=WydG|IN!cu?u2{IXLG%;wNu7G<)vs^qc$}SBt`@g{L1#-?4Ltm#<gR
zqt8W!MLV*R*Q{J)!ZZn=wkG{RUh;<1;CVQdbto at 4Z|U--J5qNXI&vs>?|rb!LuZPe
zI**4xCQUKbW1TmS=mH;q6xg_#<<}^bNQxZNlPQ#bbLl0q3cxX)I3rhRP*Ze4%}{5S
zfO4J&d?#8aiH#Wmg=UcC`}LUSDbsIK2D(kP{B(%TW{+)KfUH^+KSxJL(ug)~+NgG!
zXhfla&4O9t>G$x;lbhu?Z`|;`X2FEYQm{W*irKpk7_$^NX**#I4u`y~&l0xzGVqWM
zW0OEOSIAI&@jg6$GE1Q_j3k4R<@8f7E1Pjvx;rn79X0$8`sC)z=NVJvCNH at do{{<d
zWd~??fsR3+KI2dAoy?xXLDmw?dgO-T8;7 at h6v4qL*f3o^`x3cDYoPzF90LL2UvV^%
z{!2!h)(eXU=s(kp*;|7Cn^{=&Zl(YA0=1bQwix|aLi8UR34ZSl8+dS%o<bV{f2ab&
zi?I#%e1z+10$S=}PXX1J%cIKhlz0p(I1YHroUnDiel$5oR}K11phxW96b6S$1!{Ic
zW^ZhJ2B&;s?i$d6Rw=~yWn-R6BsyD*3`F-D`C5(=oy{Ehun_E0LuKqb!Dl?6n at T_$
zDVXC(GDmkHSlr<Fe=qtr3IB=p-A1tP4 at H?HIM#bKfd3{S07~FLtG9(|EB at CD)Mk44
zTl}X%1)V?eJ>d_{YxrP0jF0}MoZh_}?#PD at aSO*V#kS}_3EP;g1vh0QhB^+Cy`d=E
zrX#&{rk at qu(m|0z1BuNVuz~nGR3BJN4%;ldKqAq>Lmi#o`g9A%Fw#Cm1uQSEUD<Dn
z`Y82<TUo4=t0V6 at 4pHywwOz}_j{GZ at vtV14W{ht9+Ao6*WmFBj?Kqr~L8q=fpK(FA
z!eS-Wj(WDB!`jHF$=;dMqx at IPKaW;ibZPF^4_m4g_~U+UpQm~C1KlxpZtT3l<L93s
zS3Rou(2 at IS-XlNnrFtwKzwW(<OzHQ{t)ux|i+i)C_mU6M>}5FN?)*7Ns9)P9&Ws;n
z;yLli(OU;?PpnZgIuZWk{m)@PUk?vC9$wK;_KxDAU2h(h>0P}&g|V>%nYU)(;1y%Y
zhdxIiwB8z^{XFa1Y<Bh;n*mc;qmI6jD=#iQH)VTC)i#?S+AI5Ydv9)cbDA~p*<1gl
zps4%Hu*pg7mE$RD*RgrzPp{7NqN}R{5{gy~u$uX8TK{#?do)+AT5Thr{iOd=Y?}Jx
zQ{<F2(W#S<ab}ET4~t`mPt#rh at P;KfB4f7GQp-s;S*6wFyE<cZSZ{U?Esy6|C*7IE
z**gX{TzWDj)t<Q at v$Q{;`D^N}HzzlYQJy?4#;jujlPv!;-X+fwdvAF5 at QEWo;`sYE
z$s9`4$3~}g8sXd_nRJ%(AXT=!*PgU|ogLbinlQet^b-N$fB9$<{r7T*WsRP}o<TFi
zeH+068leA7Nc1N`|IJvYtXBH}Pt2>|(ti~H`FHexH6;IWxm*s11M(lCdqa`jMP={c
z53NT1#<I`uI16`{2<1RuUpsPoI>>??V_aLNSz<`39>-Bl80QA^+&~#N)@6?e8FXV?
zXOb$2by_l1Lmrz8o^B^n;#xzVAsfU;r)jPXP6k+DNxI5ri)C`b2b`p!shOt0!D9A$
zkWO%9lt7TYsDvx;@s_rr5^IgSg0VRy><=>e@{G%VGoV%fdIHxZ{11mUl|&i<1fm9y
z2JyeQWc)YFq<3rlcY|<kju%=C|1}W)gTd{>g$r?UaiS!kC~BA`G+nla1n{vA!zuP~
zYom|`3`Dvh=5G>>b?gYvmkg6wQrotAbY^B2gvd<b$jBveK+!wTy`bQgWvh{a-^Hlo
zq74A0yJA<UH-HwfNv`pjiz1lV(ico22ZD7i(TGk;(*&|1$2o){qnM9=Pc5b?2b~t_
z1O<WW*w%xxk9-^GjuKt7=iL>E3cZ<&l*XPKRI3W#^>-1>|4m9`lknfm9oDBcg7G6@
z!O;- at n=?%%_`hkZ{zrhW#eZ82|FvrQKVbp_5dfKi at I$F;2?tK(YDoYeyB~Yn4elii
zX~1Bd2Bemza5n2OI1F--A&*gTq2L0<kSpmcApED^$SuAgM^*}|gmYHxViGml4<rQ#
zY_goSH5;=j!ouA+bE1&tXfzjnR+*ljUTMhY6&EWUS`LMB$R6FPBuDVI#w#RYPAWiZ
zI2E2`HsC*9V+a*4xu-8Gq#_~W-gk^d!!*5Qs&4Fv^M-c*OQ=8- at gL-Wv~YH6;H*X{
z01e^4nYkqYH#29o%KvDRwfNCu_>ar~VEToW;iAlc&@8Kq(5bree}WM22jO<$Lb42<
z){~8qWRkcX8J-6Uh)BW|d%A#}?lFFxry2ez8tY0X0rIPP`1tsFE^My=R$mPUiCzRJ
zX$G9GxTYY}o(Gqq8cK%rSkNC1kiFU|LdiK}nB<{}sSpymjocM5UhcBZM0ii>`F&YA
zCZ=3XDLwk*=0h|9|0aGfIiZ?}|3RMN5hz<rqlAEl at Sjx&|5?3zGh6k4$+2pQ>)+si
z8{GfD-nSF7 at -@l-PZRim;QO8a$1lSlGS2O>ilfY7a5YJY?{+x87hwL;B!tr*hH`C?
zlU!fX7F;{yI3xpX8(^(27t_G50;+3xc*I=+q)jCYojQMl_<jx#ZFWYizFHCK at Ychz
z#hE(8a-pVwHU6Uh{hgyp_#f^b90J=EH4gh5mj7Ac>=j at C%`$_Kpw{)@e`jDD`R#A;
z|L at 2D$P4hF5c-GP4!#L3q7VW<cB`<B4P5#PX at HlP7l*=tHD8>hXjNrSUxdd`W9^XO
zUAX8PV0#y&lI!<DQa^sKH6D<DAjkr^J6QZA8AN at pEwEaN7V(xs)xsjiVP(ZTrs3g@
z|7KR+$PpKRtx5Qg+y6sC at m!VS#Yw$ti2s|jOzPr)EB}`Y%jUk>V))+?;lIo1F%glG
zi<c};+nIFY)JYzX54r%AOod*&9*`Oaf8<3>0DNrp$Qf#I^Pqq(l$V!#$dZ-ub!d#O
zD;GrT7$Y at ayVAj_KdYx+BG~k4NquFldnS54Los+!jIA2!F>4oWUbz_}MYKxWmzI at r
zblLqocI;>^3&KSaHjF%oGbaOt{`1(8r8+!W7Kj!G*t2jj8&HxjE2yFvJgv?_rgU^;
zLO&NO6hr^kMHd8*2#t=sz8P}J9C_|5T@`}tCfm%=IZp#+A$~UP%G-NpD7^50P1tB6
z{-f<R8zuWAkTit<W_9_$iCL at tAAzpLj~2s!-2MmJKYs&@?}zbNEHM57f^5Khw6cWv
z5>BMq|5gfR0^I(`E#~H8&oVQzK^LG{E9&*^xJD7F1NxV80a-tk!D)K3Ojq(l^n%?0
zCu*TT<c>&-He`mE!m|V9?%)ZKW1(2w^BgCYF6dJ(?>u=_k%BHr7tx#BzhNSrCdrh~
z!6R!myY_dI2OLlN4r`;3aG`{GoS;Q29v_Sd)BhTF<G`->r-}G4+(4mGG at v2;H at B!`
z|AS9j<^OsIu9+UT82;NL{{QP&^sn#HESBG|&(Xj5@%-1(zdpc8EdOKluW!-6-bVkb
zj{fy3`q!K2UtgjVJh9W!7?=!e?1kVmaQ!uN2y|6bR7`-|wFgGJ%6$TFtP{`;I&ME?
zkY&hDNN3Qs_272p=5h;)a=IZSA1R79Vjcs8g*Z)`z2Ce^oggICi>^we*pTe|Tg-DM
z*`VloEHyr!QNW%@vKa;80{bwE>L_%w2lHffF~E(CbW9xulxheq5iTGwEJU#dC)LSz
zgJ4a)z++$*q^3XIY{*zNT>p*AN0abB+}+y~Z3o^c>~EO=_h#0W|5>f^pJ>Xo_|anc
zAB6CqmzT$Lb>$5k#@o7;r>4f!)#dHo%j?#Sr>Mv)DB#J;@+MB?L5?#flQ&`nZ@>Va
zkr8jo6rQy;FFBc)lf!d!<58)+9zA%wck{x-d7hp;TU(xr3eVY at XK(*%!-jH at FL1Xa
zq$8v5@{t2 at b^R at +sHGX`3>#<IrVYH0N1j5yDkmD*uY3D$-8B3A(K~|Fzh>>AFKbgc
z@&(9{;7g0 at W=Z#Of>?B#Z(z5s+%$+USIQlx&ju@`R+5v97RsVAXlN&S{Y+Rc9=mFl
zuA0*$L?D2?kSC8~lZT;*CdSgq`n^H8U~aF<D+Tex#!dN#CsHl?^or?qeh-w%ejBO~
zW^-)9D)s{?hf;7UXd7E)$?$iaQsjPIzfgzs=@>;D&5C9sCQZVBFGyDG<2$2~=-;sX
z-<u_=|3gm5R{oEMxuuU5!+%`<hu}XxsQeKB$74ZH0PVmX2q!U<`Z~iOY4ZPC3Hg5^
z842?GT*z>d>!6grjAsbm{x~}J!3`JiWpe$!LE=xrdiLx|XK}uy<G}!G*wu8UbVh%)
zHZH}0Gl!0CgvB9F8is7Hf(4ic=zbZt_<|4?m=O<<d9o<N&_O0n1u^v`1-Z`pAS;O4
z5O>(fbat6^d=wgvX2LvF)PMeHBL2gky;05Q{{v-T!v5d8w|Oi6{}Z!A3jQN5O8Eb_
zYd=tcix%<!jTYj092q2V&M07mo}l$1t{3O$fs#te6>;T&%hESSs{)f{m{Ih=X+H=d
zEDe@^oq&^I$Rw5Hh?sKHM8qHIy4axgecnSF%6}P_q7Jpp(KP(`arf~J5^QbMaJw4P
z|1Ijo|FbMw`G3Q3ZH_mj;D7V1|F=T&Kk)y<hYx3EWrc)<tY5!AA|fI<I5<2!92U9z
z`}-d{bja4$Haa at m!NFn4k|j%*E(PfTiRKvAXZ)PS at TaYGVIIqxdlylun?jx67R3-S
z&a05;%<<sm_k!?$i2fx-^*1)QXLvn%qz;aP6b{x_rB^#GxvKYy5JU`X^f`;7+odho
zx_bRqcR3Ub7!wndtfbA38S9id5^iY4eW4zg`D!(DM)VxUK)As$_!2#t^PT}ZKUIyB
zR{jv%2hu{k0;y9<UneS(7(7U%lnr<9GF1C_0kK~`BQsPXhD33K1q%?y6s=4#D5vdt
z*bW+#h^h2C%TTXEEh*Tk&G5HnuAn2U<Lu51E;dtNdFY4z&fC%WwzRO(B>eXb3k#X<
z9v0C^13*LgZwAReB>6vt1h at MC(FADWLkj+PhblGk_ at 7N1I+?&li}3$=A^-1+WN*r}
zLS&A&914m4b}x%28AI+or5R&#ZUBN%=8a)S0)DgE8ZJ6)O!b8f2h(+K4`+KI-)FoF
zjn1|+04-g2Exf!El{3T_5 at PN!MNtH8!pyL-=#5>yrGCZ4Iwn#SU9PxpLV#{*Y(sVY
zcO8EN|AQjJ8fO7$82`=d;(x3D|Bp<R{}}!+l8XOrfVZyq@!;-;MB-ZXy;XaV^{wle
z8P^dV$TGP55 at B~QAQ<9!{#$ae%2XROl&=r{+fSw_7RjaFM$rEMhyGZT at IO4%)7!U^
z$PZv`2>(s%#{ZbGTI2uzQ}|DUib+KNuS;ep;i8%NKM4u*82f1{vH&Ux(I12O84SYu
zMox8mh<g105C>7W|5Hbk at ZT5Y|1e|N*|Tx2ZV3NTu&;#t&opUW|I;|&{_VF&7zv}(
zk<t$f{sH$<#J at iLM|T+TpM;@sJy^Mq|4RPwFwpUlVPEpW- at 7I=fGD8<x)`Plf8ht6
zq8s=n+`unu{tE94-V=T&EC+om<$!kc%Vqg|E``tMkQ(<Ny^Fp<hm<1!$8I$V|HIv*
z0)3}9HvG3i{%;OR4JGiOW!7r{|3_w$6!{;S{1tHif1+~03b<$z{~wR+fA7BjdR_hV
z`!D{FU;Ix$etrJQfAaqO{kPxVeEIqM^UoKbe%yNX?a{mM_uhQF`uuBY<+txY`CoqU
zKYiza`1b4B#~;-{e*NV0KYsrO?)_gl!ogxf0xX`D1FynaC+P-4{9WP)tJKn-1aF23
z1dhaLk{cKX5?8KTwQ9|pH7gS#<d-qJ1C^5ts)zTm>_Sj3VwdeOTb+`aVYXcfjB*9>
zLzfO49zG=dB6_5heaMocx8Cd|{z#5}{rx5UwjyP>oJz0WThVRqekhfR$?uT+Vds+Z
z1GV_SRjg?e{(Jej2m8)w^a8+!_&<v!ssEdqn6=9PXxg;+AqD at N(f<dof55`nH>~#1
z5%KkZBZUe8?*H at f;V{9WSAa71$eqWs;g^SH!f!5?1;2$J$Rl_R0(En40JcqN2PZ{<
zxW_JnT at cGw1f#jiU2M?zEjbAYV*jnk*5af2*DGie{)fBcJDfLG0B8XJP2jmC|8HIY
z_t%HANnc38|K{=kMI!#6l(ggVv-jDDxeFJr<Xyh=<JT|#;gS4(_WYA$erzz?zT at D>
zYCbnc|8r{JlMBoa96WjD;T2EMDW!LwJxertbo~^6CwuHz&%2+i%9k1xJbY07ogWw&
zzIWe|@bLNP^RGHOx&m>5;9 at vfEEYr=5z at gAuki~37JoD-8q`P$Sgh;%GWg`afF?N+
z`G>p<3JYTbA*NTpz|=IWAXW<`1dT*jk2UL8Qx*dma$*l1>gKp{l#^p8LlkQ~d064F
z!ov4XDZ9YopftI#klpRBsi~<FFYD at i*uRUa?(w+X!+Vs6#;Vn;y;qF|(`Jh1sHmt(
zuI<~K#4CVM;?!34>610s-o!;|;8~=Zlg9M#q%o$w at yrx*3jTcbn3ZdsM~zzR{pguj
zqQ4WAkjPnbY{_2TQrDDyKqvK6_HNs|cdy)sw%~HiQ;%kAy!jK#Wmosd*F^hwnw+<4
zK|Y!&LK4{|{D=HMUf=<2RPsNls{#CHvY3+mpM^pKTK#`$pj!Blg8$7U|Ksa_Ya;oL
zV~mg|(N at UxV<<2!J-j&N?vRel3kChyl2Bl*i7g3D-3 at dTd-OyNvVL@h$a~_XEn1DE
z&BT`XevvU0!9_TUTNp<F=Hi=(|Gqwfjo$vFLHzH{tP}rh(rW+vXJ(xg{BIuqKLhdq
z$&)u6IPhp=g#4~K^o_9QH*#Y3E-cqn_ERqQHJ|1>Nu|Frt$bJeBI_P&Hd47eNd>0L
z2ij8~I`ydXu)b{7Ex(7x`?FZCnf%FavRk6$e{NqkZ?gInC;GJo*p)3<{36+WHx0-y
zke*7KH!lO=MXWCdw*DwHVI5rSH(mtbV`ugnqb$~&g)#uX{*c2{RUI=H0*rk~lX`f{
zM<P;G{>)QDtsUqiaU9c*yJIkGMbJiM){Ob8Zsp^49WDJS9y?~V+Un8hJDTOzQI2iS
zqjkk*XZpa4RF64O3VF4|vQTtwLw)iPzj4K374PZ<<|_zx?wXQobWUk{XCR1a7>TuN
z5jZ^s%ZYxJb-8}v{pw?Aax at F|Ya0Ihzyg49kN}#;|BsS=N!b4^ASF;M|3{<T!bgkY
zKfeCIckkX;uU@@&?OI`BVQ6URrAwC}5YWQH0y<?#F3g5MQrG`y3UIKTjpqi+QKr#5
zb(EC_d<f0RGR-y}NF7%?&JxMHT%H0o6aw<jb8~n~E;%%`Lxh&4mR6~o8y%dA=do*w
zRF88ACv*KNWaX&t-R+e@^1$Aem5v+7AUkM-SnixdBf%Ez_`W%tau)i~AZ6&p!opng
zQ5gn at Z7g#_17#nflU)6dVen{kF|Sa$9mwY?!^_Irm#RWFG%Rr<E$xQRg8^u?nguUW
zLI1?jRQ!hxz@~bJ&1 at 6_Xh{CIs3ZTIF-=<SfB(erV=adNc>M2=$DE%}INu&}KHcL~
zKj8eT;Cy|^`SytOrJTdB;C#N%`FM}>{W0gmT at H`;6dZ}by0fzpSvd8_otf~bf%xBS
z0iB=|@xNW=NIw`1eSJLqw}1csHvQ*K@>7nopJxN%xG at S<;jHW`R%jR=|LdYSpq*md
zwrzV-&O+cVNrnoC%$N3VWo}8)D7R2oF02Jwk}-|c-WEv2Xp;KFa#_<jc(5yG>(=Nt
zNZ%h~zyREjbIK`D)&z3URim#53FLz`tPh?~ka$e3)-E~Buto92C8t&B9 at wez%5RgE
zPftXn`(HpQnuP!0|MLuMto5&9{of2Wdy(M(CXf=KmH(qT(!xiJ;Xj`L`}AonE-nsI
zfD^8AKyT>I<S`1X;E$C2--$x=0AYVSZx|{^#qDOEzHzpRVEs4AAO%u=ypi1t3<3DY
zc81(s@*1CLIk3m!>+kn?MDGD?Oj77h>mCpM+GY%FFv-f`pd{aWW1=@K*g!(at7QP!
zel$hObtjO<6_{Nxv{sNk&jw3zuNAjLO{i0!^f-*niT at 4Aiki{PN0abBFv53gqc}g&
z*oOE&3z)q){+n8~?*Gxu1O1!gq~O0iyeg0T|8I at _tP2-S^8e%ZKk(ZVHu(?P^R_}s
z68Zo73h_M#7^fHH at WtJK1u<Em1oOz*@LTBR;{)qu;<O->FNy)S?FB at DTSNixx_UV_
zz4}fhGAsT|aTE2drH>}zzn8o3)X<2=3IEW6hVb9aybk|onYPCNwDi#9<x9c;=CS|b
z{2%ZiTmVEA0I~8PD&=I13xq#X_<zlsAe{emFT{``O9m+U1qE`s9^72;s)dqVU0u<>
zxi*I~axuk at NOVuy;I<(tNlQzM)3qnuu%Xg9Z5SLbnP-^pkgmk$@z958V at M)%sMrbJ
zV<D0pu7@)hWo4i>1}Cb~?&uwcP*t9|zSxgI^j{#Pqh_?w(KP(`arcXW0H8+701e_l
zAiFsKXPH^F;(rT`xOlNGhW~i}e^BW`vERVqfmTll|Jw)ab$}Ms&Hq1LC<_Sk|1Tqt
z!}ER+xQ{aU<0za8HaQO2a0q9E28ioqB|`@%JQG*ELRXL>V$!gsHirPA?POSJM=yp!
zBBb!cw+!<{F7;yyN!D<EZYP)q1snUESw{(7yJn9e0?WS})x`&1aMe`&|0^2+G=%?k
z^Z%Qfuv+zhspHk$H-Cfw&6NMYp7_7k{Qu28luatHN%$Y`9v<Nt5!qM^U_<zC2Alm!
z at PG4G{BP25{^gH;ga3a&|3B{k+u(<>{4hW8%tP`o9tJspfg%uXG-ca7hcl`EzZC*m
zfbjoesiig;52f(HtRay%6>AS(yYtvuKQF%+eYl;3LG+&;aC?vOTmv>T-tUTuUO?Ig
zsrfv}hK7c8Bp3ve_F-rbz$68GS9=s}7bBmMm1PUkK|JZDQ-%V)Eu{NJI|n$Cl(n{k
z7ZK(D6?)zGZj;6QD_rNHmjBCSgeKv?mwRM*SWsYNw*YMj|1C`G;J-!h*8Cp?p0x09
zi{bwO6#oOEz7Xe&Vt#kBA*2_Ad?Ab%f_aIUUx at I9fM1B}g$Q4W2!=>rJcbtq^Ac9W
zyhRiBp#K`b3**6hmd$+$FB}!n3%U)87r;`fG7C~b&8Mo;)z#EvmLPqAJw)yRO6Jck
zT#)qTONuReZ&Wc4yC#EDj8zyeV?qWosyb%iujVH+8jl5-?CIxGuI at p>ue|6Fy*zz<
z+R-uLrKVp6ovz7o($$5s7`les3wjKO(oQ>|KV2Ezo(!G}ey-0 at T0>J{>#KsB;l!HG
za&ZsU!GuX9`l-yI2TpS;U4q8=KSWoWivPiZ(;}N|{~xou>;KJK at gGf!mOoky|8e~v
z+7Bp=n7=Udr}2!@7vXMQ{eQNE{vRWz|L2P9|6o^SDA5cdr!H*$=i%q)<wa|YUyX`J
zTlwM6J+x1_K<Q`VJBZuKDB4kdjNtAu#NQ{>ZuVEulj5g3slN;Y_kRcvQPuy6qiOgL
z`TzdH1|SXbfAhNh-xRh4Z}tEG0~4af at V^V<|B&PlOn?yc2PptEGc%Ktk|6URWc!1h
ze}p^Wv|i__&`U*e4v!5RNqP^rw+i(DJidpUm&Yle7B&r;>D&FGsAs+A60Iw6Tm7Po
zIV8=8)YU)@TrXeDp{;%P2-Jdj5^NNd>@*kdnyaSMl#n=o!9Na30~8n8cI{l+AXnlS
zwki|y1F=cnT}Q-Ewx>gyV5JETJZ&e%W0sI~l*1v1_Sb?>oD at 68$hyF0B1+HCz at h|{
z*PDWsS;_Z$_t5<c8mIqJy3r*34|gXrfP at D7qpmk}G=%?Vrghf;v0C;2hM?L!&sz-t
zl at R_z8-eo!|A*tiyFKUO4^@Eb7~5daN4TCP<oiGnIKn*u<;C{^Eb#Y<t74l`kaJI~
z%bY|MhD&8Q#53Vev<zE2&6EZTy&N;=i-VHT&4=s&=ODHxHv?_tqm5jEBOo4M>2j@?
z?=q9LK<Pyi6}9ev6n#<C|JKnY{D<}be`N!J2Jydc{(rO9{2za7SR4Iui{U?>|DVg{
zg8z>X9zYb^%L7_Kg!gv+eiVhu|CRjz$Pc(oDc#V4C&>T50d4+u;IHNX=QTC||C0UG
zs*>WW&j_ynDpJuT{D;in?hyfv^!_&(|6^iOSN?DH|1}ze|K5wg!GBXc{?BXZzF;W6
zN%4OnxczUl96!T||1goC)|vl&E59U|Uoeq>){$Q}pTDOw|KSS$K_mXre*B|-`7gHe
zx2y3>=kvF<<!@8t=TGF9gzyU{@wtxtWBvGL9RBvU{Id at HD<S+V!Tjf2_ at x~FW_kXx
zzWnkP{1;pJTnGLJZ0y+yZ!nA$AXFP3KVH4o*VFSM#Y+?R^??w>axXI3*x0x`bKpuv
zFa}b)KA~D#T6VR3VoBvVp{;!Ee0I3)bhBZ{jj at j#gY1QIg9epx*jn*i2Na>`zg}&%
zv!B0zJBlfX3hF~u)sheIs|>2Ds^UK^`B3#9Eo9c~ttV#^Mj<77p-l`%_>CAb!q1O!
zQE6KeEJLz!9+KEujw&OwpzDITFWu0cEhH+VD+)r2Rp<aA3P`iarT;ISfY2W1zRPcB
zM|Cs>|5a4+ at 8Q({($`I*{~-VUl?`ATlK)tB_J4u=Pp$c%|B-1Vh5r9D`JY<%fB8qo
zx1ma!g#V#aJ>7#s{6kC|CjvHr|B&mkPW-32d29aHhK8<Lo=d_1Wl(TuT>c|h-gpQX
zO_Kk(Nd9}0JoR?wIvR~SK48~`$!Rx_ZGRVS at nfp8NASLpqefrOJM$%?<C}Q9Ki#Li
zTH$={OlB8d-A}W6jPu)GzI~Q&czV?QZTI%ZKU?Q+)yKlcV|`HQ0>?2kwY4=J-Iluf
z at A3#-I>viT!A0JbnVFm=N5ki5dk4;(5t|Vdv3lC9jR&&MA3vF&lUvZMSI?dM@)oZ;
zy>@d>^7eBBY}m77Hl%DnaL2F9cE9mn!CMnIoax)oE@{)=B?+7NrXNaJz5CY2aM-gN
zjxBvZli&|q+&m3x>|Z~y+}W9S7$&n at Ae?4&Mj<O&q47NpCQk```SR7PS1&fe&*aI0
zJ+Iz30W;P;lO^Lf(q<JJ4AV6zoUE&@t2 at lVpzzy?@jk}~FI&EL90ak(6`9=LNGmkZ
z)#inTX?IXd_Os>j!gxGw-C>1KH~LsE%1>B<-aF6f=AyJ_(6}dY9OcB(&c3S>+j)7?
zNLGHDs@?icU8UpgpTE#CNn`j7Fpe$sR*(F&X52VSHfPX~1*;d2UKLAut`;vRyJ(5=
zynXGDm&jCBp3m&zbJY7h9cAZNI;tODusCgT3 at LkKm$nB_q-~6+%evUb4LXnI8JPV{
zkLvqev$Ra!d)m?r9nE}XeLwN%^>J~Qc9B#zXSAc^BKd+f%tuZSsY{1o6VGj1ykpB9
zW%EOMuS=*I at oe)fZv_ylH+mmhV-*)?XO@)Y<KvT*WVxK0l*Ab_*u at R<0H@~Y`ovVN
zW}a}o8x<AMJ<Bs&Ln|g~T$VB$OO<c0f6-=@QLlq*x~z^fSgmx>;E%Se*DPG7)a#%@
zuhq-;CaODQirc!4NYQ!z4weTv4viUS2WEvLlUcglIh0{XUTQN|wS8_NlQPg{%!Y^^
zmTPt-QD<m4yskV?U%Z;sFWRGz%AYTCE^`+QQfF{VTns4T%1bxOFxfjeq+G>_73uMP
zO1hllTCR51z)rN$8Xo%iYl-(z`g5(Qh-W5h6Vc8mvkEvm6o>8%ZjWvxUfHly4hvr<
z(^cgsxoKJ-^Zs&WDop_+IcGqIyv_L|4|#)8v&dv4J3lnOP%d=XkResWrpOgk4U5q$
zidlTk$u?&7SXVi%;TgJPwEOkLWJ*=ng}>w6TWIvt)YNNfx7n~d`SR^TTOM~u>UM)(
zy?XW7v!k%*e#W-qi~EeZ=M~jguJ`pbS at 4JAyr@GTxp~3)M#}9TlW7Xp)_vP7&X$iI
zI&a8$@5AjVdwtk#%%QB26K`)*&~@&UoTU(E%bm=&vr*G>_FL6qq1x3|9;$9_XE<P^
zmHJ)`&CJe at xw_~WQ(yBqW9IFIHcuGS#wopzKFqYWrEk+Q>Iaj~-uag1TC>sX*ZGjh
zPRpsfoXF at ty_inp#;Na^nPa0;IKrz$pYHvbbcZLW(8DI!I$)z0mY1rvM(+Ymy&Y9!
zxW}{b*qEg{*AU)xd*D`hX_!JLcLF7hp4g2Vv2I8Dp*8zA>l92dp6wbHuz~!sujTMq
zTM}7|VbY}_FHiZf%Bop$snLZh&boe!UTA>=<|-FZhHc)CO;b@~_AD4Se0clVa8^k`
zaQ|b6xusZ{u3VOrlaji<SK<(_1;<E9hQ}()Ic;2fz4M%=1peia34t9uUK~FBQsJ;+
z2KxF#h82=^bd7v>${z?Sdwu-8&C}5EfjsgvhR0Qp3fiAMY(%&6M~OKJn>%W&GxBW>
zW&Q2?Co+2D$a27M_vs^tGuJLuFBy9E)O%<9bvG0JIt at 4<GGW=W^a&+#N}o*QFVlL2
z$>e;Vwm4ePp6+G6q927qG20itN-1r~Bb({aAd|$>g?3N;>;n#H$nMq+c1mQjI~Z^=
zuWWBhcLR%nOT*~5m(gYKC=WNiyX<)aM9Hb?oa3Y=d90%hXL>qa4;{$rqf+44-%0gc
zafr%r*QkuU#d7<*u#2>pS%4F5<r^*68Fw__7>DY}DCnfA^>@mM-jQnFgVHg!U#>~t
z6t(EJi&iLZzYjh+HJ#Y;J>KgLo0RfyS^5xjO-e@<Jxh|wHnTq}x$g>Mx1)St?{#9+
zBI8EwlL_8&Lc7C&f&?2g1Ew~G&i1ihs5)wRR_aaOoFT#9-h<mXI8k#p?bSjJ&eG9a
zc6Sxs?$Wfr$DFl0-#-G#zw)(K+|cK*=NqrFXfw*54f)03j>U|^a(hRu@;UY{uapPs
z;P--)s at -0fd_TCX^v>zhAF(fC0#LADPlC@(c%g`56#vb-ZIk3b$p7aX<m=r`>wjQ*
zwwYx7ubEk^{D)><iyu<tzvfy0w++dE9=_}2RvZnPn?A{B{UPq{Q)h3SFT5WYpK(1*
z<MzvH&g3aaIRiaL4=I1~ImUm|{TH8)+<0^OarNfih5TKt`3n!uUY3<t{yAcPdTh!i
z{&v&Lk3UcHPl%kKK0W^M&SPZ at r}*9q(|iS at SgKi4)~%!0-&VZ+mXvvGe%!&GCrUr^
z`MDvTSFb-2zhwXZ8SL1U!s~o~*~>2gQ6eiL5rD91?b}$mWzl2_4 at +G!0<A$lBarKu
z`1&P}$uVRHw0;Q|HB)mvJiH*-h)HsdqN#R4-b<Uq8I!Z$WiywM52M%uZfR+0+-Aoc
zZ1)j&OV5KO!6q-f&|T?NvhxxH9*RYb+3V!5s(#JIn~X#Tmj%k(7jm-FsVHRu!yqnl
zr*G1RkDOtSP+_|5;@Hb{B at POIR7-RzH(f|>I~rv;2%U0~GA73bJ|7~pB2(TLMMup*
zyDSlDNtX37d_rya>Hoos#}-Ga|EUU^NdNr;!@`>{|GT+l{s%J?xYZi}^$*OX-_ZYN
zTK`3KV5k4_%Wx*1|J_3v_hE-(wmG(>Kp=A&S{{#-mZ8|}RL_P^;!?q3!^C%S{}aV}
z=z!?|&>6fm>}o|k+wm=IF%~mmI%-3!bAlL&y1z}tf1eQV at M(?Q{<Y!!4|VfDnzh>h
z>W)=Q-1!au|NZq}DoFk#@;^YkK}dsN#@j69E0hrmTiEv_%A?^%w2&4M>o;_hQn2%|
zt9v}g(&C^E-}Sk2GzN*50vVuE<v0;2g3E>C&<^sh+ED3B#=#o{ku8mD&y6(61PNy$
zh*&0^B0Dv3qo!e6DECu5DbF<p-Ok|pb^+li?vYjEaFiGF-glJ0alQ`u^5g6M5}+~v
zzlcSX at ITz$Gu*pzwtocB2JHV#l<Y-({ikVfa0#^Xe+0Z1KBVBkB2-D_f4X*}duO<4
zlKr2^|0KkGBlB=0C`ls!(?B8K+hT}sdr_$LxFWgkpvLh0e6VnYwLHP!Tq=H9NSy|E
zqg6?O^JNf{LBVvFVXMb#nMWcxwX%5xg}-z(5&y${gF-xg8c6~g#D7TkB98x%|E1Oc
z|Ch$GsV_^x|K_p(&=CK}@WtLUr~Nnp?Gu;({e`%X%m0w#iOa>#Gm))Bk&D()cEL2j
zuG^Iq4@|#{A}$6D!n(o&j5IR4lVD|+5({2DrwR7 at P+7FB3oIwh9};UcMlQ#aZ_)Nf
z{~vo_0uR;t|9 at s|W2x**o3W&_)Yy~CSfeOuq171sE)-qL*cGxRR74?bS(2sH5E7!I
zl8{s=l|m6R|K}OG-+R;ja$WB4`@h$7U)P+O=A1L<Ip_U(KI{7fCumMSOn6MDg at 2+U
z)c>c5{>j&W8JP+GUrA6BGPnLuxLY&-!K~q*s{e!h?=j6ExLm<+r)f>L1}_uz{}bb~
zz{p4iFg5`DpIllNL>oP>*<;ZxL3lFgObcxSAt6l`$l$7rqR+x=0=>V at 42OqqRBfb`
z0lG)WU;Xlc4^+Pd!v&KmAxAtiz#PiZ3#<kdT|9|##XP_*>%&SgLNkM%!VzWz1WQJ&
z_0cU77g<H&O#d6i#q{uR@~0X=O}hU7jQ at SE{u4fevp#-;e<pC!zuy1#JO673z&|Md
z&{xTc0EeCH|1|42^iQ5(TKIP|G&Zs`Hno|V{6C!ZME+OVx&9A-@<vYc>p#IiwEvl@
z`G0Ya{?K1HE&HFk{&!GYI)FpK)gM9LEV@(yUM8&ny8l`Ky%27o&l3qoL_b6XZjmHC
z7lT|QGvFHty@#M`w85fIl=ebG=dt1|+rbK+u at p-ReF`>gHURe?_9-(f0nr*oEj@?k
zeFsnaZ&=0Qbxv<g3;(eG%fi&i#ME(0Hozq7zohKM{;%>tB+Tjm)4QdAYOkN*AKL%x
zsQ5Qfty&7+Obh=b(Ebk$ycrc$6&_yh?0m`AHa;@4(%bu*t!;vpRqVlo7v0>h`1=<*
zIbRA1DRp&CcX3U(wu<#2<%XOr4GAd;4=Z;#m>3Xn-QWMZkI%KpQ<d&+m%V+i9dx+p
z<DKu|aM8mf$JHf0JiN at qBbNlX(}DtTo(w68jJy*NP~_%*<<zM=BvMXPbQOt|Yh at MZ
z?tVGIzlh|K>*jXZ-R;WBkWzQ|D=seS*4D9+r|vj7B%VB3aw at X&)TzqApj!?HFZu^u
zcXqnu?UV29lx$@kXJrk3Th76Qi7qZ_0shycqpG~U^G}{EwY7`)@yWNgigR^Mv$Ktl
zimIlvSjAL_CxSj#sH*R>4Kv1JQCXRC8$%x#<ca5o!3e9}n{#r~a+ at r)(sFZh_5eeK
zCPI*dHXs0Z904+|EZ&S*UM*H8CY~trPQpa6h8Yl0VB?v}@dUWl+)lr+ePQ!bB7Ji^
zvH1%T?9jHNTkOTM>WT`Hk_r(Ci4suv&Qj%7Rn)u5&#$Se_wuG9FE4o9yGeEBNtTKB
zHa2C;OszyA3znG~ljz6?_mPniccxKyQFrh)^6i&o7W#GTwqTh+eC3t6!fO*Xbp-_l
z(|64zNMn^XOq-RPm8B}c46G_ihiIq4LJa8h)panM8PlZzM7ApK|F4?1|5AR3LlRSI
z%B1BEABF(?r>rW|lK<5FKcc;n<J3IBlgNLZjMN1Fe|cH?Ir$Htv)LYhApd75{yRqg
z1+HPt3$({T`4)IHLH~0d*Z-*TU$PH9jPV>t%?GUhd@<jnyEsVeO~WD0L;!ijut*j(
z?E%fTrM)Gg4+xL0A;<~Aii&tq*!YiDj%GJ_qg#Wp1BKBi%a at G^B$SZ>kea-!K$0=N
za}NzIFCxZ--u>+LH99!U{}e>SYnl3(CjKq$%<QM6`@vr_8UBA_|3ONCIsI?yw{hCv
z{0aVN#{Q%7|HQ;Vyo0v9;BRoR&KdCXBmd8iaqOF!`5=G-2-tpRCSHgJ+(M-J$iVnR
z=koC?FV+B7AU9y}!JTCjCu2ZE&Vv|0)>UZ(vtv<!`|G#%pR7Jo$7O~$h12ry#5KI~
zsf=mj-`3J@%Jkop;$KQm{>S*QwA5Vw=TvUrU;fTd at XrVi`q%q^QRBaW#uu#onOh8Z
zgJa5%Bb@|RZz6%<gU|y=XMy#-1T5)T<_mr(EQu8uF+K#4;pGKP5==b;n(<(`5s8fF
z;Tz$#&Vd=u!VHdS;{ULvsmqiDz>}^2^3oIXKcuDS;=eO^m;d-sKf(XZ<bNE3{vXH7
z-3~s5s!^{T+|qVB7afXiDrx)t`0dxy7hf9Q41OLNz5R0F)7Q~a3Z?SZU~R`h%ln~`
zQA!cH@%D=^-zXGv+vf*egSVc4?jIh#`Fvpb8>P7QbHkgj)vpF#eH!lWAF>U9U}&9W
zX`VP1UmmkE3ifYp1{b`1Jj)b(I>|u1cSSt~yIlV+p>(PJ$KsPK;t{$NSZHf7R;rRh
z1%+V24IZ6V#Ts8pzK{%jD|pnd0)&Gja3Lfj+_9qszirz#Ezo_8gl4)SnkLFxmYPWY
zmIhl2(@rkQWuR;p&4?-8St*(dWSlN(H`8UWy>JISdY=Q=g-uq#bm7!JMM`JY*Q0hh
z4Pj!@6ocQ@#BU+(_dCBe+B;ZBZ|oGCD)C^??*%-Z;aKfa|I4r8t^N~Ia+>&eGCDj}
z_V3B{e>vO){{K1sAKu5mVayu-)gk`B^nPh=YQ1{x-n}aDxAk0XhSQ;pQ<3-dbg$m4
zeRMVFp3|Z7j*gCuw2bnKj`E7~t2tK#gNrFc6o6;g1c0hOgc|tb!A$V{F`khQe8&Os
zm2tjcRw{n6BI1IT3+TKAi9n~I<z(gJ^g=6dW0M310|w)b0_h$k9IS_fZG%g7fh~bW
zZBt&sN(XaD3=ouB8PH6`v86S&<znQOf at n@^_Q`q7S>z)4XHa;D)?Vxtq{2b~^1%y}
z<(P|+{7B6-SJu{6Q&U4&NG$MNpd1BKjst=(UW7M at eekT!-Ffi7{t1l2ug}()CjRYA
zT}+5mbpTAZ{>y>I{)hZesk#2&vvtRRf81HaKehkIgE-{g8Km|sGIR&IAB%i0MLyj`
zo+cyR1<1=Rq$>}3bOCA0L<Y-|=2WC623F>Rp9fcKYQT8GBbgK6{iOXr#%piK`hQ?c
zR||@lt`<ipmH?RYs^Qns8?lMRuYnwUy2y%Bp_=)x1Hra;Kvov+EH0OnMIs^4iAXZT
zIiSkd at D9QP5!#1>rD8QqoE+ at 5*&rc3Mcrp>^!8{&O at swzr>1zRt3~hCjpi2xnP^y-
z0E{&H-YXt7S{b(aI4giY#m?;m&!>izc|v&-j_?M67Zrq<4)R%*>99Fiup>)XD+B0c
zY?sg0%cFW$58j!-TP#cy{|+W*AO&=a0$?)y|D^w~%$)rXpN82Vvxa|a|BqkmzW|&8
zsKMoI(^gy$UMBYc2pabeQ0wQB|I~mn|JNEYvF|lt0HVLC0Rxmlnj}8PEXc>H%OK6n
zEX|S&w$+gNF}uMx6TJAe;d@;Yqc9DZi5Un8gc|Cy{3kB(#FEA%$e)P-=l}0UBs}Ne
zH>QbyQ2$}%Y-w*dB_F_~_ at A);%Sg)2 at qhd+55cVApX&bym>*lx!L=k+W<bUFNB_Uq
zIPNv5y}OKYl3pljJW>J(z7oJPT!y at q2JN9x9N;t9tpg>3C4$mW`e?mqpth^9BQ!8j
zK)Opt;J^2mf){}u_&f-F?bX^~Q4h_eO9w=}CjOrHfS1vyK0y>L-!BwWc7tPoZviY)
zjFvDyXHSF^{?A4`yu#m)Y2hDKe;V35PBr~&QvbgsX!i4i{tr!px%l7jZ`G{4`w9LT
zz=;@WX~17O_f2i!g}Ri}qG=l*HjE67G(2v$v9f7++ at RIO!UO(w*%*M02?%QA3p^b?
zoAO13o^3l;pex0KOz2_~_VM+iLGVVjR-1U-48RWmI*h?<{$Cx_!aueC+j5H9|K$EZ
zY55=dU!>>w|No{3<|p`{8UH`E{sVOK1lIwy0Q!{1Q()`YCV$_HK7G)<Kpht(BO<&c
zP9f++Cu?Kr8G)s&NkXNeVVM^%Py&4JqhS%3iE0UaV+8zZ%6Vjrhz4-HS$krsuZ%dn
z4kX;?R8 at xGVI`2(ECK#K8&E^~J=cf)5M}>bYi$~w*nit953l*>V_Ntp8WJ7tU7V&G
z0hm<(mz?1LmzmT5e}2Da`qNp%KehhjSAX6Z*<M568c4 at 9A^*>Q+y)rS|0 at kb!^+PU
zpn4Q3C6H at CMK@InB+$XY8fYH~dVkh{DpAn;la>kRg at RGJ-+S_Z-vAUAe~wc_ZGhBJ
zS}tgJt4kj>;AH;GMZxs&Z(?X_>)?E3iW<PA_ at 7w+B_ltV|2NZ6|LO5&4gXv){s&@v
zp#K-}0s<8Pbp9d%M>~RO at 7D<jFAV>Q=OGI>(?Bo=jLQLP{El4Vg>IzE0oePCKrRK5
zbO+R~UAwY?k*|C;s}x~g1Z%mYV|K at YOkrMLlCT)~08m1aKv<lNt`X1B&S1gU)W997
z0z_b3pZIlymEZ^6^bJlp|C}rkWv3|`K!KE_g_^VrUhR6534YT*TtG|<|4xPuMvl&w
zMmEl-u2UcZo)rHR^ncJ1VlMw5K76x2eu94~a8eFx{nu-@%g`8 at R{a;%|7Y%eWz6jl
zj^b75l>lCTpnysphrA#kz#)wvMra{f7s7N8FW-H{Zz%~8R0Wy)FPwRGCFc7Bgr4Bm
z;H>7&-h`8ca6NIBH{04s?cfr?3}>aR`GQD;0)9ZOzi7BQ-?nI$N~8HO%BEZvaG6dO
z)QMJR0TrV1BRF6f8xe%~HEzI at o_tjmuq+7=_6&n6M&*5=a1>m{Nwz;Mp#{4qc5Z at 1
zQ|uq;*+$W$Yrr-9gJi<A at J}=}wzsu4wVML=;cQKUe at UF|g!sRl)Exf<oVr;bKf(XZ
z*#GHp{U06n93Ax>9rPTfc#RHuQhLFLH|4!2rQdV(i|6PE&*EENqm=%E!R%2=;3(w`
zg%UT~?K#@#IXVEoNgf>~jZ(r!DcO{d;O*Pde$Pj1mW)y&tE=;3IT%KJz=x at n9#3a_
zx=~6}Z*S-*<wQs4kx at zjh0+?mOk|W&myB0_^u&L3#M8@*K<Ngjv(na9&dNIOO at l7>
z{7wWuHpeojpTY73h5u+JKyv-bfvn9i#e;*4=Obj{VN8QybP{+nAQ!lm6;mmJU<Xo-
zeq+x7(+Joz9o)d4;kf_U2WAUslFQ1}wlp=<0-_s`gG3feHxVb_$*2}KC4zkkC at t0X
zrjl~oxVP-$U<UaH%oe-{(^I6SFiw?c4Z!XO_(1(Tq~I`LRj-yZK$1&F3o=Pr1+kpV
z*ykkz&%@2ysc&jVVAnHwBA*Q$E1{cpLP>N$aK^jwW66lxqE)L^=SgzFiTRhCM{o-M
z(PLWj-^tL%$j*F<*59P^A15dC6aVjA{m0+(+|8Q&-vQ-6C0&D(x0P~z=SYkU$me_-
zq4?<ZhCRkk*L`J-Y+Y(Y74{IF+5$!Q8atD{R&<6+v^U%s7^YB?@cM*<UlP^<yAh;-
z!ZgqrXhDum2v-cg8f-0|L{K9<Iqgrt_p-h#n4x3w<%Gm|{GNp{ds8o57rP9Qh~Q8M
zaR`*Uy7+yY7HdH<h<w!}u%++;*^QMbuc}x^*C0$M3DidtI!IeP=%JqOO&MT#=3yjp
z0h+f5A5y<ZuB)l>cHjkjYX)v|_^1_70$GQZ_o%4s&_xRXjS`Du+$IbwUqZQQPG|;X
zlWBo$@6tP9ci3o40X*0DX!Md3ycRk7qBihqXJ7hG3;#sW{?p!JO1U5KDkjnYa559|
zFAYjU=HkC_@@9F=8ve)qzhlmyv8#xqD8k~>3I5+-bHAwmU&I*ajWE*yBMl^h at F|mG
zJb_WhOK=asz|SP{4N at xVykidHGTIl?-jMrG6RGqI at Prv$S%@y18m9#;$jBq1G{vBE
zm=&$f3bVAWP<!bhi6GS>oB-Pg!2IuqBwYk1cYlu)`G%oiU$fuX2!HbI<8N$Y{_p-y
z3;$sKw>LMpH#3`>3NR`DaTC^mIq5n6pTFgym^J)U<G*mxj)B*4VdJ}X;N=JBkMp?m
zXN()CEC3x%_4kqyGbs`q2Y at hb+e27?<&{EG!3Huyb_d?JJ>WaL>8Rx!FuV)7AXK;!
zz6#*0S%JnvN?@B6Xq*&q4^b;Sa5TS<1BYdzIQGVILSmzT0lwi?{<kqL{6qd1BS&M4
zslk7;^<PqQV*Mx37U$Og|90PI>fdG!|J44!5#|aHC=^i1`ErDE<XAzQ{Q}B)nbAaf
zQec69Ov%NjFJZ~|ZBpMpqEP%wKGqD6q*p$TyxfrefkG<oIdiS?T+7Hi3dPwsr3o~1
z>;HDWcf`XzHKBbp_wBHuj^d at v3VY}HW6{?u21gIM1SKXGzwYiUXzM=alV5AgmDunx
z^8S~Lt-}E!rFrdx<sbS&D?WBsB~*VI^oqJhNs#v_`0${+FYMyo0Se{xlcDUomwWby
zSB+3g-+rK^E7pxdbAzcm;T?FH!T!I<lkYMw%O9=2McIxOSRgFAH*chdrUZ#xDqaub
zS9EI8(Y{9puO^kfrzXb;q^H;2S(a+DoUj0}UZ9lumKyEWz}|leRF(iz0NsM9C99>S
zuOzU+&{u)FP9pEJnwV(Y2I{`0Ny{vk3sjT|kL}B4Ct$6pctCO|og4HUH7;BcnEv!r
z-(GYJwfya{+&l$0vH8+VLWO~%MH<Xtd5Gh01T<bW(RJv~XK>@JB-3+X3Gwpke*FS{
zTdS7`*W|+ at mJoGu&N!W9W%ywJ^VKGJmH&t_P5FPw35b7FW9uoc0F&u|a)9jphx}i8
z`8oOjw>)37CjY7RzhnL%82+cafW~|~z_9~7Kfv1qyg<Mm1e`*^H3Yms!1)8bK)~4p
zE*v;~fZIo!sypUixv>d+G==)#%im?|c>S-4ps<%P2qv=NZ?fiqx;x1L#!n7T7y;;c
zSwXI>sljvx!ZIM{MKm;u=T-wJ4GVGPoVd8V!%gVO36NxTV#F|)4uVi&8K@?%DHCPk
zMtv#=dkbSl=(&+Tuo<AN&05C(%C{GO+ at -f|8|z+9SQN-YWM$(uWC5bG3 at eBmJD##S
z0VF4uAuep3upHQZ2j}8Wdh##uM*m-l%xU7^Y3kL#lly<9C&d4x<fZ50fAF!G_3;z@
zGl7%-b^iD9`X6wxu`EDAi*0=1&5!jzdgC^r7hwM~gZ1(_(3Z_J3`NW92^u`1r3Kgl
zWXKp=RuKS691UZZAjtbwA;JnD=}<FT8tQjMfFCE6ksdDs)BA)LAyKm1A{N2P`@g~!
zJoo<(V_NukGITUGvay+|{6A@#3H(2 at fD&ZR|NA#QKtI9%%<%t>`+ul~{0Og`3(WcZ
z!T+;;9Q#Bf2 at w$i;3p6XfEEmHA(DJpV1;;U;%EZEDvP>6TLZkim_;f8=~9cJL%0Gm
zB>RYi44=vlXqto<!%mJo<;eb<)#b46U=I9~KS0yMKhY5Ke@#jEhreJF{U7vto`8Qz
znYsMG$#32aeB&qhpOO3 at lpT!!9!c+vtN!3o{HCm`^~SA7fd4D|QLj%({)y6Vf@#zN
zlPJ%!9-n|L3$Ghj$xS`I1J;Kw_4EyqO1kZjW+dPL*wa58RNC!T^8Q9sU#UHRMB25z
z=JEUT29t^!a~}1^)qE&#`x03Ce%~**p1vLY*gxF#b|A9iy-Pq|>zgl!JTgXr at 5m#=
zv-r)8re4B!&4{QX$&ijq_dniwGn#t8hmtJqb*H!dPIJJC%;8arj&0txM;|&q4&{?n
z2SzCocitZ`KiNAlT2#{1PoYHB_Vx4*zU~>?8TTTwuDk8cm)J{Hk$2t)-R<=<Kj2;7
z(@g=pbbFL^Qxat2>%aI}n^G=H)xG?Z*VIq4vIeAPZb3P9F9#YNxjcNXkV_lA<E!%<
zdNN({9)4FyWj#+ExliADpH%QP?NMI?u$G$oPFMGM6~DP!+Zunr*T%cV^VZwwoG00h
z{n6P^0xNpF<EuUnQvmlFU_b-(XJf(fa|+wp!6Wg at B$4qynbh<rzm9Y%b%_Apdxr0_
zJtf0rg}2wkO;{LVizl5(iH~Pi^02X71p{+<G#4vjm*~YEyBVomYPct*kFy)@k#pFA
zs~;`C?%eUXq@<+RksxP at a|KQB=NQ?+MxorKDlw{a>-M{}b8%_=+YTI{?%jF<vt_{}
z-CM4!!s2^D$|jn5P1#5Fm20?|suiR3p`C}vS2vy8|5(&;eeLt>H^4dY=w%{|U(W0+
zEw@^HbL=#s^Mk(JC2$z^w^wc!y#gxA;_;e}1((lB8lN!W=5RT(3}~S{nl$M*XYolj
zt$d5~gvMlwO5F-^iRHPP>+qVDSK*OK=+~9;>{v45RJKi~eclimV)cJe8J(W|H!(b9
zXL<0 at 6bry6k^eXu=?VO=a-b#Poc;%&nOPpQCI1m#DE~<$5~%+e>jDJoKYqOy-B7KK
z;LSu9m|qJ-sVp$$DlfDFfI9Hij8%Xz{VsD7q!xh8N%0J7B^bfXj7X&CpuXGY3B5kQ
zF9IuI8q4xgqhnU1H3220Mg=f1xDOoiI}KB%7>ya*fem!<SN;zo_1DRp(T(Zh-w<>F
zvb1%ucbrlN_~iKi(f=zWDL<$G&FFppql3*F{(sH?8E1Y1zd*mvIs&{*$p1MuZU<8H
zf5 at dQ^x8qJWZ;g)qv+}Bv3>!#Y+&{6L&QtVU@<68g0Nq^hFSs2Ngxu at MmT~QNCXH)
zcvUzhbHO)%Wpw<#2>3PaCv+bZJ*XcY&$!zwg}&U;Fqj4B=wAbTc(Gti6aOIoV`MV5
z?k|(ue>h3$ALBnVGIQ~tu^TkYe`gK<o^bsK{Er~>7X*JmAPA)T0t!fw>I*0!0ox;p
z_5cb<5DNl<AixU=qCkKtax5tr at Ir!!5Qq)|rbrMn0{Oy#FA^jL10G4h7YP!IL6`_6
z2!q%Wpp^vNk$^#xnkftug~4=<@kov_ND8Lzvj!iD{W+5e5xRTnKG^N)ce!+*nxBM-
zJj#>FYmimG3R-t5(*jya9f_6kYhc8lB)I9!1^i9$If`ya!wyis_*9k)?=AuTSiO%L
z8u)xjM0OTD$W01R-W<I3fUeHw&D$b)RwO3 at mU}#kPeepVV!qBQokO8UK$&R}yjxRq
zFD+?hCLK5AuaMZXR6_&1IfDNcw*)-oeZ9x5VUKj_p3Tdl1CFq(GBT&iW#R?#K<B}t
z=9yBHjPL8wov=t at x;>U;EXRFN0aaiR9P6l-Vdy2hS-5OoNSPrTT;#t_<iTs68{cPO
zn(`m$f2OW8r~myZ|7D~ACCHrp_cuJHvnK!ljQ;2Oqy9&u9rUY$M<5_ZA{rX;7?==F
zhj$;_xQZVP3W6LUV;Ufa at Ld6Hpelf8n9R7plY0M=3b>Bpw<_SiN_6IOr(Rh&<NqoZ
zaGLmcu$g-MpUM3HI4MB(@k9QPr0g92{|59U$WQRk2u?gh{eOV(80cgd-+4=bV=9cJ
z+y`WA6A30H1O)QYxny2Ypdk*n!gY5-<}T3of|eP4^b6Eh?3TiSK0^p1x;7=98_vkT
z3Z3wRXLn2w|0W;-+{V;+O5UHT*nboGKXG&QU$cATzaRZ4_ at 9yZA95Pnf2C!Ot<T>+
zdpl5a|8-N_`}~`aOYb}@y7l-<PIc#};r7=(Svl43K9AHic7y2MGjhV+>Xso2<#t|9
zN$!>2fo~xG_nAVet$+Qn`5mP`=0$!;amCZ_!oVxJcW&K&l9ifBc at Xpd^Kkpe;fF2n
z%E})<z7hWxbPdYOyI$7xw(!KQ(kC at fyD9h2jJctKFdFkgFS|~U2bVAP=ZwPdaWG__
zZgdaWd%VUUN2M|(Sdh>x&{G|M=@LUJfj|Ha3UMe6dOL-Kp$M=L^KeWK$8)l at Xkf9L
zF5b}aImvUg&qf`u{m;p)Fb-8TMBnUw;v7+XF&@^tq}?aJ*unnFl-i7BhcDAvsfcUz
z(lBI(6&2oT`c%On#&gp=aKa3gjoS@)SV$nRkd|FHblVeuG>s|{rc56<Gop5u!1^{#
z-y1hkDs;f(?K&Tri}#Bcuo92}ft4~9iOXKX$6!vR!ddutj%mq%CqrioQ`;#<|0b9J
z(lQhDKWRzaoc;HAJdv{{|4~>d|GhRN;RZCtzbp#cPLu7x0jdGR_aLcO3xF)`IEQOJ
z%|p4OSbvh;@rY1gv1Xdj-lhnNBnK4YO^I+ilx#6S-G-Iyv*La7+RQkbE9OXYIL*ZZ
zY05Ft0vBW;L-|(df@{v)v3C4VmeGAo!VR$_J~p8T{P*NXiUx(?JCgM^l}wV2kr)eZ
zdO~``Y1xfB0?o%(B^KfQ_oE6<ta?jk3O8L$iIf{mTh*SpVQ3H`5n1AVcp8!r8n1qQ
z=A!d!*}@G`h!-W6z^JC6A3>n?Dq7i{ypF<;D63VaDJ at XZs7*X-qkqDtIf3b#E1OB=
zvWUZs%J|rv!;A{Ycm|KH;5R)|<&ULYks%sfx$D0Gv3t?Kl_x1kYAhiZ++K?fZKuHt
zVOlHE_XTN+FNl-vD^+l=XWzB(fQ|GAvk$@`$SRnvZZYBt3}#lCq#<)`9c1F=RgaEV
z;}d`j3nyU*&N=ch2PQC(ruQY#%LU^0pR0Sms!?XcNg7Dfi$_WG(Ht<|!g^jgTmY5_
z8K^YxeD}H_(sN;htb4{&;P>=gx##Y7@#e*qA=!sGnI1t7|K-f<kL|R_J}=Xk*rb0R
zwz6xFkrleJ?%ZpM-Meiwf_U4(0%swS>kxlhP at m*;DqcL40k}B*CA$YdsnHj%AuR!U
zAG(*MbFy$MpkWt1a(I(Qkh0#>6A(CaiyEATNyjwhzrD55RI`64m;X5F3H9HSfD&}h
z|2OH~`|DqrE%}d}hw^{J`T0TR_M?<hxwEwS&yr$lNE<Km9k?QQ<;mIGFRrFNirkd6
zq~c|Pe!9fHj*`zqz28PhVrzXA&M_P>vz9%Be)#6jx6yCw<5-GYGuFm3+U0Kwt~jU|
z%d{(9JgWNWm*IZ=dDgt93tEYbwq6oCb at zyN693ncfyVAy(;OxB3p{ScdwRe2T&fSd
z_#o&_|4aF^bS)o1avdz}9IGs{Iqv|g(q*SBei8S)`><M~?7K|GNlHq3(O?;XBqO;S
zuR%@#?VE<(kX;y77GXB5W){lNW&;gM7_$~GWRhA0D%4f*Rb*YArbZ030op~+;89B@
zRn_H;g`f(bvWeGmC9ibVBCBe&4s1>&#5PY=Rdv_0W2&kOq2)j@?<k3<;bfDQ*<p at A
z()3CedTx>U&^Yc!OYo1^e1jvj$f2sh&k5>Ats}oW`#u#o2|B1p*MIhn7Kj5LQ<geN
zqBzER8n;`VW9w*NK76L;geRPZf5VuT{3n_inprwJIXf7cPsIqBEdNJZ_DA_IBP}&2
z|NoZ9?+ at hvJSzWdl<89FbDb9dE4BZ7ObqP*?)^a;R(_$WVitLwkJ|*^5yrj2RR0M{
z1!W1`9$CDEc9tMmBAH+`*@h35z^4XitSoy$3hwPC{~>v2hE8L}C&+QcO9>Lr&&e}5
z2|pdv!@r at 0sg1)-)qmiAQvW3hO2X&#zn|W*nf>r5_ at BZ0FYsGIW)AqvlPV(&Ugqk*
zX7=v=^`lJ-|4xQxhis-u{tkZPWb3~SX!iX3_^%93Zf^bm>o<1_NB9Z;rNC}~o&TL$
z|M at Hb`@{9yKY_#kfd32QI>1!P-_ at 9t*9dXHOsIktp at MaqLEI@)AeKyC8N3}bEnt^c
zV73cOU=%b7(DM3)Rq}#$Nhq**q##k4)Ce%cOnd;dLm1m?==c&UBtAl;01dn!NER8R
znSWSX7O<HCFpo)w#(^Ru7Aotz(s6-Za4P?aR?)QZPc#Jm-$4r46g7a!@Gl1%eEuH)
z(lT;$`5*9+oAvP%{Lf7M_s{o#2VQZIx(o7l$6Pev(#tLU-+-4%`@i4%E=O2d**Mu)
zIoa4)JrN)lkWaj{>d~Zj0(5ZW6_l4MAI2K;(yGBMTwUEzolw5YP6m__XxUC=CA6VW
z9K>M)@YHfXbszmut`+o;U<pFsAguzO=V6Q|DGLKhVX^`+j)91}52+VMYSC}G*i2{(
z)oCxFfdC?(W=5&U!w$3JSaD(6QUd5aMazY#W`SO{Ua72JsnA-1 at m=8Wp&l$AyrDs4
zp0Rc8N#Aq^-tE6x$V?0WPKKtAj`ogHGlYL>*$MUEGE#H-AMk0I_3;z@&y4>68~&Fu
z3W&JmW-o9#Kk~omkLv(tW<G!c24;qtnRp=@a0`**izY|2fofVCPzQuF1J$@$YcNPT
z2n&_b2cmzae|QT%c)A#{!pQLh5Qe^^1AKI%HAs?JMsf?B!M_<(vwqWN at C4JsKhY4>
z|Cj&@@Tm!aN!Ne5AN_yQa-b#joc%w8_xX<w^%MNh%=$lp|9_104HWHw5+G3311f(&
z2 at t6B0p&fQo(ER at L@0v#A5iB5DuqCK4>f7)JO4lU^-w#YUc{|S&(pxhRQdnO-{s2~
z|39fFEIj-)2tEs=*jBD&V*^e{B1y`~9lWBM0yYN(B1c#uxj$$Dz|P)|J+hM35Ht(m
zO<Xqk)Ic~<Su_zp77sTe5@{D9usSE6TbZ7IOBRZt1566+z4EFWakM0!HiZ`MroQZ}
zYl566jW39qEAP?MJ4I6!MXv{R0`^eO$Wxr&g*@<E<s`vyVlxhE6Gf-?2W&JzK7jZS
z5kEj}R{8im&-?UXDRp at 9GcU-dg?}eQ6H_PSsevE->dEjA$^L)P|0Sj7`hUP1KI`Kr
z_=oHNSpIi?kqAF{GcEr=b^Qm3{Z*NdJ=6{r+#g&3n&ZpA3e?!~L`dW$gof5ThY$@d
zmBm|k9*FG%a&PSCAXX7b3jSHjD at GfDNRpw(1P$6kOG86_=?)|!1o10`GdA-ufk*vE
zj%nf_^#3q6b(&%akjd~bJF)+(oZMXf|KIYw{RICrv;I^2zgARK_`m_Az<&h6(+xK`
z!L|LQ|7+#AFrYzc$gKgkGCgZZq;F&}7nM-eCWs|NJSYPTQbWPN#LF;;-YG?3UwC?r
zU0E^#w9HUyh|%cM=?2iHQFAc##DlQ=S at 7v3B9Im`-kxD$zLAU>Au*94*9^N0mm?*O
zQjdu-0O at I%6m%E;t`sILkSFw6S{d3kgb2?~;BygjRSnt)Pwg0FgMY7$kMQ(^)RRFA
za=apsALqi72%-kcO?XbAGmyXCV>+k^V~@w&XmdJF-A2J%_`fZTriuTlJO988Ooo4H
zpzQyC{g;xT)BoYKGy7xK at K0U;#}Zw~RDk}MWjnz2{AmB1jbonLpNpD|3Rpjc$u%rv
zTtBpGLD~+0s~Nl{pfuJH&4BX$E0M<^bba at v4FwDW-wPgaz@x{4uxOx}?N%*JhBNxV
zjmX)*=f6F}wD1q|e~6CuE>2TP{sAYO4F58q*!%bRmzI;7TmOH1n`Ui$*6>fQ{|4k=
zz>Ej at A1l0y7YhysS2BVB$9`M}eCPiOLXWlgB9oC)0vS^N{H9;3wzf84{i3q}uoGyR
za9$`_7WD^`z$gWJ+<_O~=Y`&XOlmC`w7b=%j~Z}R|K-A9diXaqwKKQ0n<D%t#s5$A
zf0?=df3pVp-yL|?@K5Fc1DgMs2>|<m{icWK!+B2 at f}er;P2x4u>Rr4Wd^Vm-P1p!~
zCzET@^zYtjW68CE<{5_)5z)XBh{hnIPk&f$7nWd*4%4RAOETj*v$BEjKodzmetcdE
zh{ci6HW at +M;^H>C5<vOqBp^)L*^;@+SAmhB3t9>u=hDm?d$aHY(C<M{u>j9tPrgbs
zV>(eIT9{0&OA3zR!aR+K4nH|>Pp*{tHY*erftpVWqS;eYfh3aL4+D=~A&rT&Vl)FS
zOj;CdB&-8Gr#R%$W7_<f`qsU0s{gkI%rx<DVrnyW6JWCSUsm=<{a;!}W-k8^K0LEN
zW)1(su>J$|?xn;?Q_K)N9-o{0v_ at JQdIW(ppXwJ33JL<(ck}qXQt-m^8(9Dp1`5Ld
zytWp6e(k$%&_=Zn$oG8F1t8kDf=sR;m!s)ynyKJ6Ht8feDipwfN%ReljipIkT-n(U
zEQNSv`SRt96d6Jh;wn3URz{o?n(H9)6;Ce at s<L-DC^wK`iL?rxq8c42%!nzOF9%pb
z$!P2bX=zQLK)^GPM`vi;oFkCu!xo|Oh?tN8N?LOs57^z4mQ>sBgQgz0 at D$Ap`NQB0
z<6e7GJtnHq<3Jp|f&a at AU|RSG{(s_>z5i3t|0nqWrDWyj{QvOLne{Pi`2WuT1S$Yv
z*lx at PAUbka3A~x0|9k&V|3}J#a0olp+fh`+N~$6pnvnSb&4N(}aNp?(%T!aCd{zOt
zk$CTx)zB(KCMX^fOs}C2Sb~9BH|&UH8%)GWM$<!MBF)Pa)h^Br68(tyL(7=~mlTSw
zEv*C`_B$bhts%O+-za?nobmr<z{1}*gJW9w2mL<}+DyF!V6yf9r~Kb@`M)!Gm;d-s
zvxfiQ<o}F`fIsN}bbK89W at c(=5aI_qe@&$iEpH51%T)n9 at n{wnZB`a258{zfGqh6)
zP{@4*KuRA$nl}_?>#ZVFqX41YSxW=%27x2^m`Knx?g8cO4h+Bthym+6P4jB}(n^r@
zOUp?@YsAa2!Zn{1!v-rOHPJN$AZTciS8k~03{%<jaI*e25 at 4G6H#V{{wKFktoRStW
zDgGzq|AUCY9RKehgLVf0W!CV&6zcz=YX+zQG&2K=KQIN%!0(3o0PF_|i~uC&J-rEd
zVfvlskL1*d*MU#{#`XSJCTjFlv2fRiB^pSD0M7_MzAPL}6j;89fkAO`b~Xse`5|yc
zZ+yx}A}wKQgiQl7yih?{r~yDJf`fLyUjmQ~BIHs?`ET<ML$0WxZi=rU1%o&qX^$=<
z2F!bhoC|26CA7i1M0%tYOLvpr`+y<%MgK^lFfIJs*qhrM+L)Tn2>+X;tTb+7{@+~x
z5BS8*{`d+0{lHmyF!bPWt*SgMpQR^m-lzu5cJN<(@g>OM&*-4J+X>|0Vd4L%dkfA&
zJD0&(OGlmI2^zz_Tw++X#tK0eesA#h{)|>e(vySF(`);KU0erlW*gSo$UQx^LeEB4
zOLk at 0DYe~U87t7j%P{8<PtS}TOitz6MMAqxm$<zqZ(*f9yqMwII|Fw0O at iv1Y@9^)
z+8ma5b8WFN>XScLm}8+w+<wwl^W(|98 at Kr{)qZP9bGqq)a_8hP-}q_U$Wa=P*wr3G
z^&y0ClgdJT=Q^LZm$`KtbZ(vOcvFAr;Ke%r^+(0O4tS&E2;v|o;enfc%%jyebIOmI
z-|C<Y_}ATfr!>&Tx34>}R>N?l!Ybt3*?oQtY{pES%K6DpW4n}YNtsbTwF at 8p+Fa;#
ztG8&h{7LO${p%x}y~Dpf(<|R9$?|Zo^s}>Xl!`YbP~2 at r4Tndau9V%{+-bdaLk+_+
z#o~viw>&J6OE)avyIwx;;l?mpulTb6dS`8{)2-UpqwfP3RDF&su+OWe>{q&U1>>N;
zGe62Dxntn+mU8})o=dHbqr+Cm4G*y`P;%#v5MFfJ)Fap_(js&Jvt8HC>o#1YG&|M#
z7z!yBKJ~v%={lw0`uvyJ#6|>9n;AQJ*VM(rx<N at Yt?v>-?qoa>$sW?`5*jzs|KN-9
zM#XwHFFJnozScwSZ}N})V!Q|AxANT4uI)YF7%_2fFAi&tUK<#_%flbOX#Kill!U=W
z3zj|{So~&HB8j`gss3n(?YfJH4tG9Eb!SH2QC24md|t-vn7i at LEr$@Lk6kYm-i4UG
zyTg;}bmZ0(24tjs?dY*j&CIJ?uRXS7fBoX7qH9M$;mgrrIdh|u)&jF!eyg1aE}nGl
zs<{-JYxr0I8T{mb^_VG+HOzc>r_HTfU*^@;M}BpeJ6KCO&pMKiB8;YYs~pbS>W%K?
zvvy%kLB}JnSY0(uSDiqiI<{^&tl^?3?oSuny5bpwzs;4^XZHJ8kk^um4-)OPhZQ*_
zcwClfR;gVezIve0DSv)MP5McjPgSGi##bl21$%20Uq0U8V*h#h*5VG3<k8o+AUkiV
z;f4a*ki~{p{QKD4mZcAnF3=gF6fbl|sw`F`wcjSJ``V~#bDvFcdx|g(Bfj~oF1GOc
zlZP5ZU%7)cME3C?GK<jA-jb1?7(qOa3F at -H@`}Y%aN7;1mqz9`xJZ!!^R302oUsi}
zSGFv_SM_<#>)^-E$M)V^9a0~wURj#zt!3!YhWFubv=_YK>iA7SzuUr0$NBl!7Yaj*
zN?hN8p7#EV^94)mw|aDX??_V5?mvFOzAsSCD$}x5r|hmZlCt#3tK7kNxk?4W<U02b
zMw53 at 2ak5d^t5~_)K)2cn2 at Jkz<yVt3`Ff0qqei<stkDtH0<sEba&J7?u~xV9S-^H
z4RYviTX+VLkC3Y3<M^@-U+wPv80ukJ=yRK0 at N7-XhsQD_SF=Zm%gY}br;pU%J}1W)
z)_A_)%@NhDu^WyK^%gpHw#S=1?O?y&*+urS6S{ITKK4_gQz#R<9Px`;z4>*Bxu7`s
z<}bf|Xjb^8zur8{5L4J1wOMTa;f<+XY6%uvy(^Bpp3eE$=-9EtVZN1jLXJ&%vS at 2z
zEk8fE>qb${Z!POXDj6K}l0Rk4?+HqCeGz!R(4Jjzd*;h;Eo)b*bP-xaMw`5XljY8~
z7KXJtnN;??P27PUL9<{_R76;_=p+X^7zO(FA-KYMLCfP@!<TFA!h|`abdQFLB4#&x
zBkkoXt_D924tx-~iHm`?uXGRAS`~X at _qJ1K^+euQ8;)w2YCp5u|5fJRDZQs8r<kKF
zZht&`>+9A<Jx4P?m+p8Jy=(3LZquu0aOcr<&MzJ-V^Hy-+dgl9zIC_w8gJ*~1p`YD
zIGUfXPrG9r$jOL7u5OIBOz7MtAs03HA|m~T;S&Bv2G^7}bW{E%uKcjU!%F at P9}X~6
zhFqUF2PcHDR&@Gi9@>m2i9H|cy={}^%`pG-OY;RT&lvQgdGt4)>{y$idNf3=@b<Be
z2<49X^QEufc%GIXqBKM>c+=Z|Uw5feQH at gW(~zxS*xl>}_HE22u?TH06kBUklGm4&
z^>FpM47sSX-dM30)^`|Qgl%aTE*~smVj4V9cxj+}1Mso#usqXKJ0iw2P<mcQg0g|b
zw6HmX;pAoJymM&nPR_%kDFLP<uSDHnG!%UsvNDR|rNs^%;TPZtuv)?+FY at 7#`3nz(
zOc_z&4cRcXhAE-QvgwF;-SzY8uV{vj+*J+<aBCgz3z9f+JZyje%@53BixI*~L^<4K
ziNLN~*kww7mH9VZu5jp3n%oBL!e4C+yg<=O$}#3&5kX6u$9BUy^N26zxlA%&=I5HM
zh(Xixb4(k^iDuX}DyxG-?^X__cK7Q&GuB<ayZe6Uf>T2#>^#KFG{TFO9lah)?cv=P
zgB5W(JksWRMZrByX>U3=a}j&_wZ5bjiOsuCIJ{Cb<iDPte|?)i^Ox}Iv??=!otX6f
ztxxxPF`N{CT6a0QFVAXQeYgB;BGD;Iq-ZhsPQA1helbe8ns;WazMb{fEA*y0*8Abm
zV8<Q#8vXg)eH at JU0^4N#ShaAaCws9f%#S&Co|cV_co})1Yw4=bpRNxFenyM6HX(9Y
z41MTk^h$(CYtbyxwT!0H5qaD8cAl?wa^%}Hq8g{mf5{Bm*t0(~!jtzlow1N^LcLFt
zzuWt;>rrX<cFIa*I>j$h5ymb<IF94@@4GJYvV>V)vE><=5Ond>Q>(avTQ{#>{VJ;#
z>Dv|-fP|^5WduFYKi*LP*iQ-VP<ZMM`-Qe3)alobQGKJ{DjykG4?d9jywkY(yuhka
zoYslq;cvmut8$WVw{8rQL=bl4nsVNOGiIMo4D_38tUh*Mt7cEdw;W`3u#mgU1?*M@
z&f}hH?A^jfsiB|RvdXqIto`!fwaJ5++IjD4xNN=%^~ZQNNm{LYW*%hABXzE(@W7__
z#fP8CZRvK*zHdXMsT)?vJbgjS_k8;WsVwO_?w7lQ=SwheSkcyHw)&V+uFVF4m+J~;
z7(Xk%?7dM=Y@#h#9=aivsrq`VVb7%xU3zZ=gO?iL@%uQKy0h<*;`Nu;xAok$9<H#j
zb7*yyDI|U^UUd2TE>|;}vZ@?kM&gdj#;q|+)7BXG6<w$nO5P}8U$nAH(Qkv{%5%8W
zZL#a$<ck${t?=TgzUdObs4<+-!dX4MCi#+-dQ_C&lQ$pf807se?=>H5S#pRyUZwH%
z;*N)T+Y2^`T$km at o0l@IV6t5Qs6vgG!Rb(=nx!}2e_UzmrI)-vsffY1>+{w54Kg|b
z59kEg<Ah)11FnjhR{ExB2sE6OEaVpQdd$VQ{Yb@%WJ~|$S_-eu4WQW3<n!3x?OHik
zy&AXKDh5}`oRsv_(lgQH_D?cdzw+z~^`c7Qj7~vkx?e7 at Cx4FdveSIgh$WevHW!?K
z!l%W}o$ln)H*aotb+{f1y4u2>Rm6Ee!oRB5VD|=flS3kw%U<6MY)i=Q+FSR<z3k}9
ztS<AbaR;N&>d}_;d9U}b$~q{2$8L4-d4)#Vkjuh-%l7A8-Ck{Ga(%DXE^U^w+e_a@
zJ63PzI=xnFO{-2R!Jy(pNu0-srh?+>g8fH~^oMyaC->|-zg)@6yK&LsSE~N{&vM0Z
zcduSD;M?$7*v$6=O(6?i_?=if<|}sQQLDG~>W7H;c~=*IX+_<;UN1)$lg};A{}RZb
z;jAkh^Y!5`_6L00N{;A-Wp#;UHCGciUNElRXu$i1d&|iu!#;)mG^hjOGG)xeRy~hm
z+kLBgH!nK+CHwWUJ_n`rApzHZwwz~VRu!pQQ^SD7p7mt+4U#WEJrZk`?@6}2^sIYH
zfpi at MjanWfS?TT(B5#B at D|*)>&ALwcIvSrAJC|>+SC)sA2MGFP at fkNGgyn1ziI?{_
zK7YPP=3eXObLq+AQCpp_cW-1<XTZ0V at KRg_vDHa+3iM{{$Xg_gz4_Ky#k}HnQZN3z
zAx@$2-GbH2``o1-I~)vW&|QXW{m9C;=#KOI!KIS(P1*IC-t5Gntg83D9BkB(Gkl*@
ziydeQ+RH{HrFPtRJ*dMZ*KO)b%;dQFOG^FX_gQ=z+=Qg(T1t`JcOqnDznxr!TNQ&P
z9boUZW1nv>WhY$2zhA6o{rU}JO=%^87fpsL?7s3mNguf-nc&<Sc~<HLrxAT-;LRMO
z%8IM)SCb7^7zf}ik2GdRxU|N)oL}pXUoXzFjxoc}SD+~~qB_c~MX5sDcH!f7${7;c
z7!w+8nin^;Ep$bno4<;=hB)0m+jRFU_EJu0!tDpS6<+79vJd5Mq4ZW|tb6jN&pxzm
zfbGo9Pbl}YA=M{4Uj^6%I~B4Eh2`laeeU0#dB;PLcClFvWwTlryC+kLy=dg_+MUEq
zA>*`E$y|Hs4nrQ|*YnIM|Epit(RQLVMI$97MGEs|E!RIw?{1--F^ydm&~in{&mQ at x
z9CS)L;Oy~usTViBIkOJ&^7w@;j^ZROa6C!OQ;pp&-s+K|A4%wZ_m;ONSoD0$LF_h0
zL+99KHsX()a&0SIPjAjYy?OPy<GOnvSkxW9+Bq~Ry7cX`giFyJwQO7Vyx`vTZm~i8
zn at x;{YxCYN-KUkj(nZ3Vy)@)XOt0|S=HQ_1UK$-1ybEYsWU@~7ZsZDFPW;HvFZ^D2
z+ieX$LPO>I7CDc at hMo3H7gt3pYZXfguo)*dU5MSAeMvaqls#%Yn;t*fqRyJ5 at la}m
zbJA_sRYJ=J4J?B4IQEi8i1JYzhv>}Jkl=EIy>fkFPg*$Va|t?!Ew)~wYx}h^BAWBW
z{6xVU`Ip+RnqS|LQ|%O0yUQ)w?1Y#gsY>c2+vVr<^lZz{RjUT%@T&-SYI9sHE{j%t
z{)SWibdskNiPgs8^1Z5 at DCuOMfwg{wjcP9>l3tzE6OGc#DY`5`>k=XPYWL&!>;g`;
zWvu-Hl{Z`8A3l>)b5=OaL|eFL9_H$9c}8#T=Atke?&1(vqYDayl|9>;$`g+1wtOHS
zSwZtI$hlz6rUC2o_N${D at RCpVuesp+Vy9{Oip|+kcMHxq)`@N<&|DGxcvR%n;?o7Y
zQ}&w2RH16-otHb%y2g>D<Y2Y_*k?75#{$yc2NzY+Ct_sL*O(Ab1KI?%iC6p%w&7I6
zYLkLR7nQ=}wRqRyk+yTIN!8`?5ttH7(@YMxm at JF47^lp4HI<gj&F^dNQ{p-K^fX>k
zPTKSNJDz?0($Dpq(^&<zWd;HV at S>bcmY67)1F2Z^=wuJurWPHG^&B at 5CS5)a=G)8l
z0 at AeG_f#C+B8j(+$z1Z>3AM3>B{1pSV~!6wyfj;68F)TE^e?GYi1PQ*48Imk%X*GA
zz`G<tv8W}f-tvsC#rwj?JGs2<>YXn#lM9{X%DTP~osC!aU1qhSLt>mH%6KmytaVDN
zO5$Zaeqm#x`jvbc at e{Roax-p3Iqlw~*jKTm at ACa$LK$Kl>V(uYmN2hsf8BDzZAsbw
zfan1Z|NZ9(wwTL0S;gxlRxLN(Gr)c{S{eURQs$)2!qpm!ENdKJIF>KgoPYmrK_hSC
z#)rqg3~KQ6uQ1tX)ON%g)uB;?PwXudJ=SNOes6#2`<HoPE<6K|Y|_4ZA>W3Vsw88t
zTbIxKz+0hxu=I6vXA;Xs<9^Hj)4a4 at X0#jquDW{=LKeRAo#$Xv%=1`y%`P_}u!?dV
z4_lDbMcX%(t_xbPYr1>C;<nG5AFnjw#q>X<EA?dyW_)*oecvg at C99GmT4_^aaltPY
zRX#@FEl7^uN(|E7-O-^D)aT>BZ|JqpaGAemo at r5z`&PG`ja|9-?5zA5`%0f-UhYzV
z|21iW(${xVA}4XlYmApx=NLM#?X}r`_=8S(ZyfLIU-pNn)(6=O`YqbTrND;k$z(41
zP;OzpGD3D`y|{)-r!z~5c8>TG&6vXhp;|HR4z7ga`n$)(bgI42@$g&kJ=^fv#H8k3
z`$OH3C at GIk2~i~+;w%fA`if)BF8XrW($b<(7Z%_SWDR~uY;3LnYJGkkd6#09Rw5~r
z!O(57W!(VXplq**ii55Q+m?(nBm0%dv at RZ#(a*XXo?pFq$zyKI3p=k%R(>cpZ&A7?
zzWl56L%;Lyj~DagpWqK(_*n{(ap;agC!bidmHk_}>gGO0sSjn?zPox>Ph6T_4HYom
z+oNKdirJbuq-v^9k at oIAj?Y;0_z43YpV_)H-xra~Za&jWiTJpNv&Q at ItG#s<CkJnw
zzpW?YzLmriDHOfvz*F)ywbCK6B>qiiG4s?SUth~1rU`Fedz^nohwlJwaQU^v#Qd|;
zF(0!;ahf~<R at G^bKNVLnJK_8z_57B3p4`0^Cx1iMvt>SgClTudiYkI6y~Mj0_;$r{
zd3j5o+WClgdBoYhwu-+9)IB;SdFUZ;;NxpeZr2xG90(xJBXw3-IA6|G!R5;AKVYQY
z(Mq!-GEi8-Vc*JZEg#FBc~)ze<n?{6{o0kR)bj4_RaTJ%!jUA#WC^F>PAC4h*kYzd
zE$ZxQ28&28%bWMbB-tBiK3`~Nw>@E71zohYGqcbavE?p%IGSBwT<%GH;kt3#!<}na
zKm4?WY^`_Bz;B*6Av<T?Re^2%N{g4SYucUh%*^Y_^2F6A!{t}sJ3+~NZlXj_;toX+
zft~IB-^>m>8a=zXPeEY!t8ZnWuhf<X+V}Lj=(WAx!`G|Q^-j&jnIU^<g}`l=;H+!q
zg&JopwhdSE`1UeL**Tf77nd1o%Fz;Tbv~seLUt~8vAOJ-tWmS4?vCj~`Jv<QBkBz-
zy$a2AUVdGp6MvTZndt*!l28qcwbkl at 1<3+hG2N;TH>6(i_(@pZ8920~L8tVLN_}8!
zwy%Hz?}jgISKKiyg(7NegCvRd;wiSvF>TTpcr)^tGkNs$;?}=!Zudv3FD2I>U0PbU
z>ygE)qfT6;jK{VfYg^18|ME;GB9^sAGj(JO61T=Y;qskVM}?38x1Mv7_jWz2eV%oA
zlqbpHMz~Sm{aOR*T<k3i;r(aRiyvo;g>|)mwUrZ7ZfxV&#TTEy at y(+}JBPF{bZI=2
zd789ewJrLnOKGQDUbEGb=ZhX4bU&u=e#<JyXl40vwKBo5)1URK<%-yHYP|Z`M1lnu
zxTluAsmePmoz`u!D)?b+b^W`i-{jnmS><MSdJO5gKL57A;^UWEuUmahI){>l)<32<
zdWhff1b6J{@^9OXzd0-L444Vd=dctup3h1`E-<5v+%DIAQL%ki$*q&#7km6<J!7Mo
zab9EUYaI at QXEL@&4%Jn~;BP7FAIuNezuNh7Y2n5CBM~=@il3cd?r=zSKve9oZqdDB
z%d at fhC0oR_^hK;Z?8>gmCA&Eh*EZ8Drur1G-TpF_`=TbxZkxasEum(wkrX{6>&ut(
z<Lq1L=>?T43Ky>JOu4-Ao{8h at _pCMQ7aA*guc<oNmvz;m8p9+HIeZv$Q4LV-?B9iX
z--j4ow=}ai=)U>>Ty?DV6``R;T6!$Ub+6fSEswAs-V;*C_CUNsx14uXMc3$BjbXEx
zJUf>U!?x9N716~lMM1%P4jr*8OBZR&lfU-brQ^_%@~`B)jq(qAKYtVXc3=UGhk4Y2
z0)<`D)(U5>ZstErtkYWQUGc8AFL&J$mjst(MG3@`4yli--=dXL7VZ>b<EbbO_RZk-
zEAFqomiqh?%ig_1+1x!JWWE~i+|}aF&xDYiI%^+v*0$bqIw%|$^XSM*UFX=1(R>PL
zEk3<%%zDC2Z at A^i&`Qr2KJD4np at XYy9g$$;&s$>GSuc*eC3mtoxx>S5e}dVWo{+p>
zlIOX8eY at szt=Q=L#0%T`KFW9ZTP_(4eq8aQTfQqbpD1_EIzTA)hOB(MPHBqab<eHe
zSn3bhKE&C*uH)Wy;}_#i8;ebqipuH}b5dLF!=sWl_6Mmw8f`Xoz5BvNz^pnCRkY1?
z_2XUph8 at b+lt$NN=9$>8mo*z&(sNcx#LI8RW8@$ct5`*7P^t&Z{R07#X}rcXtcMXV
z$>gESdG9w%(l0f(=(|y{H}yvU1}WpWgqo4?$1f==YWl}3S<9bF?0+agf9$A8oVgFr
zQSBU7l=iF0dG6J0^?UnX4P26NRu%4G^kQ~zb}d}Or}@5tAIH9g2eY40G|$n+Nxk)m
zqw2_)Y}12E3=cjDaI;{zmhZbOF at G&8=t|o|P4a8YW0ntdo<CYu_~8aEKenloJ8!%E
zvHl2skGossQO~-aK6 at 9RDGolB#*0ErntK&IpjU{o%1*-FDB1mvIcTL|_JZ1*WdU0l
zZkiw0xxDqYiGTL3YjFjE+Rw-?G#`JlrjJ-sc3xvs5;N=G)h;$B*PV3U`+j?MrcWvl
zburjI*}HijqQ5#QTz=)I*JzDJjW-zG&9C at XM{2d2lof__-OD`sED-7FP+6C+Z_0C2
zlbv7k+JSfZ2ZHQqgnSCNJ((w`v)NYBns_ye*l-0MPlFW{T<h}Tw7Ew|jq0!(jvh;k
zN5>Dg2P!2<n=frbky`dHWfmaz*wlBeda!iIqsk-pttTJc(tc&%T!bkfyx9?meCjjr
zX;~hAQ8T|tflZH=+oQj<y1z?xz;MqRKQ)AwR!w~Lqp$u;bETu_V}x!6sPR6RjxJzz
z&wMHOVd2|hrNY+cRJ>4e=RyH?hny~LZ>49K2J5ZAb~OopJN&-Ui6gT at 63xcSiY+8l
zDqfs5H*{TjtmDP-0PhL5X0uU(d&gIOA*8^6!)Fq=_&W!U{B at NJbT+D!c>^9Ch-k(q
zzSrzOa8nZr(k9IFDmWr$NWzPccKPbJbC~xm+9?-1G#Hnyq3LPh9F|s*<mSAY0TVjn
zc154th1B4tvABYjZ~bsY)Eg&rrR<GZjUKndVFn{FnDgmRe&nfrt2DY~rJ~`rU2fLh
zPh$6u*ad+F*`vVFh&?dLa$xU~n_r#@kaO}rmktjtxM4p!9JqReAw~6M()v%8-=5y~
zZ?bPGZXWUfd}Hm~;#;quKFHLwTlXN*bf`jQf5F=7QOEpyqglOgGcU!t-S&`a7)VfF
zl9~QoI{9lo>tfb&#<1r at I}=>5 at Z9m|KlaK^CwCy1^}>k<iWeM~kj{8?C8{7EM^AJv
z&l?g-tX1w*!VRh*Vfbg2t&cn at S3kAyd|&=$yV5A;L`eI^LB*F8lw89x%UtUMI}maD
zM at D4fb^U!~TJc|^;nbVIgG-q_|6 at Y@R~CeX=lEa#hR5J1@!y%L|7NG=e^XPxewzX+
zooZACE{p!xoDU at TR^l!2N%VLgm^!uYqY8r(hm~F+GmA(t_3VRLUu9$_ZX*=R40hB)
z(UAlRM{oo{iw|l&nZv<H%Cx-EyA9%tU?~Tecu7qui*m+)(n5FP7D2*jJQ_>C52SjR
z>>$Hz59OUW9R6H+6-Wuu<-)n-<bYHXUF7mY7DzBT)+)JKj3&kJeykR}8UMVruxaAo
z&eV0P?C+D~e<J^j3=TJ!{|O(sSsy>aKL(t1jQ{=O;^$1@&9wMmsQm9^KR?O55N34!
zp8tL8INp6=wiUsIgafHsm82~2w+zVze`}Cz at V6An0e`Cq1i<}PfC0FD1QNOS at qmqc
zfPAUoE-bssWyX?`1<i>1a9qhrc*=hsOvfg27XD5X|IU^UQzU-_zj^ZYe?tA2q|Ds<
zKMQwz;vs*6|Cw3;sr)Y>&yz$#NF)-OOs1xM!a|S>0}?C15BUlIOZd1<P=z`GBC@*#
zsezo2h!`^l=dBLc<SKJhUus*O9ZQ9&{A(sCGwyh>`U^1PymtcGU_j!t5rM^A$}Fa4
z^yvs6SlV&cyLSt?%R$~%oR>4siw=mC+ett-;3Ak2h+Z&5T#dw-NMeL%gVo}+Yy|H`
zCG at NW<f=9u8@;{%1~_y7M6oh0{5u(1+L_r;Dfb)B+hq6$Y>z+kKS;{X)qldNoAohk
z_^0x}gP;H3`ahVC<DEz(lBj*NNYS2b^GWMql~#wh8Wr&V_226~SXQhhjn{tgf`aX_
z#BNvtLe230b>kc;73YluZN%xFduV8R5oZJBX>H;`FF2R~L<s+-XJlIVw{$kOHMDV_
zTJ^`|_?Mc<|2${^|E0S+^__o$e>$-D82{rvC+-aJ<}d00V8Ks%dLGg+|6c#+AICm{
z77fUqF?SIGKCCc}SFkRP9&AvJ-hgmrFzg4F;&Z5lb1+L|`uKNro~iy1bNHX7n>&TW
z{@>#t!XH<Hi13nWIq{9U2U8Ye=^*~i5Uww`gjU0Am|L}{a3`ntm1*H0>}2S4#CEC%
zz at +-W`~?0t*b;8e|3AH3`lt5#3I1os{-^5yVDUFIgDoHryKb!pzv~C`XY+9#Kn2?S
zV~xnQgI16j0V at OV17Ork#_Qrii8f?^D<fBukyip3=qywd`mXd7_K<B at nIVUR#CN`k
zQU_j8^Sx#XDEV9mnuWtX>5(%HD8Z_tWCEO-IavZ{;ny)O{8Rfsn3`D5Nc|@cCqGgD
zmjjegbNK)DF3sM?tl|F{jQ>%t?;MGdp`>e2^0r>zha50k at Ggoz4ucAGW*{rlCm&@3
zJs&_vh$kxipzQ-_5CIxNIPJjfQ>QcC%)*R8fkqIZBUERo1n3UY7AOiDM`SIg0lgzS
zjSRYvY^z_tG}4X at G?4(UBtR1hP+vagYXA~wEaIr_d at UKwoanEyMj(hL9f(xQ$9-V0
z at t#umsr_l=Q&TS_dkF(s#Dc%MFb4!8BrVbo_I*qjfNqBs<Qg)W<wa$cwH1sXGV^mp
zut#56bw at 0d5$tg0M0-$BIN>J!qUF~`s5 at F|Vk}a;2h$dcpE(00TYPFlg6PGBg!%0>
zzOtZlT^KR3A`ilUL3X5hmOTMZ$@tAlYLN<U?m9sHArbqCxSQZeo^(F6Tn0v~Knyf~
z^P>heAGR%!8E?$%p<piTf6?RVD){L97nwIr{F}Nu*gH-U{*(IuWG1fvvVanH4*&4p
z&GMKv{Queb|JiX}fExct%CyCU#I>;q<b4T6n1zJYXsPI9-Jt8^>&r*o*4-ea4I+V_
zJMajH8l;Lb!{y>|s_HSjAxp#zrT}!Z(c~0}@k7eW|AwVmzE!hw_-W$b(#{DGKu^&C
zm`wkdk(U0^|1XQ1<A0u&`~BlVXAS>U{x=FBegT}1H8o&u24`+w8CMQoCh)&`j${8j
z|1*Z3b*VJuXp_vsc_L~gu%6RlN%3fH2Wme>g5Oybq<@NzW`l+SQqN3FxD6nWDrG=%
zYXD~=H&`V}eF-pF at RKI-Z}k92E0*&X2^bg&L);ih51*1t!_}5znF*)ozpR$<pZ{57
zTKIP|bTD#qaxs}9{LBAr{hzb{|CR at B*6{BJ_5Yf>XD>T at bMwf4eqke{qZbpeT)uKW
zIyw=k?!XYx*Eec>)(PwaU<&|+A6NmvGywWPunvHR4|IEA0sxZ%m<d4J2ZliZ00o!^
zMn=}a3UG4ru(WhaOTSij=b?_yE-+U>vj_VBugbpw-c${Iy7JE`|A<~c)*tLt_gx;{
zN6-oi3iEh at xS(e}9~P#}C;}`1Jn9IS#xiyFXkZ0+((;<hoN9w&C_aIfh83nOhU$mv
z>FN^9Pe(AEz&Kfe<O1(?G~P_i`4=t-MuhvFp}i#z@)vhztytmUxiclzsh0`nANaCs
z`kpCDTN^@8{l}GAq9`uXpw+^K at X*)=;iksEy|N%6s;r8#Ssru+2tXFrXTAjYc_6C+
zbgonR3cg6o7Rt at Z=DikpKS=1Rs;Ud_4%7(f7h3Eu?@o!FhELQF(rsG!CmK39TH5|U
z_TD=xiYV(BZD?YXp;eOPoJ2s$&}5Jtlq at +(4w8i?G&zHUl7kWyBxlJIB?w5CjELkQ
z8R`|zH{V-tX01DO=dHQ-u63vWpt_stu5(VE-`T$%&faEjKL6YT at Q>vGLonI%-`0P4
z at E`tv^R)i$$G;8#$~X8w>w)}gg8c4+9Cbp at dm%e5kjs9^VFzUE6XbdTvfmE5>WBQO
zhn#jpc3UBPZIF|0$VDIIpab%=@g`q9*n1Gwe at PtI`|G3-d{6N|!ZQR-09FTH^w*rx
z35XlJA{{*;S{@x84-beL1R4nmi7SaFjeG#hZB19)Kj4A!S4Q!<xJ5kzai|l`hRq3b
z7OIdUjGHLqF7Ws)i`nq{lsxDr=75O~1}7%7GFyl6F at bO2p|f=`!z>lSZ>pe**g}Z)
zKs_Wur#$2)#3(lyh5IMNBnL*@4Hwa9 at 5Z|gt|d&j at NY6s2Ky2IG$5wGLGsUeY%ptl
z*b3Zuq+D?3=Ar)$Om9B=w;cZ>{=xjOmd^id1;~Gde*po$zs0}6ga71z{I@*szx~mF
z8~*?Be-OI=4P)@m0)4X5;OX!9f5iWX|AV?eF@)qVGM54)=SH?dl5DI^O_6`fGC-IH
zaj<Uo1)$?X)@~F4jK}R5f;ajBN7^D7{Ew51ep4=v_!b?D4rm>a(xJQgnk*(+hY^Um
zB8WxA#f`48OcpwOb5>zEBmD0q(0&Byy)?C@?l+_KzY2jj_xj&={7d+EH!<_ at uyXRS
zb9VY?7{EWm|KG>|3Gng#C;tC`$)xzV;s3Akf543thbT)cOn|4q@&EnL#sB at O0d<r3
z`M+P_v(=*C2--jKe}6K(f-3$0>-_sKvFfe}nI at h5hIP}9|2sf^)6;+Q_?Pf+Zer`~
z_|H~<`p5Bq4<7!V{J+olAO8POKEeNgm;KxD&vC>5p-?DD0cvV$hK7db=jV5KcTp%5
zXwBodzKQDtb3lXi9wgh~>&)6-Kk!8Ock~`2*EZJ+{-^rCIKtvz`~wzydk2*jXnzQN
zxvT5`US$Qk&ka*pb9ZywFRwtq*$V(o8Sd)p`;4n~!?86a1O*i_Zc0OuoBBU_l7o`~
z#s}cLNO0n5gocB4*pcYqC3txJP@;RFUSAD4+uDi|L!jkQfDD6daS?f=rRyPIVlqJ7
zu)zy3)AWgNvP*-ND!+i)>9r6yj0CnvhxYU-Xao4K+U;UraPuFBF%y98|37r;`IqqT
zZsKL;_D_lan~wiu{~zz)*MA2?0{-Lw`!jm~-ar2~{Qr^vpzH?`4)%cifjc*N`WyN0
z{#V`~48g);0}C&akKBm!NBq2e()xdm`sbBU!2qLqKtFo~+B>v&U~JG|UY7&~p_Tmi
zJ8On7H}oDC0r>-K4GCz9Iatg2ri6?+V)V~WAuJCF7+2VthxWk4I92OrSpUNYApa8n
z%}uO5zzx9v4EMho=6}Th1^E6B|NQ at v|2HG|??3)+`2XYo2ip(o|NM}f;tzjW2<}PA
zQGuWS{r-Qizpe#;<a=8`SOXReg<)&!?ZxQ;YrulL`2NuTTu{+RqH`%CUxOtZz}hfe
zDjJZR%4`uZCJ^eNdLR9#s-r9>zcgrxqvQBfAw~w=4)~`MY&|SZ6kK3#_WpGtcV667
zeQ9|Gb$OXm%yl!={}-+Y|I_$)w{Wwv`sZc;&9MHD at h>3o_w}FoZc4)cNB-Xo-oN?y
zd;FtyKtRTe0|jp!<JC0}p8l2nKTyaG|9|zW9~Igb9^UHfTfSOi(%IQrSvgQtG=6w^
zSXWnPW%b(FILX}n)uTtwp`obN)z#G0RBvzZf`X2@>V#*{vc$zLHa9nIY;3Q##|;eP
z50B2y&MvO6uRA*zXJ at zP=DzdsiN1edq at fWpHa51hvIhnlRHPaE`sM@&e|Vn!(bY9u
zU*Djy@#|HqrM-PFK at uJi4e9G!?HXMe8~f?uk!@3Czp=5GR at itpRWvrf+%h<OesS5<
z^gS}N0ytd8z`)SbDlW36k(NSKexA547QRlwx%?95=U2Fs at u0fq*MK{YqdLXb{_l*8
zPeHG$uhOa9+=`NtYWn+UzqWp?uAW|8TF%YQou2;j at niqO!p=)~xzC at c_lG;ItSXVn
zy4j~DJ3GfOQ%I^tYsSZ~Q&JiV-#5H2ZRO&61v)Z|i at Sep9|Q)Lj8DwEL7}&vk^S5_
z?3q|;Z=d-3<LgEh-u2n;>E=@Z&}cwFU|?}XcLC~h<x^SNq=SRwP@>m%7u_S}(2lPD
z+}x4EhJJJN(66XFXIIxtlY5SSZ`1DFmX|lr$QW!3e)#NJs)a+=)YJ^6MpRe-XmoTJ
zsHPpCT)b(?aew?MBO_yMc5w(7Vs5VZBN#(k#(HRIy}Z1_)GE!uFsQVB%-7beZN3Az
zI?c@~*3|Niii-XjOY<fqu&a0Q>f&Pc$NKM!-z_bz#UI~!1jA?A<MpL93=CaV)D3w!
zvHWaf+dt%u4lkOTn$PXd9UmXJ4$Zl_xrvex>T8P*4S%2iw$)t%KC-@%`OS^}?U9j@
z=(G<eCMjNCc|U#}Y;OL(yu6y|tL^UYc5=#6(@CoBnM}y3ad&TUcT3XMjr+BGWNVvV
z(><lFt+T#<*3vSbme%Cy`92|`Cm^6 at Z|?+=DIFHpyt{LyqO9`n-Mfy7y at dD#H at Dy*
zSI?$_>C*#1#mr!0;#W>idu!KHa&n5KWOiZU=bsxtTU!q=&acbTVkRagHW$9u*Uz at K
zE&Pro#$<!sy-V|<W#lhm at 4Vk8z#71E@&6^;P8F!=7)nk9;ULY$Anvq<6FvvcS&M9|
zd3 at xt(!S`R1}V2xv!ct?hprpvZt>LzbunWLA0+`VW`Z&IVF1@=WOrkw8^H_nxL|(X
zaVyc%grA*(QsMY(VA$ujwMpzJax;ZeLcGrmz7rDoul<htnCOJPxTOp3;dkrX$7dj0
zrc;SNMF?}Net3k0FbKoqPmYc*H#e5hDtxM$eD>sWr)c+qlH<T@^>b}#m3n#_TZTP=
z5&hHP;-q(uQlqPUhLcXVdK*9xtjk6^ZaACE+=F at b4G<TT(jj~MQ0u--4GmH+pT at sp
z5+rH~9^V)aMDx2)%E)08KGHM1MT&aiujWq;oMC1P1qt`C$2ep67&vNNo4w#F!}m-{
z{uDe`U_6}hZX4Y_TRdR7i<KZoS|W(*0|4w6k+{6Ui|UZ1My$ZECn5Ps!2NYV<H9QN
zT at c?2p`(;3d}oS(a>Lekuo3`dXgRMJszM%9*=~%WWlKjs=SDyh$xyncj^xSiZIvlh
z>TrpwJF~faHrxDu*MK{)_igGudS}K;`qj!o&j;#28oZf%&{uKs1KXKd?2yCwwrnfW
ztu?8*88rB+_XmyZbu0m|Z(C^A4K>GtuY}QVU7l%|IS#{OI(pROB(UU{Xf8$o|6>Ip
zbr$;j65HC3wS}sU?eY-YmSaTrGthq=4BXmE{Wi5r at x_&eksHd~hIkqi(whed2QgBb
zhKI(9#+1AFMILq<ncto){d at 8C>;|<5%YoN`?rA=osR=YD&Uof{6i|m+=w1V{l7&QQ
z`TN7Pbh{&fB+NZ^`mh}~T7|fre at a1$%D$Goh6-$51!@Ffb-$^;A~c1o`88Wi)1rU_
zge$5CQ0KITJ_vwPauDz+2Jr<Szqmw*wrk>eppRs=;}u-Aut%$&A8%7JEqk)7S7ym(
zsDTsb0j$BBslm^C==J5rBx7GbVT{BM*<5|T%P6hsF)0AWm)?*(hQZX<a at cfEp~d~u
zQu?GMsHQCd@>ncHZpp~>n55hUFS>*3c!Evyl-w55nk<f8#M7MXa=R$u+x#_AFN=mO
zK|7n+CuQqNK`X-7#uKJxQ<`x=vM0$~GCHJUjPwpogaNM)Asn?h3b!d-#^Q|#GQ<0D
zgaH(}6%Ap^Es<TYUYZ^BAEW06Rs)P{9d`p;R7D1G?P5~`-yA6z;iu%bY4-Z!Oz|3k
z?U1}QJ9d|{Lp;3&&qhQ_=0sHMW(;gt2A+QsUw_t;dj~~l8p|fK7Np5GsGh<D4#0hw
z&k+3q^$G5Cjk at xl%yrlhn?Dx5RE1<9@&(3*8>Sy7n&|`V4 at bxkEkG3PcsU!Xd5RBj
z-VM_1rN{YFobawF=PKJcJY$RYz4T^B&#`D1Qb`IzjS9RLy7FOxmZ1Y73@|-KsD;W_
zJYD^_e%#Ry1d$zX7cJk~z|_%ti5$p*gWR#V8dq3ff)8YGfrM7p9DYnEw<P(Stc|Vt
zK;0P6izj7Ch=6O79<#%a*zk=ER{y#4Cp<1Tf~3^22$wdFL*r4pPkiM=9jx{g5u;<&
z6N|w|lH*Jf)A8G^K~@Og0;xAr)DgvermCi*raR;ru at oAH@?1yBUwE!HOuJk&wxJ?V
zR9=&p{<-xVx(A4waaBY^f`akY!mT%PL&#s!Ovt%g7$Gvp4`c!&tVpqoIN4Y}erP^V
zZaxAuCL}Zr#AH>%Z-WmrTAJs%>_zgd?Dqm}Qq->=J4)0Gd(AhKHjlrq$_RfB^TmJE
z=^K>55);GsUaW{(q~w{Z9%!UXyp38<$V*VZOO6stVB2co6On(U&$1=MzUq}J4z3lz
z!H3+?-(W<(l4kFVWejtpSy^M_=)(2Wmn*DD*Is@~6dcWGoNd)coC+4z@$Ex6&g25v
z87(-Cu4Fr=b9zZgUP9qIOppzxDxaT_*Bw(L_Q*K*i!U2oCsfVcYMZf$0&IL_2dDTi
zmOZvDGzI!PTtOk2rh!1drXt58(o#fLxWA;|nSfnmm~=}IT*Z|dh^LTCQUccF--h>%
zzKXEo#z~Xyd}U*z4b77`W82h!T#l^%rT at fAn*TP~l1Fg#0X021x?c#`J<WAAIhIG!
z)&el4onG2yg{Y1(g&@sSJJOWT=aEP!a85GAhUxQ&GjP8J#ZvG*=T?L>Jm&%%K7Pzr
zJ|`C2CGPj?cM*9}A<mXjhWPtOrrn?^R54PT%o{GvN6!ZH8CSQJ%G;Z>g(n%uRh9%u
zM at joU(SYwHVb|FszbfTefJRg%S^6S^XXu)~nADD}zV+=WP64WGs#s~hfv@>(Y_j9t
zqv6P}@3 at X>t0!`Z$Wb;#OWBv;?gY}ja%>Wm*spRnF~VnQ(s?760<b>Ecy#`|!A+DY
zhsgb&kN86gbc9d0!A?uVgZa{L3uZ({NR!!8cl;U5XTnj`C_aT;&E9qntjLb458l|s
zp!4>W4P#xbR~D0rEI2=birQ<P?sCOe^K at ej7)yYA{ER#Ts?4HBsWUVbppoikIcL0a
zylX&H79CNap}TpEVyK(B>-hy$Z^m80gePL9pO31J`H0z(BV^~;mV<TWHNb!uT`}iJ
zpO|u$uw=pkN2DtjhhQQlKVn1>S1*U7GjH#wo!B`V`kwV?4xCPehe!mDTq+N at 9*+Jm
zRw0aYqH|8;bKKF~ruWfvJa4sgv^RF1deO at iw)x;jEYhj*^n7=nUD^4xdPQh<J;8N`
z*I`QORw))He~q@(w>^=3>zLuYIsM(a5`%Cc|HGo5!>2VDp at vgm_gL9`S=$jxA9o!^
zdY)N7)UY)~#TreMBpI6?lW$h{ykYCd=@vkvh7*3((MiIS;U<4SOfal;@3&ZXueeqP
zjgX{`r5+=WmaWHZ^tq<zh-#NRIuc)_X0ZP?#(CJx&zGm2ch}zfNiIUKd~hgctZAc2
zT3)xRqj^`!+zmCO!*6 at VZ22K9l6(5hFG6{T{+Q#z3oML0LeX$%MQ*p27G-W+^lt?o
z=@5J=diBiH9iB7yR<g4D%Z|7vp=Y6G8!i`0dc0LDO7&f}?B+>xgP~r`*3IOv?tJ)x
z!8h+0>WKq`XDMyPcfk!|0tj`eZVU~|BTE~~oM9UguTv=?!8X1<c%~B3z-yG-YFxZC
z+TKlO@$y3NHk;9QhYFhx$yfE9;ey;mgUPq9B|qlVBrxM|ORY)ouV&Kp?OeMk^z6%d
z>woEXs`@hj>r7lv3^V6j%wsAnb6znD2QB!*GGl?MRj-GAEq<_HxR`RPm~`JFeY}g|
zF{331IV{%@d-vf}XeMS!hJf8G=~Ua%k1N&wimW47R7+#K;|=u+-nV!2hx;~{MZV4v
z4;{>(-qO6!V|-apr&6ee82BB{Yg_Q^{w;xK85xt}DWP at d(t;dUY4+d#ItG5|3t>YS
zm!ZCuJqYa~+2X;RcC}|><#sO$8TeJ5&t7{me62(iysRtA>>Htf@)#$EnYXPmF^Ra#
zqhaCM67yye1zGha<By at RUg_T}R2zH8jwOCM&pHp3z7Nh~nrU6X01P4X19~-P<T#zl
z?L2akw-*wE at 3$-e#+g1RJbrKcmEUr2QT6?+<tw%~=vh&<_%jyOSYnp2PyO}#PkxTi
zUau{lo&wnyoE?W+Uh13bLLnEv^)9$m>yw|~a!PyUX^m2iD7QsUU1d3oeR=t^?^yZ;
zSLT4I%*#71j6-r_`LnkX`9+d>rgVJ2BMr7Sl=I1+z86MPtu_cDZt32M7$bhW#>@BG
z)?M~XT}i=wwxXftQ!{IQlb#@|Qmaj6&#v+Q1oWdc^F%7AB3!@Faa>`2r}Q>wRbBdO
zDXWyTE6G(`f$z|zGB?f+)#b4Ci`NU#D?<ng6>4Oz8)^~c(}uGaR!J}Sb3bs7oLlR<
zr at U<AYmXV+=ZOk&HE9}HAEEFUq)y>XKX;8K7&}UOq!CXe6K5c7!G-W8C_fT4aRz-s
zsX7XcmfEYv<bn-LiNeM5Ghw7?wh%08i^T~c0kW*M1x&m2l7NtI_MJG;;6##+M^9qY
z0o}pr$V*TlZO3$UfigHb(cCQeHPk4DrDwLGLE)d;wO%OX#%g8QgZb|wrq~36<Yt7A
z*u>1-%EF_u^^k6dmz!wYuPI`slLo$4jYLL`m8%q;<HAun(nks8T!gL!Hw`p^Kb4vh
za>aavn8{Djm!hE|BO?QgIi)QxEiGX^qLmzi#x%Mcu&^SO?dla2Y!tU9Lk2XbjK)}>
z#IRYulqBF*b}elOt!SVyY{1HHSlh_NW~Mt-p`8B3s+O^`w6TUI$Hi;C{`+7Lkw*yg
zWm3SNQp9Q^USrW>5%W7D^Cn=Z=I#%?Ev6G?K>)_Dw&(3dC6V$zb(%efuoEZSP$_c{
zi_y6n;lj<t>QMG_$fz<dGapw>9rG;y>F!GWG{z;82mwb)N>stC{6&>;+qmGo5lTKQ
zG>X+98rD{y8?Zp%K#r#O+a6Hey2{voNk+-Qf_SF{iEjU>%1(pzRGe~ht|}f|hmxFY
zm9X53_ at UnZZ451kI-gIFuhYMJE$l&otmX$NM@=Zcklr&Q6NAy;$NoT~@A~1U*LrX)
zYx~TxM_=m?b~7#v!7^AZUgG%pPjx8kMFM```*;+{vno08fP-i1^TP89-9X~KsqWEA
z4B2~~dLkf+U`okPi1CDrtx&;+Lq9BZsdeTj+!AY~V>~A4(O?Hh1Eyu at gqlubVfD6g
zcc0~8=lYbiEjh6GzUN*@(Tu*bzV+{N@((WCYQIn3G&aBWoETqws)_ZChTDXoxryLi
z7UE4ls2x`JYd*2kfJ?uZC`V+IS3;_l>!VwVW^ZmFMZ|q(<A<6&UXaY1PW?D2S>d6b
zvx+ylV=@r<oQmsc at 7akhiOcifUdB&1M7|BTHu*h?Z(ZRtO_49Aa45-m4t;^U3`%{Y
zIP?KkiYYjzha#M*4UOt`(C~xItkAb?pai#tAKMyzE&nv??_Z1Mbtt^kwsn4|Omo1v
zsfpkrH+HvCT at RP@?rq%%y0^_H*@zS*G`31zFu`TEhil%Qg$0l&;?6Cg##G;vUdLV1
zJf$T;DMn9un)QW&rl!~qvYkiGRkuV^IWAYW8){Q at b<A>8lNpJHc}k62=DvL$XlfDc
zx6jT`O`Vjuw|n=gnr58#CmJumd)vo9Fy$#$k3vC6Q6R7_^rWgn`adXYl5=2D)th0W
zb at hI+vy0(Ay}60B7q=#+=KR~LRG!Sz&u?=e1#&(<QnnODn9!7@)hx;Mx~DpDHY^=1
z=_(%|8xu4Jr>vDZaN5uyJ!kaSSm}L#C$M4ENV8UCi5Ha2-8t`5Fu)@BYGT<B4+}d8
zl-^we3le`2?tGuqMKGk=Rz&(TlrN}gdUn=ODl#0KT)jsMdSA>)ENA;T!5=$DG;2j{
zF27Kc1pCp})+5A`xu|H<XT`Oj(^W4Pwh4ps_eOGMN^FKQHprlIxz$rVcAH~BDeKFC
zRKW9Sgnn&Asi}M%1@>wXrCVl7qlCVcDH-^blv+8*c2z3&<BHgnS|Fu(2!W{HmbvL7
zdX$JU6dJ<eEezvg9Y*(ap*r~7#p1d(V at 06z4v&Y=%T?tZK2!KXB<OS7gS6icv}F`B
zpd}(ZwAY<l5^_7Gr$I_M0WafD;^&5j`!5e;vO;mN5~WTO8$8Rfu*y6&43;ImzmJ9T
zear7(qC&cs;0?dO#&Xin9dqwz`Cv3XG6IRQB7zc4P_t)DfE;*LY}8&Bl6NckWt{vH
z0I-&YGP=J<lB~hLyl_Iyn7k_}De2m3LdiwqvyB=N7$II7Pn at LjcVJ<4*r3elyw|3y
zxVSoUNgpHVD#+6xfFZxW1zf*_YN`c(60;JP1zIm!&>)R8qDRrmpJUwywl9NH at OT-5
zghvP4T2})(6EI%AwCP7CuEDfcD5)JF(6SD)U}J(gOQSY1V+U6pVg&fipSy^RbalyE
z0Dz*C5*gWSGB91OqB6&5iF}+RSssHSmo8a8HU7XwpZTr*;@3j|?r%s;y%g9-qdxQ)
zzCc}Q;1g3d56oM2hz<+p1nrtBS}qH^pwALW2xY8vNeD(3rvZ at Sy|dfeVbx*0d$Caa
zban35+YW#Si>DE*u}w>Rk~WPZDE8Ha3=I|+L0iP3B;FT0uAHqOB+aCHhiFv1*X at Wb
z-Uw)lS52}D=Ck4s8gMQMP@;6OmvrY!-;Tem-5j^Mw$VPga&}`r0A_tnG?d2(LNB?E
zf(W!s!%{Rc<>s(-p}It-gokO6FHSb^IHCF9aLC;W5c60Xa09dzch_4*XqISB1ZEJ>
ze|m~-r>jNf5<ADn^`Z3&Xbl_nTsY4GXg8;Y;<A&^X*Gdb486Dd$N?>l2e#P#PwuxZ
zy9Z-`nBc^Wa<6`ceoMvkzNsdf7c;_j3$08z=;b?}h&Bw+1Jl;&sT_Wuv$x$F+Y$d;
z1n6w=`BM3 at 2!i)@d+8A+z?xkYh|Pt?jfm9>6g76K<tt}H>(=Mxt at 8Q#>lb=D=k2z4
zC79TX=<wLmw*DjlpO^JO#$Js=Ln&qu9BT8^LOC*GUblQ+4R+Cl!s~p2;noX216{T6
zS|X`=j|0)Cb_9yhpW{An*Q7UtI8~ftUr>2Rs2(SxKh*usL`OhwI*1)3Z<kZ at B&P^N
zBc7`0$0gC`VLlXmh^2UTBX?I{ZS`S1RD5u)-uTXnyP%7^kIWY9i(;8)4o%M8a#>7y
zRJtTvqY*Mz120=?BImkgAP`R at f2@txXd}q?l&|eT8=pM(G2Kw0i;+1RsP_2685(zc
zUtE7>3k}j10~p9WuYh}wo<QsG;)^zeioNR>rY9q6($ZLpQ&%Qj^qL2)U21v#=z6lR
zbd(^Bdq;s3ktMrLmdHF(#4To0QsT#N?~_g-hRk`fRZPL(4`qdc_VA#51z94PY+Li0
zayueaS(db;@gXIux2^K&-PcW<Z$_0=<oI~XuG_fQ&y63+%Uh>TF>Na8zGZQziw(|_
z;2z^(epvhx2M=`2sl$21b@^!pOb6dXFq_+i;QBLtv(va;&Ax|nQaY@=4vAmcWYIZZ
zOZCq6IXLLOGE1$8L~917mH^brEUL>>pM&m)bfHlm)w1+UBOx8PP=`ETt4;>2B`3St
zS<*!O{O)u97lfF^>PNDZ at xl*{iEg2LrzcZbQoV12gF3Axoi;jp4!@$XkPu6xtLe`2
zOZpiu at OMa1pHfAirmXX<Vk#`H+?^5ioO5vtmNiq)7nogsW{pBlqkp59v|Nvor<ZeO
zC!o-H3%WOmkJ(mdX7-l at H>2lb8FJWCfTvmpjnBTZD#EiifB9Y%M^mKWIpR|htn<dm
zFSUWzR}gWZwC~iq?S;2Yi4wu>YWDAgK~5bCAV)dbsjDNa3Ti0#SIeKf`X#J3DWC5`
zhlYSG^`Zu|yG~_?-G;Cf3|#z6%U#5{V5*IcKX`eOn;qRv#<5%Zm>UpqhJoD>e=p-F
zM^xb%g~;QTuYbrQK|Wqjvb5%y1zeU*j86M1i>9v+2YTDI`~<DYY#@oD9(?_yob~Y5
zJ8`H&F8caWzVNJGp?k2~lBD?jbd{XXEo<lnO4(*O>w7WXxpOt$T at BFmJe9xq#*+0O
zu}AP7KJLfFm{8Q)gqBYc5m~FW;%w2IL_|AfSL{`q2r^_PDU1&3vf5$q%aDW9!6yQ}
zYuRaO7TIA);*gKTqU#_PhM}R`dZhXFg6%hlIM%;Is|Tmn(M|Mr+sjfZyhVw>zGLpX
zE%l<!lM0S<x5S2?`q2K+U&*fQM88ati38_?`KdzkTmGcQ8h-qk5VSe%AfH!PG%Mwh
zlK?sedIaQawQy%!Z&%k*0xm4V8WI^ELkH{f>%}Rc2*OyAsl>N1kCKr!qZU5L<t1Oq
z!B427UnXjIiVYD-+o!ML3PmBPL8}S|v1<OF6LrJlQm2qL3(k9zh^EHn<sAv8F|Hqq
zX*QC4J(_oU1u11zt<XiOFj)AI)I5SD%RxN9W+{TH!Npc~j4i`E{I$v+Z?>=obKGm;
zxU&K^jH>?996>KN>?At_h!|`Ei&vYXYZ?njDQNC2;cTc6Zv7IGkPPhrB%3>_**f7i
z1D6THYS`qlUPaIBAyjTR&Ekc{yB{L3<lEtQ?)=Uhd5AR1F=M%7dHb%TpNaa;6Y4_%
zVz_}Et6lHqS0<uCwfLgxVEWd*#j9(riJJ#BIeeR*p7t4zI<P|37AjP6qFTuG+3wQc
zx?*ACTVtY9I12bRLltz>1B|UZGcYS!>|?@)>T2)$xWjszr%UHO?iri3-uEbp8Z=>X
z(y{iwt7s&#5gm0}UOR at ZpWY?fz58vVE at QCk@$imM*nZorGrQ#*B%aH6wZ+%eu3DCS
zhN}-=L+)nQCBI%%TM(hity~~waNh=Ml1XqK+zj{(7<8&rS;=muO2pE_eol%??8<cQ
z+-s3_74(mp5w)MXS7=V-*JX2XbaQZrg}Heu^GEKc!FtifSVL0;7?`I?>%Bv{UNlU1
zsL%gM#4~3c7IHehUD38;q=PvZ1msVnbIWz`m*!7<Gn5%=3*R{fFudxwZ at t|5`Lnlf
zR!&E at wzUQh8`UDoE%_wfs|gDGHY4v%p~+Itmai=&QmmEv)74xH@`^L^3K4L57rD78
z37bv7j4d`Xw3&W_1+}Olp}2UoaUYal>+UTlr9RG{kG6d;Fx(pAlQD^#E*(A+n;p7l
z5O%wq-7<X1sayY%TDOtA5W|CAV-c24IMOhOzz9vEYv5dDl=w(pNKNO^dT{$@FmTfF
z at Z`{6)Oa{;*q$E9mg{GkHn}N>#yU#Y-J5Ntt2JDobM)zr>&WtDj%vG=cJ0fobf8)s
zP6V^p_(`Lcp`r|#sSdjF+QvxN{;Zpu4D|@DXLNu*pOS^)Rrxq=%0|o`thr*lJwWdp
zMma;Vq2;KLE0$FR)VJGeiT^ZUiUIQ#(W2 at RQ19bi-_TGWL@>TWM>*AvrX`kho1o9s
z<6Uq77*9cdZJe$kK7t3GG}YA8(lTeYP_R<C_ui+)f_u7A^6uj&Pb5?uTRQQ0 at R_{N
z>TqE^IgK~jnd+-~;N+UP&CO|8SU>JmnI)^fZFKtl*s1&zgwMQ5V?tvY=R>}~;^^7|
z`TeQ1LBmqD9ka8he#{``6yNe})`2)W at sEKIV-rwp%PygdHbg*~a0wYWhl1V<Mn7xF
zHyaJ4;9YbGm&?s`a=kx*rMGUdx9{h&iX<dSIQw|ME)anpJf?w<seX;@Is<LnY<{Kz
z$!P4NFDMm53cUPlRU5us$EXPMa01=JCkb?}C2RNmJRdKhx|W=1{gr(ya5B5O6|jDW
zFt3e77m<R)94~F}vnBHRNj~leEZW1;7;fwbdf8amM?lRUTXoU<_nc4CaUPonKJlF<
zK#7Ywx$Kbo`xngxsGr64900 at D)0$PA-GuE8Gs^?;^XvB#p67?Hmso|!tGKG*_={_?
z0P6G7AN#Blj%aH=g71RzcvlWbEwK*r_GVv6s^u>GJ)>)3_BO6*+g=^m>Jv59WE0mV
zX>mXi`71C<c2Ok1%EeBf3PjUzTO+#g at SWy)CY#%QxuFr)N1a>vHJ_Lcxv0rji`}F)
zWJhd3;Tt*6BN5jiTK#w!W*RNces-c|(xIo$n5U6fvSa#vjx08Dgzd6bLF#e4T~A#8
z1GV_IZ2%~CB|RNJ>zTQJEuI~W3_i}1JOG@>KU^`IxXT1}KJ_ijksi#>7d-xQ>r(q#
zuUXzG_s4xE7&N)5H at ZVd;f@*W={MVDy7=Pjbs;~vo^SSA8q=rfmDXQ%Kq1lHndj%k
zY+)EX0k^L*DmGfv1cYEOy~-bjSB70LeD*yG94x2;;yFIfyTakc!I!{iJ>j-HzE{9-
zJAKtA1?@WFeN)?QVb0Umj~ODG-Usq$R|izAH~og#+w^MPhhr`Zc&xSD#c-})Zo*UU
z<cU~gx<cCt>f`XlcI({iSe}{DOHAhyoMTE0>#MY$s(;>xNkP5vE+;}MrZD3mb9a0f
zO21bme^GDqjV|TeT%pra@@BEMW07i>9*Nc6Y+Ec}3yKVqi?^XwEqVjhDQg3FI?_8s
z4reE?1`ZArSw=L1iGM_B#|#KeFpAT}64`1eQGS7MJ}Xb))_SkPDAi3~?ET^3wixc1
z)q0PiZsBks=l)z~^S05LSLl%UU7LBb6|>fH;kVZMIu(Qseb#upta#sf8NVb%PPKc|
zR^y2tz25Mg&3SVN_q{2<P%bPpLf`@ZCrA;x!UNz==yZP%`PH`r><%w9j5uk+ec-_*
zg1T|N)%z#S=H1cY+z0&w*OE=Sr`K$S%Y5Hh$5zjTCShSMCU|ijz=yUUSQBh9)#I*O
zdZaXw5gkdug4Ph%Wgy&OL}doEgkDHO^;|Mi<_Ex0F_tW`eSWX%7f=F>nwuA at 4`g6{
zqoq!^Y&#Xucq1ckJ<3xqG1BKo{k|Q0Rf64w<utY#>Fv?P=OoGiduw&x at 6{aW_C(+G
z&97Y6-B#DIyWFi6ubh*XXT<%UAvL{wyQ;MF8!sh)T1%M1X>P$UOb)Ym4GGE<Yu0Bg
zfq{-w%=Qh$CBVem;>K%JBd{(I=cXoiza22o7JBCSO;MX2=6-BA^nAH`ZXx{kjWCRp
z-so{32*R`@04zQqjJW0S_n*DY{Ge}7BdLE8Fg#~<nV~L()YRj-+l?D3E#+gRN$x1D
zyQrE#%>V-cY?iGaLC-Ik_l2d|F)rJpj<vN7#)4b%-i$_|tJ<Ed>dhZEhfj6r^E~YY
zR5Fr(8~&UF{NoF+?u=V!>hP5H)Bo)1)8xSs!S&mYTVGzA06JIOHBXfcGc0BT<*uFm
zGENKk-Dz&wWWtYWb>2dvnTN!8b2EV9YRv0Y&S0o%>BCLHc}*v(Bj<_?NiKdPP^eK&
zPA+BF_W+aYF#@&w8ya++M}WR*WR2%eA&}wDx*x))__IJMw@}KfG<sjP66*)#vBP6c
z8B2|kfC119s1wk<j&%fU$jJBx4^ro3y;>hpY1&Z{sL%Ql-Z-pvo_4-=r56&RPE0d9
z5$vyLK&Qy96|iqt<d(cQ{w2A1EMsG!A{25I3_7&iG;Ik8mW?B3&!yK~DKHb;eV_OB
zXIz;Q4^78CCovyldi3f32H>GOT5YRUI()=8icPqqek_Hir6p01CLz4s{!52VFL>e}
zm<7vpa(>#@E9jdOFY;?sX-tf%iU1_Bf}@S4ZgEPES19b~jJ71~3VC%~D4{rw0s1RC
zSk#OUD1--HSST*GT1(XAX{@d7pkY3_mzx9mW(@MUO|*vwvSysrmmj^$Z8fztM;T1#
zm{r+Dl57l81lA%{IFn$%<d#e^K^D8WOM8c)O_EYR*F%E3nePQ1WA+K%y<vfS9#M8r
z)t;i*6Hah)>41T~c#y>AZDzrK$>!<{Q5WfmrSUPVJ2_?*Z@^6j3?v}(xppXOX{l58
zElr_~WC4A`v<$h22%T7+8}^&GdEa+DvLm at 0XYXB}dEn=O26noV4i5lBo9_KGK~iw?
zRDOc`60tsEy-U!RFvOir=#~5$8#p#tWp%FwASCS7_KEUN3h0j5wRMgQ0Xd}vG2FBB
z)Q~8;AjJ>dT0UPX`3&D$+T?0j^}^c%t=u_oIQ4xOyQxuh+Yu(1JK{=ORgx6>j^$je
z{Uj|-O9E5&L<uupu8>q?Ca*}-n^HuChhXbzP<NvjiZuBg8D)uB7t1Gd)w-#eRF*!r
zO4ZK>C7=cXcOyLndOh-$qa_E~WS!8p58)44zNd|MIzqYiO00tJUY12_RW4%2oLFk)
zx!e)J3!H(*5Vr$eu`Ne^%DB{5c_OM&ziuen(RT(88TOp1R-5L=Nrjhy>l|c>kNL8-
zi|xW>Z6^aTRtfWZ4=mV}qtzH7_9;p8NPRYva`!W|$$;U8_Xj4f513%tTO-$!bs722
zGe#{f&dC|ay#x0|XHFsyfhrr*^}$<2R|1aPh2l0qYIOEhpknhSFfG1-&?INysh%j7
zm&=;DX$YfZs`ClH!X4*}$xrhO?Q>1I07dEU50hU}s`V#<%Sy+BDqi<KodK<`ghHHr
zMFN!l4=P(5{5WbiM}dayHcfBO*B*la>$0DYbA+%Ruzu&#gb~=n-4qOBoe at RkJH0>z
zX|URzxv}0KS(O?D-l(hj3nFAPUM(#LKI`Bv{$u1B&C?jP-|Xhb{&xOJ*{or29%y2v
zVDVI1xEN+K7B75*Oa2~cLewmz|9VEXQWpBG8#pQ0QMCjB6&h;PLGW0YaMx%1p|EXI
zNh%gknMCz~*S{*=f~rKH=|~-x1*^Y$v2roY`tzvx2S8KdHbh0e?3Wd!P<*m$g4Ok6
z{APYq+G(<tvNTq#<>WImkzGsL5jebGHB|1S%#t_*3RHr}?PT<e0bFC#KH)F`pi;9I
zye3LHx4WeEI1wwNd;H|`82D-ALs&7E3%peSm?^6C29V_BjjnVHt1MfCC+n_GeFjWo
z4!JZ$jsVU5yTI9cr8FxgS4eOXEx1t2ZnCA2T(mkI#yayQV<}U+Wth3fz*wY0_AT>7
zZ;hIbVT`=PmM)aK=S=Xp216Z9uSBa!8}wTX45R#E$9~(}nQ>av-?b(z?cWw?9*t7$
zDjqF$hHDmLe~4K`zmtpnW$Xt+&<8GYVIj#lIggtpr2eo(kw0e&I9vs27gMhIR{<bY
zz5zJ1&1X;4!etW|WOv~QR%K&$=F$N-t?GN>ACm|QOilS-e#an2B(SZvSNKI<4u<Wq
zWmr2)4$MA96U%%ie!tS-SCUx=;Gcfc)`$(qBm7n<(VLmna&JJQN2Ae|@Ir}dk8nbp
zgF|byaA#oXEHK_!ZRdJe(5-R;SRh9~9KI4xwju!d9~vlJr(}I_I~W{JZfi-e{t)G{
zl_9L9^^gMyVgM9w;-Wzl25~#3u93k=rd<!HLr6<uUWCja$J66^1 at a9gHXJ3J@r9^P
z_W3<LL6n~Jgf+RH=%iiq^IqDdUIji|rlxYSX-xdCff8TkX`;7Cja9YKwa|SY(JwCV
zX<Ft`{koS&G;xVQ2B#^bGhJD7_u5p5{XwE8&jj%l_Gvra^S&^tXR>nO5)%~O&`?nI
z5n1~L$xC!1IWm}JG&cu$rv$@ZA{csJI5LAe)E$)j_V(|?EdcQ>H(M*_Oa<7@%s9>7
z$AgmbN?-HKKhdQc;2YGupEc%PvVWv5qkr7jMs8Y7cqSbFX=W--T-HfVaiuSNYm{u=
z2>p2zV^aXR{KGKv){S$?ebtpf(`X<tzd}{lVYLguPmBR}OL(tsx>5-+kCC_C@!asU
z|16_C3t#HQwCenQ=B>}&J`Ji=46gdx=aG2ttQgWH$6ME-^S^k&Q1*%7Xt4Q3Mzb2~
zGP`-9Txw1DB*x0&8i0(t0R%FLni(R~rmF&YevJxa$WdT}GCsga at jBodaAv$}O>~Xh
z at AK~j at WDxc!WdiXcpc6QF+9T!b7mm>LH_;{Xiv%E!!81_N066gO(*J}ee=3zDVPV2
zd#fD{&0o;G(07bx`Tg at iCQt5N;Lkm+b{3}Kf+27H2va_QiwoZzZ<NGLwD0zYz0W3G
z;}v&rk}8J=s^C+e;+3 at 3MGpowJ+@?Mh<IrC_2Z0TVh)>$Ui|E0p$FJa()Kb(6rXzq
zL-=nf1Stx4XZHCHG~Z>ip?8+#)%vyaK72>gN12cu{LclWR!5L#(XF$@^k%k{A38K*
z;IA!^izKdKGr(jd5KWZEg+P_eqs69*HkyGe4;+Q4B|IHw3oa*%-5|1#RXujk^B#Us
z^z6;W-yXdnC$?=;UVoUH(Cg?Gi|E_K=_8|+oXLvrt^O^3r)VjQ)OM58O*GwxJZ1>u
zPCr(f at 3qpV$>tTWbi5uOSxI*eV85f?kR<=GtCZ~#VTFBrg*IT`qH^O|${Snncw9ZC
zf|^Ht>adXO0abTd_SVTRI<pmP*rjvx1wU!8mQs9XXMo at +OXhx72A4%Xe5FhN+~+0-
zaedZvjtGv3gT0>_$(KEYn2iD#p+hx+IhlDzbGmUMa&gdf0iz__`@NkHWI=n<()Y*&
zw(2t%Kqfz=Kb$8#c|!}I&`a{t!_?)}`LsRg>uJb%co`AL#u+W8<lJ-b<bd;58Jte>
z at a&Tv;i=1P^7jWp>=S#P#Y9^h_y|mn4J}$^g-_p7z&SfMR>Et<i%O3}(i>^b&b!di
z33?2(nZzE|n=-SgKU{|E^AJ=M_TZA0(Nm(rVn>Wl4`phgO`WSp^5OE~_hOQR_IuNu
z4i|!qG09WEZ5Y$C6e>d*56WZ$8h-=IF%_vhsxgkuU6!Yvx%<#D<_3?~N3^s%l~o}r
z#^zgY^+#w$zoDWdU9=k$v;m`o$~RWM-!|d(r|%>g7K>JXpsz_dW!Z}@u7uV<FS`q1
z&r}d}_2Bt<m)%{*`k|O}x^Lg}v6&!+i3Rp~RYu13Bj-EOsmE15hb!*Nv?1?p(mgu;
z*@a&#9uv8%T}hsSbzcGEZ~%zi1q5qfB|ng0X0_lt{4t*H-*B&+4`3aj%u0Ecd1&%z
zVz0I0!<^E~K4)Y<gB8J{R6ol=2{~2&l_ax0+w)(ndbC&P?{3=q$%4m3c%8sB#`U%A
zf`}PuDH*xrK&h)Tl&!;<oT<w~>-6|EQrg7nZZce{_9wg+r_A2LIey_dwp_JAUI?b1
z+8PKvMeK2Xx+Hs|%_EVT!+_blGw4r+V}kkg*K`s7CpAoPjmy)}NO0%p?eG at hi{G at B
z&EOP!>OJ^skTe5NZhq#M3$EQy>ftYOaRO*RWHTL1Ov-SSXARleSy4>53QPKGbb14g
zP(BXF7Yj3#3e5DFDz$~XWUT^w0#jYWCqY;J7mA7e`#jF6SnWcqDc6$z;9mFpdqUh~
zaHDsSk~4v0JX|~f)yC&*6T%NOT}%^w)}CO at M%K|jR|%E)WqYep!KjJ3&y#_ddGAR*
zH`S!!LY;S9L6F?ij1v05502|rG^OKjUej;MHMg*92_=xV at jv+IUK~n>R_wQO88CP7
zgnwT;TeKE~Y8>-u4HfTy*?D$MEq~?7aMKJULs;Vw#AD!YynHTqYQ#h<nHX#R5T><F
zVZl at u&KHTHTR#cASmUyVoZNOWCL`_FtGyi@<<yMEM0(cLWZ_XL+<BZ3`P|>eD}oah
zF_HjKZ{yvn2@|O3pZXl2Ube6Eo7&T&IGY|=D5na>s}od_oF{*>kZP4d=BI>uVO}uz
zwu$}(aaPBfeI<GEy{{7gp(NmSACew~4^SKsybibo`fTx2ZUY$=M~67kH%8`qtcG+A
z41uB-=pORZk~DOy%fe0<$BzB3Bc~6`wZWu8Qap6HPue>%g=53Q(_P?dvrkf|3JLm9
ziIw=cWB`B3+(qEMKnAGoj9s3?ou)bC&N3kEn`Ge3WxPYEJbh=e at Rl)dWh~Id5Npvy
z{zFHZ|Ed*RV09;>8`wITl9^hgw3 at niWh%)|HJV1`!1 at Sqz))Qt_a7=BBsaSuoA_cd
z*Dqgk)G)UMl)YQyFN8c~V>chlJFSRdkG5H)_sNvgz4++KyU!*7n+`HwYXVr+oSF>@
zz9@&~ur=S)b#%BZs*eh4-wXULYpV0KkrPx#%g+|3erIRi*K%5>!eW^grXNMTK*+30
zKt!igO9Gn{Ep%UdZ?Il`YC35;c>kLGx{5#O(Htvf7G?H#Vb_a0wcAS8r?Q|ZN4r4z
zJ$rVH$V=FyB*HO)b`LyoncKUB?t8=HL#k*a1~Fe<^^mclTV^ypCu9m0ggt)jEXTbP
zK7ktLNCuRlxhYXcz`aqr`=(7DlzRTxKp+S0l<fT$(RH9Wxh-t)Dwz-1eRL)H9HzIS
zzo6T2&w^kAI|e;xwK#cVf)A0XeOB0-A%>YG^qS}iEK0^z%2n+Csibz&x)2c&Q5_b0
z)pdwy3n;+G8MwneIK1b$@f^Q%KM&1&(eNNoyUlUj)@0V!6xw6_)4L0|{7dT<Do4ym
zOxr%t>`{Ml9pzV&$@)FnT#wj?<qJL`WFHv|mK-15DtM=a&Mh7HzGYq)!-MqhDGp&V
zaRX5F9%ofL22kkll{J{XguLZ(F?{rkr(45&6-Yk8R=zRlyTNB#9*=${7AeawU`#^a
z*4Z;^cuc!gmVC7j(+HztTPe%;P{v?#NAE>jHheTS`!>YGL!O11?IQo}D~%;d7dRhz
zrSf-viQgu$sTy at i;cGuh@&k&ur4(yBR}L8OxH|#om>}l!jZooab=C|K;q~$KUVyKg
z1GqPMUxJ-qVGZaLhPK{h$3<e=#nyWh6w$5qy&A(ECte<H$YV_M891nCs<SlBb?z^X
zuosz}0xiZUZzLZpGEF&&szWH3k-|HAn|g92vSW-E%0I2bfc$Q<NB>qb==Tn at C)S3%
zCl<TBOgDzc_c>4;M{Yc|%paFE^%*ktFWzVE{3K|+wN*&{1M>1ApKSk}RZ6s#jUb_&
zWkTb4ZvyW~0JuXp%)Vzcm8Wza&5L6Sd26mF5YhX4c-4fCDxJ8Tw%x*wKnM3t#AOo}
zN{o(zhrCBN)CMOuG3)k>Q{KM%%Bwggp*xh1f~?P2<>xOX_u&^^Jf>^@L{o8%sew`V
z`D*d>wB}pw$r+yOPGC*Nv=pLu0k27=9e#Lx9%{JA{+_lGxI*;~!0(1`vw|THo*Zp=
zW`nvF<><~L at o<7l$H*ut+tldq*vg~Jx=2|e9TM>Gq=eX`;0!R~E-Y<otgQFgPeR#8
z8utc2B>>-mz_~#8-E}~CD<{C_K{?ik+E>M4F%4*&{lcS?NUP#O at rF=ZU>XQl9Q1LI
z3c7zVZk*nG>GusW2$f_4lM%E9>uk<7xR0n|-tm}y$Yx%T+^&sZudko`h;|XkGTA0=
zDx82%RB?!E5-P-%$oJ?M^x)o{(fD;*x0lh_*w_>qxx2Ta1Nt*<k&eSOdyv^yd)7*y
zvWBK;OK20`bPjd*i-9N6qI)wnTlT10F_s-MhRJGK*|J1|wTl3X?1!`m8wz{{_wtRd
zF8OxX*0ZnU(LaC_Cn3C{s&m at O#!$Yz!ir`xVhBUdY>7M5-C>=<qq6h4z?6rBc5UJ5
zJ7TXVf&wsB at h2W`zHZQmnk2$s^?VunoZu%qt^U(h)&iB~pl=Xeo}QJKmI>yFLS{zQ
zC5ikNSr28P%Zys7b9^rAFkL3+^1b%c?L at Z=N~&~GcFlU_i|M&?@v$t~pm>#J>t<)h
z=f&r%KySDIrXV0ifHo~JY})jlQjbWfit15?!nGu3*TaXv+SD%8 at A4$qVlvxNTRxxo
z4yXx*1;S=#W&{y~6j at unhSSq^4SdY}a{kXjj~i`kk`Fhp;ZJI+^xnu0G6$4FP;F9>
zNKyg3V029se(aOFYe+;<E6~hp|6+IW`-RuqPRZPREN;veCNEu%+fzxlDfX8>Ns&uQ
zIw0Mr?iSWcB`0s?eLR53=UwsXwuLX>xItZ1-Pnm;LPT#le?)eFl#;O(6HBVg$78Gq
zf-sR77_P1g8H)_XJUS9hmeDg7+XRM)6%#)C!n6YlU_tZ&$<(7=b98Q@=2RC!U_LNR
zaLc(dW_Q8DG~vFruf<?n06+>Ye=9^Xx=w1T-jex+NAZEAvXZ+$rMyJ}XyJ579Kx2T
zuh$Nmk*sH7U_ftjd)<Q}(V}_)t4+Qj6)a*N!nn5<-OPEiK#a36Cw{h|cYB;V9`pD;
zK49oIeVP4*j`LeDkM`XIK=qDB?S7$0Dt%X|@$kCyn|q2i`Ucmhw+KW}!`1)d!%Po?
zkfM5|>h2<+yf=oL_c~w>OO|oAP`1qw_hLT^VQ!1IkCSooWS~Y_Z=U#wZl^~wP6Kq^
ziPX85xjKeYv@=U7qR%O+<I!h|9=^WvsDb$l7*ftWPVH!+)8R22xzQ)@Q!h|Ic}jCk
zKK`9dY5$7V?czAH&Y(yAGz(g%x$um79ma)UjgN7=dJ_GGoOk7mk9UUy><0)w at cRh(
z%hgBdwcl<z at 6JlL4*A at 9a90}$U)vE!r!cXpw>fR)Jm?|1HG-(+Dr$A7Z7e}x&bUde
z?JW>DW9eZvqqUNVEE5=RfAywy%*eRDSy#EW<l4pE>FsTTwfL&?wLQ?EdspH)2VJ0?
zr{^T+vE*~_mD>lJ2hyb%IMS!%&TiY5<`_Dx!%$)K3|-&uY8$F&-|j_a(DvsXv}#T)
zIc+iP>%VS_l`LR<jV~pWKYBtQyW7L}DY3DOyx6U{ar0?Mys-1U$8$7Mxe5;B6KQht
z>)E+hKOzBPan0kwPXPVN>W;}9TPWr7Yui(RhF8DY3_bRz%B3^EX55db;EIdo<S5s2
z(2(9hXHn3mhG{E-K81tw;863g{`NI$WCV at d#eH&#1OC+v&&`IcVU1?!`1sWDVV>Jk
z4mx%4#DUoW%QwUm#rux{8^M-~>=$v=q8Awe+1r>Vb9J=*J-Dr6%95l7Qzzh;7;F5{
zOPw#2d?B5jv*$G1I1V?>k-(AiF*yJQ&Cz5OQ}>GJFgZ5Qhff2Si>JDkaY2n=pNg+5
z%kq5Ko3D1CX7CeeMZuqx6%9h at V2svGikJ<&?8rPAe#K2Tm9fMgb1WX9rl7!yIbJJF
zGUU1JO_xr5vi*~;4^fNY&O~I<r{V$b*XvsgV#U;>8N#1Oey;$sE^ztzng+ktO((AM
z(n}ML+C=f}B}wf72Ma}}3o6rs-udL6BtHBKyBN&d<;IEbNX=f1$c|7zC7GhJgi-2Z
zm1Ta{{8v((qr>Ge at BN9!#H-PbCY5gjCnSG}um}~-tEW(_sy5D?wfj9E?*cuHKA2O*
zy+>;z0kP4BN$aN%G7Z17v+IJoQL5MwS<%W6X2JbeKP_TA<f5aZu(aVr1evp~`YOaT
z4B}_q=fD-9H8G(DFfzVHI;JJ(SfSyb=&(TTihKPyMhm6vagaXWDD}?PvIEH2p;|oR
z`o9DcBnV<0DRQ=o1?jB71U6`HTB%5^?}6?I0Cjg0f?_5<7>rdcmwV>6lW{w)hJTTT
zHFZLm$JG7^R{auYS4jH3cqGuYq%|2G8|F|lT^$oe^Yn>!m6D+bwKH^*QY4;}VBsWN
z{jzt*Zi;EIFZ)RUD*^bFfNKYI^c2jqq&5jCQ+SZqg&W>94YsxH0%t7?9lMhfjn+9T
zhb^?nOq!`nH%!rP?1zN+U0%yudsn^p04oM{daTaE?^cUebcfbAdA-qbrZUjDn;|ud
z4b at XqLv|H%Q@<?TZ9>AOeH^rh&H^yxa}`5N`}*R83|K^J=cGlt at ICV7=>-VYP0XEB
z&_3TOx8q^HGQo;a2eNTgYEpNuydaM$Pbes5t_S#dSF^W*8=d0|9iJbre{Fvt2I9Ca
z6DDO_7_6$S5Hk2_Z>}_uQshF4d-P{rT?lO9d?u<~-&!GBwtj*1t1wCFTZ<04XYe=D
zup;G3V?cdA(>uv{D4|062V9%6{M%hT5#CLw$*$}z4zFGQDW>L)^Lw2I!4Vyn^TYX?
z5k#Pf?%eMg>mMi-c9nYKu3(F^KL?Tz508!pZ*QjO*O*vn7ZkP5&pW;|3NXw~J3Lo$
zGX5$o^$ae7j2ZNA(EWazeKq<$`<q*i>sR5}3f3S2-aGRzIzi=~rC_tQ;=WA4Byi#N
zn0!$)jU??pCF=B#j<%9HIDqGrh~9Ku_tCDw-RjWNJ#(){JU4eKi`#APxby<I)V`%o
zuI&5JZIZK}0Y*@tNqSe!Q;07?hCpYazCJq^O9O49`_6-Fz~^N2h5kD|Q{$=U9HT<3
zfcOd!OJ)_s-QYLc7Wcq1dn<P!mL>L=z1^zcbv|E$tMlaxrN at LH97gs^IhHN?>>gJ$
zvn1<yePz5cG)>*pA;x4F3HDERP~w?V!4xcCzq5ZEj7V@~Uqw5nM|jOcsYG*7XT8yZ
z4c<5kOHif at OUr9R<pJbQsu)2RpDBJiq8{%9x76HN>=wfHr@?m_|KU^HTOoimS8}4A
z<>|0f#Q($Ia{x4zH2o5KQLun0r~&mvq=eoq0Te5WidYds2oMbfNoZ#aU_m_<dskG>
zUa*`E3t~f!y at 6uy1w~M?ApEnhq!F5 at _uc<}zB at _s-o7ofGqclnw!?=emo=Z<oM;en
z^ybq_yK|Wqo}Z77%(T9Grk8V?&VmDTo;-V8dDNgq@^byVx10RVY0(*(*BE*wkFrEo
zv-`yQco=jlXum(vsc(##ZRWAmuDUld+Sq<xBdt6>H(hy_ at vbtb)#}3Kt;@VCDl6Hg
z!42~-FWwX_(Q2tHS%58 at v#6qS_m~Tl0=v!pRIsLUs(D$|AK4X-N7(x-n~b+&Hnp^(
zcbryP)}Zosd3qdkLHO#@N!zf_oxpINGjWZZVNSSJBI}czLAuV}C(AqJo)nH8m=`$E
z;p#`X$J&;*SuHO8ajGk0rl+TOiQ7g07Aw7G=AOx*WsQzs{t|ReebY$+rh%p|6=ACr
zd(Ad~aCGdtu{W2Wa_<{CAkkn+PQSP(j^zeyC*PU5wg)Qb23h?fw6N<n_}=*qgV0)D
zVtcQN*OWKyKfWq#sQXxRFJG*&{>GWeM&^6R2#&|?cW^Egd`{WmD9YcX+h%{irs1uc
zeMw9??@-!eg!;uxvvMoVyEd4$<=G+Lg5`-FG6!^b$-I>wv}onK?M>&uHudS*^ltZ=
zxvsBcGqfkQF>37IsB^Qxqf3t$AKlXD<(qFk*RK}M09BoCm)C5vZJw4*ww9ogQF2kq
z;dnpGFY9(p&AxQ|b%u7Igzb|Gy<7Coi66}{y%=@dd)B at d?H&9?PE(_sPCX08)QYYS
z4~`U0GW|Gz?!XNel?f-$Rv564cHOXZz*)ng>4En+5GB+>*QkHxq^of+k2+_aU4FG)
zyW=yOPPtfd&e^5KmW at uU$}3O#?j8PAWD<n1LLA5bysGn)bdAr88Xf7GJ^sL)K6k at +
zA2xdbF5YnYsUEZT?Gtqqd$;fqs1=C%WoEsId=bOTGMd<FY{&VmrmOb0+B(3}fA(1S
zgZj5<0WPyDpPXz|HqWf_;vS2Pws`SBy=c-S`^e+v`>pW#*T31;D|<Z17NWwWZWq2?
zeR$<zW7@|KtP$Ou_ZK=}m>#*mb=UT}f6gtcxN)<YWz5J&>IQR8O at B1}=Irb-X^{n?
zw{J~uI%R|VhLzvC>PBh;Qw34hy-BO$Wl at HY-5cK8cwX(+TfH!0kXjM*v3)Nc{X?hJ
z?vBYjuNJiL;>nY#2_y6?+h5pqEn;XxjYVf#H<+*)!huuFT8gx8_dWUU(dlF3lICcI
zmzo)fp3z;0c@;F;V>IAdi?KoD25b1wOek&D^X*&PHXF5m)3X}d;H~5Asa*yGBci?X
zKGu1hy7>UhwI|hXnXWr|GR{wL!M at q|Vk;Bg6dJ8rFlLB&rS7&#_XoHo*oM$rOh|dQ
zLfgPzujKH$y$jDnTyp7ej`ZviyQX&i^XbNod3RT9zfSP0sN}4*&T3~~+BI`PxRXmB
z$lH^5opT*|+BnTo?;a>EA2kxJbazZR6qkE*;OWQfeDB*_@|gMPNWqlLjS9l~1^Yz(
z4DFwci$8F53ODIxY5V)b-wo709yV=$-}db*%Fo1<M2Ee;lYI*K`Mr_L^5bTliE(ns
zgXGeauh~7`IbnoBP`ceiy;13QXW~b8TwA<uN4D|)L5)Q8!cCVBl-Q5x(ZRdzh%~Sw
zZ67sYOQQi56PqM%JG;1#uwSp_3-5|%eCztI?VyT3vv<YL>iX7q)UwFPJ13dT^v*#2
z>Md3l?Br<iy^d@<HNtjpN4|wOtV-GAqXgXD8iyMcZeRDo<+gGDru4^09&R~ys?CD)
zryfo0b9!>x$WQO?4ze9}q;tCIX71yh+c%$7Y%!^rvtZFzfmvvISM~h2%bGM^>OUct
z7{`g2S$*a$H$BuprAM3j)3mNwJbBp2z17Bb^OMZ>6g3;_n9?uzexuJ?)}7+IF}~_o
z(%PkM(rdFYapA{DLb3JN#g~U>Xv3nWcDC{O#~rk75)$?#dD%89YtnxE-2IHzoGaTe
z`>*c+I#}V5S*-Z?p=k}?4N9J7j%jDijW4<Z>AX<%x=$;p;ru%Pv;KjBfzeJGJT34j
zKOJD=WS at EPR=o80r)~olt-N!%(Rj(ZO4nWK?TmEpPw60-ID2YWBS5apopcvVCR|uA
z>=UVzD7JCQ?4v6RxO>NNsrrG+srsKcR6gr*w!CZe&%wR>>Hg7!b_Uk{$d*&4HZgVW
z*rk!S+Qo5w`j at vpQ+#ypyYq*~>2!TtaA<nbuFt^}`nx1=dN=7&x2csuO?vc*goK31
z7dd`?UWbituKK$~Y==jamapD$@Qrhz=?K at mhu=>Pdb%p^=818Y1zWhGrtK?MACDRB
z<lR#X-Yd1#U%vO*sRmwA#eGj!jw_p3e)L}4+i8++2VPDO`n-5aKtET9U8_UOX_9S0
z4*EgsG&(dVx_NGq%?Qr~QRmJ!G#IIe?%>aNyFPkk)*zw<9UQYQS2iz!au98dLU3Em
z$~8B at 0T^jx(|OqMqQJ#dQ7v61EnB~JpF2Sc&!L_i-|{o(*7-#20epkbHEnp;xODfI
zH#U(sTNT9|TrKcjCmsl~!h2 at tf<1NlGb?Yc{LHscRxcX7v<XkR<6Y&1-#%7$^$z8<
z>G4SHO%x0;_Zi#$Brn~v(}Yd-C0*6NR%Vw?%5&)3aH$Y{%pw}|B=qGu(|35Ay!Mt2
zXM4Zu<FeuI<g7mSBKwWyArWrQ at 6MS`y?jQeHyY^pKi>Dszs0+?d5rlque|1WFYY at c
znBdy&P2~&s*vkHA%3b at J%u>@OK%x=-x}eSMiCg0{-$&*QLW0)$5t&z5%!4CR79rqh
z<xlMdXm{DtOa-jg4~VqstQ$%9pFNzW%~<AZzWmbZ0W7s*7i~Pa8DgfZz7*-CJFVIp
ze?0^g{MP|NAA85l${GDIVG-mu`d`fXg@#RC_0IprXD12bM7F$W$o?N0Lse7bXU+M)
zn6CC!&;N3Ol%T)zf7J-pAM>zNSC~azJ1a&!FUo@<<cb(@v?Dt at OvDal2opLxF+@W6
zBSe2a7*=*r(n^<M#o!2{!+8;Lv0Nb|f*Z|^W%C&XVxWiNf>=fvSH$M=xnbmO=?iR>
zG at cQ|=dy)dMl3g+8_N(07@|lngCi6&!r>JmRDo(?#dBkYsBqg}VIE{P6xuQDna=jk
z3<o$n)&~A}aA4TGcsMwCI6Dnz at VQa$jJ9|UF>KBlb_ACphvd*w6c>Lej0>fncVown
z3FXIeg9Wkd=m_-KPL~>KG&`Qh2#;msZ^8KO7_vKz1YVdZQnzi7zWu$u`VJb=o)aF?
zK4?Vye(=r^^r(FhL+R?wuy<p6LhW`4Ox%cAL0ohg!xE*_>;ORG1LzR=5I|(@sBXar
zl~&b4`!<kn5w7+`JD~stvYonC?Ja#pq5jT{_HA6?a(5 at Iu5Ji|aC`(Y0$#KTW|$XU
z>tOteqRL}JEh6^8WL6!_cQ>LuI at Ac9^W at Iqkd2_(ASZ)tM9AfHIU+#kFg8#I!rf at V
z2!>@sBsZENj1(mBq9gDj!&5$&!RHA at 9aPU+H?o3$@V?w=Q6Iv?-QCH75>yt&2FNMk
zUUdMcCRXl^Dp=_UwaK+8kC-)qxvo_!LzS$b7#N9;c6KUzrQ%iDYmB&9zGZucEu(Gl
zpzebP_3GbmM0<ZfuiyYg$?bz|x<qhAy`m!g*`i3x4p6K;@C^}<!{!I`dC_>1`VPQo
zVz_LPO;WwlHWW^|gvpK)gmJ4*r#JpkCFa%y(5iS__f`}kg<9co!o#JATOE3kO~R2~
zV}Kkj<9Wh3HlLrwKsSU87zQIWiNWFXIAahV1JC6FHv-(NL&yB^I+gIM4#WR>eNluF
zgTN#Xhh$m=WrYi(MQEXsE at +71qMM9xb`%dF!xl2wjCeMm7e*{ha*yC{9M>AHA-r%#
zv_OQfn&^E3T4?PHXUFkHusZPhj8HBkPRI>I#Vx}C4Wq+I5R;{?8QlW9F<`}I2$O^&
zZWO9b1Vw}$@a|Qi7hmX!FWyIG)*Q%<4P!^Mtr=diJT~8&(UZ%M=ORk5W(e8QLK`7B
zmWS2^atROTB?3RgS1|dJTjSkDlaII{JC at 6?tslOqBC0b0?I=OCKnP1K7pFD?-Z)z%
z0dB_#6~u;dV^t6oexIsJ%Ah(kV8w(5li;n9TsFLnLo8e%K+6jUEreBT3y4(01foI$
z9}uUlH)j!r@`FW at DDAbBr6hv*5`%zRefL78i>azUDp8KCkJ4pNS~XgG2x6_FM(>FJ
z(ZCj^z$3q)QFnJn|H*e&MUB=BHXnc*%@(QRco6{!0 at amwb4LHkP5Ib3Zfp|ZS9F*l
z0Y at Pi2QCybfEx{ve^>>_ at ux%ZH|52s&I}hOfeAgiyog9qy(%JJA^P5#;e;xpC}Gfm
zz6^hMEYJsI5J`N9Tn8mZi`a=ccE!aaqD9bBO$>tu_#?S5JW8Z6ot+u%*jRRwr7oI;
z_8dV}6dan=UVdsicY%3vW4a*$2Uv<+vEZmAIAo11jEX5g2a at Jdb*XyJp&mk|^3TI~
z5j at 3CsCXV6$xT#xU&LkesXpL!1S8=tf*UK>$Esz*`2x1AHPjFG*f=&-PfT1iNA{Ee
z3 at Q^I$B7j3q{Z0$m`Ju<cThq3A>q%1fepk(MF%9sa8Xh8yp69fE>V$?l`rNc62<aD
z+Y`kQsrmX+og#{XYQv3<=Y|ado<tTyb-^m4P+K?}0ca^moFj|*`l9+2i}AwHaarL!
z0$QkVp?n}>#X_7&goG44 at Bz3uxjO@MRcJDv4g4LXOadTyF@!&|CdbABTT}rqkfh}i
z4KEfPCWw>Pr3h8xxezd)YD?8~#NA+#86)dWd)*G6x?Q{I{ul-IS1msk0&=RcgRQ;2
zt)mSW=9?#sv;&DIiYv4WQ`C*^c+uekN)4}L&k%09I62{Y;Nh$CC)3GM`TPe5mtW^U
z)DgIUv)Fgqe{kgsghWs{qHvQAtcz&PR5aSi;|iE;?44XmlZ~T|1CwFz1oj%R+6-rK
zl0pTdU{TbMGusf$G>*c-xTX&B4`t=CBdk0is<b5vgvasu!IZTL3Od*#`^NtU2dkC-
z1+gG6M6>yJ-;ZdB{$1ffC-e!I at +W>z;rwTNSEdV`|LXkxP1gO*I3XxG3<eepx<pNH
z)%LumcmKuD>OTKqpZ!i8KoeZg`FBC*|Nff)pN}~8n}32|!r|}HB3r<RI(mT6{MWGl
z!&#3`RnC8QasB20`T4VtVc)s_<0v3?*?^5&5QWU&U=r_7t`{l=0u}g!%LSAxhmZ>#
zJsjOV?7v?wkn4gSTE at Y<<qJL)ywCAGZUQp<g$lxwtO<(}d_=;(Fvd7s0mrRL9)vDR
z{v}-yp7?W_Imd=7O8Q$obtmZR@}eThiU=#02Qps4ecX7Z)D%&|2DibHEi!HGxlv?8
zxHU}L2<nSsM~LS_Q4*g^zAY4h!BW<oLPt<Ve0GcwFH3z_XbBnZK-<IXB0DV)m>6~#
zvR%r9hH2}7dW(h^Nj8Rzs5S|>eTFI-D&Rw>Q2$lIj_Zv6LzVm!`2MR6MF at Nk|L1eV
z>%;zWd9Ql at Zx5$EIx6#j2N#!L{9kdVe$KD&<p0Pw9YOf=DZhO^7Xf)Bf;GUM=|Jd)
z_VzYRXNJA2hqJwhv+H-c^A-3%vdqUt$MD(F(ctdjCUQA(L<j=-3w6PPV`&cV8gLYb
zS>j$rzh3=%`3?39_UZ5E*S}x;4jo9g#!cjjEWxfdfml$ie&mImP|`385j#SN#~+{-
z3L3{J2zi<;%^BRN7*UdC6?3_~O9*wC0c#%Owm2&${8<z$W)RhJIgtWJjrDj!C7xvC
z6Q~Mh>|0u2jTNFe2ydycqJ0oiDe4-va-#3lRa4hcO+G}tgRBy8A%bcu>k6s})-Cj*
zVy$A}i&fRX`0~YORJU%kJ;04T##)!{0bWxcgaDwgY_R#pb4k=delnXdE(gpC2($41
zL<^$1L{C(W6ko=Deess#_)v`wITW<&>gehss|s0peaA>N8paa>#wRI&h8K<e;dq-w
zG(#KWBN(@H$6D)>clpS*5)~X4O7=irIzgaCmpzl&4zCFiH#ANp5=0A;$505T!c$&Q
zA;XdzVaw<vh(?YeL2L)`g}_6;fHQ^x!4$|7BE-$wqDY<)UgEOB6CK7C@*<*f`3$d>
z>_RQWL4KScdExZP;j at K82yY@nfgq}g4HJ$J5ch3 at Ussd>2VpXJ5DEppV({PMQ6o^?
z7TqFyPQ at bFfG0VEMAax>SQwwg4q|$3KxU2<QM1Lgb)-Z<@-gC-)KfrU{4vN}wulSE
zL?Pb;*`BiWB@?}r at vt^(QxT^^P#!e=GvF<Z;c~!1!jU2e4*4)%e4CgkHeV1SAV(<U
zL6l_NrW>=HPj at CUAUivl7~~XI&Eil+-aUNeSrNr5D6q;kX|0QXAn4;kIEWDd&Z2wB
z6^O!s`a+-&*)g0A$W1e%6AoZGH<qADaxTHrDH1 at a9ey!wovEoNyI~{$oO}!rkK?Oq
z^82eqty3+^V*(m0nr5PZ_C)tow9h67Eu~DHuyK}vz=IGo48rRoz=?(er$GB+TUQwb
zRf%j$rAYptT2 at pI)gw{>WLyRP>fTo}Lg>e>go+_YQnFM=5<btC06z#ms$eZY at ya2L
z-gs=2A0FIOW5?@SiNfj)V6IA840*;$Q6)hq#9wl4C$L at ye)Nz~S5?%BFYNLaSMxTi
zL}i<VhKn9k`aJqhT})dhP%x|uC{U;-P*f3MRD*#1{|4D$<tGFO6zhn1bsHqG1|tUI
zi=t&2ZO{W!xFCrK-Lb*#6*jymU=AL51Wrw03qUp{6xv5{Y;fI>-Utxa?1aIQ0wI11
zJqYG#M&#;`5rD9UOJh8UlL#Z1Te$)vh!gOD at GVMCqwqpmfFv-h#=-G<<oIf+19cBy
zoQ1sKDQgY7=SB)r6zT@!cA~xrrnqE?%2eq!+>>=&?x}3h5TY*|HPtOt7j-EQle!O|
z<fCePi;DgjmMupEisP0JT~#Nf!lw$DsbX`~&}zanM4mOWIjR!;v$mQPcpZA9dKE!6
z2>w1B_=g7rLG0XEseYkiVye)HJV0wl#)L>vy=-vFTgv#O1qre27+mHcCIl(TRg_x!
zg^ZjRQbh(129z-d7DuQ%3YYX%bi50qLs&`4qFs<6Q+u&-O6E?F8W#uoKGryKH6fmS
zB?<^QL0*lQvnNymRbSxUq-fDS8jmmvB0*LCfXVf$7O?z(S=9*m;`R<zlPt3ls1y~5
zMW`l~Pc^jzf=L-3!K-cLCt6V^2f9%tmm14fbtlwZGx9!sk2Hg*nbIc|H5g at ghWt~|
zWxuaI2H4?%e8EnFZ at M4^5h1=%B0B_9KcG9&Ts|(C5RXwX3W%5}#G0Vans^Et4+q(s
zq}&GGVbn;)DnvXmu|NzVxJ#kwzt7YEAwA;f7 at B|8`mcn*_xOKsYt;|)|2w-fnGVYS
zA1CKu{-1vYU-0Ds at zVP3|HSv1eW&L~0e!%f3>yl`ut0Yk2N#CDqlc5bhqLqluIuMt
z==rHZ-chMt%Iuo;T}9<~Dat%O^;I`fB~=A!kiH1%r;gq<a$^(aQbS4{+7AUm93pFo
zCgECxh!Cb=dH*hF8`%tH#v{5&$e at w-q^zP+4|YPf10<E;PZeV>z*>cZE?~%!4mH)`
zP`5f9<?E=frJwC8Q<R`o>C|#+D1wVB+=D$KC?1V4Rfki48Uns at ku>mjG>UEJQw0 at N
zn3{^?4ada_m1W0BE}u|VYYLSir>(lq%M0(y7TbVG1+5QNQD3rA+%ZQXq^>IGD5{>i
z2w+B1CUR9!uc_m;P(0=4sag0|T?rl`r6|Ia%2T95gc30l`<O(0w&mQf_2qj6JxaYI
z6olYY&izU;5|XBncLBCZCCK*^`I=!{4$&PRmmh{QGZ1PEsUgC)L)i;TN|x*a>OehU
zPpW=6AkeEShcDyp^~Eo8Z=w{jU_TTwGU*rjAu5i7Y3oLYnn?@uVfPvMU5R&OeUTxI
z2+}!#%_tVUaKyw^&nVGoRUvL0C;Y-E0;Ht>ytA9w1j}K^AnUd at 5mtx-7^!a*JXB8|
zQnzuhBB^@IIUrT9<5J90W!3;3!~p|#5o=vubWEIxiXyPqB_Kskj;fa_H#jU&KgFRe
z at 4%-}#uj$)`r at 00g*8wU$s$NXQ!-dc9kzfC?05mVeb at kg*Z>FChiHfpfW$albVG>J
zLd5aIs14u{ghXsx7C;azB>A9FA3P at r_sCFC1*#_dfiHAQj%9h8#^q_5tc35lRHPj_
zZvh7a8I+A0Fv3VhPGgH$AQ`1W0!mf2^1Yy}R0N at su#+z!?IzVXIotzS_UevoH3$?n
z*<}D(plmD`Arx-@>A~fU5ui7v00mp+2z>54%MBuk9EIw-rRzL_w6;;Odp{WR!$k2Y
zrmM>LCv(Bn%6o`z3&JQ<v%R&WwX?OWwXLl!>N`QxqF7s00?{)5MVYVFVndF=_kBxw
zD}V{0gfclG+qQ$XleLSrTa^a!B6y4VxB51T?*^A|5+4Ab0tNYx8MTd5e&A9L7Hcc*
zmGrq>?`k6l86pDI2?VUwF`#7b2G{`tBhLWQ0emd-^F%$BvE5k8K~NQhHLt+(W_$0N
zW98(jNm=@nuSP)*th4o>s6n;;9{_>}LCE_`5RMW;G2knjAL)<k;w5VDe_bq`b*@DT
z42W at 1gQ#X&r6ZDGPziJ-#ecblHrAFHr&OGmaRJ2P>fFu0J?SLSl!i;RPpFY(#t($G
zLOGPS<8b+W2;3u*H9^21&O;fnbb$?>4Sbjj5ql8J7KVG$@hz3Wqog+oASv8{;7C!J
ztOWdul>H)EFvUti$gG2>K_0KGLJBCHm`YnbDGS*`Z5%?n5)o at v&1(W+4J=Jz0<I8}
z!$d-yA7m(Fv<L0KJp->t#=pr`2k%K8*Bd$hREOwZC3}Rzm~qMW2b&+r25i|7PzTuy
zq(P0U<m6Z`xy7S;5qpBJv_d`~g<O-<rK-A!Sct8}WfHWZ#ukrB4UOYdF{vCC`gIJE
zK at 5M%HYO~b$VW%Ep-RV!gg8vp2$DG<_mP}Bh3+7Y4G4foY7R2umZ=wDN<bG;gDRa*
zPC`(jiOL8-VOx(Zh=b?``WwsTLu_$8p%2OiM+8k!bR}IpC;<!h3w3jZ&`3vej4J$D
z3N8O_ApLFwIa|1ivi70t4%LH)Qi;(BafO%1=ZWNkmK7#I)s#m;kBRD40gW9BVOen^
zvILHos)BD&>l9By->C~tPZ(Pm32UAdN`xHemn4 at l2E+neA(1I&oXi-fsv&rpED5Pf
z at KiA5%#o^^4U$|a*g3_Jh(|rdnGN|Ae<)WSo{j}7Q@(|=xTv~KCT>yn2p97eAK*z^
z6mQ`vQdHcM%fSLq5hQV5jO*b at 8YlW67Zbyc<v{c-L8}Dxf~#g{`OYfjGq=>O3e?e>
z_?C3uh(5~ae5qRlauY*TA<G8?6;ydjCW2A*h)VvV_zX|gLUu*fat6zl0<4MDE{Lb0
z)Gb6^u+aSrgWRE4(E`}E11Q8G0`E~~GF-zTq!%QXhbe at P61pd~?~)9Gg>-k2iwP3l
z5ok%2Q3#!oN(Jy{l?Z%!X^v7bP&pUUCI#JuWGO<FY&2Am$Q61p64<fPuv^la!G&gH
zk*feQrjp4rkj!8Und5k1Dj at o!Y7LZf9fY3Mu0P$np_z at eC+ow5lN9Tw;DM^4F46`>
z*@8TAT2;jb<s&p;z3T?fTB0xk5tW)%cQoQ&Fkl|1JrzNO8kQRa8UD$r5&&9<9FIuf
z6b2LE!*j8by_c?kHblBdU^dYL@;gxkbwX9Y5t9lI<Dq1#ojXGU5WXn3z1%)3xqi#m
z8G9zI56+bLM3uD-FCqKm=z`44s0-+##B(km(o2r3y1~ju){?t>yE-)F+zwo+&?WSz
zYBS`HFx9Q9>b#tBhI$F=01=KvTd8M?KpKT at 3#4t42#Qufn(CP>f=O+1J4JZJ at KmBT
zg9(kpo at 6p0+?J%mnyAdjhwulX9>~qKlp=8{&&LN*SqxR5H6l2Q!cn9c^+SQZP-{7=
z8KSn3-5l>9{z(j?R+5wNohsBNGY<bFB!>q4i{M}?aYFm22#!MGx>Fp7Bg5!_oZ|51
zjwFK`$qCVfl*rHz@`7XvQU@(i8L at ogG$voQO6vbE3Zt4s&Htw<3?Jby5`&reCrJ$P
zZvwaKPGj;|^N-V*f-E_Xklkd`kCdq7RxZjrf~;{eF_e5&g>6Df?4t-$bv259SRyNl
zye_LO56HL^DLlyQw$&G|8O;A_(uKev$f*6Fqh06P#L=qT-yPr`LJX1dz6r4Zwswis
zwHAq#XbaU(iDR;Dbn<N}iKV!N391zG>XYgeu1z6*35+M;yj3)u;25D~YH_7Ra#iR;
zh4i34NXZ2KATM0ya(5?mWoWJ^o@<)&6|1VT`VH2oN&+cWZ$<uj at j6w#+^TwB8!Y|<
zea9^!a$u(d%FuwQsi2ZCfYV9gt~5J?{OIK?p#1)d70B+A71X3EAjU<eZBT3+_XH6=
zl2s`022+V_a*=3&^k5$g#Vyj-$l?LXs^Z}=6e1T0C|&;KZ*V>kT)V~^5$>s)b7 at c@
zv<C)jWJZz8TR`1`flyyz*8<x0u6T#YexZ1;4$wm<hq$;9v?W)6tze?wLxaLqM3uQV
zz=#IUDQUeT!WAX`UBfEL!7sdDq at xV71b~$Z87y(97mCNV#qXh8j7WQkZc)6&Mvtis
z1<)pue1qH*FYPxO!$BnlfF3JVLv&JJ4X(Z{5?Wv}hf{Xo_#F}_<lmGhUq!{4Oz7dr
zq*4!1vNV&yjuQ!RK%jvVLxz)gLSY{b(KRv%q}ICarFAP{AwoZt4gp5~Q$l`J=a2wg
zhp-w*I1-1}5!fV8{UXOyHDQ at t6sFwnT4KjA%%;q(LqQHrF?EslF_lIYeCTpLknW27
zp6D7S^MWTX2UgQ8>Rc^BSW>XacDdE`2C9)5esxw<R05ej at DMVXa>R4UlQF=63uj6}
z-a35Or7irlW}v?uKtL4MhW}7VvLhubqE`H`9DS*r2*MCV{3Ya&8emjiVO8dIxt*s9
zj1)Xh2*too9gRj)6Q`z_8VMJQ7l*|PV(joVPsqrvP#X!Gnko$smvUI>7Z=~d2}c%H
zt&=SW?3yZ+tx)oBD1<_j>kzJMP`=P=^nOZ<kn?(1-GhoU;RL|YrIuqD35f{^qyS#L
zD+<V=YAwX`>mzz2n3cR-E5&qz0gza%7<wlQa#cxD_`XHlO+e}^vaCF+$Xk_>)IJ7I
zj=}RrNW1#?NJJIX<vDegkf8{<h%rP^s*I7cUe;WdTqKyRDkZBhL471F0Nl94(<YW3
z#)|`o3DeezT9D+5;Hsf=8G>ji{Kf?cI~k7PRD&Z46_HdGd6BFJ34HK0Uh>}+P+KKa
zshx$uFbHlVKcpH37lqEsI!01vedo2>%`ZSnaMm6iNQAr3;46m>!K!?S<3V04l$MA@
z0sIUgMkiREh(JmU0#FuRlon9f7Oy~u<m-ylUN;P?snb#+P6a2Ucr9dQqipaHgG at 4D
zC6=ioXat=tCXd*4bUzVxI>__Y!J1mr<XH{qu{i$)*;*!e;0vG+n-9t at Bpe4m1_;RK
z+QLC)#2tbe)s$^b=>=)VT6wV#Ul`$!OmM9F7L_EUhBXx^OvQT&)S(J3+xYnS`Vzj9
zD(_PXVpYCJ#i^)jSC+(x0FlZHP_v}sjsk|1psI?q5mMX)JlUQt2hU4K)L%0=$%&Pp
zNPK2-aDh<67UBE{#Pc at zEp!L6x$roY;zlwzDy&?=(uR&!M592nNG?mVa?;3iaz&Do
z8R at G7*r{rj=om4yTIKiZ8zrB}6N`e!9PeF?T_E=?kX)^f^#QoM_v=P_{H4&vAx`YA
zmukv{EJ*+zPF#z{dk5i;pa_yPL1vg!`H)KJhF&0hs4V@;HY|{xQrQ7qwSlwOU{!-7
zqkzoia{!RDP@~47GzB<8%Vt=<wz?)WfLUpSSRxTFrWAanprGN6$#%Y>pZIh69Mf=*
zCjwQLL!fCb^09n>Wr_tcMkNJ?lB9^mlh6{|AYz1Qt8Rn+{K;ui#Ub6D+Y!A{wXI9~
z5Fd(CjHHE+01o#84Z0sU!NQtB{<4M>AEQANmH|L9Ym>b_vN9sL1_%Uv5iiC^NfVcO
z?@<-Rr5KN<DprmneN{trkgC+G#z-jcs2x>7e0Xpjm2wjQp%iH+9}20Gy`u9wIpmD1
zlD5Hc>VhB6hPt4N+bXa*qzF)PB&x-0ikkqXA#znFa>@@83 at OQjQGsB>WP^+%av469
zSS{)sLl$)@<iYufWO7DjmWoPNjRK;0F?vcpMo3UycT|{8 at K>on^2}7xMpMJmj9ylS
zATpav6gyENr#yOtNScMdsaoFTJ0j)k1o~5uQCWnfU^(_w9Vl>-On`4%6Ec7)psbL=
z5SB(vA3CB3*mV70MhW1)`{fwO at R|Vbsu~!J3~bc{wI&Qu81^`VpP&=*6!-E}Gxu`#
z4RXTm at pSuW7UjAl>tii*RflQ9H}NULL)Ip_cT6QF5Xe%cS9OMsiiV}eNEu$>q>fDE
zV7*qL^jZZQ5`gZMidl0{RkWkJK}v{}!(A2c%JTt*^-|7|RO28CdQqAeDhIRDn-P3L
zC>(xFia!)dk?+<BCp at PTlD5zglvu8u#D%1=IH{0J2tnjMLe``NJy2@}G1WIL$7lde
zkm#yVm+}piMw-VJ5(mqZ+gONHYznX8T~MeALPx_Pv2dNrf<-+VI1|_)DRI3Ph*9Dl
z0RSQKE?5+BTEX8X0YDNDEFt(_OXbm#Z<2y8!6_)B$0wQ~dX(^7D)*Cy)tak<B+=6B
z&{T!wPU>1-l;2WAzDb3<D!)l~TZCsWfgM1Q$D4zv{H>;-f{%_uYxxv^GQy}*1AYTX
zK|CKbc&I|T;I4r6Lv>MNN@^`jpsw-=s;`?UuP_j at Fg4*I62i6_4 at UbDaGKnNYI>(I
z5Oz3Zi>})^sw-N}FlsKYI10RMl|cmIgCMnE1&RY52bnt%eI^md{UWsop#q*YRsKGK
z*Oc_H>?t9C%L$-ln6S*@BKJ&ccy{)M|8Qv>A%I+S%I>jR+NG$2;;Yrxro>Z8g$=hK
z!w{rgRIVooATl69Oap!c$JeoZyqt1hYh*i!7f=-GPHH|d1C(N5kECbR0?Af!oFF<~
zhi2s1vRpe3-`h_0OBbqLzSl^$A$yHvRFrC`4IF`tgNNb~yf9Iuhnz4g|2~>Gxl!Zq
z0jOm|M(_?52*$vKjiE$Qd5p9nrjRiG<I{)&QK)+GDTDT+z~c&uF(A?(AlwH1lC?n8
zCWoZeq&cpmnGrdaiG^HsT#-!6R4J2 at MqN)_?3C*i6&|k?9j~M<RaKObFo&N?jRq}u
z_9sa0kfUGeCOKnu#bYOgUw8uw0F~y&l=H*>J(wc(FjyX3Qnv^~I${?9+F>9E@#+mh
z%JVPv=aM`@sxV63Lx4a?!cst at 8n>zY0X+Nx+m!ZGKs{i7h8-5La}G{4g9Q-f5G6MI
z177lZkbXOu10*Ek22-{za!P&}C_{szxd~yRB&1;Sh*nAE4o=*mPD1-(EeeBCt<^M$
zqbAychW1LL+$aj&A)gXQZ2xFT2!q)|4zHSi;fLN4oZ$xo0<X1dizwYF9Lydr_~8x8
z<yx0cHLmN(S_7o~fg>a|7-EPdUngdim`Xz8{^7$Us#OLo(ImC`PWZ!Hg__|s&FBdH
zgeekni8f<m1svE}#{Kbak~OPtR!T-czFk$MLW~uT9*1bAAKhYTFj24Sfri2^WC4WP
z{qQM;=tR{mQtbFAv{{uIa}#3(kSgZ~j}AbJ*Q-20UewQNji^_-HP|K_9l;G&GUNR~
z4usbnrra!`OE8?T at S|Z0Ynvb<LJ%IV+#bkQ!C?Za|L}*6FBGq}N^6lZc)IEzj4_aB
zI9QkzRi!l;TO^zshRf4GxXDnwX5|(su1bd2{@^x+q}@%qRbc{8#EFEny3q3S!wDZ|
z60ex>Gb^_p&W{sDf~}nxu{41Ahv5;7nF}^;8J&<aZcXwjA%IUn`XAD<U>k9jNHAr=
z7eoNGO%`+zWLgLg#SbV7MwTBqS&bV at 0ad2w$lQx6#eH(;Wc4S1Q04-pr&1SgLI>9m
zXxP+NPC{)#eZn<G(gH%@)sN{6Qj1XixX4G1lhps6nbQ5fRDWf at KzUb>EFeUoGMP`7
z^4iIJ>SU2=@*SY^u-5!8o)HFhoidleSwOhghxkph&l>eZ^ftT{j*NF?c?B~nniZ+1
zOwL<EYG1fIFHK;mq>@SRE0}#yjieq-8Uvsl8Kx)iFO-L at Ja)+$Pf+J^%L|C((Soqh
z;Ly16aBgf2IE=w%2^t+0m!RS~9#sXoQ0fXKuxtbqjEzhkAyb2>gii!Q)(UP^6VYpY
z9~aqyD6l${aB^}Z4Nmo_3KDS2jL?6xE{-6E0?Xg5NznvU1+l)X_OYR$Zc9OkSZrOV
zka`m=UcvGvuiC(j`<8HnJJ}LBPqOg-T59-5(#-#A<X;Mbx}X05+}`f{27!V-T%Dcq
zbHL%N at +W$X*)v at oT%7Ig?VTMlroF3+qbtU6{=Vkw_f{N8WU&ke77J-%YkIS`=QX|i
zFMd|P`ByYZ*L7HEf@?hg-BJ1c4+m$aJ;q?xwSm7=?tgs#r~CKo(LlF_E`YE>ub$lo
z!sk}_7pAQSf2{*LI>Lu~gqNQehV966)tK=Dem56&A1WFo2p2(W3NGdqCV-IgUg$i>
zfe`hWH1-U)6Nb^>`1cLy{^CW^$5*#Y*E at VYHu_`HgKwLxUT^F7_0Y&mXOF+Sef;L}
zKi_TYQn?h9NF<*xFDN*+;^VsCz8(n7&As;V#kGp{Z9m=GQn9xAtL+1y?BSPh_qcQT
zk9qU{x_ssC;lr0dynC^7<>Aj)S42gvdh at 3E%$b7B%wuH_kA1qa_R-$hiZw>>Gp+C4
zIQ#lZVd+-yqDz04-8&c;w{G0H_18~soi%G$*~JAnZajGW_~qrZN4_3rzuY<U>gnB|
z3io`zID6Z+(-+U3u2^qgk=e5F$lNcdfB*38^5-?JDwnB$C at I>t>+IgW=POreS1i-~
za&Ai5<1^ouYktX_a6fxW+0*l-hxy;OyO!_i`Q>C>`Ch*(dD&l&hP{0L<m*naZ&{rm
z7hbq?=SgvK$=&R!A4-cq<Zu1D{<rY(rC-h at KX~wb^5m@(CvH4&;KG9g;~(C;UAa>4
zL&@t8e+~Y&+2+}^*JU^V{JN at fM#hnkZyr~yGktt&X at 35r&#O&}a>g%Qc%UMq at v~i=
z^4;A(pPx~&+VIYqEyZ__m#@(Mwp{1SiCD3CbNPw}Wsgo&tZG=XO27C-^5)GaFI*^`
zF(d1aWLIkHwvytvw{AWDwuO2A{OwO`EtW0Iu2`Y9V at KYHcdsWUZ~IiZ`_t{L_qp-k
zwmN>zG#@i&#h2C1-oJnU at ZrPz_wPS=@SwD`^vRPaj~+cLDJi*l@#52`Pw(Bk_wL=h
zw{PD*d-m+*%a_H)#m}EVfBg7yQBl#QOP8)(xpMjP<u`BMeE9I8prGLT_3N)+zkc=V
z)va5%?%ut7?b@|FckaA+@#4e#k`M1oZ``<X_3G8a!ou6PZ{NImGe1B7+eXVdbM};$
zzW?z4T};gCFUMm(7C$d3DJ@&m`qSNgWsgsn at 9FU=f8*09kBT1WKe}J|b!Ee&xdopy
zT9oe}Sa9RYr_Ihwmmhoe>g~hac`x%8yga+)>t?%~*RM{WzN7H=tv5xlOWwSES6uwI
zVE at aP&&&7tyxZVjdSd*$*N+QMWELNexp((YY00~?b7}7{uiCirc+sn8<$v}4d^8fq
z;$$Qk3gq!cG_c>G%Kz01yBpHI4Td$^+N+yaK;o^?Pwp8ZALs)E)YJ`+ix0+KPKhe*
z>EF<hrS>YnLC3vCZM at uBSc9#cX03-EN^JM;ER7z?YU%m5_|1eZ#!Ys#Vu+tV$WQ7x
z#Fp;3X#2<+7CYm=-i_<pOu)Fs5Myf(bDr7UJ;E<o^`Ug)_Mn|fk9I|Qrk_jk8JAE#
zGJEp#PMU_SJqfSR`e at zUaqm?2nDcA69T(Yk+S9Dp=(6>9azcWROdYxoqo;kGedl0&
zM at z$`q<sRKQD9FU_T^PY<B~)BJhN+e#S+>Xp?NzY%;w-F<GZOH1Cu*>^INHDXCzxU
zxKSFd<{4i!z+$GI7;Dk<^c%W|@ngxh+wn~{&=_LPOFKKdmbMzD-SBF=LnG3z&<t53
z;p;<#O#{7O489Z~IhUPqY+%oacm7&v;t0KXIy*>XyTM*tE#tkW20OkT`2FjtS?6XK
zsZTF@^5o88!;z;h+&<nX;GKpc%PIc#p$2+65B7^L9((fDIJ$7ptg`$P=RP0J3UnJk
zd=j)18)*Le$(<u<+E=08Q?r8(glV+Bax-P*U!x7)hWd}Uqqj?2c_<@&ic4f-(#<C9
z7A)*?{?4y~TUoY?0xh_i8ix*@GnP!tN+>Rg9^NP42_UeOli;)4a8Z0&d<JI-t7Ud%
z6XpV)<p{oUuh(|Y3Ybn4C!fh4Yrgf(ElrX8gB#7D${Rb!h=*xUYsxe#j$UQZXH!S<
zp(u3(skPfULy9j1r>$Fpt*77hD`lH!o8>(U>XGLr#zHfqtnRNos-9qVzw at 3j=LLFJ
zEfUKNM^B)s8~U}(o}W<grQQBPw717TGf!{7rT@^bZAdF<>e^1dL|5Bkb2>_r at 8^#n
zdh)O5hG|E~8ci&P at h_UKvHqOTt7eb#k{DTI%&o&FwbIZtJ0)PidslYmhz?Ash<*LU
z?!?ZHH;(J>Jsv{4yE3tXx;8^|8FY?QY(1I2D4OmW^|t(pXZls9-P-|&R`!4~tl at aY
zUE4WjXpfPBJ}dSn9GlwilBT3_n)ch+ at xRg44b}Vx(U^nZ<lOCnr5foiwhjK{;rP3L
zpMH14XeU@#19HZxZ{ZBFN!`zXko)JB*)~)DI$@68%d&tzUD#PVJ7rM2y$#Qe-+0`Z
zKEl1nvo at nOV%|;JFij2MEqtx%UtDzR>Cl+Ldh|ZVw%-oKTpif-bjh3CsJ6u0=9^+|
zwtE|E-`Fu!y>G$&-^ZNu-9KimK??NhyqV`)M%%%mW3Bh}eG;@c at mOHUoxjG~96F+*
zR at m7LL7#`9Pv1Rum$7l0>0-5(UrV*!`kT8OCm3ik#3qr;bQ7D|4V~;b?p^e#Lxv-B
zZEvT%%s;<hI;?E<-Rm&kaq+opC;Kpljj`Lz8T&B?CLwwKrjUYAN#H$?{mUC}TV>#9
zWa{5Co39n`Ln9tO`Z8tzXghz7>BtGmqo1_dIQ!)F<1}qX3-|brZH at S&j;N1I_Ze=J
ze$e>wmzEs|n4O#X*XPnEs7Fh66J6OJ at vZ|uZ3}Mr%KFW%l$S$a6Jz08-M at 3h<Z#hp
z<1+)MHA~G-dv%Ok_#43L!s&1;fYm90w0E1|-^Gr6V!ZJI#(SM|o7tmmt%va#G}y>T
z`8Jm(AJ98o)ZoRKW4G+nZSys?wQM4He!vH`Xp^`sukoIp;wP2^4u`d0>+89netl=Y
zrWXw8x7jNb^o=i<-VE7db$^y^aoXj9JtKGIr at kC&je53rI)^=L%-uVBuJ<<@=ET`&
zF5IpCFtzh at ubBmQn%azIZt<Nv4Tf$kdK>a>n?}g#=qaa;ze(LV`_AM6<ADxr%(CN5
z56y9yWb{(I!7|Pei<`V@#u*w#x}sDB%tf29C00Y&AJo;ij?mWe9J=YRGLy~a4(~^4
z!jN-!&YZjJQtv`q_SlwtcIs`p=3?j7 at yMldI9i?y$jKgWKJeh}gL>CHEHASeIk{5~
zP5)MdX_s<aT at QnPCv%3F9~^XUh;?rBtV7G=y-l<G-1j!Uu{PXcPpgJ3%>I&t5r5>g
z!jHasL+|>G3CtLB?Dj<4&VQ`c{Hvupu&o$t3z*7%Ast^9+xO0j8Y;d#D!)wlYTm3v
zBm$ia$l^J#edi=FJ;*WGJ}fQJT5XF>$f37xX<HEP>pS(;IJEr6`O{|BtP`J)wA=V-
zWL99=+9{?x%kU|gx=Eby_2mbX^BU at IyBf~ql!<p=YdG0FZ_72nz?ZXwW-fR<+uSU>
z#qn*2vM={AoU7Sj at AfWff1;`b60Bp}#56lpbU4y;J!i<)QL|6(%rZW<_KB7~f!oIe
zu-E&xp6Z*I_Vo3aC;7KRiz|xP#$_*BbKwC7)ZPGi(wh&LtRi2STh9(Un%LT9HDht0
zr}1mAXbb9jZo97&*9LC1yi at eyEAuP&`K)c-#~AbP>7C<Xv~E$STlp64V|nO~a0wN@
z?lROhv`fXQ8y26eoB{5;I0H^w-SC+<&wwNB_;%T6&nyq)bvyP)>Nw2-d|22ryT!J9
zyL87*z?PN{$BKNdz2 at hbyu77zemY_{&~v`|_LHwAIV<-xxi#R^^t+#PBTru#p~gc@
z74;m}sj*E*WQ;sY+iSsfooY7w%y?*YJ7+*23HKFiOuxYB+&B4to(VqlEpCPAzdhv_
zS=wjB;_Y{`qR*sUCz{9_+j3*aEPD2cq%wZ;tQp5!96aYDxcAq%iW287#>ZMLDqXaF
z`0m7$bE8f-Y<1_a&=0+#fz6!7Yc(IPch1>cHk<2amd!gJy at a#4$Q_vJ!wDl6<(k^e
z3 at jRXIPB#1)SR%t-rc`@(lgMO-V1fQXdo?bXI3Nq1t$*jzJBD~o^4$~f91P1Nbl`o
z$%t&uoi7?aW=E$ilAMdT37#1l53lfMH~5IrdbwLJZYi0Sc6^m?;uz=goqp3RZgopo
z{CsblY0a#M9!<P+q~(af37Rho3}$dL%a6n#KXOv9Ve8I&3i{@pKHa0`trH_tJdEgu
ztW0;8G%fWLlg&F_ at 5@}=a+Glfw_VHhtv&Aa?rD~r>^^T*QpbI-M|Pg{c4yJ at kWDAE
zXqGMY-mJ6nZ9NZo+B~z4i`C*=&arX|G4B+-byLWr^<NEnU7UO#T8L9d!HYvXPbzbn
z+=k84&77vUht)th(TpKxw!A%ep2eKwJ1bfke!ZU4>8(pxE775lf~P)ObG8oM_51m$
z3I406tZDkT&&|=zXc{vO9-K{hxoXuaSD&P^kP#ns3|S_#gO)B^Vma&h&Ss1orEQaw
z*oL#Gm0euDVPta1-FfZK9Y5N6wXR?8b^nv!7!`-QcXZu4;^@N{MSh1yuIkjO%T!iG
z!CGty$L90r&j%9c9EzDDb_ at GTqiY}Ed0<16CL8X at Shv15F=mEvb8^g#p%W{bsy|)o
zn_<$YVLDBR#}2`M??!)e`=zm6;W+-qQ(Utbg-w=E7|;5Bg-_D4<~p>O7lnP2Tb{d9
zSZIAD^sa`1_QpK>qu9RIFmAJs^Or2y_{Z^`693b_W?1Zn9JjGu`=6&@xp8U11D$@C
zM@$lDioE)jrm8nzj2W0QX^!*S8+fE+n|0$f9lDg4^JcYe*e9YZ^z`}Ab_u3TLkA6=
zJbKF!%#-0Wb~TRFXEd;Ar?=?KFpU}416#Ga;T at 8fd}W7b+a+FWo`-4#FxA?|8=2h8
z9_ at AE@w5FpZEbR*pB$YX*4fl<huYK;NiS`ZM{S<Ae|Ga;<BcUdF`Bw)YcGqYD~#z+
z>`d&OzdXD6*xi5jT2KF%ug7LwaJ1;u$+^Pt>SosE*B?qZv|=t8J^9(TVZoX@&WuF0
zu(72j4#(6bIS+1)uV~OD&p9VHfZj7{(V|5uodyRFzokEKQA$(IR?Q|=s2eqR{`m1@
zD at Kc_L&X@~BhbB3!?1}LI!+VnGI(@daj)Y?=_X>`WL8nLiMncow(7OEJpSxk`6euL
zXi)OPZEkI^G2*`zmzE3{kJQ#@X5CKA7h5;<@8nrrvde41EnU{b)vbpgO1Wla<el4{
zw#?5eWVVJjBZG5COl!YmU<f9fTYhn2=jqe^tgNoEW;bf<m$zjjrk8f2WOdgKspB_U
zX}kPp(o^#V?b}KneNDsm>Q32fbo`Rc=>9|cc&SMOn;4%M*(p62Yx;Cyj%2mLfDmo{
znEtkDtu2Bk{jPRA*T>-bkxq<Yb#iE}OrEe7ZR&Dq>HXZCqGuQ9cbGoC{lp6Eo_()%
z)v-1gZ(nJw_VLf5=9ZjxMk%`Iny+Q$R=mErdY at QSd~tOT$%-|9&GE>abu)Rceynbu
z-^dJc>4?2!o9BOi=9A=e(Pu$P>cCX<wmQ$Id6$PY)M?hhH)D&L*QN$U+b$Zzv%1jS
zTMRd`bWTqB{7fh0)2gpJ>yu||w7Y5+)5W=r-Z)vSh1ao|mk}cyX09D>aJFTGoclYi
zyPt6 at oHM5rHsp|LU{ry7le{a##%7u>kpzi*U-i;h+Wf at 0zI)Si89D=dUZgMFnGq8*
z)!i5*nTb#7K6}&_lr~`58_f9BCFH_Dbq%JEmD`hwkvi}DUp%mS$FZFa8us&y8J;E%
z at b4FzbBVTS>K4{9$7Yec-A3DLX*SB67HU0H%rad2%%LaaWpTX!+KI={>Gdgk>u7!e
zYigUqTHgN&ORqZ<(`HOv{TnOc41E}5_>*ThPjpiYiA+dQb8E5WH`Ym(lmE*%7dOR+
z1m}(}FuS?QB0cv$ow?uyYpkY?{{Hco&bGaCvWT_Id2~hj=jI9GtshUGyGQSEX6x#%
zM}5w@{MK{yB<)Ox5fdx^n7r5B#OsV-Qv}V>PaV{C&Lzzki=Oolx$u(id&o1r$u}W=
zsP+m`6M<MyEyM1jvDe6u2E4eS3Y~_pT%3)KjlFsn$E4ETZmbzPB*3W)mMMCA!H#j(
z?76w|IR8sgL+3Zh+_l*HM!3f3gzK@}re`=E9_Q1zZL<|d$;O($+vapCQWsi-P$Je#
zb>bG-W~8oKq2AqXWAk-%{rls(UTxgu+5V2_TG0Mnwjd{(?t8gIudET>bti33PT8U{
z(5QHSKtRBLajMoxdQY>0V&UZ at Q}o<}a(F#V9uM$8)<IL(<H2ezme;fWqZ_o}IQ(+Z
z=iM65-%eeeK6OQy*?wl8`t`|-j@?4eKU)pUW3jODA<OG?DtNm6wsd_)yAvU5Y_|4N
z?_=r%)%Mc-4AnjNwwO1l=z{knT}`t at uak>PudnWN({AV?Zbv=KKVA>LztHj8>ObPs
zXXsvY8vUqHr=hle$YD3VfhOVuS-JNcA3CT7x{ANK2F<Ts at giC(%}tygGEmdulCNW)
zdT{!bkJjn8TpNd_rDzqJN8Py}y5;xFU#5IDK6d+6vx%pcwlOnR=kHUC+rNi(cDyIB
zzO`M8Z<kow_q4@~T)r{xnCDG7)*q%X1T)suywW~%@MPAkpruXPXC at bk3rm``pFHud
zBi3i7W%^;Q1s)-`u_N26=eKOsd1Co~ZDz=$BWfB98^QJa>DqyT{;^HRURmlkHa`91
zjJQj8lNW3IJ8z^#pB%rb(oH*`_Tf40FJF3_KU?%%u6AD3)V+&mNX5Z}J#=(*-sKcy
zx~ap*b`?xF+c!w;iD-p2MQr%dH?Xz8RfA)9j#lPOWIoEFX{*^{wC($H&N#j)*z(Qv
zX`5xAzZ#5xSv2LNwt<=W)f9iN3{hdpoFRcJQw+?OObc_^Yy`8zP>*gLqS2&ykMUeF
zQ)r^SB-O!Xj(u2av;7PAH*w0^6?>=rvtF|ctB*EW-N at 6}+C1E}4IouM<{0P@?;i5`
zPZPg<ZRgBGZIYsnwdh&CBWPd9gQ=@KCLiD*zp{G7;x{=j@{_jQSabgUBXwxZKjw?5
z+3X^k)rS6MTP^tA8s~1CYu)wch2X65_dwKWW~((i=*YO1tNeIlZtNI!IPpx%lymzG
z3)sMar;a;tpe!bj_Gj9Qa=PQ`cazmaF6a!v%9h;NK5Sp~v*DNWTPNoQWrv?%)^fz6
z=ynGa8W^&!t=77IFtSzFr2V7Mf6?f(*S{bV<gO!}#kQI*v_+EOL&6T%XK89PvBrH`
zqy}IU`-1ff>jm-2+r2|l(Dz^0e>()~=l=;sVMNg)6k${kz|`#jVS?+=MbZD~-~bMz
zU;dwZfcU$Ms__39LS=@y|HsnCU=aNH9{&$EANhZ-zpUK4dF#o$m3MF5y?*8T(~`=Q
zr%r<CI&=C=u=J-Ur#^l7^!knKD^{)u<*rz<bjA4#=MNt|3=V|rPb=TNe3LpQwRhiv
zCm&X>Sh{E2gmGJMR9?SwUN}~`b^F%LKQlwQq30idJb(6l=B^bB<}R>j+6%`n*t-4X
zilv9ax3Fi|o|CyJXU>|Lxh8YZ-aV<C?}9}h26Mr`^>FyG{~jYf)_Pe#b9nhZY1?Mr
zzpADdr=|@8m8P0n=Lv?FQguPw_ZRn{W2By80qQ_g<|WYXH)1R-Sz`$cv%(Bn44O{o
z4rAFGokwM%+v;u~_OMv2Ax-i?HPloK_w)0k^=r_eK_l}Z8#OgpdYPBl;SVl9zH$G?
z_3PZLE=YRIz}h?N?Owm#)=_V{nLox5i|K!O%wReH0UngzEE?zpx><TJN`z^n9d*yf
z(lju-wq?e}hEC$S!2_qJ4(M|my>jE_^Q<x2qi38EX6=0bvIX=zuceiT$M8d&N3+I=
zkuebS?7y_nvOdioio}>2*4v_u?<MVN3t;@e)(8ZI|B9=={9ifHv at SrXh5s|1n666v
z-_g+t;y;*msr>Jj`Q`st_W%DF{;!YtKTHnzx0f!Jz?ZEVnqA>Ton*Wi%WBhm_&t{7
zr6Im*ARy;R)HNjf5(b!y^(BA!V~e=qU=eR?WS9i}h~=sV_8 at iOX4^G3r#5GZ?@!HL
z0Di at Jx@nzQ7<&mg*i7iabg$B{9 at 95uF?}9 at J5jrrMmKOHG9|z_^?^02VSfGTVhf+Q
z`=Rk)jI4h2PXssHz_!2oh=8 at wKO|F9rhf+~Cx>73j}Y`{U)9Qgn$U9V(n>abXomLb
z(G9Ca|79HBFdy#d#Pl2{#4x=k=pPMRw!#E%YKeOJb=SJCr`5pJFh42W9d5NmkwQMi
zVTYIxz8f_RcCN#bxdD)KvPUmJ|F>c7qA`rN1#tnla|`Eo9 at BI{)2XW+9kb`h-SO+$
zv~B1*lYnmYid6BGweiL&7HJDV^|01xWZf?FudFOX^|>dqPFXy0nXBGS{b*i`g>g?;
zaCRodN6goGo~$?R+=SJotIBjMhgPhcXndvA&@XjD>ck$yCmp00KYUVZn)7ht!*I^b
zHjXXBe{=0Qrt_C!rp^;w?);u$rz0 at 7vmRMEY5ZRG&&|@4()!u6gZA#bxx at S50)3l<
z!t#=Dy}uRp5gZUc>8y2IZ_oNS4-48{xiyBdtOZ at Nz^BKY!Sp>JlXrNojx>9|>*_ex
z?jv4Z$2bny_eT5vg|o-Uth-da)~noXZs&F-&fRW|^^`n&8?l5RfA<e;^pfTc)6^PY
z!zR){ygDICE-Q|leSS_?_oOdlyDUoHWIS))d at r5dkGsso#x{L)h at P<^dClnk;>4k>
z-ji9vu@;LTTzAV6WsUQn={Cx1SAH42u;t*Ej&J_#bw5q)x#adJ@#evBw9ez6YkZm8
zFgM at r#uZUF-()Wx+;H^R6erU>CSB)STEIy^ti<~0UkCS=Pp;guTw~8hOKea^t9}Dp
zte_ng-&><~-)_^!(=9X2+>Bv<fALQQg#XW1{rG=qFzjk%N3;1!LT=qxfLi!J)5%#W
z{@1~g$#ne1|NjZRs+Rww_|Lzi|2IbRUrtVrSS$wlkI=oL%A9Eh at 8CmIs(xd;k7gc)
zJ2NObkjw2x-?|lKL9s2aEo-`ANU0twZZv!7Fp%ebG+3DVrVu*l#@+*IjX<n3(NMRR
zuyVjJ>rYExXf3g3f%xb at Hjp9C0>?kiqM_4tja<4mV~MV@@kU)Sma;j7c2KOL4}#<w
zeO!4 at bMpq3*ktHsj3uUF?dkN3i5J5Yp;!O)46c6kFN7_X!up#3 at Ob~~<G-0qCs!vW
z{m&k at 0{o(XgnvK#`f2oUgy<g(Zl_M2nml>3JPSA<-`fp_r6pwnl~{{DYQAu58N~y9
zkS>Tt*e7GArr>SKvQMQoY0}1!xpNnUa*PyfXfF|iqIV+aly2xQZ=)>yE~Y*-*$POy
zEp}P`I`9G(EierW&;t|O)+uA?Jg}~%+ZfU|8Ux$V7Vp83Q7p`|qY2YNjJ}?4$>)RW
z*d#=43;h=G9eqRNj)ij&7kV=RDUBVC)ZL$O7Z;-W_;2!%)Q|o{gJFAG-4}iYEVyc0
z|DBo2`#<b|>3;<1e)`{^M*k+V^`9^Sfe3)iK=`F!JVOj$v}G)y61$svco^JULGged
zI1gBppCMk^k|Ac$`PLFf-l at D(5Ie4Ksf*}e{d(?&Q`&TW{%iQ|m^z)No*WL6LSJmO
zwx=fx^E!_Shl$6>Bg at gC9Q4}jty{Ogwq{8#T+rP!3n~@ULw-}I`GI#eO?L_AZ-Al&
zp0MdGpnpT7p6c*3=kOWbHAslK^A)3MV#c8w#n&?@bD*F9C0w9>^iO5N3Wgoobyomt
zqknq`N2T at O(cb0P`j3$8r(Y`Qp9YO;(vbY`b~ij0KGaB4?uOqx--4fdh(b-Saza?}
zLm#90beMe;zWtXF1RBZz&{aSB4~6_|LJ>;VQXe6pHu`sTR+j%AkV)W||K}gTLlyLo
z{67tF|NmlcD`e&SF8{wK$u!{oKO+uYgbzBt+G9`lF?++WQPeu$4fp%xVG+qR7Dm$u
zvDSvjB?iq>&l_AjL&Y>JY%OU07CD#^b_LdXqmYovmoeJpHFV0UGXli-<1OLVgMnzN
zFVjOhyk{S5`p%ZUbD^bQj0pjunyY^FFAR<rz)?2!qW;?De at B-p{vUhiU-3WH%-D~;
zT at C&J{rDdplKu&yzmIp18_;nzLg2 at 4o^9X-Ke-eS2n`Jtt1)2Hm3T>VqlV&6h>oA8
zc0+>q*=bjSw9S!9Zs~!fe*C-1a3Fdgu-W16V8t&hK-4!`r3TS7qPJ at 5CYWd_R&XJ6
zYzhM0f0OEt#`CwY`q4jb{};sIsVeK<bZzUuv!lI|{O at 4@YyGb~eE&|#pGN<ti2efx
z4Hm`4O`kD+<DW|o9?F(TD!~w_PFIH>7j<2ObPF9h6F?<4sDEN(xVeMm3y at wQM2p_g
z1jW}eR?nT1+|m}Q at n*04`gd{c*d`rp`kG5RX?b=`4}FHp#4}bKZB1D?W#!zJ5Gi7k
z-#ovdKy1P4VrpvYsRhEtd8{|RyLf!o8f0DEJF}%k%MnBiE9{vN%m!*JF6uTyF?c4e
z`3{EY#>mbA>QIg07jp{`JVZvOl1^FL$Q*h6vtc6$vK#G{*zyDlpH3U6dHL-fClp at z
z|Bb`cm;TWajP;TI5lCvIf2S(zzrBmYFZ~~Z?x$Zrjs9`_-_r2#%B7B#;h4nH5sZI8
zAWQKP&AlXf313v%|K?IM0dD`xxsa2KJ=>YJ8*~9RPrWuBO&91Pb-?mmE)Z*J0es!M
zLZdDH0V>d~tH1i$2-ps at G1;0a%!g;&>A!&|K-&?;;+_!u8<?Y4b0jC|1J3JOfOL_(
zviTb(qG_7O{qcBYt#R8f{yIS88DC+a2@)>!v5<qBae4=OAjb6njk<AQ*Z8Nt^iQ3i
zP#+#p8~r=GRMr0>&iR-AU*pXEn1?@&{=L!qUr~`<@ip1eF}&hqaz$lYWl?fPDSSz-
ze4kwLCAs2laz$Bk#jE6sH^~*Bl4rBA!^s##i%Ok^;4%oTNa_hAHI^3>;I{0-XjgI`
zLy1Ks-!SZs><J9I2HhX&3>MxYIc;-tbMnp~YX`rzY4Mu<CNe-+m~5=+8$NMVD+mb<
zHEg7*=0)@E;xaLi=7pl?u{CLFj6Bvvn%4jb7ubTSH5!1vY{J+Kb1Pj4Ej2R4nnES|
zu!D at SL<E4qFcrlXWH+UE>kfGsNRNRNzp-T>r=CO5Z2cRRkNVNSFqk+px<1rj`}*$+
z$=($5|2a6=+y9FHL at 4vqub)Q$d_ at 0}lP4vCfs)?6C979U8aI|$SV%T+mb7ap(bJRU
z<w>-(Btb!vUArVqrlem#N!P9t8ym@(F%nNt$%++{W5*=JhDp at bB^^3QHf)dxg%UPf
z;_WRlFpvx!DDm}uwRGuykS}nzB4m(LUmvCo;A&efr;zas^bH$o-Jk)K$0JW6PnEwW
zJ^Z)k?b;c42{$wasei%3?w=NBh;{OiA%UwI-_Ff2#2;eOHMzWYZF4q4e7SyZZ%Y<f
zAx)O}YnY(SE8Tmw(y`nLX?9ZQ&9i9i{}3?<U@!F116cIlD58lmbF`%^2p7zC#V7MY
z{O}sq at H!i*79Msfb|*GLovgPpy0KpSN6us2LrH}4&hgi>3}*CsC(cLi$Hh}yia+dE
zGecPMgP2ME=sy&46^C&X>qq{z%m1#*{y#_n`b+*tv;5PqpGN<<{13r at m7wxN{GY at T
zh5}><=Lo}>lu?}q!iOsPf1#56Kb4LIdCQy=C)9KM>Tmr+Vh!H@$%a_zFkHab$c^BD
z#Giq6?AX!JQT%Bu9t_YJyRub(E29hA8<$}v9&d;(gUuoSM%JtxT^BG77=~wg;~PRC
z at fs)z5-k*A*jHn+0b10T=xVpN1X)4ehM4K4(K=w%fdObfeh}rMs{Zp=ed!;L?2Z57
z{y(QG>%SAE3;rel{{!fug8tDeO8EcQncdTcA3w$aH;AJ1$#jsw#RFg&WP_rJR=vsL
zAt?Wz_W2xbSY-{DB{zaamf at t<hJ_vLjtEv0wtgLiFVPL*jvrc-mjt2p(a-|xzSyJ0
z6~XPlib~Ode$G`-`VR{Z<MPRqjq2Q?+Vp>yD)Ijg4!_p_I)nFb6;wh0KW6`@JCgrl
z{r~H)zjp1~B at hS}FJ3GXiK3&Ug+d{0a*v3J*t2Jkx3_n4a&q6keP_&=F>~fjkPeV&
zj$t0d$4`fkCaQ&bY}bTB#HDUfI=?rr^Pe!Fj~^c*Ic*2w{}BC4i|=A<>&pmz{IDrF
z3Npl469c<uCfda%dJsemd-TQAlACRuvU>jF)xp{*7BD3xWre;OD`kj(dVjcKGWnDG
z0gcb at Nr}nh89s1>Vf86_w77%;I=^~j at y7cPuq_}hr0LRHWpwgaM-oE_jh3;ru#nNH
zi#dq>I$1kobW><*{;*+zrm-Zsp_<iw%}o!QL1)r21G}S)rp2fyd4HNQBD|S%43X7w
zTx&)SmSowmSLwEa>(IphY&KRu`e(<&sXM{3qWZ-E*GB(N4ps7hIJ*4O|IzgS^h*W(
z{|1d3<MBVsm$tHpA3tUNPoviVwn+9?8+#U+<K23RvD^)RB-3p5VC7F7eC#?9h}y)#
z%s9}VSuCS~mMpB%3k at -5F|av&+oaDBrv*S3;%-);rCTh7!gEnQJ-LukGt&V at 5j2Q(
z!iJy{>s?j8#l%e0)${@`2QEjT{@K)q+W2=}-$Va=QEa^|0JYP<v$Flq at z?tQ&)~^_
zjQ*#or2hu6wk{3}$=T2l7GT58#hZ}zt?l5%Ylsi*vMPLusM`)0h9aF;%MRu_m|@nC
z`?PxUZ$4U0 at 4WUJ6xjSfNd8#;=wBGa=5Xsr`~cS4=-;7A{11fx|BC<nM;L$#`lms|
zkW3N&TAp*thL0b#{?m{!kFlQSBMYEDMgADX&tMSN*FS351GxXcNP}qD|Ea5f^v?zP
zKh_ow_N-TTYomXsD*6BHoxmmV%l=m{D1UEZ8b-qm4Uy6h1P`>2BK|GmAG*VUe>4n*
z>%q=_{IBvK2?jboGVCiq_<O(U3}6cAp9O|lz$g4cU(pTxC)~h)N<XRlWI5_Rsvh*J
ziVON(d0(rtGDoelQcSDcKU5aIgDw?S{y)1_Kl&F2$Md)e^$h>5b^UjSU>_y_Khxot
z{r?}qBo*sFGWqM`>;J*mUFX1$?^^$dBm3XG&lN>w- at aB<mRD4MD6jbVt at 3fn*Sl}O
zy!rI4=;OB+AIfjO`ttDI*E?^%TzURE|Mi!z-zq<qSAO_fS^A~o+57Uc@``VjmG8e+
zfP23JCpg$jOn`;`+UE*<Yo*#ih?gb)V6RQgMnTC~Qs78WrVRtbK>FNy^X4sBuwZUF
zg#0oFwNMx5g6hHPz56UE7pZ?_I?c~W&vII)4 at SAXv|clN_YwBoeFi<!- at V68t<7Sm
zZ2XZn>srY<{I;Ij25kd7*VX8D&Nir(iRol&mv;-uDn~v3w^|nJNB^N=!O`5r`fdQM
zZT)w2tfK$BfJyMz`i~IjCtoV){|Ea2!1WJQnEJ-CISfN_|6hMf0l at u#Az at -BIP~&R
z#vbhx*lzeM!FIymTx=KoJsW~Ng8Ly*_t<rywvo-?%XuK&{b#@~i0#$`qq#vL*8S_M
zW3v&w{;kCJljrh#s;?*g2Ma^N15lsjU(l&q>7QAJ{v92E#s7ZKbk_SF74-jO)_;8e
zpEQ!!HpK>c61*v*Pl4=Rp&_AS`freqClopTy=f>g&fc5W1iWQS4efo=lg5ymqb)?<
z5?`92XnZp!Hp}%zRxdQtUvysY`Br|Re)KO4j^#x}it4EV)I$IE at LXB`|F!>Dd7^&O
zZx!_aWBmVdNd8~4B=ga;lHGshOr1Jca`AR~MMdRb{VTWlR%Q<_U+T0jbI1F#%A6F-
zk83(*PjTA5Bm44$%WU?T{M*l-rQ1BbcBt}C){r6W!jHxGXIkYwxL5YIlE)Kn-m+IH
zoOI&!6+gc~5H4VI0bGubj=*aO?Vvn#_*8&a`&v~4sg{7H1}-juSMHMR$)CtS#>qQ-
zHiZW<{W^IL4!iPFO+Z61N)HTKuz0 at ObPz-QS-pA<^IJB+->;Q5+G{Yn_u1ZO&zAUS
ztOtjq{^+x3S?vlP931o|yRMXshIgBWJh~sk84zMLZ~lDFydmJ)$S at udA3rLvd2{<T
zU0{g*O&UFYya3yrK5ZjJ7HB%t26t&?G`P8KQU*N(e?DmN+yw&%3|Po{_$)L%!XIi#
z7th!~W3xqmV8#}ZlPohfuid<Pvvw(Bq9>asvy9%1fO=VFUGSU;5v at j_oHyk(LM4iI
z){p){{^vytK?3-p{y%3&<@jF*NC5v!{zvolv#*~<|M>o2S65d!>>JMSK700TOiawV
zbLSus$i>A4MrBPuyBj`K?*H9M(&2p;o*U#?Lrue0rdnDcAjD+ta at g(Qqdqi$s2jrf
z9Eq-a3<Tty$T=p_4>+cYGQ^v>nV94c8)gVjg%j9SJ at t^|Xgf}Bgc`kJ{BOVcHUxse
z-WB8z9m=5hH3PC7cubRK_WBR}+>GVNriN)k%D|wrXLITMG#Fx*t;RtklzqUE78t%C
zgGVbbNX|BF2K1THr=XyDej{i`6H5=$+<3j^y{>4wDAGdT|Mgcr=|7ko#{1#<KV2c&
zucH0W-uajP|DQpfpGN<QX#F2Odg=D<50{B_){i$_27CVFf_AURaviij<YJ#sYX*)o
z=whpRe|_`wo*fn}Q_uO6mgmrLdvo;%{vC=#JTJPpJKe#k<S3Twq?6rFYgN3?w{?F^
z9Nlz`zv0y>*yUAN+BB`x!;B!m$ksKqi4(H`UPOKYSk at ozoV^HsTh?6!sKkzJwnbU&
zS5h(nzW-P(Y1C-&5ZGW4MjO?EtrLe-k^9fsMva?+Jz}!h!E{3k<_S4Qk7+Cz{JE)n
z*syDe*IXDfc+mf`cO~#p?d|`}Vwc7eDl(QNOU>9?v<xAMk~Xcz*die$?PIK2N~9<i
zg(Q`=sMHXWrgTfCg=mrXqN0ue^BdfIi~Dz{%YEPXUZ+py%$c*F^L>8L`h6r~=A!NR
z#~+wuIj98j3h17j2rCll8(}Z_7>fu`^xcs7xSqS<7mH}l^`(>-Q0$<RSgdtHbgcr&
zyEF{inT9~pLuWbR*E@<;$D3mE(aX^%a)wv at L+-DKr;p1jm-T<11gIDNANaq2tpC-~
zrVhma&@=A$so(I=<^Kl%A1LR)dI8{SOx91h1Rve`zqfU{2DtUR><T;|iC+V>SiU$m
zlaE73EfC`{5si6J(L-NsW2ejg$sbd}L;R8`L3eO)vI`!{EzKq4NLOGcO`WO2WeVpT
z%7L$*Lqs)6&>$VkeHbz#u;-%r6#R at RpaKazh*yCDUa-<|8LTJTSStX&d$ATm^{KD7
z{_!aZJmTL0H2_>?=e3R(1E4qj>v#A6p_G6D|9`)uAH(_$|J?lluaB7D9y34JGe6WY
zTOKgmo-jYvGe19Mw$?G*pD;hxGT+xQzdT|#-)C|-4Uk9xLw8ONG7HX*y0;EKdddIK
z>696yj{JWWLEKj|Sxt?b{y$~P6vHW-mph61nr=3PbbOZZTW_75w>q9)-2DG}B2#5V
zBqb#^2<IX39>+(7iLZ6&qC1P?{1La93L9zx!!lRnh8lr<nTwOEuM^M?gdb8_2M+iT
zLiWCyIvI5TK&zs1F=;RdREA8V<3K-1!zOa&NypE`7P)JAWFu5haIJ7KiH at CJEcPZr
ztZ*56wtX^!qaFSH#2fx0{%_~SqxY|O|GzFI`~RT-qjmuU`2YFG`lq+-H~e$?{|gJT
zz`#Ig0nm{u1Mr3ubDb|74Ie%5|3`J{03H6f5=~D*=$Z_EGdssXqbP{}Q8RHaL<f81
z_kutGx3Q%ryBNRI!Cw&kaa{h5BXs{GfW|msRese_u-6UeLxWkJOeP}vPiOhZ2gTzM
zcxBb$yA!_%p~?!habb!ghH8arn+>r<+uzh}PbzWM<I#D at o%r7XR&*MDJn at Eq7azw}
zyo~%EC)?Zj4{YB*;$LT=|4$!3=s(z95BL{?RfV|uKeuOpRDv%*mH)$y|3ThPhflsa
zXY&Er(+~Wgle+NEf`O9(Iy^W0U(U(~HJyXcfxi_D2M4H^3zP*-9 at PLCjRhgVzCr*E
zU8)XS+j4IW6<yeW!9a>m<9~4C4gU;V$5oy_JSqQhPkO_ at uHKL1KlJ||$p8CW-liV#
z-#76;?)VS*2jjmZ3kVzm9aqH6v~hvC9>)J)YXZ6BKf8>D2bLUg@|Twj7Sq|q5LNTU
zEm*Js_02ZS%`C=5hI73D at r&Z);$&rInJOBvz>r8{4k9zzc#dX<MTRJi!$BLO#;_gC
z!Qai0=)p*HsPd+SWM`rpqth)oNHQ2^MjZTj!LwuNg#X#Hg-855*gE+ at 0w8ZXK(F|R
zWZ&=ge{HJn0RB7B($9bU4gXyKADHxD*vB(DVAXdh|A(e44}(kU?*Cicr3-ZW|03`<
zF#dO8A9?V&5Ke-a922i;#*7~V>N;Lj)540&#1|^80y+dM4GTBS1wb3~>7b5&Wc4VZ
z at Z`1(v_m2FeBn3)_<kV;LW7-+z0U0-c*gELqKWSFKO5>jzDYde|0f!N^oIW)`hVzC
z2kieIpI2Wm`~&>=QU8zsC;xY#|3_ax%AeXFZ}|7N_4cvzS;M0Tus8hcj_bz%1q#4`
z|L><BD32Tc0sjAb{||2dPrMVR<Aj0UkI26{7;u1tMCdp}ZJJ>t%=MW6v%OOn=*a)U
zlBx|c4x;eE41ma=hz*6Tof0h8iQ&XjgT-+eWd9j+<AQ8;8gkyJviyT^2Z5TCj at Q)G
zBq7DX1$PufJwW4xO&6G=WIL8nW_Gp_Xa}LV=T at 1*BuSwAMx8^faAL9tAd3ibe|JUQ
z(+>(@&QBI>MrZyH(-C;XKf`v7x0jm>k1c?E!#^VX|3UxP0hhpl|Gxt%{rb1x at IMvh
z|3IoQ<oTkU-xM08^g at y^r13&BZ%58AWcWhDFJ$#XhA(6ULnbdbhZiODc6bd-LzXGS
z)erfjG#*Uj&Zg(E!l_PqK{7=7f>;ufFDMbre4;o>N<xYihU@{Fnc#8M%!6GK6xZ6C
zXoS|AbCrYL;DeAq>4|0p1sDX0Qkc54gcILfZZ4p!ofExIica8uW02|@b`B0QB&_SJ
zw9^w3Nt$V;qy+mSD`~RJl*we#6l0J-DrB|>nKPI>uSOQ#$uCS(6NfOv>75FKf%Q`0
z!t5aWdYMUbS#4DvhMw?$NUrdVe|MMFYyN!d54y76{eRu~KcN550RFl6uD}2E8~(ZW
zKb$>48V&wk%)ev&=3auO-R=JkKiL1Q at 9h8L@9lr^E0RU|HGxwbQh(@9P7DUWB=_4K
zf0W9 at 4em|jqhXy!KLtY^W5#?U#zY4#SelQ<_ocrj`;==CoWz$;;X^n3KZHYc=>NpT
zBmRN^llKNdy^a5R-Nt|FI7kT`82|r<7oy+ruZYHfAo&CrAmsc51!z`QR$N>hFn<Eu
zCvbjtgaZnd6;{DjihMu9W9GAQO|bYtmmR>(?_rmgGV4}*twwHonNcFj20JhFtH5Zh
zcI8qLPP(2L1JYnY<)tG2*ryM{EC|Ixqp$?4O|Vo?JcC~psq<ydfk+!5%oC82nKuZ9
z5?g8F6yOJ=;ZzsQ3UxIl0Zq8*QVWipl}P at 0ART5h@t#v;VG}En;Vgl9&`e0Q at f@Tg
zB3^$2c4van*mw1|zo6&zKPoqP!@sv}2Lq6&yED4xKRNY=e_icv^?#HB`~Oeg+`qV5
zzu{jL;U7*8Mt&IoVLJZqNC|upJE4xz)Q`M}@9Vq9eGmxDt{$L5-}eA5cXkMTOVcHw
z;GV4F#wb*VLnK>-QecTcA5AVzn;#5%K}u1p1 at t5TtwHDo$n7c4M2)=UPzZ1q<l~E0
z{ubq{q~L-?pT!Z;+5L~g7oGZFns~!MxBidk1|YrSABuf`u>Yw8{6Bx`vHt0e`wjox
z{vT{M8{&WM5CKHFy&RAQ9qGL)UrwP?IbQmIpd5e*(F{!sPG|p*c+~vwIB)$wI6vF}
zBkUOQ?X|0KKcf5kj}jF;<Nqfbfb at oco$mcV2Ks;gX$1eZ6??${-^2ei(EsDFJ-9yF
znm7D=uClXr^Kkai<|zTF7yRp>W<NiS|3CmRVE^~gBmRGP(*yn^U;_ni{xAOJO;iB)
zQ~AGar2juoSammR7e7C7 at ru-?u4%XO554o(|GG+y?tXOkoVk^y=URP+zYaBCV!QIi
zcIzAGvJ{n+KCB;Y<8-L*(0WJj4BssWYtloX?y{XQQGXtNx0`2><@|MWa?+NI!WTKG
z(p|#m+wU*G#96s6iy3yxdrOYJ%R0Y+OgEpH)$8{h&n_uAbFrwneC$|_l%u6vqYGpA
z6(t<HFx8N at ffb*4==eP+#Y0Yu8SV$7;?GT*Y#g^YJ#5>)^o-nXF^6yO at rItoFzui8
z5eFZ%@7)ui#_&F2#T&AWF^unUr at fP@fI^nCo}n7*t}9)hKY#J!#j|+$<Lc_7alMub
zW=st=Z1Eoc^%d&oO6nD^N^(j{=IZJdpHDA#D3~4*8EXScOo3OZclYpDs4K~Fyu9Rw
zNhCNKaX4Naj+~NtMZ+G4 at gWztZAa^sFh|Z4-DzU;IFKn8HP_lPI!cCN$B&!fBrQI2
z@~UWgd*_S6mT^O7`hjs2Y%jIu!%iEU at ieB1Sy0T@xzPcHMu|{Cfsn8<n~x4HxW at PL
zWl7d(hg0??B*e}xdP>c^d~4cP7A|LxqU4FwX?sFR0`rUmO-is*b=_|nzLOfItM3Te
zuMW?Ym%fO+FQ=DO*#wR^UPGiY=UQ5Z2$k=oJhZAOhMQr_E*#vNy#Jn<UT*2DYsAb@
znqIcOFt9`IvCrK(Au!NbH!jY>!67bgd?Yb0j%hZ1-Xh?EO)64yV7-l at oVL90>$^fV
z+b(B_EX&s>Ta1P!2 at O@dWEibA_QX!bm_YRy(G%*UBx804M~IF+p*}VyB0WmV8WTA<
za#o^z<2$e$EoZQ7j6touLS3)K-bgS%`CN`1E!n8fmpE<S{CJ<_ at jH{_h<-yXUcD?K
zZH>WA_NPxAyyRI?B|FGOip;z=Po3Z`7QTm%LQ7`iibZ_3XM|3?rg)Y;KE`?oc6yNP
zOwUK3uG!BZHOl(>Jf%u3Ltg3i<xF{kg({gndL)i>$Na2C at bd(cxX|)N(gykVt-q||
z7shbbnZS^=@8axSdvJGMq3)qw^bD;K^fWg!duzT at u>7q#OZf_G>kTU-R?NZ$g0eF+
zmFCM$o{aHTi|_J&$E*p~`lhYT2p_ots?#d(Rv2;E$w`OQ$BrF4`bctx#xe52tCx<B
zVV8(V?bz+;L=74xve`HHJ-gKXqL!G<BRs#bfx)CfTXTd0W^6WFY at a7XNOzzO(t~}?
zUUv7Ou#)w}glu6iBepBe*ib^&+9`Tiu*CIfy7(eVKMQQG=%h=YSvfhZ>mm6RHR%HK
zy1Uy3JtnWV5pD9%qZk>H4$5myhL_IN`nGhe?%dtG9B_E6NTL#RjsL{46e}AWspNG<
zhJ!0+F|MhR>>uIoaRh}&8 at d~;*u%g|lVo=)m+?!<5Qog9KlKh^h0EVSxEc9iQN?9*
z;Vkx2f)^=jB++MAaz^gXWBcUGmyX%6z;{JF{{5u!GXsopcv&)4vAncYEN^i1`oJXr
ziow=OP9e`^!D+BSaK#;L-yv-EU{Q)jx%teQLj$~ZuB~vNlAp(}#_lKyW?NZ_N|`dE
z%osuWxH!%HmvziR3&y^)TP+Il1&^gJ!-rp*IrDObxw*QUnwfb8US3JdF-7RO+nrYh
zC58>2-qSevr)2td`V;;o9BkIex`$Ck+x88YlOkU<(iCtuo)SeK#|6uAr^AIO^Ri-t
zrLN7mezwWlbl0sYrx8<2JeEd8WGuZFDEdJ=w32_c7hloG)m#0QO-T%c?UM-vg6>iO
zXwfvYhlXq6gs4%~!N!lBOjjHqB5+vA-71Pg8>Y_27&-O?RdxLpm(59cBS- at G#Aa&W
zk7(QmSrQWR7no^r^j(CR6g#Ub&uKan2bVidu at b*<)no9?1-_a0uL>Shq+OAV&<7{#
zj at Pma{O(D=9^)y`CoG>PF~us=KRHQnG+}ta<YMZiL<#@cknJLeYQZNfAs?`Kbd$3A
z^2B!$8D at IYgyDmg$K$96bw|Bqzbg+og!tZ?<O9;y1kO3i=bn68ZrIfFZHBt)6gdKk
z=3o#kK4)fj(k;$LGk1IY>4Pk+h(&wTWzh*|%PU9Rk0u#kUOg$_T27(%B!GX%E7`yq
zjjy(h*{MHhjwucJ<zR`vUqzj%rEJ|s(|Iq%rpa at cxyQ9EdUfr~iHPcZh1FjJp2G`3
zz}g<WpIiD&1m&pwvn)PzLBCDB>3<AcZ$~#r`@YTphVr~0`5&~Y+5`IEZx5*-=X%ip
z`lkNlAkzQnj=KZ5pYqt0vD{&IF8l7;^EXQ>Y6C+vtGtHXecr-!U3rQ*jXu|`?%79{
z^YYqfA5Y$VUHPbG-{Fe(RGlrsCpJW6m)3ps*^&{Ec)9(McIBgw%bmBa*^;p~G%qFp
zPVh>{+g{QyKov{Ujmy4$s_M;?H=pCOZf^-Zk#f5FeS3ScheFKm)1hI<j``675-Y0O
z+wVMYg?rh-N6`_0+8g^O02b;0w1$TzZJ&i|(9U)0brf#?I^C6pw?O&pP}D{&rqdY^
zY^LBA`0|S at BJZ_fUZ!i#yBtawJ`cr~*wxk5f%`0P(rjnluPy;if`$(+Qx!d%U>&B;
zLAfZbbSr0ZsT=d`p*1~`G%rZ(P%tw)gNRC2$?Ab?QXJ#r-!siE;eZ)NTLUUdqD++j
zA`vyOPCFPcITuy9dak at gm|uk2)SK~b&k{01(Q!Z2Wv8PoJz}EfW1`H5e?i4dKZ5Ch
zaM!%be<v3&?>^`M*88#kS6g3afdAufd7J(~{`XP-f5#=HI2TmH-1q$7^scy{G0NFv
z8sS_(%w@{bABskx+`J^a-ev-mAi<Zy?c%)z%%ThOp!(NaLme@#MTE<Cc^lh`v8Jv?
z=kSkm*>~L3KKjcm{vAB*y;t+r{_{`d|8<Z54fy~1=mGb#n?Jz+U(f#^jP$>b`d>H&
zP}1Np`AxPIeDHNCTiBPAVsl}Ef0r!i$lq0pOT<c`t9K}-Bg;e$ztz}+{A3(|A~1j?
z2{L_91b-gELPmsJ>>FkSYfMAFG`1;w4K)iioM2F~sLU(I5>WD&hRGuCk5F9cf<&}9
zlkKPo%2D9M2~jf<S6|H+#NW9^9$)#WYVtNXnSYnC;0^!Ywszk3Jo*074eiDMPtoaC
z|4Y?{mLLQ9f9U4*^V9?WMc|Mf{2w<?t17^kpYs2A at PBk6UrWzh3-<H_|Hrg0+#6wN
z+-4Anq`)hJs$j-&oE$K3gj!DLXEBlcwSu at Bmimk10P}Y&ke@~=0*hHFtG5Q-r-5M}
z-36W|Uh(hc=;mSPz?%r at 761C(;(t^~2^hdXPfzmaR_+1+edGV(=jQ)$i~ZKE{(2nF
z?tA^;xeNPT{U0bk*letXf_xn!Y*a&|hz$Y1t_m&`27N^lt{PwhY at fjEiKmU|%<LD{
zffX-EgTLNW0HyVV=Y;b0haBD6kyyfQ{&atIdj{k~x0i%B{4;Ek{?8lwdmsOGf$Z=5
z_&-%20$v07 at AkC%enG$CpR4~v{$GdY4=z_YcS3FIO8Dre|A%$S0y{e+sMrPjpIuxM
zL5%Ct?8$i12pStYlOmfyS=me!G5A^G_%q37p!e4~QE14GYJn9CAopn3XK)_)Ko=GX
z4uQ=?QI7zuMI=g~39JSjUm{aTZ4ht^29oG at coEnr8WXX>$ZTxoLVS(ZA(A?})Bgr>
z!6W`1ex?Cfuj7AD{J#VBKj;<g_o)Z`3&TPGdjHQ({=WvmKP3MyG|G;F-468s>h}lA
z;{kZXzqhTuox8oGTc76tQBbk}_v61db%6hy#|Qb7tM`C^WdDnB^Z)jHg&=?3Puc(6
z at xOsf=?%L;qd$f{8-BP9KDv$nR=<t^EKC~oc?R8%5say#IVRO#4swm0z&8+e1;cSH
zU{Gi1u&}5>BwG1H7{N0}keN|;V8(3<xcA6+L`ZaOMjLKK0$%ndI_SS)6i3(ja}#g)
z=jMMfJnX!9@&NQU{_ARY!@sW1xB>nD=bk8UTlIkdzOnzg`0ptGhcoK10v6jCo`)~p
z at bA}!f3E+Z9mtP-d|Pp1!0I_PzSFx;L9~7ZNgZK2<dLEBTOjR*=6X5-RAd9t at Ep3n
zGRmk;R7Z`!i28&@@WqOQNr1oz%nTA|fZlIsBLZcBV<5?l-{%d1D2r(b;}_j~a*_|-
zvwx?Y;1&Na?oJ+kZU1*4|H1wr at c*Hgvfrm3 at ZUG%KezrjJ|5v6+H%3)$R<l at 0oJYl
zcU~9voty$OC;^7C-^qc6nW8yNXDAy6e|*kRSwlHf&;q2Pf|s&aT$3#b4f$3JLa~0i
z8_JHtLGAzV$A7(rSmh8Wnj^Y>|4v+^EB`YSulQf(;?67mU$5~$ZT)dS>i-nVK>p94
zd3=9)ogVNn1Uvof{Qq44KhSu=$bW2>?IPIcxGtnKVf1Fu>46wOKspn~_aYe5$sz}X
zabzZm0Z67pgr5b(T!J at H$8SMtOe^C-^mKHs17JpXp${is@$c*6xR%!dKyUj0I0*Lt
zVE;qUmI3|04<GX%?y3j;_l^F~?f>m{{Do&=!L;3vJvXG!_c^_0-`%3R54WCwDz5)n
z^{n;7*R~6fTHbwvuHfzEk6W)cwA8%%{I#w9G`spj{l{<Z?d-Y_zcjX<fAHb`m$q}z
z{`*^dVeN;iXP+)VZh8Ff%ZvA)S4IC~yE4VaIk_Xg&|zidFPnWIuJ<SUf1l};P#yih
z6I06)F}^S|vNeRtr!k|Hlu^Pp4WC{?N-Sp|L|wjVxCQx`q-6LoL_{)gUJ-51oH;X~
z`v4O!d{#YOom6rpnY)&$c$)D1A=HsjHiZ`wES_JkegtHk6?2jBan=&F0S&*@bI3t+
zZkuqcoy?=8h1T3IN85!(%{0)uX0%z%Wx)q##|1=MT6Y}6yqpGGb|!F3MUySsLXJN{
zPnriQ$t(W7?R<G;|LZ;ehm`&A at jsyd{~=)e_=kSOzX^)}e{A|#d$%_C<drKG at V7Q$
zUxxRZjGeJptgUjdT)ml_eZ_lCX+uLpMtVkRSwm at AX>N9Icw}Mw=XSs|A_3*94^cKj
zG`MP+uB<^o`41D;Kx<eIt90>&k+}Us$f}x3<%9WHN(|5`h*G2>QY^gT9C0cb41$6I
zI0*MKDX1O-wGAt_0$YNNn`5X(;zKb+8w_V$0-A{?xtMdcRD(TQ2`|NsJ{}O<iyeZW
zq3{B_hqEG#MCl+OSb~{eIfB%;+)P753kzdoV@#AOijD>8$cS<fx{SzTvJn!kd)+P#
zLeG!~jH1>1YvL9E?v8667(6-vdK>@sb$;akqK+Hr|JPqn{QLd(8~(ZcztE-o${y_M
zUhMNl?AksI+J3(~huulVUgTqsGO at -y?B+qN?ikiuirqhgapF;B7MvbJH#cA~_ at -_c
zeD9V2x2yK5ga4OYJXT4wc&sKqxd>n?YfPKOZzryrI36|nvBK1fl{sQh!eKrjG&7U3
zmy*NGWHK at 2L}WTqJaMJtWm{2#F!8!lu?9z2N>YND1qq31CV{i#=Em8YVWKEIDUD at f
z9Jj<OPC*?q5y)#p1$FRO9?RhIhKS~OuOfb at gmfS}o-tP9kK{=-CL0PLMi}EL<TDxa
zk+aFLVP~&l_fz6cGSl{2qbKusiv?cs at 9E$KDL}jlfZp)mL;o-8fc=l&hW?-W4gXyJ
z-(U0p0nPwwxSTl_29x2VJO6J)mv?|$KZ*TT10eGM)&OX9)&KxRe^&zllo4jkp+cGP
zNw5;o5fRZ5&4GDiOe}s8teM0bYJt96F@;nJLmZqSAP{A1CHh-j;I<24OGJn;9o_%G
z8<FUkf8WF_{vrR@&d0^WofjWKulVma{%h;&4%C1DEiXa8;h*dO2h4X2>2NJ6<rzrv
z{gMBZ)rEUgE_c5 at h04O|(6AyPcu9g`xCDEo1N87XNmz#1dU2{`29yTz$63dL+HNF)
z5m2Cjd5Mjo-`^L*hvGb19s<6_SPK}`qmJ<%B?^)qLj13Qmoe~05^DTgKOt=q?7OoC
zm}((j%Ra$_fo}Le8|~-{zn^%+KUDwNdU!cFdhw(H^oD=X_J6SdwRHykf8Rf+{`%Gf
z{srJz0z?A*)!%4d2Or#_oQNk at U9bB3`D at j!`);moRkx~U+!d99Uq^NT*q)Bzrq|Q>
z_{9wmVf^BA$%>6>E7<f#VU at rj76GH#5nat?HrT)h|2mAJYyNMYc*8%p{?COc at WX}o
zhJPJM_WRNQH^Be>_q;JZ;J<JD|J?jv=;Q;J0a^fmTJ=tt`?bkOXVFg}UKZ4GB{rri
z%al?^K6JJPnO_JjWiuu&9goudxm`c6;ZYL5!?YsM2m<ZEpJtfH7F0C_$J<JOGWS!6
zLbGJRI4?EL5UoR^Gsnw=f6onSh&pq9*w=9$Pi9O^NB8yLHp-)G?s?)3{|sA(m&aOf
z9wPv~;a`{fqyHb;{|)H>JwLEMUfOT?@5=v!^9B5OkS$d;k4JPI-SYoDx@>@s{J&!8
z{R>LE8dMKq(D$1I6 at 9<!{R{0wp!W|4s)V5T4^f!H!l9_#_n!Rk8vvo=pDt>UDTo?m
z##;PF*TZj3(Y^eaivk|;?_le=%F|~ZZyG?a`0pYAUvD7)551lJKJ^>^hoJZ$#P)#y
zAH0Ad0)Y7+3W4B)ES6bD!-v3c at jPtUOacO9XqOz|#_!l=EPORr4j}G-I=dJm>7KX+
z3l?O8k#CrrS&WGcN40!$@r&XiQ&?7(siFZ342dKrgvHr-j%J2MhA550K^t-fh+>yM
z@#_qU9*o at dRo;}4>`aKV6Hd3_AmwP78FBFA1<#JbIsL;01aJ8Fw)M30@^P_q^Ktb1
z^CXbH;=h~zucJMX|Bv3i{-1ilzcw6Il3V}tMEp2127apkhwJ}y_BjE_ at 3;z90V at gS
zexLw3(gk^?p at 2g|u%PlVwiSZuV%eeBu;39)OlcZq?$`UsT4{-e07Ap0O{Ff&W|>o{
z2(Dp!WwTb=8LyTHW*}EXvw8*rhl+qg)T5n;&WRH(w}XzpqK$?np~v~AL7h-}CLjEH
z3p?B)&VUfV=~;BpZI3HLN2btV%N<GR_iLbV<mXbT53d&yVe{mt=7?xS;x)f`8 at _Ek
zx|)BE(!d-38MgKwt5!L>|9R}AyVVQ+sT92*<Nw+^l!5wRbnE(k>H+_KWB(sT<A2*1
z|F$;&wpRbPc2?VG|Mn)B321-i-~Qge?W2F&YyZOYthV;|Ev;E??cr_hd)nLgx4rOh
zYxZwzfi>A}ZOpdz9c}Gd?Qh}h^S1Z?H^<AjwZ~q*oVQO>pzRGTJktKg--n;Ctv#iw
zDXOhKtl{apw)W8W_S(3Ss%`C+sWiizw?o>#`m<Q{_7`wCR|^Zn%*?F;1bm@?ClPGN
zJ=WcI50xiO_)RMT$;IP at P0Vnl!A`pJ5i)5gra`yc2A&MW1?%c6Tui6CL#om5>=`hP
zz at BN4275;G+O0s8EnvnjDKVaP_dXGb4j>1Kt$fr$lYKGcvWg=Ewx#1{Oq=XT)t at 6h
zYk{N)<Qs^rkX?N=O-EbMyL_(=Y;HpfUwDxjxg%&AtEL1<64`hqVQtq4(S(epELC(I
zY0}e$j!tw5Ylqw8vcRztHPbSR$p?b7qb;%V at G)bj4Wde-8}rYRbm(dZrXTMBZ}Q*U
z*3Hh{nK$dNSNTuT*X_aoJ5c}e<D=@A at BJqK=OOtI{ohgZ_cQaM3q0g=-ia}|xogT|
zdv9n2Z?|gg)u;)J8Q#zieu=#gbcBZn at z4<-+QCD!_=WV<ACo45-3Te5C=E0oS&$t!
zU`RaeGR(>KBB(K$?1#5uz06JpGpZxLoRpkMTRaS9Z(2uNkw-!iIR&@6qd&A2ZK=83
z3?v4zPu6ttw4oro$y%iqWh42jRQRZ%J~HtU78ViLt*y at Kg5jAbNTr0DU1+_|U5{PK
z;RJZf!q#Tt=ALh7gcc#zNyEiPM)R!jil9-FaYA!cP~}UMG$G6^G>c6H+1_Zq+}+o1
zRz5mbXEa(qOm;=~LUlKEwf!%BdBZ=$))U%4^OF04uA&$HkD}WR|JoGl0RJPpb^Si|
z8~(feza7q>j_cUpZh(qQyZL{A&Hdu~e=&PX0472JBMp*3h8i;C{lO at crEd%sM9ZkO
zDs3YZ*$xMB39()$0C7K=VdcT0{wRYh6SERGmRf-dGV+)>GY#Y%CgCkeC`;QFw}cOo
zNO2v)Nr*lg<$qVDSYar+yE9G{v;+U-q{sAXbjtmYzm6O8pZm)j{$c$0aCY`^a^gt^
z=oSBv?D>8C7xF)}2kO86j<=%U at Xw9^qCuNW0eNux%SmuKKRADUx|}~9{oPAK at o`*#
zFB@~xW{OJ!go$<6QT-JwjcG&<7eed~vUQ7Loke`y@(mQ;MO+X@(%8^4 at YSf{$%qot
zO$|@c2KNxRvV%hSJ`TL&7*2A at eyI`Y?*8-f-P=3F8~zdhi=CJK3ZCHK+xSnVcCY`0
zWdr!{?b-Fk at BM~<ZvV#^=Lx^Gw?if8qp$7jHs{xQ3~oQ5+m<|z8J-^!Uv%j1#~rEH
z+>SiI+1?&p^p^AG>(TN%vB#^jUbiy~-|RVAolx`jWqZ3%P}*H+=JWpBnWnE>HXccO
z*p~DBi>;->;bUbUK8c&-&Xl#btyvq9oLu<iMRR`Li_L+juC5xAT=h2g+Q&n+UqZJR
z=RIsKecc>Y_V#H-(&dk>tlcNulg4eyfBnmg<{gJFwY0bIy8St;^3mdD(G_3Yi=V%4
zKWb3fhRhA&%SkWcqYwK(Vz)bGUS<g1WR{^j2`ms%t8-_MM5RTj9xj{=@hd*#xVWHo
zt+^>BueixEibs!DUL1MEVHABZuwLK{hmNpYWJ<pF2vn9(W+>m_-ST5~bWS9RqtI8r
ziDk0vNKSm*sw(cb#VI3QMk$t+sB~;Q#9eWvfx&X>e7+6HZ&W=@E&S-6cg;)iHQe$y
zU;RN7HfV_H$VaJwqQz{@5WP-Os0QXOLR=;O={+>Fmn!@KEFoE0t4|-1Z)@zRNX{t%
zK?=6rL{n<NWvU^1DF?(Vx(ojk6R+}rjW>vYNBfn$i~zmqfBM?p{QtUo1M>fGd4Kv%
z{&VYpJN!Q={Lgg(b at +C`u>+nT at b-Wg2;4#76av=}c!9wA1709-_P~XM!w1|xI$YiH
z)QPj^u;@?J{~qs at tzGrMs!A#>6$mDZ($0~xq3(_vD)i3NTTl^sUews-9FE}Aa8w2)
zGMqp#NEi!F8d1jA1WnD2p68GwCzLAWEhH#X+zO$>5~wETl&FhJ<KC6R)+%IGerc>3
zW<w1vNF@@FgPPFdM(a6qNK2$pQJ^S;Bra<!3Zk-vtVHS9pP>mIk`qg?wc=8!9C+hA
zDY>Wo?DgnD|EEMIulV=ox%#(v|Bp_$_#e>!55)h_Ytiph5BL{`gZ_2?->&)}*jYyj
zkkX1dL*dJh^*`2KHXsYwznoCLJO$eF`0v0GW&NSS2VO@}0wBW{B$8ACk`#harV`}+
z8Zl6Xk4}^mk-%L?75q3+Li{vUl-{R29NVooCuTUhdH*R~p=19qOuXUW+t$m`&dsfl
z^Z#^oyYc@}^#}6*{+8FL2mJR9|6iB?hg-;x$!=JSa{hks|IF>eK7+x;R8;}|bOs%0
z!O$E=9ZCi(#NUiU2!&A=caX>d at 2=o*BS5<LaO4m!!w~DQCS>@OHz3m_x)62pk}1WO
zox5C$>JA3L-}@`X8~z!#i2sWh-5;GnFZw at KuUr2gs=oFB|8MUPuMgJf0snoH|ATW!
z@!xevpYFf>dQ0ImX!{J!pMn1?>t+*lgbpiy0j;5-DYSpd8)yf;f^`<UL%(TiS-Ix$
zo955Vq8HFII`!JyH}Ahh6u)2<y*hih88vfGKe at y?acN#Fw0F+F*|eYY8oEP=7r$D%
z{ya2xe*69l^puV*dj;L0p_MeWiT(<{qb(W!h0o63ZGtY-&<mQnz2We+w-=wa9l7=f
zT1>MpHkDqy4-KNfw6$BV%7gCH4R1d~OX`-k_Lz&Wpx1O$OWWz9yU<E{_toY%O|8&h
zdj9_U<jNP&uo{|F$6kCDaj6M9R|k~7fi~1J7hh~CdI8O-6K{Nk-qalptMl%@hc?$h
zY6iWmp|v$MzJ~VH?BZ(ZXblakp)obIxn`EUfkxK5F1~`M*6BB!p-=UhyUn{UzhM<V
z%e`8gc&*7TpveFHbLerMRs9|sT!)vvfp*q!zqAAQ88Dy${aHtFJYm9I33w&e_YxWB
zF{z2i)v?B at jj9-i6X=xfX&DY`0j%rhWE5dbWQL_BCW=hm;^s1 at gG+4)iM~Mn(7Z)L
zTrM at r?c!TmRae;A65#5`Yfehox<4f)<w-2$EJ>*mnm)wqwN at +Vq*Q2dom&@PrYG!A
zUskt#Id|*YFu_ at aZ(5!A8?z&^2~sxkBI8Tmnv5PlMEJ77?uE$CqtPzkO;~nI-FEWT
z2WQU0F=+UaszM+4EG;f|l{?pQm?*J`kC*6 at cJCjS&s0AF6=jJuGq3#P2~_(q8)?b4
z>qdeWI`6I-|IEyx+IL4kr}!gdGR>$`O;c-Bj at cxdS$QtnGZX)$JW+zo#=J}B=sq0u
znT at deU#N`oDE}R7*SNc^Uc*}fSTFLQg2>)~jQ?p5*njAa>G!F><Ub~h<Uf<ig!+$;
zE)Y=v@$1!CMa`HFU%Iov{8}K&Wr1N=u<$kjb at 0`6RDcM7mpKWk1&}$ZnZd0DqdPe<
z82pmlZ*%;S*XR2puzcZ;EFWV&5o4kQl#trxqrl)&*kvaTQ at IAgNqqSfK6IA<g-HGN
z=Jn|ekNCIsVYs=h^7QcHB?G*7{CD&J>gx^Ye|`F#|7d6ZhW}slf4Z2T;0zX4u8e_?
zZuvi(yX-)2{tvrYl;0wP#0GaP4ad*VPYw>HpsvnKG0ox<R18YdqA#=Ha4SHi=nMwl
zjzV{WM1Uwv)<}w)18e at u==i+|_%-b(YN;?k)Q@&$+%3_ at A8)8?%|!R;Ujuw}u`uz9
ze~ACsIq=l|rFZ*}0>S<t#(%2zK>VlU0rm6We#5^%8vlX+5i)-v_yd6;Nc9B at NJ#Ys
z3P at mkglG>?Kte1C0ztqF2~i+mitI=V23|;r2tjlRm?9x$1o^_i7YRwhz#|EKk&sXf
zVIoKnhS(9%N&<HzFi3JUg;Am~+^!BD$qoidr6WsM!XgdcOd?GA(&1~c*_}?gbd8&z
zgsI-l)6J{WGt8Anp?08^wA31%I37jpnM&q+4${uSava~hs(HG4dUy1O&^BrzKUUMt
zs;Z%ZOooIg4RVu04QEEqUT$SMbLN~F8MV|DV7aH^hN`MsYKd8nv0M{n2g*#9(j^Y(
zN_xuZV|>zxzd~!)2vbw?%ov5o(pqSj*Q{@mcHFe$yEiDC4;*2+y1F|{brY3np!1M%
zgB-a@#@DR*!d9dSU+73O)|XyA0hjObTfh5r1tSM-FR{hLMgHqV9=hg%sq+r-D*r+M
zbM)(T{jZz+*B>|F|NmRw(SDQvyy$=aKk9!3i-=zpJUSh-Q#CbB6hsN(e6)=nGr6?Z
zhzP_1(xCwg(mNHvDy{;!N7zZalhpf<RKQ6BzgGd5mgA3&@@~>Y_xxX_0`iJ~PdA?1
z|Mcenr)UG%zt{h$`oQ@}ru-cUSmW(u=S3!CULGDk|KIU?`~Cmh_P_YI9`G*&r`t#U
zf53MPI at zI@0a~!n30)`;gp6$l-GPZgARnK at mW2WhO_+<enva;fpzQ at w1QxAF+KT%K
z6wnvgj;T*fJ1ULt<G%`>=z{xq;t~JQ|J%{c(ViFY&!4gXy77N%Lr8D{|NZ;uxqI&c
z|9ukw!*(J2uehYT_QCUe&s&PFJ-J)=>eRVg#TW0LK7Z>(_T{JVzC3*LCNul;%MV{U
z)h{4=caNQP>2l5I_Vx>T*+n at gnp(a={O?11`_&syuHS#zej~pA)b_%%J1+{tPvl%Y
zf8loKk>vJY;$MCE^6>4K>oqS+N^jjdoA?~M2Ib|QDY^T+AnbhcZO)w+?br5nxS>H9
zb at -r1p5dp##cT6s6n4hJut8RFZ(!@L8h;9x%8<T-i5Eql>cqo`1&Zl(Iy5Mx;7s}5
zC#;Ubz(UNU2zzeL&YVF&#cEbGTiXXr|Cxc)Em_MRut_Kmb^0^^{f%J>3=26Ls&`4h
z#;Bhs at z{~ujAUMr at Luhhll(d;WJXq3neTXKf=#@?`5-u8hSBu7HZr12$SWjDSVhgb
z9fBuJ17RxscBT++ei5o~GYdL<4rjy%9&bM}Fc+^C4kppDP{q- at WyvESp_gDlq@ug<
z at 0@s(|K7GfD;!tx7X9m8{_E&=)BnbeqYTLZzvGSUFZqunBl*voiACEG3fB*hm`lj=
zl!R))=*8F(*TEo58xknByJXr=7~I$<;k8b=xzH><aLL^mtrSlj7SJB!y(V>q*iknU
zJ5cRa>cnIF2`8Mf)M&z?e4X~q>iKK2mJGx5QG-wVNbhr3xIL2ZZ3^YH1QzHPwLE0;
zsaW-h?X-r}g=SM7Qth$$71I3lqgA`~rdulB-#jMyG$mviE<bF{bGC4_qg;Eeerx)e
zhsjeuw_;3&=>9;NsuYaCdQUqx{J=!<Xj>e{YTri}GM=z7hE8Oi9{nP9Qo90XXk3v#
zb+D1?)#OcX3&Y&*CkdbQ6L*Lm8RIKtNZXg~D>PxVOzUPf1;=$2A>{TGx(u5WmqG?(
z?)C3y%cMkT|H_HKVoKdEc*^vj8i_gwq(AwAd9Qjr4UToMQwtBB&c8ZqH41`^LD}jn
zzWRZ|OhQQ-x|=5<CSF;SxH#jXifCYwqR*rF#QI7KhKCcH9)Vu2xPMtf<%2QRx>L3h
z5J at i$r!$nW+<q46fMK*EDi5+Tx<CKrll)l!VO4q?Gwy)j(|`2hOLH~v%aw1>S|cTV
z6LI*D5}CYtz6be1$wDpjg$Gb8yNB_5%4a7fJkeUTXjMjp>_ZsfR%qpTChk&N$PC<>
zs2L>yF3u3 at i`I9>`~~Bg@{spobyz1mlVSu7yZA9*bJGYz>pNixI0J(kx(mHdyvl!%
zm3BO4|Mo8bDLOyae}nx$Q2*WQv+Ii$`b+*}2ax=qazHGi)T6DvO at A-()V-8=4s-gU
zq03L`pSZpELVa%f%~<mk`Laj(3y*4DX(;;ex#?Tm*L_z5CnN}LEm^6z2Y>z9#cyrj
zChr$5tj(CXPssh0d1TpYgMGpaj%x0{yy at eY_p}3~yt at ZyBoCi`Sb68AbrvZKpT4$K
zzqsm{J=Nr(%!b0nO`qNzzOm!bFA>k)KN`1}ujVx**P+7Bj>;mp1D>cVUGHbbFSar7
z8mg8k>6EDyDwWD2kOe at JF*n+e$HGASCP>&ysG!Os!6{=!luu=eLxU2b%wfZXwTDB6
zx)H5{ZDo14S`gU)57qb3a3iSGO!V!QkqVz?F6%W~R;OaP>t(zpYEGmqK4{vsX$wYf
zo;GblR4EANc}0l?DRDjBdCnLjO)nSamsU-T+Am%00zaM%ij0}Tj+zF3PN*AQ8T-j6
z=#Jtx=%5~V<3muK;(qX$idG^L#SYHX{fjguXSX$<LT}Z8 at I-gv-!Sne{}~RpPA*>F
zKAv{YJQxAJ<^SmD{V4x+D3k&D|F^t;e<1${ars|&JB~m;*Pr5l<@SG%k4OFA177Q(
z$}c=u%wkVYQOw~Ry~`WS^`9_}a4z8X$dsi&6pcV7l1X;G%>;4 at d^n)7iY|c^+zax*
zk-Uo_r?J6pY%9i^iU{Wi<QcjNJx)C0-*$zgn`a-_e^9#De?kA}0sFtl=hfE>d%%Am
z)_=j-LS_#9l{uoT0v`kQUw!@j{_6gC!@sw!(;7G4$lu`vdmI0C^}EG?^mGTt|G)ZZ
z|J3$9;9nay{OkPh-1^U7`QNWkp8F1V`vd+DcIg0rmi*mVBz3&9^rNH-R1vCFX%-=!
zrVX)V_UOpDh-ra5qD*kEik9F6Gdi-o)|03QR~AKq#iNag!nD7F8RifO%nm!m$0Em<
zaslHe9tSk=!H_J{K{J27xFmF at 05FeHqxM6Qktmn-ed<=l1?Xn}6RjfN at XxS?{_l_i
z#+wGv8~#zU$M^Xk(En*5{{y{p{XX at 8|GtU;^4|X)yyB3$3wgU8E*iM>(iI`k;G at _6
z at 8>(^2#F*vB~FqO7bp2+AQrH9vP6?O=0iGiaMLCjjxh8k+sYD+Q5LS1Rg`7a(DJ7O
zI6G+B&LGk2 at L{Vdf}u2SIiE at 3!l)r?{5MevLUSu|0-wLHpg%KH5Rt-Uh6;LxV<v&j
zCKRc~KOZ9QKrApJ9>jwHV(${cnIxhPvzla06=E?RI!_UYVAC?8S1s!ZiFE{7D=5AT
z{vPhm65$I0)4eC&u=uF?9`v;TW+B5H{=ID-y}UfUwEGtSI(pstA1DL)ALwo9_o)Z`
z_l^GlJN}mr3W)uw_gQc`Kk~mU?9u_8oC1LX24#jhIj}HOG>2&qjbq1&Lp7}%)B#bP
zpc*%GydYKzVWATKaQv_I56 at x29XViy(N_QvM!n<%K00*{mZFi7T7&N3-;Ak#e`tMp
z0N(J=u!Z^`2cQ7wNdWXZ{_Fqf|I^md8>s*7!>9bmyXpb|eKY=d<NxpAe1oDLC;@`1
z9;p0*5+JDaf$|=x=RwszF$Pfo19d)7DFo#`+@!5e{(m at sq#bZC<NV<V=`izW`TyCS
z@}-0SpUK$~9lZ;J&nh_a(WAx1!Rg3gYTIpuPrPvG%+PRb9SM>9Lkj>2iHGEMqe-^V
zEI>ASWa}Lpm1INpWLif&+=0O$4#!Y+PNK9SKmV*u9NiL33i6fG3XUe8N+YHb(Pkzi
zKlvr;n-PK_W^TCH+IlCUVmH4v=mZi`Qn5Rw0t#f%TBS^-XvTdC(k4#tToyXr273+h
z9|o<3+pO}|0hw1vBehM?#rM4+;|>4bwhoTo_B??f&bl}J>vZG)1^?eb{}1%Q`+e#G
z|7iU0$p5}^T2%qQ{FMKnJN^S=e^uu9t$BzP+#g&3W?jR-5z^Rc3`FFlj7QeHq%wiX
zW%0He1hHKp_a=XcAgLl!@DJLocnbg#Re<Awhqll<$WR|K4~yB31s9+@*7q<$d;LdF
zyy74Ff7m;E^VR{RH~i~$@BgZ!J5c}sx4dsX;J<Iie{TQRva+&3G=UWOO%U9fa#jki
zt%v at v<z2#nfHTz}54JKtX?tu?Y~&Cwp{iSiXohA)2AN7hza;94L|rV#P+xd{(*>Ej
zp+pfRH8coTd{&`+>D(L)Yt0DqGEv%5CIh5}Zh-%e9YL`|8QbGyA=iw&fRe4PgENVb
zw}JFD!8Cj$|AI7OGRPDD%o!OL9D0nuIV at LYS8(uwG;YTrH`*%;T8w`%qMnQxoXv{e
zx^)PdNmsWqyi1b;oq_%BituU!6nosfftcN}^8yY%!vAhz#4G-JcK*Q~=nelm<9_u2
zQ*{UQfAsG3|I}~z=Z^m!iLM<g!23rf^Wb`ZwEvyDFwgDJ#Z5*9)(;gnN3?_MhiDvO
z;R#&L at Rg1;9nWwA<^5M8k3Z=8?oW&Y27%6k2MT!fL@`lQyomdlVX5ej{&yp?|DXBq
zkH8!LA^(Tr<+0YAhvXkPSa0~(rFQfG>re*9|KC5Rew*(%{B!HSf&2^1c))*0;Z>qW
zWF%ZkH~t at wE*a3t{}X}lXz#^lW5skfqWt+?zf=ng3t;`?vj0fXiNX{X4wXgyfh4d?
zLmqeV!Uxt{|7KFpSc~82dibp=x~u<kVZbB)Z5`d6UEFztf3NuOLI0-?^#AKO$bYxv
ze#1YP{|_|(4if<N0sCDK&+CJ34};SX{9WQTRvS>b2$pr_Qq!lS-pTB%c>b3!Ey(Pv
zK=Vw&sj8Zi=?r^_==1yPFCf$H at jEQI^^zhqsmv_!9hhOMTel8MgIF9B at 0Jl^p{eO+
zr3K2r6de=J%A)2N=7N!61uX@)4l&E at _%iGu==ac5EYv^Je`vXrJ)gQA5hYVwF(c!L
z2;NCV4nO?>{~>8&ZfXVwpyo3p2#br#uw>>&U+~x!5FB(2;sl5&X;G<~J_&eEDcG7@
z#8dG%YL}o}{ogHMc*VbiqZ`jAKyTx}9w_ at i#{Z!u%s~A&dVTtN>NotWp!yH!-P<0o
z)9!@PXtbQ1I~*My<PijCKG!c85fK4bcW&#TV)zjKoh$%_p&gTWaP=xIKiR1p)N$<t
z_LU%fK1BP}*z7WPDW1>mJ{R2f4o{h06Y|k7$w86(_7Rfh%AY<2OCb>(HEPsw1A!=v
zF~%LxDn#+d4_S?UqVbP|s_c25hE+^dB5lNHV9W=F8SzD8`oIdx#*?S$=$HkD1J67S
zpJCyaKxd1g7NLolhO!M#$83-cZ0=8FUVRvd=kB*)C!v0vFC3xEYtOtPxVvD>^8M)X
z{WnVh-tZ6pe+IAK|39JsclZBmLrK5@{?W_R&r`qQzmxw7DgaQ}uEPbO{`JyS_|i at P
z5BN_1$4Vk7m;}<>aa_bwr(u$2i1`37Drf?5pYM;#RMUh5#{k at zvX@FYL_@>`CBsDN
zHT<FSf+*`o0;ATUM4VJSKQboLS^l_(n$nQy$DpklB?4ShIKH~{BG_#wA;KzKeCd0;
zql3}?{%-~>I=?=gc*8&R|6J|Ha|u9i<A0C*-vjx-efX6Bcvt;~|KH{RbcldI=>N2}
z3;Rw^#&`(vgU-(>4<yRQ!&p8I;7P-aidv9FkvvGmqMY#FMWB!eDnd#hT}L(wW$TS$
zbE5!J(wQSdFGau}0v)sn)r+B=-BSR3fPyf-6Yh_tjVOntU!oKfZ<?q}LSsHNUK~|M
zn&CNg5Htkr at dn)e3`e~K=w|(EBml4Yx3_b1ba$}x;zbMS760Ay|8)oWfBzV>efdkj
z;eQ0u|DkIJQ~)|Tf#MIQfD at cJ(g#pKNH7Ah_*eW6 at FD!2=8t7_G%I0gaF^cy*uj{e
zD;6#VipGId2=$K{Iy94l5(P#L7Z5Oz%gTa)Trh at 4^y)i9nM`@nYSc6!gN2JABMksa
z5el;VgOflusIrR@<-glYL3UXgcUDu483}Pb=3*;M1I&BR?1OmF66#Q0B0pA4<~zq9
zu-q2T=pQK*c*DP&hqH&Ro1;@-^1o5_bRgO12m4=Vp#KMY<NAN<0sp~pR2e~j_<MEQ
zI8;8%&zL#g7|eF~msofhG58C4nl18%96U1mkGnE>FS2t5d}dgh2;9aCN{`a|qRw%}
zuwk7I-d^pQk&$wH^@F2V-$$<XYdM!?Tj{2MXQ!IAo8An)(K~h;FWQlzhF2LWn1K2F
zXJiXzmroq7yvR|0!xQ!_646&q;N(ji2@`WA6LU9j)g^Ae<2Lx!c${t?mr#(s!kRI6
z+bXlS+w#s{P&j<`TTQz6xh=SjQVONh-_7~DiLhng*e#!LY^O&%lo!yRP717hlv6py
z^8B`jXEzS7K2)hNd6VX+mH_;Ix+df#{IX$O{LQiFvP(BRpKoYy38_5)a%xNC(4{ZJ
zubSF^Epy%eZST at x0dad_DZ^8#clI?-J+JN5{_dg5rcd_^yw5kCZY#Zg)py~UuQLOp
zzumJgolO<JzC`EV-e*$_rzEv+T%~UNrOo?9$@!U2SI(Zo5g2Juc-`^*mKE6Hvo5dv
zjvv^vL7?r1!K3$Qo?hMOeg10grdQ#ED?aSc_sF~4zHI8 at 6M~*5^H1$wo7&KFd{(K#
z*Eff2tJ}V~Zna$_K6vUz=@^yayBxPfddIFfw(Q=5GtQM$PPX6ot_-wQo?37x<U)Jn
z&Ix`G*6&NM#%RQ2`&utKu3fRRYAQ9o`7p+QDijtgvAuR})c&vUfB9%X-Qb2Xi%$W+
zw06zIXQ$S!w_hw6JUU at h<J>pjgar3*sP{E%JK559Nk$=h_~c2O+ml*{4<2#7Mef;{
zWTteP_l->rt0o;<<NNgHk&PnQ%l5HJEgwdTc;!sLc;0jS)VGcG6JBn2dU;Xii1)hl
zw*|1Tr4!pWzq>Cow)W&LcZnzU=M4NBLJJ<XMd~}-71icD<tVt$Uw&wtUnA#mRF3T}
zMXdE*NbY7w3TcP)qNi@>&wm_r^+xQcjryyvwjUsUJ%yvU9erWsn>jlG|8(fewWKtB
zBKDZ%XXZF242Nr&J;m2_t+i$d- at aP4djcVDC&uns7Px{vky*H!;coH8KvGL)t-M)<
z at j=GpUnV>qci^kB&h5IuifXUvkHZ3#nm7iJZcSP1 at nO{L!Ujn4Xl@>yl{dn6N<MMB
zoUN<EQt=HVkG3!m^4Z}G4mQRb$r&>rUZ79<R6Wh at nz+*3G!=pn?fxe#a>1F~*G)fv
zl8!J{U8=CgDaO=dR>slf7{*q?h(?bSk462J=A89 at WasQgiB)ZJo?U1rwXf>#iCLqr
zRD2l!B=VNe<|S9gZoje5q`de at zzkc@I$EGYwTIF{Kd*0!3ty~ovh;cIseZ!e;YEHg
zp{IR_ftXV9joDkC2Fyz_$$Gzaxkq!jvFkCHV#|_CE3vc@>mKK{zRa1LAIYxV*dXNa
za`);@4e at VkJ{DLQ6<klsv&fgYq*ww`dpX=(@f at Si0ijh(Uc9?xzV*fQV4nuhQ<H77
z`7W&R4`r`oRwV8pnq~WV(bKn4TU-hPFGwiu<<z{srTaBE>nmea=}r5iUvFGU&>y;^
z`au4(b<<|=o3iP1Q-Sx>hlvh%8YIp<ZDen8S3a>Vao at WF?<iq>DHa?*cIK1q&PtlF
z=KA%o?@w6&{)Tg=tzbdz?wJ~seWxF3G)`JEqe*S6->&Sp)m{zrJjGlClCs^RQ`Kt=
zt|}-<`%PCj`&Kh~d%1vDUh2CHu{ROve)Zu83Opo~<{o?Wt!CnAqegm-YTI2_WUBt&
z+JYUm-VWt&o+r;Ef5nTE!^&b-idv?Id)kEuHDi>5K at p?&`$dnMu|RN#56)^+lse{g
zt|`_-zbrTMR%G}uvF1YrNX^BI$t$Ok!xqiixz}3t`DNQSQ%8$?uFF2 at UfF4Vhv^-^
zN$tYhz2`s89{y(2u at A-bZpJN`c<qH_?jFhkJfBbfEki+EV$_ at ub05rJq&Ysor*Lq~
zh~-|+yKbakv=5gO62x++$GIduU7)4EyR|;%XuYkxLbZTjS{?rGsl!7~?P&F#8Y1v|
zxk&qGzX$gtlcL8Ocz<(_x=&+jJowyn!7U{~K<vXK=fP|530TL;ES$crVPev>P1`jJ
zE^KayF>DYM(>ZhYLHg0{Q$N#fo;AI{W;J5!Y0lJ~JKJY}l-S^*xO93JQ&f3ofyP9)
zqP*tJ%<E$lGW2(sH0{%<UwKiWe#fkbDy6MO!osb~3l6uum;yf5c`ke2T>Yvc(^7mu
zSF3%Bq+`MT7=dlaMe-8x7Eh&o)zd;9zdlyqSYLJe+h<q1-LgdT=XDB-lA*5hGUHTV
zuW_#5g0b7bPLSO`<@0#qq|+{U*J)OsIbiab at Oj-O!|kCPYQHo`Xf5BmW7+$2uSIsq
zVf4|MVYGw1;)3(!kyC at qPn}(RLejGR?uHik=*QE;54KyTWZNsK#Soc;#Luogwk}BU
zfo|&1V;?w~F|CfJ3Bps@$xh_)Mq?wRE|q^i^5VVqJ$oy;MK7*B9lZ0igM<v at I6+0u
z(2I3Td$H`Cc(UqR->-FkCnju6pSt9zw8&|R(v!_8X<9QEgn2$TwpBQD^wgO-3q?Lg
zUrw)ZQk*Y%bXo14r7VGMns+LXr#9!g&bjeo+!F at Fd$;OoIqCV<>1x68Qz at L6PGi39
z4X`c<AZ%`Wy{5I{;yBJiG3jPWp)28ay1}Fwl;UkoWFwJVlJj at z#l}2}UEVli%!hYp
zzJ!0kYt-Jw^vQz!Q8V$QF$QtPeXYikgmN$JdEN6tK`T>ZpYKsO-Br5&Sj6-<%Z|nP
z%U<BKSGG#J5ttIP;nj{ayVI}C*V8)YohWalLLP}pZlx_-dPen8k;piMntN<|#G##c
zT=%z}KbM>PNzXVosBT9nw!_3YBjT5ZTdQu|3Z9DhEZF%>;$U3_Zr2m9-OX(QMsEd3
ztAEk`FyH?E0mU(Glo?@PzI=;(P?4Q-p>}!%6~iR#Ii<2Kdz{{dwY+yW9lQD349?=R
zZ`s(`Nac-d50Yn3klN~REb&6c?nu<Ty3CTf0uw*}^2Fhn_^X3na)!8lRDK`tf0yby
z>7H}MDjDqrPQh~XhjPC6^k=>B%DU#pAXI*taBSDX89 at gg9@Ng%sg!=SAW}?AWQtl{
zqtn>Ub~$cS6dz40&=vY%@Tlo*DdR3Ne^k_zDB;Uzj at Z6A{JPQld3fXq`-{PETaV0d
zzG-mg(V01KF0K4h=27Wc>!(}5_*6Lj_?ZQMPK1(*>>we=yz=VV at gvg5+c%#+cv(4h
zx|YZ3(G>>4Q*1{kP<GYroBZsQMnR(*OY-u$wTZ*4qv<tLm%ofpJ*;iAd$;xNXK(og
z#)Y_CxxcwaevL$;QS}qKhU<BA^QWku(UZ&@l=fwU!>EOuCU96byQ1tkBhI~gJKB+D
zow_XLv_Mefhg`8LUCYp4_!K4ft308F=4v>W2c?-RR&ApeNGr2$4H-IjU71>{OUS4h
z6CNkD;3V+u1LUT;GqQ78)pJ%EM3(7pqXy5gcCeNXNpYAwdas(v>2j5fr%FD2>yJ-n
ze~4$fo7Gp7nGU<0mBhjVYc_1;+cx6avkQ$4erqCfYos$zOI?czsc5oUG{wYWjjGGY
zC+EWJlCm0?RDRr8vT1Z?qjT>5)w}T~aW4FMPnL|yTs`ih``E|>6RP#LA6ID}xhyYt
z?qw&3GfQSHun;Y|FyeWf*X5Z*c1 at fyzSgpsZd3NUX#bY4W)lo{<u6-jxA2S1 at zgg<
z4~&}X8c;pl_wlrlh4*qaD3@{%+YFuZLB%QPAfZ5%FZ$v>K9Ljd&b!CXYFfBmvpL{$
z;m2Csl`}W=*&5?=3Qv6uSIF?OQi=a`eZ9x>z`CM!);lsARWt8jW=ub5e|5Tz>@(?E
z+irgeEO<}AE!Wg75&7c!=H|YKK^09ihj03r^<;Ci=hUO075(0eXWwI!jI^&h+J+{-
znatieh5G2-O^w=dZ&F<j-+LjSuTv>NFwPTVPrbB`AsZ7w!Y{aKR{3;XB_XiJeeE~D
z6Qj15hAIVS4z<6J(MO5LBp+W={oui3-7B>-6ON{8?w;*)=EZbz69HOHk!-u468UmU
z<ph4GN$go#_5nl3yT(73_BJW}FlGOQf|rBGj%wbheamxow1Cw}O6^;c`0$H9uUbb?
z#T+FT3O}1Kh;zNX^igZIslM&2?5pIKnusOh4CaxBYksROh4o)J`Z114o?D-GL+(}P
zP*Z7o%7YnGW2G;~=<0pjHk>jhp3Gb>(c~^6=B(|m!ckbJ!I?aHipJgaqVPiwpUd1o
z$=p8r^*lAnr#5!4cD<Ax|FQ6M*$gAK+=scTHfr{v6qj|?$70sj?pu3c;zrtJP02|@
z8Noq{caOzf-tAN~wajAGuv?Q1GqfxO9S9bL`m+`*tkfSkKaM|%d0*Ij_tGcw;q0iS
z3%}%)u at 1Oqt;w0y-c*q>>Grc`kEps9 at jd6>;Wn0ho_2fw<50Iq?*a+s9eI{1AKouI
zc5#amQO=3eKGV2S!e6+^Lp^rU)%lEL%J%6;s5u at w4Yo3jPX|PBA-NwX5uf7B)MK@%
zss(v^E|c#aeNofC$8q2A(3%s<!5-LK!-$<ap?kL`YS*6&kjh*mD-*n3ZnqS3u-7(5
z-n4ylHEXwIER3Z;efeCL6RCcnW;J<^kgd<Yk#3r|?&hp2^V>D^)UKIh6Si6{`DI0=
zZ|>92t?DD5k4!ooCwWzT*5Z2U1ux}n9zHV{vYnXse8kcjsiW6w`A8IRKM~)gviE*u
z#9WqX!wT8K#2VeqZB5gMgpXppRZviQWi{u5X)wL2{8f$q7GK+^9wX!`Vhv{$YAcG{
zC*M7|Z%Ni+l~axqyXT5qE8tgDu9U1^bEL{A<$~WB<xxsDD<bkFmoUFF#_gW|na|l6
zi!8NSqTjsZc8!$S5G9`-ax3MnR(-0DiIWNwOIA92>Tq4I^O-5xm%VpiU9cg}DNI9&
zS)u(_{P+WYe({kBm#2khD;TLfwU9hiSQ2OO;F*-kt`vW7Cdtk7_?3$6-8!j(Efa(3
z(~ax3QXX%!R^M%%efqc}acvCs at uFL=Bow``mXO|umY=JA<+~@FvsYz at gN4eQL4vu9
z#t8*j+&{fTSGsV!pWVR;t>tg#3YR8rwyJr}Sf at sK8R3&Z-n?by0gth}J!#b2%f=rJ
zs-N#zsx~ug_oe(jUX|*z>4XzXZ#Sv#l-rfRC~b*zd<Bj(=z#w6+VNh at sh+NrH-9kR
za!XMsVD<2F{$xQt{7GTV--eikcVH#X6aR9=_Oe6%@IzCh6KBYdr(tyoW0{vr6JrF6
zTpW){ZivrZu~*Rh*h@~i%P8k-GnP)3*>-0a%|Ktr|G`U{rSEkfEWCe|q-3Gn65c{n
zmy(xvFf0YB$ho=gjktM@<%-FY=P+Tbp{61iMp=iZTRdD`wrLiXwkrOZ`~z>?^cvCd
zl!RN7ud`(dv-AXH-d+zWDxa`BB+xASWF(Q4Kne{gN-{WIlXAml&#D!#3U19G!g9ai
zb4Y|;;H_WM_>tjbKf3ui$(0X__tq+rJ-+&?cS=QytkBkj)00h3oYK_{yLvGv<Lqwl
zMT-rZ%jPv7zqUR~Al|c5*(5_=WX!`SHDMd%OO}PkwMd36OQ5e3JZ_m;I7w^FD96Pu
z5}V=-X^*J7+boBTH68B4 at v8SKl`|8&b}7GFHhKE>%^zD$6%^DQmfF>=TZwBh<<OFw
zO4K(u+aJBMtoYTVyd7(0T5h_fe_~<ZzKk$RC7)SYI_R}*nZ at ejC-<MGh)%bE at A7_^
zEV0pvI6XLb;}-h%VUL3bdAb$K+)^38U;_xO)7f6WE0`wg56z1wMNGDGT(rz!&WD+|
zMmxv~zQ4{_93&no^fF9h=}sZ}F)1;%#I${s$VUc7Z{sfIr^d}@L|83qXfTav4h&iP
z`AOiHk`S{z$J5yxXKy%H-I#O5-8Dq0x%i&oqXj0fKBWwv`st;%>NZO1c>58Tvu%AQ
zHn}bGeQg=tv|skg`eoav-H7l|3Lb7gWP&*5%`uUp*QF~~j*ihAeM8gK=&6rrkwvzq
zyji?&Xw;1Ohn{})!W)-1Ygk?mNRUxjxnytE2L}hv%ZJykw(r*7VxF|SNK#XD at ZILZ
zc&9 at _Lsk)qINZU(l;xSNuam25Z+u#LU=n+QLB)(@<}m@=4RS7(EqtwdO{zwoR;uE&
zGD_?`MsJ>RXtVCZ%-rZxm*wPdNxK}Je}-EAy3o01>PgK}pM0(dA9%I3Q07#aLgcUy
z+L*5Ai+Fr$nEY&sZ>7^_HXCTaE+IExvUa___U_})`NCHg8#x{koPF%`G{=SQIsr{v
zX&K{h-4@^*>NKe&s6KY&xqCCxV&0CI;sp3UUQ$`Mt at Z4I3)ZR|XESADmE(plzr#Lh
zT>M!hMZw%DevonOlatwubd{MCw<@SL1ho(&OHcYTPVLo+f19aJF_Q^(y_|mQU16Ds
zHzg$2I(Vf2wneik<Id{&*NE{yWsn1*s3L;O(tI&EsB!-gRseP9{F}0)V)iasWw2hc
z^5#zJn(MORw@%*OaAx?SmQcnZ=F_qjKF5z4QF3&bEw{61s3oYyhO12QTsk^yMxe|5
zJlBcxdCi}$erimeTJ!RGE=e_szAi;5Rm(f_skcJizCz*QH6{|qHp7`~N8Mi<pW<O-
z_F$Nk``n~CWqfffeMFQ$YK&UDSn|GK{qZ-+^?uXmT%SL2?Dco@?3LCDHo=1e=vmp5
zauw$&OqClk>F%P8drqv|qmsvNiyk-jN?3c|1Ba>nOz9{LQ=I?s{Wm9HFS~n(mQGMy
z^!QuJ|FQR;VNq?%+Gux^o2+C(k^+)52qGClL4xEQBuhp>Vgojk1QZbjkt9ftl2h9P
zB1w=eIp>^X-`T9a_ILMQ`#I})&h~uwId_d89cLV4zN4x}y;ZeW)P;<2+SvBgn4Ht6
z-j-QhmGgARDLH0i{7mq?xT3jQA<;(tq?HoBjl=KgW-Y-fc>JSO>DsvaD at hiFd%fqQ
z!oVzr4*hRmENMiJ!`5PZb!~&HtyE@?L{(Cg at JB3r%rlug2<+{64v4cDmENq#I at j^f
zQigEZeK~ln*{6a`l<AEaFM%`aQr+GsE%L=BsAiE9i{vx!<;-?q#hnyLr^+wKFQC*Z
ze<!gvI{ggP{voT^?<%rMyWeKk&y5_GKj07`HfBBGJt7#JOwys4b9x{2PSiTB at XM?p
zGbq$&<1JsO_DI)6vBx=Orf%I!vz_iPU4b%&Mw at F!NqO}HB^)mnr;i+jIi!asFKbh$
zR^D0azoK=loW7{gFF2fOBs-bl=ZReKDIc|?o4C^N;_I*D+h|v6cB45=u8HZz>phKj
z;TqD?j-VY<mgh{wzBx at xZRJS<xhpo@&%Y<P_pT0~3H$ill@%-m9BX(@oEf!j?so+>
z?)*@BoW(3LfNl0&>h>V7zaQ(_1B)~Fo0JDuOhlJ$uUQb0z(DEvU^Ab>j(r)2kyZ+o
zyq)B*s9wAw4vX at koH>=tx+8)PPac13dn45-uH#bqQs?8s%+>0Q-Y2njX7wW}tj>?w
z57;?8)M`5GZIhBKKi%h0(qXX+aBQj&&hl|H7aPSE&v{xe_FyK5B14ft?@`2<67y)#
zX|{%$ePLncJEt*hY$nN;Y8tVH?7};p4_)WhNIK-xhgzsAWSyOw7Q4VhFZdoiuOEBL
zhRQDNYU8f$fXr%bt(<gM8rI&nC)*b>A74?@AP7^da3E)mwLj61{zlrv*`n4=#oe-a
zE~ao|^`_j>bN$4j{as5!{a8)pbN$Cp9Gmi3Cd)-C<~-*gKWRQfl;08Q+1@*2IWs24
z2(XSfuDYo$V1F~ouAy?|{Wql>!7Zy at J7u??c&2$?uSqliG|#^&dzK)XO{2v^O4)*Z
z4$r3uso(9Y$eGw8FfceSq1ad#JTlSJ9`mJ#f?#e7T|En3<Be`E*WSJ9e{w_3J^4-o
z_01%kt>vNOK?-b>`%jK<1WrAjE at _WB<mqw+J-67qpM1-n_FbcJRDITbfTK~GRpLf;
zxpx+!*U_?QVHd}_#QXFI)SDtJyS8+P&j(tjRzwzaD$Rx8+J`bH*9nPCt01#YY6Dfz
z2zrejzVkZHeWTE>^R~Eqr`}Ssrm6RRY0kLQ%lIq>qe!{_^HCG8uT!3kR_*2B8g)ya
z0d2z*=Vno4LPtUQLk9^Vt7E#2BuSQ_5Vir33zUSTB_=W_fS}trlrNXc0)xZ at 6vUTx
zTv)z#j}QB*h0RV~l|fG3?rnaHWz&w+mjg2>89AM>R+8pnE~D>^*#3Sj at 2sCv`YD%^
zfR$(C2z}d0dkuDG4?b|Y%U+wu3&Qsu^{S?$R$S|&=e<NniECt9L+I-1CO`hfRrYkh
z#L`6)r)P_if&iDC)$l79kr+6#X!5%vV$Rmz_Iv3>KX>(d9VR`)k5-EE2O|Evu{r@?
z?~8y(R^0Z2>l5przsjWoL-?$Ns(P?*zOgIG<gNRpw~8NmgQ<kLtD!0MK2C#mm`b7Q
z+{0%jjTP^zB9uoEo*0|n_Sms>O(_a at Gx13bcsw6HtaVdagP+YN?(mm`GoJfq1&<Pf
zba*0Pirlz62T`~(REOtlT@=zDr!@YssXBVGv%qg80yIA_bE{IvlG0D{5<Opq at oJ@U
zq$39N(<=2rLSdDA4&wIaALGsYiXf>N3`|U7p6joz1LiwqPvm&988D?FsfW`Ml4%0g
zSAT$EV+L388O=8y^)7PvT-EGved078)zhdv>oi(}+kDtC9|79hvECSCeVL(HS#y(A
z1Ct_P7umkMD0^U{FB&2T!o-y0Jl}-t%vekMrMzKo43(pr5J;#Z at hzAUUZ+_;k*ppc
z&5>fRU!Y;U<XpO_94tBV;jq{KXz>TrnaA3Y+vS25J_soZ2}3mk)iRZ2ZQ^yqe}3xZ
zfGV7H)au;Scm7C+8C3P`_8yFabJba)@>VOc${l$GRcMcK?5NcHHN{=y21QV$vMFIu
z)e{aAm=x#vB3x(svh~IlE#c(j!*?YLih;WBFLGNlecbQi;KrQ#6zNcS!uos^Xj at 3A
zB~D`Fm)xu+OYSfzZ1{M*&^?{Puf&epr0iOjJg2)MZc?G`W4|((Y;fur2?*qXDigCy
z5t+6J22UFHM;H;M<$K7JW8yle^OFdk+a at U4s7#5i*0bTy&we<K)sLP&+p7~>u5X+h
z?kUi4yw&sG^0-CDs7kE;+_kdvym))L;KMtg&jEsc2WirD1$h$!Sx3Djv?R at VFD8z)
z(!7c&zdWP&pY>5GJ18Sb5AP9Accz0S1}wgp0R{MlFR+#$Gr#YWUXbKHlmWev8fhKx
z4 at 7<3n$}ut-hUu at jvF35opC5Wg8~cp`P-J+S2+S6r~j26S at eDV&$XZP|C*cpbn$oK
zR{os- at dy7eACMB}FaGEMz+><){J;O6`0q;>{O=3u*Z-RWDv)E=2HY0*-#H(kvc~s~
zz%L2E^T6aU;y&7N!JOzwFMye4ZfY60gJyj-A)pjyV6YXsq81nn#$@`0*Az&L55#)n
zzXX1g#-vKn(@m{GhjNf}e(FFHNaz0_TBtVf6?DRADF_3$Awc#1q=`VYJ*2gGd8OVq
zw*iz8HF93h(o%p*q6R9YAwVaX96LcXKt?$*vO~I)mC%FnzmFF7v-o$k^!mx{?|+W}
zKjweo7Zm=B|A~I!etG*B_{RlK`dj|@4B81O at a4ah|K%e8`)`+ at X<dzGbp2!gch%qV
z{uIr&GJOc+1*lrBuwvk~2~-BWc7RHNS0tzucx^K^1#-Vt;R3kr2Z&sTl)#5hAo)_&
zS9I7_89oC7L_7+TKY8~l3Vq7|eK7s4BY(l`&*I<R*7 at g>zX8|$=koub<G=WX`Tvst
zzhJcgc*uW&|9_ACzsUar at H}BK5DW%GAP^UnPjnzi`T-Xka3TL9|I5qY=LA`_4gg}&
z`vmGh=X?Zl;N$WJ%cEs-o3$nUqO6YQ)oT~|*B*kcC{h9G&xpqxtOd*sx-jZTEa+e^
zX#z_t>^u-PAliBD_4F8hh0%Fed4t?}gRp=p<#Q&W8<3k?nVJWo8RBv<y!S9X^x4qS
z;+UkS!B;+ElbC`&Dr1piJ3YIN?z#Vs)5_1`-_69<(aPy(xZmi0`!oCt2#fp^{}ZVH
z^;i5Sy6b*<`(^mQ$o~#p{(n^e!SZ*!o12@%F6w5%5&}tyV7JgwTJynj7l41(`?q)x
z0yZ(&@39|LK*08I#BOv1$OXgu?;qX*q2g5UfHLCP?i(1GR3LX<&~Vp#mmqXs{%?fv
zf9o0fIsDtYTRNCLa{sC5k3Yvh|G&up{FnXz-x}8c^v?eR|5(7zzvX}Ibfd at zzWlfJ
ze?Z`84yT~gF#n_ePyajiO)()ra%bGHAVzA2YZyV#)i5;B1*##pLFD;3MnI(aU#La*
z!7pn61^m0Z|C{SS{DuEtG`RnX!~WmLKN|kLpFk{B2uw1mAvKq58U`#h{;fdd`;E*z
z=zI7}YX2uj^1rsp&*2}~+QjXN!%rFjf2#kB{2~7vFaKZlAO33t`jdP83;h3k?Eee>
z9}xalR_GFt9$u>Lz?J<|@@MPcbpRQ(z5iPwa^*-i7#@(7fvN{E>iJUDq<|1 at boRF<
zL at NR`%ZQ6!ER<vZo6>Kpk9b6akIv!1^|yQxNM|Y_=3A5w2>HAP6bnc1i498Z12eVN
zWSOG-=C8Q~-3xzjKZpN|`VW>5ZU3F|pS-*xf7Jg41pcc3 at b@wLl^=c?{{7MZKUA&O
z=^H^*o&u^|wbl at 1Y(~5qkNpl89N~_G5Xa8)g90 at lfQk@<GW0;%2cSR%Pzb_J6W354
z%kmxpJ}ww21OZfpT8QBSszXdhumgo7ifJ)`+7Sz8x+_oAdnK;MIg$cJB!E&9KoJQb
zzWlef24Ked&EqKTUXca#9sA#Xjle|orwzoPy=e&S^?OaJ?u+`gsX006SwYu;xrjij
zfu<C2MDW?<y6kM`F`}0p*bp5E1i at 5mo4p;{e~3?iIrdUQ5%(940z6=c#PI3J$d{%K
z*jHF<SuS?8Q^d8&4nEAK;Y>^fX13Ivv^4gNv^1h=47d;wxqc1w&<=5k{s*L)8`v}m
zEJ~){%an_|Iq9ncOn;zQLv!8+;7Ea3Pcg}L&A0&{XzIQGKDno)_tBa0ep~gpX?^Wk
zM!+yP`r-Kx=DeT9zonP6lk3mH|4-Nd1pg at i`GBAP^8cg9?iaUThX0 at S|0n&f3tagB
zK~2h>k(|m5AavfB7!W=)vmE9H`bci8J%z)mFFvc?W>y9~fq|M*pv!XTR54b(WxTwy
z@^AFeSt9<86o3U%jM6F&dUVRl{|HOJc&L8K;eQtYwvKK<0_dMJ0RBw>7Zecqr}ck+
zKENgL7yf_Ai2vh3e;NKS^1q>g#4kY3$Bqs_HUsA!z45LYc>6>Cx4_ at A|F`_lxY#6D
z1<*O#_=<T0L2 at uao?|h<QX$ID7xffPLz2Mg^iK&1q-etc)QgX4`Wb*c7>NU>PyiMa
zDF7)6+et$^3;sos_+<?sM=JwaBMdMw(vB%`(dpr{%P`0%vuz8|o%0_^OZ4CWyV}p;
z-_69?%+1a7;lCIEBL7PM|7HLGk349<4F5i8{lDYe$jriaSvevk<i+XvdB*#q!lK%Q
zg!h2z4j2MDI%Y#73xHh!*aCpU4_E<!X#nW|fOP<9_<(K?m;ivu0GJ7YwhtHry9X%1
zG%z!>2dn@$w*XsPx7 at snrZ3-BRJ4J<0yKL-|Np!4&nRUn2mE^DXOw at C#xBD%V5e_?
zn~%CdkefGe5>f%v1vW{_ix<*(EPw?d1%5)Va9v(L0k8rBF{vyCUrnN?q0}@?3=%Y5
zF-9jwLru-p`gJT$IIf!wKrRTrg%J$JuS`#8ihUW9h}p;q at E5g;+1Q)|wX$>EwxMYL
z0sN98Jh3KMEE at ab&l|<;U~<@@9Ssfo&<w;cEiK^NLV!b5S{D3>HL?hp00~G&;HJKW
z0ILD0Tqkn`Y=}u3LqSFwEC#H8z#wgHZRx(w7aq`kOa|}OS1hm5Pt-rnZa;^Aa}#G*
zTL&}OCqFd-{F(e07UcbB`7Z#Jg#JtZqsQwPw_k?;duaS0eE}`kg7%s~yPrYFt)TS=
z&}kcJ2MJoO2c5TrwmyN*+CcMFpu-l>Mk8nw0Xk>_oqPptBSDKb=zQ_Oy#uKJEpc4y
z^1%n-JN18rXAoErS_y3Qd(P+>DfGG`10xYQoq>Uy8^DYdn3R;%g;f2jf<Fs|x(nU~
zc%TBM;r!07;dcQXYDTc(Z~!{XmEdelG|RXNXw7n1)o%`|0 at 0j<YYb2_lFOE63n2b$
zz}GAY8}d5zp(3!SGCZ3tm_!$_Lt-?GgV7YDv>-U%MTSXsOaxjNQTx<_PXWv&*T at Ob
z87G5$h!*up7|}>x9LE8&#)r(18Fd$n{6G)+Kfx6J(=Ta1i+>>h>qDoXtN{6E_!ku9
z|7ZO30Vcs;`2Qs%{*MR!W%$3){{iU!9mc?U1;5J40B?WL|3m*l{|9V;5)kQcGM5 at N
z6)jsqFRiUiO<@;h89>)Mak0^H0T4XU9NGZD)cS-eg0>IX6D9%jKW-WXT`rD<oPk9X
zSRIhoWI*pGhjkfg2w*N7WD$CTwiTu?KOI58D>EGt{XGe^4<V%WYDIw?x{v;+5Qsk4
z|GoBe_;)igb9c9NbhmYK{0R-<&+z|8{vW>x?_d1?|B;8{m*M|+{vQf0#X<LE?hF8L
z|K$JsIsV^84JdTt=f8g-V5 at +j1?>g@?;^u1VAB5|=ilGNs+%Hc_|jlMHu^gL{{d?B
zo&G1=&*9(P#Ky_tC#ygGIsZ=x2=@8M{I5X$=fCv-|Kte%_cr at w_-9A!{}>n;fC^Av
zUf$K!H9kJRv9SS%!-3U20V_1G56A%xsP}-f4SY_nX!QZ!i2k77gX9sTt-wDY|E42M
z{^lRB*xcMMEdgIB at Wn1JTbrdNkSAzOVb0Cfb*s1pf{q2ic=fHR>1#8d23p5fyDcK3
zh>0!@MP=%%t(}S+1MmX~oNsgBt37=N)M1A~fKBl61u%$t0K5Jp=xB8{@|F}hl^W16
zE>BLv&{n!GEDnna<cb4qfR&&}g3c}tRI2O%veRowp*0fdCIi^m7+3 at NTkZB+9e5d9
zA=e3k>;M1g)bn%rcQf%cbNw07kG}Cg_y6$<{Q>_#NtnO%|BK%HwJ*O6{}=Kfko^F{
zfji(5a^nKt{z?A3{jT>1fv~aJfWk{u-Dq)sSAdsaM(=mlKksd2On}V;_}N3jS>P;y
z8}!@f+`vF^?%%&zF?FETdps%71+3L>W4tm4YB{4z$e2rgzlapVb_W5x!q4eoArqr`
z4Rp8ur44|74*%vRR_;Im at K5Oe=x+Wq{a+9u`~9Q*=jZ)P{-b;D*SBAW{|o;=aQ%S&
zF91RpfB0=8;E|TU0{r^N_<zse=Yk9Qj%WjFzyeelHbiSHE)u8#3q<i<sQqbxp$~&_
zD#G3XB^!X+Fr3P2AarH6Q0O%P>VSD4aZ%M#4og4=Sczj`zo-x+3xoq+RD!L7CWr$Q
z3_A9&3AXNsuKLpO8pAp6RSqY*tN(vEAN=R>?`Gj at Y5CK#AKk70G5!JVA1L<nkND@~
z75*#!58ZXYy!{dXU?d38cyTd+Q%8C>jRSB0mG~bF5L*8)D?3DXbazWrXJ#J0h;Qnj
znmIb$TUl9o8WM7Px(6(+dwM;2{rV^&K0YMm*u&%4($0Q)d9SapucD$NtG46&_>`5^
z$>!$f-0J$BJEvVgCWwhquAXJn(=*kdTfeq-92F=zJ14w(-!fGBVt;>sWMpJ+Zol+%
z-_Cr`w~@)Q<#jbR=gEa7oG2{763NKOSlinDF~1xV*)TLaoAf^GeX!2R$iBF^_-<RI
zZ(ubl98^<Nm(r8+{rf>f!@=R<;m5k(j*f$jg0|E5ycLbjI(i233U^LVPme2&_WLpq
z5RZ3{QD6H;5BFBp)k6o6 at 3;4l^YaVVhC9wqkJs1tp2sEl2f&z_nX?MZU&pc?A0OwJ
zcdw*L0!GR1?%sJUZc=i?NfK>ZT7Pa?g}J#;MN at wy4o+A^<oDij_lJb%=jT)FJKir!
zCJOE1l2i6K7J3&B4i5HzEX?h#j4tl43=PkgmCX;%ESQ*DG<T2mO-#48&Xr^&3*IuC
zYQpaAn>{@_s{J|$4=HeVasAXWEG;e56T#-JrF?vHc5=Me*xK>q2P!o;zc9&faB%<g
z=Y#QyrOC;Cn1e>wkJ06inB>}^Z{NP<<z^L^Hhp at fxw>{*QrGz9%b|wm2h{oL!ovLC
zWJ7-b at ZEbVlWPkLEfvQ{N6p=R2xt5kFJiWLj=p|vjYuxpJ4c<KovW!oC at Co!9v<pS
zh->c{N`GIt83@|h*+U(p4h{|j&CPljdh6;cIXF36in+c|%<LT;9l%LW&ry4ar+eFL
z3i6Kz#umCqCVRe3g!-8e4lEkVi0$oe4-Cx at eV;j=3fnkapZE9Q+1_qxX+e~|pWit-
zJUW$;xdaf2H=+nOV#rWusI#-P`j$a*3UVG^85C-Fe{XMZ|6q4-_s5Ubii(D!sv3PQ
zwe9V_{(;e~tgOby#*U$}!_%{#p5U97aUhHCiHV8MmYU at z4HJ_W1vOJvcEy^H0~)_g
zHphbo1_p8)zQJEczkByijuxkTbP|wuz~RGiCdfe`J?g*7w!?c4sn<=<H&AS;^nlC?
z>0zT?2BefihI1<h3`FxB$w&->*a$+O-2&mJ0)K7;f3iK7QF*Jr=tz9+bxqzWst95g
zB>hT!>;8jJjK+(`q1>SIb~?QX3FH83{hqpt!b_UBsWF)4Ah4V*S*e|Qv<$gR+7TSJ
zW(ns81 at C?F$&Q6;1(2+jvYm*oHdv&z7>BYmV3y{oX)7ukV&#<<$ZWiLoE at r~WFnev
z!RzQxyA=*Bl1H)uki at hg;Vrz>d=-9gVS at DV!?siMIQv0nt~YIW`rd?)ggIS>yFQkO
z(`oOZPoRbdYNo$;=KRCUaz)i>4*VBe`g{6mdgI30PNbz#oZR)r(nbRqy^^)io?PJg
zyKH^=Kz2C$I5trtLcRzM8}8FeHp5Y)eInjsnDps)iRFoc0QDF)&eQm~I4t+HlSTv6
z<JUgg1Cl-r*z*LT{LW3Q4LchFv at ygKICsLu)#}CBpdT=_hM6&8>Ru|%XJ>S#WasS=
zc5ckXW$yQsg{-qg6>Ie3yihHvfrsRf0`;&TYK#OA!E2~WLB|+5eKW=cn4Do+K0Dqp
z2?MM(R7PE0mQGz=t<P3_>9kor<{Wh(qk5iFJiczfjxzk*T&9VIOcJRIPVe@&KVBc>
z8AVyE<W=?7oNK3f9g3Zeb)s~hJ`2N`0p}CU7LR#*PwkXxR&T7HI}jIEpT9{eYOFY!
z<1!`N4jG%GsEn=|psBiY4Ut!=sJdv9YMeLzv3P714xb)OM4j0W%+&Or66>aI8 at u6S
zDomY-L+Wa8LO&yWwMIXTO`UzotYkX754Y=^43%*iK5~JtmKKMOFmT-W6$WU;rOPrm
zbRW at NIq!c645Ye at cPEOy!(>#Qym98($-ipcQNqocyW>(feq+X$6Q_PUlH_w$Lt?qw
zvFeP2lZn$Y21^6!LXpAV5iai9E7w>-L<<2^-kz|xS_rl}H&)t&+Oba%&n$38jD_d1
z<e)snJ1=W#33Vc3v|&l%bI4?R6Jd<|3Uf*SK$YC_`KF|rv>l;vbHATj)8qhsuH;kA
zKoY|{7%O&qaYxflEsOyFD`uDo-Uk<JNleV2OB_lsF7B>-Z0l84HIDzpG!@+bJ#%Hx
z7?RO_hQn*OP`ixs at wWclC|W7LgIa;-bqtOaY+t47QnOs|4%#(Ic(>QcY3lF#Om6C9
zKq-Poo8AWTUA)$*dIFr7>iz6WHb-}V!RCE$s$vEq5zoec?}E(<Z-$ff@#6qW50i)!
zoHlr_cL6F3yv1%>j~6C0Xn^uq3Ckmh+P{}pzZ#9d&pv6WD{A8JpLXbLZiG!DH7l2<
z`J_6n#HG4q-ULr=cgb`^^K at pw2mHv((2cM+_6+Bd9Y~sr7m7N=#?C)$%s)zH!R8f%
zI4!*i=HSpXB}2ZFPIq2v+;mP&v_(ka+%Y?BtO^)JN_(G!Zz9-63CV`)uTa5zKTI4I
zh&;bS<-oD~RH}eARcVxVRO$hI7xR3$EI6ZhdV-k2n&uW%=k&z-wr)C!AziMNkH&uP
z_KudOX4qpIDbNcVcw#<+Ww9qCJwH{!mYfZm>E4!EypLZEyFPdtu;lGIP>qrCAk^>n
ziLV+NHe_aRfY at bUya06$mNgu|N(J9ZQ^(cP#%+hsd#0a*F%0N0!5N4|p(aupytFpR
zb!Stu<;FpL;%JDK4sdm5-WyI1RT%dPJT)x?`3_VmXy7tz>It{K(n)Ba7|g&NXw>Le
zQ6Fu0w4jzEB*R-ko}ZU)X^iP&eS)t*9{57-*X4vt<kFxgboKU?uuoVWWa|UooxT1W
z4Y-jqKKtVHhQ|o!*?}2dp|dWbIDAEQTy^XlB1PaNHlAHfZvBmho$;$0F;L|hEbQC2
zpq~SCbwDZ$Se7291YkF_0ZFh#eRzHVt at jF#s}TXFLT|cwASDOl at zmsVWWh8_i#r?Q
zQ at I0w>K{s3YJ$0cL$gVTbT}QjMr;j%G{zuic5sx8Iv!m<#v_EnRCvJt^pv;c>s(Gh
zXvgJ<il9UR!~k}&C1c9<1|m6B)%7Sc_&p=(HpC}rB$kMeX$!<EGrp3c^Nsl6?ymmu
zi}X#R;^E~MqDbVPRINXT{e4q1{T1-aH~c9C=R2&(^v%p|#Hp7<%$+G;J at PpGo#x>W
zcqI|vC at TZLVTB{BY-O63fFjr$8Qt9^?`B}b#5C|rT8X;p-N|`+Y|D+}JYTd;2 at 8<q
z6%E~2TfzGn0q=K8C&CTv0$$8iR-K><%o at v@KJTJR+#0L2baAz at 3wxV;_q0~W;M(~K
z0r)SOke^XI4J6U7DFe4UCG48RGZ8hLk{i4D>g#!l at bmgd=isJXbyU;FYK4iIB*Ex4
z*8pl^$$P?&Bz%VOQ?~+9^KL~b))CHA)$*gcM#4_R^-BNXQQ^tVML1z8dnyAvCPgMY
z9HsRXrmlO~=!`+>Vxb5KHgmG at yHw2S4{&JVsU6wDT$GTLxzyIGJ>s|BW2ox9)96~P
zb*IzzQk-bb^IELJJ;&ypQ#TxoZ2r)1=VLP2aA9jHi38D-fPEKKS?PK3icAbbBUOrw
zipO$+9P~Qh1&(4!#ySXqOU+e6(^`U^ryAMVjA?LOx?p!0Ye`%U!S~b(=@I-N)n41{
z)ACsYG!ecS-Ke{-BADVb#2Bu|yp~$l?Y7H;XnLgM!qQ3nG>L{z?2{YaZ8`<Xa?=Tp
zAsOq_*lJ{@CbQnE%II17QU=KoOq%=7<6J31O;fVF-TtLt$MvcDW#Pzy#mhwOE<6RO
zJA?&Pm|EU!gp`bh5vfF2Y$9!!A7}wZ5W}!?qU6Xg0TY2w;1O|aOn1-wBVRLZiW&r0
z$7X9A`>A9TKjTR=y`p+Hq{BB4;RiexhK5b<oWOco;73wNJTGp{l0bFb)uG^Jx%U*E
zi?4Wc=GfxdHOMF$79a|Yx}XF)p3=)vvcN(bLkX?CTpFV&G?U;tqk6W0n7t}Xf(NNB
zg96s8gV~8-AUP>lZ-k-T#lb%Ykx at O^ylJdfM;#8amvfd5x9N#gU<_O9iO7pdFOH$3
za at sCk-3U~#0w>^CKg6 at TI75L1w8JxTvxPtuns<$WQJsxZj0QgYDr2KsyZ%l%k}#Fc
zw~<^|0&-8+l<bmY53nY$q at EoN2x#Yg>WH9Pic77-&Vo=S&O3p8*wHNHE>E1fHJ_j|
zNNC}d)tY#gz&V(1LiJwoGghS#lgWM!$xv4`zX^>*;<qLvBMf^V;t%VTj5OlhVf>V)
zfxhDc3HCH*=!QBXgXA^gV}*>Ex2|LfOBGCWO3q}thPrzeH$<U4u4fD}gn%9s_;H_2
z5SsQz4SBd|qJk$Uj46WNrOB0y%EBe|HWS<TtWKP;GTHRaX?ch&dJ#fO!-wp3FM|*x
zFI0%JUPhZvPMG$&%=b2RwXEQUuk at 3p4{UB{>+N9Bzzushqnm;8-crYP2)2_+%8H?g
zTr|0{IYjW$R0!DTWxKj!R<Ob%yJF8xdd at A3mw176_&&Z?Xg7$`b86FTN{n_ga%6Xl
z?@EUc)Nisyx}iRp6YI@>c)7P>Vn%Dz#mJ3cvrK&J%o+by%H;V51y#l&L2sJNJts4h
zc*=$KC?>O%JrunLh7^{;jrS1s7jWFfDz=!deRVxOb#`_eCEh%eW+;2qWDackHgNUC
zeXxv27&hOp>LTt3Tgjf%;iJ3L(wB_PRwET|f2o-5DPAxIGmT8hU9$+1YJ=u#k0Knd
z8(KY-xJd!`vfl)snKXO1rbo`lSDxRgcQ(QzD4Hk?L>U(vY!GSUY{j(&Y-$FFLlX!o
zu=&sHozFf%EM at xw-@|4bcZ&nmuHsHi>sR&@)>V+Ci?9<}C4 at u!yvTj at L_ADatBYo8
zumsjp8W56k*+<AuGoG38+LF(sknf8Pjx=|UB}E4tV!Z8D0|`~%vtb^vApmfYb>Z;C
zO@~RGzCaj2ncD3%(gboVS#Q}T+Ol23vXw05<wv_DZ5YiR(ztV1+RxwxhPt?%tm}5U
z$E?~~oF^Fik1L8}+)K|yJ)PMFsQH<q4?-wiT_cN9miEQT0!jlEpdaHYqlanFrFE&!
z%xYrp228Z%#b;$Mlz9!#(F|H$Ir1&nt=E5>SZP_(kQK-ldx>P)qn88gQXC9-GLCbr
z%mOx!^R`i!KQ;EHp?&@js at AVWqP4M~Eu5CWkMtE|gjcG{YGf)<x|dc<=ualU(6*(D
zzxt-zTXkz!BIupqbmy+6DTv^<8gA<6&sEv%`(a9YdDYxRD?dua5+6TUE2HKMRO at JY
z7lM;=w-L*<pGc23Buy07{yIczQO?x4>7($RW>b@<wx8AGa(H!4^D{rV3I#Mc`|-SH
zgWR{Mq08#!!LGyQV-9X#!cHKJo6M;AFFpY*ZyUz(HYR$mOzpC2eo;9q>YU$#R&uH<
zxbTw>z(yZ;#8D40n;8?|vr!7M6^}N|x2K`@(I7W8(s?tjt at cvvx%p**?1Yy&OI|}<
z`el- at DZ@V2W`Qqt8ob^-*pt%5T at 0NC-(VMC!JAsZ!f^DYy^;I`=N9<OWvT49DJL`d
zc=z;~>ux6zl?%limyvZ_ldOB<*T+$4&@#-<HEfz(;x<y%1<ze7>Bz)PZ9HkjvK75F
zF4maMsERb}+uh0!nc`78<^rwkw_oAI#RB;jzQ1=_qtyM)?Ivn=7LxukcXG#yuZDCt
zM|L^-j9ry3_qkYw^OVpu!Fgac#NDf7HcqHMem+jf){F$w$9eC-|BPSQ(<y1h3Asl(
zb#}ZxF+Cp}b8q+uW?DrEGQ6NPresY<^nFGzr3_TI_xh{kWMZWb5RBs*H|?#!1ekiE
z-Bl~SM%h at 25*^CQ!J||Dk{t&X!yyce*0WC!nMQJ0?tYb}#*wl6;5)H%H#?SdY7}$u
z{b#KTF)@>hA95Y<zeV4fV&@HAxF%=X*=B=evua{KKw9L~foYa(jWx}=w3$j1Exwnb
z#G#ZQZaSS4AYBY`7x+~ILM1f=s&(t|5s7rm3b>eNph5%4 at KahydCpC_SSt=v@(;S>
zlPzXRef?8-Ma6MLgb>~j!hX0N;rPS|_SNf2kDz4B?1^t_g{IpjzjoX at wJt(2`ks>;
z7CNZ<9F>1~%zCTLjg#o^W37jA4A=QPAQiS&E;2hDgM8|Y#Pvw+OF3;k#<SO{r5F5p
zI}}aFZ9g;_40k at oskmf?pQeX9oW}zh!ezdRQ%B0ku2OR8QrMTQs64)J)<|N(QN%8l
zmp9#LlRdbnMZABh`&y1GuakxNO++L!Vb-l|TkYjHYQr{~m2t&3Q<!qL&*xY>qYmC?
zobB6-8DI58+A^<>h3&3a=$;Pm8i2GrV}#5ZLXqs(W_78!X>o8E=b507$zObU*>CSL
zHhfv@@x8T|6Y99MPs2aX_bnes<mmepYn2DWl`0uCh2Y^)S6h7Rz9gBQM><FG=Ec)9
z)fpS9<ke5CIR$mLtZd%Kb+mq}(jJ>D&+M#sd`<R^Cv(2Nv*=azYsT#A782Qak(0R?
z{JLab&&06fDBeX at v>Ht*#wV#0#19PQ3`bPPa74#gg>R(n{y0?7Vp6BTdGZyPCykOd
zmg1>G?l)=u0S8ZJ5{IuJUTE~(dsi32f@#&o6s2p3+<D<y=-~P_AJn;>sdut9#l1`<
ztJI-%P^>7(-|xt*w((dQ)q97v$8T&P%llLzA(?(YbmxS)<ryg7fG-?_k3hMMs=^RA
z_qE_S6AA8<z<VeLIJ7*cvJHQou29n?ll8slkCUdeN#Beyl`Ep6)WIbW^%#opl$M`7
zP at H<wO&%D;{o#bP at A1hDM&Zgj>%r^_g9A&@efmLq#|#$4b743|OY=B;L5rqqo`U6j
zLs9-0T(kn at sWzc(VWH*WRwGg=bMtXlZ_>jBieJbRQ42IF_rKOF!+ejV;Fsla$EYLY
zDRSB4=DXusEoUO_9&%kni+Di^xv58zt)^V|I-jt;Qt0O9+k4Z8CiIk*yv~oO at T0u7
zcax?)`1WJJcQ*!<9Fj{ds)r8oWLHya3a*dg+ecej2jgq>Y}W at cULnYY>1uuqCl?;Z
zO#D39C%5z?FBCst%1)Upb9Ccgz*C_IMe?E8=?|rop&s5`DM7R1i-woeS!Q3xV<}7x
z*peu at oS;g3VJ|{`2!XJGG<in*5aP(A+iZ(PS&!7ZAGR8IuTC?_cI&eaq|z5jsT&#J
z4hYPDjd_Xf*&|I^>SXn!gXlJUy;am%h7k#64eDg!eq*!9q$?T!;M3NpsbCQ=vLK7X
zO{C8gZf<Tvw1k$CGkXzrpVYqn19e26ob>f+<8OzD_ppq$MLft?#|(;fcKpmwuje$*
zVbN^04aa{n{q)+H1l}h`mz={;BH>MX72X|4Ek|YyQ((-#m#tCtxS?C#Fz+s!XgO~9
z=0(ip!_`UaSI)JDHyF*ZdH3_ZEiV`RF!omQ+1O$n`P^n_RUP;t9!U|v!^^fGsb at Jg
zXZb0LCKyoC^lw7L_|#Od3PH`PU*5y5n<LTnY at Z$~1nlfhHo;T(!(x-5mnjt~Oc^Ex
z6)70JU9Y%cTl0;XgKqaagAPZVgt>~i+MNs!D)s#>+Fdz#idJN{+DG!e39qXSK%x~G
zZP(OIBaPGoOL>?uNw7FRg0yZlmDrOpz)aP3=XR7%!Ym)edKkx=KTUy+ez>(zaRs=X
zErI%q1TTjd4?+(V>quWE<jlUvuDh;j_C(INP-f)iq0+f_Y at 69-D&X?H8?Vw at 7_2QY
zo0BALJgj6|R^TqQ?dH>qE0|`7>oSpEoM(MfB;))+Y`SoU`2!>?Jx=4qmViaR<E;K3
z`{>Xlt%X^+ at 6n!D#NnuH7~fR`W0nf85{>(BZA;*T=J+`8xzLJoTt+HeWJFR3EnM>9
z41$yZLaFmr)q+R!2Bw1qnRN<Jdz38+kUKZMd+6&%?8MZ(>JM)JG?kRwNB#TyDv5Y<
z2H)$aFVBozipSsW_{i^2R^w<%Q&z{~udz<idpJ|wE-UdG#ZFo9omS#3j6`&CZH+Mf
z0K62eIJYQYxNymy#rcyIB{Q=ibnXM5gO_BA#5IIC5tZjg0PdMuT%0B47eQ+Do!Ydz
zR+Tex7QLBKax3jH6A3iwWrY_cG}W7bzlTo at KkV>uOj(VOt&(LeuXLk#6294$CK)y(
zinH;4c3i0}(1=it)kP4x73hc0$;nA1aoAWyrN}e%jO`AO@#&=H6b}!Nq{9zE#<Yd=
z>bBC=RfO^f*C~{?i-*TB15Xh#f*W4Pega3O)`j8$&OjP?dJ&oZPA-AGpIj!3=TUX1
zmC!2)zn`2*ePV_0(YA7w4&rJ<R&<|n%3XRD(@K(SjB`5&{dtYIi{zwn5^SR8Wj=;2
zW&=gZNN|!1^794v&knGKcMCY{KFzUV=0n=po`yy^VOiB92cg<fb(Hk=`4d8!UTve<
z<+k$D?dZ7pu^PICVsvif47K$zGMkJyizezR!`wcBWSE*qp}V`G#X&7)@_Ko4 at _JMJ
z44a-#{l=X=7Q4lSyP|>)c2dstv#gMeuARw-X)lhvLo5W+Jtd|ty3eiu;1WW+F|KTb
z{6r=W25Z06rCm*ZyPb-<76vO>nQkr|1?q!+hY1x=Q{n^5(Yn&?ZO{o(wzhEJR|IP5
zb+r6AU>eoWx7zJ at ugUfGWQ2r-WTLdv6Hgt3Jz6Os)#~i11KXxxH+s>_Ec28;UYxqs
zh|jVa85mTRVcJ{LJAu{r^%z-L#@Q=5M6jW*l7 at 8&S7P&Kaweyyrm)!kO8|c at jYP-G
zwzUqtq$oNLtuUzi>1+(&r-qobp%M$~Y4!1U+FM)NSI3(Xi>0o&7i}%eO$kGBUu>4%
z)x_RM)S6eD=Od(!Wb4QYn%u!RuiBF#-X3BN?EveB&lMOSi~F#v`1|{(Bv!QfLwW?}
zJ3$)$;h8v``IiFwX?ZWRh+$Y<YHb(kD8F0Bwn5zCVYsEu7nypOhef1?{Tzc=LAsic
z51VR?9=1&}-lg4z5YCMIAfhb}MlaCkB;f^C^Ds`urpV@`q-(^cC_4w4#KxwZ^n!^w
zta&)BO<8tbE4KA9X4iJYO2VsKaU%sR15EYWusR(1jGiNGo_AukjLMsK_+vEl@!qDK
z#mI0`;p<|<L@)clXV(>*icN28#FYFn;*W=lIuZisH7%fokG>Xz%ThmRG4WpJ2FYWw
zu{tV#47XJed7ZG;dm30kN2iCCm%u!k5K*att>C1L&wD$9QYzfYlmj;}83>J`f%iFt
zI&RzRixqwSCjHf^rIFenZ#q21{ru*k&=HIN6B}5rERUKdD2bQC9!B`qP{G>yG>|3_
z5n|hI>5<BhVfx6VqB#5 at 8mqY^NNXA+mEyS&qO_9A#|Inmw5zk##EY3W-7(uFkbE68
zq?+<D=~TG$-lkj3*?TsF+{Fb at Bu|8|T0r^`ejmegoOvZ4Qw0nw<mmNx?+{kGl)QO2
zy!1hFf$3ZPYW=4SrcW`%siF2#`gMVp8#y?-YrryzGg<htyE+zcl!95%1goj6RY>^s
zhwrA;jgcxTQlnWQ)0N&GaIyX3TmdK_oA{>eT~*WTiyhp2l9*JPT^|@a at 8@APr(zSR
z#eIS(3N3<X*=T)1k at r^T76Sm{z${W{yARAP0o8gfd?X}P^2p9q#GJGd at xAHxXVsD%
z+mJ(hRcq_#!NyYNDM4j}(i`SHSXidJde_8!?uO<)lAN2$j|phK_i30~(Oy)X$7^zG
zwH!N}m92Gn_;PE>=IzYMM}Zkm#3WJ~SU0pz_Ey7F9xez8W}ikwrY5l|B%cKk62ejR
zw6_i?QMai|5WT&<5MAS|hSa8;D9Mun6!xW^g)$!>ddwgk;(fZ&4-n1AW(`rFFc>T*
z0!Ttgbiu$gFKnItBM~gD_+s8tt3vpQ?(?m$i{SSi$^_rdC at F!dzl&Sk#5Ye=+&nKt
zR9xK4IIODQ{9-vRNMQsfwYxD<?>t~b#x$*5=MHHzJ$U*ZUw8UbJBFaCw(llH9JeDS
z09-nTV+K{ze7i`e3DC2cq4MqW?b7x)1og at p7_JEN6zQ#-f5(8N2k23M;=G(vpP?SA
zLH#3R|8hxT#SV6`AF2|P;dEPk-W5tt-YU#Fjb>{{BkR9CG1;1rL!B91Eomjkq~Nj>
z#+;Xq|NP^}Gh%!Cd11pW!iNxP`F<NR4bf|NmZtS#AS4ZZ&dAnQ+&i)S{9H(R at HIF{
z)!UXeu+H^z<29U-<!i4W>$^TXdAZs~!EGq`L=cKYg<c2Qry4bTInYHIjx;Iggg_wV
zg{or+_3UJKyEL!zIkAG_QA>O}M;#vbE6<UE*uWiLhaNO2+e>b$N*4GPEt<#@O{Jcm
zrcRz>kcUjNJycSRdCU))LzXVX`}^_j?_ at Zq0^?v7CL_DPFSL4Pyz!9v3$z2CrF^d|
zWuj_}o)h|9_y#pNqgy^TI at 9|^#$Zq<LtPXBIQfd_Wa4dizT5A82*m%so4B*^4TG7K
z2JWxK8KuOTTBCMFv4m3 at sYe;)WJQA|2wJ!CIRnTs_GE1l3w`%>=CBnK8Siu+U6)=6
z?&2YZl`EDfkp*&T(Ce6vX!dLugQ6&M&QAA`88DVfCjC1AgQi%Hab=ZvJiNAZDTcyU
zcQBSUP{{S`id6jjxb{7{Ya$b!dB^QF1g+58_AO7It`qz_U<c6g7Ue~k$j8sUN!U%8
ztp-_GI}P&SDn^^apLZ44a0f?q+2Gx}@kK~1qtu<O8+$0D9}etM at PN?{7dy57ZlVui
z8mMGLp3G$=G;MK_Y6%8-J=4c{E87?#!JQJXPO#CDI_{-mcR|(MWCb*WF!DZ`*Hm&u
z>6oE3>CM2rE^W1D!l!}7DH|ozt$ivDk&{->-nr|h3(9f*I8OllPigGjtbt)D7bdgK
zqi@}5)!!HNNN+SR6RTq+L_a-oE+lc51~*LRM(!YWV!nQNY}<iV{5 at Ogo2K#hNE+hA
zkh#RZaxw`hT3 at ZePGN_Msq5Yz5vs0xgV8r+xi&q&{-ajp<C8aLa=J&R5i$eAqcQdP
z`L5&=`lBRKHUh0_bF>m93p62falOLmgJ^eB-%ao4RpnWY8(&}DZVYMn_;!Dxdzxs)
zg^PHkKqw)dB%!vge0$x7`W%a&z-JdzcVn~%Qj<`=(zV{0J~v!jT}G%!7)a<HXrdqD
z({4)zbf_R(2Crsx#+Orl8{MOtS!ZzPqZH at rM<SP_K9K{i{?Sg2C!XJ{3C9wX{JeLo
zd`6KwiRA-dU8-vKZ1zr}3%Ev2pU(1zi<t!bxFjC&tfd1UPHbzk5PZ$5_4^(^t`1J$
z*2P)ccWbzl+)y+R)xB89gz^{e4<=hq(Ly at EdSV(HeYQ at jHS{TOy{?IH_S|0IEw)$P
zeLeO<U|}BDvuB4iQ;!TtgM{Ism5xCRAFZwaOxQVwNnm2+IPPHcuCC)&kcB5~AT?a(
za$xv7 at kH;)sVAd_s_ReTZlipU9_M*I{$M`l*eM=4D2nVb+LhZggsE56M!Z(XC6Vf8
z8|7ffx+#in$Q*x%^D^BK+p3ESapP+4AoKDM&X__=2tiy1t*0o`IE?5W8v&*6>`Tvu
zxT`bk;g40B*5x?cYGb)ltuNI?m9*bt;^e$VM+OgAA_4joGYq-?&~5Octomoy&sL^;
zkFu|KTe3ml%OB7{IBaCKRb*=v(iTgHZyU8+S-U;uvGD6>);X^<<Q|sqVy*sg$BuVS
zhNxxRvP>w2D&!g8>yr+DELWFtI)xT)ZS88ybR+I|syXA%bMccn+8O?MowA(45=5vB
zAb1qa#*5lJ%i^_86a7BOe0)=Dm|Fg%G)pRBaTOZ1T at 0m^UDw%-lrg2h<6e}lJtP+E
zYC1xs$-Qc6Nlp%56TW&)-HS^Vf3dr9PJcd4Kb1TnKV5%mMW$VPB`q*&tQ{(Y=wofG
z(IIO}HA0UHCscOO`Jh!OsaDg5YsRB}W}ok9?(>-4CC2W43vRU+$#)dU8eXQ8)LpWS
zOD8(Sr%ry6&dx?DZw)ds<d%2a3 at 7IT9&A8qmM9o){3yy^Snd4uO;zH8iw<tptd^m`
zlFM21;xbL5k+e6NaW}ObNU*K5P(T at m`Ge{PfX_SD#@AWP&c~8Y<?NhXk76IDSdwzj
z<*U9l`6|E4wGkd;VcB<02#T8E;p8-|ISa3^_nSgsY${_Vl<(4$a9$sKnn{Qut~3O~
z`t<41q5zN%qzPnVW1 at w1O;@iyPwG8m4F3DT?A*~}!;f#fH9-WLX&sbyhZGA73!gok
z$$wmKTqfU(p?ySyFa1J#c{pu<6*(|~oW4eXvt~Cm^jIoLla!T>gineXFolEWkts~C
zU at 5#i$$fys!g=ClG`*z$+j>ZOn~}$7jaS8=-S*0%;<K{~KCNr~r3n!O84t0ll9H5a
zK at weOCR9KzaU7hl&+J7sU!$%lrkZo%WA9k#JWIvF0{X!%O;H=?XmVmF9$0)~uqeCC
z;Y#){ncq@%-9lQiuDWq{a*_hIa6WNnVrFQjt(_LGrpb8t)Z~QozyPIHIy&RX#f3 at g
zg3>w{syvT4rX;`4QQJqSyS`Kaq5DFpxqANXc9#VHBA(Cid?{ITsg;KY|ErUGj$pm1
zrCv;_iWYfN&dU`kiIM at gy?pMzik^ZgOr5HzwG8xARRgm at s`_Cp6TZ1tD#6WHY_|@#
zER4opkrSB~p81OGb86|GMeNJe8N`>OD7vN_GQ7>;xhJU14GbNXvS at F!vv2xwXV+tj
zb<~g4r}mwGK(+Rrbq?a|b~1L2ajWy3x7uplwz^PX_Iz at nyuxI$mozBY?=v%A;r0ty
z`zB<{32hB_HS1&d2pXZQDu3|tbGoUzXmb3)fkw7!#?$${pheq#)53gq?}Sj42ddH^
z-hFbU878xDYhURUusPXw+oc0gq8a+w`Y4f(kUL~g&%pvN&0J<vw$mJ?z<qTX3ok=!
zy(sL+ayg3=w#SgI{CJuK=LW<zzCrh#eniVJK`N^TOlDLXKO2{rkDX>pQLi{}k#~|0
z&@QbMh1IIKp(=w$9`^*SkWb}KK{iZ;lkSY^l{o(JS+R0UEhOJw5k;1s*Sg)f|4{vH
zg3Mhq1wJcwuYwaoiP002vfQ?SlK`m<N6Ryl<Biwh;=Cpb;Co?g&Pr26H6C_pToDd3
zLy|tuWG&TgjkB)Ln$>nBJxIm~SWtMy87&jx0cM7%r#i|ruPIaSlR0`bh)d4CvBP~0
z+%Vz?U9B8$vkQpck1c3v(!FkOJeSLiq|g1Bn6_q&B#=>X)U`_Tt)mDx<X#mC&g1H(
zpmTVTb4&<B_*+K_uT7sDq@*7)2^){_8;MO09U7gGO8GJ^xQi}WVk}9blMm>2>#hj7
z<5D<7Xdbx)C at 9M8a8oiIr+~d83*wV?b`N7WpP-gKoL-ouE{E<Y7~=FskqlifU{$Ul
z?=+yk>j$En>Q>|wf2>5NaJR=f`<u}f8{0>mCaE2h*h(+%t1xqGkUj~oUo{YwY<Sn(
zNJ8XE>1i!uBKgA`nMrfZz&xRzqxz6nNt{0|v!Ofc?z3Q5QSs`xN+Y97cpINTRY3VG
zpAK|lhJ|v3OUYy#z*=DNhcP{ck#7UP4wM{#GH+Dj*`q$dodjvi7I!I;#Nel)GUMUA
zj11Z;l#~A7dT1#qtm at A#hp^JZi#elq<);fcV1$9F&QiyvI at Eb}@XOZ?dy at NBHe_w@
z?u!J}*u)aqk)2EK at qGNDc}RaC=%bd at fYgs0)c<yte$-B`SNov|Lm{p9iRrPA8aLTs
zti!xN<LSl^N3;3~M8}T~#^S{<$%Njy^Gl5eCXftX=bm=TLGERh8Ka(>@wMw48m85w
zhAqg_nD;em*RL(TeDMH7gRI6N&(&E=w`kJN$}@>&ljl+5rf(oUWOaUnqlx3879b$I
z3ySiOCa|2jIf1&63LYHdm5+7?298DzS8i$>kx`NiP-2ISwG)o6LUJQ2pjBlUJJw}(
z0=y>S_%3cwtMOMJuu|R+b$DFAf3oX)0U<fE!Ya1ilggO7b7+5j;L;A<qzPV6jPJHE
z=bS|B{>^7S0D=+~7R+-6*#fRm5Z^5*>m#ww5}V!<jgM at Y*uC0mn^xdWxa_^=n at DX3
zlEaM#<H_sA_wi30==Y7aCM&(tYJGPG!jB9-BgauEXW~&lvVABSk2CTml)q|GOnp^Q
z@&OzX5Qv~uXTTPB+WE-o2YzBY5Ro`RfO&1~hMA-^%h$!rOi)YIS=qd>NwXh56&&?l
zM+h~OAe?-Xn2V5f)T%7Daxvvz<ry);j+9Z9W+&QS;{vDNHof-M)olqigIl&x0nmX?
z26)G9InISp^Vsr?ip}op<VX~9`~e4aWyNC5OV#ORb0i?CW!m5cqk4fG0d<BYY^xJa
zTM<0?Pf+ms!^#G|$%$hq*kwF`<9w;TFs2{p`y`E&?)gNc7VRe6=*Ok~5|sq?gmre%
zuIR2~WqtsHg)Q3>FaL3=V|Cuc;ow|`#mpD*RD1TZF)gVtIFPuSTGY3iJypva#hZ`6
z9j9P5u}g)t0Sq{lG}RBDj-Z4`^l%7GjFcwXwEyKeWN2~m5StfSq1V<+=I%A~vNLF*
z`<cBAZD65f6})re*^)`@oc~vj^MEBmd3gtU`Tm34d(!HM0m;sj$C(JWxAgnSx5-Hy
z-TI<_`c#6 at g=a1WI0}rsMm%#B#$OuNQxF9KJU8>Jn{z1ONm0#LN1k420HpBaZIb at F
zE0Z+UE)_1H;uw6yKDtIHJ99E;+ at 2Z2+-1Y`XgdGIjf!;rfCutk?DM%vHW`FDJNueW
z=1|yc{MI33ntHGQN|DL2`Db57^8TYMRo_io&ffV4N;n4}3O-ps*m)ADGFKJQyNeOv
zbXW<#1V`nYC=*8>Z#f0m#;6I@<{q8~^qQQHINRSYzK+3}oplyf%Yg5=QIDe?fHaU!
zvpF-s9T-oOAqxVd=ST+K#?8BkI6tr{C?hbH8H5AN4OFKl6<|PMazS6<Jkahjk7)Ha
z+mbn1xOvx0Dym(>@a#08^4waUTmd|i!ISuTDDVs`4w=v9Ic^nI5X13kMv8DN(`A3(
z=1j)e(fA{SF(2Wbq4ph(5Ay6L-UI~2eSl&qm)t|mws!3$dpHMl?1>KM{SRVZB^-yS
zy8h)uU#A#>=ukTia^t+*QyuckFSN-wx1G2MXxUzAebtX3AbJ!nUQBUCw7CCjEvD_H
z$*6@*&Nh{sJFwi6T3sA|H;+W#Wj!Z!nmoO^80*RvUML4 at 40vqbdeX!M1#?nm1Shba
zM%Q)FwP!!~JNovCUm=`t08pac#l=D^)Q3v;^=h2O1{(wHiBHA5T_z_a^~M7jC`b$$
z*`atuwZyOAgom6g-p9aAog#(P;h at flPAhqYnUhyC?N=KS;R|)OI`{K%4ShCE5z at JG
zQw)H;j2R}=snZ9>AcIe6cP+P$_+Fo#h?Kv~-p9^@c|SYG>0Bp`#re@(z8*&oCER8D
zVX(D}!6ydpsAaTnA0t8De%0Us;F6(BWg{RZm>e5rJmhEMX{xKf`4A2pVObAwgpgmx
z#Ojyn&e$}WH1jL<kopnv{v|$*eCpav|6Q at Z26|v2-KP9QP@(!zx`3IC#DUfNm!w`+
z+*`&aN~UfrS&!{H1-=WgC?_z4(!$yIPxi at cxXmkBS@YNPV%L;U;-?LGK%dSI@^Y at C
z?JUk^WD8zq=4F25)x57??ne?@Xu9#a<Pdj)prB^eJVyB`@D{`KQ-r?p=KXD-gLM}V
z^CSVz)yNYQ+*eNpRc6HSZ$u;UOS&<nf^z852fUTODd*>R78Vx0ta>XqKyXX$ECVn4
zzVa>bB at pC2+v;Wt^>D at LC}AJY!v`~f&T2-|<bETG`m;nun3PhNH3RntBl;`eWVu0i
zN}o2TjUxA+zCBX*U%P!$;G%A at c5x25N;dZ|H(}CG$j)!M5r}vZMa%dM&pEt#u{3y}
zyBgB*^jqKIo0P3QataSeOODxx7Bi>Bg7 at HD>yoU*JM}*1c0s-#r$LY4 at PotEbqNcO
z$Y2G=VjQTx<Q}nNb2X|qZjWb$;vwj*6xnSr?p at An+Rhw%8Gz2XNCCeW;FK_^^tgMn
zeP7b<jWW?yh8fHVq>#Xygtzf4Zvr}ZP4H*OXI2_nTfQ}xn?x4HrldsQQSMZZ3}6~T
z`IsBbtZ!`%dF(5V at O@jFnR;Wv+HxS(2oQI6l9EuU`2k8RC&&5e<cW^66M(uAA<C5Q
zY^iI%v|(T3(iaWP&*=taEny<XJ&-C?bcFd?*p<+ah{0CcglgX}MD-o5p7Wt>Z$Cf!
zve7De=MfWeG#4?k0P#18F8`}tC^%z>ukXQO%A2h%m035kGIF=KIA7r$Szl4cThr!~
z;YYMc+R~MCm$LT8qL}MUP}V;DkBLsVJMW*N=apl+)w*Pl<dMvsO_=GSb4Xj+n`id%
zgMQ!gZ*J04zzv?PHhCRlHm`5p+!xr{-07UE`_kdN5y1Mb-Urc2I5ms&6{MAo#he~<
z at TDC=UK+S^a~%KF-bxka&~;yq?6qSq<)NQ<ukZ35U;*TLc3JgWvyV0RH^F4$H~g6Y
z4}0$c&{VQDj?)ALtP}y;1<?eggNQT%0R;hRDvB(mK_Y=b5)ecYa1jeCy6WoMSbG=y
zt`!?L6m(t1vi7yCy&)>f at 66nLlN*X|dGGt)_y51_dnVkOIWu$S%;__CFh_TGcgI5o
zE7HRU4jb5WIghnCmNjJ7?AZxnCAWLHbcmRuV|waHY2m!SB_B^r at 9FS%ZN{b at Qvxhb
zNNQHOcZ&S!QSG*{oyZO~A9Z5m#)jPbywB=FQxm- at MjMW|ol^dGamI%Ax>LT at m3my&
z_-Ht`Z1VO!b((=^tDZT%xNhh=_3`rB^&2!q=X5{Svw8?5TR-%AQM7Mg{Xn9@;+cJT
zj8UOlJLFyvnituW{akN5|HxsZX&*a|Yh$#bAz8E2QgH at h{_tFQ#5?utMG=p*rrp?K
zXlSc-TJ8AL$d5%EG_Ge at z13&&^DCUp17Pk>W!==uroEe>R=eJ!zPf{70LQ{}-=@cV
z at 2`G+c%1Huj2rvbMxC7E9JEd&^i761abUrR3mF+peKoA6UNYkH20i-8&*10cD|X4e
zm31BYthv){297kZP!n#rmapa5OG9rR+M?eY6}^zTrFZN7N<ZsE(9dnh4RDGyUA_0&
ztQ$QKq^rL$>cZ+U at K9pHK-TuB76wZyw(Kx-EcBfyN;;Qo(BSp%qN)4&Zl|u?EH)}$
zx?AS%*H`cTueCKtyV?$NiHN;2#3z6Df+_1FuE5dOV`^tOE2i9%xdogl*mPi1M|1i4
z0*j4n*b)4#oZX94cHh1sJ$hiu=pQwvOxd)_{gthy-uLGcR=s0|J)fl}^f9h=j97g1
zX0>eVj*hyXcRl>PAGwPLhZ~Dd<W^i~CArPny1d|o!PNTa1=1VdyTgs$c87=W&TS|x
zv{<s#*TnSLdbPfGrR%!KaUL}0iqjY6PS{<o<$1-!Z+xw=b8)+iY8Pi6Zp7StP=EE2
zBR8kau(>o}|0g}$&cA<Sbt~!4-gD(E-b+)~adza#by*pAynBJJ?Aax+f=hxQjpO$n
ztr~Qut?{ZZ*WY{|b7<vdgV8JHvkR(cMV}21t$I1|(869fy$>cE7`)RuUjO{%5RDwK
z-3?Vq7LCVuo7^ybtT~v&8d%=DI#H);Z_)(=gIN<ACRB09j^$QtIw3ltX0()jwu(5_
zja6wdNB!;T-tW7a<=fQeZ?~u&+V^2p|M`takq6OAZ`YB&JKx-^>LR!~Eq0upr&kQ&
zb?th)lNs@=GFfltZ>;D(tNgc=>o%|6eAW<bDJqJ8d|`3- at h3`sjrQtq-Y3gEz4SNZ
zTW|MPR4%Oz at Z9E~=Xt-ep{lCPlpC$-oSmKD-TC0=!iw-K-cEjQu}0F6DK9oUxu^}l
z_OkK8qb`ppzdP{U$?>&|qvMN3)6{otv0}we8Fsc4JGrvLpd_oThxYy4*pc_nZ23W3
zYooovMt9&KLZcg}_HAN~oB8q8(y4(OI-t)B&!!P4_^+1Uf1!5yQooAWYX>U#TRL37
z_G{|dv_zxRk3_2tOO7-)j()r5j~nOpKk96$?)KbU(_~d+!JH$N5?1Aj4kgz8J`dnl
zd3~D2o$zkq^WQXs<`wknFwjx&xq94W?z{Ry`JDt6yb}p0f2r>9WSRQMWbTAd6?%rI
zkrgMOYHm>5&?fUyx19Sgf}LL%tcd8iZg8ntiqX~Taoz^n-A27I(c2%UB_5pV?_QDB
zCA+ZD at Iq;UOT;`wwRaC|_23fnSo<- at x_|y-w2PzO<)`2kT%Z2>M!S3W;?piYJ{5j*
zX&%ega>?CUzTeafE{~85F<Q`Q3G%q{m*=4ec<sI!ee6ng^@$TaosuKdD&{_4X3AO~
z|6o$T#Gnt=$>V0<G`Rk~n`X$gm+OOHy||*0Tl;R|`(sb)+W?z=k{?-n>X(5!weRjP
z(wqg2*-LbvO}uHSdD{I|?Mw9;F^T<`7IZM(JhpbF<JkFG7yJj;gjpYc(ffl}>1LTt
zb+&1Kp!dR~rz&<B$Ckbu6gPayr>b(ds2_>h>IdDwtxUgtVDp5rV)+bUmpeyq8++8T
z<7Uy*6}=y|v(}x=%HSRDzCYMC(OF<Ee7MY^W?qMft0K5*;SU-LPHb8FQT_KdbARj^
z`Bpr4bLsld{?DHU>)h#heX{537fJJf9bR{7OP3kLhf6k0a9r?sZMEChaSr~w6Rsp(
zx!-HY)`R1AO!V~Z`}Az}>)-BfTNF3yfkC3>ZhI}8h>#u2EZb-;i*k40Gjm(Uf)78-
zVoXB<FXuct+`nD6^F!|qmw%qxUd`)dNV<CG2giuA`3H7{di&OU7LDxL;qvo$JiXt?
zt)JR^n_0d?zZ9priScQx-G3N+pZ%SKM90yqaB=73oVncL?4!XA(!6>8odb*wOZ*QX
zdl+ODqkAH^(KD}2$DIRs%f3Im;nd!dJI0*ZWp?ta{_Uw_Gq#?&)DZX0HwQ<4H{V$P
zK|4Tuf?hGZZ>N<mksE%w-F0OCGOarO#vSSt_5T<+`CZ9mk6$a+SarBI$v7gmL1(wa
zmCutkG_N1k9;+78C2PBJq0rd4>{57yjRQYg{Z3=i5^+b(3TJUqS)V79%B;o0Yy0P{
zbetCGX5JZ8min9zTB~#FYqO7Ki}!@g81QQ7HT5$o_kDsBfA*O(DpYD&E>2QgaKB<o
zXU&^Cjx-ikd0i+R+c2SMsR7r(fLl1X+E*{XXviTemy at oZNuq<(CU6apuQEH<XUdD0
zjeFWWTA9-gIkxYOIeX^H=+UEZ9sTLdsD5)gT(|n<7&Z^`E-aHg8!m<K-Ra;PDcmWV
z(rFcOfYs-et(oOh_Nj^v{B=WK&v-fXT1Z{6hJK36soaXaqqh$m9kw at NZt>s?q2pJ$
zmbc&i-IMS0`c&Fhiu(?jQ=r3sZ(ur-TQzs-T!Xnu+_?r9v at cAYD6=}=ZS|gz#p->v
zed5Z at f2fN&3?U>_LMLC(wSRy8pUOLD=ymWbIP4juw?ThY{%}rbSH0s;Rt;L!X7!@?
zy}PfzyDBF?A}rLv)MD<03xyR8y+wWF*{OX_=}h-G7I`MhhDLQXO_3d|f3k|RB+n^N
zyUe12n?(GwOugML%|#>F?WzuYC2D>UAr)C`mjC92Vu6vMeX+U!0{`Kn5!*%#-&S}j
zd$Lx^{B9)$Pc|HyG-~7YlC+W2Ect;OO}g%inRchde^c?R4yLgmK9?`g3i)nz)@!dJ
z_C|LLf-D9u*K<5{cFqW1>HYrSE#dX8JX+zPT~g3^VPYw}L^H^utK;ZZ?H0a2{=xrP
z{rd-MvhJ>WexvHl*m_rdCnT!druO+w=ZX5eYISqpk4P~Cwi>p6$j{od{Lh=Pbncq0
zy%@t95m_vZSU>t0_g=+m^X~1AwVz=pIkZ9RRM2Gp%)WiQ+r~{89gq?5<Gu|W{+QD4
z^^XsR8WozjmCavR)W}J>J-pVJx4I~?@S#(R at j^59==2`RckFk5lRdIF{+ky+_O4(*
z;pHa16Q6S-Ryv*wuW>szD|LnIpsBqcc)P@%^NG6#=f*x+%razonAd)KuH#nf!K!;Z
z at UeVJ?Wr}D#K}v^mwH}y5MEn*>E`+)iIt+1zO^?+m-hU6{(RlCr^h~b48P_RemJk(
z#~h+&g#nzsc^-p5JWnWN+iu_K8q#mOtFv=RY?b9ozQJ^Vvy~5py;cfYy~?Umd-W_`
zHK%ig+vrC#z7yy>_Pq1(>ef5=<F|3!^!IdM<;l8w)x^APR>!n<>Tcf43e5ko$=H3X
zJj3<zgg#RvU9z~{4`}a}==<GsA#O~+UeM)Mnn^|0lD0yZUk+_r`~0v-FShhXw0f52
zvx2M3Y$}#@E1%Z(Nm=E#jL$l|e(>--92Ra|v%$Qhrjem|X~jW3R(as at tPZXl)jL1c
zipr>1z={}p+dE>hUaiTDyL?S^UDuT_dU$(G1;Uzfq};K+(8&CNG|_4N at 2jlzO1kwr
zV;Ny|Bh85`+JBaN?{38r=l*+-z1sTSce4e(9GA^s5 at P$n!$`!PedMRN4n>=be$GA|
z|1mrcQb3YCm*v`kuBIn1aSe!?`E(h7ps-|KanINvbv1r{<5xMPaq`hNtDf|@HbOgb
zh~||g6^R;yg)GNgcWa+5I;-yXz;9^?k)+v9N6jf)zyCw`@7}v>4C}4;Ks;r70g-&W
z at kedQA{t#fBE7$C<hTASI?mINTQYBgZ8V&0sIAR*3b8NIzJDa7_iB@&IuRq}qs3-3
zUAk0m?jkV>PwsMG`=#Gwv)X*`^!v&0OtbIgx67FClQ^Ky*$I+aJ9&-XgZ&a8%s9MY
z(wzh057oLZHov(f91<~He0JmoA9hc?HnIKW-vaLEX4v?S(5-R3_IW_kQm-mFPAksa
zHEqJgcUAQtJR0{U#Ds=ezI6Z2q8*HLFL6^#tKz{)lTq8%9{XD_4>@bX(^<Pf$YQNE
zSu2c<7hYfSDEf-!@JGGc%-y`{&HAyOj*o)T9_o0hLGELvr@#E=3 at 7<j_1utI6$gzb
zO<ia=`#0}?d3k<5p9eIIZJ79pJ7M>`WBwhFUgys8D&$%;7#6(gb}DzmrwJ41dNpt>
z*pH12?<FTCCf(}9yR}WzGB597UY<){TwcGj3&~|{tM`gw_RKh(GyIRfBhGF(v|`1i
z!|kG1fBUVLb<O#)r6$&~K}LP__x8}<WRz at wFFX43M^n%qEHcDiURhpC8nUX28p_g(
zOXj?qTsh?Z`)6%$>}XRt==!l~Wf{W~1-gIuOkUez(Q(t=uQdDGCtiNsV|nU8FvYTb
zBYhGloxL<`?RPyF_VMj?&9L|T-g}&9Tq%%QY`Gh%$LYHwakGW7t(}$e!&>6WGGf&f
z!yhjAbw*t9>D9>&K04$6=ok4>x6;=)?Q)Np(r52`yf+<P`bu|$-;|$os_NSu|L}g1
zUnE=i^vuGF+RlsXd%7MIu`2sVRwZ($>UG`mLv4V|wgF443b|ziruk_1tKm8)3QoIq
zT375>Qheh4tVPw~1`9VA#H+bD^-J<Ai}HJz(WiD+oeh6je!f}VEp at kD)5b2XuCWQ)
zHO=tKo&405$u@<CtV&~zt|3I5BJHulPHQf_PjF02N2XN4%F<tpJZ)`D;%50?J~*A-
zc2)Rs{VSqFy^^*3r50UhFRTrS+t*n2F8kQUXD_ew9C;rdbnm4**J^Cs9v<i9v at ASv
z!Cg*At-8%026#T0>Xd%N at Z(JpE9r!_TV$BQ!kz=ns>Dz8H+wDn$vtmbo+nW}bNQ7y
z>aNwDoOR}jj{6>PTykPjRf at -xwe_c}pO at c!npoqXTjrev$1$HZdWR>L<eLXC$(q~1
zt(rBVqOOx;+>Dpy>iUy6FMU at VQ=jeoloj#Xur{Dgzs0-jZt}9V#S1scZ*+YKnV at Qi
z_ts6HKD~U4clk-Jn-OiSy$(mlwDCy!`TRQFm~Tg at f2?y{Z=<8bD?1&tDCClj?b7Mr
zKOWOp%f^Opu{8HZg at a>6zTE}?h`1dc_h)It6#+Z%cF}V4dageCkm1hg-+KtRw`JFy
zs;t<mvEr_8ugWF9tCtp)9q*q}HoS0YMV?iSE77h8U%RiSw%h)MsjC+*zI<_2?Y$Sl
zbB<T5*Y43-vp9FRftP{75^+_Q#l$5Q&&KEq4`21J`Sy*sQ(PWlQGcl1;aG`Zso$#}
znl9yg9ttbRoU9oqv7CLi+o|NFrAc06wUZ3wOXgMR!8X3JYgq8l`j4)T3|ebGGU#TS
zR at RN^?iEMZR8~xVHSN;=RO>%9#U}&SjtH6&G9X~`-6y~HEsMJAaDI5l)xw`Uj=$gS
z$E-lspaj;4wuzjOv$xug_+id1SIr^p0?0>r{yz2j%V{sKIK6)H@<q|qObvY<?YzOB
zpFxQ_t1k{Z+eu%&uE*iYzg3ujU%Y74h48s%wQD+SxovuCHQ+e-mfrtrwdlR44oZK}
z-H{^EdVIC7- at dv{=NANp2iXSAtnfLO+N-x&nbnM=T}(`PHMNVsTfKVq(JsA8JM*L`
zh7`ney8U|EdqbZWx4z}IZR^~&{hr0Xk at W*-ZJvE|&erPoUcXdp{;^9VE at W=S$t6d}
z&5o`zIH|G5HeJ&!_J;GdFfDG}!CY>|b<g62sF^)2HIHa6(T8zNx_qPa^<Dj?u}>0D
zS!<RYd>CTVyZBnr3_-V8lQa1%YEGTft*!3Q6->)(6E(e4(NLXVIv3y4VjUW`ykW@?
zWo_2m#SJVUb*7>!`HaEn+ZNiRJF3|Z8Ss(Q#@bQf*K7K0v)DmLR at 8)6nJf%0Sizla
zNe0L at u3x{dQM2X1oH>&tXG9ftD1Uv9`}4y2yL1<}Sz0o$ByG_6*XP>@RXVp18txqE
zYu&qd;=r4yF0ign4LoH!)X%1C<_w!%2R?3&+Y`ff81l(it+woxP|Ysa$nfrSzT4uX
z9W5)nuymiSEkB-lj`P#I<!2YX at 4>1L=<&j|)560pa~6G<P?fJ9YpijN<7HvcFrkn;
z)~l%E{&(i31K~VVN8elQ>t`0~;PDMQpSu2Z$ogx6?L+qX#edxJ at Zk!R)gz;32A&VG
zo9|Pxr6G0sf<rUg`>qe_88PtC%lR2Q4U^(c-`*WJ-sO3l*lrq&UBpHAHvf8dFMI#c
zdX3}L{CaC@^l{A}qb~OSEt;d*ZmXs!{ixpF1*SXC>@nO;m>q*R_;uabu{N);<h^>=
zh_c&}WwSkg{Gi<#O!rkO9e$SQIINoU{<P_(UCI5D!V)>09D%`;CtU|=ZOHfjxZzM)
z(E4qiBTnmFjBT?kV${rSZ}b-r7-4%SPyP0KqgMqU#s=?Bo|=4Vy7krR-HPVjA7os6
zW&F{x$Y)-<uP*m+eC~*gTP8+EcAC}Z17SU(|JcTlb`_k1;o0X8%`d8Px-gCV$*Ur!
z=L+q`Ia41SY1Ntg*Irz<ZQJ_PHh0{2`|oNL+l;kIY)EL=IpxWgtm)Qm!yJMne^eq3
z;KHu&_3z%grF-<(UB$C6Pn|y3+2gh3)80pyPK<2$CZmCHv~+*)LUUzxcvMw*X+qVk
z#vX^%U5*~;7 at W7PV{lU9gNA`FT0368nC#d==%?Sc=fDm>&Esxe$XgrhW?odQ4tZr+
zPyL+wjBaD!J#b^<j=D|ZdkW&~LwZKO7!qo{yG<9<$m|&#uQa6H|8;*=)rqpU9^r$v
zod$bu3xDAem6T}va$sMhd0M-lTRkt>!@1#-+vh$zsZw&evE<OCS!D}1*9LsfJK;aX
zD9b_o$C_}XgINhb40qpze0Prf>U`Sonc26yd0e-|_>Yz*3$9iAM6GD=6BP7=&-oQw
zzgfL|$nafLJ9q1q*<oJh8Lza1maiTStl_5Z%e8s2x&jn}h6(RJ>-#VM{T4gsqr<5R
zL++UhhleNCo;bU_SXZS!^PE~ic2Vk~3jxR9&KvyW=^uI at +0gBm>lUl)!99A;f+hcv
za6fc(caUFyLH?eY^>TmxPyRnSpIm0k?tXbdxi<@v0Ri*d_P2X})zdHeY4_M}CAQu9
z2i5i&+wOU=-MySWU|Z*J4lj87Jn;Uq{&N<U$-eP`t3i&N`VK7^RPVR)YDKJO*!x$n
z)jUsCaT}^D7A}82u$-8ASN#{S#)3B1?(E-+@~uNZ_V33{=Z!WWyw_3KZ`^h7#P{*p
zTbIvX)N`jhx37#PJXYC$|HUHNxo+t(8CM5nZTQx4P_2Ps!Rb3hw-?K7OAE#tymMbP
zNZS>0hV#2R40?QZ<fsq6`|51l?-`Z9tx_6y>c`^`mxONk{f^~Ovz}ZNi!JfXMax8a
z#uL67vDRETtN*=8x~1wRUh_+n8~t32t7H6Q^itb+Hfm-pN!7hJg2+ossd-;jXBId0
z>4@~xvuDixt!(d)r8Z8rN0;t?cE>J#-iy#D5A<&*-#09IJfU)p<;lw3#us<#WVzjW
zrvCU*xZAm(a=qrhd-gK;2Jhp|QMIhf4o^m|oBG?nJ#TwBI_PQ4&#W{q%<3?8eWs6Q
zoyQ&bf=`B}!DU<YhOBzs=-n~wF==eM at t$90#oBM#FuJO9yOKi>V}>S%%gbXlPMd7=
zFf%jUHB0_++xPo6yX+pc&$#GT&QFat5g!^SB^H}ku>%r~T at 9A9Y;0Hg8)%C|hkhQH
zKG?ker*Cr`46i(U`FhCE=`R<mzrO2ou(5$F%a1%MV)eOng6N}dWE8C#He&iq&sW#)
z>Qvg_Y;^a at b4rYHp7HWqwHbM!P8B81HK>}a?ZvGs^yMTDE%7T^8(p%z*l^vq-z`co
zi2cd&7mxO^CKq-+|6pux{$WOj!>W{?@$)`x*dA!Ji|t|YtA)qa+ivCkZ{9I{8Y6ge
zQMx$r^n)zpjdMF^MAqM&_~_8;XYP;n=7*0z_p@=xk|m#qWsN>RYwfMJp?NOzb1Uxu
z(k;m+Zd>l|LT*OZCvH~R%;<*d`T}F;o-Q{7e3G<%dU$>g_vw*%eqizPD+>m<tG&0E
z)%NOao=!|wht5SwWt^DAjiK#?Q9VnCpS*mz!>aesgTsv$vx6RUO(5g?lmGSjT$5fV
zCe}3uhCjVdvmGrk5U=gAdHNRf=_h*gy{#Kw?y8%}{@&AFFZFrBikkM_inJ{%bZ;4I
z+UX_UpLRDnQ7x#aOULTlnqlsmZEMurh33;IwRc?X_ol7J%8p}7k5uk^t{$ebJpYKK
z@`PrOpf;Oz*X-H~obJ*tol3$QIOz(Ldy<<;hf*D9%5HW}T3)w1>+|#PAziiix3gy-
z8ra^bXrk9GzhQYpjGTvP at H(1K^xeDs#JNtc+uP0RS!NKS<7ob4<Vnrh{)zWqhkfh1
zDW|@EcgU;PUDZ}blok(*DxF<id<k9mTvO=!>GIZuNAbBY?T>HmEa;tj`*_`PH_z0V
z#KGFeH}2m1*7mnRa}({&4Q+aUU(;5!XY%~~HQ#pXVz;+?aes#y9*18%@2 at lX>2Jnc
zZm}Dx*IbgE`FXfqKt%e+f~Dq*%~?X7`H8o^lkOi3_dA>%m$NW+K$}6!+L~<0)VMpi
zU2H%7DWOl6*M~;5Syyisk+5X+?Z)J>MMYza3bQO43kr+IR`0Icm^pn>*b{>cqX|hm
z;?3#;p|@UpIF_{K6D#|2kNx}G?mXERjP at 0yy3hOO)b%ZeuWFnwv9BksOj-FcrK?qY
z{WfN%rf at Ta?X5QZYfNJdV>pY2Wt~qXjnIAc$;GQLpO>h6dx>tmOSgB!ZVoRiT<oE<
z-1Zaa)7-~*&U{}Z=vP$c65_jfRZL9&L?5?AR(VHZ2bShh at 0v^Na;vi55rY?{|1j-s
zf#>uh8}U-#x5R3jMDv}?w07!%0PgqgvI!SXjW{`Owq1L9sM<Q~=-S}d8Ct+mA6{*I
z8=UG|mmypqD)^M^Y3%jsh0R;HzA5_pGgccuj2gQ>W~xETjLEYzdPUsNvN_1ss<d!-
z_C3R`ulN1<wn8S&ut}^sTG4isF#m0bb+_}X=PWNSZtNj!|Eb5JUREzZFTSxeVxP$3
zo!!`M6M1ku-CG at o3*Ys4w906H_}m}j%limfUE}*W0jXVGueQMP(f$`(CeD~sGH1?e
z!*waudVh4u+a^yhZ#eQQaLwvJwr=|cw8zjlsYA_HnwTvT>MZ)!W<un;kB=KCK6LC~
z9(}y3v8QQK*~;MhMbF#5dI^`)48Bkj7AodWVrjCaX7^tdWc~8`@QPC2kCCH7CI!BD
z7|XT?sw-y){BiYTqWtM${a0P*$C{5ioMKlZnBY6(<;vBu^A5&(1a=Laac8D~{NmJ_
zF(;3 at 6jz&E%zOBNlUV-y;|JsB?F4sKhYp$@%G+J89yeR3cA)0jMb|6>IZ=DE7TpyZ
z-9gdvnf{5 at KAX(00wca_5&uzW(mUevLEYMI=~Av!h@&*I&8sE0^J9IT&)eDtowp4?
z?-P>n;(`C-#T^buo~$NLUFz^;$hCrMmxU)Cz+c|hen|KC^?vQfefH^hI5(>z=%cr1
z4OjQ%Ub94_tJ~lFVx{-=X+dwR@=HgeHd$7OYRo^Zf03Q;q`yF*+4E(Qd_czSs28Pe
z=8B5mj2Z^iTVrCavp;Y&U-U at p$<;miAgb1{Z{L28-|yBN4Tqjd?MXNc4-N{x=>9`s
z_t=BmZ6U!hT=4SnV*S*#&y5}IhUDb0US(H)_}tNo<P(=+c>Rle8WnvqXox$W?>#mg
z{FZ~A+!CK at ZSMcWU0uEPY>VSo$5*ZC at +{_E&W}%~tS)=~(%*5<Y-2r3x5O(O4;G)=
zICYrj?w`cZ*PFqKiRj!*HwVs%);;)sP5Qx(<u5l_y3c8Mar+4M84YD;=D|5C&Kvzv
zD+}UtYwlMc+Vn$ZV8xaLordll)@j}3*x|>2NaXX4ev8uj;hA7_6nFgvSGP->Y>r&B
zEULWK7#?@+oO?~@kEK2*!hP=NR at XnNx|9E#wcEJ?hQHpIJ70IvG%2fUm at sy!_Jj$a
zCVpy|;8k?XWPL>J_*%KSfk}g5z4z?m*^?|a`8$lWAB+Mu;oP15<2uOAbsn02*Z9uk
z!6W^O>cmmcKUB|JerWmDL(zdVd)B%eM(YnP9=b-Rwy#v2G^_0F2!q0kWpnmLZ1nWT
z`d3hL&EC3-WfMD%(ejF{9=*El-Hs2t+&EMo+bv_M+PVUr(VO+T`Ee^N`g}T&TU5q-
z<2!UbOJi~WvYNhH-Q#bb(jHx_Aqp&f=9#tju>18x_up4}z0+Fsv_5-ThV$#py0@>5
zZfIuxUXba+*1PLFSia-sn|Eg=Q%+ove;QSG$))_FPW7zccn=RwH7eSe-_B|GwB7Hr
z7wY$3^xWySS%YEOP<!NO^)uJgD9PSe_e1Hd1M8BE&!6ahedN!>#LM?blpp%;V6KsG
zq^{WNre^AHXWs6+oKn78zm4^#3l}ZQdE!yvq<+tNh;y&Ox1Wz{c=vgn2G6wi^7Aft
zWlNH08WoKxd%L!5bm8GhaeK{#fv at -L?M2=Tu=1DtSYNvH`09-5<~w3O8-Ln3O0>!9
z?MS0)O9ST<Lxw**(9yuCsO*}7X?Cse<gx|>gR!M;4$b8nczvp{xoWU~$U+@&y#Z(M
zT&#cJ&69QG@!jWn(@csg!nc;0mXGvw`gWMuaw(<zZcQ7xU1M8^a-H)RG at e}@DstQI
zHo|_v`Zqt at jsJLN<H!|J>sL(bE1A*$0J!^BzBpiZGaxDPb8e;N#L=T2dYB0A-{on$
zt;$|_R_pzfg#`zCI$a!7KU;FH+d)vc8kUH;zP)7;D at zmFEhO&OYQ&|?+HH{4AfFBa
zrot?n>^Xbu5=!^hoiE+uJ#=SD=<3zOHW<wKWlZmgNpn_9xAfNU+v&kM+XF8qiLNKk
zJd!(+TXyzHTtTWJ$un-SpEhxJ-0ay~Yr;#GKR4@{kgVIYgUm-7U%#~@JMLss%DAmN
zhJ}{o^yngu*WJ7S+aD+O6%Mni3HaR610C7WdVW>b3p#FFy5+#UIR>jzw#HcUtiKyO
zYCYd|&xKb at s#1yYel~L~vh%;6zHi@?`!{PQ>({y;e&AV99hMaRs9QbTNLQ}&^g*(w
zWVeP}S#8X-x3BZJnEk9Xs`rErULhA9N`!N?H5T0(VbV4G!LJ9-P3krza^dIaH at wrk
zwv+$RrCeaLdhb+wJGg+QF!O0a<jI*=c8%L^+u7KTJI$V(5jA#>Xxsizt1rBAE1k7_
zf9lV%Yo_}eZ8+BUKtj)b1G-;lw{h!Q0Tx8nyU#ay3s3GDUKG~G)vUv^pV-~<`#l|6
zG~!2xwzKZ;<oTw>9N*^jruw^LNf-Mi4ked7;yy(E+T+Hg3DYipm$2c(g=IZ at z`ahj
z9v9xcdE*#x`Nr+xXHu<;Em<bTl@~8wTR(rraNF?8_CMI!hHTn1zuShiuEP&X6ElgJ
zE=fgCvr<gf#TwPBJ-s^6 at UGDk-6tXXdRfzr_0Hv7TAyTcVZ9q`i)=-&Piu|uUU%AO
zQ!2Baqvkl+!n*JNB98X{1ykdubC!Iv+nbGUz8)bPw6AVBEQQm<sb<!RS$#G1HBQ;^
zI@;;Y>z!S4WBzw*)-2}sFCKByq_F?kfs5JN9xqFJ)_#_Or&Y7=ME(2T1;g9Bloy?-
zdOyjiR0o7AZ&;fJTfBeHecGX}k4N>*B?m{T?L6DX)y&@Q{H)nCmlrHAJ`q_JI at fRe
z?B~m3ms`0Ax2`t3CLB|WPRr&b8*bThfc at q|YM5i?HepZu$vbz5DyzORF>K%d^82FF
zLZgeRAF3t#PsW|?<YKr(u>1EJ-|aM(@$-_BPfU`y+Mm=y{?aa&@;<z2dui7RHJ_~&
z#f#j{Mh<Yl9s5(|^isb7i^X>yR2MJ)xs8V3+Xn9%zB@~3{lYu1M)XHq&as69a_WzJ
zygz2 at 3qssv)jbVRR-RlPx+`XT$S%09v;6bsO<KR(@p`R3<YQNPKFFt{?(ChAo~5;s
zmrQ!{mM_>~Q|4 at a-eg42-esY^M;mFgy7_E6xn;!#HIcrNzwSwka&eKkVu1lTV-FlD
zJ?B5a^xXM%L>KT&?2O)~QM)Ta{rT0A<`bQq=c;G*t^ikwL&E4K{3THjMh6XMtvVg+
zR=C?R=uGSyjrsMlr`-c4IZ4YKR%ktWxAM2&H%75N8wVcD%4F?W_*8g35;^e_E`Mfk
zN_k#!n*08^1!r66&bg~gLS2Q+i%QrVqx|Qr{%-EJ)rMyVoH-rSyZ6eN$TwRiS`@@D
zUHUF4&dCVHfPy%tQJ24IdmyEQQF-Y6jM8at)5C|POQnw5)6E8`-?hDZ^6<&FwT~03
zR`8F#8u at 6(%Lwyc-Q6Hon7DReMtZt$_#~U{^CE4eFMggFXR}w=G`K8fdhDpt`H^p@
zA0M)#_pb{BgLiIwnRO<i*IG+fFKZra<%Vl}0!NK1$q$)OBfH&r4o(E$I&wZ at jWwJe
zE^(=iT{>YpI9V1fSl|=5VpCvcg}vpFo$J<hW*^fqQak&;(D5O`u36$Euj^s0cP0F~
zw#LIF+BFL;FVq)>BwrUkjBbMvoif|K?VR+>-x#s^p%>>#(tkPf(AlJm<M*kS9jce)
zX4E*{X|ySvwX&VrA8LStrGu~j@{8tx*+%ay#-EJOefZFP<F-CG^e1WEa2Rv)!p;|F
z_4i%#JP&>jKbQONgPHHh>^CoO at -(~uU~;0Z_(H`CHlYc9?oV0nKjv}|569CR?rGY~
zXU4t^ynQg~v19SIJp+7?zArn!Xmi=43_qt+xmDaxhR5q4T)*2%rnTKq-jg*O7PH%2
zO<2qwDIH3jMuaUN8RfHS(!`42vUw(~^CRb1Z26QBarwrB;lD=KT>qS~{`3YDv!0hi
z-t2On%HBCFWbW;64)3xQo4e|@Ij&_Ues7lTVRrFYpOC_A!{g%jznb2EG0f=kgT?M1
z{)5n);{q-(>(%|nu6G6Fo_5~=YQY{mJHNphT}F+_n-eMhVR1)0-o42wo$g$^f8z1c
zH@{Chx-xxZ?Ia&3C(oLBZrO3akMK#K#V?<KPiOPJ-CZ|#Kcx-{PpeZB+CI8EWAyYR
z`|2u9<8z1BT%0&VFfDXir>j|!_t*_~*GJzzeW1Np^kD;!L*v at _oE<w**k$v*fMD&<
z(;BMg7J6khBu&VwO7b#TIp{Y&x`R8&Vz6n)ihXtAL*jGGrbhYi{5>`C@{Pl6bM}LK
zYNLnslEo!C>Bf1)dfb|Rq|vzV8d*`>M$Ml2I-)t!t8d at 6b(URquJz&FkKEV4_;B5g
zZaog?e)6(-_auAS`jSc=Gaz3g{^OOi6{g}WK*P$3X=@Aj)-5>iV`pbK+}7^=f)Mab
zMa^u#$u?wCoUiBei7RFnEd2F^?x#1MSM8gS^Gku~uD9G<<EI4E6KxO9o!o9hoy6kd
z{kDl4cXpJ&=XLXbHm&Od=;P#*t6kNL^1X+Q2s>~2#yVi0EIIx9eiyxU at Vels>az20
zZ}--%%<q8$@1LW(5`%Al(y4t`Xxb*G4dnb at W4pS)wGEi?Sjhgx2nZ}}<%_p%*UStK
zdi%O!iNB_w-^JWtf{OR9*8o at xB8AJV=Pg*%t@~K*)5Y&ht&Shdu2{RMV9WQKl83oT
zo*q304S<y&9d!F(!_1-cCYvniXECCDeb|$o#!G~2j|?dOF*<DK;7zifYgVB%u68R+
zH;-O3?Hb=$p5Jcgta&H$mlq!npIdxo0l2ID<_?qY+(yCsF(h_ZRPFN_<xWw{8VfDn
zEj(Upy6{T9nW=xhZ`Th&#TVH+FqJdx>sK2*)4LBIU%R4bT}@xMJ_HBC_#GjNmpB5>
zIb3<Tj%^I*c+b1(C8QtFy_@~MvplU!cCz7YvmItG5BFEQ=Q;J8lIItE`24o6)77D(
zv);-}{rbxs_UfA5pYp^Z<~CpRH$UyYyG(cfDB0;3(gtiV*QZ at fw$IqXyZ-XXrT%-z
zPT2rx7J7P2HZI>bGwb1ckV8VX73oG1z?o}=M(uN;2^^%ohoIZ)-90u~eWu!Ibl7e4
zikffg_IzfSwW+r&$%@cH<y}nn&epi9_GaY>fU?sb-?96}3wZxq2-yGkAfZBSZ at kIf
zyu>Hd;g<3LKi<BNrv1PB`SbVxi#a)xOu4-%4c`7KO#dsR{__3*j&A+?xi!82->rZD
z|Gxj{ui*Ia*7X_)i>c>eLu83kJqVdVP6)EoIca=3hfB!DdAkyF8T=zd|9TKM4p7rZ
zkFX(llC&gIa;8)uBa#Ja0x3sKko18HlO$4tFOYLYVga9etZ2YN?~WwW#R85 at Ku85i
z0x2Pv5OSe_;K^h}5;Tzk2n5A9OCXh@%2vUA4+;!TeT0)^Kc{{Kye6i<9sJMPnQ(IR
zaCY|S=Q^4Y3sMIVRv1D$hnK=h77z>~hn`XexKNhKrOSs&MaiNxju at Uh=+RS5<7A15
zBq;}1hlx87$|uA)5nnFUvl<*a%-=6GI*!FlN at m5!vBIIvNL0j%Cz^b`(P%vZx&y+G
zAXzHOOyd)5^g11Dz>XMjhVX_kq3oyS9tNS>E%m_ag|?cbBa7^Z3)83i`Lm$?6-`v&
zdlRf)0geHK0%_2#O+k``XOJ!trO9DwMQLB1OaxiA>6}oHipc=Z7<2jCeKegM>I2^I
zK48!wKp6Ca)`D6Jst=h!Ea1t3iuoMa5Qt>cfF20;IH4eokO?K at L}|%*!cZy}5Mq%`
zZr$>l1yBIOp*>@+^fZHl at S2gEE0qIyQ=z=p&`mEZqeU~C3<GG49+_lG_x>e{`5Ne^
zNTuK-&_Vsse;Btdj;e*G%4S5SRLo`(_JmbJbYOIJ at UZYWRz#RzLJZo#tav-0WPv<5
zH93MK7qYFP8VlHkT*Tvu6U3r4{EA9z;4kR{j@&MX+7GQ^u{l9;rIK;5*r^h}p!st8
z<H8o{_Dcx;C%vd*3iUE*P*4!2+b=N`s>@W4GzB&zJ4+<X<cP&N1bQGNU>XEBhv11t
zyc9&oz-mRni-7k2#Pq{3%qDd8C#L`J8;dHA2uw+Uq5%UKI}47G$&q|f$T7rj(L*AM
zlPUttaAX9B$l{1ad{Q1Uir{Icz!r%PQ4*0Rkz-+r+LPEqA}@)PDVBq55Q_<}fXI{y
z_^3LY4`i6er%+7Qwj}~$0tgVage*rU7o;L+a;PG+#=~p2UxHvHL3oT!8MBO&CbN?X
zq at pCW(?|}IB+3S+g at qJzdbW5>XoV50<46UZuXPrL0MR`HN>e3i5*dh10RyR+_fc2{
zMlF%@1=1FF4Sr68Qg9(}0)!&sy_kUt1srIM(UK&QAPK at lvaUI_7-5s;CIO;F4{!lF
z<$`e0I#jMg%(Vo%2~{gWGX)YkU?dmFjr0YG{>j7AfMqG>O#MKE4eW>hV-B_jh_(br
z47f<+$Xnt@$uZ+3EdvkehyG)%R7R#inge8!#+Qu4D-S5b>IwmzB9d9yjQ()xNZgXC
z;CK^mNUH%jLj<B^q5LlaBAbw7_a<CP^@t?k=*Unaf+Gd8CZeg0fwod~PMVyPjfo;t
ziZ&F&R?9RT9T|Z%vZPeG%5r)W9I2F(!`4HKz~V_#Q{i>yEauX9`@p)mJGvu13bs3=
zT0&}$EJI9HM%9{@!%h^@uv#kT(S-n%S<VObQ*{t6lqU!U*-hHZ1spLw1`Hzssa?qe
zDPxSy>m-RK9A$549Gr|y4h<(gGmWP#B at u(_BxUl1GLfPhN1QI?FouIFGN**g6JYmd
zrl!T at qzh10RNgBnXutp^W|`Ie<Z`Kq%Ob0xtp-XFwE$!_ur>tJECGKcuo9{of(0C2
zrCJi20T>QQ)uO5e1tEB<)kJ*sBKsr}i7hlXt{674Y9*c!5h0BaJOMY?0sVj{s&tvf
zk%|xlBN2kDA^K5vnUM+HtOay|j>{x8TrGhw$yC5n#VT1Y1InlSYN;G?H&BIAl%rwk
zS$paY^wDc>B{EDSXL~0ndlx$a02j%G4j|f61u_Q-Wg9t&(vl>!{nZ at Km!2R*xVgIG
z_W;7rrr(aPPW_wO|1ST1|L2!5`mZbdoAy7}!a<P$l{yuh^uUA>gH|=#nIr=yyOS$z
zvb)$hI}%PV9xeksoSa7!yd17Xo*+;C7ntp&Fu=5%fNeF9vb1>*lF*7QNy-$96KMYe
z)Nr;(T4IYE<X?yC|42x!?|&%4>j&TeaO7Xx|NZ(os_uU$Hz!w!Q#$^`e*aYSOc^M`
z1feDcee+8VzE=LFw*SFpe{cUc-|7r%ft~K`>PR`~T<sj42qz~GM`sULw<bGX>1!J-
zkjp@;lOh)iR|>)u{EEmn0+R}ic^M&-fY*f<vZSd&7O}BUAS^gMIBa-W!k}ScVZ*{%
zwuD at oDFBHl6=Y<Jq=E!V8c#s5>>U)q9gyNDNu$LXQjuxXDL^Dk2Un(yh!_&lguyxJ
zf#t_;rW!|sA1FeY9t_No6>m-CVx5t~2OCB)@jscdz&OKl{P?M&G`lA9KRuP7z$cNB
z09ulm|5x4q3abCg{&(ruzv=tG9i80z{dfN>5cqHW@%Q#W;mgUC3&CAY1ZQ#52tQ(|
zND5vLNfyCI5A6Ny=?A{a;6N1H!+t}KjVAg*izJ2>g#i@%AQgpv9>77I`ZZx6gfH#C
zXAp6KKqg9tfCSb9s6CB;L)=Q7$)|Y%>Y3sJ&=~fA>#Ra55MvF;9=HeE0+?A?k><ZQ
zVHE>Pg~~Po&y!UUFci!yATAI^wU1*_)y7GrDI}x7oC3GTc9u7R9Gu|Sq<Bye+I4Iz
zKG&8Y`vYczDq_e87|m={9s=_s_bXumBWYR<Rkg}Y=O>W90MLDgM+ErA1QN*Ain>R}
z12!{M867<fWK;9GX!ziAwQr%3%8W6Vz$nF>5sw}9-{b>;i0Hr=f<g~9cyD41iv|x?
zw;!J`6LVxjfeaAB<VtuTQ1wgDM-B;$3MBYkQX_-~Y8^E9&%pBw4<H>@w2Ij(Jd6Mu
zB)NKM_7e$#82rnmsG!lIx-0>Kp at Fb0K~clP{+HM0KM#9&tw|gz_JRu8vslcnp^Dhx
z at aVv(7$P`4X4wA{Vu9e<6fuITg8T-Uj%-zTfHlz~O{3j1!Y_1qU^Kh6@>Z#lPgA$;
zUvA1I<iFm!r5$Sxj1=z$J^Y0hQX~Uk3tPEd*3DK?Dnm_3Mu|CC0!Nm>%Vf5pp-v>g
zD+zvgV3&G&q+^+FISAb7;P$aYE-4S}1$W3!6?+ntpT|2>o at D2434B)3fWs3C>`*hQ
zMC<{6e>)y}f~xRE0=A_WvI__fPwvf<ak2yn=@J<W;!g5RX&O9{OT#35 at G<eQ1d*|P
zyc|${AJqIm!`fts&L;YwoGVVie&@ff_t9$0m-RnqXBW37{vRhd*Z=B&H1__z-+xd4
zYp%+vP|M%70I`{;Y6fE6t##$BnH|@9)fmKR?RlU?$Y?drYOE|lE=iDPrlD{l?KhU$
zkClB<BP4kP(|80<Ge{`lr4Z>HlrRFp8krtarhrrMQXq~&J!6xx2c$sR5-iM8S=PV`
zXxkH;!T7O^X?l_dZ|gHdxc`&NEUL=%%E3ITkYNCA_sS*d1O!Dg!4ywRA-lE${w6}q
z4JFe6rVte1ZJ9h^a}a9BIx(OinBYs&SST<mAoExR5QK#69*X<pXBa3U6i5Xi`h)@$
zjUuC^R3)4-1o(rH5;b8}!yR>vVKC9Jm;>c50Kh1H0QF6>V)P55o;;Mn0iiB|R0_5W
zJm3(ZT0(XcMAlFo2oswXlqR6oElqSFt&);iPjUf;c+{YYrmk336%jxPK}tY$80C*-
za#KZelwD%yLx4&SgODkcNyxEqAe<_PktA_IU-ZN_1tlc;k_0SpPy|dNC#|rdp1^~E
zwm0}wGSfhsl8=xZA1Dn;Pn0ymwh}=NM^6I2y$EG9^q_BFrr3pb1>{-wK{kP>B|;ir
z{R}Z$cMK1~Wb_heB_cze-e?W at 0v;q$Fh_yPsga<TNbUnI at lw;#R|2GLKomy6W?7;w
zLiP&3n!vYKJV8EQ43Y4L`7j607#3X#rrZP&i4jzFV$-=$;rs-IIXtHp=F_y!-<?-8
zIEwjEC10H)qaM<asA)EZ`-SO>A?_m=esQ)<s{Gx_HU*=YD_QW>sVb`}C)xyNOY=m8
zW<hNptU4-o4O)Kmu~OK?lxm6|wrr}AHSK{#*b;+=_=OJ!1De^Xl9&`Vaq<$9K^`77
z^YBAq{ib_EfexB#6%XW~v?A;%9w;%Pc*Ma$)J!>5k(w{X79?WQl|iC-AWbC at rByyB
zJWyPlE=q$yiAt9YI<qBIpwqO*%alrimnO(X5I&T1Qqys73W$(+BIS at EX?>p_9gfAz
znhj3*7>`Z4_vs$#9ZC_TLh%PiN7@#^!(t?mL?MQZC&XYVecYB92iZR&sSJrMl<0 at K
zFQ1DT9whHz4>X99Gy*9IXdS^VjTaW+L9&!wD3XCw!Jb at ew7dcS!3iX!1U?su18V|!
zEh at p80|8(#(AB`p6Nsb`8>Yh=9^In<g)-MX5hp}TLJ1~nnlOlA>40R>crvFJa()Oq
z!kGx;<RIsn6Z{b+;c_{0XFNbFkaS9?k6&m^U=$JK=O5Z)&q`}gLER`557RP9=4dby
zX#x*&h~!8o2!b@&K&lAh^e7JsKBS?B&?1-SkiD~&1Hss73MeLOIKaU}#<sm`KU7Cd
zK5qqNCPRt|=6fJRu%d_DQ`o#0%2UO%bOBGq5o05dO}Ww(6|A7i5RS|rL^9rw0={x1
zTXE%S0a8$i5NuWuCk5v{p_!o%tUxkHnk7o}AcB)X+>(R}L<MmS8EgStFh9|T2bv at I
z7ib!pNl7HVK>OA;I=TVF=ZJg!Vk6jBX);AXR>o+n=+TPdoud{92$A;f$*`u1LKcb!
zFhx1c8Z;-E6KGE9sT|lJIJp<{rIm9=3LUc%jhEqAt)c6Y&JN%kNuYUA_#(zZ&K;Qj
z)HZ?{qGd<hBy1F90VRN+CSgQi6iNUEO~uvG$<dMM(?^x{(5Sa2OA<&mo05Slg-irM
z);27e(i=--7<~g81z_ico}|j02)}5GH9{(sARFbXkTs}Yn1o5gL-SGLlq6%vfH4$s
zroxPX41u519X7Ai5@^%~LKWa|5J`SaB~-z4n*pOss8Q2 at QqrF>GT=OT$yp3xPtQxK
zF`*~Qzb2}X4^0VCuoobRM^m<}4{a6T-ee?EAbBX at tC9j+b<L<|<gyVHCJ?H{0H0pb
zrc{De;Fc%^7c at n0Qwl(pzOee(t<)3-!V6k`iinym1NPA4`NMe%<d<p*fC30(@3s(2
zK-F6MknB#$`Ty75{Y?f*d;ig6YHhzB0l+xJPSZFNxAZ;&XkUm0w9xgx(z)FN_`ew`
zP_WV_Ae;P&aEE&MYj{)88i_2Wv}*z#f==9oRvoTbMIgzl1>Qh|%1px^-M>~D_1X$d
z25+IeK;L+isq7C1AINPLoBxx0gJygXI%{=2%qbCAK|ygb^hxDFlDPDLeq&Jmg3JeX
z;p=gQ7Q+gvv%-JTgiC?P<ng5ra0NPy_7~8HHpgE=-T#%n(JBu9?~pVSun?;MpQmZM
z<9`=X)A0YTR84n+CE=I0j;ea`f05-Y<9JAWMA}_5>Q|WjAPDe;v92iu%K~h^v}AM+
zhw)L=9tW?X1ltCC?iI~Q6CYJq)B~tA`<6M-dMknsjsiI7L-(QRgkc!AWB_3gY$~`%
z2;|X`5piL`VS(|A)<~GC*bAsCs at bA>qf)4<3oFeVr1h$np=Oj0O_jy5$b)TYFv>hO
z8f}Q)m<AEuZA&UKUDlE|+iY^pl;VGdF@)yur!66RxC$#s)sR-vFk7jUAOTN|Bn^C5
zn2acGw7F)bG?FlVDVCg}*8G`R3%w|e2uVvJ8Qe$HOcNDv6ml!k|EJwcwxlnIp at 1>S
z*)NR>o(MVVaHtI(GQ)dF1bQAEzf4PZz<~^OG>1c4`(zHM2%$%5*CDrpgh-bPvcTwp
zpK^45TmlEc at rgx_9G~mK?m0m!7X^{<F+FK2xZNO=lamZbT2+9>KslWrN?5_^YJ4Ug
z98+|337y45U4m;$4wQ`HqgaMABNQPp9b7$V8Uh&|T~e$NgKm)}NJ_0{9%O`Zk_3Py
zTPZ6lDS^4tjB$G7lvT3YM93JWBU<4SbO=?MK|tid34LnWaomXFMvTA_$pFc~9U8S2
z6+>#`IzvUYJDfh|tTG=&D6PaVF_GiQB~6J|G>AA9`=R3x%4sXgso0bgHC2i_5sOcf
zN>YJnQo(g7g8Koe at R(u&nnIwWTXeq^xl-uGF-<f!$T*Zs_!0u`Pw<oq(3;axKt)e@
zI+&SbT<4H|!XZ%v0T^G?Xc^rnnoIM58AhxiHC>(qu1*}{OF%uT;1&T^&<S?nsARY?
z;%0PTloK6!M;SY_<=_OK4=h4+zzQUi4)~_fl*m at PaM4heZd~jEX0xJ)3>!%V4G#?^
zf`S7>1EO0^Q&TGLtyZDD+(c;b&_K$>piqOA6;Gz?i7b#MfIQ>?r76diB#`rjkP9S}
z at Yt~bk^h;2CWHv&giewQ1Q20FrA=y)jM*wJGnL%gkY=PBKqdR6U}7E(5di$5!o-SH
z8HfX6JOW8WJRi0%up5xXK+?dE$fZFMc*VIH00LEmfXvb)<4{l>q6#RmAW0JtW8riH
zrogZqbRyE#-pSs%FOen~N5p`Hi;nRNi@>A}qKEF2n<<COGQe2G9yP=`IpC?yK_ at B6
zSh$QF5 at QTd6GGqQIAB|e`ADe|WD9r at M&je{IcYfrIRyI949d=@VzqQr)E9zEBtxzM
z93sylS|k&aaW~tc=`e0QcN8y19%cyG(43A<nanmQoRZ4Pf#Ibhue3;x5-#weQ+kQP
zolUJE@?+x#LU(#lvl|K65X&ThK`c}N&Cm at boJb+~1E;^?RuU;3f=AwIC4Qk&_^=ov
z9H`xvfTMRj($NiT)@*t*bZ!7u#GxZxJSZv<W!I9C7P6cIhVK3Vqn=bv0UB^7dX*jR
zo%>nalcTmm*Gy1xmIT_Qpl3^xJwBOEo at hn$BzLDu$8^>LBe|E_b}gmwlAD%1;D`V^
z+7eC*%16XBUcgU4i4)}hgOj!in8wDF;VtwxEQ<`H{>{dYvt1BOhU)S)84Mc=*g7o{
z0~C2GSSLV-#J`dwM4lw4B|1R+&&a&{_vUr|S?I0j|3QW-$}QoGc=CUk0r-{tKgjiS
zX?p&vzsrB`fBLga_>b!StMdPvPz%lgbZT-23=VvL?F<-_A+#co!h&EO0LzD at S|o{p
zS7Qkw<4Hy75M71JX|(TK203Nu?g&!vZ9TGzY+}`eUo9!Z31AH<6t>oZHA at 6!@F|e}
zq*AW%9H1yCzT)F6{EBYC2;jCp1XWvACFsjE_-P%k<!CRJ0 at y5t5nYsmL`^GZ0HiT8
zvlj#Y71?)aHRwnvDTin;0&Smy)FBfP$rQA|kdddNEi=IZ at q#!*T<&YoKn%hfqd_vU
z+fpRiii)jLLJ|-^h)NK^i6OL-h_1Up9~(j;*aH0N*tkM}K{ZgPA{iaqrl2c`6x9H^
zhQ7SgeF(g*2?0+iAy9rpfIro_CtV3w6!|dfHA|EbfzFC at _aKh~+#ZS!5eP2_XzGwo
z_J={?Yvj-`hSQ8;$42A)8gfG*se<p)LOLYi1)icT2^qdyi`>7oenVP6bTSQ`w8B>}
zq2xxo2GbzHN>=N(2qT>ar8U_qU_=fNj2e{?9WyKn*;aZmRY;sfI|gnxA>A8bEkNp!
zvR74e1Kky+wC}7^bFh|=U64SlF?e#2b(?^+ux40BSwf_uO1kb54$%i}Xy`MJ2`!$i
z_a*8>0da(y=D8C-=!O+Yo}jlA>VsZX88x*gL<*};Zb8aeClyk%dyFDDV5R~O(;Lf+
zFUo>!h8(fL+Y)6A+i}5lm}18jARnR!DB$BjP4=|(LFlj?lV(XlZ|bO00&7~690ye{
zbjHOL^1x*Da-bfOuu0Wlxy=SE2o4)7lo>{vPl(?kynr?y1A>T!)K`)?S;{0~0=Z4`
zX=P+JkQM>qV(;u?@92VCW33k>4#83q4Pcj4;AIKu{sE?clBNJ;e<Bh`4WT9N21et+
z0OQDM!WleF>j_cAMn)rFEu`{&r4FRdInuq5S~<y${!B0ESao1{%-1?nR3p>$$YrGh
zz>3kK4fcg4NfCerMcS5de`FeF7^%2EzM2uCh2Hs1c>^k=On>wfK1$Rxxx~=GQLXa`
zlHO71RpEEAN|%b@*0LNLCW}h+w8CCqU|aY at -z!Ap7>*gpgK>%w9!S$hI0+vHNM<V0
zjVOp%?`~F at o<j2eCfy-oWq3J}k_65t2u^_AibifvV4R}7Z6IkpKN6qhxSRhA at Ulb#
zxE~5We}?;!&K4$H0SNwZiZnBw<oD=SM4UTD;Sr5TF$By_5Tj!a73AQI4!92rQn^_X
zQNdw;QKM82@}VIymIKmnF^^=y4Nq{*5ZxLU54_qW`Joo*V?|>xu7wuJkwiHpQC+2z
z9wrin?lA>Aq>!la+k9mP=;*D21gvuv)5T+<mKi&+$l)mG-elMc7%;@vt13rK6D6iE
zYOYG)z&E1dN(2G;Fl2C$mrm0s0YeEAQh0DIO4Kli+bYO#Nm at c?nh4<1*O1X;WtJ!>
zMk+EmF9a|AAdVC+$Adff<T=1%n1uAFx>sqgK$FT-W#39n!P?U2RZ_t52BeO{4iebU
zNstar-t0+UUj?UO;7B`s6srhrzl!Jx*a6C`^UzFatk5Nt3i#(HNpfon!89aFsY9!!
z7 at J~XNX=@20$N&ZpbOP4q!_EpV<j4!E at 5;g7rA`oUs}JvHXbEJ#aNV&lmnss{R*WM
zGc1e?lChA?iE+ at HmL6Yn1-C4qs3?IlMns~VQW;bvPs at VmPrJ%d!uOXnR7^4CaBw&U
zFhoy_Rv;MeZSb7IEq`!x?LYH*0+43 at PB6`b!-IxJh55xmdTv7Wpdo=_exOz<J*o<i
zC>jKk>wnfM3e}r9L~-+e_TU?JvIR9-p6=n`z|BmS+2h=Lbi;&$v*Q3K$N!HzP608b
zoel&J#}{~T{RTR#5Jjb!%LsOu2wda-aPW}ynxl<iLB*q*rpV!w15Gw9bPxnW0Lgwx
zfW`^~sALetz<vpE!;BNj;W;Q1)JYEr%93X##z{pG;sB?-C{4kR at UoL?j^Y{GD-edE
z{l}meL-YgX0)hLciB_y=gJwa6{HWH}gpaEAfwu)ZUPr+uPZFS~=%Zr%laD|xU{q(E
zV8Hcp*UehB(n7(2&|!1jk`drgSoRoclox;ubyFG{GVV#|KbUFAmLTU%@fPL^GIe(q
zS*ft~W01W`Nd_6xWZ^&$d{Mr5O6x~<5?4w%_>lin+7iW0TN^s21(c^w9{f}pBlsTl
zyvPdp+F5T)ur+&I!tKHklmj~uZtIj=`al(_j~9>+Ri~e$CDR3gTopm+(i76hAQw^&
z4P^uO<_*wMer0{qq2XYImhj6Rq3b3U?Q9%q#|Wd5YxB;+!EjSF!U$m0 at 87&W_{7ki
zz{)0netd!Gpp>E^V}J@*3!)1JJu>ws(ln+}K$^#Z*-&(zH%5X;!V7M9Y-UxX`WU1N
zmq30WDpBY!`4(Cp1CuWQ!XT8{O07>5<@~e?637$Eq!c|VFlZ&=^O3;~5)@q-M(P!R
z&FCR_0iezbrD!1>Dn7KDhA5P&Q3FqeHy_{#FoA^^K3tYV!0R<o6x0s+8gjTfz)S6j
z0ro^lCh%8uqD#>g01!(=JSXyn4IqW#xOOU;Oa_l&$H6r@$T0!8gaT*?k)h+{GPv+m
zC0LBciPjs^aFP??7Dt|t&GP+*4T|{$1kZX5n{D6MdW^M|uLwB+(e%()YPt&FK~T`c
zIA{8TV{eqY0rW-!RvhT{WygJE8*e=Z67+qMfi`B0)0i=kQVc(BF at qw3z<D at 2*oZ)*
zk1A#XtEi?^JR)R#Lp=1QJU48M0b-XW1rXJvFB>5NQXmsR at 0W7ma2J@HzyTHL#eH(Y
zB%zIdr~s}&x-BjSzXlRmeEhI^@pyq$0xz==H!p4`Q82hBy}^vYXojPq*gzub2k=DJ
zVkShiG?rEx(<5%yyvbNwX-?N_)*R6V6O$;70kG<ANq$>4wZu_<j285dH%bCaR<53}
ze{eWh{g~qLnMYKca*xoBnvz2k2%`g|h6M$OhW-;6!^5M42Zsj+d=UoPJCt69N6BPO
z&BqEf*3>DXG)9%bkO(9%LWblE45dj!%%Mp_XxgD_TWCijld%BGelQrCB)$rW#z*U*
zX!7{epa^=MT7^kxr{O(73DPFIDnbyR39f^LGg!#rdx4w7P*!Wxr{TkzxswnCvYw&`
z#16bfJ}8d^#W@(`LzR^%Y<VZEjuv1w_xP(;VNkacHks&zJzA}Uz^W2pgu%K%GLUy`
zfN6klnqX$K$dQYqnGpvJ8t#|?6(2&V at cJ6a+ypgM!R!Danb1O?E4L+3hEXeK9I4>K
zT}i+??ZE~Siy*_32 at 6$#>?BCqV0cq#=R86$ov at cGkiwB(9PSlMl0`hF)q$)H<jrh)
z2Z^E^fPvD4Byi6LwnZSDhrZecgd)7=0q%PRFDY#@Bey*1=%M`bjPp4*c(N#1#YZQ;
zo6njn;Bk=o#mJ^gkU_XKmBSnk7-{H*5s<b7S_TefV|OfgXmKtgn^gV5m}PcNh9VG7
z5QWng9F=H;^KarD!Er;Lz$OC=ROS=7_89a7br5?3I>CG59{|99Sw&(LxyAk-IQnV;
zkQ?#@<my19%T=NbCato0(T-LMVC6PJYMmTj5<wanj9{ihu^ULRK*wXDkOWFLW<kED
zQs=W!{DJgrFi#M+z2y9+BCMr2C#s4ThRW1$;$Nn=W^;EY6}8GFwQ}slA$K{}%Hc6%
znoT2Os7un!Q?_GNSD=rM13Sq1iYYO1gUErB*l6Aa+<@jGhGP=mmVz`(NT`r{TZ-jU
zRm%*up^Om#s%pjXzW}_cd8d$V3SbP&2FA+(#irCBimjud01F at ZWwLej6ti^{0+UN2
zU)lrz7$txsgg8>oKti*1C3|BmV-wa4L`h*>wZIeH2`CDVVE;{AV1U at h1Ji&8ro;tW
zYYbVjs#wm^{)(o%g=uZ^nM8!(Fy}{lUR3x)Gj$%d!2nwjT`jbSmu!&k8<Giu1O{40
zcN$@>p7PeH^r&os2^otp)G7T at ZgBL3+A;{)sv%=ksH}?d^Di-7m7Strzz at EFP-GrM
zmJ)sP1MlVLyIujYIYwIspxoA|sdADEK*)sutN3Wyibf!<P!ZUG>7Z;Nxd<|``4Jjq
zAv1Li<yg?KFQbWuuR;cYf$(5!D~*H%Wa2r%KZ;?ifQ at 6J-YA*J(5}!Z{}v`yoCkQW
z3I~G1 at 23nr(0WDd5e72Bq;FqxkxA&tX@`6ikUPP2QXu$nhb81}Lllw>$9^>v76Bwv
z<giP?+Y-I($zd!fi$gvIIp^TuWf3<B?)~+P(^Ke1*hd!u2^)}Zor~EHU&6~o)NK#+
z5D4#8grEL7!F)CgS7lk-<17z*c(0g<D?;%*q&f>le0Z}8CC5O03_u5c!25??#wZ^I
zgGRd*Es-RNO}>xF9#^u)+B>`%5$BTeRn&E6JvzCYT+hEXP8i`tKty~zLOY2Wika(C
z9Eaf`^%AAw1a%m(w<RdRatTOE5ubK!qF07xLJ8?;l}jV=gn<oOq7zH#1#47I61|q-
zc!lo2aOw2_SkCen^M5nA_;$a4lwb;tznK5)<OtV)HogC|Uw at bX-v9nj(f+5}lR5_Y
z%m3Q at UvWYWI^rS7h8w=X&4>)UaY70FqSN~z%N73D<i>Z%w4{g%GKBlNyHgp$1MD2(
z6|Mt3oLxNn4Pd;&Rr!VpDgzeF+OOo#B8jS!;@f)mERL0^+zHxx-4 at bv6|8u0(_~-O
zTwi9cs8YfzLUzh)m*_(dew0TToiT2HS0r^b2drDTVG7+NP8|Zoi@;2SW+;9MQGt-=
z7#$PG0_QATJBborLGRK-HleBmI2tY<9~49Se3h*rX9RLVvDryp`T>n;CDbZe0`@fi
z0RLAe(^4|P3i*b}w6>PKA&PhCf{c&O<Uwi*<fc$!TX|O)pp9`V?#tsM<tnw3==xA9
zxtAJ`AX_8{-p{nI&_O+%z<_<hh(xKn3?Ry5Dlo%lG=^qx1tX*`+Ceu1_JN(@iBRLM
zq<R`9s3s&#a8hM)EK~)QW)gMO?)Xag$lbs=&_bmoQ>LgAIn9^a;vX+IB^yzWCuMez
zgF{o`HX;)`m2XFZ<s1UR*ceGPWG|9N0jb`=++e^osRyUQ*<eWifwP${yyXQ{CAixb
zlm~D6#xLdUs3IU1$bV#mhG7lwidB%gq7)257swpuK%@trwFHPNY6Xy at 6aYaK00RQ!
ztu;VU^aVh;lmtX3Gq(f=DxodV(yYiLY9tWTX>CeW5ebEX6~%J^p~yY7;tS9P!Y$&4
zDryEu at tg@r50di)S#Vel@&Mq4crDFMr2;_3${^V8%7trE16N=U_Dj&|vK9d=3z;y%
zX9l^raKw!!HLxvEj6)9+sUS<C<%On-TI at zq_Gfy*sBfhcgkmUau at gnvpXvk>Z{TXT
z)+VDYZLuq6 at n7k!6 at sF`LFt!z!^MB5H<VWdFE0|MLI4ye73f)^$SNXdloE;`0UbIy
z!_Fl~l*-A5!y6P^=}XXz!4~I7Bd;S=$93SRjG!vOZ?Xc;ri!66X=V78-{d(ZP=+{&
zyJm?bnKC#`N-|&S1Z^rlGeSFYvDy)eUKXwpp}^xPA1+RpRUAH6RwbnxOb&wnaPc6%
zyg3_P-mKab9GuyzH#oyJUSjN*ki{`Xr~+`DRd&2J7C$f#@^$Clmh>+=dIxtBphRQ(
zbqWaU*f)<ZZ{*;Nc;u6Z+_+@$_rPU-e7GzGt_+8B$m9WHhy_9$gmzdJ`nUl)lHJVv
zt`s2nH8belvSiXbK9Wrv*I#d at 5HJxC;DGccG8Y-q238+2Qs5~hXHbd at 4VsxN{;xSv
z!sv^VWprQ4bUn02<ZyuZAid2IdE1+`q^ad=G8j8T at dC?&;GhPdO!+{r1y#MGg%_hW
zGdvM?D2)m6M2sxOKREDhm7 at 3?|G*Csg*4qJuxOB7i>`UV0T0F58hi!05&;ND^i0ua
zfE!!kG#=H5GS!hhg995Amn)HnDq1CpA+H0kE`64QMmeG!>~&P6ngMWfZ!ud at 3k6p<
zDj^|>Oy!`dJjHqe?shCSO8SdL1^NpuDIF|UY)3RPGAz?NXF!cH8KCn-;ATWkVE5DU
z5EV7HwYp#0*l1fT_B8 at PEgXp>lE1;FC<+i%Mj+<RXj09`27^=7W^xjGP4OrJfpJzT
zefyHvg<z*6<8V4&aB!d4+fW3H+R%A9WATmk%4K2F3#x}cXxRWh!W3F~xYi9WE|4qU
zXGgv6MP+s4tj0p9EC{8afn*{nf&|tKTuUQGt{>DDql_8 at QYL6X=o=6WDY9 at T3M@Bl
zHjDU>;0Cx%6CmRULZ>R#5t3m;lXt_CvqGtl&BYuOzjS}iYXL@@LQ|b9<#L1psSX>h
zmTFC_vCJn50ikq-Djw0W(8~po=>;gDL<zkuRlKFJ{L1}|I0=Moli{)iQo=)mKJYY9
zpW*G-w0v)2o<KhE!fe1jZE2{aVMgM&oiiL53dx{!h at xD}L0Do%W5GB`fKF{uGK^Fh
z at v)OkxT6TJ+fZDtg10B_L#2ap5LE;#CppdAk_T>70fg5StL#NeTYUb}+Y(b?92r%@
zjGpQd;-sh_6f26igh2Lq at HaX!pr9r9BJZK1-I10)ebTtHbWbk_@;TG9jH<(&sY|_R
z!3^S@>W)cGc%PG1Kq`S)qSXUtB?J%^pxL*$|CPkkjA=33GIqSuTTe<nRE_yzRHa0s
z>ip53Y$@V`ln{KIB;~M$K?Ak;sNP;_kM;?WA at x2Alu^ba(Fwm=g^Ix{@U0rJBBw(U
z1eyo<oiSli>!OU;;`jm>$;g#YGGc)o{RHg=y=w~Y((<-cIu$J8gbKWk5qYEGpgfQS
zm558(=g1)k1VbLk#2dx~oNtc3;Rq%(dJbW6h>v1tHAPjB+RBW_s$}PS;8aU8_^D?#
z9u^&JV;EmE<x~RsvP_K>(GumTpo~$hfFeH>wzz=I&;y)n0B at 6FQdrCT5x6Yuz3~i=
zZ8e_eOH at KL>eB)pi$ixZQI;!pnI1ldL_Jatgz=!IfuLJLMQL=tDAkE#Q{e4S5<6qE
z<hDk-HgihMMhxX#Sy{PhtRUT<dOjY>wJ%gB3GIvMVz4V(`@vXK at Mc&`Onx|PR?o}A
z&W?yi at 1j8llAWCj<)FlhuagdHjhNRzq8wUJqDY6ih<}xu{sLoG-8)RytdK!yW|kBO
zM>ADn;N$-})27*86AteeJxDcA19+C73?vL6JaVX41uIfW8_alA`D8#~3t-?)s$YcD
z8uP;N6#-K87h^v%BtI&_T$^!D8*kKq-#$fM{@+ at 5WeP}BRDo6$oP_kp95T at lu6ls$
zQqW6Is0#q$SP+%W2T>SO&Pb%>rB2Wm8p0c>fKX8#NJK;VX%HcX<TwaKV_Jbq)cZpq
z4Lt~6E`qqbe`Ye#t6%^B$KIO&##tQs;%#gUHirRY2aFA$W!WPc>y|HB5|SlZ7M3NU
z12DFcN7Bd|EX~L>BirH*37e1*!sZ}A0*{cF!?`xu952T|`!>tIY>v%_+}9?X<mG^n
z5Xc5d6ta51sy at E{jv0+?Lty{@z?$#quCA`GuCA``t}5TKc at rnH1RQfc$u|<^O2WHx
zOtK%oz$^kDEee%h>ztCxVivei{5 at h)1Gi)=Nh)oRpoYzcN}-z<nh83L7c!)(Ou$0b
zB(~%(=`{Mvt=k0j8rFxbyh>p)LKb>4ea)%eglaa_ at 8x2%)?J{%@cv)jX-T6oo!_g6
z<VPtI3jZBQ#lkI=R<4B0L9D#hHEKv#(plZrw078#N**RchSa>2F<Mx8xs9myJ_>d#
zG>|-E#!b{GblfcSE67A^S2TJlZ^&(Tt`~QVu{#*mDWLUn&CTJFh;%_6g95KUXtOKV
zj3g98Q4&f)loBc^a=frzLlH}wd`7=xX(C%EQV0-dVxJ2aD|bqITW!{TrAaR<h4h#F
zR8S4!<=km#Gnei#dPOU=)2J;;<_IQb9470Qe=caZoll>YR))%Q+OXtnNN;1ll)Ipz
zQlJ|`5sAZ%^-#ZN45$}{c5>Cnxa!oYwF%d=Mp;aolJ#K~&llP8IX4jq$t<-en3DFs
z1q}-UB)t<zNC%Dm?m|ci_A?R4W2rNGCx^~O8Gx324VRsMnyBevh at c56IcNQ5K*GCt
zOtiDfKU>Kqw;}4D;w84t at p^8ix{LkEPbm@`rYBH?dUgfQwqsf)<<sc0aAndt!F`!g
zVK$w$P;N{Nm386-hFaLe>Mp4>X=x(hSzsY8sM5v>_uPd%Yb&iqv}cs!&`vtF=zPda
z_wE9wHI%A__1%S&a*m-F=;=k6m8NiT<iPGoGKIY-C}XBUmeK-yxe>=QEQ0T5eZ&L<
zpWl*ZtiM*X7Y at Rpj2P<_1qD9kN7y_9j`g0Ol!BMpjf^neP#DSngmCnd%JhXUZS(`o
zaqL;aysoYQf}6 at nk4FdfGXe_3O(uP^0PB;{5)#2W5%?Nt=`l=8{ieh#wzjk-(rPG{
zDU75vIdkbEnjdV6vOWy+xEihu9AjEFZ)Q<Lmry46fWJ2A2dXLq-sG<8V=~jJ5&fWl
zJ)$H9ue(Vty1<lb^M+ at b*ELmg3#kfhLNM<$KNDJhdQhp-mhC~riz}Ygfq6<!o*TT0
zXF<X2JWZhKs?EkD%`tYk0IT7#@CX at lAyYyr_oDMiCokThCVw3kNv47vLelX>F-TcP
z9%A6;^mI6Pe4%f8wSeyFlH-7PON)QiK&JE<d1h<x)gY{yxqhX85wU|tip~_93l5W2
zU^m}hPq%xmQ9<X(M=PPh8XHh3;^`<{p^!FBLnQ8Ip^4M#f1RiOlFUu&yq?|lsXVN7
z%g=O3O_eXZueXoudU#t%zjd_%{l-7J*6*!h+FCo2Cr+&wVZ*cr;aybGZ`I<8e$3K%
zvun8j4viLUFmGd-h9aYrre5J;y)Z^^LTE|Kj#uh?4f#fevrf)3bW at yO>Gv at N$zY?m
zX`!4&Z}T#OwS=dP%GQ8LAU$?s%!V2hL!BvTNxKUV(=u71H at Q8fuyFJyl6>oZ$E=H2
zK9i`eHs+;cYJJo-%-9>zsa?E!YhFMJFRH8ylv~Bu!Y?;f)>Tzmi_M|cx|+#fOHDbc
z$`b4H_2R0s-to*Qy-w<^Qp$(VG~Hffnl3P}c^T=fIXNL*Idw--TPe*~A*J!-1a3&6
zM({~&-7Y8f8+&bysA4M|no4$iD5cY0jJEX9ycJWgF2V)7yCOpx%iB<suEmpaQwq!t
zNOhA(Zy~^i{F>$;);z=A0cTfE0<hNE`9)xviJ=;MF3)XbA+BweYvflz0{Q4gHoRVB
zWx6wEPjy13Xl$cpA0~D}-<*iFTG`ifm|l}9?Lj2R1j>~lM5JSFq#GhoTzRGm&R{b>
z6j#%zE*H7%;A;D(CumLI)$)A|>e239#C at q;JFTtcdrBcdWQ*KMp(!Vg@%Navg-IC7
zc19jQC1P40=Oc at 4sw=C2-S1~>D4>mYjWmg9qOFK>(N)a_cyr>U<s6-g)-w$LNXgMv
zpyk{165<W7TA$k-?WWh7y+<g7c39WqM}0NtlCle4&qh4p&3rMRzMYrGFr!LHw6puG
zZ&fB=)0MPos!h)U%+RPo8}0F;h6eJOW!z@)+tsA2T|->Ex)9RR91c4ZZ&iR4a}&;F
z1kXl1%fRU&j4S<UwGRb1^CqI%6|6^7yBfOHUQUa}OlIoFUh9JD>7G$KU%?=ybQYM`
ztHmo at qJ#^L*$51o)-NnV)@*HiMQ$PCD_(D1V|tww3^-1kt=r9dMdts<f<X at UJRX@%
z`<6c9*E%SnoZ{oJTy2n=NGJBQ(kisIE-FD69xf at t+B5bg7=H_Nu9N`bf|fNj;QNeb
zr4wax)wu9_-&eBStL(^pc#HHEM5mZ^%yIAq`5)<*8xRmR1&)Jo*3iWO8!AYFD&x&K
zIDde9eXCt6-~iONB!xCjW0h7d>}IouVHLr%#!F{{j1_EVXNJl^fPtWKXb1xVq7=h;
z%HyOv0?F;e=FpMa=T4pxKo7HuK}YQ3gVE6vUed0?x$L2#(HPK?#Fl at 38`w*#3hGO$
z%tqCmNh^`GGQXrCLP<qlNwFFuYe(Df^j$%Hd0v at OOn#*R_53ggIYOwBZLd8wFQ4ck
zcl+*XFTKDV*828%Z8v%o at 8HP0-O)=<wmX8#Clfi@`>)jQG&yUHA)W>f;L`zp>8^?9
zXVeM77WE#rSGp?D8xF>JR#%`85&9UWZye{zVtjm(n1!}lNW+^?F5B`=i7+XbsC3iK
zjpTD*F@~cth*OU at P*PR<(lL3eol34PQ;GD95efJ!IacW8rXfcIG_#?&?jfJ#i8XZs
zlFpp+5o at Qh$0<a(FQ*QNY%!MWc^n}S078C#q+ARBRT@*)d_GA?)Bm6~0*F{A6 at d<|
zL|Z2nXL(AIz~wrk7)B{RvP(mjT}AJiRYRBE*n2Yup9*pK1gk61chXfJo#p3*1s+HQ
zRqivjIISoQ5uAFiLcB at 1^sQLW9(^~$ov-oR>%q=D#WCn9wxC=d9K7<CAldAzAsc25
z9j0|E&TUWGj<a_eMExkqZpX#B!vJ;{m_xt1qa9<9OS4DDVcrtT{k=2MJRqZ{!ihrj
z0L2sGShj2?GiYi$xcyVVk*IoiLsVh>m3tfDq)R%_lH5WTyPkuiEV+UVLu#03JH)IQ
zCV=Y<_Ch6La3ZRr)RF$t7IJvMex(@64UT%h=t0Ddkb;LTQ)*&~w<@`rR2I7L42@*Q
zoAN$Os}~?(v~o{dS*BsUm!}8R$t;@0>K9?#G1#I7f7<X6$7hqZ_|pj5I79mJvFK0(
zrLS%jtkK5N&EugYiZQ_$EvGYN+hk&@!+|bvmzXyBQJTA_IU<`3k{V~E+?>kRqV_lQ
zti!RB28FSkmt?3sQ-b{o;ET#qXIppYPQGu#ULVA6Xm8op>s;R1*3m<OT`1g>arj3$
zn&3_ke(K}<DfA)S1;G`83Ebt>jv<CuDV)n6Xo$mG-{>g(<qyF>Eb_Hw3HwE{z>*WA
zL-1XM at L%joZ8SEVajr|k{#i;nx5ZO%p)gFby$B(YQ at b>j at x9FPKX$J_f<uAYm18N_
zOXf#8Dv}&U1Y^|c8HZU|%3 at C{&KBY*A^|aS7gGUjZ^apO3W+ihBW&oPqRdgsEvtG7
z^DtX)m8TW;LdE*xo=a57?lle^L=J<nua=MP`D3io^e)RM%5|9Lk;H?>I~p-Q1LQD~
z;h&h&!B12c0Yo4VKR|MWgU#F&J3#h$U9+pe6$x at 5g*{{BGZ)Q(meS!I<V10ulcf3X
z;W&{QUNN}c5nW&i9wHbHx{Fe4n0&0#uvx<H&4m=PQH8IiO5&=6s~;8gyA)myNc~}-
z&+ at BxeS>o&1OYdemO}Dng?CpD<z@<|qK6eE&+&Bw$(0E at i%L#E?6<`A$FL9h$p|rM
zH2_xKSZB~Iz!8&q9}rsC=ZJ+oT~Jn)Cj=){#D|k&A2)U?z>-Q<O2P#iVhDn&6dRJX
z5E|=-^q8VKplJmC-ia{dz(mJPBE!v+1hjpL?v9`btKeKXTB~}DV*WsUJan55Y#!Gg
zm^uNHQs8wC45C?#LsO75SK?b)I%7su;=?iQ8cEaHI4aY}W~^$4t=- at Z7v=Z*gwVif
zfJl)WG=AY at M(bz^Gqqgq^fnI>NVB4b<!4dzK7>oDT$fWl3}Lc?<GqFIOpJ6MY-*?}
zGZ0lZABLA0;6g4DnJO4UwvG|PcdA4xQ0JxU8V2SM!P>c;!!nTBB{`9jG7`tnrEj$~
zwx}X*DLJX(Xfoy`RiMIv2X3R#m3&r^JUb!OBt}RA3f$O79D#*vxiB`=g!44FIvp6g
z3T|gm2ha_6lmWi|DC`*PLv<Wv0$mx?6-40Dd at Ykj;^~OdI5brIm)nw&-c7eGd5GFU
zqUv1CZ<IrcDsT|J3eVs!0PE~Vh^XVPx!#+!q)wSuL2ERPBE&IT5!w}|{b;_!Wl03h
zNwHNGW0Xm&!np%KpUhPsP}Qs-D6E?SL``SOE2=+}AB}K>Nknx4c5UqE0MZC!A^c4b
zW-vTb6d=hdQhG^l8G;8bIE!Wam-u9t0tUw8aOu|}5D!OAr6JZ+V&NFHUuXe!6!aVZ
z&6HMP_4>fNih at nz6$aD at yxeIm%dj>`sl_ehnt*~d6g%Q68FekXiX1agVr9%G98*+t
zddFQ%b+-fs5FF*tejqw35pp1-^aDWzLl3jnI_{<8W6_}j=@x=&K^M at V!e|oU3=J6b
zD8XVk5u=BrlM){S%EUIK3LHVxfMf+S0zmELOU@|zhX#1sXmJCT>gp^+aT=Y-5QBR^
zM^Iv%{etb8lo!__AWs#GA{?Ztt)sc+YF5cv>-RZkW1twcxA=qE5ojKaG0sv8y1=Ek
zLBujm4)P}yo>dM=@hZEqD_Q~17iK%Wi&M`~$}sgN5P~I1meGnZri*eB%DW>8I~+Uq
zBEVwe?NKs=``1?>w`V>@Y6vXyWB_=T4Rnj_vUV})l=g3EAF>nZ`*83bGlBQ?2 at Q*W
z^D6j+&;-p9JMw~&#1H*AC=yDm97B!jB0R+ak8&tu^ivNQGuGINspEN4LDb;5BT0|L
zQ3?@)Q3v&6 at iPF2e{PUCYB^t{NS3qbiqv29+mPVU1cSK=ng{i5i?f1Vv5;o9Y4Uhw
z>=BfoF3CYYY`8i6$f%e3;=;*~9~JJwepJ-Ud{80zOUZL%0_(XXhy0thTX`r>pdrz`
zSqXqmZa-vKYoL@;Az=Lx`sTzqhI6>jwA#`s!b0Svvp<;}DyB$){E10Rjx=F`@Zb$_
zGNp2T*w4&iF{D&c(b{+?Ln<aFNxTu0rd-WPp;jd4QqmFwr3$GKbP-7>ksm5dbTkbf
zXQ#aOM9ZG#5hS{RnbaQ4{2tDgqnYAT>IjoDcv%KU8M5}U!GNtUo~jXtT66^;hYbbp
zxJ%uKYfl3&^=n!IiKnFrBP=UnNh37<s;katK>!#_anh;iH;|EDV6qnE4NA>*(YUal
zzALc9j?(F?@X&siynObXAcup^%C!bgIzKob!c*p;_ at pYRf&I|_oXUf21x5i<>d^jh
z+`%7B5M*&$k4wWAM^lzTa<~n~Vs^ij`+N|yu<e7UzJ>{O@#*ZvcPOQjv_)bZg$fr-
zSg7e+m?lopy(IFT^poA(on=CIwTd7WdJIM`>Rt(+42;ES;)yO1f#yicy{F!QW(F2M
zM at -&i!4;!1?+}A at ohS&!D(AeIZA?JRX5G>?v<=G{0$P;h5Zh~LN~MWNzkoz!F<v%g
zSKc2#q&$%uER+*+Yy{zkgGG+<3aI21cGVdBxZ7uvNi4Qu=A1#iGa5T3CV>eJF`k-h
z>DDFVP^dKU5CD~9(W1v at 37?03#t~l!y%LaWj*Vk5V8N>jr=c}iGXw+~Ig9i`)@%ZY
zC4sjHHFJjhl+Zd6Qgjt&Xr0km1Zh&xODs at R!_?`H4Z=5qaSI;BS{FI0Smz8wX#0au
zONjEXufnE)ER%jO+iO6DgC68;T!T~#f{2o;0&4{U2@$wpvRIDKzA3MQLOk3<t{c!<
zJiMJ%YU*OtKoWw8TM`-6Fj;4Z$}I4(j7Z!^#&41<Dt^7`^j-|ilhHGYFKp|8ltOY~
zEp}CiGH<lu?id9M#w0mGOb+1*lu~iLU_bScExZok6m at Oys)AfVtgATESxW3$g9!z@
zf+;&Xh9;G{SOUmfH7{mmWu_b)0Rr+4<_8FaBt$#mXyvkQorY8_Gm%PoiX0?!4(bBs
zh)cK9TenU_l%p*<h}*!S8mw<_ at L>}kkh%*)!|EZi8sB4$fVLEvoHv*|;%m2aOCs>j
z3c0T$tao$IK0scO7-*JhEBt<EqRO{>;h~xOhPS6s3EEQ=fe9Ujxd2El##sj%)ZNrK
zN-5%V78e!6lW0U51PXk#D=sh*so|bngZ6ReHjLr0&|oy<WjZvcl&2;=#aGjp#d at R$
zz^5k+8E^`X5fKcuA1Wt>T~LNCyrGtX+Zj at i55)&#4m9Sp9kSX3S##Jx67k*8C4dxL
zfO@<8TC9ZDt<$i7G&z8AQ+EW1>7W@~4GdCMMo;HuLCE0Ip+qD at hA()+w<HcKmlGUl
z1jTrW4x(_*FjBc741HK at kwQqWbYjS-tq7s@@Z?HQP(%ba%&8)=4-DZTLvu>jM|)6t
zngV*|6~?s;xnQ*{klt3Ebr;3fjP4jhtdpXF_y%Zpe^*nqB&E2Y7B10;>6T3UxOEpM
zU4AAm)47ycaul0CkQ$~#jPAqxWs%8*&!)#cnpuwy#YpxGRoe@}lemybai-6_lXb*#
zGb-p_ti9bI1~RTDl~c3_(WEhzf<(tkd{JZ%))Vo{A_ni1+7l`Ep+Z1-y>~_+l*$6)
zatCS(iJ at b~0gl?Bu-5B=o+zR&7%Q_{GcEG-f*{%+j?-0WEe*i>C0JK&Z|QE48zQ)Q
z at D65KB&s7KfG#Alup<Y1g43`Aj}R{nK_x>veD~DE2f4AMS;FNOeF5Mad|8S(Z5^^W
z)wHuiEdYX=%*#PU2ntkW*{(eVr`_b#2jtds>J~n&hgzDOgf!s>4Ne-XT`tH8LT9pY
zkR2~;p~~o{!ddD39wW9vD|`@S8--Nitrq56jL+DA1vNKG{2<f7jZlE})ce(hSIZg%
zY9`x<%oE%tpi8o(kbcF#*w#b4Zm3vye~pusA3b^XLm*5`NL`rGoldY;pi&x4*l##!
zFT<i^68fbl6f$oMQIJWvodB%8jeFv7R&YHS`y{L;tr?cQT!RYQTomLx%5O$D4NU#Y
z6&)Uvl^&~E6Ft!4O<yOb+}^Ro=y=@KTrG}LDus#kBNsc9!Bz at Aqjk7i7*dn)N<a-l
z9po@*p>I)9e&aQ1d20>Vg{cW>cA%|geJw=D at 6>)`D655(Xi)|QO})Tw6QTnT{{(ln
zQ%N?v(4{C6P98ECJ;9|N0n4fa1OaFr!lD90 at N^5Ru<Z_sQW%8mo%N(Pc`{G}cSfTt
zo@<qoawr<&4#JD}ETQ)k##WptfbwBV8R>G{KD^0Y^(_Q|k6%q)3?oX;l_jAp+TAF1
zH9vxir+~St4Q?o<oLtLhGEkX at o*@z=P3}!f3*C at VimiBu5AzgnJ#52H5ek=O#w^S$
zpsXWifeIAAj!k}!K7+-&Hf_k%8<=2N;Hud=ILHpm24eXn55s*lnGT&HC{7s{N)(oU
z+QGSycPLt0PYD(;uvo(zx}O<IZCV-)6K#+FNqj>|W%PO8ktMebq+_&}j>Q7tfsnv~
z?XFy=*5wQB&91~*)^1m>H?f(Eh1{&Fc!YPlMog;kZLYG0-c7DmrBZKP$bhANMRSi5
z5 at x%MwMmRc3OWuJBXT?WBhImQZ at Ig?9Bgj0K4_aNZ}p*XfQ!GXEqL!TBWJe|tWAyT
zOuuO*?qS6Bsw&h$xqo7^mq|{*Gc at i0aWn3gJC!-L9L2GPfV-9KYR81XZqYDgintYl
zfguH{4vZq<Wz&H^*fSLiRT?jkxU$sKL|OobY_;~Jv(3f+)(6!jqAn>FGB?pi-_CC7
z5xCIj<l at L)$>OTnG at ZMXhfM<+;^U=ZG*rh}X7o1s8Jq}vtD+&9p^ht*OocKuHw&|r
zKY=?c=EK_rColeBDk%??lkf$ix9uOX8HKSTavP-b<Xx5C%e at 569W0I&%bD>Dva=bJ
z2nFv|ilYTN6<H*ZEaf5A3=r)uLgmSBqN(WZDEwV-|08*(I}3e~^fH4USb$3=;(58v
zx6TseHBa}^m{`3zC|j(CH(iC1wK|}jD1}i2bhG4Ju=hznjR?tY^+<NHEk#caltI_t
zOU0^-+QY&upcS}dJP|7}ytxwFk}og?M~aG##mF=2c?UhqpkYygXN#U;&rKIT?kP0P
zz(-3GI?51kt4krznp?V^t-I6-Aa<vX!y7D3xbG;EN?O3z_5dBZyMdcR5r|((vPmhT
z<=D*Qqh?qM!i;^^=xD|Y9{#KkIu4S-hA{AA1e#h0dV-v14 at G%_2gyJaXkEt;rHar)
zeq^2 at Qk6<LbF?Z-NKIt609zxgj6FpR=Zif>nSxZJ-eD;18I?7e-4T}|s4+ygn`cXr
z5+&aL!JK4ioQlm%+vVsAnn9(WV6&k_N$P)|RN;L=mx=1>vrg8zNgO})_{E}HdQKI4
zBQR)%)jH<Kr%ODi`0QHg)5S)H`OiOcfx{Hhgx1b67fIttpvQ9prO=lLHSdv3`9$W<
zY=@q^ClXgsz}Oja%61eQdv$U8nVsqKGS6Da6OC3z-R8jLso24Zcq*1pXl^uyINl46
z&~{EX4vobVC6%QW6{S at rvBZ9?QjC<*foMJfdMF+{T#9tZTvR!(4b|0xesTGJtE<*m
zREvu8jg=eLS5#E2uM*`I8>`DJg;RdaCC(xvc8WxC;!C99ZzET>nZD=B`x5 at 9c@oQj
zV>PrIMf<m~l?T&QCw;iC+R3ExCry8AoV8^tmNGciX`nSjTK6h!8>(>v+=39Z8_G92
zmF49dOUgHwl&{B&n(ECp>npFp9{I7&P9d|q3$ScqcGj0JRZ0;yn-~$3E}a(Ax@<H)
zkc!fpJ+rJzs*<VB)=H7*Y3`514RLwq3BeL^C^O|y$Xr at 5OyWB>xTm4;jbllSN1dT~
z8qt5T2tR`5MbwrtMwps-BGXU30)xH`Wx~>0Pe7%Wp7y^Wvb-Mov)4_+w(2HNls56M
zBHm8`mn<k-YD~Hi;HUQ2$nZmWFIVSrV8Q*QOSj&6r%yUIwjq#fVR2U`(d^mL*BMID
z461RmC(fjB%mnJ+m|PIaFAwApZ)c08t at I1+RY%mxV+2el(p|I>gBI^~4Vz=w0H*d{
z!B`^qRq)OUG(GmJv3&`q*;pzCuHemU7!bhu*j+aUUg5T9<w3<_XY-M1-$LZ;C%8}`
zs4pNdQR6ag?$eej?Hve7X+=#Mghpx0j>o=fgF~R_JfRU3H{N*<pWl{zuTS!FEr?dW
zB`vJ&fmE7SJIRAXiL{T==8!~&xt;df9pD`)O(S$VDmjiG)rv5&_%YVCf}N8+SF}6Z
z(8wrEdm#Zy(d-U((Wud;z$qHZWX5aC%F at _uHyFd${jt(SEK at d~N?wQM|8yD1H#Uiy
z6Tg6bWteq<6R8Q5hVAKS(gLLWfag<KFCa^|3BF7{RX0G6CU!d(j(;LM6NpG&$c`>l
ze`JND&g{5zGs!)7ATt%=$)XXY4@&22ZSUOL*xs`n2hRGXgun_Ud8INON9APiX#uH1
z$)%=QNc_ng5$K(qfY2T2tbL&v3F6SMXzcLeO*@j~t!+6jBupGM<{COX>R>k=Fnos1
z82xr|bP1f_qQ!Vg*<!FH;U%$_T5Ih<eS{{On8A`0gI+1iF*C)q6l$u45Jf*lVxzkf
zBn4w61*bLc7c+^c*afoaG at CEY*;cC!;Y@~2)UX%h;z=L5YM2G#WC_R`sIROpbB8YD
zQm4YH*Q~}^X<nh?3kOi}0gg^>wWCLngd~GZn<Vcn<I(-G5{6I`9mWt-qxSV|(a|Rr
zyC__=^+OSHD1L}3ZlQo?u*ga!Yl2tsdsTBJt1TOmujIUfo7rrCBB7yo!9oyI_m{(k
zoC!b%aHZ6~S-Pi&&_YcvtjnbMAdiFfHg0Wiae8_id;5Bv_O=}@*>^cGlgpi-YP*9u
zC03XQ%kg(_k-la1G^D3uUGic>F4E*Fd-M at 4xip~N5tugNP>wo_3tqo<YOrJ`xq?6P
z;6ZvzD5NI%os%NM2h4l`JQ!~zKuxdVR4j%=>x6U>wj(IyC5fpkL;fgLhjMU-tEq{n
zuY~&J8^AaZChT_e at fJp?li)eITRS$!V{0k}wMrJE#&#kpwWG1^(j%Q{iyeujp#Tgg
zvwoz(E$|U*u>D-R(G9c~p~MS at UNvU-6OkDisv;(}DeU at oQ)@`bpwMye7%}USP|?8r
z3 at xXs7*CT}Sja$M<sxZJ<Eq;HJOev#Yint5?#a3#h*^}GcMDdW5))V#mPMf)-RxKN
zwRG?5 at 9FLAZqXbj@skTTE&`f^ZRQ}e{#C{g2%SyE-t#23^YYPL>=DF%REV*t)7!SQ
z1-))(7t~XyqqEoP=xc9ZM_YTbZyZ4QtmZbnb5xa}BeZpF>+Igy*xT0G(cjawy=7-3
zIL3vZCVia1uoDq*7Q<-jZfWdoab!Q2NmOZ05l%-y!>8oX>ZEp3U0PmRx!xhhTu-+Z
zSOt{Y$iT$@bSbMHrI<;SRhDnAC at +Tp6K*2v|NVoIxf!K=gX=Uwr4V3~Mv<Ymls+Eh
zNN7?XYyDSktYQ}uzE83#-R9$C>PjL+;W%dUddxFOPnC%DT+!99UKbH0dd3tYjUhFF
zI}NXlC<r4b8)!1DJz~Q(ZEbYD)i_1QF^wF?X at oL%MR)I?XY-joOrZeU%&JZ^ah0&K
z6$`jLcfjO}PjF$7bzoGZJ>k6nn;PdZ9qOl35AlSdDWK_X+2$PyE(kGA25cwTCO5cZ
z;uI#Os5Pk;YPDJA4&B30NN2tjY&qGZ%yb3DS$b(F=W_$Hu{b at W8<s0eCXZqwn at Vq9
z_t}qV(hIt!`6MRj$TX%JN_K|^QB_)5CCR1ajopZnHzW*?e#zsvabTy$ku*41>sxkC
zdM#bq%D-l9G$-m3Rp at gQIBBEL(<vNb;F9iLWxuv0LyrtFsxz}b!;Ua(U}h*^y at h?C
zk`C<gg*xJo+Q=4MGU~x at 2iNn|O0~GL9MN&*C&y#HL at P^5LJ~G+G8}b{p}F1`0{}Z9
zl6?S!rDDPw#h~m<7hZ4+jaeq8DVgn!R4Hm~!(?{XR0<kOXJrn}KwjO_y}YxJtKsU&
z1W2lc49>H~gBVcl at j#Sg5<NS2VH()q*3sL4WlMJtggNQ4)#YfNVEF`@$f<F#8EqCw
zjNurRL?U|;J24_<1qpt`H^jN56pDEUl0%b<GYmQN+Fi+-l#NJX27E+SH5U|nD2KZv
zz4%~npoEA^(To^+uft=JI)4VYU2rB04_mNGOb$#!G?qA<OP$Lna9jq4whGz70UiKG
zlkvd{Y0<-=8pAN|Q2A-Rf~6cAdi4RDgA;Hx3 at 1~GbeuerNynK65;Zk~C-3hEE`uXQ
zk%nuFU>LfQ;1%yFDk{CScu#R*L!5WE06bKo%-Fa`hEQ$k<?c$?>#|yaVZf;vY;1$r
zf!$EF``UGTi}zrMaRcB*_Ux(Hvxl~18)OXOLT)1Kn0sVF#pKP!mAn!KoBA}R0!kHo
zNoeu9G+5vD-L#I%SNnAsbJnJ4 at z{e);Q*Ys;i$2^%zgrmT_K#J;E)9dIJ$zLuaBjY
z!{iYy at HuRd0LI=L_^7wFt)sDf7dM66#*Wl8(7*@bnwIX)ZEfxC#{;9Uqo=L4qop|~
z3}Px}=b$<T*oElf))p2D8NNUbC`>N=@g2qSHwGG1dhoHj7 at AZznVtn{SpKHUl36!s
zAiJ+Avt-w)?Cesa5*{?v&<GO8Nlz&!!fMX4S60FnE<pguELp-Ln_C!z(bbs|kZ#rN
zpmf#p2IXjO%L>yR)FKh7Mnj+di)zg^;WnmW6~5VN4Hr&%X>Hv9x}($VC7`VOlIctl
z=&F(0cs)%rYRlsF7J`()rD1q4<uYwp!NpZ?604KCunT!M#vX}*P8JZXzJMf_Sc2py
zw*>4PKzb{%CSiQwDlq4Q0LFnnb_RqTbao7bpOJF_NQ7{rnlslqbP_qstc#U+I+Xyi
zSn6zzjmELH(uPF|a2x{WCimdAnJ5!^v9Od$4&h)kb{^C5ZcH3Ull$X??j(T at hhip2
z#tHNosWy_W-4p{D81m at Mq?|fnB5F=CrsHs at i3LB*SV>DEGdN}o6w85}j`a_Ng^Da=
z<yx-n0QR23X=Wm%*4ovQWvA*VgZNm~Mh9~$+N=r}jX;>!o2UX*H(quql4?5Uo_5jh
z8BAhvJ>jxveejmBJ7UjA`{f)yvKKq%X<?lC2Wd#kl97q}#Bl&%zYAtgA2|+i(A1#A
zjE(n$Ed6AmAna~%Nd`vnbYAMx?s)EY6P_VJV>2#}<$5MD5)n<A+r|&bb%EUyrs_6c
zQ at YfIDP!$~R7710^30}8zLpkCN*Cz<E(lgdJo&9`TuUI%WtlkH?3CSdTTM;I8vOt|
z1N$c)&7=x2QNgqFxXu80LJ;tjZpINcDHy6ZlLB)7?v_&oyAH`$B|GVu9{axwyk*fz
zM#@a8BMCzy-Rz2`+4r*wxD-+ss}X!c56!JYPk29U0bMT(y08wZCg<askBnh%VPPt3
zRCXRE^i<wvHMh~I1uQ1BQJ2;QPp1kfEet3`P>1B*txq}Xvs1)iPD#C7!%)@;Pibxr
z<|>x?)ckb0y+PK+qQi?fdGnACOC-u3A<a^duzE`8v&P68csi at j>#2Xf)DF)aCOM9g
zR^fBZLVArU(zvq2p~5uLv at 5HY6s(~-AI{TokA)cMpze&OpQbZq_+wD at fZQFSlGHE}
zs*vPGFEfGG?dpnSW6W|-o#+8Ld<lX;NO*DzjyXB4_Q51XUnF3 at rH+bFh1OyPzoyZN
z8i4h|;PA{+F5FO2>#WB%rAp>G2?_=JloYdlODzeQblRRzNXqpBC>Il+H5-+s*c$99
zwZ1NcEgc!yogXcJWJ!j#A(yXNyfIu=T8N)7Zb5e(GR3KpXn<BlRVXU14TpGalM66x
zZlfHv1M&U#_(8*fPD5rvj>v#P3aKOz)o8jj6Pd_;5ipPKh)vQtd}GgYX-fzMEoHrW
zs5C~r9Kf5RsUdQ?9?$S at KDGt<3qS*mrm+jEt^n~{tih5h%gRF#HEB1}<<hUq`uc5_
z1|TM6JF4OfcYR8|u-2D|kF7^qZjyq<h!<TL{bni9)jec~va{rcwdu=hgA~+pUZ%_L
z%))e+o^jZEu)ct`XI_56AkKSiFjbEasueN9XRX^NYdz+!5Nns+<+vljG`Ty{gT<O2
z?B3zkRiA1JADMCZQss)*N&h}>U!u3x;7?7%Osws6a^thdDAv}~xbw#CEsb5$5*Ey2
zYaCoE{uF8~^e!^}fqvaVou0T>Cb_~m3?^o4t+aT~{{P7rkVR4ggsYHeR?>1#&!P3F
z4>QuhUa+P<h`BfEk2||t`*%(fNkS*v1lq<StoD?~O96UAdsZOP!Snr8HS`0%hsQ^_
zS<si%IHd7(D@>%#$- at b``lTANnevZfmuqIkqef`}OlylqsFHL5<(r at A^b#xX0U9m&
zpz)d!qc-Y2xljs{BD`(5YBZYaxt_&{);ApH@)+TDP3TwFhDT&YW4_mQ(K{_>qOU^2
z+o^OpvW(d9FxHDT$<&i9XGV&7+R(YwvvtBtO<2fnHnpf=X*n9Pz>H3RpkL+T+K?tB
zzdsq*=C4nK5KMy{B^xD!>9}flx^<gfQsM+QObAj^%IO_5GcsxP(0+|8-P*W@;+b6v
z<m8}Yr_94b-MnFEowFgh#y~{!S*7U}gt8g`VE at 9tNZ+Lg<e&;B#k4Q<BUF<?nCa>Y
z5Ic!NKaL|1qj{FcAQDNLM+IMGt;-b4ik&?W>*+F~g;_8~e#5#24pSt@{m~mk)IWyQ
z$0K@}2B_<*!dRMch2^XLuxaH at r`Er-QuinmGT7=H_Ox+T$S-`1>?f}2gS0tDJE+Yu
zAYKX7cu3Hp2-4;zwV{sNp#(vFMl!SzJ$@umAPFF2lL at KqkVcq+c(V`bkuN6zPZc=}
z^^EW=L9LbRX{;u8?X4ll9qa=0a-AcK>Zv~~j at OTYSpj_@PMig0S?-5dQ$tg{5JFnF
zMmZsPXe;x~mbi>dD1n1A*&?|+?1ZU(1a#IE*TltSCyC9Us|E(>bdIl6YSPW3Av$p|
zgjUaUQZfgdo2upn;AslZGMkn-5e(PD3Jm<L<-{{bMJ){|CkRhfEk!9jQ+S^~Mz+)X
zfLuD5g;qRkZVVIsv+Do7$xL*#uPK};nvJtd0A16Z`8_S66{PSS$KMP&Naz=z+B8Ph
zqzi>(=aU&;NRp~?*B>9!O|ud)V at bDhXwuBnabxshkh9hc2$&1&MNti?I6keT+C=T?
zVw$Kwq#xwg39h7|XW;<C8#QP%p|ULDZB4^KlzusR!W=D|DEBvSxMJj4$C(%$rtp3o
ztaBUh9O9K3$q07+>7MvO(ZJS+NSB0f8t6;x;E+fVG8!;|&;g9TunwQ4zHA-X7C#aj
z%4!%O5X|?|)P|(t(<eDoo3XHFG9<<a^D9mz&Q)L*6M%)aYb>%`ItxtG`3Qi%e2q`9
zgRL0Oh at 3XGX>#fo-sU2E*$c#&BoXpsOQoWP63Aj%GM&oa)WLDbJX1U>jeIl0)}aot
z(|Up?v;KYYXxoTMY6{)o*q(U(+#<d|K`uLuuO`{_8GFF8MFeQm&L%Kx{dP@~cLr_=
zQiS<RM-$eB)4%yPhrf0&orYnfP}WwFY(#Cr?KKM>==j^HhrPL*_3#;6NK5rRyH6q6
zO~~BC>(9Jtf!>fJ{SxUi6PYBA*kFr`I@$CB38oGl`muUKBZ}qOUDmEJOG4+AQ&gH=
z$(K&Ykdci0DZIpq9TaGECtXbz&<ptCO0*I@$3X4T<RCN|Y}-QTjv?$19J*08JOhNk
zdM}AlqHi2F8yqis!DucE_-oPJU%i(E&H4D#3rKQ?|JS0puW~Ok!7&DUR4zzV at 1nCS
zVsWSJt0s{rD+_~wc5Bw6c`^`KBQ+4b=>jXnoK9-V49GswZx1?Z705ahst-tFIg)fa
zeMZ+>-{1*Nq}F%roT_6X#R#aBWjI{Tdl1#}Xp>CtozZR@>_r8f-p4TxIHAMQDWZ9;
zbY#M3K48el_*Qlu0=&z&nAMe))vny#)ZEzHxO<`59LugAy0A2lEwDE*LbP;|lrA7>
zSFl58#`yygiM9(Rhl>tls7%5`5c!EH=G`{%@Xg*fyz at Leoerx3zmq^^?_N4`BXJ|#
z$F(;n>1qWNQk>>fQ&Eo}C+tMdB;gM{K7`}!RDL!GPF?hoC$x+`(H^mjM&pAAR7P3r
z0@?yoHcmJ&qh<H6AjxfcZ2{3=!ft-DqK19bS^PgC>?{nq+Vx0Q0C{{MvvPL-PvsRA
z<?Dsl|I>yI8`hun|C9%5k2{Iv^Rl(a>;K8iEm- at itlF%cKUJ5MS2*SH{8Uj>U2%;w
zI5~io<;>V|I)LK+csK@|R6c!Z=O=dP)A>IZf`!+m`=M8p_i^k=(IPHgdR-cOe6#m!
zRSyZx>fSkW98`fk*b-s8C<>L+6d?keav-J^NUsYkRX(S(iZ`x#*bSXCkUWB87|G;;
zv1kfmSa5a^9tAjvjdH{Td5 at E25Y;G$_m>?U<(y<1^ms+m9<E5ZTSG|p>i%~Te8=5$
z{(At(F8|5vhjMm6r)!R*y1C_lMR~>ga=-lFxbdX?KMsoLpY=q^e;>DC0N7Bz!RP(2
zVq;CkrW4}*PYHjx<-`dppWqJ_tMH)~5b1?*z(n3LqGRdZ5qR8B(*8xq^Ol at +@Y{&5
zei%b+Ph|aFojtv~BhrzmIznw(Ow8W#wTK5w-b0i#Li8}Hjw*i#*cO at QeKhWIC-^9%
zLj?tUQiyvaml5D!nmv%Prz0BNq<;}M-yyY3MEbcp{iKjfn$rLlW~2yv;jtre_-yZP
z>1uCmYVksKCrDn{(b4@$xat at gn;CRtduwNRTkrOrggLB?g$g|j1idvCkwu2!cx7A5
zRUQc3M6_`nEv6xuxr#nMr%IFO{rGsCf4w85DCxL7G%HGi-+faa(NpaJ3xR|9hjx|W
zw*@B{)rw^p(q1CtsNf*nP!55{4xB7_KeD|m^a~Cn4j$;2OgVG&T!p4_qZ%0Uc?+{J
zvFFAiHEwF`X=-e4K}aykmWnn(?$r3t0I$8Xsj+=VV6&?-d<- at 1a5}rl<B$)u>5$Z}
zxX?LBo1#;r($AQu%F>A!ESnQDuBJRB*Fp{@)v+H;r*ZI9 at 0ur_OZf(3W at eB~@<L(_
z-M>9$C_t8wBaY%2eCCjJZ*+i`H0ac-_9_uO63?*S=h@<F$tBm8kQ~R^+r$KR0<)q@
z)m}^9p2#N<PSfyfoMau0(u=6WnByQToo_|hMiOADIEQe>M-{`BO+H>pM^+PlO;OR*
zL6+=FC&YI^BPPT=!rF-N5MdoioKvz>>QLI)77%?zK_6JYF0Fir!i9VS(<!)zC1FIK
zuh`cC1)oom{@pS*p3xywb><?D3s3tl$@)vH=m3YDU==c#4Xtz7MIZTS9CLV>Nt5s0
z%hcH*j2~q6;f<X(N2#GmI?I7ki47(AWtVPBCZu6lsb#o005*~&OA1`#7C7*Mh7#%u
zd?O#FCfkTyrl;QEcWo;Deq%)gzDnSI$#}A)NO`=-ve0A0 at wy3z6Q^W!$e3{|$RY#u
zl$URHrf4*VGKcD|n%0)7cj|N)vzAJ&jtAF{Mh9Y}M8UcOcPuQZcgH#ap(NJnT4Drj
zmZ<k2%+dujumWyh4=|>$1zhqxK~Wd`2dgWP)zU9RO`zHqN{JW+3w<+I7Sx;JGzaq1
z8LGn8&CAHTk0DFrl6`19 at C5ut_H{J3Y- at vWkAix0TU#d6%$Rv+OLuEaK|TNEovF8F
zXBWGEDyTQN;hAAQWN)`F9@&V>v~(GmR-&#%U+r)YoMGpbX&HaplOeSLV(og+16!#S
zO^xPJ0IT9~a&Uqi(c^S~sYI%%xWGWvkQGgtz4bdk%AAQ-_Cs)PVuuBUbvn3o7GPP4
z_E_|YT;&D>Vxy<3#(Gl?TPb>RY7%MeiC}fxtvHc_u=mibRtFkT<o4)I1sq+-8%2Pv
z`@Lu?IGKye^?SDc^2YESNkLR-gEA=}xwj-;AtBL^xAJp%JHzjol_hu>+zjh_7mUKO
z-Z2$+X at NVv9-?@Flr#5xIIURhDzm>|Qfa+S8qD3NP^rY=EumwQ*K4ItiyVVHXUT;C
zYk9JCb(>ewGHpF8f3q*t)&^D0EtS|e)KC at lWsevhAoaG&7(mEvA*%)TvX>pi!VGJA
zxdTU-xA8I#jmZWJo1k)rspXDmzG*6AaUe;z)}-WE8b{0AffV=9CFmV3Hl6U;6mB#V
zcvXIxu8rhxMS1zA%x?eV^|aE#bo#g}m)rhVURhqf(P#f#zoEM7<oeHX6Fv_Ba at n?D
zF0rcZt!jQ+gE?Iy#vujB0|QQ&(^LdMBltI@(n4pT!z1>!irTwe&FN^KwLe8MpG$Po
zRl|HqgTOGHMU{{~<-*uBju6~16vW5&t3u>iHg<S`_hD$r6eY?9C}UGzS`izQg{ZF@
z0s8Dkk|Q0J at EI3{M>>hA7^A_(c at UwRj7G=PjI+M?l%!7RF)R>*khY1Y4(z#Ab{se%
zCTuySDvU{UI3^F1NdgZfN7aVtFuKOp(|-)4VJtQjkE(_H8+a at UYiWY&Yi)W3Ea)eD
ztJ7DTn)HmzLsWVZhNa#5lqMSo&^LvM%L(+-;sz^C7+1KdJ)BW7ZiT~~i8m}5A^hP-
zKsB9}N%IFaw!W9VVkPqNiw)K08+xCecRaZ)L~`;GWeRI0%}WyKO?gO?lSy8V6v#gQ
z55pJWU@}pPKgU at y8V$1V|ER7;<S*a&zoDY4{N(t5oMg{4`y4S}oO6y4bHwRl<WwPs
zkxxEfAV%g2 at o#vC_-Oq7eWwetVS#?WK)mlvA%1+WKtwn7{cIur=3 at Pf@5_ZKEfJ!K
zVB#OZFdY1dhB@@tdrePIi~qvE$DW-Qzj$U^{P{1_;@8hji${MmExz&FY4OOfrp42L
znie1Z$+UR;cc;a(f1Vb<M7sa|i)rySq)GgrX>s&N)8cL4o)%Nc`#9iS|K(}%)Bl_n
zE8jCMzV+m^==jvM`1~)Y#ppjz3kUDM^6P1F&F7{?<%g!l^Zzw1{`Q;G;@}si#om9I
z7VADREk676X(8^L77u-YT6BJTTHFA5UwvX)obkZ4X#K>r_}EXU#l`QQ7N@>_TCBkD
z_kK4m-t~iNQTx$paph;H#hDLIi#ptI|Kzlo{L-}e;^Wie-;jR}V15brO&^~Y_kCwt
z{OIXv@#G(;#kmhni+{!U_Ww044t;T2d>c6b;Hhcxe;%6_<Bg5tjq$j+zN16jzGsj4
z)I$%6?|kV?Vz{bGJn{3Ni+A0AyLjg5r$wf{LnIp-#or9a#f?|*5%0R|P2wy6{3UVU
z;ltuvU;L7|V}D%SIT9B?`ObI5zkc?!;_vUfPkiW2Z}K+A$)}SPc#$d4wHF0;?QH96
zzjk}4Xzy?D+PO!xw{LH2?`pri?ee`ldwTn>yz1(<UDxaum+!f}^NMaEIyyVLL|cd0
z*><@Q+uJVRA-1=RogJN`tt*IqL*tsQO>5RPw=}+DTSMz*LTp;Ixn|3ni)+`^)nAN9
zv8b$4RIRCAwtmB!jhwxxSggHtT}f$Kc?CbOED&N<;pz+5L?rZO7YVU&`HG7#apd#)
zOBRczuejjCGvuR~Gykl!7oBtNd5hJv5T~8KVBr}MoI1fNbLX8pUq2n+uUF1qz`z<H
z!~GZJ1iC$>t-SCEDFVTQ8;BH00|*+(6MV%Z1OxucG!Pi_CEg$nvdB;P3z>vR`~_q{
zgZP2;f$)Lsf#`wc!B at y0h#p8D06|JX!(S8xnFWz0k%2738~jCyc!ONH$Bo1g>18rm
zIvybh at dl5;K_-(BaF4tah|DspzYxVFiSL_+EGAJ5X?@=`<T1oC-eWL<Ohy_=We9G0
zk#xUr8uA_DouvDH(->Ds#NRg!ArBdkN0S&?Fk)fQz*vEcMvMEVF<xM3!iYfw#(mQm
zGJF>XAdEk_Falu!!uW&X2cr+*VC=!r<GV1JVJwpu1~iOk7|v(}yl)!gS at 1&X7#HP*
zK^Eg9hDV@{!4YF)@WKF#@fAZYE)23D3x-(0$KV`#0S3l$4A~g5QGJZp7_Ko|O9-J^
z at Df8mMt%(ZKnajB>gTvn1k?v;4^SSUJD|AW<?j!(eWrfq;9mp&k={htt at HTD^XIHH
z&JbrU#J at Ao5@(&YNSuAnVzGGXGO=XY#p1%{mxz at YJE9QE)#{ZiMPWgKC at fqpR;^hp
zRz^z2#gPheQDnVXT2v#>E2<ag6g7%PYn#PcrI(9E6+6ZGl{>`6RjnejzDbmBY82Hq
z4Pr}ey|}EdRy5(?w)!pNa{SxbP$N1Uwus)wI<c#{L0sF~B>H!37tx(N#8AghG2GQD
z;=MiM;MG@&L)Y#Ww+!qPuihUMcO(vo*QCb9?U|IgHIo)M9vl~k#}Xnnnh;ow7em8i
z;+nyP*xsKKoA*wNwR>(A&Yr&!7hdyP at ru1~6z5<2W^qpc+r%0B9u%iX9~P$#zFW*6
zdY_mV`+ztl_8~E6`0w!VqhikfzZY{xJ}&0OKPl!M_>`EF_?!@_M}(OCDv0`BAzt${
zA>QzW5O4au5N~}(h_^i_#M`HYc<9eUJp8<v^RDN`ym$RcEO_`CvGk$eilPU9DjFX6
zhPd{De-x7sd_=tdf%k}e|Hs4Pp?AGYy!XBD5g-2GQSph7epr0^lOGfR at R|Q59{I=5
zi7$TP5%K6(zaqZ*^{<I<fAbsS+u#1S_zrX<`uE-Meph^t{(bLz;``tKzWBipejtAM
z!yk$t{`<d+fB(^s#E*acWAPvVLI3_k{NyJ;5kLLuPsPuE_A~K+|L^}5zxc&3#4msO
zOYy5;{Yw1mvB$(?k3TLR|MjoMukr7RC!P>b{N^{}H~9D4-~Lwo_Q~IhC!c&${O)(Z
z6Hh(;lz960PmACG{`cbd|M{QdKk at GmfB1uV=9y>2v(G*wo_p?D at kjdi$LGYK{`4pF
zZ)$2v(7!+b`Oo6{=jq?`;xB*si})}4_h0{Y^4|+Y14tN8zt<0Fi{rZ<ec%lez=L<)
zJN3Y89-g}A4R3qh{q*YoJ07H;i_ffllz!u9t~{`2;o1WiomqU=B?qRa5|=Efr1x`5
z=G;NQl{@OzE$v-eRM#`Fy?M at oL{-C%<@ElNvQsuyt{=E}q+{#q)?M8fE#0+p!<9?t
z%sZ=VYXyC;C|b8*!2&UNw4rm(l^1lkU2xTfx7A+V)6}!;6)0tDYAAB4Q(auPYHiI`
z^RKMg*f+m>X?%ERbJ@~e3mCuaR<GW4+wBX=FIl&1XXo0t)$h7`Yw=V?_tMVoRg`_|
z)rF-C=A2$sw!ETyS4+v%z!kf8o;fvD*S%{og9qY~wU at 3fx_E!Ou4(DO^>5qUQos3c
zrp9Ww)^PTzsXGrJI(Yc-o2TA62A8fAM-ChqIgpur=+ at D<sPFi>>CoZB_q^dP_doo=
zy$?Qc_noi4^~NK2KK#yingp*)XAVB_szf?7F>&YA9g{b|@{Whz`j$7p=^>rqo<o^~
z_fFxcQ6~NBsXNBg<7kun at 6}(YrXIa1eekVQuREBTNZ&Sf=fU)iQ}^FC`GEU<>J0}E
z-VHR;6X{nXS^D1BBoY>SQ&SI&AG~vF>h8ou`c}Zd`R4S&o2=Zpy?OlA_<Lg--(NLx
zLppQle((1?#$SaOccs%ePu+U>P-dK)+)DC5=9PGQ^rnM1K6>kGGU>zCCwY7Gt;9vI
z8^7WHyWV&(eOKW78*X4OOCNdj)N2yA20l+cFv--qHFNLOs}gqAb<*4Jr at OnyADp`R
zHTs?X`^I}7edsOkeCW^vQ#XcXpL%rafj7SK4UgXT*0%<cV>l1K`L1_9I`z7{?`1 at 7
z(DMF)x8DC20J+0$_Fx*kL7EeIX*uxM`t|B5az1dYJM}PV1vR9X-5U&Vf0~-Y;2FgH
z`9J^p>8GFi;~)QsPg7HW`ppwhU_8YAbI(5e)bD=x$LF4V^0&YF)1T<8x$yYg-#md~
z)V#sX*2czy)vIrN<ttH^{r>;^+~?M=DQs`s_UONTbw^uU(aMXi?(6y5zkPMX`VD18
ztJ*uSC|h at FbN%K=zxHo3*SEg)t=6W7LTAM-x4zPbbMBlu_wL(w%4w%TC9vOTuD at Bt
zKO<Uh%Ix1OHpj)ApBLrV4E1go+pZUP|LMGQ7KyP>iM{VVYyMp5FyH<5H*ZdliYx9B
z`#-gDOPvj;b>qhOj*c!o^US^b_8p#_M8M8>Joq5U@`cZST%<lP`v2$N?KL9ycjCj-
z;`L8%+<N)^>TdCY>5fgs2M*mR-Z6d3mVr~|o^tA<B^RwK7Poz0T=Vdqx7}#Nf9>tJ
zU%zwbYj*9bxcK7YrAs$E&P8XOan9Lif9LC8T|96Pj9KS_;qISawPnZLH~vP9d}LM4
z<>H~~g39`5e)Xe^yEEe9Y4OIV&W^w5)HgjPj!wU#yz$Ym{EH3$f4=8Esmm|Ft*`I$
zEn99H8{602{lR4N+RdAHUD;FDKOz3d^!y7WnAnte4#ZN|i+iT$U$pj=J0BA@`~T%1
zKl`bVeo!R-QS5u)eK*F>-q<7lZo2H^^Z)$kDI5Mjec=o7mX`R|t=H_^_w!%<>gT`y
z^_mqc{_fzxZLO_|fosIOr%xIGjJV;OU42(gKlkLS!8d|9g!45I?dzjS>058VUfllV
zyoxSy<jZ3CV>hJ6Y~Z;6)#Hy}-O}=o!NH=7E?Ri{>6a{Dex$wq{Ra-z*4N$jsvE^?
zpAzq%7W+PMaQ{9ee#hUwPTc%U6biH})~=SI&b?w%{LK^MBhzAe)3^TBLmZjl$i&2T
zJ9eaddM5h%GCe)<_V(t>F8kQWKKA49ee2YYTb7KzXHH%0zPJ4CfBeUfpMUNT4Oi at 4
zl6?QESG}R7FZ!EbKL!Xt`_@<1T>I+N2OrwdGb{o6{z5_h!N33e_kZ}qZ-4i at xWWIw
z|HB`U<}ZJF{s-Uw#&;k6>gWIAvrv+uBmd|}KLW!)`sFWt?$e*Z4PHV~hCce(&wuva
zuYdKA&rq%$*H3=>(;xg0DmGouJ@*{?^|Q}B163D27xEcQi at u2)D9FEi^2x^^fBfe^
z|2dRz6bcNHMqWAKL*s@*53Hcx1I}ZQJ%(N>-vD`BfP?Jli9j3bJhXV+1OI2Ce?RjK
zlyT_fc+6G=aK<D-!k3Z<F!3la6a<_le9STMh`&a5p_(#FHsE*<5rl~bG6H{~gg2-W
z?g1YK;XS4tc!^rzB_2T>JOVP_qeiGQ9&=y72YGRU$TFoYQNjm7 at KP2E_&^vF8qAwO
zM$jiWWcd|1pw at sdNsX5%2oNNEOr7usG)EfHAD65waL5O^OoLp=E=eulfDV9z3k-ud
zXm=EcsT<yabZ9b=D1Z18JpeITo_gvj2LC-2jhCne7+7)wFhP2gGM^ie2v|u{%k;9{
zK{QkZ_ka(wBMk~gLHWS+r2(EG1wfhiXj7mHnt&9j&eKmnjp6_w_a;sLH{c?Gvf(2y
zprNax6X9O6jco4x!J3pHkrXWE4Q@~)&_s43v<{dmABMLf*!So%KCS?xf<#h100B`2
zJN<0$L1BmskO=YweFw4&H{cnGGaCAMkOwl7_yB@}aG^!;29<)`z;$fR>Z>D2fz|{l
zATNsp7lBG>0{Q4mKifwj4^+_#ppU5zdJ~G9EvWp{o3irH at -j_nCIWw@8=9wJ30dsJ
zKVwe~@uzX-qQ&AY*ig at 1yi_c`$PpK=ED}y}xmaDfMHFvr6c^WYh;tjG;;fbfVo7UU
zthszhZ0xvJv~=wjSNH4^!+lqY%#~M(Td{t0M=U088Bd9cgGa<*>Nc?@eZN?o`Gh$A
z(Ek>5Cch-at9~fNo1cZf at h@V|+nyKm at 0}9o-Twzs`;H%q#6zDK_dfhS@$UB?74QGx
zhr~xd`uE~vAOE=c^rt^9KL7d8i!Xoq%i?Qa`<nRXH^1qz8)B at HwnNwtA+D9}(6t+q
z%@DH7V>iU;#kN9lJKG5{S_*VDfu79vL2VmE|A1ZaIoJgM=&=W)Ybtx-^K1`<Y+;)q
zy3R>^;0t6Agorvx+vA`C#3&>|@WL?gGQXPFtu8Ftp(@d^ws1`i-mEIVtY&RtVe#r!
zYij7zj;e^do7y at bQ|@AwzHZ*!Q_hK;HusddOCq>Eb?)3#&R&Oamz_QLlv7r5qFQn8
zx#E14zHq^^3+Amlb=k6obC)bwcHz7Q%a(~n%~MnB#Ij`z7Rf}XE?z9u?bQ1DE0)bY
zf8mN1E5xdKD=wO|^nw)&=gvRv>?L#YW{ph0_}s;FPo00-X{Rk(RWmhz`Es#{(l47g
zXZZ at zaQ5;Q3+CZkxZ<L at gcz>X^B13Y3SHuqMXigLtq}8<tvGeXiqlWKV8y&u>&`^p
zi<aTf!bMwT`nB^HFJ64^x#!}KI3Kv2E|xDl`?M9y#qt#kPn%i=$nzG>U$J7YtnSoQ
z11d0Q(USAeK5y~4a|;*X%ZdvYtzNid;pr<bm{->YjOG at ditKA8_^Bzt7m=y$n at +=T
z2_PZqlCDJ;5h7xBN8MSd%fb~GoVH%4=L&-cV)5d+#q*aV-Mm#tHxS}0#FDP5HORkW
z#eyXutGw2r!f2tn=Mns+sM~T;)YQ7_0?N3keyVE;6(w|&qA^ZGZRtAa)N?i$E?l;3
z*(qzwt2UjDn}v%iTc)<r-TbW@{M6K{^Uq&G*ZIY at 8#m&2(NgTM+q8PglBH*_EwA1_
zwdVXKD93a4w6=A0bai$0bnIwtZm8X~zPftDmfD&PRpsT?EuNI}p=T5P_f&1#w!L*n
zM^{fzS4aEy=Ei!;hcNRstv!J(TY*A(^|t29%Bt!On>KB#+c9;tv3_fF^R||)b+z at 4
z+gdw3dD>8Nc~#5Q7RraKdfU{|4R}+%p>b;JXxEO`ZQDKRfe^knPi?1s@^*?|l~-<~
zbX~efnM at 7ztqJTwiEs=0ZKfOIvW|xOKn-?O<0H!MpkJiNZ4G{_+orbHR+pQ`HSihQ
zWq9P8BmGfM-*B`Z7}mMT%-v;xM(=wzGW>?4g#U&XsssuNUPPf9LX!)q<n)zWC@^8U
z#S2zGkaANOo|#nTmmLK?*K_hsfy#2Ort<QQ?R1Bm^78tguJz at c(7KAEoW%172yNi>
zU1+HCx~`7u^-L=ttGRhLmv4|2qZ-t9ZC_8MDX$JRmCn&rzCkuR6;RW)wT>G*yt0(1
ztGc>X=B+C)-`rl`wjJnasVt}4Ql-+jR+evS-8$8py|SFXv0Ar#P5H*Aj;ZGGmX$c*
z?~V-`*{$X4QB+fo%5tW<29>w1lB&{}rDaV4&BSngZK*{1+700?s}oJNH})KDZ{ND3
z<7ji$wyCa7VO`xMrknPoU0WL)8XI<Wt#6*%R(I6%G5n#cXX+@@ZQeSyRZ%xQ9lt%=
zw!Lm^8*$NPm-U2ky+3bj^Y+$e;+WRUcFa&&Z`Q8He85|I+GYjb%J^d51~sCSZ(d9a
zc;~5VJq>%D{nyLX3~&<dmlOqHKl}REzy84we(>ngqcFkxY>)<3SlYh$#V@|=UGMtH
zM?L~Gs?7EN_rL!g?|8 at OKKD784e;^{U--hq4?hezc=O>8fB3-%AC!p=5ZnMhY!aXN
z#3$bV_O}PWA^{AC)fE*NU3lS=^Uf<SD*ESt);k4lC~Q+-zIxrF3obch$+G?X_kZ$}
zpRC+mFCQ0OaB(u3#Cp`SRcqy&$fadVE?zC~+uPewUjq!7U*2)W;^nIV=d7hG-t?w7
znNRWtCd~5|Et=@)!2g&4z5eyD_a%^z?|tuk&#2ukCLR&dcP?L5bobqNpRsxaJx)Aw
zN<)0f@|B51V&N7}kp9P4IBV4X#3OU&o(i2A^ptSE at r`fHJ at qu1ab9)b9^QBAD>1TW
z&07Wr?i(IHbHRe$yLbD(%14;PFDcuCg-U=r at 1lZRZn@>O<^(<R|8vhg at 1A?^Ilr)s
z9`E?Y8RstPA4!M<e~(9rZDnO86zuKWw}X;rTto|=^y$?3XtH2&@mLJR0X{{`mzR{3
zAnz8w>gwu%|6AYsR%v&ys9G=H at +|&8W#0U22ZqI!cT2GJcjA$Y3NKxB?qW*71%cmM
z+jfXMAIBr;Fz at 0r{6GJaiUq5x=Qod0mRr7c-ZBS9_aHtW_`nC+tEzy{oqP9QymaZs
zuXu&}f9cYBbLWDu`uh4{$hxvWMs&V!`qZ<}UtPLh-d|EwO2F@%UQoJiW5YH{lhd5a
zhaP$eWv$%SFTc{?TfQZ;s5kAm^!E1Jt0)GsuYBbzjf at Xa!vB(&B*o+-uzKxlU;E12
zUn^;XqKOAUiit<I?zm!0{bk~wDLl at b&o5DQ`z>3yZUy}N9(wngm!~B%STOJ1J9uez
zjl^fcg{#rT1_%2Fw1tu^ky(7sIah$UQ>j<qc3bPVZJ?M$Y59d0f~6O49gxrz4 at BSD
zapg5fKlG6^FHhn9{N}{jRXZrbfxo|C<r=Jk!0fkUXQym6An at 7Ges<}a3QF*nXHlas
zed$X!8uoovRh4AvMQ5Igo{LYgGQv=~Y2!xu{;Y)yu^3WV-5~LiJaB5$DE3RC&@1=s
z0~^av^!JWm%s=xSumQ}HuxwT}cM<_79)Unm%oBZQ^_E8T5gP~l-mvuA6)V8fwY9aK
zot*~`9GHLVsS=-pWy>I%D%Wq294m_kbKZ5=U9ihxIc05ApNkJrntSR^H{AqOQObut
z`f*J_=H&aPPv3MkI+_szHYV~O{m!tobHN4RYWyv69NAv?3=N%o_SsnP8crT^d6H;8
z|1+QY3~abqWO(%(-XfV<Vs+ZeN{9}*rUa};4jv+Y2A=#s>@olJPyZA|!@PmbdHa?v
zhLi1^XhTDJadB*L5H{wA-u*seX%>U{d**pdF-E{XjUfOlTCJD2n@?bA^h&Hp!P1OU
zu+G!AW2gCARIv%;f+;=p=FNBCefw><-E!lNH%?CC|C_GA9{*1sI`sNG?s(*pM<B+r
zsEh0R+wM4W+iONAZtU4JFnnMP$jA%K_MZ2D==xW`?$E8b$C4B1cmMJ)|AJ3g_X8`U
zM6}w?ues~s4X^CoJ2b1cIM~1;ZD276H{t at d<%Rcn#DIveXnOQYAPKU7EwOHi3tR+w
zf|rn=xChZBs`w<S6iSB~U!q);0#KkfVB*3f2##t36W}9}L^51J6_1#H;46^Cx&XEn
z10|44;t3!UD<FyN$TA}W!30=pkU->LR1o-}H~_~54ABap0PsY)xX`JkqJq8#l+YZ2
zfb_VK5ySzvAPw*Ywn%`Nzzr1%79IKqjfFxDO1PH<M{}5$_Kidspk&{dpA6bSK$e29
zpr>qcN$}9pgD*i<*<=PXYKmlN6dO;25?;y#NCR at 2_qYK)QM6rzM9F at W&pp`HfCWql
z8JWv|Zzn(l$pjD!<~?rg5fcrB>}axM;37~JtzaM<ngb at 7$Gn#}K-eSz-<q$0fTjnY
zAS{?i0yLD&hb(p)yQa`H%_kqXqjZT6*aK;7d_WDn1bdrSwzq*8fO*~k2UAn at 4wDPi
zhF~<GBtEieq%r)14v1c0^PwS^0X3@|yO*KXcBA`91o{|!Bm#H?&VdNB(Kb9bD>UrH
zrh}u_=ojV_a5Hp}C4!h}8eAX?-T)IHGDvUN$bg#F4Z4*q4h;k$Z09wfWCAb=iUZCP
z4U`TN$xrx;dta}&LFIpMnhdq};e(<jDP*BwFuXzU1CszHUmrvt&%e;zDP=E1(X!{-
zi7^To3ZOd!AM|S=V|OSd0B&+LvGX4Dy=)iYgR*=;Y!ZRt at d%DZkM at c28C4x0*xZjO
z1r@}F5ipn%%_K<#GNM628ITe980JBDJAO9ym5W{mfd-}2_a2WxQWgycMgmC++(;x(
z6dU`>#aI9?%_iriKt=~d%YvVg7bzt^wiNZjJf25zBlstqG?TIsY-|W9Sq at En0@>Jy
zKe!YU*!NOCf??1uAfRC|&=d5 at hJPrK*}g;**h8u>I~WWo8Tz2_gPtdxjqO6wcTj5-
zfe``sxKMpG2N(u#fGrqaN?`Oy^r_=f;O%mA+ye&`jpERWfE$`m{smTe3I34`53JC*
zNSOoFiT#AqWm}+7Q!eC>WElK4jC5kl^+7|?Qr4jtqfp#~VkQl^3m5Rjd-L*zzCp#&
zC=kD3UEJ8+8E=3O-n^h}oPPz;h+wA|lQ=Wt24r3$#F-J*lL?NW0{-=|lg}?z3S{^H
z1 at G$3ZSV_l{1<k8<naH6O&IGdeEz at Imsgzh|8 at L?&jUhX+fWS!p`fOA)>o{rq?kQb
zB^4DV6`P!j^);2{HP!2{aT4+C;5)x?;lhP3!#E`r&1NW`NiW25Qs7#+a6#8-3^6F2
zk?0|c6fv4i9-#0S6!xMSPSPo)bChBXlxB`(oMg&bxWN0G{AW89#w=aBFk~}$9<@7}
zWF`u@%~?`eT2WD2Rf4ea2%J1p2H$_f@%^Rg=-BvZOoyVI30&y+8Tx-!Ri)4WFKt6R
z8UHJkmM8ipI}1mk!r8 at tbX>M^B!j at WDY45$ihJ}rXEHhA3`P?iH3re-qiJ{<g(!f}
zal|Ba#-fRd=%_bOsk03-00JW(OF8LSW at 6j}L`H{ABhCZ9P(V7sAyAE at qi|uHiXmFb
zA;i^!$A2ewWPCIlPsD~07||zbSfoS~Lx|I0)q&s~jvt6SwIi9#cuiRuJ(Lc{N1~}x
zgbk}NRb at 3GAS#7jaad}Gb`S(UtEgrny0HXuw6Yv8YN{%0DyqUFUsA!n2oyn~UJ|hw
zf;$m~K$ql!c#J7F<U}VRFcX>hAXAnEXe=?9njFu-6>K_<c$ZX70wi<cu54i;M?e at D
zO&%UbSME>85Hc(y1DQp(AheCMtFzD9+1JzSY-?+8ciK9f-tBEY&NjqCY3l6U(bnQL
z_VsRGNua<R1iXi%!BVs}tC?k4aT&o!CEONIr88(h3LdMzUwY{l;xNRy_f!PYgI!z|
z{K($jh4H<+BUI^riZ3jYmQ_OxDS(kFQF#Pziy`E3IxCP7#Ice2Ie-8^Zc()Hm4|8}
zcoD*qnj$lU<0wxOGLU#|JcU3<40{-nd*CFS5gP>vXKWHt9^w?j2YrAznJ9rV5RIJ4
ziYnqj#1h0>5?_WPtJ?<v%oNd~L(#+_aR{QnO`v=NhJaF8P)uY}2oZwJ65{w+l;Gt~
zP7Gy|^Mh<SU9#2d^Fab-Qp_I;^oE>clhL8Ecp?WDI-n`LayEGM>(@DQB5Dx#4mXo|
zlfBYh48jx*%fNpTpesXC$#*kl1W%@hTym+b>TUMS<3qy;I=DY(<#b<V&j#1g6JrS<
zw)V^HSs`CC$<(Av8~q}CmZ4Z09^n!F*<VTj2ZSS&@}Y%f>agPWFfpOhHM6Kjut4xH
ziMlkr3 at 7%NQP3y+N^MWZu$3Lh5@&tmlnMZ3O~4L{^`TzcZ%>Asn1zzyc4@!<C+Xjh
zFc62Jf`eg?ISOn}{jaL3ykbMOcm7w&Q$mMMgudX{1R^k|;DRrOz$>{5o9TP5yf5Kz
z$EN?0M&MP3Lb(OH&*t(?G72nal;xY9@{NcAUQ at j>Oc^3QgS&h7IDml|u8=CMp5z$@
zJcy+o4m>mxcd$rZW)npb!l*usx$RIYIX;v;oIr4bBRtj*#1I4!!>?56WE?OOa7d~`
zGdhR`NdYyu%2q&3s1`&0Ljx2$u-I9%#z6=lMC~dnwBPF}nT0YPMp*l^3@?D#xUq~k
z8-<4Om&7=P7v_F4<(XHeNb at FGs`*sRF)5&Ya1<q?*nTMMP@{(iqKViTX}?h@;G;u>
zQE0Om6%b6)MpRKlV^LN{l>j~V_m4$0gCj+eGHhnuQ*>EP|Bb7Q%i at uB1exokvjj2}
zT~@o2G8N~_MZpggr2cri-(XnhWKt7Q`slkSpl0?AN=@V(6y-zlt;<7X6(Mzvi7^Vz
z9jrsKLX*znk!Z%j*9;GunPh2cso|NGg}^I4F&;}%UR_%&I_PM8AccUOF`77$A{vOJ
zNf^ZjN0LsYcBHbNf{7L&(y)#`Rq9v)95JbYejeG0xm6c5m^LWQ at j(p6mmx2O=olP@
z{#aK)Q3DWME;U$J5J4PX6aNwVRqse_EY>!L%*ckwxdZ(Z=@hIDnbPsZeuSJH&D0f8
zNW6$s<3u7VxFy1_T2Rm(y3CNoP`vm?YRf|F;o<=Z9mx<FvOTj4pJ5Kor7a;)Kip<)
zjX_!BxXw|UA;Bg_vqb!FT9vp_$~UKhr!F8n5FwG^m{bu+lLYccN0HQNz?^L&mGGt0
z(Kd(Nf|whIClVa6lLORtM-%&Fox^=-b41`&Fi8)O5R0HAqUa1F_Z*I;ii(NjSW at Yr
zu7osYg*Fx&9irr86odvrU!ARO9gW?));Z~<)84kD#W|du7#*Syhz=Kn_J=tP&BK{}
zsL$!J%L;{J&7s6~g{U8JDsZma-qPKI-%`dM^aGz}z!@M;QG^h2Ie~bgKo%XI-c%Oc
zwHksTa&RJ<LCj>sOA-Pmx&<eqIE#+D<YHoMPtn-~g{*%BoJ8c1fv#1X6K%j?4rq@^
zr;cu1BR5)(WKsywD&vS76%E`2of<NcxsS#r`Xq-L3X|w(z-THJo#d8C9wrp%qQ;j=
zT}H(W43=ET>sW$DtnIx!+nwmpkW)J}oTvx*{Se-n5s0hgXeK_M*2U}}O%A}y<Ir3g
zQ{llF;`O36Sp;!8W++6P)ASo?>%58%u;&29AcJGRO!cQ;+=e<A6#`}EZ-{;i$vS6S
zV|!0a at xmLJ#D)7)(FBNAC&3nJDW at JIJsd-nRbFD9o|g8Ord}FNj0{72Q<=@N^q@?P
zkhbgmVA?S9f`N(l1g5Q{r=>e97 at 0T>Oy4-g0ybd!x|$n%Te4vz6NiCmMx`t;&8Sp%
zFfwr%7#X<UU?XGiX2V7%Zl-|00qQhERWe|jyF0tG0ilH9Ai6n7umRHD(%#wFoDGaj
z9EM5H$V7&eHUp?<dtYyJ=T#lqK<Nx&z`9aN3Vv;1b#-?(we<941ErGFcw1zoB$$|0
zJ{4^pkGms1G`LHsdm%m%_`Qh3Ni)masSS_%a$t0>=JB*DQXJA8+c3E^NW&VKmBT1u
zSjD?z!?6 at hk}<dL-7VW7(K}H8Y}I!&g at J5K48@KZq}mX7`08wcIB6J+#!=V?4UES2
z-j?ocFgR%#jGmF?VW{E;O3(Jrs~q&g#;uJ#+3QBR!ui%}84 at pjUD<Ksq+vLzewY~>
zR~9ENW at L|aC{S`|HwI~kBPVBV0STvfY`m95dRR&A$-x6EM!TT^La^?b0Wf7_n6PjK
zdw+Lqe6&A33X_e2+1=9B-qzIE+t%6P^t3l#nUw=6Zx3b73V3id4pVt3<fitvmX54a
zm_Rpi<}lcb<{akPNA4 at zTCU2*S27z#m-Ya~m`;{2o*nT3ov!hZATp;zSxseB`yNAq
zJcbrUn43LyV1CX8kg^;L{*(_ZN*4CVR+PeA(H~(XGg#K~Q>44IuNPs-bGJgb%<E|g
z1zk!CKX8^9&J3_QYYxx~an^c#jME3DAUDda`R<j9D`wE7oRLc1wX?B*=dPYB+WXr&
zdi$?z>F%M9Q(xzhH;ziO7=)*&C1)U29tB*gL%YdBuV~S7BsMr<X$vh^w>0%-R~J-r
zP&J#5d!mY1 at 0PL9kV4Nc!p2P&L6TKy+>{C+(GaRNX at Eqe=B;i02Pa~wNmmo36cJ|D
zrq1 at hogG*d>+am??Bf-geWm-j*UFJ at pPYy6iMU1WiEN3u3J;fNhGk*`#LYNhD#D+E
zdWD6}a18d0eoUj2gBajrX+>8`su3Pe#bW*VG%*V6jyFkR^iaQ1acLDaITUk>B6}k1
z_C&yI2p0|gl@*7I-H~2i>RRWl#|LF%B4qT3Vr=i&SZtNA>`9cyddnJpI#6m+WF0X#
z5(6F$FuElqpHO`u17p#_5f~U;tg%Q|IEWLkB*eKQcEeF7hUiT~(=7!Zgp4QpB`bRq
z0T-gbMzol07Q0w0>QK`!f-a|Ebf+ro#l^*4eKv?&1W}(nrK!%rd<#Qe{E#~ZQ8^2v
zqoZB;AT8~vM{jpui_GTINi}UwB9Vm1rB8avvb%h5eoAFnHh<fM79G-HRH#!2W5h04
zBSQ39*Wwf`RpsMsuzabe)_p9Po)zRlgdav<$(0J|nC}s_tj5`3VS+?e8h2I*%!3py
z8J(LhOWY7Q(M8m;rlw&@D4Apr7ReEsUOSn1W;6y%8jA2$uaZq at 1#GkPeX8J32<?vf
zxy9d909^r_rF<>_S{MYNx;;SWaJvk>k$|bHS~O=R*<Lkw$+Hb-)dI&!{(i_qGR%QR
z|B6lEVlnGxpr){!kwlIL2WjaP?IU)&E*Vc0MfR<8_St%fuP_o2#NGRfeSDOahXSIE
zO)y^0ak)m`$-l%ms-0O#div1}{l}_qu+cOVMlAD9U)orq3+nrN8e3Ze-6gb&c0ruY
zqKm4G6T_Ae#@8#=AxMf=s=2*EiG at 1W*&(7JJV>x9aV1GW0?(C9-o&;H$%{PTXr<=`
z_}buOkqBF>+%ZWS><j7}v0tdGyX{I?3R+uw6wR#hF9*@w;=Mp3c6J^lB_Xvflqq3Z
zL$S|*tdtSbi2R1Y;)rD|)vGMc at icaXO{U2re|RJgr9+DNqI5BAq^#1Fq{m}}@!|L&
z&&YTfCc8KjJT??GK&q(eXgJ=N!6+6LQXKDC8p?)zO?Oa%@R!X0{TRuy6^k|r;SJ^B
zHzTp=P%Nd=*hwM0?MJ1HP@^-AsFU-;jVhITDZQ&5g2`7e#bjb*1x|dZt^hCl<9O=l
zfrQYZ^m6d97f=WSMjBZW4U)l*Mh9Zpj+;!?7060>L9q%p3wR7Olc^7Iq9GNHeg;QB
zz37W%zS=TCp<3lvjWVuBeeFPs*O~IoCacV(%wBtka93lssfNl4e0T3HaK at mv$FZTd
zu0Y>msVsgyo;SI~!>$@44_&VIr&x-%QW_a8-#K;l{#V=@Qkk at +1VIer8G27wZE~E~
z4h}^}Csajf$0YZS=;$E!Lt;5eE5)*K9vuoSAxLmo8j<qvXMC;rk(~1ZvQW0Nslp%`
zZ!k2W66li4mRNP7E)@fl>pMR>Qk=+4IvcZ0UX`mYlT<NG=8k1p0rWr(>o-_<CHzco
zlLI-!ds>{+x>6q^xsx_MG0V%3`SH5dWqIWtn-knlYl$O*+)wIjL49pJF+P!TXdh%<
zfzHI*ryiQkNWot*!qKpG8D`BqosvuZ)EN9ZHdFv5AK+)`8nSfmUb at g3F!d<L1}BiJ
zgVk^<lUI^`<PJ|+tE56+VgzC*e#kVZH7*5K>CCu8!xag9HN8Wp9+Sh4UheWQ31im*
zGZtmkt7J&)F3F*yymnm3qnBK^<6BQEvv7y0{}{HP9>!n;kT5=CXMr3Pc_>w%2N2_q
z)~)3R47<2^BE$G#k#h)>bIv4h35(I#Aq)*_SRRDYL03z!0J7F0dkXE at lXv*bbQu}n
zIoU{CLup0Z-9ye5(EwoQP)msR8lnWC=|kDGtRfyt#<P#%U1%7#Q4|r?q4cjMeOS^}
zKPdvqc{#o+GSoTcdTo(K9_8mOwz#rENzozYkrozpWPgE0XB=%)#6vihFH3-C#0*T(
z{hA}07-*ECIj1EZ+0a4nQ59E)xQSiqRY*Ic11a^($X+*P_R3LH7GlG*w4*t7c6XD_
ztd>#1O<qeHVYDw2NM9OJ`vIsgl7=_KegIjBgKQvtXchtj3>$}ru<no^iD3xS)F=+!
zAmD;*>}bvcG_svGms`6E+)UZ<FyyuhB{8+d8a&+zwC0)sJ5fP7DV~ksLj%V^?tOjS
zOtY%!3q$aIMDcycPx3I1)9oC>a8#Lz1lIeb<FS6W0-JqcV5FgenOKOo$%HdzWM4Cy
zgono<4_G}q?-t+3VvH53 at TT_mKo)VzmOcB9_}Af#5Q*?2Fh*FZ+;(Bil&$|CFDGdx
z4MRpYJjwFe_7G-*ToTDtF?8X?l|<Ggo+iBz$Al;?u^juNh8!qq^s)9l*n=GpOk9PK
zftUJC?vcyivvMx|@PK7^RLY&Fz at Ak>5Y&NUOe-)Xs6!Tg<q}qCOHgW9JVvn$M2!+$
zYQjsoieyuja?wS^^DG*b?_KAVuS39RruJAA(}}Qrlvf)5sZ43_cgkILg1*xgYAceT
zLI6bUr5c^eJGJvZ8UD+ at Vit;lVqaw{lU<9ncc>WknC4iFF3WSd)ZVyb<?|_MVXfzB
z-xqNK5}OgQ**aE(g)?X8BvzH3^`+&dRnFm<vme_t3#^?8&`Nm^0Wa)ZItxIM9#8uO
zcw>Xg0_z#<2BV|c$IQC}C&saniMNSfX)3F-(oO-+%KHZV8F`y3XFOzQq*I(Umx;;k
z<7~0QPSng{+Ide1(b34XJ3$ZU{}*+s6?*=75?TZI3bOzkDMBZ@)T!ik*s$-#_+CPj
zgs_j4xx}doTd8GBB$Z`xtY;Y%GDNKs=UA^bG<Qu=X5G_cjAC1<UmQp=piM at cgmhlk
zQDD+I(F?Yyt#`p0GbvBucsAJMo at BaN6t>K6U`%3vn7GKiiyf`%@{NI+)TG)#5Y}b2
z)|XR#Bx+z^0i{(cKfTyuOBroV2DPM2vf7i!H`)c@(-)6j=<CvUOE%@jT2-zggC+<4
zs$H`z9C at k7y8%Kcji`;TBtvs0QyW=lN at i^!G)V*KS#%;aW<NR at h<fvbze`DwB*w6i
zFyM?jG3u$#IDQA6xHF7 at gH-gmgM%H;A^f8x`|(fm6gA&Uy}Ya}yx!S-9)ksMQ+D<>
z$)yNZ0<oy49%<n6O$IPm_D%#;!C at 1JnWp2Rvw#yk83(vrx^LLLFb4)<({R(y)K)VT
z7u5T66n4xy{|rb-<swYq&w-4TF9BU2y~Nc2*u;jE6xehSGM-fIuF$)~h`4mQ0|^g=
z$Y-r-_yrkd2#TcLTB=i-?p_&6Oqbi!-Mc)r!9Xu}M-Q7w{uLCD&3q(21Pf__vUghx
zwgry0s-o6-QGdC9lFwRHj$&j7maE8N<){umi?aCW4-OErNnStTOpe-9?XFcB)&bcA
z%NezFa5ym(T+iqo2rMnb2Ja at Gaebq9yuLO)hSdkGSOmehNFO$2*_9 at DclD&UOl2z@
zw`}-s4}dHukx3_OaO{rUi9|CQ>{FA+ at uH;D%5`E%Q&W9nuh}gMXFYBbkt;@I1-6$f
zs5bV&6H>={X^C`&<G~}_d6h_<53*##L!Vp$9_scu at yK@IB{IP$VY1<&kG=p8b$gt6
zxVnW at Qvuj>q9KwpM;@}_<bsG`${evCZQO#qhPl`b{AL>3FNH|%1=jv87N_rYd8Dr`
zdF75v(x$X<m2di4Zu#XhX)b27r8W}yRBf0FiZE^A<IA2;G-X*|4AZHaV=F#(ImvBH
zAN4%Sk*ttI3qRNxu21CZx31`?H=y-c^Z at xGV`SqQ>?NlInn}FIo?D(Vj$xIFTysED
zr{c70HSM)o00z9h;6!c=>-gm5hBnj^BplAggj3FL<ji>;rlNyU$V*BLM at W$jCKU3J
zsA)lkR+O4#%#_Ks!4X?pSQ{9PCUC^OD1${An$Xf=OP-gE&;d_6ARGXOQ|DNsOQi>~
zy_VMd5;%T07=s)HI6|_kv!~Z<&F3kEr+L`AW6k_!H}G=+p<hVnP<(lvh|Ed`0h!ZF
zMb4KcPrrL;z?(@LYO<i}J8qCaqWXM8{%BH;8IbhN#Ilmf+sk~_bp<-*59{mnK6`)n
z at C8x^hGxo6mq)A6Ywss`!Qb21nBU4hNxC$-(jSsYDNMTxcoELsc_Otc{>rS1o!r>Z
z&EV{v2gt?8$Z3kLx6xW7CDon at 8(3L|%+iA`&C9iP3-CG{Lyd$Bd{$D9w?~AI<R=0+
zs`x^|Cb~gUqx~J!W^^oHZkGxpqF&8LN+PVjYP0S^3AT5AZODGGla1pOu!^gEjl*pN
zzRe`r&T7o|9x5}x<{FR*sI{vu*R~jH;83CB-yWkm!9C2b4}KK8LM}|eWdnp!7z3u$
z6CK7V?Nq{CU1_9UC>(1;<RH$mr-tE2Dub;~zI{9l#4HFHkSGp2T%07#JMdvjwMoL5
zgA0BSg2o;zn{|t{*k|fQ%`4u{$dh=iju^Y1`Apygs?n^Eqgzmvf=&w7Y)_+GP?UO2
z%GqoWqgzna8FN6%^DMd{3v_3KLl<iTq1$cftB1Vy`8GbpjFR&>=<Jqd?eYUNU}lK+
zhj&Z-PT)>DyYQ9Dwh-BZ24za38dWMtm^?(}sZQJ#c{Y4tJPVcTG9#TX&L;O|3Msa&
z<F{7f^0+g~p5>uv3q%_o&?fX}c{bYu(Tvmm1VMQK$gld8DOcs`yQ;b&yN_w?B|1r~
zej2zl_8~RD0%@^R#a^48`~ch*J@#|hHs2Aw=mOhi;I$9?*Lk&z#2*|<4R|-L!;dpg
z)Zy@^(V-0uc(Rsee^9(a;!o(?LPkZ-RA(y0s&1}R#IiJ+4xpU8tH&)8UPJd_^b9q0
z6VASdocBc4(BA;QX at qxyI4Ai{PC{)qr>esU??+4Vh372vEO7H?w`e!RF>0C5Jx84n
zsv)PgXMw3FHz9f~$G!7G({rFYh#)lpSq at Lkfo@_Py0Z3NeO?<Cp5 at 7I2{^}=jT2X<
zd(_($YPz|1D25Dl;62Vs;GZ0pNy~~uL4zM5by;}fz+{#cRC`cpB_Bc3AP{UX4>Wru
z;9SH=t=)~;-Au?-;X;sDfj1zB?)dcgRLhk}5KF3hR!pU55fUEx_#bh3Jd~g|3A9Ta
zfX>hPO|@q at Aoxc6)`jWcthJeSp;f^`4X;pXSxZuWgiyOY{SA3ZmldvYDnw0^zXKvK
z^Z<L1nM!-EnJt6Jyk>mK-{FlHC)fV!-udwi_?QXenw4-?Ucz;@u4!CkUG%b+Wf}09
z0cPdj$So;%AD4bDZCNzK=mE7b7snpIv at a`jX+uT%n~%Nu*iLtX&6g8HD?c@%?FncW
z{(4;cQek;uZ22EL7KAywAK$z^7tID+rBIn=*AOi>Cw;B_gs*ZTl(*}dY^b^<_S;)L
z*5v$_!i%i)&e|eE`{4qwv5z3^btPVxnA0&lz3~j;m`Yb*vW&pzWZjb9MQ1qmS*sVk
zLsq}#iKPA%dBjW~!!r1cE8EndWN5XN0lzh%l^rX3R<~<rFd#G!_>z0f3%=!eCRJXD
z7S%?bk^jfucK}9JYz>DZC4hi}fTCPNAPJBjLJN?P0+AMy0Aj$+Cc8<NY<9!$h7b@$
zP!tu#UZ08xVi&<KDvDhcyJC5Ee2UngASnMiQ|_I)Wp`6hzyD>w_eu8d+?g|{&6zXj
zoPpy|%)KP#Woy+VcPtk^0Vkr3ROe%PLgYAJi5UWS%Zw#%dpO7+mmCHATTmwD)!17g
z8_O$0#v<hF%!?s$dU<e62DNNR@!hzwaIQtlqteQ{loHxd;N>J8Kn^=U`?rr*61fLk
zT=LDmn9Z42xDz3uhcS~`9)cukE|BORf{T%n{>Gq+peR-)Og&Qw+MG;92oI6yoC5{5
zIgN!j$iJEb1D6S_HiR6?^$a=w#s}Jo=u#1o|LX^DI5l)IgW at AQ8nbgZV;lXk8|qYI
z8Hrs1#%T?ou#etQ6_CML;Tr8cNkTc$+EgMb4`@XQh)Adz&4yW+9wtfS6V{_o#CkcT
zo<Pf<e5mu&FPCIaiF~yQPZnBIbc&#kc{yGt(<J#}fqRJhR{0TRtW|#CY>k%LFk7UM
z=}jeEe;|hq at ndan;;$Khqx_Jxbtqp?Z#`?05P>qp=+{;u(k)c2Le$bi)Yw%>GoHZD
zPz<4CQH4%cgu(5CY7+h^a at z?UOJUR^i+zQlG(4TspG|2QG_niCx?CwQXsSPpGhIT1
zuArzS%=L|6ElL(8pXXFEO$)JB(TV-T$9#yOValgFecnQ6jTbI11pJcG_+T!ezA;ca
zyfKA%2Q2wyzDczN8GjI?b^=gh3+`E2jEPPV?dbKuuGcJ3N5WtM*aR4>Jk7p%CV!1i
zEo%I<tkaa4vvLdbbBh$HfUQiPF{=<%Ka?tLy6HuL7E9M4)I11Z2A=HcO(rFV=VL-c
zNsRO!gPs*@N`}oU{0xz;m4T{pQTUZdm?0yWg>9Rl!XoP5k~H!H`L{9y4asgKE7156
zy!j42F at zClAjx0I2pn*k4b-P>*&%)ll?m9dEx`gZ3jPl>fL3g$kxY=SR_T!#A$!L3
z>2TWy)Uy5ynL(U{%n;Hqrc5EUXbHwJqNRDvp^MSPW!Lhc*-#lAH4uKx7F&ECe%vv(
zHeDG>H$rfzs*#DaTR?8(R-0Mihcu#+sv4-cZWGw75o=EHSp-{m46~8h%=oh at uj!k$
z1jCtQDhShAB0*l3G_w(3(DrWl&5WN+_HR-bS`T1`qHWpYfu9<jdiX41BUUWLg at YL^
z8mNZ%xnWAE&cA4BbTsOWUMv>Hi*^Re+<D}xv9OO9L<XclanpycT*UVW=DNsRqKPsI
zZ@>-vaKyOZru15--B%@6Xk{A%v<QjYH8yyOR?JbMh+>zLHITHGC=Zl~Krx7-*)p(a
zu7~0hxOav(uvQ!t9K at s;#qF(xS{C9>Sa9#4x3)oe8}H8}<>mBc_ka_kYp`fOd@%J7
zb9XSN4wGl>a6>l*0Sn}@Ul%|c5cU-GLjc1rFn(`>5(|eN<a$3s4nL$QK*xAIM<;+4
zu7pB=yz(B5z^l#?gfz4I9->*h`xSGJ8dZ4 at UvF;Ry{SkjyuFLvSeA#k%|UexLI4PY
zp;+OQ#!`DMvxcV{gi|;VbjBpeVnxnLge0l}$;*X;g=n|aO=&dcHgdHx#0T*-VMw#G
z(O+U?=ylvcA?$`%W>AaB*=TR at ZgM)61U1E6`zbA%{-m8lh{K`>sM^^;a_ at jE_(YMb
zh^B#OB{2j)AgJheN9AoOy#s!zfVVm}nzZKEJH&vz2|<_GW%MF|l{Gf`8ApWL`oMV5
zm1(}6$<(74NlIJL`$FcHVH%ja|2Iwp83J?YH8KU62H9 at W#fasJ3lszlliw-sNT98%
zV3BEX6ga#W?{hW%eH;*1<#R$SwHdkpRqG2#7-RP|usS>xt}vG$xVn!nK}1y=-2;-n
zW|_jR7hk%BSROdaorZK#$jt>ik>*CjiUzmja%_Z{0^*Tu=u}(+^P>b!Cse_eZ;aki
zEst;E&6XQM1tKV6O7B3W6 at yI{aOo8UEQ3yn)eDfPMXUzX30ry_<Y|#SKJg&mFg$_)
zr|x9wgsWRY^fAyp0VK5!3W$zV<{^{KLm4GH6#1C{2*1I7H#}y~>{X<X!&w1$HaT=%
zRCvql{IPKK%}JO*r-_f2g+We&Ik{Lhz)8~<4H;t+QkfKLE*jmhM7^S5kvn2ci%V-+
zh4ctfWUDMs1CoFXgRXKkciEVdL05cRKpvZy;qCw(=;Zc*;1d%%ZQ=xBcE#XZ<BJi>
zj-f!d<ut*kX<iIlLI|`1Q8Ju{%56lOS9JE_43SGE{~VEi{tMUk#Nf5^+QBph^*{-r
zyMu&S16;8~{wb}0O(cibfHyEASTw56LOv9eeB|Gx>>ds{zJfpl<=`JdY$ZMr#1mgs
z<!`K6=#z|7DIw03h at m(Ba*q~@n=ia!NV-9B6Ptl-SN>5-Tb+_YX=}e&F`G6eRbewj
z(yaOuukVXte4sD6b%#D{!G5JhH{lsA?@0UO#%+apMMSOs4YL?gsq>qB&>Na0hf7A|
zT7lD}_9WJ at cEbf2u~9KmU at XIyhG$OGcWE^UwTd0|2CXuIn};dMaA}feK;p1M-(cyu
zz2$Z{jufNd%>mlD at LO`qNXP+AN=SyDmU6De1%lt=#ajy_P<zSTYQi_eToO5H1(_Qh
zVog+MLRUnS9)uRSx~i3VAtaD#Aaz0*dqdO?-Z(?H3iuO;23K$1)N(YGFE9vsX>8+-
z2)qXxKS^h&Rbd82WH~m at jd(aL2M>WONq?aUqGC(6AJiwN_5)=p&el+DiJ9rJD<q{c
zV1Mrq*nI)TiC4ChO+Jn(7TzJcm5&0;IzR5DW({FCA|)(rTeSsr at 0s4zt92`Fv;0sm
z6EDUiTQqt}ySA!Zyn{?jYGewcqFpPh{i+Fz{42K52GIeJdkvK<h034!5`N0SM^dec
zFFvBM4325!C}?=e9a;1b%bFdoQfXxO0z-u!CX|jq$aFSa2pd$O9qt5!;2RL$EE{w(
zs!Fm*hHspi%ts}9Fw448vr>C(qWL*hT?ou)N0~=lw*>vQR9zkPJ7t_ZesuKY at 3z?V
zd52A$eKBbFAf%;}r+mwl9v_gcePPZUNlG+#i%neZv57OE<#*!5i3hm_7+X*TEjC4=
z&!$iEAHBCiBAV~5_%G7lD%e(tzo6d+Y0tG?wsma9WL3?PkbCCEkXA2l41p~q5C{y9
zf6#WQ7OGHVwd$s9hYHxcR4D#YTOxH at hAolyi`AA$o)(eOkbW#w;K2=dyyJ=*qqQ}5
zTW!6-9B7Kthbg+JEGZS&6x62tSG2ArjzR;Kb*q}E?7OLP$`>O{^`U1Tu<EljAao5F
z at 8C08p{kwETDU>Zcm<l#H8lmAB3dofCzUr1D3kGZt0TEFjM-6$9lZ&R*x~*WG<V1(
z2WpcPw`*i!g33`QGhri`Z`O>{obHu*r&$J&Kw!E~1e+t at jG0b?_-u^O&iV(s(=_SC
zn<GhJ2IXUZs?5KIDZGME64lK6=aQrsq`zA=3o}k>ib^hY(!;l-day9WQ|7N7+h|uQ
z$GuF-6q*<$P2BQ`L7bjp+2#HJQ)x at DxU=zEoHh<`Q|LU274$6lr!2vuPn=Ga($#X(
z))66WYILm-^BL<Zp+IVYPdPR&q!~pPtq_o5e1=8}OQ^D;Sty9G4PB=(upl&ejg}x3
z5-vTQjT~T0P*lrLj45uidprz>yIHi2T1w9(&IT3~UzW##mN7Y_fm1fKE0ME_t?XAw
zY>W#^-rC7g+;9a#VggD&grFowio0lPmq3N_+6L8EMZy4VXtCoZeds}hg1Y0l1py}%
zb0+5&=8~gVbUZ_wMNVG;PC&rZ7Ry2y)Yd`j*5k{%3;eup?ey352Dae!^U1zJ%UKID
zb~KKJQ$#}s+|>)~;I<qG?C-$w$uDWrT?#_4W8z+V(`yguaWoniI`pw^I>9`4E1F2r
ztUNJz<226^_z0(ak>>t9xI)|^UfRe!03zj>gMeI6F8In#j}AbodCSGa0~BQ7eV at G?
z0z<%~KU~Q at t+>!OV|H%goWlI#T*18#{?$ULIt&+u(mREK?taW1P^#>UXsu)tJE25z
zJp#hxQAn6g0%AqGLIiq(g3BaY$>&_;^49q|3^XzeI5(PiqJW-*rg(o)xzAM#fm!SW
zoj|XcWyLhL`U^ocv+4McqN|p7t at 1qYQtfJ-Iy^-#HlU^|{uScD1)D at 8zn}!_Y7;>?
zU1TJ`!5lBIWFkt#&0<3ca6U$n$s!D1e!_7)Y!MDp_}PxgBb?>5`^3=wE13C^t0u%=
z2<PRRdrb`x5?-Z9;l6F!2^TCrCgOv7j?w!mJ9pKfD(rKx&V8%%KnM4POFd~0NsWF8
zhG~xoFY${7gDo7;xLZ!&Pb1Fz5J>!(3a{?mkG2ep9kD4tFaiA|BSpkqW6t*EUU>K9
zJcfgY{|Y##++wO(RpI3-c3uob(9Y9eYJ<EkTzmsMKJ;>gA$}gF;#r*ub+jOhgvkPh
zqvMhxEKVjJ2D#RTEKyB_M<tWCV6nmJvZbk4Po3L6T-8#Tl{ME^R6L^)l{uL?DoC!x
zJasiTU at W}A3|A(I4oVgUmp8LGTt)&5OPC)rUOj<|SZOJn1z5{+!)cPEA$Kw4)q<}A
zrcmOVKM#&M!F1wS#c9lo$z)Ht7NJi|5?%B8nK&7f={-;zEC$n1Wh at BfD)|u+m?x2<
zWY8c{L&-i77dSAiI_yS0C{?ns&V{lqRN#RN0x%d<0ZpfnqH(ZIrmGju67LL99N?}}
z0U&cB(a263y$5J=qb?Ntq!<atkHJtUXfC199#GrvMgz?Bj%Ql%ju<oxye<!1B&Wdt
z5CUc^VBj}K`Nq-%WM#&5WoW`srFaHx`_;2;oE$*b0)Qi(=;FfHa|K;a=&On$hi;M!
zg8YU)G_dHj<%^)2Iyr2#h!Nl!EG_ktZoDBJzLSeBXge`{fxIr at 3skg>L5$wX&&i!$
zoS&DUo1;vei>QF<N6TXpCKqTz`qg&@b2IJB1eFX@$^p855pB#4(({<X_91YHtsn*j
zLr<c`XM{VOF;T-Hw8Ivfu4bVblmQNG!bBK#O&A54h}%t^#mrF at np6c@MMZOF6y~V(
zXZEQni8x at 5Aye2`Y&0Yq25}7en`Aobm|r#pjtbk!LujCBe<cou{15(tWQ%~;;f2iJ
z8kgG+nims5>~LGD-3Q4f^{#S=tYMm2x3548oA-h<;S!|PA0vB-Xze?(mgj=90pr^`
zA1{rpGr(uOLn#xPyv&#Ye}H|p$5~D?v-Ll*#8ty%SYV{rAo at zL{!Ey6PJZ!Zo!Ss6
zod5!2(n6rHh6YQt$T}Ett79JphhgjGi~>v-)j>qw(Ufnf<{D4niwG<#PQ%)+Sd}B-
zZwd5J^W+Uk#m4vn%fP<K>vBLwQ6(f7!IqdDm1;#2XfyiXXo>isX5o7*-mC=XQ=I&x
z&RXZan4%D}@NFy$-v(LuHq62&tGL{yEK6#SIs`YlGa3EZy}&Pe=GOD53XQIz8ID9D
zv6zzy$16B7A!XDAQ$oiU{hHva8C{0N7?=5=*kX;$FvZ`un2i;dSR%g(hFFId{h45=
z30=upk-r5MYRlAT9Ur1iE~`wP!jza%-`W(<`W`J1WQlNHI<qFc`q3>qHp6@~`jnBb
zebfFDP^z~S4XV<_mITGmJ+3OU#eRqtiuzt`rHyW;1;v)SrA+(@0cWANW}Y$*O=ISV
z at 8C+4Gcn($-6Cz6bsXlJVmsm+&2c%^%{b&I=K6eIUo3bSq}LD)CJTWuJ)Naa at doh*
ze1|9Vi-ti9m}LeH6Jm8R9jJnbK=KTL19TP$%rtsKAG*0!%L~Cu9Lg at g(6UltbFF3U
z3WgdsH&Dt^MokjRPjIiycsUIZU&0T*$goW>pOHKuv<>}l^g<ANzBlJ3w3YlkW%`U_
zaGd8C6&DeSMdFs(%d3gkiBK0%gYI5PB&&kjr>f5bL<F`|B3nwssR%_2DSDwyL*CMa
z;}$lPV7zOMT0SS-uLLI%Fn{CCyu3L=LK{xEFLI$3<n=%@gG^Q4nBtN;NwTI+RSF98
zXXj7NodgAhz?*<O=SE^t^*^vztx!()Vdj3Oe<US at WLuS$Vdt7+X$%l9Z5hlGWZ4GO
zv$6kwF)ZmFO*vZn5gM~y=Vw81t%CT`DQr}@vV3b`;A_^s$f{cI12!d)4pB>v(3}c6
z#Kf`y0d^HB9>FnR825U>wpc<2^uUL<f%fIsA;T at Ncq|907T^z8YQ27XQ0y%)ud8)A
z9r`ZHXu$^rl|cc!Z{Dxem|i{#$DWvf#L9)U!!+HhV$k=R2i0JCh!_;7Q6dZ%uaLV$
z4C}6pQFE$T_em}dGh2qWj`-1u(+{h at Oiear>DVyTAz|w|KMzM}@pFDhS*dztVSdP8
zUj=uQgE;|5D!{*dX{LF5!r{B9y15wOwJVY+gztsN;o`K=2jq4**@9)1f(yTv#E>i2
zz}P5F7^?Ho$1uNrGuBOAj}!qVF`9D-Ee9~2=%ua-x|Ae;&sdW1rlvho*-)`(p4bSY
zg6HeJ6;W=nDgyaAVrfoU>2Rf#<QUlS at J{;%hgFN@!^FJ88Pk+fVwRUCl#)YXKdG~0
zNp|hjO|zA7tLAojs_~qQLnoiYA%PmfDe9zf$|=H}Nw3<Rv0HWC*<N>DjYpj_`>LBW
zz5$#f&%2zw$tSK3&f11Pa5XR at 5T5ZCtUW@w5F$rsrG<<EVo(G*WG%&0)>18-5#PW`
zT0vo at CG-;yHY6}vBL-CEQ9H^t;4Ii^0y8&uRP9xA3d<v(baNdWqwzIjFXV|bHX=(Y
z@|QoEv8evAkf<qbIn`c3o;JByGp2}yzys;Vv!8XBU&gR2P^}xxs)dS1a7bv`gK!Cu
z&`8CHxO)*KRun?La!)Z>A7r9relSnx;#xNxM!=aWoHrsyQc7Y3;e^~74MT`lV&-^k
z?2=K25qJ|XxFin^!^y;e?%7N9mP>g^8p<z^s97e)@zpzL8#6w8sU^l|^laSx*-I at k
zzQ8VxgF$$)X>c$rQ6sxXG>u@$EX-)ehC~_#28cr!2s!I?X&jY16-sm>FRE`q;=axi
zD*Q%nhvTbEELj+7i~ugIQa94TXnDj5$2uWl=1gM-bG~}tabsYnZz-W*)&_1g%$(88
zVAgI|ZVb%yt&lKl12-CGkulBSF3c70MQaS~+M6Namw~XJgCGQyw*_U{NIP0!Y2D%r
z){2$sOzl9jev2!qx?G^bMCgx#MXgCJv8qAR3 at b@V3<U~N1M3Jab`;vy7D7 at fANdvR
z0X8y_6<~-sts^TcRV}KX051U)2DjJJatrk?x1-$db12|g$H-!ce1h%1omu?k%42tf
zVlOXu)<WDh_as!33$O?(p*wK&s<jB+&P7g$Xv2#1=ykwbouS$vJR3`6tDwjFss<$=
zLb9;#I`0DA6Dm|HDE!yy5c55T1_4M_6WtJ^ra%ln-au4l_dDg=iYZd4bp%kNcLiqa
zrZLdyopvsU`>)(83`zhJE9Swijfz6AdZ+n at 5EiCh`mEs^gT?R)XgWE{l{g6YLAp?8
z6=hAzRg8TQoR~q%JK?j=4?rzVZ?#`3uk(?>YYeaUIV;={Y(T1RD)sgT7UBlktJQuj
zVsIdo$sk4W9AzX362lz^su5G{p}26s#iusA$3d^*M)Mm&#Mla8aI6W=95NR=0z^yj
zh%D`?I0P|ubi?4TLUz8_c?cUg>4A%lvnTlBRj5H|6NJ^t*e^KX<&Npq?gUO at CDupb
z8#^-e!_gTI2r(Ri*e_i|Sx}$mVoDO+2ypx2>={#X6>|r>L?FT;*e$?8H-ycLJLIl(
zq^w%xOudGeM6ZZ3G#Jl^F*Hk6IJ6nTenNeU5b{}37dMR<;fDt1b2<w1qS)7fge`#z
zWcZ#N!E1wfXD1)#lfVWv!m>G at 8eT1jM@uy^Qi>hEA$55`ljiNQ3I$>a!Z at keFx3gD
z0F*oH;2jm|O$n`1Ush0?3GqI3m4kq2-DCavJ_K2jKFruQg~T=K!lwj97aCuJG$03y
z%oZ#Lin1oYfujXSpD1zs4FM0q<DTTOB2e*-3S%-%r%4e<+GI_ at 7Xo=yTLqi(51D|_
z$ZQJ2&w{n7_Mo28QgSyZx+v&WI7jLUhJcW1um)yR;O}Y+RZ#F78LOj#t^F00 at l4}$
z1i`@2FMYg=HTm={O%b4%+i)?_#Ml`P5%e$mUp>Q1OC*Y^E^tI;ExhM;DMlEQL^yhk
zR|9rhh1~^qv6><0 at PbDit>hYe0FCZ3UTtRsFWYGv7AcbE3Xo(3>;S8uk!NTx+Z{Dv
zs;eE5)IKO}uIfqXMzdGPDDVd4G{nG7QC{fY+}Ic>z6^PPV8Xkdb}+KRc4l?t$w{IU
zBVW|Eq;>?yi53^5(T!~d1su`eD5?c+Qd>Y+2dohTd8a~zj?hFzG#cp|ngd>MLIPBo
zXCM9e$xJ!W@%bS1R6-y;Yo$E_cI6AG3I<e*##$jfb|;D0WaNlM=kEnrpwbA_*J^v1
zsQ7wv at Yl6*QYZ$6a2 at l69<l>0fGwgLxdV=DmhFJjh(<AvX_d``nLNU#v(UN7TMe9x
zJz8u!Ax#vT03#ALKxlvz4%3EMsuE2ytN`<&wj}BR+V(@<_Gr)bdRadda)h=mfnVts
z2hbF9;~`u9jo)J6(0}0`h+z9 at Z%fn=s$h)96|BbM;#Q*Z+X%G4$yr$=n4QC5r4f>t
zMj-sm8y!{Mq+tUjK>LDP#$1)ez_hW(0oO-(^?D3X#|xz`sB||&Q=q<;gk6)laAc9`
zX(n%MjnK;w_bZ}nN!Zd$aTl|Q+M`Yq9xY?=j<HbES~!kp#yhN-JP8F$^OvK`iI^<B
z54=;Ih>U<qOwCrcT(rlFZSeq|IPaOd=b2xyrb$oa^C!d{OF_fDIQFL at c1##M8eA>~
zEN2OvWJRFNDb|n>bamq-VezvZ64)zAPh?2&C5vHlYia`x`a#r!7_JJ63&3QR6Ot=A
zKH#9k?SPC+lC-K~i$TEZDroBk8NLeQFTqD?tElsk<QiOjQRXbRm&uSBiY5b}RlN;6
zpu5{z`h|owz^Qc%mhGJ}HOFSLOyltI0S&^lvN(zHF-#2uqErdP=m4k|OI(XELG>Qa
z;TWz(i!E^WArr?wgtzf4d|-Vm$}Lv-fJ)wsLY9<<bB4i8LsEk&RO}MfgvwGF)B#=_
zm^)q^fOC&F;27o{OBE)hX;!KQrDHM^GX3DjhSd!YpEwUeV<_gvl?%=ynq>2{JXL(~
z&zqMCI<4npqT_`bHa2p1xRRGOwI~-b2==qB&gW*!3F1kRHd8~6OF4}wgXrGIn{had
zq$P9U$R7OFM8)CZ0sJ1Sti^2DrGPt$tmrhV%J0NWoC4rZhZw*rUu?=qn3Ytz#zBT5
z?isb1In%wQoDGUCtxcDqq^Y`?EF(;q#nxO`<7}dNwK~{>;`sF7odk&pwyi0!uttiN
zWf&z4zHWX{rFPC65>duOgxF{o{FpSBD|Qj2l4uu%2*ABj!-k1q<FN&;uTHkkc$`}W
z7ye)xJ!JK(XGLakLtEnjnp(jv43sjV=e~o8{F`zUp*$#8k&Orph&EZNsG!luG`d)U
z-Id^iM_O5`W|FioPM=Utf;6XaMgg3cz+JRd_n6423LS~U*LEv9 at VEtsV;G2u56K$K
zt34W)R%`+Ky%_e&MU!XDp{HO)EDV-!FR>5Ye-m7R1|{40GN;o6$2E3`E})k62)Tk@
zr3Q|?d<`nK at F)D}g5xxMGDd_U=z<V7b_9(>2WJ=|1tqk-7ypfbCy~nBZveh<I4~0J
z?Uo^-2!{~T146<zv+kM&J)emkP$?r8DRf{~J_TZ<NjNCI839sT at oI!rNbtc@@bZu7
z-G`s!@z6{Dg}fFIubJSQgG0EG5RHO^Cn|X277YAG(1L6Mgzj~Fq2|%Xz`uM__%BY(
zfDyy7c8sd!#dr08bKOg|8Dl)tbEKm+RXs%Fcg?yMpW@%vzwoUKYI{O>3l=f&L1lUK
z7+VnxV+U+#lyl8^H$sc_!*MK)Y}0%z>$fr#Q}xeb4U5D_RkIi|CBt-dmL`ID{l?ZD
zDLJ`QbBl9zVZXTal!j4Hi7b|&?81)e)fN&V-W6AVB}kAf2Jtexz-lPX!qN3BF4*Sm
zsFp3ZTCMXd&^^uc11`)|r&i(tHl%65Z;)Y$+fQ`2dz=u(f@`tY;i at 2+E(U!D27nq@
z4p{^cDrXjD4t0YZ+AmTZHU+>B{%B7f_(2;)SF}oGB%v-ZK{%D>&G6rF3TJ7D2jZJZ
zH!F$+T?7Oo8PJ0RgvAh+Z(4yAHj^L-Ix#hqk{~G{vJMQhKf+f$)*f&m80c{DNb7Gl
zsbh(I$l`6n9dgf_-qQX;HO&1V4xhJ{>@NHejbvDEb;v{WTTGF)Opm1$Lf}l3VYR%9
zpgE|>dS<z&NCy1S8PWgZoI>mZg(l2YHO?1vtZn4f%2ox{&0v#bmK-Z=!nLV at IYT$f
ztj;Hm(1seMkONKO4QH#7YG&HWWT5*sY2ZSV$_pDc*pX;QF0=%%ZV$#mk^9V>I;&{1
zkgpqD-NJs>X~&z7cqe$hv*xQZn*t(VYq2zG8L8+s$kLMKMhsG_L3k53w(8YQ$X_%m
zM`x>O%)w`?F+V=h00HunNN2pW0J`RUp;3%9XO2f`tPKw2o(1FkDa~antMq2pl-#Z4
zTcLg$tNOmPt(?(veP4{=B_ZMfVG at PC5hMziG*%=LkguT`7Ds*n4enhyj<y?9Rqgsj
zRVaRFuZGrAMOc@|9{^Fr_)T22g?v*#6s}cKjk91rbB1n<1Wx&CJVIagf{;0iN%5Q;
ztoqTIM4L8=KqjOZHjMsGf3wmUMRgD{i&s6+#$hm~bjXU11a^AC4_diVA$bzO6^HoY
zO25Kg=dU8+zVvKX)q~RbF;+?;1S43 at RZ~n<T~XC2%qPd?hkFSd=!8(PwMb<~*+njA
zJ^K35F+*MU;uGSxca*6*1rB79jOA6%^6FZ^kDnnKJgUs~j1gBuAh>sIr8nRm2SKOa
zS|>Ouu>>+6;c$08Ff&|EPT^7`m_Y&5l?Up4G%h$A`~*-L9cpqzmp1h`=KNxHCE;8+
z(d{bp+0pry2*bIc-eQ8wQ_coMW+XupsE*(~U9|j7y8s0Qxpy{#E1 at 3&r}SD;KNM$%
z^Lw~M&*Q)#ZVkE7_@@o8)kDBDKqMh at cw7|g7_mlK1R<P2Ob$)`ax})wCsLR|QHfd^
z&)dcg_R|zn_8i at oX3yy<p1w7)p;&XM`9GHMucm#=E5IjN5>o)y3zRAcZ03Vy<toQp
zik1>!gn1#6Gh8*5{LW_=G=-~JeC71^SFKa<@5B08<IJzISHdmeXuX!9#~87bQ0u9T
zg2Nj}plV!Ha(WaTTe&K$0`zaY8~%`y100YGuW39_`?J0x$-Ffbrq}U-JTVP;lL0Xz
zLv9|Ek!Z&r*<%`l at y{i^#6N1h$hhRDGX$G)vsnVo<|eQNJva}=3UVte7SN_5F#&&B
zBfi#9B|oXFI8>1oZY?mqYHl!7nw8`ws#c54(G)5<tkDt%gdfx;g{(XL(1Ys+^;gt*
zpk1eXiI*JZ9c_h5D7EKN;^W8jQ&O_>LmG$=)xEmp)4PZ=s!|MBP-C}vU6ZP-n7)_>
zMKTIto?KhtA*YpUfPI_#x|L?Y6B^0}L<P`0Hb@|a3M7F<>j}gZ&BhsQE`$}t3$rNX
zKqz5WEN%dQ5*KK32rWk(doLXh%1HhhUxp7&q_+GyKQFeFpCFc^UO+73a&PJ9OF|Ud
z+^}YPlA$@7J1R~*Ivx(kG}GxnbMZE>tRi^8yNBnNK+>%f&C<7SMU(nMwW1*&p;}QZ
zK2)oGkHfh*RHH06#A$|VlnrKVz!|Dl4sOnI4Guz3E#f>#BP|y%RCm-g3)QNqsxIL0
z)_X#=gY_BB+fdE&z{a3$aBZTTO3w&_ at E(--=8HXlLy!*C at Zgav!u>oLS`>-!y$<XJ
z^&6uCZl8#~q5c53msZn99CoENcd at g)PNkVrS_qeD+o1Z_B2Gs3sNC&>eTh094jT)e
z!>_0kEhmP4aD(&QI57q~>O&Q3GFj~j;Ib)$8$1w}gQGTA2WJ5Jymg=oG?Y+jke-^u
zr5i;t^JI(MA-CsSKbHrJ7TMhxy at D7nw0kO@Gb&Ig!ik;wBMWs?(IfW-DLaKZaK;Sf
zzDtQV1;v#OyoB!SQv6$Vj#wVbYJEbMW2ox=oGS*BLtZ^w!vcvrU)-hA_;9CVAe=qJ
zLWxJs^s1J6FYb)}uyK)Z<A8VL$=gUQT at bj_<E^W#5`w=~gdjZXo9ZTjZ!MuK*v_ka
z9Nd{h5qv1a44m&%U}eKQWaRY+I)gBA2qTGsT@=j14vuy33qTYdBv#UyX at ZZVYv{ve
zh~-(D-q9nl6M0cCA)}p=YdwZZ5bTXuFGyoOP4Gu%f4Gdd1;X8i>duK;dl`we8Qt08
z+u{d#6%z$2LLb>#AJB=rMX__hz0Y1&=O4p(hL&bTI}1{I9au#hBks!WNY;EBpXLMI
zX2*Kk0j10shyWeh6?<L43poi8{0NQhE}v2XD;n&EfzEp3BQOkC4%Z^S4Xd~NJg}EH
zUg##mjt2<vnM2!-QRaH<d>X at 2h7>r_?{wAxgLyH65W;qV8v}5E7W at Y$E8TE3Fr&<;
z7;pVD8M*)y8^G;Uhuy&J$c;rxMj$Yroc7o%T+|{U+hn$8WF*4RICOv?DFHmN&3D%!
zt|2P00jEI$0<i>%K|?p-b3xh%hz?G`?{$+Km;mrvpBF+{YX+h*rZ*Kiz<{R=a!Hvy
zFKq?DhMJp7^(^Qm9uC3mZjjV^I1{7sUgR_kK&FRfrKm<qNqP!A^8!Wy#Ta2Lbwu-M
z#Y#>r{KDynyWnGKyh?G_#HmmiQmj)%iba|AWD9t0eo!#wRm2&GKxp?cNiX0$$#t(7
zg$TYN_%DHvuH*PsJVe3ofZlTctJD?vHKp$u{qMs~zaQf)webc2CyuUpUfIBAu%o}6
z{LH82@|bBDR6lBw0R0OX4~D4sOS>rqfq!%mOJzQCpt5QH^z34`#;NO at NRNb4<T?Gg
zXx^97tpRh(sS9g3t1btQ|EqB&J`v0${7R3`z=>rC#?eqN(FNPlTk7yH2qhg4 at vCyN
zBYYe~j-T-_+GMa<8@@XMt%Kc6Fl(b(+ at uCk%yhFxxM=!`?$SyS#gJ707+t|5J)41c
z#dtwD5C%;_tQk0*hRO&YkVKD?6 at R)k`DhZ$2#!SB5*AAu+^Azp)+uT*%EEFdDrbxD
zOHH5y$Oprdaa<;5O^1U13TGiG9O;Lp0+x3C9RT;%lO+WuLEi~gdT9ws3CSbjJvbZZ
zOHULmHatlU1G=N2>`etb8<&r*gWAt{Cj;bKQ7<5+HvO+G3}{uvB6p(&LTWd~v035G
zIC5K9{DI};<brs-Yb?qa+*}l`R{oYS02mj*+W-$Y0*IZ5bqoY;qh}KAhX=Z84WWpM
z(2rEaN at zsJ3rA<r?kI!RIDM5)TIATq#Zkf&G}iH)ajqr8q)5S)S)j;c=Fc}gC!#uE
zUp$d_i2uqx$?F{cuG1=3wvnc+H3SjmjtW|OWX4i at K$=QP?C0oEQx73wkY-a<?$toO
zrc+h!7%wq1QWo3D)HOblf9HZFS=SnIsQ~JjmzmjGE8q%=-;qnC2ecdckwGS^{azo$
zbgSL!<yyM%2Ir-7(sDg7sa1@$mmYw!W({3SAk4{2^9hLk3R^I6Px%e&2rfCX(ezh(
zmJF61-oysE8sruAVTO`2((qIcTt~q1Lv~Nx_bV?{C71)C?|PV$o)%|3pQW9F%!l0t
zKu%I9jNBu0hThuX=oPf6wt?ikP`>ObvkKrsme{GedBtQUK{kV<C9vjsv08R_F0LNK
zu>c#jt<ZWcHCr at b;R)s`;Ap^qnYLgV0^q-5kYiqe%I?kp*vlY8s^`PpQq-fBoME&6
z at EqJ&9A1YuU^jM>Kv;|;5kl%n#uMI<2m2qqKMxW#Xz?fz9k3PjOuL{CQpg#HCMbEp
zk^;Mu2t7EEAY*_j6c2cWlT6Cb`kp|2SNfa{&;a~V39 at w5F(H(>X}A&vJ1~zufOnFX
z*VIPoMU(AdiOH>$JKb)7t-T!VlyOlbqQ++ge0Z)Vl1N)x<bg=647wZ{p3pwzt|?o+
z-48n)xFFbUxj}IXuO-64;dP8}>ZvaBEjb-$kd8xp2 at cPl9&{Q&W{NfmVj<D3y!aS<
zz#~W45IfXE8W~Lps=6J;FZz!*54suA2Bp1Y&n8_;w2-A<>#^CG!FVw+c=1TGgn*|W
z838k)KQ_zlrVgO_A at IO}N(4p%Y~j9+9Mp=~&@T?^+CW4C)rw*`Bg6NH!X~l;Bn9$K
zi92LO65ZMl7mwF!z!I*3lWsVca5u>Iwtjg*KGg60w3<2$CFE$3t0LWvq!{gu3@*_K
zA>~F8C at q5`vnaKVukjDoK`ns|J#M{FbK&r21#8(Qt46NDj<m(Og!ZSJGo*LbG$n;z
zja|sBh8<>dEJ*eT`V at _COWr*LdKiy at W~os~Y(x|i9c~o&)zDk*g|ASf4_rwWksMKw
zV-%?JI>tpoPD&t at 3l8D0bb2r{#tAE2O^w&XuG<711{V?dV`0CIdv3UA)&Mgg0F(gY
zA%m(;7mP~&LSX4;G>ZEKF}NlaG^{TS&s0 at PkWuN#AXK0yBsCP`9r|9C(YH(4f$1Ll
zdl0W2cEdjz0h8`1KebqQssn?BufT+x58)(I#8L0iR!q0U>}pt0e3KynO*nuDb(rg^
z1bd}Q?1(HIEdwM*@z1D5p63qt#!Vfyw*aqYfDs89(0B=sl1#~(MZ`}81?Ot+{ikBB
zatSU02u-NQh&NFPjM_x&I3rNzbu<L&HrnfOpsfg66XM#0>Hr)pFg)<^n}m3jc^5;w
zcy>)QZ-M`6MvuD1A@&Z+x|vCX at 928wfs^=?_+eHX>B%@%Y^e>7jmWrFpx&&;#aF@{
z8=Gp##BX5maiv8$hvN^zA>dCE34u;Kn(q=^r(u8iVS18&!686n5e2IR8fu;6qB!oO
znDUo0eCN{@fVTm^vYW;A6T3u5Js2vAUS>%H*FZegBz~5i4H|vOAlT}GTCWP!fVJx^
zhm%#b;Nd70 at mfN+H>hZY3<oXG8y?eURK>ym2S+8?V&O%qu|%K-I|}3XCV;D!pbvHn
z5V+}t<%0bYMUe^THX#)`$DtWY-S#r48<|DJXc*Wcvcpph#Oaet2^p{%@W4S-gB$7O
zb$fkdltFoU=!;}lu{u{kb(W`rYX*D|x`wh_L2*oxmyt+dZ`Sk?|5jr$LLr?b44aD^
z;#d|6e1cqSVvplb`0>}fU{?y7mZDHwu7XJ^zKGj0EGH at -Z{sie4}nRFxSH!!Bdqm}
z#qVWsf?jPsS8Ph5m>w<^F^%Jk>0X&Fg2RIFgaI<_&dK>_6<(F>0Y^Q?(ZjJK{0|Bf
zJ1fZM4o()(cMrxL>}Zt=pSMOK$D0YLNzE)J9GrZZGdN7L#KgzPjAf-!D(c92F^d-%
zj_1ha&>1e4ib7zZvIs`_M+F at oVF-Z)wdf4xJ<IMWFH4MX*%n4MQ!Q}pi}Gb<4-$kK
zU&Y7xntBw0F>j<3{UD%=nc%QZ4mT<q0Vs|JlMFOli*Okh&ck5S1?MW{Mj)dAVj&q(
z3nI6312DKLk09g6h;le>a#g}EryLl?=>t`3Ei!;HPoM&Pjy&LfxaiA}G`jKdkd9CP
zD|kTYTTE at zEs$D7OMHd at -E<ZMiUqR@`2d0$2eCxVCNal}aigkp>tUa4KZ;s_u^#-x
zx;5FpYRdt at ODs<Km-;doN1HKff)s;Gtr{=}z-{KOk22q8#0c^GQgANv2ze2THsR4V
zZ2#eYJ5sBJ1nOFK$0GYvM`@A$DJhnNn+N>QaRsWfsm((5IE at Fk)(0^0CMI0K+?a2U
zn at -?@vYMM0B2Qf9)#IYjaZ_XWRfAKi&|B|^3QkB^;y-}++&Iv{ppiXLg4FGIjs;;d
zC6+A2WWK7Ci=-C>rF0@!ZKi!U4<F$npw2U`Wl=E8Lug=%1YHOTiWIEJ;KfdKkZMQ7
z5vNqRoNfoy;Wyw!kSE?oLH`N=VuPNDl^=YAA?VF!FdX#-vy=dmgb|F=VQ;1pC;Vd-
zi;tpg5Ob271K@<t!w}_=hNv4b4G;)eLU at S&5Z9|LdbKe((IAl~==`alDv^^atk%4-
zOk~O`oX#OY&%i4_Ji*t~@I4)zF!*odi4$IyOv_NGklYhOGY6dH4r=rP15LxA5}941
z4sqt9TjoSB1B=~DOGr*gCg)P#iVE;JkR-eEDz6KI-boM-#@kTp8K?$o0J9irsb}a@
zA)O5yjxm>NjX<nc3>&5 at R<#0cbLi5nFSG|~rXIGyJ4dvNB(W at di1mWinqhf0>jmMU
z5jrEFni0eSdf<Po5(b|lhU7FTUgBzl1Wnxsml*UH8xuyLXj at XUF|?h%uW33$4AJf3
zvpZZ~>%_TJ;n0w#Z%}$01y^g41DA$CzzMPiccLH>sOyA`LsCm^$*OY%{vz64bVGy}
zI7;Rr_!{Ky1FitN3Jgj{gSBz92}iwfQiU4SYWpH6NYxV&ZWwK2sY=t>vOJF9q}4SG
zm%b?~ec`XL!hnNN6S}aXrVczSlIog?vuGAwb^Vgz{|UsUGzH at 3VIsN}R^(P9QkehK
zRCH5S(!yWOB`tJeMOqoU#?PTygf$tw$#gZ at 9R@v**ZKS;4>i4bTvn}%?Cv_ybRh+e
z7+ at rjM)DGv at o-FBurPO`=1lgo!2l;Z9*#AF&>M2`X5ns$U%Jd^iAE0dv^&alPI%pK
zO=3q5noZZ4C1V- at Z62%Xx@!cVg<*MRw6J{)!833NoKHPa4wSj`$P<6~J0#KefT|8P
zu7FBvvS(8jjA0#}#Qe9E3m};z;Pp%b(<Lmro1j7#O;sulMi=qYz=jL_CBdCC=KG7*
zP2~T%O{AVPU^fAqJ`!*VnM7DcMGXa#Lo&Dr5-j~1OT7SwUPfawwU}Xu@?cs<m at M<!
zx&L$!QBqO3+0F=kAsgbA06#48Ls|L8adsqEit8r<nXqgS=`zY1U^t6<Yam8X;YY8E
zu0{d+(;yE5a*9}85-rAwVP44V7v(toEqUX&;o;RUp=v6e;swmu$#6A4vJmk_BAJjD
zf at 7UOC+7ns1`%EDW-a-1(lTm1Eevfu;FLO4%R(F5N!`t3!HZ_8n?evAzxM^|lf&UI
zghvXOP%agTOym>d%WxhxsO`#ct<;}=YMbGB<8GE;Vrn?jRC$)~^YGuWy5i-h_>1z<
zKs44%qCi8`hejkZW*}ys4bG-w at IP#R`m)9h5Rqx*^^-;1<j`ENVtW~%C}lV6;zPKb
zCoJM9BN3`1y!<CxMvyx#jb!H}B)S3PRn16_=n=?H4mOaKq&y0zy!KR2ReU`tIbhCi
zR(A-TZJKa}z?1M=^N>V9Hw5`2P;{2zB2z;Fl7_~;TH#Y>HGbTrGMr$}Xe}8MK~+Kj
z(q_S|h?1_93Q_?-y2O2&bj3sb=f!{>Igecoq?UC>9dcBv>8i>JL}+0htd0&A>C((%
zx?Gv*y2X&5a1sqz at +I6rXM^*2h@^!aWz4}O4n9m*H-z=_3)2w6VMM)3(XRLoeo(?p
zN7l;|VFQW$vw%QgT;yQ at y<VpwILtJf3U~H+@}cya4-?qEo;-5=5-ac;!jYKBO0L=9
z{0u@*#L{hammySK!x!+QXVMHD<mkuh(y+_$Vsuj_gAfH&-0;Xdc+Qy8mdB_)c{92O
zTWoiNkHlFu#7MlEVI<9l6Erl}>Y*2As#1brf_4=GIzApuRowJxupx^G at Ck}i08x9Y
z=XiXbDZe0~s_%z at R&5sqnK+`x)7oExG@)HzjEh8U*cSjpjO0*^dE=&n9B&bRKag~w
zRV5Rq1JAXhWZH8$;Z{f1p2~w`veR(5ltH5zV~s><$0QsMAw3%f1>R%B0w5{FNTwjt
zT(TKq;{m5I1YV*@pf&@mkf!Btz;O<*g at Iw36<C#nR4UN-g!hViJ?;kNLWX?^`tk&z
zE*fTU<H?hw9IAq_JK~Z2_yHIw0JJEw)GNaeQFJYmbkG=OmM$qX1U0yt;hHLhXz*qR
z$&h9qax|{3LX5_ng*6&?;RM~h3rCp(Z*uh{i3fX#q9LuNIc3_09V~EN>{fA^Tl|?o
z4rfBakDie<l#R;Wkj*nLDtNjFX)Z;$n_(aGrC6kYlcx$<CuI;`YBEh~k+bOqNhknV
zk at +|z5++4NQG>XN9g#r0uyY)AAT<>^I!fyqA=~S&tMQ0aYz(qM_h1?&1n{L$|Ez>K
zV-5wN&&>afoFc}@nemA(S;DM|K1V`oBZRnv!lXs~O)g>xaR~!0C}zCz7x at A#YuwP_
z(kiDB;}b|XhxijHH|MW%Lj1j|paj!i0vEXv`wX&!pasnu2 at 457#qFRlu&@~7u<Bxg
z0e})v at C#h~tf1H%);Ov1P%TC?INg;ziUMMlamFM at S*t|^_ck2WN<=sr{*hPtpqkXM
zf at 2?a6^DY<h&x)~lmuA7v`MWcT)}bHe8#K|nYN58?2Q%vX<S((d@*=2B#Btq9LylY
zGcX&3!X#Qv9>HY7SMdWj0lO!FsC~H1$fS%DR at xvx2QP(${SnjIV<Y+0kbaEHS$hdQ
zPjnP8^JK3ZzREv3=xIqL!yI{Q{Fl|9Q?vd{bIMACzQA4%vyf64T at g12^1tpL7|li%
z;nj?E{?z0wlx?u7uT7(&DKIf`;>o+RtgeI&VuVO=+R&^t5@|_To%ad}@RX$H1(NvK
zF~x-7>{WOP6V+tv9h;i*EJz>lB1T4;*~R#l#uuQ5DKussAqS#5HikEi9|!SG7Nv*e
z0Z^Btu5Xd at L)f)cf(W=1Yg9rYyeToYc|yKd6AKUFm^@QkQwB775RpSF8Is}?EN5G2
z6ukHl_AEl!a^-4(1IWH7hiYI*f1&mKh|19JXTl`~B+V~ugb*gP5A+DC3zsdt;DYuB
z`kmy-X&W###hxj8Q=(w^*d43^Y=!VE5UFObbvmF%7S`h<89B7vo*!xlLVTfRM>76O
zP<qu|c+#hh7A{n`da;&WAzWtNnW%bfiXW}Hp)3#rf{<uU8dc!Os)Q4csx34ct6_m2
zk^?F|3Uh5}mTVwIM^8SmcNv9TW7(Qfqzik+kJfXu=!aby7b5eg#&)U_5zC=!WTeC~
zVM69l)>;A&kOL{vV38isuH;7~h{7NfTKQPi-4+FDL48;)*2EguD#dAP8j&J?Ob;fs
z(M_hU{fMBMX at 1U)L3A`=!qRXec9$O#6okrEtT+Y{YReaKULr at q_*5aG9w4hM=UJ6z
zV!uEa^N<$o*Yvm(f8Za>fw9wYZ71vuR5Mr(pyg51o2YndTChEefpJ(5SX9*s`J)~M
z<G7$hXb*jvxaoq!UlId-KnXr5e1r}Qt91P^g$k)|L<K*W at zx^+NE2yVD(a=DY@%!h
z6Wo+$ttdLwtq<AV>6cCwuZ}XKF=M(PPZ(zy3!w_W4F*v(*#zTzU|3DfpOR~_EeHMz
zz7fVQn!Zz$>(m<N1!OZk(>Ok8g<6D5TQTXT>Hm+d8QmcuRsP4eXxhYKQ-zglO={92
z*^l-Xjk*KLr2wQjZtE5ev98;qX~b&Xs!{Yv|JAgZ!35PX*SeL^0xX)m)kd^y*k<K_
zB(scoof=v1mlIR#xkc!R-5RYL^QXpk|MV?|VJ*jr at oh$_#`kc^k7-jdRah(Zj|FLk
zS3C(?x)iqzur~?j)k;pXy5$M(bHe+blCbidC0yj%Ct*kk(X^U^>@y9ZzmHwOWATbu
zc}P8$vFcsheF^x~U+98($It(*ZJ0J8P>hY+j!CbE+LlR;TX=gW^$mbDW}6nKz=yrv
zp*%qUEB76;f- at A#XA$_Y&6M4AxQ`~6!wUQ8I3)vw$K=F<#Z_o^#-Qv*SV=5Ufk``8
zO^4dFv^WaX5+gAK(h=))$S{UoBsoBZh|@&gRIJx(CQkYjS9uSq?hi#Y;@`Y<h~>65
zniRjql}J03Fxj9cCN{&Pp>2Isrvvd5qN~A#4g_uuEOKI`#rp(33B;HR=#}|kA%uc_
z5&7I?6Nlp&XirqMioGV*n8Wj6_>c-+KypJIUyIF(hX4exLV&OcAmNodI8Czyer$>#
z)*S!DrsV2wa*v=@wIp2j%`3oSpcg30u*ZV{gD^`b33DQ33qPI>0>dba2nT84;(--<
zE(8Q)v>PkC%ehX78WbL>H^$K29xTw##q5%c;TWJVa3LBCP=yIT`uHDGGff}u(YTUL
zA|hl3fds at 4D#U?27)}Qk<TtSEMM<z6O>ZlS5ex|g+(KZnb0S2NwhK}R&QfJzPxvwR
zhR86Vmb_xn_f??|rCPChXv_iOf>g6YvmL!4x~pb5B>1nE$DxLFgw?vKN`mpH at w}D;
zr2!QF5TsC~$j>-wWD9e;Ftyq;6fp9x=$Iv}%cNCcYz7~OfbxV9<FCP(TB5tpxyV}$
zkvJOaguo!PWt-z#d_#>sv?h(rFX5AiQidErS_S*65V1eBsf0gFBe|d at q*DqvGiNq+
zwH^n-$oz}3sal<oSTqvRWI#2iypFq7u9iytN<9H`L8a(xvFVHt%FwzM#ynPZsnPcg
zha?a`jG<i^N-0MwYk|r%ZxRkZj2%ewq}f}RDn1(OLptzoSK_cxH!coWMTPZ=w(16;
zcVm!f1a==?P8QrqmsONo1h>#xi-KUF>d1f$9CQ`Y0~{tSCM;t_9_0Z9AwwuRL#yAB
zQwp>2N{6EW<LoeM*FVEU#1yz>46p6NjWHttgj6hqU7~^|u>|-S3!o;1^7E92_$3Mg
zG@!aLT-XZr;o)>F0qpde1e$;kxjDhNJ~(r>Xc8pQ@<hDCag>^`i}mo`&T`1GGC{~J
zzq1&OMUoCgH${L8+LLOT8j*qHX<G^j9b{WkUgz`Sg}{!oV0t}TYX+=L%vSSY4WXe4
z10pc^(eRDmGGufhVGYK=*e{|I at S|5D*p>PTql+++C#yL=fHs4SL`t(DG%$7{ye_6U
zp+wN?45DnX1TAW!h?zU47)U_s;4K#>CGH8$=I|s6uta2jvD6P1;L6!p96nZ2#hi?M
zAAlqbukM6iVSomw8J{L10x`&<&Vb->RZwVY>flO)In^?`>Ju+lnml8UBHjs#Jz={t
zdwDfUid3_zkv)UwFj`3(Rl!gcL|!!XsehaYgE<+%Y=eRuL4qc*6QU^DiYhE=xRo2I
z?$U^rlr$eUW<nFI8F0{aGa+6H){)F|{002iC??iVIf=r!v;;fh)`=4 at MFZUE7$2M9
z$FOp!w6I({@HIg^jLV0{ugzUSaHzj=6~W<kD~XC8X(=Hy4#goF&amG`Edi{5x(WbB
ztQQNdWthqyVKHYz{6&K~45e at 0m8FWs<{Fop at TU<h0h}O<h`@i;s1Y7$8d#P}c`Q0k
z$O1sD8P5RY_fG(igsgGIxLV2@<+Y83<wWw9Xw{5h7W$PCIy8aTyp>pLMni)Tm5y2=
z-0dFhoMAgf&n4x|biF`Wr*AU{JzQpj=BBL{!j$X1K1YJvRhCd&RjZGn<9NqZ?#5&|
zf;yr&9v8(bE0bDY{LX_|v~q(Pwv9=Il(V{#*O5XZ*UGj8+>TC)mQl-FU;(47tIj0s
zGMIG~dPMGPI2s9&a?M;u+H!Ag123El;G6lD0cu2-ST|P^gKWYi+0YT}4_NU~L#m_3
z*4P)Woxy7j#8CLa8!M(7<GX^+;exIjz9!;@uiz&P at TWngQ-0PHI#ZK&3muC*#7ePJ
zHAl-YGS*2m)KG;dW|dRL{i#qAHO+c|#|Xp$Lc7p{KsZAr6q#iZS`&ovyHtW!FcroQ
z6A at 4_7AtfMQ-ddPV~t>COTUFfT!c5ov~_i3|E9 at 9kw@L+N!dq>$+Mi#5U_?Zd0Hd#
z at 1!~u3e`=VR3EjNcxp>AyIKdd(CPNtq2 at _&9VhZV->6yWl&}|fR=PeI8)tAu7F<O)
zrFJ7%-lCG?b`8~1!a^XeI+6;JOdV?+hK&>}iw6m?ERve2;#LSMFybn!?t#FW3Oj8m
z;_Y$P(-csAQv(^i<Tg^V2q_N7gQWZw>ttLqy99-qEhYu$j%KkrfFj(2{8FtsMoEL3
z13akfuBa)Xy;RwW^D#b0&mr^aAX=M$L8gTz$6&KG<QikZ at zP0Q*bcxHU^t|(Eey9#
znIOtC2Gk(tkBvL#jhY7$CYS>nlfeO1HstRHoQVG%=GZ4H1~4zYp`!|Ns#rbJ6>!#=
zj*1QOW4*AJli{(dF0(R{L^aEQwZT&}OGB^W7>AJ|4Xd%x8Bt{+&>+Um$c`_856MVU
zrAhsdLXpjuM3ZELs52vWNYju4*BcuIGuyx$)5+m0s88e%ykyU?C@>Pp<v0H#q)4`j
ziWFj>Gz}?cB`b_b;m%-HaGHb|la+^VIRtfqj at e@L-Nr(7B`D8;|H;dmS_JisxN<Ss
zTv+G}TH!3LI?AG4S+B#OiBK2Y`06ZdIVD*OwiK)E!wm{E1_M;d%dg}Sf|Zr%3X%&B
zhw1#%40s2Y+giIX;3}_!tEbeH%ml)oOvw_ at 4#61tizh7M#KOAC7)1lpda>x7;Juj)
zx46P8Wu_#<y^$7G4gWO0KrF#XxT`kZMMGo|+;pZBU6do!0>HR}_$S*J!38E+<&eDW
zFZSYbBQU920$A2B;S>W!*4LN31H&jbnoI|2>nDL|6t8AZOuVa0YiC+C7%7&>NM_1y
zkQr!l5jE#jp*oSo<%kfj5lpH9vDcBJrX__YLowWDyj~2~$u{G4R5bL|xEY;<SIj6B
zB0`o3;)F0O4+OtKNQ4#rOs`DlaU5_)ivfgG2Xn8odg`G);EGp!!p$}kF9G?LkQ7>0
z2M2~kArY;TkU(_~ZV-^i!>cs`{S^gJeZd_;<jNp=k55`cQUZkM!zeXS6C4zkGHZJN
zjOnbZ2_(ov)o_xFT4S#kiV8q)SS(|Kw at j(2gZo;YcE1bi?_d_}KrQ+p8X`XEVYOVa
zC<f|&Xq8NbFcY|Z(I2pRD at cMEyRK*)S0Y4z;e>Ua6_FErno~vu8bbCJ;UNqqbzxRQ
zDJI_o5*N^QB0LPMlUcQ3MuWc?_ at 5VOEmDMsVRb_H?7B{bhhcR>?F?Nf!o#pS$$>;<
zT^H)3usRUJR8_)g&%)}W&<Pi3IibKR&GXREs{g@^i{QFiSg|1r2r1HZcA^<Dz|1-}
z3Ys=7 at D2mIN!<wC)0}Pu{%KA(0tYpx8<mTi(}~7N&FMwYMwCxgQi)sz#UiLvMOW4>
zCYDuuKoiA8Kk=GwxbZ>NM86xkpPmcolp8O?roN0zdug~Ylhk$fRrqH1qKVR#8C_rJ
z+EG at j)2P9#+96H=dEgCE>(dD)7=XlUTI+`ml3X8yWwtZ}ldKJp<A&wzrq3u==siJv
zH8IfxKnw7u>8C;0KK;{wEPcr~jw27N5g>Q96qRw)Qfk1EGG}sbVQzRhM#eKivZCeL
zp_xl^oOM}?FcpPzKBnK9{Rp$fpT;s at CelCrj64iLVTOsJ7L}X=hBg+q)}I~IP#nq1
zLlEe(y|kgk$6zht-M{SW#8hH#k!urEAn*__0s*5zL3gbS3QM60MeRF$Q!d?NQB{Ug
zN+3+BVEteM=e(HdP^=zhqf}UybiW8IjqVp=@zDJutOvSZR28p#u4!%E4?0Dx{u*b>
zE&_MxSs+=UEUntFAyJ6xK&pyOE5s~mU;=KL>!~2=D4u{jRFN}Ntu-XQe?-`VqLAn_
zUXlH2Wf7v~q#^M)Rm+(YTCcvKFH6!}wKZb~tF~tBVb#`*VXWF3S;(rT2~$}$wPZ8H
z3uam>2-~HE&vs%{J=^i^AF>@+KFJsli2Rz;NHqj{hu``XYNH67N?Jfo++9*FCl1OY
z9!YYXF0~2<gWzVgx5?I!#Vc#4Q#d31G;Z5U-vLF)<DW%SUMs}NoAH0u=BOKiGKjsB
z7+h}5a<bIc7=NO+rcM+&as&GpqdqYsk3&X>lE=bC9<>4Ooj0J}i^%1`<G<=l+I-a*
zP9sR<4Va?9gL=jiR39Hl4l*;WTD+MFC at _v%1Cux7|7u(dbB`TJ_?F}*;$O*}2$0oG
zeo?<;_M+SZ@*3qPh)dcB#hsF&wqVG_JjJDwy5vx)lMom}1;zrQoUoK`^4K9>(Ws`P
zihyoH1%#0N7KC`>V#H@;NiWhNhh3O%3deN_*oEoBD-^RKUNM=j$xLN_LofwVN|8iG
zlqD5zsRe~n&j6vQuK}t`Q;NmhfYZWN)GA3N)|00z9Ia?6`?zC_RegqyOxwooB>O<h
zwqOY3LzF^RN`SM1HupGXe6X4V3QV0=T}SwW^a2n>>BcpiH1UhavV0&84N{ogw~>KE
zLAGN9-gjN at b$fkdltFoUSS#1$R58m#qqo2_i|;|#W6V7FET at JHf?Im=44NZN#9y$K
zPqE!UAJ4}4OpbAs7~<Xlr?!@PFLS>ZUe4drxJC>yH&e43ha-l06#+BM<L?4i at vDxF
z at DZ}`K$aZAprMr#NbW3G=)8a}xNL at kBWS54g4hjy2x!s)%OtnA%nr#Z^7OGS)vII`
zlSaind$gix;ax+KT*0KbT!f5Z<dhY$3t6l|342c3Q8M^c#sCFq!30Z=;MfFG082n)
z6J!|BN#+m+Q6(lb^a6Mm7@(27!Y3966i86~pdt%V4T3ZqPD#8t;DbQ!0`MB+HDGXJ
zNcG8Za;O93HCHIugD at -nO7R+A`=f|4y3VNVtnHWJfR2`rXjFNJFc9C=$rxD>6i|>#
z25e3wh{+-?S4$b^bR>21L$)5MG*0;d3TdXfif25-wipHu$Bk2^8Z=zgK|7y%<Sch4
zufnLy*y;-_JGqTg`wF#%z^>N5r<iK5G6?3W4mO5r#F%HZQ-BO6E1fVA6wN5ItYaj|
z7HABqh7mHjo-2jsI0812mVoKrSzv=e at E^GiFn9-+G+~37(1K1`C8=rhJ-iKXVoZ)e
zNHybMpc{*h5osm3&_N-w?K`}}|HMDww&KL0LnD=;N)D|#<tKY{8oUFK6C=4gpXZ4h
z8)=;pW4O>Ta>Dq?h}O?P1_O|mG_4`aQRDK&rz9jNC#1$ZJ(Y0&QI%L*<49~7FwrC*
zIbuWv{tF-dzvNkR(#Vwb5y{EPBT^%hlG8?vNQqEJw9N3qd#Uq7bc3Qq_`Kdgu$G~I
z5BBaq__yHnC%Y?ubJ+k1+&KEDL;F_x{}pT#7X4YF)~517<LN(gL`rfi{r_?Fch%UT
zq)VgOpwaYCNgA1+-b(*}D*fHg3W#{Kdz@|?*q|8S8yr%ke|lP)e%<HalTwmKL`ds@
zN?KZKQiPHeyxW%f^?!W*UsEuBQn$zx(I)SfKRKrm{#D at r+jQyx|9$d;yO6X~^Pz^-
z;yoL8bcxK&>~&1R_aps#?QdU|+~vN6!YiWVE_gcXhU{q`Thx+kzOMLc%DFRokA5Z4
zeN#zVNl$lH*R6x5AA6DW>4MR}?<tyd_?I?seb)1(<A1o>4gE&s=T6VLXJY9}{JZt@
zw_u=A>p#=~{u;PZEIiRCa|$W{>8U#TPfbfrZI%DOf+0-gzc-BAo5=s|eKuYNUzSk$
zFW<N4*CS7EYuj#Cn?WxW^!WUg#4EdP|833L_UFE}b?thK`>o_{3%)&aWaP&wNp~$h
zChdx~r><T(|M!!>exouod%z#<Be%Ty)b4k;)&A$(0UK6deBzh|Un^<7X8$tt<$~4!
znXu#Bv<JH8^o>mUp=Vv!bNZfm_?roDPhHhEV*9;2;+)sz--)Pb)fR|_7XCCv{wI^X
zqR{I;2Q{SpgRw8K|KJK3*((1We at F9Q6Zt;@#_QXuE&O-khu8Ioe>&Grp6ic@=yDwX
zf15WxT7DQFW}{LVwYL1jANTcX=UlO7;vZeRcD?AKBS!`-o^#*fKPGMIX*;W6L5G)L
z`}Y;Ak9qkv at 2VZWCv;dfY4f^-ytREtl)cpnI$3+L->935zs!K{TBRG2 at YjEuBLB(Z
zi$0l9DEUuL)60KydaM2a*YJXg{Nr9AlC1x0Q(oH+Ut-z%?@*3QD!i-q{U6VJdvWim
zxT+nu_qb#8xox^A^9PR4ZFg6Xh%Yww`~J`eC)XqBt*bR+;UE8Liu|Xvu>7ZtNYkzV
zAphY1Y2E)Hef9}Q{{4ddA9pvA|D@?xY&>(=_;ZigZ?H``Yg<xE%Ac1!H0RD|?(EUw
zi8FtH at A|LqdAF-$`OZ6kc=hd{um85NZAHYj at 2)t|X8O5G?XR!AzU=NtW{%7JYN7IH
z=HySuDE?tD6i<xo-tO9%tWC#l_+dy7Z^wvNMou1<aNJ=BVxU!(96dg0iu|Xxxcuw)
z|E=<W^e8U(9FF|^nEcOMbokS=It>5hn`<{5I^DnF*ml>BJbUrjLCbnY#g!?!pXMv$
zSKrd()`*-zaZ9 at GEIIo?oAO`3a4xk+UfL^3xxT~B0sYR-X?MbtE2ci$aVIE)fs-R{
zO*(Gc>m8LRj@|iv){q_Tvm%e#-RsXuvm at F?^dCO`^ke$=eieaj6 at QszE&8n~@}Jhy
z@}H{r|AYLu?*Chq&Q_g;BmWM*{;yc+e15>}cDJ9<q5q0Y7e!{3?l}AUUG9DTN3`#q
zkg at pAHCL|Pe$~wrdtCFt&xNmD`225g6>sad?8l+)+b&lgyywQp at 49B)#2y6^Wz&?|
zZOdk!8JU$CaY5FJ?SF{NdFQE!2;ce>Q&(sG>mmfSRpPD4)#A^aBL5>=SpJh!OzeM%
z|7f-UTb$g64#ScEleqlD{-4?ZJBJ>ga7T|m5fOu*>G%D;or=!Kj$6gnfZl)ngQm!T
zdP~c{$@-txdj9{H at J=}LA05>G|9tbr--ou3D1Om#=f&lVM<dj&ir_DyT}uqo6!{<7
z;_^Sz;Qvc&J^ybB@`mgq9Qhw2$$wPD=l2z!Hm>3QGj8eCc450Mk%QLEip{)eV#KOD
z`lOyZ^HU5QYSjQC5&sWq&=mO})zb2BV*j_U|9=gGgd_i|{V(qS7Zwj(*1K)Q9Yq7X
zeRrVmX9#WUvj5l6tR+Wjiu?=lzh!lSKuB#6>ij<?Nq_#ImY$l{y8mxUI$QN+BL5iq
z(}TqSY<+3;=kR4RUH@~Ref`)KJt8t^{&{3jNlE@?FHC-M+o87_M&JKi!a3`_)xW%T
z>X*x7ZReJ~)T`{4&oA0`DD%07H{Q84<*FguU*A0Y#IL^mzTIg`yfSUyJ2xRPt;zzi
z at V9@OBL8`KC4`Me0b}9XPzoTV{HLbq?Ekcppb}dBe}4gYn8?2&{>Lu(|5kRo<eei&
z7RJ3dbJq*)Ze6~zcgi`-pSpdW{ecz3*PYpY_GvR`{`lnf?I&kXb2<lSPnvYzm~{t_
z%N{sr(4c3|+B~IpX#2RfZB|CENxwAu-1g&E4GXM at oVDVuVG&ofIrZ$Q<sS^j3AZYS
zzkuxO5Y3f;xCY7BZ25<rUpf94<iB<OS7~%K{|HC^`T4(NMMQe+9~ZXiSei5Yy*+z=
zKYs50k3M>O-^t6`^oy9&sjzs~taHmwEh#x^@|I5P4qn=G!5e3-i(1#d>r)3Z&pkDB
z|FB-?ejRZ~!O1V2nSarmYa(6MQN@=YyY67O^Z)(S%1J#oA2|8+zAJnEam;7$W*+Vr
zF?K?MYwE)T%W&$g3gIX+Kr`h(l;{)4L#_X5Y5Md3)RD=M|KEE4cN7WFx(-MF_X+F&
zEnT+#`pe;ahsO1cNSW|i at p~V>f6$g|yXn)X-{0ExUvIyCLFW37eIv6jxNF}0ephtu
z*6-Di9^O$~^X8D%dw%jgTz22noANLJ^XC^|O#b at 7!Q_lKKYf4r(DSwB&vaOQR>xzL
z?z%qZn7jJk^}{zGJ$B at StA^VP?!4W8;P->6&s=iJfPSyO{dRKBX{RN9;ix!0;>r)t
znY-&r&u{y?U;oI%eIMSrv+u_rKmMY!#XI1cbDkJ~(#;<ZP at Xt@U%zu*UHW`%^MBoA
z)t2)+W!G26On%*_EI)Q<_t#fVvVXVdf!|iGS~atmz1yU9WlBZI&juvrDiIOO-<mV@
z^%vJZfcW_z&^%3%|H&l($2QgFsdkb}`4}%*{S!+5lcCsyZv9V&av`nqZ-vknd~PED
z;pP7%qEdkTpTkG0Po()j8}hnN9CTXWKMOoNy)Ugjkav5}Rf9%N!epP*PHGb|_Tyvj
z at 3^aWIl}%wAXhC&qNCbXQ{+E@*Slc)e^{%31j+Lcn*VRG|5Kp=P^<hORl>8*P2?Z_
zfBlL7Z)c~2*T5HM|4)1M^~jY;5t*+aJThVHjN8vIa9?y~{D{<=s!eNObdLWe at UVB}
zrG=3LFYD2E@%Kl*=~I2i3D-Q4deKdtKTMkVeTT){PtJJkly4qfb-!!JJKcJH+3upd
zGylE+=6g=?6=mL$SX<cP;zw3zZz{d|M*D#3L9gDMeR#@!pPsa&9YWcvEf5Pw>C+VX
zC;q=F&IalN46Ou0t^aAshW&r)h}Qg{qeOAJTNC*=`2XGz?EfhL9d~v~NJ{?ko3noZ
zWsUu_oom`=uD=9L{_CzwpYrkclj1vkw)d+W9q&Ejzb$Ir!H8UYP0e>l-a9RC_5S^P
zyB6KHf9bbhM8}=^#S1;V-2B!w<<E#Y*W7f|kqKk3AMncTg42G#YVCLTB&~C`+c{@u
zueNQTeC)A9=e>COu6~bizdH59CzhRb>(_mH{JZTVy`N1 at PftIxcbC5`)3;&Zx`sB-
zyt{h!>LYXR`Nf%(zQ6Lo;e)9!>>QbSxa~7Jojb2Na^A5Ud#3mNV*0vg&h{J=H!-<q
z#4C=XE-3@{orlQypVlu;mVf5|hZ?IP6+kHYPZ^P<xBo}9%D*h9N9$WS^6wSo|FYYE
zIC9p_J;t8jCg;hU_dTgxG;MvSbw74|;m-)?k%-Uky=e0V_njVDc(~2`Imh1o+4q^9
zdn<<qtXtOor9W5R)8p$Kk7QQ&?Y(~Xgbw%j&U~lsk1=~r-xb;IxVg%qk?a0w`@&Ui
z?tik)kChQ0zm*iXH|>?K|MS9mw1_VB+bH=b<sg$2%KcCcq7k3q@(&e1ll13*SOB!u
z{%-_|o7^;UsItga139?PfZ|*XyE+GybW{BG<I<FXAO7RV|Bk_mzpNl|<|3$ljQ31O
z=R4pvyncajgp!<;k~~^Tfl{CGNvZKEqm<<IF{$Zel2cAs${WhO0b8I(iN=z`nYH%v
zYA7VA2)vi$^t&oOP9Lc)j3tj*@%jp{ClFs at uW`8>#wb}nm)$*Fne22ga>8}m_Th@(
z?(xS%F=kf<tualS`&~<%W0d5S+Qsx?84OqH!)nd({F;c|tlZqZB>FRdhFqG&p4HfW
zl`hX11->qejC9phGH}YgKDbevKTjaHl4Bt({<CqUtn}=Wxyj}uLD!^)vp81~c=&x#
zx!tqK?ziqgk9;iqmtJ?!TFzq>m&fh$IOEIQ-f~u)+Y3~!aC__FQVf^F;q=fB1J1>P
zc)J at YGe*InAA$|m<xmcjvkLCt#>+SGj_g6KROq1D)22e9a+pCvQ1k=?AB%5Ogd^SD
z_F6xXmH$Nn<n&0cU99-MZkIzDltn)DXNh}??N#2I5ImE_d1gtx%j0k^1~#HS#n*V3
z#N(|Xz-?}4d0>p<@p_!<1Z_*~DvM}5K+2_2ys*k?)N_gk6RYAb at Fv`W<+MY`^xt^K
zydnw8ot}WxM*)Ib at qR>l4N#6gsfAkKa7i<O%qKynU+;8PRzbIAUbjPn*OtO57#d>1
z*ZVgEUV*VE2EfV9FUU&_IqWtVQKUJ-7=vo4AU&EPgDZyY?7Y0}Z0nvw(lEr(sfOvO
zdMYn3H$69ftdcl%P)-i0tUS=eC>9*FP!k+f1@<}X9_~yEIOE~+n{p5%kGI}uuVswm
z^}7O~(Z?wEG7zG=0Ana&UVOaKqx14ckG4hyDv2?;25=SxSK%0Cg!)w#t5n(tm)}82
zN!i)y=}d-I243XyyUJW{R{)eh*Gr&M;If$-HYr(AC-}>KpeY26tm!p-UBF8Rt#>&B
zRUjrwNrUNwDkdT$DBP&DiUAdD2m|$y08Q5{9F<8)BSw^!F^H^4L!{r~Ece1ypM*kG
z>mUT=Csa}%z<4Uhw~5GOV~VDDMjqZ+)GbuKV_Orli&|Rv*{I*J7giaTM}~5J!B);e
z+2kWqn&X at 6qrU**+9ZhP$j#+U-6*VDN>mWCsT at BVK6!Z}9uWCPk|1`x^<Ww?c5E!?
zjpo#rSi=J%WOt7Rqt1fl734Ekr*B4)57nJ&6;K8kSP*EGxw*jrqR)g}TVFKhPfv5&
z>CgOG*i5DlEUcrZJR>4gTstL9&~*{9z!p%wl<>zsx{j)5C08RHzZOJC`l%3e7PrJz
z2xMqKj~<<#&hW=90d-+(!dx1OsisWb2A6zRFjmpTFW#s_TFyoi!Ia2AVEM~vanz7Y
zwjZzwA{OazqC4OgRlAv at XzJF9Ywh&((WA4o_1a3HqsE!mW*E`{mj%uRyz{iQkt6MP
zedk0<*>*^^2rNXGui(k5wqvv(shS>*gcXHIFQsL6Ks9WfsQ#O3!?~o`l0|%r+c!ZD
z1*6<TO<-da5SbdbH2U-)*1+z~&FnXWPDK23s5$qGSXNb=x|LwtVRg|;N(#;fW~-^W
z`NH`nlm!b5RD8>QU^z>G$uNp>{h;!Q%0}b~qN~DZukmvVYxI#eb)+0-9GKMcbnB*&
zl>#<gfq=J$@(SsOquin!QdLjv28}6WFUH-11PrOoW$1;h#p-<0xB#jPv(yDC?<00W
z=OgzqB6uI9L`a;vmsRNUYn)Ab at NP(@0kxY3%?UvXGcx$wBu`m=d$A(VU{vszNs^=b
zaswqQq2?g3-y>`>G;#{tHftqF1f6TXtkL*?qUJ*)Rgw5A0FPQ{j7?L?HVQp)7P=yo
zQ>&5d5Zx>=4FISkUN0QFR^2aFxE4FXseliKjTnAaH+rzkVlEVeQc=0j#0Y@#v=9@%
zh0tEmKp-^55d|`sds3(pi)UusAhf?nOQ>hIFriI6mEJMNW*q;t8AXz at 6~PHtCn=-Q
zMieN^muS@?CwSt(3x{4H>{!Mu?D5dGqomP)>5u9Vst)728k;&m1v$Yd##a#mgoJ4}
zY{_JxQGfsdR)aHEB at 2l#m_4Dw<%1j2mkO-H36bn%I+Ag{J;80)H>FtSE$s+9EWNfO
zV)!^6HV15wZ27svBh7!}g3hE4F~gjN*-6<+6DQKy2n at s*r(o_5n4bA)0LYjs^gCFA
zqyLqDw+50fx|TqKk4W9Va=`hj3P28W+Z&udTaD9G$A&NpHf2zhBEBSQE*nkM1Zfw=
zo7)JQbaE&}g~Zv?L{u~&;qFvCS)gp94J^B*DER5AM5qvEqMJsj#!Gmxp;M1<`c=)O
zx=~bU5%;O7qJkz^vhvrMn5Ww8>S`S}pVLh|IbqImBo{R@$CMOR^mLQd2JtxS8#_q4
zG{~qC{HtyZGI8cQ8$mFojf&i5L)({|R)R1IJG_L1MED=`h5O*hX9>w2Wcr=ktDbr=
zr0_S&@|-1AFuBf4CQp_%`RJ?lMZkb?24`~rBO_HaF@@TwvG at NaL;c6r`yZQ$_%L1%
zi~h_!u#uyZkl{XtQIY;Z;(wFVQVi$+sjd0{1~eX(2PW}9y<nhTwEq8^le<Mkw0%FH
z-2b)xt&+(__Wlt+9C>8l!zbVNb4vY#8+*r9b=h#j{I7?^MdxRA?{KL-y8jy;U;HMn
z*ZrAG)-3st>*tBPf1P>e=H7#nyL~WxZS1tmznXW(rs|@-b1Od>ecRTx*IvJM_^lKA
zzxsUr!5@!2@%>rHw*9vM3uhhk>xl0+MjZC^IFJ#Mb;HY-eD>kWx66jx|BUQ4 at R3n(
zMO<_1iGvG!kN!^^WpLJkeOI)7ZOK<XE^b)q- at j?(bA^WnWc4g+w{lV89j_erKN~sf
z;ohr?kLz;DmNsoZUS_}f?S1F=yxu?ixoQ9UCi#lGdm_K7?(jv_JGZ^-`uW?7rwq(p
z9rNMr6`!wv_KOaeJNFE(?AYb8(}xY2)8>$OX0N)9Ph|9Sw14oeBQKsZI_0B0-|d(5
zY5(w>`_KOL_2g%!|9QsUuUGx@{EFYd86Q{r#_ca{SdhD;L%{XvMKPT!r`-SacZa^}
z_rj?cI^utbc+l11q8T5Zapi0C4%~J3t0#0nCF-&(=a1N!lKHxA&7>_==M+5F<=lMR
zkY6rrKXz|Knf>O^>V95x-jAO&jM%s!K4E7>c8{laMpw^RaNLcb=0215Lw<4Ju1Q;!
zAAgzuZF2v|dUl`fj2#jGX#cLA`gfi%?aH~Gcf4`^yaT)1Cv_UWI`i9KJ=t^1`&Y$1
zJ-Mdx(ZZ9rz8B~{<@|#y*Z(VG at kjs8O#k<kCl at 4mFK+YO?uwMj1;^j9ukEuxJ$7VZ
z!kKdixCXc`czod%t9B=!ch9S%$3J|{=hcY|yw!^zyT!d|R*9!*!FL<oy*pQTKJW52
z at 9zBJ^Y5PC at N(JvQ}2oR?Tt-=>6f`ax~=G|irDl2UH0$2hj$-Z_}qG@?S at VF-TO}O
zy1r}M1t#5NyQSfYK{K{&EZuP6Q)Nq0`z<%0x9^O;eHV^>>+Jnq7C7!J+4<Fm&pV%W
z?0I*dQq}jxO?j719l!P3s4rY``JXO-t!<YF<BmkV{P5V#rQgp_-rD`;EwgqM>`t3@
zQOAc|d$)Y}N2d$+4peUL^xCMDhu1IfJwAQl^o6+(Ju>76Tlq&jZrb=^zvxqc*>($x
z*8gT0XjuBcuGa2 at 8{kuHHH}yPfZ0&`e?*#I|0ktGNvPKRFJ#N3{0T$<w~N#Cf3KN+
zBR)CnhPSu>`@_1^A9~!o;Ioa7mtNyKCM)OOthb7?0_#^^mQc9qgyXLGwX~wg-0``;
zUf1K79%Y at MTkvt_-H$)^>Z4=#zq;?yci*pjD7DMjhwm&{_scU4qxQaX=Fc}BJkqc0
zgQM;{5}95XSo8F!wa1*;q0 at O=YWr?l)#jbAOZVM)@u7!~oRYJyYt2VH79M`QAh!6W
zjb%MP8MS+QpT*10n3U9Gai1R!mE3Ubl7Xi at m%by=clEDTBVKG+df`t4r`)^Bb$sWg
zKXpq=8+}aK`X0YOKg7Q9#m7JU?a;+z`z?KKNm>W at nePnFelOEAd&wEoTs_Y}CqL;i
z$LgO}e)z)j+L~^w&zhS3=*26Z_;g|4YY(_e>QZvY-}`+3+|QqS_wJkv9^7B+jEf!|
zx#E_7r(C%DrfyHY_tx;LS*IRw_domEM-KMcw)WABGSfReerQ|KIWa>L=3ITku+9%0
zcjoYy%M&i?bJw<Z_doP)l>d^~x__Sf^L^j^_vx#5^t^i4g180Mk0<x(zW?eMdv8Cq
zs87!Q7nU7+^+_K+9&zfmy(Vsc<=oNzF0H%l{_OhiN0!b at xNqh=McwbUEjhmXjYH1A
zV$SNcaaC9R)aiv;b+w=Mx#GJ$ofn+j_4i3JJ6`_%)6#~{-5=dP{^q-`dah$#pZ(9S
zs@!&Z&27^+bm%|h{B51<_qB6An;CuQf%+E)e${*Ig!+XyKl{c-Pi^XZ-}<|^&c3JM
zm#X5(KR?^>cJHUgt>|)W{@X+D&2~Mt`=bxzVlO<nZ^QL-&UkLcub133C8sd%+N&O&
zwr2g8gJyks^P6{+-#=z{(Tf`f9J=T}_Xhi=^A;7o?5J7l|D&|);w|fsNjqo%nv0ct
z-nrt0iR%ZZ-v4oGQsfC^pQ&87`Ih#D1$}B?|M7{FuA2N)e7WtB)q9?Me0_KC1B*7F
zTec;6<gh{K4ZC3N!nV(jN<Z_ugV(x}CY^rs_lM43v+1swcP3Up*KJwfU4{1)e0hHK
z8#AsQ`^)>k_nP*_xVyW*HG1>Y>DSCpyY_}{fAoL(_a|?0?%iZNwO8*ogKsZevn_w<
zoEvg-FMDxk)DySFRzLLee-7OD((dnKw{H3My-lUPaxabU5&cc>arwP(TyfIwjDdZ-
zUi0`VzZJyxihBLS)g2B!|KzSGpSx<+lWp!gzdrhyl4EzH(Ei_8Pr}mwaJ1Yc#m{tC
zDE*(BmM+KtCyz`?Z>|4-lr=x?J`DZe_HL&C->jK@{KCEwKkVIq*4T&qkKRyTpK$l&
ztdhPDe0}c6?N>$L?(J}CL3IC`0d4QRr1RX}4{c6dw&%?C-M266zdW`}*3 at Uxrwo32
zV}8-qi7(d`?cMdkcl#gh7X4A+^vT`(cl_<}!5=eTJ2ILs0ekwdIz8fGk62&l6}Q}Y
z<)qH89p5he*H=d(iwADMZb8JYTRwN(vp#l4`%{lU at 7}EV7bY$~_VNQ)pR at C$BcI%H
z;=g+oCwEAC{POg at SD$fv+EZ)Bb at Ihs@k-}g+TQfUkGtRKd3MjUYG=nxvwgjAcKtnF
z_VjPJr1!U5=f-dRb?>%y8wS1Oo^pkw%Cq<8k5Z3+qf7Re^Wz^V`gX-1-K(y9qVBOF
zCk3Kk8g=H}nV(!bw(Bz+%3p2w)8*eLTs`c;$ZhW*+O}fbn^(V<wEF(<4y=CY_7@`l
z?03q%dmlc3^q!f2KKj7NH$~nUy>;6Bi-(^4$>OhSPVD|^Qtw^oEx)qIS8X#By1w;<
zcg&IDy&r#R_g7cF<ZIvQnTU<O;?7T*T6<Q-(8|~I3%;n#I)49SZ+ at P!G_m(xsn<nb
zcXw{5$!({MzjScJuE=Eri+<X5VW*wXw*Pwj2jAW0nc8Mt at AK~ue0A+L-S%F6epSZn
zoiool)aKEHXZ&}5(X=;*{*d%R*0cFb-k5h<#c2({P5JSc4~EosKCXQF)WM^Yx1H9j
zZqCCcCyn29_pYqR_72>2ny1%ww@;hZuhUOGuIs;i%Z!HQMf0z}J?)21AKVz@`f2;5
zyEm0>IQy0J|G4hLtnaVBsm+By{5NXt6HDLxZ|&%dx7IwHJZ;DIe+*vzk#p=@13H#0
z%bD3{&&X5GKD%eaQ|Ev5ZeRE2l4rlV`seC|4{v|;wqqWzs2r5*wC%~g{P&vCb6@=a
z(_`8kesfFi*?aeVz4-g`2kw7u*p|8-Irj~pGJWT7r++o`$K<XtrzREDPW`G~-iz;g
zhdejr?Lq6mOdom7pVjWs2TmIPdDrM|zjU60{QZAJ2md94ZZSw$`rmI~6tc*hMgRCX
zl>SeKVoy^2hvboIt at pnML1+v96psGyLiPXKuTPs?JhNBFACCCP-+1lik9O*M>y<Y-
zCtuU^gkI-g7&&y?>Dz|hzrFp$3#*b}?lE%xX`}6%t9EaSF4=ZXrwgl6Qm(7=-M{(^
z*Q at 8He*F4xuRmUY=Fg{eUGwwD!xzk~^uIRxw~q(x^^HFK<tKk8)-JC2*YbNOoHwid
zkNX$g^G5fVE}Ysh?BT~hxw}twanV<qRr$H^_WU;P!?Lc^9-6ZLmFm2c|NGsxj<$}e
zUyt53x9pC-6F-0Nl*xb2>@{b8Lf7d}%&GnPu4j&0wJ+<L@{W6MsQcl(6MlT)$?+2w
zf7fP1`L78VowY7`_ov%-K9!o*_3H8`Z#!YDf6BQ##xCzXXwJN=`rcai)<+!|EIRqw
zhh|LZvTFOAQK!rgl$5={`Pby)pJIAm5?`|F<oe44w{Pj|>uj$*b>)5YkK}$-&_Am9
zp at _TMTsM40%8;uT9q$;pp!*qBpRK)NP5XhjpS`gCgSXhG_B`&ytW$fGElIpEZf56S
zE_{F0zuwNcBI@|-&m4XKm$%iAobze<!*4&8w!HU(=yP7!dF|m()|@mfaL?M;rv3NK
zCB6JleEZ&_n>+rt`q8zi+4tV~>35GU7<AjHRac#`Z%5I2i_d&*^K+?{E6Y#2X4?8+
z51bLGdvNblBhNmrHoyDk8_r(2Fz3b_AL`J3<YO0gzG-*|NZR}4*9SKQCe7Xd%G>+T
ztKDCn+-2rXzK=V+^4yLm+7G^_)9Doj7oL#*-ORL_A#u*4f1hyp%>%#f=r;KCq0wVY
zeD5L)wrbZF6vV%&tFZLH-BW3ExO|ZJ(xh!bDE*(7s?Yxi|4(cF-(SKJ;pqR*xc^7B
z{~sK^*SG8Lj~?6>b<DKn1!cLjFPoS>=<8KkxAy8hY|dowO%n%pyLEg{&tEp~>a+5U
z2^S1l at a*KN&pdeWxMjQ3T;H5oa`Ci}Jg<WN|1b9=|Ju;!){Yk+88+e1*Z#O^Z2R<4
z>yAV&_~oW^BZ>#^E<Pb**S?L<E&k#%aQ_efGt!|XZ!PZL_sI^uZ#^~T)~p^sX8-VZ
zT>GJ)%*~wqS?@~%BbTKth*{nx<(lJqY&(9=3-`Zv<>XIxCv+{$?fcjXo!;1eWbKOC
zTl?gF_v%51 at 4v;DtbaUp;O5u6U(oNBO)t)>JSp+z_a5n7x#IGyb+_J3{Qs{GKDO(Z
z^$*N`H9Df>{!d3O-*8XVF&F$)IJ)4-=EOa>Rh at Xswxy*G_lNggy`-=@?Zi1{nbX!z
z>vT=+fA=MCjIJCOxu<R1SnoIftu>4L|L43_n<Do4+xN9SwmtI6(MP6zFl%YX;?vee
zeg8)F<!y2wsh>6L(PM7B?yS3>=+GxJb$P$8NjarE+N|8T<E2Y>#oYM(s=Ze}e9HsT
z1KM at XipVbCvFGxk50_nY=t|#ludd80JLSMBAKZOP_WR#0zHiL5dltO7>#5AAvfq3D
zv8lOdpV#My*iri~+Zx|<r}A}|Rqs6K$!^F7_y2P_-%P)K-XoqJ*Llir-kzQJ{GSD*
zj*qx^Y2;;nmevipZrF9 at Pc0j>H8%RG+j{?J^kom!KiU8EyLbFn7cuF2Wl#4>@6SK(
zhRd^`=z7-Dg-c784Y<u6xnTHj3pf6L`lAzfj{dZK`xUA6k1vdz_vWC)`Zp8rNp+?^
z)8 at Btrxsq8xb>75uB_aY-+o=}iFX#eOBTQQRYAv(|MlFK?`KaxIq#Oq?_T=I({r|e
zbot=-uid)#VC}m1;?s(DKXd#Uef!sqy<*4y3r}@yzJA9EgTDRt&;Az|Pblhn_`7aV
zGyflZZvjwM)-?=Y8flPH5H3h}cZbp--Ee_Rmt0c15m9NSltvUKm2M;?m6VW at 7BG+y
zf&W~>aUACvXWnP#oA-Y`aPB#0 at 4a@cz1G at muU*fQ&Q(a%cxey_uj^q1__{wO0gs>a
zytjo9D`B at Q4lxyQ6-qPZiqA7{;lib6V8=u_E6dOna{&jJ!E?61i&%%ITO9F#myi7O
zDS>NX8bo4)w{V{OKh>=Lko^B;s>WZENq->!fpx>*=>Nb1GOnNJzx*X!|5>2#$bUQ_
z4!pzhU&;>$5a2`OSpSa|#sPuRrI)Y;nNs_Dr<&9ot<6Yut=}65kfZt&mBk277-<sa
zAcD*+9|v6?88T*)6OQPzL5mSw1#?Y$G~CWdYE?SNF~8+s6o<26Y>&@Xzj^@A at Bb-=
zgBSQ;bo~(j!{=8XjsPA`b^p`3{{#N#<mLNz{}&EEU`zO)<9~k|(|;b|JN*Cc{0}7l
zWBo5qQRy at UukB#W;ntIY$2qQwtWwBCoOmJI=ye3w39h2z-X`Tdt9*7k{nFJdeKI`n
zGB4m>$&9$UEpj^|nStpPbutFSwhZ2Dh*yMJMw!8_C)IvNLF&=l=<ocKUhdG<r|npZ
zVVq`Ju1D1PV9bC3VUwYvz>|N}$Fha1siSub=8r;?&f($;Dx=nEReB*~SF6VCW4(Au
zYHIfrqqv9ing_X;ZMXFSYji_Yy2V at pmD&6}^ejuVta)s5VvlEG#DX$;WT&C$<md<4
zxpm{M3XW1ALsMI0BhtXZY`SF2HN%H86$)%m74P^Y*lSm*lo;0saOdE}Yx^!^&#uHV
zMZ&6D5r!zN^!WV!-5E5o_Rfp>Vg$x9k*!ixhy)Rymcgf2{M0uxt}Sp;pnk&kF%Bw%
z2Fxx#Jz*k6`z-G%4GYQP=$PCDdyPD_Zlg&W6PocMRq_H4a<<?+mZi0qX%DjkuO+GZ
z${L4ZaOu4rbTp)3e0hs<-1B8q<I?8zrop*XAM|ZM;oE^#sr0gTY&TIIIZMK3pz=J{
zk%*$1?W=ZKGzRZRLs$6NN68g7u4sadnmc_1GYjXZW}CFaFCvvMZ(On>$g-iiedaaP
z_IclQb6uzL_()c)OC%-Y<LqLMl<+q<Fp(E=Ko4-Wh%Jeu5Vcuz26J5=zKVFA-%y;I
zkumW2s@&Bx3YZe}Ei>WuyVO%It`c))dK5%Z5)_05y=MbrVXHj1PxAy?tMfR!HuuWk
z9Kd`ZSF3}J?3lA)UMoDRQBwB$O`w(e5FKmzGO``dDi_(ni!H1;@*TZt$)YeEc9n5g
z`MTP0X(y}ML5p|K9836&%mY5K=IGZ`XI_!a6jRBAWb3kYns!E_cQ`H0UtVkMi}hcn
z3|Z~As=iuZe<#P_e%qVrB4T~Vr`SxHYdI};xwJ~OxZz6U1v(An9Sz#+ba6!Q9!-Q+
zZQ)cuH>m8E8`L4V{oxinR9EqdapVjkCyK4xBC0xM<n>!T##j6eS&zN at x?wjA3VPj>
zH8*W(><vvNh_8k2ET%ZPytup+uSB6L8Gi}UYItXI at a$`cG at 2Zb3P7pce?UjReQq%3
z0!>cFeMvZ1{#)C)ACmuE at Hy9q4ZvTT0rH3PA2{sqSN2~nPENoi at KgT(d2#-yA$~;u
zGoAGRf%$*%@xOI}g`OVAWwstjl8x~To8%`i1|oujjDzpx1uaUU&>CecvC=TCG<JbY
zd?J08Gtl2>SllCmjlNCZ>Kq at Rf3!BkR<*xCd73{oC>s|ie0}%k<WAk*!2(`Uhva9S
zqTKvYEYx7xMTKC~XmnJF$kbN;8 at _AROZ%(!X!tF%iXNm`tzN{}Xs0fZ;B}h at 3{E5W
z#<o!avp at EXozj{e)2 at bG#pYm?#9O6?__P{((Pg)1OO%+s)i?DzW4Uo*dx#&a6!r<F
z&||5h+0w at 3T3Fy<uYLvkii+yX<V)J%HnsJ)qzrg(KA^pITC5RpqW4)=54N;!saY)Q
zxFzD~i+&wsGOXB=8QC0(7y-G^yx2ufuKs%VvCY7lv|IBFAm*^EZT?$1m~^?hCc53Z
zo#-2(fgX4H;;`soe*Th=BnapOyh`1OU{#`?N>$vE7Sp2 at +BYd*WDE&(UkI+r_|&RN
zqx)>`UBXUMz5p)7Jr7e8>3k7AJ<>Kg#_*yKzG%pewMKl7l&Cxk<N6Ic0uk1j2oop`
z{X?@2-Q|o+BWaJ3X0{CtcMD#GIAqQ*Am5G(TSg-yS(6R2lA*rzp)pgWT}8R|@r_pq
z16RpzBoa;=)|&=qbi8zSMh--kW<|7XYPcUZ??Q2Rk}YcPd^#S1?7NEnVrdj+W at hIC
zrDB{kiG%Z^p&jYsyNmM)w;-l-vkQbB(~D1N=+MzM#e&rGIdBSn)%@DF9^bp-OsK>s
z+_gM!l<Q^WW$ut8gjJ)fg(h`%<EkcgrGke%nrI#As=&F24hnJ+H$#y^D+SgmQxKu5
z;$2I?!pX!?yTy^k;k0IhkII)>_zV*6#HK#W8L7}NVJ4dt_Q#s47SIOmzAs5%wZnDY
zv at X+*d)M;*S&8k0AeLLlY+G(DVV;9QtbMf-3o`Z0oD3y;Us4x`;DbS-f<&0u-EyRa
zb7XalRPh!XSM4J;ny25XX1=R5<lET|@J?*7hgGEF?C#2 at JjQn$DkmPp!^&VV%gjpR
zip`8Xb18}^{vryZ-@~@mW!dUS(v at e7>cssV_IdfveMZ^EyG+xCCjb85Eb at OPBYsH!
zf6 at OB*Qovq{zpFkQ2zgB|94=z_|Nm7egw7u<1jxW|7DKlf4nbz{zqHAN4e2hY6{HG
zqbD~b%&9>A%K0ejOon^nnVAH!nF&&|PX4I15_mLw_|GYAlVzOnYSq+;n>dK%6`5 at l
z<R7sn<SQ?@yQGY{Rhthcs;O->;NJ1RGwFM0ef`dY2l9R~{sED${zr8b84{_8d4!+}
z{?WV$CD)#2>_<<YZ1x6H%Q5HP2vpaOEmLvg4avBqGF__^${^0CB2$qP8L_@$IQ}UW
zi!L{?7%Yco&Nr`9FpyOc9i$>HFDS+`_4Fdn$8Lm;P49~XF&W*mP3PKr)u{1 at vWOr?
zIkJhLHOAE6Eo<O~YAZ`g=A|@ee%3Vf;RqUI4bIYkWz(5Q9(>uFpr|?-a{D~VCTVnB
zMy#1~ukY>rEL#5&N-4c!97ZO+%R73wVjGpV3Yph;Wlb3nboF26Am*GMElwUJv53{>
zxQLmhvUBci>20oHZK|DfJ*PG{b}sGqk#MN;jZyHDzfnbH%hFI{)v_A^%L~@rm%-&T
z(q1 at +*_=v8QZdLC^~wF*=g(MgXDRwli_WdOtrXHCd6Yy|`sG|ll*LPz6Ra!licmVe
zw^y24OD1E$e)YLLFERo;?7Z3yw{uPp^t_qQR4`A(U(Rn=XiQW#-#Uvl-Yl|da${zj
zm{*}B5b65+S09KZ$`$=^(99cp;vVv at sL&wXWzFLu4sUE}N|a5nGECflL2GJqo(f@>
zLlB3&1`*lEBz at Ck<nEBeeMJyk3BO&gwPl0I0}0A&J)MX>_Hor`H2SBu5xiH4oi}U=
zi(`$;xvkS`%0C-77cZQWsGhh%62C{@tdG;p)mf?&o!^jwoqq~8B20SW<3zw~?;7$8
zXkz2HnGMBRZgfwv!zxBzSwt{gPg9Iks$9BKi7&`<JyPpJhliK+J%16V9g{ZcMNjTG
z#cx%ga1G at 3n9OrLde6%DIxPOo&4q;}7)D9Uwe#-dLUD=OyJG<(dI;-cXnp-FABv`j
zYFVc3iA+AKdTY$|ZN(6sN#)uNxe!<4%O`EuuWlt*S$v9OPdWqKyR*ivagIa=TIe69
zj2R^@n>C^Flvq5WIvz~qg^U~<;c{oAz1p#~i5EO?ZiTzI>GYu-AlgZgg~kOMZl8~E
zd)mLLGw?(5|7bDvUmE*^7xxe4Ki9YCe{*nf|J?r at j=I17`Vsk0aU%cal}=wKY^`@6
z&0v+?RLM_gV2fb9`jpj?COHDI^}ww^@@E^7Wv|jJ%baGneVa-0jDR=NnCITrOe#F$
zVAf|dL1gM>YMW9vXnCDc{Z#2FmoeW}*YHnzf9Tw;-?5Up4Y|6{tafXV1!;t6Y6Jz;
zwpHRlupZH2JtA{J6phBX^MVoYg%YPAvjE)ycIZH`M=e)TS6 at -P;$)(y!@`|2>S71P
z?ac#tS06BFZO<T)1s6M>3Vdc+tu|I7g3K=Vg5i<#RB&av$=d2GBb{h{UREHj?AH+N
zD&+2&)KxCz4%(nXj2Nj4k<ZOxftO*<-g<-yV``3X&Zu!c99^DqUEyhHy+$ZIcSi{`
zB$cLa7ZWMe`kZs4&?2!*;;eJNJ^K2X5JqCLPAN8Oa3}7)PW$M<Xt(vr0-PInSvL)&
z71ZzHiMwCV?Ea+HE=bI=)yE-HCa9T3G<uO%aK5AAqlKxAn|36*S at D7GmO~_=StmWc
z{;17J8ik1GX;k6UAj=U%mu$v8o9P=Vae-)q@%KHm5*x<bLD>%I;W;-OC#obZ)*}h7
z+&2;I8*ilYHo!Z(<5g0K=vW2xFT(oWPz-uiP%T4bWr%27 at FH%~#Uu#1cip;M+t+hu
zEDyJYh4}PNjGai|5>j%{0CD!bGUC~|Q=z#`JW{M8^gRe{*{8RYe2TJ$5rX{3AS)r`
z#)XB9O3WKbj|OxYL}&(cB5&YQcs%B8*s0y`qvH-gox|c|x9MB;iv3~F?dK)0OJX&8
z^9)n6mCVI*hRCmJGt$+_o;~H_fqH7ET801px*(lxqVZWIqje`*mz=g8JM%O|!yI<p
zj|$Do4^C6hxL%8o$dPNjsTFfO4 at Uyp*)Fr5mMl3?zgB8}o8FrtbAo4%;)dPBeZN%2
zvmZx1X>G*(G7`d-i62*QM(YpgcQ(J7-B<O;A>(qCdH$l(3qy9w*iQi}rxq}Ud!2*B
zqdFDKp<2~znf*gt?Pq*G);{`LV^zO*EQ2FgD|o4kEdtR~bz5E}a;%SCNXX8*=5&Ts
ze4Y~FK#LpaGpfo>ej3y^jO%b-{kNKVepinCko*T$tvf+}<fNzXC-X=0pO5dG^Pf5S
zf$OLJ=lj_F at 4Eho{P#SO{{~8gR)lQ_+ at +<$)tFe`m#y>=hzit$)a4&MvDJ(kzK1J!
zIx9E#mhxQ2)u-E<aih7ucBA1#B#GC~W^IE}ebsnmfPd`_Dq at 6u29jHyC7s4eFVoJ5
z51Cd;M9E*LPkNmK>)Gl|g6&%|)R<?zVlKM(#tBDFEbu-Hie~JC4I49K4=N)P_ew)2
zT$*%30wIJjQ7OCrZ59nIRK6Q)mvAB%?`FSlm%T3XZY6eVDR6XD|KoKD#M0o*6yy}>
z&a at fDinv9zr6~a?XYR~&9Qu7S>BUvbbHknNVkE5(l2?|O2fPAhq30Np=h>clu!vWs
zNZ$vnS`1XAQBBqZ!TrUi))<_6l3KyI*jpEC7&UHc>(jI2o?i56*qlU`6xfu`$G^gg
zq=#Xep at kbBjWcOM+I$+LMIfzROOwcdVE1|dR)JZ9%e?Rl4aQTtt}Wex(;_DJr60U7
zZEm|>DqwS_d7Nd%5Se!;zeP_gU_S=kaM*{+pzQL~kI7kkrGaE+7gknFR<HCe6XG~@
zs%TzrUTtf*jUIfXH9lJ^F9)ImbuRCXn5Q_`(jjRbd=710YfVs`Y&*xONQ<P<w1_3R
z at lG#t*;eTD7iZ*Jlnn_hlSIT=i)dawNa^TDZlRtv-CLtv*M9Tai|;LSDQ^~&__fAl
zTwU at J`_=@$7(?|UHu{j+U1A#Fx|PJpQjhk4rv8Q}clDXv(^64t>SH(sl9jZD6Is!x
zd!0PFAZOZo7~h5lYJ@{?d#&-ly`@Nfw%QeaCoCPeOlVy*QJW4y$KSV`bfF~7KFRBI
zS-H<easy1at0VXLK`FGX`AzTpsa(A_NY5=|Sjn#N4-Kb!Mk520IXv41{7K&2Sm$;K
z3vpU+J8RF#6LdZ};;B}d`^6Y at D+raepfPu#zbJK0v*=^yLCiTBKKA)V=j)}7G^L48
z9`6hpau at op(#M9-)C)03VrWZ4y67`LJ|9V!uBkLJz4N5|`Lt5PfvMA at 7R&K%YsR~A
zx0H#)6<(<%$SuA5fG2dtH+WOGv)ujugU|{jZt-h^)gsudiTqHR5m|a{)Y-tNL435L
zAGO%`B=Pqs7+Eg(=!AN%m}Hmq95l_Ns2Ir0pHiZWbC-D5jr06kB;$1m=hH<Rg{xS}
zb8V|j3hTNYq#LmVZ at X~n at wffoq#>Cge%`gEIXkK?1!wucsb%>g`ELpA at NMqo$OioU
z73uQ_@}G;7|C{wcTpXOhlAxdV|G$FlKMjKbLIB|bb3PD2V30L32n0X=j{&&h(?Gz$
z4R?oM5`f?DT_hk7+R6QUVSdk at 2n0fX4g#sqgFw1H7$9jH3=lRh1_<@!{yn%8cLETI
z=ott!_7Vd$-DCr at yAK0to!lulAPIOpCt<($gu}OjKubdypaTHz+gs~L;LAXu0r*XY
z0b&Be6HyX at n2zK6LwI<e;CX=GC;5ZN at n_&q;7*=@Cp^5qPSW|k=kKM at 1Oj2#fIy0W
z6vx-_04}kBZ&Wy4^ngI7 at VfdMSKrIS34E0w$o7O59@>B`;IMokkofmtzIHo-|CS!$
zH1Z?q!{dU-@%0U-jUP?_>%4sZP6IlM<B!V!HO#l~{}b46<AQ&405=?=;sGEKCvYQt
zdq)9o+ra%92!syY|3QubzCW*j6azoh{ySUzt?PgJ_`ccyfs>z`<LCJQKSBpT(EkG=
zTS+QQf<T4s{3wx2K(5ZX%IdmmI9a-S0NYK2BrTlGpkR3i;6xvFVB=D+%N<Y=5D4jb
z(5OpO(f+g!p{SD|#n@?K&V3YgJakTEYmi2W1o{95^+1UvE2az{V*LG=V6Ejl*wqRX
z0W!4#D2S(8P)C(7G0RdDq_ at x@&>$u at zFrBTG52oep7j*-b(aZACap4kPG9 at 92DYB$
z(c`;C(02K)AW3j<O~p;q{f+G6_kRA4s&o(dZ}gImzD|9o)ZK|oNniKEmNsUNrmgy}
zf=R*FK0yJAurxx)?7Wgvrw~PrS^Dcak>WCgR9X|Ccma|3@=^-KD3B|gk1v{A;p`Oe
zIU9U5^cTabwa60BnO>e`QcqesQ=YI_w^e>#lvgy$16LlLZDnO({^s)~_My;r>f8i!
zQYczVvW(#ytaNh^ntP?sh0%Im*?*S1l!_VS%;EkCj2lew`Wmri9Q*x<`v%cOnA~2c
zy#`y0YsKtsaUS+<KPH)ZS5X$iv2U)9+<bRsgi3;!MTz8D^dJ{4*Mo{nPclg9<`-X9
zH;K@)nIBjprhL4MUVayYO=pfB<<fip3f7v=mv|_s<kD&jdLWb=&+^=Le3Vr2vtihz
z?K}ZQ=kl!|zsaIX@>g^`C5N?Ft(Tyc>!&4A*sk3;zc&W1^3<KWv<}6~>Uk^^AW at 6P
zCTVTdBhBShOqv9}#PANB3NoI;pO^@1>g%*^*u3FjZ7|yuHYmn}LT>MX*d&G;D;IoA
z;Yoj at aynH+M2f_QTIDO0mSGBmC|l7Yl!uh#nY(%6U<#P+DJm;QU$>z9JmKfvR_#tD
zOE=61W9EA}W=At4vS?A>N2(L8yByQkhw<rb at 4ys6lY($seQFgMVM5#_`Q+o<&MTvM
zt#m~CUTEaBniyD*jL*pAP`)@Vq>#k#za#pxt7N_C!wS(Y%el`RyX)S=yPUU%)wmWv
zc2O7XP!D8A>ghdQxpc<2w~bE3cCs)e+Wz4X=D`lIlx`1U at 7ewIYR)NGhTL8Gm#%Nc
z3JAnSGR-(>Z_0Moipz9ddj(9XxF_4*zgp+xZTgW?wd=0(*vE<cVEP?e9ilEqT8oko
zPh;s0C^#vNB8!~v_{wR+Mm4o{bZ&9jI_l|}^1q?Q8kU;kXc=ln9C|Bp+gmtBiH at jh
z at PMaoU+45LB?2la_?c~WED8T4Ton909l#%w|JG1@=P$cT{`p~`KkEPS{^tBwPHx~x
z=%4++f1m~Uj{LU(lC?NI|M?&Q5jcSvh2Y5kx0<RdM|g?6&A;;s9`2*?zM5>g>~Ib~
zVcjh?WK8Pv=o)z$9o#E;?6Qed`Q|$8t4}PoEhuPcq~a#j8MT=>BOGN7NFCzGMn(jB
zYLdL_0rq^g;)~myvhb#6ORQ`6L)sRZ`JBs{Z5_I}rKP1y1Y~4nH|H1DyL!u4$2_X4
zg(+?h4-fP6 at Q^;b`P59Ic`(a&|4x}{k*4vEPu-(OJ(2Mg2r- at h$cl4XObJZP%vXEk
zT?WeayPsRx3brzbhRns$u!I2rEg`%@Vt$qN;xTeXtg;fiI&G~u6oT)$ZdDJA0hwzr
zB7APjn5~j3 at -kj&9y4^fzn?^%5sAIoUQR?ShpnQl%)02&c#WR#RKv7Jo*1ZRVw6cq
z*+JBcON=9Z0gBXVd;LCbNYKYCzI&rBEg93(-A<E!gx7XrVm_>{w#9bL&(9|(pY`2+
zcq42q66=93OAjmSMB)AW_aE++J$d5qxb`NAn}~=A*z<nWbRAuB@?+ElN196MLl2Nf
z1rba7+b~O2X`hmIax1ZY3*Dtc)x4%q6qQ$f7{t*m8Tj`+iyAt}^smoIBx8T{kF13V
zS=ORk(5|9)(#z|jKgFomYtrw)z-BJrNts at KCE9fXA<^X3+n2XYu$;Ca?p&_AVppUa
zEv3&o$r-BV=go&QEatY4)Nav+C9tu+!o(-e;pb`2R37)+4Tj{H?=0a#o_kB*Dsp`2
zW2L(!Gc6fW#88_tU2e(q$;bDGS`la#8#|9r`%)LZqO!&nX>VPy5C4G5QZ3bGKAy3q
zG>s?gr9pb~;aZPELh+`xR5qB;X;;2RkBHD2EjFyLp?YJa=J`5DQz&71$Gf-BbY~Ge
zsrgyXP(sVcm2FB~oGamTi`b3Sa;-J87e?Mtu?f{^UJ*@z^}h{85%43waIv<*Wf~hB
zIXG;tgpBE?S at 9x%BBqmdJB_39HhSkAs27p=IzKYz)<qOd-J5z;O^D04)w$2J#w~YX
zcr7)c6ZbuhUrw<vtyKsk+RuzX$C4hws3mJ(-H01hw;=m;jU)7so>(B2E4PE1gK9Hg
zP4W1;ATXmlp}S(fjA+IfAk+7aYD8f<>xBMf6VD#&eDo83fl%35?8c6F0XD at 7VL1oI
z)evSw-B-04RBg^>WK)&FvXmOj6vVe%JyjqGev{FtLu>iim at 2n$ZoI<dwY=0gbLEol
zEcW9e8=KvieQoR5=MfL96{y+ExONZ(<JzEQTbz1+EP|nhUgvkz7NuiLuF1{o*uf!#
z&k+Edy$v?;+*a8A2ukgSSMBP3NoR~94<AX{t+-QDgx85JF1wUES%2V)^wA4374^eP
zON+n7E*4%LH+J>)C4pN(N*ZyuZmYjCWjuQ}v)<jSQiQv7LL+SIf|oN#|ImC7nZARn
z3<dE8eSS at o)a-s6cFvp@`p$rx=DJ0~4P*w2lo|?xmaCTUF;^yE1ooK@)KTeng(2(K
z_;0Svg%VV;yb@<9#~9qqVQDnY7woF;>`8kXj8Z3RV%CJ{?|BLn(`Sm7i>0kTvy*^;
z_%d$1q#kwSdx95IT8SJ*Zw at L?r<Ak=$ewY0^Oyy}G|(ZMud at U>;3)@bZwAXN2!1jR
zWLkd?m;Dqb%zz3KXftI6Q at sS)p*n^6*ZwoaZ*2Qlu<L&&|N9!|e?a!bllY<b|8URz
zzrFzI588iDUJl-G=6`ei9RK@=>i;|KKOvCx*ZaRBVV#WsIml^TB5gbH at G$VUv#WA1
z&mqe1ib_&|Zb&^3&%9TsiH9QF$RsXjNqM>?-ASDg|FsflCJDL%)3c_ck|N9Q=o0;y
z`S+|2DPxa-85lP_>?@&!G@{O)Ydhi#`vMDIcVG-k#g~BDf12<0QJt?f!d`+ at hg|Nq
zT)OK^^{9j|WpzCeIh#5Iqc0YTI$u97A6uI0>eOC3mSNv)PUail%LBgDl*9GeLHY8g
zsA`#(7w$T~s=W|Q^ugvHQ5ha)m{-lG_RJ?8xK_hc(ITVutT*eQi{LBJHjio{4{66+
zaouu=hg2D|EcT}1H<B#0%uh3fV_tXUsUs!TMiFMUtg2+kQAQBDPZ}oZWAT8%g>g@#
z_Y%hb`&p37b<XRvUa7Wkr<(KDmZcum#e<~f8#0j`xcW-=jqI?K$MrI^d03uZqB3H|
zuUnz~WZEYqmlp5{f%r+aW4&KlhfCq30%oEL_4@;&Y<l$JPD;q@)-G4dS#+93m{CPN
z+JeW<xkMr7Q7yVjF56A+6j=7pX--ifWfdBkXB1yv>T2n&FMV;PL2{GOG93J_?3}ND
z?Y<|Ivr}@9Clz~K>yj_lzJ=S(0DZ2ez{}}-x{4peo)J!6(<*BkC>T6rnxuT{JjJ|R
z9mYIjD9p_6+(bj;HIQ<X-<D4MMg51Wwois=5N_$F5aKiTKj>{AR4Ulh4GE(~5-1hs
zTVI^M<aaeVqTmesgsG|(7*+<+k~VtUNs~Tk`;>X~N-XDX9OxpEe4DUICQ(f(d({1u
z{gAb at 7M$a|)3##%IjLpJlkC2__6`FVXqPr~ys8R#uJdH98>O&qkM1^~TCL^}8RDNb
z%$*8e#oBwhuSnVIu|u3vDn&567i8aEGyd}Rj9SNPb6l9;*3+Brd1FxY@;CfyX{<67
zNgKH>8S7aOt`}IS<Va<VbKZ)%Z>e;bu0^B{T=hvh5WG_NR7SryHqA{bL>VJW`l`G)
zHKx*e*C8$inx5Q-YYaEsa%3k3H)ht12`I(=7jG7J*N?^{`Gcs8*=eF91BK!I`S*0m
z{vpmkO6G^;Ki4k}z at P8^{qg)iK8|nZe{ccv|L6W6{|Fs?NB;k2{Wq$a;zb$I0sJq$
zHZKmy*C}T?J>U#@OicKV;D8)b4mhH@$}7vF^<!WV at dySN(**!VK%AqN!y!)5+E9x$
zpdPknzLw3;oz&s_zQl$%Feb*`+Dy%yB+(TAvW6_)g8}8Di3;cE3D+E3(1Oy}P%+J(
ze*({B$;Hbtgx-(47+j`&DnH4hT}e2pi+k8>LYU2wTX(5mFtzz$Z^36_fn=Qif(rYY
zsi@~JVHvaydRnV4)U7DY6gMa1nD^0=!LOvAtH at 6*Op;jlW$;#dwKe1uMK(RDQ(yf&
z7QXH7TOPfQJAN&?RCIc+z4M~xjaHv+A;P-)STyi>4$LvP>Dg!+Yhjuf=jbO#K8l;w
zC>K;rc=25vX+|l%wzMeIj1vmk9S}G!kEoicEqqo=q|c<gtFn-^|G~YdU_yZOl4bvk
z+IqJq^yHB>oADRQRi%fK+wNk$n*H>w#rTn7;oHv at H^V8%#~f^Sdl9R+Tx@$J-ub+1
z!mpoR2{5eeK%&B}VtPrk$swv^3eN7Iz9g{GN8wkkpIz7q at q0{Eypr&NfV3aGpYrXf
z1*WpLx|Uy(M=etBv*PD$ekz3R_QPZBm5F2$SE{;Vxp>$Dr_&ib5|izTQeJl|J34A6
zRi#$%dY!#!?)NHb6vDZ*?Bhd_Z3)g6DnQJ1WG+}Bbk$0K5L5tlw(qjut at pTuro8ah
z&!hgf>lnSYJW=Xk=AfA%i7gUkYP1aMI8Ob$B=61V@*YMCO(}PSCkirzwH5BW3qpo5
zWEmwCJP$&e8XI?;{T<2#KIB}_7!?@&tkP#}9M8$7+w`QTLqAN?<myOz%I9fZsIB&$
zysQIIQLN+J4pkJKZN+wd)Q3rXoCS3JC=KRu{RjptDk2ov*rI1S5h at b$%M<9#=(vH=
z#V6O?{OS{xKMwo(=3m?q&H#xBFF%}53%s^6_6&C2lDVi&?cFkg^l8#$aP34xR+Ijf
z at SQos`-PWxJ{nhYq3L2YG&LdiMkVi<WqnAwUNh>&tZ`G*&aHOTnL%^8AgA;5<=TqU
zq&m^Tu?p9DHbdLqCPyU|6~sld?u(xkpY>HlFBhfLhMMODZN4|tRdz%aOs^BZet@`~
zD8##|v&9PM?0-qy at k8?e7xDj>76ARB{?GgE{14#Nu%Gik;8gOrU*D1cztR7BkM;in
zFS$4fIojKG?>7!9FqqJ0PZBYs60xPeCH+KL%pN}KIoBq+1CBQV`wWW#U?~jhpaG1f
z8|f^WJg8>+^DzqXiJBB2tSQz91joiVH`k0541$9)(I{SpPj1aMe-LX^oTB8PsSnDp
z>{f3`L4B11dfQa}O0~?YjO~mExvZ?LKMqE;RK$(I*w at if>O>Fj1Q^b=qCFrq&U3i^
zR$%P~#o7k>_&QeDRlM6c$a;;oSy*F<FLaX%Ley0<Hi+owN6}Gry4}kj8=zU-sq4P5
zFZr~W0Y8G55xGEY at E(8a%M6){sMgwN2%H9KnNqGa!DRD(EL=>^IZ at JjtHY9^rL-Lq
zS{o{vlBVVeoh9KnEW;rk_Bpy_yYr2~%NdM)!#>t#1y~D;4%^%LSsYIdV(9}OfjD^c
zj4>2O%ekfV6r!l`Gty%m(Mh;_)>`9+$+`Ne at p9soGBz)hMBZ_6U#$>adinVCrm6Fp
z)4BOwM)XMX1mZ*2F0_g~7I-pBr}oOU`79*2ijupV8NoK0)$~HjlX{k(Dk7}4=f$HB
z9>g-JAtOX?44d;{@v&YfXq!M{OZ629o3I;{OPcQOzlkMb_CVa&=(ZOV={Q;b)jG4N
zoQA%Tk==9Z<j-Q8 at MaIX_GtG#*x$StCld}BR}?E+v(TFUbXwAM)kWb^p_-kmMv7)p
znv6O*K7k!^(dU(bw3RUX?ADD;focJep($7A1lCwq+MRpvwR-JyqRGRfN5<GF!kw;6
z8xYy)bn3qGTzdb)uI((ML|jJ*fBX{pgMP}}j}m5G9{F?kh at X|UD<>nHSBy!ZlQvjK
z#-JE|+GXZuTC^~mCir<ZxT$z)Z;m`S<=Fs*yyk>d7M)+6B-N1ER%Pz{!48buDSIP*
zMVP$npIEOfd|+kyn6q{ZCLq|kHA1=`D|4$?S*=?k>NFb;zNfI)or`vP=ad~%W%(~X
zR=rrJd1@{unjcEAH>HQa8r>y8bt~K<rGqOn;;oIDC7D}hZ7=V<tMg4gk8W9rrIUZF
zR8ZW#zT0eD_Iv0=^|!%G$cQ5Hp63$fRPC}7*B0^LOJ-F2?UwJ1ZT2><pW6_jQQ?kv
zhO_X$MA&~vn*5Obhk8QIO%4yS{wwPLAFco4;Qp=shmZT`{O|A7)_>pWJMtem@&|-{
zxc`&O%4;9sBkD;0n_Dy>uvq#DJ5#51BBYR?=aYPT>Lx|w$QI`7*Uq+xNuS^ElF{Pr
zJ`5{jQ8L_a9cu&Yr)s>W=(4<E(GQ6fpO_6wd6u_<{pgG(a~NH87&3oY3dcK?YSID8
zvz$B`cDm_J_YnHyofi(UU9U%R)Z;xk^_u^^J at uHXML31tI~narFzqS=sP|HA0vbx~
z4jdK#Ubceg?tjJgL;QboYT;kv{y*&hbMSt<|1%c{_s{j;{|xzjhyTCT{}7J%e>S&B
z=Q1T<L&dnt#Zlv}OpBydMoLP&YGwNNxg=k_08-_)ET`e717lxN5C>|Q2AVvKs=cV|
zWg$mP9ulxgb2IY`BXsU)18~ap3R*;~Q`cv#ep&-YHwbBS=8IJcX at 5?Rh!Soe1EQ{m
zw^?yMBtclIcdBBh$J$KrPO%!JhRM5QVZ~IRAvHe83<?B;pM}|z5 at EF<>tYcG(cxQH
zs9A#BIn>Nh&cu_U^2HlS#8W-mWkNx9tZZta1-C|fp%}4NqOJ*`ZqSiQf9_;MeMAz0
zytg`Q7Zys}CdY$EXy@(Iz%z_#N*b1i*gB(1BmM4d*m?Dqm-ugPiJv+n5fT`WaGwkv
zWcA#Oh^1n}3SK+^e-J-E#Q(qS|L`~M|MTtoUrtWmpXWdQBLd(D_#cVwr2l6JjQ_yT
z|4Xf^u3lXeEzg-B<KdCd at qtoOOMPOJ@nwpj&{TUN{cJ!gs6_1c8JXm}nPOqGec^b#
z9C`6c&!xM^$5*PhcISk)md`n2pve1IIQLWv*YAoieD2jP>S+8_XlkG;PJI0W^Yb{g
z=M2neLti>G+`ByT at YS6Z9pLyUJj&XtR?AXV7Xk8&fVNNzJ~De1{_W3V7X=8fP+%Yn
zrQ(c9QFo1kG)i;}B$G7NE2=HXEFL5TTvlK5n3h8(#<C<$`-Cwn+pG?ra&jGg7;N`k
zpy;EdI3;8j<z-SRHg7^YZ%lfu;;fi8m^C`?QBdPMRSrHuhs%Piw0?Jo8`4ir#i at iE
z4h>Wk;=DGa65aH&q(Bx)b*vUKZtopOOdTMsn%tVf?&?0cVo at 4xg-;rVR5-c*bcB(y
zbu=wU3Z<!Jz^0+Ck~1EIiJN at 3Z&fcX(0KoCOZJ!<UxMpn<78Fjm2E_`d$|RqeI-l9
zGpR~=@4Z~du9lqF<{nh?4`<wnaTY*yFDGNk-f3UGW_5=y=pqq at mx*!M*;u^x^f}ob
zFx_^sgV%#3<cH6(8r4X(2m;y`&|cWv)(*NZU!e8`Rv&$2$}v;xq*c>+a;^Y}1PkkW
z)Bb%IwGNuME{mdjW5M3;fshV`tqDSFuE*z#SaIx^mLHPfwWMpxfI|5Ov>&A|FUw$9
za9DmGd`oJSlHK9_xn~Y`bGBi=8uxNkTff!47a`V->G4;mCER4~-?!YN<m|F8Zd}2~
z7BzUle?=~<uCBV)iyB8{;st_w==(eB83L+MdD&zcWN&7L+2!am!A0NfCNqzwOyh$t
zN298MXRSq#a0*>FBLoc}<$}HK*fh9YV({*}6Fvl4t4{i+=8icQ;?{L{uh?hrs96YR
z>gj|lB_c}2Uz at Js*IQa9=dGe0fGCC_M&lvge!jdEH<&f{UgJT(pu^DVMpM&}`}eV(
zFoMkt4WB;sau7kdOv-w<cfpKVFXOaq=SD@^4TM`0L)W=d^shOfb1_5?ynao{8#X)m
zhQ^&@nLf0cDy?^Ar>Lf;AkQ5n+9<w1_Sw!}Xqzm?-<GB;ShD1QMHBHu@*m#+`-{3C
z90`AD|Ks|`{s%w*<LCI#|10_bC&qt(wIrAX2rnl5;A=aM$A3;C5+hT170UYoC&$hn
zwH(*s<3DbMz at Cw*!rc7BHfeO6I&=@|Fe3S^vm<*68MB#-skLSF at i8(Pn1V(kF=b^H
zNs0-LDx9f!2L`mwuIH|1Kb)c->Lb87-5(;7Do^*J-NMp^d+VJ?jEeR10C9l_u%0%-
z`sSDl753EoPrAw8)4z{gfBmW6Hy=92U0Cr*{C)o`&saAagg0kglaWknmMb$oUvP+>
zr?OTqe60}X5~uz_OW12Ce-g)DxR@<{_f~?r^eG1&Scer?uIcqejs>Rn<e*`Kr-qvk
zuwRZAvIy!NcnZIpuLq at Fv^8(e9lC%v5?pG}lo*|D`dA|IltUTmy0y$+wL-;u_3G@!
zt+a<ouP4N{DU^7Iu$a%L6Z`OKCFa^)^RHWA!K!D-uaurP*hsZSwNGO*U1U<26~&z>
zk{*6HXP$aG2qtBXbjNyfYzrZM_`{a(c5SUWc+cB|i at i!!C-kKO{^rHf)9>1FbV2Xm
z*F=0EiAK?3XkYaZNAPrOc)C|@37vR(rj}QzJVRc(rRnu-arYJT1sJG=3GIws>%}uf
zYJodLLv55hA|HD`YV40crY*eik=<2V)`g~vStGwv<AGSaWwiIfqveLqRWb!VCbej(
zDBj0 at HM1%9y`^opX51pyIFh<0DzS*FcW#XI?^O>!>KlyXwAzrnqGZRhf{hw9)_lhU
zCUf?=>r>_`^|l<5FlG=+*XySr<_gy*^AVBjJY9PDlp-aNIT||TqKJ7C5YzZ8ULlS)
zQ7aizAlh;TtY4E9Hd4~-#xcmv&10>^@Iai=AAd3$5n%0-s5Y5&ey-H}$`FX;l`Z2+
z{?%3Y^(7DbS8^ib8_n%v+!_d{G|MlvFg9r;@OkPN8In;hqRbEP;*J_CIyf$x5E^2)
zwC?5Sk7S|Uz3G#%DHU#&`W6W|N at l1={Qz^yyHTpSgV|(RI>UQ{`yy^an7AlJ?;O-)
z!`Tm7vQD5j at 6Y7QIy5M**Tvb3Er=KfXV?FIJ%S&S|5h$Ge|`6dKbHSI-|qhjm;XQY
z|NmF=|J(jQ;_`|9?+xt#2I&9m6AlZ;Rk^To<%e?8+)>FJ>EW?bv4k7pQWk`#6t}`H
za3j>(F%GU#V`O%t?LS|sZxOc-rOAb)<l<-8ycn1>uXJ1%8Jh*p|4<&!-IVy$)VQ at Z
z1*>15*un|q#d%#HB-HGU4=O#aONSCLx5*`qcxA|zb57kK#U(n*;6AdFZsZK-dzw&O
z8YyufmxzFO6}kAySD4Z}mdkT%VkU#gb5W5UXf-eA=fPeV`D3DT5=5DN*w*#jN(!nX
z=EoW(*D$-1S=4-cvWog1_r^1U0>xX8lv%~8gRF~9UzYgrAU(Du=t`8&>*~MtTw8~y
z4siq)2adQ#grbf&i<$SrAu*^jC1jgagvLsj*pa`=)YN*UBG`t3J4xvko|?`mEus?7
z<>hGoJBa~ouV~mc8qZG)c7jIe7&&<390z?ATR(hqF%a+s-C`QU at -maSgsd{(S~yAp
z#RiFzPbWP=5*stv$emxza()|?tTs4jVH!Y%Zd#9{=dOh0arZimJtR;u^ptatKu0h4
zC1l)B_Zac2svfzM;+o*1T{BNe9^Ih9az<z}S);@n7gS`SZmgNif87?3i!^BnDl at j@
zpVtWuOte?ZbkJfL{5;}=V(|EN0a=3<;uKwdkY}#OK~-)#9rAdNQ_S{dGo^&vbS9tH
zQrOL%i>^@lYa#fsN!UzLa3kM|G%s^vv#H~(F0LyP&UD~XWGzR3yy=svP$IC^kRA}b
zYav5{ULB0MFwzj`@Mad%a4hO#K=nsU6xOKHHF+JnwrB6O6!*neLwjyczR~aPoJHPz
zdiHsE<4B&9!X^eU`;)wO{+x#kV&pWgn4P??2N7gf(B!K}hmA8Yd>R$Br>m%Y(@XVW
zJ0pz1 at m{Q4Ha#Cfg}sq0q4;|8#{h>W;f0KLx~565o5C-{b4DUf!5ddZ#g- at Ur!~fI
zQQrfjAP~!vKBG|F+Pa6_Y(7qGRn!GP2V at 912c-Nu15GHoS<3%TVg45+#t+GVSBRPY
z|KI??KhXa<xPZkzzuNy9*bo9Z66ELlpTAI_e-`8i>^~rvlkp$8{r3tgQ*P=f)kuV`
zh1;h<`8Nl6`Vi$NkY{iOuxt3o;u)Ib)m4MB$`H5;33#F}KVuC$5VXa at BxY%_)s>P$
zv_ZX5<vbAD+!HF3go=WUjg06A9s-#WQ+I#v1~HP0&2U9iOSmB+d^AcR3T1wO|Njgh
z{@Hr_Z-xIM{x@@S`5W~=4q&(UZ~33+=l(DMts4H%@qCB>5djFi!}Wiq&je?IkK^@!
z<~7c<H|nam&et-49$a9bCcITK4v+kQU#AD2>z~&l27ZYDzncI3R|bIop#2BNdcK|i
z&B^_<{r_hO^gI0jZT}C6;kf at 74~+jnNZamu4LDd?^;cHTzvo-XQF_RO-&MvgE8`oL
zDMlni!o;vd4Yj3`)C)|KwAi6)68o4zy&Qb|tWoY9N?~@-m}8sK#7BF_+J*M8lxsoR
z;^dyayUu<K2dN7O6vPF^y1??EvGHf`cK4nxK0~g*JGa#wGAzx=YMGU_Ge205MvWJ!
zFwB7^++kTdyDh>dV@`UzfX}%qmAJ6&!;4w>VFT9OBxeq0M5SkD#X>EaA*l}qF-D^A
zAd<VYY+P67a6`ZiXAjQe5H8ent~Np|urzN|utqPMhcE}4ioSe5kh(WVizO$>(=*^Q
zmmg5jv=E4|Mnm72R|i?7Jj2hT- at U_@Cw)2~4B;-X9Kq9sY6T1`X06sYm5jJPlzV58
zUu0&;&mddtY&K`xek$&exFajUgzUK|iHUaY>hnY*;uiUk%K<RK=wjn%1LSP{8#h&@
z{49m=1o+Y2Dj64-SIf_ARDEtuR=n>#g%iZSI9^9fqBhn=LFrp4B73&<$>=!_9!~7a
zGwqDUZ#I+{bV%<cBOv9AyX?*+kxVya5y;Q<cM+bEp)v(A5#p(pabDBw*KpL?lw6uO
z%!TT2-K|GdFMLp`<+Xf4;O%W)7RQ*#kO0UfB_%^b6ya+a60vxct}=F%XGvMRgYZXR
z`6H|6J&<k~#WQs?S41%ZFXBDL43Zu-(8k)p^h5I=`*{7b at -k1`x}n$>4YID=7Jkq4
zy8%Y|l^M0>qC8hJxu-D@{oqrt+?bQ{tOoUk^R;w%2DLthfmC&dgXO4e=@aC7`q^;T
z*sL~%ub at g;@if!%M2YY~Usyn9q&iKXG}Y)&Sn{zMN)$gYcs897W=WOOsb$&OPw4W}
z#X_!>RyR+z`<`v0-Wa(GX^LidlH6Vf?PRQr77h~IPLL-G+Jdi~Y9h3qK(+xxICT*X
z!S)46qZ9 at M&WS*lt*l<sloeq_U<kiPfBCX8>rHlns8M=!LYLNre%W%Hay`~UlI~o(
z*Y?h|EYutz*~sfRZp2)6t|7eE#P!@aet0DbCiF(!N9=C$e#m0x{&x9}&O^bsB=4RZ
z(g<JX5QVeu|B_bm$K?N)^MC%*D9|6u|8Mty<>KJu{5k*cA87!-Bme)z_|GX|{O1$`
z!KaI2KxV(J{~<<Z8pU1T0LFjzk6I3gI1_6FH^MgYdXu&5oc_s=ZTibfa2&E9Bb94!
zacy!~EF&jSRRm(3=B%Lla7ji6btW!?+Pj*A^po1l+hc^3VZoP1GhNHbN)33mZ_)AD
zjDD_`Uw2vWt{o2VGtFE0nA*Gbb}qGW%HMY8^+Qm_?%Q!1PsDNP)BN65$csK6hp_ at r
z5LWOu`rRv1pQ<y3s~v)DuT4fG7?$dvzVYtijHZ}xEGDyo)QpKUB30p5oB8>+yH{PN
zPEi_3Qi5_<IS;}cU)o{6*oq{>6%N&Dt66_!mmF4zJ&ASx^_!NFsrI&u(pdC_Y~Ar^
z&S9w6ubT-|a9<Omq_|e9eY!EH#xvhByxwnZNmu&GmUrInZ0&g`3QbPd3K4_(ff$5O
znM`DliEmkT*0>3%c<4?~keEk_jgoK=808_<rwUv?AD}tu=QpmJwZu_+54PM60?|%b
zT3%YXF6|qF=pg*k?ON?kkJ(R|g;0ZPG$PZx;&?X{hG(`|&Q+*A5fIm!8EG`GYQ_MO
z<PPmTAV-!ED?49c(7a0oetFta_+`++tD*`4qnQLG&KY4%kXUuuDP&=iI9m`^LN+3L
z=ewBkmxDION!%T0YDHd*g^_R_>=7ZLi!e4CJvu{SVvOy~Jd5D`J`|m`x6ONDw0X9A
zs?YNt(!sVJdLES8 at H{<Hp4h_e!DPa>joF>6_6Dy%439mbAnX{DLMB8j*L(Tqaw73-
z3Oej*QmY(2(|d{wUAS5=yvPCyZv at +DZqF#xo`3&l#5Y?{!r`Gmr4H8v^?n}0y!Z0O
zy1JXyLRaPDoE|wuGwNGJ5(Dq|Urmjx(t=(vYem}a82Ya)a7)O8veg;a-o7u&!7-dj
zi4x-zBD at gcz}fggBvJe9xRQ>`Deq5dAr->di(&ygJ6<^AM2`mEwC~u<Uj3|BbRju+
z&S{iwFzjiqPnyZv0H4kWJCf6z1G}e^>JS!_a~)L8nGz7+S^-#hn|$jBAgm#-iPuH6
z=Y^DEM*$*j!>Gcn_%nSafB${&zjOcA|EZApA^8vA|K~4B{-fOeq5KC1d%m&%@c>)G
z{j~r6Pb>Ea;J+jPf203%AM5{ddP=7+5r!Qk*@Qc)52 at r&p`wONsq65_WnR6I$$sHF
z{w-_u5VX?+7nR0mQZCDTX0p6PNVu4JHM0?Xjrv+pYdR at 1GD1cl@iU3MwES{zDP$=_
zGZFT!R|l!P-AUd(8E<c1|5PYp=a_;T%|{KU1tAbHyWMYjmwRDXW&dUXvIY1Nrs;qn
z51DNg=9XmM=Im at VYV7b_u1uXFtx#cY$@>0#MKI9ocs`iQ$n~xT=X_U26HEQDYDV_6
zVATm}oQDFQMRgpdS0vMU%LgS)yN4_k&0ZN}le1BB4TW?giaEikh6saZ6zG}A>aUa5
ztmgC5>LFo*CJh$^)_nF6M9Wx^RupOrwy>B~p9~bF1TH^j8ZU6p$STcqPIFy|ns6ks
zM0hCJeU>A+akjdvHTx-#OykY2GHWaWPtC{5?VL-DSI(Rr7_F*V+;45(Z(rh6*3J=Q
z>t4Bosbux>5^rVo<8&L0L}wyx)>ARQ{S8^dS#uv>+R?vqSA}@Kh at fZ9GHo*`H6~oG
z7AEn0(Uqj&p3P;-Ad6#+ewI~vdbt?gi?ZucO)KlJt&kfY9l2U{GW!t8S|t~WClfVO
zu7Kc;#`g?1sH6|w&O7;cVHKpSUv*l;MquZ7+tHBQ=@y!FYaT?#O`4V?#Ci!O*e|94
z1!9DAw!BnuC)FgEFmJO|ojh!OQ=nc-c*yhttB at KGW<`f~&WBRNdPcqufrnu)jJ-tT
z>7Kn5vA?vzfy5XgOvv*R_u~`Q7G-S<&3I$$q+z}l*jXoM%g&d&aj}6kq0#xLi~XAk
z%gz#SncSyBX;0bTR-44T8MA+5_W{yYPt21ux6#J!A7GIT#wZ)aX3d<BVi6HLFLO7*
z;H3i0q^7Nz8-;YhF{%oMr-pK^)blRI{Ow1%UcLejWA?Z+C~jSGk59D%XHK<GMMplc
z&XM!GdI5~r5YA3f=I64R<m;B#t?7L(@H(qNr{tL5eU>mC_S)?JrJF3Xy3!-mIh01T
zuUAn+PqDB2H0+RJ$XTxYg|VVzC3jnzd+#wOa?<%R%RV4rK(<zx*`;p5byB*2$B%%E
zYcHi9<+H)=Lc_YKl{(Ek1Q#VZ3;vtC0{>b5!^~Z5oLyn;KOji{LlC(9=LaTq!JokO
z?eoy>*Ycl_3qJp!_dmq>U-NQ<0VkV+!5|kWC)fWJ=^y$3C)j_n-;dS54b&Xs=njFg
z*#fKn|MUf~U_Kt6Z|nW|o0Eg at x92}`16#uXZ2$i>rvE$uI}_O5#z6=SgSvvDp3V?Q
z3t+Gp4D%4>0lUJ09~k^s2+YKe!Op~l0fzsBCETGdFdHXFFpa#05cn(F0CNHx_X~o#
z0Cs2P;AZ9G0CVyRadHZA^6G=ly?|51Ok5qnG>1_*L(J`f9b>^?(Vq+yW at F_Dbpia@
zF at 8yo9mB>F%s}N~;|MH6V1wA(GlIeF>|nrAUKYa}0}QrsGIw);I=Zq!TwNjN*0S!v
zI|H?oqYHdDT7bJ<q2|^QM=K~b3monwG#GxQ4FC-WTe>-#yTXgZz<Br#j}v~ulRXK|
zb{LrkJTkDTD45#Z$-&tk>I$Vk0s(_hfWTmPK%7AB!C=v^a%Kf}m9>Y$Gb!aIZ^1x)
z#7)$U!pBJ+K{>g(LS5uEm6ZTks6E at 4&tHdfgnG!@10lX-%^b*^EA%*ihA&WGMGi#f
z3~bfw=&Ism0R at WUY!5MqN?Y65TQD5P#sVbwtKdNNhaSJA3`7AGLfXmE73%2<cz=bo
zugZReG*@dI7#nb2gexQ11?uYN;t2lY@=Ju^-}oIR3RY8=G2xP7fP;LMCtqQVFSr8o
z0(12OW+ZsnSh!jPV1NTq_bxVO00Lo0u56A#QMDoVZcs2YnA+Ks`j?cyfLlXttgPXM
z`8E8J^Y2FBdzcUSFOWS9c7QGZfeT*vFDM643vi&T$srOLV6HBV$5j9)JqMsXk}fU~
zFNS06!5x4wYz`1tb87~6HYP&`215%bMwZ|F8ZxpU!&o}GFu)_T0bn_W!8RhI+`un0
zGx&tu9Sm%Y06zx!lZlg&&DBW*z`vsv11BFNn?2Og3aA$mFc(-HOwU0N)WCNGf`z{C
zepFS*q+>vT9v*>%0jJU7gX`$QZNviRG=hip1?m9UE%U#4eU0lc)Odp9LsEtwF|!GP
z0$1y!>>j#1J6M<i`{V)6zp8>mKcEhr?4TNO!u<-u(#GEYTQ_?fN2m^*w2x{25Zv6}
z2?kYz9Mby<B`}<13Vg(2$H}ufyTPm(yj{JVp+bPDf&)_f9 at nhz5gQ#x35B?*L(RYD
z=WnAtDJh$cBOscOg%kA`Zu+Lw28T5QuM+@=$C)yNTG=@MSjGXoeJ=(FCwHi(6X5x!
z+z?$BFhuW1N`C|kh<;BYFdWJYc<6l(8E~Zk)kKb9e;^Tvi}`Ph0Te|YVqxP3173g@
z#>G|A(aIhQe8 at UloV-fgJDJ;g*ubE_l=-k#gnY;2s4;<8>Q~VnksQ2IzH)>IIZ5QJ
z04Gj>x9f at Xag83u?Rl6 at IJ7RDx0L~^1mr!8;j5?_0X^ZkSjUui1nTt#RPPHY%*OHe
zK at SP(I9VWL-%0c&yT6;{G1xZ=ejn^Oxv%N^*X#sT;Wrh{ats4U?sqPi!@32??xd2B
zuqOmQdIBVQh!UaWCqSt{&H!KF7w|iLhyQ+$W?jDF-6OUDC`Sjl<$fWR!_pja0>d%u
zoYd=~*Ae{!UO<%`!s>mgv)}QD2bBArKtS4XRDbLLMSz_&OkWELxETCa68*>0e32?A
zu^mgBe_bh$^K~Ts8C+f5px=?iN4@}U|03Zo02ukD2H}k{(82;Ce$}uX at dX5M{<Tg3
zfkOk0?_uqIX<~r(_R!(0mgq|r!V at revUh?f0WshJ<oGdF1F0S{0KJI25X>6l45j}K
z!PA4`X&i!!Qq!{>MZ^N82j0KsjiaDYi^FhIPEPhv2*CV at h5bE%Lp4W~+Sv(a16R|9
zAZ9QpdqC3 at K2-mNI5~umG&cC#cT+TX0_Lwd0h?IaIEqqpfH|mv3<54Nn=4RJYEGb&
z!tq_OBQzc5l<F{xzn?>R)9!JoP97HQ3)dVr<Nq1#2hrvX2w5O*pu&z(3g~FyFG?B*
zpq>E=*I~LRTELMScBr at gLP$px;|$dD*I at xI?n}H!I=nL*Tzxp~>l`<sU&jH46XOwC
zPy-t0*BzO!ybjw1OM3v<49;wxj4WVk7HXDXIeIaEAwWQB07LCz(8F%mSE(Pjt-qVP
z{ok7Uk at EDriF^Jk@$VM^-eCN01OV6l5c0sRU}v_YmgE?Z-!c}w<@q&kzkva;|A#Q1
zfZYD`>HHezhtfH0@{UXLO}4*y{ZK?e%lQ3h;2vKS*Kygu=rLaim>x_m24}0Iru&OC
zwFvvMyc2`h(6RR+(|n~9!+?I6q=hZeopyAEE5{7fW>A1Jp+M?@mH>~;)(OyVsHuO+
z%h!DOtvrYKDt(19d@=sKA?Ghbd}V*(V&mjw<7NdqZ}v7YYj!}4u%Fm};UeI#+5X_!
z`p@=1etvG?u=iivfBAX&ey;!hi#7V^!2YcL?;GRaF<}5rC=Vy!vEh%Gl^bYN`Gj}@
z+n<0w80abs9vl52Zm!lqs|A*Khd6>I!HPC6fZE{X4rYKmut~C=I7nDIKy2)RE`<YN
zZvgC#KWHoj+c?^|9$F9K+Kh!K3)sR7esc+99I7{NE+*#oHs*H1fW-jp=4=5s=Giy`
z;s at YR#={^m2NO?#C%IU_z?&ER?Fbb3f_<ghi-I}6xI-)~zW4yfk`oUT_>`%yJifRe
z?xlI+ at g*Wvl`rS(!2P~<hcCYTUU&-|7+}ZqGO at IQ+QYj=Kng&yPPS?~G7brWIe=CG
zFn+q(0~p~1-Ysn4orc500%;!mm>jtRk#HWP3XZ1Zn7_^r&=}i&l~KSD3RnW*xV5n`
zv9 at spdW(mMJ{&7BIkL`uRhT2Ir^&I|?UzD2!5mEhtMduKm%^X8f3edYBk}0_OZG&;
z{730tw0ANy0s8odPrV~IR~rW?U=o#=Ir;<;26Zt346$w|<|pLvOGaR>P`GAvQi)FX
z768FOU@$=Z|JQ9y|NaQ!g+8{rn?sxdJ1+Flv<_o9e6T62YH7&IsOqSIeZXJ2XsH3M
z<zeBZ)m1e#Fus_nog5vU++a}nUP1tlmErF)z`O8oLby2}lH6ekE$83*!)4A%49dVe
zP&<bt2$PouoWG<8j1++B=)flf2TsmV7swG2*uYd&fRI$*2L1B=Yjgb<AfB(IKcpl$
zWx(w)HbB}ZI^HqLoE(A1(+S9fDEJ~2Fr7i{O^zInG>tE50pS3B!rT=GxBLKsPkMmB
zXav~%*am6|0Tg55L&X3<?N^|O7zOb43m5~V_pg&PfjU|MePmyZFA;x1Jp+{SZ~*0~
zPvB%}2 at C=OLi6aw>nNY_(*43IRKU1^+t>Y4 at NsCk)Py4e=yO8h<1cK0pamXqgTj~W
znmJi`u^r(+>HlNz-TT@&lD6UfJD*~#Wh00|LSQ=y0UT`Om<`5Wz{%!eed`uT7{x+j
zC1IP*=K1XJbyf9orbh?t<k@|H(PoV_(}(Kn>gwt`HJRf^hL}Rwfc|b}FWVRyZ=x|O
z6;h2I53XEWSoM}ywh5CN6h-0IaMam at Wyp=j7!k;*o%jcv4SP2zm{e^%xC(03>#ZI{
z!Nm%;9n`N7R0`Ah&GzuSeG?RS!-y%(8-@&Q at 4BPzX}8xMvytjWx83gatA2>}FWhLk
z0%XhCnt7zGf>Dq`mm((~rHsu?8gRq at JTNj)efbk!qNbCYp>&)FJ23y*Nz6~yzxMj=
zj%?A|u^MAYq$$pBmn2)Wl#nE?dFix_wo2#KLswY}jaP;yeuc=NTcG4 at eu38Oy18Ml
zqD5n#|Ky&V1>j02*3mqJ)vXk*C)$~DJ<43x>%yx3j+Pcr-`D!1d;k8o{C%(lj-hN|
zBg2z!=kw3;2Tb(y&+o|Zdk?e4h^MTqE!}m9PB4{_|CAO~@-bi$ePv+%G$U9)m4S7v
z>?wfirzBJ;XBLdxcCjanuSWo`Lc~?>s$|3Yt7L at PKEb35mZvgnF8RyvxPA<QKp_0!
zm$1GjuQBtE*JdB!64ILdcN=o$L-`E})7QWJj&=F3EpP+Qi~?>w6GF(Hlxf4o8MpqI
zOa!q_{Zkh+B70qt9?jbg`4K(3D-}FA+NuR9-Rh0BdXojM<{sr+bsB^$%X25gfC=l}
zta|k!VAc7eV2@<H#8p_-G;Yvjh578?|IUE5Na7FC=T<{*JHd|8A6G5IG0-iVslSWk
z+EUax at ikjh26}CZd?4RcFb>c9yvRKZ at D*P%=9xg-q8$Y3cPZP3%zmE~8BjF{56_AN
z4CJRAwo)CsqerkHwzuHm at -TR?f#06$CUk&PlFC0k?zlmv`oOu9vys>rUS0WJVd{D>
zn@#6{l9V$<>gaU>>OJf<=`Q1KEk)XQJ2Q at u1f3s8^q4ZrjdoCc=V#ZG1&SF&Iu?i}
z&}oelCy(bZe%QtC`5RdO|2s}*PMkj;P^uj*;bia&{!iSRW5cL6x;`DLU&iY4$oOSo
zpZWqm9rgN<r>Hu-K<+O6<NX))Z|L%a(s+n}t(VZ^5SHl5LW4TcdOeg<9_uL|W*I0?
zevvsh2Yhqz56)t_l~&b);7qQlJ?onXE7`gdORO`PrAfD(Y?J1JG$~+m*-)ODg$sF5
z#SG;EUR<>8dytnNrXFr2xKP=`%y;Jo<Gb_23Azg&=DUk|$P1%u38yVLkl;8_3Z|*z
z_7=f`5oT?34t96Cn7KKvD$6^Ri&aslv}R9S<vW&#QDuJ!SO&sCJ;CKN7d>F>6aA4J
zy0uGU-Bhh<GGLvhWA+SimZr>xTGm=>@8TxCm95||omIQdW7VIxM&nF(Az2Kf^1M4?
zVdc at d?@oQ9Bb}!zW<Xc<i;xQSQOHj8$<ZZLIHDLFcFu<#xHOsR%k4%+_lU8UVaLcp
z+H7jJW0i^RM^+BF-Za-TGR|yTA@|;&^A0=zf(g255bU_9Na3vyP0IXcJG74|^qWUw
z{(alIp$7YBVrdkzGgf#jy6mZo4{d}JA|<9WJW5erOh2lB8kY}0+8;&jdHMr|&e+{E
zv90R_vcF4%AN{*2V|^(9;#|OYaZ%!pkAH%V{4EswEXt#aJkz3Pftkthx at hg;Zg$_`
z-4<}%P22SaiiBK-&Z=q4t$*D~pni%J;^FyV=B6BYwk`9(Huf9HO~z##(ub_p&IrZ^
zF;OgMmx!{+PCMBdR&=MGwa($_3 at L*K81>B_iP^@<G;W0(!6Ls>bjnC{&>vg+`(Pwb
zKK at _?Xnv=A3|DC6IrA7|<<Ks4Sxet at CDChnXq{Z)a!Vfzv&iJt$@j0}exCS1 at R9;q
zzjfIWkZd8_#+qv%jhvv-s3p|L8t!$9_1TVXW4+J at 8(Kq4sIP{gLjSD)O9T<0 at Iy}M
zmEbuUt#WqJfei>}fhM(?>}IJZ&oF`i{&%uLHacsA7M+3#9R>ege+}m&*HOsQ*m(HC
zh%o@@L}PS^Mc7BTe{KA2!#Dh{y2Jcap`L~@-<5AEiVx+5+!5~v$DXiB)0|rUwz3bV
z<%v8Nh)y!uLc42I!JLd`55BIVumgVAmDF^=oBqmypQXFp&Jp%W$1^Neabv-TwrH`n
zg7qvzH3C3bhu>Rt4lk=G(3e((J9%7D2RpsT^$8UxbxGsbNau}TEN;#2k{_8Yd`^S)
z#K#79ui(;^uf>JkI_bZL8m<M`u1TwiRS8lzO#ytJUMK0N>>15LA2X at b4-NF_Czsas
z^6o#ZvGAI~6tr;@OA`Pzzlj=?Ah5$OLHn(TJ+V_eY at PFIBeCNawcW~W!`}XXH0<?B
zxW3)6XG4--KqdTl3Yp?)p57Zt0T%F?W?-)AatvTDsO^!Ldk?ncO3iG{>)>w5{g{kn
zIC$SwKHt;>VF}6G#;Z6^jcHYBGVDgSx%Aq!6-q@?IhVCN`PNEUF=3?>2siX50=dQr
z$SdD|38j=QfSN>vg*DfK4{9j^irl2M4%uAwU3C%#6_8(stm2d!5x^apNs!^koL9m}
z{7y99kiAao$;uaKJc%x8^lpxHCY98~g?i*nrj|w-trk#KLZ=^1Clh6qH1NM08BBt$
z9RHXu9P4UaujLIiAXO_LxD`oZ6P^G-8L^dvLm}URQ`+*(G<Y|QNif-><pNkAz!waE
zmc!v^#7u?$bN}okK5Uhug>1!elR+!;6)uM0{qCvxil>#~o72|f>M|5?%P>VPH<n^o
zZ|y*oOd4CAwTG?uBb-<1^PZg#2bb7_Hqg&_fG#$`^xt<8|0e+h at p+lR0X70fXz&;R
zmvT+EW%cu1JE~Bhz#yD$NY{eY8Gj(Kh%(VE05~c>)=1#R%39lw>TLW0<|G&7$l?qr
z5eT#`mLNQG1i*W<`|)uho`(<V>2*9X12Zhzw!!Bz(BQfD&Qm?OV-Ba*mRbi*q8wDo
zW5M%s_Wq(XzJNZ$x=G^9-yf(SsZ&T0!JPeR7=GLxp7s1xtS at Ky&l1Aw^4k6T0U0ph
z34;LbuwDMefbPkEsVYL#WJLwX&2S4Mq-&EP)u}MC3ct98!g}j7)Jve2h->vAYIJ%n
zM(E^GT%^^B00us3I3s{eV#SU;fqKWG!^nUk5?Bw4X&e>co~r{U0pk>re;mYYs8E(~
zW+mNB?s3ozSVaExF#()(JAPVNHCLu=B#IHvqo2k`Qz_Q3M6+D9nBf$_OMzu5)=X=r
zm2|n;*IJPfCQ{rdAcP6WK{F|`{xD~99E+%>1kZe2SUo{m*&@(tNrP$145YakCy+hP
zIElWfC5QAxvK&8ZK2`$I^ApinTpp8<i<Jhlor2snZKsi|Wv3uld(AKV|6t?_6XO>9
z0RaZ^YY{@E>H=O*(F!yhPZL4n+~Z5uv%JQlPKW?uYqk}1nppQhm)rO3euiSp*${iB
z={k}qARUySH at rnVkQ%CMZ5whmb at NBp!4}^Gd$Z!hdmR&7NXQ-jB_i+^DX_^1R+r&V
z_J!&gU+yhuK}4=^$cPXg4Qee27}9SmMnQ(q%nT48GyJE$sZq-PQi)fE9S5n(6h=<L
zY+d{&6XrvTjgaS&%~u5=j6^oYlA0au{IEN_A$7%*=}`;Lve!cdOv5U$*zWWmE<uJ9
zv&mKa+)SG_qNFXRWk;CmxcR}VLU?Rw!dmxE^2*F->!cFN&@p-JgzlW?<zu>ou4lI1
z-jxlm6vDiM$Xbt$wNKO{{XxG|g_(7gZg@%@Q$~F;HyqwTWzKQVY=n**>UhddbqjOD
z0U2C2YAsFqw3UHs6uw*mxK3Sm$9YEZU1!`xjb`XRL-vi|h~S{_RMq%?Or|zl9ztsM
zb5Pic83L#L^%j53V at J=?R<7}zk83=pq+HwYif#LxSviYhL9;lOZ~_X>^?NZ-ztaiD
zbflDGyyr}ha+Y-Lm5gRB^3<?^VIudAnmd2p`TJJmbA$yWL(^9Eu70^&{k(lDv)Vr8
z41YdGx`4hskZ<y=-R(3-Xr8pS)i6|KTL+y)q^Bf%*?QYK?ELe(Ga4^e8TN1M*AUi=
zJPf8bMi=hs-@*CX4S_P;orFiWc?5!<W%<&d+bC_p9wlb(0CsRLhv)LVc_cwjopzJ)
zUuJLxLC-D0JmpMnKXAD6kQ)tR>;Si;!H_28F~Y;db9Lb*1{bI(OF at rAEI$E~Qh>}d
zM{@vT=SQSd=Zm4vws$9fvcui|o#VY12ie48?q#rrGycuRmgeWB)b%|+t2mtiN!qF-
z!V`VzH0|~KgC~z%9p{qcHZ{lCxupcH&$vR2Cw at 1`qP341(PeSiIqx7n-&v>qeJ6;w
zC<Qih>yKi at D#mx)CFq(UX#hW;fE=d*8IG9I!bBfG)9R_aZ9F&)fSaX}X=4lcg at lBM
zQPc`wev*^S<gt&FUOZmT&X=>7--`^YzC7ZQW28?q+JJ0Aq7)t+fDyhUF!j1|(>KJp
zwN+L5%0Oz~CUNEP&9c%FA^atJ%vTzqN0NLg4);o!FNfXB*6`-V at KwKyZ3fgCY{{&~
zk6D6{yaRs77r)l)FTam^A^_^Fc%nO at 7%h%pX9z5<?j0Pwc=9M|Pb(#s8J4Y}%F~?y
z76BDtK3>c$it}a=@s5zI<Hi=vuE+R)<@2Zd<2-J at 6xxYQ;3?9EApdE^0SY at LL6QV1
zj#EKG<)KHH2L2%SwpNSAHw)4kVRR==8KtB76u77CEavqfBCTA2RF`S^^10E2PpcJ4
zbOPJkG%pfI_EQRcvMJ>`1|InXVJ!;dV!MPHLNRE?#{k(Bw0XfL*^NT{OtX(d`JY=h
zw}F}P03iNJfqa`LV|G&9SBQ#ub;x1ncunM5u8->HPxVKzK2*du8aYxXcw*`1t}cFE
z=SZq9j&6ckJ*s;GP6DI+d7i;p!{2d^I_h;Q-Ed;VVQuj(^#W0IOCwqf-f|=?hQHD4
zlebJoT3xPwqs%i*S4-r$^bxE~F9O*Pf}Mwj5G at ww@u<OJwtLp$W>O$!NYL<?jf!Ky
zF};795oKjVs at Lh1v08?&{@uF<7ySU!NhX#?PIEnnp41fQXP0O!C2%S$hN4;!ij at 5(
zkHXxErEIF^n=XNBmMPN}!Q%YnVFS7gtB2+C%SNWft&CE1BzB<RPbiDVHc|8psGxAh
zjao4W-Rg13bmaTFFd%yn#}EA~PbVJ64duqC#)Dwbac7fKEGM~sLZFQ^IwY9sEx^|S
zhPs4RgUv+ygMJgrQm_?4S?PFOF{k?^bH`InqBOO#7PFO=V-=vu={JOyE#r;~n+Ylq
zhCS~!As`sK$k)TZGbx-W(^Tr}i9ec66CD^!R4^0KpD;K&F&SZy!dJ}WwF^W at a8GET
zHYF<!ZRR6F{O}g at 9qV=+2%H+auJxSrM;R33Q)H%r737Q=er^keP at Qxq#30{PU*O`N
zieJQee=cONgxGfBVF)T&B%f!-c*??v$f;jqGiL at Mfn*e%!AwD1B!Fx?kmuh;$r&eW
zZOM3LM=BHd(0J&Tco%McOWw&a(H~pn$Hlra+5{$_VEg22zeo6Q(Lj*HFgO<5S0hO`
zU126aoa5efMs at M3MTYXh`vx!cGIa_&^lys>9QJZ(=NS3<cr?752 at O<27O@~KCsKC>
z>M2KUT}i%=>`atS<$F27O~zx%XmyIG!r_7<4RO05p|pJqgj;^FnnJfF6IKGhPUV!@
zG;|#AvcADFY_*zmAha~wM0gXd%_M#2y=)C`Jh7QI0lr(h&E>EFo|bQbLo089rG<vr
zmr=^RH&;~1qu{7YhUre0<S7QeiQFO=w at hfd?N~R&eI=*yNVJ?)w~bIxSo*03192?b
z*gM;pjvk}2lNV^30)i&socT$6adEqt{v=qgVs2nq?BY14pyt0?ZzjwkjZ`QhCk8wF
zW_s{AFl|s{h32L3dZe_PL|?w?psApxHH%5jh5U;kl<4}1Ms1VQR)}(WVAsY3oLD><
z2||O%;eY8&lq3p6hGL3 at C*wMtUcC)7C_r<fzPGCdS?7*5OXH%ovmuM!M-BMb<?O3f
zZlb>djd>z_tQjywe~9%P(wQEU9fG}Rs#Y<h at geRt`yXN|ojHk5lQFA&0remdi+|zb
zfq&uagMZ;;ihtqugNHWq^&<jY9nq2S>=u>?UyaIzWy`}<Jwda){cwTJ6gNtN>Jx^c
z-kt29ZlYb6;B95%NM+BT5Om5Jf?uJi4ks)q9fj@&`|u0FX3+SiJZ}(---UxZN55_r
zo~#$^ek?W(5H_;V!c!i#8G<8v)Cui=!jRK?-RD8e=}p6VS(9LCi3=7aB;Wby2I8ea
zm_&`B#fA||M4?PmIa<Pw1cm?-I|~!g^+zzPB}n^MSP7@$k6_l>q8rH<;Srj5C%5<v
z{{|aQ_}G5;$42{vf74IdE1E;{>y)O|)(2el%%3qV7mmPw$^8+`YLOWK{qGKD#aJR|
zp>S-*-V;9Jck+UHf)%k(mWhSQJ at Q!0VR2+w9tH;oDYUHhS+)Y{EV=U(y1Y#{g}pD{
zlKciZ>!3yGa?&R<Wt-%Qh#_ZW8}7yN&%l8gArU<L3AqI%0`5y!jLCKI=x+AqB)+i^
z2kzU%(J^#t75_^|(ODF`@sJcLtr=J36~qL5SiWiS?+qgI_ at 9lj(v~N;n-}0gZfw4E
zy1$2*4tknIH)$b at 13_gn*Ye7G at u3}a{1=r;$pCQe8#x>350g$WE~~##17*HX!&A@?
z<XgDyd~yo#|I)Zf_EX%S^a)AV&U8p?m~VaTLeY>{$b76R0i#{LE5V<4 at wMT<uKBMF
zsJHdVqeM`g!$SeO_nABt%J at K44M@3Wrh6w4R-CUfo3nZ*<hq#PnQ$9e6&C&*YP*Qp
z+q4!rBvg$<LZF(8j6J|X6|Ooo+H=MU0KIk0ZwUbY+_);>J)^apw*r2z%kS at PaixY>
zSNSTKV`u64_+i0(;B&mkBNF$DTUdx>ERlC{sYNhngX2t<o7q4+<z_ak$;p0T3j1E?
z7 at D{)E;JlB`&LiFRSa#TJ7xdk)?67HSvlqGmLrA&&zifvXcm;`1nSGsnfe*iRZtK3
zF-E9d7743k6%&<L)p9oMt6N)kYy+lktGS)r_5^bYSx$8A1`c_b#vNJCdpzrz+v#>|
z(8}@>Y at 3R<kjRK6;Y%TPk-vpb$mDeJp+b2hE<=@dkmwd-$`X$+)xhsR+$ChJLVIE|
zw3fi!B(M}eaaV>|F($^1`CUTGmh-i^6^S33g_3Qv1&X#W;&wfBdSi%NP_}s4LWrB0
z0A92(Y^#2o)^8IROt;S)l5ua*TgK$!f+t<}q at z<I6#-gE=bDzR%W&#Q9|$%?)K2)6
zaGY)hKJfAYx1!^wrx-?s%mjFx#-{UwLGyy)7ZAH(4hLsagK_|0QYkBt{{K05ATij|
z1bvvF)=9Zoy84<q(Nym4eCQ(OqvG;2AFCg+A1u*0eNOate#W;p$)ufYdrrm|H7!K-
z-@^FZ3h>)2XOt`HPOuge902$DF8NfLwo-)0!VIz$KXG%OFa5za6+ig5$TcImqSL!_
zVkK$q$8P at _o?(F*GaOupaIqw#zAo^bk{E8Btng)nUm$h!o`PkbUAFGwi&&z!XqQuk
zh`dEw<?g at eCA4+Z87-@2?-VyB$xmLBh96t~0aLt$(7k-}RAS8>ggAK_Ao0qi3c|Aj
zsEEcD7b6XTtK5~pcPk8!tK4m$E|<X1fhhd^X5i=faSr&2c!?91NI45gTAohE=h+Cp
z94_*?qs at k4?q-s8R<`X{M;FM>=5z~#-uu?g2ySv_y at Y#QSraZ>Pf{)}Y}XQ4Zmq5E
zZoJ^Q>z;wo0>f-PNZu*7jEu<EO-V`FT-#KybIh(C<scLLb!DSIg>fx9_GJ$gAUV5)
zVvbgZp(<8FoUz>;=Us*T9YXoTD*JPVbC#-N>pbpaAg)5t`f=hUJh5 at r18^OJDx&j$
zs`-62C3?RSizrt(4}7A11HShaD!^abT7c+Kkx;yY#k0O;tY?`|T~t^!cAj&$=IJ$d
zW^I*1kQmRD$yNz*o(8ARZ)syC_)!qJXlA~Y;<n?Qm)L%zvFiMn;b}5U^Ln3OKLf|{
z^m0UA%Gs91?&NnWfj`0_v=m4`1 at 0mrVk=nq`NdW;{Z!95Pq0Z7l)B?#nocZ|)@F4Q
zy at q2CJVe);mw`Y{$Wk=Q=ke~qoC$o&kIr=A_&PsUr(I*g&gN+~MqFW^%;9ZLuhJNE
zzpba+vDw|!5bMa^a7vjmJ;_=<2Rwym5iE)u8zMp9bo;W&%tPhkB4LS~t8pt^zpqT6
zla|Bu=1l&(Yh33-q!EqIOlMOD7X;+xz?;p>dd<68$MF3Y{%CH)RNwz7JjTiAq=S;^
z<2Zs|ri5q1e1K6%Gx>Lz(m?xCwhZlUblqGG{NoEm9e18+7 at TJv)0#=d)65h79^q+X
zFj78uMZI4A^V6rhyI+4@{pJlcS=pa=<fB>+i$JrNli<$=!y!^ViYwjTuH%g?Svttu
zg4f*J4NM|)vftDU{fCE#B}mb%Ub5Xk{qdQC0jLe0-|VyzF0-;$Ycy)>E1mwEUUzg+
zXVeH30^O_esNVXy^`Z9jXi8gUuW<p@>Vtdt{=~od<o-7Bx&Noe>X&N|?(^&VpH>@R
z-d}6{DO)XT at KZj=%{0)iWPchC2IEQXPJ2J8?tk#R`WM-|?&Sv0`dR10Rjc2IF)JIr
z- at 2ELNB9S6t+wuMWRSEqpDt2(X5S*W(FieX*}`6XBQvxCtIPUV_i+*E>X$34_g5PC
zvehp)?tQ&+|H1#s&TdWz<L3A>TafBkt+Tg?M#=)(djdVw8{CpE8A5$mb-CI7Vm!Wr
zmPGO#VXHB=4eFadT=u|0^@8?s=fhZjgw@^V7 at 9GWz)O77;fsxXh;Vb_FT#`4-B^BZ
zR9Sz2zW)s1n5;|TrU*v=eDE)1ziTZ+&vf1zc9+9U47t`3ADG2$g<><e>##x%iI9iL
zvDA4ENBQHMt4`Q4A)Huvu}a+3fh?PJkyWC-fgPF=?jSSTyUyQVoc at eGE9?gY40f;a
z at Fx2u>K9YPQAPC^E6+#hcdf>;9v{DiA~8^WA|CSW0=GMdy%4mS+wPtX2cyCHINdy(
z3cAn%^Pw5KH%r_J at fSj)k^R;0y6?LEH`z5VnqSP|_K*C~HdeINmwCk4V66f#K^C77
z%f{9e*yD^ZT-al6(1*3EeS_-bj$VibWJ=$UnP(doQ<aP2N>l(>U%ogxMyfBN=^&S7
zR1%BZ5bQH_(-|&SOtULv&=R%9tt;jo(Cp10R^GpVzd}3i3R*>4qCvakl6=qDE~>p5
zU!Y|iCCxH3*N>XR;q-R;AU`k}LU-01j5;>Wc&=u@%{Uahlod?|>1u2Mz8&kTdv!sC
z-AGQ3I*@sRWR1)VFgr%K+LXy|=A5n>2Ay)i=%I3YHN=i!cI^?#wHWB!<h-?#eRaR6
zMsvk;nuat0s-4L7Z)17rp+mFzoVtkI7~?~=)6|qoxp_dtlR<SK7Y<|5frmx`Oa;~$
z&rsyEJS&0<{dU^(^cmfLbL&3IV7~tPFY|PKFJx5(#E_ft_INmQLsK6_;*kZK-4bjj
zNA9C5*uOi+*f9K2j1{c^oT(V-c=%Q~Vty-W5d1%G52>a4V>}JFJ=QM|gUM4%;s6*Y
zRA6%jl>i?au6~TH|DEi8i&rjO4F|A-UFr=BxDEgwgd%U$LS}CFjnEXPdO&TFxUtg2
zZRmjY6-%?$j%)(CwLLR$SzCp_ at 2ourF|0AWn6-h_w0Tw`l2~APvI5+Mh`@R10)c^8
z3>q1j+!j1p8mW+CCS`vRwi0>GbKB9Qo8#6SX1ZLgvJ8wg-Erq~5$%)AaK$zr%82ah
znYoF^l38I~*4n?`p&l+|NMv{o$#4L{*?cZ<e(d(QLc?nnDT)p|SA*dgU(||9d$74N
zWor#CxS)1x2Sx~CU<T$dVI#;$8Z3DtWqe6(w{%ytbMKcp-qzj^fsMr?!{9sF((T$W
zEYdm9#p at z{x3(fNR%?xM_c^YT>WomR)`uAL0~0qViq9}DY+{xMXKV^Yv}3_rtY9Cl
zEXDdG89`L4ic$zPre~YY^BTn+lK?_)1TQA$^E*kjqykcPDMXzYk1ffO(mjwt_s(Js
z7tl`$0!L8N`KcK>$S}8)v6A>C+1y!)@qS-jDkjuo#lWkRKkdik!hb6P%ukBL3Qj=<
zC_iFi2vkYuld-~8+GTAMOJF2$zgqZ?A6d=}IY^-H$s?j1a-pQoN)$MbID<B*O`exD
z`Lwjgn4t at aKAt>Un*s#hr^j_((&W=*4Iw1>odOIw%hFTPaw$7B{<Y;!s at 1v5o{Z(f
z(V5$3`IGb8)zQmT$AM<vjv$2I_Mlg&o+nDrxJICF{SVf2{Q+7U1Az`Mr~l=->QWLy
zrEAXqluF-n{V(3Ft>^T=_rJXNhyHhV1b;-y&4-`>NW$}JfwQCT<rOX~SNj0(r=$MZ
z+PR>?8uB+?qxC37N`h*a+TVl0xU-R=a%+TSmIGe3hJw8|N+QvxX%I)l0S;wvI#3C>
zdgdu>k1tx|?ET;x<w>8ov+V{+K>^A2i09{4_TBEW*Eua`U0a&ol6ZYF=vhEwEw-n2
z=s_Cy){G*1eFcZ3#_GoU+D2nNr^tr$NuXG|P|aHPu`29Dv$i3}?D|y?x6OUSo9>C0
zt?Tjm%2(X3*e8KstRC*}JbAv$XAif3U!zs|`bT!UC at tLWiEQ%vzrTKOJ-`0HTw7cH
z!~S!7jL%;4cI%%@F<w7;YQdtpfB#FfioRNDG_uC}#`?XDwblQFaLUWC#S|2;AZlE?
z!%lMm6*|PtdarvrgcSu@>&^z3mxDf1W1UIB8COnOQN)?`I+|O_lr at VqdpYbtQQR2`
zOM;QBhp#YnjwxG{OI^bin0G-!B}ASy?6d*Q*%+C5z>5Or#Ic`t&RQtXdMFOQh0BJd
zNk*)&v33hT$>A0kx}#>de?DL-(a)oP{WHq*oy)87jeEaj&owyIKN$|LMs>~1IjVQY
zXSM9|x;O5U<r>J*fI&iAj{a<L at s4Ry@2+XG&Jx3=x+CzN#RVHOiwtQ!=h=_M-{v)o
zH&4fX2MNW+1y%7v9%j1Ah#>@i1`E(Z at Lrr$v4_=K_VW2oQ<?dg0XCdX7GGRwp9W&P
z8Bjd;0+kME6i|Q_Wfv|xqY;gXTiF7jJGwqQ!vj4E=-DmVD#lVEDj6=IYC`b`<5mqr
z{=9X0_05~Xc(9ciyix4H`)#a5<tE*sNs250`X)$^Dx|7Mp+R36c%+$NytHD}vqla3
zr_E`}DPQPcUo!lV#0<rNQ}e=#G{~x(SKHOBCWtv0980OEgX?}9&#IeseOdWOA1+sp
zh71K^xQ1?rmtqxaj^LDjiGYyc^qmIXq_fskstOw}eLXd+kx2fPPBCyHms9Oy?1C_^
z2z1DP-0BV97)^+5t}OpWW}Jf*&F9eV&{8a~Gz8y3l3*QLI6x$8Avg(oRz+#2H|h|z
zYqg9Xr09Zp!aAk_Ooom`uvCKGoZbLVBt~dtf4#>2ywD>yKAXUaP6vaxaG84>3|^K!
z*TVCkj{dga+&egK{;+#^#OqSFx3YVykUT7Y%SUv1Gx}$*X at m(xQbwr7f&yW~22Il$
z=uH>i_{r&G`_Qa89lXJ7X0@!ASH2q{)gtT4v>2n|2}ab**h7*u(3 at B}U&BHF3!BH<
zU{i&oY;jYNyS)h(*=ldYw6j^)ubYyzahp|H`&%&A5od}pFi7GVBtm-r=Ux@?7?oJ~
zZvVxjo&BSe>e>05>g$v0OYqgsaEvYG;QA66xxVa=s;^7xV36z?3$`^bFNLKpI4W%h
z1$M-cIjID)R1AjgiM{Mx!9?)^X<Wyh$5_MTNzKtiVA6X>43i2Sb^kT7kr!}D;51HZ
zLz4<~zadpN&m7odvc>$8q&hI6mr at lbCotOPNwTz>B}QwFSwPo#hCpO2_5IGcI>KoM
zSd`5gppg>jt>O4!Y0Gwjk~+=i$gz#!I)e^OnvH@&yIAsp-J_&S!>^V1$o*Mc6>cXL
zaGo1PXI0L7gVuOMGEsa}5w1?gtxOP*)T(Apk>3~I46)+c+gNMuR85WqwRNj-OU4tn
z?iQv%u5D8n$P^50Rb;<WnZcn2yG;^gR^~_QgdN)jQydG6lV at yKgQ3gA)Bu8I#WMKR
zB8K7_1XpQcfh|qy- at MaV<W_uV(Kk1d-ym}itUJLzs*_Lf($gTTxiAY}-AUrc%?l1A
zgofiRa7Vk#I5B~J at -qd3$9D68vQtEdfEawYY$y+kieUP$$SZD|bL at 2vd?;fo0OE!Z
zFaRW>Nuty9twIxiEW$64aKl`}s{=5Lv_2lXWu!IS3)$A}5{%yI{uaOT^aAoru}Ux$
z1*E`f?vm3uIm&L|g)JMB)WWzs7U?jPuzM=AIT1XHP-0vFsfHWl9(2Rqv+8R*AEx?A
z^${XMM%WODSHM->>|Vaf45#X%QU#{-_V{9}(s)p at rbYRVR29M&7OpN^$B-dAdrU=6
z+ at Cg2rBR78fl+>J*axtoy|GXwlL4e()omJM2j;;b0Q3`qiK`7iIh;qh;P>p}6QffP
zcnNfBZ%K59uTtm?0R3d>{Pb|{!Dj{b?N3Xc at aMz4C(x<ACD9qaN})3V^pm0U)5CdW
z`4KVtiQsHPe!apq7r1pGUhA&2Btmm<i#VmS#7z9BgSCxD6QHuMB$WO|5x|2%0OBV?
zChk%Fgb?mh6J>Gui6Cr>CLw`C=`4xF;7tmP0hFHz#`Y%wQp67Ks8#s5U*Mv!88%gJ
zp>D?t_A3Z3s>af1fjFX at _(?V3#;&kFOB9aw!f7oZ41%^z;nJ1^F6O|{XGt)E;-=-&
z!fv^f94#1 at 8zmYKmX<5eXNjWGIy6m}6b(qtwJOh&%?71Svq4#y#lu|w>1i*{x+ at pV
z3fY?|IYo9*P+YlavM00`&GUrzf;qGOhLaZb8<f=clI5a_HT}l(>Y9w^REzp~a;2i_
zEG-qxjU7fXIYDDVL2b+wqoV8!QA$NhNI9vi0YOw0pDpOU at N`AzrGhGK3v;OA8gB4~
z?Q8*Gmi1Bl6bBSO5(W5YJgw0danO3#ebXA_Ho}GRVBG38y?S?9t7l<9%L%1Co}JSj
z9;a`K96)S<KWCV8>GReHQCjVzONjbV|HACJNrh*IkeG`>d#l2$!?90`=4z{w*M3*B
zKDyYdC>EZgVg-S`(Qh;;re!%BaeR6Gzs6j{Hga`69vQ8qAVNTUrsmXgH4K1WU~V~R
z*DsMA0-k<Uf%6Jlc>;IF4%sX|Teu~1a1EvIlDuUo4bN#!EmHPYa<HH-ZioDA!6q=$
z2JzHdTI2;%|1D(?apW|`wkqZev>_YX0O!%DnG~e_xhqsiQbB<B&N^LKNIV5(^}=Z_
ztVJiS2KplgAhx1A>bK-0XaT+q%H<wPPo$Xtg+Ut`O9$`W_;@_T<JK4%6<VV)6ziSl
zyDl!l>wGxtblRgPQYx4pTtJrK-SrG{k471y?=w(Vr^QI01+#46a=q}jb3-DMRlv7u
zDzN8HQ5N{eC)MMfNBg_Y!xujuVQ1hb+rP&3Ua(#*l$P2|QvU7-P_<E^+TJ+s@^(~>
zE at Zi}A!s#<B~q;}XoI*^BL_RM?7zk;G*Ky<IuO5sm9q{I3UGiZV%*rmz;Xm2K^ACR
z0&q~oMdK_cVAXC+3s7=Czk!JX8JX|bR%?xQ7z=T|TYrR$w=j!{se!#A|K^9i-5*t>
zsMAC>KTD(MRENhuy~Ma=DyppNHF6di=5KnA!s<sq9UbpJ&!iP{BN=_G*9DoNZ at bpU
z&=tc5icFh$LDC6rn}wGrr8s)+Y at ZI$hfuQ)5n>2W4P3rj#ig#W{q;{rSKr{<#rP7+
z&CVHYQ(|=?Z&pY+X9Q%fz7T6UPhUmqHZyIedcgvbLX~}&!jyeC7x4e3h!TpzqBx?d
z)`yFUhZ2+QYMST;+9|vN7<-HV0Zo(`gJn%3FEFgC(egCXSeJTOrC-Mht!h?SnpQF^
zD`Gzpb3UP0DRgYy95V*#ZB_KW-Fdk%M<=f<@ZE(=yK2XBAn6&)oumv`nao(Xy$M+s
zp(?(VH48*=p~A&;TNT(KC6SwABEp+R6-0=wRaN{uIm;b(P-wH>vg$kOYb0WAqA$6j
zQZDqG&}FV8CpO0&MY4Emgbq?KPX{u84#c3a?N18_xV}?v+X|<j({d;4s7pw3&Fj7w
zSq%hwsgOWf`Sb{Jvab8s`J!1_TpzXq&kmL%Y!mDWjHd~#8MfVp5H_5P{O(mfK74iX
zc;|RmEI(}d6cOS7yoOmnwb599SA?8hS?K at O84f7IjJ8TPqFMmK=!(&2=WvNJ=G$kj
z(W6eMPno~lL2kPu&o9o2h07<TvqP7^0IZV1mkDvTZ?`ID^M_D=-W^^dY5v<q`V=i^
z{|K<*DUB@@Xw^190kcnb_jiHUr-v_||AAa0H$q4bzY#&@kxH`sdBmel3$9b8vrqc_
zM|CO3eMm=CsNrRf%Oxi@>KogR)%F|=OhX=UwM3B;7TQpA7+)pq6;BRdyv$<KuUUcH
zNpd)(h>*o&i3rryn0Nv2Tx8?nQfRz0mR(^nj-%ZVM;xxdAFz{|<;PS06&&t1<i#-^
zapE_zu>FbTs95TTl+YV=&l(%qOUX`fJ{(+Te;tf2u3Oo`O()y at 8Q(K_AtM+0S!;L+
zH^Ej7zGT~U6GXriH{`DR<e at 3^p$`ep+TF7eJPhH%fg`B+1Hw~KP$FBr$_-?;#v!jr
zbct<1ME$*^o#)FL|IOfYjkEKWw!4uX;!r0?mSyot%;eCEEFW-iYIi=!Pd7zq3Qmfx
zv$N|VV63_41PQ0PH#qbmU&CVc+y7a7e#6fGE&n{*-Ff-%=ey5e9R9Sl at GbQXA>g|Q
z-|ZdXpitPm*eabPy^~FH7s2KqoaHS-<?j~rC-Gnpl*dc-30x;|a%BzznlgE9P_o<}
zk>Cq at a<={CbqV%4|H3>>iILD1D^i=Y$Ri$b1|L#UHUKl%{VrTG0XW%<zI_C at vM0EY
z7{>~2Y&pYyj_wzf0oYz2>e1eiY6wLMy$A-*haFgKMfi{ABzURK|KjF4Y&t&%t2x0q
z?AN9ah_&>ToF7w23PHDKj3sZUjhWqf5OU<fX(?&9I8C0Nvd#Ecq*>zY+$Y~rsG;yZ
zDZ>|H523Qlf;RZ-9ukT?c~poQ#Cp^>g~iNuN+)HzRx?Do>iTv|JDO3nL at Z%(<BIp_
z%_mufMSR<}hou+2j2E28l11%*_Iiuyqh4QV8)sL_opuPpU#xSvX(%3Ng0AKzr93x2
z{H|#@@}ti1EsjbzPae&~i at Aw(hVaV3?!gwM0ZVl+`n?+jWtx2?y+v@)Gm=uw6Uhq`
zIAVLkEcr!0ESNi(#Pjiyc+DMQfRb1Jw|y|?V2i%h+DQ!fT3gNyhvS at Q(B_oMYQ+77
zBN|er=Qmf at NXQw1t5;#i7WkmWcHYI+&GtFaLkA;hAR at lPviw-ze`s7yJ*4_NgMA}p
zhVC6VE1sJI_dab#|Ao?}q?$_FfF{%^uu at Xq=8J`BAh=sRHyNI`a%i3`vjk}M^KN&`
zG)C>)NWUUF52)zQpthAD%!g(8&1tQGzCTl>x at J^_IhGV5DVZyk{{7a<-Q68x at I`|K
zh`#W14d<Ik*s&u at h%3Hrv5~;Un*^m|GfD*6HXhyVwHNhLAIRR~RJ_pj+46xtsx-f;
z#N4)=04$Wm`-Iu|!3qMYbGi#=IwZ<a3NV2TEGc#zkQ^P2Dc&$FC$#Or6d2fu3{FsH
zaWOFF{3R+RsUTJ(nhMHBDOsI;C%m@^Hb2fH+-Zj}*45QRkzaW3(s%M+%y at Rb$z=3k
zrUp89cwzxs5ywO86)5&UbuD%M;{Xa%lbFSD2<lhAfgEQ{PcW*vAK##<iUDtoD9;{}
z1H!5XGhb(Do(pK9epKj5E{IawWEkxPMQKE4Mrj&CD5JK<7U at 5#LF=aNK}avG+m-U+
z6Jr46^Q^9(*NSX-&TjTvr=1>k&r_R>KrnnZ>_$u>imdRlRqgZ5W?i~-bA3^Y*06<8
z at 2joAcifC%!hBfmaFKh3jq|P3tSj`<K%=tay$Z({%L}Wo6`odv)dEam8==-VHyF~k
zY at U<Vw4`hyxJkqq4jzUg<TMs_bqL9AMsD3J<{oySf6a}0mQh#@ayj_XoITtY^9XXF
zAZ^=LLw;OcL!>m{y>eL^jOvPufL9L(iY??(G7Wq6?u_+~DoR?27yopfY&95ktOxWu
zw`GlXlJ=?pi$)aGcgj2}x01vwG#G6wlZa8ZM37DqIHj?tEj5J;PqXo-db|{vP;`ZH
zts0oB>ZU$z_*7V(GSS&p3z4o+dYdd#zCxFAGA*PA=)AX0WupN?_eKy(003k0J5`wB
z%{eHmAp8}fTNSk1!+`-T4%MYgS6^zS`k!6>#l15YAl+&DPT&`y9Nn7QLitxV<mh!K
z`*GPmPHVY3Y`}BI`wviaiI}ahWip9{*}Nu1Sc#~{@7~sV;{WD^QaR$_D5kC#<)tKU
z?HaLeCZ7UriKFYQ?Z#%Ee}Y!6dZGlMpF}(H`wg-%u-u`ph~c1y%$;f at W7Gv@^i&Y+
z1||YR7GGsMT=(%b={ZORad_>VA_;4BmI=kiWorBwwws&An2XDP<oB<|X&yxs6vKTC
zN84fRYOA7uBiN0fPGB~$ih8Q%!&PDzp0GiPjz&lzZ2Txb0!i5&y5 at i;IH^&bN%!%q
z9h&b}9y!|cpcD>pwkm?;tn6y%v*qfm*?UgGCOC<?h9V;ICo|DvTKkJ=0d%_aa!xtH
z+4D>pnS@)6rC_u7FbKNH6mtX<_q^g~LV^pWCE3X>t;BG!5Kh^?mY*o;Id2IlpOm1D
z;*13^eFu&>lnCsRFzUhvFa}Fl%)`aFENrKA{3?lpewf|IBKZpRjU$Yk^wJYdjJCc0
zt5GM1H#0 at pm2Jp;LTwYW4|L7><miBHob4PUf`~Eo$djZ3M_ at DA(e)*Q)o&y=tgt|&
z1+ at my+tLwjV9-d}Ggy{nEz16eIVoy0mR6&-+(Tm}ao9^W?g~de{3 at QT?ksE1w7`N8
zsbe0949uM>p-+$bq3b=M2y4}JegiPzd*Ccz=Rsbi3%teoob#!3z`#}ghVH=%88p0A
z3EH1XSL>jw2SQdk(7o&#G(`|GsfL)setWIaXscp5Tu6X`d-|@$SvCH)9G>q$Iu`;$
zC~PjQ5U6=<<L#mT at bRw;?aq0NiAP|p>msXyT9KYS+JnFFxEa5+iTE_!QmDExjV?0N
zP9IsS`6RWKwJe;}CkoB300Z)l0kF!+td at J>)sI+l8cFR{Wmvh-aIrAOZP;tXE0=;X
zb6%;F=KC&&febQkbIcY`uis>i`}gmCg}mP~67on=+H5hs=<<ChL*f#M-)Bri1Nk2k
zJGqwcgo%&kjA&66hXLn_ERJ0zN(qzmSqhux=I$D0Nk3!!m7E8 at kWZ<`IO>5IN6d|g
zN#miJHa at hj7-8uM7IuPioAsQw*eiS$TAfK%Ch{(s39QksZ?5WztIKgt0bigeuk&k&
zz>znVH{<wTqAm9>(J0qBM&ULE43AmnWsgvW-)Ecc?mOGFT-Yf|2XM62l?|eLe9<|3
z3&QB>p>9N%D&rlGhg9lNnF`c{`Gl%#441^44*@`V<M>aof`DSx-Jwaj;|oa;7(*N~
zw_Gf7Rqq0;))ts;xQWb7wJJl;pkK7Ru!&Ay|H?-vudSI##IR*R{v+0-jI`61`q1Eg
zwrRCHVOi1gnSryUXg%!1t%h#@PTj!e!h|q8z1|`0g}9Z2co!F=Dpri~5Yw9?tnxGD
z&f}o~h3ZN#t?ke1v%!@B<huX-qd<ApmvM%`C}u>MbA%{`GMvh*v~F`F3_$*K;2$>u
z9$kVV-s9$pjhV6c!bE>K6l%MAR at hX!Gr=uE7A*l(RC<VUf!kh<i?5~yuq(MN9hhG1
zVu-=W){#qI{zbNqFcL=d5)9yGi2OXV2m8qOfbPg2(5g7ScA$E;-<)NP$HRzHm8WUL
zZWH|GGtYT9)18WknRaKbZrZkcv00zLRVuqujoRn8X;V_OQ|FRuIC^=T)@5xSb48|_
zkKf*={TG<>O9;cIT@(u3rWfRShcd6UkKF6q^sv)!^=>8%BmX|phwMR0(O4Tchp0HY
zlYQ5JZoO;iQ?8vmD=W;;^|bZ2ll?48OK at DASfKx;t}z>E`o7KnK<mH}uk{8sR#s5i
z++c=p?zIR5k!QWGW9LdAavH3$?*`-*71;#pzLlU9bD<)+{31m@$c&LAzs(`THUJKG
zSpFgVz+c&uF*f8x?IP!4>vRA&9!TKou_x+N>Rv}i_LxPl2-WDF(!;40%Zz{%Z1->`
z0t9L<_L8e97itc%IJlFKS`b at 6&5NP%%(WRQNK=O+IT%Exj2e}P354C8w7#v?pA62f
zaqBg`CXx4%&e(rOy=Jl6x6RXDtN->j19nd8t=HU0Lo>A%<%oAL!2U{tvO4S58)Rn{
zYLfj}b3*oQAm;z`&`gre#gNqJ>E#e~g2U3tW}k~QCPMrgngT)II~&FN<6!s}Zs{`M
zw#ib-3}~<b=pAfrX12S>JKR>k%1&>x%eQYK^huB_(gZ)*fvREWXgB-u#o_mQEgUjy
z!kJz;C#jVS(kT7;-pqg~oy~VEN&!&u!)GlY*#V)@W?&Rg5Y1PUKTziL)R-eiC`4*j
z8k>Fw;j>}>8FwV8Aq|Z{p{WW=lGsRc8u9?>f`8R9asSQjI<4&t at 9mK7Fl%)Tl&EfZ
z&&D4+PJ_ZgR-S#BP+qpky+<%iG7HCiW2N`z6O4e{qj74tt4k(V&PQ^dEZ1VVgW+vb
zM~3>##dO-pRHU{|7YSM{PpVi*6NzOvdlKFM;*#b0pOH`pva+N<yhhrVi>q6Ya!UT^
z)%7n6`JeBt-TNc|^Q{p+M at 1up%$xt+Y at SHiF1G{m29d6uX7vIsY$bAYEOu`gkP&S#
z8X(g90^0<CW;jnk6h^{!Zai=iMpkA7PUM at yOTLfuOc$sUiKf5$vZ0Bl8>=g8Ygq%i
z+V5}NN4oZsMANFbf@%+YC_Kt2&m6pH{;+enw}Tk-qvqc8moE;FDN3joOG}m)T(-g6
zzfRyVg>=JqLw+)VUp9qVErIOzL)~qYJkpH6*qUojU6Qp)6Wi)pUo0t@#-vmzDkR&2
zl)Q4q%xz4bpmXPTcS at 4<kkSTqB12))Y!nx3P6*@v%lIUh574Ei==NWt7rVdPeHxBq
zllFGkOti@}0?Rf4?_tE62(`|*``MaI;UG#_Jr^GdUp!K}_sKS8R}2OSIl!XvymyU|
zp*(q0eab2Bj1V6p;uY!A*mjzSyMKGNdvttKmCA53u*A5~lqb;R!eG;f7e|z9g!;qk
z(ecjltD~w9meN?S=m}as{3(09^Z41WDG2+Fj98%PH#LFDLIDsQaB>hh(AYT_6Seme
zNV-^ky8r6v88o#(U7;lk65rTsdsO>sJW2B%NUmm!O~zOmTuN+~(wsve0Z1yz?_(Qs
zw?iTqda%0%R)=$BTfaaifDvpGi`AoNFMiCFwla&=4A-U6m}RYqg0y+sD>M{P3hV;H
zD$kH>;9C8x5i+K?5yD9as#o~mNC_PP at 7=&r;0*%UvB)`frQ^q)Z>#R6N(-;&+ura}
zjsnLbaon1Og&A8-HRo}GIUZtc*f#=X$S@&!<5g4M<-rz}+M>)!^$5YRkB_rg2YY{S
z9`8NJa at u+Ra&ZavTeTa6ByduFMFkDRrGk}9EqEWd{tCw19fV!rj$8yNN-v6YSc2T+
zXer_*kV|^#@X~=M+}|VxkUSiXFUR(cS$y)m^PzKw+v*a9&6}`ryF)d|S)#C9t%sr<
z2ow!;*Py}LgUReGv_3Ka5N at KfoF!mC(dsy1VP^G~4-^cBN978kCC{Z;)GX#)F=@+N
zRZJldU4(wK3UJX3<%a<4IKO}2xoMtWpPxfUMZzOVR3r-^30+l617B}P2w8*L2x+T1
zqQYn#>7G=Ppr&~S<aMB9Kt(ZS&sNKTMay)^xnoQyNbvxge_=)ygXs*S&8qpn0(Eap
zu89GevR}BeQwL*eAhD2XJy#<dh-)5TS at uVo(dX0AJ~PszUfu3uK~&y<G6VXOH4F_1
zFu{n{?#+b at 5-?1HAj3oIs6<r<dclU?YS-o7%PF)dW#~L8-4 at 6&9HbP*mL#G=SS2;S
zd|?TtG(&@HVuFZF4Gu%ek7NhAyR<AoU at EHerW~YTK&4DY=8xzKM^sKkEIBI<a%HEZ
zKr76I0RwRf0&+cL{GgCyxQ=0%hL>D)$BeF?fEZUE)v(!=upCPvj|Y8oQ at TMUXemE8
zQ5ivpIoae3x~_%o8Bph7O0K>Iy|Ac~V4G53kn$o~PfuRT{pE^f-E)Cdn>y^W^+ERq
zxEyn{gM@@cz{p(2KRMwT)nGW#(EC%!P3962Jhp6)TcT at GpsMbi;^JHcaO-W#n#ga}
zWbt$FbPn80t@)_i$7LpF+Hqih+r+*jQUK~}5!GU~o464dMr)K1HEOP%XAtu-8c;u%
zKp)XFfYO4Hf7$HAf?`W(CyXJ62GVfVE99=iZ8UE>Bbv#Pr6O!CQB-JmTA}x??ijl;
zqRkVn5eY2dhDG5(VxC1){k|!?D}}FS>)jh^p#kX<({ibKnbKu3Pg0iG7f&b~^{fav
z0u{&s1t|j~fS+`DO)Ij(@<!$O)sdKDo99S6*Zg_V?ML;@%OPVva5D?k<?(A!Q1g=U
zwLm<sVv1XSft%^jXFT(QqGM`Q1Un-^Ab3HD-oL4Eg27yNC~4wSnz&^dXRmb)Q+;!+
zOvpAMhyd0gcfqT0M1ueY3MDbazipX5lNcZbSl13T75%KSv0B6JHv*-tr+qK-Mak|F
zwGOtXtEdP?yocq%=p#)OplNIb{Ywo8z}F at H$L$ILeh6lHSW!|DRl9FiDu5J@!bAHd
z*$l!M`q|g_|Dxtcjts{XOg+P+H3&kRb{vr}&HUBAz8^qndC%yis*_|mhDwjhDA4^y
z_YHiw*!%?6g`P!7HaM#q?jT}G2KhurRfUy8PY3o$J-X^4&eH+H0gQ0<8MSwM;F6<;
z7~_g8)mC#X*;KVG4yPdJfk%Royr)&DFYIZ?FrBav7+ke0Y|9op0Ivv3m}dG&q-vP)
z(WsXyF&g!33Ck;kcGwYSlKj<{GRrC`#6?&Ar%bOcWT!PK#X@$KS&+zR5(_XWr&JPc
z71}17I}LUa+jF>OnBH0R3?#^H3Ok7{$%PrfXE9GQu=|f?ctJ5XhMVWe2W>+zPpd`-
z?VDGUX-lce7uK;nrMAndr=(@JDGDLm;y!bV$`ces4q7vtQJI)a6MCHoUe4wQU^s68
zzZ6pE0^8dW`EOW6TN>f9YlvLf at nGpp8WOH-+sSci3sF=i<k_Z6j^3706dhjmj4IMW
z#X`^(I9fgG!DTcCIw+#e9G}Gn42H&M0GP*UNO!u3V;v!wiFv^x+OHx|Ee48vJ(<Wt
zReZ?5sG*v{s)VB|3E*~hg-9pR6;BlwzvRE||BcgVtC^*4>!qr>94V$JE__=af0I=X
zm{Y}+CmWbn{^)4mmA6d6)Je6^kr<X at dofJHc2rhN2LG5lf~{y7$CU02+p)DG{*Xoj
zfdqGfYyUnj)-%WmnFV?*1M?WxTv~l?HM`QM0C^NB$e$=D(HPc|ZAf+^i=^`Y!N4LU
znN at 8omVy0Oh-a=VSyQ$~c~@|ZLY_X^;Vh8C9;VkMbAbZZ*3yOUs+GYAe|X^(4o)mu
zR|#Lr>K#MI9I3MF at c>uGVP=sn9G!=1v+&f!NJ|Q>aBD%DQ at Kf%Rs-4A!3f;uO~tcv
z3%8Fi+A|hBGL}ADkOmwl5&j~NAhu9W#r=AuHR1j`wAaED5IISe^vh>2o6yHTrPBYQ
zSTMFEX5~nHW~q;5sg#2-deXk*ju^E<h8*`*wPDLX-k5D;1e!+KsPtdF+&##&fB2<Z
z8&PoGXQbSq at p~399h^dRiVuP*y!;vVxsgT5j9?z^@BFZvJ$rF<eDn#ywAf5Rc_e17
zTY+iJ8lMiGIXJ6G2}13t?vrM*(%r_EGt4)jL(gaJh{|X&M<k(jj1FZ=87L$qtyZon
zwCbSoaLewf(tQZG<^2k{goKc4a9Jg<vbB&`4N2k_9X at 6lmGdQ<W$BpnA8x^Pc+{Ij
zZTA5t$)Dqb-BIhZiN{6gqdh3BgcsO#aD0UqzMrH>stb#c?4i6+#YhKcJ;~;RMgN2K
zILISN1Bt|A<)MDx;tAu)qgj@)rKPA(R&SqjY0TFbwJck at qHN!@(~pC|&zE at wY*MYr
z{mB|a!Nz&)WQ5Uh*t!`7cAtooWi<U*w!R=o#f0 at IIPINC>DaF0#L5$B*`T}8bD=4T
zDJ3x64cHIYtM;QNAMSB!yO5LyuV;zKw8{tGj1}}KgE{Z^pvU8WX~D7sVm*GSfe!Pf
z)&GZ!eZf at 3+O9KYCA+sKF0Gd^4jJWT0w=c0^s(8J{A)oTVe8b*cLwya;;)8|>^H_I
znXWkyj7R1ce|4DnVmiRL0EOJeK}s-pLuG18Ko5ZuT>m<e*;Zbm%;kJBxQ5*gk_ZF`
zd~oyW16U1;W&vweWk-6A3XllGg at Y<mn~NAi4_D_vBKwcX6*dIMx>0(EYd82JH|Nxr
zb3^)Z+saWGHUyW$4)m9!3l|r{Q6++YZ1qy9Mz=w`-fszvNDYFDL%K#qKoKq<7R14h
zuv^HsLAU8eyHO~yHZh6nnN?jbeWM|&#ykBp+!`K6tb`ukp=hr&t0xLVK?N=YTAxbJ
zQ{FZocvuAHbzg(L1N&H~jY9 at 9e+ywqGqCwtCvNeY2S5Rd=t{9Pq7H1HL0Bpl?qGg2
zxhPURg1o^+Fq*=a?j>z%@uePnV~&{fYZm at Olte<WmmWx3_>|Hq1&%*UBN6;~Dn3<?
z1f><bY#|*pRT5pEjDN1fA<L0N2rlUf4{Tnn=NEv^Ee;sx=iM`?d^#f~JCsCuk?{*Y
zUNB{`bj3yu(#x4K8&DGCes3lNOT;^`MY$$;XfT};a&zkjzFNwbtG`+52n#}!C^Lu)
z>h2)+m_y`kub&S_2*AWD4weY(zU&O2fn({27=^8o at r>~_keXmfpS}!v$t(-<0huJE
z0{FNMrqg|=!GaPsDl=5fP2gd2Q)oj+c;$$D$iZ;*AZla}_W6NxD~c~hP}yteykh2_
z2AczhAX!&gD5>ji9vECD!pKj4ndgC`qC40taxj`%@JMG;xEZm2g!m9YpM>Ri!uSXs
z|3_h40h$xjvy=BRZz6m3_&3J&{FH^%!pRlk=f|~aImPd`EDGCSVO>myJ}-)9iP=q!
z&Mc at zY<HT0<30-OJ at BziJa96|lgb=?S=aH!_Ft5dy77DhHjU^p1Ebm5d^V0k-XAAm
zIV5|AY}0(?h!4%vzz<IWk5jS<O_2faG=VE4G0u$d4MJ|kF`u@&y-s at vjt{t=;y1xT
z!6Aa1l10HJ1SGb`sR%E2mR}@p@<>&HW9>G4AkSn1I)|_YPYlz`!(h)gBog(XZzl;p
zU9XCVsHn?WPJr_RoSGpx{l(@7hPyh+Nm3su$_q3zJMT9 at KJIm~>HW4Oqg}|x`kPaX
z?d!jjU;^lWA9|TXD!aX~Fm=7htKhfeD^Wkc3567fifI&&dSy`D`*?aPNz5$qz(%SM
z(zIxZaCEK{{u7?xMIr9bQJ$3)Aj)$q)WrQYa0t;Y%`nnQXG3bc;b4VyQOJsMGmCVQ
zKarNu(k-Nk3CF_c-9CKo=aN{CI%k8vq=vy1&3%^q6tYG%8^75G8}u at 98Q{8_TkWg`
zqMNv1#?U-S?UPp7=;@jp|L+f8aR;9XvhoG*)T5$PQ_Y at PU+vBqV%>;Z7n at F^FZo5q
zGfiVMVHdD2Ubrk$Ed`(1yLgErezvkTy*YT)MB-TWg~7u`m=%`vE at H`D#*>YDm7Iug
zh|?1<QE-t{#)u|cTp~4u%wXC<L%f&R=6cs2 at lccCBEu){DrQn7eW8T`#aX0c*3GVP
zv<eBM7$*^Na{yM<6z0Y;!A24fD!SLxkAQa*uV%dTHh#w3vjJ*DGlj#8MTo(V*e+&o
zhP6}`$#0-0(P>eU=u>*|4L?yiQi+Sq^oAPI7_xAQ_AjPDFT!Kw;pCII=Gnirid1w~
zaY(%yeoB^={5vsa$V<(axb90C?Hz0ILw%!UPqV2Ni>gKt%kbtHxn^RHul3o&oV!a{
z(VSV`BcFWJsu}re)8<{1<;o`ob5}qQckFj#850)iNkXohg#`yncZnh9n!&1Lm at Y7e
z%O;j3M~+(}h<ytd#4>zI&ssRN(g*}xB9S;V6O(gbhqH<S`kW#^3<I~jI6A7wYbO&-
z%EfgfR_6^=;`@5myKW;y4nCx=*BW9VZ2oa7lWY?nTJWS1z5ms~E(SJm2Pkf#-!zvp
zGn|fTUYxZ~F_J7R1))+kcD-+?`X;9NnfrzcP_M78Ew}`I1$}Vw;!qZ`=T4J`Q{WI#
z%7uaAY0}#C68rru4LSta!iDWuJIHVKse`j^VkV8NEj*#WfYle}U|Zj8kFsn$YqF{?
zmO=?(Wj4`LXf&cRN;gike+4_{D_&s3g~G^AV=goHR9$bnt%00k9*zeQr{izCli_<f
zDs3mygy%O>m0I$Gw^I|?Qy&`6X`WmW8;0^a-Bg)|D&JmSSD9{2OIc-WzKwv(;KZP#
z&w=gO1CJE>`c`1dMX_4h<KwM++<y&MFx#6sQi%<#VCga)hnt*vB*sPA<BYBAtfkrg
zOnb<>^9(j7P+!1CU|F`W2UpG}O&Zob<6%EsH<K-itjAJGmn15O{;a51`VW#~vLZfY
zQE`6F;@ConXiyuB8XR=QReYJ~F}s*O(*sN6V-r63{7tjuc+k2`^?(d=ah`{UPyG2c
z^M1;eLYLh(eE&@vP|5F<gItn7L<42+BO`04&Bu8Qv4~orZ;_gvnU-;Gmj3F7WGn&A
zD;FU-7ze%?2vp+89Z6IPSt%MTMIS$bSdh4yw-s1S4Ql02vMi1k<w8}i<tIKtOtFqK
zdKr-woTRz~H^RF*p<4XPYE<jI#qOBNojjoi`#+ZEQ at o3pru0jTuN5L8Z`!pQmXASV
zEq}B~!6Yn;FT6K`{GxYlE?qJk;~2&Di#LRdTbk5M6=iWDGV*}f8AL0h3vgK1o0sre
zlb?bFs*m+wJt{a~7;#LnZIQWXq8AS$pGktS<iSI_b2C}|W!#u-2NrIXqU?&X;DJ&C
zkt(7ao%DE;{E92c;B3)~+K at ao3$Fvy&#YU<#yP6oq0Yh>v>FKW0p|<|GF&D0tX#Y@
z?ROVQ9UeF)5~hjM)*#!IkDwhq3mdT#9(r;41ktmaAvd1&?7HI>%6)1dL29=n-l(-+
zkC~s+ZAC-%ZgvDrR^(q0 at qz`3WJutTxYZ9k=W at 2vU`m+O(saub6a-%mYdSREdCqu~
z{UtXpU66|ECQfBgrJfl?>UGZ20$GFVXB5ZtL!f7gc+hftM7rx+bpYL9qJzZj3$ls_
zC>d(Lji^Nh7Bc)|j>Jmg1%o0<<jE<X at Z@bX{*D;gVgs3uG!pY0OEqS>H~|Kv<30R@
zpOTKqH)UT$WNInkK4I3>Msir!cua!CPk=JAT6mxmgmlNA`-Mg4+|O*MbL?rX;ug at Y
z_BFOJac^^7RK2t3JR4j at hHT7!iW)cjCZ;hyEk2pN3EGy5b%R}nFR>vSj~DZc7kxUl
zQ(QgaK8!VIWvKKi+cg#VABQIgIo65T>%ZYnl=!TN-)5`BH{Bt$W0x&iTox5>=S6%Z
zVe8acY3fe#B>p46=Ny?IwP<<%PXt_RoZv_0{$wwc^M9_cJwUS0#_E at A5AHV_jr;3=
zT5UYI*ZA^}{GW4A<}E7dvZ~LS{}Zb%mzOi57HD$sJ@{I4a;`pDS^GL`+}l`N+qm~t
zDko?5T?d(3H0>QzEA+ajLulcU-kLe>%GWeAAR;?>w~vGV#T5jog`Y>w at t_IMU`X)Q
zbL71ci*@bi5nh(JqhV0Ev2_RuVpK!-raj61E$KX7wuaapc~D$5(a#7!hO at 0>M^7Y~
zs3zUSX^VILnEO2N4XSXtga>MM$t=PLtqc*0628-6qH`JQ0^Zs?R4$Q}e3tkw8&&b>
zy4yn at 55#t6CRv;U(>~2)6+?KI9{)-EhxX<|B#EuZhr2t+yFR@)H$fgJPg`ei|9Oow
zvbm^*a>E^;<r#-$%~B{*DJvv%FWy^itTwDnqc?z&U=-!J#~Lte3jHcI_t7;)M(`7P
z#bu at Rl~FpLKLMm0m9#MWvi1qY9^X_f{499%)PSGt$?nsgSNq2nFILs|SjQm75Ksvu
zP&R1WH^A!#Z+2MUVR59tA`0i9F8w*W{RWi#*@C8{1e%CoX4f1euuf(Y#!y?H)F`t9
zEw!YtwD?{ySK$WrkwbHrId1HYTCm@=-VM5Kn-m`b&1w%Cj8{yscm_%mDHX&^XH1%j
zhIsO>n?aE7^h6T!(ka%5#A=#zjejAk^yppr%G7>>6;6>QU)-(~^c0DD!LX^zVj%k|
zufl?qE%_gd2aWcrc+#2dkPPl0J?eD&k2ST1iqrYt9kZ&>1gyxGas>i72JbyPZk<}l
za5=E*1aHB{Z(XH)|L0Yg#`yM;62RpBe|`1-gGPS;|MI~f`M+;Hr}I?2-TsdxY5ne%
zNl at z?O){EJuzlmA7Gz*R{xz_XWvo{kaLG})IbC0&5Po0_!hf*2A=dDQ8D8O;%o8Q`
zB)BGz8+Rt at eMyG?Hg#^S+BUh5G=^MEH2U%06iN(iHBK3xBV-CE>kpi8(zus39&FrS
z+gN)L2q)6Yc+ehX)lM6^%`~eTv`~6&HqGJ8(@lu6bwRaHi}$&j5NowshMTdGI(9TB
z7llY87IZ*Nu6fGsmy8S_WL+{>VdEe(7<O at a6s+UI*#%oX-(XzUE>8qX;wiH(g-7r2
zJ>NT~ri^xc4jzBSkA|B?UV1 at XL9PV16HTnqY@aTs-|JSBerK`;58jv5<u#7y-428k
zq(B?DN=h+z9Jq~ST~7Dox4iUwzojLIh&VNwB}rUV0)!G)v)fL*_i|9NdvyJ(-vyFj
z^aQbhbQ29=pWbP=B|5D$O1($!-(lxvYkZM>*>9^6ao at yS=L%tiv&=g8#;3lB0T)Ac
zt}KFuJI&4q1li>wMEl5~kt<%_sl;1b&yBcW-1Dm<bo|&02$US6DfF+5>`?L+*If=u
zt2!}BO4Oa;jup<uj2JkE({p!+pR4l%0IvbVdD9!5Vp)#P23K5R?Eb8UoB(6E&*+i|
z8|V$l;o!$IhUMrQ*_AI^S4dC7^(tH-TOfQHQLN7bXBoC=O7V_gxzP%*&COWCJm8){
z&IvYyMuhe7)==ITrJ&<Q9(czMg^%Ghg!2-P8t9!}<B}d^g}EAxMqP4GoTAikhXCT}
z!1D_jGq`XGYDPxb)MPWC_!<ShSV%Da-6uL6(nsmBTwjTV+~zPh<$wogBc(We5#o{)
zpOwKq)AR&N+6_*Hd%PqImgau}qb7s3^)BHEg(8{;^N`Ms(J4#~>yzdi=EPkNeQ4rp
zZyA_WF37weHNtBd^;)Gp*{u&v)4!-FFH&mw1`w7trLu8+{th;7Ie>G&yPfpRODlrb
z^svw7z^cZQFIG;6$gGLum&Ziw90zuwmy!rj_L<<!9SqCLE!+HN$Y*XVWB!r<q!aw~
zLcx;L)h~e6BEct!izyVM&STWY?-Y0Sx~C##WT;b3jyg{^#ZoeXNu1!OD|+KIl}pab
zz~ZIIqoFB6fjwJt7WnZd0*}|IFR>O}z0KES-3V_{r4vaXa`jeG#IpQ&b-A~aO@=&}
zt(@8Equ`eO1$quATtJbzao~&W>EVm#a*iao at UnxSW8oA$i`J}0Ayvw3c%a=WA0BFd
ze71YIE1iZLbM=3-E$CG6XPc at OOu<ZzsZ`mZ{vqEr)eGS>ua;0baUsBqQGkTS=|dO(
z_SL;8$u3e=DM1Exebu~_S<(RZfXi#_ at 38;kw1G at Cl-lU)s$yG41p)TozI}sbqP}ZE
zr%X01?y#tL$s|W|R^g?0*iTi`Euc&m7gBSAMo16|fsp_&Q*!8ohjEy=3sL^!4-jUq
z7)mW4g0_I%YDY(VFAh$E<BBXEbXuH2zk=+zjBX00b7=QP^&2cb&OYptV>rX6axTXa
zIqW-Gn0)8k|2b)`{Hyu;?mwtgSooGCSyr2{0oNj~!1_m->fpt(k*gevlZ-RxzLDpc
z!Rtt6#2)iy^WZ5q6&W(EIq-#5LdOSzQ`E at Zb&T}vo3iUVoX^5rG8D7?XkW9+J>u93
z4Ys}_dbV!D`s^Zr)r?IhIAD}{l*oo-$7k`Ow;`14!2>1uIRaL2*0EmT!Zp%Dk5PyR
zTUDSV4|u*Sm)8LX8ui>>YV_Myk1Gjl2YssF7lRE6t3e0$ygNE$iX>!-)x>5%ot4*2
zVxyNh at Zhc&V+0Usy{^&+N7~{+9)iB!(qlXVN;XTkfI$AZ{0AxPI~n&dDp4p$VoBf|
za$e!6kL4v>I at 3GLq5%6HT<IALFv3-*c$HJM$u7awGC*bYF558DP+0*=#IkCxM*xXp
z1@}RX>XGN at -r#`11kLEByUj5|F{llOZ0Qyf=vd{>ozX$(J;YMXe{N#QgK^a;w-SQ}
zaC8_xaOU9}j!<BZn+j-Z!&j!wj8~V?$ab4VHDJPFZh- at 0Zm~9^7;o%q%XOhr3QF3g
zAnzlD1Po^(!iZuDB(@-{0622c2KsBV0rl{KswTMA09aX|nXB0!sNm`93mU2iFMhPS
ziyyx_#MQ0#uCFS7@<t^4_SNy at X84-F^Y7gaO0H6LuabRwxO4Etet&heduYG!?;IUB
z_YUv`e^>&*2f<juj1ljcSlJ5&`2k7VDZu=X-gd9de#_%3j^gm>h5ZnBso|p>aly}m
zzhcENI;G5})<Z63q=gImitRxV60rW@;wsH!#@GwM2sz%-?lFuZ%x<Q4QiDgTGEWNY
z6eA&*#NY)pZJT=Dx`KED3S1!tazV>MoGYu>S?M7PyJzzIEt|ysJkCQ}LH;lD32=7o
zmhgxWb({8yQ;Yr#t`#aUpY#GaakJnqf1+D<u!g7B6Bvjn%SSA`aA5HstasC4lVbT5
zIxB$FDhE*Zkt)}4G=hk=g at pI+eGzdia0{@eRC66}K=T^`q>5BB&52<7Vz&TprpnVm
zB-}HA$YQq!aZ2S`K%ABQ*wr*L@&~KLB7v%AdJClxx2{#@8;Y~QB)rBY=SS_#^$W1d
z1HZkx6&~%QV18ubuCh at G#n+NjQZve9!@L3$u&YWAZyXWqQa#~*9kXpR9|mbD+r|FK
zeN<OCU-`pKHNGZL-F&eJD-+O`Da*4yHD{G-wPJT8w!}}|QLZkI=!>$&umSv73Xawu
z4DY!RSI0Ri+UcE$s6Efncd@@f#Q!+x{d{6W%(@v|O)?m+GPt#vkDQd8<der6r8(%~
zk*b_Kd8>`6NC{q5^*gsT;Ox3X#}U^e8)mEa(BtN~fEkvI_Ffg(Tm?@JEXfbxIqxD`
z(3l#jTgMKIn>VppQN)*Bme6pc4|ZFvt^Wq(DZq>5mV}Mv4Sd>`z?V}Tfw0Zq8Fu1N
z=X`2}5`N`8TxVAqwH)INRtxj-gl3(1NM_3M9fvZ@$W<cQ-!Xe%T)bq#3I1U6!&#jM
zOU4yrHxOIo>EHuIHL?kLp+*hglY%Y)ktAqTfywj&B4MGKs8Vr$6Zqq*0|!ta49gPy
z?0ej#*^2Mb%aR@)lw(qeTdY(o=Bx>EFfaiMZ&Az#by1WRcpd`T6zBz*Js1F!ylIL`
zSD*#P9J5+z9tP4R6>MhR-)MW5$kvr at tgsKXPBAXr4+bcYWm}Sp$Awe!lz^jtLpYYm
z>9nQGfy?;d)&73=o^jteO~Es*$4ioK<Z;wFhP0>?eoJaGT_QaVh%8AeerM*`xH9kf
zw6A^&%NGEvr6!#<>>9{3HP-nQWXX2?I at fQ%a)HxSILm&k+?k^`>P0zfnsdlfcpV_S
zVmW_C%?~O#g$kE)xkI60#ugQ|oL^bF?FJ(_rPHGI;!rgZL9icfPWq|7ddc&ttliwo
zc4~u9pi(D;;31AIV$#rrlX!i5cxseaMthDO-jTYQIH*qxQ<ppY21n2(o7LMBDR~7j
z%?CV1n6F-Dj~<Xd3lBt&H6ht(CYJb6+HH*Zj%^43V(H^w4<>#DK;oA>W}9YXQ3Y6_
z_0_njl9Bs^aZGMpWQItCO*16XkS0`{knJ5DzxXW(gTx>bTaprV(-eonrR;~DecaZb
zD-8|)A{RwC5+nBsRT!PSt{H7EE^VmCDT3gKnoyE;+R%{U5K6)`*^{lZOgLR;b~EY6
zZ78LU?ifdz(nifP#)SHv2z$%r;9Upyle4$v{hVX^bcw?9Y}mb0xvjL*gTeDbyNgWH
zVoaeUBzZt=PqrJ{Nd38`03F3}O%^X&plBbewzY}d8=T1k$Y~JIV*PTW_Kh at VP0(gC
z-8#igdT|#MX>`Q9dd0VjGj0`#uNRC$f;VW8p#y@!hg)YER_QUqQ9FgQ+ol~mMC)ps
z47KN>i8?4i<fST_c~Dn&`qsNT<u%~LoN5Xc+&cQkZx*tEXk}a&Gc!yx^3y^cW{pBd
zZ{D9d8tF8PHuQaK*r&!hejF$ih1})rsroa;h277D?Km*u>cErop6CysQv-K&eR|nd
zA8B#7_{H&Y8tPC2ppiQA&e)==GhHe2RFVqzzG4FcDm=Lpm8DzxN7u5cY=<F>z at h-`
z!GZ)@iu}6^K(MuMZRrT-i;hLGaek6Bb9XB%tFPl`&EP<?V0EpycHV*Mo>@P1R+6c4
zZ+O&R4TsAj;61(ooteaE>gnF$(J@?1&fsV1Pj0X~4f at t0b(x1abnxDvh@$pz(h~*j
zmGLKCrdn0RQo5bO6W%#c`Hh_o2+S!0Mtayh at GKu;Blv-&(5Y5dvW7=0>w9 at nT8kD4
zqZLk0hp*+B<4D}uRAjr@!>!W6eu1wZ2;Y<M#ZpS>rfEshlDQFUy61`-Cz;y1G|`(?
z3-3Z%ndWDRp at say=B8(!omBU!16R;DGQA?fy?Z=p(~{&CDlx+?T=3vZJy$lOZ3vnS
z{C=ewR<7$DY~Ee15-w2icim9I+oNqQHGe>FI7O&Jf^jT6H)OW}WzXO+;IgYed@%R5
zGPx|pWTY at vE88GXSymDzt78O`-3ifHB@{Vd$UbA(hIv$%zu`zc5#`_uFp_%%q$Gxq
zr{U;<(a_kN*jpR|7H}u_m2t3{yhBMr%Lq}_eAT&id$a5yX5%i~q(Ii=>mlv}4K_QD
zm=Y{z4M*uAX!otEsw#WpU55R8fbAOLFlv*m2;WeBmUmzOS at NVw!S}fJ#0p6`#<g&-
zFV5gudjRV(eM{)zDM*S$4sk8WnX&EKDbR{=IdDTrVK+{-#?Uyp?%yEJ2Vx%cGiE>I
zXg;<PJ-oxkIK1HA1|LrMUc4`mEDpwJ3|6gBBDKU(F94iw8b}i-cifY9LA<zO>>AIO
z$&|-X0$B6dDGo3f{LwwHcY31^K!(}NAOW^=sci_;!vgje;6PjpqwOsK8%1+cBZQNQ
zGUFWbVxYR7K~_{b5#iMH1ZVsXWy|A#t}ffntM>Uv#{O^!ljDC at AKYJkkdOaqtgZhM
z|NA>k|DSFb|HI=)9Apzv3j=H#Ho)fo%KEAV*xcV}gwem*w^ukTQlJkg5ZNzai|-8O
zRAY`zdcslf^yZ*{*2${u%LM<bFR<>WMngTq!L#GH5V%IPyPf8U*D1r>9nz<frHtQo
z(55XTep}@E<=g<y at p4oRqlF1Y5(d67hj1(?Ijz!j8<{p8m}GSTbFs3iPXF7I2w}1M
z5*X4g;T*1k?K{<_Z=mqSrE52}H-p6$q*g&96FFdSSIov{gzg1mN&L)=z at 73h#lh#$
zjD!cE*)(YRN at mh9B@n!MTGCw?0JJ_S071XzD%h|~*)D=9Kv<SwSGN(MmyxnSMdfh!
z<^Im&T~!-VH6H*9<$JaWhd52^BiJ+Fa}&3meOS)m5M&&FlU20sc*4;ggoDEuuMVCp
zeyB?cp;ta%%Iuq)!kZiQC^q2Qi6ywIg){(Qd}3`t5Hee=Rv>GUwD_SME+Q*Z<27+l
z9PzPyeE4d2*-Geg>uK}o_{HIFOiKY;afXkGHs7l2F4WjY7{)zxigY&$U&kq51L}ng
zU;Ez=|BI1nHA__HIXF=jb7-+>+>JQkd^c?8rlg&l|CM&MnVP*yBU9`K at Cmgzz}cd~
z{QqvHz_Tx13viBd-&62;l7ri}9YHkWpoD8_TB{a}t$$RjHPA+_`VT)uRL*kL&8}+;
zxra3bqfek0V%#41Q=E)3*rAedG=-H(uC`4EX(MM1rA(8$2EyXv>e4SvJ-I3F;1}cZ
z)e7Ray6?6skKv>Rp>~A{o{_are{EI9uzS_n)HgJpG0nr)d-w}NZMxD}yN|?>NT9gM
z+(ry~+NzAkH;93{=yb*v$!}~LI2(<SLUPzS->QJO*0od}@lTB7)}M_U3t32i{a7Gn
zbJi3{3kGn>rTr1$hD|!<z{}@P$o`Lxf7;*0$@t-RZZwk7a at +3C$STB}1~E#BdB<OK
zcit(}3o%u_phmH_B8fIPn3TGMWRmBYl9l(J?wgD8#_6Ef{zmd=ZQ`7IX|j;=D`tdF
zu7fr(jcc=!o>KyX1 at BfSeW)o-x55GGBPNvmynPzIX`jl|@!)NzAH9$#d}k7Q;quF<
z#qn_W149G%BtY<Za75{X<u}ag+tfHP1HG`JASc-7Ky$&04PdL%sBAYj8k==}8swym
ziy>`!V`D8YmTL(~DYfHH8)etC#T?YQlTgC_kcykoF2#*;t>zlM$3E{(Eq0&9?k9 at X
z6&yRJ%{ngaL?;Dw9uJ-l2bYv<6pKkT=2(wIs0`B7(7OiUU3`v|FQHC0+~o2RIW_KA
zA1et(f`|o`f={q<5W`bH`Mo<}&)|+`obN9Xk-4~FY#es4)>xU=Xf!}xK;07pOe|T8
z_b;Xqml!NJ>mk*!hm$J*ZT5%42I8A8gZGm9PKx9yA)FzrKlGjFiG&<Ov9zgQH at kgY
z3v9Tqx`<cI(t<!&Q9qzus$#oD-722Y2*j7NMs$U{MhsYnjO%1e<anBktZq1-Y$~`O
z_4hcb{Wg6Br?0hIqfuL5!JX-FZMu+%OP~w9?_*T}Q_la5#+U2)^Z$bftACvTf14SP
zTh;aY@%g`~lJnF86~NlMO#pUpWwnv5e!X!Y`%B~hWM?<016&JpnJpBK`Q_(rbKJ+7
z-5k!XLG?SvLkRza83<bev#cTkgJ!~_R=C#^FZwIwB|(}?>9V{VQ7md&G1V+cD3EL@
z8SN@^tv9XATk&}1Ik%PEb2 at -b?u{@9-mS(={3HY%HmB>Ep_fqx4Su$uvm${ul<Ngo
zfU6uVgEc#yK|ZtsbTISZI{o5*G1H8f(0}!>a{jNvG*m1m!`tZA+rSk5e}DbnYRv!F
zR at d&W{lWi#55oFX{69%8+y?Hgnp8`&4Kx}XtH=Y1R7>e?z-EY`on4tVbx(H??!=Vc
zpE%1%ISVY^Zl2IWC*Do6OQ at kPNK*;DN!_P}b4bZ0s&wu^p3j4m7B;A4V+96pcfzPG
zh|Vi=VxZ;(ekHQ+nat`JYwoTu3g5Jm<3nxKjF)uSt2vAfnx;#fMu%rx6>8#~Rss6o
z;|q99>|NqWp$2!kmZPipa<qEmt%|>LLoV7d at Q7v%`l83GtQqa}+m9U^0-Q{)Y>Gk$
z;fI6W)?$P9Hpz1He#pc;>J!Z?fFK+I8OES~M0;kx3!{SZ3&=KBaC9<3x;$$Y(^+n2
z%x3A_I?9PicgA2ZhGyP^x2FaTr6tn at q8@a-paf<>)ij;u?Z<g9LraA1<;C?FrzzVB
z-IhW+u$KzrZ!>Bu;Q4yDLx^vYA8cZNCVWd2kz3e=$f)&mQ%6#h8yh&kL7OB$-Y8<H
zU6P=~XOKDIN~*|J54IUh`$8A84SmJ*D2#9o3<9|n at YMK|Mk5?8WpK4Ij~r!b6|@F1
zveSZT8krbw=<#Oe1wti4Q{fIM7aN*~)&NgF1t_-Re2|Bs&MTVjNu16<3M+ at rk6D)H
z?kYPdb1s$=M8XujOF8 at _Md!hPP?2BfnTMciZa(-%PyY*DdrhJlX7P$XdlwJV-(8Gj
zYGOMW5&!T*+!WJx7AC|K7b}6S*?5j<GMl2rP%=Xv*jy_?$SWHG%kvs at J^;JoAAS}$
zyF$7J$igX<k~wmk27ydwy}P|+X~JrCEKUlGiM{BG89E+sta0`_kuW;HK<92L6!8($
zzAYHjwVi5$;ilX2iU at z)Yb-?h3r^f9bu at Mn8by1+oDx7XZpO`|1+p*?=n-x(Lpbq7
zK(RkgY_$XeFA6tX?~ucSX(t01Y<EzgqYa at D9Hm&Ooo~_HnPYjNbc}xtspD3?G(i=I
zChoH!1FbNnJ?>}l!gKss`0U~>8cnQr4#CanRu<fJ!#BbG06FFeHD@{h6H=ze%`Sk6
z$LYd;%i9Zn4;lKuxsUSmAN>b3JBlQ-`G`SIKL6djxB8&q|MTUSf1Lk50^_q+z1{gQ
z`xa3{7YIMh_TIrAa3}k|J4E!|;9a)J2eqA=eemrY<mc|yaG;`Gop2foNDRltdyRE-
zT)e-s_8 at C~wXqJZ;cAeXcRt6VNP4c+>apt(-6JTiaZf=^Bsmp6TNz!I`IyQ%x~9V|
zfH5q5W-^~?nc#6)jCN<B#x-S%$zv(Uw&{!HKE6vlwnborZeG1 at 4sa)c<SAoz9r`a3
zy2A6Y5?nsDtSM}NOPLGYc!<Cf|A9-4J|i}0RloD(#pC0jUhayhmA!oRXn*f<R#~an
ze_VfDuRl3{lKuVJ@$>zxQCrQ9hpqldQr@<D_4 at 9CUS(OKO at 5<ZfB*h{?frUfFnm)#
zKCFMBfYe|E=IhEhs9kH1+pzPA#XtLS+3SxsV9<vr?#2j#!<Vhm%4PR#I2aAik&=FJ
zx$*82w?#|2tweW?ufP6UdyzsLJp|0gW+Qh at bz6Cpg|2Z{g(>gEA7lBn`ug?B+H0{5
zWuLIAc6V3;6g?K;w+1tuF-RE~2u|C_xIM^nPkR(d)6_1g6NH}Xy}JXFOaU|Xb0qu+
zA=mJab&ilX^$#mr!`?;dTY^jaaD2v0wW28aBu&oap%ISR&H6-_2l|5uI!YWL<ejeS
z&_U#9kdi(%25Y#CZ{9h1jL6lU6LayB3Omv|ZV-eGpZ5}DomME~P(Z`Qn60bMUq?sd
zA at nx(vU`#9ut3=}>%qTkLLGCFK~P at Y941wf0{LF{LHb9X9uj9CcEnx$tkeFU8L=jS
zi>u9wHOd=)ila7sK4)#!7f&_$k~!Bq+W$*Ui}qruskx_jFu8K7yS-ib>K|QSN$Tjy
zIN95M)gNiePCL~WR9y(^H#)p22#(6y#vExt<HC7E8#}{c>xN99RAU~Wz`H5-!>TY(
zWI6feO55)8O<Fh7CzyO>sh-+su6$Xudq}hW<dH3m><Ke8ov5>flZ06fAs)W#z}dLf
zv&}#4w8k5Fk6DmY+tfiM>dP69$^rT$`liaq2e&BX{I?*?I>JP)vMwYLaK847Rc2~@
zS2D*>#ah(5)|uG+5nQ*AIU%#P?24O4Ve5ocBWnQs`1NbU+O6BPyf9wZs>BxOJ`wmv
z_14d=4~RFmTb(!(hHTz>Ur%m^VZ3uRb7y7c1p36iT??$)YedH$g4gXJ5j{4YdD=cf
zz)|=7^~wr_ExEu?wxmeJ6 at OZhcvY13zoF2eMO{<IC}JZoK*U=11}*sQJ;(i3i%ah2
zWFzG_={Hl6%hf4~%P-7L7}2HyMOtQzM3%IEJO3{TKP}^e>1Sc%2>I`tz0Ns<g!|Wv
z?ZFu?Ozn?r5R`X&60-T|W)HR_$j{BVEbs7&ZeIudmjk9t8NBarRm>G$n!VAD<$3e;
zddwWc$Pfg=XbsWNRt16Lz4HK2GRV#D<r at w*)pI7YMJ)b-VGzD&-F9am!+DO;i1;VO
z#Rlz1Y$xxG(S-zIq%(qz1d at aIYt2iwvedWbzH(bJi9W2aHEa`=NrR6-FoqvRL>>jM
z<hBgIWSHpl<v>pkbiVW}&y0kz7@?iWwW<S3jssI6XEa=5fk3?9c|>|kl<=wKfN<vP
z-EKrf6QS`j0|F6(ntMXIwARH`>ySHX%5;EsBT0_YLVBx-i&)FYjx}oRqedOcWhqLH
zx|(z3%#=<uR}Gj0+x(bO-(p5Fm*`YawQg%M>rVlib2!gBy{q4O4D2#Jf(yKv1V4GR
zXJiOnDl(x{JS}S?u at CJ)eb8$Sd2Yv%>0=PV<q8=-XzgQY*ub?<2RM;W>w$bqP~}Z}
zr^(X=pfcktLrlH3o#M{l4SBE9?Kc^s<PF;R7(^WPTUW;eLXu=(Y<|+HK0U=8T~aqk
zbs+vu5nLXz%tr_;Q<%OJQ?#El at q_?B>b}`QR$9TKkwn}MVg-#n-8jjlAsBY$Cv4{q
zH{CvTBp<b&ZowRn2XBydStbbM4F(G-GQ}yz<AI7?`JsJ!s(Jb3sl>B>%yOEDk^JN#
z#vxc2f`Iqk_V{9}vbKtlC<*70?{4gt4ARn{y4q`C&0~ogRs7B%tR9;qK~ua1CNCMv
z(9J`76 at 0|9fxdSpF+Y#9H33kBaVv|Hh4BpH;X-5+y`Z+^GYFBFM%;6pBi*S0T1t`a
zO;CcKqS(h^g!C1yQ#p)mKHfR_VdqGWTzXclWM=N*#N;PWejvQM*M$>v<*}S9oAPUs
zDJGW?3R2gmTolA-8n$I)v+^-pjG^7Cz{LRJT&QEcjc|IztxP<qVHHu0yH$DD#T{hb
zUUz)65$bA<rQ+c>gT$o1#FA}QG?>g)ze2)Ts7hCGTHLsQ^+7|*(kDfptY%}k&yI at h
zcILBTp4A$a135u at UI`aZex+<RPhB~7>JFI(Y)cxXq||17Flb)jfCal3GI9(jucBv1
z@#^{Qv2ZYeWGZrTz;@sHHByR<HRV!vD+A;f5rs7ZK>|t at xNOKuv4UXm$XWn+YztP*
zUkYSL#luFnu7sx=6%f5RgV808?p~YL2`z7aINo`*zuP?6!A%SZn at 7>RcdbW_37Xmz
ze<@_qWyobwTY&o`&XBG~V(I+CzWU&iMG`Pm2Ic{K6PI&M1m6R$(CWTORBO$(YP!-j
z7*tuE1{_%;o-ap!$3~8@%cvz4d43nG;o=T4(R_8d50hKPW21TWd}n{Z0yA7!3}A?c
zi-F^)@?^k!&x37>uBGA`;{b$TjhjiJC=a<ro;lcmAXDm5 at hA*%c at F49xQk$?XObL%
z0+j=nBjkq+T{0&(!6uutqtF9UY}4>vxIp2;*^O0_uCZg;9L>c#CW7_T0HDi62k8F|
z(hN`}hABKS!>Yk9pb;HlG26RsPt}^UH*`{Y1_d)*w*&_ri*^_s#Fq<dWZSa+8>Jnx
z5A9zy^cCAmG*f8!;dYXC&1n at R35E2;HO(UPtY?-lEPo>ls5y;na-J3J$&YI{x74V1
zHb&@(54?DF9P<I+ieJg%d?qMUDw0G2#5!J(SqJh7WsX>8FkC$V0Q=v8<YIYo4lMBQ
zQ^a;>0ht^B;Sf*;%X?-8){QzYHZ<tec(f|8MFFTe!p)#VH<hY$_VN*ubPQDl+oA-e
zLqsdSD-(?>TKrk}oM;8*_M8P=bPZ#m_kAc?bV|c4&HJ+QHHz%qOrsiMh$@ZpRS9w2
z{BRPW+qL>|`?cjtDhV2!K=VVy1uYN{x0{;BA#VF-zP4}XY5U!LZNHnR?Th)^zL?nd
zXU2P+dr2DAFm7~uJtIkPRd6ui?-6n|L9*80I0ua&3E*5oQZ!o#c(i!`;C`Re5uB*T
z=6)m+YlbV(DH>^yDdvv3Bmd5EYCb)w{JnympIPDbH9Updi;b^Vm$R=BdqKGnyOyj8
z?TW(xEqnSY(bGCQx}WSQIIP^VKiy{Z)B~d?9EF_&7KRlJ3X2}@_?r3zVxV#W$S`If
z7+D30;~;4P&y`!N22zyWKT_hIs}WWp at jz<ETEr2Gmb(&?^P+>3r9_KT+(G=(MVjme
zkC?*AbV4P|D{eC&4I<|toC{m;aiIi~7B1rgiSc{f#0M+J8x8cOnGzPi?9QD#jwWF2
z{VN=Dj>MAduS1aZg2pWnkz8H9F^+wbLhs<Z1i3~Sbglx3&}jDWe`hXTXY}f%@<XL4
zgXre}E|3|LvVs=-{LMJLX4Pg*K+r)TzfyM1&pQ*jpU*n^Qh0s}kZK_r_(}bg!o3#|
z<OGot?VCcCr2;+?)E~Sbwyw4+`d9Z0knF!&Z^~%Z;*@iWVj=AYc3{5|m)e%oY&AN!
z*cF#Jg<%V2V75RS%5Anvaghc!!ZX+=mP_9ZstRLpXIKqT8!a#8x}jLpH1gMr9}jj9
z?VfE{qta>(4iD&IJD}|HcD#rbo#)&Nwe+nL9saevj@(5KKA61etj6yzC9Bu$Fjcc>
z8G{|}RzqUwZz@%8CWg5>1WD#u=jZ at ro7jmb>i_VR_bn_UlNNH at h8T>c*KpLv3rnT6
zpV1&S13!Ds0B2vlkWVN9VFP^pV*l0i1KgDe{=%|eHNYvM6a^<^!<5HEC2)t@#H36-
zWYa8^%U)B<Alr5NXGp6o8D`SpQFlR7`B{WuzkXs?PS%=7sRqhTZ}k^9D2`jnFkH5B
zb3zmOkOG>Vz-<dv<BF~`qkpk0P!=r`RzV<#9EACcRU+Tye%s}#z&W;STT8BI*SguI
zO<_G2Jf>n+-EPb=%t1QuT-Pc{!B?rxIlHW7T<ACtGNU=tH)kUHj$<J}b;IQC)xCp*
z7f&8ltzL_j`4OlW{cfA|c9*pP+N{(h^I_>C at l;4M%o>oXAS5~rCCNeaIdd9$MH0BC
z`VDF_5#%c7rA5re-0z$*pZ4$uQ;bZ>U{bDKj)Tqc>RD-|a2YR4 at RJ%XWEyePmqFGr
z#99!GkmCZ=2IxRSsxNz1476QP at j#*<P at sof)4E@#B_{%bW=;YDOA5~UVIDYSuo`z(
zM3CDsTXWf_6rU2xX<`m^<q6L$Y at HYVH<meMn;6x at 9X(IzCR5%w$dqUNC1gkV9>yIn
zrMNi>yApfP7jjY!AII!6Nv{dG*}`pM&w;LR$6&B|P6$*av=St!lS^H>|1#8OtzjJJ
zm{Dw=tuh at eVP?o;W={Z=;Y$d1z~K2tu{1k?-9EaACuL^%&T;&>eeL$(8k(hBci!%t
zfy!w6FUJoD=NaB@(1Te1+k?o&@wXn|O^1{-VQ>OkZgkN^KHLt at 1yfg-t17fr2-{B3
zxsk;@7j{h$)7YPQh{xYV)nJKay9dY3zrA{Kyn7UEPQki1Rw^_JVVDU|>-N~sZv5iZ
zBO)rI0A*$QqPkCCP!p)y#C2Bth at 0aPV{h}=nWt4%I;thNYIQq-rX%Eqs*D4-hgx?Z
z{$sTo4h5o?4Ao59BHS>Mn^A3f&TuxpUBRxgQs0Ngjeb}(T^Y611T__<VuKNjy5Qt|
zK5Si%kX+Omz-a|iR14nx8Cy!;cO}368c<9qx#mhXxYcfl4$T1GB0QW`8unzIdHB96
z0ZH_lVyz4|Pe??8dGf(m5w2p at cdX(2|JZxiwz!TY-*?^)&-oC`Y)(_S5dulJyJbl>
zf|ATO0yQ9eYh*VrppdEs6kP?DnQ?#j^ZQ3+=E`-c0?Bsoo;l{}wxBAnk&$uF2v%IP
z at a3brA|{yVCoR?g)CX3f)ujnWs!dc=!yi33sOMCz#*#__dvKdZhV*HYD)L9|Fnw+3
zYzmMIZY84SJ4p#9z2Ez<+y}pQdGR#M<t1O^C!9(hBr5h{FJ-EGR&OmaAt;$(s|jX@
zXJn1g6C1Z~lz*0+j!Uq?s)=RK2FQT~suS}k2Uq-U_R+0d^+cZeC at iWv&f4nk+Uk0D
z_EGrdy*jJFqKbpgK8nA+SNE;$Vs&kAV|#1%QTp}02H5HD?(J->?ae-lzfJCrxx=7U
zg>LoG_$$M**2~gz{9gICI+C3jguij*-Z&k3__MmGcwn`o`u)fWn}`Sf8y$J%!s!SC
z4=Vr85F{LOsg7MwKr7OQ_0QAf>NSdD`h$5`f5x1-kNvAge~r=N&_`C^{@P=1l9_ia
zW8r$x6Q0Iug!og*xBIKEhB!31l&z?B4{4PX?XpcdWPV}EG`yu!4w1FS#TqQ#^&M8P
zXzj8$PCoje1)H*GoyUI~dAtvoXhyvqNx7$r5;jXsYWXaV-S*|(_+^+luAe_$er(Ec
z5Sx;<w#tUjzk2R!+FT|Z+Ijt}$#9v7Q3v(EhzPg5T$OigqE*F9J6(pGMsl#0)&{O~
zsHV*3FMIRIybltJGAq<|YiL~gO58x8Z6R=}jqEh~>qaD!@gl=(5w>=E=(~2B_}`NB
z<=6Kb(pT*C_w^#k;>v5AEoqsNl_c^+!cl%-zgYjewC(}#Y$;Prj25M7mEEGSN3jai
ztvev^D3qZR%pFKu7DCOhX5BLmQZ>uPM^%bNw^95RM3nPCaF7u0`XMX1q#$JeO!T at j
zY6<Ueo?qzqmjBuin4JGh8P22a=7Uo|+vca||N7*!yPtki&Hude*`4K;-}68JGcd=E
zioZ_&{~TLBAocT8rScyuBQF)4l at 3`+a0mVCa`ux9>Qo7dQfYun&aX;7=J!kQPv+NH
zY#=7owI!OQT&*@>X?3U1TTAq>a<W^)i~fBT?oC at o96#At=A?1lj|xzeU%+auhQI~6
zAl*v|piV8*fku16qXRcqsdhXr&G04vo?VcQ!P5Zmbf0v0@=6H>k`tp}6>e0}NN-4U
zE6?YFVyuo-J^P9kbl#ESjnDiOR$V6$yp$p>$-)vPR(~AoeTC98#6>(TRBDb4V~rXD
z!*hx~{gMg?li{8a5&*}eoO4SSnW&W=2hGp^?aT*D)_n2sQIY;wEGQtfw=Zjze-SNK
z1gy<(ZST7w%D+m+D18?V4*pg83$uR&fai|60Gy-YxqSR&e;$&FTIg<>^5D?DQ-m#)
za$+#~C8nsp7*Z<I(r~o5)3c6PVmDZl9+9nrh?Pov-#_E7`Mg#vIxfaqhV&QZ3id!e
z5^Ikyv>=n0i;f~%q8(8w{;X&3P(JgbILGfbIOL<-GqDhFh@?^Cos0f{oR8>`00z}4
zWP;%tp*16Nmk&b$Mhc)Ac=$L at w{J^Wm~p3}IdhuBD6-`bX9wf+&;7r6$xJVBzhc$W
zW?6g6N!7K?N9_Km(5-3?m5nVop=RkyB`pJ at kWM=6q2NK at 9QVpMAdIuWNGRJs$=zVB
zli4E6&RS#U`Lno;Du7frx|}T^UyJiO(h+7x;YvVF(xtq;Wn?WEEl4FJYPoxj at 4l+A
zlW0w?HnA_2yVmM#mlq^uE_VkKYrGKVIYXGss&H|OLwr_LPsh)7dr)M`l<VkwV4Qar
zmFts`3pN9N?eR|xWTwbK!37&$j*5^+Sh?0Zlzt})RfLzA%O3}%h*4>6%dF2(l(3GZ
zW=vw?w`dY1zo(x%#9=tHMZUZe1?`_J2 at jVDKY-d)($g=@Xfx}NH<VHaOa1=QfkMr+
z7dzc-<FDqKSH;5h2EnhvoLx{pE`b7PP>wZ{--nPj<6uxJQ7Zg_mVrtI$Nu3Hh_GK!
zLGj_kdhkvfoYa_SLrX#z0DsLKYMjkb*+L*@wQcBA;ZM1Z^=9myZNwI?6TK|Xi=(1f
zTonC6$u*CQVWB*n8wF72GwQSR?TH2*@#l#(9nk2k80RJFNem92*#pFd;tziyqjXs&
zw+3;$7UliUdfFW)Z6(n4ur0ghYRXaUJ5i5krWM)IR=>9JDQHV0c8dC37oEA-*rE{Q
zAK_ at zmqzy&03zknP87;Vm>(oGHV^Bl`qs6Sk3wWt#HLqs`Cgh4&)UMAYz<y4i3!1-
z-R{nw*V)yD7pDBGrT5~U1Njqq(mLut5T{O9y<io74Uo#WwP>VT=c9HJMxkN+(;?bS
z9G=h0jLsj&oogFX^e+Ghfs_1iV*(7{^zEuz2D9&UORwAC#6kRqh(7<aadI&I3d at SX
z44Eo_+1lb at mA!sA$l`F}>KN!2G8U_YE at O`pNvz$FSMzZkRn^u3EOE})x3*1`9g6FF
z*gEM!ux0&Tx5Nw8F6oQsWGC%fKA7L~ero?J?tJa3q+17b at t=pqMC2|Zd~=jc6BwX1
z#SJE?VAl1wG0kB|bHh1ubi2V6UOP0AwW- at kx9ocGs~U7pAg4hmhst}6>|mJ!_ZDi?
zxPT_Y9l<vVK(dEo{JWIsWO+f~lab~3!%uF0y}Q}vjy&1fe)gMRl(YfOUH{P~`v38{
z|3ksn2+otvTyje|?Iejb!V2wtM`iAHR~_=2!6gPDS>{J at d1g<;%CXC at UCT)ew3 at v$
z=}#?;UQ$0q8Zf`O%w1{?3)lsw3$SO%sq4jKH8Y(XhutFT1Fj2;KG$1X{ye$*TpG>W
ze*fGQ3#*%EFEp(f7P^K82y|1L4R#`#dZdJm8Dc?SZxm#}M9rr1kxO$ZL})D*YE~K_
zFhVGI*oore`-M0BanREM;v};E1dBz7-DPL9ztjE83u16y&1d3rP$&@PqEMXPi}=t8
zlz{}G|M$=K`}i-EINOtR+Bs=kUbboa6jsV6Co%uMMe_i<n*5RAm}4+!!;?yK5XFLe
zhK^<}G at 9(Dky?*Ej`xiC?BclpPDScKVrk4HlvptO2-G+cE{=yn1d5i`ewdRd^e1YE
zJ%}vuC}C&(_weMBlo!Vow{Gj=w$Y6O<CkmXyhJ(~f|f!y at RsMm!3JuW|88*crfry{
zZ;Z{(>3a6PrRAlSPr+Zk7`$LhZ++PD6^7EE+J><k*Z-+^dVYe%_J;$qjNkcT=?7zg
zD?fnVwLRyTN2<{3<{nm8dk@#fL7b5`2FV8%>0e!6FP?1gbT^)E6<>E>7T4+)HHj`q
zc at vlxuIJijFYa!wb$73oNoupzgtOY~vV3p)y`dh)?xm3NzT1r>l!BF{_y&|kndVA@
zks>PfgeixZzh-Jv$KzfyiphpJ_F{Xh2*QJOysGK>)r}_ozT`1+n(~2g{G_=B=Qh96
z7BU at S>J}zUdZR65uoL9+2hnktHHJX5ypt6aYyu1FBZ(mqD?Mkd;y@`Wc9O2uPExN?
z>8|T!nB1n>UDweNxLv`kVKeVpZjQ^Hk3wC%Xyci*j_gY4b=|d4%G#?68c#c}UFHPT
zkxu(Q%Z$U^beXYz`!WsjqBs(<Q2&BdJvax+2$Cozo~mbrCo&69WUu)kVW8ot2AnW_
z5nK#%#+f6I_f=GgI5Li1(iLPN{_q=G#p^KssITPnrQ3#uHYODP5cO^rJEffEz2)VV
zyKPX=1lbMzb at -eH6|Y<0*?wMOcGFpvcdK!r>+ssM-{Bg)kolZhMRgj$(a;=tCW?$j
zQ7B^nMzV}VaF<Z!NF5+0QSYjctF7fH*F9YCkd at zhQ|Kj%+cm8tj`Km}kCL;ofBaX-
zdxV+X5xDVnxel2WewSPt at 8TmI<G=soC6 at +@lslg)4){Bjh758eap0dM(R}FEBHyS<
zh&S3=cENs;q*GaYW@>mpb67jiZzzu+#v!t;{&HIKo?M}EE#He9GzH0QFTd#6;^oo5
zr6fP;{L&%o08$2`l2z3Ca>ijw26HjGx{k at rU7VgLlZx1=7!z?vR;x#D^nBTswWN*>
zoKcsmt%hu+mHc2i1k_psQ at I|eB#+JGf=CUuSlq*f2{&4~v+`+G5J2KBrgypb$(@D+
zRg-C#R^EGkpadu7bmd7e7Ee|;cf0N>w_j_J&^Q*opux=Ib+!AK&2<XUbmmWcXP3Q`
z{XLn@%$+`#BQLyFjJhe(7$H(h!YeUk%tF0*brs+xo at m1Bp|rgGN$ZwF6vlacD)g>5
zIwK0fV_a0O>WRCjzwTez!J8x&idp5Va0MH*B>gNA0dh`U2%Y|!&<IA^bbhrHDi2c>
zD03pzEVeojY=^cp!|$LQh2R9gKNS>Ls|>yCH!;CL$wOX)VSv|wnk~>(&zh62t>f;c
z1yto-ZKc#zE^XrIA7-C!T2(Pn$t?R~LVN at Ub>bz?Eg<5GlRV~cg-0B<1)Nl(HEa<?
zNW_^vLc`-73|I-CCcWk`GVn#{x<g3WVj6f`TH|$qnJGeWO6I*znT9C~)<E`{m-p3#
zd%0ihF$h`PS4zOeO;w!clz;+pAq4?eS3bp+RcUAo!JTPfv0GF9k4AR~&(VR!z5PPB
zp2m|$&$nil(kV-|R&j|X1!~38>aqOh9<m#s&A%S>{GytN at +LT61?+DgLvt-)L7`4S
zM&gR?iU^Mut2bbw-8wA%`(||$Z%@1NmhUGz_mk6lvGux4>zX6-`}c0Uu`&K5=+ipL
zsh-A$9A--Xes4 at t-%feNfuL8&xRL6OW4ZC<p}<$-+QuSA%;Qmi{KkS4aVGY1r&>nz
zuZvj|$w at Xmh^h!FqF&(rH;odEB)^Q63#x=q|C`1TdYEE`c!xv#g+YWd_H=#FI~l&V
zxMeX;e_|lZ+v!Y at q4Ya(>l8sJj{?D?Jh_gAFzRvfc?fY57QG-M5zs!i(yCIH8xZ0m
ztAuHSB8Cw$*lpa#lv5OFfjm4n8TRaDZ>T_XdD7B|LN%*qh?@@sBYDaEqT?Fort76c
z3SvDvFmfgvlKJ6<JO#P&#sq8^=l#*?fS_IT&Eck_^1E`hDnkjTQI8m1jQyEYUgq7e
zw!aOIvE9AZy%)O}I}dyMh6c7AJkH1XxC^(py8Im0=f*9gs+0F@=*}vFFS}&8h!f4(
zCk1&xjhrL0^;gT^$M|~Q&}naSN(xqSbFWsuj~^?LHe&&quxH7F+;li$QM(gkPSSE*
zjGewHo8D&2;vQ_uQb!C%$ONaw;_UL|WYLI&bU{4!J1_Tl_i#T3K!h;-gW*pg%&U1h
z##Bjo{?@J1Pp|N0ZxHPawRW~Ni<Ur`R;08N+<-3+i!Vi%H1l!);_%Hrfc6Arqj5tD
z&wJ`@6bNU-7%6J|7Si!*e%ESmOGb=0A&WkUClXiD2*r*K^e^C#s4C2jeKMHw(i3xW
z{Nn8LR2v$17Ie2v2^|<D;-GWKgMB}%`UyG8;{BbB8zmS4hKX~Zqj_F;oN;QqO+Gz>
zePhMGvW4Oi2^KS4j=fzW>X9{=C$FSTeCQf<DNM$Ol{0tozuc-HIe9jRhlDu`6qPfN
zW9Z+E6WhLRs8{o7uqHoC_O}Rbp;qHNvnf2^*?6|P^Rl6M<g+xl<*%9YHu>)?n&&qA
z$6O&mK=8gaX^a2N7r7@?&mDsKmuqBGKRpYZXu>bf7H0ZUe=}1)LN@#@f3J~$d(-h9
z at xv|8_NBW{ys7Q;$I0vCYRFHfH+>-n<P=St&yZ{6IvMw0>jhh+rvYy&mmzLd|1unL
zCP#$q>wOw3``f02Betil*K{x5^&lZ3cX(tJqR*b1)FMMz<g`hVyDm?%XHUHNFy3Jo
zQ6pKM^2uwNz at vnlL6EYuF{%ag$dEREq{kRG$y7wu-YbMT(%ttzxfa)vMlapv`NG51
z+QRjFc{YHVv|YUXTV1_nyP6iwl_<u;hi+$Up)HzSKb$MzL_DCL*}Up7BOLVd%&YqD
zf>$^QB0Ouf<p|fNoo@#^e2f6MsJ=4fnG_U|b1du(<6yAk3DJZfR%XJFB&e)?-Thtm
z&Q7IDCnnxxvtm at P`Asi!xT>1`Uy)G!&$%IB0op+z35$k=Wrkqt7`&U{9WHNHiv<6x
zQ;PqosCPZVYrVdi9kua&`p$(GRoPGsWt9%3MndGe*i at we@msX{J}DN&S)!OzWu(Ej
z?GjM=6$tiBF^iA;hi{8p#U0`qKU-S9!&CBkB0Vfvq&I%+VUy<Sha73Wfyt)*F^;&7
z*spOJoG*R)U%pnj)NpiB{I5?wyZ5J0R?5|9D4OvrL~cDXwK3{KVchHQ^0Q0)Tsw)g
zljP at LODz5;-R>~WZz6qG#F$svhHfBv{<D}#WsTQUo|5sGzg2yE`aDq*Lxyx)D_{Ng
zM5g8+%SfNybIed_or7aHQEeeMxv7RoD49ga^@R>&bVm=WokGZ<_RF>9ImT|N$fcv(
z)nrfGJXuo?6bs$#It at 8k9DUAKz1Y`Nx!CbC%SbdqxedK?syR1SWmfvU5~9!Xi&K6-
z5c`&dd`hhW-KIsTPZxUy>rBWh{lKI?+=8Af^ub9V!y^esRp=z-?87f<_22h~o`*Ly
zab3m>hlS3hIi((za_GGYpQL&zcHt at p*<_N;_ZEz&^tX6urrrooVRk~6=yA#BCS2lt
zJl%<8QkB^L6<&06wZ?I`h8J70fI|R{U8Hoa!jiP7V7GEW-(dE%8zFj3hWsdKY1Ms*
z4K|}IAG8No`na8sKaO69o2 at t=d6}Cn9nakG$Z!U9DPu4sq;{xITUM#9B3HE at t=2Gi
zdS&<|yo~s!Iv=m*pU4g{pT$4L#ZaRr<R#5<E-r^^oBV3^HTysI&nU%{t at NYxho#>u
zv)wAgTs3`R`JI+o&s`YrQ)Q*?Ij0lEG|ml?T1~@t^((8ZCGgFBGkI0NX5#r)m|C&B
z at 3YbxHc4fn`UI*9l3`D*KP^j`u2$Mo(A#4?6ftams^!xwwTwUMNwJ?iA9MK4zHPDb
zm6_vs_AhTCrVU|qIU2 at 3cobW3j+2_Y)tRj?+V*Lti1H#^|H^XQE{JRmP+A&u!@`5K
z+=^zIA*>I1Up$3Pi?zdvfTqlUT3w+QF<ndhEc)6+FlIG_aGo(H4sY156)XRNAGR!~
zwos0|@=cuv$1%d9eYcei<5}cQY^;BC0JfV{oAQxQ;vB at 25W&F9>@%$aRJtCD+IEqu
za)x}v)+Mee at m6{mhe0U11q>a at 5X0TV)icD{6o7%WV_B859Wk1f3Bo2Q6J^gH+sO^a
z__3FbS6Z6l)b&+)!Ywm&x=rfLy$D!NEqP<9mTCU><NGK9xb4W^2geBSswO>Z$FLfj
za5A&)IEx{x4NWRQh;Ut+_tUNnE|dB-r(PK>BhebSnc2NeVH)T4<aqI~Ox}fvHt1~j
z3ee6X8k(C~bmD*xe({Ui?NI;tIH$@JzV2VOIH@#XeS4BeBI^Zir=${+p}o#W{0z)_
z`EWL4R8g79xOS7ARM+;zWq?+Gr4?48sZaEyz1BEVoO?QBQs*jF(kB^nY7Fy!JW8Ww
zd}_*QH)K~gAF!2ksry9kr7zon(ZZB$oTjIO-j`>%tSStkm8)q0HS?#|IcEznx*3Dh
zFz-Wv)ZXs=O~}wRMyGMwspb1IJB<@I&_>Csa)TPjp9!FD=YQ(d<bnFs=YB6fXoF4R
zh58;2h7Tk at jy8QhXI?HD1de8yZ~A>SB$7C(LUqH4r<Y^plgznmd_jkE6qla)TzEYt
z_NwfW1^EF<y7rnERgLkCJhlQ+0!syh+qj;V^qV1GZFb{-?U?Z1sFR;}Wtu7{<S);q
zr+wx>Ee^dp(}?-`Dj*LfU#p+pjJ;_3cCs&pIK at E4+>f34^ssThiAEZ1KD{k{)h>Uu
zvm`<2`w2r<-!QdLdmV#%Rjx~p&(=4xLCLB#wb!vNZw~#aW3AnAqLl*>F!Y01Ht{F~
zAxDKq*U8}b2<r*3(l$LB at m~-8 at lDnZz#p3i at H-^S|F%NEdWk18V(Y6||E=MM60_91
z1wBM0%yk3PgU3}_-WL!TWO8XHAy(v2w>FjC!;Pj-R{x>Af~hYA#ASeTF8U}S#TZIS
zK_W1W?#qx^!z$yX70X|1D5f^U-btWb%vJ(yDQZN-ed$ZHhXROkj-eOplaoG1_{1%z
z6(($dU>Q~G*3LD1NF4?iWdIF==~D?<OIuPkIc#m!p_nwjz>C3Q at 8p&lr0y4|#BrYV
z>r!@AWKpizmU>&|DQRb- at Ik@~_A3*sF#OheT6uyIA~(|1WMPhWyH=xsPBsue?cHNi
z@?Pfk^RNCZ!91=Ztm=Bns4CoeH$$?fzL8IEOP;L%B}A_}Q8I>CRRAB{Zb6 at 9WJ{w7
zCIJx?Y8>uu9Rs7 at g$np&NRsc-I75g^wIrUd5i&ce_{c6NUnxD3uae(U>vBVUWtGTq
zZ|I(UFeb4nR8 at C8BxFi)2Am|3o1s#35&Rq1+N%R;P!Y*s<1HVQC45+#|M+8G0W1|`
zV!O^Rj?Fs%;`}vfmU%=lZy9;?FwT<l+|6o;>OGmtN<#UNTpDS^&7LCIT9o$W9N@=x
z05P39gK=2 at jKuo?P3D+f|AD6`d#jt9zrsGI*MC at EzVqqbTK$JlmhasAz5c_m0Qzf(
znA<qIPaLEjb at As<?tWI>SziA1*2?m&l{>}Cr}yuCc7NsWe-vkfzx7XwxtW;~Ux+-}
z;NdE<Zk8!|2A<abGc)t=Ar8|B5*e6>!?#lOq*m&!tn5-Y#?l2@#_&qb{Co9daRO|u
zlmlPF(|qloes6Gd2$bh}>(0{3%F^9i{j=BPmwscVC`cMj9MCVT{_=1CcFq0&?B3nw
z+Wr6Z)6agd|8ny~`~@vt==^o+zm(YW{?%Wu;o|;ED&yi&AV8rAGEKE2i^bsvNli{0
zUN at _($~Du-W*?^FVjwKcU5;WBOl5ue0~r86e?7byK2*zczxKHvBiBA>gvpYLhG?k@
zvwnGcu1G!d*h^HKnZZ at 6TeyGDGxGh5!G%4Kk&5}vp#M&-F(9B?efx%LEm7*TGCKCA
z$NWq&-X<i2+T3`yu~!_AhNteV(t|DDu#E=?Cs!IO8fL;<WQ03CYv~~TGQM&@rtm^v
z8nRvgaBw_0ERfKVi7i at YO1287pgsdb`s*jme~e2scOjYDom>~gw-jhFDRPcVDC0i$
zWd0s&8tne%Indxkgvl&xlC@^+ExlrczqD at S3u~3>HsQ&^zD&lsYQ;b=dHhCkj#2;M
zazFx0U#)>{d^jRnd>kt691Z(pg`$_sCrKu$F_RF?Sgr_-i~F}a>EpTHS?}cPKO1`s
zA9u2yXR#~go>7yjPqW!w+e3pbP5Rm9@(Fki^lIMraD38xJ+{a3R?Fp3`LFV=ONYy5
z5#|@`8 at qcOTRv0N@iL2IwRvS at Hm`4AS7x;D_$1GKf`pbFJzkA93*xEMwF^xz_?nBT
z3{+ZX@@>4+V--$aF4o?a6%dKL&A^)DjMSw;C?~{;`NJo}rnEaX31M3K_iaI-bG`tJ
z{hIGcZyJzv)CxB&6x%!G{9LTeA^Sx&OeoDd6{a>#4%Au*LcWeBAgjGwA*tEJo_$M|
z(6|WGD%!;42lag`g#jBc!lF#||By|;9t|(g_YX+9VifHLSpRfq`^EF(@k`TSn{a3h
zn1dqjaq2lB6658#`GUS${bpn9>4fFf27B+t3`a*)D|sLIZ11d-*mfd(8Uxms)UcyM
zDgU>8MTeAwDx6RGVI{Plqm<d;sJ~BjxWl)Y6B|BC%pxJKEu){W=1+((`yQobMR9Ef
zi4B+a%dJ~=!l&cPJ6hD3Uh(RAE0pm3@{F21VRjCVr__XF;yZ19nAKcuyPHo%+6HIW
zr$@T^%7)Y!das2|@D<;5WgpeIDra2Dx;;)XgJbXH{7p~KAM_0O=vz=_UUU+<=7L+w
zTk_^9DCvRxD>??ljaHC at Lf<Obh9e0Wge>5aPswoN<;(~WgXUZ`wqUq5iUyPFnvy`I
zu<nhJI1l==&nBFVZ5{Rg22KjO{#HBy!}QA^|5(Se*dv=CHd}$$-;}+^b}S+<4j((k
ze>27vKVr4JZwKM(G&;-;{`kk{FfmSfp!H at a7Ou=6{?Hglvo((=9In#%v>ooxKfm8N
zI_0);+VCpCNnN&|JW-*Mg@&LILDUX}c34u6N2o(01Noxu>>Hby4!#dKcm>o>KX`3r
z(l+8Y<G=PwwtDEL$=!eR|IU%?L8+?1-ZGmK*D)lYlDr0x8iv at 3^&5Hde0xe|OWn1o
z+6Z%))>AO?#bl)^sB}^H$_hI+SN6M!_<F;@Wcv?Ee_$b0X(YAB_!pUgrrUq+-TU;@
zy8Y*~yZ1i%-Tr(1>HYE+A7=l-wRDD?lVXR1 at nIhe@L69a5eelfQRY6jmI8T8>8Ee=
z$k5WG*e8d>b8=Aoukyu;wDN)?*pVAwSc%)vp685e?QuupvmY^o=)>phPl_?c+{skP
zH~R9+n3=|`+zo`rO7*9eyE1rxW(M!iisjGl-~IId%Dw+64zEb?ynk_u&0Ez=BXJ3Y
zNfzttY)K81)nuZ!CqvH?a_-nJ+EfB)*+TY729EjTV!V_Qz(ARI4Ai$R>o=0HfL(~2
zsAz at lMFK8l9eLQwN+NU_OY0<O?*USoj>|p1fX)9ju}jZKkh%gd&$?)y)WIedGxp}j
zift0j9ev7i+|;W%&3{=Z<94>6{P{{lb(jlHvWhT)shb8CrakMw^SzNN>7xjS_+ieh
zb9P9(^#H=|>G{Q#v(x4Zk~K=qjGzLfG5oHFKpvDGkz`9(#3Me^&P?C1rB?-{2&Y5h
z08}YA%)jrVCuYj?E3n>ycTJmoTLPwGN|X=uFIVMaNLCG{u=-I_u9bwboHcUNP>)-s
zeo~?*tdr)qO?$AhJ`N+I?pwV36)u~f%*k^;8iL at bMBn>2f`Zfv#455y72j-hzb)Fw
z>cp-NG(q!|rIn>S%Voq%W$xa|c(|xmpHkyxdD4VWdM8ZpRHPR06*pnHD5^qCqCe5L
zJXk&QI$Vx*UD?A&wKd<a{C)ejPF7(oO-DM~=O at c6%bzt4h6EBwb|*t3N<zLW5NW5o
zwfd}EP^fS9@#=1Cu|D!anUb)#ZKeUun&rlf=&dI8${L`krpz%npT8<NdSi{Q%uHrW
z?BuO8E2T!geY<f*{NsW;I=U3fi at +<!TV>3RzOR81f8jgK61qj69m<m8j32HPKde9g
zLHWX{89y$5I6C;D(vyX?_2X*B4S1d*dqdLk7o*>-?rf|+-lW>i=Em3EVzzyVS!_|u
z<Rz|c*KTrq4-c?dY1LQf!tt;$=*-2?M(D&(Yjc#MdjnGWL5TjW?Q~VzaT?l0#HgOK
z_E8e)#F<+as>-BpDDFO4eX+SG)1}}XjqpTWiDUicvOl_djt(u}0}%^cf9ft9bJTJ8
zhS(dA{RVi;op+nR$X_JAxR5N0+4IwBG-KTN?~8h`nNXuc2|wHwgptFyMmLO}T6ch}
zF(<ME^)A&fO|r?X`;q<3e}C(dtt?N<o$0RG**)FdeoXr6SMvx>K)Osa-D2!dZAAyN
zwtmMgkrg#@WdSoIN!(*Lu|Mt}$DCIY*6=*PwEj&fWF7m at Np`DP+v7JfuXy;I%X&U8
zwNU2tam*6O13D5vw@^_mK3T=OAXxM=z9Z6ZlgmF=Asd{VCqoo+itE8m!a6N8B8TUz
z#%JZZhxD$jF~++ASvOov)`6cEy<>uv!r8+=+_x3CJCP%gF@@p$gG*{s_Y3N`%916a
z#*y@|kRU_P!T1|`gxcRF_}cHY?aiN_mrbkmK~so*x7jNz>zES{0%gkkSskeSJm6KO
zHwWR*`w%y<{P#%pggk3E$#BBT9aehG>C1g<%B1=?b1_B0#LCtgUcJhY3foIpDv2^!
z)e%cW<aj=zpLRTX^gS~rR{>F_>TEn at I5Rmqk|1~3_KIhHBuN)uD!Zo}j|Hhu7mCUw
zL*Vm%ttvXt2(S|sn<r&y51DHoMss<1aVb|W*lS-^#u5fi*+YbosRYk<p6)-p+Spxv
z*2>;|sPbT-AU0nca2>#9+ian&=1;ZHe<sYOx|pqNQ{M{G%%2Sf^J^!|2%pBN%_|FN
z7^rQR+0~4kqj5QLb_M3lZ{<a-NvoQhpTMjW_FD*i`b)*F4C0KW`GgB%y==3_c5SSZ
z`6s4uJp-|2 at Sl=%UB^gd?M at T4Hm*P2j&p>pNY{04*<1CR)y}X&jGS`u{4dGH<%LaQ
zwyFxLqbYTfu(a~LSVX#4+|QC9I1fqRmF&*wuT?13Z*}yUj5=yvK^prYO%Q=s-hBB}
zC!<3Ns<5XpzWy24c10;#$TIZV_ at k7gu`9WYxbdXC`WG<H-XYO`ml%2o(8#2Wv`XEh
zfXwN5uSdR#%+q*<#c6v`iDz21e2;ooZThW!wkRz^K`v<}2Ct7jH!GXL`C}=L73tv*
zyD7+Uet~hTlFX7YMtf!ZIk}Io4jQA`qhZnvlH6G7U`5!$FM0UI;?GYm;X4k=XkR0~
z(nsXw+{u7Yam735KQ+!D#jYUYCLp$6uu`nc4^*RrsumMO9x#RbAWa3kyViVKSwZy@
z+q}x$@X%f!p#xOE&knsVT9y|~E4a}muWUfQ^z#ozFe#Clz<WOG|2U9oQsxbP5q{Dg
z?w_EBdRf>9u9H_T?E2;T3C}ysB0_330#`|Ei%6d&5iA*<BPBA$MQAVl3tfH$&5|e>
zbD*8l5=Vur9&I5p*&iSvJb38IJm@&$lFr*B7X9MDt<g1)iD+~_lDTi*3LCSQDr~ii
zX&vGstGzPPa}=Sn!PA}2d<2Vbn${Wr7KJG{)?{6kr915k%gPp<QE3CDNLHOHa;}FM
z6wWTsi}TYSpdMdb9v|n2R6*IvhS-?#0k^&lmzh^1=ICF6A~qebdDHb^p9>mJWkM}n
zeVT@#2SvLfNV8PbUL*=Di8xK04 at RK6c5GuMK9*n2%+6FjYjvrSlB{iZI%-(53jLML
zru>dUgLtR-=wru>$`MZ6UoW;KC}9gtJZU}ziWr)$q}9?ic`;Jgf3u~e!=D37hP at -f
z1z>pUrSv61xBe8ZG%&c@%Edp*Rl13Iuf)>vrz9 at rQMSTFqXiy2h7C!X9_|BBw<K3S
z$}Rr?mDU|+6oO#US%WB2L2I6yw_oWkQsDOgaz(N4bt_l9*468an at n66ZA&Ee-zd2e
zeLB1S3uSh8qMoj`(-3$5Tu(4ELNS*;hUCz-Scu?G%x{M6t9NQ~g~4C5CL at tF2sw=8
zSHhS8&-FK|gpht*bkgg2F&el3M}{l~PmGS9m(mIKA`O|qP$pZ*t9gxX1p0dqSmfkH
zs?Y;$*5rf<e>aa_8v#^n-rg0Kd7ZJ!!^BZU^5gG$xWIFlB;doW)pcXHrm;|cBwi<L
zJsX!~HtHV@<Z<vgUK8VpxE-963*h4 at s;M8%Ezyn-DNBt8ld>cBrzo(og;=YVP_YC~
zDDM@%Pnv!>>1yag*x&Fhi$510P7DsGL+J;V>l}U3t`CgrsRgX(t4zAMHJRf{pn{tf
z*fzhPz6%=Zr1jO}$hA6qo#*d(;h{nZonVs%S&843<(0@(D|Xouf!7b#qOmrxxPMF;
zRI(HgyV#LRQcs-N8VMgo52Q6~AEQ%?IoNk!E`dBjSc->P{hk#DhhK$WOl<5#I6#D$
zHAj%@n3~ZJqaEC#%2{x_88&D4-#Sjae{nxLq>AeDaf!L%4%t|0m$QTP+H`UWng#-f
z_owFVcg%3Qbfy50$wg=^mya!?@@mzK)y&4MLFxLZcdP>PY;ik0PHlNv8<R}h-uO at T
z?Q?|QtNG`If$D{If4qU}FgR57UzHPuN2r5SVhH3we>gj!<!mt?9X_0u6Jid=w1?Kx
z-#Arp6E3i{-lcPjA2!odk(#P^a`A9>7J*+8u at 7gLXVKV>F5WzxUHNpDLIQ)=Z}{GR
zC;P%-|KaQ%>i?XOIql(WcmdAtGb>Wber&yZy|Ml{kkXPnM$%c{y3oWb0%gKZ<r#AW
zmR3ZlP)yas*$Z^ncu)bUW+R~Vot+KP8vG}X?=H`l7{{rY`Ssy!^>B1#wuvZ3gkg<?
zaGhLxiCZbvAobJF7frD*g}4_v|7dpgd<~?!O1Px~E2ugBLG at G1ahiJP&#7&s>`Ar#
zT|NLexTM?qF&s)!1nI&$*n%?tK^HUu9!HHm3V%2|>SLijD~we=;j(u<h1a+vh6v*g
zQt<pj{<=IZS(oTKFJ8PnsyY=ArsZx2A6>fLcB_mjrkEW;EB-9a3&3hrW|1iIKPD=x
zoLY5K8Sc|$V&>(6<)~fl#CrTpQqL+85?nrv@?Ar|%G+^MvK68JUL*^Nh=-UBdR5Y@
z2?Q#UAwPnQ{J1_Qf_Ohrst+S80Sz-E(n4SYDM=?OWGNx%5V2<;B8{SYvOj5QG446L
zdmgJ|$?ADeMDUr%C>Ff~Yy%PkRShJw`z(Zrf^a?GCosb;M!vjS7)F3uON at gz&r3I|
zCbvJ-Dtp<5_olpMiPys5l4JR=LeOlk65JUqr3e3OQL%EF|F<aEWCG^LHHCB;RXo3H
z(4Z<cv|(;2fZ5R{j-nKcXl`Y^Ow8zAJK_Ikq{y%^BSc#MRHdO(d~8nn!@?6PX-#G*
zBUWm&Tih<}4 at H=Tn^(~iblWEPjy>`tu={!Y#v<4I(#8h|qbN2vC;=H$2E!=JRd{65
z6073dfYOxK$(((qE(xW+xH>`Jn~=PyvI4U{%al4{ta^5(UD)p7HV)T3rP7CO%UOSI
z7xtl at hybJ?i?UI&;qc3^usxfkb!Y2{Bfrkh<dmLzURs1T`sK%!hN|yL+nI1!3C0z2
zXE3H3T*Slak*A3ct~7TVN7}z;h_nu!^)-mwM1`P(s;_4Qb5y?R<RziC5lSJ_#1wOG
z3WTyYJ+>!dqGZ_QZi*st9TA*H$p*(fZz1SwoWN(IYy}Xy6|wWadVMI?R|m=QBe&hJ
z9v!XOn_2988MQV0z=PW%&Ds>&6=#Y2lslq#iQ##0#_`MSnf5vjRq9=?L5J%Ozc$>|
z!v+GYEO;ZX_d`#(=FYy+wllBkFFxjctm`(sRt61D*lsDT1&3_~IoybriE;aD+uL7n
zbc3nDOwi$@S1ta7 at 1q4k2Eu9Wn#O9~RvCV(9tjBtx=IrndoFl4P&Rj#q+`40X1YV9
zO8g9F!Gsbu^u|)%9^d#l-zmj2n!L|yY2f_G^$7vv7v7YxkDNS+0`3}2_J)xL=2&9n
zs$pS?%5+i at Z=51e_LhgUt`3<%lg=Oms1|iYBag2ynM-n=NRN_A+YUgs&}FB;L5Z9y
zq2435KiSh!Aw9kzgmR7vPB4d)k|Fn~{T9a`Bdw- at X!k~mZ;Q9k2SVxbB#alIHQnPW
z#L80Q3qd=P1${zk@}=7?mf@(Iq;Wu(YV5YTcS!x}78huCqeywR?|fNysD1Exp=4BD
z!fn(?H&t8IHtJ&UVMW0>IX)b;SWz_I%`GWvT^h7}9r`R6FhahQ+)Czk;N89v3}<HH
zi2QRJsG`Qv-X>QiL!A9OBEiw{-Pz;ePo_z&?Me|^-~M(BLb|!Ry0@{t)%3J`U|?9B
ze0we1kcl?m)}s4g7K^))TniT3nf|E=kI|NqU*&}HRYSbG2b+=h?DtxO-hctN1BrB!
zk at zIzWF2kY{u}$dVLk+)7;36;xA}X<%H0xr!<|0LoxTLzpPX3K8G%q at UHD<~WSsW4
zhS3YWzdo=>MBnyCdRXq6CCrVLyEh0B*i|Xo{%AztGYc>;=^KLJVdBSw*M#pLkvsjg
zk3IP8H6^}>q at wK?3TbjzYM at m*2Q5D)*s=9^^>bwbqC^N87)As>!)_GhpFD2rsGo4v
zvP7S at q}fLg-mDlbbv#{LB`5UYwmvPr8V!xReMnzDmn7?%&ZiPa;txf)h8N!waAZ55
zf6y!5jQYpH;}ZeCdN8H}-9`V!XrP$1V*c>WTLtdOCHsY;RhHfh)OsY8e{j3^D32Zp
zn~%9jwfGc0M&-NgcOX2$pXl}R<k=ou%=N(#d;5|55!rxwt at V8MXwW+u^5!hO8N?}y
z<GSe+ZE^3PA03z8{kbZhf>Ti(c<|A!TZO=;AaTw39G}>@xWx-BgLNs-!Dh&!A^p>H
z^P3YMEQ+rl65d6xJEo3;RalxbyzQR5OwgLUAQ at Kqnk}7au!!oZZuyh4H;JZYPuNl<
zV;0n48LWh_I$FrLGp(#s))wTBYYQE+S-<_NyVE6R&mNW`Bz`v^2SZOm at E_w?eA9O)
zoaW+tM^fL~Xsq>nsE5Vq!DjXkFA1Pe8|QLT3w|*LRsH2fcjx8)?%wuJ7q^}*#R!b`
zU_8i%0H9ZPI!mQh3&WMgLn~)mK7O{t)Pf#N5d;Jb_pj?NMDK8-j|n!BN0%QYfk{)?
z-N?DmL`flYUfM?eivBj<UBxK>7EE4L4#JJc;R<k<Wa^7Yymb#hFmo at lSbmaO&>{}%
zP!D+1NM3M=Xw|Bq8 at Xj)H>7FJQB6u-8<1q`*ad1I`Yh#oDkm6|mngZQ9%6kN(azsS
z;!qzRmYA1wCoQIwee_rSX-Pj$S{cUY67tXf*~qCe^fs+3_LaZBr73P8E?(s;iWMD(
zfyy-CG%B5r8Z(jSY98>k%e(}0xO^F^2Bo(7Ma5I*LeisP<V;(th&~N%62`v&dNerl
zBUAYk`_m3<k^#2bs*X646`nF;jyBT_udPc$92<_ZHQC>`sI)JE)%sR!t`lr6w&Ze<
zwl%M5%3ri-V>bIo1MEnO($AKkzPTQ*)uwF=-4jn+kF#jS6_`Xh{(WGMq$q)Me~faw
zj|Z2i8QtKPk0-#l*|NU!)squj_%2g?t00zNW#M|juzxf>^!1j1-54=am->2TOIRNq
zUbJ9D0(Y)y4MzjahaNK4Mo)DuH0BXwu8#9j%i;V6hj^xJK;K>VL5-H`D%7amW`m$_
z;>sQ$_RjmCe?jeBF9lJ<oN9fD=Zztr^FCzM8(g%GkO~<z2vE*>n12$#;hSCJe{KMp
zbB*Fav0rQ8D5XaMMn8xk_8y`Wl%Vw|&!O&`4b7uoC#=q0G(eEPs{k at yfOaTZY+@-(
zeNPIKH1WDyTjKo9NHR^QpTN`{C$1}ES=s at -bL#GTQCMU;cCEb1pwz7#BqJ&5SPe}x
z<<<X=vfBF_(t=uD6FY8bHH*6}kNO{cgtDOOny5qiKAf4k1CnAEg%Znf)2 at 8EM0Hc~
zFwF9Pfq%bt6it_?9ArTu)mYeQ$|Hf#8AM{3d5|1E1lp at oSg7{o;PQV)=?bL(XIHC7
zr-QS4{`bv|weHq#_m`)bx+eeoy}K)SoAn=- at BW_u>sJ8%wL|>-zw5?6-Fi_x?QV5<
zRyT|1FCKIB<Ug_FpYaB?`Gzt!2v^0OMKZMV4q at fbe_lazmBVwSc-W$|w!nvf`ZI}9
z_^Nn<XkF|Mk1r?+(=VPV9j7trMao7TmPTt$pZ$EIj=i(Dyj(AKFBXd at gJWJwKA~j9
zXt8)a9A6C277OZJ7t426RHWkW@=8&>*j=3|y4bL;^gsfW30#V|lHvKlp+cPOnL9q!
z(cl1skSyp2tmYI;+Bw0+GfJ#r77kwfAw**Q4|OSc8H%X}4}hmBBO8!CIIy>_q?b9O
zAjQ8sh<M`AJ4Ha0Hcz}U&l_wcH{_qPa!hpr7y=0D3*o}yfkW>tZ)4x}u8OPS<!I&@
z$Q>y+yUHS}trl-fU~?BsMe+Db7C<C|F%Z&=2RpyMg1JwM=a&aeJ+m1$Vg at 9huO9hS
zuP=FjLhahVO+`w9$y4dOnYiX#w^+ at o)@c?jO&Y%vMAX*a+aZs##<7_y$1HV^P}P~I
zm8BJNX}xnES3);6vfyK90IF!Lh&VGP;>_a(Ne~1gbnBg66+_lCBH(XGNg<_}A|G#o
zWB1JvGm1i!t*GS8Whf at ek~+JXOhdQITp5y<GqJft!U|<-J-C{Qz}_5?0C;p&OxPKD
ztuFe#qoswScsabZ)b`r!m9j})3}<x8amC6ZKOBNaMatk$HvJw3Ivy|z5^>L#$Y0oi
zofGq`nGJ{W0L}P2gO&8K&kna4zI|n++p6JSex^L(W@$54rbRo|`~eX$R>r&ISEjK(
z3feiEDmw*oAFu*;vMsYH*`FDjDEjf61>vku#a<5k1A;ckK!jF at Bsy0C7}Wyc(G=j4
zsna at wwEUTMRhw`rD%ePO?BoU4`Via#iW=mska^PJ888J+K<iB_d8=3Knn~l5euFU?
zg+1^x%uZ)-s3W^jMi`on3L|=)9tP1^Ucq2VwlE+?A~l at nK0LrU7#z)jtRhdKElIEJ
zs)tE at B<))$J$`G;;8$)MA<aBMP`fbS(#)PMtU3!<8XKivDG!T7-b;{J4bYCyS;F98
za5B&X3cH@#phI+~^+a<>E^0*q{HMdC!LiWSK=Fhx`ae+%<Ah`qp+)O(<4fK`D;n1>
zC$M^huYxD+T-6JZgJFOT4UYQ^q_x>gx7Wf5+cH%pI7hvS6J4>7#A+O_x<*#x42*vn
z`_|BzE?0KJ789y5VMH&!g}^1uW1Lk`BCSKV3r(sj8HNmS711F5c~uy~@Y`TC;|J(>
zSZ~f7SQ6g*zvE0V`sd^OMF;n=_>yx at M#-)@XgSllvjFOH&m9+ZlL9{hh68{q7>(^q
z?2S-;<9Jl?Q0^CSfT0)j6K2fYY&;xeKA)|6)zaqaEKFN-@(H~SThXYxEP%=p{+(_k
z^BA-P!g1fZ)cweXVfP3O7jz4^fJq at eY~+k`A9^Hmc0q<frZhUCtC^S$2eIMr0weKL
zKU at 63=rGVa?dvkx^L;Jt97`o%Nje}GldVr|2>KE+h~<VOW0{sCh!tHK0!5xKxS;Hl
zg`tP7emwLoiOB#6SUacBYv$4L=<?8)VZ4V2o67Yh?+&EdQby?%vax0YKbofju5%NE
zoTxm}R41UQCdtW at mUMwji%Tsb!J>A67%b!fhfH9DGw1r6ETHfX<&+qcQvwQN^^-OK
zk>VHxV0Nr0m4SqdGeQ at +b^?01oW2PX@(q3*99?Qr#qhugiBA&o4+Ma?^ubLCA?F|5
zS7{iAgAMh`Z+6A9_Cz$n384!}Y}C@&3!X*^Gia~<URWU at 2pe)TKmxCT^GAj!5w*Ze
zgOsQ|=p(qNc5IZTJG}+~%zZcz8Mm7&JOPlXY(|@fd%7s>U{TIE=WhYmXB^u|{h$wy
zdHOhfw>0zr1aWwZyo at Zn*WG!xTc~Ko+V<A^hFtBt%EH8-&tFo#VbO}I>}))Kp|7mr
zv+ebbCmU<#mX|27ykwG7o2V4f(WD)A;Np*be}OVcGE`#CnO<}V<FE+$Dx at gM&YR(h
zn9H~)5a=*STB5XR2^Lhav1 at F|>@YML4cu%OFLdHeG5g#J{;cw<0JudGdPB>=XcyUx
zEkwLy4_dvhz!5k(Yg<v!i*B>c97mh+<W+r4kAWwKZ-fQ{3%gPJQn3#k#TQ?0_ at wvl
zzTauxE{JhYH_zJ!umyB3@{y^H#1ljoW5UGZOjtnDA+!VKbIDN#j^!j5DcyN9=8-eo
zzn$0&&sLDdUrSu;d<A8M5GX+$%qn!yge;S|pOZ at o@0vnxV at m_$XgN4zH;&!KY(D#}
zB+srAk%XIJgqP4mgaQGU5Q16Q+$<MmRViOxKyXxoS|C_Wx)+sAnlQ=zn<*t^yXFyX
zKiBc0dqMYExvF-6WpGeN*S>`+WSj-8Go#Bh%doHQM9{N&r>QPa^^Y7y)P&LWVl7m#
zN?m5?5|?70Yh)8msIxUGf?vi|(2 at oijy*@TnK*Mtc}XdsVaZ83bg!!dE|b322p2TC
zWyK3iGvB&^!@i+JLNcNaK}(GV&85JVKF>F)ghEEHR+e0d;R*`)b{oozSXWquirFyp
z<6Mr>@k)q^!nMR^Xtr+1DO}+4bW!{aG7l!$LTStqo{i53hnFPFf%My5Jf{`393I0b
z=Ta+SFl at qPgs{j0y(YF|j407?aFY5p44dF#E?yI872yMc^M78v?f1`hC4>P%x|{KC
z;(W%jB>!+_OhDKS`mBbu&lvq++*j5ehSlEE&`8=xCLr0zj at 6kUPz4=`U|X?IIk7O$
z41pLBMZ4D-pgF3S5;b*7sOD%oCcFkY28Q$IYOHe50k8csM|I6-GAuUPRim&^pbu!y
z1BKC^<4$x;QaFqh0QaAQzLSJz!<;)M<`@ldD?-?nu{cTpwOt2_87SKf- at 0-|sw76o
z9QeBJhQzz+H!<RAE@&EQ&q<L<`5849FcT};4Vzn;vA26IcnNACaG&;328ATP3phIH
z8u<8q at ynv<EtE=tCur47z7p`<s)q`34naVZ=h&mfl7MnHhO%ur1Mp)B`lW6ODy`~|
z8b<3cY*`8M{8a2Lih at MUh9OqO$m- at 9Zi+w0yOuFnajtN)f@%v**LJXDkYk!}xww`M
zLNv_sW$QCi?TgiEUtYv7k-)$TZ4B$jVn_Yqv6LY3_EJ(}FJTroi%cHynPz?)2P3av
zr%{AJlO%y~VZ!zg7ozB%Ko1g|uyO`oF*KwT(}>$<xTq#lW4IC<g3g4^LuetenNH|O
zDjY?JJVT9QRct>}VciI!o^^+)!~x9|00<oyWMdjpKtProtZfDpi!2k=pi_$M;Dl|E
z-q{%@%R_sc5SXxC3g~D_@$8bh4wq59o(&K_utT>)(6QyZPlrjRzo2Qj1eWjvh>1G;
zIubQl2*}5ADG(5ah}C9dz3a>o+ICzv0+UxROkkswZHU5-#}!K19eSGCDowOe;xQwx
zbbnIrJBZSKDgOfP^Kis4+x`ipq;jaTpxO{Ad0xT<2fkYg#Gp!$+tIsZSVSHjcT-Lm
zC4|3Uk}k&hf{%y<lMlAEfaJax>?YRM6YaQ7j!kP1315v^!9v6JKv3B at p5Zu1czZms
z)bC>_TY;!@9^M5pheMxuH5ZL9$@aiK<PMC7XN+d1T!}{7KrVNPiH((iPn1Rz2&j_x
zPJuDXzvzXf(=VBppR6Pvqp)Z-Lt9a{PpqReY58`QU_UuQ(gYG9s#61m#|T`pLr(Dp
zJB2UMBN)BtZKMZc9Z8HEEm&zTcFiD5sCU2~+fccbAaJXJ6T_GVDfEg=1d!wqa075@
z4spAe3ju-nLCh?pV-zH2bhI3vO%ra%8_O9O%pshFDWATr5eAo$s-M{T)2VnTHVp%X
z2JX=jX)C!2w0zMcIF0cxmKxw>%t(S!u<VHjiO6F<bOW(lmDJ48>)l8m4Ws~DEO>(u
z%GrHhfFRI#hhCV9SuivAf9j81{bdos(j?oEOc*By`6OTlU}p*x23*2+WX*``6jje!
zv at -U*!EK{1izvb(tQtu6UcVNUf=I(%bokpobVb?*nyJfLg$Sg5m?KS1Da1_1?8T47
z`O2t&jMj^fXoO-FXnLvDyX?!I;QVb7ZbJt)+3K8Z>eNh2Nrx86pM;IOrN9+Mpb~AJ
z3P*ydE!0;J6ANnfZV-Pk_Q9iu2Y=&l&c|)woZca}BFs)Ek+tyOnb3b+tQc#!6EYyc
z0;<Bj3sDdQnao^-3MLIWKq)`19^x-Km$(A{rqj at 8Cw=hSs({F*Y$bS3(JqmoZi$&|
zkw%;|W2zXn43+WLCRBsWwTKdND>h7ZJ9fa~@D35HhNR#efd6nUHw;B{m|e7yOJkpN
z{EIFbB9S$B#-W7!WM<YyJvJElaL{v%QpgIjzxlqdFj9%&Qd3yBK_G(ajAV8kT_8ue
zKprG0czl at _R>HmQ=`eV>qK3c*AW~7*4uDHQva2L6?69{H>JaB!^u%zS)x)Wr1FH_H
zXw&f1&!C1*8T@@GA8-bUh0QZ?+9(h>r4T0yI;)u|0%NuVvYGjy+(Hc>vn|V{vL~iM
z7N`D5*+Don+>oXw$dJeO%{-uEJ0o$cQrbZ&QQOk+B8cL^(Tu>_tbbac7SBa9$@coo
zYqu#0sE7ao>*z^NWQ0<`Z at ZVMw65<R_+>_Pk>rBOH at PVSwiz*Xi<qy)+=6~3P9s`a
zBeppcEVWh540xJ9`H85M^vgtX)Q{}V@#_2RFa$`GPZ>1!=DJYQnB-ErlFYk7YeBO+
zfunM9W-O#wMg=p7aRrnQnWu1+STufNdRAz!jd|if^C*j9%TQtbON$%$QxH2T`CM65
zVmj(u?g*Utii5{y2ZLuJGgh*k6Gy3bVb&RF4(EgnEY)0m;u^soCvP4kz}{{^FhI5>
z)aKo=Bo)D27)A!v2d06{2=Nz6I(ypt8{cVHP-(fmD4(nyYQ=9s<3274lL<w}<sA|S
zp9y&eS;zPa-x3EeBa;Ykb^p?opkSA0CbyWTk*1mnV!JR=^xu5)Rp`OwkE at r1`Ag`E
z*XHaCa6~(qAv$oHVRVU1;GEGdQ(URYVPO!44Q8gcQwY~X(Cs6xLz)3deE`Fa{8mIw
z*o09VjF~RYc{nZw)*$KBdM`@AlQcTKd at ayL+AdJYe96g!c&FzmO&~+uLpDgwT$BMr
zUW1~zSIP{+B7p!|$-JuQe-^T#xD)famI!2r7-R{=IZHVX_Nt0HuoMf4tUj_-ARk2)
zc{62T0xL+IX)+EjBIFZ4fwt)@GE-HOfqu%b<Tz*!FPvJiV(fgT)Jq%(uaOhP@}f-J
zvaFeO52Iy4BD6V$5^)7QK;D4iQZOu5$14sICA4y<+##rrz#1bL2BT=`a8<|_rnhp`
zl9FW$Aza3SxB##4DjDpUS2}hFPX;}de=}-);zt+I01j1Zo5E?bz=JOd?3|{a>e^Cm
zIYONf>SM$<ZJ#fUfS3;xJ|axj220&VN98!e!IUUmJs7T at G`>u97xDJk8!7&>tSA(L
z^~*{3hJXOkUbF|?A<26m6vgI#Ae?(LAwjLcPC{UOLAsmFoKV#%VbbMHc9)oB3 at 8`(
zqmi8`5N%ctN6W8nSmW>%<ek2iU==73U{&1>B8YYN#CGjUpvWR@;Tp%DuQ)B=Tqogf
zX)6Y`QZosm4xcW$AB9*kKhuW6B at SVt{xv%m!AO>9MJZ($C?G!v6>&Ei_hzC~I()-w
z(<M$PU<yyb7R?ja1#vOG0 at lgLy8kWCP)_+Jry+}y?vW}I2zA)b@#Tna#5m+(EijqN
zR>t#U2Ci%dfi!5ZhS#8*P-t+rWY+WYCWQzUS8>p6L9#<(l1Q!JK;dbX9NRuh#IP&+
z*%CGyXY4|RF;_Hs2Kaz26o0!sdM&GujvDOAv{UzQ6C-pih0qOtG-53V09Ov(UQ=`g
z9WTV-<|YUpW0Gg_vOgwud4`4BrNhx2nL_ps_7ee9oAOmzeo+>Vx*R7iDfI$7N47A5
z$DS`3(6cEF)Fmj4cj5)LyDWAg54q+|M&ikRK>#?s8e^am$;$8wvI)fm<Hk_?F=0UC
z0Yy9r?NHHIm=L|h{z-po!dGc3hGzt3WRi=}$)O2}!_aQ0QFaTgU(#9S5E&lv)e$pW
zl at KuEI8fqD*~1eKEssnh_Q+0XCYXM><(DT&bDW})S>hswSEvbBw=AR}yWE+a5NCn-
ziS8gI09P at saAjGo*cHT(4-}%oB1G51U#O8LRj?1=qEQ}GEJDbqkbzZ2 at KSm9jf7{B
zwVbtt#bZ6>4nUE45t5mM?2r?Dn#-4=#vNsuJKKhjDhHVKhWv7 at -IZasL7=Z)%D&kl
zob~D$jdLDS$pwjZFrui7B7F{F5IU8E9?tDZ!joMvT7~hdnjG&&N#A4H$WGr3akcg`
zy8~KwY$!C7Pb&}VMi9c?y?TB*G71)NNZcYw%*hbGW2kO_`K{MgkKr^rzksLyKov8)
zML3%u(;Qkxe$7_rhJyjIOw6T0%$n^j<^Kk#adN%f7kqe>j_z2l at H}|=AbflcA-d at E
zGSEj<dqd4+<ft663;og7!hKUJU85w<;?1{om>9~r`B{*|xhl`>9Q#AsyWAv+ede`7
zbyYCMsE&fAO?Y6xT8Un$VQ*A+6n5KO5&<I-+l_PuorFW<)xAkn(oYzAOt_7%zYbOW
zKcQ<6VaXJk&vgR;9yL9}<Q_zIn`$eZ51$<o+oOmA{PV{9c%rQi5(c5;GiniodIa+j
zdmY!O-TNVjMG6xW>&4pTWH4|-C&X`tim#PIo}DVcn$<M~SX)S(qK|dwL0AuPGQU49
z35OY=Y1jqe9#;vSA*%$07z<5 at D9oD@@h7o4JBYM10gja`xKGqR3=t_714O>foVX8S
zaHuIpglVBmcr*<hDFl-V`;9*ZU%qujW{{pP8<><%t^*>qB<1Mv53xj|il%xwrpI+O
z)c~XDSdCe{)ESU~<9^+jJ>?wrwQh>Zf?nWj1jN`08zD|xQN$k0gBMhw0}PzhOX_uV
z4m1Sbeu^pp!$w0iK!_(?$n5VE5ZVt*#M7t{R at I)>*2 at C{n3!##q_CH<5%g?{+;gxp
z8W_QT-JOHsk<o~J6cb+ltXQvF*n1v|F5VZTFO=5S0(kt$71WGLLt&p|`S3MQdt_FS
z0VKuhI`J>t+tuFkG3 at fpfS7Q2Y%At{CMpDC6fdC^PhH$Ft3Qv>3W*O^=mMKPBKU7`
zLWh|UaAZ?J<UE2B&_e(~#50j?3sMS$>GsOLDucd`kTbp{<b;3XbYxM`yLp{V#qsFY
z9G=8Uc8H^S+lC_H))6B-GzS=LPIrG+#2fPwn+PKiz9xYvDwSo7Mrk}Zh_?yUF-Xh~
z1(b}7V)uL`;!~L_9xy0s0<WXP%x<Jw<tvEB-b;sunY0kkT0j7Xmbe?->KxkPn_-mm
z;{s(OYhO*<n+!wX6`~b655X$Npk}wjWQE`=EhRQcCUz|F6+t_TLWO+WrLNrIOlp--
z?U)7<!uG&SM`#e=`Ge at bV(2Blmzp$ClW3T at K=MZ>3U)o at Ytubp*$E`sef?Z70xUZU
zmuxJ<tL%`$$mrfk9R at 4fMr;-nv#4#eVQ}+6d2y0}1s8;jzaA0;quXtFkLMIFCj_y8
zkQHc_a0=11Gy>R1lFO^Y1BmV;4Nr;C3Ipkpk$%@L81(}iNuV-`fWfag>+sZRYrFV%
zb!TUFYwx98EGxvWJ?^fpzS!*+dtY^n=R4a^cUGSj8 at urp*?RG0r`s*IpA>6ft?oSS
zE~?#5S1t0f6eF7rK&x&0yZe9kx?6k2bK+_ at _V&8##p9R7>htG3QCn4#-_6x;foAvr
ztaYF7736Z+n%UOy-)^v;-92hxuNNCz#kV^|;%+^)0Tqb5v+?w+z2d9w&Gqh%MeE*X
zcI#L?U)|Z;=<d$2k#9EEtDBl#-DTOc#kU)KUv0l&z5obqZguNr@%6^m`eM=L+wKl)
zdcM=$-R-W=F!shXR@~*wjjgrK7wZ-XOb9R#*aJ at NjCJm98)#zNI68}A{F!In9pJY`
zYU7Q~jXhvMi1Cw+y)CA&_~KPx`Pz%k)g9jP?L6P!?E)Er6!>ib at STm_uX%Po69D^{
z7prL?psPx;t6OV!P}w=?n6%yE<@O7P+hyOIEcL6d0AwdEKv8MD`=q<JxA6_fOG~EN
zeeukJx3;~zX8_vVEVjC9tao+iWwG1c`DSBHaG2TYK40Ac{ECs at +0iK5TTWYuZsYL4
zlI}Ocffrj8XWuP$x_^1Wep)a=W2`;}+XT$)+-JVsU~-*M{qPs93tyCn{}MFX=9%Hk
z!UD4m(x3;+T;JH;v&ii#R)7>GcCJ1K8oX8nGp(4s79xNMz1LTttv>DUF3uz*ur-Cp
zmy5;j^X}Tl>ZTzHsK;4vI#hUyOVS`tkq^Qk#VW at M_-2HMpr4LRcTl*t6>)^Q>-Vx#
z&RxSl;l<`Q at MSbrn$uAB at 8hnn4jJ&dEOwn%*VbO_sJuKa)B^<FeZghh*s?>J(SG at A
z at 2icS^?0B3!D{hjbz}1ds2CO;QHYth0ilL8T+>O}fkY(R#bPKNC^nuj)!J9#>T1yZ
z;J)H09(QTBy8aCWU_Hz;!(G_j2=|7mZG-?vBW!XGa!b5 at O8~!O|J4NZt%QbE(?*fo
z5W4rwpvH$UMR2!}$%5QF7Ih4q at d(CxGCYSlOW;BplIPH^>BcyFG9#Io1rso-0bYRB
z$>KrKWqHVjq9)?ZM3VDdwF?@zR0bIn#QgBfGZ$^(`23HLj0f=yuF4CX2a4a at yEFwR
zW%dtQ|I(||D8DE3q20~B(j<F97_YmW{HcW42?90hk}bg2>sy9^Y?xv<?j0-CMJrCd
z?aiwiTYR6uV6n!*btccCZAY$je}RIuNX#Gt!jHt6tD_0;#!%@T<7oY<pABVW at UTnv
z78C4{&CJ_xGW={32WHWk36>BHuptel;hEBj1rHHKGnuQv_b4zQqe$pAuyEvo;w-E`
zyGyUx!kP1Y#Y)Hc&<E%q1k4 at vd)lq5i6}6N3ili#Ye~h@`|1aZM0msuHUvFf=n2`|
z_H^W78e5Y at l*q_GHvz42$}atukHc&Oe3*{BjMmkz?d8ja=e*4ALE<LA*g)zsSx_n;
zQrL;ziFhBBUip7)ln#f)B|&tyutNnx*5u~^_&NZR7|Du)8ukW{Dd)$CY%&U6Tq};#
z^I__}cVzA&LXp8E*M%1tTp3sCWNgucw1{V{-_~2_(@35-VAH!C7VxqWrhr+3t;LtP
zp5?Cx+<c$ob+AneeTCE!w37$6c`I(r5}7c at 9P2($6M?P&6Wszc=lC=K#o~h>^z$@D
zq2IC*WEl`;KYHUNm|Jg;2Sh#*m-~uU8>vW`-CD~}1LYg&HCWIVv#Vhj+Jla9gi1yS
z9m2B`LddY+#L#dqGT(}t&RF;(?Tk9f?88j_7t-J($ywJA at l;RG5V29#WuS?=)u(@6
ztmRA4b#`))?y{eM)*ELCRMa9!Rv+(fZ@$>;ZobUr=Fd&p3Fu&DoQfap?drRE&$D3H
zLNqF;2PN;3QuVHXqIpDKD@*{cA&TbIptK%EUmF%q%8Z5S4(IcQ0QNm@|C_6Gsd?rm
z1{1BY&p55mj>;EH?|{Fyc2N$L^z^nw7U!fzw%a&hE!!%i$tzW})+l5x%qJWX at 5E9e
z^M+j3+}kpTrE8*)g|qghg_lf>4d1Z)Pe|1%cGCW>Lu^;X=IU0e1}6&X>G;+yQF5_X
z>__s>8ube32Vh>ZoUmDY-=Med)&y7m$?%G99WI;}ZT?d;iih4rDiQo)?}A4&q;MP#
zi3_1IBoSEv9}QV0xbr0^lPM)Uz?rr45oE()>N#_!hw@{8ulbd at 8<@fsu;<-yPQ_3e
z!xPIH8+N}OUSZ5S1IQbs@}Q0{y|{sKBD$lCCRXY<L=s9M!C`U`>xb-?%*#Dy5rf=D
zMG*5+jgjR4 at -Ub&!7?FckIDYGR#SY{J0v#7sQ&})9A%gdaF_P3xM{<)M<gRbRwG`}
zQj;)c_<~fNShC=|h+Q=Q21zB at b=z^Pw6X-hQEB0jtdpOw_B)iTooVeIY=pLSekf73
zt-<>80CTZCVh|fkERjq!l5H$HT=dDvzVj*_byx|4hP}egXUy#Cfpl={IKgaiUxp}}
zj at o1nLp6z@410u+U3W!zB6d;BbushYqE(`0n%!Ei3uiElmn_!T=AQYz!T)^-OwRvA
zI@~eb>F|v*#Qvg%QVDkX(|h+U4-~)F{=IwWlTViaZDskhJD+~Cva<5Y-G5tN`SjkM
zJHO|D`b9v$VQ0_dcKc)A{hZ#%Q;A~r6Cr>{1fCb;cMtCs7i0cIEt-e-?yCr`l}Y%R
zhQbVY@<2lMdIGV}Y88;wOjVk{yciOQz>f)6q9>5q7h8JpZeo;=Alj)|f`Pn{7VJ)#
zZq^x=Vvn*s)DV_!`IS)&OcCgvd||B_-BK`nuD=)K{`$eLEpYz(>h~#&w9=eU_=?xY
zs}`!b-X{|BXj(g;WZTxVa?^%)ZrbqfO&i|3zTr-P43x*%z^An(?XYhtG~YPeliz<@
zm&Zy?J+;L;g89YN7WHZOh6M6Xo75M{W={787t`10O}EHnbdz>_2(wcsM&DD``J?f-
z=z_Z{{X4a}Az^?b2`?vO+zVosq`$15T(j}^Mlqc+a%8Aa(4iOu_bA>BHK^t?Z+=f_
zht}@jPsT0%*GWe1S)mCJx$L*JkR-A_;-MH>+FHJLPeNI4n&kU8XjLsb(p<K*1uL+!
zPRh30cys$Q6nA&`UQx+H6iY?$>gSNPvBJB7?M-RsLpcqa+|0-sgXzd7w^E8}wLoN^
z+-Oo0$}KB7!rANEzTaG&o`e8*JxZycrj=;kf7`zbb;fGFQxWGXu)UY5yNYP3b&A!(
zs(l7$p&qn<92McYjidX at x9^7{0i#%1zWb+7i#yB9pWRyi<krf)V&%^LmAm)v-TRN?
z at QR42{fpCL&T!gIUJ6SkdU9N>z3K7v3xm)Dw#sjRz9XffH#}KFalnQK(+XV6exICf
zQ_AA-Yze_$3nIgRWOh&cXmHXMQAJ>ME=8NK8S5b4a78x~J2MjNx=mn~#RpT7;C5=M
zvO5!p*TV<vNfuSq0|b6*dk|Jc<^`F2=MvK*XTC}vz~7E|CL(kuhb|H~76z*wQrw4m
zD{d8au=7!C$C5F|WV at mar&rL1^+CT=&eh<8RK}n>hRs6(7!uI!bA3sbo~JsU%gSj`
zYU>ZEke|OEUJM^rjvB~XLp1u{DLLWQf{oCj-Yg!#m#<HT1eFoOJi^9J8VY|*De%as
zp;U?JDu<RX4dZDkh*<JQkB788xo_NzGUt+pG)oB}9yxbFU8Cb+JbpWn(9X(2jQ1^e
z#H&1r6lS!x1e=vl0duISV&ukYgc9r9+B;@UnO~VN9zM#>2Vn17`y@)ZDRTbK^oEEM
zq2b->4G|?m!+X;kB1$aIs3L_>$O?~lCeYA@;^&`>k3hdjfhM(!h!%3`Po%aX?S6n9
zq8<nVs#L1S<X<*u+ at uABQXSz$fHfmG`Qe1#*i=a2B0QfClgJEi0G8Br#zEMi#?7U~
zF5J8-Vx>|&)z8`Cif{V{P;Y~<5_`*X`4B_Y*~J3o_v(x^E-66Q{}e9Jr at EN&tI55;
zH^9bw=4{T6-meRAZ$-o^Yb{~!y|U?Q4c`M79V$*q3GeP-R4+ne*;c4e_n_9K!q>}V
za>^5=f^w(O9?WdURwu5W!w<d95 at +<NM9jtlGMQo8^vyBjozvbMqrTs^I=;T3G_Jcc
zCy(GcRQ&9%Gt4<&C{Q&BgS+4ONenb6&*ILJI}m;HOp(xjGi2gC#kHqcOWZV!?U{g$
zpto+xn<S~vfMs+#D+&1cazNp2V>7#d*^E<}GHOj at 5u;3Xm8XqJpj`cx%kYBK17W4a
zH9X$l-t4Y!Da at c7jI)C=O09ls;=6cGKB3XDXD?aK{>Ikc{x?Lipj^kUB5<h^QvRVy
z@%RC#gC&))@m2o<DcRm=#;>Z}Eq<z?O}riPPm80Be?SFzu^0dP(ilA(;$yMf!oX;#
zY_5;#?LsG6wv9zLTI=R0%b|NBFfs(_c2<g8kFfq?LB|Oeyu6FW9epbMv_2m at R|M48
z|J+qa-WKpg-`BKQ+|x%SIsg{PxB9{KVgD3gj{2CQ&&W$;G7BHxErdCCg1qgN7tdg3
zsRzx*A&2mhDa(v$>Uv|)AO}?;iO?mpZJ3bXxC;tcmBGd8wE4?t;Zvi(X$Kg65IS)K
zh~$S2+_ry@$$(>gK<HG}51nq53<;Q&e>gYr<^PwD2n53HQFx?zm>$_UPS3qI2=X7q
z;a#HJ{9TOPOkp2<HHW;)gn^8TZtQk9i5h||#NM$<fGADYX|mT9<%n&V;mLp(4;G`~
z^fG-n#~H+S<-eu)X9wAtCm8Bmt4%byUcIV;E*Dg5ee!|`q)?z$#R8sebT`+D+}hcG
zW<yl&EJc?j-&$?6iA|DfU~;F%{5&sRhd%`cg4!EFGA>tNsqVy16NiXf6{XaA8U&_z
z^sulUMP3?v=wFHEX}VYQsAljql-~u8C=iU!{62a_ToP?aGGY#6T9v1#!OE%_`m5|=
zM`j8`4ParLujWIG+IVvp2PcFGbKI}K*N7_F7Dp{-Hhsnbmry~|)W~K>=#h;d#H_Fa
z_UB)xA;7df)8 at FI*ksb at 5lc-40Y~5Cq}vMKIm%=h9wjj&cE06KCw>@YyhjE3N4^LO
zO8k!7wP5<BQTfh%p+j at ZDj{zn+k5=@-4Rvqa3KL!qiks&o16~iuH{nSACBNb&`vvu
z#;PdYa!<>e-|0RjjMA>n=Em3E9KYu<1^5d}YA2l>k=pI3eXs|2ZK(e at R!7d3;uxU?
znN_P))v_HztSxw`x+6V`OM8cz)Gq{Q-qoW3oRW|dQ>MJ6X-UU)A~f4L3nhXn=<Cj0
zvd!rwmc$sPW{Y=30tIBa*b*gy%!dn>02{_r2n*kO+2K!?mY05t9p|eR*L2G{O_+6M
zYg|{rzg*vtMu$@4r at ZW!7e=3k8manKKXa(#wt)mza3V?c-p2o1LN;Aa18e-NZ3)+t
zrV2c4B9&o{V`g-z_(&wcsZ_><-mCw-4x<Xz>!zHaZ`+r8%@N~$JopK4&67JAnQpJM
ze|d5ICkT6UQEETFJPz#%^Hhwc)kbRDD$HSl*jLs5?KWCP1e- at 8v(;z+spyB<=k{y4
z;A|-^i>(rKb!{REWSQeA*ZxFzKt|D<{IEUWRh72b$2T1zZ04rTXXmSh-6t-S%7slz
zb<<gL5_97|&FNHl>OI!$cvVG)Wa{JAmK0RGo~u*QlEW%S4m|-5LZGggNP{+HgtmQ#
zxiE%V7eJ9js{#XqR;`Fr*bFeOc?*oMFp3~Adi19Fte1RcRZDuL?JHbx1j=U<`gFAF
z`UXudTgVVSNC1s?8QX)>2R#zQqvzC;6p1A{ovY*l`6^^y*!Qta(us0{e<MK;ao(<a
z*qI3ss*~-4v2C<GJ!V#n4)HqZUMSvT2eD`c at 2t><5K2rfTibp?ls)l6d=QeN=(Hnh
zGtf61-EVmZNW75(jv2_qXahvOCqtoeg$O5m7#CHVG*V@!CNHp2-T$zIY^S!S&c~#X
z+AV&tra#<#>pqWb0h+;o%6Wo*P=c-<l4;#R&C;+A--NTMTQWn>N?fe!N(%&D1x*UG
zg;tQ67D}rKoe>-5r}f!F`EG6uR#utT-C_=qoR_9GVK}#9>lLH2RDz)1GND`90q`R?
zv;W<SV9#d_h%wh7G+53)W#+#j*2yO^A_tpUkHhy-q5~(=9)j+TOo66v>&uJ5>C{yH
zE-id%{(;*8K%4RS;jB#eRE2G6M*T!nL_<TE#8>WfX=@&RQKjXA1?`&oU?+2gm)q2l
z1UlO%#m!u4&D1 at wFZp&@Oj>BT<5qS%$jE+>`xkO$b70GkD|5r6BNcPz6PcAmzf1 at +
zmquwFl!PhC)1A7x&;Zb%$}J^~GmBKzlrvhwLjzxpt`t)?5i=XS6&RwprQ9F1`YJ{1
zTGB8CT*H04s<YT9g5I7^S_+YA2X!6PeaUl`wI&J}=t9OJCc^lST<I`Jwm at CeP<nic
z22*Frx&@@gm>uv<DA`G;2e08EO_ at +EC~_49xn9j!xP4?O(u$7tpobJ|0ldRLsz)Lm
zZTdVi>@ZY)aGOcFV%cUSFUKJZZg-AGhWIu50`w!$ocFXtEpn%l%V at 9&Ip4W3t`ZcG
z at Ih_kkLEL%D`0dSRVA}(oIsrjl4~V)&;PC5_!yfa*QJ0{%(g&Bz3YQt2Z6{<{&ly$
zZgxZ%Km+IF+9v{}RopL+^$%wU<MYoAkPSK=Pr^~ZrDX}Qe?Y+GIR`nF|0*43x?>M<
zF2+B~Zebm_FGd;h)wGEVC)qSL6-~`r+f=#}!AM~Y2rs6|Tz#~7jK=vD3FDmK{3?g|
zr7DI_B3wp09^Cff%hIs_C>`r7gf~ZD2d^O$uNA at NeM80ZVO|c3$WnGyP9ivJ46>l6
z at a-O70H0GL)yYtyO7Xm;nhhDkvbMU6v&{i!vXZfF_p}<RQ(i at PimP1q11B2&3xC`6
zfHX`XL8St8GHE83{iKZZ3MGoYmrGJr0YbYYi95m6vtbG_MRYh at dbzMPMT`&g at oAp$
z(fSU~RBc2i=!diN-$d91Ue7SFJZc(0oc(mU6mH^eFb?-{HeZ2v>|3e!S*pF;b+S46
zZB$t~z6#>nAI at 3^npw*>qd#$>g&oFe^6{HM^vJdw>~BP-siBv64%-XD&`NFB{_(`^
zu7nL6_o<Aes?6LlzgMIn=o7*ZE{0#I=M1I*lXL{yU|#UMGT8n~4Gh-$3q=&!1TBZX
z9pg0vHuXr#^60_%^8C>XHJACPR>0jx%u!$>i0-@}i0(`U5k}cx2}E~35JZHR{OTaO
z`+gw0I~7D&b$=xg-Tgoi5m-|Jk=4AeV(yJF=id8)<=#}VU^oAjz;f>c!9o~O4wkC1
zC?izjBGvfK`5kkoVseSUE!apcfNl9Gzr>ShKwAi}FE-Ns---s8fxy-IjKExwdxKDF
zV(%Z$>cSe7X2LnDMfiCT3?t6oO?U~i%d77b7n)5$^$%xbczvlTf3DQS!J!ePpE9Dv
z%<q|2QT&&ov&eV~=FHVbgy*W#T5%=LDLyPnR%oC+ at e6-EoQ=Oh at NI^M+*$7%+c`Eh
zAtL}iaIWNjmWQ*FP^aolrnr^Hd#phDg3;<8<zK?+aamb at EBA=ayNnCAPMsylc)qqw
z6iq^_`y1O%`?iBA>ojLC@&Z(ghX%WO<UNwrAJ=3!ZNE)W!<N)B6Vg7f311WTSsIrx
z>?vTO6Ks%*N|s4zWr1S_9RI77Cmk at dM3T)(Zy<G~7rS=8&SJ-%@5+$Q?*P(w^HqG+
zXC7V`qZcf`^m9km8taxx)WYMn4#~1<0e%R#!&w+W)Z|wONgn(3+XBVF0O1S9#)(jQ
zkv|(qaQS=&Q9IEK83gRFo02txt?{bXD1Sz at D+rh<SvGnp!rr#?hM3(h1^=W2MB56s
zyeC5nsEo#8&IdWm^ysX_9`gu&lZG#my7R^5qVH4UinYK}NF5+(;vMCE!c&A?gv`py
zZcBY2mx9yYM${Vm*0C+rw5-X2<lZPo5<|8)jvGG5`lmNTP=0o`dW4ty)}191Io-Y0
zKYOi0f44anJsFWM_zPDx{r%ta$|uV!_4j`(_m+Qu|Mv^QexvRY)!*;^9~YqbvhtWC
z!xlZ|xOX=_<ygK`tbBI=?w{`8z4ITWS~>l*J>&Srk1}?k#zZ6N$%Z|W&+laQ?S+;W
z9$$dVT*rye6tYd&+XV$sKFmI(Z+zZC^estbD{nlK)pTEEWQoTg at f}Hwc!MS*1LXrk
zv*VYnOD`enE%;c=Xnq_`Lbw6^<s=~=n%IJ=a%i+HRZFOc(>BN*LAsXFpp4X=O!73K
zwachpT;N~uaZ;^n_!G$@hr_p2 at 1e8^ug1v%ZErQg3l8imO3q^|H@)ERC)V=`d+JC^
zNUu*CLCM%OiL-%&DAMeUJXk&ZMvh^Nj*IK67}Ea75%wG1{(t+o$@Kr%q5WFMbo&3<
z3eUc4^#7B)%b)#D|8IDNzo^-V(f{&ww<6qC>XghWys$MVpv4}eF9rnC3$>7MC8b2S
zWHvnyh88bLKbDNbrQUI|Y#MQKOVQ25Md4{9Q29!_27<AVWqDV4v8NK*cs}b~DK24U
z`OkNjog=NR+*&b?^vNgp at 2<3QBzLT~y!X3?s0JQWz8{=SF88D|FPU#K at QBH6omL<5
z0)CwFl*#SQj=E3y#%P}eBtJq at U*E82q|VtiiB_sUQ*iQL8*i at ILlVgR{UrATD|Y|^
z-Bg&e)aJHIVg$%oj%DGa at YGBUFxd~Jit7VQ*(MBmC at gqgYT#e~we#w)Uwr?^g{6<@
zz8uSB^xbzW{9}AH_>67zFEvDb>k7}7UYw7frqnDUkjIuX#WImrrg)@$rC7J~1!RsK
zt%WB(H2_fHOJB4?K$Ea-9&=)PuqaJas8}ytj_07S=GXhjJt9UxsP*vd5ufe-#+Qb0
zC_|<QR+h`~9*U5R5u^k%s0B6~pL#~0Sd>?6U18OdP;5;msxZAlFX^BHtF+TErWqvW
zjt;_m2WxIUI*LxkNhNEG&P>B{%orhX=n}iRQV`hL1dYEuHBdcNKQNYZAc{hZLG{Q2
ziVw^8Ec9H<9)$Liv_fJd@}j*qs05(6I{RwgUI8F=B;bJcA>IHqsI{`UZp^Z$%sWaE
z$UlD*@#K)f(31iXv`uoP`Z at U|M+X2ujUK*^qX&%8pkx&y0>pE-IkCn5rfk<KY|CJz
zop%%t#(Oj*Nbi;&#+DdnNVJe+Yuc^7f~y`xel#3ygwSNd)k1!R33K{fnrMQnq(cMz
z;~-9sJ3y{<x0Z&Z at M1c)lRtd^yZMNPjJbMrG$!<jG at c1Hz*Cx(qs^blK_qN3e739M
z(cGQd($XGn+4+iV4JVP6yi0h|0!y3zJ|v7~YYU{S3b43v4q1n9cSy)#tTrY<Jo2Y`
zAOQO_*aq8E<ibuk0zGmS2C{LebX$RgRqVG+wndl|(t)1A8L>Cnz#`a42coy~{OBa@
z%jbFvZlAkh68mF3 at Oiy8Ai$g<vs6<@q~x at 68KkGw4SJ^pULtHq<lWkjPr$h*#xhWf
z4&QX<Z?ErcKY#V=K34X_{{8R2|6 at nVZ6B}hc7NVo`>OkFbs_)q_8?$E8AK#l20dv_
ze#=<q42Bn9Txkl+nX6%u7$lU~g|~GoQ$G3U4z4V{nL%5N&O_{2^Gea_onWD-V1Pk~
zV=;;8Z(}Ir$M&e*i;VRM06-iXs9=XUK7Xo?gUalQ#-tnq<V%AFnt6*9j^yeYp3O^Z
zd at FSeu!0Vh-cl(9 at 2Jfz@zrhT1Xi7~f7F at Rd98i*^}aSa&sw0qA2}bwGCO?tf+eg2
z|B at A1lg6=xj%*x<O at E}7Ur!!9$3muGMg%Ie7eIivhWP at BQ&rXi{XeoTA(P%*c<{+I
zeLmcYeFU&fA`%F~H%1Q~f7dK&gJChrHcBi}V1bi&VqFxl!KqSnl0S$R6?IkuBZqS0
zEN6rW(rTYpMphy8m5=_*?;@of2dDcKIZ!}h4DYig-M?=~xzkr+QKyZ;OXKGDXms~+
z_Q~C>m!q%dbq<R3RFVlrgDM>V%TDL8KRCffP at V2JT6Sy4)80?EAgSWF<mdnR1}*J^
z$D0+YwNii9p`+T){r!Wtr-|0;JZKm at v0dl7oVW={@e9%Z_?(&k`*=1?NG7YG9*0yu
zQiQ_1q at sD`Ed7f_<tBNKHlm#pe|QY)=FltH at bXO}+4Ixh>H#%=E-(5oMgyQ21eZGI
z1wsPSz at sf2FeO#4{?nBxqrtZO$qW->I_~fHyjO;z5s<qI5LI4Em6=q&5+R_||3n!e
z_hEt(*4{)gfCw9PkGE4dSv<f*@`nx+he+s?x_nXk%_REil-kn&h;Ikn%!NOAuo>VI
z6R3-E>5Dp0<KCYl{m5)4(aI~>K^G}o#C}cYiNWcr`T{`~*EpwoQSCAwT%3uV1QhW<
zgdB55X(CiiB*-P<_=Qj<0>-R(IkQ%;9G-b6ea94&Bwtq0D)~BP(5(7#S(iJkG#dU<
z{-|=!bJh}64p at TDQnm|7Aq!^`m!!J%pZ6}_bZk at ME>!rwrqNly&*fmFrA}wZE|UF+
zq{zj2Y!6CsV_5}q8XgaQJtY_b(L>C7I`$0BIcDd{+#pXSLwm0?ESdbhxwFQL3>s`Y
z)Z+<~hKHQ(N#%pWLrR!HNJna89-5G5SXnpqIODz^sh<*%hv at mSUDdb)5}l3>cgNz|
zf%#CMh<0jfX_E6bTcR3;RY*j_zy~Of`b!W3BGCqjM*6r{zD8$^z~=+WG-ftBg>sSN
zC9tJ3|3^(+5uGoa#S1f|;{l72HI!W#(@4 at M$W6Njf1_^8^RJ%U(q=`Z_*gmBh}^T!
z*H|)cJ4SKk%fyy<CbooJfCeHLRsAiB)qiryCO}U8m8B-!&C)dpY{+r2FL%KA(4BJq
z)0#Af3E)(*$<b9sKO4pu6I?8J-q!Ni9OW$nhyx)%lCJY=86Iro9-s7H!-`+cOF at gn
zGMTYVqao#3k%Wjm4Mfi>YEvo3`Zb at -SXxD`NUuaHlYkv()V=qJj0bO4qGOk|=w}>z
z at aD6oTr}HNuI|_0dJ{MVF8wzvj{>Fg*Mea{IW<y at YT!r&xa1+MDLf+4xurIaQwvbd
zc#lIQxXmm6XYZ5z&rvIB^F23XKr%KZH*}0 at oHD_GQhm?lr?v?KqNFx5xfr#jX7>g0
zr=7X%E15XV`F(>~#nam+G&+CNLBwy{1_`T<Hlpf+{nPhZE0qL?y`w1;d4ncw;^+5y
zjdR1(ph)BE{*<Zg`{qpH<M-Ls;dN7agXUcE^Y at v|<|6&ybvvU;bHdnJ=>cwzVPZ#a
zw3#w#*{C^f{#|oo1^c;tKt^<EiR%EEJHq>&z!1zgS_Z<E)WV+6#c*^pHHusfUk)#K
zP{k<YXap*RtCylJIT-kPaB*P-sOA1Q=x_)H3q2Yy%i_9Q2wHPfD5fcJMr$r#53~`o
zY9LKu)NO|$?(woe_B&Dr%<xe=0ei23w}$m`w>%KX09ilAGHfXBFCLklhd4umRItyP
zR;9r{uD+CT2e0W_k|BK at 1Rph>%n2KzJelnPb8X_{dZEEH$lxV0-%(Vt#`<P8XdPAp
z7S#li$Ydbw03)VX_~nt337zzhFYt%+XH-yV>VymJBxsCZT54s<m{RCW3mn}J(gRO*
z*;H<$4P?(Yil$q!hyAs)w$mjaz|X6jd)=L%W!72vZv4lN-uV8EWo)zibKOG5*D{RR
zJ6*rfNfqajnMkuB8h+4IqV0~lW4CS<Xb*>P at DE6jB;`HjkdC6&S^F_N+KK84+hb3?
zsI>=_SUD*Bh|NT>to+FKvDElf<GVQvX`B2G6s&dAwq?-AETYoP#jI6bn-z^<^2Q+K
z&_~6W+{&^fi%Er6c7aAqUY2?OA at VEme7du=w6x%6TYf8^?rgt!u99{9F`Mj%euxz9
z&`KaNoF!{DEuuVCEHzl>ejE;tIJZzgQ`R6BCCMLg8K7}p`P<5o$OVa))U<wa*1um8
zSBI5RWe#Kl2q{X<P^x at 9dOd{dm!Rdp^Nq@%_#ggWEc_9oHvF3&1wRipy#FZz9e&lT
zq}bo^l2v*mKXm_HPol%eA*hzWg0vikO^<#>%9JKBra%rsCjDaN-io1fiAGgB at 0T5e
zd2Y;o{PO3oR=*)Z#?O9I`FE=6MoF~2iuL!)8j`z&s2Rh$v3w>h=3aI3i}htbe1|f4
zKd*kn%zNwl|9bbEpPy}P{rqh8|NQ)TV{d<Z$Nr(1A9wHL?>hCFgZ`VJ(zL1n+T5UF
z<#(OV(#PK|{c+(7{#lqZNjQG_TPJUdlylqpCMiMpWMi|Ne>7!^h!j(&pfcQAcb!sk
z`Jk&?tD7%(yDek89YTmxIf=iLJZO`$bon5S-XX|cAdc69rA5D}9w;`)^>ku49X4De
z0o8{U71Mm#Et)<bRr at HIxcBqs_Ud{*s|fVZ)KA=8UF%N8;Hax<)^L$;upF(kx%tlf
zOc=LX-trOza*wye_r-H|Ryq4=$97{dW}y36$=kBO|2S;|BX8PCJitlo?%+vU`}$`?
z)c@$}WT<TU^Y-&SN__rD^@NPW-gE&@RPzP6%mITiMkNbMg`s_6Qa~p-Xm%mbIBDFd
zbFJ-O&h>e?Qgrf|rP4Vn#*%PP#3aIBMiayD;c~ls=w`MJC-eJCy<r9!`IT<gb9j7=
zS2K00T>T8P2AJ~i<y(JVyoLMk^Mx<w>W4m4q>Cc;-69Lg<FFr~3|zcgt4AcXJ3-ug
zf{cnG6T$p?a3j1I at y-66(u8J~8!&DzNOz at eNU37U*0_JrM+olwD$Ug(B|uZQt(}i2
z4%9owD;vjgW|xW5F0BCFiwhi#$Qx!vw2UW6Ey2MMs&iCCYmts{l1FZxtqF~~Qt)=#
zN$hdlVaSk7B~_YtL!W}cdaB%I`DHLJ9;@D*Pw3+icN8F#ZODv=XNV_W%9|S#JS}sT
zHRa<VcZKg%cqvGXl$uO!w6SOryctl<i-4?l+PUE=Scr>aRs(wysPt2IuPh%tk!@x7
zFVCY-$TB$UZ_^P7lBk}5pR$k1sFiO;=O)Z!w#f+P55~XBY?UFigNqSMTBF+p2?VG(
z92%EJO<8)fyj9%2NZ^)jz$hbfvxQV;!6|~DGCc-*babG=5;wJiqZ^K+j*8%DkBY}i
zDH;MMOm-(*pQn~`rDD<2^$D{pDvWt-9fuY7BL@`krX)*u%$uF00{87&lt%A_d`n}L
zLCY(<j8Y;!#Iy#v>lgIb7UKSWi-?fgB9<kmAASXE#@bG>xuQr}c`&pYk0S6qf%lXr
z&^1Sap_%ye0eL_9iP)$MFo!7ND^K^Lrec2iSBFujB);EE2JI-SCHt(yhYNLDjFu at 6
zjiMgHj~K%w8gFpVhIGPi1H8IhhG=P|Ir3DR2iVi}fG}UiqrVtkIfWv(tL2mpIvwe!
z$j0L=P&7R(?bV$;ZK=VeI(7tC+<~V^jc$7-MvXIjPF7F at KXPSxK>>&(r1oVN=P5lZ
zw<Qi?$tVm7by-4kB7GSznaA4{-QuSLQ$=xEP!~$y<Ervs{?2DuCJHDbc(;9qiHyxF
zv}AB3FI8`BzE`Pirp^X06!?t-jf?E9$B_lrFv0C2=_1nD)MS#^B?LeDiAJ3%!r6CO
zfrZX0OkXl_v}}CaTplC}#RUk~>9gI-b1B9I!X%T2U=q*6=z_3 at O7%P2XhUe54_8t`
zUI(o at 7&Zg7*S*n?gR}d^vwm-^vV~4qE(WKHz2S!@d)w>Vw>HRu%mdSl^ZU1Ndnsgi
z{_FnIS^t8kcBuLN(QS+Z{h#Ek|3aeJLoWvUhaTp;Pd;1u^WA%YFwJ|Pzwg{#{`9jy
zU|>0Vc=xl<?yUq>+9ucBL8Jg;{zP<qdD at Xu<VpOHXif)*BT74;QUOSzS+-Q=7a|Om
zMYmq18kJsz8lF(LGD40LJv%S=clWk;x at o|2J;o2-b2$lH(l7`|u!Zy|6c%}h2$k$3
z=Vj53m}NC1gv}CZ<8%t1*fMIuEQ*AsoSPv|WLNm^&SV3P(FE_VL*=Ku@}!CDjz+^#
z6`>}ZBU>GF8qxtALUoy-rUQ454t~a3ys-bJEO(*VLP=INMEOH(aU2N|)&nt;`TpU`
zO(QdG_vNVZH>`hQ^iuv1B9viVd_7d!v8o&#!no|ixC0--Z&tYf);VGkHz;LEOAOdw
z6-0&cwlh at 4e(*zw&Ylc$_NYO8+2VAus^Nydpw at Wdc%w5mT#D}g*t>;&cNSpUA{<Bz
z2l8*LGeM^pVFXP<5V)onu9$5nt}f>uCDB&Md7yK60KbgaC=$E!OS!si;8IzQdR1&(
zA!Yd#Y1p_HlSLGJp_PV=zXI^6ci^E#iBPiNGL7LcqO(aC)10Jd4b+)<5t|^pN`ZUY
z=OHb-Q{nCu3T#1~SWaEA3)#C<0U=Aj9IVIjd<{8}0xUVR^zPUh3o^xiF&IlObkvZo
zxR`yh+bw>G0jWQH?r)KGeA(iyeG)jL$sNQY<E7rve^=&ppMz~@Ju{(!A;aMa<e79U
zMkY&>J?vM1V{L)=@h8%^eWE at RB@a)}Eufl2bm2>^0n1fHAp~7NkW_C|-sR{8Fx$V{
z`1MTabexMV<(f<O&CS;uOFDdUdTs${qdpb2(GiVu<I&>*Dq at KO`$cwLKSzWn*!AVo
z*S&YWqh7jHVv43O<NKkQrAM;9?VbH?K$cbBhG;a|I>HYCi?V_8J*kO7$l8V>=F&G6
z$S6+o>@Cscv0weZtSQXaFHFt3;e-j^?kq%3pdf?J2aJ-65hzGR$aynu%m*h1JrzYn
z6tJnfRsw}v^BRv59AD3{pkQ*jl=LP9$F$fBD*LJjfJRV(0g;rHH~?7y2VEMpXs2YN
zGII)%I(oD!I*XnS6XePS6+0aPL(Ix%rK1HM#&VuS{+l(r-n0 at 7S>YIxu~Di^@-CEW
zJ=5}YSdgZ_I78g!Clht`r+#R)k%F6M?G1;$wP3Nc_-qu;r8qAO#1aFski+sx0o at hv
zi9Y5DiCtGLI-I<XHSa3q3K_dAoroFx|JZx`{WgvxU3mZ2RgAgZC6!1d2H%iHNB9_6
zO!PsMl)YZrKL#Wq3Kj`40BD)X$sL><IQMe?d(XMA_j#(id%9-^AV at 3OO^y&p1ZMi9
zy1Kf$x~jU0IEDTK^ni#P<~U;VW`hIGkqPIQggHut%2I+xkJc}Z31hnL7u}OSY*oFJ
z!`I&(dHA&MY1%&SR$mMtY9d1YWZLWKIOYMi7;D~USQ7{G!8xr;>GVT=f)m@%^ihZY
zMDZsW9Ksn6(;vDw)4P(|;j|Ajv((<<8X!}%ds$BZBK*{OPF+u+DH9c;?R`~UnJa8C
zbc2rJccs5+q0Kg7?`-9|msvg0Sq&;hqA$Irym%jT?hD5nI)l3+6cpSKL!ui$frzoh
z at beT$H4qPejX~DuX+R7X%`R<~Pmg&=@itd-%ca?jJza5iOwb$q-H4XL5WyD8YWBl<
zrX;gc at etHtP4s1KsKQRTeLX2EWX|%|)Q58|wpLj8k!YRYP6snJ*wS<_GadrRt_Yyn
zG;=c;5*&0}(2p|fXTU<)i2ZDeCgDUb;ebOqxI9-~Ta<sXNM`c|jZ at 68mYPreGW<?u
zFyaM6KFon=bXsfzXCX!wrfS3&Ftd&MFd}*`R-p$4V&GD_O;;THv`Axbx3u+iBgi%B
zwcw1s*+TrCo|f%fOJ2FzWdR>lpz}8cXw0_=+7Y55haOJBJn5H9)z}UBlEgXBb!IwJ
z0S`R|IwH~adlQS(lZbHgC<BrapzY`Y3-)Dh9T1*r>fyczCAiKSljlHGnlmLI$k1*u
z0d#C3^)<j&qV{g<-C#T7-&>bj&@ee|fZsjfH&<f0GF&wer#Hn6QQ-3QJUP0BAOl>a
zl?#_tFfE|ft>}?VMy at q)6}Tota?MQ4a$HFwBu^pgW7te*e)iJiW6?ewVigUd9m<1}
zH~o<c2OtyDMp1Pi0)8hHA}o`vWaUMMUXhaL1N>%+`s1xIp+oUSB9C}PIRgit(^ags
zsHtu3E%z#zt<-9PkwQv+zPQA7BlL?jx3q$R%gAbze23sUC7cg((+YzdJYZoDo4$iU
zPgbd at 2dDcjE+K_8Ow<G*2*DH}v?%L}nOPX3W;fs-m<iS6gP|7VdiChhH8(vPY1SM5
zUB>>~qLE_&qlxGnEgPXAIv+u;H-&kCw-87!ILR6#Ty6kpK{%Q at lvu&?<7f-E44gJj
zAvwq~qp0S<SWm at EoIYQQHS3YbxiOz$iuR(Jn$DEH3Ps#DtwnV}O->(RJF+_q*UL%?
zB)?wB9jt~rN0c;YJ0?@ewg^EmOrb<~;Wt0mL6do^&hK$60nEs$%VdE(gnB+H=CEO-
zzZ%B;?y)|Y&hxGq(p=NO8ra-km9gAfipyivY}UnqW}3YXOwUI(q*%~5=;0bxzry_k
zu^%CV*aZp^NIVaNMT{0`LZrD8#>k!MP^^(qx+p`i*U90BsQGR5W{#RO?BLPHHcySV
zqmQz=KxUp at UoEWakUp1CyUWIBl%ux(?K^S+@;wfUMHH5wGEuxl at vU;*>>7#$a8!?H
zhSRcqKpB&(#Q^`ZQpQf`sRdIjrVsa09wd!HAtEaxFYi&HF2ae0Cx3u++CHlr%EDT}
zyV;s$#o-Lve(*QnmDPR+DJ at qTP`%~~+ROCtc1z~X_eAjP=Q%FlI+%Q2=dCcU9K0nG
zx+jEYqougQLenjtSMW5R5st at jG8X+5Nzz`)O<idGvGF_F at OE6yTdV#82)+#!*GJys
zN|jUv)m3RlB_F#DS%F{Nc^ml;?RNxra!&6E%rZVlm>!M!W}J?!B2gEb_;)YG3p}Sm
zmg-QhI at j&t$ohIy0>Y4y at 95mcPxzguim?#czvc>o{ptVBP!g7>XKD8f=7}hLvXn3^
zoh at 1J`Hce8NkUR9m6*yx)1!q7<>+;upDnyV4l%gG>sgihmK>f@#z_9rAK$<%^2bNf
zAD`o5EC2RR`R|cL36}U&e^kB8ABU%Z%wriX$qulzy^Vj{p!#N`ce;@$Levg=Dgsnw
ztv}Lu^T&tCAJ<C`>8W1?b|Et5+WrNV^5^e`$-5O5EE~H}iXb4xnp0V-k%j4pN3<_6
zRf8LtA)!RY3KFY9Q5(9oNaiv&hwBpzilRyiJ)WR3<Tfd&Tkr at Q?-b1-`4MK<;}$+6
zup?TfY_oaW5V$cmK_25sw;0%H-l^k(r8xe at gb|@g-vO-!_1lm^=JYbfqLj{&1g;3)
zaJ8_d?9Rw%zTsU^;|y*A-mRBU?wG(9)O#n4g>fGr9=7H7$iO1Da+gR4>SR3nvqc#b
zgo+oIYY?r}Y^4^D6o*+BMY#BJtjhI68w}=y>C9v*v=20Gy;#6k2IiI%G#1w2sbo9U
z at Cr~QNYor0G_Nl?rFvUMxeWP|QLmc&lhixOSJj9IBFJ(d30y*w+e0{cjRuqJD?c!X
z4o-z9YakVEuUPl&6VD;gRv at Fb4bQvUuqeolp;Q}5S%l)AL%L(5Hgt}0Jhc7WxlCsc
zZ#?9G`+C2(1NXnE*Vz at g4BpkNFlFOzIsuv;&*S+5No1vE|21?ly!~o~Z?CU?PPCaq
zVM=axVF$8}!UlOhKFiIly{#%LMSpH7bo#T;tEW0xyzp?ya`tCBbM^=>EwZXFt=@}N
zEaHnMzANPG&pcF8u4`kr_EBk&#kPJENx?J*k*?po*PM;pz#C(9>{LO;I;-%mpcun>
z%ZqGM<Q|xJd9-6h5Akqymf7ej0)|-kd~<EfqKHIF)}Vfz_9 at 4|Y2BUZPmAlYN=%1j
z1oR7%L|}4YwL-qqe at gpoR&Sd4&DsvlbrAm*d)-CEGcXW)Sp)`8%8u$q+JiPvufZfe
zB1Bn{1b#p{F?j<QG;?#uw2mvh5y_VACo`_LLCCEGWBtN~m}zidVjGW!>ow>=+f-D+
zN6$ORxo6h#hCnC=r5BbK?~IJ50W{;PQcg!PSQGmDheyXiEdxWD_YmZ8)D|x%X;6 at f
z4uDT>00nFc5urhGrhkuXp1?GWT(DL!E-MWwZX|@!;e;x!x2Llow{}QG`zdbrhank(
z3f+)?n|c*U6e*9hN-rUe*@^Z^$@Q<qyVfMT0RVfi5v1DM@#+7^+mguSP74e*@?39X
zl~z4-%3)FU81Jae1>tHUL-9#*9_c}NaKB5+KFqJ7L6^k)=n at K)NH173>>KhHq*z8z
z0EU3f=_<k=nU;5Gj(Rx4K-0tH%xuh4pOp^%9^b)J04+e}n?{ZxwZM-F*N`zxQFDtN
zm>Z#21IML>F<EhrkFL+oV60MD*b?1V{B8-eAP64nG%Qd$k;RLfCAjf{D<<&s36c)W
zQAKax3NK17uNF6l;_QVeSJHM$5_UK6f?;6S at Mdcnowy2FMrK=dZl!dsPb0`IYmc~4
z7nXzfSJ^hrZns90;D|g%@j?o1^5WM|J`YJ1A#@%YIUmy|{w62|QoX^l_1Io!H5jO1
z^2kD!8|gB4>tK!R8v9nm3ym_(dYmZ(MmUQG6csF8NzsUNm$Aa3Lzu|$^h1W39d3|Y
zlFZxXS_SUEVO*YL6u|aeT#E);W5YJvw%wd;l(S%JP54Xh<M5Iz3Wi0jU|kx&Lav~J
zMqPqr3}FgkpUx1O$3!0>m*mDP(OmIG<QedOa|fDj at ngbUM_b4!FvDUV&3C~iq_Bx;
z?1{Kq#Ywn~ASOXvVE2FnFvI5V!NaB`N>S<E2vL7=>r=Y)1XnHK<H7b(7+{Pq(_;#M
z*$8No3&;eN)42}I67`rhA7l;mn}HbOxkplL!_>^)=HV;*!95;e){lh7H%kDe{oO=0
zwe{1InBEtNav-j2#gn>vASt3DkY&c}Pf>P|n+Ot$Ylze)V<6U{alZ4 at +|xj(U<x4%
z!SX7n8&S5^<-+k&U-Pt&JB5(bSVA7F_9hWH)hGu82qzlZ9d-uz)I(KC7c?j{jL`BC
zOiv}%RA<Sdx=@8YD`rDuACqm8ON3Nz2@{im!<|X%Wp>}KM+HG{A4v^Qb)BL at dBXY;
zA%i{(g5HT}WaRH`@I&*MmoJ2f$#H0|m8)%hk_(at123dydwGoBpQzGaAlwL1OW}{g
zG<FdGd|@^c`ZEg;(BKqsLy-*ia&A$4qOG1Ec~2=v1r^SX+394 at 6s8><&y3@*_tp$c
z2Itk6Yo|YtN9w)|XK>s?<<C252NX7H9<_2No@`FMUu)HwA=r6Q_&E`T9y1+8ZdaV~
zEk9=cg_&f?2B;jFX1Ne+{F>}FtZzR{d(I?=vE})9X&w4J&oj7Wg;XfBXedyw6t)W1
zZ%~jXRA7ttv#in*=yMaxb_&~oqy^#g9-W(tOHrYVRmB^hFftf1Kow-|vAUIl?VcR(
z&?vsl=@HU~eKJ2_cx`)v^sa6gm9nTcc|O$eQ}p3LSmp&JjqDoK)i2sIcLOCQXcKxD
zSp^pZ1BEeH!6|2SF`UaAcReLtC$=J#pVU37uGc<fYnIhHt)pQ$&b2tYzJkipUdq|l
z!w!~_RWf7;Lgr>}qN}}=k$Wi?LwMy?F?F)^cZ^M3L-20pW0!F<r90aBR>H#97 at XX*
z)~-_o$o7HWU+M)j=#~gyo}nylGyqQ9HS-*B(9HdrfDsc0cf&@{RuCTD6QEK!|FWqN
z;{=wJUd*BSUbhX0d2`V~M~2&kLFd>*>|N0f-Afl{ieK{L;lmAt at zpCFkcXv7E@0I1
zgks%;{CM52pus1a!VGL(&xW%YpOQ7+r%M9i9^v~mr1prXaZ!0O=+FlopdrnBDYj1L
zP-b7IS4;?X-gg;Jf;IREmW9YDgQEL<BY|o=gmr=sA&oPzvOA&@M?Dd5?5e_9$6+|*
zDQ9MmHMuMUvx8aK>7|=a^7Z~JDBF6;e?$_|Bs#)fUJ#SqG=)9^8 at 4(H+8Fh!A at Ime
z_WBd1O;?7I{uVTdEr7GNMdVl^K`etXRp~Q(X-Ty#c<ir8Oo(xIwy(vlc|81u**Q14
zi_&f1uR@~PR3n5s-YF1fOt`gU>!eGQRXC_GY|;m*5&*&?{2=U}Nk at MQ1>0!0w^2fL
zvC+lFl{#%Qv#<PS0s@@i`QGH_v{~QT406uXYj-|Jn)lO-=g0%V+?Z6kYkJ_uhDm2H
zQp~$;)vMwDuZgBA^zeug|A)}@N!AlPEKR0dloHfSmn;Khm_B636v;2mCQ9)5(X>(e
zUH?r*Vf`lh?*wbeBO%AVZBTZow&Y4R5p4E773+!cl#bsvgd=aosoOCq#>$nMFz-S+
z>12_w+wK at fcX-N!0QEs`KC?w+%%+rKTI1o#sYy2CU7KYqrhwZ50>Y38wi=c(Wkp7d
zU{5STq;%r)&e77f(%KQz9V9w&_KL4J#69vFSB!KZ+ByadpCUcAIU;3Z at ZuPuipsqW
zJw+&f`%p_JNc#vq;C!1}VrU{%7<em*RenTf6)XZFC=DS@{$w?$MhrU%BlijwKUfh(
zmnbd_ZOIod`0I)W41_~w-a%SzD8Vv$X7jN=A;#UIWqKSGHk{2`plKN(SlE!Yw?i#_
zwy^Ou5t3oI)=|%jLQE at VeE0Mbb4jJNodTf<8Z8X_GLca|wjiVruP at 1n;N;1DsEWsD
z5U`-Hdpf>6w|ox1#|T?ApPgyW?#-*q0kr6sqkWhWM?4Fky7jkng-dogiw+m>_cr4C
z2DJ3!^Y;t=j@;O$1)MkRvOfmZu?>bVHQGK$+>DeImUP*ZpYEDb=~8$)9RF;=<#NDA
zMWQwgoNMW+5H#h4y$vJp%99hzuLUQ5e=nF?h)8{c&iFm$w81p<GU*0vIN5e1?r-*?
zSx=5y(`c=`03B(K1;*P);b&i#tpKSzZT#yXO@>00d1RIfuP8YHvd9Umn9VGQoc6^9
z)!q__HbBqQCF7yNfA$U`NHHm<OpxB$(yX0DY_2YTt|G at DdKlK$B_46;^*EM4r6jg=
zne5s=xtEe^ya{%}Zk?&vZZURSbo*tG2 at n}mla>>k$0E03nl<fo8!C0Vp9OjnvUZdA
zfMOct4G`MyPlKNa`V_>yyZiKuw_RRIe at mrN4w47Bp*x&@+=1<Zv0tIRHgfv*!v}v6
zta2}B>(h7JrmTRZ(X9}^OM>PO0}<FSmmXXH3IKlmk(gBIR^n3eCH`p+zgZpFZ+^ol
zs^*-b=NAq5D?xOZAH;J}fq}<gm4)-at}@&VmgN7IUBphrugU?=s8RK5Rr0{%YvwQF
z(UcpR{I89;RQ;U)_3uFyx?{t_`1APk369_hsPM}bj=qqAqxr|ZYP6W+AB0TUt3IJY
z(S)F;Ajh1Aa?Kq{IdS0?I<xZ&-2J)0(QxoH6N_<iJrlQGYyje|@_TTWBe8%*3}XO|
zlbYC>fDDEVX%RXnRD*mp=eD5&#5c6$eJ6|tF}88O+4`}d)Im<nC at 3UNJqNtg*-fug
z*v^q?0C`xTlvY>-dsA_`vmEGMx)L*)N(hV79q~M}<dr#xEO`sDMRZlmU++tPnLcI-
z2}G6`6O5oKgOpW8G3-^ZyAo-8RS7u_(00G7(5va<mH20`F4V(xTX(sY1N7qfuWE5M
z9(XDl&k+Jl^VMN@^U0KNLD3yJ(v4;ZGbpTbuM70CxiaIq*w71VkKe)1;WYw9<?3L~
znwcwjiB4C&RQD8n$inHMu!*o#<|vkfXEZ+>T#bG|Ka#NIg$*)YEz;!Ws^Xv_lRzpd
zc>U9yF9yi}6x19~jFu>TjP*ggOZZS?2U=TS_$qgz)7P*Ch!@S~{_u%<TBLhoguK$#
zy2~qF#@F~swfdw~D#|Mjpm!fE7b<er4vEt45+p*h%8?)r>4qPFO-;T8QL(Yd)cXbo
zYP<ktUV+`73U$(Rgudmsfa4B*fx8m*0;bFPlD3U12M*|PK at oQ(8#eEj9;c_CVI#kw
z(w;@ow8ju_7pu@}%Xw|DYb>!NmHu+F`RZ<Maj)A48fwlcZRx<l5KtPGNd#qTgiOj&
zs7T1Q^-jaqd)=<=PliClcc^p4%hQPcX@;&pakuokfhtQfZn}lCxvDIb#@PnuPN|i9
zg%PZ5jp0{4Q*mK^w--WLz+G2(K)Bm$773Ntz5XUsq)vr40m2AH7mywdSCeQ0qp+ at 0
z27~g1j&}o~6&l9hF#VdyFnXARXBiGJ>Iz9$2~EKvl(i{+*wtsaa2^EQae(AAvU8%f
ztme6B)bQZIEUKEBjx?l&!c<`aofs9qRCp`&0(?<<0wmCK20aOgh$<4lX;+fRJ5$oL
zBpE@%gT+-qDw1<*Ic)R)TG;Ghv0zLQ0bn|js~dY8=_&FF7qifmPD&T1ZDjHLf$;wT
z^`B7}>gYF$dw}ZkXSi at +h}&3N7Z0Hx&QhtIZ at Gj*Bx#mC(p88jeV#{ET7DU}0=X){
zT3YuO#H9uAi#uTuw_(rgW?cj-;|Wn{`A-gqj?3i;&a1Kvjk3&rxidhe*T5~f^h(|r
znWl-`(CPQIE<SA?at0n~#Imsl#}jH69$~o%Ynz1+2X_+mGR%sYuGq|1T87Ph$@^lH
zP%lMgK{xB7Qn8`qLf#17{Zc+=c8~li&?0biF<xL-eY<7PDbb!x2|+4SM=#MaFVRxF
zrbJs!6S8WmQ<b!vb%>@81kp<iU`BCWRLXB#wAdaoZJpw>-WJHk_ei)E7dj1De8AZ@
z#is|Q!+Efm=h3;WHs;E6TT)3jYvSSQ!%qinq#I|Z17|l at 3OApr&lvUv%`_#;OSWuV
z3Q9|6VZwa|=UNDD1HwGv_&8%wSK~j8_VwlrQG-enB1c`SNqAhibRwlh%T=hV5A6B4
zqR6Dw!(9YfJUxXBA-*S at C*9Yt|FDk?@c0lYa~#pCPM+dhb0nY(7|qXs!}C48)q%>Z
zo!%WVduSkfWx9f9gKkcl-UM8_5BdU^O>0KwvuwJ&`oY+^>VBYNllKxr25y`WM111V
z(<!9aytLpDpu0F7TTN at 2$<*LfC_RRS>C*ex2Wb at wL3m_kcR8g*&yQceFsGnfjtj;=
zkkPh1cedrHHdCHHN+<Kh&Be&8bw}+w62 at tm>6i2K5 at rhn@oWr~p)yD7V5xeV6|qAC
z2Y!R`og4JDFn)uG14+HhDS*sCs8Jfz11qiLDTsz6Em54|fP#-^GhH>xSK9jk3lNrB
zi2i97N;6={!qm4BybOFfSUlC-TAc at aq@d#m*61N;bfNI}^<ruSUCW7v)3a*|(>u`0
z7?XJCW`8KY%TnhZ)Eiq5cZ^s0o;kzp at JutB?O@|Zbasqy!8U05Q?|Trvue<?<`fmW
zWtr!J59D;<`qmMsQpg{KeD at BaJ7O5bl%Tm=;LbNz1iCvdJt)Aw4ggMU%!+HF2U7=z
z5fS|C!_ at I*W0`^n(Yqa%KE|vGhIvyW^|KGmQ~AOctE6HC>6gY3CI8|AfhFfVKab~Q
zZW!)_$71{dqH~;U^v0ItCZuN&4BptVz+)LV6>|+JF2>teSG&lX0PRic1S9>xa|>X1
zZnk4YMyr*K<j&UZ6!UxP;YJkfCy%1n&}4!~<3k?3gox-UV=%O&#I{CfQ-qT^aeRi-
z91NcK4np&u^u``JZk*Q*Eh7!dpVKH3<XSkue at 6p9m+&3?-O-FtQeEkc9hyd;i>tuB
z8`bJY_A=w3-huFQzRY-n;b5p&7uV2FAh0M59?VuHR0tEMA&*CqdW*p`2D{bbdJdXF
zmW9y-wLl0CY2IufPq!V4ej8P5NT at LSXa@J&s8KUSAVTu8)xD3L(a?_mMO|-1lcWkp
zRY7|yjsaMi=!nPA1HgSp(@El%EhB)^(9hZai at +&H{4ICh_nF|Ayu_uxP=8(38$w_D
zfm1Urh6_8_=5nQgTz}3orTigFy4zSva}bxL4RGmq;O0<bf5~iHc39Z)vCy(sYHMPb
zgTv15PxD<nC%nD0Aq%X)^q!izks2LNfbigWdO95<(F*)P_(dR5glteyg$ip=oM*ik
zI?Li=Mb8gb_1?PmYCW*bnF>659!x1`6f5?adV4v88VWNvAEdnOB`gReeM1!_MG~W?
z at np6F{UXoCSSQcNh)gcmYcKWks6eW^IJlj{!l)i-SSAcu at L-cY!8J^5d05m2$mjZC
zJGb9w?Rw}o5KsN)RAahC$z;#;x6zbEAu$H{^2A9NDW_WcLt!xDog@#Gb*WE`e<Bpb
z`brZzHa&TIIuqX}r9{UucD9~gUwj3 at h`b7X-+0UV;}nls!LtRHWp&X#y%=Y+EAu60
zN*tu=745o`;~j!_4ls3rQkymS(QU#L2ykSjlkVU&4BSIB=ovu^2yCK{ly6`_u1{$e
z_ETxdl%qK{QvzM!_LpBspLpdAHM2o8^g;9<A;5#hBBwH-Tgfamipk*>|1i at UP@v*0
zo8yN^d_iPh0fARfcL$szH!7m{7u+tz!E_mh-);pg83<Q4obGp-QK%m9E&~vtQ%S=N
z!`xzp$C)pSVsIY(!IJW3#qAM-6a1qvzBS|-Jk8nSh;x_F*sMz9%j?Y at +bHVZ%y$j~
zmRBf{$bAPXmM-C8Jvti?E|B$OHkWYZ`CeUXDZ1IvU)>D4W+N!9z2T)L2&7dA<Ouv>
z^i>p>U7j_z#*dj&x`0QXz9<K at av6WcNX~hgByCCmmG*MAA!!3JhhZ#6yX+Wv7viNf
z7QKaF5{%73c$XF*v%L_DW|X at ersZ60JEzK6-eCa((mv8Tusvb*VeWMYXQTYscL4+B
z3$32+df3c-Zff^7Gbq~(nXv2QuMemf05`sjtV6Y+ST}O6(X3;&I(cSJMH<4N`+4?-
zamh^``imHrRzh?Z7>1D!g_0cXCiMB|FazgPEowbLho?mzkhxixyouIj`IaVSL9N%S
z6ixlCZ)w<VC9ZMjlDcAqG8^7T<tlsHnA}$GyL at 75>7*!5w at -H|sqrUKL=jHhK8+2%
zd%*<mh^GkMBV at 6OrY=>JcEHFesPVjjE!S}|PAl*6oUsvjT6;w(iUsxQ$h4}md(WC6
zg1?9B+2=m~8(?6$|0gmFPUd7&8cmH6S$Nx;4C;<>ulD~eRVtNI=>J)ctBv|+|Ia(3
z`Ci2>JGz_yCp{>h1)fnWs0Ch9vGtNFRUVg1QCxiz*Pq1A|BTLVV7)q7Tt=Ism$zE`
z9vm8wR!Hp&sna`8!BBunQFR;FL|(|Aa`2-4{mJvB-9yq%CJDd}Y#S5bC=Gv$BT#x_
zRBw1{9}?sM at g~fTTS}2e=TC2uRsKaex2 at Z31)hOmdC>x|rR9Y~+|NCiqqRMqHmT&Z
z8R>A)Z~qKW8J?S7?!Qdr9W|WT7#=)*U(R0GV3`wm_G*ojOGMn^c8D#njEztByY%oW
zjlJDsA%2B~jEEkah}kCxH2au`QISNrix~$eQ&TS7NhezW?WV01X4^5smmXnV8J=sN
z?vB4QCuS84bHb(64eRI$+muHVYLVjPAughQwe8CW5TFGmCR-bE at sNE|f5UTn_Rp;t
zbrbBNRU{#!Ih1>*##-Gf{Tr1zFvn42^wi!f#e>3Wb4?4E*Y;6VrNAY1hOp2uiV-dY
zrWJ5ibcX(RUB^c5k?G%@4u?!1iIb}4F3QnE2uFr0+)JyYKx)v*85#qo7f4$1aWvC}
zr`EG`>)G}XTxUOUx2pWkB$lR>tAq~MiEwwL*9$x<NQa;zo#joAlV at x6avT<?G%qk{
zNh>uk5HeTq?fT?k#|{+_zKV*6YW*$Z&c8jj7zQ)sAT&6}Y*O6i2N#6>qIQ7 at zzl`8
zsh}e_6G)S=`cbijG$*(g>?RSiKV?bRp>FtYj9fC?4`Bc?OGnQMm}vu%&b+`Slg)45
zgnwbb8_^QQtw=01oRx`tmLt=m{Quf at oO|uzzoydK^54f9b2!fKA^ypIpXK*|N=QOo
z&B}k3a_zJH_iN^L-MW7x`Ol*kh=1j3NuA_N)yJhcisL7x@{?+PnfMpTcl$>t$A|4#
zNB!4_FWblauV0;fci28SNDjfwxtC-Gy-(@{e+S_%FR at Wk&V6otK8die%vbpShpg9=
z;MhjE_sk!xEz}t$Ln7Ip5H?MnmsD_IN(flw$HPbJ(#7jp8qyA2cLQ2%*qw19+e9l|
zDFH7JM(B&+BE>U&I&XamYnO;X_Lt4QEYJx7SoH?Xo=}S*N+P|(Fx%=ug>c31us7R6
zqO&n+pZojCi{6o at 72qbuGM*M!dU&`x1-&PA!bj|KFuOVNqe`35N8IRWq0R!4yhyso
zI3c+_PK6L~JB_?VN?u2N^(E+g0>86IuK91?B!}Oh938(tOss at Lk;;BjID$+lF0e}=
z<bJvlm at GJ-9$YaAYTRq%$pFuNQEF{s*j5rWzG`BWf at dDzGuWL*I93M;<~?`-iRj$`
zf$L5X at D?H+vpgalGDX<k>DgkmKoE48$1Z8eU>p7#V+NSZOS%I>EQLQr_>PAUeP=<E
zbHmBy;L4B&j#DpDDC6A7Y15KZk)-Y6D`W*Uy1v%;+g8kDk8J)e>`gAfi<M7>PU#wK
z9~kY8wn2X>h=;$b1x@)$w#y-;g1j_p$AX+3?o6l8EOuCl7`BE6eJg4GV%R+BbMqx4
z3NiiPVlVKzVa)(zm>4aGd4Y9RTT+RfWmQ)%J`mudHcdev?k}^^<7<S{9bX{SFgz{5
z`i3z6EUq4_H=i1x#hY*beuSG<G)~iJ6qiisGy}^V&kH-zK3rH}jhSE-GDin)K3ww>
z3GSSvQK_^^d+2|}rZVb&q+wisw%6(>8Gl4H@|JS^k3y_AmIso#dJ$>P7EV(vx?wPM
ziN!?n at 2ZQ_<71q_aY_Kc at n{JZA*u(SzSJ$Ru74-uB&q1(o#cp>XT!8 at Z=HbcZSC@)
zwic24Eg at 1#y2yE231Bjm>CsHO6!Pzs$a!MX2~hRAMFEMQG;9$+2 at yYWh&PoTzInDW
znJS+k(c%KBdg&1OrO=a at d9rhXwg`nXKGUCie7R0kSplB7f+1uk6!Zi5v9X<xPJVL&
zD-di0&T|#OOc>slVZq at wO$yf@)vnIEaCzc|L+&ER_35Xp5%Sf}B3uMf#;^%*7mePs
zryU_uJXQ{!qcP#o;vrz!N{}&bS at CE`eZlr3Y47Mi5b(;h?Uiw^U0Ue-ppdi#z`K%u
z1WTE*=70gpA)+^d$@RVZhG7hNp%0&$hqgLiz}<T=lqBtgGe*(JKr~(OCDW$bw3<3%
zTMb at aH*f&E#H|fP at kXB-wSCjMaEVX3^WZZ01D_dB?Z`P|`M&FF8T3doH+YuQA5u`i
z8deSHf%CN0r<gzf(n1gaBH#+jp&M8f^z4;Rxhz!;i?n|?3M~<^k$l at 0152CphLb{W
znobpjh7SELM!>T4Cx5#_f5$j7Ab-acCT=%MFq?D`hNQ%eivVlg=@p~RgVu*yPoAQl
zB}Cc3U?A83mNc#91+n_oVE#*P3a6t59GtK>KqyB5d?rYoi)KqREcsvzm|XF11BlRo
z5{fQu?#Eo)!A>l|{Qe;MIzR^1Yo6;Nk(X_W*Tno;l7<dm`RzFTJLLC3V6*8>u%PoV
zIfK$18sOyVT~Xh_I+;!$WBZ=t3<928Xm2$P);U~xHdPZ3&T}eD?X7(G7eU=KdloQ8
z*(EIzMB*mfpEbkgI`d!L(vw$|-P~f#U9SHz7esJPhRGawa=VZ2hkA%x?0>aty_V7c
zl&ZDQ`k!@GIKQggr_%ovQ_DSdKg-48oI=Jf^xl-}3vB0FVyy at VO9DMR=JAK|1%la7
z>Zb+*g1uP_qMqRLwZR`hpr8}S_`-65G%w at UANF6o5J`KJrS*jG>X4nej2AF#Ko>As
zXkgD{_#qC4CZ!5pLvIMy2znc7$g)dcTwl>zmoZy$vxjYDS|HbS*z|Sq^cxAHEQG<z
z&CE+Fd(7c6y09&r`X0-bdrHRElxr+?FoRM0r6(47DdcyawBK&M#EpUjNUHaa9XMxL
zV=}SZLkG&`N)`SU28MP!NLgS29}I~e%-)cX5RG4{QI2{-FX0Wfqvx-`<6yT<_)tzP
z&m&u69*X*JUc69)OLTDfx|<vwz1TlG23D=!CRO&R<|}O-1o436$Ged(nzY-7Fd9Qj
z*kU}01EUKkNMOd^VdB}+&rB3&-gbb9v}){PuD^`UQ7lx}hjs at SV&t-+SDAas?|ds6
zoo8h%MOcvp3B(a1lbWL$jc2mulG^z(K9OFV8QgLz8R5H+cD{jsI>MWyEk1=%IDs-~
zWS(XXbBt37L2qxvYdasIa(+ at cp@dpshE8<>&r-FX@#eNrV=#n|8q~6esKM_|P|GsD
z%MD_$?_V`8+Mg9+up`3t*t6s1&At1>)WFM11y<xYnA=+mG5hPSg={RRTMKrfj>D1Z
z)^be!b8Dd^xpH%Rv2R|GI&RW}YWBpxWMy0^D-GTs-$P?0(bOe1R=R$Rl(klxl=XLC
zoAR$)f*MVjTa{!VVHkJ<{&s7BXkyX&7HBRaZYheLkf>ZNYq<azhC<D?>QiH2<4yq}
z!6^u96ei)_Qg|EplZ_niz|kPl$j|cywNsM5BYY>k+8Eb4_*cxKV(sJPDq(R$HP&Dr
zn(x!HhOi3&wybs)4oU6>RsDIg+l_;c)Q?IsoX3wJlToGM*q1Az&o#L}c{dGP<aTuQ
z&4C1x8Z4f}4^{*uJ_1vu at 2Z2xREE+^9Ej**pzBPyPoaB(^EEK19hA at b7YOTg@<_Tl
ze|9eTmw#D){yTo%d;P197OwIw=f6^=Rte94akW~ne765P1pW=bNLV{gb=0a=8nn{a
zAIGJ~aXEsAX1VbsuKZ^-8UHl8fQROTlvt3I^LRR(K0wrw at bloocO%3!!#V7FMjJAe
zqsT&ukaIkn9Zj!iXCs)55Yro0?XwS1c)|OREx}?kUp%2okEV_%xI>+m-I<IQ at Gg_`
zyT60Va=2H4(?}fuyCf4w3e-IWk*zoWonB#kr%)>+DgA at Tj}gFh{L3ze6qg#M>Sv$!
zA~H&+^l^D7j&~}LN6=`G=kFyJ2~A_T`FnM9U)7IvdCU5*G^!c@@3>K^l|HZkqWSvN
z&vb9RYy4lF4zvE>h+Gp;3sgUM_4;1ss4ZvFJLrU#7d at s+^Nt)_NzqhOIIED{+#Ep%
zKi31aguXxEbxwJ>t$`YuKLi#^ISb?3I~y=j#3hWmp89c?rM=k1wZk_=6l5fFI=e_F
zTRwnZ3AcV=8(K&n0aX&<?Fnl`>+Zz@`W;V}l%m#%nPlNP5~Y>G!vi|wr4T6kD!{zO
zguL+Tv5Km!lZ|bqZEk#ODkn)dAbE*TM=)YZmS8j~ffUtMh<VAu%*pK8k at Vpyx?%4z
zDR~%I0-iP7G-sJdybSHE1FXbwON?rz at lcp2mEISEdU>8!Rh2kpM5jfgV~*9YYxoeM
zPciyJV1EhDCe(0*`F(}|TU|gG+%9~vOvOgrNy#TqNcpTtkfBx+5alm(z5;N3x4`1-
zM_5)L*)xX^8wd;M2u<y3qZrDd)=B+&=aIkugHeCDA;12E8EX!cP9te9NFX<M_Oh&w
z8je- at H+JmSvs#*m!yFR^;3KiS_=O*^BC*mwiM}JHB7Ze%8}fr~7Qd&+7%dq79Vu9A
zsj0~v<9w9bqqHqXnlc}svecw#-xwO>PZYAyr)6?hO_roa2y1uDGYxFxdk7|mvkh0X
z(PJK54%(;l=>=|fznP6i|HgXu<1G`&EsL}FjG2JGHH$;=NW5g|{OFd8ZG?YGmoU$F
zk*{bx+TJ2qL2cn*QaK%wt-ls}Sok&+u}mSF_<|53Z at es;Wk7nAC~dikwr)Lqx}4Li
z=Y^+_c1a)*E7k;95+V|wmTIfva7KEgF9v;^gp*0RFNBwQp=|HaH$ml?FK at u|dzcha
zI&v>c7z-WCo^yi#ZyNrO!F$^H4kTZ)ZZU7biGbp?=b34}hw=gBZn6DQmRK(T9pW<8
z%j8qY8 at I@RHKe!8p8x9A#%KBOQ{eu#Hst)LQw at o&RhJ`R1LwcTr6!^fz)Sl{1&-Rt
zb=1n801u(~yd34vfO~s9$F=DrM2QDE>K`k)V&zREsBU3j;HBqp5R(s=2vu4box%?;
zioP}B*7Y!g2hd7+A3QMU!;c^3D(dA8U_iER9ud_cguB^{8KI)>?!zc<wVJqcSSsO^
zc{;{n^Kh_0;zpX#W>9C#vy;K%1l}d~@eWLgsv{4Z;z5#4HKLb;*;&*Z;h2P=UQhXJ
z$NXYbXQT7c6&wd=IEhX_jCTHXwsST}mF{E)+0W~XG49sRqL=^Q|5m`JmuzWzIT_D)
z&dhbJY$f~q5QCURzn{LJ%&|K at olQ?q2a7W6(-mO8lQ~JRhNOKl`USdm!m<+`BgOrP
z=qcPy(HNc~z~%LPXE<8j#LF?<GB2Y4^FPP$2mkkfp}PDQ%;3o^MXwz|_V3pN+%%pb
z9MIVZvO3eh1Qw(h=XwB)E}}mm&>L!h_<+CnM90wxax=^}ljtREdT8^hy|H at F2H(oD
z0%?>q6d?VtCOZoxUD~18Bz}Oh??^DXA)-o-FXlfgVKcK7P0)xlddZ0A%-;!rw0Db-
z(6 at XU-Au2IuO9BrLbiqn5q#VvkLfNpvdigk{O$(p2cps<Vq7+}xs7HB*<*b2zkc;5
z`kKK8F at Fcwr*M&uUX0I16C54vZQrtb0b(Uxu>j~?9A3FM^$F0C0VwKE(TR?)82%JY
z_-(68+<SyN1UrD^Az=K7MM}R~P%(^X+AZCpzS}>3{`$>v)PD7S^j-T9mqU)f|5A=L
z%qhdGb;3~)^X6g<;D8<YLc^tM`c6jwGCAx%N1b+O|Hc0C_jFq9?;pQ{jWxm at 6R@p=
z_Tlk<_sxs;VRZ23 at Zj}PvJ*v2eu^<l3oEchk-?uj;b~FyJ?6&bOMQ>rIFMV;Mu_`|
z{0Q(@xFTo*^74kI-@(Nc%YkP%lul{kOS)N2rZ`f3oQ*N(Mp6i7L+Yn9 at +jJ$ob4c<
zON>byOg=!Qh>p-efBX)O_b;YXM4;=yb~2qjie9#(s8q%#{Wz}R_D=NXsLcsI9R2Bf
z3 at HvuzPb9SL6(TBJMm75IK9BRb|&2_r?2dkD?62P_-X(L)6>VQv70dn;rlP(s}F2n
z!@@Vaam|_(Rit{x0R!>k2r$J-bTR}7Chf^CK)M%-BSMQd7*anSz;X809$4 at l{8GW_
z5PlDCbvz~8M8vBWsZ4Bd`ca~;DV&^SI?Lk7Cm=zNgio4VI3VifTbDEk4 at E?cHpo1<
zBP{z9s1h!Kbubi#=dLYuC40|{>A6;a1+R9Hg?q|*2{59?I)gd5gbkRd*mrlq*+5Vy
zWpz5ulKoX1;tE5^tr4`wh=4gb<zfcUznab at VB$5nlya@*ScDkQ8BQiYO>ZEto6j-G
zBNcP8Z~qKFzQAP<DSmMDBvMR0!YCMa0BVgPm=4mHlKJX-gJ%M^0c@`qW4QTlJO^%|
z=GdpV(G?84rY}f3T3l%Fv4MVLCxT8~e1^3HVF4uC1uS-?V=y^zZ(S|8Qb9KQespmK
zm&Ok^{G*#pz{aw?L?94}OeHJ8i)c;Av2{|XK9A%U8qjB(>QDnuM=8YWMCf&}l<SoC
z>1-s_8%~>SPTQmT)ec{p;r83#@Q}NB2<p8}&iwrTzb6LLg^|_&r&m~hE#y4^HQ><6
zzxZVT$}^Z~%5|IsW7q;qajj8B{FmCV?RcH~*I=8oDEb%3>Wfw7Z+pM0?tkNV>&(CE
zQi3~3cN!5Vc*XtixB_EuF#qMaR*pZP|L=t4dlvpw_MZY85erb+T>RF!Kcy#?vY3?Z
zDJqQnlQkElX{w9^BmGL?m1Fe0C;j~w$<f=b^rhAI4xwY)FpovYppr3eT+w%KL)B}>
zaHIYp6e_UkA_)}iKh!Iyj{dmbCl?IQFL9iKLbV4$A$l2oA3c9Eelj<1nqR-9d!{z9
zy_NiO1<`n}SL-q@!L<c8r`fx+ay_oYj((&;-w+gOryRQ$Uf|gI_$AM5IKwPy#})44
z9@*$IFZCft+!LGyaGModJT4GVAD{6ZE;)kFJw`ZjUiro-AnW21q?|?faAyUV(iZ8j
z%fT;?p`zI<(N__$K0iJ_*o}8m;0~A-Y9Jj+^I^G?URKipO^9y4{06`Ce?})gv7d?P
zVQzIA$q2_k#9+e5BA4UDp~GBWq$j1s*7I(S!djLh-Lxk9_FJz*+;bKE<5pXT|0B@?
zQy^Mp`ke>6n*YO2T&idIe+dbIKlA at PBl;c{?#KUeMiP?H6F80#V43(Y;}ejf8|s&<
zW<Q9bNv%b3<w>RTq*itMWj0|G1`mcvrGs;fsEBc9haP7_O^0a}7c+2(f!c!ynRnxJ
zoZ#hx25xv=K+TnD2*+~0<V&UkjuKs7K88l at 8rlP@Y=YrXZGr040tnkte<Y)C7Dclu
zF2&H8Bq}z~#Fm{&I%;20(#$6>9n)BssbQ3D47!g4RxX?D^MjLblfxqfLjed-dxL$V
z2Go1R4-cW{<jJgvGEdmC#&Y2mYPBJ6$^dWXPVqAvi~a<m6mVQbHWIBPBS|Cs(|+|1
zegqfEY=+yD42so-TI~gFxG-GVO0-(5*-y-wlQ9DrxF&ZbY_*^P+a^r=v|-Yy?{|rG
z9rOf98Iv<|a+iR44pR<IESxfAvk<6xh;>877%xTtuew7~Pa;JY^qsPepcOCr!yMW(
zXij+Ql at q$$+k^H|56c!V5g$yTRU<s?GCUzocy!@_XFni-F3D7w<47-uY-nWgY{Az`
zu+RXEIA3-a#7zPjAaL6f$NdP`6R7%xo{L>#o1+E=sG!vZH$zbq=@EorEXIAD+PH_i
z77nZp+E*P25A1*d6NroNOvLhSNCBK;Y_3>LPo7}f)PQ_2SiHxSFd|9x982N#<l at FA
zBE`h}b;ffRKu!dph-1_ablmd+G&>J+z+?3oIFRf#jpu{wu+aW+rinllg368=w{4Tf
z4Iu@>jn|q@$XVDa6or%d36P$4>&o#e%4{TaK0`8|bC-v8u*abAk0ki{9&Us at lJLp$
z4YPf at _YQZ!A(_l>9zklm7y`+NV8PqHuIa(-9J7ZtJ%E6=qj`C`eB^=)%L;8Mb(^``
zwP^gvi{n;T3JMWYMM#t^L6~{H7~^UIUBXkU5Ee?zf(oHux1K;i_IbV;JXHR(IH{J=
z$WnBA1=&H0P>w}-E!9nPgtV7Gx^awgL26r6+2mKXhaxj(*&be5Mh6_#c1k-XBI_J}
z4_M0N8yc;g<z64j?dytikMH(hIku5Q(EGvs{fT9JXfOue$?1y=o<b#if?ef=f+Q4X
zxP9;_s-p at l^cbK77Uhj8jAyiSj#zul0w!@o9%9wvCO1PUK++!4cLljosV~QZH}s9=
zJx99`anTlxJHOljQ at kuScWYH@pInTQGZk?Tw{SP`XGrjtScLlsCp7fJhR~D1Wtxh%
zxyiw>$BX00G84Mi!es|x9;me*L>T8KPFK`)!rV8VnZ~GJG|fkJCIjz-2?Hby-vvZO
z*oXRks6B2x+Yq!+n+w8-{uK(HW?U)5m`IbwN8Ue-PA{gg%uN_um=+%BL&ty*eZm}q
zTsbrxcx%RVyfcU8<V02eoC1>~nQLa#6p<|po;UvH@#TYO{#&?Sc-tE)a|&TCJA<b(
zxEW}%igZ5IKv#EgATt1y6HP{9uaS+`gbrGZXyYBOo~?@oi54_#53iaZ at NEE(Nz at D-
z`1yEy<A>S*z+Fgqg_vA|*|Pp=cT1v)d>9R72R3{AEq&SgN-)Tp25W_qQ at WFpG{g`m
zXGIZ~gfMVO#s at Xu?H~}2!70gtCJ>?vWRD0Lz%{T2Pi#fH+Bf-Hqk-tbZi=MEDjMlJ
z+=PdhO$T_Qy<t+hIz^bkzI$~sxG`@yUV<W(q%ecYz-Yi7c~7Z0eX^aLv|qe1Ror^d
zw3u>)%^8}o1QWoxylw&XroRky+eILoq9(&Y9uc4hKFl;_abQ7}*8m-u1<Jt2<;2Wv
zMS?3lhK&RA%xEyN&nT~9xL;VQOfEl}n}$KN?$A!GV~f-6CR|sbcaN{KV1f8}q%?8F
zslUET$Zm}7+0H3qH~IIPpIJEEOppbu`|UA2EhZ6e*`2+o^n`5(rw1?<NSxR<7qVbM
z5K58~feF_?A>{oAyO5ZeqYX{HMnD(RnEXa|rZf*5k0KNcKw4PKki3bsFYJOof(aQS
z`P(fSthNEIgI#5tC&dLYO_#&k_Vr}^r}1zbV##nD9GQ|a<*0OoU{cs)08M5mm2{);
z$3MYIj3kfxSY^M6A&$c{W at p)jcyAmFQzX-i={fcumL9wV!^KuAtCiPPkqjO01UD3^
zte2fcSA%hE4g|o4J;psR6C55~16#aU at y!$wJ#63^CL%Z<fwPH!!D57K8;~oPjK?2A
zt_`V3qB0+8gADqkU8~4*74{C~UBR#R9818~;$LrW{{!}a<)O4OM at Rd;pam-~*i({i
zhBRi$GBY;R-wjg}>dYM}-AnE at 0s$s!6aAT%+yu(}05TO%Kx|ns>?r^o&ckbZYGeDw
z;0b{#I|vq;UjvBd-e at pq+ada`CoiL`t>I;O55>giDt{LYq{r;#_CMZ4fF|M+DnJy!
zJ6Nmre<iroW#j*r>Ub2D?%vhiYy3ZM|GS_5PgtWltwrKO8qx?<eRquc3%4`4DimaC
z5H7mh*V at n}BzAM5XL-?6=sVz5^uf!IK<U3LG2wV5*NZ-KCq|^*1NUs{<sS+Flo(!q
z4{z3!{a45Kyc&JAhiqA;Qd#b-$VC>MOT0bv1n#ErFmb0;c;26k=Lp5;c2!dX@&S3Z
z)vK96Q>%*0N!=G6j&Qb12Pkq8+(RU&OZ03w!tTT97u+&o_oDU#&LuM>WDr5d?JJ6E
zz0i<ebAgPab)*9X2;kj$ZX&ojF+4 at Y61HdGi6^~A>y)q5cNAWq5<%zw_oq%u>|UbB
zz^=r&ug8Pap1B2u{+HjTN^f~dJ_?MJTiqrEYPpvs!^*UarkOloMWY at Lh%P&38<?4=
zYo4m%YKlV>Br-k_{NT(Eoh%d!7gSk8{G`Ofx0wjdDvd5D{S_gaKkwdm-!uM+YOJ&W
z%e56zf8n_2f|IY0gw^|h1$X_k`+vFI_<a9keFXoClAmh-FQyU50kvk+xPY`CV>gUj
zPs%X)wLFs_4Op at X$o{i(N3FtETtcK$)%d`}!t7B at gC~2I2>}lW at 56TYI5~`tlH)H$
zRmv at CGlUYAmED6W^R>k2p%w&&hUEcz+=0HJ#kUfOnsIHn;5W+<)(FTVZL=_hjR~Aj
zXQG|(o at T&8Z0}zXa^|hX$4%Qwn|>+p{g$&Wz?5V&^vsvH(@RU)#`JRCGm13CDP2)<
zw47rD1zJXP?p_7M#_8Z128BJCXYhAB1C7D%96Gt|t4Gn%>%(Kjv_C}Ju59B-cPLs6
zPO{9?$-9g3RkjJ!y6Mvefc7g}c-%8I1aE9e2q8VBIjp>QX{FSw*`pgp#|lb({o;kB
ztq>|C?(RWlM$L4h)M}x2kmY7LAW?t5mRGSj7U~D}+LFOF)tsVWy|(>Tk+z$z3njY3
zwq&Mmt55XUtKPEqdh`?HU2*$MF3f%pSsPl-u%t?dVR`#ZYmMOIWp#Ljk)Ng1mYWJv
zlJbMqBj4T4O>0Vyw$-!=G6So4G|h`6I)Zb_AZ?%ap&Lqy^*i@>eE25GS64PS&jV}u
zpMYu<$;;N89iXctgRtQ>O)We6g1+pltsfcHkTY~UBV#F}X2<e{ULAN`%7T_~INR at B
z=+tx_FuJfrmfsNuYGYv^#J-aqXXIy5kjP&?9Ts<^Da?xcVP6<1+%a+;nY?E{<_u<#
z^#qvFz76kJzdlX8*gfhUzCP%^{_Yh_REE((@z3mw>~2|6?9SMiQ7{tQtCY2x&EU*w
zHqqW}dNssdo6hu?ZAst;>gN_!)IGqJ%iDV<d&=f`h|-!#1#!9MFql3-j>8e7ZIHH6
z6M^qxEWmGgLu_gof!7lNF~Nn^y{O-Qal}%_T=Zt*?+EhJpP%!K=_$;c7TIQ<pn7Hz
z_<ME!t?MFv<w&aFQMwGxY;hXMAI$<JYI59+?+sd)<JBJ;8|BAh8VOR&UJV~ueWm{v
zZWv)r;6;q;bZW`gc5T55Vw>F*vkdKWTV8Rh;kP%(cp86+X^ftN?doLm=Wl=e5Yu at z
zID_o9gNkemmD4s=(*P?ZZUUgDEsFek8W<(|<?`am1;}7;V>H>InR9RBVllHhu^FDF
zAnFBiO~;uHKQQQc=*4+uSk>anEGAVYkwumk5hxbsayTS_FcFv)mh~N~jdqk|VbVjZ
za2m#jhc;YP-E?kb#)bB?(+VjMm*FOY3ZTkE1(EjDIME41*xNu(d310)?J(zzAA;7C
zE*OF&cxAT$0sZN&c33b3PiVLs$p1b$onL*qqU9VzHcM9$m71_-_B5PD9})XSc7?k&
z{B|=_9h>!E92FA5{LorEo>1ebzxCgAy!@RuG{?nk2>T%0;yu=9FGc-hYBE4^N>=cw
zd?O*C_va?J&ZC5T!_89gY+W}w(79x6Bw*5JTEOCoB?`#NqB=MEmb2j;mBEu{u5}M>
z!J;W;>j7!l!htN4YpReuETqL`V&8`3VxO*F-7J+^;UNw!)WVs3G;=eCqk&u3a<W9&
z8;t=7;mK?dhNlVBaC<ShOs*h9VZ(5#ao6`Y?6(|SE2xPHUa`0>Ci3`MjT>oF=x+(}
zEZ^#GC2M+H8IBs_TNzId+v%WvqE=R1h*i_hopGA>e+x!aY^L9q<MS!vfpca(OgdJl
z$bvBLwjt#%MgmwRC4NJr1#C7Da6N)c`73Y3;*|~x?#EEBUtJ&%t|p!G>ZJV4K(iGE
z3MCEWZyFL>w%-}8%=Mjyb643oG4<SH2u3C<FjD7lAf<B)hJ&XqNzdYQ_*_ho!%;Ey
z8}lc1uqd=b6_ygk4*YiBp9s;>^<4XPjuuw^qtnFHi^XLS&8R&b9w7?+`w=`Va_yu$
zJB>o_wOE7DC4CFvu|hkMKp=8EhUx|xJu?&FiUue_J=3O!0m~4_qIcT07-V2JpD~je
z7h=rX?MkWLZl&2y0LMSj?ctKQf4_T*EOrb)LUT<3HXr;vhR+lHxovg+MH2<qKWi95
zJhV~tfvM)ki!XwDmPoG`@0#Gk620T(Z0t$L>7u-K+;tyI2C5_Rhtzlqbi%ER!)Q2G
z%qdJ%OluHz5l-khiF$2>*k~UmuxQ;dB!+s_+W{M(Ev0D`bfw3wqeK#D_L6 at 4&5Pso
zWO?$c{W8(4nt4R+9Ce>3FVUyTsi{A;%3kyX5-X_DFQi!^3+xy_Y(*}Sr8&G3Qf2BZ
zkw%qtT!1u1mxjY|&i*!@fy*Ok83ztOaz`MTSP%ryHI at S01%Ab$MP0f`Ihd4pu at qV$
zwW&GRK_QOc7?cDNF^dpBbMSf^P7%|E<)@30dU$GI(h at C`Iw}-K#)JtMFDfB9?>@uJ
z*suUv#c*)2Sqo at 5$E1{R+lTw at 4(@OQ`F}_-Np78-*g<3B#IM`>Xj^zVCm65zD~4<)
zI~S~BLGW<p4jp7o8MLMAg_RAdngOK<PD|MpXqFuIsz4gJoiEuw2q)yIBk=%FnHR2M
zY8p$mm1}oM=xekY>gDY*8F2|@0uYE5voX!nywi&R!tJ79BR~l=7{_wqpe)Hd+}wzn
zCOf7a$mU>UTC)@2(}1J(Enyogh(RInNg;KMOp)PC9<pk5zx06)#t&BuWBUmnTakbU
z^%PlZ)(D at aM28jh_61Jj*SrMqKaSM(_($${it^lc=YWdLdP*PYYLw2i^N<$uj&vxQ
z at i8nC!|g6;mj?W2;SuYJDkpNsz-UCcw4htI)&|$F77DaSsj#CjvDyQRTFO6-lWe9j
zoT)5qsiUmF=G<#--!C6XPr?pdVbOLYC>lZtIsY2JRk!wm?v55SW;$Kdo0u{Q;c3Z1
z(vqgI8g{`>jm1kU$d$HWFVKeG#?*o1+KOz=mPv?bv%oEtr4UMC<EE9utI3DFX8sqq
zV9d+1m;`O at lredAbG=F%%ugsP1FJ&Q_ at LmZwlTjqiCnyOdVPW5YlwulrQv#rPkvlm
z!Gh?x(w_a3#ZRH^{*Z#IZ6hAv1e)ng%N}k at 7%4G$TCT)pA3yHJhX6tBiJxNNjwCb~
zFV=TW#~C0~vNZ at X-JFikYj^19c!nHTj2bk!Sk{r7QbJpdn{fs$#bfHicL*V%tarAx
z=dxLTikqIV-86zEsN45?4bP at vFl&-Z*A~u9LNUmHMzXN=pq7&Bv^g9g%Hn#B_O$3a
zt(q|UYr&dm$o;i&ix^A@&o^02*K668UJGUhd|P+k5?gqkmd|moY%qz}g86GHD-LyA
z(Y9zre1_e_T`jID at OJv#Z9Vi3I!j4i`!9cr{tw>c3U3F#q<854{q^Jy%=5V`y$)&-
zpAnXc;rMK=!R@=!>$LsT;A&97nTuJ_?``3AT80D0&+Ag!3sZKjb`c%%8mn|o=JO&g
zzE0~OXscas2mFH;U8hwn==r(;ADFUhwL4{e&b7$mK#Q)^DiV0FiGuGCp)R?G?Up!O
zyXkc?aY#5=c%7D!O8Mu(hqX{~q(#?lb+k6Ev0*K}R at +#4>(1VhDSL-@*JFjA1aqf8
zJ|d9inv{2B%B}-DBEzmH4IQ)KS}k7BKCBBVq9IG!b=tlDFhkbTbxHY+E4^0Rlkpj}
zEo%|;8&g(x%7V at GB|Q5iR3wy<ci7Kxw#s&o10%ywt1CrTz_&-A at aT{^b(9LtT~J|}
zK|r4>E|sBTid(*(BCgNoS*rG4LOGfNnJ at V%-pzhJ=Ct*k>}?-oU}TVy<&d`xZ!kX_
zXQ`iUnIqIyvsNk?puQcB&Wc8_FW+A+e at 73@oY<E3dO0{N+79dxi!mE+3l!n*MVPje
z%sIh6270 at U#Q_(bbuoN)6_-~a at eC+lPGEwm<*$LMv+R<!pcbRaKyQIxDi7bjgl#{|
zF?D#2m=B1Nbju0 at 2I}>tMD}4iZq5qcviss8nr^e4`gVBJ6FjbOiSFPw(2eRKWI*gl
z*TDH{RyeRg6hoc at u;gTKt1rj76_;;=eE!oodrnW`zFzh6?5b5+PLZSQv!AXmi<)Nh
z#lyBR-+jh9NMa0?<E;dS71$`CA)O^zV at 0o*L#+M&O&8B=m{@G=W&)xgg?NDA`e573
z8LTN#Fl07UJPYj^g02 at xzNY7_vd2DFh(w2#Uk1y2^JKvL(Yp34%r&b3u%H!>vx__)
z$aZt~x0^i=v?9K?94T$2!XRL&pks%^ze^Uq_J(!$;cjfQ_$X;RT-n+C5ng}16Lme;
zD)$-M`3P}DhegCrV2daD>k-m{-j|rqaX;m5jQeY;ai77#75cPT!dyPME|rkQ2g<dk
zk6Y^Xon~+8QDUwBgu&MC)Zvm-(OTWjKaTFk&6gY&*XnFBp4ZDoA~I_i(`L~z@|M1g
zP4+Gf_RWND9XUP5ijGptGYip9Vy{Z*DJ-zj*>=nj>Hm!IJP^A>gH2!tvvtCbGMvT^
zbqVq^!_uaFSk=~44h?^v(TC<OHHi7vD1x?nDBb0zkep%1_7U3G*6X9tCZfYM-fF4E
zFmJxZNm+-XTZpmt+DCu4s4DB+|7C0ki5GCs2*9iF|Hh?CHvd~WE|)&%|Na%Xde^V|
zsqX*gXyhItKyr~d=-jY8s6j6D$DJZ~n79)M2o{I%i*qD)(SR7MdMt_{VuLvxEswFG
zal(vyz6-DM at PT(3 at dRn6j^CQJ!q9_xaRT)Xf?H`oUVXV4R$#<j`^YP4`Q|-hdi*sE
z-0?Z62aK+WS?0$;Ndud}AH<SDPlFR8lCPgjU{(I!<pi!xSf&dzXRec!Xqk`IU6f`_
zzX$T<?Un|N-TLwE7PQ6?GU$nNdZJHvt|sSbHdm4{^`#{9ly-10a*oR=xl-(0+k;P~
ziN2F7gn+kmc8&}KQnr*rhPJQI;OUImDIstOgL*X&VGGKp9h2+0S0M=QF<TD?bY%PW
zK=~82-ysk(CLcX`z%rT6vm-a9!VbTA;dM1ay2$sr-sEX!%&uhEnml&%F?Xdhkco at E
z!HEVcbXT93g&NXJ(@Wnvc0yVMw%~3u1D%9;!&4B98Hor|+0r4L&<NoYn}M^id at y?Y
zxXcz3+{n-xe6-+lmjwfqp)W$5riDW&Y+1<(pKI6>F#^M$U)cQIvXU5?DP2Kn>jBJ(
zKnN1Bv5q9on7Kt7ZR}ri0EqLt at tUq3bZ(e$NF1Pzgz14d=nhCnV5A8Bh-lhy!_B)t
zizA>&*GSEbRe^&5i*qCS;#1GNz*~TDxK&{w1yk=Tgh;pL1?m3OyYc}V6;D8;R}{8o
z#aID2DHB;%Aq2;@1>Tbd$-QGg0aWRnS;#IXO)w?iB3^#Qph}t8T$mtq{NQ>Ht|7nb
z(s>@P^Dl5;BybPojm{oi<MFzG`1&Ppu(Fz^R+0*#GlL?ZPx*3DK}XepG6BDo<y-L8
zUH%kdMa3N)w>;@cY+N6+o!YkkJeo~UxM4_JE^9oP at iA*ZAIv+5kWR9O_gzt{c<p3a
zFN?(t4RdI?{R++ChrJDRaKhe(0LGUuuqSQPul<p6`QHqO^V7U9K}+puXnp!&>*2-{
zT-srsPvLK+3%+2-DMIcUF2yJkw$2cP7HfJ*7yhm+B4U31$m1O032#smkVCUzPU6R%
zOs+3w5_o<tS*~3KCF8Y&r|HDoN!p)#P5XZ5lW8=>)=Z!Ol?=#6*jT!en7cK_@$Q`R
z!q6DI%&u<ae*lxqW6G9I7k1$iu*HIf+(SRXin66F5zIyxOm-o`?LdO@%EDLIGlZ$v
zvR+}fDMBQ<ILMgc6GRyUg7mmHSi!gZ$#-&zTUddOh at 8QR1r4Lr_($xKiUq$L8d&Y^
zm(|NTJ7Pojq#Rjvm{2EH<#}Ybw$BRylw}6lky6I|7F(6!4LyK<g;>J4glq{ie1qV~
z`MdT-Y{S8$T;ncGgH_!$`S`nqf0(Ele)W)*S(pmh1GGjfSF&v8KAqU5ZKxs@^>1I-
zrb;S3uC4;mpvj(^;2eymI2RVmh)`zGm;#9pWrZAj5E?|62zZRU5vhnG3=LsO^toH`
zyd=U~D=+nVT0mEt>BrU*8Sr;sJw2U8yI+0IKf1okCn&j&{!g#p++PK_TK`w7Rx0Ix
z$>e`*R6fW53+Cx>_2X0N|B7hjzd!}JT$y43ypz%phbY|G9L*5KUNVk2-Q5;8Aq^R%
zVSm!IU6&E?a7eq9h<Lcnj37bdb2-#8q$}^?A;zwcE$lO>g5dO`zoCA_o)Zt40egz5
z#Bgzuo0bd%!&thDl$Dx$RrZDBrLHKY42Yg!;I>((qC%IR+EaD}ly(=mtj5P)#S}eG
zDy|~-z-f564hniAnBE_BZ;j+&MHv(LR$31QGW!N7vD?*s^fU(9sU#RS7W9cI&R%c0
zCU>11H80Oy=hRcSWNz5DxUX5zXE}-fNLo(&$K}mj?|c?w-ImJr?CySs2)E_KamySX
z4^F?e7e)aFg%R$_g~6>g6sNhAW-w~JdqQa)7YX44lb6-K!a300O}>JoxK}S2Lf3eQ
z2D+gM5?SQ*i at 2JDry&;g86nRBqpvI^W~gcT0Ek4Io*U$C`V1r^tj(CBE;qgUG>@#b
zbPhb`gF*^=+&#^U<Y~14$^%zLkfmxPBb4d2$rGdinWxNz%n7RG at dS^vvs-u&ON-{<
z)mM2~(<%Y19WhM5n4S|<gM286nOP_ciFq7OtXDP%ih0MtAmJMEDh0qCXvZT?uqA{-
z^`q4%`U>P!JD3B+7WbJ%T08(DvC2f#zber}R3MVPuZqi+%=K at J`~9a42mS9$%NYN<
z=Yia|^EW;aJotPfxP!2`j{HwO4$=}>L)0Bw*P^TC|F}_aWaWQJ7ymi`$DJ{K_X_uu
z|210&LyM4iGCUE#W0yei5NHSa!-VugFrTc&0 at Cp*GGDUPoJs+$hxjA!n1_5mMk9F2
z7w_Qy$xIMa_zqvGV5;^H at aLZ;Un*G}qFW#mCUu_f2lrhl5}>UbEGTjd2nZKatZ_8G
zq43S=&0_Qfsw(9AyS@^G3)2!ZT_IFb+B~w^#c}le>&b|5&0|wJh at F%Zm<WO^p?N8e
z03QWD>|#sa9_zSod*8ko59Y_6;$k1hS1$zkW5H9lkh at o_@tHgzDfbcm1_%as%Dl~{
zNXeH#kb%L~=tN@)B8lMeY%m*2oTyAwY54YhBdNwR|Bm&nuDbxjG`<Ne5-Z<BS3f;l
zR>F&cUJL?4ZWz)-R?&-#f_BF9ZwD95n-yRYc~{O6>>ZJ~ie9MIC9HA%L8AVK51}TV
zpb>bzon2mKS}KZMf?S>RG-Ma1B1q(uVfHw~*KE at 6QuA>sW(5DZ{-jhZir|kpHh;QC
zYEby6%eq_TOp`x}8_l6)I-QHfQ&ybt7$DB1+jB`RT{=A}r3q3`rtjV{kZkHy=%w8&
zDu)9vj@*BhvyM&VcbI(hCZRiyI4z`7aGJnxNlV+~$pVpPPr?R7a79z->K0%iRT&&8
z=hGNAA^!s+0wPMeiCL;k_<>vMAQ$qTE^aa}M#oGL95NuTd at wxFD{?6IP$olCsK1yp
zv9Ng#eZ=4r_5slw;P0k^_k^}_3F*c>d&<J80}$w!RzkOfxz<{vl599MPPmWEjOiv5
z8OLX5|DJ>LQItM&Kww{y1|L57i`ZIuQZnZxdCoxjmn3$N;0TJ=^4 at apO^sIw3v4eA
z1Yx3B5x3SpzQ6gMv-{dgt{aVCY;1|f&6H53&b-J@#M1!xmpnzV4+h3})Ucwoq+!SH
ze`JOVf}Z41_trwGL!+J4K5=lX3ZLD(>JG~*>aRqWYspgDnho6<ip(fHv>TRTi9y!X
ziDcbYKRxT0U0A?s1lELSiRX5HF|$4Uf$<7%12A*vmvy?3-E0N$8_Sh9+AnO3VKbaJ
zS6FHAhY=>?_$0e_Q?q=MR}4qnwY<p=g at 5lfoD6tMf-8n2{->XQG}7#^9!v<F9ScUo
ziOtGls>5X}HfArgo60j2k{)iX7hp5cD<d8{5{g+*BzXNHEieRKNWy0O77dn at q`9yq
z`I#rY-qO5A+(Vl<2S|)TI5I)xfj@*vZzmi3QqdeenrwEfwUL=rdn-eB=Eh`tAbqU@
zgj`1SWoD1I=+uqR^N6tL8xgsA9%7tQs{LizgkGAw1&##8k`jnTUkSf8M=6bW&CrUE
za122vULI=fF+>DM8U}dUQb|F|bMth_vVx~rjpeoY_<fO1V|I_QOew8#0?j$*fe|th
zq*3D4ljfF4_h~%|_WW;jtqHcdw190`%@eYVIqEWCF`bESy^f<;W)F~@sY0gC$O|Wq
z<@hDAP=M;AtI^pQH^S`!k6v}~m&P*Cz?R=Kx(eLy;4wEr0{9YzP~e%@R^g;Ld?<J&
z0Pw7FYaw^Wav&R7+GJ1yIK*3e*wMI$uMd(}>hE=A{JIRcPES6dN<n6t$qHlXAV<`Y
z^Dk#<M{BTEIZ;KZ8JZgl0Cs*0fjc&3$~=s|3SEY5x}wG9l{Wy5<H%!Gw!R%ar-UCs
zikSsE0T?_15D9ktXQL_*O4U;OFG;{V6m2~lPfk#6?`{0J_2X}!jd5{l6L26 at Ua;BN
zCN}3&<T^(#l at SC16f6BmQAC%mEyKThM<@Jd at e*Xb3g?fU)HXv%t?A8nnu95W8V`M%
ztIV}#TUCM(ho9SMA+w6GFMhf8DA%B-J+WiMspjx|B-?s at n3%oYb}VZz94*B}TXAh-
zvF-g at qOt7|E}P~kKe;)C+iLs^@1eP+``a<^*Ysu~Iy!D2zgamKIh^}VQC_jJZ7GC#
zM{h%+vaWx?<Yi{WZ$*Z}^~X=jM05?R>cSiCiiYfb21K6XX+=%rdlQshI`UxFFbiCZ
zTgNw7IQIBATiBSqQlnYs2<0Qdez%CQtwnn{%H*0!j~cd~{cB`D`_um`Fx#UYJn_=K
za`{%d6anI>6)-YRzC5tLw6+Ue#e9a-73f6Sn;VTgbF8Ft4q<g72$r~I+_ at 2^yDn=N
zeMm|Ec{;Z{lT+)VKi!Y<%nWY at rLBO~$WL!=D{r^#ffFENJ2s6M&%c#HBqp}#4RlXh
zI*G0~yOl^MMzWTUB}1^jT{56_r?E)PKM~%WJ&(VFKLJA5yq*o=dE#Us+lc*Z)PV+4
zkW!!uEMh4I*p*!q2frZ`J{N43X`I?{gUD|51gen1WU7VJ6XL_N8MmdTh0}u8-|+Iv
zVBNdbo9WAonY%t{;_ at u~z^WR#^$3RCTGZEt{NfAmjI>O+CaxeDiA-+}1r$ZyVM(};
zqs;W&U<Z-aI78Clf=ihS=P`$!^!RQI>V==I(A~Bc1%HZf1viyGQ1le`9T|jpE+JGo
zVrJ5ka;ECCXlEx)2XK$!AyB-k-GVWCvkedi7Z>)Zgq3bnMJVDQN5G)ktfmW`2O!{_
z;t)VPmI%^op<Z%Iqy!3nho;0H;m&y`I<)@wcm&DEijT&nOQ*v6ammg16XOElPlKVH
zZOy(QB7l<7AVOWJzA0^gL>loKvrb$R{Splx3nO(hNT<p)cZvk?l+X8p6WpLciis_;
zyG66{{KJi}BM_2xeHp`_Lzihz#tY9kxav~RFkz+ at 4T~NPFcUCecpo`Ud%vmQ_CGLC
zET%)a9>ay$tPm^}E*GzxRAVYtaoF~oSd+p;5AaA84v$RAKqLZ`$KK at Goh0Z21gDe1
z)A(?-7>r at LB#;AV)Px=5atvjvnW&)puYhn9riDksxP2I<b;IpRZMW?4fYc<RG_*UI
zN1J at 2hOI0G-go==T1*#?a(4fsiPfyYoB|?dYGJoBeRT?tB?erVdRTu06Uw2jem1i-
z9Um`Rw4N#1SNEJ<AdKntm1uIz7L*Rh=e|^H;CE&#O7&zt>lwemT^bk<u01DAV?T?w
zc6Kkur!zR?jpn;(i5@$1>wp1$$?rau$NM_|AD(K<DDAKtGE at vSB|89<zEi6_4{q`Q
zC{^n9jQ at 8nu6_3ZUWL+6_U?ZEA7aA`%*N}`2yDr*vn5v^mrHo?q*8toSN=0PyE%oB
zwYZEnWq}!$wW>{>aJ;G$xx=Q?x$wR%m$D0H+vB4x3hUl$ZV$Lk>1P;9Bw0{VK`BfY
zIX<7j>sj)LqB-1v#=}6HozcN;*-FBer0Fe}DEDYtVPqz_7-kA9Y;MocE%c#o<bIPy
z!wfL-cN!#8{I<Kt$)O at Y6gV7K{DJxv)*I|eIIi}=!HfNFyR-jd|M>f&Sqv%S9}y2J
z8q+ENJB`C;cmAYA`{w1V;)N+H&=XDJRWy~KbV1t0VQVZ$FR561H`}a2fhi<O<}3S~
zgCBIc*7U4eYX5{Jc5-mI|Ly*Z<m=?0f!JgVu#Eo?$@ff;hjn!F=BWL3A+do~ygE8Q
zZ12B1{zqI<|5&Ubn4QDdZ;tn0EulK|@*ieOf{{6vStM>asVdKB3W|SHR{m*uVZo69
ziFt{d9gDWBt$(aF=xt#NxRbbx2KQ;{@6(G(b_kY-7w=)8dHft^|I5KL8O}R at Io_4h
zNk9YMp`=*c3)q5A&p)q(!7wDnB=?WS6m-%aKr#5~bZ4JT3G-jr&^r1*L@!iluXU7t
z1!GyQ|0`8$jYdZQ7srk2zkI&`Re;M+{pf!Bzv%aapK+^uHojU!LK<Rcx}Hd8KIW;`
zI|>MV^&TdWmt*+PT}1!qe~#Y|{_p>ao?goDXJ`01+kuhlD^Vw2A<`I4JSj!mW&%ZH
zju`K*RgC)T)dw?{W}u%>VevvHkV$k3%b9(ONQSs$CPO{ap)&0f3=r~oFd at _<Wb{H-
zs>$#I=EH3hl#I at r>M_V~Fm*nP9ug<fF#?lCE^{)z!{&x-WzGW^m)oMBQp}o|W*R)=
zbovYJNo;0=QKNP>6x?q61+;7%lHwb-0*89EJm<DXON}nx-_MU^w3+K1ERcE{hBu3N
zjjpIpF8)$j4Rv53xVjjeW$%a>e8W3yU|J at O`k~>>yaz^9vC7dtvv)=4whR*tD-VY$
z%rZ>Rn;9=7Hy~Ou#m;M51~pEm44)w_XHzUoN$pwebTW2Zm<fF5=<Et9(#L0bnz>$*
zhK6!uW9SW7f->N$mxX_&B*nACi?dJ>IqoSuG;+9iFFo_0duH6lG8EumdsPB6thKp*
zd=KYW&?zJ8Md#D$kn`f%T0J|fYZG1i1hDn53^)J75B%fGn0}3Y(oDnlb_P=q5fU*Z
z&$I!?2eWuaYk#FX1^i*{Rn#rkb2IXA%dI-+46i8Ric5(Os~@Wy at kOyJVE{ER20jZo
z<y}w`&j<ksr(C|LH__8C-gbNK<MvznHAFxDC=5+-X6$)$wb6qXwOe=venjR;#3+=T
zsRnSvP;D1NqIMkvmc=Zybj6`;^+JPB)Qr42TwEBZ!ZDOSvde&l&3l7`Jhkh4$5Tu{
zmZ(jO0f1Z2p6==h#nWx;=`Ke9TcAK6W+ZpR6y%SN-E{FNYsK+P`rkowa^AyVd<%tr
zznuM!IFPP9maPbk_Fd86jUOf()Msq{Fj=eg%#@ztP6jFVzlR{2?zWH1J8`^Id5p*=
zOdIOipJC7b8BX=M>oc9*M+Ce@{;Sm+wXFQtsMbHrf1g^`D{Aka@*m<PMRKK?Gy$f$
z7|q^cyBCj_l%&8m$Y8qDD`av)xEo%WFGq({gnEg7KYc%$!z1kJY<hY+Sd at 7^9-)oq
z)9cyU2)hhoLQh5u;iT^ui>oKQyB|M(+?mc!$MeVN4XzQ_mn^aSyNkW6(e&zKv}0N_
zy at tY;@KG|hm$<Api$eGrAqr`f3F}kS*$|T51*87%T(Sbi)Lpj-cE`9T^~(;n;;+=Z
zYQ>N-l;}vJD at 7tVx<;b;4X##R&XFnxB3&EaY6OZ`uk`w~xNsrI_Kcg+WIDM)NU=HY
z0I at -qLg0llZs|fEnZW}{MZcoaJ<8($4I&0{GI}PyR&<O|E|V!j``n0>N>DU#5Uz6*
zHKXAUV^9-LzT at p$5ekrod``bE0Eo=Cv*`Kp at xkMx*X;u-iOtv{{UB){Mtl>!oDQ#D
zd<O*chRfUqH(fX^>fu4g=gPCCmxB+G3=t<jx|v=_?*~6qMu)r71&}ctok0MP4xS(A
zhAI^ivyEV}?(CY;D8}<A(FU>*lTx+Em+;RzAt~U()#9YL|1uHq>@bswcnFhTLQ0t;
za53)(fq?l^B=mE5>hdYWRR|3kU#o9kd~-cwmh!h-W~smd9?}s5$HDvQH`Y(|n-^{+
zu`H0LQCuao91F5+`vQj)y7vu;Rb2Q7=!_wI1^@q#(-}g7zw^<<pim$rh#fYTMtIA=
zh^6BoRj#zSMjMYyRbKTkwVu at CC)IeFdj=Ai;`$V(pSTdzJEx^bh+GG+Pk;*_#PQ|z
zWn at ora#s<!n$2Z~_O~u6lIsLx5Yo&?NMASyjW1*xPRS2&XNW at R)fCKz2<eL`|51D$
zkwrkL0hmFDnMt`AoTI!34{$S6fN@;t;><jZj2r2SP=fw`D3M%E^eB-+J#V|hnYI0-
z0r at hViV1oDjMLj1+zJAv;U}a9p;ftBWQgXj%*<4CCoUsAMrp%5PT3x9>8$wZZ4BTa
zNHClVk*E?`=RTF=C|MnodS13O6DQ6(sE|2k+1{}(w>Lq?R^&8yTRFq#o)!g0EH_3!
z6k+a`iSd0LS=6`=I_D#Q$(&#Vn$j^pkP?H7^@YVf4`mMAKxiW)r?>I}xueiTyTT#r
z=^%PP8@=1x*xBt(&#oDFKo}1<qKkihH~5p^=LXzkv57ABHimxLjjwndd%8RL%D*14
z%%$}VY!+MuS0p2$bLF2CZk66=b3XeSh-N7syD&2jc*#WK73DFl`+juxL7ihAD+6ak
zqT%x}wKK|+G_+ at vZA=dIZaY+_56Tx$e8&s}=+FxEP)HUp+vUYg at Ny+h2$uyfMsl64
zAOeCN5C{JFE5MFm8bizmu9hM!vbxiINHAR8G>2nwVF}C0K~<@5EPKk_*}!=ArL%W8
zxcWK6oq?apER32%B at M(!g6MK_<Gb0jDFt|d0Nayc7c3JfM at YMK1n}72N at W;O2<P$J
z<nU<!^(#OVpbY)<l*`Qr*J#hi07KLS6bnufgvQ7<)(QQZNi%{59M+D7KzpZ`^X)CU
ze``9{@JaAlSOEe80%CLHu$}P60h*8L0xMuqM1eh5%Q7=;-x(N%cW66?<)F-wYQu!@
zq?2SO$mt-)?-XOe)YoH9j^U%!N)cj6ZBQ3Ve};FG5#*H^8=M87-#y&$^cbJU1vs7c
z<>x;rBtE{wk?=M at -=gycpRGRs)ob-?DRcfSRZ5 at zf0v>2lRm%a`Hy_LJHA2yi4#j5
zPoCI4;u423ZcZw~Xff;@_KY~1%x*-CmXicU0^t!N?{o~Q;r7lsZi+A7Us{d!=5t87
zh|LCr!f-_8#I82HYx^g4KKeO|cgpx*g<@=Fw-oP|Dp6c{QpSH}=+-9@;%ADFG5ZY<
zrf^6`;g at 5aHoDWZ_c+~*Xsh at zdIkphZZVy}h;e~~;LhaFJeIP7qY=eYXv?fJkVk;1
z`}*Mf{a0VhNd~Io5mbs8K4e&R6^^!Fe0}iZ;ZC$KB0Jj|j)x)y^Ed;Jp`tF^f*6f1
zyaVvN`8ynf&v(yoroI at xTkKw(UtNd*U=j7qSY6g1NhSiAkI=P^E73FXc_;v)NaiWR
zByeC5CDp1U)3$RaB!d^b5{>~Odl6P4qcosG74*}3f`ARW^-GH<8FIs&B1S8jYk%e~
z<f~Ox{$lv at Z=!>7)P at e>hLCX2Kv3jplK~DgF5-Mw`lVd0^y}?r^AWx`Ywb#@*{kq-
zT!~xFb~)kqQl(L9RI1fbaaj7LT`jdL&2pJ#%B at zv68CVY2<4k)c%QeV&7 at mR>fL55
zTen&(H_LHSXZcFASBfi*2ETWbTD4y9_T_msX_dP5Znkc>)b5sB9Vy>!HM+G at uP5dE
z&1$dKsYyGvYNOPO8`-+8a$N7#dM%b|wi>N|C+=7=U>8&$b*8^yTk~- at kC!2 at 2P~C3
zZ5c$X+3R;|?JgTG_xrs at x!2)$46ThfIY2tiByRT;0leNW*BePo+Uc|#-Bzh8gXqWQ
zZlmAIA+KC*$E{XX5msr%z?Xb4HA`{7oXCVUYt5wJjq6zi)GPH?xzv-%Y2Ypjrbm#`
zuGX6Uq%D)*ueK_cUL(oYE%jQc(3Ht(l$%MXUNh}9JKdgs$E?<>?Ic&X(ZS<tEaUB#
zYwcP~C#u!0lzO#_z))`Y%XN at Kw%=~87k6-i7u+`MrDm-!gw{oajaDo$beg?R1w+o(
zZ6=LYuiKIG^-`rBH%mg)^=>OEB~6*5PAN{B?Me>j9ud^&#_YG#tHjk#S at 7Iw0?>Z1
z&F8gRy;SSgOWA&tdaYKj^#$g3yH;y=T2(0z1h$%WnWK6oX~xxRu5PW?ZC6@#X}{cV
zcR*xH8`W;N)~!f8aa;w^-5ktqpubsf>l}3(<)qaT7&?_CK@}MbXrSNemfKmF%bj+s
zTdT<&HL7v568ELwZh~GD&=SVm>NFdzN}TVv->Y}p73r(qEmyn!nyiIJyHc)In$mB%
z*{U_`Sm=R33I@<=_K6j?U++{qotDDit#<mrkjzoNPKJT8Wa`%AUbEEdN?-j>Ic~RF
z(pR<F=(ag8oTFaSZI&wKY~2J5qXurkGD)jhYt%YYx7RJ#%axMM5s5tRfI(*ZEmxW?
zP9N*`I9Zq)elPXwy?S5gy;<p3t57`U>L#U5wc3>S+tp?jyR*z`z13~@OI4ZoRucEI
zL~?j8$K84zRoGX*4yMs<N%?xC)NOU^0#6&n+C)p)e(UX8+%EN`Zm)^pm;Jinyj3st
z+gQ+Sv)!r1l?wPkX1w(z>4OXf&tTT=N+%JRG3T9rsU~=CB$xp*{!HC=+>e1p!E*(3
zTS8!D_60@{K7e(H?@jDPSdY27An~MGkA*)}YxO=jw)ETRHLGoqCF_EIfT>OnS4pYf
zZ`736HEUg at UT#Qv1o&@Pt1Ve0wK|w&8$3J%b2aHz at K|tFsaN`qMoD0fL6W_GL!MW$
z3xO^5vUMwsUI`n3z}YL6+Htumxb1aHV6nQvqWid8YIU-8OO0BkQSRynRRS at 08bbf&
zTCWODChcI}n{Y+Wt)ryUPihz&anh+bTGehv>b4s7E=W%BU#fOXC9KqJzg?`HYG3&b
z_Vs?f)D`$^So^J{E8~qp=H+TVPa92C?CYAXV7sqXl(&PBTAgwtFyK)+>DF`nx!&t{
zYjG at d(dtx6ty)=VtlI@^tU>6&SlWHeZm*PEN1Y_80Kbaoq*AH2`!dEl=(*f139pV@
z<pdlh2XnX7?X<Dv*?zUwZ8oYUfuUC}b-=a-|D9H^((hm&&(KD#)@XGNKI1lam2ydN
z-mACc5+oLBvxL37+{nR<Y3XBM5SoYZ(Qj9jcQuoCEot=)om9%@GQMZ}t#lhTh%W*s
z*lk?z#KLpReat#ooZzZg!p76i!CV2IVqgMizX$HsFubu+i5nfI&q`7%_4?pTnSNWK
zfm)*@^Vn_I`^|1!)_dG;HfnVh5_^3t>Q)|CJ+PT}Q}>Z_6C9$iYZkn at Q7J2~n%!z2
zIL*yby;Z}Gt9y5+176Y8F at iM$Z_2l^b(CUowJgjrSX!m0dkV&j&8#E%0gZG!SoFkI
zxz~$(m0Av0t#+-FV70Lf2pgM3UGUt4%u{W3q%O9m4&=vNze(Kd^~)+7w5#1t19ZuD
z>SfG!r7HXxEUntb8qUI;^vk7gTkBS^PhzR+{!)T;m?+JZJAJGc at WAXG)q0&?yDIeG
zhTPnO{LX%pcDn}|NZP4)T9sZckE>p(nE(?qr$A4mTubD8GpTej143_Tqt>eC<=AE)
z+z4Z1Uwve^FL&y)9-H`dnz8VW7Rjm<=LGp`zul`PN=tQYSltTBpq*aa?e}Bd$2*mF
z6TB(MW6O}h%9vJ`??94^8+w39+KpPdr?_f at J7a~#SzIN+LAR^x9kkGg5G?J)&33n6
z>B;)-Ce2oYQ%$yRr`m2-`--1F4glb*Die0QRgjp at R~eJo#33UyN7w}W5cQ>f2rZB;
zOF~yI at PG!yOOB-sVvehM87Zl^!J3o~8xW at Z?WV%n0Fwj*5d4#2)o^&q^qW9B$F3{5
zZ9ougwiM^RIs`(<3ar~s;-mrU&enxlyH-ldLRZ*7<4y%K3E?c)o28QS1n`DtQUd?a
z^ozZsisOdTMhTl;3vwgsLT1LPMdg87tJiO11J2fMVAiXUu~;6*4y?$A&>>*J8LusL
zRVpX74kXrW-DU;Hh>DRh$}M1|E$zfHHkFpjJk<n8TAUxUbvu<Rj&5DylZ{SX#jYsd
zW5`9NQcdX@(3D%?y_xa$u<wA437nlS7)4!WB&>;2yQ=Usap=Wflj9quCJvG~K?;6=
z=A@;2V!zy~W8V}UmLa_L3i|ETA<@^$LVHQ0(}LhAv;i at +3Xlco-C7f9$J)%mjJ>*4
zHZm||=YEsx1vn=>V1a at +u&P?AQEwaVy=WBX<z=U0Fo|}flqmPCb$}_|#e1Dbt%Ti}
zt#_-~mmy<kp=tN(NxQBbzuIayAZZEZwZJm#CFS5aruI5qMVXN#-8NW-;dHH5J8tx4
zCOGO^Svh{U+=*K_2xaTyU{NoX+k$;US%rduaJEae7Pz)>!-OZIf>UCpU#qsTq-5qg
zkO_ObO6%B~lB#kOAQp6i?-`ieajy(fLO2K*e6s=qVmsAd86v!@NBUTSwH{8PnYz_(
z4;(?cKoi=I1V~}sI&?A#jspA+{+Hljl9P-}SOxWtQfejXw4o}H at m8Qui6MANJDob_
zG0#2g%|^dcYf2eN8ek3zLkB`pt)d(aCtldvD>(@j?6T3UDwl8cdr2FT1^dG8(yLYz
z`Ce<p^?n(1of&Tjr}thPZK6C+9HnkaXoEXTjAN6I7d)wgdC$~sCnX$6RWhz%|8L+Z
z&+_G36K5IKT=XE0m%$FRb$i%};!0oegEM6d+8x1dt6C|8Q49Bkv_^$fZjLG#U{cdv
zq0;C=F6hY^yEw2k>UxsLfvD2!wR5-v=c(4?s?K8{axTtCgc%bGGS^cRmS`;oVP;`Y
zAmDX-x_WU^<0Q#is6Z_4baaJ-nv)KsziizqRB%n`QrK4&r`b-cB;V_O98`NH8840p
z?Gi+wY~6B~dp at Kh;<nm?@<gR5IKttmq^Bkba(yh9T-{!R1>aDv2hgF4jHMlb0s>V@
zqSwU+4HZ|m-&!p$H?Y at Bze&B*z>$mJc^c~VbRB`WVaYUec;@_9LG>&T&fM&QbMQMj
zc)!(FX)mGZ(`)7=n55fiC*6vy{a&YuGp<V5bsS`{^~v0Iu?u!9ICW=eGQj~bM$hc4
z0<Brk;JMdB+R%>DIrJz{%H*|paT!7a%CT;_U9WYkHR0N1U9d?BZSxop{*$BU27tr_
z2rb1Wh#g5ycuq5JcN-1mS2YNkP%-8tV`MbNF49*i2TFi$LwBZ17v&*h6P{WN`bhwi
z9WRb#{iLoM&sL)kAy#qK0{`js_0$(9ajk-FGh4S=Pb$?~L-{boTkMnq1C)VSV0!w3
z_Bz4AC%31NrXT>zx~uZQh at -0DtyKqG?Z~=rwNRo5i7+!q&>BHnGC0AW(`}XoS2$C4
z!77DjT3zVpD$v$t>OvU<$q6TI;G|Ve%8*Q at e7gog7o3vMW55n+HMc86xP?#(o`5nH
zsJO}<Xc<_(Rl&Zgl55=R;(VFcJl4wP3K+Na)o(yW4e^6 at 0Se?|;FjOpkhS{-duXKt
zQfkQ<+x14L+iVJ)9c-r1YN%uoHzA%wTa+CylHFphsq{lF05$>k1w|+{cTN4?gdVgB
z`pnc#k}l4_<^+xtM+;&J>z1)IHNZ6az1HDD1N%;<ZVbt%1MQ%cZ$VCp4V_?r1b^0k
zW2jpoz~$;f@@`|-WnF0c!2MMVUxG5B4~dx1+iiq#s^q0=aBv9Q%Im6K?3C2>p?t5_
z!fCA}@I%MY?m_RG?HA+iVgnYMte5KLa#!cNg(xpj{z_e-q0+48*FqiKIZjmD61O at y
zS*f(zhAIlew!i?Kw>uqZ<ubUcmg=<f2!E(R0}N%W%rC4xNz&>GuDTE!AiCuEB(#y$
z62vEt5$FDX8`>#;Z`Jyc6JagDcZhU7%vX*!`q*ZhMn*zW5Q?7G;yCHGDm9^*7<$dP
zjJ+}gb18we(NuY?+eqp$<tX-B??Dr%dszeK4k)j4Jg3&^gSjgm#+@?u2xzZZx6`b2
zDJS4N*d7ilnD<P-T^JNfZPi{u-cKOf$ez;d_gYmb0%W|s4i-{=Ex`B!mZoc=g0p at f
zdOw!$Ls&|nx#9ODX at C#pwH{FPk+}<Qq58zelL*Y!G7=W`%qbCkiD%C&%+*?wBxb$0
zp}%Zn?`K~<Xl|=m0Rlt2+o?jH$ky#PaE|={*?ZTuxQ=V at H(#TxXtUV?JL1qsKuc20
z(bj%tNdY;2S7g6D4YZ_=fF?9ZR=jdS`!@EK?caZlsyS;Ox at lzDQPy%li9DIJj-zUv
zM~y<4w6Wn7++qXix!3LNwYOYbLv+KIf{a&!)edS6o51$KI$Nx>vu(6%x6|1|@v$+q
zDbz!mEZ5!M>%q<TtlutfoL0|eo;`>U0=MDjc5{0TakNU?nG-zH;DhyiYpt_k?R1bb
z*EbypyEweITF{@;m{GvDFkM^wn+SP$Ae_c_dT0r2w!Vl_tyQdI<+^OD79+KJt>QAl
zKxxlSXw_cFWwTZrtMMvpUFx at ueRmI0Q?SKI&_?Taeu{NqciVX at 9+XzQ#`3tfy|dfK
z5Tm-=m_Ip8VB<$@>F%|hhHUR5l(wpL14HH7`l`$AkV8~DU$0%fW_SYvoka42td+;S
zxzR&7LrYh`T_kS?sAmi*9hkS#F_{CfUR7kI4K~4Aa3$ls>bCKCsP5j*4q~C}3)pX<
zndl%TSfMjwwhS(544dmnwW`ax3jA*_Tkc{i>qti{)x}lD>tHbfS#UEOk3bY#kMa+G
z3520mr7lv)E~=C5VT{|WZE#Zk!am#BZ;d`9 at 1c<FtrfK5_9U%%*GzB0-_k+FT6Lf8
z9>QU(=hDdrWT>@)R#2J=R+?@rl*eq_+Ua=Rt?j)|4+FbK#sG06(SE7!4qF2?#da7B
zdX*YB6O2`;TyDG46(c>o(dD{LO*YtfH}Gd*k2lIos=FpbuvOgJ!_2o{g+2rfImfBS
zMsEu>+Bw!5BiPyT747xlS$p`pOJl~giZ15b;3{Z<pk=#rZ4ayQj at v0Q6(Vn=^_A*k
zEs at RGC<1tiYc62dW(y6?H35YB&DBjb_EKGl1SsMX9-1twJdzo(g|)-2-7dR}ZG}Bk
zk&JumsOV4*TMK-=J&c}u#!9wJz=BhgHQdiTRo^)DRSd%F;sRU4Vrv++g~1!*V=!Oa
z1a3Vfxzd<7H at 9WEv+_HT7SRy(3l+en?Hn4ek6#YTUaHG(0PDbZ?H}Sd*0HAP8Mn&D
z&YDXhQ2rL?(aL<AJE%vSz7IQFy&VKR8)pkDjXBCW+$IgJp=p=;ZEyAn5b^y35!gcC
zvAN^dWGdb!0uiLQ3TKcJcTmUoJPO4YJ!s7A&DAbmSUqF8!qbeezSM8G+m&n6_CJ;r
z5d^D?RE+T8xPY4pw?n5gUj!;#*DkSbf{*wJjG7=ng0n%Yz-f!nP~lRz5jPP+3_fkb
zWbpqOoV&YwY{`K8t6+YUbu5i}4~NXIBxdHtj)Zl%bSpi+NuYqeS1`>sQbMUNmQP0N
zz8!fSdOIGh)4{fic4*QMg6kf8yVCC}fhRcr49=bAY6lC8mG7(~Q*Zcw#<hxKRt>Vj
z<Bze$B`2g|kl8f{2<J8`ueXE3*d{)*Jmwb0<h6CTjL0O1A<OVcI;(;-G+#8AHg4O>
z8o@<cTaZ(ONecm~<s5DkO$Uj`_9Pq%16S2{3x>2eg5RUvZtr5Kbeg%<Lh5zA-o?kf
zwE+xEa0YK$P+x<Uwi0nNw!S;NYdCZqmofdYbX7 at __@EZTis2vv2~OMK!|dQh4sjx&
zH`c4FKOf8g2H0lsTt{^$G{-qK=!?(G_cn7`->JrHm_a)Dqc)iAUZCgTCJr6P{k;z6
z;GL=!ZxcCvC#=gR>x{?Ca6#T`lpUu<Xlod9E7k|xep^^;oHp)oKk|04bgZF`!<4jk
zJKH;i0#s=`@lYG9L9)buvnns3%5M=rw7TaK6?7N-Fp^(sje7LEvFCoOZ4Ah3I~z7m
zv>3ciE-A{kjv!aTBQULv=4o>ze=mBpTbF1N6FF8e#(*_%3*&XA-}V|BJ5)+#*!&O<
zms&t+)LExp7}j>73Kdu>&I6ODts~gGi50-$!;a}<f3WdGB{3vHL(212)IrN(%dTpH
zkJipAKI*M4=Y#TL_S#j69G^BZM{W_L=}oCw8b6X#m&G<XV9#ixzEmW(4jKf0F5CZ#
zd}y}aI*fH|8$X8AZIn~kU4{SlaLyvjc^Swp{&|BfSO=qW`1d+cGU6P{^TqW{jF0>C
zAysSJ!7?tPcMTy$<L_ZZ?XBV?Ex~FBl at gL;^cm8!j%mvFCmz@?mSf}HJ8K}CU|y<A
zy%v^qTVE{EV2;aLTLk0bFff?6*{hg=EArLa8vcbf;#L^j)(+HdH&`u^vk*QEhFd7G
zEtKAJzgX=QG-dF?-weLH`~XMk?83^`=K9(?_5tW&Y0O<XG}PVqq)ff&5jF;_$pj}D
zE$T4a9a$4fb+LEK`C_yYJA_c*>SC$D%Itd^G{S;I9Ac?1k)6BUjdhzZVHOzl0xu(Y
zu#1GKF<?+>?Xbk<x>%vNB<k2Ww-61wE(hW+g-SY)Tf?r85uma+w$?B=2A>!PH{t=Y
zPHI2&TCjV!AfPKKw55XkxV}(M1OMHCP!M#dy6On&)nL^G at v#<FwFrz|Z5-<=&*;0j
z=WV@^0`YJ-KW(8dqlHx9jAc at W6k8(<O&eG(4Q|j|SiSpHJ1h|fjtZQydN*NZ1}iLq
zJ>t*|e>brVV_vfLTE!~9vs#srFwCQ5g*ZoiRu~|BU4%L4eFisRj!0RN+u8qYX}84T
zUMJSi{p5(StKD_i9*Oqc#>iY5GnSy<#_o>c3z{?GFfLPJ4rX_I?BsT98`@IUkBALH
z7k2rIZL*CxYOsQA&{tSrc3yJ_A8ct)_HZTb67Xbex&_&2I-NnRB&x@)u0-UvaNbm8
z6<MVTmT>ytLgT?#qIR$-!6iIS4FzNuYg%PL?-Ce8%!}daD&IFl;4*}02QA;$y at NGj
zb&vHbjk!sb*DfXp^|jUP0Xe5{fW8|oN7!E_<5l|Y?d^22q8XgK2yZyuY(KP-Q302=
zxdU_G#$s3QcL%|bI3g>L85-M&du7n#k>?$+(KXN}cUKEqac7cNj5LmG*SQq2R!H_9
z`i+Lx!iwRe+}tLjqbluniR#6zWFsb$1l`ANS2#{F^tsO#7Y2U#YGmLJz*)!OX%G~<
zXuEBUjY;r{+cJ at iiGd^ft^|F=Q)JKJktbLqMr%VBcZnvq at t6{{TaD6D`1EFos9|JS
zcb#HxQ(+D9T;svshGm~fr&7OYq>_PszNni>mp1+#$OD|#o^f!&-|+pG>Y`f!29HQb
z)7iu<VjOOB8$C&pNZLtwQZRB>b{pi6FddJ$Mg{?NA>y=6{Oq<zn{PmbF+5hV8ZOLS
zLgW<$7Foq82!W`(xO0svZEVB8q#>8ajD;4fMDU*w577(JO(=Z`VLpChCOU{D)%mWY
zhvG)iyf)XQ^Ev0}$Vd!b(t9vS!D|)DOZ?Lw7BT1O1QW>tq4I5f%*e*pCJY4&0#Z(S
z%&WUF2H#7F9mpU~g>imvD1yh at Q7ATHujRT#YOjKv4ins6V4G7ziKmFGs=G>j6|Uoo
zG=MFfvj?u(LWFnl-T2->wryi at R$Y9tL={vu5aNts`T_5VUE4xvQ28#w7#MGDPon&;
zqjguP$u3$eUPI#$FdUTPAXzeZVySElvhWjtQ^6zDlJ<6I-O9A^9d^-j)bHLpcEO(8
z`-$$y@?IS?1|gV at OAIg##o!w!#uI@@(Bn;T^%1L7_1WT;>taQ6sRbDd54XWwhXZ=(
z<_2dpQ=ndv6bXahLdmx>2){^gE_J~y)|z;NRd;g(qxD)<x+Qc9Z at R-4l8wtZL~V7^
zadBv>ZVOEu13_h95fn@?qjOfN{a6KjoT$*)Q*DhPEI4F|$SUngF$H{}&c)$rSb7ZK
zp|S9Yp6xNL7&Kp%P&-JaO+pMbwl;pUoo%P`Z9<VjBkOlVRz*eKm- at whxrxwkW%k(f
z7*C9L;i_+L?|PIV687E}?x1qr&2`jAEaU2T8#NyLtL<U7%P!KZ;R1pQ!N%(qsSCwo
zH^vU^?6A5mm#TY2_~UD}{kDpq5K*E+H?Sr_8{MDW!`_MI!pbvOEbopZ&21_5n-wV&
zjxT4Wl_y$keI3)QjUSf at IB8Ns52;|cU0oyMKOk5>-!^n*PgYUE9P1pU(e^5GjY57Z
zQWs}D5RCD;QJzpbtm__?x4wgz4lMM3YY(qFszDjfL?02yA0#b>5$*(w2@&7y8QYUs
zsM)PZ>ZSFC#qM&D$mUCMC^~Y`zSad=rwK50+{Q%emg-_fBL3Qa)E)RFGOghbR1YcK
zEz}ZX5k at O~VVAQ&Si)?+8>kbYt*<EoSMhWJ`-`9#w1QH<JuIz6Y1*D_V^iM@&k7-K
zVh$Iqm^ktSI8v_5c!)uBTE`g};<;?h1efE9aGwCD<T&+Hr5l^8xUwJ|YQM|w$IRn>
z?GXbVERUNU-a^Hx;68K}XR+ at MP!=zIIF$nhL_0S=g;s!kjnAz#W`g=x32irgA;5}Y
zcIVxkPrxs|ZDZJBhY?p*nJ+$YbVT=YZTBF=m{2r+4!XIel4so9GPzYWTj($>&Mm5(
zFa$N6H^J!<AKdTSf~OH{P~j<Cdr(t6;_3 at E20b+R+4cyD47>)#w1ZEif(v`ZTM^3V
zv<`<p!lliTCQxMDD#3sW6vP@>f)y^(CZ{h9U*zmXpY<_tVx}7+Z`reL(6K_V2tdZR
z;TAxYIh{qbemmQoqC{uZT-w<AkYXzPnaBjiJJ_BCp)eP at mdN>&Rg4SP4o4O7kXEgD
zpaOPu*U*q{h+1&%l(20ATJUSpF9tT44OW}de0PZAgB2L=08irD+>@k0OQRLk#g^8_
zx>UhmLc|Cuc7Hf7d>j@*d*AI5lj3v|C5DLN>WL4SEQSM*jlxQakH~$1cx?5j(Y-zR
zVXG$k8f6y*b~=NC*jiHzDdU9YuD84Hbs)HZ8!@=DM#v+u1?O2^qQrNjf18tSuoU0h
zICa-_BBKl|77mfb)`$aX8=VceK6G$~Zmc?;B*cgV|2455J+!GcKYhc9@$EZ*!B@}J
zU8BaLh106)k>YR{vBtq7%pP71{_3qQs0_gbwy$K9<0w~o%&`0x)=-1zRttg)QmH)q
z9LJ%1jIbYoBkZx#d;ulQb=&q&lOzU`rK~T648(1FFMk^T&kA2)8)BYu>ncWNjvjgB
zGo}HeHGF-E;)a%1W0yFk#kAZ42#bY>y0sD4^CnTv)-Oj3feQ4nG-i45Iaz8ri(7GP
zooHZ<8S+VVmd9(zLaT#y<+_-av2}-&u!PeQnQDC@^CK2{^gC>yh+IyMmHH*<0Q;Qd
zuYB*jERFg_xkpU%*o`*AIefa895q&+f&6mLOYQ>X#5XB4$SjqfK0XXz9yFT0kgkMt
z%G+e>vb<uXiVCH(<h!NQ<csr`Wp<1Tt~=8`ug_05hmhSP%a5v4|9*Gqn}J=8Nj6RL
z*jQ>*5&^87430y70|x<#0`$ug*&cXC&Uw}L+()4u8VN=HOnNp}63qOs!TUwkNC&1?
ztrf05R&K1NhlieHAS;}wC{ej*BTY|F{~LfjXsjlQUFL`1^nc`Cys*@oi}&lsjvjN9
zXI4am$=j!6?wA}}s}25ppMPlaKlsld|CnZ0Qd?g5Dipq=aEF3d)q=5OAFlyGkN594
z)<19jSA&GHjN(O at o9-6ZMt=D+8JAknPkDa+_{R(i4hH5^9-5bSxH`OmQhXWzn_oq&
zH^slgN?g2{A1c>d;m`jQfuA>-<o1~-iNs$Amm_L<5`u-tmX8z^TiExfWMXB2|FO|b
zf!_GzgGQ at 3xupHLUFcC;m82WTZx-YC7xeoBNs7X7UeI|lBT->aOff4+y?kcC&^M((
zL7vy9fg>wRqj}jB3UwQC+?+D=WUKuOvmQ6&%4SokpSBhJx$|y)I`eMLI&T&Hx$|y+
zI`eMNI&T&Hx%2LPI`i(#I&T%6ZQfN*x<BBWdrze~Cg)+y-c1G?Wr!oOz8Ec8A3bl3
z<(dpB;&QGUQfNIQztAg^kXp*PTx1{*|7HJ})I+3><g2w@&t=J#XN2&8fhf^7zn?PF
zA39lgnpK_1u2WL7Pg)O3O{RQk<mAyWAFSuHk0OAVwIci at Sx1#5-#}bMnM3uM1K+cc
z_Q at 2R$`GmtA5^tmgve@!k%t-~S&`aS*4FE*i|g1)N$3b8Fpw<H+el#w>Zd9qX$Io3
zpOMI3;**OiMfQ{NgH)QSWdUTLzFM4rOmF+2M`oxrXxD at B;`O-_3N0=?`9kUBZB$C8
z9YH85j<i!5-#skO!rRP?2iRDXb5EYk(WEsHSz!1hXMi7T;UCwocHAv-x#KGDPc1!R
zrENQf>1RtFdnm1SEtss`pK{PXZv3ANt`{#>6ZSp7uTP7JW6tqmeXL*O;loC&<3icq
z-Vcz7__-B7H+z}PhV+Jb6zaEQ0mQr@)A2oT0Fv`K`H)q-c+pIUWg{*PYk&H%?DMo?
zS%JyJ+OHp0D;?IS1Fd#CtWO78ope~A4z#-Ius$7V_0nN|I?!56hxO?|Ydsy-rvt5x
zbXcDbw3?qPng2xTeDf0}^vzF{(l<X*Qs4YUX??Rw>@zD%QxrE7*MewUuq4gzXQrh2
z$3beYO0+v}zx-&bOt6P$Vyde^A4io5ZD;ar=%ggxhEl(xDnsUHzW}b3+caAq<X2at
za%BW5I=;$_v5dBax735AjD`I5u>~ad!kuDLnQRpENr`+kxmB~St!7PI8h+kZN}&Hq
zCRa4tlL;`%XKReFxS=!6?$hDbMI`)$n00|@eM0am5cy9CUInK33Bju%M0`T<N^$yA
z()kNQ>Zb#*f=vJEY_Ea_^yxsWpf7$p&?*RApANJ>QBwbjQu<Gn(0{6QKGh at Ua}oOi
z_v>JL4~BA3G}>!r4aRgHRSJo0LH)>UyJT6_Hi*&SVlZs>xIM_|Z;lMEis0g~b9aMB
zlXVd78()T|T`V>$H%^IIswDZB10t-E+ at _s2RrWA!n}>m>qkn<1^FJin*W8{rxLi8b
z4T0HxEL`Jv$3jF14{_(r1=s%C)i-#5vfz(KybFd4A#lCqH)BPcKaP~($U5aBPOgX@
zy|f!9{3fm1mgLjnt_WS`Gp)Tap2iuMSksO*6#$S8N=>O83f0(V5erVc{P-mvAKm7B
zNKIluG%s_coE-WT!XMrsN`l>qOxeS$_ZI{HUX6~T<ialPq4 at v-)C!dje=TWbJcpiw
z8Y?9wmVan1>ZU0Tiu-Z7!-{~R!T5aPs&T68J<bQOxDAS%c{0_*>gQv6(9rEe&o*}s
z_aA-r^>YTO<_hl`+~d~F>f3nfPCAf5U^(wwu|+50x@%zJ^GKXle)-nK5o|qu{&i^p
zdZqrkVk7y*+r+X-7dw7=IvQO at Ag#3GwvG*0?d3T9ToKG>#<xjx;?fd)em=2c%kg3{
zfiJzmD}wUz?%s3FWc4;Pi6C5dQ0HTHr8VsnsK#x98#%6fgCL at RDAeX19@mk!h2LW6
zHx{11#|@R-Sry=#cIF*LA_rLPKHq@<yY9QyjgWq^4Q@)iKPkV|CZd(wLUN+Ol{c at 3
z=Qw!f2Q~~Xmk@@IvCs^338Iy#!{OZTm(dL?TR~%gdws?AEDgJLg%_m at _u}ZIlW=if
zgJUE6Ff!!5IO`t<KRtE~?t-hmw#64qF+=h}8#VA(A)x8Os$$0O15(3rb at jPLkv+ia
z_EWY?-1STK@%0g9voQ_t5*n6o2q9H$%ALgoNfjEh?QNfEtVqf1E$!WH%zeL#Z#WG?
z%FQF$RD?S at 43-{-DQ<aiRcI^%&4*anM!Gw#*AbK<&=!p)2r(IPoiA*yce2pJTkouV
zNBoSfRo<RIe at _MJ!lwHXwpC~@*;ck$`8z<D0uj2twQNV-a__}n$}1k;`-<0X%p7TI
z)*pU*#y<8X_GSM#SG-NVFKm|k-%f_(i_`x5LpN!{=KadqnXdw$e*YWC!#bVP{cjvv
zYW;Tq_tb^^NFP7&{<j_95_XH{nH#y|Ma04I4Q(*;5U>56e{^z>d(NirByJnyXrkXh
z++1C1_8O~e_jC#IYRwJAD~;39 at VI%;ZujJRZZ4hUs?wJTd%7wbvH8(%;|*f5;>ZS#
zxzV`~Y_5Ua&Xv(zJ$Aw^jCPOZ at Je!h_?=ykuNuU3BRHONrTK~OBMU9~wVGG&V at uqw
zjJO^`)F9t?=8s>$Ivl*cI*hFo7NbiXzdhJL+}eNo-NEku;pSJnPfX at nc(l9F;Lg}`
z0q)&wJbcjT7B82z(fz5hFgh=eVj<&+aRQBdD&=F;-M36FTP{rmYIk-A(sEx9jk5vF
z|K!0OcZgrjH3*eMZh0_g+oHj};G at QTb_1>k%1zsc2fL5=2;Xh|>ET>M7g0Z$W7^Nc
z`p*&j2JJf=a`S8uP3*?!_<d0^KA+EVgC0Ncrr{l_`B#JU0k>%n4q4E%(fQ%)A<D at 4
zp^4OEUFDfgl83<E8TsO*LE`YT8_ZEoxDlHR^<E9eT;=*1BIipkYaOIAMQqw;y>Q<Z
zH0dZ0=6o1&wnW+4U9NMwJ at lH-3yo#&=sP>L`%wF*fc}yp#bTfHbz!ct@=(R*zCY)Z
z@#>EvQ+j;O;t0|=^cag(dMv{2pDeycaR23SaC$;KUSr4xh<}vHd{`>0Ao!i1JgnUv
z$XVNVpI=;Q-y-){LZ!m2?{ilyHznF-eGlfuij!`vD|D&wb#$W35s$e^@lC0a7sRhL
z0`z^hZL6k$6-pQLvVSrh#kD*iiJfI|ZEE{kS6~DJ?ZvxgTVt0f8vd$Pc&GimY+D>!
z at u0zh6P9VkA*{ajn*^{Yqa0Xaa|o>pptAZaS0}}{_gAhiOK)<BiNZ|>S+S~(QNx at S
zOsff);`P$Y1kmpK#h+X6ADwWa at Vi5Y*TUz^FS&zS_&bLWklUXJ?6(NAnSqsqN-(<j
zhx4QHMR8--gUa5P;a59lZH0H-FB&(84}Z?kBb&`!L!rtK=9&N@>`+;*41MMbD_vp+
z8uf!Y-*5yf-n3_Yel at e4w3+q?&mmThb(5fDut-<Ae#))Voca6LnRNXM=9}H-e&>!T
zzu1M}6#eMQ^LSIV7$+B(t!8ImBB at KU<$k&uQfNZL;wJmLKb8@|cA68*3<ZnTQ(zV-
z3mfJ&jW{Ij3)IA39ikm)6vv*+NKwFv`=|XQSsF)|a8%K*LOVrFwrjL~&vcfXf6NF8
zR9KC8VZa%vNdnk1fV`2UXslD&LbJ|#bP8exj%m*ck(@k7l`PJ&v|`(cepvHhC&`-K
zV&Z>71wzNxv=Yk8#KoZ^z#?-Df5$(kGER)oBMu(qRO0A#&)$s76H51x%TAF3xfI8O
zXOPQhzbM1hS0l_L62t;9 at 2|wMA>ge@!h3jUnyN61{`Y#&KjEThB&hSNx5L4^Wp4Vt
z&0XL(>3^$hW&Mx*mYv`9ziI3CvA#J$UHPK%c6fFV%i<OHDkDmru=^Y1cMm#^t1<tK
z_3u5I2Hg@>)$Ati5mY)-gStw$+F4p{Hk!?QtF3#TUX4oUR<5rG<_<a at p~j7mFNc^3
z84zQzvmJhBrEzrq^5uXH`KkfKe#3ZH?pzN3em%S#93sFC8Vk$1BmA;|IUJ0+EL+M%
z+_vaMlZ%dyqFIAtVlni$Wqm!n<XDiaQ`?eZaFkpklIv*E9V=->{8{#LF~r`T94(-Q
zxM}h4r-y&P9$da(koDa(vseAgx5M*$jXeyomxHD2asOy|I=p&+7eCEg1WH}~z2v|h
zOOumljAi016IznoJ_GI%ziJ%gE;}E+limt)o?gp?qkFV75O@<21b5YxjpW_%{ABb_
z*t~pa3RuGOYBaG8Q!RbP4(uXs>6S+W?APa7mf*LNS_GuH<(tpv!7pe>xK;d^8`V|V
zm)TZP+Unrt at SOXlt;FE;6ubHG)wynzclI&Hm2g3q)(z^n{Dvp2yy>nc8_et7A at Af{
zSUA19MCbd-Nc{XU4IWy9c$8jVH6+>Vf$4|^q~9^dzcv%KJy0Ne7AhsPmSV|?O@*%h
zX$tsfJ5RTt|L3z^Qyv at 7zTJBKXuC1Dw6gMDdwXSN=lM?Ke}Db_o5$Q~zuI`tee~m@
zwDbPy%F6B&*COYVtKr|Z?PmDr`zt>R>P<Be9+$3?+RG<bVyX9SX?{FAJs+dsvat77
zR^GjPw;Y<`Vw(-GJ=dVny;H7gFWLqAZ~H@}iqpZNzFo7%;}`RK{NV+jZDUFwREcFP
zb`%%W+I)D2k;9Of09)q`JL>eo-0*mGKG%4CIe7VCZh7Tp|E*pu^Uqwv75L#9!&~`r
z$qT|OlgeY9A6LgXV?UsktKk(wLe7)%id<bD{Q2?zV0?Xgr2#jV8aa<m)dLY1Og#sW
zo<5-%@`g2a=RPE*?`SW2_V&RXE^=<Vzgm)Xk1*kXJ(v?zR<wryp}5LRNcV$u9N}Fi
z9HbMzdVe|?za9)Q_&9j1tz+rI4nszK_P&2|HauVEt*FDFlD6v%HP at G?i*oEPESNm<
zhyK~cfBbEH_);YDfk_Vb3O&9Loh*zLd(wfR at M1v?GuxNLR|`KZJw%`U=4yB*sv9Mo
z`zvFOU80Tefjjq)MkntZN3SpeNIw3*UfR#LcXR5x&_a`TE`mgNR4)8ACKvU4 at BYfs
z!*t!|k6*rev2ZZB#Im{Y!;1y}b2J*GcQyV5^_cYSUgevNHB?&W;M`|}vx_SdJd|o*
zurE1#|2YjW+>`OBzJTm~4)yy-mzf+`na~bK7I{HxC#8K<v|gPY8Q7;b`PJb3ISW+V
zqSg}E7nGLV81x;M at uv2+-si35coUQniR!tnFd&c0`}dVbqW+Zjt80pKJ15nq4hAg#
zvv_qro}|etyowCoVCNjgYe{1b5!oD0CSS?BvBI&1`O_9{pK`SWn2)XKtMMc6=b!rX
z{tDX~I%%p+bRHhKSjD}RL$kdhNn8%j24_bY!JWO2F^azx4~J2Yp*Y5m=Q-0GxWC at P
zE}!pzyZayFUmr^b{jHsU9RzY5TWT#go6GGb!j8b%*NOOiG#b4*>tDW!lJRXvJ6-=H
zQDeJT^8ay_Li;!U at 3wIMkn&C=Zma)U3M3 at _n4)Ox8Iax$30N~VAncgvj)Ri$zs8pZ
zXJC0--9}Z6L at iYnVta{VW}Zn?Bd#wmMZM&ciGzuOGa-_&Q5<=$-A!%e)#>Pnc%3Y2
z&l(w$TEWBijzhohgo-^^!f;9<H%dhjAUHOKl6(}dzJ%@wBa!$K&U;BLh~?c;amP3U
zs??Jalw3vm&nXHLYT?pDG{r^+EHiUiaj~e-u!Uqrl}WlxfYn0Kl0qD3+VP78!4`pr
z5#-)DMkX2QAd{B7P}H^ZalcqVPp0w>)v?H{TwQ&e2u)1wK2AFn4gd_ZOQ$1c5BTZS
zQdmlpPHR?XA;SV`^oa>W`%bwm)IjW4s;iV+&lZ;MO!>ehp2a;9Hx>b0qw7m78m<l_
z{a=nw1;xh6k(7aRS9^m$JJz<{3oy|}q$TsK>&v{iRLO%+GhFx}WQZ7bHvEwp#$NNe
z8#LHv0S0&72iq9nh>Zik2{qKjR>Td$WsZocNw$9(PoymYFKLQlt+mT at aXU8U+mEDT
z|JA7b7`98{0Nn(XFsq7L6>yX9Za;6B;r%X_;>O<o({C_LnZy5xQ0l*5V;?rDzdQ`Q
z!OIf(B}7ju8OLO}Yry6oDmK3RdUt=9-N9x88NOeL4UPYPx_NRkKE)|PCKW(uZeqSy
zTG)KD(^#}UHl=<7^@#fu8?@m)-8b at UWBPvK^J=$G_jd?=*!oWgSv1Ia1S7QsjGe7V
zZb4g|H$ZFk^CiBUmHG3xyZirnc<}t`{;n)->K|-=PTcl at uyX8*qca5ExQ|2=$5*m9
zf+c6MGypIxxIQ1!mlm+^HYtL_t&9=OFuV}Qq47n at e38?TvI2bG at QCCL%<o=fwu9E9
z1SHdXIk-B0EyW<Kml9yjU_K7`P+0In_3<Mb#nWSY3 at RgD)>qbZBy@#_oS3=?#92oC
zY~ek%l*3vS-X<}bq4B-V#|P*K8t^~siD(grKc7lK*|bo(vol$MUtW&RbSyb6TO=9(
zW|T4~wnZ|T3k`9CGWNo73IsYQ=&bDVYb?NoaHt^B-ESJ#7q(jS!;?ZK8ay3fAvV?R
zp4!BudYS=p41328O*qte9J$@-omp{31R|Uxb<c+&o}vXZRE))LqTp6|E23VNgoDz<
z6Z_}TCx?M{c!FtZ-h-14BY3dlo`OHN-#!_-uWhd%gAVlH<{N1L4J2KnjnU8#BmUm=
z$6x|^ON(_-#~!sHt5f5nGK##@1%E6vjGBNr3X0`v9Fff>{Bn5WTgYIlC802zD at czO
z#&UJ}ehPC5!Dk}+pJkN&r!r|RP(MvW#E$%FVZVF(N^2ImS(WVTbb|Yid~274)M8T;
z<kS+9O{TH2HRLsPsXpxL&oX+M&eLx^m!&8o_P;HiEef?-5K%c%50lNz8)f7ZcX^y_
zBzAe-2&o2!K{+F at FrJ-XafHZK+i7I)4_a(nlAW!sX_W5|^Cs0DTCY=SnzmN9tCaE1
zcT5y^KDLybcNICiZG6<l{v}cifJ=v<!SQN<sUI;XnNnl(fJ1|3ethsSJROcPbL*U4
zB1$CfzL0z~NBpEq!zCfs+7fzGqBt at qyBdl8a(W!(asTcjd1yPK90lR_QzXkFQF9J|
zlQQKgFk)zvY&?3>SQO105*)2#5Ax5zN7G7BPl$ti5PV5*Nfsx`+=6;aE2UaRnpc&O
z?{m5)S^u(}I*x0rR;P*21n`ZHYX#_h2fN_BU?5t^#peav5z)2~EF3ih$wceaE?{+Y
z)GpB5U=xt;^@~ZbIhm4779zw6eTd>*M!Xb1a8i^Gi*>V-HyglmNtQ}3V6r&GlVhBq
zpR+zkEj661$;@Ny>;(cW`7$G+k>=L4Mk|k=5Iz5#17F9-g8`s~<eZPPQ*hJBueKeN
z-pVPj$4G$+37$*9Bs9QA1j+I6 at RHdr(KQ2Cb~Tjp3t at Z&BR;K at MUtMPvEf6td`Ucu
zl95fvziU9e>q7WlXK9}|{<8V_+uei4;*)P5ll63>5x at bV0bwl&!sqwU2(N(fmq8 at R
ze1c_(2FEr8IdfMszPycU1zg4P7*?zrP!Idc4Rz;ZjexzO!sjJpf#mN<Y^?2Cb3tU5
zVc)r5s}{WryQhHM(c-s*dG!i>`^D8$Ayl*~N1NdkJ6-|*ZiCYC7`kEbG~E;dsPW}Z
z=yzh^NieW%xC8r!CsQRJ=T5eore5t}UVFa#t0-1NIJc^Oe5+WaQC4#@l|sx;T}!)R
z1%AH%QoFayOH;eO<H|J-t}hgpz at o2s81`q4;MUHL2|?-h2d9MOa<V$l6E->IjtCwr
z9Nmi%m+Ko0n2il1b`o7Ac2d at Ca`iP|EWlXIk*SbD5j)r3!~|X}#2K0gLA0aB)L)4J
zt5nRSaO8)73lI4${@*_5!&g4Uxftrm|GU=h{!ahpSN^ZP<K$nf$9<#CZu at tuT#UB5
z_Pa*+XY at I9RZjc$Is5**OG2}!Rl4c>w7Q at 0x0%-;(TBLKW$lHCsIyK>3(P%%<#i8#
zv*yj!lK;Qe?)?`3Ju7&BR=JPr|3~P*ygrv#lC7e1xrF>)4UdhwBe9Zr1?{8o_Hz>V
z)Px4qY_<=I4v43ei=9gQz{}(PR+Wza>AU`Wj6xjbi-m3yZ`6L~qn|;XwBi%}9{rQI
zePY=0Hx*!o3;*g0Z|)R*=>vz(kxv5JZ#jWjscss?nwi`vmB51c<1w>F|0MzQC at I+B
ztW(WLc7h-tNHgVsS(Yd1jzP2h(76FMQ|fLzy}VxC48PUPlu~A7zLe2Bmdm^_#J}so
zA`#_REUn>7Vx|Y#ETc)a=u+{zgUd@)+%tSKik|1(bqK=H@;AP$uL<77cmM_VHWoQ2
zFvi}g&==R2v7t|_?fo(_#fwPF(?nRpo2zhL3oAaUO3}a&m6y;@vZ*J{>Lngt^l at S!
zd^|dHe=P4d78t>k^ZrwYNU(v-+8{lx*ex?3(#jD8?Y1rCd-qDG7^I5LNwPe9j|ROn
zBqDY$iyf(kU}{P=zYv&d6P`-D8jDcdP=Z4q*i5wcR&N$^b|}blWVd7iL0&ktoq0BX
z<@S?k2+`j2Pl at u45WTB?9FOk1MKCWKWpGVY--0fY_EHGCP&s-0^Pc9 at vTi0+p~6uO
zz0j{zGgA{lzwHcjY`oD7s9NqB4+cRT<oHSQ<0&3_uZ<b50W|H+17;T&Xf+Gnzh?(k
zN)h|!k;=vqV)ju at d?JM9+4&D|PAZqpLdR(i?YIDt&SR~Z#U{3~@pxx&J{+9HDFn(|
zJP{QldUe)-%w&YrC#QPUhXoO<kd9j@#GasHi&GBK%J+{UDT8nV{XUWO9(`=76UG+q
z|1!zRz{tKEoZ`mE#DobtJrEJSb|EU;W6nJ^e<k)2`*g>_5eKvfg!=3FHE2a{H5~-X
z{w5K?vHjg9n}yB|anjtzI at fqNJh^)PU~YZ&{|*N*@0Sm~8hl+O5)^DY%Glt`k%PJz
z6KyJ^TaT;(Gx(}Ll=f=GRh5rCusS=LrIZ1jSbFOb4U-OOX;Vp4#kHe*FRf{s#E;Kk
zA&M-E<~FV~I=vcREdOnMS7z97t(H^sz^Sn9UySVF6mpl3 at H_RuLFKT8Nrz@+_H1wo
z*O8A*36r2*<j at Nz@I=S#MAu?GzC>_FY%WgibG4_oEQw0^>id_yrLOM_07^XZ92U>G
zg)4m!ivzQx^Rp3rhXZh|^J`83ha#3hAbz|i!N~Ys{~~@{2!x)a5OW--q4gv#{*HB-
zP?!wonBwRi81r6EtRqV|BGUlzJo$1 at DC6b>%_XD^xv&%;dA$lo%ABL%eC_&tUsY%o
zL}uHL7)EQl$x&J)NFSm#43G1WpcBwe64hyX^OH`~cogB`nNHMH!aFN-sKw!wx at _a!
zyBe@&c320bzR#g0JAdV8`Nk_S_Uj8B9h!S6ztjDd{zFdT)dE1>I}nUNlnqMooAZ$t
z1s77}5ZU@=9}6oM-je7=M^DKHFy(7IWkP_SF(@yf>kiJf4;+gm?Bys#CLysl%<v-<
z1GP3RRP<?RQv7I8351|jER|Y2(?9Q>BIqcm%k=Wu;A{8bvrrEPel at t)7+x*7HsV-l
zwQ>Iu_G8C2usHWmPU!-Hk5`;3GIQ`<j>uxB3qM8y;dqZ?V-t!pm`<yutGfFm=z8w@
znubijeg~hD4oWO6G<Z4qn}-yOA~5?PdW!leG%2GwpwD~WK|x;kFF3eql1M%<EszSU
z6 at zHw6}dUj1vZnEhH0l1Zci(ml~wz*p=B~@DEZ_Knl)XJ;S!mGUCvII-sn&6LUP{W
zLWFJa7-5=iVYO!y9|y_<dvQZzPD%=8(hZyY*=yTV%;LN?o>oeLBPtxym{>8e6&QFG
z2ZktVkzlEMl!^j1*Q+F1gk`768L8$SJl5GLvAX7=;WqP!MJF(OcBDhz_*9ez!Nvd6
zQBbf(Y!^kfYgd{EX`3*F+l%o;O-m!=H`)H|k at 1J#RJ3gcBeZIUU4*Pqg at S);C?!bs
zqt>j at _@ab_yB38PB)q(RhhDXj(7OOy{OAjieO6FKsl?<dduED~%r~3eBI*UHQv7dW
z>Hb+}vj4V~;m_Z^-_%Lp$>+ah!XSsj=*@8O3)p`<q<?Ic?Z2I7^SAR~zs9EfW$eG&
zDwcA!Y{QhfmoWVPxvuveHJ%MeWG&ktjsMXntKu8(jX!DsC<7s~f at I$DvWu-SxmSbb
z^T8GNH0c^&G<HyfzQaI4lI3?KDLlF!V&XC7gJeL8i^kj~j<7R08d6l5>(QDgS(__c
z8*B4MyBRW3HkVqfjb`g!w|lSI`KzT#Zp<?XJfI=A=Sx%bLdHl5E=WUYOLl}-RtM1Q
z6=&f`XCbel<?Fy;fb{1&AX!GnL-Z^=K}R&UY<8E2Zsa4><=lEph2v_Q(M~e>ad?%v
zLgN9wL*A0aWpUxm at -D|*&IsfoEbD~h`~HpGB*8J7=&|39iEVg^)t0sKVj;K4dx^_g
zT#t)L!A>!m{dfxrt1W0ilk1U0*%E0>s|XA_8Do^#-}Nsob{&=Y424pK3*&O#dC|^u
zeYd&)<Z$ol{^2*<`~UguIpUkLJY(yLE1PA`EZcE&7lQ4&2<XN)-yS?ChtBY7h3pM(
z1xM&5d7(+wtfO}Cmu&8_cz-V7x%jd0!-UVuySe%8^RG!Iy32jU6G|yzodz0&nTh3M
zMvaLDXy`er%HWamW=t%V*{dcD2hS=7z=_orS2?jJ;>^UasW3dD0TA%*O~X at ml8Jq!
zHmeDJP~^Z;vG054Axv(QOYTZnoL1nmB-<Mb9GJL!Lm_b0(v#j$EM~f!R?Pd`eodm?
z$*TbvzCt~pJoRl89mcaj>DgI-hg6Y at tTud^*zD8|Y5^TSb`*=^!0emB+K072P!gj0
zQZ at S{X}Y$~zGn^odT at I2=&Z84tahYgAgS{B*EX{$tJEg;C=&NvzOP^Q!|kU}|JS44
z;`9#pcRBlZ at chLBW;6U=<t^tr$@$6GmecJq2|5&~gPA|2N{Qkk98qeY$tBors9-hU
zgGsm0vJzHBUR3NeTAYe+U1==7tK{A&e$JF<e_ih=a|dK*vT(ZtBelWK;vT6uMr8kR
zEk2$%{G#z}aETmp#@Vb_Fn9?(WI?^+5Zkx=kE1oeU=pZVJ!YXF_N&h-h6A=!u0rdH
zeN9KSjv*m(an+u%>N)qB+LBu^)Q-y*dJ66kjlR-K4R)o2A;-OW<jgBeQ>hQ5#OCsz
zvr4|*3Y98cFR2DM93d-ta&U_q41z;J<j{<=9wd0$u;OX=!q=?-^ed){@tdI^zI(JQ
zpKso2$VeUx?&_%U*~V0;@n8<K$6OqyTdtF|WK2B)dCtj`RA<EMTAne*^~a24wv8C)
z&adaaDt0zE<irfwP$f}JP2gtWR^h|p*{kwGr&5W`Q&vufk$e{>AfdqW1x!9i$s7G?
z3%N#&r^*kV#FRk>!yumC-k%n7873LG{)XV}Z*fSitla<X#rDqT^UW8^&PP_VcOo1}
zu|`A8!E=GOKte6cad$Pkka-&e)60lmA(<avmX&%*lzrKZ^6 at W;wks<?{Gb#;-m#ui
zKVP&3TF>g3k=eA1#=Mk{lWGy-r{FO6DrRP-0tw12Z~|O?`P5R1N$HMxh=OgB8o at in
zh at -0^$y&#%#f)XBiR3ji(euIF;Sn6{O_qa|X^rp>Sz;vHXL`Xt)1FM}P)WSdPP3AR
zO<_x^zUbeVDKO^q1`E><b~^3o@#V3nj8Dp{1J4vZJbSD$hQ#{uul_0Cu6$?C5f_tr
zK}jqhAZM8rg7T)(C7pVn{@9${Zt*!EPG*{|nZ0PNre<^Z(H0KyGyY^q(bKw4Lb-vm
zC_b2LlUltpi+t#|$CL)I&-yAeo5r87lg%WG2sx^!Li$~+qG}8Gk8sIY8bMM&rs)d@
z=fS+4xX>9nDc(*-c&8kUY&}m7mk+_31}P7Olx8N6fjRc2z{7Jvpl$<H&Fz|Pk$^F)
zpe+c{HkP94R|7MMB+dsfTD8?DaSJgTPIi$f*ZB<|*(^fxi)<$Zx!|!$!iD)v*3yF>
z9!=lsDN*$`cKzyPOu0_NB1{-|)a_$fl+ps&bTUGD(^M+bcVSkkH=};3Y)=O0XJE=#
zOzGJ2-Q!aY8 at Z-ZS$)isxv65}!?r&&qNTqAYMYz8x;eBVQ>v7c+>+(LFnP6`aJN9D
zOEq%Y>YoPcbTAeu!t6;V7-^DyHj9*=yowOaliuC`Y-y<hy^Bn4X^Bt9?&RC9UQ41l
zrXS6x9Oxq?X?Sk8JQl7jNhK`7G-n6!#*`ThAqX~&>@JM(XS}q+m)nXs#-(d+BPY(L
zk$=zq;L9roO?FvO$@x;eHNlwloFt75nhO@%6Ievr-Lr~vY=k(1x>go1>!VRrNR~}J
zDR5cOfI1sTI3g|JDGvVgS6O6D6B-}sy`GKUS7_UWY3PEKseEkli+Ie-w^2j^;tDJs
zVSdwyXFfFMob!r6%IY<1z at nHZK}Ek*@-VSA|74&2cr6<hHmdtBgT2kJXh}n%^4_5k
z?3ROIzi}#It(00$Q^8A+je>yqud5z at 4~%i}a at R4tenO)v%5tXWcxxfIs^9L=>SVZ~
zzU{2tT+AqH6ZfzhZ{Jc)>aBjahM2Uh8{w6kvOWxAStk}~<V%&m3wIIB1TEG2AXqtg
zJ^(;5WIBkeHQa*@l^gM915nmzpr6`S`MZ2m<?jNJ;sqeHZV}rP8OIW7y0!oR!|<`-
zaGwmj1H;5<*%a_d^jn9J-d+Hg<BSXH#g1~)kxg14sHMphNl?~^sycbobwqZn(u29k
zGPq3V@@)L#dub$r`F+3e!!jo<Eg=OTio`-6<0VGlb21lhGnt8tmS)44EaMd>KV7<W
zm at Qf`Ovw0#jF<HhskpZo0{5mf0zs#6RZ;PJuDD2H=a%?Spun!eBrFH%UdjHnVBP>h
zCo+4x{VnXp^mYv!g&#-8ix+PKs=MPOjI~N`3hY5PbnU~KlRI7nlHQV%a);uiC1uy#
z5t5iiR3i2;Tbl at g(T7skbd|Ma!b(z85x-n`clhUTpFZC`2qZLKR+8b0z#g+;XRSo{
zQ9(!zXd&o_-;}N3Eo6h&R+uvCtiNn?@Q{RQ+McZ)sbvVMidJ!i`tOuco*d0O!YmVs
zxUyz5)95U2x?~Z)B^dF>%{s=|+cY57pi{i8#$c80i)aXwjz=PV`RSFd%r5%iHle5n
zj?RfNWMw=^g;V&X@<R<(Oq53^)6OD6ofnsbw?jgU6)wrmAa-O&K6pz97%Dr$Yng*G
z9Q-UbyD$}ch}DEz1oJ|+g%SJ0sP{7;p#bB$-NY5FSo)<co895xF+@;H%8Cbl_Wq4_
z&_-?u&D`n&fL$W at NJ4MseIfpx(?F8IqgaO-FJqKCeUjctS1cLrJ$V~Z>bbd%STeSu
z?NV$#vRqE>XP1u%5T#P_VmzZQ6`zC`j-6$<=y_p<DFllzdsvD1@%?yMLkcNk8oH~i
zuv~DUZ21i*J6vP8R!tbr2;B$R5N0$W1QpI>Rq8VBqQY~eGL15fAsJs;BKz6SNETx=
zcAk<F<;m0Me)O<>G;fJW>&D-7`>UNy9Ip_P{g$8{J8-Ar;FOMsS#jKQFX`2gJ47>b
zWd1#ODe6%qD?L#s*CN;ZSS+;iWNSw&U8wAZgi)IVRb?22M`9}AMj1BQTeJm5BS!j+
z*m%W}XTkqmFXGYGp=l0Fk{jo0q?Xi!gE5o|mbr1_SD;*}QyJmZCnLqVFgPRp=uLee
zSqEsQ*%`~MJ-?9$N;@W~35a^YR~S-^B2`DiT+l+<9p7^EQG*i-@|H4N%OIAYmb4%%
zP^eCRMotFr=|nO5%6FweccRF&3f93p!rEaBilh=6`mY~7>>-f&E~g~_1aNf#00)d>
z>{$ZbwssoB7J^~%KM(`f5`)oVbJls}MZiy|Le*bQxKGK^c~hxp-<87zG8S__I*g#3
zSjHvViJwDcnz-x4GSVrunSvFfTn_6B`87g(7G-``WP>$k#x-Z2f8ik430tGK(*u*}
zD{&q*uJmx+3NHrRODUm?P|s^<u92T`B*5~{nzCiCxM{T_slHt;UmjUQZmd at u^O0Sk
zqp${cgAM_5Kv2yU1}lQVogbX5a=6w6ZDdOrE~2j~V!I%o4o!Erdd$e!mm!=yIl&!I
zGl5)i<}&$(hS=%$+a~tXo;3WV>z|Bs!RQ{Hb5$0*hPYCkp#D~=+4alMKj->aWq0R<
zBX9u at T-in|Qu)wgIGCB?WVJbo0YU4{do2-xf(J7DCe-Ik3^&MY7qFHR#x0_!dxfCP
zky2Kl2Y;2KAuaaPh72i-;%zqQU?9zQKt$q#;2Tyo^d)d6ksuyf$<@EwXxoo>H}`|=
ze2 at o~stN`S<%Uec7((9}F59scl0r6=CKAOt)veS*Whcw#@r>+$OQ!BCon&s~m{`HP
zyH%BM*#&hKT%J)+Qz4Ya at Z`iMi_<E=nLYeGV_gIi8}}q)7&7z<#v=;mdygI|OQHeK
z<J8d6Qny at CMI7**L<h at mj&(y9`yfHUEVJ6-#UX+Ysq)|Jwyo at 2q2);1f|j*74xvem
zK-($bm|-y!0`A$-;M+Rj<VY$|>G$*Zf?B!teo!TiI-E5O`}9R+8x`ZIR4e|j&!JeH
zw{(hJSF^YSRWIKq#lI?ozdqkErwnhME&<tMe>cvq(m?%Or_Qscjp8Ws8T(U0EoyL~
z$ap6rgbC>Z6NXOR1+aVvX2jE at rA1hCge!KE54Wbe(OyMpMN>c)U8zPQLTFQm^oXTy
z@)CJBwYX9z(n9u$`imR1(6cYO3k(G)6~UlE7G$<6AkvodG3KilsF{=k|C~GKH(k2M
zYN|tz$lJPW#^2R|GRCblLa2)T_BDkJ-tkO3QnnKQ2eXV at jH#NBIOAk_OM&#%gVV`c
z8cCTV?}4#*r|mV{I;C5AfAtVfNW%11%OH(HXEw9A?~)dC4s^pPCo-aZ_*Fa+(a9u$
zC<A8vpg`@W4I~f7$vc}UU*s~2=HGb7k=647F~yPDiEEKNLC0mBcUdBW3XG;m!37+d
z2p2Y&<`i{N<w4NB3gLvk;cb4pzA9=r?n`w=0!AmV%sOF)xi(Y3rwR%k7 at Omsuv-h1
zO5i!tR)TYxPb5GUU?m&sStd4p#0?ds)>~|+X~Ve9c51AAfrT~6gHW?lU#vtIRFN8I
z_~64Q@%Z;YzI?f8F@&Gb)h}16P9~@aLYeP`vb^r=YAaKqvb9+{ZOMb0Q)d)A2$a__
zNYpj1{LC4*s98Fal+7&C?&+2c!K|Qe=2Hi&z~_md3y_)6M1|58%RyZ7YsP9mP2vdY
zl&p=6_(k=nrm+N>4|Hu%d1BVkv$Ou@(U`lst_I&;4$DQR5t2fW!l3P^-#mKq)uEEr
z2aa|4_~}=Vo>U6Le{a_82j`{-)@b%O*ak>FHT~R3W&p at 7Ug5AEssfM>+dMG|e6*x)
z;h2YVx#sL-_k2vMl(E8MqzV^JxM$?GAy0$Mb%*%X$d?ha!#1+C%68V&1s2aeB#BE#
z#1phUPg+Z48BQh(4=}G2SmYijBP at ko8E?r_)OL;<B_vB}Oi+zbt&(;ybeVEIJo(X-
z<B-ZDttU3&-FrHO7YpI8VJ<^Yo6?C9|B^9yRkd6xp;^=#yM$PW3(8gf%ap35;wLSf
ztQXbF@!PcOW7Ngky81AsVz8(mD$>5bg<^>*O^KX_CNkzYWyK79{F5(lq<oURS+bm4
zXGN2>r6>IaEnm56 at gpoJTxAz)>%Y0Mo^g(_bF5hQa`@6^=y{P+9~Xu*q5`ldWY!}!
zSmcR}Pa9<t0ab-mq|U%pA=trOK;iOE3fr at Q7uD*C;b1}o0B&;kIne3>kc(Lk&~hJP
zD`>uHKc(H^y_D-lW~{B0j4`V#))}pX(>MdQoyO)g?g=ExC{pYrDon`Gx+Vdw46_lL
znIMF(S!uhJMUB|zKt$ZRzBD5#Z7Xfc83!%=_`D`8f at cNAhH~yAGs(Ano}ew|;#xue
zi;SlX9fxdQNg&P_GVH$!U;aFbaK$+kl4MO7`V>(!A4ToZV~k1xX(5t`(4=bP0I)0p
z<@x1bIgnM5DD&QCoAZpaZQktp_33H;R|Tk5K_&sJL`o+U*_MJb#Ndm at B9UoCRG=>f
zwd`|kLoT{h;yD>1$<Rr>*ND4I<5q)dj`|jKF)+?-M)u>=A)eHRycQRjIitESfQS%%
zmTZNBoS1UFTTraDTHZ(b+(VW6l<TQ(apx7W$03&^kjlqj6`2mE86P~)W-i`Fu3a+t
z)fy4irG{zuFC?~;0B2j7I4u2FLo0}ZLiMSmD~}>;GAKZ5l at aL3D-IytvB|B5qkCB~
z?oxAC at gWz3h&&o at Ju6Ai3Yy8H|Dz`*G)-bN)Eym+BRz#tJYn3Q@*ZdyV;uzw7iFoo
ze%d^kzE20|i4D6F(WR2}c|+m8;*^@JO3q|*u3X!GjFKvEt3nr{P=RNJcXb^BWgXPf
zacx`xV(e}~lMftgDTsN|KOdZy7{l4%?1*J?sWrkQv(0Aw)WZi0hLj3Oyi8%ZA?h$&
ziySPBRtx7rciI%iMRVLQ<7FPACov)$TzoCjI at u;S0N0aK6owlcO2M0rJ<BzsiGQKp
zthfxt3UI<Wz`75}VYC6g9PC*G at yxgC2gS%;WfSx}loClL35Gf4sHkB at 9P&e}uSm29
zXCH)=Gs3RLWOt$Z`~k0AK2e#EVw&EH%s8Wg0tvw!=k<X*k{A>`p%9I}M at MMgeQWYC
zQ_gHc_&{Z}u);AslYr_1O|Zs!d`yUaF_vRhrIAXL%drDq71P2O<A$c^bb-Hq5wGMS
z?1U&3%U!6n5}KZtOsZ$@8IN%+h1A6Y%<$YbRguZh{-j8tcf^?lV`xYh6xr+ecys|{
zP3;#MIymnsn;f#w2K#c#(@9Mg6GTpI69W2Vv>8Hprj^?6pR at iZcuXu-uz(f^X3QZG
zTXJJ+p<IQHxd8%6(`;P&ObEi@{B4aDL_t}K9Q3@^m1f6%#TNXdE+a;^%(?v|o>?vS
zuiLgHT8G|eNjMQBrb_v^rO6i4PDExu&P{+WQ`v6MLcq$~9+Ff6TG1Pt?Vq^4ARb2A
z>PdC&E-Ubl^z>@VNZCu9HHoZUzNzo5uw$ll5|<-q9i@$ntd-3(Xdbn at Eg_sRvVD$T
zh>HdZM*%L-IB8jO)I$UU{lxD+mcEuGMF#GgQnDi#4z~9nJ$rumWb>QdV%&uIMn1gA
zt6*T+ewy4&PUxKl=g?H0;+{|WW^s{JHba1#ir!1!cJN+ua@{v6S>vayPJtk%O%+uC
zY{wTkH|tm+Eup&aP>s})Q&%{#U^?oN-ruN?5yMjRI$_JdMi#z*T_1T)fgAEaj!C6X
zItc+Pp7)t`)HmJ#v(|1`@;|n?|7msB4t`F#|KayPdAv6+v$w;ud+3K(<oH2LI6=)I
zaQ8u{aW&>2QU^Zh+>`hk5+2GnpxZaD&tduGI#i6UDfYVmM-j@{#C^w<%<jwZQ)8)0
z+p9RF`9~-8Tisk_VC=Lyo`G?-x3s#}Xs(fd at m{N0%)l5&v=g%%Xon_|+KEs%;nI|U
zuj at q&cvBrIKl9=bB<7zowqDl10!ws*faRXDm8;J<^|F7}KXox`;Xg;$jWfm8Yl|Jk
zN}t8^6FJ9-7PdTICl8P_L-UP8f?vaRt3zUw&ytW!OxD<3)!UWx-U=MjPA71#+c%oQ
zDGTm$-W^r7iL9(%|GLe=i3zwOQ>_G7$t;yLrD!mgsdUmkKG6<3W98ztLH-vs$E8nv
zdY41F-YoZb%}|6VH9t~o83x6)a1%N~GZ<cS(}XOOQ+t}wjX+WA2?0eXH~2~P&HxF0
zvKJgXFdJZDbj3Ou{BBXF($9B;qXSYJG at f0KUV1o9U*|kLxj))u1k4Rxe^@iwXoBpe
zzmb{E1^~o#VS#gpDuGL^Ex%~+cyuIZz8M8SpcQ0)Kl?5^U%qG at gn%SNiFiFvFoz%7
z%T%wa5Dmxg&`9P1f=+FRJoa{*L)Nab)kEi%hxTb|>+V&{2fK;w70pBjd_sMlU6Uv2
z)X3$ZqHSvaWMqk+&|4lfrV-=3;T at g33A0v;!0}bqnpB$@!5Bi0xPIQExC}nUkW*&9
zi(np{pIMUu079L4F at xBZlAq;GMcY+Y%&yFhC59*I_xSeRC8%(Cd^#GViiZiQJ_C6y
zPeoCZiTx(yi4B=DUzk~<AjU$BAq$`@lubi-V_}PND-Y_cOT at DD>>2Qdn!I<Y$0gJZ
zQov_{amIlPyGRHKbBQcpHT6^Nd?S><szi<t!Vk7eJfEPC`Z-5W6gPieQ!@$GnlwP?
zsIi6IhMYgmINwM at f99N@efMEAwt7?Nn-B1#&DrUIt?}<82<Lrgmx)R4d#<iTBqy<n
z9QI(#rcTL;E?<q_VE)7ji}6yXUVP9_X at ZT5tOm-xHvWLUYE9QH9Nj<R1|E8nrR7*>
zzxzjSchOkTF`UGuU1|~*2H at j`j!v6;=s91J)V1X_Yi3F at h2-o*miyegnCs+`z@<Zv
z1j0#9LJt#)BW#GYTP3(!y^O at M84;yWB%NPe<yb5yN52Q&QvW2y6lZNL3F7$sDRQ#!
zq6anmuSk9c3nJ@~2 at sELPbE}0ot`|kR-iJ&WJyh+_hvi<Bdb-Oa~|Hl&;3=GXtuW$
zJOG at A7qpa2Y7mtyj4((z=|QS;`o>Ts4NRFR at y8=@sqreR#&NYw+LFs75}BD}L!(ew
zl$PCD;j*Iyfb4eKT#6iWOW-SHJQsT5$U*SSS$swCEcQ_>Sl>xeRE;&FtT{!XjzuFp
zCQF~cOq`;SY<79G99H7ITW!b?TG(m6tIHMQG#v%93YkD#*l&|}8VmhPJNdp0L#dAx
z{h0=iXy*-{lyKG61EUc|JGg^U=o|_aoX&U=buFEI&e*EDDS;LDOspT_0xoZ^A{eP~
zG)~)U@=swY^b)!>c}2ou+!Xg`HC*Ss<_7z(a_xSQ_4jvn&-;}7-+QZT&9eQMJK=w`
z|Nb1a_N;Y(3Hz_MN{!i9nKyRt;VZN3J!8AlTJd1WZODuL#wM5aAX5;Rea(Hekro&1
z#Fb45=B;nEvwM10b!E at J?#8{&`fpa^UzCWNmDtS0h=a43Ra2Sm<J)#kUHO>?Tanqy
z8LC8<EBl2H!l9NI3+&M&Ob8|21QlPx&0$PZHIuQ%Xnk1_yj4rtU;?}GMOuNSDDeZq
zH|LFS50*9$wjVum&-D0$^fQh9z3o=7*|XBs{)oDHMO>iytrr(oUi_c$e{8KTegEUy
z;D?nVVM at CAvQ#UmBc2m}apAk~zFXSNT{GNky44>Kj~Q0~^eoM7ZdvzBZ4v!Pe)Q-p
zh)sU|{Q0w$=JINz1KxjoE*?6%Br at Y97S!U&^*ruh49(ocuKkR|2n)xrhD$H`$1*eh
zKDLLBb9FtwH?g@~H~1AVQTP<D0FO6-D=nL8H}!d;K1%w3JI{dh@(J8Go+JPddB-Q`
z6a5Zv!K-i0n&z2Um5H56+yJsta_xeK2x=IoOfF0)6?Y8JA+|CtpVx0rqs!^89PCxn
z6>ENFS58qy^}kSTe{&iYHSwr#>JWgLi~eUjjkK|%wl9ktmvcoQ%1T3)eI;xelr;Hl
z%VLKjm>1 at 5#|%{v^9zogU{Q%&exd9NUC4r57cxiYp<N!bper(9{am)q#^*;|)F~-%
zo19<gn(gLFtGm){-jl1+26jGp7sjsyo0t9f;}FDr;@4J+Idqnrf3&s|xhXR=RBT`>
zB*_iKu|hEy3MFeo-wNL`dQ7PsNn><Gl)KvB{RVBsZ&NH%T?fSWSC8(JZI7!<bbN}F
zOPm(va0?0X_?t9mHc0_ZzoPM_G_XQXHxFy)(f;oCb0p+nZ+vxK-ZaqsF3LLS)gk)q
z5KG#=X&4d#?Ox2M`;Y#*`TWt-C)I7kwtn>J;3KVOU57UfQev+JQ#)o?JH9>gwtc)E
zSL!bro~?m9Zh%T1&A~$z$;5vHiu3Hd!tN{+fsCGT{<2W8h}7n_tEDxnmw?ywwsI!{
zlb>xK9DMh5f2Z0JE8(V(6}G?xEU65k(&|maFr=C~h+80SWjLkQlfi^7Xa8ZQI|EVD
z#>EK7{Sl`n0%hgsg97#ZAnGC<=R~(CgSLXnN<a at kKrHwoXB?khEaFV$X|YIt?>1KN
zHhQ0<le&V5j)%&(nwn?lVZD~U2~w at l>0XEIXByX}7JKPI84Vyh*J4ATD>RL<FfR_-
zgw`3tJ$jeMX>Oi$2-;z%L`qZ!pHGI(%lHV#Jk`i(3Kcsxo$k79%Y;l_r82qJD)mIZ
z(3n7uq;bhPOtE(WAHuu*l#coM2=}rs(s>8@#aBdgVfr!9Bf~1=_xfTEMuugF`HP=Z
znB-Hhi78<3<Vo%{&V`SZ=PrlO{%;;XrK^<^l!bv6Rh{2Feq+uLU0fe=pEqDyxf27R
zO%#;@N{8fwcdUF;=jE%+M&|S}Dgy<Ks1G$;Au#Hb&1F&;e*vLEQ#6+G;W1&94>%Kf
zeGb7R3@)B!RyO;bS4d4<oF7uM`5$D<XxztQnzW#IfBa+Gz6g(~Qiw1sHvD3K_(M*g
zR8&9FsnQ5kFdnI{OE=;n3r5GPJ!DB;l;flbi1J9)eVC6P^`p)(pTEDOP|}V2YLgd$
zOardgnmIFwbL4mmCd&$v^r66RBe7XNlETcq at 8T%a90;0LR^d1AGWWg%5y_AL<GjnW
zdLe%+_pgG$EdKxT-%pM4_ld|_wu_E*1>@`^o__wT-Qt{2+5g{K>;C5dpB=&<Uh+fy
z|2TZVeul<IwvCs4a=_^5K1W?I5B~hP at fW39(?+ at T#U0|<M;Gty%48W7TX*$uyRkny
z;t>1)GkSeK#us`2a&&amziNFchBICs6YzIDKoWR0Smq+<hcuGh@;u_chVc^pUiL4q
z&s1RLPp1zq1|#lwUk(jf$D16RR~k3Ppk7_}&&NtuhEj<K^s*rv&eFlt&1W>eNjMxm
zyXo~A8Os~`(D=rJ5Ui<3=lBI_ZpeQxufuUSi7HuXn)#;xhG<BV%{AV0(CKv_M{D0)
zo2a<hSapm<Fykf+F8)w2<Le6ziK;p=r*s3P2D%v7bvEALH~r!1q2Sthf=IdZ=$l;|
z+MEySrFCSdjH#>pC_(}X-3;P+Rz_%Vvb&Q4KF4x81Xk$0GHdp6Yst17?#Upd9Z{Ev
zX&3K3 at j!@rqoidW7^w2=i*Md<o}BRl?OVc~4)I-GVi)a?`9A+O7m#rF>Ygpz_}<D2
zHR8?O<G1JK1zzFZ<!E%36k7qz=Wp~P^t5t1JYvDQ`e~(}6gB1zD9;56GcVYb?B)*E
z*202M1{ZebSFq;r3u~dRVCjfF;Dr2tI;t&Lye1swXfQa};+WI?1h4tKW$WY1cve4Z
z0ovwYy6YMF?Us96bt4SJNyu7SOPEWmvnupiTUzZb;qJyTzuLOj>HW2F{QhWkb$E3q
zAgtWE^Cg*bPp?k~hnAjcLA!Zn+fpovXe)D$>G4r<IkfW{<HZG|>)|hq7XS5MjnC3o
zi`LSix0Ktk@<`uwW&EtSiLTH0zuncD>w#{v`6*g~p1!%OqbP<ahHnRs4j9-ukV4Kt
zJ5Wjt`DcE9+eTs{6f`CyF|?Q2J}_EZdY)V^wl`8AxR%SD|D{jw#wVwxR|JjgDk<d+
zOrnv!X<Aamb*V;lag|;x_Xp=J4!Jwx6={d2e?1I4pj66__mi6PY&`kPgt{TWA*lJB
zi{8#h7=7NC8p(?sUS(w_G-ssVE}5yoB?4I2sUYPl-&m=m7(s62IF`s4u9Q^g+2!yp
zWGFdVywuRy(UZ~n!c`XJuaFuireO2f%~Pg52?L at URciUbw?c!oDd((BR!jzu_yZj+
zPgFy;JPI`|Z56Iv<8O at ugKK<uu=CgmZ&E*b%+j5Xj{c?qo5oZBFWeHMloU)Jp(K|0
zf{W at 549O?IVnhRtsM|QyRKm0 at wNI|@{*>3G#ymsN;$YzuwgoJ<Dt8;g&_oGW4<Y(g
z)$+wGho8=+y?;KJ4eQR0D=>_gvxq%$V#6=M(xZ0M;4&Y3?b1YeatgtayWuaAT9s9_
zyxv0JsfC_}EPhi9J<;h`c0 at pNR?1L(YMs9XHhIfx&-=<y)!5nk=3v(5ooL)#W!qsc
z-knp3shvbN#T;g?oJIeWS{I>%vp6ps&6QPKX at bs%FYVGs7=fMHId_rL=}cq%o->N1
zV~W4xRtP&Z+X~~WlWp>R>&h^l+6Y_1NrVW`q;@_4-R#66XJ(H6X7+ez3p_?vkf&RW
zL$Ckue2GcWMCnbW#xu8=unbyD{<?KbwcJ4?%=S$U*O+;n2|p>5EIb^8LpM4<@F;`D
zIlqich&N{`k11lj_-=zw5$ygc{$-y6I63JoChP at DAg(DFkhQjW21oVm at ZEtwd)Wlu
z)@=U0&}34q&|D7M93#UZ>VWPe&%We!3Z3PR)~%Ojk*tOHmb at sj1+vV^jH|7`^iY6Y
z3_QS4Vvg;REgm&<l(WbZ6V9cLA%5dMYD9Ws5_dc%sBe5Qv78I&@lHXZ3JsxQq@!>i
z6i_nX7q>;mGUokkTuhPgXQ5&}#(gAAoG+}k{23{%BP|ucr-%VT3h_0VNe;*b`0;ya
zys^@}<07FC;#ef~H?#b_q>X3>;XqQ|pRWgggH14WO%)V&WLOA{M!LeJv4<jYM1**x
zEXr&FAB{J~aWk37n}XoYUO_kGU(%z#9-Yiaa6{ck+_9`1*utMn53~11e!^e>Yw*6l
z7$2-0g9-&S5Qq->8?R5Vo&!67FZ;*R!$ke6QXZvlO({<@;a`XHtcddDqe%K+tc6eI
zr9mUC#Z40qTSq-kLA`VgzZB+0Md&6hNsyqT`IM!z58wKQUKEVSuK<OlK%K at E%d%vD
zKP{s|l+z-I at kKg}bquxqo%9r$6{PiwyxaB-*l;MEo>dfzT}B+8eP2u?$#KMsGi{1z
z=FZOaH;)Cifu#(gq)l&=^vlelSbDQb6iIiKt%J8bmZH)4m}#<djsf1kMB}mYVuoKy
zlXU<oQ}pB?2Rwq!I5kQwpUFnOOsd|Mx6PHXf at 2I~X+zmk=4PYxvp>^5gWcH3hFjl=
z3{2I^@ePgqNhQ);*7_DkkkG<dBl)k*@N81uC<i4Kl1J+HIRx~cOO_|hJ_^xErR0(N
z_46%>)=3pTQcXVLbd_gnCd$a6IhvW at AG{q(FuWJcqVx3)C4zQoEMYuPRyJ>}S?d0#
znzizF*1N-?zR%j4S?>>Icn>0Tn#e{?haHp1asazo6u at JllyFh1Xs$~dOKDl9T*VSp
zMc>)XK}z?ZU!<NRVv&xNEOJsH;to%$RBS#f7k6?}E_uwYZ8MN4;(E68u`0+fDxsOO
zaTC!BHGpSUyO#RIQLA8l&I?wcUmDp=H2+|r8)bn|K-wBJRsm2oYf!3bS0LTC&Sk*l
zq+arP>-BM~d(ig@^C?>4r8E`aMD)60;Yzg<bS^iTuTp|brRuR$t?q<Rc{8<(U7Y4j
z>%Dm)_t$^3CGXp$wu|5>!}O!C`Z83U6Eb$sbZPzab(>-Nr?eBdNZwv$AJoo$rmc{n
zzVpYjt+;@HHE5sInhE98@*fx7pPPAH_P52G%`G>exR27DZ7F&uuk*D?);9Sb*Gy<#
z^E$6ySxV^l^L#2ZtznAJ-r2wDGWs at 7rk}!2nw0^@)+GY?16DFcwWP&-O>S7y3H9TM
z@^&g~TbbWX%bTHSE)+JdGAFI1pZvC#>F!Ho at tKi0ZR93z*yNfY7mHCO&vghfbydT<
zv$u)eTBN-0eO!kdc1CU86x(YH<cphZlG>7S7{=JAjWchuvR|MD+ga7zrazk^pHhW<
zgz2LH_t`m)ShcXK-z2~2=1B=e4*6v3=1V^FF1oSJxZm=&E8A%blx8PHF#%qxVCwSJ
z#`yK<8cz=4VcJ&>LgKjDC6OPJ$4om at BbE^E<FtAU8xyGYNFj^vU*?=a{>Kf3BPl7|
zPX3$%`cikZgIk2xtv?Mp7vwAlya_Cm#|*5|N_)G?w}akOi;j}f9uGqvDRl$zl9B>m
z^5=BmCB4lCI~Y4UZ7^^oFiIY8r%<ZF12^;*?2&nc;Bv`e7{Z{!+hTxDZo1?yyA{(P
zqTx8PHga{jzm;(?b)#00+fs671Dwg?5 at BSnv3wpyd&_Nhg~KTL{;~#t%AOKxS28IT
zLF6se08=ucS=YgV;PekKqGjaPrgn`f`Gw|6s$AA@>3t-+AE{U1M~IKfw^@(LyN}#k
zEo;j9t^N9uN089YbZ=`pl7n0kEo at hqKgG`1qUKc`Ey}(qD`rlG;?mkluWE&*hYnv=
zj9csSv~v1et#IUYpU`rm5X at 8-NQ)8*i_9vTPM2C*0K+>%hKU4wJ0wd)Ve_jU-MVLL
zVP*7jFgYnydHv#49l?w~l<mHG0_I7iA>idKq+y5PJM|R_s9&h(>DBWI{X9ZZprSra
z|96JT7K?<5<zTCaz-(f(3`pX#C%QhA!1h7oZ at Q?2{n&4iDxbIj!dA?s7DOC!6UJW=
zAVqTtt`5PJ2nU7#(?N90O{yN8zJZr#-lZ6es at rcp5Oq=ma)@T`%A`<@$89*a_HXio
zn!nqTC~Mg3<ggbk5`Q&80#_s%?q8ndMJme^yPt`*+XCst1-?5DFAyCZAjvBn<QKRi
zXOxdV=_Lu1LK8l);NxFpZRDIzTtk(GsSF}rA+2;)qdq48j%~Y at mHr7?J<rKr!08(<
zqa7T-5e8)G2EvIGZ$re>uS4}rLdb}IyQjON?Yx4O%nmD*9Zvay1PyV<LkTvUB(1KF
zDBQU-YvSAwKXUa+)yz-XOwRv%eg2Q(#ceNrOJ;e)`9H3IE8qXN+F5P=cK$B`;V<@h
z`}2Q(PN}db at WVGdt#CZ4z0_Le#l3dxUbCGZPs-v8vrv*R8jZg`dgh1MuFpyT`=()d
zJ{T`6$Q&xjnJhoQC5bEFtCF>Js3LIUz=dh<%VYTMs}Ve#G!3sWJha6*p}wjM-Hy#~
zj}voCdzN!%yu>K-LUu)km-|*bKmVdrc78yyQJ8;TB1W~+0f|YMo8e1dAUi46XnZ|7
zl_g|rG=6jaYH- at P|MuwJ;E0*M9De!g?8oJk!Na_s4(0ht%H&Yx|M&meiORd>rtUVj
z2%;UH-)($_M8hrHc{?PofCw7|LX3<FxOVDtnNydXwX*`_l~)(1OW_Zl9BX{_<l9CF
z6?*JtDw9LL<>Y7Hn~r-fHCs!oEgWWFZ#C{Up7pO_1}8jWf7St;qw81v at tn|{l><_@
z>V$xxoDEn at Rs3z9C}VVkTG`$~E|82hQ>AU=MO)Nu#Y33tl-QK4x(~a#)Y|Z2f6;j4
zCstz6awr+XWz+3!8^$*=C){2Sk6%kP;^-nd_TYYc;;^O!xj6W7We<n5aJo#5)1%t>
zl6w$z?5L$IZy`kMiw5IstOAJx-IZ|?bW(r4&TG=t>P)9NanMTaTeHPCgFu)__)kMA
zc`1#8bMOAve!lw(fBf{N899<uxfgGAj?^Nn*u5v5ksYrv*TE&Hn8t$@z`!L-7yS!P
z!K`4B#7H<;etmUznsxg{<LS$n!{Z at 0kwvg5XC&#M{yC-Vv+>C}L0!j}qw(nFm38k2
zMc>o=()D=d-NyRK$(xneuj7+;C+L6JJ?)$=_s2PAbAUIt)7W`>prgZs6<yyOhfxO9
zFH2`8P!R~&hmsGhCwB2Qcyln65N#WEmkpU?>z9Kc`}!nw3y;fA=7j#w-yyzvfw=u#
zt#BDGX_aG{XwGHa54(xBGkj4;Uo;w<$|Wi3&~JRPqs#$S9PCyuc?1qRlgZCjrQ)Ya
z<|}H2fYE)9D2x0j`l!b7CAZmdnmr}l)^n~s*-6lCCpIYbii4|}>3x at hRre!K)y~9x
z{Fx>#mgcF=A!-$m;iUGO^1R}qI1#Ie!AZ-><1fE<NoS=Q*(iP4vO?vVL?(2bnaHRG
zC(qin&Ga$0VbWr0DmF~A+9j%7c_!ki;%w<m8jIKG!yoNpa+LJ5i^OVHuw-Ni_Ai*4
zjeGjkOg4ngp#O&n8WBpsl{~WJigp<xrip)*_?0YhJ*8%r{{h0ly at WcxQEYk2DhHCA
zG<EM at PI($n&8}#~4t^_RB6_Y;@ef}PQybzJ1;Ui{p6`e(j5_H{{;fk1xop$tYyDH+
z3XqU`T_|iB at +~vIK`QwtX+N1uTDf#?W3q{IA!%ztM}Q&awxW}X=eE*^xheK0_7Kcb
zVfP|2Q&U?-w5eJb2;aPp^MM}bu)EF5*a#ASQ(S^D+>js5&26E(1fZGaCG7cy(C9+L
zPxefP+*gYBl;tO)OSaE4hy*b}i(R4w0eK=UADy2JevIuzc&4?1W|+^}@JEx>chs}&
zcaaon2})I}*dhSDzjtq5wTnQXvRF9_PpZ^l3J_7dw()I7ldvO9C77SXqL6^?{LrfX
zu=G&vOty3`#GXE%ahYT^)67#4i%KN(Ngi|J7S|_1SJal7*D66r1H78?hY|}Zb{>|k
z9yvbFI at u_G{z6S(BJX6 at H6s6zS)+-8h}-&SV3a_8i<L?j+AddzdL{#zfRdB(%i1We
z>dgx$Avvj2k73sG&tJKvht|*y3#cX0wdXU@!htPdyqM?LU&G+y(aJY$atwPsmSrlA
z<-?Zon{k at gWIA8F1*x<l()LGNOWK-YIo0E=D{6uiHl-YbzaB=Wt0|Go<jN0UNl9!8
zZhf>>RJ$Kz1=Y^<)w7;vUAc=sIne@>u~m#H at UK}wER^-bxiv<rrC(wl)$YewN3}D3
z9j&KX*U{E4+RRMU`}Gzu<%x!Yg>hsnH%<Ko%_j3m>7>8JQmWmLv6O0O`chg?Gc2Vv
z)Ny9Ru_zGp;bPOZH66HBC;>+Dm`kH6Ni;6UKRIbkM9Ti<@oO%iDK-*>?mYK+Y{LCT
z8pC_bp3hAHN<65`$K4Exg>KkCf&>REbreh+@!_Ajpl at cH32Uwn_kzY!o$|*a$(b>r
zpg?Dk_$hnRV2TPztx-<JFh`<rxJS(tH^sChHjBI^(P#xFC1!$r2dSyhqc#rZgxzOX
zal2|M)j*=1CRKuQN>#@AbZmnsH45{x7_0tC;`C8N{N_h{>Q>&VLIYf?aCwy8x?zRi
z{#Au9*}TN2?qwlu8cAu4FON^Ts!^r*P-ni)4b^Iy at og&{fi$7)S|#$l#7p59CuOcK
z734SH-(?i>!iKr;f9$S)|6}Lq`yW at k{J*C(6>tBlUcI>gO9#7Lgs8-u at A{<6P!>u&
zB%VwZ+YH<gKL{Zd{qtAR at e}H=tb{enP15m3jQ;M6<_~up&Gnk at o~XrB^;Q_jeE%7v
zcQ@?f!jH`!$K<yk>(U8ptOUlJdsf9~FBWJ*Io=ChG3Vz>%4!KmBW&?1A-u^o=7~#L
z`AhBt!AIz+z-o7KGV`lTT?OLClkoa(%pmps<@e{7X=IN7{*2Jgx$iIM06r;E)Q~O(
zVJc-$M`HiiLWLb9+ee at zK1;p$(EZe8Kee*`6t;u?N88D746%3{Zq(%vG<jyzGL!dd
zn|3>DmnC0KQ}e4jO&`1-zQmBm79C&o&y_~8F&@4;=h{s2$U-jd)_b>K6nZpDemGX`
zMcS^}506Kq3mDAh==#;`dPc(tz=eTkq&9SCu+S+a6)n#15j)xXEXPc$*nI!di-ldX
zlTru+dRjC8{EcNVEoVB=cfhdkE?rIkbVPu#(_6p(k|cJHvZc&b)=d$|-Zua81SI?F
z*`84C8~)jQu77q`{?gpu-`2ke{PQjU^7e`0q7e{lEBQxT%-q`0ixU~!2w3D|oy+$Z
zIDe}XJQA4#hF~XsGtoaZR(~W&r}=r~PnHf6_we54<AdEA;GBypTU8B+YX~aMYn#Z7
z4OotqXZW6?^{&Y`45;2T`Y&Nfw!p{1sf~$HW3IGgcInC(*XtHspkPc*h8F2p8G_KU
zNE_e&^=^Zx1YvKb)6f!RYk%8zfSL_|RiTlWKJe`nO7qv0!mMY~wEZ<{B*xa#adWki
zhF)zw++w2<#UBfSEZ`K>;sb1(p2M~)(>9cNVxvlXYxN)n=f)^wqw&95omf=(L}d-l
z?poq-!=zPWOzh2m&On`55XbOtNE9wdiN<e+9P6&`T6K(@fazQ(qHY{c{q&!cNLm3w
z<hG%4$s?M*l38C!%Offxdsz>XX9g0uz3PE6KG7QR+b1ubKjLa!UI3*Q7C?gdy1I0+
zS$3~3qbhe*9a&{pw0ey{PF<+0OQybP<Wgbp#+TWI^{Zs#3G|UPA`!&-f4xAUkg!^d
zO#zK1>}h!=zHoJ|WDMmy7o&3$0N|@ca=DZbMg0`=Mduy+lM#la-TJ|Mk#q{(x+$c^
z!bBvY76 at ky;0ZGd8QYns2`LgZT<NHrfZCrr2^AOvo?}#bTMkAsZAL0@<aG6(F=9jL
znzd26{0F*yJ%Ba)6kdyADbRg%*A_(x!6(!O1hFKjJ+EJQ3Kz^w?bL?2ZbOX0M^nqI
z1GXhw|J6TWoDv9an@(P{IHZ|J(`?yrJl+X_l*P58ydRrS|Emr68FGEdM|r69l!KGS
zg`<D8ih;*zrSh{8Ok~s%na&57k#;I2(o^oHgs!(agQC01zk9?TmNimMxk3N?%ahZ^
z1>$oK8O-v@>1kOrs;@P}<}6mUZq&tiG;<F(E_ at BqF81oq=_!D(S<d at 6cB?*o&mH|k
z*Zw*E3fr!x#hW+CjhLQJE2T|qH}7*Btx2p-r{;8bfrl?<fH8{Of6IjtvVAPi-Q4Ow
zXHZ<yLC5D=u#QmvKG_}b-LMcT9C|m6IAu9=JA<W_$aavjgUhG!Q$|St8M#nKv!}s?
zZFs9ycXAMiFI26mK7AV+3lrG`;Z4$>1>s|l(py?L0W7LHfw}40%{+z_ONOZlFWE7J
zlS%w5uKCQnJCL}Fs9_ at REHljax{K58n`fC<2{ZlnJkIo^N+b~&@xL<zMHK{?<ICfA
zt0aO+$Cwo^YA4+Ro!MZMR}1h#v1zybM9%p7EF#L!6W7#9`Im?Ol)uEkr<bUuP?Je<
zZSi^}toB>Ohz!&_uBW~IYmI&e&MQ(Faq8PAkN$TaQdgmR*3xrp>FkYJP+j8N(>qhW
zU#_omJ?+DXT<S85ZK_;-b#36)8{H48zS?~GdE@?l0$*=YU7&HhLGwd;&#SBVnfeXW
zR!!L}UJe4#8XKRZ{WLe$SL+n|U=ZAOx5bMepq+oPdoW5-(6s)jq}OHfR at ieIW_OC7
zfWjKrMhNA|nY9v}9t)Y-KljE6BP!*Rh#UgsEcDR&&Eh=2m=K{;IZ*Ix2CF-07}^Ji
zs(+*?bglUNM2ybBCSWr at g>4nw&RX2WBL0QXB$SQ;=N8gd{4y<A#uF4LD`}%j;sDJD
zbwebEMV;GlZ-`y?NRqJ6Ou3snrzJZ&@`SK{i-x)Eb6DeKIX`d_roPl at V!nv-)`v6I
znuc`_WvXOSQ>RUxkHO<>n(k<xKbJk$wA-cK54SGVG}tq^)e6DO%gd3c=fZDI6Kgba
zvnG-3^yCrb4(Bg|- at W+l*Fgy1?9=1Ky-W<Pni(<T?A(d{FPj|UPjD-_AhIEpiJ0vw
zvuXYtP40<ou(M3ejI{qo6H~a%OcRq7Smiy_qEoURU<~75k9{F3VA}bU4?Lt%7xdx0
zTq<kg1pWdt6lAY5gB9oc&|@1nFyp$j7S7ZaNnuZUgvn3&vN56{iW(=^2tD}1s=Qc0
ztj%RceT{;v@#b=Atn-sgJKe~JgRc|SueP{hqB<)K1y at dOY1`hF(l|Y8OWO{qlt$;t
zOHUJd4J^fjA!=-vDkdub4@=|l!TA9&9fw<1C+B~-I=(o0x$?nX{7(5F*1BE$FOTK_
z>htfKt81-Zx7loV+rL|FuB~=@ziV_qyvx~ZlIlliNq?tHXs6Y>>HD<0pYXTY*Z(EX
z*ALqSTHsr)KQ5YP=ePC$HMY$y*Z*YjxBlDfF|k`qN8I8z+dc4F|6Zq4#(V#}*=qOJ
zO8C#K=Gt%hUw)1C_xvyO$~5|5fq035 at _T-JKGc~aG>>^H7Y`P8SoXhMA86UPSay9N
z3&rsRkFi?V94nA*;laa=*7{uv$3K@?$h!;M{fn;$!&k4f0(+<ZS7S=ITXz at spekEi
zqaXQm;l)yOwMWj4-bR<m#a;({Xsi9h!rg^OT);j&-aLPGI-uO at -Gu{^s{Mt>W{W?*
z8Il>}{MC2EldIRf>tPpUeAgEbmO8je=C7|FbTF3BAHNI3z4QB3D}~Fo#UMKCJhUG?
z>~x8CX?Gqx?6#UbbRRriZ|hT!!W;UuMt^pTeS4j6Yg}jF-k|;}-#WC|>8|n6j1M&3
zZMAtr)7DUjrrYZ{dOI}TX?A&_X?t_$_Z=E<_w<got-B6w+e25Q)d0G*?GLo=547zM
zwCxYH?GJI-U0U`xwA@*x|1K at tLywkiXgyl?2U at m=JHPMIc2~pg(Khqe6OFH}b$Foh
zwH^TI(fC?hZv>LI%4pc@%zI74wg)vXkgi$d0BMb;+k)SkKw=NpGSgqvu-hs_%NrYd
zV=eRM&hOV~d%a61>$FYQC?3?dy`k;3HGQJ(HFiZ~T_9PflXco&Z|Xs#*6`P9yV+b-
zeHvd|V{Gd*z1HH}hMI2C?*>iVl5WtnEzJf^`x}}LP}-pJu3)o4<NhFcuc-mG-DKT1
zXuG>XZ$L4;B43h9vAww1omShFXF%CkI#|<?o2#_n?pR$q2v6!kd!@Nb7vUX!G*>&S
z(zH%^y7PO)DFFfCfl0CPX4XxUZaOxwrluiiH=A_Rv4J(|#s|@)n_k!2rkf3c3B==F
zM>SgN!@joYqbrbuwy|!DJ`8%z7JYboE&2%XTW at Q7+5TjYXgY==8Bo?+YP2WRT5q-K
z(|01Tsb=uzF|NUyrXF4jBb%KLE7R_3>b50XLaL4c+ZGNpS=w!D6WNk80s&bg;F0Nv
zN1LmLaOd~*X4AFtXdb=xhLz at R=vk2VQLc%;_}k8U_O{&xI0o$XmT)_a#};q{(6&|7
zz}OZx*sg2}RSil_;i{3UW{+~=9W90 at K@*~@#TUAUx0;si7$K~Us40vMPu8_IF>*IA
zds^Q$O|wHoO-Ea8RpG4>uBH&z=h$3}&~IwA-lCA#7Pu+w?TCyvg}nYG?6q=?(O|Ff
zHZ^M-c~dBCkZ%fyy+t8$sI6XXh(co at qR<%h(QXtXhex4ueAM!2U7NyYBLYpKb9kbg
z at I*J^NuU?8V2~Sh6y91#>*`2YZKMxjm2rsDwG6BMNwe`Mt&Km?jZwRnVYTR9YgH at b
zPjnKV=)|DcTBVP5QNxyYwh_9PP&z!(hdtf-eM?9k-qK5WVlv*2wsm-?l at S6MvV|x0
zV(+xk!xO#O&NKX5(+aj6soCy^d`9C8_reo>geR?wC}69_Ozepfw&=y*IvR`Zw%S at 3
zQJ|Jk#Ry_cyf{2DmGHz=!jk|dg4hy24o`Fwp6JA%g#SkQT4KpYcUm1=6oFGrIeb+g
zqL2(xj5)m3Wc0Qr#_T{e&g}2##ak5qhNr9-BR2+4A-Yk<R+nCk7qq(SL)5a>r4QRx
zEo0FJur4zR?=o-+^}|kV3Hcp}LVn+V#;6U3BBkLSy*ONrRf|Kn4E4R7dhvJk;^l<-
z#=u*`d>?Cu`7L37cxUhu{Dt_wCdRb2#etzvKfKlA+r}5_`#Yh&zZ2qzceW~OQHUSj
z(Tm9pEg`=5EcPAV(MNbkAK{&?35292wD)&n;a*NyZ-~SQ4exDzHt1zTINlN)U)z8_
zw8Y094Tbf-m&D1#J9 at EqZ6UqAYYXYaJ9-K4m`Qj?AK at K+gm+r`4*j-Q1+8^P-8NP(
zLU8BzZK1uFG+wTq(Kb#l65bYnG4|gU(wnf<7AFriv??MQZR2Ial(tw|c*jgSYoKtu
zsWq{3Li(<_TiaNhWQewyZd-CuTS#w^Ym4LBUT1`2x#6wmB51Z-^b+3DOL#{w8`=YH
zA-#VU&ihy4ypbgmfHE54R$Bsic&C~8JFUE=ytZ)O-wD4>;A at -6t$p1Ve%m`nC=55*
zrY*TUl%&P*PNSAc&=!6hGe!@{-Z5%_XZUU9Bz%W=v}b~4TexhpQd_tj-qBuoM|<HN
z?fE;CxCJdnC|q_p2$zlQwuQ^#o#0?_HL2U51P6bjmr#yg!aI8LcZSPW&T(0*BV2Zw
zw=HBgA+9YpZdAT)$Sktd76O|z#1O^3gCwHHB^JY&<2#|NNv>`2X+yNO3)|W_CT&Yc
zXp2vWuL7~Zv%zZPo4_q%)HZbWCkAU|sV!tR^4k`&uG`i%WK}DSQ0VGy3tfF{2wjcH
zw8f)s<Dl;FPD)fK<Ix?-+eRols~W$yP)D2 at Ihu)f#F{%2O*+ET_BvS85tgnAA3MTP
z!@`bmwB2Jbb%dkc4F-ltXU*6cJI0%ZY8|1eEfG>w9GUTE5uuKusWyB^f-thXy`-NF
zO|~OEU6XX(5uVzlJHk`j+Z|)h+Nm9rj3vu=grx?EjwIEtmbW7;wY}I8b6#7eJG4(R
zXMZa^wO!j0o~}!#>IhGL*uvAbo*-d(+7!s7DcdFjSbDM=T5^A)7u!M|Da&i3a7g9Z
z6MghLY?qF3*UK4iwxx2+r3NE3-s~kcmo at b)+;unzca6$+Ol|IJgu>mfsBA~L>tDs2
zo87L4DCXQW*}Eg|+-z+ikaUF72)0(Aeh4bkOZqV?-4TCA^|8-Pr`fdc!fG@%T4kVy
z*0!D|pW9{;TKfRRqK!~@gx0<{#iDKJcEq9$nLCos9pqA|{hiR--wCb5yKHHM)!|*X
z%Y at b8ot8!<L8b;xM=BmG&RZL+vuMG^bZdL(EZW`)Y^xG`J3 at L8M74$Wjz1Zb?qp25
zlVN?wm29ibTpVePNsFX+g!MjqW72xZ7=`!Yt!87}#&m5%0Atc(Z5?5KSWuyTSWw};
zFDTkW7-Uz7Z at Z-{?XuYtLU&E)7S44=1B^j+MFR|0U6BBTPuCc=*0L)S;IO#!`>v>f
zL!+BX=r}RL*t at 253zl7D)mGnVfWM<36Xv?20fwkuqXAl*t|{GOon2$q_D&?g_7Ntk
zu#dXVs##gAP1!rm#Ua^sBA^+X+O4-;5dnj4*NA}ZCS4-|qJdqJ03#}0kpN?uU1QbS
zKV2gM{-j>~DTA1k0JSGpZ49$3Roh5PS0up5OxMJ730weC47?{o)D;o%H4qW-H4qU9
z at 3fmG0(E6LTNf5~MFM(4_pY;V`${iHO1j3r4c2BmGx&=HIIK-PH at J!b7`z}2`l_*r
zrAHV#0kF5sC6uHWFKJBO;A-Nz)i&{5hLWyu-voY?RzXuRG~Ac%p)1^Ho9Ky|7-i at R
z_t|0E1VaAsXxMLaF{Um)*%ebaJ_!_s|0d9N#nm0&rkjfubWJxG?sSd6`;*p1Or|UB
zH@=LH%=~OTrkPuRrkUGL%mnnVaNl>LaNoymxGzT7HQe8TtalyveVwJ6`))FxZ_qL9
z7h{5NG8$VU7tmq6UGaQJS>yRKrghEGX8TmQZ?o^3sm=N`tz0n13as`3V$V3fKWTrh
z(MnHvZ$fWRc;6Mn$K)x at UzcUJXPDn+25ihQzn(FFZ(H!vXnMl>UW=9N3G3IyE_)`R
z`%~P-fLS#(E^+?wq_tPiI6HuhY*jsBeRxM7UG40iu)e1mGr|n-d&2v5F~pwm-fe$9
z@&5QoKk<={yh|az2|7Jf%_ZyiOflD{?FsQWgjPKvzHOnN at qTgRo)8~g){{WyPju4L
z*2i)a7FU*IO-BRn3HASf=H5EG$|GtYg(88X3GR~M1RBr5f&>UIEpA1FySsaV5NHcU
z0t6_<id%6g0SbiRZh-`c5G)XKpJ&g^`<`#zwZ8jX>)t;ui?#Bcede8KbkCkW`<;Ux
zBVu&~$<!BSnfMCHKxR{j-7a0gi7)0Q+>BuPLB3^^ak%(%;)^Qr=fu|t91hw*C=%*P
zI|WC|c$NwdbC6}lvnU~_zL>!Nocbd5=hPQF#$T*?y5it>#J7QhI9a5*={{G86JIP5
ze@=XjSQA<&{<1Guh#dZG1#!vIagC2)lL5ww at 6WZ>pA+Ao!x$yx%$I3}!ZRi7%!v;j
zN(7bw8H$|tijUJ?BX+$Pk2Cx^@8O|k4LI>3B at x$s+4%aana?aa^BvxTKm)flALrCp
zJe>Lgw06)O;L)Yz<QI=1%p;UNfTKtzKNnYjPJVG!`peXp0&(hld+}RNeIMy*PJNBQ
zq7hhNP%|Akgb(&RW#o{(IS*d^IrZhh#-CGP+=c<NH)mOKWFWh9;sCDtKJ0}6PJWHR
z;=`H-h)Yf(u!z$U#<7LSLJw&GSA2!U+7}royc`1saGBTNvX#`gEWbj?S*J5Oql7Z$
z)%RB3ve0wO5Fis?A*=kd&`V7$FF1^C!y>l6<j2{rm^s at uvN$-~m5j4pBdh$J<34^e
z7NOOw at 1+MY76UlPr61uNM9M&<43OoWdx8MYan-Jz<0@~l at TFXw<636566d&<S!Jay
zuViA&%d?!NT4ugQ8*=8bcQ|YKmvct`f?fWi?c^_*<u7>UFLIN=sF(ajt>mxHkJE#n
zIXUF7&X4m#KCApt0?rDN=o~p8<g?C^b3s1q961m8nX^Ft>KwWF$!DD(N56d5`ElgS
zXPqBMJwD at Pf}<WNkRx9HsvHA3+U2v#F_0r&KC2u9Im+d;$`N*z`pl(`a*lKPtMlU+
zm(MysE@=3S63~p5Z*-0v+45QE$WhJD9Mkew=g9FapLLEL%ko+0$8jv5b$(p2_?aVE
z{;K>?0<Kmf(K&Jy%V(V<S1I|dbL7~S&pJnrTYl!KmA^Vaj#&Au^W$ih&pJPjRD4DW
zI8yly*B$w*Q*uq=XRaCYSAS2VP(JH)To?FR46Gk8(*ni762vhhV?U6iMogbT>Q30X
zNXL=m=L^jmNV5s9GM2}|QQ^yV%fWFWPdlgy1049?A)1id(IML(p7%I7KGYW2K`RIb
zEQM$&umW*d$hO$QfdMYckRcp7L at 0#pm>gp9&~f4501?a7!2zPbMF)r#jv{iHh_k at K
zosQW0SjB- at Er%#T?*AOh*@5-T!2zT4p#qd+Vh0C}eikgSTbK?kIv19oO at bv3&vFTN
zC?iJ@$}i at QLv}ZE4lE81mH;Ib7YE&;4h|rdBNd=V$Xje-hqyT8X)$tWR5?Te(!J^s
z_atpV2ZxhtFB&;w^*Y4JQBSay<ltC#H&m?-8acAtaEMZr{6s0Lh1kL2CMKRk?Qh6O
zBS*2Q;|I2;>~Ey at 9FPHYZ#k5aLl(L>WT|zCkt3zyfQ6RAx5{D3C%C(j;pY&CCB1SE
z4rJJSMC at -`@(wX_xYs}%ikU-e*CD<Q88_nFpqb{N!d7Lak)xibk)!G?dmG7-Moyr5
zg1yWI$|3#?e?cgJfDB?PZilp-_%lQ%I~tmx4ytdJi<mWZ5}|~ga;ir;<rFj3xEz%@
zXx6AYQ<club*LQ;XMpTzI7uC{qv0;d!KsNMO at yA1U4nyC)9VM?#u&ArlOajF2C9oP
zkf^SwUBhS^$T(nC5qadw^5AhmHWUXaAeaJZasiTxLlqEQ0W^34!6o?uvfbDxfKnxu
zgR~rK0x9`8{1Bu7HmNfp*u)+MWa}wnaci(sAqATX2>3y^I2;N%JN-fCyv~lb<Hi+I
zR!;&Be&D1R`xZ7QYp2q3+QYbGTABCiF;09VB_DUCNFd#%Ae)kVJxIYOY6p<D(>aih
zdjy;ebIeh*0J3(3EHM`mBL^RBW+^fif|nO#TzIH#(TGN%Q3@#-rAGnDsJeklK})F>
zL~mhZ21eO(bB|_2){kQXQqYOU1+?o&&xaSzUnK>b(+lNcp{XDYi%m!s5vU4B4H3u<
z2RxM^)QwLap&zrHAarHgQV{9^M?Ilik%~eOB5Dd<Q>qG#dQvDasIXC4$Vi5iY(MCM
zL4|=p5g9yG8D3&AA`uv&NhKFBqAg`Ciq_zI!Wc2DAk-UP2uGk;{36`yF_swRqrw1W
zld6FvjuAC^#53Y8xp9jmg+f~JiO&EKHPmfHUE)Vw!gdyQ@`F at N^ofSTCuJ6m!pV%Z
z>_XN0qEV<tAqAf(7eMl9DF=)i`qV0V*2#*`^%**Y6GF{qQ7o#RMYE_0D9#eD^hhfM
z2E&LYrglM_Nr|Xma0(<1BTf at 4P$U5(EC4`Ef6z$rF-c81FoTdlrV6?P3AkxTTGUT9
z7qYY=_+%+U0?@%hDQQtZRVmOBvJ6OJw2Fi(iGo3yC0a>o8_YO%1dE9S5kT%D0l}w9
z#Cggk2vYE2$0v{@RGQ06{HH1hDj4unRY=^DECPV2ULgH1fS{9Q5s(8E+D^pa3zR|W
z#r>5U<z8Z6u(4QXDj6>yKk6R%p4rX}dZWg`qoOXol*Pg6jlqr-438uRC$+I)wka1W
zh`}j7DnN2_cM6C)$~hPy7){O~^ruG=jb!st$zcC1QdUuwg4TyfS!z);^!Wg?59x6N
zlrbaI%8N!wAdNtXSw-D^v_o|BQOg*ys2MKM=ps-meSx5UtM at I33w;q{>jHpITAwOL
z0Wb-mPQiJYYGP^?`GCkRWDd)PJW8u5h}KhDRYgD1fq(?aUg<Cdd;!WdlK?2CYrUvY
z^f;wL(Nb}@sL at M(qI84=LBTu2e5p^Us0DL?a8C{~>9k(<qDm3v0Xga<hlhadE?G)&
zf at DeMz(q^hcA~%}97+yNaM}by2VF{l;0vI?1rU6CT2P_ra?(n{{8EY8SE at IuQ7~>r
zOqGHGE}2lL1d@=0f?7pt0LT`VrPE6}V$_qMRQg|nqf}@WUcpCNS(_v}N=-irk5W<<
zA0?C0TTB*NAib4F;VAW{M&axij2dEAa1=<Gl&Y6Eb&67--m)pt%ZbEFX*souPEE5#
z=?QO|El_0aA{8#hE~0PDNz6{vV$@I>0TKzQ*IbF3Qp*CIAIMs|$eU_Kb*F>}!Ww7J
zqE$rKO6ZhYW>xGIwGkRx!l%?I_LkEb(E;9~R#-12K$GfPDV;)x8T1ASu~!j at 8Y)#O
zF;vRD&_PrxEqhQpAB!z=Q$?mm!2+aGph;;#NOnS~a^@fvTguzgDJ-;T6)oqe5v`&^
zs<f0%s*DtgsnQKbrJ_caL{+I-;Z2<)=X=PQgtCH3V5Dv^+1iLw_ohZMQVvlq1)VO0
zY;U-2L9{8 at M9LzoEsm0d&!i at wN-et_8RimWrB*6$ImJ<fluAYqXc{ic;=vnBwv at Hg
zX*opIFsId`ha#1XX0w%yL|ZA<<4q-_tQ{7ac8gk*y+uXH0`4s;LJbXWVxT&yi6n9g
z4gi5{e9T+HD4saPk%G;^{RAM3rxT-iXm^=!G&{65kQge+CAroTlDTLJS=J<s3O-k6
zNFCwO_P&Ht!RI7$aH_S;n}&y4%X~PFvDZQZ6%-`1-G at t~k)mP-q7mdc3TdU)*@Zr0
zee1_qEe%28kijj%y(R~+=>%eZ%j}kzA=-E{3ngxdYb^8T;%L&7QKv^k2FPmT!%?jB
zmX(pmNq7tmX{2D3GZrl1oTjR(vM#EE$|%;*X5+eu4LCF7C|0^%0*g!zsGpP!qXTA!
zoiq7lM}sI7tMFogODFqq6bFhGAn`?N at Jrk^+!^HKC^k~m&SZvs#Y+y81No|mTm*%&
zBdIx|9c_qum;|T?4rnC-@)h4aODx9^Dnec2ij-FN;Yz4%WQi;al!2>4vQ-nwUR~BG
zA31*X<IvI(M;y0y$Pu871{ot9<eEZ`A!G-DARdl!8Sn5mFohJ9LtH232p7mQt94K%
zLA7+ at xDJ}sY%bCEJ{;jn5BqQ(43sUlL?Fp29?UY~W055W$w<McOC$kFMl54bCAR1!
zBq@*%c4PrM>pAe5GD~2Rs+L41`AWqlG|43ALKq;LT0)bQPExT+GK^GklIR<WNs at O(
z5Lp2hM0Jqd*lQ9Q!?7TNF$$oC1#m1XfW}n-yZ~reUush&Lp>EhEfqk;6ab$BCQFVz
zk#OXx#o3o?QprqC+}fEhkp)5*SU`?5NypKky3CiOLC)a3d}X7hT&DN{9y#>`wA+e<
z0dXMAj0#T%HXwUPH6}M&5;p-U2ZQXF(EfG;^2ywR9~O{it(S^RksKs2B~Ugv5}2ac
zBr-+SLPApld4z|@%uGdlN_a{j-A{nR$6`u!3J!V+X%eYgOL&S>&^kUvB|z=q&6BjK
z9o};wq+tU;sX#OeUcnHEM)8;Zr$k+-i4X0rT38|;)R>W=24x&dC<C~q|NTUv$ZIWr
z>{K;xB%A@~+N5B&8Yzn75Cz~TU8^5M^<f=KQ;3aC_cNYD?JY5y+hAEjW#NL^fu_)q
zy{jR6SEiQ4HW-NBMeKwsG_{L- at R9%rs2iaaL)&0d`pACVPb_VN!HK1vtEB`wSQxCz
zi6yZP3QFh#79}K>*adEO1f#U#Z-<z at C2b<{3xWRZLkV9{`y7d12&CT%qeDU%P#j5u
z_EAmj&uzHQgQLShlvGkuODF&?1 at sJ)5C$bdizuM`Ug8&&1i1^~5K_S8Y#mUtY}^MU
zih^b1HrPN=8Hg at 05OfBD&_Gs6=KxX-x!4;BVgqe9 at xhB(j8{`J*rYQh)Ij1dyzpj;
zHGCx6K$@OK=KAd|!(ZY9^bqrx*g!QRv5U5!r6M$GxGGy1*;p7=w=ha$VQLo{pekTM
zLsZ^KIoq`qoEma^83;y!EIEh18o}7S*^n(v{}vJ;JDoteie%);fw~@ra*S?aJc%t8
zZMgvMv at DDQsxcWLn;>zZ25?)WN`(z2C}pP0QL!3(0d#~Kh|0*2MX>|8p;jFTtH_2{
zzX!;6T84m})atZiD{CooHd1Sp$(gN at no$P3h{cq+c{$FPcp#WPC~*J{Vn7rpfCp`W
zEGC at +Q1)zdPFluIi_4mh0YG*kPbUy}jZy?KY5@?Xz$FI)C1)sXNRd{I3_zBGz5qb!
zW0gSqSRe;Dj>MRN8?rzKApwFy+z^1EFp&Au)`OIVSH+Qv(qGCFbMGY)GYAFekfACB
zMA>xCG)keiq$1)8X15~+3r7<d5Lr05hr)YnC>#cpK;$OXpcyKyjjv4~0D?h%jr<ir
z2^BySC;$!s7L%JOk!f21W+k#!5 at yQkK!z+3R4EXd;LuedvN2L*BWEWtMOjqZ2!QM#
zZm0lFvFK-!r>XrFFva3zQ4&=slrK;m7%;Puha9xSxCTbIAV1j>0!n8nDe{C>hIWD&
z*&@VDAPY*{9a3a1ujQaSQBVWXreY{UiZaW_3J?t-YbGG*V5KkzwdY5r0NE^DgaFwr
zTtE=IfcNT9Z|<c5*)TNnaN-0$T?*Opvk at U>FKWmJ*ARU0016>T7-HZgG3%ru>qOHA
zS&)M>B|u`d4P>3Dgdrsd2NEDSFc$=Z1LvTs$g<Jro(4(C$K5s{_#~_gkbJbk0l_C8
z1`K|-mTCcOLk}rChb|dFbdD~jI=oa;<SR#1NPv9B3I>$6l5V2HMdUPdkX;e&BtR4%
z-KI)RXQ6z6oFr^~Kz0eIE+9y}Rjp~o7zh$XP%{BXDz**+(OCWxtt2m&>KwQ~G7xNj
zJX^tIWTS@{5Nrrg7YH_dC6HBOF_8dl+DL;&0H64Y0l|kRWfEG%2C{ziyh92;*@6Iq
z&q&Fq6Od0s@@WV@?AnlnSi}aBO%jMjtip`MB33Og7O_9y0mWlv<G8{=7MoZ#mRQ8t
z(?}BOG8SGeVx53Ck0z0`O=)AXh$TB{LDr7zA0P*a;^V;sOm>m7O5FS*0Vx<f2gnYi
zYYs=Rq>y<m@!HtFi4+YeRbq*G+#msOfE*w)LnLNflh9bwB-9X^gl<7YLOw-84WUV>
z{ACvi70#g`LrkKj#k#?5EXWM?Vu84N>Xwiprledwbpui_N~^KN9Avtms3f6mnFj}%
z+ at t_#b-I|zx=K`*c-czQf)9=?LJl!4<q$KFd|YXefNV0*#XyF~NTg(=sz(B_>8_#0
zVj$T3*mo>3Pq*X)mL;~3=v%R@)ll%KFB-Au$W9Dvyj3HRwc|+)q~wzUB8D~EK&0#s
z(RmUYjJ>`{*_tvcu-GAA87mSUETM~7d&wpW!e54%)I$P<@%D+7SPX2e6U<IFE;LgC
z(L&<A1w<Zl&H-rkv_xhaDN3yRUm`P&6eTuNw2=7qkptUDMvy=IL#;6qo~hG{*H2m=
zZbK^vPI*a-HkKewlNvo@^04{DC!+HJpGqr+rEGezZ<g9|mWqjKq~H at DG^F4&Qq;~!
z+5gfX60T{asGX65O-tDyB1MVCUX}1-K(wa3$O359Pb at xhHbW|{$x(rFvvwTE0dm?X
ztDD4d8mZJy(sKT5DZ?3*epD8*%0UhrRSul};xWKV#nDCs6cB78Wr;cejhwwlUniuj
zAK!`yfVpT%<)l$dIaX9!*<ooZTT_*S7J|-~7J`x5Y_t!I6l^-J?66c0v=59FY~t@{
ziK&H@*9jPe@&zCWEio947>t$}l)CA}GF6Qv;S7pW8L86D)~Nt$Dcz@};L|yXKUL?z
z?xPC^X+ft<9Wi1>%0kmz&~ovos?^-M87YU0mU4KCxg>_HY`$TA%5b6P2(XSG0l}w-
zy~HxeycdI3sc(#Mc9fKj)~%6B_bDmZj1;w#v at 9|02_r}S#D5DZ_~e)!h{J`xJwVh>
zOGULPsca0zoKi-xmV(cuC7+gp%}6<1#K;Puzg42}LB`>trC`%iu_h>GiN&6v&kGRs
z)2XRkOltO?>N3mSinQ!KEtS at ko)*=jrQlQ3Ou}JRT8W4?QudvsmAF_VmDZ$^6{B5Q
zlY!!4qv}P8B}&%FQ9pIE3NZ+k#ffu6TTF|>h{0%5ODqHTO#y*&?1=r8V6>=7jT&01
zQAHzW2l8+U4}wwRtk6?3U_>h6QuI4P$^k<X7Fz<Q#5fM5hLJE!NZEzbLxI#VM#=%B
zr7~btcHq-e(J!j;s9#i9NzAP-rsx;NCOdr5I(UZ^X~h;rj0Ni<4WLdDg+c<LOhZ#=
zs8ueID#N5k9!AO%>pW0mBb63XIkSZnH5G<VONC*iY$25c6^4=8Y_hx1IoNEXFtpUL
zv5iGxC^;2|&RG<OmfC!>>(Em0sWl2OwXqbO4%o2UQmLJig3qLt+KH43LrbYJbPn8r
z7^&1wr8R6UF%^bMZS#q5MU{dI!{lM}QDLYxDv%08X?z at X*i!HrDfpC<lmKR>Bm-$1
z8Yychsxy!Z!$`@dq+*Lu&9cPGCC_D7BA#_>Dh!j_=A*(eQkze#L!C4ERR7a9RB0tr
zT1h2T+DK75BemF6w6x?P;nF58*(gPc9afwIAo*n8;O#055Cy3(wA6}HfMO({OcoVO
zt<$o0T8i449LT4oXiXy}o0i&a$`;{tlZa}a)>&6bRJBrZn9j&f6qUqP8!7mVl)Wc2
z9ie@;l&z_xVo6AIJLqfBEhLtNmf9^ZmV}auR?tw!F}qyirF9OLPGB3;kWkajp}e&W
z9)K8xFeIp3C2$(?+XBHTM;rkTWk`rr4rb}}ffS6&mm;y#2BIwt1fPLu3j;x?q0E1}
zhOty(hJaom@`X}YLs>$m;VYqeAVJe`no3Ej1Q?qsa<-}JdU_c&6azs?Ip2*Gxf_TP
zY9M=1r?p26-3 at 3pQgF6Qpb8+^5F<hRz(M=KV9s~-iaQ&dQ=XAHOvO2mvP$i^0byvT
z$iXUM+(-ge1Hoz_SPcZLfgsgTc7!~u2#`o>BLyE`Jr^nH;HMDCI?DbN79^m!GaPaZ
z$C|Uyob_^h5g_<*S|SgEPav!W(V-Y+fT*C1GC=SdXl6a6;4 at P28HjwLlq3h_D`7b>
zIoNiH2BKJ8;}Q=8tXd9L0hX5IiVKW3l7)zG@~F4K(M^CXH5Uv(mRdp1W&>GjEoG at S
zWT`boQ61cQ;eZgW!6-7p$PHm4Xh>K>?AjmX-4Tg?mbgBMk%@t*x`D{gKonXa3oR~1
z`oaO(BpQN7Lr!yfy%b(j5K6EEAREM+0RzBn5N~dtfx(Cn4J8L9CXlp(n&>>$L>kt|
zq+vr*b3n|7Qjil}<|Yg~a2g0snH(&)wPyeXr;Ip2P#Vat(b<8}K)Yis0{|u?_;hut
z01UJTjx6;mGqu!9iPbxx3flFsB8FgnvcvfpODv1M%7cr&Xh2BOcm_(_Q5izawi9It
zjGBlt1Vl|l83MAms3HN`TU3UKSpuW95g=+}plLZs$;WvH2tETrXCT-FvdmUI1|axE
z2?2snln at MQ@F~Ru3_=TYe8 at c;kjwa>3IdioQUw7^9jStV&6os49d!@L9zl&rF8N9d
zm25++x1f);6y=76ZYKew8ov_mti~@iAImD^SK^)Z_(g0T<Z5g}+p`Wbe({HL8NUeA
zveQs8sG)^WBpZU$NKr`x!D*m1Trionl;u`?1GbI?I;(*Jg at oG3oKk_#d<hH**nPBH
z070T&F_SoF1JRHMg3mzkX=v>X5S?NT7Kw3IV*zL4W>`pAvyq}6^3E|!Ec!#WBlQOw
zkU9%NIK=c{W6#9?;{G2HG at 6_m#6Yy1fnZb<SOS|31fzkdl!nw21|nYrk*}D$I08hz
z2C_$}*I8z233)*d&~76+d*E^psoh3Y4N4`;9gYUF+eJ}J9J7JaTpZ^T$1H9GKz6%M
z3pNAMSYnkS0oXL8!oV<-LQr4GD|;+5HHO@%1ZcMwPbYN4$?1eDy=VrRH4?F`XAL!j
zfy_)LpgJ%RnPFZ~qez^xyv72E;-gn(oKYRffjYz}zu5DDc56``NP$>p`UrICL<LAx
zFvNDDl?G6yrUnp4F;aj=3>!d>DMrWxf=1#Jv4aMU9Q^~LmGBt}Bsf{@H9%BL$v~z6
z`dk6<C;%1!lvF~J<%M`auxQ9RugWix$H-cqqYuD{t$8PL#kxpp_s%j)Ot8Ldlm<6$
zOcN<<B9)S>6vYFNjXr9EW|ikSIlOsv0WqqAJCg*0Spt?>W?IoE394k0aD<83ph9#N
zAs1135d=O2<SZ|>0dgS8bd{S9b)7glB;*tckgtKr7crnLg^HM<^$Touy*DR{oEpG6
z0Xn&I7Z7v;S!8abp_-)?d3qP9GUVcFAQ%w~#jIs<<>@ydnogIFb45eW74gX9sGEeU
zcVwc7o|af#lYo83QyQct8^c}!?fP+HHBzui92tu&ODj*+(GK9#Nw~Bchzja{m$}67
zF{EYf6p2{Ws+BpFR9YVzrE)VWeD3T>22cWm+DJJLB?ljlLjze+EoIAU$RR?A63eB6
zxFCqx$*GryY*-CZRc{`PAOZLcB%id94;LYwGaXb0+I$?~MrzlCi;$6m%|NgjXxEPJ
zZ;`UZT!wVnxC|KxJ_Et0i^&zqK$7ru6FHECM~{FcQMKb5gjh*RxdiD1oB*<V!FWQx
zN~8G5`z_qvL5g}9DJTpCg>rMV$eaUeN%P?pK%}0OgL43DI8~@z6bQ3H=s61{DjZ^)
zQ;bT*sf<bv9bBuAJbYwl;=_Tj`NgVKiN&ha5bdQC$iNpP5V0plD&eb2$w~Msr=G;4
zDgY`0@`ex!&Tqx}#sh6Y<PJN82C1Cx2MVdWgALZ6h|wQ>9Z9e>5zmDK<vumFJjm(2
zvK%CU)Ie!vd5$&40lYkh#*}tNBm2r?2vyE6IK#C9ma}@?B_d+f6bDZNQ4-B4^P1<O
zcn*2XRVaY$GgSlGBCBQAS8b4auo)<KqlsG;5M8gc6C+rbOF3MJ<DO}0?JDz2j?s14
z9^~vZZhG-FN1ZIFDqNI)1xVRUO6RMvPwtx`M%5)|0+$frIdRAUf(4Dw1ma`j>u!L^
zLJsQyL8lB2`^K?AIl~s09w2fs5UnLQ;0MYbVHljq7%eULgsD%!NMvF5uB3t-9cE!P
zj)hqrlLm#cFz1DqbNX3WdQvtna&wp^=b+_#GH6NAD!UEG-fRlaY`H#6Z9wEi9OgO1
zEWLUcMcS5oNc9EcZAmI;-oPZq{X5Ku3P8Q(2h8z94?UoaWSIkUpBRI+MNS<c)+ at H5
z>>?pj3P3u83P8 at n5CaTK-PYnrRylC?>t^Tdmlp$AZV6za=Lithl=~t9*|snoM9j9u
zNE3{<b;u}`pj<gj2$YaqEtM&PSBRLH%0L%H%tf9PLy9Wuv7+~vLeA-e_e-Ra)jBBk
zQvM|^mcfadv)r6La`KElC#xolkevA&2p$7bF#|zkpp0LtOt}QiNI{~YocJ5a86XsL
z;%^`t(m;z%-2|r78a9+zLTOEEG^2qwA7`AF%8XNaD6cMyDQEsBfz8JS)<_K>(pt5X
zz*>{QW>a2W$(OTJCy-qpiCJPUu|{t5afvljn~(k>BeiR%V$g(y3#?AS1=c{T?<9uT
zNNqOGcq6shWW%T0M;u0`#Oj54;Zqwv1#Ldsv^qQ5v<BLIoa;tv^U+&mq;~B%(Y2KG
z+(4U+v)o8+Hi?WhB^FCp)kG{^4Q)O($)z5g<T^V}aszEXndB-5PI8mLuANx9I)Pm~
zu6-u0T{|xJTFOOGAV&qKxRKlS;|w=ao6oj$<vKBwz~)m9B&nTPxvFfol`D}e`Z0Qr
z4Yb*8D;GDR*$GVTSYp{R>YVNRamT2$lk*~#fGetz+I-wP8mV17?i`KO at L?Zo*G^nV
zI$w)TB3IO761ifaVMB at KnlU2>pIYMOqA_J?Aru(uPb?l4yCQ3S08Mwb?8{|i(Bn`W
zcn=LyF;ygT#X$0jC8A=LH6$C|`FM=A(^A$>L)6YBAR9MFEHOPuI347J;y=<5tts!S
zKx*m-XtgFh4lJ7#lX^w%vL$xKNUhckkQZ7R(1jeprZzDWxuW*5cpnFu$(B~)r40m|
zymcKYvE#7LRf%oQf|vG9M at sOtuBxS3@F4iqj!%Nl4FsQosGWhVoj5loaK%8jrk0XT
zL)1<Jn{oDs)>K;p#6fZ`WK0E)ThV#qCSoJ2EwnVU7!bI|UDAM2xsoL6+CVTG2u9tW
zauTf?oSFqMU`h^P)Cp|Of_O8lS!~TB5!iZc%Kll#w*;;jDKZntB3r5h(9X{GBq8+3
zBB5!Z^RN|%L}VMOJs51oA#o`>fvq?Y?O<hQD~<r!9;*`DiUX%VP9+wjTPLyk=xS0&
zRk$OD{UgU#xJ|*RMnId<Hc9Y0r&SIW_C{rg14CPC4?bIU;1JACVA?Yf=SW71GaU`l
z$~c~}<rW`KGi<5FC$TB2x!|<76Od2b{&0R<kg5Y4PL4Ra%+12qaEF)G%7acRowIF}
z$klE}YWP at YZW@f-uAyy~$X#zbfvr3wEX7D|KHDgPr^d?HHcH?Pv86VfZIr+dVI^Q-
zyrz(IEDi>inEQSsx7*WJ9 at sS632Z*wD3Kr*odZ2>2HJeKQ6eEMN=;zzg|wnEu&K47
z%|_*6GBdSfiEXn4n=~qJ&US3aY-snMWtJd;T|3(-f$46M*hYzjuxM&qb- at 0#(%Py6
zSAp14yDcrFgeB(A0~f%tm^4caMEwjz{WPR*k>Fc6EWu|WYG)FF&p_}Qh}s!wv&pHJ
zBBpLJ32Zi7i(n+^da%T{9+7Yr-4 at DYE$%>+j<ZN(yQgdeBv4$|3?mMda24IxqD54<
zix$xkWmao=AoYcU>aspj<`ROU7Du_RPlElyfCf;7K%vb|eO&0}sy<yj2|ckeifUmq
zs!%?w2Kv%HDm1xu&r8CefzcTjw#K#uiKy0*AQ1ztv4&e}%<xdx?}-wYAQ4H+a@!jU
zoJ(7&?YZl)=dN7Hr%CLYD;M$^sm*84T--)r=WEy6-cHE1d^!g?QN}x+YysIL$jT~_
zBVr`6$g)dNa+!`A%5;?WmtBIEa$sr5{?b{?eAHr;S=nE5`JPFPG8-w&tkQDksjaqL
zrzh{n;VYz7j&bbSEy%fKeB=(!CY?mwSgIp9L*xyZKzI)@L&TFS!5X?XI9`=Cqpq#v
z3v_`JN1=uh1}WDQUxwEJ8xlY~D13-_;&9+`EbfQ|6q^bVwKkBY;9P<fH4(_0AZdVV
zIoA*aL1G|C3`8><h?*E^^Km2^Dfpym5np9m84zq*%5i9*=~M(@vF&L{1A@&!ut^KC
z#G>EmRzsi^^Wa-&fXqXn{9F%QhLFnd^%#ge3}j>J1RTp6qQnNG#0GL)s06acY6vzZ
z6?ccc#^;b191LVV=<(q_j6BgYa+JbAl)^xcPNqg$wws1*Hx1ct3evVPkagBl!-ps+
zn~j!*Nno?d+m!k-n at yaNl(NLKEm28iTcV-ON6SLz%x#H*HXkhuBeiQs%fd+Q+R3O;
z6f!C_wAnZ+#C?eP39uOmHi0ZLw<SgnJ_EsLAovVKYidaSWFYtq1fN7}B3ul71{yv{
zZ8qvMxt;@3uo-CAj*3jzS;i}C#}dnkRaK=b!;4q!e>vFG&~8m?GLr}SbOQ2eX!FtC
zq0`c`FwkyI>NouuEeiu}Hd+?uF~i0ZbLN at UHXpU2PEBoSpv}i!i;;p4+d@`U-p=F7
z3kW_V1)qUnGZ1VBf=xr&wW!Qw*P<cVBmqmTj`f63><yj7=A*qKuWBJJYe(NLAo=L7
z2LvDPN+qPVVIaqfmVysIxFiWsI|I?027=8%u<4ed4Pu~aOO}`?<w`CN4+E{%RIlpr
zg-Y;)PmNf4RmVW^83;ZD!Dpc1Lk>2Ztyk2G<#M4BmNZmPKS#x4pqUCNvUog<-0D7g
zS4VY}dRIr9Ui=+eYAY7JqHa~%RxH}z!KN2~ha8#!qI&XXC?K1YFA at V<%_;s4S;-+q
z_4FDl4i6Et$YS|$wFl&Q(U7B4LsZZ}5Xvq8NXzQ!1Ryk!qlL$oNB}|&safP&SX}#$
z>fxRz4nw?O3 at pJ*z~ECsSHL!*Y+DqIY+DFfXi+b!y0UT6Nl2-nWhdcMCQurwT|p`r
zBenS~GYOB`6%>yLgMc7q1vLfOaE}G0vTadP*|unC*jQrOxM(@}#GM2wdyrvAfZ+3I
z6eJ*fkfADo;FFgo0qxp}OGITRE)fmECs#%xyw<LrxI}aUu<62!QKqGK_lZk{QkGb}
zsVa%67Y*&!l<ka`+I*s1wAAJkmxz|ye4<>m)UKU4M3j^c5&4xEga)&Ad at mCaYzCUX
zV~NEjq93$-Ph28eYWJQ5;)ztbL^QN&ryL?$YSm6TM6}eZopOk1sZ~1!7 at Fo*4iS}r
z%0)T>B^Hl}>Je<%tkmKV(Wy=Skk;mt_W*SQn at _e?T57c>LV>J&<&;Jx5O;`%cJ1g(
z)x{Bah)!VIk|h?0h?d*+lTDS9%BD&~yESdq0`DnIb)I43w;4GTxHSN at YiFw#afg_+
zVDpiy$8i-Za*+9<-s#~xwb)RA4YNp~X-k$^93rYfwq{Wd5iK?KLt48vZM}lSaI0Bt
zy&~=q-B{NC3ws&6HN_pGC~Um~k2*3FTSvJ=G-O+9b4WQvlw356hHOm at P5m6oA)-jc
zm#U%Nn$#=0nA9r<+I?s16`UGa32eOrU%4%{YiH>dwy~HkirUsJ at Yhm#amvEuY3E_L
zrma`xogQ5_TdycLiOSd3E9#XUEk$M$If3iYS$H*=EI%rwEWDPo at PsU}<w*r(W9cMp
zEDhOM8nW;jvhV`MUt%D;MoTR|`F#T;<;3D)3+`&S*zAojUJtN{<*s-AnCM65ixSH%
z?^<rxPwsg)Qd2*qwX?H4!jM|^kbB+bG1>&C;fPI5h)q?9P2R+;3`<39YC~*DiB0R_
z3LShh#KfirfkhYUoU8+D%AJ at k?=a;~%$9$cawlf%*qU-DUhd;esYNGhUhC)@=`ANQ
zv8l1t!150B8z(l)KTNq3n<zxhV7Zx)#_}@}JJr(i5>xI}OY4Y<awlHP+eEn&ujMI*
z+;TWc4J>alzj0!={Kb?zF<Zyjlshqtiqti;oW at M!)V`u6bs90h40hrbMQP+tyrL?N
z-0(^bEblScEcY?76SHN0L2j8`#AKk#AU4X8m<(EOX+OxV<0WD<5{R8jN~I^4Mo^A?
zEKIe>Z4l+?8^KZo>qH6PSk7Q#CkD}Ty8hOw64RKrAU3m$*s1p|e=y{hIwW?Q)s{k}
z+=<sxh?G0cYD<+!4J>WKR8GudPN`Dk8*8S))OW({eL9UG6 at 6kb+tgq(8_XIT%o-a^
zUW3{98jChDn7js?QO6p{`wdzTAmR_Hbg7;6i8u=_x!u;{F0|zKsFU{{jND0|s5c&T
z{+2#L8N|*qa=WeNtp_U~CtgdlNDZ8Hi at M)k=j5bY#Cd3Pa?%^>JqMHC?mv0a!KAnJ
z21 at FrHQ<l8Tgypns9W51o=#dr?s2#BG_{c$IOz?<h1t0}=?%o9I?0`wo%9BN8^bA$
zQ#)EmPN;#C)_^bEDZLY~b=HLR)?pK|JwI?IpMF+qV4XNIl|3`XBWvo+y_<!d*hJ6h
z_7XG8V5eF-=^VM~UFV}h{OKyf>lIw}#OF<n_O&p0)m3+pgV$j8D-N}3P2dSJm*wI;
zU@*%!l%viTMx8B;_O&pWEevK0liB1+W{uge7Dm5X*ol|@YRR2=#ouT0F}zX(_N?`U
z6SH{z^b_LtGuVk)4mOP3iJ84@@|4ZFNn at DNLTY=Cb|iM<74M%;&ptN!u#YWlYAiKi
zFI(R at F>__H<W9^qs4ck at Gq>tSPMg}oPRv|yEV&ae*BeXj#LM- at k~{Hoy%D+8fGdtk
z#TCcGPRz1%*X<%(cY~dnx#C#QIx&lH(4;raXm{}qD!C8W8~v;g*BcAlHTIEn2b13L
zvIg?rg7t*W>?5ZS<_VkGNBo3ZE{;NjotSCAnmpwU!lW_G;N^N_rE%irOt$1syfTw@
zKH at JVmKuo5(0t>>ET<7h?!+u^LnC)$7RRBHJ27*;F(r~i37v-PjU{*DmD4Jd#)+4<
ztd-vIN)2euTHiP^)0#DMOM9X1oOGAmpKhhG$F&b_SxfH3Ok38HJMnT&vgA&@PPz*}
zNol8%5D3;%YT%^3<RuJ~lauz6>(ni|6EjyOOYX$%q`Txb43ox5cgcGgmfWevPPz-%
zsN4BF=`MLKL!OlyIB74ra^2+Wq`eT#Zs+8ryKsT0liaDTX%$=fIMtX|u_bq^v6Jpn
zx3KF`<fOag9(MDrrMsjCw3e-JoS11XTXH96C*6gYF6}h5mQ8vm-K8#M*CnF0Y^8DH
zrL}Cyop@<0TXMU`@?wj~Sp#{uMW^!R?%Trlxc24l+mhSN@;Zzqx0!vp_qOCt%uc#X
zE@(GtoOGAm&~C|{c%5{YuN<M8c_3G|TTeJKJ83UpOMCG}B)hE<`eB#UNq5Qhr6x}&
z-Q_E19;!d&0#hrE6R(r*k~>UI8YkT)x0s4t`oKwh$xWu#6HaYSi`tSqwKaF*mfWeW
zopcv|4%1HKWOpH?!Ab7a*0iWio=&<8FG at Pe4X@NdPFZ!kIB73=56a|ZX)pAFlkW1R
zMQx>VVx~oH$(@*;beFp7RP#FNE_sQ{JnN*p)N52Gz2TJ_IB73mC++3yq`l-WR4Z4f
zwsx|-<aH~P#z}X{-Kdt_Ff%gIsm4yaOTB)jOX{S%@G73&Dwgh&8gQp?7 at V{ht`TvP
zJ25-yE_r9mde*6}Ez1ifb<$nxZ7y9pC*7rfKETMGc%5{Y`UL@%MvhZupTQc)i7JT1
zWg=&)_6M{QHu*S>WHJm4`vXdAf54!$KcJ<o51f2*cO{<ZK(xN#NVGqod8`k#%dycC
zqgzhRBrcg(9Dv`#ptmsC1xsbPxS4M_KrD=sSQsU-FbZN}P+J&Px3Cklc)A&Lgc6C%
z$6zO34iNpUc*gaXPPxX_77$Ur)|L?=xlS8S<sa9noLonCAR%6EcXA!sfrON!q=wDO
zb)@|0CQm13C)be*Ce&%1Tu1VQza~#7*OBc^2k-xI9Z9I6^#ppy!Zx$*Q^(tHPOc+~
zLe%MPw>s0HZ!9_b#=>@uB_Pp~+q`lcmXSL-q7esX=VLjdIg0G)LSl?H^R(rjq1>r9
zPL5ysy<d~w$?<E47~)wc$FCh^NV!vOoE*P)oFQJ&wOb1qBUy2AhpHnLPy>8IsU<#v
z7;Rx;l-gi1 at p;a~*M6zS4CeA|Fx82{=mY(%{05M`WyoJN!m|)CANds^OU`Hc3I*kO
zR&J6cM*qpJ62vIA-0(-tGV?tY)<7Ap3}YomspU0RV9sj&Lv`{qLGu19<($>L<p`KF
zN?u4MM(O0ZotSCl$9RBQI;Kb9mpXhy4S;27V3><PekTqklKUwAebg`V(b<ce#KrBz
zkVRsq;n^24T3Yb;8TkpN#^o!B+QSD at -~(#M4;*>CHh>sqLLaHjNRFbZZ at 4hw1AIV8
zM#Y0l>Tkefe?uC%Ngv6$yvVDl#CSx0K!unk(<GK_7jl}bazPI<#|HHo0>HS{7R;K+
zX50FPql1?xQO-6rm_2MTN+IX=OoLkZ at qJWcmPl1d?hcTjw4of#@-sBRoT2ioH^k(U
zz5oUn>;lP0V*FHFsO>eQCz&2x@(vL(Y9?<rNeyU<%CFnt8*$w75 at cfJDnDsMEMrtL
zh{>sIBN~9Obu$gyQ8QBmm{t)Dz#E;BhI7f(h8n=MgczI*t7jS~E*g`V%c?-!3F8hQ
z%u1x9If-99;EdoW<O?fbeIuhrKSPVseg-+qGkgO5U_HUnWLP+`?I*x*Jpp?21Wiio
z3GRrkC%BfIC%BYbPk`Hgf at 9g#gfqsj3FnOUjC1W}%9v+3Wef{vjCn$4jQm;+sz}c*
z!nV|Sq?Ym5Ju9ZA8u6lK)US!~3D(_u0_ at fksJoscYGcg%ckqC0j16Xgs(X3(4ansa
zF?-ac;`le1W71$yTNun17G}jJ=A}+A#-+iA8C;^fjNFM=j7u%&S}i}ag7kE{$q%6r
zqdX#)F-2WqeIq@=`xu!_#-aKkn^)1T_z at efKNglzXcEaNG#|(=+7(ZL-C#M0QFB0k
z01Soz>BLai<?v-o%9SsWQ*Y at pAf~V$19B081gWzYau)&o^D_P9HUj;KTt}cD!A1KV
zf_!lTQK(#8Eldg{N3HSOdy+;bpO$m~X3}uBSr|pNFsf-`Coax4OYX$Q-J8f!1wZ_Z
zmYs at o%{;-WCcl-yG{Q_p1WabC24Z2>axxpa)wxImX4R;`!mQHUlMD+Zc%@O1CnuSO
z$*c3^6f-T#DJF02OAWY`TdBaT6#=pWwN?c9KyIBEmvWOACz<>d54gFM;|hGK8>g6+
z6Gw)X6W2;BCvaOiIdjuSx1Vt0<}@=;Skp}EA-g!4M7XR1>}rw%gWSU4wlKIY3~md9
z+QMKqSUgZVf7!(uj9Oc1z$-rvhSpFMnQ9*xyp|li_$4wW2d|mbNF{x(Mmp!QQUkbT
z19euD3>fVV6N0l3A3%*0K+b%805`(46qW|(Wik8$<n|+Aw;ut$^@y~%c?9h0m&))w
zS9Z)o#X{p7(bbYMmwCj<D9rwr-!o%psNc=Co<RYuXTWbgBR$UeU_K%Iyd#4j!0%9V
zSbjbi0i`0R2>_#4JwbOAwsYzU8U)r8sJ-<BxaECm<Vxef!r-<rsBue%VgR$qr5ZF3
zOe&fO76!F>g64r<q;Lxq8(u9^_&{!1)_}pS7AatG%k^d`6O9P$q=cI`gh?+RDOm>b
z(;sYe{vr(0Q=`dm?h%7oDQI92TNu3Z16xuD6_=~Vh3GUji{;)fJ(J|Ob;aaIuF4~&
zT7w!5wzV)*qscEQF%6jICK_V4wk!w0VAgY6jBS%Y4F|0y#MstaLQHM>v03CpjV3=B
zL`+_qWl{s`G_3>WZZFdo;&V{T2Oa^n^#upH^#!<1nW)lCnPhXqcXPleJ}EKYfWeI)
zAy9HK<H~=9QD;kzI$LrOTXOcYNsr#dG-VCcWjEN!l&So^NB90+tClJS(5+XG9t!p7
z)wg at qQr)`u?mT?hkk0*wcy<}kw_AnLOw at H~=>Pp22-UX(2KNf>)xUG!A-zU-uL?gQ
zf{-hJA5`u8RR16S8`yJTqfs at w_3PE&)4PI~R|Ox>?)^ji_8QW&V&7g}26rCZtNW0O
zL%R;_)}vyN0sV(o)HUcnxL1z~qyJBf07n&~e|%H%FaG_{zc8Mm{!(F at ql39A^GSsu
zFf2!@ivI9_O7Q<C-LN4;I}a{eG}Yh%1BU)@`TRe9|Gz!^|KsmQE_-n><JeracL#NB
zac9q$S9 at Nsm==5Yg-2R9x9`%rZprIEY39TXrQM2lt~c at TiZ#;K&Ydf5PFL5A#aFKm
z2 at X!%ZBTLd{(<h#ite53vDa(VJnt&$!w(%EaOGgJ&dZhrq<kE882>M%tgU+G%AG4$
z;+9n!c7D&VbEdl092?TDdCd9?f7b~3)+TvH_DbnS+)DI(b|*CSzy1Zbw3^)VeW9`M
zq6;Lg^>r&gD#Pjc%Om19AI!h;W0R5|8;cZsmhi`nC$Zyp{hj1ev(osPA7{*8S!wwG
zxF^$RWIWxc!OZPlzuvxa)bDe}_8yVtR$O|Y<IKP3tL5)nrB2A6=8GyW{bAh0%L9J>
zx-a*&3lEZx&gvT4s8rdkgFBRJ->y{SHa|Sr5P7*|`xzO|E~~nsZ{MdQu2miO>)$a4
zN8TOf*8h5^A$^a$PuG5Z<E53xj6ZktOo^$Bdu5NSUi-#>y$+1OesKQZWA3_pyq#2L
z at uO4u&vq;|wO^r0aqHL3TOM>LA!1uV=K<XwCEve%X34vIvpy$f*y7^W<wZch7niq}
z*l_ssiof?<&9TtG at 94*yZj5LcpTFpfF9R~}d+;f7N%u=}<(pP;EpuRc_T$Shg|=*b
zxX+d4d1ft|@!IF7dV6=D-WHZEsKWVi0pp9F4_JAyRh4b4kBpm|=Vc8K?|dK64EmvY
zjdkupX<XcWP8W=gd-!v=!fhsw&6TxI?uE6Z?lmgvxo<|5X<z-fr}-Ru`d!p(kBUW8
zif64qJnXlydsC(?Y!x*=wo at sW1wkQMi>0K`T0d)!kVf+!M#SdLTIX(LkD42%wau`m
zW&Y~bLc$j`S$8^WeRR&)A8)j;d85kkJe~Wxwwv`e`9;0r+dTVbO1RRuKthupFQbBv
zuc$k|)R@$t^W5kk+vob(sMnomESNB*P_1u`KKLh;%IUspc0I2g>sse at Nm#nN*z2E`
zMIFeQEurID_k>Yr-ba0GI=$G0jot-6-&zzFHNSbCViOK5t^ViIKTEpR%kt;_PFenX
zI(0+7-tA(2u8i&3zGPUBhy6O29I^0maD`_+1M|)*aQNpZITuzM)T2$hr at q}^yyz7f
zvZ%y^ABwdavT$U0@{DV4dulygQfYXPbhG|w>$PjLM?kyuD`HB!EGytMD9qo(Z*(cg
zu};zPU#8~$wERTy>Ni9Fn$vW^l#y-gG!APpw8W3U|GThFyAR>r7Q3x2^0<FO^-;@?
z_73s?FQCe%sf(8M4q9^~@K`thQ4I?<T;A|b!`kb*T*`21`MP at R$~|fEYjA^KcKx<%
z<*=E<roM07XTz at B`>*Ujm9+bPrsuW)xRHD3u-%Qe_uGCj^wLYe563^W{ZjcuwwEif
zU$}XA_k=zvr|-r$Em&Yz`IifZxBt at gOT&$qDmZ>=d|=1sA?w~Pc-QE+D~sdn4{NdS
z)sS&d{u=W1Ro;(-K6bybyyLk7aW7vTyma8im?Q1#&W&vF$*+0dEk*Af>vMWo)QD^@
zA;SWzUpl_^V*jZ1t539DbbYGZfj2|*JS|eKLH{(r1dsn|WaWKn;(ABBMsIslVQK!3
z4K5uEZFaov(n&)?Z$Edt+xWo4_8DqcP0TiOc>W9HGrV5-abm}e1AhDX at N3!gUj~lP
z5;rF>rNlpHqa!CoHcfW-D>Jrbqkl)F33h+_FzUO<llDJ)l^nR$rRw)LQ;p8N({*RY
zpMHrO at aSvS_^Qz^5f!U<nsg}rm9U|`T~>8`_T8xJ9gcPgh<+D!I8{>m#5B)3pGfWL
zsIfh2P{(C8XM}bRT6#ZfRT206zK>2gQeSYZvEf0N<~di?N~-Zkt?C~ijxG~lE!sPJ
zaI}Aw3Hf&xO3d8TCB9Ackcj0Y<I+XXiRch<FrrnBFV(kB`Y<Ky#Jj;&57+qIcG<mS
zp99YyKKZ$8l`lDm<{z3q(b4uu>cNw57p<7#-uh2jPX@&ADZQq>d$DVShXt3b`C;+i
z%DEF>P9A$8q*O at z)MZA5CBDhH(B;|e5&LI-Y+U_Wjs;0+^SOS@@L_v~nAejN4-`$V
z5OO$E%<JMGAAKGjy(S_{#Hs29YWz{XNyLhC5v6LhtA1tgo*aqa#n+Cm5Zy6)W5l?K
zYt_Hha5?h4#@Kh+<FiC}j&>cJk~h9zm6TM8qduj5Kk=W4_N~XAdQ*47+q7S6{`Mv$
z<ml#m>FdodcDne$3At}?N*B=Q=()B7cjUfZzUJo8X65!Ih5gyxvv=#XXWt(ie6VJ_
zIT4#{x7vKPXyW>?)O!y!zkYsLMETa|TgMObEFapp+}SeU<q7Rv_13CWFQXq- at GkiE
z&YUj|YJ8mZ>!e?&tf;<EmH1ZEZ at r?2NBcw+iU_T7Vbbu)9aA05a5G)alquha*O+i1
z;&6xPdlljb<VoC7X#b7c;Snoyu3EEWa!R9S-vaV24cT9_bBT^UUzCr0 at ba7M&S9CW
zRjJ!^Q~uBWqJpyA%sM*#&NPYT;~mkd|GBfeM*ps-GB<j#>-&D)r=^*iYxuvHiq0G}
zd3f}-y1|z!*6LJbSIo7xG3nmtI$G(=#H2~nCr&?Jt?q-*2S*;tIkZU6d_5gK3#|Ab
zdA^HS9+9Vd#mU1beVE)a-ODrw)8EWiDOIJ^l`<w(sgk==flSL=R1eLyXiT|sv88K1
zUoov<?ah0u*10+7YL)a`=1tnz_5QQGdn?uXzG#u1b7LAW%W-VfNcU_5{;QGl at I%wI
zH)cmwkDYP9O3l`B6)yX__?@fKXh_pb1p$+vl~20TCUN7A_*S78x1L|!Y0#I_lW*5v
za3I6rJT+bwkLr+i-<+aDT)S16{9o+_`!aavsqv(ERQt3`l(1$>+o|7nWk~MhnsjaT
zlfYDka<1yMd|Khz(d(lNM5StdI at Q7gi~lNKwuM(@+37$1QM8$tNB(?^duH92tEJ;R
zzdNb>?9X%Ix5=;4c&71m=~wIX`Wm-tT$ng~;)-;&zdjBb802<)e%g=jN0SQ<405 at B
zA@#>0M-+Vh-Nyq*k}C|nu;zN*``_G=aM^`b<6BRt@~8X!;AWLaOc`@`@YbW(mgnj>
zsA7T{AFoa&Pl)`ur$&+L0nyn`Pp?*C&A+J<2jxpz5Ron8uKBrk<;j?-!n|jZd6P>2
zd+pzceY(Egwe8c*)?@o^`gAjB_rq7wb-fasWgeHaR*{qc3%vbb8K&x1Guz4H=?9mq
zcI$S4yQ^!`sLVgldLHjpI8*K5p>?{Jj7;-(Sr$jTjqM{nw!AO0YEqFDm*VqM9>-5`
zByGK4dUCdQ*}KIiUEA<->CE5Cc6ruj(&1O>Jk#BAX`8<7w}9VYbgGdr<=}{v!*vg)
zEE(|iaNODw1OF*E`R<^3BOgvE(eLevbK}QfN*NuOa>~*Bts|w%$LC%zgYrNA_GsIK
z33v8BJ-nr4{r*`?wcq@@@5ZEr)$co0?*G at n$$g$b+Wt5>+_gh+xs(xgs(XHVnld~&
zW#p#!DfgPSE+0Fl$acT#*Di$=8C>pZgQD5;HBJiO5nD3W<zbbXW9y_3uN|8^I{Tu0
z^;?E at 9yz?+mKoutqWZ<Ucu(F`!u|A at ZaLdN8J^&_FU{wRvAJ$e%m1y&+=`xSQn}Yl
zcj0B{?jIliW2QriZb|dw@})eg^rBURoDbvE at 6UR<P~wPt6Fpmo*F1A}$(l}`$~{?g
zqFvzpv~g>KFO2d$bF$C1pLck-9#gj7lylt{?Dh!n_TW~bH}B_p%#RIkoOk(%>C;B!
z`lr21wJkHM=A5&;$gJFl3T+-!u}%F~?q{P0Z(n%3N#UZ|j+JZ~KI61|x2mHS^*vI$
zm-~&hx2`u_;nD8M%a+?`yeP4C;ka18?M147$l$0yFD#&*r=#)RlCKwhjB<&sl`y9D
ztyZyl+}6#le>u47<+{nf^PmD6t$XU5=fmY+K6J~Gd4iX3+2GE-$JER+BQ{IO;fcvx
z*KF|3w6 at ZvS3C2(tUKrF50z&B8l7?I_si?WT{`e|Tw?0|zxI##<EejA!Ev)*t#yfS
zHhS5ix)YkDR6iUsEOAVd`@!G>`MTEW5n4F+smbM+ci&Ov>f-l5*M3pb|Mx7RBmN%L
z*X at sgd+aE?d#Y#X#_PxXy5Bmsd&lxk(_eO- at hK_Imx;@}tlYNs`l#WPl226d>9DZG
zj>vk|HvF=v{I127LY7DNZyxf at J<Fo$A?}ft*EZkKerbhsi(f5#wYX*dZ1tY6Z4}e8
z*Nnu~JL}%8Sm at W@Yez(8TiYaZN6fXDJ<X>KZMMI7jy7SNw>Ov<mgDhHjt1u!S3Y~^
zamT?y`&t(+Ie%e;*o+A|N3E;U=}@~v^P3Jo|E5yRfRSZ8+*=r$CwO$d+eM1S)UL9&
zKycFRy_XI at o>$QQRYTve>3bb+Ijl}XXz=LPkr!ruDHq&vY=_3a1#5rvo$y=L5(%YF
zT&lS*!~2iNTmP}WUX_aD$|j6Rs8TNb=gO<Q_Z)J%)B2cR&Bo6Rsa^GjXV~ndHtoW0
z)~-5j_4)A+8&`aL^31PQo>yqTKIFomJC1xl>p6N(NZEd2Ujimfn?1UCrCDP;RO>o2
zU6~wyWAE0FbKO#W>Ai|E0d0F7YLTVcxH`UNM$U`(`D;&x8LlsDf9iYhuUy6ZjSkH;
z;G(x{fxsK9bDX|a-zWTAjc2aChHp&#slmCSBO4^U=3DdYyS at 3RRQ~JJ!{0pHpPsYY
zfB4QDTiUjB-IybP>+aX*d<ja(dGk?;3E7_xEjA|7 at 5`K at qDsGX`+TbQ{)ASWi=3YC
zwxOqMnd`-O<*b;{u3i0 at Kc@CebglAx at RFIynF@s0@*L;U`$5>Z!PDE7Z1XXo at a{qn
ze?D>c$+sLq?Se<UXZ=_^^Q-xvDyMooB72qB=Vl(>b0j5e?b`=)d42RhajQp at DoZzI
zuQoEr-_h at 4Lwm3F|J11B%S<WPR%VR|xYX``y4R6i at 4J+`czS5r<&EN^_YE!l^})Nu
z`H6i#9XK3Q=VtJ*{5_&G;pndA$e<iPKACoS2R$#-q2l|gE1zWxYEk}9`8&n4Ebbp(
zr~ZhLM-R4 at 49T&!UQD-Mvwa)=wWvqPj>u6l-);E5THg&rSMF at zHg%KTZQGWsnzhr1
ze|G*jy2i~C2g?>}wcRy5bC+L!JJP9e at s7in9c(nV%VNKln>PGgV at leKQ;W{a{&V%3
zpU!-1Q1noj38{wW99l53aQw%Jpoxc4U72*qB{{?Xw7p}qWb~f=qG-0#S#zdcJ7s%~
zQ4w1r3P%)=ZWM7e;z2~^>W`|2SHG0uO2$3YQ?~rHzd>y1?#QusKJ;F)<lLwaof2!e
z?wBp|$L!5Mm)$<Y<Jj~v3Gq{U*Y+s&{%hrZ-7nrA?3%LY>wqucF7)m6p=!H%SGTVo
zHz2+Dtr{KER=U+BYnopUrpfssW7F%`V%x=3uduM(!0z9VojvE@=o2a9hn{rLbuHbO
z>FZ<Odye||V|>&79c2zYJfD8stp^d+rjF^;EWx|U<Gjs!tPc6IYtf>lr(Z_)%~K-V
zoWy*CCQOT(v-Rw(;uG3NHkp+;H6+uTkLRj%ndv(?u5q)JfnkTI3~?JZXZGub`yQS@
z?l~gzs$Y}YxAT0RaOP4-z8-ltTt9ns`plibjoh=n#D)EHmM)(h_nUkE9Pfh<ZJ(BR
zWU}Y5Goi;?1^T<b-aWr(i^~H;%T;qv3c68zYizDj^FwyDTf4sP!N+~qPAImaVDDb;
zJ>15$_>_0*o}R8<S}&W~d3pAe{>4frgj}8Wb?%x4r at UjbT=iQyH16W;_SrHeg(U``
z_&z-Qrl|U}TQ|8Ho>;f<s7be{Uf(_^bMx)49cE8UdGKZW%<Enra}L%lxqC(-5C8k`
z_RL&);?b8&)pyir5m6%IaYT!v=Reko&JDY+anme4i^OM-Zxns2=%Gw=&VI`mUoLu7
z_C4oUR=@pWXoYG~w_|ps#I1X?EG}&L^Z_$nyq`|Gx-VmV*T4n;26|`Qzcfo#&q?!I
z)(E<NYQT(+y(7YFMW4DAeX>l)@aAP>G8TXTwd~6;8!H!i^HYnq2Xob1zq7vkh{TqD
znfq-?on_ptxRjHNTo+e8;(xTlyd95D%nG}C>qLo%3kwV?6F&0t at ZOalwz##i(5#C2
zPcCh6Ah_3_(l1?`{nub}^zDNYiz8-Kzg=!sm9ga}jVSSEYuduU9y#T9Y+OUn_(Iw5
z#eK>cUp~H1^qz?H(Y2#<755+3EUVw=^VRZXs5bXlo{K*<&0RXr<$RYrjQnu!aQ&1w
z8xya6oREC=@WR}F*N%MK;rF#s{ZA|QEs3u4yy}oPT`sf_+7{YBc;oVcV_Pjdmi#ih
z*ulv?S3OA{<aY1I^eQEu`F(lvDY?(bi}_{_`ub_ZrFtEoE;^l~UaPR_!8b#X{kQGW
z>FV81Ei6{Nkk{J5Uvs*>oz-w;g=w$Lo?P54GVGr+Z7aHFm^riR$R2Ngo#|EG<<ri>
zN8X=|uREg7AHzl_ws*TRt!~Y*KK at k`{JV6D{rY3<+^{jRedn*Zv?lK0{ZmuC(gh84
z@$&2Nru3X`X(m11;y$<PcR71ZO8(aJ`n#VWj4CnLE6Kgk#9D4^%e*;qF6!Q#6`n^Y
zudJC=GHb@%?dBu~X3co;Yrn|X_ZLh&d$(3n>Z}>Bek~Sr at 6m$$=^7VHPCFy*e;-^T
zS3X$q^V86<@snyz-um_Xr`G~K?(eG<88_*v$EWj|LJABFIWi)scyh)WQ#%fFeOjWR
z+t+8^BM&!C6ZU8Q7RN&8Gz{4sU(Rh;nl$x)T9dzdp3(EBmVQ{{*_vvRUh#F^eo0ep
zQO^Q5)AuSqdU5a+-<gYEhb*2rw0YRNG?nY`^z1jsH&fNdt8Y|a==QRD<)Y_mr-b(`
zJaBDr<%^9&Dz6Eszq4G^b- at QNK3~wW$*Rzs;U9uWr#YCqSErkKo_Z$cj;!^xY2==m
zc41pqZ(L9<_*(ICzgL@^SmyiWu5&+BiOCb6DI{oBbg2b76YCvbb+2ghq;J(DTlV`e
zxWJB${vowj1aDq=EAsE{@jkUjPg}WmaO8*wOLARx)N9?Zz{1S`-AnDduR!@7+47Yh
z{&-7hrm!ttT7-1!k?BN0oO_3}Pl|OoKEiEB{zH3yuX<!efgM-Irg)7!zUOm=w!<4H
z7OLF0Q}gK$_AdV6(7oK9ehpa=7u_=V*vf at +x1E<^N9s>0AOB8YXm8<R5#vTCr+ at Rb
zxL16e4P)nfKbtUp$h43X*Qdnxdi%a#$m_bB>vXC6`g)1_2aB$Fk+aFCy>)U7K2(0i
zm6;<(%yFwY%dLH<tusfrn=s&T>Exw*4>$Se-CrX^w~n0AAoTH=B{$ZL9pN*w-;?`)
zk9 at tL^q9ZbmcLivmoIfsjH|FJ-Nym0_wE)t7&_^7>Eg-JL7y`p8TjdF<?F${vaC3f
zF`LJ;X5oVlwK*BkY~G%}6PkwgY*ys7Thg_uO=ia5n_H^!!=D=N9q#`w>SN6{%i2X&
zh&+99+=<3v&x`dwJGu6og#5Fb{W#5KUz<j*ag)lntvj~WlgevO_bdKe?sIS5j(1MU
zxu!z8o3S?!gq(}_YZ(<bcl5iTdmWtUH+?~~>iHjcTNjh1Wz5PG?|kmgY_)&(^VZ}4
z9kwZ^Ui(vTd<GOL(WL#CPx-D at +upkUn9upHbsW5B?}v9jTaqspiuts^dG^g4injf6
z{LXb>dp3%0GpAImEprlvby&3Z{KY+$>)uUYY4+IAdWn@?myekB>oYgcD+%vkT};|v
z_j$RwXWHZq^GW*l{$lfMb?d*qo9RHp<cdMP=hQ0W6Ce6>*Rq>_&K?ukrR9z*<?sJK
zy!V!yu02aMd70`&%~|=XJxcwdXi`G{#Jj`dZ_MBROYs#aj;1L#J6}SU`R)V9=XX3B
z at LihkI?pbiFK3#r39Y71a|zFP_<qK^LEYX=y}R~J&fNpUA6~3FG`!N{73GRW?oayB
z?Q{6*%OxMq&;HK+(4Set9+&tuut57i_ZE-szyJ3`jk8^9P<}<a)^5*Fj^2^{B5&oR
zce at tZ*5rDg7nQFTeZQzqNY}NF=8K2!Nu0Q|{^<Hi)sxm#sZ+S(g at vuo&Og&6>cW`=
zkFUi}8NB)H?yoDpUQ7Gy&-LGUe9G}%#yzF}YtZ`lzso<^HPwCA+gUGjxOmKKGPd~J
zrzZm3nv`78_-o0xTT>4xS}eNq52XjT`?=fw4 at csUtUhwLdcXT?jx0HHI9-MGi4g(6
z7k-iVMeY}cU%0*~vaE3X?EeJqb^p|5;D|R at JjN`nSjJJN>V^(6zem<x*k=3E7a_w-
zj0u0VaLVbI;R71J`mKupzVg%7wr;+x%(gQ1%JeGJrp%n?9qT)mEM3?*=D_-ojaL5N
zamm{jPqMZ7FnrK&clReAXs~{Kvtx}OUi+^7t#(hVCKmno%5QCo?+pL`W#%3(4?f=O
zTBK&>2|stLQ8~D0=<ewA<D$>kin$asBW8X=;HY)~)bChsz at j}-l^<74Nd5WGukAi}
z`0TN>>(t?6GiJ;fP-oY>;A78cdEihZV9>yakta6Ks#vmcldrY9ba>b#wcE^$Y11Ts
zH)YMud^uXXUC$F(_>;$*QTNv$Sz9z?(iF$hnyZ!{ia!71{=+|qf9QCnam$$K$X(I%
zzIz$CYWelpsj+ioJ4QFIH at M8st_?3X at 6vp7bmLn+UPgM>d%g6o&q0rI+oR|0T3+t2
zLT(oue`^2f+?#E0F1`tS^We>@H%H$*e{k*Cfnyb?uFMjY<8JP|`L|>pka58G_lm4=
zT~Y9mXBFQnfmMo*{c-Pvy`A<B*!#on63g-ppI)eQyX$WL)2{qotl|5=??$E!{ucKx
zOWgDGD=Vj*{5&OY&x#2NUz6U=xo~gXp;Mn<#T{7wdTh1VV`sd38kgh3m-Fo|>`3}I
zsoeYDo>#omX;aF+Z|jqSuBEiT*ED5)Ql|I!u1#o_(kS_JQc}|Xq#f^zTwD29%Aeov
zB!xcPb0w(FgeJ)y-nV!^<av(g$?va@{_$Y*kKOOQ+F#(==*z=4Ja2z(!<Mcc8h7Zi
ze9!q&ug>f{8}}-3#I1d+;?ggFK4wdN`>k6id`*hK*6wiO#49TgS9){h+t%IVTO at Zs
zAJ=PTf%D$|ruv5z_&Lj8ZJMQhb9lmplqQ{fj9(qwYV_>;<G!7W3QC#t&*?R5Ys}3$
zH*dDzT at P$NG5z|3>i-Nq*5^RGQ7>ALj2rpsK-v?FQ;i<xw)*EY6MCPEaCw^X!k9Fx
z<9<om at P10=(|McM{MW78yKR%Px%HSoGc5U1^=7vw{k_8V at ONWUM?I}wbi<t^b^WS0
z+M4R~i`qHwW%C`H;rAz52Dc9Lnq00#_io!)FZi6dYQs{w>bu-OIymC+;%?#IGyiM;
zs%f3 at S>09)UK7*mse8UjN$VCIxW4lAkl0lFX3Q;hX;JE-e|k4BQ~bx%#fvT;l=qkN
z?(^S{Dtf&8 at lLr`H?6g1)vSNE6!bXNGr+e~yOUc2FMIg4 at mi2BeTUAo7vFZ7x^2;>
zlGzscb at Oa9quJ**T~>@b*g9<d<gfp&`|j-dpWj^{d;fab;dwT8xpbo7x$-;Tk58yD
zZ+>t=PnU%qCWTdTf8TA at -U$u;6Vi-mTwvsl`BCGSmKon`#*`-+`Z(r}PI$Yi at Z(bV
zN0*Dee_?CL>p5M+6RVy2FXrdi^m77sFHDXZw!QqpBE{ZbJ<#(`n&`?2(?6z5sTH+8
zaP+DVe?+{$G_=f(#z7_L6n$FW>qw)B9>-5T95LZh<|1<*)!pfp;(fSP|4(^K4=7h=
z#<CerzkG-qx3u1jkP<OzD}CqYz5mB&GY*^$+1Gxud#!@CYaW`JIrGv#u9UAhYUQ1y
z-j6fy&vEa;y^%%UzxKE`<zB}7JB!R5^lk0ysFtU{&)PN1si;QJ8qHo at _F3`k?(Uh^
zj@@6c-oz{w7EWK4zS at 92OLJao@;2AQS&5!cm#+A=z{}15v>N^}yyc1F33uk#X_?w1
zq*$6p1x|d;xaL{4lSLcMUHBrR<?)!L->y#WpU-vdm~PF#yg0lsbMM}NPtUw%n`ees
z*=D%RU+^f4d!NkxdPn+p{bkv&38y9`zM21WhfC(duA3Ye50q}(=k>zkw+mGIuFd#q
zxAxvU at aMP_e;gUT+9zL*#4HJEj}MP+;g)CnnZqT{4A^k-hoz at I)_=G>ZC-HYVGk}(
zYrn_m^pam=8!jyx{%@P+W4j(aRAX1CZ at tzn%=r21gCXTJzU)8gw|ZIj6^v>9<E&xJ
z&NlWdP^4SW3Y$Ot)UWI2s}pZNtKfh2$+}_BmaU9?H+s>c*r6j9#x^Pw at omzy4zuSR
z$eDFfnR0CdH}n}a=vsx7Q!-!hJ#_1Ol%ra)m)+ifsx!68oYdbJ4qddW!<ymGUTpZ-
z^xer<uOB~d9{PP?qd_tCu54<w>%pUS^V?KzT=SV{{O0k;J70D!x at TIYQom<@H0$2W
zycZsN1~2Z~@4x4nJ$BEU|89z3 at 1L*c-Sgv)TboL*`76q8+ma4X^5(u=;ZUpRiFqC#
zp69WCOuvqI%dF^`#r4eEdd(M3E4lC8T8{w>BXaJEnCwwwdxM~$xh03Ltp2Fvp}-}>
zV^-#?dEjZguxrmty<8S?xWVhZtFOhp4Ug=eRJhl)YQMI8-ZkLqn8MdiUG!X5c>T#g
zdhYuB^lyptV>iS%`~IJ?b-j!I^yl>|PX{ktQ|n9L8Fw0;*&aT*SMN4sYqoDZyk5uc
zj_bwFdu}MXddbU$ZoWNwtlt$jv(2_IZB`85_MztHpw~a$Nw>Mim++v9F+a86nQ7Ge
z=z*hF7Q8mE at UZ<~r|s)iwP%g>iJ4C~K3I6=%1ZBYY`AwL^~Xvh20f|#xpsY*rIRu*
zZB at I$(1^Yl=8hT?`fKB5j#2xo^`HIEpyQv at g!XB0HtW1)y~q9hYVDpw$$##Qol^YW
zPOsx}F4uEBi*=oHHhgJPvkS=^J=zu-{bADP0c|(5INbBa?;AQTIe0sA#Nk2L_7 at sZ
zIdSEm%OBUumfqWaY~yoN*KaGjeQnXvkHZJ8`Z~0XyPtcD`VE>C=;k at U*_p}<5`Jnm
zs^RD^^=@50y*%chd6~mw|1LRd^V^br4vai~^I}ZB10z$H-0C+r=Kj!J4}(@snG>D*
z at LIpv)s;6aeb8iCosyTjrTaeW!t>1icAgLQE#U9_ at cjBRuUcM9yyN=l?DTt;#{ZL;
z(C<-$8QF>ie7oxDlC|2t_eYM#{_ at Kj|9=NKhW@=j>3y2%b%$3;iW+iZOQ)2+Kb{#f
zzgohJ9rHI$7=QW36qgIj93$g1e|fewsN8NJmwTUH{I at Di=(G+&Zq?Qooc^_B at RK#G
zybt{1*wnU0+;?-X?i-T&-kHemJ-X*_)UZU`mMxz|OfFyUX~SD%e9{!U)#}NgmkLfQ
zGiz;`OAkv`u3xFuQlCpx+7!B3>dBKOo726lm;L4Mg)g04mS?EP?h&zT`^@s%UiCuv
z=Vv^h<h+(SYyW)H+IJ4~9X;vQ#ik=R)EIF8=Go&_tCTs>DfpKUL91LkR2{T-_KT=k
z-?HU1o$>YPe!W-y1p_a+rBA=I*rsx||Gd>?Omu}Z>FV9hS-C~>=Y$38((Ji2{M*Tl
zTer7LJoBYgK$VE+Nw14cC?2%u+vWnDmiQe%)a~Yp619K){q~n0?>df7svY-fRmE>_
zvXm<~e%P^jK_AAAzBBW|<xlUo4>+@>Q}o89p9gQ>(yHM~uV+c=e3l-{|1~Lg_Uti-
zD~$T(%h*rFD%JZ`EUsGpe@{<6-S$NCKc$vsE7;`3^EdbYetznD at 5Ckrdga)@!GHCC
zf0sM)V$ts%rsVnWc!OVF*C^t<+~L<M&(>p2#_vvwJNw&&yF15zE}4A&r_oF2tzVm%
zczMv{q%O(5#vM4cw~E`etE*nsUj6FRf);B}1Rn1{=&#`2eb)DWSHZW{%L?%?2KO$%
z=E$ig&;2*I-uCq2<FiTI20hMu;!cgam&Tkq)#!>(;<=>o(bNA7n3ZMGp{bsZdMQmS
zpX=fE$4~jf&i3`IpML$7YB#$7^rGdCqmh*grO()SVbAR+yZzW9|A;A}H3t4t;Z=do
zMMs79c^AEI-{m at 2d`HZ_wcz54;a(x1n=egVduZa8ynhbZvw7#!TP`uVk|s||%-TM>
za_sz%2djPDd1z6EN>xAZN`BY)QthOeORh@>c`x&dijS*T%%$1dB_(_RaOT9B|7I_q
zaCqAo&$+LD8nNtR?l%Xk<jv{faII9yfBEg3Ll+M7jcQbC&)fg}uQt0pD*RiaadVc{
z3htX at d;Jro|CoE?e({AFNB>i_{gE<TLMCJzUG?0IRd<HQ&D=BhdEsyUUQan2)A7^U
z(#=klPAXI2WRIgIcecv+u-dGpCpLT>eCK|bobHu6 at 9>|q{nW9z_yduty@%eJ6CZM9
zWY?Dy^MCYo|FG2cx5uyU?0R*l?r at JWwX;vFJG+Wc)6=W#tav=USFWn_{brndGP6uX
zy}fyEx%c%g7u#*@@Nn-+Gs8}MrwKegsfz2EUq0=~vF!eZ`x}4n)91(IEsvj?u)OTo
zGqc|~Mm5^eDNC`4){DKbb?Z}a?$mFg%?tjT_sxj6lV?7AlXhRPQMb=PD;Fx2V||^3
zcO%af9y|8Yzo#6 at n^Fo4`!+VLchdZE at jq8uly%LN_xY1+kNd5o&x-z$mwJ}C^JkNo
zYfrO1?^0sv)>`%Q9G$Y{zihk08f2MWqil=JQ#{hWslTLe<c<stT at OZ2{_x$u)xUI#
zI?($0)QzqWPY*2b{qbs=-v1r1^H1t#HM=yw<W}wGl^biHM=dB5GTHakqOQNzT{E}#
zqKrj;SyZf8v*~{<SXI=sNbcG{{<&#F at cJs%9}oV#<6ilL1J{<lS)_<ZaE0_M`$a`G
zU3jHdL4WT*7XQ0AU&&if998`{u7nEpx_K`Dur_Ydj=)VZ`S;e1o!9(Ry}vvBUSNBo
z*T-#%+djNa{J#J#K+?bQ8qh;ioIPlMo(x2ys5GenToh0dg5d?JGQHyTr0=L*{~*Sy
zuV9sP8n35sZCLW;18X+RGpM<+``2%t(NFsEY`?yJDy`k{%L9+?e2DYA8Ev~5{APjQ
zcBX`~fP1#9%wHC8WX>jK>17gvLAzk0DIq1(Oi~mjPO*B-#KqbPzkikW!bsaUUeJyU
zM-Pv~x#h;Gas(hJC8uX_h!Ba5?Px(H1K!n?-_H5;&NG*GZr=Z{{*8Wl&X?1sn_t at U
z_{;lh#^mkZy>`WlM{Uy$8?rmR@!X16gK?j}@VhVb@@ewg^)GL#d3D0NhnGIM<Zjq#
zPw2hI at S~VXt`4QKQj^(4OU-7}AZoUfS#}urEc0ZEajfXHNe+vVxwMOL7TjAnx$f&4
zyPxWQAunn$njDSqdvZ*aj@}nE1#LmQ6fuqgHP&Ib52&&6#4+r4*osToiVH`?Rzfir
z8b`a*{!~_&kF_;-W?jvFSwFKnnvAASQ*#UE3-^@I-qo43uW7`OO|#iU$7zCo?nin>
zifcTtE9Eq8s&ui at T%n)g?e!AcYXSOnfb0sTNlL=}xH3hX?I`n<VJI_?jI)*m6P(PP
zNc at T^(P?&YpvuuqEpMo34;5{s*SX-42h^B`afz-95)^`<GeiYJ2^UJZBM(Kd3GzY_
zDbpR2Lv|P(82CDjj#x*WBi_-*k>E(QI*5Y?NC4x|9I9}cAtpBo;`NYgjX~IeQ&yUW
zb$W34Pc%la50i<1m@&ij^dnn#K3_fR{(|9#kGJc?Qd9Md-~LJeci#FBZTRpvZ=MX@
z$QrnRx*s~(ApBDr86Qfv5~a*R%DjLx3sTDBCwoiMgXTn^q`16R#bk)Fq(dbaT0B-`
z1nQy7rJ1ZIn^V>dnxd&rquc7XX?D$_X-;RRHPcocC=M1Uxkjfo^9}SNH4Bv at 99<Hi
ziB~`q#<r~9xN-HG4I5uCdU48^RMNluu1Wuq_M&MwzjXTy>%G(7JlyBxn{S?c`;Fgz
z!hRfZ6Qnx_x43}bNmtUB5)&_#mFu4gpYkGXdnwx7NM?o-BtBowBn&nOAsEb4$5D(Z
zB_f-N!c4qZMn)tTFEktSRiMh-8jWZYEo{Qks)hM|(YPl5T- at L5r!f*6ZGx`@wsI!P
zOPlsT%Gx&-&yhYgR9;zU=(wNnS3^|c`d=N54>_bqC^<DoD)XAk5*=k(lM_pFQ)8?y
zLx$DRo+$BNMaf9A<Z?zYHoK4J!0|}~M?uY+g>^`+@)19hlAPKa2ExBc2ddYut>%>Z
zz+DR;d~o4i4@}v4Sif}n-}S#7e&MmFE}uSq`6;?_>&q{1ed^_xrMW9NZd`f)#*HWZ
z?^pl++_~RZzweLVy>jo#lY3Y0=C*WCRF+uS(&$hsi3^rV?kTPX{xXLYS7w4cO!t^w
zL`gANy$OoTr*LbkgDe-K!&=_cxC`X=6d#}g7LWpRzz|3b1OmZ8QXu&T_YIyKytdK6
zx3HOlPSN1VJ4J!$6t3382<h;RFHQYI4^#hlP1K<u*3ZIvrrYkF`sQK%@I#M1_RvF*
zZDdalxQSZ7Jx87T3VoYCUmuc~c)4r}O_P&hU>}}<fr&W&F)+uM(gM*=fe;^_d&fFV
zB{42OI*-w~_v0e)R=EaTI9ugE9 at Mq#pn-*j0|#|295}GB>mUI*x(*t|YNPifGYcF~
zox`_`#6yxp8b?&Fu~yk at A`XK~@&fIMNd-R6`k*zga<}?c6l3+|pXAgGwq#4!LB(Bg
zPhi124QJ#X82bi7nt?-9gM<LdNQ~@P(a-ZD&<*I*#JseC8qWOklWf1D8<^CnFVk1-
zq`%uie;48TG at W2LBW)3L3ke}Rn at N<Jve7_eWa2k!7bEJ4OoPB{^W(IE at v5%q(w424
zx01i*2OxzJgG^P0 at j6sq$5npZ1(Y)+s*vqc<4!$ihn};OE)cvt7(OR`Bl=V_=^hID
z&{#3vBx_=s*D={tk^;mSALsH?;&&xcD at zehJ~9jwR>%is+6S8c)-`i1QWQccs+Yrw
zX6H*M4T_-0L7$f&8TJLGpMSaV<yRiQd*(Xt*sC)z<8wNEvhTo!e4X}d_s-_~w=7*4
z!G`)~wbHN+zGD!X8oI964Fh^-6sKCrfZlCWC0p+*(|{^RRY<xkwW^)zu9&KJU5Yc>
zy6pYpl^d)i-rmNQaJ|wdG5-3FtQal<o>*@ZGbnuQ$Q2d2)x807)wT>N`6)Mz_n-9W
za1hZnG9Qti%0*I`*W>d0Wb~mfeuaCDjC5Ae$<?KEDiq*{E74#l1+CnR!G7H%qj!Jy
z+3wMgT(^1Wp`shh^^>oRsu}*ySEXa7(ssM<`KqK~ir(<_Yx*mT?pd~c$znS4%}?mq
zc>{~}1NwQoX4ZlgE30Ncba}|&D<@9;b?}gf8XMED9I8A%Y}xAcjM4gve}7j0X5zd>
z0|)jQJ$l)~#kB7m`)QxWcdy*BdEEKC^o#lliLRNv=!xB1s(15^%HfM*jPo%x>>}Gj
zw-AnaSt(_TVsJT`2JGt)w}7fuqe?ZSY6n at Y%%&NQ>L8}rD~X1|np~-jGfPg*VYgX~
zDqf((<~B)g*kE+(s_ue6?-YhO&C$Z2ry^wVs9_Y5Llw887r;YpUBE*jTU$e0rLC>4
zJ=@vNrHrOYCSW>@9rC?EHd2z5 at 1>hqs@~AlZz=OU$Gnd;{c*>lrd5l!vjlehmxOXd
z#g#|P%V|G-f4PVuGazrNh;dGmN_vMf64gqRSF7}obCXKb-7d|n(wM|l1F_lTWqXp(
zm1-hRPf{B1;&pkvQ$iepp)UaVU&!MaG%YC-sFMnsVJCQWrW7Q#2B!21ZMS#FGq36&
z>)RiDY`d<{JA9b^@$35P#}B`yf2)65zIo^KPn6%i^8Q6vHk2Dk#q0Z*ZE?l?X8RYv
z7qNL(_?%%o`e_2`8j6pbMkH;qqtr9aI$0`7bUGaA2^qw1H>D+NJleHF9LF1S_iBO4
z00Xq=2Aa+dl;a0EI<>(EPuzSB+k5FJ8XmqfcKTHMFzsJOJ=HVPzC7`7moEL=vwz5?
z5B~1c(y`NN!d?vHUkKfxKX+&k22ro+`}JMbeCIpY>qVhgFS$MxYgH at l<IK>gO1%yu
z+g&zODsftpeBh6(F$(5$gbs5<rd<Ec{w4luzf4D`<p)KaN{K2laz(Ek06^%XzoVZ$
zAXGPm-b;7ugZ0JbbRge}MEgbbrq9)%(zoif2^Bo$gC{>363X(r9rrkw*zU2YrX^CP
zVH~Y=FR|PW+jZED4#nf}$t2ZfcCw_HmZm<%Juw;@3T>>_>hwCTHg|7s?9H*zW`2Y_
zK}pd(KhHRPSl+X+X$bvp;X>Wd4lfi;?fso at J*aC3o7VhJ-%FyrbpdZ)(kGO0EoW|8
z8D-34HahG|Gh at CeV{pHGij)uI8uBoZ6P)G#J$~}NoSWkdn|e?k+^~PUmY2JuV at YmX
zzkzKflD<H-PLr+DVVdS4ixWzvX>pT1B?00{uv?u8>6&8qrv<o))m@!lzY1#$bN2;<
zxxt%*5=;%26=Y&S-nomI6M^kT8j>5HA&~OLab4G`qR;qXwEhjPTc*FiTYpKPj4}Dh
zCDge|_8)vj-;1I8Yx+xFyV83qnm!sdh(1fl&~fyc>$>Y(qB>OWhYsV(ouLl?B_ at YO
zm843WVO*@&DN*!hH}P0g&2dVq(PdBdnVlL`8DoSh+cdW^5>5QaJyb)3Kkria20k4P
zlME(IPgs(0BtgE~)?P8!FV4dKIHMY7eGf|tPY*Y}ez at _<VXozhrbZ at LRQy89%h|m`
z(}G{NU#wen33<#)rE#20Dw&C*XQ)!DA;}7am)9tGiS`Ryu5GZb#5Ucw#8z!nc;E0Q
zHS<ER at XztjmY0h!^0o{Q(}%N9 at eL26WW3Q~qVVX`(EBPa<6QT8nS)qU?M}1N%R^qB
zfJPUD7t at dP7Hpoj@CuCXCEh4T-;?X3d`M~^);xam3Uu$~B}ECTAUe>BDoEgf7iUT%
zM$EhOTQ=kH at w0s&(Kr1te(Z+N422aHSC0Jq+2rOnj0L|jv~8$JD|KoZPg^a_T<Xvq
z9*l=H4dWuO*E7hgnIvjA^A@%m#`&D+zr<{_NG?rr`IS_!(TT=oNwGqQ-RtsdUCnDI
z7xMCehx}q{P{f{SywREi4uZ|}I38 at asV1K()s&%iHuW*}^WJ6}sg3kb(yFv7ugz>W
zTg+C)##dhzO>xGUy*97i>+m^!E}z@$$ug%|(yZyWbbE%Qt=7%l+1A<4XI4U%KGu-6
zk1b^DV-MMTIYQ2mE94G&LUBXQBP=7Vx7u#C4|a^uMmQ&1CR at vFW%db<an2G~iMzzJ
zz_Qq~z`EEv*EZKa*Reob;Jgt-+!kx3;$-5%kX|)Kwsaf)@wukO?ERhkGfmy2*7z<f
zK>B`DemQ%q>6voU?1KW(y^Z9C;w&bWJ0H^$T1n7h%nmE`$@_{u>aw*u;c+fC<iQKJ
z>Jbs2$3MJN__~T;oLBS*dHoXzQBR1rb%*-8OMxF;r2q|H4Zz8xsj4!_>vpL!HA|I7
zG^u7qr?nFRCATX1jgC~OKh^7W+EPua7C9ARB-*?e>Q2?wfgP=mx3HM_=biRq_lA}x
zHvB0vvvPHI#UUDarAalq9IjY3#uae2b>+A+-I<=QuAZ(!ccG`h+Rt^f>n8V2o)PK@
z*BI9*_bAU~b&{*nHQ7DcGf!RY3MdL#H%e}!$ESLX9(TH$YD{;hdpfK6#sYVNr;pm(
zSmf^Gxm6uzywyF-Q>vC4OWor=v(-7q+3s1MC2`epyW at _;rM5JqiMIF?L^#omC+I88
z%B*zbZ;v$XKdh70IuXtI%V{}7xD@%`U;a&Y{&IJu9ZSRKlpWBsn at kV2*SL07bQ;GX
zO{G9)m1e^@Cs(W~RduCmmQ>YYL(^&wmgI>xZ5>x8)Ofss`@g(AXJM<!DL$RKC+Ows
zvl~>J>%G}K-MhqF?KQLrL8HbX_%A(if-aU8zs;;C7Bm)}5R6ZdbI|D*$lw3+WVyie
zh&f7v7<U9ocF0AhS(RxqldUC5l0DvJccmo>Aaix9ci))g%H*xd2rbu6`ld(mHU=CB
zFCM1asnqW;SFZf!(v>ThHiiLarcNK%xQX_rYo{SoOmCq#(E;=peYgIqzE9s>!9h)%
zS6`(G)5ne1hwD$jqW`gS-1x{ijrWgOfoWpNjiDq`>0K&tjo%!>HF8W!6x#SWwux&F
zD%$yGc*Em!p5BnVXG}cwN1JhCGdz^}Oal)h0Efm$H*bDazbvrLn_nR^UinJ@?KkZ5
zQyU-O8bLPajvcLQ`n){C+bn&*(4P<Ewos^z!#|C<JPFfGlRcy)#pNJDk2}t84ceu&
z6rst&LT7aPv=$2efWy{(V^S+qx28g;2I%gp5;0;)q}Nez2b$4J)l!N6yk34)nffXH
za_1+e2A=<OX;j+@^cgy~MUVO)^r_u$483lA^sj%b^Jd*DT}13oB`ZVyEM}8rHENP9
z!Qf<RkWnUWB)LtcWoe4L(mT#+lPevH8k>?}G0H)^Y>;AoBxqL*vG!C58SBwf+gP2h
z7MKo$j;<2&Wk8p|&>3+Pd65R;ONXv&=B>n9AWfuxH at c$KfwrU0tFczV_^Tja`nXS7
z+td5>t>4`^ecYEHHEl<O{pGVi?P{u`8IP at 9`<Q;3)w^#WqW3PRXCAnvX|D**A0FBC
za{8JL8^m1ri{W!}J=!jlW`ue{y{So>#cD|mu!NvywOR&QtidGNM;G(Zo#9*TEsdMz
znw(LR6|`8B5{!Na597v6ubP^WNgOOoOp%L~bTOQ5HA&u}H(d3ItrtMip|y6rLtBFF
za@!4VH@)4Gc81X{Q?LVSJR-<v2^f$?vYO{%XSX$HTKE)YW*{?|nUtB_)l_KiX6a__
zW-GK8CUy&S3wBE?OzxV}-`wAFleNFCU!Z at me^USCk>-(>k=Bv6k-?EkBa_QbQ_NE=
zQ>+!XiolfMl%y%ilT#L&7g`ot7upus7X}sv7bY!CUXapdYrC3u3~r{2)89Oen?w1e
zT<W!JvjN&X`+s<r;oy-y2WRYi>yzEoesR*}RWqC~zq;j_yH33R?k at d%{Z9+S{pc{d
z^Xb(qrp)eg-3 at O(fB5(9+v#s^S$)sKimL8iu79KY^x3=!F7}}R_kxW&$ih&($zYKx
z)p0h2N3+8yI~04W(TXvo!Zcth;NiN+qzL-_MZJ4%UT*U|s3w%C5v>_Z1)Q|i^gb^k
zu$0D2M$~M{ah5pOIJY{FI1Qr(&}@dD+*hnPqW52D=&(@lf23T#_#G{QDgI)OV)+vI
z)p6iCmP`w!S(R8fF)j0<`$(kH!N&PY;s7+!XB=9pi>4Z!M0hO()J72jU^g5oMHgFg
z_Xgri;u#%%&E$NXkSC7BHP7F!jo%v2Mn|xSQ{$5yvCS8RkKSnD2<vy`V150;BlPlN
z{fd4Z$6pNP6%~z*`qy87O%o*`<;HLI7xeSA4IL_Q>;>qa at 4vB=heL(3#2AMUw3JXI
zpM_u)FwtgbL=!77Mzg{opj94cw3$stmG6BrISdxZ)!By#0Bk+?AW)z&iUQFgR7%O{
zP_mI4nJme&(G){tSd6KSt&P1c%d%zJZ7TKA3 at VMLqfIP=z*B^rbOL>y?thN%Ti5i%
zi%kuWvY?^-m*sL50^SBLrDzv3Ax1tH_0SEW+oe+UcRtI4-p(|M+3Yr|+3hxXTMX)n
z$6ji)6XLOGR*P%^E6l7J4Dukm1yZ^lCdp9gw5sDI;^EURR*Tsf+3w|VDPA$>$6ejU
z?$==6U&|cvd at XmNgMg2U#&!?;I|x7YnT?q(274R}uz)4bp2jjQsrH_%yQRQB(9*{~
zg56;mW}j*)wcl--ZTA@|+C(xLO(xZ%+Kd=v$C7yJgScKf));H at SlreaTdX~uq|<bk
zE at jH8z|IA%lhoPL$=b!%pY*4_Sud%N+}qOET4d{Izn$DpN3h$Z+vO4PCAZthIL2sW
zoMT*L++#drd=p3+En{WUBzdA?f^mXrqIsfag0&QQdXl4DD|b%v%we;nxrRB$Ii|Vh
zIhJ|W*|r6ayR^HU3p~T&Vv<r!(e~tk+7!ttvD@{X`p)h8g7qxv0PRADZKI=T;fwU8
zN94o5^y01i%ggeCUkc?rqU~&j-9E?T8vQvm5oSwE0mn#bJOSJ#8uaP&#>TOD&FAw*
zTH7mH8zUS$8dGgGwdS>}M5b<sRWepO&Ew*H2EgMODL&RKCfQ6XpJJ0;ez}cy>TGTE
zSjYc2W1YX>?tjPr9SLarJ%I#z&C+9}%eN7x&<01;6v8H=*i~-~@!5UeOwv|Ov!{DI
z+Y7wC?R~t%?YDZ%$z*lBz0|vaRH;6dsMN$vlB&uU*$QKDs6Jz?G0sPPG}aPp_1R(_
zUd`+Dd;LCNtS^q6M24DfYirMRq-kl+)Y#OxoP^G#3+<wIv2}G6YK6`&-ah0;+L!f}
zdMmwc104N5eZ2jB{o`*XL+Ma9R2r(>rVcd at w+y!qwcYNx-E*6Fq;F(=87UP;QmT{z
znU`70U?3HaDcTfgg{RC{;xCCQi!F;Qi!Vu-PpW7YtCFgeh3W$1e9L_60^36S-7uKN
zFqx2hv2&qop?i^Mfp?B?e(e0XIq@@LM5f5Rq^a4CTE=Gu`D};&$T8go+tCMZWrJ&I
zi1t59zk5!fLqFZxRI`UIZu+6ToXujZD=PE={Ue5J$C`SUNBnyDJJ{7I;XiUhy=_)z
zDb<{sxzuFF5ZSC*%p5rxnMr^rGj&+_jI2!==R&x$IxTLy*~v^^l at Yr;)#)@~C<RYZ
zSKC-uE4EQZ=DMBH8M*(^S30<#*h3<70;az=Veo4k`jtB=Rn48vz0J2vqns1W^QC!a
zqiQl*B&%eLQ{#-9RkLNOS;ib+H?^Cwi>a%*r=`%^(^_cjY3ph4>FBBTG4;0$H;uI1
zZoS<$*)qvmX`N)Nw3Ybgs&hqq&9|-bW%7<K23D=wgCje-^oX9ninV)*&Y^RjqkC5C
zJ&%;LSoRIHzMY{nH)S`S;=dET1A6Z%#>i7cDJG3F$~2?NILKm>*%AfAWdiRksTeLx
z4uh5O?NEGOt2VN*kkfEUuf=frng!B54hP3xaaPKVOksTcJZsrL at 3`4v76YruYN%JN
z;NKx_YiwL7Z*II(8d%lO;QEq|>UX6<OeKQH8vQ4BkK#c^sUep<OJTFf3?rX{mn0Y8
zunNF`6n}h^R`a3~-wseif2TK4m!6||%Ky42iXX1o%R?mY!6+HTcb@%|y*zGs&aGlI
z58un9Jc4?*fTv2q6JG(GMGb-{W+X1zsPSch!e(};m>*0kV3m3fxM@&4m%k`iilh9T
zmYx&q6AFn5!N|dgDp7;VcS#9G@(Od&tlV`=hgjfoJw}h+!~%won?B+jx%fZx0Gadz
zndnpbzoYspSx#lba>RBid>b88CXIMFcyQ!<JLL;(mQsqcb6 at 4ZP?TEsR*}di2D>n4
zS(vko<Lc@*pBxigHJZ0M45-m~;`~Q1h%hUQo+I<;;yxFJR#JJ6{-RQ<ucY%M<Gl$O
zGdw64!A#ncyF)qgNtRfmS!q at 5BgQrEq=!;gC$33f<u0*S*;%ZCB(+brWyd*4hQ$z<
z?90lG?4rrbt7~5I%4w+68!nyK8ZL3D#|KHdp;RraGHZU at qgirQ+oSX-J1W)6wT4=y
z)?4eV^&gEn8hbR(2J}M<uC8Xe#USbG0$Eb?N?(E4l_TZ+>Hg&_XU|%_f4jc@`mGf&
zf7o!EvPYIpyH^`i^6K!<zoEr{oLg0S??d!Z)9=e?-PGsM)@SzhU$Crn+^3nDXCiW6
z2f6pdjyxoZ^bMsY8Ju2;B(68cthduDX$GmXml#*M;^Qm at ZkFwJ${8d#nGXUn3goLG
zITz~0KuF^Qp~Bofi=kYMCODGjEV{fN#@9q31Z`dk=fYihnNIHf?84g1munY3+gX2%
zPJU$7>UHZ at uX?215Grq)S~^C5=gJlR#F)|@<#f)`6JMYG{Hu44h&eCtn}BwTBL$&2
z^0<GEWP8l|sB?{Jl~fXMZ*Pqwo;W2do{!1ji_C8{at8If+&z_TIQojL*7KS3)&m?q
zk1i)<d{Of)Fml|tWp9^NcvmldbmL<i<~<Zgd+yvr^K}xY9dmN^A6G5;=KT3@?^<-#
zZq7yZcXKG+Cu`7O?0Q>Zz3QxTLw{<CZ54B6do?M8W|M+8apo+pz>9T_-MiQQN`WC0
zNzqakr_`j#(b;IuFQ0;m at LP~{&1$EdU!!m2iu~*4x1h+E=!E@`ta at nOx`&|1@*SmP
zXqPKjXy-AdEVKNVcPAft=c~`petqI9-~3-#^N at H_97<$HZxt~<ZdhZDSwo(1t+JN1
zF`B$_fLU>lEHRsZ>VoK}P$$=>*1#>=6-)>vEKZP4l9Ti#JLx?cZ{YTu6jf+`tDO<5
z(6lNKZ~SK4mIY4))@T3e*mrt8^?m(k%1$ZkRxW;6W5oFBnZ=8C*Ff2gw3Ghn%Lm>#
z{CdQ1+(d{p1A1;lW`xpJA90zhjHHdcCU%Bqt at 0Q*+f6pwp4cpE2I=f}z*2J)w2R&A
z@}TDEmMIJz`P9TG$2GBgId{*R#0VPqayOA6+(!bAi2Hc0gp^R$Gm-K=PZ2Xopkj|#
zbk-t2x?(NO7)yuVJaHJ!)IYt@^kPj-&Fin+xV)Dkc0lorb at x{^zEoZ=4XIeRXJ1UL
z(7RqJpM%~5B%4eK<!2KIb!%;cQYNWN$XxF>Zc(jk<dpTX at HO(237gxS+N+7#!8VQz
zQji{}cJXDkk8D#BzJ{+ZT&Uyb^Tqk735k8#+>APC9Ts<}=>RjLk;Q`Ou9VK#)7B=%
z$5*WkszA<f{BH8m5hbqWi?%)1Vp(*OzOmV|q(hCj*Z(y={mV%uuhp(;F|r*M`l_gj
z9c^wi8Q}&xtqf(yc~l$qFEdM3h8giLyF{zZt2E-g-rXi!ab&wQY~AGSI3<H*v)n{3
zVqV?FtMjH}<*2ctdDy%!C$KnB6OdY3FHy8!B92JwH80jhHZMloEFvZ at hV7`Klk%UQ
zQnO>bE?1AKTC#kra67}NOnc{(rsDvK<Tq;$?9t<*bAgb9l^D(eKzK?2kY6&nsyv%v
zc6K5uwrpz#?9G|$i!3gk5>7D>k at r1Vn7@^U`2>%^<WU}5?~rj{oeTTzjX51|?3I&q
z;}0)2eP07U4Kq3v6?Mqz)$5nG!jcFJU#Az+J%XP^GC7o-sQImu$?uC_<2He*&F&`y
zG3|Ze&DYtH0se9WV69PX2jT|P$aglO7knUgU+l{XmIS8<Tj??&_zd8P at VR%Ee^v}5
zqp#tYEB6|!DtMnWenW1~jqTxue)B at Vr9H-|w+^}ewyXT>RTaO?*nTi6=}gI}h4*m#
zxDNL54eTS9E)I?GSDTE!YOl{^bX02&KtOx7$z*hUn9JKk(;SW-b_d3EgM1Dn#`C5s
zi(IA5i1A=>UuD_sBGe$6yco-w6{k;iISI-3s~LuDDL0PG-kr}@0*Cvfzhmfr0SKIT
zo4;MNy87b<T;e}5HSge4%c0Lyqsd|N8T~$EoFmScZp?IK`Y=@T75e)*h8u5lOf*h(
zO!Q6i&oi#{ZE)-}#>ghstXd3KgH5p$yW%jqEgse9GP%ue3*V9GvTJs)Bi<8(QCVA4
zTXS1WI>uw|wJc|rtDPs?o9WAm?`-AET!mVJyU^P+zK^L01N9<%Z}&*k2=fTbZI0p2
z;jZECNu~+b3ATy$GRH)1taGeuoV(03!B-ML-!$Jm-%_Q`cg}asbys;GbU*01-+RAr
zP5cJO2JLmz0rLUNe%~;7xXkE`x$~M46;+-2?53v19f;QS=;QQ{`}A76{_&=Z8}&EW
z?ciOe(L$fZXzDEBMLB(Sg&x^Ufp%p>(5 at yD3b~Xj;|!TpF$BL1RmwKxnj;-0+D*_&
zEUh|;Ss0%gN5uGA7G&x6mzutN8JzId*id=Yzo`7*>C7e1hi(YQxoxu2j!0^PwoJ;X
z%G{im6yvcN)T$2BsuZ7z#JbJbTa&YcM)X*vr~mrc3~#o(XWQ(oU`A?odTz(4(?L&(
zI-aPlbVuCq=kcw8+*<s6M|aP>F?p4FYx8RI3 at xm86s&i|5gmZJbIduG9Dh#CN%Kj|
zN&m^1qj{#$^zXZ*UtREa5Jly*f at h{ZyM2ewww6>byl1O!jGmeBVp~e at +98dYGw<Z@
zgyTwk`T^m%%2{^xibzfxHu;V6=?k0vG4z!{riVJHHcy-^MLqK7|GY=$zajgV9kTad
zamXbLxI>1kd!v;<UU%@7tNxf{mvYF#_dm7^xyc%<vW7#J7%9$MWCCDm`5goA<hgr;
zv6XyFN$dT-{$^m}^$<2`{bP@<U;o&~M>zV6{q8#&tAEqy`?|XCzN at SIemu~KPV at 8+
zbX|Wxf|>Q<@_u~ZN>a$Jp=?T=36f1-A7`s_Bqvq{&Fej@;!1+|IyR>UvWXgp7;Dc?
z&`5?YH}xuX7PG<8;GK6B{_S0yR+GjjguSiMaz?Y_n$dJbeRO*>X5N1dn&#bv^_v_8
z&97GMXaUoDd_{%8Aj1U)@qz!Lp>`>%+b at yedNZl=7y$a?)@!TGCDOf~&8c#>->qbL
z8Gvg-oGmL=0N1<-a{VXVN89(G<BXc7?_c^y0OJ=!MFp+ at htML52S0)gG33!uveD!=
zP~xa^5`%9Qf`fCj#cagbRLgc5GpyP6+}McyA_Ue(w)N=80Ry$;;&&yXt{Ty(#xzOe
zTgJVbPxEUrIdLHpq9GQNLUPDZ<PG^k{!k46A0#kdI7ov`8Qo&=vBKbEaYToo&0~wd
z?a$Ij<%Z$`E7yJ8^gg%x&O58xkC!v`OE(uEs%h at 7l@<2rz9DH3WXvR|LpO+ZtRB&2
ztR9w at Wvr*jR>PVM-&5YLap(mt%UJEb2|XOf3~!%Q*4{yS|NUjG#tVG;_tM`kV>Pd0
z1;r}Xh>So+Fe51=IU{A1d6Z?8b(C#XU{r8a(x~JSDa!-PgUgeaCofOg5ZDmhkhCFr
zL&}c8j^K`@9mzXV5<=}3x7+R6?cMF$?cW`<JNAg at i1&!^i2q2;kytxlc`C at icI8Qc
zYVY5yJaMEkt6X0Fz+Lx_d3 at RZ3qN^d*n#oo^2#~0=Z#wN at MFuqd3R#%b(iPO9X+zo
z at Q&@X at 0;-Oj_j;&C(a%+<i=aF+UKmUd~8>C#BMO&l`;%7;5jCR68vVO+17YuBdJo@
zW=~0ssyS)4$&ewDoEWiDxGpje0tj&-uU6A*qnmhayvbw4%t8!_X<oha8dQVPt9p&;
zYPvBec5&>Q*y>pGXn>`BXXFPWt;R*^1)p!*_BtJ<@95O0UoZBc at u79q_eqB;=uP^*
zil)&k2HrYm-SXAXbDq1v-<`q8JC at 7|CHtL<)#hQ#OfhgbWV5M62G#+`*|eKITg$NK
zhy^DBdLloD;k%FWBEY%%7g4`jVp<$u!<U$%wj3vHIgS^L*m6><X$S!mB7NAI!ak-W
zUeY(^Z>xCu*&TF at fYNeC<BjEq$}3NN$_gu*9({A|p;xH*S3kp75Pud!4m;T&Dm0sz
zvD#+0snv>V$Ek-=<?}QKru5)5Vk)s34Ll at Cn~B{fezMKioGh$m&8hJ}oJTd9x%u`}
zRG*rm2GybJcy+F-8jVI%yc}=vn!M&Tk|k#uvP at a#EPGdytMwy&ZGG*xkrDQZWRiWZ
zJl8N!nQs(8%GQQYc3wNvNw4S&7SQi@(ss06HC;1LUw{^@Xi8&eDk>U_#P2T&Q4T|9
z53LQ|ZmD*A+~#VN*@IILi<$pUgG<ZT->UigTeVn!bNBGLtv0LXWUd}In{|-e{D0Vc
z_qeF4y?=bKz4y#8!@%5UxWh2Oa0eLyk=uyM9YjC`<t8GR0R==vK=PXA-O5bOTOKpD
zGBhi at 9JA80vOJb%ow7P<r5%r_&SP~<SpL>pd(RE9=RD8v_xgSR`RYp<J}lN=Yp=CF
z>vMg70OO)?6Cznx#!@?7UDPV29Q&nsSDZ}XZud(K{xAGewb<TlzK5g%pp|&3f<UAs
zRAmCGk|fn6kSobiO_x-w>Or%lS+xKyNv~?HL at T63z=d{07oWgIBo-o3S0WXvRfLnO
z7!{v<qjQnF$i+&D+SNm<RjJe=R451&he!;r;YiR8R)wg?Q^_EmPG{2DbV0f>T{PY$
zS)3$EmX329ryQ?JQfE?=!DN at oVjSz0Bh7ZpmS-!nmD#FH^;D_|6wyUY5nCiE5*CSy
zT#CfSl2X at lBoddXi?nq}gRiCQnR>QXP%Eqz)w<M*>m>EA4XQeIt+tC=1bXOxrl0K*
z^ay)Iy)I_|9`Qm+hiexf57sU3R&*;DsJhi_#cL#|w2O!XLdCl#ZQd*uU at imsPdmV}
zh4A!t_&dDwC_K{*{`TxGphRckE&3C at 7cj;G*&9&|28>2$nL;v*k at 5xu=0 at zP+Jik+
zdpJ*3n$1&{=7N`)279oVYY*q;O0#*n(y&HE{8%o;ebwv1>?97YUWLT!$HHzbsge~d
zbw2WoryU(xga0c>7QkKy%qT{6Tz$h*5_b*d?T!wXdlr?0j?#2dg?qWCfoc#nxi at Kg
z+<P<+QtRB+65_HFy9s3iPl1=v+Y5NnUJQ0udAVt1o}Qjw8t+gl3`EkA437K at bu+q$
z$U@{HiZIVGFQa!7olYk)=}b121G3yRWm(=cKm}dFR0z=n-KM)wla*=9Jj=Ywye+^&
zTbM>slWUW-iKs~p-ixTkU@^UzSuE^v>vmrtTOePcSfE~{S*Y#u?DFdJUPY}Dt#@57
zUE{XKeYI at 0dX;9C=PIvN-ZQZ|Nad&`xjMO|=+dt at f$baMRgk|9YF7VneJyO=0D|G4
zSAZ{;&})DRX-nNO5ot?l at GbQJ7H|?fHW6=xNrX500LEMa_Rv7)?(IW+QF~-EcUK85
z-s3KFcR at S?ee04Yb^$aH2x(Co+8PBezO>AXqO}@y|GSAXmvCiwDtGzP8h6YgkYwZ{
zlOl0I%J>rRi6V&$*OA{G<bn}CC328L`3F0J6AMTvr^p>Miy1n31=0!^0ahf_$ioC-
zLc~H{jqXOYMCG7_o+c;~OcNFfOGIUoGS?<hPvb*aFIq at -gGKZM%meHK!2)5A82gcW
z+`D95@`Z|pUJJb!`h=oaEJ$?bv*hZrni{~XnXuD|>w3oZw#Cejs}?4uBu;$$DD#n(
z2j4ASJX0?FU{Z1_K6AxLX1s~su^VME2O`Ex13Jy>Yw8v56!#KeQ<OjwC6Wp_SJP>0
zW?RfHIMUPP6lLO0&H_^Pt#*@Ux<O12b2JsxJBEI?FbzWubVf at V({KV9$_BT;2`>@Y
z8F-A<A-y?>sy4 at Z$~3M*z1T~xaTNsUeZ`%wR434Msyg%%v6KlG1ZgQ1tx+RR65wf+
z34%%57x6=3QwN{4A2Udz>~U<GW6F&{LvC_g0<U6hLNd at 0X_d>Tz!yBLOS^NZbz^Gk
z#@0i3(k5*vt6#pdu5811&0DSjdh3Gb1zQ1q<<X|{4e)QfAMy)awF~}j13^v)F3=Yo
z7W(p-3M`d{F%@odP9B1(aCo24_um-q)^W}=%`sA~r_7&q at z%I{$^-$dcc&-SX^?d)
zI#?gX4&*Y_Supysm&RXXbY<;RR&bUb`-H9YO|njypCwK>v`$-#XK9}{l60xe_0#HB
zET27XeP;Tdr&~9srEP3|`cC?H(>DVDU8 at 599@-83H%@PQ^a_Mz{t#Z-LVRf8ir@<d
z at p3B79H3EqDn&w97AR$&u9TAflc(#Sls+0Y5 at 09~cOAB+6F3EubbX3=h54mH@|gy2
z^cWCgByJw!<?#nv9Z78ZqW*YQ?GcHq_R*Tk=PK%7sK(!@AD&e?z!<lbmu9f6I4P%K
z+w`gElgs#AjN^lpRlVR}1jk2jmb;5*G0jpLa8uwsK{p2!pO|0anONXp-}6Q<NTYH9
z at tN2+NidgW>lGIM{s9v|I5_wL(S>)w%jo*er-W1>m18!Fw)+b=xk|hq_k7Hc+N9R1
z*1Jh+4Js)mmUu^b28#SN62?nzK(oh4JLk|VK>9GjWf{cSG&rFKrhFgEVTR~}-2sN2
z!6B%W6B<n#NTj=#p+DdY!|U7Xzr07?`?9|BV39 at DSwCZehWT3d{im0|m;JWmITgm0
zQGv*x{skfwKmvbti8jKY`c_B>o25%yIh|k)x{K>cen!4I)I;P#xl7fOP8Z6Lo#WlC
z?36CmA{j;mB$S&(rcva$iWEAPKiPbI#uDCmr{i!M3jx=WpXOH6ssR#zFv$}qjsq?Y
zQ^yuIOFC+o^njhP9(=W6F!;?k-~8^%w0(K(do^>O*bhH%8T#{8xZgq-w*cdZmpnbm
z`);Bt+2ia%q`AjXZRS*snDJ(#{3xT|Riak0u}W!_%-4rzfIdoQ)W`ZMr4$<;<m-cf
z=B)|$5HmrpNSdUBgy9~s=saFLcS^^@ym01GZf_#G{FKg4O-drTABj2<hXbS&89A0L
zGIBY*iN-`7QEyd_X}=F%sJ;*p78Z5B_WZc+$>#plb2T4^g at s3+uQ@+%(d3NYsZY#r
z-}yvG$4=(+^VJtpdNU?3OgdlvVPtq%*oW2U(|XOB-RS%Ck>R0mY5R^H?ell;!gu9Q
z6eaK#T%v+Np1De+rd9PGz8=bYh0+&&k*ky<sYoWL6>_OmRG<`iN;<t=0+>#LP9<lg
zof`MLK+x$Ypgh&S{$3s`)}U4T(k$kw3YjZIQ(8lg-dEv9<p^oaVXmD<n$&6hVz at WK
z1-tSq9><6C#a&9lPNhFmMM!}6Hi0rh*(_>SHu(x%)e?=?)m!T8=IidE(5mEWxkjl~
z>XaViT#{r-@&rYaYP@>9CdnhyHBVaLR^Xl|%ai9S%xbeHLz|(?^vLlncPUd;s4CPI
znhK9bmpQJD(nciUG{_p{jS7pZN!_My(zIzT9v06gpDx!P)nfG$^<vEuO^-*f=TbHL
zt68eqtlq52<l{K>@%nfp`p^0HMf+Ez;e219=?&NlwiLsYKm`A`jt+YsOa~=TgMp3k
z8j!=|S>RDP_oM~1HBZ>k41Tsodq7!pZ)r1pn8c=|`(YnAEZ9c!bA8NG3J6%>g02Z6
z2LIx+b5ElU_z}4*RNRHJZy(q;B%yz0Df~ZY2duo8%IqgG?h~jMbFxrCF&=)VB-Sm|
z7}*x&CRMbhHwR at 1gp82#FtKXC822PK6J}KBro`mx-KFAOy|<CcO-Z0L2woPt?9o#(
z0MbW%ybkX#ke}ubHj<Nw0hn+nfsQ1qs%)kTomR&k4y(b!7;g=#HHH|uQ(`r6fWAqI
zpe0~@^18E?bW?eK=dWJUxBHvt7v`LMZpPk%O1ibBspp!;^|J>S&MlsD_CVn_=3sP5
z{K^lMA+<?)tLVqy&n}r&GHZ=YG<WOlng=3d9+<gex3}*FP&Bo!v}1`>*t>Oh^@ILn
z9+<Lxj}LiQ?+Fr_M4_J8Onc1|rBF(F$TW=D!wR={5yP!fI6sMxvQXM%i-ub|9HWo8
zbR`cW{CMD&))t(N<la)AzLcXopl9hFk+f1{Cuf-AGA4r;V<u<BnKC8|^^;>w85yS7
z$=0tpzZ7^Qefm4Whm;o;N9AIy6RAQ>J)=9wxILpdC}s|&iw~I&ct4eXz^E2_Ax2(2
zIZrQ~nv|z6h{{8^4oO4)=;BB6k2sO;AM$@-Z#Kln{#f9ciL7yo4PfF}ofg|)Mb25s
zI&@8QcNJOcL at s$b8VG8=U)=cG*MEDZ=!xm2iuujmJ&P93>d at TS21Ik`wzkfl3-4^(
z2Jdj6foR)`Z>y_nYO1QgU9s|NbyZb$W%X4$b;X9C&c64rVB at 8^4KKg+;)^x2na%Ui
zZ~nex8 at xMr?mYAv2)6A2LiD+ at y1MGS70bV^uCA%6uKISxgIBAnt8qSVKdoc7lDyVX
zDw66jr%?WKt-Bz^&mWv%BEtMnxW672a)NQuzUpy8b;9K}@8+m5ooj%B4W}u01FO~1
zeloU#GF0eX=_qTM%W2yQvEr)TzIk)-n*8*w58*AG{J`rI_?;rAVX#H8B!giQEcQ?r
z%w?F&qHD4J(>LrtdHBNx&C?s)^9wd-96hn+_2$+&vntz$Zqu(0WwLL>2TO}gvCG@%
zFO4d#&YZl<*LMfpw56zU>a<z#Mia$j18zXFqJd!PjW_#97}f=dC|4G{<HWQ(L(QNC
z644B?6oYpm7LN`;K?O)T9f$woukv@|kVGcN+5IZ+3mXhCgD at Cj;J&biPIwR=>;(IY
z!9LqZKCTM*Bbl(85>OsySDKwq2^lG%bVB)UP7)qG9jhXER-X&#y?1vr)kANBUH>EO
zDb{utT#)pfLX}e6&82FUlF=v%vGu4Bn~oGxH!*ck?WJ`)=plQ0jF0G`+VAP$1F27q
zIgsP#o+uAgD at 1_RNdx`Gtgc8y75aJ>d9#Iq`H6WGz4IgTCKgPYW<55ykd%gmGX;(?
zz}I1tO)(mJ2MIkxDJ0_`OA{j#Kdgz{DnH<l6lQ~QlnfB&K4-~zpR>m-=`SfME$;s{
zJXyUU|Ktio+L+2x_;yJN*t2wb?d4I9)XMuDKSr0ImzxidxSK-1n*=js;Dt$(=)Du$
z=a$T*Eu)>R#`~Q^vi6q*bxec+*OdqzzJ^x5I6PVnuk9teZ0NAy*DYlKzRh$ospM|+
z!uXg%4JB>%7AqMKZz7$M*gV{yGg6_>diS8SMpOAsjRpBlmR$3~i0J57R;@mMLeS7$
zkl)alm)Ej(Omx)zjFm4RU%l#8f|+5%Vv|wfX0<@X%%{XaI^W%mW+|!EMIw}w!-2$f
zl0VDAvpK=CkrQl(W*a(BKs8v{vk!yA?E|at?%d1atI<2@<7jT)=+;h<zNu6xB|z-@
zrb?wOpgkq70#_B~{<czjMozu$`Ih{Ypvgz#>Y|dmQrb!vH<^M0v=5#=Rv)lko993{
z#R9%_O~E4<I%VZxWnIPd9F1B=qiu(_Ua%E9<8Wri`pIjbc}sN*EXy4_0DQ}GXO$LK
z3*@^40#`Qm9#LFwJ)H*&dNZcY#`O^D=?(OU1Z%6<9I4dFs1Qc%|CX=nZQWb4u(w0r
zlAZE>hiT&BwkSiT(5q6a=E1hk5xwstE7;cUYh>8h(7EAw=`g at 8XE|aR;8uUms^qng
zS!%j_p8r$!x=ERWy2|Q?hB@)xvu01tFP<*S6uj=`)jB)7ULo(UpWo}_a~R|nlowak
z<mTp1%r;NJ`u7_47E>&2Kznrx*{lD9c+6oUz=#$YfNtHp at Yyb51AK`1USJt}gEdnA
z)DpAFS10sRNm<(KL9xQESLUbc)lfU>UfFVSEh`UDyGKf?NMFvcp^nr_jmp>nl6=O6
zbMVgjYd3Gf6zqZIphk#aEB2UN4}cB*Z8+A|u_byOqGtDK80~Dx?$@|V{2F5)osm>+
z#17R1pqjX)S>xb at rq?ZPK|ye9OAC9~!NCEj-S?8&M at c?Ylvyibg>)Onw3SmxcNB;j
zk=RX)Q<(;l?#qjnI0;>W?nsi_N&b at DE4qjFTG;YK%jLfVR&c51&IMu2oeNB%;>wAW
z*YR^s(iz}ACLf(u<;zH?mvXR!9JX()W0=lKD;^B}E{C*}PwX=W*hRmIKB=fcvrH_M
zxV<5yRAPz|Ge`%yc<!{4OZr836xxq^`!=-hLL;4FPJf_1ygWK=iXkZ at GSb{WW@?30
zx<a9dkMb!`!DD<Bo$;-LuPF(YZuVs{%%6~h`4hN+x2RJBVUw#^ROtxxhYkmM9oD1E
zzK8#zbBoqS6rX59%QW!pdp|WiNAE19do9(=h7_e7N_sVtaq4;8DsL*%tn>1qPDo!9
zo=`UXc*w+_Ooc{VA;V0A*ur>$W$@;gh<`eT1ccbos04_YfxlT=TAQ2Zwl+V1@#6E(
zU;Jd~-}Jyx5fim%=gz(Rc092+|MI}m%a at NH{j{!$@a#8{%#m%EIb2!BO(>!yj0+Ic
zQh~bw%wQ;~%M6JK%N!|#r!S_Ec at LL4h^Qe3!Q2<R6I_B3IJyuPl24)VGu8mBi(z#q
zC<o=8_K&z8)uZ>Wik1m}k{g9ucHL0DJcR0_D7i?O!^Bh8pQodrb95s|my4(cxHbBD
z{fOW1vj0B8Gy0DCf!LG+sc~jM4-G~%(n~ddb7ZyRW{hW~0XjX9dV48pE;II`EzcNf
zSaNs<>vh&U3L6aYAtYd6Bx1lCI?6~2#&Nc%E0&Yfu0Z(J*L_EiKl(t&Bbr*lTprBm
z_gz*nBY46JW_0f!hq)taQHCJ72#sA7$zBCrqtL_eLyvNzSKH_jPV`C}Jq*(+hNsU(
z at 5Y@9qkc2blGZDf3Y>nVR4T$kX=A-o5kg3Esk@)QpPSs at FBts`G|)kEe}BIMcR!^#
zxJ}A<NW~3CgFhp0)60VV1H40xAquG=ToWAV#(29c{e+ZvfKU at 43&$qvbMlMiI#F=u
z8{Q6zGxooK=hKgHpl;HCj0q(3#7TPNG1y;#AV3%(ig68*hPeeQ^{N1MfF?j2;}zo_
z;}h*0?HA at B8f*;F$Y=r`sFQg_xW~AQa72WI1&D_ea)5agIUox$-4*HP>C?^W70^Hj
z!k>n+SAZMYd3)#2f3h$e+_XUr31_5NOrMZmUOq?@%pn#A_m<3m^2zx{OAL2uEBX+9
z?+QhUwvpTl1NEkP8ddKub7$&#2THxn-31d0yqEbd^<1VCwNZM1m1e1oZd24zZel^3
z|5DupuB=>!y(W|>h+zTZ9$sphGC&r{21)(23Lyw028z?yc=Q^D9R%Yh){77W8$6BC
zV+dr7RSLFyUCB$Pa2&eX-&VlEgOqOIOE$y?PYG at d-V`juca(v_HW`Ks_ZbZg2OI`B
z>SvrB`hMGfSiXWTyet^#8!7 at f`}&}oezTAEWeR at Z%Dtb_U~<rT?}S|#_XzFf5W)v~
zK|Y}qY#(waLisav6Yu>I^zi%8qnzlKHhP$yPM;v{Bf0*Wt)tSzdHQrjzvMuV;^{Sr
z{vqj~qlaNSk1YVvUXUWqx4;~%6fc##szq(uI(MqgP2uMz5dp?mN3rf+8n+-9N}-bJ
z{kVt^4n4^lDoTK2 at S4XSkM&=QVV-RGNm%p+yh+!FqeRoM0|OWb--BPiPOxx$PM$qG
z8k*A3xBWw7EcBdy+Ruim#PMI at 0m5^}a6Ct_jLehZIgt6saqmlzJt{r?KJ+LjdbN!n
z;Y6>r(Zetu$qL at oB*6~$O~lh;kQR- at Fla!z2pCr}jz16ySO&PzlnViDJ{QMXkI9Ev
zF)b1UqZlNLfnWz51I~9s6Ew{S=iu1+;6v~sTLi~IQ#<~?9esbk1De2x<UX&z_pZ<=
zbf?7VfJ9K8=JEcKZV at 3WiI`%21H#m-8xtPl=QhuanHSRRRU7FaX$V*A<N<yLu1T0&
z7$JAp3Ed6Bk>my<Km|54HxC4l<DO2*iR(zmxrt(5s)=fg+8f2=D+SUDF8s(8r&J)J
zClTqO9K55*n8<^CX?2M at _T+?D7XSKtKw!N2_5NRe*9Z1ZpAOsL>l<#(d8zQV>C?a?
zVB&_KYL6AMm&?mAMnm_TQ)??KFls~Bnc~&0 at XlWNG%P7AJ3IM&GZ5?rGr)7xO5Vw$
z$T=kW=42hm@$0^ttk-aQ_<iV6PV`C}J&dDsd5@%h3V)vW+s+S%&4JHPh^S3TwRy^=
zZSHm6k~U8y(R!*_9~s8y(7K6(yc8Iq!;g<{#PAStR)~(%1fv5(Sj8Tz at gD`HLu1fb
zkvcRZkUH9b07)3E<IdOc-5<cQC%12V^6nP|1?P*ar{22urG<~_Vxdq?nWz`d$sSSB
zo{T~0O7$uXfyPb#%qE3<hkvcOSLC6glnT%AsAvrp6cwmR8$%ft;YOc8q0uGMM<IzF
zizLv~1b9n+>mnZ|$GhjagsyjPk-+&|#3_;#Yn~*I@`%z!$HdnvYn5&Bo8oZ+Prfh@
zs}X2LF at jhDDYPS}<O;b`u2QJg8jaQ?N*kkz)r^tH$xWVB{BFa3BAah$c<h^TM3fx!
ztjoIYmA&xsqu*V)^tDv`@Y4x76;E{k at XEA<Q|7X54Q)$`y2_d=4zaIxFI%?m?hFe%
zZs4uIe9~Gqwjd^P_Tl+YoDMeJnA6<TRN9r3FkxA7?|yE-kvuqIJ=zbG(0&k76O$b2
z4L171(dqPDCwiid-seQu+xoFM(nUgB`<^6Dwnuc4AIZxbN2OEGo3p6MxbPrPt&iF@
z&Lycg9Q3N=w#RI8*`$8d-DjiUhVUm+JU1Ej>l55-&9uNZC_*iue4>2QBfO|MlZHz2
z3Kw|!D#Fd2DH93Z=d8*jS#91Gc{A?j?Q8PyZ^3JPxTMWb8*2`gO=z1yJ0<YRPb*F<
zPpM9+PifAFpN}{nc|PfUy23e?Pj|m8KH at i{R8C1#A>5V_*)sg*mb~A8=JG#31N7#l
z3s#c!z720C=AP>M8PM$D^(XiAJmLRn#H~}k=jlqEO!cVDn){bIv;3t4Pra10Xw~f5
zm&3xQ&nT~epTh6?0CGT$zf7x{bR?f+h1URf;oLg32AO1Sdh6|LQ%3egHn%6L9qA1=
z`ohua^js&p-qzm2(eM2W=hu+_|BJ{V6Yph{_Biim2kD2SFXZWBL|<*E({p*c0 at 0U{
z{<-!ROt;31BmUq{MNzZNrl`mWV~`<Gq?d*IF`K-_n>4lF4~2F_M at 1^7hCmO!)EMgF
z7Zf35g;Fo&B%zl_cr=M8w`N!I_XvrA#<xfkxm{w92gJ0+(6-ZT1OCOPOUjxDr`1IR
zqre!9{!jD+x?mj>A2l`fxu<q*-26mL>&vgfA8vdHuL7 at YhP<)boH%$g7zC&8s!?`d
zs010o%wDnh({Db$_T8oSPrzqS!=BF}{1C+4z6k<_F7Yjij}@*SKUG`iRXu5IA@}~+
zTjUH*CGV+^depWK7V^G}x%F(K9Ow-;`ohua^js%;qK)3?MAzH;u{3dK`EzQW;0v~g
z*VBz=6^C5xHDB!E<Ea!<9#YE3R`-Fkl*n&6#U(f*7-MrIeaWgNTE9Y;!1&(g?HxnY
zcvTVH-ABfde{Ub#&pyb at 7R$`(5#b^JeqO_ci%nk4rjYd`g$rSrPVQ?!@`aZU?F>VB
zB-t6KI1a&ih8<*#K}Q*bx9^!H0Z7WAyQxJgy2 at d<aFPZwuOwo&PdT{P$;L_4G1(#Q
zxsPs>xkrVz;jgmpG&9;T)q5vy%6}|14S1rD=5_f at TT;@GSF;z6X-rN2`_=p&)5hF)
z7NU(3pYUw at v4S@{A&4`@9Z2Waio_O^y-?2Wg=|N9gN?p$bUHoPiLSS`w{UbWu8p*>
z<ocOJ*>fn+nUr!l2snp=m26S7TfA at zg<G$z1E)}^*Z+ at FC`gd=v4LPPEQ5j>o{#)L
z$)KSB<dl$%b0}={(%a@`nZ(VPvjL2e8<7O{HAqIgI>>&%34WD_P#p#eQORqtwQrUi
z(T=zY^v>;tQSuPFyW~5^_OKi0>!bF)0R67LJ?zH$>x5oM at lW97dcl4o--YmUVmy%t
zNgg#>mrN(#&9|2uk>r>Px==qMw(+3$XguijBWfn)*uEOIA2UjOJ!-#bl=k-VM2|im
zdLBO>f_qEa8 at cxE57zdA>q0f6XAyd+XvV!~`SwWfLo<5BDL>nX3Zv at Hael1am(f$6
zs$Oq}ev6xNi%8R}vt?-qX(N5ra)vQ_fk+Q3KFCWF9*z%q3X%zQDc3ms4r{(P4*5_h
z`K0X#dBl>4frwF)wsBAemUB%S!yhGY!&gD(5zsI&FnS6%$hCA?zP1dh9n!dM`gI)H
zZ|{Q?^rl1Ycdg(zyx*z;qGnT$?dPKPip83^b9-Sn-fz{^i1uWCM`=&i*SS5~pC)d9
z(j8<UhT8UL8NWXT6#pBe*bN-_gQE;F&tZSQ&F{~0GM;e0|0J}|WPeuT-g7C(_H$7`
z;iUgqfr;y%w9iKLTyi&dQ=1&xbNhK@|75<-{lf%|?ThC1ykH$gJGU3yLi8utO6n~4
z8{B+_Yxwc^ll~*fxqchp)f}Cn2|dq-<F|&`w2bJs@(WN0fe`l~xwoG-NErwez8)@8
zHi!w5D<ndFC^29l-bf4<_$!aSYt|Z;;>vi8Yn#TcE?Do&2->Iz{8?vAUbDngqF5^O
zp=nouZmO6R+zAHi4Qmfu8umsQP9?{&L45i<ue$MHO-`V_;CDti_&e6%9MOBN_`OWS
znY))P%$vPuT3XKFf4zh0HW*)ryzyXat=Y>n)ms`ADbYoG8#UtvE|G!m5+fBUqGLmF
zem{Q|T$5irhpq#&Hqb|=0sapvMZMw<gO`>8y~_0-)bI>)vy0HRmvMJjipe~0#>KuA
zV_ae!Fgj!~h7flaW>bzCjNG*Knm<S_$4T2D1)d(3V9plxF0_2p3kOC?GUsL8ugJcO
zV78F;k0kqI2+<!FCZc`RcQ1>aoBty1n-TpKckb_PA?KcJ{|U)e{}t0AbZB3N=pS(B
z-m!lq6I1k3bnemp<J3Po#~4eQx2p;1-t*jk&qefF!Bs at h=jf|#e1bkf>`I&+ZVa)*
z0WNo*HQI84cm98p3w(@Ej<;|r at npPZLRZ9h$nzB<DvBA42IgXB0`*?<n`8K~Co#VZ
zuFA>SQJVr9b1jjXP6(Et8^hhN7~lB{e-3w(_Y_6w$uNnYjQEQYX&XZPp1 at E1dn&>B
z%H;enp!`w$XhKhhB{;Vo)7f_jz0jH)&Hlg!{jYQ0cmCg;_y3bQ at 642zp*vt_OAEX*
zbkSk~FRX?aZTFZzIbY#S1L#KU9mDMdoC_~%C3FTXMD!`veS@)~$^Q6_><_*@EXTR?
zn9jsfLH70>mNe=oRPf2Yd5--v<+!~llzso+k&*4G9wwAp<<x#MZcp`q#Z*7n9_`CA
z)IN;h<xe$7$=uxpEF%=D6t1E+ah(EVR?FO#5`mVbDM^r2DO0;pL2{`=NKo at rteCJ?
ztg|FLk~Q9Jm~|pehQ}}t)&XMa>N~kB^Xf at D^9^9igsbUi`z+v_j>>)XqZr%$+e-M4
zp?y5gH9CQGAG!||NP7>K%iLW=LLnvTl at eS57o|wR$S64gk#3aHm5CG!VwD8?g&YA+
zF-zh(3?9v~B9#M^8D8*<XEOY76^S|#cot_WuT6ay31^R{oJTB&POB~3KrgWjZL2HW
zV6)kiH5ORN8jrE^baam;Abztj?=Oftm6sXn;be>_O?bvCN?~u0c*ZRvBR$Xlh3tu`
zTzk at gm(3>-EocNwZ2dRz`n{9PEbPZVUb=BFwu4Lso5&j1!z6-Z9Yn1+tHnVgLy+Dz
zD1d{j*2`#u?#qGp<1GIdJY-rC4l6Lr^fsXDKn!&41Z4fPPFwFYPq`~tK6vx?=~%O?
zo&(4Z&<7OU7vnl)N=SRi(vUqNqhMUCMM%3hVv{FMd`L)4h#v-eZ7y84AY(#WjVL0#
ze?oZ3V5SoU_HRYA6>|L-wNX(ZJ?SGJ5F6KpOk#7{Nl40UH7ksfLO-MXcs4SagEt7X
z!W+o19n&VbV at X0Sa`z8r84$?fBN#C_0!32Ct*8etk%X&V1ZC}X?D0;IP905EnO$ST
zYr~g at 4}_lz7uYKsU}-^zGfo_=xrsO>WjF-Fk!dA%@RW!MM=XRnvp*ZW%>$^Ur7WjE
zwt*tp{5M1%0NF$yh_l;bIK7kTVa0a27_}$z0QU4ax99YLQQG5sF>aLh_+DI09i*(k
zK~vr6^6eu213k`W3h?t<=CjmenO3Pr%tT&CwfQa8J|K3X<r0CfMnQS&WS%OS!e2&-
z1 at 3Oa7$NH-SC}x4gKOe>$}MX>4qPcDzz}P|4mky1`a;0@;KIOgKPlVs8vGKz4-$ca
zedDePE`dehd9a*)9oG at L+0z5n^cxskAD)2c;Ct`|3s?{8Kn-}v(P3)0N3S5*6OojO
zYB9&StEI*$p|_ff>XoXuE2vE#(kEhto5F+E`+3xk^){N^yco46%8QYTz4YN@`H5kx
zbCQF#Sq at XK*$mCtO5|P?56(-^yPbDGA9db at VYM95E1V&=LX38xE#92W!)@7+Ed)pG
zxLc=|pU;_memRGAvGSwLoU^_E0)WThvcX<}S9ue0-K<(30%LY<?Q9z;7td!BdA<h-
z-;1~MJ?0Y!zBkRL8<t>9a>Dmk5dIc#<$D;*f!ujx34NMF|5!JS=XL)ti0;PqkNMs-
zj_-}-`X{*GPUA_i?p@}X!+6Rl$M!_lV^5Mj?bx2^lJ1mad)S3>#nE#UIA1w+(&|IU
zI1Pwi#@Wr?o%*-7N8>+f^|j*ut?lV~e0w$Q!g$!|4EJJ7EqZbyFB5cO%mOt2-fuB=
zIzJwQpH2Et<okb$^iMDjgawE`owJRw>+k*GfVZuqHk;M%GO3G9qD7avMy{ZOBmxnQ
zOUGdk82*odZJQMeVVjzv+{7|bn`@m0i2*kJZ4wA!1K}Q?A#lv!a~KHs at C*UOC_QUE
zH+k;$e8W><O+Ik|;^y;BR=)v%1rjSDH%{Ps!$PNa(`F8rd+1d6(AyRVTn9Zx+3^;L
zR*DZwB7ahh1i!#!MP4|0a%^U{UeAFqWMr&fZN*=>u at PQeogW@i^YE&y%tIh at qk}J&
z=xEq`idJHrgY7dB?U%l6ygucWqwkjE$+HMgc4*J><V7Rfb3A!u|AZ%x?BAu?>eHor
zz+5of*8X2M8*R_Dn~uI@!ox at QkN5lH`A+ at AMvQfC>%SK?-TMi*huwlO*2wpd=yVfl
zPcXPe^YM8S`hmr$r}2bNFc3K13AB at aJ%i{}obQ>mXP+ePQygu^`23~d)|I^NlWSjT
z^HqmoUp4BVV8}Y1`&9B=lJDzq?yLBDaqZiQP3vQ at +PS^pYi#35IXR*|K4+=?IeU*h
zm+K#&<0|eP`%+f>1;Hxxq?*k#Wt0MV8Wjm5BAI&epoBQ>(ya89D3D65kZU%%VOiE?
zC(VJ=5HB-_QRwX;t72RZr2{U<%e9JHC7te#F$#l+;}UZDD<Yu=9CLsrBv^&v;TAh6
z;rn at o<C3v_$lNpYwcBv62)f+?{%wN-Nnj>D7G98GCeq at sELNRVM1UD<42eMEJeTBT
z(1Vz(ld_gI9Pg~74c{#2oKm#?)T}yOeQl`l<OgtneqLV7gAmtgD=B^vUJ_U;X1)r_
z^Me#sl_wsYGDYbzt8V{SA6w|#>FE#cib%Ul?L7SSltP<6Q;+SsOfKb!TPnx)GoaRK
zt;6BwOjrmWd7M(t%ai>30sC`v)^Etp$;sZZJ|~whYKEQ(r6ql*|Gjwe>AsTE1o-&T
zqu}dPbLu-fzP!@jK4;Dw%sKeW=ArBLF|qJ{DBbx)Ol<uD4uXu2li=#zc~F$ChJ_f3
ztO2%Hr7$=Yr|Sl5AXvQ7`c_Vox^$ontQ%T$aN%Y&duE~I{G?O>o}UADswaUEQ_8Kt
zs@$Zko(xA+RWcDCJC!-dIWeG=Lsez&K0rCwy`xkKr0N47<`Tr0_T@^H2t}P4AdxFy
z2j{_;d*MyT@^x%BDPIS#9*6tkH1h;d{`xUc0&<WjTC!(1{~S at 0uo~ZlKqw+oF!~!W
zPfWmjOE(rTl at 9M(vV=lkU<l#XQX%Ko78lUl`2-n3LLyQIa(dU!o;x*fel}JG;=+q(
zmURTTwZHezKJ at 3GPq((>l6tMU{LIEp$3f+#PXlzJ)5oXC6+|`YU4H%bii$&rae=)<
zhl{4{rg&^w!3lv6*0KP9TgdrwB{+{y<S;-oJ}Y|c2K49pocb|wisF>T*%LC-YQ{tq
z&x{Oj(PU<=cq~6ZFW(9%yL|_w?rq=Z;i}x69nTLdHFf#*^=5PD0yuWTg2nyTeedAU
zAZPS8(bN5$Pbk`MMD~qOrUMcaNPRzY7}svD?gm at H^2?v$@Ux*KCqH-<7 at pWk3jOg1
zuu-fybB2pRvm7`;w}NcSX>W`1?g&=s at zc;w1e~ciASfQKnw~43!F&NPy;xFw;5dE!
z<jJ8zco|-=+XxoJp^`oey|%F6(BYi|QmyUduQo3{2nH|UFvF4O*mi*V18u9_B;*b;
zE~Ti$E)|V|nUa&cenU=ncFu<Nxj91v%qvHa!p9RzO8ZVPUW^VvX-NX~YzAL9zcFV{
zd;66yJ38v;u)kP-KV>;k9~<+;PH-C}#KzRq9-BEo5p*G#awPsOSj(|HP7h5)-=VP>
z$=J{sxUGQL3gA{BzwQvGE<+zuS9dz0sj0nHnw|an<Qyirpzg+o_3Jm>K-*${I(%;n
z;(z%dG(T^fx96B~YnDx#C|CHO at vMlB8Z$PdCLnM7b}+bo$Bylg-9C{y*wqEcbuC!X
z1<wBHRBI9IHzo}yDp|jh&jQokv_ASI)b;g&8$-o??6H$4LH-50<2CTpYv49|<!AvM
zYeVU=uL4g(WWZYp7kCn3-JP2^`kM;$a$|@}&mTdi<QO_vCo-Pcc?;JlN=$5 at -T%P$
zZA+KnBgwwi*MDcwu(<!%U-}md9-LCN`$9`Asra;cV|!iPn7BA}6gR$@1$2)c8X5z?
z+<EZePKUbnVQ3^cw?6=HF&>qHS8*_oT!2%#XtuQ7?J at YT&Cfp{S2OU^(e1mBNZRLp
z-39**fB4|U&cnZcQGHpk72bJZ>ADq<Jlyc&z>cF^Hp8z>abI6}=CW77i>nX*IU47Y
z$HOvGBNCk?RUlHz)p(M|5mg at 1N|!(U$ov<&V`710wZ{Whux!%bPv;eUCP;D!txbjR
z&Q8Sq<X$p-kjMcs=o`#8tek@&fr)ra0L~lcE-&u#PPC#5vtr+Hd{^Vp|H>+Id0R;X
z0~|r%sZmAy7{?`Hpy4scX3j*{IiVztdyF}c?srU~tbATnfcS4Lx8jI>#nWg!xQL_x
zKb}b6tUkaPqTqNk$MFci6Po*j<Q-!#PqpBhlKCZbzI_$fl!U*+KfxpCJ~(#{R9w8{
znQHFeu()QPkKpdYgre&L;5x|*SC|~SHP5 at 96qwxc$wgdW@{^BC3zAYYzIfD6jH}|_
zn?!hw2J;x_x(<L63GsjcrBUkx;>Xer!wWmm5hr#cuC*(59QX`=0|J1YzT#Bgq2%!9
zvoC_z;Hvl6uD!^~X7}!h<Y-NjD9Q>F%=31Q0xtzGMR3+9jl+3}S8z9z-B>fVxb at i7
zlJJPi{`Q%vsSDe8RLlsEn3`Q(W7*$a6%*?KE1Z}(r|}|uZAD57Sl)7SM`J^DvU%C^
zU2U~>xf2aRb4rc?*SE8>d1sKlj-`T=Y{+TgG#65qGCXpoo7;P7UD&4vYF4DA&Q6$f
znsp^OLfEU$Fr-!;#fyaccxzEj9Is4 at TEgFenEbXF{)X+DlEZX9dSAy6b9)8r-H!<V
zf#r7KaP1ibMYd9iwknwlw*Rrk6DMRP)r<*Fot`(e-&z)tubnBdtWYTZ(d8B*NE!OO
zwLBtUGZ8&2lg9uKby$6yA)fQC4ZnId;3 at FNaLfGA;DNeX&lIHc!azg>?LQ2f)?#7v
z_SIBduiE65R(}k^szvWwWvl9Hb!Dau90kosj^KC@@D~fyZW#=*z#XW+2J*Y5XzZU0
z{c&Uh;19RR5N{O~u<4kGhT<lK<GyHhaG)VR#m84zjaXt#TWV_DqbW~=H at acR9{3$R
za~SG+z^)MZODYHucvt%Q`}$4#K<45S9ksZwtn=>LmKOS}p}>|F=ECgP%03|b`KqW|
zaG5fp^|oucdYj%m`ggYEH)cirQ}d8CegHrWD{G#x7yKK4m|)%u;DG_SjR4G^@9J)B
z{FwRCVi}D1)7q-)qs&(HF=)?f{^Re19K<Z*c_vs!Y|MzKGK9HVYnD2cFjSKR_2K-O
z$nx%Lhgyb{-#Mku$;DMnW5<v(rna(%H||#b_N78W?6_q-hHZyA<~|s<%l|_V+iU;7
zf!GfEAcgC&9mJNg-N9InL;FWSDlN)wg%&x!V?;})(kpdZKy%xRVX~czF7kKqFa4e3
zL4&xnpS~(>>;L7~{x+#Esk{g*_R5RgJ=}6|CkVpVFa0gPiVr;oZ(uod9vaULV%v(l
zi*@?_LM|R+Hj;@Wh;6HQh|t*!oD2cqaPdInkHEGk$I<gQhtvDPYNLHl4n+?gW^-;w
zYHCi_m+zb$+H}3TyF5}ZJ8PXBUjWf at LZx2riZ6e=8`{#s{^hS*V`cJ7_6d$!53vF5
z%OtdK$lC^EM-CB5bT~>A7lvTskU$q8lxvweQ4_MCc^mtGrq7%pm9B?B+~CZnn>TNH
z{Bii%<J(v<?W%Zf|J^%iB%)<~Zc-$@!4H8641%~p`bTi~#tk^`N6IF<dy?951~djv
zr{?NY;!)USdGwP+K0-c*X1`gnf-6-ywD}~K=j%>%f+*nfSYaU!k{4X+n9r51L at bpE
z^EpPvkfCVmw(WcEadv`N(Y(f?XKIEi%FGDn>I<B;W^1IJqtg7!th#3=X4-TcC-oWe
z$^jfZXV;%W>4C~B-X)Wkviz@(dNctf=5!7C8mU*QCz7BwEr4W<q0PfpjSL~i1~MR(
z9<LF8LnrCVPeAKm|MA>2nWi|dZserIaa`fZ53Cg<aUrq4;u?`!Ra7)rI&z&c4BkPk
zeEue4-gB%Qi8TOx>vI}TI!LqWB_dAQ!s!Ykp$sds);F4HVn12AWN9D#2mG;Y`UkJP
zx45`u_lxBfijMV*7dPDo?$gUZJ at Zo1xaz87Z&X(aI<rllo?m{xr=~hJF{QT!G2X1q
z-5 at POr~UZkp;@ygBqxp^-?}<0vv}$=Hu;TU0gtisc`~*H>tfpC$wwI)bFA)k;|B{m
zCuThU$m*!5l;j0n53!cnua^G#)3nqz4{nc*nJ{7T+N at 00k{lU1z3lO}%&eHG at UYN{
z#bIF!8n1^(9(bf7BO@|uOhiOxMND*ZayQ`(C1^kUVcnGeJK5jkVG^SjYLUJeizR9#
zwPATWM39gQOz7RwjL<qD4KGwBhNuD!0h|rs_#Tkx?(PyF4P5-|0n=O2Do>7>SsW2A
zs!5xWk^Ri9MOwjI0(R(o0SmgHY?vT;p`{PhWT!olT4OeUSvGWSNIiFIT6ARXUjyax
zs?Lq>?CI~{tx6?%=SjpiY;?2 at Td{bDx#UuTa3nUb-6Izn9-B5CrWfwEJLRTJF=Q`#
z=5*fHuE8gr7b~1jIh{!l;u4cXC*HU^IdfUV at kN45T%kz|dmEqR`urdTxAxe!U5aEB
ztRY)Rj^Co%Dw*082WK&9D?bBl;hvI(E!_L|ISWawk<0-bx+hM|$~;8>sb%9x8A*-w
zqzqC^)@r*+bTHK0c9}qulaq@$IIvplW1 at P>BO{sla7Um5ace<5XS4tPlgov9V`68M
zJv0N!FAC1a{5yB=yiDkk=-yezPQW(iUkF`bBxC7EvZ)cB(P;86uuO}0I;Vvz#?nSk
z*u^pT__ARGI7Jq}9eNTR=%R~`S5>ZA172UV=EMthVHZ4h;davad9&|P at T(<DX19$W
z-`6Y1Ujw3E%G~+Hb$H|Op+kp(?gmK6d<lNCW;)#a>EkO_G|sGzjj3#0xnk?3fumSn
zz6S-{(fbLeD80}@0K=Lc9u-k1#yIE`^yy1^M0^kTTmI?8YbwjPwSHykPfDIUdug-l
z1WuU0`%8aDj8J?GJ^s$R6+ZJzp8w0|kFQu&KQq?I*Q*oGCbn9uoNtw$t=oW;NC6|o
zTg+aJZTUllb&J9yiXSk+MlAl@%d+uoI(w*<$0QXLu&H=nT-gGhDW3ByB9Rscv;q<5
zel%z}#1`gK at WjNFBqZC;j%n+SLki+0BG7KgbfPm!m8r={td-APJk&>^lH-orC=NB@
z at YzA?2B*Z}=~<C9*<CObZe{X&@A`s`{|58H4pO}hW-xw-q38lUo=ry{rc-bgx1oo*
zGi1g7#C at XsjPJ;V(apH-f&4{aB-otry_J{XEjpuRumR|i+z*yxlup=;ME^J8r83ZK
ztwWWA#%Lh7m9;+|zsP#->g2urW3g~l1ImYf?qizarYR>H=4 at CG|J~KrKCfMJWcT)p
z@|iQ4(gv^>4Y(gp6#4cnI`w1!VjrI*FzLwy^|PNn(=ccFGi^pP%)-cJWxWvqcLacj
z-ZL<BW_bl?9cgdtg8yE>VNSz|DR2|h+&A<yC}&FNG at N;McKv}T;p<60K8yQ*JhiCD
zR|Njt4-b3|Ya7TjVFH_j-rN8CXEs>SGjqYyqd)U%8N6}=P9 at J=hxDph=!}QpcWb|J
zP4>NzkchO}1iKsqgzYVJTbphG_XRuQ=P;IT>l#c2X9E3T2tCtPVlJGrc2i*`+W{m=
zetzG+wfgD9F!lu8KNp-1)E`zWA6WbNv}svcME6DS_<Qt at vDMvL^O#>rPA0RNhmf2&
z`@{$E2ego1bL)8Yr2)A7B%9hd^zN!@Ot#nM(-*#uGl9U(TaNA+c#&Q}j6^iIAC3Hb
z4MN}Cch@*Pjh4SO+O`>hXOA+kG(%6?O at p@0h2h(V)-}UlHp5xunP1)emT5)zAU at 9+
zPQ##avU8fWcHuArt7|5(@x+lM^NZ`yrIF1?+~8XyB4Xx(fdN4WeA)7hOF{LuZ>p-~
z^1#2=Mn<QloO~-K4G6h7-Ye+8B_wv4BCxMZ_6aWi9)SpmzoVZqD(ve9OTZTFJp)U~
z?<f&{2WP*)!N$BF*9I~K9)ue}=RVMhzrYRq at E4|JANU3a?7OfJ27qt&aq^`7*&@Ut
zHHLT<H-dfpcJACMNV+?l-DUMFxgNqkQIL*DEf-=bful>xu+I{ho#^Ncid{Lnz at N~w
z_}GRr7bEfAM+u4uJ%*<ziD<!9L@#inBbkJqK;rNU=uLz^g^vv at 6JO@~K?BG1F+4rV
z<rvqG6FnCu2|wriHxl|(hrALyrbRUSH(Ol2W4`9Rah#8{4863A4*B)b%wwdz3!<-b
z$hDhyFUv6=$d)f2Ey%L<@0cq#uhG%BZO==N=JS$==M&9y%zJiuT5hB_2p*)5DuvW;
zyRVwhci`fjPCB$dLwvxi>GN{u_J2kFtYve-0{O`H(f4Wp*nQeZj?(@!)P9Xqd%nIN
znvu}H9^8D`t7JZ_?0G)?e3Hm~4vf|wecg;vMx675 at b96Yqu(PxPqOFza99{z9uoaL
z$wPX``g<ZjE<PMQMcN;<>KDTGJkLdUJhlr{n9;}UxxYA+LL+4PNUJzjrx5rXzIq26
zgoUu<qbfKFypD~+ at 4fdR{P1~r1U7?hpkgUd>|k}Ty?_nD at MU;p+_>c}TUze5yj at TL
zp2o&t at KkaN-0e^oPewe?i1+Z;R!&MEwSt}8T380#vzWf0f6mF}6K77`r-t3Y0QkD)
zWc?hjkPIB>T*VH1gh;8GjV;4-O`-)AqvV?4JyJ<gPPrYPeETfYo{I&SVjHLED5f)c
z;59B5oWu<^VjB?2iOIkBlRc&mHez3tJcRCT{mC%~54U%W at dJnK?d>ss;4t5w$P3(f
z*gVjMc<ds+J-T~He8oIpeCE>m_zE23z6#TEY`eo*Cp?nyq|}i-lF+M0;gOiPRXOoU
z`}+(ROdIumuC>2U?k;xu2Jvv>8Pq#jovkKq-ZSM1ct;HuNd(m3?^g3Omw8fEy?k?K
z?h(+ia`{<!cl9c|c*oEKyb*ekW|06o2*2&<=vW9m!L(Kw0iW5hVdF-J*xMFz?mNkt
z9b<dz$+<5kW1dQ4D0se$?j3jHYcT>nZO{2qnM77KzySvb8(4THC6PWE2q7Jm#UtbR
zo%z^oDl+PVzzG{14y;@OUNU$D7p0f7FVRDDnCTA?cpQ4lfGTe4{G#*_pSut7s5ln3
z+c!A1Wd782H at wI!&o^2qH_8)nk_;>f;327nfg$+uj_}Q@|FjM*{n(ikW5TBF`F_uo
z?E2 at +%@d|ipI|Pp{%?xYidtS#hZcRmcklN_St9t)^z!NG7t8N{@dqVqZG4UFA>p%R
zJskL&um$fS!EQ>x at inr3?+T6lp35QacMv+s1LpVK1+spxI^LV8y@~zHaDGeLZ*$_a
zT>C#G`i_zOndH^%aBOeQcO(7Z8j(-O^<O<AKaT5vw0u2GcW8g_uN;03?w?uZkVmwN
z<k+LL&EMnOn8~)hpz~b+IAh0_7bHXUWnBLZm#zO_!{UHVf`n1yfVZ(t);M5Wd(!`?
zamIN3j_vuFPx5}=C+!_$O1b_+Nqff_QSSYGF`_-!zhirQ44g@@V3Zg*+<!L3N5R?J
zbK at T^CJ*=T*#22K)-gtuexCiD=iOr+Vni|B8uK|8+g7YGoQS at fmk-Bco0T<&lYX8#
zZ=3HL{*GC0&mSar%q^!oCXbI-wg_jDT8vuk^ArTckHv8uIxTQaMb*V6g8*Iu!M<U{
z35cPGzhg18Wq$y!u!<Py;6JPxswYG)V%kf<!ZlAeOwjq)10a>jOC8D)n>ZUCt+ZyX
zx?r1J7B<;sB)CdqthX*5#@8dSgv*HTufqOWTjdOsI}jO>zL)4ws2!YfdH9i{>PTOS
ztzi2zzsx9_T%9 at v>-(^s===BS$6kj6T<7}<5Zmf;kbbHrSJ=+?*3soJp?<jBh2;G%
zKL2$<;OUhA+QsL;4zMK-=bM}lUe3)ya-NXdW<MXiT-Ze9!V{ylNA$->w67)YUv at Zu
zl_Z}v8*~mke*q*v``++4f4={0PVO9eZXL%3t~<nLa`b)V`3|w1oNQu`<s at -G!OT~r
zetiIrw=rqs$BKkTwGQd}8a3L7LY)ThLf)E2Gn3ZtX*+%>Xv3e+!JoIch{1foc&O$b
z1<m`b>A8ym{o|hI^|#*53YfNe^PDNFXa2!#<>K>l?*$82BDqpTjkP}qj9zNf7mW6N
z_7HhC+)Z41eA!Lx<{LJcHhv_)%=`Il-oMR9r#p=8*_+n+{{`vdA}n!R$Hge_^8z at V
zHTY%Jx6npx)%?@xM_{?rt9bS%ILKM6`IwX>a15ObB{j_~l}1S<38XH0tcnBBy*0)x
zSF)~@t3<X*MD@};MY~j_W-vj&=L!a^Yt`*)o163%bi~ZKO0a9E6juozSsD0u=Yqh@
z>&|t6xtxkD66@%Rxu6qgN^}f;Wa1qJe|wR6J`|Gav#})`u7h3rcS3l;VPSkZNo#=Q
z(1`<fB>=G_r*KI=_XC!RvPj*}SR4uLRL at coZ}N2v%v9j04O<aRZp11lObYvG9grtz
zdg!J at RZQDN=xpnF!IhSlWc$#t2aT(g$&DPoYsIY~^4`7M_udtJA#|raC~wN23Zy8s
znG%6X1$1Jo1PZWaO=JX#2Ec%1pl77B6T#5IUErxA7!L}G+zG?sPp<pn&9P=s<}C+r
ztc16+H-f@?OR69mHh~LS&}HxmB6EJ~XGux|Tl~NmploP7pwV8BMq~IHjUfo at Lpoz3
z3H+q=e2|2~5MtzO+$5SX!gmP16^QkkR;U*jem>ri2p+-lo{gPdMGHG*UW1pVvOXMk
zdLje9ha*DSRK`#1-TvM`e@&YF)0CMw;1fI(;1RwwYdQQlH+gWCR(*KSZXBY at e#LZn
zYb)S$@a6M_KLjH=u#9~WaiMT-Z1Gs{9c5(1>Bf%>EqX`(p(fyUeNKH+Qe%E)i&zdR
zv6uvRZZUo}aAEZX at K2#IYsF*Rs?*=w{8#E87~|ol=}VsnhmxX(_9$cv7WW at Mw)h9S
zP$V?}@clxHkKMsJo7hHe8XmYqqR~2>B6sM+eGZ{JP(-pNu^;X|^u9Ns_pQZM=7?(m
z^<hlZah60N!ah_nP~hB(oW9&56Z=aa%%K+-4t at N_;E!N~g?<uT?Lk*)RuayzXdTL!
zOgF$(i=Z0jf|szZ045P%B+?rNI_vw<a9&ALyl5m`*?o$78o{>Qa39~I2;v(^-I!Jt
zH^n!=)8h|IeI_R8_f`4%5r08wO6SWHeZ{VST>DeV`vA~gl!$mAx^eWjx=M-h2HVIZ
zh#}jA4cQ>{PidiJs?!=%NnNpsFdvT?!`y4J^p3$D7Fssc at JMxMN+_u<=I1pl=Ni+9
z4cLP_%FuK2(ZQ=j>*$ZQE8 at e(=2Q%opfJS+#g7d#=#lcI!MTl~>=%r7_dZ6ti~Smi
zu&e*C*(=j(g%Lr5mM6Due{yKP#X<*Od+XHI0Bm9n;reIhqW6z&)DF&kqK+j4YpA}4
zQ!L9KD at 1=Dn-&xytW8^)J?5JgD^|={aee4dCqd)XqV3zJ7KLD!X~6uBQ*X^L at Z4pw
z*!3FX+r36vaa7jvd2bZZSlJl9v+N-;Xi4=p4}sOk3*O=s!K};^`#~kI2|}2g!>NKZ
zXOvy(TtI(L)V{1NIEjw7>wOb5u;QoIU|@Y7%LR==P3fsA<`69_*D#dl7B~MbB2}+)
zCy(NykuyeRB)Ze$eY_;$fuv;dwZW7WN9+~_58Gmp8<rRb45Pue;Dh%^a4n$84%E`p
za=@upvB3eO#bMl9Y##}>$sBy37``uzA<Xd54Db=$h9M3}bj9L+^vsgdgxs9<8*#|<
z#`QV52M)9_#g+s0F|j+JKzG6WF|oAJ9_&1)-Z{S7Na8<4qohPQc#ioXHVrc(pW-Pn
zJV|1hPXIUuh%oO=cFvYyW?$c5<=|Ex3U^Gfu==)q$)28I7JGV$0w_h4OfSDUAkHft
zkmQxlM1qFw-l=gFH!<x07|JZ8w)<{k*1O6dmuWV+*6QWAF<jW~!E3QV#b?{9Z80ob
z$N30F4Gy9D^>bP at S(!LCKR*w%Z~8ik&Bvknx>z75;rQQwPr~uJwG3u{C-P)8i4$kB
z+$KuUbJ`Oxw1qfi4k&DIRSkAdTn8k7J^o-n06>hjCaVl55!(mDB?|1Xr0Kc+H0`(Y
zd#flX5%Vbnx>)!VH?BQ=Y*UipU)D7isD}qxq|(Ep=h5a<iiU^Uvtz>}`Dlxb3E9uo
z%_5=n{fp7YD=opQ9C!uWSMd^WT%ViMv^*s(DysGiy<AaMz5jZMQ%rrBW$>-v90Tud
z=K#q87}o`7fhb1qyOE*(s^P<AdWUU1d?@WBElzYCB(n^Rb=r4#Uv!H8ANqaRAZe at J
z9^ITclTe9=NZB@$bswdIU_F;z)gV~5?B{QRcH at Q{Z+0(?+~QwQ*t2`;)S*+fS^mh9
zhq7~M3V1)Z1)dv(JGPgXKi{8jo;UZhi{+J*HPxd$PjBbt)~I9*1ZNCM<S(lR#&hb_
z-93c`{#zm!cE5RJ!$$byw?8jic2Ss<jnj8&qs!%abJNZJ&zG0)*bWEbxyQB~eYK|g
z<SXb|i;$c>9z81xTLOU28t5;wKE!B`VzmabBDP3gya4c1M++kSXI=plQ`1pf>Uu8>
zJ^o)y=eW_=ReC(G`~ZGjejY$Ef5PPAwS!xSKB3Lo53S0W;6eXV7z-3tQ&&FHvKkL<
zVLNy>Epl#p+7dimeekZ-70GE4 at Xa~Xs%t8N(kGd_x9jhH&b-UUA*s6)X(wSW5`P!H
z%!~5yqQb(*$Zwy{8&H<y4QQv%D93rpm`BKO#+bfLA;2eQZIrrKp$KOE^*)<|C6Bwf
zZDQ94*N!28^w;D!FXCbhF*lQ9f!Vb^uGXbUZ;lIy6I8ua8&?!(j$=Ah_I--i94Tie
zjlt0sZVP4_%N_kawlt8<)i(gBs at z?W8$W&Hf`gJ)OKVfnH+{XJIcrgILIV at drGQ+i
znDO)*&1oqMro<In8h!{;DyK}@y1FpIOJ$gd=ihYiGcx};YqmzbZF6ubc{=pf$oX*9
zjy~LYQ$YM!@Jn at ewzRdqsVU)fU0p*$@uI9ox~KoEqNdiy=IYV~8>h$T7VNI90)ROi
z6<zU_zd}B7(y}EJ4JxmM!qr=+6al3&=!b^*_~N)J3sTaW-*_62Y0kaRgon|XCh=o3
z+T))2Et5z#7?uWc&=47>);3JLk9)LH&J_JTKVwp{B`P<{kTAWorbG%~SNm`y2fh7Y
zO=(7NQgU$k(7_cv_VlhxcpF6(hPWy~<<yn%?>gnMxmX;gLeAiqM7HrG=K{}$WSu#`
zN&X`UQpkgcy?#!V4WU1kmWO5i^pm_cB&~IPQfAiLkdU=mnMvbe4}1np8$YKo_jHRT
zFMsvw{Je{2LfaFWFO=e795FbwPVVPwGSxQ6kFAd%YpF4f9n5<ilz_1>`Fko03N|!k
zWqWvJWi at Wtp%QR9Ji%1*BJpfoz`C=_jZFqv?LKnELGd0KK&m%XS%%Kqv~PNx#o_*N
z#re8GrMD at yDtnrWqvH)rNcz#lhCTql;dR;v9vI<*1Ld>oo*_ALIQVF0WH_A-7JPFS
zE4B35yY1gC?sxRY{eA@`Y;<7WDJ!gZ9g?MRtyLo*0XCXz5RK4r9<+fzH88>_Nc-A`
z%Nkn-XF7WW@$;eHIzZl*`UUI9CKH|%if-CO5aN6}B@&=XYr=?40-!Cfz{@wSc+v8i
z6_rzNrDnxT=`*0Ds<ox}ADcFA+VpejoZ43X40`9T7;{he&;MFb at 27PEeg$yeI3J(w
z+sUP`)kMIb(EO|6IQBO-g7U?vIDE#0H=i%#5Y2&C$5Dzi;;6F*xDDse-2Ree&wTrM
z$*cvP-+f#>cGiR#ef-)L3C4_Z&C|w~f(ziEEiLfRARYZb`;+}|FW;J%+c=@6=P&D^
zA|Ws#CNSyIU8^=e+<g*_XY;+USQj>fBKB at oLYyuEYakj!{MZN(C>l1RL?r6^0)uMU
zz&4kE^T?y`GqHZnF<{aoHOaHWE!Q4tA2Y?=v3*Qf!xyHgk{RQJ$3+%a#KbX!lRx?(
zDNhyi^^V2o78ORcv_uy*?CReO6w{SMVaYxo6T(BxD;hQ~nZKC3I}%|T`vs{vgkxTW
z_J~P7aFI(+z=DU7e)ouJ>eQB_r6mVIO>7L#-yv0ij=)o3&@wJ at PW@#%2^ajy&c+pg
zT7KVdp>25}xA;7-VZraVl%e}b+TaCKQ8Aw~z at -d9`oJ&=hq1IKCfYFL_&lLuB6ZR#
zJPwR;gT|5WFpiPoJ*nWo9hNV!j%(OZ{<|T5d3}GiL#+38 at Z){Po4oR$oJ>gY;RIJH
z1zsV061z1K2k+rHyH3R6zG1cK$dSM61FJIv_0chbdJ9g;v4G{6yD?A3==B*f(Shg>
zk3Tn?)cmH%F(Iq2K`-PEK)oQ5_nEpXP(xR>42{E?RMiy at n02lWBf{s4dpfN>!llnQ
z;<e8~ZLe_oOMKg5G8CDK&Adex1N<Fl6tRp#74G37sHIJ&nQGNh(2TAfO++k92%cIT
znfU-syM!9^SLf!ibh2geqJVKJ%0u4?$-6_(W;)Tc)%YghpB{wd5dNXK%w7m)PV^ES
zl at A{T;O6vX^qkwb-_~R&<CkUuZ+{2I(e;+WfZ4OZ24H?O#m7t6p?-Dz{W3zMh?n0)
z-3-$g1cxnmRyt_~jF^vKh6#d3)L)c6R?=Q_>yM%)ndlmjJM?n{eqHE+Ox=BgC&AMV
z;Q13n4Hlel2UTUz_r5WdXl+H+=&q0DWBl#hz at 8vwov@8H#B&xRW<`8)$-JkFi*YqD
zE?KHPHkM14D(7>hN=j~aC8snsUZBTYhC2SVwyNqF_}(&P*)wqx_i-=-=Sroea=A=o
zELg7NUI_Ob<9{?T;Srpd!adXH4+aL`Y-yoA at gqC_cw`ihlO=owjcF3rBu7LBa;Y*x
zC-x>9;YhLP%WIUvSB72s-1wl&UVebQL&a$tpvj4i(7%z<VlF~Qa>FGYrIdS<{Ip;<
z at 84kmfyN&_`uJ^j7wzylD8aGenk5=m at l>8U$Hw+7oj7sWz}TRcKRfc~ob2kV7vMhY
zdvxK(0Y-UEjyb2p&KC19_blt1nOclN!G;|++QL7~>SjtzB=BHP=a1Y?NWZ*g^@EyJ
z_C!3!02q^|bRAd+mVi&s($bCK_|Prz9`0`N4!yIbWzfi^4CPsP-v{>lq4~H_auRcn
z$E-)MmC+-97l3o&NoITiNsOnPw&bTvhK at +g`H$13g30;tv;4^*7^lH+03YL&_{^@^
z$BxbJ0=Lgvy1Fcbf7`wT3~on%AiHBbC+AU=P>04XB at t;MoQ&lU5)~q#51{as6$Uhh
zM8rRg=#3^4`#AmnOLLo=8vg7P8O at jmAA`5xIn=L;shI^}04M`BH2 at w4f1kx17k0Iu
zeZRep24bdIJXip{2Jft2|BvPH#A3Lo57sWX+wCr}sg#zSP)^8GkbD9RaL3)HDxrgT
zqtpke97G;Q6quG;0TL_EpRG*<6{%@~79zzL6sSD>Ujk!6;!FM>DkR at GW@XWe&_$Lr
zp!K;!XIS>bL(jo2XDo|C;k}JTQ`*};nljar3L4;!RLj&UAGNhlDYE*bNL>SO%0ObI
zZ1)dZ2rJs6mMn<Kh(#Zy(*PV!El0Y_JNPa;+_7PO$20gwJJhy*ecPcEC8oT56Oa_e
z<>ke}Q|N*S^X$bd)9VRZS{mVI&mO!&J)X_XGOxk~a9md*(=fQqJHHE at U69Y`S6^j5
zA at Vt;v$1lAtW*AV<yr)Vc at JghT%t`l%QRuywBD$=F*J}&DXgv at K+MQ8_-yl^+Y;hM
zBFf&cQ1u`6`(WOv{my)W`PgFl{giXRh+kYo<Bh<c5~0mt==^{Ys=kqK;k!<>PvlP#
z5tYTIF4buhCS*T5tBU0w<K{T0x38lEI)gi(GY)dkFUQztB)3Lkh3py0D40*kb8 at mT
z4Sk5Y0(ttFI5rIaN_rohZ?Uk0XlC&VcxGf?q~8d~ewEBf;~-Enqdf;O!#EBA&y9R6
z+z<CVv79FG8Tj5d3{Ey?+R+)ZODLm?o5#?+o*H&jkj!+86T`KP=u_d~{ov=|%jF2t
z%3(8jYUo4Uq0 at LRL%(8&2aO{X*@Hw+!1;$<%Av at XawyU#n(%AlmHuG-4vAfWz8x3j
z6SU!B8eTmR8yY&fcO?z=^wa2X^%K)d(^6r=b93WNrm-#0(H`yrUODiaMo?Vm>kE4t
z8<~p6+}wv6($k|&roC|{j^~UR2Vo{S<I!N$>#zd}N9mzY3|c^ef***1zTKOeRyys8
zp?&z-;A?ti at 8r<X*aN_qes}{KA$;Juma!&N++12FOHXfjC^r{Bz7h8L`qqKsM)*yR
zS3n+o%oMlRWFqf)KJVkpK=-I-lwE@^6D_Xfto_g2d^l&II6T6d%2x+0Y!;w1SKrsk
z*I38aJDZqa=uQUoxIggnY5Dt~ep*O8EduTE``<`2A;UMH4qg1Z9*3L1A}U2;snK*h
z2?NRU>ZXkgY&)@N9=(>{x at o>G?_uiPp=N7*1;PBl_x^nhGl~chpA3e<bm22F%vy8g
z|Do>B<C`khKXCla*^)GAa<Vl`*EDHUXu8maQo0Zdl%)kKAWPXwDN9qJltrKg*#z7W
z(aNF~xa^`Lpdu(%R4(APt{1L;1mU7p!CMio$Q5X&-<dflY0?(&{k>kl?;l at M(&n6#
zbDo)b<~`5z%(Kw+!N8<l%nA5#2jdM=c><DnJtocjqijBo@!<45J5CK*=MYTL=OYql
z**-X{Vm{L5CXEX`GLsoN=Yc#j7+PV{(lxEe=al%zW?ARhPZIZOk1-nJq%a{{S~{K8
zMc?ZYlh`ve-WZphDOaoEM>J*XJN+;4F_xpPEcXEyw%9ie7!%Mi%o<nAfC|`<KWH+j
zt9p1~-o!IMvZvHf%?}(3gSUC~MYnr0(LIhbPGVoj_+yt!RcA>3B5f4WYj*BD4)=o6
zpmcy$Rq!YnQbq4tSDe^=^2W7=17Gs#Gowj7sijjqX+WOAfC$p|TlxY=?|mM8Pg?XR
zMDsohYm%Tn359>c`IKUt)~>htW+Z(cj6HbpAbj3uxY)ZFOa_;C?0`0G!06YPbt07*
zKJPgp+AoHRN-|gl4TcW}4VpB868GNjuurpt$j+`kDD8<qcoN538P!Avit%Mgv9Y~=
z-&$Ilm{@{yo>aX(7;#K#>GSY)@b048((xd^6sJW2)0j(QvXiNU``I0Z{fnkdne*bx
zRc_Co<WILApNsw-#~D%f_}2M5>|)dpu~?o7qy-b=(?)SvC82?Shh$xGAqpl{?XH|i
zbb4PxmZ0a#CXGBOY5BQ;eniZ|f at 2&J-Y!SaQ)6pdP`VC!Ias#@nhwD8 at cedIvk0tX
zovr<mE_J~hS5?KF5a}hk4bk at vNPYm4FE_r0<Xi(7IlOV>dAR%`kh>M|K=v%iSp=hB
zxel*0`Q9XapVl9kaB|<jw|+qGDbmDUC;R&ya)|WoIECo<3c>myGJi_T%d1XF>yb8z
zkBrF8vc<ALA8t+a(apZHG$~mw*L>VRDl$4sY{RHF$o|fDBl$ryvv443oKdC_e*tZl
z5$t~(9%`hWZvz1cr@=SJ;ql}2Od6!qk=1lH4F`c^__y~ae2?~seiqyT!pniamtCzQ
z?QWR#t9Z30kb_q1mnx?CoiV?}#(W8CChVPw=E{h+0_NZ7{v4UrX_*=JSjN^KgQ>Hn
z$qeWNz5ha=hP5!&|BUZxkh}xHqibeOT>_8!9{|9BAI~;+h;{rQV>*Y35u<-*mcX&2
z_p?XP)GB`*AfA0VdVw|h_8dA=APbY(oqSfjEEe@;8l8Y)5-31QWzzWZhdR)rHE2MM
z;x7*sH&*X?6!tuGm1dqFU56gpktB_}NT1oW at kvlO8K6G+8Oc_Q5suriY!&DO5SU&7
zr{+ndGr{u<N?qN%yGlnSiq0hmPL+?Ccktk`Lmv7c`MDo7=8EC?F>n8~dD2k1ca2As
z-+a$N{cOWqD_RL;I at m@@>Lc_d`t1Fq5IuBVR}qNb?w)|>U at XDzc-r7_$G|-(oI~+>
z=`rO81{D<Km+_-Vh^<?2h!694*DBC+E=v~7(!AWp4|DVAe|RKWiN1z(6C`tFb+xPA
zne#K}b#6?cc(jbo3XpqqR^My7+Cj6&u_mo;ZR|kSO(`iOv7YwS>#%CdAU)6MU}%bC
z^*RbG=2<-vMLd0W9{~II?cWFX?t`Zr8bB`S4YC^=;3;@EFFGnZYH3t-{^M(b8iYQ&
zZtYt58~p9jbsRvGUQ0&-0Dpxyyx)PNnLRVnkEg8-+aK9P)+z8zRfm1F-jao&r&e$V
z4X1zS6tG%>^WnO*aq8m%I{ZExX<!|A5WXC=k>>H>owP!oJZ>q_1Lg@$lqx-Aa%E=b
z)XdDvvh;N3jZN?s*n|~rP)sy!vjywm#Y1(xxb|J(j*9uffc?L3=R||d;O$^6xtW-|
zRe!d<Q#x5UWy&jq`u5GABp)?mLSiCKpBJ}!T57x6>S615`}r*Ak<S43yT*C4u93ce
zh>Sg!b2GT_Nj})_L{mV}K%$={&sYO)i_wst=G(vaaXw8a at -^Cu%_4d<Rv!e at Pxsnc
zz2{+BtSu!u))s?A2U{$>R9;Y2j9`QA&FZS|)zpB}y2<=U#H^m2VnhFYvd}0 at 7e-=0
zvO?&kg-=?xhyqRjvJp($OCR?Bc$kLntuXp1$c3}E(yA at Ad>z>0xd%KRW(b^GRRtV$
zvd1IssW?QteR_M;7y4 at yiR%JQb=Xi<)%qUsdL;RM$R1__8A(yo40e0T16}M`cJMCA
zWHVm#{(LaV^`(PW8sr6oZL8piK;M_*4vtRG1~{0U48WvrL>@&TDsFe&7in?aB|QRT
zD*D$o+)BG2d}qXcIT&vfeRzxWh5R|@+I_ft|M>4i_^DmSf5W?2<n-GOWv>w5ZYNpc
z0zK;VSS-Mfu861(j@=f37QX-&X(A#NRC%+$2ngszoJ%k9-fVZ~X5?r&e;=L?_T+B8
z;a$e$9FuH%u&3+}q9==ZE(GjGbo4C$vz0$Cuoc`%vh-F4c?TlWm}&PB3%p8Sv;6xO
z!35ub2cuVjV<C>^E07&RZQ-aesu%W17iFQijy_YkpVI|ND$4AXOx4%j{B$HQd5wYm
zeT=E_PX9ranpS(ac614&7kO_YS!#2j7Zn);&>u-uje9#fh28M3V0s;+q?|T<64Idx
zyUNKU<;1+7VF4S0eQp<MAs023;FLWldduYlyKo^+N?!ZSrhff?`gq2v@(|U)jU99O
z^vIUWa=NfFBy{hVlsu at gdh@F;7pqqGTmO={Psa5_^U8f6TZ6wnV&J4Njw8M+MVKAd
zuIfrgh{ZkN0Wtp&RvsV0%^PT7I$VYg6C36S8YZrQeqviTu3e84`ry_*CYKcCi79?t
z1&Kl7Zlf{CqXys|<6s{~saLg~6x=Rd8%>fYBr~z2Z=+6Q94Jxm*M at s{aCV$5`b7ej
z&)IS8z;Jy(KlNgcqV5xGcXf1s{6g}Q^xJaz|3mWtM?kp0p|9xm-X1X=oD-d7VEwNJ
zS?KTg!fqWir;nmHbga?h>h4SR*LpB0t9s4G$Nscvi|Ctsh4 at 2e;9a8oGdbcb$sTM0
zL7w$scbB|fu2Fmcjdx6Ew)@dDs;;;>jA8MfY3m=*+3rD4XhS?5N%At23|10Q+x=wV
zL%V&bocS3%h98H~n01O6Om6E#UYZ)%_8nWsQAo$cc1^q$k9YU&N?>P19~QRL5kS}P
ze{S;i!KWtg+%^8xV9>p){y<5mBXlNA0ng>;dar?ZVL#fGn+vPJ7xc$n9VPbFuNXU`
zLxv+<aaIx=W7qnAGj@;n52V>%6n|yHUBCt}fl26Y(qEFyGnV at u^-Zd1<Kr^Z^}gAX
z-jzAp9^h)i4Zyp$w79WIcM$t&(d&eD-fi%JDsY$VEz-N6TAk~+y-nPG)qCT^K?C0=
zJGKOaWGtekfTF;Edp4dBU3dql`{z2i(=|b0H0ZP&Ahv*Y-j}%6altyv%oTZ3dvG5n
z(+!N8XNcFUBm?>PL_2LRXUv#=IVLT=-|X~^Y4ER8BcqB+x^<sQH{{SabKt7H=;-Y1
zMet-!4v3zekdTov75<tdKH~*O&eJ5H`~7czKhGR_OplIFgr{cY=6RA5y2a<P*6{RR
z;a2vME}xzQeq1#nBSWFk*Y>nn?9pN^&t$L-yvbcd`Wn(mDKg(hncRe%-+8whIJ-wi
zbT=5HB8{?Hm(Y`4-TY4u=Qd=-$7kquy0f|7`4ciS6(PDh^sHF>AWCfei}Yj;P!V|N
zGT6bI^tNxqhn`%(n9V7pl9C>QyHGdBW at HveL`AbVpGyieW at MI=#(bOO=@S*jvgE!`
z(v#U6_`doM`|4PZvipRKWdCi!#P-|L4bp9aHYW$#eYeH;1=|<}x-a$-@$bWRdO&CP
zb%GW4baL<5fG19~hG(Z+tz3>Xp<9wCH;1NQ^z at C0WLWugNye~@%&9;?&rex7#Adfz
zde-R`ij0hj;uxWRdmGUq+F=9sU$j!4(=?p#3N=)w1~Q{>`vtsOj0PjK3?3OZ3WQ9Y
znrJac&3K`tOy|0}x*!JqD`3vb?T)-*3EjGbw(i~kr4_Q??S9zii2gY;VsV62Hv~N!
z>GL<R9j+^c1aw^|^kZ*yiF2es>3is2*zYaNcLQ=u(4lvGg8qrOi$F@{@#E$H83MnI
zal{XZjE;`ZVRX8<*zR=dRN97aI|FP*k10p$Gt0^6#cPFFLh~2QZ90y-LCL9bw~C=y
zd8I;5F*;5moNGOW3tZi5%Fa#&YJi|9A7s&SLkD~SmOaYta35IN=itrp!S{%Chcc9$
zEl2m at bQFVba;in=zl%N}<N+MQ{e^fFw$OKzz<W?YmJFN->B8u^VUI2Y9}Hj%OUB<k
z*k|PdblpPcSFnz(Ym`1CQ;cFlzfE{1E_9C_>z-dSe0T}-YhM0Xcb~C&`6a`DEGY^8
z9=51pyf7F=6~F-2kuS~1UuS+TDfw}DNq*kgKJKykzHvPbzT%Uyy-VLw(+hMZ7OiSK
zihD<fhe!7A86Ls*>6X|%rMi#XojIhYX7M}*fX%V7vpun~7E8}s!nMm*WG1q(Atxu`
zIXG|k{p at ODdVO43Y1-nNnjx8Pcc1E%#O?|CY(#j^oL;?his#X%b3g@~n7Lw^AHn*2
zX7`7c_!;lB*O@;2bc(0OyA>=)Q!<w3Wx}~8JWA)9(y~)2ToS72keXC|l93e3GV~Ht
zC`%=wLPw1!R}>x6bbVR69y308W&ghxeEjhOemZ;<u&_1g`NeJp;x`~;IN*PNZqt8%
zzIs$w$C>nSkj{Wt$n*ZiUI&X|D|+Okc>K<>nP4Wb$9c at q_-W78qtBOMEQyCd&y_QY
z+-)6?Gc(|8+ZZsDx`MAYk!!u;r5IbjMi+d;EEaQ;bpv{w{lyNxfpBWx4nR-M11fqJ
zye0C?*YqsuT1t<u`Wl~S7NfK1nF|2~>sY%WqmdjBHB|61k9Z8-qZIU}dogD0$B4Lr
zWN at -)+B2!P`aOH<_t5k4`<{C7d1tt8Og2A=3Z>?_LuHimJytCnF9+i(wScSe;m&P2
zMe2Q#{!^3wQ=^yIf0R at Qtc&9sG#ENO)Os=^YEmgojjtqE=tY56Qj*S;h0d&~m>F6Y
zvTftWZTz6&0|yS@@buG!M(_leMK9!Ss69z<@|22EsL;3*w!?!Sik=ff9-$(SP*E!B
z5g<*{6_FZ1Q>g<A($fnD at U{V|=>-MpsRPK^TxYK^IvJ1dZK5W))tdJd#`hSrYCNSI
z&zsx3;9Lvtf>5!l8Rq4#N}EymEbfr5P68h#X!Vx`m=PG=_WAR-<Nvk33_9Gc`8#%y
zgHm!F)Ca|I5&b@*SWm^fwMument<=ADN0L&5LRmt&Rsl}EtWey*P_kN)@G;L(q+C-
zdYLbQ5BOvf7}Kv;c<(6S=oeG7G?%VRN$wRIx?G_c_dpNg1A3H;WQOorR5*3k9Zl(E
zY9$MFGK~>2hVDI!EJ6d+l*~9j3^7Rr=@+e7qY;;dJJ*ty9Z<@!uYyvAsFW&|DpaLb
zX;gwrtJ10T8iU5D3DcMq;T9?)BtjXXiU^HRM`$912yKKeLLY62Hb#d<n=IimB-a4$
zbPeuwf%Izx>DLJK>da{d at e0BQ5%@~6=bd8mQnKqyoD<sl4zy-lZTjx1Tp2xme7rj@
z+Y~Fh;^I$SX_i?tym;NS5w<LoP*Q~cAUtymVbLoHi|~Bz?N;$Li<TdTlL1DK2I5?k
zPQs+LU`&z|%H`<g13QEQ=?Lu(9k?}*=8wQDBH%5?=!3_CrWY`!tbl#^^l_b{Yd9LX
zq-dEGn-nec7Blr#F$g9>L4si36=fSc!m7n$tqmXw1*R<W3n8Hx!$kZ8GBd!6pJ#%V
z^S5tU2J&aW4P1*Jc<WF?!rf<R at Z5UV35>b9Z@!+JdlhbZ=z+O&e*MRsVZ*li*187p
zIFjoXek&}_BWbCDyXVjU7yVTZ7TJkkK9VCxB0a1Jkt2PkHObu5Y02^{!xEJP=n17I
ziQV(3ju}@{IG`>oH_ttQPI46&4U38#J9&yLv8d>ge(pYW<KqPdR%@CwHQZ_*l070N
zSruwp)jP(PoE#r!GFz+(&in^cdxWZdwAa(E>{a56C3TBv&34MjuPmqN2mY6h6G6y?
z<6oD;_s4G9Tng_ at X#Da)kU5g2Udhe9*hb~%9yyYm``z8#+~D>9|IKyzJVl|g&7e3*
ztIcE*>tQ~Zakq)xQ6F#~JBNvRHSP3fm=8XvuV)t5gM_<HBCUUN9bJNcy1EWugq}!m
zu1AjqCz!=|n?OQ+ at O2zs@$mhaMDGE7H+Bb^Lr898mJqoOS3B_ucyYczeDWfk)IsDc
z at rizIZLNpc7Py435M)%pRubyp*5-YTz1}v0pN at __)JloRT9NF~)(0P>XZw#G;v(Dn
z^I7Ov-MzcyAZSHvdK+5PN#0VM(bjsN9_>BA-LA*iQ`|cg#VZ9Ful3&pt(|RX?L_xj
z<U8g?YZXLm6*{)qf8B>%R$C8zjPm%N<t<>Z!+-Lhll>Ea<USD#B_R?2>HYVyL}g5m
z0rj&YtUV*T4Ibf|qUS%a4v*>4Yiz>sxjmyIoVk|J*wtDd?-jLv$6jf}?w&Gw$-P_B
zvk_Lcy+Yc)w2S_jBOXKa97FUJ^RvaAt?63tv3ev6Jq%aj>%T$QcjspdPI?n{iDaeP
z)J8-bif-+TzIR8$LJH`S&Z4&in0I2{tsPeuz$-pL1B?Cr<wf_weRDCe-~4^4p%+n<
zvgRbF=>&5dws7$TQ-~sgGdRJP;=*mR-n|#Hx4X|R37au^2o5Utu4TW0&+t1*{#arF
z3B%s6{_RDm>Yrdy>|&WAB_Tax<9o*PJG1OAVdvv49aTJ%wa51=bmF1#R-yYm)P5f+
z)K7+PlZEf&y_po-Gd{LQNJ$aR?owD1_?;GKVXt^QJF+;6W*^@vxa>HUP1`c|I<=bg
z3&kLu?|=Gf0`8=(Z+KhavbJf2Z$s{geDk>Xm$s4Q*h8)0k2W$U<Gll6eOnyqSpul`
zOi0z&?}01!z*r){0q-ny%^vX at P7?LJv#@w~0SS2&fOEM`)G*lsf)6B at E}RQ4)x)E*
z1uzy2A!83er<<r!wl8UOrq2NHG)Yc;@#y^0<m6r|^$K}NX-V2lW at rZ~0 at Lw`w>R9>
zHW~ZV`1B-6O at f=|4=*VhPP8O%@8Km#ud2g3mdJN{uNU5I>nXL7<gP%xhuQ}>qDIt9
z*R-H(#5PK at EWC-DcY%npz-vT(@EbbcLEiPgP2^qFTkZ0$R}VLmd!cdR&>Z*bv6y~=
zJg0RZ%x;UKR$xSO8atK;_%5(K_lm3SrroRLyWgVkjuOA?TdIA at QQ|XOzderaXb;LJ
z=dT|0@`o#Y-oUnZb`#8ii{ZkyauGA`^cCj=T-=t4k0H!}(y?E?ecSYHc-}5SJW at v5
zlLa&2jJ66gM+kUguPJYqG)G{Ce~zH%*x^F>zF5K7k5@>p6pzuhek?fZ{Q(X^_w- at G
z(R%NX1Pd at mB0f!Qn at +|{%E#%gtfxoU!!LgTOW?X6&@~^xer@?}<-`VsdXbT=IT=|#
zvrbkz$$bH-)G;rs$`rj7${{LHrpOLa4p9P7rh0i)Dh)Rd1JSDmX01#izQZd+XbHc(
zKezQE{e|%Bk5=he3p!RIV*DRa>cf6*+2lHeGk2`gu>t5<g@`lk`jccWfJJTn@!Z2}
z!5xyjwe>vw61NleRSo*?Tyl(pNPdE|(Xj$QZjobc69pM}PwGGVZa8?oEsuGCa*{o1
zpCg168YX%Z_&P$24f9pr3%;!NK!`Hzi5b(gicA`&j84m(S~03}Pw=t4 at ng#>U+Z)k
z-Hl}x*~X~+g!t!j^3uB%1bi&)-mNg`BpLHp!RKus(!I%;BVot;Djfzs7yWkb>Cw5j
z+Rxq7v%CH09&Ov%cAQ;9=93ec?wu=Uekh*Qhuuw*%Yr*!x1DKwfmi#^-;E!}%`eFw
zz|&&BXYX>a8*W5>uc7y}8e6xM@%Y^PTU&hFEOhMkd-uHKPU3Z@#oGt*{tRiIL41e*
zdl!N*SWd^oOYmp$FYh<O{Kui*)=OqkgUn|SmD$M_=%4am%P at E)ko`b3Vn5)uv0LG{
z{DTB*oLM+qlu724IlY?}%v`u|<^uB0E%N<^-qCkfvM1mRd=rtr$*yLW<Wea)O3O0E
zN;6Jxqb=gubwwp|nK=vpRXkiSH*xPrq(+oHK#ye|F at j2^OKktBR;hKE2icE_Y~mDU
z6H!KK6G%RvXfBIVi1LWHUXpX>a_5+*`QNckOUoir)Gmhd5Wb_SM=y7Ce6;<jx8msb
zj~v}Df5`u)?p?NMkvTlvyl7F`C?wnMU>AVx;@XCdCp-E!&Ot~14b}J at 91XTpgYdaH
zBnyD;=;R=%2LDDn?3=KJKGe3BV3mwVSY<Ty0ra6kuRoWb4rd4n=T~i*7#b?tOoqT~
z;Cp6?C?A at 9VxcahC(-F+hfEra(>L}RI(O*Mxn~BvvnKB4-%FXl&mB4}tJhF$GeB}6
zGlI}K{7sr-0mBB`4BC}4mMCQ`dIcG(RP8pZPFEn6jeg<`d}Se7(A(OmkGL#mgzOI?
zp7IbR{R|QCj4ziG&T&qEBOY%HA+m8JT>w5}iZKuAi9JAEY#N7VXAK*cl|7U`(~GpD
zSj at -DZy@<eFM$c-UEo>~d+<5gWpeJHV07nmteTwruJgIJ at A*8E2l{G^|BQ4$H~G#l
z;K$DQ<HwNi+)NGpj<)SL`VekA1IRZ%ZyOYxM at q_@>96CAJ=7_&t|_kj6dD+7OKM5n
z{nh(uqgZd#Lvl64*S{2bVi@|)T$0<L$65tQSJ2$tyO-#^{U8MnfrGg7cb{XI+*{|*
zpG%%6=HZlTiwM4&-z1+Z`J6}v)@4&tF_eocb4O5fRQw!srK&8+<<xXzZ1Eb0f>DPn
z)VjDN;a1DJ7U5z`8vc)%s`*xnaNVs)j9qD4kr1~sK1H-z=t%aWc$}G}IjyxhE%oT+
z<m%)d$qbkn7f=n&M5?G|X84Q1(K0mv0l~7&AgL7E?cgGCbI>2Kx~>k~sH+>+vHDpR
zDVz4 at o9%Vr;Fap~sf+?wg~bI+DPKR}nv;Sr|1Zg9PCh5&aq^8Lmh0kt&d8#ZGh2 at P
z9A~Ab4f|>1v)(Hn-1%t8s_s7L!G40%5kGxI?v>h}Q=5G5LHZnzksaL|@5v(FJ5JiW
z2U4Q%z%F3-*WDXd$DC;GU&kJ)^Jbw&|D&$%#MAH%Q2aDI at o7*D-+)tnP4ne5<!%VR
z{H6Z!X2$yYQEaCe_afD_!u+TZ_q-Ki{U+w5_bWzKcQ2FP;+ at HUT<0CkBzvDi52jn_
zYw(RPa4ui5<`cSCR(noV@;O)JE%a=BZzt*pBoR<y2D0W$ncA>NmNOY-kVQW$Q`~OC
zfk?g at Urt6VRrTTyqrtCORxu2xIUhD{X$5A68A}RkuxngR!IBwp_QA4c%cj2k at yk<}
zEh}SF&cM^d3vHH=DIU+15R0vF_-S}%_ at HR5P*GJ?A!wrqwQdV5edwo~vqwj?PGw$<
z7(M&uPY;z!d4;+Cqzz);3nXpwZ=yEfJymTFns{`YaOQPR>kmM;fSx2{3e$r)>q~og
zs1=+Gy#LYk@$}jS at D`~<dcArLJ%0K}?}Ld2FJjtX>^q5h8pHy7)iL-9{C-iT1{Wv=
z3Qgt1APl4*tAgLcOE)I>Gc%7=RkbcP_nS-w)P(9r4Rt5zcq2`z=GZDt)FM4=)@djO
z2Q&<)&}qUn28Eh&YSf1CxbDKOQ!VFC;cRfH(CfNrtn5Lh<X%s^jgF;dXQ#%A)n<C?
zGD&GbtwCop5~mVzmio)38)&u+lq~cfdgC~}e(4gte(ZJck%eH`7q{lmnF^?l8{yRI
z1;6ip4F3ISA;`K4OkgB at 6<)gr|5kVuBt13;l>K8f;Af04n>=9#ytC;%+%C?^ax^DD
zmrX$H#&@J<MmJ_Fu9+d_+Qr9z5s$OqO0_qB<WdPX-yyX$KAT2K^X>nbGvv5eJT755
zuBADI9B&hk7fZ)6mgD0RmVYK<xfq*4Fg}!A|M?gZkI8e{{s`gI$cirGePJV}G!nEc
z?$<InHa5$MPbxvYQ;O-uZng^&q9^Ci`D at +Mr3?RaV03Y$-07Gxtt at tCp(8$P*~c6D
z>U#G{dvyMo!Gnjbn?Dlp)uXc<fZp10_xBx}LBE`pan+R>IZ=~fGyL>Lt)*zm!rERB
z0Q88T0jQgH^<qt3h~jrl=StMxY(AO_!@JCJqJA5c+y at Cvj8+Iv?jx|aSf>_bmpr at m
z at c4-bC#NkRJ1Ax7ge%9cEE at 67;>m>rmL8os4Oao$nYS|M at bh1kPOKV~w|&6y)r<_*
z+)d>^2fKPjJ-eXdsZk>ntg~mqNtaD<f at m8X0!OkqHwBVU<8)%TWsx#hIvhULUV at lD
zo8LQSfG0WQ3HbdXFbXi=hlg4cQs*v+NSKk33op(ZO*1nVG&8SMweA2tzMR^xN}E%d
zGb(e+$s)=Z$LvAvwi6G`Ambx8XpnT^SP!AZ3Yb|vfv*52nA1PHV^wq3HnjX2u!yBF
zpX>v&e3dX&*3>SFn!`_h1u?hwYaQEO5Yxw(Y?_Xz<s$aN2U+aPg7>VAEW^v_uyhAb
z8fDMKj*SRev>E!Iaire-T{!pcc>ruZ1F{pts!HEG`yssg<of-OfjaMjO5RX+68`ei
zHTXv}xHzx0c-D(+z?SDh)EQv;VaL-zDdt{ahajFcQsdn!wNu%fb{Wu6q=un29oLBM
zLAec_Qf*)n%&n1!uA)FK(;$D6O1a+JBDDBR#+sI!4w=w8E>(;TLoy=5b at Y-d#s=1l
zwfmgQ?)oxFAIGj^%n30|^t~gj0Xv6z4~c%W*Vsxvk;uJ~R1bHEg0dPz<ks-+QJBJW
zSl)1J<h3Cota^i)-Jq*6mqif)q(z&Z(vs at 07|Y at Mv6#U at 8ZO;}aZI3?jk5kl_0Jaf
zlhGr+ugdxtKl5yHfA}pP)*r9_ge#mfZqRqvn{V!d?^VI~cO5;ti>-%6a1(qE=YR!O
zzysbCc^G3whx{sJj+6W<LwYT3dTJtwrJt{Az4wIOJOs_n63XY#{uA+MpHJ at NtEC)6
zbyZ8bLu6LxBFf;W;0nqeYA4^bw--(p=UyQi|7#>peU4j8xh$NMae>}~OQ&+GQzJws
zXl~7IM!jt2E&4ExilxKWD8e<hTB?Dr4PB)`%W8AWb%@pr0g9^!S~89ZkpOdpa#R-^
zP)C+Wf{CC#qe#3H at q{nM2ljEHzb6TYGM+8Xp5#1+lX)y5?qIEbXP)p>I~*{Pn~oC@
zJ&p4ZNf?6qZ60a|&dDH34u0q`NuhHxJ4yR+r1p`L$$4^l_v}G)YfAD#q;b&Xx+{+#
z$K$jhbwT05Srrosr-bJ8m_2IxkUZCnH52x`5N`&|OYFI4jFJ3`116?a1}@8ynGq+3
zEU{VxGYtMdd0$bF at 7pKnyYuV5aPEM=fx&Q9C9}`_DdVonpS`)hdXR6HE?WNfj-AmF
zqrbjA4NcS9c-VN&mvbK1QX*OE#Ww#za#{>=$7y7^_Omur!GKyNrOH$5T!Pve;^JNM
z-mFU?m7fi`@-rIG<`${)b1o_ToQ5QE!I)xn8_^7Ik1~+Tri&$=*@Fjh`VVN^A;udJ
zA5Zk|TTg}}3{i`SW$>*in0fJRC)S%7DIqw>#<{!)jak0tfx*YdOzAgvC7{Hl-?&`v
zN8eriVP<Xhw0pyuqxWj(*^_<wy(toxhWcO3_Zt_Cha_1wmazOzqjW<MAmS9&XQx#e
z*ROtVOVQ9l%q2e>LY$L21-sI&`02-MHS?tWoW03h#w(K87AJA<4b#WijJ7bXL0TZ_
znf05C`n|YyV9}Q6z!uO8KC?|)59SsA-2B<{Szz|U|7-r4xl*+i-h>kTFC`e?_8S|G
zo`H9J{8%BC6E)J$4ar)D0RvvHWSW>0-sw-qlJ&e~2mSmGpsbR3{(p`U#nDIfmANnF
z7IYOO8rQF!bq=4u>WBNqhyr!a^b}FXDTSjsH=Bg!05<E}#WWxi-xFsvQPd at 4-cFG$
zU?Yc at 2~4+RXL1S$^-Z!A<i0ewykA^a#^t2qA5YILuq5>z+Bf&~m9(rl=a}N24gg1k
zeQbnnfO}T%vp=kwKRhR8dN26v+trnNu;<D{AF|BfmS24~cb2;-+{({3Rm^(#+gUX=
zMG*do`o{vZ*;f$1WMZzwfXQ at 5RA0_GeOM=tIwhc4XnX?9UmF?SUGT$f?!aQZ=lXJR
zVKrR4CMv4KnVDB{z7YB?@X=J0A9#B#hR=cHRaM@;uy4>|Fa-`5#}dsU?lc<99;8=e
zeZAT){-ANxrfW&Sua8Rqcrz=HPaM;C=s>3_E<R)0;v{!g|CPs=_s??onmsKoA<pC+
zIJEDW at u(|zIl_wyr|0hacGlduoEhU+oo}pK!!V~>bD1?&jm`5bCgnJ4D*w4FcY0w_
zxP#DD+IEMJMRfHhd7@&w8f`q(nTWPPX3GrbM<##SHcVl_i1%OFKY8e}p~>iX7Gglm
zn`H3EOl<hz0~w+-c*HTGAa}-GFcWT>J0llhf`PWz^pqUTxFQEQWTM<|ByzjWC%03c
zw&HfVog61}JLMTf1=Z|{XJn%MUrhyEKix0qf2I+SlRhEGwW3}C#!x<4r5}=2l$4d!
zv*bCQ*gI$~B1u2Ry6Q1n1BV4|n#3*N+6QmS`j1(+FDstoyZ=iWGI!UPMDn-_p7Rzo
zJ^M0q3CSl+ZUuwnkI${KGmB2$eDCes-_6<vj?(ABn{e%xugm7{0gg9!;rUtEc8!~b
zXb|&e811yk%oq(M`A3gFY6T7vq_-2{2oD at LYbn2O{nh5DcNx)gt127)C=!HZS06tK
z%HCQspZ`jcQe1SPbT;E24PW`<!i7ITTa|Z96B36&pCL0qcd%N){^N6a63kujCj9cl
zVlkdRkJz*>kbMt3T8?F`Me>C}EMm`$K@{jP9US{aX-v0Dco|pdeWt1vL~dP{Iuk_Q
zvWBwp3#YA6Mzwwmdm{b!E%3^(2dkc|gP+kORLXDWOLn-oh>ea|-~<_C0V^cEjy#{#
zeCfvSz;)jk3mK=OXs$U(%@v$6h{y|=XVFsSAUT8L5HqtRUl8ZZ7sMD3=M)#^9zG6#
zU$lPxLqK&Ls1`lBei8irI66_BQ)HNcbN@`z-(3QpHm=0Ef>s*A-(iw*CC(JI(m0KI
zMn4H>3Ys9|s0;DXFp`5m7kjoD?ZNmRJk{*o!2Rc%i;q3*i0tp1Jj>f>nmy_;`%>%Y
zNv`18=8R{ZRS`Muv!;E%{kpi1InJF4TkbR6MBB#%gsU&I1F@{i#fm#MSt88SIL5XQ
z&^bE;ZJ10H%XD}mXaH^U1FpfBW5Kt%$Xu3dat97_CWINC6MOaU_Desx%CNC?s#=~A
zgtkQvM_7zu&_qk&Fa5N}ge9djHU2A{*`>qxNgI?!Ib-F?DYXy3Yt$uXtjdHRuhkaL
zpF0ZhPmOd2fN|{+YlyvI$as*sHa2s{%u at Kr^Wyoh<{v0~P~6 at u#bY-gj+Shr4lEzE
zTP``Rv>?(#fbkNw&Tp{<BaWAiU*5rJ`S7?-*2?K{4tOTSo`!9fNXH1WS*FE`ah_5h
zvM?f}h<d6?BtW3B9UG?~6IIe*kMEhk9$3Ja!1Cn$LZ9wA5zYqBn(Gj+f;6n1KEIUI
zw0MxKLv6F;8d;<%nNpogB3scoA+TTga>g_NgmBxVGw04Gl}UhMdrjQskAA&fw*YJf
zV_jJO`a&U(OmiVliX_!Y+<oEx6Gw2}5qRp&S7`8^D2P$*^4%{4JL5Zx*A6N8I80o8
z>^$vRSyo&$G+6arfA~~G@(4v$`lj*B6|i7ZE0XB~lwSy<YPW#!w22=K20puI7P0G*
zeZRJWu!Nb1+8>AgR*89_J;K>2hJOV!tG902-t>nG%lV?gC9ZtX2fn{_`rfn!1Izg#
zgGv(nTG&V5DX%bvT^c=Nfcp^q*5l>T=P=W^qem3ZKy5~%9NSy8vvvb|KvWb4q%-Mk
zZ+PNa at 0O!)ya5L6q+efh^eB at KUtnJJwEi8u-HNx2sQ1u!ALaFU2T*~&X+vLQAB8{F
zeAjvzSZcmwmbN}ZpJIl4E77$LXk5P##}!?RR7>)P6S&#6Jss&W`Y?T%jPNSz?5v*b
zRqx%E^y27}){`rly3Mbjo;NqHW;-y{f<gazOQW=9FMn>;L;apz`7- at aZw#~gVD-H+
z_V=e~di=N(U~FGEymcCGy0abrYx9w;w5kJ_Ma-Lkc(xevEJc~I-<?PSAtWvn5x~$g
zdry5&=8*_^XC){zq=wQ^v64=E8&=aLf1HfaAD%QKl!K$082C82J!*P5 at MbW!UF=eL
z48kb*{<=9}>_Y^f+I}baM56h+035%B_rJmx!*>NSA_$2vH8t(O!W8|tE}(@#j|fev
zDgOnUC{foML3AxUu`y!9B5|BU4dQX4%wSy$FB43#K1LTmvZ6F?vNCP*#s^auE}9gi
zfn|(a->#g&?{aC^^I67j#YxPhAurROAbkwBPVQa7>}uE8sP at _w7UG|Tgq>iuOdviW
zY$Pr^fdrfYjchY6I05<`I0DiG)iIcHb?GvS7Hf5J-y^(@3f>{?qR7 at K{Zf+q^-WFb
zmlRxWi>pcQ-#<B}pa9kem)#23>*CNX#J-6(K^LQAq)lKD+Y!&zfa}#7a~HJS<&0C8
zLBq1CM)0rBJ5h8Cd>y`qfc?ykwJ*K2_D1WnimuRnswn at 9eK!E_zQy^RASB0D{E|!>
zzF<>w7J-qD_WUcO-Zn^YEiFyXdwW%krP{;;=J7S}TCDS?O`cGtDIT=yLaxAqZ=ge2
z$lTsgWH9y><Y1~fa at B#f-rg5h>u3Nh<`j72 at q)ep{E<Jb5{~RZPmJD{Y4hcKBpVne
zlEvO6QR$Oaoate-1;i?$1AM~@xffOqD%Mm at m^^Ks)$;C|#~Hwzsx2|A-p)%dEw$<g
z+3GV2!K;<S^8Wy!Z^7e0NHJRgpmnQX at b*qSuqx6#7089YMnlnt+lcR_{V5z9gGWdz
zLJ$1$NN9;N8dy87&kXJYIW8sy|A31caX}%F{ZGKdJD1^^pTLp7Y~AvgdlyK}+Y8^H
z{Gj=wSRXG3Vbd`ZpC1)q!@zb*relFME!gd^s}@vEO)_A7`_I4K8!j6aR5{Iih$6M6
zx!s7*a0^I*uP#<s9iAiHZmFPG$945KuJ#3<z!ki at SWu6_SGRA&V<+x2Vw9DvIf{T}
z!w7HDUp0*%f!ApjtpZ!lAhEj<QtKhrh`Yu69^JR<9_8_{A9~NziTCnIZkIA7GfyV<
z at +buzd^5Win8EX4ASm5=(0gw?{QEli_hYQndx?&n-nwt5hrSIp;Gugp9F9AE5cTs~
zgb`+vnGRR9$F6DV9f2ztw7@*@BeWiyHf_w5f^mMd!h<k)^zt<&Lq4mTJGY9y5Cl+Q
zXAm|8^t~8qAxdq&<xiT}_E^XKW2s;7!#(}cWogA544#=icgo#ouEUSO6Wg|fkzf!y
zHu8wL(me=wzX89WJEh_)!biU6D2e_RfK`7!;`En(XNNEUZ0!B65YYRlOwa`_0r3{#
zPkVqF;G at Nx{AZm(pUEyB+AC|=Q26AZ^h!{zUzb?Bml+mN)0gOHoY{9A$zX@!0PbVN
zzb@)Qx5=Q<YcxW<CXUiZ>J^SKnKr~BsFH+pr?6T26b`w-m8^PDZj+;;+Z@}fxDaNJ
zHN+r<g;s0J<;v=il<R4?VD70j0bSYDdi{E8aM??L8Eq}u$TW6XP&nqu;x|4x;eDqO
z*4J@;>b%!`f$ZE*uAlzDfzJ+}$BZ4jXcGABSoNuDxWB53{p}hkBgNt#OS^p%4*t)@
z*w}wfowDg0UwhfxQVnLYy<)Cd-#CS%_NtYvhK|=c^&z2ZOB^=9XP;}i)p828&#F-?
z<g83ktx!e?bCA5WoUV|~p(?}5BJhSsYm0FDI%*@?k)hm*l#mo<iYg_Poe0u6iQ5=7
z;jCyK)2I7N*fYa!f?UF2S5@?9-W0_zzk=aqq at W=D8cqVwa5q*G-Z}~YRSPe{w?W<)
zUxA&V482~)b$-!0 at dNQI=-H+J#ANjO6LE}jU1dGbU`M!RheC at +9nuty8h<DZznSox
z8Nb=^n;qA=0*y!!z#9h?`t4{t*-Mv^(QDixZPBQ);9YX6{RBF$LpRjpFNfo|Nc<K>
zZu2g_2HnPizeBFYJ_)1XX!<KcXA+q!8ExOo`y-x<MJwJ2cbHR6*|i!C>)^GKj%d5p
zA=hZkF5z5LOY^zhX0r7~s&ARPSI4Yo1dU;iO12`(S{+`lDs!;aObXdNOKZV(bp(i5
zPUr at RF<oFJ?jiuE^G6KF=%jQ8i9p`p`=j?<qxa(xS!bMx$4Z6_o*L80{-<#<7<1j*
zZ_oO at d!E_ at 4#5%+djnqbZiQc;j*Z<HG5Qoe`(==ZOSwY``G&oFUJ%z!`J-grOrR#Y
zBUrT}P8H*b(peo5u?|g?HjXkI972RP%+`%;_N1N5Mejm$8vY?oG|M$BBJI)PjH%jY
zDc6QljIlZ{@?oU`y9iu2rQODx2*UNW)Hq)Q{Eh9ZQax%Z_p#Up`d!k{j#cV$Gd-Am
zcnY<VUKL!T9=8r-gy_G5#%s9S%xI_>O{~TtXjP67i-R(;+Hgl~q+JAwQ_bf{Nml|A
zdczzUZDXUWW6NbqjhTt4R)?qLwwTgRi5St63Pdc(>e(J7-w`g at 8wdv0+_`hJ(fj`K
z*B^f49UnZLCv*QTnnshqp{fd09G`P$mLC}W{zMW6kb1(*$PV?aUED%)`~h;@jIiO5
zY`+lC5N|hG6m<hE#QtLNJ<|Sgs?cpjEjKvyT9egbVHuSI^+SjaLkAkoi|4Sb72fP|
zYfXBAQB at m5%e5=4ifT4oo|4;yc=Q%-eyS~&Hrg|2dlw^SWFMI3*yNbzJsU7ejqrV%
z27Npn at ObVC><y3SZktE6yCJ!QYZHCl9F!!xRS+Hwr$)KMRGJWr0AyjToK@=;W`|m?
zwb&vg?rTBlCGwqCrIuG~R-4o-!mAbKl)2iJf?ZOsqv<3xr2 at A?6QWUSR2l?uaejGF
z1aib<NEjqcXh+gu;v0MSya~_4MeN}^???!i-hfx(SKeWbjh==BFTFrtfv<lFS at _-4
zm%c=dM%~XpkG)Ow^dz at AM74simX}j#qJvPSMj>Myp<2$S7Q4JfKxj>9g{M-xcII1C
z=UpD?%!lnc?_obPN`W+xzHX$AYt;^gR-<%8%7DgZvPQ(>*xrjR+1btKTADB7FkiP?
zqpYS at sLBOdM72KLl+u*el9qO>r6mpVus~xG%BGEz#!!pK)=9=#o1SI`nRHsII)<L&
zEy2L at lgB!zwMT`+Q~vw_fh$Fz@(lbyDc7(!geoKo!Ut)Pu0rDtUIs6L<Fh*X6OzDA
zO8x_)Kapy68#y`8ger9))Ce4UMw at 7Ibh9Av%tfq-{-4riXKPKk0g*%XI+igjI6A at 3
zb+3+-QRN0f6&b^stE1GWlw8c1x5zuXKDB7%Shroqb8<z9M$oE5wSr0~gy at w@l~Na?
zN3RM_U%_%{g=BvbfLEr-&6NrAUj*(K at OiG_`x!^QWz~o4VwK&HiXy&%J29NmMKIb(
zMu=iG(TqBV3AHh*SVn1QLL7`Dj*-VRGAF|)FkE+GaPRxSh at 35MDfxEkWfE{WgHpjE
zlwroBX+%%k32y9%v2 at Zt@A18`?_V$${ss2k>pi}YPJ*%f!Hu2tv_|fHm3JMzq^b&<
zTd#UN^rO3BgvSG#cY7CmJd7D!ts>_|U9uXj$;**Ekw6W08=@lQ;jGP>K-qZC%qw+H
zO4|*m6A%R_aU2Zt at M)1+<FrV%a{)EYF^#TNmv!^Y6iveQ>{LAx&aosb!yej1lJzIx
zA&x_mvLv&w{Pi;sdiy}bv5(<TH*VaFKPEfz=wpZ9xG*{Gn^&JcaNxPnx!k7GclWP*
zGsgPW%U at i6w=(<j!+Z9;?%D9f<4>%3*f-ZCY at 6pc8xW*hd52u5c7%m!1(tG{<yyKO
zFVe)Nsu}x%ScirvXmg0tY|$uX3{xG-m0OHj22|^*6p@$E8}@Vau~UetB193Qs4$z%
zh;4pBKjYf>zd>f;J~%L9r6~aa&^V!$i>yqo)98P{R7I2~<^`|%B at Y#V=@`2amTM7q
zgIa{$vHnt?hb)qS(u>GBy{KN2FeCMWh4jIuPV*_;<RF0AaXOj&(}}TGi*t!FSL2D~
zYy1Bnr;+~toNlkdjJ=vLwm|0|@E+d*Q}&TXzH2__M7~8b7(am23m)Lsp;aQ<0koC~
zM|hZn(S#UcMCl7P8c9`nC0B;XG-xqjVGXM`mCMQ^qN}6Y#V*9+sd1g;Ed+c4&JFB|
zb{VT*$q2g|V<955gIu)}RDyUSS>XZh!jCt|ce<mmZ2&*(seHE{v9k;zJH<K}z1o2|
z+GY@!4gWf=30XmFtM%oqOvPxbd9^rvs8y*T$SXr!SNO+#tSI#_QQdFc6Ug$?*|%4u
z59=G~b3FMR<gbgd9LpTi{8I_0P)@@rO_orkb(}kO at sx0}MJgycRHqD;vy6NWRTg13
zXqnJzqq-dNC7ETnTFy0LUm(J77Nwxm=~aSOtJ7DY30k34=_+(ui`jx%Oa4nXM<$;f
z%|FgRT77_zy+p)R18}<A#v$`2^cs~q5XRvWZb%84a}xZ#-`ir?6p06`qG%aA3QfpQ
z89ZF&$?stM-a^#>DX2YhR5EH|ncJAC4$;#NZ9JoOq^lzhlp`#~(F?6lxn%Wj6 at Q}^
zhK8U?<jk5Qm~_T!LrQDzMI;;xw@{1Th)<bgXVKD>7XB9cleIIBYVq{AR3PTZi9#!|
znob0gSF=4fna<3}r*jaj;Ccl;wL*L%9m{KRyfd9b7dD!wG at Yuhey?$XxzYP}qq+9^
zGizp?{br205j<*s@!QW{{?7c|59jup(GZU;*!tPR+B44#squJf`mDIPYVMhr`iy+H
zb;~}WqS}t`g4Zv6-G$FGmKl$relQ`KF-+}H${Zn-Q7<@@S{)A%D>62-B*9<-Lv#^x
zBbi#kaMfzQTt`=jtT2L<CM02qGGjN;Sy;q^26yuA;Q*-o$>XTvD4&>!<cU!X$Vc>G
zzB^6$te;!2a~Nbu&9ac0p>Y_rp*WucneVw6-?2ofSYf8EdNe7*g>nSg)jXQ-O(MGm
zO^z6cZ<-Ss$eziaZhRN at DSQe38{TcC3ywEj0`b1dLTgUH0+u64TKULodadMJgY_nH
z4oq-c5p4{@B3|K;n;b^1)j=V_3{mJ4vXOd$=)5I%m|jMQhv_+WHER~iDZ>hds#=NY
zY>^}xBDtD0X39cYvE&-$Y!%d(>}|RSS!w?BKIu&HQ=Qm{RRKLJjV+-!nyPR|hR8S;
z(H!lF)Y1-CBsoGNIVON)OtB!!k_IM9q?$rhM;KP{tVniK*K`B_Sa+c?px=BYCfwtw
z_~Z2e+R;0A-p2reEP>v!?*f{qI-)07sex{jSz|TofGm_1LL5j{Kq`((t~G`Wc+E%C
z^hd2vQxIg;p{w;~(~6L4E9&uTJrTZJiQ?^74fI6!q>PeoiayadfdcEH5P|+h&=1f^
z8=cz-U#OF`f-0mFz+<o&q3IW(Sj17;95kPtl#4xzJwh0<Rx-xda6-44a=VR6tlO}9
zJEB=3s2oPQR&BHR#1%p|mfdC5VXIXJp;}u`g;uKw#c4qVOImchec-N-T*gKy#XWiv
zjB6p}!jp(lEQ?^GgKSEpk)EJaGm3#`jU_(Bsle0fR?8{$j_I(5s`Uoes1jCaBUEz~
zyk)ty!Z?Sj<nLot(xqrqgcJ?p0AfC}#X6knI$N3!ZxMuuX+^XS`Xg*7gp=Uc*WpJ6
z$I8I)Ut1L3RQhw(HDXBwx!etGB7_Za(pO)=4?!V_tp!Hl#@54?VxP8sui!bHUoC-p
zz-@?8YYg$~&~Omqh)`-}tb at b$3K1JFX1AQnCYB2O9E(O<89B#P#zd at 8DP>4UQvuN$
z(}emTNd>oBZe?e;q{anJH(gdwo7kEdXFOvA0XzD at Z<_!!BHlj<((&#NoCrUKpZxU`
z4SbR9iNlb7zkAms*(k1p$oEg;%^mmxocz~MKws|`@Bk<RL&)C#QTQf&jkFK*I!AaW
z2CYbHlY_EowMdEQ)X^%NaPDM_2z;njx}gfH+PWHOtI@>NN1Ljn!jMFehBZAT3W at 8h
z5Q)U3sAxxwRZxTrF)<360DcjE0cb5oKjVN_ssSq#lgI{mcZ#ALyA(dQ`RS)OH*EXz
zmv5K>NTS&NcX$zQKw8L4jEx at r)TT`vCdM=#IsCbZn8n^VFziUaQ%?||)c&MhW6<YH
zz9+Gx6}SbHErJT|ZjI<4XEkzwLQ3GNQzsGoox`F5hIE;r=Zq@*2BXdLWWt8%GM8}s
z`t9uO>!(Q`om9OuUJL|s<O7_dM#l0o9#_ at N!sW<GwQdlDQ9ed1OjB^?*l{mS0)~;L
zGLPnkLGaZT6$PNzxY7 at apZ?WrYuAEX at cfo%K_YE9R5fY;fY%>LiijxCPHt3Yq|F-m
z&YYn`X*9GDe)7yS^fxfQ`DgGc_=M~cN;%#s0pVXP)yu6hTIndOOl##eDpzQ#9Wx_#
zM<;-!=Crl37EP_t5NlP{D*f!2or;O&Wh~wj5E;;~Luq|~(3`-7+JzwDAK!bw+P4o(
ze#tX`LFG$L3zt9qP!sEfcP7<@+JD)$$-|8F!13ey_b+XIb?*4_b8rq!MCjMVZ#C7e
z=3N|<L~(qm!WELLCgdUX!3?DY>>5>VXaldPl_S#7ByW<8Uj6{PuRXBm2B_bA7(MXv
z-quDBewq}A`UATaJp<b*28nhGmx9+QU6C at 7bRRo~Mx(5y)~Fg}YlMhepP`~fG*ldk
zv4e?7rKDwiu(`sCATU+~u(={1WP*2ln&}V=cm?u%8SkDwGX<f-`&fk_%<MH}l9 at Sp
zum%2O3eu9&H6BmvtFUhUQ%|i2Yi at WC_;_?Q;ZZRsqy^!4KT_)~*jC}vGkl`S^}pCE
zYU5;7gJi3y{a<Vq`6^w0ppvzn({KO(kgbA#g=Y7Hqg%n1qwpiJVXODn7Wg*=53PGQ
zz`t$r-r5Q_z>kiCD_g<Qy{yv%%fU8}2VU at g>G6O!*FpR%c^xc5(2)${Jmfqj`Immr
z{D<w2WOJnRMOZCNv?Ga%=GiblL`Mnn2rrrfEfqSMwKiO<-w^7gVmHuFhKH8L3%5VL
zef`p>!u3ymb_#8fnIf#Cl_ExFU;Ww-VDEWLeLcMSw_`WM>kDqx?R at Rvgw)seJ+%bF
zuvyIAA at Ij-V`)Rp=1ni|Tk`JmaiuFg(@Vxrf0 at Kgh&2e%+PcJTF{tuFtbCqar*?&f
z at Ir5va+&2kEyYfx-TE^FMQte8KnxVM_cu^%#|Db+0R{?iBqcJ?O~135qHynCJX$~D
zcRWPUvKP-^k9Ql*OvdvA4Z{epceuw_Pl5YGaLS^ohPG$)JcIN1S*as#Q^Md8W8cL#
z33Q+rwo&+O6H?3yYX1{%ONdsdV0pQqrb7)NkJ0h+P^-yhP9^q<rY1azP-AcoHWBg7
zLmBiHHcXDK6t#SKgGysyOttE;_72cVjgL^~3nBSh1zL_nLX_y2R#514+Zn}nmStpU
zuAs at I(a4b2$l-puzda(89<mplB+PpX)D!0YU?c9C`|v6OJ3u)QZhTB?()4i)LY|fn
zafRloWG+KeG#4jXBaj at 8*)k?Nc0+`IO^B>k-Vjk1D%5HMcYspk(CXDQ4+O<k7!5de
zDv5td0VMxuf-Y7aLg3Bo-3wQS$P$dYx{=y~{(NztZhba)|8VBevnRyyWBMQ5zHsDc
zC4+{`!j?rF{4p at xuZUhVwb~tp)_c8-G08P~T2r1;%ZIuYE+y+SYH%Qkg#?0}lLA37
z!V!($h}1!yj0GV~t(<EJ6I6&Z)nb&$t=#K=U^D2q%j7cMcDY<;%t!07Azy~Q`ng{)
znu-58zag!&>%ow{d%<fU5xsVZ?0IM%JWM#$8%JLdo7c1TV<xlpZ(`ks_W3r}ZPACg
z<Yq3<B;&*LXcy>hkn at 7dr55=Ot!B;5qP~cyn^C^TsG`gUMyR!D8vv(ZLTg!7z)ZV{
z)J8I$KqtFOyF$bElO_>n7~jNV-o<o+=izk1E*>Pr=6O5;{^S91IzIaK2;&SYSBNZ6
z!Beb@>8)405M-o^2B2F32B0;xwpQOj3_!I(2B0G;M!Z~hHUqKO_6AUi*qU@>LHp8;
z=psHYgszc(IwQ&FLSM``iAm8=>23`Y9*_vZhlD0+kOUzJ7n?7(2(9Q1OAxf0Rjtu9
zaFPVknu}9n28a-3lPtOt$qtyN%a!e7M8RHQBYQ-|huDdpJs}FqSHs|Fl1to9rBZoR
zx!c&ws?@u<G#zj1ZjGW{Mi-T8$|p9OX30iFL at j%owg*Q!Qq6K(IH+Z6@^hRU<hCa>
zlQyWs%kp($wZ>KX7>Th}3J*FqOc7;9Bo}-6A)OEjk|{nGAa44^b1fS9GSXpVlwND{
zI|a$;(}zK2ztqZANU;28&Ac9jMf&%cu?qeOqL$6<(Z9cQ*qDu*MiwXZKi1DVbj&mL
zqlU*bP2h5+_gEqJwuSfLxwHY8d%z2YX&@Z}1|+4uRG4tN`R5DW3h9@<4;FU2()`oK
z1aa(;%z}6d_t$tSX7&g67c^ETYN*?!&Qr=<#Fpby^19wUKy1aNipHE<osBuQYQ8~7
z*M_VKGUg!OvVe(Qn{=G<ENC4ZxU3)ntdbdpz^IWa at QGYLUjLTN)d6m!&Sj9fta);a
z$nF}KffubhqUI)TODfigR-M{#p#iOOwfD2?h*cP{aZR%7u-}S2Up{H`UI2Ft$OWZ4
zB+duf>xTlj$8%wR2|{-f8)dx+U6b5aL>J=%Jg;!c5jOJHJPHZ0h_=)}v**;ZW}$&H
ztWk&(eSlp=8DovHq?l7onn>=?Ejp3lUDA7ZbYfqUPjzAsiZ~+nr!Ox02SRf+HC?jl
zxD3&*NS=1FBH0lV+5g3+Q%fPrBMfVJR#HX+X-_ewm}4w4R*jAGTXnGP-IY~`%aDe?
z;tmXG0D33gj(H%U5%`_x47rFW-bd|_BQ750)@oc7%Nw*5Z+2N!Ng)=ia1KFBGuEC+
zhpV-<a+M|oX()2aTx%lS(3;zXn89r{GI~zn1--#wU<D*G3pzm?GSTmOz}QLr9JZHe
ziTQ*s`+nL(iz>c9c55;Hx4j>NZE&Uc=poPC2@|TpiJd^@fk)t9VUvgGc!*BkNa!>n
z9IAAi^)4zr)@9*s5w0kfR~RW?2t`Yc!>8<BB&bb at HX3W?<`_L%X>8gCxh0Z9OHH`A
z)cASXPrk{ZkjM`ci~;0x!6qLNz(ZiS*bsUOX~7{{javge(xOCK^a*MRS&NQ<;?~y)
zKh5&>KPR<om|LUA{qJv#+1D7-j8N1Jy-<sqK!w(-{EF-U at 1%E0ZU-vc{a*VM%UP%?
zj7{QoS}M${)LMjd=g^~@a7JAsn$(7Aw;DF6xy}4@^oFn(<WH*0EJAZ at 3${_gW(*ay
zErzjcF`{b)pX`r)SDF4s_%r+?vg++C-vJXm_V(_do%I?2BA%-B1h59)0>Wf?0YUN^
z_{yO>;MGdee-78?c^=V*ZBV1!VKG+0YV03xRYxdkS18~WoQqFww?d^6(-M|&L)TEO
zeS=`tJsG*dT*j(owTcFst7Ro4pJ?C^E?rLrK_HRdQ(TQivxXD+_EZtvf!%nV57U~x
zzbhYJe@#p~@beS38UX7zZ?3Q3yajv)UqB;1s<H|`{(nzy6|ERs*EPXKKQ}jDyVl(N
zv)HD-h!=JcUWmfpW<nmNLu<TC#qnX`(Lr`6VW^p^)q at a3yedqnHEOWG4{pGv>!KK_
zG=`b<`DR1D$z=A~o6cclleA_A<g39MWb~r#iOIS)Yx=a=^oYZIA-!Wa`~+Tk_Rhf1
zUwVOl5X`I?K72a(Qbh1apw0s}>Q_9qsNSc;^A);yW)6wz>qkB1mtjWpHt9G|d1i{(
znTX_z<w%}LqUO5|Y!aj7yX#%H7>ACxMuoY;P02*XN9sv#Q?q2XvC at oDwt-TwaoR1l
z)|klJ=o%zHIG?0mG^Vs%Z%J!yJ(t^>i~WcYzNQ}17L6F|Ry*S2oeAB#D^;Otr05?<
z%97gDYaEDeuXG&bJ%nrU;L*l`BvLvA1J4NSmx^BMlONx+b_b;Qe)icRFcX}Hz0-GX
zJh}H2%q|cs9slLS4R0U8YBW1~(R|Ohi{KKRF~J+R>jaVSu>A+eB~lOdM#IX?q5^%(
z`y;Kck2}<C(I#nVCd^`0bPp#f6#P>xtk%M8r8e-wX3cYk4VD*FPx58qK~pSF$`egF
zb?u)0F-*HB`l-)v!QYT56W(0&*9ldcXC8syaDLzOPq3IH1Km=wxA`hqhds at u{YYG6
z8;#y*G42vEY8m%E`Ygt6YSHKAyiIUY9-M(i%TvFhb`5FwAr$bNLvk97m7E4+saU_$
zU?jRS%6FasWI&t0cmtC2M5RUN+uD3F2I!eX$vi>2AJ3zCVxziK#cq8(A5DWinzy<l
zVofeCNo7p*I|DY0yAWaBY9m5bnhhcB8mp<++z=5`77J=AtOqvvT>)ECMe$gmaW at jZ
zFCXars$oo+QLs7vmcaL3gDZQ-*9{&#mM_l8=#y$E+98O02d<n_j`6j8Iy2}X{0;uS
zet0BO17`s>(GcO0SD%7S)8|f_RPD1h+ld^JKuvH*ICzTJDO at rWn-|6-DIzAKw_b)#
zc%dSiVd=o9L`hzb39>a224%PjOKC`!h+*Z7s+Lg(YErq_n)j!Uf7tI>Y8h{bD`BtK
zI_Ok;3-0ZLF=E3&25JCWu7lJoc;qnLFSd%zahxxU)Qy_uHX=QjN4k~81t`|c$2cNf
zw#fLvNsc5VJW7T&GA6n<hO*bj)hIO<CZbmMBz6J3j#}ZH;l9bua=c8g2+`{F284C~
z$sI6xyKoScrZ_m_pT9V9LeR|SvKGM=Wai#LK=%(asryTl+LseVoX3OkJf1K4q!B%m
zU|@}efh#D#E+yG;cD6l(zOj__PcG6CZWEbzHtrw6kf-NORu}ORbP0S&>iv8KYmK1|
z+BH^1Z3iDgfF~L17Yfjf*e7O-HT*at1NF<BGM;1IEb1U)x9w7fOgAzQV52RPAmRAK
zWZ<vj_rp)EU;k8~KJiMW$hX{Q+<7X7)S!_B3}O?uNom1sSXRZh^B7YY4hj*_L%Gk$
z?$}!u0#gl0HZAaCH6v8KbrFnvyu9_YZx;=`fw%Ueo-za5jH;>`@Ur<S_~VXpFKhrK
zU+~MV%SfDXEY8Z8))TX?1^8r3M2k%F>%%f<yq%5^g&v=nIl5e34ib=}2olg=p1H at 6
z%qhv6%*fhi at JJ=pH`h|ZJ|oQcQY?8h$#tQkbU4D3BdMftT#_K;NydJCCLP1jkB)wz
ze&%v7*zJ9ICREB+KH}AAAg?hg6hVQV;PSf{!B!900&(5w1E^hhQNJ2Vtc#c+IGx4u
z$CA%vW;*cgN`QGEpFO)6_Z++mq4!+l*|T6S@!sXmw=MfE?D6t9E`8}?eqDC2zTv=M
zUhqDQu at g1m5v~T&9W7Q0A$2r^YY3qShy{mRj-Nf-_uj<9imAt7)}gcDyJ-*Q<V>5w
zI!VPl__{D*z~kGBil#H8t6KZaJ(1N5PV?tW<nL0UREj$kgeo+uE}Ssk$^cJI(R;Kh
z&?6J?e at PyhMRlzoihFn<4wi}dg4feq+*tp93YEnCPx~n?ct0f&2AL-+y@#az6wm{X
zB9 at R*m4SI5jU>0Q4?wi-d?gVmWq<^b{>J;X$3xGpqm5PYjW4|S>e^{VbN&AJ*-Z#I
ze3&_22`ykL_yF!l;4`)ktgM8;KMgn5Nj at S2xN;JE5pW+VJOao4b_|cuW{A;ffoUqU
z0R>{W&k2Z-7`FJGxup++58*!1=@rpE_sRIgz4HQNB*1HLWIkY4j~`9igD|ZIwI`u7
z9X7FGA&KE^&qs|gSZbo!z!|59j+{E>Wl^#kmFAlKIB0^~NWbIe?w>aMQ`o#~@<c3I
z<!3(j-G>{<JgkNbvF{|p-dY#l;V+S}w-heK`xN;2=lJ+sNw%tijl at qc64$*CTK9am
zXe1=zG#+fDH`lk9Ec(WIm(xuzdvv-A`mf$S()RJkbS8TL#G3)&C}#UMAdW4<@mpm5
zrh?7dK^r(kZKp5zOxuTP*|v6 at H&NRC=54GcOa(7iRl$qiFGb4 at eolqtbBJ?K=>tsZ
zQo9($P*ORFbR+nk^S9!Y18|SnIOgnG1~-s9%Z`H=rM9Gd#0DaesIRK3U*_Xiw8k04
zcuR!i_p{uKYw2!~i(1i at 1^>_?gs)sit#_KQJ$@@bTT=UwN3u!D1k^68n4`OM%ZSN<
zd9AUF7Qq+lu+QSh9oj-%LdY76=I;zK at 6?}pL>le6^xAD*w&2)e))_Dy?VAu|_6GR*
zN0Yh{_m!=P*VShDa;IR5MvtRY2*o`hdSHq9zkVRL>1e4|D083NW8V64FPc}u5}U+V
z9n9c9bD-o$bw->YpbOgDZN?lGL^^Si$B;s|1QCy*1G_f*?CShtvF||_gty<Dc`}gj
ztB08vD`6(a3YrZdJRbuChGq!|73qj>5 at r2oz-R1g=Yae8ei#_wtI3-i>A&3{1*<Vw
z`W-o|L`;-vP<xZ{{OsbX%zcrOEdcGi1Bcn;hr#{vu|Qg#D&eO4VB~zbkob=}saiY<
z5E_<>x;VnlND(6|@X=ZcBMtC9>|cuODFg at Hi4J67-Ft9w9hY1O2V;*h4|_`tqPrLB
zV^flQ?FX_q(eWOP$eSQ*FUgfv2`>YYCz*n$fszcU$cvrw(1NzRa5TFd-P3 at iyI@yS
zu~$Je+^_^(JAn79wu23eVEsYwwZrMmV~7{y=nGX<t*hYbswzUC3bpZsI8Xl{+TH{{
zieh;jpYEC2%}I815RwpJlWdk8<lbyTHY9`)LINaQA>k$j4B-wSC<&(uK~OnF^r0du
z_#hx4Dg;Fk6vPV^1O=W7c)cI;K#>PYcJi<8>6x9);d}4<`TPUBJ5ya<Rb5?OUEMR?
z?cAZy-GwUk(NJE#^nkQg+IU>@tw(#MLG(S=Y&7r~`t>zw0lILI=l};e{vY)6^YA+G
z3f<8U!11^vTceL4(8pZ0-Fmw43u)CSEM4{UFKeV3>magucO|;C^t<n#M9;31uAxC2
z<mTH)dLP`*CUg{-!5|&J7fLo~zX0{;mPp@)Y*l|Q?nhgX{1)bWG_ at J3efd+VQ{84d
zKIxdQYu)0PolZxs;Lo*BAV|HQhPqg&)<x^rLH)Ec^T|h~Q_=<UQfSuUt<A^{AI1G;
z!EyNYV<;VTacav;xZ3G8oj%jV=!aRHPbLE8M-#2Q<_LQf5!~O9g&xtk%~7f5!3YLD
z at 6PKLj+SZtX3J@?)lIU_!<}xehoBj95|<Zp^b($Q1f`=Wq$7*bwl+)m at KO3|rK9Qk
zG3oEqr=w9 at UUJNtF3+n7H+BAC|Ap<Y)ud~9^fO@`nV{Q1_e&~Lo;~UN>GBO0yb!%d
z+xu)aR{WUlft+glFMOmnV!>a=T08WR&LD}e^m6-459th>I3;eZXFjsMKuJ07x}E6p
za$2jn>EXY%<0DgAMNnJXbCOgywBIH>1a;798??G=)&0S at s+fmM&G?jS58n8pbepMz
z+G9GkM>E(=2R*oJd0qQM+L5cp932~1iD$U>=S`QC^7T>L*Cr(<k(ZQp)X2n5(i0UC
zRY%)tWS6A(c~p<XTD3CPXK30O at SyL3`E}UPgkPm!$h5)^)J{_)FM_qx(&QKvmqHBc
zDaUS#;xcgPex7*x{W|}u#$%xOY|Xkx{WRJRdLk3FgMrR>Aa%VAk$B<o9|1az)8dac
zL=rr*KegDM?N3ec$v$+`<T>kfir;bt+SwM`9#<=L_1);a=xdtw^0a-Db at T>h9lbmU
zo=^CXC#`c9*J at 4y6>~1{!J)0rbhiFJpVIqEJEu<0Z>S{n&N<5i{(<7_>e~1RIzLNx
z!<GF58B39MXl(zrWfZ at d?Vopz|F=xvT^&m?z5_}5(IOU4qzVJcGjE)wSx=P&eCDD@
zklmoHk(J+Jx=Y|(J>@@FgD;ow5z1eKFU#wKujnI^AI0h`U#+hyT3-vD&lp_hY<juA
z_kqJ&(Yw|Gz3Z*%iLWqyU8eF*b-t$|>noW^tDHe0uMMX9;4V;ojMdBs%KCVWmaj&G
zFVnw3>1*(rKHB1wHOWcs;FCS~YFzN?dJd-V42nNd)%O)fe;dVLrmRPyYif<^J|&u{
za4uUWOZ#GZ&Y;QY9Jj!jn7- at UHZSzKc{}6~p9Kmdrn$s{@_YQujy<WI6%<aN|1vvH
zr*b~R=Hh5O<UF`EE{lvI)#Z*Bc^a6!&CAXfWk+0D=u;Bjq^ydhc<iK2VdQUhkFB0R
zZ{5t{XKFvV at UM%K^whHXj~FIQe6wWTaa+N$1-B(h;Jdu^;zNJyzA@(Jv4=l*yrNsb
zdg(?V{LK#!K0JHH6M17w-`er&TLTw8HhJ=esHjn+OUqC+3U<42X=&~2`^GrVHN1QD
zFnjiMnLh}!lW|Ovx|uuOlEmd;an}vtEs^r+H>l- at bA^Letr}E#?t>8%CR9%L=+kGx
zjNa*a1J*=Ft{IS*o<4J4jsND(W6Ffw=hi(iU_h5H`2(h|d(O|-d|_O#xRm4xRVmhr
z6zjB!$w>%}tyw;40)2<L08bQpfj<2;`;sJe=G7M`&^5A+Q_lE)|8Fnuyl<bhMS6#A
z-y~cF=e>8jS}!Z<9(X;uc%VeKnCg*gh(xYx4<z4oPj^-=Hn|?e<(r;)2K9VqOXDy;
zX!{GG>`k%19b57F!2X}F_yq+^KmYp3XL$opKm5DYa*n8fgMt6ypHkYdzoOIsl=7Ia
z%O_2oEPW~o(r1$=PMnOQ_EXJ+-myR3pO2i2loHuP7Z9Gp_22^djbuZ<3-Vrk*q=O^
zmFOg`@|>;;`_Vl9P!emhKjg8ZOd{n4>1QcU`WgGtJkn>7i{$ya<-8apJWPDBpOJQ7
z at -cO^^Jgnb0)FP-t$L?w_D2^Sr>5iSWZP^h6wjCU*xp`sU<cV@`{8AeZ3CS?-}1HY
zlCYSb|C{K#+m=ytEq2K3dF41^<rg)!!yQE=<mIF!<>aA*3As5*NjbSXDo)b&8T($_
zfhLZp;&2EZkj9F4#W`f9C312D6H)lJy-@`dJr*qd{0qm2Fpx68yr$uR6bx6fFRqfW
zz%9I6HD at t;+WP9Oov)A=h$hZnynGwF$9|<9V0XzcRMhMs&jPaX<M at imfz6T`NvnEX
zv5ib_Ta^QaGmv6=R%&_}JzX-gWZ=Nk`IVO=r}Ue%a&z7Gu_O8q^RU~iZI7?#M=i<8
z&B`yjFP+NBj<QS}J$7nTZb6#up}@e!8lIkXHdggI<b-r`g1zE<VvzHEJ+`wQ>MHY%
zjny!Yi<3F`PP09pKTt?nlGDG>z at 9ztqjX^2v#M;|)Tn-u<}}-)Ku at pCOqo9)Ad-Fj
zEgU^bFq{^a at i5R0^8A!Nn%Hr?sW|c4?Ah1CQmlh(iiT{h9c)bri;F8A-77Ax*XYu?
zIAOy$yA+WzE-fT@)F{+tZ%ByrkBsT*X<2=07H4OrrIU6Ie1#gS>kj>G3~I;UMq1kS
zxA+KEMt)iUlx0I|RzI_P`{<zqhm$HuEqgdT?xBJ$+j;cIl#0QV{KtlDerV82X{9ix
zq<EY=Q&F)cIce%RqMbsboWO+S#H5`s2#XdE$Sa?mES;{bn*IQNUSx*)YSamwADKb*
zqx0`n4mr>V&Dk{DiUmA9=X%(*!8KdA)(oB&cK!O;(z3B*%Sy-M3;1 at 1^kiD<Ug?*;
z*0gaMUre97ba74X-02*r)QQ3askUcGl^@4jlX>-}5nzR1g{lB1&qGB_3!C}F{IR8@
z$BY?GxIh(H_d*4vrlHgf$Ez9B=hoINUOHE?^>;x3{`3T3wP#a|oE+FKpCFBoNZwN?
zgWkq<efr at IZ@m8GmhF!UV at DQ`_27?)R6phQPpsRsb8=;s{9cBWb`Xi|{Y>hf;Nhvt
zaU=4{#+_x0&PI2VlPd-#Ci;yFDJ*<wV_DhjPiz at F>@gv(R|#SBg|MhkW_Uzid1BJ2
zkx#CxA3l6?rPWI70|Bp9xCD5SzAsGPNtf=Z>vG_*Y`OIO9{DmbN#1`Cjd<d*g!qvo
z;}agMvD)o@`{*r}fw|_0*j}T$bQ#qvHX@>b{t)l+ozm0r>XM?~mY$uwd-hB(8s+H`
zuqY)cI5gC14-HKV?Us?+wJS=_8<=WsEz^JBABQXban2Ku#wUy%nGpXdktrujXR#FI
zn!{sbiA=Gv;Sv1 at 4)L1MDLq}}Mir&^?CIT!$W-Ft>Hknla8PL1)Qr$>X`!JRsi9p_
zO8 at -SR9YwKdD_mqktgcNbqt@0H1-89KzmfX6~Fr8hMb4eGCfBWO`YJhvuoEBGZWr$
z++DUdpmS}8b?U5Q#o)%-&oXP1Z8{F^K+A+bI*tdzQ9^XL(CFxl=uI<GF}N4>b8uv2
zaIo2o-?D={VdqPm at m4+%+6LKwQh5L-FDO#auMS8?bEPBG=3Ga?lTdv1DQS}Q)`Zhz
zD)ClwAh+YApY8US!5L@#Iq2^)%{aVOcolR*`k#)U`L})nK=#deYglFfX_b}Ids8y=
z1`n-}PLSVWQ>6E%&Aw`yoHb;cusEmR`~}jnj0}`AW^m<X>0fY_R#wQau4Gi%v--<&
zpy%;HkfSF(CtT&xdd|hBec{MT*i6lxWwkDz(QCNHE~KWUhlJP%7mu6*<wck6RhfO#
zZ4XI>W2gD~E>2Af3mb?w%^X@;0nC-QdK!4jXHt`=>m<SoB-YRaoEmy$+=K}Y6DEw?
za9}@*+`k{6Sc$k5D_XdfwtCdHzFxXs&#`v+INkzu$kSjZG&{iDY48U6s<l2lXzlC`
zWu>KM8?v*qvU9zA#SR;vkdP2Rp|H##WKO6kDS7gVl9ArtAzOw-MD*>8P~X1&^C%Dg
z11hT=Z-tR~3xo{7*&yL+A|C(YvK1?qJyBo(geuc%{zE$U_wSrUVl7>dNb6~eE`7V7
z|6u9Ll}n%4z55B-Z<)~^+z9l&=xGbu{UI%Cean8H%^kZd4t>7X&(D-zpTl3vU at m=%
zeVpRwrCa2bbYjDgBZv5Rh`u;K^7M;7oj1C8;K!#<UGVL<rr2K5Xp~qsX3B8k4g2B4
zcImOgm;~$4!lLnnP8jqPWK}h33(1-og*FQ1oE7xZ#aTa?ruLgNt at 4U}(9n at ngnv1H
z$(WYWXU;>Yk6qd^b7)ls>O}Rm9zVk8h}~$MX*H2pK#j(%YWTGQkM8$izy3>BOV9N~
zk3Bs4!MV~|zUla+)1jm7lgE$yz?z$1IJ#}SVgZFyHe$u}I#6??l)(~-Q%xx;{img*
zR9=Sm)H7<zH{H7D4UXzradGyw9?-0;DSVH<rm)_<7oaS=w0`X1l#~i&uuJR8A|vHX
z$Ils68Cl_B at _cbK-ip5lU6Hezd36RI`0*&~--A%f^mpH>Xezu5Sb^Ye9zf69?T%mR
zo=xe(HHh(<-%QbL7Oe|KnjJ&IAdt4}N1dC0op!8rqVHq1+n*u(hu**U!Q!2%(iT*?
zaqSc9*FUj#qja2q^~d{>k>6ELeEZ~+6%(Y7BroaAgo+*0(fs$$e1GNg)sK#`=WBSi
z{9MFOb8?Fk2v_ghhdb|uKgU1!p|e$J#q<ZHhpVLLs;babTJ}p)Iv%F;C(lOB$)TwA
zDbH*s5xufkd)%|MegA$m4f=HFsn3;FVs=%Vm at y!n`6|}C8)!xIO01~v?-@>GMr+ED
z#Y2j=)(lCphQ-H~mc_weS!rB6zCX^6E|Zusq;!<@%bws66qYePEj=r1aZOfMTAJ3!
zD0>gHKt-tzdGBHTOc!u32M%n=UXs<%yKMOQ2@}Q_jyCW`6DQX{@#O9h at GAMsC22)o
z9*b2>cm>eZ)7j+C$(^k!&|L#rYOhem;WqU^_0}N;5~4><$*Ueww0$Sf-<X&y<|FK*
z)0LG`&j#FMdkr5SpMdYd at GcJ_W5M#-J$(~~4o#00#ZgZ at IkKda?BlZgE-zDkG4ySn
z$bN;09dpA>idRl1XJw8<7QMv=-!RY(v;|_ZYjV)c%E at J8CWYqCdvO28rw$%?s&l-l
zQ(TXa0}op!XLuH_?EP^U;T2I_v}D1uWsCYOL~i3RJ at iEV-|HTESr9_)-G|2vGWGIG
z=wyu?5zDoWtt|3xP^oR>7R_eb+F%FetVmDqG{I}g!2S`=;KiI<V6o`3a_n|%jS}YI
z)z;L3dC90Ngf876oC>vDLqmguQWgbxcq$Q&rFT&Y^C>tMbVSdaV6D*E6o at yK^@C$F
zQA$!@>pSl}E!EAQJ$wG#=n>K4!swW+p at YfbgmjIClc#!jg7&czJ&zs&-_Tw5$3_w;
zw(Y&h`<uxx%=!U6P??!IBQ7cmI@^$t<lZ4&Uw8q$v*TBL at 3Gbt4|nKggMz}s^LyLX
zxJw{=G+1by9o}x}1wtd6v$|0kIx at RW*o8)-H(AK_FMF$)Yi-RQ>CV~OIV|3Sz5(r_
zeM5KJH at JG=K-M+L4%dQ?%`zn?_nVVqt-R8$8|fmT$C!nFMO`zxcTY=W-9*nQ(ofi%
z8||2k-=H4QGVvFP8oE<!WgFngA3~N-QG<QL8JKGJ`Zdmy_Ccl0zB+5xrhv|&p#cF=
z8Jz<HI%h-$1cZh{mwq85<D-m=cIie2b_ at 1{KL`YU;mgn098B+-EuiI4Ms^;XT(SV*
z_B@(>HKc3$j6S{jNobf|sxB~v+pLL7o at K%<8bfFvqA-b2 at hrj`Y$F}&ZUEqJp}0P-
z*gRRR5e+$J&4L_PQL&Oq`ez2&hKJ*+O-%;<_=4AsCY~iQ+(PR>J|q-mC8`MUPfqen
zaUQ}*$Mv}(!T`^#3BO@}=fb?1Kh#7_&8sXH0s^{$n*0O0bqfeUjW%<1%$yY%^}qw{
zj(OQADL0k>lqt&3*Vj*ul_8!CgSNur45h1eP9azgFhC9Nnw}C8EZQy6QN3pL$rMj#
zG*1{978Vqgy4cs<BgHxvy#a0H7bwp{phe!VX{QfieE at Qwxp;cqFlZUpl=QA4SLV#Q
z4yx(xj6Hjk5S+-C0_}LK;2?G9?9)ihVO_Kc&0dI1LrD1gPw0z#to=fcjfG6`MY&}3
z(7I{L at v!q5q%vL6Dp&{At0Pdsp4n%*+=zp_LL&~zq|pV0 at 7=q>Rg^P;Pq7-qlC2~Z
z!R49;4srC~$3WDf#PjAz<(fwH;bGZ1rm&3k1(#VYg!a%_C`q*>InJ^CSAmgWoh|K~
zDaSp&9R)_{SGyhcA|X%KUq?oq?DO~#kSDHveX9L==hiy)M at Coo7XkrUN^<V($_J!l
zpu9mtqoZ3X3J--*NcZm53+W)J`^>1GAjb!aUY_SaWpcDrZAyK$W4k!3Terc*(J`#1
zl9S0GsFgAEcV%X at UM^E9=wQgjzB$<*ALqLYEiA?&%>}Wx9*%gh%28<4ZParKDky`&
z<pH#mSm*z<OGD6u5GbBO-$^qvI5w}v##09R&JvN?1Zw3?^68`GWF~_xwFf<V2u4>4
zJ$2F=T~z!8v`C0aXh?`Tw4to5v<yX(0TMouW2>mJ<)AKe?0x&%rM at Fap{^zHCtV*k
zl9Tztn1#d)<dmZr)elEfCYpnlftg-8=g7|}ABKe9n<c$Id-{N~(g8DOqoK2==arV`
zO`o6ABR-+W&gAa#@!g3<?dX(CnC5o+*q;8GPd~!CU#H&a-##&YTe!Zl=x50jE)mx^
zn(A=?_?!_?{v6O_K$}X-M2W=6po3*$O+1oU3^}7X=mNX5S>Q0sJK)7rf<wd%OH@?c
z^vpi}_*jH`jT|z}K56)<!K)Tp7xd|eO9}=SrjHyuVZ?@|ef!|&(p)NcMMXao>XDLU
zN$46BRFFPwTu_%4z5B++nd1V3LW=r~nB*mo4~W06*NL>3?%cXPSTG;iI{XXtMMj at N
znwF3j8tK{3?p>HUqgONmbq$7*xY;8EmlyX{8$+)?Xa=etnw8?_?gxP2 at LqkSb<9`O
zF`=csF=0S!cdKhXMtpb%^}4B~J$8?D9WH+8biavuGIAtwi86NVM(4U|j~$?y_ at y45
zcI75(xSvU>Nivw61;a at eE>u=tL2*;2NMDk$Av#L<7xdR3!Pt_94KcL;z9{|X39*AU
znZ}b_ at b@C7Gu<v{VTEaq!2*lzL?^qI$5hs2{MvI9)6+r4y)x|m`aKwz91 at bAKIu!;
zrEqY1dP7=oOJv~>!iV7l^Gma=X;Ef>=vt#~seMZG2Zr0n1<fB>nboIHR%J<g at 1SvP
zT)G8+0cG##OhxC>TZBJ4G+<Ji!u^4My-92l(z_^+uyx at oSmVlBv=N3-fqgpR*m~?K
zPf~f(S>0qmwDImB>67X2ygQ}2 at ZT^nCm#G+=>fYP2ZEf*knbTmzVWjnItmXUqqTq(
z^s;oYA2v&4(TrTYH39wnz{?3zml-={pPCFlbpx$iZNBzeqlVDFV7aN;dqzd|nx2*E
zB)b60qco_LalK{xNydq|Mj+>@5HAOsB8xUuX32B_CHj-$QwpkFV;Mc>s>*73*XMWf
zymV^>!WZ2Va^FS at qqmmN5WG4S5A`Otg8qgN3iK=^Fh!e8mk;dhGOxsD!=RSXVEb7@
zKH`_e`PtcJr8^4p^701gW=)=yW=l`!>(Xx%4!;Y=e*I>w%<J!C=<(+0acOB2XQihz
zKZ>6OKWd=!U}Q#IIVDImF(1IQxgSF+&Jtqc$B#{j7STefPK=2kI}Y6T#{K&@u0OC}
zn00W>)Tv_*+TS2Qc>SMJ)t`T&&3}@2KkhjCikHOmzLDgOA%h<86|Tw8{vCbE{#pRf
zW$<+8{?z)-05?<kQ^L>m-GYpkYr-M at 6@d4b;e0-Nhu}+#$bQx;e!cKB+Y at 31Irl`x
zuNS`IJShH`F8B>9{$&^Z28K`H3Dr*rcpZJ$AzHM`?>dloLUmIC{&$MMMyOQfzeDA>
zxX4eQfnKBX50K&F1y%k#;(0?D#pglJ2KJ7~BH^0OAK(KRJVmAt^53EITU_LyDt$@t
zRr(EzK0$sh{ytrm`cA7Bf1lW0#&_Iy!Jo;!d7r2Cb=w7hCYMOz^xYk|YXAqIYOvsS
z^bH<8IS~W at ro3~bzYOX5EPXu9Unh)5i=6qDoQw|W*(LwiN=`;c&ppVEM{}sWH^_e7
zN<RFSaD&;`4f0Nqf)DWVOdo|V_=gpIsn7-gu!2v|S|s%u#p?4et<M5zKyzt*4rFjE
ztxxi<%L!^P(G<Q;EM at kRE?g7u0=z(m3u86!@(}tl%r0sb`oc~9KLB2++WWh*z0f^*
z!ze!3g}6dqTMG7aliEumvzP7d(qGT$d$yv#UZuZ)&{y&I=^7dR1%$qezfZI<efD#~
ze_O0&`2Ae)-xgky-<gpL at wXH|R at O7WnZ6@-58!J>Vn>4*JYSVRNM8-`IM)6Kp&EHj
zu<)~fKfs5`a6StiVfqQ8^yB1qFAikwdl6Zeq2PmlHYn}M1;0VX|I!7&LB(Grb_e~3
z1BKJ{EvI;eKACSMa6XU1<#))Y5qy1;AxxM<>V=!zvI*G%9s>At^~nIA%iwt^leO>e
zRGxUo_a3DaDt(FPQF)4FxS}6vi56eqOE`W1DS+#xeEgUOe`ZVG{n0IKk7ugS1X*vo
zZd9LSACd9YpB2mgO#DV}7ZiW9f{&llby4gS at J%ZIB6LsjTXYZUFp5v?^Oj<t`td?8
zz>67NreD!=O}9fo9Oxucc at o7(QI%r<;%fjOD%0n-wyYxfP`^7U{X|CRQK$V=`a at mp
zzXIxa2h~p^tKSD0{+9$_rQg8pv%+!P1%D=5PW at Z~_&+WFOzu?*r|-hKk#>|M`#1W=
zA^1NrAOE7f6G#2uFy{X%ng6S#{!h;Tqmq-+A$FdR|K-dN=`@Ez!I$pA#Qc-oK9ZT=
z{HNSL=(%5{K8LgZ=>rY^W(D8bzfydYiob~4ueLwg|5+LSCDs3ZMe#>6cu%E$=xnrp
ztgId`DfPpDMeApz3 at 2}MD)_X0JSDdS?h<Vu6kogx at bv)4+}spSZLc<3KUP+6mz4HF
z=&SN5?Sr1<L*-9pavr7f)3y0j{t|iy@*+2xem&R`Irk at w;uHCgvb7<L=vw|TicjF3
zocJnzi;S=3L-MJ7EOI`Y-pRQ~In8fl at K=?1hquuFWfb%O>9l|G2Y- at 7^=o5t>{k2_
zZxQDLd=!Jr<?#o9l0)@nWBPhk at o#)Dajr_gLBKLT^#5A?ncVBt&NCdh`790oOpc at Q
ziBNy#6hDo^_lT<~9UJK7l3)RNsSFondz~m1y5JvH at e5t>4=ebN8!q^7DfrO8Yw_Pw
z at S#1G(|9C}>U*uYinhmSaW#!6Y+w(U^cPt^NEh;1`^ZPtYW^?P{OjcW&~L87`_=s8
z)cosM{`HU_?6w7>3GqjL6{M%r_824l11$$Q^rFI2oekh+6o0LdL;JlOP at g}Ny_ccJ
zey9BgjoVrpL4QjH3x(%Wco{992gkW3)Art*(vM~S+XU_Os4f-YqiKB957}D2YzIHO
z1N;Y3eal%De}sb1Rbd!#DEQPL%lK6geXUaQpI7jqf6&r5DfkfA$nQ>jNQ>O$_)EsG
z*L9<C6WGyFTA!m?zb)g_z25cP0G`3x$2Vwc3)?r0(jUX%Iql-F?*M;2(?4B1Mdi0M
zIxi9VLH}f*6 at ovO!R?ej+=*E<zRP6&?HSr$!TR_c)ZdPy_>T)l86WC5i<UQ&#T_3}
z_%LX%H)wgsF}Q;Nr3-$8ivOhxegng&{g@`sV*OZ4b1VO`p7{@2FM6G-=Z&(S<?>Rv
zT;7eWywLyX20>h-jMJvEe#F&(s{X9y4wP3r-m6!}dtlGn at m{?=K54lF`n=@UU&Y at b
zT+^&2IIH4sQ1A(T{UwHPk?B)?vwVaPt%qEep3c%W{M<tz<w=r5;S2rdHQuc7bu-ZP
zbUNP1mD>lGj&?cotNbYyI^NOd_fh#j$@td^>Ev8Fmj71k{G{A`4>kYdHu*Pb^Sgc9
zhJTFk3%;%7*Y9YPe=X#nt?KXHHu`(gMSuBi^!KDXo?JxFM^eU5_3HR(5nY3!jGyW?
z<ELa=zdczwZm9KJLhCo5!8Q2QfA(bl^GD)88NN-$U#pJi7LhX;)$u2lhqlWbYI#bi
zJ>;|W at ys4ne)tfTPacnKAgB4Yu)TV8XQ4cQFnFfIkFG5PO8h43mt&RqhVJb{;54FO
zd;CEEPuEfaT+FBNBvoHzO$CvtlEQ~M*H%z at l4QOvYb(yOIFjhA(n+6|UyeUzE>M0Y
zAK^pGKa7>Xl9j)b^~bdTra4zpInuQKw?XM&>xIWO{cC@<Ki)w4N2On+@|80A at -_ao
zTJf*YPPG0tmH8VT*H8FT#)tYG&HBTaXq;=8{ZsQ9wLi2=!vH?kN#AV{z&8-ePJBxL
zEQQ-C9Sy#|%3uM at +Jct1!ne_gK!Xo@|4B^HZ8t>X`$SH$zJ_ZDt{1PfJ!@LS50jN4
z?Z7|eHn$6J;7+y+KgAt$!u5Al_z`YvyYSQ8Q%-+J>3l28zk+KA4)V8 at QabK1uG0hD
zg1<$vatT^$*t#5#R%tr%!xc)O`-e=c3oS#7yza!CoKGXeM-c2&t2Ml-tg=i;+J!?I
zTIR7a;y3&$O2;9WA%bfcem$gp_+eA~@DIDR4{ykE!mn!Jr)F?2<+9*^aLrWGdTA}^
zObcXb*JaJBX+*a_%4zsOJG#Bk(mvGa7U=0`GI(!J)vm%z|1wLP!!Zq0UsNI#P`O)V
zeN}K=d+_U}?ZXd`Z6E&OjP~HfW;eA9Kc$7!dX?!MS;VyqKfTCVuE%M)zDKyNe)UV`
zH12L&{kr#+)9|6T`gJd3X=h#a>vo>O2es9&yU5aNH2Q@|$88kIP2~GbZiS at va7x-x
zmUfz1v65EM@(12W^ur^$R4sY!!mqaslG_8oZ)xC%TON?d3;_R41OJe<w`_nnsc^94
zXJo!XEr0MH8u+PAG8_}WME{J=5t%P1wt}B-DN^*oH&A_CZLePV*W@(rR at -_J=g4X8
z)r<HbOFQaXFM`D2d2Q=OOkruQ>P1*fb$=C|Yg;eE!z}InR`nwHtwcY1xxI{QAAY?9
z_~9Y#!#`{npR||P+J&Fu*2(1~F#v5xzc{tb;Im}-P*uZ3zb)6?9-;d91wYVQzmT?(
zr9G(CZ_72kw+v_XrO_{><;rQuqV+2+_k~4NUT;}XLlnDqg<sEVAAUH!efWo?+J`qR
zZVyiMw9yHtb}Hi^8OpT_Ki%Kyo4=>!`VBqS%0|gJ_Mn_bcKvYi4>K6t*VWea2dF*$
zhD%%7)99A_x-crQQLaCf&@TLX2k^tFN4xM3QEa>L24rs+ehTF};Zz?o{0K^G7k(OL
zt9r6fJG<>_e*j-B!$-K-ALwX3)zNKS)wX at RJ<rk}bk(a~?k8`zwLeH3E~l|L!>MzT
z>ijnMkGAbwKR`|++H2LmNi0>N#zq&pwHo+TgAU)(!~qp*e}A!B8y^t7KQ;Yah1$<u
z<X+Lh3Eo|&e<gU#k6vUkmhA5d-oG_|phEQ<7Z+>&2H^4jns!j3+V#cB+V(;40yK6|
zq1Nj~l&FCdyv}S4Qp{q^Pm>_x6`B=&wSqf3fJ+^~TiS=y(=gkEBQ2c912P<U0OvUt
zF9MvzuoiJQ_XgF7&;eYO?Nln3<5zJv`i{bNvW>QZ>nYp|=={Oxd`#hPvVBU$a{LGQ
za*eq=`4Ssc`FeB!_hj}`OyeaB{*)Xs4JGT+0X(P!cyI^skPhHoJAj8e;j|4Y at NONz
zyDNH-<1}$MUP{Z=LxnG8 at Ocz&QuHs!XX0+bO5tIO{^i&V;DaeVT%jY!X5w!CBMOgD
z;Bs6BaCuZ_mVE%=kCOGw7gBhn3Lnbg{V802b~zgAF-+D2 at qAFO;tt?LJAe=C06x3}
z_=pbRBb{(r&kSDD0eqBdhZbgs!)UomRrq2C-$CJJivDFk4SINo!bdCmmwhzA=`&4n
zj9QO at tR8bHe5?u|&frTZe4L_Z**^n3fx^eD at Bs{7P2m$X{x at Io%XlHT#R(VhDsXPD
zJeFmCqeArq6Se+<%st6)l1qa>RfXSi=?`pbf3Sy*Q)GObO8;fW&(Lw{G-X^0a^65D
z6`rWTLC)_`hB~&cP{*+s<@lVziQoUi=@-achvF9qeoG5lE_{pEfqo&vqW5n~#du%K
zV~|eHY(q*qd2bUX1$GW4FYoCs>XHqt&$R@*zbxW{B9BB<WGa}NEj-q+eT{&-4H_<l
zN2cXjf=GGa5<~d{D6bAL=Hz=DU!Y${_TylB;ZTX{FDf+czryJk=o}V<lm1Y}pQ?f1
z)%1 at xb-cGn9S0UuxRd??3I}hi+e!KU1I=fe9M9^|2hyITy8KGPb at QRP-?P}x1y}za
z#XU#w=R*6all6{jsouY*@O8qsd>ysx`W7$Nb9QDl{tjssEUhP%{+ch<8NjJ;q}qB{
zsWYxC?c?*6z8^1ak=wY5z=>_kaBeOe>owCc*F7~>__{^*Ek*{{VflG^Fr{l#@%FH>
zABB^;WAMEU4lNUZte*)wze?cx1b!2pubT$&WBMcouD+K5dK7Z09<QRcZS^R0qIx_}
z?^mn(qI#kuS3Sdh6w=7JE>gS}A*Tpj`}(@BiDB}U*ak1u#`08O6wb{Zr;YLNsj<-4
zIj(RWmfuHM4mLNK#>DROm?f8M7k)ig8%x<#x_k1qbl0iyy>{6*$n%NBH~hwY!y)P$
zWO$+i2j8%t_y(e1{T!;_-*D%4>@=I|_ktR4yVHK+pKZp}yP&Pwpq!w4(Bmeu+YW_)
z1n^<B{AXo6;Rc=u{B&GDP2W?Y=}Trf;dFkL!Fi(wf2s!F*%?cU7fC&$J}ob~;uE+^
z|FYaZVN97t`Tl~!T9+HfwVAZsUn^}{KZWAnCcEOaY4 at Wj?nQcEOZq at EzpnIwWXu9S
zvrf3l4<mTogR0M5>-3py&6XZqrcL&lv0=8zutbld0xZ7l5d__8kR>lIGF%uws2dj6
zY&XP)+sJ#SqtOLC8loDWGrWm80da!i+$V_~d?omq0!*VZCvkY5JSWR=K?i>l8Q}jF
zfy3pHx6?tIH~up at rx9`rTr;FS`aj~ix#E4|#B<~B{ZDuxFDHcxT+2A{|2foVNt3z-
z`M==rVzYP)>Ln!Gi{}KlY3^<u?<=|+&NZJ*2U2%FNl#BeolqzW?}KdEJh=b+sCKou
zEqmAUti89#&~>)_CG;~r7dAB8o9Enwa-bplay$?@dBazw;@1adB61+=`XPDmqa}4h
zOjiAh%ss!4A-b1-Md!I|K%*;>!%b*I;v69nsE`;vVblk1>o=V0f8<f~?mtI!u5xfl
zABQZ-<P?&hhtw at W@8=0I#bbWolewav!=%joK3ZlY7oXk5%N@$?Eg0RV`5L`g>AieA
z`4SBfB^c!r*gr`M)M!FfF8F<e`k%lxtECfK)x3UdOtGpW;0dzv)l at bkmz*6;c^cik
zg>uRhYR}i*i<B3*o@|C915+2is_x9Kl!&qi5w@#TWfo`crtCS&7xc<cq<S at SN!dYO
z;1Vg{|HSs3%r>wMTc&uFF`@LNe*H$J0*cj&a4oB|CPd|eua>JsIyPigEqcGdS~Xe4
zV{W~kwVa+;nckAYlRbDnxzy|s5B?QT>@K|GCUWIEFJ6c8MXcxY-96pBK+u!dlP;5E
zPeJOFcgW!h<Sqdv^X34vU$~!W7154^;pi!8PWZuaX%2cyJTK*S-4WWfPM8<EqbtX0
z`2}!evlIRKR|2q~@QT>U{S|KyAGcQwdQV^A?b+Fl_XO at 9dXdLQFD~D&Q-H65_wH;s
z7id43bUi8Qav<<dI+;XeIhkbm+Wr$2$3Ud|NtMbe8t)>XR?2X#tkO5qrBL|kkB-0(
zG9wF>9HC_N1^=jE0zDbtbmzTvoR{jekY?{Al)Pt2&F=cz+IrkrvwL?<ZN0qD0pwrK
zpBLsrt#QZ*w|F~Rj&Dh;iB7&~xrQ!rH_1Fts*~0igVSt7hS<^*<_sAESEN0)ToWFp
zcmW(2;l$Kj@{3t6hlgwS!Hf!dXC3J1<AIJRJ<BRG+b_h2pJWPfp9n)kofqfZjq4Ht
zjZ!}P#z2k(OG-*GYf9PCwa(0#4sw*Vy{b%;B}r at b%aK*ob6c)?3=(fKnG!fVm(300
zYO-^(`0UK=OukQ6pTS-OBC5D<RRg+IWk&l}C30Cd-Ne3`(*{TMN#J`~vP~ftuigP(
zypNZAFR$JyCa>I-5U&Ey!G=3GPM#xYm7l-)^-aS~+VseQv0y7uwv$OWk_>VJJ-SFf
zt5W=}EDR~dvZka4YL--^4z9y3nhbu)DBMqT?{?>fh9l2!YdG at asEUeFCFPUvttg#L
zFZlhX<rO6*<&#EYh7z`=dGwZ$7v4GY;){nHc*Er*M=o7D^3J8vuRXnS=gy6r{*JHg
zczVOm9UC|8beMKf*v8k!Dp>gY`+w-XFCBUJ+e_~>kVS;<M7Q3vLAM at UXU@d+;?lWX
zu812>;#$O3C$uV}xqWcklG9@~EKY1vY}|tsy9eBQ1-2 at 5^Xk9ULVar`tVH&Aj!5qx
z1|>*qT$M1o4Wx})P$Z~@VY#RU+T07=Iy_GZ=X6|nwt<KKT+|6z&vT<OxIDw1lQ)QK
zId}5p$#W+SA10sxcNBoEc%F0tMM*J2_&n(~>9u)i`!Ldej{~jE3N3-xaXiAJUPPmL
zj?l6<pVZRwBb40HadcjaK|Q65Lbx=3m^6MKDn;yB;^QsX_&sE7#R)BR%m(p>60>sR
z5rNZr%8`Zs1q$mA?YWMgOAyvTu*3N63LUXVhRam=F)nZ?{V?=2C--A1cpcAyt+<ob
zzZ|V;Qqe*Wd0gCshJ7gETvgS%DpV`&oiKj<1T+l3 at yU1IJNnK$N8kISy85$EtKsj{
z&#GmbR=gG86~BWkBUhYl!N=V_p!^;l?t_ts7x#WAXm0QG$2=;1v76w{`*@CZ6Lg#}
z>2Xdr!-w_Hcbe_zz!NF0R8U%}(VeVqvYM>QYBY30`UH=VhHQ|k(NpVQd1XESF?vRt
zCVerYZUpvq+!$5|b(V|Q;h#XJ2(lA}NnJ1MuXov`Sly<;h&M~-h=jz9*UBeNF5jQO
zdB_l5_0*XU_Rg4<6`x?v5WgFH)8E6RuyFaK1qEHZZZ8@!f7XoNy?uSnXgk$GPvCb?
zBx|zBCJE{m2xM0&-gSE`=N?pKU87!y(oR}aQmo~ZD^m(1`wz%^Zp`TSx9=Y}{`-$@
z_ROpzx6y+i%gMnfd-t9(vv=<~RkQ7=${ZLtsBp#7Ez_z_T)E}uZdj9MA2wX>e~X|l
z8ll_}ySbxqdEFIml&T&;E2OYtc(=Ht`7ZwXffJ;ku!77j)F%g#H-)(rx)PNxvGbF!
z*?K!YTVBPC#KzWU(jws*Hrr{NjeLb9B-AG)(67P;{c^^Qm0lY=E~npv)8^Davw2j>
z9Nuy;F)1mLeBrP`(J?X6g9elDIo=uRWedorKMO`>^zP(SKB!`T at 7@)I%ISKtbvzcy
znzdMEw-|NLjaEBnrDDxibk-DH9dEY}dhWo)NwPNkSnXMZ-Q#){u6kq%(|C$i at Q?Nn
z*t~ps;UGnqkEeC-_6i=_yZ20}-?X$UcHUGR-pY3pIl6OM>ov%27MG_yF!Q?}Ny+_Y
zCZ|l1KA7Asw6HiTda|<bQuprZ=`Ks2>6S~-Zc|!r^Bh0I07N*>A<s>01moJw_k%XP
zScQ?`@F2nC=Bu!ZmfQGK3R|GUpic2!l2_MRh2;X?PZSoY!g>Pi9_8Cbg%v^GMv52Y
zqz8B{6fanXC4<bE!a`&i*wrxbKODq>JQqdxfCxyoAoV~Gx~AVxvs(>a&>BuQc?Q23
z9*ExASS4*d^V3haZk<8P&K*0Az0Taa)!4X5YW(C3(rv8bmw>BSQH9>Bx<mG~k^JCm
zy0irD94Bz5R8WQ2+#$1=sO28SQ**&~Qn)$U8NGD#V%$u=^9+eoI6io3P(`;Xou}~=
z!wuG6F%f*v at Ypb4H><(jJI)mAr}GYr?HLl3!u8Y{_1;$S?MXMz5$}HTq;Gn<{9iuR
zoSsZ?I7yECZYCj!;bzhm`^}^TB<}$mZcCPTowLD}=GeS2o!+E3k=@b#I|slO+Z=Xo
z%+Gt?m2Sl!?X?OajPb!<>*JBn(aEQ3s{EgQc=f9R=w7^(NRrUPc<ET+E34)|6O11J
z^b$%yZk0Y=5<7(@1Xdz96xXM}wCmveH-D_`6qsyu&kd^l>0djcGZDBDX at T2l@idFV
z!0wW5$*DF!vR#VaU`sX8BawNXV6r9m;EeQKRjfmP!Sv)SayTXL2kpz3tn1|UT{or8
zkFH;_`TcF%(3<S4NVr)e)l26R9z<PG?&f91kEImgwc84QI)?J41K+2NEvYFecx2z^
zt+~P5hJD3P*s;FLcw~I>CF!5HrG?VBTOQtqUPH6?o^_N;EiXA9=VQ at 4lq0<=eJ0t$
zrD1sH5Y+GPpVHwKq&*TFy9;&OkM8$o0;iN}1M`A*A0h9One24=FoM_l5Z|E(V<VlN
zi7a<DhATS;khu*b|Dz*v?fEjJ_q|WNrQh#V*3_(>Yb+~$^M&EVY|Y*IE~bdXpN<s8
z>%09>XXLkd+0sYmiQ~q<cVOK3G%wtvDmuH|FQCfS_vn|M17oE3x8 at J%o4t67y~@+m
zmN{OhtI90==5kO_G8(aa=&-y2t7i1}lKakj=__F_JqssV_HTM)xDjl|NZ08nlQsHa
zGGrYzS)Fe~WUao at 5ZD=PW&XGo70<0cer)k;75#E5z(fXRjU8nl6fC`5ku`I6D%i!W
zQloSO`FhvAkMdB$g*xv$cl80?iD^tK@@aa)J9qdC(lKF{|M+FnJ1yJ?6G5-#U?ej@
zo=~t16mB!|>ZWacvfkvUbZdHkG78 at 3k18L@KQv=smc=;x6 at TgFMg9iU!^?Ju%@cQ3
zIZ9^CnvyxS-$=)YRk-Sb{+Xuyh69d$#0CdJJQD-{!5!j-0J0{FV=HKrlW;1DM__CV
zbw<Wr0o0?0(~SwOYzGPx(#JgYK;@H9RzA?HsA$2EA at 8D_lCSjX%5%?zhdt!jLVu5<
z`8WpOlWrV4hWy`?(6nc#RsO9~+E*#;UGx0oT|<kT!i0Y|_j#OL4;8AXH%*o6<9B|e
zZY#*vh3m;ZoSlojbv|ApLU?z7gNLYdvxL-}Lp$?=$=59ibLCMGoJ0-}3bRFY9Ukmn
z>}f3a(euTgBg8<zVxQpw5hH?o*t$g-&RstVLoISJ85zLBzng~Z=WZ&~5->uMhr5Q)
z0+WogXGuUIn%#@|aGvgfMx168*;h;5)+iuc7{B+;OC=@JwURGlPK~%-QsSt^y>g!|
zk$x!I+7|}BzoSk$Qcg||+9iF2Y*Gna9nINQNkK>1-s838T?Vq3xjZi at uP3B?(Z^|?
z?aYLGd0ojysJ~Lc59byLk2 at +17TrLeJgdaqVm9yDQTlu}|6G!;3+ym|`|0ypU)NFk
z0 at hD;kgn^j@?S~QyR^$cx1)5 at XR`cjXnJtF`71h1U!c-&H=WTh>M%V>;jhCazSr`F
zwmXQsqstP~pj{2h_Hf6d8?P5Q(F3}#%l1zouuf0Rc6W2<bs~1h9%O0*K%W>sNyzrf
zb<f4wZrS>5K3mB49^pO$7rPbfi}_-~3yp*L*)JSH_|5CG8t)zVlqR5;JdfiGE2J0E
z^B(AV=|v8qL(s6B#Xo>|LAJZjjTc1dhCEargfkNKSjP(-7k`e)1Dp%p3Q>`+NMFPk
z;cV|QZe!2{-30vveggL5#+i&Futfo8BOjzP6Wxw`qL-uzp2r*S$+6i2D0ih&Zj}u%
zKj$nrMtV_jLvF6+{tNDCoS%sY-Z0EJEzt7B7tkbWvWGMoO(NxPxd7!pLwURNNGFJd
ziKg5dfjFl`MCWd~C|gH$4!lRWjX=dZs&i6uWHbY3WEGA4-&A(u8K?TmYZk;`Rkr-h
z9~XOpzmDQkvx7K`$vs483DEhNLVN=DM|(x^TsPl{F3}*-<xhxjA at d?|Y52_WnLJ6E
zfcmhVtCd~kd}&V)*S=)CUy_9Bw16+Z<Kr_h-}Y2QM8Z>34t_0tcYe#qSGG at C;W?^k
z=DL#Nnd|V(Q7;!RUpYUvd!KUYjC5bxFXdf)`9p-pd_TWdl0Kim7zwi6$>38;z|UeB
zRS(XN!WF#0qY4fQ at MFM8)QQk3=)}Q*zfdUWMFEo`Jg<jxkdQ0>`VH-LjvM=s0i)R+
z>A`4(WNExK?g+Nm<BV5?zD at 7FBA#!IX~P?$2N++Xa3Q(*2zuGET?}`8P%kDny(jz#
z*od=A3&A%Y=lr<L>@b5D81@^TbO(Js at EhC#e|?GjC=r$L-X)%+cpt9B=nuX==_EN%
zHA%V-nr^<4l+;X*PxW(dQ0_btM*RJ~_Z;=d9I3|~_3ynW9xu3GP*9+IOa7K^+aN6z
zw*vpp(5}LLJOc~@76SF2z6bRnKwyBc!N<$f-Aym>7<n80xIi+hrZH*rjpk3tJeZN#
zng{mayW+0A5FG&R87$i`+yY^!3C!En2W3IiHd)<~L0B_u$Ux7`T*nYTs`(VZAS=Q%
zf5 at gLH-1ZVrFdN0crC13^D(o-go4aJN!_FPc=Cz_;=aL&;wAhQ#QXlx(5g8Bb>RX9
z!yPiac<u&$=JSmRgHZex87m{HuH_p36k<1?i^=xGJdAnBj0zfzCvwvS#IvVG*RQvl
zt|L=Vw$07MHjB6J|3Ua3#X0CBeh`dbecyJUL?&&?tgXUTGjDlxa5|l$9E?w;4IW}k
z8$5{WHnZh|7^JI(h8dk5<N;bFFC87l?+TtC?&LsQo`bgR3GP!4@|$n?k_Q)LOX6^(
zx0sPI_T71oy*bkH+92q!IbH3<`wjfOUd82(3~FarxGTasp3K9VUH5H7%BJOPizA4!
z0wAV>Q2-y5_~^(f%N{Hnx)L2P*jPN^ZxdD>+4<On&4sxyOp0DPIO)-T__@;3N2g7B
z>=Eh4f_1BxeE;g}be&aD9AUSvBWSP?65J&Of&{l90fL4QB)B9%aCe;v?(Xg`gF6fa
zcW3YkE&~ic*vy=q|5WXLarUn2>RRi)=<18^)%Eqa*87l=f%F at kFAG6Q$xg11n7#v3
zUS24noUw@*N1;26s~4M{jO{oQodf-F0<U!okd<lx8QIK$wh-@%hgl28^K?S2sieuM
z{g6#^9y+M&vV85`E6N8erB_Q8<Pn2+(TcG#abr$OoHK7zXFuL^8QAro|N2###~)kL
zpnfMB>FPGLfrr;K6yiu1ITi6-gdC80*jv5Tpz^-?GF6iFAM~^FD>h&L;p5 at S#LzAA
zix}GbQWt4)t8)yNHJVRo{%YdyIdLckL*k=Mxibd=vSF7yN(0##m%t-;v8TpAS&KNM
zrTtu<qP6C5dbXd!3u*%;vUz at kt_T9uI9B~dsBwWPul=ce6(F>!oR+Lm=QXDvXSU06
zU$c*~pWD>ATIHjho5hA1)3PurQ$Ap>2JBFQ%?R9jWpI2Ow$mp#BypH^B at lu25S_Ys
z9^L-+hvDXOxA?|Z0Q3ehriwN%lDGO{S^m<h)pwiM3V$N^_xslP-wBWEcD<AAjD+-2
zkVA2Pfh7V4{qL+%oiRCVHN(xHOT7-)2<F6a1J2hIKWjMiso+Y`(yB9U2r<!I9%K{y
zX*4kQ`CZVc(&e(G7hP=n&DBeH+!Kb9W17u%mBBE0MsXh5anIZ?d<>s>OeJqJF7NiS
z(5#FLy_4<i2S3qT%gz}$d-Z&0ZkB1+30qu0Uo3&uw at jP(d`D;~dY$-S#%nvM&S$iw
zlgEC`h)5NEoj7>9ZM<}|HaNpnzlPaz<sT>*Lz}{Mc6#{ymxPA at 6sV^(a~ylb*D=&!
z6iQ7Lq+*x$V_mS**>w4gx>wnJR{JFmNihf5*|3e at Ue4WH-Nf2g)>Bnu|Mw5DeffEv
zcpEv%iyJ;q-2C%iZai`07}YnOMmNfS%NS+Eo7vA@^9 at qTb9-FLnb#BwByd(NFBSXR
zGCu?ezeQ}gcG4SH<YKgOkhc41Wp3RfgQW+QHB%+*Pu?|XYW=oYeQoe537;V*GG&HL
zlkG*ERqzd2*5^)U1AmEy9J`B~3&h_#P>tSSQ7=uZwMRcOFQ2wgz`Z>#_w&tXNP*%|
zybF<kPwiCDvyr77-?#xe^QT{+apkC$u6IVGlKx~uLQ3i<Mu#80VL_&E(9cFQ?kAdk
zR*SZGu&q&4r|*X2v9-P33CTq`(g8ZzV|0(Zg2&(qCrhew4PMe$M$e&tdq0~$j5*;p
z7Fc`igtT#aGfXGG$dV06qGHxjbR4?!e^U3)VowrhJv#`K14(bV?!R{|-H>@|yUTy&
zl`e4 at Mql*0&3Y$)yS)`RZ5A8r>%Do{+bFGz`KRHj<eR7ZE%v*mr*Vt$gq#)s_7NTk
zR$iB!FfNm$2l+bHI>Ru3F9ORT&?duZn at EvZ9b+Sei8_^rq^0n^Wdn0=Q at iRt4L9VD
z1g+%ux|_(4Vcl1C-`Gtuw+Q^?uwmELjJd;YYZ<QiZ(0|D$`{jIV3%})K7H7b>7Iq(
z*FM~RufEJ2{`A$e`E{%>G!X!rrD41YXqOSARGq{1VLCVuwtKuinKjG$Tp%12{A7mA
zdInoqHf%}t!vmwS(Fap-Sd*oQo{=^yXL8D-Vha(?AMa!LgSc&4Jq_*9l>9d~iweqr
zPYF-kf#99pTPMkx<d_Gc(5q8X$+A#cuE4SFh~bTAVbrQ4Iex|FQo7~a$1@^HS)xf5
zSzk>w4Q=0=#0#{#OHK%OUkQ87Do?Z8Vg%=YqJ2Y?l0ihH*KPxul?jb=B)|UHX|lWO
zz`fdJv%Km6GH}uv<%H+z8*KoGVo<v~FUa8IoVkr9oxT%A7Y2{?FNZP5W!|R><mC{I
zX;UY-(CXE7erjK;wPk4w<v_B2A|2|!FrZI}L=&X5UVF5{$BUVF(=;j_+Q66%D{qqu
zPlc5;I1uq5W$F{3_Bc_<&3n=&Q=S4ywzwjMp6)=&+!ODa+1l>0#AB3s8``p6*-Kuz
z*VDhI^o#bY2xh_tTl&>cxz0TC_V%0!7QR^;LN at K<$kKmh!gKi2mb#RVAxBG3)GB(|
zEClYI6__iNE4<<KC0YGW>^9Fd&a?eIQN?7mM8yEVC2ad6^6-Jg?4Jpy?awDdS(!a5
z`=rkA+gRJcPGW6Bt%%mxHoP@~Q)2 at Xe2K?z9<Kv!%jnppO{bq*(&|Of%1`B`&cF_E
zM1#AfAv2uwQR}w at 1X)7-auRzl_w6iyPj_Y+6gq`q9n2T9t>HspZ4+1C;s$tG++C#j
z81R>nT at K$ZqI~DpQ!L2(7Ln78W7nISmchiw&~LlCFJu}fUr~lmTirYeJlcmq$Bt1q
zy0`rrD@)tFkRFOWmY3#O&%H`0r9i|6p-v1}qWD2M5pTccmp<zhimJxx6zZAEhrfHI
z?xC7#dA)%X5Zp85oU$X{e;oidyPXhKzM$T^Z+MV)mrPoZH9>4IA<f(+qt~a*5qL{T
z6L)adI>-b8TSCgYqd8vR>fibipBhJ{?)oJ6x<9uS3Ouo>ZFzbl7}z!TgY}7fK(B;J
z?bOp7k-%(=TIDAl{XZl>EKNOmNbd!h)=ECP!PY$Ra9npzIe@=>wW*!-b2za#>deNh
zRtgI*82Swh&!YC-ZL~?PCsxBBP;xIXc at _8L&9B<0_=4mBY`!H&toMOX-rp*}VTTrq
zU3AheQ=<sHWk1di<B`*UcbIsLvT{cYxuaioKu1mywGTo|$e-?L+79&Zb>R3ZSXlYw
z1(I>~P5a0xy!JuP9Ucegk;se-`=a<%4(+IswvhJ9@=8^Zr5AIp;0c=ibxOE8?>F_l
zy_KpqQn8*x92C?blIHB*`0!B(LORieLWkOnp{Fi9iiE_=)$h2nd|4jclEO<e5~SmS
z!jy;Z*Q3cmkB<7fo|B^<fAp!=Z%-G03KY<SD=O?Af8nz`t<gjvXjt-~cFe9r@&MN*
zkpcyUL5z-e(O>AdxMxx94`_j0Mh~IOZSxDLZ8sIoPeBJ~wPB?8g!!irnFE*F8Gugb
z&p2(*z?hiQ3ZGmc{^plG3KS1^_ed}bZR~;s-D0Cv)ko0W>BYdb301 at gB7U(80ml;B
z114yQj(go?>R`Ls1^uJl>rUl+-0rg%sPa9L36~vm*qffpr1P~ATUp+kB*02=z$PBZ
zGN(^+K=Si>K(Vl&Ac7)X&zAYVXq%*vjl64uPTD~kEZC+92E6^rY{zPBZ7XN`&L~G)
z3Iu%TWG{~Pi|_wL at Nz9Dl;^k0>73<kHW<wWpYUi$7jgylqgCAN)flz}6`Zyx|5jsf
zxUS4vuGB_LHdc>BJG*{ih8@>|xnv-7c at WOO!o9f?9$*Hi_9)W$vwen4aE-!N+&cl0
zxzqNN_2iH9{5#tTgAe>rt+`sTa>ie%tBlHapuuc^-eB$me}1NNM$Ia+(mI3uG@*nD
z?D1J8(XFgxM6}3i%RnXLwoEyrRwMB(wUgpD$a3~}wZ;mt!XK$jNn57aw{0*xt*%13
za*#0CRbIqGg_KlJ(9`pjd}r*S=g`y{+)cGt%$AyyW4DRT<A4L9*)qbD{d4}$`-$(&
z6pTJJTJkDsn at i`j$ncZc0y at CeoAK_`%Z(=P;Xh=}KUK3D<D~tgW*E6*Sbr(1mPI0f
z7~w8cc`CE``$Kg|$>$OQ>}ln9zbA{|LV#!?9Isd{PKTFdqv?6$I|P}sZGgVzP(jVs
z0 at faEh9}L4b9C6_=DEdRG{w8YbUxoHK8qrX3;C|Sus<`9i_mu{C|UB0m(T<dHSF(Y
z&}D`MUpGStANU)A$y`&#mchbaN<59?8{^&w>lFdIkrjc48P{W?+e$O4WF!Gx*{Ui5
zNw7}$^6Uwz;*Ybgj7iqTCMAvhlfCl7a at EGfA(m*wb6_gh<v!=hMQIw4A=MYlPzDbq
z#+{+q_B?-$pgqpqF!ljDS69JD at DYR)qQD<$@>zddexW^1prFf1hsuCgVt0J<o#1aF
z%7SmP^s?P*$8La|YuE$~q+R$5Ajlr?E&xh(kM0I!=Mw#Gdh~sv_x_~7r7`NQLZ^SH
zc*O%1 at 2m)MwLt_hZ#Gk9Q4pOc8(kPSTrJs{weV0uG at J`AT8&wMW_TFt_fRy3O{jo&
zM5$L?4m1wV)zHP@*{60df>>Mx$sra_$bZ}{1!xxSK(s#(%Ix%M{al8C!Cju&#ZfS<
zRNxrcRr=xGds^4OPa>9Dh=OT^rytjhu8FRNdr%4$kMfSMmuRm+iqpYWC0 at 5<KE<ui
z)sH3EZhpVsca9`N?%NDAA_Mi(GUYtX1{+BBr`$H%6WYAgCEwAf6VVeL#7FxMH+bLR
zHqPFIz2At>?&wTrW at Oah$<tYnE_1osq3p$s*cWWUN|pH0tr4k$%1uukP=w((#VR6}
z<!APD*XG@!re1t{UT at lu(9EGC%j~b3{Vzg0t9m2^t+}tYX~r_85 at 0Hw<>!T=Wz5o$
zl0Ep@?A!9a3Jyg9oR0eCI_mS1y%Ly$aC>7pRGEGe!R_DL#7)e at -z>ZLP3#kh1V{bq
zFJo)YJdu8zD_0_HY`5H<KP9tYWwWAndF`X+jlZCBD{=SLRfO+3mq$iylYkV8dF)_O
zi*3Z2c0Zdu4c}wlfq6lPPD!tx8TSpRuE{#RqOx_0!VWDo4-v!C)HIvf)TCS_l**y|
z2eR;1f?32mWnRG{4kTn_^EYy1adENHk*IW at 8MiW(`K==MQ>ywWbuGgSREyDU%4hK_
zMa)lLnXpk+D}O^Ig(gzMTp6UDO;jSbMQc@<O^Osa<Ld4b`&pX8Wusn?FyK8Ycxing
zr?RE48xh!acC8i7IM7QerJJLk7zWf&xUwyfd%@V{`hn#a?ol%{vAUEq<L4LOj5CIh
zDIU2Xy2A9gufR4;fK)If-NByJ%($ZD at Gwzs&%+D7N44<Swcwk&hfTqif0=dq5si^=
zYR=HewIfpROKUTG#Z2oj9Pr}{76RcB5ZqbY>r|QXHvu3u1SjsB2RuQ~l)=2wqL(L1
z8OoBs{is_i&*>_Ady_vHU{r63WGlvFrw4JWG)z<eM7mrA0IC!riNv9};TV<F6d9q)
z=q=FL66MG{m0CBFB~h&9wfGo(Vjb3C0jp^!cE;Kr@(*^*ekPh;!6t|=nl-)K&A`Iw
zS at tsms%fc-vUE0Tn^{@j_NSDd9artlFN+pD<uAEk&wM9jnw_bszaxF08cBT`CRFhG
z54H-$v>IWb#`*l9z>Atn4yjPBuAnza%U|(_e@|l0znu at wIP!PixnZWx&ZK9#x-!(b
z>SQFw)HYj549}&+G#CKh>eWC8a27!wNn=wqpNdb1c0HZ9H850!r<2&T%1c_gb{So7
zeG=$zc{APF$O;2P3i2l$Uh)GnP5C#}CT#WI6Y&Ood}%|mk{rr0`T?bJo9FcUlk-Pb
z-!0FW{N at DggEK^}WWq|ad`V!7kmQ%RB5}{q#?busBi(p;<)Ly54<+niJeyzs1~?*P
z10)1LmScddzihfOOZ){6y#w-no^tmPi7pNge)&LCdCu55T$iy+57)80>{(h{C%OK#
zKa%i|`CIK$h^L<PI+&}m;E#(-5$XE2$?JWB8HLwFpUIa#m0vZPP0}X>;}c`?>1y>*
zj5Diz2xBIwj!WS%Y{oFSt1nhAVzWG}6m##6z*2VTY<C%|RHth^>JLw3on}8|xD`3)
zHmJ?d`w_U!dAp}UbGy_ZK2(bVRpESO(%zr!S}}MI)htyP29gY(7k&A;ELXL?hLN2a
z)2ZKoDBJZ9x)ag8wwIanw?;mCR{g at 0pc}4Wl#trmd3U*|;oJVhzJ2~Gc^c2sdTjU(
z^*J5z2va|!5=+VI$6nx6&}P-k)4mCekH;(!rIK}h-b0ljR5n8C9;slIN5~A)d5G6{
z9{0`DWp%(yu)c(4VT9+c&c9Z;fD{gYP*8XwD+(OWF_AGf<=vWnbvcVy{n%pV#HRR$
z0y&3m8+}5Pn(~3Zi at r&Omy?UBgt6|OIK1W46hTCmqb;NHj}PM)2#-z-L`wM3TYkC%
zgz5?jlaJ>0mthW_X(rxghrPHBTye}u(lkr>oFr?$#dh0dwncEzU)<*{1dUN5d?DQb
z%1P>yc=$;6Jqu5Dx?F=nMWi`0>WanLJ1LprC57S}^89Dd4ykr`ez~;rjyo;1Sp4{A
ze2Z7H+C^m-6MguGYW4k|J at oi*PtV_Dn~o5xE252?ve;OWZ>?08H|cFqCok}alJhDf
z?zaa_86TgRzpN*a*gKgJc;FFn)wTSE5WGOO?9n at lqd==q0nMV~T^`<U0=~uQW{|6<
z)nT_^@fi~)s!3pzbGC~*kqx`8w}qd|E+--D<L8P1hsS&4Ws0r6MjUz{qS-w^f^K4Q
z4CCjd-m>F&&s5~O3lEKb8N at lG6LaMJX59IaW89neomW?>#_GAd<FNe<eY0H~70lIS
z#>NsM#gw=QoA!5KxL;m372~mc1(uZw7;cXCo60_|KDh6g-PO$|*Z*fdQPw43xF)an
zbv_~m^~R7{yM8*P#xZAMo5~KiusEo;v9pP*y%B`R*j#QJ{Bo0q$hC-6 at 3)q3l--?c
z{}TtR*biYb3YmXx@>LH0?YxHQT1I|!3TSS6Fy?!(dD5xDODj+5&%+ici77__e1!CW
zb(?Y7T{;iB&8lIgdGDm)H9`MHJ~X4OyAI$nksv<%bJJ%{N8i|3|6f<jWuWK-GO at _P
zCQi6ZZ0EY9&}^~^^97fOYY@*Fh$@r+llIP5w~dugyVB|+($`BVVKfTKX3SlWT8|w!
zV!L at 6tkdBz{RWe-f+$>!Qc^z9qqE%<n=%SHQbg>XJB^7_j#16>G$>IV4M4uh7>U4T
zrixc|XCx-*jp*!+UN$MX8YIkP>-w~pUnCJk?+rf0G62PeOB>_V1xn8Qi+y8u#(YWa
z7KBr624oxztTMu_q3grE+hsib`lJCfubRf>bu!tPw7*KOfbcE7@;Lf at d+c}aPm^@5
zz2eg7h{HGU$69el>B*uHOy0Uu6*ATg&WUnEkEA!H5|CjttzY>QDr!B?iql7eznQtL
zl$|>LRkRd-Gtww*;ctS8m-He)DoVgxH at 14{HGhdlNtbBY<*Ewbh?Sj*rF5*^w9fjJ
z|7mev9kA;n=c^8LM$_I^M*D~c?NpwRDF5R2V1$4T`&-C at idM6`r2rZ0lpDp!8Yzam
zKFynpet*mTmC02rM=JSEut<q(P^E^`a#A{0o%qL{EIkdLJ1v)g6Pe7)f5UncX{N+X
zoZ7ZASv0m4bxAEaU{5(Wo~+E4;b8spJS>y&Q&O^4E at Iw)N%Z|`*ze+JZnY5iEP848
z+Jg~0?2wbF^)GTB_%d07Y0M!zYqU?nQv1Sw1Z6HnR2EY4;`EeK#Nx8Iq~2)`g+w(4
ziP|&R>Vw}$01Gp}KlhtHl_)4wbQaEF37xJ!44H3qW_g7PWUet-zU at 4tjM(VZy>Bnq
zy!XB||5_+dte4XA at yLAJzF<OUMs8k51 at _vtO|DU_fLcxV8-PA%R!~y?a&9GTVE+dW
zB0htT$X%9gu5ICDmrQ at 3duZPZ&?X1 at i{}}^_W)!8Mr~uNpxAB$vT{d2Cy at 50qh(ib
zf1&X13Uo{3VJVNXHml#Ouptp6LRq$Yo0N?*{kf9Whh~kLr{&#x6_QUR-U!igAMJ$Y
zH<z7&_0L0Z4G#m&c%H3Z7}u7>I2O at T@7%7%<2cVRH0?=tYY=aWIx&(Il#%3&BUw>P
zQaTy6Yv=wS0Cw$OVZfuKvt_A662_<A7)6S>uC@*nIlv(XsrYj*{%505Gpt{E#OOD`
z0<W$8E1Z^6bX}DsMhUK)+vE3_Mb#H<9`8gc{ii(Go%sV^=Argitr7)gzsRS94;XCe
zOJ)gk9^aPpqDTq(Cte9^wuq?~WfSQ>znZ@*3P}m=2fhHc<iK8G3D8uLk~|Cgsp8Jl
zbdK-iUhsF+#oXi%dy3qF0dZf at A3+z-Sbm5mUh?P14D(NE3yuCWYL34|rGE)4+iVXt
zUgA-<t+%azz|nu3gKcm0(l69$#^4ns6E;S$b1(3%RK>_=n;^7xtszvH=5a4~m(a=J
zk%6#}l}O_5oWKAhN(a{jgTDVs0VZI3L`-SKU(T;};2jp$0q35SpJ&kk`&&2dujZ`p
zQ{!=GzmQg at BQHj>aqAbdsvf_+c<k&IUH?JTeBGV8d~7+nql);0YcbXtOBm+U_3`lp
z5F^cRP?~si5QJIw<=^__2<t5NyTyh}=ZMAHNuZ3S{dwotm72NybKuxkaaE at J4O`~f
z9uWz&8fPtC;AR3_x(Mp}S#%eCH5L(iD-nZ^Z9_bXtyrN%A<{E~u9RK`y?*8W?5Q+v
z03%KW4h~L!MHtSzfFGY;Dik7&o-+h7zGGLBB90=ShhbvA=3a|5<XHOla(EoEYBPyX
zytDCug2L}|z^#iL`^RotP}s2_ugjnoH at 4nt;$Ct@$G9e<C5GTe^;{>WUByk^@Vjbq
zC01qrKY)8cXHS0HzTJx(e&mVk%|6dWL#9A%ctp%k$Z1r}NQ8TdaMtne9L?lAdGCfs
zSNGdxE8C5RYC_hz`8kWE6G at VR9|-PDzuTo{w9wQZvo8l3FW(AO at B`oW;tfS|qF$rt
zM}X{99JbFtkivD2;T)WTauF6EG$cYL(yqNU?PGp?wBoiOb&3deqa$@NP*ftwy8O-4
zW*@ySW8P+T6$xljj at mVG3niwV>2j7e`wc5S=-?20EP%p at _b4+p#T;(}YZL`$5%}qL
zD({Df$#vq=)9=h7H65(3RIgX;ELAv}y)_YWz3aJNO*W8|yY+i*7|M~rPjGMMbm88^
z#~d_6&)9<#(e0xwCHooj4#H{WG(|KyR+CQs;qWQMPyiM at apcFq=>_YX`bq at ayD#5c
zr+Q=}TL0&~zb*~fTb4}mv3S*SGB}9zxsHujXvYjW{hnUof5msmnh at 5Ws{s88n4Bl}
zw&{%6OW at BFnI=9Uz{kwNi1^JSMNx}a_T=lcPtWa}D!C6Iv2?C_TWUM;9bbY>4(BoT
zo at M)Y_b~PF^|<~Jsip9IBm6AuSpe3t8o`ykLaa3nqD-{WjaL@@r5Nbf at IPI*1dx7^
z`p<h}IlWl&n$iToEX1s-y7|uK1^l}}*+{!_U^iet=Cm}}TVg~HURDYX)1 at M=NU$#d
z&`TW8UKwt^s9DVXo at pZEmC-6`ya|JNX5t88$Fe<-JH<q_t!XKY3qlMLs}W13c+O?S
zkJYwl*m<DmaESZ_AtWC38(b$op|ie7o8WP8?Ne*}?m_D$$_aJewAZ$1tBtJdvqWW9
zF14atB%_|zT-Pjrsu>&neRfo{PcWuCw7s2$DjXCY*FvgZGHr~<-lB8&<qP(=bI_p6
zLQ#r>hXpivPu^8FWgy3T;)M{(;%??r_-=D$XNA}a);G9_)(yDDrX+;ipB>3 at r;d5<
zh2YOj!D at CDUXw0r0q1h{v^P|%D}_nf+v!+!iOtOiXz|wy3wXptWlZ!Fmlm%Eo8Q(|
zE85z;TFvPHU&4}pK?N}lV31HB69aP4a{l5oQ?Dk=zatLsd0TDDUA~u}#C5wRIosyV
ze3+|pdmzq1YOWy2u31R7C(TPWs%~0`YR<IwL3xZ9tl02KjXC$8Nc8QL`wE`L+TW`$
zkU)WgXx>QJH^)2{5AWa5HAWy>S3|t|#^v|alu!-JeVL1org72~W>sk&?KgRGJlwAK
z4+m6N4;jn33X(yB{a5pLR}Oqut8)$xH)3g(31XJ;;WNzzuF_wFu4?xlC7I7@{5N{O
z{Z-7v(Rr5iwBz at Szsx@-)40adxG?m*AVM40lSXgKPZQH*Lr{{smj*smNk%F<xd%s%
zu5LPd&1Sf+#TTSq7}k$!=)8-s>0)#hNWCE&<-F1;gA}P>8!Xd=Hn2!Lj&o->Ya`oG
z+$Ku0yB5PZd-T$#-cW)0bcKGEJ>2<#FGXfSs0ju(O*0~NbMZub_)R#M*%enyjOFXw
zs-|n}c|*@_SFue0tn9D1OD|?~xAWOmAEUoTe-{(HXV0v!%1(;zdsK8=N0dSp7E%FB
z_f<yU3v16(e3DMeXuDF57_RzakJ?X)!{Q&~Zq45#ADSloW278 at ygOt5hQaZ4^tYiD
zrsJy*+nFl94aJP+eVn+u*H)|43oCKIO2d7s at u!%piTE)B!u+0G%T!YT9z8T`J}n*d
zkYntGQuHRhWjA~s{X3bCqcYh0m59`o$x1E0T})_%0gv&Qy{OR`=fR?)QvNX|A?R5R
z^lD>pc$VU2ArzC at ue2{`%L|rpcOwL2a#P2{lbb}|Hu4O3?$eC at k;lW+fH~TK1siS8
z4&EFIm3~-o<FPXU0Xi<<o}5C)7R9&(&`n5^5DdBoe4Y(2gum%0B9$ey9>Chb_T&)>
zc<R-L5Y0yH?P1=YOo7CQXBr%gHc~jfy!?EWYz^&w#2;91|3R;(n|PP1l6}g<!e?U%
z77}IC6J?J|3hdb()-~^mg75bol2Po%sBXl+0`wd8W7YWw-x<3jhA<`uL7b&nSaaZi
zodEEL|4#lB^-<Yj&$ufzn&N&6;L0-3o=z4{5LA)x#B#!&Gu{D#DyzHM`XB6Hpx6h#
ztckM^RCS-5=ST2qykiTr^zIhp?5!h_^|MGi2w8}!A1cz($Y9Z(vsLwLsJViHlp%gD
z*K-qcEp%X^cDpQ81o6 at RqPn%y`<7pzrlPAzZY2ot@!X?w3T^4?baH$Cc(nh=kc at Lm
z*B~V0$8D$)S)`}mw!+1_u*o}cI~~(|TA<4SlTqW==l4d9?8xew|L>*no{1o<-uNCP
zNqmivn>RiT?c?;HlrsKH{FmZ~Xf5>;e&-A7r(X|;M4w-c+Qz;Zu*;{&5uy1i`LS<X
zD?BuZmGE+~ii9IczZsEf07>z<Piq?-Ag0J!wRw#!!=KWLsu}!lgquOj0J3*kDYOn9
z>7R=v_3~NtQkCs)qbGjXL_SlKYn0wS(}aAWGh7u?ZRxyHvpU?*O-%tbZk*-*Ah)N9
zh}`_wdk5TT>N{{oJsyqZtRSc!q>+XluajHJcEw!^-d4;ndfa2wkGjaqgBmrFka0_@
zStjah0zV4{`8WDeYGPt+;}qtyq59lWZr`K)w!-V=LY-7KBUfA}FJyGne`%yU-8yX(
zLymO^@7ij9$w*gE<lvBtFE)7`laDRc$$i}&nVlto>VnsGNN;LqpuA&mL?Gn*>=cLA
z<&ye9?#R8^R(aMklkBS;`04`A^}G=k(s62?FY5~~tHz&^Bu8GB|2bUCWZN{0FnR_P
z{h_g`j^Bh`;W88}Uj4ji2M@?md9^ZhsQ)0Fz7hUnLHYT|`SFMGj*$4RY-QaGip?VP
z#k_NULCJ^lOJ)4A9KVp=nW<E+F3O+bA98?u>HE3B!HbHYE{1+?a}A3vTo9hO90R99
zwLZe`tQ9TdyW%4TN_Sce?Ym2KG$-EDus<r2dyPB3_#$-M6L;j!5+PZ!4Ev_T|64fX
z<q!koRhRK$_~Q!Zlu`Y$o7v-E!s<#0`yA7!IRP*0#v3S?n(C4P$9_=WkSK$Ck-T98
z at EVf7NiiuG^1ZE3HKuJk-lenP%<giYH+`S7Y|g!2XIgHvRmcVDUgOTKdz}TpI^N^l
zHlz`s>gTEh*f7F&N{$S>466=Txr{W*kGfV9MVh|)Fjm2=2y~OYM@?4LVsYKZ#cX8`
zcqafPm-efVjkljbB?;pT^G1t3IerS9%c1=bHw at mz$@Zr*N3>nd7qj`Z(Ecix_a9<k
zMNd#>yBQJ;$Hbg>UFiV5>Dk6F*)y3hP51X~?EfTGMe47)s74<9w97S*9M>Pu5RY}3
zt!;_Iyn(w)h2d&8<!WP=oxW`_cum7#l~29C`^gILLk{a7zK$sBHs8D9ctgriiUtD@
z&L-d1sN@?if-!a~E&=zWefRq}(uBxNLJ_&{9F_%NWu-uRPjJCX67?Lig#2eb^U_!+
zBR_8;V{xaK+*a(->=wn0+T~4x-+V~76HW5R8f99@^`4XA9pu#k{uL(e)10Rz&&T{H
zdMbN}|Gv(<Y^^!Gxeu!LSC!M?t5D(nc%esooz?MKUWa=>8ox_ReNS&BamIW0up3$S
zl}CmpV(U}4Q7edS6UK7uE#TW_X3RYRsf5D>&aNpRyj8}H%(qwWgI&L{Ak#C<C$DT5
z{~mg4jf8$3-~KT5tZK9t#s4Dux}kWr#ep2$pJp*`Ea;FkV1f_3Kl3&1oxQuHYximO
zTKtd_1wGs9_IpT~jG_ha6y~^?a~ez7d{rHr{fUs(+ejC88Hh-4c;CR(L1=7pbscrx
z<kz~Bo|dls%ZL&RgBG$H|Eco~EH$$XUA*FC1AXV|s;SGpu_dp}zFDI@$#1_<x-tz1
zR0-XSqUvNNQx1k+A$1Dql>e{DF%!#j|KB3WHA~vJSSsDdnB{sES_QrDD8K(ae*gT#
zIP>y$&_K|L{`+eewe5hqHB0`Y#pJ~aLw$~I<YSH2{e+O{p4*G-_vP#BsPmZ)>^1<L
zPOEK#dunP5<=*{XfV)QDDh4%|Gec|aYbtr#)`yiz#2p}$JVZdeXT+%s8Z2P?b4|qR
zbz{h;me0dBkr7&4deDa-xC~mMT>SN164e`TG+VVE@#*>$S(YlmSqLfeGkio)R6ppQ
z3<<S&d-$!^Yqy9}Vaw;@y85;C*UgvxJkjv1aw%MgQ+iQV<+R^b at KUQT#g-qLefLlz
ze8ImkM*NtIfpM at 44B3xd-Pl!Jv&zm>V-I`HuPp}fwhQ3_?5VI#bmZE;BBohj7W=3S
zz+#^-&teOC&HdizInx+DPm_jCo&Fad=%!6MVq^(JetH{9LzU}3xbSvJt?lNpr32_S
ze;c~sJXQ-iwcKr=7wefh%!e3}tE~dYuVq?}Xrj&O+)qe%oc#>Fjs(YuxZ(Fdq-7v$
z(?DOfHfX)W`fOu$ENiR1N+itt_*j{Sh4tZOC{b7-U4y{rW90Ad*zemVATy&oDz(w{
zkP4I_?3MD at -TiQenzWb{Ew0LeTJjqIo9$$$$<f7;1&%}?Y~2)12?LS-`cd^nuRF}^
zb3#uG82FQHrboUd&2}sP)P-R<cuO|n?fH%Moi~NK>O*WeHHC?pfWyhd_cXK0$<VT-
ztG%BS>Kq$(ZM3PPzvZ3avx!8Qy1A2e8_RrKkAKrl|3NW#8Ej$;V~iFVz%=BP4-a;_
zsICq at pT*%j979Qm6_d4<tRN5jvAfk;sZiom_{w8hAJ1~@>e2n_ at JaRLI#t?_uEIXk
z^}tyC$Z3J;RuzgH2i^B?$Dl8p4>^CSKvQ_bIsy=fNrp{v-G(LlMP^Y(gb+>l23c<(
zw(c3hZkLv{F7czAIrF5e1hJ1Y&>xR}Lgc{Z1xwQWErF@!dwGG%Z*zq$Y2xAy_*0#;
zV_NWjC8vx^9i+Y(`|3~Os}5r)tLCo;>q-TBRk~J(BVS>&`%#Kr9&at=rhvc0Ast4M
zMzOM>6IvTTr~)m2 at 3l1I_vaZmnOw@w)pSpIAMu<6fhVF;#4b>pI{$_ww>@Kuqn;K<
zd9N4;%S;|0P6{3Da at 1d?hiz^T_GLreqetJbLB`REF_D6c<>{?RxZGCqkg4;o_-)5<
zW$ADwxl;NN(Fz at kVr3-%dqeSPhX;X6z3x$`SaZ%m#w>7W-gIg~RPU~^@B*pgfM}#c
z+e>XH5Hn3}tlnMhCkLmbqHab)NhsAzYbIi?yO;C#WnGiv<=k~s$;retQ?RwVB_q7f
zWI=hOo|0qfe<?16G_%p!$ED?O0~h+_qPs4ZW;OJ#ANZUn5EcjbkcBFskFEmbTkoqf
z9b-_-a^gy^^2yZoBFexT$kim7`k%D;W?%imr5xEd{~tM+^Z&`oVrVAOP?KvxP8rs1
zDdQ9HoNpR{71_SF>t at VNk~Pm`5mE{VrGoeDb?Joi?BX`t&=zx3lhY8mS_^I0&1ux>
z-fh=jn^9vIZ{yEu&1P;RweeH5wX;hgghY&YCQOM*R|em!lXT|e>g6-{k!gIS`h)pI
z7k7_G!v1`a`C>AhFp`EOd#U8K7?n at Q?1AzsYZ~G)!~+1gH<uz$8fI6RCDP8$X(a6k
zsn3hhAiJ!&6<6esFP4oBH(hNug4ZvqY)?I%`;+vX9x@>7E}+dX!-}=J0I=y;Kt1`8
zJg1(YF!M_hR86!x-)UW2w^xfyCEOcBlorT#vM$eP0IKrko<0J0A`6~c$$39ktCGFx
z-YDzd&P~?>!mfr+?Q3D((|!NetK_zRAM{XMoeRj0UqVeRUltarBEPwqs_nv?WALXs
z)W)->B5?bH at 0*tzt84s!ru at v#+D&I0BC(}=E1qW4kbBl)(AJ$_{ecJ6-j#jQDj#C^
zn%BCF!!YobYzQH!_y`)xv|FxJr2FaBc#cBU#m9R_rIne(pRS4FgmYZuv-=X at TRX|<
zmId3(&*-HFPM`=aUn>Y1#MkAu8pB75U$f9^F(h_0U?|eoxmog<=H8s>ZFtrw)`xm=
zKd(vTr6u1qzVI!&FvqXPBe+Ni_a3(q5#F%z1M}ZEiSkdUz-&%FYwG&E*gT~2=S^)7
zEfagoc`HX%^HAW1jPk!ROc>RKYG=|$htKXI%gMIHhC0|m=po$0HWjF&3!1+%XlzQZ
zUfFw(PTTn7Q0(GcU)^;gqpN)Efj%W?fjfNt#s at l?=KP+Msz2UjNZ>;BGI6tx{-$i-
z$@EdJSXnL&WTt8H#|K?Q;vhji>r+_EzKSaQHg%~a*%lgF{;p1F at c1Y9-b&(JraA0t
zn(nVc`N9{vpaEGH0hg%Swwf$FNyLHpVkOlhpsvjTN_03kv@!+w<IeIZt9cmpcQIuk
zxeci5XJuk3wpt1_Zc?&cKkT+uY0gamlU6Mfg7zxS0p^QG1K(=Rl52byl5$%zg4HLa
zyB0W-3P_X$@QVMFmYe5mHhinlefLkcCjBqDIKyf~t+dk2MoMl$63^QIsd*z)8iVdc
zLje=V%~fq!?R at Rt;m8B!O11tTkXE<w;*AYnA+zPW#*Icyr5&)geXZu<Ugv}rMD0-x
zn6~U(fcgRxSxEE)Yp=b;c|O9Vx?(RSPHqN;rhPB|PE5aaDJ+sHLfdZ<r1$yi<s+Wl
zW1V{8YYotrdU+&HB`AD6={EWeB0GQu-+L3APnmkzT at q2U-AA4`^{E?Gz&^C=*}5Iq
zka4PT$`M2&lh%{#CY^Ubb*$eySKG<$Iz#%s?h^+|o1&@oG>&TuDaq~lO{ZLfaN2x=
z)6W;ruTOOw+kaMMa7bUdr2V+;4F$ui0FAURdZlhz5pjID^4D{M at OZ#Y9^J%Xnh=$W
z at k7~N6(lLqzS)~jf2gS3W_Dhzq9w|Su{uJ?t<{A0Bar9Xdv5g-asAA<%h4Fr4kClW
z7Ot*e`E~IdgK|KSo at 1{HS9g4>sao4;X2yW*FS04d6ZL)dZnb~#dw84Tk!+RM<>!NZ
zH*)R}-G58#B(@Yq4a;b~ng%&en)*VKl;ufk$oO%2^G!{xtss+aN at djEVwOk@_4YC;
zpM$_FJ3+`U<M!z&OHDanblu)QrysPz>0k<ezq<RTA4m>vt7r>|GBzCJpleMb?|V-r
zGU(MUZ)#_7=;0RgT>^g8p>?MpJ(dGs_dNUvhg7+ra&LgrOQ4{UkowX~`L-c1C`|=0
zw@@(%;AP_JehJ$ks4%V~KWr4H5$dF$-xbV?7so;#vgDKYO<h+K3p!5cLSJXJ4CtH>
zN`kuBu6j8)^J|L0==F!1Y4&#h&#ADYx^{(lV~<;9%xfaCyrN%b2C3}oOd&zqlp#Os
zI=Coj&PBdA`O?qUwxeowqkovzR=Ost;*L#o(l~cG at NzWNSRJi2qE0!{n=V}ti69$Y
zm&B<jR6^5wGQqc$)t!+8HIh^wiJ&{E6zonXbGsMDRtd0InY&y4*YpmK65MHr*BQ!#
zz_AvFrWD%OnGVglC<1XWm_s~h%rHmiddztPuclP>qNTddPy2ez38)^bcfUUc`d8o1
zd^Mn#Igz%uvyws69M7sg0SJ0mm8M*he#K-yanHK-ZA2}wLqZVUenakvv>E7ZyV8(v
zzG^@Lm{M$T>3YLwFveq}EkiT~eXI|rEL^QieLon592GOCrV-nFulgmVU9yFs#aOGn
zq8p{z_1N5qvh|Asd?PUtR-c`qV~${OY7?8k;Ilq#d0eEt|LlGFcCgiGUD^8AUQqDW
zNZT*Ca#y0*f?dM;UKTOzekFPHesrbQd8|HI&QG~$=2v)^mAMephk+^X55w(68S5Zp
zYxS}A1!QI0hR3o2kguKt-d^8*t2G4+ckj!95C5 at QcgK(y{VsiQj<|v~dW7g!(%~pf
zgS at yL657PiYI0VQ@S|l=thWkFE3_vI1Jz_hywUg>deZB0opf1|z2EsjAOiO*Y}Vku
zp6lf9oaauoGy8HJm%iLPvoj-~DeMZ`Y_6|2ygqi|KbmIXqZegl<mYdY36&$@qa!cN
zrRuh$`(bxTt|R~tjv=%cmY^{u#OU{OyF!!^vmOncPib;vtoP0M`2<->Wxb;;WkW|7
z#1!dSIas`9wHOpk|B$a(bt<p``fha;7CSZmMI~BMF<en)VmvC=7`$<r9oVsMFCW6B
zj*dwnPWdCMg5K at -owN9&#pgxP3}48Fd at Yjwl|H{HzRD>MhB(|Di!|yJjs0DXuwSh!
zo&CQ1<H23!=eo!BzX8f>ak($KlI<`<c)u3(+PSyMeiLV^>_AqfrL<6^K4Yn-j_+R+
zh^J(-ZDyvhsOZNf$`2Bg4&Tl4X1-xI;f7oO#a9F^O5F{~3E;St3=Nr;3|Cr#EuA|b
zBjMtbva>qBcCs9tB}&3!k0TM&mnv62ZmV~pCFVsjN`{%%d|2cjcCkmx`vS?*ukrVO
zzEHy%v!8(|AToe``X>!vLYH{4^oArmd}DS`$k?a4H196)lA$K2Eyf!ym7w*XSEm9N
zcX5>`O+QP{1EHeSWbh^)EkK~TL5H0GIe>>@JMeL^az^bZVdXDh+vy6NOz?~57N-(@
zD)LQ&0Ga1=(MRzFTLpYJCV7CTz^@{UZQaw7NXH4OxlY6UaEfpnl4^);C0p~tPOeqv
z6e-V#qp1?zN%98cs*f$m!t2j+?XaYw3ObtjR39Qbdxz8(?_nH}xcsQN*SsPd_{p)A
zAxo_99dox5KPuB!v|;@fGJs`=MR^=AnRA~5=-%n}18RuyyR+L36{qXoH`+$6My!A@
zD$>;+#FcOWcEcAUUEWlsTib+Sf!nuU3u<ipEUvZyznYdC8WijGSF7tr<%mUK<NB-1
z0$4bnq*hLAxiwQr)nvybmc*($U<cI5J1>4Zb!;(R9xu;&NpQH#mg6yLgJk^3T~|{P
z^3KvwM_v8fM_>%}%a~oZsGxwe;Xm&Q3glVxBEx;K$k@;lo&gIJJGO0(AwTdNh)aVL
zCQqK&E{C<5Pb^WIABf^ib$rmSXaOJ`BkuMd(hg+%5FWKQl5f*eetH5a;43c%6QyV;
z8oo at h#E%<eM>P}D*=GvcA8Qa$z2VfE?M6c25(cOq$JJvBk_#+O?kv>t2*i3Gr?s&V
zv7*(oR&ZjuQa5Lpk`8d$BO^;n8mGB9t0KIv-UoYm+Q!nJz~(DgYt>3)3RCQDrvJ`r
zs1hEm)_H7)5WEQCde=aSurt(_?3xUWjqTklH}odRFy{B+6O5(c&x0cUC<n*d8%sJ$
zjT;;AY#fp1Y{^Ftn{#GN9Agj8Knoo$K4c(6c^TcNLmd|{P`}sh0#$ZrnxlU<syu~)
zMU5e+a<Ea;Act0K{fAc6NN`OvK~3e<9w@#0DEq!fyrv3{I2BzUPRqxw(oR+rS$E$M
z7|NGaiLdSZMtVmawhiy9suH{-*q~9ZR2==2G*Mro*^RvEbc)HpZ*k+)j$JZ1wS9nG
z+$|8FJo`iAU*WBgv;g)#IG at X*JDczVDVDU`_<U0pUwz<NuXO47(6i8HIP8kR$MVK1
zCe?(<ZuCy)0NvD*p#YVNS&(hwa=u^U;E5Qy7 at ugP!&;Fa_5*~5O27)*tymbdq2+b#
zwt9Ro?zz4rG~3jhlS at 2dOZK`zI!ZR#(yR=>k4MUC{af$bisjpVjT6w61qEA8vqKwK
zYy<kVy(p@(<GA-!>||fFbJI5UHT5ea&W+k&x-hpDLfP-iAO4YY&Sz}jW~(6!vXPIk
zIwdiFc550LcwT!>A~sUTT5Qx+zVlV+N<WjX2*wD(2n`Af3JD4h3Y86#4Ur9&)s7 at 0
zs0&$=K7RYO^bt#;?s{nKsrbWslemsSHa*vM6?fyt$&oXj&=!Z&qOg9JI0JpYp7alC
zM`;CVOKBZxPia{bGZRe{SCcOWzC|~RPu41|>~nfp!pJ^Wl1~ssC>Rfe$bM~fWgR9g
zgztg$hp)bX9tHU7?RC60R)3658<n at 13B_2w)DqeTjP*TV^{9s?ynMY at AJ4Nha@OCP
z_xCtTevm(j5_s)#;n7H;y3M_1#ge17Wrb`x$4|K|s8WgbnUpUgPxkSMbunB#=YN#l
z_;gXqc|pC#gtT*ybY9^gWZh!^v8$qI?mZy<IVurI%X7l$>K(k~8o;vR8u4rC5!*A^
zSoLHASo&^ve%n0Zb5W6)2D^|Q+WWWz9<z{9t&d>sqO~mrX0AKxorI`@vMzvy+8lbi
zu3LGjEHf#V at _fo6oPD&OE+<vGJj=R^qbddckmkz}W5w{DN8*mac1K0v;)v4n+eNll
zFsA2y^2Zd!5+9uH0H5mC<JUXAZd$`hKJr`{krcHz<5jr#>}mFX!70prK_~!x|KK@!
z4j0EtYa^pSe8XXlc{#=Z+1xRVub+EZ^4;*Kg^S0Y!cvs+g6I_-uCX;Mz!Ei@?!HSo
zWKdl~dFomwRS8UnG9X4io8^V!?-+Mb9mOmEa<zpPDL%y9xImN$n=YQ!EwhVMK$T^a
zYmb!9n`&NbbnOPHJhG^)lB`J4aZ;24pI7m^lj&O49bfDg2+;|kgG5iTjwuD+G4Bf{
zzXN|QCfvyVd(jN^^}YW0GYjRNx!)ySd#R>PP#l07xZVC#IDXlU&T_K at YUJeZnR45w
zEAlt|Lsa7(g_(xxnZ~Md3u~9nOv*M*Cltqg7*YCtCs>?7E{TcEPN88>y~*4CrIpNM
z&F)B%hFkS)#hUitc6H_QSN|If$I`t`%++k`w-KsM;FInjXw7JM<_cEoz6Hw%`5xPt
zP)A?g=;lStj5eQoZfZMtiQI#LmW<Qp%OQj7Amq~nOB%w#oX<uMZw@^T2}1S}0M75f
zk-y$p!gnMrax3pmhuo|APAKEK=?1j*Z5_(<Z)6u%ZmJq(>>d`rjlqw;uD6t$!VUiF
zdf2S8Eo1;}_FoMOJBaPIeVx;l+z~bs|2eTIZ1`*S#d<1Dsb&JF at xW0xr~Y;AkRugf
z`E0KGQ2AUOrTg>VDouP4nOO1(gz6!d{ME0IE_u7seRWXf2b$t>f99!?+aRdX*7Gux
zw`8>;j;?UA=fN#TLl``LUqU&2jh&6XAWaft35|rJpFMJ%@`;kZ3T3BvI_vT4p&t^y
z=#T0nsO<|Yr718~d&5lH_ZNZ<+(v+(SumV5<OpkGju{}hUq!Z!(&3PxGo4y#nY)KH
z$!H=g@=O`(7CD=hjzKm}CweFq{p`YigH>*k0Eb2Zx_se|1F~MVaF=}wn47B*JLhR`
ze{V&XkBoDF;*Jd?x0LkMA7VNKXPfSYO=^g%y4F}vUw+=VU07U6a({V3yJE1gTK`30
z-f5l}<Uq48&XXeH^ag4KxgV-1&Ds|>Cp_|U^sC%2&Y=>rOK;$HsIg%&4qFDU9^KXK
zXHD{igGAuJP7NWWkEr?euMnE_KJ)hi!&DYqFmgb&+{Fo#YFE6T(CYg5MMp<dKm6C5
zQ|kS2+&J^Wyu#a$2G{cfedTMqMv~8Bd*PqJr&mM0h^IT2cjh!CU|V&BUP_yOrbOEm
zjOutISoOJlc*d}ieIt_UxRc69Wz`mQ{3%Hhmt-gxCVRFBT2&e7Hh51``#l&2Xp)>i
z`0Zxh2y_sb2gT`t at xV_OM1Om4p{ppjIC at q0I(uq1mbUjJ(Lf5a^yiQX9z)Zsj~>*h
zOX?3uQcu4aualp&jWrbw2vPJR<l+j8VxFNK6EcN>?UgpwJdoUyrC)OFg!qCbz at Uc9
zdtbqQr#vP)ijBvPuQwBWNiElV^%K9Lau+b|(@*10`*`ysWFMR3K+(gHmGKjP9|we(
z9`;D!{&zB14ZAz*z0|3jGuQ^_qgVByC}CNtUDLUCE9KtsH=^b4-u>YDq|$L8Q?8S-
zHPwrSj}0X^^Yqv623$amS{m8aEENsAHWy9(F5s&GaRQ?TD_CWYi3QQE057aLSg&T2
z*wfciy6&jF_a>xWhTbT;j^D9m at pAH><zoD9vjdJI%;h^f+W at -Jv<AbVgLG3FF59}v
zLk72t*k_G&&e|&_Ws at sLJ~nw|E(mOonE7w63pYN8*{Q?TtLNzNS3pW*+P8u&KP at QT
z1%3n4vO4-iHP$yR$8>n_#mgym>9nIc1b(-O|DYjYCg~uvqT5;f;x>-GJumF9FAOE6
zO!1}ENu+ at w0PFQBcRD@F9bb2OZv+v@^u~Rwj_K29Tsm+KQke9@@GS*^yV4f+G7-+R
zNDT46Ha<#I*KT?LT_pP^uM~KV(Gziaw3=nH>wK-UvT7;$oXhio9Wf1fwsw?HvV!c<
z{86NSx-Z-kh{Dgy-OqwKJ at HD$lnTOC%egs{`y0ikdif9!5R7}~`qVw$yUXgx>nvkU
z@~{egk at y5DSX|SC809ZU-KK3TM$upbKAb3Gm3SVkhd0LR>y<ZAp6!0^0xZ~YbaBnO
zD1qv-blLksnJ?;83XD3-q_d(eC4abN6#VIg>2;+vfvej`MI%J>U;#PMdm{!Ly{<i8
zNaKy$p0`%6g<U25X?xCrC_RE^vEeI~4V$$jM3NrS8akpPZUMa>|CEh(wy(~RruANw
z_wH<I*Pc5tRk6^nDC`!hGe3UkVotu at zPBa^#D+-NEQZL7fV^tx!C%XD<mCkh)cP~{
zK7Sr at 8~W(-HMhZTFGKvy?`xA&t7e$}iRr?6ltArwla7||bcD_c6^sx;(=2Wsgd}wP
z?bSHioS}zXt&MF6-w}0~pmaYmsz#ba3$SEX$9&+VXMyIG8#1lN^>kOqoUVR?@TtHn
zy%C2@>mvl7Y3e$+2&D_!azG&TyIZ(wSOr(z+;s3ZTTaG_c6r5WO@*3tp+Af|L)CQZ
zzS{a&wj?HdPq$+5a0yo>B;rbS3xz3sUmi0F{3O{g1DA}vQQSIDneTrndMi+p^Y}Zr
zd}<PP%!=iRE|tJNAeSrGlvm#BtLs<IMJ#&KbYu at ZfZC6`!ny=qJs2;Yj(B?R>4$i}
z?JnIv^`3BvzkgF^e_h?dU2)H7e7V(aQUmT|e%nHi0GJj3Gt>-CiRJJS^VBLuGgQZ{
z;<&P_>sLuuXwo>Wu2(dHka0Iz$GURMr+>IyPL#xCTVirISIHz+N`os3fdr2(QO!x7
zD%U%|cQ62p&G(CdTfJ47b^&9yiZI-nZV{pk)74kzXp-#W{Vd0wSd#kB{P0rh2E!a?
zsPTA+GAzEnm=`J7-Z5<P^m<syTt{@>#PMy7!Su4lL;<3#ZU(NW2e%_RYzCm%Fj$+-
z1N}qlk<GqI(@I;v=Q3sW3I(vteUan;5cl3;O+D?}D2RY`0Ria>0 at 9T#y at P^)(tD&M
zy?2O!^d?<uC<4;E^d>D72}tiCEl5d14Uls9z1R1iv-kJy)Bf1!T-W5DXP$Z1td&_a
zlY1s>Ju^3X8Q<LEv%zqPJ6^>ywVzP5%G#sb(#|T at C`M5HI4Hj1IdvPYMGL)#UE)i?
zjB#xn?*&8uY4o~N8 at A{g>eRLHaa|Svs&M<{UdnjOaPKP&4Kk~bd3faH-nOMbg%79+
z^)1J-r+A>oERDTG<l^rKV-mE+RM5ri&91qUXxoUf(|!qxZZ~G{wVd9+%UJE(PV5wB
zB!pF>_KF_3zTtt||FL|rKdR{o38@$}LwW_d2#)l;8_FFKotWpoqMA2ZXcb at CUULR=
zU9ldsHgzvyCY_y7+E;$qnUI3eGV7C-(u<QTjP79#e$TuqyKAF(`eU2Uy1<3xRl0AN
zYexb7z%@*CaJwY{*u>z`4XC_Z9&WVdhr9I$pKK%bukmm%fgYeZLxuIT+1;l={3Htf
zFV-O9)7)AV+Mo)j_r;Ch_b0~ID8>(KOgpGIcaA)(QRt2LxESUGxzUzr{rZikG}Q~7
zEbdqWlzcDqLlPsL&Kg-Et7(|-t{aviL~VMbuU(zS`Ia0Rzpqe+4QH}XIg|1{=IN6l
zlJWIeqle at i*lqfQoYd<D>26whjOx5F{OM2j{hW!FwS0E?HYNREaaDcbx(q;{oRuEX
z&Ga}ynz~Lkd$5PEFoN5s!0{7cd652x8X1+kPMMk`YhQHfx*xZkakREUXdr*>;q&IE
zuwOR}!8th3QZx)NI+$XpKY;2$H6DPAnL|H^a@<I^{Tt~ir}t!g4b`2v`|>u2qCkq%
z*K!(mZiOqor^#m=yIet^o0^X(&l%R6Ko4(sp7yl1R4=eb>x at D9A&a{b-9-RZc)`s$
zb|)J}zJ$H at _rJ~#8oT}!>MFNETatu(wnV+7UZtlICZn23FmB+JupFFlnEWvt_jV5Y
zWS)MtX#t1Og+F~Az+<)2zojQEYLx2%a4pNhZN>BX6g08Tw{#mgOcw~!-$<BWe<R1`
z2ROZ39xw)6e(8Pst%?v_DgZr;zs&Z7*vO7g*8C>N&B-2V4FdV(qJx};=M+cC=Y|>v
z7L}y5T7Nteo#?sWj&u0k?$Vq`PfkiKu(RwCoiCG#9(VT{Zor>{H2XmTPsH;$jYQui
z3o)tbM`2$r^8h#6aH(eRp~WAduL#|EAr;#+D>OduZ!Qw)whWWEYv$}K%8QoB(j~q0
z^H{tl^@BuN)jDo(vCKy7uG03bA!iM8poKt`_y^VlTv)@gCB>`X86`Z6&Ma+92yD96
zW?bNEVE at cL>xs*adsjfRAZD5At6xriH;eCSf)~u{SkLzBQ13E^Vc~(OD8!*p#aL^)
zM_=eN-c4RpSRl(+V&@9tqf(1z&?(NyCl5h50a~M3Y%{1(W~A=-Wf403Qf%3L-P#G?
zOTfZq7x^*i%ByR}GpGBkcUJ6Jn=H(OM`^!13TR&it=z7K*{d%|UHq^P at 5sIJEGOt?
zsZ878KZ<7f9+anD`7~7XLQ0ai93XS=sN?2#E&?U>b9$nRuJ-aA6WL^!B6O58$E}%E
zuK#_^7d8+0;hv1s>IuPX%@me6QFd<_R?U&MZuUH+JGE6xBSsUu^InO$Cv8ri%xvD?
zzseA9Khbdq9?+4<K0y`^t5)t=&(5F27tr1Z;#t$qAvM#AH~jeVe7>)8PSf9omO~aT
zXi;%xt;b(5S_iOHjOzj53&xFMh1Z<5 at k~s_m-D0Sq>a0avnF0SQ7u<n>?RX^z5rS!
zoQ}kT&A(#PHr()m0PW4dZ=f1HD13tsrQL6Tw;c(RBr)+re{lq*z$+bhl3!#iqU(J2
z1$3yEP1q|?nPQAq4l!Q2hMc+c8*xbU=dz@{iYi4j!V5zu_#1N?PBg>RtiC9Ic}His
zn_n`X-%p5-K1F|kr!2rdY*VpcC0yfkX!oX0KjZx at qV?zgX`B2%j|2Km@!hDql;B$Z
zo%dn1U21TP{%Ga-+ at IxUH*Rlw6>r=$u%F+BK0~H&0w2hhG*Gg=dh7mq^Lc-9 at 6!(Y
z;tT{?TY-OL0kY;Fv{96ab(4vGt>jP^Hn4gX;q=9v46!3N_kbc9r(9j`SIGTUWp@&!
zh}FD99=p9H(aF=c<Xa_o;FYp_fmyC#o4k9`CR_hZWN6CfP<Yk at 3m*UMO`34SxN7}y
zLlO)2HY3&62cZ^lgZ`B}2L at fbaDo0#d>CaH-3ntxNbzxKe;rY%IUIKyTevx(i0#=F
zW?)PSFS&2;sF^T)!-EP?#;V433bx^6AWz&P`f6g_2zqiJoFuQ3^8GHUx?e}zrRv@=
z#q=;If<ae*GwPA*7Ua2?T%3LsuIt+)&hUZzhsIMzb_&$76&P=n`R0p*L;BgzmHs9T
zTE1%(<dOEY!mqC`T8uqiXeoP{R~4VT*=O2P0uqBBw(!j{GB(9jmyObyJ!yOAp0b&7
zHwO1t;oo^rU<;ln5uoW(aL?XM3>PO_XG8w`j(9I}`)6&gg<m~b=S3!zJ(E07d{$GF
z!uE=qIp<F{&4=UcGXJQa?$o8}S<6qkl$|p-S9@?J;o{4uuSR|a>a1x==e#+}p=1v!
zQ=Y7*Gvo1(*c9q##CN0WGJM7Q#mVPwE~Rdw=||a1_2Q|CyAsBoT?9HrvzC_4M57zq
z-)q#@!j}e5l-$1`QoVY6Bk8+D)#+RcQ(M|Ig}U0S+E*ooOZ{^L#m^*jZ*$5Z)HlKX
z_~9h at bVLG_Hy7a=_-+r)IQ>gDHN(Y8{=>KWkL^tDKGqygpBP&>{KmwT?R!H{T}z)v
zYlIR)m89$2?J^$!ARa%wPr+S at ZT;S%x7`0|#haP_o{^Y9P9~E-Z`SIzT#Er9?pGOc
z%c*gG48fgK-c+k9ljmPTS at +B}j2WAiGs__Vu5}g9Ijeq+`+_uGZ{fuK96!DOb7u$#
z(RJy=#rmc0!|t3Dz+L-;?!#!hw7u5_k)r)|cjJNq)1zQjU7g*jxaZJNYt4bT?HVmM
zWvitou~#OeGQ}DGbu{aT#I at Y7=4v3T0%$G0dV at c$21pmCHag*En)MZe69}JE<dsNB
z&*r`U$ng04Sr0(}v8H|o#DfF>NAvzNogeN;w9fCJyxARo6)Ss--^+>g=_gbkhzN%`
zxFYWdva6a}4wAT5bC;$zr>g&EfE*E&6VIP at x9sRR@y*$v;?q44cx3j>zhjDzs>=vY
z)vtjsNZq9fx9o>G at uiGCWy|U-s&?~=i8)ztH|@V0HiU9LmD89iNF at eKdE4Ui4xXZA
z!_RC){ylh<lZ3>cFZ_qb+V0h7`g#8>yp?#J(?5FiKVC1<zw3-ovP%$|AgiSOH=J?C
zO)2CR89AO`X56x|)wD5>qrFwLo{#TytJ&<={QBmlspk)GET*`^2l_$|2*U>Y+J8eb
zLgk8J$*sV9(P3vc;wfC6vC>PLJEN{_+P>5Qjk(~oHRXaM&eLyJ|I+Q57ff{imj?eA
z$Nt}D1vl^lj>hOZPlsy%yTp49Rq{tX4?BqmYyZ1M#fGYPM?8- at iHB<cyF|8zs at F$6
zRGo2ywf|k>$40?i0a3>ey>fa_yRuE=aC;JqCn6*^wr%py>E1!KBTR`WDf75q{kzd#
zB)NqhA!)~IEsKsAXvda67FFldj at DYHyf%K;8Kv?Qm~y8chg#8_^OeNgdN(8pq)c-N
zbttQ5fuU6N<~${LYoiqj0vXe#LLF~avqqsp^yZu;<2K%r3AJCQX at oiyRSm&Vbz`#H
z^qejog9zTC;tZ?lf2HR(|JR60w(2v4XRApaS^Zy&w6ax^5XY at 16J+&&EmF!leTFb>
zHK`)2|4Z at Fcx9oH0sc@U&+|-ug@$V4I9vU9d{yCA#x(!GW%Zk&>dC6 at XYL}+ZazO0
zbGRSzI){JjrcC%1vFwwp8$8cCpppTd8+Z~?m?!sqpW;oT<TKH~UuM56>6DQFf0P&-
zs`YHBGCSg->-_H$c?N5V8>$qKDj#<KcZuZV`G4wH+1FDrQon)PH?TL at kb_=9bjfcy
zp0hvS15^zcD0WbUo)|m{Y*?Ngzy0JG)VPV2GbDsUlGiW0$up~+4boo=_NwPSWjczJ
zChYuIvMK#PCI6i(d}sXje=+uY(F*pA=lg#KPR3CxYumM!MlE;D at ap3Ws{Ysa_uFzm
z-Hu;pgc}lB at cSojS`|q=K}Rq+#csYmX#HJcQfx^Ri at 6CUBd4A)$C)tii<!lU7heeT
zx@$}-AKDviGF>Uak9qJ`0jlx4Z)5X}1>5xC1pT(*;>7FE{OjChpDZ|%mHcDR`%6u(
zN$8(L*;Qd*`;NXQyqbQdB@#=m`A0eJ|D|Xl5=*D)c!0X!WQP;|rdPsn?zi^uzKKWd
z#tx~Goc{-C%DLc0cL;<He5*r)I5FBY+AE~!Z~SBvYt*an-MRW@?qB&P<LncM6in at t
z2s|`<-uBu(cB<|_5jbNwZ9jx$oyR|S^FQ|`HYDth9aMvUgrznAxcQh{<f1MtbRl_v
zLh?QnXUK8bTZDX>Mf4}*=uc<gK>y;~ALgG%g}PpgE6FuTQ}me2*g*kcD1ML98pX-C
zzzC_TnN6wPw{!;^HL|#Vy43w^_*Y-5PV}4lWFi~0@?bRv;V|8eu-oqen?33p6Z*EB
zp?~q+ffB;<-Bvbd5LalqQ5Grs5%2Vrc7r!)E~N-$^>O0wgX*)Ij6p-W at xPAXCO##(
z@!$W~Ov9L&{)Rhq at 49QVCcKqs{i%QXrg^v@$vV4#-DXJm6-lTj{4ks%o*YIZTLOXp
za~3ln(dEDTWMAi!Y`?4fnBNoEqu-Q1_;-E6Mf{4<;^<aGca5tDchf*=cPEK7_L3on
z!`|+2)9K#I>xeCi$+Xaa)3kw&A`zL#fzg<hq|8l&a8r_hequzf!%6Pb5eraB|GIeE
zW~9q-V-kP2obX$QVpaX7W;ZzL{I)|o!V917P}l_cB3%o8C6st!4!PYpUg+oC3 at S}P
zs~evu%i&$VEtIQQ<5qiKuRjXWlq&L*C1)}m6T~&DN(XXnrt09jJ=Z6*2!j)ul<K)B
z={ybXqf?LcP4mmBdV#jHh7Rm;)2u62JXi*gs;f*V-xyUuQ`CptH7D3gEB$b5d1$1J
zDqeZVfba|L6ARSmK9_Mya{R2KML$Dwdga}7ab(5``8~;_PuFwtgI6Eq^tZ$b?UwHN
z$%SnA9+S9D7v)G|;jg~hx3#~NlZO*T6)b2MY>R-p{^Ei-UpDS_n!4BSK2*#l?rXXT
zQg5li-^?<t at 8<ViixXV7_9BEzZKfreZBUw@$orPdQ-4`%=l+C}+FB}oB(J*g7iYi2
z($DYcP?oH(ca6T2PWFn$ppvWO>T?fW;Q4UWI=I{I9u7zrIv4G9WA?66aNjf5T;OK+
z2Oj*r9BPiD`{rpUYv>7Ka_H2>$Ohh)=)+#}&#s#@I6p`SGsD2Fce6Xpx7jD&41<U#
zNrWEKU$^_=tO;5Xu@@gap_me!o&cOBiVqMxcnD4pMd8fD^T)pl`!G+T68C`={f0_y
zcFzNZAN5jj&_!7tzB^**!0Q`PYH)cjDa%wb`vN6SDiy6DM|xv9MG+DD_&m9A+<k{k
zZQcFoaT4=DgY_%lgvSJ5yx22w2d(e-Foo5reGz6yT)p=E at a!g0xi<wWPK8!2-gte^
z7#qsoaPZza at X@kb1Nx;ikTf9K^45A0^BBb%fwhJMNioU&*q2B-0_=M;VPZ_lrrdu9
z?5iF|O`r&R8q5$;{SxU$dYRB)@N!X at AZYjl<gvf30u$)d1~okBUZ{2-j0l++VaFu0
zT_3>Iz at Sz=Tm(yl-afmLjqTA+t<z3P)=oLpPSMa#Dc3&m+F6>}0nflg36>yF?4>)B
z)vgd=hUDshf&H}oy&ljf7}w at 4(V*kKh8+27&WBa8gN{~spO#;y<Oop)P^XCh?{LL*
zTA;M<1<tv at _6*9YAWqcrW=b>MmC8G<D3^52#?w!zT`GGu|LuuZncZ8v0<B?Snl|3f
z(j!kBVhN#0rfkKew+aw$X!eK)3kE#Ud%c*Voj?qC!+ptXQ~hv*j;e_bNk=(Qfpp|K
zpV<^m+&)+oW?r+~%%x|741$DH#<@jFr0hLh#ZY$aZep?^CE1Cv4Ku5k6c%UTw1Az_
z;95{Jgm!ZUe=zuIBORMP<pTfDvLU4FOIeGAV~r^wQE*n_A(cP>ketRekX}+i>C)4m
zKYHKO8GwtW$uoUZZNTP5gE5Kptnvn#8EKMNtM<<A%sBpO%`r39tgW^SZedZ2o`ZH1
zbcingAjn_n^CCknd>CgyH4~W67mhP{8!Ju3H57eCJy*4RdHp^C5I^1hc-hJ!zKCCS
zqXlk80=a|uUx!mb=9gyC-G?z-l2&cxYYUbml2%5Fq#E!bq8{#kLJnlv=f|0wtyG>h
zpUq5 at T@R;SWI8f_c0S5ipZ<s^=^|fF25rX87b~10 at LujiEq*#88w|jc%%E%)LK#MB
zkHO#2%W at BJ*&@G at g3`Crgo1UVw8e_Csy5Eb*hKJJ%<4ao&)DF_?(3?IQQdJ<#BkQG
zO^D_et&twvIfyHD(l7s-a*gs8ZZ<7k3$Hbu@*z2GeFFRkumQsb<!f=PHH%$|*NA)j
z7JUH0;<NaP<l~9>yH_STtk6`LfY|FRp&wldYl7S3hJ|bWqEhuiTqwUkE9OXd at l)TD
zahBQ at rGjqaBNa%<L|q7cQM;3s8KAW1)LgecfCrb5$1r~g?d at +Nl#qSB&T4b?#OwSa
zS_vFP9kTJPU>EF9!rB`N<1MU_FDG^e<}UV<p)G?wA7fei at 0{!g5dym-j$u!*<|vea
zY%ql>h9J3D;a2we7P$|D-$;pJ&3kX?WReyANLfavwjWEJ<L=A$(XsaJE1m8u`Ln8J
zZO^7t at 5~W7zY0U8?aaP8g|XM7AIQkEamhxFj6jhu8zfYEf`6K!?&o8|G_jjGGlSct
z3+OZxxHbwdcqAR4WFLE6J{25i0ZJ7FDO^c3%8o1mJ}l57F(l_`Dw&>Vt^kh{UYigV
zvtGsd1+!aG%ryfxglxmD5KGVtV!whY_>td2`VW~p@&{_Y%+B~xy+hg?RQoW8-Uv*P
z_cbp1&c(=n>~TP?RI-5FpJ>)CH2VTtc at q1XMUD~%sz2sJolyrMgeB1vqH^2Gpx9jq
z6fWFzlZ`|t9D#~%BZF at v4}tv{z$Sv^8bR{%8h-<$$P}t at Qa5;Dc#fo5 at BIS;NMNgE
zlaENuf^f|R3K#HE9=L0QA7E~G-R;XY<34aeuJ@%HaA0zyZO`v-A8heTD&R~?604<o
zn{Q;MJgM@>E5%9h=NX&VF&m~gMwYIq{c~v66pU&lD+a=`V_xiP_EQ_U*(tYqLFkJP
zLybdy=yL_OJI5D;=z|1G253Bwi6uPoH_ZDpd3Q!>&@xt&fJh9FBw$F}FvWu=sIFGD
zcP9QMV at i)|K^<irD<I(PzC}mp;oA?1B&9?6DeXs1lI1f>il44RVHTyNml;tEq-O7;
z5G-(fcYXTI*M+$5Qd6vtt4N*h)$7xX4Lf(N)sY4<Z`KPjCFA9Ok{NUNoV-pGLIvI%
z!S%mMz7Hkb!EwT!)ITgqkY}tnr&q|w*&!H^dfeU*CR25N;Ta*w&HfDssY+io6<w_M
zT>9r at iUoHAdP@FJ%wsXizR%FFy<?SC^`6&1_~ds!G8PjCAoVp+Q}x*y{(+ao!!AJm
zNr1e=KbWfbEj^K0F1%UD at k!G#U*V&^y_~5A?H5$hxCvZZx~erMIMS&oobxw(H#SJF
z?OdBAT}~YMYZVI~lrDW$;)c_9tB6h6Kr6Y}e1H<YPeTcd at 7#d>MO!V)!W_l@`cB!v
zg^_5oSFSM at WC%m0bI1D|sz~VwCt*Yo=Yp8s?cC!#{-sabVOQj&Ya`Av{|g at C<u4L#
zFV^E2)|H8@<#6E*-XLbUWK|_U_4=|wAmO4DR)&LGF2wR9k7=EqNH%<tmFDe2u925w
z4$A|bGQn=qhS7g<nweujp=#!8{u}*BW+a^as0U9XA8yX&44t^196Z*V+<4QodfhE_
z@^i9ta}D3Z{L2b{?uja_bNbkI$8R^-(8gy76BL7%N$@K<j;dL!?_ at -EmgxGOpWtFy
z@(vZuPKMTlV%NIChp|Tm;KN9CH#o&&ahfDQ$lA~C=tMIwko~Yn00+~P{PiO22SwwJ
z;tX9*4;VV`zws1DB3FuD9(zYUB5LJC(6O38s~M2dl|ANy%L3g{BiDGVB!y#2*yo1R
zj2Cl;10|G~!@0qoqWBbwbB<TYii4Ji68?z~1GB^&{R0 at hBGw20=&Z2v&P*|r5t}kG
zObnkP1Vsx^90)BBpExso4vE+jeQXi2<s;V~EGK=kzf4%ai|a2VPs%#jO7W-nDbnvj
zhxGlr=$M6f{$#dEG70MxY1n}&m&eEK;GoY&a*C@<QuG6e!w0qWVXKsb&d<E;pLH#g
z&>w{*s2#|uSF>z)jMVSHv}x>pshVP6QV7g*VvQbg*n>FuHv(S{7s>_EZWDQio5sDQ
zWgHfgrA3eQ1DRx*qLa4aOKH&4N0PFUC)(EgGZXvvQy28h2&Uu_07MAG*Di)@%Js#R
z8vaZ9)SnH-RbVjeH6=5G^g?b)3 at -v6r+vjsoARP+7m2+Vjm^te4%Pgb`DRg!D4)xc
zr1golP#0&~S=w}nP at vZEkI^$6f2}B2Az!VqjYmk${~26~QKy?(guT+p-F`ue&;a;&
z1c0SuKPBi$BSG4Kk9sB;m6B|Jjg$bjf6;b6i`A8FTxxoJy_l9PgAW#z55+wt`2zTa
zy0=63q!;J<U#h34Bq at Lxl;RE at Tkpf`NU-2%u3MIphf6AO-f#dVDsI#8elHu6roZk%
zsLB*gzZ(y#?C1Xi-nvEGVvcVkTp7G)3Udk8M4)8~;$)rWmRBN21yM%_i!#ie<?KO{
z-ZKpWlAh)4ev+uN0XG8F-MA*aDUKH^T$qd7OAr4KKqPl*Kl~Q;idt at RFj;s@;x1Mm
z$wqo`hUUex+FM at n9Th|#886C^bpDgrfhc1B1<pH=sC{Rs9edCn7g7>tY;W2UjYdc$
zKrDmFw~w$165!m3t~)6C_(hy9z^lPhAn=z;UHjCpNLK-GucBO%H8bd*f;ffbWg@|?
zsx^!ESz#{Wn)JVP9oJL8)Uem!{AA48G*I>iqSks1m19NkmtgOmn|{L5_IcrAOg|-&
zd=(`5YDn_ci{z^t$yX_ouT3Ns10)q5N1BO|vu%+RkjUBUNVpkT+P2q`Zx9k+XnKE*
z4N9vp!ZL4kC+%IZ{hemp`^)xs#>z&}4kO6P65n9|(mTG$l(csUZe8cZXLllKSs)nZ
zN_1gK<mFFvVM`<_(0{@KHx1|4sJG?z)+jP1?kxqI-vQh-ZnboZU*$w+N1(J!prlM-
zV9$23i!^k6vz0VA%ThSV!J1x7aA0qDv60C%(|X(!)y5<zFp at l8VLm?XAt5QCHbMio
z2s@&Iw%ubk?DN8x{s$V26`T#81mQOt{()so)qHm4xCrJD_2&qzRfc4M0kNnIxH-{A
z##Ei+f<CmKnAyPN7mt5k_|-oUN^@Q{<wtW<tGY2aRU73iDr=NTVK5LR+GV&MF^Bvh
z8dx0#V?fpxS=1GY)hQ&4LK~uPdI(nLKddl#8%2;0EgB at a3_;BjP*yv1?7fe#hroiW
zp)XJ4Q+jEyo&L|@@JlcG_5Tco=7jt~z>@pS>R-(7nG<<)Ol8O$-U)%3h5LbfSAoHu
zEHVoNUNX&x75M)nWTzdDPG9UiA9pT!w5;P<n9lT^1E$eX at u;VCDpS#v*oC{9akDc_
zq6>GKY|8bMFJ7>CpC4W`W8vB-G~-ke>9UZ+cp<;_Nk)pW?ao_z30+l-te00~Q>~<(
zV#Nchdk6mnPv7kwEQ!3d*q^jS_=Yl{*jBtI(vn(s<@1pyGDJAgrOek^b)SFGfu#Lf
zx*1}PHGsA%cG9f;Q0ygRZskAiBSBh8c`QzvttIiVq%`HXx8}EBQF#ldunSrqj!$)w
zCTFEw5dY{_Wb%7rPl)n`%8EJ?zFdo~^Y#3t72J~Me>`X?HJX*b*bv{amT)|rB(r$V
zbA8SuboKirB9v9^NGUmF(2Di^_VJ1u(`9~!9N_V7Y=5Z3rEm`jflh$g2luj+%l1Tt
z)>%Rh!9n?L%ulk`H*>_n4dPRXC%#NOIT4G#4;aZQd&ReIIWK!geRg+TB~arCYYB;W
z<ZGro*Z%}$X}H9 at eo?o9?H3EIoCMJlz|VP7;p=Lf!27JMMPf{0`;`7Y5ftl@`<)YY
zenlY^^spj`#~)87bW+Izk at u@GfYz62t||2WANlfoM8QGfU6Qz<w87J7LfSuJ&n`hb
zH)*qDX%oF^V9D5S)~$`?DFplJ344+pC!JOimK&<I1=HOb<PISZ1@*zG9pn^Rwd=R3
zy|MRKWEIM_;Rjr1Sc+kc0tyo*Q$Bhi3=JU&!4RR1&t>BCnihR%Lm)q~d?-jN9>{9D
zeDRdq8YFZjJCp?~-Y$ouNC6?LvY}CAAj<*!gb>x5YtnpKwQ|VTwM4*$gtXiUA!y*t
z>vWf72dIz~j0+KL+tYyde7?#8-xBu#sMFl04jG-%1Qz>WfJt8a;03q#JyX;<{|}%V
z3ozPzV`~MLawQWOOaX#jyz~r}zhbSwCbYr!wX at b=5h4#4vhqhTXR|S9NT{@jRPqt)
z^nuzDk}^MZa2N#M1--(=8eu;lfg~{57{TV=DUA9p?+q$$0x*4G=y_!b6?nKpGI)6p
zfhFq}EM8%qo#x${(?54VHl%HNYs^<MX0=wr_X9I#1*_moD$f`SFfhKSm{DqSuio7F
zo<;`8Yh1u{jn}M&X2yyV<Zgs7Xr~{wRq~~5JlB}@u#FAXHm<D0*TTz7R#Cn4-`{~t
z{YewY`)HIOL55>90=YNEZTYzGZf_Pq6E#lqpm=)eytM5bMXleKwr@^~`MB?x<=umX
zsd3~j)8a0CpOOy1->vZqEASv4b73oC4X2pRGFqTM>&mhJ6TOxhU}dv at 6Gb|m(_t3X
z^MLXfn+sY27Q!DgSmXBca<R~H$kcD2QKweK=YVzBf;zpq&+DA~RYck$n7E}eU>Oq(
zc$R*xe!s8i9P<6SPy8uL;VqUlJ#^*F=9@$z at vL4ZeI|WnnNO`xZKdsLQ-H_|tT3k0
z4ROJrR%%Sr>|-b!&==y9kmvti04#Dby?OU>i?qOnvf}J?y*EE^h?6Bp04j;M0Xgb>
zfP5a4yG^025J;F{lJi31(k at +H7dB774XJQ|<&vrnKVERw5z_|NFV-7a&^8!2<KDLV
zbk?yv(P@^O!6 at GHx`$!hau|;dnSh$Nzd*s?(M3MZ5{k^2BpkKR>}H^O;ML_I(*rT|
zT$(Qa7dM5M-;Zd3r-rYvI{IC4dLNS}lO`*#L8#q9RUpmXV|0~;aw<BvVCs+2H)lX`
zR<HFJdspR$wQoFQF7-zgzj9bY8TyTEGE%-X`l|xUHAt=J+=}h_tUbgNhBo?yw+L<>
zp|C08OeEcp1)VoSnP#@nb_oh9fLl$=;?ugxrE4!TL-8PzK#zR$Ios-Wz-hB?1XHC#
zMoN at 8-1$6f;h-TQ7d~s9-E&ruy_HQJ8eT<2PRqo($hjySBz>l8UG*W_zV-q6BPO<2
zX71^mf5W%&7arw(%lr9jYdf3gmASi2KbiiggqvFjA$)rxSAn+DO{RVq{V(qbZlG?|
zs|t~0*$+3awZdUktNQMKG*3&mWOE9_Vb-C*g?aP{%N{b|Ms8|D4QqcR_ZygxiTvS-
z8d12LK8yZI_Pohj8Czs^%N6~mqo#1?<}|rATEJ7}6m=PuR3<xbaM)4GUdm6bSMbtB
zB_ at efT6>0KMr<0pV8h|1rNoDR%n at oxl$J43VC2w~eU#0CIPWb1Ib2?V+|Q+_-bMFJ
zy60bCa0NB$UolSCX`52qjHmgSNl$q<Dl6MI`vCTSl;li7zSW(5%RZH7yx~t*)@aGC
zmTOX;D4c%D=6H{p>u}Nh7G^@GZ&%t%bh+9p?KQ!@s0)%7m6fmGmt}aqs7oo6!K3W{
zee*@XPKy5L586X<R7VxsFT<-yl4zK?URl(aug|_qW73 at UN-9gDO)}8GP2y7%CUa~o
zX)kFZlxn<Q_?^N&H9W2QYR5?H=A=1dma%6;@PUZQb=L>sj@*zFqTy}34OL*pQtJ$G
z?MO;bbla;5R{oQZ(ylkB(z1Qyi11o4VcFp_LVsqEtU&gA;2$nKkRxFH+rGdFz$t90
zwX)ts at M}mev1X;^<uT8zioUx-KBRuk+S1z^6_s(~*uqvVEuhrChWr9%+*uErxcy_T
z?Pzmn{p at 4WlHZf7yEE!dk0#3WKEhS6q;a?u#d_FnR9ZRai{6USWO`TKT^qpd5 at Grq
z|IV;zH2<3$zRKKP0c5*|PN_=^p=~yoE<9`p7ENx33U8!-$p&)rHr1i03~$8VDb}p~
z>Y4Y-S!#W5UnA7yHgt*8<fcpXh9WmaYJWrI7AYYyaU`X0bo#oRpygl*-eD7e!dThy
z{tzp2#SHh*Tj*@9<8QZ`iKmOGP at JEfaBPYC^kZW2XQR!tB?783b*a>OljAsk*AFjn
z6=9#(pOQTY(^DsY_$2*&J;?1FU22S<{ocy-@~daP*dW*yOZ@(7cKcQEeqIpFZ!%$C
zXgOh`n0I>b<|eS&2UEH-o!Jp0w;Xq*0#FU2HC6{GbY at iFy`ogm34P(qvU~<crdq#=
zN*{f+q|WnAei+<Vt5K5kM%6nr-Z2U~#j4vH<&*q<Z$G>TFbCur<d6`m at G?(7|B`yL
zQESSrGYfi7|G-BdEo`V^n7s5YIbf|R(#FTBWWK&&)+d>AO}xA%;aaAo<M<%ik)I<Z
z?{`R4%X;_;-Q4y#gZTc&3{xt%woA>U;bEs~cGaW=24-eEZ+|Bd^Y8jjG~(h*w8z|u
z&1$+sR^EMw`ibOi`mK$lzgk;u))Lz<E}&rlT9G}2lJ+=8{`6wqi!Ce5XE}n}d&H%*
zjq#-sJ*@aJ0DC`Np;hPcg^r;ykkh-wtN>Z3hR#}>zZI{%F<45DDYAY%!`irBqerr<
zGwYB%<U4;UY2K;AbU{Nfqc at N)R<AbB!Cad|&W0#&EaS3 at 6wt{$<bL4o{9AJQVzDuk
zMn<BxuI`Vvb?5wHAce$s%kpg8?)aI>L0Mo>i&<SlTgmR&*A)v-r}gcT1pLI0ZhXB9
zg5t1()^s!An~uQu>7#aQ3#P$X`^@y#SEj!4Om7vnT60`N(U%{mM=yaG#1t0bJi4Y9
zG`xSW`0)j7A0_(YK+Q)Hz<ZdD)&AjMP;+sid9!Sn=~WoC+PnX=?j>vKPTg2no&9X@
zVU$BZDPdL3uhyy~Q=`)nZOifd4{U2%qUZ&XRcvtE`zfx_>T83eE<w+Zg_vH&vcm47
z{zK+Pmg;AQfI2IDK^GGa4RrR|@Lq`V#WBOQwI^KAD1tpuU+c!i5tFYPtm;!0;}fjx
zuuU31!c>43?WPO&Ie9ucIM^vvnrxe>b9J28zzGX_ceb!x-(z|P6MKP?QDnUQ9rL65
z#EHnNaS4F8Ez33gF#8SGq)Ckoosn-~`@v-`+0u08$p82aP?ph4rU_UT=)Ka5DB(Z%
zYKLgN2YA)9-dn?0_Ss(oTGuhAkW}Xr8+yBB>5Feq+sUz{VQCbt#S?DwOv0mGsjb%K
z0w25doU=8&zj}<gzz at k;@Sx;d`dUQEDg`q&`&7z{T9f$vUZSSqNO)j^NyKaV?R^W#
zeU7!>sI_-%6>ipb6Ux=ucsU~~At0}>6<c3g8J+lJRQq<?#lJ!tK at r7YZ{GkW;Uhp{
zI??0nbkKq){Ci0G>+WeIK~7VpTQ2mPA^gfS;?9eT(}(U&^$!(vGr==?;&mOWnA3OR
z{&Ovvd2+Q|@7G&rbL(_;MTWiQAh{l9RU#e^lK`3iWtR^}44}Wj^NQ^4Q>mKzJUO+_
zrp-kDC3?4owxh{mv5BB*RzrV0gSt;)W*a at D`R8J_dIK3ti{hPjlyt%SCn9*cA$6x1
zWNGJUyoOS*AM at 6Qo6TCOW)=UURCni2wk2>QE7!TkT292yDy_$KQFG9&aVXh~NGebr
z7|xe at mOV$NCISI|IAer;^#C1|^i=;;T>!kthIZdyKTaCx?)2$hn50}c*DKLXaVi+V
z9u(Bv94&#Dgga{+O1g-PAJ0FbNmw-APVX(|I`<$IrrjAzWnD2pOvW-M+-(KPFw9c%
zR4^$j#YDxKwH$PQAWTsX0FkATbrdkcVHZ%R_vR2XsMO(wu>s)M%~|Rx%>OFurqd(B
zHHhJMR1#oVXf4kwvsMn}EjalOJjt(_N8dIJxK(RvUA}a#ahZZiY#v&a)LlA$ECGqL
zmDE+w>{|qJAS$PE>a>#?POp;0C!09xy<Y=B3TsQ1EUXQdOAH}mg%@={*V5<Lwhzya
z+|Jl{TW%Gln2mByt#>|NdfPRtbYrspeDX7$e0mk+3b;4+`<7)l2-P+yf*V3e!m}Un
zjXAU%SO>`%ICe$_^GbhvdhUECbB-Fl*_N4|!_4(HhE6mt6iok4G9vKxM*vvaC~h!U
zf3;_?fUg1cr~90x7vkq)^ONd;fgE?{nlrS<wFmTy@;63CFwR0cXrKU3vnds^z56TI
zK44x={hE?~wT6q#MG7)`VxWd+SqcLkt5q(*WWH}Z9Aad)GCs&$B75u}uE^WhpG1gG
zuRK~yfR%_haedTdbmG|^akUo=Xa2J!x2^I5kDEzY^JQ)}T6V&fGw(1In9(iE!-(p3
zxb4=#m{CN%cSoT+2{P-POe_-v%%U%rSWSL-1vB1$pN92rCCMA&1?|&M+#FWW(UM0^
zBO!r!CyhQ9j0ljQ<5M?SUVCoUNOom&JI2}R&+?x7lMh=Np&O&-H^0otkP={HVTklE
z(bW?n!)<Pf?+5mk8>$zS?tXCRSu^w=T2kgaewC#@)lRafQMU6XY;xy(^P~H3*fgrk
z at WKNR^7nB=Rc&F<#PwWww85ID$i{P}<D1W~cK2^_Y at 0S}i-ZuUs*<`puVw<;LmB1;
zm6#bOk>G1>L>=->Cepq#oYk_fz&U!I_ at gxF*Wh5hJp9thGs_rc98&Ou#%4isHoo5|
zZ8u=TAI|w}!1?JQ0x%p<_q=-{Z|m?Elu~~ok-T&0bdP<d1Up3X>oPMlyZ>-aU4X%X
z98mIu=`0G{(u{%t+Eo1%1RSVKTGRz#T6;Xy)2Gl{6BCp9j*L;oIp9!5P;w`Yp>?9Z
zXK7BZTYQp1^I70m-!`GWA1Y3}4z<mqlDh_#f${-uWy}KU!y;obV#|ldjD83UVR0dy
zg1p~r-Q+DEHRgn){Q5qhvTmLl2YxfiOx~-UJAM7M9N~Rm?QfcEMP^mNWdd!S<gl7Q
z0~&X_|J1>yDe3w*dx!?liC$@5U2<DbPOyTM!Q<KmvyG^Hg60Eb2JZQ at 0*+jg7KCSa
zSz<OH4)_p2q*yUGU)9mOuVw1}`=a}Dzg2R5{`2&nrGTJevA!WB;>3Ka>?hj1P-eS%
znOks5^z$U)vb04(FdD~=LG>^rmB1SvcJ0}0;u>#oIKa4;lH<n_<MCeb4WuZ=lN$g>
zeXn)+NdLRlb6{7q7N$@i7mW8)<sHw$xrkmw)q3^YU)7&BEt(|@X0*sUV{*il1W#AB
zLNhf2&Gm}YcH=rtTT5DMbWa?#@LC8}kAwY$TIXiuj3?<-N!As|X`BKN4x$Wl#`i-Y
z5mN!TyoS at hbMftQ6zP6dkqxPC!$uy5v;K38J2g|QF$Ovpsv<`fCvlIe+kzj~n>D=Y
z7f^puYdM~v>S9&VCTg<yvBD{f$CX>0{``VLU-0Yts>qL+s)c;USM}{?qlP6K1Kn-2
z1Fowv0vA6{bmW`^eFGcpqs+T=rE7d-C<>@^$0Da*_-SauavWS8)!iCa-KQ^H?_->P
zb-tbOucc*%=(ni0HhY<gtWFR^)DBCfNi8~r>-fl|gG;h&GUL}LFUu!$zne8fU&gEp
zCMM~&r^K#)^?eH)(vjFn#)euR-!FZmkqf0&lPNJ+dSBk__FQriM(XmKY;n4vAG#cd
zxsWlIVl>ZTnBCV{DP|0eGPtN?jQh)iSJ6|XTa4Bcne$Wk_R$9X;CBRd`S!6eC0tS{
z2hCR>A2(dI6!g4>bvSEpj5(MjA0D#CU0zln(EnDCzCjngo3o|}9GhRn%htaU$v8PU
zrk5<`|9eh)5g^H2BSK at I%kcQ`X!W5cnesv{qtS|-gA=oH&5ycr2>sOaO9oS^A{yJ9
zg#w|eCeOKdxhx{z1b?VR6X+NRX*z!J$+fra^$mFP*YD$kfg|(#pl)%0cm2v%@thNS
z1}27jU8k-d3vYwVi#mi=bFE-5!`}l~e3{F!I?tLD;g64oLfsVwqAt_Uj+&08GOzId
z_(VtvZ@~$wn{SW8^xRCn-D~m>5Dbz at GI+jrU|5B99sBfQZtek$v02-sTo4*c_CV%o
zl{2fN)R*5_`{425tJ~(zf`TGUSkY8EnM{PQsfg&5Ff at CU^xVm-`+AmLnswp8KQL{9
zFsNJNw6;6c2WqkI at ak)eZnw!+q5bgT&EGj&H+qk9$MxmmJ#y%D`R`A1D=2-&FP|)a
z@@fQb6D*+0EFgjQ*V$Yj+OmJ`mhOm6)v2)t`W!kxnsN(Gt1_<t`#yG^)i(L97+obs
zYvH4NV?vkVFB;LWEHszDgR^=6TFy;P<csUEKh at GF4g~M17nO}Z%c(l7%J?bv?GLfe
zTrG?L^Uh^}N0qLmE{$0GP|b0N+t9du4 at cy0hjt;N1vETy)<EP{GcEI3#(vB8?wC<f
z^Dc0|ym%bV<FAM{J~2!Rz=oK0VqLw}0V~%s8;n>|pX<G!%9a5NGh3OL6^M%6O`AU%
zACyeX$2!b%7#8pgxAz=<j=K#tl92RE*1W5-RkdzVO4sdWhayR#TK4X}`Io<zx2Yu+
z+Bp8qYOI`t6}`WIvgnv`9aiC5O%>2SPdTR@{&ahj*>gxxQ>KxWwIh9&V{#B at dX?VK
z<u{!DwENY$I!lNWNay0Om|?C-<zZx*1i*>mE`Bt3#UK!A(I))Eek?65kmh(e658Qt
zzF=^p18TK92QS<{%I8 at vA~_uGFzET6KTD(;t!l5(YP9%jTKYquDYO$0;i at -UST&yf
z+m*75d`GYK>qgmClK=xF^Nn{nSwyQrlft at 7NB#0#5Wjgvkk`V#LDhxMWanXI|6Jx@
zV^-C!rpVQ=fY>8Do#GC_b`Rs_>@9fVZDIYxOYVttqKj=)>zx)tG~nHN2bPWYBZhOQ
zcB3$V;ap~Z$VR)7ZYlRj>5}6%1wD$3 at l(%w2wN%97=60)4!c1wna8A%^h_<K<f3Hh
zW#9lm7xOb!QY)(X!8crQz6hkwGTs<@G6hge6y(Wwpy^oXu|uD?dpQrEa;44%#@8YM
z9yJ_XDY#huMajkj=O<igy3K-aoNiCcQ)Wi#ciw6eQKa00BX`(NUwX3Ntza^?$C+uJ
zJb^vE(p42;-*`s%<#3c0%sQH}!|6$M{p?!cTBbcsS|0Njql{5J;ec at nrfR1|kJfWW
zI*Ax}RlnK7Kc%{6x)!-6z2>`)Ec+^$0!b76a`iFinz=nQI3qYaSS4+=4(tXl&B>H*
z%$}ua;P7naENMbTpHyPqyWi+e3yNMl&rr14rycJwojz`l&QqJ at kOE)tEbO%I5RFw7
zrt&ZpHGzA<BKex84!rqF7A2o2OV6Oe>Ie5azMLrBZA|U0-9fjOd!lqzdOM9C-2iVK
z;GW9|J~US>Ised+&Z0<BIu5lwcMrTTlggr!%vqOOH!T)O>QX-bkudRnM9yrn$MPHM
z=6KEn;!~wl_CP+Fq at Gw7ZSBG}5tSJcrKZ_3a`QKa(=4YC0 at 4d!8_rmCL|smYc4QVP
z6GER{6JB#&zq}@5E<S_?c7zqY)h;UkEk4saH3L03Ck^EMHEk)Wcs5&F;+>E*b1xv(
z^&55bYpzl4QHVoq=D{PGcms!wd53)0;@kt;jttil`x!5&Z=iroa#z|(;r>kPZxU$a
zIopj`;LGmM7V3f}Su?!QjB}nq(e5Y<jk=PB8Aj;JLE<@Qpm2BOy1H9Q>x>jM|6CwY
zygPbb16Fc1<2U8^+i%)$=4y%%8gc&g#^UBh2y4h^S at jKVIeEF)a>{aV<rG;<l4rP}
zY3C*9*5}*j)aTqcA|X+ssj?cN63C49G#xbloa06aErKRR^P!p0(&&3=HZ&Dl2u+OU
zK{KEw(FABtG%Z>TO^y~ov!G?sxag;7O7u%K5t<uKkCs5=qdCwtXi+p7nm;5GlY}Y2
zgke%Jv3IN1k(dljA|}5_9jkzSgH<U%a7uVF_IUg4i_u5%^~TO(PL?&!<hkQ}4cE at N
zrr^sD at rzbJxK`qie_dMMHli0XM>xJuq+<9j-}}BW9V54lZnQmm;rmJ|oOv|KO07xE
zm(<CA+?X)_WkmLbmB;)jRdqba60t9zR8n^=Geqmd8sE at wzJbOGJ95)eg9a8~Hq&2$
zOAPZPH%lhIRE!@YoMURN50?mhg`^_$$JQs-e`;BmHwiCh^NmC;Js20xN^E>7Hc9Nv
zp8G*XY*f8^qHNK)`e$YJ at Ly-@m5CqqHO`Dux%mS>n!J_*oC&2s-5KV60ycCFtqt)@
z97j67^qqO;{k1lR4OL5`M<%|^ods)s>yxfF;tjc at 3!@Z^{6_}9jGg&w{U<hl4V|N{
z;MP$;@YSd|_-aw+$ikPk6Vx5ioz at -So!cEP)5l^%(Qwrmy>z?Ce)Rq_^b+?{;qvLF
z<t63i<Dfj5{sJ3TTUKjUd(a2%hVmuhqqHOAOQxWLkhtzX3md_PtflfL`$hYu{l)zy
zx<$IBti`M)!$rfTg~f#>@kQ~a*2UH(zeT^LtHrA&ibaa0<i+GA?M3Y+$RcD(a8Yon
zZn193ZP9Is_sH+)>WJbf`AGW+awK?EcjR^iJJP?TxYWKB6#Hedy`CjNzi;L~N|OvX
z4i<CUstG0sjqf9_gK+`itIc?%l_%Xs8f at rl?-m|%9U2S_#gY5MI+z82F85V%HyW;V
zEfo4#E|0Z8c}Fc}1v%Z7$U3lc?YZ7>y}HTS>YwL#dLQ=ZO;0%Mc=EQ}pOG_ae{pSu
z2n5d8+CE at -s^1k20vn!L^h8}DLVGengM`Q at tbY!XfjwcM3GJ=&Q}MG__zdy at MH<Qp
zL0HQEJX_r at 2~J2pySD-6@=wt|r4l^j4yCPw^VA_EHwMMe_=9;jh9P_V at MDx&D9c7a
zWZ!L<4o-5df^tDwg%b6q1BM0n4dJ}k`Y6XxvffO<NZr0Ty!DLnS`%d#O46ILG3>VQ
z2ba1wN4bVl^k!|0!1iIAupQVR*dA<)0#10Xgz83FVq`H7fa$#;;3wc0U<~jp at Uz@7
z>%KOe>ssx41UYieh15lT#E at d20W;-BK>MISf^fQP4U{eBBZeMhjFG?uVDK?27!Hgr
zh6baL5ykjm$S|51evAu-8Dox-!GvJ&FiIG9j5UTDql*#7cwtB|8W>)T6NV9EiXp}_
zV`Z>-SavKmRv1fy<;5~$rGOdO2y7ZQUi)m}^Oda;XWK(XVh%Q|%&+_=%2i+4_u>Mq
zdW at dX#>ot_H5eUnUs46dhYa>u$u;!8l4p8OPNku&$HbQzr!-h(mHp~1lR(l#wYZYO
z>0(VL_T?eZ>8DmdAC}cCn|a55hElz0P-NmwqIRPiiKkX>eI45jj;XGXWH*S at FILNY
zZV+$Lpn4t~+F+3Pj9{?vG1cK<V1q&)pB80#oOpa|%*^1yA5xDpaIED^w$q<9C01_}
z;=>o8b1J`o8<+Y#p4%hydral`*p9_#V)6V|Rg0XHwEHo~f6P1z7N1VixzW(YkPNB(
zartBA5!<F`#wkE&7{fcH|HsiIvCY7YtCmhYrZt{%Nb`@KM|_+9DyJ)*UyRg{`5#x0
z<Tk at qt`j=gL)ar26^s@}NfARhr1Yozk0nAD5#z7d1qhZ8ei!^Y*eF<8nv;c2JBDjW
zZD?e0WQc1}_s>T}0`i-`fizbE9f(RWhHgmXk1gUOf*xUvkU#_=@DVBq4uma&2BD7-
zMff1d5Sj>ngbRWhVUCbNgdp$`N(gp at HG&$Uix5V5AxID!2wsE}f)Qbgh(qQhyO9yd
z5 at Z^(2^o*9Lgpen{q<2wC|#7s+xUfNDSASqrC)S-=u?_ at oR`>4cbOy%C)3V$@3p@>
zc}h1r<f+}BwQ738ewA at Mir&RNl at Iu0##VCrp<R!KjUr=w$MV!Y;Ip(23rBLM%jx4K
zfvj<I`m`vKQjYCLT~3><w_`M?Mge)jX?Ih~C!MzHWwxqzrTon8I<=`Xr^@Xnmt&%h
z+Lz-kr_Usw5bl04<60OeJGBXjlh*Gs?olb=)XuU83)^auk5gu6)iPyRdz#Vis7gGI
z_teR>G1eMwvQaUx)tukuY&UjIG2Iml_#v(4nzcW6wnHA!6I|6LZ}D6()h&%~Tw|y7
zR4AamOVNV6F4b_{X{Y5>GN8Llp~rmvxm&9Exam&KsaQZ~m(n^nEY)v3Xs7#BHlQ~+
zI=DPIE4Vc{IapryIcq8`gJS$@RBh+Z<@71uX~Z3m7&v7=eR<s$tSHMZ$0NrnCm{C}
zl&U>$zr(fLbSiP(g-Q=r=y?uE6&%+dhkzktkWt9EAXsora8z)-4qP`@H(EFD26h{B
z8+99pfnj5?QP}t$F&kqYWgQ2BL1Um%&^Q1L7z2y~#_uT4nBmUdkg?0U!@3LF0qp{I
z0J|GI8 at pAftf!z;fTu}MSxj*pckSm?^@^CBUF>m(fvDOq{j=HN7I}WXpzkV<4a>U6
zrI!Y`-$O=kM+s*`9f7Bor<AAFlAnUV1jk61lRtCgfP9IcQ*expOC_A^-w9|*56%l#
zWG*JxAD^}S>+bVeQir)T$-w3B<GI?*Dsmd#D4~qfKb5*1dRcdW-264d!n~O3wBD`l
z5NGIo%y at 5X%d1wSSEZLM`M$=W+cEL4F50n1@(tN{1yN;JPME<VxMqj;l=%94?bJrm
zeA?kGfls5PN`B>f^}3>~VR^;O9R1(7rvjcWV=0W_mAQI`_W`?=??uao^%Y$7s4Ks7
z>c7dDOPAEp*VCWVGk4L+ouh5hchR-4@|yMasg=||ez#xMT1he+`IqfN%%`D4*}PIf
zH>-+wHsddkPfLfYc~!0MLKWle%3R`KPM at X@m9<J&-PS6p+5Eo(KCK;UYgH$@S5<!B
z{VM$`{Hm_L6V68beR^SWQ6C5jRF<h+uahm5{Vw}WwpzBBMK`&MYc}m~$zSWg+dCc?
zL>K9SCNd?m6$Sc`iv79rS(3jh7pZ~9AtoWJAqF8 at Ar>JDA at 4)pgcygYgy at H8hM0#a
zh3JN8gqVh?g&2lthXBy>=y&MXXd|>TS`YmeZH87v>!8)qCTLZ(L3eRzd1xJ`5c3`L
z4O5LN##Ca;Ftrx?*mqbxtj^5emItv at 58~l5G2oauWws`^CU*Xmd2k+h72E|zfy2Q+
z!7M2%DMKkT>_IA*Nk`O6;*9_sEEqQhkDX8 at Q@J=Lf?b0>`b#- at CPj&ToGn^~Jei47
zLda8Z2m0D{=j-brn}BcZRPm1~g{^+oCe07GY9)4-zIGH6*Wu1$YnQJ~4>eiasmv2(
zt7r_3^5MEu{jgId&Pci0ahP8FEh#kPI=VC7vI>qdt!zp7teL?)8o+ZF26jZZn+y^Z
zlE_Qpc!x||L7saK*bPR}yFSTacDPe?G>(36;4CqigffuidKo08b8&gSqW|C6dk?Uv
zmZe=-L_mflA|OE+Ns at C0K{7*@93(Tq$iM(I<Rl<UPAXB70YQQ!0m(>^93_J!2}%x<
z!@mY~yZ1il?(d{~@Av%o<KbCT)2q9>s=B-S?Ov;T>_lP4121g6GdXk#7FaFr&}ysa
zX>?S+o(fYW5@)G<lv?*l`cehW at STecOCm9(f~Bd$_Y0jeZ`!yN>yU`0gzMZX)9!e(
z8ALpgOqD%!M`yd~>8E+$rc9CnstZ|*c)dB*<Z?b5KJ|N=+%<1Jyt6&LO}T5XTqu8>
z%&KSiq{xJOoHN3yjGyew!!4-rB(1RNPSg0wh9`_&FI$}q`E7LEc`K3fB0TGYAU^+?
z2CUQ^T##`&xZX^AfIKfy)jU@)$SKRfD9>O_BR!K$)~Y4BFG=X-QUFUHj#dSs$-wkL
zMO{t>*XIhQ41T7iPfn{9DdM?8X>x<+UzdgjsFHFg#y?8D%&vCH%u^%qo|q4d)3S-%
zC at o+Ko9ojT(BvW&wJ_#U#O%9Y0-lXdiN<Z=Y+<kh at e(BZcSw&$tAQU~i>^~YFN8bJ
z;P|Lc^=}E$BEPCTy>Elv at bh0zAwk0|X0Pt0oOk^*Q8Xt?TPzWn_ at EYM_R2p6+m&+o
zcSNRtBDOW<iS?yP{B_>C_H$gARlg_J1u)0)9r@}y`5k#`4W?}T)3AKW_WptpT(_SZ
zt1I(IU`|HnJgHx$*}}>{KY?9AfTCIy?6FTDyH)1DdTs)v0uzO^NZ51DeXY(5r(CUw
zagIl>AOva77h8mxh{WVvdP9aB*hn`{g&i7(M-sMNeSra!HjH*^QERziMQ(MO7c22W
z$1UsY_AOwLJpLZf)Q5Ytn7%&<<qit?{LI~cT+h1LtLz~dBG^`#!PuAZ!B=l_Pi0^b
z5xCpldV^7oEzS>oqsA0w66g1~c`rjklT;_<k8thkW50vS8Hgx9hpBSa?EN_s>;&$*
z`xs34+~)VNFxjt~)t|$==QJKQ>r1^m%gs%QIU8|uQG*&Iw4p|LIqZ*@r3=0{*2VlM
zagWrd+|JjM?4{JL{cV!^IZ2G83+p6xe?hFBm*~s&=eGlQQYsc>{{v*q1&O{qf0P|~
zf>N;z`|pzSm-kqvUfqj&YzLmBRD6f6neYF1$(ZxLpgq_W{R*XGC3auFe~BIV7x|*U
z82LO%T0Dk7);FhLDJeptP6d-Bd+63zfoLUy7n+#a{kKB-qv;4<C}Oho-BRL at 9>ssb
zkIB+`ONlSK4<H*Ja0xb#6_7wWZ)x(uy>|2&%UTbm`_|!-_U;^~sUzkcJ7J at lY-Co{
zMI^i!BLZ$!cT(4DO9uH_e{}*^Cd~&SkIm_z35pcIkv#guO93j<=V?RUhhs=$dovJ{
zgf#Hqi at IPz*-WiEd@>|&^Hf at wCq_rbij>5lN%kKjN%r)knPNjjURcm&Cn&Q1o>ZK?
z080i#NEl!N7dr2A*v)Ca6BRObWOI0{@vYlXvnhMy>EzQCwkLKDy&RwChqVR*e3#d`
zx{K_}C$;45)K0DHy=*~hg90uNU(&XHAFK(Glc9D~3SLAp_Bn9e(3?laT)LWRK;S;3
z?Gt7vF2bL0^d9qZ4pK`?<XBi-<Y{-IfXkqs%?)z8f_r%!>;4->)a>D^^LrZkH2wnK
zEAIX_+i7nH-ak!cQl5V<Gh4+-j%^k>wp=>qSlQ#~<>a%F;jeY#&a*5cFfYQm<xm(G
zb}N2({@v$^+<i`uw$Jz1G<)4xf~7<olw3+*rqdSr)Vf2fa$l!v at qEEE>94^^Q-{^c
zZ`1m)wwu%~@PF_;;k52z5$e{h_9$(ehGSV<i9JSG!^xiA7r=_;D~{_K=9!DK8*dP8
z=DQbSbB?6 at 98)TWia2J1J2tn}V>Ep!6Zbv;?I+1<v($$mop&Lx$7OXKp0NsD8xH(B
zjxvkF^r9Y~t)s!&5ia<EyId$Ldi0Taspp%~bJD0F4tjX!_}llo;&7J-d9uS_K}N0e
zIefAW5~ZR=(@(H<J3!x>rR at tfjMzU~cMQ`Q!taw&Wu(YwbzfZJm+q9$8o3ArG+Fa~
zgg;2?<R-HYHh*yS*F`tjJm~6=3l9l7TVsJVK5(&~xfZ#IuYh_$FWNwyG94^yt3y}9
zNIV*Q(H?R?i6moQHcN!~uG;;iO6gAHj9TOC at _NC&q!y^4tG^>#FVRz2Fvx^k1;^m?
z#9o)@ZM>BMYqGK6d7kG_isu%2azD?Jz%9YN9b~joFhEgy**u30&gefmOjW2KOnPt$
zZ|D~LHWOL?gXT(Byr%L2($!*$HyVmY%yk at BrpQ2!IT`fJIF%ZXM$F|LSBA+za6GKi
zpz~wW{`MJlr5a{N%mqJ_-v$MYN=w;iq?c-F7%^vYT<IYL+2Uc91f3t1#<0)0SK8MT
zwW~uGYKhlW7__TN_DR{moeMgB^KsD3NE?51gG7~0k%p`h^D~Ysy=0qVLAxqspZE-z
zUvqrE$~LBtYpgp<$SxmO7!75&qQEm~mi|dX-vt$oOB*<3u$O7X88NqWJf0(KbH-as
zVz06*TF-BNU&-|2OY{J{l>nYWr?hVIAIMyAPE%365gkV**y$#7_1oq9D(J~V at kVqU
zZirJo8!iXWr}yr7!eoxQSF9*`F>$HUbbubUVKdm=k9yB(>VrQmj_>aX+->ElDm>3v
zVfFVl49m)Am-?D3%gR45+nHvjpmLVs_y8Z^f_9i_*P3?TmlE)tul&=ne at B$VrZWAL
zu^lJ at 0z0anN6h^&3yR-&kN-MHi?G!VtMf&8yts)0Dl*pK;%GsJb<4Uaz<(WGT`x>s
z0WSIWxprdcujq8zrHN+GGJ+`z;Kvee&UK$l#Sq7I$6m+(nQ*Tb`$)jw=6v^sR9tZq
zccyifsl+<IUkTQjL?=n>L+5L-yz%yicLjH<BYY5+lVg7(-$wY at Tbhmy4+-x4ExGZ)
zcaQv`pA-7>y9w?%rDqcN50|uiCl|JFq)TEP<L<@Z^TXZ4ktq5;>v^v~PC4g$eh+u*
z2KC!|zqRLrI2JPNBn_Q43Dp at J(L!Fx=cM6F=Y7f7EALHW9dS;%VbtR78P}}=Nk{7M
zPZ at rHIWLKO#IXJdfKRkl at IW{F^?ZU)Z|f at s-TSc-qf@F>Rj@!I`}ItMPbKxqze{{&
zPP^BS?Ke85PIUwelw84Yw&9it+ at J{WHuJ`w<-3{&3x9Y_F`U-4#}3R_Ll3G2*O%{$
zGU{J6@*%$C(laK7z^T5bzi><JH8u`>?cU0 at f@;iCx4Ip|;ZGQ2VrE`IB8q?eCAdGD
zqJ{kh0fqb0-{f(_Szf(2ajl?|1e4}9)z2 at Ou5NX!gu at dUm11VU<v2@>?5zv*!#=|N
z!TxXfq3itX#9w at MQUYIh{S@?%h1!97Z+z;(JFK5493IC=7BfS>A~_Jts6}6B|Enr~
zZ-77W{c_%fe7)k{5LOlER7R4^-|E;uP#0MHCzbz>9W-3TvMR1=PY}L#z*%0qcYLj&
z7IVk#_o+H%fv?A;23FF)x<=omwj#nAX^`4+{1ZulW6&Tq=ol?PZS{*h<9g!<3_d4>
zdB=(hXQWxG)G6AY`p;zRc_F-UcE{qn&huP&;#N0sMp|0|s*2sQsIK+=2kb}!YARtt
z$LKj~D-j%nu0nr1%pvT2f;&{@f=4B2%#2-wDURdb@`!NrdEn6^SW-0NXz|<!j7Uss
z9O3#(i|6z$&jAlbph(ge5H8~?%>=FlKZ<5)nZij(DOBr3nY4ern7Zv-LiH3=WH7og
zuJ^ru^~^kSz{#&*m#o|_|8(iXYkH`UWx4QfuII>M1X1!fqfnH;8khiS^6s+_aX$y?
z#8VpnH>K~!QK2S__RZFnM)INWAbF&EmoDSw8#s0b*x_DHx}|veBINvah}oU<vzH^B
zZY{sx<Gf#im$53HRheFf=lScRmGVAcuT2<3ky0suwKv#hI01*R#ZjI;>q?1=RHn_B
zf`MkdCr9vW+_kp}9GWs1BCktr_MbVwq&%JSPY42vG%cz(<+gf83V6wsD<V3;YpYMq
zp7M$5Wj_`opXfDgL=3z#^!{>+9Xn-RQ}vEtSugb9OS*P4pAL)q6SjK9v~6$1M$sv`
z9yFg{7iAPWSNLAB>+s|YoWK2vNKou<vdEp&wPvLVD(^3Cb at BH2-XqO*ZU!a%Mia$f
zgH+!=Goo~wbAM;@Elj(i(L$(jc%$E%qaXP#_JT$B9lU((ml^(P#CD1B4VB*fD|TAu
z$g9<X(rWGbBQ;zmDuzdKv|&@$(e?y<W_}I$!x~2U at jV|M3&nY-(>@e7&gfe>RX1+F
zoIgabYVN~plJ5gHp>OJ)KQvIJ>I>1nTYqekCz`*Tv>g?5Bnv(^k-{FlJPa|zq0n#V
zR7}6&Ph(}q!54i?{rt@@9W)$Q!ji7F8GU4xSt~P>Y|?U+7!ZDl!E!Y^;QJ-}g(2xu
zs8J@@3=N0JS2j<q3{3Vq_Qt~987aa+Ub1W*(7VEeD_!R2cC4wr_);HWz^+C=zz`)r
zoMo%)e>W`I9q&kZ#J}EO*L_Yh5I73p9Qsz+b734`>^+Jpn|o;x)-}8uIh8xu{@v#U
zEf4*9rgg}&4AQOrlkCSI4xJII9h{E^35HzYb|yI#ykYOUEmn)Uuj7#vt&8Jz+Yg&H
zU{eVW7t}u>aIJbNJ{Nah<4(Yq;M20gBY1*Y!v!j)Vea||xPmH<W&xNa)Cp5{7jT$_
zF9rs33)i{bTRS(2QG at A?vq!idQ#V^r<Q1XzqQ7gZUb+4A@>i>j#nUb-RsZDoBqn+B
zJx#Zt=kKyz4$xv_N>Wo%#N#C#!A*=F$Zr0$il6FS!r!P^C=pJg99bz+9lRAZZuRc*
zhk*-LMJ`1qSmqU5Nuv?>$0@{TZ4-k^u4BfNBz$AYWF{3awo44cKX?^rgXB>C!SdcR
zu>8n;pZ3zQSiV%Z&*XSoAfQ$}<8X1a^2fSg;=%K!HzWHNi1p4B1B0sdSe7-N1nSKi
z3`RXqE;&QqX`y9k^OD#rlg--9j}oyt6 at 6u9u7XEibU8^iy^~2CLl491cU^Ej!dDhg
zPF`j1Z-wn4yJ=X{+P4-enu;H8s&~zGi~E#&Gj*p)Je72zJZ*G6>D4{4V)L8XXxhXL
zl&ndRv|f)=*&<TkB2wKVQrX&7-%_A8V4?MSB3Tq$i%62JN~v{AlH`w)+^eJBpRzcq
zqduVttQG5?bh%VJIkh{H9KWl&<+XK`O104H6}M4YR?<=#zfq~XB}Tq3HoCtOPtAZx
zn=hNFxb?{uT<d~SJ2&sK83#SGo>-grIGT5GdPL*iZ{gcd=rk+tYgy)g$m`n>bZzqi
z%=g$O?DMzwJ(r=bCqo=FLpS9sD{aE;-oRppy5@!?<RNZR<(WaITaU{ts*FvJ8EU^C
z>3R%E`|6aHYnJ8Tsee;`1o3F%uRSX2|2(I at +3ptH&S}iVB^F^i$iX?_YFrU+>bxQC
z(JFNm`@zKP^`U^%hO}?YgBs>;uH`B6<)%qbddb=+Yb^_NkuYBqCx3B-sqgBJ$L5_t
zMB0aL5w99?8)8W>iAh)b$%<$MY&uy;Zf;(0Kl1>?S?lo-(Uic=EZ0kK)VA9ACGGC!
zi`ylscg|@|JgZ8HXNrn{i7VkD&ZX87(}Y!3E~C;hO)_Ee{K5DhD_6KA3tqps_cFi8
z2?Ooq^=9C(vBLg6{j#gZ&Bhb0K2H|5ysgwF#5<AwM;&~lbBX;&;jX?1{F3%bwNL at S
zEmz;K{F03A>Z$WonfnJf_A6i#2 at 9BE`w(o?F-g<>iLS$itr~5&q}|d at lC3J6FYF^o
zdQ<576L0 at J?}Ej=9FyNFdYPtnvd50#rb4))6XnEH?mqc~B|dP|DAUkm7yfCb$w}j>
zBfX>vHGPz6!z60lVn1`>sNB-%vs2i<)5Od$Sq<I0hj*MP)m=Frx88Igl1@!%7klL~
zZpc2{Kh8 at IvEvbnAcJwv$iqwd4a<o;)Zv0_`ZZC at Et_*IUTt%S>vQTMJAsB)hpAOQ
z4~4B=O=ytx2r<t>xKU at +pc-{`0__AxWM3xjlLZBu-s at 2+8}udS3aIslx5C~@w50)D
z$(2!eTqz~Dqi=rB2t2xUb2<9v-t`HKFYLaKC|Zwon0SR%M)+#ObM+8LN_eYujnzZp
ztRUKt9E9TcX}QzZ{Fo;ZlZ5Xk!IOG+6J>#Ge4V?4>0atv)nw~8$+_aZ)YhBA$Xc7i
z_GcUlZHXskcE at HRH5w1yruj|Nn*#XL-mIkg(Wkvy>r9?Uz72SHxc+X!qKh9fa3gQR
zn50T>7dFymv#_7rA}wOa6UF{niBi*kK{M(RHo0M<@B_P-xk3F>YMCNF;qzP-u{6i0
zD}J9(-(n#4CjG7EO^KnhF^?7reW)4l_!$N>1eC-Y9E5(f`Bb~}LK3ffGK$Xz!j_mL
znP-)Ha*@~6kIu^f<YEzyLDm>fwA at K;wR^e)?F-;8u0fFk+lDWPADc)5wYLVF$bI&K
zmD$#fg9F at yex(XXSxxG7mI;ZJr}=NvG9>dpt2k%Yr1q!j^5#kspVF$q7%dsz*e8Q$
zD}2ZjKYn1%US#`(NSn5LbW##)ZxtqynkV`6se0+s4hO)EW++Y9m8}2yu&ZwWhp-W>
zgT3>WC<QjJnCh%C;JG*IuzwjkaUy=0E8!dC6H~G|=Pd$zLezq at y<xr|Eg`}3R&YPS
z+l023v-WkAWSnH*2ffegieX2AM=1`ckdv5_EV6x at zSr9iWj_MPl`0CTcNz`9p3m7=
zHXN{cduwvSbOll_s&XwWN+GAgCC$|(yrxEz;-Fk9k4`!z-xGC+ at A81gD^pY}sx$kk
z15u9o#HTEj_s9E5J$j+9%U=jM-|I`22lm+WqpUx-Tw~bVl{qCZ;?`R`_dkFCS1sUZ
z>!|7>Wn~X@;Na!t;o;=tfI8T~VMtppILyM?+!+Q%a-l38t*p7M5e_IWE9hNwR~MwY
z1CrAcWy9(D56R9A{0Z{&pF at 8Fe}DSq0d8 at h<KY(K6%^p%;Su0F$IZ*f!^d|H%>55>
z|2H$aAW`PdVDLF-1OoL}tp2O}e^vIs at jdsaE8|!tqza?V%SD_(umNLvCGdyk=BDU~
zcj4md>gwh3iHYmC?t$x#S5vp<y3-P^_>niZ@(v~Js)1O^!<A3fhub1{D}g<0vcxhN
zGm7AlD}62CFzQWaYETqidNA|l(C}yJS<IB7krwF*%w(YvGwJ2bG@((K)9*7AD*-3j
zLNqiV<1;F-Xed1fy_AP(7(OO^sX(D2{}>l4Z=j+3m;kCEqM`N}Z%*Dr!{jm1oC21H
zl=ekZc{z>S+W4djj2aMa&=Yy6hJiNW69rNYIc;1Wc^wTMZ2}zy0S#4cya9O^4P$L0
zpA#=4;7R7)dz8=Qvv}?XBt5gv61nSd_)IrT;BMgPGuNz}U+;-NQ_JG}8c^}fAxrG5
zzvnZqp7<>CuMr37HCeP at qp;KcZ7)%VKS+Pmqrs2w6Y=0Vu`R;^c7*iv-mCm%5i+yA
z7x;-)r62WP;U`s<>F>qoC+U<f?xp4@@08i<JzsK(LprSYa>*4Anf6{#$>luhoL<Tj
zvOJlkUhEQLpD at 9UPFuXu(9(<*Tb$7l*Nh2UqR}wm!1u*-qQQh24T~2=LnAY07cYp0
zsAcpo;){lLWo#{;uL$PMXkP?Xgyv@~En*)KPRN$^*l*vg2wZ*UwTOeFy?KkMmwubx
zGdwl@)gpywq)B at GBB^J at r}VPLYo1XO=~0U$@>eYbSgeKXsPWhf-&0b-3ma%2HcUHR
zpe9y$ALDd|npB~o*9o7R<iq<yCu(Z)4-Fem=bv7>@jhh3Mi^Hu^wIQZVJx)}t?7@#
z1ZrXZ)7!$BUBP_Q9m05Bp~ch7!Z=+a$mwxmqOP#5>7(*<oWXe0 at 5?W8hK5bglwaTs
zQJ(HA$L9=dpWZA#pC8ON-Bu3D56zkWT8^C`VmCcnPM9CIG~MmwGk#8}F~ZSu{DM$Z
zrz3Lwd|6|jqun at mS<{N6*Eoh-V~V5AIF?(}grnOy=5C|u6qgg%IMr^wkCWs$Em0lj
z23Y(mQN8JOhWphMN+RI5lN65#Xo3`GdED7)9)6g`b*D?ce`A)#oi+8rt62(nrqm#t
zSrK>6)Q1bRSnk(N?vu|ly0e%(h at T~OXEX`Yn-y^9FnKsMOW;m_LWX#syg^n)if9<y
zAgm%;dtbRhQ$@bkaJYfteTnw{!wq8ZE3^$CHgLT!r at eo*LE%l7*08XF<xOn*K7NDL
zo7A*nXoKMBT1^OIdTh_j8)vd<cb#ZY!uKBSjKZG6(N)QM^$orw>e at Q44Yni7+Iqx>
z*b$9i9qq=AfQwA`HQp=U5+;_tEXU8&cv(RlSK<AmiwtxjvUHD_8CXN)pFO(Dz!V~9
z at kp3~GelwL(FKO<5ZTL*x)m?SK4zeAg at 9sXU(jVkC}ZPZ(0_qo$HrLEB|^wzpIFh4
zKnP<WeWrT{p^1(EOurAo(2Tx97X%^Je0+tz34*H``<U(}ghDg!G5s6_OEX5B?g at lc
z^NBY70E9sE(MP(skZYRpAL-K`9RSZ96)9tyU*N)&l49mxV8I}UF at rA%V9KL0J1;Q5
zD2m2(y}<jTR1vfK0_O{)25cH@@<Ql~%t5U03rUJw*s)Sp+!WF^bTX~nn*tPS^3gG$
zsdz)fnJioMc_YJbkhIA1hNv)UwP^E3sNCRdQQ-~iU_!Rs;f?CJf!88k6wH3oZy&;b
zUAeXBbd5<a?o>N}uYHW%0HPZ+U`1e{JQ(xM3UfrUhB3Ltx+n<FIM(7?6u8V#+2T<2
zaGCM2#n<^BHN(RebLacij2~K at oCBURylR0tKX}Tx(Bk3je}^Hy1?n7hhjFOI#W~Ph
z!6DY at v*3Q}_;t6|o12*L)M=t0ekR_J5oc0w(b^0bzrod_yct@>glI9^jI6pr+oG`f
z#m~1+L#0(+63z^j95~<Bpd`hp<98~kDj*;^#NqO>-;w`_>wvx|nE!Hw%JZHqenVSH
zPiBjr1i<I0&i0h^(?qC~^xOwrkBa1Th^=N)IMXW at TcspceqI5<4fUb;Z+70|>r>(9
z1H4fmoL{U{3fXsuUkGqYect?%9JlcLq)WH~-_&POBFrJB+^1Q>54fm4=MwR}TWozw
zCA@&A>bslqB&VOUgegzXu3xl-GfzSC)i)UCXtdz72pGxeW5MU0Fuc*&(r0-vs?oU8
z=PNLr(HPffDKPTUC$7&YU__&je5Gn%RNEp(AMU(7w)GReNBAOe(M<HduiV2v^KCoP
zr;+LOUxZLsuBm?LDMV3UQ at _y@g1Vfd@~S5rMVX>z)02oIOHp0ud55A&Q77*SLJ=FQ
z#P_^JQ5dV~^*lk58mkWVyhU9zRu}4t*fy#NamX}U)UAkccqO)|RuQ(E>9uH55w-dX
zXHm*Cm?l$U at wR6;&8r)W5YN!mOq)dm&&bqQ<co5iAtsr6i#nbWCa;7R-L{#k<q-XA
zU#@w^e|j$2bGVJ+qe$CJ`^EC$zQoJ!MdU$1&5JjSb_Wk?Ual>A9r*jcNV{s0KrByT
ziE;M!Z+{1OJM|VjHC{JeK`{H}u#RU1S?rWyT^0oi>||k`GX>@BG-2JB3+}TMD|bj(
zLi9D`!WnH?^p)a5Us}WT4dWtT+ED1r$Av(x4fJ*6BA_-R`f71ubJiaECUH at 7Hdy*n
zy1}H at a{9M*!%1xz^&z^UPpqN(2D*_?Y)JLxbVGEkb at X*~BXn#8^i_4k2CQB5jdi1Z
zy1o`;=U%sKq%3C2WwC2cDkjTiv}-af7R=?a`!HHem`lIZC|b;!%eK^9QB0G2<1oOd
z)wA$ZF459qdpFk7hl64aIGCytyZHJto8V&tOVi?M_ywxg8uRDFwu1At9{2}K!}@}e
z5jG^lvVtM1)>^~bf)T1Ve8Vb&VV%~<;X8s+oi=#G(xt&1*2=@0rQsYlY{N>Wp?TJJ
z!-l1ic{WtT@;mm!p2@@3r9t-4v0>Lz`jXm5D;AX_G^Oz?mWLx4uF=;l9*z*ZKE7u8
zVFcGTHpSxA2!(50isixxmTQc$Mf?b<>l0(kp%H?eYn81Ig=5QJt`8>&^4y}1*AFB2
zx+6~{yy|F*6qXfs5^kESkMQk?e>@1Nwt6EyXSeg98oD-oSWrki{K2&I^h)|U9ENlZ
zynuT+bkY7Gl-YTz@;aR9fOV<+V2evE!PK(2&#-#~7Nx>Z{d_O+1(P<OENl_Z9KB{-
z<@&ne%R2jzPAZyP at d^W>1YYa~NT8L}CRi?-SCRAuVc!K<AWG^0EECPsa>a_U=z>8Y
zTxtjWflIfI;xot@$0GoEi4W|j0cO5>1q8y83wS0~nC`AY$4v1Uq=W+vD3W at Yw($70
z=?Em%l&+~El66^|;5F7jAf;4ix~_&;7Rg6~uUL|j(>UM!@&ztZVn+ltOFc at 5^|0I0
zlw35#&I=fnN=~=$SrzJ%JxrI;AK`(IebGAx-t{(??iI)#Tp{<F at VmXXfy`Uze#><N
zf5`=WBMtrJH#oL1^zPV4YBJrlNAl_=e0*%Iz`*PEdi6bi&}%>8?vyDx{^4`Ji*xHP
z+~OtIh;?Zxyh%nQK{-(;#kVa33hT?wyt4$aCtOtlG2v(hWY?GUoNSxPbMt9;ftr>J
z3XuWtGFGb0d<($(SJ^>iILZMp>x;}h3h4AHazWqn2nR3NH8khr4dPG*MAVmM9As+1
z2}>^+1=`o|n0=V+ at U$sdI_=v3Da~)6M+nko!kr6Vfj;#oQ at 0$sg|AQ(MqW?|w5;El
zl6B-2CVfiSb-^YOS-;;ij91?@rRgYAe)$eTKGskmRlQq%=ajCa*q#JDPpp1o%4A)}
zQPTaAI6e)Q<bzQf9QA-#^~F;j>vZlERUi`_L_k at 6<&@9*^}Va!Gr^W>!gJv`Pm%SE
zdUucw9B$)Vj^g4`b at ZEx;=EDspKscVi$>L3Zt7p$7#1gtYM<TM6UR_*A=zj=;sc<`
zT&w$Lt!s%mmO6!Q=0QZw$J0H7S(v+FYUHa03U~R`5Sw`eciq$on*|YfwbZbMc at KA!
z)To68EO#lBVDfo6_uD4n<O_`M5R=gOd8oUANo4#2>B-3M(qx3*=O^w^0MpD3xVxAH
z4t;*>ZVy14xo>+5RT79gs!jPS9suENT33l6>WwyatAHbt#x`B6Zm!jdZK_rA0eENA
zp-OD6-fNR<FCG9sormi+RkUl}IP3lZ{^@wQ{$@`@BHXX@;TEws!|8*lndkdgCE}uH
zXZJ5i#Hi0a+P@<4M18h at A7A28_e}9VwM2aP?AHGInrN<>u>H$5kAd?`_dzwWZ)S4#
zDQn{1%r5O?*Tnd>3vG0I<4v}eZL9#0snu;`!kcKaeRt#d=$vE=(MH43Maj0PjoG6M
zlCA0+{YUtc?cEz&N9Su>xHj64K(%deHkOXCPa`Kkm+je~+^lU_+w?lZ at lBJQBHDkR
z);$?@#N+oqZPVsR#IN3TQ}0N?uVHf2?daxdo#dwad0h73^nj3Cj at R#BQL;6^Ppall
ztahKASXP!8B1?8#R-0H=mYhdcg;=?f%t`hRv3espuB>#7A_G}k2m at WVB2#SG6}p#-
zjGAHmba{$5`oi$(p0_aYhOyJ-v at jKgQPaI@VRQ}?r+d?KV>9ghvvg(#P#E2_Easi|
zUDGS%jIxm1N{`8)vIe)+9+Q*G%H4)&lj+Fn+*Z{l7m!uGt^AS9<$d!I>9 at v(XEnB9
z$_Fb#mm}mzdbNS|h#X$8Cb0C7qw3WyAz6{b>Aeliv2x_SIw+C}Iig-I at 9Q;Js$~(q
z3frW|vVJ_b at UH|mn(@ebla_wc;8F4Bco0TxVKsarWbybaM{{tY#nY=?O!p0$9$08H
zGd;8jO<>Io`C{=PfyFvx#3C|*Z9Zh*!e5`6ETqXIM4vS-WX>W;pG7xhz#>AQZ7}4U
zMc^>=`x;dS!H`aiuwmBHkQIxE!z`{L6Bbd!Y&#*xGxvm<2}2rYf`wTlLuP003$v(&
z^v{F~vvq}R%><M)bB46fgqE}Bhb+xJ*i#$7Qr2j{QC&{I8tOHJ<76s+iKvO5xPm<N
z!%PT(>q8c1f&d5~GBgw6&h{x}cP4P}>eo|-n8sK|)<k at Ucxk2V7jg2Vl5?yn+q_Tl
zx#(MhGpZGNi^A!ix7qSmgkQI8)8{P>r=M+e=dDozleEe579O#~O)e*DGvPgHg at O__
zGh?%%l!>~TkG{y*Q&`C-LagHqtaKAqt>Z<k)Do5F<2<ZP64mG9v8<#F6v^V`tZo~q
zki|1vK at 61Q;-FRr25NEfq*ihOHjUG<(lJogJ#9Y>17_+r!=h4PQf~9yL>ib1MiW5k
zNAv|_RH1w$cS at r<pll<Cr7`wUu at MtsT7=#hF#u*jsL+V<PV~(=@=fIt<()VmE7KA6
zop{X8w?q^PPY!p5L}VWr>p5ppGu6g5%v}`G^rcs5?R5^PX8X{(0bpF_8?CL*p-)+X
zlg0q3%VN_y;vD&uDoIGaD<1E&^t;73xwZP7G0Jni at 9yMBv(2%-Gt7^%n-hI!;t)+W
zSLXa^9Qe6{Jm=)`lilLuh;ME!DUw5OtrMqhlzzzLn;FAwyRFBY_r$LbIxoITZP*MJ
zr(}%^nsH}VYk9Q!Se&D~r8uJ+xmi_piIuBOdDA(o>T+n#rr~hM(x$xr{)9T)1b!2T
z$07NfgX${!wKlI!9FNn5Qk=~UZw9}|Q8M3d_{Gd=?W;({bA49cSE`9ad^XxwtBI%m
ztgsKc9z=Run}?Jc{T?|>UU*R(%bWMv>#PBxS#;Sgtf8T=pJgwyJ_yaW$R1{m49%Iz
z-edJw%DQ~Kvwu5ez=kzM>2+-OXVxI4Y|ZSCtPx5%ec9Wrfo)m5*&VE5ZLf>6msuaS
zWjkk&vqrV$Y-S(5zQ>vc%6|VknDupN_RQ=1tl3K0eXqk=bK0^uUkAL-V$E)Q9s2t9
z>+G+uAH2 at Kn?3qE@^#MF>~0;Ofm;IF5!#jmvI07t+Q<Rvx7vByb_4Qnbyl>!2BciH
zQ?zXc<Xm(nwA}_|zG<6gap`ak7=63#qa!(BN}z!`02a_ExNVx9aW~<>kU)?AqvE#+
z%9rvvJa=;`Up438-hGzzf+>gP?(3w?%p8ilnMp6Lb42duC%u}_!MdAa_<}5l at ou(Z
zW?T;G-Is<hb#nyn<{7>k%pth@{6P1&H_^ui2;XY0XjTr;ywzLLIvl`o(YU7haDdoF
z`<m8=fsnMWb%={nimuH^0~fUvJ at SuoE)Zi~y^lIBs>XUkAKkuYR=jk`SsS?KqBo%>
znRN*4xn$8~(+*gElf9|a{So<1x?20qN4szG)jDe*y}n8LXs7Y_>654m^!v{n+Gal)
z9JS3!*%5t8_=bKlSTr^=_xWO$Xi{Xp<zj+pTx8ztV!3E)<QtO3`=T*wxsv at 5lxB*`
zjUg74Qi{^6K^V#~MeWrP1xh{zVl!xf(oIpd84^LMr6?~9dZ0{F*3=cUwwBIUq;tN&
zTcWGT;>-+Nx?J&slXOteFdmn!{i}0 at cUEpX+gGKEqWot$Cv$JJa=v`6c#xlM_hqyq
zGCybOOSg;9#4VwZ5h%+ES)qYW6mmkk>|-9vZeo7H!`?+~!o;oTn#+v|1Gipd7oiE`
z-JY8+!@ES^)F;J0R!jF9?e_Y()TS-$3}K$IKlJzPNn0Trl<|EXG-2~i<EDz=@mSi+
zQ%=vlwFEKgsE?Dtil&6-`G>Dgo>i&oH at -qVi&CGx`U>-`NX at YMYEUcoVWieA==8!(
zh3?}96R*_NH{^>!o-ro5 at ry4#6HQJO=FXq&_Ofj&RV%$2wA(hUR(mr<wJm>~_vwYu
z5{GBbr_8dYYo4z at y>wf;>G|f<tKB8cgLH`(L`(DsSrVC1OC$#`Bwng7 at g3w!yy{-U
zJ9t*}f at _KG;B`&rn<c6PF(0kTzOrw-2az>7YhP%$eU5KQevI0VIw<sgmiE==;GJ)V
z=~umjx4zFOzq%b%pQKBERmY})2WLD;taGFf=WnyM3>WBfC+WH`M64o9(kd%>TSc3s
zQ&xyaMTMljQP4@{4oP>T5Uz^!qZS6iv_uA`Y>0Ji@)f3+5U6G{KT{sWrY{+v>3ORa
zZ!$YmPOEiMGBwkyR;Y8bIMbU}o6Y3&ndvN6pk%ttEEem~<ja{aSfEP44}#~i*t8{s
zGM{Bzu_m)-zRtFOolKdTnGL<0ESj00Z6hJ{O%=1hho3h>m8Ab8u)<cw>+b^=%&JuV
zgC%?`syO|<DBcuR^8Nu7--Ierf4{eR4S%%?qW{CTz_E%SUmZSwV22rBqc`+HlKH$H
z-*`ATeW#H1V+#A`ghK156bPn-5bM}PcxFPjbyA{(bwZ+bT%!Ga!aM8KL<Ctvkadg!
zJTBp-b)tcTZo(7mCkFO|32&`a3=o0|5%WgHt#Co34&CBTxR6+fT5<cbpjU at Uard$i
zPKOk-h596I=>s*7LMIP${3-X1P8Q_oQy!a65#*;k+~l2%$dNlddZ)u|M{7Jo9WKa*
z`>6w+s>t?nL36)$KDQ2IWcQKTYBJ7zhKH3ee^e*Q)<<!^?oPa|zAD}~om5+c05I&t
z+3NK!YOzqhRP>RTO5Y*qiLQZt#M?mwM8n9sU_gW|{YZ;oXvE#;Ba4C$B4Cyy!@#1^
zZgyl(&|lS-WTa7W+bc))a_9 at eL{$f^BlS!{D6{6sM_?&w*FUl?D5GyDpWJF)Y5><w
z?zAowfvW)_wxu3$ljQFCGAy{1Q43kA9Q?LX2U!^-9AeZKR|<t27<I*!k;3JGK-p3q
zxQ<b$ZkYgF)u?^2)CF#A)a~oAG=^Q8VQ)os`dEf!?4w|Dr#;?SUujXEJ=NG?Y4M6Z
z&RDN&QHnkJ*nn&Cggwz%zpuHBx-PINwLcuLDNS2J;0*f%lQ8_@@SA0gL&V-r*m0N*
zhuC;z0sV^5>H5)a*AigGI_l(Fm11^d6aw(Fcr^-htw=Gq88vV%1=g>l9<DXUX5^!C
zu7$udb`<LR&e&XURLAu#u$mopajl*(6B<RVFjbB?6dJ7vR!*!Ih^=r|j;$7Ytw>Z(
z(iGsVT=yELDO6bD at fuGpxUs_GHJVyzvm)a4$)tdMh0$xoq)=}~z-!`D!Q at EtPF%Hp
zZJFD$u~+wr+1eP+PKJ+_UrE#o$>B$d;_el^!@ioLH!D<!gEhr#D>#R}zRoS?3e+wg
zSdn7WFSOLeW^<8Um5!WMVN-M!ikwAZGtVk)IV-}ZEh_XmOT%VoD%?41l&3CN$Z{4Q
zb}%|YjCte7UplfFv&N6Ubb=X+#(#o30zUv2KLT|!FcyrTm~#{{=8PYkbMi2jh at T{N
z#4^6FH%#gzXUwBF{=|{dm_={&i4)XVMDLT1BdIZ?-iVHqj<JB=#DJrKF^AsRfRl^y
z&E0o7Yn0^=06emsRGyiiXt!!u9+&^bZe_H*G(W{|O|(2R|IyNNMR|UH^3tkjdFm?O
z?#rb)&q|5>H%ki#l^71`RG+acudlKReI!7dR!%$Ir}}a-y>#Jd;oWVA5~|te3MYrE
z<SC{T622S94fHoESscD1O4O146Zk^?ozBG*)Ivj@$gPR<Wj!3uVH20jK5`s>dwOa-
z?p*dh50x{1x2!qOWog{Atll0qS)uAsJT_BWVee2mHtkwr>`*o~yHnxgP%Ab?SRn&6
z?o4Eb<!ZUuwAx98p75MnCEseU*g{t&-s-c;&zzNPtFJ3}(!|;(TfSCQZm4(dbxokk
z#_e~jD`!_LyjCaoP7BZN-5mGXt-Fbe8jk{c$xLd6&FVX^X_E>)Kc3aMUbCMn-27DH
zep?^^ze3zQm0ztsTvu2)cW!TOO5&vRllp14_zBNRl-ijIrrg%|qPot=Q^b0sR=4-m
zJ93kgf!l3%h^lX^<n|I*roHz}BO<2g4-_SefK}~*twcrCwB>=mL at BViec(B}zbE0Z
zzDN at EHAH43QT_5L)3;XXvCk4g>R+_>KT1TXFZJ(lOXeli+iWL#Tc<VId>iq01s)A-
zzw>rT`>^nB-`m%;j(j`F+uXE~{9BW^6Y#uX`=vL`v^oCUoVSN*z25c{Z>VXL-nRj7
z7vLen_FHdz(+ at -6z8x*piUu6i_#+mn_M3sn3SX1==WBuxUyP3L-m#mUHx*l|eTY~Z
zJC69YQ_~<>qND&UpLdK;j14f()%j6P4!CVi_z+F<X`jCL`{K3#sU~V|>2Uu9cpkBc
zvtREUeA-6zt>Fkbm6CQ^;Q(>OEIAsrVR<Yp`AL19<d{KnM14c+m|t?Dd!6r?U2?2@
z19>biImxw-cT871%(bC>%v(GDW}WSrwRZH)hTXAf?I*-K)p42cqsis6y*%IK$yK+#
z6yNyCmEFB+-?Yg!qP at VAXvyWMz2_$hlB?=_k4_#-u5|AepFEXZ<Jt>5iLG6JvzK#{
zRJ)4UTRT$qYoFYiJQO?0uU+t4-#x}W?UCG+Jos=D;`cRef8iv^?~CdF&`E^f(&YZ`
zN#N<CWRT3XqwwX(lP}BnE&a9+F;AGM10?NFiO$`d(fI%SVE8AW|EoY`<kYm}{yD3l
zANv2r^M4*bUfw at F|L5W6<^G at N|Noqo|Fzumz*`+iu(>l7%xuX5mWH8_C}*g-J(w8@
zg at P@haD*ERCs-DE>qFNCY-wxmU<3W08|DCZbg_WLEWuU?dvllrCs+aQ;b at Bl!|WXq
z&M2rA*xDIk50-L<x`NSfj{K at a+uYUuu8V^WSlZn7_tk(vziQWoI-7&Pizb6`^l*mR
z*rGrjfB6Rj{g(4g6<%&`KCp$yFO}HA5C=<6uoN5))<p9|f;FK?sIx27it|?{@LA0;
zB*+|$ayGYu+M7Guff3ffGJNL(0%<^<?O{kH4B-HVA;Gp#XDCpYjkCD}pgKFCJ77Ja
z7+^7H8z?&%g#ep7cz_+D&PbpD!U6?Y3<j9M9Bc`w2Lf`UY at t8xWNC@8cLcJdGoWk%
z?tqn{4oIMd=*~<+#{w|30-Ga|2uqkbP#?$&Vd-KIbwHV;(DGQr;6NiWqdA at x0Ba$v
zQEosJ)3KaM;tX|kMp(I6LeJP(!GIQrS-7B}Xc<808h$Il4u&~c!d<M;lDNT8wg?v#
zAdEfiM at 8rw&YA{^R?r0rD2i5x9c&LpYYjT<AV^zw at UJ@9(RFemoWV#a&<;Ru;Qb=B
zq0p at UR5e;hfGuD%phD1h)16i1W(#zzzbSxj25T2*2jJBupz{F*tq@=&f*p)>vA7Gh
zM4?mA`dK63K%Yh{WQlOFf}stD6a|5_f%?rY5U$WO4bGH0v(B$h;DA5@%>Z;`v{>j?
zITP%A5BPo$jI=d}!$B6%A65gz07eOr^gBHf4nV(f2HPWm0r&UR2BSP2q1NU=MV#M-
z`h!ux_U0bIpahCr!K`8Ej%E%=0bLIu0H)?vR%e=@*%)25qq#F6vkTnZ8H6^M6%+}x
zaX2%#&G)ei6hik<b4!2;FmfG!vnuk>HKEl80TrAX%p4B>y9|Cv_fw8v+yL<$;2vPu
z at 47h%?Q)!<4(9gXTMJDf!GIyr?ecSYK!H97bw1<chH$n*g6V#95p-yc(ORKzfauV}
zmhQ}CK+CB77%vu3U?icrx&Uo}ZZ}s1?5t~`%R${yz=#2xJ30cx%iIDEbbrJTmjiG{
zn;rCX+yM2MqrkT2NWk_`hu^G!#uBLRSMRn0yEs_=5crp<pflmXXBz%ht0EC_^r${-
zHgxAO2Lml<1F%E>7{9<BOFMHLz%K*i&;bEL4>okhf4o!uY}T`?0EY#*dnnu*EtH}h
zSYBOC8?2=+udOGgDF=pVfi*PMbs at 5HvS2zXE#NyHJ6I2*t*EY}4F+;(N~viZfYs%}
zQfdZZWr&(AJ6KL%LsL#m3#6_IhNx<&K;(clh?<Owjx0n?0W1xaQ&ZOlt3XsC+5l5+
z^|PWsSV82p(9BfjG-VV4&Qj746^OP0J4ha)tp at M}gwq5|fi<KwwIMP(DpHzY4INDl
zbuBr7hb+KW4WcHm3DhE|DhDV5Fp^Q%Fwlf3C~C6<g|vZ0c96EFl&qYpl%_H}7+|Ij
zsH_P-%fbmr3Ge{R>7om3DN3oRfTbbYTH2a&QmW{@XzM7bsjJF?<kfZ5WTmtr>S|zV
zIY1RDX%)2L0NDU5$f!s`RN29 at QmRr4Xmx&8g3k6`onPhvp$jO;smW<dsj!2!G~{F;
zXacY!L{m-%kQy)?V0*w4Kq|mVMje1%w{?I7Am7g_*g<-Va%Xw~3P=I}GG~&Vsjmj8
zi{_)Pt_c|AhbVdwEjf0ulqN(A-6Hau>VUZD_EeWY>j64|J%OwcwIA}L+X$WZx4i?%
zg)aTWin4N2DgZ;Elc=Hd0#^E6PXc<EoVz8|5g2R8pM(3mYdmwK-+d=AF#%)pyAuF<
zw1NXLaKERWk-)SBjI6Wi?YnpT%@3SS>VTI=yWTVR0k}tCCi?Drtz4mi2SlR1J;E7;
zKsysR7%-8drxgI5AimFeV5B)5s0=8D_9<t%0AFbi2a5f0iohWMgC7R{oD3bEVL%Z#
zXBY}_CSY?HV2X5xdH$G&(f9|g)tLqWgP$6pYxzxn5E_)Q1D+7+2+UG2S18<r6Ugg~
zp3Bhk0$$k~;cWjy^)ugSi4y$@6;NOsw55Q#4h2Fu+i-$GpfkjUmKF(?`PZS7AR0QI
zAvFYGJOHWvec<#T!a)Gq`svHi2D3hs-uxfKL7-na2r$FHgo8lnx#5==KWnt_Q>^8g
z-Oo at 5TCm?*?K at 2TL!V#={X1CcJD3Kr66lv4XFdJ at 5>`3`4F4Ok66pJY{kO0Z=s$>+
zK)<lkS at Zu3SPAqKm7U>&e*r6<VQ=K$!AfV#vwsXLoweH!tn~Zg`v<rL%;&(e>^}vU
z0LSx3?+6(1pNC5zy5Ea?wr-^R4?`x91L8L~^Djdt(0>#%fqp=yvsw3FgG``5LniRQ
z0+~R67cznW8OQ|EmeN&KQb!{_DaC&Y9f5v<#eWAKfqnom0IvQU=m_+CbaaM*{%Lds
z`i?RGgpU4*v;RqSgogWn7%0C1AN0EO?*pIjkmer)KA^t_KELe(`~~m<oo)R5UdVq0
z(4f$}LTIdU>umD`#0h)=wqbx+i2^YDY||0U!_C9b4F)!LggChQIC#0i+`^)KyrKdE
zhG0t%3k1p(We;Wm{cHPR|F4$%C-;AW6_Kp!Ke_#T7Vq`H-v8wW_Id^WwExR3D8%zW
z`@jDu`lS5XW+8h266}V)*gzeCt(4#PZ_zP<U|<z>w$Taro*z5G-x0bIk1^nK(5ovH
z0s%*YkS^%W6kzRzULJw9Wi({vfgud!5(V3$P>!NpKf(t&kq8%OODM3ev4L_rKvDlQ
zWdBdJ^xv=JpB(?c;y*bofbFV(EC}?!c>W{E&nxt&@z2jKAoxGy|L?che>U}J{O199
z{Ve|T`dR!Zwwv4K@$(n~Kq%-1H#fJ7m%xgSW!0xbBXDcp*u)Ms>u%p#WKI6pqC=NS
z-{S)(wSO`E^8lYw{=aYdXU#3sXQ_W1{#hd})1$F1K=}X&|6HU3VzT}N;h)<aqrv}y
z at J}%mCOZ6ccTo@>{z=<&^LzMb)FSc!j_}X4>Bj%2;h%o~wT(CbHvH2s=;2hxo}D;8
zI{Z_}o#8(b{<&vVMf at KK|8(2KMu&f{ZP=s3KP9KUzK4I(ZqWbl2>+Cz4}tvm4F3eq
zsDOC>ZTRPYDE at Vs)*-8_=<rWOi{d{Q{+Tv**+4oj7J7R4zY71{kApM(`{AFP*WO8?
z!#}-%_uhf<PomE>-@`u at fcM+~BK%Xm){Hsx^D9%q$3<y(G3Lx)rpLba^G?o8N=jRb
z6a5MkraU1(CbpHO43W>gZL3YmQ9^t33XiP{Wmt2jlkFYKsODF=w$e$#zVamf4E!vr
z@{jtj at H48CQYI#4X24*gNvYQ96fmZwMC%L#m|#-Me7XpXGbtH(aT6wyltz}01-ovT
zK$al~<1u_1m(B=dF-(fffWkx!Q+3lxVT^`}x*0mKw>@nGFapCzgU{Z=t{KJ;K2PgE
zD8aB-r0Q)h!L?UP?wv2evWFP;4wewuE06W=lwhtXiuHDt;H at ZC_O6!T90&M9y!uQ^
zgjQq@`+Q3zuie7wlR|MHhZ1JUd>KMry{4wngIH7qLfkVg7xhIWBVUm$$^wz at nOck5
zq7iDZ_!d=wfcH$~;vLbbu2*=A(m>pMrt+d at ML6dxwnZf%{5{id(GYm+`W4k;8Hyfw
z-MXIx#Wo>d)_)CkV?xfY|0arSLSeTba~ph9mZ+b8oB5`ER6of!!%aE$e!gvX;H~I>
zyluK_S+0JzZPse}H~nji1fGvRJ)7(w+a|15_DkPg^f|aE at j|jsVVlQCI<3!UTf|4o
zv`=qaz(;1X&u#lA at J4f=IzCUw#pmIL_nep#tU_Vd3D8InGQ#U*sd8q-1`K40a^|-U
z_{mb5%y<mg$&#DQoeadu(iqKf4d`|#lsjSzUa(UrcWD+pW+zqd>?<f?zoy*HTM*7p
z(%w;2kjqZh-sN2Il%2f2bF-j|owmIjR1lDRiLE2F;92ffwl1ZD*xV~@ooxk0xzudk
ztOcRDmvcH^7rf4;%;~yYkd#Z7)A_ZaBA4dy>3|J^zRX~-fVHZ=)?m1R4Trw+VCY+G
zdwrw9$hS7v^c4m}T&#`t^#&tcY;F#dFDnl|`espWkY;*vr=TX6cBvb?z#o2zs-wn2
zW>{lKfU5aHG4V2$U~GiNbH8 at Wp2_Csf<iboRX0;X2>fz#M`l4boHDt~x*!owmfSgC
z at D5Is+)Y*x1SdA?h%0yrr!eZ$EqDSaHR>EJcniN~)Gb(mXc!!85iIP4<BheI7OrF*
zUxVKmYjQ2V3FjL7uv3h=3>Ir7ET&&(7Hf_yCRt_>Yf>xbTV at yg&{d4LOjp^+S<JS~
zTG^amyf#eW`e?#pvUqG+&9=I7`QfBnqo3>c?y%3!y_;5&Km;g{*Zb5Wn~cGQWh^fW
zR at 1_vWdg7EPeBnr-4aK4PZV}oZeb8A-ohlifI%b+#w1;=yCCT3PxKyZI`E=YBUtm2
zNbqG at f@fI0r`<<jc_9AtTld1X#uFXor=}lgPqdry<c`2+ at t@vg421ts{HJN|WBQhV
zEdEonn`Jj_e=hJZ;y;hYR~KxK(|vouwpaN<lsKvZnNr2+9zArn6eS=-9Q%M$zd4l>
zywQhGuDvh4<~K0O0v{8(V*LKDv0v}d3i-EH$sy09JBKsfx(A!&-%>Lczu8n*`=yLY
zl5OK2U>^sZ)Za5R<7U1}?M;fmuQ!PC6QG{B)b~h=25JzR;xtH)O`Crst{2K!X(>3!
zlB5z4y-E^J&>VDkHW0VI(M*$DB;m3O!HPOwCJvwUT!%&nh)PT>fn>CcU><8L5Uc*Z
z+3f;h{mbkGaaiqvr1fnYldsKO3Yg%_qh`hh62q6gsa_-Sn=;Li1&qU#aJ<sfiCnh}
zVy9eB at qbG5^Rw=>A;7qP)l9uW2<X>DgcooEW$LG=6dn16$*76cF5C#zs{b;j;wUIg
zPU$64e(4TACsuqQTm8V4q2tXx&T`^$d<U$_hj}hy<s{<-z86=qb^~$h8>T*Jj6I)n
zT4!*l6vs=&;R=Ya&zW*rXL6^i!uy0n8xU20BT{(&zE+oeoe23I=OzK6apw;=i9R%J
zT@<H_YNX#{7H5rWe!g{8oJm at oEUI&My<D6os+(l}zBut|_>FmpyJqS#;u?o~m)89!
zET>AQuP1#6-R}ZtRm=gu>6hwn^EuJo8aT3IZp7U+HE`kcJ9h`*<chg{cVClx<e!7w
z&4B|f=9=7{OakIRzjTKI=UB|mx$pb!93Hp<2U^IPgy_xdxa*ii=q(7itD1xj&AYf8
zn?(6_Ep1^}T}L!hZ824`Aexi6$f_6-O-5USRUC*9V_Sqk at KvMO7H1XPT65(V%@N)S
z<65iN#-}Qxwf4h}6Yq1hEjSzXM{E-JiRMhV%)Nza>uaa!_n9S<fY)UAg(Xter%3i0
zBofu9wf6ZXQo5)3_Sq$pyQh)+;u2|GQ+WGyH3?kP%KN-EPv1<j?X%V-y_vS#7p+M}
zOigY^c#}+al&$A^Q%!cct*3aCPj>FES9{Y=b`z}w$CXKTM6Evuz*Cp{`lF*OlAYb_
z#YfbV-CXNoN0)0m-mK>UCuwxm&I;|R`iA*+BeukjI8Xg2XLt88Pu3T<cIo{ZX}4}1
zvG_HoZIK at _`Zbwu2_13xeVE)LI-);ih^`B`$eM8R0=cwe#(gq*{ptJU)3WZwQnFWK
zWUYwhWJ!BvQN%KhR|;j}#0rh18?xRpw-~O3G}_P=D$>P<TG72zysjClP4`xjzAqF-
zSKR{U4OO8lZlNm*h0|5GTz3w=Ls!;9zZvRHSIZ0rg-SmwV5SQ_**qj~l6AT*{rJjD
zS=ep)$E0(z9=D~muRM{3-j>rQ9guaoE%WipTiKO at 4HsGC+v?t&U&FA?4+-Sxd-Z|y
zA>{aa?*OOJ$g%YrmJr*^iS?SGE?twm(Q5#lr64ENYrK8QG?+_Hy;pgg%tzL=SAClt
zv+)*>B0iaEP at a%1KB;M#xkdR^;?mQIt1R*%y%ynD*_uN(GU9ME60U|qG7{J`gR?D?
z5;(1c6VX4QG#~uVA~k`FEI7y_MxQ+{_ at zanKBsQ*6N at MM9D~7cEmHKk1cM98LK@`@
zA#gIIM%_YHIJsD(TA}hXnOCDpq53j8PNS5QA~l&p<83DuYVsS65GSRlWHyZkPHIod
z$s6UIAa}_08g-mh?~qT1P|akPGuDuoHC=PkI|8qU9M1T=GfVGEZzzhBsW)nEsECtu
zH7ai?RgobYjW*P($Z4gIX`60 at FvQ7fwpxMTUC~rxe2eepcH8jFi}-0PcZ%yJ<hSKx
zW1v?kbmSlPLh&iInqv#0)D(Knk2av^6E&D((}Fsc*&nsM$ly&>;nZq*%=<)zqratu
z*Eox#x&zGDrovm?L08-c=dJ9xj%>TbTh>9p)#lAx%MQkClP)S?rwePdC at KfeCTY_w
zDq*K at Z*wlH$_2BvDHRpv(&e<>_4DwH8GsTPXbr}`g<dnz8+?@3eo*8OXQpaxE((FO
zCb!N5N0zV{wGI|Vz}d!HcYu>in8jMVio$@&uXVNP;gPg2i&vXTQQ0#6VViGJEj1XY
zP3m;-gbAm;U`dHEMrLlvIf0r}p#||-QA8;+&hoRqh+1Sk$!A#+h+3T1XKfKxwRpbI
zDk92VaY*T{`8E&dnmb_f|Bt=50E**#_q;<$La<=L-66O;1ovRU-5r9vB)Ge~I}_X?
z1b24}?hpnBm>C#$e)raY>+bGbx8ADv)>~V(TXnk6neMKd>C<Os`swq0zF$}z=pXl_
zD1%QKV~23 at 6GrW^CD%9urj;>}Ysiz9Q)<qERfn`w+6K&}HOTV$(sg78l;^tA*Eqam
z805upKicD3u*rrI+CuVFb(|>7oDe!*QpArJy$=i(W>gtl04mvB*9z0mM2w>Xi at QI5
zVvE>|?k3{B&F&`C3Vc{l;FECC*oF*M1hP3#2m$M##J8axm%aWJaBHE%64mD$V+*j9
zXxhwy8(5+ at 6>wk=mg!BqKJWvJ2c{N$RM)|h#?|<~r@&B^IzP@(lMDQmivpmkjQo at w
zU0YmP`6)ZP-mEh7Q+jmWUS<2I{Ad7nWoXdzQ>D}ySDFs3n!F}wnn9T=qvoeHy)rdh
zO~EuHOI1Qmx-?x&HC;{KG{Zwx0ZrC4{X;b$P0=)CT-CRll$tuYYSNk<ng(gAw3>{X
zdTDBwngW_enyR>(w3 at n_YMPonnubfNJen+;`b%manj)Z%Y5-AXcy*FpZFXgOb(USd
zUS)c9nqA#`Wovbw9YC-$zB=WswzIOnI_Iq3w~}o!qq^d(%(q6g8gNztsX?$SBr1JZ
z16ai5`5I6cUbSl%3XzHXTC!-vBNL~&zv#^)uKYD+(Sk=>S#x30okw!&Yty2`fACX^
zSu|^rVu9Ntxwc5aEshrLT4d at p&li1L!~<%0tCj7V){9%K9qqc-i#)3h?b_B$?yCdr
z`UDF<R7;-y6fBOfHa~k*v3?8{tol;5a26|AGhKBHSJtXzt(rKC?yRn_IzJQgklgy(
zw)k+?+F5c{O};4NVJxDGv6OI@<Xf9xS#g%-TW?gEahB#=w_VwGmgfr)txPyeks-1#
zuCfxGH9%!)nb#wBY*{dhSlIP=L#ie_pXBk8R8w|g&I1jOpUyXUkdSJREZlg!&QqnI
zFE|~9#}m~lrw4*zU#c`t7vW(=&BE!OV90bO*XblYx~OhCy%3C;u5vrwga;W=F*yEt
z`qUZBT8Vo48y;>{$DHnUhO!baYb#`YV465->@=uk1~8pOcP7`@);#@#f1cTOcGef!
zpXqhB)|Z^0`9j<bjrnHLJ*c;I_~w*7xV8-7NRS8976guey6bO!X<H$6m)(;0S~hgo
z-ct5j5piFIMnEbaK6uQi-p%)TkZ(O4cRahlh)tLVlRa8PL+<_**qJ`)!b6xP;}_7s
z;h(E;{L>&|cIPC?H<hez<fOqjmkdCE66KqmUt4if<(r*fZ+(&l$3J!d9sksy0S}1!
z)#q0npTG4jGAhMCr}eEex=*l1_)G8GVN|4jrs>;aRI+mB;oGxa*tbLsqU+Ihp3?{M
z_84Bz3V~RA^sndqK%zay<g-X1$^aemIav@#fI-15J%}+tuVBs^BoJU^Jc|#a4bU~7
z(+2Sb7zR~1pX5N&VMaU4UU!DiA-xsX=SYwun3~vp0tn~%tJuN}2=!ULZyo?5e%9(+
zxCS9Ts|9h6nn<GYOuh*xHZ4_?AvUjd8P54e*Bxa-l`Tit7-d$RZ9~@?WonkKL)RK*
zzL)Jy*DG&=oh^05m9k31A+OAtvRTT`sQf8qy_CaNSukZAt|O&Pm$GKTp{vZBvUR{N
zpv;=GalqlDESj?Ok^QYQrN-(<4ryf$jm=bcT4hF!^;8Z^WdV)tuk5(Wv>Iz)IW(1d
zG`1Gmd6Zc+HWoQNltpeks+@^3!^@Lw9kMga%d>2q^fJ at S(`+5rGh55^Y at G!&<Kbce
z4xO3x<vFKLzL{*38RZqHmcBWn<$zObNDcx#G`Dz{1DM3*TJ(1e&)T&L1rNt^mrUAl
z4af5APkM9pD{-exT5t_1 at hnWba}7*#H%&TljZE^~PWm_fV&;ySG;11U=9!puZTely
zT{CIdG+fJbKIz-k?{CkWt!&k_X4abRXw|i5>X~h5)wX7SpB-S;Ct&g+TQaCKaMILm
zkc4Ms(#7p}E_cPGt=n)e&+(*>TfYH!#-yd&VM5RE7c93W1FjY26Wy&%cD^YVoO@@V
zqt*`dt8DT~5w{&-c8sZnqa+`P{LG4 at EFUMM%#5QnAII&?wxc{BXVJ`rqZDa8YKy3{
z^tE5EOtsD9cJ{R`)4s&h;cZwBQp962t!fTmiKk at RI2@FSCx%;H91MtOhTD)GByvW>
zVNNYkl1YPfEn^NqF-tp*P^vOzON|X~-a2LLg at _ibpM;KdIcru8x{ka#TSq?y99eTV
zjv9O%MRRuWe!g|2)L+GGkapzI-%S5W>&U3Tp59>TD4 at Ts^%K{TR)0;aLDP{(e{1<C
zk0Xoz#&Uy)qX at L4&Y5^Mymd}RfV)-ML1SZ*w~fU?5gvlJIy&fYOt-d?I>>H}dA1rl
zXm3n;wuxNe^WIrl`mGzaw!vkI)&pDnNKKH|#XWyMkAG-*32!sLFc!9l_kBC5X&-p%
zR(Acrg8%GmA^tDmKLf3uSK<8U^Y(Ttod1M|^jQBJ|M@%zXW9Pi`Ohn^jMe{5`A at dZ
zjQWcImHz~6V)88pT!weR`A_K73i9KO8}$|g-+G*j`4&Ilw(=vr)t9F!YWj{br*UK3
zg0u3DQ>XBpQ>%_Or}&)nqYkjscl{H*jv=QgeaJ==`1&Bd<IpKg|5U4E$th0%e7OVU
z6arm#bkEteY8!I&*x2-J8 at P1u+H`6gx%7Z;273J>b&uFI^%^Ag7}<33+Pn7uE$=m+
z=V`sE>ouL{g}*87HD>6ky}9(VsRm1{t?xL0If%X9ME6?Qa@~RR!0}z at u(%g7yjOh@
zUB_2lNLNMBIT6={Eu4o%5x1Ew)CVBjaE~isi}>L_VGR3U@$vsj^~=;|SKkH{CYCnh
zyf6ARNBD0i|8%}NA|{CVPy6YmKL9vtt|APYL<+J`JvQ<_O<U=+;VSyM{cKnJu<P$l
z-Y<KX<ZnSfBnz7JcZZ8S-Ze<{Gz5^4uZ-N at NP^xJ$-(i@)&lTgkt24&BK_ at H07}7p
z1+Xe0yFg3nAN*4^WafkmJSiG8bJhgD5RI5QbpvmTCd{1Qf}eVW*-lWwzk4Iu&fqH9
zy`gNUis1R)Shn*CFtGOr;DiZ0-Wv@#s{x<&h67IR!Rx)#fcV0Cz_Hi^C;)M1mJb*g
zfU~p6cRLltQy=CGX3M+V8EOO8y?k*d-nr+io1bobAoU*!($;$Q>hI357cegX9}a(_
zE_Ff4V5l!;*Z(X031bo)!~hvXP5*&E`);V8|103n9Z1}N0sPqq576Q8XVA6tKk(;E
z|IY2d!JjWD<lz4d{zMfL+WkxZ1PT^Y;s=Utyu954?BV|(^DX%QIRF3uN&xylo&V?K
zV&{WvKL1bp&+v`^cmDtXk3s02d(ngJk1O3O7HD^Rxn1gfkKX7^<3M>4Nx;#_mKBMa
zNNb8LMD at Dl;x%XF53De83rr3wGbt&WNGt?uDwN{auix>dTV!U64+ejRz*IDMXz*tV
zt+)NRkDs?+=5n12^bHLI&T=&>zJM+_5MIBcd{5%q<$k&%)YLy>`O4yTI`2ick5|Un
z at BzhBH$kwK`_!4=jEeO{HNt9OaG-4Gwwv>@b at fuhE7#>$?Sgkb6+RG+-7Jk)GUOw-
z(1grPJ|B%oZMRp$r3fbrvPuO+3#XUmJBUi#k(ZXo3FA3}Z1a5NCgUEpV*EkClc<Ne
z8~j&fll?Q&CAVa`XhcrzY5Ud%b2wzv1<wo5NH<O7e}VnxGKX=sqk7s1;{g)eyyicD
zJ?#GxdF;RxqmRwv2Nm5ou9N+mVYt4e9!bdNWNh!0G*-=be2tmIy9>keL9RmT{NCus
zPDakfaa}alUy~Pvbm+>MPtJ7%W5fvSh5R;q at _+a1WkcQvM>at8ZUdo^$h-S?eC$Dt
zzePLYzPIrH_pP=+pU-&ZSQBtLBLougF8CgJ!1$mNcrhW?_x{Y7N!2>#r*e_wD%Uq~
zlWW1s->}Xe{=E=A+Xz3DknjCE%)}AIVK?lAV5Dy)>~G5{#Yp*3f<hyb3ceGEWw8^3
z1=umbvXO}IU9jm at _aqD6N@y<}f1meoM+G|1Vg%0xxRV3P=MhJPl*Ghg6whejnN$2x
z@*-oZpxpe=FdC7NCtZm4!OTKI5}<r()YuA*VE>5((`b6)I}jz_<IyJ&i{K^dCG?3l
zkPyuDBnaf`e&?fT`(7&QE7f;KH3c+ag94Q*t^Al2%!w9t;-%0*3Wj@#d%(vCpfWD)
zj(Xy?qz7IzbS3SSz|bT0s<d8f2F*ed=a5bigU<vY0izhp5foxy$)lgxMexDG0W`pp
zJGIf{^9O1%-GU!aArRtG=cP8PmvR^xunY9?{j|)NG2Oo~D3TTmf}d0^xhyO+5E~4*
z;~FhknxP8%(ii-c;EN7Szwx3Ne!Kr#bzfGN5_3c`e(EzR0IK)df2$m^@|0VdqI|+3
z+~3XZ6L4WtjOry3j0wcZK}|HaF%pO2<3oPLv=d<Bdx2lOW!1YM=y&Q-?Tn{|;2qB!
zJIuI#rp!eUX;K6PCg$_eI`g|v=5V at T-x1vWO+}t{zDrfxH+{@h8>skofb8=y@~alv
zM}xi}d+lBO)+-N^q5D+;{5f3EGtP~i+c_4U<w0R2R^<LC=W%bj<W+~g$Ef|Hw80N8
z`;tamS2!u7w4VxpAX8!@Di at +#c-y%Ty4G&lFI_%2kmb9KbbOhZuh{Ul<)&rEnfbl{
zaA2kK`AcY?Oi$liY`c{cjE!CXEb-{k;{%i!^UGDA?F6>{72IlWHNi^sC0>HybbDL~
z>s{mw2!(pu#?qa$lW=XAc0|Ei=vcl$SM)Z37eWGD3J`)$1GldH`jvRNriyH44(mDU
zPwT_#59>YZr|Pj+L|07v7-8Zt{pSRzJ_0g=$ZI;JS~La}G~`_Tc80$as#2;cg)njR
zALU3aXk_@^>=vqWPNTp?N6KRf9~)mAyp!2w$m{hkHSH^j_9+oe!M)?-IyO0Mb)*C0
z at 2JVY$QiL2QL5^MFxERB{^%|o=#p-cnih5uyrUM0IJ8fM{b<HJ^%1@&OTTu(PkG}-
zCNH7jaZRb5m`zzmSw`LBf}iYp6<;c{d>#ztto1^E5bKIrn%N3F!zwkul3*FwQoG)r
zUiAC at u?OP{YIX+{mp77>M^R0F-ED@@suf&^YohpeRRN(@HJIh23F_Nb2?T;aNK<or
z@}-p6_fdlsLzH=;G(AXni_p(1x=hF$Bngi3BlpARe)|nQH><<mJr!L_*XOJuWPci?
z`!S$r3G2~=%O#1}oBfHWMrd2AjSi)LTTPTBJwzT~U)|oUzAg=uOQ2$r&`a<zmii>+
zi)@QHKOsk)#JdXyP~lScgg2v~vXoxR4ao^5dQ$a-TxL-8#5ALxigYiNmG-Q{psQaP
zuf%>mi*5!*LQA}-GvL;ay%K_lfpP7LPf4$nek4h3HOcd<BbE+dEtN8=yOrX}u_WnH
zx5%=TOun(C22ejo-f`JMzIY*=amruY_LM)g7!9Z`;enRs;$Vj|FRmFyqJ6)Tj*qVp
z<xgZ!<t~59 at Rd50l9cvWwvGIJA}qy~V at iU>Hlx_KK&kKAIRATD)FeEsM)S}N at BAcb
zm{wFjuBvTWS;P7Nu(?T1yUA3n)$jf3M+N-Q0My|CB6ZYePn8Qr<GaZBsm%l<Q}zsw
z9L;UhMc0SB?Q0?PaJDi=ZQcyNi<U(O-c;w{jQ-c_VUAWLfFSxm<!kKzB~LfDZ(ob-
zwQ1Q&K&?rvGV5aEUx}bidXu0H>aB2VFRAQ=r+-}pU!(W}Gn-(e4gwziaQJ#=Qp)-1
zJp?t*%>MS~_FqToC5-$Jmuh>!?f%b6q_py237zj}zh*nKc<jZ<w1_#?(UZ!UkB*jK
z89oPmjJ}C{W*!X0E1p6f${ZwM9`-|1&;2PduJ<mG-}k95p<70kta(T++t%<q>+;)^
z at YFbWfDjR6Uli#fB=KEWK!cdiYJu>D3fVn91~dif{H7Z}2_?x$Vm<hdb6zG^4)6z@
zlV~LUNx~Q1mUv!YZX+o=$&=!8&~v-rKJ{N?W}B=u;qPOGTtzMF39S#mda+BYREo|M
zNy6f9(m27+ACQh8O;WFiBfxT~iFi~Z(arA}NuhynFS*I!Yp79V0NddD!tBWStkqk7
zB9y`m60EnY)}|oa)p2eIOQKdzbbTyQ?ePDp at Unc)!7Efooh^TBv+%mv7U8V$m8=3n
zeClfw#<%?HDBnsy{*hz+m82d_UG~q8`@UCD<Jf1mVHm#oON@)f$HKmJ(*o3=2}1-(
zB^)2DBwj<#K3~XF{<9t<`=`iL-WL=2sl|#g$egE{VxTl2g{_82T!>TN7h?YV0QnDN
z<v(lUCgYZT9kPkyY?dN?Q^JkN(fD!VW*z<ckz?~^`EfIJ#Q5JkSS+11xh{}q*m~>4
zIS$WnYQGL(Dh4(ArwA<@GUBw%p)(RQBC!aOC$N0hi at al)rz+h^m(pRu at kom59F;P(
zC}!nU!_TUWQA*{+DVvmH<Wd_~T9l?cqxz3W%-QY#_tN8=64k>fC1P0&`i9qpR}v9O
zDZ_4*wQGZ|W{cs=U+*(p{MHjKDaoHP{sBgi5=z&U<g~oXTiTY`N{vf>`FTCcMbU<x
zz$ZQ%M-S(wq%V>*(;2w{3r5wxHaeAVK<1kDf?+}SLcjYW|0pId;dck4Z(0u$yM25)
z&$9Hk$~so!7)jgxr%9Nv8*ZJxn?<$H0!3Q;6?8xPGM#lcEN~`vTNOAB?pr$+V>AW6
zd_)e??A#$|dx6?N- at bo_+C4+Ep?%J8p*vo*uLHK?U((Ne!dLX4*lInUr~F=+j<?%A
zdv7$LFKJAtG&V3H?S&U1Yhj_T+oXq&ISNes?IZj*_77P2C4u=7`K5?tFUJp_FCbnX
z2d){edi9?@ORL*<4r~}3`siQeesvc2#P6}<0RJ_NZ5t9_?HeKq!xA<i0S(E2q8Bl+
zDX=ya!#~P}S$S&-Hiv4RpgYc9Z<y`~{&HlPyG%shD#F-AMKr}k3kUyvh4;JU=X<;X
z^PeR7-*JCp!_aC>c!ZJc|FHeUvoyqDlc4N=L;T0m8{__$5kpwOPx24H=)b-HFmU{r
z#Q>47C^QKZTY*Xr5nFOk4qKj at bd=P+HLzma at Ve?@8QSSi(Mz2dgV`2>(NPenI5VdJ
z*K{nx+n?-z(s^$`x~D_E9NS_>s`KvrH{ALweIUFs$$<o(lGCK?APUdEX|P_kYmIj_
zk%mtn_Ioy{dj^wQjpz_U^EH2d@{BS({H1v{fapz-u!k(1R&m1%pYWgTx)JRrCm(e4
z5iR&t at i*d;1TNIP`_`Wpu0VAg=g;-egM=-A@|Vz{>4aMVm at qKk_|Fp156zGxje=Gp
zN-a5+PN8%D%W0{_Cy`X<vOZ27!unV>I!28&!f|2CBw%Qxfo at r?CQ6#}IG$yfdhvzk
zJyS#~^|<_@{$Z|qmBH6~hV*gGh_i}t_-zS)OVYZMW0|Ka*CMMO8;|~!T0}MVlFONe
zN2j1-9)MLVqiUwIX3691U5ngS^_8kuRoNK==%=p|i$<R|)8Z#kvacqh@{)h^D;A}g
zdF<w|EXwvJ9*ctZTg{?+VvdRFHHY>%&5Y}k>m-gvtx`<0T6Xr$pmiC?rdH*Rs>|hj
z+X9;c`;itv3)i~O<qxeo!<DM~^K!CM*%J=m<ZUUHm5tN9JEfk8{IZ7?r1Jp~2ZSb|
zT2!*2f^EKFHsieJuEn>gSAM71c}4NA2NL+47$_xH6;xBOzyykc;BIlY at 3KF|VwMzP
zS#xt{6V}CkkO`j~I<d4M78q7FFXfodbWq~6BD{?o8s^+5G;e8`UN!khs2 at i<%v!R@
zZ$iQwPiQ&(AQPr$X~0=8_^U|Jp9CSET{e}vKj}=)t=Yxh-QCmO?at-S4bAmH5J-wc
zqCtWoaKw)%n9h$v!bECMa!yK2nnSulB1GCn3MDDv7xg0X^1tNY=f7_MQ|W2orCxEx
zohLs1-a3|RY;7>>%HjCpVAB2mo0R}m2uUbHXoR0$pyG8AIU_#I(1H@%oQ5^cX0$~A
zJgF{&|1(9FTEYdw*i7=1X4He?WCnru%mM~&FTG0z^EC~J0mY0qD>XSyVt$(Ubp4pM
z8I+nfNa3%4;(^L2kd|+SQgZ1ia)4%?7Td>7EuxpoC1DW9$Qv*yZsbUoL~H-1u`W4C
zZx1Ev*}{iy&9#wPz_N{brez~Ty<tK9-9)-_y4>?$7Z7Jt6tI>O1ZmU1O})Np{L!4s
zQsju`tUucVdZxvgNd9hwmvvGWbe#{QI-jX(OR8vDm`Cvp!WhS1v)5AxNN(WeGmS5g
zvNQTjPThkZli_m;R<_g$JdQg*>%J|YcM3Vn%(QIRuXJqvsK{%x=-}ICoq-gQ>Ee%J
zG;P#AkYk8mhRJr<+xVH-pK8y?H^)hJB~W+Y{W)~rKDiMgCV!YWUGdFtNvvzh at Q3<t
zmk>rNL5SD%uN$`I9OUy8=X>cUtQBC>zA;Ugjd_0{qT7FtnJk{0K!Jfw$q(nU4SXv2
zzGJsPGs1V;JXo8LZ@#<SpLBJ+b+%uxJWyb1N$YNAOz6?waPM at u^nYHxi6ycP&|~q@
zzwJ8I)ir8eWlIRu1|W5g+kaf~mPRASm-kn*t5xf1TNTbRwO@*-RNsiBnXXJA$oKqm
zW59fRy#%cCW%04guYNGSFV$W|uOioYs%0iT!S!%NOF3aXrx}IlHcHtA^ZW%q(bH_R
z09>5|z8*v$l+Xq;-(=Rh6%0=5bMKRCJC3>an3V at CyBV$cDgjZ?WNYYs6-y1vLRrp5
zvesyaK-xEhGYBA#!GY_W<k?;=lIsL-dUDpM?<x``Q!CLYBlHwTyAwB+37_ at G#bkt;
z!9==b!?F~{L--W=`+oLGQ%7NuYvZJm`{0t-X_S?1R{lS2lnH5=hZN8C(j6PW!O-`t
z{h89AMpY<w#OG$)GJtU{Cs`V$0b^>1*O5qR41?HXD{?TO?_{X!4V5h`?U|ZlsNPn`
z`~bPG1tuc2O0fy9oDK7{T<yuW{g5^%$C)<$CRt^BKznCbJt;~6B_>fcJ>;9_pI;vR
zm<L+>%gDUHnZ6-83|)R%jncP%#BA#-d<}~R1^%u>y`dDHO?#7Kav~#`(p4yQD)UWR
z0{$yM8*xXgJDXvV;_!%gDti^?kSrPgS&TClEkvBA;9wxYf|(F0WK4>aFdVK}O-b+t
zE+osI-7RAj!g0VYfNn0&Qx)!VfC7FytPv(?N(CyzG5ypP2MR5z<?BL%n<_hCJ_Xl=
znEv%j9|<2wX#YZhEY^VR at Y=wPYt`T}i^WoLm&h+!1bJnx=|Z>C)PC*Oqyc{w_04L`
zg|x)##D%4V3yYc*fnSOvb*`heGfrC1z&$3CUqOJx(;EK8d)r{9*nOIRd^_aOpy2_E
zW@|e-v{BY8S<=`(3>dU=vl_|rDD`~m@}J-dXGz1|Y}bm}e;x9bvw^T~G27u|U`MGy
z{RiGeZp(zmjJvO*s-hG<X^7(p^RkYGGAX at w(b*D^s<@@$1EXi0XPo(+o8o<G&R-AR
z*P6-uep_wfu^ug+EtLC)J%&AFQY)`kUU4GVoii24z0s2n3O9iZB8SWQ#w~yTh$usm
zzAF})p at K-qAU%GbSm~hIDiQ7ffn8IyE`zQh-k!D~<~$Vk$^_v90u53!x%zu-U(9;B
z at 7xl0;fp9$i0bdu at k@>5*5m}_B$H&Q;v}<Uxk+vD=KZ0%I*n+jgr!Sz=ZU-&xRj34
z>))GEt3IB-nl~*qm)q-DzfSs;Se?j9Y1l%(UGgc}8^ZO95seXr5rGkx5xojsUAA;u
zZYvQ&0g at yNO^r!S;6|`T!9*Q=Y-kt;{w88;hH=>_mm8xVXq?UVb{<^X`%Gv=Xas8h
z*57D5*U+6$+y7KXr#ZM|+`nEDl*)h1_jAX2^p<=sJiltUwvg=&c_j_~Sla<f6%9TI
zoe5H92xJa(J#lzWrkN0)J2s299(G^6#vSpYjQW&cFzZW2(}{m)CTq#e?2<d_*5??w
z`3 at XHDZ6_mqLeVl2@$FLmE;;_G&EPlNsjmHx6VgJlPc!87E at AP>*Y9*>GLW@`UH at p
zQOOjeLBN4h|2GQU5GEY%1hZz<8h2^YwI+Ix49z9AHil>U3U~dgUi0|UF|ABCNbQZL
zvZw4V=sY5HqqH4jZOTkA8F9-2ciI}a{_Eq974(DcxaLvMXq4}U#b1bR*AE;R7)icM
z4{m!R0UY3iah(_qTo?isBIi}3G>90dQneJ2XeCdJ at 6;R9NGvNk)d?$<w91*9Qo-Y9
zmRZ2qMm^mMhhI0nnrlTD>Ixk5BwF!|mg5f!Vd`ZD>h;xy)zt|^h2d3daD%z(@+!y0
zcsuKsoORjDiVx~;aFxy<g3<wUc_pl0Gb-PnDR{(n8f{fNX|+`eEp45Nf^a}?pms=$
zuZ#%5NVR6^oM_2?YVk+&dlnhR`D~k0J)ydk^eWJ7V>66sdi;+1X7jW!f?3KecCZW^
z-N(J=GnVOKwbI at zT~0~i9tA6%H8ZO;9*nUPZQ5-%j-7LZvH#(}HN!(EQP@{&PvD_!
zJ)2CJ_C`u1nf6|dGRjbPP>w_2FD*9pk}reDIH`TaNqjlUrhs-&%P>clrannsUSzg{
zwm#7sl;TLYp+1%@0%F;yyKw<-B6Uv-s<9;m;Oc)#IO=IOwcpk-K3iL$)<42H2kgx)
zMMGfQ(FcysmrIHgJDqQxGeAL=vdcsI1=}{~QovTLc<%`c at UoF>Ym&`_OQ<0$)QEDn
z^@Fq1EpSu2`|pkK7O);9Y)_f6&7>%N0_$zHBo<i-Xxi>=VK|RXd<?AxXAfrG>o)pF
zrGD$`*81!0J%qx>beD2$r6{^_WGQs*x3(9+_RM^jd~C{A({o+swxRxf=6JkCL~c>C
zm~)V3pgXUX$}nFptd-Bxxcwlk)hc_V%0|4Vt&-9clj2>$T!p97v|vmVG?YgP3>?c)
z5N2+WS;k25PZJ3|Pn!BTv&&UQ$lFWi6MbN5pU-fhu|tRIsvUzH_8C&b+<}@Lwq5Ht
z6fJS at Rkh;X;K)MTMx7kz`4M<x94{mk?^8UBXcW+9{zZ(9X at f_smaPG_f8%INJ=yRz
z!HIG3WxV=xEt23E=ySLM#wO#+t31p5Abdipcj9ze at oSq~oc7mLP51TiimvINjMM%F
zu`6V^TEc4AIl7y$HHw+AmC1&TVOZFk at In<O75#5~qw?Cjf|y)_Ud%Oi5?n%d5*$Ky
z|EP{@AO0)-Qz&BY-{-Dt+((6j{%^}@Jd#BQ76Yo3ji&r;ji!&p_v4g7DTu%oegoKt
zk;J}VH)Y4C7??7E*_zozy+!o7SWc9NalAwHNO<zhcIr;;t6C{+2+r-OOzD)|Mq=o;
z7xkqi<jtuY&5ckUAZeN+Pqs7oYn;0w1DU)mXVReaFRDbd#N@<m3ivZQ$=`C4oJqbE
zmXsh_qF8PcTeNwaBvWK!7;mS2AgOcJ>Ep=dQ=q%?bKA75c|Cogy;e-sYto+BPlNt{
zDM?S!1QS?`Rb~(24q=L at r*xfRP8GCp7DNT3NJIs;^C0)~ATl2W^P?fDw?EwatVtol
zlITC=7d2W%idWh88;G<h;S+?pV$3a%Tz$A!QTrOK=-+VAhI*j?^Gg&1Kw5fmSJ6|s
zzlk6>2-D{cnc<I)CBW_iP>+``N|V6ID^Iv4quY$l2VgvEOnV^Sx5MgvMGv4oIz*Bp
z&8G2*@|cfy6HBuW7-zDdz>0BVtva at ivQxNlal2lOC010emRFx<0f}gmv?Tjc-=7re
zeZ`X((T;*tazre4*a*m{)7)I2Lk=AQRAVdSY`$&1WG^7suD;h}zLtS3Fwc%U$y1E;
zH02g=Npj<_eAI#Tf7`~L7mtI;)LwLr_^a at GKq}!V&~<MOaD(2R&WOy0AckC*_v!4u
zvu5+bu&YDSPqLN|k;<VFiAB69D)rJniy_+{+*_#U=bP+$=OeWbqh%NjhIa4<!|)9@
zW!-Ywhn};i^nyR{v3H<H?`uhU;2&kX1MiaGq{IvQ()spK=P$*MYD~+`AP)SbbcFVV
zv4#P7&XFvd4yL5OX-z1nGuY0R#(QCWsWJJ!vrI-wA)v>cLr*1rGidCA&_;Kpt9#T%
z)sz?BQ=GZ1 at 3q(KOPiw`L4d0e at 49!0v-X;2+emGyY%!@AR#Vwm5Ciq6GrQrqd(dDp
zNmqGlk<{5jd?&`LT1_DH({lS`8pFY9$>4RjpSH1UNyT&Y^;*(dk=~uu^(U-6VH;WC
zr$YnM^`xip<eZ-AjjoGG<>eLgOPj`k?f4g0-j904fA*ZN-l?Ju{c1u?eN~u=(}GmK
zS#BXw%88~OK9-3w74ng55be8 at RWl*_)|3<%mT%_N6w~Yi?m;wFe?5UVD)#=_{+Y_W
zp+G%}D{=i+?o%Un)n=W$S|{UHTD}5XS=&4kbv_Q)l$Bgv;vicYSK=UPh>@IG3;lK`
z#d5ltBlm~FhcYuG1jdKHu%C$9AKqvqixx`0s%KgM%t!DB$K=DuLcFic^iK$<KJSJB
zK}N1e1sR1IFI}|vfWzIO<ahG;R9ZDXs>?RrdidSyyhfG`My4c6;iv4VM+0U$?`D44
z=^zmozF(;mGQm&%jlhpKQi#?Yfl~RpLEQ)yV6K0?mz{|z7RC17!ZaBJ|GkifeDT4v
zrG?+;zwV7v8N!`P%hya`ZA-A=yhLqp6<fMW>S0!+fA;4xN}Q&FNC at vGHnC%saHBk-
z1M(%)IIoK|)78tKx0=gGyXb^HMA7!-Z{GoX3FaeV_R;Kr`SQwfB$P5vk&56+b8mL7
z%$o?gF}=7RXMjDgDisZI&AX;Q9V<|X2DWee2Iu#C+`QFO2JGAESks}JVKIl(HqbHW
zwV3DW(4F@;>ICs-qFbA<((tBDncS{Y-M at h&NDVEuiH>IaaEI;R_l?gNm_on5G&-*d
zXpONpGEMH~3bm7C?4tXSI1lFBXmumb{4w-q%b#+Cds`(Z?5BX;;W-?~F<?#@n(-9e
z&$Bzy`B3PQ)o2{!@4yoQ+y2fiiqR0;O-=M{7=}zdJFNm7d`{yoi<?(FjfJhto>ri#
zyTaAHe{f3s$Yqr<e@$n2JFZ|E*J!j>>410rOVyJJnyQjIleRy;GER8d?J8cSRbTUU
zNmBz|oqCagN8YixyykN8i(UD;<dizJCS+;%jKCvVP&2P+S_8jIrE+3P^GvTrb*t1#
zt*wUk%*dn9S5Blj|7)M-OjX*MG$`86*1*jsP%m;>HD-axcB)xR4~a$cycjg!*h1o1
z$*WFWp}bsf-_#6VH*?Iok8Rb{uW+1=ZmwJZ;FzIRO*;F*ex#Z6((fOyNLE{Ik6Fzv
zS&Z2MIA<rWvb1o=>nq#Sw5 at zy^00t(+Tq(PDqc`5Rys3>f2Mf%I-smq#u(td$alVR
zmj`hQD1b%5Isy$|^u$UER at hFKARZw^ou)+MGND-JG=$2r?j?D1W24- at 1iCUo=07<$
z3Cxu^%Za#ReTJ#_k<B|A#&zsJ66M6Q411OguG(MleIS&LO&M+*7ATo-w=v*gM)Kk(
z35>^-m6XjbNh--INh=AV9+(@Nn at GAGbwTrpb&qvZ@>KGgbe;5K_GESw-q*R*IbQw4
z;OgLU@$JGjRqzA<2cdX at agrUOPb8Z0it#mHzEyuAw+`l-Bs^65RxY at Z>zGTLmzTGd
z8<6{)8<N{G?SK5{_~WtUw7?e*{DRbn{@x_7F{5;wovuK2vsmV+)K#f%rX1!8dWCMP
z2}=tL<)SN5;?b_iMMlMC`P2u_6NM<KWgdERP+#wdEe7y0&H4j2{qo99At2Q>(@&XY
z9;x=r4}bt8C(gN?qX2YKkIqW-fxq9+G$lKZk4hQ)kZcm`lHv<KVT`aZlPHV5Xn>+U
z>el6;11s&#U-ed at gE@!(4d5#0#(blL?oK+(aLhxYp;=sC$6!ofnQUK}M^6{B$ozKX
z{u%o)wPQu6r&FSFq3leR5nlJ(po|K6@)DMyfsuEc7usYAzGnr{<l|2}i*2 at 0(>l?&
z$so`pAY(;8t~LYKv3)-f)UY{$;vRMP_Znu}(H5Xss;uaAkD_OGSwFO+-Pij>{-~4}
zk@&;+Y07mYsPX(cLe#{5rsleZti>o*C*=HFW$k{PvV&3Uw{ta&ahpH=#sD{a;SQcw
z?*kI81io=yw!ViB&!>jDF1GyliSBL&5W`-V5 at jT~?bo3?Fj at b6C1VHkCXfZP6}vqL
zP*`rhc}UF|O->Hdxx!T&>xaKB at DnuJ)4owQj}|5ac8(_{bat)`n$YR$kGPbxk at axy
znt1O_-O5#u*AuYa)!T;QeU`B)%-S6=$t7#Cv0t{G5y<50{cyOvy>()1X4SuZf#r3u
z(sSjTV0>G%qYXSyI?y8B7CaLHg{3oOZYH0b6?6Zsjif$|Zm%=I+F{fl^vdcjXG0qi
z7JDU=+21Zm<`}*k?Okht^^nN4=XV(G-3)h>8)hCHnz`+}QGg*@%>*6eKPEg;S<NkV
z%bZr<sX~6}+($Wgas6}G^xYeP|I4IwSI#_fu<N0mYU*=#MDzPo<kG`$=2t*t at peKH
zrjwKx at 3)sx?)xw<TAPF*Js|PrBB1c4V2Qs&PD*AC8JZrR94pRPUi{|v at 0rS<H0^#p
zhEV07Z(AjiFT$R`y^k*p=nZpIMaJJn(Fw&tx}l~lrHrDEljDNJO%#Of$=A|@DMgZF
za-8u>bPHq5Hvxr$<#_hYJjQ0TEUTyK$trK`(0isET}trBv8Mp7Z at b4eT39H8x<0!k
zwATj^KdhA4ke|PaK0ZEZ>9oU&oLjdWq;X_2)41e_vbRexn-K2{=Sg=38OzF*IM3GI
zDR;*8O1CYTb%yjRd(C^<AO~bz6<^P7xnpc8)_i-0;XG#<m9Lz5=uziGER=kt8P$yj
zKv(DES_apba}Q_NUG0h<r>q12n30IG8fz=w>5+F28-ed^aNk6xQ($gD2qg|vN=<?C
z^WVTUwvzBA)!&I*Pn0j4p at 3L9X(p~U^&t!f?ZrX*Q4;d!go0o2ef$S_lUY_TtQoHg
z(-vnQ4?ZbNE4QlgLx4jd)cp<etp|{0UZ7N=G)68{Acn1$@g-u0Ps?xjMqeTD#VujP
z9t)tp@>^L&+X<_3miYW-eIdU%{@8Zr>kXR79&eOTSOHMiNX69%P!og-TPZjQ4afYE
zNnuv%U1OnKoyqu}!8zJXew?0F>KB#@_2br~)GMWkqR5HAN=U79n0tj-+>$$Ie>xB&
zS!sGN`(GL8%uHO1iF7|2oeaBzr_yMzJbvtJUpv6GIuccC9|qmH_oDLR<?@m`DM8}c
zDm#(ZS+2Xr9W_3O=|V%ciJ_|q(8+J*T;l#*2<Zt at 4Zt@^w6AU_$w0X}oO^PwZ<x&n
z0n>#NBlwj*147C|6JFUzqwob at vu0d#Z&B>nc53!6xC2(YWHlWI09Q at X>0GMn_;2<+
z&Udt{gV~mgd;F}1KM(jd3XK$kE^h^FBox5m8ZVszms!zwn999b%`oN4$#clP8q&K^
zQ4#Y&97T1Mn=hKAx!yFZZeL!79vv!YqNvFETMb4=rI at x1dSLU#=dycpJEXTO?|q5t
zx*hp49`X#<0LuI-;wU~CU6nVl_$_a7`$s?Om_|#Xn;V|&gY&2Q^J^U0I1<H0M(^N9
z;m8$Q1ni*&%a6Y)zv_vL+8_DEFxB`GGp#~CqooqiBp`kF55$1dsfyZ$i{LO6Y$0 at H
zr)X8!Ac}$I>tSVIBE2`biv2%nZ8y-L5WXfZJQ6H?xDR%?Tia#-Q2u99lsx at UcQ4WM
zer+$VXYm$>37Q!4j`>0Fdu`;QHQ~<?tQ+0awTYxys5x-zXDA@!I*#_|MtZPk)A`M9
z{xb(72G+Fzo}Xnyk9N)<AG4s<<;d2x?ehp>sK>pF$cB?KD3w at N7|K4=n^X}PX5H7X
z5x5-)t#eCbiEzuc?%Qr+1776($s~zSw+k~D#0PO|9%a;UEUd*6o*+zq>kUU)9QH6v
zW}mdnHsMXt6jGlu$z=%S4Z&o~{vIi|-chvn20W2jpyBh7ms8|nphJq!D$o^Zeh|b-
zeHPDCxlgq0lH_5Kx{{@Qm{xoqKeXu5;9+1uif=qZ>)kS^)S9H@#atDySiessU*EdJ
z*to;L2i9B&dyJ_~Ia{&{7CvH2F#QZO+%YRP>7sP~=$=ZPFP<WNeW%3%dBE#CE%e3}
zjQxNZ-Z8Q9i-Q{S%AX?yEELa;5|pUI&3O_}9FpJ8;Y0Vmm%{AGf6|<A{o(CkPdf+0
zP+Y(0Cc#lN6bs|e at E;s_vpoV6V}JOYgMYmD8 at _iV-^?>FNo0kih(kCropGOt_`(Hl
z+9G%MhuLuiL%ctP%4+Qm7ozZmXU)AGjA`d+4<#OW((V7MNKI5MjwW?;&J><+O$EUc
z8+=8Q6#K>$Mzh_I`GX+*COql=WI4gn7CKgm+($FCBP}!$-VYq#X(;GS%ZJ$6oI^7e
z)Uk3*wujhNoWnC^<}nvIP|Y*j+9Vt#*C|>Da$`-&f{6Dn-*_lqQFu{o%U?-d$aGRh
z8wYdDC)`P1B!G#iRg&qk3aC^lMV0eq48*l4 at XV}+<**nfHkEj(^9O}vlQ at 5@Q{%rs
z3pJpsM7Oo2Vo@$Ft7_&>OE34hZlOzVI~D at Jv-dMlEG7^dpm at i3l+`7Tx2LU*c+3Ls
z^@u)iQjA>63{V4?dsIJ;`SKY{7e<>SC`OJteU&ZuH}j?^(|wn9MCI1dG3fu>z>1Zx
zfI~a0W~$}L*Da)DY}3Jsqb+-5^7815TSmvqrZpKmMpi-2$YjdV%F)A-z-_m#r4ct<
z)>3<R0z21KycJRX$^Mj<RruO;+JOQGG)uRh&MIDDmE`K|`po>OQ)0@=ip{N5U^vb4
z%QqfA`Ya8Dhj!ON=<hV0GLd+G7Ys^+ZOO=t2h4A&`$U~(x+eA9E1Bn$5^g2B7FX<w
zlUr6*9Xn5h!VY8{2|1QWZAXOvz&31|DN{`KnA(y}F>7N=UPB$&Q at mEzO(8W&H4SS!
zlb$?WNLiAGyH*%Y30cnZZkAoe1}u|R^?pMS84AV8k*+jMW0la4Z}-!Z<CAR}*7Ep)
z*AiffQh!s19g9fSa>gbK>8z5;Fg!Bd0&eZhnXH){wrsW>K=#m)(2?H}^eEzJ<f!5Z
z|0v@~`-tzzwrTSz2kdnlc-zRdy7a4iqkGF?H`;?Xvu;Xg>b~AWyV?f;M$*=BD-;;S
zwesZi%PE;`s26LeGPFGksSkXy)J2wx;+2AhH()kVxpn**)IXt>RU77N--&MOBcC3?
z`6kk%w!QIwfD4CxMQK2|sYHMrus)F+vAU2OvO16(wz`%3eRay8prOWlzh{0ZH{9FH
zQAvxvm?;1^7L?gzcA at P%!Pkpq`VKRM&<f|q%HQDuYwgNl?aE>8N@?xNeGPBCW-tbi
zCgWt6{S%|S0#aGiBNHM;J{3lA5<4MRWEg>R5RXPi5JypHz4WHc%Mb4#^-0u^0)wRP
zJZ24#6R3CXkNRltHIL_LcPuv#MBhsHTR;e_Y(ble_(2$-pPt_^iv$yWNox9Dg at I7M
z6R}}Z2non<G+-u<-eA9ZK()}K(Tn=dsH5V4MZ=P+%9pS!H!|mo?$Qu-o7z!%6-k?5
zkRe+?P7T7lYixQ%MRCvnGq at A;YfV-vT1im$$dM{xfEox8@@H!*!@yiPT#GwMd!m at M
zaBV%aSMRt!WCEUE%}0DZcsGjIB^i`85ruaN)=a(Uk(N56-PiECX3E}lqw6P7HsMGQ
z|AQ-3XxYgAGBI+Y(n<vjM;wgmJA1XMK?PHIw?ZG|T6NRJp!s@}4qT_RZtO~*sF;$Q
z2__PE8;kMbeg!by*rNtB%I>f|tf}+H*Ohy3Yo$i<AiGKsQxSiJcMi>sHrb;%4s=Y6
zmuC<|$-rY&I5{UgqU7oQ3y~k69AuAZRhEA`ILk)h=BUSN)sEi5uzLUw?RsKER!MX!
zUw&+JU=c-%<S%{hV-|~u5efXT5|mspFlZF3 at GJ`!kh-{Wdq0_05Hdt2hGd?z=T^BI
z1B!Se#>08LM?Y8as#zyDaBSg>R;31Cq|WHB+3v;gUBV_rGa*)6gcEil0JVlXWFB`M
z2}85V47L62H2v(BjGwbBdhGM>>%AfVLsw15Pv`l1E0=n%2azpu?~N$YHn0S;hTk<o
zS21sd9C%}+=1LpBE$6nR_vKvlHwId>>{k3fqQk^LvSi&D$T9PzQ(#1QZ)udpn*RCG
z-bLG)nV3RRV0j|6w?+03+;I7cG?M>^F4++pKahh+z%X0U<&;%(`*M$!JcIJud$+ps
zsy;hFR(Vr-L-`?^tmN?G>2s~V)+}~|f`;Cwnb$wrE=6Dy8GW3dXR%ee>VZVr9T)>M
zPThgjF8oX{S4jlU{#!hDiMUc)_Bdmw1{7Bhn<g*jWOg>zEN5?2hUYQOquN(AgUPuK
zzQ39*3K}vvruWSPnLhj^Sv>v58#iUDxQcV})-#fAug~Oull-_uj8QSQEzK+KAq^w#
zc3gT%79FqeleSRhLv_d^bgAmBVDaz_#Ul;!L$A_F)mY6~dq>@?`g&~V8<~1Sbzi1e
z=IvA%r=PAJOn174ZEWq{@z!t>^*#$}N+U@;=_YB4>N<u5AFO&XIVwxN6XVNzmT~gu
zWb~w~#7`C at l8hk0_%88eZEmAj5uO$V`vke3%P6kPJjg8Kz!+qX at u54a%bYRmjSbV`
zS&sA=f{eTymKl^88Xlq>q#NOlcf`vf+YscXZuN7RSq*b(8|fi?aN5jo4{$-+4~%ph
zS at 7oBCcGvmCnF~=ASfUb6AE;DszAO$Hcwfm=}DSQi90wr$RF!TX-a|8V<-pGfk6j`
zV>@&&bxA^pHsd?&X%3m4tRB{9OT$>obll*5>1VT(A=4#t0}Vi!QA{_UTisMk{EDDq
z*R9 at Bi|7hjN9*4D?aCJ;=s8at&r+vT#}<#%hA+p at crAsPS5QRa;QV~1f=IncJl$a<
ziwLmU+f=;q&$KE&N^8a4CEXPl8XuVO&zP}mtVVa1zi5(c6+j~JI)d?h-mn1aZIi4g
zt*7uyrFpXerm!Yrmc||Cn9$M0(bCc8QOcyCR6HM6l;UM+Np~H0CHJ-y<^<_*>6w^q
zvK}^w&Rx|>%-m8YX2p<Fd=`-gW)thtw at HrX_tG(s3Ndd+cw^(lV`zrT6=IsBdsyzB
znny(%-nw`VJH~C0Y7 at 1IUFmE}+hU1qvxzc`zGInx&jKXTqhY1wb1|Clv`DU{gVIzK
zN<)gJU6XH<wQ2jl<5k(bVT_oiN<2#u6!LI8V~az~KH$yLv&L%2i^PlSO?Ry$)uY*8
zH(cp7nCNXiSYNlNuh%r_a#C(BU(p*3SnpZs*)ZG-+;|R$dUz#4aUUkG(yk7#%C6`)
z6S^|m$=%pIXS@==9e22G4Q!HbUT$4(I&MyFGCGO1U0FH(++5bIS%=I)`XM!-I#7$I
z6={QLn`o10%Lg5D9lu(yIy3tkP&lX>w0LNgk(WW50h(C1EL%5p)Li*$4CvK*Rs^M;
zO)QCN8&|`sAPz%NTt6mH?QZRc8Z-N$^ymzxbZrZ5c%N#`l~FYnyGhFok>cikasr&_
z%oP;}NOwi^;?^<gX_aa>SISkruX$hfzW!UPF#~{^jU}khUj<wb^qNo{-(lR*g?WPG
zfqTHV at g3$Jb(k->9Eg6%mIh!6>g+D`*9GGoDvpyg1(o`Hf+v9y<1ace6YwB#?vQ#S
zA_JNSJ>A4VCKK>_SUa-L$rbP at znC23qMs%ayFJXJw(jM>UCWZR{*ccocsrj}@ue at w
z_x5zDqCjwK&;9qqaqr7r7wry<&0md>CiLa-R*Y{*Pajor|4RN^3+6(oK<veMWc{-d
ztbrhl_~D%}&fkh)+jgbBz{N7}Ws{eO>!4||v}nKZ-|T!F!!W4o9(h>M(~PLbX3NJQ
zF@*uN>0bit$fAFkwo&2<bHt{Pz8iH&@LQqoIhoT~anBKOm~-sM0Q~GNslnUh!<pAS
zY0dzp0gnaeo__W27#hT at K@X at Q|M5;7*g*Rv+{X#ygz at _1u0NI%mFvo(9SPFklX;FF
zOaktmfSRzQ^-nqz97vEwI;*_AN$B7I+x+z5R$2!m>?Z<TvSt_88<%%C`iRGyly?Bn
z8*w|d&4kz?f>afa_V0&o)UG=*lU`wLnSPyTGVk|BztU#BpP42ZM|Q_8IBI#fgOTDC
zhiBM{U^cbvC~=_Lhz8UZuO=NugWbzeS(7(PoJQ2ovHQbK>{wR&XIA`^5wg28G?8!4
zvmjf(&OHh6JUawup}_AVrHDsK8=zgtdmJSfj62hwifwK3$n!dS69nck+P^eM?^XIa
z!DK4I)(1ku1tA3|W(IB|pW$%Dw;rAlQI!`7a!IbElyn+$=&kmF^9an?at;WHjpDnD
z48S@?O7r&TU-l0bQ-JISQn9^>9ytbv{ML|DOx1mQCy<1njD4}BD-6YI{CZj*$@i>u
z_lOf_cNpL*ZmY5(`JrIc`B)!J?a#EFIeZJI{`s~+<T)0w%LT6Rr#pB*CdVc&@j*w~
zH_=;1Svy4u`wQo(_$u{bUq~%o8zVUr`G6X~LgP;>tfwTw(TD>o+b^!8TEaC%)$-hd
zcFOuGpVZ^A0Y7GR;`f4={?Z`-Qlb5Zc_ at mCzbhVJ_d8`=ZCytI<$A#DFKwjpNJ5Hn
zzEorRxY{Ob;q!2jRWJ2df$Dd*4Z;OR-xV5zoeH((gp1nWCfY0>sd^?J12Mqn-XB{e
z8SKZ3IrbgL-o+4&t5I!t+~sAfkPZ8q<wUJim0p|U`C at wZGhW~u<$WmUa`EtwcAyiA
zYQKG9SetZf+3iNC)zZEtsl at L5K64_zD4V`G0+&x(e_h>yg0I7tJi&(&Ctlo$l(ME%
z7eVxjNgl)T`y&sRJu25BA3FJNabQA^DT`rTXqs?Vo%9-Go?#6ike#ITa_!q4OM{5A
z=b!iM2pH?e0%NPcoFhMyip<Fzv=Q!oe|?Jas>d at 1P@0>3-KH;k!LY*?dahr*H?Etq
zgQ{T`?0t+$J8h<{$zSp&d+^b*C~8aAY3xz*%Ovc3gL2O19mlXr%-U;ReSh-!wOvo^
z!@uvwf3YYGurRCb{KnbugVu%Y at HozMG0|Hg*}8j`SFClpaW(wSC$Si!XC4N2aUF8F
zEU_q1!LIYWXsre_Gid`A_k@^lh?k10?tD{?0`<eF$Mwc;ac^4f(2Es+y2(?0OewvT
z(k3e*$<83FazF at _{gm*v{4HbzLT|R5HnR%}sqF_fEh|iQyShYYQ;lFp$vootR{T)o
z6C4=IS0#@q6SO8O`o#Yf?_R6qywm%ZTg<J8Gj0&lq!W%lyoX7!FyE+`%(49G&}Is{
ztlHRngkv8kBD!Opvr6EgF^ZqIt3JvZ at A$eRw?^rqE3ii?(hE7~3pMP<)!aPr at e#=Z
zIU<^(D{rJhn{k{q7Bn}@RU+Lkk<N#<^xAOxP_6%62>o+FNeLA(Z{&MabY!%@4{lk#
zq8}vN>WGTo4Ly>AX}*qb-zY(n;=Oq=%CYc>SCdVNJ~4`_s-Nq~zd>C~>5!TcN|XIj
zcj=W9zMQ_P(XpJi>Fiq9m+WL%+e9OjVWF$tS=i~N>o!Kcyjh~Pl(9^0QD4X=|4R)h
zH$_*YFll#Q%l1(d{Wq8q_qYg&>&oUt6^A$!9Py5ppPKlVeaQw}B`xhNny!dxK#SX3
zkfL&Iq5a-oiYh0>tU3<+30<an82vRNx3;AD{BwM&kr?*+jjzoJ^@`#%;`)Bjg{dtq
zo^kaZv}3$a#0jD3@=_Ava-$;2dpVW{Dx0MGa$r^JQN!z%nBM=$sFNBllk|r|(;P;3
zCHeYU$TW;**+e8O00u*Px&L;tBL)F;>x#L)Fg%f)lXkoN1g!W$4G7pNCLlk!HM7ew
zL9Igk{|!MvzQ1X!rfz%X&5w-o(|TM3E48^|eWx~hr+CK)ChJTTes}BJ?!pB3Jn7sy
z^DgwX&hFEicpsz_XY&R)W4DA68Lb;QBO=1Xonc`O65%gC&HfViY@@$KsDJT!HY{LO
z!-zGl!do<MU@$${FmzW7J=$ojyAoUZm6cXvx2vi}zlA3J&ZJ-Jct)1^Ri)ub)BKbl
z1PzQMaVmDPWqKRzVRCv1b~`>U3Dtoiwq>l>=TNVDYRj&DdUxyAt9RF($BymX`Q?{2
ziKp00Ute3g^XSo?g1YtT)2&<YK6K2?DG$z^`QVh98;`&H?pI&ETXN$17pm`xci%mE
z^4)h&Y at 9Xa!P&DPoHEPy>zVG;Y9aPN3DQWLjDbGH*Xc5Jhf6o~CQX|)=Z(``7}pw+
zlw=o1y2P|(opA1KY6Jm~dMdK%3uf%|k!vH?n5(#voC*mf5`Es8mJk_~n&2B5%86ox
zruzE(wD7xLS$gD1rQg0P=?u0*__voHv+qpxIaHA!Do*-JXnR{*<`2l$?NE1$;0DHR
z)sqPf$ylg at i@CUAxE!X_NOq=$0M1N2+=z5UIvb`XLUTuRXJXPFjys$gT2Dt$XV2z6
z(*}`2^j>X{W03RSMuVFTPRmIjmOc{3($QM3Hr6rLIWlQpdK1IxNDg;KB&RytJ6ktQ
zi%g4Z9i2gYIJ+lzZ!~}mpo5+FC6C5aCOCtKkRb-?MB2uxR3ov;CW(&$G+bNh-7V8Y
zLj9YOcxgo at -5PD#mPM0iTenq6Ti5*~NTQW9d~C&h>lf>tC)cMovc9<QgYiQ*X7#?e
z#h>r&yy=g3O-*OtSe?3Tp0wRMGv3-Yu}dZi{%ZMm<64jF at M39Xq;)>6*==p&23TJ-
z|6|t&*QcbQl`!U!Ei&c>XE?|*SjsWpF^(n>p{`N}I<mzR;;{Y}>muVgZ~BU;3x(Q?
zrbf69PJixaVuUPB4-jG3Pe$D&+PYPM=xuON0OQt|&n|y at 6-k*lZ?1LmGC^-6dw%}G
zy6w~{tAjmD7FrkS71?&f3|}ZzUo?F+hrbHU#ORS;S=(@6n}F7>XmV^wKyVP%3g_WJ
zlCtXQ<<D9dtH{1nr^p9C{A}Iv)mPSCm+f{_XnU at r-}*zBj7EOGPKTj!47Cm)ohdK*
z`<QD2bRP#ZRDVX8_!Xwp at KpnF3Mox5Lkg8~Nob=q9sdiDBfdmSM8zn{O-WnDzoma7
zSFP=&M=$HmP1e?4q>qG6q&MI5+UBJ at tc@gR$I{KOE!|FXtc~(rL~sH?`AXp!OX4#8
zKw~c(WP_q}2%rwtM_l`Q$5M3nOC52KM!<lN*TX>X&pxA$n(C^WYU)sU&85nkOVp=Q
zyyB0*MC%l7PZnUL3eWIiufRr?aZD}(Rn*#%Pdv)Q7UBaxBV#Tf9Z448V*YV5O`Ll_
zDWRw7H{u>=F~!866X2+I+X?Wb*!$_!nkVQt)+t-3pJ6}{*J9vb3>&GqjO{ed?dqS2
zDHbmv{&qCDJJU+(V}ZpKJ&a<S)4Wug^U^12nB>M&^Xr-)Pbo)#nJD7SaQA7YxhKxX
zX9OBWE>;x0#<eO8LVQBikbs~typnX#Ga`tl5x*oHHvWEMzz{!(jRAj&Z1dPzv&M~^
zHFF%!b-S&T)(LAj$soxjiDb}95_a~iRbid2s32k1Qfnf4nmkCRlBcbSqJQORAC59R
zpixFJ+sx@^WvK?64LwYaU=XGdCu*m%)b4TmC7H6s`YSSL at sGVg`dKfM`^Y5H?^-2s
zun)QswcEAUR<+dKdQ1+#!TyE8;~6Os$rT<-Lc$^yg(oUuU>3NXMFDF#yiUV{6)^RX
zVA8;3;eKU3xA^wUc^jB}ce{Z&n^uYt*uL)i`00jFDCdrhBpR9;k{Zewn4wBoXlQ6y
z9K?mjg|&v(p{>I at Ll31(XqPb85Ew#)<U~%Ss7(#0)Rr+^OtQ2Oed^l#G`4$}rPBr-
zn=#*-L3~KcoCBl*rW6gxcb(^Cj-A)L7wOixY2_C)zIa3S at iF&lUWI*Z1idmELvT@`
zvC{E|Z;=|aGWv~%MS)x5*Ql#fLIT5sz%M)`$uERO2SvviQ7L}c&!AF|RN9eWn)r;!
z5Uigu=Hti{^FEJ_OA?8JJ=ZlRt!?H8soBmy|HUe at c0O4Cz=WftpMCM=7gw);YT1%G
zLv{_F^6dniJ7bry#N<6IzAjHpBq?p$jvJ9b_R4)j`VUP_ArUb#@9kdjGT47FUEJqB
zD&8gvcV)zoSYPHVULES22+XN%RtQ^a5FZETZ94Y}!Vri<w=!Lt<%~!|13X6Ip4r?G
zi5f<Xc;P1g^rAJ0Y{(!*M~_<1)Qsb+YMx}9uV-6-wJs1p(gXFl7RLgvuOJd`&xqq%
z<cf$Q&2Oduil8EGt1o>Wmin%WVsSu1LmbiI7lnxhPM&^Mp0ROGsLeWqLWnULER+Mm
zL2!fqgxXH9cWb6M8Hj;~q*-rSC+Ge$bH-PBPrUHL6Ze!%P>xz>%YA&UzhAm&RkcVb
z&AW7YY})k2jhhPn%tiU)l`8Q!KcH<!bRZOks6`EZR{E~+D~emwa8;s at 5fRQ310%vi
zqZ1OvxIN=nRVu|3X019VjOvxS5PJ^PP}FoOsy&#~L+II2_%DCdC^CK6#;l^<ew|m}
zcb0@(`>ZS0DQgdzM(!THmwvav^N$|1Dw{TbucSo_>(Yq});HuaGL}psFUJVq#PL^!
zI#uEBj8G+<GRnglqlpTtlVKXp2xxv~b`Flw?}lt_tHuZ!lHt@?gp$Nsvo1^-5*Qmy
zVoB^{d{oU&>oJ;K(?U6V;u_~WG2+ce{RGHZ77xv#Yeu6mpX4G?i=tplQyk?{tJ1=P
z4Ih>e;Yy7NPBJ1IB(n%tQfxvR4g`#GLPY_!DdMHdGa~b8f1}0{Mf#8sYmZfXc*G=N
zLJ?S70o6%AnlN?hgz;0RShE%{ArWY17m0X$@v7%ABz}$R`|`PqBL)u|K77#N5p>P;
zNt32cn{@xQxhb3GzPs;(U2`|3q`q75_36`J7raaE9hjRtaNw|9Vf%5|Hxq3iX4_s1
zFLK~|dIc{+Uo7%l6S69?VWJih7z%L_zS8!k*RP+kJ5pLZpxfGh*cOwaI826W?H!jy
zYGucc9vr+eyJ)w6=ITLbt#Z<yXe5DTSWB#(V|SCeqw>)y^7CU!P-C=rdOC5Q{E at _2
z)2&t3GHYNoty-{P{=$Xx7c7wD`K)-yEzgx}yoMPj-3V{;jjBR$`5A~yJRGqipnB#!
zv7IGjtv?Imxz=oJ15RkNokwu4743-iXJSU6j&rS;aNl$=E|;Kz4%wKTL2(U=vy?sa
zdYZg~v#)5^GXrzeZdc?5w<}-q579THGyD{hrYP(!b(<!hh}A?IBxlV^OhODAOj;A=
ztLq(E=~YXi?4Y&H+J2RMT1h^&WjsNWm9N-Wp1%6R%XGW?GS?NtL6_-`Tx`pvAXsiE
z6e?P}YO$~WR`$cK@~8?E&jr0jwrMIVOcRaN$rIR`2!Ui9>;rc2s at 0;>YH?LOsgANN
z#W5F+;~)}Zp<70BWQ0Pw8t#H8qWqq6t?+pvaB0-zF{)yah;T4yh$|Xs6p54T_#<LA
z at Jt728WA>rz{yVJVX<;qc*C5PF2;e2U;?e6s_6&TpF5AsXx}=w{~t>7AKpLY5`jKL
zGcr?co02OnvgZ!(&}wkAE`9InOgf}C`tZHs&kbzfsb|wY;;sONKUr(E`;~P#etW}&
zj1E37)+()6 at 0PBxaH9d+;cA&?><AA|+u<s1o3JCe_^v1Wv~1NYLJjjtjeyjEsFa9C
z-2)n>rnI`fk4P7AUPDjtvpVhzkTW+bP8O9``C-gX_xCJ!1f~(M;Y-BmNb)QaTDP=U
zyU9rjqR%qB4h`XA5QVBdJ}x2I&b!+rpf1EZ8HZCmyJPI2f#b#x${9;mM?E^Q=*#1;
z4tzA~vsueJ+&0WQy<zH+LC?H2e$+_9o}P1k;P~0riB)e~JLb(>w0O=O(s$dpWYWx@
zy{(<rm&vrj%w<o`czEejYf#s|zwF<CHLL4_nx26l{bl6q-DfPk{kGxOM{ljLu8kZ%
zdT7 at AywMA0&nDg9#ngEAti`XsF#PNs>qqMd$ZxYjO~x3kA!lV|K%}Z at k*caVB6Wv?
zejs=n$r(Y?BgO0NA`J)UEYZPXv(A^Q)M4nF93Y0uFd5q#&B%~a&wUf&F?QV6fAFjZ
zH9LZPm5B6cUYMh~qrW5HF&E~Nx%ymVs$+ at cdB=OWeTv&R4!;1sp%LwqsHYk+KHYg2
zrK{e}$YBF{e`SC=hK=R<%4jv$XDZAjGx#)Rraskpj4x6a>5m!D@|DU8eYLS&f7|#N
zJ|G{^kF~w}LE{7*Bgg0o?WlgzXf6{k7E9#Dc$b<D!>rjfg?vm?tl2di$+MpjKkI^W
z^lD?8C|^s8qqziglE+YYx_o{oD<d%g-gfO$-;P*nyd9?EVj>{Q$7O^y;2H~w@(Bs{
z(?Y^oEXLn-acj-L_9lxxoN#NOmSI4gUtIIJtT;}F5Kmg=A6U!SSyu`!L+sot;J%?l
z?>qYa)M-<veNVg1T5OeB$7&v-ok?2~n$Moj>eKrVR%y+H!$;)hSr60jguP3TA5o5$
zd^+)28B_9c-WZIrARKPXi16_<AcXm17Py)DZ8p}hRS|(reL!s-;fJfq+9cm9_4~k<
zI&E9?2E!UqG9*#1pY7zpUO9`AAclc5c-*<!*5g($vW-leeQw<N!w(*+tUUDK;qlpR
z+mRQ at D3VWJXxG;IxO=8`rJ~%rlG$CxDAcRkUg|Xznq>sTZeuCg9ir0^2PjSbnn8%c
z?3D*bpIYsuZOsbDgn;;a1}i}oh1x4q6*We0UsCzYl^<$;CM!ul()*8N^Yh0(WNpE1
z9N&8Vf%D&dT|wgWrjD|%y!?uFdDPTAp&yike}{57AuS__?^buw-LO>O?I4PQ76s-b
zO<7u6YrnMZe!f}0lYMaj)XrLBE8(u1DRgwrv$XKqSD3_|vd$xI5-T|S8Xw~|3}~F;
zUv~|K$O|~^3&`|GHt)=GPIlhVd|l(#+}fsV{^YUkRT<}dW+aA3gw&ch;_ZfY25uPD
zAiRZ7OK2Y0RBarE*TNKE%#)>ZIft9a)WX_Zhee}$6EU!PY|U at 9wMe9us|D79m!!c<
z$ov(=|KZt}XPx`y!l{m<Q~pMC?(fn?8htETD~#T?i{<|N50>TfBXRO)S8_a6OMQ3B
z2&B99T^yD=RMZ4cM|J9!i9yFp9Z??{!Qx($OL3_#&827g=A!PO_jTN)eewuxC+ at M<
z>=!Dk`H;59G5jzp2|U-Nx63tglVaFI#dUD~+;fYoU(YRm{qD;V?|aT at H_%>ClkI*=
zhLWW)d4&?us)z{Kj(e$<FWYg#of&~n3fgXEFD&&@bd`jtQubTgEUomctfV80#(gu;
ze`Mogu8^)QF7lamuusQ_X5ytva79u{;up=Ym0f*6u8kkT%m*_M273(5p}4AxemHIK
zk!v8FzHy$;=pUklsD3^j*=<@c)>FHW<tRh6``Ks_JJm5-uFqWdkTzGF?DHsJq;Aqe
zlW97=P47&5>iy_IB}X5o=hA#-qCS~EgdujWzC>B7zp4igkt!##xTqqw#v7COYFe;x
zE2?I*)cQ9xw&wQhRkT;lwmQAbv86z0hEw=FCn4g6_ZV!1uFupaexflsY_9de0VB`T
zL~QVZLm4eu8%@_}8$xxlW7KdMq>aO2Bsw(8Ku2{r6+>r~C=Rs+ceDT;0N3r%YwM)6
z?!IO1jHK7DFI;kck#A7(gT!bWtVQe5MzEtXy at Ph6eQ7VPmtz1Os10<Cq4#U|J66yF
zy})>dZqc?lA~@l=&JQ8s%+E|EiL3)@&H9oI)>ZGX4>YpOF=R9wrH?am%}4bm#-H^t
zoP7d?_Qc9RUaIgshN=GKuhuix#!J>l>uKfa_3v2p)y6#Y`d2LRT8Z~~F<@3kq}E1!
z)7J(Qkwnq?J-VV2jke%g3p<X;8xwY~+k35rx$LVZ?#;GxsNf7&+mWuMhuWVERI{9;
z$rv@)xsz;H&2So_b)qe`?%4SZ?Or-a%co;Cr!+m0-{}akH`8b`(aNs*PD%_MP-5}B
zN*UKNCaL+J`$_2;f$HV}*zB_=U{#pW)YX<X4Q_nX{iF;hgog(Dg*OksBV57Q?g=*H
zt|P0xw}i;@x9r`!<&C|2-ymcDKjz*%uBxJc9G^M+x%+;B%iTaW5!nO;M6MeuD!3x<
z<bu24f`%JvSuUAv79xt<V`gQ9WM!siwkf7PX+5Q7i`MfbS)V?(DIC5tbI!e7j6UDb
z_x1Yy@#_R$=FXWjXXd at ndx6!`ETnL3muAB4%x6+d^G&G*GB=wc1MSjuX`A%4G#%E$
zIdCql_469S!&Sfxl6^MKVP1V0Y!S^`9tws8MlB#jvdDzT&uxg2sR39aes#=<8HB6e
z0OvVQRY50AMheBZ5<cCzT)upHIYNOSZnn1GVNOU>=1-qKPhJn{GFcBjaDb`4Fs<z{
zFdXJ<LA5Sir-E8 at Xo4!koWR6~`<We)Rb}dokhz<n0nSj3!5IS*okf~a+EPu4c9~`w
zqJmmpGfq8DJI+!ZGDkgId%s3N`@}{D7R`bU-()>)%6e{fNn52-xE;<!OSA3MvoJw=
zT>7^D^od5aunt%a=iwzoi~D$s^wdPDo at 3DB{@f<7t-`Yb;o0HfVPA?Pj0z8R+U&Lv
zr`>Lg3bm=s;IPOY)@-q>Y~~Q!5FW|_MvG{>-5~NdHSLs%6?#j1rh=Y$oyiGQkm4_&
zC4_`y+;lra9HC)h4o6scx;5Q4z&gNIWG%7{cg?WQu$8#<0RbwM@)`qrx!vrg5#yq+
zRnDGWxmT*9hQb(V-uhVKD&I#^>CudZlj+>?GfRu5wbE~`h%>+Y$x|m1OjT>8Vz{`R
zWL*bOBHo&S_ALfH>+1 at l7)yvzrFOX)D}0-=z8!Md$Q+KUHCD&ERBE?_2aZskg%6F0
zHC$~zbEz30x at 9UBH6%~nFx&_Tf=Ry7<#906nd!=OXL|Bo`R;sAv1*cYqHD5yvS++^
zPI#HK%vI)|<tg(l at Gem=(Jaxfbg%TR^ggYAMzh0J<F578cn_!#Xbxx(IS;uGxes{`
zd1EJGvB-a-;r3hZy2KcXvVvA95z3~E6oxss;)hwA9voM(|IdF)SEP?0mA=`!6{=UR
zerUpmZC_o09;jOZ8TNp5CZp%j;l28WcvG5=|NdX;X>h>MVWSK3hPu2-|7^JSa}-eG
z0ogf3w at CHrIGM=zL~>0}7OA~M>Q#sx>Igez35z8*+}rq2x4|d2GjSDLA{nJB$$;gX
zy9G>x%s<c`yp6^-qOt8pwSd%M_LQz#1Y1mkO_hoHpD931Qf_0CpLEn`E;rYiW%)@~
z>x^CnBM_gd+_<R{aof{Kzj{MDjmX#9*X!zDr>k1lN^eVNVLHr_--+l;9C*MNLt~pU
z<%ATA|G`CmIOs$jqA&qwv6c>5qMkQy1xS%r)FMQHJLfsj*9}kx%0tyt3?e_Y9fr^$
zjGc809$_FD2nW%Fm;r1)Hx?GtTLq(^X+W<EJ^&wqo8bekpGs+nRW>jMcj9F}n*)IG
zB<7cJzAvA1B7VuDNh5x#N>{7U?8S66cXc{NQ>t`PMbi}Jq$v&Rj^0BPr9wglhuNs0
zQ6oK1_IOb9K#TWJ9F6yI!jO73{-tRbY?}P+HKlXz+S!{o(JCu?cMA?`Qbnme=*mK@
zHjB+=Q&mam@{wyYHJQCn^&0iEsvccoETuvWUKCk1r?F8Xw4DiMt%5}iQ-^6{s8~9N
ziDi+>s7chNBl#eONnw+?BtA(<5qqHb&(#g4^O!;G05M;U^}q4dczO&oh8 at X`<VOnQ
z#WCthnlexZ%cuqPEM^uzLzpGbRV`4@)|6?M(aVJU#ii=|H5>T#!bZ)j)G_)f^BViI
za6&W0zcXZW(61c05HV)}7o#5vE|7Lh{gM8CTk4PY>TM<m{~$hDcK304&tkA+9FZk|
z_6=a17?7N3AFxuc25QkMhyeei5)rc(oIKAVIK&>>2ogaQ(!v3w;@@H*`NXRs&uaYW
zrpG&FY{$7XSI-1wA!V<ERPzp7*1lE60<EVx5r}TuASTk$qDSmSr;1bP;o??$jd+r-
z7mXstAt_W;IVcNb5ge*`fb?dj3l}BCqkT<d(u6G4aP15*hbz;*PQAjsA{<kNp=Fa7
zP5z&5p*X2b+9w^5=A%zK_ym$n^59d{omLJ?5=Gsiu1Ie9HD0r}W<+bQ5&pBy7uyjp
zX-WVBhG&7`B}eg07Hb1pyy%BwEnXHqSr%R)MW+89rbZ#~N}_z!aH<4htqLiqhzo?#
zQLrnW2D9iSRiUa(g at KD!gkz%x{sRXg!UL`E5y`ljvb5}O-Aq-;dymgK7802bNdz>;
zR{`xk6(u0*NuOeoOpDkpr$Qvf&FMKrQqT?tbl{Hu3O+YWs|70^CPdM3LOPu(<f`-N
zK|-Orh at PS@Q|o1exzU>jy^EReTdvVP at 7$!lEl8yNPfLdM#ee7z<T>H9W+!LC-a<YD
zbB5bbodNrhj!GMW0lVWgrI0gC#ej*=Nb9Nj()Td5^-0e1^_|^c-*ff|AU=DfVf)!5
z3sWJbYyIU5N`HcT^3VD5b2pQ7Xp8Ixgr2z{J$s)3jOfXTfiw}L1bHmP2eRmg`lIzp
z7%F{_p8m_%Yzcnu1^OU+gV5^`pNeK6*uvA0MI^aNel*%)5k{i_A$^%L{FhWJ&HRNz
ztfuv2BmsR)B at lNp$;ki-+i!J^c=@SBtR-J+N`h8z8WwM*D<@8%ev_G7)RSB(>R0e8
zd>6dKK%`5O17EZ^Kn69;@ZJPW+bI$c!XRifX7n5f at t2*nH-=GRG&KoN4_3mkGtySB
zRN4UVm*wf=wr`ntm=%a8MS-2Zt|A9Q-D>bp`vtB}chTr+a-R#Yi#%(r)__Pm9ikPr
z>Kr$%wPZ)*BLKu`Q;f1eD<1)Uck8!XnTi}TG%+T}ljF^e8Ri-0o#dJ1U4R6R)t=Sf
z@|Z_Fk9c=_c6wj*yy$(?^QPCD;!1M&bNSq(T*KYdTqW-Ht~Kr_U5~l<x^}x8T=i}P
zmOuRGBsnk&ZIoh0?cz=Ca9l|3Enhfc#EebYB0Q*Z?cvX$9!7lp(4&jr9kck~OJE|@
z!as)Q_aFB7{J4i(*B&UHbZ+lEuZ52(?A{$3!<|2oHF*Ka1(OlXsF57n)92v!XfEo(
z9&5G!tYcru#ZbDh$rqv#wP6M#a3aBgD4XPr?p9J`p{vA&O<F-`9yB=tLs9~oatwxU
z8Z54?T)cS2iWT{d6&IjN`t3qRW4=@aOTRz3d-uWT>gt}OE>E2#y(+b$>(xn9_i~Ca
zBHk}t0W%b2_`*OFyu|35w3k$SjLaT8+NLnRuNGLcJKEcB-!lA)CN{-Ug>7x^avZU_
z1X<pgw82jnKK<;oPmg}aH~Ph~(nr!Eq(3GWKhNYyS5uN++PU+klw|3O+YK{ttsI!)
zmSJcjK087aG|1~^-vch{jC<INLbdKJ+(%m&prw3aebw1`y)evRQgi+G^=8BM_VptA
zAK6tro75B=9lU at CunR(dL&XK at H>kR><j7vUev2wA>El%KpUr!xO at xCXjjq9yT0X!l
zh=2U>&8ise4e9{>d|qJv7ZjU>OKhD6ei~9|I;*J;cUURGss;Titv)-P%<xRmAst at 5
zTi8<R%yr^vTD|fiSNp<w04qZvt7>^eTl>huA6Hc&S at WXw5*z{}pa65E$Cj1MT4$hA
zOINS%*I#N*N``6B4oxsiI{jqns)_{xo=tB->u3feeBlNbYJ@!;tONUW+z}OJ<^eCV
zTI~S6+9JCT_$6O8W;eZ>TY8;2BO8LRr{F`X6ykX2W7qI&1PaX?&Cm&Dc{tLTiVq;@
zE$<HP1yiICrJ9C at rcXG_&5Zs9ZJ=d0T>=sLd5P?;l*j6rO0=`FV2Cd|Tu%dQlkHMy
zoym#NLOiQI61m6pIk-qiYk*egvwHe+*>Qf_fah{u-f8LATUcp9+ugOKt77pbhlJ!9
z#4Dc@`VX?{pd(TG0NVER(ru_YU(t|{z~Fi5`0O*&CO1x~-``xe^8Ur;D_5SFIuZ7}
za~JlRIPE}-QTj#t*5ift^t77&G`Iihn!5elp59L)dI4)f>uU#Tz7Q<~pz4b0qV=p{
zpAP4b9B9;P^#*J{kTJSfGnzN1Zb^+Lp=&~A5KS}oh>nr*hpZ$<Y#VEms<j5|pzh^s
zFba=2y5RH&)S=d*GPwQ81!0jfFK%!BjI*>JoI2^2OkZ#fPc#pFmKTS#nlHc+W*@~u
zG$liab4#B%Tr3gG#Wf<+uFJdtOYu{r8m8p#Zq6cI#bdS|m-5J%YM=)>zEEsEtYdX(
zWcG8-J_9RoTBy|kgMkb$^Grgqu<spyj<Lj8Zd_xOpJU+^M-1h8|2qG2 at 6w^lGaJAD
z@#e&bIe;H5uW2QEt_nQjvk?2?5wOp1K-2<5M+4$@Y(Ojtr9+X79m-|%gXzKiczP07
z%ugXE#436zvy at xGZ=lyR53`&3I(i%XG`E9)oer~6Ha1J>PYq=Ag(7N_FcV2jGuUOg
zASSy~c$nJ2ZWf-Po?&+g){dq`G=EqNcej2)6-Wir5UGZ<w7d*=Ai}yAek>)(@1X35
z>s7Fi!qX1;KcS^zOW1OD4XbPcS$@v)XS0m6hXCLk5q*gQvwd+6t4U;d;NkcX{T0u}
zNcybnNH{`Vi%BDBxj`1KX^`8YbsC~&OD at 7)C&t~DURVNA+-Q6Cx{kd^Q-~8SJ{R at r
z-7!fq!(+;0*2Fv(^HK~y2@<HY67cggKd(`yl}5!k1X1&2{og2m>#S4_VO~LL86{Qw
zM$Rlpf6nUr{LCc{^nqFPZ++WZL=Do0hb^0Xu&(uUYS6K{&+Tmej49barKDVbKY}yp
z{qDt?Bc0>S_5VB0SpP3Lv*U3;&Y*e7D5KDET&)`0{Stg;ZjTA<(VWG0zrOmRbYE-s
zJ$ApN8Rp#3fmlxu_OA#w`B85zTeWIg#mbcx2uubbb^V(3rSv)+NUwN)&z|S;4+PTt
zQZu^VhdpsB5}dS+;ICA~PDXRV{4U$)Z0C1pb=B}o`iK+pIv?SBK at x)D`t^HRUQ}Q?
z6xqNWG*!xk*Cj|i*pHoi5!>6_+Q_N)2MGss29_5H$HVlxh|p`bJU2yl2|-&Hdc^Ui
zzS>D77ax*gg1E7NZb9Np at T!@ExH6{IUg{WPy^GLXDg!K8rp?v#GC%iijSn#8fru>s
z`C9;<=w`HbMkK%3j5?%#0{WEtDcxD|2(RL_Kromva+oo42*f##P($oFc1Af&zZaD3
zbaUdQ#7*1qdJQ<T%G5QMPPAEH{zq#IQ}Wt^88og!h5cKYspz>e;HuB3)lfQhy36fi
zIbIN1MwRY%yP{<K8<D9jP1Z{xbw;Kx>TJ6WZj at uB&cY9m7#2&Mnwzh8w8H(0r7Tlt
zKFrv2S&glYlSNTfiE6b*trhibWSAyQ8>S1<cN4mc-BsPy-8J2{ah^;eTg+BvtFts&
z+96`TDqo$i8ANQd$An|zG1W2kG0ib;l#bK!IzcDuR9bb0HaBicoQUlYK}I^pcCUM#
zY^1}U2aJ93CsRtN4Y at BDnomf7NO#J9Ts8OWC9~%Yo}c^EsoO2nK1VX&&q+zCY4P3F
zV&v}Uk2FR`LPL)pS(!<RTEVsV9}O?K<cwQ at -p}qrGRu5ln2r_n^d2KTBJ2SwK`l}u
zLIQ(HH`)?(bVZB at L+VXLcF_^p<xIQma;6!_WRSBgUq~*<HRI44T5r%Bhf~Ap;notW
zgqB|vGee6l8+|}}02XPCR4QC3ZS6hrHR=4Nmm3<`UDD|`AVn2qw1Jl|!7GqtTtsu;
zjc5t3sD;n09Y~;onk$xz_G$w>V&W)Z)@zLe5p6Ss$@n3Y<?AW!l+CdQ%h6^8e->>0
zw#&;KkYA&B!&#KhXd8%V8)g<GUYURT9BiasD4!tx*!|&Uj>za2wo`F;ckd<C4FV)a
zv!Q4{9QgQNdm!Dx9(b*TJ+SV7XAfM7qmvB8(txcDMN}!ZhI)+JP1P&cDRf;#*H`5F
z8C{_`Vo6J at 5H^@$I331BgDx<hj$_h6512`3GD$)n$b*P`GbO_P+{17K{V=<Mdm20q
zx6|91ZEOv9kUk1ur at OS<7u|>r+o284lm<%6n39$|G<SEmOcMqn9_mEzuYv3Cu`l+J
z?TbCIeX$3&FZTFb`{K1u?Tgr8_5X!w at jI)^qe`RF*d*0JVnm#xny0E#kp*PYr9z9y
zex$mnLQBa0q_W#63(|W`tbsG2VN9Y$Wm8APE>t`l$8{Cr#V+b7O`<Lhq`@9kHk-v|
z at fku-O|EVrC7Tlm3WGG`=pv>_m>`Z;kJC)il~N_lRJMdG;Y)<+suFbtRn9DC%eivC
zTv(ziSEEhf9uzi;52-h6w(6b|c4!{c9iX104=~TM{}7%N52z1m(3WsVh1WIj!ZY+)
z<^%3B^%?ys^ErD%_>cIV`UlMfvRw{{|A$^R^bUd(kG~1y(a%KbGpX{;<5DHsx)z#g
zWvG_ByJ at OLQs7sG_D>BfeR+RpUktWEw%Z#0#zqESQ}N^zWO=CWXlyj$UzT=V=gg(Q
zSRDTsTlhI5Bcg$Jiyk^rOr?8?{pg|MNP40;m7XUqrk9Ir={58gajW<Yc#M9Geuk?R
z>%`skOJY5ZuahFaPSL063*rUwB7Kp*CSDW2qQ9bl5`PkZ2S3xlb8TV at 0!&6D&?++(
z&V&nQm0OE8orxE^sL)0;*+LIhlD0oJgc&0ASCwfW0&A$P%tmgjutxO^*hbYb+qoLy
zY1Ok_J#~^fDPXv|z+4bcsXhf4scX!?xNE{i)%V~l>L=#k+)u(+sz1SRT$XI~bP$Ob
z?HYVfng>_h_%~dE{yiwIZ~0SNPvuaNQX?GNdad;>I90-_V?ij=?M!Ij^f2AmPwxbJ
zgk>5nt;62y_mUw!>V?ovAEi at K1{SF5gwJVk#Gu!yMFG<!MClFwO$*vD*-62k=|4ds
z!9RbuV~Al2WUKbKlPqi&ok1<39zsOxDMGdygUHq;g=~c|P^4KFK^V^pHfUw7oR#mw
zcHz447{_|j>0COWsms(400Uq?ozDzl2XHf~8QeqEL+nG`2JHsjGt|>a)!44xt~*E_
zq7O08>7LWS0*}+LG4*1->ZJO0?d!VtsdL(Mx)1c9P&cT|0BO at fSzF45p@_yMAU0Df
z#SMIO$A$6<qwEMTS_SHlyXkLiyO}k_?YGY|d1&25u+bMrOtZvD8-=*$5qb}{&oZ!s
zeYPp(Z|$@F$5BQ6Y^s#6q?Ymz@=x*t0&~Ft(dyAii(w7wXgW?vRAa+!zA#1osIW_T
znSN71U at RaI7QUsMg;4S;elu<b{ZVTJRnTIi3R=%GC3jkD+Q1#E6o<J=4NL>lle&P(
zzT{B7Rn0|-VFs&H&3e2v5YMQ;24~<`)-&dPQO;0}sA9X=%#;OqLX9dt8)dlEs|oS>
z6f84g$;l*#0Aa5re0rHF`-KuC0c%BEGza?Q0nn%PY{h^<&R?C_p^|C%?DO~MJ(`pA
z=)Cto|7^gPG2<7MjT^IN{@3+yoqD?B+LEWwzxC4BV;?=R^U+YpqqPUNlA0rsk(}^*
z&WU4PjuI;=#TevB)h0PU>icgw=N~vRY4H1&_)^?a4x2_VIMmiqJ;Qov;5ZYC-Z%0q
z{TbuFsPND*!K#OmCI*DLtw>Z>GvtL+T6#6fVj_9L4sR^GhmyBWVwKm-=nez#ZNsnG
z{@(FuLV1sj8DCa5e#|3z!S6nQ?A8Odk2*ph-Fe{Av0uOR*7>KGT&sBc)LS^~?q{%p
zy+V&fie{t_L4`vD%*?Y6&9i0~(7WWIpi9kHn+>PP!b2+-U}B>2h1JS5EMVJh_(Bt8
zugp18GIy&^;PpEu7r!udZUg#D&*Q&}o})+J9zGz8qiHT@*r>qAA)UncQjc((`7MB^
z1ct=-UiHWK-fn45@*2%vvk^;o(47jYRIIO3IdHEux%F*kA)M}y?>#KN$82P)k<1hc
z#`?O4Sd5%O3)Fm*a7k@!GF;N`vAETHysopBYFihJn)g^Wyn%Pw0o~Wp#c-+RQZEFG
zviVx}hv<d<*omby;I9Tr<enYN)bSAM+Suk7kAb8MF!lgZ##FNlQYQ+A4J&}>^0)TU
zk9#I_)Du~%y*Swlx|iAu2R=!U at Al-p`A>DFGo`CZDXp_%N}_bd<&myK4^A9U-G)f6
zc1vHA(oAT-Rw3H(J^M3~t9?GN4Pi5O!Z#su%e)X;YtX!45p+N+s`)Uz*=h{OPTN>`
zCjNc+eX#DELf!#QU)BYjkQ}HONu)|zYMLP(n|iP0JvD6ULRcYfro!$%{q5<~5;RYI
zg*_&H6BE7afkQt@$FN!l^L{!6^?x|zHO~h*%mwBh68*5n7h*AKkc6mrfpCiPiViF7
z^g^?`3*AQrLlO3b051#!U4a$-rG_ECXnj(+#q4xgnGh3|q;hFYYLSKv2VzXCEGt7+
zCxBI|m0XhHYIAc+OEZ?c?E#u#m)%w_DPIw2B{W11=u3ipj2wBH5tCt;mBI`=FUJ+z
z`4}RVX9U at kVZ(*(7sA6`u8+1~NSc?EJ}>h^^#y0R({-WdLiahjS at RA|SW`7|!kX1k
zgIbd3=H|}pe!k{{%jpP5e`hR6&z+rkVf%;Z at 1s={CstKWoP;ysg<@M6g7Xm2=<926
z8cjybR89CFgI=T6=$u-uCQ7eWGvIeSXAyrlsSVmKl&E3#wABQR3y>0JgJIeQDt10k
zhZ2YRW^Au(Cgjqn7<VuAYUzc)GMfI*?+o#3Fv-`A)u{{?ox{*Y7jH<{Wf}5xgAFPJ
z(xp7;O49rEYtZ$Wz8+oJ2TL{%r+L$2&@biS+3Mx3UbaBWlpc_>;JeAvT-Zf=8E!@2
zdEjGGJ&cm(B*XXMZm9(BKHazI6y=ao;rZ4Zr;7TL*nURZ3%_TpmAC~B1W0)iaP at IY
zAn%8f at 6s8=yM*|fWdi)|w`_H*iu$bu;NLRr>DqGWKM-D|f?P1y*E7s#2gyuU54ABW
zo^e3N;rh3o`FC=y-KWm+#)m~^^vLq^#vH&;?Czat$(aCj-7_YH#rkltHhNz3C2aXr
zU?|fcw|xey@$VSkLBu&TKm)9bLT$Gxaq8qZKFCQ^)asaMIi@`j`>W6mIgY(z+OEtY
zLyw1P|5>-NV%U&hE{}Pobn(&5J_U_k%;$EOEgaJ4#s{MtrJDZzRvhh<w~0OaZA?sZ
zV!uK)JMP6*6?I8*3kN^`tkd~pTzpDwUcOEkdt}|Ln$*;?A&>2KwyqB!n$mA-UwdJX
zeskn?dWX%Xv$<rl-V?FM%zrW9X90<M(1Zg;S}q0B9)KY2h=|!{a;zu-A4y?|jW5cv
zq6Qx;3glQ(z~7U0bE-8m3jMru^CsMU^Cp-4+i$-C8X{7`-C)lnTu26k!609(&Zq)*
zMyvYC2$`SkH^aV5`7!!C<IUcDsij-77EJ3o!&7XT)juC2cMAe_9PgIcd`r63g0 at 0B
zbMH2gLn~`g3`GoLQ}TMt=Q46UMRypJ((bz*97w^&XO?9ytXjRux43(s2YP=jNgoeb
zbF1>=So~knN0lo+B%g{eR8~WN{``6K=FgY at tge>+ls`kBDg87ma?PT}tGh&Aw%LC;
z{q}#Xuc8|+EU&yUwy0<f`c%36!r0=Xng!_2J2lnP-TCtupwE!4u7Mo-O#J?L!3z36
zEY6Iq1970vXXp~+(W)3{q{C!T=^YI98Wb7;<LIM<JTO4SCy9SE3#=d#(!hiMvO>mZ
zkE!hnB152F%Q&3jG;dt2kK`AJbVaLqhWMyv2B7=)^_J^~A8%d%?L$B4w|i#$oViRc
zo6TkO*+Q;1SC?(i4#^J94a;@phG#o<SUU7}IDd`wpT8o(Off+dS;1CMC$xMFKVCnp
zZ`Qa)Q1ffXBa<KB|IcqWjvF)fK;gvahJ5ueD(8LbOpo5FS&PQnMoYe`p at SY;vgJWb
z&+N#^#_;f$5Df1E8<{yw4C3utkak3*)XW>ujB~z2lTWXsG^_|ze5Hm4m8=edbgxUq
zS}wn&?3xO#S`xq{|3ht-t{_5XrkkXzh<urum|wp5;upB^7+kD;P~x?q8_7yrh(EE4
zd6ohkZ9;;$;gT#Mo+19kkwzR^b at T3j=q;^Jz_tJH at zzWLN9@1 at dVrx|s;_54*Z7#Q
zTS+0eyf?vjX+LVdONqbPC#GvRx=T_*h=Xy3#&<D!UCE&{Q(dK9rkRSfXK=--(*_Qc
zv4$M?83U|Ru?S%t!ZDd9Imob6ETJQ<!PzJfadX4SnC`Ne1OEnv7|;p2G(<)g6b_58
zKRml6ZlJU5#@y&Er{*$D{u?Y}Q#->M>9Y%IJ$j^UT2@(9ZnO>0`r>jyAE}n^4>SHA
znINKh#fawN^P2&$P at sMFkw_2PT?F669ucx<L_2BIb>=aFq5U0dY3nA=f?fMT13jG{
z%1S_uq-Y#D_g%>M;5&^=EH;g!iybZ!cjphkyC=hk!ZZBHLV-ckrwtx7ea67P%aan5
zlM|9w_TO^yEq3DcL4&4F8#rkC-qggT`}_B+Oh`&Sxn;{+O6*@CzknWe_l2;(^7OOd
zR}pHS)oH1D3@~Ygc`D98_^JQ&@De@{Ztjq60CV%8j03H|kqALX+SM%Wf>WE})Vn|2
zB6u*Ls-<-#rhSsn1muWz9MG;eso4-6cnx|QD4qHkj6nR|<<pyLL*?N14OU2E+i}7V
zzo+r-=9V-51RsjD@&UGtvmYSs6-_9uJ>pL$Ab7c8EnL((1!m^-7 at Xbv(a~e~4cXN=
za0cD~;C84=8y=g|J0bCy!?Ct(P$e#z1IANZXcLJ~AL~<lBEv;32drk5_B9yMz`4VZ
zqlubfB;e3w&5^bKNc9cTh7GjEEyke<pSctqrhdB_Pa3hG4+B!bUzmQ!Q1!snso at h#
z-~C|3Q~mp{={056+(r4Lr;aZe-eW~xpJ&EC`|^0E#I#_<+O>Au;Vx0WY+ugC#MFd@
zFvkI-seJZ;60CF1XKvAZiT_W=tJMFK|4*Y8S}A;T<Assb!_XmZJ%b&6P at lunXm&4C
zf~ZYjpVy?<h%^h$p>CSH5^k$j!6V>HZ>Xp>somJ>O=8QCltfH6IFn5?p(sg>Ya-kc
zve~=c?=_em%TjiX at i3e{y>#YuILjMj@|x2oC5&4bnfUOy{8=t(G^c5;Sh8^85^8g+
zd0<bK=8oMqWK>~cVv>Y&I<IZZW~L+gSqq|lCPn~TI7$atH4i7#{A5h(vDkJ-7S&R2
zpJ~F$pybp|#P^t*NC_w2Jkj(eWZ27pmU8@`f6 at h^R~k<I8|S#7I4YCgDAQ=bwCA|M
zR3eb%g5Ida?m|u~qt2mEW{~F7s4zsCMPQ&s3*rV%a;k<)P1t6D2 at Ki|3)u||y5!yP
z`XMF}`XMHU8lRQ1qAIDh2TU2|&FT}M(0fkelnGjGwL#xKHf$tGE4G5*-Zh{C8I2S}
z^WX&Z09+!$jSGb!2-dJQYGFP15DnJjycO5akTC4qM4}}sfjQO4r)8uXQ?1 at D7rwsn
zO;c+Xok at v3b|<%v-$`VT3LK<NVkmIbKxQ8mPQC{;NVu@!LPC&10te;Of!c75S=5GB
z(B=v;oUFc|%QoL8v at R%P5gjZc;N#1_mw*55lTUvC{arev<pWqddcuU!qb5vXfBy2s
ziK|ynocOY3*!%QHtCuWUxpK*p)iRxX3-SFe0lu$cRdg`lX9cL?VI>WON)?ZQp%>EO
zn at t`0zKGd<0!4n~n&m%AX2kffNM3kTvLe=hm5GtI9Fw+Uw(tJ{NM)VrZQt?-*`EzD
z!X{>U>vThmc#wV?00ReB{Kx<O4g9^*9s`yzpQ3*L?`Qq({S_p8`IfeC88^xO;042c
zU6q(=Kmw-0Bd*OJ%^q{LXG??}Hf<vz(|VDzMIe3n(k1ywERaP5sVP4iZet~%1Wx;d
zq}x5ZBD(m4sc{Yy_&uE6XTGmzkCLJhZ_ZeDZsP4WIdEDIho`S3k61lDD|KRG-thi?
zrFXl=zIS5Uj^eDGp$Tup>FC{vzdAqH6pgDL8F)R<0$9;WJKI^ik=F}s2&@3y%X*ce
zS90L{#ewfR^!*B8Xyl@;G#~F{ldQSX)TCsxFZYhcuqHH?r;#)2a9`_Vx;kUIuFB}s
z6&gLdM596HHmdNw2+rku=K~XP0WVzP8$~;nLkF+Z?M2Au!Jk<tKAhk=x0B;JuhZk@
zc`nM!0~>wV9sZ5hw$;r-uh|1a4Q}4dGAfRyVCWbFG>=h1E&@p!2=gx8Qli?8{(tc4
z#Jk^pato(?$oyZ$FDry3f)J7jbjgIocS_DVn&?gRW_ioJRdf|o<*xD^6^|N^nP0Wk
zTkCE0_E$rWg&qq#={OmF(s|5v(tFbD;GoFaVJPR0^oSmnN1dooG$a~5W{)K?Br!BG
z%;So1$9p`H1Hce|3>eRsh$X5Lb(y}*P-ZMKmsrX|%0kP+N?fJx*`AWfC7^<?WR~+Q
z+)F&`!6tsady{7ysNu13yk1?eIjK9TKWR8=tT)$NPKKNeJsI|@v)*;YecaPuKAoU(
zWVByHMi3hn6cdlWV+6`At(q){OuOy2XO}KHXp@!=OHUtGkd{6yA8v1AU%NAi1W>;g
zF(kg?;K7Q-p)1md;U2^8*2(eIB+si5D*Fh7J-!U+WX!<HFlH0_V04-pa}?kh;grg7
z7;>jnCzvgoQ_!R{8Ijb;n$^5bPqCuboOlU|1UTc1e9UwPyMmEKWkDtvw!_{jfef8+
z0$(VN_Rk7KnP at l`J_H^@4EG3p#rTRzgV)6fg91&Bc$rqT0az)mVjpi^OqI6Q;Lt_M
z^rW<fx!k&onhHUC at GqP!?L|0JDwW|FY=k4x7!Sd6xR~G$iH{_>6D#8_(@601-gfqH
z+J(;AF%IH(Ao^IJ-e<;$iu%}a3 at qu>jr8H^>8KCyqkRk{=qQgvH3aoxJLyBCKEDR_
z5$KhukGfItKs2Yp)3TI)eNewwgZeR~UuYv#bAXQ at Qg0Yh{02TP1RN6fdyY%Su;E4Y
zU?_?Ebc1a^w+p@=PJ>h0E$pc<4Hu?kC?F<Sx;q(Qb7&v*$ewaYwUSTRZ~b=blU}z{
zl6=L$JKS61r4wNyl}INtiQ$RPL|3A_5EfE}bRkn1Ug#`z6}qRuDby5t3Ns~qigSu<
zin|WhQFU}3Qx{(6taH`5Pr{SbN%|y%QTC+kq+5=$!r6p64?o9WP{VKD+(?4Ze}miL
z7&!F)Su<zOsw6?^a}OV88l;m_i*)p_q3G0noQYK41NJw5K3cbAvd0{oM)sJ*Rg(2g
zQD}TYr|s<Dv<n^D=gaMcw$DWSVrbN-Mp!Xz_eB(@`e}QIF$irhMSZ(8>Rk at pH*~k-
zCD$6qR#&;B$~D|E#pQ7%x`0FP(hy)lq#MMsjm#Ca&56Enm4H@>f<RztwTL|dc$T4|
zKmmc|U~5Vthmi7zB$47p7$d?A5weX^0c<!Z6-WgKVFURE8<<q|_wa+Tp8O(T!v?}r
z655V(PjhZ0l9 at p~__wdO(;cRb?`BqsfT2BM+Bgf{HQE(MACA@@4y%o>?iSyztHo~c
zxFSgxF3xUna&9gmGQ*HykMBmD)=tTJGVQ_KLv~{`oHCqJk|x?^Lr!LruN)-UL8!`*
z(A65_jP at obWLh(v>E6t^+=PM7an_>n(cW>f<KpI6XN1lSpW&SoH77PSB*fk&#u*ov
z?(7*i#FFP6;29h at -ZI%bD!j;9<QeTPikJ{PN1S1vW0_~YFTB(<%{w>tesQ~4tvV#S
zFkoUK)}*))k%)bp9aD2TV}opKmtA=I7;0jV2S&YoT5lMZx^86sX`N2`AwM5Sh1UF0
z`rg71h7HBxwcFcD&n|?EduK!DX8(%hC$lo8mS*3=?$Qs_?>vLUM28G}Z}EH6+G=pL
zZDHZLg&1~mydHs<o(hb{$n@!+cDA#2B8T{h9AaZ-Ipp5&8S=fSQ4Fy{EL-fhz7+D9
zwJxOGS`|`aEek<%Nr*~@T{%{W+}lg0Wz2bWuhu7)i)G>zQ7<x+l7nM|HHeEp;tSCo
z2HL|cy#-qJ8V;BeL at lB=6m27Jg6-kK*Gb-7Mcvb2<E&1x(8>qvZvq?PGB$K6T&5ea
z%k{fxz$C#WDv3^FhC|{s#q5T=sonH$rXJQ)^>jUBnWXsJ8&l=jW7<!1s2q|^HV}MF
z0*@gjN$h2*rS;|yt<*7T()?*Nh}{LpNzCFbAPLOz_2?cOq2*bfmjg_^y)ML2XNj+)
z_gShFBkbM~IyOqHb8)KsqPoZ4$4zl*jop!|nM^{;5uAT<OHK`HmtS7GWsojoS32x1
zti|cp6H^LP%2Vo6IHZ4){8&y|-gS4Pm at 7_h8Gbjx7f@Ft<e=u6$C4)vSTgs<_kA|y
z_gtJls5oP4Uh(M7kHeA)Gq7v(_%E-1_4z<mL4H(bk0{@B6>lC74Y}<IAC#HcKO-jj
z;qgm$rHmQ3VE)}kOuI<j3|ETwzdzx*{lGEMS^Lt?+o=s5+B4;LBTwzZ?LcT$=O(%N
z_~f8I$$>HF1mDX$0{7OEdyPKrn&>qth0%p6xzV{P9EL+0_Z4uZT at DyQZ_woH+p~AN
z!R-S4Khwd#+%Zkjmm;-w=@$~Znwol_%ckqxpN2TBXOp^C=kf*>2NFU&=>}Ca(7G}V
zT8~O=O3lv2X%>j}l^E$WGXuHJQf~J;bG at Y(+SoJSNxg0>DPCpoO<zH8Q*U#wZ<uMA
zxzIP+G}%1Gx4^W(T;{9tZ82>z?=<Z+KjwSU^rHDq)0<{nN={PmzB#_$BXfrLo|;qA
z`+=M_y`RW=toQz$-Mt%f>U)#GASL>u-99ZlNZUz at JY#UcMnspGzr+o3TbGs0Tw`ec
zS`Hj)oxJSYeNTTja9GoFD8ihUW4aw%a70Jj>Lb$cgJxXYeEOUAkRs|3j^1cc0*a{o
zaObeXVTICZ>9;_n$K2_2r at wPhi7}F8mtv_5$MB$i%ai3b at S1-=SrvhiK?+QL)@l3F
z&f5`81-B>5?M4hQs2$5|<>BQXSzc?qOnlz)z5h-6^lMwD^kICABGX}C-O!*uOGzIj
zuayVnwKklC?bG%?)P}an=!?I~Ymunmb}}b<tU09L|17T&pKnB8bV%;})i*9WCN?Ij
zOH^!ZOhjaa+vE0nJnjguhjypM>SM#5lq*fIkBy3riH<_8ZXwb|>m%ts4snmQ+7Y=g
zP9GCZn=~G8BpnhP72#%FoTjgd>l;GCRW6aF0j5BHSRB8CRX4(T{UX1diPN6K8+0Ea
z-A(z?eLxfde`1z5K^!qN$ALJ-%<M}q^}@ui8SeCm+^&UP%a}5 at j4R{Igfd&1UDmRY
zO2<}lReY6DWvjARg;a%Bg<-E87<B4|9kG!#D7&xsAbdB5jfsl!+N10&U7aznM at 7}T
zMHMTx`zq!Hyx9|=(7m9`32Ac_Og#=u%HaI~MnJj0k<vTV_YTMU%BK!Kzb9cLd}@Q#
z_LSep{d*{Cbyt?Hz3=RjMQckG7+_6=K8+wSwhR0cfUy{|?;{mh{j}5erJc27H~}Zo
z{&O#fYh+$5f1erneit}F=%AP!K?l)6)F;{B2f?+{$K{awAUgLMC}OWLhspV;8YJP&
z^mbg%8QOhDpn8 at Q4rs*XEL<ThX8 at K9v6Y<U18%uQ($6Yt80)oqskdONbRPdmA=p$7
zH%sT3V(HvkT-&suZ7&<gyrsy2ulahronf*NXo-v0dcuelsNEAy?+H5_T^%3a&F=C<
z8jvU`i-FEaL!6y+8~R2L<@(yQ6*<s&uOKM99{VN1Ag2c`2l}!=nkpN~erevGNcI~H
z@>D~t1D*Z7gW at Jwi=3mqV`686xz<wW4DXCsTbeT~Zh$jCZj5ts>}=Hx=loa^)6U?W
z4vLxb at 8mkV*f}I|*(#nN<StCASjqFP+5P&%fiPmuks(jc-;zgSDCQj<_Eb6DKiu*B
zp13}a%`VsTd*b^!Tdx<qzXAtPbnCWj#<t;SS7U%nNZ2u%>?`rdCa_T~(;^IGL at x{r
z=!G5n5V-oKvwIO-T_W_y<uO7SM1SOd$$@9gA^n6#gU3nv;fwe~lCdT#&!}yW_fX;+
zvwcny>Oq1&s)e)gOL|}D at gB{8iK&PRgpB<^#(VH5aPU}X0Uts0P7cg_4xV?wc2;PJ
z0SjRW%r<k_hKA%@6-Dz%zSUMy<#Zy22q<Nsv6$ea^#D#v3X(a(@V#Io;LyGO<vl3`
zfjyDOUv7w at YM>SN2#jwL&<e-<#44d2xCH~iqOgxI164o|=nmuO;CsR6ZNGOuzEp<u
zWS~AfscQh3IHlS;=AZ8{D{wo`z+)o!%K9Wbk;vrHiXKo(^Z@*<3bL<x%D#Ra+}{v`
zG=r_M0*w<Lm|GE7ipJjnz98f0-P2$Fm;Py7GU~shv;Kkkh(Yri+CCp at qcR_ovySwS
zQTnS%|A|OX{)4j^qQO9-YtVwH?FFoB)Hw^CxlXr}k@>Y^-!O3Ci9lTLK?Jurr|Xbo
z0GC^i@<oWyjbPUnx<`A_P;EQQ?o(6Y8iod1LB;tZ`kJ$Gc2^|9wb)74a(|%i7ufjG
zP#6v6m at af#Q>~HzQ^>A#4CcXEH8p<|xC=wiFIsf|Zv5W_?*{Bn1b)F80>8NSV0a at -
z(F}&KLdr+rm-#E~BKgNb?t2mN=sqL|fsjUqqRklY{rCCdKFC&v_Ev?hTPE_Xz*u<%
zPLUL)jMWiN+wWC(a<2>*pAoniB=<+~`;83O at GH_D>xXL`t4!LfgZtlOe-oJxh)qm?
zkBoJ%Jh(9k&hIF2zMssmD`_XOy$YNkBhSkZ?vKXlO5jk%Cd+V0`sbncd at _CwhV~BQ
zt2-HAe*X^ROX)bTAZq`VodVqV^mn87x0!snGtghQS;_Ms2P at DX#1k6Ncr-lU{{C%0
zVp&D*N0*X*L(mt|jUg0g$25LOy%tNEcBDFo5Gm6qK4yO`WQ~1I2s266)p;G#)y+ud
z?B#QDlu5K0t*10NhoDZyYwV0oWKCKNv>8B%;VO0?ZMsB$E9nGVuA<MlxC=hmR`5d(
zxK2xD at mcpEIg#KakI1P6A9)1-&0c=vjW<r;J%|$uGR3D)A3u)7#{=kHUO>3(Ml*5a
zxJ#QU)Tp`=cF}p(qQooPP1aDY)?)A|Q)y}sTfUk?T*k2v=sn?=*aMX02UbFtUkD1r
z+`Su?!nxA6P6L>k?@!O2ds at 1TW0ugKco2d47e61ZHHR&)Xsx>uej4Rab at B64Y|DLv
z%S8LRt8EIwo&P3%JfW(9ZY$ey368g|Bsh-8F(^3R5w8*Tr)p%pM&t2;@%(*pA9Od>
zB;#?1dFch9^Y_7}s$Y_Ey2HGJ`yd>pendDLP3^piAs3HA<YCl)8q;EG=PBGi6tvs6
zgYDmHdJV!+p%HRCkY!UP&Y0w at cD)L&{cqxoafr7vzEsMlW10aHs6WvYl=t${Mj9HL
zla;yUF&EL?V!$x!1nDzW?h|V8_aQkZe^qcqUY`U7mxK<ugyYHoCDR6Zjo_c1^+WR-
zh4V)eTrLH@(28_d<}wP$h2wVS8`547h$pT at YoG#~{rM)3{B5{+%Ksn2#hDUmMo_qT
zfF937Ysk_k;Zn4QiL%|L91I5~Nc&4dq9Pa2p{XlM-z}tXA?h3H6W4%p(ibx?LYS0b
z86Ue9)By^Eyt2MH$0b?EU7(lpEEVvvyTN0)8|w48G>S@;*P2cwYhBpRH}JiBn&aBa
zOypigum1%1*VByD_M%aqlYL0NrhOKC9e4?;Xmkf2N8qoLS_h7G80#8=xk`8d95u*e
z!M6RVe>3srDDkCeRce(+tx>C0G(+RKBJ541QL7jd-iVXc;!Nvm9nkPBw29zBouLI6
zOX=R8-1vHPAk8Kdq<k|-`9_<UVVBLBd`#4PaILgeT8vN4p4ti{*~?PN>u*UvOPurt
zrI~Z$9W=KqXwGhuD`B-SK`n at aN)&~lnW;p9%xoX7xgu(i3aMhDmItFX<V>i$UlYTK
zd+($eWl{|WEsppNt6-L}4=^-N%36Z1B}}=tT)T!@qZLWe4VpPm=AH2#oVB*>XQ_Hs
zSu<ym)WtRXTi&DA7S-$nK|GMa5gQMeqV-SquRoIg=Ofv0=_($zjsO9;!FfFiUd9oa
zNDknoiO3kAGB1(#5y3n*a4saW3klDc$1e@&{~N(`r2lNhE4>6BMo at a}=RmFgH^%P^
zh=*TC`)&e#eYPldo$7M~PMBr1sP%L*V}QxPY`98N at HRCOZ}!YgIjG5}GRWCS^#(n|
z8=BGo<K(QM7M_dr5@##)*9AD9DuELg%sVfAf1q?|>x<F>_A*JEpL?xx>CK4`)AcRA
zFr6W>Z7UGZNb))OI_~o@%N6HE?^(x at uxJCXLF_XmT<b7I$*BwEe6d*2C1sM at pJ?pi
z4~F5Dkn{A6bQ}`Hn*3AXc!RY|m+s|0A4y~|VZwsbGo~Z%IY*uk{O$3KjIc<Hd2ErA
z(x7|dvSmT%U$TByN_bxi+Pp4}W{M6)a;g#QXMR~#PXSu!M9z&-<lMIiKO9NqT;={w
z<y_^=4f98~gwX#Ka*tC0kwhm%I$NRO1Be#_|2^_^h7uY0B+&&&5+1GG!}`!2)L+Ke
z;1fX;8Nc2BgT|=C79o>72F~Xy32(8V0s%=n!+jBUvs2Wb(w|V{gxyB|l$nPXkuhj&
zK&3M=31RUbY^=lndMPG<;%>BmIPT??;S|pH>NR+Cy at lQ>UYzYUQa;{DrGrk`Be?d2
zN42x1YtlE+4L!5RGqVEc?Q6A(8YxeThM&V@>LjM&o9j2OGY#$M?i5 at PXTw?W0SfqS
z>ywFX9oLat;!BBe(>8;K2mcZbP5Miky6$_-v3rD1>AEQQ*-&$J4-VKOl0~4^^T}E<
zzHfMT5BydwICZH%FphZMVW$H*|B&BL+me`;n^uUfDQRWss!9{`B4CgWJYej`9=p*o
z!D-crH9RV~u-q+ at m5A=+&swy)4XpmhCxb>_UMFY5fDsRUIAY{`4?`R5duN)GEkibW
zFALbWM~odk+Mga{WYO3W(z{vy{26|o7RYpqd7aR$G(X*9+(C3}Ogr7eIbaFh>Q3mB
z+#m5coHrtf$BhB)<72v&Cetmf8!3FLnb55<ggR{;Bact=u6CGDI%y~QA%f;p1cLh$
zd5L+8z;kf_QX~g%7!QK`BONY*_+q3hwtZPgnuBz{sl?`AM7+Y5Pwg<izkgu<%J}~N
z)W)d+n+VQ_ig128c$45!25EOlWjGH5n*VarIu-<MH0&IHAsQz`(H&nUzE)5x0*t$Q
zEfD><>p**==N>?P$CA0wYzA-!<zU6$$96`;t7$#r*`kq!J$c%u0X<bZ;(XkMxMP!?
zX+8xXw9DzYWi1Hl9ZDM3-+z~?&<{z)D)FZz9{za>3zzM=B%C12=M-$LoeA6HgpMQH
zJqEXqqXY(M?G9_GbF>TbVG>)}tEq{wk>=Ytw)84~CJ_X%>V-pgNOp*r=p2aEp7s<G
zuf67WlPnR%;~E<Li6S07wWYujjwsc*OIuDoN|Hqc&WMSg!{!otiIc!s8oLuc$0vGJ
zi4KFx?O>EOl<kZ}=fM_Av=hakeH at wA`v|S?No*N9#g>6-J*M&Z+A`$vWINo)g!UE_
zdTpg>_HS(&^0_vl at xGurhY<Znw##Aq-f_;djpHwK78d!>$EjM_AC4twM5c0=az;e%
z<+TC(Yc06i_6xB3jBCQyM3;n>L=O)e9-SMO8!gEF+vldir}QQ=w{|-&;SawMovc`q
zb8|s1Bg?tRr71XHum7B%+6jBK{fzHLIB|?A@!N)}os at i@M)KD3i!knTv*1cJW)?Yf
zV2tva1Iarf>p0lE1ARX}_<QAypWM&fAour at zZd2E6?-wUpKK%RHnCIR00!NSbwO6I
z5&Zfk$<f(?4(0gUnY<u6G)ci at xqlh4G5r%(-qYWV=+KVg-~6RNo<oj8S1!ml9MT`t
zl}R#P8BP411G(o6NH;Mdv27ou_b^AG%AjQiP^=LL>9#Zx)W#x`?2Uwd`Mg#l8d14&
z4moIgcc{yy<d3`QaQ4GI-lXJH#C28yR0JpklCf~4u{FphVM at tJH^fAv0S$J_ls|ra
z#fA0gzY7)P$LC8mHAuXIgQVA1e3#R!SI&1iy?fKgkudd-{jGQQ|0A*c)V<7QY*B16
zA%^4|J$lS&=`?;hx@`$siyuioR12npP!8H7MNu;R9|L7k(8KX%jZEv2k&draug7k)
zB9V|@I$?5RBCeH^ot2dpTrFiVm!Nmiur0~t9kMC44=$dv`H|FAQavR$4wp|!PM&sO
zQgWbx3fc_D5Rszu4%^fx#F?vQCr`dGf7nn(4&R7vxO5E&&P8d(*4<9l4qgBAsxfTq
zeSf=RNYnV@?r$B}i^7sV`#H&HAA(mauttcS$3SDMe>uu4)3dVDmVYC)u02lWNYJt8
zi6{0zE+Ki+gro#%i*$#sZG`Jv->aDO^Q}1*Xxtv?U7p~uXQZdocZq==UM26|S9yUl
z{q39JXPvq8amQEbP at g8z7naZjF4|7fwPD&O%|*j0u{z9QFeh+Y5QgCUQggH7+D?8Y
znPvBZpu~hY$vu{`O6PpH3Rb{IX{fZhLrEHTZAMRNic}-*kf!v^fN6vKL*e^>LxI$!
zA#>q2^V2~T0HokeOtjIEk?u{gqowes8Zja{{q9x4#cw`G|G|o+#E7ZYFtwo9{W-lm
zRKfY^BCdk-(M4w4xJ}X*{rau at u|q8!k~5TzV$b2{LaU<87;r>?1{M_2`lFekiA14k
z$ms@{w88m<3!ff6YSiebM-Lt18$GsYtn|_I&p&?%cC!zeN3sFZt=CgRLdF(L?-q{@
z4aI3e4f-9mRM*-X`0&VOHz)q}JObk(x0B#ucQg}YDuJx%$f(Xy4qq6~@D&HCJ)4?W
zt;E%L?m;$OjOW0C`)8-3|7PER at SwjOPesMGFaPbl2hEa`mXtp5;Iq%Ie{jZ<<fM+Z
z8$!{X<W0bmgBh&}o(|d<jAV55H{UEz%gRchB;6oj?vPqnGA!ia;)J9LladppI~8+o
z{XC}v$;y#;l-l9`yr@>}{U94CylI>a?*<wAX&K;^9ib1jPGeZ9CK&L??pcgMe(|DS
zIXS)P<1h_I{@J{jz&^zx*zeZzo(%M(M at y$hkH*g(Cl#@=%rp>=ZF_c`H-*F~%fN;f
z7OS_s&1&#^VlWaak0%k%w$|m)b?#q(K5}UPexwz-4(#8b>U*m7XX*E?R7hIazJ2>F
zF7MknZ_u>vOY;Wz^+uIH46RVC-MO<?`tkh!6i;ED^m87SW$QT>W)&BY8~?=i{9$Ug
zV;v;_N|1~B`tB8Kf9rN?X6qtc1_wsMBJ_h65xvJOrPhZPxWHha)`tE`5Hef|dKmA<
z&PTVgx|HlQxlTb=XHx4;ht;+2u)}P%8{@IzHYrYSxP*<Xz+><vdU8FuB$k&#YocH_
zBiETjORwxp4D-p|C+Vj1a3(1P(qCG=P5Oz{AX>Ft8<Kh7%k}qVhR``upYtD*8X$o}
zL~B<|_bnQ>Zr!j&pkvL{TwkQBNxY~%#nr|E+bMILyUBAg{8VIhTvv<eHYCuY3DE}G
z2L&m%O at 115sX0@oL;k`FK_#VSEDg@!i{m}un-6co!C&*fS~U5 at q}7`qeSB}tzGwGs
zpLu!S!tWPL$D|i_(oqr5K5*)!$0L0g*L8ByqzQk_E}b?fBVGD5D(d?$w~=^5Qiq7t
zlQIL45!fk2r%5 at XjPyXcsAsB4QK6jPkF)(1<v2w8&!$Z<vR^+u&St5I$P{i&cVz13
z4YKDT?3bm83^^68%Y}2%mX>}Z-NJt~G at y^1<)$N?B&D7B>eyoZnck0Oi?PKDJ^cmI
zQ-p4$s1ycqa1S~4+ioyH&FENS3K7-gaNYPZ5i_14WVLtBs+B9yKCk at wi(aWclxkCi
zxS~x~ZJ(eJ*MX6dYuDhSQv$D4ox(WBN+Y>ZXw5A6tQT97apb3s=g_1wa3~IHA(RXw
zSw=cW$3#eXgLQC2>#oeIk<{eLt)EPuOpUC{Y~2Mnz^#*c0aDKJ{{1{23JUyW1D!(c
zYYCrt;ZE=EBS(xFxxM$D3lr(<ciyUriwm(kT{MkQJ0vcyCRFBoFSNA^0IhvC`r}?3
zmQi87PKa<m*U#V+q0Me<C%ch6hbSO at s8jQnDz3YA>Bu3Ov7 at Oile_lFjiVE?x7Yml
z#t+IDP{NZz_AZk478|_2{qi|Y4~Dw0_|dtGM-Mtm$C=zw{n%0Sc1b&TQFP_~U&%Cr
zo=0rPh(^fT8{X7VNaf`8zQ0$2bpDxY_Hs+nx_<qnFA$j7=|e!N5ki|~+G6(C<3)h=
z0bKjR2U69^lkDZzTB)V=N!bbBU-Rlyv{wM~G0|vSl)U<0BPNJ;uIzBcpq!!iNjLq~
zr{G$+^_d4M*D~)u+hr)rmq<U!b*OMvD!AcEo_ioT7p|E=fHEeAZZAPs%GB{-VZprf
zF!aFm;nX|r#|uoJY&G=17xgb<r|$4xZ^6=+UzTcKeHAV4q at ed|`vK9|D%4*OKq_qa
z4Z}IXa^R$4(&;FeHUySN!$FbK8ThkQbLuGF^3ja7_nn<FZS8$`E>cvhL~`1;-Qdxy
zVeS#7kVPEq$?+D<BxF4D8kLV}?OZLI-rs-nr1GQXGZ5{Bk&y+ZJu at gc%i|e2E2Ae4
zuk2eiX6BNHW3$pTmd*W%akuo->U3et($hwduA_If^gEWGHfBsMU3({f|CFSpaz8C1
z^{K3c7AZxdh*aRGM(y>YM%o-f6e&<S>hWKedO`_NBKGehV*lpoKE!tCuP3DiHbSSA
z1hF!=gjh21BGiF4<-O_B_WDrgn=qTGzpqeFUDFrd*ZL!35A`o2_Q3w^FBA3Qhqz4C
zhaXD+SvRM?e$KkqsR0&&<}wfab&zxLChk133Z-zkeF~Br4l!ThcD9PNkK~owS3&`r
zs|ufl`YTyw7^9(4md`nFyGV%{eJE7QTHSXabrfNcuc>|7>lPrvDgCKxe}SuY)RlF2
zW9UN&x9+xm=%2S^(<9Q&mLlwnDdllDNd8?c%LD{S^6<d3l}97eVl`54E$f||+k06>
z at 7~nlp{0ZOVvodq`}gmI5%*7n`_IptN3R%DB%LT4GX~xobLSj0^x=uEs at mFGDz>)P
zv2 at wjcN-O%k?3v$(H+T-|GmhF=@zb|MeVs<o|Ch at y!Ft%npqWeR&U>4P0DKFI$9a&
z at 6R*dBP3R>{^4fT>ef3Qe7~F^4s)@4l$Id;<~bm*3X$mks)v;pUze3*cpp|@a<C%9
z9R4L(iD_-*iVv1zE+?%gD$E!n*^zl1mo9S_vJNgqgY_4sGN%4rSt_{pT%a!14XN~O
z#=^-|j=wIIbe_E|NrB2#iLkbOB*OhPB)42ZFotm7Y*eD!c_q9Qi;`VrjUj>v$GMnX
zV&Me6`7@;IQ?~?M_UXwdV8Wx&wRP+IhgPnBsC&YOZC}lrDSajVvSQu3K;b8Egk1UQ
z{z_8%DJFV!L0)vU%bPTNcEh!wO=g*oxzT*=2=2Q1=VMnU#BkWMA5dZZ6Y^&hn1l1%
zrX)v2-<K=>cmfKLD_gp3)!c>UOJ>iB>e4aEZD?3pyxp#(xiy+_p4+gntjwekdwZta
z;4 at H;P9XZsNvS`xk~1OLh{d`CNtA}IorHB+y at YJWbfKxJv{Z96#!wF93=CO#e%^Tf
zl8l2c*U)#RTc4Dcek7e|7#Pmo5JRF%<0nIEmX9+nowgHxeD|CF;f|ZdV_#)l5JEF_
zghFYP&)J>N8X~WcL&_sIQ at 3BPmiZ=H5|W?*El+ezhxEAE^2yF5I$U%l{lc(uL5Xs)
z`SYKPmfq|hzf3i3Tzkq~^c=JVY%Mw01O6fcvOq_~H|jw;1Q*z%w<je_Kb4ex;;*w6
z9X&hw<yS_I00H~1Umk3qtGrNtNl?b6_PHun+S0K%Wb|PU7X;>7EYGn(MjDxCB7QN4
z)b#Stvt5ud!aI at yo1g>I1k(T`(L}EWBnq<6Zy>sSh at 3$*aWehw*@oL|5MBO4q00 at V
zz4#7(W(I1%#lBDUYy3pN1Qj8xkVJ;&D60Xh9U1Ay9u#v9Mz+?i?%Q`pX~WAiO8fR*
z-C74DS1&()9QK5n$B!>(-p65{MGrjqk8?{ZDwdqvzy857FtQC)N<ZwE-aG#0o5x}1
zerQu<nFRE{Xn(x2u%x`PBGtvDd2MFdUNeupGF*$_zM-_D at 8W|{cVa_M(^XlNB63y5
zL+j5?-aF;-jnYpm8e7j?0!m#ZZXWv+*?WZWZbfJ!N&38yKDFSXrPYTv#14;794=j#
zs#@Q}<%wAPi;?b`i{5u;Xmyp+a9o{;E@^F6@{V%(%u5&^<nc11 at OU&Dj3<C=C4kFR
zrN<}FS~NwHo}ag|_X+7^B!K?6${yEsLivRqQzi|fzJAyq8lU*(oPlY5kF_>Yf84Eb
z4{<tg=I0-mVb)&<$%y4AD^l*ga*9h_X%SZ|lHNNl&6Iw^C5vF6BXAQGN!=o8J&vK2
zzW5J(5Hhe&U at VfeQyz;?wR(9xRz_r+Hv^~4d}XCn{|?TYd9DHueu*T`JpRS`HgM<T
zFOK5-pK5!P{U at 4B1d^!&7PT}yA1e&V++M;{&>ys6*T at m0M(=wACb!y|ccrTJBUcv{
z96BUz+p%Lub?uItx6{(5mG(&c6;6hccccQf)muJu>z7LwyWBZ2B0oBs%y~3=<`eDD
z4A^=Uo(XX(cUdvRw4JtXtJzUojUFIvJ9Ma^X!XeTh)2HLYKO^h>>E95#K^a!qw}RN
zbKI`QOTOGXv)pS{!-hLZ=iB>hT949cX=&t{L#08?%V?b<hzyM1PG;1Ec?5{HJcn#Z
z|5JLDN^41kd-oQR7le6>7cW^jZ|<C#+m!{lhGcJmUQx7r7nW}Qa`6(AISR(5JHqh_
zr1ikhtdNSx-Xx<xY<~WrJd{9^HRz#H8R`DzC-bBAWd%znj=Rxowl^|0W%`1-b7xe|
zTsY^qHLE8KgQi~79bFPr{%C>Ct>@^Es0d at ypr<zV>*L at xCUb03NQliE|BYL#8<PL@
zmVTL0f>vjWPOw-hG^sl>-0Vega}Dv+E(&eHz^6<AFFa3lF-3IY5rk3&)Z=&GhF!m*
zn7EM0ynz+t=gwWeuBvJ|)I7B<S8Z at e*P%nY0UeNsOt<*l{<D3)nCPK!P`ur?bm_;-
zXPd23i?a6^-jK9rPE$ht0$_$=!0VUa$x<9=qFN_j0d3DM97VuPdZ79cT#MAqon#x%
zQd54V*5bYH6?^~U2N0kwUiT&1av2Km+4qbzl5|MshaJG$|GdZ-=n;~Y`|tUC2Nj~H
z9b3F)@xpm?=FZ$cV&v#i`+h)=`a+tRm^TYOq_h3bZ~KNxMLZ9$Y5U=UHHhp6o|b{1
z1`RuR!crW?c)WDSgCG6ZD<eh>Ehs1)eq>rE%q;qhMx^2NQ%{}l=brrd_n)r+r^y%z
zyT)5>i~5!f9J(l|-h&Px{=f!%fmjVJP_|O`-yd5v`>m#e2`!EA^UR*Bi=TW@`kYh!
zqb#ahdDUiVViPRbzp!tgbC_;RMM}+R5L5^HkG1j{coDM!`yRq|`0NI*qlPHFt%w;c
z+hqvo%6^=3&PJTFaW+DgDbgPNBUQ=&!YN2ay?FELkF7JP9Y0>ZN%-4YB)p^$yDZ~B
zqt{sRnH<dJ_7lDq<Ck|-Kj8B%=<CovvF%$GklWc~q<x^@N0Bd*eH7VH(w?Za=kf8f
zUt)*$d;Ap*0lzh=RQO3Ahm-lN-zPIqI3xG((2mC8m3D<Mj|hrSXwMxY;`}6lds(Ln
z#2j^q$=nEzko!2aK7R!Ha*A{n at wevh@wY}wH}zXk?Ayk+Rm4Z~-hTJSxr^*DG7m?G
z*r)c`sEyzga?a at g{@yrck&PtxTa`HG_OsKC;HSXZsk)K&ga|^guO>Oq9chXn=ck-L
zV>M_$d*ut!_$P?Z!a{HfW(WHJV2B30lz58X)a^k3F$U$lRi6byq^~;ZFLvl(6zHG(
zH~sm)89!U;uhjA~ag?Kdf64oFk>6)Qzz?2zhrG`L<$aEk_mTUL3G~k_rGxqpNBH(1
zrT<3Q3$<hC*--h+p3Z{VCJt=y_ZI+X#O;)=trfK&44m(bLA1Urrc1#FNt at kxj~y~i
zc1Xb95gpBu+cs{f>|lo6w(TZWJOMr^-E22ThKFO5bC4Z!ZvK2k-X70a&K;yYb_P=k
zG}xyEMksuc1Q4d at Ksm!Rk+tP=E*2!s{2$i71iq<aYy8gKdy{lYvnNgWG;IPD=#sXf
zv_L4(ma-M-3f)*Nl^rPs1cb7RfS at Q#DSKrX5GuF;VntL$aY01|6cIQ2aQ7)BlmE=z
zo23=s`@aA0qZ_%I%$%7ybGA8)nHW at Jy>ydLgD*{+pOr<5YgI*(0$j`SKcN7Z`oTxL
z3=@lRjT$w2*9i1HJG*&9<FEo!X3JTUJ!Z(*@?AUc-rKR0mg6cLR92C_mKNj+3(p2+
z-ZMdC3}VF?g8&jy;}?@)#<=_$!>FMz20$`{w(l;sA4%G~e<wCK`h2MHoSiD<p+Hr{
zu0vxfM!A3T`JtgIQb&k9XHL-PBgB}5Dt})*wFDgUwHN&_US%Zs`LpynmFK7*1HD;S
zLok;<FT;HBjHFCyfmm->Lb$T>SH at GH>xQHT?}>&|e67?|V at m^U2D=R$0yUF`o3(y!
z=GYr=9K-a56x*6j%z at lzV9w2(=uxj88my!AvDe?}HGN)jA9_vbV?{f9E$o5dQyL5E
z at mjZw3&Cqj;yhTUo_U<&_bK;R0rN5ci4b&6KLa4fat<SVns})*3p8Z)TKQO3FR>Kz
zsU6!%xC3Zln_z~s;l*JE1;bt>83<`n<fbj4m)W%fGpaWj(biGSe}m5v<+t(w#BXy@
zJ$S5Q%=9Z?7LRvU!+<`$R*l&?!*xr#@WnX^$@3rIfKqON=`HgI=6&h&Z^d(!@~@Nq
zYUe*o<~p3twI3Mg$2(?{wUJx~3-Fq)@cJ<xz|SqrUV$b`%E1CJtsr=aH%Zx#sfSnL
zPY$N*MK8S|W9$>w6Rf0t(Oe?*GmXM$m>;~Kq4A~kGi1jgQy<Ux!8KW=VN!*hw}ATl
z at UpYqDZln(z3pv$B$(`NpW|)cDz+DW+j09&V*jkC|8}uOXSvV)+K=_Nw{hQk`X_Ny
z-uA6RdpABkEKmFID)i4jL;83Bg`dmmxj)N(O3(eTw0|rqz)Q4$p}h_BV$#1ShQkb7
z*&@I80<R_gr-<;+^uq5KmyF?m&9D7fZ+jd6fERu%g at 1$y|7(8!hNOSN-%yT^Ch326
zJAXsce~DlFvEKGJ?l|pV at K4O~wr};cr at Vf$$fJGmcZh$*{eSG&eyq2>jnAO{i#}c6
z_N`+3^~gZ{6RH3A0_w9Q`ZFQ}@lT}BJ2Rq3BlR~l2>yon`S5oBh6d_yNc=I6c|8sR
zvl5M<_nvq)4e55TrlSC9_P?n;qAgD<3htQauiW~{*2$&WeT#ZHuKe)C at Z5oeCKS|-
znD%f*!;;_E?#>;)Wc`S;A9tXOA6{B-E^$;0swlIk8;ej?W?}yH%EaWP*nGhB at 6@BV
z{+T@!W)0L#nO%4M*z9GaI}5tl185jG3d`}y{~5M4pOM!Ov<Ehyc%pJxR?i`+Jz76p
zFw~LVuOhE@(6~_(>gumGJn0xXYuUhpPo6?|&b)Lny1zZI*WkRaU9|(=9nyV3&x%3T
zPS%LbOWiwnFRVtt6;@>`O2<?_xpv%x17rPt?_<eLrXO$nPKam2&j*RTZ48$C0M$pX
z;582OzuRl?o^AvtZdy=)(PZzDyY(1a2kNHHnEk}f+4X26Jbq&2Ky&x7ux~E7Ec{0|
zSM=<)Z5#UV?j?F3QtqyiJSEXGGDc7C4&zg-sbq!p@$DQH03Ae1HZRsHky?qBvAtu1
zL1p5nFNfiSy2R^U5BRw-!1IGAR at xjed&r*Axp7g=+V0BWZaJk+!B$>ZHVTUv-;^0`
ziAvz_*8sxHdkkpYQSu-N%P+{Y&j?ZXH+L0XAi9r*rG#%Rz&P*Ze<Vf4ggXj96_-up
z+GCr^V+gT`b^)EmXEC6k=)JR~w6tXBt|I)e1{fRnV at 3ExMa6T^p=PxE*s+R=6Z?ja
z++PPWr>Bn?;n=rq%<$pEU{hx1)t;G|J*Q5~><RZgD=Qm!W?@lL=Pp&1>#jdEW5z?*
z*Hu<^i7GBHm^^+!KqHLrku at O6(lcrHB;t-D)?@w`pMW_xQLE$c4>Iuxu=75-j*V?M
z)t+EnQqF)!Hw+v4)OvIsU3=>3AwxGk`dAVeYe`8iA2s&W<hq_cCr={&^IYqL!=^n_
zT-3R9wLgHJ4=kKE?7_q#Wl2fZWkXOvy?0L37KY`68T783F+uNTzTG66vrPO9$ur|N
zli&!8nRSjN<-mo~;OMt0eQ$S9sQ;dQ3z)xm+J(NT?dG5Q;&S}@ay>$7(g^iwJbm4T
zHGm;SYCODdn#k)|xCNwu-d<jpjGy-xo-?aNeX^d|^F`jpG7mE=8L8VFhl`)*iO<*h
zcm>rr1YTihHu+*3sJ`)ns6Tu{^^K10dlUZeZJ(qRc?*8dqU%21MdN5|s86VW>_ifc
zqkYxw_Q|ZY{~~Yy8O&LR_4Z$&wt$~ScwQy?jOdpt#8ZDm^_eW%kKo5D$haGbj7zMY
z)c3H4-9%|YlpiHvy=UL-Is2H}zy|TK7Y?3SV$1bA-qS&ic%CE5llt%8Sz0Tc;OXE&
z_LgTH$tHToLvUW`UgFoiCjB3RaCGDyvjqdis|QaUo-!1|{2@)^xb+;A-OqPn+HwfO
z2&52}cga5ZY-zaw&uq|ZdG_BUb#9_8uE+?}5|tFzaQArjReqar9~ti%o+VIeC``}~
zaPQ5_X3v;|$h8I-IdQbDAJ=>EehRA2A`dD%cI+o{8168=jcKY*9e~c2OeVnf9u*Me
zy^aAwtzS}ajY)Q>g-XAlF~@^>nS_K;29xTPVxm}2bzgZki8_;asP5~n?CY)S%ZNPS
zrmPh2yPQ;^5p2gk(jVh>(Uj`+2G*wP=*MXmQUdsK0{D`@3tJ!2h0_)gVCxMBmiewp
z%LYQ!NOA>uS;4pdEI{<_958$8>;c>r*TL#;o~zSt)!TQCD{sdQ=sZxdtQ6xFnMWW0
zTWd0b7;y%|eJxO#O)5XIiDGQ)aN7%Cq7!(CPKI>|GobglXuLn*L`$w|KQVUp-=`p4
z?z-l?PQt+=@Vl|Xywh)5_%wfwb%Y_3Xhy}5y44IYv1X~&oMyEHlLi=wkBQyNnyg%o
zYfsgk{Cr>;37p{VDPYD7R1O|N3tV4b%PRyi`6O{FeVZSRJ_R#oqVjux!Z)sc=sNr{
z)lXl><HX@{Oyr*1U<H;m;WD2lfzes4f(L}?ZI%c$z(U<ryUqamNyIyK!OXJ46*JyU
zN_1uEBI=1}s^GdB^cEaFqU_zaeBAKZUE-!1p|`A<`Q|25sH<0e^wRzV(cAVO?+1cI
zaI_Zv`CWeu%P;O-+(qtHhRQ<*tNs44_%1XkFob!JoqoRh;6adBT4cA^PTrWDf|BJ*
zKNr?-_8te-8uf<4k(HGnt-1tsO<NR!s_75x+8L`y3a#4f$hsVC1P_Cf(yhb++U*j3
z7v+9_IMfs86!9=3k)|FWBXVsdc;k>YUG6@?|A^OAL2k}8R=a^-00{SHW<JdvxO7H7
z-x;Z3-3*rtEkw)f!A~3bPD^Lzqie43U8`q6i1OGBFn7ZSD!)!dTJANB&xA at +UqC@%
z5h}f6Y&Hmvfr%h45eSAH(Xp$2)z{<{OFXUnx^&(T7e){L<kH?P-=Kf at 3Ys*1M%{xG
z<IL0k at p61rp=4|B?Kv&)hO*u}a(#&Jj-2vy0%Nsc<<J2PoChe2RV*&o=Yg5uh{N7k
z>nSp4?K$c=>H3I@)|#U}=)~{CLeFjNe{l9tnFOB@;2H`NRMF7q8NAEm>|sI+!CdMQ
z!kq!y_{0#?kS*<fJ=jR%34+JPS`W8 at n@{rD0- at hnok`7mZfJBS6^x$N8~3ynz0860
zpkL$W&65t{{$C><Yyw9C?XoodBzTR`pkUFzSj(7+PlY$kfUpJ6EPO8ZI*eR8jW<4l
zTjq%{IC|6*RDd$X at PqHa|44{OV54bF0q6 at jcAXGN;A#~D4)TyQ6Rr`X5Gemj!ZJev
zg(q6Lc at QGB#I$0>EXkX^QZUAE$b*J8Yp50HWz at QQHM`t(uUFQ}$9iR9jDH4>c0JQN
zmRfPrL9el`tz!k-j-Rc9`b$_SJwD~m=59#V)BGCb?$;*8)5RRbM8Y$rW;?l#)R<M_
zSoGtRhcfbZ6uyJ5P5^JZzRWn7f%dTBXk*RBA4j4ylJ#eN!I)>x at E_e93X0JII2Y*A
z4+IZ6ECXfpfqWDbgZXp<u_6GSN$SgwZpFh{Jmy)ujY!zMorX|q>}EZ%rCRww*TskW
zl#tYaXko*HRR`y#cHIXCf!OMi<%b@&CvJ1Cn-UXOyI2|PsF8s=MPblZ^L3~Y6B%*(
zkEl+KzyQ>sr|yMcP2IPz|14nERMfn15a`q|Mf7WfH-x(!k)~i!gw($xWod3k?^AEK
zd8ba{wVsInK;`Ir)CSDU7lURH$aw9FU(wnpp~8N$B+!lq-T6$6Dw<5<z4t)Pd+&)x
zMu`?(b)Ihp-=WY}R4G^)!7jo6HV)NDC-VQo@<kls{=S?(ynj4tnpl3BJYkEUJ$drk
zLnlu{<=ESe=tpw#1XP>b#)2vH<`fJ?@1XbZqMv_3=$D^S#NxT&IZz0Sz|n^rZr(k$
zcsaTTw8Zs7v|USTD9`TPQStyWET$ptWeX7qU3(FONADI#u<axXP&>G0PdjnKRmHeR
z*80m0&G%YXl;0NM2qtzL8W+%|T?`EHo?3!4#N*21J-DVcvkHDOH#IFSmAGHQ!N9um
zvAo=M!+Q5|ypL*5*fV-mPWk?OwD2g~r(3rPHC?-+2DFd8Gj80+PgPZQQ#<-Jpi(e%
zdgsnVk at MzF%tnCwW3gU3vAK#Ou+%T2(j%gf8t94L6PNbO4m$G|YW(<PP&1%x)B?3m
zM~a~b1?J}uZAJOu1m5r$rl!~c<T370eSrE$VC{=F8BBH)>097Wm=Kr^TJX#q at WLFh
zXWsOmFb!CUT7RAazi1sJq^v=a#H$0`Y;E00aq-_+kLZJGe;5-<a8YB!t7FrdSf4Xe
zAHbSu$3{@|Y}-?yX5UBX%dhh)sz|ZaE}ad5U!zOcA*{4<)dX6U-|9MiDnI{rWaOY|
zsA+9o<kgX1r#RBxw>N at 267Q!RQ2rq5$X?$EIB$AJkM7-uKQLebseO<)YE;AF$x~K5
zimrdyuOCV2IkT>=4!yr(Ijpf*^7~t?1M{YIUI7>Gsp+2hK+Ue#%gZB*I$67SM?Xe{
zC}z*`#d%<ONPf5;j&Pb9jwXrQ6mkI^XK7|QM_6`HW~5M2JjE}qmNz*Z^~U(;WLm_1
z_P%Mfn(yuShYVWnU{jNrt9Wu<tP{NGM4?vGPACTFNWD$}gR{%;T<vP+s_A(V{1sWd
zzfkKJs}@A`={UboF81%SUVd)TYrHXCS^h#Zaheodq-zF$>lfDrm-r-P67=Wsm<B=~
zHau4YiS;sEWG-uWvKK;wF9uy!?38T^HD;=_`CyW{=^tXf{6f9bm6REj79A`FiG;VH
z_e-8FbZji#uy^l<Ve1ESy`rPhTdt4MThY-VJ~`zG=y at b5h2rK+3WJPE!t1R!*ir~;
z0^j|gA>GCq)TRUwi<ctSs<WmNMkETj at ac?nemww7MuHh)2$rp8FNnev?R5jku>)9^
zeG^PAI4DTD#ovX3j6v`Rbd`o;ZJk$el>Z)`2H+u3(%&+WL}P7HD1CI5>U94jx~lrW
zq^q#>E+Y_DijR_73P-}<;1EPRiWF=|B~srG5>N@*Ng{4Q;b4dmb?=kZ4jTB;V>f3J
z{J8g$4<tihZ+_W8yjMozwW9GvM=9Gmtfbpb at g{NeO1EtXG7$UBo_+h#dkgWu1@*IM
ztZtG!Uk1~``^vt3YpXM}pbZ3W- at bJ#x`V!N++qw(0^0turbiyRHnnGFpWclBxFjMr
z*C7wrK`2-B*U4odGr}*fNyq4b?h5!Mbh|p>qU<uiJ@|rpQv^}#ofvP0R!J?1k$oab
zS*A1-jSiymOrjGzBh=Wim$Czd1P at q}0ZCvudLCUzf1=mGbeaGHCeUOKK%10|-o_Hf
z9dsV_UQe<-U|8q6Z%VZo)&PdM-tZpH3+Q!9!60e%vL%lzlc5g~V()eIqM6-{N&<p1
zt84rARe}obo at dD5+lxA}Kp#7F^^Do|3&>J}r2R(y)i*4b2NSAK4(kgeeh&`nli71B
z=sLU_-PyWzdvQH at xpPDxQ!D{A)VReEz8D at n+QZ&5ZS)>2Yfg3FWPhQ4{e7q&BEF_R
zVN~X(dzz;AcX~?m`Xj~qtp0>;z<YBaK|i5;<rU?lax065)b-8o*Sn#9{;ZUY9`>rt
z16iX-m6d!~SJ%T1%cIs!fA(-lNQ5&^ueEmSnPrXtGAg!fmpF4w_>ZB%!FjnG$2j^h
z9+)In3{#)~ElllK)Xt~<cL+y~E-U$VR&MwyVM$*YnhntT*#8c0!oV5cWj)3!D86F2
z`QaGuFd|3C-v?CDa&GX300;sSog=Gl58I>TMvg2wf*w6cXxL7=h?B`&-f9O87(e3p
zfr{!|G@^8iu!u$qyJ-LVO0XH<SK5v97j&u2(^1G3=wU78RcY;fB#i$45hk0LB1HnT
zKpDJ*!RI33^^X8EprqDAmJaxQB#t(FJtRO+S1xsr_-f~liw_ZiuDYb?m$i?J4ib&c
zJ|B({JVzRL5bp;Q)*U;*!TO+Av3vZ00k!R5XcNIb;~C$nYBw+|@xsV>;)c0$u8R7P
zisF+HU7|PWJmv?19FU5^TzT!Z>9f&qTet4m0rZp3m5w?#>X}hxhqiZ(kB<bX4Myap
zgc&z(z%sOE!_%EQwIwH&l^%QUn1m17C&XIVPyzQVo^vpb%+i>ETBnRrrD}jlLqb^b
zXmI^4Fb_?7#o6`>ngr&3ooY*kkAf>M4!zfeUI2MbAPG9}{#25am*2lc=+k}K*C&U2
zvjY=WFfsk&#Xh-6vA0`7-)I)@wJXS*e-3i!3h3l=o|~Unl9`vEF_QRmqI_P)RT6nz
zgJmg|)>9o_jD+&|x9$S9zQ{SEeTmj*&;k!kLlb;4a?tu$8!Q!*LIKeqK}&tfY3|1M
zrtefAK6(>Tp-uiVdLEIfV3a2j6;0#lpMy%2m>wO|jSMR0%EDtN`=au7sz~BND`dgy
z1^*EY9n^{g at ekf7AC?Cg_6!~CCd#?0eXouTKDq&f-VZ2xAAryGb5y5Qcsw0_S!BRs
zvYMdgEvn`aHFh02-9)z$V%J>oGrZq|t&YYw>S!e60Z?n{R;4E)id?m8@`~>E0C-!7
zJQUZReU94HiIkj1N~Plos at Uh8_dfZA<=?!0`!;;+_H9?a*!CiZ&q$%eE7l9x2)z?_
zA5#iqrUI)#jb35co|!QLHHInlJ2EpLlxSU?OdFFSdo(`}x>mruQhjtLelZYGTs?>}
z^h+AQ7fO2;=1d|;FyEEp#V0Jl0*`{43l~u1J2Ysdd}4Nb_p*lptbJ39yElI1+6PN%
zs7M9`>7T at A4=SYdJB)JJsZ{O~*ToZ|au}~m{DeK|+jl18_wO>x6T9E8pZhjl6O<<@
zlhBA(%|AG*`!OycB&}pGp~_vw3ySaK*!wbg$n_3t#CtaQpB=h?2Mx|0qVF`8Jr3cs
z*3}b-_&*IpY$9QZuU_aFg*c&yUligCwdwXdH}Ua!!54%GEv^?x5Mtq0XuY>X3_>Jl
zzVLqshwA?jj=%nZLn$B_w^5GtgecR{bE?;A+NY`$<S>)xzkZixdhR6w80g7cCqjfa
z2 at ny*Pk at NsLqQS~*v*8i1fX1>!8`#ddO0S*<Q^gB+3R#adgV_;fPd~hf088<j`0Ql
z$@4JH+TzQbhu-p#jjQbRW*@D at JbWS^+bq~d?sq}xkLhePtJTF>x=t8KuLDPxjhgmq
z&3F&;*TD}`qGNTMl0nUMe&f3)&Yts?Ya%@li_TH|J3gN;Vj2-Z&Vv|=YMKZRgH#fK
ziY}t{n6k`*tM2W9t6Z~$J1BY=OKlYfn!zQ8YQbW#q!3?f!;ouCX7Mz^SAl8Q?%jUj
zlCyg!1%a2$L5aO*pht!%;z>+p95=72$#tbkjF)sXMSZ7C>05*{2d5Mj33 at 1!G;w1v
zteAUyD%fWN*6TH{BSCu}Yn~y6T|DjCL&e3<P8+}uMO9!anh%aScLu7|0a#mT0^`9T
znOe;*KXC9+Q8Byxv-dwk?$0opi321wFjk;nwU~DWbDJ1FwaX~2v7SR=O|#LXqQ_I#
z8$3Sxo{S3?yV?}PKK1G6Dy6{`ECW|%A>m<iEy(W%ic6jvHz+SGJTG^`Q^myqCa(q?
z!77*z#sJi`BPVBQ#^{NYtGkT^1@&Osgj+u^T-4vuv~fWHMUVXQ(QH6+kjz8H{6`Wk
z)(a}dxcFOa8{R`5-b4N0NC$@I5V4~@HYlHP8IK7KB<q6$OUs^t+`Szh^O>hFiSGZW
zuhKp2i+|nr?+c%!0T`~Rc718I9_;M}{@y9TsyC(E14{n}C$VJK&;4T8WN`#xjACj_
z)cI_Q?M{nmL|id6pPY|&_QTTRea;b*Ko7u_7SX<<{QJ`S;vPG8iUIaO3u at bUUG@x8
z3ea+cy(=Q}WUiMGb47VF>x&Q6X$WWj00;s`ZJY&Q1`YNSiq$=NDJuKh=WQB+OHt*7
zSS3M^w}B<Db`LNTkUntU!yjLoOnBcHs7$a`c+PtuJwrYlFkQ5izgdCJFnYALQzz at _
zVR-p|Y at 0eYBV%TtloZ=u^z;+)3Ec+4`k0u3c`;Gw=WA#JSDim-$F#g$Q%F+c7}N^%
zxslO-AJeSzFjy<)Ga714_4ossF&Hp<*f2Wkf%rk)65^i#llIzDQu at ry$e22{4XH4a
z{D6Lripd)o6LT#(G8gDk>zKr(5L0g6v>k);@j&!mF^Bm6(cD;nyH_Mis at _XPd$Iq6
zdqwmox@*snL|eoS7cUm$|3lO*H`YRzUiZep`^4U2K64i1+juOC=smeabp9G2O(8O#
zgolb+pEq^Ly%FyS9 at LFAXNdcI+z-h~LM%Q)PC&n?Qymq#B))zFFVQR{LgeYCOJdwC
z(J8+ZvXGDzXRZra{QTe{k8(-RGFO1tQ&0GWz=gcl5Fu3m5Kw<ygQ4vG+&hyelQ3Xz
zUTMimr<)vu+3&Er{t at Bc_+oNXNA4hEt>&~ijXK`0Y7cO%5HqQvXV5^<1cXLKNYK|<
zI<&p-g?^vCPBCioJ2MWha at 0alnNVX1Mg1W#f^aM=0xn8SuX69J55d-P^`IUM>M89W
zDaIJLvdsd`6k?2pV<1e8TwQ_HXf2pQqIH4oGFIx2VTA4t81VVf at CZPnbWyyUL9PDr
z%37*F2?4r3s$o{WgE4jnT06Mr8T1`qn`2xx=uP}#oRpx=zQGO#qR-Gx$#axmCQytJ
zsV)@*Xu3yCfiQy5_$c0__i1U8=iVa9*r+K_CHA(|eEcyH&HyHNXf>Jxpj4$d6R9K?
z&cT~X(kz)Y#xApO!dCFz^wBHF*r+W*r^pI7Yc$2(J#y+Mei?>^#G{E}hn`c5p)iZ5
zHHM+r*I2KB=Lg57^y_!MUq4&?AQ<*b+3 at Ux&$_-u`y2x+euZ)DfWgCOPI|nwq(n%T
z0wP||Tt*Y6fS&)}HGN^<*9AR?XYiQOzL-ZLV~a}EdVE=3xNgG+da|>CTEEmSA9AeN
zG1Y_MQ?AMFlC%&ykNfA1cpM4CbOyxT#Kap>Bl;fwfHs2{!Ae%*yi2GESqGX=k?PvG
zZ4gO2Vxr2nG!iwRI*mTUKh3}jR-8TsR<NAY37syEt9Bw53ZFMp-8YQTYhf%;LNXH1
ziG{{S^dUy0M({~)RVBGF>fFT;2>*1+xC<{267GnEewN~Xaxok-a{j`FG%QO&-M?;w
z*(d{D<f_qLQ0AJ0I)N*U$DeUKZm$=77ED4aED<TKCedx-7#yYu2nk$FY1)IlYk|jg
zp|S0e7&VW{SKWKWcY)ZrXL3JN`&6VDc}%j(a0WGR)>)}*BS=Y0#naLoXve#xLGy``
zpF>v`zX at EQQYXjaCzn>4`3O2dLZ{atdmG&hSOZq$Aza(zk_sT8u+w;xcJa3VNl61e
zunP7z`#w?8gn;6g{@3xgkeMZp89+Q5cnb*zr+yihzsEEy at PDLf7&q-^OuI}eu&wK<
zryzJ{Y?^gqNOmDr2}O7olngx}=fDBUvf~h<2UrfwJh`B6fTSpcgPM?!^Scn$upMXt
z at tq{Wzzo$O31~=MDCV6uOfMs7HU>QBc9!XMkzr%0U0LyIaR$g3cf4TO(4m8e4}bor
z50-AJIfWYGmk$ljt<HW(uS)=3%qlhbaM>r{K2aHsluU>IF-nP!!v_EOE-4Xn*(s=z
zM4Eo^Q-?@X_ at yfb{3L{#ehAbmGy2#UXG-E)-MD{^r+;x9t at nv%1vU5WpS8g+k<zb!
z|2S6MKPsZ|o9WGzp9>YG8y%;j1N%BGQM&<qE)~`ZeJrjMJEq;F`c+Z=N9BHl`-R(w
z^`A&esqy;6c<*cZRMA>2sze~wV}qCANrT?iRUr6ORrQkPRn_Rj7heF-_2LUBo<}Z(
zUU(7Qv0Bp8td_x(EmoMmyt4At at +D*Nzoo91 at jn-GJ%8fF^MFsY;(uxBgK0>-5O=|y
z;Ht4c at bZ0Z+j`-kNJR-K(-$3Ypefco&f+#fje`eQ6c-kbeYDEnBO_(j{Q8F8{j&QG
zM)%N9kIbEH?@?Fx9oR|i+;4&EiUY?-j0fhpE?r}zzKpkK_3UK*=J2!A*F_ooIL2(u
z&D+xC`nYL}Xm`b at YBk=cZXNBe{^n at ge>K4>l#&UP-vyyq*9U*I#Xca|Vj<u+JpB%p
zUF-l>K&ijfAltl)8f33|*6MS*R_DoHqTN_vc!}EOjD*)|JeE0$S;*Spkx*>XSgS`C
zIV4!?_Vt)arH?S9Tog=rpBzGsc+R8`z_xMq5P~o&l6(jTXGpt82=dfmv1SMZe1$sr
zxtJl0N7c~mItGq`=kY*;*<t7b2w^4a20rxa5UdM-miKr&9Rd@<x6UJ&@4SYtd2H>)
z^e!OW&(`ko0=4<yNwV!O%c-s1>+<Pm`A3`D{5(Z>`8jtA7XQ0S-qh~u+)G<DREGFF
z?Mm^wpOG)(rS*3j_VfFMhLI?D)VOtPM at sgAK*$<NpnJ#hr~{Y~MDD at w`_QzlTk(1$
z0Ph<^kLgZ5>AKMuL+?-91fSw-)c$BC(rkyDUzOnOuQGLX9_Ce`!^JPCWiJu`e`j(y
zI_`fJ4UR!uhpS&$iUyO=0LJe&`i$!Y^v22N1r$-3`uzh$|JC5x9 at _hW`d^Hp{#Vzd
z?g#yUwv+nJi{bDZuakXF=ab50GQIy{P86e4H0lJPC(Z|dTXKqinEKvt<==4~+h8zH
za$MlJUt`#}Sri<Jp7);uS8t8y_?SdjI!wO*X3Vl5L~ZDFj~>9@!w-Dt&5T at 50zPuR
z0P_St`<v2QtS59MHS#)Wr3Ss{?$oO`*!(P=Ag!a0Y8TA2(nvow)mT<V^wepy>*k3m
zhKS}7(dA*RpgO<y_l4!r8LZm0S6Vv_DxkTdVmp<39P?4@;?7aUQO?~N?L1 at 6F*I2b
zofFED^uYTQM=Z(2TI#RJX?+=+e3SBo*+Lr_?$zWbdy+SycPZTPBszitBw3t>dbBvI
z^>$CF_d<7XEUXp)Ve#6|l!oB7O=lb=vP`thc8F6q5GH4r>UC;j01(|&{1+S_jug?m
zMZ8eJq=V#bGDZo`DMg|Oi)q4s5Ua&n7KfTA1h8+zirkbqam~5q$-P-fJziYDq0 at L8
z`v#DSyc`{|MWKxLIJS(-eg1dA$rb1{%*X(hx$%zf8Ml0MtI}~9gTSA3ehZI2N9das
z<w!5%weHFIa*x{l?ZW?D;zjW7_D at Ti$bxaAZTfyyU(ov``MED!sTeqN{|Yc{wQ~ns
zE#@#4e5QV*GFj?>#B)#9PJMgNZVWfSA7k~jP93rOVZwH!aws}~|KJoaI#;KNm>iwd
z0h1+K*Sdn_;wY4cp0OFdC_KE2cqhjb+7c+<AbH3&CKKe+=PgQ-?I!dxsDa(+4G*Ea
zY_;nY>`y+ARb_4sAA at y6tmSEJ;edRz<{)5Z{a<wdV$R%G=FYu->fYQrcTfAjfHP46
zIEo6vA=esk1P$k7+P|h_JO^LHV at S!pp<T$9>HRsq7CyZetrUJg2U<~Y&>1Wh{xZ;=
zNA7j;{DNtoKNC%_Cm0LCf4b&{GPG%MjbKE?3x5AQUv}bE!M^F5`X4TTSqwvtWGscj
zNTPD%O*)@x<iCUDu{yK6s81HPyrG)^0eC-&(6Pn;4CcLybHr;G;>QA;*gg`L`f#hv
zy=V-oh`5w8h=+{r^DV~(hIEh2>)iR)t<;{GIrANTxiGZ2_pOmp(F%<|DY*!}%}zi^
z?O|cr{g`%r$KSW_RIfq6d;i^Tl$@L;EtC3&8dEcR=H72G_`rgG*-OI01`SR(k|Ck{
zGH3=P at py8Y*~{ifhSP{xH1*bi0ZSh0)Ylk#>lUwYZF(fT-%|W>wtTk$D_p`ywYR6^
z1rVuBiUBT(j*N;bO-j0Tt834Uf}jw27&l%n;geI!(HC&$gx(Pmfc4CK4em=p?PA_t
zCAZK5Z?;a2iXuHFe)CP&hYEt_Ax1V=&P#Adz~ovpp?42J6A|NnKr>r~`-yJXkH+Uc
z<he+Q#a&|H$`X at qfzZ(Gi7iV8<aX`RlLCqRra<DpHw`w1EzRz~V014JtdNPo^S*}1
z2%tAwW}2<dW1{W at Y|{27Y8w_PQhFN0!i<v*Ns$qTiti?xVq!WCjE~F7-H6WJVh?Xr
zsz<2Q^VP~uTaKlNhsiY7&b>!<=?rJ$`E-X(m~JSDO-b{Qgo0Oepap<Y;&teQKc^Bu
z2mGComA77PzJ)&M)+=k=vb>(*VG0TEp#<!Ajd-w2m!(Qo7ZueNUt<q|qx?r|NHh=O
zHCszx^YrzHY$;qt;u~ZG>FWmkI)lE>r+b08JFrUf8EFl48Z(;)<s(ivOFlb<&H~3F
zVc+ktpTQs at XRk(BMspg*YO-{9>=ukw>GdQHe?3=cwO~!Rab#gz;mG!%BZ`-Wa4Ve<
z@(hE7kEG*ITev#mBaQUq!kCG8|BedhSL1UxBa!dE1e;Qo`Eb at _J>uf~%(UVCORlZk
zyrOVi-?_KA9*zWSdb}ezICQT at Tc1C-VR)K~L|wG&mjt-@>k^`}N>vG%d}~hM at kPrU
z>r!pWDdSTga>Rjn`zo#n8V~fUwBZeN^XmfxHG4xt9r5Yb1P6f`1aYzOcgZWn4hiCQ
za-fR`LEs0>ZU!Jdf8qE2&CeYCy<<BapVkee!QYV{w|besaQyd!&ou8B*5DX7pB*Zx
zq3tLKV!@u at _BHQ0@EbQD_xlpaLHdsEGz9T9aFozaQiJ>Lk4^zP_Z8e7b}ns~?g-*|
zc%FG(%0WzTFJH`{uEr at DNz9<50fmE(h7^u2J<UknXYt3R_{-5lW$#gjQPgaen!$=+
z08RgbyMOe?4d!osv&?x8ye?&V;O#rB?Z5OLAf%W9E4-Oy?s)Ub;D(>G--1mNHOWOr
z_6=-0Em6BZf(ZntU*}8NOmct9%%J-)1;ern!$R7cfElg;;b`qS0<6$iCC2&n!utWh
z48U9vb`Gs2?}IsXEca-z2`u*;3oQ4Jg_g0I?!Gi)nfa at m&>xC~>)lV2_PnpZNkVr7
z9u&#$65sd1gWtz=sscCoH`e{>c?DQ~*O)+;cR=Gi at 1Pp^HJI;;KugIO75IhFj<ljp
z$lLTx-+>kw#8oS$a1q0x!5yA82+uGaVc<J>l|6u$oJ1O>*+|syRn&V$3v6m>0U_uY
z+$ILM`ATd<y^HYtV?Zlz^G8by`UQkwSY8Kf*-Vb7brN)DnkLGov*}>vscY9xU4xU!
z?`uMSOArO8!7o{}uor12tb_Lkt#DcknbT1|k}Z(rV7~UCBbW=4G9l6i8E9Zal$YBs
z6X*BKS(h&otO>+eqbM9b=%|vS4#}MW at b3`!S&BNiMQ|Z`PEjg^yicDyR0>7`6jFsO
znu!L{(rB5iLSqw(&)EpivK(C-G;ZX`aY1V(hnt!XOLB7Z^K;g1-i+a%&1b at ul4J~b
zmy_^kh69TkPALG at CV+$o<R~B<!-;^9n#y1{P at _AN<Ua&Hbd$TmMoPo+S{ayrrx_N6
zGCB~6 at h;R6s0fuTQTJq)1c%~IokHKvw)V#)l+Gy>e~CxXQyGu=-qMRrotF6VfCWR+
z?Ssir<KFuEz2t{S<U#t7A?d>Fy<|U%(KLFMp<$vO^1vWz2*apAAQ!08DlebAsLG&K
zZ7*NM>u$1<e9F{0TSpg*ly7)_O^PKm**c_?y|VMndFlNIhFOyp%BG;8^5V29WKWy<
zaJF2M!9+1{IkX0qlGVy(fMFweW2jah7{F^!fe0o7gyWME;ZVq5k5&OCBQq>A$`%Di
z(|uP7H4`y8a<-{6Xl+%M+CYEWFHJOE8oafh?Jf+!>ly$9*x=w`d2mRuB3K!$3RVYe
zg0;aqg<fG$ger`Ruz;vACJcnZFg7eWOdb{zt_W9#tHRacns9BnE?OULhz^Z5Mu&w(
zb<zdV!i8e?65=&SRy-O|93mcdWa%NabCN`3oMqL7inxKDd+Fm9ah=Hj`|*YGkc;k}
zDSPy(@TdfZ(vgAx7fSKsRZOEkqBKa##5=ScBV}ca_#__kRnlQnC<Uwxlg`T(7c1yF
zAVuS_P(cVVSn}zgyJ5F)(NBj3l7;CAz)Rl(Z*VDu*Q(;}?L4tTPk;YvcIIiH^Rz$@
zzs9f_F)ZXflb}N at p~O-H96n;?o6kT0=ExCmo;bnXDJgmRbaC<Nmj%2Y2#&Kwd?-G<
z#1B at l)AJlwzXcjD!AOJE?2#`3bP*kfZz9*PPd at z%n!ApBbP4;-C!Z{a?21?J0NYD1
zp^=AI=Zq3%YAWNhRKmqF?JWuG+$_M?AFhV)Vi}hBl<B<6KMC9Q%ckk?qE2;AdhL%T
zjcxh;`}fL at j!Ej>>1eNBg+=>v2MsRhpO=^4Kh|V0<aFBHyI0dr$ABEpxj8&U9- at d0
z4U_QNZe6R#+fo7pw3{MB6iQWexI9G4sk(P7A73q#VVJa72k41qw;;kp$gBed)@VlP
zm-SEmid;bX>&_j&u-8Bep5`TV=KT4Na?Ss>{K5RjFziHrHRdEbM*uj7mr{k<yYd_%
zTZx!#(JY)Qco^ltdhWebckBE<BW0|P&^}xrkjN#1Xf7H^z&T9f8BQgEGSUSJ2)lf>
ztwQX at M*9ITono6#fmGa8yS|K$p!<Kk<ELRQ{wAMhI>IuYn+{^Q7@*{oK*F5^{}Wh1
zDh8)LEW%na=Qu_MInP?OolA-*=D0L?_>}9hQ`~!Z>rP>w+2U$r3)~+oS-6~me@&-+
z^mXnEmMxxA$6|iJNX=3SV-d#xKk%86iRYJMEUC-%#|Iw(#|IyHk0t*6O&7~Xx_c=}
z)j{UZSUS&UOoPkah19O?M_L3li1uU-5FB=?0`Da-skVx^xOhxrG-^ehR!d*Un$Xrr
z$Qn};C6hC=f`US0gC$a9Sa->k%*=p541=?ryMvyP)L at yV-#x_8J0{ly+#Po#eO7<(
zPvMz!8GbgKJcEyV+Buu}aCf0313%m5ZTA{q>dwIO7M6j$?HGOt!$^XZQrQG2BR+eH
zk93cc<lxUXIs?UV=kb|njU*XA+v4QJc5m^S?mpxhGf{ZP09O!(MS^8y>S5%~<8Su_
zo%m(_C*BOGY_~yakI^baL03!PxYCk>3CT;==?%#-Q2{dUPI6>?Sb|Zh3Da9t3bnaT
zudXcX9%qdU)rSPj1sHB{H{9XUaI#O{IlYcy_>`{4b}y{HHCidO!?14W+EBS<pGRIq
z<)<b4P=9cWwEv20a~mc5lva3#)I!CdJL9Hi1O_@|a9^n&9Kw=2Yu1<ndZ=~xpHF^r
z82#iyBQVFamQn at DuY+N^?!TtqbymPeCNOB+Spw5#w$%L)x0u{+IwTNqEWqLmDcpoP
zJ8RO|zC)+3pJhuy7u at zst`+?vd6oDgU<pRar={4<t}lrgGY8C-y!r?F6Rdr>Lpz;W
zZ_~x8($Ft+F^qR`tB2PDAp3*(LFIFIm=l70jRjhB4T#t$NZ$k(T^G<3?rZ at U|GX;T
zqU(aYkv_w?NS-mk`GfN}ROybUD?<fLmD#oP<jK>gT?bE}bbUnEeV6k$w_a?cBQ_12
z4pp7TZy!7f6HcBcZBQEDkExbUCDJuZXoa}~JqZ&|OP)JTIsvGWO=S|eFKNEwG|JYo
zY-P2Pupq+QQDb`%huz&?0HSb|IB%gkcQn;=#f)Aabr;oP1=(UvuOC at hII<osvsfov
zEscdE+eQkt|C~R#4!U*X97H+V`NK&vhtntN6mXlb at jMl%R$L1#l<Ul{Ep&>w)#;PI
zHn^W4&wA1FvZUQf(vi^JNwGgPmbPUD8Q=LeOh98#)Ae$0LpknB<|ksyu<Eov&*)tq
zqw-Hz1&i at jp|3r-eT~q*oh{J0$7kX581Kkl&qhPgN_Rhc{+Ykj!udzV?mq6p!ukIz
zTsV&|)*Vji<`M5X8;cBX#@$!IX@=zh>%(atBbw_J=zsm}E9hf9js#6ZZwu9pJ at m+h
zWnVWGs;>&q$k}x*L*=wjh8NE6EA;4+xxMCk+ns^m!|N_pVLb=q*c+$NsaMcrFTDin
zh51jwFl}@@NS- at SJ}4 at V*z|@Jd#auONw-gw%uRAk>eYMV^WB5sTFua5N`QaoYB_NB
zJ%=$T=ar<ME2WEMvX#;)YL!4|@R^uR&IF+|!a2du-oVfL2=w{SPldCO#~<Z(2=w63
zyW%q~e%4E%2i&N$l#U~lyO4es)A7F~0v$)o$o%lLwLUtIBC)>sIbOGHFCC}P+;=c-
z&+|OH2f#6gWk=w4WA1hm*3y{?PPiR#ju)>oSst8dZ6)vhH3Yvm%=g}3LoiVi- at DuD
z-sRrPy-N4M3JmvBrgKxLR914YK0y2ZtHyo8eMu7SdH=6ZX7GQ`$j85CQdp45`EPe`
zcQT&uJI<$_dOF|NT-Wg2M&f6m-*dX6&Jue2rHgY%(!HiTYEl8br#D@%fhWIx#q}EO
zg{FS{ZHGM-Ex3Y!X0{NQ0jc=MIRS5K--*3 at O={^LjJI=0fdY^}xjGIY!~M3E^!*2S
z1oO2s^qfkqcB`G_3o=Mus9|}7=bKMnyu4xYvWA9biyM|>9KDX|u2b?OwPaca$u<+D
z#fn!jR0t-n4Z?j3dd;hIgak(?gapW_))5 at Yf6|%d&6 at CthewVG4>y{+D-<C?;ZYBd
z7!e+(6ZV<wNqM+c;Nb!<NB?5}Nrsq&`PU9nhVbCeE-WvM66FQYxm}0hUo7$sr8!Mc
zECy)tFVm<0!oP;x^VpS0<hNK3SSS5JZN+qej?b!`446#&IDv}MlkR2`*MOyDEF0;x
znE*YxwDf7478Re|*jy{D?|IA%drAh99cG2_DAV~C^jiz8<0I$H0bMa3xS~-Cy5W97
z<hx>KdUS(WCg at MfhEW>`zWf`XqX746p&c*Ec+P(dLSCIH<6+p8NQ-`Qe at u7`Pw#PD
zO7LY1y4(f#7J^}F#_Lp$`62NwA~{_=s-#!)7m~YB?FFlp9+d_K^jtkAOcT>-6--Mn
ziI0zt&R+GPj8|&oHCp<}VvgbS%QppOrC^1HpV+srJWyS`hl8 at HC@h}w6CHhnNZC0&
z{z^RlMLG`x1Lh1G{3G>OYt#HSTLB8f|6G|ZEg!VB1odF0-69AilS<<At(iKjGTusF
zSaSI24Y1#a at 63=36X95F47G+RvM2}*dc3dA+y*@UVWnAt=?-&32^Az8IdB%DPVPhQ
zR$5EXZZepycpXew`IMqDv(fO`TaO&sIvX6B-E`y#>a=?GJMWMmvfgocy{}?ikWpSI
zO|u(xR at 8U#maA8{AnmE8O{Y#Z5u2H78g~OdAq{7g4C7yv(n5|8TF0di9-Pi`^?UZz
zbCL$Za?-X}kf&m(tYv{OFt<ovS`77D`1v0$m0RMD!B6gBS$-_jaSY5U_1?sFsTQ+q
zy3jivNzy>NZyan-A3|~r2l1Iqq#y^oo)XW_N)*oScUR$aSL=Ms^Gq^{-7h^NJd+jB
zF~j*tcuQg at K60$*R#<9I at 1Q@}ZQ^Acx2__jYg}<!9($IXG5xh^eZuF^Ck2 at Uq2~!-
zU=Cvg<B~eB$R8LYiKZ{QcB3zZbJfg$#g<Eh$vjnY296LxOAIB3@#%p76+9feR(}4X
zYv0B5^0lGh;WN at 8-Ztz|Zd`nPT<)_&JJCLBQ73j6-ftP at 0c4}ic4w`mhU{?DY}B%t
z>@n7lc5rpzj37S}qxX)!*QVkpzaV0J+<}V0877as7mwv-a0b7bhe80cU2a3gaDPV{
z0rwv-JtxqJ&9#g-mwp<F!-x8IuPwxn15>lP;AwY_|8vrgJa^xr&l}J+IFzeaOGso1
z9(Od>1=mq{?I(#*-6xp**1?*`QIi!%42RTY)uIDBND`|Mv+yjhnVQ<PGg(Xvl~$Hi
ziJFYZnn+<y!xXv%(_9N1kwhsZ`iwq*A4*^byArpfIo{ouaJvLjZ-I>g`2sCPbplSg
zKgZl}1br_Sl#A~z65qo at F}s<*7w3KNVe!4sh(9|WyUQTqorUx{##QN$^fQT2DSl?E
z_?g!*96!>}*hUHO)CxJX-Jim{nATg^ehTtj?VjkLj|<Nu&Xb#(<R-(f<NfQKsU>U^
zwL^*R@!Ct6XB+`MCt*qKk5qa2STq0?=L{LiCnOA9!(j;^vF&ShMv}uQiR6f-iN{h6
z%S8eRB#{yxZ$tc`k)=|l>|atPFaF5>RTk?=jF!d72ErVyEtSDywuGq#55gLD0#hw}
z7|vo>!sYB{xPd*-UEn|AuJ8s>;V_0t5+%iw8cChxG0AqxEBNaY{`x`^%v5wHbyiJ4
zV*TqT><r#^{SNccb&?*8E%cusiB=?e?uGhL_;oMudi+6OlLF4Z+K at psU)fMcurZ*U
z!mbNtyXg`lluqY4@{{aPgq{sQ6D&EbW)258i5WWDly?Y%I)a!;gGL!il63GG_5ekg
z!if6{<tjY&8%a at d)|0RU|E4*-gtCpTt<U+YO`-{4b1iTq;HlUMxZ7=j0|rm6Nm`D0
z5@>QAqJE9Sd`OKMJfE(<8VdAvcWNu~?5~7rCc6s(!%JAYyR5Lg&*Ss7Mgp0{EMap&
zBm}&K$HW!yX(Wpk-$>koWB=pkayfh{TgDahC6Ze9L9T|MAi<l<&Ei*b%lXaR2L5&U
zHuEw3lo2+Uq}u^Cpbk6+wu4vj*CqV*1;Cq2{XR{AYeutB9a=y(7<T4n-&;uvM~m~5
zX3+U1b=c2jx}W$gabqbyOYxp&o&<aV!^zlSr8Dc?<t)6DLCjh9jPxwGMs_v`V>C?-
z<WNnQ7s!+3n3F;VC|Cs}BQ!-wT1R6*Q{Wq}j0f4x&I$CV30-5$(KY7`bj_2am-p45
z at WRCI>u?5bbWePBvd21t89q=NB!fXxRs at n1w9d##cBq1QDPDd?5-1HkD_w)Zrr_dt
zg>SrB3MP`{cs?>HC at _%h7v7gPsgiu3P~r(qm$Sk&Q~^RHD-4I{?|lxgqBu_B8Uy}C
z3gdyk;8U;yq at rtRvOqsbE_hE4cu)Q?A&)RQFBqR{XpKr0W5wqsO2r(G3=3al4Uip<
zS6e&FyP4EXxISJL!FAIobRs3MTc$@8M8JxyEN500eqkyw!HTwX$xPzathN;8Z{&9p
zIHv53VHG2544(2?H1Q1ai?*lH+D{}chE!*Qd%By)jEPMI4T-U1#+Z`O!W-)^UR-|z
zG~9Ud;>9O#poJW#i5j`Faafc_6E*tr^(9dn=eC%KwgCeO-S$vSb2I)w`VM`+ZH8%=
zaE`2aUXac+lkO2#jU?rGo<=6yArIH;HAcCf36|*jFy&R})e{SYtAeKmvlVzw_=ToQ
zGfl%*5JC|c5_C2cXoC4Qm|lLJl5!QdNHVEn8L?;|abolq)G({y-WSkPuqa_<I#^^M
z(G at I0D^7uQuoFB0Hltm?6>MZPoNsI__zhH|31}NCM;9<`cxNO}W11C>@kb>Km4&jA
z5_vb)9;WFQnGi!#1LJRkA&H64^D;?zXqbR8$qspd!5F4I%rr^D&Pt8=%(tabjKa7i
zXG}^{qN$IG=L5qfprS?2$s-_B0SLw7Mc*_`$7o7eA$yc54$pzD0hnrGQe|_Ev_wAJ
zdh}@Pvym3pNMOUyHq$b>7f|zdjA%V{kw=_o0f(Gtokt>d=uKeW4$ARtoACN$$pM}s
z^^aJgh6Tqq(ERv9K5OzkQFzY%i`IS_=l+J&&Y=AL2~wMY&7}KCa{`eX3M5C6Qo^bV
z7_oj-F|7e&AvJ*sA7#$d=i4wJ{ZQzK*cEX<{pj=U?lwMv^4DRsy_$?d at +OjTxrdoh
z%wNYll#JZS0y&hja$|J1CNrLvc)xg+uIW)NCYi^=;*83ytg>WBNW at M<>`vt-!v%O;
zdPPRKDd8b)$K{L+3VRT=&@#<3%+kk_Xu+K1*m!bpjU{{5dl_X7!3r!S2O>V5h^|y9
zH|XtbYaB>_H9WHah??!g)qGObUw?i&V=YjB8y6L^wBNMx`9qV~-zK|W+5F6nLQP<=
zVVGHW2l#N!X=GW~`@1)RXOA4+1|hvK5^AAUNs<^Hrm>|Cg(d*XV-?w5905sky)qe3
z5hKmzV~SW%(WX4t5~ERSU`4V+XVGf3S2P+vIe2F`erLq)ZkzPiu?*KnXNf16C?vBQ
zmQtNUL^e<6JC)Ys>S#?%2Y7D1fz9iaE%+E=q_e8n9({(5o-%aa%td4C9Y=S&);#vm
z^&vxo-<erp?>GLb@^yD_+*rq6Ea_b|bN_ZUbo>5CJFhKD;J!BAJ<QJm#<jEi0T|Oz
z+EPBUM%JmY;leTW*DJ0Tde)=ye2chhM$Mdc1Og6IUAZ(cM5DZX`LgpIJvRzQ9s)w7
z at +&apIDeg!l9TgWmPm_}j$+<;G+ at y1QKgPhk!3=_34f$ADHAD^Nd?j at 6My)&GDoku
zV3e#9RKY5?imSp4UM0;1IkNstKAR8iGCN3RGT00l&vaoEpq2 at TVQjRPV}f8HtI$Sa
zKB}t6T(khw?-URRG*}FiVQkR|p>V(=W^Xd+Vfrqh2NO^_YDAyLMy1F1-`#&xHmgJh
zEOU>j0|($wrOL?L`7vbg%iK5lPLen#jOol2IyB+&+Gu51e0JbqB`4QMXDc(iP!z|4
z4_O(S!Yo|dX{Y2um#~Y>Ww<kRcbC|m@=aZc?5?Cq%zkUbsC}YOLVu772tTrzVuj#4
zQ5>T68Pb%d7=u9m#rt`zcP)Jwy?WsL?^Yi`FQBi`4RoT}=6DJ!LBLwqcWGU+mpn9M
z>Eq+Nb3f&btuULXuRuTJuQxyj(7d-ZC1%)m&_BoZq`pVV)~!d6Z+LoR5RJk2<qXSr
z#L6!QUsmpvT}TPP5}IPY*y*x)XV*<BHe;|=E9au+iJ2*MvX{@DJLgFyc=_1EP=fbV
zZfH^37#qRm`&>hIh%NHfsH8zg-~l0asHAMv=&S>o?ShNyh7?uijw-Jxr$I)rT#OzH
z4i5b>Jf>ZAkyan)j0g!KF-8oH6D;OPtV1Z1<B+QqT4^Aw)floBnMT4B at QKxeipy68
zjFwB!O0LUw>a&{N%vm{+ESy=mRT2?jW5OI^3&S`(FTsqTCaB{vDkT*r7*@+#792aW
zHzz4G(=`gtb8TinaV@~2C3kAu)+0AEEtYKXC- at R%0mjXsPf@@fssnrKvSUd*-C>k-
zOi1A8>i2XPl*hsK5GZGIRdTsP87j~hPx?&a&5+bmZCqp|>#Q;vL8{;^DyB7{7g;3P
zh+L`5>pp!EEdp?2YU^9 at z`aAz2(~;iHOy>%R!sI^aYxA4 at jb<HBEv*t{vH${%hnB6
zG1=jnQDk)djmb50MHR*E43+Ox?+)D*B?$a@{~ZB4RMo0JDus%xXiGZQhiFMc3<)V6
z at 3AIm{G@$wNt!;ow5&W`3WAddPpBP~67&-o28`$n^dkQH0vKWA#lj~5SYPrMV45qR
zd~(cA_!t_Dp1 at xvU_Y3Kzgmdyj(OFam`*8~*ynjAUMm$<PEN3&%Qh*Ft0;(gt<*_s
zvQ{)^Oedz_!14x^Bxm%9>3z9h-`a=}EPYR0<ls&jHPNFJN?F0 at m-v78qWO^~ITV3G
zGAY&o0s?qO4r#%Gl=p}a36Y?KWLT4su*U<b+K{3$2sE(N5iG-R2J$;4JEc;FkU6eR
zhPj_3AV at A{0_6b#GAXZYlVR#7Rmy{df&*E)sVYyzmr!66j0KOQ5#W1Nf?foN(Fm>@
zy#o58S*`@|HGvara@>d1FLIS5M9Kw+$O9Q^kRnK;P%1B<yWEn9{|_q!V1w~{tU|(H
zk?amqU}%ZB;{{hKk7R;FA{CgtGr^HTfk7BLETjrBJ{QbL`4a%LSj1+?hsqo(y+R*i
z3^oP@;ISkj0l`>JaPSfGU^x+#Fj`WQt2YQ?(RX at B462-d>BQ^(!3EU##ckBcI`<9f
zal7%vy(~DG at E$B at 97cuwE@}%A_JG7<Ybh at phR>)32C11K70eD&5q8w35*>PypJ%Q}
zRL7M>#B38MBVp8$Dl8x?d1qFcL!s1a8J$|E!iu_ at Q%UhU$B~d9tI5Mzv7QB=1*{Z?
zcE)UDNk*4PpPPqfqddI+)_;9rAHA`EkF5_4J$K~mI#2AkhrYxzH4dHH6cHiU>Wx}i
z5Eo_ChMF*MFcUgM2#pczmI9?w3VAN|>gcGbE78#*2H9EZ^^h>b*-%V(LcDaxD;{9_
z6BiTbh+7y(=nswO^%5W~ZpO!v*cps3F*- at SE>5avEpsbNJ){V%MRx$agZ5y0bRFPV
zN&o-@##eaB5_lFoP{4n^HGz<(H(!BY19Ze!e}&YYBz0Fvj(GQ{{O5S$p-ewVU;xy}
zS*_d<YE)jn+IIQGbT*Myuxv%!#fuojSZ(MP=D1$^dGIDZlStWKRu-N}byyN6rOGg&
zB8OSk at j#N8g<^i$x#S)h!m*5$qf4mq99NC0W?(}f&*_A-Ni>PKM(rbvmWg3f9Dz~U
zfsRn6T&*;TB-0TbzEiH-$z70dQe8KBBrhy+#a72siOZ8`m8c#hxggd-;$wX*7xY~*
z?~%Ed_}89ThW at xTt0f;b!or#J=FOZrcP at KwQA8B0*svPiLN0W&Vyvr$Jr9i8`?qi3
zFJvMHOew~XG at 37_2i`_?5W{C1GouL$&AN(JBV`no5F#$<6lX)O%dY6~?mGn`A*rP*
zW?>BFq=KQ@(4O;nvbb|;Yd3G+yKU9#Bf^%W<Esv0At>?i0oFM7$kt730%R|G_WF?~
zpu=BwUq06NC~XVF+$S(BAX_n*&DLdxWAL19cpDW8wNbKD&Fl=mVmz+i6i%sWoAM4p
z%40DRgv$FZ6>rvy>GZKI-WkBN^$Ql%*Uz618*gW$mq}hH^kVZ0&>N%4yn{P;9wa~E
zOAezpto8H&TA*!e5YAMB`%~@~%_Cqvsb>Q at IX<-*$($F-iUo1Z6>wZ9`&_<BCkRwn
zRn~|JHQFIl0{0Rs_CqALn)2R24~_3u3<df^^%^{$k?H9O<~b&S$qrD<Rmw23O~<AO
zVA+Nen3H;p&YbFa7+!}IVj>Bc9$pom7~UtGoXb=XAt7rZCZwRLpV&kC)Db{4E4K?m
zXcxL#`v|DXudXZa1{Xax;&g7+_R8hx96C at i<^uf7`B#26Sm6+Kj-?p4FLD#HY!J<q
zIkXBr6B-t2;<6*9VRD&XlO2?a6<e%$SLvte7wSdDyDD;8<ibdzcoUeFc*W$((9adj
zg>c>Hvg?unBBtY$K~(T#jEQVv3PFBS-Z_qJoJ~huG!0m;!O{di9Ttw?xVjmIpe7X3
zykeiBXccHoU(T~B+{8ssqtB4aLBwST_>t`2Ex3QdkK at 6k;4Acp<O4Kk%rDDV345A~
z&%qyfjl-EMj$joV!f*yCgGxgLamYQUz-XQ&FeeSG!fysZ{S|099wECDptv5vU=Gwq
ze*E~9S{})TN2--TuEsirB2uXYghwgcq%!img~6MmRJ5qna`J}_=M+%U5&{)+wc>fL
zMyFP*q&!)n=P}2XdtZbZL&Ldn at r8t!a-J8M(P`KSl}-^3ST<P2D}n%FbO9PBB80^Z
zlOuYD3235#a37RNJgQkQ_k#!D1M^Vv)|lM%>3dI{8Kl01mVy1-O!-OEFD*GY6y5*}
zoj;=4!_sd*{c<<7gjIl5BW$<Vyhhh<8ODRRX>E}aju0IuXJs0BfI37jS8D10FH}!c
zSE)UQ7j_z3#R`TOIjfc**D|WlrGWw0wV3!_rq(4)iBH7nlsZPoQk|2~Ji7maJw|0>
zKU)QAkOFVH0 at SPm;{h}NM<{o-xqcHi8wNwI>(?L0v(*&7Quo)ACYt}g*kQo9qn1hn
zup}#wP-h!3lmXcsB`KGkm#Ko}W!MfC1Lbl#lqiFC8sR3L<ajteSr|yd`zV!3q*Mm-
zoJy%NNmNRMo;5*xx=Lv^sR`?2AC5&Yp`3HTws`eS9 at OwNS1$&(b0`PB1bB1<09c5*
zT_;Rq&>L98e+$|1?+nnR4P9|Fu0sG2I~SHAKanIWt;|ICSi#<*@Y*|s=gbcJe3)Nd
zGGaFwDA-dLFh2W;Xn)z$u038K;W??6i=U6AcEf4z at 41h#%pD+P;s!B97$F`XJjc?!
z5G*9Qxixxk{%P<!Fhvd0XlBn$&w&M?>ob*T8`|>t)BxG?oxlt>*&<M1^aE!vTrnXz
zhi&XO<&lLFuKMBME}^17erN%UK;7Bz(c*W|dG4)>HG6+0x$7_t-$>#y3?!Rix*)1!
zekie0$pSAo6mnE(c(tB{P_w(G*76}cAsDfD;(O1dkHJqM_|ZiH0gG0m%jo-UYbBsS
zvMql`MlQQ~(TLXLTg<ti%Cje9*?ygj{p12_Knu=)^wAkm1kjgnf`*+0f4X4#?pyvk
z^<R~UiB<^-m#WeYoJJj=PU at mz-M97mUR}__E(tHy&B-_bp6*uy*3Qg2I<?E>Vy-do
z?KRK14#J{2FTGNj8U{>iT at qRXX7x}euYG at nUhTQRlD;GC1G%?SO4-ri8{tk#fPvP@
z<+yLaEWAgf at f*A+j~*kX)!?FuO%$ladV}P+h_+Z#t(OyQu`Eytd7;_QdKVYRMxdsT
z7VKX+9)#d?6f%D0{skYQrij?$Vs at NsZ}+|@p04Y9_ZRRanhKtbp1TXk0XVY22)3g!
z#sx=^8~wU#u0($K4_F4e);)cqFXao}F+ROQb)G2d9f(;@JV}<ysZ#A`tTjk<-eZy~
zd8I0g9EMnWOtNaYPo3YycuoqDsu~|BrvO9?XXWum!XsC1 at jonE$R15Y<$MD-j${il
zVJQ={H4SC7BmoZIt2kDQ|HP9m^OUi}NW^LE_z%}90yW<|b0cbW#sr-$^TmW-fL(*W
zn)sA1BosZpbg=(p5H<0sFip&#P5*kbY$7b5ob}`*n+j%Fj|PXL`2{hn+v4OI=&IjS
zu(ZIs>?&T98dNOaSw#|$Io}<VM&;ckDw^O8^4v1%(d=(lU%dDZm_V+ZF0N{S!*nki
zRf1jJR=-QGm)?C>xNdrPHIbVzP6)XzqnHlW)x^=nocbhH%B!<`_vu4YSK at y~X!fr0
zG`A(qbvd4$S5%D76c-g0gY4oWX9F4q_L!?_W=opoQq(c<-1y1-N0df*(z1Bm)YHV^
zIWbpCyh+6#{&{45{q)Bd6jh8a+?!)C8e=oj%cnm3tQi~x*SKR9OTW9l=wXf<HFn?n
z(S<i6qXtJ<T1bKQoS$0&x+co3g&4m~|6x2KZ$f9FVgrx%9654S7ysdYTy^l^8ZZRR
zW~;MGx9;dS2(%mR5t7_|k=uLs`Zm2|AjN7)eV}6Y5h3 at k-Q$L@^Cs;fUNxQq?jEQ8
zmpWO?Qe&f)dHo0UeWkJrfEe^;7t1Ki*rd!Q{j*P1J<$KLtezoq#gDqcz?zzO;m$kz
zR`$+_i1=5yCa`AGn|QwS8IDiD>r3j)v4EA38wtFgb`79)7FBpB;rwb=@o{HM%%kXq
zNy{>dT?zYRqGOkV+)4AewP-8Ia?M<jXhqJPlIMUN{R)pRwR8qd4)v`d6|=b~B^u)K
zgB5x#C74+5Npuapcfqv{B!jM3*e2(AIG1g7t)%TA!nk~f|Cv-S0W{=VmCkd3A*QBu
zmD=jbMcoJB0|%?n&)2|vU@`a<sDT2#k6!-`jO1z^=!qAOk3%<1+`Fzn!KH~&K>LX-
z0DXc!b6rOL(VjNg1vEcWkn(}+JWTud+SN;SLL6;3w2rIb=8&9V at mL+UVx6622_RKu
zHEPyO$X at tTHv_tMMH}#+uamY;nG5>g`E2>--glI$mKM-dg5+ at hh>@Af-vf{BLaq4J
zL_fA-t$@daWTkkWvoK-xBtj*4o2tS3tAwRwOYl-RiP?QHAAm%tR+CIgv>dS&(;G=}
z!_qlPiE|%*4mlrxYEJHS;OILc)t)h-HZ>j0oBY7!RJ*OVFX&UBJ*QXB^;78cr#H{q
z{N#nm%Aym`R#rau0(j~o2-?0d2fecWB>HyJln1Bm{rTsEA557ER42ECzB$V`p|;o1
zk8gk1{MgtO#crJ~S2%}rP?01RpNn|BHWn+Tw;B@^h^>+U%VM^pl|mW_OaSFZd=VLe
z+2X`UK(C3bAL4*z>gtK0*CRdVzHoKVx)sxQjlIFge2EDTfZ1OF2Ri#TrMr!2Jja9d
zugQ}yK3$5wnZG_cA at DJ!rNl=M+Ayu7`Le_V8si_JFA at VbapQ;)BZh;d5hFkYTA07+
z!T-nFcYsB8H4WdnWp^nHyOgDur6YoL5CIVp8&VXppok57?^v+L-W3%wf||srF|kAw
zTTl~Yj4>wB#6(TAq`by7V^r9~f6BeP3zB at _`#rxtC|vfQGiPSb%$zw>wj$H^>gpQl
zH}qr0ygz<jP=WvDA3RyWFPq*q^~RT2EBC#2lg=>!&*4DpL$Nt@)<po!byKWbLn at 7W
zmMmGaRGf_(ltMo>e9Y6w=1z|<(Ys#M9n<nU&2=Z8M_jCEYu%BWRiz+!423T5ewNw&
z^bPdrO2N4Kvp(6lC?dXm{DpTXj6)T$pwHB4;_M^mkm>4<!}B+GO0d7{6wz(Oz`kR5
zFP%4O+?dlSUAk_nTFP?md9D?<-xiBin8&+e2$*w{x!IM%0!fK(<|@5%?_oJ;GYS8~
zTp0(y8A|mXOA->whEH{lar1H0+Bq4Vd_8?yg~mjMoGh-LGBC1#M%R>>pupgyE<@*z
zds>whem$%Isx3><u2*OD&&VA-eAnd7qYFkJD9RQBhC8YadRHfdtG6RQjcRqiZZBme
zhuPZ%`Q)W^>CmBLd{#*GnjWRYDyP&PJ6yFaDzL-HIZ=WAy7n!>xb1`KwnBPLWVd99
z^AFaGMt^JoTXLPrHL~2wi|2dHS%44T9_TK*f_9>{d>XhF_sW?&v%kR&ElC-$3%Wt<
z;iKE{+6_OA-aiBTU<u at mT{*KTe~w?)JLAu-TmSoKCrL0T$yY5BZ)1L8^O9ruzs+ki
z{DsGNey4pSufju+ayxezJ*B;~3px^$w*uTj+_G)%ldSSJ|5*#;p%9!3dKaW5X1hkM
z?X`aF*mpLqMn4fcj>U7`!TW%xeeR5*Qfv|kO{+(_d6_*ta)}p#G-kwX#m|R=S4}HZ
zj1c#SG1tWl6FW2_WkbI}&+oqT3MgICu2o2wU$B=;uJLz>Gp3|H+YW(GpT at wuFeF;U
z+cVu(Qsw%Epf{m=m`|=svPI`aNsPw!cxnu~4S^V{VOZ`z!#JVv1;<&#mtc;pOH$x-
zwSv#pn83&XRc`t$CK4P!^y#2?^Y;w!4~l&y!^>mqRu8X?S7L+w13dlR^c{RY1joo2
z-}=!Xy!c{U=m%o3APT>0L^00bclNBGAx;!EzvD;27~8M3{on&)D`EbBOQpm1gmvcw
zxfUIbEJ!q(uVyf`&X#gYMAX2e_=RK3>nk>G+JsJ{oyXs76|(;X^!sq-g|HbLS1)~M
z@`#3ttd1SCD&}W(>Xa>9%}Q>w{?$k5n>{a8S3 at i$9j=+V$i>IuBR{RfprVH5g at u5{
zMDL<kUM=j+_UC>K-#`jq^nU}N3?8p<Gi~tr?<ZqHgmvt>J-b5!s$K!_?Q^H)&mKBy
z?D`P{?@Un|Z?*pi=$zdtbcGE|n?eU%TfDzgvFviBx;cRsS#f0%F;XgedID9PKu_T;
zED%dk at xpo!@rQ-*5==uYNsI#CBMX&x1Lb#FQ&n-{YZuV=3$MWx7>?guH}TnH$#x=4
zq;FFDyYY8wf0I~SJ~%`%yz%nMAqiXDNlxUD$P911|Md6(hd;zG8;!nSEkIht+wJ09
zN3<=@Sqx*`9b7k!2H&QS(PsP at O3@s5`!_--<!_z0A$2SSwbcgxvdTXn7F#_<x7btp
zUOb!nUp;BZQhyJi<Z+YZQkePX;%0Q^m=2+o;#Z)6%}eI)dGY<#O3SmE{7f{7P=xgr
z&W1O6BY3Qx=NoD-`&Vg4t=*^f|B+&7J2cit*gDn{+mPAxoJadat6cEUJ(|R`k-IIq
zZY&k@=9?*yZ>AV`LA|l<;5UvJxA(BqW(+>`cHdS(Fvt>+_7OfY at U!0Nv2bDk-4Hmu
zXyL;2xqP7#jdn#oE)bfnz;KOVGBKEGWw}d`kGXeLu&d-t3y&p<BT5#{Mps|myZ2Ry
zUO1=3Ib+V)H95I<{CLv_yXsZbrsPTvP9EE<_^7Jw9?rbU*2&mDV-nng$@7c`E#;Ay
z at O+Edd`U_duiykpnaiqxBUWB7i at 8&#t**8+ZQ#e-<#k^>W^Q}ulG%$OdM}0meKKdE
z1E{qI<Gjguib)ymjZU^E-Wktt`V`O4HH+b at F~^gXP`uYEecGh~GzKh0iSZ(FYP6<_
zkydTh1L?YW3Vy~yz6gFoo6z1zXfN6*T_=}(&mzPuQ~<Bnv%G(<5|1Ct>g)n>)RP*w
z_&+tjaxJQY1G{#?0aUe$Z+)viS7nQyfTq5NN1rm8k|p00&>nr(%m at i_`saC8&k7C-
zQ_MWsuxVs7o`o4`IjRz7Sg~XM?z8;n7Wfw3J3DbAT|*YeNebpgFG3?idM6q`B=;{<
z+OUOWjk!AI%7X`TKWUiu75;-(&b{9g61rxA=7%3alhqXxl9I1}f~wH=tDhuW;X6cF
z$YP86I7$b3PF;xb0`XUIvxah(xL4})P)kYF=ka2*=c0H}c~0UcQJIRw5t2HpI@*Mo
zS?fw6F*z_$sS>XmvULk><eHv_(M{?vVft2}GvZ;S=WXlChOb9Itylqp9Xl>uB-dOr
zEfo)w06g^bjA{3*U>S>Hk;J!Qx*Vem%33*hu0w{6n}LhetL!2?bPeyuHoSW|hRbj_
z)NyAVbj}VML8Et;go7IAgAUc2tseBw8ojG~k9i_Vv?@(dz!KBk6+%xFLa~h?=r7&)
z;^WW%Mk`Sc9EE9rfBx|oH!kV<TE6eh`>WB16QCB#@X@(;0{U?E{h1^H6~nv{!xl;T
zKC#7k)DHOP;~2jx5<i9I73qn~ejiDBwS?m|pU`+h;>)0SD-ocl#m98Kqz`f;j;A<(
z(bYv%jhHoYLixNZ(>-+aoar`j!^F at k@Pat>5vWQA77s+L(KGSL0MkvRN`}BT5XN@^
zPt*I~{Pyr0Iv0jbQ%>h1-ZwfC78 at WpNTzdy)7xm(Q#{YSSreb0hXrsA7Ra-pdwA;B
z*a$yM<|+{<ncnByvhn#@rlsb1Tf#TwEJ2IV8C&8R at e9lnsNy+R5vnmSpo9r8J;x(T
zZ0}h0Sj_XgX)K&1wT0<QyeW;5tEJD?(nJ~~*A72_NS_~|&ut}dm`2Ye?~wRZl0#+1
z#(LpD=$7d(SimRa6VyA<fy7jcho40}A6L$BNqb(~avof0hO5)tnlrk$wX3<e?Hojd
z!A57W7s!=T>@^zc$--={+AAnsspUSqg5Rvfl$3<>?~!SNILhRXz^it{hFVZX#tbZu
zjwFP|ViKca+UVaNj-J*$uH7o8R^r?;?8G`)&GDiE1eK0l?vY#BXj(o}e at YBC4IpFH
z=hAh|M(?OzqVKtI(HZu<!A_ at j5e&9^7gyb_%hw)|A`%bq9<vkb>{dHEYdM!XeVYfd
zv6soE7%hXXlhT1Qsf<Sc5Y(X4rrRS^#7>`~+YR2tLKfB*o8}+w^dY|tJnM5!)zAUG
z!w+j7ua4K@%W*cZ(Vo#8GwigsDjPcol|e7L=t!9CwRiQTv`2<ESnFV`7I}@dnsc;k
zlZt;8>((}!TooDYeeAS8whlISwi+KBwU4dV!NJDC#zw76O%;D3aoZZ*FOu$;e%x_U
z4Yp2Ny at M{5{e=u?CrRrp*>jQ|NVdFWBS;#Ru4{_rZ=8)BUPhxeND5#m`0_(dU&AIo
z7IRK4Y%+b#4 at G@ZufwR~FzO{#@I|Jr{7Cw>uVDc{?L5kb!{<%JMqEl_&9Gbx<8m at 0
zIM)NtHkG!Av<FoFm41i34>-ROSgqO`ZgBQ+;dCB`5S>BrbMf=H at eS8C+<lkCWwGm(
z7;;m4mqePOzaHuywvAT$E-GzaSy4Sp)fatY5Z&x5;n9{I=m4tT`19DY*SGE7{mR+5
z>Rw;7V%eI<ojO8j33P at YD}><Cvzx#EAtVUG6O%>{EgSWucwkXUOaOSgg}+m`=oOjw
z=zg-{(lUI6L>rBbCQ%f`U{O$WXF;+NH9`!hiID_b8cs%ONJ4MhQj)24;xFW at UjV}_
z`A2$;Hk!UeJz*U0M<U-vu7Q)TH*lgQzT9fR+e*o7UlaL2_jSJvJB<XQ$_5OaKx20l
z*0BrL*hsu6aI0-q1O|m|)IKVW4+d2w2|gn4BWY}GMEv(TwsE#1K4~4_AC8({=O<%|
zx4(cYr0bN>yBn7Ab1tD=a#qH${)A!Da{k9{3 at TfL1P&yUg>0(hwsq2KsN*ywnv!hL
zL at Mo>>@PuOVknl2H_t(!H+1J?z!T%)aIxtYlKwRhAVRUnEHU|3G*WZk84hBddNr>S
z44i0C3mQt47#bTC4e}<&1gJ1wBnu*w*5^vso5%4txA~gK&f__${Ka$XxU?fWmA#$>
zCt(t(gH?5o+SL+`-J#dJ4nCZ{9l6%!9LVmqx3`njx?gmdEq=jh??(!R%LYgiMZT~*
ztldm>Aba#GqegA|0X9H)$b?N#dMA#9z)p^iVxFllzgLOZS1+UaA6k4KNXc+iM>>0m
z4hDm*BNypSqs6bW$b2H at 9BjpdIzNZi?smdKgNJ*Q2z?iWo8AGWc)YFB0gSF9F(4#t
zI0lh#g5lBjy?eKdYVxls73<9jFc|Gb>oEz}qZeTaOyHkZzTm+3c34_jxzxe5-{A#e
z at +M#O5dDb%{_1=9urKJr9shOmZ6O{X>nzppl(&O2oK*a3I}H}{oQ(<-(7;m`$2>(O
z{e#%ck5Z$<6+&XEEM0l_kZHAgbekzPB7&Kn{Sv0pNqSE8KMq=hgW90d>25usHBye-
z*YRf@)T^=jAkrQW7odbXP$iyXdVJ<1SkSEm#^Ui)e*OV2p<f=%;%5?_$#~8tn8F;K
z;cUyRR&$y<i8lzg20J_r1G<3~REZ at Q)nKKKr9<#1Eckm1MkM|p0*NAKuyYDNZ2c+R
zkr{4wj;hrHXOBl0z`@`skFS%*m(fD-g6D|STkCwIO)y5v-|xuN(5Z-aQqY8_qrM%r
zFSVOot!y-~wwlDF#5VgL6WduBkId%M0>v;B4&ZUAr6lj&HPUr#qrXXSCf7;@&1?!c
zE+WHVbI`^1pnkQE)3`V~i;;G=&IY~U&WsAV$W@!Wm{QhuMKCrdDD8=5VYVuSoDH=U
zng!Ibu$UF^V`Bo#toNslCOBP$_wy{QkK9OIP1+V(Pa7_ii$2ylJaiGYiA{s}TG?8L
zX>b(fpp}1r4ok6B41w5IhJ*=dkSPHTn!wIuryB2Q{>0;wxUIwtU)O_TwbARK?N*~p
zo#Pp&)q3AZwR at xk=jd#35@;;fwNxgN9?_5=YPKiJS9<j19?Bdk)>nUggZGIO>~fDC
z-A|nGeuwyrg=6v!pfJ1s^l9bje)@F1X)j*+%TQu{56IwMgy}Gj(%XO~hK-A4&~uSC
zS~o1e*v81P4Hh at Ls5a_WJKGSkd5y}k<E}oo1|J(+8!WsY=pK+#YwbXfHLeXU&>ckS
z5(s>^QM2mmW{pB^VQS9z;0&SsXjHKX9Tm9|{h^|7eHC9G at x|tE?>>v*6HFh<K9BdP
z&m+qm%ayL`gKec&7(NF(`>;&6oPbOxt>Duxf;88DfEgc~of&$ETASSw!L^=#wLVTR
zmpr#dU{j%OTavif at G#n0 at pcCjPq#$;;)&+A+WL6waIf)d$CNQ^r^A0 at +W=rdpTFkk
zpz{6MQ*Ach#!9dgI)%O_v0nU0B>-&PD;+z&JO4p+c&KRewM&3wbl&D-bP+vJLcc;F
zL<tBZ@>%XxLH#xUcrV)vT7$jTTc=jy`k1QBu+!CQ{MEHiNA$J+ZD=4m;d{0fU7eM0
zz)0)asaf=#kw2N9k&*uDn|b;9d2gaB9-e;Fv&YbJKR+~G;ZMZH#>RetLfW at aPk$!N
zU%kEO6mPHfqj&A(lvrT7rvkC3YvBmCr?vP%-Nc at DHR=xt1;|w_z1=XE at y--<PbJ{@
z9GE at rs8!jj9dugJ&Y_t-t*aG}*l1PG4z+e>d)hf2^a&PA8UkH)YUAsZONEOk8o7pv
zjhryCp%>%<7h-}@*BWX}_rMF?<GuJ&KeYZ+bG(Wz<&`dqJ*~b$<B9g0?P={l+tWw>
z&-OHA*m!E}?CrE#jW`f1c^9=U$qO3z|If~bdej=0!EAgApAF0K_w{HE+SMOb^+&t-
zZSX$n&qcr5nnu8-K4>*e>4Oq64u;|V6C}>Y{FRzvE9N`+<U4UT?nd3Mci)w{%RrjX
zt9II5GWyqYMz_oE*F1N+ZZ)z5j%#v^CbOlPIHbj+<kIDOwn>bE;J;_%m<R8bAN!)=
z$D4nn-_Y$ZkAAyk!y@$Ui~Na<)+0KB5WRNGg}AiuUOR|)LP=iiN`=?NUumzQ)C}if
zjbNiXf{`Ms1udu6s&q}P=DV`hoM9`(+t_F{@glaesioA<Vm^z%qAIint-_cZC6?CL
z at P(!WVyWo>Uuf<R^Q+1i+s|idHJd8#O5+VV{ym?@h)y)y&zR?1wx5su-|T0?CW512
zt8r9gHaX_XbG)ra7-(%)AHZO*#RLxEB~0LL!%>x3ik84^O4pA|(RzZjNf_2>3 at f%<
zGIVyesv}U#+1P5;c3Kta6a(9AS0^QseMMaGc)61fh4~5>QB^~yRlo&J>j%e=*VhQ8
z!Kmwe)S%=6+@`+At{E=DwrXC`;Pu+5?A2P)79&K95ps(T|Ly}C{7;QoK3-#MBgCsU
zYChfu;%%uOFdMPXvIA2H6vzsz8ya8-+J5>!XUOVISNUj6rP*iz>@h7d^TbU`3vBP%
z)bb*CM2&4etz;p|En3G8bHptyIjl??g1 at 1p_Bq-?QC9@}>TBRj6xvdpw=xeq7u2ec
z;B$eN6SZnxi{}FIrZOx+SwoFjs`!HGn7y9&(c?KZc#bMMhbNZr>RRrI1b7k^sZiO#
zq-iW(0lQk!h#Syov>lD2LRDCV$Mc~5cS(-G0BX}uLPhEdTBkpVYr}QV&_!lC1qFFx
z4IOGPWcsy>CXmO*Vj)H=u4cHmQq{V7UiA*<YPCUE9Rn`8f9>kM)oypR?(W^#yN_b=
zIV4thKlULu@@1Wuqz}Ou#oL^tq2j~=tqKevKg7klNmv5NdXeAJVb-h;W75*npltN|
zkHHo_{&@XpRE57skHHpy&pY7Xj=`T2W{@!PZqU$;-+_F)qT|R!0?E6gR`7XO=t_c7
zpljEY-H_Og#*^c9lUxW}y6$2*f9RgHS>Xu{Rv%I=@wln6#MSclR%d|A*q)9x(~Kw-
zadU$kV~Z0AD-Dr0XdnuNjJp`qr;_d^KYRwzIuN0woB at vUwf0)|5t3+e&2j{wrBDbr
zN27I>FGE>MP8}Zo(4m8n|Nh~A at M(RG%v<UU6kcZkAK^5$60a3(wRU8Rf3^R`2QU at N
zp4_Kt@@2pYnBf at IN-ots&3p<ow*OVO{1Hcc4OY{f77wn{V$sR#TD1SeEm)z7Rz3e|
zYk3a*h1INr8U;OAr-xxW9HKUg3+Xo_+Zqz99T{uTsRD)bdHH$y*u+5d`THN<`RniR
zzNL1>x5A>^sLv~C(;ivwsxY2)q1>P1Vj4|)os;`ch;P!~Pi~wsLod~8?T%oM<+M(c
zz1B`AoBT8*j95L?(x(OKiPtSwDMBxlg at xw7`DR{Nm?;~|KD<*tdv^I9)5lQK-p}`$
zzn{<n_32f3>{w5>@0a5}TE_Z!0ygsft!#Wfv;DyyzS6EmSJv)3Na_`!edv=n_AaQ|
zUa3Vv{Fd(9hCom{`oQ!#`XC*GhgQn>xd$5WsK?@QiLIZW;ozHTo8z9T7o2!3wXi+c
zka{cj0m*L5aCWT~^jh^L7q42azLw{XXt%nwx%=oEttx?a4V7te&zb$!Rw)*A8(b<Y
zNrW9KeonFuDmS}q#L}t%jJb1XOq(+YOTYGYYt|_C=h}63DBY5fK;UhUabHepYv6hi
zTVJc^GMn4_wJxe!-I0H_^)npt;n2Wo1hv4Ea=Pk)&CLHqdS(t3;HSLe1q+JvuviZ6
zJ at 1R(c_XTt_l!qfGQcst;cfUPX8-7&)mUI}Ln9P>PBjke>NE77rz5wCQ=6a1n4gd4
z-lKGNBC=BMt7dK<n+DArz>pGutVy<V<t{mm9sALd^rl^3sz^3kHaa19(Qx^W_L(h)
zZ0etPb}8z!4Yd}pe>8dWM`+WKHc>NX+>z~zFbeZ23fpw<1uXkP(F>eA*D1q>bAwEk
z-o72X$BCu)IPSHezwC6)MSWRyO{}$nFI;LJFWInroCiAe=%Mbfha{nAkY|M_t$Onh
zmpQ^=6r`=(UbA5D8|V|Xk7dZL-L`G57QTWjy(@>Jo9U1wr^ldML$-CNdTTU>ZwS>}
zMT(sy-z~G6=z;j>ZK at cZiaXT8-80Yi$7EkYd&rVlQAIY$RtLqj-h5<%0^#DeJAeIk
z2LZN2&{S-bh~3FKWfA6CDlrs`M7B{(NmQc9@<N?MdDhcP9=TcjHR#k*NnU=hoJHFZ
z5S7iuKbcdOO~fQ%=7B7tDF4v at q%O3!thtd;^Pcxs{KGrRykXt$-oiM-D8?10S0}W@
zG at OEGDWCGod6{3%Qyyn_>Nv$t<vM~beNOEGYQJ8V?bk|XzoL7x&BR%&5+SRRLnCFQ
zXp}|$VI at WH7HOPfEQuBPmw-f)FZO&4BOl#TAmZjtrbCaSn#U}{)N!LG?WVzpGeD~Z
zAO3I#l^s5G>a`Yv6)pJ$SZDAwkAV83RJ|~~PV^4X)%w<s5JWF1?kPcS<%U9EV<EW!
z0y3zVO4Lsyo+wcdK{Yk#R>NP+M`hM^%cU>n@#XUHR>(9TwW*%_3o9737y4r4mY`ki
zoXsEK`{t2Xge|~9COXr|nYuE at 1>y%%S4zLpxOzEcfrJ;5<Ok-^q2fN);3l_-Qe%5F
z(a?A1Wp*=;R^2 at AGm7|hCP&nK1=Hr<A5Ct~r)T-_+xc1BhAhtNiatzA{^WHqn3fW+
z*3VT}latVgU9%SFjAMNef%a5(#WIL=o5uKR(jwI2S&B3F3S*E6XJ8GQ;1W|<S(wv3
zqp(j=AN0xoCB9K)S4I0RRC<AJ%B?Jn<X`(UC%%t|M+~~@r*qss>paTFyR65l8FI6)
z=sqzR&pNz^zom70NQ98!mIV4xTKb0^frKY}_wGe|R-!9txxm9^fk(^Hm6hTdbfQn6
zhGo1>7t`y+GtU=vG5yW-ZXD)|X_WUJ$*pFnK*tjBSfOe+{*xI$qx1Y42<2C!_kNyX
zS6*HY!xB*$G2@{s5moaOKlvm{_CeZSp>Vk|xFnhIGHB!^ZdBdJ at HHGWJtf58cR+|4
zM6{Ix%^+=LWZ>J%kW#pr{L;LSVP$h*_^js;=p2Gk<&S|h-A6A_$@L7>3h?L&T?_$u
z21>`MO at s6DD(IRRK9o8=ZbU|g1M5>wsO(C at ca!i;nDpRmRF$EvW712|r at d3gpe>gt
z)uOJ_VbrZ=(q$9(1Ude+q=z30fzSQBEcpq>T$vol|825~n|uYf!t2ZzM{0`Fz8d7l
z+vp5d!|RQ7TH0-0n1;3;L0_UXdkQ9?<6<>BHX(mEI at 3L(!?)?Ja)d?blIaMzRQCww
zQ%&!N_NYb=YJ11HqIV(1wM}nE7aMoH9-c<(J6kF<S<hrypvoNs{~L0k1nQ2C%WG<~
z)<8jk*G=y$M560Lo13h7?BzgN-yElF^rvf-TADjhnOh~1mFA(zlyHxbsrh0t4#;{}
zD#Uw!y|v)I3C}hG6^RekW4P|*tO~JB8dI`wL#(1{Eag&IT#u#lggM|+3Gj6mNX2~t
z)}(h0>N&7WTCc+0RlC-A?!02&z%wP2za0zy8`pR0v~*jK+`W4~%8N;fZLN11I;yI4
z^uXc62bK-{ddik=1ABD;{TtF~<{L<KvrCBVn;W0-Br<AXQAw+C at bvdD9aOiduvb9X
zputN&oifSbsdtI(YH+i)3Hvn6#@5xlW5JFseR at lgpxLzxJ;7@&KvPNG9=6utW(#Nz
ze_TtrkSm*8w^Ai;P`NLTP(E>YMnrt5x3}BK;kg4}EGo+D)BB~qle-Nq%E<NX7nYh4
z727d=!Sp%PV%sJs4QjV9wYY!3K0i*Knw&It);!YzrK?W&?m8C_mo^2?P7c0 at ebpLA
zm-y_x<9oN)Yr?`~Q$vHl^$lp<Dk#w3>sNPs`!1cg49;lp;k$0)F0rT5jR&}OcyHdo
zyzIqn40@%cR?(|8b8~k$d<2}@CoK;aY^y*=(R}n#<#t$*pH>9(;Wx+RF5~$h8}8qk
zJzW384~}J{{}Mb+?qj<pI|}z$oefn_Hh!?x`1rr3<A?Q*O^4y-b4Zs7bYodL3{Oui
zfS#vxS-nd5ou>Y8%$XmCCc?Uqg;U?+Up5UM(7U^hB*(+a_p3UUIFVyDHSUOwSg+V{
zj`Ws at o~7_V8XyK~h%+`-V-xw;Kub?5f1*Fo+t3*%T_|;gT1R)(Lp$ceNO3m0Xu3h%
z<a`(;H*$+IGtqZLH*QqoYPMtDsUz`p;Os<*%#;%tZDA3t`fL1wvoqTHX1Gpng|}XU
zbiMvCo-TfwE2<N0C)Zz+ZM(@BMtKa{2+Ni785o^l1Q_<_*Blv=nBwWsKLFLC8Q4sE
z2A_UCN%y;2C~EkWu9L!{9!u-XxpPX at c>$WkB%D~b`(X8!gYTe~EkLIpi~a^1`ZcN<
zoEWzhPF0yMkgt=l<?X}^h~j)MKJzq4zv_5W21E8U{USx+pV>K`*mAKLM at ABL#gT1q
zj<O@&o5}Vu_nF2T-U*v at mP$34QRo}yZKV<ed-??g^oLO&UcUSh+SWhF-<WIk59&|D
zLO+C2{R09f=4S-;e`E0A!KH_a1O0sqef<NA50&Dd-{>DC{pR3kJbeZoMu$$F4sgJK
z0#2WTJjgwB+USVZdk4&z`Q?q7(~aae#_2O}d^vMQ0H at sVsMcaSg>tzZ2Ted^Kw5*T
zmRFXf$UtMD@`x>$2n=JK at +$v0VP+ahQj1k<bV1&k-a$HzI+0|orA=>Z?--1q1Uo)#
z3-N1r?_PsGY-dX!`Map3M09EGo;~XzAwl_=Fr%>O#oD6YHa1Rrdwac;jZN>O+82uo
z9oUc8S5*J>pnADI`N`2mQZKK5 at Kf~)`Iqt@()3kd)ddJYVLM(B?bXqcX3n9Vi=Y3@
zo~z;;f0pUnSKS%gIO!azgd7?ue+mD+<*r&dGd1<oRQfg3^M7x}t2_TT6aV?`S>%6f
z&GT$s(%%^Vkf!keOU|=YX$2?m{f`OI(%%fOdWZi_BD5v9h{RQT$mb<X6L#6~CD*IM
zL0E_8w?Q*5eD#&Z=zj130!?wS at 61&whO$p&I~zUu`XYM5S=YkwCUyPs*yf>|HsCez
zPaqs^LpQ2l+~2gLZr7Y=rU9^T!xm71YqfQw+_gPf?*lH0^Or!nO7)1j5_+ili&aMt
zP2x)i-I#e}^dF<XoOy$M*W at SR<vnw+&UtgyvAI|0?w)sbZj+xlsE-l9Y%EZ1q**5_
zmOIouQ^+W%GR0a_Cuu4FhJn0|y{o~?Gu_k6;A(GYM}P3+OImy^m3g at NxUipHe7t=9
zyy#D!2CIjDzU(1}YntSR&a1LX??<p`eNti`qqd>)#E3yX7ao73PaoA<yO`Ks8>QvN
z&bzeHIXOMnWd{f2_cw_T(F4^yR>7P$zc8W)rU6Hf at _VEK<6+(SW}itQ{oVo->NoLw
zjvkc;9377)j>miW at 5yL`pi__4MetRP9qgCaapXIGg54<gU4ygo9X~;OsytJ^6Y4aF
z*muv)(eLcYDB_JeLSM}jjp;l;Srf^TPH}o{$@_4DTsX`BNpQyIo6(h2a1Kohc9XzO
zErkYyI#ft<h9oy<wE+6S-~<WuaguAW>0R{up3^<iAK-}p6H at BRp=b%Z`^;EZj`l49
zZ)jULYr+eA#Zvm;vu?C`r8 at lpNy<}op#MENM;}T*(vQ^F(ElX=<|7G5tY;#2J1SC7
z$2P13*$Lrt)QJ2KH0dR09rFeUVLtLiji!EUT}yLvN?q6L4s6<Vz!C;mpNnpzA{$qd
z+_GTlQrY*4?Ve1P at AGrHLSWOm#G7a<dW~KX_J*l20%iPW`o2joJHEj5I=eD#n2Tpp
zUsPJ#;d!FvI29L~Vd1JMo^X)eLUFFnmWUKSO%7%yeu!18V8N;)IVwf$dy0j#iha+W
zJbA9+pc0ir=D;FKTp_(E&w*Lb)#B-9z0fUlxbhx{4{!T!;k0S<?;s#e&KKo{g at uLY
zFCt0rulCJ5b|kN_P)gfqXZriKZ)fy>ro`L4NOKfOcBSk$!TKXK2~-i(r9xJw!ooy&
zB9>3Qemy5?+Gy}z^$kK5d<FPy-3F!8M+>K%{D+N2gFJ`MLn%3?XVUeGc|V_;K6IW!
z6LL3(ZLV-yb0MDQE|CmN1D?lOrDhojdUM-ulKhG%yygKcZ7FR^tKb(lzmru+(h$gz
zs$2j5H1pC)J#jNE?lQEdu#jaX at D4R|O}}_Ro2VhCqbgg{q5Gvhre}LxHB0AOVuVRy
zGR`YQE2>D4upp`oKtlj;v5UCN(Mt5eDS^i_et>ixVom$&bCs9~sfxWXsAy1xq|$P_
z=iVn at 2l%PCNoWM5n0_MB5kUHs(->tf$HgiA?AcTc7m~1KID<0z at es&oVdnk at -8OAt
za=w)ui$S__V-92a8sxU{z`}(j`~nKm0gRcmx8dCFd$&=079Un7eTwHIr)8R<p#PUF
z20o4ED72KqK;U9g=@(kaU?73i%6(L}c!JivVe|QbmG_-87NN0`cLL#~v14UddrsLJ
zR7F<6Z=F8l&Qa!FKeluL>Lr%S<F-NXXu at e7UXF&Y1p-YaW0&O=)x<5+_Y*W<kIt<|
z6|2!XL^Sp;=n1~FVZm(hg`W5)8r4Rk^vRdt&A-iJ_wiR}I!_3?r#eOJB5}cV9_o?{
z6v#ZzbRK+Ukp8%Ys$5Z5RMi!sFR at ts5kl{!Kv}!H5QcudjWpmzoXX^j at 6Fp$*E0Sx
z{l(5qOVI=p at 2m^u%DJ`l{)^=j4MP)1e1<NBD-R`4srZ*;9w*_oJ1F)EySu{+mbya-
znm@#Jkoq?w;2l$pyuuvQQR%wr8{TM2GvAq}(RdtrUFI>w{9jO2M>J2VxMw=c7BCp?
zWCiz359OHRNz~se=OO8nu&!k2cMaqhb|MgTs)T$3gW!RD(eg at Olf|IOg2dg>&6L*g
z5T?9hjw_<@SdEtu=bA*u3&rDQ#S(C0$Dbqc at a3q__v0Zhia`|l{k%6!4^4+ZuE66&
zTi|l0A~#SDprFqAQ&`NdVt64i5j?Gu7WV3O4m~26X?RHRB-Wi{Fk#$Cvs5m0tWdVK
zl(F!BJIG`Fj6s{B8fr|p`COEXx}z$-MtXJ3m~*DDVY>;LcEM*TQv5+4FBU6r70dmS
zRS+8t>y+<=nx<fp{0>Gg1{8Te46kjBocl%YSe5tTE0im^Gg=Yc5ZaLoR!S?=VL~~D
zZ`4!e+{-4xo_eG72rJh4XaR|BW-+mrox$8-jAv9?^lq8iuGZJmx3RL^hLxxJLdDGW
z>?%c;vzjU<=b*{!N>nwOSqvuerIvZAAff!By1-;zlXqQ}$O|&7P#`R7m}{Bzwz6N!
zY*w<It^Zl(VO%`^N2y0czf=BM?y-<?S?;N^nx)xG|0wq;=59VG`Dh?Xo9AR7SsV2>
zmNkOvI6j{^aGA_gB)j~`$w3N9&?%lSNu_S)#SgMN$WV)z*6bGB`}q%Pm)Naim#{#z
zpI^QH!>^~$L%+v$%1-Xl%k0(<@<Da)DrcPmGX|Gmc`!W+pU_m!eS4PX7v*(2(%r=`
z00OseA2a!jr*%Q@?w*RT-x%h6id0u&2ckctecaKLAAeXJPtSf)(nM?rklw at 8D`mA7
z!ICZ7<ZR>?Z{^FAE9kOv48j&yL&xyo*r+&fw|CLK{ri=}Q|Fxa{kHb()hjf9?1bu9
zi%YM at M8w2oCby00usHMKT<^aG(JnErU2J at G#P~Mo(sojug&wV*1?wH~(Q0Q=nBn2H
z89n>HbZn`=gOjsM at Dq3U8D8Y9j%D`%Cc9w at mEHT84+hI_(&L24^tb5qOLG3;J0ut2
zxx2WTbpI_xI;j-t+1_I*UL;Nk-J@|rc9wld?z9Av?l}??v;mE#`wj1U*8f4N&#z<k
z`9X;lA~8qKiahkddnOWFe`QFE9%7?b!#}B?h9<#U4wUz)j$sorX at k!eFXMf1lMgn%
z4=+I>{`)fCror$g>JD$#38kh7yh}q(o%Ng!w1=J1Y8W9I%Pc%8vZs1c2E(ZiJp%hW
zF_%Ds-w(xlj+f;X)loL|WdeqjdI8-Yk9MP%(Kud(9AE=<hHTh`zoWPVgn0fLe-rt^
zccx%k%ljUQ8KSa_j%7y&@*)av#BQv;8=j&iuosPm+4p{g*=Q`2UqjG~*a!+lM<K`b
zjZ8ny(UxVXFq_IvOvh&z6gsk$f~K at oUwK}J%Jf7S6=kTZK1rr2+45F&C3y*0hPRXR
z2<3MJsPh&J7<SGk at f6ZY%1#xg$7e<khXt|(Bk2f=Sf4TF2Us~__=*fFxv+RA at lF^=
zCR)SJ3|q6YNpO=`N!hLnt*h)^0A(u4Ugzr*RA-j>#YG1ptg!pY=m;kdM+YMLt at 9~-
zspsywQR8H*HxTRkAK$VD+OzT$Dco|ZvN_DeVN9>kW*xGM)$(a!d^ggy(LDT!S1fS5
z8OIkBgcpx*2Dd%`{r4<9 at KjUy4Rk-Wl)=e|@U|H6CfS=rg<+^k=B5laQESTGzLUxY
z at 6Yb^JmlDTM|~B`^dJ(U0&<-Y!RXTL9#+6hqy9WML$Fa6iEz91=F2b=MqK_#sNYyV
z_x_yObLP%kzHBp^_w{>*!&FJNhm-t!?rjIZacFRgu=UR^SFT(}89OTG2L^UVA0~Nw
ze|!w0wr=@2x6kODY at 5kF7B1{TdH^-vQMqB++yo}Qt5MF at H)|CNQyhWGs8l+EG5!@V
zLjY)A+}UtaTfJ)1^ciz2 at E>$_?@ITnSf at n=3xnFFmX7SuLC5bqHFL+#o#=7dym`ie
zEc77S-DCT_Pq0Re&K}q%q%6ICyA<M6;T+K*f+Jlhze5OUBzFv1EWZj(AaIiBd_Ix2
zVkhgIW1W(7Omiq{PPeV<7n;+(Q+ckwp~}YZSCKwT`1w1E-9UTf1kfA*f43X3OuIYu
zAFKvuivQbbiCB8(^OD44KK7R9Y}szWvpMt4tOjPSw{T)2b|4))5f!ONQU3&y9YmOu
zj5>jrNC=Jx7^R<>cLne73UqVM4AcETGy904G|?DaQ{v%bl!RVGr<}nM`Pv;`1WyKY
z1S(Rsr?qN{oCkaeBcVNlN|FPN#T(R<0{DEiXIv?2bs;8On0T9xDJ;rFC(wgG^}q$p
z*av0Tlrt*H$#ZRzW1nDUtv)uR*<!F-GU?$*v(aikgWi_mGh@?gIPtcOM~n3;M|8n^
zP3%|Vv!Z!>T$6A~f=g=?mMQ^^M~e~5+)|u;2bW3f7B(9L<IUQX#a|R>W?PoJo6I_Z
z$|72qswMGH|I#$HX3`(ibv~v~QFH14EP|vR%Q}F{QKAD9S`z>CFO6?)D*Z9&+io{B
z7yk7%=pH;_xYN9iVb(Jb96N5x^)HO-w&toAN*N4>K{2c0rVw0zO1j?go#3ZnQO2X1
zoJH7pG<saFg at F+%-IhbhSv)z#q!LBWqRJUIEwOA^M&w!Y+12Gl7Jw_n>s112e&T-A
zMZ at XU5gF1%u0q2PjNvi_eA*lsZN6`NPnAaA;l678+gT;Njo(pa2zmG;<}t_ULdaNp
zwWBCG!8FeQs7mi3;4xj-IqcL=bg0m0IOOU59op!14t{!DJcng$63_Uy9M5=yJ|~V~
z51I$LO!=IKqcM8s-coY?3S03gOw%cKEm(Xcm37>g*cMcgI7v>;V2xq^h>^-2E)-bj
z&gfLUm*w}YHii^I#wLZ}mCs54p|xT+G at iiE2RD<uqU!E*a+lVY1*FJb;twJD-*WAZ
z*C_0=KZN9~;PFGa(XCG?{t*0pQ{!pk)57r59(`Ot)I~famST7dt at 5Jt@H~?s8QS4D
zYpwD<JjrwJI;X<V&syhE)Ac3O`K>-LukSippZxhU86P3SD>8k{FnxoLI{JFKV)}a2
zc)jjB-)pV!M6U|pe6K;i{$6c-IWI?Fdkc-FP)g(X$@_S8LKBVreoWJQbz!b`U3$F6
zq$V(gve}*J{k!rx8RoN%C-C!0^f}FGlySV3uJIUsPUD{$j&sNgKbLXLYDO>|dQ%)8
zpwC&%A;aNjio?rRpJ(uR)A6l7FT=B$;;{MW?VtZVsaMPI#N%`3&r^F$9zTbE{tfz^
z+JW-;HFW%|itmH^SZ%EBc0P at n$<)az=eH{U26T`5R&6Y{F!fSW)0em=skJMX-d6Hf
zDgBSKUQ{X_t+PSn+6gX&Yi#eruErDCu3Cp-A1LRuQXjs2t_`L)($v2m8p1#O{`>NT
zl$1o|xS<xj5G*h)K=(+JDolxtE*=;Y`TlRCrxDRTZ8VFq6=URBd3?f2upX0%Z7j?A
zE{hiBhlYiPp~2G at ezy$^ZMZXk+PBaAjqTd|`IjHd>kF^e*YwRJFk*S~GW8R;VU;TN
z3UDr#Du{CUIkp3xt^3&|@D-nJTE?KBpPDviY-$=-J?GF3^ySXh{)MAQU8gHco-#Tk
z)o03R(9(r8EO<LFKR^F1-q!ROoyUjph@?enX?!JK?4UMLg$27=EHUQukEkCg+A0Qs
z&I(FB%>Z@@NtbN}Emr;fhiv_wItB;x+&4>uy*hU9GU;T=7>bUbiD3o#;fc_5>pb|1
z;Uu~37!*3qKYVbTsJ_EaQUsYcjOmq at mOl>k=<ww=Gcd1wfN_<KZFdqY`#(ovHAkN?
z?zu3lz;z_dYD->jTIbTTOa*y=zP%HUl{E{e8hnO?Q-zie+L9TaoS$>bjJ+3_o~*_A
zdIQ_=3HXPmxL|1d_dqEOu<%D_bl08?D-Z5%Tl`PKPz#dU!^DJ89}8y6N3Q;dz$c&f
zT?lL+U|VQBi+c^Hk@)|LIUllb#fPZkpV38j^S_~Ji7Afa1QkjBFiygro43VSF*>pE
z2RiZ3abQF&K+k^;^BQcLMeOg!J2r86Px;ZiWh=wG`JUqR;z%n49B-i!9n4z at oom4m
zXPd`Den<r7=a0bW%ISE&kO;+Qn}IfHur}1icN4?&Wm2QCd0Q1 at 9h*$+$K_k`{ERi1
z;p1k8JCTEp-`mW=dYFf|l$c_(4^;m=^QD;uv3N5vB9~0u1 at qYBd1fziOA`lMEOMpR
z#xtxJd2$;j+e-t)K{}ofV*WPF|L<X(yElV at R#N0xSrK8jBBbyslwz2;Z^Xl<Jp`!*
z$0<_JZre_f$`7E996GiJ&wYU14Yjns1nSli#3pOoLOeUdA~b$tkLC!yeOuPQ52@|d
z)6%z)=y}q&P>vN}C)XcSnb*){a&~MqQf`)}hKKINggS}N!Gg5Z<tx%s at qxhq+o`3E
zTy)H!`<WqhRYC=0puD%qcOl)z7k`l*Gb$v6Q|?El^U@#W9E|r1VNmJ at P|BM6$PRAy
z04r5|3QC7g&~evJRFRstVmZd_r^<{dMW}!@NZh^+opo_}J3lWk|LyhW>FC`vUf&;B
zzLQ9Fa}`{&K%gx};^pbBR!I)UVkVmjuMq at fLa%S!NrA|!-RYsstwk05!}WB|K81Pt
zjoikaXKyl4%pf2q^O`9fM)Nt`JeA(E?gWMmX<w|>91IW{3E4Y~#ZqPPh8m%QOkePp
ziwi|UKZT|kzs%3zVpaax!lF&_tI%=hE_9kv)*8Qj5v61+7ne7-$;3q~tq96<GaEgn
zAEk%p+M-rE6Hn->lM=0_BL^y3HU_ZBq}}iJwd>QP|GibKcT|HKf*=E3zcYnQ-?mRf
zK5$S`oR*#*cd0Bc4!FK|_1+#YEcxp9_3P2}-%w5+Ke6OmcFY9-5LmYke#`8zXlj1u
z;)RPkWXgEQun}BX?oG^aG)DuBR~BvZX^H~il=WhJ&U)?2_<s<2823CYyEd8Q)IYQF
z^Gs}7&;-YXe<tI3T9FI{u*wjU%i_CP&7&fn9pngRY)HAf5DpN1Z5`5<uON)Hvlg<T
z)6S7$KeO2f`sU5J|54}MnS&<|9ofHar+BSc>gr5 at Xjp&&Yrk##_Td{8Xl9jdmBi9f
ztE;k;8 at UcyL)}<Rj3P(8={}RiA+hmTl at u%J!ok|elFsj}MW+bY?c4|jAix6i_Ck}9
ziS0nlokA&6WTx>E{^&Fd9rE**?x3>9B3r1hhh`Q(M~_pmVBvggA`q`Cs_-Yc4+$Z-
z&pTmiG}CsFxh`!J=4r|;()IcX3x}BH>RmaWfQZv1i#iUF)dbd4Kc|NF%a5k2xRGnb
zdg2=K_+T~l_^l!BAwBo9wf+U$h8n_u6yLGfM!c&!iRCtl(=u2}tp-{=x^dPp2U`_!
zQ8lh&#ak|av?dNO1IRL at bn}8n$faDw>+fRyrBq<`zpSiL`Cn{a)1?XiG3BX0*Gi#a
zz at +o2V&Qyrym}{5AS+g-kQz=4{I|adDLj}OiLB}M=Bg(6*OMCm)+|IEJ>mn?gU>7^
z;9o*hpjKSeFxL#+1fV%80=KsDvNQq9r%*1EoC{l!P{bmn#gCcA&nf{s<2~eNXez7(
z^@yI$gw@#rJ+o8iEShzA_pFk#4_+Q6itl~l=$@HjqlQe2;EL&YxQXC8d2?i(&fdM(
zv%Zp$9jgyW4m at _wFA#m{=ityGhF{o{9HaWfk7OM+Qy7?^tg%B?*Q&N=jREN%7BNE@
zyzot?F3=@(zKNK at e3gyuo6hu}uC<jFLcP<0KqU$}`jMP5Ib%^KaiE?*%g7m>RA7oN
z9kf|EVu~$D^0Mc{HxDXB6<tmcnm;4^n9;c7*j6#Xx$G}4ZscOzTNfAaH$iYF;RCRR
zCbkK&Zv*x6O0A6(%c7;LTD*Ij+9g%;s>SR0q$}?sYr~|89G{JK=2!UafTgQ*e2}qO
zo(nyeDoJdL{xDnkSgyPXo-hrjtX`enY1!5uxtlhkax`ySxev_N#U#D6zgtdDs}D`<
z_=(#(W at W|fuj-gBjyru}$j~zty?ckZ8dS3G>&cTQ6 at QQr*REa4_~N_>ydk6eb?y)y
z9UX&V!!%KQ;=S(Igd#>)86(y^Uf9HFPmTMN7$N68%=`N~TY4`{eFYu76%u5-LG>lI
z?NwIOSc-%PCk5+4Pf8f^X?**z9Tv0Uv*SDe$_M>AQ%CU)^yKuRZ~3BiGYOvYWLRu(
ze*t<z&?i}wQ at 4`F+^Atx_xZc5Z9!*6e^L^g#q}wLg%xSd6eZzYqMMkiY*?VgWi%+d
zSn0Y%w}^bvgx4XdB at 90a3lKB;^za=_9qxjT5J})izpmp?*XM%<!!J~<n?(l4TZJgV
z7tld;i^5Oj9f(%&tA53Ex^r at 05$h at CrHGZNqGPKusN$1d at CvMZ>l0Kl+EYAd^5B2a
zhmY8WXK?&r`}Q}`4YH&ORYBG^l`q|gA+o=uC2Pu<=*;>BDfSea{qWX5SW*$OKl0Gp
z&piYSr5DaYbltdN;Mt-nWdMUl^YrY7SS*C9x=;Au+OV$jiSxg=Ve?K<V}n|;^z27%
zSe=SXwvvC>o6j9+WI9HlV6^gtNawAL2&`<5Zez-3SvpZRW at C=1omxm*wTf(u+!H)l
z>I~~>onb5fbomGS?m3(8c}otnCvTQ7ZAc{qLa-!StL%RkG(^@4E=?a)*@SlAzHG(+
zD0AAL+Lz<vV3!?pz$|z84Bz;Yi12+C{~~@;+BrJ$s_c%@iV%|d{DypA-K>`gv9a8O
z^~#BfSTNYa%Bn35gVu1<Y*H~RYrrl*jpUro@<#DFG at 9uh{PPdAMr$&)9IRxTo}meE
z-{6o?*CuvYbHoTsQN;sU-eK(Yh2E=IudYN#r_P0KW{#NRn%!~k%<QbJoXN8~XTwA@
zJD3Pg(Bh#ZRlL(0<tcB9!5D~&OKOGx<(m4=Y0XbT;Tg^rLmxx&!&;x<O`wo9ASjen
zkEdZrN at k&}2gr?C`1B-$!MU{^Ec|ZBsEr%YXKT>+Yu7HxPx)r}h?NVgH|GrVv+o$`
zB)s>2FBKo;)2~gGwlKD|?9|^gXC)>;r<_oO4UCH|8+G`L`7=}VrkSG96UipBdq!(L
zh4-QG6>mrGr1%B&=LJGvzAeE$KacYGO!0T&fjStkgd>-@{I_6l+JSym2b(T8`8~;j
zAY?bv1z^yPL=h}ol at p47?N?n}5fu#f;mI?l!-Wx<TMIX3Cnp|EUyA1|5g+m!Rb?1o
z9qD)_;yvMxI*I1*1;!^iVd^>=1N3qDoI+dFsUYUFuyOc|GBT+<TK3)fj8vWW%>FnZ
z@%PV$g02DW15NJap#aNsncVM>;k$+5lQ_-`;sm2>|9u}#<L8UN^YLigN9;4Zuns*S
zmJn$gOszkfpr}&2n46|Ib?#!rhJH$@&MFx=@$4lS2 at n{VTb7)}!$^Pso+FZzNq3&i
zqTVB>9)4?NV$#Dq{65oLS_cQu8Hovng**8W(_1GJ6M7f!;6v+c_6&-So+#fl(%$60
za!qU{9G#d_=GqT*XR#jD&sBYxFL0=cMV-%>aR=QmU(c at n4{k+YHZmJ-0RBLVIE&NL
z2*oD7)WE9I5bgNI?ky}Whw!2FJ9E>aB_B^a+zqe1HM%CuP?`@xMq%NzZ_M3?b`Kc(
zazjm{au=PB*XGC8)~u9;^-}eule%>s3-dzpTt&iBc};za<bLXGtwoKDmNj_4X;ds@
z!N|y_G#R2kzyy`qVa96&&csQQvmubqMDCRfiu;c{H at pl+(gw(nRwcIe4Rm%c>a%s5
zDS8*1id;Zi<I&h0kIusLXl#PTxngr1{woHbJvOh+Q(TAF=KP$VW0cY?Hp?-87|Aa)
z&9vw<l?%$D!&vc|H#rAeW4<Yqks at X-u~>bT8SSPb-qy at xrZzH<5n8v#;|Fq4%sy#O
zWw$ujK&xX`oEvKiMcUU3KWJN#oC`~q#W<HwuNg)y*)pleipeE&0>V=wBY=+zY8%Wi
zD{WWUyKrYisGMlA^!>Wii(YEe^V*9;^6Of+O3BjN4Qfwlg=KOI#hZ~@$!b>cLdOm)
z<ZqL^9m!#M^!-oKOPD?r?!hENAJf<e%R*%O;Zw@>`|CSZQu?eQl~)_Nw80x|X!9)#
ze(`*?U)b|?Tg>%-{*lqKv?!VY+cugxy`hczjA<{$IU8TtMeAa6tPB9}1nW$;P`0m;
zQ`yQg4Hc>PVHo6lq88`3#Bs!0%QZ|CVG7<B1g?$@F6Xfru3^I^wcZdE7}a4u*(%wI
z#pBME4d-p=cZu;QVD{a@!0ew$Sfglbt5h$%cMfdh!|Q8yP4glTWf_F`=xB-`;tz6j
zve2U)kmEHe*%ad92h9i*D%M7p at 3fF+n`_6Qq|Y8^C+WQ*%yeP8LZKn~Lg`F&@}5GX
z<iq*ps1Z`5x|s>JoW}mtU^=NV99Z5uGgrE6Glb}6gwzlbug0q<l48EKpg1a)nr;;@
zUlFymoq4&W{~D!L3$b@(?GChmJ at JRKWJQd4CNWrJl%&K62yl*5wS!n}wOD#Vk-XGl
z at yVNVO3XsIc>ZO*Yrm4J3X~Z=`bd=9eJWq3P+236<$Zh1*i>!WyNd`D5Wuc_j89}_
zB7`j8RnU;fWDS!$X1PFRv at hc;kLMW2EGr}@vL{;PUCe{L2W(fQbl)vjQW~$H$Y+9c
zA8HL5+(dj1QrIpH;*&y%Ekx?!>P1jlF=$d^8zM=Bn8NP(h^L@`X<E0F)v2TI!4iC+
zJv_!N%e&k0x?TOnDLzrB&|T9TvgBTO<)W<`z}73d;0+hl=#JJOs7`L*F4>QW_~9!&
zu4D$9b;w&7Mk2l9 at w8M<1cs3AVa%;zRw1s<ct)u4&MRo0bPitsDOD64BcrV}iWLJ1
ziEERpYlaZ6Y#rd;cff^)t1^iEfr(9+$x`Er#F)TS3SSJCXG3N9nnTcJ8|#&hv9t)9
zt4o|PoI!y%vCPK(=_YP>Zq!IY7(3-)W#ytpV(G+Y42}0M0dM+UI8ZWh|4TjlpvGRM
zvQ9!p_{2Mh_%bCGiwGlg0_&`-Pjti9xtgCItkI at I57X+^acw)mt at xgyOZ$Iysuntp
zuihA&ZU}1Rib}@{x}xdH04u?HH0=LV&R3%QhuleV1)O}JDv&y at Sif_Q&}2qRDJnbE
zDoiOiq2KU%AvRX?ik-_=SNG}q;Y$wrI+t$M?K~i5*QHc<Hai at cS}<|W7e^a8Au27U
zJZhmuj{aA+q5l7)ZTR#FpF at p9eCEe^=JDQiqus595T&`4x(N<gLu(8g<h|`XpyDSG
zChe?5r<-8EbWUPkNZRD+68Iu#QN_r0`+t3Ey06fH at Ay&w$;rTvO{kD%0>eLzrKa_6
zoD*9X3QppQ6X0Ze?Y%??l}9tN at J*L}yaqjK#N$CoL2+oSX7(FmwIrx)Abd_L`Y_&7
z#i~dZL#F5cdEen<y$VaD at hxpOsupE|{M`N$Zkz4@*`#AaIQ+}*ZfcP?QS0KDSRp1g
zpPVSljP`veSzAz8qsq##IV^nmo^gT9s+wRCpher7*lb?SZHlIn+1jL-|C~j!-E6Bh
zv{8-;81Dm6w&Wnr!g%kd&|I-Epox7!dQ}tiSJ at YsHc9j||AsUDe~+^c=|xkT;S3e=
zIW412xNX`y!Pqk1cn%+kq^~L7LNOOLN%6IAJZ4O2(xa at kCB>KZ9wR3ORE3W^f0`SV
z%@e;ir}xsHW8YpJHteGCmsNW*>)1J3>sR15Vt67|VVo_tMoFBEKHl8sQ9kg8%5BbD
za0=*UmjU0!CD0g@=?o=4t{tP?+n^6Rby~Z2?UEjy?~fd at Zgt(}_U*nOI%?wx;ce&`
z8WJ(3U#x>EUZZW5Tkhp(Z#srX!6voVD*>W&LJYRBDQ48DH=oWe&uU+TCd8JO9r}A_
zZ$%HPD%t*Pc655)R>J!avq;PPkFbsT at bsLu#B9QQ_ at 7+i7_Di;(bik|>mH0kTgaDi
z49$H5&BZX4Lb)(UaH6?Fa^*>xk}%9+Wc1F@)blHL)lTT<DLD1c$U=xW229WUjLyLi
zLal_*#s_Q;37<ho$|gVPBL3rYG4>*nK at f#ni9+K8U8wk5V-AU=6MyDz(Q}gkp7{M=
z<@fFI2nj~lBzY9 at gmc}=K)1+0WGwu7u=>2CWyVm~z=S{&tr2>W{;7mVWcp{{eRq+(
z2N=#>7|zke=OW1vR$j!geSn{zZXAtadx(EaV0*|_%CLQp=h|a|4e)yc{z{VHpL_A*
zvx^te9~a>qo{<9>j&_Mgc at B(g7|x$EWmVGoVIJxzY8p?_niCdSzvEY+KVE;G!Ps~O
z3x`VSB6*+86MONZbdkU~4;jRi#>W&!KW>#SM11H$AqD5gsd#Op;Ia_IZ=(Jr0^6vI
z7x_&WIeFb3 at wz`_>(*1aBhf^T!6g15YNXeh9}2 at ek6&S$F1>z{#&$I(^KGOs@;kyg
z9}vSv3VWs_R~0Jp2h|n%J#y+)VL)GJ^MQx>1AJ%s9e9|3$8#Uxf7;Occrrigm66Gp
zSc)ppE+p&7GK_<n;$ZnMnBBX(8EL2`T!sS;56gyKf$YUEBqcE|$d`aa`5eBH>)uVq
zcPotV2b3$D;QQ9IXBQc)+*bU%2`snW*+ at i%eEXsXBe07FdU)6hvthK(E(OZQ^cV*N
z&=ORvwM{`)V+w|1n8WQIdtBRo7(JcQ%N at 1jgY2|DuKfpiu$fk9z;g`4b4+J(?x5Ub
zk&6l%CMx76CB1;s`LW-REIaq?A^$V4Ip3{2aOLIb544M at b_ypx<%kZJF^K;^)}VKF
zHioK=z#H%wt04W><qfDR^(4mShkVI6GRh<LN2=-TZ@=XO7(Qt(pIX7EQ7`7BD$^YC
z0ILd31PZ3nCH%RGltwHv-zeV>F}U at 7G$EFNtq?q`=_vmgLr%EH3UCYkvgCYU1!j6d
z17G7e7ef?&5mi~eX4++b?_HKFNzRV}a?C}UP_kw`s_Mt!tUPCW!fQa=oz11d>}ZJx
zl%q}b(nJdBeLNKfmCQ$~yUT#$cN at Qy*0UHl%#pIgiKtUjGQ*!VjF)fYE<ssx=XrB8
z+XJ|UPFl7Myk3~Z^DEb(V`%S^7ce7aqn~pI4=>%Yr0q!Hw#-Mrqw{MwZ{7rL*gWt#
zA5HN}<vznBezt=A4(qRpGOn6nTZUf7Gq%zXTVa{;ZxXG`%VBo%x7?J<w{L-4;S{Lj
zGcz-vqAdPRaGW`G=;l9wYun}ZQ|;OUw{9l7f!-Okj*PXI>=SnPk57z=N^GACHAwk>
zHAfr1$8`7KdjM?(hmG^s6&Lc;&`NZme8rlvjOG^Jp_18Ip|_Dy<Pu#&eSf^_uLwmL
z4NSYR`AUc)uSccBd)|}A4EQtunK419+{zf86O#lZ-}%5Zh##}q<N_}YPMf=YV1ZK?
zZ1i{!y8vY()@8G|{zgXq9PE+;Ck~l~bnx2;J3+(Ix={ZePu4%Nl0}ril=lqmvJqQx
z^v&$g29-5Dgah)sFiTz<!%N at B?^PM}eVX0K=)<d3!6cm<46F;XF_0X2AmEZv1worP
z!=~+|3&`@#{G3+`+w*+KfvEoVlAeVB*R99A_0fv;0Bg5{5gq0GcRYL`sRz3HQomdZ
zZ*F6r)C$jM;N<Lb(j-Dht2c=xR21Xzq^HM#enu#p)jDlbJr*|eKks at OQ%2G{Ccl*h
zL-(T3(ZDmETJ`9f8wXsthww2c^C{jtH0oXEQ+i@^l`R-7l%yKUvFJgX-^2r(GmZ!$
zcQ4C)o7g+l<+gvnvoPwBy!QzIj%Vjig?~xa8|xu0oct%@<i$@{$^-KcC_7jFPTBd)
zWXtFlt|oKz!DqbLEME&~u9CAw&hvM$`S}%;-SBKpgnJ%bXjmtd^81jWYDZ=IUsHNp
z>k0kydO~k(rXA|T`7Ksj;jbw~D}cN|@Y&0k?pF^YsTAW>-tCk=1V%9n%Z7r9Zo1UM
z7fhZ)@%O9Nt2JBm@=ZPQ^8r({+JsF_#7s7I*6Gi;_bP-3^_Ru?CUQ`#$ibH7$aAt9
zzo+(*<6sF)M#7t}26AmL7<B?4&J%%kI5h}HLE%C);4X;Yl$D53w)iE}EOeeoGX6Wm
zz~pP_(3m~^cS2O~$x|>LC8ICVTCvokYY)qF1QJ&9Py~aXru6A)20-pnVI*c40_>ii
z1#iAPIwXW}{3EiPDA*|R`e1V17`s)z)7(q?4oHG9jO3O`0zLB*JX~ha`DOIEnmvcl
z#X9<2&976QW7x1cz;EJTCTBB at H|ID3OXsbBUmpfBa_e$TyT{@^!AA85K4W;&n*u^Q
z>R%_Z=lVE(q8x7ycZ{)NA-=AjF|MyqOI_A|k7riLIBA^L!8Mo{><q`2!eaDep>u5a
z0r8<^Tr&4&X%U{AWwzki>FF>AZFzEi7_rp(+YFBSKVT7qWi_ at 3{G{KoG%?cK&yY5(
z5m%g2-;T5r at WZCO4^LSBhgMk`CAk=j124`hJ5^9rn$R|5bS579Nn~XA^tS!B4|(VP
zuvX|oX2-njr~&aQLn?a4Y$8R632xSKVM2xQJMmQ{kyB at q+_s&R*ra!dZY0=_92hDS
z;=37U26u7~oH%vl){PmR3ldXc*Yt|nH(v__PShD3ygSUDvL~+~^=WGdeXFSS0fC;K
zu)UVop7`T#;Dy~+ at 4>X`(KrasVcM|Xi&Z4QPyGjeo{OKCD9;=BqgZi-Dq0sJ<xZ-`
zPifc|{(LpEqxpcLQeNXAN at F(8g2o`#kK(6f94-W<<L4cfb2<6EV&@(pmZ-|*=>z%>
z`dB at l-=Pb2bPyJ!kMTQ$=vadr&x^f8PyE~wS__Nu^A7SHf2qd{J;`%H&7U%Vo<0|I
z at N-?0=R1(SbWSLv<L}@C@$=RcCiyw_4+Y7-dVh>#V~|{(kGcVa;`}A?F*<bq!x8;|
zfygU+&_UGwV)d%B3x%7O4g$xEPznKjhVzcy7iWzgunqn40$iy2`pEvdxq^#xIB at Ml
z%rJ<x1O|SRXlI6DZsV82D?(2q^MYBp3(<LMm88OFXjuBXhgaA1?J#Mf_kz4`Xv5i!
zJHC!8=(BQG)t<P!AD)hKPvRQW<l3fq95z0 at O2?0)XPy1XUexm;WPBs39%eL9iK;T{
zu^!-ucje=uEVggOH}_EzBvfx5@#gwjl~d8*i%t(24qR3TnFsI~!YdT^>w+GS9Zg|h
zi0o}k`G+L(L&Dp%4H(&}nus>)R+LZM@*$V~ulyXOk54kH6bHGeP0?pSS&+`#t5;|D
zU?_7A%A5;j1G=p4IH at 3Ivu)stF4;v{xikM$y6OE<=;kOW8;jL)NW%Eseqkf0mS_B2
z-7U2pmh^?!KZ+f61wzoi_b2spxA*BXcu9~`|Kro&%<v2v4!z$!dS&0vaJ!U_6lWBE
z at eRT+(ow-5uPc`Bd-B|uzsE&$7`MUklp=0cxh_V!oR$}olo)Id+`zvVJI6scUh5Dv
zvTjfH+cSQ6>mVBcG%d@^wZ)}`rtsBSJLXMqmk`r^e8;2xkNSp1Mt(DURNT<BpOqH-
z+WS7gkgSn)v2BvPy$pO_tg<FwMk{F$rBys#6PCm3_wfF+XZ7%`Ky;S#tF0C&uCPF1
zXPS!gARo$ByeO{#IP;9?Mc^ct`l8o{%P>;B%5xDI#0f%23<HZfIzsnAB*`ZNvw)NI
z%<F5Q_a^eUmR$&~qoZP@`vH7E1GfK^J1{zG-eypv%`;!K?8eaDJ792<r|6qpTe+*Z
zu8~uPMCQkMd$&n)YUJVyrY|4SFBj;>tgU+Mb0)tiEK(BPFE{bNQAso&i_~-BuLALQ
zaioBm3xAg$*ciVwUeWB8B=U}GvN!?1GmSnUgSx1yBo``=eiY~7=cNqijTcpmG0u&I
zkH9rV at jJOP#z`=T_%KX>l5nF|g$9KNB at nh!JoREsyM+9ZK-V(p)ANPQ<gCcv{;9bc
z-u}RM?+HD-LfQDrTdU5Y_sY;s9h5ojN|`%l_$+bV6j0mwMHpOE{=LVy3bmVM<KP+Y
z=Bx{E6O|tt(eT0G*Mvh2dFbugdwrdO_w9SWdqRL$R6AE=D5ck0bWGJ2!%s3LY5En3
zG!%n_gb<nGF<eV>p=`)h^cdBmljs%z-o%|%QtiT(wOt2eZ8W;R5}jYSuWM;x4j5Mq
zD4Rbyz$=o}Gg^i5-<f}e<r1x#!LXo&7sbU&A<RQhq;RP0LX^ul`U|%L-0c1B!u)kU
zww~=m(L6)26RMiIxtQP8W9N%`C*3qdW?n!)L$RB8xSPF;hUcCA;=Mf`PCEcqK&roG
z`L{*(@aUUPz3tsLEp8vw`=x~FHJy4B8qPxpRcW$}+fDb)Y)V6_gZQsWZz~onp=@*t
zv0_dJFdFhHy|Jo-6#t~K at D6Rd54d@4EzfV5`JV%;-r*sn7`}~YottHJ@@y5^DkdM*
zjNP+uR1t)?ZFn>HZ9Es#wZgZYH at UHqg7oGf1M=5W8dlN=F@&kj7tHV}#B`hd)sP_?
z at Ac!h{WQ8D&6qm!!6&AdVIZ6hiuI0Y<Lwz}h>kDX09mm`g^S}`*Cw~ZfJW}=_u7>e
zzwTc5|5$quz^IDgVf at X$_wFtUA$Pg-e!1i>Bq8mRO9H7Rq>(~Np at a}xsFBb+NEf78
zKq&$u0wO9Pq9PVV6cw?71(7ZyAgCZJ<o3SZeeYc^A$<Su_kDjLz|GB at otd4Po!Pe~
z0yrOD9c1bntcBo!#He6T(*JBM=l9XI!;xe_G79FFu9spRi6ACPbk;!zle82<`mGw-
z4>ult9Di9U8%BZ1&$Y~cYSBLkX1xx@$vJ>NSibU=Q7;7I4}B&M at C^Wd#t;2U0dk+K
z?gSyDfnQcTd|r8s&e*N4J~}fjE`8$8v`%q_2f70U8(bqoQkv?A_K<vY9_~PSr9Oz3
z;SO@%fw(imK|VsYUY-j}iS!2Ya|RXJ-a<v<^5yfF<K5&ht_4@!ku$QrD5>)7wXFD1
z at D7g$Wg6L{yg_SODov}(`ytwh%5JHtJ*-_lLjo<@M9<Rd5tGw8Ebrj0O?^xwy1Huo
z+}u139mRPuf?t;b!=jCVlG1v14nb%>661 at j)*Ge|4(NQ+)z#PC&9kG6yWZbh!+66!
ze1!dOiyV<Ha$p}KLQg6NNHR!sn|cXDI4B87<$H_C7tDO_LGk2G0x3zU*0z!%m3N00
z!Hi+izMa$eyt;f`hiNK75z1A3M{r3S*jgsUCr8b6Sze);uXa&H^7E1Efiw83ER(`3
zzAEtw+<xIRzEpLGjTP)TWX7#U4m*T73tMtSc(h0^NDz=#7nEL99~-V+=#Ie8Jt9s(
zkAdLUCBuD at 2QT<Wj4KQc6c_d~<^#%28rL{vc3NUWpijV4z57L2Ujuk{VtVnUMb at g0
zE`|`QuN%Szo`gKkjjdW at n{C+v;aT9N3O6NNlhBy#xcIEB__*vBH(%Mj`HFa_a}I%I
z=RAL9%a$vfsT|XVSNJ93MM^=RO5K8;!luLw_4Mtd<I6J&yG}08oLZSTG^I<y%VN#U
zey%$3?o_xdIU)dj{8DDx?a);?fnHNRtyPPIxo_>Su=)N>l7sKHf6ZX0{=LTZ_PKDA
zPf;avD*Db-zNO;G>+|Qoenhwl1xJqHgVOx*`>>iflH5(6CnKMS;f?4f-b%hB!t)bE
zFIp*e0<9VG22Z^YKLKxwOxy?)CYOc5OJ~3UkKn6#=?2m!sWpX93BI4SDnw^s&&a7D
zi5F^Q2uDUwzc7iy<j%U7y<=hwDj3$$Zwx-QoiDAJwgZRDREKnKLhwjc_RcK)hg8#2
z`k#o>ol>pnON%v?H`oU0y_hN-nfyHDwkBAN`Y1C3;52S=My)$==6-9Qw<M0`Q)>FX
zhtuUYdk?pkCXL$`WR5nj$DdiJ=jF3n+I~aG5~HP^Un->pQx4a29POk8X&MQWBdz?w
z?Om2aNy_xa{hR!)4MY3RsV<&1{P3?$!^Y(HEs9MA&_5?e+d22Z9CLVNkSj at 1a(cx@
zlz^`x#?D0s`Oa>7ap~+*zp#WZ**m6pr}-%1qh5^Q-02K at 1Qk_Um!|geMPYiD(6hto
zQ&H-qFbgD`hnSPWvKw_+)qmt{+l|>H``_y}YTmv>k3W8B- at H-$RlMcw2l&La)vKpL
z(g$Z-=DwdHI;QiITD_;<fOur4vgt at o#NUn#9)ef)G6qBa%GY=7-wuz8Uib{&jIZOx
zV1Zf)>Jya24(_D1i2Vp3iR?U3lIMA{6Z3fkVrS~>eb9LSq=D%$VeZqtyW;g-dp|uF
zCZrEcLXXW at 3%<ke;x6~_R;arNAKx90e_Pv at 9x*00-5H=ac=~#h0f#q9^zceb4;m;v
zypqyeK4UHZZTMaI_#VAm>K^WLcR2X2rGA}5=)En5a$eFpQnNgS`3h{@VzRSrBwQKI
z(3vl?z8WwTp}|kT1;qpAxx0Es_Qxv+hHH33N>!)GFn~~RQw56j%&4wg_FSJi0F_gA
zELn at cz}sLWEX_?y?gLTA&Sq1fTFc&faf=8K14S>#J1+x!17IM^H1f&dhp*a((7(}t
zCz}8HlKzh<{3`g}yFp)8*geo^=yBRt-b$plD9ORT5fh>UeD3*|HZB>7&xQztN6+k8
zQD0v^?$F9l>xxvZ)=6umcjh(R2|*M}slT&pW<`CZsIP$$O-(QYpB+a!`ph`=4^-io
zPvV!q{T8ZNZtyp)+1WgkC!6q8$=QKpaf#Keu1gv>;R3#bAH6mQzsYg{%ezIDUu^s<
zDJL8~XXlo$%ql|=Tn1swYU}zB=;j|^*mwL0+D9y>Cb^IYT{r(gx|5XJIy*{g$&TdW
z-N3p|Xm(0|Y<qruPDzvepKe at tV}z6@{em0t>x;^ILqio09YRora~fpx81fN#N;%V(
z^k_&|Ql?Gt{v)sM|KaToNm(xteT)<ha7Ohj)rX#C4$9n(GJ<A<x7bu})oS^agazHQ
z3c5t=gR}iY8u1$OdCv}p at Tk!-Q9iT1TskHsljOx~UK!^!r*T|s7K7nS+vzrQ9gmTG
z$CIDS|J4G=9pt$b0=KK2;9FbGnV3C7(H*?C9eO%m-7Y->cc$mS*FOYb-wL12e~8D~
zywD+gnl%66fM22fqOoGn)^Ijw<H3h<N$tQr`DeNJ+M%O`J3 at 6k_&P#oc{^}DfxoE0
z*<42_F at fnjjLlyqIN(*n1Oo5b7EVHviNeu0|An-|*GY2=s4tsakoJSH8uDRw?W;1H
z+OcWDAheogh_tHRob1{=HScVllSz*s^eO%XcfeW`K9CI!#XfPX7JqaVynbzM+24B!
zy<1uJ!P%osUBRUce43^#No?@<k2gEjy{Zy6Px7~L&{6lc!1dza;(iIvV#6LyqI8F-
zNMGu;jSEC*kffCM+>vkeOj2>yHEhFQKIw=RRa^J(91)-`$KNNpMh at Zk+m7b@sX~9<
zIQ-q1h at fnUqfujM7k{I7W<*5LFqoBHVKmGO1FN0;#4paxKQJ19`c41$k_IZiMEFt{
z5`L2eH#TQEjlpT1`;Ph}+K2pNSWVzrOb%8Pk{pS?P4a0q+tW%GgO4f$hR?pXclihF
z at C#AU5dCRtd0OVFG{bOc7y)Uo>^svrJa#CIS-xk>qJ1S^TI=(JrfxgCt;G(V<^@gE
z4z+5 at T9x@%@hbxF*=qh(uFa%6$1(59?6YOwRhdIYXO+2ACGR7j*_mZZu17vg=V-{e
z9QoYG@%a<>xzdq~tr0Ek4n}2hkGG?6XDJcUQmZTtbrQzb9<J=$zo4IAsDDJ_)1!{`
zdFx3xcO at MRi}VwS2{jaE`X4g_1cbYpe8K?f>|8*vio$)kvz(+A^-YuNv at H7{!Zwl*
z>DfIvj%vJRxi!s-<kLl at Q9_%Fu4<ya-Bejw+q1G%Zr;(FU8vjZgHrPDuZ at mgdp|E_
z5X_p at +gfsK-`>6ZZk1Sj&*FFDWgp?wdmnva`0y7V-3z9VnEbC1`GZML7{+n*lE+lX
z7{u<5b<zS+$!p;&3zm#dT|8v|XWtG8+m+k7TWa#4p-cbizasAV)d at Xf8=rZr?-Ya#
zb}rP<m|JE^)MygzT>g|dk8{eoZ#3^Ay6 at ZOb3gW3&SS{u{^S9XJBq&*2ebK_K$0s<
zd$!nplqnW(7E2u4 at kDyx9_W-+Th1T&^sP7!zS;WM<i$e<PVJVvd at 25YYa@6RMW>~8
zx=#KR70|hJ0R9#_i{XFWb}j02pnkC-tg33(dvycQ&(Ig|B#FYSny{Ff>gce)zz1Ig
z5B!hD+t at uX!duD@>AJGh!c4aAHjGb>Oc8X+krp3ct0j!Rts;8VX<-IF2at at 9L$I*3
ze9I0Lf!BXJyfPSqFZ!?af{1gxSX73WH~+`0CpO at 8yjFe>NoXGvX3 at Gak``>nFmrNh
zWCXnmi5jUTiO6U*BoQTug16R?MD15RHukkyf0yHv!f((8j at UNg-Jg99@axZI5zzDI
zeEhNPGFnx4eN0~R(4WWqg(u_=gfti- at -t?B_}OQ*K|LQ`5t!R_0^fh6LE+(|xK)_K
z);kJp-poJ@(pTlJjU*~2(pkk6dUDxcPy!9M0k&!pEn5y(PM%oOxeko at eNr?}QsKqe
z9d4uf_~{M(roDuJRr5c;*Li=R3nOQ;HacOw5G%aLYA&KRc`vg$(#tm~MW;1;ih>Ry
zHHz#r8K1;g#|%PHzk2?}DEt}z1%&r(AKDJ#D@~i1&wSJ4Gk6=l4gtyd5JI4WL`jBf
z(l^_P9_c&iFizUVMKV0SRrK*qHiYp8Er;$v9rVWQ6H8a&J1P-8R*c8{@Ck(1!w_K>
z-m}X#XX3IRBLTqkmdM8)#@E3gTnX)7wjWgy!Yf=1p&c2KYBGcqyCgayRzOTZrxgY1
zv~psrT3 at w^XQzIodct1FfVrwv{8m+}Kj3Tl3h-~-Lc48^_<B{rZ-W~rjQZ)bzfLEv
z-E{5UUsNv0&ltUapLcvZ{u?~se54GQ<8jG8NnNXIT)lq5XZF4F5!9C=KC@&ubdY53
zY5zjpFI;4IPBBZ=MuzE0U6+CkVcuS(- at GEdX;#Vmz;H;n)!M9X!qOE0pMmL}{RsH2
z&#U;aU=hl;9kxvan6t9q^iwbxpD(qbzY&^RsMtoF at V<OLvM!lep-$jYWQ0Fm4kD5g
zM2sV&_lNigNaK0 at 0sij!jgScaCU4+Nnh)>^&mi;^{z8ZU#n*hipc3%6RlQZ}!a9le
zkA(I~c0P_ZHG=sPO)jKWtE3&Bmq_eUYhc$uqGtb}APaxe0V1>B{oTjIzaymJv-l0j
z`oRzu5G3S0fp|QLw)uiE>Q#X4<2K`ubof6zFTf*61xufz=bwLzy~Jrm9`;V#SCF=1
zkwIPOL#^H)Ote$s$lS{?<PW?a<Fi4hNj-7-XK-61jO&Gj>x=GvCR&#ucp5+DiSJ<y
zzHmze{J%&#D<R5$iP*|4_6Am9^_Um&VcujF1vyrDGxuWUH*rffLbU^7-E#o at h%vu`
zH&m9}?qE-qP+duCoSATR*^^H`^Y|v{clID4JjND*&a7F3`{7q%)GzCc7XCupEU_OH
zCrC1-(m5twM5-rk&PP7#B+_J7MUH;1%7~AuT_6C8YepV{bnNo#j9vKf2iipAI7kjU
z3kE^J>undu0gR-5hZnf;Rb%voeyRO}*i-n8+JN3fN$b4mO8CeKi8^tzZ>Ni{5Di`N
z?KGn4USNeZ+mp7 at AfR9Ko`!f)#LZjr<*wa7QLC=e#gEus5Mj<Gg*F)j{@-bTtP-ya
zdH3IKp*_?7tGbBf4N>f*LlO;$Er|j>7R^h3*C#29ggIYxBnfyVj0-D2?3I5Tr$QN!
zECGM>+H6Rlz8#bB8n(9D0LIR);<tW9J$MmDqaol!TEBeW7r!`qG&JCK<9J~d)CFG#
zKedoMp>W#L at 224@`~>Zzh4zaoKeiW#6HV>#!pkgag^}BuX1|Rapd7+UhkW(uEa-xo
z9)+}EAtR4h!6?$KuS#xq)F?9Id_HEZ at ZtR|yo9#1-hNpXFMP*EGJkbYHIPJ|q!z{q
zYIvD|BEtwNcD4liidZ3~kE_IO<EFnY0v?Xg!bylIy11hYZZ2?hoiqpfQ28Di$HzB+
zji2B%bJQ^M!t*(65Of0k=MH?Uc;Xn&(LRyW+<yDgtE2xf4qk0o46RwvOp#frsum94
z&t@#}-3J_R!$WVzLlV(-tb8|-t`!Gnx*kHhO*TcxPk3_^47c4u^XCn<zxU~hchtPW
zB-GoidtXLhHDkPp?_Euz;^eQ^l&$B1#oMpN{nB1TIo=XSPEIwYYH7S>XV<ijw>hw4
zCBUa7+`i5a-uh(|;(vs>{GsN2+jN-oc<uBbpzhue9o%x0;P344fLzM^VEc9PXW at 4?
zcS!1xNH*V129?MNZxRf7L`Th3YB at fs5iI>t*`{dSpws57=eD1i{>fW-C;kxX(Ndnb
zEydyUCjx}R$U$zKA-0bZg=c~FbnjS%lCn3wcT^D4OJaNDb$C>L<x|kXLyv#dA%59V
zla}z&$9_m$PR8p{A}jGmy_RmFxA>&ctdWnTd&Nl!q+=%~pnU at V6(0bS0a+jEKd;}P
z*Lve)T}$C6@*AWNuO{Dpd(e(}h=n8s6RyKl*!dg&A at l+m@DE)JZ72I?JR^-~-AJ3E
z!Ut at Y%gft`45}mwkl^eAbg2Q`!%thJ%j0OIKwFS|pg(xy>;L$L;x9ust^%Lq%klGT
z at OgahgI%HqIzto$2oN2EgiUaKErPn4`Dcdo=TUU&CEK1oeS7o#pvs-#suEeAKGJ?l
zwMzVq<7uAGd4(nOI^w8weD}4|_~4_K1U5Sq;_Cy)(I(gVM{N_)3Rt%Z7K8szgl-wD
zsMJA<Uj8UrUHAz9PkFhm8V0+PC>99 at 1Pezstp0e}i?7*!>YKUN)}o=y9rThu`rA*b
zX9#y`{9?npmPSXl93AQ5NXdi;tFJP!sOhjg6UMHDWazSbW0*U{L%KHq0zlC2o(tAM
z89o+X+aJL8gl!(={Ie&2EhLZ#b92X{RVVu*G#Zxqx<}t`Mo`vA?0}zbp386VSxNG)
zNrE8NF=OoCi>1P8&YP`@WkU>UQBTq<TJ%$vB7h_a^rh=q9xXxDg6$dGDnx>Ju#bue
zHfEn~CjT71imxFcsg)l;5+;%{d$VmN{#xK+!1q6ObybZ7O$gCYT{nQb?)2tP;D(Sf
zb-lQj<zFV68yl?DgY}}6X;H_ci3rIa>0FwY<ml8DBZTQLc#&-`irjf%Y<limFz=eU
zYw?OT_0=2u5pNFMa6!=6CgJC|o*;UP62W`$Si;oHD-!#F3v`F!84$Yx|8+puu@{K~
z3DMz^{TH0Z86rPw at oLZkzLOg7iUg@Xu-#O57USud??N}@c>r-!8XV{kucGI^Wdq%x
zPJ#rWv3x|6rPGwDzv6?o6L19H!~fxC at cMrBXA>5ExBS|>&6n{Z{?I~8rxmM6Epic=
z at lW^<(1ri{<DZXh{%+K?i_Hb3mMXHJ7xRQ=q<(%$oPQ5%)%0Im9p&fV$HGPXVRbBf
z3&b`h(mqiOL|4{SA75lM|MksgGJpj_EFzMu<Xvm(#~c%paIvmv$9*LHp3=#qASrHm
z&BlrND3z~*)NS)gej%@wq^3rcO(Fm>0bxEqwzxcV7O%$N;ZId=C=u?WyEa#J=9FvJ
z3X;mY!8MJV)rZZ|l#Uu{P2vY^HiKOuLiqhi_|HCHy at Ac;law`r(4|>5tvN*D{(InJ
zYeqa8fCkwxbQF2~9NwTxm;(m|NGE|7Z^S2c2WKBps~Ig(%LS-kXLlhew0JMI#oLe)
zmXh3xTs?U1vNeDUN%J<S3T1i?fH(BC96UICzkrC%J9tyGjM3LyZ8WE(svqFe_O!`#
z!DRZoU0#nF4;smzXWM0&wjuMZX1mziw&BeE1I at IO;j+}ubM1=4q2_0ruj5zkPmp$K
zHgED(rTUnyzU-7WdTgP$N^Q2<CRlisl*psh==5{Ie?4=+SoF(+)%Y%ojpI at 0&ZoTq
z4jqHaA!{BzJ)hN&s5#X(6>qeE!fEJeAxd;ptUL)>tR`YJ+jPLS=)5AsnooN2yq*j+
zTOlbI(6j5IM=o-owdOf|0{?W7*XelVj&%5khMb_vCjd<ymft0zYcD9k2TwyA+YZyK
z)YPWg&>#v_4x1T0i^OAN>T6tiJV8fN=9Bmrk>C7{Iu;+DxUr_8b5fzUQ}Rs#-QP)y
z5Oi;uZ9W%b-z4iki7wtGwCEcaA9ntnCygv5W${J#Cm6y)0HOOo&Ym<h0r>M*frmMq
zed64~b$j+*#9czdMczO3DgN2zy4XJF5PSqAa6GXY;Qgi2IffNDQ+!NirLUbtFLsI!
zNrXtaB5E;vi8Na$1HMVe>K!@(@2ghgo61-47T#F#C_Zy_>UXdi-0<H^A at uFwY#y-N
zG4MRuur at 8HOXF)Z7Y=-3(dO<U9Zi41-{oJ{Q~<=3pW6b10271pA1v}g*`3hDS3c<p
z0>qDbPOVNI`AOqsKy#i^^TB<_Uww=6`Lg{Azmn82dOF`>N?~aZQ8cMstYo<HL9gNq
zmth+C7ub!~Ky%X-fPiPmq3Pg*@74{6d>oa5;KVP|oDiX<S|Q9Laq10ZXI}pXTeq~|
zeu;lsJzJV{plOXRC7D;Y-vxrmn^d9T>5Uqo0~w<(;{98jx*Q%j>e36>@U5G}hmRh1
z0BlnIHTs|5AoSx=r>4#5im%`?+u`X~`W)JWKlqyIJi&fR_)x83t8;1b<>jkJDKs>b
zR2+zZ(V8!r;|Kh9X0+{FRET=u(Pa1p{4*&mM~Jn%Kg?e8KB#BF$GH3gUUz759I4~&
zFbd+%!yYQfMf+RA9 at R9dele#CI`2r*Z8~o%lQBZ4SDWAWIPn?eLB++$d5}tmyNd|F
zf!_I4==<S{ub;%9O}f1y>M8upCQ_+ltbrkL{pmi0 at 71JEoiFU9`_3aBlO;ZeFt)8z
zDUpLA%$rrMS}CWc+mv<U{5})$U|hevp9azcAq&j0!7(9k9|#PH3jiw>?B35sDV<`X
z)4v4oO#Iu#&CC1!=<)jVeDYuc%^wIbX5_%vej!8BXeffmSB)OE5>I7uy7_gnyKRf=
zFnb5DH|lMh;df9S#tUJV6vyug_w2jX{g`hWQe^k17u`e<2eNqD+;G6^j-LX&bfhyh
zPI+B-EL^y^IdTws;aLPfHWkP6*>%6#PD`|Q3jc6D)d#s`=^Z*-T1?6%HGNG-S5O#?
z^o^BTK4O)q#LL2(lUAeYwax0hvP?s0N#B0pDZ+qhfuZOe%uT_E?p)->Y<))MBlF{9
zyW~Vwx&c4`2~jNVHWQx#_1jRC4$!qbk6#;>#rua8?i>>R%7~gLJ;eB2x-egKx%5~_
z^kf8!CZ)y!kc at 2u<M;ka;TJq#T_x=Yr1w&J8|n74`zQZA{wMjPn(@<52Y>pB`NX|t
z!Z%!q>LwYpU*|Y=PZmR?#eO(OjW}2K)>xnd5@$%UN<ms}vc+<CARdI8Rqvuqx*#N1
zO-hTi{P#Q at Kc2!1R;$2EIiqV6$r-y)d#B5RSq=TaO&)!mE2J2RAgHS2yK|@5R+BvO
zA?f72XW)l!1D_@}TUWGbO0TUvJ`c(KyebjZ*?y-PBQ*T)63pHLNic1fs(SJRnqS1r
z`5xu2m%yx(`5#62Pye6r?=;P!qha*_i2b~xEs&05r_I`h4?kCB{GT#^u?i~KG|4<S
zI!yvW+C*culqb_s(4Xyha-}O$%m%fAUS7+K{&;-}9#MkV!P~GDzjuGm7hjNivjl3T
z=g2RW8`}#;J;=x#bSdmnZ{;_-+3y>O!85Ax at 9?D%gT3JdPJ(9s1+2!^l-B95Pych7
zy|0(=jp1TB3ztP=2)hQ`Ob>tI2vxQjK&`VzSds+aEMTdrU@)@PLe|ts`JW{D#QtDV
zZ<=~;@Y){>%Z|^$|KKBhLB|a%#{WKhE at z+fI=B=KKlk{D7xAC??6-?oPW-s)Ud+_`
z5szw7Xw&!sy at oFf3JNZ(D61fm$hBe4oV<MSN=O_tY|OBuJCD8<R8<idx1?eA<VW_E
zmgJW`(b$RbZYFu+LUu<7Tg4celpF)hq4ey3`XnE%It0A6(goZ)v}W_>1>?t0oik_Z
zsQ=Dw9@>bbFt>2w`Foxpn&9-OpThPP_`NQHPmIRzgX%-{tm8cS6t-8qfa!j>-6mWX
z29q3yofK at 5WRIkyzb|RaOIorOi9C(3zxVEbJQYenHDz}H^0Kn>{&N at J#RvGAwlTY&
zfBvN_JPMDj>G8?zxu2BQM3 at kg`qnJd*RqqKL_vPBA($hn45Bw_P-|jh?xv*ws(OCI
z0E`LUg$tp9wP_qL4CYZm?~VU8udOLT2!1$y`mbHk?WIpoOXmXeKN9+G?3^jb??ZeC
zVkKW-3*2wM++rV~oIfw03?r>nr7KHPLL7^&Tiu?Zmak6;6NoO*{jsTOlO|oQ>DPZi
z#;&e|Qq$6tCeNBOFDtKG?xeD+y2Ado18YG9?Hq*svvUSNQ&`lYgWs*dFk?h?Y<S4|
zNOMM)D6^MOL~~Hbj<3Gbv|7^9Zd^*wUTN6}49d<6=|`x)zXg{<gj5?}<}2mBcf|J*
zwQe1|@;wD^z{opSdn_-sHY5)pNF3}n{1?6yW&j8`Jh@&z=cFe+`+`5ha*>~$?%Ou#
zQhi0XzFcii-3_DHkHi1Kug$Lw8TYkNkB^R8{|3H{e}+YQ>sLF at O!=A7I@)rV5c_<%
z^?g2E at 78vQd^l+j;3vW#!ZXCyr8RqDbje<rHB!qFN2P!9f4q#}d--MP_A+qznC%CA
z4AM{(`H7n{XU>!<vt~`fXYnD(hj8+nWXZH1<#Gtk5Vj85kVQ8FF{-}A?Nb<CFO{$l
zpGiu14S)Pv61~eclw>B+kQ$m(@?_7o+qbW+d^V@@)oMt9YP<`7)pwV)1}M<}iP%Nh
z%6O%<I3rEsg9mg3IdlNM+k-Zs_EpQ#CfS;5PUYVX3ViwbPPu`PhlITRd`w=j?Q;3C
zncxL!v9X(muj%>O9DD;G>)d%m9XuP{BYx^^wYn&@B4P3 at wHh7G%g1lyv!h?{@l at lA
zg6^a?H;g?{_H>gY&egHA?o9NQCw;5f=HtuQp=W)|u}=<dBK0<cruFH|cc<4F{yuvS
zaC2V#uBi8^`9zO}w86zEdiDNf3CZ`~gQltVBj;;T?bO+`r%s+V3&l7BS+APPN~v3V
zSJ(7{F3-?d_BHJ;+HLatLljSKK-yo*R%IHb+d%kzvnEfSjUR_X(xw5rqxk1ve))N-
z6?_ceV9yR9_7jcb*|UuI6!}^BiaraIDW~`xen)ziY7x at FOPbFjwiv?h4)SFCZs{9U
zx=EFVH^RtBICuH>?aMRp1{gk|tg^C9sDE$IzQcGPzX+c$TTx2wHJi|w!R+}5Ml(kG
zOlXEn>&xj2<gTDgk*^|htSsaWdOBl>jt($KMVSXw5Es_nc;u1v^oiL?NtPWj=84Fd
z&OP8-SXglpsjEDGhIRM1l=Rp#uBgz^F(H01WZ`Rt!J(7~4QX>d<Kc5 at Zx->PGs?b8
zotJX<2^qn{B2q}a=u<bS4~!rK)t}_|KO_LuPZ>6B3ff|;|MSL;Kc%|lRnAL{A%3`o
z>nnD&PvW>7?gLI<tFVIeR{cb3mL=SKs`u<uTE64x-L-yV3OjF4y1Ulk<E5h8DJ?!U
zf=22LNzyB7`R%muZQ*@){_~VE2W^r3=R#tNb!ziPKJ(Je)UfRI$g~7+UQdrGO5T=(
zpS5f>8WDc>v%^gT)6$~4_M0 at KO4_3)=MyA`Nbk{$q<xv>bAR at kqz^&?`#g~GILUrl
z*e>l|m&R}s$y4buA8P3gG@>XeTB7lD<}X^X<~!SG{MUc<O|48%#(&_mv;Lhi`=6_^
zouXs@{t>u)_cdC-KBc3!z1+Dogm&pFpIKv*&aAP}bBgq at BEA>)MI=D}+<b&<%`=kr
z9 at Dt^lXT92a>B!IAzr={o5Xc`BQCpxPO at 22C!SWG6W1tbF|ZRRrL8~8RxNJ>U0h0g
zJ=@&_8no`&(6C|bJ9z!Uu^R|KgC{4sYEWO>PK|5QWY~-c|2d_%|E*j8y{E`_FrLs)
zV7B!Uvu_pJ$e$O_OSu~u)JEc$<cCLl at uG}7Fpzw#y at MA6dX!Iomd|fK1Qwuos&Z(f
z7(kwrayQ<hGdqpKB#kqo#OH6`;pgLFumI17UAAHPSnV~j7v2Tct6tdn!uv0L^bw6`
zQ%L)>2_09?o2?dcjKw7Far_rT*jZ%qHeTY at aH~sjNJwy(#Vd;=BO at Y9Rzg#Gb#3h-
z+z5>y)%48~Hv0O+#`yZ|#ZLtWrCNgme}Y)Au@%!Zy7Kuc$&)gxne4Rf8>DR)=>|&W
z%BDzqt+=wbi$qZajH+2vUcPY+J^<Wz-}LAfW-x?x>v8g=of9)L%I!9L*8CT&x#=Y(
z0|%9qq~}^`KT_IyLc2|VG6k)2Xk at 5(o+*NBgHO+3QhxJ#+fdj=&==rg;`!!71byQR
z6h8+o=RXo}vG*p9Ma~gymxs6072|9X6g~BW|7gJAAtSFZT?T%)>#D0uE6U2tpQtD=
z?eVzD5Ek$>%s{8jUi!(Cj(v93LmT=^l-{eTXz`+=B0+F at VYSTPVObs;2P`_ea>Y31
zHZ=V87hZo`JdY1UHZhMOc#|v-jAHgd at d@5-%07!J_P5{w`_7$xr`%*plt1P6p!&m!
zk)>vnc;4o|v8?<BQ)Drx=tuBic0!+#F3)Do*MUFo3U}~Vco}8lOGw0%a1j*aH(Tjd
zl=vn+a9dKnZO{t}-4*2f4)WSsA{M=b(>MiEzWV`^fBA9!k5>rUTzJ3v5E_Ov;fQS`
z=cEs|CYRp(%-8`BsJ=pi at GkO<?Fh;w&t%$;w800uoQG-<_`_F7zVYW3sHV!HsC+(s
zjIM!3%LNVTUpKabMBdmy&C{$LFcqOqwW5e|GiHoynlYp4(xda{J$mUP#`ETheV$yn
z;K?T!EPQg~#7TJc#EDm6?WBo>W(BdCqlBhA9pyOLLL at KaQxt=DN{*GWjs2@^k5f`)
zH2%0XEzNq|nvybQ at 8HqNDI+F!?J}<Er!!4WUAj&jotQGF_~U}`<m9N)m6;Y&c6k~M
zS(yg%D>K^w8wZO?sbdP`6MTKG$-QRfWM}8h>XmHu)g>gyW~Q0N8sr^jFb8 at Y0`f8f
z0~KGL&Ge_2#&#_o+KqZ|$`8%hr@&MDKlot(mfN=%7n;mwQ=xc%CBC;3pG7;bg@!bR
zhHws_KgR6H;2dp&X{X4+g{mMF3~b5?zAU9Ymp0sni3h7|`VUAVqx(W^n_!GEb`=@}
z{L{Pm`G3C#f5hjfrcLWJ+TS(8Sp54}S-!rc&uMHO#bPUq0kj1bKNKJP3x7gf-!=$6
zuh{l-{&|AuCHaGL;Gadg+-%Bilc}cKZ2D{1Fx)U~I59`Jk+GdS$Bu-*vD?1tnwsi;
zjE;%K<PowhTLQtt4yASjgXy=eTgjha&*H1QUcy(2X>LLF^oQ8oEZah+mqx-vsu)6^
zjgjq5IoLRr6l|?-BV<W1t&dnC4QC6Af`cvDu`!n~cTP|1-Pk?9s`|j9%Kk-J*(pU&
z7QerXKM);l^7iQzmFZiG*AGk&2uM#G at JMp9M?$Q-yZ^IV?P90)-Pye|PGuM=#&s6Q
z*?25iI0BozQPTt;7ep9?f-N~Qv6n8zrKR_JB)@xg)tifAqWcw7E{aQv-><CV?|6GV
z7=Z={BNlCfkB_^1z&fo)lb0v+GKBD=W3 at 4<xMc;Hw2TQvlgV(E7n(~OODmbbbLafx
zwDeb3mzJ(B6<)8ktr(EzAMh50zZDRGEp_|r>h??Z1feVD5V}?_iz_9RrGr_`Y^ov?
zlxxr(*Y^3gFLWgP51p=XR+5N%EYGUT?;e}@XxWZqNb8cA*te*pM at 7$GJuAjn_KC|b
zD6E-LROqCY=02v#%-o)CQ0-72+O5 at klYujK-<os+)O(sY1a@=}2}#Qc3QA3_Yf)8?
zbfd9b=CBrhI&5f&iYGCPuE=F6H{p%mUXulmbMZ`OZ==ovmy1hFi;K)AlesKzLh*t=
zm6d%K6i<k|c##h#8cT at Z7oPxYQ<H0J@!8ti<kSKD2(DEdI(gpWf7Un9vw2;6ozv3i
z0W8z?R(3BrOiVc^PwluHVTkQdO=4odLaJo)>x0pwM~*tMW9YD}k*17poub_M at 0kwu
zCaS~gnvLuF_U+fNH&L7+EQ at Q^rXO9cN-DXw20&sF5iC{i??&XIQ94y>@2fYrA7icc
zcICfy>M+{ao_)PpAJMo#+Cke$JBd=R(2^Ilc5C|IWXbYU<l`Udo=KN7b5wQJi(R^O
zN$=d%novygWOJ{Q@{-Vqf{aLOiYYxkE%nJKjYj^aE-ET}aAJZ+tzF^O!Ohz at EZoOy
zj!vHt<>KP8sH0ldvoh5f(S{!%Sxh<=BOUnnu$dUy6Obm~XngX?)U@<;Q;Ib*qaY%b
zFw at H%6Wyse!P>QRI$`w1s_G~+f2gA|BDJz7$>A1xxVS_m=yh|ve8R(geL8gTTA@{I
z5)ubzM at 7+ofNi87f=PuJ=kQ9c?1L#5onxv<+0lkt!ecU;8`o4aud1 at LYF<fNTHK{E
zV~=;s%FNCn?2SvdlrJwQ8BBrM%&V-){Re<w|Na5~X#;J?pXu4t#YMj{#KR*drWW?q
zR#tb8jqAKqwhPz^6{3ecFGNh-*O+2yyhwkE9<~*CUSK-h$WJ7GAmu}maz4~}5qMDH
zoiGvK!oOcs at z`_)pU1Bd*ga{iA<qeCi0-4=8btZ%N2AV~;<&BUs7sa)U^Oa%*9SGn
zbnRL&BPaV3Kx|S at 0bGho&NUh at UFu}D<`y>zJGz91bjzEI=R=`dqw(mLQP&S2hr*E=
z at d-8fb2PEm8W1S0*{8ZrBJCU5TBVjt>{}fNO&gX%2A|YDf8O4axe0>k>h9|kTo at H~
z at uFoy!Hn!|ApozKotL*Txd-_74hi+pySXJMRI%1lle;N#d@>tT{H5Am=`?do7DeI)
z{M94MY>w(tObhqo0}UfaG#q&I#0g<lLc;!p1oqdeni~9BP0g!deO0z!s>4v}Miu8H
zKNTBMEVq#;Htqc}W5<qpKb2TcR6=~ppyZU4<Uxt?adASk&P5|p*0|_i4C>f1F>y~~
zqI<_6xv%(BjDNZgLD}nTlswcMEhD at VzOSEnlW@$R>Q6cCzv0!InhkP46WMv`4mmH$
zY%P+Xr9j{Ek{;$L`s9cP@??F>gVgq3k;lGZDN|K?LeiFA(IN at 6P;v31Q|unWqInUC
z>*ybRfFDxph~Dr8i{~WRI&2W_5D&9^IOsgLj!mh^M_mz9Pl5NZUe$Ybne^eJw6vxs
z@$kM?_-?F+c2!d1RB&CjPmwQ4WG9K~36Ea%&}7GP-YINckQ}-35 at _5y`uGMHbc(ug
z!7`!yjGP>PHO$RUDk}>p?WWbcxh5o3LkbzSnb|PfJNR6p19o>KF;9!UmqaQL>1C)!
zDQux2+^aCXraHLF6saR&W$a+Q4Sm><84|n}?f48x?d0yI56CV$b}TN*lG!*x;+yzi
zM`ho%B(p`Q@{%VMY1Y?91`{e{-j|(o31SnSoo_7hJ)W0*59Z*v)!L4E#PuK<zfE1Q
zFC^Pm)TUUo<an`~=u0K%hCpJ)Yp-3x*Zvhfa0TqOt&n2RSla(8J at FWNf~- at 5;gtHD
zQ>>s%PL=H9fwDn|)KUKa>D~SP%%<X=p`j&F<3`{~HATx45;cz&Cxu7n)O8t9QL%Ex
z0O3%gG2RdspV04izxV``*{5fMA9}Q-P2_dY_3UOso<)hnljG6_-}s{O!%B+B-~*EV
zco80Ji7fQZp|9RT&k^NK@~A-utl<r>UBu at u9Q4r}{GuCT>N^R2{(@I+D{kF_7ZY7{
z3!-&I&NN~_IjRm^ptQ=0y(#x`__0*^q$HDyz<I<Z)t3qVQ1<DVr=ILPcI1dR_KzGn
z!VonON_X_fuZ0IhcZx17>J;5SD_E>IrzU&pvwPsL`qtF+T|c>hkY{YaH_UjOduU?c
znxw>}q at 9%{dLyn6k!6SIE#&|}JzGo9>7?73tQK#nZTf;Tm_}<8dTda?5%}Zt_~Q{(
zqdNu$_5~DPDWEXXyQt5L_<F>xTM^*Bp{D3jh)*b3lzs*}uHmPgu|C$Loa)U$+6p6j
zqvt85T7b&S+|CpaY9p9iROkz at F1Us73?&{FUNCCnw0O7qx1hr?Z(rZgg86+ivl4~$
z?{Lviojp7jR*v%j4&MAZuA|2Sb5x@=$3*^t3Vs9`VwZB9ZJ2cbFEOqKXuejBCOcq_
z_CNR}G?D1sw*^KL<<$%p;DC*_>-Zu3R00chz`O{omf;0CU}=P24&Ovz!46m-g0}-r
zC$JC)%s^ma?AcHW#@@vgh;_nrE{J(1HEqt at i(~03y;;oZNHM+gnvi%b at +#Rk`3vZP
z?|d<NUkQE|s_wk~(a^g61NLmYF>cnhiA}R+AsAAN- at SJqzh66aJAaF$7r|i${F^mp
z{kG<N+t#k%ylu_eZIa&PIRdRpysgXy at _U7PTJc7DlR%VWWIqP!s9$e>Z}a`{$uC|!
zcI?>o>(@X3(02X0?L&Fa7#Hx<RbJ9exHNaDWK~3>-OvCd#*Y1BZ&riJ1oWh at dpGRd
z7gMKPkBggxc&FS{&!V8Wv84u+UBr`Q**<KfgPyGDQU(G!+a@(Q`iJz;fV2RAX&eX$
zfG@}x5FfukUKs}*<0vSTR&7f=IS)f;;^N{HrJ*w=J|T)^gsIZ7nr5{M&D(-Hy0fvf
zW5=Ku*`NwmI;bjnb{T6&Bi&ir6_RLMdZ&3ZtA+SN3?EKf^fo8c>{o6VzKaOw2Lkj?
zz8V)FmpCXTIV at -Ne#C#$kr!eCp*h`?7!xU}d`QQzXxJ)o(zko(q5S+eAO{jmKAi|N
zeXAKWa!$hP7s`v0W;;S_sw0j%Dh^+>+MH^(_@?@*(R9LLSV_;`MI=`dg%Kr&aF(kK
z8nivw&);|2b>G8NelGak=VKwmL!&Oq?^8#HcK?8Yi={<HeKwH%Wy8E4B?7OR(XGfj
zJ~yYx+R_iL^6|C_Z%ay^?3|Fx`M7g^kdpZSOMS2rJwbHD@&jq~p;>~F<pxwM=!w}0
zp85|yxY*Q`le<{OFVK3JVpriHxV$R1Au&<TGf_2(b?iPPopdLVEJG?G0|I%L&&{9L
zWX|#PL5miVQ7~xLl<d5P0e;<9Icfs>K0ek_6R<i7Jy;L$&eJ7M1;N!e)xgsQt*U|L
zbNcsxSS3)ohsm&m<TxGa>@>-7$Pi3l%{y`f<!p<_OBz at AI61xPl1}oQY?9y1$@-;t
zmWSRaA+Z{go7X|l)PMk*-AFdL5z*0yXXn$hlf!lL`kfTZoeLK(%$<8-$r2U+LN9!)
z@$bJIB^y}}Cx|}Wl{u<x at Med;G+y!x%IH`#r?5Lw;i}Sr5CJU&l%F at JCD*GY&$+Rx
zn$4w<_ at zUY*ni0q_;n5+ws0YgU9bQ@?Zg|aeLPrA9E at 5XYJ^{vr=DnR9PjiXPx6*+
zJjZ16XLI6;RP2n17)T5!ollQJN>wup_N8isH;AmGjm0kM`SS{O9xnS3`f#C86V(l%
zYhbRQ2i1V>>=fvmng<;>uZO7+Z4d&qN*#kbk at g(=P!d?858vET`{w0$SMkl;dISV4
z%*&g=Ii5*mzE7WFqq|)GBzlu{>>}jl&mU*bNg#EbEo#-oZlt!!1zCp+iB8xYHgE7Y
zJVMH_WZQ2<;R!EDbcM6Te-oT)I=xfC*ZrSVcBp_9TBCCO{Qh_K9V at s3{Bxo4p(P&U
zXZQag$JPD6=D5w9pa)HI6&(v5h%VTE9Al>QHABI?L*bd=sB44{7ezs-Ero7W3E4?4
zCFcCBD{^s}kXZHFOt;B7wBnozze`1?qfIx`X1Em5&25#;_Hj521eGFpcVEB2+&EIo
zCa0wpPS43s$Q`+NUVgEV5adbA*ysUFqv?JDOzAz67v>c{;_xRvg4hCk at 1Upe9e7gq
zgU5$g at Sh)EAr|p8jJ2(RM*Ngx&XLuSZX}w9N*Sh7_xiHylr8kO=@^h>8T{p_f8Xp8
z6{03dqB_J}bSJ^ZmlnvrVn|CRyec6gGczIqM+YS&1hKYAetC)5cOa?mV`P7q$I?_e
zZ;?`LwYQl at FFLzK-)+)uJ^tALv2|r5MwG34jQIE3(uRi8wHKoFX0sk#B6Vg`RU|H4
zSg*^a1ADG+#DWDQwYij&T<ze0pnnHnQl<Ms8Q$5!hy2f{#ovA>vS&Kw7c@|ZI*oEZ
z4$sZxorb%3>G&-v_js>3FE1lEG}O;GGwPL$j6Qu{G)4$|Kh|g6^9l=#yBWfLeY=~V
z$;?>4DZ6{V(7Z0NqkBh>U_W<vmFU$uwtko;38i||P%yj0xK6<xJ+!*eK=+PnK^ND#
zc38be<KXu#qCX#H-1BZVLqZ3>w`Rxd_4#brO32A2F?xZA)?^#ZVnq-1G#&gTI<&qH
zZB<{Zokl=Y+e#ZyE{i>6EF7EIs^*r)#5^%psl8baBc!p~JDPFo&FWNU`I$ghsIhun
zO<!@TjXo{6Yzb*|X#qYk#O#-|WC at 93z+brb4}d`GbLxIRJZ}7(RN<a(9es(jH-e57
z>DFM-kzvTq#lT8+f93;2_<5xL$d>s`M`h}$%^hVNF+BJ<!6z&xdU>aqFy92|vo0;U
z(+|5}9@`id*L5BA6UN7M&dsPuB)=*$a^s^mKVs;S(QoCRzI~Ss$SRC{g!Ro>;zwGk
z=G0r1H5iUJG-EF&cg;w?RM`jb>O)2^{8+cNv~DmBKenVB`L#qEKlvz8I;BvtJ~n>p
z<k8e&cs}Tbq`1iX!RzRldPx-!>|T<b5D}09i-eyHC7FF!_3g{XR~V014N?aqNKNdS
zkrN-)z;mtZd@#C!5iI=bi+f(X2tNOyjj$J2poxxg`LYs6yy=?D6fn$2Bk&5CXj=-C
z at J7*NIo`QyIrMeR+r3BdeH45z-xk*~w>&(_MdhOEJ!<d#{BArR<Dj#!z|##8`_Gxo
z2(p}<?@8!+NjDC7gGD|=QEl`ly-4UmQVR80A74gzxTr24MH26Kdd<NvQnDzZ7J6s+
z at H$4{&$kiKf-PbNl#>SV%U*$<rM*;*u$|2l(HZtsI&~vD-tE)kPM&j?GTi^J5wauj
ze+||OYtoo8CyJgd%+Jfq9o&$dGGYq9^M_T-Z;S4p*<E_h%FXfe-X7wi%}7lT36|sR
zD)hIi1F11|tiE=<Ku{+2^(~P%)r#`)859wf->p*w;*I9~+~{!OiD&4Wyl0->U0p4B
z6lUk=XPiyT$j`TC!Kf)yaoyCZH(~44DYQ;>wec#mc*--JW;&#zehu8EwRSdMI4aB}
z at O%l*y}{u0F6pJ}@meF=z`X)Fo``x5UAt$$B-W|7dz!fJ4F4^@0VY#?+)G?4o+9`s
zg-<!51)sp{R9+M=1~Yhfi9TK`<FDdgY=ys6#$Uy~<b>aV$BDJ-(b}Qh6z&GPmBYmz
zC*LiVWWeKu6jg&ZoSWjp5$H?u8YOxUbh<2qjmcn^)&kKx519;wk_ at U^S%xxIx-7$T
z@{I!@m(e>C8GIds7b-Hy_^Uu*yejz1Wc*d!El%`o!JjJOb2GT_IgJzkIEEk2&A7`+
z*fM?*#V3548J~}FkNwx5;b%~M2mg<8>;5a3<P|PxCX>F5qPs{uGUc;===w at m^%w##
zB5)J?TkVl)zlHBAdTRAthNjhXjwdqgxA9$yZ#yDfU~-=o4%?dv$5FB^9T8oHnGF67
zgBQtiG|BjTxHBBI;NvD4e-HODgDd#sgbV6%vYt5YP_&-=6h6)2($_gXJ5F>}6;PcK
z3?sqV$#D_|hfJTVn^@nUhHUapCk7`f;aAA;ECw%D?#UMKsjUS5I2lC32|QZvn*zBn
zALqVgEtEL?<E}&pCNVlOE%yU5+v?HAKgz_rl5L4&m<`GJ1nw!@)>#Jc(V9Lt8oD{r
zk8eZ&ZJ9o`p}Uf8*{d0!5`H;>Gx`Kx#NaZ093=B|POM-ys_+ve^K(u($>0)x7;Zv8
zNPTFZ#rjG*bE}lVrxW}kXwRo$vE<MeO65N2O?0hhb|syE)CGSn&83lG{++s7YbKB_
z_<~l&-FEovcw%qV$8VxPWFL=n=ykgKCn9$_lY1XOOx9~p)p%L2wH)7qPvXvWS+7@^
zZ<afJcD(GfjSQ~fFO%_CabGaG75p;Uc25fXSpUQ;{f6Xz;|DQ#1%r2^`0AyEPlBg4
zlc!EFe&68dGJYe-bL-U=q(8>n2SHaYQY}^ZlG|CuU1xkr?bP9AsD|lx)nQTAZ$(Rd
zpwGx{(KxV&#s~W^xI6lu#fJ(BZm;{VM$)f3UD7XXa_E<xZN}{)-|Z(c)JVQN#_Xi0
z(kJ8@$<F^}cIb?sNZRPh+Sq_*Df&{&F;u+A^djRE_<rW=Cspwb-qXp>>j|AiW+QH5
zKNzj}k$9cJdr9=UbM}KyeiY8|dC8j;Ka%Lne$-3mXPIp0t4I<-`!&(g-xB^R?ks~V
z_;V<}gCC99 at 4wXyKcC_|_<4*w_g}RXH&hMG#*-L+HyVeOHSOv?1m0VQd*ZVW{C*Dn
z9PV8wd<%)Sy=6F$Pq#xqliTWqKgNNd$%!mBx5dw(J=G3=hKw(b^ODa!?XU at ptfOi&
z7BidRRx+FD<CGgnG4wZP6VCY5Ci+Ny23;I}&B-<-F#Ht7r}-PI1Z_Cl&|oLfDu-Q{
zsW?Y2LHjaA>0|ze)W@>VRkh%&dl4DNlW`&`hs$|{_|@)~XH<G(FXOB11p11jjiquM
ztDu1So76@=UM9D(%08Fbh1AAVM1P%SnQt)}tPDQden}X at WUi)TC)&_oqW=`J$Ijv(
zq+P3Ir&JP(PvXN6*-nQr8LFM=KhAu!Ug`(dmM8RY)7BE!A0$hodfQv=$tbkY&@_5V
zZK^zSWjK3IJydG~qwGt=AW7j-mgy#yNwvR)N2y;1lYUXXA=7as{XSa8Kf!d6%HV;d
zAGfLdQMi2}L=kw6giq*?mizG_lU2qieX>p5#NZ(euHY|~@mF!ru|84omoa=21E(l4
zutwnt7tv>k{!?YYJjimSKwLzhA at CX*9>U;<@Br}$YvYvo3+vxBMrRAIWp}+&cy~@k
z;C+=`M8 at 9(e#{3H{3aQH5BDY;4`qCk14;O2MJvmJWPAdb at XrdX7+l6DeRhQTYZ@Id
zJXB&i^dbH!iW)T6F5f}R;z(cVd*L#dNWT|0!$8OL{p9D>9%<Y<sXg|bzw#XMjJ@`c
zv}$fNw~xCj^`*+JE+V<rCeWj at 9L{1PJf*j+OILLvylx`VhRW7Y=}%fi&{0kFrxvE*
zlYXY_*y(7uk-;VWOpen$rJg|gpbO(otr`il?DE=tRU?7-r*JM0=5gwF at WqGVPk~EL
z`1J}tHyVwEcm<!09TNU%*vG~W37^?78piCmOUqsXV(&CQZL`xzB<&f<#Jx06N%pIn
z#_UnX$35BJ0y at Thz;cfMN^Yq_a-8eR=y!GK(^aC+J;Ue^XpK)eOn3l4k;1tJ%;p$A
zy~jd4C;Q(WhM&Rk{Yj4MN%0AM7sIbr_B at CzpCZ<e9kD&LWj};!DDm;frq~E{pzKez
zxTh%RQ^F5SHW?rHV*4j3Je}!cprh7N at +lSbCk1~g!w*NRvIHmkY}}RetaqI9ODTph
zUDzLGvemTojXIFvZ-kebZ2engmf&*cU#pCBDlMb`s30<U{sVb`DWwm&vQ77Ns*7np
zk;3t;zUb*x7t{E?kinVXXp)Jo9~AvyvZsnZC$%daRlQH)0vYcJJYR{K1b>`NU*(Zk
z-%?wps_rXww at 04+6TG|~{QM#ZzVM04=D^RlU&JdN`0qRL0BJy$ze|R;(63kbaNw8N
zZ#dCk?!fQfqlNxawVwmOyZw%YPxZrU$Az+fd|ULRY9R1!vVLYb>1VQoe&JYW`UVI6
zLi=&NyB++ZR`@0dev$oayw`z$-+^B|#2J6L1Hah*ofCeGyalc3XFBi;?B^wXChrX9
z+rG^HKa%TBDlf%9D$6^9$*a@{H1_Rhu}`T_%UEqo;Xg8XkyEYB>_^zo>?f+F)|Tz(
zCuToR`066LHqRpw`5P%(JD%wx*Y!O4?f?gJem0%iP!t<8L{$u3&ETOCj<OnrJ~xlq
zo>bT8aXQx5w5@*}&k@`6beacXwpS$E-eqQcw4K?^_9Xlgmlpg9%=U_8+rtj}7g%3N
z_}y<h&olTr at D<x*x+U>T)-CCa<t at 4;d8w>h0+({VC8VyLFX@(_#dIsxsH8$b4XSq;
zyxxup{%s|1M43|G at v~ST#kQ*L%yOQoq7^O8t;zV;Kyo at d{xvXol7k<!+}DR0ytgu^
zKyq;@R*Yo)B(>z?a$g@|eeH}t&XK$4k+E9AAIJKuw;U_%Oh0Y$^SS*_^lc9Oe1gBy
zf&ab(zl3|)fj^V=S8o}vcA~%Bf#03m;Z#fbIq<u4oP<yHBlQ>657G157X8Tmb(p~q
zF!)$P|6htvvYm3G9|S`fd=R0(i{g_!_j`&DL)+l1AA+CvAik6STjRIrzcu|r&v1%I
zeGP`8QrXv}XNa#+T;^;0n6Hf`GXL9R6D at 5JnRf~2TV$5op!Mq!Ifu$-wxZ;dWh_6W
z_$L|MIX{$S$YC~=){@`JGJMBuNWy=I$goS+shP<<p261>{GVl={>Av2&<0=q5d6Fc
z at tyc-jo-pgYx-2D<7J&DJ9H{NLv=bq*6B&6(|3qYceUuKr46E^pJkn%Y-vNzizZMR
zgkNA5(S>tf)JSUHykTkrt(9^RG7|O_&#^H-LyqM?u~^RVg?a+7mEd%(mqK6DmC5$&
z1N0 at CpJ9Da>%>p7OrOT=o2XotS$d|6qm50(r>M+B?N`K3szR-a?@E12{V%tLwb2@`
z(j?60oZt-#zDDFeZ5Qq-*8^?gD(>xe;d*Ddy3qkw%kvto;VO;S97k=aGBZAdB>wH1
z_TZWX{0V~#Bo{BC_QeMwBcmj~PvL3;uaMzvl+bt{pm3h#f#W4OlrXqzzD!5GONK9C
zaQzMnC#|bqWPAqAVf@>rb$o=r>J)(!eC}1ok(Yg_oSU-q9vH98Gu8hNY!|Lc$ZCP#
zXS$Q%Vumw*3*6J_fD1WJaMdF%aDx+EpUNq`itm$l&3qVlR?;e7E%Qp`6OYQ at U6wWb
zg!~=Vt(EB{jIU~=+jtpX-bT0UBshAjjc!lL at H<YrrSm+VOdq+jtzP5Wfol at Dubtox
z4!9`WQd_tu_i?*$)kENV?tBZJ^>wantL?+R=oWR^22L{Fg}0|y)p_~5YY*zxr90C{
zIA76PuP*sAyp3Kp`z1JfueDw^*JSve);6o&$80kk4si~vRd`l^B!73Jjoogs|A>w;
zz30ik*Q-6aCc!S%k;m*m^4*vo^CT%2NO5r~f%6VH=?}X!*5nZQ6HfT5_a*#01U}CR
zu75^?H`8{R-t%NB*w|#h+Xn7s at 2$wj8<@@`BwKFXAAD!|yFVW64{-+5V+5bsx<ACn
zWq6zZ5dN0nZS7o)k>NL6_lMxmbRGd`9_)`c-?j9Ilz&mZ7t8+fUVCujAFn&X8ys*^
zsX5xfJ-KJwg{x at R(+*tE{V4HD#^85YyU|q+?Na&dm(*IO+h{s(&|0_lOD=UxC(-C%
zXWbI`P#JD>)~)@LMwH;N*;%&)o-4zDa?<T)`wh{B at l+w}Xd~ASoapFrCwPMcF4E}T
z4%|~7H`~Hha*S#V*V71~z?p4U$T4JpyKpa=PwK0SnC{|XdmG)+c(8)W9M8Y%q$3(X
zUY6m<opeFt at -${k at o3!xwscvwk?Et4q$ilv9$b?E<DB3P4!8)T+l6~VeY<cKJku^*
z?+j=9kl<=M>b3*-g4vF^<<9uDOlxI(1U`}J&mzU(HgWa?rY8#@)5`YlxqL3et at eAZ
z;;dwo78V<w<LqV$j$B*&wFa2JEim>$zt#+uziS(3+vZ9U-27H>6>n{K{EsMTofoM1
z)ON?S2)g{l39jN<{I!3^;&@A3j<Anqc$*0PTZWh3uK!2S8`7QND!#g1ABd30V+F3_
zYudGe2$<dquHvPdV<_R5<)~^}zpMBTO<WszaXWBAS6%WDc#ns`OCJI+dk{`-QC<EJ
zcttC?E3TGuR5g2-ss4w~^tXcdY6TZ?HOpO1>fREZm*#EN1YW`5ePnnJgY&qW<*p`m
zr36Pq6gn(-HL0s)_y);0NV_a|RaeXHu2tx>+|{J6k>SpH5#@83B-gWC8~E^c;I!R_
zhrmZX1U~X1 at KF!K8K0vc0w2=~PUSku_#7+i!RpY%c?NHk;oTIyu{_MAenf%`I}|!B
z4>PI9$?)xp{#hPoQa8zPA4fl4WAO1Zyi{qI<zXiE1i2r*6#6U&GpQ%aaOv!!zJyN}
zi`De)hnnx8#9{~hxpv^R-AxaHZ+-}T%R}JLKL}@hZhZ*+g;sDX7mLyAZL(dRb?9Lt
zgTE;2Ki{GM4_Ld~WxYM&(EsNQzC(s at bm)I5gYT5}mh8~~W(I#rhBqngviNLL?~>d7
z#^GN>8T{o|bfoxOpu}agzE$n)rNFuI-0C)QWA}scL71V`whzV`-r5?@=%+hs_W$IZ
zLBc0+^{v)%hP`teqtwD4uJjFp174xPx$)o$T}j->1pc2?+j8GXBgqy at CxyUkSp3zu
z#3}KVqxP2L6igL9L`zBkkxG_*-h`{sOZIJ)Bf36Q`JRr4VDQ$8DM_hDm<pcw=9BQ0
zs&F{I05g^l`rE`nzLv<NLYr87+r+MXEgd60R00Q+wJL6On|QG2LBAJf%Hv!+ at q><Y
z55UtM_2qxu at z!uPcE)FV`cbM=;olZL*}o+47^Ww01y6lds=MGXCp?mus(Uj$DJ~o$
z?c8Ph443sOjdR_F5Bc}$^CXKoA&-c$a&9n>eD{s?on6W`;uDyz2)vc9q`u%(Y)mgu
z#&opaE{)Bd7~D&NbK|9X3;O|9JALEG0m7x4ii;=kdjziH1Ld5aKA-NW1^<(uztg(*
zQs1*n>u(7E=s2^<2+1bt%sGJ*&7(J&O-9Ik%u;Mp=qlApfSq)BiqvWAm=1jz-Cjg)
zmaCDx?zF6{G+9>z$#>V}@2*I?Dr#3(ngpl3q(I46h<|T&f_o`&;@{6Y<?P=$@|$q(
z$yRU`-^F21bu2gSA=e=G_TYqzU!2-YchoHZ$!lxc)ClT(+$yGXX&#X3HeS-LaDnPp
zhF2(X!uM50x0+0;K0tL&y8V>c=PjmNe<gQT4Q9D>EcZj3+_{eUW>+dZ^+}f7aWIy^
zj}rK5CcCGEC)`9&QJP#{o3Z4r2geMdUdaI;9D8UE=nQAMVY;JU`46T#;S;zf${F8|
zNqrb1*N1O8$$XmBtb3Wvev0pECd)bgc_+LhL>H270$4k#q at 6Y5AGF?(eYb(dzDD6D
zzm>^5<$>7eZS=8tN9a<}(x>1_d{b4paLEjS(BX6~_&7L(E}?Uz#_)U-z0B<rfD^PQ
zKT71ZcWxxmU9#iQB-?Uy4*x9aU&i-TY3S-3x}1EEz at dHg%)7Ta1m61 at iTIBt0`!PK
zfomoR7<2!(_?mX`kGJ4!xPSj|@rm999Ly)Gg0<lseG|rWgFssU%Hd#vv)?3k){WUP
z`5WjxSl{w}(c|JNPUHgLrrQ>BT=*3#Uf^_~(w=EPDYpX#o!-JDGv0ma)G)p;1VcUE
z!uXT#F_xa^>GK?Y9&{Xe{)X~AQ9N(d{{ofdaq$$sgtyRgmOlTKU4=?XP3rXg&Nk0C
zE6 at K6l~=wU4hx*0Z)u+co!-dn;MA~Fmy|XjnC?R$G75_rjvE(qkZqgr$<Y!)J1{|A
zTtTH%cOc>(KY3h>PoAJWXWU4VrI!8{3`};cQdAH~Pr<{#I8;H}IYinS*V2v)lZROF
ziViNWYMlz0SRI&H+A}v>wL_#+{)WoSr-s8l_D_o(_yWC=TWW{sOekPFYu(Pyhqu#A
z+tE9<BkNLXMp3Dwnbxv!trX#kcauk`BHCvVxD<O={s?*2jf>9l(FngF)g^9)E4ti)
zuMwfzrAAGdJDG90IpZ?n>~hkb8`_&p3H1CldQ+wWs-Xmo_-A|op92GFW5Lb)UkmX!
z32lo^ThC?Z7_@|T2hA at XRj#A~PjuPK-AkwDYg|Yxx*88R&Wkid+sU|`r1MOd8f!jD
zRN>s9(x`L8a^v)0g#ny#6EA?-H{qk3G#;7Z3I487&-s!#<N2G)ufssjPkZtPY2zeu
zmt-qDIYT*STRNybjy#oONts_<ydWt##cHuEC at G$ANwT7QCG(RkDb}RqdBr6QEEX&M
zN@^olC=mA0lQ=;~KJuZE%a6lFRL5jQMXtmKcxmtdR(j$pJ#&)U2l-Ce&%SdybDCkG
zT?(Fr%Tru+os8?o8FO?Rf!pb-LV!3Iq!E!o{o-UZl`KAkXin0b at +01*^zQ9`kT#=F
z;?5qVLVo;GE#ju1BTaGL?3diC#Xm?}zMPSZ=PX<{*MpmtlV@>DN=i(0OGvOp=5Wt-
z2zf4go!@g21*+$gJFM%H;Q4G)#KuxfabBV!&_(0n!fU+qG?@mCIn$+B<DD9)F}rjw
z)t<RbO#a4Y?M?do?oHC?j&7$mK>PjfP1^T8`t((6#oy^qzwp*4FUlu!r6gM)3a1;c
zoId+H;kkTLR9;?GSXx?m at YHv2AN=9_e~(f?QCT?woH|H;V9C$?i)VEQzx(ds!SBC6
zSXf?GR8(4qM$Vitapug46K3xG;oWzC`sv+6Kcci*6DH1{J#oUUoj<<&?&;I-zWd{U
zw^i=8Fa=?!@(4#l0MTp5-<V!~xNxpBm&WCA`CJ)YmDNTLt<1LAK3KwL(1<Vs4Krz}
zz)1RkN^*qbd-wirWVJ=LC;aNNa%_i5r%vJJr%){w{&Sf0-FJBT_wd8Y^0L*X&a&gh
ztwnP{oV9@$pFRyU?j2{!kiJipA7Jq(N~nkHBt{V52qf_|>J{+8=Ll>vmgc6(_xupL
zCS5atj**%Ha?V5G!jE)qoCIn4p1x&hO_!dZ3)i=j=-@*Ma}K&AXdR-dW4T-%%xXpV
zf6?|G08t&?!gp?4mb!&yLF%$BD}uCjSt-&~qJWBm*s%aA*c+n8ZtOiqO*D!6nP`l$
z$M~5<6E((I5 at R&hRE;sl7`{}6-Qhno_wKR~llT7j{$HHE_s*Si=FFKhXU?5DM~XK~
z@#MW+?k6}%@MSXS9A-2LMkM&2#k=t9XW4KZ)X=~hA<aw75_TDHhRG}Z9T?&~B1R81
zhZQWxOcNBqbdpo)RGXTJbUsLjtn4y;6Pd7<H~;d*7r&qhN2U4leJE#-vm60t4!Ilw
zO#>DH{PKab94#rOEqWjQgtaIN-{Q at 9#ZkNpN+WGr2ZPxnZdDnX=b4$z`*2k^o at 7^$
zE89;9lde<(QS<fe3W^8#<)@N;0u0|sH9^pfI!2n)$h&Z$Uw>++*I-o>KN*CF65IUL
z7&}rMENUbB0p8$MHhkKdLBAoUds%j;Hh2Rf{%s#6vD>)FT$I+P^@qoYZR(erS<u#T
z6IEbIr@;u_ct-S+Bp(Iw1CJWt!@=U$jf2SyC+I{zBFbzHfM4<JKXFH#kF$RN34MT$
zqSITq78ey2Z|$7dnUV5|(c;&NYC1E*AmJ6(6!_JPUq8fYI1i`)^gCefFnae-F**-2
z(cC28b2ywGjBXIFtmj}%DUq at M=2A9$DgGKoEUm%Mac^TIj+EDxhde}aC*aYCVH`8a
zl_yt@@nI2jgr at lbo#fKlFEkxlpzFuSvl&SyYP{2Uo39330-frinp0nMuYMgW`q2L0
zhkxNhMSs}_v2*^@u{;WLJj;&3-=iS5#4-CDMdUY**|IIKW%w8Nkt>hYIa{Lb_<MGY
z<5?60*8}X_ZytU54Li3?8Vh-VWwOsEnu$D0dODKWT9;@*^q1l#3gA{Wi*KThNc1}+
z)ekFe?kK;T*hn*3bOx=_YS5Bno}5KzWDPIljIV!2u^SvaxQc&oy1H^D>$eh>@9vKa
zRzlumjp_VW7_&Z9im}i?V&gxGJ?(gO?A>GMzr=Ro%H!dp;_+jyd(h1T$L>*jd;!hp
zhV#XMLlw0yqA*KSxHPk~E3aK!&eGYN&ggtEM>0ZW-d;zh^1tLat1UJv4Nzeq7NLod
zzw10Jne{F6y0U0KVm~J5w&$%Q0s!fM7!M-%mWEoNaC}H%x`Mx8w^1AAN~cUlL>D#_
zZ+HZv=>}8<v+gH&8JfcTVrk!rMB|ET;5}3q>`^7JJ4ZL(;TDKPHL*~BAr7 at zR9@r`
zZM8^eLpn6(@)`7enudOBB;%QDd_=}`<7n;*O>-R`5N>k4G%PbzuFD_BQ(xe0P|Kf`
zx1sjT8R2Qchx)Kq8;Ju7=sB}Z58YtXD}ea)3hvmMYb&neizw;ZifeFt4JF}=S686N
z#L)A#l~>PPTS=lmzP|F>nX4-Squ(&c`3*vhEVD3LKmrNGkKZ?_tR9sSNtEq@@<D_f
zPky-w^6TWqVv)q-d7@>1GOy>EO-!s9B<zyw at S~JZ|C}}PKcTq#c__|-;_zh@$CgM}
ze3 at -SejDB(zXaI=h*E2X146E=EUi?Uvm|F=PocQ=QYj4;aDC5ND$XRo+ye4zUrq1F
zOQo}9#|GIG*(B=`<MmgFB*v2;5M5_Fk|;6oOa<O9J`23h)h4Z*C`bM(P!-<5pC-SK
z7s)RP+%7x^&B1d75zncgjOWlcG2>ypc9QEQWd+07Y|$QSZrMr(ok7PhY~C=mz0R?c
zomj_CT>Ip<;epcoNsbkDL{25`OckcO`do&X{C!I0PC0Nh at k|mNt4O2y7Ww2h>;5jc
zgg5--Q2Zmg*bm|#0mm8a3N8WosSmZ2)h^oI?z(?-)3I!B_C`ZQgrTs&5b at Kn@<VS8
z9X71|%|qqG`0N+wWM{wlat{1^>9cX;$4~h5;`j*@#>@6_P!DR?M&Yv6W2Ck~sdbta
z47FvqnTr>`f;+;=I1A at A=L3BB_|HFU9xYjN7f%yH at Vl(&sNb}0+fIph4h7h?kS|KM
zQ7;)pd7}9zdW8KMwh&JUP6^vlHmGv=o81cw3ky1S%qX#da9(OjOYJCp_0k;Cqg&yU
zB?W~(z9G9>YyHj9Il0l%-rhk3&hAj38F1wXGN{X!hO-8jIWC3lpQ)J<Ec9V!IQ+}Z
zBER3IwX-Bur>A?yl(k>6d&rP&2Tx6$bS5i3gHMezb<K}5nWFN$nxfFNF9dmeTT`ln
zL)On&RMhj<N1sipQ7WajmjKQb&~{O>J^&(H340K4`W_YIJmITpjuiG4hR{|wfH{=*
zZyfb8=7O4v#?ei^`&Z-XDYE5W8GYz*M`Ki!v13kN-ouhMZTgh%e6>$$oA{oC;}Zw;
zKX7osfU at Vp!%}S-VPUq^uy9^0*-OvukeQnon3(ufRePJwR$UmI5ER(XS|piFFRFeo
zIXF0_qE&EkFyJ=_U~L7khLRaVD|<Gwxs3d#xX=pNmTh?v8!WThk4&ygPxoq*kZ4=k
zyYxK?ojK|04*=(xnOX45?%fm^2$&4<_02DMdeOF9XFsi}@lc{yqfBe_^Vgc9C{C9E
zPWK6;n&by*jI$$A7kp$rehYOKM&X;!5ZUt?WRm(}3HLs?kI$3Vsyf3G&TPNV=RHH`
zv?W{)y!*h(za$R|GzCrd!Gamj&@#rc0=g@*j4zRqp-YI>4-2s`6M*i%JtQ9f4SBmL
zrgaf3ES>rEA2VkySulI{BUy(w0`h(ZdHp0?uEd52u?0sub41V9F)^)sLJ0}+ at k3eR
z8OSwz_JSp|X8!T?%%#Mq6tp)>2$TG7%eIDyjldShf4HpgdEV1EKD0|r%y-|lOH0pt
zIy=YBv`|1|l5Dn?nCOCeD5LQ|Tmn}DbLC=}%|cknalTwfkbPz}vz6#e(lL`=as45$
zhQ>A7S!@sK;z?eQrLMT4kWNeEmbv1(L!6n`yWAC5Le72DbSqqO-5^~kO}Ek&mjiLF
zXxu7S+!DyUkNpJVRyV~V6SoiTg19wq>0W_!F%Y-b6*sQ23f<*~L)^2jxDgQd6^&ch
z%!Z_m*p-AnbdMWG<2;(hO`&n>CL59fUmCFkNyhqL at +xK9kO)@Fj3QEye9X&KNXc9B
z_oQNozYv{d98xlH1=5)p4sg05E81O#@8P2;4+WO(E-Knwx at rIZO{JTQsCzQpcmr)|
z(*~s?Z}>}X6LZgIIlbqN)5&DtC{X_J##aTcm<l60k(>k-qRk2;u_>Zf*-}h43-xeA
zFY0JBG5%$v=CmM at mRiOkrjAgwncbAz!LZeq9CzWuag-gfRc}jCdWCOI4A5ny;r~<&
z7*<h!ZHm9YW=l!0jInJdSaVTeb|+6C{iJuI+FnGJX!xfmz4MC{z8qV<&C?s7iwm_^
zvJsJ8 at i|+2lqm!l@)q1%RkbxXfP32)QJiHo-Vul{Cr+|SW^0BlYDtsTN#1RAk~T~$
zA&@(n6hEx8;`$W41y`a?Xvmc76_uw(pZIEAQZ`CV-!RHADiXzXkC`$HaY_}1z=pOE
z5Yg85HhivYC;aH%_Y2Y@*z>QJ4`2oSg;x9WbJAFUo~-mhE>Sm0YzAr{2{@G%W%7QG
ziR=i+^LzK=*{`7K`~ds~zK_3X?2Erdk$oXQ5gNXSHW{ThxmrTZXz5&pp?2EoL_>t>
zvypb-oBi_Eb*pLLP9RDK64+J^>u;Ypae`~aQ=bkF#^0KwGt(xXc=5z#{0H*93^x+I
zyBc#9ha|ghf>En>nt-NYJADLbEegulA<`yI)P4w7#|AF`^+ypAy++#F6Un7x?~;*|
z`;{gf-Q71i>HV{KBWpBvuS`|7MtIjTREGloZL{|7z1eY{AF_Q&LSlPsIhwS`>)~xj
zDchx0OpVQ2654Bl;|B3R2C`j$D%*uqJXno-L9$G$Hb{<PB<rLA0l_QMS<Jk4XraCT
zjT<-6p0!)i7`VBCd#&AypG9Ma7P7V9eRtx-cPG$coKFJWN;j}b-tpacbPT-Hc*l$A
zbrnn)u{7Xx=Y^<YE4|BvPjmu`ht-=&B+f($k|N+O^;wnTX1>)wARO_MPbgxz2t*7u
z+u;gvp~4?~COouvUe|XgS5<c%llAj^jy;jXpU1Z`p3Tliq0dhU9S&4BVdRGL8*?Uo
zK6rR}!O$$EJ%%6Q`f)Xpk@(BY`}t#d at R&2B at iuJg9vqBPBlQVssfh_b9%0*FF-9!x
zJ=;+)T$xq&Jj%o;g2N(kU1Fle8XNDWG;VqQ;6b$@?!QcSRuUb1<85UwwAq8KmXYk$
zN{#f;u_%^OFZE2Q2t(nh1p at xIwd_~Zs;Z`K<4zzv{IG38*%)Y8Au=QFs?|MaW~WtD
zk9W5GH~W*?*qY1gKVo=aJlB4bMU%$&a-0*coc?^>v9_Aob88X;Te+HgV0X*59ny$|
zrbRMWdb|nk3Wqg*G;p=H#5RN04D at 3*=nXa+6hJ>Da6m&OScPB&Ew>@KD5P`;LT2<$
zK@(EY`V=&Y{*F!QJ3VCmzdypA&OdV&cRF`ec)6+?KMX-ZAq~^3t588mc8FsWdF1ZZ
zto at GuTU)c%zKbg*VeML+i;f|Wni^=Ud{<K=>7RNu-WI>6dIIW|D}o7vMG>(C&KU%g
z^aOk#x}=Eh4xJMPxOxNM<M7Mk8pnQo1>ZvAxHka!p|IjQi%;SmsNcU|ZfJuLvZ4;C
zAKvlrm-(wO_hjNF!cuBG=(BIhd6HGkK3Juo#_Nr at 1rOjmNzBCT^uQ1u6VJ5~|7`6M
zuKv?6DSi(Z6tYLRncHaaOK#ITk~0}%BGewqeoF7y at EDEg9T8&+P$>c#?_|~GQ^}{2
z?Way at Qd6b>>QtfySL=yh?^N=g-|VMU_>}5l@)sEolO+v#qKPtYv(aXuv}J>vlqMz)
zoKIn(-VpV0L;X?O1dqX=jK}r(`GV_xhe0FJ(Y|xL0f!dHe=@k|k at DFG+p@u>Sj&=E
zZ}h`glK0Lkf3u_)%p}6^Cw;?1LL>Z6{()G+&Aa!QQFBri73CAIJ~@4Qj~)_V%m9A4
zTH at n$olITE68{H;kMBbH=nFL4aT7g_=de|H7-sR|vD^@LisLKR;8?cN(Vi`I9AeLG
zq-9Y%2vC+ at niCXen-zjQJJ|FJolVcpz_TmjR>Oa+5{6)PdEBb<I5xv^3YDdGE8YnK
zeN8_K;nZ%ucBXctYv6aVP5Bu5ERbo<3<mjZ4$<^zsS$ZMtLf50OWSNAWQ-J2Y+CAn
zRbg(*Ah|$O_##&}81BuSlORr1I8E)z#_G+{$jud)qWjftrgU46f>HTdJz{ebGrAXz
z%CwlHC&cQ*Vv8;9TZMG!^!S>m#~Ug?Lo0poWqnp^#?-SHwr(8MyH`l7+^8X$oeBpR
zWX301Qi3zReS5yJtVgf>+<Ey3?+?_q?%CRsIHc24?M%S|DVADCW_VPHua8b0X2iBw
z_Ts<F2c_DAjj4S%Paj&7+%7mE3oR_HOpi|PTsW;LCU$G6nTr)YG at -$nIbHH|BeJtQ
zj2ia)+zHF)&FVZUp<Q68(lely%H;3YJ12L@;DTJP+Wz6VPQf;fzC%t`!OY=h1CC^`
zYd9C?>+2Wf>kVTz1jbAv;6H}!u+o|}vcquq<(jk at vPx*Dcr->fS-jWz|Mcmr+o$GF
z4UB7bwy58}*N2vj+P7xyuhY9)J5S#7ba8f^h3(%yAT%l_&>!7jfP6cR4&MLU?!H5Y
z6z{+N`oE5UJ$lUT?D*=^+{q)0ka6_<F0rYpi5)i(y#sJ`VGYon$aphtsMTcybz^1H
z8DIe-NRug at ymUrbiActa4U(8*GEg(^+(NwigAu6$UXNbjI0rXo46q)>in8$86A+p(
zJG^WKe*7bTaSXbM#tA~|h!42Ixi;b5B5fOOQPBw0cUJFbM)<e(AF;3mrX+6gh_^%`
zh4Q-LjRS-zv6hLVYjh(l-v}M*j8<9Zv{^00h$nS2XC}rwZG;HbDv07!XQGia=2uqj
z{m;gu?`){sTTwQ7L{;gyaZznbvheuw+$j?}Rk9@)9R+#DU~%cHu-!zotor1Y$kj`D
zeTeN*R!B5zIEF- at 6z)r7(MtRnH>~U(DapZPoGzl{G?>`e(-Ji=ED4PSM_ORS98vvR
zVD2y^AdA_8ye^;_7m(K(%X7VE;8$kg1oGSKISU$KK?Rm=gA>?yPqMuoub+JGByk5y
z!pY~Jd+sDz*Acq|i-C69$+D}#YHVk17iEa#rOyt8aDd|w#DJ_L>H`ePQ8u;6OZp0f
zm7lw$FjCDlp2J_`UuIzYvKjYBE?wYhXVICml$hYUb7<XK)OIBbTeS-R{`9PcBKLq@
z9$#pTIN{~>Rh`L%PubcR7KH?yFk55VpZKG8T8b5QF6>s)JxF(ge&ffV2_B+96G7Jb
zMBE{!eWT4$YL&^=KWbP12x{3zCh+AEscG9TzJYI}&@EqVOS6p}+;d>3r at D0PUxH2P
ziF*#j^|FQdDe!%y at tgP#nuW%lo9OfQafM$9Va4V!g?*DEv~`a)Tu;Bq>Goe285m?2
z1hMfPz(T%Hfh=m!*@f>nPi2n^BJy26kMe7K2SH>wDGkxhn=PC at jXgSbvmnk}PT%v>
zX&K~vkU?)W!+OSGb>vOmymzlu)ba}#mN!p_NHKa?3fVi5l1M^Q8cD}9F^!*iye{%U
zGbX at Lj@wtx4#=c7NKQ3iE|XoE$sdyfv~&)kvzlzDm?Vr+5y!fyzOYkDa at GKpgO7VY
zJ96c|o421SE-zkDUUi_~!)s=k?T?{A6f|gfO6B<Rm1!gU6fNrXGyVnn{@iIHcQ!sg
zuI=CguW8t)vtQvWb6<Q8r6d_r5NZ|hUj5sm)nUUAvJEv~));f~521m-qdk8FN at MZ1
zFc9c4gsePGIx-PUgODybC3TrvGTZAMgTlb-yEE}JB4eW|Gw)VcPZ~S#-^-T$d(zDD
z_OJZ?4;}LNzrDuR{!?jDcd at -~O?IRqt6@}@A&l>$*6hWX at s+(Awe%g}0LY+i1*|eN
z(cGux3js5c@`(8$$nB)EsgZg92osfXgfT%--#WrD5TaB^n23uIAdbJ46U+oapF~4Q
zp}dc0N+Aq~Py=Bhg!K?!g>V?cX$YS~@EMdNFyFz=?-1BQWINdrMhT^=;p!z{^%tf1
z;ET)=#xvn46U4M)xY#31kSa0BX&P3qwi<MFK)`TN6A!AuNM&xu&JPbNDG3TkbK~2#
zjZchi8_#ZUxOr**>#xt}Cu>^ueeuOU!5XeIvyZnL-wM|`P6Qb6O|>_yDv at 7E?Ixr{
zy3JFm{+!U<e4shPpUjk}{|zM(D&v}cUguRjeaYoKk$ik4;tDM&E-vU=T-@~zLb&nH
zci4eA;bk|%2 at Cv#5Kg^TwAvR;m^^9X#7UDU-1`%k{P73c{U_m}1je5M#vp*tD(UF_
zsiSPkk2u}xLdV8G!7hwP*+}W-8xx$@8)f15HEa95yxsBXKY@;(Vs#@seG*yGTdfP2
zI0hZGugMSSdR*{$GV~JdF~~yz+KXi9d2%L(O9Rf#k(1FPCx2U at -%2EBq$W45J^#bD
zhQr(NU9^@BKx^?>$9+6j7}OBVe at 8;CV=X(jK9>E|K^!m;PnbeF at D$=93g!@}i*E%-
zx=CjCq7d^8etv?t&r><$UJf6PpND1E$SLJ##%$WDWOtD at a%vBKcHSG$JFbiVj-5lx
zwmloso%pGNvQ<#FtS at j{23L@|%0}lZg at KdhJBZ|JLj>N-H^LA<zGqR`DEva*3$0%W
zK*Iyr+}4g`DHRnJV^4H1j9UP!caLXnwpK=eZJ$!8lfQCd;=~L1`(g13Q>Vg`osQ9J
z;2n9wFN})Vdq63&_(OH-00U=p#!z_&W-SvPD^B$=2ts8w3ueroS37g&nPuZveZFe?
zoVa5HM<>+G3a##&nUa@>lto3>vv2*LxM;DpOgNI3l$3TWZCF~vtZyUp3Tu1kjvY2<
zaNp&pmQ5SAZrD2me*dyZ5nW4>@6TKc at U&p6O$$h-idw3$q7HX#8Uh)B!6J<oU^9xG
zh}MNIw!M)7#jZ%pc`&M{XZWP*jtBN?yWoZYP7e#3FenW9yxx1bHFa*qvrD^|Y~08u
z&F=ZeQx$kV{uA{@tyX(=?u`Rpl=tBg8-<j9d>BTFEXd^Y-ir3Ho8EF%;y&mX_F^se
zbhN9L$fmabO`)JZR_Iv&E*<NgA!i2FM}*QDhGD2Ll$3U4{%DtC&_xm at 4O07y1}ls!
zM&2qzbcP<*iJ6%bGaq$@%EFJJxIPiMm*blw_;Q~JaW`tSYZv}}7dy)_k6S<P;|UW!
zX7|_`cGsDeUu32?%;gzJDZOQ{p2WLPokAs!vNHe=f>o*bop6ErJvS3OUdYY&xlU4+
zXd-=C=TOgN>Czx7f)CK>{8_TQAsV7IDeQW5{KL;b|L_3*75O~Zqj&EfIlo-o)2C0L
z(od(&_?X=E#SthGDQ=7&eFMa^i}*3Q<F{>GzG5T(h`m;yTbqqi`|SB-`m|5_l$Q41
z^U1X7pY-WlH}(due_<nTxG{F at 4J2%Q0f{%DFUI0 at p(FPPlSo!{i27l1`<4<3iyyZ|
z5z at H6tf(lZaBiz6w(Dg7<hQ<<_e`g*o2S1~(M_X`t{BrhGcq)F7d|nqbHBB7(z3pa
zzc+tOtJbYkf`YmI^Iq%SIcxK~g+;I5xVi&%h|P$aHE{p992?$(|9t+%u`4^|E<|4T
zmu5fQZvSBC$YC)Vt>b#;lD_|l*vX-DpErze;zL#~yFNG3{R4(%n>yNvWc3pP*}xa3
zg%$OPv>)46i*f_?`apaPk7Zv$zQkoO{*RF3cwZk at xP4<cLn5Iz;7 at Ed>j-u%7OspL
z``MK-V at SQj@fBjP26~uysEi{TL849tSpce`p230m0wSRD2nDB>#Q_SNT4j#rR)yhJ
zc=-7XXapK{?(FDMXHi?c#&Ko_%APR;zc*uMNYIWQL0lod1fz{;G#d5s$LG)EHTJ`Y
z2jYF`csmRKhNWG at OMFm3tKIk$d~tUxo@@9%Am|OChos%D$k-|dxp}nkA10sJj1!`r
z>PT0=>0PdE+cg>Ex9HtIk?P(0UtT5aZF&@-Q`=HpA0qiLyJ$lS1IsG=_kVxI at DUT+
zCwK0Y+`fHMX?OT-mz}$Tcre&-d|;UB_`72hqGsjf&P+>+3XX_cZLz<vT{ydAPL3`(
zwO{BvFDx9oHa7m<k87q(so57+UD~Z%pXKbD^?kZ^D;-c)+->}nn$0gxnKH^4(YKFp
z(*8a(o-Rv at f(6dRvX0~U*11LaL}vPce$@*?lrhqG at 6qt{BjpRhOgN0hL~83 at YvH2J
z5wgxMK+ at UiVaXCr_znVMAzsa$%`<cDyANM^XyuUpczdlskjYNuZ(s0q_S2c?al2#r
zj*nkL4<n=T=crBeOKGjk%AzyasR<w9?@;i2?Hx;mE1zFmaWpDm^(;IR&0f!SX;AQw
z9qZZQykl*!&Q!8`Y2PS+i4PV6&-jYcaRl?>5yk+rS|kJmNK?KbRr$ib50U5KJ`&=z
za4*~fk?cOSvmOFF2n4$zxQT&~3ZW~6eh{i4OoOll!t)SbgYa*Lm^2ZX>kxbf9R=k0
zGFr7J6{I#Fs3;gh7)Wm_fQCqKD%DYd(2L%)P`M6((7}5>#IcY~iVcL=Kq~V|u^{oO
zC6UUA#3mJ~!lJhk at 0ezV0iicejTk?E1nM*6 at O}I;TYv-<7{gB(kA~u}Py&8=)@=MT
zN}x*Iii**WXF3pdt>gaeA<sRB=izZXcAzzYJ0x%`#6H3e=wY%#)HP{Z>5g7%R$h{*
z+%>W`;&qSgaxt3KM)py!K{3f~!(;O%4qmt{Yj&4`)k$&j5tghGWeaB7CLaHN_T1l2
zj9oJ3r117agTFo^$lt?T*RxZ<VFCK3vB5zRp?XgrZAo^~P+tUdoYHXyb^GQUd{FvQ
zs&vqOK$3 at C>hl~Knmo`Wd541{8>3^6PWB(zJ-7(1$JOMi;Va$)FNbC8a&E38VJ|m(
z?~Xke_VPn+*r#&~3Edzw_pI0p=!S5=n(Ry#I1OTu0)AQKq4Z#sN)HoKC`DgJq4MN4
zz7Ks^W`)iJ=5t0+3fgM5P{k>$ynL$FRen0v<p*~zKe+rrbw{nCI>_J1HsZ?}8K=}#
zIVtbO{Yatmkc041zeuFFS)6X#)kfJd6h9YapIu7|m+YRfXZLR5%I({ZW9ZFBkiu{Q
zo4X2kLkCw8x~Fy&o6rAF?+3if{@DpGzF`ahz5NE)q5elM+WsF|0$9*su3bP3l+kl3
zFm|33>NFxbmjX4|K-PLFoT0uQ2yV%&Ds5iSP)(x9>QsyY*mXOWKZlHtmuD?FcVPdy
z1+yG4Bjc>;s1~(Hsi<~3e+Hoaq7*-V<=hWHoZF6+y^*nznTGFg#~<QFXc|i0jshBG
z+uFhvSdYcKokbi2&x`2Tp4s at l*iUE+GX>EP02hsrKZr*}k!e1Pcw^TYB6U`Oiy_&n
zc8aBFb;m*LQU1p2ZsP{8Jcy^`O{YIXBaXd`Mx1TP*J`=d{&|BpzPx4Q;7)hCSxQPW
zhSWaQ{~*fQyAO5Vvj at MuPuo?iMdOPsy?VCmLGeQEwgaw}3=`w};KrY8_z%0%@jN>M
z%|%8OfQ;-kfH}SKdu}E-kna5^`)KI*L6|KxbT>6CVUu0kwbPKfUGs*{dh_u8pASM{
zgC{<Xf4(%i7WuK-AKp5L|9~IlDSz9C`6vM9%oNhoWKwBoMhY<;Nn);nxV%k3P;M5Y
zGmyU?*`ymO3B2U~K<}3Smh5O-m6^M{qC;tCyyH~DFzfOc{sXbB$M?B#ISfI=vAAP-
zQujH<$?Rv<S&+7RbX;cptU;j(<tZb2uh{e->7}C{vLtnzTMW7AMMLKH6%6C~DU4Y!
zSkVL!PZhwfybxhpWQ(#vLG}|v;F>- at E2pDU{O8>}_z$?gg_PH>BCq-%@T9CpGzK`%
zm_|Gq`7UbM>HG{0?Cm3LL&^AK^bvZCoLg`h|HaL*&p};LB|1R9L(}~jus#Qzg##>}
zbVpPQk#DG{4@<OFtwqFhw^7~FN1s`8Cqwj;P8YQXzQR`(->!G$4hMVS05^CwNFf at v
zN}H5o?OL9lo)Y4%I)uw?r7 at AU>%QWLbN3vldlvSIvqUXozjdhDpY5x;@ebuvAt8d`
zU90!<iZ+(S77U%mYVCpCy$;DUPH%>_#9mw~yui<-^DWG at 8ns2mu>vgGBD5N<h2>ba
z0U`h<^l0b0jd?Td+YNV4BD`emmX&8a<>8vV7p_bx<sR*^-@#kZdEnl^EnRiqk&a$K
zzIZi0gWqv{%a${ZZ2G6JwFBQsd52P3c}lxnP|h}do$u%vDDjH=e+gG=>;FZ*Tf(?h
z$ZJ(Ux3#J~6!@REHN3KoPl6Td^=2znSZWL+rI0#<@KkY?@IK||jFL4dSsft^U|33I
zMb}unqZPKZcOAU2)!vp|dG7I2PT|nwhg at eaz<%HUw)j~sxlAqRiaFhE=;Jm3S3VT)
z&x8QA5l>B2+wA%%LH=S8;-HhY<SUm&E0ATXmP#n75UocgFK!;zJIG68DC{<K)&Bi>
zAFgI!{O$O$bzjbY7n^_E_8WWqR7mjobWOQdxRR7OdHDRa?BcT5o>@>iIVq8}G=-mT
zrERtQXmneVrGNJ$6Le1c6JX8k15&P;tX)mXO_CoMfQSmh=5oiUk#~m~k;No^GNCTZ
zzuj}EtvaUTo}j=t^{i<M+J-;HWf5hkrhHP_QJwtCE1yg*>WPjWXk-r9&%BzRI5AEW
z6FQ*oPXGLIU29qUK$aWI_I><dTlv6O#%wGsMcnpR65`RU`deOH->~Fbnl2f7wIlF-
ze|`px6 at RC1by?+vID>Q9A`KP#(I!HInUPioelV&(j|hFCjZb$?APVZr&f>aMUKoz;
zy(d1sXwpl8ix(`IjV~^(P+8Gp6p1|M^!N3)V{V^TKl4Ub`=xyYG+YK=92z`(z-;@Z
z;2{5$>4||so5t<!)B|Zy+RGDmbn2EW>CS=4u%7@<<^7S+v09UXDmV<N at b%NL;~VJk
z4V;hqpy8?b1 at 0ahe6<Z*M1OpX<i|&F9?kE=1Omkn-?5}gAi|PH(Qi#!Be^F9;v at RZ
z;R*54-=Z%+kDEXLLco?zV<L_{JZ1_DMLlTwIB!yX{7HUs!=Z1c)=Uv|M(yA(+vARB
zWGHO3K9(r~8kh-uJDNz)O5}?ah7^qr8T4dmGm-=?3tDQYpyj5yxsFFzZ36ztZ(KRP
ziFOXFx;GCgQ0G<K+O)=>4ftSG+0LSFy^}WN<nEf<adI;H4V}o_GxjhF8HIAk<aNS7
z-dy`lwY56!U#CJtQ9xpRdP-y;)HY%2Q<JvENPb5u8gDCpAp6mkJGu1?@xn6W2eK=D
z3V+p6LH7{J at 1+=5I+2;|%76c_`8}4o<!}CeGUNWfe~b5K=?#=WMcVK6ckjvmFS&mF
zg!-4u<qvJ~-YmU={L5VVe|tjym2U7ge?NtBe?PS4ds433`;x!BU(xJ6)Gsb at doPmu
zCAo;&fOXn_CH#6ZIa?$7EMekUmp>NqGgrJ>iYM>+_0IPm at 44kmWuI@7vuOFL&Swu_
znl4q!FMR5Z_w472H%sy4y+?@iz4!LNyf;hl-LIY_q<rKm!}YNnT<NT2OM%)Rr*Ne^
zpFL9PS(-S(PVwW4_gp~pr_1%)Ww at Sl;p-b(j^wXI{{8^Z(Js8D()VWPvqE~7&i3yH
z{1aQdP8+-M%qJ4tyG$V)#xU;jVs~=ZpFF$XDwsk(!}(sZ*7aV&^kXGkMbwr(Kg4B|
z9-b8<P1jG(|C=*j870+AV#rmYVHo#(Ub)hHWun`AXL at Hk0>@UGZUDQ%4Ss6Vox(A|
z1&6;>p1{&{u6Sj#TRf>J!tH$%zIw>#?Qio|eg-_}(P!%0ioTcnhx%!u?~5p39|h&#
zfqC2jGdiq9P>V at C21S@%Ta?M4LFSdQ2&v`Gih=``?0BWN$^!qYYIp90nY=gNw{xd6
z=G9kG30lAO!Q)3iEyc5!{`Bba19?JUutT2C6O$%aE_mj(9Si0UpPZP~(Ea{bU*5A%
z;8xxH@~ivO{3Fv1NcIsxS+~ilWCLB?D`BCphAD;ItKq&iIdum2t;x3 at 712KYztK3*
zZ%}HWVl_y#YQV0VDTOc`LJfq45Y|I at 6~bW%ry+a}LH-7%W`2i2zCkHvwF7}K=@xSo
z))?^=U<ANNlEc=qL|u}YM76FI)AVDkbkZ08%uY2ANL;+0YF`y1AA{Hq5{gH6=#}2i
zVriFNoLOCN%j{sQz_W?Cg}P0x8a}+L7P<#SEi}CkL2 at at2~10#UtF>vIW17LTxgdz
zZfu%GV3k8BSK>!IUc-M at P9941QcgM{_|IkfGv!1tAZv(;CubX-J1MQ`ob;oOaBd=z
zXb6Z&(Inr%pF!*Vh)R|L3TY1z`3pia$qDx;y)3QHES4J8tHbCDTZc?rxegUIk=QFc
z at NOWw-LJmdM24tH_csXP4-mTQLz}*!q<B7QI=@=5q>UYy)=qHz(VQBaQz|n46>U7*
z3unrxYsT|Xm*!)V4WMhv3g)1g#rK51o_mN at ij1e~^5yf%*~)A-TbalvD)~W4*`BPR
zM2slx5IxC}Z*^+wdDZ#EY;O;xlJQV at D0V<@g`l!$c!;WuY;TTb5yx}<4#Xl?^giE$
z;=as5j`dKgGE^CdJa#B)rU!?(9V|`vpr6)?<YQ75Xvvz>{Gx_wr`NC<%gICC={59>
z)p8(!Ho`3euRB~Wu#%W&&FI1QP-d}N(2SPw@=u1>8NE*h at S>LR at -BGct{<`>g_$1o
z;&e_Rg<E*)n$r!n{9*zy0!iVZSmeSlBf0}Nm>n$PS1A&8lDI?o|BGLwL-LU{v4}!B
zjb8)^KC_%WPy_>h8y^FHuSoc9f~z at xo0>t$q=+s0|ASw_h~&d_+*T)y3Q8G^8)_wb
zp!7 at d>&M(UtngH_evC>5kP+Z~05HG7o`V%VJbNg_K}k%upMvE*{TSq-<bC)ZJ}S~G
zed_sS)%j!q-`CHN@%8cb*#U+9SLn|6_VV;pdU<<!1Kgf&(V{}(0Si812SJ43-dN@>
zFHex>SzkZWVA^Qk9e#c-I_Z$t4k(!3i8~au4ClZw+oTSZhX>c`^cu8;pvC@<YnYr~
zgQrqdQS?B6E~EW<3!3!hKQ%vzX^A~GP^Vv!XORLZ)i2vKTj4RNC64}!E^dJ%{>eCM
zP7r^Gqh^F5<A`_RsA(|T^oSCTG$a?Vc0<To7 at 9S!Puo8rQ51pcr&m)P>6yjC3Bf|O
zAU2{>R*<i!`f at f7-{actvY)@eUo5|1KfjA>hwrsWuZQuEVEVHPgI!4kOS$7R3ZzdL
znx{7 at h~*6%Qd@)*Zi#*@zd$P@#?hLmHxspt9vO6Kx+~3MH^|(1IN3i+DMd@!DAz<Q
zY|ycb(@;Mg0v9~dMJ*`5_EH at _TzjcGuOjCOD5Y_fU1%xoNi4(hJt<)ax<kra>0%zF
zj5<;p6oi;o%p2k^ZW58Yk%Al{iWHq{7^3G$AcrLho<WXCPO-^<(k at bQ*O%(>i0=Kn
zM?|O$ozeyr4K6S2lR4}HZShd~MO02!X}4h&1${f at uzd!`goQ^&h8v=LJk`M*8ENh?
z1m9!h$}bF-VoS3#qa!0*XXMbmv2TbkNN~CDT%`g{a!M9-qJea$!c7h61l}_$r$gU@
ziecSKvvQ(T5fqT2Qbofu`xKTBE*g;5$soT7SF?S3=VY{wjEv6AE{!%2NCsb^-91Et
z at u?nCY*@^b`p at E=29Z(jzhkHmbm9(2KcL;$jy3gPAIcL^ABlI*hq=)JW1aLL84Wt;
z^n|Q19=uy-k*2C+_%-O(zU)pCd5rd7OFA$*rwwFr(t(t#AG<@&<)nkxXzBPhQVv=H
zyeC%L*GyTt)yd8g*@e8VWe!DCOLsc@$}M%`r!T<c>!fd_SHc)|5%&?ugHNDL$l>VX
zjvRafpOCRb${8rP%hyTY$gG61*hJi202*?X0rId%+#7{5Y3Xir4(Ts?&K`P+!UPR7
z3O(#qF7C3Su8#F2ELwsl#lGELe(@n^h at odF*COgq_I9(hb=*c5dmmX>$GDGATCa09
zASd%sCAYzqx(e#8cd<QumK)fjUgYAE)Ud#3&C>D@>?2)G*hngF%BuyKCFbg4wghrc
zCrvmq^fdQKXaVgT*Cge5hrECSo%nl(c-lcu^d&bJ&y7~MJ>q0Mq9ZP-@>M>*-d>_0
zh+f{lKB~^`(&O4D2DXZgOSg7%!?-AVdHKRb;_K_>C5m-=NKl)ZotoJuww0c7!>0s?
z!KwFeCvgT{Wb@^LMMgMpw;%3gO^=Ih6`0sIF1=mn=D=|Ia(h`%sIX0DYIbHVq}A6+
z(5U<*Xq+gQ^zcr61QI<4va~>j6A(2y0PRGV3}&)(g)AY7f3sUNa3Z9KI>)b0<gq>!
z>Lu<iVC$QsN(L35tgCY&vzycmsZBW@=mUk_i9-qYmM}Y!r>Fdsd^)zd;0{BfO;oHi
zqQ+)0%lPcp&Aoe<(0kU$MN_{5sdsA*wx4@{cgT_YTk8C7E=sR!COdYc`x*kCFdex^
z%Ai8CoO44{LtRsb)IVrPh~60G85kVs=_#lpB2DJDiBYj3;c8JyBh3*(t*%OKSnHuQ
z_m6HJZt at nCo<3e7UOt{m!7nnrbu?sAdajfDjs1c5)<k)FdwY8Ov^AR48cje%RGdml
zV$6PC!d1CpYXx4T at sDg14X+4BJe8_8(UJZdjUcX*yOOqhKeW4;e3>+vwJw^{>N!_`
za1(#b!oN7F2IX}9F$?)R(T<PrPe$e at cGWK#Uw5Gv%C|Q at 5)KPrN~iaMNtl6YXb}`I
zgq{4Z2B$8?@9*4N?J&Ofph$SG;kB(h@%usO!ztgfgK!`2L<~*^p3@(APMqjP^!wzb
zfD=X`u8znrGBMBMPPw3fJWC+Y06CAki9w<z>?{}P6Zu0fQ0*C#jNHHRtPn?SxRE`i
zE`~0|Ip(=Auu{0vQ0S_RJ4Ny>fqVnxe3qsP(ULkM8p$L&Pq<>wXu=N3_eJAlu`U0n
zY;DfPjL{eDV^>1QpZuTpQddil%JeD>6F8dBZQ5yKjqFkPDTh@$6qL>b(0Xx^FrDsD
zG`1L_a_#cClr?VRqPnoK%#8dlySn6OWQK*gph`+E>o<KI@*g+7Us-Yzd%raQsq9ok
zc(@@o`>A{vv<qu$2lY!yOibxFsJ4dal%W2XrTVqaD{@ue9H{u_^|-2U1{8b0Sv?D#
zwKs=}@TmVV!D2VMruA``@Hx0c7B^Ws7YPISa+es-nWs*b_;aICEE2wv&dWg$lMkOn
z>Ib2S^aGiJ)l_8Ty$SN`>ZEy?wMa9bBn_Zy=fsFcQWnG}QX1LF4a6I%@__c$erAvu
zDJ-TtaVQ6+cygZ-WZ~IOG3u at sWrH&!!ZI>#Jv!~_QkVw!Vd0sw^qi2ClrR8XK%>8O
z at Z^d3mx+ at HOHaHyy)eJDcwGmZF+4mX4IYY1^9$1@!M1XI&BFOL<171H6BDid;c5Ot
zcmf#L0*sstqwR0tkY#DNNg!EP%$cM4=U;mgFjB3V;bCDB8EJ)G_H^oD%ghLi;MKdH
z42dLB(*^*{X%XS!Mq7t<qyc2Cu%1*#6P+ at nPSz>0p2s9?%W?=?FWbx at 1HVGJNpwzl
zDqBzIKFS~1+p_#4%5t^Z$ljI;acX-Qr*4Y-Oim}s-P~ui7~xiZ6j2D#0zvKo*oq|B
zkR(@&MfE14ivd>UNu=SaP4bBZpRBrZ>TTHiW6o);IeZ35zGiRJQiNMXPXeVigUukR
zRk+WjG9-nH^c`#w(D_W2SxGoWoJyfIG7K at j1Mh|a&ngve!Mi9D1Mi|;_NANh8RdK?
zDIdWxyvq`1(zS%yrQegVZAJNaor=Cgha`0$pnl$6Ntt%&kR*T5at1Su*jrxP*j#!y
z3Ck9)e~T>qA9tN<xI>2|Wt<cD60Ecwy-Ob^^@2{QzU$PBLAGgfj{rOrQM7R2L=rrJ
zkKWSS#-woRsU++h2|UfRe0A5Uwt{vpmODkp-R}U8AK;GcF**jgD}ngj7VnDXcSX`W
zm(19c(GeSRCRn36Cj`mT6kY!t6nX<UYeTlZSYnOEtoOtX*(eKFl%ii8`vV;N3kuNV
zPy383mZyy3(|yKmS-%CP6cmu}98UR&XF}-CV4K;XQyZ<$sw`HE&LU5GMza-a6JiPq
z at Zvq!ob_EJw{#waTfDfSfVCAAtj9~Px+=VSwOD5E#aq^sTAO4_xoxB(=gcZu)S@~G
z0|3LN(6&hxIDUh+;rG$zQtZq22w-~vC<@*}8YfpEH4dMJYMRz?zVx)BYtjeIp=JD`
zh6m0j at cs>j0QMFa#9Im^y&8<U7@$XA*I1W{(#-j7>9rOuCEBNwEd@|kA at AR7HCl>m
zR`+Unz#l4TwwCji at M?8Q4_1OilE>Mwh6e;|Tbl6X((A<l{gM27n at o4oxb}n8C984m
za$K{v*A`?bAV56mwHnu;rK@}K{x13<^$UPy3IX(<3kwn~1Q7c$=rruu=Axi787u-5
zg-S+?6Fjn~a#>>?#f?-pKxbBP?u$l%lK}ao>_}fwz`ayZ;9y-f6}xID?e=XvD|+%D
zkaiOtfR0XvMz}Mgn_Te(M;MvxYS`No?7OSEmG(C#u-{H$W6Li%!X|LVfcG~+X4}u7
zmhzj)flxg$mSIL#ewuyHME2XsY at 3RY9bx0SUfd)5p7HFrA6Gao*N}*kYLcHZ2>XRl
zDZdR_EoxYdS>VpX-)@;4_2YU?bc9WId|vS}`|Wu99s)mO5Iv>*CRiv~bOy89qJujf
zo7W=s&s?wZj<Am_NPFOUceT6j!H?=5D7`|L(Gf3ZHT10EQ|<aHf~_j<hlUSp_`Pg$
z&6X;P<*F?;Of%Y}7QzVa(e9=rYYM-&rr|^Ghbn^lD!ZOft!e1VUV<WM|BxaO(;xC%
zAwM~<q%bSYF5aWJ>1`IBaAFh2o4$34&aKKZE`Oc%B(W~xl*HA!!2)HG1Fxh6=TI<0
z+4m;BPEw*)PI>xUC<W$766q2PH&KJ&O?rwTY0Y4zf9^^a@&{8gwj-W|rWFh?N5x&5
zcL}Aq77J(L(e0avYyUCbwCJWpA%8ICI*VyisK^xwSMX&h3ZHf1B!!gh<guhb$zCQh
zCs_?T3j~vEs^m5>jk}n}dK1lO#ph11f%e0{WVi2PoU855a%9VDTGvzw at VRGVcj8@*
zj3mF{v!u<^w{2&CILpxizlR{Wrb;ffaaW^oljb{ztWZ+DRIu|S66eB~vkYoJ1{hP*
z=bX=)W#QW5U5KfVk}yNC#Qa6i)=bVO%E~6mT3Yfn6QrB#%9=^+EoAii7E(FkjW(tX
z>U|YtC6ZgAC*7-6(jC9(lS`MlJNA&}j$3RLx#3DKT^fAXQN>2FQTQfi3I8K at jb@1+
za(=UdoTCwxbSpI<*E~5t{?a8V<j!(7%5jU_kovno{Y9?&ZDvZgQvLjq7U|JGQXsp*
zam#TFnTXp9sK4=oFpHkYr<k*m9pxsees*#5<fyVmd&v1KC;X)Ud?^oyoB{x$ZQhoC
zm_-Z8(a3`4jY8A$LNtB(Fz(K!OT_RE1(w{n;l@)c*QhfP(l9HKw3n3Z1!ccK!`7S`
zeCZPU^o)Jt8GKVJmmhCmJbE-&d+CzHA3u#2utP|(g!Y|fDw>yS`|p&>-EsJj9?d>j
z-m+M?ay@~H1EsMq7iJ<=s1 at Y!H9*ggIb@%B2>(n={26!K#5Ar4M&Gz887*ikayfv{
zPhY>jVIeevamTX=<?AVTk??CGRY-O!NsLXeHAr-WSKwQ;l3R!(8XED(rAuX#CojV+
zR|qZ0X5ZULk$sEY655zNxnXtlwgi!VJSKv33q_P!ZWfYi<!FuE1;Er`z*vTaEMgS7
zspht{(nl=NzGL_3(aT9AQ3i^Vs+OvCqhqO8D5`+9+000`HwGllA9+%zvcI2kEG2z~
z6V7le&mfaTu4HUXhjoComiKG+wT at cnLrdJh*`2E2KGl6W|I*a at ZIH8N8LlsKh}!QI
zGTpw*HDm|_r=p3jFK_l?Q-!knSmzi6d at AKryA+%HEQ&-*A`%86v~_~-Bso;cdBG_D
z{n8~m>d>z;9lLlIvGI{Z<rAAxRxUbKj=)M&Z0 at RGJrRzhB*h6arD4_ at nluK|a`6k%
zBRng!Ab($eL1tFChxqgiQRx<;6mJoZXdgbXb?XSNFPi16jc7drFZ9twv~Eq}G;9Vb
zM(5u(H!U(EA~G$vtG});AfV|nAb at bu7uA|@f1S=hT!Rm5wc#2yJZqb;9i!#7qwJfA
z at M&xli^L0*`dh5WWT9B0*9m<ex%Ml#{{q;L9-&T;<cUQ3PbS|-kCs2_yC^l!O3gUR
zpN`PwI&>0usKaq?-$e1 at I(!)A|IIhiCPS~z&qg?|4tGE&>(FJl at 1ZEaj+AtIjhmjC
z=v&=%nQAwkA$O?`f9{eF+SH*oE+ORe_fUS5q(aMdDHEI8806MQ`X`+ua&K#wx{A7n
z2Kd28nzh!|VrQ$}+a2WAZs}x_T)tcTk2niPU7BIQg#{TC?mG8yiVOPZTuwS6cZz>}
z;PQ&)cbrJMBRxn+x$~YAS~tA3zzvzlPXTVS;f|hfPzZ$M7<6bRaA#r at i_b?7P~7_d
zcr!YNj^WLR=-Ts?IMbB}rV!HEN+j6Uudi)53^|TL&Ijw)*BwF?I2Y%Vacgts at s_xf
zS*nTr2v9BLwUcbe*s~<N{n&b1g0otwAXJe7u+X)cyf2r|XAC_dfDFMLpI3(FJFa4@
z<0_gzc*uqG{0B%?9}BW&9sbd=hwVl2J508%WnjjT1Bi@#0Fmw(R58&IQXu3(D1|T_
zLJfq45Y|I at 6~bW%ry+a}LEbT_Vt$9f4q}cn{!Az>(qDCyShb+{yectCD<9p}8|d*X
zQLR%+Ck2RE83VENF>K2gSY}0U>Dd}D@$|7i{d9Hp(@$G{JkiwFJ-6T+`1+PD?0q!p
z>_;CBUmFuX at jHA^!1unJ7#_2B_(x|yLX#xjKzif%e7Mky+JtSN-HI_Al)<7|C;AzJ
z{dAApct-_tOqeDru#M{S`CI2xolY^}UiGo+W7!56a&E4dw)|O=HEI<j9m%pJ2PoW5
zYq3}tkZv}fC{D~iI{VV^`0Yk=P^)s8)_HJ?-96!GYM<#xJ0^FYfREvOcqe{}9@*;s
ztLr2eBcC1n#`TTC^~ZnHaFg9mPLDYz3Rmi5VM$RcogxFe+S$03zaX}Q8AeYv&*YS&
z5u`bb7DhF(?QF9^9LV@;BexyJIJnR+LanR&yoZ8E;SOwA*q68(MSL`1EGJy9k1Z>c
z$|dCwsedTlN;3bD#&5;x!VwtjQPjGEWQJ44^7NCIWS>(-j at c=R^(~&-1y)K{`l6tR
z;Vpl^>yahn^2$HLi_d?2EQ1~S)`8Bgt3E`vAD?$jVJ|LQxCsAV)C-|r+(?HZI%fW&
zg~+pKF+#<uLcjhy`#!xFFU6bAjfg;VZguVQHmX6D=NkUSO)FTva^03K>)7w at HDLiy
zNe>kg9gqXc&kFCuoybHS00HL+Qf7N`^#ae4J!^uP at G&`onegzTIyI3BHXs6igpaZ-
zuo1OoE%jsgQu{9c{rarGmPgL35$8ngN9ZZXq<xMH!n2MGXcSl4kR?bN5c6E4UECmC
zBet7N(X5JoGK9HBo``h@`J*w!u)YURR}Me$!Ep{bG}~rO?HH-%A2oQWB6FwC+{Qk%
zH(ncDjw;aNLr3~oJkH6f&CIUP>M%98<73)4&oyopH;5Ld6%)y{VagfkrG%p}mi2Vx
z1;8luhM`IBz2RO1v_kGRDl+JgFuu1WBQq*$ROSfd2iK5`(t873wQx0FB;_1o+Q79<
zLSm8$`cpbqX&{D+h#pZ23L`R7b8QBN)I2?VcIbeE<WS|Ohz<EN6h-3IQ_y#g^HbQ@
z9Lmry(Dtpb{0z-yt=(}DX>Z3a+8_%w_S7jf^2C4vkMZJqy!i0|ArsAYHru3@=AY|K
zjbP at N5xLtWTM3E*AumE9lGTvEJ^-G$BD`<;rcJZaAaoVS;IC~3+%)^5f+Q4;uGWm3
zfg+G@(YR}-<k7dvGtAeRzw{e9GbwL8fE#Jw0g2I5>KDTHU9&f`54X*nnj5KV at ZcY*
zBRfu=vCX03(D4rr46i&rxcqU)+^HS1>a#Ozb8;S6^gnV4*AgEbf9bbTa=!)3r@(`u
zuR`Sg)gf>n2of^64^$BjtCl&ev_aeFB1sQ at cafxpzLbpxk^b|S`%mZAe`H{ijo7 at A
za0`RvKY|3{7M4sz8f%jpYvzXy9eCjMNBH?qF^2xbU!w6-a4_3$ilYzvXXqDrpwxek
zbKTMRQvV6>LkHr`r%vIGqytfHJ*s^?p#DUQ4s6zcWFNm;MfUGo4H32!vYKv3Heg%X
zeW-}^AO07PL03_Pt-!tr27MAt1~L4yaWnAO_(!P&Z&pYhh=|u{z6U>=Azwj{Feu>&
z!$6zK66OrIh#%ds4$`d0Q-uRCmK97`wx7s4cso<?!Hq}4c*a9T&Sz6cYm$>N`nO&P
z!8;x6 at J`|VM~B6j$5$m<S&yecImeye2AZYBQxy4+uZnd4Rt(ffc!w9$BRkNO_hy9#
z1>3;XE4)1gj$?Qcc at QsPr*54(C7Y(SKTr{mO{t05t&~Cl7sv+)(VS6;@l*sUW0b8u
zW4zicg+XYLR$5D_$?3>kA;i9x9qm}ly;8rPJ?a=NypR8M%y4waf9&RX_JBNYSa0Db
z`$+N$xPy7Mg-<}8;kv-qWA at Pl;B?o4=iL-|$yb2n>BK0V0EJubQ`Xb*$3w>-<U;bG
zVGoEKxCi(pKH#COLuQ1wRL|qb^dW}_82Ru3hy)j<tA}jS%2U4j63bS~1d^C_oiq>u
z!{lCs1Pa+4mPjcds2K!Vy}R-Co(~^BL=Um%A=aXwge&KBu;u~Qpob3- at l}RLHr{3*
zQhzY9*;>YmSj1X6hBGl6+08tM02jo~-km$m-C_Z2vm9x19mBv()wqez6ysaanSd;a
z8{+uo3)ZhveD?7e3Fp569!>}xT_c!m0$IW9eUQQgAPZ)83|?4+rawf}Ylv0^ejY*u
zJMYGYo9InkaPz_qxFgDun-_>rLkmjbE^rrB3T7fR*KvuK|0yf7soWB&PZ=JujFtxi
zCjQsXQyQjz9k?ab^#!CaY`iM;7Y~5+I5xYD!b71XyKRXv1CHlBm7YBOGM<7cC_R*-
zD40Bz9tu(LVvZs;ENoTTzPy*G5 at L9c@jxD4Ks`>P)#zmt1|H2!7|^Q+v19<91!9H5
zY|`@cuMTk>n2Il~F`<!Pi3gs0e3a{Mn>*X_jP%`$!l<~fiB!Hp?O{z}I-z=q?@Hs3
zJL5f;GHUcS(8@{XD8G^SfZibACf$saqsVBp(*PbZ6r2e_M3NJg7Pc;SazXzI!@E5-
z9sSUGePySYhb}w4cX|Kk%b$8_aOBjEu{G)JnvNYSdUUI-!Y_|qJ8#yn2j96rVby|J
zk1D5k>?FxXP_OU<tyj+^FuB=AZ$B<r$wUS6IzO{P_iNkW-~4_x{F3MmQ5tbn8_lS&
zM9O2-sql|78hgeA)qBJsgqoOuK+Y4M&;r4&9r_lHa5`P%-ifX0+JC}`!Y)(se_RcE
ztyyE1f3SD?fc0!r$4-^dn95diqlPxM=$Aw9{y0|R%S&L)FC(@KO>_k++^olSyk?2O
zHau+k9;lJN=Ww0<eXdwa!!j>6z9Oy?F2kG^%vkB at I0_@!n~q^JewDY#Y(<tI-i(6U
zH&MvO?L6p#qr at a4kP!ib2ueC*JF@{rn{5FgbHS{{4M%;E1t(Yc7}yrI!HwJ+u3-y1
zB`l)5aWUS{_H5lHi+hOfI%+1Yc;$`yw(;?8xmun7G#x&VV;0Su0Py|P*eKi*K7sKV
z05C%B3B&-*QIL&%DLkZpE37c}CY=z#Dg>QLVb=Pf6b)DASjA55 at OlRN7_Tn!%tPaG
zm}TWsY(t-<d!byEaT#R}8$9ZV-`{-}KR at m5I*@7ED|hb~p>WDGcH+M5Ix&IzOaqx5
z?R at Y+On4L{t;=v<?k2qRV$$82pJe()ba6`=T7ppyk`ZXh at iHXCjVMboQ4Yhddw_pS
zLwOI7cRJhIuH`CTsC<WeVBfr{5{kbI_4T2!P(LdG4TQT79-wC=pcGdh#kj+zWoCdl
zkw6U7NMZ%Cl*1%QA|xw|7 at oI?1w^>YF!ONrmN~oXqRb}+2wo8UXdAp>xkK8ZaNYU1
z?$q)ftRBf{0m)4g`B*_eSloT^{DZFP3*a|D4SmKBw8!=1W;lG>R2IV0;7VWneD?R)
zN{V+Y at ZWrX8{OML<a{q;h`KXcf}X<9Z{N;uYbfJHdp*-Kt!$10(hlFg9gV>M##8xi
z_IgfiC~KaUXfNgEEwz;GvRjX=PAL=Lk8i(fNk#&`&&E218pjnj_H4%<Jvv-;T=`3R
zAWXQdM;VB8MApavN<c!!l2z^FQNXxG_(%NpjB)H#Hr8?FVuv0*I-VtW_+PU(ZIbpN
zSnx7_pXkrTF}VlYFvcT at IlwfA9z}@pK}>dlwo!rGs`Q?1T1Rscyypb{#E1!eTh*-x
z_6L+3X(aXpkHD-Fg=B4ttyL4>p&W`66`n}p#+h{f3V+~NsJh&rL+aZPs^;~|$<Fc9
zRO(seWsc4~xnR`XlDv!@R`rP8RB2_s(D~|;>>l0nqXQh38R7UX{7vPnua4}K)4fYa
zZ*LX_YJulNI}|UGbFa!{R6BT#_@$EKJ(s)U%~CvhFHrqF6N=;ca?yiHWja$k`qa+}
zU7>K&=|sX*$Z7uO$3|_^=6_&6ifEEnAHX?xCXthjTG!z}ZcKVaczF2C{D?@M*O*ST
zUoJ?|e5uLEQTTflWXk?~p75?{eps+EQl*aaQsW;&!h&^)kwz~rKfS2%je`7{;XVp{
zWpi&ULOoKK2c#i10O>hWP(f+m0-}%gQ6O`(_xL9+(s5edDylfi(z=b&%Nx%}Yt_NJ
zVM$5FQC<wsbjR_Ed4Pw0OeIrA&eofnwLc3P{x9(12W#J!_|dyCt93&a(i%8(6Sjoo
z%@Lu&zW;r!Y0$6!Ezy|n#J*>!6QTHWB=(Jb<V5P+7MN_nU;kfW_7MvG3#QXt{lu2w
zu}xUVL(olZN^r+KIg6Tr<2`!<?x!&`nYqkz;^p1+zrglCV_)%){hEbL&?7NKVc66w
z$gRWJ1OJN-`Ntk=nYm at xYuE<TaSjdo1+Mt6vjY`^vuizT{+E6C&wbf)%(bMHhNGl+
zA(XgvFq-I20FrDS20Z5>^mi8BOZ((5m6RhkJ*P0)^wLVZ1xe5+)O)wdn42-s+gsBN
zS$?st`{w4D+AW?v2w!YJEwFXl6koqCUSm4Wp-HsqxnizP6X&mI4TJiY<Yh(+JmQ<R
z<`bpLl#|nMYJ2>tdDi0Ow3t|($lC*(rQu%i)g&fm5F0gwkDiA%r86CYkM?62O$wo=
zCp9WS0aLW}O{ztc$o78Xs*0M{A!fR at QaZZ(6G1j=FZS&@ea&%x&6?}$<I^W6t!;$w
z=#rnp;&b}MCN`%tty0-{jyW=tjnfK3MwG8No@?gQqhbQ}`c}~)DA%`Vfl?LNCW0%R
zV^%4fck_F^V9rh-+;Ktvv{x(%*=CIr-)>H2-W+e9)3 at luqT~2?j%^j~=Uc#PP^;+J
z6w8cu=}{r5?nB$CTvKZ6Fw*}LuHFP(Wx$-%i|G%zf>zNM{|&;zVL9|S2#YqG6cVx&
z6kER1>3SHmHcB-|I<stHR$g)I*uP+GU`EHtAdeSkK4og(y)Z6b*Aim`GtfJ*#7k)#
zq8^K{MRQ3BG4ZU<KQ0(`)V(Sw{Nut<>dqm3-s+HRRC#{h3?=XLVsvI+Nk;mwJ;uzo
z<V66^zHN>(AC8aC`fxSN>f%DO^YU0Nt8HtZkeb#$F(Cx~f^Uq~Xp$4cq;=kOW{VIg
zw1wGwH|mJClPmibegS6j-Hor|7h0xie9f5#t_qSzPBV?!ioTK4?3CU$?!=q^F~3==
zgQO*ON`5?venjvFnc@{HOYBBhs7LVY%ph?D|3;I~MV&z~NLu#m++KT6-b8&SQs>`~
z9>n39d=Z{W%4>W?%Y(WY563Uk70oACZkxj)UEx_I_0jZiL;5aI|0h(Y*^NF&$0;0_
z9dDBLm*i)ZdSBE at cA+FY%c8<6`7 at MUVx$N+s}BwtwaV8+;kT)*@9tq$2ZxS*)>H8C
z-Beck8rSQ$qRwd|$B7-f75~<~b2`t$Z9(($wPCKaMi!^XFXvH~X!G?Eua%Z<^7Rlr
zpB+2&VAZhQeaklaDLi~vjT&;Wn(NiOpo7S<e0t~ZzZG}uKx#_sTtwH8n}nNum1Mz;
znA?^b0fK^C8?<`vZb^FSYa^furDG?ZpVB)+YC)edlg_he0}FZs_|bTGXVfo<!f!&o
zJ4<@{>&!O*|4pV9(cnrLN<i)i3TLTSfb^e)A-yOeXw(6C2nZnPX{e-1u(<?Do~+oR
zu!P(xJu(Z>-XG<9kQv%xq?S)zJ&}Oi>XF?Pxz*(B5zy2Xeo{|JRq;ltKa_HJh@>}g
z-cL?lH_^idQq2bCo>FzrGrU#<VFwCV`?Nyan}a6I$cAci3#-{F_8(5awxE$g+t&53
z={cylQmVe~&-{M;4x5^t{#%dEy3Ie~>s7~ox|ztat&OD=gdjA6(tQEcEm?Rq{?{$l
z{dZbRgW}08{_H0izm4z9^(OpRwMsjFoAxy;%>Mv^y&5;5*Vj4TXYUMohesmr{Vbd5
z2p#(F69H;?9spXpK%~D?Uo;j0T%Qp8GbW>4a{?<Fl(f>3LIDF3rmUOT3h_fOz|gjj
zP?w1~k4>%A1_V4;(YLg8SXKXi1Ux at QO!hmc<^@HSjHvEcTG<7icDy~2ean7!$p-~c
z{SgnPvV%DqKr=?Biz4T*K|M!36jjkM6pRM65Rx>EcG5r4Whj}gvkmd#scn!d*xN5G
ziD$I at j$rQ{+Q=QLZFVGSGs2j*ei^FE8K;to_U`h7TMtwZZ#^WcDEe8HhQxnnGTQ$+
z3mPH4Q at W2n!avA6=WuAjp722$&AUb<q!2O-<T0XxcHgIVftqs?H!h?2TaLr2X7_SJ
zSayCuoKXTWz0fkdmvlR3ecAc4xF`wK^g{OccnLHV+!=qbq#Virr38BIfNyq2MkR$&
z+iVQk=qbp5pl0p=oRf_BFGd}g_XGlG1D+6RU-%PUKVNUW>w>%Ze-8IQz55 at v=kMR3
zg->du?!Vjczw$eI4$MMLQ=lJ`XFx=(=t6MLgnmsEVSqdjHgP*TABysHsHC$Y{_dxr
zaQ06>QGR!gxeD~VSKcocVY2c<gh>ZKf-cI$3)U!Z0R9GVMk7!NibnnLHvBa*q5k+^
z_)GjXei4o2bg%yQoch(@HvAv*z5_n0VvGBpxn<L{o89at0g`Nz%@PQtY&J^*3B7lb
zUZvZpBA~PYA|O?)sLxJO(1fCZPX$G((w-<FsGy<};He-&vUl>GnR|D$DImP>eZSxP
z{XWRuJN2CZoau9C&TPgflDu*CS-n3*8Otq%x?E4bRr{E!-Q}Zi8p9ThS6KZDF0=;h
zAH$%$a*G3VGcxPNNU(`si>T}A)BjNazPa&X^crlIV(Mk$Y{J33X;%mdi_h(g-hDiE
zBOru!W8N7MB|4lP@<*R-mN_un<;ouD$~${c^A65<v6~d{?9lw4vw1GfBeU7r(fJ*m
z4y}(JrejYObZwJ2fyb(bIPlgO)DFC-9eERm>ggY}d)%@2kgxKQ*HLo6QDMCKxXgs^
zzjODm$yj45bJxa)YAE`DUC|o-ck1K10_IP-zYs(`=zkpjPwD=z5Kn-=q!yt6Ug4-=
zn^d2VNw3obMyHSnr!@{0*M*lkhR-m}2U-}ph=pNq;bn&Ll7CEsW1nDcHweF+$r^28
zJ9FJ!KPNlSZ&#u%;&=2frxSwf(-^u#CUi$s6tpX&(AGpOnT0JH=j1obzH}+GurRZ<
zw5iL(<~5wQ^1cw_9|`F9rSL0Vd at 8^AN}$m{5)cP=7&)S2hmoV&w|XQqBP**>=8QH=
zKi)+{ef2_#9=T%pi1r;uzUIovoYtoG^hTMkk0EZCno at dNZ-aP#yvomJn)tWk=u|uF
zYAbnwaQ1szLC^n6r~B*MtIuA2mOOp+S(?uY>2#Fsf`TcC&@^Euhl1==60U- at 1;no(
zD^jVChE$ilq>g~jbZg7nX#mr34#|}?zAbv}YpQNhPxzC!oo<EB>IhCik8jxMPYYXL
zmdy^?>`M#GhtU%z!YKOfMEVUqJ%PIXl={Qnbi<c)!@vH8hCYm*o+pNX at I5ISBGE3o
zz;5u1=4nX(Y7TVup1<ZNG>1My-td+@#M5NZ(-bR23b8_C!7X$Yx(YqnIRlp|S-TvE
zuj`80`t{jXN3?$JVRXQ<uR&8q3eosm5A?l-ZWr_PrHwS7G9 at N2wRPXVtsVI}4yV(B
z51C7Uld~JAbgiFuSK5dN?;p}<%(T>mqy{o+(=x^~V#Gsvd9B)&Z}4YppHFE}PGbE1
z>+XxE*K)_^;@|!Dv^1-=ztK2yVE<8LGVJwJlc7$RC~Isl`U}MLifx*weo`g>I`KP9
z*llmxS2Tp0lk2+}E7`;i+I`mC-(SvNvJcE1Jp3I<O3liJcM|Gn=f3k!Vz2Bbebl at B
z_|Cc9Q^wOx5N`+%&v*CgMz28pKzFaM^bg|bnUUd9_iE+Zmv{L%PP1!wsz5SItGR#Y
znbu9Rwf0EBc|W at p&sWgIC%4+&iS^<#8>S7(ZZ@*<BXd$S6O$}kw{BIvek6r44Vq`w
zi)(C4cG~SPMO#J=&FYq3H_>4mwrPxpfsJLavAHSsI0Y^2;g%4Q2w{@2HcELfB4n*G
z$PyJ19u_1q6<l(pVBsT0{-yWJW*4))_%t@|<lE)UOa+ijKUC=S at L};u(dK=6Whou<
z4(Z{&;C<%Fi?FU(T_=76Su?jF0D5@#rc0-_Z>T4QuGsf&4V+t>^yj2ML2N>H?E+a}
zs*Wq=*e4_Q<yuR}NB=qiZJ_PZ$L8V^wX4|p(a#Ex(c<y&vASy#De)eDcu$jq(0vkZ
zPFjllOHYk{sPxMVUzVO4Ga273Zz}FZ+Ry8FBC8^*fr^i<PW_v_Q(FEO`}NI3an2^K
z<2U&^TUgj9c1aE~2x~*GfviZ_D}-`^X0uIbKY9<EY<ZauHlPTHXmA7jswxxjY_W*F
zFJHb)K0kW&3iK$2Zne^9ALJ!j4ieVN*GPy0L6X4eBLj^-+gOsxI)0Oz(RcV$AQoM|
zEN;0<H<i-jD at V2bI8~7<pO${p&vyuReVpTicG{P2AG}kiAotX%K!i1DxO~#n*q^E*
zyrNUYcuIUF00a?E(FHudnV<2j%vb+xPe&u|fF$bbNUUn%tc at 1>HGJ7Y{gLdMwGoUy
zcnEILsaF=p;P1-|$-7nM`1gD?#5d*RjnL9ijZ0->i11X!4#NStgLd8~m~bHmbM%G-
z-aTSo`F<(aTj4WF-KdMY%1F<Pq-R;Bu{s?y#|5JHdP>SI-!JAh(Oy!wGWFey>bqs|
z1$^N*^7Ot-{}6jBX6(V49`xi?r^0WdVuL8YRnuj)@w*eW#aw)g3Yv0p1W3-B%#o32
z+q7}#jRCl~sk>d98ZIBT7sZzN&_7Jp=%~KSM?LY^C&w<#8~Jp9BQ~^sD(%u+-#quu
z=lHO8=tRXutZ%D%T~5W3uLEao*uO}TAhFRe|A^#H at rXf`9)gjOxpvRg&AX}hyDlI>
zI$c9QU$f`olFvc at R*bPMzq($8mA&ZMv>{i=JKs02xcUa6<9k891_Q5-OZBZS{Du4$
zpeYJD$~J?;4cLNtqGeHzMt0&L`oX^k&_*Jx{h-gEbkU2%tgf8*0r`ExT?f}+1S?GK
z^=ZGdBKqokWoPNhyLFngkY>0})8X{U(SU8C!R;_R+%hJpAGH1V0Qi@;g3*MjFRGWw
zc%*6OH0cGph|`3jNE4hsnstz7eKf`Kb7tU(micak$|CA;GhsD5_X#`zy=d>&a9RDL
z6`7(o?Q$@ez6o#jq9S>J at If)g-3V6qyE^i~<SS2ocKN5auUz&%R=O2p+t%dcVc6w>
zW>j`NJX#v&fAwA)xT5xJM=pCmK at R62yD@zQwzi_dq+rNFQj*=^@Z8c(hdG0#gRYF;
zGv(^j5Z#vZ=!Nxc9rkxA`rVE<UsUk5Gq+eh811XvS881;5UrK9{Em3*wf&a7%SUQ8
z{${MJv|~)Rr%|?9OdE#7&&Lyh!fD`IgM2F%JWCCFR*MFk*dr)#&1CZ93{_lg(}S*_
z-TN?P^+E<vAny-3m<c`Uz;;lo9)94*PhJx>JiUD=LxSIFyGl%9OGs at 2j0<@7uj+So
z_ at PNxR>5d at qndbu6$I<8LGv#gl|{tk6o0`Y()X^s<~30dYTx!?T0{h*?w{q#r!T|i
zHdu0+4?6hIueOP&vE*EfjID+`CGt?)X|jPYd_ at JXAADuh-YHj~0c%_JP<A at vJyH>l
zcpnIC6CHZja7u5Or}{gB*L+zct_>_7RcL6DgM9_zm at jg9kWTJ3UsO2f&uLLOLYv8_
zm1amSp6Nnxc${WmZABqsOQ4HLtFc&_#ZlMJT!%sQ-W)hUNfK$G_UL=88GQj>$)=5o
zlB6CY+xi}(FIW8VTwab8KH%!m6Zc<PuyRG|7P`vi9dhNKFCV=6_{vqK at 530Eda|jz
z3I>^Dz!t-k0b0JWob;6`Co5wN5P7y;b6C>6$(QOAWZmFngJB^Jb`pzPl1Rp at LkArj
zL?;r#ss2FvoHa(0uOh><R$VQDA{Tvhbm{yzp18XB at s(GK>1-D~c5mr|*Oy&+LSL`0
zSdQ(<WPUnDkR>n)4tEL;X=o802`|EII^MfnoD9pQ0$Nmn58Y3M85d`eYH`gbL5}9J
zQ%(X#@Ght0VK%%-M at j{dOIZ{uKrYNKDA3z=`V7Wps<DkYI$~TU>_Gzf7kYP!eP9D}
zoDVY)N0E1?I1grL($C?eEtel7r4_w<;Y{)@Oq+jk2F$5J(^j44N%%x;;eCtVjkspe
z`LqaTi}SoQY0=F|a+<$$n)R4wxxZ-(1M%N#HMM%0R at T}$Nr^S!+!-FI%#&N<DIevN
zgeIAr!GU^o&Wwxm=|V^V=+)cTKX<};T60~$2fxHtwAxIBm0TPjq_7IaMkvy^D<0gu
zz4uS2_tB45A9|&n9)x0Ow)YSX>vea>_R{omOX&X1574U<Pt*MXFVi}$;QGMyiv`b<
ziLJbE$AyJP*TxTLf&A;MDT>t_D<&7KFR-x at eC6W@tr$PZp*`sCy@%i`;|G!BmO$?2
z2O)IQH;`K)ybM2Lzc?uUVzcMfWv#^CK7Jq^5Eje7O4HbVscgiVq}>b1OxiXOvPsPK
z?jQGDmu?TB;o#TvmMvQ%O*^}K#;nd=&n{bi_~eRZI-SS-bo5&U^%Dzh4rzBw<lqvF
zddPcF%pHAqm*>WL_e;~3tvLDZie+cJwp}!1^;s?b2P&G%zsiS^4nM8pOf|B at DrT4O
zV27AoN85*rD9OT2Gmz#%P$qmk0q&w>*N{SW#)D_Jys?u5ej$AJ3V3S8GIquIS at n;z
z^mS55B33^*zH?WdmkW9A(Ri^%U?T%9Ci at N{m|daT{#Pu0Qo6>AmLV_t4m`I;{e;Y~
z<Ry(kX7qs-%h+w^XGz3a7_5Gx{-HBNUf2r!DqFE-WG5^2yWpxw8xsnG^h<dRR2BIl
zCby$UW$Rf^?Cdh0rb?R8I!!h!%GT2mAb5F8d5oA_Df|bzap503c1&u$j3YkVwe$D~
zE9EcBzv7s at F1vTaQ8~Et<%ITWi{*q_&xWQT7LvErsGf%k=r1rJb;Bb(Pl9?LY6hL@
z1M5gL_0ford2(<hq_+Ct=v3njo(43tY$5;lWk~@4V8$POSCD4t^J*=R8bZ~Hk@!|W
zOjVc6X5Xm;$)&pvwI0`prS>HUd01_SFz8lTmP)&Tm!z_!cFl|mJxg01P3p^&KlvEq
zI5zpLULPv*cs?aoNxhywt}1zElX}2&>N_RNThRMRkFnItbLwC~=Fx|<j~?AKyTj2b
zTBhka*vQW(nt!pyVT+L+=ZWT5$Fls>r+zlhTuR$AlM(jr7jrpb?|!mvtXd4uv{+t3
zu-LbN_IgRz89a2f!|XjrJ23qUzI~j*oRiz5YwB>+x~G#2*xg|`&Mm(k-htX`+1@#{
z-De#~OdHYh%uTj=R#f=-8B>El)YqhU2!S|4xpt;#rt%}%&6eflT9Jrzmn at mTWC``u
zL?QNIKJ%BHyy;%klR_W)8)<`f7RJ9yQvR!CE2GkeQgu$LP(2**0~=UdzQG_i47#EG
zty01RvNoB`39WpGa7Up;kee5at`dm4R6?RI6^9gq@!R6i?2;gK2u25`I0zjK*(DM>
z$WfP|SjZ>_SFz+O4t13n&=EssX4%}@?S}!2I2uGtX{p?xl(s0X&bzb58(fTUiHNM^
zVuGxcY#-I);9>(hglN1&8SkKs;$T;aphfUO%FL26y|GZ4Xuisf3AdC=&As=P!p;C0
zWyt+B8S!i8OmYSjq1;c4z;0Km8qTBNwRVyTu#YcQn1T-~evog-DMGB^Vtdkrq`<o?
zd at A=?XP=T-d6`NCBnIqBlmm{}h#!1%cdxeX+O%ocw%6U2M!E|umxqtY!ha)%U#1uR
zW;hK^=-$0_FEo(`B`3FSw`Rn!HSO9aCv)?#5zJgVa`=d;4=-6X_2Ci2N22-Rsf(68
zJaxqI*Yt?^r>#o`rp5E0rA1^KjqflGDdL at DSBLD~TLbfdD1V$RFfB?rFSmK_6gxS0
z=FC#x-yNrdz8nzSmj^##dXjLgSip2pu(fHQ65mP%j=r1UodJq+{hFHnij*;BPOy=%
zwr!G<+qLO+*NEZ0dbeSgHtjUavEkFEKEZ$t%f`gqquYj!$U-aJvy`-7DjsXQ?w%37
zdbMkvoQ&}_OY3&b(s6hulfXTguEo=)4(GOeFlEf9)>%f{E&XqmDYggfPV;3q+bDMD
z`SBQ?DM;1IRL}pgRQV1T)%<|x&dI&wdOp3 at FMW5O!f_)zbg1z~aOu)rfq7*T8nQd-
z!GDIX5oo9CQvU-vNayKw2r8g|E~I}JKp4GR0HF&Z^zxmhUyOL-iHWP|B`~j=_{0+v
zR)U#cTKVlACSC~0Tefa)=etGpuRi}#9{)%#suuRZ*LRqn(HkbbLw4S20{%Po=|5<r
zTa)|#^EUdWiq90A+=_qeF$*sW#Zei>X4iHh9D*)w7b5VtSS$|5K3>YkAx3df_I3fd
z7vaCb{5OOJ3*+OG$m|m1W0y)ykKs_jsF4ceVHiOis)X^O3XT|X1hXA;n0aXgCH^b3
zU=hUvC$(KLamOh9We2<}`(iepbg;JPBYz)D$BP%ryUCA~Es)|Xd(Xb?64@`x<^`rz
z`?fVgC=SWM5t7DpyPz=6La~gT#VV;RmUzl=fE9!(3w}%+<gkbVkd<PIhY1u3LS|zw
z9V&bzHu3r~lK8!Qi630`eCSqNK7{dnxV3;IxPYrmE|{=OA%fYJ4o)2n34?CXZ7JQv
zf9R&A(2Z`2^Gk4WRga}C at SA>7){v#(Pb7Or`4bt;oBAnwL~#x~g$u&Ff}p%AzkxB`
zLJ8mqlemh-3>>eP$WLA>QJ%cS2C#+<eH>dt&{5PpN(@h4(oV#&Lh$YhIj-!y{6^Uz
zGWrA=EmWoLx;1T*frIK|#Z_#;(JFeulb5tJgp9KC>Iozq7f8Aa?M8mu0xK<A<?wN+
zhMV72uU#k6>;zd_79kxh&yfzEI8lvehEO6SO+|yl5-e#6E`|(5TZ5`Y)7a$Jsh(hD
z8BtDCT=!p*FR`oN)sQcz9qMbHx#mH;xK90!1wMgM#KIFN=p^|KIw>H1p;)F%6vSe{
ziAhGW>}QKrj?F0`yCei1LeYWEAP}4(qd3ULvW17#k(UJH6T*cWz+HKj<yP7G6IdVu
zxbts*I)65wxl1S^d at hCTdCqeVIz=vw42CTfnKP05GXfg`)*i{(J`wq#A_}H)Mi&=6
zegglA_j#XTBCAq%!~h)Ze(3RjB)kCPjHx&TXKNY7VXl&Jq#Y56N6ug(iL8N2=BRKo
z<|`*bybTKWOOlZ(iS)s&4i$<ST-ZU|`QTPU4wPG at aK9fd1L@MIc)Bc5IEp45otq9k
zETcHQ2INo<IV`(+cKQ;nBMrz}hE$I8KEuSygv&5i$zoQ<DqPB|%0#YTieJ0JE}hb%
zONTzEACSA$Zgkb>(3UR11fNnS_E%F+c)#dRPN}QqH`LX<oai*n{7!nCs4t0t)9fqZ
z9(y!W`w9L~-x)?Wc`wr|pZ`R$$dUY=!)PiaN>QHboBavVz|kJOj*EWUZ0D1u5~D{;
zAk)ofPL{VLP#8n=5NOVf6A-O7JwX<3-RcMX5JO5vvs@}~2+y+dl8>%Qh}Lgwwuvqu
z?kd!qBS-n0&wu)felQH)RLc>2&Oc7Tv)=8<Wa`wfhtYij33!O1hh at A#d<UT?cry6f
zfXerWYI=Z(nQcM%O?8r!rEESgzCzF8|K~~MMG{$CcoD<HZgNs}mh#U@)xxtqw}UbK
zn`mNtx&*dmL*sH%TP^UjYJWjGTP1RhxNLRO%yf)FG+S*bB`3YjSiB43U+Qj%S09x_
z)Zdw&k4GTaus}Sb-9HXh<^pVgsKLLlkL`iw+b-FvK;`~FB_9X<jkB}UanQePXif|T
zDW)-+m+bsx3HoHl5CRo3?qS}#c|E%4=lAF-9;qDM56fv4(oEm>hpx?JxmE74-909E
z at 1B?6LzB4=UkJx{vwep*hpHgY?oIQ0^lWl_IK?oX{qDbksbN#{5u1gr^_jKJseI>_
zk?#>s%>e&ID<}04F`tmwjLb(`E#39;(l#?PGi)Mw at _P2j&+p!Ygk6;7W|<kTUG)6N
zuFQ=55D<Fg=XLKsxd)c>{uOhSf%5#yJxQ!Xm08!vl(%BXN`AOZ7OU6hTvi_ at A>uR=
zre2+M at gjXny-LE+z}kp8SV+F+eWKv&j$!8sXzpDf&>dr%jtPRiQ8DwqMZ5%>wUhA2
zq*LXoBPvhBmzFB#%JcBm;;~ggvv%5EkLN#eub4~APWX at A*AmZGJ3oxKAmIExTl?gC
zb+Bfo0Y9n_cKRK0G5uZiJKC2i<C6N+2pdeaps)_sgI)cC{!9Hr-c|mV)TgYuysM%@
zP-wDvS(y?=LT>PVx4M26qY}J<(|SudFZGi~G7W%c{~pe_t8U#CBLg;U^1Atw!6`G%
z3rtrC4v<YuV{ou&l6JxDpS>r&Cq<{|^v2M~ND=*s<a&YhR^OKQs&C`FF2txueC^La
zkPhpeG%Ef-u{lO<COTOI$;gqpEE23Gy|InR$N%Rvg0;|)eKZiuqv~#i!QzibN^|Ki
zBy$nzUDkv}hIsfK|Ho_JX*C)K9}0{uXt9)TaHTSEc^`VNMtF at IhF7{VyjpnaEg#bA
z=d1p17yjSuz?YJ5viqLzqboo at d$h90RkQN_S<*5{q~AkVZ!>W>Z`kY718|;hq3 at N!
z;frus--A~zuD%%yBo?_LZ{R=EVwTaYi!`eYI<a>8sfryTU+DX|EY)^|>93H3-o0WI
zwjE3ryq}Bte2W<Mx!q)oSm184TKH7mF;->cSiZJ#tcmu at uYLbm)vaW#Ow%6nH_9fS
zey&3m+ml9Y<3zB&1LLH&Wx_kV>V82Ia{02FfAr`TT3kvu8O8<f8>~i?ua+}X(Xwwx
z#y6GQ59w@;0TT3fxeDD%p~sb@^7_ENcY*sP1E~d)5qAVcuO6o|RaKLNkpdD?bN>Md
zvO5K0fq%O<39=-AL+|#!CANT1eBbD`Z}w7iI`py2Ti~OzeEI{hui-F_o~0G+Yj`!9
zd`CnIl1$OR!{2oOfz%xGX{#-lA5)`+ir&2dAb~ENe{lw#!)ZQ<GM*~f`S(7y*G~V!
zp6W12Y>xx`&hB(eHV^;WE_xJ$RkrMz)i!V0()ovvd_+HO1A~5`ztK_O?m4mjC>Vcg
z?WMcn65O at E{=h-)m8t#d<(xeF!;tp$Z2u?d*$-x|TKX;h9Ktu!di~++!bX=Hba=9B
z<BM&cq$~O*Sh%oGs_d-MZ~RM at 4Y5Qkk&w#{zyRC*XUcVWB!el%;Yo2YS$?(W?80Zu
zj`h0^>GUCbfR^o9xOmc5AfxHqd!ajYwb1o+Erbw|f9p?eb)zpjJUj2oxZG!@`dNRd
zKWrl8m&`mfcQ+)Q9n at gpd8kLPE#-2VhH_b~Yt!W8NZ%M3CBk<U<7g5G!_t=HvyakG
z50OxHQCG6td*p4jLqS*iu$W0dKSZ6%;$ie6`<%4Clr9+tmeTd&Giq<xNm~fD at iA55
zp?wI);kU-8It#dVNNpx&K79xhIUDbNekSY_5^{x|`gbJyCI60Psr)8q3ph0D`#?wE
zPP-SLR=0oo!M*f;(teJbCtDfzgvF)wmt~7f*H@#(??4M6qkqq;Nrr!_vU>0H6XKt^
zSo+uT{djeRBpjs%p3if70`{Ev_xOrGR~`oLcCbg~Vc_lu;Z0woa=(5m_?Nbq^fSS~
zwj~1tHv8TQU#+RR1z+#$T3b*%SAPS<c(&v9w+{cde=DAqJADEVKUYuhn(7;Uf@?t_
zj;glJ=T2}`?(n$<4(}UP_xIF}qQ>qX*1rG5+n!J%g71{Ii5`=-BMn4PI58QdgQuQ3
zpsqc2>J-fq#Zv?64%h=x!<DH6=(D}buKlI{K7d4ibP)>F-%rok^Z;p=DpaK#sng{f
zaLopj%r2E_M5M4&H{i1O=<ZYZy-e~3Ude?lm_)B3U3JZYi?oE+A0Sk;ltV6 at 9;)t+
zp0;wVuaCo`ZAisAu~oZmh~xDibkK2w4T1l4>X}#6-3!Pk-ZPJ$>ir$Ge2YeljeZ_O
zSHch1@(ih%fL3MKO6jf(^yGjqF2M8qFG4r<_+KkN8b+E~Ij>xumrdgZEDb(hE{|*i
z+2mn6m8Get=x?xEZTq;`$~zdj4c&DYy+oGL!Ee2Ey1k0L)XD2FVlVPfjn`)r<q&#h
zfV#UiOz->F2&~UfRd|Eml~1sfTn_ydVD2rH)JmyahPSq=XGpTO?X7gxel>Jt$+V)f
zqDN{ftF6?n%33{kyvXjOo<f-VV4bsFeyOa?OWg126zS^E4!~56<Mj9PL at JF@gXob_
zt#9ms5wH**_~=H<;m3sloucf<tHhK*jj;SQQ-D at jdNNQeELnf#h}u`z3wwdMHJzd>
zsI)@Y3yX6Aj@|H`F*W!FZI1;p;nafY?gKFQlGq*#yBlt;?N at oWtQENbPUEj(Kv~%h
z`KD at r`4|P$Dqlvvb#=Zs(}F8I%Qum!H`jzKUp{@hY++4xxR^HDkLMRpoBZEO+dE}t
z5Pp-SRhE&2$}eA5|8_0DA;`}jevq~>wY%kAT8z=l%BC&DM+9)cSAtWIoEo0j`o at Tn
zC7XN<*+JOA^6%3$sC}NUUFEM_kClItte&y98H4n>;@?N6Vd at wHEp<%s?^p7an^l0S
z<)57|v-_w^QB0Y(&e;yj%gRK`%0H(Fqdz-97ik=^{Cf#JNUm$;pT0z=(Wh!F|BxsJ
zYSfM9>?*bDf-_L7uG;s=5whN=SNDQ?K(7GcU8(EUWoJ*Sm-Aa|M^^4CYb7oII}OQt
zIlq~j<l4*mO|%8Ga*pY_sm5Sd&gn}vwFYzj8cHwuG+)nm+x1;Zc9YVpY=Qhp`5b8u
zKIh8HQp#W|{%N at 8V~xm_b_)_)1#q$Htb^(EpHKRc0p2`vny#d)$cv=DdO{s}36`<N
z0N$UBthlE9A-{p+d4Aid%sxmF%pe&bg{W)QH+~h{i|udhl>aD;kpBoFXVhdO{^<>t
z<DPoz+*41nd at iPci1ic;)4{2Y>x#*P^k=$3v7Ei}G5SA2{~*^jf38d3jpbzn{aLYG
z|5j<K at 3{-4!NNor!`%=||1c!o`1ou!8eAacy1ELdGk4QJ&MGbS at g*e4--t_j7`|35
ze^dTzskrnKolVB^70+L!j&eF*?H9}`GBHbzD2Ngz2QjB?hjB1&-aPsweR3Y%ziSt<
zlcZg{)bHTM`SY3A+`05g^;;4~n(Wx2URC#RV>}gMBmR7>L<vrzp^z)I5IPHeSZ!iU
zeu>t4z>b_IT8&CWh~{f>iKzvU9Bsk3F}JDcPIhXiE7^ja-KC#tjW+o=LL}S$`c~a!
z^Ty at -_e1=Fjrg;F|MHE at O3&@zcmRKx75|Ou(0<gY_879msL}0xkJ@!3bL}un9CnkK
zI^7K$+mGf^mW}qs>YzXEtIOA~i?vj;K>`^^XY)LOvsB<Z9@&b$sa6GzCOBI|6(beI
z*K2BDEFYxhYa?nQUZuW9lWBMiQ16JMG2?uZcx%v9>U#%|a;tyR93M^cLbC+v4XwUl
z={MXh at AaMV<g5R7w%c<9=|PskezjPgM03TfWQ*EG-dpz5M!D{W4VcH%1R>PI??td-
zTb&^^71|5EgrUOy!c<|Nuv~aSSSxH6J{ArLUkg77{}#%@0A?I+HUtl}#;M>y7z2}W
zjQRvT3$Mew at Bxk{{{=t7Z{Q_C;-gI6sHSE;+_(dK$KlKjgN-``htPn#JJ7sRc!rx-
z@=GnE^h+&RIHs-^pNwrV9L at 1)j?dU8G(hu<Xnrw+#oq>Fk8n2_cZAW{27C4QSNMJg
z-=}r^??>>-;Iv7|X at P0TRrCuwm{QnizeemN>_eD22|<sBp&ayRbk7%D+&v%Nzl86&
z`<Lim2B)}tnNiaf?>xfdZW9{e+lBAuM_8O~LR;P5S-1Dp?R|CoVBJ1Kx8JMV$Lsbf
zy8ThzUZmR}*X>Jn`zqc3JSO-QzF$WB%NZKJH+8qS(d}*BtweWwAKl*9-9FUaK1H`r
zb+>)G+hKG&th*i8-M&G$Z*;e_y4%m__OtGGNq4(~ZdWivze97y5hlNFAmdxs+#pnU
zGvV8$yV-QNdibuVyCv&xY4}dl-7<7HH@@AvTT|VwCB9qgZtZoquK4bBeN%8Qz_xU3
z<BM(Ewr$(ClO5Z(ZQI_l?HwmOw(dUv)2X`ued$@#Pg6B7Yo>a2S9L!v?z|s$3v|JY
zJ$y-M_BjMcO0a&Y?(nO$&n;a?yM8$De7D#K2(|ZDZLM8A$9DNO+wawF39Me{pFe|k
zeO0(a0)G~z(sa~p)n7a_ at 6=hl3um0T`?$AECfO=DXFJ=HM^EL&LbM3CloFAm3(BiZ
zw1H>f0h_;(8`+=u^ZZ+T{-(@cXXFB#5C4ERKm0I#XHU)yG^sX|H4~)2nJ0GC^L68E
zCKY<jcd}S~M+r1nsmyoA;r&G2fE5)dgZ}inxXMeNU;UELN^M)(wP?Yxtv9ZH0-wS?
zM)>UB?PA|s3Q!<C2Kcu}edmuo9K?C>9vB87jJHBiA&jf2fjJ+^g^MKNBD}q3-sjKe
zBwpkUdX&p6=gRMP;o-%_RcfETyxrt}?^xCF!1o^u2$z2O9Tn_x<0?>ab8{~v0RQds
zY>5Aa8E-|2L)_>{GiZBZTLvZJgS>m>VAjw*$lcE!7~^!<e|^pX&}W2`NSq at +a=^JG
z#F*B31a%1O1|A$*njFI#3E;F&bbUjza}mOD!I!oa_2`5GVFUzuFf8P~7RTnFROma!
zq10X at I^)bJne!k=LhF}X=x;Pagox0XSMS1-BFrYrBAqK at OWc$t3DEb{u^Mt8ZuA{;
zCCJWE!hds*eN}*;vmd$^f0^#wzF(n-Q-`qe=qq9C6`(9e6^jUoZk|eRhgy4Xizh}r
zQ at W&3Wx<Vk4jd9;-wr`=BGxOb at d+QTJYdGdo!oH(*yE8-Efs^XHHMAjpHazziLjP5
z2NxqOmmefAq0|o4N_v5N0`C`20iOVwlo-l+(-j;vk-6<M+(nx)jm4jL at Fbhl!GubX
zoXS5+WPVqdcx8x5T*=y=uZJ4<gvl$g&H{gsXNUhZghHe0WJCbc7a!thUm>O+PkorL
zFThLx640d0?=j=_{8QtJ^vNW;$Fw~cT*k}+sSE_-Hg#)#DLsC6d_I7K at 3mt>Iu&1_
zM)z*GJSse4pgbSMq at f7rwk>%iF+O3upSsL&;#&*xhT<X$><#a8s_c+ERq{RH=j`ac
zn~xPsAH*&(uuqiq(`ns>D{Cl>tBt6frGplQb3R!sQp7!hyjxlQ$+~6&;<2$LPEI8M
z!kU&uRmliq9gJXg_^eoZBnHsMR?e!XiTm5ni~zKXw6OU)jag(#Mq+L5{DcPIKAj$W
z^2DLYm at Zawm$nx31+BS`M4qT40~PbcjqpyUl=)&MljznnUI%%Yu?`ha9#KY$rkPR&
zilzrErgCPIUvtD6rW^qmibNIP2DZ62kh4_rN4j~I+COih+`sQ|1R at WNM`H6+xc{Ih
zDeuD79r2bK8;&C0Bk}JU)2Q0c=<aI_b2XYJ<l2&i4U<clonosbqme{jw3z)if+}1?
zP}o?EtSd9%E}%eIho5|`mY7q>_y1P9%O8eZdRbw9|K2~Sm+}cm-)X<B!xsacl35js
zcDp>M=;@g*k3H744TkH1KZNu%<mJ-S-mOK`!FMC|Qqrl;Q+JX-CqGgRtG^EzuKQ4a
zyzFy_ntUJiofLQHqz%gkzuxVqgu at GMKBp|i<M+G8ik%yNr5!lM@?G73z~|3DdO+uY
z?+s8I%6~;N at BBqNbt@!;M+AVkdi`^-gq;8Vx*a{|>I*n{;N`!(+lZUv_mw|HowY|a
zJ*CEKumqcA)n;;m%2ILU9-F56^k>H9!3Os!GBi$4Fq2VAAWgK~2`%|GW$Ng2WjiQy
zF3z*$_Xu>|gE)5eiZphmMrU(2o_*kyLn1zWlzldSG1 at HPL-gs>ivI=@>>fzB{{}Yp
zcT-Gbcn#-F0>_HV4-6pq*gbC?{NiP7_v#gv)zKc-;}U|Sc07|J$LP}gqvdrofJG1R
z^aqyVL$d`S%r-OIC&E63cm^b4!^+#++xEEGN9g(}%GIieZB1lj7<Ixh_BjRrt#u*D
zXLc8<$1`}=@#NWPxnDoscWrU<)Gll9OVm7l8}Fv`EYS9E4Xjmrs7~EKIZ^*<ejBaq
zNQ~N&7 at esHnLV=J+Lrw1hVj2)#-*3OPv;I+ebH at +oro`3MM2`?od4onk`J%4oaD*1
zBrk4xDbbr-`9J)BlkL#Z<sJncEzYeXmQ~sIN>z&?r1tV6E-r=892^oZZ3%-j8=v$&
za6~%Y2PXitnQ0Etrm^+wZqZ7jj<0qqH9+4Mr4NfS#n-oAJ4X2Si)Zv8C}eyNU%$cH
zY;Kl34)>qVIG^~Ku2|uUzVd1Ou1_nSTmoiPmuB6+h&XKWQxR^ycs6-V%^V0q;FZ!|
zF%n$5mD<GD-fqo5b7_)c at Hl2|7oj)HB<&N&q*uRM&}nQ1;u`EDYK3>W1w;nPn%r}C
zgzY`{#LKRE-D#1v>9mCVOLHAaqAdfw^Ey^QCG-Qnx-YK1 at Lg;EO=Z3>YG3@=+Fv1I
zpSQ*?xe)QC$LGPGcP9Mb5WO_@@v)g58IsA>to at S^b3Y%3(>`lbx6DYj)^Dw+<)#(e
z8_QeH>=pe?JabJD;CCRn_e4 at gYrko;KcHV%`LZhxz3yzQIN!~{Yk- at 7FC+Bj9y+r%
zx>~Q!kSh%9Sz|3FIiMb!i8_C^3Q7L=XG3|gk(4kEY$WNICJK at ah_RF)Ep!AK at PCs*
zi2vbljhqMp;fSy*+UJ6_2qTC82j~}R;=a_%s3z?~lHTzb)a^ok&QOx<Gt%6C6-E^@
z-l|0WI@!W<`qLDEkGR}@x?979iq2d&YU9(t<A2M8G}oFRz*GC30>I;GGepGY+9h<C
zRgv88c<sFA==*>crd!#{AT30rk%VX~xO$&h(k`C(E2lD#@AlrW64kP`W-R~HzL_B!
zuxJ1Cu^MQ_v7#N)ZwJ2qeZ7TMPk?N4&gu<^U!c{VNN}p*^FwHGK-*`XYftY={(RBe
zHDFNPthhd%^YkN9Yagz;`PR at PLVJxQ!!xpo(D;9pM`lBTH?;h5uBM;u+EMQr1kgP>
zY|C<6Az at fNjz!0(p~suStz|@gIyrr2(MdNBO4uY&cDqd?mbLBlwXrdJdWCEj>BZUh
z{i9B-5PPRe?u`}oGm}rR0yGpmvk5L@%_pJYa<DLGkd4I%zORFU3yoB$->n`$>8LMV
zO)PqK)3$5Ztb%&?+3Yh at Hk+(J_`@Ok at c?wbO`9Mh&#`^8YIQms-lJgg*p1K(*%gCU
zfBJHB0gVce>rl(td7R^zpKENT2u&Dd86smUQQFXmQlv&S;xyqA<^Ll2{~y26Oim+5
z`50T6MOa17uPQfR4qap&RPmo(MAiSVY}a3sTnk4&_r*-CLL~V%w-dp^^QzkJm`KYX
z(3ovd+?_3$WPQ|MJClmytb4QZnX~;k^tt#d{PIoMmdomB{OFE#R`>t()Sf;oGu-QV
zeZw=``;z=&9j>S2akX5j5(!UR+1ygS8izeNzPMC!`?^$$RjiuchMJ-GGa7sn&{=Hp
z at 7lGx?s@{dsz+^6XF#MneWN at jI_CZEC*l9P>%_=Ef2AEd_3~XkYR1d=d(9aMSDIZq
zRiVNbqfmBzr{qp7LLKJ%2UP#5{ulgg*;v!Jl|g*NvuYyv(d}Hv)-7Yv<axUd!(5<k
zaV}wV=E5)L<kRQ>tluBU&lvdgOmWW*yi{gmSG?E-a;WpY?pIli#rj;#zdeK_e0{R)
z6>B*qYNnJ)`xO(JvamY<+T69B5 at Dp5U@~hzqGT^q7jt0<m+qzeZPdQ%7LfW0MAh$5
zNqYM~z9LGa@=dAw&t6bXs$VA?%>+KaN?xh`r9Wd``~|o=qw<N~-m&`g+uW~Tj%3!d
z at _CsC6#Q$V@>|#k6y6J>@;%816h3>a^10^cv_|7y;ciKSt6vANfCMzvMitgC9$YeM
zKYaDk(TlK_(&rwoK^G>w$cbnP^&s>JLgf0rg04S*&nqw<nyl^xSfsE1eG$Lf>)*ra
zRQN1rFIK02eJI#t{rkM_8E`RIPFbTR7cv`E*Gm%}AaMWlgP8j#^5cN&UGTWL at A(Dc
zgAo=V&QtNErRU=3XBvFT=C+(;H6U7u1eg2aQ*M>u+C{9XY?K!8=u=iLkmh$qfYn6s
z^K8QWe1ma$v!_5XkKeCl2ohf35)S=ckJ<;9u(u?8q3oNcmeuMmB)_^9Y8;X~Jr^YZ
znBE!xXWTP$>9?P%U at t)B$-6dvf!BEOHs8uj)y83jQvQggw%5r1Ul2wqGsou_Za``R
z-^%A_UF+D!upi<oN_kYi<=8X5!Vv?v&GDSbF36hDx1W_nXvM!#9NHar*%yS;I1Q<u
zJHEYkjq`Fpzb2MR!LBQ+Ee@&5W=(r_ca7MFLR}8?<G4J_1ykAJ5lzGXgzsX`?{R`&
znt&WIzmdE7 at V;X`sXgr5qxeISvmR032p+mZhdaL)ZaGokkbgNDT+rlwh^$EI^?v(j
zc(%0-n*p*)S_TlE at 54)6m7a^_*PUcL+P~=*OD&?K&(Gzu&)QQR<e!K-r8ah};t5Aq
zqy-xET<&;=vW~V(_}U0}LiL3Wj0zZ4F^OV?-nzFZ`yg+b)O at PCcPewcjkKlG<+2G&
zJ23wx5Z~ANkN+T|aGd{S)IZ0E-gVkN{?MeSaKn1x-aYcP+>vML%Pw&&jH%U_ZtZ0=
z!F;8qHxvMESiS6Mf|cD72~811xJNGR4;6-m^Vzdr#Lvt;{A_b&7}NnGpYQJpO5 at AY
z+r8zgF2DY=F=x+uUgOR&cYNSxUYD{g?0n!&%$Wa^Wo|5n9}9SoindO`KFk_ve0gx<
z(zj2qZ?;fi8N44I9GeYuwN~IJernQhPCd(=N|tmT at 7_#YIddQ7gqflQ<({fV3%2-7
z1%RCwZyeVeh-vQiM>$&b{Wb(kA!~!o%`I!X%WhJ3q at UU}dNztUKeIVykO&U(2~isI
z8}c+_=F$7(M4o*+J|K4`QDY42xxIqdGF}Sqq4D5k<wR}QG!x3cYi~N|s4$nuMuXEe
zmv!u)w5Y{mu4GPu(W#fq=0d*1?Q%lf<+fU*by$?CwN%M%vI^Ig`DL5S1sc%db~25H
zK19OB(o`DS+|+aqfQwa1SofK3+32OV0K6HRyR&mM8*^1}Hxm+_CSEm(N#jkXvXMx9
zA#a#7VRE&Aka#1S&tzqe8vapK1O26l$=1P1V$&98JSF?-<q(EAnudj0LTMom=wzk&
zc&h<IgX7ytN at jsQv@k0~B(|V*PI$kf?d3J;rqL{wQ%1A#;H%j|uh$W)*I3+C?#~aj
z8hvW*E*kZ5O7iq8#60rTM4URSQICtB!o&;ja}%m;&eB~ud;MgMttMX$qakT{)0q<%
z!epxImoqlf5-5nkIVKGd5Ufj~a(nYfK-t$QB_K?^xJjN!4P762S{MddjarG?35UE|
zbU8jUY-~v)L3yQz%@<gMFoetu#YPZ!V0d at 9lb~}2VwOjp>cX4i7P1{IXsE^VrVs=9
zZ0K*_2p&Z_XL%yKK?hhiw)ES!(>sVYM4_2QvGPiS_Ux~K%Y%HHmOX%2C9Iuws~QIa
zlGt_)JO`>cWeaZW7C*A{>Zmz`gjfez&ztYd)|Ga}#FH1yqWz4jjfJ>*FRAV(DUhPY
z!+XjQ24nWXdkfNE^b9oRB^osrl`d3Ei$ByB6Vp-zLOiV(D`nF+W|yAAbBbOr)fUYV
zAf}g5m~&z%bq0f^vVXgjekFUZQ=c2Vj$EoH6+JTRk?C>cok8>UW@|Ctp}PTTu}Cp2
z1$qvIcskaY)u1D;kvR#y*VHh;mei#oR8>C}tlSdf-ElVp)uPA$JI{$<2zU|BBzBh)
zqPE&BKX0Hb^>K~Ouw+`A<*zEFDp`!JHGpi3^CzTC_6r9sHt9gVl`?|*w at _I^_{ylZ
zkvY*ys3~@48U3<Jg9A*UQ-*lFB4x;tV-CA&eg%Fu!H-OEeYFyDD0GXkm$3ZNC7V^y
zfV at JN>&%Ii{2(REQyrB!q{<~VCf>9H^Y3ZIlSQrO)9Ily-`OiIS2R~YmzhnDLYke=
zlT9{<MPbj+B?XTFnE0jh*Z0T0lBMKaZobOC at P6YuX?Fyiwq(Umx_YG3{A|v<91n<Z
z=S*vEP0uWR`-P+kQ6@^lUxNh^L6kJiz(thI(yB>hi4je-z`((#1DHvJLTE&iiMI-*
zlr9 at crk~Cn{oPlOgB83g`sSzlUvNSnaAVm5U&%r6isBX`$Y=*QYS`k#e~534+~t!0
zQ2vyC8Yq*DU{P`qT>zZl&sUR>HFk8dZKs(kK~lt;lJ^j`5yzvjIOT2QOhgBbjyZnw
zsN^#9L|K at WW4`U&;h!8Bs+WbWnY5V~Q=DknBY11UC1i!*Z?G%UV)BiH24l0^ZIf2(
z>07jWR!JS at TqVkFowNop@%1|;Pd|I*I`>w}VRP7VGFSWPcgyIhdr0ARxn!(QTH;##
z>kNx_xNJ`qZ`kb(c4=wY?)u&{!E?(<%gWkm&(iX>44fgj&Dm&dx2T)_H`3KFJGk8@
z=Hu#JT at khg6t70EFRHt8V;^Xar^Y4`_=N$^)sm~W##C%~N7>>y8Jd6$Mo?SwG<($F
zAaY~SYR7oi(RPtP#u&X{?7Ydl4NBhL#bImOZ4u2IhuWXFt9roq<ABfN3CVD|E^`-A
ze$Aph`b3B{JSNOPvLe!6P+eH1fHBE&n_Vn2(#ZO1janI5*eWHJc-ueLiIa9~boZYn
zJw2a2QpvXzH_A@^eP8eB7%#&Ztvg+;iKk~z>h3-?P(udX_<2~z&ap)=2Mk^>>c?;)
z(C8?}3Z~bRDNNL4i3D<TvYC!(f5X=fzKbQ!ms}bBu(gM59Df>3EOCVM`Q2mMgHxSm
z)J&$l->X!JW_+b8<Ztld3mt8`5=;{^Uac3!5^c?itK>DfS!^j#1=+gNs$9kR6l7PR
z5$_{=x%HGKqcb#(o@>v7(k7MRyB3}J2sqYA;hM3Gv{m&0Os!KvgKc}dgm69FC+5Zn
z&=q6js>yRRm<gxWBr)@WE6`5ltI)yvK5|m>`XmBhDQm4b2It2PkYQWJp{SZ<jAmOS
ze3}(^`LF0S<<h~Co1TwFx`oT9E(}5qjAD*;SHeRrLu?RjE+KOq-_tYhGuP`@yJxx{
z^3OdKr(Jrkq1)=V56isiG#nm}J at R<b&P^^mb+!&wi&tazS3K^DgGe#1!)!AuYBuGn
zqhnmIJ#JzpBB_7XvYs=0>T-{s{)$7|L8p|5YjW-}5^3`!W?#|JSQWHG^Q8QB;$Atw
z&uSW;cbmz!SrybUHi}lgg)WZ%w7AA*w at nvME)CW6W!39DJYWvgvoZW9aeBKQOKnYP
zK09HPOtv?_)Ne^Z4pI2cP~=r7j`pF9Tdm0$knxu#j3!G+6%$z>h!$>a*gLPe!JLow
za4o6CH)^`9pk;N!3YP)k07$!kqQzgG5h4~ggNJd4Da%ynosJ?8E(ve7Gy+~KAd_Wf
z>6A6v5Te1fS10-xG10jHN*Q}uv1q16r9VpXi>i;hf@~;!CLLhAbUl&0P=QuLFJ=~1
zk0yI(hJ^6>2qBbg^27y4Ao8BJVb5G&u`*Zpwu0Hr;_W*kKLAZLYO}~#gJadY8VfaH
zBn{(s9f=%5LmhGle_0+o<KTUx2am&A5pa{z2){_)srR>2VRmZP>7j~wEtRgTJWfu=
zX8pFVapr!UwPLS9Nc&4hVP?j?)1}!Z%9C%(t<$;=XVZ0N!q)5#@xF*#S?5neHgr3j
z&T4v3L0p%X<|u)>!7eP6rVeL?F2rLvT6OLCTW4^Xpq-?61w-YzX~#RFK}pjNcG_<z
z52!YPY-FkfqM$PMK3LN9-+$v!<#W^gtliGsFfWCuE at io&s7qNc*jU9Tc9=>oC^}QT
zOZG72oOsp9NwIRF1#jzRw@>SoB$}vvLCDIePAR}tk<8!Hk#Tzm%`OcexW3}qdBroc
zl{^t}#EG|wE6!C_`c=|*#~4;`Jzj(|fP~W-8XqZbNccRjFn_h(c>kwq7U5sGe%|n}
z60m*Z10|XCJ{g!4cf4X+^l90ZR at T^{)b6Ck)?<(XzIiz3e`Ip(|2~XU=&i8sEk2ZN
z9!{+sAySNc`O-;XB-c+?{61?B?Js<f|Mgltv8L^d7ho8GWl%e=3YTP=Ui|47-Yov3
zFd`OxCWM1k(`O%yTdP%`jX_tpkee5E))#4?A<AJp^qk at 8;TErmbKiu?NnbHWa0=e{
zEfZ{1JsI%(P%MVT;R|`(hz-_>R$DdqCn4f*%w>ZScf?<0(~w(_&&b5a7S!4$QN|PO
zVMtsJI&IOo^)sO`pc9fT-0XL4x939vHRxp7xZ$0QZ)Zpt(7%0j-?H~Lv8+Iqa^Jy^
zeQ25H^xC9(B7|(AbDbuO2lmdqMcvwAgo>XGE6Nmn15t4fwPZ@(N$9ECLsr@%zBb^C
zW%o{t$;sAwOE9|KS}~8GHU>P at Wm6a>9 at X_zQhLAJWs_KnOS^w(Pj;GpJl*j2HEh1;
z<^1z%89&QOOfH#aTg5r`v5-v~bH~8&A+yqbOXkKi(2R{^W!HMCUWfy)3kBOp0PK!U
z?%=+0I-9)2Q$WLq*b*67Qn`vk&}UC3T(M5JSq3i|v5=N??>M`IXtqq5ypA%tKQ{C1
zAbinv)zCI<9o+YFf;%~Dh at Dp<DSSVH)L+mcy|5E!O1y^$Ece}Y4=3+A)Vhc1M+tLK
zFQT0}FwVD1`#24j1YKUJH=ef&D~FG##nU{pi3Jiduwqy}Otp;S$G1FPH6TiCuCf!f
zxXI#qOP$xfexEV8lt+hFEf-*grQ)xe6itt*r{Ls~S#&<*Vvv)sjn?%wtR7jrI$E!z
z<#5dmj{OtMcP{3yCaV<XcE(f0MqW4#r?wY3#qnLCTY$b9UQUlKO>7vvldgF&(u}VX
z*{k02%+^3Qky6>N{3-||@%rAcZ^AI!%9&!`Oof_&EX~+Ng1nhPw<si+Atg2YwH5rm
zT9&YbD=S5*U%nN5km0^!>fTtrL&u+3kF*ZK1RuGQlau~E9YXlg40{tza7HLC!qvh!
zVxsiDGLB}%C|N6D!$&+xd~);2!77wFQ{v<|^e-K6JjPipNgdp}UWv(6bB9w58Ygw_
zSC3Lcc}S=BGF1dIjl3U+%0E|Nb+J(9HAjIogk&U|^-vI_Uk!qk$g_e-e+G~=;dBms
zP-M4FDX~Pxk}LnX-Gjf$v_$J|NJ+cfv2_n at CSOcHY1&2A^oxC6Ki;gnlyTSM|AbNH
zWYe7JBAQ2~>WL3AkPVs#8;A!9Pu&@|m2@?c1j=m{D>>5sn^K)Kmy>t)(X4beX=_Y6
z|7~vMz*6B0X*$!c at LXm|*B-yBjHCG(%f5{OayM)0m at R}_pgnJ0c at O#MSkW%A?85TR
z=2D<t*>ryMBYse!w%s0iSqA?18CKj*>+D*eLp_g$hLhaR2NVg1TP!iHEYf)Ry=a{{
zHDVS`_<8R2a>t`?4)aO$AtsFl5>b1*D$zpBb-U_Kt3(4sX8N^n>MZ_||9$vg2vH)t
z+f`|;oC?W`SlUmD8N$pQ42P_;4`d9gvyV~&jANEr^ta+(VS;B7Cn?oX!tMYPdGsWT
zXvh>*5gLBVDj}sXibVMY=}?4`DA)EpBORqI5f!s&nABtvCh~HDkzxsF7dAS65lrem
zs5wX&ArhTn&<JKWn&^Nm91IhxQlc#rvG+!iSOmzVv}6Ms1_>mxacYb)E0K`0Z4R1j
z4?zZ*NP;OqD#5l at 8iF`W42qc%GT5}$I7A2l9Yg30nXUF5I*`a0A4F6 at e`qKq2xlx5
zB)Ttz1Zjvg0)E8Qq6A94Q3c$(DJu3!qs<ByYza;!85gY<L~2ZgWQ$ac)sUeX!!&;(
zBb885E(%5xDPG2`@S6ugcrl47de1`Z66m(f8iA1(iwpx=8YbC2xTU~ROEwYeH#1f!
z&NAZ;5|NjWO^~qvpffEAgSZAV+O<_OBajF35hfu at Y-O6QU{ES1K=^kJ8(5hXoU*a8
z8JfEe<dnM-!nAv&VOx1bpDhN)B>d*@uvK`71c>vZj8#cut60%SA at 0~AA%ekEf?|zY
zUT4$es)b(E$nN3wg<|no{4F9Le0lkZOk at 0enK?|89rxrt->=WNwY{8eF8amIhxF$Q
zO&@(z(>y)q(5MA<CfcNRKJnu5xEe8=7EJ4)VrZ^|11{*I1wx%^V at I&axwx3=I11#!
zq77o4m|Rq6V&aZ|OuMv>08y})^yv&Y at e0&^L*!tRQEx3|WUZ%>3B!dUk{b3^wUjRL
z0b4`_GRoWt&0r#SkYgF);7H>FfsBjLkY$!gBIc0r2+j$%Q5?8C@)*LfkYL=VS<N-W
z3L8>v;OWANj)H;?Nm>GI;D`lILNO-NkO_#07<ibdSg>GOVPR1!O7f<-LB(*fUkQpi
zbH5tp6&3NqpoB%{zpG9VA)tqZ3E^CAFhfEDO>afXFyWw;G>fD(F`L3EA=(%Hn-&Go
zu8E2o?HwKUNXWxOLWz5tZk|4QByi=4omm1zl=#TG>8a85BtujwNSK+6<Is?an|dNh
zO^ObKgAR)cMU6{R35}~TaCPTIgV4maVW?i30a%xY5mh)S${a93ST at LovusQtn1evt
zK&Zp!iy(%mMYGQq^&zw(#G-g8!i+kk!AcQmCkLLky at 9p*TTUrk+8sKWWW2Pz^t==`
z817JzAxlGKflbIULW5PSNUw61Gg9>IP*F2c!$~Iz*}#<$E^Y9T&c2v2A{@ARpB%U&
z7YK?wgAeVj)}l_^ouF1r%>zkzd{;^~^48+bEe%XEuvQzrlg^@|(cpDTZ6j?mKUEl3
z5wP$I(BU1oZons_ZVR|5iMW9$7$DQezuty_-6CNgBm>0 at HgEDUimM93Ny0orn+l`c
zc(waAcT9$f%X!0P<Y6$Wz-6=eB(7ktbUHj2E12)Hf&G<%idID_f;&ex4kClPKN=>6
zzdI=yGjitDc0m~;hPwj<+tb~GBcwAnNK+q?X9ZVafYL-Ng^8cpAP_^urW7KN#j>ZU
zH3p_c7 at -ygd9Lr@H&EODpc4$N+&0UrA2sdGg>0;EA2vqyr?lSl|LkBGB0xNtl-$H2
zN)l*$K*p9jZH=OnD(r|DsJ{#`zQb4zorI>|O$RdZ5xeVM#Uc5yVcVq*pk+MZ(v~~X
zq%UM#kQQ5UKoy at Jphg6~SV`FBKGF%H$T;nq9D1wKuG4r=BOo?lk^G4o^&-{Gg--t{
zQJ#Cbz;cmkqE_XXcUBo%9$&6LwL(2bN-}9)v62Ubyq-ZzC;FnC5=UT$%c?;&jfSX}
zQ at tc@H;Uo8VSH}y2{rqx|KMeU3Z&KtBU}UhN$yR$sK{U79=8%&1Rb%qRpr3xqj_ip
zwxmOxKDq?NjO)IIAjRosuzyo$-<lN{T=y%aMAY20GJst*q;$5R?%D2H5yb4=5ykB2
zup<MKWi at +3zmx3?ezu7byc%@YoHjti;3mj1m at F-Fc)a)neLSv<=5EUR=PMhajHL@!
zcy8w7rMviE4clvgGc!S3TG4Xis2HXsLXifeYEubS@!g!k^1KgG$>7nJKrUy6GB(W`
zKL6sBRi)?lj690!{7EVwi#cC*vVDuj8;|?<pqj><1lZuc?rs;oKs at 3K<fhGwYBT$p
z?*ZS;<UV{4P(F|}plS=_e14&u#9|E_yDl0(vui=l(0TuS6?F!CLn!$BM_1W<`6n%V
zAU*Z{@Jj~ECQj{kBZ!>YtjT~ZHpQ2R?r2={^d{t9LUB$20U%J9236sj)pSWTREp(5
za|7el$-<5TtYg}%5tCA6bqdx6%INT!B;b7mX1D(xDVGbcYxrf}@BK9obeAUUV^`4T
z%G9bf?^T|c%Vcc6q5tfX at wJ{#hNKt*#OsDn8uA&Hg0H)@$9KvFHP{DXaT`KQPN9LD
zwOKfIb}}EfP&e37P`yFnOBOcP5KVW3y&(~N>g8Ie&vq{_ep+d6L4=~eES&IYxuKiL
zxRulOCd%yNnNFv%y>j7`_gV;11b`;u&iASjAg6Em3i+D`%0?-zV5e>5u>|J5Rfek|
zmlNeRQ+wJr-n~nGzmAgnFsse~%i(e at GW$of-TuAhX*XWkYV<?LDpc|A`<W{wr!G3o
zj*xM at XkO772K0ykYhdpp-Xngb0Z3;LGJ_;Z49}-nh(r+$d+fJGNP{R+(9O8F{m})3
zHjG~A_mHGf&}~J7pe9vMNbiMu+da{wa?7D>iMMmE`;`QI)8VvJ$*-+Z7%COX5V95^
z-38+TCO)ox(P)+dTNp-EnlyM?)T^Ks>0<OlB9NTeK@})vUQAXOdujTUSippm)pV$E
z!y5>AR%w6Gq##g)Y_90dwZ>0j_iuwMwo?B9?;BBySyZsbsi?hxzJ-_cJ at r1nyBRkO
zf4%-^kW5yGiG8mJ2*k`6XXBU|`}R at N_g#r2wB}AHQPG4AI2;mqfJ^a&BWTxr1E!29
zX!VLUlr+iLV)30>>tX#n{cIW>z(y8(R`5jYj$_l>t^%{j%2m{)nTwJ+=W8fuLfkw$
zPzUbbX$jV$=Sh1aspIcba8Q{?ybj9!rj7%z0>R%;-P4}JN8HvS at CbseaP_C@O<0W8
zx=zo#nZbusM0{?C-S*WIQX5(2ByO%T`}jsOvc$g1*kKZQbJ#=G05%TsmIy9l-9Vq9
z#l>QD5l~wvezS?<U^pwvDX2I#p%e`)Rd`2iKkDB|_=!eMm_sBusKr<Yv9#t8n3v<y
zv^=Pu1WF2yP_b1h`B+232UJF}4Jw?YtfgcUmsM4ou)o+l?>W8dO4eYNuVcl49#Eoz
zrq%?TgS_HP!5;JzGdqzw7Ea?kZ=e{18ES+YA+l!JVCqE}HZaGGW}f#+7t7MU5D_Ts
zn04S~oH&b<$*^!3;z`yrFaAYah~dAg`dhtx7m&Bu&M2Jz>nTnj2yJPoH`O2K#v&v8
z1l}c7k$%tOmWG6L1btIZM2KgcA|J%6)(>La$qf$~H<u+oYnm4=5wFL;vrl104<>|t
zm$WYuX6f9f1F~>JB_PBag)zaJ=TQR9kX_d1Ee1DGIi7PlyMNU=aJ0 at qb$QBX-(Ids
zU1m&UE?&Gp-Lf~I7a`k~wZ-=OhzbF>;4D-9A>I*DVRo@%-ci9`v_fj3p~PH}`79Z2
z0%*|%lo#)Z?&+8pmJZL=_d9)m;?)22G+J)uaBU3?C70SCGc2;>{<E2}V6H&tHA_4=
ze}&cROTmI$Jz99h$<-H_Fq~|*k{YyD3Gi!ClOg$Dq)MbE<K;Vd<j*NplA$7P3s^Wh
zm-#8_Y#<Q+ at aAP``<Z+lKzhg?H29146aqc)I8wo90MT!SfB&n|{wwml5>}<HkF}5z
zK-gwEB%`AOC at WK_nOj?FHxghEtxtFPnq*HN{L9+7@)G~YIJmGToLT-|pWmL+rik)>
zw^4SjYc;(;{tkcjh)gZkYT%wOLb at qQ7CQ(>;*H)PbR_)VT#V|nDki-zphpIKN52BI
zJS6^o=y|gl4_)KofMJ`2K;w57CLDKm043dn70<iT5*%Sz+`}qw%UiJ3%Ilcgada}J
z4&#0UD^^nOAksknCxa(&9-j30&_B^BW#ldme2B$)uNoG8!OKwdnVdxQ^h;o11GfJD
zQR~VO&7pQDc>m29I48|r2Q^mU{<mIOi(*7FS|tY`MC`{R12iA`b11F1roE6z at c!1s
zu4)lPBgUtg$j1Qu>(apUZsXIV06gLYKa;%ViFGnes8&t9QFANE#2pSUe{gMBy6*7Q
zT|g%%qCw<caEk9 at _%e>^1j*g at bNa~6;iz|Ts;?xO8zjy>gfqd@^^YZ;LEtdaWC?T(
zFK!C0w?8Lt3h{~kxPhy+_e27*_g}tge;GtbisYV^d$7%7nG7P{8SVlnPOGfyK3>AC
z$H+!1=?S3p;Kw<)$->y|5$_n&S&DoXHc3trPlV%cnDLE4PK`KZX2mwU(8wXxs~K>`
zb@({0N%zs|zs|M at QNYP@%+A#R^4%sG3LUN5kqj~N;OL`+Y7^-)_aqWvlStM~+JD<3
zL<cK^t{U=4?;gnu-JNvRw5h7ZP1(mjCt5?v?|X<hZ5_i+>e^*)p(7^9$|@^WU>bZ&
z at 0>I#^<d*~GjaAin1ck4 at Pc&8ZI!*qPP6|h&mx$p#bA+}fx}0DEhT&ienxUa`GWWx
zI4Kp}6N=DChlf`>e`<kT{N629RNN#+RrR9r;atk}ynXDKMA4yxBfA?W9kI-<S~N#>
za#9$zPNINdCDz7zow+ney})o-RI|#5NdK!&?j!qsS#COGtCb(kbplaAGJn0)1Ba=0
za;OjWhQZ5OwHP0fU)!B*%-Xk2XD=fm0m(#2TGBLOumWk3hguf~zD;prf|Q9w-;;l4
zQz+=fN$EuMm8IK0I`C+-#m3n~`iNfFf#;SB=|i4kKLnnJX?9Dr8|qMC;=X&d3AdEM
zOZ}^;*|oISTa#a^Jk0?ay%LtT!2U+ at PVKB_rj-4*a~YZ4L6n+ZT>LhIA%V<KOxy%0
z(=0LG at K3y0%nrl}CFZGFOtb2 at vSlckDF4*J0>&P9WG5N7^V7!>$@);_v)w$Ec;uu~
z;eK=3$v45_E+}J_u?=oNOM9tZlV7tG`{eUuQ}&MBO)TpoQ7jM<61VVK;md9b#yOiS
z81jdTDiWGl)U}o;0F6f>-!%MZdMBjrMkQeHCHyMa=QJ&o%jIG^lf}b5Rb%0(4(*XO
z%lr8(Q<H$9$_M?=bauho>HT8nC~)3ph-<CC;zD+z3{HGl4g-G0TIuLz&u6rS^qX$4
z|EDju&MDn6WI0VZ0v?um&SF%beOpHFCkqRDR7l1ub#XvNdYyn`k-95Z$S<)o?|@v5
zivGqbHgX}Nx!;d3%sRRc{U3sa9I;v=WQMdJT9vqS6E)QOb9dY>Icnz(oNyWcTqut<
zLGexrQL~*>M~T>|y|~2vVGI3GXDV&U-Patw28p-|aKD=<wVTT7wdv*Q0fl>>-r~=;
z9<C#u?8HkK<lZ&nrl3ak%|`HF%J(wTD5tNVXwx-D5>JXa#GeZ<;6<Q+;Zv0gI$pyI
z&u4xBO9ci+Ja~o7Yu at O=@qf1MT~r#kRk5tCM0wKCmlWKePcb_1q9@{N#A|6bLwAhG
z;G`Rrl7Ah^*R8r`!PICQJpgLNo!l*~Jf(kWQ#Z4?6t4(jNAEG!99xuIFFTV_hRbvF
zqMt4x+aDG<GLq9iMK3!BL{9`i2l)pgf2RS(r$7lrw^NK%_OB>VK}*LL;Mb(n#-WKn
zyEk?OIa{i2&cd7ARjN&ps at 65_PTDEJgPIJ1lG(e47}y$GcO-`u=u&AwmYA9p|DmMk
zRK#NmZ=5RW%Sv&ypel}+gioUUs`*By!k=H-It*U|iVhGhAb2d|69xR-s%rET6w*7R
zI`y`U6tVxFP)FsSjz)8?PFuSO5sgnKB_vhPo2G}}Cyi9M01QObL%~6VS<Tk!!~pn=
zG~9G+D}J?$S*nPEOS=9v6dnGeZ7m`$0R9yQVoo4cC*+z{QV{CI`~<YTgglrDRuw8R
z4^zwr3~;BRzFO^NBp_fbFauK8y%P!x;D05BEE99bC9~5MQj$gXfoLbnF2bd4%WSZw
zZ9IaJnNH#)8l=@M2No_uIvGc!&ZbF3QcXk3w=ES8nq%yUZ5nPFLQ02%?LtRC7SQZ-
zEvWvq&A{Gp0*j%JfQRtAmfqA=ItU at 2SJjWxcmJWVuVaPhNN251u%eh`!zN8ct2Hi2
zZs|TMVh5cWp9#GT?c<c~bx|<Tv~|k3*3pXuP<YoS?C%cxjZm5L${|G-Bt{*9<D%R`
zQqXT7c)pKDMX{a-Mnwg51)J*D#}Y?SQ*+l*Ut6j;+6qY$301?<;R#tEm0&SSR_y)z
zG)-z_2_=0i)G<=>H}dekQinpV8H=k2Jx`io&0r}2A2t$<hWlYOg at 6MSHrW0~{2QIF
zYnL!t3!q&=s}l`E%@&n(yxHexKG$kSK8guBYE&|1mhohEH$z1ewB6`P8m>Ehh>q$)
z9~j~MCje5-xTf|mXlZ^00L81TmP|O=2)Ig=Gc7)$a|wxo+o^8|5!lHJQQFgG<zsC-
zCAPr08*-5o8W8u0FZ#&>OHtYeBsO9-L8^FIQ at 8b`8T$tS>HM8jJgx9(0Dne)qI%+T
z%Y9FKPkiTi!U+WeLn#2(HUujqL>U3WA%8VoV`NVI+p}WdY+@%x#HnWZC0OW;bSD at z
zD*;N3$O#U(<;FpVq7I*lc%wsxe@!JcWZ{uz?_NOoLrvokWKng?;bm-VHGwVuiR%yc
zb0DK1N>|TW)Byf~8*LVk#bOUk(=d^!1+Sip7cf*pv098=y;g!x%^VZL#r{oBmA5=)
z3o2dXl#Ls-YlPy9l2YQT9>~UzH)p)aM2*Xyq>YZi!th!1x*gRmYo-ESxiWUBYa0P2
zoiI6u)%a)No)|vku_sXjIzB6O9FJY%G=3M{IGuvs#oFE_WRQ+-jiL5rZTYe at RtzhL
z?X<J#Irt5u26^{Rj7 at B9UPr|FRd=i=Rw}Rb8M_AZ6R3qg9q}G5(zM8MV>9O at i;BVK
ztEGt04JrNQZW)=pC7=M8H;qvGO3fI^A at 4Y*m!)|h9^v)<8FBXb7})9Od|s;Os0e$>
z-;%#NY-U$|X(T5>)0O3Zam7*I28z-)Hefe89_}`wn#+T6JX}56cY&IU at wHIqg5%RD
zFA5)>R^vu7UKs<D=Z7U}?x4r4^U|%U+=}4b0uZV}jj?>TEpD at Xf&A)4(7GMpdw-bl
zJ16nW$EmGiIVFTWdzK at K0EPORB1t?$c|69-(%M at 21v3#Hiyq}Ex$e)A*mow0c!@I~
zc9_9iPdr2{4ojD-Xpb16k<+JLqkiBO${^98URLCw5`NLKvz-3<mxGty>(-2s0BJAT
z?ACPM&4E&zw;y_vyu}W0SLWh2WK4n|-*&~bX{m`=?=m_T1oBVFD2<U}iJfLlwi!*<
zSJlhIhFuxxP6}JE^!PLLY^{P!_02Ac4BDW0LnHnIKY*Qml`cyrP$~!XN2aj}aI@~o
z&+bk<^&7?bP)C||Y at qLHgASR$kj_f^IaYIaVP<I5+QcimKD3z;uzF#1U~;oCS_gGB
zLvIFSh(0W-YRVVwglW<qOnlLjscY=o%A6^KA8q4;aCaqwNaIAX-e at +3^aJi#vE5v6
zF`f*a=hwSI6CKq(cXPR&qkZI2h^XiC{)=wc;~VMh_C+HNqF)I+gFa@*$z!aWEG00i
zFsV|vilWfCKs7>37GiLO5e1azU)JJMPLStc at F~Vlq2fqebt;mR1d%adc at g4ElVklc
zEG7%`WfB#4_AsQ*YGikB{0xw7 at uGkpS0>CE(SEkT`(#GPQ+n6C%Sl1EKlue0-tdAS
zTCPlnFGa9SclK!&(b4ncu@#U|Nxyeb4z9$p)q)BC-AS at y`@N@|yCs at I7U3L6v&MW;
zaQZyaDGcM$Kq8PL at c#5OgzM9-%-ONRY4D~RkDuVo_;l?jHY2ZOaN0|WNEcg^G16z>
z1T39J8ZA!>nwe5C(au74=~xA?k7DP-h<h|5A*1t~gWkFBCAvbYGH9sgk!XRjx?DC?
ze;eu^Dpw-E(m){?y<fWuqB?fS9YJ{1a1=Z=)0_!YX-dLCgehBwmLgH86<jw=KN*{I
z!ZeFB_3lVECpmw22nVJpOZA97SGP)QRM;NOGGz&UI-ot~1*X^lw~OU>Q}4g%?An_h
zb~k84RGLNSCe)=RoJD at Y_ICD>XA6k9kMOf=WQwxW`_6Hi=9zYLmLrKiD3SuO3B>VH
z4gtidp2cz895*;xSS_`~nK<7y%OG-8f;zYfHxJ8&rzEmLa=qp7r<?~#aEo<VpA%6G
z^Ocv4XID+xmQKH?37BWk)fEbNPg6OGc0P9e7fod4zXq5sMkDEXoqZRnI-8v99{9KT
z3qgH0+9vdC=$HT(N3t;i^pzWT$OngK5HXYWqz*FDWdpo6b__+DN;gdqyYgp4D%TY6
zDDO1yNbgkd;4VQoB%Wm><xIwEkBrC-A?{zVPZx3s+L4)kL4rHx&QSP5yyHmuVxb%6
zj2>qD^aGCVOCBt0oXM_XGqWBilz(Dwjcj)h)6M=U4LTmE<!p?&)MdYF5h8-ACySiI
zYchY at _ni*FLZ;%$2&C>*H1SAodO?9`E?3~z1!t-p++ at ERHs?+s8CIH*3tfdwk`Zxp
zIHX>pyF=2e+7$UnD)Wx{h;q1B<Djg5!6WOYbR$>H$BYpYDDEUx&ikF7mlq>~kn>R!
zW6cu+zrVHu3K+0B+3LI*hJz@$%Glae!G6Qc!({o at c<z7f;yc2bYP8x0w=XErVkYj{
z;i%3}1KS-k0rIFRDFsym&veU7Ed7K`S|C9goIV3v4t|B}TgIr;z{91SmF%CdLjCMk
zOJojVQ>059tCVjDMtK3%$_JjOb^OsRpAc|X)f3IIQWfy3DQQv8fw2QWr?TdDRdmh?
z{pljKf$7pxfyP#2Lz-8tQw|MFY?R4 at C@5z*Q_~8zmp2W1>boyQP{@s!*4v+vm4;92
znBtkeOnP{Flou%WkudEs at U<);8Pf=18)cOEdHrfFdcXa=GR*AWM9a$}xV)y~s2JD`
zE%GYsV=v9YfE+hdI|lp6ULo3Q?L`IY^|TX}bTW$@8fT&8m1LQMWmefHrxKSp&VVyW
zjh|gYM&9g~r+<cyfDQU89ZZU`m2!0Uj-e7-NGYpE$j_p{(eEjmw{y;i_sU~|oR(3H
zzh at mSk%72e%o;kGye~VMcA?Q-a7nb-4HK%p2=St$m~&xB&2V3Kc^2G<EeO}DWTZ(o
z4_&+hW@?6Nae3m23CfG{V$&gB|AsKafIP&pI at R-ckk;2Uo4h1*P6g0pdZRKZX`kOY
zetMp<Ti at H5^q#R;Si1jhqd;sS*xL<pXTRp(_1~8|DIP|`*Z<VKo;WG at 54tT+zsQ<r
zK={>@$LqK+b<5%i^g_PYb7n`uf{`w#GN=l+aWi7gg1RD6sG+G9svfkEzPe<d9d$Kk
zytHMiz6QO)h$f!L)#$KD>T%0yt<8*q3(;&*JZQL*aqTq#`;`-J52C=%$F;H9|FfF6
zU+^#mj$>ZvFv!xprT`g_chT8;B<Dz7UrBX?0Jr)8jtMa+JWbWq3>uk8JPjTK8aaG{
z at Yo{CQ26wBKssF4GMBj&eFoBG)}Y7pd&q~N0C<1kWA9q at CK%On9deugG_`cV&I)pv
z_im0xLqPb{zCacYg!2)HyrO=9Vqa>lhs7_Xm-dQLC=9A`F=9)MHy6C#ymsScKB*QC
zPaUVDCw^<NiRV|~(LCffKZ4&#lVE$SS$kvp#?$uEw#hbjn+f;SV)6#t>!H&un|jni
z^zm)CDyNo>5X`{7OUHJZop$8PvHJCZpjra)q-2SDki($LKIgdInDqo9!Vj0hM$8o5
zen;<YdZ!ZZckrZ7<oKiJtd|jN-%9KeJC}hAAKVd#6E5eVla3)Phk8RKm3>hIfpy3}
zdhKF%cSxTSk>%)MOQfWi^IX+HRBh(k7A_{@8GIDt-btT`5B(#^iVFu&gO`6M9}wM#
zJ9)+qLixPzMd%Jz_{)6e^-YsT+SWp*9L2)Dj2FPZA)i9h?|`P^WeeNXFE`IudT~{}
zpFb0 at dX2JU3Ngk-)+YH5!=xOcF6Ym_?axeUL+;BThv^3Zw_`JWSPL7a&cq-GZ4L4o
z%#Nfayh*sD$mWE%I3nM$%pN9gfw4J-G0F&`6^ka>*0>EmIGPBFTZgLuD3`E`Mb3l)
zoPdd+wI-S!lFS#m3@=+ at J}-=mEtK+nik~W|oR~7i=4bQvb)AxmELCqV43L&SwO5YC
zY)l=LL7?7Z*N3B8$P2VIlTYZ!(>H3sniw~|A+b;9M at Cq#&PctO@&wffA~W<#8HgL;
z%p($*Q*R)tZ!Mz at ge{ztz#<Sp>^~4bhbk=8Whbyxy at WV%$vODGtdMEmuIvL3T<X$;
zf=c9cp!nT+VvVO0_~Hi at 3V6J+HqeHdkgZ4-0gPIwAv?k at RJ}vR6lw9)OGRa~Cp00=
z$<`%_nd4D&yqM4$3dL=yySd_M)6)#WRmonhsu>GWYss+Jt!yh25siLfPxAR9)SISF
z`Ic!O%>_CgVa#Qg7}nS0uJQTnGNOf+K1lUu{7yS4y?kv^ym6CN^}6h`sWDzGZMieq
zdtKGoKKjHZ*HAHm2PSdFl3{A_-7J!xs?xvK;k4fzTM8Hd?M at iNFJ4a&0jG(KlKBV!
z-R`RDlSyi_c616Sk7KChac48(Yn_$u+q&HLGf-!%sPqWta?jIVFq?JH%g1YQ031De
z1>8zUf^Ft9zsU!_tluvP!9O!b#jUEATGkS*7tNG?Kpp^PNXm>VCp>1jt+CNnBai1$
z-rwV7v{I4|SfudK-RTB%n|EOJFBnS?uw8nnu17eK?+gI{qzI^+>|t}LX}sy^y*jp7
zGw}EOK4N)BxRfeh7wf^USx{}w!C$!mFW~qX5pvMnG8dfTiX-c|{Cjqmm!i7<q${&3
z2jfpQq(rU(oK<Wpohs14vkeTvXO?yaJ|2koa6=Kwm|&qen005!;EQFq6>tW=?rG1E
z1u4%L*46`Be-tiXU_T^6x?lWda5NxyixS+%^?`q4810g}<?e`Ei|_OxP!K4Txs10-
z>XxJ&s0xKHK^jD(*rQ0M4fX7I^M?<|;^O|Hqx|BLI$k4<J^=6O-{V8VvS|C|_BUDi
zU?!T1rn9rAWD*NSB`;GWZ{)Xz21yq-c)*j+=VA8cFO(V~)P>7y3H^1ntPD(PeUkq9
z5mOfp7u^|>#wlGle~qdKUMVGGKCYn+<E)aJiidBw=R>|1;GEDKf!G@#zC*tphVA~B
zFNvLi_rec_J*uCDo4tUam))PQ`+WZn-`~MmE+5<g`FutF_1USC`%08)Wb4XZ)c|WK
zt at J9CPpOausG3QmR+E*@Ky<Ziy;8*_BGi}%buugr3UB6<23&Q`8O^VOO`0*DtRuY(
z2L5pmCIYrYm*h<JApQND23&?_9!K(TgikJVZklEdSyyrO78hyXPpF^4RDQW*JBCzO
z0seZQ0I8LMU&x#q-<qi<0WWXkGSYcD2CEXvtA~j8R`B}KA3>FcS*TxtqG0>q&0^HA
z(F~9!P0Xi;osjSPT2S$wRC|=^1?sg6HcF^jMN9%K4#;*{Sa>@&=CZQW0 at Bj*Evf8L
zG9Qph!YRX3zTWAv0$R$>mf}{u78^kDlWOpE4>b&UKdcc6UO<UWp7r5Zu8|<6S)b2O
zd4Hjny=2d$VL*pTVXFh!&o?1ub10rf_aFf`j_LiXxSj+v)D63Whrzsp&1iQHLy(3=
zPs$`DOT&<Blf1Hn1;D<r*b4wsu`R==Eix|Vc~G>erYyQ)%sO;fHwzvvtceFil_$AJ
zurm=!OgoWiQO$m<g!dvpAphxD%$aUPhhy#~0X2`(X&5a~yVM{7jhEli9e*u3xXGt5
zfi{11k9T?-yxZh1V5^WojtFYLdV3<5^F33yHGB%vn;<f=vO4MEH`g=yRV^9{x?yU7
zvek}z9e!ZzoU)tdW3##D-iSHekmqKzeiYeE6qCiF-Gv{M+A(T!PY>Em+qyr7xa!cB
z3^aQ2^-b0ue$J_R*08CG*P)q~ilsU0LV}^8`^#Lnoy(HMJQ~w4#TZV<c{gl**<bz^
zbvG8Ioi5DQiFu5ll^7@&^xw7_b#a%|ak{tpY&x^}{0{&+K*hg>Ls*vtjT=(w+g%Ir
zKJEQ%Ki}Qy^~YMs0=!bL>koY~eLS7!WWtkal*)|ld=pmZO-zdzDao3iu}+wefgcLI
z_cEmtG+<%;2?zs6#ORigMY?2^SiwldEU$1)Fq45Plb)Uo769=e)Oz$#Y;+k=Oj?hQ
z%xzd10$xW4!@25BUzKanj%}OR%V^I2(`X#J-Pecfe)tUV0!u$G#mvz=m3{@u(XcOl
znTj<(H#E3|6u|cHvNf1e++RYSw7~$Yh`=svoXYT=gsh?!hK&uldJY at rnppSI;5uQm
z>mVA9z8eS at 9z7fzRf@iuybhF*Iw1!rjo_-E__87Z)NbDd#_vB3<^s^<!*@S?7TrW6
zKItxIJV=ee4Y2G>U%Fz|&H7&M=q1$AAJ^yL?HDGJeV>Z$oU0TD*La0Pf%Q1E-exs-
zO|F{AaGT(nB>0dB=RC)f5pXeK@?x`z9vEVnHFL<4D<6Pq;LI7gV(6?{h7g>$xUOon
zskN$Z at hk)S#WcFA?!@#dC+e!0YCpq_XP;^7=Y0Y8182_my&!6Cd*<0020yiN#xrgn
z(`zeuzM^)zhubqVjEx*N);sp at 1x!sPsW-aKhOzHqdNkbQ at rmof-tkq$?T{E1tV&Po
zZCcvIjQw)U_AkEJzU9k~PxgS)@4f-0yXGAQVsssDhqtNQ at M(JM_G{O+Z at Y5k>y6)j
z2a3?K at 4nqQS&DvvlOY0B8*mr9=J~qHb{FhLU1$5T4u{K;S$S4rl-zOFblBmyu2R4J
zStw;Y1WNS%(RsVjp>MuJhxW{ahcBb2KKl&hU)~1X+W@#tiu*-6c_T8QW1t9puyLx;
zPdBlgC3~dniJfjBVUUyz{<_RH6lyc$PGVHR=)eY~1SqBS&#mZm>!?w!AZPR_PsQ%9
z;EkO-;qIN_wGm(-TC@;+y9BN2C#G$qJRWOBPq&VQt*s#0d1?Fh9bePeckPr60QGPo
zk}m<H(bgd-fdZfc%lylNEk^+xaTvuw*8qJNxUE7wV6BZ7P1w6<;`n{50DS5cfI~l9
zy}CmNWnkZr`}U28Cjo;xPVSyazw%oMXj at J8ZF~WLcM$$Av4t_pxrP8FSi_TI`<oQd
zwTx4uhhc*TtvPaJ_?jc%EnK~5{qSMy)-a1!A3L at hO&W^OsoH;yhcmy;pSWl51e7cE
z)vuTbSn#(!h^Om4Ue0FRLxL(va9h~#6<6M-?F?qD#pPScKCtw;5#77TJGv*P#1yR=
zI(ThSbSgFx&aYn&EFgF_<|(mj*P=Jk$6#T1M?y(Sg5xD=OwpCKYp)c=O29%?xEj8*
zhG>}Nx5gQ{n%Mq;!F9qM4{J=6QK7eyCX>N!8*e5yxS6zGh<4R^Epd_CJ-5l&9Zu*^
zS06gGW5O!16f9e_bSZ?OrDVV|uzdBhWzEHdI&%S7HDSlWQ>RX?UZ9+?>T>1cg=^O?
zTwDoPw{(}oGm93iTeo15(;+Vzv<lR??$t2wtQxOcu$sURe1rQYP0-0TWE3G7GYGM3
zLry_n5N9vKIEjh}eg<nnRKMU`Np`dsPH=PUaJnr6xzqE-Zd;9I?3K5Q8_~b(CC>eB
z)7{+IS7#u at bidN=$zoxwq5;F?Jf<m3QCdPdP^A~N{9tT?*d0<~EQZ(HA*Lw_U5!57
zGc958?1pX2LF)`RmT{X2My=S|Fne(P^xf!F*pp__sjV}&%ska`D>ft~mS#`ki>)9B
z%c|Wj8a^TT+FhaCsHjdF4kjdQccenALI=Cn2)n$XUF;9)ZI(cwQqn6|oIejtZ=PE@
zqo}&imXi~A%}}VK!k43~@4SVsJRTb3tC+TL!pW!etBUFRH_>~-!>ibo%wq?Jpx1`T
zd;&vPzI_2*1?CHHuM7+HmJI>%Lk=9vOd<8cw7?C*a3CYsWIWEs1d|a3%up1DVAf_&
z19p{!Geha_y`T>M3VIycx$_X(<8(ti_U>Nu75>L`DB~Wltz8}Md+SqG^qRW5$88EP
zKR<@|^TT?~7gRcz!w$#o_Q#wvUZ9Cir|$@0wka8Nr*S1FE~<pc$$c!@R0@;fp2YyE
zfX#ev=FG-kvrsSe8hU)K6GnQ?IJaWu`Ic_~cJAvnYt}QfX8{dJ07KR~ofkbjZ{37X
z&3tawtmlvy3<+<m)EbBETJa`^(SYJ2czh=Q;BzzKI2al}u~KUqvh(pb-+X-efZ}3|
zhk+O_B7u%cV3sZ)T9s1PwLu29CrI!+*G^D(_Q at bl*DiPLP7fiw33gkRq0u~ESeUK}
z{OX^_+TTMTF|+gfWlR~~v=jtwpE+e!l-lTHvbK)C7OnKRj-ENyw*d at Ke7vAALld~X
zun0cC<@FB_okAYR+UTD7W5*AF6 at 2p2>>cZ;B`-_u`+nJ|$f%}q_W0!Fkx|w>@Db_L
zp=b&B9Im at vSgnt1D_F7`VP{#T1PgcK%Es|FY~)C!W^ce_HYz5wG~^`Cj5V at U03-%k
zoQc<QaCh3+kkf^!<uNm|ll!3=VEOK-f?WrnZ*!+(6KAEZ4l;xuldW8{c#J`H0=^8O
zZ**Yb686gJsbk;V_5PVjW4}b-p%(OfuNOnNH1n+iJ+9I{Kr#SVU+d^YuLBu_0r>24
zM=O)@-1FTJH9XU?-1*jTp!~(9?D<aLCTcJ at jZL6vB8OyJg%)US+Pfl`>;$S8-1JPY
zW%sIm?4{qrV5IXM&^HT!lTQOW8_aYb1X4-$-k<kYiDiIZ1D335nQ;=($a!)`%bGPJ
zN!9oXd-qNlUnL=7VyK+k$=sJ1eq=;IPNvVTDy$-P`hxuqysUS at EMutwH8srHvrNs|
z><Bl-!*I&!1StSM!zY0;`wuc>#ubdAm45)3PIx+J;`;3o^vo+{)f0h+!b<8v_5}cD
za?MV5zD-*ISc7h_>G;QBI@$R)Jk6%B83>&5Fb3TwM<IXB9s0lGvXFp9>bSFQ9%-oF
z=CI2!Bf{*FkAr5LMJXduo`f+>lUYYs3@%d-{m1yVOBS!65HWfF?sXFeTGA5 at o4HMk
zX0F&05)~Ob0rY5?zQvt?VhwwxV-xe?a|4#`o3;5eGX^kVoS0UifH$ENe9!gy2;F$S
zXWgm})3R4K%3OVa2qbV5nXQ;dXW+gUmWH^Z9Fn7q$4pa4Cb3AzP}pYZeBj>u`g<QZ
z1ad}2iemRy$J>2v`@=)qhW6^yUOhr>YwzKRSI3||tPNzhMtH}z_ZX(Kw}*#LA`jqu
zesTC6N9Pk8fltWd#d&#)7aP#aRuHhJsBrbdy!=JzT3>J#h|G%?<>xP2q(`q<K)~AK
zqScG?@|U1%eTd$HTftt(unxc%JOn((XPXuR6(z&Qr-P!kyjBX#6wP at 55R9(x09Jo=
z1%w2kb31`D_{Sii+JVmb<32`LG{CwOeH8 at P(&zwso(7G;(T?rD-ZXjv?FSVgokp9{
znRaZ|ZJ|L1C at 1h_sn>B|H{tSqgoxgiWKI|el1AqZ2=7v=w8RyRc&L)??gW`61f-L6
z&E#PSyZrBLcl0I&;dvThx89lMlL(WEmaflu1G*GIy|rM&ipuf={KX!NK((*3psZp=
z_u_&$9Rw&1-t0ITX37~d>~u?Mks(+l9x`O$kRf7Gkg=$H%jsc5vdy8+OX^6KZ=^5&
zQ$?!jS7|ytAhc{{Y1#4+Z#OsZkmY5iE6YLy!fD$16uJPS(KIkcq_n?0c*rY*f}kNy
z$}{%d9zAmH3@=SHz at R~|3>o~gT`5A-m`UnzHU9IBRH-6~Z}z7cP6ZfFWOS*VYN6Vw
zrPL1Ulpr4kAmEmAyo}b}bLD^EJ%8YGPIO(-_g?9RAUHOx%V?n122}K2fRkPzkaKkA
zc4l_wIb=!#)UHg at UBF6P?t5Fv?0oQn+~P(rja?I94`33$i>r`oY(W7w4UBp=JPQWe
z{57^fI?Hr2N at MpAv}-)8>j4PY*a8A=8d1~cj%~EzNwo3=yxeiS_zRww%H?{wRIiX5
zq`W(@&ppMl5}C{(mFeX&gN%0r`$zR=S(#C$(95I-xm at bTqjmjaWMYXzsgp^KGMUWV
z2ZXll^z_89D0DKpUM7<=G<^#;23P~|U%C=;@VSNnO91|h)H&sJTwqK<oS$D at fZey_
z47?T{=1(5<uM#^8Agv3>r#Pb*igjLq(deI_6sEirvwb_L41?Y@<DthTkUHbifb-X2
z_#a4n=uHM(XA{Yh`NIo9-j(6OLZ=6v>ER(fFDLJMxWSJ1!oYP}p(8ECe{!8CgqWs4
z)osLHVlN51m6)kWVeB1qWXzTI3SOeZ6oNH<GU=tq5`^$-fDgcd4_M#E_slj4wxDP?
zpx6hzN7dJlx;14K at nstY-1oxOx4xwd$~)dG??%fDfO9f?Y5n at GOIJBhtX#5f+mbaf
zXZ6yp>wmlDaM0IhG&as~j%l4bwKWcEq4Ps*_JiZNf at 3fqJE$zGjOs=3w at bGa+%;UM
zcTlr4P!0YsDEwWvIoZ4(Hv!uXWS&$ZvlGM;@JdB%DU6(5NXfyoLBVdG$%aq>Lc>b}
z0{tY)$da(ol1PQvFF;cq5e7h*G11d4C>Wa#ejVw+2Y9u&k7;k;njBeNSsa=65uA?-
zHMT^%CeR+Bi35+ at 5|V8aZ&O-+DO1|5FwEOSsxgO#7lwruhKHIpGI#H=!fyCheyYhw
zVoOf6(+nC79tS0DL)!2kIuh9}yd*TVBs|@Y+F5m?Eg-;_X!G~Suqnf^c^|_jkP4%$
zR5js*CWn%+WTIS{g%HQQ$t=YhI`M_U1epY|f+39N&?;;i=u!X{jb at Jci7PR%9ApuJ
zLrJORDkB6Itd$5i=|GXSc3lX#9@$|Rffeqx at ll)HBNhbJddK7|yi6_jt;XJ5c#gu2
z;rM)yfY2-Y;_wu8QiQx#J)n<%j%HxF9aTXudaxNu0b^DaM}<q7FMWHDn=uVN+c7*o
zaWjZYA4M;gDg&cRLGU|6Cj{%J_>V(hr$y;w1AWj4eVk9ADi-eQZ5ouV>(lh(*G0bh
z1s+S8{VUNMljGt5?Eq~+G^1chk&fU@%<bFkE%q`c!Wdmj)sZoE7c+NtvFriX4loK6
z??Y)9E_EVRCr-Ig>Mm|cg~cdl*Ji3551&tLb|f^%C-isNn|q4`e8d4_vBt++BZhUi
zu2y*NSZ)dlRD at L(`)mAsR1qbiAsCk=YX88(>QH5%$+TjpS3Q%Sb93snn^_qQ{o;sz
z@$vme46xgQx7gpu$6xG&zZdY^DF8qM29&Wx;iEAXmRGFCm?YDfD~rRziYv_;ImV;a
z73GB{jaXiS-rt;<Fmuvl<7dnm{}>4(<@N}<*+Pw{=Kmi_PXc1%rhVrd#I45~M^@+E
zeM|elAY;LH=cx1OOQ|F!Gka`$YD%aE{s1+hDJdCavolkqQuNjTniTFh{@QEjc`xnw
ztjvj7T9tu at kT$5aSrap}#%sMuJodXXx(MUx|2xUd6821fe^XvML*Zp-=>IE;cDAGh
zUFzN)(`T2wAu;vH?pPG)tg!6AN*(5sb1FR3 at lD6?$r@&6uU;L|!-uo_-w`v|F7A>k
zaa1}P2mO=M1ZaWjUSR^;|AzttD2cdG1EU}>ApCP;0S&{V1gKq7L74jmMYtUw<96t%
zC at ddST>Kv!?^e0~jts#69i1|O2nUtmkYT|h6jL`%)>YVTW}TqELt2?qR#oL2&OqoZ
zaQdy at Ic*JtV+N1(@8=!U<e6t`iQmh(DRRQO-o{Y at 9{GGKcs&k`<%%Pj&&^Lnlr8rG
zsNKcS4Py`RtJ#*)fC|9AGqfcvY>NMc+v31jT}(O(_0{;;bTGXJ{p4h5L9YjQcy<(S
z)1TwTAnAX?WB(-c6zY_P>+&UgQ5Zc|%A|J!vzYY?u}W{VOU(K^aayP}Y?Jr8a)UE(
zwWY6X46C?YMVq3lrkpBrKLwI%X!hbR^bNY6P*obTtGDt)FZ8cf+-jhqd(OJhE$YNs
zFntFt*o!AAz>Q)rP`)k?2$@o0aY(H~P#7^!@p_l~gL at 7u&cNmQAb14pT@%I}412FN
zfD?`Q`oaX$hbSePb8a5 at YT3Wu0`Jo>wdL8oMD%O52bbUc?18~X_5!+5>YEE}@065^
z5c<M-H51-Aa{TSKNVG)!{x#<_ at YI&oruGp5D8uAea^d5{xq?j#dSbY|jp5=(BEq@@
z1;rDmS$BqB1(Thh1^FOVE=)u;1ej&_VlO)VcxMvUHK$gK;40?;XFs?B29hy~YncD#
z;qN$Hz8)&M53maJIxeM6M-w<J^k%!nriWdVZ{)r(_Um$FUVW)qM2}0R3o2#b_Eud8
z$@{UHE`N)wqWj%^zQ6k4nO67e61q~8d>I$?SzP?+&B+00GLz4>cyU1Lj`j at YxT&C+
zMqj_4o%mISR{))tGpx+}^%iWs(;$-q*w%d)(^s;v)=mjr7(f)LE)>vrx>eg81PL4*
zR<JN$5^rqMX(Sao3DQ=R8B^Tq$zV$Lle!q?vc4Eas>9-|1}Zm~sp<1T*Vu**lzBX^
z3>A;<eS#0F7$BRM;c at o!#c3iRPRzdh39>JkO<yPxzb8UpuE)5eZytRhGfhOlb`cEd
z_9_}aeby<P`+K>M?+OVFI`k$8x-~*oTP}<fV}8et#c)=2!r5wfbgdQyod^X(&bEd@
zT3<h8&V|XrZ#lo?oacAHTFGAgx*>M!;2|GZbo=cy=PY>m+<Wh|MH1S$ivt(~lnTre
z;~exV at Jo*KWiRLX;kegFRf(MbZtz3z`Na2$^mRV_0mkayoxV>>;yLy|>TY4q(N4>Q
zfP%RB_yA#ARc3b(?`^9K!qG%su?eGS0wLgjA`4dN^=DhuBb7lZp}*FP-_~{ep+8-I
zfndkKUl^eNCCh3`32F+slK1@{ufb#7e at fx!rj)!rQmo{S6}6joS9v+ at +?c`Bg8fd}
zL!YVud_Zyl`@#9#gqb^4+~xShclvqZa@^4_0gJjb=*zP?iC>p{aU%|!&JL8JqwC-B
zqTMfMJ>FmfX8(+Fvu8aQ70!JWL%Y-Sh80H~?;(Ee*7<<mbd%EM%X8&6;xNc5Z>+aQ
zV6A|9VAZbCbt&t-WbeN#6Z9x1*dTCCD;8LCCB7n_BxX29v<$w%i!|F}eAvApL$n;8
z<3yURu|CXRP~*A^*ha1*c0YF#9Y&9%!zZ8JP0uK--UXsS0f^pNT{MGDNL$}Def;Y?
zTdlQi3vcwkvHF!$==`lCB at 3RtRM-9GNn6%A-&&SAa{XZx7<;%+??Zk29_roaaBOH!
z@$NNMRcm$^=Y+b}S=|0NJkc4C$f_c%x(O2%BD`89uqB^=IYxgmfO$vTRLijMy8Y(d
z7Rk&Cn(oV{GZ#DGXNKeVH7-9;msrMlBZQ=p5W9w~&9JB>uxAf9|NY-jU;<OF)vG^F
z`0=8ucMbb4Z?>o9&R^a;IJPo3FU;@OrL~c}XQ<MdOBk=m-Hv9D;%^fM#i}GOBT1;5
z#OSJN*Clkqqx1{*cMqGZ%bXvq%JRFiH at v2lefJFW+l}>M+nLEqI+5|*bL;(i at oww+
z2|6Z=dB-&-_{{BpbEN*h!YCRpgvGiZi8CM}!ISjCHgbVAAgzrX%%EFeNxvG}o$lD-
z_9KJPH~o6{r0dvsnOo9#72D@~C&87 at +BXe{CyCRUPu|?HfqehT+rQB|_Nw6BfCals
zVzpb9GRT at GGKoQAH|tJCvh?0%pUE}OqjWsjD%vuZy~=f at -JsEJ)T1ZOUb=M=ZEOOu
z?e0Q-+wma=e^1o)J!7Yfgr4joYn12 at hjO3<G9fHF2;(5oK=vw&qPM_XO)LxkwV9dk
zT#F_x74`txkC{On{#J;~w^b!^5Zy}RAP3=_!jZ=yz^v8gARe|D at BshdoG5lIO^=-b
z#<Ni@`j`!4r%i)Xrr{I>qmMx_DfF#mxQI_i3mkKpEOeP+fMg-siIa at v#auF&7{4F`
z1ThTyZ8j)&u0nGbfL7PKAGQ?NDTmCZnt0-;N^r?W7)%oAI<pXVqu?}TAWJwS4y$B^
zn&9iLAd4P!g13m>29NJPUKa1`+0+Ds6DpqEHG|e9MlOs@)X+1wJy{X2g-uPKYDd}e
z?f2ZEC7 at 296zj+pt`2rS2DR}OPaYH=%XP#i>FWS0f3hMW7<PVISUWTm*M9 at 9KZkor
zPWe+wWd9>T6eMAl98sVI9~+gG))NOC2W=IWUyywc$=V45YBG&Swj(57Lq32gwh}AZ
z_R<EDlrhn&MtGx_Dmq$)W=BLvL}o{V$gIeSs7U_WTOJc8c)WFO@}Pk&Et9Xk<vC%3
zC%$SK*fMDHu+~<4Yb$*$GAbf6D+)wqMd3HVF!Gtkj`Bv5!e1s29E4v)C2x6-AMg1V
zID%gtIB at c%3*<u=Mm-UQrh=(aPY}BC>Rg}Ij at zimdZL}mqKdH<JC<5Vt)_NT2g#_F
zB?w^3SI}D0XEsQ*1YQtzkk=c`Hmp{%3K_4kVx2e|0F_K|8^y|<%C$bqMB7v{t0j%d
z6V52Sh|v-H0OAKkn*`D)4(2L_inwxM)`Q8xW+q%nOQLEhI2wNizXMZ%nMC$*DTgcu
zy)90NSV6)pupF<z!b~fnL%@PWO>tj0c0bzAO3P1)qaIU at a0DI_)94*$lOzI2&nV9{
z20SK~I|IMpoLU at E89}d?u4GG9hUH$z>>Fm;4KSwhno}lsA8lpXe#d-hmZz2b<yCUn
zkDV%|Tfv6cU_c|Bgb8s}m;tif%WB;}Shx0aHx^xLjp2I2o{f#H+ZW2{foQOs^QjcB
zHV}BT?Rm4~d32FwC78N$u^?eZQ)4~QX-T^q1b%K&Du_1v(ECNNh*)%CK2R;~k8VoP
zccJp)EU70*VSUi`0e%TNTc-`a++D;bptD*<2<s0b{et*_8KFrmYhp#v?X-s<0u63-
zJ1(hJ%R&V at tQpS&orpflqaEyQlgQHM)xOs)pzl#2chmGScvOXRSl`65asw62Ex|bN
zK?Px*f>7?=t=NeHkp|2TnVIKQN{3dV#ma;c6R5)MP!Q$EOgpe*EeA at BEwtG|=2v*y
zj1>wye0Sf|XQu2!{?4BwOqHo$`=&I>4IyK}Dilzd5XCO2I=JiYw@)Xk)mdle{$%X<
zd{6JnH1+l5CR1vf?TxuVnB$|tb+FE_Pap#IPZf91FI;XIjBXp+<1JRVC$#>3R(Nz<
zy)xI+k<tWucSjAG8Fpq9Sia1FZV%SCM{@3i(UuahJwxk%ZyN)sSSp+9A&kmuZK*&Q
zpCOaAyv;RfCntNCfWO{qx&c%=e at H*4jx`h{M-Qke8WA&Pohin9fz#u!LgDR(s at P46
z(0IQPtFLL8THaJ<%8nEbMNj`NpxlK?2)1`isU{2)SBL@~X1p%P=QvE$wmX5#?t<uV
zz=x^zY}~)mIwUv0+19JRy8G}^`FRE1LVH&i4vn3*uA*bmUxX5T4pt=BH+xHm1WGN|
zNJ|~oUqZd*eSJhVg>ePQ_iw?9y#p(V<${i~2^uABr3sDb6?&W2_IFU`_~)O?504+e
z5lu%+|6=p$a&#NaM`IcnFYb+I{yl2BmtHgiN9gII7X^1`HuxSCA(-(uS`SZwf1p=j
ztnY%YyH;6Ra*G;l<qZwx=F(gw`m4Zrt8oP2Tbufg^!6DUBu$S`NEfM5#ovR<T^w-7
z7~r4^h|dt{@?J5?6rH2kcR}QGWcfRYG24-y?MTebT$_ at s>rqeh4e_JrEE+v);hyED
z;*K4El~SI`7?YkpCIfi)S9<rh at gbx7G`8+owd8<Thx2bD&Rx9Wu<jHkM8ni7fL^Bk
zI|#BBLiGI#gtj5mUqy(gEzXnB&pGjLwvWEkJ~?Hk5-G~@*PHd)Uu?^zzu5*((EX;c
zTPQK*hg*?=d0F`#eGe;lTCDETCOwa at X@eQ7c|fXAb*glB2P;(xN}Qf1!=PlrB(Mq!
zn_N)WaCWDz7U!VD!0beAK at +!8jP~?lPwPef2ZqJIh;I6?RL0V^J7FK6kV)PLeP8bw
zzYmUhfuULUbvLHeuirIz1%mn7K>Bsxpf}jvy;v4~)EdoJvRf)AIUu^BU~TT8uOC}q
zjgGIA0VW_CRio=FbN at s)ACRaT;g3ERrJ>{EPz|UL4w at S3nLwi*qx{^_cGW0gJj9_r
z?9`Z;=@iA^S&t{9jF{6UW2&yFnu!J!EF;5&tZRWFSu|%?DKJE^ZKBZH9Yo1D=}B-6
znMp4U7V=mb#?}m0c6BVa1h7tO#h77LnE_d2g0(5Eu-f#T9&6JqHhjo^2|dprEcmGp
z8ouoWjY_|)0LjnIGg-&`CjwuOnRG>Wslv}W_eXbTWu{7FX|$Dy;Iy at 4`ua78dfz%%
zTIjhzL;EjwFIoWpGl!c-bM1zdL9|kbUgn(FGY0u}uvgLY18;Ju``1Na_U>&q(D=iQ
z74+cqv@(cx`#xfx(hL1_fe!$arQ;_BeMF<5=SOcWPL7)xtNb!4OZ{ua59nXF=x^${
zsfTGX*VsJJ>{S=a00Sk=fpx)+%z;H?O31`G)SDVa{M=<ioCST?x=JyN4ZmQS-A49@
z3Z^+1qG32{Z4PWW=n0w$F^KGBND#xDHfqT_H9h1NCK?;_W*34fXkO1N^kyRo^G60b
z?DQJ2`o;h>bNdC<>x)J(cdzq5pzp at LF`(sN^=Q at Rr_jWI*26lGX!A`h8|sg~FJA8F
zUtAX$xsLu!IyN8zZkwkV(r-h at 6(C<m(<Ssy&T9j#E`d%C<jH;atM+i*95f$<bKK1`
zGY2p at S0A~EdVW;{TDQIr_IzFGl%f$=dV-oAuYiRgSD>9wfT1~kBj`8ubR05!<yIp!
zMf|Q`FxvI0Ry7^C*ZfS!qU#DjPau^9EQ&?nG|D;jfjd|A?LroP%?^l&?OdlaLs$>3
z!rHh)&@+f<A+|Xmf-JU5NpKfTbR3BTYa$Wo?AAbxa99kP^~Q%F{}Md0v`>$%2f at V$
z00%zV+N00X6PVA2(-TiEoWjwY=4_lYb<><pG&g18sW#|Lei*VppMz&#VrXc32reHo
zFP(+wo<~0gyyE8bVvh+Mz}~%J!-O6$`nbK)=K+{e5X4fD{SCL-SMY_kVALRSkc2Qu
zG6z|ILu++(90 at -W<q8&0=qnId$O&Ax7EJX8GA}WMZg_!by%x=mVbQnZl}PVZ1%7>O
zV%w*a(zVecYFM#m=jyPWDE8{&ZSeEuOf!c at hAeWc@df*7!>r$0(k6W}scmF()Yasy
ziZvA#MSCm)zh8y>qc?j_*cmvebB0S8 at a-IF?Ti5jI(LDC-^t`b{^4N(feINu3kVa=
zoV(aFzrD{)y)_kn)phIcL;lW8_S|pQ9n1_YKkt at Db|H5BL5csRCg9}V^6wT0hdio&
z9glU at 4;*+z{osa2WOjIURa)>RySLtXR3X*<FVy at mwFuZB)uKn|{+D)w{*TJ+^Isaz
zJ<#?>Y)K9H^Q|}jAM~^H at xOu-Owgln_UT7tKI-hhA`kx%{KirfsVV;l5d8lMvgpho
z^N9Zic%z$t$ab(if4C2pP%Eg_zuybL2W`p!5#BR~M?t{3@^|3!ze*vG<m!()11lcY
z57qy}w`uATnYZ4%hYypu2!NX|%vbme-XNAc8&paSKrY2+Qd=A}=yeQax*P$#vEgc>
zS3Luo&%T1zqc*humDfQt3ON9hK~Io;;3#@|*KYKW!}JPWvNkwbr%w*jCb3svL~GCl
zwDI(5&;(|KmKUA!{pghg2SC#Pc96DjAA0dzX0leBoS70F+_k>`-n!ZUOzjL^XHg)|
z{%5P|OifSLcV7RgYJU)%(s|ywcCxGfeh=2&a<6ypL-m7+L8Jn~T3mrg0Ip-zopOTj
z??Ymr{ZUDVyUutz?vIP@*wJ~Goc>>`@WkD2bL~$uoqCPz!%3{$z3i3WLSB1~>RL<M
zd5?G9HIgS_Z|7!u967#*|J{jEKo at t$5TIQ#03MP5^nLjyoooJG&(D5DK6!q&;6uT&
zZwuoxq+jfeQNo!`EH*97#Q({T?Q#iY;3e3g*a at xx_siE0AtY}q1i-t<dF9rZ=o*5@
zdc!AdpNGS~A(Ng6gAF#DU&xwynNCr`uO-gYt~q*F8DtOU2fqupKkzMf`vV^U*fIj#
zi|l(uhja(L*<p6594g)&xKgFe9jE{g%=iz`c69XQ>8GRSho5}qDNqcGpE~_i#N3D+
zJ$eTnJp$5Bq92bQK|ekPQs87zcIwqr5%VLSe(h;=2y{R7+NsF-5s#r(U_%FwqVG?F
z^kc`+3nzh?^w;Uz-*C<B``BhHBP&_%cPo@(D}v0{=@ojNfrNRZSzd705 at H?^cf&4%
z6juM?o|d?ryv#;gaF69^u{qxqk{1%1XEx at CeCB2}(=^ZTL1(MQq8=Jx?ZI`MIdn9d
z2gdrTQ?qj>Wn{MH<)rxgfuU$czg{y7Al(DR1@`cgRIeY!Tr%gI at m~lz{`MoF0ffDK
zO2iqUuq~bI85_dGi_@%b-nzEAld`iX&27_pyIZC?qdj!7J!v|<4LzA5mh_C(3%*?<
zj5k5-CCq``sRXKqqJ)4ABy^d{9SGC=xS8I7Ok<H~X%0_paq&W+I~}%5(*W7<Q-!+<
zcN|cdfkTKbj~@;MLTm^Xk6%-z0tXoccr8Zm&fHq%E{iRIXMnQMzfRq-Ar*4T;d#u)
z0d?m7nLq!S*=(wB*#Oc)3K@{Lp~0`-zYr*$p9RCYaK6 at gIvAES&h^d>46H;i_Ka1A
zZawTau^Pnd0T5S>bw9i%R2kh%?49mbp5~V3?FB>8TS>{IyB(*~!*qb at zB}G6QxXew
z=%ZLkrd#~(d{2#`h(6wJbaE1ifiqV+6XEHV&Kh8ZFL*n%;IrP&9JDsE9v02Y6q_8N
zIRu~=ZANkCtRh&GA?Ws#Zhu3+i}8l0lvJ3ow-~lb?~6#+6_Ad`m}6A9qRg>EkU5E2
zCNWD$^tpS3%&{aw9mbC?A6A#!DyYm>82;nsucwa#ej`Z7y`Bqw0$xF1auA63!3Y}L
zc;FNZ|503AjK(mccXQ%LG!`|*dNS}Qjz_D26pGO0Vpien8>Uo+`KlDm_P}t at TaRaI
z(qnWP<?3i(WlY-G3~<6YykB&-$r at GDr!3m0w;FWln2ZK!ni!0h&0oqg-2&B8vnbsf
zJ$k-4B{)Stj0cgPQNHRZU*9OTZ<MDXYsX`HIwHV@$F>?}bO#Li;r3{NJRATrlSCwz
z189NL8|a8{3DA?7&m`bbS^a_4!8M|9&^JKgJcw at KR8FtB6d(E$ki(eh{f)i$^`U{-
zS&W<2yZxE{vC#m?-Uv>(Y_oPuo7NF`gHG;vxu{4u(!YeMLpol~PEE_po19DAJI>@z
z&dW<n&88D10Y1^|*Mltd?0T}l52l3!xXwypm*D&KD?;O#ip^3W)6-fB{?U3FeEX?Q
zcFXI9dP(@?$sd<%OO|YVb=<$08;w&c(WmnP`mB0NBRi+k-Mq7;EFo!8Vp8eR{DEm%
z=%3kOt+UO!6I at 22<OgeA{%%+&;Q%gQB&>(N-<MorRoWeLh8JQUnhbOxa9F!IPbcGn
zpIho;EOnN++Sus2Q{0+Q_oGm=4TeS0Eb{63>Mu*VjO3CYJvZ*$RNJ#8fqA)Kjm1*a
zuP!DAMQ#8un7&xIdhX4m+h#5SvGAs7J+BYn(7vgvYE%1$@L-qzMAp*H6nJD1)`B16
zl12elUENAh7qfC+#hZPAK3d at Foxf;cOA}ao=PwOdgK(Ggs?J{!P>^|W%<g9|yfttB
zt%XZFX3g$c3^4}{4apBN=ZA!JgZ25NQX~x(`G#gget9pS<dOO5A+ybcyr)bSwS>$F
zP0JsZEN-aG*9*7B$)oZ!LT8%>`AnJY-C~{*25-!}wO|4MIGQ&Pd7HZlAH at u{o7p*0
z_|RbQsZ&G)?|kS^IZ2%#!neH#nrDV(JaC)9$p>(^Z*WHTL&0xRimiqKN=uoja4Lqf
zQHfL<l}(kBeQ>DGIFj7o2_wngvkjH`AyGtvND?_E1d`O7co#O)3c;I{cCEZM at j4+0
zC7DyHmIO&P8c8ttX;_$F-LhdubM3eyaZK_=3rI5crG1lNYP2OWs$-~M*sva<X2bB_
z@)&VZsZSEH<R&MnnULm0OEeF3j-n!mt+=R`hBAf1tdN_O*ifJWhzq6ZQY9!UtwLoE
zCN3lnc&gNH09r%h=)|6=suYwc%6az?cC#)>nw~8glNw`+m-k84R)tN at kqs?cR_HdV
z_qsff>HX(A{6>11Vp7F}w5feUXUlRXXU%mhT-IZON8Y-Dqx>9m2P78TT-AuIB~cc`
z%(y0DLX5>4_Yj(yYUAp*`TEKg1-20Pj!X5*fPQp<dx)(-Dhc-AR>#FH^l&%3`jZu6
z0=$Fq-VgU<6qQSrQ}eM^xQW_H9ig74UZT!WmxwNUKmPN?7lu<3$6}-4MNBr%Fmq<o
z2`*P~lS?^pZQ7>l+(Sdwc}~Ou>kwv at RSNqZR&;061+%`(?z^*u`p!~n*5vZiC0;lx
zmv1?#L#LB7`Le4F;R*bXaE0 at QRHzf*>GJ5n#*fS(mt%{P96#xvH^pkVG&imB2A^`?
zYnz(YevY^)c|{N=#KjGbj<r}~V=U1SMp<L5v9XpYTJ6Ji&z)qC_wyUj>^uf^W7AT{
z==O|k4ffK<&js at xTCbo_+kq}IDLo at OQMd22AWyA*{#?7>GkDZU80H at p9czt_@~^6{
ztWQqW8MIm!t#oI#I=wD+ at XDqEYX5k9TW)vGJ;7>C012#na;jdZzm%Hn&IaoYwUt$V
zQPFYMs3^Z`+9oq7Tua*&2H90x!hp)^YKBRu?bWL`fnmbKt1Aa2>@tU#&8CphZh-*-
zetrP~f$@n6 at qqyvKR*pVPe=q_wT-rf=Bnz*2$pq+M_+j1C`^VhUhW^2+B_PJX-bXs
zmpizWLw%c?`W{N<9df_Ow5GA6`=v$u$>Sj`-rA$Kw#U}surRS&Bb6)U+3D%oIFV|?
z<5 at N$vbwT4!PaY|DKx}nHiulw&LB_86E*6LY=vAN6{g)(Q&(5BNlWmO7x2=AbvI8+
zPHC{!ID(o?_GSZep)>6Qdx$eBh^MgK$f?NcERrKcKN3&_kQp~u1Sh*|woXBC3+ryK
zxVZ#VNGuKk9XP!UUG)N=A-iRCZqIJ#?h{qUd(6>PK%X}|BCPJT)fgRvJ_wC)b11++
zIb{k>hXFHsKPD{PN_$6HEN1jeSzvHYe+W<Psf>s<?*QA)p;2tr?xz6kUlXjT^^+&W
z`v&VQK$K}o%578!2lvcOvt)^YRTr#^PmsqAe5Pf<GXn=d*VOzh&{aH9*Yk<$9#8bF
zeFDzhw#!G~ylC&B0G|=(ikm=5<(PuPkyF#EhZOaIJsf*Rhyn-goi*6#vkMIC6;=)5
z#IcYYtCrNo&iNUDpXbEZiTvoX92`3l!s^iaKz;uY`bFvsioG0}(F)zXc{(7E$#Qs=
z6zU at Seb8S&_x!UhEzh2Re!zgTs?7&B_UyUwz~(B!#&^Y)zKAs<5v3q;s(=+Jv}Qe}
zBI}kY-lBkd9c`CAz(?pOcv|<L{ci5GzslLdCOF&V#c^ttU2T;aF>A$ysZbc$i@(|2
z-PyhCZ*`ZrGaFyZcCLrRlAI!ZQy^T7^m59zM<?@h=X!XnN&)0nMxg>`8)b{r8=?Vo
z!CT>6TnA?G9cA8d&RDcU%(GV%yz|q%3hz8;m4b&oM0o|0Jfiz9#qBY$-($X*OZBCO
zQuBmWUM~08PPQhyGfvf|Np%`X#4kkf4bj?MoUoH~xgM7(@9rt&x=VIsx$hJAz2;(e
zcUdWZovt-0eSMWC;b;yBDr)InS)H9@(CZC3>9vu`K!$FtLdREOtyvZyd-qOB|Gwq1
zbK;ZpY^mW`oyBTxbYenQiX%EeuMgPgr^9a+#K%S~6t1IfY4<;uNhgHak}@)rY+*Rf
z%t*4qBC)q#Z_LW6uIk%ZRh^R_BKLS|)%W<{s;Ar)LVjakAz!aoI3pCk0pU@}<O|7B
z(Z0TlgiP{U_GXzEeht4M8y%lTUdW2?d=i%-Jc;`w=k{mZSoSRCi#6_M>M?36S?lFm
zJ;=FM-ML~B5Slf1LGvL<>tse5Z>I0-GMAX?8fLt&ukf=*8CKWm&P&kM3-}s;5w1%~
zP9GN)?yruC3du}KOHGMXn at s*7I6`eQ`bA{h(^AsHBmC5ARdiTd+Jro?^@Rlu3#__q
zoylm-NNKF at U0bUQ4AhadR}#)O88R~KdNw3l7krWk&QDKW&@ewBxULpoBdJ!Y_LUiQ
z3bk4ZZ}?iG!qO76vPZ^-`TMEkQyY%;%7}BM*4H=mNRRhZ`$a~jB&TI0Cs-nV)lj`3
zSrR@$hqZ?Miu$^my4uXtP@~aXD)BKI&8hhn4Yf7BdS+ypj9#F$*MjHKYpd|nM<pV1
z?L2ObOU%khjtUF0Bu-DZ2(+GuE^=eJpQ%i$7d5PN{o@^Q{T_JlP{yOFLiM|S=0g82
zu)A^}CW$WnfK~<S?m+M^xb<0yeXDyn^awC&v|aS^2;$JKjr7;+{UfvOsj2sLT}t|s
z1pIQ0#aOG_6rWjOxtB1q?LxmZQ>5NqFuV`o)wwBQMx&Qp>f<7hhl#^yl0AdaLWcc;
z&KqtLz#kJ9YDvn-O0rB=sqUi;U)=Y&`!WR^t1r69?#BIM5&SwH&6get{mza94 at 337
zo?zmlLLOu?4*@YTt_$?2?SB4o-xV`i6Y?P2cnB`{0JHb~9N~UWg4-^-{TcffZhJIU
zOrmN$jDq*Km>6eW=&Is@@<BdvFCdtZ+<TGeL0Zj2321g_lV_tuXKu>ml;o(pWS^Ey
zIE1fnR0u=uy&om+r at nmy=MMzgT at 8MA;DU}0{E?`8umN8Yvd34kVc4dB6K!L^<)u^x
zMZ${Me}@2nzw0}#RvF8i1q1cJbU*wyZiM~lrwO>F3mcC9Au8x|&9OlkE|m=nUjXM5
zKCMKFX#O8z!yGR!u&I7NZhGRUsLvmxMrB?|VE(}QgU)`6f&Tpb`m^}_oj*hmj2}}m
ze#8m*L1w5W1SCq;A7Y7vKup4u(Lef;Ea@(!=p6(C$&t0`E|_Fjm-p>oa`!4Wo&cwP
zFz5^V4*E4KAu-z3^6*q!-hEf>yXgO8?mgh6s<OxNci)>gy}ju@(<gN%naNBN(jW<G
zK<J1_Q$i5}p{WRn3W$nQM2vulAg<CZ>#{DOt6yDZao4skx)v;JUv(ATbuBQL-?{J2
zOeTfk*ZqG!-+yLa=AK*5J@=e*?>o1D+I5 at UkUKbC3+e+t9}n^Ds1F!rw{;=wgY(d(
z_ at 23EMp-P8bg>H at 76Iam4G=$8FGE`K9?`R at a{D;=h|gOq1di~#7D8n*6bhV26Vl~p
zSD)${KQOi9yH2HveSRQf>3ax^24W#$@u7Km7v41>3yG|emMs<i5&8{e(4v=x*0a>0
z^J>&X<!exu#{cl_nDIlKygr||Y3TSd*}&oYipt5UJQI!Cfas6DU|q`?!h$g^bwQs1
z0ec9v#A2PC#R39kiHky6v|oVo0cabL0^m;)Z4muV)SBW?FJ0~>>H%qB){OD_olXt>
zIh}rAHn4Sbbxo|)YO`5OV>Q*;0CQNQb>w*cdAWX{%c0c(<nsA*^Zec%hxS)CM{%O6
zwxzMQDp5?jsRU|l;URuZe>U2{jsV*2R4dqlSMWRj1#-N7jRN!e)I7l-57oQ&m-W?i
zUn)wdm+epg#i+5_H00iBFWHMtN&y_mlWda8s+)%mst-r)Hk&<KGMGRzDfn)#9$X at L
zhU*6nYp#}Er_S?v+=K(1-R*(2Vjkx%qgta;8!Za>Py2FwwT&Yxy>5-pCh#n1hZIXi
zBAd+>jt(Zg85}JEv?3AlvzLG$aBpxl>;k`K8dZ)xNSGV4<)}1(48nW?i<@}4EiN0u
z=qCN0acGiwx at bAYP#$=nOyk#K#5mu8+7UthFfp6gqW>y2qv`6Ronw4i{7q{ZXLtIC
z_vUgIl+5`>$wbS~zE4l;$?A-HhHOMVd8YFWCQR=kg05ehkc>ae(FXAW&}+i`YXpnB
zk7=C6qmbu9t+;={dOdI`^SwlAPV`|955+AiF at 8?0?1z0klrSqL^wIOS3unGRuVk2b
zj;lJJ;Z7E>N^86pr?Vf<0Ti!x<y<>Ji=r7oD)4 at M6@4OBi^f0=P>?e;0urMc1z3&^
zu*=TAaOxD^h!!({I-9^7>A$U?IpWv|G<Eedymr}Ya?Z1uIwg9D)lx=&#YKvH at v^wj
zXcjKx$f12H$%Nt_W2%$SEEqm at h_fcVJ6z)&GIjXsQ)@44tM at gc7aD!_ZI_|Nn;*?@
zYxRUyJ4;HOt3#gFw){socb$EF#I}|yL)nQFWrnJjZ6h8hI%7gNh&xyVHHo^K+71+i
zgk$c`Z}#S(%&S}oil81bqCIqtT-znwacT~n*8~6sav{`Thb${P^Wy7E9&+R}v`l3+
z`yB;-zu#sw>y#>s)#uFj1!^vx6i}OVdWI1(Dy6AyTus30(CC#atKIEuZic2yr<AEU
zhV|ynAA at fBY~)NXdD&}cRYrqFYgB1jRw>tTdMjrz7*#5XSS5F%Vx8HcG^#ie3DX!&
z1~X?=X;=u;D9{Zrilr*4S!Z at zOe%#&Z8iFxLBGpwHUnf0F|0}>ky=c8y}rR~)mZGV
zpflifTdZ=0%i?nQ-9DFD$w^cu+x#)^ykRe2En_7Lm6p?~%sQ1;A`^=hN{-V(i5&EA
zNtjy0=`=>2S|#HlwT^_TWkiM(kViaJ^jpeGEhgiex at b4s$l8u>o+6eAG$7#*+&a(u
znC$fD4VY3$%wOlxGdQa;F&aR+0n%LfvvT1V*Ji|)3<tHG6#h7Eu-nNXdVb;j(Qo71
z=5~#eOVnzIDc95H at j7f;wE%?bC(N=36)Ke?XuoVyeaMq*azK#Q=I}y99+1dKb<IVc
zZ;zf|_|qr-W`h=~Rceh^uhVM4!Mk;O;zk{3YcJYTSff@;O<Joj$7wTaRVuaF=*{tY
z1;{J2>5W>W-X`;^v__jV$Lq`S8qI2z0Qsz1lT at v)Dco{V?W*(S!q+eAf5aW4k<`W1
zGJZu|OhQ^+pQl?WycpCy*<71$yVDg#gR-k45l?rkP9{z&QJ`1d=~dHEFSz$;;ES)n
zM(^Tgj{FQ?F{VB0G^k`sohrxH-0XAP9de~!nPUyqjB7I~RZzbez1$@&m~?4Pz*pe#
zTP!N2PFD&Q5&*MRC8Nb5>#vt2j~X>Htx7CW$t|4On6J^u0Z>bAoY{cH=`f96XX3+@
ztVFHV84POC$d`xZxyQ8o3>vXcY4-T+K?hVBh1_a$d2?*}c9%tC^)^7oGFhY&jYPqO
ztQv*dWOlo~UXMGf)+kgai`%TTv1*xkoK!8f=sAOiQ_7 at bs6INAj#KLtaw(e}BvV0{
z)}+xYRV=GhsdYe%k|O{`?tO2e{w>}n`V88}WmFe+n0l4Ms0fv!=JaV at S=FQOFjTs3
z5Vs2PV&*HKSaM!#g+Hc*8fYBBtQ$D={FN0x^njskcVPd>O_eEY3(Tq_zPV;o21G&c
zQJ*X#3BCYJ8uLKVkZEp8)A`da3W-D^vyPrzUsM#x_3CvxZLU3%UmPwh at aC#?;>gB{
zXvznZZ>o^GFpaQFT6M$Z5AfcJ8zW+!9^T2t`LR%*H(v$m0*;dW;`%X{nDG}5g;FMG
z;7=}7Dt;aijT()dUIu at 9&S?C309qHgBV<x&6=IdjZV2YI=D6(^jY<Fl^^@COI<v&*
z_&xe3JuQFA$T#tATXmrRjyV(S135v19b&?(!42tnK&;Rz(d{Vb&5={`lkdFAie)mB
zOeSX24*E^0N-Yt~-OxNa@`BTY-jGeF)oOG6-bl!)lT`(7nKV|#<tSf%Ss73%#!k8=
zP$jdNBcXh!Tdmb{4sRgtEdmS2uGhL{_*D at rl}JQVkRv=I0g_00h_37bih4v%u9isE
z at UAi$b(~fW0X$?h at ep0!1C;cLI$2XK5s9U0xkYXEIP6xvR;g5*^lk at qVtB|aS94Me
zhrfO1`^bbX^)8o2E%z$5daK>x_Bh;nlUgZ29<$0SH_-GYS4 at cfy`Tr1h=YGGp8HTd
zl|4- at psu5~@Fy{xcU-E6?O{CMxUx`X!?ZA`0{?ZX`YrArU{0?$7N)DqOyv47@(Beq
zH&hTLeBQL4q2+Rg-eBpx{ifwtUDjS)QWBmuZTYhG>sAVoqi|kDMMeCIjt#f&+_7=p
zl7)i^wBVKvckNoA-{9A&9iook?jJ4I`n|G5eojNJR%i0YLptp+OK#L^W{Si*TCTVI
z0tP$URbv86$0c{j2XRgpDiez>c8A5L(<@@Jk{Rt+UUk!ks}@~8y)*@FxN%uS&9?bB
z-n{ef4QsAiP*qu3zPR(2oA+!3XyKsBN?qNA;z)rvN2_`9YqVKvC?C`?I6r6Ql1tqt
zyGvHonCmE0dh at HxtwE_#Q|yU4-K<#THgU?5qPRb(l<N|M>Pq=N5NSDSC<j#tee%os
znKB}mKt^C at eX2du^MlQN%M(bXh3Fq}h(Vt%T>b#u9<mQzpbv at m*LuV(%9rZ(es_sM
z`Y(S`!JL93e`BnyJbDw#r)8d6yhW`par^ap{ArENZZaw0&t$UOvVn at UP)lY^|Mupd
z^6n|yZV2R#u4);j(Ij2oXi?bjHpvj$>ow^01}|D8lVL?tVjk79MkF at 5{o$gh=Sqdr
zXtvpNTy~q;s8k4$D~E?@V at k3&EWc{TrL%epy}g%sc_=M<eq0IOf`#HC>;bBXqV(~y
zP|TbN&`iu6Gy3?4*!c$DwgHHLd^){9B=MDP^$%{}vIV)~2UjfFI-z~Xlx;}bSnPHe
zH{u_*P1(^tVe66=2jlpIEnC_L(|^ll-+EppM+OA8;p$PxZCoK|I}WZcG#$AV%IDuA
zV-0JmQ{rOLkNin1Ug$d&k+rcNl=WUi9C_)o;F+Zo;0bai`v92#pd)7{q9YP1--RqN
zNh9bXJchyd;6~9t+$ff$x|Wg>JQh93B)?@3F>_EMJ}HxuKA_$zJAmJ%H{f?Toqitv
zD=LyogubEV0P-f6Adg<JOTH&^p81fBIsFFytz^HZhEd0<H>rOJdn0%=FJ{hYo6y)m
z56hhBR?)P#gc0ZPW`vnHz0Dp$e~FEV1PhV>W;$e~Ng^7bLz~iVRHnO at TKgh=_)BvP
znL5BH2Fl1lm5>A)Gl48}YX*=RK>}g=L<ps^#G>g6CCRLfA#ent-vms$Qe%*&MYcSb
z!E3hrwYp-iby!fN){9v=t7MVbZ_g`ps*sYAA%+$q#>k-LyR0lwf at r6XzL5#}L at bi~
zSX06(E8vQT+YB7MCnQdle%ejbriu)#$fOf9ktL;)e3xD+VHs&ju1Xq?lC^RPvn3&8
z94jMWebN$IBGEW<)fx*|A`{VaiAX*fA#@Na)re+fVx&Y&5_7&mWt<3ca)pRivf_^G
zG|bqbMxm98lv2eq`irs>NzRmj9HGdnOMF#+huzI8ZJm!#3mCcD!W`|oL1KkGKi5 at h
z({){pPdf5U{)zsAmChUV8>)vtrt>7~Ck97dTuvXYXy|k$o^gu7WW6l3;Et$9sdRmF
zY;Qr=b=_Orwr$(C+gsbVZQJ&(-QL>Pt!-PswqKt&d6PF^@|^6mXJ_p{=OmLkvt}(s
z8m9?cCf+8;DCH`QL{qEMgCN;BDSD->AiG><WQONe^p3NnemDBDNUd7hmBPgA=|NU#
zF6&S`^PVxDs-eeDS;yHM2()xKJ51F4e at VZJA?U*xm{3tuVU?-4YGut>C;y3Yi<n4u
z$Wo+VaE5xYuT825USZ6d@)W4m6@;n4ylts+sNfWgWP1c6d#76<F!_+x<QbqY^39}h
z&&m%>3XBjyqGLQvvmz&1dcesO+Ji}rQP)3CCIiGnm#C(Z9t_35kmcBw%7iM<Haw_k
zs9<^xIV_r|1|%gKSpF at aXEL!nFn#TLHF#AFa+?nCde!$en|Ujl{w?*o4;|PHdA-3{
z1u%YJqTr{eh}rtloA0MX)e|XaOybhE_;s1sT#3f|1D at E>>kXx>ul{VF?Ma?ZgDYM9
zvGCAvoL-X{sk+W>{=- at RH^x0(Hnm_;mXcz$cGzFFN!#)$hD@^3d4o7#?y0Vu(?}&1
zKPF8l*M8^JrIrhDkB1lN55}E~-Mm!#CDH9H>3V9^2dh`r^AXl_aO#sPRSs9Es3Mdo
zU5E-<Hl5uiy|3H7m(?*?-q&b%w3=-GZJ1%}Fl73B;OMRntHZBx=ZeV+^27Yua6)qJ
z&5c1kHuOu%N>2*RD>5V>LI?;-HJY`VKVU3fjGUN13Zn=t(}>b|$HeSyXv at 7ik!;nZ
zgklJyq$Z?}wF@~CeNmtkxkKFXx$~-uZbQvFA*T0O(#g$<F5FL{I&5y-e9jlj at qUUp
z>xgw6oVr%LI;q<9x6s6)Rg3s^rKwe>=+MNG*y;isv?sW5aH(`{PO6`&oqP%xZEABy
zssCoH*bkRlyH2J~YKBX=UX)qn-k?IbuEctVKke3nQ at fk;Eji;$7aW=)X at U@@HcO at Q
z2n^X8jk;F*!`}5Ct26GFCa!Y`M~n at S%WC(f`czo3ikgbeA7+Q`6Wa~abeAw>VK%{g
zOAJMXV3-2A?-_$HU?>TP9M-D5<+>o7Mdm~6Rv(f0=UyYWA>&Ssi^g!~GMC%+d=P=f
z_%w3d*POr$vt=&4wznk1GM1cT4symV0<%)od`_w)reed>2=z00_Q%UuY0MP)jyk^3
z$GM}wNt!lse6+8 at VGjppJ_qF$k>3RbO?%pn#?P(L)LpGEZZW`8K|H)OcXFfFttk~-
z(m=Twnw%t2pt8NBLA(%`n-q$P@^3*xX7fGr*Q=%IX2q&?)rJM~HnLX=q0(A_Y+<5I
z$v0~YDKfn?8J*#*o1K#FPSLu1PO-+qMm*{2>5>Z^AE{u-xOFtA<?%2D at Fx)6e8sZU
zpZ!wimYmasIQ5`cv~hFI%ow!ARCEcgqBTHjN~(3LRJ7G3`*PZ9TrhndZ&FUO?gLpx
z8nWsI`P@)G`n=KH&|3kacB(K<8uFG(HD|!lkJ31*qEL!!L5E46GqE<2dNh5Zk1C&-
z&@w7`0+S#_zw)zjnX^vt1c>;dx$9g=190oc?$o(v6R?tnFDm#M5Ff)EYV}H`E_I7A
zJ$iJhaws-XZdPeH>5XJ>?9RF!zbMcA&FzdnItfC7+h!8r7I7;GyNo6JR$!F7M4PH0
zak81ZO`2j)$*MH2;Wa-RbE)~u$ZTFoX5_JY{9j;NaWrOsoK8G`h|{r>5RfDnY2-pe
zWJ*h)ynsC|Oa8nN;nUVl@%)V?1L`SVq<HPYJy)(aNuqQY at H<y{_#D%xZ=QNQifU5K
zFw!S0whLB7etC at 2=vuTUm;Zaw+^ve&9vCiED*ny>ji(R2$yg|MT#do%<|(`9Ej1vc
zqf+Y#E}b2H4hNEfrNBI)Qj1FEWN-gat537Z&zn-fgvj)h;)(JDxB76lg0!te5I<8q
zKIt)keClj<9rgH-jpn{hY;p>1IyRlDwO=Dx$m?aWR(YhPi9+uNzKx25x3g|Y5A5i7
zMeSw%8j;DPK^Q5(jG%Eg{0)__4=MeiG4|B+iy+|fq}>J-m;=!Pls??QTNb~}s&Hq0
z_&_njPDJMJ;Z^;W7oko^2}>I~pILHi5>i)V_k`$^<D}Qfy|MiD!SQWv++}bkBLqdi
z%epG#%<jn5i(93<iJV<bV61Q!exS)xuAZ02>*o>%dZvwZw&9v<__iy;OSBR6%GZFz
zq_e3>$s(=F8LpkD(f$Yq?Il(13VM^Xc-I>!VEV2ePP%Eigtfhydm~O`d-MY3E$&>2
z>)b~*_;Ad-O`)!JEhk6$V!iEZ3}yhp=K8$J)sXU;vtv1el456(k=N7gVh}5 at H<wGV
z-g$#=;)M~L!^1ga$suX$)TUkgc^qA<!<9}XSWRcwCsXyjG2I$n|7AjKzI4IbEM)Hb
zuE(4?)A+u2#3E}}JFXssYE~!6)^@Q-ka~GSzeqSly-aOf_iPIo#kgM9lD5HxYb_Ql
z|HD(p7dpFXQ5?)gT{`*mDPX1!8%=p09^NDttsBxfhA*vDT&)>PzNaM_{aq*;f&<`1
zntkP1J0%*Nqnx^VVK%zQ>8hUY85M!qjiAf{yMW>SeJQ4J)N>-J6H!<|Q9#@UbIku8
zR~+o&!@XbO0{f_XZ$$*+6?Nk2{)IX*p>SB*GwyyjaM;z1VQYpj*JVM_oPNd%`?yJk
z8vQZRSWzqhIIpfh8y=4>PsTYLE<YnPC~S^CPeyl|peOU?S&zUdmRs{&<ZnhYHAQ%`
zgLMI8kXhW!WqF`pkHN?rftf#EEGjIY#Wxwr7tf}`rXuo#99q3?6C9Z$twub7Ni<;T
zc!?s61V*0Ut)urrw!b_-7Y?;>T#ZzDC8g#Kg%<nhx*a)erq`YiMK2zx%a`=ORdvGd
zIYAvR!2aU>@H55a&WBz0!1;pJn!`2W3Z#8)Iz#{~DeZ!C2x?b|I7Z>nmuVEDksuQw
zhF=HHn-*T7RI^{;C3_-gDL6VX%G}$Sve4Kxe!Mq}Y4T<z9eGpk2dDg*!N;NE?kf~?
zR+ at DRy-j6}(|GaEH#m`U*^DM)M60TN_A-&?M&qgG_p}u>XL4Dr^#lcC)D<@QyrsN2
z2eVqlz->I(<|R3TH7e~jE+;2rm9f5V--W}n&LBZnY|092uFc*}0xPQ=-o}Ti^_j%Q
zi>%;&v>xIF{)vMVelvfQZ*ZUEf*1QTo4L*|&$tV|nC;?#I*tRTV3~SB<VMe^#39Xm
ztWeT-W&)No-^Znon**YO;5=-X?@x=@&zGH at yOH1r9`575$n?JXK!Ky&%f4G_A2=WN
zq81A{?ZvondH8lQF3OX;=TU;uRbHk8sFa5x6brhJxk&6EI at _JgGiw9BqSq<UGBk`&
zT&cKZw<UgZfvSq`baV_ at DQyjAGEX<7Qg02f66dC`jpsq?)$r}ApXtH9@$~~ZW8A~2
z55NjpQCS$I&aazCa4r|>g#T!CcjdN~sINDAhc~~~D#Vu^ut4vpr^86PNu1Q+zR(sP
zK{g^=BTFp8&JD~%K$AR{9Si at 5rCHrCDGev*nrW|y=^7Vr^vr3~IBLLnQ$IF_3#y)?
zcqQTHK7lHKb920-!*2f(e2SU`QVJ_`WP_t}k+A%&gxdM<DorKLP669O8$!f$%Y(|}
zx}XJvDAKJz?deSE-|w!mF-0p~W>+I6f#NxzX?eBH%iC=lUP(QUN7j{(%)6s%|Eiwd
zVVArkLX%XZy8e9)Yr6YQ-C(NIpNlW5`Z>3dau5NB?3F|c_7;?whe}kg_lm6A{FKNr
z?{wnD!vry65UCQyL>=;#6Vc)jIG6aTE7S;BQqum!jhw^<Oks!Wwb0$x(Z)n<1yHT&
z2-I;9e815^(=6@^&WkJ*>ril<iicy0d;d&jqfK6&qEwf(KL>e!$|l7Y0!!yvGybyu
zJ30s96CI_}DwB1=7b>{|Q}%DlQ+eu|=JcU<Yj5u>tV(6$d^W$L{`EueKuFm+?*Sp|
z$C-uO>B|zuDbLI59_%S9rAN~`Y0_pD3)QJ(pny>mk3L#%R-{9{deO8Md&vp)aLMZw
z=M0X$deE{33rJDY6ry^0FYK3Bsczj;_7r>hpcUI#31XtNb}o83qEexT^Q-Nt5%)B`
zId+GTIY(Cwd~i^_PyuxwG_s!IAI>hzg$-JH?@A%ML3?NF<QR|4vC~eqF->a72nuP5
zvAM(?Joai}kO0b_>GMWVQAMgJYIyKNtKigf5{){=F*q+C;DX)C?y1W*=u-FzDANWg
zNe{|Vn`ybdzxL%0qHtKydhpiR;WO|{I+xsmssl<o!n2i<W)RtA!%BcO`BJsyfikTs
z738#YC=;2crQc+<EoXtHTB3JJif4*~W$f9KGweMH7>1RLRT^f5zb&ax?9!0!E<Cwy
zyb^2zR1&)d|FMTJQ!y%0&k{%ZE9ik;9kM?2IH8B}+jf-1rZ$f!TM009T8pf(PR!)C
z*`2l%>nkx?>?OJ4oHD2^;+=KWR)K5Ot~tEqW!s<W>gq#1Te|bNXt8nCwx3NTRN>~q
zC<d9$<oGCA%P=C|##wY9CTTU%ca%7Wa3KC_ZPsVSvd2uA`CZWBxiFkQo5kxV>P(3V
z%NCC*;JI>yp<rbP2gaZnw(tCnT5sA{Y69>D2F5Z<<o|n)bRcAsgXbA#N#;a^Q9Fe2
z+5kcWIAu^EyAk~MgZ2&Y^@jfB at q~P+W;<2jY=AJx0zAH*SkgS0-g9_Z-!q>7)j8X%
z2sR+d%j-+Nv;N2YFB7JAI>&|bP2+Kj=n?WUT;w$K&;S9B5oW|M4**Rd<rkZEhm<8U
z-Fzhcptg17o|NnWp<fI;LcB1UfM3z;ttTet*sx~Agn^-<Y641=Uvy%4q!OZ{U`WOn
z|2Aes6P1=+`tN9-I9n_rZ0QaW?{b)mTn3-WDM+YI6hgnWmOxM+2a?e3w^Wh)H^<P!
z369A{a&lWMnb)66kvu!-rdLi&?x=6pD~i{m*GD<dpfp?Y$ya~Q#!3tdF}m03(OaE(
zzObP9LY8(Y|JZEA at IG+~Bnf)}S969jva_Tzdeqv_HkEl~kQw+DgswmJs^9Ik4)%HC
zt&+ at xFG@F%7$DG{XW4<we{1UGW#$dB^U3bBBhIo-?!0mau#5`Dj|@^)nS+8U at Bm6B
zB1gTI<Q$nY%?RWdoJ{JPZ=5Xv<j*e#0%v<Q{f6BCa>e!MqxD3`!*c_0`qJ5P&%|7)
zxnxBtqu+5qyQf5L5`(pi0HX%MKAMe1r(pE2lIVw9!*4|s3_IWOg;<{!iM(uwx{- at q
z+)A>#;$?-E)rzRxNtz*5Dwci^*r(mINoz#)Sisu}gl|+jpUlah<2JWh7ycQp<S`o4
z4ABqG0P5I?qZ0Od$Hb25bUWw(2mk~;uI*eP^V)Po3s)V!FkYi)_ufEGidXvtM;Q1i
zI3N<dI^Z0*fhZ<-LP(iLCxmJL#IiUaI^ae+e6W7 at H=35G(*<8UdSH1yv3j{;!9RS<
z2SYkv9`yl^j?xp)(ExO|65|R9?`Qx9z!i;TDj=kF&%Y;Wi{O}x?5uYw>kuutJ7IJz
zM^qx)!I;O+MtC$S`*hfYl5>5&ft)u*UzULAE1rU5A^P>#)v05IEQ7S&K1s6(esJLx
z&P=^tK}3z3WEko#YX2Z>oG8WJmW%N{W>z4KMBGrQh4?+ at R>X}s#oFR{aRnYm9C7c}
zc(Du0cBFh9E;yB2Qj7UnuSuI9l&_vs8OEds2rW`@o)B<PI9U at 9Zt=+ at usHZtBuK+M
z at z9?l{{#2BBAnZe*BgsbXuwN#-9S^qP1PX^Wq{Ld4I1T1RrR%y^^FL}e)Y{D%}obn
zeK&$ZtX(%kEn2N!;11;ROJw}@zzuD2ILOQk7F52CyLzLy8z^_7z}ssFLSejL7C|-<
z99|)G7LVD2Fn3URL3xtDRy*Sx#v>}eutWfc0<YZrngRtuc{snE*SdoFOZmsaRf*WC
zk_Ew6Z0ekRGo5zG#;yj`?dqx0Gpjlwo}G at YkL&IiyniUZUNfe$&oZRFLLO5xd_lE6
z`O}q|&p{yQ>qz#U`jR6{C$<A}eXy23B)ssFjgJ{{et^>7%mHYRbYeM_tUI=>00f`d
z8 at quWTD_<~%K>-)ScC#7gJLW>Nl?#AjDfV0!RO-WkUym|A&+Zba&}sfVk_BLb4LN0
zPndi)q(E79>5K)Ju&l5|L&C<WFJKdraK;mutBs(!kaGohuUyS6G3EsnjwI{&BUcqp
zyk7 at jGoYlH1O)LAdzpsKpa`MASOzS3_?ht4E^kmXf$^o0r}iCjFL{4K!S9(9q0Yh=
z+Xh at g@zTIr-Q(^8=}yACT}z+^;2<Nd69DN~257uIa)=Mq(_LQkmte>w#xn-UkwcA9
z at Tg{tp;*7eS0tocw4Na;;K4}ow*Y*t0nfPhvx<hbpbZMbgA2x_>$pFj5DALDYL(;v
z4w?U)M_YwO4 at 19Yxs^t!&1lOVyN0dmmYBiSkr!7sSMjU%3EH+<Ee6y6oKci(^%V3n
zgtc5rtC!dqkZ3%PFgA-AI!kBPPF&Pk*`Pq!tz*~gm!eir?}r`H5#<jlpVP2vWfgr1
zA@=}F>z~E5YsrT8Dn}1tSZS%zv`h?TS=Y}<`__gTs)}1)Rq2nzkq7HDS4iA1ry5lY
zx5F^eu~4`^g1D(3nol$XJt10J8J;nuQj*T1TUg228F;!q=hjODV<1pknzk0CetUD#
zG!55WYD^Tr%O^T=2PcMyeeYNS6+H(4o(TP&gn6`fNN9PeWq##ckvIx%9xqLdDk=t#
zK|k4L{NkX~G7xV*Q%ka3GJSMUOd`oOrnta;dxOcMFi`!mis5y4Fq-ORitKleCMlK{
zSFqDh$iJDB>$TV>`Tc at UfJThr2AiJ|$!lkX6N!g|k0oP-!TFS~%X-5B_3qpyLPHbB
z;oi#H6?^wD#+xs$vGFRoe3lN6tI_4U1}Zx&g$oy9DsCwD`Z#Uo*hALRVFT}sbr3IX
zA<uHc48~HoFH22!0rm!Q;np0l<gL7{Ri%%dL$F){SgLkz0j8Sm-Fjtaw0v6*ecs<N
zRL(zk%~N!VN5oIeeIl`PZvY at jXuWLnatFoFz%s6c?~ocp;|M<Sa<<R11)S at qd|;A0
zpv}1Ro4Otcr_y#=P7=l_sIIck#6_=T{14$y)tsDNPRTO(Cd&c0o=q8rq_R9SrR^Jx
zR|)C;wLE7ZVJ_ooCf48vc3683vuAge@<3G#o0F-$Q1NoSJljWYEI606XROk&G<Eg9
zQ|2OD$lFEC%IPVDj!<B&p-VFwfqFYu3XVNJtQu--=TQH?7RSjr+<|(T7`N~Jgd>FK
zY1&$1!M`nCO(bd?s%fzpox-s|mxh&r-(pHlUGAL=9cyR0wWNB^xC=+R<tRk;941U&
zQ+~x`Sv(d#))%ir9qNhm_RpAfMD-YvlHOfF+c&Y7!E at Vo?TUR*yo0`<&s`$>ejj_E
z_TN0Sn)uE)o-c>=)ley;D5k?=o at T{L2B?(rOPp83dBi>Q7Be)|aq26g6QIM|Xp>c4
zhR9ZM;GbsJawZ83Ja(pesyVqyA(3KHz|YU;2ii?*iipxFOR&_jA;Ib-*3V%irK!tg
zk&1!9%+P75UZ6q>*g=1U*vNu?^oz$VUSJfdYZPl|f`UNM*&aU at 8i~x)E=%)@whO-C
zK6?$u)?g5xpJ^nyC;C)BE*A*xxq1lCd$9*g*pZ&~FJ~B1uZp#i4Cib3S@;rK<n>8t
zP0Yy~sBM{$oK0EjTof9%GSSnx>f0--OcZGqLAjuy8<^=N#%GsOk+Q2xk#l8Bn{~G8
z%+fckG^$LvBb&ER>Z02(o5uB{Wi!Mc+(*o&49HVoodCSFVAyOfN|_ at Iu|lN{Q>|UZ
zuGcqqi<pc2h?lc>QYDl3v8 at Ck+XKjR1SIux%c%u&`YhS=8KRU^nbYg-(sUt-8CZBq
zpR{x)6SgrH+C#hUU6<%B(xt8c^z8bGnB|5@%_ElU{#4&GH?3a1m=4h4yVQ?wD&x at 9
zVK4=Svyg&KS^zGY<H>?YPu#ty)6qbX+3qhaGIz0 at pp`I{d>w0Ahh^U_?`3yNBRWI8
zVsiwd=tbHJ!{>RLgYuy+{b4MMXq&=oyhX$WY0tJbiEQ`}V|ktXvSPhfqw!TDd#pun
z9(%0C;<bjh*&1HFzMA2vq!g0wwp*~imzGSbC at F3KmL2nkt{0Dcq?b~Rg5|_GfEhx_
z9|=>dW~m4>7m5=VN}K(oVk)^>wpnNHfNjU&FQM>!#1ch?Uf}?D-WD(ELyy8IEfd%`
zacWVfM~fCUs?@DiooJ7 at xRdb<E?zPrd;o($VI7AMFfJbUzrWCB*IDmcDt-8tlI@%Q
zkwRkyA=^!IFxN+Lz%6(6c6x|{hJFBOHI?@(8VV`t*NqzPa>8|dPh2cov~af-GYVkO
zm7s(^c#%%P9b%vzpLlI*3tmJYm!kl)KQ;?>DG{Yrq*$d2Q>8Z$hiE3s*6`P;<K9)o
zI)Num#*QeLZy2#uJ)OeD0^0CXsWvuB7G~KU+9)*{51SGqN^9Qf!FPet8-GP=X6jZd
zR;EH{YBnS;8q{gv*rK;JEm@>YCJNiBdM9yQJT^U1tF*RB9lg~Ge_FHAV7QX(nNU+z
z3+A3|!OdpGxMhWoL6^dLVKb+dUXdGj;ND`{u25G`{~}A6WyG2E@=VQ?U4ue{m09GG
zC5NO#9~ZK)N?=Gtg%hSt$B`AZN}V=i3<Rvx?G~qG!?Nq3-42-~P)v#A<SIk6A#u at _
zCGsR_XeuV;pFCT%XwMK_<h{p%3z2Kb7gM%TB2L3uwdflVa^OClbm~FiA$c3>`&SBE
zB~9d}YiMdFoUFQ*-&?i(D^$c&4<rOz8Bdw33J!`o0{Mnxw~kx11D8wtS*Q_uV$A!P
zCRcxLYE%)ZHT;c$g|3w)Gd|)hIANa{R!$9IDdwyiw0cvDUoS|&i6O7v$~11l^5{_t
z*v4$~i7jCF+M;t(FB}u^pU_;k2F>9K_$--`LZdD+r=_6`Nm=T^0QD-LhHimD#Fkah
zRv{ovy?z5y?WDC&r@!SjxM00!g)Y?vZ;87}FFCQzQAK0RJa7NK^TqqXRaqwNA9#k(
zLIR7wfh6EI#q3TWKMVscD_&e#K!`sHfv&&ANUXFsGw!IS-pn3<1qH__)%;-RbEWSC
zr`?31=l`;G`rcy!*K5Ymt6svP<uu52N;YJ?ryDI5P at p4N;L5cv`WBJqXgjDwL*wKG
zcB&67_yCz at nsh(rZff2M!+f-=SN`FneC}pN at dWfl`NS#)QQGmn^Yq3VA#=4n56L`2
zWW=(?=Sx^kff-$;SP%dE>sx8Z9wYxw#6qoXBmC3D6~bbqx~bFe6t1~SLIDx)Q{WuT
zFFZRWXMXXf#4GT1xEW at 6d;Ae>)`f>kluulV*396*ei#<YU2w=)oP`3AmPw|Yc`G9i
z!2#1JZooSP)t3;I{Oc!u?LM-oUF6kzxnaHOwbq?yE=~dw_np8L^lA1v%tQ=3qwhR@
z(Ty!}nGb~%#APf-_Gx~9>FshE%?v!XnGD>WoH>|ulHtL-8c{sv(kenw92J59 at _LY|
zXY!FycR|e1NCF9FMjLQ(sEsCeC5%{;7gfi4woHLN{uZML5*%oU`ADjVeg^|y@%CTw
z`<h_;g8S-)nQw0oz5_tt;PFWn?mt9!|2YEbesg&^tO-4{0S5d4V{u$O&sQ7#=8%3K
z0)9xt&&BgR$2L1{2;K7)pM at u8yd0pt&Stvean!vw&oKuqaf9jk8=7*FuUt&TFo7??
z^wZvG(hvB&U7oW}mfIMG&5wUk{0eE?TJyyxP*AGrfgw?)96LW(qN~aC{|W>JgYDla
z=qj@%4k_>6^xHcv4^t#S<6c at jiwk(b_?^+4bho+4`#c6;wC%V~1{e2tKw`D+Y5e6g
zCm#~LyLyf0yW?t at N7!mK=6MZrM)=yNPXTIUG-x{69QE;bCE<Evs^%j$uX<UOPApW9
z!yJcT+rL>3ObbeWj7wrBoD}XhZ(nVZHH#C7%YBi~9i2%vZ85q;aO>j3jieaxy3V%e
z^yNf~59yy&LX8}iCU(m{#Ub$^CwG^X7sNf_AkO9!E=rb6aIgz0S;Uq$iX4Z+S8<~b
z;!K`VmrWQIeLyiJLI^!h(_w=q`d*L(!)=x1G-Te6`X*BP_lCQduSX<wtP at KvXog}`
zqO#)!QxZm*2_zXcC9K at Vmx}%!te|uFXG70q=0-W8U-Q{sQ3W+6Y(d40S{5#p;{n+T
zz4sput(@ri3<!2F(JQg<ABudH%US+TCK+Ve6&X?)M4J_BA{no#vq%~WdEH3-zpF74
z)=AVpR~{~WJu(4)qaqSCtY%0>Sh1cBT7z?vCM&9sPo3ox$QBN9Sm)UL^i+-rj&OJf
zHor9I(m%a^tOOS$#~HPG at as!-=ARDks8vHW;v}pC!_*RJpkK0)ao%S~Z<``YD!$$f
z1ecYK$76lA034GRuhP5Gr+za{b592nt}GlVyEmf>svXb&)>}rC(u=$AUhN<8zbL3q
z{4)#z at v8Q)p%@_|KmV2Sq%H=Mm<{ae>T5`^5MxgdhG9uOYvs~lPQxDrEYQ9-JW|qg
zCcYWze3f(G<Omqv_w$8N$fhhGtVyWIOiP1QW3Xjo3+T(}OOKOT*2YT|3GsJn{HQV)
z4P$AQ#D;G4g^0e!aQ4V8oVJjd_+ATtIXxh)EleA%1xz5$`wTcx82P|*6%mnfIlW4;
zEsQ>v7|FVGIvsg%uhSuP;tG6a3tDjG$rG~gSf=mpun}qRk4*|ZU<+21LKz1*Ip at 4}
z$R~KCeB}<&XPr$<I!iLz3DY5aH(JL`V%f%X at 9bT~GJ($<9CzXFI&?TW>(M)K>OTH5
z_Zx#c!zRi-n9}17ITinV29y(U=N_BTfyeBRN4T``D-(36DktPrW}fdpfrTrtp3>YL
zQNRVE7Zp%Z^He^RB at uKsS|YEGt{t+J$yzyRu^^#*>xzHYM85IrT*a~x5)xdjOtZN5
zI42iFz=H~bo+$;6M6eNtE8fYfoqj-_s&fbZn5V|Ii39(kLk64^y~1;<tRb%_RH_^P
zJwNhJj3S8)K*-gV6y}-p%E3u!ejhZvaVSOW3D?j(B8}{eV<(0rg=*Rn_o+?7y%gi%
zQQ{p{GeA#7vLUwjF#5-UA1J_H=pofZLqXqEg!6|(V&Obm5V-}W2l$@}>9_+9GttMd
z27)9HG25}4<U1)?{KFxQLJnOkNs;-b8fSy3_@;a%>In&7FW7(8<rzW7s_<lCJ0z-c
zZV|c6f$oTTV7#%nvH|Akycz>d at Okte*Wr+t98sDG^@GJ(%ps-x5TouUUa3I&pcDB&
zrZ at 1ZBCsP!YXNj++PfW?d6Rn`*m>D|Yw)vvKN6b{yu614F3Tw-s=KJJF-DYh3b at 65
z5Lf9r?%6F8lyto38oQCd{-ABHq-=aeAzu5Iwu{!6^4dko=#@aWL;-ONtcjpSN4bdq
zdd3&aP5|Z4#vhcx_dz7^jN$*WY&UnjlChXiR)6)zrt?Bt-8Zj!Jb5K)M1bV-3(oTU
zwDx(tw7}*IwTdqu9<_Yu-1Y$xhz(ERia$DWiy|;p0QrQjia`yYMir4q_X*U2C#{mi
zs#NWu{FM?ggVH9dqbs~ZmN`zJhk0T+3wWenoyoKLu5_Tq`8r!}=vLA6Z^pfxlNdhQ
z@{DBhq*C^z>U=O_ at f=tAPk at iP6}E?ycs8tltNvQM^DMnD^-7Z=KO~ztB$GQL3++Y~
z)?bj--&g%lAkP at 1OAn`)u<2DS3$#2_C)aR%n^gLkY`sM=ze%e6C;s5q)pUtguZ?zg
ztWN9<dR)hNuzhHJZByT;sVW9wK1!khZzWbD6f{`S`XTm&j}$V!7M3Ul^oM_!ekTSJ
zq7sw{NF3Y=Ie3EmZ=;)P+Wf{x#~JGhG?_<#xCL(5gUr*5 at B_mUEpo{SM~S>GR3$7L
zMtoLO|0gmYdB%87M4oO3nym+$iun(j2)B$GR~%oSz}UzIC(m!^$yndSX&yv1I-lG;
zPmmiXe<n{lJYa(q55#TZ_D{)*2j at un3!O-pl+)>Nn|_62ZDNcu4b}*S`XXUoh`D_H
z4iv6{uU_Kz)OwSOGcnZnMhZs{nJ7v9FTrxjlnIKYR0RVoaE|eK`J?nA{3lAV_eOKW
zxgga-3svVjd0kS!Ol+uDq-A$i$pveDK}?Z-UclrK!NbsG41Q!h&yFPzq2qflZuS<b
zjSl;oEql1WLfm8Wcnd`Bu%6DMvZ`6j0me?xoiyn?PL!?SfgK+bWkn^y@`{hAh>FsZ
zNrNUye;9Q0jnpIbE+gl7Ag4U&?-Z#P?H(c<#!6SC%q<mF{jIrxGQADY!|_>pQGad6
z<ExGXGgv!V at S0W!S|v6QQK_1mzm`I!k0FP^P7tqk&NqL^{c1J3HP)IY3UFSB4y3y3
zXBc45;W+p at y|zR+upavb$5Yg3WDY{b#FNK0RWTW+A^t6PoCp1OlscPuW at G4SHe0!0
zNZK#h$?$HSHyKArC$FkTF5UBCt`IAzvclh=y|)L|HV3W+_LI<NoHJMLn<eav=mk2W
zxqSiY7n^H=f`Gln_$5AoCq at RWObEy)IiZ96+->q6sY8mO7zZIs6eU(hCX|fvQ~ujx
z{JeVtL5o_1t_V3CYeV0GM}FHRJtW(SrQkhc$PkTy*Jvy$LVWGQnR6!!3M6u1>Nd*a
zvEE<br}udJXCzFtGCCxceWk5snIkPJqi#V|<lxU>?#}&-N8aG2)U&G}oS7AhYkXuw
zZ&MHV^P$ELy<an1=td%?ZH={cwKc6Ar*gXv0s|oJ%ZD%TD`rq#f1R`4)<cimu1F|=
z at S4Sgdg(w-mH)%s4P)tcavU3(88)5&aFjN!#D*9Bw_(YQ#cp-ZipaA7<f5ZDEFCgv
zC#x}@8T?hG`v(%whkVCkl0)Vrcx~>;?Gh9XP4sPkn?bKCj?B{ji9V+rZbOrJ{M-z{
z#Ny)L`le6z&TeZ}x@^afytbyk-^OiHMyu7pEr8g#m#N%Gve$62*;GWdDH_K5ftNeh
zH=%8RWhL>c*t)FO^{4=e<$hIuy~CG5oP}dk%fN?l1w9%vNWQ6G$po*}<^GT0 at IPF4
zxh*l<<($!cmFfqaNxY8Oyw|8oADu27Iphm5>%HkE@|<UJ^5sOGe at OI1)$x*0g{q1^
z201&08OWNlzljC-7*O*z|B(C%VpJv;zgb3KUXxf^DkQk0(?F+i5_$Y{cD3>zq<d!j
z0Q;3-eH@`3yQ8t?lj)?ATftplz+2AE`yC5CIW?IQrR2IJFtAkd*|0VvwCsV4udQ*+
zSQITjy}*jrE**wvv&~r*wQ}ZSRp*$th=GgIcn&vQ3>_Ad^ZJaZMvrG+kNvr88Y>EE
zKS<Dk<QU-uI;XQUmZ#5s5yQjoWb>W(bb*b74YAYt9QZkUJe%p~PY;N-&E_&@`l_h>
zI>y0ozq#AF>GNLf94V9Zh5I_I%a!o!d8lJsWnFrip~+*z5KP7!>cNI~+1STo*%(27
zd{M|}`Tq9>xw6gOURdb3_0IQkCz1FbX1%i6@~|r5wjDae_LNvQ;+lQE{rxd|<GmY}
zeUUxZwGr8eWQ*cF#{o7zubsPwQgTq*$vofcTD`g%KycP+e35H(jiMV|+<t$+Fn9N|
zBQonZz5$cjY}JUcS#ltC4^*q2<yNHRZfA?P5=zifXg6lX^g>qWb at PcJ0N6i3;Qw(R
zG!J>Wj}O|qW&a09E2SWhgwhkMkT^)5NT7lUVK%FUd}Hg7kG4N<5fQO1enOaqVJKT(
zoLdT(!*BCj!{oq3W4Fo#vImVXJ0~x+31ojOEw(9WJ2xjTue6Pv$LjzW!O_}#w`Le3
zZ-&8p&J%4YJ1_QuI&Wt7qcGVI{X%RSQ3E8bPAiDhB#kk-H!E5|sI|jj>uy=s#MppT
z9=Q$lB6Cq#7nM4=y^t9hW9^p0xeu97Ncj_$#IC>)-7jTXL|0&!?Y;YOf8jT9)Mycu
zgU}5=U`U?%^hEd;w6jX!?cggec6mAb`0D%4WH1aWo%S?`)o?I5yRG-(DOZMruH)d5
zr_DaAeJ{L=L;DKH{p*h*@nHkxy+tsu6Hz>>k#Zr6R-zCP=-Nx(L<}rb0bhW(@=1`x
zd<YyIg+HzUJ<^V<UQdJZ<|}~$Kh&$cU9(Ph)^!*xdrND#^Lt#BP<Gn(+Y?W1?a&DK
zOJI9!XdJL<VHngF1rF~Ll|wKU89BMGDC0?UIhgYdNFT&4hv?sH^<YzJ8z#1$^f~i)
zWXk0e;w{=lc+dU0 at I=f>&ir;bgu&SZfdj+Y;<Zt~c(Z)Yru?s4UqJoOkn4ve99BG7
zaf!wHV}g1YcesM`_>p)3K0aHC-waXNAW?xhmzrI~wiLYr^y&!YoM at NT1LO@g-HSTS
zpJz7sW<lPTb1#D#1IV-g64x)LxIWVfI(*=e<Mp(;EacMI%%~v9Bp7L%Ke;X9FYPyQ
zt+DQM?ArP?_T5Wp6chpK^8_s8A4x0D;uTH=9N(*UOfVmDi(^FwPM=Z7DZZ75D5vG@
zf2@(s&C*M~G|3d?>w$b;BA=S43kr0B>DT-R5A<_`di?)e?`xwK3#fLx@|?rDjI((3
z!@0&OkTziZ&jB049Ug6BGGk6k=#pMB6XBTn4o}A>1sFIm2}%wL(+}c}l%aj&%@9vV
zw0^g#D0CZT@;d5k+%`i)Evu~x9VQdII4AO3YtLUC(Y0Bbz8<`XS*czZJ0L5P`t7GL
zcbZZIdVs<$pV2bQ)u_x+#YQ`Q>%tdM?L#1W9+gcu6Gxro{V}G9jANek{jShQPB<!l
zED!#**<!I8h4?Wskvq&vU|$#y_P6tD56pME`)w~8zsC9rL6OHTZ||30;ZYUeBG}Kj
zrETLBy5-q6ODT+h$>$(2-1X?qgP`ksQr6*+|5E^8-3GXM2=ee2;Nj1~BUt=@a6wI-
zs+OLQ)&mQ7zfgW)JC{Rvfgb5~LRx}pS-T%AaH(2B_+fuU^ovgY46pN>T0=v+E_18X
zCmPGM!Q;v7_j5`)HeW{0T)M)}i8hY4HMVoLz(W`Qn&0Z+!g&3?_j%`=X=zc#A?A^+
z<5VSCY&y}Rhf;~wZpWzeG>|S!NrxFw9aexf#BLUF`+q432MtYdr=jRlQLI{$twPK}
zc$;=Rkn>z`UHY8`c;ow>ar0L9q+*M?DsOgwhPME8gDiA{xqVP=AHiq at i#uRC{(@o1
z=GTD#3*J5PFceQGUT0m)OD#{!ET<(_aj9KQ`)-KpJKZTa=I7lhXX->qJ)y&oM1+4-
z{_wa=p}y*A?||idUk2vg6*hT1fa&yEyAJPVB<indrUjZ|@i##b^kVxyUV8}Q?R35i
zaMWg6kNeEn9_t_>D!fHeGGoZ|`s5Hi{tldKEV37*->IXDbL4(DBXDtz`-t}h?~i6Q
zK2?TPiMv161oN>?e17+cCvHU87AUdLQQ}ynz_Ct1V4H%*HU^5X2^QP at FHBeapT3TE
z at upxjk6bj4g(E1PUBNJ1b9*2<$J{=I_7DDlK+o9wr}+wFRkFFtW1WeKU-=4Thboyf
z<;eGyAwJYZ`O;(mrA#6Kj!SM`$xNzCPPfw+$nuJbQa<YD;VxKd%#3bYtao>kDZ?&w
zX#$&nSK2jD(@<YsQdd)_5D<7PNAcG?ZJT+2IOzL+kgc{yT35r3Mw2jZ=(XxDZY(Nl
zbebzDi*4KKb)1mSG}-%ywrbF4bSWHZL$<Dr3XhSfQ13=f*{pJ$qMlfUR;u44)~)Wi
zracTC-oYBq^&1Wn_c&k>*C7KG-ubT~Jm(Z}IM*)Y|AI2ssaQ^I!Rnbp)l&s(W^>dm
z7O7ax6R_H*5Vg$z3m-TCPd}k&t`1r|VFfm?7jX_ldJzNUU0BfI*C`CJFHr#l*kfqG
zfAIeU?p-Y|j<A}P<SU>(TmyQM<CU at Yl3FSUxcF`d=F`cU84CRLNAi6mL~r^$4s%gn
zR_K2ZMVk-P=d(N2;(J9LnOM3TJUn`pyq@;t$JrWu7eK1bG#>Vt%`bAWt}e52AYd(Y
z_5At!(U9>TgsHF}bC;5xWJcfKlM?Li?MW5Ra^n=uZfg&7<Jxqq?+#>+XF0<i&;-9*
z1Il>;^xsM_U_baZ0GI-_4CbE@;QyX7#w0M4mrG1a=97TmNmTnQ{XT&BdlCMYS(E$<
z8t<Iy&39Xi+uroCm|dBcWfVZ2n1u<wxBJ(87S at u@{)9F%Kj@<IRV;MLPJ7zv`vutO
zLZ9pVcq~ole>?n1M;95Fy6LY4?bxbp>G`WpFS=N#*A3U0o}BFX5s43rF4uVnAlG at I
z5#J*WH99<f$)}PhfR+nIOY{@~TGD<W$tpgnT-<s9x&4K9M^#m8tJU&Eo$YHcZG>+V
z@%&nc+13otYVFyjtm?11TprKUDYmJys13+m&l7UDo!u;J^)1JfdW0>{(JE^z2$;D-
zg9pV~<|LdZdQEXg*(NuU+k;KVd*T~<+RsUt_=nSl5}$j%uKRT-UDu}v at mPG0&jrxf
zQFIsXOS&*myiq?Ufx51<GD~l_a0+!bHTmkQ#<c@)kq(uz&1Gc`j`7Vksw_st<VH`{
zq^U)Osp7}C7{Hi?uBMPe(CfB`)`Smuohf<A at DjtxzlBm)ku-zPuiM1p5su4Vi;Xd*
z+FEP-4qGkTtMen*!Egn9=kba%W9JjPk>$P==ke-VTU!}|jz{I#kq(v=9kmt at JGCRY
z;Y6uq1{G`F>}l-fe~vgC_C_Y4Rani|Tf8nR;B&gV0nx~ZhDN$mrw0g700z!S`n=%Q
zqwlxBfqdifO8pF`g96FbSi@^KD~Uvfxl?TdUGmGyD)g$#jmEhb>JazakuW@@3sv_!
ztQ6j7NB at o=-h3(QG`-$y4S7c4?eUomKYL#42$(%2Kg$dz;;=aO+ER_~g5Kf<K0Bv7
zITXrwoTew}3J|A;^6McF)1tXBY#c-G-d)HRa8$e%8nMu!owUD(>b`~LZZGhHAq`fU
z{2gqsc9WNBs@>uV%41mB<T!ax?%Vu6?g8Kzc7Osevb^``>Up|BZ4HA}Hk*I0)jHvY
z`F8G|+}zvP*sxOuw?m2UKO7P?q7%>$+KBg#tAzX<M{l7XVg5&ho at jCwRJ)DvR<eB0
z&vbO3_c<0GQGS=fzg9vGTBbAsjV*UHcMKI+5PqKgcfW2SDLUVTIC`6nIGC^=weV)X
zgHT?3$Xst<r1$`X`LkN at AXff{XE`)sOSwZb3U#%bUT--x^*PRO3;PB&_ at T>e_NuE(
zOH&sWmH1X0oZgF{FZNkI^JWBGPUFF&aeVD27>#myEavwqT+VYepbgAjerigC<91Il
z4opvB(gfzC*;-~O<!FMw%{8N_8~%4r3j7IG>U(9!P<^?4C$)q1Q~7;%Tae2wY#H@#
z4}}o$_?z$1J9k#f)yF+sh`(H>C|ayAzF at vgzWGa&R)mhadR_nhS-B{DW^xDAyENof
zQM3ga?AoT<l}1Qlc7Q{4T3V!!{c at Oy`D8$y<Es1fd*Brc1sb|ne15)IJa&ZP3P04?
z;vwte=2ZJxM(g<mZL;tCTHyQb+MrrpceLrEehzh6 at JFET<nl7x4*4yp4RVIwXbY4j
zX6ENe#Ej^b$ewX67TE5$ZK3n2#4UpNEhMG+Fc6ubyzqFz1`WNa6bBx^pPCl}j~Xo#
zd80Z|Qv98;8+gwP0^S2Gotwl-kZ~*|eJ;Np;MViWwJxW%Tkl1->^s at VmauBe|MHSm
zp{m-t!+IiRb8fqROI?kvwz0~}$m1o?l4EO#8`8weT}%4)W5il<WD|X&KY1!Xy1Z8I
zv at WZ&J_oDag!t|#`otC25}VEI{%~*bBCWozR?lsN&RR!DB6ibl{yOZgSRCH}`}|1c
z+`%P)m|6Wp?h0o#R*lLwTMzrmG?_vy%D$o|tE;_=nxlEKa$eW#j6`N*J>wi^sqOj&
z8?I*?#BVDJ_O4tpnaSb%Z;KhlKX;fvVXZe at 4nXekf_0}HLt!%1Zpb)xc<p|9^q#Lx
z2pz0HVp{xs$hpYl;B>0%S_seROkLzLnA^N=Cx6=H8G81?G)?&*q1fS7eXEl{0@`%c
z^_#@(e_ge#>-)doy}=9_kwI^={%J{=)?l- at E?pgf4pujXBF#|FVK=oYgC<E?@&VSd
zQmq>AwY&ZO`1^C>9KlYv?f2JYpYO#zS2zVLn^?-h$W5KLR_qn%nF4S_WEk89vJG*x
z>5d<O$uel0?|vxgEpT_PjhkCn-sSdWTuRnVOUPOgb{J9}>ycY8_~cR~o*c5-3S!6Q
z7;nC&5VT5a<wJcqex=#fSxb`|mw0t5YjYqvh(O3CnL|u#<<A1RJ`4r}cyaL;ijlu)
zS{+}c9iJA*AvB}V?F>d5`X}yWuwP+knK3>l#<G2Yqu~yjCMt=<I*Z%L=x+^K;E$l*
zx0AJedTQD0c&L(f9C;k%uo-2Vts!COkZwMVdEJ62k8^9Q>L2xXyDxwSd>`A%{f?}K
z9d!B9FStE9(0=aG8(77aa9Zi3-p{cx;;snn>6>3**xPv$OBT=H6A)u*)pRXxw2J~H
zs2^Lx(~cJfj{+Zf4D0+X*tYp=+xW4>=mK1JfLF(g>%Xro`32_By5HG at dZ26u^`-hN
zI}A5Zjd7RnZw%I=dO}x- at yOF;Fv8>KP)^7N61>nlx8DV!1-Ja&Sa4+;#xU9**mR^X
zii$96rA7V;MA}%?B5tU^dlec#&UW%_WLpb$P6r{AXsP8|+3wm6fHsdv>5UF(Nkoc{
z%x5D0L9C|%Lh7RO;)+7s(c11`bQInGcB%cv2{K|Vk{UPsIAeL8eJqZRp&G|8K*+a|
zZbj;rq{bi4A!Gev(?_5+c+H|c9(>H1bdq$S?X)p)rT8H)=jgSZ(^l=BwF_UO+7=a=
z%tCA3D4^e&9x6uj>N|lrTWZ1KJ(!fJ3^JIAk~gT7?cNI44y$TcERLH3;qiFq*3Kcw
zcl6DT=(@+K1gMnL(6VVYTQueM(pWVnkV1C^E at sQB;{=St>PJHXdcurzhE1BXWW8nx
zH7xFg`NW>~(U>v<G<asZ>7WZn9ccJ0QP;;<&Oz>A%N1D&6jCB7YNS>YHxSw}Ju&Yu
z0yR=#=Oq;KN4}eE)*`E at j|pxYyJHE3M#tokwq`YgLMmu;l%=ICshpbKb<NRP92>=3
zaXKtUkz(R^XOy<a2(;r3w7byzn)5b4mp&h<I26>}J%3RNKeIj|JqaMz1MB+8mZZ<e
zM9b&+7Qw9k!4t48)gXcUg5V3bX0&H`icnAo2)Y31787uj;}9Cy&R!$lPd5?vm1sL$
zLz0+W at Om{OMC%pwGrO5ZPE1YgL4VP=WW*%kyp*Kn=oK!$`GCKX$>z-YJ<pQ8f%E6f
zLx%Ji=q3={p1O`oX~kVU<_Y=*Dn5I^HKOF4Jy}tuRBjJ at Iz9(CWEdbk9d+1?+Bd$l
z3J3{gRC<tT$Efe(%z=3kXJuZ>x+(Ly$WO>5p&>~{iDu8Ev>QIGiA}}n1uePF4-e!}
zS<>kG=oAL7 at XHUOfda(0xs9um&>ji=h4T$3ft%rGrPME9p+7%pETm{Fj%k|VY(Jn0
z-gowxbb%CrO_3Ck`G`+BxHj3#IEW3pr-Df%5<N0N4$ZVz+WHb<-7=HFrwmpWtr2Pk
zKDx~3Wdax at 6?RV}2^(QUSgxUljmO4bh39C``ONsJ3k+CX=k0su;Ui8BK$*w(6rIRE
z7b6M#(}xTSKW>TeDf+hmNh<AESm5*_huw$p5-Dq%%%nUojUA?6J;s2aHo4hoO=G-X
z>rtH6cKta5OL=Y316!o8xeSJZ#eqUivyqzvg#^ZPmj2sF=;_X5TOqqGH%s^`y5XVP
zby`btYp&TrBZi&wq+O-A3ICenqh|&-;6p^&tiQi^CNe^A2K_r0WaV^iwP=UlEb7-x
zlYc3JP^}<|2}f}wUdtEh+#16+vqCqmm<{?ir3#{)A%7PK%#Fj+x;|I%Xm>TFen{0!
zPd`767p9Fv)kjgUU!2D7gP>aByVL`ZhF;I(eP!~%p2OD?R5VxxJ3>`|zC)1KoT>m7
zZX~K~N4s;s>m-IAzpW8dpp~{;p+KR))&9##t+?xLohNxy+n|_dC1I*UVlWR`1GB+1
zig^U(Sf{a5AzW0b&v8xo*T;3$R(MmMY5Zc`=zJ`~*B%1Gel>xDpQu9hx?XDb(_FHA
z`Pa{$)GpyHa=AKRklbNf>J8?z)F9EFStr>tbu!{gtmdUr5zDg at l5;5X+E+8F at 2<CV
zB;1k9jo3)rAY`Q2*J79?_Q{*$NCv+jtpY_s^aFy3r}vjXh)2C(y3pE<T+7RxctX)I
zpW_P2-KhwE)2|y&Clko+G at pPx58{rSAGNAN1i-DR_XmnV47M}KntaagnfLCdGoXu4
z&LHAnXvjzcDX9o97v2_0Ctz=+^Mn0Z2A^Le&R*o>c1Y;em~eK6_cMaj|Doq8Ha at 2s
zXy65S4+U!PaC1ququ6AN2Q|IzSmorogyYpT4t;XdWx5)kbFDPnPmQDbZ9f70d-x2d
zH535PJD-mchl-Bj(UYS;>p9QgCS1G1sVG_k$0~z<ERz+a4I!3e6$|0>^47wQck*zA
zfq@<l)BQ at U0Pp`R1m$}eH*0B0wU1+Yrbs3*-utb|au``ywk+`FQJ>;wyj$m&33B}V
zmL6~|cKqbSTP}Ppd51#z%dzMef%PmfrrP}Db#=O5x(v~el8OYfvScV}0-`Wn2)bmz
z9MR*pSO{U1^tY<0U`ZvVPgKA}`4~l1ln*6)g3&1a$VfP}yZ85H?@QegGIH-u`(@YK
z&y)G{`hIN7*zWMNvCz+BPA!9-6&p{Lp>_)><~OJ6Fzua&7^0H^6(>#GHZ3qC?+XV9
ziyR;?E;g=bB^L*T%rn~zD3x@(Khu?^+e~1vVRZtZA|{h_+UgoU9Z_6{78eLP>PKy|
zNHHWJ>;ozjBx8x2hgcCMys&>UtlLzA{n)p&rxo&brScK+Hru(c;`4=R4U9uVIi|oy
zbaOM&fl`-b$%gIj{?>*u!TFWy;p>Euxi+iYOmJL at ok6kquWj=_nY8yV8Pjak8J?AR
zsn_<>4O`a{qkqqg=z&|l%LmdssjTUt0sEqYPz2RG6%l`MRZAlweV4gZP8RW7Azi}W
zB6PPvY$qxF*4r3zih}(aG4_IlEgqIthgfJS at a53GorjT<lbIgLSREe+qtp;*A4-cc
z?tM~@Q=a<x3<>9!dISK1u|p0`PmnLQ&?!7x=+#pxW8)JsoRpTCu9MRQV^8{HftZn)
zYkY=@je<`iDb+7-?69C&?MmCVuTF}QhB at tkg>JA~u8>Q$hKXW0K`Yx at QfhuuQm*Bf
z&2qxgJ~J+_pkm{WflqAuFk1x0>Q-i;;^voLA?kermEjZg4#GGLCn7jKzrQJ)Q{y*C
z)_;d(Znhbh{E*4H_SR2Inbt^lrqM64GTBHf<%2r=ko2?u9`fJ`iW+8&$#6 at VZ<N72
zroVFW0uVeJYYs*(NC^@#!UM1ODB at CFxs`&>m7s(4pOO4h+n4(T1q}`j*9gJifB78%
zME|CV>H|eo at LW!c;F7*ULdfh$5+wlP0sRHL at z$gmDE%9a{D)Xru3v%*HIOkG?H%se
zy!hUxyLHBbwuW_6QxkjypbK+DU*kZ6qK@=TPpg?75^UuWIfd++)m_ErxlFyUT at qyt
zjj{@nw^I~polIQ!{{WXjXulPTxN0?NRcq4HiFkv=gS_C1Y^L305|ee8fVzvsesxL=
z$AidluB*(5)m3OZs4S~O6DU>oxF^JePr~>fiHs<Y?e|f+m<rTKQ8F=oq#B#(PkP8x
zeU}4VQejH{?;EtH_cY&uJCb|!NZv8fcUsSNgKVcK8{5RCTF>#{&L}hl1Q-fuSflvV
z)VMZAZbiSr>z{7(#vV(4zGcrFZT37g*mky4QSYAP*R4z8*QcbcTQ|OE at 1jnOFNv7=
z25CNf7}f`Z0g*jm at HhT1@go8F53-s2kZi(JY#Gx0o0o2WB&750Z93~Z9@*{a94s~j
zDOfN0u156t9`ZZ)A^W`sspVok{I>Y6=AsdD#S<DBe2ofc__&>LfIBLc>gAw5^jd*&
zTezb_ngZjtI$?lkQSjW$&^_EyE=+-;dz>&&eAhCdZ&7G8Th9v)zfw3LhA2GKYpov)
z=F*<CjN9TYQ)qcFb8pXygYI$SpnIAw)9N>e1GHOA$2%^+lJczR2d=kz?MI_BcX>Bi
z&nph)O{=f*;#$^J|Gm}s>{D}eyyGhUS8%CJZq=XWag;V%LZ at k55Bs<!j*FabiR&VR
z7SnCM4!@GtQN}C1_DZKwnWz0UQLjlHXwOZT&DHmY)0F+(f)6jaO8-6Wr)fIP<9OP{
zt@&vl*HdS=kW&l!YaQL@>nQS5^g(Uv*7Ea)<F3z^&}kmm#Xq%}UURr!?5&l2HdUvQ
z{k2$*Ex~oMu~y5qC3ReEqSbP4IsdoUPD|^OSsbiXm6(Fea>6|071uJ)c%_MYP2#xw
zzvk<E!}0F_ZplXzxSsycTbZZ-^N!>0)0(5xGF*3`(>%SF;ClCEE#b5II`00jdHH$6
z@$UaxCcozBx%-@!$?w+uwT^Df>v)dQTiW3*alQMp7Te`5>v;DqEw<AZ at _&2nw5G1&
zkEl<)wcNeoc-rr+=`@e);vZW~uQ}YN?6>87wxo_z#x0R!OK?4Hu{CmSNgYqyXpNj(
z&j0PT)0(<2{<p>QZw}XsKW?@BTSDK(C$?JtE$9FC+G%}VHy_jLanO=FUVQUykBgSn
z_2N5kdz`eqfB##%t)s!Oq%@THmtK3N+o;TQ{eKI78sT`Z|8F73=Gt#D9q+hG|2^0L
zw~l|k<9M#=TOR*<$Msxuw><uBj=$E?ZN82oKhO35t>fS3^w|<R&Eqz;{%?8wdrNz3
zC7(^zX=HybmSanBn_A1aKK{L>eYRT8E$9FC+G$x`MgH#bZ}W1$wLfYJo#t`9$G<I;
zYYY8lEBS1yj(7WQi5y#k>phljo&7df$9rtqI{Upf|F_pp%j!1rzb%%3bGXgNzb*F5
zx1{eqwrsJVZneF)z8|-$+ob<)^*Crro#tcMR{Ql<kB{5YQ|tTpzqNZiG$8)9C^7M^
z>3hTRw6~VfX%5%j|F?`@bGY8eL+kjwbsbICEuq^oTz8vo4Zkg`<8C9Zk#lSKzrA)^
zQ`g=9w at m)c;d=M~t&@LC=)3#Y*2%x+{NG+Xt*`6pYg#i7T2{xq55Jvp(XzVUedz6s
zlh*X_e{1)4Xt>1xE!JDh{cUULwychq^+Buk()#)0cKXqpx^6LUtH)1E>Udcj-1his
zNnJ0o`)!Y(miO;}Yxj0&cv*k6Sbr_4)69CL)%t5qdtPGyR_m|z{rlhAy?q*9W93$l
z!`9SoW=(S2<FYk0npq><_Bd^Q|NnpZxE)$ZKo at Mkh?k^^>={NM6o3#8z&y_Lfy{{W
zFh0RuuvxB%+zldx+brCLD>sP9iHH#LDE{Rt{^iC`#0HlQaLLXyU$EQcdqtU at XZA%%
zG~^h3I7&&{dc`)yL4g;2Z(Qehlds|LQ7-5z7v!Zbec;nTAKnSYC$3z<`?w3%Vpf$r
zYCC~rZA(O7+izEu=fN)6ACoQO1h`^P85 at i~w5o6%FZ<ql!FqwW at D{F~e9PrqF*n$@
zPdsVc#|?I=C(?Q%t;8E-i&n+jhTJpGiEoR>ZEWweXBM3Glv>zX$)y5Pakm3*oywW=
zzkqm)Z3|b&DjB%JAcsQu`&y~nd_7u+tFvvP^=@>aHE=9`3;tr2dd at TD$cM)_ at HOI3
z{I&Dr04*f_<hR5x;VK>#D$j7T#{~kh>#Jsz_kYkobG+bu0#1lGJ0Ex9Y at B4ff%(mM
z)K8c^F*kS8<fY4S at -p?uv^$oOC-FKwWZk+R-MjZ#w~jnR=8$K!Uwnq`BmS%04s}y*
zZrXTPechzo{QP|Qv2oMV6?Ic{a><6Z>-Rl#>dk%6tY5nUuAkZW=Ba1)tzXOROzT55
z%4g5(+#dfTeRU#x-CF`k_O^P#J;eFit~c1ObH2jYt?$ggY}c;Zu5tcXIsgC1ei`Za
z60z)qEieXduV4G{Ts-?JvL4UbOV*P0PvO~Q-R*Rcd_mSRLS*e;Jckj&^uwBVJIW!e
z1MZMQ^vOQQ=njm}F|I+$#ZT!SNuOi7Q_P-YNQN*@(jgOjT2^^@2|6w(L%(@Ypz@#=
z^u8brij13ap~-K0`Lf3=@`FDQF76`7<4AHg+YOWn630Jo8w?(<U&l3Jg%}Sf#aC^;
z-5}gX<ko&#<MxB->nY{NJb*zJY{tEfZjI`(FZouF)5wVgH+UTR9;XIzzh1$TTl-&K
z`SfR!=?234fBw`{CO9cn^k`npOL7+z_Z}`I`?B1cHIY|vO}ZP1yZQW$S8Su)o4k7H
z#;e={H<;pcH6A+CcPl1Q4m{X!|4vGQhvt|`%k2G?`30g;v2%d&Q%icsCx*H)7NV=@
z+&K>Z>+G$pe^F8VK7-lM5EC0k-i?lp3e8G1`TgEGE<h${-8&P`QxX+JYAPx^mq0nT
zxEsOGd}3iy{~oC(KYudA5E+L5VTcMH+rIrEv!A2STcOW7RIWZnR1jVeVxe6NXP>)a
zVn|kdZc at i>I1>wfOPq@!3i9*93oIty7}72{)IVgz_!OzE$oP41e#PU<yH5A(85EeG
zo*LF>f0Cth*P6CzL2{SkU{<=Ue7aw-zkh9UnaMPA(of^@?(EFqpnrzccHYNz9FB2e
z*qV<0FwPsi&DutgLfWMk6c>ybI-<CXS?~LvTR9d4F}ZWMs=;H1Px`@4r#$=G63h&|
zE9WH?QsCZKI(s~a<H?sXQkjFnY5oR$i2NhKh39Gh at pw1M=UyhKY=63NQT5n){``w>
zY>`UaITv1v==+e8n8Xy%=fOdKPJVbS`v7Sm{bYNh#e?U3$~9*j+P#<AY)&q(n&vLb
z#4hQ%nVFTr#^lP3w8HY932vqO4DucAT~%`TUe(p7hK?v7Y(DAEZM!gRG*)J|>zG$t
zX*A#zQs`FxwZz>?PAUBn^O$Ul6xkYG-`nb7+Dv&4E9lIr??-a<R$!flS$7L%Xx-iY
zrj0DwxxVX|{B(_D97|2()qT|)d#>Afsvy at PfATdHv>R02mx>=B;Mx^Ex1ln>ZHE=M
zjT)~Uu=-b*9_EeDPWWKmM!#2F;kJkGG{>{~Nz+LL8icCZGxCg2`f?K()l~kWAygN9
zfxDXwb9{E!@l>MfCQ7h6T2wbd4T|g1AuXda*%(}znVIWQPG(!Z+rST+R#l!1D(%&M
zXl{mUQJEAdhgDVdfI>_6-Zg~=DlgmyqQc7BypHWMD~(3%qB0}*<5zB8;G}tQ`G}#X
zs;hf-PY#p5b}KuBeG)2qj;J|RJ+iE4VmNsPRO=!a6O0>}Ckm8d;yO<l5 at h#oV?M`_
z05R at 7JTut6UpSp?^aN#??kA7mUsuU*zUju#IqRgq+yEbO$4MCeiO?^kV*4Aw*IeMM
zl)fdw-8-AYWr)ke<s1*c?0n;a^6)5qZ7_QPmphi@##C0r_IczjTsUvLHOX&!*X69h
zSX3q at K9irCWl9V+CYw!JDFqS6V2t&_kzBkj-+h98V*5N?IEzx?u)7~N2Zx#xveR?h
zk2aY?gJ0wHhN#HkVE6errE#C=!~O-~9vv#6u at LvHdr%O&`5tT`=kI+r-VGe}@IB-L
zZhJ2-B2n%$$K$jDPPz9ee$AcLH4ooQJ|P$GapNrqVg)^OKAyuM0-FrE>UekIoIVq8
zFl`^)=cyn!h61LS3_fS}4eaIyEw_Z5&vETAKXtV6V>fnQjqWv;Tq9L@|E`=sKWnjD
zA%9pOoADH>LY};0edF01R33qI*o$a91WKnaLk|D-;NH8!+^6C>U4U8t;1V}zr^HZT
zwvO1Qjtn91yGu1Jx?(K$$NNdut{g)EKf|rm`iwp*<0-r!d?&<;!T~u8Mp~BgRwA4Y
zOhr0B)xuu53O(?}>}ht#%iHA;2r7gj)>8g8TgbQ&9vd!SoxEaTm(ngl!4twc>}N^t
z{Km?u^;O-AyKs7`-&cR0=eADB<NWaHDOIKY`u0u^vrQ<DBQKG!COrA%r0On}J-hn*
zbGVI>&6lY*NjSj1eVRqz6cyS!zEb(utfjd0mTcL6_=>|VXN#_D$!YPDNLST#B^?SY
zdJg`<;w8HJwifdzXkK^&pSi&;Cx^+4aCH@*@lrP&R^Ns^Oe<fY+W<82Ckmk=X)pGI
zf3A}DH*jyZ_IK2i**D>G3?`$aW#J2})#}<fKY;vZTiKX{Ms$oo$Kb++)#~I!A<~E$
zjm8RBUa*4~e93ARkSjCd3i8{{L5-O4O2@~^3;!8(%7q<;Op~&a9&4d&q{ql_H##&a
z8z-ISWTO!ADx0q2r=l;4fjES&F+-iNf1qzIRbQ?juDlW4*nDXKYghbq%AwIy*9Yq4
zpsgco_K%%>Xv~ZUeMMd1){#S=o~V at hNJ`n%gYYXzR?6zE%lLZAFdlrZf44%3=cP`4
z2VJY|RwQt6SwSu{u)s;3`c$bHV&@9sz7Ib51NXmzE7AXNfAIg<pPS?Pdh0SO|J&{m
z-S^?dOTu1cWV>;pN#S&XDO>2P2?~<v7^XratBn2d3%1w)ak?L=;5yH@^@SmI7^sZ%
zyT5_VzrW%13rsxj^o(F9qANXEDZ;R}ef2L_VykRLd_8~o8aa4n-4un|m6!kcfcXa7
zaVF~=wsRCNvrm^OB6YjA6u3y&^;(rM|Iq2K*%n2ZrG1j`=%>lG`|0l47DcQjeF3gW
zf64~#0f(u)+wG)Z1r=||>~<_K{HWW9eoUO9bJLi#JMh6y3;F-yn~kufR`YGUkB!Fq
z7IIBxP7Y96)4kb;V63lH$9gE+eE=RHrQ<x&ATr}HBstx(YI@*DR8euY4Gm;YLxb(*
zjT`^?fIM<Ww$ckc`HWZk>}`KEQL>>TYa}m8nKQIxT}GBEjRA4n$_DG{YiID}5B}IF
zExdMyJOUTWJ}|i-<XwoOP#j8jj>$~y6e)XA3mtQG*7O*6Va{O}q>ii!tbOdTf_s$F
z<D(8QiH)xAKZ~!rD8AKv at QRji$p==I+9VTBJyITgLC&$jLn4b=o8!Svv*M*@*zlt5
zZ at h40ovEol-l6)|@nrO{h9-HM=wTn;*-_0!-0CzJu*HkEx5ZDTG8bE?JF_$?&8iZ)
z=rlwo|9Y+O<b?+A&IUe5CCXR3*m)z`^yR56DMYoNed at Gvg{amH5O2Wi8XCB6DpmZU
zlX*Ihz6Dvfa~-EN;!0}8INkZj2Y*;Y;UBy}RhNXE>hjhG296C$K)z*Tb>|0vd~jm`
z{DZ4h1qe%=eW3S2wm_WonG*B)z)&=VGLPpZXe|~l(+J|sjhB>g<OX>WHLgo%7$1&S
zy`Y34^q$QPB3y<D<c4iI?t^<Pu?SM{7io2!agnoiM_{Bdz>Oup at f*A_(TEO<i=3P&
zVUfm*LdH8k7wx;jUrcxK<M4=-AJJ(dig<+wFWP>+XdQhGS6;#W>1g*t!_{j8GZ#J0
z0Ek>9r!HQ!6 at up?2d<EVtUtq{Kc_SrOd}4th at NT|J^^2Y``fm#?B-wY{CLn}F#zR6
z;ir*V3ZDQMf0*b$q{zV%)ia8Me$8Uv0zvAlyk+&x%i1>`)K_`)n!F}HJ!It8K%MCO
z;EXYcCXd};Gjc19mDW!keP{|+hrs)TD>_L$Clqz7yf&zBCmJ&qcI$7gaQ32AZL9ri
zzU><}t-DP&@9a7qe<U2*|BJ~m3AKZDk?NmXBnO9#MZN_Bxk+7_aL7Ab!(DZI+kAQI
zzInc!!fKv1SNlcjU~{GH9-~=Z87tpFfYIdgqC9}JP at GP_j2mu6m!zziHUjC3ef?we
ztB1ZfbVxyTAoeAdLYtVZOj}Pj|LQLb1wyQ)XUUkaI_3<|&dJFho>lx+U13j45@~l?
z^Gkz4Hj9A=u=*tG?*&o729%U%#%v^GQcqUmJMl77Z(YjYjhA(8Xb>Xog9i~i`3f&u
zdG$`b+>=fLFlscwlA2L6GoCSC#@}sSO6u`4d?#7iwLz3|3|W5X)s^Hv9Eb6s!RoqN
z$LRRcxA7Jv7+D<7LmckH*F~=L at zZzFSR67^;e|!qcmDYXa%lc}QTE`p**5ql+rSFf
zlzXKY%{IYehY_ILG0f(I>F$C$o4QEX;h)HPl8(>fWU}5mliz{I(wTHdLj%9so at BNo
zAY4~>bv~|cj&1~YNL!<e$MQR at Gs$|KjL(vE2Tc(A)AO&^ku4x}WKL4z{*8>LFNy`f
z;pEVu+_qC!K{SQS;w4XRNxR-$tgU9j>1^^M{<yd8Yi=)G3+3+2->hj^-f((;weqjF
z-f(Hx#a^(Nb}zVhhrifVvmX7k&GT#*WN5ny?Y_X)!rlMJwY{r8Z?PVpyUP1|c%r97
zaX at R9#p1w5X7c~rM{IDht=sJ5%?a-MYi$=BS*>C}i&-CYQ0LoRuR68IKiJx}_UcAz
zyQd|q*H1mQ_5aZir-oYH58M47nrT at t8Y_hQrrF{p;Y%%sQsetPZQXjwbLp at R;xLGz
z;2->^`(BkB9k#pb*uQfw5tMjr8&oF;xH^^zI_H{_LoeHT>8zN<=%8>zf*}cJ{g<Vv
z8`WaLjd!e4{NG>B;na6!H^Rk at aCtpLcH**k+KUO8r|9h{-W)0F0kQbTK#GpM;2IJr
zt~AaQ6G{Ou!GY%^@<wif?E&i_d;lM4{e3*Qh+Aa4kJnp&wf>44;T!3ZtnJ)<4V??I
z-6#Co489Le at Zq2Wx8TN7XBBRdR>2cL!AICGTygTlg}AYU{2l!i*$FuVtiI at O0{zH&
zI%<y!s5O}Ka`KGuFHIPdNz2)l at +(IzR}=gzoxMDJ4*W-+IQ`Qpq3 at j8KS56R%=v}_
z;h(VY=FPz`o<5BapE_kV&x8NO{ol=@`Meu%&6)R|R)*i7H|IO$o(`<Qgs;T2?0x_A
zb4DhbXhg`a(y$@tD6an={^R!CymauO at a#eHEcu04>EFZTGkgRK^iQM3otHw`z9Fmb
zAjrraf9WM$_dNVZw!FkmXZ0Q at V-!;45j+{FVEbn(KT(Vy2>UwWoDlZ?B5EwM6oXCl
zzArEp78L$?QOAjtugIXV9YsZx#k01qx{&yey8C+f<j6DRGwy~Q7FPs6dts_ae~|qB
zKsyLUQ|j>oy_cS#FqcEWQ&o_kn at m4gWjM+$!_heV(aq#CA<GUN!1ZTmcJ6e?tg}Bt
z?|;0q>@M34ei{~twO>L0$!V3u%IxYWsgn at U*Fj{BF#Dz-2oSS|*eCzOjR|}P23SZ~
z5jL3Ok%9YS@#M*icaddWA8f(K^&9$iE-m?h)V)|Rd*t*bi;64ByW|7DWZ1;I8dA?~
zdh6Un$I^pKOP7-xJa^VWQoG__&_M_eXYH5ScZo5=aj>*B#dn6nQq<ut^K#7zIR)yh
zW&mFqAC7tIQafSc!1Twukw<zSuAehx!mM$9aS%=%JjoE<b=};z2G9Lr9`?D9y!~5x
z{|OHW$0zKacidM0WZj6gX(OkMyzk8;Gb0R^j0|juju~z{Pe{_n=_z0fQT8%^kMtmw
zG}w?ahu*v9Ls`EQfFF}FIggnJmxG_)|IC}DVN~bZBjnwgeY at -%S#<EAxShPt<=EbZ
z+2M`tl?8Ux<{T~@{w%(P5$;USf*mFQmgk9Q^^%avY;QmLR$2_U7mrX1&NFE5fTkb4
zW2U2hS&jY>gUMz|)`yzS8M8`D!EM(K7(RT)>l4P~iR96l_|XRo3L;G*#_A!D+Ac^T
zw!LFBG8ZnqOmc`$Ifn*qOS4(qiCWttZ99<JEVvU)P2U7P-H+?=HoU|38D97ad9;F5
zkS$V(^?AJ224+QcI0}D6(ix3fpqT`=<Hy!M>@yh<%_hthzPEnCUnR?LzQiY3uZw4Y
zv=-R5;VwV&?;y3_x5D4TXwQ1{`44Odc}yO)p5iKP{}D#tux+t at i=%FEb&4;B$wiD1
z4!~HY8Zy$)?C at YE7FABNltf?dY)TFd;gT2NFpx|Svhc#Bp3@?IXN*6zKDmE{iF}ut
z6ET$AMUL>&%^h5H%ASlvZ*=NlDp~ey&!p6fDDK`Ug~y{XrsqT7WF{Z>2jiFPU^_{c
z!I*uUd}dq4<OmbqeCUgcN4*dg;5hOa*&>W4Lp~!G#`{X({j at Lzd{&(D%_D<eOfa(#
ztcEJDiZ|#n=$)NI5X48;>>+_<8wuRAYHxU2>T0|t|6Y-gh!CbMf0$e(hSE~}3l7;<
z|1DQFc<C?W at qPGfa$Wk6EE at Csz1_M)dt>dFC5zYqej|c at aUek%Rq;rV60*Z!oa^b3
z(uWBz<LTtVu~)W$f82>jVZ)<W3Hj$sFa2}>OD_q(U%rv{`HIE(dG2X^;EtQC2nNqW
zVn}1ZVNkyYieqsje-VKba+o*aI_;v41DE$(TI%U8aQ%OnFA<KBdg?fA*5GCJo(@AS
zr at lnd4@gle71pxvDdf|A+yeUP0zXWRLYP<HE3ItKC_={eJw5IX@*@nFBlv#q-%mwl
zem<owX|R1swa at fYW4|m~U>x|MM0yexM3O^=14|g?d+1DJ;Pmtb>`SOQ-0_7=moA)t
z=bd<z?YYsN=kA3DyOCGO7vyvDuXBrYkDlb0>?6na?ZajJxJN%VnUV&Qli*`c;ttS-
z&f6xeO__c- at DElYt%Y_isC%gqMfn7T1*WtKSr#n?By@{2RkhVyi?3eIzE*tt^l5AH
z>Gr79&?Y*5XM&!4JixL$R8BY)8Jk)BO*UX$&DLMd&d!3FIFU{@3GCZo3ED4%_6LrO
zmGEod>JuA_x75|0!@=w_o4iN15C{bi9t5BiawRIdyt4A8>Kb-oN7fzuXqqshK=y4H
zB$l!B01>EHsZomX5du(vA6^#Z6JYEXYN(3TxChn^9XkT|#xNf)IB+NTnXmY`fOd!Y
z9 at 6_${sB+_b3=A;$BtR-ARe&o!ZqU=SiXQKlSg{LRZ++h@(7tq9yxH}G%!j&#pWvo
z<&`&G7<^8VE#of~m6jSrr1Rwi at G^g0fWBLBU{#pPn^omZZ`27vemi}H$I)(s&!GU0
zv2|7NWD1<WgC~U}ZVC4`Fw)Sc7)Oxrso+jaA%9;LQwlVBDXf63fEQgU at It?IGNd#j
zFd{7=OCQ#58H)7 at hzwa4Ck2?hB_>y8x=0LEs;E3PGS0L!<1;fTJuM&=v~E7sCMF at X
zSkXIE{H-)^a#wx|_;+^$sECPCgvz_vfKW>X?r8~{n4PvjlykbYk5t|%sBdX_8$&>v
zK5!X|f&PUpi<JUQ-4c?jQeFFZ)k=F892uLq(-aH_ow7SzHXYJO$7@~lZqiH>w=`;1
zGw_S4#+zMJO?fqKbzJs at zNFJHeW^3C+DZ|1+e+&p;c8HzL<IB at Bllw>G^#fC^0~S?
zJe#bKi=zR;$2CI_9*m7;jouunwN_L85^zA0Dx;$9sAlNLG)|~2k5=cODfY|q-{LQ5
zF#K?Q?yt$l)$a%!l>Jb8l0FU#^mLoRzN%#ib9{?36Dxi!o4X*@-}UWVtL~-;)?N5a
zYul|TJKZw(+^D+t*~v*`N^r!`QRFXjW9Gsc_e`BNd*0+J=J+`!zr1$MS}M$sie5Ep
z#HiZ)`gr!FBrDmRlH4IHiTs+C6%m=279Q^B)3&1jzC(u%`XsE+jf^bpnAIjMP#3%F
ziG%xDpC7Sb_N at ci(>_za=?*HLLlQ$n=m+JP4VaQ?-x6Sor{}1Z?}Zu?w3v}f#2G=t
zuLSl~fr^&PKThs{eexuppEmc|+}ykG#wpPQ+7-NxpZl>`;DeI6N4Y>lSdWZZ%Q0BZ
zfET8}KB4X=W>+W1)!|8^td#PjM~>L{#K3A|A2hndj<I(TJ8qW{(|gu%@^i+jg;A#D
z{f}}fH+SqBJ7VF2Z}9%`2<!Xwdhu5{`p(U%#S8)2Ls_49K%XZ;pXo{K1lBhP{|fuA
z{iGkR&_;qm>lj^bBsi)_h at 7FFNzYPx@E<%$>r`|<+F5=Sk8DU3jT8o9gxb^ph(_El
zF}kMqEyiraWp2M~e~^8B!8Y1es_1KL@;k<wl801pe$<x5kQJNVL548>m9(lao!L1u
zz%%61PkhiXUK$c^-Hj0gUYzmzJ7jZ!KC~x5$(ELN03u^3vkjpk^NdK7<)4pQGpV1}
zcrQggXgos&?A3-$s$EhgG;M at 9j~T5f;dZte!2g?LUCie_%>=nzZfs+Vv+a2A?z{QX
zH?P|f*9XjI$rmnWgHu$~>(i9AVRUHFXoo%mbkL_Et<r~b_ap|pbeeWexyRB8=UNmk
z$t_fqaT+XB-ckDAg>|!g{%~q<q7f9=m9Ax4s<~nLnGKhRXrf at 9o*zX)%X_wuH(9D{
z9sym#TIUp6$7Knl^~s`4pRo}d$UpH_1uneC;86_z8_4A<$f?q97gHgI57)kjW`KBE
z&+aM-Nrw22m`~tdiHxWnnt<yT$Mjino&1aZ3(JQg&KCoMIvgp-<MxtsWW=%bvO0`0
z;#K)y;QYl)qQKS$d30YPA at l<0+ras<N1<%j6rPYABR&T_h10K;2!A7Gz2*tO;Rz2+
z at s6*;HT=zFmpGI5Ss)DlTet at A>IVN^gG21(gv-Kz?H`b303Q$V1q^Oi;N(|^Ujgf+
zKqgb9!n-m!EZM|h2FEJ=V~tO77K3xF-Tzh~4WBP(a9+jl!{Ai_Kf&OF0=HdJ=-4la
z8yQ?u=+r25X5n+(9{{(2?%z-;$w=Y#6d9tntyAjkarU`@!F?3?ZUw%c?s~zRIa%~o
zWl^T#OL}1p!2K0CI_~JhB1R`rZFvQQ*Vw;?wF-p?sra8e_}RhW29^FtcC7L<gTaGU
z{0Hoxx#~uFn<dcSq0y0I89Y?se<AXab(jL*>tZVm9<I>g`r&ew{y_$Bqqe)rsT=X6
zLpOh*KN+0a1hqM46O!=fB^P-z+g0TGXQ>lDgTaFpc)S9yC;svb?lFLmVsGgT=9k$e
z1+H5IaEk)bOF<zN-+q<&bA!1W3daK(JXC}8HE!@Quk;PP>_MMF+~`kXbPVXCSNa;<
zJAGp#`o<>c8=IhSbf<6suRKGz&s9GB?+RSE2H+M2;-n7~+F&tOkpq-F=z|_>+~D5n
z1GgUZ8N`kL6h;U5^h#fYyV5_c(HCRz8QVn%{nId38N`kLK5;CC+jo&!9`s$|3jG!K
z_jG%u-avmo<6kfSS9qDxf753xz%2>{@WVAa!WIRNFEMx<4KAKj;9LZQM|h=g6#pw8
zcB9WAUg#U~B?kATZ{#8vT%rFM at fTm`>wtbcRll3jF%^EE!ULaF;T&3{*oi3fov0qU
zY1B>vpVI6H at Ll11z0wcj<59L3`a#@o`}dTNU9Zv)!q at D2Cw+jQcY}MUZvgshywEpr
z3sA8e{|2Drjeia9oxTz1KjDSGk$V75cB5}>g1*s}zI`9 at 7YxExpr57K4_Cw2DsV9n
z;1&e}_y-;MDPop}57rw`I&1g<w<r(|AME6SuDukZm&8RZE}*}=L0p!tJW-kuZ!z=9
z1qseCz0;K%RzJ6C5S8sg%sycU at u&2`tD8S1zmPNkATMDI0esG at 1D-s*cVeWzl6;cw
zn>3a`Y<si3jTDD>o3l&>UDj`@7!hHPF2NZO)Q%iBt}wzB+R1E=9*^%V>1Rr)kH`6T
z^mdyJzli7*+xuDONV~&^pQ1bme&P823j6(~vrlplkijA*vuwf70q+KIivj`s at lJXQ
z9Mv<p3tcz3LjNxEtkj8X0GTaeGP?_WY!9vvJKw5GBH0q6eyrAP$n_LoLYVk>Ti?4U
zXO-+t8?o$%=hwXUDB0Z>*QLHwP}!l=xq^fVxGshZ7~{7CR&PaPcYm6m*lrx2y5_)+
zdk*#vHFS7<)WSWVrz2J0*}_Eeeduc$<xuQDdz)qlVjE!&=(|6f&Gh{{<yG;&Tn&5E
z1by-mLO*4d#tkknT~4-+EpOKzV#m2Jj;Y0{UHd5;l{(b-)9<<_K#wGP7fY!W%GUdQ
z&CMBo`_8zj)NS9ceC+h;O684H+P72ZQM+0Cfj<Zwc2(yktF9e42>80D+W&ra-U&h%
z$$o&()Zps8qrurbI8dSRGPgq70v6uQK2nJ%S>N6Vm_>m>TZK+sIS_EWE4ZMu$$)zi
zPgUfg=q%m>ONaz~rhQ6X#R_tL&Rmc~RogZpcGRcO^NExW3FB7SuLGSPTAK=Oh(Bbp
zr#l}2vnVhZK8~n-^m4}qm_>m(amf#ATfLpQ0DB)J!0qjZ8!VjSo{_ErZiR;|t^sa^
z8*XpmD{h7?0d5};9wfl+<A%EqwS~F+H~1aT at XiC?ck&*vwPfa7`r1d~*A+M)3UG at 8
z0UiB=)!zd6!Se48{7NVtslWjr;1tgZS8Q3za at caEn=O9`^edgV40N^;KQ5TQzd)tm
z&pt|n^Pv>3(%0b327yj8wL#i0N~XS1u|@toqu*dFciJS2RRjuG=5);_*<9}mS8Q at W
z?Jx7C$w<5Z0(?*#GrH}K?N>$#*}A;69M2VY-aG{3#ExpmXffv*x0o%EUrEj=a5ZLQ
z5SN(kF*W84#MR_6mzeD_b?j(xB_<hTe?u4~L<0RT%G`?E at hbs-5BR$VfYUj21HTgb
z)!>Yg_<;_7f_Rxbs>MhEw<r+z7>xfx8M9FC79+XAU1P954*Ggm`T(~m5O?~**A(8E
zz8gHu>l_`(KZZ<R=IB6(g#WF`O`W3yx!F{1jyd`<b&l5H?lFKw>4V-?y6jufs&7#a
zK&jtd&WSHDNC{^3%?$L3PJ=loUNj_|l7*waI#rbo*}k|(adz<ZLI0UJ>}Q<*-X8KS
zsW`c9P2F2n53L%7gHGbnI599l&y^LgUuZ`U*W5X^r>X1ilZ&U+K1zPR7r(XT^F#ZV
zR`Man6pTue?FbhBiXW%_Vkhy~?OfTAUyvOxgd3ETp_*ea$mhpZ%pSR=$NrubzyBMD
z|2lkj{i?YiAOH9A@$ao(H+?kzD<a50K=Q>%#-{9^b`)RMr?y{GB1VbkZk>=e&rn&R
zw(46NoU{wvo0h{I65 at XtIPSiGzkW<@W|SKbnPFi?)n!9YPtC;vMa6>>)Yh^*SP5<)
zQEo@`J390t>~!j#n=SZhdIz{gfq)*Lbi}~2&<X6}DGi^0N`;?i at V%~ZwA6lqe~Q|f
zn8EZ8zlB5mKoseW0}`puEe7@?1p3u_`g)B=qe|NKs#x)2{?b2>Kls at 6XCtF}b>50+
zuZYgT7iX4$ADBEju1x{5cZyCQSiO4jmOVKG6~DmRWBtic_`pxI{;+nH{!j??=UHd$
z$Rz`RSxhG^2IP_{f9!1`Qi36#F_z01Q#t0Zg(WZh;yY4+^R{j2*Ne-=b$&jHg_PwX
zkpnuuI(7m^<z1&wcxmI}#Q3E}?d;CB_@^9kY9M!(H)wGuz%2^I5qGX2{=TDG43*7f
z2fzKsaSil5VG>A-eIq?5JI~c^Y9A?Aa`*U3IZmj3K{<i`lp=eFCgD1xxooNGZm;!k
zU(>JC!U2U3`<fo;*?mZP<)SO2A9{N-xilHqO~ZJ7a^8%}p_W1e1g>U%bmR at b!`Qdq
z%^vk0P9_(aht4es^pEK|<{oqKu$LCRP#S5TfCryA{N6K<r}!0iEuS>+j?$mD^)Bv6
z?caV`&V&A>Q(3D~R;Cg#g?sc*cIy~^w0AYR2BB0o#<(s$YEX|hj$YLET-$ZF#=gC>
z5`wJk$s4zs#};9nUv*Yx^_jP44{f8esf<PYWnBm0B^T`2RfM<T%OQ73aA|c=)9g8f
zY*1St-2{i4Ff}`1?@H5)hxvHL9u&CWI9GV!i|RTL<f_2=R0e-ZgX=oD!H+oXESCEg
z=;pF}>hw3^zC|6WrLh}OO&gLjDzuX>Auc02fu}g^?iT!#(mRz$g*IVKIk-0$5NMwC
z+MaFyTKIjB^whE;uhxXN*-gfEEr0B;1x0!7D`s?!^^f&xPs0w!woOm}V#(y3amTYe
zn(SziK43UT*_j2=QDI!aY<Bj9`X at OI`V>p=etTG(gL_#@!O-0#SH|(lY2%&B?5gs3
z<XJL<T%9<o55DZ=aLyc6l at sz5c0L+CJhsg#7fuvDt^*$yYH3MIdzL2HaR}3mA!+1O
zWFl)j%Nu8^^dfANos10!Hi|u&Q)Fe_>cXC83yLoiM^RryZ9;_;S9sttZ9b60_zTKB
z!FL7tza8-FZt&L_oecnglf{4e%+}zy?g at zhqUbCL^5EP~PBkF{IRHdpn at 9TL{<!Xe
z?XLX}vW;@>H%4N}%_0As;Owy9gP!`3?9jeHJJ;jdh%p7b^CC<92`6noXn!`&aI}Bq
zSr?ll+g%$5GjQ187g}FEsW&-t at DjInw0_2d2wX;omyQOzjRF_hCsWze`A3+^cU9n2
z2UJ%S0=jxj(;<}&i>04t at V6bh{lX1?lIivkizU)Qw;kAgH6MPj=7SK-#MEULnB77;
z?WJ4sj`zcbX=_XgU!p->=4l$#S$02GJuojVCN at AnX(-+_bdo+GHlZq|_}+&`FCaOW
z{!ux!664J at q}#dW$OH3c#l at wjrY5Ep<ff<R7NnR{Q!~4mLNn~>>`*o45}p=P*$Ffj
zXaWlcNfeaOD_OZYm}E%ib}uR(UUB$`SIPTi!-Z8do~s{kDfIJuXBpmgko%)_$c(m~
zLbAr%(a2GAF-oZ_9rM7t^~3z^NL1U{4E;9Kd0LBX6>kX*#LH at k8?HrsT-lB97L1-;
zWJs$@V7(+$)Ly0;iYAX<@ZIj+7-a;cb;(RkHK(|CEG+;!=9Ily0J`m<#yyvWod9P#
z5R`bl1jerv_?~0m=4rsUD3}00<A85g at bRAv|9$5kswg`4Py?ko!c1)s72p;H;=YHf
zz_}U*ciBT#;hPv-*+ZR5dP-YFYMZ0g_0tc+T>zg#{N&#J8Mc1<f$s?TkuLN@*gEWz
za2LR%T<9}67s24sir=xHlvXmo(@F6=_LK4|7>fz)&V6XIs*<o!WunUq(}tj85i~xx
zm at Vc!kBusq7(i%Wl-EDm6k3O?2i{xOp*($Xd~s!IbUfxN26Evu?pyOZd9#jO(&M_o
zU4={MPFS4NOIzYr2pi^N*)J|FEJTVQJR{ZOx7a5zG9}!oPsz;aZ%MoPbPuBubFnpV
zROBT_WfX-bSjxxzlYd at a6Ki(;6!a%f at hsV1_aKdIoZ;VXH}IM{24%l7ae}tr`2DsC
zQ!uhP_ZF8YIQAB!Qpr0X4%^$aLTl?4Xv?h5q)oKui0}CxQ?7V#(z(T1(NxRMT}|bl
z9(hsf$n at Bm`55>ucK}{uDKDasr0m3otM65dz?yzciQ=_c<Sf}mUM8QiZPy->xO2to
zot-L~7DoPArvG^0n8AH;!UMH+%jYCUrRVk;gOM=h=BB<($m+hJvR8qXpfpVpH8+ at S
zp_;@KylhsedxKC9R^}!)&pXYAMVKMZO+mIv$o2(=zABOF(`mogz&P%~U4wp?F#Cny
z(lG8$l&HiJbYo6A>_k;yQO_HNJ6BjqsxfQMCnsC at cF|kpr-5Nf!DP##hlg{!`aZtB
z-vjNlVq@;CSaHZ4N`6fY_mB5$8?TS?jV!Vx4elCT9^a8Z==Vjp!T#Y7tt>H at Oqpy-
zw4)-!zrv$a!u>;Z9A}KnjgAadV=nvq!bsrJK%e<^Wq|tnob050jZ4S-<+K$r_eWy5
zl<e0w&JZgKfyG4@($zeT^7l%(ZtSABuHG3bmrmL_zjHyxW!kb7Nn1{cjSgvhcyvvP
zdGHf?S?jtD?iv`Bg;8>x%8NJ~cuAmdl1g%KtsuWyaVgyLR=0M;DL=a^)?~WL%Z=wG
z2LmOPsqzV~!g68RxnIuKhD+47;cmJ%RQAmw-lG0;H at 5`*@igbY8^l-1bia-H`)WFu
ztNTY3KFbxZ>}PSGgZ*@2_QUqEV7=qV&i^_#UUIUH$$2gdT?)4(DpNK0??9a(j!H={
zAA?0)$C*M>%Ka+7tnE=|n0B>8;XCK2;7)CGqQZUSP5D`PXF}-7bps>8fD_|PU2ss=
z%f}ulr*^@EE?yN4^vEg1;vMOk4ebaVZI(~A7zEL26p~|RraWL(8;Wn{lEww;Eg8|l
z91aRyRb7Z*z!86!8Asmn<ChOkw%<RsUuC|pc~J&8JuES`I41Ot5ZNr?-o@$3aS7?M
zu_j{_ek54LsN;t(znI%`NA>K9W{mtghxP0>Yiu$(-Z{Hd2eE5xg1M8d@=g52TJFCn
z0z6+PLiB}WIcCNv_&~;Q5*3)qkf1O~yJS$-inN1=#BKMT$HJoO-FOkXZ+G<~Vm*J~
zHt}sP-Po&Y)cBt1`T6NR$B(M&h0%#!>+s;xNsE at -(eg!;N(bY0yG~$K-Z!^>#~$Q?
z1wA^p&+S|8ytl!B33 at GKV~*_ua}R-?XQ^v9$Gc6Lf#(=Z>b3 at RkVY4mP=s^2Q}N at z
z7%^5Cy>a at Z*G3J^3z3h!<5M!~;&t0czwCdudO{~DGscn{6KgUj-oc3js#fN<+u0!%
z<HCY19S7La at ClFf9)yuDDmuRuKa^r=gK<o3bh^=KX?%Z!-bYjJZ_p75Yi<GN*JPK~
zWuD86S##nY_NX0 at 3=I)Z9D9-Mt5V&0cadA3v-9N@|G<&?esNj7v->=Z at x&o{F`f3!
z7*-xEr*|y7n1W*`|Gj$ng!=MSgQ;y|q#?;KscLLyuW-|mEp~MHLEezuu1(aUL(08>
z#;dvy4$;H|#9uuVK<~*|6v*w~o3XF3e=VBXJ&nG0AKVV$b`36BT;V~=yjRZf*RlO{
zA9O>*r*Ob`fvfmcV5?@fzi(If_eW}Q$wFgy1)|`CE~+Sfn4`kf_v}dtGzg;8c>-1f
z9nrkHsMn`t$iq`6ZJyGP_~9w|nV66yT*sG at 4?Y>*<yh*qB#he$i>+PK3hqC`J*&~B
z?V%XzbsN!i+3)9nK0{_VqOHV7bMlk!-swqRogPc*vp77;Cg12 at lqbPe0`+J<LSAlu
z38wF%HfzrwvA5j?;XoWi7n#C5q3q_do5zIfspX|3EA8moh?9%!jt&?yI<I5tlrlV7
zp2UjF$cO3a6`eZ{-8%N)Z?{b)Z<TfJ*FB>)w{YyTf$bk6+wgeWPup~%ft;7>pnXHB
zgm?k-g8t*v?GgNwg%fy_?NuE0)CsAM+{fld>zg977m3%|^N!J_0Rs9>;&fuLfP;}v
z|FQMstF&tI)$A;s6KYC=WPS6>6}<Y&74bU!hqN~Bm5fG*7Z9g3d4kqEk%cM__*d1u
ziUj*>pacQ_N;?<|It(oh2tq+P4#nY2l!>Jgpa~Pn!BOP$3Gq7li_x|20lKx~U&w^s
zDD?|5hU;}0 at jj9IS8z0}Z^ChOsWHLF9D<D~GQd|C6}dcCx7^pP|M=?1S6?#(cMR^>
zk)F(_?0<YUJ2<?ffu6+II5IPi%<!jjRO^F$un*_M`vv*w{S1D=eny`VzcBxB|29Dp
zL6JdGLD4}mL9sz`KBh<%i6gm4J}M|mA7zLNjxt7tM1 at 9$MTJMTiHnGfjEjnkj*E$l
zjf;ykrAdKdf!qi at 0;^9|)2I0Il{Xv4VdY?CPKczu0FiJVcsV^fzU^vmYIRa?OHrsr
zpJbswlDms>CQgVf&X&XwamtE_HkQDkVu(P+DfM9>tAn8T2Q?kwmg|5A9q^z79&}(d
zVcWZJogkN~3b2mpU=`?KG0>Gzw^APgiJUBOk_==O$)0cuRA%I5_*2OnsfvRHs^mC<
zsyS2e0Yw{47TIL0!?|A^eEaQ#w5gptkw;q<r9NP~NajWCXzN6FGi^mcOI(l;BtlzU
zoDe5MYh0#~Df*AVd`@^l4sWYt?R_CMVBM}=U}D&M0NU#h?FFDgrT&79`~u~A9j-@#
z%!HISPdnNSWNik*pW0>&>z^E?V?C7PbgYkZrY_SbGazsT&SA<e$YJMXtq0bJj_%WE
zbm)5h{)ZmgFJA9dT->RC6 at B*0wopXmex|$Bm(Xu8fL0*T9%JBYliH&%0kJK_!K6V{
z#vy0j0sZ+)9n0~hK}g_b9qz}M at EkA7Fq%()Jc4<G;?ppk>4 at X$sQZkKy5}8Z59^fi
z$60kiZ?sAeQR_&c7Gk0n!u`W(Cz`FWyY-vkk4GpEJjEvXkHvVja07z_odPJaK)SJM
z(~V7=R2*Kx0W69`pXURNa20durcFy3GTyLhyaV4ZIcNet#Wi~3kEb;>9_*6J8}L9M
zFE*$gG9=o(;6XD;p-S;&HD?UpaMV(&V&&c^_ZWThD at l?CQEGG!$CBXKS&Nr8r9DPI
zBlrJwm*d<`&#HH~{n5TO5!dPSv!_<9AiwX*P3g<wn7%lk9<~`?7LnO&$n1#~=@0hp
zW_QNjFrT~K=VrfWvHr6C5dKS8 at z8hpIf7^z)}}7pCB!@TzqBQgnD6o=NSLnw(#JEW
z9)G;Fu*Y~?0hwCwWEyiAe2CwgHtpw5`o~*qt8>kyxFS0uBP%MhYa|W|vZEl;C#C~*
zqXGxeZgek;@bwSa@$AGd_m&oxrOY3&_3q?Rb9xuYrlwR*D2dSaCWS4)H`}dKB62xV
zTPpI(8o$7?6wty+<+Bc)&72*bmKhys3d_nJZ=1!H79|Y~$BVBFP$J16rwr(nFgtVI
z1g>9na#4&P$3(Vo8xw4M8zY~PZW8X{j3d+c4E^ULJIZp*Do^4$;3=N&*&}VA(77<t
zZkVe34vcBWGZ%%|P`Nzy)CnrX6Lobb9zQ-c^Tbn6nRBc0p!+i-Rz_s-UouhLwIT!r
zX3Wku24NJk;;yX&=BE%YcT#0RY-~a0B&t)k2L&;8Ak(RP#LN~XLXw$n6D4T3uJa4L
zMc!h(OZbe38+(j;j{HboBrEExWSs at q<@psqgMIc+iwyG!!e7GOT!U$Hen#EhoyQ6M
zt4kIwN>48>jDC1*=|C^>xVBG5*9WfqZ|rx3+d9&stQ6ht+6_L-;Zt73FTpqshfzlb
zP9L+(F6c~8N+q%vq-TfYoXCjY+1b4#BJVCKJyKFyT5_cHQ*&fQc2aV7WJLXuQuyyk
zX-Nr-r+2xXk4O$;XQPASxNBq=i=RK{ma_8 at ap-OGapUt6c1b-i0p)hd+qnt#46LDv
zGq8px&cGVn&cL$!;o at m_{^h8>gZuq(aguT_2KaNFgP`}r-Qas&=zOP~@f7=e&{@IY
z+l8whbX?({boBU|FvJTTJ(o=T+lY<^ccJ5QpWo|QPj&xzHoO1h<;<to^1aI3Bo+(F
zau4>MANm&I<eL|TWa(k@)Im)5;~lX8%q6 at j14F28>Wt&V=&Ze&P1?BaexX5|wCQv2
zb<mGr={dqA=6n*gEj7pE_sY}vp{i>&i021}ML$B`tt?*Dxr?7qL_$G_9*-R)8}PiD
zvlni>yl}zB-xtJ3Jb+DId)&n(zBs6tDI+rSyHmDg@$BVQg`Ku<Cm*Tjl%7|fdB+KK
zPNL5h=H=iOxbB^I$d+^GgwdqU>!de+ at pU>*$Zk^3y$twaupVJ=xd at d^%wdIuCR$8+
zW at B(tj+|(rn;w+?{kU##hq*z+roB5mG9rL{BM3O>195ffBo2>Et4nSpjJ9Tdh_{bh
zfWiAm;wWsyAK^Y7<&0>%9oI`W{GU1)LufWS%5?_q3BplaL-nJU4F$abj2owyDGo+1
zWpwQMQGBJ0>#UUt`MUW~CJH}r%iL(@vU;>k7FKwa)l1{mGEtaD%UFB<9%ZuV?@=~J
z>LNrkUL at fd9^}SL8Ss*)TL5J~&<FSSlzKy*^^|_9^~OTI=}P~&g-{0d at jRD$3ZIJ@
zO;(?kb(O}6vvf0|Ob7V$p-hw#xy4$U at U2^!EDdle%hRoKDFd1?Zz%0`hW2QgFO>Cn
zE1L#oimbIVCUaI+31$9nWwNkMEt|&5Zt5*yX)kldP{wc^eVC{FH!YK9aCAg7o at kkM
zE{wS?(rPF>0wL!xy~G{V;z%_XM05n<4P+KgN}2sKe>Z!N3Cc4#9xKzsl0LcDlU3tt
zas9XC?@?!Z<2g08^Oo@!t-j=!E4kYFTYpLBlIb~H?!&)h!Ke0foV8hX`)6%V+-&-+
zjdEW=K0({$@5LLyAARlc`=2Oq`z{8*?DYF?@Nb-FaQSE08Q})o0=NC1PlQqhpZGiW
zVc9N^w(sLsKFh6KIh)ST9y`yPD}IJMEro!e$$LTK0+8NcZ at qe=;y~b_iUWoL!)pG8
zB>QU}hPFqC(QfIyoO$(|tWux;0iy$E1uPE`@Ca}<^u-OK^btXDDt+p7OWr*%h1`63
zRqd6Zzf$&w)V*Kj>>|@U7u~ja!q(2Cf{Oo(;&g05aePelZ(9E69P77%Kk9A*u5-l!
z|H{)z3_?L|{+#o7cHoaH-0@$~P~lyqy!zuANbi7zpM(`@8hS%Ij8=;q(GHz}%A^};
z2{#wL!S6)}Ankz_YYLQK;C<0_eju6&`3D at Gy*8q;kiLhs3)20NY9Vchv`qcI6w(wv
z2Ym~vp3=~gum`OL##c%0k*^eij*4HPI%yB&3zZ~ogx?3j-`t?dzE;WsIN-_Gp$y;>
z^h5ki$)yx1djmZv&Iek{00uO5AE8cC8nTH0v0oM6MYXgqlxN6SL;Gh0WtlTltV1>8
z%V at uFjODfBbX3DHfqL}%AllCzqse|$9H?CDhM;FCTwJEqqj>!9Q2!0+=SL_C%65na
zC{7-adWtD14z44Fy_6P4+*K^loc15&!ekHmvrJCms5j&h6bJYUg!HBk;V9v5kY^g&
z&g2iWXD}#(bdbU7K_~TSn1Jwf at iNc~NA*-c at LK}-5~x2P>L1tjMB~*oiOQbI-AmFv
z3wi}zXnN2R=pjte1>zxffwmJgJv2&(p^xvPbfycJ#B}jJ<i|m7RPJ7qZY-){x|r^s
zKnG`4U3?3<iOFBngGXZWU4|-|E?g7ng6Rx$+E?11XHNUh+HWFfHVQhY{bx2p<wJSA
zMNaLR)oUsTS&9ekKg*{;Rs+$KAme!GCzCbgX2{z?9>jD&<)G%`HK=zd{cT at M?UaoZ
zuvL~KR2(JWNOS(2@>`e(xyinV`^$bwX&deL%;nF}WVk-VV064u*?QzYLr|UWIQ)h&
zNXLPiZ`6L%aY at HUlR1o8Hf}s}W-p+#mgaQ4voS|)jOtk(_iXHW<m&himX_M*G2a6=
z0r>#PbD8aHx&|G~ItNZI^mi!pP4A*f%)c$PujQB6S2JH#gG5~|+Rxt!{f>dLr0RkD
z8bJhL|B3ny>7aeBCQHeNrUAWCx*t)Ud<fd=VxPzOP<&Y)$R>`qB}}ou#^mx8iq+&J
zJ%?TaI$I<QDv(yF<LX`Lv)Vr?13d((N{mN+;P-s$pB=v+20!z%Vn1Rxpg#=x!u2VC
zi0%CPprgKHQLWAhe)bc^uFSn>R8wEOJ*xCxmEJ*6dhZYsDS{NGi3m{?=_0)aBE2{1
zy*Cj;ktQ7?pp?+03ZWBfLQQ}`F2A?@&w0;y&-rl2J@?)(^O@^e89QUFot-hCwbq^s
zbXHuf+A#KPQFvL8o%fSikP0c4g<WC%tUQXzWePqf0k=~YKcB-b3?3A?jFlHoO<Vd-
z at 0_3EU!6SLB;j|2d3B3DgOAz$@sBlQGQfq(UWa$SpKzUtr2f&#sJOS(0LeQG5c>|q
z+|e@}IH#uD*e64EFoD2wc4m{g!~nfGC6SrETpS at njc&f+z98%3o3XVwI<V_FOxV at k
zm5eKIiQW(NTMNiiP+imag4?|Yb|kaS095Xed9O3zp#ZSh_4(c9GA{77_oYIq%4Pme
zyLlDAEVy1m-8JI=@qInX2!;?yCihek^Ms0BxDV~fYmbNuPmS(NvW>{XM5;$@Y5|IT
zZwO*b{l}%G85wRnQO*<l`I!2Jjr6ol5xCa{aK);iY`7c~Bc9qQQ0slx?D=Cx>d76Y
z at Nm~VEss|J)?R2db=1fL{+n2lI^2B_p3RO=@sseTH?jM4j)m;b`nH{f)pus_kTKjp
zLJT6cj<;Lf^j5jv(VUJ^otU-b`@GcH60O&2CvZL?{yqk#oGB;xebG)(N&kfq$9eCb
z`hwK66j4s|TP|Hwq&w}glCQ5}H087YI#>HD=K^CCSt!@bfj=EwMly#ThBxQm1)oTV
z7uT^v at j2CsTyL+i7~<<Lbk}gJ<t&%;c^K+d*#&=3Pm#wrD0lsQEXVTXO|2?(&u1O#
z*GY-1zZL5eIX{88*VDN<@y<E42U^iD{+v<*gZx(3x*-6;t;-^sFh-9NUB$0W{+5Md
zXI$^9H3nsGyG3SKFK~6-CgoAw9l8a?Q+V7Y3mD{XZ|baEp5usMGi96hAxu~aq}bNI
zHz)K8aZPY88mi4vBJ$C)y8A1<rDQ)bFSI^P$N!ti!V7J>5^e|o6iAd{K3aakbB%dI
zFLJV4gXC(Fv5*y_P9>rE#L%_V*d9wN4KUj^R4so*r93ZtKj2#j$+<=1KxK>HAiAYQ
z at KYxD$a7zeQEQWt!Xkvv;?BCk!z`$tnvxyfqO<K=*8Vo}+t^;U+Tu&p$1n8u6u*k=
z$~<}lHE-TR=lfclpSrfsxM8q|9Avm;1quK1fTC%2UX5ah+H~601DJ9nDj?-HFP+4Q
zio9ppo<IObZw*n!Q)qE{=;?&LG-C~UL7?|$a$2G56wDBQd;bHYK+(X1*dPAxZ$!gd
zv(F3D-?V>m<z3#V$q#W<*@0TycE8;i%HU)zI+v*=>36xKQ!HI7$#nVPz8OpSK~jwb
z3qxZyiz$`31og-rf3;W?qfV;WJZvoIg7^Lq4ep^7d#6Q=NFf- at NyF--<sGduW^^Pj
zO^mhve!z5cO7oI$-(*wPmt}B;Iz=!r{>zV7($9B at C7{~UR&+1URTH0St&j*7INP;L
z0d*G~V>mvY5X5v<J}qz-bU|rlFMGGPkkZ8k*wyr7>nSA7X5M?K8m-|(JwBiwXz~Vt
z?y_y)_S8!YkA6|J^J=n<Eg{X&PZg(D$AvVZh~R&TB$b}<)Y}?Ua8B-5d}ws7F|M%R
z^^Hbl<ydC;+#={e=LPJ<bm1ItabJp~#%OHO>BBq$DHf7=``Z0>*3f3r?tN1qx;Vz>
zM>zYe+uKIcte9DYE2+t!f=y*cn+=QFT2~!dp{$W<H%db<#+Q{AMDAn01w+M6ZW7(W
zOxIUO3r<!KT)$dS6}_HUEhapUtq)Y=|3cq-n=(27ox7#@+S{sn(ZYSHju7 at II6Nz{
z;wDAGp>!?|+}-US1~(8O!e>v+_UVB;b09u7&DID3D<_x1Bi47hFRezb34yNo(6*N~
z{cPVy#zxVJRr~g>eWFTZ&3E8V)b^?+5q7JN*ExMN*wSP)p26{pKRNe6A>xyBLp$?4
zAsb<d<vLSo;cEHeA!2q9e;VVAiG at 3l!!AaZ$yYZXp7Z at mQ~dNQpWuSLU at 0Pz{u^A5
z{K5{8nF}%5AgUZ3C$7 at kf8`ONHFI4cwdh at 2_Cs51KYV9Ygcxwk-6_$7c)3EM(bb`R
z%2ax3z4|^dD{dmgIXI9lz|4NT=97r1;TdsOw2S3x>yw(+=`?jw8u&y;aATv1WsI}4
z-<8IG-aH4pfJ4`!d#aY6m`A%|HerV|jjDPd=zB;tU*VhYjtKTvhW!+;0&nPVyK<P=
zePDXz1n4Ul`hIu$;puxO^;2>F@}TxNSL#=l*wXr@@>Va(3yYHK^NmS;`IEzn55$9V
z6dqr%(}KtROw+X%nU at T|5gZ-VToN6rhLt&5OmWt^MZ--G*^i!Aplf!jxcCbtsD~|L
z?1FcbdbPDH$7Z;7a!A)YO<xZ5FH`x6Fw_SGUrprdFlXz2)oHIhAg*(3QXStp6gQYS
zWDA{F&-wL>8~$YXVW)PSt#`MgbHudhg4FYEoiGv!m5FOmgja1xJ#x%0wB^}Jj7%cJ
zJ at dsCr7KZ56OnpsFfzFHQsv$jf7OO}&=p=hfdol>!OSD(MP#4%6SjGZI)qOl^%ok(
z9(l3H<)Jqxo>cy7oMOl=+I{F1cN at +05>_KtG(tgr;{_Z9n|ZS at O}NZ{OY70^lp1Nv
zN`bCh=jwJ1%ETY#3XN9r5qAc!_y~k&3V{OKoyj!u(?RW{eJ|#Cu+HTYSF*n1Uu^vy
zje)pFZ|(GxeehJu?s1ce*w|MEaOwqi+7aq?y4-&<L+xBZ+CRsg)lz&`rFz#c%t_5C
z=$dF-?i&Yaie>w)2cvUHliorpDdzH9ln2v<iFS-y_{r`<F4w_%0!rpuuH?mv<DJ5?
zkwnvnUq0QbDtoSt{wN!o!9HE&FfZ_nT8=<(;$qg=ZNJTS;vLthiQBw^$o9N?fcCep
zZx9N2Dda0M?!3HGs$}ccIU_iP328OfdUusF_)A#heGTm0)gr*ytp^mRjQIo at QEj<B
z&L at t~EDn{w`l~(+u=}i~-hRx4nadw%NXv_mp!Vz@?eD&LpXkGss&>w2`GAFJx3coN
zoV2MGfphgk6>g$H3k=yQeP?}H?`ihI&+p97iKFrDWxkGFkRIA`el<dqlAiVP<Z1=)
z0d;#$m<4yayIV=O?K9d`%P_ZePp at uM7Dv@=mjpzE8C10xJi#siKJr-0?^?1U^Y_4%
zA8p4xv#;o4?luY5;bnvU6rbN&B&P4Qv2PJ4#wx`TKD{3|VxU=ZEaGPx$W(oIrteQl
zjll1#EME^j?Kd8Qg`TB!_hfGaxq?)9uj#)%9DGcUnbV<r`Wi at Rcl-J?|0V6U|EH~D
zLLO=xLWdnvdCjQ=FvqXXU}^Fv;@1ohFMnbu?G$xw$30L_guQiF9D*HRl<N_zmc?9g
zf$=8Li5HdUXu-gemtNXE^ztoB(Pf8Hh9q6LJeR at hA(-bW5AEwbcj)!jYB4cK1~b>=
zT(|}Y|CiY*Vz&`F#tS$8>K2JQzuD*jjCyNLy{8|vXM)PF1%X3ci-a55cV70=3~H(C
z7+r8F<DbiD&vnn3rVcm^HgJL2Cpfg}$2|s=k$(UlL#+FZa2}U!RY?mW;h at umg-+Mv
zj)kX#+aQz5p5IsNs)^L0%4!SwC&QL!u|tT?h713a&kJ3pb&8ALhr`+P>R#*3^8*vB
zS~BQagR|iwmsSWU=4!(fDP<I31TNg14?M1R6QTO;rj;`fU6PJbKrAIU%@~*eNpRQ+
z{DCuDV!1p{3$d)mQ_B3ZnBJ1wnLYeF;Lu_-?_&H6>XPJNL(j6|0V~K{Z!s_pBUm)#
z8`7l_<J80(n|T7{%G{Umc{1^uPq!~g-<xHpBkG+c|Ei}^Qo+8rZ0b7YSifw^@egg3
zhW1%zm`}byP(MXMBim08YV{{)$%zLMyUzz9YW0u4kAkV>0k>TUyWbk{;p<spZ<F>a
zl!Wm4w}Jc5p3xUBhG}md^V5O!Z+A_8f_HR_E$-U!|7<86wO&4^U3OJI$*g&s{lrbq
z&X#lPocv-yUCE*_*P!5o76NYC50`g#(OQ5%JM-BqpH)rhZ<z1YM1y~?;l8BfAb~e4
zP{RwPiy_4`zpR9oY7SZ_I;K^u&htn;5rK;wN`?MjQvm!Aa at wcgs0NLLQ}B)gk`CZ%
z6VLpu(VQ*?qP;+`N9glg-nU9<zp@)B86LzSy|HC)$v=z!&_^s4oZ!uJENGdYC3pPP
z@}^$yUl7~5CT;z3O|-acbXH`Jn=K?3iBQO64}q%BW)iTt at M7=Z(&vTX>ZB+V2^d+(
zRJ at Svt$XPJZTC8g0D|rNCB*hr^1g{~P^PDFUAvXMAW!xV&Y&^T19p#YB!@A>6wxNk
zZYm8-vuX{Tnm%ROY>@(Seq*0-J$HVAB(D`Ma^$tMn12I~<NuI;^#(=zz*rNTeC9IM
zz*Oa#`zEf9zPj|un7S}WeEjWEhO}Fp)8 at AJ0WEp_!y37>zT`T`;s>{OJ0T^0Qw*;y
zR^$fGKHxOhR?xzJBhOU?-yd43K;NF)QIzOtn<QR5+TrmC_3X-O(UGQ~c<d#Hw=;fB
zH18W~`rB;HkYV98>;+BDMrH*>`)y8K1=B?FNo**K?Gz?^{8|1YjrW*uJ=1AO{phOZ
z#hG<?nD3$(tw$rRhWbv;1S++YAitJYh2*e{q%t|p0~aPk33X5<9#d1GT&(sdEXBMq
zj6U%7FjS0N3X(9wd+_*GOc}~$uB&kEhb{4rChSclbr8Vs>0(tUE9K`e<I=6{JH?JM
z8gM$MNs_&g1J98CdjG~9)n*SW5gXS(w8ngt>hu8y!K%c!An^J85CufV2~i2}eLU+v
zV<xS|H-Y<P?hfMKv1~~n3ItEt20YS1OeIu1NC^kkryVtPHARQ>S5_zsEzj~PDM{RI
z^Du7sCy9?&0t;P at h#KA)AY-J-tI_o_ri9V$-g0pW{1)d?SiNZyb&-5N`dJPT|5X=J
z?VYrNb5Q&$Q>R~9_|8Z(=hwqe3?r5YkdXZqnM9bG`-Q(u$wxHQ>CQ((K0e at G<cG$k
zmyPXB5-M^0Rl8Y}@4}AWBp!JG1Q-qVa at jn*(7U=)E&<E$x~1ptkF8_$hP2wgN$C7w
z-oRr;j*{<-t$8=<;_z242=85S`Xg at xO&U+GAh|j8y|?ud9c(nT(s$JCiAutFxO-^6
zd`rP6Ey)bsY<!*dT7!hf0l}q_B$~^_d!L6#@Hs*0mltBcxz52eIRT$(x_3JgU>)eI
zE(qxT*}UUORwjISuW at Fc!+8F~xmxpEAr3&2<BtH{nnlZ*wj>TSgI4W>fsAYT1FHkC
zDm+#{B<4F=1I6=%4BY7Ju$gBve|{O2McKaj&M#KlDLnsvWPbN<!F#*<1COhwVXU5U
z=s5Cy$*CuA#wD<tLzBFNzpjZWW2)~W)NjVI6l<loS>Vnw!}+4ktd=NTZR_OsuEN?%
z(Yy1PjrVD*Ud|F#F{DL(F^vil9Fu(}Q)+1eckI13%2Fn(B)xcff_A{EE4oE=iWR_S
zh4#XhF3FwP?#}P<AXfy{>Fa!UMbBa;d#q0q)&W=}V`=Iio<7;%)SNHrr6KoI5!FkA
zI%(IUf=j at h=*w=U%LjU!?&37;^a at 67Zpm$FDq?kF6OD*MQy!d+tKgRg<BDHnCydhx
zhCfFI*Ysh at ZI({TeeHoiS#n+$bwz(fa{n=_o}?>j*LhqeGjTnS$=WKB at G(vIGmq2S
zbicYZfE<5O^prj{Jz{e62fpb_KhlO?lg%{RSyYdC>9m(My=>mxg?}pX+xT(_jy at Rb
z!T at +-WX)*v{PxS)>Z|!Jfcmr at V=GdG*AmLnU3I^1?#}mxD}azd%7E3u=UuXU88ZMr
zU7^BiE95e=Eo|L9E=%l at _c!8g6;$r3p>hA^=jbly_7*XXQ_(kU^&H+w2gPY-&$5$V
z at fM^SlBJaWl+3*(E^)DmV%cHVn|`y$TvcVOV`U=duJ4~)Co=Y4FHPT}sZxOcrStQ&
zrf2Jcxf>-}{in{y7qN4Y{l_ne)n=x29No`KuN_KlYVGrVFB}4N=c|T00qSCZmbP3U
z0Y%_nn!f_SNBR#U at b}9C;;IP0Yx_q=8KCpaA+j?}lf+;IrMr{JTlUt2kj}zI#(4r2
zDw#HQ at TV#`;wet)74b)vzDD{Py)g7nq^;;>H;bZXzt2Ild)IhKK=Ia-#(uw$tKyKx
z!MlB}xKDpvWq<l4y0644jprvo&Wu3pgc}p0Z%LDK^gnJ)+pR|@sZ}$ZGA6B^uX~4N
z;hn25&I*O8+1P=HJ$Yt6*Hn!m$FwgVwVzmd${~{|IjpQ|RBQmp^L<W^EYzivwkk8k
z1$twBn<mI4;JdGcGn_4cZoiS at 9bz`PUsCSm+X2bXSR7o=oTaYDye=~KulZ%9F0&Vd
zvf4n;Gt2U*HeWTX%5B$e at QX-4nC5F<4C7C0HLUmLboh+m?&mEikEWGCf1_(_R1D;3
z-O;max5 at RRXF>Mb4M*Tvo>8z@*%lIh19~TEi7+xF9}X1w7swg{?bzNb7)m=|WuJzD
zFI4!>uXXKXGhszDZR43d at 6MPRV}2?x^AvxMnQ|AE#169w%WV9)F{Gj|WFF&5?jP(N
z_(S}{eQIlr4nlQ-yW at aa%2hVP;Z&}{N>}A;xO@&=SI$YReZ~`SdGc+U5JwBSRNrCG
z&1?6Re50=hunzdHn5wRCD{KgNf$4e*{$`LCP@}4DY$SW-t at ZWyk--atiisoiBh3o^
zBP3CJCQkqN71C)DcTk&3_D!{-$zn%xItq=J6MVX9GlT>Z`)qfikBa?neTQB0Kz}>3
z&4fD`SME5xuRL;4dmt9+$h=g1fqr-)r+k#nxsTSIaRL3|>$;NI7VQ!t8}AZ2`qQIY
zh(Jc4xI_=b>080N9_4Uad-j)NKT;}f)|(~Pejn#)UTeTa&lzz${^vJ)TXuXM+psay
zdkaW%a7gh24%>nKuq8L+;&t--%7T5!t-oLueSucG_p-wF6zTmn4g328;1uc8Ud3>+
zUuW6)yUY8tV|=vRBI9=3>C2^d)iTHd{B5CbVDg52OJI8G{x<x*D`4hop%BmiLhfd}
z0{W%Knn0I`;+Ki*XF0g-mTh=|O=cJFmn0b9lrR3sqLwT5)vA!wZ&=q0tW_ZI89RC*
za#5}sKIAfBWoD%Fbo07z0XYIsiL1Lg+<9sN88Z`w-TYe0V)7BrXc^_8qh<wu21%`e
zSP4Z&TwA_0JFVZK+vg7R72`159g6kdS{hDhql%shIdu!HHw(kQ+qL=qqbhi(S0>ak
z^70FgJp)a6h5L1((vNM!m)L~Uz98;+J at N7wDJ%S`{S?<cmhoKs;L;*5zewVKFkIz>
z(|42Wv#k4BIKT&s6I>M$XUA}t5FfbtefuFu!mmPG>CTSv-h3;`_NCqZv34&_a8bXV
zeR;}tb#7UauMms7WyBFuIew>Ws2aEAX$iD>G5JN%M#$VE)uj4EAel=tfMrP*Oo~my
z27Lr<!zTXNakY!IcOE^XT;2$sp|i5^slpoi>|#|=vgdD?Us?ogq$7zrGrE{nUtrjh
zGKD~SsPo>2$8PC^d*gp9Af7Cgp>T)|1#m?#RE~b>m5;9TkX^M5lk>X|7WSO!t?4BJ
z=4gNRiO*IMVc;6yC at R0H%Q~zmDo^k>$Nhb-d33N1WxMnBotAu*@JL;Suj7hj^j-N2
z8Gta>ePkREMv`ixw<1zVq^Y;k7^W0DLmz1DjvO#H at ZrL$zL)uQnUs53OFmGv=^O@}
zV7vN=%sU at gQA26|+S+{YW6m?FoyzMNXDkA;D{&x)<O4~U?t$srl at KhIuU7(&^Mj}d
z^C>xnKmX*(<WV;9$wGOo#60e^UeOH|yW9B`<F+Cc3b}Jt6$)YK)Wi_2u!gzNb(&)s
zRxH9?=)q0oaBfgJ%5rsuV`Xj?)@CiFHIICvWHyh~y_6b13qy&8anc7qa_`gfQCPVf
zYDQ<JF#xULZx2TifAcJ^LzVS%-dTEt>FZsvgHS|;b8E*nhvIm!^&BGO&)nS>Z!I13
zUoEMjE`8(U`>u`vVYc at ASCi`f0294Id#?7|o(qp<7?-lf`PZKvzh1!)rS4zgcc>qH
zN0KiJ3P)x3N`=8j;l%m84Vz^70-#P*YOfh7Py`f*qU at C;gY$tJP$Ip}WN>~^8;ZTx
zn+$%hbDy@;3?$Em4dsv#r0e5{0-Li*!G`X6BSa`JAER2A at Ma!sy{Jzgnp=ITmeRI5
z9yrc$U|yRRmc5=So(zN0s2cf{q2_wGNb>*rBY}yIH)y$oit|rt+Aw7c&W*9?w{omK
z_%5ca`y1+ISwqPSuTqn}0(k!9q&_~@%J`jwb;uJ|dC+SVR!(Zbm{)2uc=`T!uz(+3
zyRfTW4}JB*sd at 2B)E#69I{CWig;S9JV*Y>JxWGEpz20;(AU~)Tb+^|$s!1h_)w3~h
zjbo&8Ru+{fr at j*8m-3y`gqn0IVq+gw+s at 8W_Bp-#H0xZvb!=bQ9{Kr<V<e8K_w-`!
z`L;}Z=?aY%^%B|Cz>1A|&&wb`&R3AP)$iCHOHURG?}97ve{XEc_{?Mj`r62;8J6U_
zsM_<t5o`M=qI%A4mVXv;YxsOYNv~}8GDeO5=uIa93W73G8@*<z1G~~Cnk%6&2wmq(
z%#HI&sLP$sCz$su7NIV8Ef%0v`@P;I at CTrDOsf_~H3|0uLptKCnK8r?##fcR=~;^7
zSfSqGkPORTM`StZLC?CA!^%kv?&k3;voD2b07KF at awozwcD+R0#=|olt at 6tYC=KAQ
zK8*Ea;i+23x3)>s&Ta`dQJQ{x7mYGrvG1J>vyH at htVo5z?&LiHHK8<$od0DU&B%cF
zK#eGwUO5u at eNZxLq_>#_E(pr at X|u#ottf@%j}<E;eIDg_UaBp^{F|thBg-pA3@#r2
z_4K6)ST;M-_BBCujxQ$QVdl<JpErAYFN+#P4#$iCd6zr2`54K8JfKRHO>a6mkQ-Er
zGU+uV2l9eKP;tF-q;O$S466EOb%#oEq{<FbQM9&0OG6ndSAe56x99A^1)zRTjMAuD
zVklOm!feU%ML?y4{}@|;o0Cr{`tMq%Q(Etw!H=iC0D>PWUja at 7jSD`^tX6Mn8OuOm
z^jiX*=TR<!k6Xyw+fX-;QiT<O=j%PA&~h>Z`aDrk{qV?tTz$q9p(Xn5Uv4M~@Bt_l
z^}Bb51kMF2M(Op+k;8dFRVe4xW3LsZP~@FXGi8OFrz(xlT6a0M<f<TTg*l&qn#X#7
zoqas))R`KTj#5E!Ozqrh;n-KJo_K!`Ovq7jQTgzv3)lGMzaNeEZM=KsL6|0k(|ZZ|
zy+d{3=pUwlmOvmyO8NT&Ww8)D0KOP8=ToISR#dNk9&tQLLu=RPNPgZ(NfIuPeWzf<
zH}rtlT%Y-;+b``jBhCL;x*i0}X`sqTmhSXq^Y|DMxI{1O(YF6 at BrAjEOi*QHOU6Cf
zf<8usE?<`Q?zaDLB<+Lc^iXA_OVT~r{63QeE?LWZ^zHu}$?ae{OH>*8l1ERrsLv#!
z%lBnH#`gb>Wb!-9Twz=6Pq+U3|1MP4yXOhoVk>Vx^6vsH(MU6Vc;qk4k(69dN#ZV#
zrBJYWH~4^8U7wlR?bqPHbZr;8e at EnqDwfBL{!f%!(Kd3FxyU^nk at G*$%p&(PM9u?6
z+vw5%fezov%`B2K@^~LT`gA<=fufX#Z5iUfCT(Lz=Zf5$5IJ$9Ybe=XPFiMwy#ToZ
zZJwaAp3nCir84gOY9vVo%Qn{s``2(cvz156?A>Pc at T(iKBzgS!ecs?OeWovul)<~r
zs9{i2rkLch#{15}VaCjJp5%LNjly%)Ha|az=z2Mt*INvIUVNFhH(md(Iqm<aT^4+o
z-!$qC{t7=P8eaG@=)&l>&3ROGOKdAogj4fMCmNpmr9FX3Zkvm$43*lpp6q?T`Yk#K
z+)p~=u(ut0nJePx+4S}IT)pZ4CygzVCAOYyULSV?m-yuo+IEFtIW5%Y|3;E*=~Yj*
zkdHf|OU?4g-S*aCIWyGe|079lcS8Fbu93SXt-&6Ub};(arT2dq0Ey<DgI}rNO%qG*
z;%A-)4PQKbAHdb1nrMD$GaZ=O2z<Yv{$J?rOwWh!*%Qr)-%bB3HC*B%wu$&?=tc5x
zL&Upj?o3bZ_w1j||CK&CzXs`a0`fm2Vdd+W$2ZL!0Y{%akoQP3vc~slQO2ONZS$x1
zjPm(GmVl#Y-q+v0^`=`tU*`VR0Noq>H=lxA9<R4K{`*d`&W#wC^HqyZOxpi_>IkQx
zzMJAArQ8_tQ8~0ZO_rngkS6{wZaawhPjX42ckA!^T6nxc_hfJUl|P9~!M+3aigP0c
z$3#d(a_ld^)KBU3OM+n1KVo1qQ0=#dk`CQ at f9V<EhZW~-NRh$CNBs-Uy8#ms?h|rf
zVn%n08ondGiYiw9R~nA^%B|=aIm%KrS=dF#N_CaWWJPUd;J5R{KxNy$po_I{F1dSX
z at eeU1Y?SDtO(I8zY)J<^FawWUv2?knK#D5A at PT6$QGpX2T>EOh#9Qe>0x{utRw{cZ
zL(9p5e2V{Bh9x11!RjZFJDoZhhZV<A7n;sz82**)Fc;cR6DMbS$p5K+wm4QUA78&+
z5s?1ti%h<iTz{Z|2wkCXhJm-Zi-VQ&Wah08O?&1NW$!<gYR+Q8xG9ooMe)e_^uyQ~
z at G(B+m4>mqSI9 at N5Y%Sx93{)eZpDpI{5wf|`p>`JpOSLwn17D_%|!~kiXC!e!o+Ah
zjWLodLtzk_&gU4xm8viZZKoPWb0s^}g`raeW4f{c-TH^BhWNNW#E^<qdWVExuYOse
zc3|#c4Q*hR=J;K%onU*?l^-TI3dD0MX6e4VsWIzM{voX`F(uhE%jPfX9924$cEAnP
zf0far+3eTa*AH9rPi*aLa3iWWWpqRn`G6=}+sD1$<Wj&t3xGOu*u-b+W&tntm9I{y
zrt`SvKsnpK2I&Ew;uksli at LvUKZw=M>VhZ31auAlDas9cVOAH)D~q}_v at QY8LfTG*
zQPo^^clnxvp{9vV8*A0 at _K!DnBTE+}<PecR-0gX&;;dacu~%KbmN<et#e`#or4(0i
zIJ`PV;N8e4x0EBdhij>V&sbQfM#9e2XHt$nkVur5$ay?_us~F*qe8%L`sIWV@%gz8
zm7tA5SjL(WXLLm3aciNmdCkVSMPb|XyW`Jj0fL1M6GLOnrGmDCCSiwy++$XyUy90i
zyh^`}*TfshFjWQRX2s6z6d3PoljQGW)G$Vj0jH=94p0r8LMPbtVeI12RR=zohm3s9
z)QvAiWM_D++#?|Gsw?1H<x>rD+5L?eaOdkWuuYZ3TfOda0t&suI&(+6>gOZOj`3iT
z$Zd5)-IK=Nd|8B at y72smpzc!=Su98|tHM|bYd3%?zMHyp>zWF25V at pplDb1tBO1c}
z5mOA~w6u&eFcbHP2}gA(p;gAlLtZI|BNJAJ-j=8AJOLVDNeje2DHCA78bj)7X8k1q
zV|c$q$0~8Q20^+hJ8_Ex<7oN)fy_&JFHSAl4Bwu0S*F|`4BJzui%;d$ewQ at VS4QPD
zSjug at q;i^_V$Q>Zh?+pejuzVm?<6M(zg8*n?BP1`>d?a at 0F5wyrW_4CzdK*R5JM1P
zFoq^L_Yckj1<z9Q_lIOk$v>*(o at I~DD?~8sz{i$oWFvy#FkSWi?D=S|ki)_pzqIn2
znJUc?ME0Y6%&4ZTpG7maZ;bIw`tf1}?SMFzlDFy2`n{Z%2&1+Y%-wk4U+_v^ktc&O
z2uus*#slXJDkgdI>^`23`buvupqPvBD4L8Kr5%iW_<_KUH<9(`<(hTP<u&a*sfj`!
z<^(?3q}R~|MttXy&@F9iRt?pnL9IKOq6|h2(IO^R4Up#HaC{NJ*0cQLD70Nl9MQ2I
zmOU<hd`eB)ZG2F}oiik!$@)&;F<nR=Q!Vt<JqAweC}-g-*L9irS5OHKEsC}61cA*%
z44Ur+U2XD1Hu{PLf|Gj%VnM#7g8~I&w*#UOy6>!bj_ESfNk$*%wLQ**JkE=HTq{td
z6y?Lm4IrA67>w`1NkDxlU~ndf*TS6%gzy(fDrvK^gbOcf<L-67WuC#!MY~R&%43-$
z0Ba~)w(Howd{>MV6}bO+FHS&!o+<y+HR<}sgVpmpf!MfRIFo-C2B3FoKOJdn2MD2t
zt->1Cu?p5`Hh2CBKvIjcfoh%>Sh7=K%|OysZ^c(%O*RZ$!j&DJYrJ>k<Q?ZzcKE7%
z1<Z1;Z7a+^EVjH$u9cDnz2e(>C;5VZ?eg6_D`+}nWeDT=DbHImT68*-e^f at tQ}&Lh
z6jquCcR`@AvnnXk1mqj{r#;-o2<1v9qe^%_6E(6s3ueEBtnKbX&pfTsiZW7nyUOYE
zD>3qSGb;z5YQT&=^zZc>)d48G%DAQCY at JvdmEsQVzmiUlNl~gyjwJ`>QM{A<TR3?~
zQ$?|w5#&Tv&ph~^ONo7M`vlevVP1bn<eG82i5a63k}<+%D-{WQ>R`v;@;=y=|HXT{
zh0Jva{=g9^Bolg%-Xc>OnF&=$w&h9QvSFCDT^SMvWoj&r6dk;O=G`!e7M at Nshk_XD
zvh|!t_?sIlA#+nRPDkR|rypcp^W#S6{?gSq5HhL&^`cUR^=v6%l!^1VmXFy$c_A=&
z6!QxQQB at e>vGS at +LRLlu^0-!k6W5TDtwF(ndMdmec-x2JlkMMt+t*4vSA=hXyb=-y
z_2+hd6}cLQc%{w8NH?H?unGmnjCW+T>JH94#{#1{ha!JU9(A&*4E^jQ!<wtHnJ)LS
zzV^Wfn at Ki(X0eFERds(O6RsL-V8NM&_)>nKUY^Nb-_dhw4+FZ;b~XNi{6IF3pUX<T
z)Y_ZoZsq{bgn;o~mp+ZgA(kSkvoqSFGF<wv-(#2X%0v)z!ARumU3Qey4|p{cB-H70
zPj(@3F8siG&_y6{VY~sKP3h;1zI9!){65}*=-ys`{vu+5vP at -ao8zb@LVg>kU at q(4
z5Tz^YxAbGWZT1(pi^9#iLe?S28nRG{k)n0|DnPsw0$HAoS?a*lrMDn$mQ>f#w8a4!
z^lc2FJA#@SM`Lk$Xai708;NlSZSd{|Kry%7yl=s&#Bp!27a8(wC27=j5Q8z-$PAE9
zj_O9HGDRA!A_`V91WP*4IfO+GFwSD|vb9h+l8Y{awRFVAXP<y4xMxQmDXm&{zIU=O
z00LkNctR5VEkcPX?=1qL4|lEQv|Vz=%2V~zPo0p0l!L$mCn^f((d~g6%ALIjW{7LD
zVIXZEB=MXq6H at E@*;nB3l20|4k5ixy9F5H{x{~qg<Tr!UG`mFZ+grP5W#p8N8m!@%
z=WV;ah;nQX4~128 at 6Fhb`&0ed at _7&AcBiu3LY*or01WnEQeJs=$Fs at _H)nWwa;R)Y
zA$?Jn%f4L?*@4|ia!f$bIU{NpFYvDh0>=RCyype4=Ku};aml<CaqlW!>f-$XUx9fK
zUs1KgS9ZNIIF-XOoIeCvnTpIjR&npN9YwEi`g>UMF)(I&(=IS3wGPf|^oxE at h=Cpx
zJM0ioXK;=k;-6z~I{`kO6HkwEj-BFr1$KAcMBeX#d}jdbEv*YM-m!u57T}oxfOax}
z at P`3(M?n1QaSgb?Ilt~wN)<OeD+b+R3?M{{Derb2QDCDxfjwBE&MO`LK$~mG6dV$Z
zV_yVs`CchCUV1MLfCU87$9$vYEgvE8SqG3VrgwWp9qK~Y=mM=YHzj>Ui_wy6=~1UP
z9>7iWme_-#K`SEM-2=!+aM-2LAK<+jv+Xt=xQw{f+BFM$rp}uk0HM#{oo%OTf)5V3
zOij4VVkxtIFS-nLmRw4*aJk^k#aWkY06r6reGVRl*0at8KVjafm5gotg+frWKMUWw
zgRr%EA({Fn?$hU#6%&T<B#VZcr2QS)YL}_cJ|BJ_Zq^VgHg>d0(QJCE5!op at xFBMv
zhv2?{OR<6?pT<rpRD^RcMK7%8K{4CeFJ2%A`v&ZOG2XQ?6IEdq&#{no)#?Kq<D(E%
zvE;EJ&`>i~)G%K1i>RSy<Cn3aUlj-B<7OcW%5<7~n^SC%*q6%{skcRfWbYTtx;1VI
z7VF!S0CqpZ6n<75OMlZ~j;Eqoqk6}_?75tdf3umm at X4<VGtS;-Ka3&utJ7LD>R9xc
zH?`|`Tf%Rwc#Z*1Qv;d-C%=J|g}YYkNJ1C<k4rN&JVfZEnD84F^Gbc4g{~@m_CqK#
zj*X_yB@`If?F|TAqF%ZjKfM(|Egm72xuSHdR|~kh(4zDhl)daie<Jtey^*+d- at yB2
zhwwaNv|zC>UugbF<|LkqNX9YE1t-rnbs_Ez)<1&{5Zf6sek%U`rG9Al+-K!)y at 5iT
zjs1a+ZZj+a)d at nylwR}VT_WcWLp~Nxs=;|$iM|9D!V%$|v)JxUVp+h+#k2JN3^>)*
zev6CN)A_<;6~+1FuCrLcFRa#Kb>HhqdCvj}Z;KKgM1Q at M-gP@xEO&f7?Bc|BI6ueh
z9<k+5sV$9Sp&N(24zFU_??J_^GE<Zmi>*jCeLsZIRl=K?hT`$$c|_FHTb?Yp(r%$n
zdvR8?yJ5Kxj~E8ATsz{CvxE}maseH6$MQ^^TCf|xDyb6MSn8f-(oKbJbucIDOihdP
zh&K3|X6FF`D>t-B>~JSWEa0$9%y)Z0WlOu5v+3e(8{n7-1)?nJCvpSO0Ej>1f~L+N
zuBs%?Qu2U9Y9%5s)z<TmOAZNCRn<m`lZ$(xp5hX0!CmULBMK8t(IYp8=Q`}vKh6w4
zQj~(3Bslx8K8jNc=;!dp-6*8!Q9}^vJ<&G^3Va|_<51=}iI!{*)=gi!cYEur-A7aD
z-Y5-uSF&=37k+Uh){H@~2s{~r4oE<e-4P_K96`Ax4l;P>Bzp?u+k9U7)+>(%Y;{7U
zN_#RVmY>>xER&WuV##?xIhsQBx3mP_94*v~ppHq+Nwdh7?~wTkWy0eD?F*hL%B?57
zWC6t}n>(;WyH(Y!OFK}krfL>Tw5EY{fW*{G3fCw#FopZuZu+4B;qR*`iTLxwKLa7?
zCs<!PPWnM}ywlu=>;iO<$JVK#2YeqB)ZSBE47dRpzypV%k5*FsNo|K1DGn9-ibc}(
z%?C9G+_*bO1}iY5SuAVa6)PscEG>`!gTY%I^NFgurLuZ_9(Nv$X22G8Z2r+bP%5vK
zA-`{CEAsHMn>Z~zPaqIR- at FxNBH5TUoGO)*^ho$QO6l&?N`!u?>_m57zf3Nu{nH|2
zqW^8Bc89npP&Ya+0s8Wv7tz%}U;EOwiH)N_cS<7fId#SY#EOq?JUSi;0}D5;Y_6-I
zyC&Ez?E7}IYqK6S%e8Bol-1gKVB9%G0w;s&?Ef=UD?zwu6ghIoL%(O{!PMj(YpF1%
zj?vj&3|8?7QtT+`*k_E*(4i=o1hafEFLY-)m5a;x=p`jtn;aBJvE!mBkrfY^j9Q~u
z?U at _S2+|vU)BkjDczx~{6#3NS<AJ2SH*-!K#i(V!@R15RTTVml+*iVe%C@<wai<+?
z*+wN+ at aF6MhLj%jU(3QaAJZh|b(wQYV_RcK2xnel^K}D;HE^#^U~io`V4EPPQ7s&3
z&*qI7`BU?CQSw*j(B$fbx?2n6J?%7Y<aKQ%U5w++Ot~@Rtr;!C+?%>%jiF4!r9|mR
zY$6)(na?fzXC)mRnAe8Jx+vO)#yWB?Ud0cS)d-Ds;BhV$ToJiiM0KRTHm_WmI?$=D
zd9)?C+LU$iQZL at L*hQuj^8Ua9`!a6WVYQBE*s;5v=v-!Modx?UB;T>NgUHFzCvZA(
zMrP{nmc*K#^%1{>Fa4#<3SdieO$7TgCcbg at WlVJ=;zbPAs6+qD9cvN4X=`_p#w*#t
z&Jj=cL*RgW9o5&}!5+W7pQo4>jt<tbx}cYTwBeeojihbaiF2Wx*>!c98BTAU$d4={
zuapM6LawW0oqu#WLp at l}nnRqGU_Ypi>hXcz6J5zn`$aWgv=Nqr2b!=CpjkcVea!(5
zr~SeX;@G)C*Kn!&sL8g$b;AV(=zU_4!fT%dKmUY`%_2EQ<<@U-fq3MxzE8gGUckxz
zkA#4Ad(OZ;-ZV}_N6y4_>d37K%oVphU_B79c6n$IXk9X(P<@2fT0ST7=RCxM2&NNI
z=vz%xG_ZuIwE-ylEs7Jm6#~U^%~E|%2tiyD00D(a`U}+?us$O_rhaxAQBkKps~YMO
zG3H7F%75;kzj|4IQfDJeB^Ah|9C3)ec~D?2xY!m at ctU<s1S|>1b`FdBu{HH;>#HwN
z{EYB>JWUnvvU0Es at N<aRxO<8`=e>x5!E*^LKp*ES?#>{sUw{_EUXcO2dY8-)@}x`2
z>&tf(<bND{NBeDnY(a5*GlQUzPM5@$9NU~SoHRzCe)8sw`}0wGUC`+2g1J);;hMSi
z$24Et!)@W~{CoXds1-I(SE{S6F_<}Q*~vC%pqw0W&5+;uquho0GQJL(cp2{tr>7o$
zM`SCx=I`d0B>#$FLBr`4Uq9gWCGpOh*3mWZ3ovxaVELL<8SoZqJ6#LxJ|$PhMb`ii
zkImM>KX6^{IB$n7<Z$cbJW+0U(tNR%Nt>hI^MRJ(EH~!G^r&N-Raa(!D82tEpx*}6
z at f2J0X`k%8E7--XqEKkI<&jfOqR^-&(H74dSzVhB2PAl3 at YL(BzgdrG>K{wOA(On_
zDvV#Mj}<S&OhtzyCV*0SrsB{My2EnV+Arlt`DdovI}Y>8*14T3es>D#xwEOLYDJ9p
z^sv&}`Wv_)u#~x7hkIDf;XvN-u4h7Bhr?HzHG%2}a_dKlL+YZ`3%;|XeO??*3hB)M
zV8^uq_zQ9shpdS9pwSz+oyWR<KvdVRChYR*()%Nh>HywzrPKl at MkAqD-qz<zieRlR
zBx3!Q?Vrb6dLB!EhXa1s_9tvEpK&*p1b^#LIn{AbF7*NE<Cc;7`SK{Sw`$9APcp9I
z$Z#nU-+}Tpe6{ew7 at 3`z2hsOJ<=E&%u_;0pihF8e>beE{V{Z^eN2uC|GKCQZx9;Ql
zvHbdEs*X63C$u!;$g?R7Hzc;Z73vIoGKObI?m_dtz>w4=EK6;%aAnMg1aRXqI7i7I
z)cuw);jXeN>P64nxKRE_nPV?WE=~6=>R_!iedL!`v*_MV#<Py at bwYj!8$#aWiEqk%
z%HI*#0-F0QI$@iSSPQObTm{u~+M|-?T#xwmm!Lnh<$a4MS#$r+=*vGtEBRanpXBJ!
z35?Ej+>0`LvTFQUJ{21HWG@|Rz#2G at nhejE#eQ2UkCUH^O#TO?^5~aF8a-GwCd(}y
zGyfOpHfDKR+GEU;TRLw3Uw|mrX3YEsA_JJMf#I|1+-HBMf9379%Gq<hR^JKe- at pyu
z^Qv9w`9R!8JsZ${fbYeLJ?Sy{PvEw$t~^8stA{oS9}4R#4_UVfyV)cO#k?|iO8?=d
z;FR9?4?v~x9&FTFQZ4))Die+dQ?+W8-8K&Elv{-jM2C`xj at IjyTZBHf;r$0R{hy|c
zSx{D0<Y+YF>)&BNdbvhhScq;Y8d}ezC{)-$_YVkaqiYcgDyQ=iyn!3mCfOoX+#sna
zL|^=C(6lT~Fr-ql)3kr)*Ps~@*yf`NcbQ3sQP>L;Zc~#;le_CxT);3UV{RgoNVU7~
zs(36?F=qF!O~x(nE}9$`3kDkhNce)Nj$Zl#ZDet+4(I%hDrTAeLJM(#R<WoW_eJ~_
z8-bMhRd2f#&;A`azV0GA`)`2%%+b2*KS8}rQgzf)7RHc%?j at o+Z0SG2;Pj&=hWbWS
zA;a}_FMNKzNVc^?Pt+m#hBnKdSL-b~Bsb5mSIhcVsW0ttSwz^@QqAsss{SVwG*hWg
zskyM9C`N{a$jc{sa_v5x4uVmgD30yErgSq at qH-t~Z8S<h{UW++VmV#){i~VhVX<i7
zlt!oMk!KR*@)(!1^QN4`XE&&k<6`$&-zlPtnDgMx9>)c;XH#YBb%3>b{)-s_EA;9@
z$Lp4KAL-ZCcDI&@Fz`<q at PYQr7eJ&sP~G}>WaniM7=S?v5TlFN0&C$0IS0f8_+M?P
z3)XI1qi?~I#F_$rW{S0*mckg at JJ**ORpOGIpHi^WC-fs+VnJ^mib>Dyf(`T#F2Nvr
zYj{d$*?Pr;s~hVuqdnOlkTMLMLS+Qu63#i&ea0no%B89t2^h(oVPhRRgeagzT3mXL
z7lM^lA1|s9Y)1SX>KhKom{pE_s%t&@*|XsuG9_)wM0a(TPD!K({@J&>b|$*Dx^^y_
z=^IZ?btF(|I at DBIuG)vX5l>6VdNz8iP)62*zF~UG%n at rBf^#0!wQ&2*key%%OZc>y
z(7Hc1$<cZSEmjFg2=2na_IRzYwK^S@;h||}i`{vo{9XKjS{1zWi}Uh&_H5vT*@+jg
z_adrJN!4q>iuwe-oEb<Fkg#(67O at -Ek+;rstMyhbnx`xXLmzp~wK`!zpAo`L%}*4-
zbmJXFg638><DR8{V?`o+vt>j~;Xs$_Vnr8>-80xD`s9A=Eq=G^C-maOycsp9H_agk
z at 2dgLRu6*p=_pZ%OKqnX^0fz*W*~`tgt%(xA$KhG8xYBw`rsms6Q$bw`;zK)Qg=Gk
zlUSqw7+Oo*frl5_-p52FHNSzrV{+?DWF=~PgOQ<_dxKyL$BJXwZ at _~}%S+xXBE((Z
ztuJci=H%R**}pRNg-{g=Hrm&51^hgb1_ZmI^s&5yLnPLBZw#^giW1{`Z(J`m3c+_&
zV|nz8>!ete$ETi1Hx<><#!*Y042TPaxBU1dm9}-C!KrRagN<o5gWljeuO#<oE_5ul
zyWw+W-s8P{&$prm`6cC|Fnn+PDP|-POzHvg8ff{vRM%lnEx0@?PCby#l|2HyRwu{7
zIbh_!7B%i89#{UJ|C2i&3{K!+k5^A$aabO?VYGa~y4wq9x at 0{)mb=K`ytc>sWo6v#
zytaMOkbfH{^#>3GgRS;8AbhFv^ZO#UJhJ_=wfFcXU3f0?2L`sHhK~OL65`%Xr at T8z
z9#4+Ve=w`h%~^@b*4cYLo*RB3jn(GW+FsVzLXxlJ2&W4fTfjl>Pgh$rLgRm)81yf_
z6W7<o#VB)%6|LRNOHZ%GN!Edwg(0YTKf+uHimhGe=G6e0<J9FHy}_<{AY^T57m*nq
zUkUXTRLIcuXK5-M2gJ1)@HXE}ThbI$97siOdtkGII+-yNAsNH(K>X(!QPi2su#y_d
z9!2s@^Vtjy%F&`STO<62Ls!{-g;-cIM}6cW9>{9YlUBhZbeP9U*cv2p%oy at k!Y!t!
zlj%|yVbOchOhBP~=>FhnsJ58`m$n9TyD$^SQDT9lWhR4=UWf_wql_!C?~28vrci$x
zrE1kT%d*-T{@p+MS}y7;d;LVjVOvDJBdp8Omw$<W%Z0wp6AETmFxPrIliYj?^-<ZU
z{3bWH^of%-2_AVBhgf{9EXUoI$>iL>`5rX;$kL_fj6u8;zo{DYEmhgM7|bfUfU;3?
zU8LIF|K|P4h4}Pa@?q{2R<x$A1s>+oW{>3OXp7qBKp}ffWdr73!GCOdj~|OFfYJ}y
zJhr&9LlTfHNPmPMH9L|v`xPjF6L?nimh&1}+ at xB7R0qu(d{BL~b-R|0E1ffWG9l{6
zz}I`kNr1 at ekf}ccQ|AK9*95O3A{Wb{I3qXLjK&plAL@`psdYf#s4e1(!YRKP?e2yl
zlsP3t9`Ry81n~IUaCS8$EmrA~YG(;jcV}JK2^3W$RvA_dJ-ILQG3B!OwPHAY0JYCl
zr$Dr{_ATM<mOMsZ97mvNkO+rlpzrzuqJRQPDp7k6+`!RiGqX4rTxb8L9CU{j3(&(F
zgj`ZI1`xfnMO_LX*&dz?w*rVq-DeeG7~g)FRAA5{`RoM)2)?@3jJQb42-F?!R6kIf
z&O)M)N_nlw?jse?LzTnU$b7~g_oUYJijA8ovHokDBOhkg^q)U%R{aUH&Bpu*^C6$E
z$i71oL#n2>Ogw-ZXp{b$)gc*BOL)BF)Rv5s<;{%IMa_*B9Q0aI(svL?<u$sI7q0H>
z#&GtnOwa(r`YTx~-*($>!yZ6r`8-ec&n4#3Vj+ngk2K>v9(#D8X`YR)I%4_jy1AG9
ziF68SwQ1f)ix`~sdzrEjm)ULqyI8IZ!2$^0g&>#38+;EMMf?@5A794QX^w>?O<lW=
zz8Z7(!hW at -+TO)h27_e8jr;T)d1<aqwZNVyW(lGEY75-`4)-hgLlb1i%-3w}2noVj
zURV5lF)~e~`Wq^6hRKsbKSF%fpl~Q`n7&1F*_iea at pU9;e(*PGQ0-c`!P$7;DJr?6
z##Y7JgW4Tgh|FW#Fwd8t7LYy71ac~)dA!By+8Hk?QB`Wn&;a~BSuQK|n`D)mt$>ro
zh?>i8e>maBTq0JQ?>*)C9IEKZ$(WWWFD}s$`bQJd1{Q~2T at 9pe;bYEkp{d8tHh!tj
zG)T<!zqXIX#YNrrw}9~v%5c}{MXJ%SPTm1#TSMmXHs;>9AD#4R0WPo=ab6<@6dOPD
z#u`*4{8Dl}ZW$2oc{klR0I#kXfXzVr(aM)9umcR1Ng;rOJ)znpPo<8N=2p_N)d``O
zVV>F&P2IMhmAYL7*JQf#sn!;k6ICx<VC;|}Af&RqXONP6OFimP9K;b1=&NJb5msj=
z|Dk{1mHZz6n{^%v_BT+$*u#&jG(iUXM?3F8d>5L*GIW{RAGK&B?jI>fzlh^$F3tpG
z{n3yDWPzZsg^2#t%_eAw#`{2%(LSr^@93Z}@Z9Nt`tt+|j6-nc<!ggOKAR0%haj>&
z1NsG9)D|<yC+&KxTRG_>pCoVVaKpDhxz&I_{=sX59*D7nQk;VQvhD!VV}2Xqe;a7U
zwV7NiMS7VWHK~iamXrtfM3@~O%eYAs?inRzMvvOR{`C;%Ar9jsZl6?<8kdPV6W;kK
z>zktsR|X9gaWEPRkY{uy`n`z!^T^>NtxO9^P7K0=U{hlm7+U=U)4|lP8#(eEC8qAB
zAYm1hFN8u;I at LTvW<xzhuD=pqzVxW!jo(dL9K7Op`k)DC*zCZMuZG&NdVZ%=ZdX$A
zF0f_n{98f47_!$kWkGf3RvAP+c2kY3T3_D=DStxd7od%HPQ_sdwqsj2OAVI5#1P&;
zoNA0n9+;RfkuTbZqck9vMMX0wer3k>$c>FN;q4_sQ&$l~XHfuMrqN(vUxV*WU3;?t
za0V+z;?0mlFD<akxy$G5*WiR<G<4H{^<$Fj5 at 8-75yt656j-tp2rcK#yrjPX7nug$
z#=#49p=W}Dmb~7+PkvcLg<=K*ZR(~&^&iB{kl8#q{8pc0{L4DKLbwzmG^t^}XO!||
zE4)4>E|f}0R{>xbRiA<m-%)2T=rJUM$~!ie;(Zt7F{*5?H`XjW!n3JdHB9?5Xu6gs
zGy9w}_qT=m8h3xyn(nFYujlx!EQ{QruWDe*3rE=yyBRXWwE1C3ABgz-?&_8benH5u
ziGsp<X((D#Olaupwf`+JDB(W&)<<3XT4{XS2FG6$Y at 9Dk1c%gFQ#Rg!oJr%;W;cc%
z?c=UxXB`?$&F4o=(zFoAtW<AcE=nG1=JO_ at k-AFr`$Laj+a-*g&HCK2OmM^9uk%Z3
zP2ey~qe83=J8pk^O1wHr3s77I4lMqfsFa4j5CCmIZIkl({s}_viwK5a4_>(MM?aM#
z_s}%|&O7<Gv0hoTO~6g1`Jq2|?HShG9Isu^`opazb1{+IuSp)ta?#^y-8v*|sSxf+
z+}$9jMOuy1$ooqy#T;725=(Ln`f#lU{ev{&{RGmql05>`_yk9q(F78V!?RmX-dnkB
zp5B1<IBULtak^B?#^D#5Ixt%ohk$4TJ#rw*MEopxo0`A82XiC&LVkk9TmD*&zqlBK
zM_j9(pt<w8XGzsm2~@bD(garlb at 24-&O!A5#n*d4HPL;I-jBT?@F*fm36FxJqM*{0
zNO%+h1pyW55>%uULJJWCiK2)|0ty1srGx+>L0TfDS&&`>gc3<q2r^U)eIU8{-*?^j
z-tSxY`!Z|ob7rqOlT5OI=j_>M&&g-3$Mk;*FQ)n;c!wkvrz`$b<Crdjy+ZZq^~zp#
z=zj#b>8<Hs(VHgJ|CRi;y6raZpNOr8O#e37RB8J6`r~fX?Iu$3OnhNN{fStsTe5lG
z?th9G46SE>ZjWtKX!<Y~aq5 at a)swRMkf+zI&3 at vxN2<iI^81#qjsKag+I3i9_Caq~
z-JQPqQ)|jk*>?uj<;35XKSv7BWUqYsV5++I>7{z-{iBN)dla6l=P!SNcI|nNyR)oh
zf!lxoW4F at Q&QsG*A4w1UHX%bY%@zl*e)^y;jYW at XbSrESZ=Z+u%w0-SShroxnLrod
zHm_QCo5qND&nLYX?*6JCzjpa&(q_qj1Wxnap%3cul9ykT8sK}E3ty{m5g+|&`N(H)
zXyJR)og9mN<laTgLZp7^f4o;{VWp`u*fW?^Y?>+dU5(UoE2va|9JOoF^R4>h_5IUL
z1xEWoX_xmIdt!0)t$Nei+3BV`rgGq~=Fgs{5b)PTLX$Y<ypmnP+!Y>8D;`Waue+o9
z at IUDfZ*83N+$h#eCS4laQ<?Q_<kI(yCt}Tct$foR>z=QTo<>T=)^*Qr)3hHCPGAY<
zUCwLjO~XcsV8~b1rsezLiCRBKU7(F&rr!>3Z&!H#0rK(8qbS(t%s)nV-@`xt)?bO*
znwOV9=W@!_(pKv(`q1yLQR_2H$I2s*EoVO`=+BeB1sDgc$t;5#r-n7(UM+wfskFHI
z9eZZs%(;ylCHJOTml4c{L1};CHP32aUD&zmaiNQR at b7w$PfY{P38c3$y9=|ZU``^T
zv^?70&+hP6`w#lE!s1G?ohKph>8-8HdM~m%htK7l?fh4`>n=>;s@^Z0G#;esozbAF
z0IlAiXD$qU+kT<x7H=T3J;!p_kKK<WC$f_WD-CyHu#Tp=m1R?PRhNnOyR#epy*K>X
z_aY^>Mk&T?xADGj;GuAxV#j?7DW3;juVyQaF71hO{#af0Bue+fz>QNU4y(7l=Il~w
zi=PVpT^Ezhd^DT-)ipke{GO(~9`Ni()*vorKP&c&>-Va(vlSxuy0l-l%~UU0c!DG#
zeu_VcQ&E$;u=GmMaB804 at D=e}8Up4JX6TVg6tgbl`SL<r-nUQ2)8!hxsrQwMYm`q*
zs0M^u#DGHj!q;1Nf`P{flhbbU;|qOL5AM=)2g|kSQ>6 at 9rnb?GDcQcxtv>_bcgZ%~
z-E`mZ1xdEAWovL?gV<sk`F|HjrjZ}T{~tm+^FIBb>G$bst(w69-jQndO(Q at 2pW>eI
zpwHaj9CUL(w2uoNOEe*h)b6g!8B{8o(!Mu2t_ at n<qTj`6V}s0o7={O#X<_Wz3 at 3f1
zG3#ILL7x^4?{Wx($WL7}%XK;D5lx*D;Rwrti0MFSZH(^e16^R|WDb2$rae|3ynvW}
zPf}a1*)*iq{GZwwZd(<!W!*M>_R<gAP)^F1In5>LuMn*|Vf=c|pwK*Lwm=;5C`<`E
z`?1TtPpC5)qC`XA!6;QRDyy^Z&s-RQg#Wh)^!C(NaT~(>Xk^)RR<*boR^Cr{X10Bi
zy8I89On$O0;Q|faxtHln at 3Y#z+?r>0eOdbO2X<eutqZJ|Kac5QDCK~!tCP-w&qT1_
z)k(KzHRja6g4_C9;~K`z?*2Jgx$?KWdcl-gc=R)>e9ywcuB{kM8}@s(dft*J+O$gj
z^qj`L+CS`V&zd&)PyQ9T`g%DEKixEV_Sy7>arJv*t at -GWYjzXhla;({=(yK^j)j>L
zCH7J4d)wpU`|sREy>?bR;use%y7OIp;DM>xqMo#5<17MUo at -%oSDJB&(@G7KGT*~C
z at 3L%`q~Dh8akDH<DePOjKDo3X6 at fQ~THq7!OznS=xEma8H|bmt8HZ at 4YrPGLiHb5u
z<Y`)HRbrCQY5n at 88LAck=gQlhj}`X#yp03L?%sdCKlftOf0c)}l3swB`=exe74aVi
zCRQ@*SCs22DkTQ>?1O2-Q%fr2IgL%d6Xyv+QYAXmIj at n_+W_dV+S)7myv1x){f}t(
z`3dY=F)@?P-OzO)Fn3F@%iV~yAM+==0GIi^!*)LL3+Gn59s#OnyS}xZ^Iuk_b?t5n
zYgjuU)+x`EI6TOEl>2CML+u5u!wpANw`4S6O8#(KSZ%Z9lAD;n&}v^AYWXhhX*t&n
z2a|NCK{Ji~fCCV34rxdNMabAB3?U7`KQDN{1>CtRB3My&Bh<-p)mm|0at|(2 at 74X2
zw`YUet)=@F%s0<ptH=QoSJT%3x%^pd+1#((CcgjErfrZp@(3jFepJ!ogQ#yI&T7BU
zj)vS+TX;A9D`$16w|BJc8)BvZch2>$(EiYt`^~=@BJ`)O)q>jM9>MC<1=*xb-U6>5
zQcGb__~$e4bEa7QLQ2vd<YZ3^37_=&PmCQR?|H6K6l6ZcxfQJW>37Eu=<U+#<_`Nj
z?E0(Cvsl8Dn2DXAh+9q3^!Yi-A0N-367kxSWF<fk{iALc_l2AkS7YKlbN;}>D;N0M
zu?;TY#xsfMj~rhr^MXmLVkTEY=Z=k19lGs>O3kUU`wrp}o=<&s^UDso2+j<gabIys
za~>!E)fU=z#-O>1U*#rSt6Fo9{4H&i>6%xYT at yuwqx`CnG-UN$mGsXFh2s2mPmr{z
zJKZ#`HA9;DF(c&Ts+xu>R&Q2;eEyL7eCd?EQ2drv$Rcz_!<P8qu=<i;pt`U6cl&<9
zCqdh6jpfSuS^G9phDndsrSny#-uG_}XWr?!_K4 at gb19>va#6WEX*zFpt{vo=^UTZg
zQ1PgE<=fG1t7*#j+<n|hTixi+^pbpD4ll?5U7O`pG|z$uQskYZDFjLf<z%_Mo7;NQ
zDP$#*K1cg8xHP=PmmikrCk-a??S{Grbq95aakM6W#mY?@x|U8iS}Oe!R>2~&Qdkr_
zv%GE7>(d`#Hq(!%&7#YO)T_4*TMk;TY_6u7`r7>lv>~ax+iQOv-PG3h>*$53EA;G-
z=~s9F4>&$x%r|zMsioFZ9n^nzI#(>Z8MzvjZQ`NJ=Sm*)5In@>3sgEP-8gW>bEFVv
z#1h;V-V^!@{kmvBhE3n9zg4fo1)2IwTE&F*>~$!ZwCFLDKJ65Be3&t~KHU+e3R at af
zuR_12FZzA$ZHC;Pn;8vIzpWl9--}cOgY%9r&My9id1AsP(M^U)r6#=Guf0t^4^2M7
zz<p3l;u{7!*r|3Zx=iv>U^M})SG%USKB^S|uX!ZNF%><T at Y{CepSix7-?kmny$zA1
z+ at 86cC^JE6swijpnxM3!ytcd+Kh6_4;zkdydmC(=&+6aahjjET!B#65PTSAe6E=rN
z3}5EXIe9X%BxT*KF3Wg{wRl3YWlG00R`QNl;5H}Ybdvl9qZpJuCg8KuY+m*I-0d0q
z-L-Ma>W6>UK1he;aD<asx3;b^j53<**|pR&aBN&vKFrQSt#t9){#Tn#WNls<|Gw=J
zf4B{kwsb$2T^UuV>K$Y-{#|=^29e~pri4`Q=pwVUO}p%bZk^UkA-zi0r*ZSRe>D|`
zH_n`#Oe$ZhbubZs8B$Mz(oB%?bSRJB5OLv-rU8BX(gS@{Nu$nU+bz49Gs4}s?80zQ
zr-lv<)*9F$N$8lR6v3~n2*e_QjvZ;(chTwi-K^lk9rHQ2|LhHfmz~E=l9kVYl4W`_
zJ#V%h+Kx(%Bqx_o5?|=ppWx+s?`8H;BwwP-8xWqZm~ZNIH7G*8B=DuF=x6mtxMP94
z%g;J-X=qkw+2^RzM&|{_vdiPjOgf>z-o|H!|Fi$P+yOFX+w?-8$r(pZb2Ez$1O~^w
z9$DJ<EAT$wxsV?&z{N#6cB0^|ONqvmGHFWibG$yw#-|$E+3P7UFegC*;N5d&_sPM?
zZ^S43*mQ-U-9a$LPqDherizZ=1Rt$;&}DSBk`;;WF82+-8N?3khTAQ(%AWWxW=`<F
zTwC7sF>5>S+R(k4dym at 9KDzBdYBO_w%6){A&m3~8|Cdev2`MX|U*0>vZM*y)$O&de
z**}FMnR{Ee<G%N-k$dld#NEF+F}Z8lv{xLzcw!hwT9=urtEo7De95WW*Mk(Dv3O|M
z2$EV!w(dwZvlL#_;hyUbNG4_MSZBY at TzPwJfYtdN%eBs|>#@s(kS{Z077vW@{hSKi
zA1zYjsam%7Cx;DQja at i*q&_#(wRxI2^Ts`HF|KCrG=G~^wb6#HfHJZ6zG*+q_GYYH
za!<LpW2I0bwJ*Dvr*PP;Y|A>ymtM5~_e^gM|ELnGh~k8;BGq?eUj;z#>DazHvD3ux
z`Va1U(p2=_S#~Ug7d+rU=hb*Q1KFDV5%JMosAVOCro4*y_Is!P06Fwyn at q(&%z~d*
zAGKvF4t=S8>YxC3zc2frFLlqXYs%z(2{reR*xY1l9X&@D3?z)KPexx!$()ED0*#cG
z*dOx(1d$hwn8;^ov$+~O1;h-Cu%&c0ht{+1e=8(}j09rJs;2*v)q{DNtiDE&kI(!n
zA6mQtgOJ;4^y5E5xPj?6YR{`=&72YaFo^mP$nQ5xVvhTNDuX3^(qtXD6{I0=;oMTq
z&|(oTYlv17iuL%<S%g%w^ekR{6CaxOQ4Ax at o9~wDFB}d`zj=5#E(4Kud<2_3q(f|_
zn@&6kZOBvbb_06{0x>1Wu at xDJnJ$bszhH7XI)GMdx~anu$&avakJusVovj*LbX;6?
zZ;!a*P`ZA!8e#9nw=?1sZ;BSFx9(3!;>R?c+G&eEucaU4_>5I1Lf3&ha<|(3Vrl@=
zfY0>g>+11|-IA;+2BbXM!=V~+6v;VSZ6m!X13tX$B7 at +~cyhd#{d|arrRwn;W_oT=
z-4)7<Jrt at b>sL?lA!RYb(CV2|tL5lG+Q|k|><}*`!BE=Ln-T5J*c at 3m5IFU2;WXbk
zNuh(*Im+;6ygI(*i#X2fHXS>ad1YaemVaDDJrfbZZnX2}+n>W{NiS0sBA<!S{*kr4
zdWPtaVcw&$988iB(x(1XzY>OY!jNuVx!!#0A@#a+ha<M1$vci;FfV<1JegJTSWze2
zq3Z*`>HyBQd#BmQeB*;DMSJo$i*Dv0f4b29fpK`>%8?r5GGFo8`+4tBhg)+}$SLPM
zzwN#}EPm3Tw#Cuxt^Pi@!q*B3HH#Xr&PlRA>(p4BuE<k<d`UXFQqXZs at 8Xu1n@(2#
zynpXww at PgG<CPF+`P9>n{hcAd6!sKYSR6U0{M0B^AIU3^)d-9!w7+ at d?u{5d{l<YF
z4MS#pp=WrFhO_ly<CvWI&L@?f&yLXe#k4+qvx`lQ_~!{~z{FnV$n<#k?81v6A>@hW
z)5gT`BgPjMvJ*?3E!SSZohS*mymafT at 68jrBReaT{<>PkH>k7oJz<pdmx8Qj|1llo
z??Lvev3JdnK*geC>zYdOmrmJ!=V#;3mk86>vv<T_52;KXw}C|cbnFOX5fY~Q{Z)i5
zDZ2~4IQ(_RJF-6dz-}e$^C_2;k`G-u^cfNP$jH3Hy2&|Q|4xwVz-I33-sl}S{;}zv
z>Wll>TvW77v&ph}6F&X=NPLLro{u>i-}hJ;XEhk7%sZ01H=!@oC9E!5S|$O9P*(ZS
z5Bo`t2gz-#6~`PYr79W<FXCTiT*rTwp=w5+3h&!<?<w|G4X^U^As1E4Z=cSNr^WpW
z@(o<8Q;2Z7@`QU_xt5>4MMd$abmgw~QsQ`p$Jg2Hxr^=B at q<OFnkMx-JvDiSK!V05
zNwX56oIa7T8xbq-^lEwUF;82Cfy<S90=!2C+8NqzIssJWuzp6xvZB^dQtHaD at lDfJ
zf5-7Os~Zd2k8f90qh97;&AIa3{MUn>O6T0;bY_BNU57;sa$3&sHHLo${N?ddt&H9<
zjj_z5*jPQSz6PHZ(m&Zd3A;~TIrBZSYrAXDcuL>f_e~dN9 at zAXwXSohlLPx?JPR=2
zMWylYFTQJ!z$hHto?OKHxZfuEdb%uM-T9|M-gxkN6%E&0rw?cu{C$jkBl$qaen9(q
zGvVO3w6gF>sKwn0H%+NCp|KJ!8g{(5<;p$UoO|%{zORADwV#>kGjg}3&mPq)qkBt|
zt}`@#{5E92DM)Fk_*kZWN#FMS?mwgx at A97Rt}1KF+ at 528!eaY?VU(y$<Mht>;GQ4J
zAwQ5$nDMu?v!G_*?m{n~PdsCS(6;k=2Dl$p9=+#vwEaR)ZON&P^oq at u%~~0DX5UX%
z&H4~e-8CP0Snx+R=G at Km^p at eM07_lKw+HD@#1~+rV<#t0g{f-{d|Vjq8as4FaA~ze
z+5eD#sCALpmzvnJ`OnDrDyk>!Vif+A_A%E<{ropgqS8daOE0sPD8@@F`Zop7u2*?q
zYRjSgb^XcxvOkJ$n#vl;$cp+CbpzekN+C`&^@zPmcHd1K#umBWhmMxNz1Gr`xAfH!
z`gt@&OBmG=W!c6oVU&;4Vx~2lja80MS>?mgc6TqB*XN~wN6M4xI?rv1<#W$oP(1i&
zYUEqAbH!iiUk3~uzaaS!%*)yr+BfgTaGtdMfjBh`oE{JRN=>Q6TZ|mMYij`it{MPq
z`L!0pVqNqyN9}7rnu$*DnuYMy@?Kqb`KA_XqaPh^b$Eng`z2r`hc~-DQlY_0kkB|~
zd%adM{#K8wnB3)GP=`amzWl{53%tUG#!bYqEMv}%Iud@}=qdcB(SffM#MPGtZXr)f
z#;s83n|H?blJBwQE%#n3WBgWvUO4^&iqLw-_`5$Z`rcdo!kexSFrC*gv0qU6^n@{D
zA%5c5gWvj#B#Ob-Qg%TbQDZ+9C0}GY717LMPsK<5Q$K$TXYg;}av?=NcS{ei9 at C@p
zzF+vNSI at Y&HytxFTRgAR=cW6?<>2q>iO6B4bkf0jC0ABI8FII0#zl8FrbjrUI`eE6
zQeX$pX at eRga{BAx<~q(bQ~UioTz!1b?|cCr;im^6$5t<&hwk)Fr$36x*B;e5A^!eI
zTR|tuIBbT1IN2l1xv05w_{OtifOcfx{rcu8L at nuZ-FcZa)#dzH*UZ<I;Vb#0!ix8y
z>L1kKtH*tn&)2#X+Pix_h&4M598s<j8pd0Ad>FX?{cp{E#_`#S1&KcYUiiF4sm01C
zKD{$*k(uB;d2}}rW~mv3Fs}|HO}<rho;b3+cKF7ILnCo#S2cu%Z<-vEOg0Dj=<#%N
zsP*XnOaH!{h}efWu1 at mo7nYYM?qRrHpE$puB$2uP?o4;jSWZGi`6=*`cf^SJ$urRl
z=p`cOe1iB;|Mk!j($@pP at h+rp?;rLSMaOqr=MARxO5RtyjZR?`zl7qvXM%xHKHK22
zdr|JjtMcI9OP>zk0XMOzwQYGzuJ5wLl6UfE+=O4u(S%q=PXTBvJQRTF$$1!{ID4e(
z^yjgi7<ba)0Vw%rxqbLt1WADghEET-G0?17hWx<rjIn~^$bv<)_)G1!t0x9i8(Lte
zsJDI2*jmU4fnVeFly`2Ok;9=SOfXs|uuf<mTYn2|y*6~xHy|GUY<xs`jmEcq`s+6v
z?Q%eCMl;N(;1}Vv7fNFP+4j at yoGJas`;aEpca>lKeq7TR??|4z|L26_;oUs2<w&t$
zvj~>1*m%kE{ldt}VrQNV*)AY}{2b at deR{u3!=LT(wKjF^Z+=;ZE)`#d at 5FyRa>SGJ
zUnDld$AR=H`Qz+At3nWRk1 at LRPZMVa^J2y>TD~5or4DZ(eMG7SwU{n#S+MnR4wO{R
zStat>+CyR?ns`W<x|4HiEpNrWC8AAb(R4{##`O;4KA{iu)i~OUhgO%OoT}D8EXClu
z(1){DeWW_E8;SFqapT*ch$%FY!HS*}qgqff^o*vM&(<00qj;pxuAxSSe^4!p+j>xY
z<G<pToQ`Dm4bCt!a1y5 at eB3XmBW{%yS7UvoPdiBWP1jn-mg&)6RqF~K8LE;1kBq=Q
zkFmbdSD7ethQ_FbjkKge$Jb03W||}Tbd4t5H2>ucRhYPwvtfM>2bDGxCW<f5NoMI9
zORW!<j9O<rq5>r!mGTNa{KT!gFq))CDUaV3C>d5#cYCP|!_AL;t60965}qZNEBk5v
z*k*cyal{Ihs_qL2YXOf&#kJR+J*Rqr at F(XAM;i_Nzb`9rVgkNT>@ztCJJYjUQ9(WZ
z#TY&qfB9KLNch#@L<8LBaoRyny~^lnzx#DPL$~||Z0D0}ac#9Rd9y>xl5eIoK5lG@
zgj1h5>V58b&%VjaR@(`|jZco?BN_-tsh_>4X0ASqw|XV)Ha~29C})RlAmQqE!j^j7
z!AGC<52c;r0#lcthdpVu4Q_xc?8*3BDeY22!S)L!8mc73<s;_CBOyEGlM>=BZ^>wy
z7vvm;dMd=jO?F&iSsYCWesbhUW2|ND-L8GRm0(924`l7lELuOXThS(2*`ILcLyuO_
zCGOde9u+U|Cx6A;JxkcHFuT`a_w~OLcB-U|^}z;%GQL`8ekyFb<ZIVxe%QQ`aOGph
z>!ZCdXfM9*JnY}3d8p#svhm$)<yxDany0z+XR;oMYQI}C8a-DaFA_gGC}2<b4xj65
zocdR5=vKah+32BT<@_TP`uP1Re<xfZUBy2O(`;NZ-qZAi5c*ULfDn+EZs~t6-VodL
z+2WF)YCHl#`@1jp>1P6J=SC;R_)S~P|5i!Aq`b$SWvu-xR`IKHn5M;33rqgTZ129{
z$0W`9ec2(>RGS!$BRU@<Ee8{ecKqtxoxk7zd*~#u=XLjv^Czz+JyYIIlsTzy9M3I$
z#O;2z{le_d9PGbl3O at s`hWp0Ys5}ooVnM(w8d=omIvfFZ%F0?^Daie{s8#vyFopYc
z!wzTP`5eX9VPCL&{Xek=Cw3&39P$e44c?PonSWZxW#n?-qrS)xQ;4m9XU0D%jh_!+
z(lnk_JRi4EgIIb<$;AdvU1 at H<`f!E$<XmKO4e#{WzfJc7Z{2+4+4<|r`O}Hr%l9D_
z-EVzKkl;I()j at +hQ}!Il9DBCQ=2D^FV%qD8GVSu&?M<%-xA%U#=!E#5E%Qy?%iy$*
zt7(6-VNTIC%Nn at Jea9~`zw*Bonptkd|2SpXS!}(Kr(NcDwet420=)-MBFY$?!hmbH
zpB36&8+ajBd%Uh at vU>KxwrvYjJ)b!Vh43cWmw`X1`MKR(lM>{!P4Qn7A06DJcEMdu
zZPPa62aDUMzfb*C?}iR??9|<^y)Cq?5Nt461EzKlo_m8#hddfl&3Ub~fA9D06Fp?h
z?N(+n_sUAk;&AGe@^oDAkJ&E~(|sCmESvxJa2tRed^FKeciYm^axU at 1K@;O8*@^wr
z6C+0N(AU&);o%n$x0BveKRExI6UlGii;|l(IrYwxK6{XTb!UF>z`i|SDid%Oi62a&
z)sD(+41H^MDf8=LV^#6`{1|Kmx^?qe<Av>j!k%eiWqMkF53p~4Uz?C;P=dUjo_NqC
zW}{lp+9PhI{X<Th(VK9&iNV73ibCrqxEjOnY><X)`xeqERYQ~fEZiGhaMNENmU#kk
z4rXF&$n@@M;kiqi at g^^~FH2ryWPYBdBHZW+b$h*oUn`(P;@l{%@n&*^cajl9jwh at W
z|7ri<ujMiZt~NDnku at h^b%AX3V*HQeuAWo}2ha98*J{SMAjI_6tT7dWZp7XnvSufc
zNLqy8;nA(vPKr6apXI05WS at WIfd`BtMng_I8LCuYVXu`;HhLPC3U^oj8vHo2x~{6N
zZ1;ZoE^NvOxoM3eEL>$v#Nm5=`YXI2szst$1)pptgZ4tFaoKL?-B)xJ7~Z>hc?kII
z5d%ZtnwFe4quk*mJN731bY*=`;C~tL-B)#!=_1?jSH-{jf!g-#x6LG?+wxbql2u=k
z;0hF_xa;gSQZgIMsIWZ(Ma%08<}Yp}Eg2Xf`~LN at +u(T10hgfcqj+m*$o`gLcjzB=
z-B%_jp6abK609R;=O8DV at 7?@yt&+~c7~OlPp5c$b-PgXm at 49!gS+7J)eRLq!3N_c)
zUp at 8wbKN@XWWasy2(+#OXKaSNDs1?W8fO;!;kvzYj at _h64Y*1wKif)E**$<$HD1r-
zS*~?8T!_$<Q(l;BxUkrM*0+yyVB3(yL at s7b%kY8nejXmT`%ULA=V^(iqq2dj_K-yK
zEOmN3dRcP9u_{Y<8n;)fdR&=oqUWf*fNZo{H2off({QYkI8|~>B!8S+AiK2*QPGm!
zI*JeAFB&8_-`!KtA*?2SJPfMO8vbsS054i*XH*u{<E}1Be4FnnoFS|(nH>Q+Pp=k=
zb6&KF(+~ERNU~nEK%7Rx*HMkU5h`^ZX>PgL{!*gV^U_3Bjj(E0pn<s;u0JV!o;Zy=
z at IMuWtDjbrl!%JUgOaxQK7A7Nubz^*O?lTP+a4v2Y>yHjfUa at 2=|BGTqhe^g^0cB%
z^>^G2y>~Y}M}k~`39SgV)mI313yy(NY~#Ygr7k-e$&%tz?U^qo6bx}TraZzWq_OXS
z_J`NR2bcAO1`b4<Gxa?Emm01Yki&vYwu>go{tEG`u5oD9<8phQ!e!^OzL=Z}@js23
z$}=Q>?JMowxpi*xWPHA0<heG(k}x%1{=EnnGE(B_&N83Aw&vzqf!X;^!g5fZ at uyi#
zm&q>3ha1f^=ydWo-%_4GuNJx2XP3U+%<;~Xxg|S3 at 7mjCai!0^99F-ZvM8qJ*Xv%r
zGSFVP-|4)rc~XjmZhu2fd5}Wh?>Bet*R<k2_`H5l$$grIV$)NfB7+_7dU5QKfkd;B
z*pj4GrLa?FA;E739WDj9$4>5Lb!5k|f!>5lF}bZ#ewX3~r^<lGt6{GHikIqC4GO{b
zL(E**&HJ^E1M?ThpS#`g^>ngZlIyjAzYSR at uB5Y3Jh~BZ{BE)U7k|w(zsAd{t7v4h
zV*P4U(^BX_{SigEMLFT8!bx!iTGnvZemA9q*+!Jb)bF${ZThTX7bF;LF;_427JQbK
z*^}94aJQ-cGqG?OjGOHGy48KtCNoyfLg50~<A7)0f1njS3ay8d^grg{eud+YcdEby
z{l?W_V=TH38&3!2^qTz1c9al#MmFowk$!Dl&N7E~(n^Da8s}i$UV8Y0O-oxl95NaD
zc76hG6mi8`=GDFvC;OJ=^30Wmyz2XY@!Vu0(aJhK?bt~-S87d^Uu=xA<8gvcs`Z6q
zC(McOUcKVpa4g%~S7YVZ&-EwvTL--21x8)E84&eKLs?xZ at fgM4mHtoGf{OaSAm`zd
znvhZXuBLRulL*IQW{vsjG>Vm5I_((3ZJ1gUeIdx{Rj01nHRHG8K0pyyi}={eGF47D
z$ECg|{E=q5oHomGm=hiaFt|%Z4Qs7*xnm<956JTfpq%SPRJS&Lg*~3*R9`jk3w+}`
z5O-{0so8f6Mz^p`ZagTT4+rA8DMXT0-oAS)Q9uT_nn;%UxK<n<2oSk4L?s#5HRik*
z&>eGos^%Q4&;Huzxh<60!R7a!Z+?AfwB1sQb?lx9BDz~M(icz6T(2jF2l>r$;lyYw
zFpYgQ+M(X&hNc5o)BTKQ^}G+D+mamE^70E;c;m`%O%MMRO}~A9j(&!I5q@%hwthN(
zL4FWFxF5_<%+)1&5VsU<A;uQP60dU)aSOP2x!<{axXIibTrT$vw~8A|6k6$8w^?gn
z*0$2VQb?@YdpUpamC9F_OJ7}4^b>J0#3iCbkpr>6sGn$1WI!zI)9EjgJC^>WCas31
zUmR`&xcaI2x%-*;Mf+{?E3e6~d0A6ga|Kx9suSg{)U8H~esPPr-rRBSK5iP<k;~&6
za%tQM?&1xS{)Nn=Hp%rxE!@3+Wqt1T?!y-{k1Sm7wN_7sr9B|R{GQen_UX!Ae$0JQ
zlTuS%lTbsh$*N)0#MO{$(rf57cEBM&4?j~s9Pk(LFYpg=8~7Wz2Al$df$hL$;3(h=
z><65Iv%q~|GjIve1nvQQft!Fn5Dx4Dt^y~3KtL6^1)K+>fQ`UK;1F;Z*aO at E&H$mn
zPQVH{4)_DgfGc1OJOH)=7Qhj}8`uXp0){{YAP3k2IzSKr0pI`(zyce93&26(4zL at z
z4x9!;fE~aU;20pCO$A(lb3i1p1uzE=173h4-~bo^C_oml0Zsx4Kn-vQOn_)$6JQ2t
z0G at yXU=Qd4VSo%^4QK-afC}ISKmiP}4X^~X03SdJZ~}|~G$0Sy0lEOPPSd*Tgm%^O
zfGQo8s$*_dC!tl^m?~X*OLcQ~YjsO?TUc{gYgkKI+n?q?t$$knw8=Efw92%|v=xq-
zkC}@;k9`&$9y=@|juAy(V_qWBm`J2JrYK4s>j`y{8 at rY`=4?B5vvce at vx@ngS;ov{
z)-#_ni*Kd!MVVg?{-}B}kUWsq)I8NZ)jHKO)uz(yDUuZt#t0&tv5?>QBkd#gBEuqO
zBCR8}BLgB;BHbdPk(fIB+<)v|X|=fjz8CrYyu)l7`UR=Q<ac<T(`<@QGqiR6_rvo?
z<y)XF&^AUhqm|LZXu~vPS}`q{Hn16N1zW(jZOz+Sx3z3*i))T+jcbW(vuw6(wQR9$
zYie$4ZE9(1(`wdg)oRgdBQ=v+NiC!{pJty{pBA6CAI(2nf3*B)Q)*UfRccXcOK(nZ
zO>aqWb82>Kb!u^H8)zPA9cURyhaY2U3;z)w6>17k2oDL53y%nOga?JkgolMEg&IO_
zp_b6&0c+j@=-@($PS(ga`DXc6`4;)Mq~@g7q?V*MyJovqyB52)uI8 at Ru9mJg-DcfZ
z-4 at -pisp*eik6BtWHYiA*@A4FYo2SJYnf|PZ&q(rZ&7c{YtC!UYsqW#X!dCJXz^$h
zHVa#YEy6a_X46*F7SlFPGpCi)!fC at b<63boIPJscH}08VziDnC{`uO~&o=@;U%&O)
zK8k3QVV>cTVUyvWVU}T^VV&WYVVU8SVVB|I@~_J^m&-2B2Z$#MPL!P}K0!T^f1>mR
z at dV{W;R*5y(us=lH{~VeMR><nt2a-qiW;m6imZxnzDiAXc;%4V|EfRL;FUpY8JF7k
zO75`Jld7~T+8GNMOBW{>I~R|ke-DrYO9G1m%L5DW_Kn(EX`POS_J&ThYqXoR8#G7S
zb(#asp5|nnx})`yS2CA))v@@feQJ=`Hm^*sy|H at +b^dsC>n<-#qQ`-2TT>5uX?gj0
zDS0`08F`_-<h|^?biI&X>RujRrd~MFU!s3S|A=mj{uW&moe~9$wu>%{j*5Im`$f*8
zv!eT=&7w;pP0>BkUeQgFz9?L at OLSFqLKG-c72Oh@7e$FSiY|%{iSCN_h;E3^h(bj>
zMOLEYB7c#x$W>%4dLY^=vJf2+d5iXm97Tqr2$7t~R-_{e5<x_85ln;?Z4g}$9TeRW
z?G{}Zofd_Nc8IQsj*0w42ShHSbD~Jm7LmE=u*gfKC~^=Ph)_~2Y(ytT2$7n|U1TDP
z7Htxli8Mr>A_bAXNKX_dk`Y;pv_%0T6_J|=D#D1ii7Z80A|H{G$Vp@*LW|@@b|PI7
zvQ`{xT2)q3R#sZ?UsCK}N}DX9PL{HVi#rQC%Q}lYsh#<qrJcl1N at rmwxs%jcq4P$k
zM5jonJn at FobtMNSdnKpzYw0)BZ=^e>Ur%>Pw at -I+y5@A#>4qiQ%ix-s!3|G?>-Glr
z+LNu5$0y4s{U;|Ul_xX(9S}|d{&AV)i|*F$Zfb?pLMoX`qE-aGNpvu}X>`NL(dc?p
z>1e-Ae at 9<O|H;0S{gggRKcWxOKhrnUZ;OgCzMfMQQJT_!Z1QHU+sK8S;>D8Qet4~2
zPX27kB6-u~8{?wcqS^A<g4wd!;#ul!{%q+iah5V$I7^--%~n9(KuRD*ka9=?qzqCF
zp+fQ at r4S;70x5)$AtXpe?wj0_+ at jp_+=AS)+~QnnZhmfQE-{yqTbN7ECFNGY- at r@Y
zMeuTX0lW-e45z~L;iYgQoB}U|li?(Ih2V{#L{KCs7ZeD}1jPcXAYV`_APOjgLIGJo
z5>&w6z)E06uyR-dtPEBRqr&oGr7$9l0xN`(VI)`u`whE<UBoVD7qH9N#cV1&pIyo(
zvMKCBHknOgS76^@ORz=Qa%=&%3|ow)V)L=3SR$5!EyR+sBy5HFjkrWyBrX>hh|9#q
zVyZY_Tq-7tDXIEbQVh)P4QzT1%=8Sbs|_r}4D9~Y8Y1=~91(_y2!tHM7NLU(LO>93
z1Pp;iY(QK<97NnfyrMm$mC#<(-qD`WifFHB^UsjG;Md)*s8CW>gsQ53m1(}EX?}_b
zFN7k(0bzhZA!HFYl(O0Y1BzLjK|X~@p%8j_J-mKiFK at uGyU}08U&T))Aj@~O=GSoX
zu=nuz at V?=+VaH+Ku;DOmIAVCwm1KA!tHg#|U(+(Y7g5He%)GJbeNY3qR`5t2-4T7O
zwHpxERHUPR1TUf|qCcWHVqmd*v2T&P$Xo1L>|g9%9FXgl>yzWk@#K2s`sI4%1`@jy
z`x3c{yu_Zw{>0wI0o!idK3lFW&$h?5-?rCwptHNPuan!!>+I?5 at 9gay(COCc)8Xpy
zbb569b$WFMsNK{)DwoQm_E7t&z0`rA?x4OPZV)f1C#XNDH)vqCd$w<uJIkBxneCtL
zogIL5L;4_G2oKT&>4)?}26DS|`*OLtyxgAL{@mW&0eCmO56*@2;63nucrScF&@Jc_
za0NU;kDy=BD;R)v!}?%c7!TG1>xcEi2H4%~J~o%lWB0K8*}d!mY&W(K%f<4rJ=lJ1
zFLprOE$$O@#XRf!qPF at 1a((eseSTIwkzZfPs3(CBvS0~P>&k*LU~y6#ONY^6Nw5l7
z9*o0&D7Cj2?6)v0k4qjmJ+6A(^0?@6!^6tM)x*NW(ZkjQ?s386y2llDO8UaT@(Y)f
z7B1N>T&<YUo+3|>C&>VLDqtdD(t+h(0jNEo%0!=xMnvP;iBhx8WwY6jV2;9T!plNu
z;U#ra(tuIFQLoVey_?=g=hAuf9(q5$mp%Yp*s*#kI$1!p<B=xp7lNX<MP~{M?FKLl
zu;{1kLP3T6#N*W$>=br2J3)#-7MsD2lY)@Wrn8gS73 at 4V2m4S8#S83P>@z7Eud(m2
zPo#jn!q#B%QcSY3Ol*u4mSk)d_PG?9Ol&>&sT7<vEDf6|#U~fb#y*ll^b%W%jhCX7
zfvv;FN`Xqn)?x`#ta7j{>|-fhDcEXkf)ueVECU-S1uY#*$0lJbuz6UH_ at NZK7vi_#
zXHxWDi{FW#NCA8$t`Xy<7-ox^;utB6$>J*Ub19OU;(GB at DVS+unmAF4XReqnek6tT
zrMOZYFGV#&Tqll|0-GwX6%)i1agLZJek?8&r--Y?31YH1OUw|*iAmygG5z`(O*6y2
zW(N9ZM!P=gpZH{``pMw at C!=A!3*Ln=gdZZD!=EG6;p+&I_(;MEeuc0Fzl9Ksk0o4h
zJk(gwc(?I;<DSOk#v6^?#xspojiHUd8+SH7Z?tOkEezaj;d{v<P}9Qyp2cV9A?MG|
z{mvcEBhH_kdrOpOEIKAmg_`XTI1r%XiAUj4ga!NpK^9-x__WcYv9a+;<5^E;Woczb
zWnE=#C9yKKvbK^?NvX`KWcB!6J#|Dm1+U{Now#`IAFcx3-;0NM*7pR=AJD_A5wM=`
z_v=5!=iqY)?s#{?2!4cMf;S<s at GL?!KANzOUngwBZz4R#KPH&r%?O|Hp9mUw4MHKl
zkl=~;B#h!m2?}@xLJB^GV2`&a^x}I7dU!oTHNKh<h7TkB!T%x1;AIF2_ymGA-kQ*c
zZzE{qwFzWAnGk>vAWY$>2r76LLKZ%Y;D&c2 at bP>C6b~gZ at C*V5k0F3~kgyHEjSz>A
zBUs`s2~GGWf)-wjK*Ey<K6oF(5Bv{;5?+arj!!2z;hhKr_yK|u-iScQ(+Oxiny`dl
zBFN+A2}$@Qf*szD(1q_J=;Cz=75EAQ5|1Rz;pYhIcy&S^K9Asm_aF%ILV_vYl)%Ar
zI+BlNRF%FiE6u3)dtL08K?7b>feiMLcjw(s|4#4Dpw2s;ew|*Oh)&PWfKH!Iq|R*}
zU!8k8fr)37PAeHG=_whdpGwzHKa*~lemdPCT`%3p>6DYc(;3SwFTGP{dS^WKPTTA0
zX^*##A0ICp_aC1eS02yw?hiBy at Q%yK`gp7D7GKqq>PZct`cRQUw-XJF^o`CK85*5#
z${6ji>F8+h=s4MavV+o2=|Hq2I%e8uI&8yY&h=#9i%6wvyCZE4Nw4j#jZ%YjOm0V{
z2OS-8e$f3Tzs3V#b3cshS2tzD>%UB&G`Y8!q1Ud~fem}Fsvp;$V}(wgHAEYtPooXc
zdT67iQ%m|wXO?tE?#z152F&`*A|baSzL0y6K*(K)Kg1gn1i1t8gLpv at 5Kl+|#0P at R
zy`AfudoMRI_inC#u6J%w?wwq}T(4Y2u4isQu1_u!ejDx!zXuP5--Y|bz2QOdJ8(a^
z7aRfiga^QV;7Gx3fv at 16AW(2u;4knN1PSg4`~(iGLrgxii8;XRVhW?)M|DRvM-4_b
zMD<0rM}3L<7{!fhjT(+>jN(OgMhT)mMD;|qL=8oKj_Q}rJ&#0vit3GOi{eK$MGZuC
zMG4p5uXV3AuMMs>to5z6uQ9`)ti-MmS5jAMR|qSVm7EpU%Hx&7m6Vn0m4p at YirXmW
zibP*>MnbbnyVsI-w=~TgNV}7f<~5Y&S(oOs;+SQSU_ds=GGG|Q8ITOp4d at 0*1{DT*
z2AtZ5wQp)))V?)nb!~9%b8UD1;`-5*>)Pr%?AqwcbM15$xPEZ$acxmXq*C7Rq%=RL
zG+0sE%bc~{$j)R}vJ2TQz&XIxfjm;?qUIR1Bj98JA^=~TC{4A at t!39fGT;q&4>u1F
z4mT+K5a@=rhSi32+FM!;t%^pYRnlr{)ik;>We4w4KytsA4XxPOo)Q$WEg-Ys(}w<l
z0t<LrTiB13b$-lyQJYd*U7Ju#uFa}t)W+44YSU}!wMn%VwRyE1)I-!8)C<&G)H75G
z>NV;e>Itd{^$JxZ?S{%x*(fF|233GcMpdDnqsma3sCv{>R52<IMMEW`sM3U1HtGVf
zck1HQp{eiO!@R>hBF~E_;wkb{c at DgOVsCkX6)BBPlO~U9kKA!bj@%w`uIGg3qf$`S
zC~M&Cl;f1)RK%3rl<kzxRL~S;3O)s!!cINn9^gIZnejgHG<bzPPu?g`ftSLwmpVLp
zylP$;?+;Igm%y{;wehrhWL^Moil at TMA|_Di<#Y<V98Fm&U!usD%TtodlPGrOc9gF2
zE{blsE~TQpf`TkZQs&C%DC$<0Zl<oLE~e?WM{|7F at 2>l=d#?wr-&yxt_gY7!2ezak
zK06{hc!*Dih&CFcDFV^8IAe&}hjGLhVj?hd7+Z`ECI|z;z%eik7PA3!0do*@2lI;c
zj8(#V&3ear!YX3DV%12y+HzJli^+;%6|j;`hIROl)P`TG@#AxbGu$hkXik+*wNBMe
z^ntenHRK3}do^_W%f3a|#o@*M7&VML#sm|M*@P))<+EP0Dp~O+oe(6_AL)$@Lf%38
zA-#|Yq$e@}>4QX~hZUyd7d07exq)_-q~Vc8xkY_OQ*O}GaP;CXj3q+|dAn`qAVv%0
zgHggbVT>?nj6B8;ql-ae)G;0yQw$FL3;Y-S2fPjb4PFCJfx+N*@G^K5^ab~W&fr<_
zKDZgY1Zsl!z`fv2P#+8jcY#;I6JQ{y3f=<GgHhl{@FI8!ybJCDZ-8gOP;e(`1s(_e
zL1oYtGzK4lTR{u(2<Q#&106v_FaneVZ9yF{2!w!e5C&qw4d4avAb1Dd4PFONgCXD!
z at CtYg^aBroF5o#Z65IlsgNH#cP!V(h4L}qq3)+AuK?JA<x`QTQG`I;g12sTTPyw_D
z^}sMt2DApX!2nPNbOWIv2HXZ(f?A*ts02EJbS`CaZc%+PZ_#5>Xxs8qb?CZke~;?O
zY1Q6JRep%-z%NyyUzm4 at H_AKA8$BL89zGsA9x)y=jv5aeNAC;X7rrlaUxdZEgtH08
z3Fi`^)@QAat<PCQ+s?Kbx1DQ)YM<3M);?F5Q>Ab=U*Vi|rN`2gbBaD*K8ijLJ_bH0
zA6Xw8(qs+Pfb^+F?OVC1d<GxF3*n)p){Qm{ZZuXgRyn5v%{n`p{Y!f5=-oNqxvx`t
z&)&)FH0-2xMszOPlJq`gOk54E&u;15>r>V{GyU~y*n at 1qwxah(dvHYfYR(3q?gOC_
zp%D=gArYvEun6>G at M8F4=wifT$RcVnY!NLNEEg^pDi<LaB8QR-lS3y4Cx$16CPpNN
zB%%_-64AE7w&Av+wh^`=wkX>$TXbh|XLx6*^vy#$QJrC(Xq{l4aGg+{2%Qielunoq
zni@<Er-o7^s3BAoHH?Z53JwYn3Jr<~3JF35g$1E!gJ;8MLuVsqLuOI4VY6sRFeDrj
z3W<P(Kv0k{2s$@7H#|2qHzGGgnkXNZi-rfo!{MRu2zUq_1rLLx1;K)FL8u@?5F$Vc
z!USkoFf1Gv3X6b+z)-L-7 at 8f-4rhn5BiJEq6g!NK#s*`<v7y)qYzP*G4a1_v!Qyan
zs5ru!I at U`4UPc|Cq<+h!iiWA9_0%7$L0QlQC>fdsWkBPgBxpL64o!kqK=Ys+#zV#%
z#tX(<XsdgJd!Ku|`xp0*?p*g)_hI)&cb<EvyTJW}dyjjI+DzKWd)bj@!bpS7NIT`7
zHiP_*Tu-heGXmZP)H~2eD0ON<vpdlz(Fio2k;tGjav5yKBPegAd!%_}aHK))M<Ut?
zWfW$FrU%o*>7n!pdI%jw52K@@BRgg<p_BO{+X&J-`;j2 at HgqO`)E12yfuWx=3i)$#
z?;g*-V5Bgr83_zBBa6Xc#4$*WbOxP~#He88F*ulqm^YXgn75c`m=eru%sb2zOcCZ4
zrbg<9m1D9oOiT=>0F#WV!aT>6VKOoGn5URxOd5uUNyJbwxfnL)5hfq=5>ttZ$CP3+
zFm;$%3=xxxsl^a56ig0=g?WrA#H3)VF$owlCJV#B#9>I7bPOGngsH&fVL0GJ at D2C^
zd<#AUOTgFQJMalu1ik`mq%L4Nm<=+)7_b0L2CKm5U>TSR)`L&MVlWM)fr%g$%mvxt
zBQPI)308vfU at 4dZ)`77g5ljVZK>|ntb3hjO7%T)+z-ll7B!gKX1B?SnU^+;5`mJfV
zxYuq$-)?DFm-N}3Mb)l_^Ic2BOc$mLYlu0-I>$W6s$<r%BAJn_73K<S3v&xAmKn>s
zE;uA8ka{WK1$zX^f*aDi$uoi~srmgD>=Zl~SP6V9rnkT+%;D3A;geqQ&u&9*pWXW1
zI^0IwKDqUhAI!izrhbOn-4BQiz<4sH<0xx^xxkWTRtla9ECh{$BZ9L?CcTuNL9e67
z(uwp`dM%wmr_gigtO3C0=aB~~OdVvE(dVp56b5>~mkB}E4@@mY>M_+=Smb+^`KQbr
zW)91p>CPHqj<8IaCM at X~!-{4`v(}l?MYfrnSdW>HS!PT#)+gpCmIhOURmd!4NfY^5
zqs&p30#kvN!c1Y=GwoTu%wCorQ;${6tY(EV!&rZqe^@e18CC)_fo09KX0<WfSlUc&
z7MV$A1uz3xQ_Lxr3R8uZ#mr*4G2K{vCZ7dmLRkzZgC(^imh`t|ZDVd@#WCYpmP|`l
z6SIk>#nfVvm?V}D(}(qg`GcjzRAQww(^*bTC)NOSfMvuqV$qp&7Mh7>Eiso^@=SSF
z5;KWq$FyU0F}qm0OkGw5vx0?WB3X0HIhHz8ot4MTV|g$=SVE?dWy&;VahRO-8$d3X
z#U5*8e<!oYr`X at J*djiAl)?T1VzW#WOv$EMrVP_KQ<7=ADcv;5w8Avcl*4(*dBb_Z
zd28D0(csbN(eClZ<D&;x8sr`JX!PKDbb1IpK6vzaw5ZRdufLaHZ%$fouv>4hSk?x~
z%j8w^3K<Mo4p?>Ij8v?sVP|D<CvgZIo|DL-a&kFr&LdNvuv;1{9uzjH|43RgS}^)!
zv_$_&pQrz(OP?yFFVO$cm!RuA#Fuc%LXq7fY1w`~2)7NFDIB$1!mPt^PdSCcIr-(s
z;uoA0PBkZiL*`_07 at Rl`iIdKubCNg}oIDN(_fVRK at B;T1_Y7BpdyRXCdx9&%y~5St
z at VIhZHjasl!4=?=aaFkIxH4QOt{(RkSBy);(Qt`4DlQkt#y!I2<6hz_aq+lPTn4TV
z7mFj}QgO970*->q!Le|UafP at PTs1BMN5*C07`Qkb373we<C1U{xI7$3@=)?d@<Q at f
z@=Q`9c`bP-c_Jy2ypq&N at RD*#wuC8(krYUhB~_B=k}^rAq+aq=QY=Z6&?Jcxsw7v!
zmOPT=OI}JUCGnC{Nrt3O5-TA}QYEz#f`lT;k+39>C4~~{QfZO|30aaQVMyX6B#G0y
z($nE0!#W#3dwz`}tHW21Uv9|g at C)NJ4LKAFB8}$4_YTNnArfil_~ZUr3`8z1l0P1h
z#X&rxZQ<|pcYBAp$v=chpq=E=?(_E`tZ66vY2o}cQjhQC04<8Y6QNC`^cmJuzU- at s
zMO=6Ll2$`RxVRA!BAUanBf^b>SfCjU^8(4VT6+Jm@$hfM9-1S67~wh0^K+vkShNMc
zp|1*`c870)P at yBZhEzlpzZj9_vMFU7Y1Y`&->Kqyj^JD+r($3t(3NGJ&j}#uu&VFi
z{iUlw38;P+KE1}Z at gwUBam9AC!0_jcv(<=!BMY(-w%LRIP+z-1gN4NSoCO^%0~^a8
z+>bXeHw|vNE!aHmzaN at 6blr*UH}<Zlzvh8px{`b+yVl~Yf!7oJfR5<^D>6Ves6?*L
z+Zq<*2ZN<ywXVJl1ZrkS&iZ8EclGG at +vu($9Twvb{xrTQ>m}YVv50XF<@vLY;U_vh
z)jR?{JB5Egc*mRXjxKWQ6<3}na>!&lsTzG_=~6VSGv4g6`vbdA at 1_XnD|{NBvf*Jd
z50ow3EB3R7?biyC-Apz;a($~t#hjY7=$OJ}DSY9dD at 5LY%c;13`xO)YoZAomyua-$
zxPNVM{41#3r~*Zmpsjo)-SfGf`4=jXV`=P=-Z*iwyh_r1KCVb!#VC3LnQ4>hB&(0F
zZh7XXy8kp`)MC-_Y!yAEBWP=u-We*^dfOB|JnB!HoB<NJZ(-0-(r9F9(06KhSv)H^
zHhgW}1G#2uaaKRHZGRU<{X1nS at QKs`@I{_3U`@5t*j{1f3<Eq%)ZTQT?r1*+Oy!)p
zy=x&NNyn$K(kt+xY~^ml#v_A!v+igQ9;d0feTujpR_;5zb6N4H_E*REl!tB`=o^E!
zeA)R<G5Eg~hiWSA!BtExdzI4>?a+8 at 3u9-5;`H%BhqvV0P9LZ-?*FCmrxK92<vJPy
zeV8-1>5oU`BA|o+mkOSdvqC*BH24|tb>Mx)Bacm-tytML<>mjELhdK@{oG%iO>6%@
z71g!>wVme;__G)6m7lWS{P=%tGTmDyHimDg|I7W<gAWs13YESlJa?z)UHNl(F3^DB
zFR00Jx1p*)yL-=_svVlm8VZ`<gNG1KdTt7QMtFPL at I&$7F1HVkl{16Nv`tx_S=GB=
zeb9aEv6Zt6dtmL%ve(bH|H0i`fW?)pU8BK6a0%`ZoZuGR-Q6L$2X}XOcL^HY-66QU
zySw}CWaiA7nQ!Kt at 1FnM=icY`yI8gMs_O3D&|7M6>aD`2e&JFaw2BUNN7>#Oy7bud
z+)xsIcE~fL_Lw(Pz`qFt0&QYo1A;eP{|r#Be}?#w_pnPNIJmtw1gtL${04U*2>w3=
z0xUlZ{5rQU$WK8Fgn$I^h5N_w!Tpz!;rVaEJL6x56dF7{IH)fWkPbKZ|4zO?gM<L?
z^z!_Ihllm{?O#grHKmR+Zz*ATctlWNP#}CB?!T1MU~TW*+3tM7fOL4cmEqx0K>sYq
zRxIo!Pfo%oMWv0aqYDsWwS3 at w!GW at PxQ*c9F+hKl??8QlfwH){N#WuDoy0o^`Z4{?
zKZ!@ugY|j)Dxe-B(8V(mBGBmv+2P5WihAryUL#gRD)K2Fmh at J9vDIdb_C|0aFbkC^
zCu6$IySbJyl_v|YFA6sAn<>Yh!&*%Bffs>^n)(9`I?9Zczo)!=YaAHq|9e6MwZNAT
zvlL5WC7oj6m*D$fQWw0dW+*%@48r7pMx*fO&<LaOQP2qe at U+kfUGV2n2yH(o4SpOF
zAr4;V7n)SZJUTqaJR`PqxORZCg=45aG8qjmObg4Ko?m31o1UCr-ru1IZwz6mu2>v`
zVCBq<h-b5RcHjuIun5Jqs^qYDZdu7)Nv&yOdB#;%1rakp#W<RpIiU3J%+vLA_RP0X
z!IFK)ZoV{?{dESY#*WQ!Xm4uvFqKnBHoy5LvbiI&*{RM8;=+G<pjYm(TB0#u{8YZz
z4i?=p$Bd;$t?>P;Im_5_IQqH>CJD6VVp<90mnK2jCR4|`<*qKkWB?fnOc2xcnrYIw
zQ?U=3)gl at kK55`?g-z1|@?0!)XtFKz=Bm2F9AWs3yO}M-x3K+9wwP|iR%Fj|k5^s~
znFFd_q&_`!?Mep7o5{*gN at gZ**N_fEBX)}(R+Gn=PIdl*D<!Qn%O;KEw5pc%DojZq
z(piPMjsmBEo4zrZVsiFgik+ZFKl*LC<2Pst|CDd}1G#<wmh?RE=d}X0ecuWK=;wm)
z4QlkW-&@gN%70kz&cN<~U4dHPXn9g6-;M8$hrwsEHwHcis97~kzf&zq63S7eu&9Yv
zq%g0kR4k at j5>+)i6J==3sWC(=#;SRss&l6J2`Gbyl?xUlC#>oxXw_#hDlQ+zQJ&)6
z%xRms16H$ZtXgMSH5-IlnobnKxz4w0XgW}YW;*;-p#^>jH8j~Mf>WJ|tkg14geE^s
zqaD|}Qejmkq7sVenfD at x!PVOe3l|^E at 1tv7MbtR*OVTG5M~#bjtEX*d4p>dYm`!!`
zs6xN_Mb*$$q6p4(epf|Pfy$ZaEU2a-rwSGQO+q6ElBTnw(z{^xlGm-IZg`X^9-`x5
z*Q&}CzpqmjDUPdERVh{g^0-?jO;A%N;zD at 9`apFwLr>c*iSeNea6nY<74pW2$`m9j
zK!7yi|AYKW?`9O1$5^&KW5e34iTSk)g-ckT5OF#%k$@mCFp!Mkb8sL(BY{lVFYX^D
zPnfVYA>vdZC?mnIk`#%`AmzS!996`G!8ODG6bw+ZLv)QQAAWMh6A2TRC5)a5Bw{4^
zFH7a7 at L%xf_4#Gheyvj`M4SoqWhBrE6aEWnAM~5+9t22_7fy-6=?%e8gMc8;4~m4)
z!T;ZrRlwN4A%>xkXqZ;SMtlMb;6>n^l>N3R#gY<l#ESXYw_e@@N7tJeN=vL8+K;CD
zzm`t!pZ~gTyp}Eibl(%9>4<$oRougVg+-XkPxRC1(hVhU&-_3j4e?~Cib0r61={<N
ze?f`*GruB~nRqiyrVQ;m_<u!!X91d4kq<hP(Tc94M~SpBHUhTcUB42=DU+TO#Tk>Y
zC8jYmt+_R2b_{0gf>cYSMro)us$KPv#c;IW05hpSibfYq2dkCjPA5BQ&X~aDknHa%
z7B88Al_)}SnCs+Hg;x7T)zVC$2rm4xjS>FkhDR3~6|Z)wDXCVnPQkm8n9CjtUt_>x
zvYcjg^`%Y5$+lR*qQ+aX*v_2Qq(+sajy*^<ou5i7+Zu|{NC%WEG}8~En#LPNaIEvK
zDjLtPX1U+*b{;Z^!81r0HR)rdCK?FC&Dq-uQy1iE^J0U=1=|WspD^lZHc$kYIs?_v
zte^-jbh=BTF2jk=EPzjm&nyt(+HQ3|7}aztQkc|iC{h^LOehv#Gt|rxnpg==ZA8Jx
zi)zmj6*7hs>7a8;uFZnFr`^ZHP?!Mo5!2`a$hhw;$;cU4i1>>hT`2620$6Cowa-7t
zE6GxM$l8I|H(lN!eGpn{u!LiXYTR13q&l2op2^r!WB9^}mp{2(A2Ldpw>uFYh`3t}
z@?4g;IToJ!L$_EE8fV5!U;^UCS6 at dm63y>PDX9(pNikSy-*tjgDM?6*`}?J>>0(o%
zKalYC_lsN8#iR}qk<j;3bUkk=Kj9Ph_X}IoMW>1rk%08~vslxGr-~DjOn&cYu%-+9
zd)f89pT?RlG&PifB<FiSsWn|NK<;wx>cO+3^Gkw9#qeygL;R5J8O)pa)<X0vRA%Uy
z+I(idVHJ=}JqB~{YJYBJU5>1Z4CcR{>aHaK&VALu>!2;rm+0#CzYMO$cTfQg<~RQc
z>NkH1P?BFl&lUd?)B8^WyGb|l_UT^-+SA{}5*i>t|1x4X$@=7;zVGFC+WR>bu4#e2
zlHV!yw2{9koR<Mcp*<B(SiXNP`f>KTq4lfq*81fv^LVY!XB8H3y7 at O^s?Zwtbn8s=
z|1RmDt!H4p^#5xDIRiOc&%xpx_#edn23K=n{VUeLAp%X(-7{HO>h1qyqP;tlg9RkW
z_?HBE_m3dE`+b~g!M<+)FwS(+f9Y1dbF1oIE!bmY9yS<mgI#UV`8Mp&)m~$dW5HN9
z*gpE_K=bfBSNc7HJ^j){Rca4-wYf`UsTRjlC5EM<eC|4BeUemHRelIq4U!w|F7(rP
zJ!3mJNph?aZ&oGNq(Ul-4^kTJF4o_eru&^ud3VNUWtvo9Q@#dw>GBu7&p&lXA?~o(
z96VQn-2X~+k30RacmGX5oe8L{X5VKYFVGx;X?T9*M$Lp8OHt8O$(#YMK`E%=E&(&4
zk~Z~Hg_=^$ocVn9#Y4f2t=9jzeP?dR2=sSVKU!CDr-2<%N*j88f|^pv>;+~-DX8EM
z12dtN*7d at Gno|C~<*mcs8}MiIFWUW;rRDYTZb~V$75MsnK^eC>m<ffnn%Ba+DaFiM
z;F|XZCEWU82jm;;?&r9S?+XgKCBRI`rRBVm-%ZJ9<^lf)Rxot)ufbl4=;i!wN-i at U
z_!_w&pPK{hfUFYmNkaZ?N=yB|9i9uKo|N~INF)d3ltN}Hu-*HDVr~t<N=hqvHNN{d
zRuQ?hf>+Tyd4<d(V1 at SuMcfKt|HJyXAMv-f{kdZDa+%4%)5ryR+>BsFWYQ8|Chz{<
z0%ixo`9wA*<i+{!N(TBc=Z%mjVLQSa!|MqZ+Va$RXM6<^Q at 7w8T8g%unSY6P@!SsX
zG|6_ZcB3-|CHz6Hru*0ucmuoH;LX+v8Q-%;%qNIErjIxr>YNH#;?2Dg!O-GI6q1Q!
zo5w6uO0V+?X~7yAF)Tt1=I{@0E!P`6r7P*BBO3&Ov2CpgDXBegIx9I_n(Aa878G7N
zux{v%B6R|w*|1vQwRPGTn<fNtq)kF)%uRafd-F91qZxGb3yIqT2v6Xb5dYE*%IsHC
z&PZ9000`QD1YuZ5#QzAX4hcYr{LcumLNf%{1lR0kq3=!d%J_ at W`sWp^;+&QsHx9R!
z$q+-E at +uFd8*mdT2M-d=dPRvVbPbRm6|)VML%swe at hK6v7P%?cg0=`<M}?kZ@~Vk&
zhhxXte-O9B7k7wV2O2R6448rDYJH<@XbI?787<kofs(lxZHhTqv+(yjiT%%Mli&dl
z0o3{jgRYIqvG)|upQR3tmK5|>L42OmKtPT#Ih#x@#D$Lbz8E4qJ#@dEpkHT at 8J$3X
zX-1bqW$N4 at ww1Q%?f0Y7Jo4%|*}ulcGd+Pk{}5U|l3t1~H*W&CU;rI6+ctElwR25<
znVjG>JlMRmy>7h8NG)`1 at XV96u*}s at zE?c1z1Cc)zcNK<X_CZTGnAqlUaUASp!6Kj
zoY&|h_t<0v#}d=zfML-D0v2#n*<n|ox at O%O`$3$$lS3-86VwCoN#u;ABLg7vm~;jZ
z^C*835H2`b7v47V6S6DXSLmEromje1S$~-U8c}pXvMy5n-%Q?l5AJ_JC&aL|t<7>b
zy|mv)Fo%($%VMrKBA*dX@?f!{Za!Ihi9ckL_*`D`OM~~|d-c*aYp?{0di9R&cOR90
zSPJT;8`kd=itE+&2edJYZlF>csYZ#RZ7YySidbZNg2*M?S at l`+p?71~u?B8IegX>f
z9to=YWQ5Gm6V;N+W;~qwcu0T^P+}g}|A82n3f2W-m`&<sbU&I53H-%wKiOzR9|2)1
z1KPz=*T|oF$&4Mhr0O6-*fi%Qmf>-~otm_sUAzPPZrV%h57g1TH6%9j8^OB&Mf~iG
zx1+8>{jO{N>mq-nz<1O4wKz2POnfy2pKTlM3tv5 at PqiIPwe;*IGHB~f@!NJ{Uz{1G
zPBX`+C-2g*n^ck*(-0pvwu)G37_3a51J37U0M~L;=H$;I<c|SBWwK&}dU`qWGWMGg
z*EjSBTzq=RaajEN<h&UGahy$CQ+7`ON!9Q)HhpJNRK=b9chEs<%C{7~?H+kxUQuRv
zd{{nNd4NM>@&JtN8R2Ik8-yeMGpNmsrae%<y_l*w3R7aki$QcxOl?E_g6qa7uao^{
zj<jd9O&|n@>sz4fTfeYx1fCfaTvLr)ft2s>fZ}fd58?M-^0}_mo_r&0C1{9%TzuM%
zJMO;>ox!mDR!8E1cLEq!0n7)lwlJza#dGZK^A&3BCL9_~UvAC>FU>|e=sU#^PC@=2
zP?+=Ar)cD#yVA3O>_52M%wA=scbuSeG*x0sMLLn6gZw?9Fr9kZ4Q;2}CQJ&hU+`|G
zHX;5Ns}NIv4OA3%P!8^~!Wy`O8n}a+YXKCl7!m|ClOvEnV++J&3u^HCt%+wQ_)o&_
znx%((OU`%=^!M-s!{zzf%bD5Ril_M?L<0g!&;1t!-}Ow-iC<ml#>ek7wSmgirC6?D
z)-=0XgXApRoHpDt93cd3vIC`7amXu2YC5_Ws%Qgjm?NX}9HDkNFcX?_P$Jkp#s1dH
zx0w>3T1**zB||r*j$}(8(n*C^Gd?om0}(N7P!OMHOyn%l79*sS1n(bYd4sG<fxM^r
zhD at R299{fo|JnIlOkE_i;NfyVE_&jtD~Z&Zxt-H(kQYtPg4Y&TgrNu)96)_h7`y6^
zn*oBOTTy*%<*bTm&pyMO96lg&Y$SHZVIE;3lgYJKC?U93U}hI-iLNC6Z*>D{0CZwL
z)DqTEM|;au`qtFi0g&G<d8{s^)gHkxOOlqExfIrN^9?ie&Q9;rQeq0G62-&9Hf4CH
zf6$>=)b+_ at h+`nqnP(FwpEqs4q&g9s&vmSU5%?m at 8?xTW&(OaT7#UOPDMT4wPcKu_
z4^xkoRz(t8q&HGeJRS*EMRM~Yz2D3S&iF^g7Wyo?vs~ev-p2Y+eLOQUv7S67QV#&w
znfB1QhErQKw6T~Dxrz>_l1To+4cOo61bKOzXsa>#{*tV476rD(7D4q<eFA=DK>nEq
z`6m&_1&Qc?mQ6~OC-zU$O=SHSv}sV`99fQ$Q0|yfPM+`s0O6R?z78333#p#oz6~G-
zE>LPSm_ at JQinW*-qH<SR at C*hL{9%!SpFPtEaw5v at 5Bg{QuF*g5%&b*SWRw>qL_QKp
zn*&c1Z*f94Mwibe006oMu~u~lC}JLo0Cs~E?@0`x*-zPN8hu8_%exa3c~7Lr37I5?
zsQAr`VBGkL&M7MJcxpi!+~1iM3{_c4oHtAAr06x&+=iaKn2^ac!qae=79U$wH~?`5
z3uz+Tx0)26N>n%m at lP^vAk_0GI=!V-`D^5KI!OM|>~j{(5ZX*4D7Hj2ciJ31gIAbv
z%EGit<bLkS$bMJG0g<qgw=c0sPZB2scl*S4gb|!aYE0zE54mFUHlXr0$SSBd+>NmS
z<E<?3&oWmGa{m`81BEF41G36zA_)bckbeXj<z0bCXCDrvh>Z6O$({$VY-}X*hdmF#
z0+9f~<dx-T6alO)uyEiTL;_FWw|Mw}lpBcI^`Kc&@DD%8nOxx=6fAEBJRom`6{L*1
zEOxI>>Yl6j2+5vnXSTs7=Q;2>cubw28{PX~{-_eo$R-k5Gyf at xN@PtT|9gt<$^C&*
zV_D98k at ZPrPKo<e;%%GcSb;nMkR>J7r~ZN_kYOd($9|zw@%8V>;eRAW@&1ppl_9Z5
z1Rt7&0kVMB4?`|KLiQKj(fGkl>Y+uPw+E29CU*WmM9m4EE at Zz_^nI=#Cz*=*JKVf8
zo&N=W8uFn8{<_6Rb}uQ~8WVk*`%?}ONdJakZ2m_wd>7I0>4=s2zDMZzR^VKQXEr}c
zP&l<?5}iHmCm|pj<^(*J=>T?;wXD?W&1oHr|0x09!^7~*;lDtaRD^)T)62-(DfABt
zO=R)uqyM}C%{jVu`I7(+A at N9H5WOQOpj>-|ZXNwSg~A=vD<;t0arwN`|G!Eb>!FS;
zgg7H(e$X1<|3eClp})fC!=?MzG}A@*8#u2=@20qPIVgX_W|wa$91<O;_;+QrK>&VK
z*D&kqQ~pnEb_IsQ5z=vneph}!_$Q3 at hbmP36Tdb?92}d4b{ig>HB;77K^#>64^jMu
zi+m~K-EB_ibHVQ<%?P;_e;iA;D3*-CYw at 1P`{%OkSB0y#;1{LwSMmp~zcbIY-oF%g
zdMMnLy?a$yZzF$F at _Q}%@0rvJ>tD&6<^2+h&Sc+f7Ilg#I2OM9y&1P#Jz%pi@@%o|
zUT4#`*syxMbZUR%z;@e|_P9LqT$;7XXxr=`K09`f at kx`f&vefb2D|L184rEC7!DXE
z0>e?7)yH^MKQpD<fvX*oIb^@|P}-IUk==5ihs at Lsdm2$8G8xaRx#O6$xxKzgRtrLr
z%#`_Rz_0qte~egb&=XKm&IYKjh6+PrYM+yIXTW>#J{b#U`++fo{u0!{B)}xuuYoUw
z4`FDA{I3YlLRYxs9ssc!+#Yn!mG_$XqWcul5%k9huu5$6wfYcB0mKEkS;s2eF7;Q@
zA@#f1g|ztn;t&1va$-H_=0oTqed*{A at orYBzSaBn{ZrYR2iPlxy4Lyw?9<5`W<z$?
z#~=4eJFX=Jkf#)&4vN6+ro9_Ycr<D<(^aLVs0#8?rsSXw3c;?Yyq!&WH~@BI`5K+2
zD_q2yi{m>e3vdg$AkcqS{>^j#we7kZvG(W=x_V1^*NV&2Qj at u&Ds4$sP=_+526a#Z
zc0J?mZ2JE at +fJwBFS^3(X;|q9*<Hy~RhpN#uS2k{<UGYQZTvi#O0Q{f<|WPzbsDD6
zuo;TQ8O1fTgZ1CSXW)cOIX3cNQo~!bAUQO`c&(bM+H81lyN`*lr(f+G$DxC7+Rp@)
zSI>kj%x3o^*sYpI*5z_~?f8bv4Arcx9V`t^bDHX0%4=v_Ol2Kxa#V4wR4ZsNt3T`R
z7zd%vr~H7Gs*7EB)aM-c?vA<#xHv|*+!}<m_n7q5WK0J3@%EwYCAwS2*o2aUg5h|W
ztlnl at Z!5L8j61$hdPn60Ql*3lrK3b(?R~#D!ezxh9==Cw<&pbDV#%CU)n-LWnV^(9
z$2z9J)gq^ObcAkJd<q?HCg46=+ at P_KwqlQg8a8skg~!KMWH~7*bX1lhhck}DvGH^f
zcyso0)~2q8S>aLts*0`K{j%=v{W^iek&Qhe`6AZDp3ULR-$b{uux{TFZYs5RYW7qp
zyP8=m=~kIsrDnX6-r%1+FgB-LaUK)zllI)@puI(9hU)~iD74bK at EtXm=>n`U%$0|H
zcvtW+X`f#RDN~+Y0WR`3DxUILK{oe;Xcfxq$B$I9stvg!AqnmjwI~$B3QtX>k0|D;
zN|qE8uao8tcS156R!>7OJ9?HoCntI_^X)qokP$t#{Jw8$1)xJRNo8<mWI?^TXGDuV
z;o22LDGU5A;DH0*DXvr~M+Ufg0*O#4WCjxq at Wsa0R(sE>Rs<3*UFp39xIf(6j_h8x
zv^}!zt~A*=IGo6X- at h|K$s?tpgsaq#MUIyhRYqj#_dEuvg;K_%(Q!hKQ9<G<ljtIU
zXRE_K8!Y3qwVXMdrz24EmI|I4!%@Zre=%4&*#fnU3PeYe-JEqwpt%;>7yWzzOZmP-
z_&tqyl&3l2MJ?BK*dwZnQ-_-sH(LSk7on{73Sim18lVzJ8t{bHq75-{Erkx|yNeCH
zmr5X1h;=AjROlD;vxbg)16PAHY9A?>m!wWEXinDMGZOG!tkl6d+zh+BO_Nl+FTH(2
zVLeY#9jk6n!+pm4sZ4jp9a_*YW?u%@q`*BGSoSx&;1(_eR9we!NEGw$_)$)Ar7j;i
z!}G0<q?04=S)98!b9z`VG=Xr>&oqHnIKJI4i(<_<3X!jzTM6%Q#r7@^5<J<HG~11B
z)-|rJrTDpyb*1<@@=aLAZo=Wf9$D^yfIr?&p97{Q8J&NmD=Eu&(!##cKboC%9A3Ls
zInq#XcY)EQ>N<sXHyx|YhpW4rt7?e7z3QN761$5tIa+zYyZm8p`skvRC0Q%{OI1h$
z;T&1WF~gkBSqiATMxYk@)5O{bpX1|ls-TjdIf6^G^Yd&5>W4YX>lCpHkz@&&JHHMn
zjq>reUGPy%26VG8<ty6D3utBZ%9vdXp)G<;CSeiNbb5C0igQ)AH(49*cL&bseGHYD
zE~~&Pl%~!H489G`Q=oix62Ml}J2He$kJsv(1edbwvPQ3Gk2CIxp}XoAr3}$7R2DO>
z;7|Sl9##n#)}yTMDPYX5Q$D8c)#2*n1kS~n$VM`31GAHRj^xt^gHzm_Gf2Cr9nbSI
zC<zva)`-S&PTM~s!1ZZvtz%!}DYN5>SUg2_VA55bst1Jg#IoHD{8qAXgG?duNH;pd
z#dXR2jL!!bP5fKLS+~iO{@Jt1Qj*=Bq|Y}Wv)<B-wJ&a<NLZn`32Wzrv?IZn^`IwT
zXl61;v_r4@&_Zz(26A8oMJ(mXESS;uH(kI9b2E&wb<Q+=7G>|k1JnXY?iF#nKG3oU
z>F~v{5A}`VTj3;kN3vLmtna8sSW0Hve at QjvfNmx0_1UZ^^T%|9ZtU3Pfm~W!cg6*Q
z=yuEu0iso(<r<#7-=ns<ks_QN-45kxOGdl3kwNOJam#Tvr+pB#l0b2TZarRC17D@=
zoNf`jJ793Wy{LD9bgr9gNhQ6#7^5(}{TBX33XX%`-VT(bk=Y8)=Y-DVmRS8gPaT1}
z%5*^4l}wzljRLOi at CK%e>++f at r26>B5vAO*uZa7|pB$oL_7+(EB&}?7Ngb}nI|Kqk
zHTJVQdC2`PDv1*EWp+ at kR1o#qwvxt;5(H(Uzimf at 6X}oZQ7vFrhvX<LQrtwrQ%CtH
z2*_ahfm`kO!Mv;dq6>C}(qUeq3l_M2RG^p5NiaQTZQ6+T$&gKk1)Xh`8{HS?Vs4!s
z#J(MU at y3gimyTR-YyZ7I1#EEVf{s3}mXY1_YyF<bGtf(j603|btZB%?0=qLXzfNNq
z-a34YL~`sMWsB=Lq7{{)S}w1gJn!H<Mhv+UfjAf<)B6Eq+&nt+Xx4!boz|c8b1S{c
z-!UqP8Xa(B%O-!45gKQdCv at ius-0vYe0g&~?MxZ={uLHdV$&$~Zu0|!MC4n!7T>(4
zt!K}Di)7LV&SWB2&l6Nb42ihud@&>EKzE{4e4ykHhAnx9L=4BVV_5-w^uA$PeZHo=
zgT5(zqfmAJwUOYwi`E#>^AKBvQq}&1jqqT+aOq!&4Wer`*rF%xmrzzYbu$p$4KjvR
zZk!(3Rc=skcC)GHQ3bSWsdp(q*1)K!_v$0>SbrS#bHvN<Mjx0B!RhTH?apyz**-VI
zkr=XL7qkuU6CGwx7g)Pz*Ln(Tj$*J}m*_NaX3W3;u=26dFU97QE556j?HrsIQAua8
zUphImy<+8MQB$L+W7q*tc#({ofT29sIAPpTTanzwNltHZMK(zRq*cj*f}5Y>ZNWE|
zm?@%n#r-CgcXCt6=eq?iJsHJ2h*JcNQga0;F(vT at A2z5J#J*Z5sS?K(Pg(bu$`pTS
zQY?u(`cxxXc{uIde<DNuy|Jt)K2_0WTC*QVx(pJon6DG*An`2s6B+wgNs(=1JJl-{
zJ4HtoH_=ZXZtf)O{!cJ^yUg3n2y78sgANBnwg$a5F*erk7m~Jz5IGi;sGQR;3-or`
zE_+ngC=13O3aTP)^(r_eKRFXG2!BEeGp_t>9d#@_^uZ~}mg-#tV(xN*>F#%lhIAH=
zB~cxzx_lPGCH!omMnbYF@`R_sJuW<-2k19{_4s1+MZ$?k&)nF8itZyV?MHeleG5Y~
zV;duCGvm+JI at ZSeHq^GdU-S&90Rt>;srB?tbnNYHbS!K>I{($n{iR0(crY<Ay!lZA
z9)B#EnHcC8Y2MJ%Fw-$H($dm0(!ZghqoZf0d4osum#_9;HtlR|b*%C5-dI~&+WxDT
z{&)5N>bd_Pu5(O1a)We5?z!-|R%fe98QN(*_4R!OOf at YS8t4fRM2klN1iFQYfWQ+g
z_E82H_;V;cJ{|!c0U{_rH#huwmZuZ~btn<}1w0`hWYw$Xty%Q;#l8FK-K+a4;b2`}
ztzlkMV^L$Hvq2?aXkaHd^1*DYTf`!L4jdNA=Pnrx8`B-CWBNtCm5@{Vpxop-1H0pu
zI-MOB0w<2~vs=q!cf+P$lW~S at nFxdiHizRCJhzio`-Z^uxqwR-ShOhm1D{*XLA>Nx
z?%W7$8hdfzW!%MRqn*!F#xRZ4hC{i^uRQ!!fT^3HF&G`YeI$Bedv57mJ?y at W@a25>
zg5yx|JazX8;QCZB->uSh<_1$3rNVbIh^{=5x5gn0MN!^15089j4yz${5KMfRPN&zM
zXk`hbdWq0#h_p;&GUt{fl>R-<p1zO-PYcuh4g|znHlG at sS9J;h2$!C~aH(L8qZfGM
zL2u*97XdC5=a&Bxw&vUoPiC(*ik0wWk*!&c$T;T^v8Ksm3Is09ctyvNZGwsS#V=hZ
z=M-~#;ha7yhp at GnPcY0~dkQq+g^{&VI*lFF*EGfcCi%5_Zl}9hzGmCyDO2Alm}r1F
z=|pH=+LZ`H5HL$&U<7~8zRsEMdDI?)GxC$8D^W5xQU{l0OuLkU<maItbs}1>eW%Z|
z>D94Bh1{xeFLuUo{S%tT)OWYJw;i~VoNqj&AKpIoP3W8n<$gX}6<PIp<#_;eO_B$H
zQQB8J+s(CE8y%$Uugs2xmlKVXjgCEy!)<>pSabX;-f=!qHUM_kMwZa777VtM(~Bs#
zImHq^?Z}AW8l5Z}ot(D<+}h#{G0;?4=BZUu3jSKu2>zsMM|j6PU9whJ$kuT>aY~S9
zcsNhA-*Uydb~^s(-KNxr>dM6d;p*|sdFFG)vj%ZEmIcU&0)I#Q0Dfk<XX&|G02sj`
zw<=NDDzxeo-SWU0do&B@`O5tY{Y3k0bJll#+MY2b<xM^A0q&t#*X|NZ-wjBBks(4i
z@<|Earqs4oFxsZ2KQJkJpST~I2BZTbDXcv|CBhTeu+wA*)CTyjZ)ktbFmZd0Vu?<~
zqNfDGhHc4<sL5x^p{p|Z3~JFQRbH4xWYlc60pja!=*Yg5xwT*fng})o`zL3XYc%$U
zR-Gx2?{3dRlLhOna71IeT{gX;x%1hu7mk5NERfgzvy=(#T925QqBhq!D&Gqt2ZS(s
zrAGF2V#$r35xNASa}2y|3$Y-w?L^GX(a{RMP0%iZka<MpGm>S%?XGUvkshrCM at W`Y
zHXViC4TnzxES4=Y>;@BR!&Ps~(!wylER~1zxp?!<uf2eD22Nv8hwq8GsBo#o)b*3Z
zq8vEZNH6EcoAhCUh2yTlxP-at##D_pj4&=y_ghAL2)%N?JU^qRNYVqxFPf**P}i$9
zxYRR)R=-upPKB=|6^HX+ca^*wI13KEL1;keBakBy5)2PXMPwzhmXU8O7?+vMHW1nt
zqzWF0P{pocJ=iRe8&|dEwJqMm87I``3^PS-!*kboYW1!6<%E1j+99$R3l<I*D at vjK
zKrM`(EGt9!O|WaKek!@pa5A>~o)I at kUi2I*4<ntRNFuEOXM^WcO)l|TiVI!gS3}~O
zi*H|N(%DTm&+{!<S`!SpuFtXZ$yhAOX<!@?6JaUa8=$-d+HKlDYm<#E241d!G64y+
z8?0eZRUpmzUD|`Vc$F0*iCybeDzfalzvC9c3l9X7m6ju~t?{zWgdAIn0f8jp?Nk>|
z;5(MFrx*jOhv7KzH-}sMn2G8<fyuGI>69p_y^1`={5}z!9a0>^V7(r!omU&-467VX
zIk-`)!=CYsyc}E^$_(_M at 7)G??}s1n?MAu^80m at ihVu<9FfOnM5GOD!h>%wsa0XBY
zh}Ih|U at Z_5_P!*@dapNcoB^X$Xd*ZIbr{PfdYE7q4bs(Tma5`w+Hd321G0v(n2@$3
zQ+O<DVI5&u!mX=2M&7i&(Z72s-qkrSCsAVCP$|alxj`~}4L;6KuL)0KXAQSc54ip~
z1J+V3G*eXo#NIngKI|Evo>nf5Kp71sahe-M+SF=b<7dBeYqH%n=px>;q6y*Xf(g<M
z1j!w}XN=&S6oRu8ymFq7UFG7diJS!?5ZU at RdiOxXvy>a9x!u#Y4}aMTe_1wl9N6fC
z?H4Q|+}Wm1K0aC|M~`rq$IrMNV2SU<LDE6<TplZ+7MI&KWm2f*l1OG3Z*;0#aLo;6
zQNUCM&i1jU(#aTRu)c$?0 at c{wK>MtsjHk^RY`WmaN&)2oPkNGg?YGluvr51H_C^ty
z8l>22q_`bJo2neat_9KzIM{QzT`|@YWCgqy<aDh$t^MPghBk9K#2i#JL_6GCLc`gh
z`knsAC%Oc8f7do={|?-cwGe@`E&`PB(<p9+FJHgP`g-6PGJ1U)6X(bT8hdL5%>btQ
zd8<r-qYS9;M-||z{d5du+aR*)P^H1=R+EoU6r+9KP6aJ*KaE}<U<eUNlCisI=Dz*F
zCL`;cO8SPOr|)65Jbx5Dkdh at Qo`vxJ>I4vugKDPz;$Vn28;;F|b{+d1B^(o`{{o5T
zq at 2O}({EoWN1*F%5NcpC&#wgz=;2zh$iNhyaqWWyu-hHIPUTiOW~mUEyMHIUv^RCo
z%p1`3m;9XwG#Rdr0$?sO8wjqPNlqCVc_W;<%{^C8WNZ$JoKpg<;3IGhWiby!1IyVP
z4L~~itd8WhG0uo+u$4V+P=P}{cRhRBp$bTF9TAj)DFrk<h>9%0YJn_476oE!IO2uM
z<N+ at e6`-jNs%8kEW_?wfASnyK^AunHs_OD`7QQu8F1BsdIwHJ7ID072*ApmFXGma5
zVzO?C>)!*F<wFoU(`6el28LVFSD3FvVt<Sz^T<ENiBKcO|3m61*T5 at M`6 at u^O!NLC
zae^}g2==nxI+JEI`+h8Cbf%u|K|OOJdBB0?2MOY)!@Kg*w9S&o8K$ugroqWX%4n6y
z&D&d4H3||UT4}2}yI^;`qcNgT8hSSWB2T<^@&>&LXr3E4t3&<tP9?;>RDf$XJHvE*
zwC2ou4rQ0B%W2SyR~xJx(Ggua?2{(g%o|g$u=bR8;>@>m&}P5<BD@^NRwQY)wmN(+
z$4+ at 2&uFfy;Ga_iHDUP5h_jXYqP~8`bN}rN%x!wbjP!gh<gq!vigo3XhwW8TGqvKa
z;WaWQz-)F}4J#)VYpC{E$Xx5T215Adh5tJ(*sdg49*`99q?by8DSEitKfVm at 6a|)l
z-sNahEG&RG!<a#=@T9PLxfQr at -FO5ZYn4BDlIyL{=%Bz5shX<LwG)~VnzmuTeuMgM
zW69kgwx<Dd<wERw2mG)sc4yU?XlJcGi?!ajTs|zgGXXJf=$ju>7oqfcR<m=i&*JdU
z4bV%;i?Ll*oA8Xd9Fi262}EsthiT1Ro9zsCVHMKVYj5i9ydcVk6h~QtKkq|QBqwUL
zl<yXOOY~^>-e$TA5#6N8=#bx41E6AJm-j(k_!C03q;D<~{yzV&k{*9wT=)}G^oVcn
zAEYq?5tVnYKxB0RxzBSaJyK2?JOGH7EY9jiTv)QZ9c}(Rvq*js=d|5lQ~WByNY&m_
z0;hwZK#_gKMSc9T6ySM$=&H$UcKOXO0vAQ59~WgfOPOD0G3NN53<=}VvvPzTqL&HN
z8577dBQUx2xMnszCO#{Dn;X9zSQ)Yz`kP={8L+8mO}pTlgf@~is2O-|_ON;TV!M5&
z$x6itw@}uK+0aZ(=PqUzBO5t(pUI(xv`6f2=RueDH9=I*Ez0GvRaA!*@}+0_n^9+k
zU5n0!Eac6!h!B4HkzV1G%O;!sZJFBz1P79bN+h at Wpw=V)VgaKXVg41tyN at oqaHCXE
z2rj_zhIftI7DM?r=>!O-a$^}mb1`HFxi{rmEvl^I*cHd1XRV8u{W=xa4RTYJT35I4
z5t!ll7P=yDXmUA@(g<PsHo7A3XoxtWgWz;)tk5Vzx~>rHJYxg)G55Y3h68d_AtkSl
z&h`{=z;nW at rL8+3TZ12JtIZs6sC@SY?*3E^5)tXy@^JyO(4My_Ez*R9XaO?Fo;N!!
z(g+~QX1F{MboEJQ;p at 3W%8vXMX2X;*!{hd>DzZHVdWy2szem`#R3VIZ2k1~K9YfMr
zjHG_pIo46wj4C6&6Wxdu`bI=!eV57^ibyLO+^t$y38v}NXyjF9*Ay71XIhaQ+V(Au
zjK%QRqrbX`1d<1pNb})><H4m?Lut!Q^37^PItSqlcwdj|^=XOB>Al?M>*ui7C<+h{
zljqlfnb**duLLEp`@65j&#AlWrspNn>N(@3jp?%otIjZ|S`OyxqscGI64Mm(tGh2L
ziUKQf5iRMyuy at lbQ-h_ti-)<zWVqOVD>=b0XAfIk^?f$SPp=Oy&aZtrM{N|Hn&=v@
zE6W+L>Uwefde3r`uVfOpcXdV&t6#T00_<PY4PHGJsVDcYFFjvv{nuWEOs<oTkE)JI
zU;0jMo*kAd?oR<@jZ4!p%Mxu~*-k5;PMgy2^V44ioKdVEADmlXo@=;Hn>CzvkK2p|
zthe2gw_Z=BBJMe9XM$z%^kE#~cZ5Z|YEh&yU9rs$fv&y4-(+ZE=q`dT=FQdm=Q2Cm
z6tRsxT9mh^&E0g~u56SNSd&k2{Nv0<6-g&9+Y~UBRl)5CZJ+vt(Tr|%|8pkjO>?x~
zMVin$9R-Kz8z5ZZfG<z8bMd-|=SSUhgZesi{<@fc<_xt<`4-4IL#;7UA?YYt`2s8H
zC>^jcW0M3|)xviwx at IZbi&JdHwbk_+dRG|pV0VlBSELu5J<`6K0ok+W{OZj!!s(Fe
zqo at hlt-w>~h}ySL3%656n;FNJ0n!Gy&2Kq&r5KR2cAt{639bN3)QI#J6jP%G)HCs9
z@*vi^GE{e(*jEjlqnHJ>&1GbaIXhFpE0gbJ@?n-eRW_Lpcpch7PIEPt*Ow&Rj6fy$
zPxG=3rLvXijZuaJAU^uuazKo_cwOuZsPc*xdTM4*Uy+w&)l_?}crv#_O7T<gVJ`%I
zb7ZF5aJ$0C&W_lJy3=KKO6*Rh4E3ubMHxm^MikSBQK7KUS&=;TW{*q4es1*KiNQ at F
zgXl-FPE944jmI1q-eR(5Yw%eTIKjV-f9&_!TE8%IN`0zlmq at 4D9SGTSbxLX$)g-Zu
zt^3Zl)p7xG(RY!5kzif%<l`#HNuop=olTL4n9WZHDOx0}B%-8BY91&4H7EM(mHY$g
za~%GFuzo0=W>T)W(hlimT+aaFS80`!Z%RyLi?JF5oPd<Sf!5;ps;q^nvLocE$YKie
z`52l0g|sHos&XY|OfqVP=q4^TRSOcsijPGg(^&_kcHbTnKMAB2a^`%LzMKNK``ReD
zoN1w0SKKsxJI!}Ma$t4st6G$<I5-u8VVt~^4`z&@ni`)yJ%eE~T+O7)R^l at waF}&H
z^I+^#y}n>%o_bTyB#~0GZ4y%LYMxXps+Mm)Rcpjn-Le3&(6^Akkf2&|<6|$#mao7<
z6mUX=jUP at b<V`p&GaGecv~G0x-PYDtkJb6p1Iq)OKa1d}UY1 at qV%9vi9hMz76t;Ml
zci6?)huA4ti&#xqk65^$!db#uTkTVAQ>|0&)W0Y<X0u(t;Si4)kGV>Ac54Y*5gi>{
zJWRW`aIRfZ!YzQC7TVXn?z<v;5PwE@^GeT0-J`f>d;oW=YSmaRX)D8>;2MuOB)O7(
zuGY-cV)#A=%|-Y<kY*zkIj44f%*ddcb^#qb^rIkLPTlw at njSQ>Am%0@*`sl<8R4w5
z-WKLys6y{2-JFV^Ih`X$P8v=oPR3S-U_kOl`d-$YPBK=z{C#LEK~|*H!jZ-iTSF*A
zHN(8B9Qwie$@#wdRn~6S3D#cL71n;%W!65{)rPr-Zk0XtWA)Ret)-o%?WNtPF{f^)
zq5GQ4+{@U at Z<pSa)?^>^Dcaxf1Y3P*Fljt!O0HLJpi at 8ANYhwWpD%4K^(xIOl_{+#
z?NgUir`H&*N2$M12P=&$Wh{j$9WFgCT`s-V2vE<c4{wsJ7uCqu&@T;f-^#zgzX!V)
zxa+z9dN+Mzx;Hyi21C0~c0Kf(Xi=PJZP<}9fjsuX8&&><u%MgF6wm1SpygZb++!r^
zy#fai=kTt2O2+rWuZCc+k!w<b+(^aF>95Z|r07(4$KIz|;@r<V-dg=m^N3HA+08X;
z0f5^S8#UkxQy&rJU(#_2hY at YFGqaiYfq1&WB#^H8=O==rTeExA;>gw>L!#ZiQTrC3
zquZ_v%|Bl^tk^3-p`VoNBlW#~o{PrY5U+o7ER2YFUkSE+oU=PKT^qS_ULgRIq1#!l
zqEI7oUJ+QHru1qr)m0r>^ztsGoYcK^_7nBvT<1xRIf9y!6h(x*iD$z!F1d@|?9OrF
zu at a}^jdQGd)5G*l;}GA`gWF;nzNjyWaK_!-1NQd#U`yvApeGfz>}u4ja8+H<7jI)!
zgX(lVw;J%E+$Top>%hu?PsEdfx*b1C%c;35)`GJqCh#0Q7Nmz;CHs9+`7F%MaXm~n
zJTr&CNe*;Xb&So`bxvs^!>xI+d7!K8=CbwkX}bwmTXN;~MxtW2JFX_i4xtW2Mk}Qf
z&bR8CtAn`Y+mepia3+QL#Y)H*^bQjBLc_wGf at 7<W+xO9ngyXf>RNfg19K0%?YXZY7
zw4Wc96GzXHim#8ZgK0T2s#-pXj!ko}$dVEr9TG-JK!HB@$CorRokryg+z%YoHaAw@
zS1I+h!*b at V;HZo$MNoe=y)LK|%5ZSyz%!zjq2oK#aNW3>oj#v2?N9^d*u_3=UPg5l
z97D!UQ-^m^$gpmTpnfp2{5ndCvZ;zgta@~6qemh$N-- at z0g7vC$~^|dDI0cP$XcRm
z*(%>kYI4^j6p&4I6Ee0AD`Q>8LaccPC15UARAc at abgRzBWPfp<p~C4_$5<<Z-g``t
z9g}$k(IF*$Q8eH{y2-Pu2<|1hSs_m@<L|i>(ozPQTynK3Ka6O%5~kQWEqvy}LVYaL
zcUFNHKA&|{ROFN#i7yp9s(`YV82;|U!?^Z>W>4@#f=kE*g8PJM>>>_Y|MvNa5JzmG
zf_&^EiXnn`>xkMp4tgFpxN&*rb8$q)p`MFdukkU3Q<?v9;%d&Pk4`qBG^^+mXRTEc
z*k!o~bDtwR26qtD{Dm`&F8LJ95wA0~gV#N>g5$zt==O2GINeo$Rk(UL6O4J*5LCN1
z8E(I3LmxMB%W{J1x<JphBUM)^jUrlCk at t<vPVZQm?OPFB`C<Y6;AfR7KRaEHLW)6y
zTWL6Z>ZSzeDjqZV<>3=UzCt+65kVO(CjYP;AT!_;ZazS268{s!-8oAJdD#zK7-UJZ
zLKqZw at q%NR)}{??*l{lXE&J6=N+)85<rDitT!YWsFSd#}q;R=f<tONp`WHDDx>pp6
zTvB6}fY}u2;sycJ4#@gFRX;IkMDGITeTdFT$RL565x5WC`fwrJyOpq&kVr|LkU%fs
zuHv3lc!A*rGr7gQ6*h!#8NK at 1zgc0W{|S(6UP>kK$xnUAWbmssnOK5HtW-s>wVzo<
zo at hN{hpIMA+<+<>V_fpLnhAO1fd$gzSo<SzK#F|(8O8llTSI1Y2Qr5W=x_PN6)98s
z(+MhUcEycx%YanqC;D#F&j%3SxD>ep=J2iqoqb^xxfHnc`KCsvN9Ugpln#{4NEHQ0
z=4fj8sr0+9eI9t25Ye6RUD{uTUagr1R_THy>;YNp^d^^7PAHj{mlu~)hCPp;dsbJY
zZB-xqczaeS1;uv1ULq65i6xLK5+})chkC>ky#O<*XaEw{BVWT@!xWLd+|<P1nNEXm
zl<{G983uk_ at R06jXoq_XOyJ3a2UY;X0GbSB?rF~r0T|;4vIlbo0zU6?KP(8c>DlLH
z+-`=4stmdXGU%z${z;p#9BdBg2#oU$CpafqD`>D6t|xsvYbLN;!W(QFFL=CxmnK89
z_XSY7AXIOzBnCh~0jqFJWx|c&ayM57MtpmPPov_(yBp_}k9|CQWoThY6RHyHihG&O
zjdOW~e5i*zc3^!yo%Ct#sz^xecvXC6XY&b^!54`RH$or~5P_5}l2;N<P!%@+Dqffq
z`{6qFLHPMA{)Dh`D1&A)kwn6d at a5N@3B*EaRjQH%CXvNljR{V`JR^a&;t#5y$kL)m
zL{W*v6!r44 at B;d2t)tcDN~xKn)cVn_T^g#EBt`_0F-YO!g!*;2`?km~#P89ayi!R}
zzf&NvGJQ|kKEANHce{^#3UXEF^b)pG{n({09-Mba#v|&Bn4e2p6X!2V?<W)hD~kFx
zU_xy_A6nL*A}7vjU~_;$zc#v<QuZQFe}G&+tx{$_`$+nR9G4WAB7<Cuyk`Jz0DU`E
zHcPaqG}$B&<12ANp@{~ghIv-40{wKjN&JG`an6lWKmp-2?SZ3R^e2t9oDn6|VzDXS
z(39%};?O;f1I}x{?j+rV*#nX5SZBqSOx5IU)|xj|;vwVF)yb-EB|$TygJTP(X*CwA
zwKGbX1u)Zs#=13q)np6e$LQu>@%itKC~6oNz|E^_H5N-+%CILm$HPrYs%4L>74tM~
zBl&FZSiP|j!dZlZb82(4a*}ewa?)~qazb(fa_Vw2bR%`^b*pt#H?8^@`pkq%b)yJZ
zD~2itDn=?0Z06+Hzdyn4*P4(!pgfWBB*@D(L}YGQwy1#c9I7oBg*#~;xe1 at Oz5C@z
zO}ba*y&#l+W2}_=0UO!2I&%^17~d!=lL8EzXb%{l&$LNhnBb<;G36oFH|U}5wooT~
zRD~W42K584q~eZ^o|e@~iT5eBQQN`hwxyd%)jmFt;kmA|4Uf5opUP(O$g_HE69;NB
z5#?otcZ6hfqlR>ed6QPcKK+uAuKhE;>(xzArc?;V%K5$$oK>#d&>Nnn`?1jCJ!9Mw
z*y}8N^Jg&2L&I#ThB2Cq<GUi|F%j=~mONvXj9n32R1eoJ=42_T+f}Z{c4hC!3HM!a
z*_hrpCj{H;@;imE<p*ETdM|L=1ejY at Fb@U1s1J+ftqp>nn(Awn!8bFE)%rzHJ2}a8
zIm=9lUd;}Mv~+=H5E?<?9#Y<>7Ejz1d#_Lo7;37dn9a)@iJuKvt1)S2vlHHdHVIAZ
z@;Em)3TeKEmgQ-dRehM(bIIu|x)QnZc at O0tUB?b$8?d%|Bkw7RRLvi|8*(uVI((Cr
zEjd3kabiMF^42{d;&svGvU?@mJ42&IsX=ZG8kd6q!O<Nq19AMLi^f?kIQZjt-3-%r
zCVfe}ZhO%O3rAKaecWa4u68xchU_=jtg_0Nm9!K$mER9&{V2noN(g02Ouum}u1_j{
z<FG(Bje!2f+M1t|$Tfp`tPH0Y%v`1U4ORd1Gfk?6j_$njH^IAyb;T_p)B+!6R$D}h
zfRoSLkrZ`Ni(}voX-lxhZ_}SGW80$J@|dFv1LP1!$BpSPPPeb(8+qN5V0At&@dZSA
z;AXa6Jf(!6Kc#T)CNX0Je%v~2EFPkFm#!E`8}>1`mbfM$Uo)PhChJ}dpQtAs*kAML
z0Y6%fFA_hVIg+(2d7i>d<bEv3Gjpy)7wLpdNDa7W6+{r}qR#)(LIfu`;e!#gjGM-?
zr at CuSqs&qV0WXU9(rF|ZpDzD*Z%7py2ElF)C>0ufC}O=1U&_QtFr-RtK$Gv at _+T<%
z%m|*8i9GWDl!^FI24_;gl;6G4E46>MB)=WMrC|G<NQV9y9}_rqs{#F0BVKgCTvOz}
zpwacz!{1r$6*tu-=&(BaVl}JNIWU|15r0>2!$B){ATV^4!eim;HCrO>IBYVroXqrc
zcVO-HW}v;I$4en=6Qr*%Tnbz3Q!q9c%LvN|E4i)6teqU(c+M3lheBC#{vp*>t#jUr
z%;<#6f!o!~1H4-<ryy>b)I|QF&DH(GXSX2Dg0h*}!;~xYhmUR<FIn#VTzMWPfE!}_
zhSyMy`lSAoZ)rM1(FpqsjHj5B(Mm$0b6Upd_YCwf-NL+jrFCOzXB>wTKMyga)1sg`
z33^pbDC?ThFkvo+E%!e5;%_2tvWyD!#0?1ZG}#P%#uj6lPVqdM5VX-8qhrjCPRQ^7
z>RL9Ta>h=b-0Nh_L|vBqt}Q=~B7A6@{pp?||Fb0%U6ko~lhZSkz;lF6Q8-9R at weUG
z3q|E5Bh!?D?Tq2Cydf#%i~3Dl7IA&$bSv2sEp!R<bT&?ANyirhnvVAqgSVnpjB?d>
zPXnBq3YB4EP^_~`x3ecrR5px$oP7$i`k1q|3~E at Ghb7{J1 at T(3f$kdS)LKa at X(kU5
z2`-FX`o)B1RC}kf83nndDjFixr-Y||xz832WjB>>du>I{vacjXC2}QBDH8$~S}B?`
zn#v*+B|b;>1E1_y-5AJ at KIn^al#!MVnik}SD;C(m-NG*xt7x1E#KoSL<hJ&)*y5_X
zg`)YORRt6kw$=xqT!iN!Ddfx<Qi{!s#+Iu-k{{R%T|aeO$cSEJKYs3>t}xxaa^}2@
zSd>>D&YNe)n5(8MlJAQjBn*{GZTPe>6rZmklVRPEa<*$>ug2Mz|1dT<C{|oxIdz~Z
zQKobfW~Q&{X8lq<yx6*nbSoL6sfEM5a9Kgv+=;n;6sV+e5*FtD at L;cBjf`?0S4HP;
zkHk at wr`Z%px}~dSNhx|AR;^B=B&2bwT(BjjMS*f3ua2_L_)$Us)K&E3Wp%OJXzB3m
zA^&QXKy^hSc3qVKL-{_VXzA4_t<y?ErbA7Mb>mvILyAHNlr`1p at A5qn3`LUDBH}QL
zJ|eO)Q)<GBkA<wUd9czXa#Zvap}DXI(MkMuNsPnEQ{&>ygM~3{ooU^?%VZ~clpSsX
zO{iiHtH-S=HU1hJ17M7j=4C5IEB at b#s+^k^1dfYVcs?>H;;yxU43>R9d++MvspYga
zn{ii^S{8ZF7?;(3s&Iks=iB{CD4J4XpskF17bVG~tiX^1JC));xfvVsV(NNK0JpXx
z7y{q(;x2N&N-Y!d8X<PHivIOg0z>aO348&)vNxyZ#;6cebw32fe}WW4EMgovS!8q!
zcpwK at Rm9W?q`EcDe)7>akTYx3)?0L+;e55QC1xkHG$Pl32 at _1CtMICMZIbotcJ`J;
zM_pu&%!}__lh)W{&q|ngo1YvjPps<zh8G-yp~hzjnMz(PIm&Pqif~rE8-w#t+jRmB
znYHqo^K{)RxC(Wo2i>ZQ=LKlwMSONqeAi0P{Ze+tKwD+tI#c!2(u~o-5>Gia^xvWL
zzR(Xr=L=W0&Ie}S2P?CZSb&?vwb(tc at d_U92E@(maVg1olxDw77n5%K%9x}w4TOeB
zTAN668Aj4~qVI}Z&Db;9GTGEx)!Nv9v9|)`$+o|-fwhKp2)7Tn;XFy*Nj)C2`)Iwx
zmcXjSI?KxZsgA{g<@OWT7x$y5sr#>0bN4=gnJ`kTIzKenChWhn5@<kFFDz{=wN-*r
zQd7z+&Y>6tq-^V(US;fNoM7x_Tw&~IT<#H?1GNH^S8s~zR)A7b at 4wMZX%kRKswvBD
zCEt^j*+7w3UyMftJ0{p;;OWtzBtFqCSK?0tx`|Wb>ABW at bmnTIy2Il+E*{*#C^6G|
z#wK%obpO7bU5n)1>wHmclr$ZGnGk-iGKHa_@=*%OHOY{4*X{oTV?dn0Xx&R=1zlCi
zvt7L0OUo?3N-AaZW3Hf?ToQhym;P0h3(D$>b`v};xFlSjN}fwdXT*`Gg|ubfw%S(8
z>^)vc=*w49A?-A)@0BG!eBD1vef#K3ZE3HdLo2D>3tRrGdVJ)s*0ybBIqur at AMm%|
z_q3<3 at -830x`s!^ReO}w-A9JR>a!}fDtcFkTfwIPczLz$SRLV|b!?yf2g`kI;nl6?
zwaB&0eXJ~H+deETds(?htE7MI`0DcC at ti6@!6>Mr*DJTZNIG5ZMZUeh%%kd9%c`gt
zU%r&~*u0SBs=bxeI#Nxqb4(efUlCQVjxctAV};CuUM^>~{J!VfQOFyMeEZ^!09Qt*
zKjamcTW47%y~4`*mGpY$m&Lv7#K7yu!`Z@)HvJ>zsiGwHcgua^D(hZNuUkI5I`(>d
zbXxT8I_1|JHFmrOUG+Po%-4IjdE;JNAxVBEwIjSY&inSu*V}#l#K#9JHSaSbY at Pe~
zSe2Z|F88JD#f>Za`26K1mwOtYSy0=qN_su7yV|e*Sjn|x$kjT$#;Erm at 8R$E at I$^I
zgM6Q_hU3I)xSd!HXPN<K01ZHnA4&tw2y+w-F-K!Hyi=@(JBihBPq7*vB38o>!cK1G
zN9C0AlX6=58*=BLm9xq(%CE|K#Zo({ozyJi^A3MrkiXr8-|ObDCFu$9=Wh6u75oh)
zd^X|p)_7nNFddi!%tue=ih1Rqr*tLtuAYzm{_0tH<UXObe?bX+?(dddr=IH7^Z!|m
zvkHb)q0|n2OQ%85^k^CfZBL`w(D)+Cr)9JXHrYs9Xb0`359nk1l)j{5`hm{SIjUe1
z)0xRaSQJZOsjMzbXDwJ;mdQG at EY_3tVg1<<Hj<5D<JlxOoz3BQ0<|Gm(HjH}@u8Vl
zmF(fvp<H$DDj#Z>9P_E+S)UrNYLQ<lt~xTax_)13*T(rv)3kH^zNO<4&_RwKf{qb%
zWaZu~WcH!zg at 2ez<d$BSc8RBiPg9U|M*4+<#k0cU;#uJc at vLy9cvd(@JS!Y0o)wN4
z&k84qXN6P5Q^Gae4!479xed2LwcRdvAk{(bu79|8{@ihVRgHmEOI#QF&)p3th7rOr
zLip2N3?l>{MQlF6-z2pJC<Imm>w!(cHUNEO`+yIDBfv4>Yv3es3OEZ~AaQG3Qm*sN
z>v~}m>G$X#e}eW8)o`5_uUDIRZuk#96a3H1e{ITo!=j8WKrBf{-0ng>5WD;RGf{=t
zeCbOcn&v~r2)^{G4;AIstSf27kAfGqS!1dx&l|wI1Z{m~TULv!=sP~OiL)-%^Qpo7
zJ$i{pi{Y2P#;DV;cuM628P|P2g+G~+gma8*KG|}@`(#U)I5SF|87t0=7f-e%;9Mg9
z99u5^|9-ZGUH<IK|2^va><Wz~WR>&`Jl#oQ6aziir22 at 3t-M#Pp(K7^5=ld0H81Y1
zczJ#Y^YU_WSJV>M=AGBP5`VpNCnTy3Gz6Lf{JmQ30REIGzn;LKC+rRMqkrzsMnl5r
zMi2c+Ms{Wrzo$eZ*CoCJmFUth{9Rn$jHjC884|zd1z+LMZ(WsxkoR3?XC(8ocbT;l
z?=s64?=l-C-eoplyvuB*c$e7*@h-DnKJOfJppJm5?;0O9kkw7WXu0}5Wh(!5dXjGM
zl$k&=-Mh6*K$dBruZUjRZ#E08+E$*ais#Mv5n(=WK$CsixA!{X^j$h7 at TV$;6#QLk
z8o971)O$`4h3Di9A478lT`*w4h*6X$Xn~-s1`fY}Fs&1GqoCUa-8Ja`kvX()(CC~2
z^x+U*a^(Jz_m81tU~}keK~D;LO3<?54-6Pi7dd4#;=Y0RGi@|>Fu#Y;E(;QrKQAp&
zB#9?UNjyF6eS6#GZ(<7+Wx>LRjQ0f8=5;~ElddGLObLHv&@!i{IL}SuDi(jQp?Iqs
zr{WoHScp at XpizQGLvyX*za6O?ytY3L#oRHTrXY&Vr#!^2)wBT-YZtwbICYFpAUd6;
zi{f`Xg6uzj@>}KIZV}G~GQU#s7C5Ht63+}W#5y5?)Zadi--+Z~algdCcg?$9WpB04
zIFE17*cx$sXm9nez1to3etooEzjoR#H%@x at d(SiSeUA4nuMiq%uGO|2uE)IFjo$5c
z at 0PD8$HGR<uzKi^Idv>n3G)%rS7Oz)i;f^(mqHg6Ok)u&37L2^WZ=Eoz{=5TMj*L4
zXNH6RVupd9wbwLe1MnBjNWPc*xEWQ&MOSe#g0qjW55CNdt=bn?#l`y^l^|L(LH{Q9
zCHm}ZC|XRaIxo43OR3^&RB@?QT$)cEjYJ(atM=8Z;%ZlMbp%)0|GGk=V9;_i2=t;j
zre4+2ZXcb5ilaijM at 3+5PAXF+RaO;MRUN9X8md!uss8+)9KR!{hN at v|xEi5GsxiDJ
zjE*+qqwv3F<A1>>YVJ(8gQ+b+M(JMZUXqc4zl9lntF#Am`Dy8Iu&)Hq=g(uybQ?Z0
zb;3s$XEN%FkBrf<7&MPw0^Nm=OuO-sF at x^~-G`5i@$o+B2l&YJAwDu4!bira`55#F
zJ~DlRkBqtgQ_y4h$aEYZ8J_ed=-2qj7-1(si}8`^Bu1M|r|^;KG(Ix&f-|6J at sX(v
z9~oH!*Z2i|WGZJW77q^Q05zBa>c=p9AhR<;16TlP5XP;H^<xNV7z+c9Kva^ko{R#G
zVKJa_EDkh*C4eTeB+wL=0-B1PLuNHuP0-q`HfUXBATq1Z>Vr094MEe9kI1YEYXaJg
zH3Myd>_ld*SZmN581&3;WH*A|#BKuZz&e0-W8Facv+gohu{}ZOvbmu1*t4Ju*+S4l
ztTklu7qc>3$JT)!!^%Qt#~F0U&M;_(l`-f<*qaG^GhuH@*jp0zmWX*HEfc&wABwkH
z+T&h8LTrsdK9?Y3MLYX=HL&Uk%xmI(tCI4o at +;_h<vb{V)2gHfisP<qg;Nb9g#Rr7
zf1X-%-pYA-3-&xindU6>Df4M_t~t+KXg+7YV7_R+WUeq at G1r=}n{SwJnnmVY=G*2@
zbC0>-JZOGo9yLERzc9Zszcar#e=>hIe>KmWzqupaaptY&jb>waiaX70Zr*IRcGq^-
zGw(9HyBnH!oA;XcxqG?qFbBA!%}!=lbFewg-Q9e^-PnB4eAwO7eK&uPsG6j<B2wF^
zw@{?GGL|f^j3GiG3N|*MHJ>+^n#;|X%~#FW%&q1-=DX&5<^l6B=3(=%=I7>D=C@{v
z`J?$a^B40Wv)mo!PB3pXZ!(*@Q{A=9mgX(y4eq+`24*kwPItO_kD23+HE%cXFz+`<
zxbJi)xtp4gxU=~kc{No<j;q#GYeM(6Rm4HHF(h+9vUcQFGa+A?kS_xAJxEdNSal-R
zQlC&KQ6sOc^UcNP5_6fk(p+t>Gq;%A&0XeR^L_I}^JDW9^O*UidBQwt{$QRq&zhsn
zi|$BwyxGCbFq^n*xNDj%%uKV5yN<iQnQiuPH!}N}{oFBTXEVzjVh(rra3{K(m}A{{
z{nN5CisN<g438AIM3T8saI%+^AY%!(8;~6YAX*KlC0J4D!bjr}yJ{m>Y({O&C(-Kd
z=2Xzm=48-L<`bYD&55A5nU8^X;BUWGZ#Bn(wy%uTDlDsJshAaz-(r?fyC8D%d@~CE
zpGtN4TXIqFG*RyqQST&C at 8hE0M@3zbS54tH2rkvjAs(q|YHRgo{+3}{gL;E#AdNzX
zF%2>Gnz_7qWAZj>3Ft=YMbOWrd at +Jw0NpI*ffn&MFH4{DcQH#F_}iJKH~IUTG1Aet
z&fno2NPG+`{N2F(UCJmuApZJ>&k3g9mt?&UKKGEM_wknHpzL0J`tf%ei>!&)l0c(z
z9RJ={SSY1ZXKwyy)N at UYcZ}N#&{<V`nAqbHdoGDR)fNmA864!{?}#S8#$eLpzUAV5
z&fkjsX|Kr9c)2}CD%f^4;S+qlgU at Zg=a~+a-zB2UO`tPT8V0?#f=08D*9}5eCu-sE
zVWuShW at b{nC47&f^LJb)2~C|uPg1D0;NL)LPr>nPv<(IKIri7227=!MJ_v2tI(%Pz
z%hvacZ8ssCf?8{Ne`zk0xSym8P1Y3p3ZMv66EkmDQx)6JCV#i_ZK6-Qw@>^#m!g?C
zvo7l7D-ZaN=?`svXhN6D2c{EruW5k(Rh;eT<s{{(@)f^YBD^o3_A&*tT_$W52k+)@
zI&KTOx}b%=(9=kG)#EfxzX*RANzr_Zv!eA2;(H|D;(MfCCca1TEgy&aS at AuLZ}B~h
zo)F(d`4-<pQ78W%&bNF;BHmy<l2d%+{Rx7tlk{J`wf^d@^%rlgzj$la#Cpgpw_fg*
zvD_=;Iq%u$?6Z-t+HFp<+w at xLy!WW{-lM8pukhAa;jQmCZ=Zj&`|LgclJ}@f_EBQ2
zgrJ9EXdwdi at LbFx_mS_G@8Q2)A>S+WwYx)(lpDxR#qaiYl(YWeQQX71%}ru%d~^2}
z-cS!&884NjV0Uv-l8HH0!cmGl3uV1Use<D&scYpP`i1=_{xXg4L3W2M;a=>CA(z|f
z*4-|*;WpiFx5FLa_Hzfi{rNfx*~13u4aA`$M4q=0mEM+iNV|BCbx&nRpqMO|ui6mr
zpC^+4YH#sx5Pxz&a%r-xD-s{n^*x8^R}WgR$#-WBx at 90Dp1<dk7Gj04JjV$3?bpOS
z?|AG*y2v~@V(ctM8}7|eVo1^W)!JNqafmBTk4xY4-?fm=%U$H|ayB&DUw&AAT%Ik@
zkzbNORDMHF(o?-xouSTF-%{UJ-&NmJe^AeAep;v&t;K7tv^%xl+5_4cZH6{qTc|D8
zUeXG+mD(%XYucOI7VRDJ`+*;7N44LOTTC&hnKRAV$X1>cdB6&h3GnP>H|ExZ<`=Oc
zvB|OZWABa~8apm_LhO^V at 5H?j_gj2ud~EzJ at wdm{72hlV?)ZD+C&q7#-yMHA{`2_1
z#h1lf326y^6CO->CSgIsn+YE!{56phwL~M)ofw!HoEViDmzb28l9-lQC$WBFdScVW
zjKtd#J0(s_x*_Scq_>lHChbi+nDkSUCs|6?l3mGx$&ty4$u*K|Cr?aXm;9HM<dpkU
z^HX0>Q__sIw6soXx2JVW>zUR!Z9&>=Y1`AjPW!Q at r`FM0KO%9Asa;TeOYMtwqUsK>
z`^Xt~RzDkl_TF=Q%C++F^4Ri(@@D02%G;LTRGwMhrF?Sv!t$l%$I8Di_gG`B3d`fU
z<gu-nKn2n%VG)w=kne(@_mjuS<K=0v$TRYC`4HAOjnrOhjyg+SuWnV}QTM8c)H78U
zNz^jL?>dgr9 at Xaku0_tkB9mc}8Nwn9kej_EEV3Gz<5qJAEV9o$9!s%dv8k~QWABN5
zL|Ej7IEpKXr}&8Yg!m5eSze3W8$T(2Q~ciePvXCbKO27z>2Je?Q3+!bauW&?4kdg7
zi%77DzpzMXVoYKJERvd7TUew?V(Y|PV3F>Lxk)!AZAjXYv^!~E(kDr0g+=t_faHke
z1X!ddEb;;@l9bY~#-!AOG?u2N`K8r at MY_Tw*=adxi_>0*MM`T at tq)-ls_j>MV(oRc
zf2$Kzw_n{cXQ;{|R2~eA#Fy79Zvl&Bl;2$5zPwxc?D8e$pOu%ES6HL0v6U9_eCyfe
z+2PsddCT*<=QYn7&nupnJ&Qc^Jx_b)c%Jgi_RR83^$hg%_vCo`d0Kl~d0Kj!dm4CZ
zdjdU%NAWNZS>@Jw>#TL!`oa3f`pWvkI%*xZKDG{72dur;E^E8B*?Pm;V6Cy{pTGUQ
z-+9-0<Gg-eJ5T34=d5#=&Q+Ydc<#4z7tWnK_v^W`b0<r8m%dxNvvf!4JEd=wzFxYj
z^x4wxrCm#JE4{V!meQL`Zz|0wy|J`y=?$f=OIww;ENx!eth7mK<I?of+NF`D;iX}v
zu9BZiek$2hvb$tg$vY+6OWrQoR<gBZOUYX$n at cv8Y%F=bWPQo2B`=q(ELmEzpk!Xj
z+>)nDo+_DLGNt74lE+FOEg4rbretKvkdpgK29yMzEIWDR<dl=`ziaqiz2Yy6zbO8^
z_*n60#h(@*Ek08Gaq(Y at KP+Bbys~)yx4XZ6?b{c=o&Rn6w>3_boH+E&Q{POBt%yDs
zT^jvTc$;7;=v>gxL1%(WgGz!<27MP)9Q19_*Fm2K9SV9bXm-%J06oAFpt^PMn(NPh
z|9k#v62FGX4RfV!_}ps$lj!&V*=O>rm at 4uC2XZ?DGqj8R$RD#Wzaklkxjfh>Q;0;a
zz^^{WBA<yz#7sn{m|XR1#WlUZS6tWoi^UDGPP*Q&7PqAvF_Yeeb^6Vi at ozykcdPg%
z<BrrxT*v8xd?8Exs&RMfL3bk4yNj}`e&6^W<bC&2KjOdDFr8-5EP9Hb#p+}UEvIEv
zNGoXty-csrtF&7Dw()DUj at Hxb^aj028)*}5rXt!#Tj_1uu6IM8J&^9B`}H0)j$Xn_
zXPAB*8Rbx{L}pT+v4I{kel^a~V0y$@WUMfj%N>n(u%3HNZj2S(7Me^0Xr!@@^)Nm&
z^7t<=V>Q#CrqGl091CHg`Yn2Uy^G#e at 2Gd8x11MgCu@Z)vPd7G4>V;{(Yw>5dS^XL
z?~V1<9GXf`(`=fH9AO?kBYv@&Xo2{><`?J}X(rZK4@!B`3s_%`mzGK|@?YU#P0^nN
z`0PY)^BKR^$$yjOL6j6=t at R{5jFNZR0X9pjhq9G)h7RM%8FWBit?+wKjZsSUnJQ5k
z>jC}bvzCy&r9)Fl>7r~@x+$BL66GK at R~}LhD*cp)SYvq^vXhlSOL-4+rv31S&Fm|B
zh_=Yz%Z=r2N~U7cSMou5HGPLx_;r;7=v5(2fGi>G0eV83Aaz5 at d+I^)du|V4|3S8d
z9fovU*i<@7i)BUXKug$B^y>hfqp5Na=?S=NV`&iNe-CvX#QAyj5Zw1DbCM<1LD@!e
z|E|BFv2s22sQ8>gPCo&DRH$v%LLA9xg==gjdzYQko}~ghjM at G{`E&N9lB}#!I?!BO
z19Cr_i at NjpIocrhDEiJn6L{^?BT7HEn!Z>1Ir^jSJ-kO~bEDJ^JsJe>8bpt10q9d}
z_M|)ulJdQ=bkNaJX at K)lgJU9kP4s}=6f5BeuzwwGpnCEmnv0r5f3 at c7Ih>iVe1ksE
zWlu}z=%Ad5Q8q|94PEow3yZwtSh;LexA8^>o{MIH;W2?ngU&nn4JDW0dw`euMSXsO
zpCqPXh3gRaEhYY=RnVx!TtyB|Rb+`#-GqSkQjOaNuFtq5J7Hh1#CmnF_?i&lNLWu<
z>-`^1*zECSWh>EYuk~uodbx(aUa67%&GmMEQ?G8Ptn7sKmu|`Q)_P07Oq6xc2Ft&p
z80EKQihaD%^=b|LzpdZ;gaJbmW(UkpZZ$jLzE<_ at hzIG#ohFF}S&NiGYN5F66_w$q
zl#^D at boB{Ip$5B;oN7b?M@}6%)i5|PF|Y>Gqd^K)JS0a~d}l3km>15D)@q^uO~qxy
zqo~86rWtMrO;sjKx<h3$wB`(`=(OI|Bl|5RD?3{BYI7>RWy?m?pt$0LhHMkL5?om>
z`JNh$Lz4p=2g=DZYkJ_ofskdPmZcuO^q}<uyU&(*kGxv?UbNw$b{TG!O;c#HuBaNR
zlA`lAf_ijXAKc?^G$iqcDvopE%g|m!mf>z_WEfdSKVy_pV7y~E?qPw+=uvVYdtkMc
zvKmbtmFjSaww7Sx2v at hGt$6B}(J0zQGaO2+p+@>kGs1)2p at H#nG0{=sVWA<xL4g6L
zzn`I3IzW^&LQ4p!_#mA3vCWY-Z7SMux;y<;dV0f*Ko at gKE<cxlh!PbT6%-P$vwK*g
zoakbS!Hs2Po&w3i0!<SIlyK{d9;`;@5SDU(!C=<HdZ`<0YrQa}V6gT1;FpG2dsx37
z)^>LPAo)pagFM5^VN0!?JZr=AR)4mH<9XI4k1gdh*lO#rGC~W%e8jJEyq$4plH_zb
z(^zUv$>nm!vbY$jL9GVSQmtAI+64y&BsrsNDdCz?J5iOwr-y0N)xhMa*<rH+sP=3X
zQBn_c#yM(51;Ok|0fx*Rsk*<aHRQH1xV=?whED7KV3&X%cXwLv7RFI2gL^?)c$<pw
zHf6=9xG$XAeWdtQ`tE?!0jC3lS_ZZZ3<?KYHiUaS0+gQ|0p?GE;Vr8+%1^zLSh8H7
zr8SLX;eqv8(<aTDH*Fk>FQF(5jANl8nnMmWu?-6kY>WM=(#C=8{*Q+a`sjf#_8<FT
z;63ZQcYm$Vx1W6b$-pt=AN=Nt$rG%@te#Y_-o}iZ7~7Y!X3_F(=8vUHeDrIz>nqls
z$s6-udDo3)YM%el?4JFOT3rK2_Ri)H+o3}bdcJkkLiBWD_D{wP-<W1)G)r;UNUf3T
zPD at E^NAvyS=GT8ZVt$G?-|y+vpgA>D<~2!6jILqG{-LJf?@siuV at CVC8@Za;%Hsp(
zZmv0y5Kc@^{DuA+ajot?Rdy=i^tsbqRq(Wc;`FjM#iAtOw5>JuCl2T-NrMs^r#FKR
z($e9wT5?h<^yOP#qcKYk_SvU?bk~3ZcilN)z at 1CBY<;m{%hrnLdJgD+*Ife!%8d#t
zdKbhm*|v4*(zmuq^A=2-vT)&)sSBStzIE&8pKsmvxs<bT%CrRwrcGY-#BaZ7{-1As
z``G8(wj8&|@MO=oD*qK^gBr4f8H at ax={G$vD9|<C=?V%8G^Udg8W!qcnm#=&EL37L
zn;sh%OVbUCi;GQ&mlERwoxx5FJ2 at gGFxctPCCvy74t7dRlF8mBMTBBc2rq3H<T7N9
zoN;o^P*ba!rY(%9voLKz%Djj<X0Wrq%QUEdP-vPNC)W>3OEd%B7<EC>0gVDG;EhL4
z1?;tz3vc8O$%pga;&UgV-+;Z`N5lF5DpjktV_vqoyiC8!i+M>^X|JRW?sUfP$=Kj<
zsYyny7>Z%>Qn(ANM3x%Vikbvvy82Qt*4ue!Q17VT at x2-jj+=mFCyzZZJ*O{pJsY|(
zY+=&#_2Lbe;im`srTNv2kfM!9SEOHLU`$9%Xjp7~dK#s%T1IkE?cmxWHA5Suw>Fvt
zwG6&7y`#}Nq*G}7$gb%<S#P74-<?6dg8RhZn?BU<{=k0e53@)8#s at x2&$8#Fg=)Sd
zUtg-{885i<{BqL^($}ZAyoc^#VyMBJnj5SwYu;Fs94tA_WXVay$EFyejnl*U at Jtqt
z$Ijk;=aGVYSKek#U=^*~X<Ph;+{3~v<_;;I`m^=n^yv-Lzueq?#hrI8$-IARYdQIj
zm$K*Yx-mnVd+9>21EZ%|*5lT<&-S{D1^;!@Hv?{**k;+Dl$1>k8a<HRcrfO3%oXeb
zF;_ItaI$GMS>cm}a*atsOcAFrLHK8=S!zFZl$xs+sG67_Fg4iog2)!uTW6&SS`c#n
z<{55nF+FGcJ4g=FDA;KR9OspyPNyC5+=AzEt~mWvAfN8wR1KLXg at y!$C#OnHn*=qN
zCQP3)^~r)o3l}`61)a3omXuhnzx$Ex{rW4m`xM$MM0*d2_Tn+4^7b5zTtP~(PH3-9
zS#`a^jl+UMLnKFXv!JF;q(W4=a8bdNQ>SV{r>r(#eQmY+ at jJGsq=Y}ah<b03I?C^2
z3<gq{jJg5-E>ipq2Y+LT{Ja|I_q>yt^MZ6gr)+3}GXE{G5VztoLj1L$fFo^+(~kq;
zB0O`&9l_+f`xFZBy&>~wjv7##npTfBS23B_kl(eQXM<Z=>qlGbTd~2`^Q~CcXqKgX
zwd>vf2do+F(F6V8-8J9<d(@h7K*;tPg6Zd~f;gI-5l9BhcgU&~s!+I73)TGsj#pqd
z<@3c6Y<D+gftW1$G~P5ZP+lk1yL5QfrNdG^Rk?I{HD^{Mk7u;R6U5#n3sE{U!%tp9
zQ#Dy(krbgpbw at t1HQ2myC??!9hYKfnv({KUSO(4;$i9-Ekf!o`C7UQ;QWz-#$3GD1
zP(yx=XrL5*={spEe at K)*C;rQ|7C*L#rb at heI2)H#)SdkK;lq~2Q%z4hX at l^~dKn=U
z#SplnWRlxSOW~pt^2`Rig;C*=m&b6#XGvdu=>i<`w-I(Mo#FXbnOiyMWCUvkK~&&3
zFKAAL5#x at NV?v`NAVC at T?_xexG-OFqU_emgbR;ZNS~>*=5XL5`^i=+fFXI1;FP1aI
zI$vIHoo9xcWgWCW01l$*#;gfzTwpz9O}A!P53#4&qij5Tn)mw~B-FjpAGmr(Xgj$;
zkqXqw4k|G8cr6CW6LSR|@s0+ at N5iSzwo=l|cuI*bqH7!7vRjevX`UFUHm%W^o77?*
z;Wzia&pK8Vu2vrEu(`v<qpO8~Ad6QzqR%mumys436)i`^1j1bcRaI#h at KWFc|ALTt
z3RZIzfH}b#6CNOIv3$^nV$g?q=TgWbiy8FDsU17S<SFFwQMqczW0sMAr_xjH=@_q!
zSI0)rh;(3`7pX)cDUTULW3`8)9*Q0lGlix{PKlZlJtbxpt%?prD6D}lG{rhzWE}{0
zj;3u{<8*~*BpP9HxwE1(l-M}u_LryMdwAUVBiW at a<d(Z5t+LgtS3kn$wHoo<ZI3K!
zck>60(o1*sSurZs`cd>fANJ<IY+sW`Wz?t8VCQrretJT1L8yO$@vIh8knn8sJZ(<s
z@>*dr!6b)7#-t_$#K<A>hE|KKAgo7a?+wv=bRQukT)5k*Vx(aKVrsJ!FvLS+U|ddo
zPQt)M1;L%?Q%Yh|Do?lUjG+!|YBQI0P`+{Aa_f*)+V{PoJ@$>*{@z<F)@@q2WclLm
z+ebgNzt>6T_l#U4es}H{XKU1Ww^90{xziS|d}P!^6H-z)CM0~c;jve_Uk`+h3*l1|
zBH!eUSmrPLlPvqUBiZFBz=~qB!Tg*Qqv?vDh`X*Hm5Grb at 7R$x2uNbKF6PmxDu>(;
z)9&X+t?i=P)PZ`@{qzXUCPx^nL#eEe+>CW$UH!WH_hf_E!)(0#B=d(c4P at ty1Nq{F
z#~E3(BxW_Wjvn2Asjph2;#>J(MdMXg0qgg!u+b9OXdq;drM?--N|YmTdO&Pcfg_|K
zV3xmBK$HFFI11y!W0+Hp!Lmq;3#eeemI?5gJp%Z6fsq1spXNiDk6{?d+HKp12cST%
zbqYl`?`s%tk1yoNO9gea>t19j))DJ(ecv6 at d&jV~@4vtHj+c6<M^{_(-EQmj4?kPK
zCL|na)NoUN{-%^v5mV+u{zW3Dq)>K7O0Y)$)BUI*Oe=^9TM<y;H!Epg%$yp2Nk&X$
zTyTt>7$02&K?aUgEW%82MRBzYWrQ4{1MHx5P(G*}P!DM6`Gz>@9;|nK5>F=b0ZFdx
zN^$}ZNr~xUQsK;{OJ at Si==?(GeTUtxHw^oRsn(ej)+OsS%VN=;UyxgGS at zP_tuHOx
zB0ah}CDl4>{q3%MtiSzu()vLJss3z5oW0Ut1)mxMyJ$2ZBSH<7WJwNG5HnQRL{?>n
z;I28aXxlC3)CO0DUv8xAx3Tc#6N7^suv1|37QHfpvL&X;QEE%IgF0AVPwO=Yd<Mp0
z$t-b|yyMb|!_2zWSUuYF;$*dseHHO3==dq2<7BMCZqBF?0S%{V1#$HXg674|Nn749
z!Y`$EOlV4s+dvdYD0e4DV at -vOfA=Y&+{!U4zO}?)_08mYrj^oI<nj(NY?G5xkb4DJ
z9svK4p2}UZA~$#C3TwrbdF1)>D{J25`OB^I=g(W`3p>o4I_24Cr%atE?a7-lBkzUj
zGxB;SY?$=Mp+j#>+K`a6ckXAUrJv2+%W}p{nKA~b%<C2Y295~fH_49pNH(1!3!E#I
z0-6;TUl1 at aY)%bFOiW^M93>^i_zSl|2P$W$lh&`5UK6%Ea#z%j=p8XTVt2*uj(4mM
z+7|SEkPN?RE_^&F*qc;RW7}7fQdwokpoMQb=XZj)wAwKIYpa|EoWL3)(0bkau5&(X
z>-DI3_zH5Bpq_o0`^S?kOiXM`t-Ir-=PLb)_lf_y{JToBxZV(xVQN#Am6+PaC5;F@
z0C`9{pE=6x37$uYGlviJX<kXT>}v=-?-1u3R3jr8nS^7BGL=?h*`l&YRN at qsh!mu_
zg3r*wc10o+Im~krRCVdI%6#NA>Z^VZ88o^*qqdYUD>BO`rtpo#R86IPO>L(t5+hY!
zrM>K65~V1~@aj|Pc1q!0ttdZLuRQoV+K at t7Q>K1ienHVMTB;<UvF2INZeky;WFPT<
ze8&2zpUca<dhkaoq~$B<f<nn$4ZG8;t`H$6 at y}<f#Ot|e$;(!qS?$g1DrN7QQAf)s
zq+qg|57{XnIgpmGYLdj-X{yX0K3m0Jc4$%x>UVGrT_(I&Y8yJF4{pl1_ at Yfklh16j
z8mzP$Y+ at sX4W7k-<8R~PPkr2%Q70wN&=hBEutFizgJ%XT44(&!#zy%Ys^W}e{xMNX
z4D3s(QNcC%%;Lx6aIlyykt&`NBag5AM9y&foK<!@;2?^4>bvPtW4v>Gf_)t;I2i-(
zMt1r9&j+L%t0V^&N^Hh~1AE?S(Ytrc##4uPeIuvu&cU0%>d-s8L7J{<mc{1f-8ZFY
zucmz)^%~j!=4~xo>{{A+R?nUdnns4UX=3MoR=(pwbs1tvXIhw%9^oe&uSAAM%dd2H
zH)-r%)9{t%p=(lJX at 2wVjhn<pQOzJN!mnmjow%B}1=Xot^R~J-+#YcJ6kHCWw9Q^I
z?zobV?B+#39oZYO=X5%z9dxZB*%u?kbqH|@C%7_;dYf+d?0{)+$0x&%hK9RKe3u4Y
zZtS8U$os?_#z$<bcLCV6v3)rvEj5Mf#$FPIDSYJ^uJK@%W-pJLA&4pAh+qL&x?Ozc
zu?bJ-j(>Enl-TBl!E65d>8peDThE=p;>L_2*3tD7PV{^6^@m2>&q7|D{M(S;6Rpn{
zzh!NnG->+G$0xIHZy#a9CUoj*?XpUx$hpf4pP93w(CTpeZNKf?cd=9Fsh1MMzIuJw
zwydd7-IOuNdUNMe>xZF3M%;DB1381IPMpYYdwUb>IPr-Y>k9gxoM8QC9n!e|1F%jR
zB61WbZOOQa0{Mesip29!7U-0n6euBQaXOHkYP`@0l$|=?fh at +ckmoQezhWpZ7#gY*
zS at LfCdSUUAQ$fBL6{<G+PnFY=?e`lJ{P at L!R&L6su{4V2km_K%q{)U7#v-MjEL+O*
z8_b4C<Jef~F?qD|h+~{SgUysC`7M^7mlrAFc5=g47ILDTEN!z+OEs(s-$^Y$o_Xos
znMYOgQlz}@VjcE`HCfDC`!R=}LZ5Z<?AXm2$&s|sX)Fwy%oaM=#s|7|DL67-B{L>W
zjf|;pP)v}L$b%0bIy}!5iMF_E)w1CRcM_z>`ptHcDyBxF at 5GhJo@JTKUwm=7wT;zT
zFmK)h%Oxo#7biWoaD{cI{8Fj3|I!yTo|^NdG{|cEz~~1 at t=#eYtYsky2Nv%;2FHBJ
z^R3F?pA$*VGNSxnGS at j52C|oEoq}N>I48;x=}!$q0;0Hx-f76bqSkPuJ32mEf_OYP
z@#Z7VnunTIU&7S1K_yc>WSwCFjHZ+f8v4^TYppe&O=sPw|D^UmdT(FrJ?m5JGwZ#+
z_a5%hfh}dQ1Y3Hm7`xD;y56hD`Wd0L(0~R5bSc0|YNUTU#TZJESh->R*-FD4v!P$G
zP?&eltC1+SwHSN04AC#%`o=n7wL?1_*dl9)m1X6q4ay&35v)F|%feS$&smeK$1VFF
z2)E-?Xy3(K*A^<$LYk~ERMt9GW;l?SDt=rgM|SV7vRA_m@&0IC<eXmYm)Bp4lHR-2
zQo2ylmZy~MS6}*ebyfYzsNbMk8A0Cqm9>~KMCDGqa=Tl+YPZX`>g4@$?@ObktV`?P
z=e2fNeW^KlZOL<{SZbM(Kx#BwC`T{UgI)?;7rM}#r_YI#C?>Fp(l{d06 at aArR7G*c
z?kbyFM?@&AA+8f3#CWZ!{6FH}1U`x)Z5XfWyL+ylE0f7JlVfI*a3mxoArMF#Alwj;
zTM6L`f&!5cu7CkiLgYRIhzN*?fQX0 at 6E=dbQLcEcpvwyDg)94RMApS!g-r8RRnJT&
zh`#Up|9`*VN65^irn<WNsi&U%dCC#KzRWx7amrGm{%w!CSFM1nVeux&&natNtzK8Z
zhgN8L_`pTDalgOn{!#F0I1A2(PxmkUY+{M}f%>ufC-nnQ at Y&fO1hyR&n@~%=%z)(*
zhaQ~mCc+?STZ!b5cNKj|KUPE_i_~6orsj}1dye|+xpV#m^!)yv)YMxYFq8vh!_CBY
z(D at DU3WbLw1}&L*R)}^@><v&cq_dhaYdyQ0<?!feR5ac#B!R*^Th&rBjt&$kRviWS
zTJ|Vdu4e@<H!#I^V_qe^0SPD=hInj)Vkk0{7}gth8_3u)7tjUIo_qhBA^9t3qZ at 5j
zf4q5U>mNffnMrH}KPbt98A&R<nM17J9Hf{90unlC at QTPGp@I|eBy<{<5H&6j+n3rL
z0YM^&MVDg&jfvnU8wD9k6e6f(Hd)A_ve~XeKdO-JEsUb3Q}d|>><VfXyI$BrJtKTa
z*%6IoMJ}3l at +_jrd?cOBcHmO^Y$lt{=Cb&7{e85;^ko%J;T8R4x&&zs)A<E#nSM3B
znq9}O=hy3Z(9d$u^2h1d`FH7e`OoN2`D^swnQQESasQ!zW`E&2PIwedcoYE##$y^w
zR&^I-{Lyrj`fq<GUfUXKfxmz2H`IszE+DjTFq~K<E$YdpfiZM<z+gL-<|9d0#B{!h
zUq&xu7!7IAMm$G-);bY^{Nf>P49<nd(1TM-SK7=AJY|NIfZu3JltjdwB(Xr^DOx}P
z7j%dVAr{0+Tny7oLU1?Wy at RPWhC9}y!z|n(p%H6D$I6Tt@}p_qB$z}>vQswRDtRd{
zK5$oZOI`UaX$G}~s^k|*%c#fs$E6Ka1Os)n6-LvEup{jglEtntj~*?I6Q>C?#reV_
zL<iT>weT6*Msz3yIBbJW#L$DC;8IuxJH4w`omZ=x*o&<K{qwC3tg96;;MP|mJj*0>
zXOR-eo3U-pjO2>~^swkrSq}1443o_VXi%$WK20Ou$TsXESmnYbNlDM9y7B#~e*6ro
zlwU^i927Y_jN%I60B#H%%T0qbxJBHP at F}hq?%;OoWHM_+qRnK%p-gRUQg8TYqS at Yd
zF<;&4z<hPvh3G$~WtYP2cC{8ztJ&?GrcBytmm|sa!t8dKL}e0-olhfI<dybaR{fB^
zd>KOZ&SlsgE>u^k at 2T%%yDB?atyjNQ|EAW%{^S7a{`=Gi)LmH1f%}kNj5OmQFJjgb
zUStK`l}N;gFgvoyl0Y$-8|9lZJF;n1OG67{xl?o|yUU($pJ;!@&Jw;9;@=G7+#L`A
z;AVC0jvZ^&Zt%=)Jj2`SIX2Dz;il at 9oA!V6`IWEz2QVzup98Rn1tXMHvrL(w-k>)^
zgF#<liqjL|L?YlA;tbIyB;`7z35eo?D~KtC+(ZDC8zwlRUt+-v1D#cKN3;QuY6rl4
zDBZjgpD1hagFP at jKmIisZ+)m<`2p!FFThC{hy<vu>bf9bABkXzPr-Oq$wKlSEpcY7
z=$MhBQ@}C6PBZpe(N=3%u47n^HX|7+!pKTaCu7dHNiljRmH at g5L)xtI{yYqBORnXv
zhtvE;N*u=1g2h&-rIc|r&)9(-+NcQH!FYfNdMGdL<Gj3A at QUuZY?w_I!b0jHwt}f(
z7g$$utN88QcHT9CnD`u4>{0DN9OG^*hJ}`uUVC3<ulFyV8n}Al<#X^11g$IlHR`6?
z+D%kr#D>SzhhWv#$^IJl;-`OJdx9F~zh1p!#glkXVjJ~dw7x#@n38AEQ$`&X=ZX_V
zikB#tE3QD&#km+e1or1_TOw=COfA^rLBd&boTPI_^B^JGY3#&1Z3)Tp<tDV?SFxs|
z at uQmoXXkq%5*6-S!_G7$98EaxN=Zu at mO^W?95E2M?qSSKgF&ka)4#lV;tQ`W*uVJe
z&(tgGcQb!jR at pN5<;LnAm0zEOj-O`yh28gVPWH0-Q>M9`9WEWe^ksV5M|}%dJvMuZ
zE3(sDFTHmar>@_*h4vMWRp7xu#mH&ITtVWG!V2<*tF2ebKFUakgN{nrt|Sn<k^qFD
zUC9bW7myJNaq+UKh-Kn#QJg>ryd50#ga7(@|8*oF-MWaaN)Q}FG$jSy&kPhLLZHk#
zz}6bqh+w%zh>^M>j(VS^jja>6mquVR0#YVYU|rVr*4<VbvlUHsLxfD*DaXzqdFPKu
z&Z}Rbjqt7d1tPu`H$M5~2EDrVLG`lwDNH2?0)})V4!oiG7|iEsGev8h9!Ga0P6R;#
z&A?XxR(t at 9B*LKHgNX2N at R=e3<M?Dir_%kHe(ZR9DZPT`Ilxl_gXyu2iejSJRN#eP
zDuqd5J)B$U1~OqLmB-|<Ib46x7xtwFFay|r+&D0rE2U;IGuXvoK2nPoF^kv=Zkezh
zY~xbU9ze>Fi1Z<9p#Qy3;3fE%Klx81+U;QeehcTe^#Oq2k9jMsR0gn79E<oV6D5gs
zl%$iWD2O8{ILva<erE$L7gtC%1E4REkch(}KBN=$I!P3?SP>l$4Dy9Qq)1Cf#=V(s
z=sl$R0m6HK<S34%BqUc!7AcucLR_~O)r;*arAvdUA#8!9NaLuP)Whs_sYI%zs;DJ6
zB}>{$)v~cX5Gf=9FdVL-j5s5MaE}*($VieN7^7%AV;7uy+305CSvTkA-9n<6Bzbgh
zquZEAb*HnKOg3G}7ISs^`gCI<D1-wkA~UfCh~X9pilB&nq#=66s2Immh{x-TjHT3c
zdJ;34E#XS|5 at D)1Rhp_>fYzasT1YQo=CO;oMf?JxOjxL|(pMQ*Qq}Y-riOh|d`h?8
zxQ*Fue8u<x=CF8)@G2#WFtJZFBGb9w;FtH+8Wqv*KdNZOEX;NMi{u0O)(y?)8IsFO
z70$qLK++ at ByNq<4x at DkBq9&l7NhDCb4(WrA78H$DY(z{I&1iLrtcn&AZ7W`G3H?`W
z=qnxwBEth#WH?AkGzU%S-?+du at g(8$ORyYPTvFW>xTHR)j{6H`4}=?Kw*E|2`k$m@
zG0kX2G~+wMi?=Ar0qGc0EPkUYv_2S-gaRzga1_rdETSg7NT`YB_qPy`FuLTil#R-w
z(y4T`a)p#aDXbz4r-rk`g=y3i)MiSKfKjwd^1>842X><s3F)l#Lb^=aEn!CpO`wkG
z4|56bg3ny?-#Cw+Vh2^)`XkZ;Pir#lg9y$pB7<#EqKW(|U}JlMfG8kc%OaG61q|RM
zY+b{4C5gB_IL#e*)f`fH+gsli1>rd#$)_OkQWMGg3nEMF1fYwcqXb!(rpuypg?wE<
zdY~{&H;Nu7l+rVVIl2Y(LZM2xTNe>9%45eIj4x+uTZ`z^w|mk at Tc@)Zcif(HXa}<~
z<l`U9*%00Cp_rJ1+%f7PconIxbZ;PpEP_NY3J)Y86t%TEgZPqf5<@7q<HjF_2X5R@
z(Rk~BX<e^H9ESUU5zRm?Q8a=N{BQifNO*yVhyxh=f4R+gtkWbu0M9jDk?Di*7>nl$
zdNW)g9L}VLUExRv5^+Vs;m8CbQiYLHm_^M|$NumGXZ!iD>p5mUw$suF*v|<Kk5nW?
zs=;!eh6v{`H<MX4BOD7LHQh+L&Z_;@{%0w);QmkGYPEvugz>mVjb&`=Vf2iq*TF%Y
zqb6fp0+Jdb0zYHB{b%*?`t=&V9Aa)zHC!p`+eHy!9e9nQ`#?s%9Ei#YSRakV+{h4f
zBZGc4b0eMwoCBktR!?xH>Qit&ddx~BZ**cR5l!@fM#blJ=^UaF9CUCEMzedR>qJaL
zV!e5dLk}Euq(KyPE?Thl^&+4&UqJL%!#^ZVw%)|iKiJ-D#)6kJJ3Tf%F5Q*xPLEGd
z$oDC+N}S?S+)BKXP!wAfSL7;k7sVGP6#2 at 0PsUcqRlBO))$vazZ1C;z-SEW)FAZK4
zyr3km#8u)hi7$&QbCtQv;+MrOb1ic(i;oQVk at bW*XrV#|)cAHLW$NS?hnLTJx}m;4
zzj4*!^ZwhAdU0FH at sZO`j{nyUDzmh5a`~mYl)?Vxhe{{Cz4y(xELE#JcRu9v;RAEQ
z2?VQs2!C`)UhSqh=?1+?Y>2e4G1W(Ja{`N{U!<NBq6&#jnsJlZ7Or9s)O**{kC((P
zi`x at Nqj?7XE at -NdIPs8RjppjZJAnT7#Z8-D#J~P^-CwP226yf>SH9Z4p at B*}|J`@z
z(JwV(>Lj&M{Tcl<PMUfES2x44bo6&<4V at rgi3Tg-D#p0duu5t$GYyV<Y`C)+K!01`
zD7p1&&~PVXQ~XcYv04%>M=y)s5WOdwg<(QpX25`#5HR4;-wl1X=(YFWd#&i%p+jDn
z;73wSC&-Q3%VZty(BYf+-~XmVheJt8=z)yT0=p*?T?x&L8INWtYw(I{07hE_E37fr
z!)-|11_IU3Y|-_NC0i^bBLuIecJRVx9<rPi(M%%3?d0^{`ugs#E;)Y(+&RDGRsU%O
zxdR6f^yuSM at h>e0rcQ!=pn!h*Oj7Lu00!n&h2Uia(V$F8Lh`@3Qdq^>4??y<5C0I^
zV5!%yiHWvTf?WWED2u6Y44Gn6AaL+zi{`Ywsrlbh@?*<l_r!h_dn1<32l+6c%D3l7
zvmN;~Ax-Qk%>i at Z9BPhzPP91TQ4HdEB1E^DM-d9}1nfLh)p|_-{u?t-PoDD8!|F}-
zG)!sz8uInj3#)cC7^&j%Cr@|ndL*?Y>;@%hg}v1)P21{@;KFMl4FUXT1Zyi8r^K)_
z)C&hWSPixrxkiby at _-jv!C=x2wqZIaVWO<lh_aD<CSk at +t$9sN7A at 2`1N+x9EJV;%
z>_zrHcB~ShNyb7=s7}nv#M_Jd`RJ4(Firiq;povLZ*sP$iyoS?zBP^hc>T~nyo6z`
zj%LOqSnEJClI#<m`dHDj(i+iVq8q%4^}a^2!SrTStk($yeLv1(araFjep?M4nyzXH
zp<W~&7lak5%To8G-nEMyGS#M=^n?Lav1qOndhZLhTV8l!OYIBws(NeE;o-w~jd;B-
z_t=sTT3bI at axAx=>Urk!<uj)*U;c;swfgtixYs(SzIp0_DU*?iguUF|Cr`lz?Qoqg
zW-5ViSG4m*KpP=fZ8X>Gw at DDm8bdK{EF@|_+4y<b^^9Y_(vOwci5)u8tWDXBgSH7R
zVy4zFSyFqrp`qZlinrgR_W2*AcJ1DEa-YANv-x*ToB9LZLvN#-FGBalzQhhlGdjt<
z3K}UE3JfR=`BbmAVgrL5iq~d|t&6x=->yghn3CIjINRURcy~TmN0ae%zy$gzF*=F|
z#*=!!ntc;A>R*)wndOEVpr8kZG8z49uBFX)P8I>($gG%)%q8YBvvwm}(4MK?@cGvZ
zyUZ9&?z-mFw{}i?noB0<w-OlcME8~ur%Cy3yJjQU7Bp-Mps>AR^XhLJHf7 at 7naEI*
z5JCB<6t;sfnnDt^P);piAE#>Ab;4$9E4xj2p0Z$TCZ(e#KAHA0*p}IWSM(3jCHflr
zNhCq9<<|2%=xzKV`bG9Q|1SS2{~!7W{U7EA6NRmm*hq;bRkWrj8Ys^{{70yVZ}?9)
zaJJSN at EiY4|6wZ8e+4~n+u9|(0k%>2X+kk>ia}<B at sl@LPFpavSe)&bmH at 2yShQ~v
zz<9;WS;R;a;9_~ZzB<-T*GD%xWgeJKg1{A-1yfN>Bw{;>#1zun+M;<|^YX6VBnC;0
zgo-sisVJ!|X+zQ;^m8idi=;bABEm||%^HrIZAfa at kTj+5TaUkTvSDt;`uz=a7p&di
z(2#$0(c+irnkDmp`WmC`b2~B0QoHs(bLx42HB)kA`s5`bwBA$EGgv`(`#sZm?>%!h
zxM%80>>t{xyLXNKzu7hD)_Bus^u2=690#H~R<6MU8uazpUT855r!Drrcg6WBiTTb-
zP{~#CRYH|mB~|Gv^;L!{W0k2&t}<6z_Bd}i&F!Ob+Jys_Z#n!@?dHRWH{XC3_4<u}
zsy{$8{l#}@&wh99%;~@HRL`g_>i3A4=OUVI!`1n)EP?3aJ~T(n8+$3yLEczzTm#>v
z8)Fe)>_<3cm^2|@y&7bXim36&FXI?E!4m>bK$K`FVw5*Dv`G?Fx1fA+z<-334u#1Q
z at E<`2sqyX*-6r!3$~yI?HPLT68)J#2(+|l!Vca`7zxVE%->)3o0Y;7;+leqO$g`>P
zHcsBXzCI-J_>Y9K at u`P?`F9Yv=z(Z{W+cnoI33yzI=b3eFE;WLhg82p3uYsPHX^=#
zp&2vkx+3dtE5<5K#%V(-2R+a=pySRL5u{E$Y3&?C*ICTxPx_A`geslFYBkvAAQ|g4
zx}Ohx7qH9SA27?^9~UyqA=#^jv8}Y%L}J;?Q{QHn8xbuSdBK*@HyO|CLOZ)0;%`4;
zVa(FrE*CV*0Usu8vtpzeU5vgn5-2+AI_i6fJ)|DG9(tV{xM32NEG6qwt!cJ2dul{-
zT(T?0of4nqTPdy7t<<kHXlE8soW$v9J#C<kw278!Cmlsc(=kk}=u1n<Pnnofm9i{l
zL&~0%8!3 at U`+M|m10YUxxZ41T;}huBLl2CvshPYbzv+el{CWI4kCeVQ>G3twUQ%A#
z{^bXybxi(|<m8bfl>za_)Te899#2d>nUyte_ at E+>DXI4HU55klW;qDyeq?tcT7e`*
zBP*EbgTM?Mg=$HMpp15cY%yY5L4=fyfZD4CE+QWLipFEHWMYfxf#no$7M4)VZ~?4T
zpBz;F=9?GyR#&sT)IYBG at 2MHOWA~q^lJ&SqCcgI(L@&lNC3n-QH4<#pV;VIS5i3Hc
zZfY2naW|c^n!`+h0o~&WCQ~oh*Y|$4;_Wl=1hwBkY4`4v`>4v>dk&XQxe>6jAUU)I
z>5jJ*-`(~L4sh6h!D0KwDQp^~Aj<$AM+Zw`I<;*ij at 1q6)c=if5Gw2XQ!^=S+geF2
zqc&3eC;{I{q(x!}kD{X(FTe(k6vi!Nfh^da?#`qO*j_b&9>5f`{W(P#4MxLp^f;zS
zC<Uc(20eqB&OXGI2o+!+tfVWM3U)E~BzO|m&^3sguH?3Yt#BK)gWk?;XSZ<&*cZ8@
z!dt=@!X2Sk&^`qdd%gpUVevcagSVKH){*q#+k42`j7A{HV(<yI|4;_7qcj`hC`qJ8
zVH at J8|B(&x)IDs77>a|AnsIE7B^0Hj(*TJf3$-LHLm-SN2;cv;=@BY-SSo^wU=yS)
zX#h2VEtC}L0qOyElvE_mre?FH(jv4Pi`Xi*ntGbr&Tf$!sYdn#>NNc!8_QB6%`rMw
z5_BSZ)7vR09l=Dg(L%In)7kadW06St=y=A%CU6P7NAQVBQoJrvpG#*m*+MS1HB$ZQ
zLPlW<H2<v7N9-f@(P29yUdPc?5i^_}!HwXHg!{#j(kR^&FcnUtX42D`ne0q%CO=!8
zq?@jvW2^uba1phXUdSv(>s!Sw=BxOH!XmLstd!>Kmg=jq$Jn?HY=c{<&Gb&@85Vm=
zo)(m}t at _=@{a`=bNA06uVqRhoatHaBgnjx~jIUF#(r+?<VC%(G#wO|=x|uo0E+RM)
z4e@`NsDp{4>;LxcrN4b!uYP{%pFdtg*s+zKiGOeJp|`fqL^#p|?W08qM|7~aQpjQ#
zCS#@<9>1{+q#$jk(6ZwiP?A}cAb!(H2xUYwLYM-HXCNb>Jw^pSp)H{RU_hV04<d*u
z6vk!N3~#|**JgxkGCS^ay5Efwzutx0C5Dlr7`x<^dNN(4QOp>AtW+w^hl`o{{5)wb
z^SJahvzyt*Z<01h`{6<673Ky0d1;RnBhd_t_JA&mwzGCIN|!==S&x{ia~rzDTsnvC
z%3~XIx?uoa$o3Tn>J-B`yj!Vp^cZ$DH;x}Ij26e~iVSlM3t^Sv8MuXi3GU;M8a_09
zVYp*R!y!&oBC%MZZOKekABKl6sVCGEm*8va+)FS8rZ6S`FZ^%AdbK|_kcv<rh3g3|
zL-GQqWhS^<>CFq2Xa*(>W&lh^vk90CX1xL6H=_Y<T)i1>+X915l!1<|rr$K`8gWjj
zB%<9am>82z4laN|z^)4eyG{$nCr}UgW6bTGeRu6f_IpPLhWQN+umUI2h6u at FkPV53
zEW-e4m^9QdUK}sYl&THO44VxW37|=!ou)JDOb%$LWJYEkl1*pRM;W6`K9GdCt($SP
zDMGU7k&<*tdY>WHm}+vHa}c%6qSBdkwwsi#%hq=@<Qj8L>E`=@0u at T36-Ei{zyh(a
z)Xy-$IKZTsM}pySI5mncVv5lEj6&-(MjV57;VAt$<2X~1xfGUC4 at onOGfXAsN@1aK
zp{WKuB|fQpQeR`JG1i!#7Hf62`W?m{rhU47`j?C^nU0!2G=E{fW1fcAk~Kn2HOq&@
z2S9Bex at F1cM+T3~j8}VT1oxpci+A*2Ig%OLx`lp3<A-CBZ1p)>OA$P)L<w5#H`*=*
z!a>kTA7lj at mn_pv(mE~FF}NE7IbCFzG-WjXrg^#m(?l=Tj~c+UI>Driq@#rnf?JnO
z=L+dM46nWfUcH4e^f+Ont^}4)rF02X!cG>dbjx(F=%U*hs2`<g`Ug{WtxKso|1_rL
zK<nq556~Wxo~|Ba97qRC0t=L`PLo~7dBiB$9;;*B at ifpK6v09GmS{g{ebu8EB{nI-
z31TJIO4)$h*;_KP9*l^@h^-~z2E-37s5Lhb2in at wgcS)S5?FFW5wE%F at EBsH6Id*b
z^n}3#5cDa#N5GOo;`U;(e9Sm{{c`Y;bv=8ofB4`pz51*j{lM%w<43POxnawdAGXa~
zUtW9T%I5WB*Z%zMI%o8{oj<P~i=T~AW8o1l7FXVS1A<pc#-2>_&vBwS4h1=Kh>QK1
zR0(bmi)tm?<%y2an}lec-DzT2Hw~Nzqrt(%x1vo4&98c5oKbcYL}FKzJ<-B|D3`rA
z+Nz8vBz`d3aue$jqd_JEfhGWyd%{M`4AtNhgiQb-Ih|n$LJ=4sZ4l~!=3TgE)c84b
z#*bQ4nE%U*kF4v}YuzI+{*r%k^!lH7u8VfAd-msbW7coJa-+6<{k&~IT-ie6r{O2;
z=X4hk3lbF>%F%jYWp+keck1JSDNe at Wbn=DP3oY_n+DZ{qr_YOjLdIf81pYxYWIvzr
z+N9Z=bS!Urrg-e($@s6$5-S*=DIR^0?s9BcpB at ZFv%QAge{5LaJo0fcxGTqhGRg6$
zmNNp+0GfqBi)Gi6C-8ESg#R~jUKr+6BrOu#>|w|&q4`eU#NTK=0#^M{K>&ya-bAxC
z(@KH!=g-^s+L+JOTOFwNaGLrIp2}hMG?U0~N82+V3|Bf>BW%E=NAl20VU<o^X<DUk
zutn$^VqG!y5o;1+>_CjO>P$RiaVE%@TQ1<7{D7W^1#h`YGa*|7>z(e=a>udS;G=s%
zY~SS3bi7za&M{|N;~=$v^S*tQJaAPXSXk5lzM3JW|HPSd|15<AYF5x=Enn9+d`&-h
zI3<;C-NUB(4#g$%>Q(5rAvpjdHl7iI!!{Xmt{Pa5c>ZMe28aeFN<1GSz?Hxv9kdC0
zW)Iln+$ih!7=c05 at iDmeK#Y7juelkarxr$;fkPoK<Xz7o@#*PA)I)%cA%KlRKN?``
zaP$WSf<|%8 at QLY7CNX}>SovXw4qnxB%RE at EE}}ZMx>`=3{`6YUZEW4~l$2*Ke70Uq
zJ9G$sy#6|5|K-y3>S8d0X=IL(OqLbO09uT;Go9jqFNTVb)mu7Y|ESdjV>>li|6ywJ
zHN^fSK0QtkEKF*WEj`8_of>P6i4^H1odjtrDVZwg=A|ablt-q^m#?;<$08(%?6lxU
zBy92m`4S_0=zH|!Bn36c!E3qy4xS_*dwsl5OFqu=<v56bYz?y~(3Ky~{lJstP5yZ9
zhdt)??7pz)hmU^f at p!!-mVcNtPsyuz at R_+~yPkdY(Vg^HAD4g7V?nR{@?6v<+3WFq
zSpGq;`Q4Ry-99M)(C0}~mz3?;Q8styvv at s6p!IwQ?UhLIo>C}N<_NQiGMXarn`{yc
zf{`*9gaQ*1gTW^b&Z7IoCd!88lwLH_Y=nunTVxuTORZoUj4_l->@=Qs$~c>?1qUk!
zp4y>VwsAB5HQ!rkAjwMvA)EvuoaiSIuAjWpw86CBw8!+iiS;4I?=z;z$>wBBjxkrR
z)~~YcH at sjxBp);zad=Q5&o;}4UNi?h!X4fo&#YCaoK;KUo{?%D6x4T4!b-U4l=?^X
z`Sp=-H$1K8!qb(R&s0(a{e7rL|MALaG70V=dcPMQVYdhKO5jg``H2+}+2<$$VR%a@
zuLRS6t49A3{%!Y5)V~>kUo{+j at J>&9FNq=R1vV;qY3ZpPaKxr(GX~#NUc*!R)c3sa
zCd%*W-_6^Yn4gBeOJ}UHoy2U~IwrT%7`He^pAePnO`ykQ<|D#z6&Iq=ay_&pe-dEU
zmL5qW*$K(lB)YaT4VsrSpHRGfkRPOYS_ul0@?Z_xAP^<iu=H1!h=3s?lrIk}^Lwqn
zmEUW9^Zo0)O?u>mDB~w99-PoCxB2A(JI0RL(!KQ2E6z`sO?aS3k2CuRJWU_yJihbb
zC#yR>(0R}*YV$syuc+Vna+9!N$F%WlvbxSv)*XnAMXe(TmsT1VK3)32`Ys*I`aZrp
z7Q^u~wvbNYWU?NcaMaQV40vCFQvo}bK?~BVv0 at w_0klUqkO#gyb}3xdBt<J6S~r4y
z0`4Bp37q#FLos6!se~=z%3v8)#+Gry1ej at 0#K|>O@%i)WqVwlD`P{j4NVJ2|NT>dm
zeIGaw4H^J?E8d>xdv$NV?_5%s^XXli`<;tC3(h2+)#ps=(=)v|Rpj~<$BCR}pnSQR
zq`M%psb%x{uYY=7#xLnGgK=mX_3aZ<9Eg`{%c=Riv^<v1(D7?OV<6jw0ox%zYt|!=
z%$lYCvVFVyi}o4v+gE&DTwGF8T>SNlC%!43FroOt;%{Coc)XzY#h0E at 78mrcDg5*8
z+kYOgihX}Jy7bnL?dt7Wvu2~uklnrma_IB);^N|OA7B1Waq+~7#S^|>@#HrXii>|*
z9`AnT+1*E6301K%H$VFL#~3Z=upC~bdyqV+IFJG+Dw)Z=hjCdVW$GK?x*~(GJXcuB
z`9<Vk?N_8PV>YIONP|mG;3$}E<{oAqiA;Fdkcu`(GdA9mr0GD_k(*bstGwy at _n&I%
zdqiL)iC{3yYu%%LA{5)^+g?o_^%qe`YCCS2ux$IO#^V(gy;k)Zu(9tOuc<B1JvMp7
zLyuEMl~lc|l;!uSezf{2=79$i5~^Zij^5}!Oc}CaZY-(QvzGBNiAWAGfR%^`UBi~A
zYntWhnr3;rhEPPhrqk=hYl5i9Z<1)>4Z<~^Hx!7Jj`@xU`;DTWrFa_5VI_W!ezs9=
zZOyxYEpmZJy(?0<ErssxzY)o`i#RLIs=YBDTv<l#kf^;eiKo<?>djMd?+Caz^ik7Q
zE<qQP^NNvl?ocFVCj~g#0Rbmp*6J`d;n)&Ph%d3!f!q7(Vx+m&g8x;m0;b)5=>`TP
zi6gsjLGS#Gv;EW0<__$APM>=YoQ*uAKbzFQZ)Q5vr64aqH+w*rl0n%ez4MAKV%(r&
zPK=wFIs`Fkl0(*n)*c%!ExCj}<Gu8~jQ7>2I3|~*r`~hh_<m!XSrg6S)oKutbiqVl
zATpH!_t-g4{KhU at T3I=J%-GVSM`n~n_U>GBczKTj*#*zArT5x8(|>EDsgu=~UV{eb
zPhYTTbeUNgGT at 7kOET4+bRPuwi|k~&1B+`Cr at cY_0In0j2a8JlZuAOXm5bD9{~`9@
zTQolQ4qZX_Bz!CixD_+^j=c%Iqu&@Uj<-BOkB^KdDSIR?2A2|PU)0ADWF%;}QJ`q{
z?4qLCbA~DNJ9O^cu(G<Yo}DwNXxOY-!-kbD at 6x%`+=3_GsH<LiLc4EU%?%UitVFUO
z@$^pckqGrWjRsPCLoe7RPA2k4FzXe4MjzW1;K1 at gSP>5YCnO7$QI{T4m%<f?;ELP(
zwfvxBYA01ka)k#fNnk05?y!{Om;#0Z#w#Xph5C=~ipjFk35>#HNRvU5&t)X(wvb5g
zn>Y$sOB4>sI*tsU2sxzYLJqhq;}UXE4-fbcCFH}g4~^=&xc`tRb2lDQU++d6=gxL@
zgI$UXh9 at Rg#>71F$ZGX!I+@>OYAy9Xsk6{u@!>iPS47tpxAltMa7Fx?`%laj_s at wN
zQzERu=6uX6KZYwTq at XD_VOd3s+D2rtrB#z60 at W0L?Q!^Z{RE8bl>WhKCtuB7TG(|#
z?^z4yJTkhtc+%8~$)&>wEX&z&a6D6DnKfd`O1o`QbkwlIfrB5(&+FdP;wU#;=1=Kc
zf^_0?<~lth7*9oo;;AnDPvWUajgi%-)e}#1rRu7HFF_s6e9M#oHyEOLtWFml!O^0g
zh87c79TS0F3gFFnr)a@$1sC=!#B2V~CM~oC7o}>sjE!5w!EoG_P?GRr0)3Z at A)IXn
zgm&|h`lqV5)Yd0 at M0ZTefW*EdOc@&|m#$A$M{|<D|Hdr`4p3`b_vYp5^jjPeLyLwD
z8#>hg83@#1=)vS7+1mg-ibbH9x509bG6H at Ai<C;8QND1Y^)g8+ZX(vUbRyc~9})vj
zErM^YJ-P0)e?W%4_)970`sFKnsQF6$$!ny}3)LSUp$mzP0+Cx>M<xJWOlY-2FLa?w
z>=TJ<1v#7B3S5d&<RrttIP_We(V`90b4(@DF0>*@rN{poJ$%&2oa}}3JCEs*Ffgr0
zUWZP-W~7gMK(Ak6Hl=rt8`Bfbr3USzciAs+)p#Y62UkS;3PW8H|HE$72}`&M^b)uP
z=;X^cNw_&$eS(h}XqIL^D+iafh~L@##oub)_kTu9)RdHYK7WVVSXL-Ovcgm%E0~Zz
z+F5ZT8R4r4Bp1k6n2j;OYJkp%`A4h|8)67W3bMx*LYD~Z4=W_*2%}Sk*~77~eel6+
zxSGI>$EqHhv2+Py at J#fTQ>Q+^eDc(l^5<4Pxo6LlHG4>`$Xcd<8(-I7Gw4N0)LoMh
z at 4m(hydE)hLEzbI981v at bB#v4{u+V{iv$21X|87_n(%eK09hc+k$5<V24#q^=d~jG
zWw{4mzc)V*OE$;sT!bF&?QM8b?SMG?C-7MC6O*VGk5G$G;lpW8wS6R~b=BPYhOc68
z$Ub2;v)VsZ_ToyHGA|yavqInJqwlqLpVlt(U>@#`zMuT7>nqx>*J^jrhY{Z6Q^-~-
zY3?YNVmK!trVtRnB2iy!U6Z)n!zDN)L>7Xm1QEo*gqV1*NsNi`V4DcZ)D2odEFpL9
z`|{1}7A?&kn{L`%Oo)hh2odq1pMX-So5##!=W+A+`7tb(*|ntiyG3K19FOGyYhqR=
zym>Nb{P^yfD`pL?D=B_!di|FJ#*Iz)3Ov_z?i|x+=d{PijJ;<nd^R+y2reY=fPdKH
z#iy^yyh&mjVZ}Y#g?8<;w01LZ(&2U>*Rck(#CK3wlL45i30=sVXnl)AeMQpORwvmK
zS=3ilY{L at WwzNd1UH_q>{(P{%#X$O}Tk;LSVlt5aXom&nLe6xH2j`WMdb2?v9TROd
z$3(}W-&k`@OtirqZ;IEOje3(Q-fcF;yYSxy`e>6uq~ErSakU0<ojWEjHYU>TiZ at s|
zW2Byo2BRZmOx$QoOnd^88<89<U%*0|rqu?`nQ3`{LxTGS5((8l>paZa6P|hCPQ>1O
zca*+d|BN2z{zVrhmKtUlD-4y!MKOzF=ey^}FH6*8gF(2J1;&T`>sX-EGS2Cd<MNd;
zWApRJZC7tl@#@%~y>^$+eJ($bvS}IU-1z))WA4izJ68Rd-$@TmDIZY2=efCs^HXlE
z){@e36;r_XM>vm9=Brk6&1R#?D4R_tqrq%4>hWI%Y%Q&;HN#rD7A!aOwe-sd(JY$`
zde$fbM&PIzi)6GRrjSQ+o;3?oT3!pb^Ai4jcQU>fQ@;$m=oRa9^8$H+d8PhId8>JY
zeUJT=UBn at g=1`_Iod_L>!SGrB=s>n~PydZQ?^BPiR*%E;p~PwYJnY3?tv6_y;8D3+
zfpgap9(f53SPVOnc9OeIa5_1F>$?a}-`y^>YoDdH6I at 5_fLCZm4+#o}`V0;A;YlA+
zVHLe1<Bfp&^gs;l1R1}hc3(P;jK3Exf-9_D(Aw|d({D at 2eLHIR#qB_-gPa8T4qbxh
z8B$}(eYHM(pbtQVn)D&n6##pJ<g+@#bj2-;2XzLtj+R=Zj_0A%%9sohP9{S#8)5{o
zD2fnsY at pWy2j0sd<uEhSm1K8xRrJwldbhY++O6BI-)-D&+AZ%kpAt_=r*x<Er;Mje
zr{q&+c>>Nw59HQkyQq~cV<7AP6SxPy3b(2=)FQRy?Ai0MNIm+mVER3KF_>jfHEw|4
zsIeRT{}oKY55k$vB($VUfR?C)HUMh^Lui9FKS8#-5`wgZ<cSj4W at s>HeFWxrw+rps
zXKC#i=C~cvHB(fa9n&>elpII38 at o8vS0sHS>*)A&5%o2s$LFWJ<I~dRcvm{t?wX;Y
zYj|>vt&Vm at iG&uqhDFIPSCmHEAQFx8*`3V0h_*ec43TzfKI)x_V>3I6JDc5!UE4b~
zpY~4d)5fQvOFM~AyFkL_F(?QGmez?l-hpQs8VYF3V|R95bB1OKCLh|EcesDL{X4F6
z!;8=-!W<E at JJlR`c7d9uX3d9Z)Nb?Pd3c@~jQ-A91kbBki{M#!evz65&m$ULdglcD
zE$09tqA?x7E+sG46=mqq(JCR~*^uIO+YC&qH!g~)^%`oUHhR}|?9egQ=8)ZSiKI(x
zip;xsXJV%8bjTe^-YPMmgqf~`p?mUMngfR@(gClVk~#*Aw~uj-il1qp7GG(fA5#%8
z7Fx%F(bkz at s&#72%;Y7Y+&VvIak35}uL$Ev<Q!43aX=r^x_P8nlc;w`j)O-EH>sKA
z<9*C=e`c at eCSHcnx2Pw2SN%TU%Avz>_Uq$U#_TOUG_(k36fe8-z~1T1*w$l8Z=3~N
zR$s65#%Zx-jeT~NLSYZigB>#H)VTMitN$h$#)Af(8jJ9S<RlV2?G~U_*9o59-7d6i
zpQW`ET6I0ZYa;>1uQZ!G(q)q)gZo44KQz>zC;emUpwou&(Ol%5Xj7cSY;I?oO?J9$
zf_9yjXGQLx7r1{px~?r3S`X}?rxI<f6%Do2zrk{y-6YZsv^cqZgM^C{M35N9P(E}k
zNr)Cr4woa}G0~xA=4XcTpsm3q+Oy}>U?TK6b?uI)*CC4W^H-NIf2|&2eEyF&tz4<)
zAmO}>!<-GIfgMVECttjt;S6rTq(-cCL^W7b8|ZD;HJ$aMA=Vx56NMz7z{LtlazrOV
z28FmxSZlNV-t`MwoiI&|OS`IG$5H19t8nzJVq#64i8uL7$xrE at GVl^7 at i>Y>GDt3i
zTZ-2wFkYv@>2kWeySv8^aSd?~h#!zJ(>2rm0`~&H-;MKAtXeT2BH8^;KwVBSIPt^}
zfBEQhdfS2S_vP*{`RWs8)qtWk_sv__W7>lyV_w`Qta$YCRexX}J at fgsFNN}wwBf0q
znd_z=e#05LFD`cC1NkF+<@Bh2pz3h!^s?0}Zg1B37RmMDO3^y at LF><f-Xj3eDSW;+
z&Fk{g8sECR&;0+s548&Q5$bfw9c_pUg}%=TeZLERZ>zI)&eLJ6bazh6lRLZe5LSlz
z%AxzsM19?Lwob{oue~aHPI6JFiOEW*Vae&8@{>U)Q?k@{9nXdCu at hbAQH<V>wvJvM
zpV7_MEdz}pH=+MsfFkB+<)@jlOli!7bj`ktuIJ}4m58Tif?kkTdiy$gdKwL&>p at S%
zO8Y7cIB4u{X^3%lUfJnHD&1iG1K&lecRAO1^1J4EITP^Y#PD8|9SDY=UcuBUM at Z<K
zPqL!03A8ET>JDm5O<1jOy4spYOurc<bwtaRA_*kR(>tVhOz)K5IXx{sUFo27R5~f0
zl{6*2s6$c5qE1Dfi_(hHpX~5t`Z8sMvPU_pyrq1ke2IQ;D6#n<AMLVyW4?(EjuE^*
zc<mf8hnr)VW1M3u=~&XKq;pAHS;w+YWu42?mUUd#X<6rGX|W_RMax0a3Jb=<uq>6J
zk>S_rRCJqRnmZ0(sCl}<*k|B{C%%S4>oI-v8xNhCI`yNOFaA7az at OK@`KRz?t92KD
z&=RqzEjWV(rjIXHuiP4c>P%MFk<^Zh7A#!&hXZZdS0!p>ATx{L at uO-5&UZp<U#Q7?
zV7=Ck^Lhwg_9yMV!RmXq&%al at nWt9ac7)0HxP<7S%%$~_gMGkE(g(|f?w~w)=QJWh
z`^h-}((ZdFmR!3531oA^+UINScm9gn9}KqR`{MTYvfiDWs81oe at 4vMB2Kt1{dL+&r
z(LEzbhCZd(Q|a}@CB`LHCML$2Dih<9D}Bl6Z?7-e=SlJ;C;Ji-6I at 8)al2gw$v&?q
zA>Qp0660u7BHa)zHrUrhC%&5E^;z`s?#N^h>dVHNIK9O(oU=sYv>dI#Qiu!VtPm}<
zLu0>z*yXcGb_o2E&)@UL at FHCKsaOq|AK~fXN=`^iOiN1fbn<rcr6y;43O!@pW8-mt
zUui;xyCS|K!Rkr$Bze7FpD#H(33W*7>lyDJA3xbWIlc;1!76GoT}k5gtHR>-t1MO4
zDqE#}arEMts at SSHtYIxo*pqrA)rYmLFvk;iFk*8$iR14|LehP#&*RH<cpNNUm at zix
z#fBrBHXg|qADgRQ{o8lyx6pRQ(lvFr`gS~YzJ9d|4vAMU(VNZkpWkWx>t7oeH$v}v
z^~;y<sApjgxN{5Uux#DKQyy&IIA_vigb!K{5vGg7F+Nbc!1fT1RS<kYL`+6>xg6ZH
zeg3`LG5syan4w9nT|(dIgudT}5A>+ByE~f*{dK2xmffz-8vWJ!%E7*1Cg~e4p{Bd?
ziG)gnOJFPeIWvd&J9QvMv4Q`hxc_1(VJ9Q$MHbFw04_OAN=<9k at yPK6=`c|45u2Q;
zFaC}G`EQZxgLD3^T7IJLJA_8;e`hbVlW7ddj8~Ps4jsL&*r;F0j168xLsb2*WJV-0
z#`2cL;VH7k(YK>!Qq5=|?r=|;F%XTUlqJLbPUCE&V at Ab}cF(kzBK)dks at STqoRBJg
zrD3tXGO8-Nir`h1tIAy&UzJdmSd~<T_TDqjTF(LJo=!J9d9kcHDt3JG3{YyFhUCq~
zU>=b-YvO7ncO>nNd^yP+l037s0+J_2N(YaG04+H}i_5?{CRp;MYgA{-^!qj+wmq0S
zz1OybR@>6-Y-s-Hgx$SYPu!H1tzN%T@?8Gv5<1?0G&T9!nPC+>Qd0i$N&nfMw+(rB
z0nR$f?0R6>YeU{!h%-^TW*!)d)}F+ at 6FeHL;a#PMUw609zgIiPyGp|MBch;&ciQ)I
z at Ov;5eIHpzMLDpQ$e=_GbEHS*J3y4l!4cdeF{5O>2etbYgSOn5K;CFCB^u|&;QW|1
zLOpzw-gfWYn3j9zo_Ip(cK^HF82+Sx at 4b^_Li3ijdE at 6q^Ny&CbXc6|Id$ode2d$W
zW^q~Ab~dgqvJX588etDBhizR*&ot5$-es&p52J#5CXs8{f6HF*=s<va_8~nZX$tRM
zb`DiVQv`O}n44rDwF7(r2L{Hp)I|cpiunWT3+4#ag!GV%<&wSBj$xk##uVxjfZ){D
zO;#(|7ubtvtY at jKXb>_MzD})RmNAvM9iAfXeL{MzkLUy5fIi)c=p!T#nXG4FfX~*1
z^`9mCkcK at NR-hT++R5TEhKZB&dZu*&ZP%iEtpfYVy$ZvwEkf6t at U<3lZK%JD`ag4z
z{<E~XAst7L=Z5*UD>h`mxoe(OO<<m+&LF>B#wU*9=h8DRutw|8e$LrY|9)glj<o?I
z6;F)Kk9Eb;!Epn&7lg^1Lj3tA!ed<Hcc7BQ)1Qd&mxKlo5z}Ch*F at B_+jNvm&(J^+
zB(9&+V(p8I{31!Q)sfc}mJRLCyPlDLyu`cAyT?m1qH$PJrk#}7{_V_Y^#m-e-?8I2
z@}uF<rJFY|z14cp9O;maE0f^tbFe3ZZ*rSFgzyu$Zv_}b`)l%08Mw<nhS%H3JV(|$
zIUqBE at HIets6WBq-yespJszk190F^<m8^Y#tv|xowHhA7X40M<loxTnH)&rO-k*#=
zJ!HqzGyCD3yKH^hy(WcZ#2T>W&TX_KL3}LPk*0VM8*U?79l-Mk$#bU$@Z8>p=Qytp
z;klPu^$>pQfq@>9)+2lzbk9_RhekG9+h63`{-}K*!P^}HIaceh?UA<o3P7Rr5irw1
z+kItp-)A1e5Wx4<?4}UciA1pZj4i(Ny at gyG>faT$ze9fs_1YDIJ<=oaj1;*SF4AqQ
z(^DKzYz~y0b5SxEusPiM7Rx+Ze>#HnAB6g+*4ZeI(5XR3jl;+O0od-mMd}838>bjH
z*fv;~*_K%qn_}fAXm$o}HK`Nk0Ns^1j<VE>HnYCgj*CSaC0_4fV%TmLgAK-jNcl2i
z2_)>MIao9Dat1j{3W*`1ZDS6kusd-0_ at lUh<beaYgd}>U{>onb^2;yx-F^kzpPAwN
z_I>%K<|jqC!|dj8)qq|~JkAq~fJRHT!Om4jIP2v=BDmFPwu^$Si;*wmyEZqs<%8n}
z;?`}K*NS6FGws3Z^byQ%Ex&c?(gs+f?)i0=>%aFcUc66j#Hp?bzKC8^3;ALMUy<%i
z;M<W<_c$@q71Sj at L4BrkIcP0+VJ!mn`4{OEBSgdo^&A at Y8K?26JDmxS(#BzEiVcqQ
zBkI$i{fYF6y>lltPI#Z6 at V&IX-)=reAee%E at SI0$d%xX$!uo)tY6a!d_VS&nWY2aa
z?ORd1j<b>WfuwzK5HDdZUlg*9n}}`P`Wgp$Am_<>T|iwvpU+X6{vXKAW=ha=yWaq(
z?#j*9wdH2Bq0DTYL?56_YAO8#o*U>yX%YZ=Muj#rP;SxY|F$}seihFX457M_K7+MB
z&ca|HTvwEu7}y&ctU3`m2xKp5eLh!5V_gyRMGaQ)m%IC*`NZLRp=1w70|~*TGig7e
z#^HQ>+|C>(?L*u0 at X@nN;19oBU$pTz)9`=0zUcq^G<>E+jfUU)e?))B`@aa%`I-D9
z2+jgM8_q{?NYmB`;o-nQ`*=7X!G9QnPu#0CgYkt>ra(5J!tVy_(YG{_rx3iE0KA!J
z2wb)CR;h9Dhz4&u4oHFV+Vj0Y%~Etvj at o_ao$$HP0AGvRa{*=6t`!w_J#c}5PbqXQ
zSVVOJ3)(%$69m^5flons;9AF^qlV#wj+*ZubTo4K_)ub_Ry!5%Wu}6}eB>)}dY#0O
zxIbLjm}a2P2pAT|==ts<SY*ULq9!f3Ln|$C6&rHX>(Wg{CW>qik3)-V;(a-voQJtZ
z>H_Ms*5WNgzG5%>w|_oIz3%_!5Y=Pm>|NU4qc9yIH7JUeC`lB^y|>{*hC~T4i&-d0
zi+O;Z7FS#Iu7+;g67;8!eG}+O{HvZEV4~IklLJ+D%bCSenc+*r4TFfMhSVrTW6{J;
z*DoD>w!U)UyPVCxfBej~t=~{P#?D;Z=4T>!z`RTFpo_L{!`jwO)7 at tw*>HXVk9rK(
zRwo}HJ|9|Jv=1`_`w$Sk=n~q8Q;GcX8MA at 34-fNiO$_<B^vq9iI^v~_NvGNGO>Ujb
zB<q6qdu<M-n*D&tB5R3u0GxI`kwu)q9+XAiM`Je-Tp12WVeN`~EE>c9qB@%O5neh_
zi8pICUuCmgpsSV4xKf&I)ydF|>%N*}fQ`hfARW0mSoigE%iWb<?W7truF_-UwK^a<
z*;!~$UaY6St{*Y{b at lHvyk37?J$v!?3TEjo$EPJFJJY+o%q+dVg3ux)XW$wUF3>}X
zF<1c|Y3HjsxjHhYKBCdi8!$(82oZ(uK$sNC=x-un7bF2Y{=;}uC?f3U;Uy!obFy(F
z4>L75lR)i=apNoAo-zgT)&AOio~Dkq6_LouSg^3oe at A#C^bwwzLEvqmXrA~7DVYw!
zo7hnhZ$x at qIp&Nb2$i-{bU?=n_!==^#9qMASY{wN at K`c%3GK#0{1NGE<sdXxtN;?j
z$9fozCF8LyWUMy35W=(FU=QJqBZwY?%|m*$<}z?1D7)BN+6>W7kHo%xG14MSc8-cM
z14ghr4WzvL1st1~VF^}KC&m<P$7%D^Ywle~pg3$Me=Atq{Pt(+F!ero3cfmhxq1p8
z!~ySH-sZJm0?Xhmxa5%fmHMUnh57}t#pAOe-yybmd=BIjN*7)T1mPSMI_n!EtjTnP
z at P`DCtKMl{)0G1e30*`J5cok|EaLDEmYBX>vD(zC6==#09q!n4wIw5DZYNeAPkz?K
ztg@`#Ss!M7lyxJEC&qI=U&t3(VkGD12y;X>%oxtve{BW_f$9~+sNe~+CGrxr4_m<L
z{>1n_^UUO_AI;qJ<M4hTuOTHt{<-Fpf}z*ee+`9OM*|f at s4d%HJF+V)Sl4Oxtl6`I
zRYK-G@^G1Yr8-zeBuFnt2Iy2R;bU1rx<J<kX%lK41={G*$N)W(3Ek29Kd#2%+8KmT
zMUwVWply6ikFo;vXepvcSdW+(8`LB4y~Yz7G>X`OYN81iJFLW#VR8VgW}hH+Y}?H>
zn_N%oXoSsmbYQMpe<BMpo5}vj#yWN#<F==y$OEQy571ccdZIsh at ZK1GcP~5^()ad~
zSdi?1e?Zfd=BO38h6idNP3%pJ9qsO|^(W808p)2jx(;q*Lc*`_tzD0w-2vM7Lh{-z
zbnm|-n0vwEBD at 200?(I&<klbAUAX-#+&)HY*XrI9nCArUU5;Qb*Fl3wd;tjdLJ;=2
zMuy5gj{1(#>=0BAD8qbey-nj&VRdv(piqhAb+wFMq)lkEi!4-lItKAg$%rG9uQnsr
z+N at R8C4tK6P_Y7YpoXpqmv|~O?=}Z&=(YtdYqfOov3KWj?jEVB>woKz{}grKAxhEs
zd$5*AEa<JcgouNzgNZr_V05FQT9yq)iW3+_^`h<0*upruHIHPD<~4;?^=Qq**-Yuj
zUU3D>dSI;$X91DCP at lIa&UMUcEAVmhq{oYEd<-96T^%U%@%MFqukrbI6b<_m`m`SQ
z3i-c at u7o|`2z$B_8tf7yeS`*!uE-z_)@+$XX96pTjxtu$tAq$|Q0~^o)9iZJ34iED
zbYYgJ3;|u3#yo-vA5+txzzU*2X=8FUWo$pDW;+R=qv;-eLYt#zLkXXw41~yb;|YU;
zK7VQ_xB>f;Sfx0{5|Askan6P8x;vLNksdb19g=MVF$kFF;CWfdyaLx22YAj=!gI!I
z{ncr>zH%^TfqE9)x^n~fNBiR%QxdQ(qjt(i`jcA0{5)b;_z5mS&(dA<#ZjCs_$;Ir
z2%;TG7edc~rLggL_X)%*ka3u~WSl(GM;E3qY4+P$n1&SNQ63~cA}P*6_-kN{p<28H
ziIXVT;;fJ;794}rZEZ*2dXjdMJ0C{hCIt4s*1spQWgUQ%@9IzNG6Z_<`(v8aGhmB6
zNo+t`e at ufWgwbE9NsO$?1ax at G+UfzyAW^aCs-<m^I><IcNfsE68f-?}uDMm){y5A%
zK3LC>>@S|P!|kM=-;twJd|s`V-_yw{(~&IU4%EOjA)U96;$a$Oo4&yvv&L4Rkm5Pm
zG0C?rp>tngiR_o^<~k+|o<v_^Cw#M(jEszCa(r3ZO}x3~pt&A)#VOZ3$??PD8w`kS
zW|`+mO13 at BL_&Xi|Hw_7M&7Tz`qy<IH at 335YT2@?=E||-x;O0D(E$6Zf1uLN&nqvV
zcb>dbBc`Tz*}E4T^7roTl0NkS%V5hV0^^-+2*yQ$b7fNgXXo>z{{K9m$Bgrc at nKi+
zKfilW&lB@^zV$nY^|0v^XLKoi{rNVXvIXrmj@|*n>y$<SwEGlSbOT@#8)W?&rrr{9
z(7Mf%+}Gx?2>oPNgkUZ71$-z?EgCk2*5w}S5O4SVYPrhqS_68h|6yuw_%hMQ?^*%Q
zwjZ{>6}CoLBMh9CBmoD=RP+v=6FBA0tS-hLk#-q_yh(2EqKIs*{$<^AuGU7Z<1Me*
z?K&G0?b0+fLhK1o$*i5Jfc{K`jAPhP4CFq~4;|)T0*Bs)G6C>e*bTn1x=(Nal|H?h
z1O6R<`RkRxFn!=g3_n2NX9pG#2YM+6v&C(-aQzHUi(r!RWH7YwY>XhHfvz{|V;aOY
z=50o;))?AOO|O|uW}`N(yDGdU;-g{1Jy79QUQfV;;nduq7YczbywWS0+{dj^VKv&q
z&udCoqMa+js)$;8W0YZ~ewAD+u8E44txhi80HVm*$1Q=B1M-q?Me_<C21sI%0)KFP
z`9t5Yg!jXh>SFcfC%&Iq`rYFYV3^&($2PH(`}I>NsoT}3)k*#Pe=@NcNvl4X40DSo
zYV+a7^HV_*q6`V~wQkR^&XDrBd8aMfOwN(=$gQmzEpkiSu|qia6e*Z>Ca=r;d#6b`
zA{+=gwGt7(bFfs&PJ>>)zf?P6=Qod-N}`!}CNDm;RjZ at RG^2f!0EQ|_zpkU32&?0^
zCGr-VQ-~u4bra>*n;Fe5vIg3_%IYS`Ny|vR#osHd>j;uu?%wrv`xQR-df)UJgPF&E
zx<{2=y$P4syr=I8(>BgVXj{~8otYK=KRz=njB5SH;aQko-SYsgHcCZ>&O_sY4b4d(
zAu!e$sWWgIWxG~ft*NPtqPL={N=&WgWx7_<&b-3)w`DX7gq~)!#qsH!Ntx&a+=aBu
zK5FCh&my98?KZ}N+i)n_<!`7zP>I#_=35=`wuWzo)grcoc(irQED~iCvp9{k$r_~t
zvLnKslP&waZl2!jf0!Op-+k=3%I0NNRm++y$Bp%$8F at cUx_{)z`_;>csKExfAJ-Vh
zw2hK6WkV|MOia$;R`eREp;*C80WsLFi^*kHSC7}{H3#m8Z5DilU5-!iVPcy_D65w1
z9&xMm2fzCBM-}U8YHs}SR839Rpq*;JD+}SZJ~^XDjYg{D1Ct(8&KFiZnC>a7hIT08
z6RFkjn_p0phOJd^6v98p4tTWr{M_<uCr_75*KveiAQ_SAOKSQf;ncv2F+j&tdMy(#
z1A|_w)h(yES{{L(Y6HC{_mf|yZ)-2=XI#DBAB9iHIz+`Df+r54XRQdF(PKsU)<^L|
z8xWr3k1(Lt=BPEJ*O!@E9U=hH&=wWtG-cYHJdmTcQoo_9$~VKyDqG_<dX$x&lo>pN
zCMN<HOU|ia)~nyE*H^ce&4K(TSPWN_b9~-Vw_P at XJLk@UI|f=0^)RDk;%9~Z)#>Uc
za*WR#&F`pJVT^X}@IHhOl_Y0TQIe#U;wnQew=o4o)LLIoajkT(im6Rplagu^U9yvQ
zI=wQEf4YDTBh77eG*_dgp`%dRvf8yh9k$=y_(WOw=N0Rq{%_;Xmd`zT|Mus1)gC|c
zLc{5kv(Aj1dAeA=rhfE1?TLSB$+3^!?mBN$WqH|x{k2c5-<r|o9gpY7D;t^uXOWS!
z;>_Sa#bp*OhFbm6wlm`_W&!Z}z`=2rz^Qb>U at a2-f?jaJ#P(;%wH-(nJWDQkE*Uvc
zZg<<+WOu66(L}C{2Gf*8t7NJ+ycx?zLR+BRbOhHJLq%)lrtJ>v;FwUkX{%PkD<X74
zXjr*vxvktZ1}mvK9a|K;C$?S9>9#V%ch{aKg6fd40 at Szvfdtl~hnQ4Sg*w11xowCy
zdBFfhwo at R6F~>x8WisQPIwAt$to&9?e<CAl?LNRJ!CE at 0R)~Hs>PQ?pFwfWia6HVY
z?mizc!qHaR>30vxd*Jy#X9<9R_q05xv+=(W*zY<r59jcxBiQ*w$M=9*#o#NlKnvq^
z=$)=4uY3V#)n1s;^tvnnn$eT=97O`P(QlePmZarg3~VgHyykKU(OST~-fA{mEJC8k
zoRlQ+tlW~vqu=9JgkAz_5agEQiDvZ4LO$2Y9;-Rgq{v9Fr5)BJAt4^Axrr8m;qlGL
z3(U~ynUB*XMJp0}5LL6=G=iJeH77d<W>TlJJI1&&J9f-;#dOSum;UNM at lfy1gQh<7
z%+x`hdq3nq at mJOFwiV<KSoGk7iw5Kt*xdADy7=~oXO1i=Sbg7^G54)5Sa9SF(<N9h
zxgWyIzUYsDh{}`LA1#N<Ol$`k`3QmXsjSQ#gg`l&S^1PU%lHVb))Sc@&!Gu2Q>RRM
zyJGyff`*2}wM&)^AMtwOSL<Ngzr?tL>~3?_lbr_-$uUJ1j2*inb9%Cu+IMZ?f{cu5
z)Z|}Us73ou?%JvT^l3 at SrmzcPYTAP5R?U8Ns=i~V{`RD)n|4i}1gVTJPiyC~QSSxL
znUr-DamVniz}@SR!KU1RCkF2pasrW7_SAg#-0YS4L%w;Rz1Z66k6RDjghqn at NIsxO
zkg at wJW=dDf3g8uvW?_sZkiqks$nbw4l|}F^&^<Cp5DF3=Gwykeq2@?Od-3eKQ>V~>
z_M$&RGXw?Bmb=3K70J*5X1idH&x;lWk`;mRkSXfb{qT(MO9p54^PfL=j(Q(Tt$$<G
z9`S4E9qsRn?(J`(7ToH9Px`|rz2Nyb1Zsy{z}rek*=#Txkce$G=*)V9UNYmu&t!u{
zbG7s~U8C8^7(~5M76njf4f-vcNHjp}e_udclH>@<C#4uV$fKoFX}Vl4EigPT)fm>v
zo29LWZSwPy#mt&HNvD%c$vU4t+0en*!KBz8(v{e1NMXLU#`UHhx^1RIx)%+{P4AjM
zHT_3-L-!y34ZY^M43Y_Z$b;GN{OhL<%orT*#(a#_PWRslD=8jW$5i4w%TRb03g{8_
zfim!lK<N&mb=}61aswH-#&}@O$_zIQT8;70qP<=J>Z|o{yusQ0-8SGlLmM<WlbW<d
zzXzGHEgBXVgzO3b(NDb)4^sx6=?c5Yt7qZ&?;y7O7?aUBZOW8)pL%H0L$^Mo^IDq%
z=WFrU&*THZqt#X;iR+F~3cIF0wiV3vdFlPQ)cC}S=Y6>q>-V3}&0SD=|NZCB<8tGp
zM_pVpzjE={O!Vy^PGk)|xsPtS{lng&Lnf9yPq*AkIWm26FRhj@=8xn|Lo-;Tq=cPm
zD3}3ZmE>&0;L(OUqdu1paLTK>xxo_-v7<}Yj_>@xaLl2#-7$x4tTuGq;rrk8BfK_r
z=3#Y^-xA*;@sG(IeIN0aw4H@$L3&@BqI1elF4JUn0_|X4QleNfM%0QXB+BTKLWnfM
zfN+J>zTi=a=oKbVd_2;#G?}VAc!Xc at NJOgc+7BFkg8RW=5EQDYzlTonBgZ1r at 2ZDe
zTHr{3R6wvo^PP_P>^meUJL4v{?=^G%fey9LNAlJu%s*rw)y#|qI;5wJV1ahFBljVC
z9z94z%ZI48Stgia_CoB(Gjs87BA_E(2`he1Nc%1?fBf;~mtR at -6qP%BaU-5><C||b
z!X9OlpzoW~>FnTr`|uHj`}Xalm+re&M}P9it+!Wy@~1yhO`rTJdhufQ$JS07A4T#x
zJC2-vgYS(96j1=koqhP$7%2n7I+oY%W~zMi7$knf)Q%nD(_Zh4nj8OIRa3L-pHoNt
z`SlUQ=`W~?dFt$W<>ROW6K^eG<~`jdy|od^<=COKb7yo($)~s11avdzpF}r{`JFQ)
zWB<RLAsMEr{pv7DO-E~Ypk$aG3BjX25O<5?6^AKFi4DLJ+h8=;JJ!HAJ+xjt$ZhjP
zS#13{k>=fc9DwT~#-nDmQ*LTXFxoibMe2Rae0zLf`m{h?x=lLz?SNeP{Ojs>GY0=w
z$@*kM6wmy2-TJfY&*V%=JHSVTwL78_5x=%W8s)prXgsF|&S=DWX0R at FMx(kBC!GaO
zY5aH-)Nj=2WM72OB?xaj17OvPMUupQBJXHYKUOZ?nyix_rr+_q=l*5JPpj9Q`?_*R
z?>>z$&uyt(ws65r^}9_QAAaQP#ryMmj2r*L#O88#pVvEg?t3r2)hW`|tJmzuRu%UB
zC at nIwtnAY9M`m?!x-v4S%vY4`99+xj&Np-;sZIZ(VwU1!MMJzTUf>J at 7!idF&f~%=
zO at V^*%KstmO~9f$vi{*)ck8CR>AhK-rRi=OL1k$cQIIPtE+8Nx;(~xEDw?=&QR5OL
zkeFzqf?L!WOhk=wA24WKh)E1)GBaqFVcu+Jn-F81Bonp!_E%N+_5zxD=l^{F at A(jr
zuCA^+Rk!NYIj7F~o#5~=nIEkqHrnbf`i;7Jb!(udm4eSWrZ*NnrwuidAz|bEWRVf1
zDSRACg!?FbdVrXsrZ<MXw2ZSx5|K7bbWC_mSgavlAFqqm#>is)`bhgoEMQ~!#;}dX
zjiFkij0-e|8^eso{t<n{`-b&34vH8QJ}7LEQNBRuhI#oTNCYt&X at B17>JL8OafCZE
zW7GP|tJQO_O#1lW2ivo at O{=e;bSR(B3J*WJcl~yY%37E^c4A7(1+)3=p8B1!O4BH=
zxHu-p$KMp$P$<M8Nd7L=bv}aoL5ge!x at bYFv@?|V9tx@=ktxa8B4sz6mS|0nucD}B
zU^!{CPCtI^%Ge1P_`4wfOi_yVEr#wFm at ve?>p|wsJ~2B>rktja{q^GtZr*P3&J6a2
z?#v>QbpmTUxD&nGt07Z7L%nxi=*Fw*bWTD|bTor6zTD{cHrp|{OA-=y>I(}*n0o;C
zwEJGLlr#9t6hewkLV}WPGIFCoqehwoTq^=1DU|)v(>>WX)!5rcO{l%uHZ`7Xo1U9O
zcVZw93pz#(a^8M_D&{*v=FLeWw-N6Mu^tKavETr?lnxYN{&mV6qZ{TQhb(hC9T8j`
z&?pnK0tiU~&@~~({ulH`F#&+#p#%UP`&!RL0D{6uU#arR27vB3#tL_+P{$VLs+iMD
zw#&||m1wrqQXwO$zZ&NdY{v{Q37bg%_j&T%sA_~8RX3HvK)6wbLVNyK*YS1ggG at ng
zr?0>@`MT at hY&r8iJWmHa(4+H|xrNWu<4_KmEuN>h at p)QGqIu1S<$q?b5fSiYQB!Pi
zjG8do15}D&ZGbuw#k#g*NGKE(snn?=sO_YBU8LXk;7yUpG=Kz2<SCnCGPnby5W*OI
zX<|u(AUq_KHs;UHLnp5CzkmEO|L=EBIuC)Yy)S?@AQ8lab<e-d1f4ut$)CP<hyNd7
z{^=UXt2}w~S^j1Vf0<tj>Osn75c3>f^Y6L7z<O*b(U0?2NYn;>aIl&-N at ycCw!~*(
z%Mj<MXV)2t?TSrCL}GV)f>n6BNK%LZk!h)rq<CP!`WsZBpe%K5X61KdK;l~$pMUw(
z<3p<W-=Ax^Ox<y)`MXanX36%q1scGx36H&ss1$QaGF{A%D6YZ}aqB=vViOb=sHZLh
zBa;)e9|QjRSI0;5&%E!v^9eN%{E#1$n)pQR3^v_)9ht-^rGSIZY^UcFfv~-v;M=g#
z2q1xa&_f{Hfk|U4XMB`$WvtN$jGKJ($v#O5Gqz5(4fo9xseznGfV~!>uTxAoKO;XM
z1oMmdVw9y3wDLE=KJXOI)yQkMIBy@`MMiA_pZQ>W3++&LcROa(&H}3D!DaZEt{^CF
z5Z4I`fj`F6=DW7=o3|bUQ?`I~fnV)+U7~-7^jM*MFDm<Ru!tN3ND_2ud>We2)lmw3
zO&+>fHGN9i!DC>Z!$A}LjGDF6O2!T{>ig~BzgxEY$&EE at o}81LyLscN(XWE8!-sgw
zfY`@oJ<~Y8PnczePHVlA7#xh|0rq>^+pp)CjR%5NA=Qo+uSvYdgiMq?TL0vlnvGAc
zUdDg7qo3Y5Xl%)}wKe<<ns7M4x?=~+rcAGz6C9j)#j4e<u!Qv)-}ua|$6^P7u0w};
z%d4YDZQPuj3;UhL=h0bk-b5)C%8C)lqJi$4(nS3Q^*>0Q19GxBJfn372%1_oy{7ox
z$1VsHz!#Cb9SxuhjgRl1*2faILaT%0OM;`{kPAouudRph97Fk(`VRIP0bh8>s!6t5
zQj*OkVXh+$Y6gyzTvI%zVC;m#l1e at jGyvldaPNKXoI%y_d%-+D;Y<Fu!O-_qq`wjb
z-%hbkTSX4odWfI?HQ${WRQW9Gs{x)5qoF)wf%A$NL>g?~Beh7xfL|I}NF-2)lz at 8j
zk|PfcT*SWyzAU%e#uaZYpIx*3iO$mRfIcc>^sMd#ggwhG+49)Pyiv<?b4{k99f?Wb
zU7k`js$vVqyCBNov%CkNWeggh at 0t;xr(KT?@|Xk at zJ4@mD0bHRs`2i1!*}6F`rh;^
zunJEuf9V?ava=60c0k-*_u>(rDtwH>>H<{1!#u)<_dHW;@BZ<cMUG$Y&Qt8jR!Wh1
zv)6e$@9|XOJX2JF^8f{(tG8><bA|mLA~zi7qcOfdl-CZzvmPaZmWXC2&ptt&rs3U$
zpq`M>Y9LMI;rVkPujhXpKXz>1sN(#>Q&s6;V9CY7<kw$c`<D7<b@;MHhtI8kNvkm*
zjR^`^IOOSRc?*H63F!ImCP6NC=bKVu&gAPGX;1?~e99;wF1dE>Ut7lHJN`^AOdqhk
z>-8u24_Vpa?4rc^3wH7opq{to-qYDbe!~2lF9BOIzIik!BO1x`wAYPZ-TenS&fdFr
zjk)prI>A4!gt8(3G_W3QLmpXRJzf`jSiT4Qs1D at 9pxU8gb!4-eVPGG!^Lh#8#{j9;
zU!f-S>duUe4&*(AQ^|Hil^waMV&@@X$9_W|&n5H^EV>5D`IphpHQ_%{&fIV|9=dbb
z*_Z4*eCLoSmS7vcOQW}muVo)1pB#|IoWP!AHg`S0<H+{~aFAMW`2yEh(iens`YbLV
z;f@<%EkfJ?%ATus`)|W}VE#vl6`*JMlwX1};ZH(2Sc=OFJnh^S+F{CZxjPP^g#D9H
zpBd~^e(s_6$NI!2dU3t5j|st^P!j44FE)c0=b?TQ_N0lk2{;cAVHPQH%!T~4Boe at 0
zJbrVo&tbi(KJo7Lt_bY4*Q;JnJRaopBI5M)j(4tylfj+{RUj{YAD<}?u8D&F4UfaX
z2;=A-w~9V5KOGn;2f*VqDELX))zPYf351r!URNI9DAC7jB^ab-i3>h{Rg=_$e-o?9
zO!ciFr5630RGF>|{JW2+pPlgN`q{2_pZXP^`hyeLN7f%KwlC&1RkLKM_t{GA+9-_W
z#;OL2;}LK(65(9DihUy&5Jh0nBkE`P)@Of(<->4)8LqATC0LGe#3adRUdWHYU^p*z
z?)s8>%w6m={hiAJ%MW?(Uubx~z?A~rXSPPL>j?K|k%H+*I8c$~j_y|M2Iko%&po%F
zKXCQ!x37Y!FK&2h9=<cFf99Ebpq*1(Jk;q#w<{~aGp=#5ao0Q0)yee^izVly@`{~1
z(Y49WojR at UOzDPK`J1I4yAORI@<J7n?!7H=JG4*_r4ZHV(TUgVTu5V507yW$zo-L6
z<F;=r8aJ+J+xBrq0RcWqMRljHMhslT->)nw!3jqv88prfWahh%!>@PWLBIKe5mS3+
z8Fj=xUYb+JZBnXG4$|^KBgpZI1&l&*c{rYRG{UGlVN$9yILS6svB_eh+<xOYX0J*e
zMb?jY!ZqxU at k6%w8thZ3pbvm0 at Esf<<oX`j)N$MS;{FYRZO5JlY6amFn+IGM3Bnzl
z2euGv!CI8khG5HZ{NM~^kHoQ+$*wzIUvwy8EfHcaiM6=ANQ^g};p<bcWx-KzeYgKS
zEPY+19m|;_?H3U3V1?i}2hZ+!><3&QilQ5eMSofpFEt(eBi6gDXt(2dDfwwCQYw-7
z at EXk1F%Qjrn5X0NvPbZA#6!z^@O0t%%n_cCdML3J1dw+)qHl-ydBFEjye3I34Rwlo
z&sWlZuytgiLQVik-buj`iSW!4Y~z90HZJWqy at LOS|8eGYXVf(mq&PTp=eF#@bcJ)$
zXKR-)U-~^1&(q-nwuhYlpnG3oJ}Ag-BKL`Quo8xZ`wgG>*52nmHgHB!VC%JO174W$
z<<)V;ju*(6Gc(rxcy5pLoMcVw$O$RSpJ?LK_z%D_px8Vjhj)3`k{$bj%9wDxmV9GV
zro*u!YzvAQ3W8i-tjR^{D56$~6=$b_)goW%!sV}tG34F2T;MC%uM*Z=3fuSLD|jvs
z;r5q;87?O*$5>;cA106M at 51#lo&>IcPMCY6)91{aFY-BwN<)7Qp78Lw>1s21k>26r
zVLQWo>Zf|@`_paMmsqGj64t+r&Qwoqybx22+K&<2KZx5G;)tto`{!I}clyR4r+Vu9
z)34(8-SN?={bqu2*LT6$A{XKI1^hq_H4(M%x&q7B3GGwWxcz_O_K}f&8E#*w?@tXz
z?Yq7bV=!U+lm)l{FP}3QwJ)5(8fJ)x{w3o4?8Ea@<WoP at Q{SI4dgxyw(!T?@FVuer
z#~7gYQ^fgMf!kk?@_CB$W5x9Q#w4VA>ig4car-C^VXD}EKivL!A6WpkKR~44fZG>j
z0D=BaOn<3Q{ZvnVf4UpD at Aj=m?H|GI3-xPxJ&G;Bv0O{>a~I<pcs+_Oz~y~$d5PfP
z59 at y~#tM!j#E1YK51_~K0H~ZG+z|nQ*uxjmi{QS6yGoauh7~ZlQ&k`(O;pAtSQ&Hg
zW$Z#E{LiqGJ?~sT_~f(~Cuil{`ThBtg0baQvlmQUzN}*1jEfsKjwo9G%-D$y>-i5q
zJ;UGSN^@6CeSX2lh?*lcnM+HztW3!Q1N#?V$c`N_Yxc>*RSU-G9$U8H)8|*Nn}XCc
zVgz4+ZOlntx@<iOGyey|Mw~ppZDDElkfQXgk3U;gHDXkL#gthEk5x=tH2KJi<=m*b
zt40;pF6V!4e}(^xePl*e-lEBAslg at Bj*qVzvA7~WDc(GESAwno`0-on$4<^tl~ztZ
zv8cLww8_hpgqU;%Lt~y4hv)u|C-z)HnZObq>5e^Tz<(Kgj&&R+7(S0c#H-C3x3J*L
zP?_NO^7D3{daUN!wfxz$cYU>Z3AOtECrqEt$L6ei at _!sBnHxXXW)I!BPmFb%&kket
zgaq#QWXPGZSC}nI0$akKV64QPnik#5Gc8bK_jOLA&uXmulasGKUiS-scvMPMP<z<W
zgn^|KSG|v1)!tt<v2<XI<HopRU at 3-Qd{^;$=8b+JvgHH*E!D_@!?$Kwe4N&%lT#hv
z^zvJSd%}wE<OT`W4z;L<M^nfOFW%fD$B7i--oyQ*#p{l=XyJbo`F=~yoH;dM{+v0T
zzpOu8KB(hRc}3o1>u)tYdw9pu@`^pXo#%G%si-`1Wa#+yivb|t9y5l&J7&z7{EfA{
zNE@}PVED*>Lx$AtjT<AKKCANF+LMt{RaKimSq#5E*<4i>6_GQsbp5!|qJQ54CZ6y|
zv+7H;En3%OHDVgwBnGnH(U1$aj4LV{2O`HoiH;wbJZjyGMPr}dz-u==-Spz~naNo%
z$Bi2K)cR4Q`}&eOW(-+VG=C>I(U-ETQRb4|=W9wMhkQ2#el1=$81L;Va4kjPyD5TE
zOT3nSlV~?HF%f%5F2rGq4}PVNJ7&_`9fj08dj7LQE4JtFqF*??>%ly1Lx4Imvg7?>
zTh!m(Z8=j=Ry-j?p0}+-ly&PN$KSnYT%mZzQRHr-9dMpAPAkg(B)Pks6!pv{=$=G8
zvnb*Tglg;Z;B3J1k@(DgVx^B>hjoi2K^K`uc;gkZF47|EB8#vt(!2hU**^7IWD76C
zyn2Z141d;h1{GlZ3maJ6D;^TZRxENyLq3Y0jGA8bfS-No5#vDw9dIGm0W-XDB!bL3
z70RqQjs(eG&$#AOQ&=V3<H3Kp!_zc&@WI2|I1#k;-mH_D1nkp4pUsE-SAuxkAGY~$
z<g0<c_^4ibguy=4Be>Wz81_41TxoDzmCRm9gXxbsmqxH!Asg)9e0xqc;ht-2ThT?#
zLtT>p+6)Hsmr*WJB*SBD201Z+GssB^A*p4~6Kx8qf?*4Q;PKLZ%Y(NrII+pSzAgf0
zgU4O)Qp+o6auR3f(G?Fi;p<~}%;_fVN0W$rUVPcBRh&9c-~()@H$NT(2wYcSGa%lF
z*^;01jEDd&y;w6q;SsRnIQ${<z7O*qi5au=ju0nts3)6#P>Aa+#`W<S_!7w`oTFVF
zgO?&k69+WCh)x*<3_XYDJ8Jg24^hr99;Uj-s2sa|MhvF=5H`|zObodZ2|s+;XHeu>
z-=l`0pbUSGS;YntS|R}L7GT$bKtBX`t^#I>&75XSLz&Yk6Ge{xdLyW;=I4V|f30)g
zyq=UZsE7pmcybGWI{?f(56Wto8~n at Q<%zt_5enA){CrLh&<vp4ox$J)UjW4XdkWa!
zGq67_4+q+GUL!<Wpu`Yu^BDC-BZUr_qp at v5zp%P%$(1W$+{UGu17}oM^-pyC;wP^I
z#QMdHs%w at l-N2u|oKAiW7O!^^b#*zVfO!)Hf?0q5(4q}pK5^-raVAH#zv89%`0~Gv
zv{>E&25L(Do|pKKUl-`|gZfGt-3IB3Lv+E7^e|m^4_#4^F41Z+yW;%##s<KSAKSm*
z#PX%VLC(KP*s4>7`33o7ipG`Q*_sA!j~H>Ps%mQfH_vqd?Mp9dWa_yEo5w5V&Z$!A
z0z*LDVT)F~1u$fZX2HViGYPl9Ai|n}=P4n2jbTfw;Os|!<S57fe#_9^lIS}|x=zBm
zO at wo+LSBEAEiDjz1PGUCC?bj-Sv`Q>>AX!&n#udW&qpPbTE3H+J$_>LVdpVtdMP=^
zd5`=znauA6(+~~wcr_gi*LS91rHKdl&`$MuS_?*-2)Adc1pZ~m*Ydcgk3F4|CE1T~
zNAmJeLi#+Eu723?#Kdh`R}06joUmcv*4R8- at xl=ke+;*%HI;L#tEwv3!^LCEjft_U
zETeN#miq8xF)^{R#hle*QufWwtKT!3)9riGvMV!s^1s62nW;5jNC^q;*H<{3)wCV*
zuOQ*BE+7zi90nj|aUc^28Ef;WBmybyeC}4<d*-C6?)0_)P$%-gi>+tvQJ_?|u-!rt
zZ`p|UNfO$&alkEf4+6rrMxHKU|Ig3u${X`MKYUV2e%{!z<M{_`*R5Ooz;=xyUIdDf
zqXG<ZXU!Vzg8BT&1q+<7ifvPy;asCVm?Q{y(Z2FLiS7)*R at iP)eRi49?7j8tl>G8*
z;MEs5J~t$X0)g&kyZE`$yaT)nd6Z0y`Op#JC<;O+hQr}Uh9k5vV!ZpJMThM5o?92g
zdtyu+l*dra)?05~1996%jv6&`TLOO&hjiiKF6M?188 at SP$Ge|``CF)XesJ1=g$o7@
zaQtP<wP8b_-IP7_J-qk7Vm^Sh1Ymy-!PbJ}iq(P%MuW_bjL9S5o_wGD;{AgMU)aKb
z!+-t4mRDb;jyfYIOt^A+!UVYV8^{`GLsJ9awH<x|OG8uB>N_>FXV=^zymkZZOA?Lc
z{`Xwj^t0?%jA4a<IPA!#h&%z%kHnk?_ZQH?8P=IJRLkKZr7t!D8Q<1Q_IK_Wa(Kvb
z@))1d`U%iA at +Iun3nH4rg$vA$`!~oi=U3!A;2fU=ry8DX*-$14hkAcBoNweBjWz<s
zz>d7$Gd77?hXYXv_-xbc=xH!I>_`&|%mLIp<T#~z9 at xdlZ5v%#^Uk!Y59h3`Dm?s{
z$@miJ;~0=Q;_#I8_@|t0wfcZvt;$LB{wycAHBM6d^LJAx at r_0dWnj7t`~t)F02$DM
zp?*g{k4k#+Z7`ZVwwJF0%A+1%P3)7b^Y9q8uZut8G(sE#<~1W<b^a_kMv|&mF~32!
zJ|jHCDWsjDTtWt+l^%ftms(m{UU@~30M49Y_20kGOPhGXj|_a=gnbbCYW6tuGvSBU
z1%b at ITI8C>r1-d1r{M52?Bx%J|Fh%z4?kS*AUCu>zH#`Nuda{jKFHtYkAh;LJlIXM
z&a3>JU^qDt44?Yl{jGvC$C?dm!4a|r99ir2J>=ki3&gj(I72kHIt$nmV$Xy+ATm`Q
z9m#MxXI}B*_zi5yo1OUJr`Lex&>_ByFS&TL4WamvYA~#F`r!wgc2?3-zUJF+LBqF%
zJ0}G4i3`U!t;o||XQrYN_YkkgkjQ3=#7q=9$6<*8xyKF8#Qt$P!<Tn~$^1e1Jixnv
za16<I*7Gmsjvk%+BH0!&a-`rYmzcP03%><zzZ*9{ey*&HEO6c)It;McLlJ*bBKr;;
zuTfZ$n0b4Ak-g$-AT>I|YU#VDc-)aAtw)cx4lFBsS{E2-q)uz4elx0 at n)nRR-UNO>
zR-Keck&JNe{3h}k4WWm<*aJ;zXm^?Lxnn|GI*|UPkyJE%(zu8JmH+L1{x|-Ym&j%O
zUv>ycZ~Ri^z5$+TYWfn-mmJFVXE6T`?cv2i!Nw at N&ZM&=zlk`Y^YP at k&fmOq;Yth0
zYq`?;6aUerPahL~Il$e`;5u(dKb!eGxP4?>s(^E$fHFu6r#2FlqQ8}r28Ah9QY8wP
z?oLYT?CuZ(cQ^ylY*eZxt@@UJ(HpJjqFQ4&DckyC$=89RklNLqx6X!J{f%-pp+%VD
z2<ap-%aUcyiq5hXSPHBK(FL}0OS!c?y4*I;GS50MdY%no)~<<OW7}-mY~38a*%nmB
z#bue at pUR5K>Qi8Lf3_f|pijBk-9mXxc^?BP6Hf{BAj5#fN8vy*6e1IKODoZ2*k?zF
zaPxLfDQjuTnmV=aX!VRWPd?!Jam5%9yu5tUzwVH6)hnkBOn+?d={|Ynn#0uziIo)x
z&R0}u*W?UGDByaX!yU&5=MG`R4&Z_jE-b=_-K1;*Z4^d at 9ih?6hldFPg-Jdrnh9qG
zTv&vlnPUG>$eAsFfSGyt!Tv|WWx8XoU%|3Cri*G-sQg-k44YIfp>4s0Ry!g{!Ae7X
z5Nk!cuJ)kI*B7=|<glIk+D(b`IYb{kWiT&jA>&0lpxo^fF?<-VU~eqA9G(Z6oY9A_
z;Hc(^Mjz5_UeX-iFz~Y#F>7P?$NVqEC8v3i12CD`U)TA(Z*VgPV0sKLg-26+h<*|y
zF(o$$^5+`YSJba?J|j_VbL2*%&e%$~m=G$EzE!@-6g50ZD;){h at uOm!(MpU&k?Vxn
z*Q>%~q+El97r-_&@;9Aj<BG;WQMnKb$W?;WOsAN&nwMVUZ$p-TS*x`ijtekAx%m1*
zBr4<mJKwbk;m;E`BAzJVR55Z%- at aO%M5`l4Mh#C;J8q${W+Cd1)8RN`Rcrs))<C+|
z+7cSLDM5X!1Nqu at b&H|GiR#3)iCYr)C;Em83qj7F9R>AkgE=`(IJMCsgw=0zlo&T$
zC1GuYN7cMCI;(u#?!r;*PDOhBb`(K8{s8~Xz%egwm_er;#UaECrR><g_K}$rSI76!
zqz{`l)@*+nC{Q at D*)dR;p6foFL_hFc&O+<8Oi(j%-Wt`aQ5uEKrfswa6-3Zlscu9t
z+-_EJyWPS_%))*{5fn%>_gUWFV@||S(g^3A at AmtHvrb(4p2JSugHSEL_wmk3D%0x(
zF4!+yMf%~I_d(pXvdv7RH9|p1<zBp9A*sFNmikeQ!W*jd9~j0fXWlwIJMRy;#=BV5
zc(DEtSck~d)?nE?ide|`hX#ef#hn`>RR^OGb9aa=7f6Hzt2V0Z^dZf``c_5on-OqJ
zC^nh#QE*EQ*PI&HOyK%tS>{{zTRybhu`pRgR&Z8OR!CMT(^nI(j#u?n&Lidp&kLFt
zGB4B*VO{Bxy+{uj4#2Hyn$j5Ys9x~YhA$o4w!gH8|7FgHRnw+d)%>Y?rowTuh1{Yn
zo3g8}XdF59{);cXe1QLv|838nzOl!WLqe*iU)TcnPM9!hlFt~C$L|o%LKuMGMrj=b
znhim%TEm-6tD;4_$w(SPL#3)*gH{TL8+%0u_XrM7F$n-&DQ+ACa}<##Ky at vk@)g(r
zB#5nWVW;ySIlkoYwU7tvps-33Zmcc-T_^_p$e#!1c9ekvJ%?4Uuh<PZ9weDq#;H^L
z$4G5ZNA=HTv=N5kDTp3NcUOj^tNm<rfSjgDe<8Y372n+778TMO)so`Zs at ar+(E#9g
zXIJ;>h>hWOA at Bt!XAE+Gl8z3LMrkm19Vbhc(~KrMz+f{-l<JHOM at 9ynVNJEAipo9+
zFt|-nK+wj- at gk#u-3JXRh03ocfy~($9$8d(2vkID-{!creu|Ogb)k8GnOiwsn2J4?
z(Dz%Sqi4r)Z%in<`OKdO58(F<H%}tBR4nCxJn- at hGxvZuZRY6!1c#sr+GFmsWZTZf
zggq6L-W7D3ry);%mtLi1sjObFFJhhzU$e3FDq=7(n^SYC3DS)CaBY8`mI}7Xv)l<^
z@%$xn0nr<6bx at XR$qH%?&XRAG)u~$9O<6*+UUg?T{{L)de<GF$3Kk$B(@&>0rzXUr
zX-znlk=Z|9LaQ@?0IbrR&%3bzdw4HCG;a(`US9PK&)+T_Up#5V`0-_p<BRi0)^FRr
zc<8X4;mbyhEv%e&IIn#{xvJYUas1~TIVI at Dxv!s9Dvd|1I_-b~lS&8Jcl7O-!}ag)
z?;rMBP*8q$%|`dsy_)0M<8Q;c34v$EAkIHf8<D70XrpOuUvy%i01Y at h2vVdqv?W2)
ztWA)%_SuwxR}!9#lkiZ&iE({gReBB7=Dv3mrUY$^v{drv2NhLSv;Nv+WV6~AEX>H5
zkB81*<!?4NQeBTPy#C?5#XSbIKfmC)GHyr^9<2a6 at zP$wK1&**bfJT%LxhTz6Y^TW
z^LkR(%&3Vry+ZFND<Byl)v1XbJ;L`w2ZLy>?aH{7r1qL at 4V<CSP+^#FU_8Nzy_7ev
z>PA=eRNRDfss+n73B-7=Pp~4)PrFeU(5j+Zqs=X0{hDJN{aRJ$L&9SF#YG1bQpE^X
ztBo9<C at _|!Bq4^j{T7xSAnWIE+!jx)q_s)=lX}TKfojs^N!ZlON62$ZPzMff-*)ie
zw(SR7c>aFnQSAM5+Uptg%9#tzv-8Nzce}dYeW$DI2mVX``!MA1bN;O!-ax{kA^Iv!
z!dSg#gr*iGH%c`dwFbz^TFq_JR^|C%V-Pyc7_BB^xJ4Y9XH?!1S=U<kTLtj=|2Uvz
zt=&W&;1Aa}{J|i|2r?7YU4Qe@)ZYWKg8YWodjaI7VF-bUU_wDN71}D*Zq(F4+FPWX
z!bw7^Nv4CK at DL8yf7dOC7Y9a&uurhU6=2eM!BTwi6;O)I=G|b(jE`1|NGY at 4E-SxS
zg#c6vR_z6vP0l-BoRqY*!-EGS^c0n#dspy9^mM#_&BO{$W+j8Pl1Qz;)*=Sax1S-5
zdMYSVjGfoF%FaVwPuphk#LoLmj50j2r*#^w)`()}PieHIQL4^34KyT)OU at 90BDJUt
z@~Kl4><+Q{QyMrs=np at 4OuUfz7e~bRj+-Z^f$WQXc}?`72KY57x`r>m2(pJp7>zLl
z2gVqU5#T#=xufgExV2R%D6(qpxD%A+{_~+h{f3X4UR5=H)bM^mp~9Hq^Y}j-^QQm*
z#@y!<e&L9|!_k<B_Z`76`~>uYW41*M7!YAIMv#92o1OohmbZNH`gQBp4_=-(jSO%^
zz%iS+q at 0{2&LoUk$i-cX$DGcEBD{7bU~82cl!RMxUhj`maH9;|dO-*j({H!Ck!1~k
zHjusYZkzFHj6Q}C+Fx&J8G2&LrFX$O@>OT$zI_*($d&hgBTK5Q?zl0wr{nmhp>C{r
z3=?lu7_`kQ5i4G$RU04`DBuYPTnSL|4irV{rsHHq7>4BW0gUe%Mj1d)7XagN;N+Nx
z@#2Lz@(zR- at 5bAObeV|JoE6a(2K;NoB3hz!#^C0FMy;fl*0M54TR?E2Q7zTxM0sdK
z5%f at J=|!Fyljr5y>W8RI#YDb>@OSfm_YnHjx0ue6m^$(#$n+)ly`RvURl;B4n7^xt
z!Ca8?g5m@#gt)h{4CxP~Qn`Z2QKKUU$1Nd11dJ``z!>ftPE)9<(9G8`JtN=IUzb~&
znp#euMyT%SR6#~1>ge}Srg;_i`8ZvnW~rfg4J}64+W0Qg#>psFN=pepsZ629m}Dr_
z+K-kugEq#mSsIUvkZg+69hqQHi%IpNL(V(LskWvj$9GLlR1j)27q<Bs9G98M;QX!f
z5}6iA37xSd%%bjcK=~-6%h8$0Y4sY?Osh=n6;+trbR~#r)WPw=PC7G$xd(QQTT-_R
zmqKuSqQH*sVv$e}GFwQX at sHMO$<?IYK3T78VHuy-!2zt^@go3!R!dRssL{0ZX^NyN
z at f8c7K^{R+#gJAF)TUB6c?gYs?+HnOf3Ui%t1}}B5(}j{rAF1Nmod#+l9UjQ5=f`u
zi4VmZM5ZwH$u at H&CQ5=x)Z4*<mizZxKqmhk0KcZhssq!;fGLn1e!ug1vRI`$|6B0=
z4Y^{x5%PsE$7>;mllZgn$V0clj!qQFrjP-KkT)urTK2pGBXMCq1$;sQ!HUe~i8*iW
zWcBwxShaXh$2B&_-EJO}3fr|1Cpl%P*`SSPmFBQ0X(Wnmc4Tz6cS6CS<0N4Y#X49}
zXg1Lt5)u^=)*PkW=)YCd>UTb>EwV8J4*3>hBUtf|@9sWjU<p4#%#ns_2&2XlVnz&-
zR(Eru3Zsk&H3k#0##mwiF~~TI$TJoblZ^`qe^ADS(xJ3PAF8)lLoJpROIqk~OHOF9
zWlHFpP=BI~^OML~MTjCqMVGmwR_NXlD>xKO at Fz7;Lvhdw|6z}amC3Ii1IL^-EiKdx
zF=FK(cY8%4Iqa;S&pRZ{(>d2Sk}!H25lu|xG=x?k9x4qh)JpY*GO1Jm(1Bk#V2=xs
z=w%@qf{l>+2i8W==1sOxt+dUC631u2pLQ_`2B%AiDU6vPvn6If{P$MOXEClAKTu{B
zEQTo}-xVMtyd2nl6Hgr*I;~>;8y8v^F4;V8T<gMR&%N5(nmMTyVMTnrA~WN+FClZ8
zc3 at A%)F$!?^vA^m<P#6}9-m=P8a!CwgW`B9|F`i3J#su@=WPg6>HorzH2-ggbnh2(
zQqM81gwpUdE?N?%w}udGtke`(8{3a+iD`=tl at c12PAVxhN<#|!Sf#d{M2s=ua0ps<
zd`8Bt9)n3LOq!px1&YG^lio`DEXkFm=O|^Ze`j|B<oROMyD#!O<vpW({p5t2bRPlU
z!;Qoa;4oipO;2C;92{&bLire9Le*oK4<A(am-nD^f!r&AePEXq5$pr&A at m$L-cVvJ
zr$Xnc+UTz=kQt<U;Y3AB2Rc$YrOyGZZvz-X9*vRn)5%nNgkfcLD<!8Z!u}ja_Be69
zXPYpT0D2A<00hOPwfBj;2p?he;$!&470+B|G?s-2af-kYN@~dW^Oq{znD&T)`Xj-l
zMbRb?X%0Ov_gG-h_)&UFDHGUzbPr^EAu?X$)@CWbNc8DJ<UnOLG3N|_w&JEQuKo0%
zzH^R5YAK}Y6p~Nix#kC@!Ehg(6oik`CdB|LQaWD(#UmNcz$_r6;2Z$|H$YM3JwQ>+
zr+^y#qn*FQo7?FM#|o<U!G3D4W1HZogW?DXmhdNniN0JA-7J^1>ItYs=r at JPXsu?f
zoYDpk_ky1YS^m1<8iiA3N{*(IQqxS~K$j$%iQsQ?;r2u16Nk2K-L7?R(r({+2Wa`*
zcQ8mh_1SmZwteT=e`(E{OO%6um+wXi^W329;@urVuogIXTKGgqasClB;m49vU659Z
zb(v0#y4HS5rX_X46^;z*#@aSnn50<-A1&k<jtovpHM6WzsY5cg`os9{9_adFY)qir
z$6*j)1Du_t!TAF@(D4QT=4*!zy#|KITJJ1}Uw5o@#V-CIyZLQ<p5F|q)IPs?{oFYp
ze=_$mNb645m&{;#6%mg7j!|%9peQqB0=wIekcPb_%u$S%p>_B`A>Cm2wrJ$u3!WcD
z1<`)}GV;fyh3^SZ8<U%5(K0G3V>W-6|3^8v2%45g)5>F8XFhK<K0kBogi0AD51<qk
z`uW+fWsNV0Ydw3mHLhTM!r9!Jfo1#mgZY5uw=O4VO#Fub<@u+cdVb^fk90?}kxgkn
z+|z$y^;(viiuVrT`kLGV=UPd`!;_DsWlE_(Ex at qiCCT~A2suL&l3H?;qRk(H7PfbG
zAWMmrHATe(50?cWE#&W62Y`&yJ+HO49(zxA-u(UrG9TykareW@{=0q}|EqrXHHrOv
z at Fw;9z2C%s_!4R<98Ul-j8kX|{83i{zFnzr!Oj8#{N;qES$jUvcXWYjPp at v{de6>1
z@=lMz=3&qU?}#_;tlV?)Cgw|}_)b<s*tq~!E+I5>s#e+J*Csiym9bJnnxjPqg(ShK
z?;h{zLft+c=}wX0!;H|~?Wn$Jb_bq&TGt=l*=pXu;D9Y1tFB at g4===h1``9h5LPFV
z*DB735WzaCHmF6 at 79!Wee$_c4xL?sC0Q(gU+ouad_l5d&?UnC(knqxLd9%Og&%Dxu
z4(DDxY{-{IVgRuL%C=A9I4~<GAr*v_k*L*O9o;B%7$+kniduOaJTz!5*kgfGkm@~{
z5}!BmM3bP{kY79BYHA{f2#Bm$Z at _IM{4?=mX{n;Q4(hnqPCM_s0)Q<V61s5YUg6W=
zaN~}oggw?mbZ-awb0gMWjl^*-*-t8=WUPjwDMmxnR5nW!28uQ``{|qg+vGIEQW`(P
z7@%Zi!CG3Qm%-BoUp02MBLE?d0P&iEP=s){UXh0j_-6u)3m1;qc=i)IC`&VdAz4a7
z8wdl?lL1s9Z6&P0N=8#QHd+!bjrNNSPX(!D4#**AF-zzr%radaTPNAU?vO;FB)dIu
zcLbLo4_XnWPgs<6?8<@BE5|msf(@VEobUYg>asOU){*|Q#bx{lAY$!6-bPpKJve(4
zc!__bB!5hW7{lx{C&M{|pM+IW3S)qlArUk)(8I&(p+R#hR;tkZL2j!zG(*Kv7k?|s
zI}14Pd}^A`PAP#z$jNT<q at O?6+B|mU=mS at dB`r#*nSb+BepTz$bxYPPgDRtK;93yD
ze^9nq7P at Kn!M&iHf1_edehKzjD?xD}PzGDe4fR)$O8K}Lo79h#$i~@XY}vuhA?Fii
za$5`?L2Lx|bVR)g!3+0q(QHZ#F-XI0GI at +eLKIn~N{KW)POw#WcHa`vd(_<>iEfl0
z0i*}1x{t!-NdUg6!=8Ne at xTpE8l4FOdL*7l*}R`cu5tC#wq>;+{P)MxOAW#{>bSIi
z(~KkBksZi;j?Ow36H{EwjWQ`?ch>JYtDzNmUp=UqI5xM?s<LcH-g1I}&nF^&j*dv?
z{55)|s(_Kpq(HC=dyK-Izq(d+UM~YITgx;eV~hX;nh>b*UcR|yunPim3l_a{_4H*7
z^ZB5Uh=c6YXCzU;Y5gOOAi$*47cgp>G&mgOn0(C9>JG$UxWMpcqRpf*HmgDnwfgfW
zkq(oG4g{r#$kF-S1qME3sfIryZQy`lvd%qy`VG1wA5-W&MERJm!R*a$%pb~5&p>{H
zjQ3U|O_%K96B3pjBgk?^MS!$LS0PZLGM3Wg%Z17tRLrcHn4Kk+Z%lj$uL#NxZsPzB
zUd2E~cHf)&)2EhE)T+l#+Kw}CX;X^M at P7fy3lqj(Id*)y)wat%Bq8vf-SfDLkN-*^
zJ3XZY<NqU?FOqlZsqmTFIX|gfsg*LokBrag#G)Zm#+3{qZI-vGsAesR1jb*wF_aL3
z=n+zvLMavx4@$3S8o^2aX|U3b%)?&<gEx~E7?j7ke=~ns#76p!*$ey3<ctCe5TOBW
zdTFivyk0I9aD%i;ysR*85XO{6&M{b-@!|t%9>NC_v6S*=U;F&bD<XuFBNVS_>T86Y
zB;vs{T6|`QBOAOwFxILG3EeEy2l}fwF`!KzsGy~6eh{)IMu>tawnioW(k>*QR68_U
zs9Qw-Ia0JKioS>9tujt%f?N;Lo;=n<4s1DhPB1SXqxL!9S+#2ONpcqWotL7YCO+e6
zb=943Wlaakef!S2?d at OE8!%SLIL at D9wK0TIrO;{vXaV%6v%N#W{83T5h-OmV7U|d8
z3-gBy{#^CB`X}lq@<Y{!>d&apNKVD63#bB8Q3g^>B74NhTL=)yjzWPDbRf!KO>f}y
zKy}^mEnAM)Rr5JNR;~fYFTMcAHI-CbQ&;v!&+fZ?dEc`iWp_1={9(rrd>635|3->=
z80j*ohetrUOJO3khG0gmkoqCr$kC4O#PFKZw9>(?AuaMY8q$n!HlV!BBE{1SEScpo
zB&T37S9%Kd?DJp1oiny2I%cMQOKIuoQIF3mZA!I}s at t1itbn@FHD~J1#3T|_PTTw4
zjH>VkX~M+U7YXx;aWLV0vcxRTMr$aFWHc;8lJNXxXaFT?WYW%NNbnZLGBgPoijb%~
zMXX~&z&h3!=N>l{<IH;q at VGrt1ef$4zEbgrfr=Ec!+#iNv*|u)y22me51^Ej)KNz<
z><Z^Tf%GWAPn=5XCzC4xNx^epPDuQPeshm&iYMnD*P>rK^h=JrmLOU{?r{aI;E#&c
zLNTJK1Kav#3`r at ZZ%HTuSpaZuM=pUJ4 at kL8PK}qz>G3i at 88e<`{QP7<LnsJRLy-yv
z0VNSeDv`1piA0+Hh#`6Y7yg7J<Xkc)m<cBP$p*@Dm>hDHtUy-G6qA!=<+4hqlAJAD
z%FJh$lJm(rrh#cBcgs#Or^rjpyYxjejA8s}mXeb)g<MV}cxfh>4xmEFP(`R*?`M!&
zC05qV*k}`FC8IzTVO7}V7MaP<EKR3VsZ>R}G(nlejHGiYj>;xc06V7`CLbmn=Eo^H
zWr?JOEny0&v1Ab_A_^7b<i)b_epQm`><p%co<Y at +HK2xgTwdunQ#wz%M6!fk!K|j2
zQ>)1*z#8xbv4&W#SRr2{UnyJaw^~}u)RCK&jgm%o8?%+(L+vJafE~n61sC5S-KTt2
z at +#ZJG|@+>BV;pZCXOhYq;DwCFem8q)SG0B{4HfWbA|4pu8}LCFl92!0s02^P+(_M
zTE6-ElW)Fm0oG4`zWWJP<7hxXP-(8A8hr6vHAK#79jhd?>Q1PPCZ3TrvyDmu%YX at g
zQu`}3_)3Psw)3-SJ<$>c5Nsl9jYfgNbtUR<X}2AudX5Yg5Ef{6;mFa*?=iN2ya~L0
zg at 2iUh5qY1gEMzo%(YV=oW!a-Y`z-OG6$|%DKP-5z*0sA*Nc?!Q+IYbI+1f@;whSF
zL&oBy1WqAlAB77{N?=22H~Ou!qbnmQL{@(Stf2oVeA)X@{2Bn>b#CF+;Eu3YOQFvA
z7M2SSb5U9iNs*LBqt#^lHOtPcwD5SRnpLs_T1x?f25P;!3+)ZGBhW at bSZx#0jzNE;
zz0#i4j?}PjAt!=Iz+&9nl!LoIfQ%+bkfSt=T&pq!QK8y6ZKNTUO4lYB;KCw at Qyk5y
zhH58J6Sd`r3Q$2-Qx$XtGflh3u-5Q~Aru=w5Q>*q8bg753xpuOyxH+kVRNRrqXGW@
z8a|Lv$R0kAN?kAD*uM~X&Y$2k0kl>V8m?6Y!|^Eq2#kUQ^b9Z1XLy0W!|M_-gZ+cy
z{OAIut&vn{b6~t9qpMrp at e8^?2^J<YC^#s)*8~joOh6DL4_2As1O&$gN1EXT1Sgn<
z2^bm-2OnH+76v~pc#V0j`3-ZRIB>h$wJiYgaO~NJ#t)EBn}o&F at J3Yekctfhqru>!
zCudVTDZT+s2XGB|CZ`ln%7GDS6VfMC#An(w1|`F(aa>I;BS~RB<k9hPej<rxP8J$r
z&_=Q05lWM~%VW)t5UlwDf;B(f6xJN>w&sVonV^XMA5Hm at Arb!vru;~Ks6NsfYKcsV
zObZ<znG;$Z`G0K6M~Gq>7*VX386V-P9YevL0-V^xMtlq<2G`7Ea8Bl8{4x}x5}B6D
z1Oz at 3wM`NLpN37srU{ocNon9){sc*a*x&Xlrc7-TyW?lfUN^mXtZn+v7=5GP>bIW)
zdoNV+dFLN6^q|<pr$-B2^OgZ|b7wxgVEl}xq5+x}_hWP8b43iggRB;6amk!tIHL^+
zkrMu4>aH$FS2wy$^53XbX#HBXjiDjUL?{v8c?-!YxrL=&p`8=q!H=gV+Bf1nQuKV$
zm_c#Y#gc&_z3Nn9K|YRB0lH@%n>+vTH7a~z-n6HOEDSKj9W`sTFReazc+s+O=VFnE
zcxX!DWZ`N;N(E^p*p0Xg`ztBc8&wLqzE$2xLg|xym?+`y4Tn8rNE<hO$i_w<x`qL~
zfDQq83GSvCz>5lZd`WKdLGOw)i0EBCX-b3h1nHrqgxWh#YBx!n!XQbYF^o|E(wizB
zz9W1jz!;n=fXI66839);Kfl0D7WoSWC+5*)3HuAuh3+p2-9zKm^axZ#(blEC2acZ(
ze1Sugeyo3-=6ZDV;PW0&iNNtQQ;B}`Vmh1fhYO+)BmzOhdEL8`-JY at p?9l3Y#lkTI
zef4w at a&>z3Gn=MYpV_tR<IY{X_`mQ4yLN${QIQG#qaw4XMn;jT&s9}jeeRiR`1Ncj
zN~Y5JG5_I?9iR4(f?xgPvrQt_0J1?0#`nW-KIGSx$te>9wGn<+TH9BpwTg~iYAD3E
zyFI&P&3*~G)~FtyT`@90U(c>VUhG0Q53mZ}%sBInC%T>-zHE5Tu%U~0Z>t}fUp&6?
zud}MED)`?(Wn&|MlfQbK=bu?MKO<w|0;;Qje=etA-yQY=rIQ8>SUm5;>kA*>zgP5d
zKKuII7lVR^aAnUG<O_Z~49bCIBSvsGZK%c=)NE*sAs8!YrmU?}jj=8Q`|re%gfujn
zj?&5z!m!tW$I+ec&XD0YQ9k6x<D*Fbu|rSV>_ov);1At;R4NnJsQItm-aX>;S%;s`
zRkUufPTU{I2x;NUN#`_vI))C=s^~BYV59_%!Di7Vwz^Aj+2-Uy{^#j7;)I_LZoT-7
zj-*>~Yzf}*B9AUDff_bqkf|ud=*)R-T5cOsp)W~WmVh<oabYOd=)wMHmyf9U$Mt8k
zha^M__Rl;q_c{SkSR at v2?DU>i=ih%Ii=5l<km;>(do}W5q=GDV{)04&c2hVm3Vx0u
zLOFlpEvlJiBovB;W}%|gfm|~X;+_r%UZ1;0u5tVc%7mj2dt!}#hl7z57O205yJG-a
zRGZA_tr4}xMk|T{h#Em?wLLtdyG1PTs~F2WdTsRn=+C2Rs7L!aKlgCw_Vtzq at opDr
za*>ZaxA06`Jy8J8W4_+pSMdYA_i0a_Y$5VEc{DsHB0{8*gwhH*AbMoo?Wc?(W<uS8
za<S?0p<xMaHibu^qay+y9T9FWjh#aNoAbjPlJtk?$hY5K`})?S&yvn2z8mP9deJ_H
zQ$(wy!lY(=qM-T3)VH6Cj3Ue;@tBj7;msD4867cZsyWR3XySD#_LM(5X9fY$)8gOX
zKKi&B{Pow at Ac38a;_Un`OuZ)`vluhdr&nw|b}2xRv5yFf2R-B9BU`B1NSt*vhV1PT
zOn#T#)idgyoXY1xiEgWJ!21}-Jxbz^mCKW&IKO0+ngl$Qw<}Pf=|2fjv at d$fq~4+J
zNSygY;p+ZCpD|I_9rj*P`H*rEs`eq->u)_`-BE1j3zExtUX_F$=Qr&!v%rcZV=Wqz
z$t=jkj~FVJk<Dz+ss5PU>6}T;f>LwF- at gKYKiLOM%rEth;dknf<&^fA`*O#9ibX&m
zAo92KSd#8Jy!&fXCzHqq=lY7}n7u>}!tZ-T at U@sC(t}ZM_kx)F`epmXaI-YBHV+?$
z1F^>zty=l<q{_0HLJr?n5#aok7>jN1d%_*QjSbK}Be5rIG^S`b*0~!4eGCrA9-A9u
z>En*!#uyfm7fRtXup$gRWRCPPi0br`N5ZX>8axs^SO%73`)F0PjYKJd5@$z83j~vP
zlCOgVBLiaonaL$PV`7k5TJU1<;IQ9!fCFGVCJ*hiG}nCQJvgWRh;)Rog3OaWH?=wf
zAl~GT|AAtT$x9WUQ=uM%&;mR(uG~(zyc at r&N?Py%hyycnUn(9&?qvBNFu~NI>~ZCW
z2mqd17{l;4*FMYd6v=;LyG9H70t$NKs~7qm`E6;RaBWf^RWQUejC(;6xh=Ou=J(R?
zK(bpL4<O?C5_TS(+Y}Mk&g~ZBbz2aFO?@Uk44AyI6zn{=a|rfj;Q!Wo{P=_kLKa%k
zkNlH}SAyLJ-3}sxdjs_sM?B6`J04Gcm4I6UpZ6swpS_1=)s+9da^0z-fTs6yrJw7G
z7_jQ&Nz=+^wX~qs=o~Pu9Iw!%et3oc(duON&M>$F`A+A_q+s85iPj{tfqn^Tl!<5y
zZU(E<fJ;6+w1wP-9kL*!gnS5dN0LZ&eMx=KL=XxTxvxVeBKS=qdlBXPB6aZ#Tk2of
zvbeQw$IiM|-xuU~J`jA5ew@#dq?2bdd%i|}5U=AtB!mj(X4NQYsUPr1wj4D+osjJx
zr4N)V{hOs~ie;J+27afbBMJXX(3!+XFaD%br#3t1Y!-gQ{!0PFKcE*1|KmII(exJV
zqe_5>-K0`9Dc%c`FaY-Uz_Jl;OU4!n5H{qBd)?$T0mFuDio~}j6*nV=dw6Ck>;r1U
zrj$pw>~+y%J(n{!>Z4vA;oj-k=vhfQXNz)~qYriFoF-86;Q4K-uw>#tuzawD+(W+2
z(u9sk;3NiuQp)6db!S&bd`Cy_asRQUCk)(xiHRrI7(f}pv8+ZxqW3e}J3A73I0M@?
z_~M&vU!0#mb?%ZSeHM&fv6>F#p9ae&PMkA^-%HKpj|>>F(YMb~Vh|?{BPex%Om0M-
zc6fRX6M79py-L_%jfzAyGCDgtJ5KvQ75o%imhhi^k=<m>T)6+m?1YDCAvY|aGa<EP
zA*P3PeGgtIZnG3z^%}y=Npvb8MFvYq5ByGq1SmCxRDw;I9qO(QB;ERQ6)5XGu{hbj
zux~_mP|)JVjLNxwd1`8DXlMzwaJ_rHI=F5%L<GlZ<Ps at tyMw?j6B-Gn^pnOT-vTtH
z5BV~XT3vtRwAo9RSe6tk!nE`oGQS0L__O4q%Jejn66Dhn<a6K_qe2*5x&YsNR^ocH
zjnD at MhE^q~EM9CKIH*{mRB1?ujG at y9%mJgF&sC;}8Uaa)ZGqRxC9ti?o^AOU2p`dG
zLUu&oh1I}1Fk at Wr#^oicrE{0defl7YNH`yxVILU(0$&MZybwDM`OgA&6k+BgHi6wk
zbA}G9|7G!<Osh4fdgbFLQxyNv>Rel&KDOM|)c30VL6iISBNy at iHt4fnK9Uk1?jiz%
z;`;|7oc>gD59Apt$d`I at r5=okQT5_AfQW|ka07l$BX}!`4;y7rfGvQ1iShmO%Z4R{
zghm?pFIWDfYb7~tew2BFUY{FJ&gKKaKamdjHgy=xV{T|M@`3Q0{2sq%1Po>Bd+;}e
z%^@8vU_eql_z1tw#m}Ohz74)-KSi~HL1(5?Kx5ImCic^#{6)YC*cHSQ>L*Z(^Q#lO
z<P<?0N=9&aa88$SrKQ}W!h(WA>Zi=XrCe5N=HSADZwd>0eh%GTAyb9kAgI84P>Vmb
z2z{LTsj%>yg2KU>rCD6*V8X*Q>RD36f9b8mBzbLMdfSRL3ovIbfO=eFg592SY{IZ%
zIdj(1leyTmTnndA1Xbw$WTiQ?%DJH$ervC`y{0VtL#8b7&oy&K3>!Y-^%T23Au%a2
zX~AF%u%@n{C-XzVW168{`K+8$nV-HQNTJ{?xoNQ+rX9%XB=T4GIKjdfR)aq<Sb-e;
zlivwu@&U}7zdn2V^s~SAuE(VG11SvoD}1gqVa<OsHcvg`61|GbVykgIe9}?itne<q
z%H3}7dUhSYM>)F<S7fV&c11sM`nFgvjZ at GJd73ySp~)qzMBRn1AW^25^aLXJxL<MZ
zab at x3((~vB4PBw&3pSMO1vPJz_%>hn>#q;DO%bPQa7sckOMs{CjPC!fZOR^)<}<|G
zVEM1V@^!GzP3l`P73!H3q2p+VplGNZBMwJWWPCg3)nIBJt99NWF(xK)gPBIfF~6x<
z<i!Z*dl96q2+~HO`2l9~*?0JJI}z=$?ZfmPxF+y>C`%!j2SRr8=ir;qAUJy1H~$wf
zm2mt)-&Ub-htM_do4-iKxr#Be9&u0b?>o#J$$Hm|s1L^5$Kyg5h(6v(6}h(I_dWE@
zh2%kghJX+|X)}TMHNptfnSkjem~rY9znlC7azPt^7UM|47eYN$3s*sJW15x#9 at Nri
zwS-&?Wdc>NvUNfkq$2`!l3!2_ at QFa4V8RLx`2|0?p at FPvXaIfr&R%tJ5D1)r2ynTf
zfg&0j_)gFltp!j|1yY|u9T3*BBYT6voMKJ^2ey6j#kMa<9{v7eo3Ljh$QsxlfuD^j
z#f16;mtlWsOz$v#sC0HDJUb_FO8FgHLYz`cN~EBKP{LK!i4hSpI=h8s1y__3uP7z_
zC#)z~t}4ct!T8=7)xgP%l&B`Ip|cC|)OPHk at Xk_s<%E(7|E03MFTAjq9hsXuI&brq
zEtt+-%rLT=RYN)roFDlVah(Ri1g*wII3NiCjuPzZ=wQ_y_#C=Te?e&_ES!TtB9hZk
zmkf9PE~$PFB1#m?*%ECK{NyigNQVU95X>~U0|F8?c9e1`2P{|m#J)v~_Mso<m#oqW
zun;oe{rgcFq%DtMLPGf(%2|<|O0JYi{-yi{!JE-G4V0&lZz00FaI|aF6HNApbBuwO
zW&PsPQX>aPL=OvpVo^$FX+;12D%I06*@Uu$*|4FrOc*tqO at lI36=xx|5~Z95T8T<d
zYp(=L=qm>Kk46<x5)wm6z%uxJmKt$jvzT-pnI3U8PrB#Z%?A|tnHcd?Gs1r&AFv5w
z?`ABdAh#~>69SI(0F!^Tg<MTmPmboSJzg=B()7AfMYUUvCifqLOmGM8|6_QMONeYv
z!;+_I;*^w at P;fg^j6 at 2>!_E#(x)6nra&GlxR8mZ!6lIMSnIHuf56VnBPX1oI?(k>z
zh?StElE^p91^$P8otC29qLj5~AT|I2-U#a-sOe4a at aY4v`JW(-YDgp6Gmyik*$^|7
z1d>yxl$}0v=5*PV(`V1pw<{~(JYP|9{!L+AOTb~$3FQcXB%J|tGSar_G|WZ;i{-0i
zk~w*o{|$h%_v_#KQ$63di6S?y1yt9))9Waz_TtYV{`1fIXO8U{GiH-;Mm$08!SX7U
zSWl2tJX|>^2r3 at ghBZ(UUCdIBot|@g3lopfMS=V9d|2fa%p$&45#hWgYZ6nE(<j8m
zMMRXvtWHYKA5)h;ICB`6H8``VG}1UPW^O{lh at ACYdOG7@86cNKk;|etXr)21abqUf
z?J}8ePPj^y)GszrA1F2Si5*p%kmx5B>7q<<PS8A303TLpLMXipDC)0YuLs%(^>4lj
zg|a{M7k>K<j0AC?eb!s<`2RpQAa26-5XO{3E)MwzXol=gN|P+QH-UQ- at -QL$Jh`18
zLXMz6th;~6=Q9$*#sy{3Ss<Q{2N84xU_moHiwIiEl2X(J^26%v>Mj#ovEz2YTXoc)
zI*<&T>d{s(Cx7(Edw-go1;6hf>PbJQWj;M0B+v;!O{)P*H-rC%7LW|d=}C()7eq5c
zG@{*efpVWA%UTM#z0TQMM}K(#P#ww><LsugTsPHl{lar~zHrvkUs7 at GQmq-E^J}#z
zYGExw0t0=U{6XCBkTFAH5&an88OAj<xHl{O{B37{O6wX2&%iwd@%tD&&a?bdYP4$$
z)*fs<0}X|>?GuZL*^x%=jWom at sb>LyDormFV+|2s^8D>`IS$cx_*%9a$_hgt at C240
zoD1mNu0mY4)LrIy3zlV~GP2H7cA5!ujbzhc*<MfCC(JZgJd}H&?BSq=vIpJFDnif7
z)e`9}2jOmy>ElXdN5aqUdhom0Zxb_&pU<jc*=~nStapRSaoJEAQ6uz00B0I~m;X15
zaa=e*eF?{`Rg?t#$9HsxbcLWWBsTC8M_%-gM=uj_Sge?E%3#LnEQKo-i8F2f>{)9{
z`<iLVvT%F9{)0zMn$C{2j~|*jBr?QL9jS;(wMIq77%a(<j&Ax3ms-N2=j0jdFK|vy
z;yKyp9;@SRST+=w)eB{i-Zr|MAI2WS@&(-2{IELq5I+pGq55~|ZkL)pq_&Y4T*(Lx
znY=)B;LnkcGT2tAXAMCG$pn9#s_V7Clf;Gk&)lmBEceXkP1w$E*zZ-}dG*Y-irnS;
zUB2KVY>bbfzIP2{Vi0m9N0ERguzGIR+4;MFYgz{tw=9A7E%ar6J$nh|ivVhKN&v!c
z<k#PwKmRUsg?Fu_>iLK3L3zupPcuY0xBNU0*W>G{mGE3zLGL1Ju?$V1vx|FY$xc?w
z<Gd4&L(b3mTGx1C9sd54unwL7a24XRr9v6(N8ya-hq=^(?1yXs<`idJUEOiM`~)9x
zqE47^Smzh94i@}0c7E9L<8^g>dEE)9x}x!qXEqX9lKDuYr4WxWkK*@&f7Y?z)nR>x
zzeCL-R??qCc_xu#B_&E)L&W<y_bCN;L*(ewmDGh69V4SJ5t{gR2b at L$>H#@y+TGrq
z{GFa64fRn^fd|pO&Y8(?bxp&VmL6r*AZV}rR*$l~7b>ez*BzW$P>6M1r`-7w|Ep)b
zP-upaXc(RjIN-Vycusuln32$IFgx4eWWYLg-a65^jvUvqyTxW$??fH^c7B9 at pAeq6
zoUg-mDM1EzA|(?xgx`CDFL8Ycxu8Em*bKh5{sgz#dF?jQu8jQGoXcSS>q7mW;)-(_
z5>~$F&x|cvyG^w7!F92VujQ*T&)n at G?hO_A1Yhs6p)$lL#IkN at f0tU|t#JKd-s-I3
z_55a6v9RtbLRj|<T#e2)xbBbg7h(HmehGgGBa=Vj=2y-<cNzJTP=?pp4!9PJvCbsy
z>!WyE!}lC_c$q5 at z6a-9qQMic`M#e2q5dd;_VQ(<6Tv!Fe7b9gs}!Lr0=Pz~<P<w%
z?RJ!v#!gD2oP5UOPc=)Fvu3E4DrQ%!ma4iI^UoH65Rz(W*bW-_FM+^woS(Xex{3sz
z^Lw|j=i%PTM0*GEYhgb*-h%xlx=ID!a8E6krNXlD0&k$7yomWatTz(R8|3Tvi~?VW
zGZT+=N^-N8uk&Gqo<9obDce0yLYeC}<n^Q6^Yma7=yttMDG<sdCE%h)+q|$+NdZEr
zT<W;o%>|Pd1jxtCv==-#D*wfCDF9PItiRJoD-4Uva_T9?u|a8e8Epz0lyxj4H6VhK
zrDY1wU>Rt4K at kD-6u9)4JMWOQns6>YaQ{d6o=bQSt<n2GGFs4%-vke4xemD6=r;W9
zY#{K#yA{;0<x}(NjsoGcTGu((3v8hK{rf9sGQrh3r7Sa1==Yv;kW22W!1kryb}8pQ
z&t7#7>bY6*T>i{Yb_KZ(!a4uDL+X6vBI5OT;93pDYYDFylLo+_ at 1383z5EYHou87?
z{4@~2|FieHVc_Ye(;Lj_JTphz;4f`jl9L|<*UeJ at nbqp0a&g_<FXF!umkrcrgfYaz
zbMzbb7~by^TbeBmVPFSJc<Jhj)$VU*zRwHD7g_qUE0X;y&Z&gsS&$AV2;G>~p+}0H
z!}*~m<JQ`uQGN<-n&&U(9b<yAa4h*a8ETX%RLZ!XFVXs;2Vz;lCddkc%)nm|&WQg~
zR(XV6;@kkwr=@JAS|YjUsrN0EEv8BSs+Le%hgz(6l`r8BxSC*@LMVgteFL@^$Bsfz
zh7z{2=|%&8vw<vO!jMq{K0jv!pTvLRY7x(BF%Ke-EeZH1X?eqPRL=nU&kwFmLOn*5
z3!S1|xY(n^!S?j9y_ at KKV(@j26InR;&RE!5Uq};F#9X7HY=ABV1!Q4gfQo3OzV(8r
z2ynWxADbf&@D&Xs!%f+b&+*syEMr_VoBfnBi?yhB^eCl&*vvz6f6ps|f_>M+zB}+3
ztil<K+;$|wrVaz<<W#TLoCyTA**UVI;jax1;pxE<3QNrDnI)FYg!I5DRb<R+a%OSV
zASR-L9NO at KNhwe2$Ie))4h{EL*!!^4mkE68Ed4g at bBj7k<wyKUO~Ky;@fzL>F|L<f
zm(ke)(oBJ78=MRiR9q$e{0)5YhBa at zv1SAKcEgizyurup-hKT#`a$z+hx2>g)r930
zbBZJ-Ezn@&lcu8 at ydKwoas#Tjoc at BZldyQ7i@-Tp8AF&ld>t3tw{I-BFu$-ce<AxU
zi0#V_iHid(0ov^Oz$<%w4CS)Rkm4<BmTV!uhU+ZWS<HXqLbC2{DEChzdiRC2R=sF)
zM*GRRT<8V&$UeIg<ijosU{`T*L%6=NI1f*MW|-@~AU`{|iEDg5A4+X;Jq`EKY{z@<
zGIkENMRG$ZlNJiRfC(dSvT4ZIkh1k&IlYw*TQt4JSkTupBPEA9Krfj8?&PfWNw}mk
zeFW_;VJ4-?wK7Y>2)u5h at Qc2=!XgsspdlTPLpo{%+TinC#>Y at w;q%0DBz}<QG{-V_
zk?=(LEBFbayvX!oun)_|8jb}7O(H`WirRz6IkHmkA9CSwSmiFS6m-Y^d<ob`j1=mV
z6itxc`c}%U1N-0yM)FE<SFj15<x9vH;rc-93Jq8c;~oUa7q^9k=(o!hN;6+#3hDp#
z*Gh#j9ygXMe8vIpJSPahRBa<xfCASBHH*ADeCok+;(1gq*5B*Wf-AIH%M#&4Pn&Tf
z=Z7riG&Kx}_P$@bdm4ynY#^fHKevIXhmje#{}Gcz6-oZ8jV5YP9zqJ;{mg}@2q$?%
zx=&gzrOG&_T&j|i3lhB8>L|w_rQttC8C)nV3lM)NM}lKi4x|(32y}f5>n#!MEk-<>
ziX{FitTora2!f3e-&>2{iz04`@BIiF;%f1|C-8d~&*$#CzG8v+-WuF at Yz!*@0=D;p
zSpGQvOguO&e&+A+Jw|+Q7XFMq)t#GdE#&hysA=~{Il!o)Dj)24I1Y;^M_f04E#v`s
zPt4805W$>+-VW9g5|TCo+T#icAA;b2^Bziu%-lG9{|2&&iS5F_SR#{CWE0!zbznOs
zWhsdo1&QE*2NdnVX$cKOQ>2Dv8A3w?4Mow61R;!~kPvnEL_c6+;FBcV_-ZQULF at lR
z+<SmUb#xEocW&8A*}^VuDa%p>6e$8?T?>d6LB)!qVmCJI9SdmGD3Y~eCsBwcQKMk6
z#2Nt;qhO-1Nlet3LX0t*80C)N%-nl-7d7wi_kGX*dHx{_d$0G-oH=vml$lfLR`=;7
z&h5pPeO%r1NJm{e0&^2`E!Hnb*KHj&yT~;@9AJc+JlrGVr)j2QttQr{FAQRA)PW$i
z&1ZFxMFZTujd7I1+h2oIQk{QNe_o(B;s0n-5<LhP5v4Fk&}tC3z$p;L-2R%x1aN^q
z%eMm~Zs#ol%<bEGix=nJ2CcyC%1U?<UZ^~IvXYrnM(3B5!29q=SYA>Be1LBWx*QC*
z!yVVIU%LiIfDzZPN$}&^#|ZwWjvAZfI*QDZglieq#;Wcpv(b4RP_RHkbQ=lLGA*)l
zNldp)OH*0^=thW+v)}~-?$;3%UxT3-!JHc<^(hl at 8ttgfNUmcDPVpR!AoZE$NSBJR
z8s%uh)flG=o7$BHN{&*ntP75stZj2%3V0E5$%wfqKrDTUPa4N;ZWu#8Q_C2)vKNcW
zq&iBRqvof5P8oY0Wn8ZU{d=69ZV^o&SW>Lojw+c=o=34Z#uXt(PQa+e$NtSp_ at sax
zwU*;p6(&RUjlvN^jj%&1l`DmU at 8Bc)Rzo}R9W*l^@-4x4Wo2db6k1zW#{Ws`@S(nc
zCa{qDdqPboa@|ItKLq<t1e=1=BHg8pRTJ*&ZPxivrVu|Z>uuCvC+Av{qZNB|Q&u-E
zW%Kj#%?nd1Y$3X^=Cy5bUJv{`+AfddL>U>zgbEaxh)h?bkZ4zKu+V2Wj99W{#D=O3
zBNi`4f1YeVd2-v+swdkjE4MwVV&5_J&%Jmdx4!}Xy>JozZO|C=cLI0dzN^5vV~1z{
zF8Bw0yer>x8>vNQUr((GuJL&OLu!mhSv at tbHecG{hR_{gFd1n#ldrqNB=^S$MF`+p
z997=@UaU|z+nf-Fa}jCda5Y}+T8ReXjg&ze30RpYeHMTlmE~OBl1Xn at y*+739amm?
z1AzPwuhoFDU^5&8e=J$;#{ALX?zS4QAADz1&9&5r7^YqbrZ2b$R45f^^;O&a3qu*5
z!A5&9a_=S at Dk#oJ=jLtj(S(tRRh(k3;k=M at 2In7)4ncEmFEvOB3J=m{@oqHEm4aR5
zv0}n~!SDNM<j7^qzWy5iJu>GozYnzE-Zk~iX%GXNe|n}%mtBVsA0Gbx`&Ew$3*k4v
zSH1uK at WY2!*=*&Y-GvJm&co`n at 4mZ6SYI;4GzZ9gX~NtwH=m)G;Yyj5;;535DRBKj
zI~@tnuv5u1&B-$^v|M at y$=e^<`?&rz)0%L9?Ig;PKNr`qWwgC1A*-$sV?c8B5qUvf
zByynxxsP+xZ6fV-A`(XXQjpuWmp`x(Sbj2Tq<x()*{2iwW#=MYA%gnMs at 7@cO*Ni!
zT}W~yCg$_!bxBE9ReMcyO at M}3s{vV4DXUheRWlXg<=*NF^J at 1>V}Uo$Q%@30Cna%K
z4?iuXbwdwnHSXvyrS(JK<eE11_4Nw!Cng$L)yr_2Pq5N;v4+dC>bvT@>bjb``So(`
zLG=P%-MVX)SypW;w<KLFZA-tF+V-w(sCGb+WmQMIMuG?`+$~&--gEVK_j2=f^#wkZ
zw^o)#S-D96$N)ME2$gBX at Cd9@VKZHF&q7NtOj>NgOs}TR4(GS+*}cb{{M3?>C0Cj#
zE#ZL!CJpTyu5Fs#bnP#>GZwA62oh=KgL(iauRMNx+=M#t0EF<n{u2`(UEDWfz=XjO
zfZk9HJV1ECMn<SNL7hhPvr=ZJ+(=}OyO&PxpRCuZjg(2j2pK5O*Vf;wC7GvuDmbN~
z!l<oqT}_|#!wFn!8<J}4$?3Sp9H`gHS-mbKlrbg-YBgLut8F0<)Pgw`pbUISGlzgD
zprNUD;N%M+5JrOuzrYvCP%C4=XK)dGm@^1Ig&_cdt_J~<WIo0+8A!Pe;Aetv8HnrC
zk=!{}t6am#6|9T9rnXi{nkT1SPRmZRa<sng#YS^h9ndP|G|n*M<_gfv%5lBq`ue0K
z5(NtMLKr3x+~dHwr(ozg*t#6vYC0??<pN^4J(!#qSeY$jIxpNV(cfKm29oI}su|VS
z>LKHru+5WAO?0Ys9jo&)>vYLcLWInd!;4fPtNuKRz(7coaUrycqAPqtD%@5_;T#MN
zB=<~`Rc7?-!^t?go2EVq(Hi0e1`keTsh9w?r2J&O#vJP at vEewWoDow$`ga~EuFiO8
z<;q9DzrAv0eD`8d at y%@L)j2V<U#6{S|KQ;Zt(-Px#*pZcDFyIX_%{v&0{WWwtifq(
zfF=bt@#{LZrg~cLPp2+rk5S8noYy!9Hj;pCtwApN>J^#_MR}ZWsaITBev=iJil(dM
zT6n9&JQQqzB04#aj2CBzk}4L|ibV??CxDJawKqfqN#(!D+4L$B-gCZ3*@)r2)4Mc|
z2FmK!ugjpm{dzyl%X^z1BF6W4dF}Ocb!`+4q|=9dU~+RCJov!G^_XTRzzpV@%mc}d
zc2>2 at O&7p=dzo||{s_?8+S>CCHQhhdqz|Z|jChL~6S$&6MOEll`}=qncy08 at elqBD
z8xgp4*4ZN7D01yUMnggkap8!nWodo8_1=>l5f~WIir)?B)_grPns2%YbWfX|+q-}F
z9$ZsPNPN=>Iu6u>ffW_-T^I((5xOS)k)1~wko{ql6}aijT`K95YR?o#K?#}Fj6xCy
zdzp=BE4R~gu_ygXCRKaU5-Epjh26vW#bGwJaS=p{5 at I8MW@pHPiJoAl+FN~HD|8!!
zfK403RbVwWnNsSE=|HRVPbQgD5osF{X~&AXDw%E!jb*U~Lu1wn^QxzXDQ7^e6EPz$
z#(cytbx+Q;ZRpcgX-dc}+MI6HgSL-WqW>QKv0~-Q74$_|x2SmA+u$-V<!mor2pj05
zwb$X>a8+$xT`iaaW?rvFI1}@l;`lkM++9W~TvObn{F$6<C0C$8n8GPDowCY<kwL)|
z2Tnekkpb9jKC&<>x;T48EnS7@;53qZ%Sm3;u2!Y1j8y_5BPZs4q)mpZl&hP!!Li*&
zg;t3aH>}1fI3>$ySz4=9vT_Yuui@&IZQ97uAC013AEyOz*waX^wVXZ$?%si20Q??~
zSb2)ghRwm3a1ftDcg%zB?Q!k~G at cYI=ML1Io2FLiS*9vbZ=^Y*Vq3i!Eudtq7V``(
z(zVeQMU&8X+ at -R<o~su-SK?SK3n2c#o<@2u&7DJL!NPOk*KW-xWY7448})oE)287(
z8+&o#cA6o6goqCB<5)9l7NN^-2qrI5leL3Yjsz|0$B3cA;eV_eZ@`mKcY}vsr!{D0
z$ik9~00BEdI?p5y|1tv-c#l2&!{TD33U^>9EV~HIvvYc|w3li8iR7q=6(7xGvm5%(
z-=8-nK4;d_f%B*JI)CWiba5 at S0IlUv#Q)vVT5iGy`I!QBULiV<Fb&E2j8WE56Jynh
zt2oSPDG2iSEii4w={m7$nDp<fS*r;NM*J4<JO*k#I76^rN8f6+tP4R;_|xsHjDcT8
zYxs*acx`oqk3rJ`!GOJxfmZl8r<G+!SPB1-YO%8O#Hy_bw=Zw9n-Fe2speL-w+iSK
zj9x(*y)?JaljQkm5H9ipx77wl?^!@q8n6)@E9C9L8>5ZfdW0~9Zfwk&m_+xca!a?6
z*+byS%C&5EIo~_AJqMP%x-9*WE^Zir4H=s7n-Y>I%@1)LZ$kxJ?(bWnTJ3()KOkAB
zlc&2XymXorocpgHt#>(E?|8XO#uVW(Qn4J&emLh!Iv#B|wmxRBlEXww)pM9lqX$_W
z^>O%v%oh*7k*bCOYAWK>xCTuym0)%8Lu at 2enX1t-Li}D$Ez+E=THgvkeFe2TM47Kz
z;aVXp55aRvfI>6M1->Dx`m2*n?}L8|;h6n)_aKF4E*@Ii+djj7QYfayA{3Xo+oSRH
zI`n`W><F}0{Sp4uf$l1uKAqM1CgWT=2w{4Juv#2IAg}OT9iT0sD%>gqFuN4+N5r39
zjB^Hyy)FhRaFDwxBl80!yff3b&?7&8OXQ2wn9nEWp1S<tr_YYhom2$Mi@$-t3DO*R
z6fY6<qa3te-$FEnz0VbTSH at l8qSB!S+d$;ARpG8KK!T-$!)9?TS^^Sd#LgQyxQYHz
zWRGwNtAzb)1oo&aFX!(T;`WJNj at ma-kye#|vQnp~6egk|BK6QJZ|~n;*<R0NVV>n`
zs^ls>QAceA9!z9?qqQF<u;h%`#0eY5wRTtdqvfB{EMjpnJThto;m-xu<f}738NGPc
z(n0fbxA33b1G8sdz}%YnN+KG*#*U>_R5;R9G?B at 2ox7e^_#2y8bUw)u#Ja7)3m$8&
z8Y-Yd?Oz_jgcazGs|_b3aH3l**s*~Kf(%*`c_dVvKpLzJdphFjphX3R9Gq!2Oxq4a
zvoitcmy)n<-g1^*v;5NWOZmt$7+cb at ReyB9$5f`ekk1&K_1)DegSRbP18>4Vc5Q-_
zK;dRQQU2 at SGVSr~m3yixcMN?9;D9ZvHSC9E|8T?yW?Eg4#>}!xZx44y=|$N8dBiy>
ztB%~)D+=6{m0tP+BXiOVgN{F1Pi)1wY27vME_iQ&D7=)GSTXhX|E(Sxt&2PDs&#Q=
zSU05h19zIE+|hqA(Hw)M1Vf|*>xs2uJ*JDWVEVQVUbzVlAB))%lLF`t?}E6Suot<4
z at Htq-UuC?&S4eco_rg3ny5T1njxX?-NX|<{C%$McyZY%B9^S4B%0;H&OwJa%)lKih
zRhrz?1>V$Z-;*Z$oV1C?WqQOcNTS6~u81=@o%~?J(i8o<%|E`hQ@;~SXWl;U9Ws2@
zpY%$8;qe|F-I%(Drfwbk9-{O3*$tCMTJYv2hN<A?53(jC$4E=7hfb$AC2MpBwZcWN
zqd6T*C;O86Rah~vuP1&6O0|xybW;|15{vywoAZdnXj|yxXagM=%funl(6(UWbOv2W
zFhkR!aQN1XYr%J4ux0EQ->$v5m4?IMA3@=MbjGj13eP-(X|xZ2m!ZL-NBH_z{s1y_
zB4C}gZ at NIH!FI4aJ`Ep_cTXid7}xuz#`|HbIZd>ug*xEG&R&4;cNOmo&y)K>&d-yv
z6Fa+)U}uAYME83i>3%(BA&8HKkZ3ZpMx|1z&c1yN8m%WeJ|;zbWEPDh?E)CryYH;d
zbAn at M%*{#w53^ejZoTlYhE<aRn4N#EWCHq|82X}9R<~ZQdLLZd-wUJ-Wu^e8?Zl$~
z at m-aw^HX4Thwd}hE*Vx=w-4+Bt4`G+%QbiF;tAb1xHB~TW$}l_%`)euW(sx6er9JP
zT~$r$J|;Mf3XT;lCCu;{T7X&aNsGmD56Tj|ukK at QIj0-Y!<wbn$BsSpWx-;la`DPX
zzpb{poHNhpw_)ADVa$}j7M6ACIB4^P4m*|IW`nSulcv;Svvk45y1MVdH2{}<wYB(t
zL`(fCic9CdBXv(@jF=x9DZKLd1W#=JCSW{;g|aC-Ga{-ZGIma%-DxN2lsW+fOt#KW
zFwe;3w5jmVHSh5=>9^lo16)&E_>>vEqTw_!uai$q)`m<U9VP9-?`pIMKN$2D=aj%8
z?$cZVGtg`gCUYw0n?*XCKNW`bHchyXPNoF at 3Kx&SV4Wtp at xGr`=O0)AJj$CG0}7Nb
zs|_2~C!3JusATt#Z2oB_1zzNdIC5937umT5QJTOW>4r<oSFRKo;)?uB$EWt}3qWSi
zsmG`GAe>R=0Y`2whQA at HwHZzp8KS;;GuZZg)|lL?&t{BiC}&c~%=irPMm*OY5Y1v)
zrom at 4qyzzyl6a|^(JD*~2Qq`kz6?9anilnh!|{4U%Ej=WY^#R#UA`5TBD1f&{EHH4
zwb2<RUwpY&T#F1ixR>yT$#5|HIXi}Gj&O=-KT%HO=@Um7gl82~exfchL0ABUuJAMQ
zEc4G_W`ozs?9bLPpl$Yw!I3`iBn{43_?KB9 at ygB6E1M30L{;FU;*k^K-}46+cJ8}u
zes$^CiFev+gC4G)G7%`9Zt{0V_Z+lyry%Qc;Q(@$pvARSIl*I9+9E_VL*sJZLgcj;
z(aN&&hMgx*R)W@`Rb^%6j(IQ at mr?=cd5af&!6{&!&yj2N`RmuNT_>jiN4T!S0YOQL
zct9ZPIEapLo@!T8&ozjYVHZ^vMu31&LM%CvpmX2N6m}dkGn2|rO+aScACG`;<#^`1
z-05)A^xU65yEJ`9gAz%?^}Y)PouydFMO{2k;Lod&ZvO#Shfj!rIG)$lH;Z`k5e^JY
z3j8yB-r%=Bn>)~<pu;oo*ec!zv%x4Xa at Hnz1%A9}Q{ToKT=fkw3iSHzqcTC~WYdxC
zwFn~=_9R~GGl;^hg)<xI{a?2mIdbGAhr$?`R0D5p91B{21I)hEsb{WCoBE2vh!x5|
zE0=<D>HNS#_Ox*p0`SrbGno{Un}mwfzUqN&5CYB{IaenpJY11o8WS567aShmbat!m
zpaVR;YQ%x0xVWg8*x2a))(m#Z&UbQ at N?nP`&AnavWO#Wk-+ujjxhl1>BtWC>J`Cgf
z$jb({7U9~H_)Rm2o)ZluQ76zRU at nH8wi6~XF298Nc3k>n`Y`<#UbbKS&KAJIU?JZ$
zJ7S{cWJ<;{a0?dF>%=S3j$R?tW3LNje(I6g$FM8lgYqBvP~ctu12d&z9et7M$!DQw
zr@>5FHunedza{ao at d+H_pGeWNAhN=HpPpI^THozKXh<lXUUp^dRj>ry{O!hH-vc(I
z<(y>h3VrO8tFR=RYsIgoyLKOU at hgQ2ehvTNPr?CkJ?H_dz?TaGhqSoLUo_Jmf3IEh
zk6Q4_p=QB#>;`r=g`E%?3kVGZ7E;GIJ`k&bS_ at i8lYXxNIc~8qrGgF^5mk8|G<$q!
z|MY#?parY}XDmJWtMrG9%*#r?{tWhp-@%n&sF)Kw7j~C(2*0GxI};jaG3xCqep_IX
zq$-+nU7|%Mrwx)g#Ud69SkHvSV9b8xTu#ej&-)g1>e3;9dP>TrE~(QNbWQD4(D$FL
z);aU$TwgybCoC+d^O%w=bKV}ldM5BV`k&5i={skEp?FCOJiX&MygBQwabqw3 at yErn
z<KCJ8;*ReC9a0wUfR8W3u}41|I`qJSp&dLIr$>7&_l(F{@&1q1g02Mn5nU;SqRb-4
zC3+7Mt`5CNR0ZT=2u?J^zxi9>V>rCv7E*$)a%Ift->$t?0FuUC*m7;cl)>q%E&<>Q
zAJg%oHnb7(<60O=(_pNi4}H1p$@Y0&Lo^fBk?jQ>W^$>B=lKc#Ad(G%Pi}<BX~GKh
z2_ba-(d^}uMw~l8V&u)6oyU$Xdr1}VKCuxr;kxOTRltY;e6VTLW}v3)pXJf(mRZ}^
zeFM6H1fZw`WUQFatrqJziyN$giLV4`<E2Tj+R}U4&_19?- at fHI-^RLI%U5n+#526x
z$Te3_=1tF?UQNgR^B0|g(@pGqR{z;<ffg>q?%WTE7O?-0bfhDpEzy4bBUYBcnl94=
zgne|XO{cPRe^hiGp1<JcrWH*S7Uo{5&YfCS)oa{1cHWV*kgwTwcyUp3yvuT9Z2!4$
zja_tR+lKtSh2O$3u8!YQfJ;;(9^MS;iR;-dXr1>&y$h};(pjG5Xp#_O&!&a`J&f=m
zF=UoJOw1y2FE>%xT}(*ylrc>gtqDl<3-Qyqxww1zSOWdMyR_~a4Ac`BO@@E38QDF)
zLwetWVM{XF58js6J;pa6Wya_(;i<9K=x~3(fT(u8M-9EUu4TlEM5gm5quT5f=xYu%
zn6w@;&f6o#EA~w7hs7(REFFq^L|KLoT(o+sw`YsUP#UP at K|ZN1I<{`zwt4%Y$Q_wu
zd#^`0PD8Y!=KjKbgk#NtfO0C7h+S*ULOL7 at 7~=vH+2=1Qq=p=V74(TC6DN)=IXcwh
z^{8p)9^eJ^yLRt}e?zb0IuQO-{VA{q{PCY<#cM`otxssbYxLQ5g at 1f~3{m;=kB<oU
zHlm&Jq^2+SD}BA+xLB5yAjb%0hur!FK7`-W9rq3y(s$M7-u at mnAzfEJ{0VrxeF!!$
zEafl2-#3FfVBpya3nusJKBH-DUPkdxXG at ANz&j__33>n;-!blY^bKk2A!a2*M1?z$
z!eu>`K>B77!B7I>Fv(0jgTXC&5|WA at U@^R{_X%q6ZA>-?2AHOGZ`vHtK-nU!`!qlQ
zKyznLuQs82A9xK+m&yH-yF5SFCDq5J3{=6fbX)L=pHC30`b5ofotmV;Jg}&{r4z at g
zKT)wk+EAFxpHnK#Wo2e}VShOR$%ATkp7cE=9571o8sNUK0nRi6oULy70 at U0?q9^Hh
zgVry>pl at aJ_3>J24QX=WLX!~dQZFB0Q!Bk8!B1=W3p7Ji)T--?30+%xbK5~n_z;wU
zwk9`kM!rVDvT^?L$bOZ@`^T}YVvU^fb~C|pI7Y#FZ{P0C5j?-V%Z11^i1$RInGHtJ
z2wPqn%3jGrI=awlLY<B?m<V{Ie at kO}zj;fZf>`)D{0DwsvS-zN at L{fPXZN8SC%*I9
ziOR9##*I2%If83O=XTqf859F6`A4v_cq`})zP<K|N)`4|utL_*0WA43clw!=vvH~&
zanETmf++xNsUTE>$<yexb!3N1-y+NztOR=N-L6eN!bc6BU9)KM;zj>?xpKwyF(7T&
zkUm|qk_YYU(|5fsbHISU8{f_7!zI$QyOpLS#O&V9Kia+939P+goUGy5m1((%)m=hh
zO($!hDOv-^5r1<hGCZERP-4eT#LU>^)$mvRKe&UFoIcKZzLU$&0d8OhTt(hZg#B0#
z?hEN%lBr61*W<wbiu(t^`U-Z~OKQsVd~WU(K!GW69oE-hJ|_A)o}K at Vs%{`$ERk;V
zzfjYKn_%;+Dth3fS5<WJCYqb$;(jWw&rInhHYv?am=39{=0JTgNsA;Siuwt90NEzR
zvr#i|z`#}<2n0`{394jFvpzTlQXi5Ii4LjRJ9>~sn2VU`95|qizSV*xI+{+B9y$BJ
z=|sObTt^7Z!8J!P-*@sw!ud}8vDd7Q2swQy0Z0x+I|36oq9TrINLI|n2E#019Fd32
zhiq?fgBTNb$0GV7e7U8hWHZ=*Vqr<ioYVAT(VReb1vV}O*@xl!8sP=&cap0kQfi6l
zX%7s75Z8!_znHH>LU0-8VLJLfez0!X=;Mofc1s&O0X`wyoGzm#H3?%5x~hCe4k=w%
zI%K4e_g<Z`xR`EITx?Xhkp9l2H4-WGr<c;8ks8p=@eznn0-88jU`Wn~HJLODxZuX&
zlL=$fy7gR)JLd<}@8QnJj|^cB?r~9|F8Hre7rMRP_MTOZe1Ue_eH=;%&d-o*jPo$!
zOB5>k3Sr+Sl0U+%B*n~-#;LVj2F<_%un07}02fumMd!IXXa?UskK_WNH+b;;d;IPq
z)b<gaD;vM7cf7j at _(HTOd at Er6X83CbT4VFT@)tXq!!R4{d|pEMMn91 at eX*6{Nsf~n
z5hu1XNW?bfOrC=pQzy6&eJe&W>zpWa9sTix)s0B=v$82u%D at w6;&jFXNNt3dP-Y2<
z{Fp<>Io~I~n)is0NWR1GPCfxWza2mCu3{g88TR|V?DysDeJ}&rRL|jPZa?u8qCzx{
zGBy#`L^irHy&1UuHTQb7%Ws)De?DAMjV!@c{6nzo#MHOO!pBd_x_3Vdf_7}@leoyT
zGMF-J+C#C=@dTD)(x-wwi2IaaN9(_hRq3NsQ(6yinKv$}Slgxs?{s?VZMp;AF1yqR
z-E7K2Z)z7f=xJkCdkaVAPo#qt16qRQ5F-#-f#yJ(EEb(PkPEAYPvJ*!F31OI!2RlV
zq`^FUXvE1 at jSqnWkwD7zbzlb=3&wyQ at 6?@ycYiPY9o`f7{_e872^}W9(a%rv36fET
zgm-L!qs4!3M(C$6MJbvid>V)*ZZ_a_NN8>8v^d@~mesHpb4VbmfS_fkK;O|LVByVn
z{h8UnyZ{>b=mqQn%7As-o;zG*IbQ{z at h!`mmjId`0QoJqVDhc^fp%2^|BbNcfMAo?
zpuTV&D$1-C3;vOOE-bD94M-XnlHG-M<@2km=($y5KOiBk*Pc6fcJ)rf-hD_3E~ax(
z58r-s3mjk7xfB0Q=T3wtVZS*-A2=3>lzX!@rVZ8uk-%jqnqa1)$wx?e+d&PIZ(u&5
zg*_rI*y)msBlmZS^m?D%w;<X%DSt~7=I+K$Bl~sxMf>11_H)CrA>lwAE`o+W08Lf&
zw^h(o#??Kq<079&!qcz$(qf#we2IN&DFvFLD65O7lJeF>v1*fn6 at 3QIV*+$h+YEUg
ztj*;BXY;UoMUsJ=V-xgbO%N0#1bA-S11mx2J=-So8qiBXFaHxlBbuiIcHjHZiqVR?
z{QuOKcND?{_V1G;YbDm|N+WemukmC|t{$FVn%gzC^_tq68sdVaW^Ar`I-@(~iH8y!
zTSJ`bux}@(O+=dBz)Z|H!Y8lO??T at xp75jm(BaJNva%Q7mX)!2wa^uQ+&QxSY|w%Z
z1wPN~paE~CfL~wt^+jVszZEkPY<g;wRjuIAV3fe*LU{<u!p;lzw6q;vT{L=ylA{$m
zhC1Y~l9A#AxcUHg{WQw8GKChW{O5?j0H;tYS at a{<v}wcshLe#iG{140-v$D!-W4d^
zfZQF(G=S3rRtFeL)3uf3hq5a4w1#t4xF|JkgdZTf8YuBbic(0!%KTDAmp$dbqdQ-R
zdI+l^g!=1rXa2jVG$JbApZ<YA(lDC=@MoN82zWNUWLD5Ud4KV|<Sx4f at w6sXd#j6Y
zfHxCi^j0E{8m?)Gt*x)AZNOw@^s)K6Xm+_D)Z1J_c7+}cvQdRDtHZ^z*Md7xG{BT4
z6>$#=4zmYsiq&Sw;V}+pqPzYDTE4Tia1Y$}a4x*pbaUza%BvOUYHE*c-*Yj4$d#$}
z+ at miK&;P(2aDLs7KX)`;9T>UJw#@eatSPzkyn0?}5+u?e_8AuH05V#oQlTIPrWA})
zc8Es!mop|RL2i<<|Jyo%ik3{Oq6;%lF`8Mdkjq%5(!lyCQ`oM`{_FtdD0ZB3j&eEs
zw$jFKQ3`bciDMb2LBPeG=f}fG=jjdD&zb%H1yTWC1hC&z4*zEPTXtUI#y%zTgzy%^
z69ziyjbe#6ibQVej+oR~L}{4N>i at 6F4Ev^-MS{6pMPCC9f0`b4n|}^}uM&ylaKjvd
zI51w39N=0JJwL>%(y}U(Ty2s8jZkeHFH42mCd&ghN{OJsYg`f%7GYubB~qaZO9)8<
zASFi>3jgB!ZTF{t)i+zjQES340<0R=CeNc~N)}BmYm&1Haw1(Xx}^h=6>zPq_ at FA{
zZyt#_suTaR`*gpmx4r6Tjrt{g9KEci+8xzvWv)8WP3KrgjccCF#x<{(e7)VZ6ygY4
zt(J1vy0~dwU0oXcdN<Anh88Tn))1KXqG$VAQ6^n8Xub(@!Hk<9$A)H=`D!D^vlANL
zWhN4Reh$Lbc;btXcjwz$wPuaV+sBPEnEYIgjJH-3=yb?Kyf$4ao2Q2%FF?-O{M-VX
zlN7v9h<h|3IbuBHa5Q0P7!!>3kC6B{1B<_K1`FeQ^T!`=R^PmL?`AbT2TMVJ(6$=1
z1^wU$@LV;!+oR^fg=!Cv>I)ZYJQ_5fAQC9iPczR|t2|*H(pvt8b)JXc;LnZa-hD#j
zO{{8HN+~m;g-H_{M-)Z0CWVa7Q!9`RL0rD(Nt<Z9d_>HhYyILKEFa4x at rXD$Y4;GC
zpCg1$gE5@~SCboB>>83o2s^DEr)}y3uChE*%!s7Huotq$O*22iVJE&t@*m8urgMIN
z2)4kPJGRr8o<|BaC%-^oj<CAAvb2d&nbeq-5U3l(b)ceA>k3Q>vG^=I#B7)9aqNCN
zt?D1P3jHp_B3*!8!iQoqfg4w!rd(0WB1$x3;{sAtG8LWY?joWE<HZRvB68#xgg$UL
zcKq0JMB at knnHRA|JaH5SZDaB%osB!7w^15bZ>0{&YsO1cgY{S9N-ydQLXr=&Ll-03
zLt+AW3cJutB~^iFVpxGdx)@TIUQ@!vwVuM&X+oKgi4D+{JtFCUM3+$^T_)J7=WMPA
z)M!l^JSlH2=VDR|Dvb!!J)*%lfQYlJFs!Et!Jb}e4Tq~5=`aEm>^=c3vX^j|v)FZa
zPT{SWQ*PckXJf5UH_=mOlOOPQ-Q{*rZPQ at g-RmH2Grp?3>y73>9kDKHbD%svK~m(y
zCSOPDx#FR*;RnXw_z*sONnO7R+>sie59cD4{%I{pISEWiUk83C>)wIG;byoA4j1<O
zuD`sih(@rvBVN?f8bH}R3d0mO)9Ns at E%ZQeo~4P4w- at Ujs4<6_g4r;Fn>O`g^n)Xg
zC`dX at 6M~3<&T(>xEq+E&v$=)0m*nLwxqW+aUf$w{T(_e~#REiQ^B+Cx2Cr6CaXnr+
zD=gvv1YTEaB;)_e72w5BK;mOOfqw;>&x=GiHBwfq+KctzOj^oY>FSA?rnnxhE*)hy
zO`g(VV-Dz*m|<&#P@>}ot;(oXs+0oP90<q?H3uPC7#bYkA~>AzbpW>7)`M2?;(8nW
z4Q$GJNdXoK7q$vMhBMi)r3JKZ`HM_?jZf)UpWk^NNzdX}3VeSa(r=oPJ(JFq;9GE)
zT_j6HmPa_%%Ic=~h)fRCG3h3=PD#9pu=g!-$J822wHqUXD`fr^N)uHsTOEPaous6C
z%|n81sVXlcY?%j#;N5bP6vZ7Rcm~-$ze4E+QkCAn<T9?+V1#bP+=RH8X3rP)xTKda
zx&H2c>;<-;oo6rF8x2hNXNB*aS+SD_+Vvhlt86-BbIV!94=!WBuuDH<*&x<)ApX38
zRCBAVo6Z=-=}eSTp~K|@$@&rWXsT2ds4Uf0g3`d|lCFl$0j!bPt6PQ$)h?xCl3*H;
zEnK#2A$<OL?6PHJVJ0|sp?2c<MXMj&fJrn9*A5#rXehW0tNL{7mR7WG`ItHGUYn+E
z5OT;P*qEy%=fC$cWECg?N%oIZ>>XuGL8X&zaDp-Nd)VxvhB!Po6X1Q$kJK(R65BxG
z>ZNlxG71;H(eqW?pwy*OYjC5CrTSNF135Ac5{T6*nFgQGMz~-m{CaSc5%kldqK4^3
zMNF&JFz0qclYZAhX>CIs%mBXdJ~$})+$<vWl1j#sf_T{Pq(+m&CQ$r$o1pUlCz}Af
zA8W%zo1p!1 at be8g3DjJG1)m)M1QuKXHE_}m at H3muKc?MaI-f=-T!uy9t;>8B{Si3C
zKPKaq;sTmrKYDLnXoN<`7y?z{n%lUjoq&B~Kz`r~Q-!5G+ at sVGuF6+pFHK|)G!6_9
z4S~>qHv~u`AsKyk{@V~f>|HvjOIg;&(hV!$-8#Ks)vPYNhL0%gasKXXdWhHhi3g6E
zOdo`VOc^v_!lr>K)*(KAd%e82t;xz0>5ZL3YJ#`78i)l at NptEHYy&7Lxk5%tf!AUa
zfar?%L>s`Wa at Y-m|J*>L(PK6V*g41fd-ca at UsB6%X~P0GyI~QMpHi(3yzd&y2pLSa
zP+MNsh;S4V-*SgOub@)itj|~ezw7hTWS=-r%YT4<!QIbc?uFyx#HR7-bo^%|H);<A
zPcDK-(2-J93b|V0tjix)m&y=Va8~6L?5ez6*5g>q&h*oAIB&qv&8CGPfeXhGCaz3|
zz0ZC at N$Z?TBm0#-t;UWjIn5~0xRf#%w-mX8RiUA~;;IpXhK?&*ii6eBT7^o<;7}bJ
z8L?UwVgA2qkVW>J0*}#o<Mae at 1?@n4pss+`<*=#(4O2%yM38*QhtW41dW(3^BX|$9
zdMHb2T%AqrnxbG8oMQrR6ETEm|F%$XL}CypD(HR{75oQyUo{b2ezB8g`38soos%!O
z)Q at 0`l*%h<8KY39P^?0p@@89v%@Z2Nh--*LuR8XSNxOYs-`7X|v=RM#<&^1|5-<uG
zrO at 22B@FaqMqWx)a at a{6JBX9HYQx6BjvvF0gpV>;gg)8|F;u9{A(FqCYz)!4njj0P
zqg5N99Ii9F$h;L{Q9ihUN{d%)30+e~g}<TPdt-|jrXtvVwfbZW(R1^j;7*GLT%wlL
zQqhXVRCG8BNKEamlN`rMB22lKIE^<ioHt_Hv=Q?P!JVX~efIwR^WHv7lPVlv!5!%V
zy7{k{_R${uF1=_&Ck^cd;;|bUXxn2bo}HmRkcsje`l;?Ul)uE>M33_I`!3;ew-$H-
z8uwr^=H@=<L1;s?KNN^5&?&FjAC<`dD1DRt!R9q2VfrX4LhC;cPa+g(VFNCVL42 at -
ztXjI%)m>gm=~IBaLZeW~b#^lZSsy|oKu5h#!Tv~vrJF|&DQ^)!7KE3BuZCro0~35Y
zqjhWW*NdG3t;seKxWkbRl0qvOl|qeqnUf829GM`Ml%n*FCI|;^RXh)>05>a&m at 6-K
z3gA-`PUMk<FNijXLM@`@bsMA-+aRU?ZiC1+37w$c95}M$iKf~i9uY-&gn?>mReL7u
zb&Q)@p->q$=ZWD##5pd!D|ah(aW9oOuNPvC01*xr!5HDpqQb&Vz3~94AT6Pd4hC}g
z50Echx|H6yXWzaO=1LJvED|&mO5)SpRyJD`M*YbKkqFZ|N~*^#=uUbn#HuzVQ#yA}
zjaIUUpf_REvZZQeC5N?(d$mqmsKopb0AuDZU5F2u7cS+k6~K+al>~YW8j3(*Cc#7u
zljD5s0Xa9M5=lG<8WJh!5T6hy*bhNrQ at 3v`x~AtpqhnomT-vg0+xtKUn!*3TmnVzr
zGC#OgH1501{V9m*|G>4cQiXl=PhZ}Z^+4^aDSxEPx(6mJbvj1p<>Kw9FbVa1iJc&L
z##gwP`^qW|t9`vo{Y{m=&F|GZEC+|S3KDd2l4=`fAr=GMP1I2Nsrr8&Ny_X$%B$t&
z%y*JX3eTQG^eZW_QP23l5jX9CV4RL{9Yk<##Fm!_r_fS5hh;z{qO4R?sWg-_*e<C3
zFLps|#8$CgAk_UP!7u>KT|DdAvssJLOk_^q^3_dntl~aA#`yIa3Wg79SPOpjS-E!i
zt`|GOO&BKe^hGkfZ+{9?1l4H}M>+0m#QSn;JYL~=PZ;sh2{I47H>?+OxM8j<<t=}$
zS_pCQ`E>K<3XlR%;Gn#U2_rMoKTe66WDcD_e at l911;;KZDp~;h<Ji1OkNF)Waa&>$
zJ$T3VVWYP5-wJfgd at aNKg_Q)BnN&WK1<rKT-KtWl6*>)_YE1UlG~A1A5NudFpIO0a
z^EE5nD)h=y)hAp9Rjx-iEZ(SnsDbG7^kKAB?e3%TS?sgUXQvMba0N#L(a6xiNcACu
z%tEM=E_r|3t}T~#xX`iuXZmYJ+qM^-gfHQL0J5i2_Gf-KuISbWnPsUYmc|{l71kWG
zvvD1H#D6o%HPVp8GwL2>pX~`ETx1R)%zyNTGi(|^B|A-G(eOD`tWiT)09HphNj=fW
zCXjO|4&3+&t+}mm%YdP<8Y?Sb at 4+_99>fpehb5w_;wS1ZFp+N<b`&j6O5y>s<Ai^E
zW3PlbsVDI)3W$BMy*>~+;lHh at po72=(gD^Ka2Hq>30gx#oV{&wjzDO}|IIXGc{8P)
z95b?f{`^gS8k0!wZ~PIu3!;q?yCm9R3khwUBlJ6SvfN20ognI at h_16ZhaNz5)f#-C
z-ZHdCk^!R5L<!YR1ddKWD1xK0z(eMcufWccI1<i2iLYY|iV`aLhzWeib_4c`k28Ae
zB<II4ndJGX$0?2&nLz{AcU>?owacZHl<D~$x^yb&`+Qi-oO$!U6kHoet-n5JUQX+*
zfBF`50)rf`jI%%(ab;Xm3?H0=qYn$Nj6**<3N~E^ZaWqU&W~55*ayVxX&n22<`?0f
z`$#%t1P1%D7tSMw=fi1Bi5}qCI)dxKlqxV4=p9>2Z2Av)4~b1LxpSw4A8p^@B7NXo
z960|jMFoo at f)i8Z3J1`bs#uFCDEM>m6Odd1lF=U`FCJr>LE^axyUG;7Doj%d*VhrQ
zeYr=(?}gA~oX)vwTA<)wq4PA_9f7ce1p~HKRbBJnb`JE(pE+yn=-lZ`UQ#Q at c+-dZ
z6nWlC>gAH at xueI=nz;-fICnxR9iIZl-mAfuE_K72H!q%bu?+tC?zZO5hh0w%4*udI
z5OVinIm6{4zGES0sfNZ59)w+>DHntVP94Iw!+hh%Awe$4<ZSA?z29uaIVw at h^HfFU
z<(oX`ZY2EUXovo5pA3yd9OS^ddt at EORW05w=KGO7Bl%yj$B-HX0Ku>&DP`F4KR$Rc
zy6Rha=zE5~&w%gYA*MYz1Ff_6^Y>`qX?!l;`lsJP?ZlyWw1~#v*bei<nKNgy%8$Sw
z&e89jqt~2+KhRS^H+Zc7QaB#i(xDGl+ra~2zY+;9438&i$CDG;1ZhaLx at GwYF8&4o
ztg4D02HFUa-4@^!-~-ZuH3n~*2&`B~Nq&{U`Cr=Sb|H9SGdQ8V9Q+LY1&BWq;1}SI
zh298>p5SK;cDgtS$)E5h at dNjfJg{Y23r;lw%-H=7dqIbW0W-6zswihk-O1TyFrCxE
z-X+s3>lSA}1MT>w^gw<uJ<znU1o4Ft*YacNUwD1&l521~@ZUAJif%&I+yt~9=Am)W
zq#v_hDKw4)jf74OLZ?hJ%=(g6z)vQ0UwJOGRc3jgmYHW)cAE%4VUEEKv<F`knpq6%
zFHKMLfkVJ<pYGEy1CQc<VRQ?J|G;@P9)Iisq;wvG^Vr1wPBg6F;SR at eHVb3yH;Mna
zs)|{L2ggjMbDV|~=seV6EreN{B#sfyl?>~%jr)Feh(g~81xzA*z-nF at sc!&WkCdlH
z7z?w&&u<=XfR{L(?coLz8<NT9%HN{8V_TGS at B&9pbEmq2(pR$2;#_0JDb`E!8`KLW
zI_OW at 49?E%GA7>}UYWM1eV36@%ev+a?$>_E;JpWr+0xR|GdA@(H7z%1)W9F}^Sg9e
zTGTr|chkkp9{nPk1bWRFs=L1G{r6X0|57Fk-5ah at b;>SUmzv(pdr*ftbGvnYzjd1_
zxoz78haL^oXvU5^JilM2IUsvP{?*Ydf+K=`JM|9>l*a?r;luDRg5$w(I?gXcb)|Y!
zRLGl#B^URP#9@(5%dk*qXUI1oNDYLMcJJRhp;s#2X6n>AC3#kt^xkBrY3j5#ZKlkB
z`{BM`t-A*Xd+SGxU!4(^)w=b7WdOqLl`UFj#*Jy$PAFuuIi}g*9xdZGHEot+jf!%0
z#k*0x($-{IJ9v4m&)#*6qfHin&mJSaeL1zyDx|ZvOy9Job?0CM+fS^3Le3zCTt_;Z
z5%N%p at s#K~!}%;!BV(tEIUMe?JrN(4Q?AHzp{PK_DbXi55OL#BJyPBR6Tlo$0~GKX
zYyqFqbKy^gE_Aw!3xCL^5O@``^I#2s71n?jbo8dG;$rw^adowj^Gk;Pnsfqx7ZHs4
zq!Q>7xYG9RI~%>b26gER^X~H(uY;SQW$r=lkpa5`clxFQvBnpkOj{6ZLv6+4d}#<q
z{cCLj>@mq6jceIT9~$D<p)I`k91b}LhW^xhbVqic27Blx?&eiEDF8jCE-g;*D<-hX
zCz4!Xn5*b5ObGhC0ZzcLD>w)q=C9nwFmHrdJ^?-h3IP8GO1SI|z!RJk_+_It7Wxc(
zmZH#HK*>JfLeN~$;GW%Hn94Or*Y_#Wmss8m;V>Mp&k)C2B+m6g#JAp&8ilxylDeOA
z$u%<0anCbOI<~Pm-e$A>f1S2?@w8w4)$T at LpLRaJMvW@!*J(?ZO#3xTrIBvID7b6W
z$&;JFux4uEW`Itk_5(vVRaS0-yZuyJ>E_wOlE;6R6neNBT-0h8gGN_a^5^4{LY+pu
z-c@#uo_ at W|;Eu1|^jdw{b$Ah8y7qxyE8da(mAPGLzC+1cbso1H2zqtY?SNy at q!R3_
zqb4B=PNQa~HQSY%nc2RqnOvo7+M=mWC2zK;OJ={+J;Dv6udDKM6nr^*<;v-Ri;^o{
zeU0R%JPOdW&`tQl>1Ijx^y7P%4p*zR9v)hidf4>x$|=L}mCD6kRkX7B;m^BQs8sGQ
zDtxV4QT+Q)yI0z;h4m=s<i|A@)<xD7v_-n+&rWf-Iru(z{^c*|{x5c#;N)>g$F?HM
zm0Q9r;)nTv(V)47IkB;aV#z0G?EhAqmdAaTgZ}&MdD#E8R!zo0#>U+tHFX<}LI3Yj
z(wwgoq-*~rVw$@n0>=E0q0>^FP?!)WWVYD7^PN;;a`uVjF7x~#eD9NU=NhZQD^_fJ
z1SVX*cop;kW52L#yxZW{@cNQ>`46QSA!1+SJ_5z`Y>h(ogj&TGExif8SYz9`0mz)|
zm5w~}^zw!s&w*~+HhU$~D;3kG^5;lKP0Slxu<vk{B%auw9XibZ5i&-HCDN_OeVz05
zf`bdt?{VVCe#PW{EPO}5KNdgsD+;{0#eVy;qiimT9x#hRNI|cJ_L#*l!nzYgDEfgF
zFixe`dw6 at b^z!!5t5w2<30!g9^-zg-xiP-pzB=I{9r|h#t{gWFUfw403W4(CZ!R4E
zBkM`(;|UQUagwXJA%WLr4Nhqpt)8h$%Y1wO?9?@HbGGIY!9CZe_UshiB;S()4MFT(
z_)IoKtYd{s5E$Sy{>+9A+}|4(g7pijSDrDGVg}}hAlkZN1Am75dm)^(@a4<DZ at _g-
ziac8rNpE at i4*T^P3V(ayuJ}m!#=1)18nU^6gl}}E^sOOVJx;nuzNv95E-TMqS*3V3
zfIml{RWzeGv|6-C+x9~iQ#hUpG_QI&1LR>$q8@}LhIn$oQ_h8jAeDwQGy?`pNIVBD
z@%lKVq8J#9e!_-1lZTYPm_`0 at 0UPFm%pvgZ^B%T2uyimm$+Gw31 at i1HDeT7%yIzu)
zaUK5}v;jRZ1o&|uZ<qu6qgUV`wz-oAi!JS=y=qIAWYpqc^moopV4WJRuLh)F;@og(
zg^7M`=$8S at SLb?74qrE*xeV9m^G9d8j_i{$Tr*R(bM3kv4(GS$b!9M9>6ws}*mBmq
zxmb5beYBK$IQk$;a at -sGU>A$0Z at -npZ|Ctfjf!|VPU9MqHp5K$DMw8&8f)dmx8zm3
zU#h?0>`GGPu>1GztJ(){|BpsLjkzG3%x$MsB*Ma}G2(5Gxwl!YBaLP<uU)6bc#k at -
zV>|vCaKAcd`t;lzFlp=7@@=5U(1<9wF)EV&4p#NcfFEXLFkcE~pzS^~-xEI}9I=Sl
z1Fm>!5nS3m!V(f&h#t~miEO{s<JT{|0jt1gFBa$h-~zU+fpA)vuf{W$84Kt2;rDTM
zQ>XoBeY2)X`Rn;Fnjc+AIp+q_;27l)M4&`&2a56E9PUtv8*s`thDOIkte*6CniL<f
zJ_Yy|O}6!)h=T_zDq0O3Fb at Y4xNO>+^<M6U>gl=Db8&!x$HA;4QPD9u{6U$jjFjo-
zAMJLh9Dc-dTrtqs>dMHlBQe9uOaMFgkrS`xPwH!;r6Y&S^xtLJnHa>vVC+vU`WkRs
z(EEPJmFP_cND<y7hh;L+-N4bp33_P}znjeltzcY3oB%@?(U)1OVodVK;@#ygOR(=U
zZQ;METEhGUek+3~%Nouy?a(_dMIQ%O9Mg>_Tzc)qk|m6h-wk%cZ1AKEoZSZhQwCi`
z->=au_IvjgtZ;jXg0^u011PG(-I5>$d+dU+Un7Jlz|WmR7sR}BY6Od)qg|p*HQt>@
zqza~$W7wVpc}hk``p2K{pJWaVjmZZOu&G%FKkbr!A3hd0q=BL=FkHY-Yj|3A7QyX}
zH9WHGZV`TCPXJ;-oxcM@>gcbm|AY(SaO;Mu4RGsCunz9N30l~yY at o$WxVsFyUE>kp
z4`ZS$h}%B?bRlvP-se6=@c-BLxqcJN&9H9T at oBK`0_Y3BIuGcn$EO1NJp5`i>;Zgf
zCI2`1^rO|dIu-u#Pl<j8XJ8*^O(-=t37-OybPG6-DV%|Q9q|3n at qNO^MW01X4{mmN
zL~|anpO#)o=HsfW=<R^zeT8v-!N+iQ{7QNjpDMh68s2Ajk^Gg7-;V<<y`#J(f2pE^
z4*8WoD1eQq3)%U8;4c3}^miRk_!kAp;?pK#{)kV+k(>Z`dRA5S%mKgQ-WebG7k at 8@
zUeZ$lpesoK6I|s}8}8En&nPiQAH#v$GFalp=He3##DjqL8)dDiu#N(Y5h(P8M_}38
zzqS)#X?c at g0y6j~yb!x!cEF@})Ugp@(poNK-nmae2mvXsN?@CRVvHbQ5Pk%_;M{k`
zi2q}FL at x%ht~%L~%_T at dkRSvtSWp47*}wP#j23=BLDF9(bLW-_dK4wwAjDYVyo_22
z67UqZrPnlq1bZf~d=-ueG at eyLoR#pt2nr~Ld2~xBD42^|gozO#5NSik3UQE)B3JNX
z|5QGx3OlP_zU&B25kd~ceN;r}R&wqt(uJb|c13x4IbT{{PWLYt$U-<;hyz#bd{Utk
zcocAY(QFXhol&>UF6{d0=vmM?@qX2h0-tL99_mr(k1;aG8oD|9E0cJYV!9AtCB64%
zZYA{3PJ08pBJS6G at oOAQz(uCqjNl4zZvTy3OD;glTzV7RVlFnc!n<URIaf(&6i4i@
zW at KL@hH8&6E at loAH^PLCYZghlU}s|@3fOIl*hXRd8YVd>dsykdGo!oBp7BoKE?qO=
z&!;-~z+sZu)R<9_H+0DJIoQ%zl6TwvX4mN9k&#`yMMkcu0Q%bt7CgUwV_R<fEU)*C
z;EW1<i8HceGbE_p at x-CT3i;{%lBnSJi*C$L?vk7`2M2Xw+d6||k&JdB at Dpf6J47yQ
zYDvnwIGUg^+3Ti}v?Ip!Hybmf!<%~fu8r&2Yw5CHJy(XcOdU0-T}sBUE92Wh{_T~L
zLDOka*M7*L>DTvz0|vjT1*v at _qIw<Ky8P_c{sX{({_lOfrKx`lkL|jRGLn`~Fn2b2
z8}-QCxja2r;H|lEh8X8J7c?Vh?`6Wi3F5gz4TrhZT5`Wih}VLrvHv|jkCN5~j?<#Q
zx_r5sf5`sMKP1c+2WAoa;Si5a5YDd}JwLm=9J|8Az>Z`YF~`cv-jFvPNd7UnE(R(1
zOC0kroP({;fuUgNIUO!M#r6_i at ezFD`<SOI$-_YOzKN$@_(wOvcChs({|J45Qq4c1
zFEMWX7J78U<1+p(?N{d1pPP``2LUU!LV5)kq at H04I58hy15xh?-M={ejsUL^KW670
zLhui6f~}r%!2=F~18>m=*jxxFfPsQ+n#V6^{OEFA%b1T7WchvKEBB^$6jPCeJpoVL
z1V`Ysn;;y7--Htg8bLWsrMuBaI2EkrzZ2(6-bI8*Vt{6G4sH-0_~IRL-UN^I#&aj@
zD8lgSyR+#*h!Zv>iF3$YLSOCki2eQ%9_9;iebT&3t~JE7hCPA^1`ZQ~`@rmKQT0GP
z2qeOrJGRp~0zch=@K8?9nVs8_wq$Ta6oSLqNk>#NhGmxjavl5WoN5$@;6({_O$10<
zlj`(Zp<xTXq_qH#ZrzRQ>Kp5vzyV3{5;+jM1ixtHSA^Tcf>vk)NA5bn1OMziR9=2)
zr-A?%Ntc{G4^F+<Nh{Bv7om%81RJh at Bl2#06eO5S7`6}rDRF5j`mxULKf~t8JTx+@
zJFyu&Ufz{^AbuKzC8*?It~cXsoKDA(GCQ0hW+Cz%91hx030i?pAAbT~OaVHeTh%aS
z^3rAN;qD8Ss<N4L%er?2R_1`$h$S#}@o?rXATPUi?LTlCd;&ku9`;pAaPXD0pdT1B
z;kzE~wslUTPtPwYnJ=6Lxxf5 at 8;y8m2(DiNoTe~AV1j<YETurf5QZUcZ;w$21J(^h
z5+kXb&-C at w%O935YdGvOdd%_hIU`4m96M<g{ImF7rWc*jXT_GRA#OCAF=&5E%tmwQ
zg(bTR*FPV0DrcmRPm6;QMo++PTnCnK95kqZ|LquW9&iT6lO~MbMq>{S8JkS->5h2f
zXw3WQZQud9pW+;=tC3=LNgSdOLn<2#W*{E9gWM;+$g))Q{uZ#0#7>`<WHlF$CJkGP
zac>aO(rFZ3y2 at Eb!xe%aD at 4A2-Z&hZD6~YE&16 at Q^Dfl(8;uIF^*DN{2jEg20=nrc
z*gzCrdRAlU{C;paIod*+m9Q2QV5W=_*0fm+BO|fL-s1iP*QyHoE*k+0Ydg(gX5&2v
zF0vMS!7{$(-l%;bgpS9don<f+(L)r><RXcqrGap2^t#@uP3%CzAC;ZP+Y0x~;k=nc
zVa<`&Bj~3J>e=SaBn|wfe7GJqeBrm*chMJMZ>@;m)*{bw()sL2wkv+0-zBIWOAoWF
ze?<aXC7p-h(tu at vqa6oAnX94-C?U~<_L9`H7pnyX5_mF+4yqCG<xoN~t|WD^3ggLH
z55 at Q)Fc2N|P4C)O!g7orhek-YSp?oo_=$jrMr at ZbIucYRG2ZISWwf6Y+r@#+IPO;D
zy_Cp%UuC;OLyf#6%gZ-|DGs*#Vkf*0j#45Xej+h?xXvZOW}{$IV0%CofDr&9#e54=
z`h~JGJjq- at 17fq!zvt>26wEVmZe)T#r_h$(xh*c0(92=sfqWRqh(j_f(u?SaEchim
z`#hoboaU(eBwvr$E%iC*rj;?c-nQ<j7p2hSS{qhwGBsI2XGKf#DzX4gD7_`^E4_ at t
zMNt(;gD8bJdeYujFHI<JLyPkvRDv0l$5EBem6JzWmC?HPu9VK*mCcHA#J>=~Hq??<
zMvc#)sKBEh&6=pu(}qP&CO7HbY*-U(v$Q7B&DuAinz=VoW#N91UL;Q?`qB!i9r<M9
z*X5{@vr3F}-vwr%F=4%4Ze^?#z+F3h>IlEWat)2<l<>?H$1^jeGft51c!$*d@^$>X
zkpGek#JrFl?(DCJbEfvioOFa}(+j+lJTFUsjdyC0-Z>s at mw2a`H(`sIU$cNbztgG4
z32DETeQyBW-}&-W_8I2YfYj=u2EZO{bDT?^?&}om8-x0pN<9Uw(VM#*{#o2pa)15H
zm+1bdPR|SdKPCM;JukpZttWc&r;amWGXHyp`RBsO{4)VQN<9D8fHWUXK!A at l|3VH~
zJpY%3`A7PB<ENto+T*94&zqSA&i?OcY>Cc&>q7B)v_|aPxes<4 at jV-#Yxf1 at EaKS4
zkg*+e_`3_Z{Q-~chKO4scY=VsX#{us9X at ObccIkOp%`;Djh+|UpGMkudR}OMDD~R&
z6VUUTH#|QYt+^eIo+tW~*nSOp{zGz~=x9#uUv=yok$ps^L#H&DLDA*QWIs=^U+T*2
zKG<acu<^6g5VONObVS!=v&$$)93{zta#Y0oae{Z^-;Cj4Y6YKFpddO?A%gFy7+*;N
zfw7vA!h at 8+ARJPMF2U%uUVA`iSh=TH8q<sa=>>cQG%r9eaQy8~ooP#_&P>ts$Xnlh
zdy5_|=vipSnWqR|70IO7xJ`0`jT?<`*D()!WiRg3jy?mEZsbm%J_koZ_81fy1;#~1
z(8pfv%*X(}Gx~uG7*51fI+1;xXuK06B_BnKg<eQMOp@|paN`*9pj6BcO_CM=LZD9@
zmUpy!rrE_UZv4<m5A#-#VN`+kEvAfX-M(tl*spGmj-fAi>I{GBJ?yOoJK#5drtE~6
zyp>gWY%l894(`@1Z7aQlA9QEY?Ab}unYJvK?3qY#N$0c#Fng{*v*^(O3S4ao0y<d7
zzdNK^OsA}&EB22bMetDGuFd$dZQ7ORjQ#w2P5 at 0uMGPI%D(S5j#qh6*(J{lb-!H?6
z;fL?&otBod4RnCz^|`ZWi}^MXt{9|yCkm$y|D%)7YhWS3%7$dU_eN))!i;ohd_|kg
z;PA3;-QVc9Gh)QL#f@;*viEQV-v<b1DeQcbU;2OW)_F60jQ-zza`LRn?b?nL5qD|I
z2+(r$n_X|bQ`1rhbWV2QZpJ8aU1oA^h;IhgdHxsJBat7um;Vd8E?)*8E&n$R4POuc
zAzP;yFNn7+MR*Cfuk-%}c9_pTDKGywbS&(YyqP}<%0SA1fAK)-+I_sBS0kFKLhFm<
zU40$n at r_h%u9brXZj75`SGc*lR~N~GADF4Hs^6r)C`1Df(YgsF{r#8jkQUD7&K={J
zQoACKv?#X!+s-pMk6!zVLN4&cmv<G-kQ}B#x#XiNXGqP0H}%~XNSZFY!nt2T-F-u+
zHTK<CQSPn6zCToiT`r~}xk%H&!rm47_tC=n$iLt at -fW=1YTshA1HX80go|w0 at H%So
zMhBoc)W=`KnaF=>b9SSJf%i<9WBkF)l;p-3T!`94aF?Jq=Mh~i!=dA_^EE;RH$WXm
z^S2X?Balk5y6AN}rAgHin5YhBO~YZVveo05sUu#lN)@hY6=PMq**rO$X|;;V(+PPN
zZr2}EE9gKL**7}RBphZZ1eOrM<6 at CDZXt1?GO at bl;p&6u&K|5*HhuR@@tE|ih-T~H
zkMMrsI;5A+cy#^xBW6{@kS?8$eUK6}ad1YI&1M6^7)~Vj!nw!DChcz3nDqW$I+e*&
z+0tK!U=5I9jcsUCPqMyP)t-Jfotup-)FENp{QUW&8eO)I&U#X>X{d<?#{vS^2JQ%C
zvf{|TX&|LFScDK&KVX(1Mn>-8b%nqi{RCGZJbUgSJ-~JvLCo)CN<gs925-WfNr4#R
zZ33|Tr$~+<IA!M%oZeIj)!C|50ZOLhTzyQGOG~r2o(;vI;u<12o~~Aa)rCVyrF>ld
zZN@@Zd~&J5brfo%52u9zkOiDjDD8Z;pfJpgSR4vd3K!mm0N14&MqJ)82{Zwo=*LXp
zjvw?sJxu at +wgu;o%zyYhu)rJeHvAlTBlvgk?mAzf1rc_CD%I+O!8W<HG?<J6evKk6
z9Hv}d5Gll1wVcXERl2x&crq?pn{T1f1tIzgu3Dja(tx24d>wib#}=syBIh|!1RDcd
zjnM52eAW$OvjuP)(wJ3`uGjt^n1m5-8zRsvqJuiD*XfbwU=GASRra*Y at mgX3CoW#x
zr8rEQ^eif@?%)6Hx&Hm>0qKd+#o5Db{Jv^B2Hr-kuD_cUxPSb(apNC>F)<MnV^TgC
zJQ%6hXfC(DRIn$=-d8l<wM<B~D*_bW7GY?HbY>Adi_--rN+;@QQov~7{!^Q1Q`h--
zmMjIDAAn-%)>bVZ*oI+?KAn%R-U~Eoy?dv at N9gyV@2`ewqgE9B`Xex2`~{Z6FW}#U
z2V*2e#DE^4M^@JEU0FkiX6 at RYMTzTHLGa*>sLbHyPI>6`E!6_GwW3^2YSu at n=(U(b
z^M=SwsEUY)P48`U<0zY3rAwX~E#Q0gHF!ycIFmhzcayG=3B6pP`wy$_E8vhYKU^JL
zC46&&=`rHRR;xyD(s}7T$s)yT)X&aO+SF?VP?UImDn0c!v_k7^&f}=GV*&na{df4k
zVPP7aV8WA%$-7DQ!Sm<#i$IBs@*7x(7v+uL_+Sw-VNJe+;A%#-!aKHt?-NNIiu5^q
zN_LA at BudXX$F!Pp(LTw~nro#UGj7xRx0cYLYp?F0i7|rElt8xnjYG^KWOC!-)lW7j
zwMvd}6~%lM_}#Qzm8$RPlSMt!Gh)Y&ANQzXh5)K<@NP20<D145jBC~`-CCq|;vYhO
zT8q6Vu%vrB!4?jjwN!3Om%?@MKKyOdx=A}OgB#Ud1WJS3VBhx##S7%me1tAB(Z2(t
z?#w>|*275>l`TlM-5H1Bqa<EH=u1bnvZ|COMN6PXv#57)+WHu)!qvu>Q+Wy`2+re_
zEr)3tk^xC*7CqK_?C at Z+kSrk4j*dyR9IoE^CD7xkJNxN})rf#v=ioW(9{cF}myh{B
zB|2g=$+>5o)kRHHa-FOdWpZKNNC~FJGJ&FFtTH)mbIn6+2N7|!m5X-o?M|xZIn%Ne
z`Eqs7Z%K43$v*CZ<eQ;+P2PHo3IsDhByM(IL`e120oN|(OocVo)ku5z3f^zmzkl}v
z`a?dkZo!BVQ@}V-)R2akgizz+u6(oX3KfhaQh?E^wzEa%wE5-4Kth6?OFe{gH!e##
zS<j7mmuv&3vmZ*_W8e4lrNR$$xX|xmiM{Ca$Xj5DIHl6m25xuG>|!k4?liv!q92o8
ze4Kw>q$UI(7mj8MQxoQ#pAPI_4KCy$vWcWa`9B{ab~*O(CTBjRqbMcqJRDr?n3(})
zHC(0xMW`FTVPfC}grS2CO(ob4F=qg-&c62LHTE*%wP9$Lwnp5R%z&7Z{8hG#HD+;d
zKO_|A0dCBA>4TFp_jesbbC(alyL8$s3^?&rU~u24yoF;nZGoR>MPvqeeeA at BO;$_n
zq^DbE{oa at vpRNfCF*5R;GXnv0F`ZSkX-0=O;>ZLKWZjyvkASG-I|({(;Iwcp>`;W$
z3;p^_0<Tb9tLaGGp*1*O5_mRvn^#Mi5^VAzFMr^clQYStPFiAH!7B~BRS-sDAO@^>
z{1Y#n5QCe-L}K!BIeZw&K*qwmAaRHo=&)=&*$>vQLkwaQ24T$OU3hXlkSshD6EOk7
zz=M<=+q)n{)EUo9Hik&pPQ)V#VPULXc%i7^AwoKLwts)169>zM@@m42kcP*UAmxt;
zVP=)nfC04{t<gRRujoqO!k+Hk9 at T<fcH_jn{sPsRW9_scKd^Nj5)&RpTf276Tc44>
zd>P+u*|MsPKH#T5efnfP<xkTce(c(9<Z!rQcz-qf!P at Kr1G3jH9y~BGXynL4Pp41M
zo&MMEUOjvE+P$}D&mA2)Odl8%9Ua+?z%>NnU=mv2=0>v+XRxEg>Fh3!K5L(EybvAp
zO>|x~><MVbB~;K)9SFd<{+<h$6%qTYaW^5sg1d4^Vn{q^;8?i~%pElN6c$K at JKz&|
zb>6zRc_4QKpTuerf7sl=IW0dl*52298r{;Zzktx3JG(lpK6UC;@viOtob+rRm1tF}
zOoH&%JB$IOK>)2<@qajb4}d6+wsCx)+1<P2XxEPp2OLEakd7jr2-v}fAU5nJYV5&Y
zVkA-Q5seyKY*?cr9tKTp(OA;dSV9sLjV6&8lbF1Ta>IXSb`Q|x{l4$_524(;JM;81
zJM%mO$DB9EN?*_#AB{%e>ADFCoZU;MD9lHWM`ce<0?@ktG`_n^T%v4`GsxUe*!~bH
zO_w!D6wIv2hNu*c)<kP)a*{BZqDmshE#L;RGgh{lkC&FA^Ur>P{xC8>hX45B$T4!<
zC?Se(KZj_8kK0Oc_2Qf-<et-5mbUXNF1_Am>ZJoKAr&GwAG|a*L+n6b(d)a<`icxM
zR;*d`4*rQEa(QX at CNZNw)lVyJrSo5cMWaRTnkQQ=6WW&b_~O6CiD1|}+_SBpcQUh4
zYu~A<*|Q9Ue+?AhK65(i#Ep|SYM1s*ne+cMrZ+Xj^lm06ga4P9zDfA>e~Rg^Hikj{
zSzao~^*ROJW!Yd)nT?5r#+aVX*pT3d(C#Wk;e~;qljHghm-73bI!%MJb)f%ji!-1n
zw&wTWMp65+?hwAQV$HCB)K7j+_M`uc>?@p7FGs5{h<uYkr%8<3DDrY}DhWJlux+vI
ztjK?{XmqV8n0A~<mbddeP2h9UAGuQq_!krR-S9wh#7I7*=c at S~J8xJ`yE9R1h`Uz|
z9@?q%_ssh7`Tt_>y7{^JH5(cn)VJR}Y8D5sBxVtA#kTA_rCmG85;o|N!i~KjY-4lP
zbAGxMSEZl2ov}%vc$uW*x;31z#>1|j&#9zfQA5H-H;o68I@)xY2vtLbsAWMT4a1GX
zKo%vkka6u)uLtm at 944~3an0oK4mO;ryG3P(kCl8R`FxkqHHz;00cZCmIY%@;7o^bD
zxh96%*(Sy;H;95yS1o<`WZ}w{3!nVi37*J0iQO(aLmJd<@qqmN0gGQBl%GEcO+u<Q
zlP64=v0}}P3B7JR)siON&c9I&v`g<jpiKrqW}AL}(%b*D{weR2OIE9dIsvV`DUF~K
z?(B-^Jj7vfc91e_8 at h5EQPso_1KYR9)v1ZiebT}}jQ#GVv8z_%2V;s~nKyG<R>sMG
z!@Km`@c_N)_{%jRbI$nmHlTxr>BweXIW#`7ox1tBv6Z(bOz`rG`7|rUphi(q`9*tg
z44(9n^nQ;21xo0<P9)XFI?Q9ZLEn#|IZP%73cvE at iqixWjvWGwzmBF|7k-7$$iEen
ze_N!qvNItRmk<Uq!7rYQbbY^`8S6%kIV$}Uuk_B$Trg&=^ix^`+$20kvlSy~wSy<p
zT;KC2l*u%X)swMwL_2hrU~Rl1K2GX&Shp!?B7q?<xeGq^Y~A4LVZm2EPW2Xkz1j<c
z>hK;=&Dd0m;7AS`tB}BUn7}4-oG--l7GvR_J+sk#;a8M^hm^_haO&?X{e>Z17&p+S
z<#dJsUzLA%oyyQ%tx{#vI*oPYzcgk{O-h5>N6RS!Rqp1JKp~{m-&d!q_UB at rq|pX^
zv^W-BFth1nBf3XSh*%M^g?zmq at l8a1gbNI?vZ&Yjy4{(XI9Jw4P$w^;AIK^yT5#}W
z)ugG*d-bZC^vcqmRaI>Z3Z~EKlXr7gtF%AAL)#rgwrwmLxE;-)e|)eF&3Lxuz^K@`
z^mMMVKe?G}YYPCSiPxxw5{=&OQLQ$+l&d+Fiz&y|Q>k*#_M!_4aZl1{g`>L58rrIy
z!Cz72{fRfryPSzS+awonl#0D+`F*rqIr`P%Syh#BWa_C8AqpnZcI7zfAnv139~eID
zmml!!QeQeThSjzS;?is$!2v!V3YD8*2SVm7THcVZnZ?yyYiZN*RUTTGDj&05TN+UA
zcEY#X!fEc^W9`#5A3l=mRLMo>h#QwHRdKXZ6+Nb541t(kt5)saO<NZ?x3 at Yp>ry>e
ze`(gCR`%=HQH<QU_*s9{bJ$?W1Qq$p96W4KUG72Wd%QkkDx+B&o4dD(S8+zEl{+I5
zfwJaoOPjl*#6!!Py&KD2X`EEcz&q-~8+Z>jqnt(iTz_|&Uc~G*ba<!ax=uLMq`f;O
zmg_+V#{ps|3KRy;hw at J8$&ry=OAO{xomMOts&#r#m7vX0AQhMGD+3ls&sGrTHS*5y
z6F<T`y<EJa$)a;eq6dp%57^Of4v+NoS?hZDvD at 1pntE#3FgPw0;;wtJ>*nscgNAH{
z)^&IGjTl;7+=PcZ5^<#2+=D<Pc&l_B^g6ZFL0RUY-c%(h{i-zXc4cWGl%o?`+C`cA
zg$5py2<ZjRHD#+%cpXn}%DKAhPL|@ow!OeP$0yEa)H2<C_&bDddM?W5W)wYj9- at j@
z0WAepmsWGFRzujQR+iHivE^tju=NGv at 1-(W^q at tf2SL4XKRZ#ZML)0WMjS#*g at Mqe
z?(a_2+>Z_mYmgVFV at 58W>KNg_QILegNL1{EktmrV$6cv%%{Iw=qAFI~RK?7nm<gLK
zO;zk43Rc%g5*W0JN=seoL0PvP{iU-%ViN0T70FGtxi!~=PS-(63t-6=P;1T}3Dx;4
zH8pidEIOl3L!&}VXs2EUNBmtvm9*w$-<CGduqyA;W<r&lr`@&M<wP^qPxLG;-(*wh
zpxkH))6}HZr5)x3AWt5ZFVPBfeF;Nfkadn~qTGm#IxaCJSnlc?a+-D(uc~TwXy#?E
ze$_Vr#G-v$5{fg1LB_hxqPV1Uf}f<Ob>Z}M(O}wo{NUEYt$>=3nl&?L+QAhQC#G at E
z_qt*X;k6sdDiUn&mH^II<?i1>)ETpaWRpU*)k9UKD-8<d%6<H+{niFiQDkjWNt9=C
z_VlK&g0&h^K}E7*InKy$!ymprBzM=U_1${eac!41f7Z{P{Wql9uk)2N2JgG{;HAme
zpai$a2iG^JBKghUT~I-U#3>g{4ijxYybH&BfMhh*s!sq>+Z=ZnA`=FQKeR4#ty3Tl
z7a3{H^ql=*75Gfg+YVy;`%B{R>?`F-$0i~U(!M8jgVkycvMH57gr5~_WhHP`LbZY`
z=T9g!Pwr{%#j+jG at h}|*I)1Vf#ZssxxRrjaKGtZPXOO=tuzLh?fGR3Xkqp?nCv|DW
zN(&`!8hfC3i6ykuzgoRkbs~_~c9sN&Si%USA8+xe_#8EGO5QEV=?){iM^1=b5xIqY
zy&w5aWPK!YhjK#L&`M9zL4&!`Axh>dkzY=1RWTvJ(6GKQof<kcJ!O39ermYJ9vm`^
z&>}b2NsRfXxL1mQxVyH1TtPFRZJ{P?<~=4e-w`U%GmEiYf17Jukee=)NK8~#OJ>1p
z&Q|DjzUC-RO$|v2v=CGt8(7`atK7V{rK&2Tv?ZsJ3pCRnyA_szVE<r|*7Q8eX)T`G
z09x7Xu!n{tS0JQOwn#1rk{;03?O|q9Af>%t>ZcwiuK=Sn{dTnLwQJS>0nt1%<F9&|
zGE-Wv&WQo=>;o(CM+Ypgm3;S~xpU`Eyv<h at PCkC=L0PAs{hOoa>mvGeZDBnKk)ghu
z_Tb94Z|q#U9AN7<P(3`r*6|JySu9|(*vjU|WKm6Ju at u&-tKCi*s3hi4PhyaacuT7J
zP3)8L6Qk@#8bcIjy@~%I^0;5}92cnLc(#A at W=inC|3rO841L_V=UC_5b4=g077|!o
zxdd*wO|4U?G$aP_&Pt?n*AcH0p$iXhX0_^?1?b{6#A00|V5G*>l7zyKMP8cd@*tNg
zKRbyN^rq7Awe(G;WTtA!O)m7NSer{x(!8WCNq3S2B3(@b1`|vE6B~U`B1t=?{U7o2
zd2p6aGzJmy<M_-KQXB!?#e8T#Ej=*6Vz;WaKC6=>{To6Gc*(!}Zv3U=`tAnzl$Dm`
z??0hKV)s}NrDv3-OLCL=!pOC at xtTd$C5IO#r=@O;E?ha{J6#*RMbqd4jFx|iF2qzk
zxru=wD*ZxmQP-RCz!_Wkb1k?bHaA2xoXZJPd8o6aHFassZdPjCTlff^2c7Mhw at MSB
za at V-C!hP_rdkoQkYYDF?g#eFoZ_jElE;3M8D(eL^02Xxw at 5xKRHYji#NJtJzjHg{v
z=>o5kD!NtSRCQ^gQz)R~bY{q~88dEASO>oQmwuI=G5XyFxsG*<)7wp7v)^ZEJ_>T&
zku<u~j~DmMD>@K%Fm$0c<;=9 at AAa9?TQ{Qftv`v}<cy<4HNmwxiK9GQn6)}TtBWd>
ziF=eJ?lp|)dX9JD!@yi_S{te;35zU+>d*$sl3so{Dgc2q23Yqxs?SW%16htQV=5~K
z&#SvdgU}{zNo{R}(MwyT7nDw2K|39Tsjk3Uy(!3CJt1~}bc=&7uI9jIzsHy(40Q|l
zG5wM1>CyV9 at HfM!CBcX4PYBn+=4thCRk`KxDwD5;)A@#Ku95JshT=pJGOGn6 at 9AbK
z4_fPPD(Bs*-IXPtx>EWQn&On!h?k)?G)+Dj0*P8_jb6s^w^x5}qUo*I4D7}8`ID#h
z?fa_m(_#q`*~&hC0CfX<t$Z~jUy5Tl<34<uFpGHT-ZnQ&mPRM~Bb}=$JBUi!wY1uM
zMBc at 6#fc!(BD0~&+a5$MED6)<YGZ9`F3>+v%W2&`+?ArHwiY^dFE|wFPokA00fFS2
zph*)6>DiJvd*ug7QeG(c6C~yp7J0<LBgdKiR#t?<;7TSyO#7w9)zw?iEbNi>f!-Lj
zEi0;BN($OPVnC*?5TN+OF#vl;y}o{UlQR=+pKK3?Pd34)HS4ikVAE=JAt9nqxajH=
zpfeJ*!boIQQ%iVomf0*4dW2|1U*B?{>M)997)Q`zWKT_vt+dLR2?VoBy;i3UvIMaY
zO>iP+i58b3!q(tCn5a?AB0S<H%)&z<I}lL6HC;_{UrZiel(cMQ^GdCSU>1|!E(Z2T
zq-70#r`Pa^xETkbRdnkO6UI+Xb=EDW`7X)r<CtBLctv~8MRG%J9?i2NbfPywD_Eyx
zwe+0~Q&VJ`1ymXB&6q!=ymIyN^(6>dJ>0`6v(iXPMA&nf^Yvz2^YtcNv$<Hcp<0hH
zcTW$c>Ul)N!`cGhP}zx~$2(8D`BJ7n&&HKYBZ~SRyf!&AYjek8t&>_?3f?Dtbuu$K
z^%mTFBm13kBliwpvVJ%$>D!{^$h2boKKKkD*jGMdE=*y)gGbuj{aldF+bD%&{&I+}
zscC6*ldZ6yce#(6bsAzu*oa)5M);7K_<5VktmVA4ew-f_QDPnsb7mvO*lZ*iR}=+&
z5<v53xzS}4do774!9J1iN#xF!?ljz2=C<pApF+Ol8~9=T!lItJ4F<ew;4AOu;qwO%
z65cTz&gvo;aI%jVTM)ZoBzdcw+1=CW(@nCGBNo9(UB8Bep&EUudM#9&+{-;rn3zm9
zy8GwcyfaO6I(m|py<onCn7{6AW4>OpwMsvBc8A1{ZYp(mBdCy}d!WicJB+TL5Z^!-
zTD6|Uci7dzB_{7uHTYK>D0!bSx4~S8Um(Yuq}b8LO;3!dGj<H`9zG#_Mfeu-^?vv_
z;q~D(c5HNiP3mwujhJ(Ng<o#ZIMVmjhXjood3}f#8+Pgf`FlY at K75a6%9#`mrUw<h
z<0xTfOu}$b|0X$}o=bi{maqOVvHU-RC-|4ufd3xNOSzrA=bp at 6$m~yN=lNebzW4t}
ze6J9yd6I9(5Prs5n+Ep>50WRCjIh|=%DwbI at kig3KmOIQ)^I}2koy14A?-gor2X$4
zn%4IP4hb<VyK%Cp|E_0WF_CNJ5#l&Pr}yPvu6Z_1SeC2aTj$y#&?M+oB)w*>lj3Mw
zJq<Bnrr;{AhhLSbvU`+T4PNCsWIDlDTS;bEOH*8Fo#O1H!<@;Bs<O$8sB)~4EiXyQ
zty~IS>cI)}RxPSE*X6vn{_ at O2t<aASa~0p5=DYO!X_;_VPH4$j_26OnN!h#a@{x_}
z7yqbH&vP>fUS*2rTri2%l1O&1O^Mg}1(~8%T!^}vPV~r1rjE3R6?(6!C0ec%7YSii
zy0ytME+s+`R~mdGnWKf?&(hXW#6TS}hj2RTfew3w(BG9l at zH7_$SldLImF8=iaOS`
zqtRNkS{p)bni%%tIy7z5Yt%9yOG~6^L%eD1Mi@)3h+6rj1&YcXHhXEyt6hdZ7%_ap
zpmj47dxe}HJa*NbZT74 at FB`NDhYkah2W6#rA+52)dx4#N0KL;<aM6y{6N>;P<i3f^
zl`V#heTZ+5F2v)-rC^!NBmdmilUs%U>6qWV)B8s{r#HlSmCW{~{5RXDW42GtY#&W~
zi0O0YtN%26)F?MKdsK)1k>b?l9;9}H`c3i!&hR~1O*^8MBJcv|rJ{VH^{^F+R|W1>
zqLneVvB~kQ(ox9ctK>h7`JR}<Uj*CvAoMe<YHBjaNk=cKQ;au3UeL=gUx}JDY2Mu2
z9K$XR8tMh at wt4vZ=H+e9Cv&4r+#cPozslzJs}Oh*Txb&{GI6B>aRQ>P25M?LwTcyK
zjR*3LGRw$+Ey{+KF?rjI+w%+RuWG`Dhx8<nRw?{S536(fcQsvl7QDx?<Exx4MU&RD
zFO|o7a{o4YK3C3KNirD0MRX@~k}q1b+C{ApR0>`IH|ZLkI?-ZGmZ#_HVa03;!5R94
z0`dHqp7i~ko2$xG;6%_$L)5T=U6qIv)kx*axog<<w98HL3TNGLEk at pr4*axiHmsmX
zKD}_Etc(Lfr}qe*de91lM+sdx5H)mE@`H^)sdBKaz8=ow_xSw!9-1)Wm)V?FA^h?x
z$9dA1hn;#A(6d{%l)fzq%;diI<US`Ia&0bxt6Jp1Rqd|1cDaT^*77i?qEEGRBR8ly
z7f!|5$izxcL5#Oh{{bhMQ_LxS3B`C<73Zo{35^s30uoQYlV#9mQ;f>+tuk0akRxIO
zLkXPkHNgip!H1qa8Hx%VyAQIO=j7h0<le2cu5pEkIE9NwB54J1yh!CEjXWfi58W>N
z78U$a#-<^%Nne<hiDhgaBG=@9f}b=G734DVZ)HS|AO`#LRrOyHIr at eBroM>M at B2TA
zH2s1fa;03G!<<@R6jaxLkka=EC#XdYArW_&b8%zWUFh}0oZ!Mf3G!Vo0=bJG+CVwP
zQQt!|opA7ke at -|ku~1G~8Ja1*$7!My|D+Aca411r;0c^W8<FGRYsBxlaU19;GMaOr
z)u+G`F at nDP(vxvMJAPb at c&cIJh~6S69{hJYQTRk}iBgQF=ZK*6`}ceG<lb}At%&=K
z+`NR<5mwR}CDTD>J$_s$y68x_NXHsMj6jW4hX4{thLA}8t2Zr!0zu;!y}9b{$Ps87
z&P3Bsmo1+$1OMjOwp^Bp_CzMG{y)gXnWs->nIP&Qyh`RYbG>Y?t}2~-4yRH;wzsD4
zEM3K9Jpc?^l_+q!YBvRq?c_!=27{<qkT0!DtJ5iUN~M;3QqpcXF2v)A4y8+4T3@;Y
zhE)Oe0DrnkGAWslhjd8f%j}0cK=ds<y3H{Ao{T5AU_ghFLeXLTdsQ%Qg?eijUV8`#
zJPt&{bjMSVH?A>QNpvhMVzmhZD at 6}ZrFPY7uGO%XV8?`Vv0Cj>?oQin$UPwvEpc=|
z7jXa<K5YCVTnO9mUfKEVbM!Hz;1m2CZn=Cp8Mi$#0)_0{ZC0h|NypVW$F0nu1G{>%
z&M^#acda{pAMUB~bl0j~)oxl>wJSwi<MK26rTV!q$nBI&S|cro8Un~;{G!rTHJ4YN
z?}zW*f=g)N*K6qfX^yX<7v7J8xd!}3vEDL1M at 0p%;s_&aX~W*598aJC)>#JRavJ=m
z<BlnUhX1TChX0J9A@|N0CfC#swyAj)a?Mewglw&}fKISM>T=g=frjXHmt!qN2Bp0}
zj8s~fTvdgBts<1-;pyEgXt86OlTZ!tq4lh;hxw at Js#4PyLUmH-FhcwoiS82S-URD!
z$1hs5>h6^)=OB)4(ips&jp1{Yb5Ze1;%?5?QXF}%9IBO4_Z)(sbFWGPI=pQB at xBzt
zveS+dG#%W#$a&u|b`C7S=Aux!<j`h9o-9ZpV=2nj)k>+|kEOA>G{I3AcAVgMqKY9%
z;HrxeiW=}cUjLo&0n>#@o7x?z%so^jTlQwFnapd6RR*_m&b`{e+BT5f@)12op)n<=
zLvoUYxlXU+tf5GI{P>z98}=i3?UjWK&ptv3J21xo`CBM*{Dd86c>dhObDuBAKjFvt
z6MTc`!4G027~l(-!gy$?pmC2#W^c(I0aPt&o)G&(c{b%ZxeG0pctT=I#OUc;sboZ;
zeVy(RUW?_*YVL%)hBawy!e#+c5(tz6<k^r0221jX*g0$eV=i2dsPo9uGtnWVxe$s%
zIqO3i8&Aeb(rVa%K{~BQ5mEqC9<JJX1DC=F;Q8fWzb)GgJb12JPGaMm`2Anxv9%<w
z^W?&8?w%?SwNfSK2t<aMaMIRf3}lyT#aa(G2_$fBK&lHzqCss4VCd~oyoWH}_da;6
z22H<ns6FnA_szgRjHL)P%0KJLYI9MNY|cfcXpo9ZcPd~`9JI_jSlQaE<v68=LxYkC
zWll1QAhs2LI$hR4mrYDAy4hS at RifUg(ozdqd-<B&H;k)tx4Wubszq%~+P&0N*;eRW
zwJs`^nl>`yN%)}^6(Tbcw3ik!7kwcZDftjRHHzjWrZlwTRYDlT-ySe_Jf7`0?894w
z*WWpJ#qlu|FXlhPhgV|_Jif36RP*LB7?;7Pmv%elK-Nv4qk^oPv<qb=vtLdzXsVuf
zm`k~G+^L?={&MR0$4syMDg{?!3mN&CDWoI0m8)g$G>k-GMh0mt$6}~%)OKc*3hKWT
zBUn8zrd426x%JTK6p~ieGOcp2a^dvle6@?z3?+_e6%bby#Ay*{4MSSuF!WTrh at wI8
zMPvsT at C00o9e@1^k9Hj6g|k1_-XQh?e}jL;6&M46FT at f*c?48-JMbX<=`u;bbLw-2
zIRq9Hmu+*=aR#GO<-+y?5H>Pf&l!})YF$i26FRNNQ>)b(bez^;&=G5HG*JGj2m=Mp
z&)U?!R#vK2OOi<qeLX6&<BEJdiW||VG}3Z>db74=`1&uKuJ-%#^sBxJc^hU!v;W{P
z at PLyUEyi_iV>uKVAb2;dNzj at L;Wpw-R2rhk#%wdA5M2vUyOz5t%C$tB&6Ggb8uZyn
ztJxS??%l+=^`FqY$C}?8_4{#N>*X^(fMJbxPSz7&!Vy=KRz-B(T_<GuOKyU7mok-`
zwdGv3x?DxsO=i?f{D=gq`^?xiPJSHb0SC<h->B#CJV>}p4BA)U&FtUxm8lbd7m65P
z9^*U9jy=5po&<~pM|<3dpTOcB8}U{mQhCs|7uM&hmNJAW7M$=95%0oRYc%)b%&C%I
zsYNZ1kf7yxq!eXUqGh7=>A*IKDU>MWIKF-5=EOnv9lOaSMQ9J^HM6g8IQ;8ve|c^~
z0}G2KI+C~txp5wDqDslE(OJ14U}c7at7aj^lQc;jToHg9`O=cdJhkL6GW{P)@;?oE
z`s!(D(?$+?h*q?}4MV$)v{x2D`?_GXk(hoO$!s``|32%FTP>5`dsE)mupX9X!hJVR
z2WFMYRiX1_8gebIu7-BJGEu*6I6+MpbKJ>EI`$TfT6Egk9Vw|};C=6njl}sIW;hO@
zj7wk)|E`(i((&U{qabEq#|2B4|8Tm`H2ht(!!9H|XYXA(FXB5;qwlC-z9Xj5d%oy6
zo{tOYS@#p{JY<y3%?+tQrBdou2DY2!n%qfB&6m6Bl|YhpiUe(B7fb6Wg%b6N*Admx
z22oYw<26bY3CF9zt(9*TiXD#^K-Z1u2fvD{7Jh|$<1>Vazw(EAfeK$7`wZ}v=E<9{
zL7n608fSkWiqq>%$E_syRH{5FT1>~8V7n+Z<s^_TcjZ`L#khv>z(DJ~&?SQq3D?&t
zu7AFBG-y)SYBWc}*m3TQ50($!iCR<CX?+QT_cYqWOcYQJt*$_#WaoQ^A<}iYz^<#L
z>+l7QeaLkclsT^xn7^cg0JStdv(QSzJRG1EgIN_|`cKb<I$ojpjU=AFtcnm at k|FlS
zOii%#nqA&%dL_A=IWfR9HQs!1LXQ!lquOS-vn7c`+%3jHjbJjA4~OOW{Z0{HKHfe1
z#Wka2v$;hrncIc#0+j0<he!}yy?T|mGB6x1uq3amN&NP%_?W~ep&Vx=Nkua4Sso2B
za_6r&sZbwVLkole6859&OA3WT6&_Pi*zp_t$WsFcAITm2YJ6&8VG0R}R?kdGGkPb+
z^y%|P*UhI>Qmfl%kMG-ZU}E1s3x=;Jw0Vci;{*7wIT9i#CpOt#%U&)R>H8st*<f}a
zGkGVbS7ySp_(WsC$e}~V7Y at sgZ&?HvQd at OwRe0q=-n$BKgT<?BZtr$ornPNjstQEl
z6FXsYoQJ1Aq$;g at A+1Gslpy(<@>Rm4oO*vaO?VW}csG_%=d98}uIG~Li=5Z%_u at Fd
zy+W at E6LU{*Bv;$Z^(n?;S2(LMko&vW`!ilk<1E0xiysI_**H&dI=P<dTnnakX`K1!
zDZ5=^_`6mbYd+qlc!=I6a}==}6FNQ>ZzI>2)PKlt5q!w?40c`5J>?hD`|BSn9`ZpA
z_v=wLTI{^e?w76`<m+!^S22PgNv^k$$ERJBz<HhZ$_h0LW at D(lsg*5j3DU8KWXglL
z!Egpb&*IxR?sT3DT~1vqdx{5^zk03cjp3V12JzuGfW-Cg71jSK?e`8$vkw7ucHP&2
zz8RjtoAi;K69(bkMi@|A!H2*wyZ$!s%lBmUXXWj+;m+EMbc;`TqA5NOO7?}Q(lYkn
zotV)xs5^cd-D1SZ$-OOWTTbw8mNRAks(!Q9jUL+NbfhxO-i*w}#$<EFNOM6Jos00&
zjUR%-Se+p{Q#_poiGn4O7$@|OI?*1dipF2zd-x>8Ub?-hRmVB6Pg~eC9dFyP);@2s
zEDvN1zLJdHQpRH<A4Kq2fZbet&?8nYQYxSk79OglI~B~%8fZ!MO?15TBimdaAIHw?
zI16rsvnPc*uimen>Rvo=9R7K<eJsH0K|O{Hnm&*aS!1(@YW!MH?ippZ>uuwg+52}H
zVGZgOyI9+DP+a!Hs3R}!N%sN24$$$>ijQlKgn3zGH;r93yUkA<JEzT`G4k}4xN`7<
zFudpd#Qt6`-q|xZ2YB)dNp1=JjArqY><Hfxyb!ytNB6lnikbNDcu`W)k4e&Ev&6he
zx>Y0DKsOgF>20i$#)^VR&*L?s-?rwK at V(%nj+i`i&ivdSvj-oyUnCr;4Ni$ypsii!
z>|Xia&-32{^oI4f4c(r{EpzeMxvLj at CP&1r8aqBI7?8EYkLBZv1AIM?qw*eOPq*!t
zU7{B`&WWF%@hwr}oA8X`w}RsoHS)eRsfUKMmyMprLd5#&tPR`N`F2iNV!O{cG}Unm
zuY{NFx4_Upvv>r7+un9SCYiBEF<xaC`#<x5wnHu9Sq}+J3<h~F0z<N_ho2D12W|>>
z6%Gr{Y5gRT9;1+ykG;~DekL(XXq4 at sK>vhZuRt%RhkdsX1}K=^B`&rvpo_EW&P*8)
z+q+;B#=q2lc4!k*#*-5+92&mRO9)6=aHcd*Rj%leI<$*-R9Ke3-Dl0KRkWTBgF(zD
zu%*g6^NR2;(HUZ*&{)n+?G{~LGN5^OJF{8!+m)L|ipw<Ve(?`s4!Qmk?jUYp*9S|s
ziSH at Qp>(dlAf6|5w$Mt%U~JgmFP{cTY&bq4Aq+`WF*Nc4;ZSMIk1TNfr=7#Pd$?te
zDCn7!k&@XWEj2Btvn~iwmpmBJ)jodBSFca|WH|m(WA{K?rq3<yyH0qyr{ED_ at zZJ4
zo(1EZg}WB0eS8AKv>Lyd=pJFs>kf1R;1AX1;;Nau0`-6b3eI#%Y!%f%I>a}I at Mk%`
zAbJtleVN_RGPsy+3gyG(tw^jCoi4{dWIBGfC~r_FTmxXUx7!)fsr$GCo#xyX#yl&-
zXI31_2sZTx?c)BECof3X1Sd*9w-g(Mf#`Q)muMZuCX{d%oR!|f(HHIwuia(JDbSD^
zU89VN3S;Yt=+?fO<Kwz`Unp)@h_-d>-z~S&Pc@{t;4p+YGo`ljG8Aatd^0m6PWk2d
z<YEKV?jModEaJ_DZ9{wQYLT+4U3WzIw;CT6J25?(<+RgGPna)4U(>ZY>BK;T9ixy^
z{b*912j0uD_y8oQruG}qC1d8g4=b0#>KzM<dhD|HM$PiGX7-GVN{!Cz)~@)-mRWCJ
z=#m%G`In<PRfHCjzvXXne(YQ&t5_1MZ5X&I?mU~Cwa;J-0Q)h#=jjgU+;+xmU52R4
zWjS4krVfg+r1kF?nGqP35D@{%5zRW{`^&=YzEgjKj$PX4&rgVYGb=Q%=iI*gFPC0N
z)0%f{9q$d$EHb`(m^bs=%%Ag}>B%Ik%=8B9Cw20WSVg`Pq^=$zVbaDHNxq3U?K1+G
zA1a>T5r5g%o&jk4;5KvSAL`wDPR6A6t!!{|(5FR9eeLcU5m`CuX|w-I?S{Z at Pp2@S
zQ6Ns8`0CKrEqoNNUY71DiJkpDqkZF3Czo}$HfyuLjm3aacvx_9vtG8mzL~O(qp%X*
zWlFjSPp})|U5#*@4^^y}*QOJ#Mj+ocsH4M<I*NP7FBp%Pksp#QO7}XrFjh^dAsmw}
zpef!IZw!tBC$HlTjXt2E+%a;s8ZG9rS$=IhMI^iFJ#>Z`LxNA2yn&NaJPX}IVpBHr
zyi2gb?5b;F5Ql{}Q at W=P%ug_eC*_8R0gOjto18xDBPR~_>GDXaG<pU5xw!jTbt)M?
zY~n-f|7^s?+K3A_5j4hAR6xQ*+{5B6=?>wzge1kWis2Z*kyr$t$1s3I$Ic!=iE&O2
zH{urQqL(rA(1sd9f&%=SXI)smZi%^16QqtKb;=+KrJxoRCB(OBHgo(q-GmnqB5>j#
z2tGHPz=?m5-~{f1aFI_{JfVI88uw>6%3dP<Q*ys1rF;X at cv@1kawCH^gWVBt(#5wC
zP!S03T|2ms^yCF|SYd}iUvXi#@JvAM;$9v%WOhpLU_Z0Z?w)-^lg=U7KRLD2l-H69
zTwN>ylvcIEw>&X-B!{G3#Twt9r-MNe9F~w2hsp|U?eg>6*$QTCzQ1|%eep@#f_!qN
z;K=<gTkdbBc&sDz9wnZlBj}TxR)l3Sk8<6Xk?or$wTgVHps=ugVsO`PnLEU!nZ1ne
zn#iuRZT=>$HhUiRpO7n at M7tEPXq4g*?t1-F=^A!LyXwzM*Z#WA==Qtth<8^ca0>E4
z>aYiuXO=8ju;h&J2(r(d!N;ZdNp?7m-bB^xd=$-z>@_v0`l<A9CW3smXrNh>B}5aB
z_;{V(gsLm7EjON>-YE#mYrq2INwE0l1~z9;k~cjj_j^ev2({8P6j{ouc)DZ}3_E?z
zL3D)k8GO%*nMr}F3RUFL-(ThjkD0Uqo8&P!i0jaryzbM-;iqKWt|ZsgiF6;x3*$-x
z;5;K2FZHe>G=;rho@|n{F%gECjw(fkhbgADr+Y<shYha<B_u at iiTQm`;#7IINwd;b
zZnn6cUwc~-ifVQdf6{tvdb}I$8^j%~ujO}%L9F6%gU2??nqY3qL}r`AB<IbC%oy=H
zaXx)ZCd9VxJhWg=pH8!e4_`B3*h}pSIz}Y}`fh?4v|F3d-WHM?D{Sv-o76L{Gng&S
z&szP=vnT9WG_R{yP;9HVW%Jsy9$2;fInhejD+!&0Sw3izqBN3Puq_QzSq>c<y{J!)
zAasbtksSmf=dJe_73Ph`>7(-sON3F^J~(iGaz at 7F^9MeF6 at a%sJc2JxU9n;+Bp!JP
zw1!$9;oonB&h$K-Mz7O{ARdJ~BNINy>ObUcUZ5W;T6TC>#g5NK1FpfF at k6`_GNB7J
zTj>{95y#{pjqpn&vOWuzFfs%c8xk1n^zmdsC0y1H**xd$`odU*Vhh)w-BFwu at F%na
zd>>!L=XSfg?uOQogs<XG_~O$S$Afs21Q at kWh!089>)>)lKwj~V#sTMS9wHi^lEFIR
ztB?e(>5%vwzIY!nw4(Yvl;Ii38CXYI$#I2AQ9Jo!!#g7n=^A?f<2E}oM)3TQxhvQA
zpYN{LSqsnh3stFuQ(o%UIu)RGaMxUv$9qP$8$NT{kU0Ror|l{!!&mTj*a+kE$EFQV
zPU?`F6zJ|j_Yb^Aew-H#^1FCi?=^(#o;4mqc%h=gvAm)Jy}89PaLd!D1d*ptYw3IK
z`am=SEup+II$dtOvvpSagqLD`Ol96(b9anBku6Rfx4e69QBlszd$#PH*ij+91C`E2
z()Aaq#}f#2^+UYA4xfUy(z;SU_pu-fU8%n7Exuq8^;S`z4<jc`fRXs?mkGOTUPk|c
zJiPZB-h1^b&@=ih-$rk<J`GaBDugJW3kvBG`9#958qcot at ELr!>izln7>f)qjapj;
zE?j;4Wbi_77iO0X-_x!YiWm;6#r+4qKD&KzYSP33U0Szcy<KTcO=2QXdL|oQ4141K
zTYyBXa>yQoGE>;yGz at agd%W%WP-$d136*~T7=L{AwQfC+<?-N_h`gT*h#ZQ^&xK8e
zuZ-A2!lo0O0p1^fpyFoLhO~t530-E0E#Y&;Pt+FbSpXrWg~kRinrswj<V0ySd}7ML
z^n^HDhSq<er5Kls0BJy$zhyc at sI|qQsAzzoVHRDGPd8t+|A=l4Ya8pGYa3z!EOhMt
zmo*O)pDL}9V7KSiRLJ#u1-rhY$=XS{w01)NJp`5G6%A`El?~4sQ8gd*FXNHx(s(b-
zZzlKu+x%wvezp!G9(1mQh`HS2`jm$2dm7e9OsK7B_?NXCJzC6p|I2j~ujCH?%Qyx&
zE%^M){YF&AmHo?gGr4|HUgtP1#%jXF0Ir&?W3_Bp|M*ClM6UOE at w%u-Ve~pu{2lPz
z{R`Q;LQ5H*CoG>}`6H9*R{xY~J<%jfP!mnEu+`(_e~7tKp*Y%9s*j8(TJ{V67T;Rn
z)U!hHf_9(X7#3n^6!yZ5qG&HbFNin3U6I`;au~Q!4V=<7IJNcIu$)F|?>HjqjqkXI
z+*jezkoy|MVwU^9c-<@(i^a at N>{LdQ{IP|!#>MQHv`ai0jH2XNWdp*><Ts$rBm3zM
zVVWd-F-{#a4E^ZX-@&K|1pSEgB>dOitsl&5FeU{kC%u(VbXEq;YSSac@=7yEI{q{u
z!qq#-iYsT%oH)FoR|nL at yo5-25V(}h3B1!8yh*el2)R!4-H()K$@R8OMth)YSV8b$
zxgmNa**kg7O3H?e&#eWS#Evk0!hZ&LUpNliW9%*ALSa$Y4yU>XkFbw~l>LX#W%^pj
zz_5osR_yyZ!OM{N^^hX_*BhmE8s|D;xFn&^uNOMkW5rL&_4aJlwa1f<jq9!?_hIX;
z4ePLzoVk$LgRaIp*HqEh<h~3RKguy6`ONAvI^#a_xfdHpj_b&0sm8P%kCD%L4RIfh
zPr|7;mGcN`+1j~WL#gy!<OUang8pNB7xd3e2?+F#iOpJirp?k-jiI5hVDQuzw`$|P
zF%*F%*humSgtQetJ)VyeQ&=uDrv3?kR}AG0EK6v}$Qzq6C!5)^wM0#_jwluhnJ8>%
zUW+)3-Z#H6zo4*>uctMxMPbCsEzyaCj_lc5JrE!%e#1&A+}io2J~wXOxpVz?+H0M+
ze!3Q+jYnre*jbo{7r%!;Te|&iK$Hfb5*n-^abgh1#p?*l4NBU?<i|@}C6%AHdpUDh
zPV}N76H1E<@+YUqW+X?AEG_zW!lFd3{^-kj)^TeO7L7y5QV}21Zb-NI$jFLL>yCZP
zXfMY?g!X-3_*}?7%drjlOzYr at +&O$-*r^C-u|^=F58a$b>xgONX-P4<w#PhWLlL8J
zZHV4k<AIm{2!mIzT)Bd$!jfU1O`2LfWl2uAdGmiAHmo>3Gc&z-U8hc~gg5XsSnPO!
zE%1$Fh3EtB_;=K^_xj>xI=_OxuN^EJjPQN&9sG(A6+3Kb%NCA@<jz*DXUv?!_6!sM
zA$-aDN_&zxyQ|GJRAtquOdbj~()k*)nrrIPo}^t%ORKG^vnecr{=9Dp-2_Wdh;k;O
zL{}QxT$A>s_S#vSi<`HqB%;LMPM)bH7h<hpMgt9$dHJ{A5E7i2V5PxAasn;r6(7Wk
z>kt;fsJ3l0h$&$|tNy+Z;mu7yp!>U{x}JbC`*&~TKSmkt0NSSWF7h9BXRdtokrF1T
zZXWB=1D~ur&!_HL#@30x5=(@o1fLkrX7gz2=c$WOL?g997m^iA&!x}}mvw3MU7g;$
zB*0W+DUH>YSOpc=ti;_;@1Qq4(MYesgN=sxxWojWz#W<#s at J)LKnu-KB~#K=G$bf7
zp#}9G#BkD+fJHW&t^MaP?LA~e2(QJD at cW_wu5Vo5y?ODX(RtG@?ZvI&3-GvsUmD-F
zE&npP-G*!Ly>SK*F2}Vwt+U3ASayBz%DI34GQ3sv`V%}Pr{vwFe0qcM=?TM2%c_}B
zfes4~)|;rVnGHshH6fX;T+$jza?K)^tRy7|DGf9=qYLEmaYW7p7 at Z`VV>^LvZW7{K
zCLzEFnnm%7xl5r9SeCqOAK3H#`u^#BvsNI&(^NwMLI(5R%a`#~RAkU;0c#*OJQ(<x
znz{3ma<7h at 1aNp6{*zYGI$kmj@#8yp(ZP-#uA%)?qnBPd3PA0|SnS335K1|3&cY?x
z+!ZRVyUL9VGWl^?!J0ZkbIrB7nmWQ2j{q+pLkVvWcK0lCIT1`5Lf at I!oQ>5dFp1I7
zav0&sgaC<JO^AsuI_Sg9ieyuG(ztD3!SMB0zL?^EBDnbA0v^PhpMKGvM;YyT;CD`(
z>UiQ<j{koA=~DG)zoTzpl+p4D0JuOqdQS$kXLIZ8g|)(Zk{d+Qbw+usK2b!T)q+y$
z6T%JDybuY{h;pSUVr$U5p?*O at R^OmJu+Exkhv64)-F}jU- at 4mXYY!NMis-)u2UvYk
ztLeq~mV;y|k;{7S1a$0!QBbB376mNo(q&J2jkLzJ1P6(W2(MjPyxkNAGBJBe8LBtA
zgM!sOqCC~;l}L+7kkTlOW(5?<AccI6zF+<xY6nyz_ty(VARiZp6t8`A#mUZiG|9wa
z4dgP3OoveZWhbb(R`VHxC9iZQ&pmKV9MgTsh+i^q;5z(f4;Tus;6MJpId^pXm2-)V
zCikhPa8Ig#L}av#z)jaq8N}gX6nfqu3T!>yO58O;AS_uYN*0f<9vGDhxF70g2_&$t
zge5S`?zrqY!f)G2cr&)<tNBT&u-%HKtNArSL7~0?mY`5S$A;Ys1)M}}9j6=><hC{l
zR`wY86SM$0_924TPjpCd+iLcr`ycA>3f00ay5pT|X>)Z^`6)EWLuFv+x2USqEvO3D
z5-+>TUz1i>Yg2F at g09qG^Ms0=RW<;kHbE4O+EBBJm at sVuEj(t_!VaRnC=gfSqa?<I
z2M;0e-WL%0kSg^<KJX)+KZCpbeskdhT6TE~LdBQs&P)8AU;mx(s<4&NDVjuNP528*
z$#G7T$YM?Mn-4NlyQ$UCh?AsSV`Z*F*Pyq4vnMx8kC->3S+|fRLIv;Z&wg7QmJ%HL
ztCNR({4Bubb(MVVmj@?~KJhK?e)jg~s0{L_?&bLUdTbC5Gun8vGp`;kLRH}k9Wtvt
znyY=IG}KnsF?&hPrIy(D$P#~xJ&GevuQcpLl%|#viJo0(N-L+))CWn_QiMpakcje1
z$9gQmO5{Qf-&^Fz0Wc$U?-xtpEr6 at rlBb`77Mtw&{^5atP%@%F=}*VHug=^>zDjiC
zJizc_*T+5mQnbFagwZme$lN7ir7UwzXelNzW2Z1vU?ldDxk)g<BO-;G<Y2JLl*E7E
zuU)YOj#ffAMA)Z}A at cqvUUmH{|Cf`Dwp-T^E`5FX<#$m526$FCnO{1FM<X2NxQdXy
zKN#0CSOyVUJIQQxFqdj`5A|00xwxy4L7~YCVK$C at vt1$@Dr0t^>JW2 at x;#Kt8bZ(5
z)@o|&C>?>&j_}>UC$b|Z^xadEQEQT_v1lx`(I4d7Z0X28V?ZAM;k!ozUcGC_qpNyP
zy2VeX<f at yneE3Efsk;0Xz?Y7x<p78Hn7YsK;mMOF`Rhn%Hkt9=pNq2*wwj4fxaoDO
ztbhg&NuYEW)SQRit2)3~;#V4=c~VCJyiE6~I~mP94qf`?j3h&n6&w;NYp+$3%;5W<
z0dOrqHyCMmeCzmwf5f=i^Y+=W%G0QNE&goxB?w0qj;=U^dWi<uNUkEo=JP+pw)TI9
z&HR6dO%NDtX}_Ga9y<+iVn6<z0w;`mwoV3)=la$^5-$rs(*4P_LP1k$vozJ><`5RH
z2xn!elg#mPB(2ggsAww-%Er*-1nP_vsTVUVl=S_(5GV_yLm~fxauIrS#K?-B-Mhk5
zbd5m!<BsiicxMBC09SAL`YUz214TI7Kac<1DW=Zfb^g$)3-r!ikA~cVhv!AS!e`+^
zNWhnth~fe$Rb6 at nur49amfT{%h;!p{>W<t_(q6Ip at 5E8;tiP3>fag at cW|ct`>K>#~
zso1GM>ZWTXH?1;y>q?NKG>jeNzid+ldj`1L{nmy#8KJRKA`r?aFbZg80w~xoC!54k
zxSS%1PdXYfgzX#bb?Jl|5QI-5iU~3Av%aBt^xwW6Z20}1yM!l>%amV|%#0#@F$r at B
zUs^oR6}>d2tU3}vT3IrT3ZB>o7$%duojkJ>p0^eQx>w78-yRz2TX$p^rQ!im+`$ye
z3EktJ)=hsCU0aF&?zUoA6PQ at -ivI_gl>Y~q9wB(}Uw{&Rc;@vFpqAtRNI(H+tG`R=
zME4no+LQ{F3aL0RO-(IxfodgGdkH13o~2%tqr|AkQk}7|4I&y#5M7I=QI9e%5mwv5
z=WjdC#YZCJD?i-00!0c%jwt*y=+U*hbNFOR%Eq#pOC&n5n1Iot`HL}uHT1v61ZHFC
z{}vL2?#FkY4+-8Cc{t49t_%CukYG<?sIV0=m=+V>=twO3PoEKH3DVQjamui8;_F3$
z`U+`zn!bEY4uzqVHRKze06gDu6#yl|ko!~r`X0Y7h_Dp-0&;wa_rK8x;PX4C&UP?E
z0egUaYkq(f2(6iU9MG~&MA}#2w-AiWnt2)Evm8Sh&1DgnL+G`K#eT8R#|HFZrIJOv
zw78v~`2)fi661%nsNWk5)-Xt*R)9<gu2Fk4-R>gv$x}j$2uRDfW=_M~@bBS1=$Jy=
z0k)zreDdqREX?kN`Ud>YLvJ|t1;9gi1HZcx&;i&DUXwZxHN2cg#0bCPxc1a(qbJwj
z6Q;48(LyYRMhX#_6uAeMsO`a=LGUT at EDa_}6pIg>iBxhD=%_8$Sfe03!A#;Ar71p$
zIA?+e^tRd31OY#Zge&j_2iJ4B2EM-~K(_aC2*8)|EiZZtu?inUUwp%1$F~q{Tz(a9
zwCSX}31=_UQr^Ty6Z(ns#g_^F66sElrW7QZrzMot%}i<o4Yt=Ry)J)_vJezbU?TaP
zlbon58$Wb>jSvceWs_{`{#&L9 at C6}Y^M51r4wwRXDSo4Yx^3Vs52*WbeUcyQJ*05&
zur)g!XUGFT{)6b~v#fF5hEY7`)IU&olRSi;HK3h|f{ny-CWlJDfCezK#ZW5rCTl1O
zvzpT?BZR0)a{kAbGxZwSJrCNo1-Qe0;lHupJH)?zPt3^F#coRQ1J2-&?$h8aanf3c
zy=OsESSU!|kj4_BKr~2wHRi1w0N0jGU5tO)3~&?<yC@!g1Ve|BSm}ehaz6i6faGvL
z#~1hrf&C>S!_$}yhm$P)ISr$smn^GJy<)HRi4-XG3AA`I$(Or3LtL%nC*%*09Qcbp
zivVhVZqqIk5_{!gJEj_*10A84WClb1J_U#e5(MMV9Hq|?bWGht0p_7YWXM4XO at ic&
z0P8nPxhU2DV&Nu%FX?&cfG9hCWny8Ww%&}WP|#{*&szc`$**9P6Ub0lN2Z<SxXtsh
z>C)gaV at BED?DqSviCy0QjF^Nes2PA`AHMMVc*27lFmNL*X~?ktM)*X_?C<OPjs+nW
zuK}3eec+IkUib{2h+xXV+1~(sfnY$kpQLve at qY0!$s2gO+Q$VO;`ngj!oxg45gtm+
z7WK1i<tvyv+qS at 91-{+9dB4s_y&$f2>f+O at w%}2KVAK`jZm(Vww%^XlyD?|uANY{q
zKJQu3BGeoLTBnXFn at GsJ0#<xXMDtUF1>^e}I|uXP&T at Q#u5*pA|6VvI%+rL6dqhvi
zRE?7Ue)<uG@!25JuYR|ZzODD=n%i96T|Hemou|RYON?P=f_0A};e$!(gS75CL`z80
zc!4MBE0bT=(mFIef#|20pd|8cHuXi0^SJU1k=ow`2(h$-e$Z#}?z*otQlM>`!XMY~
ze(4t6>>esWUUc^2<=xssdK;&$nn{%DBVwyGoEL$|g;xniS1sH8?o9q%_3oV6MOnhx
z1#g-G(in%tFKlf}LjrM<MbPC-JquWr3Z#Q$_WJQ{Zh!yn&erYIZNf}E#^H-Dfp?!%
z7XUtl1Gr~$aw<Y>J-O~JI=_Oh1D|5+#d|sSzVBIEp|*aEax{D2Yp at uZ+adNmk>v1}
zpl2AY*we!m`62-m-9`8~UZ=3WHwOr6_%uE>=e=`mjQbo%#xOP=!=Q{eTH3%r#!0{C
zDF4SuuXJ9hpktv1cz8CNF(gs>52zepJ^J<E;M!PI^UCv}vGF9>c-F<}x$&Ap`23hn
zVJxeunfM}@9IA6T;_<Qi!<;~Oa|pqP_#{4wy(bT28)!^Q$D;-9+V$TX6p?vQ5D$*%
z)(@^!&j<X;!jYkyj_34SGL?25M0L9y%kYKzgPcfr)zNX{67?j&NhbQk(ndL8*BTrN
zQD)<$-_tw)lpeES)5611Mx4KDa=N<T^dUX76SFc3AR8Y)^PKFnoqANDl?rK}M0irX
zpfo7WNuh at D;KZ<aCeZhbXA+6NWmHE$FVPA$K+&MyBp-e^KT{Uz(mBwkEt|vFah!7}
z_^VmPc~dwEr`VPl79IpU-Iy51CN?Xc)wBeYnfKPAkKP+Ud$zmB0D$*S5$*2s&Cuc@
z19mPtk8_}<uO7_i*a@(D7eK(2%YY6+CM+f&&Q1D at u2*2a at I*XL>}4FsiA`cSpvGLA
zs1ZrXM!cwzE%PLB)Jh7bWHSm04h;!5aqycnr#Xbd;ec`11 at Y@;EuaT<aO4C0H5FV2
z&YCynWGDQ4?`{IBXxkXop(BnWoGA!koJ%9Q^H&i}dTBMWv>nl;*${v8wu|r=ob8RD
z{e1wxMfH6~{av(<)l9Q+&1^2-T%fB)rOXbdCrL>#LiOFF#Kj)$XD|sgLZK;5U0tkH
zWtSx at Y-QKT%8)4Il9Ht at M+y^K2JPE#`0a<wW3s!y-qAI;$Kj&{NE)GnW!r at C2*^g`
z?{%KmBG+MwAMlGa=40;#2u#8SVJ5KwmF!(mC1Uld>#x at T$+uKS5xPda;D^G9S7*KG
zXne=uVr88OaG*pv&UK6JlY>Gpl at 2!pPmDQwwqnV|kJinAaj${S>0v~#6+Zs>?}}HC
zV*dx90HmO}1IH^?PT#o^M@{3TJ`#8NhsqGnhYRMCY${%-QR>|2as^2XY)XsCU$5fa
zXp$h+RS-)&)`j>Q0=?*(1q<%#Vj&?kF at Y}j6UrrOsDjg_GPY`!>`cc`!)Sc-_btUW
zuov#(<>39 at FTarRf`4GIDL4*bPuMc6wg|f8cemd<;`opH`<k!XHs*KL^*`||l_o-`
z;1}q`Qs_Xim=$D3nS;q8=zx<#!_btS3yJhZx4r{D0N0;w`~?&Zi(?mFfBWp9zb33X
zv2PuIL;dTgggohQO_k4~V5_iBm_p*0)^y)l<AR(&gi at Y_5wVw6<md`4iD{*N4~fKU
z3EJn at Z0`iew~w1UBe`=_Fol6Is`9m%PC5PC#4f1J$j4=PYwz3>MiRYrbd<|*^957-
zXJ+=FGC=+7Cxp3)e*#MDpVuDax;^+mBVK=H!Zh_ol?#kS9i6yPpW at I7zdAlt^dUCa
z!zLn*q<1kSRga-n1+*a!T}6eW58gm*$Q<EL{X0qvp{K=}lS$j^s1`&*Vp5`lu2A at c
zK}p|x*XhhUqrppO<afgSJiHL+tvCit-su2`2F^7pMjDM?T9e*OH-Fdl($}IVDBpe^
z;Npb-5$SnPh>uDa&U4X<-?;?JIhs$Jq_^iRpJE%+6qXP&Bcrgi^T%jt&4ir=w{_8v
z!5TNGSy-oz9c$iRn2{^Kg+ at l;@6LVN)hna at fYH`;^Qz(L(M6*WN{<&VfC0=4fJC}C
z=Cl#qHKP{v4}I;WAt|j|lQ1 at W#a1+^5MCM)7s-5ZU5;=Emns7&9c)Uas4C}>YfReZ
zy0jW1>Pi8L<u0x&=|U_d#wW(p+9AZ1)#cn=cJt;k(N2Hfyh(NZnXjnk+?9xEcLni#
z-I<ShOZWq)D<-k^RkKZS69_{tGd&VKkXjML)=3yGLKMkTcoAH;9)14lwa*uI?cKe*
zc(S760({i5V<#HS2s9^9ekA7vUAX)gvjS0Tl6)3hB$T`6IP(CV^?%73_@;LKxtsy5
z^chiX$Jbs9P1$@)6wih>?>Qt&pG<<@j{kEq at kGwx8?uRUj;n8O;yc$>;*&#%BmTov
zD!98^YY5fE)64<>w^ZZVPmPX2&XJU>WqNe{H)_ahEQA`?M7jw4e<a0==)3kFYR5kg
zX=cM;d at 1Ee|10WEP<}Z{*uro=0Z}o${W5&pm at NITC^K6`@>pRmtJ|QayFqyiPpj!$
zcwz3D5m+<g3~Yaj&%nG7K#zYGiX0t~DA_P_x7d%JK_#(LJS*Yb at XZ5n(YnGdevIQ!
z_#L|=vm*wdoC52AAjx0RoA~OR`1RFvK>mv3HVR|8wcH1si{j$Bbdp=sx<~X7Jv)yl
zH8M4srSe?{1v@=VOklE+l}CaApdYMGYvT`svh%ft-{HUb9JkBIMqL;-?9(y3{_580
z=JFGtJDy>@Yi&_w at 8Ks4mtC*>5A1m3ttt-~{ms7lFTYi_p>QCCJS}|xLSo{9W>M2$
zDK36*_lXa5bC*O%?+Fhtf|9ir2R0Rrm^ozft%^trH-S}1XZ?${bl0IZC@~=tm at Y#?
zbI=lDq5G~G%!wh1?BqTwCSfSXPit!6>)PLbtF8KCZs~(BaO$jCP<ig!TSqHKY#)T)
zUWsq-`83dL-K4VZe{Dx+S2+7y)4tiX>$qGqfY#hlu}EJlSC_TY)6N<$5 at 7PuTbC}~
z!p9*QvLP0KjH~fS{FS=%=fAjqel`9T-@)JD$7GyPc^o$yPwSnJYYDg(TI+=kOK^E^
zoU$^Qaf*$<R48(e1%GVcjyKcc at nz|3Ex&}F(Iulc3dnJEwoxt`<bj??Ao!gVX0d)0
z4aaAsieJvXAOGlZ%M3m{M*RMSw6sYR&vxB2WN`N$9bU=G&TKzr!<%n(%;}xCc0gWU
zhr-@@-5&v3jCikhwgF3XbG*EE`MbMEN87SnM6HWYDJV=y(dn&w{X9G>_m5pg=yD2o
zr8Q5Tb#JsGT4JV8+3j|r=-C$B^~WDMsIMn6;Y?P4g-B}vI4j$;7s;8caz;isU%Tme
zhvjXm(%N*(zJaDYO7Q)kqPT{$wkv6mcm51pLq+utzK-aCJKbBTO*ShDwM4BlJo$Ll
z8(puXH|kD~?`#)}c|2_Jn6>z&Jv_XhGv?KXvBX?9*15($@9eYG-+e;;9bu|4T|?`+
zVe)w{q4giE2fK-r`f#@pU4)i$AMS*(AUVoNHqbtxQa4ax+ygxR!4DVC|F{ufz_s{i
zd>&G1yB8AN#Jst0 at 0!*7_N{)5AA#=iub{=hP at E=mQ$!b@?U%HMq|**8Y-Do?J#x!h
zj2aZenSITh-^C;DHgCQsG!)Xo19Z?TWJ=E4-H&|u;gRld=XBdKzyZzhRs1w>o3s`e
z&xv9;p)cn`>`!x!b0N>j0H at 1sUX<a)Tm*4+4~$tEP7DP_BPlsNnLq4!w^_sw7jmbr
zkBoeHwd45cwcXCWLa~TX*qwW%+lR#zvxNBFIp75kB1g7cz0c6U*~s*@<$A;Hq$K>y
zuLCx>UovP_ViG~LXlvUgR6>YuD$lUm_u({?(I@`Xa#6LS^2|(IvShPJgrt!Jq>0Q}
zjkz#{7^^M6_2}?fDI?;qrB^d at eppV7Sryt&O%+nfq()rf$@2*b#7>PLH+~#GPoS>F
z7hWFw(gX-OyY9$=O}OF#tYZ9<_5n{sF|?*1l`r|ULkKNB&1w0=`&PfX?=)zCeGEDj
zbN<H%A5n5pCbQ>gEkG2*o|8h)c!~+9g#`8-0g`ZCdX9nsDPW*7MT at FkX7-7muOOyR
zwokGR*M>k2K)<0w`{9mYuRe9E8rL7=&*60g`}7&OVb6{odvH3F-6=GSX0m*f$tt0*
z;K|O(TjYJ-e7xR7Yi84uD{O~W5;0%S-C1xnIWZyez?p4rTeluuUWI4fA|yhtAHG7;
zfVQuoUfQIjfe?qkofv9`ThF$1 at 3C!kDIN+vnm6y&yIC`NFV;9V|0PbUwR1->GT+CA
z2GJ75T7xMliTy at DU_80%7VN%NHGA1Ml3}*~^3I(v(K$!AZ4wU-a9zdb{C_A#th6+N
zvlN0cgn0?Rx1$hkrj`91uL(u8uwPgEtXXCI?DmYqQ%+xyWd8uyP4OlF7qd&gRMz5+
zJoy&?WxN9yFJ9zJUmOz^U%rfIT)eoQjQ!>TyFK&WX&+pW;ETat!X6?cG#hgIt;SLR
z0j_=4v_HP1^)R<?q~&4JrfnPEe}|Qc9XVtcxMh7Hw~g89>>Bg#^cj08Pvy9S*duAb
zTOW>7B(l%aem7cc=}Y!`0E4TT*sJ60{SrsF=OnQjE?^~)KpX=lD17nOtMeAl96uM-
zj%z%J|IA+d@;yBJqZ1j!-W#@pSe4bQ@#)T+$8D*k_0Nxx at u{sP;f&O9;|Sl$F<+Ru
zr!Izj4nCB_<}a&%%KyybBqGVgFl)oLd~GE*S5jXf^3`>jqEJMhlVx6`5Wi&45p0A(
ztX>HRtlEKm#!^XQ{ji3XhGxXs^HTeqetp~_`@wOG&-O{}MS`uCKHVmN1X1`JuH87>
z`_Uus*&B&klF#R-cBALZBS`LAE6Jf*>VD2jMbUF3ksA~GqV<*d`b)XSwU(LZVb`^1
zTlizs at XGp=Qv8NC@}tB%QY1&>H9j6f!Y#@WsM-&Of2 at F!3;W=LK8wVOxCnXHRe$jX
zEwz9)3T5OO7W09TRvl#yJ&`_VCNZC|7)QhVxE*}$*oKb`pAU=kKZRiN&Y-^r;m-zr
z at dck*fIGo4D#LTh{61tXHD}~V1gO_GxOLvx at Tb+{>|QU6BECGbWn5g#k(a9nwup{y
zF%X}Ftd+UBkr6oqNA25$4+_ok$6;aJa;;V<s0$3VwG9d!kd!#AYjg`&-K4w;Go;v+
z&b>ySyXnkUXWO$#!0S)<D=h4H8b1ILbaUs;n~xvkXX2}lX*s#&yK`~|3?F{u=7`~v
z&XDoYS7ban&T*1uF6xO}zz5g{-#E58i9qk~MeaW&-4C=L8vQ0;=#XO at d`)iu0JjkD
z)Kw3H81f9czauK;=ZL at 1I1OkaJZ+PcNo=pUF|6sX*d(6&6mmNEEg1gQtl6_?ebv8L
z&+P2(x%vC^`}E1*-+m0Q|8 at X=E5__KY4YVOlP4Jr;nNd+ee?S4DeseKkn!QW%J{^y
zy`)5{v>|in!pHOG;kdct9b69ib=9y8Pm=HFFu7l@|1fv%Tnav;P5lX|WdG*I{*BO<
zMQ}-pbLY0REpHjoJDc44=i1DyqTXYjwB$!K-q8CY-UUK{O}%qFA?A}^IE_xf83yAS
zI0IJWaWefckY_{*UPAe~aM5v0yyNg4<Q(%$Ck(!H!9vT2 at MP2zkAFKc>$iEo&m^~=
zN2zty=xfIr)W#9qz*oKld5)f&iKo7WfwC92&f13u(Py&Id*qq-99jRkpH{k~Wo@*;
zcbJ6-?VSl*DNX3Td?tO4?MESeJxKWK$*jW*t at c8L8hZ6<pl<R1N7;M8MRC0U<2$pv
zcXW<&fFe?kB2CJ1cYst;Q9wjQdQn7FRIpG~?A at rbYiyuK6JspIBz|m3Ok#{NrhKBN
zn)cDuk1>AIRc`M8%<SHAApTz8Kf1^9-e+f?dFGjCo at aLVnf%eC^PgBd8h*$Lw63MO
zxrH>gw1`{E%G=w@%gV~z+RMwzo0~7a)!f|FjMgzd&xG<*Sovv>md`7?{~e+;kF_q>
z+x+SqQ#AC(?2I8pGG;dp$;cSID_^fm3R+y3lpH-Ye`95_UN>%9Qu2iHr~h>^IeFT&
zFn#`r143wccusaicz8s1PB?Ts)@UMvL;C~<<&=1Z3-O8iDVedcu5O0-yt(P=OXudr
z8{Aw&Vq-=O43owv{))-cGDa;HfoYM8hU_bej){pbA>Sh3HY%C6eT&3p<Wgwp_R!FZ
z)U?0SQb~t-yq7^)o@|Fx54!D%hAsz5o88OJw!}|3IW#yVWXbBe10y1Go>+u at _veiY
z4I{Jnl~-1l3xN)y12S)aT+q*(wDUuflID(zi$mGulbjJ*SybOUp)N0|3+4%4+N8{1
z;QNu2i^)ka0Y-29oun%>pl{NE&P^H@*84)!rM?-9>*uu^^oz^N$euFbod_$N2Mt<@
zI*orlT`*=$!PB&iaInW8S?M+1P)=iyG~tUcy|v-eTT6f0cj=vdpr*<AO?rU(eQcz%
z9f{ZB{bGN(F5Ija@}{o_^QLdqg&Kt9mxJXf%hLm$U8gtX4;z;_X!h&@gObKhU%apF
z>AI?<!~|Vh(x8N$IobRt{d|TR(vp*FJj2PZsswNEX=PKU*=6QBI`$o>wznUa*{y#1
z{7S6lC1f9 at bkVByU0W%JBlE^J=9e*%&dfn$BjX?~HE&cG4 at vPmb8`4=5)VleJ;PBg
z<w376t<&qxTsYVP7xMVPuL2)#?7e at T)sA;6i3h=*y^jfs7ofyhjg3Ku_}s;#^YTV7
z&W$&aU2(e8I`}!Q6FRDl>nr2Ey-Ul`fU;6=@BO#a)6&xE2c7Gny}}8oM+=@LRTA?i
zB+|a{UE=j*zb!5Iv|8c_l4IahWEK7TKr|b*a?F!s3b0z4mOeXuVQOmn;K6mdxzPiM
z3 at K|_o;RxfK%A~Bd6q79PD05_;(_Ag3dapfw7s=nuMZtCY<yxO{#_e4I)7d4)cE-R
zKI6R{90L3^G6MW3S2BTxg!Bc0dFVech}Fi#6zi#A{rsq8sr;Hies>f+%o8**8IzKN
zNeoFF3#g>{ovtC^Mk=g0`azBa&KS8Q4}O-6oDta6#80 at LmY$wQKhXMkeQ6o_w5(Jg
zU&&9h^byn{^^wc}v5)dbkIs9fkI<OTo!vXhT(4Zu4d|o3?A=kdf6rIB&2z0%o@$l&
zhVj2PAoPsXl$4ag=|i5Yo={oQ{^Xc3ja0}WSzG?s*t+<5XD24sqM~iP%1TG)PcP8M
zg3Yq%AFY$#(;J?q#NN)fYObH^`qhiquf}F~sK;b?c#SU2?r<q6D}IH;rVE at i9Nwl2
z@$oeKbDAx0tHz>(mn*#{>gsj)R}$SL@}zE4K(HKbW`dq9ot?2DC3RWGb8nq%fAX0|
zG`VnmlMR0^c4~tUFzR)D+pd?No?bAqx>&MP1;Asq=*wc-U~89SAToO#mc3`XiHwon
z&kPP4p4l3$*QF%aMr21sgoll&t|*F((dnuN>2;9_I-Pd=f$#|au2W!O+^C2MrP8s|
z#i>u<z>q$D#`^fiXnp<c?bPE`N}Jm8Nuko(I+qVTjRT%y<QPSM*<M;F>V28WveShE
zog0>8W+_%1nO)3SDjXQ2(^n- at mg-`+=Z}sE=g&J1j~f*ku24EvK=pBqqkeudv3|aG
z_U_}HRa&jY5%eQE#_WhA<%pB(lwVNl&K$L|-PPAqr^Q)uag`Nu at KaG4cQ`NaP%@m-
z#>Q%AB_ssK$LB7kTgNZWjgJp(<fng=oRX4EKZfng9c62yn%Kv|K2A4PYv|`)T#N#W
zi at p09s_4B+beOv<I(MyIsUbp~*Vx!7Ivdyjv2-bwV-w7=Kfu`P?rSwQq0+5n4O+Q_
z>}pc*MuMEk7vv;F$nQ(n2=hVq0bFdFU7&YAce;z0y+(EYW>VDEgs7WWV@@s#L=~W%
zehN<)hklrzOG>(UJ?W~H|F`G%6Q14nWKiIfjl;7`CO0*OG>pud);D}^enU&+ at T}4)
zJRxnUrL1UbIcdYQ$0rzu4jwvq%|fyQwUic5WqQ#B{csWbp+6Uwrc`nco^I~G5 at T1h
zI~+$Bzu-r+rk`BoNBOgHR(tzGHvz@<tE%f4uL5^n?x{7KvUSE6<FvE(Z5bS$n_D at p
zsVOu*A!}}Gir`7+&C%<N^@V6 at Nr}u{e7}B!hj5lL{(;z^J=d#G6K$P&wU>&H)E?ve
z92?s-`#2lgBIlrR^<u+1+WL-Ph<QZQC62Wf)2CHdOq*7*<JhqsPaQofyuD=R%q2 at _
zG%PDRzI)e+6T5aFXL6xDGyxCb{kU1puHE#~JW?{FwOak5%BqUWeTh1-`LQwD8DQa3
zXK3N8 at VC32ZE^9=9VI1pcJ5VR)>6~HPfK-h at RI7`Z?Lw~{R5=gK&^?Bs>20({aL+X
z-qELa6czF}8U};qow at sXQPFOhzYq8u^g1`mn(MUglGS~~a#>+f_si(~1O0sm>T{v<
zkDJwwHqyisXf-4K+|*<>>!4c8Y=j?>7y0Tc%e-SXDX=za at E-Jq_&V5V&W$eXyU3YC
z=>ymromO|}*I%QDx3sL(YR8ThUq6{gj*g5djErbT1$igw_4UxUS701^FfX?I=BJXK
ztZxhn$*t5I8XLn6 at mX^h@>@|WSzQtlsn?aG3C8u~68d?s<fO9R=F^4iY=xFC#>fWF
zvK*sS;67w5dS+s5Y*NxBG6TOpEiENG2fsZ at 6EJK{O!TBlK{e^q;^U>Uzg}n+Rp$IF
z<~>ll*z1K;JUTonIlq2RQ()kTQe9kQU|@DhoDLi at LwwH2X}o%<e*pN)^T?XA at Cbbz
zFfV=6m(pfb5AyCeOp<9Z*qs|76NT)zB294Xmp5C<KW$)~e#1`2_0rgx3;lajVb3|y
z{1~)<RWv|{_{0 at FClB_Fx6Xs!-Bth6NHd!vRNsLR`CvuDumvxZFTUS;2){{w<|`5R
z>CSlVHu4ubJ-(yOp-T8y>j}z-JCslPaN;;`tfdbU at zTt3Yd3IntMN>~B;Sbn!Z9)*
zeQ#X<>#yi~W^vb;{*^w3M%N$dU1f7#0zY%U5M3Mu7F4qCmPsij7|%`LzVF$kS*3+V
z<fFo(BLApr<gqq~Tn!H}==Cs^6O!`=h_eO^j_a#V&EB)MsJOUj*Q|;__lQwXg^+(-
z2Bh6iO<!6!L!Y1!fRAD57;h)KgZ*ajld0K;C&5z6DtiBs-cP2A8Z1xBG})xqB at Ww#
z4ocP|eYmD9cMOk<3l`2^IHnL4rB4bAG$4I+rf_~VS(K<-(3q+%&Kh;-snW6k`F3pa
zu6_B*s&a>j^tzd8iD=1lQeOr!o2#Phawvq?ASOW?VL`;~Mu!Uc?C({+z6QC at _8spV
z@$>-rPJW%mzGKxV<PtiMl$pgysQ3gWk|E at uVI^2FnYg)7`dxl9%)C!<oUumQ6C8x^
zhL@?7xXFUmo9^LP at N5|IUKT7E=x#8~+k(wCx!{|817Q6um^)w+osR{}gz`S%#{kyf
zf(<jd at OF3(V7?YC2(G<|8)=Fb36t~TKF#*?f>GtBa`m?)6!l>qv8%jak6PnqwHM at B
zf)wMALiC#d@=FOP=fB_C`TqQq38zmV+P3x3p{?5v;bGw9c>45zF(T}h*UBbTlS{-%
zI?1K#2}iKz^39u<- at bWMx(6h$+o%-cAFOX0X+BVvpO at Z`khX20dug#qN9)pvRfpln
zc(0?QgFk=pAUS%Fd~@(1@;itM*!7!8A*TD<s%W-UcZKX!g&63%297%T(y-{d;4lH7
zKE3Ps#~1cQ>$kcq+#jsu9*wQs)K>GTl+CA`bv_4fd%VHywj1J6tu9V-+vD(qDm+{A
z+Npi+9$Hz=ZS=i;^D>yl5ta6KlBOWs1e00p%#_sBl$o)yF)`7T2eqGn^^i`h75*Lv
zGg(^d_o-<xlU2F9pWLyt!`9B+j%?fv<ty1(r$$FwX;a2Y3nSeZ;M}DbVd=|hs5B_L
z9Ob9!gmE^3{VQKR6c-m08wCet0V{N^=Mnlyi|^X|h3)bS#)G2Vd`h>|dfmr)I<k2c
zi`7p|vDh2%)1(}FmbE^!T`^cM*hu_ at C_@Y(T2F(g607{Y`}LiYIH<n7tlq^%F)A>y
zv}DuflgHOOs8rrH at 2FpxwK4DC>a)TgJ3&lNnqD`5e%%mV+ at ZYDdE++}6&>HO?l?yL
z#H4ubtkEfYL${cq+kM)QUT)O(;(#mAE4kqjqw}}J$@oZ}KCw!#iy2s0F at 8j0WO#O@
zHa0nVTGaf^;W_+W$I#HE at mj5oQZ-I(XYc2$jq&vv8ygbXw~tckQt9Xv5iu%mIOV55
z%+X&f%ukoHz?f>fhE33H>FVo-ls;asz1CD;Z!okd__3ZIiSc>HFR>;sVoDT!b>8$7
zI)=(&E&w~`reT?hp$M(o>=9DOecr5Djr9!(yub+G!Cqc?Paf77zs$3z?w at zRvG!b7
zEa1#Ju=hW7R_f^H^4M5_F^RJ-nS+41#>Yhg{Fncg-2Y^B!1x7(05-PWLx4?7i;J1B
z0DL^g?{Im<?}#@%;&*hmp;40Kfw>VN-|Z~UcV>5+B;mm1LVt~z)i`Mq#1;I`a at 3c6
zUv4zwx~0<GFb}R<$YcRLm;*)dGwynNW%Q4jRVzA^8Dsl-7fowH8!0`j2k7m)>=m_D
zBhbjYI`U$J at M3v68CqVB&Y5{)@r^T!*OPJA1!y~YQND)%v%LIO%VivIDujL>2W{aw
zS9b4=Zg3Q!i(|JArLDq4%v*#*v^4RxBl8+(&9x8Ey3fkSICrp at y@Frb88Lr0o^4!T
zl&aA^<rC=bNZShKE`)NOBzdd5nmeyiZZ5vf`*wairqJ8Fc-kD=-ZGgN`t*jCrbz}C
zjnl?4Mf2uyV<Y};JX5p&W9<1!oxhsz=kCGFz&2Udy=N{$Ta0(b{>Cq><ah{ty#DO@
zIJ4jH;%*Lcf(>!z<bN*gm45Tru85~SJUJ=9VNg=-to;!8AOvw3_<PLli-QO)-Y_yp
zuNQU<_4gk-WFf>s(;y6r{xLbSv{<JvXW?2zIQvEewtn6L8jkDY>;LF`y8It~&j9}?
z7J>p(k5i|!_ at 25lQ02X7bfV;ZvT=^z0h!QQ$tv8l?1gD1io4QCk8TW`ku@(RwJ~G>
z3>Q7#B!zo;;rRIY!9$kN02BrdG}GKReykL0q26SwwhAC{9vgvrOE4Kd*f(O9HcoJp
z3has{mymgdP^o^7rQd0s+wH!@%;!;L>+|FqbU0C>`^JUn0Z~Zzi_I~pv%CUs75`Do
z<3SBHc+{TeMK82=2fbCa<EgPlMPvUwtB+EmO^T=((qbPBPO3gw><<ChF6Nx>E-ETY
zODHdk|8;0&dip at QK6ISTS3cm0(HV;-*VU-anY+|%km}62&^^1dl1Sb%8npu**fC>R
zVd1bDJ4oe@`i!EYjQU1>kX|2jBu-<{2a3;@m#=dgMtR6|T2WrU621c`L!HY=m{Uah
zjE3|`l7Ox|g{A)|Eu8L^3w=Hw+E24FS*=_7c1>PUmK`BNf|GIAI+Bzbo~_E_K{0jl
zMPU)Xz7+#n<Kjl<u1-jCj2^sYA9Pq+YD#i`v9I5>(5d4xhb>K;B^aw=7WRq?RJ*&{
zc!h_JEYfOid8O2c0d+pk&ashUP`QnJ!HDAMXld^*HV0h+xzRZY^Ko6fI(KR6JcJC|
zdG!q`UVX5vo_G_gKqDt=qv@<>%wpOp$F5Kwja_}a#jcjJl2OkvRxXk67R`>A^xfVZ
z)MBm at uj4nexzgV}ANX751ZlV?qflgC5Ui|kM3Wkun&f!~eNJ{Uy^oQn3~Ab6VeV29
z(+MbwlYP6j_*1ASSeg$WxnTub)g$c6M4m$jgc{;Y%M9^h5vj;^Yi3|TX$iSqQtBU&
z1rtbXNMdSs2?Se)lKl7-O>234YD&(s{QS}Ri}RC`6J`5^pTL_%=`MGG^n8ceAi-A!
zTAn|=X~@u(D~1kf8jk;ySBjRA*{#&EY(?wIg3>&B?!&K%Qbu8IjEDJthQ-ub7V;rJ
zn)L2)O+ZQMlQ2g#diG8CD~&gV#wJD!7iH$?{77fYehAEX$>{hDU$35VG@|!?kQU!)
zz4>J;vTcJiP7q4ZW^@Mls~+fB{y#O_>lgWF;t-O9UNXLeULxT5RFdTUN+dmpW`OZx
zlzj(Auj!i3l9AQLNS at h9N>?HF()?!63d2x$C99jgw}R+`kU^uPs~2jdr3TSm6G8)d
zjRMWb<M4O199njL at Dm%*M~;ruBY=4ye}5k+E+2|N at I+m{uNHAKpNH|&P`1Bh)2uzw
z{>aJ^m8zSZ0S>Ho+_;WGsi_&dg+u40q$Va#u1C&LV=(`$pJ(!*k at GW#*x9>J_wE-K
zmX{S4T7kUsE6p}^1K2bN&IY0(8f#c?5CpR at M(Ji*c2XJicnoP!L{VEACEAAT&*~#=
z-j+ at 3(ZWI at Z1KpV;*noX&nzh()_|5Zw~)$~mb>UcOS2Tmsf+`~$>I%F2tL96i{o6`
z6Pkdx8V3rI^j!~pVk$-15+mU6aGY>QndcfnGpVY0yqi0Q(&#gQrdz^6<q9b0H1C0$
zTov3<iJq(y?ua)m^w)($@;=<Fgo6rqz=z8CE}8y9H~J0S4w?Q!H~J0S28PcjO=5_0
zD&T7X&)}Llg72kq5m(th!cF`Sids1L9Gt^kbB3i2Vh3wOh};GvYXg1utX^t^NLU*(
z&211nKt>wi@;ECgMBb-(l~Ag1XZSpZo9Qo5dQ15mxF2Qu3zQ!4OiGP6jFR~wEmriH
zn^%Tq`X+07Zr)#JdN0OL2wu%Sb3Y9DH1p%d_ at Q_u!!s>?w$`Q;${9f4-E&U6%USl_
zU8Jm3g*c~~J~Ig_1%3Lw7y8sY-RXlVol5DPYWl=P*H7LtekrVF{10I5{YrR2q6d7D
z&<gl)8Sjw!Z|+9lL7$Lf{5N-_ at 8EXJ^i9HAWvxs<0q^2IN3W)F2|HChH;;SOBCAD;
z;qtW_pjjo!EW1l at HLTA=<vwp_eGcXy|HJSRGVZ|e*`{0KTBR4 at VGLi3Vo`v3Z)))`
zz_VB%t{u^(Q-fGJ;ZixsT^bj352<eBBHN-<gCw02G2=AcGA?Rlo!Y?g?B2 at f>W~dB
z-}GNg`DeP7??M`B`4;+l<StN~I7}L8`G9B3_}2`7ha_0j<F7?KnV$q}di=Gpjo}<=
z##<SEgw$82EQW^w9?$4=03VDywsTr-nj|A7$hw5-RRq(YWYWlTTmAv~Fr^3JzsvY|
za$at89UI#N<*|LxGPbE)_b8`<?%MFBs2MC&u0^hOjIV*RUAbwI>mJ5eu8eQ8j8$v;
z4am`AZ at TDVtTvm+-YTI^wgtOb|47g9og%ByGO6GAeheSQaGtCdpbgMJFY{rj34UJ}
zc5(>%iCt&<A6bQmD`Qj|7+w9)AQe_TVX=b}Us19Rc~X||1*~LzjiNHa8%zs0CSi7s
zC*zHd{~h;3Ep>cFJaM^X7fe13A7$1lg)ftDv?O0N*jm0yA7(rAn4UDFtyb6M$=6Ul
zZ!zmR(5s-1-58=Ds3XrTFNLqH=Z#D*(dPb8`oR1`@$VU)XVG)5(g6MHED%%<<-}N?
zF|QF{r{!}SOfLXF+S1=zxjzUiC#Gv0N#)DqXtbrjwM?!tvRwbR^mh%jJ)>oOolLK0
z<x`oG`ypNY5H%~G;@cQ5l~3))XH3Uqne7}}+hseOln#LBGaVmlI!R7i=nF0M8Plxk
zon`tEu8wQqOmLm8FpG2TrJl4p>+7hEmg-3}z07QMPx{o!-RVQXnxA2FK)%IZu4lTT
zmB(Ismu`R!Jjiroj5M#ta#q*m$=6U at x?Iu?M$dGE`;6(v7)xIlFnXO#zs#&le3rr$
z at Ud*{?RLYKzAljadI76hXYOl0OX_RhkKtpx=#^U41a2lb55=Z&Y4tF^j&)rl{;3M!
zW_p<bJ#O}IKtBqYe&}R9_>SQP<N~cj<_U1qB8IO5`5j<w(93N&&Dzjly2ZZ at Z4Sn}
zgJ_Ej<?>g7ULFwdu{J!xc-1q!0r+`a)>k#d3$4nZDwnUpyG;jCDeI5lEd4?2`VZ?5
zxJDI#cdsj?BbM%y(^ZB|kt*1E$ZhJ&>1CYpsO(S$BMsFR;5`8CGxJE>q<C3w({8Cv
zlt<bxic?a*gt2}xJ%E1yiOIkq)6Zh`@E86~83lNegqt+Tm(oM|Kgs<#leN{r_%VPj
z{7r0Q{rDrpi=^^lZ2rXh#30$?YEGuVK<VZ32jdM%mbnJ5QL{Se_?*SYr at 0PyJ_PEZ
zw(!UM!GN<mxRYd!7|M9MA>3nra6H40lQlxIFplA^3@?`Hn<+ii9WVPTzsdB?lpgS6
z8JGOjlg2N*(SId;BhiD8WKI8-&?M2rcn!5Fg+3cPQ07LWhrTRU-hn=&^RyCrc{^HZ
zp^pRlL9vg}EB=7-J;-#KT(I!3g0VMQxd7 at -VD+|fzo20z`B`*@0q_zg>$d4~oB(5q
z#tFfUUI{&SUV3&N`jS4o9?a+|UdeEX7nIK^XF<Jo;-6?f$T_j=*?R at dhg=4-<wRHW
zGx%NfHoeeK2l{5Tl2i7ekE50m{fPp*(~GY$e5mO}4|=MjiSoSlC(}`>d}?b-WjvFk
z`}Yii`RN(fUlRRw at u5^c%x5~*U!^jhWqyWV_Rj{%W8exae-M2)ij`j`jhRW<iays&
z5BB{EO0m$Z%=BEHG=G>n0sn!OpCp$*gO#5QwsjGsFPF-f=NtG-l;-wi<|nM?UbWZ@
z_PztN7ZvQ9)qUk_ppSi7o0DZ9=`-p52pIQYur^o7c#KScp&R`M?roX=f)zcCS8uLs
zj<xubfXloJ%ueK*?F3h6ie$22eWO%ZWW5IsmURx=%<ysv=axt at D~y5hto$JiU(A2b
zaEp(R(q%g&#d~I*rgo at X><c;_DcfRyPL6&pW9FV~Fr@=sKP#L^O;Wu=q at oq@Au?Xj
zMQ at V``~<Q&cbGgTDg6n>TcGR1OgqS0m~)5pN}p*(AE~&clFN6_G;Jm8Ec9g-`jJ-j
zdllb9`6Er+A1S}dLO<NPd?n4|KfF6Vm5*{dlfwxnhvi-JVfu4W)`tMA@=Gn{XLT!I
zfbz3Uo5+zK{B+T0KSG~v+WZLpS_^$nH+mh==YV8-(wA81M|7j-E%F>eYq7L<Gtgg@
z+jYUJy}p3ICF5F4EU=c@!~wGHYm;M9Y7<+{aWdd*yW(o5KLcbvX=D1s;%cTp!)1KE
z75z|%c-y!$I42EeH|T=_U9q^r0DaR&S4aT2#O|UO)1d*~bdJ*hDC^vZtdFf@{Vw`U
z>$L&Uxe(B{56QZ2^nWs)ljuiU(SHIuXI>i^No%o`-(;a5{<HO3f~0f*w&sV*R5=~!
z*F7pzMJ<b;K$@yxr42j3nv-M;76SKWvW<{r$ZMEvp@*@cm~W0P0e7Tt(sGv}Ufat0
zPNKig4`k*1OOE4$S^P?IAIYx=-S`arwqWKz11@&00X4C{&X at U}-4zEgekA&{Vu+=$
zn^<4x%YD7TDsD)$_~*l{;(+(%emlkFl;10TrnUbs_uI>?->m7&Ec7F-=wFd-#iQjn
zS?GsPw2l{~e(Oe0<-_`I`=j!a`)xMsHyRx)@aox8d6P`H6mQb_80LMDkSj*j3~z>d
zuEBM|T=Q(uZZv`GNpJTU`ix%a?}6>F?$!?yJ at f;mwCV?mp2kDAy_9bNf4;4I`QQ({
zDRz}_Zg(@Z`<n1yz$bLmi<2OyP^NeBGXAIRH?CrSW-#*uDc;)U2Qod1m-)QQ_?P at T
zsz=4$_&;X)TTvy+lTrewGa23i<xG*}*-H7JCG+1!Z}%Abj9%zzduMjzN1})Lh*Cbn
z50hsv<xBQ!F(=nR=|P at V;!l?H&GP90xlLj6oMkN^*)N&}a!6u!$4;1q=3D%tsen at -
zLBVDCixNFqD*PbN`OT(>U^kPxd<y30vvmr<%dN`)+gv`h%ewrfa`_Y=$0;rJlFgoL
zvDsF2K$`<_TZ>$SJf^-EzEg}>1 at qJwR4DJy=oPn#8E%c&%DB=-!ENmoca!Jqp1ATc
zxI4G63x|2%T(3<t*DJ0b!gbBFj86c0K!(3Mww22JCQWa+O$_;+;m{L`Kd4RM`=NDG
z3rzE6Stxp(Q`oqzrnnMt4+-avORX at C;Vk~6qF6q6Pil#&fwQbRiaQz4{bJ}D8`Eg>
zHR3lCK8NCJleB)g0%GFJjOSFTFXT4%z-?j at tnpe4P9M?h4R;Ib!f#pO%25_v;H_}?
z{4V|@q23VQk2 at eqmn`8Pa}FeIJ_j;Z8kkJ{@X<$QtQ;Yqd$os*kI8sIFEai~K3Ca8
z#&mtBhRG&f;*fi$H{2$Ma%sV9Ex3YOfJboPY6jOUy;*;I;_g&4%sA^?3Af?)^opzL
zJpx&dKQTE5NV?TS#^1~5p6^A*KQNgD^eW?D<Z~yx%UD at 2<Jw1MtZbLh)jX=liW9&)
zoI{PAMUyRkb45P4fwO2cJ4YX0uV;ObA&*Tp!#8!uZDLIJ%-+$L7|$@7X2>m)_HRE6
z_}f;vn<>dG1N at y8u9U`?=_A1JTH)@dWQM;>>t%hAA-96 at W4hD>SDRGkcH?v=|G?h*
z2J7T=z39J?&14yfPe0l>-OgF{4ga=`$35CNY<$vlGal_5K7h$TP?mqUzTrdVbK86L
zjpVD*J{Td{nmN7VHZk?qc&!CjOza(ZE9ecU<7RcQxH~7^3sJ(H+{x+<(^w=e;fg{D
zUtp0km9goT%_t_5Fx=cz#&E7gKDXFf#->|JX9-98o-&4WdGfiI9x~o$`i~ICco-$g
zD!EtOCdS(uueIQcklt}O|K4%sxZZL1A}gHftAyLc_l~Q*y2kGarmInsr)Z_C)K-{S
zyQ6q7D_Mc=*!ak}zK1-ht<W;Pio!WP^lFvqKZ*fNCS#-#gDQK&ZDLS?6<%w>6{w_F
z+^t(VUAPh*>=k!MYrAkJ6A8DWK5;L&S}vc;%7^i(&F!X#fX`$y)b=*sZKg0;Y4NT{
z$Gc6FeD0YZwm3t=Wt-aF7SEN>9eH%TD_xlEwRA<Q=Xh7<$>)|lGTyEIErm@`V|QG^
z>wEPbf(p9(6bjzZ>--nQUFwD_c(#U3clgEiR<<~Z++uVf3;YzLOX$^(1hsazBMQE-
z*D(<k-F>Vm_ at Z9*Aqb7^hAVh!Et=j_XMV1d)yq4W{ag#4)e8>gDzhJh=R5`<`4~L+
zQJm_fa at 1q+yl%LP6iR-sax@!n|Ij;F-SGTwxJU|_j~lF%#^*oujw#hs3trF-R|4+A
z at Uaq(CQG^ocrn8ZW&DVlUh;XBMRL9WHPcHzud-OCkL~WKDJN2#cQD2Gz-xQKX}yyk
zgHL`8KIJiZ-J>|;bLwO8Y29$z-k%ts)8%%xS at 7=}UN7Uj&GKh{Td=Z0!udUB`7 at s_
zSUE$+517kgK3lMIri^RM@?`#6uyU4+7g+l11mknI+>bSu{<^~OMj4myAp*|qvU0D~
zF0=i$;BCF&wBGi|;QJnf?|%$_;8C3M`SfG(gWYi2US_YAhh#aITkx3-e at 4bT%<^Zp
zI#~IvEVsjE`7=8mtUN5^FInWD!SLr~xh=KGe=ft1$oOdsy$j>>c^S{M(C0DysElv0
zvcJR4b{X%QXJwbgzsxu{b8b(&aqLn1Aj~t<KWb;#EN+FfdJUGi|3SSqJ>bfF-R%s!
z|1jMgPdhsaXW80|gvXe1ZYFmg4U*O(#3QWUeuJ6)HRX4e!|bnHmz|<(QgZw*+bOhC
zcmvOY{sV7|{e6lQ;?1Umlp|mWna^`J-0+t~8zr_?T~E4sGSvoET!=ZvDU=Ex+j6Sw
zFQwutj4L`^vh#|sdS58Hdi7+g5>>b)M8BZmN4%g^jL0i~QA|^$#mAQ*l}6`5lUL$7
zzpY&HKk+^C=Olh_o7DbOq7R=1a#7$m`R`$T7M*LIZ3PZ3cU5q8J?zR0kJ=BqRx8by
zkJ=$Vz8BnJiEAIwJL=ZB(qv7~<SoT~ezK3pB+kzL0OzDRRBfhJJSW9^sJ;j7 at AMfP
zM(e at qdk6Yw5bK`+xqnOyUn9K1Z>D8HRL9FRtgY;8yaeaA%I5~MSvq<!lNsPvGBfur
zeU1!#gyCi%0q-)gdts(q6lY@~L((mi6T?4c@!CfgpF(3AX!gVKV!#!=H>0}^f6rku
zl;Y0^5}oOLz~^<vd&-9<_FRzZPrxTJJW$ecejw9vdXKP->3E>bN3>bTc|nTHq!mLe
zIsO9IEMRi<WV|hewy&kM;5Ysw%L|+13pn?Jbk5`~$*ZbYdD+BR`8vbRJ`mnz9bYhc
zjgo9epmkjEk;P}ycz4GYe4<6S4l>_2Tk_qxbG_lf#S2z^7%Xwo18Y9I;t=IS=^n4V
zK1uN?*@iSz`O0{V83!A(*eqX#6cb0GZ+gi0TR69g$+wT$FBYYEJc2vi!#_U)V>MLy
zk!vtlC;O@#ng;kMfakOJyGnGzJ-mjN$z}AIqs}}!7t!@{$+vuTPUDNa<ILwYSYo0F
zXp|K_;5MPw^rlXTMcw6CbWo3W{|50eV(s=a%T(zm#|lGw(0&0j5*ck at R$nfR<qyOk
zXlx_TiEKQf*}`2upS8RB5!;HD0tdGB!cAs3lfbs}m{%wz+p4Tm_OPv3vaP&g#0!|G
zwv|s4m~GW*)f#t$IsmQwZRN_}#P_zg?d2zNh^s+g<3)HG$8#>HxII`voS>rVy;axm
zMAIa5HQ3wu9bR^j at -Nf6Ds1RJqX_>0Bye~xT&p^TpW}Xli=!^VrJZ-8>04p~*9m9Y
zgGm3sX>BB0=a+$&lFA%WQXB3cM*4rG1NjQX2mhn+Q3Y^S9DT;13bE%lOm~Qn;BLCB
z3g%cOM?WE^L)>xxCv;7`0rt!*&7N!Hmne9F>w^@ko1NEb1%KR$MjD-)mPbpj9bA&n
z|8xwclGi2PPx1tPV!oDd<LI at h4+q!Yv0STF^BOlK&}+pTPm$MAs&wsflPkK$5zDp9
z%-3F*t_4{IN!N1pT5^<JKxy6T<dE7;!|TwB{3QqFqMxE=W7;NuI-{}YLekt6T$?Sw
z#KG21(MQP(N@$$}wC?Klt15E+eadFiomjb%qE%DTE~^F~lbZcV*|vO}f}>?C`zR1=
zfdgy3>gHXmvROl{n<JGi-e9ddDzyz$nefw at OuEWm=D<o-vKqRV-AT(1vML+1Qb}!>
zz~rKP at GVQuUy|PvkRP7Tgm{b!@tE`pvQ97!;@^gAC^zml!WlaZUHpavUm~I++Y%)-
z^?K4B-~xEL{l|5wr7m)UHl05 at +<_X%rVg?RHHbGz`Ob$=3l%##t8(4Alr%qA#Tiaz
zbH)xvjFX+i68wg{Ggso`2sMZ$_DbHJX1ci(+etrIJr`qD at c%CT9~~rD#SX2UDE)1@
zPI`1mzrH5r=- at 8wyAvG*K8)XTbn~fy^D6|pr-JLhY~SV`6y>xzccdYO;`Ej at Pe^-g
z;r!>1E?96BKbZgg^Ya%RJ<74`m+&`)nH=5F+y(x`2hb9HkF2KcqX~XrhkgWK#Q>)0
z&W#&{&^`cMn96XNL7>Yt^x(JOxM3`$B!r#;8l}5TW6x>QTx<kxnVkX)eMC at P+dekH
zWhaag;53TLglT}LtFY_W at pCtBJUAv5Nb5!1O*|Ey;HOBrB-NUm*RJtX2uFR3TXs3(
zJ(fpD!-a5KE|tsXj;9R?bPfs*3U&?&3>lopZFU&Ax&QhBo4tl9Hpe-vPYiZl7wEMq
zCul at QNKAN!W3sIyI4_Rs7)S49rxA{7L%5^2lfQkAs`K`p>lg3bR^3(I{R<8k*97=a
zyD;{Tq@>%icVZ<xHadGuu~H at eLXVOFl-=Q8klkThP?p_cPd^;!ha>%PVkx_FIBEuR
zxE#}kcozd$`^RPSvHI?>MH)BjeMqd%d0OE%e-zc!6pfuQVQkykb9?ulJ$Jvc?fkj+
z_A_UNpnaXC`+N&0R2LOZsNqk_=i7 at WOrZ35)7Irnw{2UxY}=xn=gxic#kuoe;BUS-
z_sZvAoIiW>{_o<G+m<fhx^?-I?Z$TV`9<a{sLisaec?EZ^@Rr)z(sNfZV)$=%cJ*B
zd$dp`GcNWHbAGgKe(*I2TJ6e+C=Kc&v2L<M-yTgi&g}vG^D#;~e~!FyM);b_py}v@
z>f;mm-2aCJ$P?XLXhC|F3DG at r0nNiJj6?gtMu5)JY&HXqy-U6ZsEMqV{46++uhLk-
zhTWI8DMt}zod1VD4=W*E=W#KccdW{#FZZE+Mda&uX~EsftYX(x^(a%qLu{&Wao2e$
z(;nvB=S^?2IY|?u)FAx))^q2#p?u<V|2}$#(X?^v at oYiEDY(qEApS=|6!4D-i}V+d
z6`TV7$SDS6;Ro&+CFZ#Xv0e#NU~B at LMHAQ%5nzPa$cI2jirN;bkq*x$*H9!07c{St
zKgb`ip#%A}zSp6??X12LX~E);3K8>I_>qUYeuT3kFn|y at SmbGiB5L5d8A>{#SXU_5
zBpo(TqZ_Ty7QK#ckZ`E-nxG+-`K0nS<bWKgoZjRF at xS6#*8pxOm#xxpE~X!GF8z%?
zz|(@?LNff#)4zrHfqo0bG^1!=ae|56YX!H4-X^B+2GVmKFdjTPZ<eE%y|dnxf6o~?
zA*B;i^I*^1Tv&ekkYJqiny+8!_{!HOo&I`wX>nADjY9F(yYIdgnV?M%LYw$wHjbK%
z^9k{9wCAiTER53iQ76Tb--tMv<VWf%V at eFZk}rEloG-X5>?JQrSw;KL^epjKylq;+
zIdVZS3eI*;s*BezzNqA!o!AC>X-a$E4qOW-m_BaaWNF!A0}X10pa}>J(Rm2G{s;8d
zcmE}c-+WDy?tG8lATLjzys){ssb%4mNmBU=LGiY-{;}oT3HC50SeGw&s)GYH0fJJe
z59IaVpiBS#jtu(Y2a at vr9duDy-`u=#^5jWV7Pd68@{fRyjzBk9u5Fr>j=tLZLpAvi
z>R<iKFB70g14$ryf;7{9Og6oxd{eOudd!jIjIH#yK!5X`BTRQ&*qHbdFX6R(m1_oG
z%h^1rPvgchzmBXi-NNrdzwumnnj7bgFv89}#}CHqxJ?3hNGj&t-M-z!>Vv7mk^4H!
z_lfuJ|4#L{gZzez**>&1LnTZ8OyBrNlkbsYbokyqTxry7PzG!;YO=T<^lmH{4|NK(
zE*<yop~IvY$g}X58~*uf1O8I7A0wb=J=t?^0jH?u1 at N^Dht`Q%5-w>ZpVbZT($xU8
zi<5lW2GG_0!g7{>UQ4&m)3`zXZuAXVs-K8F_iz5CZ|<YO!^XXQ?3;%^tgTflv2!h2
zyF7!$)v_|~m<9=}z%J4K0N9J)@Q-SBAU;ac*1!7XC;ug#;*I;Y3g7$R^0_Wwo__U5
z=Iefn-rxrat{l%KrFBuV_o2am!E;ZXXvPbU9$P558ec$17tDYDQTh;<LDF0pj?gNg
zUwG{30*u~3cocPXWL at Cj<fppwk}l9Xk&nq04+h)9v#iV-HO+)b-R67Ou2I($%!2VV
z=6J$bV&g_x54Lj(TMwv{<K$%1Z~U9e23JYP4y#!CNLnY}WE#w8&}Wx8S9-^mS`PFi
zi)LI*p9#|Qlb=D<@&zB`in;M@%sxxpVSFwGs|+>#qhhgTJa<`~FFLY3THq)uLk!R*
zAqGznt-(_X-lC_HKeF%s%=<L=^@EuY_Q8S1llBKQaVS9J?$5fv at 4>8xsG79Vv-f8~
ziyxp^{*-V^_RrWp0Z85};K5}SaryFPyz%m7asYmxzkJy;SBZg-%t`PUzuanW5>PD|
z=3L=Nxol^aKbPipu+)HRFXQ6N#=~+gP|u9Zmw7){4=18p?k~9hE6eq6QVHh049unA
zzv!ixJ0mXNyo^_N71H?!{B~f4VGiPXbezqTO37=asR+J+4u)WnbcPVRzf}$SPBbch
z?c&!>c0-X&Uvur6aOv7L<6e3l_?(0Y%gO!UXoNF^;}k>W^6jN;-9bJ0M6z>F9eZJ=
znPW76pRpG2+J|@j)tzm!T*7x7C+?HxkT1AAXhVvnue6qQT~bS+Eh)t4MDSmP${*-m
zfWD=Bdt4s9>e at BDhVXYt=XS#1BT~#+gxBM{VD}v9em|U?4THTdA7$-rVw)?mT5T--
z*s=e}k^Kjb91(XE79KrT2tUV;7M}R(+V!u#x_<2|ma7l%;qEE~#*c5B!d65AXQR5A
z1QS3Em!^REhKIkeU!?n=vaNK0MVgM3<s;=MEv03o;yw5e at oV_z$X!qK;COrGmm;$L
zo8RPw9PGFXg^l3gq`G-M>EfMO7dHEM(n!uVAsSJSJG;Y~y51`K;bQU0?U*O-#5{2)
z&Pn#fIZ9%7(*cxDa%t>jT7f<CK~X3HjX=Zr5`GH5mVcf<$J-;AB%HCc=&W#7I@>tg
zJ3BZ#x^ce97yF973SXtKjjz40gRdifQ7x0pb{xZ%IZou3bBDN>x&9TX!WQ}S<~$kx
zI`k!Z7wJ5nS+!~-sTONV1 at 33OJ^k$2xzxtiLLXfNS at _9&3UtfcX~}gfZFKV_B4lnq
zpML%JS5}T6*O9bva6(GT(1xW;8{#JG#jmTb+6uzRoMo%Bvs_(gdOJDR9<Oy*)BPEt
zj^9BKoTZ(VyQkN1Gv_o at cCXr;0T{hltc9QABKr9}-IZbSkRf)#35i2C6%-T~ZF;t2
z+O$&u3)ACtWu<XCU0i7yc=pwk-0keMb9Tn`?VB at l`Jz#|UtPb{)NDhIGdGRpv-q0j
zh4fd$r0+isPay|aqv1p=ejVNU3%<?9N(u0N2l#g2!sweoTvrD3xR4+zE1O@>T=sH;
z5UU2#wqfq9PFGh^uGi_voq~Z;2T}k0(F3E#l*a4E7PhsIE!62FqXv#09TOcLHD*k7
zln at pXo}E(|5xzaV!Zjv#cuiwsVog?bjH_#+fo8E!PoJBc5PvB(I4CGEoqbZh9s~UT
z1pNBa_nF<y*}n{mZt^s<>DHAsjdsT-5MlI^AsKd>q=cax4;K}0dbX%|DwFKh;#!dZ
zSY2G479XGFZf}>Jy(`MQ?^DZ{jLdClki?2+O)i&&Umi!(KyhpE9`IGC%6m_k*FRkF
zXjDb^Pa*qJl{l4LuA-axRH1muXIR5u=Q{)~i^<`VHGD|tXM(nh*^)K<csO at Rw!QN1
z7mR{Y9jaVaCHWm#L>m>D&74k1<>9G;j-ow+HWuXP7fh^-ii#RorNB!%!SXI%ws_Hl
zMGKe1b(7$_)o>lNa2_o8zfuDlsR{|6G_fjb;J~P=i3OoyVWA4Vd?8#!FI|N2!i92v
z<F`a#m|LRLlxmi!*u7gmV6~JFSWWW*D-<pcn4V9%c>QXxnTqknMmhEG%&fT!1W%Uv
z$&&InekGefi%kE+cliRCDc4wXMZ!1y7M}rrSgQpCzYM=b>1dWl8LNhC-(y%;e#=y#
z`-5I<v(|#u0^K!+t+Qa|fc?(uU2nmr(L9)p?nw()0(5s6-3ALb2C$zPw$Ykrz5{;%
z*rqNF#q%9#2Vk46=-vW4Tfnwhum;l<w2`j`Y^w#E1lVeZZL?q_P51DAyi}!B at ZIun
z-e8z*_ne#zbG6O|%KOvYo%m2M*V at TBIT3qb?YQ_c%j(WH-l98RnbUHrScd(sjSJQO
z{FkFnP9Wq96htPzkehR?`oh(#7pjlt;ETp<*u(fUPBccL(|SEJ;C{%U)3;|1`<V>+
zc~~a4TTEVFOr|b|kuclzjPR-=feV509>;Pd8njB5BobLN`a|e#2$nvAT~r2r5RiaD
zaB=rUK<44ePfkzizdLF`P+}T+-L>Uf#rRL>diQnR-6uUEcz3#+%gK}bkd1oJtxd%X
z@^M^B26<hVF8<fXZOS2!em9arAMU8Ex;A_`PAzinzv_Ee^#^DYn*8Az_v}vJ8GFg6
zcenEIx(N at r4WKC#xpAi3!i!*^z~2kf%Xu@|CV-X%rr1U0>EUS}2)>9(Pt6Y;UtCu)
z{<FE{3fYY&B7N&;RTbA;e!f4ya_3XgyXu{TJyGAJz{P8yP=-VSJDI4BvVqz&GjCK?
zlDEmH<g-0Z{rQT$<t2i6MCE+ydDdquz`=PJ{4E!=jiQG+qa&Khml|i_JY&a$2UqT(
zg+kF0GW-a6c_`hCZYaBc30z+d?a|2BOZiUe9c-OSueD0bDw!*+!;zi7cV2t#?YBSv
zF?q+RoYl!&8__B<7i~ay$g4+=purn9Y^Xxw at 4h~#LPK|79}a(VY#*?}N*}R5&CVfe
zEO|Mtv%Pt`X_b2G^yc&nzIp^r7vmCI){hx;=1fXS@!WZ1^+79+6qnC2Z<h5cKWBaB
z$g1%N*j8G#u`wyZDQM`&+P}W-+G`8>K(%xnh%^?%Flz>I!7LMSh}tbgqvrkH%$XXg
z?EHCiMoc(FPpyvk)Zy$=r{Wi0M5=4wU3?RM$UXTBc8y;+Y7~Fs{rAalTek3Vbem4&
z=dD{>r7t)bzP4`JLVkPyeW>{z(=FTgfd?C!FT%2q3Qg^2*<r;~E3bLe6l5$r6Qz;T
zt66mkOyj=twqw-EVVMEZs$W-Z+Oz_FshBzM&abbcV|V5id5u1fCX(Hm)1Du9u58}&
zs{Kj(H(YyT+;hXT+Qu$fQn7Z>ncY9VJN93-&%g7O7-jrm^Qx7b$<@nsGmVGE8#D7)
z(|zAJ827Eo)#!93qqFmZoCCKlZ9Ce(|M39>3JTIj_&bH|T(jqtMuXZv!sFOH2W_;`
zigZn4sN6;sG|^MT4 at 6QU*;1ymKVn(s{twLy2}WDU=55<H<JW}GUdviL=jIi38F8J<
z7NobPlvR(LFn;N}iO;7!|I|0{*S?gKd$@GXn(D2o7Z3gYY3cX~Xw=<RNU`F<r%JSF
zd$n<mc;n+w*Pjja*tqZ|Z6ELdN1I%2=$x*g?=&lE%;YO;O(e~s0cxYuhG;$g4eU^Y
z-q3 at W|LH_;gy017#!797KYTmYzalZ_YBY9>zC}OYi%F>Pnb-C$`TWhB<ePTk!l6T?
z$p>xndFXfO(04uy`WbWRUxIVfhBw&HhNcaji}}U$*s#Gk3GYNgQxoYle`{)Dvad4T
z693268)(MPAV01TV#5iXmrxYIu|3p0wBTA-VI^lmiqm^L$P1^%CyhoEc>sT)F~Vu_
zBc6OrZjw!?@ZPltCs7y*L=EJ~y=$WMj>!^oK@`|~%GXrVd(%%y_dHFvgbiRzVo<-d
zL_gPS0jhB2HQPS>`yTh$=7aWg$AxWCn|#)V+Qx<l_=jqOT~&6xqpgcggkP|m(#6Kb
zv0oo9ILtpP>H5Xk&Wjga6B6J*y}#hez9i5v=3?yaKkoc-N504KWzyYP8qnAlSl>`!
zp^Yc~@M1AbEQ?uU;h!9{%!Bv^*<<^d0{1Bn)12y^8&nN04XzDtQ{1QeHuyF8Hv}|j
z>I0_*O$nJ2*{*E2X}4{+YqxKAXm at OPYIkl|wY#*tw!3ZjZTD;UZx3kKv<J2awFkF{
zv=3+xZ4YY?Z;#j;84F|FR%N5I^|SG_9jhMGzfL{L*RF!Akn$=jl>SP8wh^Z%eCgjc
z+i|?cppB!BxemU#(kWQjQ1)Ey-Yb4M-C+D4BZSeb@#G1=D|>67D=RrO?icdzfNO at e
z2)$w0GXUxDRG$&6Z%iq at e6H1NpvG^YSL?YerBh&rLjj0y^^Ee<M0vI%gaR_ at x;fZH
z4{83OxmXd~o|x at z0ru~;S8&ts#>MCeDaIZ5ja9Gg;0y2);~LyzTr}J0i$5^N;BTe8
zdG1gS59P2m8M;E|?_%&2)o`#CnjoDr1gzm*;aB6`@AAmI-{+Al at BT0n#r-&vUys_3
z93lVP-|*?`0}Y=UPouN@>pxq4fIdtnavzce+k>D}9x&>vxfX62wb^cT=Td4aq`*bW
zW9LTWFY~r;2E93Bpr|*vDcFY7At{J$fa at vc|5rL8`PzYqX0Np57X}){E0mrdJxW4W
z`^G74&Kw9xiP=6rt2HP+I%afPks&3j|KCM14k|lOzm&ivFLyT=9|te@`)3^NUmEDA
z at lv}S?^~16a^hVSSvfYpU*Exj<5Gs?RAr|O)K>eYIXk<mbIY3`%$qU--F~5udcYWM
zf^OQbgou7#{e9z?8#4z)1v@!<diq6 at gi!q9jw$)m6Sc*gTWTg5QvEz*(LZ&44Vq-#
z0DYjJw>~zZAj;jr{$B%P`H^<+9{xUwx-km^(^{uj|G8x5x}^(;&W?)n^0BpxbPKk#
z3-ByRA3UyN1;4p-_xv>Pc#l3S>+=^+olsLTK4Z_reF08R&R)(=)V2(S@%<$9MJUZJ
z;}*hZZHUgS!!ju}(@9|?lcy#i$SO!Xvvy0v{IueLXv3|%lGTml3#Puju&#4u*@%`k
z(`RPI>a;j|h_ at y-&c6>9#@)-EI`{>0w0PXOF)!SD{^{4=SUK}RR??Q at Sqmo*`)t~Y
z!kE<5=puR>h7;&}(!v4IKOZg-d<<%z<t?P?e5%$!EF@(t4wp1r^k+LKvTdcp5&Y$^
zkK2)-k1ju4lH*%G9HGoo-;qlmk}G5Qegu*ABRz==GO0XAt|v5+HP&GMPGKYRojIhg
zQ5~UfoH_*NOMXsc<Gc|bsKi at 6;+H~o1eIBZsZ4l5F$cJcq at IsXc3}-VElu*ulA(vt
ztgZ$Zd9y-g2>ql!B)-4y>otcDulai2lyNgEtEN^@%}pJiFb4%pm@~O)-HK5S4WkZi
z at O}0wnvUw<d&YOe8o at Vk*e6xd5yHb%?BW`NHa%lpG$t%aJSjZuH*F{RH~DDiG`c20
zpPv-jSoP-mvwWd$S{ja0LAkMQ&1qV1nA7~Dke1h?n3unM8AX$anXhhn`J*F5apcC!
zn_n66dIoxK$b*lj at cFIS#`sU`2d&0`=of6$`oRYuw9;G^G_HjC=sf6*UdpRXS8Db0
zCT8+&A3;s~#$Vw~Esw%#vvR*c9ZP^&E_h at uCOUqzgX5qV4^>^AJ?rx+e<II5Cx~&<
zrx|!f=a`uD$7bDWUHoeu`GI`tdKm9ldSpek+SrCqZC<Q5ycHaL`_kCKt>s~kt%E8T
zt{yh@!>H(QKFdyRh5k80t_dv)cg~;XAZP11F6NDyl%OiKzjR$4Mhyeq9Rj`zEoB8`
zCr%t&P*zf2QdV<j_Vw#?Pfn~TDJM^$vW#YDC#OEsGK7OSrbI?Q{9j}w7~sGFOzt7I
zXVb?h!37O|x6$**|KI at 4!>9TCo`ai??5}-kS_UxD=_;yC?*dQsz9Trr{_0NG&lfJo
z--&9 at w7Z6_Gjt{c&0i7?PglRScAc5{yX6Z-b<J*eUYN(qu%YKYH6gS&bw=;y3s0Po
zirW3&d%L^SAzF+lgjt=*v?NMMOQUoGmtp!q`KdzS>_C$Tu&0d7H=CuM at GRR0cv^L>
z2fbB|EdE^A7HyKJhn at G$7&E+f(fRZI&gtu)dGFG54U>i}nNYqp^NrVW$ETe`J{6y<
zY>1z`X3gCAhRP93M_jpc_um<d`M(C|XN=go)NUkkOc6)5E!n<XQB>|{I2qXg%7gpw
z^2<-g_208~%U<8O7XrK={QLTSZ|G;54<H2eus_W;8N{~T@{@+5ztyG$E^M_a$UFkY
zkh+%U<>VN3^U;`<%`KBls#orKdhXn(cdV at L?9}+~-Rt{f)9}E+4?d*9+6Ny7YBHPC
zgX7{JM#jYjdkAIT{zu7Ka_*=<^PAo at -LqN8?m^M#?K8Pxei-MF-jtHhVbjMn?*)qs
z!nvKNxrnIKTqGRoo2NMrjtJFhZor3d04Cf__lEgU0AEyqaV2oW;3$Nn7LH~(R>H9z
zj%VOF1;-^gK8C}wB3<OZgD-!=fh*{%gQq!LC{+!=?d9LTA4<69L+&(Z7j+g!2Dl{Q
zr#XLBbPSSbSWlNn>=zp_G)6R=IMgyiJ7I!$#Fcpc=$zbKLwvj;H+N)yTs;1yvugj;
zZ9Aq2FZv|TdhflNgM9ew^XdhASIyCI4`-qCprBHR9|?4|7s8Hw<u|LH?s2}iUb6E^
zpoiaq9`*rCKY-?Tc)WTs<ujjA1qWIlpx_m~XchjFDx5HNd~@^oaV;(6Yqa$9&&k5i
z#2r at Z<kLyjDI1hbXxqH0eIN4MxA&hL*Z=wFI=$loyxEKd-rS at Jfo2<*9>-w&0x{11
z-`tAj=SSyFXgYshv2k46e&dnHvWarA%J}E3DNCBrz0Qq8Z1Y|hOuexw-KTmJ;+J61
zy8xzlJQvFIY;Bn4LgeLpHEt5W^sY>hzl-IcaO29uC$Er?&}Qs`Hj{ee&!k?Q`QUfa
zksdY1)p*W>aQualJ`PJWpa`qLmh^!?U=FctF3)RV8ZqDD7n+uxS!QcjSGDyszqzMT
z)ajOCpU>I)v at Jde;riaF;p&3Q%g-3MDBO*EDyQ$;6qqlqs|L_ at 3MkvBD?dM!>!z10
za06GFnmDCD+B$YZP1EZ+*^$dmFZHdMzwO_Ct!M7<>a(lgnSMB}kMRP3a$;<3%bXwS
z>OgxNT^$gG1zWZ(knZ=?ft?rzcEX?PRw^?4ILw97#ib&q{^s>(O at N!3fUQr11*u!t
z(3G%zqyOBR%#^&m8+m!UD`$VxFIf>^SwDS!>!Nv!7c98Ewqe7^8|E!8Jrt5xxMqCz
z!Wo;V*X&!jcJ9=z)#odJ`)X94sE?0{N<5NSO;_x(>9*+>{s?&LN3(m=eN_xv$yueV
zyVUz~r2>Hgh>@$Co+gOq6(~BiC^36Q(y*Lids4IaOv|(LZJIp1bpdi6PEMao=-+4h
zcyHuzd3LQXVQu}EHMwJ-dI}F}8htFcf-EC{qjKc2C3t9&@xdk<&x36`$n?Y!Y$wv#
zB7deU;7W-BM$fzWr_OEYS^QxQDKSRZ)G*zc`OsJR_CdJt?L%KSZejjczRuPJTsSpd
zdEw}DO98>Ez^*5mXygHf!f;RrsA=);)RojJCcM9K<NF&?XiY*wO#*2{cZutRzmN)V
z-+Oioxo50{U;MvbBX=%bK<?p_N9InRGBU^bdaHQjp)Y at R@wOvVAEpW4cE-_f?0zgn
z#)|L6E1UypY5?0;)q^hJ`Efk`RKOP(SNf-mDnvA|&;<F*_tRZ83j5DV7I;%1kbDJt
z3B{n;Q1Ul<Kvs&V2`P{g%{^zlc5=ehsT1e}mmM#?)NyjX at V_s}`{YBG2s|48otj8i
zko)8zS%u~z5!s$=At#DQ=M~qiS+-&ok)L<1CxgTc{x2??=HFnN*L_Diy}{}R4RW>I
zyiqZw;3Z4V2(WIoZ`t!-EMGQk#GbjwC+4`?hR&Q<F*MjO>lM<zYG}!_nTe at i5BzcK
z65r^7>HYlpOG{rJId$UJS90>6|NN6 at lfr!ltegDi{Nc%DF8ONy-ufq#2d_l-oo$Qm
z9_;+}Qft$|VJIrDDwp;%)s?YKSL``2mTjCp^57q9a0!N}(%-U&u*S{2nE{HtQiBG1
zd3t)0k4Qb<^kDIlC5s<kPKvB3kC1GQu at 2+S*r+tF7H>?izjkB#bo?LVPLI&S_O`-M
zX<nF3{-ODeK(~CjAbRg8h(5B_HOc#VdeE)pgFO6z5kDo{KmlfWM45no4i*L at yFb3v
zx~Rxo=U;i{JQ{=&&!3+%*%&?zsisXM_oht=^xM7L4}Ycc-M!n_n|%2zkFI@$#-r+M
zAANL<w2{s;XY6BRg->E*AJz#4K0&99dtMF_bPrGX1fHTgaw?GZ=@`>3#WeAM+z6WY
zMhuqv&e^gtr_RGuzQ62ZwKt}x^#<l$Dxj1TxqBKsk%!vF9I3)pBF^_1Fe<Ek&ZJ4}
z*4Ivo9GI52F*PkMwS07XT3Xr|{f^p6lWKPynAl%+?c9v0z=i397bM06dizCg4C_3o
z-nDULR+g7<TCLB&+Sipm6CVHe`^`;F%^eO7^9qZKinin3+lq^d3a=Cvl{Yo-+1u3A
zr17gRa*BDOsC9m2OyK0!Ws93L%7ii5<z!oC#^l<$JN)dTz*B987JtiZfH&t0epobH
z?|0Mk!6AO(OgGF6gPv~wd@$7<<U*IO==Obb6wVLKt$p(HljBOs!8z`rEr$`;xqN=w
z{FJL?_^VmQvzO4_fMD_lN(p`<aX at 8da1w5bdWU?6yf4ICul$k8Xwi1QoGDj5eo`>j
zd8>m84z?8sx=Um4Ij|ASm_O#rJ$st-1Ha234nOdWoWMhJg71#hH~Ww}MyEM9_%7ZA
z_v&Y8=L0x!1vqJa;7ceR32=;nqXdpAaLk2c4IDe+cn*#;aJ&P at XK*-HNIsb at xL*A^
zC(g~qH32*^N2stb96kU$)7cw5GH2CU;MAUd$J9IPT27W1lWA<_X)r$*hGvuXyLPQd
zezT8}D-h};lzaTuAIW<t<EIa<|A<DImw$~_db;>~>x-jPzxbJ~BvX+<I?*=vj1bSS
zRSXb6h2D#^_PwlEq90wcHdyZ at kG~&V6q249H8g(4l#T1+W at nbwL=DY0q{h#f at Wg!W
zln+nuKXCeqb*t8|5&u;Z;1(7&z|Y>+wJ?2DnVWiCm{&w>M3|ke>&WEc<<25GiVBRE
z(N^*)8bD~mF`mB5ViQes8G%RBr)ytv(dxdH^f0@?zer|1MP}n~a0BsRk3RloT!DXG
zfxa>B7RD{^^y9x7S4;k`CFg4S#hu^RGQB_{{1(M9&<h97ol8mc2ZvZ?C%8J<@``sH
zF}FmGY{hEcw%Xotf^)Uo1Q)gH`t8o!^to>7A&jJ?JD#z0k5`w3Xk;Z67ma+&M#wsT
z at W{+J4e!pH`R=TD#2Y5?eT=W7+vMLUiuA*SD at i|eyHe6onj>?k)x3;&%Z?T3G9UkQ
z=jExQbLVA#)Ppzq_|C88iMi&%?{to)@AAO)^j#hWeU}I7$pzo%1DF^4vsh5=0W%8c
z$LZo+4Rk$Efz at o1bcw?u;s?gVFI*!3kUaAD+b4~OQEJ;Jv<S>x6k77+e$ngX$?@c+
zEBDA(Nb~Czlr#S1$+hI;)8q}(jMgCC8)(3K_Ff>(k1pO&DY${%-VasKyf)Cj1*RVq
zC1NDkm--8IS8qQs1Jw2L3&g-xpf*-;Rr?31b?#dKSe=Xc84R>BqhdSCda7<@L)DWn
zl6hqJrFYPzS6 at Mst~|_gbK^I<5372recw}6LvD}M78E3no0D1kB1%8efrcJGPR at 0>
zjc{{AGxD_gqvJ*~xv<>(AZJ^S3q|I)5(G`>GkBx11Ls{if=(a7??`<z+4KXS#fP$I
z?>R*MU(B3+SDyM0n7R9|__?A{)7KZ~O<(`UQ}2Fx01otb;{rlHXlz9SGJg8>C1QdP
zB=6lZ3Hs%vw1#4fsO66fK}v-$lJ`l`v4 at eEcgm&-cTZdSi$nq^`HN`ngpIMC4|k^w
zK3bDpIP}kpQPsM2yZ#3to`(7~!tYaXxZ)2<(}b9%Ib&jZaZf7H)=i5 at iBGNYiJG9F
zG<N;&|4Ao}+vzpz>nZ7%E6l+=fWI6Vd$w$J$WP-)4^Dt;(q}<K{FM+3c(W%}=?=;}
z at G|0#&XXZK_+>AnIuo}8wLDQuhLo=3Ki=@?UmMArD1RgQFZpRB8V6&NoLXf3iMJsc
zSl7Au`|tV1bnh~fPX?j|WEuL3#x%oB_ryKGgPKdHcb|gjrk?blyfclosOxE7GnP*P
zgVF}PFt^g at Q7wd^Zz7CQF at 8-%UngF`D={xPxhE{GTAP at Vp77-GOtq~- at hmx+T&nh|
ziBCKvIG at 5;bm-U5;Ns~K*g0tB%F?*B5S?SXZwYoVemvdR;5n?%&;lDl&}wVKa<bdd
ztxkdO^oy8%I4QM;xR&@vdM0}H;jy@$e~Rf7M`nwqLMzNeH1hFqb9K?Gc+A5AEHj4v
z++5wXn8z;YljCEDE*&~8ZrHlFp7W~79Q`MHX-)mUrSE186MSAL<>Xm12eqTY$oSw@
z?2W>3QG4~MQe!gOg`CI+@(y{`Xq4{X!8nXzcEwim--2j2x`3a?CmO at d0botdgAG6=
z$B{^mBb~eANMw#7uU&b#@rqyv(c>MsIKC@>gaT%=LNM2dv?#`iufqiB0$POqZL!+l
zmKif!q(jf}Dx-pQ;s>4g#2uY|=x at RE{v}>%^dz72C45-t$DPkAeyE|pCQRVR at ajdN
zk43;&7JJXh4MrnGkVtye3Bxc(A`ji`2Hpj)brX4TFWjV^wdSLfhZ{Y!NdU<+8c_gR
z^l-wT$NsbBFVgVv%0qnOJ?}mrrn}d=iZ@=K|Mi4svXE>SZ-7Zn7uKfJCe3+xOXao~
z<<*XTW4asgPzq!Bn1b#*>&t1_&hV03PVY$|f9bg<Ono~}x(DvBq=SQ(bWe8Ye((+R
z)1Md|-@?x!C;fA)tLMMl7N9{X at 6I1JDx?|Z67u&-WNVCl#jEe3mN~w@@rFZvabsKd
z>`}>n{7S#%rJcVVt^xPJVQb#WlW0gxbPcYod2m!LAT^zOe(BQowyeg<{~v8%0uWX8
z{r}E=@69kH!VJTrpvW)`<AxxJqk at 8p8*aEO3U0XPQf^ooE@^J1rr9DYnW;^F6|HZf
zrC)6|ZL!kaZ7=m}W_`^H=3V~h-uK=xAo|Vz-(UHd_wIZ5oX<ITJ9j&GlDf8Xc;&a!
zI?Qiob#%oKtxd&b)P~OVZYR at dFiK+AZO?OoeZr%kk9U;p>^5><QSOL{DfdmCLT}E`
z4Nm>%E8g$MceR8lt3wHx+xB at WyE92jcRxO{VYt{Xtid8BJFHQ7<JnEa!;7bH&*}}f
zt<SF=yRK_aZb6&mIsIo^5g*pbWFhKPTl?uwu{mrhMu*LAv%kM|-_o427G;F)I|qFV
z#AisoE9Ix8QQR&Fr-OOC03jUP6G65)M7~;2cDT7%XmGL=K~j)<Z0QL{YWL)x^umSE
zmXnea8(x7vmzoregIJ^<E`?N__~*djr0zFSr_V~eDpq|lYLxNN6}A3P!}Ko0x;ma&
zw<flm!O=Rz4JrKSc0sjnYZ^-Ks*#cdR7&e)I1o57k6!Vvp7`D3Um$tu(xl`|WdmLu
zG-Pwuq{V5;!v~!#8M(a&$s_^8jz91ykVl~5x?w};Pp21rJvL*0`qp>j;$BN^Ielo#
zgpd0 at KlI7BGBVY1pyid{8i(?6poiExWz$O{KO;bxEv-}v*g7lU`&qTVXYuoIj~}qg
zFMj^*@qO>d_}<U1^?io^o~_ at i<vrv7NG<#y*WQoU-?Oz|wY+EX=hhN`wI9B at wcuOr
zM}KZD^!4}m`QATK>wDyHAU^&^^}T8b!8&dSHP at d-SCwyHp?THWCDI$daF-g+-iwX(
z_r`vH@!G<bD!Yo)Z>v8Wo~iPMFEp2BJv^YfFWjYuv-gH)_4lU3x4n0%@7Z?&2|gSV
zemK%VJ;R3kjORGg^k>6v{#}}eBT5es=;RA`so@;Q9-kgmyHP#6MjPA5=Xm`+KVM2e
zSBjtc!k^W%TaKW<=NUrrxtIP-u2lI<7J9)9JzN^*3wNpE>^=EPe{bmM7jGE6rQ_$m
zSPjB3pWFxecf-{9QkEWWOz?%f)NuA*e$}UkO}D*wsqfi$#yB62Y(E^s;Zq*YeerV~
z!}VwRB>!%>hQk+b%<_f1)NqdDcny8^)%?DEEB+`wgwI{|XMS#%eqI+pONYPD;cd#i
z%1YCGz9uD{pYg}n%QaDd&@5DcSuaSvGo->k*gz*@1H1}57!zRwK5w~+W<VqQH9daw
z*iCwzehrNvRX#<ZrVCgb43l9IEPzSnpF%zCb~cBIin-EqdWD{(pV7;zjl%K-S{ISn
z4p$sN(<X{{oK4t?4np&Q-3Q@)BQ!zSeIqtEVqrb}|5>jdsfDQ2B9K~yPAvkdMIf~Z
zq!xkHB9K}HQj0)p5lAfpsYM{Q2&5K))FL=FhR=CHU?Tvr+6ce_p#ipU?7jis+q6*v
z8{V6R5PolFqXc2P#_@*lU=V%d26ioJU|p5EyMu7!m&)#awyayXg<eJjQcD~<8iu{1
zYkS{YpPYD`Y*sEWT(x2$T+)+;?_cqyKhu3<p(XQ-;Y;<@lo-a^?x?TL4>)YqvWHEb
zAW4H%M+_Tiu&0D+*(60C<p)xz{N+ZaprU*XO5qtgnfAf_(}zxmXQ1>Hf6=FVCCVaH
zcK79=n{uL_NnUyT#3yelV at SP)D^@L}c0EV=a at dzlw53c=pVa<!52*W>im+__#?KuL
z=YCbfwY_8o!iR<osSRekg|8Bm0aN1S$q$n=O_?OqlthwDQeMkUGm%Xo802DunQd3M
zwr%^N<-?@RzyOm;2rvd1i!ruQws_M643_lFK#>p-B~dB{0>0o<OV0sAg;zupV6voJ
z(q9cIHt|T;UKNW8|L)o_TPkSVqzYhp;T7raiuP9u$)H^J;JL!j&4m{*;ezE046i>f
zAFP%_H8J{<zNQS4fnwCeE7guy^2ZA`@k&0tcsC4tjz$+>MkFTW!m`54o~woO1v;nj
zYDK#A&Q*Rs^la2`j!(aW!5`R2GE&vA$v{Am4aM^Rt$ra4v at L0d96Gn~N=19=ZB+1{
zT=u{fjQXwo6ZLya)o&H9>iVq`gJqK(lJkF~U)cfL<~i}PT&7mf<w7H at D7-4YQ;~kP
z(3gLieuIT`uNloI5-eCOh>U@&i@<_MnnxP at n)@0Jc`b#^U?Y*t!2$%Bq`FdZT?>;c
zqV0#tmJgE=eo%0*5L7p)ZZQ)3Z|cqrtYbEt>IBvaMBHY-V1v;ZV309SGDTERoY(7^
z(UK-X!AxK-bWm|{aE(NIwN5b-=68l-Bd4Jk43}F?K&^O)Z(b>c<t*vES-xU&rI60$
z$;pcgPtTuuc?lLS-A(+KLQU;iF?R;%m~)JnQ-d?jnZ|&;nmYO~NnArmQtdjbo+0j}
zqiPvL(~;!UQB`4dM*z<>z9M<KkQVa1qZdtY=c|Qu4$DR2K{XFyjowP$BE7;#72Iqf
z)(BPy#AJ}>^ffWR(7W{|X;#Kd-mQgVK7Fmm_YqkB!3FkId6e%H>6HxSBxLiam#Tm7
zG%`;mZm_1vTl_wnneh^5#GL0;|K7z0EF!=j1|xmnwDLpdUx%}`_M*#%83cHSu|<gX
zFsakg^-n96EMu??LJIH^o+AnL#X(?TIf&;Q7(R%Wd;IDvMvKMQGaaLwN*=(-1oV8T
z6yqZuPfqjLzO2V7Gg{4s&kdW!9Buyu>!!1nj&6NjeRzbCk96_DQSE;=`jyD$2rwOF
z_{ovjq)lq`q^@DH>1lnkhYs)7-<=-2Da>I{X5oo(j<7}<$wRsgADZ1Kt>h)H7Px5-
zv)RJBCiP8k7aJ4fbf@?2nB=fW*leM3j-(!)Qe81IvF%FeYovL`OTg=paKyPx!|8UW
z+F6<!{f6TFK)U?lM}s;RC%vzcD^WoXNzP~#=7>vdp4z5KGMY1+V$<FIRgmeih>V3N
z!p#zRiD!WlhSQbWsYj9{F4Sg=usf1E_Dy#?8P4>+C_IWI)JSI=rf-VgT7m;FUMJju
z(U`>FDh)9)w%lMTLiX_F9nC9v7|oK7=lK`09kpV;z(%#O;DqTd8KmMRKE}!ijNvsd
zjKXV~T6k{I&4pK$2IRY|g)rs@{#hYZ&od^>D-OMtffT&drsf9Sg88K(`IdpW!BCJv
zJg;owz~~l+mE*$p$EvRTm9ZeF>Ma0-;Uy+A5DWw2q9v?s^Y-8dgG#<r8eq}he1nzm
zYWfOdYYCaMAOd9ty#ggyQ7vpr4%sW=zABUl(zm#>R2xZ`FG!Wo4lWZGVY^Q_B^<?I
z`w=h>xmry)=)lRV()nZJ`|kCE%GTk?PgVS=7gDLd$3qgT3g<BIHa*Q)UCw4zSW at vC
zj}1kNGD{*}-$AZ-n at 5UdNy811A3UCFGSpS~rl(l-k`0YK9;v=wq_JMuA&#Ise1%z0
zlVIIffVPC1SF at r_cjDLE)k?Oo at Uq;@<Ei*TuVDQ#vvoY~2tIIXS1V`^U);mu!XocB
zSilHW$?+DW;_>i`n&{$G>9B*el$~S^smZ(`vH>hsVtp!QQ!;$`im$b{b!e5G*es!0
zf~#H27;kr7&u|vbhS#%&V5zg!3l}eV!ow1pOmCk)xkcm1aG(0k<`8Sk$fy>fA!ak@
zKZombDc`4~)m>rw(7dn0)Q9m~X*C`^AH`Ui&E`N0GK&(Q_BG#=I<{=*N(c)Nk7$;d
z+^U0kfpLtCh>DD85R4IgX%QaTxJ9eh>Fry$ZGvB`<9fO->IofK?<Lvow=i5i)tsR-
z`e3Lvm$p8g&C;-K%$m}qwTpC&<`Bf#8Xqiy=9e^F)ln{bNm=h}R8FgiBcmcBt!nh(
z1`$z<7HLpb;O*1ZrwbQ+s#Rss^{L8G6T7b2CZMYpAv<cSSC at -8RQ<O07bFUrk^6kD
z*7}zg@$3*0j>(M~qNDaiPA`g5HSW_tm&T|63l~`aXv<Qd70V&&Q~PRm=uqaNLepo8
znm5(8`u-?=foZx-dK>81;`p_SS|}_v>l!yF#W~{4^`h#T&9WsX*6B(}igU%-gJm-h
zbj7$5%(}qlpgMKUjT*ah;~O`M4VKL2x^)_0h)E8PZPYkE*VVWYhWJ%CAt7<*z(8|g
z-2{iz8WIv38{f2UAPaE?hxl}1FqmUQeJ>68pV?$-8n1 at ov#OIrsFSX2#?e{BEb*BY
zmXaB?*jFC6E-je>1v+q=f2bX#R#k)3+tK4y6%#<yO0T?0KEvuI6EjvobVi^p=C(;D
z#lC4rKKb$p)Ez_H4x>j_9+Cp+P_eL~avgS7lpR`04_n~q82SsVqjIs1GReQH`>7pP
z9jI*bP at AtxURyC;{Lw$-0_?(g!?k!miO_P~MSNwO+C0))A7*cT9*@nvnE3opwKhOD
zDU*Df_{jrVK5pWVDnE=jT#M&lgYWXdPdY=$lGb|b`&Hi<?_%YjhEVCG8c(;7?Wxi$
zzR#4C(n)W7ow-=wqvvTkLl$qtnNjUiznnu<|5OQ3Vi+e6<*NcUc6vFD(Tb^~Rkbos
z+WPGD76~JAr`-p_ebaJBB((5!>Xbe>`%s_$nVAkdDbrh)<f0i<Mh<S-qD9NWBd5$L
z%G=s0&1JVcGBOAB%TwEkzKG#54TFD;5(IoY)elQU4Wsms-I1Buzt5rU!Rehkd8*@J
zj9Cju%98W?4am%J*zK;gPFwS;<4D%<VV!nKXl3ZFuYs^(qbd7(7MJAd<)8bR at bUv=
z$I`0)1rcUcK5xj9$7*}!xFy9b1S?BxmJYoAW@#})3Sljy$HNo{Z&h5cYBQw}01t0l
z`zQgB!`fCdl(nw3l>9;Wu_l)5>2smTP+y+G_d)R5mg^*0Ydx!sal3!3QLXkRBrC at 5
zOQuep?6I93o=hg5BR8={i=<%#XH8hL;Jz6{hb6T at rAo~@_3M|HtEX6}t+{#q`gL+J
z13J^=$el5x=;0an4;#=5V-6X1|BQ#3h7so`p-BE#!|A>QlniE_=*IhPl1Q%>VnQOG
zp)>AVuw=rlfecS#uFknrEDGUEetV46tdJ!s12Y6aY&AdyGb0y;V^+IE6GP7mObk|L
zNCLO-47$x3rj2EhghhNDOSb{ZY0XClOVI-Pd<8F4<g`aK(XlHhYqk at sOx2+#QC`Hy
zne<U6K_3$n_h{d#M!dMk!!m|^p*)TaM1i^wayDYiQL%w)pc`_^oooyUE!G5&W~6Gi
zqKZ!&GSbJ3u!-bjMYrLzt46vg^E at YCVB<4rg;&F7SBG=NJ&X8QjyjOTecx7=7;@wS
zi^~)z2=t`IXkw*SopYLtbyu2v0pGc}FC(MLNlyyuykS+mcr9L>8jtB1-(|=J09Qb$
zziOY at H?F8^I~B%O>I00YPpiX>sQN`hr8?AjT1|vpMhCk9hIF-`1UBDzpQ_~)F_-2t
zF+5+K at o>vkx&VSc{&(h#Itr-vk>((tei|OxHx8$!LYUlNsMH7KPM=nX<uFMWRjMO%
z91qsi91rRvUF{z^!8bmpYTqH|Rtnq>_ni5{!>g=6D+PVP?93T;*i7}gRv-jnUbuz2
zV`sW|Lfx at BkwZfDcm1??1J!q$y~*;o#Ad6(Zj7)ynO2Q_TuN;rxUVbmcjehhli)hU
z&m*DAj at gTP&=YxTqmf5i;Uf$p|DH7Iv(E~T^(@NM8jw7^FI4CI3xp$xp)=YJ4cKa3
zCz?op^i%ZK)`pL+CV((R<KrDlbq+AFAAjO)VjkU9*b7P~O`?Hx6k-~9q}47T$FJDE
z+6v}D_GgpuKQ5=<U()1syX-PcEw|q|9QW@<4w4B-IfR~@r(7e$m|#gdU*$t4_RFMx
zm7E$UUCwHKRM2xL&!<LMBkig9K$l2zSM-}i>KFQe7f!0yj}P*deJzu^$S;K>cyDS&
zVSeF6sk8#c$yfVP`4vZ{(up<uwtzyW`lL&h<0eh2=qI^#X(~Qof)x5>P{+>n{yK{v
z;nwmY&z9tu$rF*Y+HN8e=R^kLXujG+=1XmS`HAtDg)mLeM%kwY6$`8p*H4<{y>F7Z
zL>b}BL)$c54Ai8reQMF+u{Dv~DsRXZ)Qw8pitt>bPeUqB@=L9;rBY-!3E6rd at -fQu
zG3R4+m7f|!=@oTMz=%c#Ya|_b=YS8yoI#4rMxz#!ib3Aer^Gql(m|x+Q8q-R$b-Zj
z)cc#2pYkz2rngiF3hCfYS1P!qTTk)N7wezTS<j!@V9}%atmd0H*%+Z5uJU(7YKqlp
zPffwQ6zP`l^TnLoQ*b{=^r&(&<0Xzr9b+_zYJ3Pwfe1(mv%8qX!wC4`DgOCl?Q^()
zy-%P=@ws}w4c784&#{<j%*YulU8sm#A@%phtNIepRqQ5*3Re_rYA*E4cfnd)#L5;+
zZ2Xn`Rm4dbR#fa3&#9XC#!LN4R~BDQokBnU^#tw%mH+SScSX4Q|AvglU0-GYO&hD*
zt1GntlAzuAY*+2szf9C)ZMaIxt=BjXm6dV!H2!_pmAc_QRtvy}RJ-$8*V=Qn`K$VR
zo36QAQhhkF|EtEXp)p at Te8xl1K|H(kF>LyT2W`GxFc5#>fvbgn^EUOl9}{lhtJG3_
z9NZD&65cwfRH3m)rAp6TRfo~w0Y+~i-NmRs!3M`gzxlzseB9C3l(Ln$DXE%y1NYO_
zs0fcxiT|o*>|iufV#b2V<+k#9J5Hx+>I}GZ6EtlS)TWe;EV5X-q)a|Kn0hMJcA;uM
zt*$=as8(7|EPk#qhi0nK)o?#cnTn6GLGx6q<8izdZLC3Jn6$b}qb2*s8ksjh5pTr=
zZmF;~a}mbUl*Cj+=ZLK+g`FT&s^wvda2)m2mXDEz`5Wnm41cp6?K?h}^@uovF3`rv
zP^ROC9%@{hzp-zh?Qh>#Tqmb_|6+l68!S>s!-(J(mLlIr(7s~5V8T`b+f01V0(?Sm
zfmsTyxLH6Y at Uk0m6}?4oEruXvK6t at Pf2K`YJ(-WP4>knoG}tOh*~C{#N(Hw?kY<3H
z-m17M1r}g{#BLal?ua8t#{qnKtqQ{mQW^UQV?D`#z2d6H^w-7sEP)li04tRkhRToR
z!I&0me7^Kmg<uD%pyu~5j!A>!P2<0kAXSsWs<tIowont3(FAP22Fk=%*LR^!>CdVx
zNR|ut0BwrbuMkAy;4+hmK8(L8B&|nJ(rqxJV7<D=Ugu$E^qcT5IK!ACJHqU#4$erf
z>wWI1&fuu>-chposK#alDP_c!oPzc1#X?4(<-ts(ISXkrKipV$of;`@22;3SR+R&!
zxX9;>*7F6lu;6*pj&b>vM3PAQ=~3nE<yn6q&D?^5irvWONfN32piC1zvygt3UaYJ>
zWAv at nNn1HX^3Hx}cxD#q;eBpDW^9I^?x#i2a6i(PzB^N~rb+<uT15jCftMkF`fQv>
zRkzI2jnQY$5;4FneqE((R8Kv6nX|ZzcRx>A!CtLcP(W at nttf%)rXEj-%kVG at S|C*8
zWkyXks?wDSG<h_ROkIqpsxg(Xs<9f3kJ67c)~G%*igEJpgc0zJ&YeyaLw)?2O}NxB
zAM-d*f7Rs}%j01pLy^ideAw(-lKB&H{85%`S^hmr+8tHK9L3xW=EaQWgV?|5&Cf{)
zR?7{ReBVfcp?CS3u at LJ&R&Z);`4jRfy2XFIpc;)7Ugv{vp7B9>##nmEZ?18y{6Kj#
z80|OXDCp%6b!*ag+_F@}66oTYgcl?&1v&Iax;%PThjC&ZuD{<{rNb*6(wXVOzs_d<
zIXY@}cJ+}>=Ceo}Bh`mUSw$G9jt?<s7%rRL*Pm~#)$z|8%u&fLGuy9g*SSS<l-Y3T
zP>lc>$=U$#$o`Hd^&*4eK5M;(aTDn?LG>HPIr=-|8rE0ag?jZelUqhbMn<<t&a79@
z6Is9Nv3?|LGd2Z>L^g<aL^QC_8x12HSb~Es4b*dg{Q9R(t$*rL`=_j4r?U(>hBdsc
zH`eI%X_mH8Hsn;+?EF=A0V`Q+T3OW%)O&)+nA<>yvF^{RYL~6P<1q9ot`raaKqEcM
zM^)2XQ|USnT?bRIXzNoBW7=f-+R`c?xK-0zA9-jb{NN!eep6dWz{5ys^L88yqZ3hm
zY|`#Go+`>7SneAbo$H}<tL6`MQn@<us*%<zIqUn$nc|bx;U_QbU=~a?{f1dE!>Y;b
zllykr>sQI{@X4Q2O$T%sqxcO(Gx|HK>%pgs+Vs&#&~}<u*NMYVFQj-?!77OHY33_@
zq+eCn&29Rrt|Mj#yn{Mor at HXH5k^_9n&8E9$flj(kdzI};AVM8x)=_ at A-Z@Gug~7W
z`b>}Gb}@$?7)=f?FVCrX4PzX_n9It`>AQ<yKJ7$1VOe(j;;1#2+r^lv6`>Z_yP;eP
zRa!Hy<d}~}pg(tw98%HN0OOsRjcC|ykYcmjQh>Y(HsySY^4_Us<oRWvDeu2ee)RUo
znr|T#l{Zt%*JG96O4H;ULPKGy|K>yPg(6sp$E!77UGW->*Lb|<;I$O54R~$G>ovUI
z!|MyYG%pmv!f$wyJmG*4qAkS?u^d3j1NpsZNor}csGA}jd|d#sT0;1|o4Wa3cnnMx
z6-zqVkA+0_-Bi2@|MiUuIcD#)q at sfUPOiX%@c4UU*Yt2dOFyC?;{P8#>+Z2;?7Oha
zw@>ScoPaVl5yoWJ7q9}3GPuGF!S<-&uv1L~<3u4kB(7dl%gGNfe8`-SG4J+xYx&sn
zv3leQ^E(zeQ1hG|<nyK+%3Y2%<vx^~3QhIXO!OuGy1$1It3^;ZgQX;g8~yf)k(<H6
zJ-WNs#Kk488TaZJ^vhFhi`ckDb at VM`Wa^L?dM;c%t9hdiW9TvZC*4cC^37tyzw+%N
z6MXyDR_gN@`f)n;RB5HR1NlQ~OWs!^<x}O&Jfxuq4yd-eu%&XVG}@5Lcg#ew{)5$S
zbhxqE&|TlVnGs-Tg-e|Hr_!#Wr(x#oWtYIVgNBht(H@!&@6#ixU>?gz=jSuZNPkrM
zY<|OeY^=Oy$dh*?{l at AzGxPWvZXpsMWLEurTG;l!h;X)(jh%(Sy%U?%)h%(D2iRnD
zz_7^+CUq$|N=x>?QQ9Wykx8D6#If(es5kbPhIl_9H-pwb`y9R4zaK!qIB|j^yAswu
z_bkK?=nv4pot!pp(|`x}(FJtVp^?$9;?Ft_+zSg}?4gn7iYwxa0ev>DTf1 at N+DtLa
z+rLr0zUtEi-iB9}V_6y{AK`u^+hhi##U#p-$d>S7Gh at UYV~xP<lK9St*0xERp<`hx
znE{2Qh|H7c7>v_|BFy#NzcsU`$S#^MW+^{^MLL&1Cta_22TOKF4IZq#vd_sb*y?=~
zQj~-8c;(>dQhNC>@{#fkp4NL%r#(=o4b(M2tYHtc$7=f|+3roXg%5)v#*FM$%h!|r
zO1Hx(`ym*6nBA{mzOrYgN&1b<%r0Enrx$GDiiA-|w?OZ{D+=>UFx~dh?+iT*r9w28
zdFBP1_fXjmTQQumh;@lB8zv0rnFbmRo7?74nM-Fj^nf_Jbw7zv_LRoOF}58u3O0;t
z-h3~|an*Z~fos^XB(1D;-3kWCu*ZFD3zbS}LwQRbdfg2Hwt8bVWZrifR7+hbD?#Ik
zqg3<#Sz)8}y)*%9C&9^_NX0dQFj*Df&eslviOuL4`UNzF#&Cdky*#N;LvfCGg|q7e
zU&4Wnw{G0H^#nlQc1xaEo7C?K;WquMrWBS1w*NE~v#sjXihH+`pI7y(bR+u at V|F at 3
zHyvj8s(vf#h%Q~fwB(KbwB&C3<<<);b8MR$a*MD<h=`x_Yz7(((I{#r9f{e{gI<9A
z{mK>65B1B~R_PaUTooNP^-I4;{ergyzD4~)h at 1X_`qhw$X{vr{_Y$--Yu7KtNMWH;
z6G(L?tKuUhG>OSN)NE7w1!}n~9ANtOt`O%qyUw~uyGj#o{qi#^I0y9$Yg_hbM?e6x
z>BN7F-*CSXWdbCY2|{90OWv<-PW~l+<Be8%7t^`&{a7xHLUd-Zft;4U5cUL!6F{E8
zT;}uhvn<|g*OHTLc6DQCv2^N&V*Xh^^2ck2`F}31PD7~i6`gC${&TTmzRIgUewT*d
z)e-VCL$QZXWFrxbfo3f1AQ%kn$gX!HxKqlLAM#cKi+fT(aj={t=bC4VGsHR4Y<Y(K
zpm~9~Kn~0`6_FxwhCIXYkZD$()nqjWE-=)=s(?*S>3bdB(p7IqQleywKbK!3r<5M@
zkt0fqA{~B8w3BZ&{gVXwJULzMyu*|4RGoKtRwm_?oc6GG?kv_L=VeJf_rP9t at PeI<
zD~Y>zDxZ^tog_i|Txli~SnPqtbiN1UdVFzD at wh_{pdn)5O|xuK{T>+b*R1^po>0T<
zGOtl`;sK$q5X3*O%Y77x+71QQu9peM6Y9O`1oK(o8<eZhhN#5d42%kECzgBJLuIJ&
zKn0|JDEzO^p{cBd6_rm)=?14o6f$51-=_k==Gpe3uGqMl(=D@&uMu^@=tOw3i|nNX
z2f?nLuxk(<$p7rb0J7-!b-%;U)QUg&k6Pj9-`6qvS<p>9B)(-a3J(YimCty(ohRL4
zx7Zc2hrCV}3+((q$#*uLO+AM~>`M8!?JG~q^)Vxwg{GPH%%%XNL9Rn2BGfUP at KzFq
z00^jq!t(rg^22wmArWoafrJilfYIdyX~e;q%I;3|$o%>cg}HV9s6P*gGZS*gDB9jD
zM&EcMB-XTB-Qy?Bgs*(z|I)()R<dwR!HdF0>2dKo<^{GI%+HAx#Kyb)+*q-Fj$yHE
zmt%@pzvYra<BR4D>%SBZ_IRpq*G>7$4(wPu^4acLn at 2ZWlHGD?XY$<8p^r`;w{#i3
zJa^?|MPF{;bLNp1D;95fZ0pcm)gD2<@+X{c1lEa_nGF-7!c2Bih^r at s1-tBFQNi}4
zKzs@@G!2PP!eVgp9c$aR+*K^Qw;X1QQSG(NLo$)ErREvgC<n+U*=)81TZ2P_ZRXH0
z5+;U87TIF37{da>Okw88pvd4zOCxKekVdx1(8#dJ at Hi4D#z`@9j3LGt7Z7KPGdB%t
z8r;;9XiW at Bv^5QF8rC#Cm86QPQj(lxNHV4dq?%IA?Sk3`x3gqeGeR<K?LymywF~b;
zx`<t*Om=3pu}eS~Qx|h~P<C*(rLVPbNMBoaXm(h3_~2I?mBy6XOJhspOI at XnUu_bA
zH3jHfM%iXjzeI?rkplY3B;vZ3O9zfyfJw0A9baOssg at 8+-`ue@|0$9<H21Md<CZ?=
z))FMVDmA{|vF8iEW;9ATE<Y=?El+}z*CO(>6^lIL$>Y)^-sUymGvkK67Y}>9ABo-6
zZwR)d>#-eWV<=HVN31K1Sks3jvMpG_+7>KUxf~EA>=hU>)mXKo-mxx6nGlBW!nKg3
zmh1!z7hqooG>eC=cyZaWX>^B6qg>e?htQ9|g;BrKUibIUYX(E<2hu9p+mzIeZj{sT
z*vh3d^Jz5smNZuS&s?{o^jNCfohr5t3!QD_eT1JX%jFC5r<n5^3aPA0YoJwW0&~xz
z;%4Yf9A~)iuD*7c)RIjZF)R_zFge^9W-!WOPPVw&W at 1jv#0Qjz2zjD@!<7x|!%4cL
zi^13pmQZJd=%tP3DHlm(E6E70p#NbQVvp`+kGuZap;z8BJ-_Z>pZyYV?-fI?&>!iI
zhZb&TX;VtGNsgfzKmRVp>VVRc5<{~;8u7YhJk1t2;=4M6`v5a1xfHC{CYrCmfD>Aq
zYfL=AcUA+J!=&AD&oWlsl`oR6$f5r%QF at cX;wf)&>GU7HO~eU%r}6PE3*xxJaTqlu
z?6Q=UK&Fbw_%))c!ekR3DicDPr$f9#wU$M|`=ARdKIW6qe1UmAWZTyeH-<@Ci^H&6
zbnG%-b?^%2GStyzF#7K5`tGdSohFxhY!s7Cl at Gy|49|HP|K|0EAEYkcX7`H)N?_*n
z!iodp=^5T<$?qN6{1u>t(n)D6Uvt4)7!yDMOe%+oZ_`WkqO`RlU)<##sIDFH`<9QI
zVl^G`HuF#THhrdC+UgxB?yAW5`;N6itiKzg`S0fL at FC#0UvB)iYyFGc*Y6 at Zx{0Nf
z68Fu|KfkGbP$Ry-|3M4E9wr3rTEG3p^}Bw%@yl<dKgm%(VDX4sDOJs3OqWFZxL9ro
z!dgB)Gc at MB5Lx%UE%JhKZ at hU@#N>vPq<G7PYhKmJy6~Ol(sxOaY-{a~tg3QctXdKc
zMzddy6b;~>97G`S(6O9?On1{Zfd-RhN{}R355CiPTvmH~Qn1-f%Sq{dZHWkP4(!-E
zBi<3*U3u!rG-{_~26Swb(Xc_t0M>3HK0_lzkR{&qFFp$RFX9xm at PI5|xJwOZ at 1<<s
zj?ALH#MceMLIU<UvB$)UpKoh~QPdYYF&_Zjs%A@{+%|pbmCfgU%BHQ9g>M4}^v&+w
z%^kYl+O}Ij(AZAXrVXAMTrDs-ugA3M17@#i- at HpVXY+&M?VES+>6E_N)~z!kS*=zF
zFCb`Bd{M9G!%r4ZA7rD4UhL}k0$SGVF at 0n4%)vHgqb0HXgvs6FLTD at a!rCHx;)L$Z
zmzcz4k}sf4y at h^4t}ymCsqD7DB&GdMQe)qvN?=j<)>cDucqI70t0IUls#Q13;gNcD
z(IHheV%>1As+ubL2Hby9XL0oH>H$ghbtOItzfikRec0=3rfC&xaMWV}pdP0R_oE&3
z2=hMlUo`nQHG3yb1HNeje at okcPyKgF52-mOM?K}df3nEQe=%A9Kho*HBwX+v6OXrV
zn0`_V0~>*?T7&AUp=v|*HL32~6Hs5HYIL~VVyrF972i^lnpe|OGfQwvTw~YxsD`Pj
zo#R~AYA-F}p<Pl^8%E`KKh*lo?r<x*O;U1vd>8 at mgle*h%Oqn&oNIKOUY)a2QyW+e
zFtXZv`ijBSC^<E&bFb*U?gtNc7xel|YKSrhV2hc>*2rl&MPQ<K0JqD{oV47f{;DA?
z%4vYt)f9$@I>$8+Z{N at KSogu9cc{f~%VlHD-MjCIgzTzh>75o6f+;i3wygUQ`a|xW
zYcxo|EuTz(7^!vE<ZQ&{4CSYX_(}wd$<oc}a>w6`ppCFMR3&H|CTHW0#sS at zJF@?(
zq&-5mb?;fnU(#h<(Bz!Vf!$Yjq66<u)czSr?qSwu%@aP7HcO|lwfaZpX1av^k{kGI
zH2nj*!D^w#H_%Q023E6gDmQE2JTH6%v!pLLo%di3fA=0;QZqh}=ThVO^J2W!vp3ne
zf;5 at G3xzm~!L*&{y|cm=`GPdrcitlRp@&^{yv~Y4y*s6(&p(IHKPRU>q&=lADWi2p
zjf3s+cHSQUqf((m_%B7u_$wvgGjf+&Kpf+Z-=F8-pHROiHuXJ2!p1!KxuD713zm8)
zl(t<^b2YAe>}oBapY+P;X-}GshTx6)LwAi~PwVQ)>}l{zV)83}x}- at WF|_YBklo4z
zZ+lj!Z;STr at 9`Z+qc4Jvcb%Q^(%}4!!Pp&NH*NGQlg8{C%ASnoC)tyjJg8 at T10ix+
zmp-oy?1i_YgtvUmY!k|NA0JcqL(N9?s?NC*UF3(cSt{tfdAm059M@&=OB3*6)V!BB
zk^wOsb2E6PD_s at Sa}eG)r%Sr3bLMBkg7~*$7bQm5P$JZ-AU4pXDal%!jw;6S;iKtH
zJ;oY}f at M27uTjYBrVz<J1=hl=5xE<q;P5Io;>~@1H8unGAsd6KeNQ^Yqsb(UMxA{w
z#PKl)G2HDt4 at _GLn`(FaGqr&%9?xH~ClJ|m%2`9Ucz at o%{66|UJX^Ll*T+5XXJx)L
zonDE}8XAkt!w-09!E>Jfw9x=qpojNyLCg1L$o~kJGxonp8uk~YWtViMhQ!7UCh>8f
z%n=&T7I)?7K-sl*vZxELk2`bs_WBW?`c!#NtiNiy4S at DML6&$w*gm~BEZ$y-WyQ=0
z{97_p8*i-qO+GJo7E%Q6eY#pIs41bNxeY3|GtwBdNzKKsW+O;5<-z;NuijTCKH1?<
z7&w(?kOs2 at Ye0^PUizdI3q1!RI^)X-<gGrl at b5X<A8Fk><$Zkl{w9{&G$A9iQHw at x
zn+gfBHn2nmMmH^P*|s=VDvk;)wxvf43Bl>?#KL4g-gffZ1 at Fmghpp-fL;Om*d&Oe=
z`_;~bTHcvuBY&qBwA-pAILDGk4dxO{L}WFUI{q$W9;sCKd;6tF)qNt{pYDg!S4@%{
zfh|I^wr!?@%IuZBE?2!>Jm2>Cw&iV`srWK`cYjhXGH;cHJibjFU6-du=o at W#y_065
z&tyV=U5*$7Rft9ypIKFIKEOPj$~;BgITzdhX5GQ?-oLuWi}zA|l}fMMvo(BHOIE+`
z(aQNe#QQ17oAdYZ-ucblrMNfo;PhV;thTV*>oeZYWf1>HE*N+l2h4{oUTRwx9_-)J
zS$RWORhtd!nPD_w8 at F!&YwnC`UHa0a9uHl~7k?7815P8)X4-nE7-y;^$2i0Aj~o`~
zl;qSnaX9^&7Q+N+0P!%4Zlzy=6LRSb^b-AwZi0#A^X>bdvTon^^ecD;lWqH+*6K;r
ztn at LqcWt$k7+bsbY0g-EevTJT?er&ojxJfB9OVUB9NsyhO>~q58|kf}2JXSbJ{~rt
zb#x%T1;tWSbek5PJGWr3X#to6qgxNb*Mr>+g1}72vDXP_rRe6JyA0o%o-~{t|2#aU
z?amQdS<RxwK2mhEtgI0`+oq^5lG1k$@6x$>wANOS(y+6(`fl)8F+hlS#h|3|glKjL
zj>@+l^;~tvvyxj at VX)s~V7$5AMSS5l<$xugg===#etiE0)- at N@_my6ZhwrJN+HJ}~
ze18hxpVQu#D+m4FH|6m^hStVp at e}_3CcUoy3d=1<AqEC(`-?upZ&Jh$S=^i4_LG+g
zOBoG$3BB&KH at 0$@U8*1a6xKP8;G5i;;m<eAhew2xA6m8gHKo<#Ft?n-BlV-`0-4a|
zkwD6mdUQ)l>eem!hR2i9rbF7!oslEk at G%rl+YpAd>uKqsok!3r-j%HFcvlCq^hRFH
z?_N-_wqRWMv?;EpO?N){(6$}QO}#wG+s1V5GHTSyG50rX+_<3K%;z`Hne&43_|6+1
zR{j_-xu<V!c1%QAJm%QcD$>J2`1&haNq at LP=lMwXe0ty0<f(m6(;<wEPRCFr7zDGr
zFCm5b_m(vxpn&u$h+7Vo(bhT*@f)&984G8rE3<YQ+$k?Os%UI4JG6x=uPSGB5{4q`
zg0srlOg~u+$9%Hbqrh&oxr{bl7Wf>R<>f=uU-NJNCy$2uq}dG(=y#>~uM}^#aWqxw
zaFVZgP!WlCkxe1^RI?rWd^rQ`N+0@#4^s^7L&htO`Y|#_jYdPPX&MWOLIyiloO!In
zUOzj)R6i6og$+uIVg5(%Y2%bebza4l>N~E52OHGv5G(3d-u#TXsHsysXJlk#{X{>J
zvOC3hcf at 78M%_PUc)yXI(_6Yb%kOpS6qeb%$A}R<nrD8LKB;~CNtb+}8 at L-f<5Fk|
zj7n*c)t-7{vbx(sIs{v0j2b&@QrFfUGulo%r<`aX=a_Y9wqwG&0Rz?zpgF3dbiIf2
zlPH^_Z0cl>|B<ORk7D*^u0nfW#-I_o?zUZWa^3B+a&mK{2e(Tbpv?BA&8GJ43a8V5
zLifJC^ZL<a&^@PDehxiGoP&~++AGIZ40>9fLp1CxD0XfZ>K1LlR;@F9>zuR$ps at 4=
zGbgA)5az>Ccigx!BO4?nG>Gif+LfD>II7i%>2V3oBSIxnR3`gcmeEB=`y_X4);ub)
zUV__U&u`FRbl><c&6-6-)ip;)(gO?)vxU&^l`dkMcgT#b8)z2ECz4QX2>c|-TpVJs
z1cZhJ)eQ`gnExv|SO~RTKm$;nGfn?6*_(dNLesDD*+H8fe73Z@^1^LDD at q{D-wlbh
z``hFpZ#kv&chghw+S|%w;#No-e+n_s_s4(kx#8De=;hx})_u;O_32ohnkS7s%3+Sb
z@?)$MTJf5#x;<aj$H7Z{O34!IEqJyc#L|Tiz%R-_r;+{MD+{0PPcOp4>C{4ciCaCF
z2d+mu`MBrmzzu4LLel2&O&X@)>Zoo*#_Njp44t<p`>Xd!kcPCAm&}2gEl9B_iBK$n
z#C{0K1{pOjcakNx1WNqWu)|nvf&e1K86`&@3o1D|nXQMqcJo?9TRtx@{baNRXqWWU
zuvil|NvS5)=JRHXhyB3(LH|v!?}Hg0nC>OD;2E5mXebs8h)6C*JOcBKWhj=h4-TCS
zvPcA3`V<gQfWb)OOp?F>A)@MlG$iU3fQW2p|1e0*2;w-7Ku3nAl&<yAHTxh$dEdk9
z(Q}o9<qL8Y-tk(Ct%ItP=A0@<b&))B*ljZ1Mu#<R)+!A01x+1?p%YT at NK>i<A;LMj
zm&dnp at 5c7qdxsnq5Ep#~&W%#uBS)97XaYGjb|h)9v|h17yriS_cxHOG&1{K(Uz{a(
zt%9oR{=f18j{44w=mk}f>TG=CFdplL7RC>yFZF#gjGS!ZRE-~c-xJ$a9FtmmseUI}
z=?wb7yCh%>F at IcjTa%8OqHK>c`&lowt~e&PYoq>1){m82Ta-WEg(qN*@0QD3N`Dm%
zh7h4X^Cb&>86qF)M;nc=Lgd4a@$5v>))utb)Kg{1LromRT4iUq8s=z14_Dongj+jy
zw1)G)hLCPuU)cQ3mtTFmd22WPZ|ml7zxwi<%`bHAR-T-e_6>aeby|9Q+SfGsn>5zv
zJ0nD*9d=o at fQ+ee84!oIw9^)0#5PO{1_|wHS#*&huYLfgFUQea^bObt!aM69d;KV_
z_^tpfkU{%YVgTed$=f$Q{<WZ|_w6ymnEp4LjM{g<^PhE}*|(<--O`_zFYI5+1z1~z
z at LkkS>`XdSvEyiThRMddAZ{WZln0-EY#p_VQU6#r6&le8kJ7G?4qqOB?J7N(39Vn<
z4lyu2^M{GAt?agG2BTS7!uzZ$O=qfXixA~7?54WqRHr)u#0cdrvJ`2;&))BmCjA<g
z9)$z+9npz2p>rlZ_Ud-*5v;97GZAqP#yhrm7;&+sa?Vtz3RGmkd6pEPq{|`kCS42%
z3zg%dIA>dTNTACffGf)R at nofv+H0HG_r5{O10LwS)pHRt+rK}!^gjCOs(qX3Po7WP
z3%Budx_D*HpzET at 8n3lr`hqs3e?Ye(bPQY`t{fyqk8Uf1bIR1IqToH!XB&CCR|oHx
zo@;aWt^93A>FY4AJ>9v?bC90ltT?YVnASV_S*C*X?t>C)xsWeR-Zy62lV*d#@*L|k
zPJDILwDtHDRGdF}=LEfE-*~l8Ry#=|hV)(o*)3L*hV*PPzh)UfTe+u-|J?^gw9<Z8
z{#vK}2n6lx(=}Z}rX6|>thyCDR26>4y9w4WIYLV|y5aO6DXpHcJ_K$bzC^&<r!J5w
z(REb_u4Yq|_r!qNFLnVZT|E=NQ@);J)KN|JA&$*?5$4cGp=E-|^<spEFL*9N+m3Gx
zES*e0TCuN~eoItc4c0YS_e{EYZQ2lBUx|o$u!<SWi);+91s<EIaWRMgXz(*18daIc
z>5>BAb7gjZQtR8%bxWJLZE%~`gU3wF?L8o!j)p7w%6_tV!M4jlJ{JGA)bqygb;D~Y
zwP7&*rTv$tdhr<Ih?btmoOW|(X&H=fuPn$;<CsrW_Cd_^{p&`P$ddA$*3Puia}9C%
z(noy5FRRp`p|yHie)vp}T at j$t!}h=z6>j-e_t at f{pi|`whEYf{n)x6|AR<p|QA=wh
zD_kxc>dVITh2^|A^rja^DF?_~x!begQQEg7{Hk1zCYefC44|{1ERzP1MpNl7X!^>?
zfiPr;=NK%DrzfYE&Zpl!vG2KsFM5vBx$%(jz`jSI-rCZQaB0k-8dzk0dYLf-+=;&W
zO6E17UL!hL1wan(eg?9)Ke<hrL-vl|UI4q5Yq6xc@=|lMSQ$KO`xx4bG>BC`BqJd!
zxjA_uv1#I)rSHPdc-r?N&ok?{l>XzbvVHH+;qkD0zUR61Tlf7#8*|-<^-T`jt${|B
z1Yv?RH4fzS^a15R!~{>$>E6}iOjs?ArVB^s(?@<L!o%AiCN<;QQUy6of>gm7cNQ>$
zcQu_3PZE>zA8GW at ltrP!&#)+ew4jx}^YRds+`=pn<S13=J;D35I2d-(g)|N>KoMQ&
zoi8qiqSJ6_?d~PyOZt6Y9{v6_6h6BBVOXG-4L_PGSer>;^~bbJ9PE9XPJkkDv3EY(
zbOINU`14D4uce*jA*bnrhqpgUmz{>FygZFwe@>5`{`uePMt|&g8=b8w&)!-`WTm*;
z<@?Kc;4k8-7^iB1X+zb at Uk1eREarXSFy2nZBQqyNi2Qg~QHls7m~*)mL$2ST=izPW
z0?~{2Z=QAFi<J=f`?qw_zZb!jr=Ooc8%hT?*`Dzt8P}7}n*G$zugs<=i+=hUVz*OM
zPtn{qI>M#NPrpa`i!^@Wn6NUqY`l)M#ko>Lu-pJMki_?HU?tq1zCpjy_|Xf$e+!TN
zdl7w#@e})Ve#*w4u!{48=E#p;+77?>^xo3>fpA=SLB1l5WarI0?fS8JZ1aJ7FuPs8
z?0xIl3jFV=nCU&d>`?xwWn$(FD_0(U at 9~uz4li4gKk7C*?o at lSdL%VpWUro1_ at S7&
zY*hZCW!}SL=21rP*b5s*<*!(Fc*Dxa-#fZ;C6oPlWtx0N{zNeGc`%0xA&njDCF&a^
z9JW}2Lln1`b1+GNJm7f%rqP09WV~|U49|?C^eO}U0mmlB!wkA+gEC_SeFi2%I76-K
z`FLdt at _Jw6#TS9HlgsOX!=`T%ND<iqBZyrL@#96GgyLh$b7Vc^1>wjG+Hzjrb94>N
z*g)27fQj at OdbNtzA>O}YUi0grc36M7HckI3U8#tWu6U1puwvy(Ro%-Ejb!THumPG^
z*SOkeyX8;QTAS9-GMY^DBM&WCHIJk}VDzdhA2C+iFyEa<eK5OR1C>UqcbwyO)M^Js
z{FEN!5M9M&zS5;V`NR9c=%u~r6&ToI{~{&?%pAM47bMXqrT!fGh7B8jN-f*4Az(2V
z=Vy1>242Q&@+}{4{RqxPt^cm|5Sl at a9(?{ADAveMgP&DQV(QqX17{3nvi+VxzVd!M
z22q at VsU7GbxB_o6QAc$SHEsCWeLQ9;msrEGK~0~^$vl1Pu<=TEBAM3za at Cqn<Q>|A
zbh^JV0sgJLcz>aoRcngnrsD+ at YZR2b@v1HTYVe}2TGCSERHHPpwWIplMRlAv)vbHL
zxP2Ytt#{IA!C1O!RyyrdwWJYlCcK+Id(f<Oh`oJnV`ZgI-x6;+q>gdJOO+{{uZ-b4
zP)5GGfH}%=q_TlR`8LjCjK?$1<DtE)xQdpS3tq;5`)gfKc~+Q<`dcX&(K;+OB$gUe
z_Db?kdu92jQc@~eE|rSOdj$*t`6nn9_<Io_ at tdTUwyGhTik;HXaw at I#D48B at 4$zM-
zB$g6iyi&PTM7jo*u94A|5=-S2oeke}!8ZcR=aJ-4B)ziYnui?L_KO4|-J5&`ZFixR
zB$kT4n5E`Y0V&r>-Wz}cCJZo?24H|OS(k~6Af}W`DW!E%7;pAvQcL&k<4vkSWgh7V
zkMfLfT&Ie6wk{RpEpn*@RVs~Ysj1Y60cMqV9mYE#vDD-Pt3yg^>14B6ej at YHMHIWt
z<B`(6SspUcqwi~)EBz$T<13fdZ9!J)C#G?Eo*F|YHNSIfXPup8`kSkZg%Z3``K|n?
z94FLAqlfL#(|jUUcb3Ntg}9h1N3lT=<L7NvuG$)772o|LZ$z)&z3|_NysBHe8$z#-
z8QT*78$0GYz2>`zkD!1SduTBfNKd$2y?U2Tom|$tm&?WPCr at Sf2MflGojYgM^0{-y
zjw!(VIdhk<nlpFom`CYG58VjkJTOijo6=<wv3$5$Z5w9)JMzHu;sf3%NZh?i!Uju6
z-=hTo8~vm0&s-3(rFHIm)j#=3 at fLc$^Z4I;P62wzi}93s{BNykV1fwvTQdDXW)v!G
zV8T6Sr=>iaxZqwBq8fIV7Vf{97HqxQy_SKXlPB+8^&Kf6H?N+5`ut7Q`u?2M+h!B*
zS(w6{Y149YrcLjgIj32R7W<bz_G;O^3%783PT#3h`}Uo&uw{#c2Rc3a`m2vEJy0!;
ztU@!s?$WpKEdkV>aO7{uFWsOAp>r$x>3I5SE9guQwt~d*kofz(i7vL>Q#$l@`VScJ
z`q0un!(N90^dGN-bgx-a at +(6|?AxcQHCfo-tj$OyS)eRn7rcCr@=RWKcp16*|5vB|
z&2q#{ihIp^ZJ3bvp4TEg)$1*GBJ)CFufd$bj2xgp?IrZ5(mJJpt$1K^X>f9>C7Br&
zd(C)R at e094UMMxGHj-q(*4&`lG8kRJ=t!b8h+731Hzc{#=Ce!o2I5thn^*yAbQ!-l
zP}TOaI+ at obzs42%Ng)+O<qqX<k(*V`=JJXgl4WE0zocPzZV%a<+CX8i8D&CyM`MCq
z<!Xjqsl-vDnG}Fhm<+0^f)ON)fRWIQlGOJm3@~$;ES+?yyxq+4VZ;V;godp;9yY&c
zV<T}!6F)k^1Wt{F+ at 3xKQ|8ePbi+KDLZ6xklVP&=ah;@ijlC&^$=aKF?CZE%d1!N+
zJ~gr(r&a1p#Tr-Fn;1>mzIlEI>vI?@RoE-=v at ewtOATnQ=Aw<3`x7_w61m|BDSHV9
zvKI!tjJc=?-T%y<BDq2Nck*+}>>_1GHM%Kxr^_u^4ClE9Ujd`aQy!@rvWt*t1D&i!
zw+E-I`qyE*q|+CW$IHjdQRUyuQAI_nt?2iiQ-zqSeOJUj#LxIQ;=}(F*-0N|Up3h|
z-8$GVak`LFYUUX#0Hd06{q1rLkTHO10U2o~wZ=$N8Sz+kxLO=lZVaJC5ofEirg25z
z6$yTNufunfSNobL5KkoSYi83|rBfZDzfTJRDQKzJrVB0y0yW`XiVh5G0VWP4->xFv
z6%)fkLW;!w-fnagLQ!>vd|BSrF^If`O!w)G_fkp&Q%dWmXbd%NsOsYQ5=(;;OM`2w
zuCy*M(Lu?312G^tmlg3q43Lv`XnW26N(DcdT(RAX$Y8~zLdC4*2iH$$qPAy01!`y-
z#ujl=*`>y>N}tL-828`YLmBtg#?Jy_CnvFN<bnY+>APgIGJ<+$LVFs at IFk#h%CI7(
zQET!tD+9zw!^XW#MTovt5!_n>5*4vSC+(bhmDE at MF_|1x0w|q%g-%4d3SXS8ye<Db
zl?EUl<@46?JB?%L=%(+!6Z~oOn#vCxr_1D&7a>AeLtCo|QA4oVTZwx5w;xId+xv^E
zFR>clC_P_R$IU1+e{W<h(z^*{=2d7%S51aX%8wlTHO7eSn at qbgv?QU10Nx`UKJTMO
zV;}Vg)h`QJO(YfMmfo#W0P9ym40(rcR*H#rJF(XCy@`lc2!q99zIUsKeGX$_jJKV1
zRQY*3TR&2{na{h5d}V_W!Rj8)0sG7zoyQoDhY0>`YK^CI;sXa7Gak>M9}(ukc;jQ@
z3xbn-8}S|R!bh;}>UIadFiQ6n$NHqc)p3T&ZBr8ynl#-}_+Y;jo6;{dWnkfhTer_`
z$3nwoiR=k&HK1Z!+rE8g_RSHuhTEDq8J|9PTfdafol^R5oi}d>3rVRPl$APQLrz=#
z?EZej- at _DfZ<q?(-4i6lG#bVm1|X(THuh?B+kK~ugzLzhv3!vjT3=&8JS at p!O%qzA
zwkv!Qi4JIG18duyzO(xFB`tOa)lF&A+!nrL-n^~-Q#xJhcYoi$ZQJIcZ91>A#E{0*
zP+O<N_D#!t2-%wAWaEd1ojaj1sjK{F!OorZjPf5+S1!N at k1~_gUEpD5|2h_iba^9d
zlk9Azn?1}y20n6`^tmiIDAMZVqwMT!`5Iqm!h9HpX}gh+N<Axn^KD4>c;su^mgJgo
zm<4H5cRRB<|IDn~@ho5SlppeKd#)v3L=~@pX8M?6v=V*)b7gsDCHH%TrNyCgF_6w*
zk<Q0yeHy{M9ZA<KLfChje<b`)RH+({!xi}PxN`6-`A9{GbiF)-tt~ZBhj`sEJA|0a
z`C3!W2ZzOAQs>$JgqD&?s?R*L*?eml|MXkBNEE*Xi`u at B%D0RzxsxCZ%%7+b!JM*T
zCB}ZviZ0RRJ-d-ci}m1}4)Ow}l;o5zAbswKd?gF==~nWdHcz9{;1rz9hbx=ON3+z3
z(Y>6EGK(Ig(ObXbEifl^kv3ptZi{bA<?&Nld<}v3ELjDu;TvhpSF8<32sujWMfeT@
zys6F+s_~7izEG!aF@`eB(8qhW!&mS%d~>lP?;^>m at vY21Wha?27KT2`EV8NtCoR2j
zkw()-zV*%e{-C?BGQax at bMfY&p6yMyuP*2HYChJh+tnIRn|nrER6bwvhgwh44?h1~
zyg}E}b+5sv+u>81ONE;8v^7CawvmmG3L3omEY at o@aXU?X4W<@Rmfq`y7Uqw%bwr^x
zRwQXZX5YdjMfl50l>ApK)xxLxiltf?F15Sc`laeinOMH1E%+K+COh+GsimdrjgS#P
zD<1J?RILTn=kVzzd>gWluJO>dBK3%Usx26~jV^1ks*#n?do#o%evA4Jdo$VZ-RV|e
z=Z9rPMazzOIj^Flhh&1Ka=Hg*?4#F7TTd<P0|j at Llr_XFt;W6PTr~)CY8+VA`Pwi+
zmgMtvpw}Z#f at k%4Vs+kFT0loG*}WDHmA`Zv*mN}%o at NuXwakC>+4wjRoN=JefuDtE
z#YtWd9awY5S6XnIc3Qi8iDG9n-w<`0E_-zQ!&IB&rR(?{ubrK`!{+I+@`-n)N)c{8
z-)mFndxJrW2#a?bC2$*z;fVe}v?={|5d<GNB~+fvxIxdrKOybb;_U|)9sOn!G`w|=
zF35!EXkOC&bMsGwbDQ#fPtviqV|U|@k9BRfJ^euv*pqH4Saf>*s4pkHcKVCQmaT_x
z#ycWHZpUOx4VTfj!vZhK#yGa!LsaL4Ge9yTLU){OZ0(LeTMlO+bTRe*>k=)a-k~VQ
zeA<S-c74(6=VovJVJ!Xd4G4iwZRlpWRoCH+Mx|7&BE5SmU$khnJ*nTpS!ug_ZKiTh
zXgQ(i^wv42=D&XW_ at ud$)<gvu4JxKD5tBpnWa#r&$A7hXIkXeesFiw`427<A{zWoM
z8QX#!_x>@pWGH<D7PX)`qLKb^QTfW?X!jeNsaW8lpW at vD@lEe_GEsS^RzB8hJk;q~
zG)FZ)x3PeqE-I}>W8p=3jj{1&=}g$v1TrNP^?i65e10UfY87vU|0JU}Pecbr^@fYe
z%TKQCO&w%VuF_As$)MY&dOjI5)w7@`EvNr9r8-X%VU*8TBfuv=7~wLN21Dk}vQ71^
z0buLJqS&q?|211|Hq>u_n!X10hq0a21zP!q(>6{T*F|0KH1fgwHi~(Aonvjp*J3sO
zPuD9keA!jA8(pQ3{40oi;H$4my)$DvT&<XDXY0RQiSymg%XAdW>+;?BR;~E(-`G2q
z^VT- at GNEfOKxv`v^kpd2eZIeRmDkr;?ZI$7FMoTlIIiCj2OUte7D~}@-0XT)!*Qdl
z{7elTtp2}+`9F}`ts%U}=(egWq|huevZY(nkDC{tRra6Xd_nm}>;-`<Pi$UG&4$2C
zdSqBdn;XjIOj7@=?J&aoGkK>il`>)U$F<OP*^E|o9Tw7cvjt-C5z-~ykS>Y#zDjR0
zx^Ro$%7lzz($O2FUZ(QnSKH|}(W<1k1#B_4sC4He-6ePz!B?#yM&K()+2M8!x>|U_
zCd)0K_(YN6;S%LLvB#0k3(qUBFCia$ug%#!0$gioUD!<CX-8${eh)1Daytx%)0y<$
z+=@28&^J8v%gnFI2^jeiZzE43&(p}$rt)-KL0bT;@?slk!D)4Z=sZPUyt4TU{7Y%O
zSj_g$KvoAp$O9wo3Kr-#8SXEZj?ycnO{Vhx{_XTUJ<K_Iz9S3&sie<96Vv+)mhT~z
z*NiX8yZIV6b#GZUH=uSuAEB;z5=yh+KydGTC^$^Yly2)*tmxS>K)P8GWX#N7xndpJ
zuXI05i}SmanI-F2m->8G>aHwHmk9noGFdGc9wKQTNG+NJQi-Ssuv%e=aXEyqtLcGs
z9sT!8lQgKLgv`vQ%5&TUDa_&?NQ)`W1B;Rg7Qx^DWPR at 6)56?)+GF`1I<|4ARu`W?
zOzG2*Tz=vSrJnBO6TZ6jM8C90chSgQ+{-8S4LE*dcT2pfSla{FMk0L70>cfTVJgO`
z+PtfWRYQ;R7v<roy1V*WH6)i*Jbx!wtK5b`8RhxNGg9MOyC+lWdvBEZJ?(mDf2Pte
zt16;v at o9>3(Q`b#{+Dvmb0y@@JIYm+M;fWKFL&W*hau9h6`ifwt5)2eS5~a-85AhJ
zR}q9cGWK?6QIRDz%K#@_%~h-2&yQ<FxO@%Xq+PKL(Bi{Ncd}nC0~LYNuWA`kx{<QO
zP>|nUbp6#b5KrPXFR>QQNo-t*TOI0>pEoY2SJ&0_61xt<R+=haE-4XR*&sg0y~NU0
z+)HdRkUV;W9HuvFmH~*7EX)O~ox5NSV;jGiXbxu$H>|7-DD|Frf?Q at 9gF9lSF<1!N
zE!hP>U?Io>Jzvz!@8aD&-Wtp-Urf5Y+gr@;-a&Wre0zudUaMzW=@85B%Bj2fm;GfG
zy?VQgS*|m|&`5rZ&tLewVcV^SMim88arptcYefNB<bi9R@(vz2qw3;GL68<n?+6kb
zAxL3ed?)MHJPCimAKur<HoBYcCM6_JxuA^lz$utV9~0E`d<4UK`8l-v*$zp;&Sqo?
z>$|Y)S7n*9WTRM5tXCeTj^B!+R{`;$x04*XV8J&FR2!|7{z`@#LYY5B8%tM5DeSya
zW(ZyV=T!dweSAM%eGhzVBbi=y!w~w%CBwSaHRChS_+h1GH|Vd%*gvPPzAZkhJ5$JX
zI`l>v{dKir9oH8$!hU={f6ph&uy?(Er<m`dQ%D9I(F7ue$svM~?<<RwiA{2bK!_+g
zi7jpwEQE#2m(wCzw4DA at Rz{2 at psY;!16C|w4hvw>iWT$`e7Z>*?A=QPmGAd5eH(<|
z1u&WnHq>BCAx-Ei^c99NbXL1HEYuLg#{SY!Rz3(A6W$PEx6;Ppnt|2lgRVVjyAVUe
zQ*1sbnW=2qWUF|#IWkNet#gR?u_K!HQ*T*Wk;hY1RtD03XuN;X;@4ka;PEVY{q at C*
z_S38}U9!fE>9T!$moe;)<m|{AGkV3CF)K!o$s%)*Ko)*kws^q-XnbJdqB1pR*`kF9
z=$Qix7PDuJ(q%M8QA)>TA(1TdJ4PPeMKSHj;v_Zu-cR4Ee@*P@?v!$&5y_xa_&2bJ
z3fw;*JCDoi?|9GU^Soz;Jyovu8q^Oqm at N0zl_ZSlsq(L9vpQ7=dlk1h at 1``8%r-Pu
z>H2%`<0G&s%*mgX%&v{Dp|N-HeQgzmX8GunDMzMBW?p`F34(E;d{o~N$;bQcPW-!z
zbRy5ehsvAEc-mULNnTZY$w$jSTram;zg}p@&V#HI%6$(<2o50;^FlXafG|>+BFq&Q
z3#)~V!VcjT;a|dW;k59r at Uu_>MzBF6Xa;WR41LiQn*cM>o?Qt~!wawn-hlVvbNCK!
zfR_Y_4>5O;Cfz|X<iQwr4|$dYf>UV9!<~4)R at lJr*IHDEr0ia at u<y!*dMEHoEQ2w4
zAC33XiDg1lyf4Q4;zSm|3?`o7VKD6kqfrJ&wcjuBcLV-j(4K!efmb4 at P0SaB1A;|!
zwQNDgAcXOI!24M3q=Z-mJsw7K(Bm<@osh!A+hO=g_>za8#PD)B$HU7JSQK8a6D)3-
zkbu7__?vNp#VHfIXwN;h=YHDr5bZfndmgJjPtu;JYtOT_=ZCcCh1&CD+VkVu^E&PM
zSrqsj{%*nNEr}|=7qzgLG3;e6Y_AsfI)=Tjg&oww-o~)EwXhGguum}T6D{nN7Iq%P
z&TC;`YhgcP*pFJ+Pg>Z2Fzi2=pkLyB<q4+0GLZ3CR>Po<7G}j?s}>fag*C+AhFX|I
z3u}VEO|-B?Ei4s(Q?;-(EvzH{cGSYUX<@zbx3?BHKnoj&zr!$WB;HRs!P319?mwYE
z&()siYtM_d=jGb-YVG+c?Rlg2{Ji$OLwo**_WX+WykC3%m-hUw_IzA>{`3UTS8!R)
zS8!c>zNtNzYtM at MObGM%ZBGufhC1xAsn%8z*3cAtGTz`LgoQSP*!IvW4U!}L?wx-3
z@*TdpQ}|!Gm+!#qUg`Xmdzat6@&Dl7^?!{2PI@!4Bvqdr>`#jAPLcRqdvZevb-<v2
zZ!TW^J^JFh?0|22^!Pm*O<rfV6aRhb>=_r=(+Sz?BkijGUQ~Zzf3?S2f8Yscg%kh%
z(Ydy_7ydhexVyZ&TlBvhPsbhYT<K*0oX%TK<DAa*)fDpQi%zE`Ii2#UixuBryeLIo
z#NX^}DJt9Bpoi1hBVPUbb^iBW|J`e>d;R{^zlBQuciu at aIh{|%ID0si?tbB#da#Xr
z9c|f%3?basWmB4t*CEnFf51Ovk+{Y?!#hK at v9{rN6V>lbY<4k)Or$?}AQJzOMcx_W
z8gUK(E|Rv8e-lpdz5*L*<;%gbS5ihwVAF42%PrVU&%hrZ8i0S8t*v;)977oY-jQmt
zh1gPvNUSjP?UDoAOO9?RQoL75IQ&48K%`S>5FN<QY~%4 at rlBeG+igoh3;*r64NZUl
zOwjEAP^6i_X@)V94n{H+W)^KYTC)8>i6P-Cm5@*nodO~f{(*#F6>4BfNwtVXbcEPK
ztmN^#V<C_8cpM8`FCpgmz|_QoBvTm4RPy*=!lL#u_?j!!2q~cs#T!uX?Y|^{bG3iN
z2E5UtyQqvZH2>q}w*%^F-}uqzy*ctYb&wLpYaI0U at 0a;E)#O4RsE3+zsXX{{FMO+v
zf{TXczh6dt<OSub%=%F3X_ at -g8lxdh%sVi>=vA=MAID|2RjwKuoPKt5>G;9VA<do0
zFAr%lTRJ=<oO$rJxZ<6z)RY)^>-xyXVl<HT>5a!7nAVe4v~LeWe0|e<Ccu~UB$;Sp
z+qSKVZQItw6Wg|J+qUt>d}G^Ac6M*Rz1ZK^7v1Nn{sa0v)u*avn!xt46BRt)SRObI
znW2B)kHsK&0Zd8LB=a28zn)~c2Ze- at q(i^Ofu5rr?xeAUvlj~oHS})UDP(JH(kUi^
zIMaToX)&kMO>>eGG7KO>6!|3}`EEkcaZ<?05=2EH?WC#uZK(6~Zsi(U-)01oBkZKR
zJ=dQOxwF>Rxm)Iw7ys7P6u&mA4(kLEKd at m}d=P=wh6UN^q;>R2CP~WY{jbxtVkp73
zvu4C|s&D7D_)uw4j~-+W|K+=)YJQS$>or8k>tyM8>&o>JAnp<>(FcS(D12BNuJ7a0
z1F;0d;WibC&8b+0yl~Aj4qQ`7>cZiEKbhGTtfnn(*|my+Bq-iuJNDtY-*(n-&XMtR
z?U^Jzgi%e*j$?VW?>AO9c1!8l#kPe=3ya5sJrTrdba0oRynP7 at RR_$qej{Y)jG|of
z(<EAnZ<bi`9oXXb=ef&AE3Fj4#}fj7K<vjQffDY*mUZNgx at +yiM@KJ=JQ1DD#06 at m
z<nd|=LFQH;x{$W6T;LL^qm_0;5j*+d;*mK1-^9vF&wGE8X?Z~Hl)|51v}SL#=?#%S
zUDg;ycNAi<#j|f;lDT-?My)rmeY;Bx^qAbv0j;phzPI3b at 4-Uf&8*sKv7b at 6i?6J5
z7IHb8m#WuhpON;6Yb8?@HdXIp9vUCWrvqm1-vjhAaiAFFSz_Q+f)3h?HcYL04o+Y1
zYs5^hq{m{)F(n)siWX*hno(wa8QB(cd0e4K!mR%P?%Q+c5T6{u1c4%f3=TT5-17j`
zf>XZ|f(#}LvjWWsGn5QI3%Pu**dyu;DA&nM@;@+95b?00J%(2b&W#Iv={#tMSAWR~
zD!81OOAQ<S;RR_RfD#pCqJ(3}4U-ck%v1A&O-VV$wR7{WhIjW2{RgdfPyVWivEP+)
zbLQ~4d9zu58I{{VY(B?Y{WtR%04X=1NjZU3$1{MX+J$px<f at RD()_J>l82<)n5mi7
zwEa)so9Zs2ZkW6#rtWMBl_S@$+4+rHyL_zyvI9y)TPOf}kcDs<`~P<<ZI at XNVqG5)
zD4YCAujoLL$AiIQc%}20yGW(Yb1wI|>EoD$3+<*nSww?-ulo37Tql90O*%4IIkbif
z_+ at 1mesrR{_%`95?JGfbnXI-xyzHfKH6NlmJ(^_gwlxE0yYtr=-(t8O)vfYd6JH^(
z4KacSYPeVjPCKjwEW^iQBriSOj4DIc;wg_S_=q>7(n6zqv~WwRos)!R$0KC&!AX@|
zXckszR^%idiVr2<ocKW|C?|Z51<B(d{=dLr`9yyH=z}|_Wy_l3+<Oh~)PlAJfbIku
z<&}~%PaE#=r2<Qm6KCjmNUXpPFH;-A=+!S^Wg<w8Hpayw%ih)>B428wk>u3Llm|S<
z%ISyl{SXHIg<kt5zmN2N2nH(Po6=)$!=8r^un#RZW6$+?#O-piX7aA!NVGWQ01oh0
ztlTNTo5Uvx_sWEHdUHL3n~vL-OaAJcLV{(t3NWrkjcvKi7AQMJ#a;Yh(fzWUDwxvy
zbnw<%qg%!Pe$s6`ujz=vIO!!Ke!E1Yk(*og)e_Y`^_mAhPenWfwcWM96`=5NR>YL@
z*b^3`dOsJOTE5pZxTa0PwQ at jb!*8+#|H=g&i~Q$pMgafXJ{l%^6b44ApJC|Z^{-*v
zW-EPGxqVmFG%#7CE*^Cu+{<!)H<Ex?zoqPY$8$qvHcjyobM0DQ^M{ezRp8uUtj%U^
zEHD>^qe=Zb-@|&L#qxN<Kvvn#LU9(Z#;<SxE%y)tJe72a4BA0bNGAdDKa at p;^pauH
zN{ARVdq!}3Mxr`ZVUcJK^~CgQL&Fhm8c6?*|1U6 at MH734AQqa+-+>T(i;T05(Jh>r
zd<b$RNB|2O+h%c*s!}CB(XKx2I|bNzrqJSAUU3$1^qC{<bd^mKGIe=(aM~!J<8eE3
zUQ_Qop(_uIGv~Wn_XQTxZyc)?h2RE5!+&>^QR=Pl_0JfR{8RSVGaGv{?uG1{YC6F?
zkAy2nO3`Na<MuB3H=Ooc?6<bJjN>P#eGiW2Jnjk3SChaGn9Xc{#+Zvjgx;T9mO$O6
zhZx``FV8`p<OcmAcS2Z6b!S_T%P~=XI?wetLUkvu0~NxaQcPPC3H at Q1G}nJBYi@$j
zE_p>unvOnNJ)&T%VoAZx#AYn%zt!N!rtxiPuq;x&KSDnx at 87;iaT?98Y at A!+A1JDq
zU~PC;-eygwAowELaLxqOC*hs~JOhyGHrgxYjudA513e4!kAvzd2s|%_Fo~>2?jhlM
z1q$V#XYf29PFCChWx75eZ*e=HEO&c{+Tj_99X63km#EJC at DW^UfWt{qrTbgnrdqj|
zpjMp`W&PS3Yfa|g-&KUvnk#m at u}yURaqZv(y{8n=mPANT7AF0Fmy(F7$V0_H8wIL$
zu=SCXl7Asq1`w)&V=DP+p#3|;R6&eX|BtetU{Y$FGXPxlZORWSzB~-E#SiM1!n;tP
z{jTl&S(fO!o{CO4Zaa?ay5d-8%i4lH#ysDtlfQqY5u?Xri|xuP6$ETm<N4U?NjSCy
zd)XzLlKbH%!?=e*pg`b!XSEIlEQD#$8K-{yBPEc=pRQM6bSa8PX>)q+Qp`W0ee1jP
zlP)kJQo%7$Aq^_)--#qeFElPn*$zd9k$*s(q!aYtm;VF82~i1AiV9MSLKQ>hqY@<%
z2Pp+9L?B8b{SW^Cz=zSUl;FHHo=QL#ZstV;BzfnRU5wo5(FyMau5RKz!x>Lk=Wbgo
z{`U991BC at NLsGM?wwjin9=Gp!!YfP)?W?j~Az9H-PgD9VU#eG!;d=`lPK)jKP2Z#R
zwNCHXO!2vnuI?6x2t#w+{G#It6YAEZ4SvfN&V(f0nFxF6)YH~^aZM6f{4(&@d%MHx
zENc@#Yyo!gts;=%Y%r`xF)gq5vxGk?))JL`Wb>ndUq-?Pm7MI$wVGe1iS<_^U9XQ4
z!BH+`EyDe5AdTVP0fgaRftcYy4TRx9x|rby1>C?30e0vqcE}n|a6CNRz*wJ{A!Df^
zW|cMS2p&QR7u(x?e_jW-Ug)89&EiI5mm at AA1~5;@apwc91%?E=6NV=Ogv(#|!@?Ql
zeHIw3i_sO2L9cTomVNx~LQ$H_fXb2&beY|HrMl;Qd at LGPQ|og%04<fJYTep?`xfvB
zPh{vDbpD{*-*`I4Kd%2p&dMm^q_y$#{e2X8n0!8oQ#ke at Q#2{Wq*<;n-S;Bkt?^N6
zH at vuwvpIA!+bF<%0{TU7z(lXJvp}ztxBpoJoMs9b4D}g=`kqWS01u=1px^$*N at L&7
zRjiLl=kK!%RbXrAvv=T;<0+_9bd!~P-3+(RW)IVJ{v#G0nQuhk_*l``chDLQ^Z4Tv
z?%w!zZg%A3<`tX2cy1*#Xz3luG<`00@^7qgfih~v&{zFrHn(+~$(QViVCOOAuKLUw
zkHMQzOS4^8<7z=EOI_;glEpN8yPB~@8Wk&E5rSECcKTkqsLj*}Fpb|jY-;_^d0vh7
z8$z#8F7yD?Kz^)iM!w5utMlj$^<-K;2<Tkv2Di2G{pR9>?ZI$dN~Je>s%NTi|D$9b
z{|(6kHH(4jToPvw?ScUHVlC&a<XfX4(;IU_Hd<+hDzp^$F;gJO6S7CN?ZG}2VIeja
zzc?4zfL69J6p&fV!H$dJDgFZY&gKfL0JA8n4Qa<!e(?4OtgV0Zj~(m$_G!aUxI6$W
zlkDf$g4-~{q!c$E->>pe1mOulA#fV<{G0IAVkb8E?OP)&Z`=Q^S4%KLyP#-SfM239
zc7AG*^`3It?m;T&)ro^VKbIP}#OgQCw=T2Cp<OPi at 26k?I8Gll#0}%Vka=I4j?|}q
zCj^YO_x)cd+e??-*YxJ<7U)}GuN{e##dM3cRI=c#wMk6sjF9iOz94Oe^2V<tsM#gG
z=ezM9cRh_iaG_ at cgM(+z;k4R`+ZuDfFk=T8-fLfvmWat$tljUY?^)1ff?l+)^~bZc
zw4A16$5BOG{Z}{;{x-HgaYN0{mfLot0p4tA3V5t(gbP6!>e(*hInUCPGGkV^=&A_J
z2!bNoQz%IwU&|tJCZZ2U98ucKZ8%a#?EpK%YC0GF93IvNI<kBpBd4)fR>*q~rR|U8
z8CfqS4>&Q{D>9=OYw#!Bo-NjN#f{cx%1?4Via_s1^XY<7^XUxP*x4MuOnq(|d-BJn
zshWKG#?f0%wig9G^XZE6e>v*44p7o&$6O~&QPGl!tI$Ut>&^7O>|899yT9cjXnnJ-
z*+~z#uiM&HB2cp2*<O3j(`@mDNphDBg|0K*8_f at ySntYbV}BG3<n?o~xjTJm;ARHL
zqOb|l#w-~mxxccxA8f3}$hyPT8LTcCzrHpSIk at 775FWusdIj-QF!ar?UOS5ImgSj#
z)`UKGe$<Kq&(S`-Exj>$!pnNL4<CW{B{#kFyM^5>pbl7B)ANuYQV^rq8W2Row&VhD
zyFUk$5 at Qu&446WUpIbwR1O5~|eLDS$oE!lO7a%NIj0HQ`<|uyIu7P}eGSDb=@Dq9U
zNfY|&{>jq@^l$U4Hfl71-vcu<G`{4klhG(N7^0$K57=eat~P~;AI65TvM2k@>Ai~G
z`oRKDe%FEJo=s>+L|AW%?=Kj^3N?5OG=blZg{pnSzyHb<)gsqvdzJD7BAXwS_t}vc
zbdHkU1aSQRGfyaEa*Rm=+YpUk02<j8bn)O*E at BfE3PEaG_VC4`P$Tv?=tr&pdyu-d
z_RjCMz$oHEJ9?NA+bEa;#fqE+LT~K7y-?wnR|v!5-k-?|r+lbUm3{G3tveD9(Yrqf
z?D~;XR^)`e>_VL?b+{XqYJ9`X{T;d$+ntI0l0AZ8Ne1m}%m6`!&33y3sAP79j!c{%
zwJL~BAUSp_H9v4q;J3Qv8!bK(d%jGLlYYo^3_-GnAxvnU@$405%{mDGeKaFLA8*zC
zyU at yo*bL1N75bfg;txb35WsDi_7sQ|L5RzK_)TbK%nf;K33ZH~os7c6YJimTj%4-o
zM6G?bqYZKIc;C0a!TmeDN)S6}k~ZXlGhNQ?CFM0eefWWn==q<Gs5B_m>hna1<p5$J
zBc(sW4p_#nXPKo{o6LeGw~ifX at G&`n`;>@DH@#HyxJ{*5e2t{QjN*Qkt2u1FheCCl
z-FPx<ePZBe^Vom^e>R`_mCeP(@l3j`xX>{kkK3i+%)=>Or|VT7+0D)*L+>3kuY`HQ
z<K1(Sk*(;k);6@)ogIO@!&n>!^su=tUhmEN!T3rS+lz|DnZULvm9kWNh(wlDoJv9;
zN>M&#<>Gbk>A(C&S=sy+Mh=mXOlSCwjG$QpOHMe9V|RvsvyU*~)|dKL+b9i)W`oR*
z>jIPu0$**YA06AHS>uq(XTP<m*ONP$P!wt=1=C};v_>@p)zdaaTSjMw*hS6)TC+2&
zE|zL^jO?8a2<MlxV+B31Y^X4I82yVz4_@)hCM at E0<J9$50mHs3aoN|HfPb$|r#MTd
zImST?P1PSyTkthHX0ZboI@<4+g(JC^eg^nmn#D8E2ajzvuT}(ihq`C1LvK~Z96EO!
zEjx$dhkpS^lY8{jP76Ohg=f185?ZPq7wmfMS%D}R;t+0s8v?!if<e53 at 2)nm|C%$u
z(!DXKFIPx3W_2Q&x?rm*MK at rm*n+}Ug2Ji!Ne)g_3u@&_^OZAo56Upn-7=V+_ITIv
zvyjlRu+Z!ur<m50E8DDXKR;Rg_Pwypjg4r?2+EaRE`t{LA|OD5*z^)l8P?%yW=H*8
z6iVlw=$O`a3M!(sX28DZ<MCFWrgu at W^A_qMblZX-E1?Pwo`xxv=@;K^4Sjz)-FUv)
z?Xgf?AaFuilkl}QWp4#V<3APA_ at _R`l^oqm#C;>-2eVVk_G_acX?8JfD2k4OJ}y`y
z==~<QMz1|MyZa2)T*}2f+m<oQWG#6cx^-i~6Hw#}X{Ya=)DiJK{ipDJar+o5_Q0?X
z?dKg>ZMV~EW at pn}d(6n9hB#q7MUD!*WW1UudxOH0ARrR$FA$Pmh1dsrV|+pa#DU&!
zWxb?d^`~yTLJ_o#%-ir7lFzIprpj#t6vBEYK~|vZ+nDqOWjwOVeX9LumcLSy=G>z`
z7>{Fj0&=l}Hg<jy{5*R<-2fTHg-DyRmWn*#SqR9t{qhcAJn$~`jir?W$v7x%=gZxm
z^t0(gF%ZGi*w{5U+=vIO)=4x{*SeZyps~GcMF8{iz~1jZiXE*VDR4-8S&4hSjs1?h
zZCtcz&>#5_+oUZ9zk-IdJCun>O-6m%-t4V4djj#0dWqW1YWDrE%J6>gVks)v)-yET
zv78tuN at EuSl(dh~saiagSP<iVwJFZ`E3Jraeb5$f=_;@9*k67sr~aA|sXf4%!CJM`
zX&ga52z7>fKqxJ)sRt=z8P4Wl5IWB0alHzf5t$`V-JuPPe4X{N9E(f+VARwM<A++n
zG65-tnEIL_e{{A%++NKzHNyAypcp8UZ+xZJ8u&4=wr)Siw~c^0DwD+YpaFTo%NmmE
zpHIm|C`ERTh0Ox`II(vI>VV|y8();l)OadUoo&<+z|g=LDV^+2Nme5*h|HAaN^Dqa
zoNl=VJK_Ud{9C76fZhP>1AN~lihe=UWsW<9!`j*ZEBYk4M-!#59Ur5(9UPjGZ*}S;
z7;4WoQoJ~nQ66F+od`@Ni<NH-d?64m2vj={@P4|g@~mLeyYsMmeFEkN%kn;Gm)MNO
zD>_fU6D0jX+#mH}Z!z at kc(d;q0e7YO^wv;3D9*pQ*LRWOy-GSZjWn4OjoIUT`o{*I
zZIw1-W-T3*;;lim+c#d^o8$up)(FY%{X;LX?O&)DT~B;3hI&OTPMVfA;;r26&N8Zw
zw at lBtj)wQu&S+n%V8}cEy=j7B&uCz{UC-X=VagOv1YJ({*^-|~Syw!lx0IB}bIwvG
zw_SMvBYJllM|GL{FZ&e=5t$fVz7JRMJNSQrASgl#XdQIqiELa;LKhfG?F!Y{QRDb>
za4jZD*o17FL#1&xpCEeO5Vbmi>Xwn#O(z-GtVsS8px6L)X>WdpN9ge8?YVVunBS-m
zg!CGJ?wJfZShag|d^9#vea7fx+C at kE(tj4*_5TLUVzIG^B9QE(7R$w_Ob!w2cQ9lV
zO}G(~*vlh4o+hu4kzN;8xb^V!onA;I$i2(8D|^&iz8M~Xk#+ZqrN&R198 at 2;1^b3v
z-$I;<Cro}lfPCP at Scl7svHwdCY%Ht3{>P0+F9hj#B=uMlgL!Yr#$8`$oGwVGZn0l@
zqpm$tZV3cm2}F2P-}WrB&8Ozy7!BTbN`6ruLyi&(V3%y%=l0l8O)8%DBgIDc at D3TD
z&X>F*L|jZb;xUu at iL6L4XT3LmglCvql7IOl!~?e2rwTtBovGYMMYc^a`-Fzbw+}X!
zSv|irbNxig34Y7d`c|WbgYaEb`--_Q&yN4T68Wy^`x};iM6WxcFDzn5(UZV~j^~kp
zK-~HE&rVh1YxHW4oUc!Vf^#;Ww#u~1G4$^jia>xz$DgJre8bBmo*4?ZEDp_(o3rC=
zxs_>Dd#KQinQ-WAt5{hiCpe+lbz*?`z0eMhG-Hjgo$Qo1BjU)87jX#`o_*%I_DOX*
zv5MPasyp~@&U!NlXMdXyr%*E)qN}#R@*n&H5FpVezsmAa1c8CwE~R(rpJ`6Wl`QLV
z7X!~m8SFKql`!%^o7N1I$muI&JjuLgYlMpi5Juy)wW|gQ8=$30ysn!0oD$)UGLN*9
zdHCOqZ>@_*_sG|kMu{t)PvRW=RBwy4LlbL#@v<aRkKf28!UCElokgx6dsM@{Z!!0D
zKJ-KmQdYNM;dY6nm`%k=rN!HTh85m{+g><#yC6$-%cWa@!-IBtCF%!&;du5y+DoXB
zIErQpsz at Y5b!BM+XKZ`b(s5^Kpe<X5h?)GyMo>tF9!%YFYCt$2E_v%s;_aDp;MS+X
zgoSPEc2;m?<Nfrm{CZ}%eap;r&p+0C5}48k?fzQwR8JxdzkWY*3@!B1 at l_FpB=uQ$
zZ>T4}o<iNk%9#jqFG#)4tS~mBqgc6kQb<S!se=#8(egu_%0elw%QY2pUsI`|Z-5?|
zt at 9-`L;7cq{|T(oqUJA_6?vs}4qB{C&OWIkSf(n{#llqJd3AV_Y5rqnb!h3y>k)$w
z0=Pt at CTojZ5H&TAM-fXz6ZMm7Occ5Bo-rAfmx&?Eor*&~>J at Dy&2qvL!KX{gxAp+A
zgWIx)7rtG1aQKf|P1^Y^-BHY+T)$s;hKRI*`!`t7MD)yQQRFD&-6lNlkskw at uQN6r
zMWa;X?41iI^=n)Bg_6i%>;!d}k1%2i;A|de7*zQ+bf=s6Rj7sEPo`B^{@G#0n>|w{
z+%m423rOHHiEM<s8b4u_W=)!k+IXXAbTw?FShC^KpXm!DzCkp$wgNwOZ64iXtH0#N
z_7(`Y;UGSI#R5B{GJeVyuv4jei^K+;ZGk*~=zX=W{6?u^2EX`*aN3ODbPHd(X5QRl
z8Og4g+hF4t%i`f7<^EJ**<rchmG6~1evM+yVQ54G=17eNXXwM at eKeaL2p4nFnZs3S
zEmKc6t|NBZ8RC~;6vgJOnv-?Qjn4PhR%95?xttwrB+?5eg-BQi<f$DV1(ksl$%48R
zrHw?!6Ro*BCP7)Mg_9zWQ$xi&nz3-{9MFM^h=rARA?8cjmqehxD3%k4s~F?zMa8kq
ztL`F8q7hN+)IoU_RcMA#M-VLij6g0#N?PY|{%L}C<3UKxzfM{PbrMF4gttr9k2-A}
zH{KVB{*#1=NXVwCjChE$%pHt~nuuHtiU`QUEvN>~ol_=Ks2B%byDvz_f}qKW%_Nwt
z_k-;wB6OS*!Z^>Qmb4!eG4^jAWnZNRDjI?m>JS*?uRU-Srk3^CG6SoCGQg1Z2Lps2
zJO~gfKq at LaUIi3@0u}ELCQQo>p$y9iAziQsMz$*`3!7G6hI*Kn9On$9b}OmYtoEaJ
z`Wi%-R-&CUP6?|yv$&F2gkP0VLK+5HJvp9A{1;HqN665J$Osl}76%(C!j%IWQ}A}z
z7)xl#uNYnCw@{G<y6{-HF)S at gZ9;*u2&t<!O{J at zjm9Ntzm@!9;L;2OT4poa;qvrb
zqFFj`ZVp-818t6diexk80}^X&tXAt$w%c+Q&Js;}+q!xzHkYG{i>ElTPBto^F2~8_
z72xdUuAHaE_v`fuPnl;#46D<3ZARUeJ}QEm6()lbXmBuC7`9fZ<~fzdX3u(Kh~1Wy
zM1T~ZJ5*_^Si3JwELlK8JrOTKEc`cHFKG!c at s5Nf`42D;CFy2Nf=p-5aH*WA#y>O%
zA$$+zj+o>g`K1g|ua<PRDkin)FPlMgXb at 77oJkbzs0gvQqy|*H$(x(3kcCA+2m%@r
zagsQZdLrdyIJQh*sF)vShc+I=<gL{nq#qk9TBXvk7?JM_$nPcr$e^*%5M;%WGR$OZ
z@?R$LK_Pbm)ZEl^Df=3rP;kQD5Q`4fs<?wt146gnl>)dXAOpfgxS+MWh}iG}7Xb2c
z#{_h)jG$2Cr##aWphvF<4KM7ru)B+wghUs1r0~EXVs~aP_}Mjf{W^4Q8ye0L8RI-v
zk<fgw*e?ezMMW+LArs2kGvbJ-W%3G at a4je_Obba-R%jw3XzYRnObeo>7Jlm-Q#{c1
zm$|vWbU}4h?jkNdAs~G}nO{gOFzv8?e_jZAIh|Fi_t6TIy#A013y@<Nv!ajC_Pblf
zPoHMaRGhG#emoF!WNCwJkKV+;Vts~qW_qR*PybnntDg%p5v^4`6pa^P!d#%C^y><@
zZk#(58k|cMRtx|)ocJ9AxxEOM;qmtib;MS(>bo7%a-mz}ni1B$FU@|EN(zCXyC4XN
zYm7ufGKtP3o{_Lo^Fl@>6$2M35$(4cwgtC2xd*_*whR|}PJyuN at qcfJxXm{VXoLgB
z?(pu$E}3JO0HJ~t#x at g52*tNjN99qSp*~smH8VV*<@dVEDi&*QF(w!Vvv%@?4XBsg
zRa8n)n~6F|e4w_-!Nez{I8#~MH6rdgq6ikB2>0N+(ZY?wB{DD}XisL>EG^KBq9wCF
zq=j8754(UQGdI)<^lAj)K#gN^NLDKCg)D|}OgwcDL9|ck|Ll8nYFEgG_B8GoF6huN
z(%pM~<DvVF0ooy2G<(WY#1SnZYiw~r<-<nx&@GmG(+w|tl33(-8r(X6ie2(>!|CkL
z1v at 2c(4+~!V0a~_A!@u*RRoX~#J0eID$O0#3=2tY3iPdUVxYLuF9a4U&WHi_%T55A
ze0{89f9^wJB*W~{y;e5F_;O$Q0nMc6149U5JZzh-W6%4?O?~`f2bnSs#U>6Gi1-xK
zD76hv3NB`->DVA9iO}qwBcIi)`Lr|7$X<Y1sr#NAZ-Qim at 3Jkp%Sn)-%48~s9(Bu2
z$R<uxUZ#r1J-nNhOd$J@>S2)Ji7xO-<DS34kqR+#J9gS1SNiWcw1`Y~eceC*^d%fE
z{POsxl%$yvemp(Sdwa}GG{hPYHXS`_bQbV_!W6I&N}YM;d_y?9Cfqhyj49)BpBYF?
z)ho!<%h#XxG^7$C at K=LGm_LqnPG`)Q*8ASv{Q7D~RT(X!7?ReZG#>&+?Auj0wX$zI
z6j4g~6s at ZBtNT#%s3m)!DYNLaDd+0ER`Eh~|2^0R6w+|3tnjbrcXS93p8x`=MmTqd
zKHMqZ+;TY+@$<(Y#-=pA-*VFgo)3OhU-|q+(h|b)@(C^%i#4O7{-E--j8eTn&gSK^
z_fdV0E6<F1^%`ZDMS4?FydF;^RIw~j%XvxO3cfp!hcM-;O)4hKEQGU>acHX+q(Fy!
zfR&|%bnUickE}G?rUtXh>&`D#j8MDr{oB;)gh<veG#PinFxT+zvJOIVJR<<;ovlir
zL*oyuVWDun_B8^2pnyd&DF?Ip52#ZPWASB#d<(S>_UXq|ht0$PaNPS at 4EA=X%#K at G
z&DY}KDDh0)tDme`xCt##IYXg?GV5SC0o?~z5#ZgS?v#QmH_e4d&KN&jIg_j3eD`5J
zd)|a|x}nan&`NY%NW at 3v$RhCaxI{CXtKa_ih;Fq-z8<X?#LEdA^Yd?QZmu4oK+J=Z
zA<cxc<E_5$5EW!j0ZiSzrkY0Mgqv=0O!kHAU%A&7>8$6=wfkAV&eziKX3yuT_ou(P
zt$>ciQA<2^x4T6hA^sTgQI<ZYS$9Lj1CppHfqDIU?-kFOzP2Bu@}N_P<MZ&{bGwj?
z476Fd=A^Az`$8jzJRDTwa!m)^PM>W^o1|ADc1*1yp0MIe`!+|yh~R-Ht?RsYomiua
znn at S07p|}r#`BmqePj8<JFGWwEo0!?Se163V67$onV9h$aTKd$RjpZK5<wDm=7FU@
zgGAy!?c6GG&PNEwJtj{>kQu>A*qmW{gW^DbAev?hjXua`E*CxlCQdCsPtwL+7g0ES
z7S0HIUaDtPzjYd~Gx0j at y_(He;FwMO^Za4ZVR4&w!VfGG*K8u>;MY@)$g=5qn3akb
z`u!<2YbPTj;sBu`;^!opSkYpd$#QRI*mKO-x2HTo>j_mHVx@%;4Siwqfq*okaR{rh
zspV4 at MWhR8r@{tj4^8*@VFXs~ob^sRXLp;Gbn1UZaQ&ok>!r69N;bg3cyyru0h?_A
zP6AgathPtqb*ru3`j}(;0<-PUZeKqPx|fxVB$HTa(MyR~<}{!r33Yxn1rLer{2{FL
znnsu1D3ViLOoCA*Ima^Yz-)EDYl at Mh?7+Fmv?!o5NaJfv;gKXuj$nBLDV__v8y6{A
zc9FZO;ek7Zu_cymj3+UPiP*o<Q8W6bG(>xVZ|d?u?||Q^lv5kF3Slm74WR1kg at SXz
zj0}1iz*-*<UPm7fuF=izEUoc8MyBzcFt$mS#~HY*@xBaU2Q`vRW-Q!##eUQb!HKi4
z5e<((9bfWe)>9#iHQa`scFBrE<0ldiL+p}mtNV-nT><c~rq at L>Oa-Wi)3E^mcKv7M
ztiPuju*>|2FEcv}_XFT-sVc#ftrihB7T_Z>Hbz@@KNd!ttIm!cbvi~%Zp>{N%4;kU
zYl5)Nug2t|DL49OUfRk`LGMOV+F27xk($m}2yJR4RpLOjO1J%auUGf=@*}yIuEcZV
z+Lk4YK68Wo-;}82`N^im{Mm{=$@)~jbZBdPtF6rJ?(ndJo+{ECoOg7|QAc at j&y$OV
zC|VK*214z at Y)Uolr1dKp9<;WPMS3X1W$)_O;&HA(^JgU3eNH;hGu9l<@Ex8y?L0fE
zbV-st$@^JSf~cs;za}PtEYWly62c3cc|oP2XYPRE7kg$CA4Fkq)JxGqp at wAAoyov4
zQdQJff{<gUIA0F`1I1Yg4C3<WzI)S_z~VmSscTTz_xe~U>yM03v7RTNG5D>#+q0LZ
z@$?q5@==0JRt5+{GhoqZOeuZ6shphh(Nb=|gG~pseodB(&HR{IXUKGq00Vx?Vdhqm
zXVB~r!a*i at 0%?z)ZY8qMW9%UX(^k~)j-(MP(*ygMRN91K6F-<@uTsa0H>bUY1n0&^
zR>hZ#e!0^JmGGh*e5O0Pg%&tGQuEU~I^ki2qD=4x+_58va#JTQxm at dbFp;Y|gX5;s
z+07Nw?bVUj0%X%)AgI!G2KAx813#>M{psoq8LLC0!A>OnV~`;FAh=5$LLyHwSN-~(
zQD=ol5&Wj>MB`W3o#gL2hnQQq#g2b2O7YHUV}TsM2?jkdhM|$>V|ZgUyw5#Dd#7H5
zxjz(Whz+XTSgJ5kE2P&3>04;nzrgt<tZ8wx=YA#f3S*%db45C;C_-~&Ml;E1(}a9@
zgtDD5ZlRL`(M>+TIk^xB?!r}-oaQr0RmOu!72V%O6+Vz(gZ!18>f&Gg9e00_4Ygi>
zv!*ii4=cb>`5|Gbq66=rBP&#Z-oJ8BmiBD9lAoj6$8z-bVe8`truRtKtCibu<LxeT
z at dUNnyyYJ_;(!2h$zPY(O$k1BrI;zYi2I6(?dG#o$7UgU_*0VS3N!G6x?CBPg6l1Z
z<WA3f7Bl`sHHK5IX=HevarLOASdlTT4bse+!zx!!2GWNg$YtPJ9?+g7iK6YQeQ*Iw
zmrOXKC4&Ws)W$IEB!_%8Dx|d=maJ>6uX2q5#GlC^t_t)%KOt5MaB+?t$w4*#MZsf?
zP%QIf=~Gv{5|9XS2eDo!W{MED$N6=NZcJT`!?(A~asaaty>l5jOfYGYR63xK6nuVt
z!oUWXQ>g-xX}14~B&3`dZ2o=x<RP6%Kr&c(djAE|MX`6PKeos?Hm9%wVX0Is at W|()
z6KYsx_Bzob@~g+{(YNm3vBBTes+KLhYzK@^HVbk~+`JrTK4vTxHhbJfl#UMMy4P<`
z!KL41 at ZC%<$Exg5 at Y`OmEebt^Q~3e;`T1vii*uC8RVh%X#nFfZLJz2pj*<^IbeZ$f
zm*AAqOJ_zq6yjcMexB<|7!NYjS4CO%@DcDsJqr$Hb%rEj-O(KPeFAc7j|cWg(%$0`
z+uC at +zODDVsI~K+*0Hw<bI|C at scwwDXxwiu<)0DskMIjPND<-wySyLh4P6Mc1`iaC
zk9$06FW~sft^V!ECGMaLRfyZiT0}qe0L%(+N@^%Zwzq0-2C9annVis7v<J;yqLXH2
zpfGS-kFANBFYh%f56$au|CsZx3PPhk>p9ocPju<_D&18s{wW;|vzDk!XD08*ozey1
z74Jxbl2#lt{)&6P8hxvV8U4N at Pi+oo%@n8MK$6)q*TTsP3EtC9n_4w&$iSv$ca_8G
zE>&TlL at 8i04ua++T9In^)L~g~!4U at TZMk}H;1d4(dD}aVavFu*F?j6IhfXyCJbQsu
zo0Mxf=bF_6H%G<hfU`%+h&uP$kbwP>JXGA8ZNkIE2h#eTU5~llX0ImvEn?7Phu5LQ
zMz7I9BT7$qkt+b0^a^f^9y(XpBb#2GRS`D+Nvtz>(Y0!`6SnuH+rjF~c(y%0Am(6|
zo3=Q``8FF77Dxo<X(s%yb&{dPd2P%HMVc0VkxA_K{cHZB!f at Gwa9!2<DB}iO!n5pr
z6bpHF4?{cpYo@;k{arrek7rg at ppx?<`cC;X+j}<Ij>)qJ=QO35q at 8|i)ZPnb^$Z>D
zc(|n0pCNo<s$N-1p(r2}Us&ucrJw-6a<SZmAJ()~59N56lSt6rE-5<`%M22MRu<NI
z7%Yj!D3 at _`Mp1%H4V7MpR|-}q*vPH`;-C#PWUUulW>y4+^&z==_w`qT86ydaV&NW(
z at jbFMvlp*FzL>X+mjjN9RL)2gim at XB>L$0XvyekbZKlCEt>iqWakfMHa6T#RJW`}<
z7YRKJQ%cZ%K2l6u6tZtO!67ge|997vOkvBJ!Wv_#fxgKc&vXNqXg#e(^N(T2iHq|D
zAvv>j<%?ffx6yz&#kf=zJjdw==+<%1=7xkt(Ya9?ntb;$isWQS7qaB!TQCp^HK_MA
zm+U#GsSvAv3KbBQ+w}2jOjVw*KAfr<q4|2@(iprBSDV<`pJn*b0W|#176o&Flq56v
zTr*RRQ3oN4ThNqzxKVeJ#dHPM<u)Y4Xx+qGjaBecQa>ZCq-$e{#7TQgOd9J|Z0kb7
zKzh<vRkt9Hq9YCpG(2t>t8G at _OHAJ{TM5aOXG)psG3gLPI}-cas)u+eOkg3TH`zh0
zhK?;2dMa9FVO_4~in~R>O@|&Kznb0k`%#KB7J90U;@KY5vtD4wpSHXD4YxNs7A^Ef
zBg0DrJV}V`DHbs!8<PZ+;84^r!O2;kgsEN?P0b2E4b9gTL`tD9{7Ay4hI!AWlag49
zW7Q%T6Pu;^DRX8UudW})XdilqwJe^!bMcx2&L^wo-lH`y7jyBb+||HZlvjGq;-bqF
ztD?aZD?IF?sS~EWMbRyL4Gi;7)49`Zc-$peAL+mp=|T++9u0B!NQ+kDSqoCEWa3O+
zlE!wLRN@~6X8Wx%FOBy9JQ+fN&GQN@<$6O~?$7!}vB!C{#g)>~L_TV)%L|=wnRFN;
z at t0K{T#|FZvK^}x8C#w<sEq at kHOs>=Mwx<NGZN3IfD|f>k;0#m)6=-fwSRQm+soXm
zN4~xYt*&Mr?H#W3A)ct*qTjPR`@Kg$Bj3|I#}x_l{C_eAqRkV*-1P;+ at vjL)M-_Hn
zICpMR(qScuqEQlH%HXr})`9Igtyb5$j{AXmMMT0uk;hI(eA3}yGfE=2UEpU<+PVY+
z4~C#lEQQjTm0OTkzXYQ~6>mao8=%>0y~yjxCKJMpWAS+Gf@%JY0l1X2$vFb*G}E3e
zL~k>84UHBgR*gwyQuqcZuRuwpHrZo|-By#>pv6);Eq;eHh@#h at YQW)RG-gA@>Z(Pd
zY{^wICr%cv%B6<&l!Z|W#Z8lGIvn)f7NFXouTf_vmAR62j2=Q``d}PX+wv<##OF-O
zs3xb3raZkjABer~$kCCRZyfVn3M_slu&^}bDfh~)obv2%OdJMmWob82l6z%=9{`-4
z+Ots6k at 6!YmTj$g8n(04r|OTwiqc5Sx6GX=)=vDHJkoS90bUBJDs3+zCV2A|Y_Dno
zCnt*IhYkGv-yHT4<jew|e at +odw!?@>NU~cX*GmooxefeX8AR#I`#f?qe~ENvA`q5F
zC5UbePzg|wWLK<-*iw8j at 6B*6&G$;l&y8J&WTH>AF5Yb;Hq{~)lkFt|*++#<zHXQU
z(nUr6J(pfWGE<~c1Zah^XtiCeJ?0x!g%FZ87YTa<*y>WwDZKo;|HQYMmNe;1#ydB=
zgT`+%R at uo&NK8WSVLFIND^~MG$mO$r;p+SZ8NaVHnYuTMKtt)BOf$E31Ce2v3rUP1
zo24%Q9x2*}@Y9lA8#u>;U|q-9JPAj-EneoJwmv{#_83YtRAe($2=S~+35&_kd-DOX
zQOK>XqcKsH*O=Lad<Ky8ILRkn<ZCACqv?I<?t<CbS_1K+J|SE>-Qrv%RV^)5SNN+*
zn1^MU7+5JLh>i}+9gB?Sh3<Cr>y at 2Fj?l*3-4VhHY8YGdI-~>G95hrj&!);A&XlTO
z%yJG+cjE4*+#5*NiMW1-p1`_{xx<;%(@c0Z>ZgICGF8clw1kZfj&0$`gfF;0MO>Vr
zYE@@s>F?tZuqXAFN{?Y)FIVsH;}fGi7!D3}jlv9uh(@TZIbU_yq+O3E_|&I{+<ngA
zIira%;K=hjIE>hh+q+8BDj!`Hy}jDOrA{0=it2E!q&6EdVlNW22bz>%miN=G(~ftU
z7|=W?xU6o5EsfM<E;6}{6(;^RT45<yY+I33yGYkO2Vj8(8%A&HLvi$?9{E}Q at _xN|
zA9p6|=EC*JA`a(q13dTUz?BsG2J3OWf$$N|KkvKMwk2ujIhyqL2Kcb2J^7PXU+JdP
z;!iCA<B}3?uV~lv#RX+DA8gvS^Lx5=yM)wn-{SC}ssq6xV at HI^;)35H=PSi$=GANH
z0>94P!~}b1gVvuu4UCjPbvIJw&lxpTgzxl;2TrvNmof(F8t|AHduX~>r!%%@vKI%f
zP<T*>Sg>DL>~*0pwy1YH9E_7#2G{%|blL2UKbteF`2dXo3LIXso5 at ZPuGO@Psqeos
z$iLVx(*9zFQWb{a at sGK>t)U?)y+-Y_8&X%R5?}BXnk3jZ$Rht*caB$9CP9Bvs$9RK
zXTpI1R)ytTf=#%)JWk!1eMqCYn(^dR1nhZMhAd9$f*ajW%(vKPq$b1Bex at zk;-qm%
zVLEM3B3;XIbM at -b3ji9UyIt!UohGD76aS4ZkoFoJz|2u~*^K0ijvC0WztP9<B_UL?
z8#Rt&jlA3;#-;;L8mQM&5<Vr94|uewim%ALH;$ZbblIHWPtDr7o<4C(R3a#}^u3M5
zEzVz?=pX7)^3UfzhFoMkoaa-4cPDA$Ez1%n|HM97Dzd!<Jpdp{F|kXr2)^JKiv!77
z*TC!^S&aC41B>u#ya$-VhF6$p&_)!=obo0<Zg9>~&Th{BjAN~Xy<;jT!-6m$dm>z?
zM{IUEUKQwShhF6LAWr=P2V+I24Zf*p94)lXbV2`>R5K)B-LJSSyRVc|Xg*ETwoS*r
z(L4;)zA~VZ5nf~kC4GZr!-mN?L70PJE|gp*1sSpk`=_1#O<Z#5cywXzxGh^d-xNG=
z!jDkw#L at 3MY4RZZ#KcRxCp<`TJRY9ka<6Sea&f}NTJ}tBd}-xtBhLWT&>7fitWCqd
z7c<@MC_<VE0x%R^Moy|<9_p>kMP3BxnF9o%`LsNZP=6^&73&wMPf|hCGq*i!2?rb`
z(^6LGKs(guT)H^h at 6&okLK3h<bo9Hk7XiMJjOE^;mqUFpkkiw#;RiCJqTtyuNcPQl
zGG!H*St!(T2xPAYry_BZoZ0zo)+i`!R9c*TbS!pbA>}P*f#z-t2gy at Tg7x041j;fK
zxUZt_Jz;HC<zUR2Yb7yr$Ce$BDyfL-qM8n{x%@4Z+eE&)01x=ja(#JBn=^4g3Xepp
zZmi7C19!h30ArcCz}o_tPy?BkKtD<fvS~zl7^+z^skP7puvIx?UHc`wei_kTP0&Wr
zqkw{g8<cF=EJqO>@=aXDw8=iP3MRbXG^uGe5_X|9!(ibqthmLHzEDq%;<)u{iJfZ(
zKk+HaUBb|)&1OdCe6z8dh?<s)gvwBn6X~eT469 at cIVc5CQkKLhZ}wIO;^Cs=<%5h>
zEW6xfQz%JKJ=u(g9g<q|Fq5_+$5DUZ5mT`yOkj)A^5<cGAg$c6Ws`ZjEopvtI^}GA
z+O|_=$w7A;&F~T*kB6 at 0kL6=|YjLBl4NnEB8?gu&bTbZ|Yazgnaa|bN6+PUp+$vNx
zKC!+Qy_2%Tx55zxOdIDk<?|dE)zDzA)MD{K&hjfAJ+q35`!(I<NTwiz`~A^#@D&E*
zufzD$KIC)mUn|ZnF0beCPsmu9TzsN~v5E1|(kQQ^?VykM3%}h541~FxeMkiSP=bCi
zqQTE?(Q~f><f+Upl=Sf{aEFcynFl5fSUG^fGU59jI`E3Q-jhuSJ$2^P4RZ>DWxV5$
z<93xM(G4SBj}<ho|8V3fr-s0OxhtZauZ_5G0Aqbs*%+7AVoT4TvFAhKSo(tP{>I4G
zsnGGzce{JNAePGz1bcP)Ksrb8c|uLD>+xN+jn!Aueoqj-3w}&JW5CVD00#f%d=r;b
z3BZ(b|MGd;_kCWRU;*&whGF}<$k#vdAt$z2w}+-uuz8&ZO8(<<VoCl~dwX7u6^_&c
z1!qzHhJ*9!`)Y~+je&+kw2n#$6}w)?rns at 8V$H_Qy{_oRxnt*!-!hc)%1=eIfI#}4
z^sSsyXu?%-lU@(KRRTdeu{gTGt%vfiaX9+ruI?b0M)Ylu^8+Nc|4FM3HqHzGyTLM5
zbN_*%@`+Fpj#io-#d6sIkqeB1^i&d6ctq;uzWa^zNSjE~)4Ntend~FJpxb8np*!Jv
zUJdq)P%`#i?^&E2JXRVxE2*fORJ=nS5YBZ9f_uD|gzd^LgYNlft`!@#oHM<(UNI+_
z3yyMi-86DC(5p|t>g7Q9)U)Gwp75mmK+%sP)x~Xefo+>EX!v~`SC6{Asq-+N&#Us2
zAWVI^<1~0w9?(qC;v}(eG?;fVTx)Rc_E~n%EASpwQW7E{kg5K(%e-a+a+ig~mS8yX
zN-9%fHWGYjp4i~JJbTPiJZrd<U0(Lp at khgSJ9tf`x<GHtl^wN?)#huwm|oPLHX+i@
z9apMcft!PJfz*aalmFa1*@e-O|2?m;B>~65bj{4#j3!WGo!m at oN^@&TJe)){xSHiL
zM_%AOX~9<f;^FB&%66lQUPFns(QR9^d{Cc79x^kfb<rVEn_f>EpTHvUCLR5*Z{Ri5
z?Md2E9e^-giRa|BF=qLXDkWlZGMNZ8H7wwG<(A?0jPI4{l`9tTnxCL72|wB$+#fdc
zT1$!`5&yw2|Ib8E%<WU;Z>EDhOZnvuNALHUu+r^P8vyZ3t^GGLMRr%h{a5%^!sh-Q
z%un(UOq~V72#L|0O#@dW#0XQxo!kl*O;~u*x(Ci^?0 at g76W(faUc%4_ucYQwq{?s6
z=u;ItPyUUsDnXFNqN)XULt%3zY4|pGl|@WK(z4{>{7fCoC1DJ<QOz6lO%A8Sz(&};
zXz{Catv~wA;TCG-t(c?_RXMA+jXD|l?V4j(Ot$wf0LJsd`Sj<WSKX$L*$sqWhtQu{
zmW))zhgPI&DzdJvSKWFz%eOu5vDrMlqOE~SZ&-Z3j5I#FT56GT57&3gt+{{#3$5d3
zF#Wm&bkojhOGpK_%a0|wt*OA~4X37Omnx6 at R{-1kQ%^@TnlXMw7M`+Vhwa%-abbj8
zBTv&a74wTJyF41Aw(RO0rYF|w$`6hWLO&T3^MoL|-$0J`04?)~i=*C;r};Nc^VIuN
zSDmfS2#;5eV2u+DI(eUuU^w+rX>*~TfVQ<<ilz!(k6M>iZ_nY$S=)9mpS3}lC*VSA
zsXNU9=4#qp<=f_><?e6dVG4NBgfF&oXA|vNYF9lo1u=yErd4#KHM~*o?+(<%@`X&l
zRL*PwDx{q}6yYgXrx`=m500npQA=@;9KAd=9P<IayI)&AJ2#OgH`<=3N}Md|cHXg@
zeG(LwkYq{}oDf&On~(zin*Mgra6H8ER@)v+%6|gv(jFG<85Q!X+umBn|I9mv>tLtO
ziv9csT>O&ia?BJOjD0R}#HwtVDFiwDc$-sKujP{u1)M)9zxnaMjgeH&^amShHx?9_
zS<-pgYCl*2yToC>2>OM7!if4r>%PtpPa6b9KY)1nd;>5D<n4jH*<{A#-R|*x8o0i<
ztL=t9Spst<LD@%~&B1)*Mr^Y-OvH#izrA_|IpahzeIN!0ujBAPlW#&!uTg!DT5eb#
zU$?ou_iwhPzu#YT+xdLylRWFLAmHVE_XiYbt%sYBI}Bpya&ZQt_ePAf8 at w^#-Fh5{
z{4MS|w<xtd6%<_BWg$p1nFVv)u-Cdc6BFx0lNAh_3t#-_Y3}eC#(i!vwlE_;%h0yi
zJIip5{QrnZF1PcYg#Q_fZRe`ihMSnST;m?)D9tla+HA{F9Q0hwx}1L;ny)Ej?H(DD
z7t;Sc(92NNP0c=;KYVGp5 at y?~+|OIi!tQazoRXF2<TB#oD`M^ejEne$r~Ixwzrra+
zDE|Iu_&usJ!r^Ig!ul^ZV)zd?MgP}S7+RODq1;SfaC>_ at gWIWNL&=7LORHiyEz17T
zm7;LREbmhB<SzJD#Xv`_oIy_s^wwZS$22codWS+7qbm at nf@fv;x3o?Dd&tx?X-Uuw
zmKYB?`vUFtXCa;G_X%W*)!>N$3ePnZAontBwQL$&!Oq~=o7J)rS9?1Mq3#yFT6IoS
zV!@lawbcL<YP;W{BiZWIb^d*e-qvLflKWgM)_IdeV&RX%^QCzVQ-hah<ySaAh_EI~
z$;N2}RFXY}RpBW=VXkCi$s`d<sU*m|z`$0S6Eah>o7JwsVE6HR7|)h$?5S2v$mciK
z9nmgjj_rz=FoTq#neqkBlPs)nOGOdV(?7qBa&De_X+h|9>^l2FEc`R80GFGh^3k{s
z-?-=su1VGTf#ROjqIMb+2SCHd+*I)(N>p9qTx0xh(f7Q<QpGS4(Immc#_CtV->sg}
znrmN|)NEe_G at MmU<D*j7_#%2_D%y|cRqb;c!_2EYdUesRdH&}YiF2pJR`#tem`~I6
zD_FY at o{`p<;<O>Ea^>UErfSI<ZCs^}WqQ4M%83NV7XWe(eH+O2dfc&?$TfW>x7sxO
zj!R;Iz}xUgx>vdU80DU2_#b;hveT_A|M at AZjOBZ6JGGwCIQgWWXJ&IHQUlX3=%jFx
z5 at +jGa$R<58$?zsMfMi~#>Q}}%-~!&1b+|O?5Bs_uB<DAwB}%ZUFMs3R!(^YQ;BYZ
z?+S6yt@=-gTW0T at J}wV}Y8-Sj7d}Uj0mDc0tvaVD+Fku(50BYYfY9Lx0VF)EzY(H1
zxC>l9&T?u%A{Ul|$j?^C at p3|G?3PHibapw>2VVLMHpM5&-&qQm+#;n5*Q0%RrLhO5
zZiU-ZKv-Q&xka!o=3=0{mnIg%XRZgX89pbZ^p6nnaoyN1LEnPJuVq!bAm*qYZH;?V
zR{i#`(h5PM2inINAusr)!(Y?Gy?@;O?UTPqbYStpCLCNNCoK_tbeii=*-cFo8bU-I
zCKJZY`j)B^)i-QE(wY`UVMc2^?wF<mVKBxzpd-<XOY*lTK)OpdN*=N692KcQhuOPV
z{1WevvvB96Pw+B3cG}IY#YFUoNp=Qs2I)nks@$L2!OQEJmceH$gpQwUlMW}o?uAun
z>FeNA6f~c&wqS&Mb71YYDA-X12A<N^4TdT9h?Z+rha4 at cAOI%2bo4CtC|943=gRtC
zw~NaR-M$-OTRq<p9hX{ftYxQgcc|t2XJeK=8_FxS|NhM;l4}XxuRKpgV!gk&j2oLD
zFqktHcB}|RF283mrg%gE7|NiB;#lza04`I2!O|kb@<ZFW+m}x7$3J$43RLWEwlwvs
zAhh>22Orp&gxfBY`})3}|9N<cs05}k+VC#Q^UjnZ6)Q;b@>1U}#rGMsPun at WIq>kH
z;#w82`1^$WTcvC=CYdy??@SO}2~3Rcd!N<AZhf(QA at A~`+%RNIKi=N$inP;h;5^X)
zR<|CvM_ZI5M&Z7uJU_7%u&_`PXSt9!_PnbsfBBNpTW?)z#;Ov3sM7oEzW`Q1slTSv
zZR2Sn2T+M){$)j%<G{rhj3Ut!z!D_4Q#p&*?BXNt- at E65nfulQdFBj|34h<P!K))W
z*!Qn}`(~0;AW-kA-4F1u-b{m<4G0QeM7U!SF4KjP<@{3s8kF#~sDHBzg4;MX7Se3&
z*o{YzPTY9(`{f%}Y?*k^=8eLN4abgcptB}WdZzzBW|D>9wSQpG-ur2}QdhrXAK*aP
zp=_mVgH_IUtRY2|WW3GJ0dP6l{j7n5gxP(qP6OK^{nn(eT?;&2n-}MH+Bjj{rcOB}
zs3N?*WeYeUc?0$-d7C!Ti}W*C-qlmsrAwjbtTwmPl}($jbjs7fa at uhNd2b_=Fqzrt
z%i6$ne-IES?D0 at y;;aUXixrtoZo6bV)4}bm^vdZ~fp?9+xitu8b9ZR**ESqJyyO1$
zuo~8ET)mnQsO~a)4XoX;X3faXV*|bb>+j!j=**cj8y+&=zy5O1mCHA6TE4O;*-+h8
zPcE!@X!GWWR`@*nE at Rh2KYv(1;l1 at UO%H8g^n-7(Zb}uIJb}$3Bx47`&Zt7tDB}fN
z?8Q1xCgQ=5unDq9B-gfZ)4k+=mCEZ=t%36S?bWJn*6!k!cRCNIKUZmd2UPP_D)F at i
zG<AM#x2KBK%3Q at jq{-XZrm#hsS<4|Niz4MGqYC2oXqCAb+2SVHrZjwSdTr0V!f}fS
zZeI)27N|r)wGgJR+ct3VxPtk+={3 at q7wMU83%4#j<E_n0OUvWMGx)L%+TvKX+uw#y
zDr at boa4If4(1w#)6Lxz_h|`clf_sGhtDybeAF;R`iC{AFkF0z9ZLnQ@>yZVWdJo-t
z>VaJg45sXiwe;$H at 6am`r{_i+=Iy)x)amxUI`dT*=|@WB^<r_WV+Y66*T?Ik64M`f
z_Y%Dd_Dk<R(kwAjHy#ScA3WBonBj$OK^lv6U^CZjKF%d1vl#{KPz<TbqRU+hZj(l`
z6YcK3Fo66DeGc#3d6 at 3;spyWqyElG?e}dPT|8W2Q8*-v+ubFZ-4jAyT%MczLE6B02
zD93!kl}T;IiCFG9>^TdRHW66#oe6fAQLqP;D>Yl9${INf$C1rsu%$NG3{V1MtLGOk
z96V?d9YkNJ4{!33tndYIt$XC{>JC5q_6=IJ=-I`KAOQ+t{3f68{jfmLPvn_}&o5f^
zJPjvl88to4*73X6T|^p<?%au-Scm|hUr6pF=@}37G~34SeE8zUhu4no+!^^W5$O`4
zv}1NKOK=UX$*2n)$iksM!49)iu;c3QreKS%{mZcfD}>xO(qVnegoKAXb}UOs{OYgA
z_J2e_6&AM}(Q?kj;j1C(sfBaaXUABhY|d%Zujd%!oYNQ1jUEUSn?GF9v1LNy+K!#b
z3tP{Ba`+4lJyyf_ZGZ2~iLb%m&Mw}uWnR&ml3{=8J~b<Q_<inzqM|9;&UWxAtJ4W|
zmGnH~?pAi|Besero1okfYt-Q2&X%%CvI~_Qjn*CsGIpbC_LYV?^6e;*l>lf`b@?_q
zMIyUP?@c?`v7|@tf;L4X=mJ=~JG)}np%-dG_`K$eN;f2>rXSNivT@~%RMScF3XtfW
z#KcwNm2-3Ny}0Wy7iQi2CH<aO(-#K4l)iPOJT1P at RlW}t0bG6EJCxrHEyn@;{jztO
z(DL~gx*i_*taq*Notx0(rPbowfwfKCIBA|($nk6((y{xP%`Wq;A(!37X;GHx+5Fq?
zP5Z<TZ#E-YzV~2QYk*Uyfo}r~eTP7+>Am;Iy}i^r;5WjmjnxZI0Z)CW7F2KC7 at _Gk
z^Zvbi at 1NOA!;XpJ+SV0GUn2eTmD7q$I6#<CL<+10`yF~YZ;@Fia-;k86W(}3==VmO
zOqJnwI<*au6d-EiESPcNkTB!EiW$7|4+s;Wr*9$Rw?~mPudrQDj2Z?f!-Jj44|eu0
z&i1{_I{-G)x{cnK$MHqJcgZ=iY~vX46_8w7$DWG+#`^Yu#jhcOL+h!(MT`~H;_|q4
z*b!m(DCZNq%V9+I7ny at e<~Dl at UpcOO%!HR`Zd$c+%l(<Nm+jts{}@ME^VBD$$5$*|
zw>2$0EB$`xGjRUa5c!FX;uY`X!Y9v<UbAn}lb3}VAi#ZU-az9o5+D3i8u}^y_I%#~
z>%F!$uRf;p*ZpBAlpYYaVISQR>t5L!;y?J0J#{j6nknof7ONNzb%sEMhT)cm5e`G!
zsaX+u2YMH{qg at 9w(rYFR8oIytq!`!!KAwV at T)IbeL7Qork$L<3++%X@&q$xeB4Ai-
zKBn;mVmt;>X)9N at YqxS`Dt*NX at f$mJ+_1b|`xW&1Ft`d4_7yAIw_mZsLSJ=2{HD&G
zHmqpZeigkwl*t`f3h at TgIv!tS0y6Tm%S^z;=}`IfaJ*SIYr)R(LgWw0^u`Ww#?dQ~
z7Ej;W3C84qC4p%NeJc*@m|jT$=T7=n64}JlgY*R+27_lm>U~3a`XW65l~BghC+UU#
zsMT%dp(XTS^c1=CSl7cb|0v}&?VjwLFeoEUN+htp%V;vQrC at A@D!Won8IzPl<ut)B
zc}QXZ`a4&>++<*VUIMtC^<Vik%Ev at U5KJWS-GEq}6_2j#*`op>_E`bFqm32aE7x`H
zT#=tbfR>V<yr-Jk+K#{HTy?ijsmT%Q@#DvgAFqx`vUciPeeRy|ZS3j34`Z at S(OJ>>
zGiAl_ukn0Fe0ujsx^-Wh7O7H2rmgMX?UC;3 at fketdxl<u96Ar?L>S$#j2r*z*d&r#
zs+9$Id7nPzZb8<Trjn$wuZ|!0irW}L=Lxf7GGg!-on<m*v9;OPkWLjyCpNp(gRACh
zxYgVa?u;@%Dn!7NO0temY48@;C at c>Aixd5Ce8V at 3atMwKWtjwGc7ch%MQ~ONjB=iU
zZ@@F)=g}D%QG=eWy1>ah8l_e|0}-3}b{-s_;7*8l#|wqu=T~YITuJe+1d{z+Mr)Gj
zic4 at M@~v&BvJ>2KiSC53-c<k at 39k4=S3<<_C%xPG)Z_G#ljO3uuJaeNtkvr+dacEv
zPu0pH;9hb at 5;Zzqs#a&w>r!>H3Jy#iB8obz&S24LQ}ueSN~W7f<m%KKgE2*?wd!=b
z$S6p!-We8#Nen4Ey+x<f3Orv+2FE+&@mFS~5_x`Lydxfe|Btx$0F0{G8prS4yZ7Gh
zy|--N&8BR!o83+Cq(BlNkN_c&Ktk_D=|w=QAfiT;B4VZ36;bqAo+9>!Sf9`K)Tg4@
zzUPzd at SnN6n?~_H{e9m*$!_ks)6Y3`=A4-`GZ~JUn#!?enRATB9CJk9{UZ5!z;D74
zO-=IHV3KmAp-1#$Jj{;0K?dO8KN(W=R at QB|fsuYvO7VnFR06IuDh<SbwUPfODWTKj
zLUs1wH!2hP22dwo2x&4Vq{@XtF1{M474pgM_x<2&O5?ySM1N|Bh$K;;0!`;2eTqKC
z-4x;_GPt>SB$1I+c4}CK4)qYE>ElH&CmKPptOn={M9~-0w^5iktUwkN#Rr;0K)Rr{
zb-~$H3$QQS0w6d at -f;FiYH(xs`;E1fdN7Esq)+YIwSRk8?2+rQzV+6tcano{*uH<)
zZ)c-X>g%;_ZEItfFI>HPVGe00V}C<tKRALacsb(ZC{aNSC&pv`P3o4MyGH!6hcy!i
z)u3Na;ZNG;_!4^51Y|ehbyAHgf*FhBD;;Gg5OXG(k|AG8vGGNPu2cY0(;CcHqe7d}
z;7 at JH(8!HuOMSW at 0KYq5#80sy)4|wX3S>Zh`0(Y25AQF`s2^FMQSuSF84j_8^CK2(
z#B9j{*M;*6!wRXVq-GdzSnUwMRH(FgQ`3g{{X^1Hy%v=~>K{^zf at +FAGDWyBKSJ@~
zW#Br{uzcon^amfvs7-4~O>IakjljdSAwO(3hx5ZG6T;1Kgqsf#Zmfi#2ocR#5_+Oq
zERwNu;pL7jW<6dd($KLl4C;^t04W&UY!0PErh%gfprO&rU_Ws!LRJ)SB8X}Uom%H6
zK at e#rTp(qYgj#O$fv+>VBNA|}pd~kRuONL(N{ckBMkDr2jqG=~Giie~d>+Hr2+gVQ
zI_uMl3<c at x7Q>VY&JC7njS<*Him4f1s02K(ram)G$@@y*zIg2w at QLm@x%vA*X6XWI
zn^J4d90qJ}&01=6tTHWz-;`uJv#l~X*O?=;>axi at +db1O9TPf!{H9J{Gg!EtclY)1
z<&`-(fQo|UK(co5%sL0=nXGf?=(F at YgamQ)Fk&p8Q;!StIEhsQL_0t%jJ*$)NnT1Y
zRf4DDEY-_fN^UcXH*sMpOFo%DDVjGaH*az at GO1l|mdVX>xkV<m$jPy1-y0#ieTT<q
z)%ct0O%|g}m)?--L%gIgn5;vZQ?*u)=h{2Ot-R7fzpTFEmx?kT_4M4%+}zH&Qz8){
zm78QTlU#=KGyirB0FZ|e<!;c(ES at 2aBW^&Pq_TKN*8BbSBfS<i;-eczG!F4t<mv|a
z!M^;wbt~pAS-W=0JbZ{0{{rLYRALFS`TuD2#3;sY+C6z-x1LarmpcSGnacjZFvf!0
zVhdh{Unvzu<&}#{i;Ge%<PW4JwWz3UQDu3NQVIY0zcvbYA31U2RaR_YQc=FF!me{s
zBuTk+_KIcY6-(@57Fh$mV{{$j)BkrPGmXVF{`|@DGL}ld6HEPnHKM)L&;U;j9g6yA
za=gK3>fxKI2#~0->UT#S-l^DX^2P3NyDv7@@YanV-yN7Uhjw0Mm_c at Na!kn~O7T4C
ze>s`}JMi=!OvuCk;eY|Oc(^bCH#c68<bO9Tz}aXh0fzXfz^(m)I at FGjQ9B$&CK?}$
z;_ at FE?;*9bXAD5U(Zm>l2L~PJkP$>fDC*r5-d7O`dmWtmPEy*U;Z05YG#*LnIZ3}?
zI%xU08Cf&tn>wXg9inQ_)ZBwSzGhGw)9zki7S^!E;DsEph^f!uec`=1efSO;fQRGq
z+_mT)_6B<DF!KmNzcp*B- at nSV^qkz9?Z_&Hsd|en>>x|Wz at K6~iqq>skIc?QZTjzI
zF(~*?WbA(_Jh?hmpt^iTpX6qbwJK%L!7N^<My_*)BMPsx=bRRz1li={-#yKE_lHYw
zYV(hHr-||enpPdF6C48tV<`IMo$y=ubzajj-<|E+zlq^Lx|kb)g&KY38?~8_yad+V
zPI30)qXb|U&~Fg>xCewvs|iMxA?{EZIZLq4xcY-AhZJWJ_k7?yf}QaNV}|s<ztGG`
z=6>_WQqSLDQ6UrCxA^(t|9BmIK#|2$pQz4<zcve*nn_RGGs8{40Z$LpSAp<b4Z|c5
zei?hOoIL%&kvErTz^mmSd>(t8Ja)?sp2Ks^u*_p at c;n;yt2mn$j7E5Q6XAuAPlOc!
z4Z&ikSpkpgA`4 at mrO2SJip+-;36RJhPoIn#*;oP6HCH!F$gbFwSSPugwBk96&yoDA
zM)^eJz8*TY41~CKow(BGpfH{_PH#jJc9O}(HyqB*{l*=cZ#XqcLM<+&29H#I*RFfR
zSN-E8s_}KEiR%32$;pQQDGv#n8>o?%!go+XpXKCUwy)6qVtL^!Q^gEW3gCfR46_>4
zQ}CM?D)aw2LTsk02hAQXePJrH-YHN{0A%aFjrvz1x7SV!;v9e#s3Z$G6K>VvC}x5v
zgA^>pm)IK{6Al08h(uB$j~Dg08&-l<%?~@WwAV~TEYj at HZJMUtH{3wI3LI_A;XT8J
z*J)Gbi`pMyQ$|ctZ7LJK^u at LkiHwocZ+`+KTh>!=G|1nVz^`^8-f>R4?4I%x33cKm
zm{R*ZoU`W2V`0JjRoC6=v!>kl8b~=iSJ%?W%@ZSe$1Fm4)+O*9O58nwJ5Pe4NZ(5f
z{UqgVow?zSmA2Po-!rjS?|ObDee#=e+52bA{CGs|Z=c1kB=3La{kN89;J(qz1Be5(
z8YB{PqEr|7*Pz(5;@GQm5Y-nnNn$2G`8Vli?E8diT|<9}xVk;z`=rI5WB(Dkxi!ZK
zrA`4F?B*i_+_I`F62;!zp*V&ESX~KovuIpLKy<<zR;XPsO*PEdrWB?A+A4q3QTxMW
zs__lX9sl#x6vMwNLY|_O4)eR!XAX#GTrT*jh}~G!@aBBEmUWM4*?U)$I2K_ppK*oF
zcr227bOd0{g=YH0SF7^Y-JxUN$<2SOQ;f<Hz&klE8p?xTy)-EQn?^A+_kPby(^T-m
zT`!9%!O4p2#(99(RJM5im4C at hV?N5F1k|S4_31}O$xobp)!a^XXyd*- at 1BDULOCHt
zdTTn;3Wx!_cHMDMl>q7fp(;*~;@MoB)C{2kORYr^_9XF=mrJf8UuGqiTeD>JK~N^y
zLB7IBEc>%%yn|p&95UaEq4c}{@+iC?UI*`g^ohHuwL_Zk1estk2;9+Jx0cQ;+10UT
z$qRQZ47Du3>U8_*8=gA`Up at Ok!<HvbjUD>zid$}qy?#yk{9X4$YxeyU+V7h<@xJy6
z_h+XLs=sSzQ`647>IbF9_gS3#AM%mJc|;){-qnqTD0jkZNI_1mVV})%o;35`vUjxb
z=(qX5#cs{uU74~*PnYseCerifp!AlwA8347Mts8^Nu$7a4c?m()G5f(qxhz~&n)Fx
zi#~5Pe4O{=NnQIG`fb)5DXH4LqurK0vZ~r|JbUWKjJwwAN_nRcUoSovpdUneV*y3$
z6mcVotD3?cuW1q_W8{O>Q<1mt_cjlYeb`lDeD`45m|^tWFY<mny~}?aZ>5&X=ZOxS
z{a{lre;2#d!K>iC6`vD){M`RAxc+)>77Z0bBV7-lGoZkSCpm3l3?L229%g3n;MspF
z|2b<Y)qOkvM;?UVc8(rRjiuk_omIZAxoxwwfV at 7|@|x at Z74lNvC$H_^jq`u_+;5bF
zevk8RKm)r at 5sHMgDw6gpR0@|O;&mL$ps9n`e5SU<9;9-?e#tG1==YfJlG7AC2S<&j
z=u>A;!aW at z`>=qk?_u<nh4Pam^K&O$B%JsLSGU4>e<}kSNS=>|_mVjzu#oh7Gz{EA
zp6#G%@Q;1G&9NKditXH89d{#Pkc0B_#eG|KiYV5t6jA)e<;i`s2n9&AhNIZS79k#>
z54j<eUPMugmVza8CJjHP{qz-AkgKjh|A7sD3~ad2*9*z5Y$4nd-N37W at 9=m)aTUA+
z{VOZn#uS2Oxm(IW3XcbWTMz1EU2ww|urR*whaQINGzhPydRXkIig_uF1xx`*J_WJ3
z(J&S~k;Oe>hgG~ojq~-^;7tz>&RZlBCXd{8WO%M#)X_oO@<u#-=UU2=pK(=2zJ*$Q
z>%${*?PN!X$PgWV<hDKmlmd)(7Gy`OIOyI)G}4|s;^BL_XjRed0_Ru&8y_B#XCo6?
zb9;x at q5AJe^=A-;)P#vB!1oyetRQi_<gfz8`Pk?}loLDHM5z$B{Q}=Hi1$ulRO4kl
zd=((}8j=C5*eXK!%E>S&&}Id6ZRF|kx<Eh&*QW>4Gb%GcMny(?W(NED>%yf=g|C0U
za{9EXQ&)cex at hTA5rU>pn>u~v?1c*>3l~xkWn`vjRAhq8icFLO%*NTYbvL%*|Kz_`
zPMeMr!iLvHOO}XU2M?g6)26LF^#;!9jRiMn!qs4P=FPa at h!gv>4x=_Yk)9YKDu{Yy
z#V#VQB5ok=AnwJpR>2g2dcKCTW159YtR=AAP)D*(mp6>mN?N00H6f%E2LRBiIJZ%x
z-09-`qdZhtrwRp2 at OZ+wxrB%vNg2R?K$M5;`q;r-r_o_o4kUU|cL;m26td$}H8c!`
zazSaxBH+a*d&HGP8lgU%!<|@xk6EA at R)YpJyMpq8E%}!EiG2EQcpI&3JSNYar<)tK
z-Y2KvTfDuBbfA1u`(m4Uo?IQXp4nGiZyuRW?NVM(57W7Jh#!jVzB1w>v)Vq7snmkY
zLNwj^kc^^PN_)4uNlkXrtCiG3u=@mQZX;Kqj<~?@B5CGXgX6C>|8OIphNl*0F{8=R
zZEZCFOKo5poWYMBEn-@%KuRC3UZ2atlQgYBy{ifhB(!98wh$gy9Oje2$j{V~aF2|-
zTk at QQhHq>Jy6uzUFADg5s=B^HDFQ{b41PVum^Wzu6*Jx$Dxve>OLmQqHh~Od3Ts}Q
zT0qktT0-)V3ylzr<5P!GNek^Xse$)fme9Z<p&n%6?euz&B)D9B_#odr at j;;GTPC=K
zO=%3$H_=$Ro3JrgBc2x$DM+WlJ-7D?bZkJB0B=;~Wf`3|YS-A2GT}xYRO5|mu=3-j
zqDZk;11;hf${WS&D=g(j3Ppr``_N-At~vxwv7gdCBa6S$7j>vzzD1x5nup|N(p#GD
zz4OgCkLMc<6)$f5$=&_Mf%cIlhOY}dJjEs9mpA_4%?*IB!A-^qRtQ>;)(@>2vcok4
zo^u_}4TktP+f5U$71rKxeU&I$)B)Ou!g1wg5#C;~;~Ez{H^X^2gAvStw={s;%Iv1T
zZ8Q_vL?tnbo0YYPivc%3!(BcSjxX9FJwOV;A8$1^4vdWbQ2L4?+cmf_Fl9{L+^khM
zd9tKiV!}U)g*V4FW$)Fb<{Et=y=S&T-7(x#nIV}4ANx~C>BWf;*}KDt4uq5V5d{t;
zc;k-GIjB#Edk!w^MbV$Y53fbkcK4pp%&MA6;qk4_L+320sUBRL+TJ{5R`wM)jp&~K
z2eCx{g&a}XI!UUWX;lV88Nsnge at T_9C(0yahU5%}`agv$x(8Pz8W$WynA0e!5QY1Q
zQ{xQV!+(Zlj(qWj`u-(L_P{l8`yXsR)d<gl&G7QJZQI)6x<A)j`t}zKClN-+`-_I@
zSq<*PBA7G&MC-|8;IHsGGF!i8|D9dIsa193!j0p`HF}3tLCGIQ#_Mf!0lToHbG}qI
zKSf!Zn^!6^z!85AE4 at 4*KpYSy24kNgkn~>hs5FUL>|PYb9a;ViW2}!>Rz~y7%Wo{I
za*S%F*m1d+ZP<F*l~*0u;i>Pw{g3vP$IC7+Exo)9NGEHh?P1opU_#r%+q<s5N8BCz
zlZ?~LHw at C9GP%<*?Hb at z+5ZfK>?cWh=2{4Eg`Pjk5RV08kCMjNvOn2As;7Nw!b{{6
zMD&k0>%<>y%c(!v28Pr9R?)W*a>9sOk%weiV~@Uvlsh|8_b88(MKI;^A~g>vHM)dK
z7m3nJ9jC-ODLf5|H%x*Mr?9Cxbq&2v=xRAp$`97(+Xr_rd*txI1p2sBGI^Rm`)T-#
z>3VH8)p7?pLFQW_y;uK2_mV^8+^2XHO~1hB4KsFrPQFWm&2}sGf<EPC`mXUb4L at 2K
zphwcTj9d{V;b{#W7J!LHy0sY|xk&|h<^XJlU+cV+^Z7E6ubXRvA4^K$5qYWwwAxZu
zr;73 at c>4mQ0N$os0NnR6 at BqC!D{Bowus!?nRD>Hzx<b^eTZu_n1G1^`G$9?|Ac!~3
zMRXd35oDWa?2#x|@;y#`xQ5E(<R%MQqzof#1}VD^8d(BJCk-La2<f~4?=eBz6jE5j
zPR5C}X&M<mI9x$(GJ!2WO at MQ5eT0I;z8V1v|FX#wT4Krvdf_^1#89Qi7~A-xfOmbl
z&Jt`3H%Q1UZoGV=aZ;-E>?^~Dh_+ZL(>6if7Vz&4%oP-K*i|&0(mLR?Ozi8j>BesQ
zJ-FkZ*BChTn>w)mu3N*P?T5A3QZrtqv?&z-O!_9R82){W41kr&B`Z=sqTtV)1AFQV
zbCzXmzbdFO{F?p){Kr}9+p)~*`zbloHffqyJT{dFTm-iUmc$!g0}G&@P>y)0otTdO
z+*RB;3(n-eN;!=TKbtBN#`i<nC??Km2#@w~6d4Xq%x2sfL=ikCi11Ch?RcM>lVmj>
z3K{d>ID=^@*2!v|UN=7G4^MJLsGZ=3(^KHO+unfVzia~=561otChj?y1*ZO^6?W}A
z3YY!8l^hH5!}|Q;vrO<z{SKq4eyla)Ch9ZgB6B)<>n6?2&fVSb0`)Z%)j-|Bh<B6C
z4P=Y~)oT6Sx&sWe0d59q4D-uyF9Q%dZ+PG&9R1HRVB!7`z=3Z@#*}dGyQ9IF+n)nh
zeLMo*aWj}TXkt3`vXjbzUU5}3gsbFl8*T8;Pwl!jKrrTKDjR;SF^YgvVcwbzzim at 9
z at IwL9^xai7{Dz*Ao}JjIvX<KqtwY*)l+!b?XCbmV&%-RTO7Y<?sM9g{99R!Nfi4oV
zB8Ef5kk{!x5A)BEk8GbXYX809<N(BhPxg<Ru>BDvXVa)<$F5q%P<uD*S+#oahP at QC
z>Z)VQ$ynj}nEm+`@}*~Z6zMq+FMs1b^Ah>Wlkg|=b9~v;qn7Rl2M>bXOGiB|<3BfH
z0L};!WD_L)8)~zj^Mwr}*1+c=amOI3qImxeWp_|H`1py;_+jz5e_25gKae-w2v+NX
zN-XEW(_-+1c<cHs8h$6g9y-NM;MaM}mVdgU)E at 8|$Pqj5xWPXtlYVd8t>hOwc#{}7
z-?x=NMi1_$Tvz@!wPeL7E0)hM%zUq~V#Ll7BkB$WIeFiO=+REU!rk<nl33xoz-6-_
zaSI&zy-J;8O7oko8Wnmn`?;sso%D;peZX6Nb~X9WWKeG;Q>>hR<+sr7ytQcj>@5%9
zDjdB;iN8}5 at Mv%Oy~U9;FI2zodCB^LdoEBva`y#Zc8imh=6uQe*1MV*LJa)_HUC2`
z0+9=~=)!M*r=4K(g<ekhoyIc*+TMmNsVV<`>)rncbdFv3M|gslav`35>;f+@^z^&T
z!=8t~MZ_{<)&Bto|9`?PeDTsU;(r0(@Rv)99W<VwPlKz8Yl#~!PKAqMTk(Iy_dM5y
zFc7=`B6#^<?I9PG>KA$f*ItMY&HrI)inzebv+wtj!}weTz^vicD@>d>NU-OEN~H^^
zmFP(s&LLe+2an_>9RZ}saP?4KkAq1sJqLHe<#5+?FMvtVcMm88qe0<455i~fybJ#I
ze(G9Bq1{&Ka2BT63+VTrhCAU>xaatB&;izisZYn$cf;rIxd#;7eHfG+Is~77rM%E?
zFDx&z*^>L~`_?V;-_*{Pe98nlk^i=;vEtG~X9E7Os{Ns at DDj-wJDIG%abVqpeZ6zf
zs~?%4f-7LNqY7LAaot@#<=Fbu5Zh;$D#_LBjOSo3U2OO5iKoKS->JgQy=05uPqKzM
zf$!nO*6l(1-QRpCP7ukxq=_&#9_q$1$oAMiYBBykfqr_<D4^;SX9!U7GXO5|{#d{F
z4T(Mf@%Za6 at E*rs&-qX=^qbtg45mwj=T<OY4~<L<FZO?mAiG?_bFm6!P}~9D1%h|J
zz7Ilm#}ELdb+LEPeg!{=<U{S`&EYT7$cercH~YzP;jq!Sb5nUtGWgeq*zx!peY^~O
z2lK#u!EFQbqHi0J0YH`!V4kMm$2z0{u->RQs*CDa0f_(Cssum>Sl~r}fQrBeA3gq9
z=H|3VpF0ZbLH*I=N7FZ^4|2k{;DZl<l1Jf>4?X~YJPL})m0<X>=Z~dtPJisgWAHvO
z^w^1G8JpAR!G$0U?|l%Sc@&gB^bmaNQ6R_kI)3h3W)l4Yve|~?oh<#`3RTF8z^ipm
zjnm=6$GlNA%eiZDXC7g9!(@l#cK;ztE8<RGUN^<L$1;@MTjTLn`%<gD?i$}`e7BdP
zSoQ#XsaY-=WdWg4OzpZ^m%&Y7k<n0GIcP;$`SR*PMJ6Md1+VQKziu!|jRHB=QDQ~&
zt_8eP-Wo6Z^WpE`egqUC$@b9-c^Me8yp$Q8?PJN4SA_Ud$MTIUDl1oPT<(wxf>*=>
zLPz#!iYi?WA1;$CMrS)Y-!2K_n-uyKl0X6?j~GJ`+<^`F=rWH0aLfCsnNon4vG8eW
zQ4zAZSni-Z2eL~`0KV{3he(A82Q*#~<<6Ezk*$C`8$!pTWV&Jy#ghOhveW|J*)D-9
zdocMT&<-(;HH_O`OfrRO)x14Z#(F20|NLY5Bv0$q-Jrxbga=A?k2AKKh5&8sGaI>)
z+-#2>w~>v!*sj=a9yt;|Jvv*Py8nLuvSyI$1VG-jNO1oxsoKDJxwMquSi&!nipf;?
zdO_i3wMVE at zXR}w-j&NQS7ZYR{3u&d&d<H8Mr3i-QAcVoD=Yw6<htu)`Q-8IV`G4u
zd`cRtAfJ%N2EiNiTgkdB%jKRZnB)WS>9AW~eq|jwri|0=SDgEndK>W#MQ8~>cefa_
zN&B5hmpqV;LY(8)#7~){xkKg at UX{YDz^BjkJ!Fo?C)6SSNcynG-B!WKN{#E^Vw00P
z0 at yvE6j8m3l$oD{Uoj+*A0pE!WaEKjH2K&1`g(XdPxAJl+_`Oa9oZrt`4hv!E}$eO
z at SS>Equ2YjI=^10;oW9U6P>-T+)|q5C~GtX^xCYFMP=X-_ngi^r6-g*X2S45*coy;
z;6o}3z$@h7GS%koG_TfbP<kb$p}=LE<wdq4=WG^ah%)ttOuatSpwAR>W9<^upB~`w
z!XjIZa0>tre^7fYK%E8vUP;0uRutHQRtg;0w*)xx%4Y$H>Ov+EiZX5RTlg)|#O{Ts
z(SJ2{?Wx?<XMmc_3f$c`{?G&p$Yb at WS?z}(zdJhsfa+yi-aFw?_Z3%k=bWYryPvJA
z<G!hX`3=7A=PQd#s;gI4QIYN!t5#N5mlRi0c?z>Euxl5nfKTkg_xqr}a1W}pmb)dm
zpMHh=IO at e-B~Upjy8?YEr;2>@=-x>1g&|Hw+RBw5H`*JnzV-RV|KOc&TQw4Xx*5RF
znpd^a8%7GecQg#oE7+P}FzmsaX(bi#@0H-j*z(vN;2oHXKV(bX-wo*`3_#^exc$)m
zeaST;Z6vDZvD}%59v5W=(NI$IBm at unMR06ZaBMKAB|9+o7_;-!yJ4y~O!_k^8p=jL
z|F7*#Sz*Jd(R=RL+cLT#kN0fnm|$>B=h&<)n6Vo?<@xfa8#ey(;H~Sf2HE5<l3lDb
zZTI25O-*|b?@qJD^(VZSZXG8hQ;-&Xo|JTRtQsdPW?dx8Ssm+ at 0cU`d>WNPPgiAQl
zp7 at l2PzoYBt4n-RfCjIFBXPg}s<WFmpS@~(_m%6rw~<JKruu4p-Ws2;mTawAP^1_)
zqQ*7JRns_LRye<=)VJO{UAk(eWU6m%YDvw4LixCnHBK&AUbvv9EOotSx@^@-=~VAp
zKY4o7*)3a8=5W&{DD~EInIeH&>y0hrGMXV>y-G5zC!?Nn3KAKiVCgjPI)B-KV2mdj
zV9uRp-1Of#zeOdo8q9>9 at DOQ477-@$i4vlc7>4h`Arj|EGJob6NxIK9RNnK3B7BG>
z9;dj2B%K~M&drpD^CqR at J8wO#gFA#0uc<UEQj`{p!Ulet?Kh6SX13egvbav3Rk$n&
z3Oo}jeF0e<2<B&Y&ocUFk4p8r=CrG`<aNVj1t3^eSYY7!CgleMEO12Y>Z0NLx)zF5
zX*6Dq+M`8=0tG-$Dn$*`f`(yDaCnrL<I4deoq-R?kS~YI9}Sy^fd)+ at EAY|#94X4u
zO2y^HS)N?=gkpP>f8`+6th#H4 at K?0oR4rUHd1KT#U+BpymQS}APe@&_8nm)vBY(&>
zqqYdEZ<@Bi7~MD}zdjtVMn(%hWzp|NHSu$2ERGTQDBkKYGxk=!Uac7%_6fRAwQ9|s
zlv&^l4^}E{rd!7{Iadh<-Z(vJ?o5EU5Z at aS9W#k4qLJ8)tirv-9mE5~W5hGWi^M6c
zi}vS#7W=|5TI^Wt=DdjU#Tj14i-{0-1^2|2gZQOwy2KqCs>CxM4(KSis;tvQdPGsr
zr3+qX((dcoLfx~Kn)bxKbg>tXF78{7>yU7A#yQ8!;9{UO9E9F;|G7G`375wxGJaGp
zwHjHJ`1_Ng)vH30;G~Y7Qt&Awy|H7G!5Gb1Rb5Atc{w?=0@=Y}c2+Pzl9{2bP<D1O
zlQPJdp;ap)xklrZNwJ53V^K-*<&FdM7uv+m+>Ky!)Gki>^e}Mb7nGJ2<~t63mLjr8
zHgAkLMYaX=NxvyGkR1wSnwpwNwiXsUTy{GRuNTmEhtp9!<NA&%22*ZidDT!xkQWN&
zfjnAJSnPB-PZbvmXq&^;GP22-8ORA`W*VERu*#*0Z*9}KRPTlJri^TE=JE1c#*c5w
z<MGncnnzB_yVL9QdOg0>TC3S?G at 8xU-2A*;tJz{STF`S|J`lIGh4UsgHD{#Lw19l@
zsiz(!3rR9pZOSa3bQ!q3qd3E)jxt5}P3-8HcwaFaRU0!(Iu>2lSrRa+b4jv(|EQLh
zQTuIvzuaI^sx|7$($Y%wPiaZZrRnsH=8==~!sGXNQhgq;*LSM2498OETMT8D8nrsp
zZ{Is+?AS4T?U*lFjxRk(cM}n6!h)>Exx`9*HycoM#Efv_A;+V^p286~qr<zi at Eh**
zBaSryUU7?`;1r3k)@d+rA>A#0ZZ75&d=>}C4vaI-u1-$Q;M+11*Rw~MenXYJk2zWl
zs8_ww^pJoGxdU17!_;(sR0ICbXp1Py54`Y$EPq;vl4b^jUih!!R@<1#B>BjJk?Gmq
z+re$#)J(eRuA_jQJjSMJF{<-&^)^QkNXml+Rc!{FZFG4_utEYt4x27FPn|RE at u^cD
zpElz!9h05_juAJH9es22sGCQ(+)S>!^-h^{($<61&9b?#)OUb}k(Uo1GJkbR^US(Y
z<f!O at xf1L2gICUQ%kBiT$NQT}a at iu1S!7U*&ED`c06%ZY9xE|Yix_gzGLmdgZM8Zl
zf7qGf99%DsmIpMBO`9A*omCMPHw<y4cYZk8x$)H}rcQn0)hDM+8Q!$-o;{;S at 407R
z6KCVc&y_xjG$IM1!RJ(g5YX7YPC|$GEfH)`LpmK)L^VK;P&c!b<KK7l1(Zn_n at Z=!
zmaFS?47!LRq;ezCiaMr7<DyUg78VHTgS*ZSRS0-{o~exOB4-!GBq)&UxQOZ1MEs6U
z-p`5s at FATBs6#xB4tT>vILGM<0Nxu?O>Em(u$Ju}E+scCg4fDf`dtkh`?Pw5v^v(L
zVaZXF>cNU?tov?9?Qzj(kX)=HCK9uVP24W8xO;3utf_kDsgjyh!a%})A)IfBJsg*W
z3CR_YuG042DHIRIH?s80qF=JOu<I42C^^;Q(dzYD5BKdgr_ at btAK6?v$mMjp29>sC
z6ap1I-35<yA+1 at Jo824IFnMBQ_J-WT>Tq!yQfHA`8_3VAD2fKmPN(^h(ScG9&dpB0
zih~2;lK%0^sXTwUpsc(g>_`90%L>9|om}d4x+?}XH%)A7Y93VTQwxuFok2fcM+F-0
zecMFtz0;|QrEB!&w9G=BLt$n>uh-<2<7AclRAQ72B~V?KTY(c)<R)UGGPszC9)r$(
z#w?;=BJ at b(o<z(eR^z>1@!f+=eAiw4ECSqT-AQbohiQk(tzx}YKa$0VndCHMKU$%<
zZWU73s00X-R6sDwk-Vv>uyk=|n#qur=_ at ZPDK5$|cswRxOE-Aj#`MZaNl{5!y3t_J
z1^gu?ORK^Dr?!mS5^_{JJZ^VcQCo9+ON+y5b>RQw3(#AStE_zN=yCa>EuZ9rSJxD8
z8MoPN8{2|lsI+ShdX>weF&MPuX?-x$Uy@%@IX~NPG8%G=$2~N at EGJsr+B$AjX|B;=
z%*ZS%EGa9 at 3ufpIq~UHD%=-l1Z+F#<XdOFdY)g4 at s@pA9Dr9cAx434+xRx>FN0*g(
z++r|n{FW!-i7piTL4^dvu_NxB{ED)|OusLfzoszA_4R6al3B$3Oq3JjiP?$$k3HzR
z7<zkp#)W%@?xHk{vwsrp at wex9iKKo&>8y?(4ECbiS&=`nxqaLyv)f`%_Kyp64#$ld
zCa2SsQ5h*N?nAnw(uXnn)rgCcR<$>`d~mRD$Eb{Obmy&7N|QM3hw$dABEQ=$Rx4%k
z?s0zSkgbT6;l5B789=-_9uECk{?uSWSw%r`rB2tcXXp{_5&6nF8*3swN#BL&66E|k
zE-aTWi2VfN!1-A1M+sg|rf;B-IS+~XIZ4#R<^APHKZv)|;u|P7&cjO|WVZL02>m4q
zYP;mzXY}i+?E#`5pQ>>_3-)g at HqMgls$+q6pq%K72%fL1FB1*ytJN?Mu1_?1J<N|)
z6|F2P%<S#<C52c*==GUC9&xZgOZ4x3ho)_w1}c*ceq!2|?rxMxW*=@q5bpK}%Jw6h
z{xx_j{T-_$$_RX{NaP|N at ZzLTSgk6W^>PO4?~tGTE at y7!!B6v0ORpOD;3ZkXS>?@6
zL3kNC?y9H2t9hS}g!ypurMO{(SPb^IZbnVd{}fKRG;55k_E~GDZJz$prwHj!Zf<=E
zJ->BH_CWlx8u3RC#~*lwT7glb)m at THq8MWe7SH}s7Zgdon4)gS7%0qWDUIW#vbk~M
z<c3}-I~OD8 at C+~!Oq~8}MP7a&-tx5KaCJY3ej9$-b&XK%D^2!-3b)hAK^!_N+#10(
zUBGbn3@`!SJpJr2y*`j^cA8lqhqz`Vh?}by06B9D at 7YAVoeK2JT(nojF~aRy at J0o|
z>%IslB->A~`LL_$(zR{s`Y>797cNy<@@9;pOQ8^>`0xz47w)|z3NfvLoX+7rkL(6K
zX)!=U>)&d`^HR`{<%>Zdj{o)9#->5l4yV&mJ*cU%FYr)BUO{W3%t%#VfcL!9Q(oJM
zQP5ah?s3K;gdPkn&>LF&pa27X$VGrYb^o23U!rc8tO3GL3~c2+!W*2x&j4N?K<Z1@
zfm++>bXhDi^kcEOoPB}owigwLatubJAtzK^)EA&0lF7{}4p*wr<+PgRG6Y$jE?=t4
zkz$tLZZu~_3QKCMN(v)c*i6MxRV at c`bNW-jR=OV5-9!vVdf;W;j{kUd9Oo+qx{I-S
zggYK;VDFEf&*#oW6z>4tpL|0jGa6<1-e?Eji;Y`>Fp$b#%@-8a49Ty^44RBaQ!u*}
zLjpc}yS=D1JN`1WB7aCtkzlnn)oHh33 at A)CJ4(xNdG6InWiqKoFGAm>GsRg_RbSw+
z$&|)8&O9cRVj+)bG+Hx*r5HD*!EBT*kB8rxve7$)z0zQ&6}?+5lcbnD7`a|!ibRGo
zLt#$0-iBY<^j0Iz(T44vk)VZX=Pe~D!j8t1HqH+tq;Ou6I|ASWNbHMi-k(ZM$-25o
zOQW+7ev=%gFj-u61F_r(ilzLaWW1%_ACoQpQQgCyUL$5t4(S|%G1B{ypzDt&#PiQW
zu$4K8_!{GWMO>pkPc`m?Bd`7Uq`2#n{rb|O)W2A<E^;1vI4G=_Fz`7>d;#=vP(&wY
z$wx0L7ta3cqLiV+Db}KJ4|e+CDyP_?w^%NKIRu4^tSPH5AyH(Ppb8ov-vnPUQeGqK
z0U~^chMU#sfSXp(ZhCR|%O8FSw}JW8i`@~pjeKYGr25C|!T2?c;kw0Z at Hx*6 at geUX
zT25#<kBbEM!qKo(ql;h0kwQ8Xl<|h`nuL*0&8{0?W+~3xmsxBn8(+8P!*vrIDx6i|
z<tk at I!$dHD`vd-l!FKN&OLn$pjn_W7!T-SauI^*?J8KKo(Gw at 4>cZNc^~W&JXu*}t
zOj=E}5KD*~Q4PHDW9}}l_NIWIp*$WG0R3VF`|%pSwkv+esm^^-6#y}i6 at UvFWPPGj
zubf(NkJ(R=0*OKAGN-v*E~7 at L6if65r^WAd7f)z$OSMWBMe!(!SlckN*ljS&RAPz2
zWOLTkAkn213nU7PcBIZ~1Y5ouI!O_m_;$BMqt?qc5;;wag))W8pirwd5(&#lgjSHH
z)S1N^iGqj2WE!nnr_e}bGzyc6z?H8sd<kEt)Y<e}iAW|jXj~SL%WBi<5M=ODv_!`8
z^;(rmRp~Iu^d_sv;<niI2BFBRx0+oxr&T9buoA6tR--L-$ZJakG%J$G6-tRtDUq`R
zh7pMs3MFchnS2<BNo5M9Orw-a1RNw);xMTI)36!XnL)gV2?H at 7&u=P&y=cR}9lbaO
zG$yE<<qq7s$asu*`g00Q4ob{j=g~j7k1)}w5p~^IT)6s_!a3LWkS&(!kt_J<M<Mt0
zK2m_3l|F0u2k at HdUBiT|RBG1x><xB@*(jIB0dGa~WRpiEk%&B|i7gdgyH9IIL2{$n
zfg*AMD;(A}9nAS)_^kBbzPMm9V4hSWmC02~xePsU&q@`31~a=$M(s#1mP+|rxxtxY
zF>2%ziBzX?q&OXM$RRMQG;)o~C~!#R8lxq};Y at L8bW%wiavJ1XzEoPAzGGC$%8Qi3
z^)KQnW+rbaF@{*odBlZSEOnjsUZQYhkoHG&Nm6zvJBkeS?TVN at y;2=7oD=}}fW9-J
zr-1?Rz}di8PQ6X;RZJTC6}+smGiXsu1Y)Hm#aL70w3*C8u}Yj`a2Jnk(26Cfe^Dx-
zm7mr!q1f$AGrRP9iCC%3K^+nSI)g+&GG4>|3u2FIWCFQ_VI at MnLZ|V|WI_Z;`9_6K
z4VYw at Or_LvVPcw<%9U!hlsELXA*r^;PN!PND8)Lv)8sLuE+Y~ej8;dA(QmTqWd=tj
z>R4JmpOvv9%4?8`q*|TL=5W|;L8(k6(dunFrID5jn2~%bU$0WAWeTx?&!Fz3)G8HH
zrAWx9WBCFJ3X^MPa<PP_l at h5ERYt790D<p)uO)tFcJjVLvT-rdMLa~jNkEVRazIV;
zw5~qg<NRr;WZ%Hg62Os}>wFA*QEi1gri8fEJc3Sn>ClUJR`g3=GL-HOym02)f`qn(
z)T#_lT+;~!B5mNTPoGNS{M<Aa=5CL=N8IEj%O`6^EGrTihPPH^WVn3}l~O79nF9W-
z%=9#ePoiW3+eU+NpSEty<69vKpp{>EW$UN#*3sJnj8cWh<Sc*4o9ggOP&&6c+n-g@
zI93P0F^j|kA%%W~0<q{n1A;+~Mxhd*AC*F*`Og5b-hI7SE0T*CiNvJ#qzq26ne;MA
z9B@~(c3PD>)@gnMoF?1+<A%NmuenZ%*xx*LbcH*`qc)+KXlSsZbR58l<YI6wNO^DQ
zIDhPK at 6n7vpcM!hI{84p$CpT1MrcFg$(-tG_c**prCcsgaXA8Bi&9YN-qJEcqDT?H
z_L|r&5shfs;w}{Ebpfy6Vw1|{3bVr<c4Qz8$E1?m1n^BB&1YF2AJGwgcyWm3a}Zh3
z59IZW8e7BirD&|uYLp7O6a{dQM$18DZa<Li7qwMZ#PS%vRH&Eg>}HceB^QgOT9wU=
zj2I4b2&D?XUIBl6=3jy49TirqOe%DU<tl^8Y_pqfDy>u;hwM6uL8vClv6nRmK1u6`
zCj7vSi|0OL#?xnr*~DsM2X_*~MdzjZ=^mPk%`3;dY$h3BQ$gR#ME_=bCzzA|#_{Fq
zs1{!zhJU at Do*OD~CS2L1iXw$VkxH$fbM3~ZizaqvWoKtjZd<x|^ZMm+$ecbSFE1~A
z+03n1?Y?Q-`UP|IF*JM2)?Iry`zu{ashKzP;RC}NxyvDl_){uN<Vvk0>{ZH#=zT$h
zj>=$^q)=sYy45DIw^)lb9jnkR%vV^fAj&X$lUZ+6szjksc1P#si#BduG;dmaP6FDx
zVR2>g&RH8a?cTF>?V{O*1qHeD=WN+@%T5H%%`YfWmN#bw(i|yr*(=|J?R<4^er2gY
zW%+^$Hm%7j$f)v}qhg1 at DA(ZOYh+pWpv6WrJeyV_&dvzCJYu0Tl3$*~?SV+rNk*87
zbYzoH<5tQrUEDnc)2R~jNX1PybCSm$NfOa@$tea^U*d8H;P#`v_jhbaaG=D_(7?}E
zsa&>fHUB49M%vW03|Cbsnj72*{G`BM0(VHI**2F-1-~pdnzULG`q64l#=byalBn4o
z?LThnPw)P;?S&BC!J^t>GFi;(2xeruY+3;Tw>s1+mD&N;3ItFTV|Bx7*YX&x&6SxE
zv|la~Yjj3aiq&M)X~d#9WKH29Qj?(Ul}i_OOqkrC=$!+|%Rx!fbMs1Q6ijEz=z~NC
zL8!t}Z%7w$lT=6-(m1&f*7MbzZi681<5a3#Ue+1C&Q;pEV+XK?4=r18U32G6<8}gm
zRhG?`RRw?DIqs&;=Ia(LI~0bW?%2^;O1|Tx-+w_O1ZseE!!^T>8x`pa<8k!V1=@jC
zB!1z2JlC*}_>jrs{hK>!#er<64D1_g2YtphpumGJjb8R)3G@=t74HL}{s$aAI~p8i
z`J4%vrsW5~J+P62H^VC4U9gH_6Q(7b4M%{xso0P7VQMN!hbIMmYy+wcf`jlQax46s
zLaCYo-vSwYHf|fT2Z1BD0N7P3W$f=f%h}KHoYRBoYdQTrF@!iyyhr>qzBhtX^Fq2F
zZi@>WWMSzdy)2r1%~DJXr$*>F)mvwe^DovBL0m)R{(1~DERrzCr;ysDjOsDh6233-
zU+&Tzbx$AQ5~G^oiK=)KB+TN~!nbCiY6d{OVycK2By$M`lO2lf at r}W70DuSGT4j#L
zLy|mWs#WdKnOt&ZmSXS_k4&m!Xdx}80pl{IMlBK`rUZZ at d4SSTAodY0aAyP3q9iv^
zUMG(RLMN?_7zAmGj5?!QfyN2eB2l$%Y#Yy0(>$$`p#lqXSie;zW@(C_?UV2`gV<Lt
zqSHqNlzDjoX`duZvaHPPlgjjpYypoHvOHlc0N at Z1O94p<7$62z3 at V)YQ3Veugd!d(
zrkR<mWz-0dOeE*?#C*|W@|$Qjn=;NV1R$_-th3N%HrZ&gan7+ew?<Kto+4kL&xnM6
zpS8fK>>2}4np3r|(XO=RmMc|Ti|URj?U9Pno?&Bh$w%`l=U5}pSQw<TPV~;cJ}485
z7*R^DF$5=7jT7@#JnW{HGtxt)Xoaj;>#- at tfpC_qB*R8#mzoqF1w+dPp_wwFPB%m*
z64C}_c2 at 8l!?Lxf1frWC$<K<GR_2FC*G4iyr6L5!s?##E^Ce=1Tp-Zs1oS+mI#8A?
zPzr at gg@~Dg_wu9>2bk&fOeB at _h&o~}x0`Acu@&`rEk{tS?_%!3iZ4s6IH#E2d8Wj9
zb}UE#5O*9{nBl}Uh$oYA92^0T0AR6~S90*g|AX<=3C>}-Fb#K!CLM{&Kw|keoI|rw
z&$}kIOis-W%*?WQx(3 at jM!3hoU$0=KgUp6;%StO8uAJf<GYZ^R$zNVh_eGdb#uWcL
ztNU at gl~02Pmm+2Kw-JXrknW=n<rsckFrs9%%++*7vEHFxFt}uhuRSx6vnefT7!u6f
zn^oL>-w4V6mbqCeX*#$sdprxyP~Majn;bqbrRDsBjs-xhv>5|mjdv^`6EI404h3@!
zmJc>qtZN^7?fRMSf4b*bWMH9H`p at v3vLf#omjFzV at 452Uk)&UuRm#1<Tb-665s4Xh
z+l=WeS<C#bE2h`AzrKF?_pMX at I>cBSu&Sxd+;CTi&xQB99U*R_U!w0NG=zzhdm&;3
zvQH9zB>`k5VtlIO1c-nVAR|?7fd6Qq#pEM6BC<dm0zLXo&nh3&d$$^PxyCa+UfRv4
zS+YQ9jYMj-r}?Z<ChA^&qh!a8lC?lUt~eT-5?iMLPmq!_GWHC(EyBdk&Le4sEH+yr
zm&qkUsQ_t^0-;nYlPaVFset9tLSe=#vREX{1E7>ImJ4bAce<KL)T}Qc8Jhg}&K;7S
zJHS$9Y;A1nQF1vDsAE5YJfWB@?miN+%M>ItFZLTlel0-^&*KYF5pt<QA{AnYk&7g9
zsr+YY>>08g<0}lhm~Fgb?oJvTcdGgz#McCom_9~k8v4_43`~c;tVTyg?PwtJ0y{>O
z9mTV2>@JLuVi2F&N|@_dOzK!J7JVy^Vrk)<novmdrjTZ-gneVIC{eTJ;XSr}k8Rtw
zZQHhO+txj{ZQHi(IbU8Td6UeWNh-T*SEqNXcmL_sUbR+3OAH?G_qJ!bh=bE*&9&z>
zXw#wKAJeG(KVXJahke)SToE%AOA;xvcOH1M(1gB at n4__e1o?i(D(g#a8;(oQ$<UPW
zEM1(g*By?1i%7S0TwXv$SWYCsUM at 90y7{u at arjHPGq6uQG*?V%PJi|lJ`>WEXD#Ty
z>_>+BG2Il!XfKNWGJ$k(Qtqi-Kbd-G^m^%*Dw&2vAyC40%NjNRCP1ivn_F8G87!g1
zQEhRXh8_;%By_}3jvgIGiyB%cE7Ye^IT{)`Z1xX2VZW&j;)O{XDU`#T-+B2fg}IA~
zM<Bcj*O{96`<aXab+KcX&v}oO20PeG(XQ1g)*oCQgrTM4MN3Clf1%c;pw}&n42Jhi
z5n>F6H^2vu5)-fwjC7JFlfhFZfzuHQ;0S5Ou%XpD#{8K;C%2{ABccEYa+c1)GTU at R
zq{`=gMsFGVd%g^SRxLyj<+9KPX^J<H;quU#8Q3e>K88_8YF at 5jkSr!F5TgI;6^{%k
zK`xy#R1 at nBu+t;&n%3wix_b?XNeJdAqlWcyNv94)u~F`R`v}gcJ1x2f4(bptU0~Ek
zb>#H`?&g6DTEQBdf6QHRBmWiQ`N;QG_)yl0+k&wfy`C=N2Jg4gC*shlvAGO|@s(9C
z<t^+Xr_B4VO7}`T?~nP&Lzzf{;uEYuVfgl`<L5PPHS%QklU7-|6`+PVGo=5$SeDEU
z-y(xS5VKHdhVS}rpmmE>@e0946`yspf9>uyUHP1k3k$u2X8X_l%8r<;pt2^Ojlr>E
ze$=`+a%mSMuNncWsGN>+`O3g3)AsSb%VTqSVG#Jyu`!La5OL=?VEh!p1H^MrfTXFG
zA;PH+W#W at FP+nU{dP!(ptsR8C$nzR!vb0e`aq?Y0TfXzj|7oomdJ#6FHKse4W}x8*
zsMjIW`<4gqT=KS`B at L=@qZeuu4QQ-Z--+^1i-8^Gq_8fw^fj?W+}8Tg5&ph5Fls;A
zuJY*%=%W)#SU~V8YlH%vTVM`NAZ^|wZ`Mc5wzThPcI-s83<)S_adhtO`i3G#h3Yt^
zvXN}=b;G~059Kf`7a^`ft&jJHfm&2eYp!Z}D<xVT?^i<2>_{}kxsp^~-E*YfbeU|v
z0;Y|i__+<8<psR)qv1I5eEKt<U|#GW9qMI_MuR5h8m8^X_YphCL0cNk6oRKfgTEj#
z+%ox#W{qTn4j0;-vEA6ZJtXZj*@mx=E1NQmH3H)Nf=?~;3C)=4t$CblRYh0F`F~ho
zayi-N4HO=t1u~T=e)cjiY82I$Y!oV5+N!+DCyE$j)bEGPf<=mx;w_5%_Uj=*B)&3C
zQ(erQ9jfV}!ki+Q#vW^Ef2d1(nk^mxsZ%7Fc;3Kn-%?*FpVmY`!<|IC6pR>JxFKe2
z=n`^}!&lFh(iq6Xb!x at iZVr+7l#EzRHaZmqXJ0Q3{eHUB^5RN_>5?~b!a1(9EWP4&
z_gA()%t~*!*}dfRwGsA(^<b?2fc44S!EXb815FsZ_Bq_5IXpr@|5o2f%MNzott3RS
zQ=$NKqNu|~0c0K6Zm4qsyvGmN#Y8U&*;t<u&Hy&b!4hPPkj5sAFd@~iLBNBv=Xjb3
zc|Wc at ZpPl~tW6CzM&C?FL3jKQk?eIeloWPU5>^7N?RZ+-ZP$vBtbn~EM89efFanSg
zov*3WJ&>$I9cOym^gb}Q^BA{6%SssaIQfC-BY2U9Qtey#LY!L3YWvTIew<&oDYL}E
zjr%FD&I3sInrmuk;$V+mvtQwJK+f<2oVNXGTB(<pg(KQ~z2df?u$sYmqnhGdyu{>w
zHQ;By1DGClqCyl}k$gZO^(ba at 0X$xnFIAxvKE2V|{Bvb*P4-M%VbOq7;3B<a at WdEB
z)RAa0iQc6VOIvpyrOen-@^j8Ma at K18X&>w^qD$UbiHYq=ft32^m@`CkV;?%@(h+Me
zuQ8M~b8VqOw|^!F4l~PYA3v+8HZo5iQs=I%s>pM?tt}qg2U2{o33#|GTS}TT^shPJ
zfgke3b~JZ-pJH#{vkPigR&>=AXH!=%9hqP2&1S3Ue8`<Bq_(tIIG<)UTpUAN)7IX(
zrND&wStl8ueDnWgenaf3`&aqm=nKtn4eM(emnyj+Fm(NbRk_QB{Dv}1$ykIqoqH!L
z3S=sd3~vud at CNE%!MM_WM{x44V>qwV-mbSAOs2D*aJAmArCy0&#C||h2T)F3+10?7
z1DdjLk-U1Tf5n_eIAU=EDRFPyu#339+0;U5od`s7KBCM^XY{TBiAuYX6xd=;<P1Uv
z;|J+sCBpUzVvN|x^7VtsbhSN*T<vX$x~893=PM>S8)jusj+7<w8nmhW7<9Rg>xkL@
za$<o|u`gr6pJX39>N+^uS+Z}%J>2ZG%#b!^yz*d8H$^^JKDZsUggu^ej%^5{t1KW@
zlE$~&y4-EHsd0y6dp8KSDHdtDB_LN&HxExniD*VB<ja+;VlpydS;MCLafFAEMr&QQ
ztluTX&a9k2tlbtaR41AtlaUk0u}{ld$U}+Klnb4>z=~NsRUTp9uS=SIJP%nuJ{Q-2
zbz$Ov#`1MC0`B>u<zPrmN|MM>wf9mntu!FvwAjA#!NF~=EPW+EK~=pvZ1LjLvN326
z;(&OPzb|^ED%GI9ds$SEq~xaOW}?`;H(G!|M0+_`NNA_0*rtXh3)s at 7W#WOmYk5SA
z+}sBNy|wk_sg at y2Dg^o~G>y^3V+HBJ$ecxh9E0tznRN;TY6a+|8U=SMBt at 4pvhq@%
z))7{tA0bYT(~g6C1WAZoL7B)OM?97l%2H*%b*inY6ZdE?`>Gj7zaUb-lrPz1+`<t7
z`+%rJY!Qb)eG3hK2S6}UUP2h<%AQ8PUEAFTmsB8aoYUr<dfn^JjsTactkUw3Z-ZS=
z5Tfa_^qrKGqRRIAiFs!?X;g6}Do`Ur3R}dl>ouQ8Q^4M1K%-Vp=cPdUi{dNeZ-^DM
zU{0b2%0~kr=;pDYPqHBM6Qe>7QB+Tx(PKed0OAQNsX?Q55#!1iB~a{wjSe=RR;3sn
zTNI0%GN&yO(EJI3Y}431C1~27*Cb7rx1~QSD+YS?7brm4Rn_3?un9w(L?Z~ROhQx@
z43}iVg0VpMqbO#;tRex~s~V&T2WkygX!5TNl_f)jSfW7sBR7C#e0GW_Y(Q*5Y7t4F
z0|8ci3f(P)dmH#m|LZIZQ*9#109OpLq+_cvTp2-c5mknasFk)}CaZ_sU7Ivo+*&7|
zL@|V3OaYCNNT!TMClO5%G|!W~PlhiK)WTP>u%8fJ;iisWj2bAh35=gaB5^HDKHMBp
z87d!4cA+9>ryjN{($I$}N}#)1s<6q%3^_K&@{Z<(8bVRtMwFafG at cljTj*ka)eu$h
z`J$|8s)IT`F_GJ$_oZ^bG3X%bU|nhVT+pQXvRQ9Fk at eOFD#m+7U0Nh7E5l$@&q%}(
z`sHc?L?Ug0!`!-j;KF%cIUJMC<$k$Z;SsuVRgS||fnw8T#La!($4qTlB5h+`QG4gX
zwVm-^vOKmh+_(ts;^|Wgqkba8cyWpc0qCmhrwL$|=deJ*w+5JF3ieE;0A1B95wVv|
zLl!`Q=5{c)`m}pO+DE&aO4>J5cTv8v5`d;}M4biyaUYB(2K;1w$?v9piBE^5Bf9LL
zp5^Q2 at Fmmx_V4LX<}1h6WMXesb2oipw|2KSw2!f_1y<JpCF+~w8HWq=19!2vun1@|
z?tMqI_T0J$G&ji69M8Cj3Md(%Os at K+YGz_$eE#gIy{f9Sv%B}6bPPl8lW2G`QBG<)
zk7osoF`#V~g_AW+e{m$g-T{_?8<<Y`DL)h~S8rA_UeeRNl7_$5I<@Swm>h!V-Iih|
z+jcfJmny4ysv=J2s_A9<9~`dcI{#}+^Uf?Dc#AF!u-=`^zqF44|4J~u1XZXVPM{rL
z2N1UyzlML9K5&)(Kt6D|ppXt5z6xmCVN337WvoU(W0*qZoYHM`comVR?xm$jU(_$q
zWN%}jc8uU!e}Fd8Hl>zyVtnTClIMF?8|-GlPH%u`?*MfgWKv`ind-%af|B?|(y)TI
z{z8(~ZcI~<Wfy>9>?;0aYlfrxhHUzwtjEFMJ at +STg&_0cfbGFUy!aCf%kGn<1zH)a
zNC?K1O%xE6qb|!UAa+YFKxSKu<t7hEfkOe+f|ke2*?^0Rw+)BqxA1}&GGsKo_tnvR
zo#x7o4LMv3W}RovjSd&8 at L(4@{sz&VI`Bkh4C~}q{_g?%l4v>`xFg(AY`aD<dP-sw
zA at GDi36ZbuZp%gKk6e7Lzrt)2oXko0uA<#Lj~#bbU96~IOa2em>(t8W1I%Nf;ts$R
z>o1o(uwBn)_&rl0m-#gbkqTObhj|c7u#7+4i2gx~Y+^2rj+e=uff24L%^%wwKwFxS
z^vxBF#{iGZCf04YE9SrMINxF!e3wvvy>Y%le7$hQ40Pi}UKcLBuk>LRt!|2!TdUwH
zpjMd|#c$1+tImUzmv-w`mkzzyz`30QMk at CHI`Ft7_wb at _h)f?4I0YDzF|gCRFr(!o
zCCf(`>EfJp at abtt`T>N^k^*~|RpjpyZ3?Ok;R55(d7sLq!EzYH#w**wv5Dt~b3=0I
zztep-Gd`24!?*?}3Wnw*chude&!=1-)wWhg&O8>7cVrG5$;tOt*Dts^i}IHvQ?L^A
z-wT15DgVhc+n%|#jU1JD1^fir{B1R>H$%vR&WbdM1!fiVPfYbs5{|U_b72FFwVSZ9
zd!K0=GGQAi*&DLa%dy>Vd}|o=`LG|T{ky^#KiNzyd5UCnt!#bfOaA5l^I at H1E<V;5
zG%IT$C{7IuqN~z`76ZUUZ(<$m at pN<-U`~*+5y0O5U1?qRm(wLW`>DB=Iq%j=PB*-b
z=CMCmoYyNxM0}Q68Y>)2-j4x at FC1>(3?G7Af5_WwH6r&9P!BNNWM-^_m#a?qm%T_6
zHi#t4-gh&E4VxRh%_>MOFe9r!F`4Y=xm>O)7+ijt_rt=_L*xni3}ZayxGR2~a$w92
zKO@&G_ogC at uUaeow;ari7aUx`@eRKyb6h?H?BD<@(EzNU{N2A`sQt5#d**Iq9Qt|*
zQG6Yj3$u=4nFgD|Gl~>}Ng4dUT~H=O5&aI%2v2mB;;KlvX?F1Y%w0!4SCUHrUw`G@
zVX0LJ$c)_wuw(4OzFRk>(a=POK50Anh}n1un;_B*zHNVYE}Q_cJ&?pUF4!sdAVlnt
znF2XBVx&u<Hf~r_Qvw!u*dzaY4KK54z_`$Rk#M`M8==;Ozgk;f`Rs_(E&o=$#5g4P
zc3wePbclL;yaf-S+ at mf(AyBx&o|U=#!wvE8Y$05CFk84s=6IQ|FZ`a6ZsHEH!?}cM
zvs90($tLG4Dyl6sI4W9W^o9DHvJG&lb2|UjUM!--Cd^w{Hi={^s_j*$Q8Qy4j)|vu
z0PYkdPS>#UhB{{(WRPBKQ6j at k>d#8W&-ItqAl2$9Ey3runwM$RD@=+xOC8N?)Fv*S
zuq`ybpXX8LDwoSoKxy?^bg^uu7n){ouO}0G1^UHTYs`~AQD6v*Gkqo`11D5AS)gR@
z(7t5=4gZbU2~I0Y4|aQWeJtzs6<c7MjV*#0ndg;|PwJ%QN8)KaS#X?wyHJMEn<OTu
zzLqq*^OZHV*JX&L6+6;Dp^Ya`vVZ|w`udpw^lJs3(+xh2l{Fjr=C*GsG$V>xdmzIl
zZK2tFJAE1jc$T{frngT_a(<3uIU`P=<dFDA9OdCK6{?)Se3_{+$4OSn&SdUlns-w*
zEOPQt(NlZAUCvnZ=}}+fuo(6hyP5J}!e#e1**eV`B@|`dUCnRr1;^%`D!}Bl7!E|Z
zw at g&08HHS#EU&IJ at 6V6<a&ctxFtq%5%*q#ZERnV8Zl|(f*<mM!UtYDaI9Uu5G-#SK
zk|`-?taN-Y4VMWot=r~dhbk at 4#E>1xc8(j&O=^vA#oGbM<^m<!%P)@bwA2!-(uS4=
z7Dhe(X$_qU4q6iyWBSK8UC4PiyD)HY0esD))6g|S%7&v9$-ZJeg_~~ee6n2(EnDA~
ze4kRGQal>RB3V5}jfX&nQDr5ASfH-1ox|Pv`D1u9b&y#xKeFd}oxr3$e`%gcBc8})
zy})9<(8#AMVJ=Bt432E13z>wo_6HOJ5MfOo1Vo4h0g~b`5W)3nUSUj30M;ZMP1FV%
zM+_8G>5b!c*MFW@%$hlQ`8p7`b)0t0eaJH9JmERnZg`wEHz^(wDHBnSkt?ej7N<!b
zXCF%vkcgQT8ZMr>rxd^3Qn4%9QluMV8VhexeUy=k3+{-3EY?bDCgNfk)4{OhPpzb`
zOMWgIy+yP}CZ(ow2%bPh^klq|t{THpLNIL^QHCC`?jt3Pf|hVrHeK~FStOEBs3+Y?
zMXkZ8A2gh|FHC`+3))zgu`d#fTEgJA#`wBdKroC76AN&d&WK9NNnaZ7b#Pzsnjl_|
zb6BDwOKp at IDmXOKj9M;gF<V<*)Dg6_2zi!>Hf}=g62~%>lo6pivo-B|=t}U!e&2Y~
zj at IOK+d^~Nv`z%U2?f*rUg_)LGSLmSbU;g1^K89`s%Kny)TriISRas2&>Lkju4vNm
z)-Z9g(GM>SW!6L(vcGTUYQwUWtUEQ7#O|8xZVfiqN8Cv`%n6D<HL|W<FP^<%cG2{a
z5wGPERgtJlSs*oKzlV%;ytj6NQA$ckjJJ}ecXzO>RTY<^b*xWW!lV+A=}g5>{Ww$r
zp>RNdakmnDrdpHj;`0{!f<EZZT(nxD^$f&Jm_EX*xKc5XE6viNbM}nY9~2JqPuzMd
zufNioz?aHU_T+_oolJ~HC8=j5Y$X$Bp?B1;896Pn5)2qodvCm)EXdN4v4mJ8VjDz^
z#VN*rANP|U(pN~PqL_!bl&X?p8pb3jG@>w9!)vJ9j5kXYSk`d684~(Q3|}arg-pyy
zr1H{fEsri?geovxCleALk)kK!7?1wh!mfVe+ifNuqk_>)s)_!X%E*cb{w_S~DsP4F
zBv+qt=O)=nDPFulsUd5#i`Db+CZZssHS!pwzf=nyHjrW(94#z3qz at 4)6h1(oV7LxP
zbT?2j7zXjKpEG#gj-}7{=J4)OFm=I8K>&bY*=vp(K0!-2=yaMyHLUj$_yZqL7#WcQ
z!KWGE*Z<GEKD+qq(I^Y`8mGfZfv`N%=trIj&{{;cfYJ%%hnVgaarP7F2D82y6h$Sx
z(ON(F-)kJ){Ubj&7HBh6k8HSqHU2*@y~^8<2=rA%;FAYW1F`ZGLJT;Xr~V<?!~(KW
zq~3 at fuHa>)D^N5yo)`!w41Fj8Tb-(4CbHO)AOnF&0fEHF3dM at M!OHGVcgr&;=1ytp
zbF&vjdH5=Ch>`&rA~iVSmxNheGUL7b(OWu*35ouGLPA30aayyn4OD5b92voGBr~U3
zVoNG1Y-;y`0*R=|2fqhI<rG$;$5M%Mf=$7{h-Tu+tTgJ$62<*y64DcmrbX&r-8m(z
z443KV<t1*>3K-JUJrXRUl*kl at ULqbf%<GC|lvA~G70ld>gxpI;N&xDPHtnVGa)Pwx
z$XEnK^JQZ0N<v1hQHBWnYUx5g3b^*eL at ObpdAD}eEVO;-NTtb at b1idwvY7==-Fn(d
z9uXpKECGRh+rQjqQHeKE033M&u=pv7!J;BUV}yi831Ki2PfAT%SZIb)qYD-T1M)(x
zDmD%~r3$k0qGw)x?PLoJ2=@mLG+EY!1xdoe_6TM!p_O|W*~@&6e%J^YV1zIjBXfVU
zn?>1X7lwyWhlb7h18&1TtoZ at T_(~tB(fjO}x&%ujONp)6(4}FYiBk&t!npgHIrN&y
zXk-e3KbVIBh#0g=!y_qyvQL at z-aM?asX2nP(y~%!N6n-s{%tHQM3Dpw<TtWy at OX17
z_L4v<dYM?1FtaiX=ZmpuDmFM!mk$d?N2GBRQmc_?W+gF{6dN0 at E>Kl8D~v&c#>9qk
zV1S0eE0IP9>EK{1A<~@cBB5m_>4kyH!p6>yN<R|ld}-j7p*G@?^CArS6Lb<G*OOtO
z#Z+4yh1iL!CGjm>u*s7i?aibeW`x;AtDsqmiA6*&-1;B^`V>C-Tl85kRy6Ht2?fzY
z$P5c>UmEQITH#yMP!UADVvIn*B8aSSYN|L3Xi+uN{4JXs8YV8QE}HAI2^Kj4mQhmI
zJ<-&5Y7G at Kazk$9 at X^|Tvq|JbkuNO6(2lv{e9a+rK{==4c{#<{JE{Y`yNO{p*}#!W
z-KtrzaCYgKILl0DtTN#9ku_9MFwmdLIPd#zli at +U@<88d!rKW~xfFHf{iJL6<kj%M
z*^Iq0SZYsOq#}(%)S9kZM9+>3)CU}^mXMgfq0ifiYhTak&k+|Fu*r?%XXN}CM;=Dn
zxzaqdDND+Ay~211mWPw;C>tq5T9ia~C$IkGWj&4*k+83hSwDw?ML5B^F0bYx<TtfJ
zhC~PW<u=CrxH_iv0iu3_{rCq;`(jdY=a8F^_YP0}gauJx`i%zz^b=Vblrbl%Iw=3w
zXChHxnsPgSH at cZ9xJ(gwNdKC^m!d?P4Y>bk at jSWT)?cTB3f^aIde>u5)zW1xsh>7U
zP9j*BjNjMg>Zm~ZByyUTpeIrVrOV42;c(Pel=akhWzrmzuEqR%T6TqC>#_te*Ow>H
zoaNhPs+1FuEzf*9qiOr&6>G-3Nb{l%&e{MiD%*fB1Y}%D{f*g^Jt=aBaI~WFybzuI
zlWa;tW^9ci9q2XQ;>m~=#lgnaAB6 at WiNKFOJTeYrEaH}SG at v$au=aJFzzg(8BghEg
z->&Xo|4Gr9xQVX|d9h2gkVRV27%Gl_?Lk}I;Sm?6D>kRo{1Tkkv4L0WL$0VlS7sik
zv-kjo?*q-Mq}?0{-?kZS{#MFd`s0HuB;9|09(Gt#6sdlsqgDlGyOhu7ypiuuas8~@
zPm*xAObKG20Kj|xPP7kOlHK>;7R1K^#1qso*K{<QErNb>5{*iKUIfPr4?w7Ze52?U
zM%Z-u75wefw!(aT)%bjtDcVY1IsElALS1USz2J#n2(DZ{VT&?J0RK2}2lZ at SSUA9X
z7+l4K0zi&+y>4Wa;m!BIWOP;Q-hVB18Lf!seurI_;})e7)M_LXi7k&J_}0KaB1 at S6
zjX>u^U3Jq_>8+FUAnw88ghPBWR7HJ#G}yHL6No>tH$J04>H8^PK0WTrUJrnrduGS(
zh#kWAEJ_XVAUcJf49B*Px5gG2n1 at 6}#x})2PR_(W{VD&(MZBXB^shxriv|DM$n at A0
z!dXbDRvQfme=+yOj*nnEKDl<GW<Xbx5ZWvHb_5<@_}y6p2R;&sj;na3I(Xi1zY9<}
zUWd$rF3k9D<rl)@7Kk73^?(KUTk7%#pe7E8C|OL(883M6Pjts!gVIgNN=VI>R6(7+
z?Sc6gJxBKCjy!+aYM&cHjG7S~9D&c8G3*=hm~7gU41v=Pz#VXf6{g&jf33+swee_)
z<D5FlIm4(nMVJ!0I5{uGz^r>e&AH-_MIKV4M6@}}T-``ZG`!4SeMt#|w1j at AAxj(k
zn+)q}nx8CqhuHpSiyN6%INfbbt`X5q4YH}ADv!91#Em;6F0H6+_q|22cu~)RKsWRI
zi2?IFwf`p!wmvtQ0zAq>vF0U&7(9wv%iZN at yy3c>%$n at mZ+qgWb>I!Jg!c!jWO=>b
z#CWaoJO=4{m7N{*cu~obKZdjq)(p(xJ+WP--4p!K@(r&M*_RHvxNYQ?SE|RQ*oJEf
zR%izkNH*zKIx`nbTv(w_3G%3DybN%$deO~-WGyk<3%S0%%4=YTaL0*_T2u?+u2MBF
zdgoq*4I%^ERY(BtTN#A?EsW~yIM#{}G|Y`h-VMlL5_+wGzY%-wvk1LB+hU$>cxa?F
z<iOrc)=k3T^M*GOdp&R at 9y>KhFK&N9IV@$kw0Nf#oPDtt(r~nxgt(}b#BZze*1X(5
zJ1H#%m3F8V at +lE>Q`1&lYSemCy0yOrt2(W)M^ZK_RLH=<!oq-nXdmee5aO&EgiICU
zXy5ko&@rqAB;$?`i7clkXdFiFjd(QQCs~gDu(b at N|IzJHtd+WtJIR)e8VLfLJ75Gj
z>OS39qQIRf$S10`p?;Py%yT|0bIz@~Xm^84;ls=7;HCVT1__ZR2GO*{F-MhE=6fsu
z)*v23-!-j`1G%>N!C at j1@uA=F&fqb2b#(o(ib^tiF+y=J!;OQMzI;;$y{2Dx#oj~|
zm^`3IB^XNh)UEMPsYWq#N>$b2`l#9?Tqhe#7IIzEf(A02aD8ho_A#b8qKwE3 at n2O1
zgIu7{C^^H#h7ePABH-Ipj>GY@#I(bNp#o1khlIxAOFx2pp+|hV#CU=xd$CYxU?Nnq
zgvn+6E{S2ZximSTZ=`oRd01nzjEv3q>_g^jN{R>u#UBo+b7jS-FRElA@!c2b<f2pS
zJSPAde at eU>iB`<r4CobsR+YXcl$t<0{!fwk(>+8j`9e>}#niZ0+P6*#h8=*h3p at T{
zfM`LWJ_L0?>iqXUXG$%_y>^_Mk6jP&ngKg*;FSxzc;JOXk=*>M)ba*oL2|ca^da at r
zp8mH+9s3Z4USeM`n$Wn|V5h1ymQKP=SszkP(ds-Y5eahKBCzTRBPG=Okn!}1ibgxm
zH;hJvp#fhk**(Ts-k6!J0@{(`{fE{^Yp0Eey4xFKrwz?k<Q{BE- at u-~7j|-=ie=}o
z_McJ{e=)oKBy<HGbqmi{ZcCtEi8nL79$E{XQx8F2cy96dQQ+y>YSH(M`q7F8{D;U0
z2#Lpq`=rTVxx^(=*4T}75^}2c?J1-;qc40FSsZRyb!N~fjkSL^^mxc8dE0^aXOR+c
zt)0a?orS}kg&UWK+%F)}{$uqCM*=j735!Ep-rT?y2N#GJ#h*tB5YBbm?frx8{dqOu
z`89O5+K6>D;cBT$=JQYrcL|GbK^i_?Bzz?5dEZ6`-1W^KYPQ_^2LG`varIe}IfrYd
z%x8;NM|4eFu at uLfyAzf8QX>%1puX4woLx=^cSg*pKL@|njahgnD4+gnlzV_Z-?Q2-
z_SVSQ*`2)nSMZ_)P&T|s2JB at zSqY}YO+E(mNcVd6g12Z at w1QZDm<f;T^dzdt*a%hx
zYJX4J*G<oU?oG#7j{x!Fu`EUiW3~y`q$nIVQ*5DyB-Mq{A|*}?Qk>WuUb`1+&U7Uv
zsO0_B(QVSW?(x)??BFUn5ON_*aH_um({fB&*yiFS#D*%FX!+_v$j}_uBeeMn4kh at v
z{aX7p6bXblhgAJyU_dDVu+DUzZf-1aGbDBqBE;242~uOa<^J%Ia#uV3V!+!2P&Zad
zB;60qY|=GA)#4T^E{z>9W at +6C$fmOp6G6@)t*vfN8CLnEP^xCg^uzNBKIx!!e?FIY
zZnVQz;o=;*G3&1bmUQMzyK6iwgq2NdXh=ww;}zzRa6E9kfSH&ejDRyhVC0g5$&oFj
zQ$$Er#f|<bn#Ar$Kr%hoteNKgoC{n(4YBg1vltnu7f)egr5;VvQeed$Q2iqv%;ReB
z+mbTc+42ZpxO1%30<8ZS%{%uB-9zxSk)08fw^Yeh>pl-(!gP*cHhr8YcCU$&s+K98
znzTE5GikLfckq;Ok=afdMzQVbGPuWaXI~>nwYHEfrXk^`r0r=X<E5p{?i3<uD=^?0
z*(ir~%ZBdMctg=6Uv{yb+vrj<J)>dMjq*i7pAO0wickjrsUnZ5!boRVA%Oork_vU0
zjm_QRbPMj~A~%_`KRn at ds0s>O768$5pV0ZVC>6lBKy?;U7%NU#P^-chAB<}KW#MDr
zmfJnw at D#m?@KP1<@(Q5r0b=mh1`T;ly;~*Z{dC$0|4v4Ea}Ph%(J{_#Z|6yN2VtbA
z?J21L8C&DMJ27cCxc0tA<UNtsYP@{GulQO~MtS*u;ho}^C!CL&nW?0zt)#4-oQOp;
zU&+dPK>C`(<hnk3ZN+s at Hg;}0!rlCY#0P7oJ)oa0NL4u7)NS3m{mhj(wu)QP$&q$`
zL at Y;Fw2wpEjxuNVN>of6^*BI=tJ$gKLi~5^UPymK!d}CI9&XtZOgeZ-dcOGl%Pw9;
z4<iZ5c&Ce-!J)f1Njp^A?f%R>D2>a+M}KCqlhIdPerAsvO|QaZ``BNy`E7pY+{7*;
zEH7y7QNp5~xmf7hZgQ|H+_gr&hEZ%zqTHCT>M-NX4EzC2f$?zHuLDd{Qj1-8k^hA*
zt<h60>(bCLeO6yWbjo~}UiWnpdv1Hh&Nil|z*AMDW?oN}TtT&tdsm)Jva(NKe3;$<
z79Cf%mV8T8hUB73h*uXcujWrp+~6G+^cN-U_h6M0NH~xkl=wb(0CaCGoF#xFjG!3t
zF?N2^VW2m`;gM6PgN~DTN#q4 at 1$|>A2ea9|eb_)Uiz$z3-GHVh2fnQ?i(01PMT}xP
z<4u1iO&p1U at O;9TdpK#7dYT-fE8-4*v!(N|PGrcEY)nl(>G314LRWrwm`b^lgYnTJ
zh~qfCW|c;ww(X6zWG~z$nS>HKjBp at suAI1+9piU^qnK3^0)zjz$nxwwkLS33Ohf2P
zjk>bBynM6Gkzwe}v=yc+9m+RMO(v5)&38e?jQ0zd%kJ6<EN`d1vT<^uEJSy=<4XEL
zhf7UsLxHTGHchVU4U>8u)~tNqlq0E31(wt(9`*{;!{y$HN)2UYS(#Ro$&LPJaG~r_
zHl at oohmXmM3=#R+L0N at X)7{>{47cZQo#*w1qHs<!#H*-FhY*Az{Xgt#xie|<MoL-b
zUK`yeuOaT&)n%|2t3<NeeZ;ItsGd*MuIDq}*|(e5lZKY6tg4RXa<>$z-pYUyB)P9<
zYUZz&eZ!Ze7abaTpU}wfyR(yA-;X2H+`^W*iT>}$nO?_tBsUqyBCfTj$S)9Gl1xql
zsFGdWAPj1d8ziw7a5n}__&L%tl-UG?;YP6PU_`Twx)9Av$wbYl$W6vm>eEioEV!v0
zzm~OB6IqW~PiziZTl*RCB6egu$uF}M1DKf;S0Ar$h}+?}`A?*o6ITA$q8USGO_){%
zaH=PTA|VfQ#{FMLFN%oF=dZvWSwZ_vO(JnSQ$1!!>0aSxpx!1FcrE16TA7a=Zczzs
z*94|pI*i=iML$cxb`3`cb~2`+7_I3|FR?x|OuYn<`vhu)KDgJ4_pcqenN>NhPW$)0
zot;{>9Xf~QO9YsU+?~dwak!0R+pL$}CQ3Lf?C$TDP}V_AmdkhRFS{~B+C_OV=OO_d
z0{!{CF6DUsmXIn&G)h82k47}J*fefR$_9P!p^qLooP?WoHLXtl;kf*so*%B+ou)o`
zP30##rGIrLJIR)C&zDX1-_3Y6i;Hp2Ky=^h{jog;WWa;f4q=yKNyI0H_D!s)qWfvV
z(28m(3~iGVjHT3a8N`~SWP^+h_=O2rH*<=-+mV_*AK)P*wDIAm{dyoF1lRIdX>21d
z9iHq*s;(TmEy`6J<15u?c{VXw&ttyhEBBVUZ^ju^?9mfS0qc$j-5LpB=imEN2Pf53
zRah5f^m`XAvtV{t*`(|CFV07cI<7X7_1I_03aS|#jZAMNfUdS_Kj=p at mOM}J5E%UO
zE<Q at +q4LF>j1@@(WeTu`66{eFM|8gvL+SsTj4cZN at 6dnU=dGB;Ck&yIf2Y#%C?@+-
z9|xH+NnqjU2$48kppRP?;1DT4cSmhBEtHCbTufr-lXfXWK{SeQO_A!}mA#ytvaMzA
zJS^@SsvME&;kG?2+aqMD&1Cc54v63sh1J!59uI{oTrF{Fk4$&XB{9jA*VI_7G}G2r
zzUqCw6#Vm5^Hg|aa-7ig%R;T_R~_EOT+oTBqazraLn5ewZrz?Wco2}L8u}AhV2Ag(
zS^jjfV>5!v6PmJ*g0<~w%dL&0C(7BBvO0HIR|s)wcE36Y;=<&QBdsTj^gp{G>4?JV
zi0<i^I#?9=%_Qc;MT+ at 9f6tV}MgX-i1|70SjC at jn4DUm?K+GL at H#x{#%=h|BB6y>5
zd}P-i(0)9q%9Hprw`v;~Mt!R??qCE*u&_l9nM7N7-Kel})^<&E)hJTm at 1T!@08MeV
zWY8_dxBVjz$Dm>+^y()%hne!|e*u%2vuS^rN&utH`Ti$&`+=B`evjcNhSXo;|Ms(-
z9dN<iO4CQ&eITCq4TUECXp8)0d-#NRvectvCF>z(%EwKV4QLKl#29djcbDOM6z{w)
z#c;*Fm7>PCYS)*HQdPUgT2W(z+-B2pI~6%|>Hc<^({9XgUBk;h3|F4Myv@!UlSZdM
zI0}Ju>h!r2`*Y-D at sM&bgz%*4bgWHp!K=G;OD#e!QF__v+n5oD1nQiSI;VS=NSlvw
zoqwgKzUq*Sv4xjY(Crf^h*H=zC?4#}Y7cquHtU85hb+(f6LH{s0Mm&U_p7JX3$_3M
zHZC1_Fdg_4_XSfBohV$LsNP5fH+mpik=-HiPIP}X!drvi_<su$g<Fb|Mcn8>`E#-t
zP0Izt=6K-C(LT!2f}98Qb-|aR0X+%i>3}an`Tr;W--6pW+C?L>@K@=*8;sOtEyoJn
zuTC}}IddbT>^FB4IiZB?mhv%irAUB{f3M#sSMddh6DGda9%6aFKl{yG&dWpbc(|jZ
zb;3$sdX7 at Qf&ai*+%z#(fGxdTsOs+6PBmLwid5^(_V+!g*5>fK;Tx#rJsc4a9UTo3
zANhDoK#txyYvu~@;}syk!xNt>oXr&@Cgp)>Q}Cxs%oZa$mH%Jdgcahme5+Z(H9v=v
z*;FHe==5FT|BvC)j)TySBflg5h>0CE$z+{A7qJ&9u6c3b%$xX)fL=&CDC;Ep#Se08
z<SClo-*;tuc^))&dhT7IiJ{$(_8RZa1{+1=X)tzyzo*0#=KGrCsXvMC;rSl%w7E|t
z3d;lI&1&R9<*N$pFd)+OxZnWK<XW9`BifL6?Ws^D5B at fpxmdqguZZjA6U7E6^a}jP
z`6q{{Mg~EZ1cE971V!xse}u*5E?N2RIkX5+IOXbq|L39O)+rj58gWXKXyT(k!=LiW
z;TBz4!eB8^8k7pLD7G;#6;Ivn`qbvQdwjmW+xr)Tf0wmHnNq9M<u!EvEWz6u<wN+z
zllft6wANz1(fzg2eC2x*NxSX- at _W2FNocu6!A?LP;*vA&+d}s~^U3f&MJY@|d{WOb
z_N_)y_`|k%`qO`I`gvTD%xK!- at n|=d)8>FO{xH^tC#?UPOJ+|C>9|rWTG(u>UEf&N
z*l2c^P`z;nn2Y@)Kl8cPpjx%wWW5xz*6`p7*=F7Gx*5%x9?gw+>U=P6aV at 7lmMw|5
z>GFBn43 at gBu0V1agL~rm&5(c;-=2g};FP;|{pqQU=APFKA-U6e%N9ND7#izg<f@^q
zVBns6_7oTrg|+ir&sn~76XczG#4xqhz?)F1#qDsFUA`?S=&utNw*Rx at qj`Qh$N7<*
z8aq3aGsWUmLZpiWL$ssMxe{;s!~HFtC7FgVZF5)H1Jq|9zTAn2O}sc|Y4!bizwP?_
z6MNPBo{!=gVvVP!`&(4MIu<T2p12{at;TVl7=5p3SSXnp8e*+vf4Qo2c7BMB#>2zO
z{x^}Lp~U2>A-~7H7K2boGFphldRAEY2X1Y)H6z~n++^0b>1=k?6-(PpK0+!=@oX{U
zO?vm+FXTHWbN2bMhl%yZ**E->wKBxFBb5<>`bYb>3;oi-2eM5%S)s5aA*o7CrI{Vr
zy}30A;}%!-jc{ws=N%T?ltptA4Rx~T+5Sg6(6SPYscNmoR{ExX+nZ&(ii4zPI9Eu5
zsKJEiW4^d`^~;>%>C2U-4G%j21GgP7P7ykz{n9?@WgthSXgR_X$_vFrQl8=!C;i(m
zb61jad^}|;O<hGp<Jspfp at 3U3REVRZ0#k-X`s?+qXF99te0wG$b(fxXD{A?<R=wNG
z^5=UZW#v(H1y4*Yi~iuCn|wLFVLJQmgD^HvD(QALA6+PT9Zr1|w?z9Lg`tr5kqUE2
zuJsyz{o3bkehQMO<|Z1a3S(=bO;au_*2*QWIwseAtJu`+^=t)1?}&An at t!u(&74>S
zk+#e`Aec7~;xpF$==R0}?=`T;JmZJN!pqTTAz=IH=HTt7_LAL~0;63vJJ);RI$mDu
zUf*6^eC!c}c*y&JMQY9Mc6XQ at YabdIY})hla&6?~O2ob}BSR$G#zNr6sYGJuSy^Z)
zVQKXDV|fX<H&Y%MQgz9c!`Gj00`<sp`0nmq`$$=-s4FkQ$jX|(zaDZjn$~DMsoR at F
z9A|DxnfV(VGqZk0r6#H{e<eazIuA?DSGXLw-YpG;5)hiBFm-oWzQ5GAVQJt!=(Tv&
zfh~n*y>AXJj4wzc at S!q5LNd+I(&AUMMtuRprqK}%Y|}O7_u2da9>G at B;sxz&E5>G<
zEktzSZML79C_kqTxqiOy==!|f_@>b43|C%opGHXJF^>PTdKo`iEN9*OH65``ueSA@
z)pqxfY1$I}3-8oyrr>-*<p}2q@!g2z6%>!;j0Yfwm+|19ZJ?A{f2Dh9i22%A3RlX!
zVH}A3EWM(r$$RNxFl;Z$#rJuxYDk_s7=gji;OvrhH&D=CzZMml>uIHR8E(3pX)wJI
zO-g;)VE1sUu<n_FS5;za{#Rz^ww%*ts9JlB$f0bJNyYx at K2JP~Wdr4KOZ9LQ$UR2_
zE$(bB8sS8PL7C3s`X0ro{1hk>T~STlW9V*vRxo9$y1cjux5;BAJ2d<5-;}%UBYNYI
zwGkdBRi*EI5P~0ANN~VHEHXhFg}FD{UHZ>#eY2oIX`?3S^z`l^cB;10FrvfE)_R6H
z!?#lMxH!&r_|VD9j3Z at QbBZSH#$?ZI{a;HP#>{n)_A@!+KpUY;Jh}}^k-!5nQcp|v
ze4!J5)l26biuAm3kOb+YzguLGHVm*uCD_gR&t20S6b+w}iHK at lbHlObB@ak at m+x5i
zOC at vjSDk&Tj)%)JRX7o%x~eNK_3OFv^oT}ITTH)P`(HeW{3HeZKbZw|0Y&dL2IU at g
z6FMp?A-FdUMXwE>s#6(nE2X?S>rVCg72^o(MyELi#6zpI=|8LDQj0x5D)=N3;p|T6
zzT)k9J-O_xmL<%^HzSNDL?n5H`D@|=-RJ%*ajvD=9nkGUsk<eDr$HSHWhGWm(Ug~m
z-P!HoGY>2gzLbh9CC2&`WzpD#6^xK at kl$N5 at m%DPUOG6=cWSN9JRmsUH3_c+^u9+Q
zW?LUeU1)sZ0j^!_yo^bsfj$kbM#E0vG!eW(yZ!$(!^r-?GPxZ@(c;&j!`y*->zdt}
z5+n;xgVjZRMJwnd>BNRJRuT!g1|@uvT06}NNqI|1MDl7jSsYKg%J^(DJ(Y)?S5VDG
z%h~cU!527s6(gzVhJ{CQIiU~XkJ#*sFq*1WqvT4F+AtMs()-nF9}KohY~Nw*tr{R}
z#K?orhkizx;$<XdZm|6d!?L2;zrNuMhQjh6O$pj+3De$meUv9^a$a=PM8I9>-hjKQ
zak_+l{}WjRvIs58$rd5`jIVt%DrHS9!X4Q~o5QwqW84lJKRsgmGu0My9Ow9_jD6GV
z+47!2I|MQgP(59DYg7OI?1gg6*^Jt|er+nB%T*gi_Cq>vD{z-!dWfE3aNGXi&xG=<
z{dJ|2{B at HS6WGcw=JzMiIDk_NxRdqYKLas#FT7Gay}tRfN(>yVD^j^$J>%M<rv-H4
z+zSG3Dw*ghhU`t|fM1vROc6PI+W~Oc4ll*IqQumasm*zaIkBJ#ATET-lFLMKZ<|K*
zX)CbBqe)UOt5cL@`Pn43&JwS`SVvOvIAO9oY~d&xTESw-RQ_wLiTYM(D53#s4ExFY
zhH-GQ3MCBpc68A7q7v8Ra|5yX-&0+M>V=_U{^u$Zb`h{!qbYUcC>k1-QbkJUJp at QD
zQE7R=b^<`8Q;U&kSv5+IV9Qg4Co|yMGMZbaRC(su5s$kd_EL)aj;?uenvl<oT?Asm
zN5++!Jv21xb~&X%FBrIqsUUC;Nf{usj&3w6p|@G+LIQG7;bt3`@<+sBVG`?R1XI_n
zzE|iR?H!TNaOT&mWXih@%h5F+YgNuR_nP%X{3`IJg+;W*NIz9Ta$KZxW2Qv0la{QF
z2+3BAm6q8Fd8TiKt|&=5JleOtL<|zY7+(X5%@(&?K+g5R*fLrT-^4}7LnR1_;n^d%
zTtA^&ds-*j$9s1FNo}x!@WfQ`4w^)^A#;BTW0s8tM|8Bkt|MCZGnWSSVxVE3spe8m
zX^SOGp_CORi$vxvn$hmq)a=>E$yh}3h{8x%^FR4%Q!_npHBX|?gfdriq_1F%A=o7`
zs0W^Mz}(o<4l^z at C7)h2Q7uFxh?4b}Bu=oZRu*m1Yjv9c)@?X6(|~2(BZRtZ!$P*V
zg(r_d-ZgkQ3?nwV&v<o3b@$Rt8gW?LJg;AIzdpGiiRjA?JsWYXe{k`xaB-y3oGz83
zj6gi4Zf)z`%N47IO;r6M#1ROY>0OMB-mA?&XS3^-PnsETYVuWawHF-TxjeAI+wVZL
zJn=z?oJ1Ck>)W!#Ceo~DsVk&CnClnNoHfs4d96SM9_|1BVa9f*&9BuJ!++d-^>hNj
zJ2Jn2&}>2`9y4xvVB{l9oH8QpC+JdLp8($4VV*}a&9B9 at pLEdK4RzJcYq=bzN8{U9
z?0_iVVynlY2Dd8uOO at _X^9Kfq{kWdbIOStcL__h^CoM<pv~I&)q2r7i?N*h|p=A_v
z)B|ma%pAlc-b>R2WO$MVUW1zX?i2q?#e_+23bdk)8qLu+W5NhAgZgG}L=NT_d`X(h
zN{D#{lqYbWnyw8}$i(~fnBiF~-eJNAuf3_Pq|S~&*1ZK!J19bf_i(yFRsdS231<-1
z=#5JkjH3PtgWmCZe&a+IhmnAilG0mhz*?Y&2_~Zti!C=@dC62LWk4U#`{Gi4;=0xP
ze06V)NOj(p)dRSzE>qXH2|Ib9;n?_Q^Gk>#T_S&;yq>;rQC;u3OADGFH2p*ZmWp2{
zQ~kzq?q^f6 at uX;`=~SKLTixmAptkd#t@}&;1?_RQfLpkn2aS6_<Fz&?%Ot?*B!!kY
z)G5vaaj)O)O#WW#SfaDb0WiEv>`_OL at -LioB_jEnx2(hhD>hlJ7vf7VL|D-Bz^t4T
zI5m&Tn(5E5(;59H($w(4T)xhzU+7*XpDSPnK>ZEUhvz9_m>ErCB%`>rMW*=7K91 at 1
zW$(sT?A!otE1Y&K0I$=7?FlB<%$JJq1SqoW9?;B=VRh~Oj0>DE3nCgKuC+oYH2K)|
z3W>{kV)79fOOa%*)s;VMp`e=^?I-a+Q#~CH66u}BTG^wz<(%GEd_6BV{jAGK^6_lR
zU)76NFDBaSiGB6nqb-hc&jk7#j<~~PTd&4W+o$Sg^iP`r_Tp)i at R0#(bM=@gD^G`d
zg=!U&LcwA1HZBfacD3Lp4GvOmjpPEoI6{709GF=_)L at BXrp$!~#`=cKF}F1GaNWaP
zzn!HG5hdlPHQMI}Gp<v6-kz5-A&Im*m)nwF_cfB6hTub|g!cu`YDjk61e0c>LCS)y
zP^I%jB2f<+nRY^Q_3DC9QObQJs$(W6rJ8@&MX9nJtmZ+|Fnod$#LOEx#uD=tO6x_3
zQl2gq#6ti?i_Hj$)AIe at 1+{lBW5iwvsra-2T^9Fb(+f3mt!<z^`9x}QnYkp@%@k^%
zHVQ=Yh`2Ol)N8Qkqm6<0`_#=Gvws{0S8b}VHNVL^j0e7Xl$8msJU(m4!{Y#x;Ut?)
z`Td<5)XNph#mHx?u_5Urk|@Y;cpu6NZ?iCAXT&*uRaCo``x|rLZ11KkNfGi-E;V}A
zMg&~*=QY(vXh*-_a6ZSQ6Pk^&sSOL0|M*m*Gv%aj)??>}7->ieFg>)+D8MQ3p>&-}
zc7k?s>(2sR9-~>m((J9eL=K^XRix}B?idDhX`rMgMZx>>(vR)-sbJFUu*E;7YRV at R
zh2bme<f+P^puIj?V_!J7hAk07nui*ASl$Q~4x2P^YPkzfdz&%lbk&YjX_Z!&vhe5j
zN>ouaX&7hE&NKMS&P^zKBv(+!En<+aEX%NzmLVBT#psZ;c$(BOF4%n7UvJ{!UrkOm
zLUnh*F^f5*la`5pdTg5!nRB|9EH+evwswkd?uws=;OCW$U2%a)Ak3W7xyPOzWp8jQ
zZul##!w&jyBxr>nV*d827Ab at a^`oPQ#M|lXD|j(O|HbAEFeK7XpnIvIb1w=?pXmMZ
zBTWvOi`GZP7_lSleU1~hpZ`ZE12hB!6d*uhSSx<oM8Q6Lf{xB2cF4eDU;qNPiWs90
z*dLq?ZTc5BL1<h#ftCof6#xgI7X-<NAu5n)BJN<b7(2<xxL+C;{Gq+TC+MU>L+#@d
z!?aN~1*b_>#h-(BX84s-vi3MxIV^w at YM8`>4u-JLv6U{iJH-8wSwe1wKwkS7hHq_<
zhJ)*Djk4IJCAUHr+Z^KFh%%fnjrivgl)N)LY|K&$^I2Rit#-Jk$s8Jk-<WJh)wFd;
z)m&drje;VYSn2J^3my(P=$Si2K~enkgQoz^(ZBVv&wuonu98HZK~+Jk5>C88O8o1*
z at 4~_)Xs4dExZ+nkk9v=>f)(1Ohg}&bF=^W&{LMjy)>tX2ex(W(I58&&xv(S^4!ix%
zZjutr>g}x=xONbGm0{7luJvC at yZt~2lZm0mdI(JP5_9knmoB1}Np~vME*j_fU-aEq
zh^wB$pM7xb;P1ee1>XV9IVRT>qrPZao6Zpv2KMWJDKOCLsV<m5LbNGm$O*U3pBzoV
zakl#p7vy(552~XZ{VVzS$VZVQSqFO;!fdgz3~VsmS_&m`B5*|JfFip2p$&ULQQh-@
zfVndLPJClIz~g5;fuM78bkzQK-*D&I{(=@YXux3`5*GfAfaHj;6N14#l-FM2dKX{i
z at KL^U|Gcl;l?7U}EgItNJS5#fgPDa&k+RV=B-~Q1h86{m&t2#AbaPUnA^&m>lHcqN
zz37PEgHhs<DVjP396;VfwF;4Hk1epr$cd6UaSX%U#?sh(JuVX0#KH=cY`9~X5R(%&
zs*3TVCdqVo`hPF*x53)y@$hQ8sPLf6h<-1C;_=&oz5#!g8ggVGfV>N>d^*KonKjTn
zA`|#-75*;3?;F4!ChJ_?qsR9B3>_?U(#rFtIQqyj0JCqqb=XkIaP>)R#2pfFabUQ$
zY)NM9<yElZ0h|4kSxLHB?*_}=>6{9$xXW(+uh;E2cfDVs%-;+?KYFGozy=_;f1Jle
z!CL*lbpLt&4tCf-Jk^XG`Frm#?AZ%Ypsa4XsF1nYsdqO&94oqXS-W4lX73kKIlj3_
z8Q<;4wVqCbv`DKW9ghPv_JJ?P_#eip#sM$X_#ftBpF3LITjZ3FqD8Wo8aI7*KwmAE
zzi;^d7>mDf0o_9Q1Cu=?H{N*0hWwj5)@kI{+;8qc-i4h1m3t|tvG at B<+|v$*P26|u
z#yebaw`}gJ^;hWh&(zYwSG|w7RLcfGnQ_456zdj^06A9CP3M^lV!M}b)%NwAo(dwS
zz^CLq|5<Yf8r%0xK&}g$|G^K<<Er`>{sP1=6#(9El;ayF28pc%j{EnD#dZwK{e2bH
zb3J#}8I{-5d*{1yXKVUj8;%qGBN*%3 at z`Q>zb2pV@{LxHE7*5sMz!<x+9LUL*_<PI
z@^gF+QC*ei`}5l3*yXx~7c5ZfxVd|0Yvut{*K<jdi<1m--IISxkG#2CXZ7;g(!kJX
zIC1 at EyYioX%1^dl`3b4|nYQDM_5EJ}SU{)0L++Qmq#r!C47s1~w!e2 at j;_jf*nfAs
z9fVS*^BA_<{d%|C$IaNO`||y<dT)jX#J at HnChnSkFq}Yt3x!T+xc>crX!JV64c;EQ
z$7k1NJh~2rZfLmvKHD9BLo4I&Bi+$+clf`#db(5AzyA+S|DE9m at Bh1}|4``r_pRO2
zf9U+*Ts_?{8`#%$ryYb=CU_ryGwmX at vcdb%n`tNAk?)VydowhA;{TBC7J7f%9lD{F
z2{JzDwq3gayto-Tx>MFK#_e|d38hSsvB6EZpHRvMiQR9y{e&*xAFKCfXapI5glxZ1
z%5*Xw>9+m4Q(utSzuWffzI=bI-kYZpG*<3*JM2!`PR1lR-7dRBqmwbhO}EqT%m2UO
z<7Q}4EcFr2<v!tl=hraGs3?l!lrq|dI2mG;NXzB4G_%xo%+WUvF%2!v%^dwE-H6|I
zzlr{N5dBk%a#3!}4z>v=9i$lQBPvm9W3TdanZqf{N)~ML)TFlNW*pwKj}0TF64?ta
zz3B6Jw|f_ at JV-0~dC&o63zSYMNm%%(8PzglTJ|;b1#k2~G at 5`WwDe*xxPLe(tOfh1
z^<}AzE2lWJ%22N)%Y6!v@*~E^*jhf?i9Rdgmbs77_1Bltb+_St^lKfIv9*=KiN0mf
z7<UDkd*4<@EFq%%;8MPLK-sDVJhD<u3V1C%zI*<@Pw6`M38Byx93NOl?c&S0JmgzG
zqSvt#K6Rg<>!6By_pvMJ3%*R-+;K|ApzG*o9El at 6^TYw#3s0B6#@&Ea0#zWa)fD!W
zp|u*7cSjkOD~~42WQ=UvGB?&}@j0Nb31#DVP!Ig#y8GtNp9}xrw+ at wg(>MxkKn)u<
zR8>}1ZP<XD at m$>O$<bfo`<V-cz2?rt-|c?{e>ZP#uR at YTnn(5{4di~_w0^_U=GR|6
z+Pq=?CP+6Qef9O`qZ`)qKH=d%mU5CEF>Z!;j_i%d at 8@PxvU|EO!7}<TdcAwzA@@9b
zJy+g+L6-G*&ub=yo9X|VOnP$I9g at nBO@?ktrqSpv^!6g`L~s2GJ8|wJ^cHsBlyF}W
z8jEl)cK(UbScKk2Z?(2k4!k~mszk1^$zG7mrYJ><>;?D>Iob-pQrQb^4e!76aV>LN
z5>1);Rj_1H62BycEIX1iU^lV=i(k%C0N?`kF%%aYHh5sofT{w`7G=+>uo$GmS51B(
zBc0JqM?PBFho&p?HbyU_>Ek%6**(AyLhqpb>bG}LzqCCM;70|=kR{r$QaK94*CJ6o
zzO46y>+o+#5lLS^gv$Im`smQLW*qAWLvJ@<3(yI&YPo>wIhWO+O?o!!gP%_Ft2Pcl
zk81ou^s!TW&bnv%Yate3^aFk{p+EKTkWKZ39xQ+bj~fQ4i~nWv3-l6l+P$!G*D!xI
zMUU<`Yxdv;0lIsr-)*V&I-|BE{|jAlMs<Jdv-o*`&E&-No4s?_yaqKYI#A`S#!G3d
zdsmyVU80<0S%oesvuc{AR9n2ZWwStrO5qGc{=fE;@QunTE{D_yh?LLo&`?ayg>~ws
zHs(G<LVjL_*{1Xnpi-vLX)1GF3GtIPT3bpE%Vr37^R>Kqc7;68l4=`W{apUJ>QQu6
zZJ!F4D_$YNd;Mh`Adw~Ix+?nA_Q=jnNzu}XdB_i;Wf3dYTWsTdBm$}Dsz>|T$xKe-
z;fQEbUJzm(=<C%)7~y0WB0NACr`C-2g;n)bZqepf4JaQrI4lZ{#ebH|DgmS^s2Wf+
zaB!Fgjl}n%_uiXzoTisWZ_O+Um(^50iV#zQB6!foyb7A`Q~4;q#r+Q2hy8dFP7d~V
zTsFp^EzkaC0lei)fiqe=aX?ky^4a;RIzN7*=QYflRX$P9^X&oZl6t-O9+SeB7tfzw
zQ7&QBxW<n+RIVO6d)NI-`p2MjpBq&Na51+Od;Of913dSniV4r2ox6Bn3G{`wO|NVL
zZlqHa-jiofZtP!O)pz>sHKpk>lA*qSUs!Q?!i<@-cMj{P^z(f~=A-Yuho<Kvy1H`8
zw3;fKPPYuANBcYZU(~bjxPRA-*(SW-zxg^#kPY+C6p!wsL5|*mCn7m>nZTAR*rtPa
z&0FGpbyc4k)2gehtENwQ(7(M-ET1*2VP4RdZ3Agm^aV-!R`-LJSj{vCwAYyaOYYw_
zd#Jj at 7XAzNm52DXoy3Ce`etQ7zidE^Q)z;Db2}<j__Ky$@OgRI;9=$c`-yEb>eZN|
z_|+p1?4&X3=if2E<EHW7AFZsBg%>%t2)xPY`B;a(!8*QQX?+fSW+w3F+3k(r3n1_z
zp_fARrkA#3J8&xjW@%=;fn^PG4*adjuU9eR%g>I(ucE?n&!TjLUzZY#<axHNB#Tm|
zQd+F3={aaDoe-0o6Ki1H{^HQP&yGXAs!^|TXX$jmJMJG;8Y9`yBP+{p21@?V!!)w*
z0O|4k#S+fP4v?vUS<}+8=(zubS^vl#xMk4^|EHnmVWuyj9&`WfZ~V{p+z#NU(1-q}
z82+#yPfl_Fl6H?Bofg77(xn7&OCCZ>^GgkVZ<qVA5jCQu;r2X3W~LuBv$rwtcG~dQ
zrXfmX_h;m4OyBXB at M+XzUyV)GQsZ}%IjG33--RzwfxMy)S{Mv#G(n#<aEF=JQ1K`K
z9zrpy6qt?Avim{PO9-=b|2p*+CEn++%vycr_)DlCzOb(*RmI%n{|s5L$f at 6jdhmT8
z#AwWQ$?wqG(uDmJ)w#e_oX-&=WUDriARKwOLDwfD=EasDR!@`DDDwF?>Kn at n(tAWo
zWQyr>mQ_A?e&D2vVpDc>c(~;EJ$rsb^syN|X$GAe(mTI2#T;Gje(<GP*n}qx?%ks_
zAzn3D;KMxu_>c>HKoq7$A at MPtQM#Y)k`MQUJ$umhkofqhmE}HR$tX6QoYaI|G8+CM
z?h}6S`<pOwtvrR^Jw;E#oACpXI*8t-+LzUP%YMYs*D)J*<2Ul#t|-LGq}&zuAVkKG
zvyRqh6_ThY$@tzw58~#>F at YW<)p+2Xjo_nb^iO|$0nQ}w at MB*16|&Bk(5K(@$CpGA
zcq^v=EY<*HaQq{8nX7}*Vj<ZB!K!WB7J%$#DQ>#17j}wPcYc?Qc|m=br=6HE>;7<w
zM6qMc at S_u&PL7+k1#<FTV;T-M1-r+F@%N^*lrb+7mDfL2*SC;mXi0JH5R&9*NcKlN
zPt;fRVp&>JRC~*bI!My2q^O1&gTKY!pFne((d_ at NJRr*-lIO-G;snf#-4y2--rS5g
zoj at wl&%(ej4vBkh>B;Z}`eYcA2>!+#-8usO$9>|Sts`(0T}Pkv=n(CzKh*piTuhyh
zembEiN*h4XeL|4Ihg<-Ecr35)d_JBM^hu5y%rD^64iZWG=vGYgU11U`&`Sdyr($s4
zx?zG|XFd=%>cFjK4nePd2Rqj`kmQJ&1MZ(A9SL`Ge0&CN1$F9I<n<p)RLp!`_L+j$
zwtjgYQEzg3m^=fZpGW&UjGqiHs;C<>khE6>Utj531mYzg2|QlXg#Z=3Jly;0pQS!>
zuY`6zgnxskq_l*8!VAamxR*(iGLjVfw3fBZ0`d#>EofOweuay<aSS<{QTB<yxkokM
z7<2J&C-6JX_+4gcbMQLUJYl4Su3ITq2g#58iMFi8^9X4VHT=)!=9Vx|Md<hDX1 at Pv
zMZE6gs6=wEDH1jA+aQx at Uc=z2V*h-3+Ee3a-LLR%b8;Qu;wJM|BR{9;6$VYL|6rm*
zNqA8Wp3%(h^7Vjj^1yg4-6<2u$Ev|NXtN^evs9qpNT}Z=>}=do{c2I!g8I2nrV<vE
zlIWd;1(JCnTDNmd!{I3&{d+7zKYwCi-$E(rf`E;_g%TNbKs6p)T<_(v5hXqoLgdHe
zU;<km^K)ZTplbwY$iv2s7d)(q at 2fN5S@*$B`5&_S`X8I>A^iJC#Q%cOzM1xetUm3B
zS?U#IjM#o~KGgAjyE<eLH6V{DkngY#=0Pw02IM$~-*q4KO7#xhIz|PrN8LtT>8%pA
z)00pk^PrdJCxoWk=B>0pU#a*!g1&%D5#k;~O&}}=O=93Q2Rk6(xuFrFo>TY%s(o2C
zQ7ui1`o&D_oKsNPy%WtwGa+>lJ3MjFO704mBE&WLdx&5D?1g_Kz*{l?0^q{lU>~=h
zf;PRFuS+gOnF6O|8$|8LqUdG#d5&h^ZEn5+8lK&Z=A6La(>;l21fhZWr>@r{E{j%r
zv8Aj{nLz9Mw;+ at 11m4t)H#4}I?_XX79^c~kdXo#1Bd<vW at jd)7N1$6e;jSZpTef+5
z65FLe9bWt3LX5xu+gM_bkiwgAB>&?c+Qye?4 at wF0rSa!HP~tYtQgK&Z&wl;lHqDG^
z<;zWn8piCBOC;f2W{o at 9G~wv*F*_8HyMNY%6Vs3=!y7|tOC&VS7FE`rXiK*AZ4-yo
zogHf3f|qn&^>sJ%QcEc>bO*IJ`btmQ%66##eO{MVDg$D8G7f=D9f}@Ao1qZ2QPSLu
zFEuxFmm6w|fEP)xin^0SY9Yz8kZh^&v++&y<<pY7U<))Qx<^->`6!HhtD6jQ<J*uj
z5{s$fNhs_yC55)&vk4l&`EZ&%DtUJ3<$bbxBpO)Uh{7Wi^M~E~_N@&C at p2T7C$Waa
z9+~b!9&1E1y_ik3S5%BT)YCaK*Xhh1nO$^fWZym+i7j6 at d-{*Rg8vT#9>Dtx2nQ6$
zA}wWgSv;cSyRijbMt9-6Tkd35pu28wW{=}9M~}u|et;IOJh%ic3#4Q9r{ify=q_{_
zTkzfJE at nl`o%rq`gv8kK1D;j{*=^M?o^GSrE=UjL65S?7*Q~UAb+};I%EDi(rCr?a
zVO$Wzr-l#kvLy#s;?*A@!|2gszaj(r{du2*sIoxxI3-BH`D^zr_lL9z^}_pGMlz40
z(N58WrsFR&2mSg1nm_zt16tS_O%KNwtHs;zq0!8vEhF)M)QdK`KlIZ40Iz8{I2^D0
z;MYN!9zEQ~(^Ny8Mseh`47mh- at H#<l9MdWIDfIC;_iOZp`_`nPdYn9#E_UayS;PE2
zP>OGw=QSUgmjizvozHCy6eXm3+obBSUVPbKPXAg1ge5W9?NH}hejHm#-cGa|sfurt
zx){e6lpuARR>Tl3T<VF at PD~iLH-aNMh#CX#k at zi~lSVfW9C&O>pwd$P2DLpSCB4OA
z?G6&y2{-u2j-?q%ABm(d^Id>u|EDtgSm35*yfMk&LN_5|5TAAb8~XFLFh1^m^W$S5
z1K!LSInZ{<67pF2s=v|xH}d!z>n7w0v{QG)3DVB?!gK8jPfS%n!exl?81KtGZ)C=g
zC|@CCwmIl${)aviFpl)6Wffutmr@)t`bB83z?1a^eS-XDruq))LC0rX8OcS?%G06r
zN|VxRQku?64A+No1=nA1kr;pfbS}NS16<S&mr?M at ZMgj2<(vsI1U-Y`&6OC|a7EW|
zA?Q>PT&0QNN+t$k!d<{KdGTZ%qox<S*R=eHiDKj}KQ+>e=tb_;jH2aQ%QdPUz8WcI
z%x-#t2c6cqSF_hT!H39OMneI5;q^P)iqMNZ1p at I+GIlrnZ5uzd#*ZB;(kmy&&x9hQ
zCIgj3nW;1?lgc48XgICe<#egxFS!t0X3sC55^_%QzIef3$;Hoan+yN&qi=rm20LKx
zZQsBzJ}~zS0)#)htMligQ*XYBPQLL*i)B9i<BndPOMd5He{JsktDbx4o%wUG3f~%F
z)WlBXF7hKg{s2(&pD@{l9DD9^zWxRpi612w{Xxsv7vLXv5lc61+Ju)j(;4vVr9-Dn
zH1Is5kZ|;&SYF8=g@|rHe*Da7_;=>`ar)dQ_xpTNx`+FMP`>p8kq<M^hj=<ifs^kG
zcy?06GhWPmAMpAcG*U*Ts8sZw^yHBmHQ`OdwLxNa+(mZ=LNcr6mQ`C=>}Y0amJxCi
zVpAgbdZ<qUPYST9_*K at 91jhAR;pjCxIsg52bm7LbyYF6h1HbXY3vb}{J9ezcXe4*>
zwz;2Nx$QRhA?B}}HobfQy{qnjXOrOPuj9$w5TKpFzxm;31eh6qGgYNVR|sZKPKiY(
z{=hdY)T4kK%=+FXy?Vd((F^_i_FZ&&)~eD0pTC7JAgX1B`#yaCgAd-1>2td3isiTo
z-L)+{$Nl5WTbqAIa&G3O57(b9z86XEfjGaqbsxKnJqJ2WrLy^%S|E$in?eWb%F8cA
z1%6LD(sxE9rz=m2NFQ2^kTB<h%{)_jZuPyRri`0a=)RG*J0fbxwsEJ1OnQFAzZPv7
zd#LBLt{zX~b0rfWddB_gmlK^0^j+?|n<tMiy0h+{hQ-gl_(Ei4->j@=n{Dn>1OGD5
z-dh!O7B9;B=wurH3~3`1or{fv&A)0bXH=30sCdGuQ|%<v3K*@ZBJw59tR}`#qCe%l
z*!<$2cbogqd+xc5gQCJGH($E<UT!yjnRdG0+K8iP-&ePzK2m`%(R1m9ji?01 at UP<+
zBrJDPAz|&jf1br(a`E7wu at q%8D}^(W!PZXi at s*G?vyEq#EP3$gGtZRYI%2^~6DOWI
zL+^fM_wxtb_ewPG-IH>2|Fq~U_kVG%K%bk&(>HtQv%7%4ocCYklp!Z^C9uHRXK3rU
z?kCWjkDTe@{_`^uP0LjDx%+3_7uO;KZFXPb%Z~zjUxCj=@Z%sP%r!%%dF+EN_3WnC
zZxl1fTBdLpcifnbwW#+Fb~BV24s|}jjteYv8#B#a%gi{_awmP#J&7H6sO1xU3o;yH
zNDtNoet#GH6!c1<3AMtSuhc{%HF6>|1CLa)^Dn4ItGR%NynW`bBWTPkc+~ZG59Jg+
z`XS1Ek{N(<a}x0P4~;Iv4(8~MJ#_BS^P2ejS$TPTtU^EVI?%rj<dE|71c`!8>}~Gk
zH{PKCPXF266I$gi9`7Z1xV;0s``|I}xDSKIhtaINg&l{Td|R5``Y-lxY!kFs8(=1D
zmC!Bl0UOv%t%7l at l$@bSLtmi<*X83nrGhE$J!V`3LPIO_H!Z%0W!K;H=hJ^)wHn>m
zbfCP~Fo4(I#{6Zo`<ABB|9EH4$cI<1#~<Mz_ijfI?E+OK-aj*bzrJqX^KZ<XLO+SJ
zh+J}ND at 93rahJV&>#Hff*sGJd1rEvykNJ;JJ1p6$1sQog6qk!G7s0<%NoKpz8E at k=
zmy1qmA`R*=MU3YzBaLSDRD^i<SkE_)4ex);@MAp`{f~uDm~1>o4H<sinO#(LtMORb
zkl|(F&TL0UL7qL;W-0RigL}({41daObYzIx7a?1a=gFQyK;>ytrXbH#;tVR|agyRa
zc_49|<VYIIpSGtuvpqC;oHGh)!Wnwm#Qx^-0$+L!Ul}5NMMoN9^cuAyBFv938Y+>p
zYK53(AgfjwV#F*9Y#CxA!lEO+1vtQ9C at +Qts$nQTDFvR?3cbb<<3R`TF&Q8b>{|_|
zq9cijJru&N(^8h9BEkrdB5n?KnvIGv=A}iZIt1+(J<VxiP1!CnLunQ9IT=Fcw9Jaa
zlnIthA$z$f8~P_D0~hj)IU%hTe>=M;xzyO$=w3*txIcz#VI%(s&j|u#jO3shcLn*&
zX&M`^uWl4!1X(zR=3JL3A^Ym5{{vs8`Xk<3;rIWnzXEUnzsLTc_E?&l*ZMj4C+<h^
zRz3KyLS<AbXd?#?em;6JLX2k0)uF!MpohNw7Ehs9o<Bd}yGQX)_$V5J<d1&GO5CsE
zXHj3e7wS9atLyfEtz3qV&}Yz*Wj?W(fu9MRh)5`wg at Qz4AUg@g%n*q!E`dO-W^K?o
z48pKYOGy;Ab%K8oMh|p<&&Oeie6{9wvUA9ZK{8|}u|PigtShypB(nwhz;!(86*LCL
zS3i=Id&%`mLNT+aWgI)MWe9!arI<+%jFFS)-fgX)vkM at ekWohR+><EygZNUAqJTdw
z*a;zVGJk9<Xvav=b00W*1f?E5>Yo0}z}_$KMlCq?+=Bc6jkNgR*oc2%{_!t7>tA2}
z`NG$@9u3&(Sf8_G%LDiI%flDkALG|hPvP0^0KS`{P776CrcR-xGA=CA6cd#gri?Tx
zG__VmOVRn<^YBMe1b at z-&!NhcvMA+Y6&-gk6|+r}q&gQ7?I^mMn~RIS&sBV%o10Bk
zEJ;A(<au#aKmt)M3FhGjk%enMHgN!Q;CG+F(r1nxd*Zn#j!m?spx>W(PNI3JzG>pd
z76<b#xi;24d*q?i)TW8>OXmDQtWg8}Y9W^CQ>HXjQu;7mw1y1}V|3w?+PF4;anX0c
ztSXE-OeyY_$2_k)F5f1j&T)uv`#t_%0sjHB?Rf+i$#90P5m<Ztsb>hQzd!Q~JMP9F
z4^yX~BwV5sUkf at Ec`7K2)>oo1Has#cOu?$;wK~F&zz*RiDmvn at jJ=oIrj(tFq6s5d
z;DT3Go7Mzw=o*@O2A>x71WJ-<e*cbJ?9mR<j4%(1q9iR)KN)L|D2s7a>g{3a3WGK*
zE?q_?Ny03NvgDN7tTxr0&n16bcm?SVN#?^ACAyc&d_MiSg4(8&TF%8Lm>fk#U*zU~
zk^A#^itlpaf5EPz{m6TIkFGpcZsXg at k$IrM2?iY&Z>w7Y#vMSPAo>)o&44<=(1Klu
z#;a{an;z|YgrmRq`Y1173RPF8ORbCwQ|MweVG0=)F9|alWJ%^)n~!X~XuRoT;*Ez*
zO8VZ&lx<q6>0ESNq9D}IMeQYm*5z*kA8|aQJn@{bJw!>oQXKKMjgNhVHdYJ#XOc6D
z^27r+v>y6IlMvVn^=kB<k&p}SGBFnGq-3ZYY8p1|xy0v&4JGHKSyT8i(V%<TaTA+T
z;a?LB6-aeM8yW^bSGUo<=RTWlNBzLR(c?Cf`e(O(E;+$nqi!W{+EUu4_a;H#D9%ex
zvAKLs<8^or*MU)zFtfJ<2A%wzXPz80sG;AG$_1r`IXPQOUpcsV$%o at cjh``j;>7XG
zD=Tv|kCz>(t(`pQ>FNR8sFC~DO&H at R$i3P56 at Byb*wQELN=>?LSeeyglH0f6w`=4`
zrON!gE6$LaF{pp4IX&7^(|`HFx`v2^q<hDXM&m}UuJseQuD3lG<z$zUNkmk0>*ryg
zgWkyjj%2DQKQ0#LQSwK~D)VgQa6GRwYc=G2MIn=-)g&PkqY)09RXW>Bvjb&k`W#>I
z(giYZe4N9B9~?87VTR3Hc<ZezR-hUB0mg!Nzx(?*c_F%jN=g9bjDXIZvYJ{p9i2S!
z+P~0by!Vkuo<D##TjIwI-n^oG*prLb^f+66$CD_-mb}?Le$T*x&mW){-`FFdw+QXv
z2~nP2Wc<W47+fkaA33Cje}$qEjOrr**AxF|oP0ozj}VFhglY61{gYe1WXbly!$g+3
zNrazsiw1~%(+Az-1-?sd=bo*)1J^d=h({h7J7F&>Z26Q&;rYZ3JfE%*`7GgQY%1G^
z=pD28e)&@iUV2R!v3JECjNTi6_{u#>7|-9h!uOSJypcIt9`h4rdD!wXH4ITfg?@a4
zE+Kj#uEOlWpLk3UrhaHio2mbK5zq6oKCA(MvSI~uN-#986`1rf?v3(&bVHk4j2#O%
z5w~~^CF(L_C-7SxqArE+xCtoGacwEZC<OIRw2qkm(rYC>X0798nepU=#wAM at g`(@b
zb-6!$_4&5pZH~KW at fTkRns05T&Qc at Me0H27g`BCQkg`AEHE0jOPf;ToIS-HL;Xkzw
zMteZ+I(VioWyeuUD!)u7r=k_oFj=J<I`;Q__Jknhba|NK93?*-<@gS|^X&eEho7dD
z(MqL45zR>z|5p6_RxAHiTL}@Rf=+{gmvPdTVYl6rYdVW at Bc6sdFTH%+(W7}D%KH^x
z!t-&%app;~mXgloKH*r1OA}60T1L-mr833k7V<!Onvu}EAoo5zVY1aOa^SZ~3;2iV
zOggif&UC-mEX*-E3;q3b+*Xh&hMbVYUZ;Y?Zv?^#ra~gmXa~RH2S0(IWmgcLv8_Cv
zpT6_J7x=;d<AH-N+u&06m)4Vb6u^fAd=;;IN`#m5_<bmf8NtJm0LQy{IKgk?;k1aK
z;Ng>P<lzio?=K>sfKTt>;jBn!zX#5Q^KedtYXmy2pRq6UaH&8ig{RZ{E4t+8JHNOO
zQ`ZR{+`!U2Tqe at _!po-s4;T6D<%KIH8h}TL_#b=WyLtR5p<Zhn|8Mi~Xc7Ok0B`+_
zOXcAT0Zy$D_y>LjJ*Y%@zt$u_{ip@{iz$zuSrZS}iu7l-J}lC?%)@no`V{5Ti*ogA
z^AjE(BfwFj7k at Pmj}_<?`PhZ`L%}XTQ{Q{>SMhL)$N%jWpL%(CxBy>6wb`AA3v&H-
zUVz_?BPHL`4=ZfZI;Ll<L?PkEdEn9?eBseCynVmJk?3A}xFRK*@F|VfQJ=O-1US7E
z;5GpQ_;CUBwe-25^hLN2{r~vT*HRPx=%*06ZEzp@`VQ#pJEgDhfWF>Czx7+mw``oC
z2WDj({nqcKKls8u^r7#+m;KCFKWwc4r<d~ZIA6FAec&?){gmh!fgf^Lr2iiu`oL#U
z`XXGUze8c;646Tcp#b_jJoJUTBApy=f`>kr*lNdfJoI^ZoG%>c9FRUj)&NIqxJB$z
zpubS0|7h4Kt`hJKJU?)kIVI3xN&!D5I$nUI40fpiXN}w<fG3FX66PyE`g(2=-0z4!
z++~jip|3|7+ at c`#^{9mX4Cp+JBe+y%3U5a#^(4^G<mnT5i2$efQ+Gm-epvLM5_S~h
zP^8G41v}DFtvv)d;1l=}U$_r_HNA$44MJZ{r?md7jectnKl*C4Nub}_!;iiQ_o1()
zw^Cb!(AUzjRBng-Yd!P>_}8|huLt_U^rP>TzP<zc9{3R)$*g3L5&uCyGe)4F!_xsc
z#1zK>|7p=5;I4 at OGM5egSdQR_)Hz(@!6$G5-vb9fIVeqo=ZJ*6osZE-{v(Ld3Mk6T
z&t<b&n3Mu1KgRMLjc7ySF|S%qSmKOy-jS38Nw{5;559H!#bx+3LS<)q|D|c$nU^27
zDDv?ex#8wU`fK;&Ra!|BU8PI0mknRpyVn%c_}KrCyf=Z4sz~3)>)yWI9Rh@~1`=7b
zLRhm95&}dBJA at Fn0Fh1hMOg%KiArw*>WC}>5seC>vZ#Y0X<1F%(}D}4xQq)9F5`^z
zWBfTYxQv0m|EHdNJLyCiop0ux at 0|aq=Y8tlx^-)L>#3@@-dkzb7UT?9)s%Tk#Kw{t
z>r02kD{8@@?AV?|2P=0D7$4vH)^1AQBR_RWY22<;;*~+MQPJMEsa at CRiO`&4c}un-
z>hsXOb~o?8FvkMgXitR>`&wR;v%74o8UG>TlcE+-hkP2!kMRp->SleHi at JOnzbHIj
zYzZE=j#R%vzIRfGTQKLQszb5IH@=>lx(WTW$qCIfOobY!6`@e=Lie~fX_>jB9mBg=
zrmp?p*(JBE2zq;Y`<$LOrg)rhbmw{M(Al#JbMw5tmu-1<a9rXN<;Le9*zn at T%(kt1
ze=%>l_jQ94X_g_ at v*`Qrmv*5xLyWbSecxAGi8*e(eknK*dijpuFF6;h#q!rq5^bqU
zrmW5YCB1bkC3VE3)8cRJ-p4z6vbTGm#UFln)J!ke0Qv6<*H3S at P)QxT!+5Pv_Zzcr
zDhs{5xKDSl)RQCl59`a8QK(tIFz&y#om5rS=Ld6aylbpIQ7erxEN%?GYs4FCPt>aL
zcoCr;Q44K5!RBGQX-~3_OA(i3?N6TbNp0FIh#79AML(ez)$Ym?*?y(Y7l0NiozZ~N
zj^C6_ at hW4oQ2UZ852PA>9T9A!7V6(4pAn%ljl8Y<5I3 at ZJrI{{#G%do&9pC>^%&Kl
z&R39jRQ<HUKclSQBkkzAw1`_OyhuAbJgt67drh5ZyM(l38svKkX~)#dx2^V>nrpWq
z?b!Nh5f{?iSW|Di#Ux7y%cpp^Gt*)AP~CPX at +{EXD?Y?0*Nabz+Q#?!6z?yEZv7G2
zNIxz-y^L2~h!3S7XQVecY-@>n3}KDO`F4eI_%PCcXQuaY{#qJrtoSk3ldXl)g0IUz
z*jRN*``FCC(6sN#LF6Or!?6&~Maxm7|G~&#6ko|V?TL4^KZQ7nx5CzY#;*#Gm*0hz
z+c=*lhrScbdPt77H2&z-q*=9>9NSqqMOmdiQL{u2l9G9*ZT6&Tv$e2f2cHbH*`B1$
z7P5Kx)EqbAHfIZQq5ilrZ5}gT+@}XDkJF}VDSo0&W$cyYA at CW}ri%KTxrWY=HkDx`
zVeOG?@iBE{eH#h!q5AM?$Og0gxwbwSua=^a&KMsX9v^1owfcGfVK!c?@chGUyjJ1)
zhuL^$eApV at 0yfOgZHy$jHcS1$5<X+-t=<~lLTwt-XT3GrjIYg~`J&IweC59|otWO*
zJfLa*7>G4Ze(2YdlQN^_U(I7l$V`aQVi3oFg1SvgpLKT>4X}+|Ip at Ntb;`)<cgubX
z&Un`O?yL>-%I}@2w0cEJ at GtAwK7GVAueWUOu4aeY7FJ!}c*AaGjdzZs`geS)sDGH3
zVQJH{t2a+kGIv at cr$0XPRuP)-WxM2wUE|;CmWL42jMDkPIj3j!wM>|>U{XcV6C*}H
zc|cJ=8B at G>)I+1s at 4jd57wZ<@GDB at 26Vo!<Zu8oe_>4I_+h)ueye_WLJ0fTC<WM<M
zPyCB&W?p9=B-bw|tF9XAT`1`Kk!c+kt{go1?YmO?5A7OO<h<JYSel^7R$U9a-0FR%
z at 9dt5p_1ck>r~sfDYTnfsDr?vdVNm2Db(k9YOd`i+L-V at 582~LKPJ4-WxOcWKeEJG
zijZ$F_Brmg;g%wP?Mg~c=dT-tE&RaD+T~vDl3n at 5?4t1#<OHx~_6=|K>@k1As)?Pu
z9Egul2i^W~!3NLjkrTRm9rtv$CwaRy>a#qqTYjiaqfN?Cwy77}#Io6 at -x_t4Pfc5J
zj+$iHjOZ8IfNGLxE6=!v878V->zvuitlL^|2TSD0Zu3Sv9BKJA!7qa+l-{p at 6d$Q3
zE$^^kY<KU#;9uO^z4vT9n=|6BP#Km=>Ul*&`xNmZ`;<>P&o*fkOIs<Odc%F>aP=E`
z);SRdCVzw`J*}M*HdWe8ufFjs0)`cpWLi-%p_6uf`L9=V40#KBCwg1v-SitT75vbe
z{AG!qM)uy=ywA+MejAe8PIOlnuDxej at UM%!OBH3y%<*$(-Zle+B|6WW5Pe<FVfD_L
zuf3V}tkPCV3htYYewa1AU88ox?kMljN>y`TT(WOqta9COWyJRtXFho`scmBK$Cm!4
zbiiMBjmo{t9B29$wn((8k6}aCx0L91O{X=@R@%dwCqw0))P7 at bbd0{Sd!e^`>cVB+
z&9;<`o}U;$C~HHD-m~(rpEDwNWB<-Qz1<7vzPu}M?v1xE at V%L~Pf?XNvd*urC~4cM
z-2m6F&Tado81=Ddp+5cOuj7Q5mHdmftL+2rO1;v%UcHhbg}16Le&n^QN!3mZal+W+
zXrGfq>E at aYZjje68S}Y(%Do=+%lISay09 at 6Z_i@<(eQZY-%|Yw`DW5 at F7H26zY@7(
zq!3*d={Ik64OYQ6=Ph?W=5LmS#tpVQ7I~sG-8|A|TOGXErC+*jRPi_U`89v~lc}AP
z_bXA6DXZ>Sx at AOh>FgujqM`>BjdnN}T=zzcF?T)l(9yrHJF2J~5<A2-J95t>W9u_4
zf8)}-w`^>dm6Eo3>5O4r6g6 at 9*JFn at X$*@Yc8!`feyMNJ^kMh5v<g+uSGF{?t%+QH
zl)B2rcd>M4kB9fS*)G{K`R&Ydwyqw%#~cY>993|A^85ovH at E09Z|370Mo(I`<cRk*
z<*QJUS59|}AFxsO at XCU=g=wCN4`z2#)ULz7es<YfVbsU2p+2dSebn_es}R$so@(pW
zeMj)m*Qku9q}HkOLU;qNTCrh&89l;OTwNnV95LoGt%e-T3~{j0XPn2Xjd at HyHP!`N
z8smNDocnPo-mWqJmGF463F$wfU6 at 4<;@*A$cHwn$mF%k01K%Ps^z%w#dPuC(g59R&
zT{#(iNV(bjq0*`(fAykcVKln(b#2oNZ~v{=T2d3G47#y%^3eaOrHXgZ4f$y9__aLe
z%eC!Y)S-#!C at qz+a$3r-4E1VcQ?tXfUwx%I_?^-?R1Z+1Ht*o(@Ulq*lb3t`?e<#w
zp}k?{{0Hp~>jP;AzQwgWD-<vL0)2Mcw5#6=*^^Q~h=0vo!(I)=%eEl?_3(IcOR%wa
zNJ~Y&+3e%h^4=09x=U|LdPY|5FBhiO{`!&G at J`7z4m*d8Lt%W?mdo1eqXUvUG>u+3
z^_!{lS~eZJCM$o+%t?=L3V#3N&aO+8nKTe5md{b1&FIi;m`7E5zk7e$i0rtIU9&QJ
z^hocQ)Ma45SuOJtQ at mfUTfA(*V>A;_+-_-UZ_+8@`mCOvn$+5cmLIiLd73<tW*Nt1
z>!gt5C$Y6v<G5Aqvj>gNn5w9+-Ff+=BLioS%Slr at 1xtcY9x5)J`(elSZTru?|EK#V
zMLcWYv~hJtVUtE})_H%o$7^!H at -6g{AWsq0dJz7FTDqvF9;DCd8{cbdW-S at qKV^2l
zsgH%xO*@P&?wCJd`K&dsJ%jcySkUXGm%J$n$&;of_b at b&k=3<hkK{RHJ9ba;s*}*@
z_A_U;myHhfmvtEJsavsbu-_2RexuFzwmF8Mt at X|RD1E9?@0jto*7{VxW%_ew{BGKa
z^v&}3XIogmYv}ux=}q4(p4Rz(kv`;`MY(mpU%Vgk&9+dE()YV0INbUO^KWS>V*az4
z|B_&1+sm4Q^c{?Smc?aRQZN6G=KijGgZw+0@%@<pCjFH4RnA!hjX6s{WqSu>xU-Ny
z1KZl%(bWDPTxRW=3xho^rMZ at nNoQB>f?D6Iu$&#0R2bDHe|~XM!Qg)RJ#w>i3r4lT
zJUx2S#$^w^H81#av^Pq9{I<LApSokt7-Pr$@QTN at n~Sul4xO)S5gpmA_ at -{jjf*2=
zV>=`@kG`%~&+$pAHOpbBbtryibY at QXlAiH#y=IJ56w7aoJ at y@U)$;u<w56k5l`=c0
zUBj;_o2K*)Rw{kB_Aoq{9T$c?m`cm}17~^{CM1NMlxtG!oRq=JJMLI9?~&Sl*WEnR
z^e at W__n}_9)Ovo?*3GY3fjTc~&$vg7`R~EtDQjEy=OEhNxVOdgyd1`SX7l<cH!a0F
z->>XFtwn*+1<MOs#N8IG at l3jLXz&v{dH1G_EL`^7$h*GK78`0#@0s%3!Cl%+S6XZ=
zS+(k}!O>kZYkiK-8~zZbRju`j!j<Qz6z-I(dmpc|>d?Fr={nT5h2Bw*;GJ;4V|aCy
z31fE{Z?bl#-%;CU)Wm4}{lQk+4D}yqdmg!rd+P%A7SUXu>_`k_u5qBqYFfy~*(P~<
zD0GIXZr`NNxqVFc)|s}}{Zo4OkIPqHZr0R2`tSp3quZTYd;K)^$+0CPChkjVmXfq+
zwBz|_y0yv9Y1^u}d6T&O{FG;-A_ at zxD~KHz+ at dTyI6tdf%2wB)gyAm^>CXDfxl(`A
zvR7S(y;?V87m*ycYc}iAx>du9W5t|1>;89_=Pi8vmW=MH)>ik<xMAqf<E^zT-wrJA
z)iT4{CMP*Lvuj#2d&WFPo!i at +5Z~u;VZZj{_9t}v&DfzWGKaQoA*<MVb|UL=Myo&_
z+8gt=<i*eGVCv#(6`6hC`!|JGWW?a==GOFtC8HfL1Y0$%&ipyGm6`B#pMl-I{`$44
z^|PCM%|W!$?lj}2zx^2I-<v~wdNnEZt<mylnO<Cw>%H_Bh54cC;*D>y^oyyV8vZbF
zg#Iw>n<Dvp45kw&ri0Sb*x-jbHF$;${80BaYudEQ+M=6PrQ#ON;#Cq__v^TPv}4-H
z9!VQ_^~*W_#xf<gTc5OfO@>Sz*fmXgJ2~~4=jM&WaOv28WV7Bo58j<GEYSOL%W=ye
zMKjTZzaVA)9%tyNn>{VGWXABQn^rpm%kELk6*SZz%GQJ~$<5m2T#px9|1+bYN3#|^
zdXMcs{tv%bL|#<NsOOzK*KXdR?zhcp(mbP2X>)t$_Da*Zyb%L>CT8?Vjqi}SW_{yD
zLksdIPMFpxIqIeS7vKIgBYVMs6-&E%mHfoyEsLUB_8iiob8f*<=nQoaHnsTG{nS}6
z)2htOASGI4h0MLqtviRRoMeg5v~qr76O{=qyUkiTarCGpZ=-cf*KHiybGK3)d}epg
zp&N1A=y_#9(x}lBSI+9 at 9WyOs`2!<XE0K3CxpBzKo0oc*-n??ijZ5xPBD~(!BOX|u
zF>OrkHxbK+=GPF_ at FT1DipKJHBoZ^sA6~^4PoDEMoC}68#Qas<(AFfTjru at z+n%|(
zLz*_v>!qyv-Z!k>x(SP3#sFUAdS>979`~g$j#MM#Ug&@Ql%ei6O}%5X3p;d;ZQpNn
z-xSTO>{>UW*JSUQnOiOPwy9I^?U?<@=yr<Qr{sYN4Zn-fC&KR{{7cKenMrlOcrDdu
zaxO#$^y<~VDrsY;E4|ux=$=tHu|v1jQ|{>$AHQ<>(%6J%J+2>Vv8=e~qp1sztqy)X
z2s8KK7pITi);Ya%YSW06{sXShoe^d8_`L_7vNezI9oONGIg at 8~Y|?dsVtaVnw1-y~
zbc|>g+843Tus!7Ot%v#1oA8 at XZT$b)w;jEwe$jH$_E*>>s_{J`Sf+G0;<b+$Z>bmm
zN15KfyEgr}x_Ip)##_SUMNF_U@^4j}zEJ*nr4f((Th*p#Jo;oJ>(h$AHW6(P^XMt*
ziutpZC-2J|`{rYdN6(tHVtug9i^{(CtrESK!NGSwnl!wkleg0jZP?}OQ?oXB)#pSg
zPg$0<L6ocI81}WmlF@(UYfm)DyGvf-qIJ*DZ?5D{zrH~Mm-C;S_?Y(}UFDb*9rTG2
zZR}(C_cT~d8fmT5Gm|qjIExQ5W*7cZW$S_F&rLQ{qLlWE7HheDS-Y%R%3inGY!NME
zx)+ypN%(_zLG_H;FOFO4OwXP+t)G1ilU%;?Trjxhj*Q&a?P5EoPM(%GbWFLgU-q#f
z!)}_|XGZ4K$&PtDxt71A?G&%t<S%?h=2?VA6VdO!(HqK(e|7c4widzl7^9azutw=!
ztsk<!Pvte$#2K3!q0AN5xmrZ at yO%$?*avUrUQFvPM!yg>ar6t#Cr&RuE+Rx8bQ&Qd
z^q2cJ&+0c-F&;LZIDPaBF-8jgWg~^i3#Dj|6z#71I`VEi at hUInHJ_!-QfFCb*_JEI
z)#cXZwg}}0dB$G4`hzoGe?55H>#tiseEs#;WqYrz(!L3PYyBQ=xjV19iWV#Ak-<X!
zNmDEqE!rRbG8%K~4SDL%9&J4>Woj3c-9(nHv1|?h=Y{GN#dy|Llh2Jhb+W0g)kGyx
z?W+z`C##E<1!|*aqM6cBbX0l?*poNNI$Gj`SucJ0u=V at kkFsu;E1~C6)~~U?ug>e-
zCc2rWWfQw1ED<qHUeQ{<5*P7PhiIjlu(z4q);_sWhv;`NzI(BGHvW?}&c#hyi<s=@
zklvyCc3^!w;Q#vd?ZEnWkk1)k5#6|Bta^jO-!!$gSK|3|rt%0k|B9D?HJx<ja(26p
zO%hT{7fenV&^tS(OS4WXrRsu-UHV(IJ4ZE6>tUO>COWP|(<bR%ZF6sphOV1H*Y{D^
z8}gbfszntRi#k{+|6N^ovk9BhMzl~8L;{xEA<85%NhufQ%JbrRB??-%K<gH0-9oLm
zjJI5Q)&KBUQtL_t_5POjjo!!lqp*ov^CC52Re!Q;s?8q#uHR6tzfPle*2<3m>(|Q8
zTG{3EI<j9SeO^mRgC?3JLVHb8p at -H;fD0|-lkM?Wo;-H$zP)?zv;G+T{?MTYb at Sv!
zS~NxcWVcwA+PeAE%({(!p^+R|krEnn0R87x#mKM-TeN6liMDkTT`Zk!vZ|K!n5=Zm
zl_y!#bJ{mb<e@{s?`2(Iwc7M-)D?RPOFXG${B?bsSJyPXaYE7T=rxg#Ke(yfYU`Vw
z)$i6jZm<8&;=Cxk&|Yc$Q<Qyjgfdw~k>IkCm;GtA9T3G at M&bYZt%_o+qU7`N*`^s)
z(eNcDoy<0V4j}1rgX;ZQTRm`ir!^`#-}*5)+`N*rgwQZU8oZUW%$1#QykY(LO=-(q
z{tA6{h<vw;mU(E5#U6p=Z*Y2iBdxa_ at fJDi|A|q5pE>fC2#kL9asl3rHQyDIq at 5*E
z?f!?qR3iYPlwhpF(-LL)A1h)es!)diXdlZ8Z(=<1$ddLG<fpQ-pUTS2G!`QbQW<~C
zDdca&$CxQg%gRcbSlLuIw>G_QtIZSXW!jbv)6bP}gzBK%%(|ft at +T*nn>A!2S-jRD
z&t^uhGM(KFS>c~*-!fiRjPK9tqddpcD*O|sR)1 at p5c*Qk#`eF%1`W!cf6MT~wvT)r
zymHQeXWbzvMLY589sS#TTPi=E?Vsr#IbpCfGbgF`#8VeFD`#28tpl at 0*PWAuU1XE?
zQfSY@`&Dc=eMpw(uwn;tf2eg%2&+=(w8X4>R- at r%<zL+;*W0Ga)V8$?Zwmf7_-*j5
z(ol8BE2)20+F#eDeUaAYSWZUK_zf+z!bWz*9=x>Z=7rX%j4ml{+YD%F>)IzFwQa7F
z4Es<vW7XJ>eYLpmciz at 9;gQiXX%os4J8W94c>i$y?XBX5C%21im)o*Mzrh8jFL03M
zLm~fl4fB`!`3;)(Yv^a(_{Fb5Bc!3!S)JT<aL4W$DJe=;O1BYLp8MOx?c;JgHXAhC
zQ7|VWrmSGhw867_#uSXYbJ;_|lWM!vvHjEADN47l>4iz{f>kk1Zs?tsrK&@xtjp-W
zb!bA`i23RFpM7wB_vBi?xYo%MAv)LlHylE)5n~G+rd at ljB4a}TtV5DIzp8CS>-GuB
zTkigF{Yx*c|M2cD$?X$bN5s6;;rc;?nziWHHnMHU{6Pur8pmX}RDUWgOY1hW&ycj{
z-t25|^OUhY$8_)g;FKtDWT(v5?Nc-J+q52<*0XJFMrZjmC5C at b{ZjPA93&DO><{?u
z3jG{!p5EiL5G%6!w(MKK?_=6%-oZU@%idy3+0u2&@_sj_wX(%(vY&hR7;w*H&%YV`
z&5WS~y#wQN72Ew~?=98ZwCvR-xeG>GWcHZ3y&|nm<5QQtG$8h=p)J#jAIf=O@!me{
zp at PYZdSYYg-dRf?8I$A4pQB8>eah(gc9C&89opq~@87CX-MPI%a&IR6ogqJ at B?9;D
z>&8IXITG&HuX2ur@#cI~sZ?Q%#~6FNE^K1jK<R11$jy*0W+nH!>x%kGxqVQccTis5
zAaC9$Dc7~{*R|VqasAxhJpAX)8#IXLZ8q_IOX%E7a<h2#+2E$Iv(lGTTW$T4jq at z1
zPrN7$UNWE8)$?c1&GR#r#u;zv&j>ps9e%#0^)=2goAJh(2J7>oGY!^pVxw`URGw+D
zjt-q^kY}2VJ(oPw!1(>)@n$~zYR^WrQ3qLD)#fuS{7i4i?~U}s!q4=|_ at Cv|O7Yd5
zu?Wkjm9nYsj73;JW_*LQ8ljUM^6c%OM7z*g+S)T4$;O%7 at Ut88Ol|Gi4f%Xm-E+CF
zS<@{u?Wz2C!{pC=&%FGEWu|Rg at Ub#w4u1<IIN93H`YnIoCAzcugDb5$&RVpq^<MVP
z)Cz-dzWBjwuN5p>{O}iFk1skrrO*6vmb;Y$`lpu<S>OAcXULFXb?}YLH@`P~)~;!f
zbMJ>$NbShqK1svApz*WT2yx72Rh5W{#$s5L=*zj--=y^sy}tZJZglb*M>oxDTG(_}
z)8$RA$_*{~n?%MRUB2Sov&UOeq0I_L><Q*7{ym(-f`1QAR(m4<C^;5dcFN4?Z2ppw
zbj`(gF}wtwgKsNQ)!xG=TVxh>I((}|yJJyOi{Rw*Z_2+8eq{NeSxR*J^}S=jNoBL`
zM$4Zg(xa2b3UOQ=04>_JV=#S<XS4Av!+0ii<C!|$d^W>)uURvsFO0Su at AKIf<oU;l
zX?PZ)eXGu`muKCxNbUXx&y4cI-ZRQ=@XUNK?AaRIVl9$&X{5cZl+>%seJJm*e6I=W
zKBr!J#(R_TOtz~O&-i}WdsB?}l+}2KcB*&QzSrBRr!|jlsP~?=ZA1>9H8$Uiu%)Q^
zp=a7MK8v(|uIA$z)0lbQh`Ou}dk=Z4_nXfq<JnX^i!yZ0XU4yk=(J6?e8;+ko>6z#
zct+iYJ-aVDSv{idSEKQaX=>YGkC-l>*`k#T;q|<{3-)E9ZE<vxdPt6G)eEb0nqf;S
z-IeZg%r)=aytC3h_^uR=388;s8E1V at j*S7vUQjwgqUCS9PWLT*aK&rqewcM)z{T<7
zx4mxp=5mYRSAXdqI%{NYsU~4wEaH4NUbX$RgL&TR`(JzB>6M>;&3Px|n~B{o&r++$
z6s!eNf2_67W*PDN1jc_=8-Ju;{GY<kn+}ul;@FiI;eIl;pO(k;slg`3su6s*&JL9R
zva3E{74~-lD~)`4*86bnIn-=hE6g|9hiz&E=a`FrY+5Faej$4NwBnb94Lg~seME)W
zZoAjs>*ANa^P1L8I^Q<6aoP#}>O^L>cg&*3oeuA|wW at JEJbTy6?}yHh%ClYa{3!cc
zy)H%ceCDN@&2qmJ9V57rsGfb at kD>5~_pc;1T^Vs7ZX?V$i1uYcSO85w|Ka_g#y4GQ
z#@GJWtVDZL%;z+Rd0)lbmP{qn@|^gctwKCzjS>6oJH-my0I^O at 7r(=9`~}D!Yy$@1
z`G-jVnEHj7i|}K~O{BjU@)@KIvI{a7BJ+6=@(koY$U3C`7V?<PBP7}&u>}>s*Ls_X
zww8+1)-tim))irtIIZmzr)}xD*TiYHM2cQ!9fbJRi2oDPTt+xXtkTXIq4hz;wG#Jg
zU+6z!|942{Y5!W}TkjA95O*12iEN9kGs0I{zR)kCUHh~@i97J_5pBL$fpCR(QLIqk
z7QN)PwS_pMW{YYyTmM*l(zv$2E{@1}?T<`<M5eQh!hNc^*%B|Z at a#G581!|Yn2fN$
zyw=i1u{A~!>LEpwp)6ni?Vi*<!UIxAkQtC7nFjSLfqZ}sWSr%9Xy+dd-AUccI6Qj~
z@`{YJWQrM(Ihs&b;r-{N{$>B*J|6KK at ct~kUu~}z8%&u4-9JdZUq#Tq2-z31AHoIw
z&>!+7`XY$XhW?2R^~2AkLTQI^KKmj}WM60>AiqfH3wpnr*gr-%-{^;MK_9#d{cl3}
zDdZCMZ}vk&VgLS7jF5d1F0wD!*D^#~+4l`Yw4GeIMo5mL&)I&-5y{t!zZ^<Fo9|sc
z1lO%C^gr4sB79J+g`U4eJI_Ja7KDGt{dWkz#Qh7<Lm9^f_^5f2|4MKaV?^?l;{;r#
zV7#csNVA%0*UJ!#hjD)l;oZo0m{4UuN?kS#Z4U7!uHWPJ81isM!!Y7Ou_~e$+KDkJ
z$AK9-YVYN^#Mro2D95ZEHw{B_M)upU4CQ#|n3EhkRyXcB_8Nrd`0ix=OyADAM~>rC
z%xA42kE1_AeT_c0Jy4s5+(Lgk(e~BaUobE3gwEgA?`9v~B_iw<m?PfhSc$Z{*$*#4
z?~$@T7*~g^mobl-y0jOF1;}rWeLKcWOXQn{a#{(mIhPHEZsu~_y%7Anp%>9Mq#xUP
zaS-{uU~4Z5tbU|_NWW}b4o-*KIZ-?gDbdQsLfo(5{5(<I!28yCj`m9aSiXfE5Utc3
z#OcPf#OcVn;&h{2wEKCC+`R=<T+6yO8r*`r1b3I<1b2<%!6mo_hsL3CcW43xh~NYZ
z(n#Y34|K4GMuRsFjXd@~XP<NKx%d6=zVZGs-aqc>>RI!fRdlUUYgMt<SF5UaC;iT!
zZYI8ge|v&x`ZbX%sVaeGvrDN+ci9*WK}=Y*4_&DyT}7{TuhiXnD|HSv6+h`q+dbQH
z?xbXzi}~44qrflDi*-V>6&=0S+3lx7Tck=|Bd at 0~c>vH)#_Ice=C at q?1OL+HCxpMM
zjmkCY#I34Gse-(~K>uA4%j2`R5!a?pi%~s9Fg`b6ViPGGxZ#q@=4}n;)mN`uE;m=8
z*6G?(rMgH}4*{Mj8X3yr at g2r09!Zm&x%P;DsJ<=GbN06jk>O;X9OG=ie>Uv&SQ;+b
zPwTWo>;h_`wdJ*6-2Cppa8B#-u=Y$#<8IVK7SrOa;={&tCJe%}CQd9LPplKeb52f)
zy_OPR62^Dz$o27MxmtbO;1N>&LHu*Jqo0P3#EJVjZcAF=rNCC|mL#IqyT#BotV)L(
zOM$^iRq=p?-{nJ#N+6{-V9v1lC*>(&nIQmgDR=FM=}6SM_{`zc&EfB&PrUFXSkE}h
z3hK3!z6Km8<rMF$c1)P<%BqKabMQPmoE_p6!9}>Sn2We52Ojz0vr?SF!i4T}2kSTF
zb*(`=kz!jVH%TP|wxpY!zd)vS^HXY-`kTAvU-=-839G9+kA)T=ZYPJ{J0_}^;A1Ti
zoOgMpC=r3b(>Rm`*<<fT_D6q65bSO{r1goe*PPezzNpP5!ZO*hi_2wzOKH|6WFC$<
zA-H=AvB3%wn3inoCO=DevG3>ViM)$AT at 3_EpAb@c*WJ8rhdm#?9t`*<c1)6~XbMmT
z^6(IWB45kPl9g<hc!XdqT#g(vjVf}k at hbpgkk;7Xs6~rTEF2%@8+N7Bg`MM$DTq1)
zgkKEkTU{CP)RnPW$u(;4>2SL3TcgLZF$p+4hpMGF&vWs2wY&LGhmDy4*F4pf%;+c8
zH>3`C`q=}SuV?z~nnY#*>t20{MAD@^C=E;XI#r2Bp0+uIGE<43pDJFj86U<XH=<2{
z+nK at Q>dsrpwmYWi7I<tp_x;jI84Sha-Z?lKhs at mDAYa_au$kX~-KW1jY>GJ>cTV1B
zu)Z-?I`8-<sdy4!u)8k9xh2?2Fw|-$i}&kX7=K^=W2%_!7VBuKXLV@@VH;???oPub
z!|7IV=1_H1pq0u#NBkQHM2y-#k(5KoPTHe7<7DD#9jlGF at LTdC!jz_lCjEq|Ss<G>
zvWcqCf1hYy+g~o*pI~6oi2r)zs_(p{#h~d$|H+d`VS=V^vwf1yo_(vh{g%7j$3ITz
ztoN2p+oDe?E{1M400Z^r<4SpyOdKwheVSk2EIOLUi!sZYczvUGsnZFkzf(I6trF5j
z8jd!yF`5B8XP*=|%D<mewOpoALw?abr`~cm0tqo79YRJVO%9qrc8c^ZwG@%n2U6vU
zfnCVn-{sbcr|;(0QId+aiYd4Ava4oLIaH2Q-<H26LYTr71Eqc)`Y|{S%H*0uteN}f
zsRKJl?Bv#-eJtYKC59`x6lu|FpSO;l;Cav at +Xdi<WaDZ#nEo9Jr{i&^fg+`JAHkAV
z%@Q%*j?XSg?s>9G-ICu?zuOHs<(hXJC+l68ve8kaQw}7w3>500#kLIb(wl>sj<dp2
z<+g4KQz*|pXET9v%)@&shJj*?OVd^#Tx8%jl3tT?Q{}SpjeVxb${}WzEP*1ALZS1t
z>=xMzQtQ2rR5j_3{^OO&>rBHn`xmYy5#Cwb7BHX>M%{sE57iLm at 5JcRTZ$Jh$L}<h
zDc;wi?J7S$-~j%nV at Y#6zVeviA-sLTI;ChixLI3T(_KYgeEh)gewtA@<haR(--JpQ
z$CLebt|hxa>MXk)urkrx4i*~bBQGqDU_H;Dd2(H_fA at HIQoN*y0&@EZ+7S{>Ag6M*
z@(8Ig?{^rRZfR)`9Yu52O4<Clt;(NB_S29-Z$UINkXTo~&Hh7h at b0<Ix<*Jsui!$_
z_Y7pnY5uJkbhO!mAJy09J}SnOzZS-0+->)c0+(%^&4A5Z(YwLcs$hvRAbLlc-wH-P
zJVGBYtDb%v-{J&qu at qa{IjU`{Ofl1@&9-J;T1+l84<ux7)l0Ihti8qWdH$sJ9*Mc%
zmy_DA0)7?=Fd?2)ma#cRp>Gen)UpDfvCo{;LK*5*P8;P|0#u!&mXk|={9gZwYa)<v
zMft(46|1Mf5ovB6k{rbKEi4_vGHa6Hw2=GVZ)P>cMfv~?G3A_o*87ccc&mx`g;jYQ
z>^zMV=i&*JoytG@*b*o?6a)af&`$-S+)-G%P+N}~Oo at dpMKn5M+EkU{%~p4|gD8&I
z44dUcl8>(?{i`<e#kO@%sH^#Ih0c at KI!O-`x2k%UX)%$SV+~cx3{~lzThbd=IlL_I
z$KMlL7F`=JAx90CN6ZN_Z>gAEoBNn+l;9>KRaRL<Q(yVkYt(k42Lm_WymEaSnIyOV
zfg)$z4Lt-Foe3o%1aQ>w1(uELwGv-3Ov#e>Ww}^k_xsc}qU}f$Uw9=rRjR4YfC^&b
z8sDVM{kSYvXPK at Vxb005gZlaiZt7Lh9?$bc8xGJM{&H2h?#2#eS at Ir)CCfC&Ccnt0
zxh}(u<;yaFxNh$X_7A at t@ec++c2SCqxNAJKDx6hY<WS<8b%jr+7>dQd#9dCE8Wf<*
zK#PWM#p}HM_Gr at rXk2NYK*cv}xyRpq(=rsGF9Y<x0_<Ycsbn#oq-<y^+{(5_557t`
z=9ux3k6HT|DtAB8&uOMk>yp43o)9KO*h(pkljby>NYs2S7+e+ejYLSLNn=*6kk^&4
z5n)WSd>&0Q6?WcAJnRz<S^i1%%k0<e^Xum(whJ{cL#X+q3-D{eqFOfuC(Ba1#vVo9
zg;0wtW!}bl3z0!&phbnYT8MA=N%gT7>s~>z6}xj9amHcaYZFQtuomw}8SdlDG2^<)
zJWK-7(vBAvf%1#CiP3MP{T2)nG;lZ6hl%7-h68v4y`9xVUj?!wQYvg|2EAud>&BQN
z`zuTPSzD)G^Ug2A{SR`ytD&g*6ix4cETx3`RmhjCwTLjQEwV+Ota%V?fY<P>80XRn
zyEX`w!#8TMIjGvdeY8l>>^vmp-j8}ek2jKf=Q?`AqpgwMS!--=L$hh>Kv+QT at Qux9
zr9;k&02(dCz!UKEfD6Cqhw=I?^Og(8a{6H>Yx$~FUp)!(Tn_K6ZDY&A!-E2)ZTN<s
zRpf at KN3&-I*=<YNqw_0j=*}y|jc at r)=u`g6-qe;(tSL>fvp>pNHSy;h!hx5VajQ8I
z{l;0AgwakTHcB(&eadIyoM|4zIum^7&UuS9_)!VHCx at x71zdiVUOMfzp)EsjQgNXr
zn^c=2l4eVR`Qa%V2X>(4&Kxtb{}TH}rFLNA)2XBsmvm&v_C1pkmXX;f?OB)d?GFWW
zV7tQ9Y#J6-ZmIJO7l^u<`2@#E;D(6Ml9fV;so1U@$zl7r&%<)73|IKC)T{*(#okR?
zMcZ=2JC*ZfzR`NW1```)wJB35{buNrZrlwjB&-8KC+u(VR%_1KMsCATEoU#D^vZss
z+_{gal|1<QTxOpA!-!3!k3&p!P#?b1w7F?)N~isa>@Vyyy|NDexu)pV#+$*$yLIzp
z+o(M?5$Baxu2i}=Y_Ma2tDJim^M<{{iDtCl)1tv+V6y1FiRV;yMP@(cbdXGD?;7ve
ze|u%h?m7iGT)IVp(?aHOyT3ZDXvp at w!u|^Q46Y%cz3vZTa)!z^0ubidv=0kaG`Xb!
zB0|`T-E8$OqoB at 1J+3CKPj_W4o9}eqor;*MScoi?L6cWH#3S*Ma&5s}%Ob&`Ig$mY
z_51c(wXV&iPh?_y7kk8bQPH<~OPwn3b}SLt>r7|0cP4``ey7X(5gbdghPJ}0F<<!b
z?1dTQ<Tq(R8^t5-uHtJ=Y=Uc!@e^-7M24Rw)(3GK%+7@!n<)hRKD?x~qK$hm`pI5;
zrjEmp_oDt at GwVY^I%fs$Mtis?eGjq*zLbm25CPEcc$GXgz;dQ2mwfjqSfW at eW?1~>
zRu74g+t0q&Z at Yi9RHb${GDSEb#7jna>;3q*TUBM1o2y|*_F5ssncOdfo$NALk}M^Y
zm^}Bo^u+GHd}rv*^7>SEO3fvHJ$k!8shD!-ox#Try!u32(G~f9->~NebS6_F7r5(|
zw<4q7KE2tzvMH-SPp!d}4u_NXu0 at GQ#CtXK at u<BQgXf49CC=Brv;$u<hh(z58t`%V
zToKVNJ0UUyk0yJL1&`BVu(NneS+8j062EE?cB&47`}fP42zZHiTnkWUy{$- at o|GpK
zz^~8g7Eg8-r#|^TF5}3l@#WK|kMRSHKbvq7aT{KH8nxnSwhOLPMOh`d!3 at W=p`K$r
z=@GP}CsYDZ``FakliFRTEVsI`K5YN2)r<1S&k4EqH;~8k$F+Vydwv at bxuzVnMXuXS
zxBD!J%Tv!TpKp`-hbL$^)KIvO%%PNt4n3EUD~vZvJ4$<^zMK421_R_r3dXTXWKgm_
z!Ket%{VZ~dpwM|fjc~$;jv!n+OO|ht7ia=X7u-+ynfk2nH*mjJx|8D8rMGrVaP0YD
zr(W2%o|6XbK*eJwarqLLPo<3wP%I>v%|>3GIjuG%s*1wHsNE`Y4mJ?%3c*Zu3VGdb
z6&TSJFQYZl_x%lT6WO-;JVnVK^P~Z&PkvDcI!D#1Rgq(nAAa_^%}<P3rA~QoLV!i5
z{!ID>bL+ at qBa`_BvLpilQ-V?k3s5`_kaupDWsf$3DbQjvg69~0<9wjBI^97}@ppIM
zpYaLl25Y%l(=uM?+e_L-MtLztj3Td!8|XLBUhd1*F`fRH+X-LZq&lk|r<f#$#cmJc
zw}2F3H;<52R`R9gD@!}yy(Fjl*JQViUbwhmjV;>(NO at GQ!OXY#Er3vuTNe|Rdu*N4
ztt<2s)5N`IRapFjjhS!;!0zf9N;}#`#uBzcezAYe`!53PoKwJq6fwK+6{8m*+`whV
z&huY+n8n(2_`>*}jJz^#vWF<tSXZx;@CPLaOT7<`E4|OMUIq#j!HlzYD at 8|4X(_}n
z=Fc{6=^K6wJpMd)*XsQpcg~>dE-UAEy}KORDmF`HX8ZMpc3>M*<3;nVz*oy)+htX1
z(+DdI`+<moe%}bsg=9GK?$cWit`>k<+!^}jhgv76gsCM8HXn^{*^alDzXT=cj25_Q
zUod=q^XB*}@$-|t`V?M at Ef*vsxn==bLh}}aewJkeW7PkISaoFLy3UG_at|Zm7p_VT
z at Fz5|BF at A;7_Ztbb&g5F#5KL7i9&Bsu+j`nShIE?X1afS!E|VuB!}jIA~$M2thP!b
zq~)Ax^*M4Mxw{k66n69SdX9DwM?_XehIknZ|D+c4arfC|h>5mrl=7~fdhcbCMue37
zMYBftne(8_;2P~7m+sHFA=?o)OBTvE2)&Q at wZ)NJzx<k at +#BGDidE)T;SI+%uJ=nv
zt<(UZq at PGnYdJo`ku&4U(WCZl)MeP*=iw77tR?r54~SbUzNyzkA|IOUm?^AxqOMD1
zk4_#2$7w5t^NGf(EH4}VRI{u at p3egx7W>1u_8X`nHWA({y;tYu3!%4v>#=Wtwq{!x
zl4zJsL-Ku&f-3x3G at q%3^UG at Q`@{0m8Q at 0RSK-LYr@bLu#uOVs7v>$LW})Fcj!DZ*
z=X5QgHms&R=IAMLHsrYInVVtuQP9PTB;-1lNtl2RO6bb3EJ0aM2#;(jd$-_TG~5z=
zF7bl9PwG{MDkN at 7RSt+`Ax98_{F&ao{MKz%k(<0ei}GsNmfG at ReG54tA9jdSbeUZ{
zuYI*Q&AM9McwY3g(dT>inxn at E(BrD{lK?RFh12?S(ZJ^|+fTuXh?`<2&mRrG2JG@?
z{b$M8qJt`?FpDO={(BscCq(=ryMnLh%QqV+kM;s0E0~Jb0!TiR2-8m?xe?Y0ezw?f
zb4A01Bdy2?V*S~rc$f()JXBP7N8KnMY26}M31B8LykjKj at sYFGWi>4)@VyO>Javwn
z8t~D`c&h{G0N6e=n(Iq>RGsfg`m3UuI{52*(f1!io#K8Hog%EaVYqcT!eqj9J_B^>
zuS~&FNA!`22`Qc!^^ZJAnNpjw`=pz2f7*%c%?{Z~Otoh*yC_jE`x9Goe<VqBi0&hD
zz$;_9;Zej>Y>mFf_xxoCEw?NoQ^=FY%=1wD5isb<o-_AK`?pK~MQ7YcYVV!`r}cFE
zPTFAs*5hB(<q!Kc>y$?h2lqIS at B@3>i(GI|!jiU>T-_LvkK2rc6?XKN;yNz%>-2fL
z?%L#cw3}Y|KYnSEQK9~J3B#Xmj*z;fNnF_<=U9l9J`Fz?J*@ESHIvql+apqNz!R&G
zdjs3XUq!2{jq4+VLTefE_){NgO1_Cj2J!*ZoX*2qw?6H+O`LJ7Q?F~h(jRGLwZVG#
zRnV=PBv6n6Z<j;!!YRJ*?EY};zGmd!<@O#1xVwL71c1(a97;)h#!(!NbzST6+g)Y3
zNyci*i-Y^6ju~)6(Ou2fZOxv|d at JFxv@`2Hz^3so%tu#w_z;wLv&m3%FL|ode7;b1
zwf|h2ox<3Q*th6Ymi?Q3drMjcza;Zc0kGFlgR1W22#o{qHiv2U<@P0>hgYdupX{Jl
zB7Jy9+*aPY)ly+tM;F@*uJOBC{FCQff^`%?rAFcBWF{aYrEhx5bw496^x=2>rZDcL
zPa>xbm2dr)i=o{26dPJH3wX2@($z at jqF9-9Nk{<UcqW<1p@@2fj7?{d-ocA?>fGc$
zDN!}>C;tA<J#f%?!&4TB)QIG5$?W>pMX{H}JZ$3(95UV at 9sff_23yJAhu4kip6!!f
zM4*4t00m2vU@&EH$S07 at bc4Bs;)P=!Fl7rw)kGejfUIo^C<Y9*yYckSdl`)+HW=-A
zt_4wyh#ZFKKV<*DDA7z_Ee8^!iMpK?*uH|zF0jAA1!d1h<DYVlN2ru*Au(<Hb}2)A
z1jge!Vv%#jZEhieaS<D7i>>jl+wvmViSsXuI%B*K{6&#V7s3a$$C38q1VFaN3*j14
zt5+^y5INy|UMyDeN&Jo(Waz|!6mmPSZYpOscZh%X<xI(6AV+4$3ba4(R&a=W$l#K`
zOzOQKd&CoI?vStic!w^+ow+CW*u+pd`o>r1G&{28CXC2HpE^W<@g5U?Y*OCth<!i1
z$^$CpUK61Dskz;`OocnAltZ96o;iH|oA#Kw01f=!B^M{~R2cl?=_ at eK-O_jcUv%sy
z+Bi!!VT-<*g75kIsM#-yf3#&BD86%HDx%#w=s{M2#wfkoUylHU at 3^H6$TdqX+?Z&@
zJ6TIq!T|(1pA1miVkf)kt=I&0Y|uog(#y8c8qUtT=x!Nn!JVWzU&S#fVp&&S-#)EX
zzDM7-0O^**Z?gvgO>$4ftf)PtJ+SHu{PhLLdm)-u<da%5LodI?%5MJVzywm-6lSs-
z*|TA_vH{;gIDnh#MU3;Lq|f!k)#2XaRy0BpIc4KnT&FKBk~(p6Msh5JqzWX$B}f9a
zh*a7^>II4gxNq5j4ij%s-`CT$Byc_9ozr+vyrfL%fd*UBTvX*{apgE*%xYjCKMr8<
zkV8B|FxG|p<rr#IG6%$R7!^5|ByU{DqQJSzC3S)lFQpLp at O+2}q#5W&I!+8 at 0m$E^
zTnZs%5U=1E at GX)|PAd_sr>VgozcDtkvJakf$F}Rjy at hL#!+;m{AEPq?3FBFOipe9p
zXWB}IoHMb<bO?Vqhjy<q7mVayp&fF0Xd~O?B^<KQ_V5jC2NcacEbVe}JP+v5c4Oe3
zRwF|XK~I|I>r$N5VoiG+Yh%FtE0gn at q~Xlbg5WX*+sp-(-&&ii$d%ER&6OpKxS7<K
zXyj^^%M7d<6yX<r$%Q~gc)_ztKJP2<NT$;0zOH8RVf114VLH$Bj?jM*m!>4sb-4v(
zATC=bDQ5c^319^<5=$vu15x1;R!r|RBeMXgrmDPbSz5|mBwoO5R%R><h{Q+r{=HKi
z!F*2d%u%|uTqWU6>e#=Z-wo}<wZ<Z<ltCZ1hPOkU#Dh{CrDI#6Yl6varDInmU*FMJ
zqBf}s_^RmGB<yup=P<BtirAqq?{oKWYlW(O*OrT&>q`)@q`{i}+et%cz+K_=@K=xy
zNJT6%X8{05fh$;HXvt_-vg#9eKuWc}68sAM!u`_x^+|&v20#G(5QqZ*3c0wP#exvV
zGLVjw-uIsaIEbyOH>}9CoHY_GgQTtKUes6f7|mr??rP3 at zaar?K*+4VjGF&e*i+e4
z(&n%uX|Tl?>bEr-CzXS at 6%pO{=N#J5B)nn_Y;{t$bbqGb#w)XrX||89Y39vR^F2%w
zsGxI1Cetkn+re~I=S5d~*_!u}xf54{U`?DH at y1ZPG`61aS&lv7=C26TeTC|CMuWhV
zug?a5(vMbPo%{|95{m^5R`5LEoF)~CP0(N&Zv0%a9V2zRPB%q*mYp-6!SZ|ov{DSQ
zvch at 4Oe)HSA(hkr*F}8-`^QBs+vDj=%)lnA%4`1wWFy-a8wk`Rz91=LKd`PkCnY2z
zB;f(Z#AZUcOS1hk{Qh2VRbSab54(^OjgM5A3IuR>*y4B7Q7a`XEc}%Jyl<vB7SnOb
zv(@oomD at u9h{r<i<6%^81&bio=x;X92pFoGU@&oAj$uy)!R89<cc5!YOiQMu+uyH5
z21}zhU@{2<OI8CUnAi5-+L~JI0B|6d1IS^t;8<dc63C at d-!Va=8JT6Hoy1GYGw;08
z!eib|5qXB?oRlk*Nb#B`H at 81m5`Wf$>-pHY!+H=+ZkB3!S*nABjqwA0NJ<oOr%}_V
zxkg14cuzZ2m02HDVX`xBy<g|GK0bTaMLc0BwP`{vLhn}QHLEjF$y38Y8Xr3X{Kugi
zjs<~i#{RY1xR9|}K&)7S`V3q%26latuRt^Si*iX-8C at 9#8G$11)MJ{Hj}Qqfdn=hb
zLLs$Tk&;JFR#FE2??)}()Q;JLZJx(a&sbu<H{=#B?v0R_B(yI9e+k1$&`=bxw<0h?
z9gV&daTvE(>^-guT2IHpKSZG*j*n&2ZcX5{Z_s}CrgP)(l^Rx-Au`U9yY(-P!EpHR
zjR7H8mu9GPN|H>HOq@)rN2FH|`U!beIYbTjzasNOohPUo-la2AdPgWU0cz)0-n||!
zM43={Px4k-d=hOmJo+T;M;&-DJX#vHtSk=$zXnSak4bACix4#i<KmGT(ZC0RdS&7o
z4vcXW4iO!Xqo?jPHCo}qKZG~U<MeG57KH6NCRN^(K7-)%A~ZVN@>^mq$vgxQ4)6wE
z-~ZIXsu}fKL)IXqkn~CyQ3RQjXWsAeqia61qU=wQhu+fzGFC6EDf6QG(nymbm(~Ev
z>yA{L)O#!+Bxg%Rgj8J5N|anxvj`0SviSJ}xZc6QKBBoHj0NavH;5Uy;Vr~_;#_<2
z)IHbiQO5P?W<kmiNv3=+MX{|&=P{gL-#Qu`0_~^I$IAB$brz&)gR&$K*$<dxRTi~^
z@>-Hxiu^+TQVbRT(X~|W3&B0$IB<<waGsx8IeH*5Azv_?r^J+3SMO}s`NT_trwuqc
z$xZ9>9KxzQtXNX1bLm|-bnnV>Iem8}>E`|j6AA4;e^#_oP at 4b2zm!(C$3f3X&#F&E
zNXirYMp*#Cx%*d7*7$`Tl+7iiS8|ub!FHbNAP7KY6#OQ1*+U-|T4q?}#28M67I_(m
zG<}onj}Q8usn<+A0$hld1|o9+f3`6M8SI%-#)(EqeY4z-Agu&J at FauRpk!)%-ct;*
z0h&CXdFy9CHf~b1O!%{#O!+sl9;Ub at txOBO)8e<o^naVMJgVX%jjHuRpWi;zbnH=U
z0g9(2+PWv^VA)2N)(BsAmI*&!v#GIb>$gQuA-TbNAJPk=BIW}&S)Ij!sf&N_Xd0jW
zt-17h{?W-~YzsiV+;T>Ka%Xplg^EERov%IWCtQ({QPjptf=uglZBF#63%27*L?Nbu
zY!KT7fsHeblJ!ybYg|>UrFMEl;1u3F4$6r*&JP>UAGsKyY5Co<7X53 at a{Z?xD5GPc
z=KwK+)~6jyzG2~hD0377eVy_<_%Kkq8K_J=d(HY`(U(j?<Yx)cAui?N^v&IBOk_ef
z4W-#9b at N%H!xGcC8}cIcM|NMd)9diECUH<8ek+^lG3yQ#h{S#`WCd+Z2SaWlXpjg9
zWo~Eq++Uq+-X#UX<@A8{n}JyfJFJZSX{`PPtFc15#g;ZEh1J`fI3EpXf+jtcHZhbk
zZ}H4$vY7?BaT%~U2WRBd^4$KX(>ZoDr_*n=E3n+8PM_oRGRuzS1h+5i$;iv7S2EK7
zy+d;7L{cDRtTYGLNfH8L_a~*<DwS|{pNG?cNJk=1ZTU)l-{q>a`>>od+7)k(yvye!
zl}s2?ksX1&Hq&FtBASce at 4|2Ax6ey&uVx1^gP1^Un#mKwDr0gZ7FWE)WjU!|LSvPU
zieAoEWQcNY%o}UM1oTxZL1m{=Rz9qoRzBReRhmX$U(S9Z6UiL?@z?*QY3G05k>s9e
zm>H1j5swqunrQxB;#1*~>d{O`VqgtKMHKi>wC!5N)6G;xxOhC!6 at qz%!|Dh=&j-#Z
zPDjT at aBxg_dLY#@=jCoHA#ozHz2yCn^uc$oTL}Jue`H>Mi`CIa5a9d7xh=xQw|1YP
zX{ozO8tU_h>N(XNToi$n#kvS4I6%@ZUP!hadbz{4RyxQ3NchK}J{0lr%g at sZj%O9d
ziz6Q9;op8IaD*zzN^j43Pn7O{P at 7Xou8yF8i{+a{5J2-}Ju?ENiWQtd5b*xV=~Jog
zN$&~R_P=D>CK#LgGj03Nw7>m8NU74p`)Aj7PfiD<wv)Xl7<NC%%_ at XcM%)=<-PRFY
zTNkd!rptJwap)dHG(ZwVq#XWmR=tA%DdJ&Ay0b?bpKg7hMw7%41;;Nqt4V=Pe7v(q
zDj$D+pGs59AO+<wIJ1fA|9DaS7o6Q>(I!6M*(06LwZ2cMsbz at be}K3in=j*$&f$6t
z(E+s#k&64n+4UCx5D_UH^v4h-kl!FFp+B5SPi8$f=6{0NYt*OI<Tpq`_zTWtB4ZOD
z<BUk*qp$x{%sPX at o}ef79=JUN<GQRE%-}D+a$W&hp at B<WS1zXUPanIL+XF<No#g*c
zhmD@*=l+f7!nDV4>;g8$r$xZIpsOD at cHbW)@rPV?0Ffo_<l8@@QMdB^-~P*gMjbHC
z<WqeB7gRIa%{I8HUe at HQ%!0?MF|%=g_}ckzicwKj<+%Q=J<rI}aD9_!O>?HLi?z{$
z;jCCzW8#04>Qj$!TN~N(eoe5=tg95xdedJ&Z1}$r7mQ|ovKk9*UF?nin>509- at -`R
zaF!se at xMotCrXjn&%U?$b;Qp-470y5lk49d at O!JvU at RH@ZsW8#b2>)<|1 at JMYdYp!
z;?_EOTJBupnM3lcExie+Q}k&$1-B_undG|U&c?spOem?hVsXBrhg0rT{<aNB6%v>t
zebX(&(-QY);(<IRKUIDp-Z>5gB0nt4B}bpe<ZcR1zZTYE`&SUsA)kKz5Ae(FA9-q4
zju1}Fc4*i3N(1GlpN<xMwBKaC3QB8$YXsPR$t}-w_$LIJb_es03?SfZxCj5+!u<Z)
z|HtrUf9)S3V1F%Fh{3?+-@}{}!~e!0QI5J1u+JfWvmRZvc$7{H at a)xdy&S at qYhC@H
zDXNApVyDoec(Ta5q7NoMY9(eAM_vE#h(^SWJg7D*p_SMv<S6yb^7`n5agY96B0KtE
z<fB|7Mp9H8#ZYbR6dV*`Ci(wokq$cr4aJjDo&bF??2#l9BNpnqd}s%Q#UU0HiE<A3
zHwwmr9-^Ehxs3NJT9OLjQl4=Xe;V)ViY)U)w7sGo#sq&*mrM3OwRgxYEPLaVbq+Nu
zmm4|#%hdm6WNiBn<JQRd%--Q=QQ4c2tl9a$j18YG{f89d!`f3{!)s~Y+b3Cf1X>|6
zW#HZ^nC0((k&g+y05Ou_-h%PzotCb2KT1E6LsYNMt^$E0)@2M3r0owarxyc6`bVm$
zX`_>0_}6HT7RUb_m6k`Zl|^$z{TE69W&ZypN|-tR-vvL%Ptg_8j(<geJA}b|8qms@
zRh()X5ar*ZKP>)2<EhVV|3AQ6M~xSK62U1XTvcj}yk-xfEK$Z5#ktx5WnuSc7kWSI
zZ|N{2b(kuk0c}%I)<6Jbb9XD0B}eH`A6CW)a7A*WySYG_a#H7%NW3<~bMuPzWKm~P
zDJZTb`|_y=gVwKqd-i$(|I0_vkmnaCDyj6~6&gNy-6h*TmMZ%3e17nOD}Liw1!Q81
z&7FkpQ;R%4OGy1n<&IvXh6s2%>E|R<2h`&@4j}RP4xj;&<6rU?9k3ky=^N-AJSA_J
z{kx-c`VS9uJaN}a`<-?t4_Fh;8t6f?Vc=k4dGw7$OCOR(UT34iYef8i2u&sTuu-8i
zB39Ff{0qfdt3p7SWeW#)HI#?qB<h)yDuFCK at WKBjP4~e*lBr?)w`{t{r;Pt_V(s-j
zeVbE`H~ro+k6(K_${}qXN6EsggR8b<nHYN)Bj;lcmR<28tA7uX1aAx0!)O7fjCLBw
z<FNGbt<dz`aw>1FKP)zdTs!I$0Tn`a4H)*sU(c~xL1~BobT3@;jx4Dy{`*BRdqjnh
zK%gU7olJCO`tl0wu0`4b at pD^j!=%w&58go|hKHhaSiRZwsJJzzJRebDhP)2YGEbi}
zxy~c=Ppams^>-Jm4L&kqi<uuw?PRy05t6$kcSkQuLYembSfi0z@!Oc^nC`8b3aHei
zWc_)O<cvMRS*}v><^!FYLtp%-3wY at Noi}D`?&IKzH}Ij%sEWM|g{iFPm>L44?sUY~
zB389GCW;m%W*B?ys%U}0%&w=Y_ at fruSs=pE**P>J9#rJ6bXaS^D~nWhRNbF?Xj(ZH
z5&lxK{3ZF at Os=+L3qV`QKI93+bJM6><}W7~tJY_BvlP(`d#zAOzh-&XhtUo8ou9{h
zqVsPU)BKk*p@~AD+Yc1>H1<@q*QVc_*&j)z&)rU*qYgb=QSVQl6IU6Wey0_h?)NP7
z5BHEVmJ|H%4pLb|+{La8li0tC9WaXF0LD<AFl$v>{Qk=ylg9NmwgPAmw9g&KFq=Cv
z&IVGG_;b7XJ?Y&wG#fzBun at GdjE2b%WhqJyhYqzLXzr<Mvz-%lgg*0MiqGjk{oOvc
z;>})TIgQ#7u^T4&9Rpf~XicCV@*EH;2TH_Bym7-XDBnWW%E^!L_WGOK&s6U}9F}Jm
zQbNl=+z)uk{4b+Uxk?YdP{d;dZ;=_}ERlEYL at PuLLS@A(l$66NiWcu1ygyE`C7xm*
z`P^86AJ?+Gqv<vFLYpG=6{9pG442qLZathRab7W{oOtT#F)nc~o+P8P_4=euI+4x*
zHt|pN<1(TjS$M>W-+mx;Ppq(~zHOuD;$0~Nv&a>{jS-dL4?CO$GFhd_V%j$HMeY%o
zJUMoZ at ttSl_sJsic&D&Pt7z)02|QO{xT`06azIwHhRr0Ei9PAh3=vSKTpVB-N1tIL
zK4fJovYFwc_SRJ`eC1vkF8uPy758}ex|C??`Niw@^y_+}rDoj8Qt9<HqGt%*acjlX
z9S&tTnZv~I7YfiV52mS!rl%RH2jPq^?8D<SJj&)7MNt>^srDh;qLcx&kDlNwzr`%M
zQFv!!7RS{BravT%rjJ><y=f$xu{1<SUv*!XLtRzh4q=@aBl%91_^mXRGLNlap3u6K
z>781)H&KQhfj0wIaI(^Jl%GCOmJUo5?%S_av{npeUN=H7q+|l)__?79=RXS8RyN@%
zzD<7))8KR?xpoj9&MkPP(3<{YVCd7@`ddY91<<RMiwsJ}K`-3*&lAMROZPr+Z#iIB
z6a%K8A3UA0r5Vmk^3jPg({wivZ+DYl7H8bY=e)<<Ud7CiJfX)vE{qMbXNKjjZ18 at w
zrZ@&=KFrP-RRnoWaCl85dp%E<^s^_pwjnqb#Jcro*^#6?9E&>Gf&=I!BnWSX31!mm
zPcLtliQMgEhYONDH<jE@?s*}oGA5zl at Q#8|jtxTrrlC*qCYCWKexYtVqs-S4IZ%|y
z;!Voob@!^g>t#N&B;KjV_BM*V7EtVre;%Xq>E7z2`QuwY)vNeoaNk6?)lrDhP8*d!
zuPVLPgqzlf8n#b|FHbLCwu8ym+_?_2i<7g8_eUnqZMQ3Iw at Ym&e(HQW)Y;C at pJ>W|
zK9`^Jz}NmDh`S%03`TJqoFS6K=1F3FYF8tvu9C~<VKN3E_IW0Jc~b4z<~vCItCaIH
zSAJ_AS(0Ddk-zuCYYD>Z-{pJP%lB^WkHBdydToI}RiglMdVWrm(SaFYd~#psOMmp@
z^)5_K#LLdk$U+H=*h59C_(E456<raP>8S!6D<1lkc5(IxMr`$0=)cv~YEk0iLQ&($
zRM63Ro_sX;eFU)gdBqvfv2%ZSi1au2ELsxTlG(bt1$mAYP%~2&U3XV8wA^;>V;ut4
zKQXi(V%f>v>?E7t*8O5gxPxx%6<`sKplm;8<VX9Q9k%Yz*h-^5hV?QVEmxYTGs18n
zqE-$Y`2fJHh#WcW8-?}YTIE_fDr7{RTn-dJy4T`{=5aF<#E!EdrpJNmBu0qiNx~|`
zQsSnFqkp^<iFzrJ@|Ac!5WQWMBqkMdpyJ#CEPRoW$WAX%EEk=}(0gX+m#9N-MJKiP
z=_I=qK<&CVH0gKE-sOba{s+jgr^Uot=qlO^w{!IFl2 at BE9n|#fzj4+r?kw*@h&s2c
z>U2gQy!I5$q{)r$a9Gh{F|QH1_ZBqcP at Vof@H=5#-VIYiq&qjZ$_V035!^7i!RtI$
zQf at yjo(~=Ghy7ZAFXm;xHs^dSlP@!FcjtULs^CW8EsSNp_1x5JMJfg%xiVTjyA>`+
zDf_U;7XRH3wgazKk?hM+Hjvk<1m#le_L!0{{r8iJLbc`Pu4eJBK(s)&Q1K$VaSor8
zAw&>dun2K=Da!!cN{_gL_{akI<=s%Oj6y^3x(wybDAFpTDnCa-T$s)pQZ9LI-tyT5
zG0{=<SUy0vCGnpSMA_|2{3o0>VHc>Z at S@raNyM)<P|5xa#O_+no>=Yp2wiG*nWNs3
z9A$@sBd at e#f4-a at eCeKTX-!=hLRzo^36k{5dbKbTi@=@T!`*Sm at Gw&V>8DhX&s^Yc
z)>z!(S~Z4W8!9X>Gc&lQHa8y~^3BdHY<J>sJ?x0#i`aS_6iirs*zLq7W{@`bX1k_m
zncJ$CCh6<v-3!ESu+@=lXV9ZftkL^NvQ8`D=%AoMXv|6o_Es|RWB~GxPqvy(wTP&}
z+udvc8ZbMJxwG}^R4!`G-hCc>Ako6D#7!h1zwTDD4v9J{aAb>Dha>?vd3KO at F08a9
z=D4xwE_Bb2T at c(XC<K9-lg!s(x;yK%dwa~PZ7p{cfh{aPz4nBN<=!)TsdJL8j+rUn
zppbzJS;6y%<zMbX^p-<DxB|Mi7!X%#&UfkufRgGE<|euHd~@Kc0Oa7&Wz2+h!ks1D
zJ+je*%sjdKR)Q`$!W(rN+_P%%KBR9<V`qaEP++yp<yRQp>(H-DIxeyeiW)Jp@*!wH
znd$NmY74!mT=k6gduugjYvrH&z2k8a&-yuT=bfr9fW_WmvQ2Zbni%G^en}HNSLgra
zzNU9yN at 6bd(EHf$NdfK5HNM1R?Oh09H84GBQTc+s(U-I`|8$8N)ZEo(dmDm9dT27U
z=CTK?UPIoKu~#?8B3+zeb~j=^ZoNo?phF8J0br?n`R&0k-`J6*4MpPClzqh)JB%8G
zsOx#pUyIjcN(zuw;R~bw;v&n%`W>gOJdx>?%7X26O7&4rm>@U4Qn86qju|S%`V!r8
z(c*8P&LN?>Q#E5osCc)?s(rWvhyvG at I|&tA=1GDyCJS`*1qF`E3dourb&HN85{^C)
z`^=t{l_V^i)Rdz|S3;T)n~lTEOHBSqfMe0CB%QRdV0%5%M7L#wJJy1QGN-j`6hpN-
z7`wnTBDIb7nA_8clizAh5r&~gSzwyb`Z9GAyR*fIr8yFA at Hm$}Lk1#Cc<o<Xh!t|;
ztO$HVe=}@?fuktJ<bfS at 5}umedR1FU$bYr0AjWt!G*EB@;gsuK*Hf!43c(5gaWndZ
z&=m!4 at Td&~=z-Eg&S-}*!6!e8+Y=!Ien~VM4*5#d${h({y2k4U6P at E)*3_bPAND}1
z1pyT7x>4Pn32rJtv~jFqmQy)Jf;hPOi=(*k0k80v8J84gu5nf|8&za$NTEG4wHgV4
z96|QL>hJzd(iJ%cZOu>v)OM0>S&bwRD at YISq|vWw*+wSGotQW^%B7_32Y5dGQg5U7
z4Z+w3 at P*|2VPZ58N5(Pqb5}cV!W#=+49B7^+%o1M?z9WdOH-VM%!#T+yf81 at qc21!
z+~2;YM0~M$%`*2h#{j?c=a9L#=ko~D8OTMR#Y{<!m{en|+7ri00<Yb!GXBQblpWt^
zyx&UvWC5S87!*P0IL^;vgM)7>3A3*uA5na0QtmO`9p(2$L%q->#2+?1fI0$ol^pAs
zWN3&7RA;cpMKoEiX{;NB+G(w8gz6l$@x{u|^Sdf=Zgpy at 9}PU34S03q8n-0xhnZH&
zcuWuRBa+2jRU&Fput1L>eyl3!#6uO5XW2$A>CnHp>FzjIunGB!(fAXUo-c<~vC;%?
zuVpnC*WRQko&k-9TRXWM_lhJO3R+R=Rz<$zS%tn+Dp;79%L;1jGXSM$G(q7;8V>Ox
zE_F{7s#$7Bywau!?wLPlt6wS$gP-l6UrvJzeLvK&K%cBG6SpTpx7F#Ty1}H at g)2)q
z=F+Q9_Cb4(!DBPt_V5L2q~7EOnMYvUZbjDtYBN7{TeGvx7`F0E2kCJ6OlMyvf^a-#
z&VJ~31Eif+>IFm;x2P0oLIz#>ynC?X%h5D>$&h&a?gq%dB{UO;RrCz<Ly0%As};*9
zAnhw?#z*hwKt(rjaxPvfE>jkzSzPv9HD-&ljPNoTs6}_Pc9gtD!A8I6=MJBY<><sY
z(hc=RZ72O4qkNnLypM%26NA&J^c2N$LO?9#<CZ6q)kSFeTcm8c#_D!3ZB=m$*vrpz
zui?3x9p!1eua7e at 0W^1I-I9s^!K?F>1i?cN=J3U250FX*z~a1DH^g(9;U3xR`^XeC
zRQypA8gT8AmH4A&wAdl}YfShSqXdDXJrSLM=W|REU%@7<bR-kR8e1&-Ii6Cj9C|y`
z5k2l<u{#ZJaxuh at 6G1(E`TSUjY+0#Jn(Uz0khXW?Ni<9*nX`BBm*5Rm^qruU^y9$Z
z+H76dsntRPA1QyW0rqh|O({t|`(&LMEh!}2{hS75o3Xl0P_Z17-mnUBlaT72q)r+;
zISK#;_=lOc%eSjOCuJENS9kPgMfj&m3iKdUc09;BlY7QE1=YG^SVD#KWRjxC- at y?i
zGW}g4kDCUpe0l3=)soEEbp_IE5Tgvq<1$E2QsAU=iw@*Y+3Hzri;mT@%?(I<(Hv!s
zywf}i`PD+la*S-x<h~2$v<;3XeDymYclq_P9KQ54aP2AlM5-?MNx^Sup6=s{wUPHh
z1xdHRXO13kj#|9^5qY8QJg(?QardMDj?PmsCNEFx_6M31eG}}%A^!W#S6DLEoHFK|
zc(q_6qewj&Le7G#%svYNOJ}Yet!`6QKvviZyOdiRY-48G)335?j(odD{+{n9F#oRk
zGr0M8AmyU(&_)~N<Qe>&zVV2 at X?ZPxt=*u<noYEhB=GA>J#OWj_4nj~eU9)}n%ke3
zb$PO5r^7pF%lAA at 7efO`$PHQxpzB8T)T7#9w#yga`-n+K7IK)}b&uW2VC1q1NEjP{
zSnzdLM$H*}4jY+Yq2G9~`#h1Y#BzHk+JFM0{Zy>?IaM$AN5#yKipx{3??tI!$Gh$m
z77=tGoFTKSJKijG;%V85?kk30ofVVq(QQecY)K{ZSH8zyZ{;fd8g2h!;TpYQ2d|?B
z6j`r%IR|y;-GqyN#{f53SmWKAY{SC$`Ji`cSLQt~Jk}<wwVCttsy9u=4NnU8SDY(C
zuoit+#tGmT<bLMe8$9njdtz#0`{rgg=G-r7bj at E)oA+9BAm(Giu%n0B4zSSX_;db;
z<rw_{T6^HWyXJ&oEs(EQM}E*gQ+Z%*GgkYv?E{n$!uE5bwP%$b9ivNHi3feNW;^c$
zyc;OxF5p{cwf^NV&cngk(2xPCn<T#wwRUjCuI%N0Y12iW{ocU%?PX(;Xgx#at;PO8
zKj7$mZ2_>ihjkLz5;QJ#i6R&BVGO{?FPAdS5Zjx4c}ltnz`Up2yA9t*OJI0}WUP~d
z&`3rm_MSc|1|?e{Ien5|xDC|$(=C#&Z=#DH at vMP`0cmtakOQtDNgeI+i4e?A``>c$
zHTHGE1h-z5xn7WcnL3H&!jq$pP%vfJcX=c;q8(VM1-T>vm`5MldIm at 3bt=jL9!BS&
zt+)eUAuHUnZ!xxL#A-@?3u!u0=4c`N>@DJx9kDgdwO;WpOFcCv35c80#m#H6Ghf<*
zh04N(^;@x~gXadmwSkljhwz0ZG(~ci6jyZ;tG7jzU*O5^RnC-OjL~ounNz83$m?k(
znP2l!zI^;Ud7`F}=!>#>C(G-%jBkjXccr5o-CaI7MKb>$G_@&uu7mXwE0_H>78Sv@
zmxVZ%kLLq46+k_zi5+#tJ#{|GgnVih!x0rf at x14JO=)^tdw9Ve4uUxpZ&LHkw6ARR
znaK(siz?J+6W-pOZXHH-<=Q`Ll;?=_$2jU>l)`YsX(TemEq?V*P?*>#^usG)4jHp<
z6hB_(3D}sbpvPSxK|lqUahnoljrazD9;kw7<TPdIt593L;Pi?oKC$9Ud2Q4BoFN^%
zQwH<g8p=&j0Y8-+D;PlRdjz>}DO>`={q;Vapf_oCwV~GqlPq%NB3ak;Jl~SsYkIy-
zqsw%RSW)Bh%dj%zf)9Cx8{^WK0c{=jvL4=$8S-#|8`J2P4KQ7r1n?<VYmtr%yYogY
z39pwumgH69J4z_d>aGxW=Zi?TJ!*UG!4)53i-_4GY~+R7cJt%;7}bu1zopo#x5!3o
zGc}4_%;?SbyfjYo%j!+`{6nLIZp3=|dz#bdZ`2w63lxpK3MBs&hU;GWXy5 at t%`i^=
zI$!X7FhJSEwJ><Jz~CHGd)s}E^%vn7zk{9**s0X=guf-;i?c9**!2+)YDZpwR)6-I
zb&UKoH7I*V6H-qi`9=ATCpAKIMz at S@5HphIv+^=`sR4CT=Bi<?gg$#xW~{X>{2!G3
z*c>D2&5GfF21FaTP>tr&Ym7E-=$r0pT%R|!U&G&$?|rc_=q+-*e1#wKWmQk~=Cf+T
z7vfS!$R`@1FMrY<$S0}GpP%tTyE8j8s@{&JQjISPZ(eiA{T$N6cPz#9s0q^(J^G9(
z`?ITp=JGXKk>koM{GcxnBI2{1#z&MMny=I`MB{mo26jZHhKv)*AC$u5%fo`lVdEkn
zjqz at bSLRT`6qk)%H5dSwpf8Dfjfl@;vOoJP<}Y8<7CElH`b#A6_ at Y#>LsTIJiM4;x
z_)qKe1C9Uj9a{MxVLkUvmDb)aF){#J8S~@6f@^4H@{fOqqe{Z@>mz6RJz63p=6WYe
ztDF1*ZOWgtQ at rZ}^Kv-_D$aV29~-P>1^bT_VyEOR#tcea`Gx&oKn|TKW}A?QoAx4Y
z=^Ry{jL6r-y15)vG4^bo2`5E<|7iXElo57!XGK7sMGek*-iHUb>?3!yF8oL0j}{;8
zVT96#nmr0YS-}ilAPdy#cENRh<(^+MN48iFiQe*P<no@(_>K)RWAr8lnlT21&8RT8
zghBBhgqE-sOyXX~J&XsiqCy8hfb!!ALpcSAAdm_(J=@|2yFd8>%Go164_P=0=j1)c
zl&0FVsLfB^wS#=8u5(qr%PXFH9Qb2ULu5}>sfIe>2ck?;EWdPtZfWz#nP7Z#TYSLP
z%j#Ewp_sj{m&7;5WWGUbyi=18uyC2C2jd8g at ttqNCCr=;7>M1ZRQm)KMsyk7C63<4
z1jP??!wynfAx2Hkf_!1CbJVCb?kQ%YGbZ_(Rau<n?urA at Ix-1^;oj)4G^2vaFRQxT
zFaSJ%NipFJxB$+};+20VRo!m*0H-69(gm8OS*Qzs%xpr8CC_6MODL|jOaemCIm(hJ
zfi9|!y{DEO(^ca8>bgilP;~mZ`!ThyY;SCcgeXapt3)Hc?!iI|Qf#HE+m-hH!iNRS
zC9&;4_^jKXCdE<{)FpnYX}d|KneS%4r<m`%%cM)ZtBK>&aN}4De6`wW7Q<fR8F};|
z7T_y%I_6Jc>>bJQj^elLa*TU~`-VLGgKwmrReMB9_S9=xx|3LwQ{A2P-Zl-)o$s;j
z$G*Ypm+tzCCb>J9w+n<lshdm<@`Y^auD6g%9wg|!h4y}5c}2PB(|ylBqfU8qsJPs=
z5 at -OQ%53*xBh)KJKD`R0(bW^VpmqnXUQ_SMDOG}OZ;WQI8!Ti;u7fE$?CVZ=zb^qj
z#P at tz2$z5^;>SPn50*Yfa2}QBP^uIvuPTv=l0`8reI7V~e2 at nCsEOwx-d(DY?ov65
zML+9PDv+_b_^=eQcm~ne6AUbYkuG$6sxg}Z2<-L0RH{oDuo9=ZHN3XYCDp35s`A+E
zOY1d+lWDbE=fd)HF8Wp7;M4gnXZ_8~?%RnB9f(rGwcs35HD36Uc+zD*X*#-9s{ANP
z>{}AAG(#ngbr$ME8%I`*kXJ(*G(s9Ivcanp*@u9H3#=Nso9pzoyIIjYd`1x3ib#qn
zAu~rrttb_J#L!QRd8HNcNSVid&BYc3Q3Ha`<qZT=v3>6DpqS|ss9#uzCwhTej}t3Q
z06rHF^(PKdB`$rjhf$g%jw at Z7BTbWE+U<vPD|AG!B->9^TIWtZlJ^Af(8B`!xF&n`
zO4zHPGy(yoO-^3Rm8M_BffmXa>M|aXQWbSwqW5zM%7!6g_b5pb!OT*mlexeUQiLUQ
z0O at 4Dx(r8&I8IXfM85JfZRY#*Pa7KBx{AIeP97xw1<Lq3iXkN4PpNN*E=8!9hK>p!
zpWB?Wufc4Ng{jTiOQoro3|8*BVXr>ja$O2VNpz~Vmy>`UD(@ZE;oisMPv}KzCDA}4
zz@^8RKWu{7sYIyrRTAuovwvL*=NsqZ_tV`JDd}zrieW8ywSwZ8T8|22s{Ek<G}n{Z
zHPk)cP#CH+AL||7YDbDcUhGe1_%~nyU-+8Uj;qjR{Az0?9dDUyR!JM#eO8YH7l5z#
z-WF<zIV-#;P&%7!8AyEsV~uf3n-fPMbT0YTd?lT{CB2)&=gkyk^t+re&S53}%kXQy
zApd+Rzx>7%F(-t}W=HRtv?;jvtPSc%DF-WSTJF6IgoY3z4~ge8FPlgRc<Ne7VEP^%
zaiX2LOF!4&i=G>h!Y;Z47((Pe9HL#zc4dps9MZsVnXDN|iU<*_N`AqSiOHW*lWXsV
z5SLUY4AW-u3{JUi6dihl-BR%SB&sU=Lqok~aly{89Otg{ikXQD_v?g$pnj;TpBv;r
z)zOjV>X&krOAlD*oA at -CIxxR`aa6XBT26LgcIz}a>2|#C1OovLU*cQe)$$7&YOk_z
zDbsCEL%Pfii#fihy=iXXaN$s0$ZbPgke*mTIjk8(%&jA6gO;MkVI|G^(1ZSS*Xsx0
znK+%#8qC#iFYJW=^gIRj47wCw*l~IMr19*@B{Bz0xO5BI4!pSn&0nG*<<gQFhF0}v
z#>OF=_O&7G_j2hYMW0iPsF6{5$S9iYs5|qci$^DfD-Z7`AR<=iSp{NN0NCxlP`Lz{
z+NUBGcNx^p7pKWqyHwu?R=gAFo^Uh|3=Mg>>vkd0uVhgU%@IfgE59^E`e|YK1()N&
zQ@@JXU(_uHO#1e*S4PJ^SyTm4Ym!IfVICku&=wMPjxxt9Op>xLgxKT(aO4EKPlOBj
zBZ8v}%$YC^fPLh9H~p7xP_X9x8)tKs3vNV5G{fBIU0UdOh2W)+<!;2g3!@#qQsCaj
zw){wT=2X!^|No1ouK;SJjoPhK#i6BGi<DBJ6n9cV3Pp-L6n7}3kcL1~pv9fylH%?J
zhkO*bP>NfiSkMGbfRN<!|M%XRooCOU**QD2yR+}HJx>n5P+W6A^IH9%i6?f~f2StD
z5I3RU3K67De at VNs9kmn1+Cy6z?e$h{vHwMmOvDq5_%Gcpy$;m9-ro|r at 8kgblx}cn
zQN2Y1#e*u3!v1)BXI&=1%rU>Am7V<_IqP^;o4B;wGcUik;O~qGQ(MbxU%w#-cEUVR
zu7=0r{LL|r9%Q<Hi5#ZQ9~aN-gNB8}DuR|7Uqmjyv%V0BYX433-S7s7^8Oj!1^5Pa
zY+G<9t*MS1Q;&zvafE2mrng<|AC8_rn|-0F8)+f`9f<5EZ+~CbF5$iH{{i!+TIaEq
zdazZx{7;p}`y~5K;qhBfvG!p)EU$)W6KhWmlRIjUlX$h)|9hdjFhn=%J at b5Y;n3&1
z;nk>!{gNQ4fwTct74zQQsWFY&gM$JQFQ at y+-eU=LcpUuMTA(9u#hrzWxYlQ+cq6(E
z at lGv<3+lMrO;=~`eY4f8%&=rOeR3MOd6ORZdWHGD6)irf`r-GNqmrhy3*d&auMJ~C
zQ(XIZ9iXplJ5On&v`4}WfHuF6LZ+^fk|k(Ao6-}L_ua!u$upiw_nvB16su)ltv6gN
zW;&U<8<R70zal6O{?Y$-Pw2<qw*w$oX+(&gtD84!+SImALc}Rr6LoI-=+t^m{(gq_
z at EuiQwt4seTq7+|bEY at iqyesb|2c&M_EK5HV>5w>_ZJ at 8<as@#y#Wx!rQ*80>@twb
zW+reaW*Nle$=->*&4+3+ExLA_{KdwSZ at Yv+I;$V-_*sr27}Z at QCbAO+(~id!EfW~0
zwL6>d%~&*H-?j=YS)6TLlqo!b7j^nS)*6kgbNmAdX at P|-0Nw at 2e?Ya+#a{McHS0!l
zW4(@h^e6|X?Aqq^Vai+!^amn$Jk*wp{sTNf2W;W)O+z;c+ at YD2`oL2OTGs0&C2y8#
zp7p*9o2NYwNhq`K20d!lEHYI2!x4yjf2epj!}dS6>q|8=k3K9(uZU19pj_v^uE<|S
zG5iyw+f^$MREyHQ=19NeAS#lkq4><!R<tI4_*9_#pMkVy&Miw@{}=eel^yXfmVLPC
z at UES1sBBF-iu@}0Osu#nZ5XZwbqtiahja`Eu(r!|+rE^^`XG<d(K~vy%9cOEhdlb%
z{*Bzz4Hf~L{JtpI_hVQ}VVGyy2j8Ri9HU4oBD-V*s9 at +HL#<KBz7zG8Ci*3#->yuq
zUnPKst4qXvC>&3mAzpdONqZ!*Tz-}EZsk~HVR{9__t}_g^kmKHdIu~7rQ+t%U8Fg4
z#s)_|p)&h#Ca6N#+0$NlMunqsyz#n+m0potNn+M8CB*OaR=dT-@=KS`524sx&xeY*
z-xP~a0rzm82Pu%&1}X~j9YM~fjV7D8Oi;MwG9ftH_+3$?+9zF+q at nBM-sD(6f0Wu+
z0}28!Xd at E4*BO2M?!uZ<TpX)`)RmYT;MK~9f7+GWEpFkYT$XP&c>e2i-&hJ<%`$uY
z;@<a(pzl9R-foA97`+G9$HmCso{kB4yYW2a3)5c{!~V>AAWF&iZkoWuzqiy>sc)yX
zX2ex8-*yLlIn2$#g~k1-wsLBY`;kby%k+;(7wATt00~}$KH*fxj2XOT20n>;I4`tj
zOYV1m8fo-qSwFKm)^<tghrdm9oHiG4)g6;tmiAJ2O#T@>Ez at GGeGGJwq^)IsglM>J
z!urx@@$FPs<E>+fD7xA)xwn#mRt&q6&4PAU$TvUb at i(OZF5vGFXOAjp5~bA&9HuGf
zw)^<t1|{g<+<nWD>hVnD`eoT0S#e&sQ-#vT6AqGR+-0u4sp7pb>uhHtRctzPChsCe
zf6mlndF*DypLW%Z-O6m}=E)6 at i=Wx~sMH_h58`^6b#TDH`z6rT=<ENaTxo+nHdO-0
z**V5eIj%$RL&5u1R3g|rTH4abT+B7c2MYoahBEZ&H1T^}z}+XOi=n=3&9TAn*iyYd
zb=wML at 0?oR2Cl*wMXy5coW_0Ay4I}zU6t#C{(wKc<-LvIotL9y(3tc0FT-g^?Y<WM
z%J>a>A?w`D9sPJKQVX#12admTd at FALYPZ*w4r*!Pwb!BAsdBWtfv4iMoVRl2;+h_G
z)8KVw;udJ$deS1q!c18hLzgj6dZ|Pd!wx#5XdL`st?ssZzgi7u;k-ZfX{wvn`_&EN
zyZum-F?C=c?RhADO3pCrVB00A3x at m#Klcq4Rg98<z>V)(mWXP)&yDU1Gm!ndbzGFV
z`sK7xFLY~7iX9oUI{JC{K at m)v)V0N_r3k0OfREvQsH5(m82_`&D(fH0wR7QbluPM<
z;g#aG3%cc~E3g|!D&GLtF5;JC^I<%Al^`+t%=qP~8x-Yzt8R4UG4eg-5^j^9e^$u>
zT>6>+asD8U&2UC%U4kaXX*af){9y(bPEOhUALw8F&<(zSZX34x$XhPtG$tpxSC_`N
zq at ZS>^8>m!NGe7`CgyClxXP;=!bWb3;vk5fiMCnxqKB4a`zQzdk7<?;hB20WeXEqO
z$9-aoSKIE)q+N-<v!8ked1pW4HZuHJyBi)plMx1I=*$YEB<{oL at z2Hp;bgUA?cbDv
zWepXWsPD5?irp?Uh-6fKbQf=xLt*;ggBr>UQq|u}SopABb_%$8>5u|$Qi_%-j2Ey6
zNXstD^fKi!8F>q>e*qu7C^-c%QHoYZ#g7aBQN+J$cA>@ht at _YAo9)!7o#i%a^3Jk0
z6-<^iz6IB!d^s)(23#kxERSA+-8vQf4<5dlwmf<R_Uu%w6MmB{xG{PS#(Y}$A3U0a
z0F+_9n4QUZKxUijVcQ+qilrsUl&3UrjwpM+^aG|m*-ul=-pG-nSpYAixU)S!Q6B6f
z14&ZV066$4P3jVA0Gz~o#?$wf5m)5yEhFRFzdoJ5cL0348reV2g>O<`v!#Q~+w?vJ
zQcN_KY}^DxM(O=c2Q%%Dg at ZAo)k{3jhW^!O2Dsex^Q;+dSEkI*fI|_Km(9 at FM;%m+
zNuSEQ at h`qsICz>q=$oAR7xmPr%k}b08(fz at 2Zqbw#>wBvG}VnE&73O_9Uq+0Ndj^e
z0UPJG`_sCPuHmzM!)G_3 at c-=D!Nz?GzU<@*Ta at f!U3P%C!s^bfoYXgD;3KFyRI#UO
zG;GxI7^Wg98HAvNWK<)=+dOk&VyPJ=|3<_69(McP!y|9thTh*;>bSA`!GB(zqfrzl
z0CoRCH1wYdK})*1b>V%z5$yAFoAX!6M$6D2G*;HD0*8l8vQ~LV62#T%Oith5K)xBd
z&RI1wvIp1x3Ab)}!Y<j7$1J_mAFzp21pzKPFdP at xJIMcCaMlnR6e+_Bn~pXI_sDEd
z8mYoaSErV*Zm&PFrRtP^kEQlrl77EH{d?=l5sj`bRXFBN6Z>!SQ=5P=;_=hZG=ab{
zbB>^)r~b0t0T@~~8oJP~ZtN>I>eV6ZCeDy9>n8S)QEMBoRD at S5am@Nc;ToB4KlU5!
z#s&8>=T*w>Q`P?f|EmguF<#^?bKaypKUM7n+$HPm$NoRnb;_gDzW)HX$Rhi(fw21*
zw#%IVPeo1k+K&x}T~>>hIjJbpr+uA(|50gwgI&8|ScYGr+&Ja?4{()y=l`oH5ic?C
z&jfr91TOQ+5&;SRS^0`u3CP5Wezim2gqp;ttXv9Xvy3u_w$8(%;sL$29Y#rQ>mx?l
zq63ULP&+u_@$UG<jPn%A`D=Cv#@QR3F4pVpFB`1w_y-V7aonfeC&N1_VyCcMl+k4h
z%LO19Yw~4ug<^66h{T$>><S{F%w)$JFmndRm=7~^gwm<PETc?}v#(RwPBFztz*BE(
zD^%x^JT$uxe)L%(77Lz2-|P_n2EICc?~~<?Bd*kk|3Gx*k)JGX>~OWDgyDGo+rG!9
z^!M0rSoY$X_A9 at EZng<5ThyE{<5@*o?&8X3+CvsyFF|;^e_i6D<5tm5eU&Xy7BcVv
zU&dM<_&?jOy;LfQ0p^hlx`%CChF-#>)*e%&vZ6<Ptl8Qs^I6-EEVG&B=&boobfF}+
zIvM*1M#T#H7x0kOy0(XP&WZGTYjpSoco`aKt$qJv5csDmhFNy>PD{gOBK*rNXO1>O
zb#uCvtK_!t at y&kI8y4*IAxaTX)%q2yQblebvBzIV6quPOUmS&VFiKJwx!aGLRi4xX
zt+_#T`FDe$9_PTSx7Djb8TT}%HSC)IkXF8D_XP^l`C0BC7IHJt?L3b1-^6rjbx7V`
zJzI{Wfgk+?D*B^BN6!vq0AJ6>hL)~vg)DnQch^F-p~r_^%~u-kelz;i`sdz?Rj2Ij
zi at P?BPcrWYnS5sOzS7Kl{B}lA|N7Nd+M~OH7GcIrK}I>8 at vd)$&97W-{QUfF)ZH%R
ztA)G4Ciy&nuUyT$eH2L>$~7!}O@(d)@b`wZEeRk@^qKsvbW=oA`umH+uxI}FOg`dz
z8uR<kgOmS!f8G>`GY|71{DGwa>h}cFK~5%O`c}w|9i*n&-=7`O#c3FW`-dfK0;Hy#
zT*g%tkkp4AO`C<G2=0`FgF})?nfQTam*u1PSC=mzZeYBRy49P`blRTDk?mHS+!h1U
zTmO7$9+nnfqB^l?)9R<Dz>g|5nh=O6b>22m9{h0lQ`g)w(dg%k!<e?biLt)zSpJh^
z`*Tr5Scke*4)Y{na=LV#J%bHiinz!xOP}i(u7a1a9|-(2QfmEYG+vcIygEHwRZ;$L
zx~D4AZNs*bVs*sre#Qrba&7 at AM~=4p6d0KZBQrD)ohH^C75kdm7mYufbdwL}WEeX;
z-ZOfu`H)2}*^{aor0v=fP%*oTX8%}MDRy%B#Pdl}+N+5Mk2z#(hBj)$x;oID2NUtJ
zS^p)S_Q2?x;|fdj2M_wiwb4U45q*xIRNY^zc&Ak>eJV%I;jIlV9o~E1dp-fU^I4yM
zpJAWBK2ttpNxLoo2u)=_%EHS+toV_&m9mvjjIJZ^LX*t1%;TX378VwZ7ZJ^GE!@r9
z&Ap)UQ0>#n&nG84saf%gAK<)?H-RV3x$zyZt)8TBMxONKmUO6CaR(j8p2RAP1!Q$-
z)$fb`9ok_!j_~7cFSPtnMQZdX&LGf;v6COJ89T1ijg>faKoiu9-IpDd<(&nz at GfZb
zIB&LiT6x7t6ZsdqZti2zSs4N)Lz67BEcQsH&Dp-nX9^oGdoDW>K0QQ)Bd&658#6uN
z at Y78HDQl0l_|3I~SL%r7sEq^b#7BAB<3-^@=WYQFGo_>BnDD)G|A3BDb*o}wM!6H-
zbNZSORwY%8ttT`mG(DC9?H!i8M>Upv=l`AL>@Z9hRgP2&TgaI&HQ}4^tx#|FFYG>~
zZQ0e9<(8F}?G~)j!sNo_jKN}6z7>m+yV0+*4l6J+qB5q^7iwT`VLsX-KgHh5v_~i|
zOA=U^9G~o~$`Tl>YT1!7O1GjyzN{>%G^qqv{-`XdWLgf`t|jZr7OSb8_~Fu~U{OuC
zWmKfxCpk;3Ri7XOmWCadq*P}JBaOSn4I(}O7#y%9Z?`Db<2e<eXI_WPINK#Us1ZB1
zsvb^93M3sj_=y!n_z?6>jX~N41(!m0EjC-7W}0!DkvA}tT`!>=Qk<}Dc6Eay2AJY-
zxIh_CapIsroX-?0e|}nJs<Xet*KXHn3s0Sx9ne5>^yu~2a3|6}UTXj2NLsuXd&oWt
zs)>?;mck_z$D~wGvYN{eRNjMlm{_9n=OyyzDA9;G_|T}yhtPHFe|Y=p!!xqQNoRu}
z4J^ZbwN;AK3`TGW*fGtn2E?8=8IL{RUF|}bD03ml6lhH{0t_PkFTODFo^8Dx46o%1
zArI!J6brdTNbA7ic68m^rB1!tR&>9$VRVC|ujx>upXfSAKVHsAq1~F5udUsrmHD1H
z?)vhN`R~{)d10qBnKWj`AKmS+HgqZ8Lg{n^LXqwchLPKRW03aqXHuza7wmiHumm+M
zETeHp+nGqZhlceI$s_Z!2%ObfIa#AqD2gybtaQM&bsu at b&&4s|Mv-}zyqBA1ie`Gg
zr at crP-_;H!ZPf#Sv+$S1 at y6-lk<*D?ZIntHsjxqO)}h_50XPo_D`AJTFYu0UIuj5x
z<IrxhpaV=1eTrQi>DS)Dp%+I9cRP?95Sk^qGju51ul7isX1~vz*(v!^voi5R$K~)p
zXHN|AUPt2rNoGmzlsxD->H=G>vqgZ$(Om at Qjz%<t<`Ni1KF0n*x1;6+G_6qHGYVS7
zaZ|Bowmvoi_9Z#!XE$H}t(on==6?%XzNGxC6?2<7m_?v|81|S!*oYaj*M1SM7JtvI
zCrFQ=fe#?D0{k2Wy6STDY<F^}ICu4C%R0^Ow8U1O>e+5ww at p4NhnJIHQ3;4pS=y28
z_F}-roAPOr_W+;j`UA{4tjjlX`~E*K$LK{V;J=Nm(3}#QKF`}~%Xbs#SJWWob`9~m
zG&6#vxYVSx;IGL6pUM}mOAZ0-vR}S<wL$rq(Nf%RT;Rr?#93{!o^w=QQ;M`5e_WP4
zi(6!9YYhZ(?pNC2sN<%|Kk-GLQkxDi6hZ)8+5Tc<uFSf!{no}@lEO4vyLHyn+v%a-
z=k|Fx at 9wB>2dTUDp^1Y1-soMtBQLS8)Dtu~=k78CN9>LI;T_)*>%vJaoAY3A`)#Q@
zz&j<5);{4nzy$ezBY=B%6wifJNEg;CN+it|94wY4&hnwe8`ifO=P=IjJcVdH at 7zPD
z(O)DpTjKe)+uXFXRgOX|zM>aDGkJ5TeP<@3gR9ME{l7V9ajR$L7Al1Gt~px`E5q`n
z?5-46*8&sUn}6F08U8b5=|!}oGIVa|Z at U00q0b5MVpsk)s0B1BAA)*VzxW#+T;)+f
z%CBnYUTnQ9c%a?5J&TGe)|g+Ku1xlr<S}^*gSAw<q7r1cd_$Cc&S5zgk-iV+LY=0W
zEbshUd_6PE at TQ*iXpuHcZ_Ah2-8s!;U368u*Fq}{FqbBVEh6AhXaf9qqh8CdHZJ^k
zs})%L%GssZ-ujJX@`rq!ecnc}z;WQiNL%f#iY_p}(V5s;I9g%LtB+k|*h}ZWkGZco
zaG?peov<3g%e8orv06wN_ez5A#F#ZK_%1Y5)c^6b%PuM6pA<zeM`RBE8%}+{-cnT&
zp6T+`%It3?#&w4)Wo~3z^1EI@=d^EF+cu=bSL+}(nGUmX=8zOHIPDw$_ at osw@6T9r
zxfUBL#oX!%aL*>Oekaa7Cangz^B+nYZ(JI&>QeQ0f4AoR=$~uG at 5%jlR`XB2B?q@$
zF|-bO=^YJvYc3N#(<uH!iFBNWj3gZ7?;fdbVr9nkgY^pmA*49&@6ONRSv at t~aC%Cd
zTX1JpA<h-<yEgSq``$Ln``zJ7ty8UYX_Ws^e0$v$!}#NIJ5E7r|3HZ(9B^q#!piJ7
zM%8Mb7R-u2L1 at kq{oS!O(YH?LWNMIIL~?d)(24fhT*PN_r)5{On)Y4Sqxz-K^;PZ>
z3lFr<=a@(1I~tf8;d>2hdB)d!rW?NABF>feFMaw|RdJ`TleMFPM=_+zy{Dq4%00~H
zf#dnyGt#ubyMRYQfV)8K-lY^<bv7rXj8=JAY^+>sn)Jf=#ME7xQMci2PX4L@#@{`f
zEZ5P%_+x^;qv2&l at rb`WYSN{xYLAw8;^6Xj>u4{oxnf=#XbWInTa~K(rf2Nwl at lKQ
zCuUo|IiP3v0%BuAH&Th&@G$uS->z at T`^T&~rpCnozIH$CIo&99a|5054a#eJRUX!R
zz#i``(9?0azh|vwrD*%-3;E83X<BjolarfeQb77Y4PTW+FiY?5=T2sT*_9qY9@|uz
zos!2#J)h^6GNeD%cv~drYdZ!M1JE5mheTOOyb^JK?d>*dS%R${TVI$g)i1$f75`fl
zmz3a at m}OwX;i%QZD%YsPB7v&Lru^93+7W!sReXgBM}Z}X@{)L+fK>?Jv*RyP(c34N
z=~nsnJlXu_Jcu&y at o|1rUV;L4<_1XDl+ZNe1k$ka*LMrjTfo at J&37`kv?tCh^L`#<
zbfj12d>kGgKwkI>$Q$pB at x3deUe9eDooa-@hOx^J at YjUj!MY at s8n#bQ1cY#eOm;PF
zj5wE8t%!bx at I0f<)#rM-+g6l- at LNa}NEEJ$?wBd=UQp^t9LVo$NO8lo(fcY)5wk5z
zO4LqX7{zotE!C^@hdU39WpjiNC at 3V+%a=@T at khQ<iME^A3NGt>T(^y~ovsYMtIkOJ
zgLrWQF98hc0#$DP8XwAL88S}TGrHu8H=Ib=W0~5nF2}bEClHA7h>pKl6DuSpIuRav
zhOG#EZaSNXUseZsw@`KfC;$R-aRiy_I?7rH3UX_;Cb<xd4IX*+wa^5F+bvsp)yTWr
z&PO&@*jE%9XXpt-hF6cuilP&ihgy)rIJ6shtW9F00tCx2%FQC(fIt&Gd;I9=YtpyN
zYK*Ozlx8K{;(gEE3g-l|RYgu_qowbvPVV1JZb)fuOjf`L5vDA|-3)YpqcSC=ddXTf
zU}Z7BK at 5D{^5&SnQ=2>QB*#FQHjSxQN0Po|qAha}!qwzLuf)pp#4OB2q{c5{*MQ;r
z+j<4LV9lt#H>DP?i!7Q5)%Hgy!0UZN#fDRA!K`7M$d=>uYhj3y`ib&0H1?8JHiTw?
zpkI*Up3eS`;x=0|ci^ko-t6lz|3)`;k0J*>bv!qjMZZ~Su*doB&&8Z5pP+XsHPbBd
zN41)R<(v8$MuwC2;EB-~)eHFBe&YuUyA}$am>fP<n<$dA_38YQA&*}ko%{UJw%yuj
z>8kV+DmgyKiB+!Gfo;dubky?FnfBE&)~E-Cl(X3_Mb>idFKfkpgO++q<S*o9)EL%s
zB?r*-D~`Go+3dwYbC9EU#71-o!IJ)j>P({^7vy1uUERZ#lU7I9xF$OoOh8l5;i^g4
z at CnWlgpKHbAkTwbGZCCMFzUcSH`AhMAWgxt&``s+c3mDaX}|C$Z&%Kyyxp;T)(E8$
zYvWdE*g;>boQF{$7zpe3ay+&-if!~2dxeeF9z-7V2N#TE-WdK+o|QR2x{vK?25``<
zZs3MMnF_*qkT1~D!8c(qKynamRJ-eNoNs4n*X!3z!Tvkg19Hqq-p_|N7>VF7=xLfc
zllzZ}WEQPnQEUTmtw9=S<U1M!+w!O)bi0|4`|mu-(>fP at OpFTyE5YPYcRG?XyJHDh
zCVO0Q_Atxr5q3RuY}J2LeajxV??II7=^L{(`iq-X>$N0Qx6Ac*F!0QPM>(oOl_%4L
zyk~)@M$;}4?XC_BWp##Tz3R1E)Lv<hv35&Q5TR$YOpBqT*&R_}T&SUej2LK=GLW at R
zXy3+~ahG%utz(DZBWOD%wVH0P4*tG_d7=Adjg7 at R_QxO02HV5V_f(ZZn-6M_=s(38
zuk!9r&crv^i<s9px`W-7_MK<38nO2C?p9_-6 at O^Dk|m^!ztoBZ)l5-4{Hqt5uh at F9
zE;m!;IC49`NMYKrwYgd=$Fl8}gYukfU%I2$<zRw*z`YYo!>5uqx9X-YN1P*nc#2<{
zf7+lBi9`k{*3MZgW~2L+XQnD1nIsEk1ire9s47R}{Tts at WwDQ5nRgVPe>ETK5CsXi
z)4=jo?4LbjKZvzjD0*W*qCW4_Q{{7U(w at 92`Nr&#(1c+_a*9cl at Q|V0kUFoGV7q+z
zDX3q`!;$DoBDKup0SVdf<)p68j8<pp$c?z)WA-d!kH$B^uKKe5cK=@3kj<nlke!pp
z^e|pXAkeq1yv<}d*e(Bx9M>Mlwps{ccNT2yBP~XkK2N?mAAc8tn5XOebo@>f(suI5
zhWL0h5;0xah;5gkOBZShY=|{<m=AiqTUK&K&X?e4y<U<x0vNjIdFz@#JaE<~If?Yj
z%2(`EX|6w>CR|+=B6Mrs^r~;=ynSW71OD87&las%_q!JV4c~Eof7H&`(_d^#Cj<?j
zm1}Ddt;UUfinGwpQ4HA=&HFd`nH*?=Lo*Er2+cuJY9kAcxOSi;K*AwQr4BAfs at p@%
zYF|TJG&NVS!r+#MRRre&$mpQo)Bw~MGQ;58J6=N&gnMm|$Oe2Rc;Liz at Oqw60g8m|
zt9qi^yy1A6S0YDte at 8h+T8jA2&{;g_qfE!As<Q+rMWZ|lqLVCyYZe_;6f$<=rwQM{
zE#+j=$g at 0~B|wDL0j*iva%slog0n9b<UoSL1IIQB_!Sj4bmK`^N at x~aZ69D31xmn~
zyqJoq_Q at _^tIH4+%^s??u~Ghyh!!Gulsg*0?JKgIC>23W!P&E^eKR$_cX4v^_r{%Z
zMl84{GGXa5JB=%+WT2^JaA3|alz|->HX!aO2N%3R`A2wz0-Pvrq7(hUNNSnjWJSd(
z3#=2N?bcr8s&*r9z`o_c8D&Y}lCSsYNytA6ilB~yV5=z*Tv8?t*p%q`wQ9|O6H*`;
zOBTCS!S*|r0Y{bt{NzP~x(RIOSi8e$(A1OAVRYW!io+o-4i(`LZF-8kXG-P at y72=I
ztn~m6Ze6<w-fXE;-bWIJ62~iRsI<i>XN?*t%E~1W(W3SWJ7m5kQ5nj**)sxcS19pl
z>FdxMnG-U!R&V>~YMGFG1KNq|6&Vfzt@%5lD2-@#8P2buHL}&E;$jh`YJ&Sl#w at YR
zP at +MqFgpSazo^rTIwyjDQZ1cIQ+~6;cRiiS15%18<Vi24)3E`G at 9j(5iyq}{2c7bv
z|KuxvLWcMIjW5 at Gm6xf%6|aN689FzR*hyIwg#l0&l0B<lAVN1UUchL8#0RaZNN5Ew
ze9O1w$IhJQcdzMdN42VY+qB6&nH`@deE7uj2rvA%01S(NDHk=K_5<CS$hMBx9lCIr
zckBUNtorX0 at Z{sFi)P%r7)>vgX1&Bb8~FpBfq;c at 1#IKWmxcqLzP`d4r1-;(73{hi
z{@bLO%!{kjqyzTGRF&=oh~LFxNjSFn`&BHDw)b5I`qm=)8soRL>oFnq3?mbk*-_HU
zs(ihCIUfA^_}{WRc%FRPc6#6U>OZ at TqvT%j@`}hx-j#RMu=!%z#`jd>#pKF3w`2 at Y
z5<+l}VPTIRl8@)U;2oURNKjB42p4f4<Cxdb5RB>Z)&6i|%$7;e*ykG=^KuqpPK4H!
zw9}94K4swCxn4_~(4N!nW_tHLS&oeT8oQ1de;N1Fl6?6OfY9(@_yCrX2K-u%xm1yW
z3vTGQmK?bIrF5KCmbKVQ`0h^N9mB_d`Mi8rHf#8Ld0O=7NsIi>ix5bzUIoVxk|W%U
zF=PGX7n`>l<?E{I3Pob{K%GSfqMsX0n}HoezhKb!ZvDS;D|?9Agr5di(IO!As^TVT
zM^LP=%b!n4N{g$GHrIUOcVo0Q at bVMxpzUuw+Of~Sy#T8%%01?k_%`|bICX}j#xO^@
zr$E<F{MBP723rXBK^Ee5Uc$d5=7&kU_1|pd`D+vy+#V~myC$g_{!mf2<>^U}@8nyD
z@(krOT#@^v<3%I2oRQecJ at ojPe&tq^ZCz6HxHsQyA}tec67iVd at JU6RogfX31V*ia
z at 8p9<jG9+Uzj-LH;BM4a$2+dG$<^;v9Nq@(6tspW*_mi^QyFTUKkId%KRVX7 at 4574
z6O1i&7FXq`zD<J!%^o-!>iQ`cv_O;#K8+=Q*48L59V*2>0-3&ziv7%NP^5|4`NwH5
z!7G9?o%Ee6=TUB6Ex#o2NytfMWLo4a<%_AIW}we9EFnXbeP|e2nHd$l6a;mJf)+=9
zcX2K5{mxMKy&rblH?$tu7=9Z^OV7x*_LA;T%nm&n8}l??==Z#8%UIa$+mXAw)SesE
zw|90unCO|;aMaj|XIxDda*kiW%jNrI{E7Q?{`U8^ck@&~zDt0l>@AJI=F5ra`@H8-
z;qKZiQPg|dxhH5_5zKwf>@&+BaUOA=+B#&N$$Ps;l20H0qyF4 at CoJs#9XHO$wEsND
z6>~MewtjNEVJ#`hQ*LtOd1pni*R^+n|J-F&zl(d)ZH?x?mnCJz(_MYjS#h1q^sH5c
zIcA8?!>oW_u;w2%_LHW^G}jaHiN(u{SlB6je(m~UIzsEHdVi`D<?wH>E9e^6yWd?4
zn!#SYznq<_Q&=l+gxvaGj|WlRtfzMJXimIpQvzNbxEng2{zqO~P at 3z>#L{A==I2jg
zlTTuv(sc&LH$1E1qtB6C{BOV7x6^%oJkavicVwMy<R{i^RM$?eevJ(K0`7x^<l_I)
z#i!}ZhScA?G_Lf$zE1S7AQxMUp<-9YEYqLtucia{jt&ssb|(tP>`o?i0o1o{Qhm3n
z&QcDh#wfJt8-1oYY3r66%y;zcEk53JpJ)Z0&l~J4-gy3R<Bp)YCwy_Op?k0vCyQPb
z+6i%Aj3Kp~Rka6vTwDlmGxOB2qLKR)fk@(cCdW`Ql5gb}(f+sjW-p%~4vhU-Ed5`q
zeFc|UWV`5#7-#-8ah%CVR8)qwuD77xId5NKZCX>_-%ZUJ_RZD at d_)hu1}dx|jo{Dn
zk<KB&Y+^#U#fye2K9ASDUlJ=IX(K$6IjT0^ZKFPN{$nL4qA_<%u-Od<sonaHHr}J^
z9!2AdUZlOeaX3kvgPaD88;4MPQ<8vjVmoYW<VegDOfcrj(lbtXGxdQcNBOmH={}#l
z$XRs>a;xQQ7dUAFnRf6gr`+Z49^Nx6DU-5nGLYtD=uPRVOE}5~c3NGY0mGHAk&hgC
z9UJO&@#~OLuW+JFMmNC6-1|J{0~UF?N57kfdR!F6YM{O=5tbA$m!C22#Bq?FH|2yo
z at rcZwNUUN@%cM~dZKh;#CyI&wdbgAOk9qGKGi>Y2+VJ58E;A;RrHGrbB*QLK2aj3!
zAGQDHRzC@(rD|A%uKOrTqlj8kIBlXt2ge at 8(kNm9Ui)5iRB*^BHRb$uVtUR}x1zYT
zz=6RQ?m{X!X^-F=5I2Z#t$RfDJb5t-L#8V&wZqI#`zSxG*P%55HUfRMCMQ)tCj?4r
zJ^L7^;-7oJ*5$%v<y+Q_VI8uIC&XjCr_2yeO9M}Vr_JKGQvVHX?$Bk>FGg-6veAhO
z2qRA4&)Pvw$;q$c(rU2%#&BkJnlub{Rc(3qzoOgGds|%r)jh?1^OppwsmYo2u1iP;
zdU;75y42ZvY=8$`CBkSj_$AY1*6ok1xoJKOb!|gaF6p~!bxo&lR|X=Kc}{|QIAD(w
zzSaK><dD~VpNF3ru3=15ac^cB3VZKBD{oS%`ZfDQ<a!|%`u_d`{?lEH%qjT=pXy|$
zpzhPJ{sA-fcz$QLrp>!`+l>8Gwp&^eSv?1`iVqA&6b=?P-rpgpXq&s?6leLAj3YO4
z7IMpXd^u1&cW9KW8N2nen^FU(YDc-yik&GE+V^iTh<Zz-S6Fw{5J%n4LIOj%nwg;r
zJ+coSjquMJs3aFmOx(JjF|H0wjYX7T3kRGHAB2E)b^p at mmg@*`a>y6?wG!z$8CfUC
z6|wU9vJ0E`Q4mpy*?Vq7za3vm>hVc_;2ZBCEX7w-76SC-c{vXIs>=Gw!UGpOF#Zvu
zry&zlY=q5<h|U5T1kSFe+{{kM{rOyIFswE=^SSVg+c2H at _Pp9+uF?pX+?L{}E)k}=
z4aMBswNjH0A1J*WdoRwcxr^k!TTgjeltv=_c$!<_)Z;NeN1p#JnOhN74LfRU-+Uq)
zp_MDv at rBN!XMBa_pnS6z+h9KYkh}Z+LHJkAOj_ZH1Do<x-sFgz5ifefa6R`{n7nk%
z>4hUpZ0cv8Lzy3TyVYoz)1~xyt~{uD>(Ado>lu#S^<<bOG}Iv7>CAejZCYoZcF-eh
z&7cCl5uV-iyQ!ESo*JWFX2{G#?QpRbUSDI^rKpEqyV1Z|BX}L9m%E3Y5#6y{$~UV@
z6>-%j?h)6mNC}(lN6$hczKED-GCTIDMijnRHoD)V&$iOgl(+UVQ(cQUrK#*TZ{v#Y
z1*7sn-kQN7|5?&C^*04^y2kvu^0|x#98A;QJ_V_Vsk-K1b1wny=e$4pk`mPU3+i=M
z_{)Ck4GJ)IKRC!*snXYf!Jm}$LfxPsUDu){XF}hFACV-hZc&ge%|k74l5|V`T|xX`
zW9Qr(&oz@?^S-}hn9e_v#H=3nRkf|GUf+~IN8OcI<BrkXbN8g%1zAn}9^u?8#q=fh
zMzYV at leE+w*ZB(~{~CZz!75<GtwJUK#Uv+Qm4oLBKeN?^c at 6!`j}6bCd#SfcKZ_B#
zqn?|PFJHtXz^`7KP<U)`&QD6ZI{4Z?PSlts_r5_0|CUX>s5#gY{DvhbO5ajng+DJT
z<)_G?v3=%Yt*B+%FAe=?{E10MKaG<32VDpC?b8oiL at m;ChV>oz>yl&!&F!-fLqx4i
zehKO`^G7D}4(i&c9TwJ_o8+_=v{kg_wUxCMmFpYwmn9LBXnslzh7PI at _6?e at GuUU<
zTF(CRFZC~U)0gDWNE%HN{wXw=GH7U at QEM@q<6q!kv8&&q<IBJFqBTij&~jbQ9$ss8
zW_kAJOy^AP%;Zd2<`<hjHGgOl_n^*ts<*jJ&P8daz7~H`lGvchdZxE!^DlG#m;5P7
z0)w7|2J7kG7R@;e`X2m^Npgc02E`GjrRgsWEF|>xe2QiCi_-N*3N{QaO5y3MBV`+U
zM`brBf?S>=s!f#wl!QtZOPTdJ^&-n+%REl*AikgHo9YS`BpVJD+fRDCfDu94RfhTk
zB}tPnTnrHDrWO at BQ~ItYh)G!&3q-c5mHRJAeb$ob$!9L#=JX%v2Ty!Lq|KST=Y$js
zO&Yos&zU~Z>zb5wF_U=fUZhgGH%aZHib$L at 2~gk5^)-MS!gb&VttC1xAPLiG9R(K}
zMA6)bXah)Dz=X7frRGP5NuCoK2 at _2ny-9II)tvTT74=7|(%^~CZCamVSq)92(6Z4o
z;bQKI`0dE;=RWo439>5eWifhIhJ9rW6XDxDKDFl&=cTgB0h(E*T6$JSMP*_WY1 at K6
z4YI0PWhlL+kC?K16F;`Od}>;hEJ|PME$OF}2~0FjG){shK$C=tBpbMNaiy+N8Lo`8
z*mZ(tGIk<%60yy<E$h?X@`j{O(pY>Br3FO5yRX(*UF3S`N|nLOtcuMhgeNPuC4E|3
z-jUQvri&$)HFRC10jLZz(Y_7ZR`fxhx1R@}=ba~>*PTcDy;dmZ(4{F;oygl3Icf5H
zOEOR>$=1~_bDXH#mN{wjd(&QQsViJ&G_f>Mwk>he;`gq-1g+~?2AXJ1|HG&`DX!_#
z;^0)c at yFXqOQ`5_)OJO)I6x>i*=VR}efqA`O~hMM>xwXZn4vyIU!YK-kZGD at dSQ;i
z^v<4IMZTfBKt<Bnpv!vwq3O*LtFmH)zb{-3>Pt-}Dq0NRm6c5Xb#e8nZ!uM<=$Lx#
zS}gJRv8!hNm5LJP;+xK$reYP%Q*ZB$nYvWef2=?-7yfW{uWvB at KBW~oG3UzO%~p{&
zrM6S9P~bDx;-c+3>NM)ISpU4DmARtFiK8NPN^hs2$E6*iXquUt)8l%_G&eb4p@`R&
z-?TKj at MQAbnS{7H_u4&9(wH^(!DNW@*4*bk at ZL@L?~=L at 9oB;ADa*gTPPUh<>O*s1
z-Gd}`GV(R2EXOP-3!SQ*^$^Z;J9A&$LnQSw3Pz?joPY at M9P6CFdtk#yvwWecWTy`Z
z`?-ucZ}%VgWPAfY249KKZqPL=sF*@eEB={s;&kD3=5%#MXxID9`MC$<OYmt8I`jGN
zQ;O3ae;S;uT+9&ebH47O_#`}{L64|1Ul35XH-&eCAaL~obI?7=9 at U=e9^anh-ow3b
zz8~fC*{5QhR1vmwUVGp1Wxl#{1zA%lCr1Qu4!jrStJ9iqF;(e=bT&e`&iU+x`0BM5
zEKXsaKm{kUr^UL7y4!!_3cvKT{pAM^nu|7mQ3Ir at ZX})AK}}vW|NLQRZK9;e6*;JC
zFLIVD_>wcl<LtZOQ}|C_dwvts<am2~852vxIC5=nIgh~5i`vriXJtc=YYWSHU58|A
zE6e$IhHlm7xbd(KJrjK`nG`7c{??E~ZL{0ccXl6U)k6lSL^VQ&Bx at _8;`Z$F-Gt@(
zV`>w31>p%6c1CCQ{wj(Btpm?zEmVdcZN)3tY0rM>9Yoj0MkOAIzIistbC#)*%r9zC
zIM7iG-xa3n5A=>>6AbOo at lMr9=~_QJyeacG=BMzWj(5GkT1>p{y7XBsn=oI0xOYOP
zpjCX;;APQC#y~5vYG}(lB$MB9VAeY(Qvfp{wdUXa`sL5aHJfIomq|lw8Q#t2PnQxr
zhd^tshYHQQl?i2+ba>aBRiMuS37kWSLxyIp$`sbMqC>G}9gl>Jb<E+tW at RXU<Dk2D
z>%voHg4IygA#3vor~qh4!Mo~03!6w>Cmd3p<z1+e1!3`2Yj42sIg(Y^bif)MDST^H
zhxzin+CyT8<??)^L-!7I+jxYB1P-OZ29}A_>kq(s=!C{~cCgXImfW(I!VebH4;Clb
z{iqj9FcZM7W}g&n5oYXY`|S9_?`r!m%lE?N563viBDZ6=dye~#SI$>k%wTUX$M%$@
zOnlfXI1%+TY0o6#z7gjs^k41UBP<Q73XP^+zfuf7x5ro-RTWK7vu-{(QSq~F59jzL
zHF^EyiGs0bq13e5=2O29?MWP^jZ<C6pWCC+hOvL<x8nUE?ZIdrTs~+D{<n40;-u)r
z@!0Xi!|x~BB6iC5ODy^wu7vQ{_5|(6sh|}*&2X%wpa#>@p3*zkSJ1?j5ypu-*N+3w
zp9EAZDsh(5jE|rEJ3l(VcYZq{pPZ|x&RK!XkG*UMT0KrVIXJ%&kgKQ$FGpT-SZI$~
zjTdc?A5Wibo!<{Aylji97#+iGA00~_pPgR|$mw`*RW3Z1vORPxb+Uebmn1}TC$W<(
zND2W3mmNhF$ST;csxiO>;4ffmdK<pEb9{1si=;;q3&`tGTPlZD!g4&vkQ0sD^T&JV
z)Fc6tYd{e>y5j at IaH#?}M%Z53A|8{@3FkEDvFF<7qvyisS4qF1?*ZkUW3k(P$E)Xe
zNJgZ5s5+nmJ~q0IIX*hSNy>$)A<M1CVB=NW)5kmK4 at ia356Ft8G2G+dAMa28x$nFg
zVx1b&)o(2wovHGYyYZjsMU=dXB{w{N>G>x{@w+TPqPcpxRdiN$@=^~{br!xZd}h^t
z#2dvIop9-q)a&#<cl{|g$jWpdmY1tDQ0%5JQu=r at YFp(&UZKuVvHOI`_T!VNbCv6P
zIb;1!ZsH=>q6$@h(b?T#9f{gdxyRk@<XkWMHhM}WmCmDHWbQGYiX8V}C(kdhWFKcm
zp?dXH9_E!D)E`70l#h*siMFtgsYLw~@q45YZK+Z|Hos}x&2pd;6z{~tGRiWb5)to`
z&k_&~Re{-l6Z!MV?!IKmqj%BPDlH-lU(sJXA6Z9<TZ*f&<VB}MiS!!VW**dvpi at 6-
zh(BXVj5dlgistWi?bWwUKWGtIOtl^scVMZDmgzOO%{~YbSu*}4D9+3h8O__PYnygZ
zShHYk-DcnB-e%k8+U8g;Zpcy=O^Bw6lIRWXRqgHTHC?@&B2t5%`Q-27 at 8Bjb$&wL0
z8Z8_p)SJ?4Xq!>9IAiT^@9(}V-XY at 4vh=t$TA|l+Rn8V(vvi6+?K~Yj9XOpm?UDY(
zCQi)~8qM9SvzqF)AZ>l&k}0mmQWP!LYqFZ at g>L#}F8-1wC0d}@v)5oX-D|PQdO_TS
zr7>Er*FrBfq9i??Uvp7hWBg01j7Cw~_^|zkq(vb-t#8<ML+mKy=5Ub1)4FPtZvSpU
z7eyClF;20_jMxm1qdRrq&+<+F3fd=24yD?UcsqdWg0?&j#RbxmMqW4=)TNs&mRnDW
zyQU#VWF0K(vQ3uUK1qtRrbUlDbNDtpabG-m_)}fl?1GzhNUG3?p+oWP+<mdG5lII#
zvEOcvD(QP8)DEh3iL<l*gS$4q5^zbl2wb8yO~(NwHWwwL;6PJXG&>X}0m%p$mKH;6
zykZ#PIg$~Z)ezAe5wEM79o_Y$enpiYJlwfK3oMoy){qL#7|jq)<sOdTh}?J%tUpVT
z>1A_`5wnu)%U~D|-{1k(o<*FM%Jle;WV&dHSxFUThz+N02m%{q`Z8TnVoR?u8TW>N
zY;XZ<n!C+iUWzS=r(_5WHx4(BfQCUMgyE!(7eK^W$5~)=@5P^s{)-uNSEx;;*mMT#
zu=dF4aP-DAVBJ~s*^lO)i at ysl9%79da>G at _RU=s&QX4Oi%z%x}eG9HoN30kjV<`iW
z3P=Z}0Wy%ORKvj=Pmij>-SRFRVzC)~!&W1S8~jK0;9hyxY_ZXdhr^K at yhpX*o{Nz-
z7fZ3K45{Ia4WXk3a9`UFEp<<hta#{`P3kUdS+*E9>LTtU?iB9EuJwK3n%A1o8gLE7
z_?htwqc@{3qnG^3^X;z_I>QI4c}=Tcq4Njd^S-aDsj8{+t2(Q)sG6wCsDf2*h9dKF
z^AhrE^CI#}^V0KL@<Q?o^OEx#@?!ET^Rn|g@&fa6^5XMq^1`|Q8=IipyzPBME?p*F
z&Q$s>n-F^iTTaYW3`K7d+^42%;E9|~N0+oTmimEAXnE9(m1$>Ml03LeT3TPq1oPaf
zldEgJUMDtmBey>R7^0kON2?Sc^(*Mwt*9`WUtz_+Y+lD3WHdUQ&m%}g(gB$WMQ4rT
zo0G6WY(*tT27}Ms3fK+UBkhv*uJ2yo3*HUhi=7Fb37rd_4V_n=;Y7sN$JWL+#MV&l
zD&uV+e>iGW^f}7q?Sv62vt3E50<i|!h}a5wb8!A)W`Ozn at L-AnW|kZ84XO8rD;R>&
zme!n}vGWZ0d<A>>C%EyM&H4wt8h!xJf9Xc`?T+up&KJ!K2x!kb&N$9F&N|LxW-xP@
zS<L*ynTK-^XCKa|%%sev%%;p6%^1xY%^J;5&y?-D?rG0V&rZ)v%}C8j%}UL~>pg2c
z5uSCPjks!DJ+2nlfU5!6FS#x`!sa at b$WbH{;#DFLAB=y8 at 4|EA^YFI#RXhV8bLo>6
z?F!FW)g$%6^UyhHFS(Y)L^L7F5W&PU{B$8Drk)f;(j=PU8~1QCO9-SR(h0T%9Uupi
z-Vs&tv3v00i}o$}JhB?*jC7+6k`bf`5-ZVw*ob$<<93(kVbxZROVt$P<{5G#$&si@
z6vkWaA!lKYOSKeh$~bhMoI;9epCc27tytaXak5N~LXOF{G67nXX?w?V4Xe_><70Nd
z#^5G0Wl-jh*>w$KOD26L)8N>;?7EI4OULVu?;N=uZ5<gf0jNTh18M`sjJk#)p{O#2
zvS?(@WX$9^y&Jq5d>VkvvVnP-f5J0o)G{Z=v=(R4XVrDVb$NA(b#---i82q0w(2t%
zL{OC|4-^)~fyzc%qR=QsR0j%*BBQRN0#R>Joha4JcbV_9x-z at 6xHDsARb?;Vb-6z2
z>nJYA8nMm$G9NMvP@;}AGE*`r7O!NvJXC7kZy7WT=vk(k<Dg8Z%$Ur8%&bh0%;Z at r
zF#X62^Tn|M7y>K=CIcIQF~CY-Hn0O22+RS-18accz!G2 at uo?IRSO81{B7o6#gUwTC
z-+@`cc3?0t510t7J5s|iV+=8p7+(xE1~tf+*_zp!1$jY`hI?auut3GV1)P8HS^3fH
zbw3O+Y3GHfER8IULAE!CFNYULg at 1u}(NXGA(~;7;I_3zKh|)tn%oLWj^3L|n_UhR6
z?*UJNE4}lM+Kvn`uBhoOPibN4r7s=p{_|%sM-~_eDiTG=O3CDu27H08UCf+?AL(Hn
zQKMN_(#Z0Ky|&$p!862B#1SjT0Mm$aMd31+<Y1pILFmuq&5MDvx}(CQhnOnVQYKQ)
zQ-)G(zHu=Qo<B2M-yW1e$)Q{@ODI?-Mb;f-p+n~yZt|NxAoqnsB-Hwz>g}gL1myok
zrl)dmM1XDFMXbuXr<ibbJK-like*vM?`q;_jNQ1<e3DEV;UhiFHi2J}r{89D{Xe?#
zHZXJ2&xg79_}b*${!X70rX)xoe^+SR26A9s6Fj4{%j3)38m1wxq*t%>GHS+P_nGfQ
zNSH#8rHyAz?2OSaAO0a#*!7+_E1wSNyuzgQ*`859R1J%b;O@~`aq^0KL>t*{Bl0|?
zo4!V0kfCeE*eml9-B3^QBL;!)0~>RVFf|cgEn2>a#O{F=Mz7M-RB26r^URlq5n|nG
zD}r7P(yEyPC<aXAz3v|?TwXOzO6D(KGNeQbbSJI6 at Io}Hl+#Z~Xou}|pRC;S%4<?v
z5LD#%plghn at 7`OX_9|-nupoq`gVPfth}}g!q!qE1x|OR3G6%oDzLyu|po@*@>t0>C
za{xZb|Eli)#$U%@O<pLQ&WhQJZZrbZeY8 at x;<~c4!n$(vK=VN8!2N*zz~VsRAosN6
ztJ=lui;oxYFN`mgF7z)nF3d09Ug)+7LV2M=mUKwEs)(hC>26#%u7|UGXXU|x>H*(@
z<3ZtR<Z0Py#%b%<4;Sw)^xA~TylA?z9;ASF7$uAn(eTyCaLv>^x!w+5J~&%zHTO6E
zt@@U__Id3yOn<X?wz(N9WvAa~9kS-<9dKsZ9Juh&gGVYkqn|LKx$fW%Z2n>XWJwtC
zr12-`PqTrF_0Tm*Z?ons^XJz~?4EP83 at H`r4z(;;LXELcKtJUMvesXUCO(+`DU|ks
z8<f;Ku(;0Qt=*imV20%;BoPNl>sJq7gX83lp-LQFG)bWYUF&p*d57=8Kjlq1xT)5-
znvJOkpZ?$As#@NVgHLtMTjoXI+FfuPTMC1>uGRp<TKFLkxK>^{`vu^cb|Pm=(NNOi
zeQ=@thiswIc+B9 at +S%bXa8BEMOF`lIl)<63^~1a1f;M$ap{n?@wabX?P!`<Y_6Ggj
zGeK%dd(dpH;!qOY+V&33k4pdzLDq`a+7A`aoWaP8sEcy{*HA6R=bQ;NL#k_ehazW9
z{%@g{iu~{dt2nElRtefej%z9FMr(D4GG}cUr5EWJEf*pFZ=ib64^T6xD%1$7-SHeL
zY?T0r1N;Oe0FnXmfFwX7AO#tR{3$$SHDEPlwC1^1cG!3*aVB>LIiosj at qb6wA*+#1
zI`}DEloym|l$T2hlsL*y&mq_VXwBu!^NjP%YBm|y!UPfmCA&5UcuZ#P;aeMantmr$
z?)X*WrWRzd=Ai7>2Dv4RK8xvq*w*aU4x%OKI_MpU8)OS&AOv6wu at 2Y`EHm~RfrO=6
z5L%>ZF>5w!<@9d!YV>IYK5PjrTlf>bFr&FJG3l|mh$dCH2Dj$5CbrhKMrJfWXxwU8
zSdhS0Vm+`}EC)6lYl%f;6|o&yD3*-9iVeiR!FFO*7v3$rTkKlsTI61cZBcDeZB}jV
zYr2l*0 at cWEQa68CD8Pz>W)!9rQ0!hQt$Eng*53+fb`al!8fZ|VQ(;VDKw(y)M`4nb
z3P~q=5x#&5AR&-KNHU}W5(BA(WJ5Y2fsh<XJfsE^4k>}8L7E{yAO(;l2m%t_I at mr%
z`VPs0v_pa+d5}a%9Z`+IOfV!!5_}2N1TDf#f(L<vpoeY824IU8iHoC6a39Xk0F2_M
z;+o>F;)>$7;)Wtt at gEc&@Hb$P6hu at ee87%l#jq)hRZXKUqs^nORzAoL=preE7(~=0
zm|+_iaZO7;NKD5jbSYqf6i9qWP{qbB!kYj-unqD8=?C!x!Jc4*ty(l%SZb<jLHbw$
zVHh%+6ijR(h7eT=+F1Ca)FQG8=0n*aF9r;eLW$Z0cY+mG4(mc#!on6PE$#%1s+EfM
zk;DJP-g|&WeKmc<F&ewE_Z|zz%JyAsv0zsuDyXOg5mA~2J1X{qqOltr#)=|h1G{VQ
zVg(eWsIeEYP^7-|n{)oV$#dU#?)!b-_xY~x`mQhQwam_*otZOdX3m^Bvzz7-x5K6#
zK0WhxMlFXa_x#)5{(O3a;mXFhw?4;aya;$Z<?Xc8kFlR)Gn3x>rue?{{loX2 at 6*$_
z6CNboOn97d-X-O9a?Y%yJ2N|sX*R|?wNsKlDJp4FQpZ+ltE*01Q8i%kx at qxY0SN(h
zGbW`?`ZDR$q>M=))e%p0r`N6vxSSA^a4R7(;X=awgc}J730D&05^g6Xw?5nYPV1|!
zALcBYyl8Uh<n at z}O`ezOnA$D1N$RN7YGcm2{Lvz#=;``n79V}!@}f+ at m1$R|Hb@#j
z=0VNRPE)P~JWHBqc-?!d%@mtyHdAc^c2C(ot?uVOpWA)d{2}~HbXxS6=ugoZ(I2DJ
zqd!MywoGgJrRArV87)7yOmF$QW#<00{a^Nf+Mluiqtn#5X(4I*Kkv`<OY{5U_sK7#
z-Rs1siEk2LBz{PIlK49DdE)!TXEUy!j5~Qd=g4GpX7$v=NrjVMo+@^F;i-kEyPoQL
z`pT&*r)^H%4se*}Fx55f%&QsK0^$QM=N!tcoH{6#x^Pm%lHyK91SF>oOFQ#=#*Lh)
z%-X3ZlQK_LJ)IiRYHItmnXmG$<{Zqdn7TXZ_NkBnbK1<;r{CpW&xy<o%B-0>AoXaH
zcT(!9<bc4mVVOy3`LFV><s8o3m02}4A}RTlIbh7xg0%eCr{Cw at 2)N?%J})6>d8TW`
z`_pfob0c#Hof$Co#HXdnhR?Se=bd at q`b^r+)a)&(Il91Q?c+jTM!dhB8TT<RJ^5M0
z%ZOBST=LoEJIPm*A0}T63^DI9|7JdJo^L)IXf7xe*t1}6zEgf|{=!_}T;II+x$|eH
zG;9B*LHmq~?b9P&GmmDrf0vq)`YQF0)OV>*J!f7Rlii|yX0SQTywQBpywJScyv}^o
zyxbgN4l$bpX9aEz{59}ELHUAm1$_%_3&s`{FW8>Hf at 0X+d{zD|^HtY(WwSfwR|wo=
zzF9YezIF7uYwq*>(DpAP(w1jl$tw|fFXWR$n!^`|PYxLlA05)$zX*8|__%$d>+6sw
zA+JN8hrADY7V<XaWk{-Pit8)aKV09rK6QQL`oi^t>l4 at 4uFqZHyFQEf6p`NkiR(+(
z)Z~=pSIK`QzYDx)zGRLu-!dnfFPQI}Z<rIzR|-}KMg)cwj4qg2pvm{lE0%lvYuW6w
zU(4n!&sv_n{Oj@@hpdpykS`&h%qf9)3sx2!DOg(IQP3>^aK3;3=X~e9h_9}h<|p*#
z{eraxz6GuGC+DSpZIzvz>G~-!rQlA%iURinn|z17kgx4C1D_P!3w%_trog+Pa)BW~
zEPqU1TyFALb7nz``GfgM!QFyY1)c at H3tHv7=9#|+W+s0scv5gbFri>w!7_7v!O?=c
z1?HIvfk&P8+?u{{V0eU6_^tivaql+ttEd~~?>+2RM2wfem%sOCFYmY)aj|>CT>>0@
zPse9RX2$A6eFr9lMve1b6`$j^F;*YuJ1k*a)Ygpr_+nlzvF!#X?2VfEzEh;HS3+!5
zSc`q%=?0YYc5Jb~QRI<b-s$lfk!9m1g}xt{uqVpjcimto?*|(qomxcv7Qa6-(d%Sf
zM(F!N31Lx_eM92u|N7*W6Zd^+?SZXBCyjmIAhMI!!r1S_YJcd}{I?;KJ_UJn+Mf65
z)9g#n+_&cyuHCw|i?-c_^LO6Ou6{oxxJB)nwe9u?ZguzY|CpBbbkFmiT^96Nxg_q0
zz5iIB at xOe0`upAP2aowg`?aXE{=@hK?t|?M3a`pD&Fb{ci`r*@uioI3u6CI<xAJQl
z7T8Uil=OPssLNM}25cG}|Lnnj at 9e>Y^@&5PE^p!5?(F4zTgn`FacF-d_DIeo7p-m5
z(S1{XJDu}K+SQah at 19h@Z*JY7`pAYSCwEal{_RBK$EnBMJ>Q?XvhRue^Ez#-UD-eS
zWI)EWiH{2&4zz2h)!M0T?Tn|UWDG03WOw6*BbVQ-HaQ~cbC+rQk*P7iZCz3Q{!wRD
z_L&t=Ju=#De%rNmT<ZORyiuv?ITQBRecvnX)!Cqfi?4k=__U1s^X)yuf4{pkFGroF
zDrz3%ndYv!oG|&(gID)vf86uDLE(O at k_M*6zAJ3kZt3Ld#;tJ+KMt$={i`h7Bvr9V
z`!}pteLA~k^rlz8U7kBFVB@>@@3;0btlC`NG%9;-pFYX==C(dMVXuGBvLpNVTlyv?
zI&{~_Ug;?xpWNLUv*)#QYD$6X{GO!n{JF=|`?b+6{4ynAxI at l?Eg9Fm;}4fjU7EhS
zdV}v>KkM7=^l|EXxy!mfUmSwJZ&mtBN1s^(9+s===I%46_rV%2S4KW88nxKh&41tP
zhjv*L)83}UQsa(Gv7_Jn)qZSuY~ol8!f$U*%bGRohA-=Fo|NIS)Ks|jKYQE=D|Y*r
zKH=wlY?F#UEOVgdFNU*zvl72KS!hz>cNT>0hoYYoN1WN1VmLQuPI3`*iJ2918)x-S
z`!9$VX)Y;8&yJa${H^)BnWb{8Wc>rel%+hTwh4%f?q{BG`9Re#wf_8=Q20cl#94kn
z8MfB!GN#&Tw=YGf_pACyyJ|w6PqPm_3VB|;we5o^CuZ1mDcX4L#CUh_c+Kh1`K1mP
za&qhBGcWjH3H>E6pV}MUYCdcnHUHMZ&5!yP%KG!8!<#w}Z^Tq=TXWNFn?hTPOsSC4
zeHH;t+Bi<xme%>n;`0^f+mv*ur1^b)iA%kjq*cx;IsLmc- at 4AOJLgZ2#*@yyXwa!*
z#Vdyj7wcH7__%r(XO~le;>CWbwP<X;^RpRPKWkBmMQ4})^>J?b-##49{+q`+hrfN;
zl<qsPP>}6U<%>2s|BZdMt;Gvha+~$TzeMi+zTJ~qKh)|wuW-=VpUQvV<a{A}<JRKE
zDp`>+=Wd_9eb%O7-+4uXe*LL at g(e-pwePmIc!^5&Xa8V9hL+APom(_(-giL<ekxz3
z$@y>X2W~B1s*>C6ADZ`Nq^?Hv*_BV87{kM|do^49#x1kP^m^L9^NI%D`Kf%3CLIgg
zkJ?(iOr_sv{ZOgzyl;d0{#3qXla7V#n`|xq-9Ja(+yCpN`A3 at V7+U{*$<fZ;PF{cA
zYPWe)e!0o>k2SkEr2dPND(6L!>OF at iOi!8jy2law=%xGm938oAeyKH at Rh7QHTYNyJ
zKeub(`xZ58w)WdK at Zih6r4!ET54P}G_WovvMLQOB^ZLtEp<zYH`Q|MDbwTmbi~ju7
z<M{l(w{q{U*3IqMyVC=0=l}4j^tqSkikH7%PF3c=_4Khc{V#Iq=~}rJrORI^rz&0E
zT<&8jdb(Sp{N{3wCCabiC)-<LtK7G{S4>JtyOVY2V%o)<Yp-^3YF=~wXuHDO-B)#L
z(CI>9zca&!AM4i1b5g?BhF2!n-TwT;$>~$<7Ju-m_1OQ=!^vMKJi0c)|HIgE*#&3!
zM*otoThO at J-jm-~>fm<eV8^y+-?lzw98q~n%-pq=!_SO9`({hwW=^GVCVBtzb=$ew
zg903G#d~_i{(d2EimkWV?d>cN_n5*9*R`yB;QJcu-(0EbZT7g}bU4eLeDT1^faNy2
zKCk?i%pU*k<KL6q%1&I^_Hpfu+&u+TM|<|w#AUYFQ0KwD*Bu5FTiB&>vFz7jsjFYt
z?_GD(rt0 at 5c*Z;%xj?Jd?1-+V-Eg?e?vb0dkK4yqU#C0c<CAgm%how>mL6=p<lyWv
z;Y}__9?Np|ak{e0=JET at Z{rKb->?1lv`fF!lfCzya;a??T*~wIvFZ<RR!B8<Ywu$}
z<GV?=0WVH`P$ilFm|6e0Yqt+oSLV!TaM4fmig*5(Pu()AuFRWXyvw3r<`wTEUW^E=
z|HyUG)_MF_LH%ARdDfV-hLoCVWwLh7t=nRVvEsKyN-a5NP6(QNXy^6V4ci?b1>JD^
zIqKe_oj06LC-mr{oziIV!={-N4$cXEXJ`^o>Uz?gLx#x9bagji+P)s`2RsUCn%Cds
z_TG1c*0f#daog>Y|G<n|YyHcwt>(7)Pfu&AIW8_QpS)i*YO2~+p#eSVJ`WwXVzqO_
z=asupwf}k8inYUb?rb&sb<e at sE7!K&?QwhbBmcn}o7T2{d&qO>GUs*GPF%dxXhBQW
zgvG!2EIoAis|wqP4S&#+{@>D$tyFIsbvb=8bX~QE<s46qY#I9{_EO2~HoLQaba@^y
z#cg2JwnLTIh41j$>CtmtxLsDFXM^HBny(BgK4aO+3MZ#KOo;2geTO&gc^=anhL$hk
z)p<^h6<fRf1#~=ddEt2N^HW8i=NvjYtme+4OX at b<TYj-u=U(N at _v?JIQhAkq=WR7s
zgmw|w{{S4_PyKj9X6+d(_H{|ji8*c4FwAjs%M+=QpX{dB8x-8lslm#aMI&@S{9gtK
zURWmnb?e`tLd>Ghx*r^a{{+hShBT-Ux9FnohjGE({t38Xu?4$q@!-VWox3JBnDSG@
zisi3$?yN4qqF3ktYoMyxUF*MV{=GicTGi%C!`p=Wc-}9tdem&+;VutrB~*9l6<=$W
z{)$`N(_+85_j*xnmFe<`Wvc%eJQX-xeP#VkRb&69*J`={30&*uPXE-`*7s63UbS at 4
zf?)Y?Qt%-DcTMZAzO~*X4*#y&Hh#8rkYBLl;cB`ifAh5dd93_*)6n>Hu;amMm6!a-
zPZ0w>o2Tx)*mS;U=O*{V=X>;A^K!mNv!*WN9^Lb3)*_<!^%>odN3^N2_L$@1ntMK-
z3iX*duA)=@;R8*6lX7~j4E4F>(d<VT at 96s;VN15`D0RcBZ&d$BP4C{X(4d9tp5 at 8n
zU!DHqa!aRGZBXX=)Ux*u#hm`3;j->?T6XLoJ+^<+=231(lbZ}27&V7th|^Txa%;j5
zy}Y+7^h?90Z5Pj}&}mJzy%+m7TF_M0fAQ}<N)H$wDp19HE<JEjc?vzXZTiA4&s%GQ
zt~cAJb6!2ney8*64a0gwY`YhBtWAw|)y6F@|EH%0FROP?Ni34oJ0-E<hjy86L)U~K
z at Ui!3*3zZ>qaHV$zWOzN)S#)ULDQ)X=k2WUP}hBfrt3=ES<5SC>1Mmewec8g-}{%V
zMHck><!VFUiMKo7uV_ at yZm_DQU9I2Ft|(FK_>1aqyA<}`a$vnj>b&A at _e7Z1Rga!C
zzN~-GBb!E~f9kf-cU70Ex*M-blpp==x<;Lsl_>AtvB>&ztr}hIS>of*9Z#($a92RP
zyz&y$=hUwngUNrD#>Ql~;z9+}pgw(^R;~K|j}c8w)qC_=uyWOJe~f5s`mKAPkt^d)
z=KV1+w|;|b*Sd{YuiVtDp-tgy*No%U%Qp3DU~~WKHSKtH at V^ExT)k#HUcGeF(jRQL
zU%l33ygG=$m+fATC}*nPxlhp*t2+E~s_c06qD at oUrC$8pA*^C*75&+!K8u1yauOWw
zuJI|HaB<Sd at s#d=lWTcArXPy_>to1w`@eOb9d>p=%8zN4rj%^+-Ii}1X74`RFJ*qp
zJn>lCYQ)S=WB>ZN(6Z&TrGHIM|MAtoOjd)>1)uAE_MbjXTgJD!RJM2fiBWHF_N-m-
zCd>JXxpaX#_eNT)3jnfjrL`*DzHobfk*1N4nkj~}V`e3PV=gqaFy)eE(*6sg_U4k~
zr`Rl<{J;BD_UyvI at mV&1|Kyy~EbYnmTJ5g?!_$!2Wm`Q@`}zBS^Hjc75!0#F7kd65
zKTR#&E_d|>2h-m^P5pMJ at +dj;PmgxF>n;RNB}BXF>vyN{V`N5sjX6x6b8(qz$7h$P
zHqq5y{`#TV@#w{gPA~1soGI!$H{x7eig%hWtH$&)XGZ2uyzJ`v=O;R3#+{3p>sqXC
z{_Q7|pWc~e)YkjHMf1E1sixdMLk17bUYNYNU*V?@&a2yHZJwg5H>}Je=fY28X8lv}
z{G77pibsoH44?m<`9|tLoFV at K@egN6D<Z^bhr?$3Vt at aj3~SD#g%j%>S>;(epaY#N
z at 058}^h=+$RjWOS-x^yqQXd-GA-s&2Z(r}ZgKIvBZ~iW0o#ps=_rH$uoNHI}!K1Cw
zMJMV*4|fPI<K@%WeQu4K4<2s4TvVqIJ@{u-Xv;d!I{p2SfAT4Tis&$-%p32%u5+_%
zJc!#GRWwo;8s5RTjF)#`m$~sZ9>i`vRCJ<l+)>xuuD#26dG+l#cSDT_54P?qs?&w;
z>G0n`b(y>S-2If%Y1%0x8Wl~~hVJgrw#=K+eI4dbtMTCeE1HP?pI&d>@()9PZCm}2
zO{a_zSGSaY<JH%B?ui-?Vz%xl8AHQ53@!6-Py=+Kdpis$v)8NdfVq2X^pDxPx9C5h
z{_WHts8z7Nqx<%r>s6!w{jD2{#%M!#b<mah*Qml<3YFcgeYL$q-7?vuPGpZdt4gUh
zwzP3`a$vtwt?dRs{3h%`ef{~%4~uLZu8UfB>%eB${SI?>{Bq*8)4+PY5?-t4MeDD2
zh$}k$TH3umAAdhLd$EV6YO8l^9V-{BIOav`E{&@!uWZx2#>ZtLH8$o~Szj?|Xs5ZG
z-0hs^)BhlF!ivv#UR}NO)3_Dwr#>BcyRoNgmhJk})2B?>Rb<kr?6>0{-Z;={L2dQB
z0|Aw1&M)KnYR9Dpg>RG!d3gW4`ds~C_N6t$w>4;NM^C^0ARdj4!{@X<@AR;7mB+>D
zQB6M9ueh9Y<sTlqQ+Cl~$3H%X*1Eh0_HcPm_1*s^KJd#3Ysu+R$1xutUVZrL)6>%?
zlkH4(z<}hdX<6UYJhrycVdv7lD|sGV?D>3Q%kJyHlvx(s^8Jn7m#-KXI9DI$akEF^
z)EZOb&Ymoqq)XdhXu^`uE}N2vueH<e{kBg0Hyes?UHqX{W}`weewVfsak&z8z!dxN
zWUK0Rjeg_3P6hnfuWs6FuL@}i*_XET-(u`PBDvzKXN4<PeD`+C=10Zuly5!wL(mTn
zu5H?#8lLS^%C2?gWs{%2KHp{F<9XlD>9c9b!>8xAtgkh!UEYilo7>huGtY72FC#`>
zQb*Nz*m$kmr>tUa@(V2wJnLR3ZGEveFFH()pK^0<sGEb?ac!C9W$nJ3aZ6jx=-_pB
zRgJVAMceEt<lt4#v(Md2cfMp!YvFIRF1YO7Ex-0$;P5Icaq*l^T_2^`4e2x1<aWJ6
z<9biF*z|In)4oK0!>m;)4g~buXzNj;-&%f}Rd#L>+it(k37J!NdlB0n-~5ZGlFti*
zJ_Xu;HE+u`AGj1SbNcjm7gzk=XjPsjd{5=!m!qez8~idQ<>BJ(n`5^<ZEUwmfA!>{
zWj7`c+5c>O?R9UD4Y~5%u4UY~<3L4^HC=dKdYxuS^m_IB1#j}s at A7;7XxrlYlb&{7
zP_cTS5ynC<i;V5_4LyDDksG9*X<t3itwG?p+4?pIj+9G#y2qnsjjVgWw5)N{zObRj
zvAbu3i~4EDZl7JV%;Ql{yHqr6ICl49aAW_wBU*0wC#A#Qo-LOw`XzgF{S!6&H9O_!
z|02(Ei!QIqkA_{zjW*95ob}yz#fFyjd*WQmJUA=nd_<L*k!fM`U0b|p<T-4-^(oE&
zpFGNB6`fxA%%9HImX|j7T67$?`@sD|&wjG$-|UAjrV01HWR?i-^ZmM<9|A^w4Z60f
z)Yr&$%N(53m-fjh8+>#6`(>~Ck7}`d^%<k-u+6S2tv2RwX){Snb)sS$y=K~{pV>Ce
zd|+|wzA4MgI at EG*a!WnQi!!$6UwnMB6CQe=S=hHyu!p-Qd2hek)rQ*Ln>zT%+s><B
zHoN}0^7F4jpK{MP9zMe7b=uR}ug%k+-KkY`^1`mW&9 at JHj&Y26+H2mbPt)zEp4ryM
z)p1Ki6ZyGPHSO-ZR at CP`cbU?ydHAB8l at DsuzXoMbx1Vul!~WYL)rPfeqqdFK*D2Sb
z-@=H{3$1+qs8lHT-p4(k^6MSy|Fl`tw91vUf=W)e|L)ATZ(SW{M}(er?w|6XqFo0z
z*lo^!Gw+9_YC~@}-*&!#a<jefE5~F6c?H-<p57Ke%+WU at G|IVu!ha8)bH1o1HT!8>
z(|{)Tb|fdRpILpwgrKem{bwC^KRP8Wxb)_Wj}n8UA8nfJIq$azPnx|+t2{9)$ZooQ
z?K9iHcXh;cof%!K=Hl08UH^*<8uY99u19Y4{^$J~th&&wOP`U3E%iS4|D##cPn9cw
z4GNlWZ+~Xn53Y_YB0{e^GrCmGsh7 at D&?*=mw&&B=4)6BdaDMQ-*_%(5Cw>h&G2MRX
znQbjy9oI#K68c~9uUe%|k)icpJ$T&A>qE?h;2A3}MLg+VWaHof`|#7-Vuv|;M}$T?
zKZtMU^}KTAr}@vP6&X-Jv}A_?#rJwmjPR^euD{pY%8}_o at zd;mPj8DF=I9a;8t(ic
zwi%=6e^<A|PS9{I*D9~U`jY4R7vI&<w(^`k<$BHkrD>6V^?}-z(Egcb*9jk=pi#eW
z$UQHr;YnF{O1$d+aROZ at x2xm$Ai8Q)%U$z#^^IL|t+I!IdC%>RPrkG|+NYU|&CCsc
zw>tOQJhxoes~0MKIxsK&Lw>D<<8AAg?I~WjX<lD7u3N8KpVrT7)42Zf?pNI_{1x21
z=6c7Sm7?Z$y)@XZaPupxK71@*)4ifkP|U;gA(fYOxm=~L;qa~08_j0A4(nZTW_tOX
znYETv)jm9<4h}op14ndE{a8hRWkdeQYtbK9TwCl>cy6bd-{SJmJ+qtiqIs3}PwgK5
z(OUJjPwDcP%em3h<An7AHT}o9fAAe*h+g^Rhf{TiXeZr!ml$L$H8JS;@o}+<mkas%
z-Mkfi{J6?sh<<Z;a;XWm=4%>n85XqZ!^~5Q78(ncJ$6#nu-dA37wr#eOq=iZ3jd{M
zv3i%P{k*ikcsf?^(r<6CoNLx?+{lf+R0}G(AKJ9Oxy^!x?%mXlZ!BKY-19~Dibg(j
z%Z|Q0!le46y5a5N);%sYu2|Od@~!D3hj;99N$q%3?fCfH$e6a#q1W7oH!=9_j81!1
zV#%(c<C{16rFZOjQgx(er+ at l1uFjGl##ehk>(G*O7fz{e*0esYx_)toTD7NFucj3*
z+*IAH^*2xBc8?m`Xy4^V&68~QU2jDH2%vvsr<{K}<J)yMW2e&7=CbEXC0wLkw#xK-
z8;Y!T_%^M(e}#LS8h+EB9(4zF8+g6vw`td=ujDi6bf at f!RnjYr4=J*@_tyA%k8L_Q
zSE!PMe{@+Aa>?9zw!?>2zveXjqg{#P4jmP6dH3_Xi<kJ#q2r5HzkY2vqFwialN$$h
z_I$DA`jXD?=8eCwVSSC~m4^H>R8`{EyGEVvCwnD4S~};<mNF>~QU>|=>b9`Lz2E2Q
zuFN~qq<)JY-Ii3ix9z`z+ti&LfBQZ3W|QVwJM8<nu1r(;^O%PEn8lTc26w-6x1r;V
zC0%z_Iaq$cx-w-djj%JeIdCdxPoFvS8h0DD^1<^@drEw}w!V3HVxG~a{?H!X)`h<4
z+uy&^psM~qoml;A%SOe2?#O?4^epjOfR3fMg?{JwU`{1s*{ErUN^9x`^(bfGXwkL`
zogGX3JTT3%VBYe!6;^I5lIL)zVBU@<^?&Sfr+{8`3nJva9gDnHo}c4T<kxbA8g~As
zMERdO{uR8`sPniI9YgAU;ivw4D^;mAuU-A1o{OGV*mkVp+o!gDCbaADvf_kxZjPFv
z4<k#~9Ns|Q7K#gvl%0LOOGfVc?>>2z+_|gozkh1pcqjdv-e=V(Q}2=?yV6Eqf2sX3
z<o=H4>Yem&tXIk1yZ-TM-LA2tN-mU79woc(8av`IPX~tgn6zT$&>bVH{`knAz>dK`
zK3IQf`fBm-{K6lnuWvlG&E>*%ccr<N{GWOnRx)*Gnt1B*V%5s8J4QqjUuORAo<^@L
zHmFFCYm<New0ZS(n?}jq1!%u at wdEh97iaYAn6diTwv9$Olz618e{eyFE_dG(&ob at 3
zI}R`7;5}vVh5I$O#Ll}o&FyG`xY?X~H!W(xQQfKVC%$FIcu#S;kWeEj_CG_-yI3PX
zHtpyFvo1IM$(S;M-dQdelK=Nn`PaL-om*%jGJJTM<=*rZ;+-|*!pj=%;x1m?uzq00
zir!O((Nos23z;>}#HF2HkgA&=@g(5Z!i)_ujmi{wXSrUWpN@}9GcPF6<wiUS{C^B}
z at xq2F11pyGp3q@?sTxD?yqeRcs`kXzyWa)39QB`}o{k7^H|k4=?PY7sxbtdmm%7^Q
zt#^z47t~v~4e7SGrmY{@w%6x9<`?|}1$?;9u0dt*PhY?Ft8ItRZgWPu^*U_3>+1v8
z!|`E*s^8zYbhOiDZ8P@`YgD(cuOI2r>$BUu7Z-}(T3CL=0M)I%>qidgb-3xSL6z_C
z3mQG)XA9_bNn5wesCG;5G+#XW%Yf|>HD<&No#D~F*Wre{235FE$h8->J%?{-q`I|o
z{m6fdjyYa;;)kxAa~xmJeDEi*x at VVKE6R5raj|^$?2z9J{<EiZfz at -@{m(r0tbS_s
zxxaZzy}vYb^xT}pl$nNO$z?uF{wvt|%EnhyD%Kve?OE>$rxq_W-2K?tE{Tzv*BJ?C
zC%rhhxQ^lOv&PdNzk7A?N#=zz=DL1a^L at 74<=3pdE-)wJ*^1F)?YCDPS2gNn`^$}M
z*Bsj>Wy;x)TLao$iaM~%y>i~<A0C|Nj*aIh`pg?VaDUn3XDa?)#mViX&Bc&%fgN*S
zciuJsJ3|riX!Whlw>H}f7Ueg{4zA|exuASr*DrPN1`_Zr=<MQ;?ROQd&v(yVes1w!
zA194BUC$q at aCyzFkXgwy>NZTV`6mxq3KRvwl+Vljc1Tcp1LeOBZ*_6r`{Ra093SRC
zWAod$LtL*E*yYE4G%qWdxIe;wMk%vP%8R8oo at Sh^j-A>5>jFFPPMaftkB;x_=^J`j
z|G>HCo3JwJF$=Q2I?agu{Y-pcSKrVGLRYOa<VCRghI`h at HuJx8o}1v<_^<E(i;w*c
zI<VkMT4rEr`6oSYLAH0NyvX14<NF5shMM&cTx-6GDD(e0^!)Fv*Tt42E$ZQy*RRzW
z4>`XKDD=Kcpxy5qdKWm(f79W9a)D#w#1pwL+8e1a!}PmvPh1kV+q}a);Zos>onkIe
z2wr!;so7)v(JiTkSBD?mW8a`tVyo;L1GT5JUY$Gm+I8QS(R;VGy_;Bkw;?wvczdzj
zq>9VyyxLOZ)(}I?*96~$meuRjZem!_b)n6T;OCv at Uf3Mm{FN#E;Xwbv2M at kDa`8*X
z$Y}wZw!3wQwluhO`Ahl5W9}!9j5YnL53p;dj~()}&%W2qebcwZzG)jC<G<lU?b+g=
z)9KxNlJ56U9X(F|`zhe%_Ped?21ieyFy_v^*^Roks!=WVcGq=&t!>qVHn!{9XqwBJ
zmtlv8j+uD$`OVg&e&3Qmyn6iIFZ%aKJPW><IyeNl-TvCa;pEBoxvp{gfQ-pGWBRy%
zd6$~8J>NON&7t*<&AAbi?%W^t at c#bHAql?4?jIX|H|y-ph?c><oif*N*%v)8w)Nx@
ziF=l*Z~FMO{ybpas>06_yQiM^4o*55`|7m!tt8KFk8*lx140&0dl~+7?Lp5vhZXKS
zb$aaep-Fj at 69%_Up5{3_y_Lu5)7P_ikICEadpag6|IFF!jbrjAu1R0_UF^oHBV!B+
zu_4Zb0tb8Kjf+gb?DaN1Dt+Pm at MOcj<jC;2)#(Y&W%uPzT9fWI?rB)D!RDzRC*O>5
za*6Qq%sb(mx7YXdzJ0FIM`s?qo;@`o`%#;>yLS(2KlNVrxP)xCaoJ at Z4$n-xw?C%t
zrje(Qgr(<IHH6MI`<^~FJN<N2dSX=i=BV`dQR(3WVhyejk7eJAN<V)&*04IAB*-=S
zhut1Cs_oJJ={^bBJrc6VCrsPr+cq)k%!8;i52NTi at msuH9HPQ+-;Ug3oZKOOaa4Mi
zyMt5RF)qv7P8*Sa&?fwfQ%2kDt8?CL at A~1>{`6NZXDn}ippKtQ+3-Vkd|X1jUCJH_
zzfGSnJvcKbc6X{v- at GqdCnlf%yf?GOfe)KKXY3uD-7hRWAU-zH_wD|ui7(r{T^2Pl
z$9HD>B#*=wE=Ru~e6-T;$A_+Gk4QN2weitu{s||pMf#m`%X<?%H?~aN?LA2c&P>d!
z_14a9#x~!fC$EPMONers8mqfxAGhz&{xjDjhMnFyam|>a$Ky{t{bUp7d?frvtJa66
zeO(p%yjf1mlM_0mA8HVOW76xB6J}5Bo^T>-n{Qavqv1=UB3m|JFx743(6MLs4YN(Q
za~=G$a_i`tN1|JdeDnCbSd)MF;e^;hp3&i3Vxpoqd2hZO<rEcuKOwed>df3D_xF-|
zc5faz!{?4&`qqhicegyyXS9pW(ePE%-*%3(>oBmNulM*!-NE=8uD-R+ at q_P1U5<|(
zl~Ci+1H1jcwOb!`Y at 6|u_c7lVt#1t;?9+U-ODA9N1HLW%T$aSgp3R6=g at tb)^7d-f
z#LfwJr+jNq3Jt9j6>ryn;KF?;XQr3)n6bmR_K<pYA0POB at D;nU;ij0vafiQOKjyvp
zN_<RSLhQ_Y at kf2%AI{wLrk$^MswsAuulMbzSGV|jFHd~gKXYJ0{EP+>Cvs|e8*ax(
z`u;Y+>CAPn$nY2YeD~gpaeCIhS;GDJoxblMM@@<!H*DhWud&NoKiJzk`tYQz1I~$V
z>n3~0E^O<a6E$Fri`{0|n6Pl|Z~c0|bm`ta>{_j6Yn_f9tUPUP$q at r0!+#oF>gcMN
z`CB44ABjr5yvMKgmH5jC+wIsFespl(#A$cp-^~5I*QLdQcE;QBp9+`S>oPL7Se1dP
zuJyuFBL<b)5ow<gf6CX_>9D at V<>Rm0yqz&OwsBZ^@RIsIZASV2F{ox0%`vxx_+KK^
zlNLnIJa}+s!r(D?ra7qkrH*!aTcv9F$up6C5;i19#rnB?4yyPfGW__ZfiLy at OuGj~
zcDOOdWy?vw7;hK9aZxAtH%eH$-reMTqh+7N2~Gvmy)(APIM;gDEUD1jftQAb`QB<8
z<>~7luDi1LNO)u&SMRh<J!9ju3l;{hDTw<%*R{a6|8E2K^p9<te|zuE{X>QiXqvZX
zMpLJc4VuREaJ6 at OH#{)%;rO6QA2rTSkAqGw-Z$ma at _kvC99(xg<$iH~QK|imHB;9d
zw-2~*J>I@<&C2cb)&wu9JLu7lL)Y32n(F$oL9>lc`ow`w`UoGVBa`>O>;EqKc-D$F
zLz|wgl(TWozEO1tnD#yloIvBQ^k4R4M%ha34;>24dL7Zc<;)Qtqdg9!y+3yS(6$-V
zJ*IxNbFAJfqt}4OrM^@QsyoQEbNtUAr+IyJ9}pe7$>~T$vza5FFMirJn*QI){g%Wv
z8 at YMtsU*9%Z=R;-51L#xqU_CVAN#?v`)-G?c8Y2G;@tRskL+CrZyR;{@QX?jpToai
zdiy%|b>&CSZ~dLGpP4%2QvR8^oMEko6(nU|z8;yK^d=zekW;cbJKyn0K|*GqyMCFG
z&ie->9!O2RJ~$?L at 1@-ShW&o0#yjaE{C<A-D8ef!BR?ju+2Ori`<D&9xqs%7?7KZ8
zr}a<2x@|_6^jA+eE!peowC~NOm?cZ{GM!Sxuf8c9ld~kQSlIldF$=@WR(|if*CBj$
z-k41D&=q+F9|Cv(;G3{z=&Akg5kpV4JYZ-wtZ;za#}jkIo1Ra4lyq>EXGTl=9NUwQ
z^rhLd5&hrWPf``ow`M;M8C^Dh?#6Bb$J_RQS3R<8v%HM;ZJpk^x<xd}2pLn?^_}_b
znXSX=Tdq|rN6^<?`)9ukdlwdz=bYeN)pMA;YrjoXm(1`T_eGx*`}EcOjQ5xBwtm+-
zX#3>&$yK_BM5Q(x8xk2Z=*Raj- at OdlPG4tjG0gRlYx7}&eg!+G%y=~O_>>u!X6`i7
z|G_D8Ti$}aE+6Bg3I?x;-W*-!(%YfYL)Wx>>G$$Oj{%!LJnpw*_|AbQXZl87^^M)e
z?J^!771AiWX?)eiPd_YKa_Q2gEj=$b+Su)@`?%5eC!DW_IPJ(hG1<dD+kd+G&|3Pw
zgUjo%LHVby4~~4g)_G*i-bgR|*cY+c&Q4w%V`7_ST#RfH6nDYvQtf at U9b0cxzfFAV
zy7N=uHztSi+rIh#|N9@&z}Qh^dr$2!!gsV^3w2ACs->odho7g<X#Y{Id`1r+?>2t4
zhkvUH?qf%cY&CL>--K2pJiOc{P4sv3^KVI?{0}9vrT_F=?Kk*K|NZr^O0Cgqb>FCL
z4QjnkrBdlM-`J|v23yrP^=$t``u|76Ci+is8(**9H{-{Qnecan{@we3_u2m!zt^Tc
ztz*fC6Q+*!Xlv7d{6vrb1P$;T?LKCNhfV8}4gK7F>5a~`>`oK=(Xs<K!o%Oat=stV
zZd04sbntig at S9-Mww+0BY)<2pmo3y9eRG>mZezQ7jP at L58PLVY&C{PoYt+qcx{yJ2
z>^No$y|i&@p|Vx0>b215^z~GFqpF_DR&N|?)7+-}1UH}2?j6V`J!qV5bDMq>Jbax9
zG!Wc-w7>soKTqe;BPNU at l-}0%M-p%1*tRXSY5)`3YPIy&eX^9cWC>dy)x4fYO){vA
z1Zdi})7q*C&=R1xB|z7<ol%3g^fZ`eQBPx_>FMy6k at y+`nA)~e8+6U<X^Ei5L>R3~
z0f at 5B78s(;bhJd7d1;BVMo+x7M42%qOK6F<Mq?lx(PnO1qRoH~!h*k!XbXU73xH?~
zfM^SVXbV7*T1S)xhA1-&9Z_aLPn20SJy8|_QD&fI2|dx)X-G;v(N>Ya5(MH#Edd~I
zB$4zWZXzY=p%Pk)dU_UH-MpTGi0hym0}(ecK*S9?yhWtdCcH(Y1pvxAB4{AWIvwf3
zK$MMo4FRC6B^D)17>KsPNN*aU5?gxH2-=K+N<h-cDggkMs7QVz(Ke8w)ibixB)*Yo
zn~Wv`pll-sLuw2*fif^AqRcC5BFd~S6HyizqAZnUBHFylCddsPnV=CBiDm+A4JZ+9
z9n6N5C{Zd~qOMobn`G`p6-rUrDw3;gA-aYHRoN1KwSgv2eqe!!gU&$Gt89sde3y8b
z4EThKc at R{x1VvGB0c{o317TDu3l|k}(PGXNY>A?pA>yJj at h313mO({abOJ|QjPMqf
znz#s at ns`Wvc<9vNp=KVmnkqH%VCAXQ#DmRHr6wLyeMSw8i_u0k_z3^7=)|a2gD6-U
z)f(a{?2yp(F;+K$$`Tkbb%}&Osx(@f2<cW%-Kd63X|YHecra}>0AWJH2GlCdUNBS9
z^d-o11-4`f;)dypA()2_K2M?p3&I2vJ0T_6oPyOFEm)0?l*7t4s^QsE9+Heqfy_pO
zp{zy?e1VNp1xFRigQs$wQt4@&#97pB(IzcEJ1fG53f?Lf0q)9jQf#$A%o at V0;Idi+
z>;OJ1EXP1>c(qjUS`J$(xUHC@%Ajap#hxq35EuCo;v%Gl>k0_I%QBFRtb3Lbvlg>~
z1GDB;@L(Y=Tv&dZ<|0Id6AKaH#U?!*0&XlI__2hrHi%;?cru4C6<k?Dus?(}6<k?D
z&^vG>A-l79A6(eQ;LsfO)WV_3%GB)82r_CIuU<gBE{r2C9Ou;R(1=rNc4z_7Oys-7
zgF~g-mUwW~Q^Tq`#Ico0h<GqmvV<BAEwRK!LNpg%0XAugBQ6{U+0i5fE-WjITtd9`
zq%Zb8y)9%F4oxP)j>qAR{Z2w`r)0a7uhHBQ{M2fi2}2~I8v0@^T-aoUMl at Iz1VuHx
zghQbkd$5GCDhQ8i?7|WvE*$LC*oP%VTqHz11O(S-yHH~<<`AaVG7s>@ZY<wr9)u$a
zu_H??&xJ=47okJmk`YEZfC!3WQzjcxi(Q!^UU`Oy3kOBD4qOm;)jHxKaf*GZd2eRT
z=%6pynHsyZ&=z~WutPQcUSh!oTdtaSXx1V7y}*Hsz=4av(M%)`Tm+7|2ppWAcWyO1
zJ<AHG7j_7z7xKgDg<Zqv#hP%0g8h&Vv0+OrxUf~h>jjQ?Y{s$A^V$lZhhBNp7C7P}
zIK$@!XYAV&2OcaTd|u+fgK_YAfy3r4ahM6VSCWvu9$T8)L|jZNijCxUG?Kj#JGk&d
z_`I+s?BNneTo|W;&ofQ~pO-k|B5|ZIi6b5oM?55sc<`2?vE?-(2{gQkLxPeeH1K*c
zlDBarL>k^(u-$90weZHTfzNZ6q`@Xm6T`d2MdC0MBn=wuViHF)(I5%asECKa!RN&u
z$-A1Kw4}j)tA@>K;PV`TG}vs}>PbTEwh~KR7^{KTOB}B}f10=$Vc8n^ym%KrFFpaE
z=cuF+J`c`Fyd at 560)NvW^_Do|A#m*9(3b}O%?S)mg5H%ngojHk<Q5}|qQtS({AuV0
zNsmUP+>C>67$^K2IQX~3fgTbj4Sbo?Bs!;9a70hypan6G=m{Krnd2+zkbN0;sKFl2
zSPgtx=mx$lanOSp2R*=hG at Nh?9C492;v&YeFY`Fz%isZD=44j`U*_~p!@kTC^8StF
zPQ(6-%$FoY&Mk8g&<0k+`!>=$4e!wKDGle?@I8%4vKfL#a5m8J4lUk=Mg)#!#W?m>
z<nS8yRzxLI74b#%(!f{Qmo at NJqYCyfc4(qZ62e>A!!;t|hBPAMW{9}3-B5N#<5Z*v
zN*{=}IIAhNwVY_<_ at KqUY{GFvi+x$6<4 at 3vvIlG7qk2Bx!9&>xweV2(GBPZ}L5Es+
zDCY=tpyPcR=N2t|l-EZK9~E*T)il9BwD3{3Y%LOCla^+xg^wC^fZ(Hg=voUO<r!<?
zqiomoeN_vNc(9dfMWW50z)X-`Y2l%4hgz{OlMR!E*p~$sKFSuWg^wC_kec^pSeh0-
zYS1$T+k}5;d0#exHhk2GEJ2HXnQcXj^qTEQixaY5k8$j`0^*eb5BRMZ$NMtNieoZ=
zf+WPgtV1Nz;;5`sk!5IcQWkoE--`9&#GY4xQ)<>6{8qe+6M%}eMjuA<tx}tyS?tVo
z^1-y=&PEuj7Vaz-2wSrj2T?7yW)l)fEw*Np8lPZyHqpBzB)c<0rj}E3UR1cVU=DW{
zW`cxV(B|Va0-P4^%ucLDLN1I1Cuo6#I}042q2btCxU<AzSp*I$<E4T-OB~IFaU`K-
zYu3WCInB_Dtr-T$TQkcqwr0i=7dB)qoSjoPEu5WQQft|owU(_}YjJihAF8o+X_1Z#
zXJKb&M`LH_xx?96A0#1f%>s+Lu$l1Lnirq9W&x4D<Wj=h<x(Oc7fVUU1t}!`Z!Dnz
zT2vh}aykpsymWlVMgppX>+`mxgX^=VbZ~vvjt<*1r&~I>zI16FoS$_;mMCSXQYA)$
zBA>CLM;)KBnIF5pz=4av at yhTgm<vRN>vPJagX?q3q=W0T4Uu0<8`AOij4e$E*Jr!Z
zVSAQ(Bwtdb!ReH-I+2uvA3MMJG;!e#QOB;&IJmyVVP#-hI^LdPSvuaH1<s-`Q5l0Y
zaD5IxI=DWE5*=Kh!;6kxU(Md4!=^1p!udHh(+TGX7dXFx7Y(k@>9-E9&q=F}T^~U}
z$6GeGB^_L!LkR5~G>&!6DLLy}9R4vAc)rjp9A9V#elOO};`b#>P;O+w(p=<7UKP+`
z&xa-JL`u#$nu(Y*r{oAkI{3X7+l>x>Z`8v2;P>Q=fQW}!J@~x|o1YGTFCg}No(XT`
z{4V^Sw?>i>8#$+NI?F~*JDZ|cK8RzZ*0JAXi=`L}&J^~@9Z6Pf#X9)CSY=THf&MKi
zxz3W3>)`jo4&nDgYW900#YCOO?{)0=uq2WYo-b?(o-cF*&*yEDo(P9hflj34kQLj!
za97^u*#@|%h7D1NO`d13vy|0z;uuadAyVK$RP^lh0wNxqHc*|AKC2~J_3(KeY?!K>
z at OqABdiHv3Z+dt=&rdHle5MV3K^i@$<Z6<Jrh}Q_T~5gb1p9)gP_|)#h=;_{$_vU|
zSVCD@&-E??Nu!6)Q$|A&e4aunOK9<WJ-psv%kL8xjz)TTy at ZI1gy1P!9tRsn`Ag3}
z&vJ=lIB at WJ-sJW0c>`7K35PX7-CGZzr<?^4 at sJSlkPvJbsUs@H#D!r!yq at -de1_&i
zL4_dpdRx%pgSdc*3wysFKF`Ss-3VDAa6w_5CSk!54~`;w_`HO8O+cA_9_2W?Gs2oM
z1Rn4~k`P|cDX$)0&se?idT at c)bL`N==Osj3IOWh|w-*q6o|6wfd|pD}f>@+ypBE7E
z;IgzHK2HvYcd;gHUA))ZLPFl_k$I4W at Om|*)w9>@p+k5*Z9#yDivf{S&pyvw;PZkr
ze4a|lPz0Qws>PrVuO}?Iy&i5)Wlum*8GoGJ9-Ap$uh6^5Q1$Hg>>}*;5RD=!*swcO
zQYT at G90YNlpB<kk2FIsV8lNF98e~_LERzrje|oq*6*U0SWH^xM;r41ac(^@%ksj|_
zc);!HumT)Sh3{7={=+n&P`EwU2Mut0hUjJhjxVvqg^t&BaRA4c5ObkV8{qaD$WQ)6
zGeHnC at L60ySbPBy7Xh)eGY-zq(ir&sEpX71fFQqsh_W09vjUDJguBc4EwuRr4!5DC
zn&c9YMSg7YLVioR+hDDBV}qwd20p8BAx~C#z}W>iIJ<<1hlGf-grFI*%CzrVu%NA`
zKw^N4Qvn$e(dJb#z{Ry%T5khfTxgTe;;2Iyu&q-*2Z*>xh`30Icu2 at 1D{tYfIk>Zs
z3r;E_WhSIUI1W|}PJ_R28U9N%<G;k4{}N~ZOMLk+QRBZfFaArj;=hs}yaTV{8~j(&
zgJ1A#L60PWS1?9Wgg@|WNfExluO&tJ0bauk_^+f058&659;}~VOM0+;el6+2>ghFI
zLBQ$>GQ#5dub^mzwexF1k&a~YwV-H(mGk?8q7lg~USnJ1zmguToL at _N*v|O1phptm
z?8+EP5thxbB}G^@Uc;vOucQcj=GT%UY?)t6daz at DE$P9A at fsG)e+4~~0GkzKBt>jg
z{8~~(V#=>2Mc6LCmK0&Pcnz!Nzmgs-mS0PHNJ9Cwqz6l-*CYWf74Kl%;lFYuwiLX^
zmcf7J`$z}*wH$|S0k1i^LNqp7k}D%@hHc--DH9SPqop!pgym4y3mnnpm{GEX30A?M
zq5mba1)^C|(4`wlj)d4IP2$)?{%nGM7;)KSLL{UT2O!cDSM5x&3c8>o9O9o5vA_h&
zpqn#5Bm<|~CUL;wcZnV+rBqn8yi5A$V+~2jM;vjpN?PQ^-vmqH1lz>P4w6R`S2u8c
zG;wtUX)v9+Nd{DBOt2X~wwVzBn6?RaBdL)5k}~n&t(Z>k$~aDOkh+*e)sZ2h%%3F*
zxu(GqTI!A_#6PZmm|#P^dzrYV!E`vq!QN)#V-5CF6W1cKgPKH&!#Lu?2VoQ6G>A{I
z{QNHQ;MBy##~K_asSHFo?8ww`0Ep<3gnY0;GH2q04Ua^MBUXh|99(OgIC}ER!yfrw
z&BQ4Vb4Ec!hg88N?i#=k_NupKi1me)Kskf*dq7xk<_kNP<FMY?xlJO)A!{ZHk>qgF
zWa1<TJ2qXz(duDuGa+6JSvkewPjf+oXTm9tz+t_`Cm=sE9Fr(wfFBnzkY$(<w~a`1
zO<cra93N(wFQT`g!dVS+6_OAhC#;3b7|a<_obpT1f&4sYL~^bdQt_1hgZ0IS8Kw=-
z<aF5t&ot_xFFwp5Su?>iO{_1(bs+<?8iSxhJSe-wIM^$%6CY;8K8%}H8UP^(1RrEG
z1QH|K0U5-4 at Kw7lmoPDL8bG}GI7=X_jm(EY%!uz;ZTVCKH4v8O#K#)S6k%W}x)Mm-
z_?SW<xCt3VIfG_MSS&xpBoN$C_oG`<TXuPzk_g1?kcbmV(_^<K5d3s35S(7JhSyV?
zhOwfk$sdE?D_HQuiH!z;p9G;woM8zIZpdp1ByN&1A9aK{*gV*6slNiV69-g!LGx4a
z#7|{wV!dD|q5cb=3F3id!vR6C;fMfRAsXOl%eqHQ;K)NC=G9|reDD#1a#)ZcR!<P)
zdI!$Y;7M39Kb(H3JAqf7YaR#$P&48KM?V6=P>6vDLCp^!f&d}KK!lLWM~G0cG(Wkl
z2oeew<|5XCs~=+d_)ZdWj_6|f#7q$>j5wrGOA2x0f-iwE7XvQ|2Mf#;5+h#FGwTS4
zB1O-L8Ac7SJVJ&MH8~mwg$gAhXvoz>)SzA$o}eg*@bZYj!6Xnl^eWaDpN<d&NrA+V
z4|N1$f+iN)QVb<5v7`Nx#}YeP8UQOAEj)swi3DkiR6 at XLjwc#s!r=trp0HR!34$L&
z3t?fQ5{u~xv*gmKpv&96k>|ntJ>mhW3CpMBiSmvwvG50BFMM9Yl%Qq=7nATyWRA26
zF%6iD2p)(p2Hap!gAmP*3N#GT0&*@vSn%VIiAE&s1%w4Zrpv8J3W(WZOQHe9P3V|r
zY9$73iiRRY7ZFmp9f?7bm^+dbJguHd at I!ntvh{IO5>*($grf^<Ud7Rc^`_zj6{|%h
zq6-Uz=)$3wIMD1k_7ceEiIo=3NhrGzNZf>~xIM{$tctKSJ0rFs0%>*zEDa<^d?8U-
zhX^pFNG6B~BV0<wxdt!03h at Qu31pCN@G+b~D3qhIijQ0HY{C*tg#^q+FhO`xuu!O&
zE5eI`O+dxr1zV4bYT{NboB>z}&9^B+p&Vd1OsEiGOgfmH3h{-vB?5_`R2`y=R2`y=
z#3H&VSmGz#lR9-tHnAk4$inM@=)$U!88NLVaS|BfBLJaAf*~pb3*CW1C<GP-<dx&)
z;=saDQN?Kp2MX?UlIF~b2!}Bhf{Ji8ZgmpjR)wG<t(B`SLK}!FS`H2>jwvXZkfC8(
zC}a@`t3>)qAWh4FxCMzhs)!XtRN?qRSehR9G7?DqM95Hyn1TQ)x}JnNbKwQaE at 8n>
zm>pt at Q8)x*3Y89c0E~n?1y!Q<!lr{Xg|=4~89~J;6ojBc9?3%xRk+&$G9#`SP<kN{
zhQfQYimR`}OgOHH<wR8B+AWR6{80QP5cA`0L4~Ly%u=*MF_wFw6fDdHDK&KrVt#DG
zYD5)bQrr(kM^hdEZoH;yjw&*?sX1$rc;<&maa)uejjV;UQ^FEI%EfsA@#E4aVZl#g
zp-&V%2}}G$2B1b%p-{$RAgqW at K`p`xbfxB`h1ZN*0L4}(I;2odq5)th8cpa0F{D}{
z<H3+OMm3*Ucu7Q~l$aCOY}op^QOam!;W(&pw;8ueiAX7WrEnsmD2ByD`3H^jP at KRL
zHw8=6<FYUfpy~0w6 at geh&N9^E7$f3 at T0|9A07n&$`P?@pB9LsH;*~^9QM84iBDKZ$
zG(yV=D#9Doe564EiJ~o54`*G9wg_UJy@>uPwl_6W76psxNi4CGLLjK{wn~<)Mqp9!
z#7}IuY9uWRmiS35A8**cxsyuld1}6|<*Y{ZQVHu6M;w?seG|cAvm&+#EM_OiLY-nA
zIkt#(L~P-sFl``8Y=OjxE+W%WBf5zFSj~|^&_K2!VwoC|fp!>H972N;x6QN%kuprE
zs}e}U89B33^ZA8ihguw9Sji$Z at K&crXrLn?J|{whKyzq7&6&_pzM#y30ecXHMrbgg
z8cQH?GzcFTp at D6VLj$k72HT>M$%(cfHZ%=(MKNs+c0~n*2IK%@A at T{0ID;eHi{>9W
zfHY2}7RHjs6$->nQh at og#z|uC3liHcHwKwlw;G(rmC=|I2OSM>ik!-5V84<wZ;Bia
zxH(9{TKU0#jaoQ9_XkP3Y`;QcPPrurZfqFbHzX$t>t(u-7+a%4!#Y1sx;b6cz<%Wb
z?2QVDCF8Rn_YaAzoLj1eX=z};!WlGdzmgcugX_vFs@)RE+lz)z<fy_DmgsUZi9pgC
zU%C)T^U$FX1c^DfmZM2{5oow?NJL_)>C>9B&2s0Efwwc!Y>k7liu;_E0mOu^ni&gI
zkOLsRV8Qk+i4iwt0I7=a9f%llquK)~@EKj0BOlU13=+e><p<fmg)Z2-g>0~HWdJP>
zpU~-J#7{(D?k_TMYDRY)BrzHYRieX)CFT|*YB6CfaT7|>^2R5}T4u)$M}ix79O-#W
z)?(x1kCDWp>qt_DHd$isI})>|t2YZ1Y<yh7prnwrDZ-xUJmOtjv>tH|!yQMWADml`
zsJ{miD|s3<y@>RT8(&}#-1ou&%uoQtnE*(MAS!UgR{%6i0gy%oppcXWeEJkkh~I+Q
z34rK`?N|$=6F7wu%uRU{tIjDC_ptCdL^{2gCoF-kZ-s2I1ubtgl;6>c at flysmcY(S
zHxV>ItPL!I8mcf~wgfo<mLMsxB_K3ukphVwK+BfE;*iGxi!DMlpD+dPJ`uLW-6w(@
zx1VU)O1b}p?VPkJT2T0WAbL<F4a|?T5AHz`M=QDmBz~Mvh%OXfU2a1WvT+}Z5xP+6
zxNyVqpZiKgKqopxm(Q`>St1(ixw(ScKk+fe7IetHMWEo`1#YN^yjVvqXFzl-sCbGF
ziz=K(hgd>QL?DJ`Rj{ONK3EYJOUqe-4*9gm)3|kkI$QW-G<gL}+$6}mChodbqynsw
z0ND)$h^6I14tFpx2#K+6N`Vko6p$8|@-}QS+{j>oi6iB%yr{f!DlqY+Vl;-soD`6F
zQm+DIX@&yi_5|+Hr6Ue~jLz2>K~+ at J0cVEXq9ArG?or?yUm8G?Qf~m8GIuE$I2dr7
zg3t~3DTo<Rbw*Js9d at iBF@%dyKu`dZQDCHV(V<?!kUqp)(qFkpL12hF14x7gASjbc
z^+;^RenF`vfnt8hP!$l$kXT}-fcTii5<>-qZ%HgMl^}2M0?Va#30k>vv7Hx0G!*cr
zrpNZKV<X^}0=6AUEH-%92{l)e{c$$OT>!$o^xX8v{>gm+5{vk!fG_|t01;3DY0e5r
zb5=ksBpaw`2aq7mS;4};C6?waK|Z1a3yI-U5)XTqi;gT&0l|b1w0eX?iN*FM4UX^2
zEiir10 at EjrsEg9qeu%UJ(kF!>8n}AGw#RqPLJTrSg$v&U3wP%0U!`P11r<_1dodZh
zvX%yMR)!B4a8?#8Y(T;wLHM=;l0XVbA}gT9wD>|+!D6vt7?c7*x7?!4clFd;L0AI^
zK^&9_BymVj3=(7df)><FnGdn1o*Ce|A}vO9?OBY5fm7242JjIKB{Kp^7i4S<VjWPp
zBP>fH#$ttGo`l5;3y at D;;$yIC12P!Ov%mtScLHgm3P^N0iz2KdJS66+3NfK>J&IVA
zo)I}d=MhM<aXFnptTgvh8xYy4)rZGIHbDU?r$J1Vk4(s5>3e8Ij1>q=r at lVM@e&A-
z7>KutyZ}f*0T34gAgA2=2_PQ)rri3e^PI>E45o{1jBrGP1ZI%c$ohc2h;Qc#d(ko$
z_QC}mN<g7IoSO+$#6rYp@`(2W5Mt37qDL6Whr|JI8d06VZ34seQ32Dc5S}+y0tszE
zy_rCw$!BW<iK-5V4FZWS*Te|KqTrr{78AxLK~gD;Ojsxtk%T~+KktPE5;y92XDo5!
z-Jh_;jau^{F})yuw7NV5ONiq#VZjeINCUTAODXtJk2NMNR3t$*FM$=aCek#5xF{r`
zdr1v*f-}<qo)h!HNr*254O-Y73r8U4gk>O*c#tOukztE;%gK1m3b)BL1hYa2CXo1X
z!xn+ek2Sz2A?`xqbW<`xP9i^sGds0hf&!n}g_t<=@Yih!i?xvhh%WWH^H|mu&l$m%
zmI7FjvJhh^SsZ{^OdNpd5Wqu7cxrTJkeF!2R1w%z!T?~X3P?;uqYk%P(}58m<D)*h
zLJ1^gaq2}NO-TWXn-- at 6!h##zjzHo at CdwdjqfUDUi5q<dLr4rm<}Nx4zgQe(as<-i
z at Ij71;-`S%CoGanfMRKo|B?yw$1poN0Q`i}b2pX*i5neHX)Ncz8r*9V2=nHTiSBFE
zCI|~|+*ZW-FH1%`<_uVi9E(8kLp75?;wPGmxCvXqvNm}D(i|Zs=f8YDpuh)h3f4FY
zadJvn(x%V^^|XNnoL7gspBAS-0--{bIS9m*piQdhfd$S71VVx04w+sM6RPeqo|tfd
z8)30zf;A$9WP%7GnIJ+)CWsIU6P^+?L4;r?<kv)(k9-7zE}Iy)K-1O)#&8u8EV!vx
zGDa+vT7!u(2pzML3B|(5<dPvqaw8rMAc?7}2+Euni+P}&q);Y_sd~l(NMfqt0fdQ3
zEKE!RNk3GV<N>T7F&5l#ilvVcH`)pqB>l*xLAGMC3Snf-4~HynU#8<XR)lSZlWAcU
zoJ%X9Wp<oPQ$dWFa4szjgfnTfD8^!T$P{S+)`MrqnKT{Bfn^h8Tj8c(s-iF!CWeqk
z1DG3ONypszD;$e+YAFz(R5;#p$0e6%X*VPqTsb6=Xo!`jux!PWh7>F`#Bqgk0V|dy
z<|`PYK>87Zo*OUu>zuUD(t1b=aCrr*aD&96xQE5z{!3*v at l!@y`C&a2Eb$X#IjQ7C
zgWdu^6pjhR>^Pco7p8*6>?9VmlVdSEi3K-_#q1;&+<+yC#h3h%7Z3>hMv_M$&re{L
z`4N`*kyr8n)+P*+Q$GdEvlCd%PLAc-F&6$WvEr;Ou;3=fa*q-lx&huVOpLoU*)<_C
z{9nNnKjE_6swsZ)!hj5cZ+_ at hPW&VmRZ|5EZKB3N188;%miTealdv>9NtZJO at dFyj
z4-_oTP8mzwB-T<jH5iZ|FcuOcL*V-^0*N0NqzEK_3YPdOSel)JC4LGP+T_iI&j4KL
zqT({NDX=0xWo=rj{xpEsPGGTia;$ajEH!@`i?u^$0*NhEe*)QBc+t6P%KpzOtjJ>w
zNMgAtN;xL at adtyJUIgOqkg&{;jmdJONLcXW;Kivde*urM#Eo0v=~RQY<BW}L%!<X@
zNi1=bt at AV*{3M?EDKyv at m^Gi0P>`Up><a=5TM<}}D?%VnCL|X8B$oIoW5G>giJO82
zH`Mcq1I<o^F3yP+EOBEjbj-<w7;Q}^sC&sm1I08+gX4<uUQ1b(C=fp`T@%RK<dx>Q
zBFAFw*qgY`RgC3MR|Si;<FVZDs$elYj<DSI$~hrPY~(H|i6?#{SEPa%nJM}oXaMmO
z*(SHaN-Q6Oc~>wZt|(ZVoidjADOl2`f~DChSmLH&v38tH(80?h10OR57IDQQF`qeE
z$MkzA*3mpatUtA65*CL?0<n6M24*L*R(>2;1eW89P%Pq#SS4<wm11&S;S}7+XIXA6
zr|(44SPpb_*<sN!pCvE=I<}rB=sQj{M0}9j4us}K+W{QQD9)`|bR(Zy<ye+jV6pxJ
z%jXI~fn$Zl!rCO($_=Lq1xpeu6j(n at SHub_F=B->+RBfQyMi*eH3@!*6>_YI6+91)
z6~YQRR`8Bx6gMmgJah#HDR`B*rAdxuZj9wvA+TK75o2-i5PO~x#|~xBGjgnuqj`RU
z2IeQRR(>K at uoQd+BPb(Qh&{-NSRvv+T|Zf|#81JJHbs2oo at 5apjmQZVEOTQPI6o^`
zo*iLf6^IoQ&shk^SZ-oguslDe!Lfp)G*zB3Yk{@$<5(fF#E-u=O)M0C6qtycz;gGq
zpg<i(R;+~^H$W?66>cOkH$f|S%lx<@TErWZ=$M2#adWi9B36hf#O=}ittuJ-e(Y}C
zAgy4*Phx3y3KrZXmS(45F*|`ptdLks4g!g-v4T6LMRem<X%W4-S6acsRyeM3x3q$V
zCrB*ulUQUBd|_eW?q>zWSU%i|{$~MlRFEJvAwk%&1fdClkk}d(L?1M}n~CpTaoI`(
zNEh6|LLl*@-IcK<8*KsrIfLNboqM4vJz*^I6BQI{YO;c4#|oA-uYfc=1te|~<V-<m
zg6~%WLSioMa?;N|(0ubwSfb2bY6KEx{Nx?UCOn-D1X+PxJ>lt$WltAtDm-0at+pck
zTwtxXf=U>7UD2iq{qQ!<P0-ZfgQSq#pb3^*hOdjxGlL1vj;>IQg12+m4S~dyl+9S0
z3%6twmUt>4 at l-(KserU53P>}QAbec`iJbxxH&LkIzG$jbf*ThZ!~{fMK#>f3MrOcY
zD<hEj at s~phB!2WIa{eIk<L?boVnF=Z#R-JXAu<pMo0A|kDnXi^0z#t_OLVEs#~*`j
zA<ZNMW4$3IBN%$4_6vqtZ(<1ahFUVdhl3I_r{V;{l28sHkZ3C)(Uu^5SOJN&0up5f
zB+3d%g3<;FVyGAJSAq#7V$|owbLEB#Tr*J;L?qZa2qY2;2m{3dm9RvOL5K|3R`5hx
z0ig~#8tM=rT$`KFNK+&-e}kDo;wMavU}8wEr>rozHhD5Qa!U|O6a*4K`f3M*m<mz}
z!V*7 at 2?P>93BtA68!3l_im)h<8OH<mB?5^dx6%@*m at R>d*%C<n<QiL!2ZXgQ2 at VHR
z&2V`+Rk*wY!e9`uD0zgzNDy=-Nb^uY>pa-uMVO;*Hli$tu*-`NvdfEQ<;`7!SSbWQ
z`WRM9g2a!5A7Qah2z~?-KLdgvfiw>eew59E8=?w<G!F%|YE6_E!~o1rj>YT%LdV$L
z6+GrAhY&xh78Dpb at KDN3{6yd(m>4S7fP;VtJA`M;K-eLecyibwka%*~A&@vq+HiOU
zv~tAuF0kCNtboc&k<`S at I>ci8+_Eg}mRpvE-BN40MN;lrmUc_RLnPQOVF+ZqCC?|2
z?UtLCh22sIFsX(YlR9>-pv7WD%d#8*jY^PMFbJ7NOCjuwe?yUTO9HWQY!GzsOe>3u
zBVoY=IXQt~A_tHX`LdO;#6$r}i3&*k6p*GQLCXn%zTagr6Yf$L9wj at IVJ6&}tk?$k
zCX){_o|sT6ok8dgMRXdCmBJUvjMTD11K7#AH(9bq%uqm at k^<6{c(0(3(UcUBrlf$x
zO at fFG3P{2$AkpQd*2q1`3_{0<4gAv!1QKQbY8!!84RJu=;7+&q7J(2DL~P*xV+Dlp
z9NJZU-ylJ(2lg at gG9<B3K&*!x0B#b*`XiyBvBXV+2ogqI{Xt at c3I4Vnfy9qbbp%?K
zh0H+e&C+>A1BkM83<LxTA|NOr5mP`Srhr6 at Z>H(&N5b<L{s<)DDW`;(C<gFX{s<%%
z{QWlq6;(lEL;)!f9A5#63Arn_O>QYx(8R at p<^>ibhz(bfX)v*&J8u3Qbc7BVBli?@
z(+Pp3A$rYN;wQFd?kN^HnvwvBl>mqj0VFGT6AK)1;TkXDh>HZ_>_SlfEk!9PHw`Oj
zBC3G+9BKpfQ=nKL31YRyPl0k>pW~<a-9w%f_wdS(VKb$rh3#;EE%gF3NYpq<g2dQO
z>F$B?#9J8x)gh0f0bnQxU{bgoA_IaM;YNr+QWD)8F$g)?Rr%Kl<wW=@m~$X*q@}Hx
z$6A(z8)+3?SiM9IFA*!nowWRexDXkcGQS{@7z#^LBU9#fdBV~}6p$uDw at _dxs%pI2
z$e*Qf at DmBbPZW@*$9-!?(Mc;rwt9&gUZTad1Pvf=QWcy(%ds>)#zJCv4`0_32%E#b
zvyr=T<p;5yDj;Sj)*9O>rQAH0_$dR3pE3Z;#A7wMO6K1!rSCA)0KPFIkQggiVk|+v
zYT%8YfAUYkVjY1ciTP*$6g*L;-}50U#1H>TkXS2NtR%;3lEn(be9 at vtwI5QfB!=xr
z0Tq5UfF`P7t at GfEEg`13*g|0Ap8!<GDzk&c$XX>H8<3QZOWQ(XzWkOT at skpx1f_t`
zCff=vJrToY41IA7OmLe;AXuP-mkL*yk{AH{7s(X=;I0TL^s{bCY!R)v9A?CC_yL5(
z*e1A$O&~Gh5;TFt1pV9K!X9ADe#k%N$2C7f6GxG@%OCTDQF8~bWG?DM0!vIR<cNzh
zg1AUf92<GCI5r9pJOpRXA<;EJLURu)%$`&&!XNjP3JkGg09iM_hlycaT*FN^f%FN=
zY+(C*YtO$LLm(}NWi)Ax5-2F1 at 8?B2#J_t+--8F1%VZq%v|J{WAelUO_|gDgI${E8
z;oTyorOR26Mw25|1R;soJjAb at v6JxyJomlO2oi+rM+A~tP~yO!Bij5WTEfyCjkq(X
zBOO!b5XpD#l=bmw+^|t^0S_S>VsGPLFOwj4Hoj~z@|`(nU62}itP$N71QHwmYA{V7
zCWl|nB#`76l=<qKQaudjyK5mo_ipl+PpFrjxj+oQyC#|p!fH8H;Hzoc7a2?JMBZ=x
zbuc4eO>-{+fy7w>5uMN<Kq6DnCtF4hg+QXLfHXt_X-*1Ai=}|17X>8UDj-RrfV6-T
zgv%+Ql^ZfX1xws?_|`J%j<|_ at jau?ZZS2+J=e<Pjf`)(}8>9S*FIFK=iDE;cOHMKp
zN}WNEO_zS-lwoj`AaN8Kln(w*U-st#h`*HjGE5WX+c2U*4EYk3K&TmqdjeshydUuI
zeQ{yb$UpeS-vcL**zuPWp=OvoCFA%Y_B$@45l9T>TEg>9_yz!Bi64D0jJaULlS|AS
zp3ny;hMb3S8!dSRQ$}7W<=`EU9Z&rJ7v~b(M=Jss_tDakfvpSYM>#8ahd at JWK0@Nc
zi)xFcRPmD%Bs<B(DFpvEmjcqX6cE#r187<bNL&;Uvyua#Mh5xXUIEEY6wty=w7|--
z7H)iP&tpkqzPMLDXyL~f_X^g^5B?>we4QgG;{>N*v1k%&<%ix71#6ideY4n#wakux
zwM&lW60INxUt}yK#$iqwV&#X!oPxFT!)~fzt^ANqDp>36u$M|K*MbCVQ44~r at o#u3
z1FYOcEl3Qoa>KUDV<9m%R^@|Meq0L at Ot=;#LF?>L3X&g#mn)!kc3k9 at A5-`l`6s=U
zu~u&Iaf!8NwA`nwU=?nV7(TAxt^804Qm|HjaB&4|<tHjZtQJuT5}<W<?BGIpF8xZ-
z$_)-K>B7Mk(8`UsJbVlivxf^BeDIT?l^+~j(!iFdfL4B at B+O!plCS`+{KRpPvEn!=
zK*ctV+<qeIBB514D>ptFDiY&ts0^{r4`)LKYt<(9Pl-i&NCB<0LvcvKTKS<iq+qSw
zL~V$L$EK?cuyEt{6M^OS69!4g+<>CsE&L4pb#^YJ at DG8BTub~C81EhYQ(%0jMihvj
z0)ih`IJo_U+kfdb%}xO^J2?Q{BuKO4 at 9xrT%uZr4I|-65c>p9vmM#TCk%;;m$dS1p
zSpmV1lNfGIma{{au7DP8as!GurE&WSZ&gIhvUZ~V1g&_4C2r!pBHB;5{A&<JB9;Mh
zMN&YGnSNl7?U<XM`8OQsw$ieC22o?il5zjDNXPis!=#u<*u{yC`^FWJW~YF}PXUP^
z-?Y&kD71;|P6COW0+KcrkY>k?4K#psNjHQ%mbg(NP>PJuBF7-K$T2u9h%rWPK~Y8!
zM+GE~3P>E~I&t#AX9#XUp|deKB6*MltdWHqP^1EoJSd=b^{kPF8&G%v?7|W{=s06>
zE$%RpG>{o6pp~38a8OH(b%4dSxC>wTn8mfYt6E~MfrEZ-z(N7HNXh^!H)Pd}g~XQ7
zL7<f%7nL~FafgY_^l1g4d#>zohl!+Z4ISKJqF}8YIUN_|tf7N0;VjZwLkHb#S+T at U
z5aSLLMP at pVSn-w_(uIi?tIW_y#ZW8O!jEe5R;+~|6}l~0q$G6KflE<d_$Qe7Y0+3p
zXe&STu1P_yNeTb-nnh-7T0+G+>u4)SYg)p;#U{yFlM?PRQLt8iIN~c<>-?<2gNh{9
z0ak9-q=ae`mI0Qege-%Cg%xk*XAK^7UbYUf>eHH(7`fQY%g!AsQcP=7!u==;*2>Kq
zJm?6kL=5gn5y69wjuyrU9!voe<LDvDS<@2!)i(;lSTe*81+?<BCM9&3uu`zj4xvM#
ztMDUYR&LhNL0{{&jJ1XiO4Y1bMVFA6&mBTToR;ub!yPGN*P*?iJ}9x^CqTp&5#b17
z1>p;F0QgA|{3M9kNf5J>AZ8~)D>qI`1lAHoAo2fV?>)e>Oqy*`6eH$5Dk?_QQ4q-r
zD(aXp=bRHJR8&+9IOd#(G3T5e^B7P^F(({z&S4Y`qk;-|t?KUg`_9>C?|<KO&a>}5
z_s-t){4VP2x2r={b$4}lwQT|-;qY{`*sO at 0J<&G8k7mTeww6;HR2+3w_&nLXk@$JK
zgSoIV5H&FnWmaQ2?$;YA=Si^MM`m)KL=BE|o&;CjWbBh;B)S+9NzcN_(89K&%0Uu~
zZuPPR#Z&e5=b*14^;ShW$B`LY3JG2h%-)c$l at lKZn%+kOOV%Vjo=L#o;Ad!ToK>*p
zVdH4iU5S^cKeTigK?f~q!(N`1gH3b&ZJH~mMobPiZZ^&Jw=E~I4Pj-*C4y-pbr3{(
zx71M(ai~gIJSA9i6vRMeq9$4r7tc^Ff%T_4nyf`1MGF1pG^xs1^ifk$W|NzxA94~z
zZSzRHJI#Z-q`cm6cWB5~rZ#ChwaGwgi0VI1+i^daBF3 at P6wW5}5?4+sq#U3y(2^-g
zsfY=WzyKRAfRGYl2%)2`<J<>P906rg1&Cr8$YOBtMPNJ?P>Fv4qB1%Oh0#DTF%V1)
zL^~UZsu*bFXKhpBh!ptY7%*8-5Df%34Jn8QvR74F3Zj8jUQ$_NilQ_O!rLHcoGL=j
z5?n;O3J`fHD6i+pWE2uk$)KAM5IGn~<<V4jl!nOHKnk;_QZN*hK~_U>Q&jPH$PPXt
zE3zK+!ZAD|JIByj6VgFNDGX$nX(~!#Alpq-*=`!L-4x{H!a&2%A4ef<R2w%r7Oy|E
zaidh291J&>m{SWwxA9}GHI)|1KpQ`<OAOUkI~piMweb_FPz4gH(9p(Bq(V_Swa__G
zDpZ$?ze6BPOsOz*@G}tn476lL{2hi0ej18bQ-n!kmm4bhA*41tOpdy0XyeAIg-Hu;
zaw7w2!OcKhTXJF{^<arPwa}H4Wr?aPrxv(AMSgOuO+#C2(v+Fc$WJFAKMigCIJMAe
zIkhm*)|#AJ=+8K{Fwn+LHt<+7mY7oulf=f4=FsG9<40qtsWgTLf}erlht(o0DqDCQ
zdI3>8Lj^Yj!OcK$GZ5S~lx2&`OqMN#EU`>EG~LEe7A~4<<HuzS-pybsINvakwWAvs
zRPd97U at -froq?#Gfv6oGKw?@s7Ox>%(@??9KwIr((PB!>Ws7bho`z9SJRSyGtttKv
z*?|Us)J{pE_&W>)KLf$fK-A7ai<>VOEt-YRu86+_$6;u&<i3smj>c3V8d+}K7`lxi
zO^fOsT$;5(tNVOq?jyaR93CS75))k)Lr%qLDm#yH*>F||&1oRG$(#;Ua5E6xOb+BG
zW?CE`YQSZYW$L4TkY$U8=s%rYraqcVh8lt)B3iH*GWF3^R!>7R<P}jQpmZuo%YwW7
zq{=}6iPH}Zc5uyeNRlfzjF2VR#*oHEvSy*hovQeVd7)nfR9hWo-J%l6x<x|>j4qyR
zkZLMhR6`p-nI~x~`%gnuPy&JCD6EZ}xIB0%&mR}*thBOj;b$zdtXxzcvU1T7{AB)(
z1nfc80yHjij~!I at AU$?~;3u&h0NJ1_2l0t$XsaE4A`%i6M`mrc6Q77qYg!WtY_$_-
zDig58)@CB0jh~nom4}!Y4Q=8gs~JtTwWdt$G}XpWd?K1^YfV|pD5^M9HAL-nBxJRg
z5h0>+fv--LSbQQnwXJ^Q6VX(gc#2O%Q?1%5pNLSEM?^!bcFH57saEZjM?_Pt+9{8S
zrdqXA9uZQ}#&YXMb)>jN47BmHP1Ug5YdRf=xoptJPi%|gC;ku(ZMCya)s#O(C6HB>
zhL)`0h>gWUR#i;E63aG?PHnZO@`z}vji1f5D36FrAgd}3!4G at gkZyJBhHC>rTkUM7
z1!uQxY0;WEs32*<4KH&M(zM8N1wa`XbctzObi>Lvjbbg^G#c9Y+3bq)i0A~i-m}>i
z>}*^4$~KKkYqKlZbhah1wWiIkU^f&A#HwREQbV?}SQbrZYbq#~MMG-3hPK+-><V_4
zkU$kk{2?0JWJR`VG}Tr+n_Yqb-^xKYX;fPAwQ6W;#}eBt3;e&f4{iKpy~pDkNNeL~
zvn%i_TA$hMirmoA^|09$<t0(2kUba;(NuEK00&Z-nGz<;kqRoCO8Eis2aB(hu(32`
z;WcF8HDu>#$ii#Lt`R5>69d^bnris@%L4?4N^U%_1FFSM?jGm_md_X`-wk85vA?z5
z<c}{cCbs&iNbHKWt#)#?K<8|^gpq?)4`7`c=L9BWVp9`hQx#&<a>S<Th)r#XP2(YS
z5B at UMAU2GN?KoQ-)}UKE*2H$4E%z|#cAPB-G3kagu^nH_Lrl6IU$Kd7G|;WRYhuG!
zYGCa$@fW*#TAS9S+i|nJOr+a!6N{+1Sx#c4u{=%0cI|8Vnn<_fYk8YUx8rMhib*$o
zr3RMI3BOoQCt_1iVmr>(Ha6*YoUM&)((O1~USrY?XJE@~Ol&7nVkdP=h at mvtu3yDe
zk}fr{wzQd(9cOD(n{+$Q*7OT>%QO;`15E}oYi6*qR-jwfkJzq-tet7n?Mh0chqr?z
zPtK<-jB?^hKwSe`KKTn at TU$!Rb{s5cFzI$2EYBF}b~0|62-59z%W?>VZkY>WyFRcC
zBI$O0Z|yCSZu(yOz}jEpFLr%knG at 1&eSp6#+k(?{c9=C*?T#p1cG%W8>h^+3W9u8a
zzF>XJ8k;oatFc%UgUOeeHIPdTVh)LIbw>1Wq*5{{zCsJz+8XDU?9$lUTD*lOy`4Rg
zYYi6N*2i+O!J^yowX-ZL3cD_kWm%*KcD4l}X>BF4vn_JP!Ems%E$T9Z&ehItAb_Y{
zK6ZK9Sq-_-VDhxH8Xk65L&B|FX^iBcr7f!=HL$ZA5_H}A!j7|@-9Yq4Tj}iVhTM8E
z-&#9P;AYtkV!Qscvl at tUXqTrQUu&}o-&(s(#70)62G(XZf3d5lbr6PhJ86+UC*AJW
zhBnfOozZleW*KZJEp|3XMPgTJBrdq@(%>QxM?LX*6N9gXQA=-$&IvkdDVQ}-0k64i
zCPw>;$AB1|EsQ!_7;<W1)Y!t{Y+-P=FgRNnoDF8bTG);+`_-b`@nyeSbi-F_AiEd3
z2JBfYl^tjC`sp;{_A}UyGke*5%U-sy9cNjbn{VxEEX#94x8ut`Hu<oREo}Ho4P=$B
zzh*C6sq8p&WU=UWoH?Pk=yserr8acVsV!_cqmMb>SadtS9B(YT9bb+&7Txfb8gRt1
zezD`s5y#Lu;#k;@vs$_<3FL at lrLp78@y4PX&ZvR726fAcZ%|=RjyF2Jr|dfzx{a?V
z#~Vq*8pss|>kAuaPtIU1x{b43Ua;u48heVPP;=w_)ufRv2tzlV!B;jR4Bd{eY(p5j
z9begoFm%ILY9Lz?`WM-YFxalnvKwLOwzl?^{Rl(1tFi1z7`m;G<vxR{8OIw7+trxk
zjYYSsG3T-t-PBlWz}c+zi(Q>LDp_<>XSAKH^mXa%Y?nkkH|aSlS=f%Vb^L+(*zx6<
zWTm&`EBh3hm!0jhg*}%V*jX>RZ((w>vtDxJ!lK)8wzFO8%7x)(S7STdC3h}NK6bWC
zZe3V(yBgcsE{TF}r7<;@8pzg#=4 at xZBtp9RLUu278avyCh;FvF<E+?9Z+aPR%~`QU
zH=IegYim2(rGlnwUYskNZ|!WCC+EsSmm1hvF9epe`@)VhXUkSjcAPm|Hgr4N<!NWT
za0$mQjp2+M*x4=wth7sG$Cq<uD}Ot_mhEB<<Qj`kB{x|tY~w7^)GfNLtr4Tn;vkn_
ztTZ;x5>VZu+iEN!)eYUwc6r&^E{UpcrLp77wYSiv26om97m;iwva?=ZoQIg4>};2p
zo$bPT54$wBww4&A*0+W;TF%<@AhzQx+o?*5BoL|j*3Nbz6sCO*?5vlBBelM;t20;P
z7Twm%Dj=!mW at o!3B&kVnXS)#p+?J2syvxhZcHw51T^c*ScDBpQvR%>#a`;o1!p?fh
zr6*Gg*=5yf>};0~Rw`q%m!0kM;*8q*)~?2OwoBrbT50V1*v at vzohg&X&UVSIDWOXZ
zIJ>q|*>UFV+M?U_vYqXc%T*?g-ONjFS6OsB>9Vt3>VB1O6}x$tT(+{lwc~4NyCfFB
zq>&of&AjCHmHFDvdP%HPi*8qAJKH7UPOUU{obBda2oPdx6+7D{x3|o<cD74m{#$fA
zzLxD`4QvO<iJ^g5%40{4f8Z0_ALt$1ALt(2A1JNu512gLA1JT&2bE7RVsLTZ?gw=N
zPxGWGTAxrlaB&|;T~HbhZgK*K82l{^_JXA{vUSEIaZCmFCKUz5!YGM_Q4$NI@)ibb
z3)^w#;AYVcXYdk-kLJt4&7`4tXpB?M)<RUd#?|r;FR*DkYoOfY`WHLbk#dk5I!daS
z!?uHj{1zp(=qRa$?Ks=Hj&Op|md4I?B&P|@w|1^0n=756FwjC)8pBs=VCOoLvxZhG
z$cBY&oNYdJ1g5Za9mz37o!;hFXBr!4n`51HTaEqg9MS5nU)6FF+sfo==ZMBRFkLp*
zKn1wcU)VW*C8Cu1+Ri!SZ|9uxw{y<eP8cFjJLin;j3McEwXt*j+Kw4AjjjLWbzW5l
z=!q#cBltj)g^n6v-GsJ~;|aw0+QR4q3!@JVmSK|nOh_-oq`@?x26K2e7^T+V$~9rR
zWXR|JP$Id!M at -$~<{dG<Rqt*B<68*`NjfA)qSz6m%yI#mHSm-LHzRBiqtp_ngBYcj
zTdTmL)r>ts49;>Hl328wb_4z{Y9KEh5;KjwPzlU5^2jVOOUFA6*mmZyjeT&1kzQkY
zH&|XH#C13h8BzluyzqwBmHd5hL6iCLexy at ++%Bfu0_SIt6EITw at GJ+h)J9|W0WTbb
z&f(L-QX9B3Nk>WL#Uo&H#-&iO;2&UM`vV-{pH!dF9O0Cs{sTNb<VibxLlYr!kcsh$
zm}Fupl={H(_ewQn1<srFNF}pah1Ck&U=$ZoteD1=f+!&dh^1k1c7&MS&a0-xY(PF8
zK#W>o3ZgKZiSJdB&Jr=y1Tm^0k<5Xqwi1(=n7kMzo*2Az&1B7u;;N32xB)oFrBbm|
zc#o7{fCJ972<H4$9 at _z3=BGTmLd+U4z7Mg~K&O{{RE?=%^27quu+-#Cj8dCc5e4I!
zYS3jU<WUA<)<Cxe_k&D1X%+;t4<rhJ1TrC}$nX^hU<#|K8!`F-jj!m))uiVf(@KwA
zt at P*vD?MssrAKY7^r(%M9(+xDu8&Q6&M-}S4(uj9$8||BHQ>N*eF4ta7vOAt0nQc&
zaJJIh)tE|R($m<O^i&cqGNt;oHuyvJGR+O{%c~#28Iji&24~wBU~T&Xysa<5TfUH5
z(BR0UAZTwfI6THf%wFXAYGU at Hp|ckarpy~m=`rakJ%%pQqw at r3L#Gil>BWfY^fY2t
z8auvRAzSGUU#S6yZFw;TCFMNOn<kbRC9>!!kwr&|<ee0zL5Vb$6)dL9{8m=5Iz7U_
z+oeH?tn|_gI=ziALR(M=Mf>&3U7{Bf3_+JiX6pzOptKo}5m*u+Gh!_PD*S-51rmQi
zF6`l{650zbF%p45rN at zUN}fM$2QX at EVdih>s4?uXq!C at ybgtn{8tRvYQ5y at RmKHX=
z&<BXnZ^w;mI4c#oX%5sd3q#H=49*hiANf$jRLy|F8D>>V$~Bxt2WN{8zN$@;9(<)u
znGgAjhTx?)@HOeFU-H5Y(#Rmh00UA3Dwy?!a8_-^;oPFzapqvIv>7>pv(kQGJI>TC
z(>K&Dd4U6*WiS^j4Gg{}ANrq6J{%SeU)hxvJBajld^sjcdZ_^?-R28wm*H&FE<`-C
zv<n!Vl|})Bv(h?XaJDdNY+-P=(u1=_2Va9Z<+d<tY|?YeZPCG3Ui3msP<JKxvDARt
zYyASw@(WYh^)kn9rJ10Ev+jL~H>K$ka7sM_hMVV9U))^~Ig+4LGNt4X;Ei)NlrMS8
z*7gNh+r9vA>kII<z5s8`R5)B>HH2#8bMRn2%FEQ7Q9+2oUY^w?M$K*CfW7*Lzo6z4
zM}!#ctuNTy%$Icbw#gOTabZ&EvTMtz8c4%&-lV4=%A^+`x=GJ^oAlr-FP-sQwm3Zq
zQU}fetY5%cURh!)a5i+#0OSkMIRn7|N+~!4FzGo1&|?yQW}Ve2hCkTbN=M7na;Z at a
zba2MOPL&f|Tx==m>}{Q%mdm8)ECEOUB)#nI@>Y%1fp$z;bZ8z}8~G4FI**8>+~SMk
zl%5!zwWW}^Z!xV=ba0l(+>nM=OwDM3S!bok60}Pm$YmPvRU-f}_~HVw<YQ;WWGbyS
zRHo9}Hpo<3@{}6Tj>!pj<VrgxZ^ICSvypsRlyEE|ot$OF0A at eazLAc$w&;{ELr0CZ
z%_vVRW=bTE21Yu;x3VN*JRf4#*wE3-MiOYnEIM17>7 at p=W7aS1Ws?(XCi&y>PzptP
z?@|?=igoMPCD7Fsple9??h17e>C-LHwQILtorVk!>(npIZ8(4LGN{LYL&V?ehtPo`
zJwp0*>Jt_+yjvh53Bjpa(W!DJCx`#<{$Kx|{p$@2>e at G?U)l0*9v*I<WxMt3(I+IV
zr+c4}&I3CQ4Cxl;KB!CouHD_chxQxfuA8#kz>w}`JBRk^>LzXXFPaA)G#ozia^S!C
zzyJPUTq^KzfYS(qhHD1io(|lM_waCVDfch({onHQ;IKiR2D-R73=9n&^dDvTuYUiJ
zzWsmkZ$lTqxgCBZs!MX(_=`z<!b9T5WS>%UwoksM3riNcQq?JauG+=(HLtj;UdXx?
zWmnCq8r*GO&)UIx|BU+-IK0B<=LvzQ9)JEe<MV633$FtzKd-dy>w&Fblb)AIoI7vY
z;-9n6o6@*RzB<7#O9pmZK5gFQ@=bD|sdKYr#iz?XOS(Q?d1v0l_l+x^X^?uoORkm2
znvR>&*rRm);xFn}n0jIDoTgJQthh4BZAs1NP4bow&U0ye(;03nr)~&nwmf)!k#=>W
z8WlgVxO9_T8|(bJzQUi&7Y<6 at u6Bz?WjEFvyxy%{z3UAFH#W%hqIIuY)7N`=uULC^
z+SXOCU#96*zwC<|2VPz*Sm~$W0}J}CXg=u2yEV4F9MY>=-wg$Jugg3r?cLhpjcOiP
zRH0Fi0~6n_`MN&C-3IMmrWih};L3himkhsj{A0SmSJ&K-C$Pq$4O#wP6SJXEU{Hg`
zqw`g949Ob!Q-fH~k7WXDjtxndX-y}u#WgO~%J<X7*bE<w9IC!5B;)io1H6`&xKw at k
zg7zzFdo5_crj*zGwU-Ai4Dt-geSYoro|(_D8RoUD{kqh<X63%zxpmdxki3V2&c3WS
zeCoZm;XPAtS>5cT+m^MTduH0Q=JQL(#97xa55H9<e at Kpz)fa_i=(}d-%N&XGDy{0f
zYe}Vb1wN)8S-WCLo;Pa)cSRjuIr5|Tn{|$ZW at WzIDRIJ#ON|nLIlL<FW!efgVqT`o
z;hEvb{1wx>`sG^p%xm#4u>*!*h|cSuqsOx{i|79~V914|J^I(baALoImgi4LEMAtO
ze~{ZB<M*e_^R#o@#li6lM&w?0zWDx}%Z{%}Xj^IK#pmVQ{^I^1!+z%uf8+ at pwlzAc
z|4)bKxj(Km!oNj{N2S}&-!x$G)}!7DPKW1gd(^t^qSyV~9bUNY;qbQ0^2hJKGb{gq
zF8z+x+n={X%=HhM?ksK-KYc`wy-yY;<nDK3 at B6-Y7KT3ex%12I0TFMb!{e8X$P at nL
z_x(A-pGACWe|YBa@!w1J9`ZEpm!MH4*Ib?cdsvoHzZQD9^jpc#k7D-uetvlPo8RZh
zu3u`uz34d9CCj6AUqVJrSoZY!&~jNGt_YYm at k6?Tr&oO$Hfl_VCs9MaW<J~zFeBze
zs->sgKl~Ul+4aMwfbr|zdo8`-Ikfwk;lB;_IdU>=sN2QI3EwKXKNx>-Ql1al+n+i6
zB~$wgq3_##^Eq<-$DzfyJqjP at eI%y$(6UD^7K)#EaK`lyY3_Y_yz1hjFRSLge%5tZ
zhR~-o6LKWYtNgg{!6lWS7x<QX^y!Mj^29w0JQ#K4(a3M!anBt`%*yhvQ__T)@r{yx
zIr2DeuIIP-Hrw(Pdi;1q)mkm9H?7;YYW6vG8VBdA{o~7Ghq}(1Hm7#^;M}K6-z at g~
zlUbg{);*bXXHL!cbt;{9PrZ71&N;^#SD#YHqm*0mCw2XUFZ?p6ah(gZuMFI}*!6jE
z-cmp2IW at j<eYZJN*Bop*D|q$Fwxy$L7vJBuba1W>rT<)g;OeY}1IM>5)uMLU4P^(f
z-rBb8^;&@&+%r9C9a3`o>K$IQ*Iuc+b?)n at X+qq}KB=+4cIz|e2Tt9U_^#=|O?OIc
zc{(JdXx}w=D_<!6X3f|;g~Lmn4PUbPb;<Bx*O!aS+ at Cw=?fkE+r`~aI_cX<@a>Ym0
zI#4_OW#KGmi(Y9`aDMyuH#Q^;PmWvW{<7%ErvqNPHaIo+N{2M3s^l%!;B at T!X#qc8
zJl!#Gk!sz3%@~!feB&CYKfM3>U`hAWJ at Xdr(rxjysPyF<wg06>*Ew~6Y0+&;-T5Kq
z+jT!xcR}&ro_a4R8rE&;xv1;i#*~@&)6SN^oNC;vMChr3!<yVnJhZIMu&*t=<G!_d
z-2Bv;CQqBWeh43Z<#6kJbG>&qzZaF|$?<tZ+tq39p1<p=K67Sv{jJaJE$?@XD6;HK
zkDc}QoPEBt+TmI5-PZk8=jHx3pH8(;sPpOc^_?9up9=CXHt}hG{~|S?wn?aeII7T-
zU!9|J)HzdnW3N~F7G7$)uyt(D*7erC^d8&&YTbpce(Tx%{Mwt|HP39j?&-De*_AsB
zYkufe>HN0TyO!s^a;$arsl7bPZY}=t+~~pm0)sDJo71|^#miTQZ(X|XdGEYsH|2RT
zzIA=~D^qtLY<?+t*UI)Aqe6-wYWrjFTw6B&x$D5SOACjOZ at -~MNZBo02JhP1e#`Zq
zfm^m^`q;Yf`surN_*`CltM0bg*MFz!yS41c8i#7Pd3ApH)IC?){O!|s%iiAk`)+!(
z>(G!(6+hNL6kPGu-CMOQz78C|?cTa}A4k2}nB~RT#92dP-`=WL=vvKP>nd$L^wHzZ
zmXW)*RoeRfWBQSezrJ=Tuzu{vQX^Y0yWHb%{{o8x9%n6(=pJ{pT!EyxfTET2dseMk
z;zOgvgNK*9zY4BUA at 9t~J1W$VaXp)3(8|M`x4kH~Wb?LHIhSmVo%46>;0YJ5wyMyk
zL-5J4L0d1xCL|tkt93HN;L95Z=YE~N-Nv&Yr+3}e_I}-Gp&{@6uZIsBzx8Uf#I0Me
zeI7J@>z|+hcKqJ(`pe;Wm**cmchu at dgQxcUbLQVUzBjEL+xI}b%GV1djvuw5;^3&a
z*8&f;IC5oV;_kQC9fvo}^8H>!ihpM?A6+@{+uZlQ!=Lzmb*@+Y{;TlH8xq=&zSL!1
zNZOdc$Iad`dBcMJ<BOM>zh;luFW0WL8h*B8-m-JM?J4uipF3L(Ir}c=+78e9&-_QP
zDtkTdSJ%BycO3lX;`=r!e(X7Z^Y&ajRyIF3rA_*Zu@`p!wq^DFonf1IE$RLIW<v9m
zXKtk)vSNO4-iX=l`aIq8bGy#D-dw3XWJYX^+i!J->~FTGbn`zqwi>*tllL2^->+=l
z*}D1dS1sH9erxNF;mz;oyRrM)rF^Zr^zK}5ZkI(j2M;-Px8wOO<L~zLZ590c&3-$Y
z57~6L`<6GKx-Rp%cI{THh}Rv%Z!8%SHF($WTjmbl6Y*F3-!C4x@%`GL1-GYtQ}}iF
zyIUp(_L<qTLBz+aNyBe;xpq6TWrv76i8ph6TK)Il6h4>I+-&k`S74Wmx59jGOj!J?
z^3 at 49`{(aewC}vYQ1=^CKh2rG$HV8^$(utLb<FXmTf~VHH at imsx%NiWMcrfjPB_1-
zmCx<=zxn%Ie|B?3#NFICs<!DmweRGzySsgwP<F5Ho3atN at 9oI7=SuS>t>fCY=^J-*
zVTZfdcYiuOvSXoJ721U6 at 3X4!&Y69F>$_viryV0ZFT2%a&zlxq_S}BH=lJ36?tRz2
z*?D(Q%%`M{7hCL!^Bp~-!|hQOJEk4|+nZSh_Jsa5sle{gHx<7o_2^sqhDXJIu8SA9
zYkT)jV8Fu-0lU||+qLvUY($!iFBSxRnE5?$YLCDBEWH~x^nJVci<h1aizs;Ubwa?A
zJn=ubKb0XOoBOL12lqwAdwwrd`F8N|Qk7$ZzwRHkbXi=tgPS`%$TQsk$SL<v at 7o`B
ze>Y|6h&<oQZ+j9I(QVtKW^)I4Z+q)~aBYW&EfSlx|8dRQA$2y+o%3q#>P_GCZF~Or
zp)nm^XF4?7_fv^`R~ID=9(CycgY$>R-+$pdEcnRH(09#8ZMy$#%l9FnkNX~4vbVv7
z`$yyAD}Hy2dl4St8u!=dFNa1g3xD_Z(5A`{vLsf!cmDT?ETeA}dbc!b{pa^F2lsw{
zcQ|R^=MS#mYRAPnj#!@M{km@<qfajT`}v6NS>COvbZ+9;bcJ57`ZjFz(GGQ6y)Itp
zO_vdyXMT8B>8NYs*`z5A-k(m|*x=oUQg32M9Jm<2pwihMUwc=Id7c=sEN<J^lpTJ(
z^SVffzk)|>aR1=jc;(ZiwMU+Yeyw=;Sc}Bcqp!F48gcmK^~A49V at AJtJ>pPktr at pp
zEc&);-iY5q-)%|SG5XQ6#2$yw?_GCw<lBnhG9+IKPjtKgCSt_4(NDjA>wP~i?YHHH
z-XBkzUg+Jbq%G at 4eElAgd~{~QfXdl&I%m(9yI{7-wQ_AJdft86!CLuW7WwY}s(kg6
z^LnqHH!q>Z_ur~tJN2o}#rQ(GZZ>%4|7hB&y!(rUKS`+F``)QM39G8)oL04w-<0Z?
zOXfb29N)V5sK)h^T6AALxOAn8b&@U*OLlAYD$hIr<kcNs&P~|w`r*T)Z?OmGmT%<a
zHYvlZwrz9fshO}oYgF|U`@GyL9(w)l<eB-8-miCVmh at _HQvF7McWqyGWAe&1HR^24
z+oIUn7E3q(Ub<KD54Re*zB>75<=3O at U7ebE*=6hW3722oZ+~Qfmw&T<i4{NJE3-BD
z+4Y!AM?#BztLBwld;d>&e(?S2Y?F8A2b{f_xMxb6(Yf#E-qPTgIiur#TGTWDn- at o_
z>`Fe{;zj(r9{U~-`s?wwJmE=qD>{5B`e^HmAHr*{d*S@~k3$1G44V9PRqueTSx#2F
zT=qcCnM3^wPG0)1=f^2AE5kodKKyRz$EmK5PQNJR*tuiIDeE4+99m-O^yi)XXPmsk
zqs)YuNk8OW^(bLz;r7#_IuDvQd54GF$(V7!{@@<-qerO{F`GP!uRXcz*Mgp%yPunK
z^Ihw6llObLKZ|+2!zK60l`WlvJBO5+>f3qP!Mvd-ZojL)dD8qHrSDDu^IiMRlXt%x
zH6m-FlLuNB%HO$5pD8mthxM7f<=uc0*_WN{v7_vsnCCl+9-idhrN>`W?(T5?bh5<`
z_ro*3CqMi;(k1iB6 at Je5i>)d;!0YhzxJO^V6rOS7o!`5N=fMqs&N1iGxZ(lXCReXh
zZ)5dW)fZO3RsBHq#Of1bN2iQTu9!V<^4kIq(aB{e*Bw24!nw(1CU0KX#XbJM+w8Kl
z17{Z<P at _nXA}xx97imx=?*5^o|IYaEe;)Zu+?-RN8@&49x-E6mT#kE@$rrPy&M`jw
z_#8iF|0&0b>?e}n-et9-JGeG_6!SXSp>*{8i~r}<^Z(Z+{-5{%{HI($(zbN^{NMBc
zAg;XUKmMQp3c>ux|MQRk=O6#iKmMP8{6GKrfBy0R{Nw-m$N%$>|K}h7&p-a3fBZlH
z_<#QK|NK|1!2h4+ at jvhXQRjc~{lBchf9(J9^6~L1_urlW!L4bpfBZlHvSI%>BnYUC
z9&{=;Xjp$7lxsS0aJQyF&H9CO3GLdAXXW~J>Wd$$;{;vv!A<1YS5+MQl2dlw!ny=@
z8aS}iu#&DpVO_fQ8{~>Jqj-=Msm-5daX7P#Yqd`OYjq3h(bGy$qfe(EVMvVwqpme@
ztgLF)(4qL#wM|((1mRNFtGuTRp3L-dLBJsIcCKYyYY*zwC!|Xd4yJWOvT|iyn+)pK
zw>cmV#FlZb7ZMg0(yvF0kgkJzf`$;>JPkOwe;_g<7!>G*V|>NBgzM5erROnB-mv6Z
zQ%}A(&SQi)&=0`#hrGCG-96*!QXigv<<U|Ep9kPsT0Wr0L#4Q{Q^tiSN^wLVfJZ9@
z at O&drwDK6K90BGTQsKn|q&VA;pOCXqoYKqTQ6JKfw{YVHW&v_$l>B*MR8f$(0?1nd
z<gEbmR=|{6Zd%FbJfX?!YCIMyfM-J0>15=r0CE<9)0fCw9!Zs3r_f*?;lw#mIa`a&
z at tg)IJZ&o{gORy9c8tss^0kZ$4}MA at R-XEl=M#BwUGB*7yr&nhn(@fGv=+~KN?1n;
zmcXXvNp;-4!$D9vr_Ki-ozlzAP>I#g%++(#_)sWPa`c;oMvxaekU8EC0)?5&3!W&p
zl%E&9Jk-;dD7PZ9+~lGz5~H?^fFOnA at pD|v1BK<5$iK*1H<R2MVdL<^h>C!Z%<;Y%
zDAJW^aGo at m(7Cvk$nF6N5s-j*`WJ^+kt?sl;cT<@E6dI^#u5t*clL<D0Cxz9$bt7F
z<PmfID|jF=*rL_+$GkU4HoQ-V>YB`XkX#jlmrdk=uzDnbm(e_UfLz|Sl%QX#5Ij8Y
z?T5z2g*tW=5f6 at gv+E_;m->~5#?>7{xhBS=)bfBit~e4=HWdv#bo)WyQ3w%Pgk}XF
zr6N|N;I(CD$`kl_v<5uYZD^3C?BD>1j78VvkuK>39O-6Sgu|dFBM0?TOL=M)?&^R@
zCB~INLf&yeG-zhU+Di!l(aIW1U0DRY at F1t;b$NK`-ABE^%!byS+0v?%xNL5yIMHsX
z5+?<3N0J|vTbD;VkPqV8u41a#A(TpW4}~|R<cV at IRdNSKT25kgX~fo~T%q&jGO2Wt
zTqTuGpvFpD$-NUPvD`XQ1(vW}coP+D<T{t!HK*Q6Z^?BNv0M_4%Y4GtXOnu!WpIVS
zMSp^3_L8f^R9=PT3M$i~jH>M^)pEN;G=eHDEiX4qRNho#{WTh0)2IhhMBahIS#8Q2
z?{I5KRW^{_!~35e5)gn!%tOL3DTGE7E8roa02B>ugoZ*&5EDfeM!ZuX_eaF`$?Xxb
zd2)9|BQ%;usEtNoBX&=2jA#Tl8lg5Cfe8Z3mT{5C%Kh2 at a!EuCow^@Flc#Qn5ILon
z+adaQaM1{DCcU6;g{W`XGc<;xY#O1-6q4H@@~hnW6wVTngm)a|-E)NbCZd$l#)<A}
zL}gGk_KQNOi6E4acRv)BYK%L>_?q`V#4?tbd!Ow6@^b4_A#za&HPHxM#Nx?K4~@V@
zBk)j&>Mw>*#dxDFl?ZQ|MiWT0C^tI<p at bZmHI;Qyzq7q4zjCKT)4)Xxqo}V&v?0Pp
zSsUifn;c>o<sOHa-15A|p=sbD0;VoQOMCGanx<K;#Zg)dqTJk2ZOD5YO8PiZt2U%1
z)il<G*Ne(a<Ph2b_29aqk&B{{i_kb+%K$F7G*nqd at kI{h4kyPgd1+lqGskSzCo*Vr
zWI`Kq+}2cbAyqxHF8xT&S2Vd-rf8O?$el7pqYU#7wA{~DrIFa5ibft%8VTN at Xsn6Q
zByfY!ID%^$c*xWPB^0%np5py6q2g^~luOajD at qHg^h%aEkZT&a2u*H#3r(V}X&Sg_
z8u~=jz(do(L({;+pLe1?Ig<PGHnn;ho^uPQ^m4mfMtZs1E%PFI8D7SGb;p~dzufRf
zh!P at jQF%*LB1HoiO(PdYLrriolwY7GiY9{_^;_NZ_JDpPh%3M4*vWxhERfvxmNr5O
zIpS(6rI;-zFTraXdtTAN1;Ydxiqg}d$aQb^GnHOUm8U2 at 70y%QKhRWpat1C6=gBF!
zPRFj7bX0HzS4TR|xn&k3VbFwzB68lXsT3xa5;<y`6q{Wj at d`K?W5i*xg@$6w0PV@~
zS<&RWmZXzQS)5o(U^AI3$xHGw*_3DGHI4bHbjVN9WXeqgixSFpQfVf+OiHQ>Wu|B>
zwW6Was=cVpn#L|w>A*$P*rh at fWtML_ifbC$TFrUoMz&1iJSAqCbc)=x;uO!58Z5IR
z6j8#saHj6b(OakxDK-vi)K{6gO4Kn~5O`WziYHFA_IX-b>dC=bG!kJtksoc4iZrGW
ziYV5|lR7FRpu`vxyCk=>#U{wzY{>;Bq?Rgypq7elQTMVbLUJox=0z&17-d`Hh)F(P
zyu*q2G)Y4ftC at m?5EF&<qH=1)Hs;dFi-8wJ4JCA#sFxR~et3fxzp9xZC*cw`Otb-O
zJGs-%j*%PPBFJ8HPg8hvo+&l(;`A5uY8H~}>CgF$7u8diIua&Ksx3jnM53`!#;=rF
z2 at obSi+~y|57}{kD%TJtG?+*rB3s~BN~MGa6B>$0?Nn3_$s$jP*TB4)5497a<%uYj
z3Xuy%$BWu2uhiqNKM*I<n5k(Y!A#X4YODy3g#XeAIjatma9=drxWj9uL(cj-qnElE
z4wK|1b9i38mB3zJ-s~4 at r@S!lC9#y`o}k3^LXcj5L!CurVOEACFxEB at J;b+Qx686y
z;(5^~OEfPm93&~qj=Q`}O2uWAA42xGB2r*Ea7!33krlKhhhZfdoPewDrsk?n<^)`|
zFRx6h_T`01MUz#tw7D#ssl#|C!ldIctkY3+RXX7z>DUj7Mv>w`iW{$>Nm;4DdMbvC
zjfSeOce4g+eZrY7u7*PRI6uSt5 at 1N(^pbns9A70em(m|g!zBiRQV^x#6kHjHMZ#qq
zmbRDRNs7jfS2XZY!XRsDS{5`Sm(!{dso}Vi&;Fo_>kj3bT6HMa0w^RU$6FTFEF>PN
z;?MNscvH(o6TKx;AR7pme{}<R%UYUUDDe`o1ebh}xio+TOOPIvPzh3CZ)&-okRein
zZdF7vFj;a4mX^kSe$Y4t!p(co*dw?hZ_(HzLZgn0^uY6^tBt$T77aY4DR9e|{m)9t
zTAIy=+qo8vJQNK)^f-t(H)vj|G<964-s-wFzg8nKOGq6T>G4)0u+UHwO=C at HXS}K7
zVrLM~9W+`JZ at FA8_2d<5nNoRk{8islpXK!|Zy8}}AH1o<(&<j=@j at DYr;K`whf6v`
zCee~3C(){vsKcuERAE(9334qhB7QEZJtxsR9a~svYTRYZQF}Fw{YVRj>Yy|n{Jg2V
z^0<>Xbr<h$QW(9dz4(d0qxLd2L*XG|hz&&|*k~yFD|L~Pm#X7U{gq)28G|DyV%{?F
zO54f6%Xx*jET1X<-ZF{iLJN1o!I>`yqj;v3R5%2t<1ncQLT^rH1$$GCG(x!*XBj3r
z(f78zQr=V{vDWftp|r6)S*Q_vQbG at jTZ(fyd9Bc!z2ZYv(!Yvipsa{fL^(xSeN?C-
za07Fzgg*33$up`xGGa0=l)O{uL+M1&E0jhd)I=k2(Fj~b2YkdWL$?j0Ls&F$!O#qv
zOlH}qK9(l=$O6_M=FEqqrE-$_P?Zb>7X{(<q&g{<5=~PIBtxbYSJto;D8#PfM{+fv
z+T<&t6=V^seg-FR%B8$Xs1f*R1SX=BcwF5=s0{`$e!<#EJIWlFGYff)5ZBQujfkd%
zZzwTvrlAES%m7DEnTjF63x4%t`-pp4{R%E#60Cw6C}Tce*)kOs2Q#CF;rcaui>*if
z15+aKP(4lkQ=y`$f2xtFf1<}e)IY7!J`zlYlI$ZP2n10BRk#Ccphm0-Eg<4x0f|Rh
z7O at gwLb<QlZ?cG0G;mQeB%>z-PT&<W$^lC)+9!1v at 0A1v67A!d;6v at xvk7@^P;sXI
z!A;6Or2+y;TJSMcG#TRI at pm>E9rr#QKoL8S2$g~E3q)=3k~xXs<SP;<p;1I*#DT>b
zoe!tT65~yt7{tSPq=AWSJIDir2u>nB%^?)4Jp3-sXpw7bKW3DqfeVImBJ_-sC((W3
zrvezUu+(#Lr^yR~8ll)4AwPtgqr)EgX at vZQuP^mnA<MxjPXHp4I!owFtrcgSFULBe
z%0qs#zaa1UX=HJs4k|7(JEc_mQo&R%GFov448vq-GFmB`#f at VW;_NaV_+rjRggz at T
z`Eg{zdO=Dk+Qi9>FSSY4MRsW at G4lMLyrLzK?`g!m)vu_%Levp&Z}fybM#u6|>i92Z
zPX0xU%D<?o{EM>6zsODgMPB$9ZALK at 3d$@0qO|g_&XK~!zbRVsug;NDC4cK2DN*vb
z&X3bE`CI45sTlvJ6v at 9TKW?Mw94SHai_VeKBY*20Icmt?I!8(p{+7q$<X at GeA7@+g
zx603tQ!e>i<>$xgmi(>qgBP76giv&j92 at vIrA+?SIa0plZ=ECOR`R#bk)wh9t at Go$
ziGOn(kbiZ490TNUl^^~1I!Df=<QJVI&A$AtbEHJ_Z_1<mt8=8~<KMJW{Fj<80Z=6B
zs6uRck!y(#Dw-hCJ%uK*Jq6*7E4HA_fh4l0Xr{#V^yk>G-WkVc1tHk_P{CCgPYx6Q
zY&?Gor-bbkTO}boMRf62vdNlLR9U6_i<gM2VLYE~{fdgqWL4fKmx+NqO|JcB{%lg2
zR>{lcGF?^gl5=4!&yuSO$jB-?cZelK(+NG3N68UDmk4ZhHfUjg&VeLesH|}%La3}=
zB|fOkE+sms+M2U`L;my)DR$I<)RCH{;)2owOH@!*MC!l#n)(lQ#jn(VOj3y0?i}Q?
z*w(s^BH>qgiB at K=>I-RhmX-b at iH#|*lgms}9w%4%iJhPg^5<Bpa+a}_vjUWmqp9i^
z at gm7vpE8<qY*){cb4>GBySC&fW2wp!HBtOHmP#OFJkm at WtebkKoI?_xLFTWl6UR~v
zdqik2RVR+65Gc}E6IxEZYRjIG*@e7jj>ptNrDaoPmC;mML`GBA1#g?0966WOUq~y-
zuk2;ciTq^+%DJ;Yhfib=B<oM1(Z&g9L?Sb}(9TH+NO>S#$%-sLbsKX06xWfw5-0Op
zc_L0d`$?-OW1+kir(VWY3sCkvEuZ>U=FZHK{z=UcP}&%+gAH0#Uor<oDfQMX7k^SD
zP+3m4I3OEZLrNyysn|EdQ#hb=@&Skz5zc_%r}nmi!O)LWee461A$uB-!o$S_peZpR
zJ62P{P?Qx^GNeTSl)gnj0<v?d3V>iIvk^dWlVu#HEbLv*%(!yVkVWPkRyMf-!4Li@
z$(pK%^|r#`2q}|K$&rQxslicf1t2*3al#A;j+!d7Sy}^l+Q3nk?0{@g&iv?qv&u{z
zL^x)l+Umy{Enaw%jH!p1V5oNHwAOI3F{Co;!ciMxqM4sKh{QetgQNb=T3v$5`q3}}
zf}>a_KwAgOHjPfe{!=BQR!Yb;t_$!Pmw|w&A70HCNN&nhfvy@<I)K`V7p<g4ML#J&
zNCJ+g{i&kZE*3I7k+U0A0xUfcw^p!JQQAhdl<R1uV4Es2r=F at f!{ub}h9yA))X*dV
zKUw^N3U&}q=~(d`aSM#%A*xG186YdEA%&ESWl+Ho(?)^pL at GR}>_l2NKpR8OSPT^m
zwWf#*NhuQtP^{_rndmU*_JC|sC6?4;bqb*zC&74dSrQm-EHNj-sF0LMd`Wn9P7;A5
zUKtjM7KQGUjDNsV#ZVS^k`x4*!xYl~kZHpRB5PU<@?nD%8V+_;a!{qAQE@<>8~Diz
z4oeKMlZ7oH+EXA(Eyp#K$w8cEN)UTf-fHugu9p)VGQNOHe$x8t%!c#{rVHRF4JM~H
zR6D~bMnzyV%42NejbJ2bP`O+MMA at +XBb23>7$kL+Kn at VdxdAb?NWiolX;@-ee2K)U
zvje1qN`9*F;{EWTCdf$vQC>h1I;kCnPRR=vVaQn&Le2$fs*DVpik8RN$jp>%QJ4|o
z8B{SQ9wJ*Dfj~vR_+Kdxg$v`4Dl)~(!&9ZFe4!KN0}&-Lv~nOo_ZkIBW+Z4&7Fy)e
zL$)2ns>z7}aU)S_kyZ?VM2*x3WhgG_0rHR|02rbKveeRY<tZ=XOTeib6i!nq8PeBi
zXW7eFhFgxPXnQEz`C4P;!86rl<<+3V#*yuN)i|<$uLPnz2MWzb1`1J9*_c;iDLeCc
zf|)tUE}hsF3C3uslzdG^O`sntF*ByxvC!fxl+i;XF)Aw~XLOX<$u7O2Qe;FJ%gcyB
z2LX-|vF()YmyLQ;R|&x=FAYcpMjttABAfN%jlhTKaSdfaknWb~i^_OO at I~D&91n!b
zGTTN3*|k?jQbI54(pfG?q_q^NJY60-t<2LzUDeLLXupbIE<=VyTvR%$0xoK*G^mIM
zM*}sysQr7<X9>0_0|`cCaFd>7iES#VcJW08%TopQFoIjv>>ye?RFh)I46*h_5(Ehr
zh!ma_ZHPK`jDs*B(n_TODf_gWzWUJ=1(}vY04j>Fp|~x?xd8VQCmHBUh&Nckmru#S
zANUZ?BcbC%FV2=g1wTmw2!1GvP|?Z;qTbkV0~Jds8-${$&twMxyY!L({M7j{*$nWd
z0^&1r<K!5S+ at wmfAAsF5p^}@Xk{cmPEPDc~m at 0lUMHN&wp|qQ93Sg&9sHmOh$2Aw8
zCLvYCT3Q~yU2XJz at ic%1Y5sIQIN<66alkcDT2qQiqo`X#)}RdF>FZ6Sh>c!VVwy#h
z9hhKmL6V?;x`k*JaTtMA+C)ud?->YwcwRsfP(WzWkruVXsR4nk9bNmNQdT&|0)m^a
zKJBEppZW~kylIYcn25FGE*Btcr`y<v_EQxTuOxsj9Vz~2 at h~H`)Q_xv*n6tw#Rcsp
z&K}rod?vyxj%U^K;(1n$C9Y>#C?LS9)r5HP0H1OA1C>>h{uh6rm~*&)P)xCQfGDI)
zT_F|X^OFe-Ao378Ao4I&6w^@AEQX3^kvTomqQo-Pz_)~EkzH><@)M=N+Q3Fdi4B$9
zR52~jKRzQjO|@}jCkT}#rZ-3BA&x;=LtuSOel)p&;Ag1hr>Wp)sH~l)f}f$1pQ3UM
zQ-^?kIff|#5eK5o{;~OP)dOpEnhlH>pdw!x?*NgnP*GyIN^Nx1#H2<&bZU-vnkq{u
zQDjVwY*g?wX~9p%QD0v!p=7iJloq0afZU=UoNf4uGg1arK<N)fmHv>lGBWD4Y#(m&
zu*CFJ=$zFyx%v?GFjV$GQzI?-X{xv?6qQRQLj^yzZuAv*C8jIXCzxbAIv84Xw4Ie6
zEG;_Qjw3ogwY8mEErH5%Tiy#mww_8Y!=q|b4vvOu>n#p=GB`q6*iIsV5DOcX{jI5N
zC($%{%ScP2xcW7fawL)u-9Qf9%0Rv-u~J)cz3OdFUkHbdPJSvi$2*f6{0tQ(HdM;3
z*h6FiDwnlD>=jKVKSiZpYby2HP?>{_PrjUU%I*p>U=Es!95j`BEmXF#8XReA#38Fw
z%izeF5~wV(7)LDk$eJb-#==GgKSN~;>9kg#ilbIhv3X?Dio4cOEqxHDt+H``G_Ep{
z^%d8xP*Gw(&Q1*-{M2zGkik&S6TxMT3K}vs-jGFdc^v{tz|xRWK`S+Q8nVc(P7RiZ
z%qHcW8hNl&I6?OnPp_s@<qZ`K#p}mn({G}SP3NSzHbIpxqyqWLrk at O6ew+@=Y!OuQ
z(^T at 4F;D!!s?8xxrepnNADz2_h?8yOCQcJLhlDKbqy>~CQc5qLNSQYIi7S%TW0BPi
zK?+Cx(-oxtsj&y<(?&(khDupfO(c_3m9w}jG!+%mX=QS%sG_SXt(+^>R2w&035rmP
zzgt;%KhafESz_ at fiq*$*52etl$xl(0BanhEFMMgLOm9 at na%5GOP9FDCw%L!<8$%U+
zkVckqRqTi#CpXIG_)-6qb-|$(iz<sXNvnM3)Do0f-o8>jiS-Xtvuxr**Hm%6N$-h!
zTZxdrh>)hTPkC+t3e1+*R7*?zMT9h!BBavFNFb9b at mPyb+E-lG1|qG7meZOgrnDHk
zNCoFx;<+|dODZr5GA)J7pObg^VFjXW2BMcBw?YL!@z%o5&_b!tWDL*{+{D3+1e6N;
z&H=&AK+2$|f}22=Sfo(V#XTllcH*^`?Nb;t<V;5b^P}V1!pNI1eF+_z!%RqJMYhBc
zil<ullq`G{RnA>#$TrdtSsTbU(p0vQhA1`0O7LK at ITV096;~YC9(bQtFd7OErAUuc
za<Sx+l2dd&aE6y@<RBG11cIeTDj$v>YBSNF(rY028VIHaqHhcYOAR at C7)aA2dz9kR
z_TiF-1sAWjYGgHfNRc>t_$k?=UdS6v_#g071ERk;F~s2d%c&5GECvto6LkUvKLaTX
zR3}g=3mQ at uGz2#TQ4j2RNm|qc+ctzUNMP~LBI7T%9ZvJhFO&v(;sJEFT{*58fhkjL
zMnII>K;&*9a at SCKJR~g#1Vd%1RSp~u3`9}okPpU0cDXze2Fz~u;424y;vA=&UNAC|
zoeq|pc3%DfMCA=+j-0=Mib5NR%nf9d=mcyM1*zuP{NiU+a`CPMvN^EY7c!dz$L|G$
zA0~4OgCTs2Dh)WoODW~%!V=9VZ7=7pXmD6=ney=u4D;+ at N-ZFpN<(lJtpF8F4K(5l
zDp-o}0kUIMw_Dy2P;DI}-VoL9VgOWiIpFA;%g~~VLpQh>GR!)VuRxZVLyMs!X9LlC
z8jAX>JVgC9WIbrVFmGW!G-O}V7=p^a(h&T_7=j9JVhjO=o614B2^1GNtp;|nQ4ifd
zRC|Feu{gnX67VxgSU*i={WN6lGz33ogpdVgP)rc!SLi2Yf`GwNnIK at 151Jrg%7>UB
zV9JM>AYd>B7FnV4>t?6&8wjofS#qksqKhZoK&!vR6K<$rX&_rw<QH-Y$O$thgW#v-
zS3Kcbe#I58<rh^%8YRD|I<d&Fc*C{)!uF$yq*KKiZXjEhRFqq}!*vq2t%jDkC?B|@
z(n2U{kh_Zpf(i0rxn-kG#6_+zngpnr+RaCuY!D4;sNiNGYNa7J+Eo9-eW at W!%qgRx
zTQY)Pwo%!7a`6_4*<Cyf04PF2M-ng_4_1p<ObFM{fZ(IK(}Wm^?lKSzl?Hooo?svt
z8VG(G(nttop=l-z9XZP!4OHZ8Agdz7hX>7s992L9TO-jn=u*hxFc}@>dZV(*a=+0)
zurLrT3<L|=^Y+u*5>jVc43hxd1hT|3VNeAUU#Wt$7}~1KZiO75 at RQvNafSohT8kTJ
zy2x@`Qx%!UK})~vY>Q>Xg;I-Z?P&YSYgsxirvZ>_>a6TsVA3j(osAMHY34*$&T$|O
z*vN@{K$}p}BIqK~2pEVm8;PL}Fl2OuMFt<-#UV?Y0Nh{`NSP8dE}Ix~A|ER&Fp;Au
zfarI*nE(iW$PJ&#)`rqQc at Im`z)S&fQUH7u02jGFiZ4+W4XO01pz4V$CGqm8l_4Xs
zE{81T=-|UWT=ufMe9LLJNr1FC-Nyt}4qav{1U8aT3W$U_{AI=jXtk2~;$et5bSr1P
zH?6%qe&i=mUhI at Rs8|HDD%@%SWK|SoRScw}Xet#&Ln?}f_)O0EVc4;K#u<xFz}1I9
z6j`oe89It=Aaz$|M~h at 28pc3dF*&EvR5d)acJit$Y$qF39&Pj!tEb*<<oenVjtgUu
z at XQ{2UgTBX0^s%)hDwmdIR=R0i?u|V<&?Re%*i=(3yYM>R8Y>ETXYdqO{Y4jiJ+V~
zw=gPXVbsWA8b1rOv-P(!gEAO=;nYQu at jfkzEDa}Ts0~ER3S{YJ&MZlM#lcK}K9-r_
z<IAH~fUK*AC<)f at q>9^7QDv)D<v?G9(l7BUDp?h;qHKNm`HKIL3s68Qg|OgYpvor4
z95tkGK=y=iLyBp+3xX13<Hbft^O+=&25*@n_;MPk?SMG`Fnn+n!B~mZs-T=c8OS_@
zs at zB#S_#BqWD-~fl?9zVx`rh<rH^|MfRsK3$xR^2>`#7%Zt;`l7cLd>Lz+u0qXpWS
zh|QBq$%;qSPZl()epqu*AiQ|q7MM)9#RN#DQjm)<q(;`*N&^?k1n1$<UgAQ=={2b<
z`W=rQv)^g7afVBFD&!A9Y6t0n=oSN!oq^zDAS!4em>7sgG7ycVp~#uaSL94X8#k_w
zOj;W^ah&V4h8s&Pj&n`7 at uL?_=OI%fl|Up|LmNMt5^1W9pE`Ra)fWedPGGB at I6ySj
z#!aR~iYikg4Z%%Xo+Xym6=ySm;HP>7r_XH=^)pnf%dq=vqk^AKU`>s1A`X3OsNm<r
z=|8A64I0|GQK3v)aKl9vNegZUnzm$#WnHCeB2E+y!B4j_9eLQ6WFDL_8E9)wPMAzu
z^3!R_Pea2GIoMiL9C?bHoIBFc#!U{_s~nUgPs_2aw{&V7KPrIcryP0Gy)t)FX{o at v
zn6lc^RPZxY)DCux73I`Pp40|J?F<#%3<Ng=Q9A=sI}JIZ638~@ddtwk&p;bLnhQg<
z at uQ1S{Qby*wc~0FkgZ7z2uNAs;sAyU{0yY5XezkL&La|ln}OhFAh;Q5YR3|blSQ?K
zI9XI<iIYX3-g;vj%hsD}LfLv#XBXvIzLG+mDKY{n2lEXT{0v0x476m$mopTdug$K=
z_=UBDaOMI_zC)2^PfllI?a6_P3L2`ZAgEUN`SQGxYI<Ke)F_pf%K)0U&9KOhoT0Mw
zI3e}-rDxSZaFb&Vpn{u$;ATD}H_lL4V(E4M0mxq0kj2!H#njMzi1VoEUu^jDGY%-&
z+7pNZ8OQ>u&ty8Fp)FtOT}`#im(nX#Ic093DH%#EI}V0!l}&aW4Aqtgt)-^YS{jIA
z%FekzMqAW_!!w{^0%#QzQ#)H)6ccyUB`sLUS`JHYna|QmfOWcTYiLY+;eo9XwljW`
zW5oJYpe(r5c`tSFR1Vf4FEA59!E%P?-@;&Lur&Z6jWq%gvm2-v#Ow!yQ4IOk$5R$&
z;&K9JZ_6Tq7`zn54QSNepF)MpQe1n=I$N$z$zBNcpTD3)@GU at Y@CU7^+Kb{JVrL)@
z#3&Qy2`Cf}C9_aa8qfdCbECF5GXKq^qqd*^$4`%9ZHA~t|0Pe4{;$UW8~&e&L5JDc
zzyJONf=%E;y91=l?)^_s+!6mL{@;J1Y5$j#3|;)!$n-;Vp4ijB?A^exbuTU*{7c>J
zI~~&JIF_$t6`vH2DLelh8I(0!s$;p+wYgFFuhLE{Q`YF3qu9Wk)m at gS2+GzpI#;&B
zLEBEQKlQY5vB2aF3)80`9yc=XJN`c+`E$ElVFwNzSodmilXVvww=0mXMmm3o^d-0T
zzMhoj&gV_f@{Egb(lCGQmawR;YtDYE<aB*%ip+yw$Nql5TDQ5^idL^!^y-%ydq-s%
zJlridJm-p!&C_kT_UUcZv*aPcwSB6Vt^D)-EI;^k?|FDj_}`xCcGsy|>sG+#j&piE
zoY|&Dk*fvYKCV}^V4(^xdyY%|q3W30 at gtsROK31Hq2If0Py3H_*cw&IV^HTxjgOA0
zP<3>z<Ug8>FZywA)9VipWI0yn&r>lIGbg{^wC&)eS}qyh?)@QsuC>nww%FJG&54=L
zo*}PxFZ<^BV0hW>Vf{Zo&T%ra(uE}7>S;dLJT)?5!+_%xF2uR|)acqhY}~X}Co?Wt
zxGkbxyU0^lrpHHI{B=N%wQe^f-uv%MQ}EBRCo>oLF!bE=(3qk-E2LR5&OhOCiTe58
zH}x%0B=qQq0u7!t7#fhgAVq_{K~FB!8u!P_Z|NVu?@=cIK*vTO1FNQ5SiSD87cJj<
zy2pp at -QDBM{?BVpe4A0Q;El02R<(QR+o0;*l78v(O at F^4pkU^oODsR#&@FQ8@>1)w
zo{4?n(zC+C^iNy$^qKeE<yw0W=Tv2bwpH1m>X6gZdi^_o%;%h{?*zwHW&3B{l`HeK
zJu3<{yf^t?<a at V|CFX at 6A9K0Gr4%KPjL#gDP_FdY_l^9 at RY;RIC~o=OhLuv|-!5g3
zwVW7Kq~*-J4L@~spZB=G^SqHa(mow}C&if*&XEIaHjXT}plWxQs@=0MUyyTdRJP);
zPY*8{>QcPnsQC`(pLp-gbmsQy*A4Fl4GG#m?_m0;cb~Y-yI&$^`M1pe>7O>4ldn_l
zq9NI451Nzy%+6xfZkAcFqR;F;4fh0}U;bCrt)Tsft`<6zrS|gTSB^J!o0qnZ<BD&S
zO6Tr0Klo|Yrcaxva4$Wxbhd2GiZ;tWZ*H@^<*KH1%7j->%jWwzcaarg*V}(@banf&
z^bJ;gaV-&0DWCV~UN2VfSnoMHcj~d}?v`zo6#PD}eUr6&Px*9zG4687UgutTtZLMD
zNr|KFoYzJ+TJ=-zoMRsy_a0C<aYO_E21RH8IdoZ2_KL2fCvSh8{Yb^^BPaKYcPcWs
z<dt8)g#37G{<CzYj%DmLetYeYQ&YSfwxj8-GD}*#X at 0Tck!=fBv|4|2{msocSNN~k
zzj^<bpKg`xJ7>@MPpkVa-&&{gS(p6IX=WC_eCfsm-(BUWd7twM2))s1XiWV66}L+M
z at cm@KW2eW3V_U{%jBOj+Io2t*S8RpY8nNAD8^wNI>$E?5v(Glq(DFw*Rq8k at X2iV_
z=i7EW-1lX-R-re$ZrD>~Q`Z7r%Whw~r~Pk*+stdXXYbzR&PU!%>c4Bi6Tjwunf>bf
zT`20^Yr|jFw~SrYXwiexS94!z736y>>!8QgySesrd^+ at M_P67fwoDs-eZ|+Yc`hG!
z*nf0MPnT$y$V?48q<P-u=n}t5`<z@;xj(Az=lgTm)CU#rWPjD>=>Ea8b|1(*I`ikl
zkr9=v?k~Ns$&CVSUB9Ki5b at w(o(o?e94vIf_vhDt+*%%VENJYR{0G-h89OSlR*lKu
zYNd#G>>AY9V{r?|fVA-e(fJ~GJG^%AiT*yf|ENL_yrT0)20KKh*y_-9dG$W2B8Tiq
z9i8Tq)B4_y+cTZn<~Sm4e3$ql4F_fOI+^N5MwcofmDj~&e15Ir*o0;^*MBbRzc2l(
z?<I4;-S6;d?9 at g*W_1sbJnWF==m&p?uoa^UMvsV0?T{fwod-#q92PmWcf65td+Lrq
zMh}U+o??i at U#V_5ZqL)PQ1qxsM~Ad2?oHT}C53Yuzm)NrcYSrc8g)FuZ*ha at gh0Oz
z4qq}p$Pl^B;qZjZ9w~lJvDsmWgX^gx*<JFv<XWD-O1>(dkr^ZFIxNrY*!PDQ$L?3F
z__5&2a;@HsyV7u0Onv-!)w!5gzSTQ(6i?HjaOEmL4&9omO73~Tr at c64-i0yaE{vJc
zH)W|esqFr%ej@%(ugK>POVhS=+ at 8B*f#|81E(ANcJ8n*U!(s646<hvo*@GH~9#6;`
z-6^uDL$^!G9+7h|oy;4#ZS3>yWrsQy3(LGN?dP#MFO1o<xT?>uW%oy?UgVMHLD%yA
z%jZ~sKg-q4DSI_f;k_wxVY4dd>-HR6dDnqL-RrpR+UeB#*HYI?4%yLsM{qiaABVW@
zUf{BOLHO=k;})K9`EzN*-+z7Gwv9uf@}>4xS-NRf-tL1Aot&O#dY7F6sqtTV=S=qh
zEga(H^(JS}Tcs}TYO*|JU6t7SW7c{MTaxnM{m)}qxmJs_=X&}}^~lUV?_VGD+FEVM
ztTR6?pEv!D|EyCU+v7uA=1+AQ-{nEy*y#If$Ly`=*kMtcr9PRy^~pE%rq`gXgVtqS
zTJhwY^owT4L>K%kZN&CMo5O1TK78PtUMY$`NHJ+_!COZQ_|6H++<p0)_PIAj&iL*!
zv&>cRo at p1{2r4n;*YT?^M|SLS>9-3VFW#vVm4Et}0}C9&9{PT8c;;Bfp=G*;DUXcK
z)iFnOZ-+%G_BixOeg0mWH+|C%EzmJ-bp6OchlmuPQv8+H&!K<Tr6cnvR!r6ZhX?7Z
z<oy_t at j=czl{3T-zLdFq0VmH;uX6`3-^l;hw2=;z+upA*wNC$C)g7ielvv&@ZQJlP
znL7TmA<S{>%oKTIBByqVKH>4;(GUFxWZa!<WUH9x%ko~>(Q!>%hj&$?3blTbvFxC<
zFH%1}+}6i)|B_`HK0i-!E^SMP?O8i|2Yhgj{@~Et;abYgjwQ$3KjgGM{R8jF^A2qs
z_N46dKPvBozArwD5REw5zmVh3ml;3A6*;xe^Hk at xEvIJR|F+Y-Q-5E~a;HFsixav;
z-|hOKU-|yNIsDG1xiIkf;-|-6gr<D^Yo3Z}@0?HdwtLEO&oRF*h`w9*L6Q9XPNi|%
zIc91f4NExY*&qFrTmRV^+CEA7Z{Us``);If`&TNrAu01bkDMCDl(RAvJ(#}6&>a1D
zdj3)SQh`UQb{%zUyS>q!EI#jx6k4>u;nK9_3Uy2oT{W`v`sA9A`)7ZU at s!h(@%bih
z8CN;Lv*fAq1NRqu->8t&&eNICmdO8P&iC+cjnCB#FL|olfAin6)VCjoZ*%<1;YRxH
zX*;?{SBm`Zkk%n{%7dBur+ZK?I$LD9H7-$oW(E74D*F4FZQVY6caBPPE__yOzH}EW
z{Ji*Dxn&s|p9o);?|k>jmScw>YZCZy!_xSs4Mw>}B|J|4qrkc6IeuT3`tzI72O2cW
zv3y<ea~G<=`1{_b<dL&ukCaTz^HXwxoZ~y+NnDWkK$54=oyRL456jqpcFoseDW0kB
zoE4KY;89YRngPkb?N0WOOFZ)YWpZ+vN|_p++nMHR+Z!8`YsOdJb7k<t18<iFd^i&N
z%lD}(M=x7BJpadw!J{w4CO3LED)d6){bd)wf8IN(QQY$Mt&+~ZxmJ4J@<U;xW0EEm
z`;hE5_3PJnw~_~qPWD^&t;O1e4yV16lRs4Xdq}nMkLLI8=@uOjnc$GYA$Q6$X$mHN
z|1)-UQiS7?+xcerIP^`i(;?|{Z2pG5&n=Cux@~X6-oI|xJaJFC55INHIj~czH1C_a
z{owmF_s4q)%euQ}TD5of^4sr9rs!U;=)7 at r8aeg)dEv2uUTKC6O4Dmb`9>M8X5am2
z(4N%!Zm;;-$miA6f>rnTbQzv1Q`Ih)>U!llU+u%?l)JK)t#P7f`qoo^S at HBm-j8Kk
zPhVQ?Vzs4va&M{TzB204*`9&@f6Ml!M#QD|yRy8gnYQDFUskMo at x$=6^H=3~QEYgj
zB{h0ns`(<vplt1Ggg4BZqwbD0x3 at c19FTLy$%4)ka}21^Z*0X`*&f~hBVYR3)yvl@
z(JaTfKLb}Uimd4pn3%87vA73wzhta5^T;1j at 4VZN-}bmo%fcxyXJ6n~E92y%wO5x4
zsefyh!^=9uXCE#$F=OH5r%TRh;B+cu`KU4_emvD{=ZrqZ7M;$#bCI)4&07A$mW`-h
zsd%2#x!wnEDB*jm at 09h`|Grwa==!NAV{<O7-{w-8Ta$;ZySb}!fm$D4q)W`Xq{_N0
ztp-(USGC3E=P!eIjqA52^itqQm%us=F2#P#k?4P@`j0QNe9SX^?zME)8)m3+v_$pv
z1q(OoS?0_5=2atB{C26 at i=r8`rb$0DebMndjuq>)uw0v#CClVkn(dm?>+$uD4O!9j
zhO2Y-d)ewc^%(czSk$p at 4;MBp-ZoFa^ixVsYTYPzfzH!@a4j*p-ic?O^Lw}q$rUkq
z<O$~ill<B`7k at T2^`ndfw(e`$w(!>6*C*#casE-}0egp52`KW*)VQgICNG<k=fsbX
zK6l<dwA#T;U0iApKV9UfT5hG<*O`4~P433OT&?}ety}Q-HDekt^{P6&&O(=Z^Sjsn
zu%`Hx(l3X-EWV-ot<r}IznPu6PR%tru7teI at iOe?oTg*S<@#f<Lzbuewg>r7f1GMY
zRM at vl$G_yCF}ichDvy>P$X9sk{FnKXo}5eb#;fF9_n~>i+MXGZGx?44yPoY9j5u*-
z^^~ZvaThL)>e0Ua*)t!V-QBx&8(7FabnECe7rTaDiLXARnzwU?yI(#WOucjL<JZnd
zt}H*CBeX}F&=2j}dyf0;_uFCTlkM{6p5gQ0ZJ&{6JCzzgyhC*FYgc34KRx)k>+!|W
z?c6_<3ol%1<n86%+Bqhy^PZLLn`xByZ|(OKb~~2+WTq#1R|XXObL-znoEqit<zJ at R
zy%KMumpwcX)N5#9p$rS}S9yQ;^|CC}gNF{f<}<5TwZ+Y5hQubeKlLneK(QGAN(DAP
z|8h4?;Jxb|=OyfW at Tc?4N8uH{et4IzQjNPwlj2r9-<#NI?9H=h_WIpB*5>PysL`Pf
zlXBGbn;F%j|BNf+YlQFa*(-2&rrz-{E5E$4tlW3Mrq3?kS$}<R#P;#`1J4f_;`nW3
zU|`o)wU!=Ca=quiEYFkBgU%UWRz7ljxpzp#O`(%c)N)%^{I9KFQo6?sI9J^H%DoCp
zny#r at FZ=aWVTam}Inm{phhDMOg3g}J^yYZVdlj$OE!?$Gz`?&BJ>C2Ijl-~MUAC_I
zdH1M;>mN4wkeGMIx_H-m2LrrTuW^p?`r&BjcWs75ecrwO-kfw_{g=dDzgTocu5u{~
z707ZgZ_w(1AATBBsC~wJ5e1wVjJRGkL;TLPN9T^7ndH<UDNW7%n`6>k&3$lVf!)XN
z#(!V$_;zx{%KH0!M`gV`@$2J>4O at IGcOmHRyH$Q!{*EsCZtnU#1;@rL?-P)DX0=1_
ziUp+p`{?a>pR0x9PDEU;_NC2;)S06H+?Vg^gAVcTCG%XLHKeD@%PNVhqE0!?89O9)
z$gTpnf-7EfxK%T5-RD(~yYjple=nu`&HM#cXStI0a^YJuKUJIf^7zM2gT_6((za=h
zw3mZklq^tV;;JqWYA&lD_p|#*r$aSkt_*lltU!a9Ri9s0uaIqIm35a&z3?i#di;xO
z6~<nu(&I%yg+fc#WO&*6qer{?QL8>Yh-k4Q!^hMIGLNjYH}?AF=Yw4DPCmRk;${1f
z^RKq-HLYdlQt=~mPg?BaI(tdnfJqN3<|`6(E#0I1sRm^Fc~Y7nx1TQ!iEJD>(qW>*
zy%c`wqd#q3oc2rh2j!!^BTGlVcG&BX^AG3T$67n&jZTr(F>BgcsV?PQ?q4N;q(hY!
zk?kEurWoij!69SKeZO2>oSb*F%dKBKb*k%lC*fZC4Vx0&J70C&o%Y-#|2<*HC$!DF
zp>xTxNt;fN3r_ld&4TdY-;b>spLOci at r@F%4^7(kLj#YR>(c~eI{Bgaqz8`setbLr
z>m%oYR9RwH^{?a>?HS+p;1AoPH@&NHFk9%!it+tMI21bi^vlR^*^+X0_ at hPq=Z at X_
zJ-D4J+vFFM$5+pqXR>RlVoP?pv|63xW&NGCN0*=VWOlYErOJ<~Tl}|EBX*A4T;$^1
zs9Nc7*16{raVltF&Rq|^62^_F?>5`%y<@`oJH@=`HT3pwoPYYtf(vWqZ?fm{y1+Me
zBQ8}M<ZxqU%!^vv1LnT)s*wM$GvyOAwhO)<Td!kqotKq{PdZ$!!4=Ps0pI7eUwgf0
zu0!=h8~v0u)fSfwnG2^0Xg23k)1Gd-vZburVnx)Y7N at dJNOydEqpF7+x}3}U%xUWQ
zT*rEKTC%;-jWT~_9g-pKxT00}#~+TL9lxRf?4PRinV7x6nE{=~4$KGZ)xQ0OcVGYZ
z-naWo)Q_&48gy)V>d{kg=Zk&fZ!b7==77)XJO|SlJ67!4{L?L*TMSry{N0bv+nx^1
z9}_(6>%lxb7c{CmYSXr$4&QgwcyV&s6Ys7y*DsBY>*RN*zUz!d{lB at zRQoyn)zHG#
zs{Xq7&iuW at b}el(e9z&h{oRl3a6M7*+vy>NhrPe=*3GY2SmP!ai=GdS4*8sQ-M56k
znT95NUf3A3E5z}huWxirg6Fzw-i6=3dYWUUXR$Hm+Mj>7>D$|@X?9LoAGP|@^y`B%
z?2gTP{cMom>9aIL5&QpWli_j0Bbhu#53KOK_>!m=skZGL&?)@#iQ#v)PpI24aeJf3
zPs8(1Yv)+Ea=(UQMTgFv-m#~1{s&9Hy)81Mo^y{6iE-8D^*=c6 at vMN+8>9A=n_PL=
z#IQFBU3y>nl(qZch0D|!xN+mKgfyXJ;@mUV_A6Gc)9CNhiq3S|6L;xbp($sR&O9pL
zCvwte at 0q7=#n&pGVWsP|TREIOn)WDIE!VprUilaNZSzx)vlR+%IhZbR@(9<Gk0Pq1
zKK!-G at y{dkovIjp$Z^N83QmzP`=p4 at 7`fkJYKmW1|C(lt<BfFDUNc at E@8_^5=1aON
z{tl0)y=j${^Ffj5Tn;5(_lnH#uy?`G1#4<1_x8B9DmZe{&&iWhCiGZQe|^O>HNIc2
zGB0hTlTCW2TsWosiUiDJ#xJeuz9Rb%>wGU2{9)ay7pW?oAF<Z!=f`Dcl+D!t+Oqz+
zj&FRC=7`fn|4ik!HQK%L>-?WrCpfqH^?I(*o$p7d3QpN`%#<?4Uk{xYmh$wIV$~~j
zFZi;h%az(Snl~%`q^eJ|9L+qtKCjSZ#OII<qi>yAw&&fxQ!@gRFAhqzHkZTg(|uD!
z`j2bpkagn2oDSQI?Mv+tHKG5$%++>fKXxQJ{r#jS3GtPqCnhxw`#tmh=}ksGe|O<w
zL`3qD<CESDTk3G7=f3Cu<Ku?Cz3 at 5Uxz~-;=Z1I(#|ON<zISfgXMOG_bw4wtM76v{
z{|x-PwAJ at RUzh*1x}Z;=x|QB%8U5<CYr`LBI68+H at aXiS+|>+Isx|5`BW!6t- at i)z
zF|yeG4E2_W<~q_i%(-;$V{eKStXK5##MT*h?QdA5my_rEz*kNmdN}OLk?-2<habjW
za_f~dUAwv8E^Rx#IzD0ei!uR)Dn%T7-u&T*^vh!=TuDgb{YQ=L{?k*w8ecH7s>iT=
z+1{6_{;|TP`=29={G8aockt!!{Tp7L8yDNDL6 at ufGdmqPm^;40N2dqj50)?A at iekQ
zbWq^~mD7J2=~wdHhuFxA(Lq6rDyRIG-Z^KH<PVXR$B$ik@!|4WX-B00Qp7oDnX|>C
zqaH3_{<(!i3w&4eON#!voO3=4 at _x|a!SY$2ZPSi$+!0!+-?5;=V>?EajO&;!X!zJ>
zleUcL?eMzO)`orls1aTMNv at o2IzDR{pW7!o^QrPBXG9LGjyY*cXGj0EC)|E*mNQ~|
z+HzkHL_Qk&YnPm^kE%!4o;9=K;*_2<9-Z9h at nCJoJf-SSOsKh|(AN~c6Wfk|l)GI1
zQvJraNzrfY?Uel{23^?a_|{=x(YNXL<$s&zOVBr$2cz~CdN47*T4dD2Zjmh>G>cqz
z^rFM4)MLLT97u6u+vDpgMo$S^`Xwym`#<hKjB`kyG`jk(qd(-Rbn?m8%$?iU=(MG4
zh10vsjA*cObf+E_oZ>U?TbK5Y^Xc6_X-)(s-N<>cfBsA7wyw{Uys@))^>X9N6peK_
zQrl_RvL-3E6=~wIt!sxFvl at RYo4(bt!)}Go-uzsmO8$@M5C7~E^W~059mlNm6OX^k
zy1Mvx|7JOdwM>8VXu3e(2?=u?k1WZuv|G^^H-BoHscWxJ8S~~jaWGHGqeFLOKO5ey
z{)gN(vVAR>dgX!^{<(@rP93&w_@{d5ul9L-q*L75Y2`wPME}|N{{kmK*uV5Tzq7r;
zvu|>`OZi>a=U;f6BHXc{2$<9H>?;;{Vn46n$DiBFTiH|J3j0EZJjcFSfgVHc9^t<_
z%%2a{9OE@*{I`s!0Q(Iu>EMY6dGEWzca306T0o4{6?}0oxYrl#Ne&u>29qZ!<RRdx
znN8yDs^Z|>TLpc?lWeT-2k6Yl*oFL|XV}*(D2{#4f`stMXyFMnGD{jBlZBqLvism=
z;o0z)A!c4`&s$3Y9bwXxQG_a<+mzlaA3yg}!T9ig1@^5AdYG3I!X@^^0GJUN_kdn3
zh)MAVjB#@wal}Epe$c&6s0VO45IqLkFhObqdUHRDW at q?CwA6}UN3t_qM at r54bp$)J
zagzM}+QH6n?LbBR+Rn~!ZHM at UT|3zsuASj;UZ8g=Gu%>UxTTD6OBvyoKvwm(U1}Sq
zt8JLB7U5sF2>lw(4)-%V+)qf>EyGW>3_n%hdseu;tZ;j+!+f?5 at frSoyYN%(LQk>z
z3>s|*x}4Bj6g;H`_znNUtpKy{1ZuUa#;O#EY*JO}s%8+s_*G3IhQUY+R%8i8Ma#%a
zn9oncTz?MoFf1%0hnQCrGsG9bk$x6B!@m&(A`&90sVIqr2$vBF_Ce!Wp1`6Z)MrGO
z;ZQOJYbBdv!|PP@@YOtoHf;C|h5pen#DwgV at KV?|#UMeL4dy8ZE>v)Z&@5bp- at -@m
zO%hGq#7jDnF600?Moy8_<Q(~wTq1uZ)wBc6p+o6pI*rbvOXxEC3Oz%=6&@9a2@{3o
z!gIol!WLnduwQsvC>Kr&r-k2RNvtN;7VC_4$37A}C3br3g4q4BWv*yf6IV~yFxQK&
zS6zo)XI)>ozH|NVw!359UEB}2A9m-uA8`+M&vfr`m%GoozjFWVzTs9pc2A<GnWv2>
z%hTR-zbD^Q=qdJW_U!QN^6d2*y$)}jH_ at BweboDG9EnrKnc^&Q_PD4xPh69@`{KIC
z4UK!;M|?V;*%#^a`VxF8zL~x^d}rf*i6}8Ev0LI3iQ^hwPW~~)m>PBS_|1=Rp1&gn
zYx&n-Oxhdq9Q-yuif<7YNGBeo(}%px*K63j*U!mikPhO~nZ%_tAEdK_zDhr$zX*>B
z6NF{LD*iTfyRch0C>#~u6Fv~mf^^g%9Y<_z?0sSBycqkI3%OjbbXOnONY_T!4%Z3S
z=dKFZbvJTHxIOOf?ml7ZJnEk9-se8y{?z at o`?~w42YH;HG*4?Too*nVNuHvxboShp
zPKvjmcNIuS0_m7RI+1a)agE|SfpqfXhJ$p}KG_%H^MG`c>ZFq}JF!(_hs3<ZC%JU=
zsg|&GP)It#tHF1I$AU+LWx*rCL&3L$Zw2=UcLrY%ZVA2?ED3H5ZV0Xqt_v0i#|NJb
zJ{;^9>=W!6>=C>_*ge=S*gDuUm>e_*O+iCY7t{n*K{1Gxpi-;cx%S(&>T4C(u3o!z
z?d at wDuf2S2^|hjFv#zzjmUXSowHDX>*P32Syym**xTe2GDr+ilSKg|;S$U)Kx6134
zzgGTISzY;4WmV-5m4B`LuJT%CWo1R>#mWnn=PS=ueo*;ZWl81Bm2)a*R8FfbsB~32
zEA^F{N~z+Tid_{QE817ItY}fuyrNk}T19e&y~2F;_SIWg2VH&mYQL)wT<vzX^VLpQ
zez|h=%El`XT>ka)!OI6OZ at j$Wo3yVJz7{VMIY)j#?y2{vQo<3zzyAIGe-hEM6GnfM
zQz-st{|Nf$|3bfHzEb4bf*SGzEz*H+Gl1tXfwwe+&9*kM*O6eGqru+Af>&|FtoDKr
z^!;JiNh(A}p`9n`|77n;d(;79wvOOC?*otD1)_y+5HH*hp0p?T0@)Db_u<h)Kgj1F
zf*9gqh$8BCstkr0 at KMO|*_!4;v<RZDrRZ7yX5dwbrZz!7`x?Yq+aPAz4$;$2h)v#r
zIO$D at koH3Cvk&5;{pb*S8)BRzkZDgq!_njDNl8LeA)ClYqot-0AC7`(a4}jZJ%A=k
zgQUUe2{c8zPwFOhrD})*pF%UpuV^beh~}VSXspx|_mgs^&TJ12#3zqIcCrAiVe3EQ
zE%A2=Nm#5AYtdWM+vpg3TOcLzJuY5VoFt+`QIUwGhe&c6nunI7C1 at pDg`S2io$a_`
znL68T^CJ3<jDgs8JefkKLR>qI%plXqSU%1KPiGj8JaiK>iczSL*AIX at gYaW;wFvM^
zl!vF|weV~<$gmwycpd8J at ZY<^KF`5BxJE$y$5#NL1ob<h6$E229yndg`*=?nB#aQI
z3nTDjcqwKv;@9k+&;*WTcy<oJbh!5zE3>=;C!-NC%E>S`2r{ENK+ig?6+eWQkK+W0
z=8xcPfK6D!5E<eN*hogO^#nALC&aOgKk))^H5nDc?=JA;7q}h{vb!MJ$W7p at JKU3m
zJX8s-k4NJnO3R=b<QDuk8)}LfR~Vva$Rm)D2S+1*bmmdpW_Y3yy+j@(8A2oW6sNr%
z`U-S~(LDl21A#7X=NQo%bdF}?5kNnaO{91X4N&#KUdf2lR7D^wB*mgRWCU{4&S)Zn
z3B>0by=Ug7hi5OFrR*INMmk>3I?5I-AmITj1c<OjzP>`RYM&$ulwj1 at BbSnd`-hhX
z9?bEa%=I>D{D(`Atn!qiKBb02&w*gDPmT~R=9Y>vr8GfZDkS*6{YN*yZPK`BpBzu=
z$6Y#yTkVq98S47wK#^TRHPm<M+$3aOV64I`9V3+Ig%RQ=D63FZKrfs{(pjt)#}EOf
zm7lL_hUD{A=d04KX0JKHYxa&1P|ZXdT~nz%uQJ}cK0!)myaun5A{b>ISe at j6-9#s7
z^7Ruf1|!T2qacIDLl$V}MwO+t+0q)CthiBgIz6FziwwWRZj*d*iB>PQ`!caGE;~Cv
zKRbII!BeIzEn(%}`T649ntex at X1`0f(~;0mh*q5lLY}A=K*DPI{KfO9q2U`@r~T>J
z>;r0jW?cFcdF?0hLhS{T%7Ame6h=5%JOXXFQU5?jtVTpmtBFMGkV=R&5WCs!iiwVL
z0$rHsBCKZFXwYlaDmH+~sI_P#Jo5R|<z{DV_^%mC%PRN#&od;S2|+scQm+nstr^s7
z_j2%AIb?b{2uQir6{}P8uzKj%L$O`i*9FHYrFmcHDYx>z$y5G{yLVM8ao;>TQmF<g
z!gG|O3rh88${bw8;4^Hw08<}0*r!|&zLT6_#Z$prj|{X`MW*@%8=fNCrbM8|Vu8n<
z5HZ<kl?`$3{0uQkvTLonG<8g4cLX(QnIB40CwL81(n=ZfjdG_SMp{;!S?8;7REGzO
zF;`yYmrqptPskN=1#q3-(wyPKZLzs2&TQTSF3c|MH2a$3MrMHxrwT;h6k{W{+Z;}7
zdw3|Z(YsU4FRwEG{`uc77Uq9Av`~Iw1~z<I`$OT_E4a@?!yXz|`1r`7PqoFqh4b-q
zEswmq=d6Sc%5PF?BjuM#bBMC6?R$IP`cP7?gL!Ez6zlr8>pCE&)~I{9M~^%=(`XSj
z3tm-?1k0iWZx;<7EdxCqXdD$C5gid36`7JWGe(+eK{NGDXU4=u<wxkJH&0b3G*d^q
zHENTas-x}A<@4oLpzv~e^{3UG^BY;^RWe-2)#)&gRI+%AL2ew5lYp}fe+$M~odSa-
zycyVs8(cdZJckbkTD1yvY}Kk`*#{q#9r at q`A$v#7z#T%{viIL-mq$9bYRztoOP6lm
zvTWIw%}XEu`1tWpJ~@8;<KKUyO+GF^e(v1y@{fnt-3`s+zQD5$cy0>*`A*<*Ffk&r
zHg3`wTbnd#>~BUg(ybn^r)4XWX7zeKDQS(pl(a~X*Lmzo at db%3M0?~cn|XSZ0x>@k
zrDu3z9NvU at Tcc#8%SelHG>#_ at TT_(mu-IaZ#&~mbhHO+DT7#Z2En#vwdK8p|PiZqp
zme!#%Op6m0)i+Nl<?<Q1+7H#N78Hkz(fE_IHN$3h5`PL8bK`ca(=i$xNY|xl(oHRO
zt)kPS(j%L>T1L0hXwtO2Dk3d1JqoI#TJ^T~c8o|bNSmB)9E=Ai<3>j8^B|^<Oey2R
zu5gX?u_16eoVY!1>C5!meMYQuW+a4k6Gld5Q at lmPudh_jD?4|-m63t1zxOykV~%Cg
z=*K7h#iqrlvpQ?`;TxsqM|zyuUfa3$gO;r>Y|4IiUY|Y~U4Heue)mmly=h;BQ#m<f
zLSElN`)nG;)p_^$sZ*c1^6+O*kzV($>9_66W+ATuwhNbX+hyK|nRg_D95Pv_xxoTs
z6|z+9Z<Q#==n%;Uv0QAxXedCc0%^8ULRu>|%I9m!{qU<AW|VO}GRr8zE)lbAand2m
zE at cnyjvrdTbm@BK*i8Hh9tg+j`BU?hMamXstFkDM(=rm;m+IQbtbO%tqt2>A0<>T5
zuc~X`n%Tl)mPw;bf%P+zHH#m at _bY!<j!n(Og*XT2;=;VC^OfexW;ocE3e<$O76|C1
z8RlP_Y|tS=uTcp^pk}?Ordn*AZc*#CR3n)wrXoQmQ5I}QNvAQWz(;^3E%(=O%uK9>
z*;x4ouP*n)75tZu4Oo?6^;yM6O>j$*X3zwIC~NV^$CLxn`=gZukKrekHIL!$aDlrE
zhqi8i at n>Z^Uhwma+qbU2ju$IauQNKoKt%jX6u at 4@1x%ufA`PCS2dAgjN_s}e#jJAf
zPs*VT0|a)Qd6i7BnSMx&wb!rJUMEIT2p6sqBWp8Sd4mw#0b+4)z$8%tX at q%N4H7Y;
zT4r9jNv*k9Zf at N=-Ps<u!(O|MsG>(chGXA4dc6NfO9rUFR*sF~V>Ax0Cs)Z1&=+|x
zfmi|w@<paD=TE0w!4HoklWLcd9SY}VGx%R0&I4Xr?J<C})iW*WS!#MPXO9+qy^xh9
zXJzF!LwmSmmTy#r?unS{RH1w6EgLxF&D`tu&d#rMz&zXub|O_=e<K3W=tP0Atq3%&
zTt3R#VrmQqkQgu3{`$3e;rB5tq77aZn}uz1T)=`R>!rz->H7Q#>a=T|CVK>s!b6OT
z8(>k=6Z|dAaw5!Gv+Qtsn96xMCa0$6=1ygxTu|PDxtxkqaC_yQoG<Zyyyw!FN_XY{
zFDK)bcnTb=lzgQaj`2YAZHO0-L;qUTCJ-&m7bTI-mn1PoppqIFNYjx<6#)}b2V+xS
z1H+wGQRQc2!|jyt6NB71Hs)d`i+$`k5=SVfpp&*ZvQRj1;JGWei`m~aDu#Z(fPSJ;
zP9RlpwOO at TqqEtpDOSA>8TBY~G7+ci7s%|=;Zz$eCNt7vDF)atXVDe($&6;z4WL2>
z?J&2l^Ee?R$()YQ+#Y9m1m<6{H!}lNv1PmkJPU{m8>deDc^Zzz9ZGL0dF0*VJEdRa
z=tC=u3swljai at fYzkam($5)h}OO+lsUU(N<_V3)glIz$?7#}0hoq`?;G|{+Yt<Km2
zw{x<^l$<yj(dnjqcd94W=h8$;$y(&{Ii)D4-ljzsduqrFfR at SCVapGrSYE*yH~}6L
zxUjTNx85b$1qN5}#w9jlp+m?ersB*{0XR_kO6T7y0JH4fyz$+m%3kF}!JXnl-AhZ>
zZr-_}Q}bt6FP&Sk#8 at b9_xX<PS+q6QefrIhze!5M-B&!f?ZuMPsf!mCEt)f(`$UM~
z#dg4x5iC%zK!SO`q>|+MDwUKXt8_wvNn;=ds_DoqViS$fBE4F)TeyWO2eZR{S4B<M
z`K&5%TlIP%f*vGeE_LkXwjcwWu^3(R{-xTd$#^^!qaeCeyH&Zb5X%$kjhd)A$}jk7
za-lYr$$4w=s&EtLjvI9gB*w}#N|J3+lO@|^lU~9L&_sQ{C)P}~F64A-%vx8ZN%F`y
zDnP(Yyy1Acfm}g7z#wsbKz19tSFBu`W?^2<x1CA`LKYiPjw+X@{W@=|w0z04E0!+r
zH6>%XctN?X9LQ*{{PmX`$}dSNxa+g4j=%rj at eZBHRVKqZpcg)nVI)dGEdnm&nM|W5
zYphH&rfc#OZCXoItW!b`pHpv71SPIwu{|e~jX#72Kp;@(=hTHJa=k;g){zM=7~ksn
z%A=K7RK8SxRn92K at erId@JvBr<kGRbH(YumC+CSL9)6fkZr)tE at x#9<zv1zC1YUzT
zxLnGu5l`N@^YO0FKi|awvA-FHgzrGcYSc0i#g=*rq-7~0U7(tXA@!n2upmj&FvSf;
z?jX{8<2nt5ZxAAwy~203Yd;`4weDh}i}2Z<WZ~fZxRS-&qr!4=A|Faa_XQI4sL^C^
zlgUyvm^CRs9mU)ADK4ie!fB6=chVH6DOzJs4-F-=aP{dA51_!(;LybI#NQ2FynMpY
zItjs`S{sz<f!%K at r<AYYIC=2RmtVp$*aXui_T_861`Y1nbMWAvjRsGcIB4*M at k3~I
z?CICeT)cSZwbQZj+vXlQdGg5IZMf0;DO1+JJb7~Mh5bvG?0;+dayH)MfG?Tb=>!xA
z`1B^p?UN>(e3M<#CN$YTJvu+pqjl*W8Yft8SCoYfI^zkr2yxSJ(l-o`tq_*QL0DF&
z1@)Rr4#LPj0V6!M(<?(Nlsh;c81dsQr9{~p(tvTL8^!5$16)&?nTd5j-okoih4P~E
zq%zdy!s-!E{*BN1L*V~f(kkv}JONoVftn`R^Xb9}i$wG&LT1w$2<2mtZf)S{%nizi
zSnfHlcki)vIVf$?JAZt3_Smtt at 80!;1Z67w!hP9L(}2??>!CZnO`b;=+HHFFr`xdJ
zWCxE@!|Xci6&yadlK1pXx%&t2f4AF3PeK at Qu<UNHHIMf at yCmmZ<xnUd_yTnjzY^X>
z5{ubHfnX#`RK at m3s30crx8|V%L`NE8$C+6Cs-_7&cUut&J*T{(l>UrAx`NL#`oF+U
z#INXQJcovs$Re~zSR~C+vt%05Xvm+LGq0+F=#SYsfG<SC8oI3z`6}6d^^dfGQza1M
z2r3DpClzbqE-ltf%!uI)&~x<MFG{m3O8U>Z574myY+`?|b8)D3z!hP4Kyc!973-Oa
z@!4aX(QNdb$QxtP`&jUFo at HZUg=1z$`TEl{_pBjMW^!Qi2r4^smUXre52y=gKAv&;
z$r@}_?)+`(vbocyjGdw>yt~AZ8yENWhwuN@@*z%5J+N-ov-9Tyjf<3*RO7^rNRP77
zs6eacy_?|}A+wo`A`LV~h!Q3_v`b<pJs>Y at wxpF~S;CT5oqIRWbUzRYadosR)*9{Z
zVNLDPzPEg_98}=aaYnx1-#X+hK|vtbuFa~3%5oOyhWsd>L75F^yq!%UmQJ#q20TzG
zpXQbnByP7^oDKmVYw45(UtD~nM3ULu(y|3)K!Vd at vBRA63AbiEKCG~C*yA%AuN+wR
z<(FjxS2q4?<x6A754yE%?v)`cUKpA?8arQ|R`EpZ*~*Wr-cb$}&6+=d)@<DE!`(Q3
z;)3}~xl-ZAw|dQadDrUIr7te*-s_ih=YH<hZDws$qaR9F{*ag5ziXFK%7NoADnC6w
zWm at O^hV<`0Yt{_h^XO6BW9F<GLmwNbRJ@^7DW?$${(_Ly3+y!eVtQHNL5o|q2%=zi
zi-Hb7tsz>sC<?NRP-1bJEtC?Ikr-T*=vh^Yh3X1qgGQvdfKF5)3tyknY1M3f&0v*~
z6*MorGE-6I^q;S)bK{U{ia$C1Dp~zgDDC7|yq4AF#`!WcAb`!VLvTgCG{X)^o<{sX
zlZ+L$U7nd<dv at k-0iV5AC=R;4sjv_?Q_dC=A8E_{0%TQEU*L(oC5=aY14(*ofp0|=
zEf6QhKzbErv+6yP#TP4Boj#2x!6cxh7^{!OCBQ`USNM4d=wwNBC=B#NZB13{^nLEc
zK8g8>6c5gTfrtFHVJt=Kq9}7+A+M~APKL0=a`@o4zbJ2lnVh#{^DA%8TUmDC;Ng{p
z!qvh9Z!LJqW<Rm%(kFDp%sF!l?!>O$uyK7TKOF!*;3mw+DAXYkiB>shQNv2}EWKtr
z&5t%(^ijx`AQ_ at rz<&CCov#N4u1XIW(qqQOOeWJKr$=pwk?>$F33X0i2s?e2pE4yC
zZ?*+DuP6(Z`yq6nwg7uxDQa|P+n49hUwrOxD&GFxW&8?$9Gv_sfsV at 4hu&7oAlLkh
za&+ at nZs(bt*Kr?jN38;pdR2jOq81fsRM>7pLW0GhNkTqdoCBz2Qe|QFU4f?W+2t&A
z5<EB|!_Si1RE)zy<)o60OMm#{^B<Si9xW>)3VsG}R~}Nv72?LY8}5QrVaP##%4}tg
z@|;q{<OQ^dET4Bmp4-&0T4#UOsw*(9Hmjc1JVOi2E5wP`XJG7Qy~UWUwn#RM14iAV
zg;9^FAN3o|FQrw%84RvmQ7r>X-_s{@TqL<W=p4M^GCRXKi|v=xF2jq8i<LsMsF;(s
z at iWDHq_*Zr?WWI^jbZwp1^Vo$cOV()d*)u+8j_X*WJy3BVUnxxLm*rsSKp{+q*eQG
zR#z)Pl>&5`oNnhopew`9sLCj=U5lp!RSSN+m!{Q)bvh<xfR4FP=YUslHWZl5nprlq
zlFo{anr_Q?8<X_N605h$Qi9Xq=E>oC==-j=Re$;^#KY-(WKSOt5P}=37AFI2V7=yv
zbDDfo_Wc(hUF^TA?H&@fRe5t43?Ngy*&A_-mj!g<P35?<Qz=#6O-#h=rh=RAh1atW
ztnhlKexZ2*a#Ur29HY??$dR6Lt}y9TlolAoiIH|QSRpI2>6>Vyq$X;MG0CCz$souG
zH4Jl1-7o`^`G3qPRXhDR8B(g#13GtXpV-;48)A3Gig(3o=WEye%x#f5EL at 6?lD-Td
ztwm+EZyaR;E>yJmW?|u-*up|Gy!NHSFugR7uf?|x*i_5}X<)3iQj*%ohgi>sxP}uG
znim0+$&hXc82T9U4EcuH2312+>beef2OTk)1V<?YD0{18LvsSLYLf;(FU~?R`wDau
zEzjAB1?iKFK5dG+sU142so?g4>AHMEsbKkaz>tR0aGEXM5peWzFq6@<)Y!jgsj2 at X
zJxgVV%>5t9IgISVqrj0JjzBAO%T~Do^P}id{3v;p<_eG6@*S%j>cKQKoce?*wn-3W
zK0jA_px4j`zM#=%e^dU}Z>zHI$00e-eJG|D7T*5wx65%2#x(*v1MT%X$i7UnN#l}D
zcDHPnZEmw!PO-}xij7(}-g<GO!^}ooHt4j1#VIA(xj-!>E)sGI5NTG0KkRs_{QetR
z;C#%^df&s+NFnTXa^rTZG;FPNoklC_M7`GL)X6%hUe-GevcYMTjW$z+Y&Y92cB|9Y
zSevLz)TbCyjLD{CxskcG++Ev67tnRl2lV$D?lazJ>MnOQ2P^?=!1l1VpRS+2pP`?z
zpJ||6s4dbJ=@)5tnRi)sS$EkEnGabGSwAp;VEMq>PNmV>Z5pQ>W%p_l<xEWrxs#@w
z{GeulT%cL3F%5301(=^S%sJwEZ7keKn!H#0J^A8UMXG%wq#?E65HF}@M$Hd}ko;~c
zygP@)i6CnOY8QyoX+m1btRrZp)}jY7vI%1hn{77X)2gd)R{Q1h^nfN^o32aOryGQO
zrbx&RGBSEC3h8E(DuwN(8-S3S>1G5v9_Va!snjZqORZMf-4HI>+-x1dZc$OImKLaC
zNM${n!bW7XN-DvrHYJ&zNp^4}W}gnIvWG^OQ^jVmTygiUPiP+hX^8Kx7VK8rFdiIe
zud|!%E>(mj!k%R5XV15*MM<lcta_VWvRU1>L at 7~~Xl-K~AoYnFVatn}EKN}rSPN|V
zQM02qL^%edI-WJS-XcJr3Z(%@j*yXfJKjN_C at ZT)N0er at O2!c;i<(aK2saAC#5+F=
z<~z&T8r4AXoeIdsie?3xn3y0Ww=A1dWEIw{X at ORp2<mM_nk1DaN!9^2fB<9=fUQmd
zjDK#zIOp{XWnvx6Diu at en1H>HeWa9cUnI at 8Z?LOWDu*gj)l$_`9w|%pYK7}YlJPRI
ztPG!{3yu(NnR2^k4Cms`H*_mZ*G)ppnofnG_Z`fCYz(g_rUfi$mR_0_T2D-{YZ6R`
zKddJPG~*(RBFiGrMuP4naIYWo7Y!E|>GZOL2g{DU{q_-Mk<uUU#8Yu0-l6mxggfD$
zxEJoEyshk44k&LI;+OC!I9^tULk#e|G91;#B;v;)S4av_k3gKcKp(->n=PyBC3}R$
zWU!}cOetoAPs8nRRK1JkFHCrZ!rZL?)9UnneWLTDXGhmZd_14=F&97^hIxH|$BD`p
zx0LE%f6br!;<|bHOkh8~ck*Y&R7kGwe0tUEA$ch)xx8%1gSrG__4ZlFWR9LCO*f-_
zudG3Om&p>5pm8NogO`hr(-T^8DhCmsk*ixXDaIAWmBpQn11XB}^^z0WOF%nIyc&p>
zPKMy_k-K8tuY8obwlE|1h|()8=2!`@1s_`{$9I%TX|4S?H{s+z$~zqI?dHBW9<2^^
z*J(9WuXa;`s@#G=Q`7>Ap+Zc7ZjH}cV4r9<2n8ld<q<?0sYVX!(fMMjQ7?&+5LbBO
zBW-e0jNWIdkGesj*()smDwn^*Y8_H<HW*4Zd$nb`N5w<0sgMaK_8y(eWFmvH3p=ea
zDQQ#80&%;yL7bjYH()}C+-Xg|d_l2ScNsdM9dqAhv_BSb^r_nC=Pg^aX4yRQg<;Uc
zN?sv;ci98AUl+2${P^fgd%bIyFMpod&qWZM_kwXu#;QOEkaN7(t=GBSB-Z2B>2)bO
zy~is!@LF)fjT~#EX4x&%8|9~Xbb4>B+G%0_SZ%d8i;uM;Q+f(txvk)-G}FJ<t?x!x
zCzL94{YyHw@?7_34y7_%wpemWZdF{8Hc6MHPckGKliW$3ByUn&lCO=njjoNpjiHUP
zjk}Gfjkir)8()q#N0+0|G2|F?+&P{cZ%$l}Z?tx_ZnS>1VYG3yd$eb?cXZrn-*)YG
z-FE$U!*=6#_jb>A at AkOuzQfwXy2JXzhQr3g?!%tL-otT+eI3$M`=oA6Elm}`Dz>a&
z at Jz#@b+fz421}gX;f1xh`1M7xpO?K at GIq!1uXf``SUV3#uPur#- at AIv$PX at m^tN(R
z`S=;-a(DdL*3AVI1`bbc+3LLmm;SABV`bmEl~0TqJhXYs<`<7$`O(kD!3lHy8=kw4
z3q)%~tfSAUCK_O-3l>RhQG=TKP?AJsNbY&q!&WO`ZbK-|j3op)`u;4?2?aS2-^e_^
zk>Lo(H%^Ff%z5UO!b)+av{E%&JzFzdJ6oq4%mcx?&=3?2PduSKQ7oQZqzr$rP&ikG
zCo4;<?lcMe+pb_IKLk1>QFb6+FIgjz#sRZ~q5>0{=*W+vNg~i{k&`SqN%WznQOv}j
z2a?0FHVa<lGdz8Q>E9uGL-elbvS^t8p+LYavxSMsx(jX&uyBN;vNz71*?EMh%aqTR
zSC!Y4PsKqH64;f$e)BE1lOLgsl<msbI1xX@<H#G~yxEAB1X>#np%h=|(&`}V*MW))
z^$P+iI;!VczY0yHcQbyC2}!2A8Gk6~x;tg-l6`f3*rnDmMUJ96tW#?>lFn+d8fDpM
z at EJXFK<*>!K()Z6vH$r)DB|&DN_}V6epp at m;c{~5Y5XjH9_$e~CB|5dkA5ABhpQ3N
z*mykrLtqef!JH&6O!RPaQ(`b0u-j-ffQdA at Y{+JG8H@<o{>YzEM<}wIG*m1w>s1pe
zvdO0Ur45Wsc8g at MU);En^@j-akKBfgR(%cg&j!YQXDx{)4r840KGN0Lj|?!XC8E|x
zqDX9~(duZ8Qx{>B9f>&6(8%bMedaE>E9pwR8M~VTj{Z2u at UXFuBNF74j3Fkelap5y
zDoGzhcK-$(iZbA7Qoa$#f?1Ej-LY>sKJ$Xm;m$EGxzU30&bM at PVOU?apa(q1!pVUV
zlo0HKU=6vV5kx7-4H<yL9vMZV-42I6Bt<)yq8(0dlMzBZot_xn5ap%VjVdHyt4UAQ
z1!nEUC<jxS2pSz}w=i+)RBYkY=+wmU1xg;QJO31{|2<LuJ!O)aIGanxC}cIJpai2R
z5|K(qy=*Y6ZB}fRtOl1U+7=xx$0p)bQ>vV5PPQalQ*Ab;W<5)F{h37oYhYl=$W1~F
zHwiItgiV626~gUw?euNsw&v!M&7(TR_KsD<?=_*NDowqn)`jSq8DyVw>OgJv0bHy!
zDJIu8!8p0zAnF6kO8mp}TIXicL1_aiV_O0NmNE!$f{FQkZ6+HHuFK*nuFExnjs`tU
zM at WaXE{zrvBCT7eW!_g!G~5Aeu}P<<LV-b=Xkqb=S!ac8$*dvBXf^vpMC_qAtD%=x
zcQ=Pr`TyOS3ewTkNrxLuo*LTzepc8=(qc*D&^RE2azF;<ar992P(Px2M4hY8H9YDV
zs~W2wsTrpqXDC8Nc&e&MHC0`to~oIqFVasl6dCfZ`H)O*)o(Rybd>4K42dA#P at LUB
zw9LKZyi-c&B64~&?t`<R!#j$U$4(XEU&(b4;CrMs;7+w)g>||Y$Z<K(c?tt at 8aF1G
zxYZhUicTYtXCz2}kcLpLMWv?}QIFWZ3%>U#91q at 9%H{HV!|Sj}v`i2>hU!!YL}KJ3
zF~SiN$sV_<H-sk{nV}b2cK*h=7oA?4SuDymE6MfZ<wDsvc;xas9Y0q1ckLJ{*J(@1
z7J4fn6iB21%~p$;%IvK`!#yYAJOm at s^1_AMQ<81!?`NilcSbhcBfvMgP)x`@djzat
zTfZizOSRY89s%iD{=27@>*Q2j-?RXWtZyVsL{Q(e9|ecko5-o!lNT;Xwp*8`O8#))
zXX#e468e@{-&BC!RTPWt-AJfsf9rG at N%oG9en=uNC_R)O7l>QDP<sxyRgSYiT>$he
zu>w-Q0{V at 6*dJ&hY2h6g7-p4#YT(|HBk<gEp_*)#MzFu=x0iiMMZ;Tp;7Jr3rO;#+
z_^=3YgocInjyGYlNm(k5P!{8<?0q%FcI<oCSd at g81)8}Mky~~c#YF5bF($sEc5JW~
zM?|m3CF*=5^%#AEBg08DT_!<BKG~`BCx_m|`~Bg3BDD8PIiXa9BfQWSE%4)w-6?Hs
z9qb((9h at B^Iz+aP>YY-QqD{4 at Inta(`XWP-vB*^9F7gz4i{f;Ur-kC#y0;H)@4ipT
z<S+Gc=G`|G!pOCX)OE+$S9jg1JveRlsEHBdA3Z%DEWbuszhKy?2YUA%PL|hJ6)x)E
zXV<HL+1+8z^oNI4#>Jhly>#KJ#~&a5R49*1137dB9k3xU>K2Ii+C_7OYm+)+lM$ED
z*{H;ruU>D7Zm-L-l1#f9*l!ib;&=$;*{kQYstUG(%2?)6%kB;!>A|5zLH;Hh!W3Yn
z5paa-UQRLw-dl at rH(8s16^qK9tNCl2C=$N?=%_Kdxno8>S}6La)-LP!pmIUE1IPIX
z`z<QOBMxpZt*qR&`5 at C57&~Dej9nD+2b{=RObzB at y=FaIG0$Kt=Itea!xi%y{@SWM
zeYYtFh{Jr#+P&|_Ljr9n%uD?7eWgM<iJN1~xGR(M<yjL}&z!bo^c*AZweK$wKk2X<
zC#9q)Uo4t;^51?vJ9}zq?*qtiB*;(?GVB#dz{nh{6*fg_H`!bzp4o;HTYl7flRGmO
zB2HtbAxqWX>1RT`QBjkXRq<yb?(5(y^6m0LHhRw+DX~s381bQ<c9~u}F7L^)xdX>M
znTH=+qo|s^kbgy~#q>)43r#@8_?ssWZr)W{S-N>g;i7&I;>K9S5>9!rAFc_{0pTFX
zk$sQ#cpy%qNGqcfwY<SlY*TNh#Zl{R`LVJYwO6;+NFAL1ST^!Zu3V~BRWj4|(7Urh
zT%N1QwZV1PC6u8usZ3R-F4L50&!V%^S=CwfS<P9ko+&ryCl-s|u*fs+E**Oi&CDM1
zNN at 60ZNiKt6Ia+arv}kArAqk%5)A{$J&NRfvTgIbmMQ8p`=?FXyB#LAkqw7(is?iL
zgy=Ug28@$Ll>=F{C2F)mD2|DoE$d5c>Mcf`fefh{ok})kBCFlpF_!HzgM=Zgyds=1
zK>EoiFxxuG(gtmRFeb756Yf|P8$24a@#&g$Eu^3!&56Z)S4ubo%?Q6Qq~GMLdv at v5
z9qW|8eOTLO&HD9MzIv!6ThwOvnmDJpu;zopLYi5);LZJ3E7u>TwKx*S!HpWDNr9$~
zJ#viCgp)T}QAw;?U#t>*n<Cf8ZV|Rx^P6ZgRIW@<j7dgWiS1Pme-mbiZiEaG8y5aX
zgKYr?b>hnkESHE;Ya_Ht+73+x_Qi^zmDRGwruC>jns}{-+nmrYq41h+JKRvszzgFB
zYM3c}tQ=Fm9`)tK at usD7HZ5wXa`<;eRi}^ijhej6fAe~kCr7;eUSUJ!TU4m53#;Wp
z6dpUV1ja5FO${`TvO&D;d__x3#M#jnBgG}!^)fQ|u*P(kOqo{M&=qAyNwRPs>F8qH
zA^a6L8my63JN-5F6A8K95XVx!(9H+a#Rt=cT;ajom*!sSE_KtpFISk+f at n81pdqf|
zqU)OV1O+zD{LB8ewF~BSd1&<Tx!g+4e6;_$4{I+#OqaRn$(LVOe4%ehx&rzP_|ZYE
z)HV=7w`(jVwk at EBM$}U>Wa?$BDbw815qcwVo|{pBP1VIJ_G-eJ=FD at hbe1|rJh<V;
z1$=jv<52#Cy~mB~{a`+xx3+fNnl<=$vHyeP#zE!SJCnI$LHEItN^8=N)8Jw@$q{XJ
z$$IDO(LhXeu~h at KY_V>2M`SpFB!@``sye#aTZ8gY`YeMQon|^DSA-(S^gV7*8hiWG
zkSHq?880=;bcPlNc8}}J_EkKXpA3Y3_ifhV`^S^Eo$hbLXw2^eG%DK*?+ki%i_Llk
z_vtodI?tP7{NDgtBhg!d?xy*&NuxH-*J#v^UQQs*WVI2Cy%$?Fb(qwU*l9|1LWwjx
z!X{HvqT6CY8arejTFLA{-JKA$;Y>5_7*+Rnpl<273PN9IWgBK3e4AhR#WZ^tz1w7G
zxkb9xVRAUsZik?=nydz!$)>Yw95I?mZKN*N>bAz(+_q at D+aBw1N2f)1h_>>yEUZDH
zuvH9=7gm`w$nn}aY?ScMB3yY~sm4bq)~=tad@*bx)1jJ3Jg2bmX6>=ULOeZ3`8q5Q
zu0I;oEMSpJ)UyRtLU1OMRWwuVs14~&SZkQh=+bm~x|O<8oycCZ*69i95LS=ELe^2J
zT{Zjbpy_Bvpo1sMY7nGUL}gW at lH^$Vm8Nukf;YmZ6ICV2TYL@;inMCG>z&z=YS388
zo*gM$<GQDK<fQn_#E#845m}(U72zdnzQrmni%&r%tJ=?^ASc^>9xxz(nm^#r^XL0l
z`q^8jzdy<TbioA49~Hjpv18)?y=!Y16}9U(WMon8#-jFpABFQ`#$Nl4W9OF8!cjxd
ze$1vKzWLtBrx(^<Z&-pk@%-Qc!|HUcgvWh_AzS0bU}?bKtPdF*am&5NM&Q<l+nOpK
z^xR`>l)KA${};x_{*R0eF!cvx!x;GcwuZ$X0`SAu=9>hps8}x*Th_C+`S$j<n)W6?
zTbvK=5 at gz+zE6$}MCL_OwlW{y_RGE(X}IloNB$!N$B!R0XuR^BatwFCkvIysSB~{R
z%KqL!*)c_VXFN^?Q?A0v%4f>&%5CLBIF?ifi0m(+>X8qP52V(`L531j90WoT4y`wB
z at jMrmAMb9CAPCCx8hK1)Xcd1qqztWuaVN%9sLqnti8P*zG#<r=MH<k^2^|uO5_TmB
zgR#9qgqct$-?|7iBxRCZ7iB8z{}6(1s(oxN>HcIm&gAh at eFUm>FATp6=?^?IU+n-M
z`vp>bPL(yvvq_6eY$62AQJduTwk`BIZGODa+-a3$JIO>@vF#21cpmWiLlNKK;c(A5
zV1v|!{~6|g?t$0T4%_sP9q%14DF1<f;&MTTZ4nZB0Ur_Qp+Ew1nAI997EL8)@fF8<
zu(0MWI&E_`$w2ab7PYL;G<J*(IorGM3Ayge<)Lp-V3NC|(xN&<^^STpswj$0^19Ia
zPm{UVc&SgXNehqFc3o3Kgyyf$aOVmc%DWHsJH1yK#OLbaaicYi#vF)Gn*fc;*c`ae
zXdov2gI<qDOVqjtJzh`U`uk4Nu`^06Mmris729`M*7G%ZuUa2VoEdiDK;7FOAKM$5
z{Gm1Y^13y6b9fQHrlLx|R$cdz)t{H)0|uQ&r`73ndYwUMl+fV7?4r~Ssb#4&S(B_y
z)-~2QHY6Kc_`3LVHM!bc9b5d!HRif=J-Oc8xLn^T%_!|C-6;Ji!zkk at _bAUO@2I#@
zz9pI^+9kRr`Xz=X#wDI5-X(EMd at pET(7vF1LH~l`1>*~z7rZaTz2MuX*{0p5+os=U
z*k;`3+2-9Ax6PL|82@=CzQsKs-_)<fC+3YeK0oKFiT6MG%xkNExjp2<obj6C*-woN
z^n3c_jY?4Yb=W00PM$KeXV*a2sD$Jf=I-3)_9{2VjP25?MSFWf=1WWWyzUC=Otaus
z$o9vBr5O^4bwU)0N(92Qg?x!@iI7!htPy33T7k{Us`8&cU(PZGNEvD><np_V at w(7z
z3e4sRKAR&@M4f@`9r<WvQ6wD<aRu9e!9weBnh?r|KUlX8KZYAAUo>tLXiuKgynOVl
zm*^XXxQDW at uy*p&&I1N+oKwvI3LVdDmkNy_rg$>obI77jZ+%7WWFgoVbw140i0%$S
zhRNC0kZF>2t at u(rOUOd`SPhVWH>X9>IBeAU3J?$;#R-o>QFS at N%IMN)a!=~cV}a0g
zg`#j{jUsj6HXYyYlrwtR9HCK7-;hlwsfD%Ao*2D;2M(`c1;1k7H302KG&9gft0C(7
z2BSeWUs4(2)Jv^miyI=LQZKgETE+I#vnZKvK}G}nWKzILW73iO1^SwMm;LTWJq;FB
zlSCHy7#a(yVo#x`_=xa`C=K at ByAp>_DT^kP$L2sbreBIzPFEIz><er2$i~9Ln!cem
zOqCw!wxLUbM|AUTR_%O^mVK7dOQ&UjN{i7eP(tRb)G9n5VYT}Iu=XZ!QCI8#_~(2+
zpILx`*%*d>8-`(#-2qXSQBe>97Zecz$pu$77i2_3TvA+eSHdzguS;23x6-_onoC+P
zdDE;+t+cwg%&gm{GKc?JJ~Q(f#CyN@{{H&Xfy3c^p3gbYdCv1Z=Xu_bOk3csRd^~?
zYF1O=>8Xg(x&uzG_LL&cPRTQSJmlV5jS9Qt(Th=cyu?f7j_>@h-0{>K?}6X6uhKo%
zJq>VDxrdv~UE<-c at Kr=I2F}38sAAMn-f19}OXbrQxlAq?$PMHN%kvdum@#f+71#$4
z0)#0sc-ZeO0sue!m(#1jnuYMluV3B#1-?6nEn9fv4sWvcV+-&Eu^qN*GGWKqLk=tf
z{$n&>0U*UP8GG25Vh{UL>R~T%c-RZ%_}y86Q!1FH)H`3`@Xi<b_~@wrT~6HYJAJu5
z#1X$!?H=H#*NOb^ZkhzA_r3Ff^S)!ckp$!!C9CAzJ(OtXlnSM%!b`4{_%VJGe~fpa
zV?sPa6d|60UTQzJzdFFk#CpUkVv(2(_Y3zA4 at d{;Y&M(DWpnACeZ0&nvpUr;)xQ7?
zVTW)9(i~-ucNwT;E4eahsppu0CS{YZkJ3xS1bRg<F<xdS-AjgzR;}3g?&0E>XD__H
z1Z-aee+C(AY~^jI&#Z;{?Z6*in8&uYvb%xYYK6<-V029S!hfLu*MPlNdZ+XaOy{ql
zH3?*Xwv=OAgb7r5vR+FWCeY89)h`WX0)3Y1e9*T}>qIb4f>cru&P&C}JlePby*H=Y
z>8IJl?F|a_)%)nQUP`&YTooi`{N*W9e{~S?JPQe&dK$1!?*HHkM_T89SQ=unFy44Q
z21q>RUYwTEa^8$Lr{jHjKfR|)tMb<AbUsF{(c7#wduQk~d^7wq{4)YF0tfpJ_AAyF
zdzbi at _ysGybv{UXRY-{FvYT?*Kwxq@&umNLirGm`xeeUFf&GU^sbJD<c5(~w>RbcX
zw%(mP!AEx;6z1nnH1cM|<Ez-Y<X(fxLp(kh&8H``%o2el01Max;*WpXjenWlDc$3?
zlX&D)WL%0wAtN4n93x=&$U}$@=KtLzZ&66)Cct{KRmv76N8)<KzWF?M0yNL#uG^jg
zx93^8^fy85yw3NJVwVycW<Pw5uR(TL3{!4N2+;(1xy33%wE+e%d8CO`Fe?B$P6Af=
zEs8aSC>5Uam_R?)pNR}nd1~abIF}J8RN^B<O;T~GH@%a at 96Ro1u%}6agE>s`AQRZL
zv(Q(mX<0PP18Gn+_!yrie9flYyOM+aW~|A~Tr<NjD0$cIO;hSePHbKB*vR_J)}*Y6
z+WPxjXIp1)y<cBr%uH&kTmgT1c6o64(r4k%%PScG<S+=_kOq<bM(iVJoj!Du4twK@
zH0VzO0r4<;e=B+aN=ssRY_Oj~DG&DW4OH?H0~gHfj1Jxzh*ZW!u_1v$a$hBg*6>VF
zxUWjZc<^Kba7rmPkJLi=y<-Mw5RTwm(34}5rsAlDN$^2j7zDh1=p>-8(D8 at Nj>D7d
ziYF{xJgK;D@&-B;tFy9J)2Y~SxpFyBKJ!F)@QUrgYei*KQl_!SF(0)NSwc?mXW*pd
zDwmD+c$`J&tJeaRzk<>7%l#G0wL!jmMj3>!FVY1J2Gvm^U?>rgqySSS{)>I`*d?E=
zN2(Ta&t9$g+vM@>YPrmF|6_%Fs;b_aG=8f_u6${7;T|sge96eZQjU`h$QyEg%!qUu
zC(Xf#$r!JKVOvOSm70mPXfcLEvw|QvsCX}o#6=Mt)HH=D0RuPyd!{>@BrZ&AMp|x5
zeGyHdVPV_cRg$El+S;OF^$qu1x%_wEC3edWc$vQ_DPW{bII>$}eYC-TAjI91 at dq+y
zu7 at X>>+PrA?pbdLaQ6$=xw~r>Ot_zn&r(SZ*pq(Z?4=AGUrBw8ohOhIeFB~$iAVH$
zG0~_d$=yaTfN=<Dg0vW-APc0iHz$rMVMm6(({6=7z`rA{RcGz at Tw{Z>cG9 at 1ib`&V
z-<gj;KK=1Cf7Qa<z)K2@$aawegADQPzxYTa{Os{okIrSP`P1<lZbWjWlf*O^SfXUU
za)$R(c)K^s`MJRX&6-BV1|PY~O$OW<PmNNi_K=}vmV^+s^aKt3$Fq4N`S$H!PY^?l
zB!HqNwp%SE35R4J634C at N4ogv`5R5riKFILgDSWK>}q?k_1LjvzyoOdztP0M_SnqL
zufSiewvTVYjaD|(3Ur at d(x?eWTPA;jKZ({jfthQ`@{CT5^YsZ0<^!ZLQC<o at PN!tT
z0!&gSL?6J!Ndpo+^*SZ5aSMqyh4B$FZov`03O6n)G{VitOOuG@<5~PqO*fD;U;EP8
zOJ^xK0NGd?`U4_jfGGJ-2~24eLc)}$CnlLbO;55Lq%ytCM9u(q&A3G^<>MATzTo24
ziy=Y5!55#pkT^3lttS0k`^Dg(px}#7Ux=Tc-FGI~-BMoO(o$aWc*li~i}5oo*)!wM
zZT}c|`MBd;pSslSX$c>9pzkproQYv1IPN5Z>9myVyjg9qub(f at Ht|CrTCE0ISV|SE
z)+!VpF`58*qo4cRp<H9I1n9LYPSL3InjH=r(K)R3=7W3<{u;HC3t|<#hn!_X{Cx~z
zLB4LhCnIHzSoWMC(g*!drLR5JM=!bwN8RqAPIr?3UF-^@#`<C&tI=w5G#tiw;x#Iz
zN~KbJYmjcM>*d+Y%iv?srzp%yvnoa1Pn+$Xt;_H&P!^~LsdF`@iaO6auNLnX-Dc%x
zRj6>s9cB(Qo6vupSi{DsB{ChoPymD9g*9MfCVT+|-)Ljsd;y)D%vSLF@@pUh?lgmq
zu;yJWD4W}F`CM=f9k`#dCZy9C=FTaa3wKjr1==?|!3{|}$vF$Kcwno6k at IMR90_M9
z5XYP+f?rF8|CK9}cAGo<dnbecN4%TemC4;j`^?M?WKLOTMn|zRrZE|r84*U-5IH6@
zGlSUWV+N)UB!>Bz)YO4712Z#HO$w=pCNho>1d_newg6vbpr<tFWLgZV>5(3Cg~bpT
zWJ({HVUTOsv5aAiE@*6kd`zOwGKMKpCZ>-GD2d5YUAlGq1pY_-(D*(>SW0 at inl8vh
zYSohrZhg9|1>e&L(jRo)tYn(oL*3Zjt?D$pZB4-|LI6z!<67rQr#?1fTx!|!ch=0B
zRb2S_>Ebu48|71{kEt+^TmJTwvu76%`}{=y%Wzh&_;Iy+;}R<BCCBfUl;jUg7?6-R
zVejmzn_?4M%G%oXK6lGT<`2TH6Zg)VvY}Ue>(~`f>23SNisCY>`<5Dp#bi|XBQkuA
zB$}HoEh4_Yp%#VCP09Ic#w(=bajs=21r5SLJPcNeuzgLGAzy4~6J>}IylCC+Zm~;W
zoY}XgG$UhlNxzIzaAZtIMk)GkjO6W%k`nY;+7EyBD=lRh4g at fa^c%@J939N$<6P^+
z7js`v$$Yba${P{=U(ZN?!<UIrWM$-3rsiiP#*|4 at gUh7lnxW`m!xyucPn<`Kdme4e
z^PgP*?bIFBH>z7Icniral1k^z%3M?I^x;?&z)nlDRB86iJgqomPv?5E%d`VoP0h at i
zH8t>Fdpo>GzXq~)>qlcs at Sls;=JVvM(hI)_9NhNyKfXUPY{!^sifJRJ&TE`DWP)CD
zt``0B{f>6{pr)o4eGMe-9YBh{?ie$s<U;fO3+R_eqp#*SUnnUpv8h+B{^isMKO0Rq
zDyJWO?zuP0$1()ZDii$49g|@6<1nTdGsBV=9>W{F{WWfq(=wJZoYpWgr)3KNGy2nt
zz>wxRCO{csk^?EPG0FV{q~Th5HE*g8P{xteOmrfjP at Q*VFxt1n3F2=#_sJa+No<cq
zz<H(rF1P@(xHGt*feY^Zn!Pp~E=y at 0-Ms9bqpK^&7nHhJ4e1#5$tn2f<h<g{^z5N*
z%X0Pv+)`Pdo;rWlqQ?Wv#`e$Jt at qso*DM{{KWkt<;@R!Y5<Z)cLwbiN*0$VO4<0G`
zZVCx2<Cv)uciB`023N_rgdrg43t%25+7_qP0kf8V at Yz581Y_Oq-i5Jz+(!5=JhBP2
z?gg!mFNt0kg7muOjD%oiNcrWAlmm=Zb%|=Yx5*@6IFZjJ>^Bc?a?5S)VA+3#`N2DQ
z9mhszFr%0bOEHa)PQnpdNzV9akJkg$p8V at d=@5hV^}xUCGL1u$c*!vI)|{W*hXzSk
zC_*d!0u`0sstS$YxM5|nnsEcmV$0J;<E?R91%FiCN+wR?TYCG6POKudQ7+#`Ke&ve
zrm?9c!me<JOe5JAf~;bL$u&xv>~2StwD!N;W&D$-4DF<h8*@YZrTLe at wIwCsWYfxt
z at Zi8<qel-LSpHvZH1-z{bM%#wFees%Gjb%mWMu95vDFcI0|(}T_Wx?LVSVtVWH{Fk
zY0VrHWnV*4Y!DH9JP~_54iBPY4{eB(Y@=<ZRPi>Eudi{FxB>}8ns^WsXz}z_XqfrI
z0i&h5(aK<A3Xq5<Y$*}zL`O`Lhe4-UX2AT!gruan#05EPjvQN)H)-OKyh)QKFeM?e
zDQBQHE-~fEnl;CEPRh%hFfli85_$G#NH at Z`I9S7owrJfvWXpL^3A3D)0y(c>yxdj9
zp!y=?1W6&I)@5QE+0#yt9Fp?Q{^~%=xp`B<!;V|9161Dv)c{{WpuZ#+kloLD5zG{e
zC6wZ%sF)Z1POHwdlIB39_Ir5x%#eF38K6`LVjl%k5H8&ja%AyQi)71nij|@j#0HuN
zCAOv!gQeN?zu&IR+dBM>(>2fh3bs$O<+c88Qt^=NF%tf`w{Fp_k*#H`s_riv)x5f5
z)c9g*la;Yga|r|!rN|QP7IHdB`=b7|Mj8EL<Z0!3WUe+lAW at iL!wjka423tNK}IIB
zOb8yzc_$tU5`dUW63RirPza4Z9r9u at 6eXxD-E4XN@U-ft1!vC;-!Z&ORx+%#V#2uS
zkP%~w@&*i-R7uWgy{Apet5m7#D&{xqd`=G^Rx)z<m{B>F?7>4U7 at H83@psS}O=Hy9
z{~|^W$Mmx0Ko3{#!ZB)OPSRnCWD9R%LYPICq(C2y#Lt5Re$UBqBtej7r#E(Gdu;|g
zIZv}ka9$wwXKR&aorg- at KUBD|#6E3$WrN+?SelTlS?YpFe2od~?%WO~+a#0;6}HK1
zmN1v7G?P=5h#cIo9ZJ(`@<aNCwcBdj+rj;u(&-bI5HI(_;#_YXJZ`n}H>|e(U(`PP
zBJp%18?LJ#-$CN~(aGS>OWE}pS5U<uyN#20x=Ca>q93R5pP&cB37j~IQCP4ChyEow
z2y7i2+tB`e`<2^(mt0<W at 1`{9-c7DZeeKY@{~$O`tUGJqmLa`K^#&5vQVi5&m+w8{
zFR|}aB#Jt;o>ExHeu!2>%LG|G-OqWtos*(t+)b<U#xb at y$T8v4tuJmRhS|9*0oa+#
z#E#7B*J at 3y?hWEbM`UD&rC4fumy~&WKCRXy#03t>Ay`1{e)d;_m6UA>;ZI|%q|+EH
zNy2j&E$K9KUfS&8CYvF~OH%#XdE4o_wF4$;(VEE2X(?!VcJ4ZO{pK!qe<eG4^0b9E
z|4OIsah&KLO0 at rDEIP!Xr&aE!eVPLqttXIG`*~Jt1Bs-w>k{b8FV0fcL1aSe?Rpk^
zWuhs7wFLtQ78DK`P<ZL5pDv+)NHYN0Pd>lv$<@36vbyA>g9k5OJb3UUB<GGHePDu9
zA5ci#IiwFL<N%o_Q{81?Du-Qw8J(9h9H^CoKA^>*7Fy0oKaPRRF!raPz*+ox_bwj?
zTlT`1O`ty*u+jM?Lu!Mp?Yb$~NbagkQXl?`ZIUXIX=WIeOge;Xwf|i94f;84H_>*L
zjG2Rbqo0>O^!sz2zmMLjyz3?(D`0A*S%Sg at R1FNOQSa7_K{cc-6Beil at YNW|>|U~`
z%bh at n{N+#1t4_E$b%-V#ffzfDTm;)g<+w7tmxmx~z+Zsmw^gf_%x|ih=icP>`Ruhr
zYQW2}Z#}hs!_vj*9Vz~UY=$NhSNl`RWW6LjnA<~p%p=<4T-xg#?XfQHOC0UdxSipI
z_8K%dkxVr6re#ueh$%WCFd!-<Fd!WL3khYzLIMK=Ou=4Cujt^YXr<CC(#S>xE4>W3
zDJD8V$%QwX+;k?cDIzqG^K1-O1S0d_%Vdm@#Aw0-!Z}~5QWG5&!ZA|cAe_h^L(i>C
z=c%XF=?D=r!M{C)ru+`}Oa31*D#Wp?=)`c`w-Qt^7w8IheUUk>uqf4BWE(%9mG#Zu
zGq-V1W(F%2gIU~?4o at vCOhy0h&A0MD8Ljzq_wJpW-x&2k?SgQD<G7A7jO;3j?KUt+
zEn^uxCtNU^BoBAi4Na1qOp at Owy{wT5+ZdwVsM9wFYzlf(w?WA^s%Il9+8DBd@!(ZT
zFLyUNBa7g85a_G%kM`DRLN(!hlp@&2AO#Twtmnin0Ug2NDakl-8>dy at PQHz=$?@Mi
zB6qy=hE4FxE72*Ub*2nNkV7s4hiwRloZ7%)?*~Vtqk4i_0PDfUp|jt${l0b=95ss_
zenzTXY1<9zmM at 3v*}COy7}xLqE-OfY7p*-2Fp&LR0_!lQ2I9p?vXAG3I?_(CBM47N
z340&`^X^0KF^_1Eb7^1VXpeTbb5*2&FFHPVqsR7`N3_Sev at dbAN8@%RXOOWi-Hmub
zf%MY?OQgnagUVx#x2(};winarsSfr;@{<eFGrZAX=NTnu3|eJ)F!6Z`upIVHK%q`h
zd*W+HLVyUH1FMoi at OU~gI$mD&{go@<uL1?|b=#4nmoFdX7_biPgJWR56`2-!U@(ZW
z{oZCvv$Dh6Sa&OIg<A+-2bP^U|Cz{(Btc&6CGSXbipjet3v02k$M%><w8y!$*E!l_
zUD}s8+M{thzW-nnB>Q=c(~w{ZbjP>lEMVjwZW0b(GRx4h3*;;#Ct#Fklc`@7>D&b2
zN#+JjZXnGKNcO`#aHs?3!MqOe7R>Dchrl5|oqm6a{09y_jr)*uH>c}0>1)z3#tmr^
zvCINXW=Jp3*hsBA(*J@&qrG`gJ|;5Q^KpOv at yKTX`d%Tu3^Cq%RcNq*bdg2tRY3+>
ztjegD84aGj$f0~xNHNe0S14kHv!kk`H1tjg&33DcYl%A&cOi}k6>b7}hhW!f)JRPM
z6tD;xe=<`Vvi~TKN1C41vww+se$Kmpb5DqScFyrb3QwRcD}%*w#di3|^s{BB$B~5N
z9l(9+hh^XfyL(<UP9iQ?`r-U0Pz0*`PmTp4Q{ivBaMpHF(YdlS)xhI<oPu0f_+c4Z
zBa$yk*0hhn0|&_3b#IS(M0=b|`w~ZcG;OCjRiu9g9f!Y4_K`hz97i0Fu|x+py6GBK
zfWRZ*d at 8A2<?a{gqm}z5cxq#GYPrFaq>u*-DdeIYa<wCiTy^;lNhA-c4_Oq#i7*p%
z_GEHhw`B5!pMa*Pd~)jxKfeF|PZzA<*nW~wPV!16=cL|DZ)UcoZ-TFs;XO2Jzjz5}
zc+t(&79PU2c`XX5ciSmTh>y@|{M5cNOhih!&MTQw$0!4nrK&)=*}cCRk$<A|tm at 7s
zbogDm<H!vouW$?A!B}#)s0-ENmXO+#x;FKdR9=94!8aoG79^C{yZBBGVi-h|-EGQ!
zBde;fnE+*5fiDJ*1)c#u+n$XtE`4>vy)TEqGRf*Wp|YTIm(F8sb=eO7<bsLwmOm)7
z^6Z(9KK^Fh*r<V-*^9Q%-0^yFFkoj)D9xKTS1GsTKQrx#zhId{a(ATFXkC#Ct&%bW
zOR3!N-rm at AJ6q$@UgBtPc4;qij5A%_E(>t<x0X`98nw%6Ngjn6*-j at dgQDUigR)Xp
zK3?*8P8!MV^h(<qi8G3_cKF9X8;h1}cVddi_E7)&$o_pI`vu9B(rlBDK0YNO)x>1$
zz51yV49We4XtfjA|AX<I)6?y6pZH?qHi0q_(v2K2&~(FF`u56>%Z|@Z$WF{o8b08{
z0C{X&LVQ9(OGJyYC9=iTlGf6vCB3Dukg4HyM0rFdWNLU_P+m~!MVT5LfxFZ?@-?Ul
zD7ZZ$!cts4h at 8`dDETMO<~ULKRvlV>e>a<P!KzuSz4yj;efz{mMPol+aQ+jf3vh?m
zG*6jD5|`Rev at ENcK5T4BrI6<Vh8GpV58%i0^9QYS-*};LSW(eSe|i1Y>^V=2dF-3;
z at IqVhXSEFtRrSK!z&e~0gw|#-J at YZ*JY6&XFj at ON(mwDJ?TtORvo$X5MUMW{g?0^z
z)yDn*MR{=<r3c4w|0!y36xtQ29Xi|D8lhc7`WHF+PhZA3<9nsJdPp2I-I5j@=&SSA
zO8u1K8b%T17v83bYLnJ0{1(M)V!gFSx8NX#<CMBUF4ou2=oXvB^)qI<CC8H(V8S8#
zbdCM;9mkwtxQRPBO_1IsCcbV-s7k<LsPs(0*xn=rH6EBGCL{VkEg0yHdLZ(yBM#tN
z-aZ50gWtj*;om^^uQ4UPbo~?Hv1Fj{{nVtu)!&Z;`3dlygrT8zm6dgM<$jX%&9LSc
z>U{<nfBhE3D-_way*E!<5}Bp1RS!w)m|{Dr)g1Ze`*+{IJ>!UDJ|#QJUL8T!rJ1?n
z*pob&&ym9V?(ea^vFCQQzT);0M|-nNdy!+D>7?o>$9%>#ORn;5cHDc5MyKT5l>W=z
zd|LzkG*Vv$6DWeSK8xh;d3 at 9M2oOx1MZ}&g&CDt-&B`pbe?o79;P|W1Vk;AV%!b_}
zG^BKONDPPu8M5b1NUz8Wi1INR!;w)S1B{gS^9fXW at R8yE9&J8+TljXL`Y2>}MXI!3
zf&L+Kz!<e&ej$v>D_h%-$qq at 5B1~deEYiCv7M*s*Lf{mQkQHKyu8L;udWBS{6%vT>
z*+79uW#qP*rrV|I!B=33x~#CaLaQt<tSJZX0|vrl at VmOh!}pKc)qenvHlOoO-rf?h
z1GJWv9{B-Y8$0&x+iQS4??@vKG*3$2U-JCWV{>uvd2-U;60$}l)|0GhslWrrdu(s)
zxgGI<xV^~He>!caF=3>CIo->nMDgw<@6QqM&b#mO=6Ctycz4g8%0>S5p_{$8|EGBO
z+qZB1zs9?R?irW=WxPAv(JkkaM7%rRy~y$I(?^m0DA at JGRVJnZc!L~`6x;odv(sM{
z$utb`LajNBxc@?xiJb>jAg^10vnrCEH;)nbhjkdQ67`=Ct}=|XKeFu at K8LgqXN2FN
z`o83MqU%KpI-`~7h9p;%tleON2inE`RVJiGqMm4+NQaz9{n7X}xF>2KEb6}m^-t=d
ze-Y~6)I)zKJ at Gx$!`2G)5R66A-z4;Z%-&ymQR<D_b4h!YJfLeoY8Pxlv?3cE=fpz7
zi_y$umL!^c5gEEODwt-XhVP7UWTMIpGsA*Z9L`2H8EHOh4Bq at 1CvJ7>Gj36^0DDd<
zzGJedxMat+#J&>ypA%DYbOTm?Q*?%Zlb{OU204f+_wRpnnyRU(qUmyz({?BPhV%x^
zZ&9Li*`KtpWiZF(iEVwfUWwQ`@7CXp`4FGr-TKq at eYiheUzh%f4_~AF$(|zZQ4T%i
zu)v>r4~^g8 at EOEQVnK5c`bMpjKcy)Gf36|)#0cZ3OQs6^xtoliFYb at Vi6P@BN~Tl(
zA^pv$J)ev}k2xpmPv7_9@#*`zj1P4fLlU*WB6+&&cDMdA)V_`14SXH_3C^ED{|99J
zShBA_#OF9|=W<B<P&=L%!38v6{!bCIX$1pH_)KxZX5<i)Au~#h&}heKMBm$9wsO1L
z-n3fZ#Q)kl%LS-LuKFP3l5=WweHy+>dt?si_U$YKrogAVC1>#|ZBv?Vw83v4%FuH7
za_Z3g#$qoHdf#4TenQYo{~#?va<6$Ap5=d0xhM1|eBSjX;d9zwM)b at 8(msGu(%*3U
zkT9RSjGut|U!`)@b$nQdaViDhl9Zi4MbNKc9s3KBGX=C=DyGNji%KHCC?Q9YH#u??
z_xwNSC~{^pU$8{h5A7 at RJhhC8<BlRi<Q6VG++TG&NuV`dGFIxXBDA7Dg&eLYDzmVu
zM%CFQdVUbBOo7jSB=ZtS+Hqd&A-aFMvN3;yyTZIAWBw!j{VC&y`o{~;O2)aVq}`3Q
z7cq{URX&38W0?Ob^^;4sLOE!$T7R{@XSIU)rSQ5#PRy3gM0CgSsh|-(FTr6?d_&v0
zcS-v&JKY%L5!1*2N$5+k(~WaTaXYu2v=4KRkNeA_r0;aqiO1)|aDQ2pWJcG^F8x>I
z{*0BI#vE|zAA<WcR?x}pr~L`479(jD at Nau5y*wp6CzWZ{9<oNa*=meEsr1sgOL!l~
zJxZa`c*~h6mBJt;5V#q3csN1rOn2f at V$%d~Q<=#q;1?S865^4lIeKL<2s+9!N5H7T
zuo}Zsg8eOX_p(n}t+43K++S at i7@(37>bi4?W=73aSqv(yCQGG^`%VSPua(I)oKgjV
z*^^OuaAr42e+?puB)O`N+R4G(jA^k1dMG_q0rC)Sg0 at Uvr9GgPOO?Dzs`gR&s3jE+
z7Dvi2;fyrBjLq4KSbba8XIsJjZI-Ku;aTshY0KEwCfmo4O<U&lm6A1<>?doSB(i-{
z(Oe_#rRyWqK7zED!DNgrNqDoItZ|ZqXLph_=oJY^+J*jP{22~kY`kPE^`DXPs~xtL
z{S2x^o9eIlUW}b`5$jGPST((?hv@{<GTbgZ9jKBjndpK&E!ETwWODR`&xM5WiIJh8
z8{j0oUNpvA`_=GVbNs*T;FEytb$31oYf;_OW?k>{d&-{`rJuW|(RSXz3Fu$p{BthW
zDXXc^nCi66MD`|&Y(T1G>?b<LNXHqvL(nl65*Z`zPj!s_<P7cJKe>ngSSBrS_9wL{
z88<n>-8M1fEvdnq0wXs at 1U80l3isXUkM>gdlRmQ}HZYBDa at NOP!h{8BLJR>0#!nLx
ztv6~IH;GZ at 8AZakDfA$|`?rG+lAT2$rYZV0+E>)uF9{RF**|nY!>?(9e?nZ*+nv9E
z|H=jU^W<mt?R#btP<$-Wx7nTtb!~0<q6VX5!&C4B^zVIZ at AMK-aP12)WK7=_ at r8}x
zJG(*hm$gi9W|1XDqmTxM`+F;-(cz3 at r+@gfAxvAO|8AwUEm^<4S7g08+B-m#&4n8j
zSzNlmTXsUS8NcGK+n3G~CmE?BhwnCStDxYibwd1G0$WnS5ycVB5$zHGBLPPOFDNc(
zE@&_KUkJDmhyhB(NzvV0V3LPiV0IW8N5(WCG_0bm=>4IG8v##zUh at f%iK+AA(o=bZ
zFD-|^z*E at 7ZFygmOwICt-?!_e1`HowfF|oxAiwbD{5dbbS~#q57&59kZ0Qy{&SL3n
zf_!Ks^1)2nNiMI8d>Cy%8>FuZ@}Zr`0ii!k#<{=bY<P{dj~0!O<%8M92BG6)`7qi=
zJ`j9N7kW}jJIUL1p{GRDpPb43XN3R7{i~6jsTsh~-n2i`u?xsOUaH{JyGi>a9XpQr
z`bvmRI$yZw7sj{um&Nlp3H`$O_Wo?G&|i<nzd_En`B*<fPfjE4Nk~W9D``Ob#eC8_
zMxck_P?GV}g!utve4H2ihcpYdkD)f2q<`0^BHT*!X-^{%gGm}FpyVHa*dZnV_~U&m
z>wgs7qqve#cGUK*Rg`xd#xSDHSTukGL<fsqQ)DJmKvEnzvWE@{S+c{5j$SP)+O)}@
zDGPr%`X<Shwe%m9bMVch^voc4C`3=iw<qYW`-prZC5Ts=u{Q*@mx}sRS$UesN^yTG
zE59JJQrw@)%7 at 3Nvhtzv<#X(JI;@q|fw7MMmmR(vEAv*@VVCifdl;X}R+sVNc#PHQ
z7=J!^vg<DHk9guDZ*q)3pZ$jDjRb2_HVgBvv=uBs<Mg$+%M?_f1PjUdW%hQ-8QPz}
zO8RGreMy+tD{=2~!QVmqFLB&eMdQ0FL=VBUbJ=5=gnp7&=d#BtNIUKS47Tg|yI^g%
z{u=b$rh*f+x2Qkn=}ckI+$PVZ{qdfupnGPp!)_utOGxiEc85KpLDw>=j?EUK9uX*{
zhzP3_^XOJlLEo$e<nE-)UBDs at W}@+F2*N^f4Op2}mP|j1a*f9{s8iEYiB^HHnMCzB
zKnVLL&@F4L9Dn$$rl!4n;I_{9j+_`Y_*C(a<G~+G_7 at kA7;dk|A-P;W{>^1YMcz#l
zcU_-04V_VA#~lXMgJRXT^;y}ii~IF+)aDT6;biP%;qn<VR+<vqvcOyKgQ-#BTrfl*
zQGqaxI3-L)H>63JAT~N7ae7T$uU>IA(-RZeF;*BJS5Q!YbIIbxOK#Q|6vRPkdpo#s
zxVX5q6nrqIw7B>%cNTuR7xKl?QCl|Ke&4bsI;wa%fpMWV$}wF?$BsaB;OEi5I&a=y
zElrI{qf=!Hj|J?GrDxZ8x}RJR*e3WYZ0kIB1b)TtSoc8%$CX!%Jua88<Ek})4WG*b
zG&6s<vS*May1y%rWec9&F>EML-k%}wuR~{b2!4Mod+1pS&;yC{(Si1s!Z}@!wkvG3
zE7)5*Krg%d0QlgQ-G{;6Ch(GN74|*aey3<}+&s!__Sz_j*R-h-LNo%>PUv-`24i1K
zWhMPUGGM`ca1aiGPb`C9ic6dD(cgUu$HQ%~1CF=!2X$}%4fJO_fCU#eA>+#|(zmch
zLyD)EBGsz2)G$1sWF0X__cl?z(hy148CShX6IE2X`o$Ml!Te?G`ev#}jjqP}W=Js7
zH(N|ortJHC`gBCa_)1b?<>E)U!pg;uLOnH)4;qBEPeVjyGhF|6WyNzlY}N2+aq(V?
zZ72Cy@)D_ajm5g4W9ZGjT`39z4w7^NCu01%xs470yW09Wv!`H!LW2-N^{VXbS(~!5
zGc#Atu=K}xc4cGjfOfjx&yOm$Q#2cXwtPVUNt6EgdCF9ah4|jO`5MWd?I8RYN_H%R
z_5L0<s#;~D`!gFCcKPHoth2Gsow at 4!nwc|a{;*1NnbvnXc2u+- at 9)~O1($%?yhXqx
z$NcV(eM3U}E^!5+6~psF|MmlZAQq7Mz!{mm(H68^^1_iLoyTC?p1n;hyY8gB=bE!i
z*Qt(=ttgjPd>|=6q7DQ0Pn&jq*F?b14QGMIre)_28 at A)w0zR*YJ#X$UZ~>ihKpj%T
z at vEYHUr!Htt{^dCdQGpmxL!5W6B5C_t?f`sHvQryOBT~jA8zG`W8Wv*_G4gbDcbh@
zy!+Rz%ZsC;w`^hEH*blGE(V=@K`6nUkrSLBTw$3pqOGn3RK%E5$lgy$&IYNb-iA;@
z2NI%qO#meoOQ}fi*XNfhT0fiA+%%_NqH>QLFr&#5W|D7#-)w(&$FpqmvpaT-hkNSd
z<Kp7Jj*l;ou3WcokTl!V)Aw?O&MPcFF~Cr|Yx8DSv3bju&G0_Fw`nZ*dQ}x<##dE6
z20Gt!t<8fWTT)0FGlS!kd at VU}|3DkN99rAjz;fH_m69xE9addo%im at BcfpM-pb9OB
zv*y50XzwE{69__9W<cv4CcGTxJF_HASPK4^snf|`d%xdPPhoj*^@~rgz!kW-0RN0l
zRWa${k&1Gp$$PHaQCz(5yN3FUA0e@@<@|YEUSRZd at Vh5=KKG<cZB7O_(Nu&?Y(d?^
z;5_2efyqAnk5;dhjf+=p+Sq%*voGy#U-`6$we3M8(&yhedVI%j5C*&&|CGD{FE_U?
zZ&|*g>A=oy`!+ub4 at E`YxcKVXkf6QGUq5ERGOuemEFtxS(9Y6^qs0~Ww&|hLKWGMa
z?s|FgB>%9-BBOw~2+;Zkuq5Y)wZU#fhn|(hiX!B4;Jw;P^o&f{OwRBm^gx4<%`6k3
z483LD*eZ?0cc)PKqbJygEb9>*iO+P5Z`jaqb at Yf4Mb5_U+l3~HyV5f~B(iThhCDRC
zT0YLrU3-f(rT1;+E+AcCT)DfO)*<U<vym+BjlOxL at Kuw=wig}3($OKZC4+qnsr)74
zt|e~Tv?KqhnK^Z;y$sQwy|2JUL|QMpJxsD~Tb4)$pDG>u%ywLo=-KV|l0=b_7cStM
zL>DfE5;@@Bl_QNNG7qt*EBZ5FFf*DWk;3m|#J2NJ7<!1^*9QsLwD;NMV{j&Ge)|L1
z3a91vXSMJ+%Yhsarc$t{*j+PbU?AujGi*QFxF^<~egkZPtxLCX>=x`}&F-?vWoVtu
z__R$EG#|P$L`5Pq;0FYmBtlwJ)5LV0#JzoTc2<lzxb?u4smV#@#WQQ>Lut5S^o-=>
z#kOU3RKs!QpzLc<U;ox~Rn~xBme$2j&YU=L$Us8`7!O7+H}@_Yh8-k!#KY;+&WY+B
zsmMN|C4kW4=rHqu5bTaOMU6jw#%Kj2cn_<!lUtIJInkH;P9xFpwv(DD3~)O24fcpB
zcE_K8Vo(0Pdw3YG7+XQuE at Is%MhCeo$V9)7>>)Qc#h%sXsG5_ShWV6mk4!3g4eIQr
za!3gXTtR2$n%)IDh*Lr=QzgCOID6F`M=70oEMnEKhDStlycnMlojzLEV;Il+LtbC}
zd2RNbuk6Y|P|(BvUt8-|{)6X>M`0d}FeD^dZ4+H_0PPs<b}T@(Sl_lAkb?UhJG|Q4
zk%A4Xtz1r1XO8f at LlE7$lJD^y2mM`6Akr)`0le>tNHwGFrccH>;ClXSGi+G(9X#J^
z+ddck0mo&5{euVeD(!Cw=Nj_U2St6o>XPLPfPI$(ZSNq3{tNJ68ekTN_^?J};WZz3
z1^D^#X-ildvnJ0&YlQR|qZ1JcbBR4=<e_gI87ACcDc&DzrFegA6~+5wo3?I+GJ^N_
zGKTx(K0}OEjzRvox5ZzfBb~ziAz7CXONg%$X{?+>nwq;+!l7=<H>of+xzxm|9kE7@
z>sVoNnvW}4IqTy*_yyjaS`;p<6O!A{q4PP^)laE+UL-kpsl!7#u6(O)*<xWo3f{@-
z)6aIsqN%;%*mxw?!(M~O9qpPxw639y9k0)bUPv3J(fe>=EPV#o>{?R?t~gRL(%q(V
zFRpltz2iQj;>f!dBZ9!w>?LPa9qV&X0uB6m-A?vvpjiFf^Q)2GHyX+0cH)0Y?!vb4
zF6p1dE*g#Xa(*I?i2<ZtQbJ_pX!x94UqoXlzPq6mCKF9M)a5!2F`W;gTU5SgzMW$D
zddbL9#lYjYBb{AG3Lh&#Tlf-r1EGu!rMfaqt^V>~4}8&<{qo%AUNX1yNQ1<0 at lZ7z
zN>_=joZ#z5p{3H&mGIH27`t*!4;)G(z(!5DROKTX4T6G(^bKAKkJ-*sAjH2d%gN5k
z`0Be|wh6YM>c^FRU0x0^@LtUc2>}~^!{I4*T*UrrH}^fyKfoZA%Z{?x&&R*V*mY+T
zd+LvOB?uF&T!S4$xF<^&DbO45ZQQtV6Al#Zyx`QJ>lYUl78Wk4mt3CL`2Oj6O;BkS
zTeMzdO4hF%T_TEAL3V`_`^JFI)p!N!hpdZkhAbh^)r^JPMKZ3ht38V*2*;K<?b!$C
zB%4G=#&NM-D}XDqOgX$p>JEi5(O5H~m%p_5CRRpB#h*w#BSQKBu|M(r9AP`(2HvE$
z&xd0(GvZ0rpTel5l1v^8eXxwy`@uCZUceQ8{5|92N=f0LjUlEk2CY(4JMed@`Ga&L
zBgUqt7DhG at jA^Qc5;I?LR49QnLq}rX48Pm}FFyTrMde3de%QPB(1J~GOqdYV(!S=&
zCBS{-rm<tMe!0JP=e8rC2DRj+B+qU9`dDpk at 3h{DNfp(-Q*!e<Kz=VDp9Rg=4^5oZ
zCoOhT*{nuVgVTwHm`vp<p$n0f1-em{Y^O>pG7OP1wBY(g_;c%`9T(RZThjW>T$D4&
zt)X at LjLQ2>P5JqM*)Yu*(Kmf&>(HTIXgPyNm%P5}X|qw6l{z5Ykd{^h6k$r$sL?Mi
zE+~vP`Wp<E!N$m}?0Hxg6eE5P#<n5*1L5xlFpcw;>d;P0!CDKV%Ui}tsoItz;OC at i
z2~(MS8&j#Nod%GGi&j>Lv>f*5gor9|Mw1#lWYAD~ebLU*7Z$Gc`<pQ`J8>&0Z*9mA
z^wR_?;25Ay3<_F$NG<u-*b&)jJb(Y<oZR$+qFY++xavLpIo8A2ew_oO(gx`Rdkuq^
z_yzHStgN&JpG`?Ho%mBDT>PnM4Z~a#MAK3;L3lUVL7;P7D&++Sv8*fp;6>qDDIsoQ
zm4HJSA^3oG=o`o8PO-ayafnv>N9klgH*&jiS)tCmrz8bKggs2F3psqiNDqjnG&|h^
zuG%}DXF-X_gbRC=4GJDGI5fzKomfho!if0iomxoDqUY@}io`WcYA+$Vaf8$XV~is2
zwS%*Clo{D{yAwOogoL(9x_HdqV))zq=4gq5db96;b1r{quU?fugooD)F}nrmeCeP*
zSSdYU?vwTubk;SH^QDxh=gUPhm*os2#rca-4ljU|#U?>0bv2l%g at m<ZB(|_=fF_B}
zg0Ho)*Ph-nX%bj8Y2t_x9qjcL at YNsZ&;RO6Ti{n;&7Uvnvk;h%g~E^E at 9?vZZQD9P
zG>~*W6?zPQxUhW3b6>y{$KHGI7|8hIxgE6LJ)(i=6XXCxvriRrT=E&uxl<YD)*XF+
z#NdpkKeo(=+3-oM3=_RL(hAJz8M5}plgduv@!>+>q92Hs?AMx=N%RTq50<W!T)}5O
z(s6Mt71CF5C=AkX at xrH=$-?um!Pnq{-L~E>;O#S<?hIHFm_MK&+b|?2GHJi0Tquv?
zg--_7$Uc>jJNzrHyF10XlkDdQF$QdJ>B)e|*o~AS6_GrQX0|5)9Zmn|OLQa1xGO?l
z$n1o_wAi-I1{YLO!}|{$$Tj3PCCy%u$n8qu@%Y|gE5(0%@S$;HZhj%SuJf5NS5%ut
zhjk<@-|bLrScfO2Qow at iU<Q~)>ZQQV|ALF*GF&u;l^zB6aNQK>an$xZEuA95mcx4s
znPC)H2j77R<8s_bU&G(P?RlLnaNF_|U<lS*7h7tD?MLAmtS*Bx4EYABjLk(d_7w3&
zGl05N!^FuAI9ps8nf?4)-46H$Jk|K1&Fb;=%J$taJv#un!I5p;$6T&%l=bfyZ$w3b
zyeBvB+qUz-m*8<kd|UTtxB<$rJ^B_9=cd3-+{bNjByj8QQ`k|*<+74C*nR^p{!;8q
z_`7u!eg>@KPoa4Uranac9>i!C;eMd^z?V^M3VIKuG4&O{2mAwkIIlAtoap`@Ux8{o
zTjV{^+ekdnUc??b at p*`rQYsUc0?CIkbC~1Y1YS+^o94|2K|7w!o(nJLPli?O at wNvC
zu3ec1bJ&#7+`P8N++2PV7+}<D=FI(Q;gqB41L02xVE(U9ZEiR^ZpKSx<8t$`{fExz
zjdTw>P;N!bWC(LOOMH0t_|b0b1Q$|g$%|ZG$k`9X at 5j~>XNf<)njIv}A@*?cJ at A6~
zA?)WsHmEy0z<XQy;Z_*l06sPMwtnmKoPkz&V=px0vnamnYmP%_5!#1ZdZ$M?4_DJo
z04ah82A__I`S9%?n6PP6z}N{VU}xUaEUtkM2r8 at g^W*vWkRfxnZId*>z1B7I!qGo|
zc{nuu)W~o{LgM!y#|Hm{<lAE>T?fe}WeC<^$ET9Z_hV55lDX(-Ts)4u0xkF+2(*Ar
zWSupry+g3oF~S7q8X6`?5GTNNxEGXu3QF+ at -1{m1;EH#GFJb7;i#uT`_;M%JKb_B(
zA<3yTn6;Dw@`txQxXK&tcP@&B_#O{rOYf4~U6Z}tBNgAX0gFrfsIHrC*J-<?owVl)
zci$y$0pxBsPO^ivCkXB7vTG!6snDez$C>2PcFvu&4-;Z+O58uB<H&}S_9US_-E9r+
z at 6wLOk$VZ_UnK1#MDfqgeCl|bH~mm<Qf-+y?#`JT8qa-A`g>v}OO!uS`vfD7Epg;K
z#!DV|j4#f2s1@=Wy64ix3%PXNW8-TX(fzRegv!LOkvz^G(ny)@&ihp%F84UO2Yy%7
ze;2v8JixxJa_xT$jkA(J1s?CAfBYl*Z+=AoUXSSC=F(rNb%SP1>Rb=ueOU57PdMYz
zh4(2X at 3Z@%{u1^O`dlZGkb7oP9J_27{y9Gu48%X@$2#NFX&yHnmwk_nyTbl^vRZmy
z4vv%i^1XI{sPsOPuaW2*alLi35L-<|#Utyk!?mE{b=Lp=_y2wM^|ehKo8WIvhaW1y
z?yO0pBzioOJQVX%MdXq3Kh%rCz8tRZ!UZ-ykp_P!CV+|mrfSUAt>CKl)#1gjz|;f9
zBM-uqM;4CRZI9EUvBmL{Cwq*I-pub2#V$Kzk>jOO(x1e3c3r at JJ=)IYk at g}X)_FYk
zwU8L at MO}BDaawRZzJtN-%xk25q_e*`ZVc>m_7}&Effq<S(E;dl`3?BFpozBQGe at 95
z7t_yXJ7QM5aLfR>>$2yGtR%82^I=&@+ADgHl~^`axX4O6pESncNfKkweLhz@=aZhl
zZY at Zb<2w at Sktan->7@)(yUk%P4%smJDV?2M)_&lncfpWN?T7_GTvBU$+2N8U0o-f@
zJeXDY70`jKCTNCx)~?^!3}&?2o~E8z=nj6jTAgu>Wbbby>n4tqtR{Q^DMIfE5 at SGR
z?@Ywi3cT_ljAMzmg`H8_Fqz$*E<$p^-i1ivauMtW7jCfvtivjxzZ)G<9OC5-&O0C-
zV9tDS!P_%*)WESAxB=A8EG(Q^2#PQ345Q}e_Y2TJ=n!xntbDakKt}%DQ8}IrFUX9U
zNT&NTsZ4)N879VC8Xk!s%sGgZ{-2A&u`g2s_uSr7oKrTYFg2|J|6 at 1)$69f+nU}o{
zqi*lnb9>Z4PxvkRJ at gix$Np^rIfq;$ydynAct<SP2=7QfB5Sdiw3A$Tmw1*A!RG6b
z7zAE>iS$1#IydW4{}hP@%<q;rg!{L<$XVL|1=Qa0uzV(QMjhh*LS6<Pzn+XQ&ikO_
zuYM?xgN~orV_r#zOMi}><79k3f{ah%^ShoUe*I~}IWA+{xyKQw+RuG5KKG?4p5H|J
z8yx*RxW~KhIL>`a|4}l2_n6XlVLrt%sFeQ4dyHA_aOqED0_pfW$oS%zLpna)YvLF}
zI{pMQzPLXfU)-PSA$0t^Wc==NTkZUbhvLrY_^<XDN7muee>sd6#}Klw at JEFh!e~(p
zA#S(F1V+=CK-6;4B_=SM!~~jXPZ|~IdbUX37v;HJbmY0jbNP-u7aZ^Uj5JZ|jr9F^
z96 at Fzu><0Ye(E&h!jni%k!kpf&(NEAYxO?n-m-8b-T0&sG-s4X7rK=D8yj!g3U{rl
z_5s*MRtruBYND1NRKwNw6s#CGU9?LPzz1_#5C7+{bD&tuV?S9D$l({n2XNR?_A*Y&
zLI*ObQ_2+Bz9qK1H?iFXyFD6U;6M}h;EAf7R)V0nj at H)2#7Z31PW`XJV>N5aCQPa!
zcDwCcVz)nPED<XEU^3R!q*#dqon21G8Z~uXqjSF>?^z!sc}(kE_dBe^F$$>tfFz>F
zysZO#i)jCn{o<ncwmbKWpeODp`rM&M^xyi3{s%?-k>+7FKeQid9 at axK<j(QQdq1>~
z#m at o%5XBc#9VL=HUmTA}@--{H?D2 at WhFzB*Ka13c4a4y!X_)<_CU1ReN-|+isa|J5
zOBI<ENzQ(@rQ+$8WnI$)Hog84Jn+U656}kqApNqf;NJD80GP25uwPfs%K!ZD96Ka*
z^tyGEhiN+i%dKk?o+Zl^@Du+1v()CED}?DJ`8_|M#QocrIZ^`t4KX`~L;y#Y0GWp*
zG!IqCK9^w$Y^Tkr7P*akAd{^j)WF_$$8mSE>||UAyM>tCva)UjF at V<aL;FNSe7 at Z)
z?Ok;(u*bdJt*#!8t-nKR0QSOC(luhQdnHkE0ACOYQ;Q at Gf6<vm+^xc>OI+V}N2;eI
zx(_CKb*no{(~N1TpO=-UeiA9eF(YA#>^9<qa4H)?_X1uLdtEF_btVV{P9n`lo%8+p
zi<nNpK^vjdR@;sVg%5xP6AC7XNS$DRH|}LbD!c?A!29qMoB)k)PjMBkSk at i%!o<Qb
zf!4#*rU@^Ic!ck|iFBHg(lCMq5RCVW-jrreNdqZbpm(!tmBh*E0s65fkY>m#Q&jb0
zLw|Y}oG*h4P(@TpxCUO>3vaM3)_;zC{Y+n&qINGT^Q?-MB*Di?zs}u)8p)-ASlh|9
z at H;iRbNLfJzZyM16l>(@*^%^Cli<4J*csrXw-;MQ`neVmQ;t=8k1YFj3o;DnFIzW#
z&W5t5T9p1anQzo|960$t4R751*$3=pm1fGm&o32~{rVm-fokwvsBbjt4ga2>VUv!^
z*s*)>cV8X_E$k(&x&j`7f2|=j{n6FI|ATKsG+}Q&xg@~oLS`prIuT_YO}Wt13cRrW
zy;1K~lOntgLkky`tf-fIL2qSHCa%P5$*SA55a4>e*7r)@TlpyoVD!?rlq|n#j)A)2
zNmCa!u|u*>{}B=-#G2rIH|ld11(}fedn`k$ggBEw|HQdtLYRr|kE6EVg}gDg>o}U<
zBs9N1I1-g$l%d}>rRk~r56G}~?grFg_9-}}ZB$u-q;WZ%#Lg|Vee-^29mut^pMs}W
z0xkLpTy@)Kwyi2-1K at tEqyWAJa`D|B97yi=@`RYra15hE;<6Ce<C{<6DmcMzlcXf0
zEgKmo#D0bVy9GnPB(+<(-&<-8gO`n;Y#b at qg@&os4L*Al`W*A;vyDX?b`Qz_ZSuOq
z_Zu`_%t!7ZJH)*H{D_eU=A4j9dYPi52DlC68enZC5Bg<Qp4Ta)a!vxG-|pqkHYn92
zj6UARn1X`Ezvl#6;ICJkrP3kcDlenCaM-H9k4%+#C~7A}MC2C&!AFnImsJGAlnFC9
z4*OImp~9UYdN-i?z;W=uosk+DLkY=k+PZA~q{v}fhXw#TRz7Bopce~>!V|rO*h8J*
zyBA<J!Z><il9C*uiZFyBdr6mqZ`NzRThg&@F%kwxxTK#=e<Jz(`8_yq(8{a^KEOv(
z{^Gjz`)!-iPW$C2 at Z^u!iy9Wl*yE1)c(hLFTRR%2j2dD6Kr)Z4U-STCI at Vw?rzt)G
zd_&gCK|Ak($W5agfA0M82q?yoP66Q~Plbp62xrY36x>LzzU_JpxktUl*z@^meR3Ri
zBs%H5rLm6tW^(x!0d#gV at ivmk4_SHeCj0|T5Uf1V!FoSr(6Ql{XMR8mf(x~*Nj_E>
ziFb9#SG71q$KmS{rT5?4+AY7|Dcd>D+WCQNYQO5CXNknOT70-WYKXIi_GdvEKG4M?
zo*-Gg0zNpfyVGXnQc3kjhbUKx;&?r99<a+vs7~pI8Bg!gow4j<5Dg$YapQ&-xKuC~
z9eTVr%aLISKOGSr<qU3jsb9`$Np6{%LZygq7Z9_KLZT1^f<EvpyyIGooW1(yU*YHQ
zH~1&~G$sa^oW;mlrU2<H^Z7nVUx~;1ik|9HscE4yX;`>JML}Z39_j7~uGIUm+VW>Q
z&vp%4_bX6Hc-a5YBC4+_JofF|2lUUCmW~~-$;z6&xuA#z*S7*NcMi*H^4Nd8pG&nC
zcef76bUoGXt51Y?S6eKzo4&53zC`IjGWYSWJSBVB`Z0)kJ3La%U~xlT%^lEp2)&Zb
z`06_+uk9ES<!a;HyS=cvlH5z~d7iQJxO5P)!4ibXI2WFNh#w5VMH%YO<|38=PQ}9N
z%I|O2IvJuGz9O=%T<fsoTNdi_(J;=82fLpYd<IH}jjJqz&2GRSoqV1k9)1RIf7`{x
z?)H9i_R0lpspk0ZeefW9a2os+F~~3Q+6!;YnSb!Soay0NWUe!TG0g5zN{vXdmx2YK
zVE`|ik-aLEV+YK)z#B=+zr%l_fxiV8T*|S-Yv@^sAwe2>PA$?s2cYM;k$5ACJ(QRe
zN+*#A5j{W%Qqc<spNRx!VK<^FjZ1(p^5Le+aZx6Br7=rH#YV0A+$#x5{U*vA3%P{x
zb1Fu797v&rttpIrjjcSnCx2A&$P>UgK5ZPPZi7bG$i-I1^a^cH1nP<rP1SR at V`{gR
zES^GS`^2vA_&PofdlGSsr!kd=R+xk{mIQ#~J%ay|xCfq4i~V%*U|S8+NZ`48kNn(<
z=KdM!gBA_Q++3CeKvv;XTSrC7>fmqhf4S{lP&#GJ%9UKN*@K3&Am#F)XcI_^%N`Wp
zr){vgbXe*@07gV+e4m~<bpPU<5ncg}43QPz at l}*AK;xivWTuQH>VRfGm?)095TPWc
zL7jSD at 54u}T)AdSDR_6=m+!;h>SR%)wmwyu1wc;O=F9<$2Bl~8Z?4GA_ozPy0a#eW
z^%~b0;58y=@&2Ki>ECBWjsRd_>abGt;I=;TgR<k2fGK*=<rKgUA4KVr^+$9KBs$A~
zM^+E3&fOfea`jXZrK7hzn$mH~pV8v?o#^IRe0EDeMERiB|3rD;u?JkZz`iHGkW?dH
z4aQcIG1VS-=cFAU^HMeO!f0_knvA|Nz63$EN2pc!mpFY*divl&t0N;<<_=EpJ5!Z!
zw0!z$WOn!{v}=MVPkHmrDU;#X at SJXKzXrGt)DN06YA{GnsTyL*YO-V%j8EyUaWgi<
zA3HbrdwX!OV at -8#p096i?vynhT6sbT7!G>B8SbMI>_Uva;V;;QSe13P4Y8h!?Zb`^
zk#O3)8QF+1$!go>G!xl!M_uD|A`{)oezglbBpQ0Y>cL8ASa&(e)qh|&s(QHWS-SXZ
z&|7S<?iFmQe{^2&e&6$L`{w6G^3ri1h3hifbATR27tlIPLN<fzwY5i5SRD{(<xSSk
zsve#X!$1`!kjRHcU4QWF_$ZQb=bCq=6(u8J<(!<VI_{3oq`bm8LkseT%uMPF)`MGf
z=ghIf-`mk2;9fUlMh*MX>`|FDH9!2brZx&hje at gN1N_&nyLW%>Iv;%;#B1_6%$E40
zcUBUeMHJ9yLQIKc>%zkAcN9VmQksu|c$0l6Y4J#7=#mAQ8K6%t__(P7zI&z2GQD~!
zoQrE<z9ZDf+)*+LBn>>ZU}A4Wa9C(s_0kvM2y0f~0&~lRm-jx+`dh8=Pg*VWn@>KX
zd*!eE6+V_B{#0%6lw^PoO+DJ#y$#`<V26Z-Q>w^31p$LSRg$DHpw}4n$xXn4$g)04
zFijhHXHI7B^i=rIyN_=hoLq4xSmQqntndk&oTc{+_luPd7|tQvcQt6NYS#{d at 9vzn
zc+lj&!NVujZWv&C{RhKPAKMIrHXzzJ$e3zMbn7=5*Zzeik`1`7Dvoo&=|?>Wp!2_O
zhYZE?VVfzI4{y4^r-`))WqGZ(53x at OTyw_a6U?AkYD at O4H}- at aBvuhDBSyNGc0ak=
z$?2ynV`92jc^5D+&~y9#hvx>dE|?gZ+`p&cVR(#(NrBc~)`gD7h1OkQy`3&rl$#LL
zQ+9$F?9e4s0WPc`F|4j`*ob<Xvj9r4SmNf6sH;QmwPddI(b#uM4P<KlII~NxZ3Mr?
z^cwfl;h~R#5p0Fk)(5ASBxVbKO97XN!AP506RxTz5O!@VyM8MmWZ*KqogZRPA9>aQ
zhT*)>dxSXN0`D~g;bD7LuQ`Q?eReV)AVTk3Yfc)6UdCIAzKY4m84>Srp at vM=hM|L{
z;6RgYtXzk`E67k#y6`i;MbFTQ=L&6;uw=bsz9R7sPfOwY;%7W_4;Tg{p-1fB54XG5
zt(>(UKg5 at N@qq%=Hg*2i1SCT|RpYCq_WXl%?yqQkEj<&oYF9P-8b%=!>C2L*n;y8q
zYO!LB$EcFFqcNiXL;RaF&nQgC at 9#Mh&OA#%cH%zkIgre at kYp4=EsZBb_L)2ht=s>U
zFY@&NEnft0Y3Po#L|8BJSBMqt`65_${10 at f|9_$5L70`b5JJd$$_^l%Bolo at 4S&CG
z<!ds5A8_%8_v{+yuM(m}o1M^R+d*lwt-y;!XydGyIB118MLQk at fsvR#8_s3;-ToDJ
zkz+zZ*EA%Xb|N}yT(Se4$Auz8x4Jv(Yj$_MT?_(ONA?z1BsJR$PJ%#(gWsji=(({E
z;R1EHAkpsa2^@$OTaUmMAIMhjG#SBEe_yB2qq+b(2P}w3v=8AQ8Sr_tsI3hYu at k3&
z#<suNHcXk%B`&nB1OHmMu(O11wsp-H?g4L-d|sT-gU%`5Zgr_u5*+Y{qnNocbb#V?
zo|E?c6J+yc+4k1QNAYkvA00mqY>}AazK)Lyvge(^EASq?f4HjT^2cKyWBD`1;~yJI
z<qx7+?#}l@&x^*9+$5V4i&O&lLn|F(xE~#nMdYQ3dz9x}Min1^Ij4?a_Ml4)_QU<u
z27T|hwcQ8z+s1H at r?<fSzimh#V~ozcv;CPLvZIZi9dO?YxON2`-eLDE?c_5VAA<5g
z6&a5BIFVFU(O`S6U=0w#s|gF$3i<?Y;~GtQ!Q)tvR(|1hRT>x at G{iJNX!Pg>`zp%y
zLB`L)EHL-;$UuF0#lGf}(X2YEY5GYp^QC<!dH&qKm*A$8)0?7T*OSAC)z_ULHez}v
zsD>Sx(?<+DUspeDIF1py4+|ufQj7?1B-$1}IDBZLv5?ZIj-<(^=t$7w145<u0r+H4
zAzf at dyZ$)%e*M9N8~%C1R(JgCwFeKb{rdRvxPZ*e0Fagvl$jAE^|r$2{pN1Q3$&%t
z4}O96lhJ?97QAqqXZwT7`=4-we0x<v{;^(Ma_4Kl2~{jpg`o+Ue#mAoK>X&*FnYT*
z?k)rSHAsgS%z5G%dwA<kTW9YV7le#efXvawXWsz3h=hBmZibtEEU6BAvW2nI9yQp&
zfe(#VJ at v2L2CMb{H98y~5AFY8L|ZHwk1T7dC<fk{Bp~3^2us|rAwEhVH#lg>fZ!my
z6X(nZy-P+f2<a7v9~To%sef>}IUym!fcInZsOJ~HQ<rL%@Z{O07{>^|i;$}=>p}h%
z*k8src<WA<CojXNz~kg?I$yV1dHdT4??c8ki1NSHt`a2^JT&?fB4OhCjI(dpZaRg@
zLL}Ur&qBHi_ZoVZ&Y=-JgrkCqcFM+}Aglwl+OtfOtPhVv^9&t;>_Sf4TR}li0=L=*
zqd}}m2?9~J79sx%%eCLoT1JwXKS#<{JTOI4#1%&gLA at gd+2~O0abDJy;<P?7>z{-D
z4)*m|gnKCi`n+n(J8*!#^2RK0?<Ez(%ERDtYjv8%Y)TAHv9dC^u&^xnzzX`03zF$L
z9zH{k7PFgTXj`2nO(V at u$;ir!301j2f<A!=gEQESFkBW$)8Y+`ek2hgp%}O;(P8Do
zDwcSA&w9fajp#b`YM%h5SGdBz??G_#x%Dx9(qM%(B{<P!wxm_Fp}bU+*1xuGsKU*R
z>9WFScupq^8VCAY;e)KOurY9tyDBs$FDoO3<Y*z@!S^^B43m}#M3rR8wM{DZaSD(E
zj%yq2L+Ey5RW*2RX`MNH$TWOWbN7Db<<<tbwna1RLPLw!UmQLhcEO)}C5SjK1jf!=
zICQXOus^w&d1+rr82q)ScF=&-kPw~GTvW8`^%uE`F1lXVRFbFVO)#Y*(_Gk2ul13M
zya~wM)C8<<utWKb3{TUZ at oAgmWXfJje*Y^K<rLSaU(5ZA8zvW1|3bo$$LO=t3En_F
zdRBL+AhqEU?h7?`z+7`62#qjAu-&{FTO|_S<Ny at v*8(AYp}TVfnHF at 9j6!R}@O{Wl
zgOHErxO+;|riwQWI(bXZ=#rf~X3nOtGk%$(e6+3XN1cBiQ;aqc_!`NinX9-F(}(vZ
z$!F!Yj3^JzTgZbWu0+I*rU>Esj(d2{ap1o((twlTu=9-lxmFRV at e9mvXob7BCT2$(
z|K_)H;RRtjhQy|7&VZ_j1lvE=>O)I|f)cfG?66*e`ayk)0e8LK=)v;m_DmKQW$>K)
z7kNG{d&I{q+fpiH1LGG^9qLW)9mKDCB7bn8CXVnIJi%0aaE6W!xE+25OahqLGe at sJ
zjW)uYAm7TaBB^4nZ3l&%x*d`Rd`7wE)QR}okw+)uU3>Z*lJO$`r1v$eh`+}uAPlHe
z#77jtIwQ>zp*Dq?Ti*(9tzNwqO0%(o*V>Bj2&TgJ0i`o0vZd6>gdJ4FD;JDT<Ea_j
z_ftRXJ#>!c;b=P$MpH28?F7+Lh(>}YM<+O899Rrt{9Ewb15>6>B-jegpNy(ZN}4+5
zRoKchA?BE@><_ZCW6Z%|8+U=gDxAWo3WIZoKK5AcldX#_*1zZ$P1ycceZ7Fa at E1Xz
zciAKvG=E1DK|^aF0sp{Wfl_QzcSm{PI8e at xwAxa7gmtj{GIFSWErcitAAl<X*15Lr
zt?*y)*Hy5g8CXdbM=QI-R)xg#%Z at WgHi^b?g?R|SnGyg}=$9UVV}Cil3eH{#`v3aX
z&0oNPIkw#kPuyWo+Fr+F*s9qMGG?|d&*@v~Be_FvC1_E4or#D_C9u;)(<Qeju9%(F
zl-s}!9N2$&lnPv!ZQIrYf9YHU8(Jm$xf6VJ*Fj-^?nL7QWB^k at tiRy1b8V}vR=dt#
z!ABE%@eRI<!;Ap&oq at +&*t5GYUf2xwx4^H?Sb;x_&Rh62n1ue<!`H0BeYWIp=)Hr)
zv1=IVT+HfN)o})~u at jxP#<h8K9M{+(c9t(5`Im*5=kvOTkhr)2jCo`94g&bDPU3h<
z3h}CAPdhnu(ds|h1^^4Q9Z$;OB<ZDV*VF^}SftHUeP}Gu>ej8(X at TRJ3iq}?<uTz~
zj?WrBDO}wxSL}bwdBczXce!FLGgWv-IN4pH=HA&LS?@Zy5W?VtFI}V at Nd?C5$o7Z3
zP7HW!Iq!TF+=R$@TvN;Q&-QMca%e?+aTu)n>Lop&5FF-sEcC|o9Gq!R)9VU>pBb<%
z6{E4}XKYAU`n%MJ_<D$HV28hv8Pf1wEZtgEYwDOYBqW~a{rsxS0t5L5E^BEX;7?2#
z8_;g6v$F38M_>LvF~LA?^ACUd<LE-UZ4=4W6+gpaI-r9uEEyg8_Ul%BnbZ$(=B>86
zcAU@!_=gj^u(mg|TQ=9_=-_VeL77<n$h<Mov6WrlE>0Q?40Jw2f^;t1rXC)Go&o!i
zXW)rLmXDy!<IK=dWL9^3A2uNf%~MbSohR6N!u5 at U`0 at u^;0>8$zW5g$&+CKi;bmQ2
zl1$#hcpxnn&s(ZmgH1z@)%(aIIF^y{T8$jw!#Wim&@yh`R<LDD`xXGUYz1)7{ujYG
zPzFl(zX<;V at 2(9uL`1BPFc?-o0la|M^5suFfrQyF%UAFKsDPRc1_1s9 at 7lfwZ<@`i
z=&zY^<PT)>CY6+%(ZjtERU=g<k at sJ?6~td^u};h*>z&*LMA-e`xH|35KH=GspMGjF
z=BsA*O&^@QGBR at Ypuy?sBkD#?83gL#x`uvhb?_Ygn%)tC;K3f={u?@hw%O>W>76pZ
zAj{H}Wf at Y13}&0gC;Ux#79QwGkZU{EOv%ml_07wzUejT}qmW=dE9L)kN8##34&wgJ
zg~e0AEh<W+dOiB)g8PfZQPa7-%08!C$ecEkT#S84FA65H0493ZDk_3wSCEoZ1gEGs
zNruE6CMZT(z<i at _WKli#9fPL8L9-u+yCCA at Sab+h855Ak<PA4zutL;VGHOI!{qSLR
zwfE(PDWj22bduw^kE{>Mc}bt_5lB}G*+7+{KI^D{SR#2F$tY|~;`4#*TcdD3qzS<<
zT;>z7xCI8B1R7|W%}!VdOcP1mONo_>g~*Khoz2E~C8gkL>x0lH;oRX5qH#T)ekvMw
zwumIYfcoXcvgo`@qRsF<SBWTALKNOeDN;Kl6>#i^>qUSlR^tET?LFY4I<~;!J9F>u
z(u9Sj2~w5?mfjacsw_=Vnh2<<h}f_JHr9^D*jqGqi9PlhV>Hhg(L|G&W{f6zsU|U|
zyqNAwEbQzz<=!oTdH?_S`+lD!use6|%$YN1&N(yZ%sHdC8prIncqt4jj<%k^LdlP@
z^EU(YaTNU&!otfzn0X4V`3#B3!4xo!S|djNd at TEfotrjo-HO_`Y}v8naXggV!ro4g
z|9|MtNSRJx)pv+>zmMgnG~tL2&qw>#t?Zg?Ph54!4rX at fdQTQJJ#tT$p3T`Ep>q&I
z?>Jd`e*lfTyXP#`0Dvq0W$g}i9=+DZS(g8VC<C2Zn1OT_hZXeMvMw&NNQEW!Y}jdh
zj#r$aG*M?CLDzMbXwm8shR2KVfAn9WfKjR1lW<2-(ugoT^9?<K%4BU<*^h2pxwz1~
zP6I at oy5aqCe_O1|0*N}K05(dFOj3Y)KzVOqgKWM7Ks%Q+b>YUV1jiONsF*59kGfBV
z?G&6CvOGVeg+FPnAPJ)C)OEz2Kd@<GF*y_h-t*-3u;)n=9UQIvHvi!O04qIR0*&C!
zR&X<{E^eDVJvg}W at dp88rcIbpcG@-!N!76M0hz`5*_t5V#~%o|IQ#Y$W0b_B6nQ9~
zn^em<wEy!=fH&{%tT%U#?*HScU@!W{Y9}c|z4Woi2ST(Mkfe>mO8xN_0OLH9NR}>G
zCnC2ezc#Nf?r&PQvD3*!_c&{`2lxqDlC#@LmE`Q^W8)GBc|R9-bqRt0TJ0|5yC!So
zM~0Qp+TPU(ZmN}&oKvJv{}pHRwg50`0fYqqSt!-c5#yiu(um?1s1yHZq60NOB(dDJ
zl<dO%EgEvU5ZLkHuO1U27?*C@#H0IGL7HU_B?G6ot$1v91T3VO!IVXCmhOn$miNMN
zhZ4)QISYyyz40-G&J*iGm!$zeFwP)$8PDOZkD>9%OF&!<AsVt65@|5Pu<89Pd!lSP
zJZk)CmGv4(l5E3rZw#+9vD~ON79*y_zTwBOpeSavv~X(CN@>NBNn67(Q+p)iI2w@$
zh#N^>;|TCCy0sL#mEaw0`{LmMmS1mwYSXR{iovq-g*#SsFM@;7bWo(%8-F8#bD&bM
zM;E|Sc&w*V5tje*$ru)r2hbdiQTod#A4PMH!q4gN!D!znpMsINE&7)OroqHl0^=l3
zlq at U)2 at 7Q7YUSZf^bJ3(0k~R)&=c;p8%Kb>n8aQjHk??O{ruUf&h#0$2^!RnI#jfR
zH%C=YY<w3S2ixb4G#}*eGZ^1~B1KnP!aOVpEUEJG7?upt_WFMWgt|BAdOWY;pEARg
z9ncLX at U6A!Z}a~It at AHreT2_+lVR`}|EXL>&rhuhzsG=oqw2?lLE*`|@|kJr^{8R6
zr)S?hbzmhtriWka(N>+eS6bS1bXBhh8O8p7QBkANJw5H?6#tRDH<=ri+3&;4!j#QX
z+Ir}6SUuSMlr}0lb^r{Gj8&<^b-Icf>1kuom`X3tl>9*T5O_)t{Yr+9l*=3!M2GqM
z<ef<B5e`gW-~^1P>xLX1B}q}ns3FIT>gnd7v7$i<#DxUw5`%*a6LrBMzV)E6xY!yP
z*`b(#fPld0sLX(Xi at C<}wK1_WIf25*H;;`Qnq(f-f5$Rbi(N+?H8d3oN$~?CqZXik
z^%Fs9P~VhtcRxRw)2X<a)YP$e at i5-WZOrudhrBdrdvUum(yq!9;>%+D5^Yn%1_((B
z#Zi&-!Ruoh(aE5czGb*sc+}i1N|KtzZGz+cGQmXj#BOc6OJUELys<KWS#?pbQpHAw
z!U3^S(b}gr1F5$I=H84)@_c;5q8B*I<RgdYTgC$^4St9F4y93ZMSBQ|3vD)sc(79d
z62K0BBWkkDL$Zfp)~kU}`go=#r4R8bnu)Y6E#UI>5LX9#Pdj_N(Aglgc9L&MF#4 at j
z?d}o~9o^d}j{h9;4gtZLgCd;#;=rGAai2lxB-q&{o{l at HaZ~mAQHGVa)V={OE+W1g
zg@?i`<jk!n4%s6=6kfq>Za{9X at psDRTyk?Un|o56KQM{kfZOwv?#Y-f23f%7Ko2?w
zL`4?`mc$HzQIQczK91-{F<4vi-2UN!uLR%b`1Wyfnhzo)!uq<y;kbw0pe{F;^|6LO
z2rFd2adw<vb}t?)u6A?n?Kpm-%wBo3^D at aUbMNvyuBmar8DJru?3My6>T1xRc88A1
zCg@*Tm2wUE*4eg0eEc(jS`HO!>S{nQTvLdlHPM~Au6=Sq5el{BKpR#}Ja)(q^r{hJ
zme&E_YbmQ<p>==ZKZTAo9yzDN6G>LQ4zC5W0)I&f#lkdsR^{Nqm9vBy+R(|N+U<iY
z?^X`BeGhnG3M8x81FtJgqtKDPl8oOD6=twkw$s<8b#olAe-Cmhsp{d(Obj_l4$UH=
z?qYGAyFU+=t~qILZu|fkRuy|VJ1eW7+n6!m)x+PwT34^xOMHFZRWZ|4Zb?ZCmc~ZP
z&;h;PwjV&-5)aO(LeX`v2i~r)|8C3}x76(Hti!QYVQ>KN=9ZSDbcN8*Beod+hL`_v
zS!C?e1xZP6s%bGQcVFKnv%Scf=Q80J-XI^x$+`4wdqD;{g#hIW<;{1<^xk|YAvKOG
zK51WBeA2mcc+D%E!gLY8q`*JfGzshJ8m=0U9Lb45qg80YvOfT~|HBXW%g3SRUw>`W
zep0qQrXir<Wx(8i`aA!leS47Tm68a+G81jq#0kHE*4wwyaxxdM3BF(<mODJ13)k1q
z<L~#89X-FgA}iz5<W6pKu9?o;Yo<c55M-0OUbOB at tSaFhx9~3yzLmve3I{3 at _d)|b
z&|9+yTm;Fp2LLBH8Qo*^e+y0)>vAew>lS&=x8kR`&tG6DbQJ283OJGD&_K?%tdW)B
zHl~3JIG!)U`#*BNLN at 9i8l6T5dYx}?Ki>|Ik>Bm-S${_a#8=66TrVy;+d;uO3eE~U
zz&T?C-h7A7(B%XPgH9BK&J=^r_=jOo#dPJAM5;O;nJ;e|Gp0#C|HVD~o|o$el#~p3
z>cCzOfGM(YxKUoh*>nBR*z->EQJj<V=3UwYX`g1`b)p$~oj4~k120GVB;~YAC-R(@
zgQR47jujLNrc}39<Nsvm)2ph|(`srczHbX(^L`3nnlE}twvz|{j*Gpwo4nD9^TyqE
zvT=3New`}G*vPoNX(!(JN9=?>bnNk=^-)@iRched&(50lEct)C6b(d%Si!Ti$oJ$y
zgD@^K&@^}#L#pBevYj2?RXD!u%yF&`KyY<e-u(RXWs(It_U5;re;cPxGzUCYND)cE
z`T6nM)Ff?rC`hi0Xr7<hzsN5<TIsUW(XqBNX$ppOyUdp#C$GZ1yCpl&+mqvcRL=Ga
z-cbNPDy5^~<EZlYwpV!iIlK6A{&c2YS)wxBJNZl#czMzP<FccicqhS0<|KDeIM_MZ
zJ2<#Fx;VM?a&dNXaZ$Rs+Iu*7I(RvFJM?y!lXW^mv^obsij_o$qgY5cQrjEHg%rdT
z at KM3x@l)yNLJ*BV%lwp2ZRzbF3;psl*eBqhpF!vHYrMYi<MmC}PQPp?ImA*zPyk-0
zuv6Z=d6VLbtaD1G&gR*)qZ4L_f5h3u{DV*AHN4YZ^zr^RpWNF^I0$IP3mxEY#_}}+
zAUhRT(CxYe0MT7;K%f`kL(FHaFE^k&RChbY50w%2LZzmMd!i?KpNdJZ6#7Tu=H)IE
zQj)>@M;7e`a2GNS0tYMS&KUxF)t>wapq=QwK{0&IYlQ_McjIXgotwL9Q*Q1}^x)bk
z058ur>%&ln`I0^5-J${l_KrbA>aqF<f7KIJm)1K0|1DD!FEEu(vQyX|l6aZJn%Z7(
z#d9{Q$UZK<GCwrL+beI>q`0`9do%O$DvM;%QI+|H9_}e4mnS7v4t_p+J-qg;UZe5w
z&<4A!T-?1QA_t5fX=m at YIm167G$g>))ycy at GOA>3Y at Cw8#Lve#BKoF?5-&Oit%CkZ
z(K4+fdTtePu08o~Eh-$kc<~5yd(7F_OE9X0aDtEfdi}0ldi|}Ru`2QZpDa7aaeSPt
zmXpz)pQ~EO$DK#{vf79Hh27_^o-3s1YFAnVoFjGk*7G2Y&fh=RgJtJoS=V}MRxMGi
zhg&+&w{o^Hg#%W at xDr=5FYKo42kSfhUsT_5rPf}i9fe3AV7#a&8UO62FfBK0P9{_5
zYT*}jKt7ISe1Bx(s13(BRQSczLd#}JWt~srvQ|<Cr<lvO$$U*?<yE+BuDR^8tjyF;
z?u6fMHkWa-K^!M{R4U}Iot#*9SU{#BavjO0Z0>imEF3*0FTrK4=66 at i!Z9o*B$GTV
z<A5;@!@|jbCO#KHQk*<!41Q6mN=ZiYj{;==Q8nkw`p4VLe1cO3i~tklKR at a2nUqo<
zGIeTbd}!Yw7jMl at AKb?`!q=ug3SW{5&D`%-xR1Z-c<1$igQ;d%c4Pe2%G+2x$V6A;
z?(<mF*odZ(`rqRE-tso37H&4>(g-=5IVzqx*r~?P`ilII11b$rt2Df^*Vp^e$8gvy
zd+$kXjD$5a<4ciBVwvE+f3n7#8J8|_w#np}c#*)hl0S&<3%_y>97ok`=82E)mlS=J
zpSNB(6fq$$QkYg+mV)a}5k5hC<*$<%89;8n9nbKpO-5X1L}aA4e{Otq at 5qMwY}s at 6
z+VITe_{hFFeTRnS%#I~S7MnIay%eFg%^;Vs?D~et-qG>7{X?Uo!e!63#>CFf2^)&r
zh>TCp3?~<oOclZ}+zE;kj%ZR7f!9k^AtYm5V|;)Pnpy~*c5)9KDZLCcBGYu!EJCNa
zOiAaX-WY<;oBSwNseQ#&gE*`eoj1OAzMU#=z?h5cw6i)gQH?U at 64mK8R-ib5#>))c
zC`B__dn7})t7Zhc4DO$ozj&TB08B3M1#Y)6hR79OCs_%|{Zb|rf43Ffe8Pf+(7s7w
zWuaKCx6I3Abkov#8?D1Iki7)kLL^FC3bf986M~k6YA0($w^t6nJGhd)YiE4T#ED}h
zL&QTc+F{Vi5JmmZ$QxfnkIZ;b(=qO82lw00qtWNjw~OtB&~_XpT#2|i$P`J|T)WsF
z8co|HbdH-d@>mVV4UuP^V^ON9AMhi2O!%%Rt*=|(?Da$AY at N_S=Q8|mEqfPq^>yl8
z2I{Sknf$CTTM&MMiqS?>6X6$l{)6aRScZyCQ%D)+7Z1g<kBuoNS5q at x-}mlU(eY%W
zaCFSnLe~djn(S(dF_Wzi)MQ>CxF0#1hTdk`GbR3I#JV23%d#7?GTi17<1I7}w<+<0
zBj=5`C@;X{ykdN4O2f|-^gM>f^E0-chqKP3Gv~=V$8x4~3raIJ;yPH%V1857qM=O`
zgIDMhi7huFB`IYKTo({LqHoHGu~Wf(r{a8Pu+Xt+kUd!YAknd~aPQOW71L$1UijY}
ze!0Sq;RUZ116eC at DqAbG>>(~|Av_(IInlBs7=|iZHXD~^h-K-xY&zjD949niBxRfM
zyw#azP~QLWfj_Nx1)U*dB)lKLJC5;wghzuu!(};U-cQR+zbF;5M-uKHx`O9Sefes7
z5^R?1;{74YMo2y~cIuKSI;;k1J9j909UEO!nBwL-H7Rl8h=ws6-RxX&$$(@xx2eeq
zjkOJRo1qgg%L(qI4h&U3Ra_Voo~q#GHs9&oWrJI$>#)X5-`Q{jxW#hiJZ!<wj#-{P
zY?1XdKf7VtZhB2vL3x%Icx6;Q8doVKRy`U|b4Gv%Wu{Z63vxAiF2m0s92q8eA67C<
z?!jWz8aH-6KqpO!7`F#HgE~DgGCV3V9+%^?7dkoP;)_IHd}T~B`J1MT^1>rg2QUp8
zSAUPD!VL7r_w=vvHQJ{&9f_x#)S93XZ(@6Bl62&wyP|U|C8U(TT?q-L^-M{?*h at Ho
z{+6$&JVT*P(WcO(HwpxsmNrTM$vp9&Y2?$irlt6uM&V6#Kp~_4QIbLm=`PDd^zMaJ
zYeoC;Cc(+sugiWxAsaHZk58W<9aQ at Ugf!qUx}ap>6&essXi4Ztbqg)iEtrmhex~t2
zfGnKTGJV3hiP2eSlk6tHUXe=pjVrlEO_az$mK7}+oW1^j-{7myoG~_>dFE>HpqD{k
zMPKKUBX-R8_Vx9i{d|F_r|%YKfD24c`GQ1#cmFS@;*vj*Gv2rFMpfVfSLo&f--aWF
z^F$Vdb~FfHH9bl7dWD?wnk)dX7T&&+n25$J6K*YDH=<WBcBY_1XJ86{m+5sXvLPn>
zVV>%B?oe at l+RmnF?NgUctOtJQI{4_)rskbfr*@7Vd~IdT*XTTn8w9{GytkT8;fsC|
zasuE5rMT(0Jv0&MW=g<6;$}(>G_V$Up;b)ml5>bPvT%N>;%}^XT;trp2Bn;9w8UB=
zF^=J<lnY)XSy^yv2cZMh at Jq>9-ROpq$b*ATC8bSGr6tg?v#Dw4H1hsen8yXv*o0q#
z8LS2LB;ya{ncZ>v>?<&*`!nHF`s|zT&rG-F7inJD9|Fx!#J--R at B9qD>)xLHPx{X9
zaaQkeuBM;(HF(^i at ckz^rJM(1eRGT%F-Be;%e{)fhtTok?=-G at FRR;}G{zC!`%~wQ
z4i+}uK!dTO-5;|#Psi{4LgRYNiMEgTv}z#x<zWe|`_(v&4 at XmFAL4Ds9ZT#?+8>L#
zC*}iCN;zulNGwJAJ(9D|c|^`k$Ue&I?jdiLJjlzE3rTQ9U#(aH0#~e9FD4ASV4DgF
z-XVzwFBm(Ku4}3wgKa`2DHbP%C#nm4F$7-{K8X))is%6=`l>!8F=1iCuP~8B_CixJ
z(#ST-VBqhN7=D;W=F)cJXuC9?E&U!($K8zaqQUJFd!8 at zM<P~UAO_O~R#z~ELvtUM
z%;nE_=FSyP%{8XXoeMs~|9h at S!@$Ay{NeTBAR30wh=absSz-vvep5;@1If4&Xr9{|
z^E_Rr at FY^Y5OcgxA0~T1DZ-wH_#X_n8Yc*E&qV;NHGU4Co(u27AJOU8P=s+ehJeP?
zWcg2&VjN8thmd|xXLF3l{tV4=A4>DEN=a+k2z6qlniL(=1IdjnB0xi2MMrEQEg^iw
zi0}jwNci_%AAPj*58_qz$BvIb+VwkHm=HE{WEd!MOK7?CT}!;%qyHKVL;FnK{5RlN
zjSa3f7;1yZu0qDYH&5*|k56`sZ~5*{O9F<O<TqvWoJPlw=U34m!$@LqxW+?rOD at QZ
z+zgYkcu%@uZD?<h9Ek;N0v}J~M2N;$JQ~>ua0vvD8xEhGiM}RaqEDtSg~P{z;7ed+
z)Fc9KOXvuGJ#Yu{hL_N1==SW1E)NZchb|Kr08bF|k^x;qcYhld(}y2xFm&!vrL5qr
za-nFr;_NUtxd%MTIW6#?>&2-AZ#NfCHs0QCybEySJ>A^xLwL1Ih`VpEVCB8bcW++4
ztNaE3+*RHshidU$Z2Ef%fBmBTHX$`NE`%j+NVZyBG}E{`6zbR-bBDs$pk#$nvvc>G
z7caiCce^oYIVk=49v);1{(1G at OY_m&mjXc?Z~$7MLvN#x(IfP3;3c4&Ukmzw4${FA
zG#_359Cb*v#@CU&*YF#b_nQBX#G$w3!-hYza+$&$&;D=953h0W(P-EYXgf51i&%bu
zmK&K*C#sS;h~@Waxk-#8i+LpFo!53*@kr)-Pi4mYBwsjw(u<SsFa9m`$9g~%rBZ6t
zQ;-{qDINm5+(Bcp;|UiW0ln6!WPwnG5tXCbW~aMHr36=3m7||81P2F~4SyPafsBh6
zVf}r?q6F9Fjd9V at F_Rl(o%ns_iBY4*1kFb0{w)YOJEj=Cg8K!rh(^Merv+$?1pA(H
zu&W~(V}}Az;lcQD8>$j+$;0q^izacOBrA<o6cdHKH&nYSWr7qePV~tDx8pO*29I>?
z6`M97CrKOGw_mVsEoujU0Iyja23M?Kx2X=ji2iCAZC^Qh-L{d2*4&}n+KS@<kB&TA
zgQm#C!4U{*r|mdVIoLmF*SM#z-y-yxfCkGPS&R}OSGW<SR~t&>RH)o2X!P(;7;|}h
z|K!?98xxb~p)Y5G!w=6zIr at 8Lw!Kq40UUbgCG=atY{-wF`WFArq|O(C`rV{)gNma1
zt-NTS6G0xp(c9V})S_>Tv3sy4?gGeNADS_iW7A{K?*<z7EtSi=XT)`04t(36VM*V1
zj{-wko;Mzmgt$E4B_r;p&FG;e@!QiiodeD3-lUj9$uzE?HAF0)ujo9i5Wk9+TG3dn
z2{orSHs3#?Llep^um&ic;&YeBWo#_<aSn5GP8_&;;Q${;t$bSRoYn~rj(>07T4Qft
zxmG*0a3CFN^VC*Bkbw8o`FjLw;#XvOI7bvj^zjeN(78Kk(*NVDbmj+^ZeCERP-M9&
z+)~o(7O`P7{V^X65r)g%sXokH_c at -%9>+Mwfa~xm$T~<$apQB1a}9zLWzEi-vl0|U
zd$u*+y28UNBtP}`i?SVufZBlmMn7!4@%y#!r;QjmdDl{skovt(fJ)4#=pf{Bo>=DC
zWK&d24p3j1lPIEg;?>0NjW>?J_UM#Q!>)}}U(PQujYLsdN@$VfNF=#vNWw%6tDEKC
zHTVi_6(Zt4jgJ7E&;%ho=9`%Ca_gJde1A~Bw7q>PN=EyZY}&L0O$R5iRxuar6_scy
zTE_50_zLs)4H3k2P(&i6 at N3YUS6;v{&z&<=-88TH0==K}g+L<xi}znnu$U#1Clztx
z>6%*<UNN?9*#Z|n**&GGflqF2MGI`xh|;#DJfP;t6H*>f@&2_7pgBMVRhRsqV``(T
z&8a_u+a{~LpI=3KLZ}TH1imCmKkX6Cr=E)EY_k}5MNAWBz7A};xuu1PsC_GVm|N30
zW(l~n70FYk6a}QI at yj&^<FU`DK64a&X6URi%pY9f?jhkOo!z+!2a>BzkJq8HP&>x(
zfMHGHnGs&;Z8!B364J}(<n6$;(OK?OJ*C8OHg(lNuc)*ki_2$^ZYpk$s<WbLasRGM
z3SpEjc(|(*Jv0J!<glV|s+2(8kj858tnmS%aev?zmx0D*l+6bDF%qHw_qCmTfhr^6
zg{xJB*7aZAYjr_~_6 at 9;sC~`!OQ5e5vzg>3Au*oC at ouK^1&XsZE((6H>{-`d_B`0@
z$T<}{yA>)O<T_`iUB1BSluFp&U3u^Bw+ZBb<+sXji9r9wD*^qIkPw$`&v^uR#Cl|V
z2w;T8{hTR}Y8DPbR<?Dkamf<2Z!vR3e_QnRV=_g?33;3o-Hm%#*%W~?ghuj`V)LrO
zZL1iG8>*fL!u-WjRA3sL@#G!ja|h8%SXkr&_>J3;32Oy6%Lf~;QQ!L^LLI$l!G+ke
z5fUxd%9YR)-lmLX@)r^#p+REJ!4WI1_y~y$8xes%VZjm2@?svws{_69n2?M)32ha4
zQsIDkY&h_M#~8zhsxzVtSOuct`;`{~_e;m6yXaMZ*e2sW#_|8tzRJMXyzmgWOLo1K
za4_LxcJ4vfe}_RhjjHE1jUmgQKS3zLc<k%?bBqOuJmdfNzF&P#W<*jz+jA2pBoygw
z at B7Vcx_xoXg5FX6mn=THvu05;z3&G}J|y|)7{^XhjI)$v<}T*Z8>m?z22so;dYEOB
z7l~}<W!1k>8t67AB{L!+XEL7WoBihL^+gF2COp>`kQ9;GZ)l`5;IFm6SxTTvdm?j^
z+%CGX9KhE{OuJ|FM?=B0&Yp3}$%|@so?N`7e^l=U<6gPlG~QVO;8Xw#Qd3K2?bt#<
zj!p5Qc<GH&Wu6#j5*1ub%E6mGPjr&3moD+CJk8+-Br_>|^~7xB+Ua1!>M-{RWqKb!
z`N)L$gxK_gthmO1jfeHqQNt7AsxD95(Xqxx-U-Z@<PzZLpZm6pon1`$BJ>@YFlkcf
zEwpd4vsE#LvkFxyV(|QtJlzs&vLKRSPJ!2(gk_~=S{asw84j@#DVaqWkx2ng7<mI`
zrR_yK52jH3I^mgqt+FUHHLQ=HpzSOIPL5-nZeJOJQ5Zfo^8PW5v9w4}XM$fB4~pMo
zK<<Z0pm5%l7w=3RZ?BN^)L*^a)TtPN;Y`N(>^9qp378OEm5Dvl9ai3`0tb{<^PN*Z
z8`RG(w<g83C(6#QAK$R?*}5l|b(!axctcQ&_M^Wrfxa@%ia=vi)I8j at j_0*0m>2p`
zy}U#j$~CU(rk9g=_*^6RvZR+=<+;Fm{4`Rku&Hmg9}w$P9I$e5la{-3oTw*2tS8uG
zEg_8ULm8#X1hUtZ30fLe8?z at M*SML@)^hOG#MV>cNsUwDBcKy-ldoBew>)?E at 1{ya
z($Xi4JF~`NU7~qna&+V<zQ1Sdsm)l0_-QdZaAwO^h2qPPnFjIEhiIf1RV(H!_-%Ry
z)9Ld~U&vdj?n3TB)8x)xZbTwMG0_etd?f=#705&4&dxs)RH}&Kf&#|<{<~^*JGz6u
zduAJE8Rf|nn`6QS)WSoMb#bc!D>MCewts`B8qo2JAAfuuh8c|QUtp~UjDP?%0Px{a
zO4}J?zT!UAHs%(RtnyT7lId<jwDT+ZP>oK2gAM%)LB>xdZqd79yuv5kzuNiJ)wA<X
zfE?leyqn;5W|WDmZmp|)I=0F9p7ArRp8O8-0e8$GH=kuGX0mx9r&vk_-y7@~=aRxe
zb0mb591nQTdb2sh>n at JQ)bgiM0bK)G>Q6OZYhwCOwJVT<I09GkKAbQEtbA(s?p>%2
z?L=+6cJF=)tOO0q%Z82|F$?XSHDct at GPyg7-tdeOJ>0wzHG_2<Hv_rxnGN8^!-35U
zuKYQAWaoB%+{n>?URlu0=BZOrkJptKjk2%qc|nEru$;_1mvAuI+|C1bKGw^sH}H(=
z(`8wukp&nMbWYKSKjDzwePLzv3JqC(u*<rNWot3E54#IZVj=v1_a!+Tr>0P(kULxC
z%10JR7DMvTvkStV6j{KH$Yi>cVzE!5=zGaRee&-|#O?F)QqA^HJbg7OM6-DKP?->z
z6Pu-Mn%5Xnu{SV4(NKQmE&61zjE_u?#7_cWntFuV*8KhZzbI3tw6rwFW!9n#+rySG
zY^eNTVySCTT+T9}jdc{f;|wz=#BT?=JL$7)lM8wW#_E?E56>^A>7+vd#B)%EhKgr}
zzMM^JaT#O0qLNRNql+hlpc!pP?H@^JgCFgx?Rp|O2~7Z7!?wO>J{H{i{#JHJZzzr3
zWJhibhM4n(vyNQNJxQ7b2u3 at 0Htv?T5xXZ<N_)gnr~&L$*Kf88-t_mzdQqkfk-dw@
zW33bElF0o{Dc>7ailEX>$Oe^hUW+Gx@#bqr(>I^ffc_wG&qD2chd;e}v-a2K;Y206
z{uY=-g7=dIZ|7e|9ma9!B4^gUex`SPJ*k0;3Qt83dpactw|}KAZJN=NJ8Mi<_e~v0
z5^_P}c;%IJ7yGddf7|Tph&E<ETii&`*23u-Y7Q#n-^b$&AwG(hEaajeJ5{A5YGYS?
zZmyc~rheN{LsELNCKb4&yDMkCnYXRRkeoJ9liFKYet1^Bx7UA$m86c?fW9yoJ)WIC
z#>@N1p(UxqDPAXWoY0S*WrhP4(2$$4css-=3jNUeS;iO796t{7THy-A@#F9dw1fZF
zV9WyN9vvm`cHnoH%T>gRWsl!f<JW}c==+r?jS-;t%A@?3ok4IOzs2}At~(c1%7~9k
zA6gd>mn*;mYq*+YEEB{EMX0e2svN^R|I@~gZMu2*J?+9hAaE&|1J0rW=-tM~2{6Za
z0p9y!)1w{2M|)mA52p3cMx&6-xCf0g?A}Gr0<oU15Q+#jvc6bv+EBGFnB1ENnq*Zn
zzYcxS23GY7R7D#9YJ+`;R6dP<20w!UFgkJ!8nS3MmbG{z3lntl0f|OWJ}OmP&>Xn>
z82ZXM0e$lT_^}v)m8QFxcj#!8*#A4O;VQB`_)?FYBCL{eio<W)a*9RcVoET30qY;b
zA7s5_=TQF8f13?|K%c}p%6u?mk<P~|#Jx;hm%R+#ohN%GutOtEY{ZSk)pmnp+1 at 0j
zzr1#NT|%>C!lVtATi$9NX}jC8>~%VqmloBOro*V0`niP<jOIrc9fh##_J<R3YK{j_
zGi7w&_s|r~G&e at KJr4;8PqJZj-}5YL<si!;L+ at Ss+upYBA*0MG>1uVjZE6|wRcdsk
zTaFpYMx)@AY~N265;wD+4y=qb_l(LBwHG?h3CaP(FI}h|paj#qT4&I|_UyrI_}Y()
z_Uu{oW9KYen~W8%0(-<2?ogeqP>Webdc;^}stjxb08O?}%;*_+4Z~iAhO5;RF#c@%
zQ;F9*Qq-YdYAKGnt5pF1%7e~rlU8OV+M~$;fK9T#S({oGD4S+}GYz<bB=jcw_N|}5
zz}7_*s;?U0tHT<WU;@Tnk}&Q6MW4Pv=~T46;Jtqzs~h7UnByx24T&?tOBZ|VIy(5+
zUxC{L5Q;vzkAC_6_a>5dqKW28Jn}PY`SqFsTp|f4XgnRvBUt_e%U)j0wa_*Dk9EF-
zE-8K(d6Oguk17 at UHo1H_nzNMhJaUJgq?+NniYhWGvcFhrnI~ydQfpB~^3H%G-+u-6
zfU#Xg)xkrgeP%Z!F@{9U*jw2I0gdBQb>RY>0FHoTaC}FHk-LE6jVSQ~HCd*DHw=&b
z3<hC3@&x~Rw1(<J8}PpPNtR>D9$GiXW5j at aU>O(&PHrKwOwk9+Zlhg-7TJTp=`jf$
zg$4ruPIuXLjNc&`zkM-(@g|at+}7%PLPByT>uea$kOo`c0iHrr at vhpOkO;kQfMdII
z4D^zrsfk}KaT%s7Sn$qh)Qu=VHlijlxay6_SDya-=FLyLNSG(_T)YR496AWHA!edx
z`LZ4DK%>5*G%2-jPom;+X3Mzjv2)BjNJjH{|1{a6Nxkl|Q{Js_%C86j;IZT6bHu)l
zPyEw}d5 at jbrtNG(A&(olIoIPPw@|)>+MuFjvD5~|%9ohS!$~>TW%i;X`7%tOBz`0{
zQ_3w7%CU^3S9jGa@$^kfjOvQ9CtqgoTRjIE2Op|lEFUy*v{t6xu^8Ql$BnM9pf^^?
z9hMniCD%-};56E%&%RXJ6cqH+$eLoO>TkiQ4abekFj3#QOD;^^MFGE>^{h!0_JI_}
z2$?T|(Tq=W0v4#E8KEeHmbq%6I*`Xi>c*b}+Nw8fCJrm8*$Ye1Nz~{Cw;9K~)PfQ+
zY4B~ZrwwfYvyE@;F*1AJGTi<^YFkdW*!OI0=*-^7XNmT{Th!jyh^lyI6OX1e7j3$2
zpN?@!t->h;hY87Uy`{@~VgN!x4E=|<Sv*NTAhE`1jK!T5 at g1@u9Rv3+{nzeR^!c9B
ziJcERP;y1eJMYP+)@*zB#8WkK-;Au;3pzn22qs~8y#iau?Emttn>|J*x at +8q{{8yq
zt=qOAk@&LxSqYwS$t2$`$*n8RYGH|u$ly`*!+jf1bQnQL2Q+oS3i5j(c>frLt%v6A
zDMjzsY<La>WPlB}$!?LuF$geF6H72uyEjl+FrDGOaz2KI#Qq`VV-;?<D|x~1Dcy7!
z{SJ4bDA_<vDsQ4Icqg7_OG4IpE%7`J7U}0_iT1_va&b-kK+6-b9xz_<5bx3bi7D7k
z&et-Z64XI_CWzFb`KmNzE8YXzJcMlxO852d$_C?jtCYYO*FF#7^J^(e9z_c`41|Ld
z_}n>8-o$)ag2nlfkEMCO{LRvV*&QTWQEQ3F(=y2^JF?8^_rzaw-rUfNo<}Q8>#x5w
zeAKn|R8HVU<l_-UXyF6HR**HQ{BgcAlSH2g>)t#_<Bltg7k?7nWFAEu*!gRR{1sfE
z^05&2L^UH?EV2?*$!5BCW#}P at 0zdn~BIBPGc4+$Kok;;5vaKCI7%+Ms9Uyq}5^kcO
zj62YmeNY5A2Qn{!*9Z|m@<aI;T^MQI{B1DI7-tRyW)?HqUJ8C at ZECW&n3^aZX^F$v
zMmQBkz5%0mLjxsW!)_S;28x7JHyXJ^Xwm{g*9*|3Lk3<0E*cERgK(Ji8)bKXfhA>s
z1L}(j?M;KRLyX5*hxtS$^<Tg;%QKLy6B6Gg5Gy5tl3FE at Abf(WyAT*$_r`gUbnrO(
zF((N)Zd!#-taLU!alaqf57Y;DgC*!i<D2LeVE_E#XWCD;E(h{uZF51SMsw-(vO|8E
zXz%q~udq3zwCHOciwEeejUpt3Or16T89BUgFH-vJ`~;q#L<!Kq>y5d~43>3bq;!9k
z<l!Xi;<0^o!?D=c9*WT*IGbWLZxQRzxD%4la|1iCV-#l0#3*FA!@N;`mbKlDGkTc$
zVW1TkBr`;K9~x)F^Qbl?@jB5rsEcosjZaor-yw0F2~=O at dNMHK@yS1+-DCF0Rx$09
zu8MBHMy!1zpYZokuABc5 at hc#FhK*gtkjbc+9r;VL79_xT4uOSW-ez!Yp>d~wpUF3$
zJb}^Ccp%ZscwAPCaT^4`#K6?|Q!mQJqO?9rXp#Jp6j{{wiue^^7KgVIu0dpXqZWOT
zsJs*%e*#HVFw9dl5RS}mXvjDI1$F{&8raDbw4>4JC+hL at 6WrWTFk(bO1OF>>9#z1n
z=NnI8-O{hjU?@YkkrTQ-)?gTGC>R0$s?BG3>FR?-_~>vO-Pf9XGQMFZT)apruV4s|
z6W%v-2HF;uyz+0Ya7fIwYTKy`3f8%1!5<ILZveTZIZ8m~-=SX#?$FHHZEy*jO7Q)A
z`@kwjml${U*SgZYx*MmjqCyayxBTv~22=!Br1dJ)VSgXD8TgNFvhjCsxEmI_;DTg?
z=M)8WzR6i05!gyK=7~&{W7fk&y$64McE?L-#q7>eLS4sq at HBc3?dtrr15Gq+eFm?k
z7BCabYBcDp8$^nVbZwtS@(goPvRl;7Fjmqd<mCKGX*-joFRU(VMF8sPNN_)g4x?S)
zv93k60CzI6k at nhM_a`ya)jBm%<TS3q#8^R2!-?)+g>}c>F2?b2TW>TOoh(@h`U4p-
zeE#|8pQ5G6NOl0|6zsnTrlJ*KTHE^{7<JdKe@)=Ude{wmjumDDuUks8sQd?NLwPc-
zfaw0>xhsSJuIGi1q^&(#j+T9N!Q*ZR_~_*e>;#taxUWF$+4rOk{(EOZqVY=u{E-~L
zT8?8e95E!XIGrcrdE&|<N8z~vF+dp{Zsih*nXAz9`|2%QR(BrX2F6VO8TbN$f0a`3
zJLu&DygMx1jK162dDj4|G#kLYk0>2OjqwYElsB5%;&bVI<x%@mGUf(hEHhY2a!4jf
zNhGKE0zJ!5rf3M{cx|YlWZUYXyn*9)EC&5|3<Znr=jqp?v#q&x at lLy7CCH>k<?BiZ
z8Q5OiOb&?o%025Y7iD at o^|Py;lcNj?^P1Xs#%UJGAAJb=0FRS34oG;F92#?!M~QI?
zsh_n*q}n9r>cu{Y4kVbS<O*`LM^MA8VY4osTsEw9+Vh8Jmy-O6 at ICP9@r`FbK{wC`
zhN1N%>UR_s<`#8U5HA4qU{q5t=e0B1H%tBqLW4~VJ5krk-?ByUH=xQb^rc&eh}!_M
zhoCz$7hIo4rz8;r++20$g-Z1s7oeglkcSfH=S&*1MJU^HV73zLe$fp|WrrF}La&yf
zJ75zS57ftrQv#a2X6 at QFV6QW;JAuAK`y|^R&Dl+JbrX9rUdxYIEP4zl2<bt;k at cY8
z^qvkbqF=6nI}5?0HdxmN7TLJge5Y?S?rzILcjg;l7SYKUg2lFuHjM=cD>*<@fHoVL
zJ^!|FRmi0jBSl0>BHB#?31FC{4sr$xjV?IRYJLLq4|=RPv#@*+YRicGF*ja?KH9j%
zN7e+EOoRS=Tb_LZT|oEHXuyZA=pSGH#fo at Ms{hdun&1z!(GQ~+^ipn{w_}&tcjO53
z!TBd02hSXwyBIVtf%BRB$2#Wzf&9Uw*~|+Be2$)OHb^lXkH}YG9VdXhZ at P|koaU}R
zOI>vwYdnj6b#+);+ at r%1 at uvvJYi=a-_wfpfrFUmCVTP at S<Dpc**RqDmi?cEV2SmGU
z5gN8^F*a>MC&Kdm{N at LQRDHVt$Z^S?<plbp1D%v$mLF%i6r|i8Dl62efe3I4XF at QM
zwfQanxlL)@_ynA1=zL at 5O!$kjAAH^DX|VR!=~3?4INK0Bj4<O|bh#lOW+KYxqa~tV
z^mw139`&q$a^#`y(eppr-eB|ESwg?()An=l8sAKFjo}q5t#5|u9HG)+;z-ai6Nh&!
zYPQgE<A-oN#7D!C#P{TClL&7bjH={!<nCCm_NKXO$az;5aHXfEfF8 at bDybJFAkq8+
zm^&BEw at OdSVx=qtG%+ana!6vO#@RWfB5??u=B%kq95N)aBE-2<4szD4j&*K_oO3K@
z3)$%P4NpZo?>E+Ob&j614_$=rrsq>U;p-kL&lz`lraaG?0QX#q2iiqWc?&$i=~m-S
zj{@`&=CCI8et{=ihmqgxSpXslZty?h1|8FI(dY4wY#+7n_N;s1!CB^Z9^+)<9I)Sn
zdx>-SG@}zq?@9w*^sZ2yYd&r%t>81#)E48MHOTbF-y~rb`XDz!%;jMK-jg-~e~~Wi
zDj!FC78<m`H(rEtiw%S##YjG$ckJp}&gOsAxopNg-fHw?duW^D08$^P8}z)@hf<n&
zWa6O|6)mzMCdrKb`2|~cf!<FqLA{JoThKi?^@);o>q=lJh%}&=O7q*%ySS56=y$Zb
z?sOfKi$gH~C$UzEZWU~+U6CHBc4Z|VDPo4;0j!sL`i%DR1pN0Fk}Hg1Na_stf>Z`8
zJVDZ*tdH2=<9q9=hpsI%yjP31hCbG|2A!H3fyg1Jq;ORqbZncnJS)KgO$M9fvo<Yg
zc5OO})f~~tfSN&8W7~wm at 6LYp!mQ;$TZsOR{z8AFPYKMEO}7=F(wP4?vzwUAk$p`d
zrzJ??l%7<LnN0EUdM^+M6GhGCW7Qj5z)Q7XW5tCHV(V?-i#|5~iB%P^577|=?`EZ|
zK(b4uYlr5W<ru*S;R#U1fFzo4$gH=4hqK4sxKVF>WzQd at UIOraUW3X1i6!gM=X}wV
z)4))ynt)XS)6f>S0>+?VvkpM+a`98?Emu9a%Ay;{OU&hsq at 2Xn5Oe9pnDfC?*+>k{
zw&51Nx`tcK-}1#5nBjossI|wSiUuLlu(0)S13E at iNCjHuq4*DtqS#<yvQ%iG at J=SX
z0&dn&iw$s*IQP`gNHqQ_Fl3 at RD-rAUTqUt(0pFuduFVTJ&60ynXtF~>*78Yhjt2*z
zW at 7AuZomPA6{1g;&${sH>~{xGXlq3KK`8FK2KNz7d481?@0#TA!{1rl9yk2`KEWCH
zCxxwXDf7({ZHTyJ5S>#jpB2OLoYFI0tbOW|@R||@HFbY8%jyJA0c$rJv&0tOFnsZa
z;Zdg~xV=2>6hw6Q-TxxsP26Q;3YFl7qaPT5rc!*$l!^)>$I)f=rY)P-Tg!49&r$Id
zg at bzk5I{7bJA=kRC`A~^IU~X#JiKPbug#qo6X6N|LQ9T*fE=tuGwB at NSTBla>XAnC
zK!!Y)hPq{dv?U!&_D36<L7ted at 7d6b>;$Ei>6C_NaVI#7K1Rx$MVkMcmQz_Q-%Rzi
zr%hjCJ#C&@e*Kevf~B!7FUR@`^1zySi&>C;!fPqxTf1fr+c#rAE<Z~5V_M6;ImA^u
zBvBLTKvD*o_s~S<^R8?wYwQJD=qA0zz$=HXw(O@@4^#4VZ+j1 at hZ+n+(Jk*q=q}q=
zgGJuBUw1tA5{&ykgu|=Eoe1ucb!HYMnji%b`L8>0Ah>s!>|7sXkti|s&X8lwm{0!$
zOl?Izf6PHAMZuCW$C!cHvh{fve_Qkuye)i3^Jn)Wun3H6DnrOATuKP$)g)otv&OrG
za-avu?0hIxzg8uXU>LH>%QRIR>_vQijDKFg at zR+O4OdT%t`P0M-%>xjNOIHIBT+?+
zzGgRfdX-0;NRqMv^N}{aNe%)!E`SbRF|l;N;ZQ4tYu;SCcObaffww7bH3MT}(ni#(
z-7{K*gDW~~4fgH>Cw{qq41g^fud^#a?8E(Vrn5^z>F#F+`u3vd=vdnn?#P<){Kl{~
z#Zq2($+X0l5>JD{5z7_ at Q3LgT_s`HJB-A=N6tEmi<;%Bk2i4oR8xsA!V?zV-{OrSu
z_!H<Q4+js=Y&(bklU5dqxs_=ATvUjbIM at XT_@|Cd_LTdW at 1)8fTJJs0CyT<76-F0&
z&JIFQ1vye=d)3Xdn(p;6b at Lw^jEAXq4B}B05#yFSuO1v{NpNM^<ElNxyRYKyS8y2q
z$B30h*t`P#NRIcBc7=J5OxBnOy%(eI-W1HjYU)LzMdN=$nE?gCu?DmTulVT(Fo5iy
z#dE$Qc at 8_Hw@SDr845ifXI8Ynp-U}3_P$kfEe6F<xq8Q9_y at J}P^$#B{q$f;6!}G}
z%n6T$a8=$029=uL!Ram{VSh-6#s&sPzc{qkMm~Zc&<2BeN`Ss<octDg+9Dsp%w-el
znHic!YywIxH;4O>o|%=2clf4}{j at Tan^R9pn>f*ifVR^!b{~54*v1 at ZK52K=$Ty;c
z#_{AFmY$AM<Aw1D_{qlI at I&K%W^FUxf@;j?6FdKd)RGQ-n(l4=n6=M*V9;fg>#C7C
zqfC1Lru)U5-Qt$kcB6~ZNc%;ieISsnc2~UG@!|&f7X}(Po`}bzBa(%D4EXRv3i~$j
zaHCNRz27k2*lk?);fG{U!rc{}SZ=^tW2Axi1n-i;fUp%!EXD&l>%}sJ<@qv8sh-b5
zG%QQ(c(kqi<sv+|cA0K`>#Y^Wwk{iXgOIp_;>>g!kLf>bK1i5nb<cwuxB_hJVKf(I
zAEH%v at glYz3Z56*_D@*e03nQduRQKFM?>Nrd-rfR3WI-sg`n+z+JL9#66hz=Qi*7%
ze7tcNe-aXjK}ez|Y9#s$?dfK at edLGKV4Q`P{>5nNpWEhp6Agr{BeNiW869MLhs{v|
zN&^Eq$^K&Bz~BZRv~7ZC5%bavkdhwYh7(rEJ~YE?kj8N1V^AmYG{q1G_dmDY1Ki+C
zgP`qtv_Z}cfLh{n4l3zRb&u^*U7SR-#jHl-fmux;m4>cK!5aDWiw~l$1_JCB?@-IM
zqX!O>FRnf`81QqdeeKaFfAEvQ?^YHk12i1pfcAV_?NnSd@~5DnrqWB<dNBUYUm4F+
zT*YIJejGfOy+JJSkQg5pdIH+|@TAqiuMNqwiu*Hs*o$y22(&tmF at R|km!VZ87!XMw
z_v}6}>8;6)%=U%(-(QUXfoYWg4P$#5%>T$)4dIKcX!#t9Loc+Q*v81cBU_geGFM>w
z>uCH6*_+Ey1EEjJxc?~HLYFz{G?iIBzaPBC#2M((51~OibM)j#q`hu;`GM&UsuDhC
zIl-jNDJqSWV2iBNx6zvEaO^_h+_?s<YeOHC1DjHQ6kg}6;7t763#;AY8H5AcE*Jd<
z2>&(bDAQOO{V02vZ8V-eh+aomUo!sk5?FzvSHSP~12ynJ0qtHw>%f23U^e_Z>W61P
z4IaWvsFoa}7=JM8Fsmo~!PDfdN9xDXrXOFceuPA0=ZZJ4u0uszfe*Si8?I=3<@^%R
zz6Sjc(n%lQ=m$KxYXIrvKCmNsU{F40_H>@?H{r4L?uuvYwQn_F{5*-Pm}f16xjxv;
z9i`WQZqqV{aGk_WEHfz{%$Rve7RLEQD;`LUfEu%bkhkJf$A3qLKhP%~@b=*yi-8?H
z4u9<+ at PgleeG{bNp<mf>92zVTTX>*`wXI>kz*75i5+f<mmJ?p-{dH4>S1DOp(AO<2
z_A at g(^aik>r!sXS at F%BYIo_ at cfgOy|p)mXAm)-1;-TY*-Fb9eMy^DVgW8p3~o-t$%
zX0bgVruE_;{hFw6g<=xkd&Mb==pB_(wkIPt3As+Gg|ndpUAxoFdfq|C|0LO{vE at 7e
z!2kF?Fq2Bnj=mB{rz}t&YGHwMtE^Zca*-I}V_Bf6_f;?+XeF;LAf-Hp2Wt6&p#K%*
zyATbQw4fn#Y}jCJ^;x(M1W3k{&bNrUWMFqbI01^dp}G;xRNb?*?5+k2e{>aZW}muw
zqEForxZGAqKm6TB1D0?=cp}~m$-1byJwhTND?PWX5S(vy1~lDPhD+=1OKH7{v#+8@
zzzpl|0x`?up5$M4bQoQaLv(-fj>AU34xs%5Ec*<MV!G?H;~UtTd-GT1V!hrrOY6-{
zS at g1x)H>PKWsy~fdys9W#)Hpd!`ytSCSU3m(e!oiD=&j#4Cq=x;p&|OV(`arCZ;Mq
z`$2$y5Z9Y{jzr>Wsm#QZs3YeI8 at 6tdySF~Xik3{%YWCYw%qQysB!NP_9tN209UNXK
zp>XzWvPvd$9A~M&L>WrzQD4h2a~u$k+!G`<$yrqmlS!BGdi#v7%jHtLimCL>>yRY|
z5nHFkYZLcWVs&0f*QqFDr&{^D{Hm0LG604^dB0nmBiLzqF5XRBP20O+ef~)AE3TyN
z-L&Epw7$dgZhV5)x9|x9FY%MIx%(#WiHMC+Z2vh<+!f*S0$lz&89xcWNxrk(i%L1n
zvhwRI!|yeNZvY+#@mDgRDfy6c?jh%_q&7Zteb)asw14aRtpA6!|K at J^m{03hTiw%S
z^^ei|vu*u}_-I?Z7Yuq#d$%9c-nSP2A+f$4txse5v9on{uaxc~#TZ(m-y*}uO^T0N
ztFttQkE;|P^Q`K#_CKQSTi0jsET`~T*C+Ir&_jK4-*KKzed?Pdw!fa%uQTKOX|a71
zt-nax1Jm;hmoBz>yr%2K^8l(yh`xxT0zvtMWbf<xUcR`EXUc-XO6imQS{Qut9TdI>
zT25^*3_kERh3^S^Ugn9{UmQIz)6wi@)c-vLsOa4dUab?e4JQYai(l;Y)LpLD*rs$*
zc`&0;kR0qN89BW4@}PfBLl4k*_VBZLt6EmOAByBm-#z($$<Q0~-uuXejOW(O9pB>J
zJnEh16_*z-ozhr3v}z={_QBzUueqU<B_$vkMBBZ0)-dzMBZEpyN{$~m{e0GpC#y%_
z2?`nnkAE`to4O{d&%R~)oPQm|o`Am)XGE)@Ino7b>2{}8oE>c_jmVb_T0tD}XE`0w
zH|TEln1(4c95OR!+9ZLTGJT%=5wB4rg<R`&jw-j1k4Hqu*d%`hpmtu{=usRr-9Wuz
zgAh$~WnzrVSqyfJI*W-M{L)ljI*r`rLG!l~TNYBFPs*oF!-Z3YRc0F&&pF`vd79p3
zRMNc|@v9-WpDq&>qO(p5?PYc8MV7&CIX=2wI$~JK8^z~lp-wt8b5>4Y>wZw%dHspk
z3-fO-1J0lyx`e)8_y&LDBH}tOfzDTrogW<De+AD;*+9?_gaNy2XXeZ}@%*6DL8a&e
zWW-ba at gQOwf$sFarITnI;at_^%B4r8bfpqa#}Ghw=@KO%w=0=VMJ7NMc at IeM;lb%-
z0s#blhh7D1$crk{5eNqg6Md1ckMB+I$|7YE)US#PeHI~?X_E8;2mbgyi#c=SUE_xa
zIEAE=Mj-~_sjWz!y?@^6Gh4yKoSMdl#RShyruXEZ$s##>PDLX$k!uW;)_HcJ!P8w1
z9@`Iq=~Y#&)ir5iMgcIar;dNCX|1g4mtF%d)U?*%|G;;fkvwz%f>SS1Kql8O;s7{h
zY{7fX8N|CY#L^X}7;|UczL=qsMK+GUb{%(V0DrwPVZ)QgKde7tR<U_R)tFmF$EKfs
zaVs<|%osd!!a`WLFtcJ5{@Y4uFmw0R#e1p!pbGBf3uQ8_`)E0<oQ8yu(||;5H06^g
zufty`Il>=Cp;x1(<c*)&zI*1Na($soLHeSC)6d?j%+$vvBxMOI^trw$CaP{&eZ8h2
zH!fv?N;MPRoS8l?CB18(DsxmJG7FL5aUADN9mtBBoIh at A`!h2KmFWlIF53!Tpk2l%
zBxdnzL9o6!Hfr?HG4(;X%j5-as+k~aX4<rrG-;eGaG#F!hAkTy?a5Wbt~6}2u5_?C
zBPXwKYHm&j$Q*?S>sOb*Zr{Fj`E`E$3;o6quj?E=9309)>H4DR=mYE5?~jhLXX_aE
zBfO9M>B48dSjZi9x8?gkMh%MN)A}XMjhmT&@Oe3Sx3s#jrdOlyo(+{t68bJJS^VVg
zeY1v^^e=EJ#K@?cS5}#)Pw1PR&L5pIqIQzQzak@#9uQg at a<a#ajKu%yhGE=f7scr?
zZX$qTcKZCJ3<)=@<O0b#A<hT0pDC%{jZqUqp<`w=G7o()HVz!X*yux)=yZ&!zIi$6
z at K<;v2OW%wK7hVH5FK5lzdUaE=+3&~<IVWTeK^vSRxA8_b;UhBq&K7gmJRZ8-)8)e
zwBR0i=SY3 at p|~ee5@;8GKuSw5<wvBQz|i=#)CBMjN-C)?9Og6;WAwzi3r7x~;{Tda
zJA9Hue_8WbJ;vJZr#I|7%5`sBoYfH9`4rRV(kVlUbhd`}n&`WC!-;=gIQ;DM;;i(?
zGosJ3v<-0ETj3|TZ6e=-LM<taZE`Sl%XI8T#)NlY;H`_Nv$Lm9&(1!5A|)#`Z-88@
zEy at iEj*71K_O6MF3J%UIEa^4LIinxkI%H6)R@=*2tL<Ad#L>ZhR$}koetnW6f;2fn
zn((APeL!MvL2^=8m=df4)kz7)dX~8wN#-_KU`o!)${V22Y6o<O$t68aCL2=HSF3gI
zrPZbmvVtjGLtqNiF_=hZXgmktdAf!Jm{rCmN_YmaS-)xznT5o3e8knW`jv$R4%Ouo
zhFGWx3#?ZqIulMIIPXa}x7GdnR!z;32&-6sg%R60*8gsBPq^P*-t!iDf21HWAwNGM
zvEW`EXeXQlIz(q=L`P<%!-aZ1%Ft8X9^)_IwLtD?N=6;#B&h&mz6-qN{}D|YH40<`
z=Q5Bm?>O)ofEJbfD{BZzR(B)E_~}i(ei^!~*S{aPo6XlTSv|%LxmDe>@w?j>GvDP?
zV<#8RXsJWZW!j{)oHEo_rcF%8e_IFu+Oc^R<AkUCCAUmR*YtYeJ|(rZ2;H*z^qPKf
zVq6M^1J6-4h9lIRkMDn_&#WSygiR=In(@@ykgAvh5E2m+5~a({s=z}fEhoj!XhsD?
zYaJctMQM}t;6ia~)kySEZ(f&0xIa7Mktf9z^ap|B%y_ti_X|=}*Y at joAGKe-`uwRk
z;irwD_ryl@<D|^}8`kgNzkY+b26w^-xE&vwC(OK<&G52yUgf=M;R{z at J)Xa|sKBAL
za75{#YJG*Bkl8S1 at 5T-Lyu9`n6;55gv^hVAwaLFvVRJIy_}0)!S5*X#hZrdSIssty
z#Ku(;415uPo$5)9x)R-qp2QcKUwD7RzI_|kOl(}u=<yQ2$}H17EKFK!M!U$u*|G1_
z5~sdp!^6j;VRih^{TQ<zsV|lo_#ZhroEbMuWk-qMoyr{J-!|*)+0mnKojcbjI9v-x
z%EuU1)(fZfFTSWp+Xsfm#n%)RkCn!ER`@Tadn=J^8=;P`#)~Fwd};G^3}kp;eO86=
zU*ki4MN-U+W)QDON2a7zj{-8bj at I*X*^+<O4Xa at Jpi$|%rEO^MK(K7Se#{i~;Xqm3
zVDul&u)Hx1mB1 at FE-j@%giltF;frH;+Ji!^j$Os at d0oGlM*$bcP98A5r4Fns3)Q9d
zF9QqlT1v-%*VWabOLPtKPHDQ9>39r!bazU>vLc|i`IMorNQ_Mu*D^m3!{JQqzUBjP
zl2aS3`MC%zDnER<`q7|Y;4vu2 at 2v$bdcE->-j95ZQicCw{habgm1|P4+A6U;<qDj5
z4Vqkmwp=~;XvGS=rt#D1%`U6j_AetTngNfDBt<h)fCo}`XLOC<{ndZfYBX`&t~U&W
z%h65r2t7m}l at DHK0OQUbd=9*I^58k?9E$nKiaxy>Ydd^C*#~VUSGkD=UTZ){qzvSM
z=2hSzN~Pym^d^WO=)&hk)&;Y+TA%n`C+T7hhWX~)5cBCt7uQ|)vsx#vHf&H_ at g884
zBoxrAgg5mW%>>5iK6I53ae%7z;4)n)L`+26b6t6ejWqJGi5~$UcyC&CstXe-x97)<
zt*1=Hn=p}OOIr#=ohAz27ZBDvh#!b2^{tX?lS!U#OCn{fOeq$1!OI=YNUN_--4j22
z+hLwZ-_IylfGPmp?BtUsHJ%)s(zkD#6Bf%O;u0VqTA7v$9JBx|nyPh;EiLUEDVJ5Q
zUR_z)tC!E_L7L#~oOwwWek->Z<L^r8O2mQ20Ifosf`6y at 1FsY>UK%!CjBv=Tg>RlZ
z{_fT7KFNK0h5KI(IH?|;<yNyP^?m<${A1no)6!P=Q_5CVe6e85(LGNtJgATdW%yO3
z6nX?XWjKWS4 at pI@J2*^SuxR3hwzP at e^d>FMo|2f{T_>>$Q)jKnfQIF1=`NFcl@#U$
z2S-KKczahzM+JxE4$x{91M;%6l21q~4BVQOT#%ax`Vh4wC`S_%k<`bpckjem?hcOD
z+Kae$;WJpa6D?6%c{cPfq6$7!Ad8Jkh(2_v4Q1CgG^|~z8y_!giHOK5C?>psNWKB1
z$2vMNnF?26en9AoIfQFGY|g}qpI;)##<belC<@Wg at R*R1BQY1oyfcr;&iQ}{&pf at P
zN8$GR&^;gJX+5e^SdTMr`E+0f<VJN>qXt)ivW21o^<RBg4QfGU1-k#Ls6NqgT;gBG
z{rZah-?e8Z%U3s`S40W0zC1FSi2#=zkS at vqJ-S-duX-eq>!tO54BW#wccm6`b|X-7
z1|(e5D%uLzREO$EjUvmsuI`?stC6&5m-XlMCO!CG)YhcAgp3cXr1-J8JxppZi~#9A
zeNv~)jLqQ3f<b!JTBr_6_R(0ugWuz*<k#ZCN!~jzj>1YIpdjF>5$9RlH?ns~s#7KN
zO9$3(R)KbO$?`V;f?m&=%q{SgMxLPiD=j at gvW_rA{Kd$0CSV4^#z6wOOOcR6J>1E4
z7|=UEDZYSU<7c<X!m`hHL*CC9qbbA7KVRY2>yD%2jKQj4+4ks+%qWbX&X*$k#KJj~
zA%wm4#umu?Yog<$yj{xx$cq<1K&eQ#3o%R{L~o#OOSaow-5Ed>+~Amq5KtIX6}ol<
z7JQyL#=LLzN!qA+4vw`$MY?$&28jA{cX=TCc7cvME7I>EGmNJ-&#X4)5w%(3)5jnZ
z9uVI&mD!F&)S9Z+R`9Li2clzxH*#`N|Hbc${mUTcGZ~U@?Z?}~!2h2s*;X+Av#$N|
zE-Tn~oqN2}P1n``3%$kl{~Nu<Sb-NNQCujVgdB{gaK@)RdfJD?dvuvT%C^GkYDZ1w
zMDMpk5nd!r{U;lbWUBX{wV>r2vCnMWXJohihNf#e^5hg<51S4c5)&Q at 3Sz24);<M5
zw|&RzJToo6?$YaX%hp5G(}oCtQ$2?<cXEq_aC;U4r>g1$(ANKM)hyK7pSGEY4g<Hm
zJmW(!3Vo}W&Wq?C!2!2|`66f8xX9?W0}@M;1UbS&47Q0|81!U8A0Hl>cptxhfaAUW
z*825^JH_41I9=?_8L`Qr&$Q?yT{P<hoafKu_2b8dP`?^A%izFr-dXZHB+>j1DiR+|
z>E)^7lj)UekOJE0ZX7;+dhNz}sDAFcp)+O-T{m}bAGgp at x62?<h5yI}{l#AWE7otQ
z=-+FPUcbjVyJExoiY%9l#&GaXFK-?CQRfXVq1awNn9JyV%xn4*9(NkXT?R03vMkvr
zt<@$m^&~la=)ysU7ub&~&n=9}shtoLyQMwt$?^hOby;qHSW at j12?=|T_VL5h8v^n4
zhOT)EzOve at e_ps&qjh%oiijwv8{w+jn4TUQ?5}q6 at QaKXG-f1Bv1UCK&Xe$2j634D
z7n))P7gn%To(d~kPD$2Ya;+&?nLI8&Ultdc<e_m|=v+O(Ow4Y5>}8pCiHTSgM??gu
z^NpcpDKV6ieZq8RoREE1aF=~n8n9V3#IHZddeimXQ)@zTCom*D+T9I6>&@46ak2P#
z=jre!44U^~eP}FGNkn>>_c4^8(qb=h0qJ0C1&FVyk+x+O6?kKI`!?B{@qZDSd6{j_
z5~u)mC)+c+HV*N_WeTb#YS`>4#9ZOl!8XMho#tS-YTozMwEq1w`z7V(4H~pemlhDv
zzkk#3AV(GCqt!0bhWV;hfEO-n3JOZori6v4+_fR$$-4B?f&z_xxKn;|_1H}OZ|qQA
zj>~YiMvw5b at p#E4tzdDh*>g;1aE}Ps%(`r?)+flV977Qh&`+0}3y;7KP at qRM=YfpO
zaW%MMZ`^xHdU6WszUzLC#eE^}OBjzTnEP`PlJ;wKAFBt=Xq{dU<)R$=6u(F15LuN(
z=&Okw0*lbCV%UThVx~tp$CZWyIjCRbQHds>=da-R{A}LCb7;Lbw0J75+Gzvkg|Mo4
zfTc~>nIgf*L=DfQ^ie=z@}-%6#QlZZ+)E<8SAvly4 at vYSn-FjXfNB5$x?}Du6!O6-
z!-f_B^w4`W549QaxT9lPnWKZ$r$SyFkl^Jucv2=v!%LBlX$W|Oj}qreTI|-RFIb^Z
z5n=f6s{FC<zh2y4HBeDsT{m$`L&USB=V|-_rx^Y8>2p0jUo5Gptr|LdF6oZ)*ll>v
z;%dn~!1$?*Fjq_po>qrNr2z6i0V at N1I1@sczpnN3Nff!RFzeias;U8<7Yi#Y3P1b#
z+V!7)x_*u2b26ro{6lV`WaTOq at PtfYwsB($xx<djS?10Yf;q2`yh8CBE)SvQ>t*%S
zmm=15Tb57D^H at 2b$721UViNPlT>qGCw0M`an8cDZ*FPrgVeO+cHucY$>z}cye@?7V
z{T)dxA#Q~jW5~dKJBYs{x!=Ma7Vo`mHN(H1!l|`^pV;{((DDMY{H7WH?XnM*8VuoS
z`~;HsX#2&o337K at ew3CMnBm_};n&*0Uy0$LK;bVC;Xf?apJr44r2IF at U(=@kNtp;g
zO0lUwg?sVA09wDFP5mj{(FX%1UlqGcxI7G(YvCGM9GJ=CkioYl9}~sP_<13FF07{S
zuMk#&A^-4xge?9a-(M-cZ+uAN2Z`@1;2Bx0NM8?$4~+O8E*Dmb<4d)v|1YUNO0}u~
zFR4DcdqL+dT%5O1I&WE6dALQ(2e5J>mzEP>kVHirE{~w)Yh-IhdP&9jbHe3CtXz23
z%6Emd6DhX;w$#3CFD)<bO7Aq*4W<j(Ta+$X%$qDsFMCCLxkt;3du)FLYu|LeOZywl
z?N1}^o9mxctP|UxM%p*mKPkH|;xo;r{#gPQt)FI7|E%z*gn#0bh|8lGp7~oW9~?@B
zU(osk#q#-9 at VDUd7`Fc84q%>i?~InS_;wL|2`v}#Bh`n;SnO^tALHi)ZNEh12NFDI
zZ0esg*FR%Z|D3sgv241yUO%9Cj+NS{_Y`qCzm}GlTIwsxlp3zt^cBceLZQi0Uo2ls
z%bO*5Nc(Oyh8tbqA+$UPogwYx@={hV;Rh|SuCIs|K6tPmmwTW*-p;E26w}%V)h01^
z62)7bh|d8MKJ5xAKPzMFOI~P+wWPQp)rafl8KB8rzr<X>6-xf$#WXe(q0hS%4{_3X
z?FxllQZ6r`<z<$<a*B1hop=gQyzCfg6X$oY>^3ehXYF(MOiz>gm|r5X{ROn0c=P=3
zW$laf&wRj!VSb4ye&R)ZZZXgAUb^1PZRU3v=6}}pr+^`p|K+0rHua})_Z|$Fe821n
ze at YPf*8-9M&4X7YA27<lDn$NuT;zYpDF0&bU+VULglx9N|9X6XrTBgwjXVDtexAt6
zC3#6>sgn5|EY|<i63dFN`$Sv$O6!-H>$h at Wo8{RlT3=^VAMZ_sfwcY*k^gOz=$*vC
zq4P7E&V!DYr=enDAe$d?eGIYGXX^lrrt4t6rM}#WloQE{%Qu+i-zhpjIve?yhR%@o
z&G1O;gT{KK at F$CKeoEn|_lzn0Rm2kvw&t*PzYNn6i495U=r)Cu#fYrI at I;IBl|##`
zEcMOpYw^=hZ2KYanfuX-Z<FVGOYAWEeu{`+NZ*S$-R2L`@@kR)&!^>HxW8K>|9M2=
zpg9Y<cvQ?Ek~PzE9W7@*jb50}Z&7 at ui1-3x{WGM#x&3oO^#8-$x4=bJbb-&@*Y5J%
z2e7<hfn`BZU>8_WRMhhQexQ;j`6|tP;4AW#ni)RR%4b>mnU!LhnkhXkHB&20(Ml>q
z>g$1K<!1%E!~e|OdzW3nzQ^zP|Ns8z?45h&%*>f{&YU?j_s(1e-|2(@0CF?^&mvC#
z6)*e;P>#|s`bi%%{5%HVC+_$7U#kThz(>h&;RB`L<@?|t_2B3G;2%}--3>nYhgEzS
z_r38CtN75LKGy!M;M<@dy~_Oy`cs<tlE;r+t@%#LXXDlg$Cdu^0bb(Ce_72B{qZ&0
zA7R{lja%!<KiQLit&)F(a2$ujxO$WMuQMP$pV_lCF_ewBm!ZFWAr%39G{avbjAQ=s
zP1%2?njun;OQQKGKIqLCf{kg+a0VZ(?q|`3F#Fw+m7gvxrS_Y`H33pCz>Aqb+5 at LH
zRkeZN?l$=I at HsF1^(sD^$}Pp+RD5QSW&Ejl5w*t({%I8-#)oBI<quTxL9Z9f^pnB5
z5GK!#%J{q#i45LP6TswItoZSZn$MVH{h*UlP85?PqUWEm^6ygm)3`SAH{1q)gTjCL
z8;+Fz0;QZ9M*nx<4_;#UV|>bI--BiIfzHZ!ThGde(Nd7@?O2AtT9Ezq{?HHBvi5dX
z{0{l-(%vB7o~*rN6?jht|F92!r3e484}PVB-<6JIUVfH3j_F$1j}5Z at kmaI@^6>cy
zMJ}wp3@*3#38lUC-Sm#&*QoQfDT=@BYd<~qtmy{mv-f<jLY?mcAH3&#74m#f{ywdC
zya#_HeS^G7eRuwv2Y;h5y19JD|0LO-((<VsL_zVhp&llOI~036N|DECulj!U<X_L;
zSf}Hyf%{#pm)Qq7|9WAxVjo6P`=I3isa5`Tk>_syP5yH4{JL*j=BMp$&aa);DnGQ}
ztNveF)t at G6xqo@;-`Xnw8pz+n!@oT(`6rj-;a^TG{;ik!$NX7(UaLBPs_ at L8`msF+
z>ins~YyPyK$u~ujZ>B0=p_0kBx6-~fUV9(5s`${ZEc~nozsQ5XM#ZP}Fnvf-+N1cv
zqFrr|eD;bme`Itqeel%BmoWO|`N&583d<+&7x at u#Y~&X=xxoH<{C~EmO2x0>ulV@?
z>imUyIkG>@_72GYU9(-Id=?nLhARB3Xx>Y}=&>vOTI}f$0^`?Eg<t!c%V++dU1|R!
zxqWIrS`TagP^JA9O8fVzbkp%wua2)3zT-E`@f90?MtO~|<2~c?Mmj#K<07MPltSNe
zFZ)`m+E-1waM{bg<|_6^LOuMdl<}b--LL7f#}&e5**>|Rq5C#H_NhX+n+#RU*G}=^
zZ}hR>*F5+eeeC at V4?StZMP?Ue{2~wjnr8ba{vjRE+r$d=3u^wBZ!^3O)wKyfifY<~
zpG2Rv39qDwWwinS5GS>SYfS)uvvs`;ehR(U3|GD*e?XrsRxG2?FXcTY9yrk7G!rQ)
zP>x9V$20t+6_gKO;vEdmd*CNq!lic at ymB2YrBwE#VHz#fGWdrF7(UwMWq(Zoe{)?c
zdSv>W=6TU0e>0iUKS%juvJaf{{|VImE#+qXqxZIj5A>I|T}~x>y^V5!|L83*xCZFF
zF6#q5;RjmwH9O^$rhz4uYGj(o9wjYZNdvxWfAiw&*L-)Ce+v9$D|nHIuK?$Et9;e2
z@#5>(T#eF?={KYqUD$}cz9H>_*ZF>1+5<m|zHbw*>S;@OB at S;B{vi%-30L&g-6s5$
z(w~}CzG`Rr at b!u}U$v8b_<9A~oB8Uu)QhiIl)ZAmKfje;e7(XCSK+#Ey!d*Bt5Ess
z7v;s*E8Gt%T<4VA(KJo2n-i3}={J_L6rFuQp^GSK^0&L0-fs8(MxY9>d)f=$bkzet
zx~gsX$u-{PM0wzqyS?#U9{7hZdE<AaaJk<-=MB&Dz)x-VhC|zgJwEcN#eJLQA#C)K
zN3FL!q?f$pQOo!C*ojxX<Wbu!CrR>>M{Tp7OTE41QQIsJajK6zYUy4?m1c32k34Ge
zpGulMe#&<I4WxX9(Fb0KPPPd at N_S<p0Y8Zjv<a`oT$}I at QN0&j1LJ6o7k?%0hXTf1
z at V66uc>4odrt-Gws_qFd-u}SJJ_!%-bzZ#vfxE84HNSZA_6IDlNlHyuwV7VL{Q*C&
z=qCLhrOcx<sQG)8&2W`RE#XJeYi+_$qQh;%E3u|c_=gy`gex}Wqc-8EeBhv$n%O?Q
zyN35Dyrcboy%&$J at h3g~JJE|5*Oc=ts6EQ}(WPtLOr<RO`<$|^mCwyKw1C&)>Nep=
z at rgF!C-H}E!YlEOHsK#)cT2d;C;Um9 at KgAr7aZEAG5hG=uftXTjrQT+uXNN_`?c;P
zFWvi<mppu}_TuZWywNj$nY?uGS7mQ99lu6<@%vZ2Nrh|9`}FHyvA(%qYvX)m at hcwV
z)vy1cdsM~G+wiw0!~IRK at m$8+)@q!mc>nSm&t$wWTa9xR?-sj{W_ETmwBz&jt?fI-
z`@^gM%jNBBWfuUC5Ao^)GTz&*`Ub at d_0j=`hnKd}4T=}0%r6GW{v-D>m7!h|T(^O{
zZv!W{fj6}c7tw9txEW4m=z(*$f%CFINCqhW>0Y#p!G+tvMOi<|0Op?poa at fuihj0&
zYg9P%TLF&47+fpsA;4=Dct-};HP_2 at P_5VRHgJDMUj{J0D4F}1j`L!;svj-j5x0Ry
z-Uc3Z8+i0>;4$8CI?gNb*xSJ4)ILWBDE`=9US#cxmu)P-Cn@~=i at _}_|Ct{Ka50p@
z6I4DkKa9eo7(7vhGd~RA!fXalQu)vPFbZd91}M+J0Iv99dwDiCiODLRiVwDzXSP+8
zpPvr_x%ZLv5WmmhgKq;LavS*2+rWq220r{Y at Da^$S<e-C(QV)()pjX1dM~bJ at KGxN
z6&t;mWAj3Bw90>GpDEv-Wbk4SpQ{!4a}0i$3TO72mh&}(k5T!oRm$h(^2e%h#Xj%l
zb};ze9zBUu;6E|A_q<s?tHNtOs=x!-nFZ&(;mmGKHYSTD%));x&lhF5(9M|4w5<i4
z;#2$X4QJ&S0X_R<U&W_<nBR;4 at Wz+toyu7sdV1D}JnvNC@|g=E^vnfiK1%)7CuRGq
z&Qp7P at R{8|*K8N)y1r@`<otM~aDt=rH%Vmk4!na5;67 at 46w*JY at A|0e^qgBPHE&&D
zFJjqp at lRdarKQ=r-I3KkB5mUMLUFs!mf9sZD=n{k-sqI>^D{b78n=m2{AA#P#4TVn
zuN71I*_sN*6NHQCNhDsjg7SPKqYx}WGn}r~a!sw_jOVvn!0Fg1^Zb_2m`U*|&ky+E
z)3t<6UOc4p<nNXF%N0mVVthRB at h{SRaIdI7J;l}TW4Q9UB_*Jv4w>h&KgG#wbEAb5
z{7I(MpW}F1hFH<WDRyoyq{)8a)o3{-mch3Hd@`FCvGp>>xwipc$i{be2F#|`<9>iX
z8O`#UUr7|MX at GJruJeW)82k^Q at e6jJ%<>lj-oDoJJdj<o_=-<{wr(k(5ktRD2j$dy
z!I|E&_YG7yPv=HHe6026qwpo;V>QDa>ETx$akJJlzRCRv(w<k+*qJKg)egS=s`KHO
z?7zr%;N4b!jcf;ww1m at dw22o{Wh*%4*PrZuDd-$h<|@pG<#jFKbv|&pK3PY<XjLxl
z8?VTAN`@=zgz_0YcQF25^McEEA(`>_n#bSG_u;Q+zQA<)RmR^-NcFQref;d7 at Er<&
zA7p*Cft~>)bH3?k{G`%{SFrY1$$eV5&h4gUq8?u34(-db_sm8U6;9Vpsh`*q&dz5J
z^MzACQv5^37x&={P0y?N6fV~I;KLkKo8!~&AMjIZyJ3#|9&7hS507U1;QosDH}gpP
zo#B4YaL0iC{D7V_2z_~-JV#;nvRJsz&t~nO$LwV>*vrQidl_cdB>S37>`p11FtJ at k
z`^-DLC8wvSirXLTkTJh|%4o2cX<4~lQt2iiGz0J8u5uMXpZ;|Y2^b0bnzLC*f8lJV
z$zrg~;O4m3a24b?N|%Cbltj9R1$rZXNkH5d$QyKs<<0m+&Pl(fDj*l6-S{u at w7z&}
zoAI>h&;JS!=tU$(Kuy;{pV)f`^cR~T|5|=GH&ncVv?!)9kZ!EeF3 at QaKSk8(FSw59
zLs>VEpEcxX;vgJ at ExAS~H?(9F`Ca=`g?L|&w^utq#Ze`cj`93z&L&nvIdO$SJQO3$
zhH}Iyh=+oX*Be<$HOHYOQy1JBTO>|1zGNg0f`SBNkGIx3&ygSQfpR*NTO5bGLOHQO
z4=txvF&9`dX0 at 2kN-@iOytT&pDfzwx`O<^1CYiI*6An1rl!}+MIB29`TzL-;Kj&Qg
z7NUERfCoY%<ADL$3&R6=6e#GBLA$_c2vC?2FeS)H8A5qtkQ-BQ+<w+>$oFE6s78du
zlF{Th?aTYfmKMy4yyvlIuF<-IPX13urvYUbMg;Jz=0IV#TsLib&=g$&RDRsW7@*c(
z1NF1oRX$kN2<Ip%!og6f`(!H)uk^4Q>IPo(=NYdJ$U)n!)cyBWU+`2dwyrv$WHhVM
zQ}uGzT#(92FY&Z!ce8}V7NQC+;<8%FtVgr(Fv at T0#NUE){83(Ej32+>pF5xv_G?8n
zTMFPMJY3|4YS3_<zcv5}KVD~d71Y^}Lo1Hoyig$DWnu?!4YisQO=6CScVA7#o5<AE
ztEprv-XvC&zKNeFHohVZg^PE6q3E8%oDhD0D0jdl>=%P{`vd(B1Z($ej3RU|e>6Kx
z%lkw9ej1VIh8hCUa8ppIQO^g4=`Wape|2`d%M7*KkK2Kox(mnc`jdA3_lzPvCG2|-
zVa?R>J|ub*n(9q1X&|n|ONsPzxNyM&mMHNU+wcbdmQaGsVBd^VcmN6qLm^uWoSo~G
z&s$;JRW<TaEFB<Ejw5GTpFYd&**Uom$MU{?meI3q8u~7?J92XE*-QKMUG8w?(j>&}
zunl(;dJ6jyJsi;hw|pG##?K(VDerbSUF8yS2|aty>9zN6xAGC>nL7v0WKpUgfGfNM
zxH`Hs&Z?Y0l#p!o%Exz~Nx#WF(><|e0fW?ncv_C8nAK at Ui72_y6cx;uT0(U*lOzrq
zxqw(MJV}3{p8jLqs-WI(&-AY4c5(45wHo)NnFDET;NMW<p$LY2`c9YMRj at ZQO&Q36
zx}tvQ{z9kSk?F|HvS+m`3|NF>7qtstl+ at F>C>wROOEWW*7W5C*^1)hN4{c{%A8nS?
zqP01rw2t=usbxHVp<aLd`o|Zq>#twDPBqF7Z8>hQx6^z5b$e#NVWTv9a9JRXPQYp_
za<X&H>aOdY>}2c}w|U`M960fId343^o<8%=J7><kQ|NRScFW8AGp;Z%k4Cz^d*;l$
zkRS}Ka1~bwo!&itn%=(CEia!Y^ZIkgPn<u0;`q6V<uARwYR!wgS99O2-u>bl8k=<P
z#EH*7J8|ONU%&J1J$Py=)ioXEW6<5eM?VyXET}!o2Op>x8iwvx&SR0{TheN68{DGV
z>_7;8t40gWSOL}0X7WgLn_YLb0Q@^9pr&Pv3vDoA;@`4`%=_#!ysAyM&_1>UE$3zn
z?U97S3;j3&X*eF;Cu%^&?aX+eg%Kl^H-+LHZuX5EBu!}l1bK(N`y^f}pXq-L@^4b}
zi#*bZ_&)dr<5{ofH(|(a;*a5KlJ?6lLVL30C9>p6+zodJKVt>-+a>Hh0%0ljGXzfd
zXOTESK$5 at gd1&N!fxCmxIGMc at k?;=1O%UWYV<<x!F2k9xBJkBM;BwgsoII9vW at lyH
zKtXIrx!0C<y*bRBU`y7^j-Vd=zz_PxL`TQ;>mMBx6W#yqNfReddi$-3lO|2%Y6=Q|
zyV1FGK>>*_C at 7ph9X~xC{>a4X)8#s{xC*`#tHXc>7p53a(H(%NG#aU$UK6Z4<u3$s
zr_d)Fa2Z6L70lo7hq3~+B8;6d%p3=!ZeXLftKJTbguzqpj>0wQj at O_&((Q$o9PD7*
z)*V&@&s*IMi^x-Wf$NDU7LoZkxQe^WMscC;U+*rvga?uXOjc8&-PCWPyVOGEJ)N?<
zD{l+(I(|sr-*4c)B${@U^S6~vo;>OBfGxxN3+e4gj&0vQJ$-a$venX6yz%&<=;*r!
zJo0G2eqrW=gHuwRxicQfbs7yx_yw5{L!nN<Lvd`^TCVD1vm=jWkK5~b1tY6ISw4&j
zcWGyL6l at qav~usUi4&&J_#%H<zXAHR^qw;v_I}Hvqw|(UMMn!yL<a};?X&c;Cnrxj
zaiz3WZ`hC*6Vu}k_ra{pdGkv$Gw09CWNn`e@`zwQ8`42HW#^gj5oE!`cme4!k~=6)
zbob_7o{9Zo4CtZI9EEK3ZDFizXp3jNDAj`@;u*}w4xb5Oj5B516w>JqD6V*Br;g(%
zkagoH%$qSGD{FKyE;?k-+L$>fGqYo-aC1aV?Bg-9u`%!?+ at sISyK7bfsMD;wX6i#S
zI`qEJ>70IF?+zI|M|ST%vZydVo_snn8U7|tw!t6$J`m9802%`*Uy)iZ6`o1{T(HVr
zS-!UBjgGj1GA?RaUUX(VhrQtOp~J?E-FxiRjOkzIb??@<zkXED84kO+KQn9I{LIXf
z`SY^KLoq?Yz~k~hea{{T9&2^_4S5~!=)w3p4*2?|7%YE-LEbB at 3R&Hxtemt3x8uf-
z$GuZ?bB4_AR4|@Q92ORqcc&$OINdpS_Kx8>;pR at AW|NP4^uV3_#m1zkk0UpG(0<&x
z=?34MzXSRsjO}iDy>vY&*G&pT3p}tQ1Rf}Z&GEpBA#VnQ&Go>t0Iw4(FU$j*3V4YO
zX7<2_0<0^8g?nI=A#VhOMR;I6Ja~~FSWkdC7%WPLfnKG7RhtaHpcSRkJ;NsG!WQ{#
zQqTF|>>C!LFnPr4 at fJ>pEm3sjB&K6bnlOGBpT~Y{-r at Y-#T+3tfcN&}+IQTy-d#In
zFy^B1V6J`Hvt at WknfpihDI??I&V8P1Px_aY;X`H5KKm>^|MSnLt6~=DPd1uc*tNYh
zPm3PUn#)J6kBpmZPB6_&(<T|r3;3Bi?bED$N>X~FNt<H`*71P}9nwRjz{K>FXk%nH
zN--NXfjQt$*y}GakK(v7KcD_L=Yzu!{=dOY?O0vig at UuHZ$av*dx0e(F#++3PDi$^
zsyPrfBKfd7<?CP?OAtL-#tad*Wzi{SB@^-)A+Ke>lT(Iy9>0=Po{a~QY2UA&m$G5b
zvM0^>QZ5<Ib3DdFb4Y#2Q;*Et5QX=A^8-%8{_{1#IiV4Ge$ssGkCVFeARCUq@#U5I
z=~*Fsu6h2~HTzzG>1+y_s|yuRfrpR)o>nJ>98O2B(_~99glb at 1u+Wb_!Mw%dq=$sk
zEtEVbVN)aqI6Vf)#+$$v7<00r0l_$BTgLrK+szd>pWTUf7IKD%Ce*rLo^mHl023aW
zA2-j at k6XQSz^$L~6!PjndlnQunp7}x<II9y$@&xbSMpj+T#<KU!;YOqI!Yc{NUom1
zPvNrl&%0kCP0zb0^XYgwwv&zI9O;=vhH^UwVrTVx<?jw={W1;4zDpqALb at KTVV_!K
z`-0`&tOnpdGiP+eaIX9*zFZ&EPdjluvwN0M at wMRi_5*R1Ys=oeyq!<K^LgyzC&`tK
zr0VIX18!kUtj;lv*!gL1WM%j5|K#EE<D(zmvTofntljja26OzKi3tu{8JL>l(s{dI
zB0C)Rx$|o8$S=$A>y%cO)jn(NeRfB$-rI2B^sumn3%<6evG45eCe>mV^hFEZ564<y
zNHl=yHR$P%dI#NW4~jxJK2uVinC`GQ!1xU+vUJR&Wj9~0uiy1oS#I8J(2U;BK?9t<
zqsVik?DtO21a+7*ES&s^gSf{};r_ViCy#SK+|UNcQH8kcPDA6%`fej%Ag>F<Lx;RX
z>PY>oLxG=nLf=i4Lg at ZraPyoN-ZOgg4vod6uujtOJ+XO*nL~?)9a?m-SNou8Tg*gS
z5fl(U;{N59IpWg~x)+TbKDEcR&VA|ermytOOpnZdX0Lk>0^J(~{>@PF3-I$pP&hkz
zLK&Z_cZrgfV}Ix;nCMX?8hYx2g&o=FR1TrQ8e7?2BS#dwD_+5ocP%X*y}X#@aiiQX
zk!O})z>oGI4erNS1gr=*RTwgF?(Uan&i at _{{ehf#@WG;ybLW%zmBK5lo_QvJaN`ic
z;X2Qv!mzT&t00r>{1eg<b{=yIdbqHcAto+b;F97a!~8_)jTmhZcO*F^fEV6K2-h0*
zXm)CBjNTwvj8PGRC}M1sWo(?;G&U;KmN+)f%44J(>yI^K#Z>);y5lu<$Mv67e^O_^
z_z9iP!oN?zco at y{(gn;*<jF70Sj=_<GclR;6s#Q289<?l)+nztfxwh|&I-BC<@8@(
zMBXY|-j6Tez58E9Mda<GowJ at VYC^+ at i`9q5laj%M at pI!3k;~XRl-=A*uHqQ7m4b)T
zHARHjnxe9nDDN#~=dgG1dgk*0+^>|^VnL1)`_{=^;gWkI_ at 4`Y1pia&!^_W_ij?$Z
zI!@_rGMtW36kE=(X`uNf^X>AtNT=mArxz>f$#l%~U^S;_sp)k5Ya^Y~AI8cLZ?pcX
zN_sLKD?M0k<&SJLe{rkyxu~u3J?X5T=Jd&}(j$D*p?+x!Yrj{$(1-h at n^IRH4`zbY
z|1~9I at Su6AYh%f>Y%&f%pS_G1YRFmqj30i6oJANPfllcXf2a7CM1u&}IMm9YYQ_<s
zTb7NVC*!i0vGV6a`S;1?!`RLPHcm9nZARi!YH&80;72B4dLAe~(sT*RKh5ZI7_5Me
zb40Gb8A&|dOdIsS{!RbniP#ftP%7$N7>jHcU6f>dJ5+in*z$H%aOivO0+PZJAIlq)
z!rQ^rtA?(`%8PJyXKP^C)n7NTRXMr{D4*M+o-<~Y53$S1Ho^$3p-CJYD~w!&DI_~R
z{cOi}9rrDK?<ex%jlEz0uy^ufh5@}Ntr*Z}(j(la2?x7RoV~Fit#BH7oBT at lk)GeZ
zb`onwUYoO!-28NI8Tiy3-386Q=flBFv43F-7l$}e5^<a)i71vAcrF%mg21<fDX1`;
z7X=O at QQ~19d6pW1jJmVx97xONKyuK+T*zwCaSn_T_a|B5uHYtK=O!NEcQo!1s~gf<
z)QfbS6&x#!@FJKfWr>H~PhS^fT;us2M*tV23^HF at DIP;6;BJCGK+6m72T30o{kZqh
zu at KEYy73~uhYy_KKb{Xp_ZULJaM_Q$z*yNy9k3YYYIavaz1g1W_0et5cQrDkQSZFt
z?s>pnx!>LM-FL-f!~eQ__;6{b{L9wDPzae1v>pTBBfl^y*gsS+aDrLmf86+i1}HFx
z8uh^e{yMD&xP?)W!DI%<i<wAQy{q29d at iWllxPG0$pXq}vFCOL4Y%azaD;Gv^{6qX
zVT-{N+~&6M^D-0sdXIXg;VPf&`cyndhBaiTxqeM`kBUtG&V8a6xYi%bG=0GZiI=&X
z;Jq3Sb7(1h$iWr?Z_<Yxp_VU1u7PkjzXx2hyy+@;9()cSr4|}E9<G?f?YNm}fq;3)
zcAU9_EmoFbH04tFxQh3PH~#uvu5&l%$0hPBU>wxHuHyqF6yRBRG_|!3$bHC`(`L+o
zyuF()iFZglkRNJS7~u!ZqA%8*;Z6(wemaN?JknyVzsk7du6kfwCLK9IFElo*NtpZT
zz3%-J$wzBqald+L$I`zl`C`YcIqv)A`RvE&L*WUY0Bv*@?R5qrhB>tN0fpcngn~Z+
zjw?qxJT!3ZylF%FEykbs+&t#ar%P5J+q-J))=_snH!g8u&-M#Cb5Hc|J8RU4S#!vn
zv(~Rz^z;5BwR6`#@^E$Oqy5<Ti+EbE_zkPq41Q_n!npQPN#Q!)W(nmhquvbGRa%Z_
z2B4&Hqg2w)SQ4Ab)+oUT&zJSX4*&J<DMKgrK7Q4!3Fa2`dlpV#X}@6L-E*f6>AUcj
zrzy|+G-LI#it at 3WxvYNuXN)eIRhpzU=g#J~)bD?zc9tyP-_TC+eX*3j8)#*pWf0$Q
z%>0i3d8bh23Tv4T3c}L)OW(P!@YxCuhIzTzSE!)9+JfPqKY;L^xE%K)TX*deDjJ9L
zde;qkjoAwqTcRj7;7;DP3&#1QWWG at 0y20xkhs(HG^c$?gZgv_m_4mOCj=+}YNvs8D
z%~$}liHMam$WI;eo>*IuL4M-W at bER;w=W^jx~sXgPkIa*)cJzDx>b1w`LsK_$N^Cp
zm at MFf<18GOQLy%jybd^Q#!B)}QnO$Nw}4A?S6}EnXi$$&XpB6&Wc&6tjCWaNwJ=LE
zf?aD at 7?yMr#eNugGDLHtoy{WnO$?u8nJBc=*D!Oy1b?<3{%4AIQ?4`8>pV{SFM*dd
zepurrbI<}@G}*-S`iozUpWnYrhc131$45;F5jg)8Ti(%!O3DUyxAzQiaZ4WShh6x+
z at q-KcWTuBCbinSFbGnev$)(9pZXZ9eOW&?39b at HnJfK&zK{CQvJ)EcSP)O2n74G+%
z43`R-7vYr-{p<^LQ at qSy0?m(QC!ShFb^;GO%ZjQkJ3c>-qiV}ckjRaFbJDmiky2pA
zJp*1WDLFcE+~&yOeUk>f$X~j;;?ohsI{I;9_g;NJEgF*VC*9GT)q&fKmjyl45hvGy
zl~aCfe_P3BgHF?`7EXVayZTAd(0mQgi`{$op;1pgv at K9iG|ER~3Nv8Vl^Jf1G_{X)
zrlNF<3F{*RVlo3(no?J0I!(gLNaspR$DHhNvk-&QgFEW!+?iRc3-vYi$MqLr7?-<p
z%aGY7{q*x=v<0TWOB63N_UZk+`DfI!rj at kOXeEi8K{+c49 at c7jXfyt~1tS<#8BdyS
ziI>Fy7-PE>CIp7~@f->W@>{9bt`yKpqqH={7!(+wg%M7x6N6DmbK`Fo)YIYB-a-E!
zb75ehGizXQr88UJM(43k%NKl9!-h at 2k)k8qc-Qw08#n!i_Z)HW;4k5vMMtjIT_qna
zfeW*zU!XTZCVe2LVc&N0EW9W~ni{y9b)~iZnp#<o2=eTrUlu`0g+?7X at q*~5K`XH+
z2}sNNGivF&d4`MnEtyt&CU78K{>I{ETAr(nUrDc5ufj-q{`@sO_*?pZvsc-YT(%?v
zV?-=yR_Y`zrx6e>8wzhO+mu7gwPKZEex<97T at PO;`@bdoubn68syt?Gg!xI7a2#fs
z;AuJxI&1*5tHT?)<J^hHG5otEo>;i0To3o#?j=|8LcD}5Wwr~E-*_j?c}3+!Qww-m
z&T6tl3VHCaB9P?<@*8(bNoU^-<4%zs)l$fxUrT!)Y>}UNLg0CguO`1~68<WButk36
zEODpYA64V=<hKW<Jych49N2)BES-LJ+aO+Uy!su#@+w)t-N!t-AA~+)Iy-|3nUX}#
zBv_5u$O~4^lynqN$J3WDCmYGe<>d6SW1NLcICjka4SxEOM`+TrWn`oKYc7DxtE_b2
zbe}##c_q<zt)+LtzS>Y4%0-2!A6-?%?D<Z7SPZ5|&Bll6>DMLLN#ODHa5wgdNT1t@
z&q=f?$05>>3VJ^8VDLOFO0;+e+Z^uTzV)Y1<JdF%;OF$|_50{8sXe{#4E)er_?y(b
z*Q80k0JHa`$-UIz9<Yx>dr#s^Zj)0fw_;zf$t=sd$!f0NN?>Pmd-GQwhe1id6Jl^2
zcOO|GkB6TU#KxO&D#PqH2N47QRPr4$?g<k(g81bTm90mK#`Vk&v?pQQr&5YsZU_uS
z&7KGSM+Yne*H*bwifd6sB at swrbGcmEoG$bn9MFjhn41q5PpQ3{EtXiU at LRzR=GNiU
z?)~mklFQ%Z4!Qe_ry9Q7Cq`FPfUF-x$UlU=7a%`l?Zlo8jzjmO`Di&>kG7*1(LwYs
zI)g4jxB3M&VhuLoIGl!^xCb7D at 51-u*?0+FjW^?e;8*dR_(Oai*Wnx3#cBBkl_(H8
zAD?yv1?nsDSUjG_ at mPH&xRLD`+zRmxXcLQXfVhB+EH3CN-VqdD1tH at I9uM(Yh{t9e
zLG2*^G{m3Ip!tvB`>GfWPp_h79KolQ>qWS3f at _U(|7#V53|2PhSA!~%9yFg;rq|Q6
z#zR>gLp%XRv3LRyJsFQ<L{A2IN917ejsU-azhUqT0B^uwGI#?J76rjpMe`m(?cwTx
zYu758=Lot}x$mdk4^i$%D)(cR`w7bZ6y<(~az9tOU!dGCRqj_R_iL5=CzSiG(BLoO
z`YhZ(n<3Npf&$wMu)PZGH3jwtz}`?`Z!5450QP|b`$&O(3b0QVShWJX46w at z>{|u)
zPk{YXfn8HzzXR-d5a>4$Z>pmFJAy^HiZTrQD=-6G4GPSxz+&JUqregsSSnmo6<CG>
z%Ykc-0_&u}y1})Z0_&x~2EcWI0vo2lM#FV9z{WxR{wgZ>BY0Mod_P~gU!>eGSMJM|
z`}NBGQ_B5z<^Fl){zc_}pK^atxj(AhzpLDzQ0~tt_vfmZUf~~Py~5X(`<u#rgL3bd
z?>Vk2GYh7{p at xt|OG1tz+iVDNSnLpiTO1mah7&sD>`vHj_KI7*;^J*^ZU_HQ;^J-U
z`ftnmPvSPOxaR*t-1dK&{@d|QLq#gzCDI><>2{e|s>L3ILlW at _ZS7ZI{So`s6MeO{
zefs<n+ZXfJzE=4EjkRA=Qa>y1E8miy^7SkEf{*&#wt2zptc_Oq|7VZ3QfvNw0ZD(8
z_IKI;*L*77vDVdA`rm53)h@|uebR>^f4yL}3WC)tR)5v_-B(`;QD4EeZ(kv*uPeHb
z)!HXn#(snS{<r`C+g$%G{-OVgD*69qEBV at LeJbAC$Lj9w1y|SuW8_8fZ3Xa)z;`lX
ziw;{Z;TWtZwK$gC;Fh^&@{jY6Q$J at H__&|Rcshp1og-Jt4M3~KdJiH-k)(s>7J8L>
zE#ND&Z(Y;r2)=_{<bwG3xFB+obig~VlJV?E_05<M#moLR{uDfJq)qwbbMS*I!H=y5
zpP!RgJ)mNPMXLVmJ3f#P`s+I>ihGVrYAm3y@?*4-bdaK;ZVf$?pRHLMHh#yy`yJ`P
zEv5Cjm&os0*K;9KCn-g*k>(;Kurp?x>IsrMHHnl4p0005g9ySRX>3lr<(qbk_<7QB
zuumEv?E2M{#)bH#2_cR3o-{tfCrylK_@^gLi1kU6V*jf3q=|_>X_~}8zw)HXeDtI-
zHp*$@EUz?ig- at FBqF0*mrcWCGl~)@7t8bdgJI&^k#`W<^<Hq`=;U!*a_z9mh^tzhn
zFob-hCN(wjCTL$rCbvbrjk@(Hz^h%<Qx1mtxEXxCIPiVx%qN3tl&lG=M*O>b;l<Og
zpwp*MyMjOBe`_l$>jeuBcw*E4GZ>{=@W{ysPIDeTw+gfGJ7=-Z;`#SKg2Y*;@sng)
zb8zqc_kfQ;1P^!x;5ljZ{rA5?=zE`@_C}x>WKrH4$&%%ps08_|wu!7ci4pWQlD0y~
zNA!=o`!xJN4b3=xnoofl<1{&V;)pUFUz7u7{2!mI0uT?&G51;s>zd=TT at Vu$yHE;b
zvwfQ4ERW7TEUsWWC+oe at t6%fUO21ZgG at lCr{FSnf%JzmgvNBf6_J+bJ9>9_*41U at 7
zg{ATqX&z{sdCFPpx;FCor12)OclmPtysgdp8Rp;6wT{hoE1P(!TC~!3o1xv6Qj|-I
z|LY2yuQsRAQz$?YDQ9rH=xq3?REk<97BmcPg-hqC$lC15hVlk|Dvpo9^cSbs at iXe`
zTpQ|2aS=ZQ7m+=#4P;MoT^&CMz-#z9477&sAZlt-%LIxyvS+B<v4O3Fc+;iY2S&Zs
zlGExRw5VYuCAno_?JV72dO!|;TW%YA3+0k;_wOe)2M&<0o3E_YIbvSJDc^ulWSixC
z+cgJr!rZ<qd-Jy+8U%Cvk?1a%=TAWQ0{<O3iE6+O_Mvy5&=U6F-ZL1qmFs`t08ZM!
zA153*;M(?z=MTppQ2uDD{6}$A*gnr+qaZ~+#`5qruaFK0Ncw(~et>lFx#f=h`#5AF
zUo#EUdhw2~LI$z7P@?JDIF%0$b?~9|2{?ArKp%!H!JNb7Ut5bGX>>2;Esc$J!aHS+
z-FFJnu5Wg7OUS~VwM=AqcrCZYMHT_v^$ivamNa(9ON6%@>s)-id#MXAuZ5xd-_c=p
z<cPFdvmEF{d?h%U#JvNMEy3C?*r#pVw$0PFZTqxs+qP}necHBd+wRx*{&?@ko0xeM
zabspj#>&d|Wz??PJ0s(($gH)xl@{7lSOH0#qB at Iq3m8Sh;5Sd+f;H#FP?yFM69MbS
zwXcd&TUs&CYj39Fhj6EX)K#;=?9q5+M{njx+O08x3!*VfLq)~OgI0I36Jt0FtV>Ho
zV}^1)W{8<lCixoj)-$r2g at 8WH)FQube!J)pl#uYj!ea202!{(!&3lri<Jb;g1bgYr
zq<P&MaN#z(+D(ZFpwekco$#nmUu{O9(Gb?qX*8yGcDvphbbHFHVA#=Vb;e>B^8V1^
zycf>1`9abrc^5&>yLE%=&i3H71W?G%sY9?w+;Ls09u9GvuzVV7Pe>dQc3Mw at Pr>#S
z61GM(6VA*0P3nn}mUF-u+NKStbYuBOMo2AE0I>p+{f|%$$s<bG8o<0EXyrdOIJsm4
znu*;q>UxWbn>>FRSx9{Y+WyL*dMsd~B4vHv1BrV0?|@BV{k~s+#V)H8*0jH->9-CM
zjWo~1=W9!1!#58FwH}K;a$;_Gf8HFSr7_J=nye`}R6}9Y2wxLni*?X3$6SRfVbw|p
zIJ!0t4+3KEdKaM>EZX-SxJE+a-UoR02tfW+%`#YDWX`ekg>wGZ82kJ}M{gwrK at +T5
zAyrrUNflS-*l}tQS?R;!?_U-jVKSWb;tZmO-IwX_pmfO$J>-YRfVEqEs~z|<U?m;X
zbD<S7RWT!<O(LRwq}g}9haS0vHAph8*{g3f1 at yUp1eGyl$bmX)CH2{llR%Bx%`rA)
z?kEw+=L|Qjm*JpiQ(%FTSL7&ohpogzVDCXca&7bLkf0L<+eSAIf|V(&>1gC&k$85M
zzFg-CQ~EC*w_*HwgF|-pt5ub?RHBW{X+^{DXhg*=XhqfL*}+cCwPhSSq)?Ztw+D!g
zwVusW#6$Q?YwY&hAYft?nRodNt8Lp8ci$Q#lKa2Kf&Z4CG|F})+TXx)4>-l<-%hth
zv~3oJ%XrKO!0^GnXuPqW{(bP9mF)`)jzb>pl4d{OD$Z at r1smJ_J`kWcPrz-%wk|m*
z2p4*?>lpnFvY0YW$+LCHe6Kz{_BX5#GYvn-KYe{r5!SXI_giHBsQp*@U$>(9)oPiw
zzmtbYZK|VVQVg3hc5wD^?RbjzGp0dXZhGF;_ruz at ESr;iI-87a-9ifDl-&#Y$hecl
z(sO?pP(b|I;=|<>?r{?afU)Kx9-4fKyOO$%eIHcPNl%2+gHz%LC2 at 72i$8WrB1Vb1
zcY-$Qx_!Z71L!(i-$CX;YCe9RqVaZ;3ZZH7KKdRvSAP8Fp7mc29X2;SNJy^jfW5IY
zUPS+xPL?~-1nLec#*gTRxN%!43gr1E#Hz$LB6>85A+l&34pOzEpHLBT!dUC+cB(`6
zu!#dez^AnTcJdlIhFTgLk2(%|k}Gz>io3O0d)VA=@%Pz#N>u#LZG at 0K%!d&%Mta}!
z0)27RK7AIhe3(Vp9JfL`mHcb+wpJUq#cA%ZY+$O-=T9*K8`itNVJQYVyK?|6R+~|W
z47l2m<tn970_&#EbN_yL^RwPH(ky%7XzE>4GSB5aGJcV?&9<DBxtyoCHc-j`%2V^W
zy~OMGb90`$UEc0uq3>?3ElHhhQ%- at KHFP5q(K+eyt8LdCF9#3SSzyi+QV5n?y_Np7
zF3!_Z=B at CktUQ$ASj)$4zneQ`wg;b$pRbOSJkAo>?o-|xRgNa}weY6Wp)Ur_o^DCH
zFtAF&q45EjJS5Y*`Cu46rF6aDGl<&%>I%JXb-60KYrH=^Jejw&qllzW#s#T9LqG2E
zs;#^D2UMBtCa+?C^jch{F9&vDmNR2AC?+hNfYEo!mBKY&InsDWN#;5{p}JoKr|Niv
zh)i#l?tbli_gc|RPG6_$YC!V7E<eR!a{O8N`YhNHnDD8Q-ax%Gb%`kATI!=q^J9~?
zXD5v-yBY6#b8!!zogn>X7E|K2Rmw&>2qnTpHb6GX9dbSV-TR!wC7MlWII7r+wH0>#
zeZkb)k-`1AYC2)Ua?J92gqrl!L>)vWmoZb{>0typyPXn&#0+Sxdv5PX0!9&`kxb>O
ze1~hy7hx~xIev(ehOU9iEn at 63Zr?_0L}5&&bLVnspgtl{VITBII2ue7Eiz at sfAt*V
zw{b|zB$Pz+;S+S;K*x0#j;0!r#)6 at l_Vgv?PIIF&eQdOO&JG%X&J20ia;%;q&s_kV
zn(q5~e!fqV?{i*ch#49E%H&5#?!wKmZlOD6QwGU<^y3~YMbKmtyvlEw%vAikGSX_Z
z(v=R|+u!y|t$i%i<)vzkw%0n#++{m8`;L|s#9{>joqm?dk)9s8I}XDp=w4sl4RLmJ
z_;~kSp^qgROD$h#G<4#O>22^THURJO6xv-1j|3=GpWO<W$YqHdq*vB2$Z#v4eOH^V
z0B8beQ8(|6TBSa>b at B0r_GyhYTA>=ng37-_erXyJ#VcWy&0(#|k(<N?bmU3d$5so*
z(KhmZcpLHzq>KjjseyM3f{*xi&r6>|77<G{!jm4rOAK)fS0gVM?f`z;Cltcv*0=Rm
zZ5mJ(ped#9AvSjt_fSoR0z(#U_O7(en9MQ9l;e?z|AmROV`${JMz_iLOp_esPbc4O
zoTqS(fYN7O&Yii)3vyyh`sJ`_P0A)vRHZIjv?xbLQ;-%1iDo*b+ at x1ciElfQC_{H&
zcbMt_>UdVaZ1wTMI!|q{L4}u|Jj`td%XP!y9i;c`6Yg==C+e-<R)8_P`)r~74kAIt
zWv#_^SLXy#tA9Ybf>ef_E(c&!pTIF9*~0ElBgL=U%Fpn*(Idap79TZt>D*bT6^5wo
z@=Cm=KZ(0_EItj*K-0C=&3rOov_)<IZXwzja>INB_?hX-(Yn(kB)x36RZ6mf?i`Fq
zCnmke9Gco+9HYg^D1}y7I3hf>%Pl;l1TfTJTzA^2=8>B}@FI5>NkbNTJ+(s}niIB|
zy^6jJF03)eS6j~_Q-lXL!iA7WCK}8JfNU`0hH605XOQgA?X8BVzhgNGNYj;s%m6nT
zAN*$2z@;-n3;ep8EM^Mba6Y{M;Ndt{HiAyyC94%78kT5WL<TDX-S6<32Ear07RKx1
z4Jov&#Hb>v;@)v(13#|CED4CiciRMw<KgTNDa_Likkme}gVAXi+miC}wj!%TG|eNt
zY2}8GdLdQ2lveS{)o-G=`3<hlJJ~(j(N~nWuHmK?RHBSR1lI_&hZP^q3cK|E@$pf0
zCbp$dIHsv&X(kS}?()UjXXBY%pu+q_C2W9<v9 at R!Nc$27?FZZ*%>}rx4o=Wfqg2gh
zUKeGKsyKDq+<iqC)ERl5t@^Ky0MJ<tNeN^^P!Kz$nVyQA`FTp3OzxXs48<z_+%LR`
zhgwN#nMKGuqQ2>t4IZZBXRj?AfXrzXL;ZQ5Q7U?%xL<gSvK+FPnV=3<w?2`KxB^9K
zhlidt at N?;}mCk0IxKqktF!pQ!2)$pXYbOaZQp%#*J)vl<3d-g{vfds_Sw2u;m?cnH
zlIvPzcRFzDAct;C36vRQ137`Jn$=DapIC57;c0n&Gedw3ExV0(7ea$c%M$|=NfMYe
z$5agbC(D0et`U~|6n4A$KPXf1rEE4z6ASjn4#A&ED9x)bQlH=a(Kb07(Ma{-A{OPa
zynHx*H3>Q|AUFwn$;C*RG at e%2bbf)i7o35|@2qu%XUnJ90o%d53!G%hhsEm+NgyNu
z5Wv7&*-qwOQ*caxO6O1Frwg*MR;VYWT8<-J+OZe9aq%|ur4J?>Dpz+BMG_vX;hY5}
z^-kmBivtl)t=>*g(Y91D`IPgdsIze1Wa;4O;N-lBz`5{pOT~};7Eg^3wO~FFE<^h^
zGe73tthvv!cG}HXv#!%1<RXFC?&_kFZPy_S!s85D?xAt>$bTKIHq_~13)e~j6+iR2
z>#t|*j?gqy1!(Q#CL!~eH!+@<orBtI>8%4?z<Cq_nzdDml$bGMhH;&47Cacspc*i0
zpT|5pKGHIkspepwfNpS>PF+PP7EffRPiYZPmm5t^unfTHX2Kx7meHBxV at ukPg`D>}
zAxAg)wycLc45j~`b^?SS+qE_^c{uTQF%fCO#keAIb7LyF!o%g(Kk0i0gXPrvZC0;8
zka&^?0F%bjNAEUM-VX%U-Th~TCz#+_cvnPHp|}0^Wp^Q!jkKDe=1>3B1Dk_SpyY}f
z=3Y1NK+FdC`7q90a2C!Vd<W_!-zKDyc=YwSFpJj%QAWlqZ(=5<`v5<nZ8dh+Oz)cm
zH4X8VNP at p4f@9IJ*sVUVI}BffS5bL#_dtRl!_c%91E-|C*yyZ!F*&CPy>fFT9QHP&
zjHZ_U+wr%Bx|Ur1>G>I>5Gc>I<ZN#VSam=;GeMoa_^6I9a3{x%w+^h%8hXuHLDyx#
zLqx^azuqJg!{*evk at oCzLz!{G?8M!cmF8R`1oUG`Fa&4=v*E+>rGn|<`U>D#`Bz|e
z=>rqsX$8Qs*QJHF`44pA+1>AvkXHeIS?9|E=VPfvlH&>Bffo=+`N at IiVfU$k(+RRe
z?h=9P at _}P}02j?Ki&c<EiONB0DKesarG<JcGolH|f(yfw3Z{bX%7bU%Uj*Bt_lbj}
z5s*I^1A3+L#cy!oJWMX at 9X4&~{kZ((NuX5=G3X_jbA#?ZXklQ=E{)qXG*`s$<K!-<
zKa3#8Kwm5)`(ryNCPX13!OI*WMXCHv9Px8M at +Xzdx8Dqa+t<1ns7dfXAhJ(?*z_O%
zx&^}(&HmnpyMwDfY4CGNzY*i^T`-LIYR8{UqZGe_#7xW21N+T+i&Y3WzJiC>*Y-^~
zz31`uh=wcq#lHj^56ZoSF7sq?70&EXEy89PU8ptdQ-LQR?k)7`Q;lbLN0swk^GJlv
z95~eft@;Vh#KF!G=7N6fQ-aq|=j$DtGD4u(;$b)FQ-a?PKpp3U-hT@&V5?3AlXvbk
z$%zO_)0iJ~nsF}X<$xpXUm&m_Cq)Gvu7d3cip#G*b5RRTx~>*$RY~~|q#j{KHNt|b
zj{;d8^0zePZ?41t7uvWUrf{OL=GJ6{Wko}hXp1PyEGY4(0F0mmVC*NM9aC_Z1u@&^
z%S$n?vS$Dz#_IWwG*K?AAof;(rQIUEaNN(t7hkv1tdUqW&Ji768P4 at vu<V5^SEXi)
zlMV##ZeqLflKWE8KF?SCD3xe7D0D0Qes_D>SW7_<^5*sz0lFQ8f59~40aha6LR{$R
zg&&5;t1|P!9thaQth6oX8t9;E<-y+)4BIYqCF$B(qY`W`|FlqxIgL4a9=0cV2$TcX
zXAE?M#|^55=(7e7A;=80Mev_9d=rd0h4U9F_bGVeN+Ji2GGc_7{pP)OTlpnsX+!cz
z`mzc{VxBv2cpLz=aB?M}om(ks2pID`<>?jwc$qy(JL9PZO*><~2*Nqw@>alvHfT>q
z6Vd9R at 3~aaUX5k7cZ}$Uo0)DW>$01n<Wh?IW8RzsIgH&N(=Hf5^2qy2)+(sIDS-Kd
zfv*xW)uqe+)u%<lKl<oahTg{&(rE&sw~S)~LG-htGW6q#;xc-vuu54&PVm>hb84MH
z1Aje)aiE7jh{Q_s%O=Zlq3sM&n${_U(@wz>YLI5H>yHFZAo9TbjKJ^lxgqtD0yp7d
z1=%5X34w*XWnya*)P=|rP5j#DcGlX$6 at WBUfb3(YW4X*R1E1gl`JcS?c*#e-`RZYq
zGlr}zw?oA@*#M>Mh_HwjfQ8NT#C*CcN4y)+`WIvQGl&fRs>z3K%>}aZFdgz~7>4x~
zr}pwq?VW~T%YT{N5ICr75ru_i6WN^HQhy{S7NW#RX at 0xG=!DDW9A&%e4TcvY`&M;W
z3~U^55M61s5QhDj9l8u?+fZxX4QUev=8qH}+VnKp8q9E56aMxx`Dp7EhuU`ca8ob}
zbb8g)=rJDbXHM529RFyvp=pUu2#(Qdww%s39v6W#ttXK-;JTIE5kzE_*Tg7X8I!0D
zwWG$(E6D<;$O>GQ26jd&b4Hp43wmg%eo(x9V5-(*Ls*dxJc+Q<B<O_RB at c|j_xwd*
zOP$aRJeSP3hA5^9XfBCw<$hK7FKviInzDb!6P$rV at zXJ724&<Vu>qHjC~whYp;k0S
zTK!-k<+J(uLl990dHfMk&asNn%f*C)s4?)Rr+;&JRD%l?5)ma-|HY(CM|vH=hRUIy
z_}+ch{{A?wKK8NodS}G_kmSMrFnHy!B;&Q~XeC`3P`=}GSzNq)8$QnY{+M{wwe_(-
zNjaaUW{u}<9mM`?MzD0MIYJl?i;X(ns}FiFxo>iGdx9JjViyNSd)F(B+d2Y-=C(r!
zr*+^L!M#}u^3U4#A3 at 50@HOrnoUx at cNu{u}gS(#KUigv0^dJHlf%f44^QYlYaT-#X
zz5t&CT7ST>&tVnVNF``U8Vz_t630j_^FP%eQE_o#>2P_#eZw?jH6H1=ARiE9I$&mM
z8rmAxNaq724H1EE!c-eB_)%E2*l<!O<lQhrTp8S at x8K)$jWF{0q%-<?&1=IV#rd+`
z{m1b`^1HV^2%Sw{{zG5u=bq0G;IDi>-<aUWo3C~0=?dR35#_Z=;OU;j)bIx-MBmJ2
zDBXm>+T#;eRwDrytmEhCaWE|T!u5t!N(OTocIb(G9AG&(OrI_|UZ&a_J_U8(;yRi=
z*q-OCJ^zqq3oKRtU0zP0L3;F at vg}cJ5If9Nu%5!!+Uah!Scc-g=k01;x241FuOc8g
zztyUDz#J{PUWNlIc}0wzojp-6f4Ix;K<~2j013r9oSg?xHvpDq at GnN^SB%W15Sc+H
zG7Cpw9{gYF at _z(Np`<Q-eIqB(6<`DVL-FJVK>}Bbd2K67uM2Kpe&<2D2s|#Z0KguW
zT5K_}%U?>uK1J7(gur>4O^-v3Jz4i{#IZ3v_byImXp>F_J|`z#ZfXwU3<BEWc$xq5
z$tM7z+kn3Gj`5~~S;GnWojBPcY*)ms1K!ow1#5<E9#R~PwRePBd~Y)2)=>TrWIE}@
zaNL6Cv;oax3z*8_Kc39}7utlg=8T<%h#?V*H0V<R^s;wk-VX>_Mh>S~Cb}@TxGKLu
zju<j_7#5w{9y{;Bm)w0t+6;U at p|4&}kZ{@hY=H(0c4EbTCxs<r**b^8YaLbp@<=d*
zH9;5-{?6pq#dw2g*@Mp2ZCbFfq?7cC?8V0Uh|IKr$*~>%JdKt$;ef|^JRM1wNHTS8
z9{nhB%!Hv$!df7lv9B4dQ;Nh|Rb+hwa|rBAS{>P at 9MMzH4Ht3xh(JEu4g9gua*Ug}
zseJW5KR>^NVLuIw6e+G~#Y_|mYX_RiL#Cm~22Kt7E=&XUu*u;t6)Pafhtg&ym-{%^
zk06Wb-NtR_tLl at fJ(lVq;c~qWXV_-wmfhl9<&L7we;L~T2o5{-8k>1Nb=7CBu}ZT<
z`aH+D*Fvmka^sa|#~klx>rlt1$p@!)OaH at q>chGUh%3h>$ro-4VgUStRrzYJA#*lN
z)J`g*l0XmOY%MNI-$X_xqO!1bM5aJd at em^SN-C_DvQ&&Be~h9skBss69l?ViJ!T&=
zxH0?~fo0GQV_*UNZ~q$*;PT-z$n|+X%hPPmdX%y?rh~V;3L`Z%O8v8`edsePf<e`I
zmUL%MOtgy9aDC)qaJYwo$n4Znq==^h1MWItS?XCN$@_sho;qsTiRuByhRTNtmJ^AG
ztaR+CNr>OAQBRalb7A&2u{iWKMsKW;S}$vp at 6SCqGo&BvTeXL`!yK^NY&TmluKPzY
zSfnti<$MfV4>M3T-LFR(8LA;Xji+-rP8QA9+6~t1EwA1D1RJMK6)jepT}zkH80=0+
zxHKhEs8cqSOf_2*ZzR=V>x(E4gWxpY{Hz#>d3Crc^{e6XJtCEHWRYJicQfQ?WrxOd
zF#xBcrE?{B|EPT*i1^+R at IS$0y at ADe0Sobd{WJWZw3pB!@&yBk*sT{r!#3xj_xxws
zL#FT>AoK$<>o7wq3~K5K`)NCQcUa3FEYdy}*I_)*hM-2(c-5w_2km*)@>L@&0&fi_
zee?#Vq3!iN?fjoXxRiuK<G279lo?TvR<N5ruv>rbK2VAXG=6vDh94>KMZ{7zR1?PZ
zeuG3eRfE#4%+v&nT9UbSXy`6Hr@@cp4&ENpRp%pQYpiAKl_CUB`=L-0o2TWjFs`Vh
zK`6R-_dCU}(7zOP$$?%deBJBBRzJHXN>PsA99{RJb)Ep})+Y<VB^w4E$gvy$fTv>P
z<7c!J_4+^o^PYW~j%2hbKNHsnQ<{-O0;4E(;?O)!<}zp)%SoslCpasrm2R3B)*uh+
zb%B~AGBD|I^T at 6E@iR~;?&~+FmSUgwH@(}-G$OO#A3MO2_y}{NiCrDze%Ow<D8DdH
zJGEV3>fns#2zx7Bi`(?r_b79VR>QzvhdE5aVPlJp at NVil9#`YAf2{UB8FhWxXT8&0
zO&+t6sZK<aZpIUVWp~_Z$QCCQ at WJNzVK>fb3MP>OI%40K=sN0uN`wf;kz$A~LVS=`
z_j<9=rlxw><3LR7!zOeLLS2bPbtwAtKHJLUw~Tt#co04_qd|Sv!(JHDk*|yA at CQ;9
z$e}0M83kW-6AjgfsUQi<8{THC1tS)G1Vm#aM&h((Ei{m^KyWXH%m`^#6OhFz{%kYN
zTK%;{Uh8r{DDL+W0OGm5TYOG(<UrBooiPAc6)$pw^!<2s5URO})1L45ag*vV$#=eZ
z(b+bQB9wEbb93wU3z79~WE at UxuHO|v*8A%uI+_<2D)h)>lfz4FM)WzY6lP!(0o4ak
zm%)!ma7DBvu`Zj!7(Wv7>?|?#PEE^blP1s{+9|{^t~6DQCHX}B^1{za-avE)hb26*
zblhqp7btRysrO{1G8i?_R4XCRT)C0Ft8bQ8BJzov`kCsixg3W|zQDCkX00g`G5N%;
zxL1KpS<BrxeC#&bNYg)fyAz#`!kveJ$+F+|#8vq6PDBdA!&(gZ8$t%XCAO1s;Ci%H
z>GLC=joGgMiY3YAp6mXzz1r_ at yiVm;@<FwCA}^cVw=w>!KG(y at fVhM1=@v^YuhXyX
z^<zOs!_{y$2S?o}&%43ImDbOkz1E?$qrJQbw^jX_iq~9K6MADtJaS$~jKooQ8!J24
zsfQ)Kq6Rw()1$`ymjQ-(m26FH-JcBx_C9xWA^n3;yfKq&Zr_bm{cp@#PBl9^?=R!`
zQ0oC%f3EPpvbXr(h1AGpKri>$c6qNH@!)KI7=hmYULg2gk<&aY&rm)=C!P7&)PYut
zL$sp}E7coIt~SmwF^4BHF_(T~m9F$i*cKYf!6PXJlBpC9q+Zg2uIpB=eHqk#4(h!}
z{Cz?T_$LM3+=FiE!?5xnftB$82$&FkBbN&zIHo7_C*4}dTwYgD7e5ENQbyh}%WML}
ztT0FiV=v1;tESP+zdN=Tn~v=FAni>-r+<T=sVsVW55bdor2=C8T1LQV)W?aNC#sP<
z+5DD24*r$xd=blzoen*Q8M%6wPO)5;jRc38?)TUKh#3zX+8vgaAY|M7s5^A7wsoq^
zCwkT=dFFU|^kc?h0d>RudMlLIojsmwSUU8pb2%yn=qjh=y{qA<ZVHH(YB9vTvOnCV
zlbNtLi)ymN$K3NEqpeIdSYO(azftX8eELJwIipC at 4QE;w+SlFjK-h!{6yhL+$;J7@
z&CHkizUhETQR-mlso_`Wl|T&HFsY%YQVSTK_N`0^^Xa*i&Txt>UaYrk;g`}r*(}LN
zApMh8YyK(fGw2E`Q2kt3kWQMKD^E)j<H5Z=a+XUfOs at bZwTVj+>rC(FvZez!)2%?G
z?G|I68hk|)%#}|gn#uqT6dF_zls!%#bSV)iM=4CWiId!|{nm7d;7Ykfr~!X|5_$!L
zlFl0-g}lf*G`uvxDPIedZGp(2f~QSavCvB`Hqt$bFB`N8l7hiMQ8X<U)5=(qdkw+Q
z7mKv at w|h%ZbTn*ekZ5JPH+qV}uJ9*e!U;y#<T|&(2IU8C)n^2=;(*$IDyo^Mz*MCo
z+05ulSQI8RQzVp*=R9 at jB%n0#laU8gjN{NMX#r<6$49Vt*M}-SCRCVv)vF6cclSKz
z1z-`2B|*U!>+6?@s3EsFAm1ribScN?Ef%;E at b2KpX>_+L^E6?1NmsC%o7{rOolD~!
zgDnyAM*v6AZ6FBBclL%#DEXxQI}8}RGrNn&obqFP at L5<GoyDJd?rvQQ<3qMUkj9rR
zR19Wx%&Jng#$09YGidCH`wk~jf3g3J#$BO_?Z*t^;h_(7=*)bP!YlCFEs%fF)@hhA
ztAt!>pe%%WjA?(E&sjt~1ogG#{QhLNI6s$$@$`QI at zA(|Hg4 at 1PB%xXDw>jmpQrru
z`VptnWa3_H;=Y)E`uF7I?+^apmNb?E<B%m+^9tSIXG4CCyc|L+qz8D>YNCmOFxG(4
zSfi09lFn6~gJ;WDOvL@)Bgea0e$&%vJ+WHaHMfOfk=TO~XjpWyrldQSkXiP at NGT9j
zFoDfiML2>_K&RX?+LtPaSh<zlrI?tNQi-LZCk{x;M)CC;{Ko)}04XVdJJ$;2McAHb
zAreYX!d~4Ber2a_Au&-fv>mD(`iT&3qT8?#cPCTs`enuv#;dkj!VcT+p%IR{W?N+9
zhre_j2P$7x8O`oLNE=3H^9-2^b|}hmUP(bEFC$1<J}{Es72hczQzvQx-I>aOYllE6
zp#FBmCD+zqTb65z79s@=tIn^mI>XWS$dzm`F|N&fS)w$qQY{-U);i^875*!(Y`dmB
zOJPV{F&UAeq;&-S8df$Y%~E_n at WIVcK!$o1ChTfZm#vmbmV6P`^plDurCJtcnWVa6
zW<G?72Y&v^CGvky+Gl1jtA$1fY^e`m&pAHk4ICeUC2S*XMoOVQO#WH1iY8OF<wj9g
z{?($Q$fv at k3du7<!r%L|QJqbz9i=h>^2Wb&anm*vKQ>tO7T}q*-kv49pws4b)s$%V
z*~N*FCmiTI=v(+h9RDlJa`!h;#*LB-n0a+)Oz^b5h4#7YQ+EX!-P~;}|CUR^-l(Y=
zXm-N%%tF$LsadmKGN}k`y~YY%(99;`1+koD^x%o*Z_$)0|J%GfG(hHybAoIjewGKR
znKC2+J;XaAnNVD=3h%M{yiLds5G=AZJL=ayI&$K+ at fQ!=HlNd*Y>-X%&zy~?snbW-
zzZu)II6CZReA@@~&&1MRkDupc*SM?~-Eo_sPge-=y&)N%CufzJH{0!hY}rpzAnX_5
zkQ;L`#7uHncfKe>yB*O*MPqgAFzyjwL0#${t%^O=s9EDQvXARv*6rgp5r+n~nXs;L
zZyg>DWTC`ba^B%i>@K&vp4UI(X+LM|GFn?vXlqPICR;B$QRBL~Trvy+G<L^oy2Oz*
z4BUH`MQ$AlZSJ-zS?dOWx1hc__TcseWSn;~$+X_Gy*#*LMO&3vs2y~r$xO~5Zs#L8
zgY$aWWZx5jSyo-YSJAgqa=jip&}YsR%eA8$`|D!TYiBCdP?K(RBs!Ax)+l*7sZe~x
zp-p``YM{$;o|Co4YZo~ogY)WdPg4wrOlJ><$mBSaO#1QG?Y%3wXU*HzJ5D|S!K_YK
zeCwh{diylvht!k3LkL#S5c)iHMJK~&=h20+UlH5|O+*b^b$A?wK-_+96JF{K{VK2{
zz7mLT<0Tl*rb2HmHe4va<<05d=n;MQ*525TetoLmTVu%2Zoz6#<&2ZO+7 at S#*$2!S
zlZ?bnIa-;i07@>rfs*$uIRAWRf4E|J<$2 at ibMlUQK;NV=%GVu$nhjjd8Xar7-Ag!*
z^t3IUye((KsJ2$P4{@!?Ej5$TkhAUJ5Ecf3<86*lu9L?9FggW)6se0>Ch~!orj79^
z9?v!ZEZGu{&hfK2?tC6dD1!on9?|~oeKLM-4+gE47~f~+$B|76_~s7F)dcc^|7O&e
zpZRh!qF*96yrbefAQ$3K6KJ(3<LwVLGPxDt at w7OF-Rj^fO>=tX)L;lUxT9;AMM1Ui
zFgBJlb;VmdW#qo!grYOc$dNR=fWmA>Hk0UEjABAI0FiD+gV^`T)g<7y(XT&*zhz at u
z_%s;n+uQxOcnkA_?~CKFyY}=9c7O;Tg7H<d81I?7O-+Zou1j9FcM~C$F|t;RF55c9
zXJGbM>jzBcgn&;Xa!O)c<8O1H_|V}!p{6DpxG*r|DVch{_n@(~FE|-Ddlnay2#-O9
zdbc!>!6O_lK4F3DHfGsYb)`;gi#Q8%tI)ZXubfP{7`gSv0I!mR?7m3713dGMvghql
zUToa_{lTo+H?)4{U;v%<Wx7U}+Qj`5H1~7|slRWf;0rX(Z5)jZ7bmvYPcultP)_8u
zw6sLlKAFD5>GcT;brM`wa`#~DxfHs)#FoRy=0GA<UN0@%2dv-?71OLzlvGIbOO|vB
zf%2e^{jEh_cqdl}MR>S8w+i8|yEaXME;dJ~)cuOd_E62O4l2AHhy34Z_q3aW-lW?J
zxLsh|t1)L|q2sw!8Epx8743cAx)f{e)vYHfp*QzA4>pqe=r&C at zoOb~6CB=~-$NB&
zd(#BSw^u+FM{w{uxBxBw(8a89*cLZ$X9ajbHGfsD7SdY`TG*sYIRU*->uA6-J6W_-
zb`b;-a21H_gfq;?^kE#xeiDxzdo&OYo|JpV4`t|TJ^xi_5>ZETTyN(2JoMmdl(pA}
z<SO1bx;wl|`}`(;j4-`gsSDzAQ>jhb<|#I`?~83`eBNLiOZly;<v9Gu+6lwEPapi|
zzUP at XNVa|xW7SdlKG`+v$t_d52QobsKQK7;5bWz>!2Gc-o at N$40_RrTQDZ#%NrlAX
zX2AH5CW{E=h1+meO*EIF_m#6~%8>5c(^i+=9|eWeM&k^B6WR}V?j=KJ*O|7c{=K~t
zSr6BwW+kd7EFC#|>^1fKt$FW^1Lxw{>7erH=i=hR9=Ru<P!F`$^6*C+&n1lp)KFkC
zomof8BNYBy$UP8XU}0uHB}OD;B67C2(zG<Y`}p*-vRx2CCPg`+pAQKk3lkI5xTMKZ
z-Ce5FgkkvAbK12I7JQS#*7o(M&zJQvSA%J`+fmyDH&cUeSBjdtmr^V)^1@@#($qBE
zE#B>0Wyp4;RY$=~)y~duI%bRI>Y5l`fzAcBrn4;{J+qVExEM at 8Qy!Ou2B)y3mnr}c
z&YXIY&L=}3iYc~J<5wZC3ev8(2a+T%ITqQ&-_KN6s^n?ObWAUIiy{q(CX?d2cS||(
zZ#OaNE8{AfARy0f^kUxzaynl(_YV_E;|>xXJRd*m3^_4A-m_^^pZNaUo at zf9boW1N
z2GhJFNg9dPv-x<mM)s2mUkwz(4gJ^NQ#c0em2q8jbGIm(mngSI)hsWJinqIqJS(9B
z8MO#O&iZswTw)=&1P4>el|`qv-=v>!F(pGo3uahPbD at 2vlgP#WCXlSa$aA3rVEJZu
zY{;^&-V5nP`<<YHF}HV^WH^|T>{H_wm2c_GYLxTVg~zG70<wx^%AVC)KAzXjhaDtS
zN{{Gwkvt74Yjw`?SPlt|DQU6Eg*&nS^O7m~T at N3EU}b~-HqE6jxO-5SMd{ey{m4~Y
z1vu|- at W;+o8jM at TX#rkD7S`iMtdrPoOzW(jKS~lyH0!Hu=EG}TnH&UPoLe6#Q2CM9
zDu17CL+O&x8T0DqQrT3n%%iF>HQB5eR*LQRhnk~u%q>lAY_9dT2e#_u$3?0zIe08;
zRvbKjRPYt7*5}%jyr?Y5JjmXco~$l%EJ_;pFBhDjF0t2G%#T;9ojO=AvmM;k-P^j^
zu+O2laLb!ZRI4Ph`?J?Vg-Mr)yO98U*hxBfNly_fNXcmb?3{>j=SqVO)AAq{V`YUr
z-I{HluhR0oO0O^1bK13iGDU4 at w|-_q4=-6|*PSoI<n+tk(@YLlwZ{~ay@(OuQ5+B*
z+IT)(+|LDQl4#<36KN5v2V4W*eO3&p8uo`U at 0CwfwpOYmXtL*xWnFw#rUE``N%=c#
zNdd8Kl{&*yK^q9u-Qx>WS{cQ^%pq4C;|WQ2^=#igE~g at 1_iXER&I)2u6ow|{OEm4f
zDbKoAnK7%k#ttO}RhS8_Ms<`m%i=AH<jE)L(7Zh=;0hT|T)#?>a?(vRqTQQs&|@wq
z143QmPNgs2hvL1~u*hz(7MxmGIa6zQM{QpmbL85HsJs<;W$OzDuP`5}OiYbw7&xb9
z#6C at g;l35tA>0?m0ccJ at ae<qO(rrF<O>DO=Lm{+?L}H?vV5oE%VyL*oPy2YcBH9_N
zguPTJs}7_zZP5Fuj}z4mpw<l}ul{C9UJ(G*<Tp=ibr#a6BgY12_985J`*q0wq2^Fp
z3WX!(tv6{?|CAcx2&ZUv7~u#O;p1cl9$Pv3aOY*;-`|0%!2mS)EVQ_R&>)wsz=lS1
zFQ56j?)as&x%r0TQNydwB|o|nH^R!2{82N at f^|X4`sQag8Fj=HuWrok8O_kqQpPiC
zO~}6ZZn_xcL)&c;zhYD3`12eU%YHrddntTX^Ng!<fHLH<@lKDx9`ap{V<=iKJa2U?
zYpsXmZAk)Lve2`F+MDnTHbdwXw at 5f~s~B0t9IJ?p;!r+aghIZ1a*W~;ftxxEt)3du
z({E|mQSv=idXBW-_7e55D)d-ptjA<m#il`A0;I^W*nG{Ze0zXYJ*VVtmRg`g@*(p?
zs5@!xw=vYhdS#Gv%q!CL`VvcVh6bKVL2{~f`F1V-Vd_BOMBy|S^A{R+Px4f9`Hyw8
z#?erZC~k4Hp8gm#EBYbbs@`Dm>o{+k!9q)F54q;F!I#o?O>o9L1m{)^%#KaHodm+U
zxRteM#cAhL!71r?;LysSx3Hc;z?1GYx^HTAMIBJhZsTU2Ra2y*BxY;)!z^H!Rgc=(
z$#n6mq?{GLq`Ij5nA)z=f at WEAl)NixR2d3?CJF(bY3|TziCsMR8u`z4A+k5TI^5x{
zB}L#>Z@`PMK%+|=PC(s8#`nJXoe+0%kCCCpw>*8y<VuR?Ai6V>T_}zDgp<m1xDH+d
zbuXExkFAT4w=m0V@(bBfl|+4?2s}(;eY7zT2;BwQKC~N_LjhHWEklk|+997mG7d^F
zS|>4D6U(UI!ZP<553-|!TB<$FUM5rKTM%69GbSceRSz4|)1NeLi-h$hQrG5Dp>E+$
z0uCtV32DVYQ|$wH(p}aBzxh~Y5MB at s*3pvmijbuG3re$9EL-~DzABy*o+|!2Sj-~>
z?eM1Ch0G=DCFua{`ykJ!?IX48#-jo3fSgCCn5JcXv~$h(6{CWzAi7O*(?q5TkBFSn
zp0z4Y%#)2VY#aD<=X4P&CMlqx at 5bth;H5=9FDu8!7XVh>X+YtLT1+cU>pG$$h5;L?
z0&LcyKM+_2b_p;CD`TV!YsOemNiFF|XRN1sbugz`LZ0sGO@>J1hy2qxg*DY!Mf%Ca
zd-W#L-mVd^x4RR{*}arWnu&L51?21AW27wJQPTBp*&pbVbu1AFUs11Y)`NtWZ?)j(
zhyx0hP+r|Uis#?ob9AZiFiWYS3<g=6PFA(3dTjG(FvqFFc!NX8in=C}Jt8@^;!XFB
zf6)nH!_;n8IBjZwi}MD(9G|&6yIXd%Wp2YfTGHn{K7JITN-&5&PZ}EX8cVC&k82%O
zn12Z|`ecu~hqGAo1U_K(350GdTjih9es4LZEIEokHlG?203EpljADr2E8`)(udcOs
zMJvE>`6!|pR(Yxc_KXzYxRHmHB^jk8H$JPsQCfCu3>=kF8q{FzU8fwm$(Xa-^B(o*
z82--x5u~rvZ9fe&ldd~y2ziP1UaC?2k{hs`=jrx;l9N0$l^Fxwdq%nq)4vx+Y at baJ
z&2vKQ7gR%E8m7sgeb#1)bEP5qx*XNnN at Oc=41Y^o4l=eHn9*>R%OI@<D>O}hW1Uqw
z<IE<@jxLT_z<TJW>O%AAl(G55nq<QiJy7vuwx)Ppi+OCsm1ZCrsBFL-AWUpA%jvR)
zREA3zXoE`Pst4!DIukuT#a?_Y;NbEf<CR-yXl`WPG-8XJoAfe+)5VX!=>LuC(KB+&
z{m2t9Q^7rrSZ2j_`F at -DE%wSc=0N_L8(Gva<h+L>W9U@;&_+9Mtg=LZ>)M=HmrfGN
zgD&gFTJ%h=ET500I4P=xSJDEP`vF-rZqg2xLEa-#)|Cd^7(p?Zkw6i67Wy0jE|Ea-
z%J^hUxwx*#k%ou^hDYw?78N%K=%5?7>?wH2pU5l$L@^7|94w>8V)5u4*L-fCv^6ww
znoacM9GW at Q_Kafa6IJ|7<&=&$!Hv5jpKemjHrv)lDxN*W8Ya}dK|WQp7fCW at Y#<%R
zl)NZ0Z+y-xm9mIXJg!1RVU^Fk;i&$a%~F?XVV8W_-&uP^0UO$izr;2r*D`rNZ(ppu
zZOSB+vB+3n(onSmB*gu<P5c7OF}n$}_#AD}dlv68%iMY{eUS4b`v`Z^N4_Mwn8_8u
zLG%OJ;!SU}4aJf4ek+iP=#jr8l!N(s5&nsEN^hB5n)SXBQ*0l`xT+F0-V<vzVxS+w
zf at Y)hNC?MZ*$%S at 2FuK8#S!CGK!Xe`%v!JOrTDt8kF~RBG$f_|^o-s)^h~$l3BrGg
z5NL|oW%6Mq<??|i!xg;4Ty=%(%wSFMv8&^2b+NpLLUywFZk(BR at ObT>Dk}-oN^jFj
z15vt;V)_sIVISRnD%YLVlG4Td4c=pm`_#nr5zLa(=YUiM at f**0d%sV+E=@O*y<QJ0
z_wq?M7vIBQ%i2jO>J1a at S?>``@n~_4Xmybc{68&*)uGF~6S4!uUvTxC=n}{|RT=dv
ze=I1!i%VoFtn_gjedN8nv%jeszGROInu&5A4fFPB^S>;M8 at yxYSnuZVE329$OyhuA
zgHMJvo=xn8_H{h2ymPMTn18#5y+?6OaY5#&;TYglUg^m&j1U~;)dBld3{}!xic0TZ
ze;qV17!A)-3%zJs1v!w}U%HIJ&3M$8&5YYy=X<gr22?qxhA&DM>(-_GHu{R%!hg>+
z{9;XVR7sO|Om-7;4z7Olrm&=WuzFyz(0`=5uY=5e$9@#8&Z!Eb3*w<MG>E+CoOHX-
zCO!J~WWiIzqqwl$bAE`Ljp{{xjC%7Wjkn)Yl2bH at 4et%_AhJ at gPkRLWQL!#NfwRk7
zLA{j8mHs<no7Kzsk!jP7#w9Ojg|~9cSX`x|h_EQqAX<!tIT`K{Zo=3&EnDOy?CiiS
zz5r}CEAM%j9H)?3dm1kNee9bwomMHkYJRh at GwT%0D|%#y=1pq;9ehi=bldA5y|cp&
zn?re8xLxqnMdBJ>8u3<=<^E_eF}(Cjk?F at tz>Q9#>TL9uqbO(6o}6E4c{-B{YZZOA
z<muwE4wo162<F=5o8lYpnP-=1g9*27dp6UXn9XaoR)^PzwX6jdcQnVbq+mmIIwMSt
zcuE82zGU+ at +r4MMU7Pw<@yg}<Hv2j8ee?T~rzYl<HM`=Z?Xdef$6k`U_Mqvxzhnbu
zH-K;neA*^->W#zU!sG1T|C{w2?!IWZ>#K|*f48e(%j;RZjUDR4YA)wp&1+CeBK(P<
zXgbxTY<P7SV)PGnL%su@%>$w$1;tVb`R6F}c-D^j=$nIyu~(p7Mub$;Ya9hD5c#Bm
zMnO_yG9#58D+AelOk%Y{8_OXa`E%idVv~u=2kO2G=BR~ay@>pp#6E73QeS2E1GgA)
z#TM~3cKowy{4?e#XXKo~S;K;7x0^<Nx{%iqV^JK?d?gnm9Ov<el>|Y0SK&5Pp{^_@
zQQVx)*}2Fmi-~bv$6$1mOX;;bR^~W0qvp`^>zB>vOV8u at H&xfSjPs>a{3_#hDzi#v
z$0WxUgJceIOHvrc9`=^muP9MdI|R`%XYL~A*%(Vsp&Z3 at _7ugl(4RjE#C(c;??a~1
zAd`OfxXz8wRGxVJ9r50QG#w6d>f=|WV$Z68NL;oN-g%Lbqzmvl9eD|tKYM at 1HBzhM
z4na3b3R{Hkr at j>AFq1QPNy-4;QI4MM2U#{$#K8G&?almkVgdyWGRHIlhC?iz(A5yP
zkU~xZXBhDn%OB)*iO-gB1}rvXp35y09`l|}u~YD>9_q-ts8_S?dg{1DwpBg}9t!CK
zWC4owIXQ{1P9zUu8=v*N$~W`ILJPJ>ocSM<UUgF{^+fSxy0jc81T5jZ4P at 4eE+&xL
z)x^H at Lxe>4v+I&mw?LifBeoUGs#Fm3K?RCKbHd}V2OUH0*fEOYKaM6eCfgFba7=n&
zcx!N^b<<6kiQ%hwVm3dviVKRw*`kILm8SbojVX)ouS14qzE$wN0r0#&wFfU8Bjm;E
zgLQz3_l0z!x-N4pJ-3LgnyW)o3Tp<Jy_rH-lb4KtMbC}eZ+j%i8e*2qn6kH?%(`Ot
zd&K`_a;R_JmmL*4<+m!)&F=BLuf2b3au&W*i?>-#QIMR!Zj*8jhbk2Z#dYE>lW>~;
zc~rE at 3BF5`=*l(<d1GE`IpyA}?aHHme6`MVmN)}(Ky*@}wFD~yNo-!0{V;8o{9MXB
z;US?&oYSY=F3MDF=Qk(s+LnD~AFENg5_AhY>{6J#JH3jRy*8bHw|DPR?e4v!FhK?P
z2sb*Obicz>ql^2JQ5~T?;%DFcQyyBS!gM0_QuK<uBxWL5X>k(inc}9&EBQQqzV{r3
zE3`mel&E-bH3{f`xO~7H>Z9lN?J+LPzOJno&sk4W at ctlv)ceLm4e#Tsmo9T+t|7w?
zU`(gT)u-jBAj(hVmOc<N|45V$n|saoz!9j^%Qp|wSJ!)64A=+01FT1D2Ak(8l)J!x
z6Q=|JpdgyamA9cPC-KQQk7o>*$dK#^o4D<Nr at F8KU)3p=_==ktA-@%24>9&G*G)5a
z1~kv)xSs;7(S+t%nF*nbug!(%4D1Zj4%9W%4t}WI>*818XW?t%$I+`bgD3pTegk|%
ze1mwycmsJ;&Nm7RjzKJ{r>N)iH_8$11>uh~!1u2Y<%I+tw395JS_pkI%4;Iz4Nmze
zat}E#(*?&o6_?v#(qfuGX*us`v-aBNUfANGz;2^sT514vKx{$m_FB7M#~C94CO`FF
zOFi5ZHlP*&UI1$lZ}1J!4cLue6JV$S5q>|CZM|N-3VIkf0K^nvxWFm^R0RFQxn%;c
zNQo8lU&x0we%k;&AlYC#$mFX)82~vTtU%51A4Mv?OTE^;SA1-GvU+rSc=(kB{E85q
z63Y-BeWKdCan(2SF69*XmImR(p0J0_fz=0Pr-3+fS7w|dC$JZ?U0UWakPiaVzNb`u
z at H^}~z<2djuaXaw049J9zN@{$CmoP4w6-j^Ft#-GV6Cu*RbbWt*1$*kPFy1Y+l8x-
zCUsJb9rgzFLhcZZ_yD^i7i0qKAXh0U%9CD)+QSh*tm-E6{1~DVF1q%88Ch}W%(}Y}
zX%->4r|FPo@;z7=#+hluZ2)Y5Pk>Ak%wQvkF@(3yk}pVnlqpxatwi4V at kRY2>B~MC
zUWUj37#uqbOFEQ!go40X0q-Lvk5E39xqSjWAH2ZZB5}n3>QX}rZ|Rz8L3?{5yp|<<
zAn9_CO92T6n3vD_H34k$tHIALcNKaA at B^R~<%Pf&%a+R)j2=%7fEx4)BpKlOm!zL@
zZv@~dRN$FlUJxnL6RDR2cu;qj_%`;B#I`-ZCoh)yLWt)rN?yt-cpja48=RX^<54~-
z97~3urY{~q3m`ABHBfjD$C+R at qE`$!u`I*`vM2f4yc+W5b6vNZofm<uZe?qCCEe(Z
zDkDG^#5;mCmjGD35AR){w!m(X_l*EA=~Jb5VG#Lydgs7#b6PqAD1e}^;mF;mTI*<v
zEjB$MHyObG>>DRN&IY4zS}(O8D?QxD|1!8l>hkg4!S}7ft^kgJpnL~=yLu6Ke(O=x
zLSw`7P1*18>w(<B8~q0427RORMFWW+E~66`o(tN`>wU^kdEl-ss70(2rL2Gxt{?@v
z^nD8a99`=UggvPFIzW&|UAls^cqX&JBai|!`Hzt;0H?viu@^%cmI3xEnV3_6Ga0}R
ze!++6F4x$}cOv=0GolC>Acy3C$F5O=%U<L<qvrn`C>3G?&;&>|Z at Hs)v6rQ{sTW%h
z*VP)-`j<Dr2IL2PD at -d+D^MyNH2^BmGoYmJyKhl1<Ib-UEm&^wN&sAcRMDRcClMBl
z59cNs;{l0!^IeJnTPh174P#WPAXC2s&kN<vHWHWjj?OP4Q&-RfJ3AL=g(ij06+3~z
za*u}*c7q-?m901WwF|5v`qPpBzsJT-14b*z%P(818^Imc$PSzj7l3;|kRPoF9X$wJ
zyjo;6P;LOXF+VUrlwQHu8}OU_T;g|dOM=GSH0s)t+`uYs^QUIR?Aj!<$z5kl0CjUb
zeX!h6Rv`Le(AcGX(*L|~G(QuR8||GxJD58fdayU-H-&tzGf*7?Xi?`fE5L`xQjq$Z
zxi`^h#J7Za!ib=;FkL%Dba!#&F+jxujQ at R(-*DKh|1zaybNRmZ0_ri?($xaD!l^-0
z1K|QB1Hl1O`HB+si|+`_3vMB-B-rB1v;o<T!4%%9?!^?1Hv5Gh`yJG<P|F$a-D`~M
zTBy-Cq1M9B#OM<qMe=826fDiq(g&YFgz4l8v1gkNA%!d6y3Ry`P5uL<fz1f{kbb3u
z&j|UF0y5JP6ieev(Djib(~$Yv1Csv}_SIeDxwD at VPpPvFjvSvj|LBNLo|lRbXHns}
zR6B08&DkAG{7XZWS at Iuk27-T-|LZRQ(*OUw0pxDXR|9>L^s9?8R~7VO%vT3vhU(u(
z=BbiCj0NhX%}^n^8w=D(og_hYG5*^~D0gH28tRiIkgob%Rn&(ue;xH1s(&Aur^@;;
z7Ob;6LxtsTELdZCk_6LL|L-C#2&_{g;F-_}KxsuLHG4^Vi+WMmv1)o(T|o>^A=eaX
z;oSkcd{29!^+ at TVQelv%c~o}92PHOqRrWv|5y{$<*k`NyV9ZcN)Pt~QC~tIsu*1v?
zt?D}eQM<7_VrkJ#JL<n7V2Q;{`#+({Ogm!fKVg#J0#?IeCOu#YyRo_-!wF~amGc7U
zJa?AUtP$39!HK=#pX^lWxvhwH2-BIntr{Hc`Cok=_DZmj$DLYS?4^MI|003dEdfGc
zc4~iNv-<Xf+O7b=V)g3(7m0w)>fbM7y8;f2^;e&W-4Zw?YNz%;$&o<_Vl=W?txP_9
zJHXNZ-y5sIT$X+1t3u8%;VAmXDF4fBOOOc$yUT40e(Wd64u{?6wgW!}6jG-Fx8Lmv
z{2<Eb^WUHwwxaz1Spn%P&s9ZvDEHS<o~eLzSLUywJW>9)k&81GnC{AgHGfW&VY<rm
zR9PO%gLVFGq!aS}6Zz5WkF`yKC*UCxd5+L4 at mNXier6vhXAsUYa{iV1LXODiKLKPx
zOXS?Ri(2D)pJLmK`>-RX#Pj(!@%nf6-R7`j_q*$u3!d!j)&F^LI?zrUefj?d7-)%`
z6i7YA6N-=(&O(?w3Sef%{_}7-&xywt$d-s6jX8wRK`0kJt2V?8r9cug%0o)QY at nu4
z#DI;=60lG^Al4bCtn9{rL5q8y=pi@#XfF--Khh=#qD<c<t%ZX;6DC`z8=xJPoseFu
zUPjyBf!(6O;im3^+5R!E#bhjK(+`EHdorS8T<Hq}LSlVjfWm>qh2Rt%`~qZRC%_O{
z_<2agj{bo%u`>{eod1ucB at Be7VBb<~Eer8K4+R2J7vo=~5aq4??RDel at w256IgvO6
zhA^0?a_vB)n9MTyiM&A<qGxvXe-T{H2KMRV?AAo at os#JDCVENh1b!8p1pexU-$9RW
zE^u`hXNN`qm5t<kYvzTM3TutgE2W1 at kCh7c^*=MiIarw&grUv<J^5$H_RajS4B8Xe
z75YIJfDRH_mJUJ_Tzg<%vhOD|`}u<ZLE2jY#o27@!f`<Y!JXjl7IZ>zcemi~&J2)*
z;4Z`91b252E`tPj2s*e7IxxWHJA3bQ_x;YUQ-9T8PuJ6{7tOrgHB)b|?q1z%PDNWr
zs4YPttN@}ab$TB6`yD-KK`gE4&91z}+zWH#L$XQ_4Cj2xf7)iB1k_~KlNSwSgj`)A
zLThZN!;zXlKdQ-iZA;Q`gT3H*454(6omd&IGV6n>|G$k3s!{bguTeZ^biCVV6o;rT
z-1{ddM8*Q_|FTz7a4wWi<841L$h;L+fWCeG^T6CjDv3!Mxta1ieu(Eg*Z-{>%2g(x
zJ=LQH^1}3a_WG}p!RntglTTd1`l1Y>?VN+&kl!0?T0f}Yu07e7-Z6*MkT@<#5j-8n
z<)P*pj~{MNN%z7NpBv*gsKFll&JCQJ%jq+m(hkieHmux>G5~W}-r<f~)X1qOxXG|4
zMnkU>Mu+sxOI$uTb)~v!W&Aq37UPj*nXs#+x32 at +@yy$lO%s;1%qY$n&OnJS91|=b
zBSYEGEG}6sHJrlxX6 at 7MU?Lm$^21yWhmWVX=a*|S>H&w93u_SCfRs)C8zI{}J3qCR
zT2r;md=-V7)NO9zrQwG8K8x9uTkh4F&$hA4>lRQlmKweJI=G$2(Nw2(%4Fb-m~Mp?
z_IUmYe+w+X4!oFQ1z9+%?Sx{Q6k3h#PIuhpUwWp&gpTh)+OG at Vjg#6KO8Xk$qE55v
z?=+TeoGQ+ww+gTvxaHKC!p=u&(#PD^41`*S4^=1fnxXTov(1;sdyDRFvu_PdoAW(v
z7wjz?svV}66+K&~4j~Sn`eyio_;e6;2!d5kf2P^anZb?0vuRSe?Y8=ef4RYfZO?FR
zVaYvb-(wbQR(3YNe6`8Yb#Ytsz+>+4$0C12i9^GZjgR(~)q<&gG>b3_FyZRs!iIb_
zR5%^zaHum?lMOq~uml=9W4LB+lEFk4g(rQRZhfxok9v<Dud;2-bnV#lgSO>E+$-|i
z(Aos9bQf*qD!L4}+M+H6Cih(`h}(`Xx7$d48g`ePJdanzd|qFW%?cKKsvbAB;a`d@
z-FlGE^w%pvMM!VXcQ&T!eky5a%J?Rp&(9T9DtTw-_>P`8EzQ<DLfc7iE_e2)`F=WT
zugdst+$3Jq?9R4kx&mhXGVYMKf#<1njv5^sccYgr6UP=Ez`MHps5>s<G$8?>Mj#rT
z;OPAk$2?W1X_QobKT32Y*`lzl5Tmf74+!QwvVk$So$)loI3r$YL&y?n;lp~Rf7~=u
zGj~=AdpqWup(X6-J%d(B_S@~N at mJ{A`{$t75oGMfpSHhFK5sv>*~eY0>nd^idHCz(
z8}{pRGA|2dsOaP?7IHU}%ELdR0r>Ak_<EcNaw*P&>_}W at T8bK4JmWm8uG}*dMJPnD
zee)3s*HdVR0JqcM*zGL7IiL*?6Ugzl?i}?@?n-YPvf<ge+UXziK=L5;uyN1RtsksF
zRPQ`j^n~mWAtoj!9=qTdnO_TES)K+y-FhnZeDsC>yT<oUd at -*DUev!mAej?%lK!In
zr}0<euiRfv-%y`xy>vhs#$ZMlBJrX;(f at PttEC&^6ug!b>`2n?>os^Xv_==~&xc$%
z0R#a^jJdKAZ(#4ssf47iqu&s6IQR6uUzAFCF(|4cDkJI|fcL5lWdSFFT%AZA*Nt)K
z^Y4qFi&XQ{i?J+H9t88Ixw8XbV~wfkA|r_Tfo9tSTU4{rOT5)yn`^Ojk{QI_?we(?
zJe?cgVJ{uuvZAqKh!BBjuU$?e|2#U&&<Cs7OEyL90fs!Mc2wqbMk72(4n=%UcWl`_
zKpeZh>-b|qRun}Pi=W$3>)yG)K}S)*U_tjK*v8`JDm97V?X#7iNXl7L=%x$QinbTz
z{c^BS1?%IFN at aI|H6HizkpsMu at KeM_N&jl(4he^liE&RTgv2n+$NJI5gtqeS9o=w-
z)A`mm8?cS!!es?YM>~Wqs7NBhVY$v$f#z+#&6HQMl(NaiU at -xgk)k at J3>H at m(<jg&
z@;0s>F<TwvqJt>4^Y^mTm<@F?^cSQ>?Gb^Ac=-0LrtEXdIEEX$yf~Y^&kuH()b0w(
zqsL8X`xAQgqYer7iCaEi!nymc*CrDcm{L95o6pWScljrk<U4Q+dh0^>$??e=K9*A+
zS%6Zn%TJF^#n!twa at MieE&JKRD<V2lF=N;T*Hp8`Opbe!dYVF~LmT1*s4o;zq*G!N
zVz}8D*cbps)Vod-r at 34*khpTXyI6IuoNlyP!aK|BVFF>(^@wCHPD|$0Ds#z;h<&aj
z>Ke1uP2NG)LBm1pco;34+)9FeoIV&t6PP!b%dKFYIwAOYoaU3Pm#qBIUV;L{qFR_5
zqiR%snqpIo3rn4;&9QpsRLs<1k#iB38YDL{FGD7Nl4K%nqIDvuATUosPA^U~K{M7v
z=umYbvKGiyX33krD>Uhz50lSK?zWU1N#o-3eY8xNEHW|>%fn1u<f9W7^CLvuP=C#n
z(i5Gcn(fh{G<TPo`T3yv<QmABApp2|us$DbnVIB!G(B2D+m>>*NA5~HtRqt3H5xfv
zYP5g5P&=#Hp((7DYRkuG=5V=G-85 at BYk2%{6E<5ha+cO$wzA- at w~af>l<9en-p|*y
zqJ7=B#|K|&<n{lJv_E5O+dauYPIX-!2Gt-(j#pa2D;&O`eXN5L#|5bvO?~^4<rjzV
zlP5V{IZHSzEZv7u#&p5%0{f~nZ1cj^ZPgpqYBewmwqe5zUkA~}mpS<I+L$#T+&lAM
zF5;!>IeB+32Ogmc<Bu9?*PrZl>4h(_qUhq(TXkg at N+gFTGV9h^-DP8klj1e#3t64k
z_Lksjv9#AUZkN4t3~Z~rEW>t8*O~B;xsLlm<1JUu*3>j*Zhbv5C<kF-G4iob?ygRR
z-mno at Gk?*Us%|u=gQOdH93Q at OeBB{@b$IA#q~lPtWb3^LXMv(ZAZ!)h{Wqjzo}d-N
zd&O%(?A1XaYyzbp*IvubVBE7e7k6JPO~=_d?_%gDxI}ZiqEy%07kpU!M<ZOT%n;nL
zH`Q{mymG7v^gL{lT5YRo?%s=;KGPyMFs;c)5W#pvY-uZ!>n#u|#XO!fL^JP<1c8U6
zb+8#jL!j^B;nf_ldsXjpC6t7}KuXbVbSW*6zr=-iYZHb8OMsD#@W;DSz-&g#(o)=K
z_EXBaN?mnkf$6i&U)_!OY0JX(_<#o6%{2R(Ws9|}{sz0v#qI?&2HKv!%ZC?sZHG6B
z`+}w9)qY(!Nf$-?N{&`7ou1u$=n}+=_Khv$wj0Pub7DuB$Ed;>%V=AD(JpPKf*fzU
zZwKNw<5;S#<M0mZEi}e625>Z432TjOl}oJ~>E at GiTxmyKZv*PxmN<Q&3oH<k9i-^M
zYgZ9^#GfI}mNJ8e8;8h+X4n1QvMUicq!T<?5763Lc34lb7}o&y-#m$Zkg5R;J?zYQ
zzzzfIrR<Cv+iY&h1=Bnmk4~1>I;hP0dq^iehL>X7P3NQ1NcB8%4h!d;LH+ZjS{_SF
z&TK|d&tcC|&#|jPjKRz#0E at qcpU-_YG7VXVkU-!f`p?F;jRrfC{VP5(IWb%5{jU4z
z_)SUFNmN|aP1L2c^?UEj5>z;f2VMfMI(`~!qxy+lXL>qZu_awmQ1HlYmEQ_>lD;NL
zcPu~0Z)tfsiYs{Lfp=KC<n05?OYb;nt&v+XZ-82B^&1?uygDRmX9CS`8oX`UJ{Vf5
zGtpWp&o;nqi8>Z&*&ixTZ8^fV35*J~M{U8oWI1O*V~wCs)BITA<ZP_CHq({e71p&8
zXo*^Zv%=ikptpF~*m8JO-g0|%IZxUuXySQ(w7God!M4)o<GFH_-U9W|Iu>cWoj5Y`
zSY?O{KL|?;6ToZ2M`t85#8Kfcvr-&i&rZuelrWd*4{v9>$=g{WOBEiu`grWTywTL}
zuQZS`2#mWLUaavN+Y|N%dK^8z$=YD&8BD<YM^j)fztOwOwaT{2vdZ6C`m|@=x|b__
zG8}>n!*OI`Wh|!`F$C3L%bt#`1A%pIQNYEc!{&x#!_2l$Al0ShvBHX=<MDc%?Ulo_
zUTuTP at oAgomEk<l^|%eItfwm1US>9~ou-|Jf(BbIA3V$~!=__cU1bK8k&!VU9E>}b
zEe9i2;7*x`A_cyrS53#nwT{>A&bQfDG{>n8j;HO at xA4ouC9V47op!EU*5j6{V+RH{
zcY1rZg{E51-I$4=6V7?#d4qXpvXF#wmSt64ZCyj3+H?8ctqI~h&nw$o(yNB$Rd at f@
zyY^eLOQj|9Hh}j-+THvu<Zx_0v%w#BA9n}7jXnmnJWSjhU9K|3Ll1`1h6ECuAn1(5
zhIod&P0U$#iaH+iVbzi5i%{7iMyO(<ua-yIL3DNSYrA*cfIpyL7hhpdAD&aZrX@@A
z__F=&{5ka9Cdr)7&z(=b-!@*4k~O;g+5QIH(rq&JUWAu#`9gh%0-#hwIna1049v!A
zWYAs(0(z@>>mUN*C0h+ckE=!Gc0RwIesBGRiDm}mU_=QLxU(bvv<8G at l#3*JI>9>Q
z0>H18$dE^W>H-=tX4L1 at xhtH?oys1^jfywrA%!93(&b57RgEU at y@_GSu<EeAuy|Zc
zrgHVA(#FR~0-Ig~PK9S#?ZK}|iTvm{mG}HXEF!h*zh}hEgB8h|U3RvO`@4NHq(~G6
zTF*`*sSKiDkPnKu)Kz<%2g{BPg at P9u8+=L5Pv at hL)p;sh%3X@~jJEW69zC%4dgvDD
zx&g`OGUIff#e!NbT0o6kt?2To!l+`!!VH6S!?xU;^8#!@nb01{ZDIUE%8?|TKhe$Z
zvI^0kNWSP+dNQ|WS`cL*;<5ix at W^S&skQ%<qCX%?iZl}lnm$F2*@>Jz*mYU%16nS1
zM&5RZiqc^z+C40-xpu>jGGBv4PR|a;JTs;g1v1=32t8cZ at I8!vfZkt8jN(gmG~V<c
zsv*@U)kqaDM0if8lGSG0-H<N7A at 7ao{L}B;M`wGDwETRJ_KA&F`JrP189Zt3!u#$X
z*YnPnIb-=53V;^mL0=8R5;{sI47?$RIM#z)uhKxHmuZtt?_m04-sz|x@%>o$^t+n)
zVR#vOzN`;R^R8O$b+;am8$<0}Abj_gE6 at NU>5OZPjX%@1{RFvowwm7I*S`IIB(NS|
zpY>Xwz?b6Y^Il*t{*2+AcNVg17Zt*`)HJ{*U~m9({@wd0oC6=<NXWNp`!V`DV%2t4
z$~W`=ZuGdLrPScamwy`$hw8CH3`K4OHZTkU;t%Xs!MFgs+qDx6t at 0D5C@nNC{qpk;
z&NW#$I8bZGh at sU5K6FTK?`L;wIu~68D8H$??&s1<HAHV|-rGwqnXQ;XZl0+1XZk#F
zBMY1Xy#|xz;D?Q#3pqf=wfS_#F5k2J-RrSJf5Y}<q+Y*XfP==J!_{rqs@(k!vLEbU
zhtyhKTx-Bz5xKBD1~ja4Ea^NPANV^WJWo5KSL}WG)*QB%(^>*OOO6a1fwydn9Rf%m
zSVeJ1`EpGYzDLD+`{Z5YEe%hpg at c0k$mwfgGI_7Z1E;<OckIW;h;G6BCzIln@^>}W
zKF~;QzWT at _d5d>;A=h at SD+<2P$?@p){8sg;_u221Y;ZuL1k=eo<lxf_F?CQ#bdst3
z%)Un3{Zm^spQxL@?T*>3bzk9rfG-KOV at v+wj9k_Y*V3LIJ)1i@?)v(;DPeokiby5Y
z at xTOb;>}@O(puI!f+hfPNc?%^+L at u8XbXjd%u?ymd4-d_2h`&u!VGr)lt8KCz^u{N
zuP9ILYuqd$J&@1tfkG&o<6k=7mA-8gSm#}B%23x8mNBcj%Q#V-Gb)?SUyGk)X0shI
zzMl=Dw<jAHds^%+ at YK9-geU$aSS9t#qC$4Zuf70<{1mZGwjnk(his%#!fHNJN!GIv
z>DUQ|@1NgW4*3^Zs+`%WBq5^9)gPCii+LUw6fAk9#((nfaA!{|He_9Yo|Ol2zE%sB
zE%WOMiaOu>rCXC<nuAyPvbsHbPI>O<`*w_3JfqyZLfny+*}0sDj1`Lu?bHjZyFJN?
z559N2KwW+X=^4wSGV8WPi|A9kl~0LyQ!{V|m-=kpg8l_vKwr&>=}l;bJdXWg#?O{-
zbyBIWZHX}QjYk(4Uf>#oOIUqWbe+3Tge8pbTulexX8%S!gRz$;vT4e8_nts$mhKYU
z-a%=NVZmo=CRHokJ6-!Z@#D6j!dDV2Llt*h8E?D0xo3ypqJCNYN_^asuK#s8jIva#
zn?d?D{j0&Z<z#eS;^~R=CzsDIU;eemA284Lv$ibn>gf%~>#4cfnb%LGo&<bjtF|29
z)0V at 2MIu*%obAl-khRWR&4mMsKwpPC)DV1(T07(4Rvz5N#b3YYDAbqO0tSp<&KCHH
zdw*#CaE&oDdjfJT#f%lx7V}bT#n%mIbHUHRBAVxPP5s?v=oRE;_|pYD3me>#IaawX
zZo^{)3gtT(T~O93&CnEg^=<bC*XF}3)Ex>Sj-!^^uPNR0tCQADwmnlFGs?0LWVaj=
zJZWx#XMsk;MOPrNA5G}I%Q<Dz$Z5QNQF9KZ9?PHM+%ZFUgsr_n!}v-+2Q9^^K;njC
z at Ju$4*40=m`E;+UYpdCf;uk~H?E%LqrRxcx at J;HKrru9}$`mTF at b9N{FG50?McND-
z(&jA^ucw~PVa=iJys$&(?oWly5vK^I7F^8S*k)Wnb=k_IrR~~hw1~e*mXWs!akJ%q
zTlnO35;rz;)Lv29?W1E-A7@#H+jyRBsHu%@9c8$!&N>BU95?z6C31}+-Z!_M5hu%r
z5ZAyq&3zEbl1!=T<4})M&z8w;PEol4uwlNH<L_OX<e}hm&cQDqD<J%?RsemrlHu|@
zhqh7<Jxd8TJq{_@`|UIAYvS|jKOLHEsQ3Nn)m;mO_eGDD?H=L`HIsdByM2<~+&q3m
zHA|an5N8VJ-!ETbv at u`9cFhCptR5l^X<O=)enT0-O1tKfJRS}ekg^beq9GJfu5P)<
zKFkDx+T=Z~9=;oHAIx8#T~rTcSo=$`q4Kxvn;Qq)CGd+9ccZm2Z!VQU%q`5XW!ac=
zfq=GQoz%;c^J>|PhV$ymvkz@{y(u3%=tlGOOM_5`@l+DE<pzH~)@MPVgrc}6c3p55
zz_Hp&v3&CkXOcv3blCK`ESn+?9fpOrFx!yBHKbdhHoJb4h2F|6=2)64EgjBqb2S~b
zbPaSInf%|ZmOtN&2N<>$awpTH;bfW?2?wfja#c&?DFM^Jy{vwb?U@(H7oG$87B~f$
z?G&WilHB8pXAh&dPhtb-zYlgwl*CaB;f-sQf0_4f=zGVvMrusj_akQO#By%0_A;e6
zB(oz;27dSCYQ>ut^yLx>DD9d!9gpWgjNv7(GUuierp!#uTEi*Wjl)Vh1zATiDGOE6
zDEe?r;qs;lC6N`*x at KM}#<KEeUFxP`6rA%`Aqwo&c?wbC=_Vnv5z!F}KcA9;xp91Y
z!jv|qTY`z=O>=r at z|xeGDij>7d%JCD?msSWiSPN^x<nzL6GAH?f;x?KZQ6|-{4~5A
zoqvuNYG66T``Vt414L;p0GSM{6TVw+jjIlcjGdkr)%J`!X`RPKn><Pa<Bji4xuTPM
zy1_TJsu}Vb+~18jK}WKn$n`{=_>`2*-EBMxdCUB!eCm7}B at RhCS|y%lS^~A+yFA5b
zP?D<Q>3&$g753R^2*Q?{278`48<*?iVFZcIHNPE7mFkNnlXt at jXrHkgc=~V#A-H>p
zzPL5Bo!uoV(HsAIDLwqnOWR#wnr4sd=Gg3gO602!FQ<~!Ws4OKtH%vKg<kr%Nnn*f
zj~COK9$Hyoq*|t;Zp!}n at pdOOx8lRuo6sH}jVmW+i$EO+LvtRBkQzmA&OT*aVg8pO
z>fI$4k{5M49%u5Ls=kjmY^U#!U|D)8o=1Mpc-EA!oGEPpI3r2>T*FDGuR3m0rNj+h
zKlfg0((G$~FRuR{UNE7{KIZ!9kFFrDfMrY>8TX2RKR5LItD+>^_#z(MvP6yyk?-N{
ziTN>R)_+Xu2bqVz5%l~}U*<e5EUAbM^oLW`OfcIM+3l!~31*XE`0IiU8vN7>8=z|E
zPDRs`=+1*rMz=4%Y?GGgU8o#Cw9Vi_lk*gc)5nX at Eez5nYraHZKiIs0+Js2TEBxl+
zo+0Kyq3?4NWo71wq|g7FnVf$w6g8QX+bgEV?tw!cHBEETvxhbbl)&m27Y`C3pNf`n
z$MX`xqQ>+sZYNSD%c?5{3xrQcKfSmm{OOu|R5V!UyvR8_Ji{&pALux>q`dqPaCGan
z>3+J=aVo)Ro$<q$MRj)I;=SCRfst{%mhDz_|6X{nZoN1+1+bXxVwlH5CQu<~57ByG
zT617zf>YBr5h6!@qr)BcJ-5r~?L{dEc;^Q%hmV0v8v#-1ylF;DA_vg|-4<X^9ndEs
z%-K!3mP03Vaup{eU?|oiBqNExeC)h~f6J#LtP}l7asdC~jgg#!?BQ^2X=+eQh)T3)
zpOg?gs;)#<#~Jpe1WdP$_>%pPXZdhTxog|Jg`uD*`epK<_EqSGnZo33Krc2|5zpmY
zJg(~bO4sl0+3`E(E4`HObt3D8_ik62&sHmv2*iD!!*L8GsVt@@Vc|M0biGdFDX)s9
zSdi2uM0+~r?HCUQw!9JmNn$qz=91Cs?4Gxj<(Fu2rB_}FrdSr|Ze2yq{lm8=&+HaY
zkf#q4JwDBv at fSRC#mC{}b%`in{0J;@Q1d-a(p1h_BO>$8%-$?KD;oU-Yr?d7Tj1HQ
zzK`1Bl_OCrXv!0nSN-Q>SmaYSu4v59oj{@KH!H7N at sA}jec4a3eDCHyMyyFKeHJBr
zwnA0J8{z^;S3D<><uTo9qsK5^=e8kZOY#XcJ`C~uj8~IutZu}&m!ta9L_FM#YS-Y+
zDaLQTwouOx*KZL9Ul>&0m4hdZAXCJ=SZOcEvZz%sS3(y!5~69FmFFgj1yb|SgWlaw
zIn4B8U?m9~CtA^O<yhN^azt#R1mKwDvZqhHBtr28jT=P>Jgc)9l-xDM+Y(?cZ)O>B
zd2<^)8%2V07qDag_1;(=`_-x!wm+&7bcyiQJ1Se)IKd7KT`;2SjffStCe9^VaUNO`
z44hR7IZ2IK!l&}?rp!{B>ghUEITo_^(3T{4b%*>?^g%f|j`S`>q_VzGi2QlhzVdRt
zMaH(bV+OY9MX4Z;0Loaqbk5DL>kx50P#yIQ<vo1X+W7KoLzLM5eCg<IXR~MU%#9C@
z#r%dQVR+rnYevUwf!Z0Ad+iP?_rd<DRAW3q)Hn=Qs5?kjS7A=7vvZ$1XS{7rc&mbO
zV<Pf$7b|E+cLQ+7)6WW6n9cvw9<NK>K)&3xpGmf_n0GOj$$DX8e;5Ci9|hyNJ?MFJ
zv#u+M_gKf>Gvmgxk?v4GQLh>yZ{&GXmnJe?wFu%X_P>ej;$H^g$rlNOldhtB7UBn)
zYiAC3w->(%(eJHZsj`>r)Nr>+i5YI6nNusGn$#xHX`dZ?6bAA2P#;`vt5{^E6=%x-
z at Us>uE6kkyqnWn!NAn^R^ksYtFb{ZKpPM*Vud1y4sMNd%icjA1)3n4ketI at pasA4$
zBGvbMDxIy at J6zr*T_rgE^2RouwTV1&AM%u4QD_WjOx!jzkVv3_ATnsMudzqRKp*{~
zcT!1<IJJ3nt#4C0Aldcsak_Kle>>K<?SJn!^ZU!DHr9Ad3JIZkM6`T{gLH($KyRN#
zEeF2{?@J}2P=UTAyWFaLS}EFGq8xp+ at xfdncdEen0wM#nqR^m$A6n=#eVaIYF(3KC
zI8h2ovN`e;Suf3PB2 at g#3Hi-sO+Z+&sNbgu))gf=X>((~r5j_xSbLa<Fq7lrKGN{U
z^--ZJ%7pXL=1S(HcxRh#4D_YHlyYPLK`U7>N|`F?`Hgz8FL$%2u$DoxGBk{)*MzPh
zkBFk1id26<PHlZ6`v-N6iJB?aq^eBPwYKjE(M&sDnkof33ZJZ~aEg^TWoxSm1P~w7
z#t at EWtax+=N%(V>{<y;C8}uN&uJ?=7#yjfEZUk1E at +Qa)(jUaxlX2KqpQr>RX^2#@
z4A2;?;|mB2a>IyfA~&pLQ3CU+X~la{gjI#??YasXTwK=Wskqt4DBmaxzQw{)8$@T=
z)?EYVHWPkv;L7b0k5i40Y at U`zOWBN#-bqgSbVfOknVDn<%3cVX(u$85kL8Xj(J7SD
z+n_SSMQ&i{nB<uDiibzY<rPW2G$A6yeK|6ckG;>tnY<|*9xmVaNu at 7guIMeMsm)S}
z3<pDYd{S1dT8K>8j&Uqq-kS6_A-*}Uwwb>0EA*tDJLc*sXX^LZ>xMi%BAnAQd1j`c
z&03Q+aa4bB1UfRy^+=zMT4{dKG;vW6>umC15eTnhL4Rdg<(6*D3s;P3x1c4q=6PFg
zz4<z;XSiohw=<$f&3c-EGCs~KR6;R|E9_OxeNWRjQxi%xbdFetp7ErULIbPDW<oM^
zX}OSzmmYrH<sVadkb-0R)P12~^x3yk5=86bFS0I7DCEP^IE7sp86<5vD5`k<kXP9I
zv03z1u_1kpRut-AGdum&osuZr68z`1k1+vaUkZ)g1`1C;83Bv}YCP%NJUuuf(9uu{
zcxZ<|;ZUq}8gHQIAkkMkH_)k`1^61E`E5uBUk3&eNd^);lZtwWa-P%t>ra-bDd>4X
zFd?YW=%kQcO!?2iFLo0mUK9g&&2N5L-{++}VzQo|&n(ih)3e*PhIazknYB;O>GD^C
z##bnezlrrf#+oOPjDAZf%s3V8b&a+7=hv49Orl=LTyh4{h at dDUVG(L4?N3Rl?kG93
z_+r{24Hc`>$1(3&KX<9*x`aHXE~lnBWxoy#AI*BYA}abS^H=5XN=(3U>~~FVOYM`w
z*e*%a at 4ju_&!k=wgOJj=j+q|-HFmi}zds!Rie-IebR4_Vjr_d->b+UBfcrKkX%OP&
zZJ^idCW6mWx9I3NFRM+zgslE%SB^Uz#1h5y+$sE{+=1V({Bm3;=tJ;}YvVVnzf$ip
z0?m{GNmIC>F3G?j(_x&v>{DaCe at L+i7{yO82qo50{8cfsHVCQ<oD3^jD^6kyfgle|
z at J<=i&OVG(98D~cAbNb_0G=w`o0Pz~UEkg~vi3e}iUeT5ZaX6SHUFgYg>K`v0FJfD
z<WSeBX_S+DxSZV}tIsv=T7U)Lq2%@nG0&v53cJJ)EM4+Y%B0~ig-+Q5dv+0(#}_8$
zh86pshMdGHCudZ1-c%T3=X<qXh|FNsl)0vh9pg)EF*BlR+Wyh;hIKRF5}U$r1bJD=
z!M+6Qg(4G6q76fLngz3}OwqWxA3HspUIy+-j<UrCG(q`9`QN>97&4NCrl-H0bs&lg
zi4{918JgBM2?Alx<zBog;_lHRu-n_rtmcuhbh3RsxizPHTUGhERI>QwkKY5^QWB*5
z^KuCUp4<>qsZB})ofFf(lj?{wwRuYt at hD^D<gp6yn#-c;_?V5Vhb?eSS_iPxvOm=R
z;Gg1}!Ne<3dq0kSLzqvDz2o(H;JZn|-iC-_wq{O~dc}~Doy+G|ADT=v)08jy`(~wT
zv=OwgM>cmlrUwOC%%ft(6{K at QB{?!b2Ih^6b1J7w<ms|RxL0E+L_`<poWH<DGgY0~
zv6Il~G#OPM>v!j*?sfPX;0_|<Ah(DpK#!CcYx&8+>alQsL;AT#+<)RjHbr0{(e8EZ
zNzeNiPs7>!Bu26><bx$qMcM5u>-vZl#y<>cSD5^Wok>x0NjWj7<e;Hpp-`<w;UbVx
zh2NMhue4XisySnMe^)~jx3uP)QJoNYW|_|wQI;24mQ%Flcz?%;<U0KF{^0FHsZY&K
z2mkyDpTpta-HNT+OazZ5i?-ZM7=P7FDZ1b5I#TQo`@P`|OVX33rF3n}nLu~*<sFZi
z^qDl`{Z1cF&zbNG3tw%cndl2kvfBLD>}<R-=q3U4m_la+VV2nUUaEKlK{fAdWu?{`
zX00wMQ9CCqIhfNT%{P*+^*bPQFD^M#2Mmql=@~a`MwsKxs{-tJT1KnqIWO at Re~Fmr
zQ71nhPpLwykGt!<?@g at cv7@+6GBD|=iL?{EjbFC#)Fxy4(mz*VN0%z^Y|P&qK1R<<
zV%|TGfAHcqE!_;DmVgLLH!-R<z_E6y@|@H02=Y}p-PF2Nst=)z58*p?i&prON>4WO
zt4;9b)qXNgq+ixGSMX6|Mb+%QzUI)1rDLVHod_^~`3s*;a;~(#Dvd&QT<QGtOJy7C
zdFe<Rz0;Sz6I^lWW^6KX0aM~G2^ruN*^%6BRn(%qDOr~|-I|sIwxY=Mv?)y+I>Ow`
zxSI3UDN!HMJ$m;z0Xc)*a#cQ$XkV%(>17(NL4`evi-e^-LsiG3=qar|x(kR9wUS5R
z9X)zXYwov+57w33;_yUJZdP2yCLKbqJNF4g3~u%Egp>6T9O}q~?|CW{R=W}m;wa`<
zI_ND!esNv79IB1nnnZMw5XxLg?%N6Ig!nG5bsP?ZLSnwON}NhqV!kYgDzo4Rh4_3q
zXH}t=zIzH9=}^@;ZZX+J)m(K3g%pO7I19N7S=Zdz+@^{B387u|dW{seHikSoLe=~P
z8gn_++`tJ+>#Fm_T5(-QmiU##M7d*Wrd;p@<F0{qU9F at pQyblu^nUKe#4GEZ1Sb2q
z6$m_cWCCyZxpm2TR;|K~^aAT)3_S0dbwRBhV}ggA!~|K9_5u at F`Zib9x<j3oG-fC-
zKsC@!T7a1}mN73nk8u~fNcTovfRQvlN-k4|E_W<1egc1jVOMUq_8jacd7~@9<V%$v
z-wtk%AC<$;4WFRd1 at 2a#2e?Vxs5CR)Q5(eHQy4(}68&QRzz)(62 at bLyG7Y(_d4ODh
znT9+-p5R1BUdx2hgz#>=I+bt?nJjJcU>q|vY}j05#*ArR*MWL*Akth9K{&5i4<X&8
zt<FJ~E~!5T_<-mQuxx2o$1mwRPyy%~z>9;gn%WMS0c at TzMlpgz>6 at c2_)R5C3Ldd7
z(DLfkC9xxh7HHe%iVJyD#gfty8*m^4{$yT`j2<KIHB`*ZabAjy at pj0sx<g3*UCi^X
zHTWBTX)=b_(45V2c(_Xl31je}>86u+sgNQWo74c?AoeC?D-_NIr{-79U{;FFG0P!g
zQ39K8YI~;$8AQczY`x%DQH--37<36sV=Nft+R}mBAvC<BkSRi1eg+wI9Ta1b)r83{
zG=8<wxSFk(@Xy|{t=fKahLmhz$e<$>y5+fv3zzi<Bg<QL4XG;3VRIO8pi5M%q9L1O
z4Bt=_oYo`5;0yk|`6bJ(p`X!cJRekV6JxUs9t`J2P<gksij6{0H`C#)P0A}Q_=CVr
z6YmOr%Hw#stvi=w&?i<1#t<%?0#OMPFHZm at mTW3*+91>rg&=tmR)5;e7yv|R$Y`Ko
zlWl7ft_3GV*dj`iks!r;&3i==HlrA}A;{+O78H&F$3;jXijnakh5KNT!M)DC#Jxs4
z#e-Tq!vpPVoIm6t=7DB4 at gd=O;34sN$bax^^VTI2`N at wy73Wkgr8=8lUj<j8O0^U$
z85TLAU8Rwsa)1Nu6}8U($T-HRpi at 2}Z(Uxitjk!2Lzh=KA^CV7y`)wRO%~Xz<88S6
zv-PK&x&T8um{nG*UU4_Sk$xFht5;z+>s);aY$)rP7d at f1TX3!=grj8sbv+MF{S`w1
zm?ErUJqJw#gbV03BFuk5|82<0{0CNUg!*@|%8=ET1daGxjjjX^*+x!H!h#4b$^=Nl
z+ac(X_!h2t99EIMW<I at 2m`bQ-J|l;0DW^hmc at M*>?Dx1rY6h+ZGa3mQjfsThp~vvH
z at M2CWZ-wNN*79Ms73FOvN5);*ptvG4hWVjq=2_L!I;E|7%qoeD(1Zr?){x*3ig{kO
zthbg<S*gkl<6}6EAp!HYYSH<^O~%xOE3lAxO|=B#(|j?g&`wQ6wVp{Z0hIS?zUV*|
z1-vX9TP?+)dC5pKB$B5-Uy;D at I>BY at r)n07>N_T>1lcXqJXwTzk*0`76k~tF#*pRE
z+b!3vTzH_1EJBsP43w9q(ylqmxJnO8a0DMGoDIF)%65 at K7&et6f9k9Fsh2YX7-kdv
z>1V;2V50;hF!2xooI2z<#IohNg|THcWWS}f6$N+PDu+W{l$t80=rIz4!$QN2GQdq;
z{8~+YWsN+JJ@#Iv4$#askEIO36WXO%05lbD(aP`GsR!3w3T at c7zjke9aqLHL753a7
zJ9~$Gxf1KSp6-pm0`}ZsZ58y~a%g>hJh<%5wvu|a=Iaeu$pktniF^f~egk2W4+lFr
z9(4!17#;QBA=t@&Jx4f+e1Cl!E0h$yo`VP%`VkCg7YPbJs{)abk5OIAfu8v%D{WSs
z$Oy$LZL4|V at WHJ_!2KuMB9TfkXQ2$b6Y-25%M-JVE;VnW%t6c3d8CF&a7P~uK8p~#
zf0a45y16S9U<qf=7{NaY1id#JUR{^FR&9^y7=fI5UZb?fRjePwr$OjO(A5oo5UJ4^
z-$|qp#Bu%jOsGBCagF?>3 at O$g>EF|EMk<tvf07QuXWMM?e!tosjxaRrx;j;D&xD*l
zZ%rfL#6 at BPhNDkp?>Q>gGf!;p8304kryEEvzwiE|N^rJohI<;oNXNS6^(>P4At-ZW
z6 at Gl}?f1=S6LNip<b3#Mv<85eAnE)f9|DYEfHR}(3goK?x{g8rjfU%EB*s0PU+Tl)
z at rnOg3zE$*dKJcleCj`-z^F!}p@|DFDK0M3EUsISu2Uf{so&!&PPeHLC{$3Fy3naB
zT9CIduUFP9E>owgt6PxtRkSauS3|b}PV4v at 9{z0q>7g!Ils?UBqg9u>m+hftputxc
zyrAZ;1uSZt7O^p^%Um$JP!^tkS_~0TCe3}P8C<wh94(-Jp>e0~@18{T^Hp*8^n05a
z0abKOsiK@|{Ao-cb#%4<!nHkZ_cQ^+NM$2cx<a-R>}jnj8Jk=Io%C$UB1s<I^y0q4
zsy%M^W}<?=lD9V5DY>J{@zXdw8VYKb#Whp&dnJ1$7d-CeH_ZY{zGCSW?M3+|gf{sp
zc@`z8Q-OPw?o~I5&Ef{dtZJ*8kdos<rYZ0q<As5HU9+S?NqfO|;r`Uc-YfT<loAKk
zRjsqBkv+VN=k6spS<MP}(#z#X%4gHh+zXoJSkygBB=*Saw3kZ~3vZ`X-8*#i$&{hf
z0XBg?(!!-=DooSS(~K9`b-H)z!o_52(IuHhbW>x~@q74t3>R`2wKrfN$va))62F`b
zwGNFAwXqWXsqj6T3*bfdO at NQYol0BreXgO}LzbbIzox&6zlLMsgSumJM^VGn>NH@=
zzo=mvFfF*(G2OCfv?qMguA3vGOkPYIX&pyv8`j68G0Dv|LgXJgt6ejlF at C@eeB2+*
z=C>KMQK+-fbu9~=QMK(2n<E>Mu^o|}6Vc48Gw!uxyA=mU<<-d6f3hv9n?$n<p2^U#
z9WDJ%I*~CeV8v!dTBoRMSr$H{v7g^$walY6qOhNJF||}@sOwl3J)^Z>a4{>ytz`e?
z{@yf(SDUyi(P||nnpgd78p-W%pM>}GrA>F;d)*jbRn!?t>zq3LI!qRIR8!k|UVAjC
z at p09vHh=nW!0)bk6#G(MMdAtxE4I7Lz0sbI$eQ7eVxtkkDzkp)3926?3X9yiQZ{X8
zvN;T>+WoCEK6$l+iPfp~VP$hRW`k9E`n^-NBrM9Z{Lk7NQ4;Xz`4&y0x?F0PphwjQ
zzE6P1T`mXX%RINTXVcot{$BukzQwD8{kMLZmfUB^6+)(Z<VeqR_}5m^6?#Wmp|nOl
zO)N*5Rt>TQY!_9{Eed{`0&|5GW(;U^S}gi}LJd45E&i;UW)WT}L>mpohUd0Qw9B&&
zK%jbC*`UByg%wsK1|u3H79*<T7|)^Eq1nM%Xv-$?<}y4IPKKaGSRn8an%=VQ3hf3f
zOvmw8(AS#*a8h_W+yK4|7k(VU4G|&;KSU++D at a^~5kL>11~8MylgE;S9~qJvlbMhi
zmzmf>Lk>|I7#pBL=pgtJh#qV>DqQB#Wr_x|2!}qJF(q(YI0K><*^CTA<|7l4^~fk>
zIg%71jA(&hZ5~69p at 0}bj6eN@^nDc)8&Los+suS^#P~Bj$lfd8OW$kX*CB}!4e;a5
zRj7Z=1O0={eGM`cS%kz#a3Nd~s0cYk1$=e01Nsm%Ht>+}K=Yu-3N>nad&TYf3)f-7
zU4OUvh|%-6LX)-U0I7#o3)K;k=aj*IxvP at rnA4csn9FR-m@{AFm^)u{>e9#&-j$ta
z2`~!ius+y>zkIf2e}p*lxbi-FclGS*^A+WliDv;YRB+ouf6J$wEDbP~BElhPVBZ*+
zJk+CKv!+Q2ehKXMsbyp`a7I-C66*;cXi_RbXl-1v50k|%_D;`xWCb-+?CKe at v8N@O
zc;54wduLA&x^Tu-lXgtFh<(-gYW$+qg9f)8O+7NzL7HG%+MFO#`%u<L%Sc(xSM*Sq
z(3a8R-C>H==&-tW(w?65 at e#45PhR?xZzU%rt=`c^sYElgbVyfgN!U!4DqdKHwr=P5
zA;q?C?sFh3ap7`Wdug=unJjPzeqZ<wU~6nsu4_NV6gjx?qcxjz+(E;<jY&-F{8;N)
zFGfrJb>Rwl6PNeaY`J}~B>O(H at ImA5j`;4bBJ74Q`}tDgFfUBcRRP!)@;G at dj%4s;
z8|0Jmb4&o$Fm(e979)#>^nv+?)(t_acXIF)`k*HIAln<$r2Xi%zY5ajkv=1yG`{w$
z#%afb5w|x|winU$Y()9Eq_Mu~(Y4bE=_ at I6Yrz}ot9Xsn(n~3wx|a2W%o3jbG!K}s
z*Fz1b-4$EYEn;U;pJ(<$0$5t%>uYq|BdgcWJ#=BFrOIZ&AF0%*P_SYrKhkn2Y0n%#
z_7mkoInrXBWG}~?`xC0wdzLJ7ZgGX&P68CbSK?pje_lB~Z+yD+#Ni3wzls|N=?<gw
zP0}!7U9AtWX9xcYpLY(9ITx9RDG_+a_<sYQ at goKsdQMq7nf{Jg+qVvXp{RfBjHR3H
ze+9-`@QK(p1rpOQ3EYxh0xV`K4J7-Fkrn(~Y=`3f at n-1dPkg`8-JU;YW{v|Zzj#E8
ze;475OX!EDI#5K^sz%z(uONKP{RC|Iv=)|CrsfDzL~-}Bh(@ycr=-rTzT*9+)cp*#
z3Xzl&HUDGz??7hR-rAmmR-XYeWrCzRW4K~)#b1hwDr4dhGIFY$6%uH1lv9dH1ffKI
z--yk6Jw_!KjV63e24ZU%(p>X#_q(^y#QZAtgzTx;i$CxGDg1o<3HvMU6LfayCG%p9
z-5A!F#3wavcl at 7p-YF+uSNA|@+L=$yL)qj&I_pp at qj!G)E7~zugO9tf)^1OHuSG!Q
ze=GWtiSU+G>I9B3+G!fsprmTdm3CR+{zuib>$$Qn2V9SmO1;2k#sf{`29y?!|5oAt
zVtYit3vOabrGDTRBeRxq6ADyAyS(dPs^VwJXGltrotAM6%A&?xd6x%neMzN3;9;?e
zbEQk6CiLbTN^@D-yVeyE_Hgzp!@vv1Qg!1zlznyW+%8I7yrN3!KpMtU1!HRzIW_H+
zt_hsP{Le0LcgeBn^7GkwaDxKWT){c%$JC at G2Mdw~)63hDMV&{v^^TE}HCFE~#*rs(
zHQtT4ZFTL2FKa^*e{&LLk5`>lqG3Q!{+-ywaFT_Hex7ikussJnC*L?>f2Y*h|4Aq>
z$gcCq&()2FLBF?KL+Jl2VTjP>1{ZlHh5e1B#;@oX$Rs9mq<wHi$1u`0YsS;aGfFjJ
z#b<ShBh_N%%=B`%)Bvz#jYgT4EjY``qus($u(?Dlkfr|EdV**{P;GySTLSg=)<f|y
zeHTg4F-cN3znt0Y(p+j*wNU)Ah0!Ap^QA=zQR}AMA+53ZXuI{ItjE{UE%5w&SQ}{u
z|3 at 9d#%f_F4d5Rd9>|+l<>jHa`KhCIbw$Zxb6VCd;#B1s<)LwR4||A(-x=-Fl5<%N
zX~jLSzZ5QHdelKY${?4!hnAj^aeJ3aWCzqd(=tQJr89cCkg7O3K?Zl;`ep|ASFZ0o
z)rvjU!lFd0xPMz=kW|d49yl19I5acB1ZB+A%0m)I(A$&hycOmi4zni at NKUfuA7iq1
zbdlIx`s*IvE0qxX>#7iJam=H0)r95r at Jqy=4GCD!6V4ybF7|m33xDnZf0I<!`D3gQ
z`XsWKlct(S$t#?*xHT@(I!*nhOOIv3bz_f5;^;9A>Bo$wAQKa!4U>wFbT6agvVb|Z
zY4Tz>s4wZx7jJ0tI&7^ck~hGenRe=2I3oA8qrn?I!kUu(8y4&1oTpaFUfgw9K$5C3
zDoy7!Mlz*d=VC82-00Hv*fuXSHnRC}smpcKwO%wf3onlDa6-f36O*7QLII1Nq%6}%
zfvI1jAB~jDZTL4+zu-}9IB;{Ftf^6o^=PeM1>wx>M-oonzur%Edph7JR81az&`$;1
zh&^*|M<m5Y6aI}vhu at e;Vsd>?dfyZA!Qur+KxqDGIY~Hp+^19?v^A%-6gIZT!RD~r
z2#(ZiYTW8C11+Kaxhjv8r?u$iH(Pi8fNdEcIu^82!#HB558K$cqhX?*NO{|6 at vJ=g
z>;4MCsb5d;4?V868Tm>cY`c*cdR(3VQ~aUJl{F(@$b)S&@(=MR54P3F3tg^nGxC3l
z24<iPEo<8Tl)<X)M_0aoB>n^oc&S|5eNVqD?Fh9lSLlp<HqU*w_h{~8N>;ZOl7s*)
zKO0`vV{)+OI1@%ft at I@~IEf(RjS&{Q<;jV*`CBR0P5&lt>%{*p^-Xh^=R5O6mRRd6
zY}gQKO*W?VO}lN{B)gm^4A_vF`*L5 at r-=F1Mg$dxssriovZb&zcPn-))~r4 at f5jWe
zLXqkocgmI`(d42(wOso<ZVzBJX_jeUx4vFKTSpCH`_TUE6gQ;e6X at kS6Q<EOXVf08
zuX_JfKI!-u-gNv84R8JhzGn2%ALEl!C4}l(WX0pmk4 at u_er5HPC7b54iS$Uce*iQJ
zV}G7`Ca~H1j_c$f;9nIRy;AN}JHZipsr3J5u@#g?7#Xj}0$`nIf4onGyvT(9Z&8>G
z;j>w?W_wK}GV43wPVTZCtbaxEH<8rEAXtBvV%B}Y{eOtY^?V`-^FcN_KOH!<bL=1B
z at QXTijmR`bl5D^T0R7keeOH95mY~d2- at dECF*-mdvQR4Pzs98k#lU|IN__C<BUf^7
z=D7XrOaij~p+D|zsjZ!+ZJJYT7=XV+>HaC=^(J|Y|EGTlzcBv1K6!rq6tw3ey^LPe
zLgCJrdlWP^64Okm$|tsGA-#-NluF^wmFw_tN^NS9Jxl33w4zLk3$9$hAetM<j#0LM
z=>0#1qS?%AxgMi@|Kxj$)1V&WE>vG{UpLCM9ogEM$_8V{?v<b&v>Yy5c6Fdw9pC>T
zt{LKrzkWixl49ILGs=hP(<}c*%jna~%72mBAC49dbx$#OzW;@Ce1za?n^OPbDgWuo
zf7ku at M|YQwvX^lEkCy&b-}|uv^DB)#N<4h(u3~>t{C|IY|M4IGW1s(@CwqJS3&R%w
z>g|7Z`M+orC<M=ICN6Ht`d`RmIY_6$c*Z`-ow&Fo>*gQyZ_0lYm%9Iuy}Dv=4DJ+0
zJ2G~{2mlg1s)%0AvNr~G@}QL)JD~^I66klc at AD2fEBwQ>d}LM!QzznpMS`WiKfJFR
zI2t26?a}^HsRil%6IwyRf`m(h32Wd-Bs}7W)8~&AX_)U=EuHuSpvjmHZ}@%?ccHHZ
zZ4!3<Wr(5+J;%u8zRu|+N58l7xwra5 at bOjDH*8 at hP1D$D-I2dp+2_xP^=U1c3<|b%
zK1&G#79tZVEPYaBNQ)KfV8!uZ#I6HuRP7Ja>530!Sc&^EDBxm^>d*oP5h1B7DUNsJ
zj%9RouNg;BTGXjjXxbG_mzj>VOI(^bvT<n(i>Oo#&#CBiQ;g^4%P7RBDE$-(?t#Tz
zlVD}~iQFL#0U_QuF#aj;ckUTt>6S}E8{33 at V~yT at BU}y?5VS>C1-!2~gw!cC#lzYI
zus;&-3OL8*J8hn_lvf9r at ff70lGMH~T}+DRH7BH&gA5=`x5uBbpe;}oryG%Q3QwhE
zluTqOkr$I5)&*}L7R-G4=4VmK$u}#cSwUvgw5$o_ot{2oqX^|y<c;RhoKMbf6SS%g
zvVf)3j5O`wJLlS&HqYNRlqlwLXjJ6yjT9}2=bhb6il&S-W$EUeLHUc9{mJ&V9nSNZ
zdLi~WM)fKnNN+KuoXmPQN^@_zPkcJrp&r%}ufFA64NN;g*3R2F&t=465|3!s@}>|m
z`bpaHNV|WoDw@)(aX$M1l)~mOL3BE>rklp?)i?K3E)X=8!L#=&S__F51`Zjxft4$1
zAD0Y9UBb-yd#f*TQti$i#~$Ygo;MADy`h^g#O at X!rwBxz<+%104ci5Wb=z*M%Y)sq
z9#>%`bBqU1JT`x6p3$E_ at p;VU{>s0+!kFH3*CS2o-*PaoXxQ-?!jo?Qtw;Oy*;AZ1
zKR-Qr`HcRBizjX7w4qjYdi4~c-)M&D!KW7>6rJ)myUk8bE(hCk&19RgYWXMnsXFB&
zcCk;wUMN#P+3#JxcReY^_k_?9Gk3FfJ))ECbQkjR$;@N0y!~M9Afxa91r#$FYP-8g
zBi8Ho7xg$E7!gvM=7oP at YsI6QRg6W9<u;(MZ#=*rXs4I138)^nG}^9V!~UF%Ib>!?
zdlp0R+2l<q1$9siL6==Izn;CgvSutu8ctDQB>jeh;>Qn6tj~W51fSV|e0kG}`JLiL
zw=p}(tLLk~_)gG4|CMo^*qwJ9g1Z%6$0H%rU!45%HIMHXi1nUD_o14!FMq+O!q5=x
zprO#6N;X^l9&E!MzOB5PoOx)l*tEmiUo5LQwfI`+_o!Q)iPHL at u6h1^l37{wtKH;F
zp_ety%@xaBoBD3irgafPRteQ(1!O1hakGIQCFa}<9R$m%djCG(JsnfMC=SJT?Hxtt
zOorT_{#fo;?C4j<n6|<@<cvu7M^~Jw2x*`1C?0;!R`A;!XZv6u^n7T3+M7O(v3Ir7
zQ#Rc<cp>s=Ho-$teY- at F?|Y{U@>tyC$~OmK;82e-Q?hKy6xy@#JbVLiGg^IpxwWnb
zT~B2=J-0bcz%tUqGBUt2@|FZWp4*<NzFx2Pf}^&i(c$;tdxVZfhmNs?jOF(}{$aS<
z%S1;=gi<6OD^oxW1P7glCS3P;!8gbk|A6cQu6Lw(Kawvqi&TpWU5*;VIE+AZL%|JU
z7>M-%>(d>ooY5RvAx=gzoyTj*3%st|M at GA$>vzX``>p=*UaPvNE5WR8D=pMyHuf%L
z&C0F)L%_tImesmW at 2hIB*;l8d#-~xQA!(k>;jhU*{t;@VCexP}aeCl|eS5zC?R4|b
zqxQBT^!A9<{b-T-2#C~Dih5x5J}&gSjq$qmg4?I|6xDj|Gn^(GpKilK_?EeLTdj4L
zOy6J0hw-hXd#rdhHwv;GktwyWl^es*3&LB1diRYWE`}97`>N}8sXghQ%pW~j!v*c4
z1 at U@HCf7AmdzlWqn81y9_3opG(DiyMs!{v>p7pZs(e>&^ckLyC3{cbZ#un6M&0H at n
z(EPNTWj!%oZj=SOz8U&_bdbi`g~NOOnitmd)Y(MH8<hHSJ3Obpf4n=}KJPBV${y<s
zYBCxn)W94S5keI{IKQoE>7m2z8P->wq=R?CvwpI*zMYU{h^NND!IL3WtD%nHvsq2h
zVY^=Wv5}e)bv at tQxjT9NlTQzSC9|KYy8c6)!srElIK&QXmf>{Yy6SiVeY9O|eF1$v
z1%16&D|5HiE49(*f(W+9)oaKE9K+HwXc}*_5!G+9oNIE)X><|t?j4YXg+(+jIkfAC
zLJw}Bcs&`$RY0ww|HIz909m?S^?j;xxm<I=PFXGo$}#vbzIb{>PfwqBpL=g#=$Yxc
zx6$00VW#Ikkj2gE?$bT3+uf(tr+Y>tN;t+&kSyEyMO-!!PAUbiifxE67T926V~Ip0
z773&PSq{V^wwwrXVr;+`kNp1swfFaZr~C9wUx}0*#{y|~?{Dw5)?RzP_S%p0iN9Tc
z at a=!}+&6v6e|_zhFFp97!SB5O`&J&k at aO*6XFl*_7r*8YUatM at U-`ffed8DZ=x=}e
zXaCAae`W2TFJJztfAj<QSAO7s`jIdA58nGluYBYS9=!LpumAOTfBGkX;*Wj$wZHWf
zkAD5#@7(@V2Xk-#if{aL|NUow|IKe$`jroT?^mAx)sJrM-TvQy_|Lxjw}1L$-}dHz
z{X<L7f7ciN^#Aq;{<~+s{D1kAgXb^3|9^Z(qx<I`{BZaEZ~gcu|Ir`()cZg1w!0ty
z_}~B3r`~`41Mk1}zW49^rT1U|=<?5g><fO|M}O<5zw2P`r=EK7h4258pZ(aUcYoi}
zw>|voo$vk3hraob{rt~<>=$2t-|mC=?!NU?KXCN65B%bT_m2PCfARgZAOGNQ`L^*_
z?<{`(xBT_amw#yP5B%uYefh_~^w!=7-}b$Ku>Qke`8OZ^i?yv^{PwjUf9ZqoTzdAG
zzwm=g at B8%32Y-6+>wa+d<4=#jY5Ws|cYep)DJ=ZGmHyVwfB2Wb>x(|~b4y?Mz4!j=
z-+0eY&b{|*zV*lc=||W8#NyMh|K}fl at BiBU?yvc)U-$c8y8H*eY4_mo{pfrDtMB>Z
z-*f9bp1<}Zzwj5o_RW9fTR-xahadRs?^yZ1&-~Hv`FlU|<NxWOee=iP)x7u<Pk-#M
zUpr`Ay!ju!^CMsTWk399f6IqD|LxA7|LFGnKlYJ#yz?LY>|cKI!~f at Z{`lOl{>Hz0
z?Nh(;^nda#ztR0`zxwSz_J{xIjUV`x?^*urH_Uw5&wa(W?7#VA*Pj01k9_Alf9}qw
zzw7x={N(*l|MI85aChaxfA;fV at qt%%U;Efc-us at v`M%CCeanr%`r;q|2fy^gANgCq
z at G}ShaO0ET%IBZ at Ge7m+-4FcJU;QV)ez^Af+GqaB;ivxLNBST7wIBM(7ySIc{-RI3
z{B+~nzW94T^Vau$<L=M=sqg!{-}!_8^M`-zec$@#-Y5R$@BZvpU-%vW;Lm^Z*FO1{
z|KlU8Yd`kG4;C7`pM3t!tzUW%?-Bgu;Ws?<Ctmoyf8)CjKeh3x?|aV=e)PlFKJ~lb
z_gg>t;h&`cg`fM1#r=)H^Gm<yl`p>kiC_N7FZ_plKl7J<&-aZRi~rZZ_&Y!Tp<nx#
zfB3sT`Afau_Tj-Nf96Ym<wNiJji3HIzx?LycfRlYp8C at dzVzrz|HeQ2=Kk;d?tk{y
zKlvqp|Iv^9tN-Rbzww8E at jajY_22*LZ~CQQyYTUE{#_S8z4h^1yPy4{kN at cJy7(6k
zzTq#t at Yc_M_4ggT@;ko#_x{bV{mw6a at qhT8{qO$rOSk^~>p%AspZ<~7o3DJ^<=!WL
z`3wH>gYW;*n~y&D_8)xfTR!{YxBbG+r~dJ8KltX|pP3nb&wECHruT^t|L#{m`160{
zpZ}M;KQsID|M#E%rhh#6{_mLk%-eqK7p`x&j=uN%Kl$_D|LI?N<;Jx?^v(a`54~ym
z?|$Q7eAEB0{<D97|HVg38 at t<kmzr~p#$4;taBpj8dwl=$&i2~D;9z?=zI?d8zp;6F
zbF_DOd1LsF!Gojm at L+p$j;?28)ja>{w%c#gzx?OezwK_P(Rx#3zSpGCXmna{ns2t|
z+nqPn=g$WI^J{f9J{%m>>u)+3jSe3N=}F%o*Z1GzZ_j=u(^z}z at X`Ko at xtoC(QuX0
zy}j-A(Z=w?GqtDo2D^N?#<ah5bXU`^%8lW8eQ|JbFnBa`VQIWR+&jFm_*}oaFiXSy
z=cQ(=JA2{kVE={T_SXHP!S$WN)|l3<=In**NYs at pqj&M=g|}Vm_2%oB+VhQiqucA(
z8_jm}?H6V*tQ-z at w%3=C$sx_=XD{469PYkEu}AsE?eTbfZ|mjljl=s?b?4_VLfz5+
z;-z*|g~P>mn}63ICSq&n=G|(x-fBWZV}U|z at wxVVlR}$9cb-CL at wtVTK6Po#AnL6i
zqwDC?0-yRS^cSCN_BylmHUL|yX*Y5K$enrB0NHTbKsK&6kXwS>2C{2v=i0z-wR+S6
z+t}K`cA+C;g}(#rC;&SOz>Wg2qX6tEWU4zrjv62vMF+?(bb)Nrx<HNskX@*q>jJwY
zv|V5~&{s+T?=@jk7vQ}X<L&~y*Hu9*5&yaX at 3m;$6WRSX1%UVZeF_5JqfHOctv<ba
zV)lH4f*`jUeotg~)eFdt`KC$&Ehg8_^#H!m1o(o0_gWN0xoZI4>!?ONS)loXc+v&t
z0>BsA`XsVN|3Uy~3Kjs~Yp6=>*1Y#kH~ss7_MG+sZGQDlx7q+Yv8fMm&vPH(Q2=<S
z599j4?zYt&*d4)!jj5_J5A;qS#0(Pfh%qIRt`3cP(cWh8jd|d=G{D9 at 2wDx7z|frs
zLt`Ek=_@$;ZAR2+7zcf8=dhz{DJ%`J1nfqEr6KnB+()Bmz at kP2ELMa@Ls(2h11ufQ
za-*RM=m>KYEFDc$qp6YjYZDxuCLC`xg+s!F{z9PyyU_$kssl%2-$F~`<?4l|@PvjG
zJXvTOs8n<TcaSBKYPy--6!R4HH1t#{jcl~q487IS&@B;7DOFpdjQ;VxA;Macp{~Rc
z3e008)9_6U2n4o)nAXnmhlZ;^DAKwkt*4`E1(+h}LSK3^FHzfGC~8|Bm}6!yG^N{#
z9?jnZTGCQWbFmf5pc$8 at nwW-EHRh*FyWpo(HI*_mnR{t#s at 14G2hvv))R4la5}1SD
zhIF<qRclCTyV8q>wN}=uVYQ7CXmXd#{D!Cvh|*opZ$r9k1#d`oqa at vRJ7_fPWl|d&
zbx<n>j<HIE1EN$o^#)7Z+9D+m5~albF1%|<i=!kpP9;r^Wl at T3{clK<QwbcY1ddb!
zhf7e{2TQ7z#LUZDHKfosdrc{{&0SLpok~I at 6WEkOrxIvv@|sp?Nn6tj9VL*YuOL~N
zM=G21;IP?iN~&$+EM=(#4wq`@no{Ug3zk%3FrEU7bgI*|$PQZ3Qb|}`Cm~NI&ArT(
zb+6k)jhj~JE>aMRC-WA17bQ)7l)#ZnjKn1<Y=R|frNVugxMoY!Vl37YnZl;Lu#I9<
zZa9 at BVDS|!Hg-*U;#2}lDuE+PQhgh}ro6FD7*Rw~2afa=94<kjd~&J<ODc(9lJ};a
zvdpLrNI<k(mU(R2FGopOqNI_?C^kF7;t_W=lBml9)|7V+&U6 at w1+6Ln9CcFrB#2EZ
zeyWvx8IFClc_=HI>WoDkwwI1}!V>L-CF+F5b<%qK?xwZgv|8&ehtm3>U*0;TS?)UK
zL`v^Ecqp|`wZdWzklII`)IRE@^r=oGaXTq}suLE43r#6~V7B9qI&h>q;fOkLM4gmA
z>g2pr9XK3yK%vw==Eojfu}D)6Jk?3QtdCOqkR|!>R0kH<wWRZ|Yf0x*9avHwI8q%W
zNp;{zb>LW#4Qb7bTP?J)B`0p<Ry)^{*4xSRKa52oQ7fD{8rQNDm*a2QiOc=A<irDZ
zLnDbgjYL61%T7G%jKy{0S5GuZ=UI2DB!0<+w&ZVHio06Ud0Qa<Ogw@@dD~PA7IUuE
zWGtx;EU6AG3tiDFosX~5`S>cGw^iZ?P^oj|EuBww8cEcNUml5cKI)|34)t2nZwD|q
z`cwyninvoP5K~JaraDorXrQH-+kUuZ{f;`QjymhN>!jbQPJB>E*^(~DdZ8nDQ3t$K
zCoV)C at S@Jawk$0aN|%EVa^kkSEjw}94o5_(PJD<u at j<;?a^a~CEU8X2>UP#;w+mes
zJn1q~CWfpfWp at 15k}})Kx2((-0x7TqAxM<xPEm+}OD$UV+=}m7_R;dfEh(v&0xc`4
z76mPPW|@(e!|SLsiK?@b8lRNZ#;7IFY-7}tirN9TtfCeIsc7I(kZrYwLMdqogp|}~
zq$S5}aUrPUtGqs%CHi4R+wNE<qpkSbVSiihxX&t-I$&E}+fvO`5 at ac1TZ-wJyDi1E
za<#3PEkTxII{I$g8OLg+E!Fh2w56Ismm<tm%JjDt_Y(5MoVEjO+1<8u(@UJTb<<y^
zo0jLc{jsF8?Lb(eds~{>i at q9)bhs_ewEVT3AhArg<&9m(vQxSlwbD&XQ(L+jWJ@;}
znqruAvnOxS*1EXo)vFiAU17FvN<`WUt1UKdt&P1vXiHyH2^^^e<d_~Ui at OUNv3zj)
z3jGe*pisJrk=A$7tw^Blu(>0;q?_?oQGTP{7a#@Ljh5+__hn7vTEMf25+vztzbF30
z>R98F|7|oC?6l>88x3<;THEiarF7Q5xGkNvCvHn;Ehx|_4;*5lz&oZ`9 at rw<mevM$
z6?g}CwN#Eeua%|0ZE0<)D`vq;E1hmzX``KRM4fO%9XRYmF?5;M at V^WS3hjZl{B4H^
z)=<;31ZU8ePCGPfEAC#<TC!cZ;CA7H+l6+wt=-lRub$<Y+S2YAyj`&LmpLoyH0 at Cb
zj+kt(pyi?<QTiQBly;}-lzOM>lzzu_vMykZQs#~oT>8<`vXRswusYIkJDrX++zjeS
z!##x^J6{E?9Xa2K>N`?#GoVvM+${7G!5yi1ip6jSNdh`j at c=0mw^Veb;x<Ped0)>+
zM=GA`z!G)Ra7#}|8t!3t?0qHe9cg%~(@^9CJ6=MIeH|@5Qyn<W(vCFT)}eN;V;$Gh
zz9S8HZAThzAK0<?mGlsRWailWMqR-$Yq<2FBMr9?>`23HF*?$4+mVjEuVbu^d~YyY
z+Pu)vRM at +EOwwRm2Pl*d2j}cxJsHyB;F8zK()ErsI7TX;8zYtern+ME(%)1EmS|_6
zYtGr at nsZ(@%aU~>de-QqyIyD#o&!bh01BnOZ8?sPwAWEtN7~zu-e8H6v^Pc~?X^Se
z$miOjbsRrSygT7?F-0A_T-of77tM019Y at a#t^)_=ggWVIK(>Q4k0OSJekhcSv^(rX
z6su7=4`m9aLP0}hqJ%{X)D;$zq<j^JyV9Rj(mYBAx^k5WtxDz%de)U9^^|nO4+2H>
zckL=0 at USaIN|1#^`bZK{n$(eX>PnOBa#^!er||(oEnV_RT+%E at 9ayXZUFTv<t5Zap
z(XKot5eX$nu~Pc3^++D6Yfm}vI&j!EcjYNl2^=m#p)@J*$yYj1=-OAdF%Mnok!7iC
zJyNo#8&NFW?AlXGs=8jeDz5K(<r*chbULn+BuN{)(xX(;EGuEzwH~=-PbrD(DzasI
z%|mIIb+0S!Vv(lrjKxXAuJjC>tUB|{y at kbeN%vC8v!bt#Y|TTjT<1lXG|y|(t~Adf
zVpp1%>NF=E&9XGFBPZMS%2jd(52brCqh7nJme`Uy=a0Q|jgqiL2`n)tuUt)ybPuIe
zU(Jc-%h9gq)_zltoMj4Q*UF-6zbUuFa)utBF=<}Np)@Z=5nbtCV3zLnrAZ_<WcsxP
z>q`0heKEq>=6Q*GxK7pCaV}_ at rH~7rAm^)$P=3=%lCJYrhT?pc70G^cK~pBb+4BJ8
zH`~T5zex;cCdzX*trpHa%dd8&_N-G>0*hNBq10I!>^WtgyHa{$LY2fEDQ?fp)F?r9
zsuMhgh&?HIDgm!4Me0exo1(QRWwk*>V<mFnAp35&rzB at jF3z<*J2B-Jdse<E6<F-V
zj8AIjkgO-=3fN8y8J?6Y>ZDw$r0I*VP}pt=ha6H{{OC!Mn&L3AD3FC03av`sG>|IA
zSeyisGW3chP|t2E>VRzp?-ePap2N!pRHY}O(|9Fv`d0$yf1%R<GE)Bwt^OBi{ufU2
zFBD10Tm!xSH$jwi>2JxF|4k4jSN=OeluY^WfY_5f`R at czvgE%LJV}xMmJIQ)_Dm8)
zNszxJh>{-vogm6x`0oT!lEmK&k|X~c5Xls!zXRTa9E86IyahQ2{~hqinaee}CP9=_
z(BG0W|C=C6zWjHBsF2EkCx~(b{yV{w3(((^LI0cJ$@u&4fTyf|f~Ww>UlK%_eE*#w
zN+R{Q<k9~oh%$TnTP8~XYF3&u=nK;HD2elyR}4gw$iAJdWVml9t5WS;UmUbs?^_F{
zqkVCa<|+XZvxEuii<O-&qT3e>7qpP>J2sUC?u&g3@*90AsZBy(EDX?&Orr+??brH_
zOtk{&i<OSF`tqn=-uJ!sR89;M#ZpI8eXF&ix4wO<l&>$f4lH79Y}56N#86+l-jnm~
zJ252V&aN;31-x&UsxYE2UH5{O1vo^=HufEm%7OHYbWq<*PHjf?rT+^(>v~@nz>Cwq
zEr3as{>Lt!^uH^+)we4(kL^gcWavx(gJE8N$_4hV|ItHi*X;J4B9cWXS^%CbM&CiK
z;mJ-A`%)JntRQ={N$p^wTxno&61XX99K<ST(3ec%i&bJI#7`=L#UVpqjx_Mek>YLn
zYDc=Dc3y&-OHLappzAw`wKzyh1D;dBmMS|^xyrt5T2Iyu3cUnX_|}(Y3tH_;O^sct
z$Lt_B>X`6_=pil{v%F_7>ck}lBYoMo1ue1rvT#u+ at 7a|f?aRsq6njru?7ml>mKCo$
z6A$e_wP^3le>$A)%jShZ+kYx#=v(^~p7p)%G;d`2dd4T)M}*DR&Aj7OA*2Y69r2Uh
zSWTrmQH090&nmsL7Emh)sR1m=MR8g=19pn$rCpADDT*Vanj*x8hEN7!Pi&+ at 2m`k?
zEH$=@ML+9UDuS at 5Ac$@t>?u5<2s$r-DS85;R<oPBNrV(0U`;%`QPl9HEFxKY7yD|&
zL84P~LAA7+42a8MwBk}NjG9x5V8nX4D2$3dsP&{X!OCV)E2*WZ at yQZV)QqGe_`0%f
z)LNztK}u-5L at n6Zwl+HHVOKarv{W%sBwb8JuP1{zY2$))jNNk(!k;LEF*g=Q$r>%n
z at mV8fnW!x%P&#SbM6Kp8hU%rIA~#Y>8lU${=bg@#m7^AHUM-1a>1LzRCbUups#5kG
znmQ>cI^Y(<7(<bQrs<T1vH@@MoF)oE@=8<jEJvrrQt1sv5IUBo2)<5mK*3125p6-|
zMIQ}7hrxF@&~@5LIIOrb%7_I+OgwPlD^o_T at WpIOd3!RM)PgU!6}}+IS)&9@!_)eZ
zw!#-$Wd)Y`YRpT6lWv3xM=jXA$e;n(SPZ$XvB6leSz&NLCPmRqE()Jk9W)R-%`CKE
zLlwW#%S;8LA{o&<A<gO*MR8LhH?`tsDr$7iXdrHy$Bd~2rqO8`gDyz{&10X*a1n}q
zEF+8!hY_GnaX7W&rhGg_jW5WweKF_bY=*gsmV(5F#HTY at p{ZLK5>qTg!g^k{a+D$V
z4XJ9U;|3DWu1qJHHLy9wN>N<XQir12D&;GRz2=H~Nulehm11j)fuis!@k3D at GUppk
zZ}<#?4+S`>P6HsvNfsXfNVS$L`6>nnZ426WRz8-tsR-QA<c8%ch?iSnj532h2(X~x
ziDZcu2UaAr4apWEfs5j at O=Tl;kY<5oD8$!${~e2D!x<C{syF|=EC!@TZO!*qe at JIj
zp&VKzI=tJzppb(ifP3vIA}+ykZ|<jBIUY|nG{;F4nQ4l&PKMAs_o1szI}?RtOf~}y
zHhQBzSmT}g7)jF(B5*smVbSpxd<bPzjv&l++JqPPy$hdfE%#B&Kq6&I3#nP;diaA0
z2;<$fcv(%F@&qAt-j5IE at rHb^MPPERSQj?mTk>hBas at X3e3GWgLQw==V!2~7t(`e#
zBy={xu`wS*l^@8pl26r&%|&*RqU6iQswqd1h>O at vdeSU1j1(=mu9YJQDT*z63rSOs
zAUs9WX+|q3tNXH6{7khH411NPoItJ>GwqC;(!XvOnH9y>Kl at E@*N4?<O8>%pG^KyG
zajbWN?Ac+#O9L|8tPIIKBwN&L%k%ow5k>J>!>0%psi+W^wYF--Dkse-LVPMppV<0S
z1KDck$3?pNTodb0QmBAaFhP-yuBQmTTm&DRhHk*9bCFTEBwDP;;c+g4FS<pxUjaJ}
zG$g4qMPtL<Q3M-Xf-ZuMy-F8_O_>`S7+cf|n;Jl|^ZyBnlrje89e at N*w%RFL+Lria
ztJz`|<j8}YcyW_GSk+3HtZ*n5_!0{F*+h{1Y%aphM6v8)8on2vTEX=?UU_PhOB5?i
z&ftV3MlFko61z3{n(`w(POKHRn!VJ(vnSt41MoG1v6{PF)aax)G?1*wu~7tDE`p7{
zQ`dTQ!sa}4kmE#i<}vb>$LC~oOU{GV;NzH+i{J~+JKvmPXmmO!M_Wyqg72Qw%)xo*
znOkz()Cxr^iiN2N3ijCDKtr-rM2^plb&}6JIi!Dp;CK}tlT>7=7D#9MTu&`9axHAh
zwPH(Z3tMa;XbZ&-cStBP2|jc~kx58xH3_-4#HLBewIw!9Lar^b$x*ph6g%5*Dx3|p
zZ6=2WKHFQ09-k)N3Bg<ozT6gkxz?kLw%|*(3TzxE^qe$wPMV_NS_YjojM4R^DmKD2
z at HjLH&Lz4QihJ^P_JI^N66;M*t}fL&F%h*|H|1LKE!CQDhOFd-mpZ+k)=i;#&ObWP
zpjL1dXkcg=N2+yxKh<g+HfcR4CQ>bMeb7b}D>;!Md%Mh%<@98(WgO{9v%F%eb$%k+
zYJHSz!57OF)>#ZBj4T$pQVqUb&5RVSVO*{@<7CyavIUF6FNT4`YL)e7om<P;Cx+TD
z+5}*=idrvv6vdL(6a>4Ao)<l-RuEFHm}Fy!@C!n8gXCOW2rY^Mn-ypQ7mB?>(sQyk
z?Pu}__;S4_C0fhZ<y!FNTJYss;j at MV0-?3hVxdyjf-lv|wx+gH>Rc-bHhVqAn%+zS
zfG1V9uIC&?j9E&ZLW`a=u&K4wI>B%rKeYy*ciU)N^4Mza#5OAcy4hy;tk$Wvm{X at _
z0|IBta$B at N!(H$i#t at vQb<U18hDK*^>13^I5oM0ul=X}c(UMJGke&68P;Wuno~tAM
zDCJp at x);?<Np8&mi)wJ@>JVGQmcHj|34wxX;Av8<97JJ7t at J(DnxROP$kqZU4M!U9
zWG1y5q;^&*Y6=xgQ`8Vst)?*53SZR94g}8^WCvmb*%2<tlpRRelqPW!q(^F&S_{{L
zGavRO3r;<1xk<ha2nD01+TmeXqon#Csob&_$Z4{qez`5<$h8_rKvr0qYc-Cjbyyly
zIBl3}OKc8HQ?0Ps^*g~GmYuVEsa8C8V5)eYqVT2G#^+ieIf+_ at HVKA9o8YlS8(WD5
zdDXDX3l42kEmSz at M!6Vsn2`kqHo2BDr&=pXbhDCJp(05xC4u6;q&6lpQs!13=gd>B
zmdMT(vqMtMY2Om07 at k^j-fH5Ec5W-qr&>u+YO66vt-XLvr&H8ULie1b&P7oc4eSL}
z6vdL3Trb*E6KKoDLMoiBj!Ew;a9_~TO&~y9E_#;a2A#0(DM^Z%kv3T>oU+bEuyMk}
z4aA951Y0hO6R8$#E{bBsv#H*$!A99>YD8b)<Qm9$8MFkBWpR{&tyHYr0Gwot)YG|X
z&M3HODRNOuo>c3ULo|rQS2PgSsa8~{qNq+qsP_J at sE*BENo`+J%K|&fAY>_RmPu|&
zy%@LzmxO}(C&?v?WV$7~lufr>hqLDxYOv-aSaT6h<svw95tOMY*O7}L%tg(NQcR-T
zN$j9i5n)7{eYp;w$D;xG*tXWdq!m3!D-4_37?$HfCF=1U;IlGOl-x;!D1t8+8D1`e
zEf>L-i@>#J(v5K}h+DWJb55$MjX(Ja*7M9cWniNbE&`kV3KvDQ1c3(7oQtA4)dD*e
zBhBHqj{Ty6^*9wxb2Na^1s%S?9RfG<F_bmQB%D<*`_3MXi_qr%2oWs{?>{Iq@>~?a
z;GK7&QW4m>R{Th{;ztxC`(f5dzZZ097GDfLQdK5T&VaHR<Mp`KrZfRxU#lC6l3wNC
zD1wi at 8W+W*upQKkOZo%n&J0*7DS|N<!DwZm7KFK&<(69TS?VZyPAm{b`h(hXP9ptb
zf~@y3RQZ`SYNr%~90z}?X!(RlaoHPEsXmW{+HxFDbVLJbeHvXP8cmxM9WrJFE}AFV
zK#H2DR0Lm7%U^2Yn{6OPu-WiY1Y0Uf;}cV)@VS_|CW at u-xgLDE2)<kdUoL_#7r|%S
z0|fB(<wc39q$jpKltCDlhq5Ijbjj;*TOR7c7?y`JD8uql24`ZrbUqis>7wYC)<?aQ
z-nm%J79m>MppbpEgj(eni2B4+OC81>+#$K>l*^J_r at e7SE^3sPT&KN5a-H at L$;BY#
z=>$?)1YeftNPBzoNk5lO3PFincQkN_XgPqPc|s!to at zl7(@fH^ENbGkH%j=biAzOI
zTq=Ss7a3A2DnN{xg$t<&mpPzX)`KKBDWszztHDma at Wt+#Q7dN(Q)Pvmlh-Di%C;L?
z(NYweAjvz}sVHeoMev2{He at w&5q!DGpi)uR!9~$5`;hA)-!U1rK+Z*tL|IB|H4^0=
zDV98vQAkwCD5Ro{LfCBISIk9CyA5?iu|O`CC}b)UHlF}XZNcWYqS(6<3b`nP&(YU{
z_ar!|pjw%V1#O*B1RrsrizTzXGZuXF&R8lk4hH77z)eLNg<J$!E&?nUA)a_g-Q at Ru
zLW81aI(FFk1M+=JgQAdxMmZA{sAUNf-=zGx2oluQ)JyksHCT#jO|U|4)=MBE^X;Mp
zN)Z>e;*hpqaMPN0<zOkoA^vs|d_Z#%d=%iZ_b;LjWKjT96u=V&u=ox;&B2n2a{fW6
zFC`{In at aZNYBdfz9CW9Pw17<)X|+Akvd#9bL9d!w;n6M8ENx(q39BwzwS4l*jbgzi
zr`*E=Matbyo_8gX2N!u)LQ6Z%TY3A6B3M$bMv{vl%tf%}BK*olb<=S^mWgFInWEG{
z5sHgY>|0g2zNA8Hja&<}a}mDeB7Dikl1%$#tAp<aY2R98Sn{=%ND(?i27GV9Yo7%!
z&?2F>);`!DLg};n&UP)d<&tbNA=wAVeV3LZL&-%T=OP2iMFx_KQUiNpVvw at PKyobu
zNky5vTm*G4me{;x*6ts1CbhnoNf8=y5gJ?+#qy9*PY{fR=<p!hx*+K)c&7-GT!aem
zmykfzsI_%Tu|VS7VQ7>Sh9SOA7;>CfZJip_!iJ)$kSsVcm}qdo=m5 at HJ?@38fr333
zq1dMnb3GL2q7=i1t>;q at +R>yf6tg06Su>fi*z^S!ZM;S;!FgF^c)2!nYk|Nn*Lu0u
zb6oC~m|s6wU at lNe+tGAN2*HBnzVPMx0-sk`&V(%ZL{G8-UKRyz0-!voSkicWUa>@D
zj=@25qpcM?<&1?Q9gUEczQnA7r{u&NLotsy-X<~A<{)c#O{Ipy8GWFUR}|6w;d*ss
z8I$TMB1djQQM01f6hV at Unv+xul3YZVb5T+h4J2l{SYmTZJT)k>d8a?sme_nwPqm_0
z%c2af#OK}L=;-(-6-#^);M7f)HW$m$$>ikPa&+D)PQXfRS~jJ&PLxLj#Xq?gZ05Wu
zmOjKZ_%wVjYRWu0*rT#oOj%c<P;LOeRJ3J?ZZiG37JQu5)-1^~<RYWX4N7cUK5^Z|
zZNZj{d32&!8kI)k6iJLPWXPgmKch8r-v{K`dvvknroy8PLHJSw;Y-Dg4+teTr|ANl
zj}fIJqf6bKrV9w(JyruzY-g5Qm-w8fORY<MQs6|J%tbDivuA%1z~nEmT^gMtCEtIc
z$mnt{*m9B4<s#T}5p1dG_({M-v6fZ2p7G^kiO**}0=0vwRMhB{K>&idnTi at +9|uk?
z_`I;dP%*k(l&omULM_<5r%VxSxya~pk<sO19-S!mf-0y`5+(6XQB at RUQ_XzyrdqDm
z?8#n&AABK at oQExog>2e8<pzu{7Yl5h^((NIcE#?C6_rHOdu{Fq$=+>CKxA5Su|z1-
z60G-LTP_yU=e at R6TN;+|j4{&EuyAMrV2VKdJuR$q5p4Ef)PgM+8D3(L&jKs;EQ&qr
z`hy}JaW^iC%v6+=rJ~4;qBl+DsyS&2zkAB1P=ugd6hWzN3D?WzR9nLJ?n<ha^t$Ln
z<GGk2K(V(Ia(w|~p%@emN*J=1sjaMKE<$Eoi at QF@6tP}%+7vSqipB7W;L5fPzvYv_
z3krz2r^&GtPLfh>J!L^IB)Kem!4l8v$0x6@<ZD$1zI`Su^f)Af(^MH`mKl`+Ta-bU
z%Y_4=P2mAl)-*^&RMtG?GGw?fhv^)R%05xnY<pFpGPt75EoO~f>w+$2=t&!D`ioZn
zOJyh`MS<+`hpZ?_(;u*a?ZWr~O&lqw%sDP-VpJWy4L00cU%cQa%(gc-qqMob!wYBC
zhwa|22J44gleJXL`OD~Fduw}duruC%_i&L_5Qo#BseR>hwSS9Wc{`o7v%mj$W991d
z&AZE|gF5vKVclci|07iBb>D<+R^I=cN1*@x`+ui0^f&RtxpVdU^EdC+Z!F)vyL_kq
z{PNA^J4-j}x9?qHzUyhuYii~Hyfi!*Z;$rsycIcHzdl?$I2s&0(z{6gTCIL{wEqa*
zxPMrmxq4BRvN?RJUq2WQ>vu<+hYtq_!}|5n(cZ at 35HPd#mA&=3njv at k_0{3-{?4#|
zduOmdoUPwI+CCiW5s}&YmC^W6tzTTK*XKDU)VS2(3R}H?@9t8qzWiW#@MyF*tZ$F&
z`@@6X?Zd<2M*VP9Ux%FfU~i+ou{}OK*j_sV9BtP?y{nHrZCR_2HtUD?>B%F5!@cpa
zzA;)q+T}sR**fj(>-PtH==xTD`%vKbMu+vm&d%uJaAU4kd)uly^8bhThxN_vgYjYg
zV7N0Jj6n|`^U2_c^&7)6Z)Vn?zkOq_USAQAvFJP6JA{NmKo}pbuhVRF5Ht;ATKov-
zqx$WmH7Km#2r6d__*m5Y*tB8IL}aXcN4smFW0L0HUSsk+d$$jUgWa{AArn<!h2k{g
zaeWh%yKuNZ&NHN0;*H1ct-avn;o$XQeeiJbsQzelbWq!5IyXkU;_>*t+KS0$6_aqt
z2(LV1aC?UbgE4#*cO+rY5BG)#gPk;#S{ll at E&$tmhr_*%K(>WQ4fuO#Wc9}&Ga&`l
zmo7oit|%QJ0a9p-0WnE}<DoKvP&uya71J@(C~ojQu_Nfs^EE+o$^F6p{tnV(28?!x
zwekLNeH*xs64wTjzykUHVEy&M)^H4gkM_6M-L80C_0pvfk=kiGV&;w*%|U%|ba;Ps
zFs?tmKLXME_6DOIX&k}zS4T&+^}$}M;L|9C_ at Owm1p$ZRXp&Tfe(&}AI?UfZ65)fj
z5%T`<{!o}|6Domth?%2<4ZI%OJ~@$@D_IfNhUnix4UK~fTaO9~_ZY~d`u^bHaC`k|
zhbLFpQ4|QYx?oX+V)(B8oxz?>!??aSMA1AyFC*f0jbeW|cwO4zxy<~X)h7uNLm3_%
zNL%4b78_c_pxK&KcmDwOK|F6Ap^8(dHl(pC`c;7%9M;6Z`-2A|UKt1IDkdf@%Ly{;
zGf7JhwuUvSoOz54K7gqD_NM3NArJ3fe1=bhn5%=~`fwX;W7LjTdX$xUfOUKIt>Ix!
zRw;EvV~~PMSG7qxDb{9gS)3#?m_N)7WE#p|eQ)?M__}{E+Bz8Qj-PSUf|O8G2;Y^O
zW&(v}V}!g60V$c<N-8yi+oQwby2o))w_6x{s`fA*njv%c0I6hF<P2m588#T!wl``8
zLnZKH at DS+{_XAbH6EFBS7{4B$ut!G+2eKp<+3~Oz?U?gbQ#gqZGc(>nN(EzmcyKt_
z-b0AS`_Qtzw!O1`C>@6$&w65XL6>GjE+kv)(C9}ZDK*_4ZESBol5Wb#T<62^T?2Wz
z+1%nuz~EOXWSto~+#c6}0X_9WeRBvDv16C_i|bpG5zR94vJFwV75S;Cl0#0sMNzg8
zUX2HqyqddD%D8$x!VJoMWcdSUk~zZ+ajZ!kfwK}KxFdrShRSmKaQpDSTPMy`=tVRh
zV7&k!b}#{>wRcEV6pDMcC&x02^a2Ut5NW0aM=Nyvy<0nus6N=l0!hAP3ql79sCk;C
zjEoKfnCQJNlz@>eQCTo`e1G)N2=qUaZeojZPy!LJ at 5R^cEZbqJ(5sVTUpIw=`r*UT
zrSai#zrKr=9c?^apJ`l_ at lv1?aTAzo1-nGzOw%n!o0zsF{#9S~@c#DteNX?`Uw4LE
zgPoeAAYMk6RgExcwrZe&dzlGM;t5K8pPu at D6wa{J+~EM=g^Z34tiBIrX#i`X!2l`x
zs;?9FNae7Qz>`B)uv919lPiB at p%o$<?u-q769!osDn!t=X41AX6KjuP`0h~A-EfCF
z5KHz4#8Mk|#e?cr5qW0pXlKJy0~v_R!$M|kvrUwR2rZ2 at Tn?lrM6CE)3y*tY43_<)
zLpvrW6U~x4S%V(tWnIo5LYa7?D at 4SocO3_>4Qqrp2cwOn^=M at Mz(jtbEP at u1JE&S=
zoA)tB(%t=$#;O>K$H~R+`^0YMx<)*F7xAouJ{fO0RdW^eGTTV;%R^`!qkEI#5C8;n
zcVAu5W`<B3ntrSY5kR($=Bk4unKn#~0;dFB;~cHYP)fB1wcJPcCk0TnCo~)|O&Ux6
z{%8kl3{|U=3yc?b3z6T(#A3KCF%cKIb%qf*U|CqZ9M?vul*Kh{A1oH1%o1ii8y!V8
zCS8GQ1ObX4*0(n$R~Y(gh-1NjQ6aDb)jS<Y=HB|w5mC>Ur7+>e=JRC?D<Lapm07_w
z=kN#+)1wP>p{l-`O)tK at Jg80YHCwNQo7qi8hysf@s#KvKHQ>L~D<_-}MniMp84<3M
z#;MUy$PQCK8UJYxGTzW#xjk42I5}DjhL>GXvS*WvaRWxRDQ)&fdzY%B6mfz>JA@^K
zS8Np!MwLuvvK6HxL?H+u9YaIbk)D6A4PqIRSs~}eU=j5-G)$pI_R$z%qmY$E;vG+h
zAV*{29UZ(5$B8!%wja<L!A??Fn2geXtyXw?%It}hko&|XT*wh-HS=n;2O$IuG^;UJ
z+t|)3;hS2i=)da+tcDM^2ckx7M65%pinV1-X>D?)SRma+^XfZ;ca?xNtpydL62yd;
zV!Vtv-%6)|NfFN{l*UXxA1kHvr${_Da($p^bNjHiF+yt8+!B+#q!7v0U}Dp#0831%
z`s31iY-kKWucQ$l#S_G09*4y&YcVs4c^e_3fxQL;K`_{OfMp$Qfd(}e&-aIil7*9U
znuA9?VbN<`Q#>pxvCLy644bBLPNVzS;@viF7o%5d2t#>+qymJ5=%(dowuZ&<O7v2{
zq?38|Szq5iAa@~;L12F}=7dO`JmXzw<)wJrxTx4=T`yl2_K_8OiqMfqQWOW`k%sk9
z9A*(UBC^2IdAQ<brXveX=}L(Xn1B2?++rFoZ4TBk1R`)_aIhiqC3auGzs<nGunj>c
zm|xg<q)%xV$xh~T7Es~{f*A(Fyub5E22V>%DY`vzc(5E+v071x$#};6vPJzJqc!DU
zG&b}Q$QvaM0Uui at NehR;`dW)tx`WQf>hKU&K-88N4|vC&Z4ywDBcZS$CNkAXf7c4Z
zl<J#V71>EMKiv~}PN5_P*^mOuCWAfkM!vULWoPVAmzi5j)^=PU?hTkp)(WgI2r$rt
zlsRHv_lF}T;}X9I*bWx1^|jFk5y0kT<^}#-$CwnWo0BAo8FF-F6jMTLdygggF^^Et
zBkhPOouoowNPa*Tz-rQIEVR7yBLbpb%r-MQ#7yz8Y~}-gz6K=^oubF(8{2zF at 2VI5
zYSGVZUE0BG9c{&m<*~D%c~^rR>6b2|2KNuf7qTTIN;nL0BeNJOsaV2D&Ya~d9iJtY
z$hYeKG}_Fr`zc8%2~tF(KsdO8B+6u?woKK*(OyKp*`eA&GQUMceJqqp at Xdl%@a-#{
zmL2nAM_351HjrrSg$<Y1DzLn=ppbu6;1MX+!{Kg at q^}6ZZH&wMj^kPKLO3{DL#Sxa
z0SbXENu!5Dl01Xjc{$+8tWXl+^B(k|9xco;_!zpJo5-f%NO5huHtJY-BF%7Y_UPz$
z5e=nIjxA)xO%(Y6>4BEjHH=~z7v#V)^_qx(V7o&4v*psscCRkqdGT(2>E^Zi)mt~O
zt*oxxx_P&L{nj1+y#4CR&F5$9*H-SX-dVYFPoLcI#aq`_uCH8OQiak9^K+55ypi(O
zOK9*=iR)^#C^ag~O(q;owE at Xy0FBZjQVCl#Yk;93#6lL7hxgJ(vsErqBc#VY*TN9R
zB8kl~t<4Tt?TrT#5lMe?EyWs=CglF%uONnuVN4u~KVIi%B4dsh0L1y|5F<Z-ajv$k
zg=+Gaw#$Q!4VEUd=1l8(mh|UC$?NB{q_74j`y=m#q_T#STw?VKZfzdzrK}XPt>rR1
z76Vu|WQc$zAt8Yo$#KHD2g5yOU2q{)1$Nw?6e8Q)+Dx!phFVM8h%Tic6Bv!|q7X=y
zF|EUO)}J!gg{q#v5vKG!NmQjum8~J*H&vc^g_*^8Dzh&Qs|6J at D{E4`sWX)A09v(_
z)UKMYC57(@@qFUt5EV&No4z0;D6O*MMKEpkwhXXr%W03D!NaE!39O@>HX*_Q$2f2-
zp5-#T)GFlK{s=!86Ss|-PXu7%*04e>`wn6mQMF7=dCVvI>B#<VI9ILZI;<vRv7vx`
z4=M)efd)iMnmvgvrMhNbz}&K^P=X1!l0b+AY<H{{5f0g7Wz!uCggwOlW|6O-uhMgV
z?xNKB{M|Ccdp at mt&8iSn^+ooS-v+)#0%29H8&Oe9>8>hl^U{f}>zWAY at qEp~)0B6s
z=9P`97E%6W#u at NVCj$Ej36x at IYeD?6b0nU!gTUSuyC5t{mGc-L5bbFfX_H)mC&|gZ
z)LxX2S<>v|rO^b3bpm-X+A(q4m|?g|c0+4*BF3Gl2yK~Mn=GNH4<c6^^MxQ09G~W=
zk}FJVseo9Ckcq{-9DEoT<<m*_Icz>U91|rvuowef;;_mvh-noN;Q}HjQmkde^=hP9
zW`PT?BGEG3K*$*&qC#@XeyQfQVHp<CBU6?aie3!DD$I>O!kq0x?QAA>v4Ym*WGjeg
zwlTW<%8TP4lHkYyrD8!J4jA=g4kS<yS#gFLzsOKor~@%_eAZHaDvsF|P?lY+e^RQg
z7_8!K&tLH+$0U=kJ0n+nZ3XlHjk(B8D|BEQ&7{&mDP<S>&BsatJ^{KgF4M|Y at y60A
zwVN~AvKJ_&1eXns?IWT`=+i1vfmPb+5qsIOI~pC0F$$V1O!~oyeI&%3ntkocl4)c7
z&Xp!=Yn4_WK_qvRTNM~av%WLfR*=FR<TU9s_1A}FhtVE{s?fyfhAxZ4wgEDcRTpT=
zT!$E}jZ<n+W2=>*6WY8HF2 at IJEdiyxqvj(#x05eScee2MIo>YNl(6N?O2B&%wp5a|
z{riu`O3Ng52-7HYB?$^#vz7*@*MY)VC^G#0WWi}%FhWzIy(1e|c>Aujk!3?vWA7sp
zsLfJNZ1!S%It@%~`YGa(T~cx#$_7Xj4)0^d0MGAWie6jQs;|pp9U7bFxw1=zIg`7c
zw7&8`ie^uSJoUS2bd4GtuMb#KP6(eR)e+C`aOfikNmbEVWHQC$Ps?%C>w}B7LxEb}
zM<~55gsB+rY$`-yZJ+n{cftvHO6&Eti{&;@WNI{<u at 6%~M6}o_Ce06#Fi1uu38e{e
zN)EPJKsCQHTd_b1P!c`?CWx}tk=jM8M92D6I%2Jttdz$EDGVotdZ?o)F%d~B`5qo@
z`yirG8Hg$Tuc}WXVdJ89vJmURy7vAQ1eoT64cSsv!mJ`_vsjrBM`@Za1&q>E=p7&V
zz<^_E<(~A{WLy}`(|RU=Xc7_~vuV8#d+91)i$B`(A(gxr!Y*OZn)?_CYQ4SpU_>_6
zE8sm#l?B6lH!S)`BZ7&6RyJ$|5KD>N%35_czyxTLG+JCtQtxDne40l{<S!-2fh;^J
zIbsruF_8q)E=sJ#mBo;Nu$-3$>U;xYf|d7j0#*hYxV!zM18<ES40pX$QOJVAlIu@%
zICCAHEAkM`Ws2f$>T~>~Q7QtG*Brl-(<UVG`0>{<8~ee1{BJ^Jk%o^9oy;s2U+INQ
z4r<V}lU~)7R;D*%1O&$W9(Rv0&SBM>+I=KX&nhLRUdGzmT*}6!LTrj*FuIU02Ti1#
zEXT!XuUZ8KnG3@@*m*i-mnWp|_`HP)%<M2BVoAwAi%m at 0G}bAIT}?ae9+g(2h$@5e
z2 at vUip+{C^33B9e;L!?)5EPrRIiodBJ#i`Rt)t}8C1SN$O~C$QA)gd89E|p<8GfW?
zfu<OO?ID&R$7W0-H`a1aHc1GiF3NoGVl^K~C at D+!OZOOZstC+$SCSyw*N7!|8mD$X
z3i7R&vWS)FMF^zElc-_Bl{kN6H7$=nuuO(`&Q%s*>8*vfj7;KTTEjzW)ps2W149K1
zQqsan;KR;(jwLyv at W+<t5fCd`qQz>N;)}FUS}8>%WP1260#t|fz|R{SMiV@=zm>Jo
z%3U)deUIZoOx>1NVM?(vLORtSDjd)jy`=1jnPCOOSjBpgujNJ#Y^lyVCN)=(l at 6cC
zL?a4^B(Ze>BJbPF8d$s(?*gaPb<~S?&yY0-Ny^M8RA4zA)mW7uM79hf(gwavORQr=
z*>Pr97Qz_EoO&Sr9r8CV;$X}x7~PF<`m;o<sKH>1bk9~SEhPnTLczJmA+AgVRGyQ_
zj%-E&imZQCX!7)@Mi=$>p#EUAgU69ACX_fFc~gMi6XT0GIx?OnBF<vLh6;7D^cQcu
zh|&yKHOzLrRmOE#F-=f1B=pKs>4`6Qh{!EZ=FIc?LWG0d at PJj;BqBrg$%$Ai#`j{a
zCd194Bb{v0zJzqx>M_`XfZ}WoqeS8#7n&=-9~oJOtUY#xxeQ1QcntM<{aHQe$*Q^>
z$>ah6YG)j~aEJ@|s8SsMP{fe`Xr>XKWusc2P(0^Q$3*ZT+Zvnbk77_6cqWaFOtDJG
z59Th`>(|0OMz}%97jlq-`7pNFlElS`>2K*=gC!z28<R!Ux?5tXgHADD*#>Nr5iu3=
z8 at Sn^O96V?hdL9V!#Qdu9Y3-R$5W at hq*z7BMpd*o^woqVH-wiGRtxZ|d`4Q?P{LUg
zqF~9OJ+nucyo|_}ToMuI`;-tZ1X0EfniP8Lcn7Qj5iq4-MMlR++ojgz^+~Cp;YO;8
z56GN7JE&DghMp)Ih?x0q4p%OU|LK%gP^ma8Cnddds!a*AQ~z<jVI$wvF;lGFl*P`v
z!U_dJnD)H<gdZtSwLW5+buiC|F?O|SxHr6nkKc%Rp-i61L6Od`WoK4cD7^pK36#yN
zC408cR={YNtt3JThh0cnxtx+iIH)XTP{RUc@~~C5F>@9goukq53@<l*?mG(vTWdZ)
zQ#s+`M0^TIie8Ey9}ITn_y!XIWLwx|EDwwpagw7510$f|I3Y)2WV;kB6+s(hoCrQj
zSmaoxfW=l>b(K}7(%4FOo<57XP$YsT^9xmpvJ7|T$TUxgy1c1leU6h&N~zY6g$Tz1
ziW~^~>^`gx9y0S#5<XtuuBu(k!x{-)jtL at aoIb=)987G&IZs5QEp{HJ?>;58=P|=~
zwE!B_gv|M+?eQowm;9BLwlWM8WzSS7yyGKTfLJxKWZK!mn568ZS&4ef6*CZErc9;T
zR~#b9=Q<uwZ>eZ$1hsW<17rJ at bSbnu+ni~qVhWQ|Iq6Z%S(=^{#}`Aq$X118Dn<aN
zsYK at edNFks`Kge at piB1T^k`lS73|2StE&SC1br!Tkn$c^P_J4`1QREdrtLQ7`Ib45
zK4Sqm{U7U*0rxR*SDe#Dn!*`DZ`H`B-Vu#gZG%YD{8}jTp^U0&o+2&B^s&%0+vt$E
zxmuaKrAFLS?v{VCsO<J4Uo70Y>%r;^2ak8LG6fm2nyPAqHa0|MF$}1#_7IB5JC*Lq
zQwTG#;o3Y*Swm6c^hl;hJ}qrPLsDL4GqdauS-vr at o-2f=a$-29!TE8HFEAI%Luy^e
zF<T-bR%zP0<DB`?`k}VrcLq3Ntxj?2VLCZu9?O#PuChn?mxED!kBaR*6pC%-Voz{J
z3kB67+H4SMse*sR7;hckN4nuptf3H)99RayHHn3If3ycPeDqxr*6}4z<l1AE<1 at YR
zqpE#2FpBz?3oZ3#Kt7pi%TSdq at 6sGo$DG~83^3?e+{@Y=^Znh}p}HlVBd{Y^d2G6?
zgyqo|(&5N?@aVWtsnRwf_ow^ldUvk2gw3xgDpuRxK?dAL${OOt>9m2&vg;X~Wzr;U
z3<<tUB;wHF2KktE?cx>@NE$~H=?GD~IH_bJ*N2h5MvkQuMYxlax at qvN7ku4I=Mfc-
zTAikwy{uN}Pm%x*Jflt$CkIm<{jsUdU_z=3d#5NcWm9sr=5rqS5=dove1F7x=6Et%
zBSVo$%z4#+IC;_|c`tK5&t!y5KGipR7#EVHY!Rs|9l)KsVFW+6$HO)5CutI`-H|AY
z{Ak$XSM&1A7aicjL>4+&Rc^pkDe`z3Kq2c=J#9FmuBex&%1tuQT&Wz7lvl!0x)@9t
z{j-ay+ at MJ5&*_^g=qZLvTojXP8%K`%LW~t6GCc%kkEFnPLp&{sDhtoFxhyc1jq_-i
z>}g?>>w{hG;?Q*ROw=IOpS~{`q8^G9M=)iKMWh!G$D at mUR^Jk>D<@>WIF+yM6Z*g?
zIK$naa!X<<2lR$%=_r(HdRXtQ<Ksg66T>WzXXlKuVMH{pqhL&4o@|ZGRHXA4r>+kS
zqEO_CbqhDM5SWwpZz5O<Q(`E^fD3C_)D$c at G2k-bFbwE-xRa%m(;lqNtL77ubUvjL
z at u!t9n$D;*6to++Y28xVxFRgp0UTDoQ&X`sMbg$#O3Pa{J%Ux_cGF1ZnpV6{wLND6
zHQF$ULfIG>$tQAqdA0;b=G=*6#Hu_wK!(xxf>7B!o@|zjyBK at A%r=fi8YxV#3Xx~b
zdBpV|aV0Sy#FS at Aivd*7hTroZ**%#8tkZU6-+k+~IBrf#PJ`GU?^;470Me^G*G5(H
zWvK*H_QR^^j*GdYOF^D>=8sbabxyL#;w!CRs%CKn0^g!#u=eIqLuEmW$U}#!HGK9t
z5RW(_X)x8`TOdX4PHYPn8Gi*d$sm-|9`1xYNd{x)r!5 at 0CcHy-ou?l-On9V32BK-V
zETm%|W`t$jJJHDcgnShVr`W0S>RSg*E at _~wX_W=aj4x7Oh0ui=0;bpCYUi*L#$K$S
zX0XVOro^z9-elwkJKGV$a!Nq6qATB0H4fm_ACWR6mV|S~ojk9)Jw%Trtrmj*i5n at E
z?V;`f7R1J|93*}vHr-hS>!fqy9QrJf>$<pt#-#nTu<1xt;r4MdX`HdgS^ba$HnWCK
zPs&bcz^7&?;+ooHGZQf^51<@;UP7ViN`7ciWv(KTKD=0eiI9N{mBn<LsZLcU9Y}{e
z2<xk=!j6onE|I`d!;mxc#jvbHRv`O$gAORhe_gXswezujONkSUgRdEh^wNTd9#faY
z501*od1hy>6o$8n6^9(LC8}-bl>Q)Fz)@c!6$F5LRuTHe+)k{9%`qSHDpvmpIL0d0
zc7)3*NS#$up~3}Z6iZpi0+ at X6UvY7TKKu1x7f0Oo*q`-!vD%H(MfvDmazZdmS8v$R
zf%si+Fy^$&?%*AaM!Jf*(+=TGvd?U<ygoeG8}5XOAzU8qvGovPQ`i`dJ**ht()mS=
zs5DP9mnh%So)=`E;sRB%C{1w*sW0=R?Cp8RX=&wsU&(K2mwhN|QO%IaOC1b0xV0R{
ziM at P19Z_C}(^+Xqk8HOL<H7duP}~UP7g;wTr`^NM)EbLXSuun{<2pWSd}?HuknK!>
z!pArvC|SnAGkZFP&N=-^bd at K?lLx{yadTXoMa<fSL>D?yS*yi at r&nf{BYRjli#VcC
z3`o)Pl)a=Z{bU)q1+w<&QXHgH=12FpFxeSkL7XKf7?{4*(%A+flZ=*8IfOGqDJl>7
zDaA7-3~27v*GA4OO<Uv?Te3y>l)=?>*g)oeHH%K>sFXKLsyUlSQ=u3FJsK^b<9;rC
zjp_U!5>lQ!^9BKe0U$-yTv&U2WSz%Vu+W^Fuzz7oMZfJ}9)nQis8UK(Kne&*;UxcU
z`HKlh8dt^kQ{!lZk7Z*p$H<Go+TJahb`BvuuUix_V#>l!WEQk#)+T<#;qbxM)SP9D
zyvY<nEQhN(^J^2n$!gNb4IsW)MNX{7X{ACRWqK+Ml2OYuZa*d7dMpd2ri6 at Y8!BRM
zf^xs%B2zKTY;k*CjOKJtB_XMdVKFJmbSvJ6RKhzQLM((OCrV1uXG+MA)O3Mimu=HR
z-ZUnKd1s)cqWV?wP{QiLXgkTP<30}kvni6VVrrgs*D~I0Nv|%XJW^FVA+hjMnk^}_
z76JCch4+S7KFsR11MjM1)9vMC<4z76Hj=XvyYs^w+{sTi85^G|^O^k|Q##L(35e4~
zvWLDjjI41yOPA<8rTv)Fw7ZcVfwvTp5Ar`!(2DuNqLHB~LJJw>^pMV^ljeh#%yF-s
ztvz`|^(s$RXx`F#4X0VyBrOw48G%R2RUF$>(3Q1STM!fkBSt_#)QIfd=V6O<U!A0?
zGI_$89MP2V1e|<;Y3)(ue!OC+%B==crAj9Y<i{qArdniIK$295(KH=|OHcg-esMmu
zt7NNK0g-ww0L}H$*y0q9YLM at ID$;APw5qAzQi4K=3VuTFgrf05lyVn>J9QXy<%T@@
z4X)Yva)}pVqL>Zw at -?Y9I%Ks+%HxR+J?B$Vp(OnZ-IDMY!7z%DUMq+%kXxv9NlnG5
zlq0RqigvaA%m$sIMDE2|y-EHt<F7JKMM2W3Z9+9Iewob8qXW7r7_Ge7l9rprsJQ+{
zNEOFol93J_))OYI?l;&U(G`lhny{2wm0n$mO?=MaU}M)MRi!rSb|orPIoB!s$vl=~
z65&dN^W!U<NQ!ugV8l*-2$d=rM*ST}8(Y3DB|&AgvOG%@?-p>_VpD0lxKc$U=rI$*
zC&uZr`iwZ_TON!HuBJB+w#Vb6;rQY#fo>s{8foy- at +DCs6BUsd0}HBrp&r7EyIkmf
zVaB-)q;Rwh{yeu86lQnH46jgFU-%3LXO&3GhFvPwSf}?z2uN9q$P`nSVulimvy3+O
zkhOQTd$hx)-eDY*rx(Y%IT#;2)mDf0!!%E5f4s6Lk&{RTH!*qKG;s2w?3Q*>PD~=;
zx$6?bS)r<`ig1ZJWenGuwBj@<wvICo7 at NIAg215Tp&ty<EZXdna2Y+~h|i;Vsi30k
zl|V3ueHcS+miVy)JF%p}%#hEW7n=zXAv?!sZ7q-|@I6z;5ks^k^6pi7U`@inCRt{$
zL-`_CUCu8iOU+orv1N~iK46=?JiO*fF8Fhje9Rj&tT~w2LkIjgo%x`6e+UB35If_+
zFpiicDdy1mwU}2x)a*&qt6r5$=pG+7l?znaq_eOu!7F=%Y=ke>QPDWTsj1AZJpDd5
zs2Jo#2WpZG9l!h@*+<Q+z~%G2Sw%8<q?oDEmWpKEe}&qMGYl(bBavrWzLex*jUI>n
ze7capKAB at i!`j}=(mEbo0^(33TIx1Yg~7^Pc&xh6T%iy*?aL40Q+=6gixiY0s=aTO
z7w7pW<~Xg7<8q&_r0M*O>>NzS%J{y at df{L84-_5fv4DF0MT<h*`F0$oL{M!@k4m7{
zVRiI`qJs$-B|>y-o}GNGqy~GEB5s0ZX}9T0)G=pDHHT2>G*|I at OC>=Y5days==6+s
zYvA3{zGg|t<JRfrjS<Ud)ujjV&~iRfHRc~WC^)pcr$y<w3tBUM8hy-hBGMKrbBYB>
zEUl9_3`6YAGW2M*I;qE`)JNYi5!QLMKORc*l_*+rZ&QySNC9-&_=LC8IOT1RheHvY
zaQy`pR-0mE(sL-+et at jK#l4Ib!I*tFI5~fpUv<IYkWo-Do~}?zR!ZTwe at a_Z?nvCA
zq^lC0gmgu8qNpo0BV7?zXzz?c2zs`hr9;T8c843Bapj7T);gGHrh99sBX9d0=VCv9
zVu+QCmH4&vL{AvvVkonmfr31xS at OJ#JMbV(y;LIZ)L}yK?cOpgdZ+E-qp=((2zc<*
zk3fVr6D4Zsz{(Ddpnt^O1f3<%Ng>{Why%K)ImzyvMMnBHW$7V>2`DkGoPJ%U!F8pR
z at 8(-O*O?(Qg&KjJU%q(8jw%TS`BKk0$3JT+L+%We5Zz$ii0PU<9b3>Hv4D0Mq*nYp
zS96j{uK^a2yud;}ar9iwbmoX_ahRm6i+S%M^_Z>c?NrejSNvtAH^_i(@2Eq%o9zb&
zF?D3@*;!@=umi~Bo_2g4awlM#u{ie0IRj=AWj^9~sba(2A|9=Xn8ibmy^MGm#fRKD
zz?{y+mJeJ^%wJec+aFCJZo!+wwevCzoZy0k2?85%@)dclnU8s*YVqcQ2on)SY+a24
zlX_V%k<3gKqo?Wwsyxk1Fu{g^o+cD0#!lGBIOP5!%g!-}BIwCjgB59ynaN`JKZp9c
ziH_F30V at 2gS%ZV9*d;M3KSNg04js&4y?Wd-X|E~lue at 7+n!w2c?AU|`SE5!2)k<7p
ztR}X8&`&E|h&7B0Z(;G{u}B5;<vJVYDNrnYLg76Nd*%u7te!Rj96LoH3Uq2#o1(nW
z=$#;4`<JR|vxV1civ)e#q>xxb(JkKDl}qzM?yP`FzQQH!u_cV;;MRz<CE})4khesW
z^off;_=W|OXc4HEDFSy;lpd|JjgiYUq|q+t+7lpcbyD`-&4XcbDg~<?9{^m(p3^hK
zH*eKnUb=H<>E`OIx}VtKNavO1t4sIpF4tFISms6PD|eReyjowmn;)0HR=<8{dAWY;
zdj0APOLv}Mo>jX$%W84+RxQKw^B5HXw7O-0%df01-(0QV=1Gl})z#%|^((K|mu}zY
z<?5v?H^8^_GVepYa&`IkYW?LGmT%T?3Hr+`kaKr+N$po|)?dEE8yq*EH#|MTacAZE
z7gp;p+`4gX`HtV|xP0qQ%^mBvm+q{tEZ?o)zH{rPm1~n at I=^%ms?XP7URizN);;hg
zK4@%9H(#y2b>-%@+4?eHd1-t3mD_jp=JvHZ?|!Vj2*JyIT)BDm#=UEP0))puV8AMD
zVqi2|y=BhSQriq&!~p-r<vXzN=IYXwl^ZLouz<%!uCJ`#1ch0*6qH}RcVp>J?e at Jp
zw{P8DM$E)f*tY_|@2uQ?Yn>4!zJATUr2-Jl<#m!5mu_D5JkhCEnMVz`{_3rJfV<1M
zZ$N5gqQ$7?`nBcj%U4%dUSf7>37Wh2UR<uJ-PK!nSIwXsH|jT+uR^cHgSW_ETDfXI
z+*!W8v~ovWx_ax*9YMKuGdv{+v6wsrZuupNz`dJ##JqlI`D^Ymo+*ML7)#G1Y+@!|
zYkA&ZUI95X1cu4UpLG{Ll#~A|Vswj_$X~7dNtRb at a2oLdZSiKyq*TDtQaG2czzrTW
zmm*j`Aq0lh^!UrQr5Bf;U%p!r0 at IY9WamNj+sjv1mTvevqQ_j{fV>({$lPVfnnfxS
zkopqSDUp^OA|B$jR1h>PH?xd at JE>(coil|1)=$b`{l+c$3$$xXt4jjqf3GZqr*>!g
zCdvY50e|)Cy*sFuTBrvCdiNg6wsJEjMFPO5)fZOoTr2d6ily51rIj1^5XD4rmNDqO
z1q%hzvZk4e3Auag`YKwsOgd3AP+z%TyL<2I3rTf_r8;phFcnvpX|{CjB at 6(X7mPs{
z?ye-gp-K>HiI28x+WA0BqWzSod+heyNdH5ETYhHAcOO at sXIpiijmlSLb#D?|MJP<f
zEgPA<WqPQNWq_iuw9^s$S$3uaoy~R3MJ$#aXuR9Sjkbwr*}x<R5z9SXle3PaT^52H
z@;S2Y0GhP^3YBZ}_kK%XXN4;14<!Ke6Yr=w!|-V$r)0gbRF?fvPJ>LugtyMIewl70
zH_V`PkBSWgwte&nTG1+nO))xF7Wqxhsqa<t@(<iwC8Ugdre#hO1cyAL5NG|%xQuv6
z%Uw;6_>)-7fL64)tc?eoT5R#P?Cn?X)tFP{aplqn4bw)qPxI2=&*xVjQ&r6OfU~9Q
z=mmt`IHQ_;kHMe}BRyT~sFJ`iA1N8u&KE(*dFbVgkS0QRcYO3kw5EM4FnRkT#;B-y
zQ)>pZs9t|o$BW#b9>vj=!~o6-?ddVR0KLXSkUKydL%%f{OVxPCZ0<R4lwB>BdHR`$
zXLaP|IWQOmLyS=Cxp<twYvY8*G&wFw5yvw*!#F8wh$fV<hBdad1489=A*no|dTf#7
z?s<X6A}lSM$^c4H+O#FsGie!Y067%q#}u;CC79m2n_;%lP6BwJ1ilFA#}*7}299&0
z&=TlLYr^|%`6DtwWVAWvBjjRU<0`(ERXMnj5zGMwVI`?>oy<?ybDV1?x4>%<`3dH9
zjsAF?K;U~?n81&K<S^kbjFK$t**)2~CoC!f>IWHP(HCcU!)jFJJmpJ|oz^+)d{!SS
zLD-Xwktf>JvS&&>Ud*&dP%fzBM at VMtpX(2h)RuI*n^i5-$ihOKqO8*S|NG$xFa>(g
z#j;N1&M$<l^Ul#8zvdx*+aItH!6<L*2?N>H#33IU=cGmmmwp&!^oWKt4A0Jh?W)+|
zU<s{@f!urGyo}!n=f at Ycl;bE3jS)vu6(sAq;DOyJ&50IO=?$8AaH?VveL626seFWe
zd_h~|aG3)ee!-rDu)YYZKGOR*`1|VU5zj;JksDdzXI=EmBnLxAoDtETWk_MqU>80>
z1~<f?X~~A-KfX?0-~zvxP}FF}#uI_zyLfwjZOo~nbS at 7RUo9HycVH;T$6ny~Hh6Mc
z2IyH0d*E9iSf<rS{6x)Y?>T;z2KUT`KK(k)Jk8RF+4^nh!Sd-C<!1dQe1)=mgF_6Y
zNN2Rc2Kc#s_+_=)|2Kc~Y2w#|&i?yPhwJ+rn{%|E=zo?!9{c-Gt!}f~>mC37Cw^h?
z-~ay8S$O;Twt4m|nbF$i%Zs1Kf4+kLyk^fXhGT$woyYvLu;|m3A(uPkHu%reb$-sd
zd1-#((tJzbZs_dny?t_<!}!*{)R at 22?CIN*fA1#uySdGK2?MU)9PMrE>q{x47f>5>
zoz~p^-0D?+*6y|2FWhb$c-rQRCOEJ94Ss^DK6C%@aR2GcmmfZSIJdQTG&effx-7G_
zGu%A9th0kykNbzaI~Rc=FxQ6hR-Nqn({b#{woqvF#00m$WS=4#;>^kIYuD4Eb at iY8
z53k;0NG@%rv(oa~ak@}px!%nnF5ao1?B^#n{BZMJqKizxtvjnM`kz*72N*$(s8b at H
z?JEbKax`pRaLz34XUDcd+77zLDFo(6Fs_U6fPq!LwZp at DIGx)hKy_29%C}7!0~kjP
z9!z>sF!Eu3I#;L5^uYx)%=?XdTh9m||GBq%{nA4H9{y0TkLw~0*V6Mx*Ri*W|74e;
z>{Pkz0J*#Z#KzD>pYb8HX$KoFS+kNGR6FON`wFKWPxhe@*V3<mF{?9 at 5~^tF at n$GX
zIE0nEw{YNWe+80s<%DdfcMNjN?Oin)vx`APkEHk#ElC7&5MabZdN>yHqhvfC8ZhER
zzY+S%3#%{Qz;kZkS`&vPEb_kP;)cM&ukJiuzt8Wk-EZ>W7XNMYUw-59KEJNH#zG6%
z&f<vw-Q^A6ed<_ at ah!wuLfq}<y3i)k3bi|<_1E8d#6F}>mC%h~LIK5nS|4%@Oy|}P
zRn|tZY4Y(l{zu1yPYjRi03M*nr&0N7X6-Ak4GuiVnStrOV)ki5Tqk}>?YuWJ2%N5@
zUU#&8d{DnC6+EwX=vzrv?$%%A$KDRNC&YEvRdb|@FDI0jFV<($sowhY*K(i%^Ge&G
zpTy!OyL)YIT;}&9LuBJ-Dm&%rC3C_fUHP3+ at V`MW8Mf(<G^tXM&%?MbenqWz`7Lj$
z)!#y#WWmx-$>#PJFS9$+)cTRHVX1hco*D6q0-1gB(b5Lz@*p6M^fm3V%y1S#hI;0;
z*RHSJSbpubi*pySe}Z}0cKfyXLsEZ%K^OQ}ugW}_+q~5HmikwvUp9lF-8r_b(c#zU
z48inZQG#w;rZZd2v)RYOxQ*wYT{~c5`j&c-hn4dor);dk6NSzrWjy1$H$3Dyi^^dy
z>CvPu{9No{Cga)rt>=Oio7HR*z0+p6>{>ki>}6U#d$eQ1pWWGhu4)>ey-bBhqz_Z=
z<3x+9J<G;$qCr^JDHd^}RTaz|H;WUXo@^T at nx8a~lb`<`wUW~Z`R|CWoEY32G?-=I
z%Sl64S<c!!>L)1(6P$4&4otqoZ_TkZBR-S=8ecv<+-x3g?y~gMsjCq`ZT0NseXG=0
zIYhO7KGB5LzlzsXx$42<-9}GtetMMmhHaK{r%lOfq~!W?iA=2AzQq4@>#NDUVruJm
z=MLs}A~4BTmul`u@$)eEwnlg$-qzaT+}~WIU%ynJ at 6We8^{?Tf!^5NcU9!j*mU*dQ
zz>l;pUF7o$`v|Y{ui~5vIBJy7_^L{kiSx<z<Rqus*3>Ev*j2pg<05Ux<+b`(<z(B*
zXkHGkw!Jy?WsXi?^KW2{XD)amFI>D>|N7cFd7E=s&5$<zGvHieT|O(@Go9elajye4
zyv)y#N86bTG<uDls%!VIF5kH at 8(?{d_}H4F2q~rx{Gy!YxkLx<NasWTU-o+E5*jnb
z$j%V<f6mS=W6QJT%og`Hy`!CD|EKG3OA)@JJ-Ic<hpMywO!zZBMXsoSif<x1y}w^f
zT!cEuV{sBq$0Bg<IBe at cSY@@tDW#JR=I!>@8jxd}f3rb@$cPMLWRiI at VRe-Sq)Zv-
zr}T@$ED?Fb?s8bSJIhPgUR<7AePy*q*Q!O+pQi_9`kLqNglrqsG>fEOPgeS9^*Jd0
zITZU`$ZyOAntbl^Wq!LQAGh=_8Ff-`4?#a3>)-k0*shjVagZfG>J9<xaV8YQ#ThTv
zg5aFsJ*C#fv!}pHm+H?9ZSN!~CEI;YGr{6Q?0Cp;Je%&vl9pPY1i5ykcf$NTdRp^s
z?_Js*l3eE}p|4#(1Kj9-5^PYKG+2Peo3jw=b|>NG2`MbCUtKx_fo?Yi9*25J#yWkm
zxii>010;N)yPO1;T>&`+a=W%AXMlHYxOuDWa1v at B@*9JC_2}TSP-9}!#TZRY1$?%#
zXCS_U<0_96Ft;ZMP)$j2mmz*MoW!>`7j at b?Zsrqb9bP;G%GXa~;Dj*uPz6$Y8jF0v
z4Gd?1x%u!m$sig|X#f48e_iwQfqQ=%+|$Tq4^D^Q`4PJ(EAr;UH$d+j0(}1@;4FfZ
zguf96Pvvh0dyLO-1nyM+X1FKFeItCB!ru({B)xA0 at D%<kBh2R90r~4QO#RM_Zh3N=
z4oCdv?^&T7o(3h3R-YNp!D(=;i)#cF{7k at EiCQ}i*t&ji?aW}-PX&|wIVa_}-%Z at 3
z7u-hU_~DqU9dZb1ocS{*@(fe+u9K6Jg@%a8*I0jZ5k5MJu#`^nm0aW!=h%hR<%~0o
zKz*i3sLq6hK2`a227ou{`LgWuNlJ?_rpRzA at Qj__GeEw|6D8Lbygmjpim9h9XmkdE
zZub~qrcQa#vj7ui+N^pUbxt$L`If&?cNWlU{W!25v=<|1fffxPGi*iWcGG8#-EQNB
znfBKoN2BD?J5YvxhRJcelT>E)in$qZbKub#fO&G<_z4ibWIQ9lyINkJgy-`_P_KDD
zV~Cl%Oo28rUS&?sK-|@^dK&ae at +JU|`FXuJ6gUayT{=w*bEZOmBc3t?pF%XJ4A}&U
z4bhE*!9y`u$tW@|TDv`V4Rnq6SJn0jaM5(8?d)*T_MNl9J!Dhi%*3wJ_!OY|R=ch*
z#0_6j?9HJP1zWUaEVF$%OJr$m*I5glWDmF3xiHGgAGVx<(GRB?fP5Q0Vs*y{XM at Hz
z{YaMOib9H$v~k5QJ^O0&M^cEZW?NfC)MX%Y7IRpjSdH!{F-eKJIm+2Ny}wEdK&b!;
z%BHvE&cK+Jz1Y1w3H#k660e+O(o2ncMPPUaXkSa87ioGD8bGw~{|4dRaIfhQ`4u>}
z0iUd6Zg-NP^fbU30Hl^DK}7E83=pE>NdT`8A4!hSA`7|cNg#f~`b^d)wLA%8z}?hz
z7iXkEw6ZWhV~%7=5N at tXVy9@D<M>Nl>*o0f%nh$z9n at c;5T~6v2gACStSVutHga`%
zAeb62i^TDn-lbL}u{sXPOl%@NSq#|zf9+uHwJBloH0oacH$&Z&82V%;_ZV;5m*zP^
z)c!nq6Pc04dgG*Ytg#iP11GXGwq?AfZF{3#<n2BElB110ng6^&Rh%=(6`P8CQ%a?n
z)y}2)#-;h@=S8{BMmeLtsCVPXQ!I~mLsAa7$~n@(bFGB>aT!#)zm(2hE!NLB=33|3
z@?g(H|IguwOH==oK0AM_V*|>?zDV4)dt{U9AFSstbo>N#dOlqzDYR_1kBIf<9B|aV
zh#~m>1AZ1rl|_a(dcPJO5^0e-dLrU*686$bH{T%c0Pr~6EN;mpU{Wf11w9yW6r-3r
zwE9<tgp>*Uh9;^q<_z_<BL5K6F~RTLC_P;e4EjyPU1S@$1_*hRJdg7+UhchtNtBjM
zox<?ZX9kz%<y3Gt((n7Cw;Z!Zq&TqtWJ%+c)0C0slSx<xFYUD at Z81vHH4|6Pc`boM
zC}%;F4 at eaXJq0QEhx~-TG3wP0oklvt5ZwN?q;QLdF?CSK;KxwTLVO at dLw^i{Bp;E+
zn3=CL*drxJaD9>6I1{U4Ag=|K#rpizu_RRCM|MVAqqB at 7K~{5UJD+XdR3R at RmuZ>Z
z-8YD(7({FODDDzM6W10}rk6w%07~479hji{4PXusrw;Hq($5PQ=PERUQ<1Ux;@$f)
z_*&Obkg?gULl`=p8;1|iGQ70?^O{d9a=0zvEY{meLS(Nl`$(b=&s8w^ET%L`EhfyV
z4`gx|n0u;Evwcm%tJsoMKIAM^y>Msw`g9T1Vb4j}vRxce9P=vKlP!}P-=OW2f!k_0
zcrgNQy>U!ZKZ{B5f`K{<GTyox^26z;Sn3HjmDrd9Ch>Dd=k8}59ZAu3?Vl4<6JK+G
zL(g`TeVw^=gG-|hlH%b3z07%*0jqb0^f;qDF?7Ex5{P*vVE1ee21L>CR9iM7D9R8q
z%6OrC%_N>>JZ>M&(Z=cKW at 0R!M((I7-d)qlekaf}<};z(a6g&(2vVP<U@;~e_Oro%
zf)A+jEnr7({%pWg9{+62@=IB)D7Sd=?#ZfqxZ$QUi#Ja3GAC(Y<G#}t4-648TQkmv
zXl*OB at NtuH*M?1D5ii^LHD}DwWGeDZ$N(S{;hrq2rVH7X_+=nr at Npm=3^+QIrmRi1
z1^09|9AljJ8Qw6|qp46=$Ov!(-S+a0(z!hqqSAI`0OZzgtf0PIXBsnRDEgi1LGz)9
zyq9sh_)S at 2%)525tjaJXm_EQYT{t=I#S%E}ALKr72yb^1ZwB^S1~#387E{iCJlNKq
z0w-IOi{Vn>^H<2UaxCW!(b1cvL$Hf1GE6YQnP#UmoBpele<!1a2n-6s%H*%EZvLhb
zR%D_J!sciBzcZ0!Io`~>GpDSsr^v at N{-EL4)7H(Cc~L6R=RGgrt?ckzo|=L<V<ogi
zB$zL6xZ;eRr#36kuE5-UBvh_5j=XUIi%6IsCL0~haU50o4c;Q)4$bJH&pRv2q&M$$
zLqV&dI6}k48!A}R=hIBiT10n!;Ys+he(6j{R&<8P_dx*aZuzd!Ogubf!=p|yBSaD7
zVzres4`B^-v`{}mnnL%ds`yP at rDCprdqnP?a5{1fvD-1 at P)xZ^?xpGNhl@|^4utPN
z=<@Py4vF%NCDB<jUKf27T;Ff#J1g}KQgi#msP^gbaH^A(dEEDOXs61FsWcS?>>oZI
z$C3(^ySq<wnv|_3I0mSbG_BKs6OVe!i3UZ#?LB^TeQ*7KNhF6&>zAM7mo4>bL!IBp
zAnd6(F87*|>Rs1us{6Y3A9KzQ1J9$ANSvQ*b?UpjT!iLA6cCBGv}kJ1b+~u9dvUH1
zD8Fx}S7dj2#xACv!1wUce!QUf=$XpwdfzEMC?1kw+~Qew=E2R~?RWA0sdQ><)gq$n
z?IBU}SDJMmt3qP+UI?#}<oC at ulc0dmT_nq*+IcSh;)BBRstjmmdHT>lvzi2)@2PjZ
zv_8;F_?OZRx3Inpw({F=`3!{9hM-L`8Zz!9fq9%sCE`6f?u%*A7w57JwwLCMNo-ci
z)ncP)vD7S!t+LpjA}C9p at _V-|_R8WyS?rg^MoG_=O0lHjN=d_&l7=ho0>qUP^OX|w
zl at jxn67!W3^OXwbt0m^ECFZLo=Bp*<t0m^ECFZLo=Bp*<t0m^ECFZLY%y%k`zq3^0
zzEffSouv}{ouv}}-D+q4D0}lqNjra({rRH=aATR*#O at S~ys`ZJ(v9M;<yV%k-qUkd
zMa}hFH&$-NUnk5`-ZFR!adUQl_0GLznI^Is);%f8DO(3Qii_;o#jx?o5T}I9Q#m-&
z at lY<0VqtVk2AzARxCDV^aopzq3hVN3S;hhQnW`~gym0%%Y+b}2E?(H(RXJ?H;)SJl
z`l4YhY9+|WjBPQ6hQ5s92!NzX{Vw$6FwO*Wod#=~J1K{?boc7YN+h(;@npqJrY+y{
zIKR90S_V->g6H|kCZ1%P_Gu>WgOG`S>X1tqm!3P(nMi4RM}=|c&Q1Ns>u!*F-eJ|b
z_qd(@=kn#dyywTrhU>3u>oVhfjXa#|W}?UC%PTOHUt8UNcU)$`K(a;6>mT|Rgi6Ql
zyos}z<;6s$p~&PedI6OY?JYK|4dTG};)M&<N*n6Mh+2c31nyQDL!@KE(^~nA_9RwC
z3*%{RuPY4H at v3PbeL!m32WL&Ec2PQQ>W92nzgQ#@GDmz=ZjxM6<>2%fXY|3*<FtC8
zpIK~7 at V7VubP{iIer55(eEs=}2`Cm1`m{CisR-Xse!8kWnNED1#Px8T28jISYsmMK
zdGXv-B&s-%mpHFa7f3BJ_XigipSy516=$m-u2jBU(%SsO#OIaj=UY76{?4P}WQ!{k
zO$1 at G8IOxU;2q5Mfgrt5{1I4+k0zt|S|y}tVmxJ&Q?LX%WwVn6`Atp{v#Q5AFWuo;
zguOH*e=;fYt-=p~G70f15(E?dDqq!cqQ&^p?%HTaSnozD#{cfY{-!MW+Td`kk6+8*
z*Ye+*CbU at pF#DBv1)@eTY_z-$-ry2n^<V(6SHyK>76hA at hinl0;i&qU=c9-&t>$_|
zKyXss4AK4}V#tqa&e$bfy!iF{e9mFqh5f?|PuIUb8I#u+8_)2dfKCC0eT+7^kZPM=
z^K!E@*PhmL{bWl*-Dxei_m07wY?QrbiFf(nV018ZVFk~4pgW-s{hqF0n2SM8bbn7`
z?d@{Kr6F_saC`h(tbS&aODsGM%f@^%quD;rc77pk at +PJHxR;ts8+y=H at BPU{r|6d;
znG2iD22Vb7t}E`i>6xf-!+P9fqu%DpYX8=?UQl<~pT2taX5hE|wiE-_D|&jES|`pB
z7roT)vn2|$i46GNfv0&{iUkI3-cs*1d0WX(9nCaw-3Z2FvE(q_6QaR`9TJT|o`oYx
z2LZLGDLxkIiFU8sn_KA3c6;slxn7^2Rjmq5>PrAVt#7N<V^!3jO)#eSo!+(CT4>Gn
z+p`J8DP0 at Wur|7M?JdkE5T|r)PVL(0&(D!4N+3?@+M3pNq1~8U=+8C+!YMu5^i1L|
zX+Os5PQNqPT$l|=r$FdT!`*K5x&1mD{ZHxGoz}70 at 6C1Fv(f*Qj=iZJ=lgTL?riiw
zrQ^c1j*WJ2u0227bpKO2_NR87Z_h0(%trrHIyR<CVGn7TpKZAR^p01i_G>P*+H>8`
zY<qrwfy>#abe$@KSeN$Pe1A59IHl`!5o|YlbFC&EGKf>UP8GohZ+FdgTkyyrPU$Kc
zJRy2LhS=@GBttl*=XBZYFU<AlX9K_~9jD4(tJ9uqwPxGye at e&cve)j<wL7!X|CEl?
zWv|zn>yZU^|5G|nm%V0tuGgGxxc?~~r_0`gZD+&%r+2(MUG_Tt{#>g!+v at hZc-2$7
zPL;jJLaRHspk%i}oYHl=>@}H;W^XouIHl`U+3PnJ=Gur}Kscr6RMG1)9gWs(063-N
zbjj=V=bDY#=zmJb>5|uM%{9<#_dliMbjfS>=emvAmiwR5ak}JnIT6;IZMy#{9j8lP
zqa_F0aQ{;}PM5r%<)`8P(>s!MnPv)_?G{2iKig_|Bn+qZoi2MlM#y9)7^n3;MfeaQ
zEJ-6^oYr@$^euGT;%}pA5T|vWE`E3-tVuwa-jh_*bWU|Tjk(4GO4?i?`Fm>T>8x7d
zw-*}7L;yLp^C`T-6m^h`0CH;Qsm$un_vD)zO~W{~?{sd3Yy^nuT_YDaO|rU;=G;84
zqOX5W>rCeEF at 14R3#WE25`EJEbehCx-PvBJduo5D1*i2*g!eJ5CkbaUQ3>fHhm{sE
z_x5=Glm{Xz%LT7uQv7`^lm?LAE!Qst at Ur~GTF{YvEYs5RO?RyqQvmt4`L{cNlv663
z+~+O6HR78)dl4Bc!s%e%k{5 at MgE!eI)?Wp<#iDfk at bUz-{NaAl1Trg4G{(!9y^O2u
zO{sPw-&tMaR at z0Pj8)%6<HZa67qnw>yfSTFT}au_%(!b4j|eEWI>86CJSI4<x@%pS
zhGmwgZ at x~=r-J7v$=aDl7C*ffJ7!O!>&EGHW!%%~^7Zj5UG)iBII-%ku-9T+`8(J>
zG56e$yHzGA^CVBQ)a*<gdzhO*Rz(adEX at rj<%9-FOyXQL3-E?E*eoegwP<@h6(||*
z7k!U<Jo8jEo=yM8kd*l)<-Lv2RBlTP#co0olbkL`FQ(3y<D3kX-6-$)&dkp>k9E`6
zmvxVKajw(tO;ULIvMy)oN$T~m7+z?5Sb-DTC$4YJIH%uy%dr7mKVtJZ4pkkyvy_Db
zK-c1Sl<p_ZT+jhtckrV~;_ub+MUP1WDj$qKb4@!3$qf1tr~GtH at jy$)J^fO`xeAtI
zw_&l|uBZym8o7yyr26*pilgHdI=)HWWS(7_S069TM?}u^Amw0(-;6r%JfR9H at v35x
z!qgv;2~7J7NuZ0<m0&uN=Jv-Ehqy9Rrkv|5KAk*&SAO!OE!HR5akw#g=&fvi?7Uj}
zVaoZk>WnbCMNWK%h3Tx)XX$?=gCPWo4KyyY<TJF2|1X-^X2kj2*l+TFTKVd#wzau8
z61&=)J0rHRpNbnkmFq;QQCv<t?kVY=&q9z-5x9vxwDIt8Md+N1oe9{<59Ep5-7?0-
z_$b+%p!&{`N6Nh&$WGu1$`AaNOUfes<mb<cX5N;s(444Eh>j8cSZW=JglW(N1nhD7
z{2Clfz}S2X+v7%`51S!bzWikwyP2sJ^ESw17;93KAU}cDX!V;w><fOXW;(UJyznGy
zZLib&8i|_YY at O2Na}|gy%H4-An@(}@49H{X4$X>(j-T|Z(8(cHdw-tnw>Dn)gUi!L
z!)4`T;~=!an`&2{UrXWb7tZBy2TkdAUyDo=!I76M{H#ITQ1DqSe%3*UdiY&|_1(Gp
z)i`QJW<AbYX^%VhT?E*7L5`avUkJNVzBZGFK4G#%%4+eF%(NCk<Q+eb6p_drkC(?q
z3Ln4m38OSN?uz)pd&RctoR|L8&!P+uMNSq5etilXJldc5+lVG=CSwW3Pm_icAkm&s
zDfs&oqv8yKDPO$QNLtOd7S2CfXxJxa0La<Zq+4%`2B;a$9}+4;zR|wx6*C8-64SX<
zQ}%X<oh)Fw)wURoo+vI^Q8|~TLwI`AJD-eV+ePm(uMJtKu?d5s6+f}JxqZNe1Q{p)
zaH3={ztF(@qx=Nmc)+Wp`q4y=gz3}(EqT+>$HmtC!?K6GqrLvR#7v!c9gI$skN6VQ
zRU2jBmafgF`G3RHZ6V3?J9Y9aB9$Y|STK|mp2)AvV==)&exAyiG)H2`bMx``cCLHZ
zvl)C6s4Nrj%F(r<XsRdNa8>^$cZrps^LzsTxTZg84m#22G#z}R&OLb&%6ZL9s?I?<
z?8+1rs#H$FseH4B{aeVna at bt_!Mq%^RZr$ymG#p&R~>kTcZCf(g?Gz)aqEobA#1BB
zOO0{jCsuAcN2$jr=ISr&i3?uw<>ZB)?pFtX)O>`evd{2|RUId#9;k7}I)3bznsmQ8
z9no}H<a21aw8H&y6-<wG2%~>)`Gn6iA#y03IF)@aO^+&@@`P3KFAl+JT=gsI7JcQN
zLr#8aX!!?_^c#2nWoBN+oB)&p_ at qZHI-fYW)ID3dikG{}8(cGp!;3r=yq*78;sX4>
zBTdIcGgB?ur1U(cLE*-Ns70*N*GmGzs(HX>athTnN^`7aadfOm%>?{K!?(#wMlS_o
z6V at z!x{W<F;j00 at NO@dJ<O$BH+RIsh5SsK080kzhvw;}t at e?_*Xu at xUa4JNHkcV|Y
zkFvwBkMRRfaTItw)PZVf;m6~nrUalf)BFTHFQxL10={s#$InZwuOICPU|;@?B}EcZ
z4iImQ9`ZXB at e=NiFCp<W73pU+OcK9Mwa*XcZj$N{H4 at wugrZsM81&}2jf2SPXB5iA
z!MFLT5v~aG8wm>C_KxIjm)7|$ssX2jJx)(!dc7qNG_V5Ya5UmFD2VmbBe-hd=z(Jf
zyLY6EDTx7SE5F>!!rj+dA#ReeNkz-Id3jBOAxOt6+_Apsr{AVvnb4VZl-slP|FHM2
zYi%V-x^Vw>UBxO!)e>bu9Bh}%ZQPA9l$pkd5AamgP~JR32vAuF8i at kh)6cUnV*lB<
zx3A=T-#Fx9X-UZC>h77n$B%7EYvmy_GBPqEGBP4e7nUK~Ox?GcB+xJ(^NOg$i at R?F
zT;!+JP@&1<C1542d-LvHO}L3ZxGN|nDR)v at 5K4*UPz1l)U`KjFV3{)cM&d>U@=($U
z<sn%0tSG<gZM6oZa|DY()N_g10gL}v0&TorV8XoB%qK+HQs&wl_H at Hd%_xGXO(<mY
zg##s&1RKP@)Hd1)V~Qk{lx9gRtw3E^O`|syKxj!7lATt=x=Uy<bo9wsaF#l162S)h
zBC!Y7NE~30il|k1ANs0r!?f~BBMsYI`nEL47b(26k=0ePEpi-c at J=2IQDjd^1K9%`
zqCERDapz(y!I{fA>A&L{t(mLRagZ4Ajh=ao*tyx9)42>rtliQ{Y==WKgsj$;92C~@
zFhP@?IfNIOy;4yhSV`dB4l$#kAj$XG{}kiUDx)LO=Wenu?I&w(-0cyEGs-kba_T>Y
zy5X%RcQTMo%fuKjAc=+O2 at h*IqoiDRSP+XgI7~~zRA~hwhBwqfJ<ZvUz&x5n3D-$t
zFNGw^A!E~9HOus)6IP1Wx$$GCa5f9&J*lX|4YoT&uJY8^2rZ5bXISh1j)a9tnk^K!
zJUa|+$u98Z7 at 8jLVu@;p#FX&)mLYLt2zY>L9rktXW;6m~BPokKL3Z*wW8^1)%|vBq
zxKATjazwmD9#~cF;m_AWVgu3iG8-lqY%=sl&D+XEneqhM!Yn)N*H8ZH)h#ze)XM$E
zYUp7SL59-N`aM}`(<m5v_b5!Nj$Mr@&aySw1v$2SE8#~NTCjvb7(-xM3W~%Mb@%Y=
z&la at IUhZBUGW$@q%(zG3prZ04pj94{I2~Hz)EJPIg#5+|#L`%)&4RM|=Iu>oGJp@<
z%W~-U{WluC45fPLj+dJC7=~{z#vs5-!)mU0orna;*_frNa9~A=0?7wsLXSS4h>huH
zUkGIaI*gzw)&t~#41GKX7g|<S0n{16#M)qR-tG$5_2_u&+)YO11TkmnYkH6t(kpg#
ztFlzsm*rw%VWD10KcRJEPY%0)J%2b6cQ)#(Wn^Svt7rn|{_N|m=3NHt`KvMb^YW{q
z<_Hd7B>JzI=qktwY5=%8{^E8eE-w(1#BfGNNJoxWlATTTYRe1>d5uMJTv>@&?~!;-
zo3rQBqt+2o=1F%^rPFrJdJLGg7h at 1>rNPjZGmb?o)Ib~;dTd3Ea#$5#Q4|v25V7tD
zV1I~7gEY}*&PX)VcJCawo0$O)_iKgAKRtZ5aU(g3kz?)fS^5S$ua?oP*NlWGS>zxx
z#LOdK7x8M`rf2f|C{0tJ{|+YBb0!9Yd7}_}irP}FfbnhY5<fQPm*Bn?D(>R)DsCOD
z at i-W^TL~iZc%&9 at BQ@$$2w8}>>T{2iCf+hucr*>u<RbW!O<7ek-Xp^ZeE$%O2K|)h
z>Te-0^R|N?`}5c9^9B?Dee56pt<HD>bM<vSt49OeW4|u+{~9uVuJVQg5T<w8zD6dM
zqvQE!Ye|?(e}g<*j^;n*8?H`0iCeyvPA1?$3_waWp4g)u;<=DtksxLgOa at L(I$5pD
z at B$(00*CP>CB!NsMB|Rcv{@X(8wL-M6BgGi7}BAkeaTE^JG5{LI|cy500UQpo-hqN
z5C9jJTQcCG$1O%1?eL-s(wH;Q3c}IBMshVoP)VhI+)Em8B56H3MG9_x+PUepugGl{
ziZxyo$K4G?8N$&6^I}3{MjP;*xI|)WHVgXIyVeXCM1CYaqPhMNZHWbw%!ef8Fb5%^
z9D0(Hng&<$-m~JU_*`6{U-e*uq{-wEutTKn_Mv!pP5z_ at y4_5A@+3QCPp&56J`_kB
zp?t-%0kH+iNrfIu1a&qz5u1#{Z>Z6Nu9u3bFC&r-xd&83-9QwZ5$~M#qb}T6o@%$2
z$WeND0;7aI#X4dGBaAMca0zjw^W%wuY0p&2l)T6HWZ`!p4=M*C=eo=ij}b9pxWkU^
z1TrA;*>2Geglj`w5IEL6I>)YpLK$)CGEzOIuR1?>EaA_f3$fqfw~}TB##HbPoy;Nq
z9r$d8WcTKx)AzI0X7jn^dG>J;m$q2sVi_)n;ZeRoI+w81iOfQJnjS0UVt&9 at fu1+A
zWX58rU_e9k=a7mO1?h`92Vx+ZOAt)F>De6?4tU!yG$IM-$C;eyj^HLn<e|k9A4 at FG
zim|!EK_vDw0yR{-0eR0+6xt?UX*p0%uBcsIF>1c2-T}n4F!7}11qfy}n5KPd!X(Ek
z<_f1_8`+R`6)xP;@kWZ<3*RTxXQ6OZ+~5L6G7=0Y&EiJ)5n&7Wq_vb!PN^gwYr%|=
zFbeS3c#jTKl}@lI-!18w>!8(xpmKB at RdJT}K{#2(dDrt<G^w0eT2|zUO;{sUa0Jpe
zFZAhoj3459rV at tK<GN;VIAxpX at is_L;y)v%tz6TSn2szUFXfOR977_J9Uo`}OAvR2
z5RJOwjCEt+M~0lS$S!IjxrPu$F#H at Elue#bq-47jSUZC%9mxoBV2uJ;8~qNr2Rh?|
zpeiil3Qk^6nEM;&HwbEu%Y<rVHPe;dFeO+6Tv&u%q(4+sy8J}Dq$V+!h$|Za!59IQ
zMfA{>#8JRilxgIRgC^m!2e$)+D3dYhHZ_7=v<SNgCY?q$H01Xo5zZ6G3jJ%`vUI1V
zTxLn!QwuU&0^#<kO6zV#c#{xe<}FQl9^xk0T*n2rk(o2QlN#SSLgG>F#E82nbHOLT
zHFhSAB82r)?a?7JE>!|2peRa-V(`j*SVxb$oJV9X&-KJ`J49;HWchK)j&LYH6LW5&
zj4*PYnnt1W(<+iyj3#xjCb8DimvU);!P#KAm0$d^sK2X2ngD#tj~I0>t0=en^<6J`
z3~##^t-d&FdzEmhUtb)D7r}i|Ukt;G;Hs!E+Q;5hxXv#xB8JF2=)v%jh=Y<Llor{q
zV=S=Lz<>RX^Db%EABN(Q1JesPW5Hgw#DgjL^YBvU)h{RWnKAqW5pD=}<{PgFH&+g>
zU`WUob`MNr01v542D%QdfS)$%%f-J27h$lJWa%eG!|cF_Ek1r(8v}_meB7viwXl3#
zT-WDNDBLKRO`#(9VY9@&(wk%5M&?Y--p(oA;R8gY4LNQAsxqtu%s?xvwWD^J<fHbN
z8W5t?*8#_mf=Ro+p?bm+T)Bwt9BVr#zVI>}px|gbff7N1+KzP)C=p8gu>fjRr&~ud
zBxe>@Xh-*j(kw+%4iohyXR0*d at G{I|HiT)W(Xj7e{C4x{Eyg*Gg9_7%L1DUVof;~`
z%P{BJpz`^RZ3gavHZgU1o8e`c|Gdr5n``1Q{1vz9f^p}#_;mV<BWOh2c=5EPbM^XO
zM%|DZ61%$K^=Lu6L4ZyC?5wiVDPw<59of3N3CK64CZKk?FljKMW-fFOIzuJ&7Z^DX
z<@&2LaLES+ufo;5b~@CbrvrT2RN3q+!VWAlI4a6I8GRW7dYAZ@)rW}-J_9f=oJ!PY
zpKW_<1LA9>6H&n)AC*(5jwCjD4QN-Nnq`68f1Gz(oNA{@ng&i at h>0iWrc8SYh*W8!
zfx4?pzP06OQAlObXJbdDyP$iMDQM$IWu+-Wj;3&^7?@;;H~*o#2d2BM5A1k!VA{PU
zfZ)K6s|S{v2_Vx!p%+OGjwgs%D<U4ZR-;u+r7X`a@%PN7bW=>B&%21GZjiWQ0uu_1
zFSPqy!x%J#vls>#(o2_YL`p8%MCx*Ymhllt$9`G3q?INOaJI!FQU)jLpa3tb5__xX
zi7CSQy3=>LKs2u<sVq#9oz%X$*o|-B3dHv9fvi?ll<&zPnoYnTY^<)i$t$DY-Olib
zAIFUl%tF<2Te(W(x-n}9#H81 at LS!Bq%&g)?@#Sjq=Y!|lYp?%&u=Q%~yN!`S$}Nt@
zpAX)y?Y-0 at yKd%9ItY-JaUNb|AeWyKM&)5P7}<zZPY9n=%Pe#oas3^w;aN4sCojVx
z`-FI_uND%(x`A=5Z)|TLyxiFO?&aRW&f4DA8*rl>tK9YXm*3A8O at HwLH-}Oz*K9C1
z5sLD-i~E736Eqp0{u(C!Mc%$vdJtvY_>~;&Gf^BjNx9G`qcQ67O-~qliEOCSlxA2)
zviN?ks6S_5y^MBjlz?-|hL%tu7^`IYIJn8*iN!x}N1S5Nc!KV7R|2hEt6Bmm+mOc@
zi&mrr>H$6|-G at G5R5>6rpd}2p;xT4Z*WwgojLw>QLsJY?M<64`F!7lZ4F)RAjmHCE
z#WWQtl118;VRQ8&nECLwG>_7CT$xHWqOz)GgQ;FM#=bP;YX!U{$i%qWxnj^HuY+{y
z*WN~p{D_OB_vshsF!>4$h}H#YicnC$$jH1(d2y6_v2!HeyQ>3h^*y2vpFA*9N>O$o
zgKIX;coY)qmMCTl_G$j+3I^LYnKg<$Q|_U<B{Q`0KVuVBiDB#}s=)o<x`}eRmu7x5
z;eaMA2~!{kw6&Z*UV2|tJ`c>|u60)H!3q&XZ!EAfkBO@<DQd(YInlU9sG~E8KWQUN
zM_I9vVcXFXU_jg+rK4sO2M%B- at IJdNV7#{U*clMXu6v3gbU99K1H<DCWW~wn3qIE9
zt+NCJT3KpPz$~AYyiBA at d+ck$Ip8)<mlVExH7gRP(*y<^<8>TvnVD6*2?8T`c(6{@
zOa&<KnqqV3dFzsqZpX1nP^XU?EI1({yvV?f1&vHF36VB&`Fnk7`SEk8oMNjBAIpLK
z9Y2bUgxf|coyb-l%+ln%6_*0hHsY;%$AEKvAESaEK<e$+uMb$Y{(fPmm~ol&EuN at r
z0mL(PE{Ge(j&B%co(`M!PI3i09Gy at PQpl*Iz#LJ&{TjfoHhQOr_Z8=t4y<Z9aPLTk
z|JXMP!#Xy6bKIPZ>=Y_<ACeSDqS{en<blbNr9)=SUvUmXm<bXA&UF}(5?Sb&e2U5|
zMKzNb5R5;Kubzf8X95ZON8&sHv3Pm7aDp@!xKIH{cRga6bOn*;2Jz-0&ldc6m=N%7
zxG{>M<A4WBsvLWA=sX1Cr%j3;nux97l837&1 at L$%;U*>2ItR$)GzKfY8;*J0jZ2IW
zv*0LYj!^=>Tq0R0{*74?p~7lX$VEX5;u<LtB>kNf-|_xPY`kcURGJ;Bbyz%S^8upq
zmE4nHMcc4zdBH&E4r`tan!mZJ at N-8TL2-DF+2rpiw+cX+x(#70?lQGYEV2{aQN_n$
zysD~(bumziR7skGKzsf{4z&VN0Z`hvan%*4y at EHi<=+nF1Q?{kXW_c7ulNAMYGR9B
zIYunwx!NV7wyHyu>dT|f<Kt?7wSXq%zn##~T<wJI&D9P|%|;6;=_{U!*t%1jx#~%w
zzf?@b=sgm|9n0~UW-J~D2FxMyIG%x0E0<%)vh?3ek_+yiw<LA-2cLL3sHS5Exr!Vn
z%M(2-4M}!*x2VQaVd;Xu!5I%3N{oqBuk=7<RV)1yS9s_eYcpTr_!WksvA#_bs#^1-
zg!>swKEPC3 at +VU*`Ej-5lD`ZMja~A#wBwnSi(8>}oRR2~4+mPh<UfH~gtj8HP^)IZ
zyUU(11IRP%4w9vCAYMO`SxR<9BHI~ePEa27M`xGJJ9aj$pg at Ph|K9Qc>#~<Xp}&s3
z1TrPNVO#v1Qh*3u|9bX9>iZ045+L|h%w$~ce;6}?LHM(|K^O!q&zf)JPHvDYKDeTK
zg6q6+a>8|HJ;%hk4b%u+VMb^rIQT;J!<n4l?iz?&xw^osbNem=vLhCurh6$oCB%N3
z20+4WS-Sc6nC_8NUO2=<{<r?GPwBL0fYAl%oF_{Zo#~aY)uUFXzkM$qy%!1%Ygfkg
zy+m=U4Z=o8-AnAK<<X0W(-orj)A7=bO0 at y-%iIKz;AU%bDtfQhzQ)7f`*xx=XmZ-G
zx3B9Ov$Dn_8tE-=9wFn3Zvmco1!b)@B+q%QaPOV3F`FPrMVb3OsCT at UDA^GtyANFK
zYRtsrt;s%P2V?E)eR=mj8jJ7MuJ6MQ!(W)W<8K88Y`_>R!fy at N^4M at y?d0wFCfcV6
z)jzh0<n5RybQeZgMoxyJ_6Uyf_4oVrR{#`~A=6sV0W9tZJWf%SCK>Tjbmuqv-jFFl
z+ZLpluLL&XYqtDwQRmao3B@>)m8|tJk)RdOa5im?S{F%Fidy$+t;di1_s31y;A5@(
zw~9e=*7RM5FiN83iIZZbnG?jI4VgPD;0?)$bu9d9E3APrhvP6#z%GyjLkpv<3q6jN
zGiYhh^_2%0h?>6TrPBzL{|p0yMfOl8Kn^6|O5%CqOZ_VqZB`R91v1Hm0tbQ;UUF=*
z)gNlCY7LpA$Unwws)-tHo at vr!**Q(EVVLHiy24ZhQ;<UA_6)hc&kTaOuc~3~W~o^7
zXi>aOqCurt9PI`UZ-sA{iZ|v3OKv;4 at Xd18vWJ-&*YtAM^k`|{8<L64&cPt?WY&;T
zV~Nar?S|%&TmE-LJLxU5mVD$&X*Q{|8S?nRCQ(cW`GknS;2CTam>l^JUd=p*y;%w~
zG#5{a=h542@&f%Pzg%fKMX}{rOi$giRjIE3oZet(NG1LwK;MT!3QPgJ{&~N53yd7A
zVWJ^dV&I9bZ)a)rgQv at BW`}cv$YxE_w4^TQRaBA9+%z?=3t31NZJol+*p4m&@#%I=
zRreO&PU65z>QlcL>>ZUJ)xmxG1qUmKuO^uwvIQr4H0s6X6Tw$-vBqT^RNZ`G6=>fi
zKJ~q2>#H^&PbN$u)I?$@8ZxV%*avDiq)z-p{F)jved_R$ZmdkNff`7(<Sv3I#Jkw^
zq6k}kf$$d^s#*316B1(47aA7AtG+1JeO{_-d#SX$o4mVY&BPUhy8&MfU at N$ZOCene
zaUsmrqEGJJeC;%rN9Pr*WQ$41Vb*RHd$=I5cY8tS`+}cKDgtvF&srbs`qMA1ZcmIk
zw3b6k&2Ccp{aZ9f0g~Yy;20<Ob3q7h2bZ<Q?U1dq+``4_MS+WTz3%W<_rr2UBxY4x
zxil+nA^vHn2QOra&vka#Iie%MY!KLCF<?Xs&y)(`J{50|5EhBKfN^8*k`7yZM|Xd>
zlgr($P27_@*nIPPj~+i_^g=1Q0>G;m7`s5pyBjdY<7$|CgYkM9<o09ciP!rndT(w9
z+27zS#@Dzb(YwMW!73chuwloe-RApLRYSQ{yrIhrx=$)^=-U0#qoYksLjwuw&bn>6
z5Gyjy*OU+eP8QYYi7=tD73UCg290z%r|NJ1HSY6aHdJdWxw)!uIPL^d<&d<2I{$Jl
z+u}a8sTbiQ>E&S;NsBMLJ<y0E9H3Eq18p#Um$k*J617pTHirwDGW$$PHo!TK_?!^?
z89&e2robf2yOLc_x`2{1&&$pU at _<$4HGcjCn at aB}@XsyeGnO06;mPwY66lr{%-%+R
znqQ at n#jyuU<@m}ga8x7}OaqaJS6y5_4Uy{%nOt^)10Eq2lATVk(fa;4xM;P at hTS}}
zBJo&pA_zxHdE*xVBD)6X<`^R528%XdAcZQZbSkThkSH5JL=rSRmXnd)TX(9bgnWC}
zu8W(EFO4lH3M+G<`dx-%74gVv)b1rwR}5o#6QYefpO=nxrvQx&&n=akJW=J=_7%K6
zKro&jaN5A_nz=d{eo`vzRRX})^SE6}Aq=XH?28FLaH8BFA|3<vYlUw?+mkX_+>$xf
zS(^~dDYWWCo;&#Ey%sOp*-n{xowE2~- at AxP+sLdCY?;wGrI-iq2cj*;5f}7%qFiY6
zu^`y8oQR4C#L6IJu`%lY{UzJ-9Jaop!iR$ZUbGm(dO^Aibc2Bp!TMofL7;ElR}OJy
ztxah~@6qALh|;|zjGYqN3^c)*@_FB<52|3&^pZf4yYzBFs+X!iIYtnG0~!-Vrx}D{
z*iiMRHIs`@vArlu*5mYhHAdgZt`*%SWlm at B;|8(K_~=6T$Tu$QmuLXZsV%PFMKaA=
z7t at L89UXq>Cw_8t{Ha{JE=CRf<R{)<UGUu%0u|S<hVm6>*EA~OX&Yi)9U%kx9Uu6?
z+2SvLve at uM$_-D<U{ot1F48L3LtF1R<pvD3yOc&{*<44)gq`jZxme?%%xZ(DoB7&6
z85!C<%m at 6=u|4EB9okqpbs);yKq9vMnB3R=n7=f}D31bR at GuJwHK(}Ij;Ngwi$WG?
zBj+Q_X?w5MKU~cSKoSQV{$OyU<!0#*Fx;%7BtA3CjnlQ%*{^lqui|Qsz@{_;DmhxM
zb!DxBWF#o3{ScX2&$mSaKT0l4ORfGPiI9}$q-MPwz1L3krM6>4TAH@~I;+%KUJ6TD
zE;QdvKsEtocup%PLqxRCE-*5Z>x at gpxQqgpkLwk0cElJurkELly>u{g8GIy)O>|18
ziI4YAS8DQIBJsLQRlEjgNJ_i_93fLQ$7Yu1>e|6FJKz)d;1-1Nzf5a}DyB!eL}$1&
zq26U=LI@%Ubs4w<T_HfbY5~aL3pZ`b(_pG{Ynf}ouXrQQA|l2iOd2C~Vt1h>S6zTf
zn>-7lltT#(;#nzBoJG1YsX7U95kwpl6FUgc3BVG8kODp0HC;sZF~m7+Nk=YzKw*&Z
z;R{fcU5 at 11<-nnHGa4%7UrX~|v at e#HA1)V-?{Pa1q4SE3D<&3~M6h}T{PP at v1mi#(
zcF+laK#+ZT|NCdgoxAQ1P6g$NDnf4|DkzBs-@>;-H$kfs<^&k>8Nx)9glO2r4hb^&
zx_B)S_vlB(mZD@$jHoUnAYzo4wp(J3E&d&D)+1<2m*@OE)xZoh3-0g~UPJVu#2e~&
zNWl)ll<jv1!Qz18w^DknmewFVoKMY{%U_pQ{XWS at W2L}?*BQhxqiKsm1{R3I)ILIC
z%9{t-HJuEOb~qLiiJGCEgCL$Z$ljv at S!yR&8eLnACXhr8v-nAd4;=k)iAa!|2FP7!
z6B-ZD#$n>^>1?$Yryw-yS>KQzo2Tbzo#yrRHN0H=!=|fa7CW&~AGRS`B#N5QK(i_N
zwLyfcwk&CgK2`XPW*VBh+Z%+~E#a0Vpv=+(X{J<O3IHTrzgR*_OzUZ<a|Q(s0w=Vf
zs#>uFg^A^;+ab_RTRg79b at Zd6x?icsez)FvW2%iN^MD1#DJ4&aG?c1{SSox&gmJ|)
z+N5g!WJgnL_{nmq((cEo#G(yLhpEvra5>T2655Ll4XZ05`M8MLAPK)AB!(y~o&Ep|
z@|O;%>Z<qbX|MYXG9+`=(?9E`b2P73`>+N=PIq!uo$<!twtwEgJww#xKOpV|BD>%O
zwR at Z_M5cJho|!+ at 6zq5`so1;iSU%0aKJuO_ukJUk-T;n~!c{P7n5GLxVB&oeUK+98
z33#Jr2fGhPoW}|=Z7pH8|3Fhf!06oufOm+L%-f3K0iDQ1fd5wi7Q}jX$gn;VkqR7&
zJgtTOGxaEyMGUo{v7V^S+u{*z3QQ2OMnK9f1k#hO+a`tu)0vR9X>@8<ZweA>w~=q)
z+!uOeB1hUIfN&Z4&cq60!hwBVDhHj at 0*hmz>EQ)yNeBet^e|!bfxEctgsSuG5SB#T
zyc`t9t^QPT_z_l!nv=uUSLydLSA0*u^a{g;v%pHj1&0$t|L}OV^$R7P&M(oeNknjy
z2*s at lfNbhw52v@>m-U%QuBFnuV%E<J%Oh3VDEvzZJe7N}EICu+9!wjK&Jrf{-boL^
z!+KD*bM;bNvC*xj8n|iY0utn9FOq5XG7$G7D-FX1 at ZZ|Jg0Yx+KEf2TyotyjK%Mz(
z>*AQ!KSY`z%mnG*%rBN>PT-6dnGt&pk%#dEHQ+#YdN2ob&Fq(}nNOh$>R|z|CILlc
z0TR8@{4r|q5l9lz-v}W#7(<RYat-d)`iOaGH8Bq92t*r5G%x*~Xe+xQows^Z-VJPS
zIe|E>yJ4d%KIXZ-h-ZnS*r`gK*wH at njbp}_WN9tA+KYlL4T%K1FRfI*{km<+y>hHK
zS4bn>QEjuv^P9gcV(SPcWHKrW$nd2NE}}p#nT5-MbUPSL3%XEpQyUe}iRQC{7RJgF
zvZjK4t=aS-Jw~q0rq7L|Dcpu2yR at iU*oO^ElfiJM6%lMsJIHketXE1Cz at HiuFt7~j
z^-=RjKpaWJyDzbwXq<_qG4tCr&?N$tP!H%wgtdTbVM&+>H18|`p<q<HfRQw{-Qs!5
z1EK*J)wR_Hu}TKpu+oP2Aj?d9n%3-SCd*`47?&@jDGiVTxRD_PXiP<B;~jzZZZo9A
z=v6W6;r4u3yn;ucK3Ll at BHBa7vU4vwVWwvbr#FsJnT6Uj#~qg?v{3BhGL(&eVdnjl
zcsHub(z-B1O~=xHqBomK`xs{m<*jht5hwDq06f7-jN<>f45Fm)e6x?ME-{IY`hV%f
zl*Z=ftFo#0A7vKxDbyKEcFCNO>hB;wGu at KzSDM6ISn5KZfqK*REltUPL5k{%pKh`z
zMp;eSyeygIz3nQtsf at g}Ed{Uft?Df&LPWM0bRjL4IQF5WJ7JclMk;_A8dy{KO+DW$
znwwu8sdvuaak0Ux=T<%Gavw(Uc!zkCo2U%P?z|IqnKAK266jk7Wiq_00)#tLyi)CA
z54)FCY6Q7;79EWBAR##81$F`oVGaKWe-McBDpE)<p%dFD(>awv!n~bSH%~!9wUEq6
zd7sI2`W$8cE(xtsF=@p!8l6ANrf1FP-c^66X<KK2ap>(D=@YJPnkNKG=m$|ERRCf<
zT>LwNn+38#F+-I^MNSJtBSY*CSZhAeXM{GsmZcC;1Dbd_x1fU3bSvkcFlmC at s7Hot
zdTHEo5=HD1n!Ob5)8&FT0IYIY1Kg3{bhx=fW4DMK7o6HYz}{(UDvw7rfIL8TJ|TzO
zAPy^<(_C`8J+2$MnutzB(bPuRM&_~v(O2KNGo9kR3gxJagPQ!DriW1s<e)BYobqhH
z*7t)2#2QygTBob1NzkmZ>yunUX4h}L0~R)EDkJc!h)6Dl%4^Pud`YH7d&FdD$fRw-
zd0O55BQsApgh9j+DeXGqGxUdIekpk5=$VA`4KL!;STcJo77eCX1he6wjA<lr%TQly
zaxHQs>lbAw^@-Q)4}^lhpxE5pqN8)WLqa8CrdcAR0VgqDQAcE*+O0%EBXIG`s9sFN
z`Dh?i0GzEzG%KpsZFbT0)|K$v$f39+Nb9lrd-}kb3tz_K_K?6qq~V8CmQ<RnAp`+B
z&j{)*Bd8nQ;3i;jy%Y}^S^l;Iuq$BG&VDS&9ea|40Cj+3&Ieq6kVBi&S`)Vz=I`bz
zV<dHoD1P2#Cqhtzkkt$vo-SUrgW~WB%t2Q<Kr8Vjlwss{Fcg8NYFoO=Ts=twBhH&7
zI=)Dq41;54HP!#xX3QycnjYOtbYfXcUdM?p-t9=d-07C|B%+VjwK6jvSq|IixH00z
zNpQlB4f0B;i+Cm-aRnH$zQs?r1A<kdmG9s0zsG)Sw}ft at Uq9EJmO6bqWb}&L{9SSd
zfJGBmN{K4*p at RGw=Rx+o(n+Z at Dm~sM`@q^D^b+vOC`J`^9<lO-6~X_t2s~3dz=5+K
z=s(PMj63N(nWW{L-a<f%p2*VJh)l+o^U)EcOGJ+WuLek<jfKS^&3YQhqfTF5$=!J_
zF`F~nv-LnPIT%!66by-Q!L!`y7LKBVG~l5x$1aZ1qBhpr5GTjGauO|=APCx`Q)KS@
zt^%U$%HjIhn0tTY?Z2!UsT2?d;#7b0Fcm_TgLp#^vRZWK-8(88U*S&H-p?j#=Va-U
zJDuETbD~s&&C+5J2;J$U%pYuoX8k}Jm_DMp0~fns=nxIaT0El1s-84(d~l^Eezjc@
zaAV`)3ULrl2dnkJ#Iz>?yQX5{<Nr&1wrtU9i~+sgm2D!-xr_M!Ji6!dEi|1g&Qg!m
zmsmNy+W&1m;E at Jt)Y$DLe658SFi%}U6ahK&tmCMITngd<Y6~pLDsq&NOBBou(m{q&
z%Z%r8Z_7?tMxx1UVqLo{NZ|)t{2BtjlPyWESV*49$>UzKX at wD#BE<77#?pikd|nB}
z`o(xuf at ZP`&5XoD9Lt83_7UBH%ZYmSfTV~%_mq_YmfQqO=}jP$>rDypoby9EC}4V4
za0bQnsyMrbPr|VJc>0bsKnM>2Z>;m4`XqfV3pnNm0s=v8Oq17BVq at B!X7d%m4T2&U
zKQj>$60Ppr0h?u2$|;hs=LS(y at AJvmj~<4Hx&SDRAya_I9o2w;Ns=GDM;y2Cm`kDz
z>_|pq5$@SWTs!Fdsa>Jr3yei`9rY;+;bk0y55iHPV4}!<4OA%AZ7rb;;?t?TFV9Wp
z4+jK%C?MlA*h(S*p4Z+sA)Qn?FXZA$mZ2fC1lwrGe$<iltKCPu(M6y-;ZclPA5tKB
zA{L#rG2R7mE>P#DuPOCK=d~4FU5w6aUl;tNO~}5tIQMXF22w)@cN1rjpvlpz0Bb>I
z?iwX4_h>gvTbvBRPdI*5Ux+_hG at BA9V9`t;s3sp!h`xx7A(;<jYiP at _E*eE-osG)r
zK~P}`q=reWK}w$$H5?&Zc(#l~LcInBA0X1ni9`e=t;#tx0uEIQJ7Y!THoJ_D79u{7
zVOJ}66e&c_2j_#|$BE?ayhP|GS|xb-V(l1TM4BRF%#Zn9Pef{1`k8=Fup=b6Km=?6
zZ@*>fsf?xW1*j&TOd?f`h at 6Bd<*-}0MD9sFl9{2`4w$;+jt9HuVv<pE^e4<FblACN
z9(g{L%<tH`lIpB`#G at DUmjio+E<|t6Dgo<SBsjas$?FmDE)Bf_UTk^rX}j<dD+V-B
zT~%|Z+MGrr8_6KHm{pk|jE&UH+%t5ks9J8ihh4_o3gN175Mi_z9L at CJUQ3D4$Ee%3
zIs=p)0yT75aB^9E0y)51t+>>-giCFg at KVmbEnK{Y5W=lbJhI?iMIr*xxmp#Id50wd
z=NImj at YaysGy2+WKN0Ca_=4;q)$RF3__^~$$uv9=Uy&g)n?=A<1VZ$MQqqUZi%0s3
zu5#st<?;m5vb3_rQ+d-RMO?ao0%X9LJs<Ja2rDZTUdEl54s at 4n6j1BLO&R8%(rqK^
z|ME)1AaR8g_l#Gl9*{DC5jv};P+=d%T2P&ohv*!FvB-jv#f|JS#sGw(#3m8YAc}EH
z$U2eAoB~0qgcu#0)}I*53YhR2)`}TEf=(o}inGpMGOt(?PW34}c0bGukSAT$8cSmC
zgact8mvkhkLt_zkPnhJRkI<7M$JDPd0T?g1Q{&=g;dO2qW*6PWsM6m-XNY!FyFCsI
zPq3lEw2G;pOJlqRRZSGTY}>0i4Ui3AuZW7Z4Jr=QB53!@X5<;t5`cX&+u%uGUvdic
z6>JO9;icIOIv+PRZo;(>Zg~5^O;?YkRdTy!>`L5%f96()pcU+aAD>_o<3Y7~r)w3@
zEu&}HzO%#A_F@<+H^Rv>1ci!yh)~?CB at w!B1TaK(U~CU-^IAiDh at 6V&$+?3|dQ#dW
zKv*r&;OdLT-nBYc`jMOiYC at a+T)(<}6Vp1WV(G05cm^0{<q0t0oese3=0_qD#RdT3
z9_)ac^9NIn^}v at Roet7G`addq7_P)o5#yM8IQtOcRUwo{Br=M*U;tvd;)M7YtB4}5
zK1a5f$rIO;IW$?$T24FXZDVxbFcP#jkYDM!<X5t5$O?ay-8rdJuWt8=t$@H)as58p
z9^@)9?^@Y_#q<CJS1>w61gP<W#xJpj;R|jQ3s&*y{316FbO#423;0L^Vb*SZQ8?|D
z%+s6_)P>yTb>|o!z3fm0&zFU0P>CZdg%-frcu)GnTo at 6}D11<U+^F5&$CBhbqeq$B
zDscAx4&XqYykEN($jYGJ1r8#-{(9_8=odJvfaw$Pgj<Qf9<T}X^GSe(We)bv%nl(4
z0Jt7Qk;K)GXh>>7lmH8u1vhyKmr#iTi?t4X+d(YuCkeMoA|bccXux$N%`1OWQZm;>
z+f7y(%RO(1p=P||Y;(C>H!o~U);dhflC|ijA-n2kuXPeTQe)pZ3tid_5wIN5Gh%1d
zve`PEXxMb1Zn*g!-H0)>#B00=_s2zKd<N4#m9Hz&^6BU1U at 7G3<XwQ%7D*g>uwW)b
zUsxS$<y3qbXn`M21BU`oUZfKyfKZqX)EG6PhA``g8{r58h6o&kOaa=wV at u0AiU67r
zVHi*HLi$UlJFF8A50>qz9(qek8AQCKBFpDgnvp^DWBAz2nuXpppp?}GVzJ9=MOj|Z
zSMrU}M;$if(fl+5Ot4 at DtYH#S$?kMwPtOd>dx at PD8U#;H<U$)&39&E8i9f+rt1<4i
z?eR{MX_8U9Z!oRrIS)2rOn}}ll_e}0tqZ}lU|YW(>`*imS==+|77f3K_7egsyYU3F
z`5KNe#jzhXpme0sHF)--CIFrc(JFvpNSER~k=i3DNe9r?Vlo%(CDe9!b&MVxnswBo
zVE4}9?P&uR1vr{45~Gi47nuRT4sMd;NRF6y1KkXP(<U)NjIltt`b=YgRm<t=r8bQT
z4m#2V`$Jmnb1e+TAu;s-yq&?Z{SVNkgQh&4?u`3O|N6vf8^O+DxvbX4%aJqwaZ0u;
z$ty~j9^_p7)<k>#EG2mztB$&HIB3VAz+LKaJns!*ld!R3>qyjL(}Vw&8iOjrwz~%P
zH}cTPD#2$0ze_kPMt*kyNfzSH0<BE0U4P^Qh9M05LLz*PRnnxZYi6CGa>W|UQJ^ph
z3Ol$Iqbdy24wo at ze!4`K2r&$ZM94 at umvUPXJn|B^9dRsar-4$xf2a-Ms<nnbl&6Pw
z&z at sZgt}Z3pRBGzVblR4_l6h=SL at q*I~G9-!#>3CojpB2<<DjQwx3bPjBVh(7e+T2
z)tzb;8-;+f?bWo^DlMo=?XcPol8HBjd!+MBiTWd`Y<U4mj*vwd-^yZ1ZP2-Zqmn$9
z0Fr{zpADroJ1>N1+`u38dk9v*QpmyGgR>{%P4*8RxterBPuYCSWm!-o$x5O^DhNOt
zyeLkPUvP+UqchF at pZf2cSIkq{4jL^EWj1bj-U_FRNZrz&P_7CxB`bytS9t8fQQ5zi
z9krzdL}~$9-o8o)SBIEbkQ$)+8UMQTwV$!{YlnzAiw{|{_~ddmAr;X+?%&q|LXD27
z1pq(CC=CIvcpMPR at 4ZktlCGR-;MMA?#{}eXxDvv2`WR?8 at AfU7y*(Vkb1{l$Ldy2K
z4mso^{FDP-cGe#_Tq5w{31g5NN=v$3CC-cis5nZ~92thw43FM|MXhR at 1-e!EDTW%-
z5aOx;h at a!b6#0&l33TE#krRqPt)P_9rj7h_X~h^oB4#T?)~#T*{;yGq1<C`llh5`C
z&w!0TlH&rC^R?b!w#lc&5zNgtkD-<fCNWnbg$0dwK83&l^gZn$Sn}M=7#f*4T+Gqk
zi$i1K2(`(L571WV<+oZbdJRdJOC$}j$?|HcVCrG*$~*ZFm!l+L!0A>00~rt3rO!lE
z$igFIl0I7_L?msN);2795ROK;I7~c&5!Mc|aiq}>t;2~^awoU4MuOQeQ3J;+cB0Wi
z3#0ZE;+U0>z7`5P7bU8iCF{buld5qzIN`xCRJl|)<GB=EWsvnX;r7LO8_h#c;~}o-
zT*l-O;^OlBOd3ftS}qjt5PHr%ZV;LWVix-;gUG(5nnd`(?R6Hy`K at b7><YS-#Ps;I
zgX;0FKu at vZX@I_F^Lgh4CzhfSdklzU3=AZOl?a!O`Dc(TX;Wy_J*q<z)Im$A2>NiY
z{%>9Qau*(Y0XI2`eVpk5k%!C-6bv>;;zOQyvWJoC5fNP3=R7UW2ownK5Q00Dx<~Ab
zg<+ at N#|4B1+?Gel)8X*qNs~b_vKO*R=6)S|Fm1~1X|YY~fF6holz-Cqt`9*<tae4r
z&bP6Le4=lyR-d4vB+B_`9s#;`lK8IsOhdH5*Ek>eogB$UB|^*HrF1BDNQ_ohHi(w=
zppD#-EG<_sK$Vz{YZ`6nXU76lhoW~j7>_o_s134fL4^2Rg+ZXJ)C!<UAX?86uEPM~
zNJUmi48>>%VomU2?3qX+g-w&&MlO%KoHP;&PK{u?36z8%x8>#6mITT~7 at R0)|4Qi^
zx28TKs{3yvTYtjtf+Jjr!WvHyVlYGslGzw(7&C6F28ilsijYy_#4i_HxIgy&l<y<4
zhd;hqv6kXK*{-C(Cn>IM at oue^?Yh*LO6Q*=Xvb0i1BL0LaSf%nxW0t{D%QiSB9(|9
zBU~$rZ{jh!VLOUc;2Yu}3a^ylfMRoX_hfmA%vddR;%At5+a5SKGKZ at Z*a!>ZPokFL
zN1|ulyO+;pm~K at ua2xS11>-kcEGm#@XU~qNiE>^Ly(h0l-~ddba}h%RS$|3apRh1f
zTZ#jiI6nOImZc6TRj1;#%RBjxG+HIqcafJX%yl-Ym8?F~b7yH4Ks5CHp`?|@q*QZ9
z0+Wf^@Xw-{s~4l-87?BJSnK5)<*28pOCl0>#$4(VfdV(I&JiQZP8njfAGF9=jqvA$
z7u$8~Him`^CPY29rKqhk81jRsIXZENMKkwAk1L*%gz87$yUN^p;q<UWSpq&~Z8*Nt
zXDV1PaY%H_aR!g~4;|PcD2VH26u87*AoL#sr*lBTPz}Grsvgl0EK-QaDUr9>ir#mF
zpf95Eu=r-VIJ)STe84R1H{gOZGmKH<hF1LR+l}u;<#_x0J3TDfgu=q7 at E?Vv*m1A*
z%Q>|YM&RRFSLZ0WuEo5i5oS7St1mBH6_+0rh_amo(p!J^<DZMh%5wTR*w5K9pg_Nq
z`{Gq5=rL#Kh~n~CT0&0`A3 at 9c1xq5%7{V=f5O>U=30R!~VE~0!00{-JNDM%an3-hU
zTl5viJt<6gXmzc3af(X=5XJhPa*6^RTp>(k;yKqAUuVphT at j7}#^IH0!KeDzZg?RC
z;dGHz0`N!xa=d412 at n%NfEY(I<E7a4C8944iw825twXpcmu`kIfH!A-bhS8%p;b&k
zw~uwhw68(ugwc<b51(HyxAbIi8l_P$KPHz{5Tvhl`2nHHft0`kBtRxErtq2$7Q>KX
z-gq!cn6U2J=NGqO{2htT4+xEM5WW<uk|rhKzlH~{E4=a`al8!+sOqe6iYuB`)o$~P
z$XKEyOs%R~a^@MJ@?k1}1SttkUf^0Dk6bxrk^qQ4vw!Veo(m~~vU1)NnNn4^>4E4!
zq~D<BA}p?6rZ?)W^cb!RF$fL?MxktqoQsFU8Df+%Gwv=8Aa_zVwy1Cd{P|w1OWGU{
z<bqzyN7?m^ExB(jL4vTShHN9^7kVoH6MEHSO`|oLwAsWC8dne4A!m&Qf=(#Td8i!S
z&t(ZRiVPM?i2DS|U{i7p at wz5F3#8B-QbjPI#4+#Yn+cE at q{mV;(bixlf^vdM)T1D_
zJ6B(DpG^W_UZ*G+EPIef6&wpNF2mO-nGDz`d!6wZVPbe7vv-Y`VQbfLE9lSlE|rAP
zw164J5&;S3rSpMZZgOci6lCCh?q)djU|nmkcJ`M`3=LSoam`7$eejnngiakCAUZ60
zl4rFajC*ep5=5j{kbt?LFHSVOOY)?1lHijFcWnR>V=o6CR1wckhf9Y^fsdL at Xy>9o
zxf#44(~KYQ;Y5O)I+tJ3Le3Mrprd<*M&!CzI~yLY))g>BxMA;Rb|<OnmA@=r{v2zJ
zo%nbCu%nvb!WLy_`K3IwDRS6u#el|62dC3#mhDKqnLP4^E)EZU;WU~p860P!t_)e`
zA(6Y~jZa-xDHcx;eMZDiXUz02z>e7ObYgl0DtmfhO*ypzFE;t*im7q|>6GG-%6zhJ
zVG>$iTzoLU_-KCVLGk2Ck!O*VO!LTZ!i+T*0U1-TSsCn9T#<$BiwG#=#{k{46Rnw?
zpeP*>GFUhS!Kc&J5k!)feTW|gay^q5m*5nH*mguKD;q|Pm=z51EKXsu%AQJ6dNx*+
zpBDW^FH|ogM|SiDmT&E|qPg|eQSss&PIq9|NlGMWLop>1*m&~85qCNt{auv>(&11+
zMEs-VuC-W{d^B2gTio};?x5ONVtP{3O0$UxU!Gt5W`1P}Hpz6piB}K=)`;E!nn&U>
zT>IgTxjvMf_BoUi2CeC&kwh`q2bYHj>PAmjOZ9{^wAow9148dc^})+kyv`+g2;`9D
zghMqqKcHxN+B?0yhMRzX?<YCskgb5bn?s4+sg0wR0WZASMP-BwhKy|CdLR^vjho at N
zt7V-%v}Q`5dDO|(?$KN}di~4ND-wphmc-YVQzD3AZ8*zVcW(Dif(3|GgQlol0>Isq
z+G%?I1CtFo9X#L<c`z6`!;#ZDbQ4bvoLg0$YjF!oJm}$+p3~JWl9wuli3?_2S1EVX
z0xYUtmRvj8H1BkVSC>%1iJdT??x$#x<FN_Lwqoe9`>k>iLW~sQcB at 7P_uH*M(Dw*d
z=O66?4?af_h}S5l15<~Ln{bO8g-cgh<+4BqJ}xf-<5Pl95tHLILR0F1Y}xOez&q?0
z%@T#*mmO&T`0dne*F(K>wNK)WSU$8(!=K}`L{<rwbogZ~$=S*eRp`Q*i(EN(gyDCQ
zBaBS-=2-|ioDf)YRb`Yy0s&s%uf>8Hs#8h{Yx&nwO0u*t2B8qgg^aP1Qc%nXj=}|E
z0U2SAQi=pQ%D|@qSm|VhefeE?(ngtc4LtjW4_OqIUqeO4wGCtATw8BP$td)kFSZ1Q
zjyik_DjlUn<rp&h5j$GICdwt)6pqbod7v#~*0 at X{k<@BRa=RTRH{9k)!c2{lTe$6W
zdOs<c%~$2hrWobuaBF~1rxQcv1gZHeE_6(wW|#<Tor&O(0uaj{CJVd1stcc;PB(cI
zc!18G9^Tp!@`S0*XF6dRoY4vFR3}_j(QI~aWK!dbNks)z5^9hg#3oz%vDg;bwCvLH
zfaLG7_=u~Pg%eMrl0C5t(sM|u1rb@*L`bWLmvFXcXuvJid1Vid;rK6lS10q30M1$n
zV*;BC<M%P3Gz?|T-Y8!4E%bfemq59VnOz1{Zw+Q(FK+eDPcTt%*0S1=U)q|Xy=ba4
z!yW*)2qzZU0v6FhvED;QK`<AQ-<h?frHN}Gft-nCm5n$PO56}4=@;0%e6dANB{mo~
z#PqF3jetA12y$#rbcP|iD#sXaTNZ$Un3o>V!~%RTDq&$oT<eXs?dCV4>z8K_(5XR@
zHcPS8Iq2uqDrpYa8_&UHjGTm_6^;+$9E9GmSBCi|E_^nzr^-wMzpa=rG+;|((L)%N
zk$GVN4SPFU)}Y?XyW at OoC<+vixuM+cSuzPU at q}!h3&FaJ9JC6yMtpE2b8QQmfQDr>
zfwaWmC7?S4F}8|?w-V7`)<8n&Q&rx at jee27GV0<j4-ek85HNy^#|Wc+WIapX3l~Qi
zn*fAL2{W^wNfbN;?4;oo?~MFXqQcWnBhM&uvuv=|P%Xs at nS(GJsR;$P%v}3A<OhN?
z4Kn3uP9Iu&nKUP)Ip|!<IS=DmSX7jlkwP+ez)X%C%v|ddpGJ%so2ohRGy*eJys(r+
zLD)?8KU=@#nwf#lVzfwdIhx^^R*tv318cO~+MpD!z5xR`BqQbKM<ZLGNtMEyO_>Bs
za0^s18zBXerRQm}V(t6RY2ZZ(z1e(CQ+^LoWFz8*C9BL&BsB!sDD(^H@(jL|bz~cc
zy=7DVvsEFM0$@iWJpmu6?Svr8>o|4+o3w#6$BqvkH}gr|n2URV8`><B<h?9I9xgu$
zP7M_GKoEciAOg5c%X>$NoOji?>Q79S0eW|ZB?0-KZc8sU5wn8Z^Fs#jKA^cDOmYw}
zw+F$*%#ph?d#zy$-ZWT3J?NN6+(gJlBvcCSJhl2i)o~ugE;;91 at xkaRKuebh3w|(Y
zU33qKjRtP7))5&pA_+i$Pp-s`kb9r;5{3BQDY}JC66qHO;Q2i<jU}<Tnqb?ZQ%-}{
zz+GvKFCCtf&$QzsGzQBZLv=rq5n#7F{gdG-EqNd$xw at c~eR##gSid-bZ=~K)7g=;w
zNyNF3YzTi4><T^2z~;y=3-y^WaKm;7$$Z^OMmv#Jk|hV!qDne1Qqp<hVgTpypGh#5
z at 8Do}W9Q#CcJ}Kp_x9c%yu+`9weL1w at 4-S;{Qmb8h=8O<ZG5r0`m5cojTn<}6w#y9
zB)iwVZ(9++MIv=i)6O}9Ob+J(W2bc%TM1YlN2JF3etQ}<0x2)2DJisEEhEs at aM)^}
zGK$|FMEa at JxtUU@NTyhlQ7lko){a+?kt7h7Bd&?L`t at NzH<-bfHKg+VXuKpx?z_Ik
z%tn*6pJAs_wkGRLjPGo(WPCrqmaIj!W5jO6o!9wiy2$1xF7M;E$iskS@?zXghpXm+
zRC>`tn23{gug&TV;{cuEXTpw<k9iB37IB!}MszOW;pz4)V~(3#vh`S>dh1EmmnI~R
zOOyQv^d)V6t-<;<s|h6xnW)aZXoL_&4zEs74Aw0QCrBm+{|<N#LrCG%Ow2gIe#zV@
z*qq!xaYw6U`%4Q;iF;B$>=);<QMGy$>?njPY}m~JC`E4Oix*!N=uhx2kNcP))pNCQ
zR7W^xhNyx4ipnPr3^*<5KDlDCbPRv(g+*?3_y`-_pfl8N8{6v#uiw4e*x6d2W4HpD
zK6aF8hDHE%4F|GX!_#T8hwYt}G&8dzkPE>)E6Q06)&CWSQG~l};2(*;ad5D?wY_n0
zFuPEf)P|9TYAfYNAkdDfX-N^4n2e6bLh{EV%dkk1Ok}1EFT02)jwqw&?JIJeX_0bB
zr+ZY2BsJ2G%LgKM+C?`bBfZS=6=a<GrG*upu?(mK_!-dzMWJ&l68G{B51f&sdn;QK
zqTsw`@ru at Z-PYjs;aheUW!XOOs>SN>_BJ2yo#X$dN6$Ct<~)b9Eu54Z`)M|JGzEI0
zf!k>KaoF$O1C65!lM?qWDRKY){lG#EA5vT*;iKblr_)}hFyeGZfWxQq%TUvRk at Y42
zVXRi>Mdvt)V+4WvZCFFK>$gKU(;wrza=seEONXcU9u`#UQJGcsLie(&-k`uk?*On1
zc$g~W)W~2pK_Ca{3(#VOmoyOuWY~GpX~SP0!G4`!Cu0%kl$bwIN)WjZ`km|Z!=L>$
z-Fj52d-}9VDW#A~zO`i~@J1Z_mT*po`=g2zpfgJwm0)yTlG(!lp&y+eocQwtz~-wC
z>_E at YZ;Jiw5b!;8KcEmHpx%09WRrn&z;-$VWV{5s$Iajgun`?R)+>PoS4}<?MBS^w
zkL-MiFv!g{`BLn=Iz<)^`NQWaYmED6?ZP743c|VhRfRYT2b>t%MQ?xcy?iX`$Kw0@
ze7Nin=lN^py`dV at sKDW-R+ue;vS{vJ9r6snkf9V<dDwdQA- at xh1)dB)hy4|slHhmo
zec^-RmXe%Sp}PmkWTibe*9vsHTQuM8Z0Uau`Xq>SV$o%gl|bslBjp+Xgg%7Mft5_O
z#SKqiOSA%EPNedCB`ebG>FS-7MFc`h#|>mq2$lt at B{tyL3VUYr1(e=m|EnWXNzwe_
z$A9-D=l)f%_Z}e6E!|)Kx~B7jpxwRwrT5`rIZT6%$37efkaQY8LG|~(KD1C;rrtCi
za{ztKsi_Zl8AR6xSOCI0$|^x^#me<py0meIEXt}b at rz0pa`IPaDBe|MjYL?9T`Kat
z=ZWkBv#+cRo41PhiT-(k(Tt7+yOC-tpp-iYDVWoN;%x8yoO`gdkMrYWh&cny4pT3V
zYP>QG9|b3-PNo$Rn7s;XiA#E5D6W0z9+3<D86VCAWY6m20;b+bPeKs`FqU6fZLE-f
zx;B@#%w!~Kms&UwN&1S^!BchW-iL~#^mQcV2`m$9LHMRA{%QR<DcRGMx-x+SUUW?K
z4cQRb|GJ?35r0h~Vte^0e;oU&mn=5i!BVbD_i<Q(z)kth<pEsMheAQgS-G^sK9N3c
zJM)@gfpA`kzmODu4UV<(!3*<T=QcvtNdUk)N2yroDaDxXN%VPIrOj)C0~?68`nCD5
zm9Vi1#6toAK*R`ETW9r|_^(97u!txU2snAzIU<gf9T;b>L{Vthd=vNU{rdZSUNj#e
zjEu$+g7$0eX41cK0_en-hhU(#uqjhQ6?LW9rpycu5o+4LB?Gs!Hf5L^`Qgjs&N;-j
z;~;`6RLppA46>n1+FbE?>01vVrgh7DFv7&ENYyz)Bnu0;KxEF%FV8~kTllN at EilK@
zwEox at q)tO%G_bQR({(6}OHCH5xNS^uFdH8i|AtnVmLD4;xW(4ARH#J*D)L=iVCF8d
zBQg6kj;^$jOdl8u+gc6a;>X-0Z&AmYG)zb%074 at Bb%l1R{@&qnm_zRa2$V2~PTBq9
zT)E-dg$%y(>-!~u6>ML;vW&ocNA?a5+-;V`U7V1BzpRZaA=ziNqD$*=i7YmqRv;>p
z?w!+a%RmNUEiRW^1fgJ0x3?<=RCHZT6+n%0nPjgNgycK(7#=j1zeI=35{qHm%3eNz
zw at 6P$COAUDJ8qhgAv3-!b at po?-sgP7uYHN5>Z-K0U#C=BH=$0CDeMIe0RDor%z{{q
zup7a)@07}Ag0sFBE*7#=T^c_5Icsy#prp-k4377_i0lV4#3nb}#0cjd=;Q{`dJhmT
zg|-MYE5Z7r+1Be^g#IYax*ms90wC@^rOhaGVhcS3D3VIvT(%?GX-|S!g}(TY|A5S=
zsNTaF9iK+{;4zCG#9Wc30<SrEx&H)HfQcgT&IdERs9Qah&dUP#oFu4*{6M^cfX}?b
z_Y5IgErpM%L2`i((FW_L4{s{JFPqF4Y7+M(+WmT`-{x7uN8{{xVeCa;Q_x7alpy6Q
zDF at j{y6Yd`w^ps1Y7L>+(lOuIwwmKe&J=9_$S^h?>G7aVFgtm<wy#%zZ$oLjk1)W6
z(4DH>O#ZR5Oo at 9H6PbzJEWCiUFxUI-Qzi+SCAW2@vts3-bP%~qc*)le1`sEC@*n_h
zP#;RfA?))tI7H$6MOk<hd2RYZPtedQ;gJRZ5($OF!~OxH|G<$g)PAuRd~g(EXphr|
z_{%w}$Oe2c(i)-MWJ&6t#t87SRHwa3OiRmkk}{W?DED3g8af+Prf*bNf+yJ&iR|gf
zB|n!Qb1#CBx`oDWMO+Q#xU=du2}l2B)%}QK>I)J?soaB+<BF8&IP!I{b~6H{)6Jb_
zGChillU`H6n`te#S|O-T!2Yi`6w(h1<_U#a+f{f~(C&2yc+2Tk8E<wqRm!ZqlajN9
zeE-ebPD!P#S0qFd*Uk at bM9gqD=3SI_;4R+VsxBiOheWF)9T<wuN8Z%Sj^vC9<#21l
z%8^}b-Sz;=&}tnSICzUS?v8m&63}M%f=T=Kn^v{}-}t55?(BT`oXpxy6WZ)WtB1~-
zD+r(^%gbjYntn<~qtskBwr_HW2)2zyR)2ho!6;n31sundiw^)@tjqhflqCNGP_`o|
z`RDLF$6e#Moy&FTS at 8T)>xFiIc)_ht*+ks;^j)^;<qd*C at dzyrj%BqK?Z4a>4$00i
zZHZo%keMOK%S>u#2&Z~9BR)*9i(0Nph1cHsG64EeIB3Xfi#O|#+#Ys%vU=sci;uB=
zrETxmy0VA)lxj_XI-c3qo3C1f4`Q{DR^v8THCrPJmx6Ev9~=xlW!pX}i7t|rRfw+o
zBfKT7e`{0=dUK=73wGSMtzKt1)Z>cj*J93tm<6|Yrx{d-pv#da(B!wFI0N+QQ!Fv%
zy_J^ERxiU at SXBwq(3h{wtm$0rkh$W2BRj{9Dq+Y7H1$CwdQWQk9#T^Nl(CEGAzz)e
zGa#E=WHIEta*Izz1N#lLkx2qNzDnq^_sHqYCxV|=Ys`M69G1iN_VT>F3vc)RCY{2X
zjB173Vg&TLeXiT*mNT)u0ZKMF)UXYugc}L~W_RP}Zqj?H0a6CuCWz6WRd~sv53*6-
zqV0nbDt}#`PoY$QDGSP59HAaZq?&N2GunnaPC4Ec;1JB%8DjESNCLhT0vQi~b=GlY
z5BGdzpS!$GrqB)e%TpWhd9pXwfNxWnK;r{o?<H6>Y~{0(E=bZc{<_17NN~7miAPh*
zZzx{IpGq_!-J`2Eb~q4_ZBz^g2!R3i+Xl$_;O)+v7w^_LcH$+){Dgkk9YVOTCd)m(
zt8UtQv)VFM!gj!M^Y&rbqupmr53q^w?ZiGp3ln-lu!PfdI4D-GE`*=M%ZYt>{Rv%s
z=-e_eRpQ2wNCr6HvDXv3iET{iNW8no4rZOcUw4cqv=Do7>QJ(gMzEG%(2cB;bm}jj
z)EBVnb{h2`&yHSpah#<TG{O}SS)Dg8K7pLAMm0t6K|w2;>)L2(IU3FLbWJ2ncOKw2
zuaoib=jUgy;M)L66{+5PJfaM8YK{V?6kQXBQtZQ|%46Kk?$G(W&@$!bu}#ZG at K0*{
zCHz-#IBa8 at +yf@LH+|zge`eeI-%?c<2q+PfG3BTlvuG;tlXnwsR*v-M(jpSd1)0(L
zf#H2yG6LJ=Xr#k2BjoX^mWDq9_*k#QC*$#!walYz1eQL(0>xHxgS7QG{SMSGWZ0du
z@!|FP6s_)EpKGhzNFSWEJhF5UQ3#qcJ at TgA39Lr-(%I#Gf;cVI2Xzz8DSrn?;BnFS
zGr21-xrKcvZBRAN;21M9o^b9o?Qpb0<!HotEwCo+WdEkONMuBL&)96?DK{+^wRE{p
zh$9Y+Fil4Uo|B2VIFdYe!N6ZNp}cF at 6)%+O6#h_nSdbO{DY~Kd at aqH&C_Tn6frB82
zd|K~;CugG<U|k*zEz8qX!XW^c$dC!&*<%6Wd|Gdc8`Q8B;;4|;7gMsUrsKu%r+D=6
z;mX6}*uo0C0u7fy7<;YRex^02eFaa5uNIdU;n2fBMV~3-lux>Z36<KGlQ1 at fE)J_V
z$BeDfs$o^ldsx!bVjljUm%}lLtDRS at _^-a&c(a*<qduc6>@r_V;&)1lpLRKg3XK{<
z;lXAjiB^pD8VcE-h2>A4zz(b!=Ii%v|FCBYpyq(EN0k?l?OnJ~Z0XulTyA1V*leA3
zd$-<)c|9fYl4`Nlo9}A!BJPgKLno at -@l*N?+q&;PX*G!D;dWN?oCp0<S<G$83xs)8
z4CNj9zUE~2CgMG~N~V})ygY4RpbPtQRZr`APEH#I9m-pMq&P{c5M^b6A$CRIR|gMX
zL_Ut_0_!i~XBS>ZpF11&b$F%GO9FE{4KFNtn2ag&3-l%?wV!qlC>2KzS?t{U at E5Uj
zgGxKM4&Q>9pF at 26U^!eJQaAzXoE&OyK<&()<yc=$SCW)t57|21fVYLYLA&$b)LJ<>
zH&<L~2h;^8=~A+uo=fz1+#~H=+Y$b>oWVCBr6C(BoU>&__A at Y7#Z7-&E#6xb;U#GE
z8Q||=cE5y2s3v8b7U&~5%~?GJ(wM8=VjDmPNE-tZriYl$m@|4Yle_HKuP*GstcJL5
zV~PyDND}?|yNYa+jK`zskYpE7f5A6!0TSMPP;-!s31 at 1`FYJCo+`$%>kIRvda9sq~
zI}q0>$(xa<c0~jSMnT8engt~I#aNJIqfiMZ7(+&(Es4;iAW8;UjCovD_*-+nvzghr
z!JY at DpAwHoscdN!Q=S`5J5eygr%~2yf?BJ<sF>~ux1K~Pt|E7DMV_u>FkiA)I82AO
zK~Du-u(4}LVvLGctO%jD7r1B(Zq{GMgf}*I)+R1U<A$h&Xk}G70~~F`qy4q^>urrc
zDrW}(q?SEeU5!_Z5rI_V#QTv9j*9fiS^#s^wN(9qZyoT3%B#zXPT(~uCmkvJ-DT at G
z>8ggK8F#QocMKQHgAce;hhH#`KbE#>&1)gH_vtz8N;cbYQ1c6Md?L<&isBlL{=R3A
zapaRS3#-A4 at 4@1?<}4<7D7o<2g3;5M`gI-0<Sn|+*H85;+~?~!wZmh_&s?1+Pk4Zj
zx%x4_)nBad=@A#QN64`R-tu!gLPxAiANh1z66rjK0W>-vhq6fJ(bqAj$aTE~%^Qdo
zyl)&~`Yo~nf)BJ1B}$G|&_TfUW84^{$HdagH&FXAu=;}joYhYl1NeLSQTQFmFI#xJ
zNE|U$YsBbAH8jNNwG1}_k_TapCy(Gzwe|7^Y($DP- at a{S#+!wcI<5sN;6Pet_8Yj7
z>J}CRfr at ur6m+Bv@VG7x1d^7XJ+208>Crq^5N_>VAc6vYT0^MCD!kNiH)L!tc$dV1
za)Ne#QCh{$Fjy%h?+UBHD^)WY)~RAle(+t*Rx%REf-m1aZXmHd>@SnCW=+5Af9T_)
zIK(7%-esUhb?K<W=&xxR3y6ozzfGe_XzIK15U9%*0FEtje2v=%%Anrz7jN6VMeGoq
zUtmL7dI;kxgIBA&noKu%^$J+DxDzz1j^IJB5VTkirZQHnUCZgN@$_BBZ<j at hL`CQ4
zAGnF)5Db^}<Rlg`Z$jkkHli*;bk$vzOcUF^9=4i;cy<<^Z2(8-zK;7YQ;)7YEONRc
zmGL5aioAh>vc0zvcmgaJvLhL&gvQ_rP1O3j+;P<qV!gPE8 at 3_Uu(&TBYk#=&dUvG#
z3<H#VtfyfFHTFXmku6^8J#-P!eT$T at LLtP#xg|Ktn_Yrp76A$nWsCXFM&|N{SJ-gr
z*~2lN*~}1i=L6b)B+$Wdj_iLiKqs?+HzVobbI{m^qufVi1DkFJwqC3uucX6dGaN}y
z6ZhH#kOmX+Ax^@SU2VL65xbHwl(Hxi(r`FJgSGzsjDTcpD&BbaLIEzJMGqobJ06)C
zt^hv9e1~^A)@T~SELSXddBv*qceh}4jcgDi79m+gStu$}si;t~D7je*eWR{UG7ydA
zi#+I2jsjHpAr2|{#ZUa4EJn!+Z50pZ4{vc?#lZO|V7C(9o}<D{P9;gn1lR_ylVYSX
zv1#0uT)pbUJ?lfG{<>SA3)A?(=-OmTO1p>!%h}JAolOnekMsd_E6{`4X(3LIa*?h{
zVJ2zl{?;8_A&(gjyPOOlu$}i2f8V=dKp5Prp69h{A@`c(%GBDWOV^kMnu!t$v2oRL
zJJa>ia6NMXd2d#9fZuGaa9(X)AduA!1gyXRSd;tZvK)L86*tK^N9Gfb?Zr<Xh~Xz_
z(y}OLr=3zAW*i~{`!c?R$;}%6ygS5c0Hl=T?hOt)`TF_Q2}0lxJ7>keEIn9WTK;yC
zf!{njD$R<T`qdPh*?O`1tf>F=(=1nF!+$mS>!+XmC%z$0kjU?|TK*D;yyXE;J20GJ
z01gC?iDNT5Rqu0snOmXdjVB_ at O2bB#R>-J~Ghji9LEuEsrv_Kx5km!$sR=9*f0Y_&
zEX!@xyf+5F<e8uPGs5kKgeV3WueYIStd*+5<?$dso-Sp%8ZlsWH4RwEtA?=j^(9=@
zPDe80z)=)I9f}4nT?v^yoIretUZTzqrGV04m>%W$;qt=b!ruDg;zJ~1!T<A%OY at 7`
zW*+4PGfWmiF~^|QdkMyVK*@V}wOG(<MC!zYHIcd*8Hz#N`osV8KmQlv?BR<&=h%)5
zO}@j&Oc`={((1!@gS<Xnq!PJoBT)`Q(4{^<dGvvdZZaSG3Sz6r3+ at 7JWf3BsgAlh-
zf`#izaKERET4nio{buV37QycDcK#&_B1QNfh!d_S-M^v{#9-;#YXqp2+-4#rFYC6p
zzV%}82ajAS(Gn$y9v%}E22i9}-Rj>KJFv)Naoo-^MM;N_J_xJ_p_=J|dYv=6&1%d>
z;Sm{npcf3<SX(W%Tgv at Z-%k3lJNn&m_aMkBPjL=t({4Z$!;D?3lwc2O{J}yw>D^u+
zs2;%K6&P?kxX8g&dFb?>-4(*#**@(<YdQJt$smQba&|wJ8qnbG?Et)*$HD0_W`bW*
z2N9Fux5<f)_eDxoOV@%Bg|Kw_2dJ#$PK8N-;>J!t=8x>B)X|IYMIsc+<`j(96G~@}
zdr~ms-!McIqB<VIC_&9mW{*i(g#G%=rd_jFVT+OwU`F|*c}5~3fvzfE*Ab`DcK3)o
zP)&MpaRxQPXX}t%@f!Lk?@~(vxR~I24xs~NH1H!{rl!+rCouBj0U$i;{?a|V!r}vz
z5h&Z|<*d2+y*90$D{OWxB}|VqEM4;syGCTHM8W8sqSw9i at 3vmNYF(5jbOkaL{f?@L
z?vs{ULT$N=q>dzbP0B%03(+jWN5CX-Xh`7#5k3uz+(}`6rfDAHHS9$_+h8mttW9&q
zRs4)cw!w^=!HJzw6^%8-oaoFdPXu<sy$FP|!{b|JY`h_Tg^tl%6%=x5C+nf<?5}9N
zTi+dNU518@>MvJ}=u8F<7E{@@_AF_*5=ug at V_~zSbDA((Ud8ogLQ9?T-x#Q998xnZ
z3K>p6=j0QCLN%b5Of?r(^4z}SQntp!wfXx$|MP!K+A>+vuvuMp+XLHzfif6{vDqkh
zR*Fx at KXJOr?%_n2F|jJ*mLlOkn{oo(Usd}ka|z{8dan&pyU8bHe+zsfTg+e*@Uq0x
z!WS(TMKm(a?2el^A?Q<qGhHRE{K_grz#(Ja88K4gs2uesbWypwt?>9GUU$RW{W^8k
z`uptKTcU1dq<t4H5CXuw!AK2cY|dirIaZkQLvhA%4i=;iCL>2JEdO(xYVt|Ms~A7m
z?coXGk7t{V%F1zR*fw`xM=?9)gr52(YlOT)*1{O01+gXPB4YHEKn`M_^;&TfYXiEu
zA#ej4=U3Xw1U5xxhDR`=a7jh#1qlw|xed*#&lQN`Ac?XV$D#PhWi4U-6f7vFnm<ow
zzxg!+Y`aAnjD-daFjZ>fM<%Lq<zHMK_PT9E=R5=7l^y at yUwhrdCO9tRaETNQKQcx~
zHuLcuVnTz=;MDEQR{DbsiFk0>#l(t$EyzMGNWT(|aD*a91Af_J)NMIkG$Z5|l{uM0
zOmz&v8_->WZ-|!pVSJ%p?>Ig-)5Jh55|3>Q5DFyHF3w??p$LexMb~~%X{(PV4B0>o
zKLaFk0g8cb51S5DA&Da}E~4_{&F1Fji=tsqMGy`<$*ieVXw-G8Cq<I`{kZj)!2)!T
z=H+pF!2ebrEq}XkIy~zE|ETm7vDB!N;p at GkSjRSr;M`YOf0qS}+whDj{-dxzG`T!3
zB%UgwE-K7gQwt#A?+s!EOIXHPJ_<GMz0NJQI`oD=^A&&YS3H~aC^RPSZTxTEzJ0R^
z02XibPr2A*FZRtQi!Ci_LHG$&mVfNcVkWe_77XRXm$V~X5>$AWpge|(QZtkv{SsQ3
zH0-J0No(HZ+VjoV<U_(epZL?M+nQ9+8>9JcUTB0ixvv{s7LVsiu0@#m_^3b``LzT`
z3;BY;1o~ygzdXpAUQ$|GExx+JoP4vHy<Cnj*O%vU=Si9z!WmhLWo1`l*$t%Cx>;MC
zf1Xr8?_b?)EX{AM7t1yXwo}X&G#)7ZY76#1O20rA5Z1RN&1}qXY?hkwMg+nK5tdED
z@~yy9?iVjMm*zKDij^q=+I*k at J)YRP42u&Xz&{Tdoiy81ztdqpZALEhC)mwfXD%w&
zAe{JjY}(i%zy}8uB7x#RrEU$W{E~3i1`r6Y6!_u5Yy?JZRhPNga<%n{Z-V(~Wt{n_
z$fM+P26sj9-#cF;pN9!<cxe(Cr3Kr$N6gx8n?-4nwecz1gXTNHzG~JeAj4EnH>R!X
zh61l at ZsxMNr0DTtYAs>)8aJ8&Cs{42V=B at V16e2_v$Q`+OWYj1u_ft0Dh0Cc+m<Vk
zLKydaNpK?ibZM&CoHU7nQzM2l&EY^yh9yu411%s~3Un92jFi=wO&AEC;k)8mgebm7
zU0f>0+r>ZN+A2~O)U-T*#ptOuVMnVl$>G!!?R>0t;i$^KArNS44xNgK2xyZ`v&lYq
z+GkE{f(VhV7EQ2X12DHDT{e^xqC+mEN+pQs((hA1ck|7ri|Cjfo3H)%09?ulEKGlz
zYgsc0fzd at un8QxH#kWXUv9`OuwIxuYoiH`4h4?$7Ta6t-{lI#E_6)tl3 at RBLZx$aJ
z+{k+^lNv|dK(R*v2wP+EeCsvW6aOeB38>cMJQ`fb_ at 6#y%a7Cm#F7a(>hC-j9Jp^W
zf#l8NhJmwE3C at OqGYvc&0iN|rc*H>*FpfbFoIV7eC5H#u!bj1wWbjM_(53^lv|I_$
z10i7t$jt4c3vr?=B|ov)sEN62;-pJuqVI4DQp!>>()w|Z5E+8cZ!&9vh~(WET!Dgg
z?&w{^HKdqYo`dfNt+x+~vnxb!lSSe3?BX(KQs_#%O{hv235n|Qq5(_t9a(XKyy8Ma
z=Tu#2hE-Ohpn!{jg(z#wSfdZw*nt7D7$U3+H~E>Mf`9x>ZsN${@5oPxX=&sBDi*nP
zx?lVGJy!&lo!6l+>d*LZX%^cIS4#9B5X}Xx$U60f$_4QPf~N)sPnpLH$dXVu-|RR`
zdB(C!i<B{g8j9wi%<ZX}6UH$)Qh^OhF at ufv6iIEMnuu~oZWWh4A;zU7 at R{K?(u^3I
z?!CKDaAZ>P6 at AUY=G}!ck_K+F`O9CRvH)pJilkFb{>2WL9(g07JCr*s8sKOH_#2-i
zQ6W>tAlRRVmVi?Xox~8$92^v8uCS4KI|16kg6_u{Z#BV_CdV!!YtAPiIqNF778!F3
z=X5gNBrI<DrAE*nu>t6*JQE*%9+9((l~fu5VTIk;Uj$-FSh&0^2LT#Cq`UdTc(yPC
zn8FolIDjP>lmA?dv8BZ|%jftzg^mp3fM?+IjYKz|PK{mu=JArLu~1wyJ+>$|Xs{qn
zEA5%4^F?8Tdw7lI5I931DD&Lz7hAh;z@#2Mc$6#+5vd^AV07pdf3yb`TssH_3xYnD
z6l0*vZP36wN-+60uFGo<1YVrrU>Qc~(3%)3eJPt19A1KPY+?O^53vOP%$a2d&(LkF
zFds{V8-ZslmZE!<fDMO605Uq%>~G}`z`+G%9HgU3vS8^3`Dabwct?=~)+w>CBmK~2
zAvtI%={eAIX;1I!%KU+Xaka>^kgRKu_WCZ4Nl}GfcZU?U6vKcxtbQ33Qb at y0G;}Q?
z6vVE*MLwtbr*Nfp9752|_e;XZzQ;Btz&mFPjiFbtUz{G(a1}Es5>l*fM=jVVPh(D*
ztPlH{FjP3wFl$`ek}$n883-vMBLJ`nCmJZ_J=!zJj13af8q8 at YdN75qP7$VQ9s(@v
zG}0 at olFF7B#myF2#IX1PMUn4LOQs-sB|}8HXlV2kT3QBj#*r4haxd(_dk(Td=Yo;w
zho_h4S0|?s5$Iisbj%+*!6-pOSS at bDAG71&Ba8x|gB>j`;%_KMUaVyEy~r4RyHu|G
zYt>QJTs_lU4J`f;24`&AbRU383_1cZ{v48`o?sWa5%r;HJb&{FfI|G*!1k>0{mGbS
zP;3D6-$zv~{)D|xjFY*NDsW_e5a48KwhDlT8!<Y at RdJzGsr0wiXmLV>j({Fh{uCi3
zUhoV>lBR$6JqtxmpC-J!qk6aKP9rKY+4N&qsLezG6o`^S|05c!OvJQ(Os&8yL#fOV
z;j(7U;HK946DAh_HdTAAnte{XYVcU>8aK}6Q1ERLEWBZ0S4ByYslggw_?vsBJ~z?l
z3+=N~Jz$@Sext31t)r?{x=d*?RT4vd=A`FX=J%xNO~sP+<7$gGGOt1 at _9+wNYu8+`
zD%8T}n)bD1;k_{-*Ic*CdSfAWw!+>hR^U$=BD8!5%qWpTJle$aolPv~O^k{_N)@RD
z)P!>M>3=Xt{1x#@gqvNk7P}+DqbWC!DL+zLm$Nu*CgP$*ZsK;VCA3tsSYc7Wlx%)H
zoXUKiY-wp<2W*Y&ji2eDm|-fwb&RMB*o0W-H-KwXS{nzK_B9<`J)B-#!NW~u>`KtQ
zh+yb0jBQ(cYii>2y0(xEaXq5TUyVhXyY;~<=#r+)95`cvwZpc*ubjc>S{M3edv#_e
z2gBMWFo*3*Fy6w{IK+ujMgM$(Ta_{WI^AKgi9oG`bVbtw$xCTZ%HF0qw(lr=4ZZLP
z&Ng=xgGi-uD51=&<~qKD<7>!cdif8skYk{+wfu0dSYKLxyrv(|^<y0$E8mha$H90*
zgW)ZVpx%P~sw^kV!~TQs40OD#nBoz_BT$L|amR!zcvi%FBoScy!GGBJE;uz(EZd$X
z;hjwwZ}1kl!VAYD{DU96+z!Eq0E<sTg%1Q%fUJw#PQjP at 5&}DP>VtEfH&$dBn`zpx
z{c{01LuZu9PhGXU{7}R3{hG?{m2W?zGUmDUdDRa;uX=l=I%ZNN2)o`ObK$$M3OHP#
zDjt-|%4`OMj!rIZ_|MmO57xG~zI%PJy|K9`)e-4gsP;ef?ba(K=sds$z^a#fJ8Q3Z
z->&T-gQvc3HuKug-|W2D*r|T^VrT99gT0L(##G(i+u7J#e>tJV&IVG6?rt2czuA7H
zeaJpaA<Ixi;^nAyOXGlE9K6`rTzj{@cd+>eK$k0!%%uXq2!3LPA9gl&wE~e_gEKx{
zH;&;72DJ;?!@@(Xe_1E|RNsLQGIDUv172u{iqgk1fm{twYs-N_U}k#GFI}MCX{>k3
zc1P+NcLP(46<Jwx3&RCE38+Dq7KlKy#m<1K&BVl#AUX8MI0ktBM&izKS2!SVATaoF
zz97`66MJvuQjfMRyt1-&dGi_Vo4X}dynFXzXV1rW_WUzCi|wzEZGZjq+h6&%y7iTB
ze|_6R-a<;}hd<9hgYdVB6=8DPA7Ge>?_ONCuDv5!1v0mM-)z$6$=f+Fh{N6dR=j-{
z at JDJ7&o0DMZB+`uORe$egSTsYFAvt&)?aSS)w^dW=2av2%jBN6K!XFWEk+P+%z~_}
zmCRvA-});QDs5GDwB_D&(jq*AhnMHKHVkdcBIe?~|7Hp_cyue+@{nl4-zX*TNYZ)Q
zraE%1faX^ft+I_2BS6%x7kJq)K1`)cm%iMTm?qP?>F-u8W_Wg>nsja{UhcixF2HG#
zF}c`$_j-MA>&@$3zDYo*0J7GDjYfQi<hT at ebj{f=^=T+?4SAqw$>~uUb?B^lemNY#
z+h=L6IE5kWbOrw&;2$KO(?@d!(oJ5?6<s*d<Nq at _(_i2jlzO6 at zV)3mTAwH=93mg;
zhre7wke`DU2Gwwt?HvD3QF?fUf8ZfB2Mn307Y$sYC3u<PKV)DvN21cXK0S;?CZb5g
zEX6&slLK%o7|bX=xMrFOg_d=V$RhDgTF2BZ#51g6%ma*0Y!QlsR0 at SdR}c0-xckAP
zigQx6haKX6+ljF7V2Q*j18&+K6%E)^u?fT*tiu9#Iv3#ore5J<pL<fsjiizSC9)VN
z2YHJyP7ryoFE$c<BOLL{ww`d~L|}jo$7U4?d%HxWdL^;}-Yo5291L40NTV$+&OAL`
zdiL~m8UI%B?*aZj#J at ++o*q7XdiCsS_u11H{y#f;_VfbJF8Qzd?5R%ev!|W2XHPk`
zcpRqo+0!0sUG<(lJ;%ROR2d%O-zom_J0U^?S7;7Xi~l&a&mjBZ{N%E8b`F}v1Ly#B
z2L|B*gM=3o0bXMk2$*g!F*Yb&x;`L$Vq4-|!aR+$Ky;#mM)^HS`s_y_Gd~Sy=m9%Z
z%*?^0(ocU}rau<bA2*B7{U_igD1to at 2@t`nV>Ub9oiQr7c7m|_C{}Map6>sTXYcPn
zn{B?k(%>Jp7G7W-o*aN^yWqQ49CNG9&11d2-P!o=VE66z)*eKY?X6efn{W5t?QFng
zk-U2S=3wL1+r1wJiJhB^9t3gaPn>W~L`J9+;YaxpvL6pm!=~SCLSu&@a&1}>tGJ)8
zlmx)WiMUfRLJZc~pAXhIwzm&nZft$`a_?Yg4a`Sz6!w>3jcU0QGH$MR)YaQXRD$-U
zU;|8u$vq=ByrdTe9qg$RBtvqZ`f_I at b#~AJVx_+X;cqKfmoyqI2OL|gwvu$lOgxSk
zz_pR#kpyWA{R58;&nW=>;>KPC5pEBDkZKQ$FJZj<J+k6n{9z`bIwE$x)9d*VhDRdk
z0VeNQ1-S6ws!!68J5soP5c>@UWO*Hmy&iWJaX&G%gwu+Xe)9Y91UD2ACD)`hRSW=@
z-^O?7VIU09yWuTR#dN@@aBww#4tzpX3T1%C#`wLaYELLz_Mq;?0K|*a6vy&7Btp^<
zNXc0pE!v&_pB~!!jFSaeBD+9PShfiCX?O*#wlonSsm7}zVjV)gAy;;J43atih%6t~
zUV at h)ys1j**tz+2q_fK41)*6aY_woe;6<0+!z=7rvaHEX#SIC}RW5hf(_{&PY3;Y>
z|GGB+ at 9;Hz|MhH><P=6(Lq#7Xm;_o;ZU~|xpnQVJK%s>7HUdTL?*MGS!9M at T>Q4i7
zx4J*`Q~muP at tdDt&+5+-5NuDALm01waJjd!^ZGzk%g}p`<p7}AFwLC}IvluN04O_R
zPm{59kLENfnWbWhT_WpgwxIcDpF4u%fVVPc#oH>WwEP}<B#wgfhY_^%S;iGAO+Qfy
z%(Dr6jG<0xhD;P9f>V{Pi*0zXC5u9l!t(rwzv1{?jCDNVZG$J#54??>Zzoqh_|(Gn
zqBX0&7Uy!^5T}T`jIsA7!jJG2*@MZbRHo8BNKP~h?CG7$`5xl>!VY!WhuCEYiqfS7
z4I3bJ2 at bgJT(PZD;-J5(fo`E#Q)vytH}ADVSmd`-se*DuXam0gr|`Ff45nw5;wC|9
zAro}Ba7ceO#7%=?w_WhgGK5%!A>{EsPNO at 0axRFC6ff8#QFL;SP7XV_%-zU`z3y2T
zVs0y`&bmj)#e!no1`C+(c at LOUHc%hM)Z^YcPNt#$lclQha)HP2I2R7xVbkNiZXnS|
zq9Z$NUE*>>WqYUE9?s#rXIE#ouj^FE2)xNKa-j5<LT$g(!BvdPHg76s at dr#Nb{$-?
zkjx<?<GQV=^W(TWN-!!0;f{gRk=rasL}#(*P!t=%>KP&c9KkxF2iTd^ZqysZ^&_ab
zeb710FahO?DRstBcY&hQ#eDE6UEM35h@=aNcku}wEvzS3BW9mADGcM^(i8Z5fF0<A
zCd6YokGG*R=r+^^(%Rr0iOTp6WMFGU9X<FmIFAf)dlk^)HnR+EHh{7H1TGNA!_e>E
z6VS><___0>5Sj at Oo<9N1Ly&z0ETc=YE<<&SxVy&i&Bvg;>ISFhSG^-Fi^5bYTciuc
zTSPbRVgcEaDEUbM8JM$$nS%zD*>e%U1UrV2u!6%lmNAYFww`ntZ*`#|)IAq44APiL
z-tHzL*(-H3BO at Vt!6|2ppXo*@@Q)Ch>1eK63T~?PL0Mc0UliX&95w$sr4VOE at bw^P
zXw1s&WQK;IB}#!{s&{(`7Z8E~V(U=iTm?&^9?6ePiA2l)EDeDhmsw?R!j_7|p`dSk
z*BSm`!M(#yXBBQ^1zc`)ffp5iOe=73CWC~{f;?VVG2cStIO*VLY=aMiq06>VSjm3C
zv50P>@!5|E0_xI+;?c)*9l=ZDmL6ZzP4kBT>DGLiM75O>8o;X0hwE#~>Ql#po>q)d
z+XDf-X3fU8X+Pct#2{LAN847=Fk}Ye*M2I-zQgU+-)fa)c-JXfFaua?ZHN@`U4gc5
zJdZJV7^MQ&E^!@=;W~(VnG{HALwy>imWDOF)(mo3umOiU=kYfRN+e-}O#zWs70R%1
zT!E*_Cx}?|=adq03u0ZVZzS|1 at ahwo5FCqeq^F(s2kxb6YT}UK!9{@qp(7>5h`OAR
z_>Bsr4DRRh6Qt;Z92$c{Pp>SK&5~_OFEldP4HH<iBD;s9urg<9F`$mWR53|A#B1v?
zdxv=kSu3h4a2{tSOh6goHuW{0Q`FM(=J9QfXMAf0h8g2j!l$5=ZG(Ba<Hj_opsgao
zgpR-wk>JHfE6{}*4TDJ|p}TaRqQu^d&4v33h0p;vZgtPf_bj(peENtphg`wrS?dM_
z%NWEd&|rfVvj?U`I-VB1yRfUIr3n3mSxXrj$v^~QZ1!>^cS^QnY)uDgXvB16%*U8p
zT<Eg2suUt4Cj!QQ_?u`!ayP7?CPtwE+Lyb4{wcpxMx~eksOE`0CfW^8gmjm7Il<*w
zYH(74Uqlz5RO=roU9{S~4M&fFUtE6AB#fz)(qN2kHs3_lkz(|;QA`5P(d5{yF4n4g
zIAP>$c~BOj2*Hp=x at 8!aV(m4qCW{grAJepkkV4*QFiRy?Fmj%}EnOvU?@En2zRL6J
z?p7v5d~eKgCIa%saa5mp)`v&+<V><YJdHI*M=plIk%8OOvEx?zA;#>OvI<QPm^g9R
zv9_~)ky3QIyPOgDqc1kxV729FXD2vcfTWKL?-K3QxRQ4~I#M-pjttcwj~}a+K$c0J
z-%ugI^P$vt<y;?WJ<^E{ls564NJfDcYw8Hh_H+bfKW;Zjy>hV9=_z#`k)?265UGOO
zxWY6%k~#o#W_`wB!`p<=@XH9)&b;fQOx at Ag&fSe=r|IZLS1xtTJKEm9vuy*|K1Pvj
zCh8G1hvy at Rh6~b__{J&PpjK0~T&JP?W#?w^95E-HTtXvGB#vurDx0tXOC at ZvXmG#2
zQ-2R(M8AKRe18tud^*BZS<7-zm(x)!!lV#sfn+8X9g61Dgc__ebyRD06l0&rHBK+T
z7caTMBdvZ8b-rwpI*Q~ectqab7`+a}Uah}{Re+hnK~6_tZY(Y=J02V}co#j^ZkPtb
zfW_Pe?aT__)mFsvn5n_0j??Y92CUry6H>shuTejQ)GBAlHu^E`bj~KUfq1FYv~iei
zEZywa)%fPsusj8ft&ui(h!(fjQ)Z!Zi}sjt($gc^>GOSlaLMe{aUX{q>PNko9Vm-k
zoC-5gj#{8$mW8UwYk-WAJv^n1fj`Dwr7ggQ2|BPw-09 at q&bB$8;M5W)1 at 4C8B7%Zp
z^TqR;kXS;bk+`}(T9 at 9Zy+N-oEd*{n(u(g>$#A_He^u3v4^kJMdB5n+Ct!od^%WFR
zm`XhRma3)U<pm6)y}{o3D{wg6Gskv=V=-;TM>kDb2h?>A>br4a!9b#*V9pON4-d>*
z!YR_{SbRaVv@&6Rih><BvoXYU)r+)bZT1jsOr%8^d=cEJg=nHSkx2o$dXZpvO!Mb=
zHP1Ekt6T43f%?{Ou$7p40<jG#E{*t(wi3D00#~hKW}$Kaetb8Sk<Kp6EEK*C+cukV
zb9is{9ce@$t}mY*p3~EYe`0f4SM%u225)Uz!Kwq;QX3UVtYhXNI+SGW?C_2q(a+^e
z{mvG0Fz at Tu-eQjkVjmXDuACs~_EN5&4|ojB7n3H|T1=*TOe=7FN!l?TKR8?jfc;5M
zhxEgvM~(&gvQE8hIY$>3qQCMr>%ZR)#kXVk)f${T#H*vU-J<RfVHF$GNq7*fudu{1
z9E2L8yxnM?^Cz=kgFmPJ1g<g`LD=xZ3M#k%UkO3?|4s;^Pu2fhC~B_UMK#A*6%i+t
zoe?mz1HUWX{^aBuLWmd|@@GhdlX_}U4Zt2^OKXyj;ceOyb%u(SLkFf24I@!7>}!R7
zAwWyRss51YP}!*9fsUAo8tb6jS5Jx5pTq`g#lqH4TyZ~0WE2~&ag2&KHrLiSD8!Wp
zE8wubX}~4d$^^k0uZS5hgFy at jcs^fN)cJCe?Q3Z at m&kmt`X}-WY9uxuN0XuT)7<NH
ze;&gfPnSUDQo?k|<<jq!((ebQ-w#W_AK~{$?J|H5`foe{D|de+aZy3O6YLotgJ*>C
zhb7~T-{#Ix at LTR&;}MM&KSn?M4QGO+#((%bVpgVy*XNp*@3PlcdXZ7vGcgj0E+Q11
z+3^<I at it4JHg%4ymbuNLF_E}KtzdTZ^%>p-Q&+Gcg;!=;sqT!dDH?86(|~)~FX16G
z)j8YFUm$N?^^4_T-x;&oQoFB#dAEdDvU~gRqHpA?BV|mlQyCwU937ddP#K{zhdZqg
z(=_r~=7(uI7;As9q*r5y_gSK}ZFRd6BUi~O<xwRLp1uNo+MGJ8s}Q{ZD+<s5WR(2p
z6qo<WND(DV$<wKgI#x-{nf)~avJr6<IT?aY?1e56RExBc_Xat)%zNXD67P*KBJVZP
zjWT-*5~a!!!w7Mp*~;T86lNcumjqNnnp|oPtJcelq);kuv+aPy?wlVuN`l~9+O2Fb
z<q3+=3P4~wxp?$<p|W7L3s{d}5DDRN4$E&StyWm_?%qEu>~nWlsxZ4j#R--zH))O8
zasRGTb!n}}Irs;Xf-S5;CLd>;vz16NZBKp^a`20HLDwix1lJA!r9w3p1>>N>r&Deo
z=kCf7k|=0X?#<ma<c0#}pWIC&+!Rz_Z}dYq=DTF=fG~5@*UCZAeuV&W$F~ZeIFAo-
zg95p`qpLe%<PgxGvkn1Sf;?(#NHDsD1fzbdM6X$UVrRcyrFR?T*a?aBU}(L9(SmV*
zJR6)`KvC9Q8)WuSyOu9mxpbuqlal{zj*a~^#F12xE&Q%LA#cRJ9RqD6Z4><A`yZ<3
z<m$2~ZwnmB7@~9E8u6)NeZQO%UCRFnjxmykK;X>$VzS$17!s5S!i|s2v9{TSCo)|3
zPI1Hjl4DAy8h8y%wgH!1{9S(dQ1_CNC3%${2iogOtGj`rFcFvuEhdXRPIdxR<wW}>
zXvENK4F>1!t{&0}5f%+(5W$7vow at Jkp3iEWL!D&cpmU at CloE!d(OEcIDE?(-bK~LK
z+H5tch^>qDJm$aG$Dw|)|1X!9Cntx8?~RD;zO;a0kM3H))doE675*0g!U%|qi!+)C
zsy00A(X$0z$J<0Yo&G|+1 at IOSBS}HHu_cw}3S16bHXB)NYrhVsg0WR_-MXp at Y=dK~
z;AXa02{*_cJ}&U`vRzk43AljC`5-;y&*BLoqv(9ITpV3=^BIzbc!2;uQYoJSz0Z;~
zGUaSk9#CG~DE56U=o5CPhYJtjd-RRin}k)Ni(qcq>ELu2kqM5k`kLhrY*GlvFHhP~
zY~;A#gS>Oh=!CIK5I22qP%Ce$4PmuC7 at jki2mMM4E)wF(emiyyOxu6#rTF at m?su1O
zB9_{>P2`S%IQ1qy{10RRw+A3OT>d>kIGqO!i(?TG45BdwA<O0i^A-O$`i>$)Z}Dcc
zSl?dT-TmSV9Q5k7L`{){gZQltj$Z;I5mLB!e!-o_%+LpjNq|5s`}LQ5dv6ck;nx8|
z#=PEhOM9a>z67pFTFdU^rvbwn^>uWJ0nhJ&qdqB+3=mmjB-ups;^<h%+_~v8m>3A-
zi@$x*Y<_xhv{>Ul>N^@Xx3)JvySYC;`{H;1{pa&A0OEdiyLN<|ZS%_uOGxNB-$7D=
z?%)(Rt_~511Z%lDY=ayoEsr}uAme}Z;KA?si9e;!mBj}SR(`j%_|5X8hlu|9aOHQ4
z%MVr_E&Z-oyrbRU<Tb7-;bLa-yGw+!o7CW4?<dv$PyFubA3*`1y%MpoVIIacAi8iD
zkg><GNb*v0f#-DGqrV0IJV6xP#Ygk_yS&VI+q`!0?&64dTgva&G>fd&%aX~W=D%U9
zVhSs5bqNVUKyA__l8W`Qi|LE+UcW20zk9n~G?K(iC;cnQyVO3vfZN&eu*nF>olA*X
zJ&QKj3_{;{novNtcZ%z9_}ePpzI^*2?vRr3?-JKOB_||row9EJ2Q-K5r<X`BJF at 2_
z4V^P|3xjuzHlP7gJv#e>0vK8Cr+>Tu#TVT4ArS1XBi>H24s8_v`l>FpKk(8Gg7q&T
zLk2Pge^?NffVa&rLcN_No{xeTcJ52uR^WAHIj}j;<GOku%re8k<@wu8EFduBgaU#R
zgcRAkAz)k$j~`1!e-Q!1?!_LmlpfZgL`vmdA#QeZ3R*61Q8AM8(zJykMP7ybh<b|5
z8VhVnUuhgvzConBaV;~Vwu&fYnqJqYkt9Q#E_E9_VGf4s?&Zyxku4E`i4ZIy(l`f)
ztQeyZ0J=&DJ_pJ#Jf%3&C(6Yew`#~0VhAEmt5b-lAR34{B4<_zr%K;KdnMs*R4SdC
z{6-hG2$G}nA<e%MrN$vspMTehiU#E7ncuIq+K4yt2MwJwBQvn{?L(ak<Y0$)+6=?E
z&-}hMso*0dRrZ2w?e1lJOoJ<!WG~m6Q0@^j0mpKq06s7PNs?Y}Z3EF$#`TK|Uar*{
zU+&SPSZ)nzFn<|~na8nUYf`~S352-Wd_1^4%V1nyMweXFODh<&e0iKAvv+aY$}1pQ
zh?aYRX$pgyQ0|*=l5%H=a3jH$bgoy at arBR}cL`|T<)gHzeva*`;>qCGXz0t at k94+z
zJi%ck6UseGM+{8nV at Uu2n2OVMK8M}j(YX0sNpKD&WqiR$38-sVXT5PFN(p#;u}2AA
z9v&g;TGm_~5E#4;=wUKn&pX4hq>+ppnOnvc`zC4a at bVYLd(HY^`qtN3x-Jf{dikg;
zz)aWg|Igl+wzYL7>-N{?S8UTdE$kSO7;J~w?qI+Pw;9}klg_by6oCXN77|B;Z91L%
z+wc2Ut$FV)gog~bt>>|k_FiMHTD59gRVU5TWpZd0(3uV7y6nUq1c(wK0Pe$;7Yq@#
zsGObHgJ1!8wWn<U!E$b#ccM~DZbL?$=1Mu74Cj!N%B33cOHnr*Sr;LN;!YjeShW>G
z%!EiD?=`<h%WfP2CX+FZ+7FgKSep~bY%z)i?K+SKTj^wc?b_cDXoT8W$_5euq}4n-
zYnP40ZI+PsZcbMt7&}<#vL2T0Tvq~m*jg_yk0qByjmo#<CGsG at AMD=EcDHo<t_0h+
zHKAO1O13)9i|bJ-7=YxKFC&`|0vy_!#2^ssEQLqbgZznZA#^W5x2*{rLU?c?&1@;h
z5u(@Dq=R}nm~(ql!FvJJCA>w1ufc|})Ga*SkX at o|M>w<%&mu^c*Ow1=(AMR!)9v at -
zAvprI5&#!zS0<DUc at T-p61V86kE13b2e?&=v8%!UDnFJYtUCHO>e`<LD*-)d<2Go>
z*7#E4UfL=@h!OwY<7auX`{DS<gR<kAY_9D0`@y*ZW#=$HUy5)g=-{;1KTT!@)KfYV
zAS;yS at Fb547Bo!kvKtUVj!uw!Fb0?<X%7NONWqn|f=P?ZWd*+s at DnW#%f?D+Lyx`y
zYTq<3F3Q-KkeZ%ND0e at Y5@KtF^9~?o&&80*M4Gni&wv09=hK`4Vfi-FgI-UL1CHSw
z0fsu)l7x_7+nz*jR|0(NOe%Okp!C}l=<Q0dcAW|3?gzWK(|&gnBZWT;L%Om(i7c-K
zSk{?TFx-<8(7FsEFcaNu0r)#TDBj8{Sb`ri>9D_DS3D#t+sOSDmv_XQjGo=Wo$_K2
z!qJMUCu+|__RDbT;qDw23-*PbRd_&dmy^hqaG2%A?gzvCJB&l6vkvg&^@MT{0*biP
zyf|)^HW+l=omB8az_KunO9_04cY-D%=hAJavYdx|xZDWacs+dyAkdwLzJ%pZ+KDXX
z7uF3tT-feZLTCW%?)CIE91l#+{jwSR0R<Eien3#!m%yGQ7ubh<MYsR2lHx3-2Ta((
zpiCj-7_yM2b%(j7^&oXM!cEv6rnpd0VKpF|7tNCxL;>yu$a~R3#N3jZx`Biu!bRsK
z;aGgbA-{LgX|?(>$b*8x_J&<=Ty}W5rCAA(Wp^Bp*VDG3&_!9H2f?Z_(r2>6Jx^+}
zVmW}8#&!-gUw%rVm<Yqk6hI9qL+^V04-TeYqB<xTbHJ-0>um%tKjiQXL#Zi<cQ|BR
z2#VVE_(-WrcSwMbdz18Gp%N1A8Rd$zPz$+Nw#2L9Fv|*s9P0igo+acD`;!WW4C4L-
zrX}1>aHlF2Izxebzd$XGSqhZHz0ogFOS^IbSoSCJHc^9<3Wl1$KHS~Pu-Fljkcr>F
zXrCpU&+X*!6hxHNTsb?XP$94{lqq3AT#Kv0j_6M;8FDoJ%WgSsvREF<!==ZPqhz7r
zj|=&!Y=&b_7B$p3pjdpm_$?eVEc+7uJld09f(?&`{-lDTE^~j<R*a at SsbF|2fXZC7
zOR2quXm}9smveus0Zr_e7kdy;A-Z=Z5V8<Yip4}TAa3ql2zrONCmi6ShJ6i({h<~C
zHOk~KM?OOt@>xz3Y{wBwX~>8h52EIFO29uoOAEQC!YQSNY)hPul^`xVZ%X<L*M^(u
zBHoxDgF}jb$&k!ZgT7p-m`3=zi)(33NSqMwe2NMIi9j~{cp!c`-A)c=6qGMrP7B at e
zSb8>0!D~x}^a0AX2pUU%IZ at m$!k~#1HF3E-N3a^K|6mF^B&0us9JA_|C6sTb(d&n2
z%U~KgB%J6}a!7E>4W^Pq!U~8tR0c^a$ghSYD%ZY;@SaXy3DEE0JW&d|b1c+k405I1
z9u3+WbmPOrW3nSmAtn!|6HP)OOeLBG9RKim8d)X);32XACF<z<mv*ip<Bha<6AA{Z
zieW07c&Jc`tK4fiWZdM45X0|)&|Wt at FEfCJny<soS*bQMBy)%ZoGWK%9jf=GT+B!W
zlp>(%i1`yuBA7JRQzjjXN4PSDV8kUgyu~o=U<#QaE?!2)-62RTnWc2Y at wMX*B?-8u
z)uYk-MGHl16k94O7M>v}wp>;$*ls8ml?q^N*_&wX#+TQFAdo<Z|0?%833=S3W|`m<
zdJBwlr5t_*OcT=}v{%Yz<uE5$*rW4uyG+Q5qUBOeWypw1xt!CBI}O7{$F-+vtX-I=
z#j2xk_Yd}>*#&HK!0e20(JAF(urji3Lcu1_3wwKfczEPl;h^7uRw18U;&Bq-ls%O~
zUy0|Fq|}fR7*8q~iWcK(G>ie3j;A@<gYwTOh{3oc<(6tZp<Kv`Jf9 at BhAQy!q=F%l
z$cq=COS1GK!!`!TmT1#Fk_JcS^ND8Dknd-Uc~h+0rNI&PJU>K>ogvnZ%Zr7y|82W7
zK|--u7w+YMro5^p451<8U0I=U1N|@wEkiE)YEr>a!E at D4H?CW~0K2ZrK@%zke#jTI
z>k-nd|1KwOp>XuC@?xPx`meV?MI_3T0MEq*G~-`yd)Jo_2=<xfZXO#)&8~g$aCYX;
z^b1B*|Iv8RYtRQ3-k)%sW;(>gBNg`{=~){4iWbzyjdR3{Y$Jsyl7?6R?_dA&ZtewA
zk2U8{Uwv`=tN+`UTdk3cw7Fw9`|@QSx%F^6G91q|JxB-II<L$|jib?`CXKUm*wa_y
z+57p9(XV-3WcvF*8{e+)eY3T*|ILku$4fuu_kU`utM_Zk{h!*>z5Ac<|J)eR?@<9M
z)t7Nm=4b;TZ^%WKIk}Egug!z@&HQ;@leaLJp1+yGL{Ayg6XIT|WCp{X8{8|txWt{A
zg_)V4$<?&U`_kl- at fohpAk<Ixm-@;QeAsJYYjd?tL|&<_YgDw(XguPj9^4m_oL)Y6
zSFWkm`^)wFD^XLs<L;=#6dTAMcQU>J?UehCx1&+6grlr|IS&O7Cw`VB$Z^+8f|<`9
zkI%CD>dNv8^^dHj5V^p;P2P5q=nF%p;wcIy<{@g at SzcYDjOyFLc`#^dJ|AgCZmAbm
z1J{5%ngQ&Wqgg$eudT?ehPc^^)NFDUmw}5FT$(btrI*Z4c=x9v&QJ&oVQ&7)pcp1v
z@&UpRnM59`qM6>Xk9_4GC{i*4x4s<9oh~NB3x~NB4fFndU4gG)1a#N37XWbm-h<T#
z*{kf?pnp8n at YO(8$ux+Je=TN`!=%E2BW`N6$n~V3T3x^)h|SQIn$%O9M&3#!_+(5I
zT<-#w_mImMqNmBDJck=zz1ISUJ%mfd+CD*wlTrI$h(CeL(YO+3%Enk$iw1z(Zp$(N
zMv};Q$(l&cS)*ax8QXobahSCS1GI?e`5Pq>5bIwiZP#?`Ms3RiF_)T62i=#8Ye_?y
zZvWcq{E`Al7s95h7BDkkwcxYd=hD0`!IIV=_(tkF5N$*vjPQyek~fW!%{8oZKUarP
zI68W|^!({=1`>eW&R4;0u<Qu2qcdJymZ%>LUotRP*JPrd-br_i)Qf~3`(*)GJ_mxF
zOw)BbKrXm3F0&DhwM4GsqC8(@QGS!UK#Wnt)Z=wVOZgPX+wYKCQW8GS2U|?ySZD#n
zy3j$%PQDvZS0eCR=H4Yr3dyotk9l+EV*)l|N7e6HP%h8cz7!l&@Y|4yZY>$n#UK|4
z%j=HuqG(I2^R)-|FgV3cV41Zf at Z`N<`GwFJSX6=EPkopwTO`*^*GVFXd!e#1v$?DO
z7>Ub3$g!MV0FHS$?V=$cWQO-ZcjS+h@*y3B2>{7ZE;3|I>}40n4ft#!C3utf^|64&
zLvFh^mMBE36 at diC4{Q!0A+UE~CN at Y~E70t5I|0G+R87Dg1eqD76)sjdhNXN1KqXwJ
zWbg||c(@@HezI0c8+F^p@;uaAL<SQ_#!=^>Zl?4pJN&8He2v?*V=Rkq5B5P<gp+o1
zR at 7_0gQX=ymXKu)(uV87EN|xmOYsH^98kgCW)EAW#rwB!#ti7dy~xfWgy8lnRwwDN
z_NDKyt_#xy?&C%Ts+ at wa=plWb4+yalCLRf98bhh3WCyFgG!MN1p=3`rVI1@*J-)&Q
z)?<zbh#+p#j*=p at QwQRk{R4FMYbAJY+dduiftJy}MM8k{esa#$++K36lE6)SOx9K{
z#87=zQDB7F9KG!O&IsFRSVcZtL(H^$vtDMHnBsi4j#-ox;snr)0tUC7nLJ+V=xtzZ
zE}nr155arXNZ&h at 8`RNmtGV5VAu6vS=MNaR-WhU=8vGUlC{0 at k;$CrkfXFw%HAAQw
z@`yd at zSd1SpFQb}AQ-oCPZ)^S%$`bNSqmkq;dSm~TXq4h3mJz*49d)#Ym30(*7#&J
zTx_-9G?c{S0B-7CZyDMiCd=hnZ?)KsoO<b&8v?y3wCj0&+#Dj`F&ks5Le`b&PAzw|
zxBA?BAbM~y2i)F+RsSSarkDQ?w$?Xyx87$E*T{b>wUzs^{8zt!e|h<{{P#YvzG)rZ
z-}9NS?##^t2lyH at Gkf6ekef}~oSDHcB~yzBfmEVGCXUDh1aL#_xQuZgP{a$JGcy|H
z0T06f4~WG*vw=Hsl8-B!JGsrU5%qc2W0xi_0d{+KxG-4gVjF+gX=cxnMEPld$kR6K
zE!4l9`E%{d+RAG74=CM7<Lt1BVD?*3sWr2?jdhUK?W6UbA7=ji_U&62>HtlmYXn#u
zq8}46Lc$*`48g9PFdz9 at d!g4JA*NaU`c$9J1aTucREe(uifRH!C~w3g6Uj<JhIn3P
z48fpGRlhe6YBGO{eBy7xBO&oQ=+6I+I}((SEEL%w<)sL1vLC(&%H=#AC|i(YGp9G@
zV4D^DDZA1!9A9Po-Od~6rn6_r7Ifaeib7-v?}y3CVgBb`B%RHkwwoY<Z9-<|&l1O6
zge1%jN6q%(zVcO=8`8lKq2~;XXpD&GdT8l8!?X`GdxS}f>0^eYQQ`lcuq0&J?^+>?
z&?33@*}Z{SoFF2nog+-x`4avi_Sg9e{vn{(`MtZ@@!f2EH|rq9JpR8pyPI9&*#J#S
zGOD{-`{J&Uay;$!PhP{IK0=3GR2U;TT_69>QF_#3Qh8>U!aoL`mND@^v_E9-h-6kx
zGcU3>@Up=gyg`7S{uttr5vL8LvauX};FKM^g#$`f5t+MZzagIBw0UA`9mvV1Av<O>
ztm5C%>_xT<nRe8PmheIz$(d-nT)dslnaEh#H=CFvgZ^AGfXnD|ZE=ws;TSjv4T{t{
zYb|1zgv&@djAEEs$h#t#@d3W!|GMCv<<h^xE)FZ7Ao>n=tZ?6E?srWBW#AAH7VHW{
zH%$5h!~&R>K-A(1caJopk*%caDFXTclP{V*1TP^%B>2}HqigK86Rm0EWQM~_iXc45
zv2YNjEzwO=bv`l#QRg!edgs&x)=FyrpJ!X&NXch=-(amV&~%rGoRB_b at Wc3-&H<zf
z%718{u-)CN!lr%f$w0KSXaDM4O4J*cS)`&Lvlre)C>w+n$i|>lr?^k<SXCA7o}FKA
z8jTuYFA;ttOaos5-j<DnT+D3u5b>tV3}og!K+~5H=XKvweS;B;^!I)H*yJR`nXo{S
zPM^c>>{`HNAuOT>>qDD$+Bwr0Rg5Ty9};Eg&&vx;lHHX;IiX#Uh4fTgKOXeoLj2{%
zWQurfJfqLV8MJ at 2wdNav5<w(hyJx^l!rM?8KMZz!DdVDGYzH$lbEweVAT%w|EGPh^
z#SR$Lcfx(n%<L$OJ at aRYQnYo5NN*Vey=@(=?_|%OKiS#d$nbA#?{F)7vw(<Q?#$s%
zofO3A!;bcwvK61p|3M%y75|Tzm&TshIPJ8%t>FSrYHow+COMh^uh;I?S7ZKvX}Pw%
z@|pji4!R#!%EW)WlfCI&tO>bozq`cA3x*~ezJ0WkjfVJd$p6<EW6J~ygG}FoUQe(A
zTuc}7Dzmvu=)gM1U{uGKqLer0gr;z^w-GIj;l$3GgEyVtTGqFT%R8s at U_ZwY1y0V}
zC$HP!s-WcqX&*p|$c*c_U4{W5*|}&Ho0;jR&DInh8`@#xpZ_FBwUAMKm&U-}sW7es
zH9Ep<`xMqE9&8dE07J=|Yz!<L?!%HFBkO$^C!UDx%`W)}?TN<?80yh*fsOE-xVVH~
z8ZC5s07C~;W*ofEknIgG5%vJ}gii!tfIRImltAEV(zZ0r5D<bEn1yV&d3B6aCj&1G
zV*}KYWE|$n9Fnaxt>I=R&Kf*ITs)jpI5@<fg`)`*Ic}df-(cv_;KpEvxn~UB&K1r=
zv7-%dWj|00i{x7^aIT2uCTAO&FJVN$yj}n{&EA#H1na=5ylo$wOrhsk4HF9(qafp@
zz~`8nc8&t9h3pXGO1IUkjxauS(}en?IlQ`+eU&1Ejqin-u$k5yM81|;3Wq?F184xr
zaPor<?jhLm_tYTwdq6fcO)g>7=Qx>FL6yY8SOkO)Dao{x<-WRvm5b8D>3AU622Qba
zIaVfxEN2B>T5v*jg9xecXF6`2b^FIii<uD+qEkE>0W;k|jdHQU2&acc42jtKZ2#~`
zADQ*}+A{Q&?H1UJQVN^ZYpcumDC^#bR&##oepX*uTdl1v-~aCna?Y1o#Wsi?gec{W
zgROr&-#R=ZFus;Y8i=qpN0>*C!Y9DZC3t~^k01;|Fb<zwv{u8PkWIQ^X~IX(cGnww
z`;G6`54P8zVE&Em-Dmp;!C+Wm_`hA~)#RE?dnmOLMbOX{v*pk<6vray!rUTalJ0~a
z&_fp>gHV4-++3W&9-q5~-Nb;4t+{H+AT;<b<1lK;@`4oU#%-{}h<K|p5s{Y>GzfZ1
zY#i7FU1(J4-mrp=K5 at 3X5Cl#IKYr2g*~7B>)l7NOryv^(B8Kx^MbQ}=joJ*84Az%Q
z^+!S(I60PO_Ufd>{9~bcN5|a_QMo?Fo}Q~9hB*Cs`foLrDI2zQ+K|n5s{u?$`?>Z&
zr8bn_u{(itu1sgRMJwf;<hUbrE3oek884D?@Z&kmKSqnDIH8++eFB|O at A;+cO=7Ae
zJvmw`95mx5N}u4`dksTiHMh!F`ohetur`KZ^W8~dgz3b=kYRnZ7F&G-f(DH_9^li-
zB(UfxJJ;W*SwDkxIU_ZRfhJP(MceR5jS<A(7lgm2WM(7$RQR0GE-I;`cEi#dz77*L
z at fji@@=xUy?No)>Hmcb|#tq62xmbM9VbzdqMm);6nMu;zLa_v<Y-q1k;3Jknv$NGI
za(TF?n%azsV=#IPb{6NyB*B7wj3l%A$p4QnFpjq{Cm~j!9GNIbA`Ei_PE(K>=;DQb
zqT?}kbnwxJLEf)#mxsWOTE)@T?ws|eXxWs^WGhWIZcag|lJEzJ&TYu at i^}P%7u5 at T
zr8E#5ZB%{r!tKo%O#&#`C9wpzdY3MG(>1C15;n%~ZjEPwHF=sWXo5GhM1i#KFS#d1
zbrKfTg#*KafU!6pi-AnfcOnK|ETBwurLzl4%5%*jm_fea*{YH~&amVI>>Bpv{8T%W
z9LwYyg)I^e4CpMFWtu8#!Z3Gm#BPFGqCt$x97U#CcfM;|MU5PjSH(!3fjeT7l}qv)
z%FY85uq?3{w=v)6&o<YOwgd`AOejo!o(uh++X!{Gp%LIgn|#nZfeAiX4-sWoWx8OT
zz!QS)?)7y}#$u=(AQnwnT(>AiO+!0MZyZ at i*?y)M$J-mYn&E<(N<PsZVOI?tR0T9M
ztY&bxT6;&5XBn4DQag{gY@<?kPJ|ugsBiev_HGDq_{tFF at KM3eFyyw7P9BrldD|2}
zm*$&3qzTN5eh-pQ0hF=>N~xRUZGQk4B=Dhqu6_?zg5Y(2n-I|cfTCU#Y{dyIu#jbL
zXW3u>3Lyh4ILAXNemmuA>^<MvDTGM~4t`HSqSPdaxU8omjy0HYC0(#>z(79sZeD!x
zKehU+MLHeVNECU#`K32iW{;~=(m6klTjr=^s<x_JCK<uOu}Vm3t9ZQe{NMmN7#c_0
zyWqIjcb|C{lY_RsPu;l^2W;8zAzF~&>{0J3Ox<z+ofVHo<`U{AyX$YVsZePSYm7>y
zr9ceb(h#Nb^9;%9DSssmQmcugA`03 at AWT{Dng`hbX})P{%yTx{>I}(+JDO~?riyJb
zhUvy{^e_Q~K)Uw>@R7j?83_ZfYJf>*M`3bD>EJ~x0M|rS86+@~zBnLr`VuQ*91q6V
zV1_m`NEW&kY=xj$!9H*cY>&xbz)+H<qFa+BQl66rqT`1{y|_Iy20g}hBenx=Pl2?*
zO*V^Z^nWUiExxy+iTc0$tE)-g2bTweuVejR9l0QCf67+hyT=<;{14CnaD(-S#tEYP
z^lD$X2wdO^{{Q!vSL*Tl!zKLQXa5fezfbw)J at vmZV;%luhvsSOX%K^g`8+_`GLKKt
zjflo6QgnG7f?{jso>gqY8ybqO<+bH6*OpcT#TFDp<tmdwTXl5{P{$ahN#*4942~sY
zT!Rct$p#t+`(*eG0ZJ}JxnT4<-&5U+1I;!CjUK~R;R%h;I6KK^shSbyMrv;1=jD}7
z6`goPoasePQMF~N*}wmtRleETf3m)F_ at WAtS7ZARk#6i^R-fVPTSzbK$NQp+QLsOh
zD0oR-lD at Tvrn;ZWrK#ZXHA8~W#K=kdcAR|pqN-~kY0pI9nX?=g{^Ib$xukhqpaK<>
zthT7<H;PoLoUSrVR~0O$A_7>i<b#I9`VD;@cnWY1xQ=#3xPsw0??cb++jA}|+GxHl
zJyV?{i*PLl<tS{anC08+U((Dxl-6<+)L~+D@`h?&Q(Uk&m~S?xFTgsurde5Atn%R2
z at d`M=f6}qtJRu5^C5<3;#HaL-s@}fqS`5Bc%|PT5pf&{f?wiTn<<eM)B5(i_(U4cu
zjc2DYcY)K)D#U>k_BjP?NO~<l6T>7g-pQ~9jHIh-QRnchYIM^BxIg+aWQbOYlu)p8
zh{c1fjPAAOF`R;_izSEx#6$|tW9qsZRDfI5)16R#1r6r$_!R!W)M7z+z-SKIP3*h#
zK2-MlN;p^qA8lX4U?Vmg at vOl<?T^pS*&{A%p!D1=C=+{d6vE)h#8vd}gnT9Y4j&e5
zQ^+_iyL~ERh*2V;bPQVFJs{)8`MCF*RDyHi&N3w-2|UGS-m(qwHTTQ-7<Y6am`Qt}
z8Lf_(JdE^zh3!OQ0t?n9#W~z5q1C}*Kp+o!>BIMUbnraw5Vi<h!-v-s6p#Q{c}qq)
zYR0*Kc}c#M<|P>^ccwt!HDFhRidz;@2#~48G`CO}yTwp^#E3*9r#rll!wHFSA*~v9
zd^~|^SHxih5Z_vy=Vo6HUiN11X0!6Y8KYSpJ7Q6AhBeB{(?Mqlbc2yoY!^k10;>`K
z{2c49rPmL$N*B66l0117BS0JUEUP}ed`xwOyvN__!$mv at BvC}A<vIjiSN~0cm0g(0
z at HNrxmXTUe<wgCK2rhsJ)wfUpK%;M--?q7DS<ikd{|gHvc9UCE`@$%Q at aJeh|I(D=
z40vYpmXJ8T&BX^)>zMflF}sE9O2Tbve9?oB;k0k6lyo}RI&P41LUl{}Xug~3`Xb*K
zE*M`>a{>JT2IHxko9uV%J1~MFe~x>Se0f>5t;W_Ue`342zN~t3owSmbHKPlK8Q}=V
z2;aX6u62!y;SX*Fm}FYH9pEJ=#1+?VeK79*0|fqRj%WnrBr>7n`T2~{qVJ_qs6r_^
z7(#l*1X)1PA^+M8-kH-Z^n{*}7AYoUGlDOH#oT<-J%9xEBp|sxfak?~fQOUc;??=b
z+-U3zHT;%jZ at -uAV)@T&_R0m~?6wDu)-jzV<*RHO_e-=5bX^t8hLp44O+oupN`Brr
zS?Lb`sDuDe{|LL7t^9VonEQOLm<*V$#S)D4V2tN>J4d^H=~cMf9b=&ftuPhtnUW-?
zKHLDcH$Ev&IVsErWKLxnhBF03414{z(W!k(dHrLz?dA3I{I9waizmZ3 at 1gv`fG6vJ
zmX_<ar9}TzTfMjR+5hijuXRy- at 2UUUIQ-6v0!Bgvbt+K)jQS8R at xcu}n*LQF73opL
zBZ at K9_ZtIbUSDKzZdzrLs&&LGM+7$=Td1FrbI{q90!fwSjSbAynxI0#umb&w<6L5a
zA2147$7-VHU=yCPw8DR&v~aBo{Aih;3$zZ${eG7!2CsE69=d!O=^YL<63~$-B?5iJ
zl+CL3DA($?7?n0*)#lBH_Apdx6t-NTCShFP9xAtTtv?kn<0Dt#$rXzXJO5G*%MyM-
z9ui<JT{oqC$GDBs?L!k#((RUc{gFFG_{_`lKK1R#?GmDXgC}clo;#F+%b|O7h^o9c
z%yqOOVjz`XIRpthvB+Pd`Enb<Fz=sUX=S#O+#-V{p(;NaM)l=OpdG~c$EuI851|k>
z4 at Zdc#SMUx1NU%X9%2R+Y<x`AqCT33V8du%@pDKl;V5iHi at I?&`xIK(;#!JbNhN()
z(viiTxQ>0AuO!ZaMnp at davPfQtZtPi&OHzlmrHP`a~0IvR`+SpOi|L)FB+ZTMV=HG
zG^h;E`)?bf=4+U1Uym}X%T&ZO3PAhF>(;_STEKmbA$qd$F$buN^ijrVNz6wap2Y_p
zAEk6zd;6FRU!^;VJ8*Bh`Z-GVeuIb8tJ5t~(;OW3+;(QCL7nik?A;2KLfE75Z>F<7
z=5Vm}Y-fFA3pEvw%F3x1meH>yo#;X8`XG&n`+?fEnr(lxw|~Hn_#Ud)nW8e#;fY2j
z(bWlW0|3obMi-aH3l*bhsm&+bw1k<5&}c)2K=n<R%0~f*Q92SFhMK#fLbJ|GKWHjw
zcp at ldDsyHQzPb`pyM!1d=14Mt*gkXByK~v!Bv4>D1cd{&7OIhD9hi{l<SOb|@$Aq=
zBfto9 at pGOtofa#IqUGgS!B1#UY{WY_8V3*6<|VF0rwpf$(ThpISB{2i*MK92GZ*#8
zs(1-B^LE(!=0#QL9hpl&JDDAe@>8*WdupdI^#8!3U?2M_`EP_3j3%6h#d}-)nq4Y~
zI`Aik2rFMhlU at 62oUydoKIY$K at P4>vL0<qe28tf&xjm9>3_nn9FIOJ)2?zjpBOIT+
zTMw6bhx0K$ad+j=C$suyG(v^NX8W`W7hhZjp-?1|m1Zg(47`T(AB?O01~v>|>wE}x
z9t+I#2Zqc0RF?6;ei5pw_ANX%DCaC+M0RibLPw7QB6K5a(?5<StkOR{rSW-QSR&dx
zVq;H&9{xm+jZGmkV=cbbn`*cgEg=sAlUGE_**HqSuaS(^jY}6bQ-;KuMmO~ynIHnW
zJxaae>-)A1o4?*MQxAA5#c3>T^?7MZ9OiMB;=TzG1-`YNmN%Po`zq7uPFuPv%4y4k
z82vz5W<f~v*#Pc#ybB=cQ(UAM7Kzova7jqIbBB9TTM-`+^y>~4!iFFE1|vxsZuaYM
zOMkuZ-^O@=*gYd$cj}$--Z$*p2on}8q}fuIvC}tZ38+5Q`nW14D}XS8uwLjn4=W$G
zidJ}0>A)h*K^TiNHqt}0kA8N8lil5HF)W02SckKLd(Bm`n;9*42pah<yWVa~-yFNU
zhT0x}_f*X6Ah^VX0JWs at WG<LR_(`~7eW?GJQ(Q}wDjmN#elh|Y&^y}}Aaf-Cq~el6
zW3vWRBt~Xi`#XZzFB$Vpti?oiEM>5aY)B6!asW!w!p+S0=;Rw*!ZX({g+{vp*!mT&
zDnQLvyr7k~<Vu6=>bfBIfs<1BHvA+&vakH{WS<z~Eyt9-tz+NuZ>96a7ap4SjSM-D
zi1s!A=JyGoCO+pDJPf^;2Tldosk*f7@}vnDl`RS829WcjQH-sw>_>(h{jd<tk1SO&
zTk~F!%h7lapPx$5U&6xib-b_uT!(j}3JU6a<6XMghKS7hjzl^-r%WWM=>QxdFkQdE
zmbuZP(k;;4B8-mfW#Vua6m-Wzo^rc`B5i`?%J#+sBWRPJ61VwDcvnIzhdWkk&7+Ph
zJ{9_~v;}@KR<Hy=B^#8l;<e-xeu~ja-VlhBH)Fm at g9mh-IXTa7aDmWNQ&tLS8M-29
z%kVh^gO%lg$q$otOF)$`TnwUXXjPsfjeFut(o#*o@;?#camsqrlk7=^`*wQ~W94E%
z5kPFAjMoif*e9crWgyrJn-Q|;Xk^?F0e8*JOJEzr6%=}p9;Y}H35iQsOEDaBgh~(i
zjr at sT>tK`o$hbqA5K;t3NXmAmMJ8cJrb0rUDFL2`Lcn)V*Vc7l<pieyEsK?*uD!;~
zGU=xni&<)lPUFRke_<)t!M?-e&$BcI%XUMOd at Tu<6C#!PLKdbFw>?W$c);dn_6;so
zLTrK2%CpNBvVx7lv_2M-B_gtCQu3%b<)X1z8Ky*pN7{QIhAaoJ?b8g=SO-_?nfaFD
zO8>RoC1v0eHE%{;E6p0JIzt40Kiz<60mrtKQ6}&2TF at 16Tyk(sM{<{<3YXq71McX*
z7SB>Na(x!JWhj!0nLm?JH<GvdZ at Qrq=KM%=qN;$v1X*D|TQd3zORmxZXg#~M>;b;Z
zB#O8a2^fn<2ynKApewjOj8Tf*oa;DVJ2w<31ZH1kby2?w$5TL4S*4h$#7)P)bhySh
zSXBYC?3u*E=H)yi5pkjA4zgb6WAq!*&Egt at M*utQTe9B8vXYEbbxDQdNN#-4Q-GL>
z)&XHI7}%ee12t5nwv#7sMmwgj#SD<D(724bMG*9W2u%eUy}P@)5`rIQ^hqa>(`13F
zUpc!1=Nf*DE~dPGB1W at rsjR@4*9+;?k#7)O#ezB;;b%$}sTM}@a#g7<G8L%{Xo`&D
zv@?K0tVq_PdXxNbsO9vuiIu&MTj4uNBX0-E<)n)~dM(@6(s523ZySiQl}{~(h*FEJ
z-?a?~S4(ZP{5yH!2 at Z}*eSP7`Vk6g(gd3OIz<OXCP5{owI(@*lK#q*3=RiSU-Dqow
zhl}lle-YD1oNO*6h7|TMHVZ;K(c#8j!zW4MagGz}7>*B_T-{>y4e_Fm+P8N&Y!?N7
zbsQXU9RDYqNc2;wdLtlE#WOc2Aznu2Av*wXxWh#Yu*_bg33dUbIyVMUuNUe9U6bTU
zp^CS^`PVA#L<1kah@`=qQ4z9)E}8RJgfdH2{aNhCm|U9pFo#Al)g|N*3WXX^bEE0E
zyWo0?RiIY9hB_tG=$Fq9mPI~wf23zO at c+by|0MpOOZRg3e`~AvS3moI{u+4np8lWj
zb@|sI5S%%`L<SHEX;(+Ch%d8xeQmk6w)7yr`I|U%PVJnDZmxIE!~{b3%fva8P2`<3
zr}R&&;9Nz7Vj6G**9$nY<6-BRiHtgod#C3QnHWRQO|_iM!h{3TaAHu|nl9;SAZ*Fc
z@#$t5VZIXsI{y0e&+{JfMPUKt3+tU%1XCV^xeKvFgta^w(Wk;Yr|S50_TtMKxu{|>
zLhwid9kIB08UUa{TwM-4WUGkSI7SYj-77TE*fh7Z8|y8&mEuMbL+QhgifV^QOoMwf
zEXC+K2-6Zl$1H{6*gm~`p^BP754rSO;w}K-n-cJXL$ZPfthvgzh?>NB5(pnd95TDZ
z+_OdH2BM30aBZSJz@;L`6GSi2oV}PEJ?G8bh$kkm=iB43zEXDyFXcxIZ2Y`KH!Byd
ztje~c(!u!bei;p}8oX)@m*>N+Bl4?_-Tlq2N3*<u;v=6GwZ&T~vsEnVFQ5G*y2G{z
zNunB|Zk?tAiwoSle*Jz0{|I!(Olk<_4}Hy*+kv0PZQ`p!e+dwU$SER5YzQ at -+ulVY
zr;bW=L3xX;kqBgJnC*u;E+8-wBnpX{h~$IFk;Hr{5;)%(&P9R3L{<;8RogADy3<pH
z)^)0tL>l2 at 6BW3@P`rU_z>V*=4i2~X_gIxTbV9r^LKgyrGPu3EDEH-u6~7$KG-xDN
zd5MsU&1%8~AaMgi;!*w?>1t1MtWZz1h{}jf$RAUH=u?Eshhdwl3&{WnrygrC!3})6
z3=gS>MZ`Z{Y5YXeI7q&Tm2fIICIJ%0=fjmI1Pvf)&=Bvf_;_qcdZ7^oaMRj3fY2^#
zkOzu@*{}XG&zNI@=SYY*w-fc?;-c(ANSz?K&~@HUwbPY8CDPC$UpelaF)Ayf89&OF
z>MQqG9xUHmx$l9Yx&#nOL|D`XiV&OH3PERIL&hMmv$ZfB(L{tR&*e<o_G9slg)GBT
zQU9}r-Cv??X|H?<klKkCbrxwqtmXr8;u!D at jxd7}4i+K=Rvc at q>cu8B!saC8;v;}w
z=j at zOG8_eh4n;reVg>94P!Z3Zx=E&3YxT!)l%3bd0qbDGT?8OY&&et1jh|+)KuJ5L
zAk*bcN*BYh$V67K=XiP34=G&cm7-<-OYt(JZ0VRU+0f)=u3WAbbv8d=+#3qp-oz4u
z+VFr3%nI;;a9b5GzsPV672#`eT{R);+VORRyH_;0#XH4=Lt#6(d~a;&y58;=_4Z?N
zXDD0V85^4187M3+b3x%HaV2NnzL|AfrR)p=ymN<$?2F3>I{Z#do;J63ws*IWwhq#H
zM0}^&mI(fAS_vA_vkA<7c~jA-r40)lMUw|1n$+R at 72(MP;K`Szc)|fq2Bxs-phiH%
zfa-!MU*h_jc@*tjzCw~J;2{4)nySj>eg5~roVA38VU|8#gTcw<C~po=<#g(IJYC>W
zSknjHN$apgfnmZE6czx!dDA(W6)-!NI%~Lf9K|5T%*4E~u;A8{b=kc-=Bqfx0~i8T
z(Kx&cId#%vL&keF(FgO*G~<T}5<|4MJCRxLW=J|Glera*SP%jy0yqH2MbYQbgEg=j
z05rl<A$x;3ztSf}SRB`6f%k%YhuZ&;L(DxPxB>=7=*P)94R&QrfMqSvj~}4`42H`8
z1^O3QF%0JfO*D!WEd>T9Je)WdNDpp=Y?>cNdRLke>~`z}DUH8HT7T9<(|dhAyZ at FQ
z_2FMbhQRn+=Xw#mm!8T1z&80oyYV6ejN~zJn*;Gj<szx}ifnNj0a~s$!(khNpBPY1
z{9FYya-(4TGLq|T-Yh6U1!T(oy`+?ER<)=HsKr<I6K_KMv;f=rDqolY!Ni!&l=6k*
z2_lm5dTVSTX8p=fq?Ckogz9|7j}-~5`TZxg?7n=7om}~8em+J$)<E}L<jO>A#=LOI
zzzR^)PA&;nbs#xVTj<T<V~2AaW2*dgJNqyC9smz&0i|VE{GhwT*YwlERCVR^O$*2|
z#dxqW<hab``=S8&arL~z0R{&5Bi<8$(a)37cm*QlqLGM12<stI$j=2cNg-Z%9uqEk
z>6cIapkrFL$JDnPvMu)0a6{lou`)6|%evu64jfXe^BPo9J&&r3u^LajT%+3RPr^$Q
z;yugi1c1dfp(BcI^GOUT^_bOKi>0;hU;xmpq0RDRFj?0aDA0Mz72^m7cC>%V$M7;!
zeCSwPg^#T<X?_An6=*GR6+96*z!pEmAxgeD4^GpWqg06!m8*Zv04IXd0f7zilO7+y
zcjkZ1?1^Z|Fho6Q9HQES^j>L7him9{3a}mQ7ft&)!?LR@#|>zNdyo(akM10CNGhmL
ziw321FyWyrOAw!Q4#Bg(Wz{=?+L{f1*Gc+EkH(`2G$7zZ6gCB<fE%Rbz~>Aia!~{_
z7Lq|5pRIxurj%l^Zn7Wvh at Tja@h=NiM3W6ZGExVqqM;IB7#&<xWMU#9%|gx%7zLmp
zf~G+4_w&A$Njys;k2F}rdFJm*KGLD39Y3iI2~bvV6|$VHOrs3DATyJ?F0g at Ri(NnA
z7+OwN*7nYBCFDH<ZJwOZRTux~MQ#4eS3j@*A_^$e1zLjIi+Mkts^2yc{*^hHf(S^(
z%}#~j?hjP32P(lLaE9$rZ5nPIH;UDgS+H`vs<yd_*up}#FAL51jCIZA)+^s#{s at iB
zSVZHsr at Yf^zBbA;TqqbI7%J%dfs>e7$%I&B6lS79c_KoFC?N!BYs$m?*E_!rY-Jxc
zdr0Wy^Z}Aq50_*$;}+5=V+#$*B!Lf`)4Pj9^1YzVnl<j0)0z<lDTs`WIytv9kYxEw
zAThSqtds0<D^d6WyZv}{Lo~N%mAvabBuSd57|-9gth8eexVsYR6N`ufAc3m)Og9Uz
z9%#fAV{F4XBg$-|g$n18 at QSe|p=isa>l*fH)CG=~4m^(1wmLwNs2u#9BD}vD>P^DD
zJR2ADC|fGNgh#AU5xF-WXzS(Zx4eO_mcvwX{`reT5=(%D1e3*|XnuMSxl`Av;S0`i
zEIMw5GEW+_^U2mCSMTb^?GmRsesl5NPoRwC5vhXqQ|~sm7gG^FaZ|gFxriGtAf86w
zGqGIUKTyNmH--_FJFxu at DIj4aP$%MWAvsh5Mts1`y?8l%b?2+wcPcz$RL8=A5?G}C
zD#~=tDw;xhi1Uz1BaEUBtToBG$PL2Xg^h<PBQQ*8cSh&=roC<_ZEI3P`E~%dgEnuU
zs}G+y2XTV at 2*WesX1bO#=M^<k`96ekD$p}|WCi*byvNwqk&hE9AZ8c at rzgh@!g;{z
zfuk3eEG(~_LNUk3A*t;tC5ANMlg2t$aH0^yb}ZeF=wY%xH)@cLPR9)vSuR*Re<I6M
zxATP-#H--9ilK5h_1?r%Y=EnyY6mL<U at +mWxqC1<8YS&<DT)%^f#<~Qf-QolpFV!&
z4gCMQt<I<L|Et}v*YD-xKd#*S?Em*W_WzqU{-Y5#GRbml5a_oL<|rJD%guot97w}h
z-IiP?{DyHh5a0oxWg4$iqw&Ontc29utO=_ycTxd|Q7C_b-&tN-Uiq?!De-}cry6&n
zEe at Ew^4=e3EAR(dPJ742o*|;zfUI)Rj3^blX??r at J;LCayuaDb_TRS<TUns^@+ITI
zBT2(co;oo>mX$E=LQf-XIk`vM1M{XJB_QIMXrY{QB-eo-vRuK)PTP={S<_XF`(+jB
z8`Th0nc_xuf3IAWzu`(3tLXjd!|vl>cEa?KLOe18x at 72vB{cBx)6(|z|JaWc_*~??
z8HWko+1w6YUK58{HX$iUB*X`@fgs}`M7$wxsv!y=eQty=X+qlpmeb at o<X47jG1nq^
z*9&(M9r`=RQkqhN7>fiBKRL(J&oNIw$2^Ur;O1kyTCo|}n&3C?K>gM+Pp81>=-kQ8
zVRL(j=TaJM_jepiRfw$0ehBFUR+*F*!~=nRp)wG^bx<;DE+trG at P;WS5U~&n3ai>Q
zDtz$ZG{|aPuYM14oy70(HGKo&Y)Jc(8s38&P!O?fh*1zaJ?fQo-t5K`=~56hngS3`
zo$Aj1`euftz3Y(rIAi0DoiY+m-z4>TsW98w-&kkjR1Nef7Y&i4<>~egkI#}EB>_17
z{llc&qL7x_dK$|zshEVR^dohVDdV9c6y?$S6Aaf5Hb@>51(>ulJ%JKN40sH)t65p!
z+0*T<oz24x4nn)zdq{@7nLYWz0HhK(K!0yQiV);X!d`q}jKV&)_BM9*55uN;2xCRp
zgFBw=%(pY4FB|fvxU0jB^=H%cWLqik$Pzf^gnpLOloJ=Q*q5@)qQI*}+ at y#wS+KvK
zoNo-er*o=vMU)>}ofzeK4S$e&$tW at mV?l&h#NFOQhMm#{awCanQlXkyT>EhcCQM-D
zmtOHq&?zpBmcUn{S2Lpct!Pg2IACL$7Wd^sl#+Waibcxhw at ny&anc(#l-V@*cJRY+
zwd8QbgbghY6<G)$XG-(u7hhOB=VHj3A^w5Kem>>Lfdb?|W$)a3e!)5rWBrD6x;n<P
zv)VFIaZnqN(FwM=_IbG&0s-4llH&9KV40zt!2hMH33#xXn3L8c<<l!Gehq>6Kdg@%
z=zk8j);D*z-UB|9^MBNqSC`ZLueJKh=lmb<0qL7p5qYkKh_@#QRC5Jkj)9()8kp>o
zCW`I(<?fZ-tV4=8%{mGHIz$?nK}J-hfarn^6PNpL=QZwH^t;{uTe+Hn`*sW2{^@Dw
zqywwFrq+P?XkuVVuo0ZucV>_xVAwpvq42hYAfGVAcLtOrL1bvK=PivcjF4j#!3B_R
zdnh(Y<m-gfT?g?F$O6vT)=7sYl_!#3-sLyAHTReS6W$V>DaK040TadD51Guu%#6DU
zE4nI0_Uy}hxSooes`p@|n_s#I)z#YS(pnukYI~iZ+TE<ecnM%g-*hh4U}?DoQwpXh
z8 at _$Cl8uJ=4~fn2|LN$F+%aLw#7$g(iXki>3VtK9$&icG5h9aAX+~GMXUTh=Dq!$z
zFdq!<X8By1s{yi8@<B5M7zO(O&$GEwZuHkyV<{417kzw~`gJX%G6E4c1TJ?aVeT5&
z at dDP0ws?K86`0QewlyF!6Shh!SK{0^&$nR=KsJ*#`Co2o5xlmlPd&T9sJCm#_V%uG
z!COtJBNwWAmvA-p#hgy%T1k-WtK!f8C(A7Bd^$eORa$TIvqm=ScKo4%u!;31n6z+K
zN(YP5!m^}raPDel;Y})TzYj|fD?^$hFgD92<}_V~c$Db{P*%erzg1xxl6V><n+4o@
z@`wGP*7d=%S=cTYxYZ!5EZ=wyC>ndVesH+u3e$V$F70b@;D*FO<0b`$F;nMy+iW at K
z3Y7sP-B6lq at Ic{>V{!K~oO)>YGpC)qCyBvKW8>ot3I>1<{zzd_{IOG>|IHq}HqrV`
zxr}T0zuM|*YX7U(>Yw9(+!W03Ro-zu!oiSNDCJ_-gx9$PKg>HprnhXzvSmB{W{WJ}
zQ?O?!lTYTB;t{y1rDYQcq_#3&t7o+@*H-ImEA{`*POgsol(VynWOD=KBn`3&oTei%
zal#c287d#jKykJM-(=D^H2U<Es4gsaJI8}2Nynl_rD(7Li^mXu$-8mf;@*#l5j_O=
zV#{$u2oBXdLl!wOrU*aKe1nLslC0QHX!ycg<@l`n>J^PjP*^O$vy?`2cJ;fIkEhxH
ztqxMOG_M+?<1X`wy&hTsPKj~X?EjUOdn<|kf9d{b`EN?#eqgcp-2Vup(m{av7G)#s
z+|~KogY5V!+l4Z*39;z!^t*m|fql|wjv5#G^fewfTG-XC_G1!<d5CUjr=52q{^<6^
z#Z!1@(`);<|E>)uY?hLU2LrjZ4f&(nJ|*Wn&@Xr(Z*G$tgMbGMBN7t6MyyQwMv413
zTGDm~G*cq&pX_yQPo at FEl}Npo)fckXpnrKcTUyB4a1_6rEibsyXd7}dmX27IR4<x{
zvH*7er{Ur$u7Z(n3>SXls9E at HW42J=htfSnBDhl1Xh=!~5e=!fw6=1uj0mFfMUf9H
zt^W4|+>hMlVqC4mG7pOa;Ujizrx~{S<l(;C7!MG#5cc&-XV@@9dQs(zZtpd0#4y2E
zUtdOMa7}MdX6NAuVFkOe4?LPZfm?ffFe at qV=@jea4-})C)_fjzL{6c=ggRzfXR}W0
z(QKzBc76J7qI(c at iR=P{eWTZB6SE>xJ({KQ-xqozrN+Gu7(!Zx)SI8>U(H7MWjF|&
z0mKFLjB6uu6+n>cfQvWxvdWe>rR%2<+mNCi_J!+4g;H>8z}>X3^4&?a1{0x%5LLHu
znF>d3Z9?9YfbammGv_xn?gE}RAY;BD)D0BySPD*MaT25-E{<C6y()~AvnK0r7oYen
zs~_s1-(zjb at p8ND51x!iqdt5zZOhOX%U5V~AVUM3DiOt~QGwX}`l2~_-8k#VZv<(k
znhJqSJpSl2F%4rP{3i3TtM=27=yuALs+jM(JjK&2pG+u}73^LiOK$&#3;2hgHR(Y(
z8H+O?e+_NRzdAPlA*d=cdQdI(yCkcFKLT0(BZ>A?afZ|I|2xn;FPz|7)bLaI|JI>h
zPv!sGYOVg+|97ed{J=u*$^X+%Bz!da0pdpnGZ2E45lIU9-x!C$^xl7P&x8Q2&DU45
z`qJ9c^4ii;Q3y~I;hG_>Pml%_ItJmdp$mkN?-3Ym`<Dy#n!IZ=R5apc2(Jt^wEdl3
zB9v3-1RS)ERWx`U+l+crxBye+-<wEQ#=Pq|ym<S+%V~n$zA%?VQKWft0<)EARQVb3
z<~;3Kxgv#~Sq7Rxc~#a2)EW?&)ZBLSzHDu41S;!I>=qax5)fii;<jmxaf9|ee5l&*
zWVTdn%bLniXi)<LGz19X4Re(t|7soz1BA^&6t-3#5Xe7)>|WsY2W{=)5yG({I$;S!
zE;{cZre)^J5}}xHl203YrwKv}^(zE>09$p_0ys5X9Ev0SVE;mv(KKiNWM4ya9J0E_
z=Cw7mc91W5&&Icrs{);Qdj#hhN}_EzV7#GyQUcVu9&@b<R=JjRpqYs-LDXT`H+Zu7
zc1&4CEh}qsWKY at EoZhZf4CXXUi#oIla*_<^9}6y8?RP1#SPFs at 45VP!h#wGe5yp=X
zsAq$)Yj=VflAA>ygz6q6kTE$q-ZK1}0%|<yO{nT;=8I$NO|G$ZaXGqjD}fHe8V<;y
z9`HiU;Zz9JLn*TjP~;#>Ce{GdPLH>!aOu=TKUe`%)K5pnGnNQE at y*zLVKWmgYzh`&
zwj&bQn#enG{fc;`mI{D^0K)HNyNGsfSSwo+WRJ_A;<8&33t+}&JOf=x3r1s15ZQDm
zZFxAF7WL&+SgaS4;X*(>1Kz^uuM|SidJfmED3 at xgF%UG#88Ic)45>ko88a-|rMcN#
z$`$o&N+pv9QkZovo_8=~?Ys;fL}7r%(Quz<pg;&&cr1)Q!VkRz$(EJl#<j6Ch&kdw
zVYj%Q$OSxCslx~Sx^3Qrmt9Yy09+Zg$D;wF?HB;EF1$5x>@#SfX~8x$k)+CqMeQfU
z!-*pFZg`2*J#Z8Wcc-V#+ at X@gyg4{S`0QLqonAxTAB5s)7l4Vv19iq4?!f~j#ZcEG
z?khAeutmW_5Ef7e95=+8zp%iaD=-22NY<f?E7~VPX?ZgSe{kOcEP-pv?h2l|h*Tty
z;!07^Nu;z3bT{i0oSnCTrhwP9kl>6CK1Y>sI%|IP1V)mWMaPyBC=#+;*w6-M=6VgJ
z=J2#gD{=B>M&|hD6Z`Sz+&pdbVI|AS*|$f#JK00Ma`kwA)I1v+e-lt8hUk!>whvWN
z{P>|U=s=Uq4>Ydw$D>QSy3&@o3XL_GlXg@>0DWz2(@jn1tw#%$S2zSoU54<jVW at MC
z?i7H5#t-a~Wq<ro&PNwr!R=<3VcdYc9E?WHO8U2`XX!}A^`Jbc`-u$>6eL&!^*OQC
zZt>Q!1Bq?aB4NdZJK?n~$pHezbz_JfbJ28lEaKWdAd6!_#-%X at 6Z{0QzQtsXYYFae
zTlkPg19Fvj3@(|INjVv!sZ5fmtZOdCOZNh;_*2v^Tj8Nw(aA8>oOL512Dz;iZUos!
z++mH at aoRUWs02}lIAMlRyI1oNM?8B at t)z7h34C{wA)8PAZsRXE8~SFOJ*14JYNT^0
z=sTo_8tgM$u^-MUfax{ki~4q3;?b;K{IvB6BNsLH<gq?n)P+kl-W+<K?AW1|9i58h
zFe2*?4-X!<6D&^@kp#<Yf(BsmC8 at HjkZzrV#`D|8A*(d=vs(_+n8)gCcti1qgrkho
zIG*!nTyA()6gCfZD8(YOV~V9!kgcD8`9nFke4uXRKcTu;pOpLm9MRd~0~CN0?f><q
zd&~L!KlheC>;HZg^m{-3pXk^k`*wmOQ1E at Zv}_c7by4s=SX+Tr`+kvvPqcKRI~1`|
z+JZnW6e^H=MI&b!5@@F&$CE9O2$|^J_|%;16Wee)uHt44+doZ92ol5`dvl#$uirYp
zn_XOWhRq8^gyj!}F1F%|Qd=3MsZy-Gil++uc{cZ^(|(Hvsb-bA!-Mz=?B)f0&)aVc
z+Nafh($KAH6Y47_QHVJ at 8KHfHR*Yno*Rsh#wJFI|31!g<SWw3WhZ7zQ`UCP?(==wU
z1LPOizM0g}22_<`8+oU}G+_Q at Ut4C_;!#C_De|4dHN>fc;ua~uZ<M2tJ2)FO8|zS@
zHxj2YktCf=nKHcQpa<ypfW%=Pqq`%c;|pybYcVsbQvKf7NQB|{*4i2vb*UKRO)%_H
z|4^jgoUEB+NVJ`Z!*cDQn;mEowz%?TE#YdKRjDZk#gj<e+SPj^Q?zCgC2lXECjc@;
zOrayqo}(iUQ!L|Wpxq-;f!u~#;1gY`N%(|Ika?U+c)y~Rmc~5~7!H5}jzgme=)uG+
zTdQ;9z|C;osEg)SrrWYJwBqAiH5>pG8v0oPBe!;V6LAEWn_>3jkFKkf9nK9Z0f<FS
z4fx%{HW%?K-6$fX$N*ZYNM?E@!|v}!20#pUl9xqdyyl$Bpetw-?R^o!MJFJWy9U^f
zf=q!-rmSf(ffNRk?tdwm!yMZqkjH#2o14X)k1 at Sp37@7IY63T4n1!1n&_~8G1LG;s
zY|7O*MRH>~mK4#r|DnBwd)rtXt|JJf$oE0JHxIa{7|NcUOp`$uZ>Jo@#jR~Yy!lk&
znC$wPX1g<>GyD$B&K$59OGfoQ6_!H4^=A>0!09Wo1gW}#3da7FYLWjDPu75R9I at TC
zwTAE0b`~wH!W&gdkWAbMPRVvA0rT7(=c*bk;pm5FTf9zI{cd~fd&ChhHXl**r8|{l
z%d0m6C2U@;Dr8Ev-<m*CkjFd_tVmHMITX-<ForzzG at Z1BAjAdC*!E#D43HIdx&97L
z9nVEswWbycn at KPYeIrUg_3!|?luMV^^FT7l7h0N^AhrB;6iylqKw at UQD4pH_G6rM9
zx%l~7kjN298 at l!ifNC|<PxiHG1=&y3^6f{b^D+e!C}GnWD5cOzka7O8T}%t7GL$O;
z>m)4XJ}iTF7k4Y5CKp~DQh~6{#dBfFLt8G#-5I8b>Qk&RPj<#1!~7evkB1GCNXtfg
zYJ(kSCS>Ugqax at 4%$5ywx6+g-#Y^^Mu-}pmnShO0=vzyA^dmCVpmDJO{UMw_sR%C0
zWA7V}D%=ejda;rov`_kj7J{WYdSlMH;94jL&W|r6<Q$M9wbB1==m?ezs7~bsW~Ncw
zM8%^dhr2>uT=1Sl%775k(J&*3<GKy%FfWU?Wio{hd3m4%Zd^7B7zfCo9nxP~F0otA
zfE~weJp&~hkXu4Dc)EZa=139rx<Rj$M|E6L#%(`Tbr*F+fA31 at 4RhUL@Up1Zz2~^s
z{wGt#kW^zHJx|f3phyU$M+A~6`r}so<|4p at t(z~4Yel)8%Sr)?R0_I4u=m2Q*<9Sa
zXNdJ%{#>Ew7c)+-3`bYcz&QCfFKScf<cHhUo~D63tTc<48Cb}j at vd|z{9^Q$tCG?`
zI|MK at zh2NTBT*al!#C!0SoLOQ-{O)2a|%+mqCI&7W2=pD$w-stR2;@Vjk6WU0|e;B
zZUmHCeHYBYhl-6X-j+xV8$nO`<0E#+Dm+>3Nh3vN3ZWju%)y^CR+e*aV5Au3b2ff%
zMUHN6-HI5cfUUtsy=Yz`dH}%F?1GTA;6>K!za_rYH9^OmKpl7yYzKFBf)~+nfrT*R
z?FrszDSPJ;g-B+O*_5y1D}FFWVz(xXFzU at UggOlH0Hru0B55vd0^<D?Cc!hk=1vdk
zQ at cGP_}>cF07QfbC^<t_Ag>WzuMpL&Pu at yi=&dH)|94Ir9pg)-ZRzk=7itU3%OI*q
zjyYmBECl4>YKsRKPGTmOJs<a4P}M<ar(x5mTr_$>Z3@@I7infzQamRf50XH28JtQF
zQN`6;5#d5j8MCKZ`wrpcPgi?pYh+HLzD(}Cv$b)g0mK at 6>$_Xo(}Vrp?8m&B^v8uC
z$toZIn0^24*1=Zxqwvv<!;NpZcGrIdmDOlzlnh|dd|A!b_cm=IHXIaDOp{WGN1D>`
zlEo?tLS2kamY at L!M5uN36Tyk3ak_z4^l_0}rooEC(Mr}8K$AOg{qFdp7p;XjFA at Qa
zvk5plS;W2PJ3Ba3PuiEGj7Pa-W8ejL+|gQaWD+A$ypU#y99Xh`#xM0HvoD5ORkqaK
zu$C)dU-rdBYVnQR+#Fa2&>@@Jp?Jj^Cst*k!=v at 1=ZCuDlmuBm(AQ92<J~6{N>*h>
zk at aNhaF)`a%S;sO=+80C6{3udwvBANAlH1L+e&k?XqrKq)|>EZWAqqMK<qGvukir}
z(9#^|npK~yA8suze0Q{UcvQ^}ww?k9_cjm!ZF}##^_}faozmRl?QH)b+t}ZEzPo3B
zJbk{mafCF>erFi8nX}Qrff`&Zna_$uVKY);*@<=5?jgr9H=l+kTf|LFkS*&zrKm+|
zV|@ql+2|*-fp9iQTL$jKD at +=9BKh&h+Nh7?3ZIKUJXnS4@&=g=!A5t8NKxFdBs?Vz
z^C|K(!W;o0;w~i7>IBYCARBmZjo->{S^8ri+a`_EN at LUk-!^I at 7#ql;Y>42L#S17G
zZI!$tUwB7OAq$Vb{ApSd%ZL_~uX9!8z5zZ}5x;oj+jZt7tv=c2lfZIQ&<@lJNDUzk
znXhxzC01U&D}SzSpgDrbjHH29JzLNRR at mG~mww=LuCjCBoko#CXQS*!l at tNj9|u`=
zZ~rKhU*%A<3xpQzS6QoE4a+j%a@=VX-foTjqB(9NY6)v;8#BY4?$5^a18lOR#?kgJ
zcHR2!GfoL9{@$xG;ctN2g8@>bgPD&;Xj{y~7EyTyO&xA^{rS;8vLs<I?P6F)Xee3`
zv!Pi{ccyue>&BYk{)%9F*ujm<0iygM3YR$ciUT;F>Jj_wV0(A{;D_w*TR-HQvAiGL
ztKhv~{@N~FAGZu$DMO8%vtt1*F=Z1z-BO{a9Qq+#H|Hwcfs_MbdBh*HCyeWt!*v`I
z at CDO00U?|n2E+9QGT#uNjn<!hzwymUs at cipvCvo5)iVRIs}i at 9fFAt`5PiQ5Ldy=v
zs#*N#!G?OGCC48XevpT8b_Hjlz=Zlfhs+}HGp&zn3x|!JY{A|-hX at M%z-UHb2!Y71
zaL at vSWY`ZdQwX*3NP|o8yq6qU$OvBi3R??vSf%kKWkK~6*5elo8w{8Xo?T_$9QSfG
z+XPpBD at -i&_5aKvLhjbT`5&S1Z}Z>Y4^MXXpWxTt4 at X=7Jo>l(;<w$c&F$yA@>{>k
z`<?y0Z{!)j at X77U*9=asAWqpiGc&ryVO0>l!(b(N2!_ApK=}!@95O49tunC*t;$MQ
zT=~)_izNo+&0eYD2An`keASVz(ryUPG6*#N3%REs&~=#t;GKZmfmGm at fKZ;91MlBF
z_5QuJ_k8!?hg;LalM}KuU_*m7|AScc42jUfNt8lFH#!p#i<FSUnCoC~uZvbJEx=g^
z%bU5w&iBY7h0&{Wb$Mha^-7VWob*r<4Jkr8<Z!r~TTj=Y?;K^hV=fp6NCKnyLMI80
z5t&4LpfurUGC~Y&@M_JXbKA{ZuvzIKAzgfk5gNom7d_d`P&1-i0*syD=o5)zPIO{l
zA<c8Guwy~j6dvri2qscES&kwJjP*^g*w?TN=~<B*8O!k_&<GbubO&~V9A?d3zSkP@
z|6GsEk#Gp*U?sQ^)Q>>?vP+6q9P-2sh)BpZ(Y9y}H}U#|*Iv>~%NK!%gpAt{R}aEi
z)pqtV;B13o<N<S}5?$3z2s0<gTeLp5e$haVRq7VHV<L_tMdgeCsnuUGcNpN{4^lZt
zBvQ9+G5lM)OKqW|?zQ&`ke~or-eqo$yz-O1`d`WEV5yR9s~oO{1C<j;ip6UJJbK#4
zMG at XmD%{|Zp`Zr>t1t2RC`eh}5IXK?+-M4MZE)Ak#J at p4SV2kpVTc6w?C*$G`R=PM
ztwk(k!+5XiN-GS at O%x+q!ghmn9(_gf%S-s`q|G$5fHmc%T1eV=v!BMeJ4B;l6B)WM
zj=`;9MlqKgH6$C;uxoiLRfLum1CRzHY=dzzx5OeoI#3BXEYiG%xc74T+A?+V(y%0D
z=eY_Kmotv{PmJRo^u|YVEN|O7|H at 3FVZ5klQgh`ji{@hMSK`sdYD!zk{!OAi+Q<Cs
zG1orL1p&7&_?JVzh1J0&!WNDifTnDa at d~~WYpd|fc^JlHaQ(Bd7~?&c<EyaLO&BIo
zpiJ0_v(U-xQfgyhp+eeeqyrME+3KvHjvtc|lyrM*0XHkF1Xor(@Wk5S#Y|pAY&qo_
zV^^8bOK=k44n&e8?hpuk(D>4T2dxS=j_4_Mml(GG4ssN}=}58+Xyg9R7`Ji}f2+Qh
zJ!5iULECNz$?2%bYK@^qk$ADx;F)Hi$nG_-z8*Fay1jpjpboeX{a0L(8+3-}(bJ^c
zoM0^DHlkOdA7oxn5miwgtd~auG1}@GoH7BF1F)x>4v at nS3p{C1m7#WeZk$DpU{@=}
zZNEcg0Hqk|Jgqcr?eJym!=;iTK~H634z|>GDr`#H>@@Zhp<vE}OTS^Y4&g8Qvcw9%
zWF8Hjgyo&3!=JTV?C1&uX-R{&ULv;1b_Y1LnRL5H)wvI8Y!4Opt|LoEs)z5b*Uh!X
zHVgNtAdRt5>&gCAph&Pop;q_+vAx1nW5EGl35-Vo4rh0yo<4<+K5le4XL&3%GwOr6
zCJw^1S#@Eiu at _@`$DQV!OPFkovI=7(N%Pi_pgPmw_{MP5I8&BM at V480w?&K<T0(o5
zUuVwQQ14(`X$h7Jy72xJ6PJ{=tbt}@|M}k0+ at 0IkDeD)C`QDsvUsf_y*|W1!7Erk*
zY*?C5-ia{|;opVpK?XXpi)omKrf^J*Gp~fyEgqZa2QBHY!2i&gAB)3MtN)hdRx?#o
zjZG6JLN0?OH@#s^8;~ZNT?D`DK^gsq0ld{qDvMU>J6I+~5nh8z7TT=it4j%tVjD4k
zWjJaVVn})%1v+jWBqv6cqfKV$l{~f$uKQ$Mkx^*!LYHF4*0z5myeP;$Te>K00OJ>=
z<Vb0?0vd}gQ8x)^K_Js>8gU!@y)ywW_`}?~n8ung_UvvS87|V>m+W9ovFEhq46aOs
zJ!{>;1$9RGKSc}`uo$vUX+ at w-6M3QX3+ejQvj}F*5!hTACstl>T6^9k9D=zlZKy|_
z2(fT#tZcVZ{XO at P9YD!mB0V(FE8c^?{!~cg6|}Zu_?P+^bwA?l|M7h5;D^TH(f+|!
z0n5#LLZj?K0#__^A)ts**={1lv{iHIAU&gI>)F4y%Jm5qZ4J-r6+iLsgX2VYA<pM?
zDu$8pv+yGgYCBGmJ%R`Fz9ls7lOSBcs0INCjuJK)3%LOXH!(*)O`U;I7ASSGJNFQg
zXN}%Z;4J|VL`ZtDfb$Xb&0{+JRxZd^VV_EPb%(*IPavApQRt>+PY`YuF(x!DFouW}
zAFh_flw>`Su8ZbqPk39Tvb4t~%$xy|2>2!(T^gbCuf5~p<yU#UhKe0>S#NY25JD)R
zNcSRgTzyrH&XadSS*_}e=GP00oBb1sC?VF?1>RZy3(o6C)bH1gV}yf#{ferP7mLkT
zF-yWVcM=2^h|66qg?QC at Naci#udVHt0(UDMm##|cVP&<p>paKiDsXv$${8#TuB+&m
z$bjQP=e67@?6lOZDCEFu-|)a_qVi^ppfQp5r6G~t9!Y=zTT%3jGJ4PKR75}CXae)y
z4Kl)zAG0S2y}*S)XJ!l-4ntX9si;A13y;u}RSXIQ|F$MuKNGgc&-;P|K7q6{7B*-+
z1MJlAX7lv`yaFX9EDn)MMbT|!YaKuqm6MGpHt32ZRS;p5kh^1?u;7bH|13GxjmNTh
zf#7tddlc&#9h8$xo#16{kw-vgHE$Ywnk1To{HoUM>=d4)bO;9F5j(%ZRE1>t|6Fy@
z?ovg{O++c(e4l8VFX<hVL|hTx8%4L{OWd1qmiMqr`94>L3 at M>%*)hf-8y(*ZJGPeG
z at 0m_dmGsPHMAomJsh3j~Y>0r7`#goC7nditL|QLAA=~&~9HGQ=R}MYhDOJg*NIxiq
zn|Pe*PdKhT$0Y>A;{+1;^+Ujk!n<wK!r?*&aDyeIM;XVZ`81FUxO7zX(}j3XP$6<P
z8SOk^%!zU*w=iJt7?f`=ozouNbYz-tUbg?Q;XZr}p}^U=?P at wVV^h*qfQITEoVWXY
z(;Pr^l6?!EDtE=hi}u&U at nw5(hUW_s&YVS4I@=mwBGw>~Y#VOta}^>kHt*#{Q=QiF
zoeu1xD}+2#krUqj)S(DXHji|j0&<90i=zg#y^lZ?67k;LLkT5GyYq4mlQ^~fyB9Lb
zoQ!FLfgl9}DM$hR<@Du@*V&X60Z%}mW(Y2R=Hi^~ex`hsG^~+Cw0BWDCUoA{_FNV#
z@)L~eh3}P`%j(HVU}|I8fHRY-x*`)N?PnA&pUkPDEF1P)r6Ddgg>wt~D4Lo!qDPoG
zIU2;^`243(U1B>evVo*CWxCFZ^CWYi4NflS;lT<98|Xbh9W>lHCcvU#jg!H-%87x@
zKqPJ;1%(_CP at Y{{0TY;#1G;fsrF{qFPVYeAn7}R$aaEQrS2rt_0E_o40`wnq*J2$D
z^(#4vu%sDJd9<<o!1P3kCMABfoL7LS;NPRV5EL$G at 4@LL5<?;rN_G~A{xD*T_jmhU
z`vg93P_BrjDQ!w!QB1fmo+mCblf`%AH7`qqfCBiaN=s at snh4cCws!~oGMf7>QE#kD
zQj!cfou5fB7Ih0}>POkvwz4YHpyKJn3o1aM!7yi(V4r$JZSqE9Ilr00Hqo_gD4e1^
z%!RlVkruW<`N|vyl)!X9zNqk~43L2K-`r!#A_3A^)+Cz^CopNV1(F`C*^if`{gd3n
z2*uHPD at qjYL)PEkJKQ=r%1qv1xN`1`Pfl`1lxzy!Te;5dxMa^6X(13SN*cR<hoN0@
zL%NP=<b?qlQM5Ic-Z+XW1fp1BrF>f9B#{UsYE<)JaKp=yr8p{0<4s`;#`E6I$hVMC
zWz!1Xu5t}=v7+tEy20WXAQF-?S^mdvLl6y!IN*uqlJZVElC2zfZ!1TNqHw<rQ+i-^
zJ7xg>I0=ptQ^uQc-4Gz at hf;pbB;F3ie1Vcv5#52V^^!^Oz?cr&G at Y5?6$(u2?nfdF
zw^`n$0QpdN?mk#m5nobA+<9{YfvhQXq%Q2QGwH#!0j}QodLyC at gB#;ko&=sT=y1pG
zl?>Tq---^FH=yJ;1C^?Oqpns212+uXL+z+tZ7|B<3?XAm6p+6q at 8`WL9I-OZNaY3&
zQfTAWO?^36VK}1vB|cIR_mH!v1;G#8H?D}l1^(pRN*K1{*D2R8*^Ii`MhD();Q5)w
zsQdK^f6;JiBTpu7vGkwELR}$%p2Px0$Ut%h`d!cpKSzj13fA8k`Q*EO#Vcee!Di%7
zD;E>dNHZ0{iFr_h-Gqafw?fPfOMB&4)P0D*t at 8xDz1oZE5gl0@(o{f?RJ$a;Tyw}}
z$9wyca;_ly-RccRoX2^slcVk(B&6fJ6(w-cIXB)80 at O7&O{nqetNF(!!l?yV2q9bu
zNzWv=IqbOXE<iI3#|opwmE;<R*i8ND-?(|yH^r!o44%3Ax|;SUoAK}nwznCdVLTiN
zgGD#|TK?<^Q6V5x3LP6jz~YB^;N7C&D*kN_Z*q|ED1|Y3=oJng%e5)j$!PRq08=2M
zG1fHS^dV8oO^(Y!ADR+GsFlzz^zIT_78*vgTtj~zphfV9JyILW$AZf$(+Bk!N*EiF
z{&MkChewtayHSyuGCL(C!scln`o6Ss%X#RV5;DTDNzA~wIqBV8Ay_&OtPH12qT@!&
z)dEWlB|ZIv?du%RRGyAd_vj)vpiK{GagKj0y}r393%7?6a}S9kkfOIgQEUajO}U-*
zKCV`i6IFJ#3y|+Bu`JLEF|xRCm4OCLI-+`Pvki at UIr(D7FVH4Ke*zq4<71q`@c%8D
zKvI~&4WQDZBO`_&y!hcio{{MoBKB1@#I$C!*X&;X%he_7u&Q}1VG&HrY0VD0N-UjR
zPUC$Ywu@`iFRJFQw%~$cpdpRrC=v2Pn=7>95E@;%61yi-nQO`n4eS3M+z1>xxm7Xf
ziIZDyx0-bc=!?g2zqM^`Bc~8U(&4d);H(Gui%JKxqpDv`#MNf^^1O)*4PppyeGf;Z
zsz?ZF6=J)o!b#+i-VTR<Z{(!L3YE?mU*u;N3k>lugK*)xVZ|fRF5b~}?Q6(Q%0&<r
zFgYliu~fKF4=tp*gp7)#BQT?JR8|5^L1Car8X)0t<S?b at Wg$@Va|=!scEfRkK;o<>
zp(INCmA{>iiOU%u7Zz)B$SG|b1l3FJ^cnB;;3?MceMSC2&O~tl6vC${ic`URXt53R
z0j(5k`6(_c(BcnY=IuRPG%Q4E6oyBIrc5Mc$&^y62ZL{;)JJP&JK^7eJSetW)N>q^
zopK&!WRN(LFgeQt$_^Aig*J4~j5;qq8XS!hI}9i{7PLd$FcUyoF_yB9Zbj6AFABLI
zo_y#H*Ax-U0#Pf9nqs|RR=DW}cfGvxx5zfw{6Wzd$n4m|wwn(*Gz+YX!xPX_%Xa38
zhkKQfL^i{9nfv04N(b((o$Mj{rg+02<-V at A`|Bu6vNx`wDut6NB51aI`!|G^5Vsqk
z3)_h4O7RmzZ3vsY#RH8|vDAO&+QBC6<S5!V<`%FaV8nowM8qek!3Um_SZvtlzlG5{
zJSd at 1P#K)8PH3wpD6kK<VWSq(sZ9D^*%(zZIwNhWzN?b&SN^TtTFW;1qBFV`?S)DU
zPmT8uC}*OC59pdxvq*)`DZCY#%>u`7)SljsDlIGuEgp)6M48=@(hB1fg!^&_?On@*
z%G?WSE8&w&YV%<KnGnQeb}U+o6J_nlefgq>5-`N0;GMT@`)RiI&+Wsb!vZBXyUQt$
z-Mozelj~wqEd^1Gxh!uPdqFQ;({bycp42QH^Rt$R#carTV!%Ola`|5s>63u1w9R#T
zYs6YA6^J=rHUX#0sP9ZX3%^|?D%Lmv&7NoRITU`-l(m%Gvy0O)#_|H%ZCe8?rAFgo
zwmmufoi5qHXd?6LaGj+JAQV+D1QOAHPP7ae98gnxA at +1ANRZ!6 at Bpe~dkrQUOo8}O
zxMc$J2fCDU{?|5{M==~)!qz9_l=Vwk at Ax=EB*l^1FX*Z0c>yJLg$&TgVF!s^d6tk*
z`2pH#yc`PSEwB`1EzZTG@@(83;AYJkuohOAGZE$GMzC-bIRI#DTyVmuh^Z($TrmcG
zCh+i!i$!N<ZUkt at +zunG;a(E3Pae#7CosRcCIkE_W(^Y&K!JcB5CjKabu?GuMkSyo
zj;k?7gxoD0gE#i~4v!AjVOYqG0uzHJ1=>>(5$lJFyyFt`nKVV?nMrSSuamshdbtCf
zX0El0US$fW7BYRg^1`xJcuh&THo2#SCZ at Qb6v{C_T`L9VIwmmX(1ilQMtccIjSEjO
zT8fyc at k~4j3(sI}uRucm>5F<ix_F@`HpWKdK}lndCrtScI|%;GV|DS<god*aP@;e{
z%YiUH<UGa<9XVH(%mi*N*CxB4z`^mgPysq at 3R47)oElk50ht`!??IRIpp2(paC%+W
zOP=`ObXtaszpkSKF)5yo|5eD-70)zgc>@#z>d<l^)RAZkf&p6#WK^SAQm1ye?0STY
z5|THU1+jUUt6tJRQeK`S*DX0^kI2El2cIjlgfXzm;2ybw5V80{7#+35S`)0*(}GJg
zPH=E?mIz<8IT{UPyqXEZk&y{HO%|jWzA_eN7Y)Ohv|<?|DTx1qB`8<eT4rvc+c`EW
zTU*}`Bl4v(@)lT4>t8i|#)!5wPCD3O%_$?nst3<XJqxj}JRf1m8$flT_sb-)7?nbD
zWZCfZ7=Xe2H=^-#t#V{&`G|<4w=iy|*cWYn+S&&y_c<oJx`Bc})Ja4=a%L=_BCM-$
z*Q%%mY{gtASKdn-SdnU(U{<(+Ic7opf;NhTGEWbRYKlO16U_I$hA6|PvA9;g*(DQW
z{Yhyb7GFw0ZhrHL=(nh86A<OVTY|XId0Ri*oF|~nOF1Vm!9Rb-pe{G|y5K&P7~ouH
zr@;z*`J?T`Q86f<1nAAH064JlqcrD89?9%A#fJ?P$S#2#>#f!hx*YhgI#ZKk6URnR
zhP>-n*a_w5s(oMrl=A2Gy_o2B at V<yv#kS at DvIF(Ya_vuO-E9uzY%xvijFdPXgiPxp
zgbK701g)Iv))gy6mxO|Ip5`!~P%0qMtPmi-IB`>~x6axU#FQ2ogkc(X=<2P0XW}vd
zdnd}${ae&nAdV!bEpNv(tyAI4Hb{owBGq|2+kCR%X*Np<-F5s!f~e+Z481CVsL6dz
z*2ckzq5bL`NPA^)&FlA%qBg<-alBA+PrH2_Vqd>^qTMqk3L5oPgo4-XAnoSU?ICUd
zlkcJcWy&{Ed7)$vO~haDI=?&IwfxsjF&9E|yK~l4IcEyO9Aehp>&Rz}!L}>d%_flO
zSiySz0T7~Z(8HuIZh8uM47MEz6sG7Rgw`}iK{<Ys%9xWNE|lBdzY+0#Uj)2>si-~p
zHSo{$^y$#gcQ6HNxPxH2O+ at -REvVj;4~g-L2p4_|kuNNeP|#A}Gs~E7G<#L3XW@`%
zB&TPaPbtjfmVf8$Tq1kR)hPrmKu#460+W~%?%2o at Y-I>fl(%pVKyFvwsberE7$)H0
zCJevzBZWoZsUp!=ynEnZAop=$`%p)$;PUSf$@0)Tsw0d-doWKSU$PD2zs_(W`<}Yz
zv^mbkxJ|;Z^|Ez}sLPj<-vOZ-aPwYm?@jvfzvh+Z&M5D27qvO at TtfT5yK_mA>ZH%O
zJvTj at w5~X!Tz_ClVZ+wn at L+lm?rpkF`=8EKkvuHki4d5NDnL}v+?%^Xe8!#L&@DJw
zvZU1K6lGJ2$H6Tjh^13jx&iv$OcK2jo5QB3XP}E at fLM#@7D4ij<^)o=JgHiR^_+1J
z>m}ERa6<;i9UI|2q3Eg)8!EZuBSTQ=iZF~Os=tz+#A4c1^oZjm_&-3>yPj6qPCg~Q
zuze7Zbe|0-aVZ3nUEUW}3o^4gDYXMArJ*AcL<;N99!qbY$)XnsYOHiEtHDD2*n;e>
zpsiTl$O?(yV#2aaJX{eL9dc58 at Vh%<?ZB{HpAXrIy2baG`=;YWek;D4m~B5^XHDI{
zwI0gboXyAU&$*lFC}dlK3K8scU_Ehf3he+W4zB at Tg(As-4$&27gMmJB19whvwUsJ&
z>of!lj^)j*a-Q0HoF~vK#{9nQ&-|?dG2R&$oxF2Vq2XiVPM at sZH#7PM5{G7 at F;@?$
z6x~JK_W2{YjB8Q?8vs(UCjyCuGh(7>b)~iLBvhWLu!^l(^w(Gb$T35`nB#K9ZUMN%
zoV}0)N3$llD*Op9kYz-vT=qBK+2(Hzd4n)4y&-fUaE^o=#Vf<%Z=3k8nytZWQBH^(
z&EQvI=wc%Y@%~0*loR?!HMmYw2pB1CBENUzem*9d;<yv^EIrZ-u(*hIWRoBU-y=su
zoAC*8 at 6pucjcpPIkdF?8Y|@6Sh3p0Q)2l)#SS~c~c>*h%6fC}Y&H?fxcdJbeFQ^=B
zJ=<B|*usVC_qak$O#5WUJRLQ9$mR^HVQ-2FMM=T$jxOAua@%oAdOLe=x_ycYdSjdN
zNU;IaDc+{g5)iOcG%2v2UiWZas|l|5-#Xham(w%fg*!uW!T)~)N?!`O!U4&_<pwh)
zFzvV|0kxnvdj$PT-NonHZ_=qdOr5Bur|Ohz9%XN_K(~K$0zXJE7!X-dC3gkF6f3(+
z`a*sShvM`AgLa#j<&X)B*-k<(r%+a7^G2MTqI4p-u`&)8%SVbIJ2bD}=q)a$G+D#V
zw8e|IyzLC1)Ugjh%r^KzJ968r&u}bI^zzbEZl*p`k`MP(HD+zS1ex9sVbf6vD~QG>
zP?sUu5_-(~?C{o9)syh(ol+amtg~r;<kU(6Od)=USf;fBr*tZ4JklEF8|S(nsc)PG
zv&QYR(-w}=wJSz+T!MvS-dqaB58QzswEa(FoesAE-SRNc85B5Yd!c>6!0+@=7mqIZ
zZ=x@`+-CLdCj&S<%)|C$?NqU7!M0NE03QVt at C#<_Ffw-fz(iKT at PU>nm|X;lT*J^*
zO5_^H6QYmM_7lCm5jHprRURMgBy8s)uH-v^Z)^ehEvDF&0K at _?e=wc|ZF$Jr*|{}~
zrsUy!(-pJrTBwCfX5YyQ{pxF0(EA^4(cW<{UGcv+{O|lfh^B_hMoc}`@!e#{<PNWi
zgfwrRwd9_sYKe(9*9GWuXtkZ%Ok32D>p!;KPG_nuYOvILE5_$Z=GvmxOp>uu3$7e2
zxr&8EO4RaL>XX3-V|vk<<Ih`97mL}0qS_{!6RMW80x%O;;%+Sl!y8fe9Gs}AGpao^
z01eA#M}q``<+1xc^Wi6KXiC8h<+u-76kjQVQb^*3v<D29c~^EOOBd5G12%rzK}f>!
z+CtgdWrS_8fXXv*?0>4&({7DH;U>g}J%pdU2`1&Td<nzUn?H_9-O*rK at LWAbDjw$Y
z5|02ddWhA)2uj9XRa6~{K&UcCdU)~vKrJ%<623$<mYpss+3*sfED%-}N*VmOSk=qg
zFO8PL*sLvgi5c-4w+8LP!D{+N&;zK%5F>-ppJY%VQC8`zLBJOKhR;M(a3&GZoR3DA
zYm1Am_M3%^E9fW~Eo%{R$rlIh(~D+r5lP1v+r7nZ`>ffOoTNjEpKhm?izRIwzGMLM
zAMQa!L8HGm(bgys!R-Wm at j23YL$slLiit=Ka4Ik{JHX3ymIUuY3K#->4_XKt$B`YT
zp?5{Q?lBiJfEbsja}m`^{eB^LLF^6}Cn5%B3X&qmBX%GMvePgU6dj0Va0MOxt35y_
z3rSCX^G?DnqKhvUUM{}G=hYXBnq<{!-EwvZOb`LrxTuVlF at RoaF?)Hl?(<ReR7?u?
zN>S)LvzR`Jwpnvgxym{PflPp?xc=C at 0IG(?oVycY>KaTDYdA)x$Du{}1bcL7h<yaP
zkF9{N at T>UaNd{AC_GbqYt|*@i{@9|7$!Tg4ttyoG<{yL7ZyxUvEsMZDMesFlOvNB?
zKqI9r4Zx;j$o0l{%$Ouj-%!GT`ZfX5?VfD3P2)d?m?cn#!D50xW at aA0*&IK`*v~fs
z`7Fu+YGG9bDc?=7jiiF&#3R8EcU}}M98S?_wft&4#k%Qw;3g$HC%B|lSu6iG-JCfL
z*EvSLL>KiUlEhw!S-EAIZb^=~c{%FbniLJ)gO6h at UZD`M?lwedn1$Din;V-kp(*9^
zl%j+~a0fIEU<IU!YO=O|jCG<6=B|2Z at KxOBTGNR~?2y4lqhQ2SfVME{$kt%c9~|(M
z#OW)5M*a}HRj_^C?2rY#Y~*Q1tm|P8OR^vYSUHcIikE)*nBhaIkS}AYNl;1`0 at 2%~
zzKjvGX$PF7sg5G1x)g%FA=oC4RCBE?f5B at u5)%n=IB*EMR3^f#S<~#=ni5a}UbGqQ
zEFD3`7oAfOmLhO{!AWGryyDw&Rs$>X2y at rteyvNO2AwD0CE`%kSe=p*BmyE_z5On?
zT|UU)EY})`JGEcobY^Heo&9Kpk006o1UFc7An`CM4Mm(~KMEz2J at MmptqFE(d-=(#
ztJ<`KGuT+xSSH?$(~ixed$A81X_(NjDX!NUgF}cY!FCRaH_4+v#BXw)ExnDAgXC|B
zgo+F1z8lvjH#nf&XB-qNoY<0Yh=U4gLCXNaxTCELqsR?ufoU<&D%EqBDSyw{=hXjd
z;Vi{HtH^F0|44v+I0>{3%A$M}Drj50eu&c%LfhW;Bm5vdj6nYX1FAUl)<?pW&`9)A
z5M}BCPKPH`kMD!fguBjuJ_@<AYT`c>xl$7De5^kom%K>uiCDHzd|X;<T8Z2c^p4Xe
z&lLTJ9Ge}v_x1mbhreq)G%5ikBN^gun`#3K^&_GhX&;dd-2Z!;T9xTjhnMXWr0y1*
zgCr$YP1oHl|I(|$y!s-iSo>w>mzlpkp83<~&m;(3o?q@>t+$}GnqOL|*B6%OVKwM>
zhUbfjb2Vr(LFl5%RWPZUiSKIo++SV&6aV6q{*`C-+Wn<_tMz()b@@-VI=<ikQ?@#>
z)sOTNksx8K$o at 3w_eYbOyzc#^y1(OhH&}n}!}hzAwq&fh$&|Rj_f}TYbvM83wR`t!
ze~Q+Bseb={?N3?lCY`)*+5hnMfA}|Gzzh-(yy;x5+3Z2M>H{7j8 at _$Cl8uJ=4?(vd
zt*p_qE$ZDn*&%KR;ljU7HawIp<kY4fk2|>Bv~l<yoK-Iv*3QHXhsg{!XXt}*D`LnP
z1(j`t2aixHtJjuRYS|Kq#e8jLzE;ob^|jj4+RDBE&Q7k5`=iF_BCDX0#ThdU`A*f9
z at u0Zuj?X&12FTaQsqrhp!xvT8Arn{_|5PU>R!7iIiyvDRW~^_Ic6YXj?m^zODheRh
zKgO at c-gV*r;p@|jyCFFtB+G8|Qgh~@_~M&hYvE!zFZ(B~0!jFUE~Ch<#5%NH1P%5t
zc at JqQuhf~=bw+{3_}BU#WdbnwQ?scfq<xVN0MXPAkjw|(0ejDPcAg;6yYH~DQ5x0R
zgl|-pyYzgC+kG}3ZS=(~HoUgg^G*xlE8=!(gH0<2qpKQlG@{Au8yNXnKm+A&@mYl3
zACE4_i1}?a{}vllOE3X&gheLaCPfW{AwC8y#?SZ0&j3-4VHrl=4rbW`e%gH at nl(K>
zH`GNOE&^!Ys`5>nM+eWhFlLL^nH{W2<aLUpsXeemo_-vtk$v41gLRf&j*pSRscdvl
zrHeT`F0qzT(X1oT at q7!i&_%-d>deDM5g{JqORMvSe~$aDEB at vFdOU-q(m~KOGvKG|
zJBOGh!KOCd=_Y at UOyr+<^504qZt^z2nsB0RCSx<-8vRq*sXB at 4U_?-4?=HH%;adOE
z?0C>y8^UP?8jX2ml7q8$|8z7D6kF?`o_0>!=FjYm)_6BX4WT8b!lPN^bo2J at +l9Bw
z3;n^_;?cq4!Pdq+$FWkIeLOSs at Yd%3#?cSYwuJ6x&z?Wo+1|)z=NA{hU*1?;+&tRM
z{z<Br)fZ~n5wAW<f|zD^adB&JHY at Jp9ow(7@}hp7m&+xl=0a=KLe~!!FCKC+HE$kL
zXd}Qa2R+~Z-*M;7quGsq543eOPii)c%_qMe&2qa4T76|!;Sn7PEX7Y&<~A;LrmKZ(
zCH4^vD%II+5#t$-t`OC)(?YlKCL6ZLgL<QW at 7{xY<B)HL9P^?SBHR{r+z%DYXC4CS
zi|Wq84HQ at CADv(ta6WpsCVOspu1<50X5}=Ig^=xo0yt(sPX<8nN3{$`P4^ORSg;?P
zU-aS9UvE3D(fOl#t at d9yi!s1Qvsw)p)a^DehwU{$OuwOn>-V2*!)rF6^N5MJU=hi*
zz8=QSMo;=rLZ~*MnB7|8HMgH{G>@2${?_v_BzO9Gn8b8$S?m{kF#OgN(!1}-?lJAc
z&^yoUbDp<N<L3x}L-LQ{jBpKm(&Sj*0>NTl-nokh4om8uBNHR%ViB}hj9~#V82C`a
zbr7V9X`&`pKnhMWzGvWlnSuwSKVjf2v>^^srF9Sgv13yAV5V9Bc!Y!jbll{O?5sb{
z7D5MHB^+!56CQAb?kWDrfSFSi-<?a0-DUPzWPAeS?*TuHZ<t8ME`&xRv%eTTO!g-n
z6?jdK3qkW%;)LTmLjDIZt9RY|e>~qh_ at VK9@5%G0Pqz-XHjQDiB3D?D6A|eZg4PgK
z$y~OYGyS2wbdOPPpTd6$#|#3T-Ia)J+J-vXA}kq)tU1rP?ouldE39La23Cg|8QMuk
zB4&IY3ms0aq6fSQSWeaI!_nYz5OsnJElD_#e^9b)Wx-^MQ*9+}GKBQQ5j=HyYCU?_
zU0RY;i+L>u&CACRk00}N<Y^nJ)9C1UX#*Ww_zMg~$z~yjW$)a^lrTlGbdSO2wZh at M
z+mV=uz^Gu-GQh=n+7mgYc!Ci;*}T~S0rSYG%0RmDbWYt$KNYIsFj9tT at 6s3Dp2ssg
z`>5}DSfy*p<QrT|$-Utbvp5BZz`=;B==TNEWJrG3&JgbHU8Lf&4 at 0ElbotSI-004^
zX?S!LA at 7yfg|fU#K<v^sD=8mpRY?(GdXns=g~=a$ccy4j>j9I`F8Oiw()1eMk5h`p
zTjd(GF2rf=$sp?=1X2C9Vz&vyYs5+?E!|4lvrnSVzJdM^$*kJ%nEK$Rs<z4czm-}Y
zy1_*MS6}+9|GO!e->dwm(f>`O`*Y~@iS&L at Ftwu$$HCPKA&W*aD2(6>X!aPkRJC`|
z4dR>?=15ZD-m*$WQ&ywMo76dxk-w7bl^Q*zok{_1Q&dtSrziK+^}5KN=282fq1rIf
zL$VRC|B?VlC3?tr^GVs8su&BjflblC<+Oo2oZEKqq&sf4H%ys8o5y1y_;~~69&18l
zeF)HM_G&W+d-F=p*<>ZcBeie|Uf2O3LKN2D at i*)&r)NDr8}!GQvGNi;mJTNe2sco^
z0q=BTbhG62!;6p~J}v-!R5Gf@$)sg+>*J64PdpmvcRIZ>@^?=jmo4_I53t)jrs_Y@
za0^cF$SWg`5I+RrO#W~yEL0OG+Q1ty#6?!WF{D{3kCQnyz3Vca#eq#s8DgJj(59IV
zmE+dE1UaY3&g}jGk+y;0QH}4m4i2~X_cB~w#pzzlU10rG6E+(AykWv9-(i*T_<gha
z`j~N%nD8l=k6q>vkP*Wg{7;NNh10n)baSZGR`O<AS3rT_Zh~G}8hfKoavc=WPoah>
zrn1X~YI-_r#`l3k$!!}e+^1uStXqmlAJ%oAS`!A>5JY>Be#!w at qI=CyY_Wtke-fZf
zOO8Kw=hN6vKgLq{EtfN0ZVhonBH|_!!QxuCcuC0(+vW+(3>t|O$>OMa1edrdyrNYg
zmT5V$iKuJjMe2SJCV8i4wHilLfb>n2DW(`=7n(P3JEQXqp&T$Yv;n_8+odx&4mxkZ
z0pf9D4+Yxml;$ehmN^eArZsDquU5G8|BL_q%>RDDe_8df^8a7>puzwC$Ix^pPi?ps
zko2yHxLo>M>4YlZUO%F`=5_WEN>5jTPr at wsW?WFVV1NknCDwA=+Kb9-T<oj9d?^=N
zwFiA>rz7|vRMSAyyeKm9nj^~suV}rFz|{S^_Gq5wg_hs{GFLV^BHZTnybkooP=*#w
z at Hewzr|J{qxsuq{W80R+ehN8)`uMNd#*YP?*0yd8R+j6tdUWdCm2$Wzr)NfGUE#2(
z-3I<=UPY71-p)4RStH2DCPG1FLCRYX8y4Y8T5b#rR$L)49iy*{t0vt67kX{@!j#o1
zf1?=UFasOt+x~DAT{s43{Gxi;9$=sh$9pdC6%--snG~aVo+#Wig%h=hYdWI1Wv!wu
zD;MJ`lz>872?vi{zDMN4f=ld#X}5m at Tko*l0)v7(`K55mLqq5Noq9oq%?`)M0G6b@
z%yH6pv)bLPF1k*Mu{wv`(zoGqGO0%WZnku at 8p}7C$Fpyr6-)y7W6;k7Md5F at RvBrL
zg()N;<cTB?O}tf$C?&Z?DQc{IvPnP5o-Q&&yKU??wqhHw)6mUi`@zg&UW6EDClTU?
zb$4*(aNhfjnY2T}@qwTXvS`u_i>M14^AzSj;3$9G&TnZy4o{Ole7Qbb+drur#7DHY
z>!~8@&cz|Lrf-{9u<6oMAJ*_Uok72M0gskREJ|qd{cMS!nls>5e-BH1i9H=5#cg1V
zo7mKafj|UXv1p4`-J9qOjp}5Kl$q`r>t{#UY2O0)=}yQ`L&as<e^Kes at s^}YlIe8X
zCV+)C!iotxJh9D%ybjI=9qIA-^c3Dz at _{v!B#Wf&zZ^><zw!q!fgRFRb$+lXcicqC
zRB2D>A$$4qxDEf}pS%6unQV_=e*QPC`%>5d1S#3xLBgmoLEF2BcGiTdc@}}CV&*~y
zrpu<-mtj<bSHI|FWTpueSQFzq7k8DHFX6l*oMZHagxHmFP}0uGZyAfUJ6psi;Y9z$
z#UU6L+Jy8+2j!pHYA7mI8x4u@(x8aO#SUaXfgFRNBptS}K0&YfC6Gwvzo1vq1x)VK
zdA1aFqPhf}nOIb|2T?8rz3`x=e2M}fQUaQ at GVoC__uAokGCW82C`EoDj2b#>0@#Z^
zOAOet+IDHpkclxj-HfagqTb7w7jVz%=qP`#1FKK|{maiUUs6AHd at 6vB*APqX-AOEx
zb87=Egy}EYUy*JlSi#_)zwH>ZwX(0~fv~vq%CT}u9L5^t4%(Y$fjAB{fej&kJ+dnt
z?nkRfXyjLrPjx5q+l2Kp`nY(T*gCh$&<M-;@%N6^#|68{qj*NA&}rsbI%d0afNV%<
z2x3r}_XDm|b`fIyOk7*^OT-Xr7yG!f>ZHl}4S5O0SD4vb$dRC`a}#Qxz$G_4rP`yD
zb3|Ji_D}3FB^cxo+(HK1GeA at 9e(kK?JUP$cM&ruA&xQ?9a3BMG5pKL!K_Dc;;{UPt
zrQK~D$J+VqUoqz42}oPqv^i!ZSrSFrywP?^I*ubbI3NLvut0z>07_zf^WWd+sj6OQ
z1`9>X^1VW0ftcx~y1Kf$y0%6ZIV1~oVF*y>z}h at oYM7@HJbqxa`7-z&RW(>zBy89E
zY$C(kS;tTmczenhD#27;9Gj9)Y5v`dyrX=#sC0SKt=KgI{4-Oi<G!n_t8kM;$~WjR
zIRSqTI#fR~tV%>LLbADwuUINt!2#Uqa9kJsc9V~-H~~85f6g7N%3&((s7ZCK+y%h6
zkTv5$4a_M5fGjU!oqkP*MkcN=YpFEM8CI49Lgf+ggh)!tz?d6^a`(2J$z4T^taPH{
z<XBY=ut8K1Xaca&1$3Y18`YJ&7@^(H7-1SCbBk?2<L*rQyuN3$UVX+B5Q_=NnQ%&C
z83H+*7cxuF<AUr`q=p=+16U5kNdwq|><4)cOGfXr5Cw|Uv`ngL63*Q9XydHzjl2XF
z3P?9+m=(C^;$k&?BSz6K7=GJD;x=~;@*(1s-2v6+JOpaZr@<wS+`oSx-n`?X5XqjS
zf~v4C|8n{{u04P$!4Q165N{+%!FcMh27Ven71TseplIY>9KOWa$;tWh7rzNZ at T#Yy
z*Uq+Y2L+#w?<=}$iz(-<--TOy at uq`QK5RywB$c(mTEm62$k&!yj=!<4_kMW(Q}MU$
zpZ98SrWMK-5zva1(#1)xz|ekh3=d~Q$q}^_^>16oqQc!2xCJ6LE8A<gd*ik3OTroA
zty_j<K9(^j7mkmYFB{JW{ib$<lOlG2vgbksgl0aKdRrp3i!XH}^21dgt^Zc?su-fm
z34?WyN8}MCi2>5OkA=*MKbt1k>ZsG}9FCFXQNk~j-7kugI;01b`Fp&x{p3;o3{q(b
z`L60BFP&U#I!s*bgKtw8_3P#?xJJk2sa}9wH1blF!@*jyb=+Yv#S!maJVZuk8aN$k
zkBX(I-8Y@$A&RKnBQqGUFUUV%nnO<Hhx4-G7GP#bz><HABRlW at g{USYMfPoQ9Vrii
zL9CrzDK7gp at 7Upui0|aCH^hH-`+jRiYk*j&(?6rmhRfe*lL<j_-MU=3is6S~3?R(c
zkx{vN7?Bw@?a6X+uYx|At>605O^?LFPo<=_7!{9>uToyXsH#;{$#1US8~>}XbSUr~
z>5gDSrB>1Jf8eg_E at x$o?U*zqAkU-S at qD;K#RH12P!oAHOJDp)kBlW9kBRi0jcI42
zL~^PXTN1GnE>gCpBzTaTRx;cF>ERI0|3$rXuW$rR3Exjd%*^7(zy4aA=HM1X^A+kQ
zw}AXs!~?`)vUK=LJ-&E&Amb^Sse;4T<v}FdAP1WO!>7*u>^DD?GmX7Y(*|mbP(;m;
zms<;4lw!|;?oowYRl3>yxL3sO4EmICoWVMHOct+nE2@)u>+d6C_5-RvV~PN=Z(gYP
zN1dY<)JLv`x#?BSdWC2*|BUm?R9#epyC>cLo6-It>s`0pD<$d=1AEH^><n&MsD2Hq
zOoXk%mCiN_mQF`H*J7D#1avw4&wp%k1x)tUJZYVV9gSsT5P2KLnadw-M>Z2mygrkB
zBq$J6ZR_?x?4u%pLjVvpvmDzsOiwP~;r=VSTwws5?aNSQf4C;wZ*7qx&hseZ&OX?0
zK2V(<dU87L3H_MIQn2wV?YNUW^%ssLM0Xk~5=`kF7^2ewdgZErr8`b(>Tsy+(`$$m
zH&q8-sZ)*Mq?*I4PcL=8DpaTwF&g#=9rxTQRUI|)u78QKCPJns?aL88+$jlCx2 at aK
zDM>|pk!1YP7wK*6$X32VEDQ{6=-v~=3`{(3dC?$Dx%|aqoClJBrC5PZrFDLAj{A{U
zif>no|2l&ljf_7VzAH4)8*~phG#L@}bRC=$3idz3BPjHa=?V$e0Ibvh?+l4ic!;Id
zy09n^-x3)D?qhu2U26Pm2|4Tkhb=9?T3TBDdim8doeO1H{5m;JBsY$b4_{vY#Rl!I
z6>Jbfn0f>@mR|nr+Aqtm=vN^wfg8}i$)DF`3bhH?x;E?_WUXn(?gu79I@^#vc!@Q!
zu0to+*tY!NV3H%+a>R?-l8mLPalmq1$9s<oDR9v3w{Ro1ei*izzJ{Td#}T-l;ZuIi
zD`k+TNZsO+*HvePGB_5Ze0M=XT&MzHL6h!f;sOpH?mT<2`!lhC|756BFq+l>=l1UN
z$2(7+T)c%JpY82@|7`owgcgM0PEN<?Nb&=EEs+$5CvRk&5ETF1KNy|Hw^Z;&WGmy(
z#cbM)qCG<5Wtih6n^LP9jbu{gY{IQ_gvgr8$^r>G at c|<PmY&8SH at v7=LJf;*dnS#3
z3G`G4CJWo~ErC)S%wv_2QvjlxI!ldc=f2snHlpd!V13c at aLq~^Cc8&#EthcOTF~jg
zLNx3GPo%<9qX$bV0vLe^1R$S{H(`S-JfozGgf{WBpF83JhBkfUP7q3mDXpcC^v>l7
zdYOn>&Y41+s_6+93<V${&ryLR0 at Z=Mj8Iaxn^rdL)F(;Rm)XU%!aoaPpi|0=I!a~l
zoR3D7<N2dQikHkw=TW{XpGPZ)G6hGjk7T5!^-|d~j=!q5PwJ+#F==@7oE|Cxm at +hX
zVo1Q7ZD`4cD1QHI+z2XLd at 1p-TwdamPDtISYV`Sf%}yjSiAVf3Fs#3I&Ktknz1w)P
zyHjFVi>HIpUBHg7rKF#0wpODS31d=*tWBLTx?}ZrF^7p5BypQyH|lvI!b4>-DHCWR
zV1gq-(nM9JM=KNPjg;M`X}YALnSY7%1-aazxg$dw$DvdTQG#A77-igNG#{?AC?@L6
zstJpjOGM{%mo<cZs#D|DsUosVKTg?yRB7&%A`WPfj-Ds#&9K%v8?B1<u$F)j4+#vC
z)ZaEjl|84#ZFpaUFGBfF4+(%ir(nKNUWSiVDFl~H&Hs#B4K9-X<4=<3w?6;xja%#A
ze3Rw>Sig1q*5~}cAA<%inE&I&aL`7=Q{-&JjoIL1jI_aNTXJYDYZ|bYp8TCv-oipO
z at 2`;(Gk at H^;WPej+$c7_*}Q&xb7TFVxV`k`+Yin5i*6v~xp+d)tFxrFj~>UlGoYl3
zGyJlN*)nTnC7}bk#KgXqU%xr%_vF6#kc$^M at 3s2kw!xz*eKs}oFT at Va4O0DLYPO?7
zQO*tSHl^5XX#p*TE_8aE<L($)ifjAWm)Fx;|Hx^7A48$1xvAml0CcQ6avTrZgW_om
zR%Bj#2-9l+sQdbC*cvnHVF at YWaE~y2$M%o}bqyg~-J at kzUHhWlIYNfGCD{YfUi0zu
zXZys-qt36bzn`%<<5BBx5F8(ZPS)gKGE*vPpz(UphRTzEX~V$@*3^^lUpy&rOM3To
zTpXMiFOG3*@M(cerNcL!FTRl6Z(@Ms+7o((gTVe4ewjPSTV%9XRl4L29jVwSPgTQ<
zBYE^pBX#7NtPuc&dj*HRL5sOa>4${WjD*{7@|#l5xfd4A1Ny~NwTp`zaAiP$EcBRP
zn{0PQuv~1JM0cY>?=6N;=>m=pn1U1bN+4)oClD>s9ABeO0mk-LZwQU)IR;O^M!&Er
z$~uLE-exK4=9f{&<@09ra+H*${2i$kg2Ze!pvi<9^KNlHNY(b{J)YX1y{D}qa8oKm
zClxC)t|>z2#bXqU6m?dERQ(tijrQ0IVe}YSTYCZQ7SSa5SAv{mdNOas_+5YwDv{@5
zO2as+^(s-vXaX!~j66ATTuJESxAp%-ayFR|VN1G)`p3qa_8;4oS&<(r7(uyp-0Jf(
z5_>};;5I;OR2TrOhB*y?O at L+VY#8;D!?L!f{Z?Y1y_H&~j^{<`(8!_&`MVc%2CyGT
z_?3bml{`*L;#X}+D*k<owWUaSuGDc_s&eKdP*R{Lfsz6}X?QWv88}hTG0^Wap#3_C
z%5$we1Sfg3KkUAKErxv?^D)d5_UA#qJfj9uf*{JG1rPwR6P+$o&ozGl3&YCDxuo;u
zJ88ZDIa%4kC(6up^kSCXiv&J9PxM<rvOdZO{3G}U$o_$GMLdYZN6+Ha4n;S1&y{=P
zF{OJAU1b;L&wPCd-a?~a16xuq;E5%|LX`5_{$6MNGxVd at nNG+urpP@aL)`2ByYpha
zW`*7?e|0@$GWLdPwq5x^<n9TUQ3{XM0t74~;n{BA$F`5H- at zc_k!yx}TZ5Kjk$();
ztv+^7Uf`yR$_}>x<`Sa5OXd9|>2M$Wzea}xnyom$k)V(MW)48ximJP-AD;mbqb+M9
zrv^9!i!cZmI?w`s at n(y~ak%z?pt+AVkN*GhGjwDTK5d$_&REatJZ039;K?3DWGK-Q
z;R5b}ZlVv6q&SyGdj(0-W{uwAO3>O;Mio+lD^&0+e;}iX)`i2y&r4WNo&@v()%H>_
z?YfTMi4ASf<}J*-Atr6d3Xediu+qUHbue6lVHHUL?4NANi_=Nta_7}ywi5biR!L}X
z=v5O+9Ip5R)|xIwq&&cY8?^G}7T2hQKx(ss^Z|sX5S13 at bb?D~w~|WIxxRG^b8Y`*
zb4>{w&flK#SM7!VWwI-Pyf*?Qu`Nt#6SxGOa!RaAE8;h~$9A!Zborb73uwG|uO2<b
zv4;(ckU#rQ<_|6j%;lXdf^}u%RtY&GGQ&6EfcK0<A0rRPi8siNW5XNkJ(FrQB{kqS
zZ8hY at fEh3vYrpjmn7F9HQzD5|NWphwGvf#1UqtlkUnZl>XNDDW<ey-hrfh(d3fLLA
zD~_(ma5_F7-~CH2cE~9V!5F|*|1}(S2SPG*v4Yd|Nr%V at H$@8bu)&s3IOuMOqa6DI
zl#7v6_PwyiKv0OWKv9Cog7mF+f9sU-S1JP`?aJX9Bb4Q^`0jXs<GS!^kGaJlVkB})
z&dnm;QZKVajaA4i(Ru*-p24T4hom`-8^WlFLiG;!PR{{GSYa{ZNUEZ1heufw*dUaE
z6=s-09p8-e=3(eGn)CJn33@;mj!UXb&!}!;IGj8DhxuXO7+Dy`G348SLk?>7?B0 at a
z_!c;I+TfH)YQu6l#(#c3zSc*j^%u48u7e=mIkJ<PHr$vA;uy3As)pL8=aIqw!yF4r
zW*0vuqaYeuw0Rt717RsS;wcg$`Z5us!e5_t__4J#(?%0kF+~Cs|EvKZ<N@!X(H<)R
zl+GqfI_d1Qd_?B_$q&crH7$;EU(zLFwXx#)AhB9jxM&L;^W=)@0&%s{ozTHDwJk55
zDGRDPo3O2^?RW_>XJymilXH at g8DwEw&b3g4<!<xJid7TidUfBHErZlwNdnnaVr at e>
zjTacgZQjAv#|4H-04-u~+OjhzYt8t2#T**+Q6Ln-;|61WEu0Pzgxwh~kVld`_Bu!7
z;zTrMX&)3)>-L$f(Xf5EMybFh;?gD^mt)HYX^PndhoETYwR8C8H>o_<Uj~ZA5ZlAn
zI~kJR&lK1r*(lOC%FdvdJVB=!u~V+<0$#F$juPY%8C1e;?`LMbfChee5kyJ^<H0Ev
zuY{pJI6RYJ6p3<b_1 at sgyAb09PK$#j6TpN$oM~T*I}ut-X<!6>VQXjYZid`xGrmZf
z!UD8I*K*p5<qm()E@@W<h8~3y*NR__II$h`n5GaOuh<`xG(Z94yeN)aUN7Gl!lqQ(
z80rNNg;GwW6-tr_k23%e2sHd<s}Z{Ne6@&<y^oYJ-Ejl%o`)@l-bwCJQ_TmOo<x=4
zG_q>^NkF`T>Cp*$)Y77a3IbcLF|I&!7P{qJC=IBSa@@}mGAZf=WFT1nEnSz2UM(RP
zkwk~~i1GQ5SYq+3;sp{r6dQ5`!S0D`eN>(dqja&B5z<Yd0^m;Ovd~8x7PAvfy~rqP
z4~GwNBpl_ at k>aQZ-yt2EljFjYu at _n_0tZ~(ZbNGFqP=nh9&;cBZ05<x!5VO%Wd|9*
z?33*Fxx#N5)8I?80!eFY(EEv3)&V40l{Dd?4 at E8PYY2~oaR<B^uH64N30^1P^|{!3
z+v*~!q1SN@*;wBN)vO&o!h at lz0|I{7n$?S8${SyEh5SV1O$;FNic-r#6U*W31*7f_
zz&^*vxEkO!@_opiS0g)gOROljKiu&(#x3Uo8KbpA6nXge;b%EIf&Z4&kdg(?$+)7B
z!IZ!wd371Z*U-Nh=uyUJz#yuVrUMiA_faXK1vDrNPZydX6}BBrs>6oi7-Xl<-*NIC
z)hTr{KhVlOT9ucJuZ!E!+GKnDkZ?d2G9>7iajlw|lt<YCPYZKi`C1 at g+aNWD>^q?T
zS|medrNwbJi#*cBRZ==;6 at r9WYxU3F64A-3ngAni<EOTwbjAc7C3v{3;{KUMP4Vw(
zHDhrEi61IeA9u&FaFxbgf!DzGwYFapXl0)`^zCTx`Fy2oLHgH%Z4K+S>(C4swX&54
zJ3<IGVymlYLY(ExBqrDBH6SQ9)ZFZVci)C948o2)f{Vs(WV3Ze`F%h`PkAWX%Rz5&
zP|=OPgaP_|Vu6!Ry9+(gq&Ao{uBHHiOZFr_a3ACn6jud!E08O<VRjiyUTx6h$tlzg
z9T<T{UemcK;awW~3ion at r85^9%gO{pPr=0~oayDmC(j at LQd3tWvmHS0o5ahtga4}L
z^r+W*J%YN+;uK1%2iFY0Z6YhFDY~>LuHybSSzXC7A?HkJcNNNOfp2O^DUT{}jnt45
zd_x!sI~TQ9b&<jtNiOUk94X={1$NOc?hh7!i)8+Ux#SEFN6&OytvZ1&w%Wg*jp%jp
z6nWjjRx9l01${d+{{cc*s#`OE7zIv4%sznlF4- at 6*DWX$$BGuDPEx6HTD_jJo2q6F
z6VOJ%xdJ<dFjz>bk|#nc!`44#{|LgR^duXJ2;{MdSusW#r)R(@EL#uc(K2(HHj|0O
zAgdS$_iOQX0}Uq-ZE7)ux{ZnhF;ypXO`34B002{&3PmA<V9Upq<k6?hX&j3IJ}?8v
zJpIE3Y3J$AKF<cNw}UQqaq0`ixxw)_5{{*5%SPh5ae7IVjAYWIS=EwkCQOcDdghsl
zHgt*v${KRP1dt(TKc=ou79k9>gwn+zX%XTcXxJ2qIBeNfYl_WbmLfSqCzgsDFk&TN
zKe=HxRbSv=^UMx5dDz00(do3Z1NSken2=~4JFHvCYzqJb1=B#JK7~mu(49X#1&>Jw
zleO3B!-)-2KWW`6EOBd6D$}<-D=?vo=pho?b&UbA94hd^b1sea5aBAgZ<*0-`mk^%
znMVBhj+ayXwBn?AW8yBxK7w54*h1WDnLjwVQa(}tG%c6y3>0r4sAC*tL%I_t76!ID
zeN~mkFd&;E at R2sDlcx5e6L14+;Y;TVc4f;V(SkdqRPsvn19rn8ssh2nP>sDSPR=MX
zV$!f~knUb~h+`-L4mzDad?lI5 at 9eZhA!R&J&M)<uVNXaSS?pEocyV+##Jzz`#I?j>
z4~`^BAZ77oP)Lav$k8;LmNFT*R`&-F+MG4_yIAvd=uc#5G4D8A+x7lg2E6MgGCy&~
zGK7Fu(0f<zOOXW6%I7>F<s{E+gdd{v%Meo3#fCN<w$3GUS3p<oVydDXJ?3Pb7RN}3
zDH&23vFUnouvrIH@}}iitD1V&t_3YaCCjFLXUKgs5-pexC|V=YREGLa$CSkVXw{$*
z^2-40NK{(a!)eyQb}EU>(po(~?ev!-h^-rN3-7yP+ShU+5c&(Ke=4fyMr$2taNvpB
znjJB53{$L#^d8Mo*b)@rY?#i~;%W^KZDz9is&H4wSeT`AC3pD|mDO|Vi-K-h)TC!c
zOQ{J_v^qOsc4v}CR%~f}C(c`F-sS$YHZ|K9$Sea^Yl8D5RRUya8OZ(F;o!LM`zxK!
z4tm`~JgS85v2*p%J!Cex)a~R-;rhY(S<VC(1&dGnx)F2opMqaMj&$a$i1m>hGW7vh
zIu(x|8j&F5-Hh~mh@%I*J^XOo9}dpndqB}W9J5V~ioP&^LS_bsKxhS(+%&k7<6zf4
zY5BW0MD+t60Taw{MMF>25*z!NUxSeoF7_sdVYybJ#2qf<>v8H!Do92S^~Gk-Qj0MV
zf_W0v#_SXqi&`ETN+pAXaSM8M91}<kju5Vdr*UbdDXk=vAPiTX;czf)VnF!YU$^0C
z+WBz5gZ5pe688jAG-d<Scq;SeS!8t0U8G2Q=k}f at abs+p%6+~MZqTz=ws at 9YxrgnO
zJK|CtcLZ%49nIQ^M0$HRLL`y|7}<6?vD(A5-pawC*PdRPnkQC_D)Z6o72|GMv!>s@
zTG#81jaBE(XXER2Tcc+Olq^P0v{<C+ at U9DUi@mWWPHy8b7=kE(xM#~Fwv|j$g2PyR
zfcpOb^)$n(*)rWUK?*}!qA|7}E^>uV<%gwZRS?R7Lnaf4d~mosIA2EECatp7gZjsf
zL?uFzt|_4C&aRFA04sfuVK&mBCgey2Y+D^sl24OJ(`|%jep}UCuTiMCtc2w#&ig-~
zL%TmlfbJFdF-QFO;pi>b_WS at L<IQ?~{P)I<+Z*ep`0sCSevbd1AJg;KxM2MEedyap
z%oM-4)7~tMG7!$aapM~c=f1JB at h!u-Z{6Cw@$Em0!}Ei|xH&#aL%Iv_cJfE(Br?)i
zUFd-h&bqyJv9<U2qK(@wM=T^l2{g|*eSASCXi0^jj)4uJiQ5<vN at EN(y#*NHO%DU#
zV=4>u7e{+zLx^L+*-p at GN|u?Xq?w^ZibP(o at x0es8Nursp~Ri`3bamVNY512vMhD7
z(dee+Pwo(sW(mi()(1mwygUi|c<;xOD}28*#QmM@{^5CJT0FMYM>~}Dw4Dwv1Hh)!
zu4#SSUSF(jxi7f3X?=U4mT|bXL6_jBht%i;ks{ZP<mg6heGf(}rXQODW?r8_*aD_a
zms$cixoA9)P9=GK<aqi|Oa)@gJ(XcT0TswxaD7A-h{5F!Bjw`>SRB&vx}}sJUHH!P
zp7JZlH!9xfy0!xhB+MUZV}$*eW at ZHZlUtgLq4G<ff)U$KPeEahA}SMD-pSDDyhn&w
z5;eV;g3X0OM>-^W+PH=Pt}iG|d at 4o#DELG_cVSwE;&Lej_((TRcy{nc6yC7Pq;Ed_
zCwnV^owN=ci27^%wZXJ{*CIa@>D3{~b%}3`CQgK@#S~jnsk~UU`DO4pj#75I50DdA
zz8srA#|9M;q=$@>4S{{S3l$O?k*lO|Rv#nc5T4`E?`N+$Wv#REAek|aE-OiFL{Q>d
z$K)!FDnn&O3xFhK4Sn^Bd!&%T0?ua{WMRxT&}41(t*z^q&=ybigll7BTV898D-|3)
z$S5iaI0LuTg|B4CS)J)AyptN1Pg@;28?W`__+-_gvyI~qqz;{JK=tZS3je7(^s{2q
zae->15za=l8f!$I6Wu#Q_6U}XuWH4nP3G?{IeZTXW6>mYJ!`t8ShKAfQnhm`s!F!b
zNMSdVm%e7i9LdGV*rA-s5oU06u&=nhXy*tHQ~&R*3m@!j5 at 4kswdQZBp*DJtK at VpW
zFXH49NU~G=v#o4aqr>CQNvjDJBQAyFCLZnJ6rMCR$9r{a|8fm+WlW9;SnSTrD3*Ts
zH^1*V%3DmkMs`f>JK;81hac%tQYAb5fV8 at Ku8WeGQQwQ~dk(x3RIZ+Vry10fswM|?
zOv>WbK+(9b%{Q9K-bMf>Yd#e at f`y-8XNct^Udce{{LUTfd(i;1?Xi(JaThalvgC5B
zCKD&Y=qtF<GBimds83;<)OO<vM}>qu342-L%%@JeG&QroDhl^+>74;?HOrW$`Vs0%
zPx{VqP_;CE#e(6|_>~U#$<p{Wxt^N<n=?yDV!rq*jsmy<DO{dPS3*2=x+ke+|75^$
zKAptADCZg6qtO)ILKZBk3qzKrxGMe%A5#ovy}_;}^EkRJYLlb`y>f{H&LOSdJ6^nH
zE61*r^AzKNm7XS?uv|HQ`|kDO-GZs%z0fVv_7YEB%ilq`<xdfqZ5R=~xi-^fz^8Mt
zBNnf~vh@~-o8|ba<v4s<(NN4BN?2o^?DGMf$KiD<Q(>1A84C-fSgjp)dC2irQf^45
zCR;dQBPJfOy!(_}uH$8_5x`A2n at 2hO{m9H|uEfjfF{;Xp1{dUgTKcy}Z<k^_+84j8
zA#D!(&++)A2lq^|49{g~m~8*KejC=I%>J`Mb5XHAS1%VV3>6fzWfp%L!h2~_6Vu*L
zs{0AQyP*B&LUtQDo+O5&n538t_~yD#2E4veY;0_<U*EiWyUuzfrXVtgnJq!Czv<?n
zANHR<`3b}xn{G055F+H`w{jOjFbB0xPvI*kaXD*m`|Z_}(Fzw&Tmz!pC8h{2+ZQ01
z>lK?N3&URgM!-<p4^LH7O-2W=5#f5uHiIccD(3bPo-tW0>L7qLzhUZ=wZU{0A=!wc
zpA9qm at us_At$Qw)+Qr5}2uFUS&iyzuPtqz?2pw2xD9wu6))el;#&%n+Kd5x;Or1_=
zQ|f$tr_&U!I`^2yowb8O`~2RWHFAP`bgHWLnEn0CGKa^lA#4#msp?<N!4Z at VJ<9-N
z^I1Pej;(lq((8{l2X_~6rTwNJ-bO1Y-NWHvG&mZsfJQb4M~EEk*w?}rTI2l;HOR=U
z{N07)@%VIeZSCE=cdPGitPX~+*Y<bUcDJ`y2*%Czg?nFoap%iN&$sq}ez9E$XfJ+z
z_+)3RSXfzG`{~Bk+S;T2N5wzLaEp!A^<sYr*EKP^w0di6+s_t?>Mq{1tqoRQ(?3_n
zQO(u%xQ(vwun at oCh;>hd$ve!4064~{D^$_Ey}PglM>;rTu8?;xVDZSWy9->aLMDH;
zS-8u~Roq^a&5Yz9$(}Kjh&^H^xP at X3fUGGbcZ3Y9>5shhkEC*+K!_Xn<Q_bC=52ue
zb5r2xm@*HSl*s$`0sjVWP`+|WdX#+D-d~{u|D%VIGjqyN>!J%jYwsoFix{l`Xl}{E
z4kw<g8+VScSFB(-WWo7bq`PPlV_CzEUDq*cCHk<kGEmR^Q+n4XB?#y4f&{^C at bWxn
zh-EM!fVjJ`u`oklGE^wV{!f_?xb<<T4%Yr;PBQ%rw2OC;iph|DiaaV165vGkdN4c(
zii0K%()_&Ug{&*ysC8%DPWoE7cjrJzjZlwHJBLV;Bb%ornK-qJUnTvv+*nIbw+i!u
z+=2!n4-($E9YdXHmFiVg*o4NzxZXqxO~;jBmtB;po==tXJv<*p1wPNrenjoKc>Ba|
zA6KdrX9zHoLO=&!sU7wwFHTbY@%1KaMpI&t`|Qg^PI0G1;o5<b?jM9~XH||8krUSt
zR~&baS-H3^Dld>Y*I}{D>bcWvH>OAK#5bK<>@SX8cxq>826{^h6MZT-WJXWGACnSi
zCnx854A9}x>)j4A7Q>6oJm99_qiWCHCyM;Ig6yof{LHcI>Q2abR(`(Xj;N7Y{VpV#
z0ulPWPg@?zv{*UK0mO_MBMo<v>fqyhKRo}b_}li+d&T43=TAkP=Xv0ub@)bZ=SHk5
zK^Nk-BC9f0Q3=EX>h_}T2lIU}w_AF>(7&q at T~SGpd?rC{&>0X>53dMV>AG`ivcitY
zNg_Ni8_x#)rglTMAxww4wIjYK^Q9z%k$PK_5JNVp#FI@>s=I)PD8A7#hRFF$CKEO?
zD<1DkLg3%H+p&BsmWIW(I_mT~hvR1Zfa|~^OmDkXsnyNj<DKm%kLqU-l}Ta9a9)}^
zom`u}Fmap+2Zc>t)UN|2m|o-Z^sE4bM$$u at 6^DZ;Z9IHO50U$hnJL}c8Wl at VySUEl
zVdwCTTF_($;{^@}&M%!0V_1|gk>6aGC!9RvsfE1wxQjg0AR?rpkdfj>3wWwZdE}lz
zMl(ETCKF46GC&GfNtcRCs}Rx2Y=63bK$&QbSr3^A!9R1i6dSf+A$p9A?YxD3h~c*n
zz;qmfeH|GUFav|D<SjWIoFNX-wX|GRB$-}ho+T-Nw@|(*s~7)N?s;+XC|-<poa|E0
z{!~+`Ean7Cexw=8)SpMjN#_gISnF_&o~Q6jt$JCf1g3C79vgM|xm(;++ODD{KjfHb
z;_5C*a5(EEI}81Zqs`%EgL at 7H_BV7k{>@ML^cH1TDz(O^v$iIkWdh7h2ZF4QO7_Q@
zWM3`x#7d#Z6z4f?IX;e$odjOl{HzBD?`lD{)4pB at tsSJtgUjpW8PdM`QCw9gxDbt5
z=4$$xolrA}p1ICs32G5v^JcV<i|K9p(t+0#KU~FQE*z-8fR77zkEcH)?z_43Y`^*U
z?cKed=g*3JSdi<`0VI6-^5$>L?oY273OOKFqu#L|c($vRaqPe^-JHy|PCsON8c%ng
zZo}VRR#Q41G6n+DJZYVVF|a}m|20YaXB)LnVHKL~uq^CjB9~4pC(~CxC0k^&6W$;U
zMB;>Ikwebr!J(HB$SwoFOffeT8xyQh|Ia`C$4-h3<sG^a at FlkLVFzjuBx)!m8r*Ud
z49>=<$Xta4P2<-2!8t^LmEzmg;=j%y7T^}94G$t35cjN2$*jd#7YIEC`yb&Ea_-}D
z3#4=CzlK6hq-e_Iqb`y$njz7*M5NRGs=L(q*Ai?-|HGD+Uo9=Ie!cu^c at fsvMK;T?
zlhXw490(u2y#5RS#0Q?7dUJf@&(&CZ`LAogEWc{Jl0g4guQqTOy8L-fbobiCa{0z3
z=~!Eq#-+0jQ5Y_<CYZ8!8bh!Q?8NeagGq>YIZ`{ZC26vWBzQy6F5peBzLWw72z*2$
zIQ^8;pFvO`QMzi&`||65cZLJl*?Q&I)q)aH8-v4~`T*_jf_}%LJ!~?^h)i6-fu%|X
z7TmPi`V(-b*Z=4C?(@exPk8&)1zY&>+1}3g&$b^;Xh8_><aB(FgB?a+BB^won4&-T
z4 at Red%_h=TxF1+HZAQ@^A)>IcWtih6n^LP9jbu{gY{IQ_gvgr8$`NI(Amax}FwsR8
zL**V-W0oC22N{cY<pxmMMjhBq=uDb%1D at KD$3bmVZum1dRe03YwdpQ}p^6R3Nt~#X
z_aGyYGAc9GyRzyG_?Ecp8E{)7C`U`xD>VfNjbzQn!|}{@@#tjSM0lcc8rOq99w2lP
zutachOd;!?^k{M|*l(n#D6N^eAJc-nM*%LO6#+<l4p7)GA3>5)jDYgD&UxdPyLTHe
zc6Z8=c+o)bbk*Wxk7fn{)k4_-K)Ufy(2BYdV`nHUNMmGjXUGPh>P%<uvfPibG!>gJ
ztxbX5s9d5dcrj#r_<07=nZ5$?v!4-@>E!9lg2cS!1RlSh#Bm{g#NbsYJZj(3itu(9
zzlMy)O-n;EmBpPYUMdgELer_ZR&5)iyx=@9O!x6pJ at -Yu226cdMK!7=NlLz?HyTwe
zO;H<|CRGFyr$ebJFWM?CzYO%0ki^086KLPz!5<k)XLP<PpV8UM%tY+a;yOv7uf|JF
z(K$vm&q?M&qj4vc>7z-+$R;J1HHuG_4ZM_`9bDvCTob1-P<#b>#-|>Rj`KXDZ+eOM
zmrp-zQEA94&t^5Y2-Mah571Q^q9S{XIKTa_-shjNWAy(K(B|;}N95!c<bT>g{-^63
zng9R#?e!a<{r^7(30{r=Kl3$~^EQ?J|Ba;J`u~@2zg5@&jg6J{8^y-W&0E(u*Khq3
z7ww#Un<kB#$?YF`aXL*jPi~5j*=$upUDTJ(){wrGP1|xxiIeq9BphKT5>54_ad;{_
zFeAv9F4dHkRjrK^F5+WPxmN%XUFvA>Bap*;-4A4+ at x_w1qa;`_8yGe%m6l7&Z)L<o
znlB2|6vZRR`z*$RO{E!#D$`!QU#TcKCDRqVb6FX=Bl{#;+`~g;fx2NkdpzGIPV`8G
z`Ge&5-BP`59=%Z6OF2{mmc*vG5A%8*q<hJ`+19LAJALs^wnCAIKfB?lG at x=<NIOo8
zc=PB at sTWwp_{xlca!K~6YCu`XvxXNCz({>URrYBM@$|t~3kxLhh=<*SZVx`#A&VyK
zlK#xxXjQAtjh4j65n$9MTcP~jI>hB*u6y3<hbl2Wvm8I_8H4Mo at Lmk-_ztH`mI%_e
zlrOJ?mkv9PUuc_8Rs*Y)W=yT-DG at 5Dij?!xv|$;=Sd#*Z10iY~1W1YzLnL$S^Q6^3
zYxSB>&uQjxe$mYbZ6q?|wMybL!p`<OLqttAS?UBg^1!t+#ev=Tp<PDrA}!n6S4g$T
zRxGWOQzXZC8_vY}kZ%C3lr;#KfcOwsl&o-vm~G+0E@&ni=4DNM#ZrZTMbr77C(}L>
z2T5H15FgsXi?({aF0=6qX6 at 1L^B2XV2m22mKG=gX<_Z9IaYum~vKjX~oU!73w!h5w
zq<jgwy^XmQZCjapIfYpbJRQV+p}@2-P|o>G^r|~`J}_6EhopV7+|A8qcl7se2Un*1
z8EqeM9>Z at _7?h51Y>c19HpvBk2y{z<YETH^?>pN+MT#*k3AR<0&dR;4YzTDpWV@=R
zgrjM@#7wOL^%lc%s}NG(E$$(y8%*s$>RZbOarqp)W+ChR#XI}-RUD7vDwc2=)b0^1
zN at E<|vE~pP7>PU6p>6CuE}lK#FSh@&v$wx at B|N7LFmt;h5e*Vk at w(^)Vme-cDLz1n
z9be!I7-1PG?_HRpkO2KS>O6GbiIA>Ro^mN1uaxK$etL(vj&%s3 at 2p=IFlU(9t=;Vh
z``g8f-RE1|kAB?U#)^FW<Fl=OI7P at bCrkjFJ?;6hu$~<q6}WY6HD>(6s;+Lk#(eMe
z#{&pNB!`cLVC>P%vKuWH&a^}`L7ImIfw$RAlSevlK+p0chZKm5b&i3aPtT7<RxL at K
zW%BhNiTRLr%~i29oRo{sGC0VzUiXZHZ1sL|$NX&~f3&L~Js}g?$wyyDRPzs>>S0s7
zS8jz at HnZ%wM5tV?P5vXQ>5Nd*!CeM}3UXt at HZHemM<%IAN?|@`MsxOAUOJbPiy&+Q
z9}G~5`MX at J6~rv}_wGmzw`4(IJ`keT!JUyM(%WW=bG*0$DC87}Q3tvIr1f5-2b#RX
zt^~`|*848*6#VZq+~xSB(|<iaj+yr5Bc%;ydR~E(NBaB<P*UdfutY*1QbNU!JpL#U
z9CzL~p_6IK?bJDu{?K_3Z4_^ZzRanpQn3i@%e#llLy!IY)DYrrq*gIru=8whdv~Aj
zetdz`_BQ|8-G1 at p!B%?c{!sD>Op~1LKjlOn4|q{7E-=7qIzm>*cJa0~?DA}hYp{7D
zq}K{>C{{E4vPB0XmZOEMl)X;-OP7Zl3e^xrGxCQ{xo{>(w>W1qElO1y3)@A}vgq9}
zkT3)y6faql&pyH&KqYW_<i(=ab|GLpnN~yy)s@>utryktEZlHWQE+`6b#TkDCXHx!
z-mZ!V<tkcSgL-TYj+Ic0t=(E(U+eVOm<eK~-90*Dz6y~ER_U}M+m_im8!Ic~9bkbS
zWID8ZHzWslA$|;UT^_wgf}CgBrLj4ED%a(?%&N at 7s@su!q8ARi<Pvb(HCKy8CPNV9
z+5<{`c at 9yMQKWHBBV4ovxLm-k8Qs$HWp8`Gc>H{K8-9RIgmpEye%Rjn+uq#`<TPi>
zIS-s|>vdg%;1hlN)PA>~KgEU9HNA+#?Pv@}$@Cn31T{gbr|&E;Dc9I16j{Q#SsZEs
z6kW?-HXihlll(#d{2ec~-t8O?+9(gx2rgQdRi|-6E=h;WvI3OmSais at JS=q0iJf>#
zuf;n=XR%TgZ;hDFh0Q?nw$4h^{4xh at A`%l(4oenux%SnU^p at W!IH_AdJlK7(wZFaF
z#INSolb!8n`*-g at fAR=ZTz&%?EzHGyP48~+{rF^muc~c(HDBY;pFDZMb8d6%`Lk!+
za^$tPE8Zkc>jW63PH~Hnr2xshmLsSg%5hU`ZHAmm!hC1DKvNA_OO92#^&b|Ue{%GC
zHWoqRt3KGdNQ#I6J$EF}0KfHSAUF<Yw;xoL5D(60&z~{w;5Sb(?3^K&<KekVeoMk(
zXv%o{{L%K^1z{_bdL|(+IN?LjLW`UW+H@;+oJMeHD9}ss2+1n2`RFDl|E^Y6b7|=a
z4}rFblNoA8`H#@|$$5+Ro7H}2JVUp3)YAch4~OW)muB^$8iLkmWjTZ_+hGIl#={@r
z8mb;@@Z}PIO)jX0A2xI>@9Fq7XG6wM^OiU_n^hed#7d-obklnMzSH05@%Wc?x*9qd
zsVz~YUEEGYozBwo^yvwEKBO6i|L=NrRg5SLd>~dzK}V7)85vG7R*8Uxk1r&Q$u%~v
z71!shfxG3?QBOnGiyvN83<MNtlnmrd5et-~dCR)4 at sdi6OTAPwUgFq!8?X8eZmQgX
zTfD at QY0ZnJ9^-KrUiBAntNR&l^E&7tOr$$*Xv8NsO&HQK8GhhsilVJVz(^o%A6JJX
zckz4Nvm_!lc74X%>JmUq3~C?Y1}5LYB0Hu*n^j;cT_R+$4X1K6N~UBEo>a^0Bht!v
z3%2$~`!yneaRXT&aqfZlO=&RH3H|>E619D%gEB<~tC#wOea<5Ftp^!EVYDuxVEzdg
z__T0?txg4w1P^}Pe~wr^D5{@AvTzaVxXF#d$52HxtY(Bu#&9e`7LIF0dw{6~%?$dz
zb4i~x>>NVrSBN#-njJY+kqA+_P*$-CNoMY7$(J`WNuyobraZE}AUt{7+~5g=QdQW<
zo;`003jY4!$&cGjh${@0SO^GIhvC2K1W%c|DbjO3e*y_RS0VatG;N-o99e;j?d?C<
z-A5q!gJ*jX2q9SoAd^}4NHMWr+RA0pKZ>xN;w(oCu#yPNwQ}*@`}aRsT&`%`%gkBp
z7ZI4X`3l*Xuva`zMCNITdG_Gx_MXZXGn`krXC}>yOp>1=r%C3Vx=P91jAG8m!ru|@
zg!C$v2Nlrq9oQnCUx_rIWYe>&!My<QaX`*i#n{A`pzU)ddi at XAv2eq%L!~zWr+z0g
zRh1nC9a0c2{WD1z0*=MJA)Lg(Are3cjNz_2QG~G!xx(G@#y}aA&l at Gk4}($p*3{EZ
zlBb?|6*TV$co?w>=eI`(NZO(g1qESeX4{Y;PX|cM;VVMb*o65t-}Cj3CL1pUT8c;8
zk00Pr91h`fB<Hx@<s4C)>v9Q6bx&MSx`?-BY6C0*)Jm5O at bC^q=GlO%Y*psc4q&Cm
z0)d37s1J#Vt0(9y6O(pWw at N(0O0-n174z~ByA0$iNfA>RS>wk&oiq}ghg_Fhy2ccT
zI`ml^#Zt{yYLzm>ag>5gwS${u>XpMElT-d6&<HAwQ>yTx3sYrGr&C at IGBUMXfe*R@
zk^GmZo7I!##d!^b;L)ey8b6X#TNN;NY?v~OGTO>L&QI7UoB6hKYg5K=38CVwLv<?|
zdR?$robuo at lIb~pD`BeBEiamI5%}Yl0$VgM*`P0}DI3Y=?69N{U=kAXp{rA!VI1b&
znCN$tjw?KZvQe|dNc at F(o{i&-7h$*To*={2kS`V&;ZNtqw#Cpe&90emH-eeX5oy$f
z#m^aTEY}o5gU!3hsoS`}FS=3^X*pkm!9^(okrYq at leZeB9hG*~7$MkH<xt|sO-M!O
z{b>8i4h#v~yShCFR3+967PfijpH(1D>p$zdN~xG|D)v*wAR^)&4`2BC!6L|dsHzN>
zk(Bb92|v*`Yt&Js&+_pRJ}Kge4mc+LQ+o@^D3DG}IZfC)$+aN}1>%9eCGUzX(-W=D
z1o>!CZL at oRbkozn{Lo~6<|7YZS6anCfqA%nVip7^v-8-T_sF5L_UD?MbR^VprL=$9
zQ{$H*W+v%dLg_zvV$#VTF?&<m%_tvGPG^m<YI8xdf)bpHlKmR7CPE~uFqRuhvP`m9
z0V3Np;_6|SQ2I+mFKbK0DQ7O;?Tm4+0 at 49OvxSU*D at d7Xry8;T%k>2XlwSa2(1ZT#
zEnLfscITA7HvL0M*jOWZQNQUoee!TQp_Y!aEcO;{PA-A&cp-?WV at J5|0DZH)<j{-l
zO0E2gGX5RL;0jMOV1Yx3AN`}w(H;@9(^s~z$bp0GxX>LHq(>2KVTL*JaK~9wmR6md
zkh(`#*`-P)e)DTJ?U^UD#9`X?t+QV$Ob!x>?HrjLjtk8m5O^6=7=iNCLB#|>9;ujC
z&?wSzReOr9xYvs?W|cfUca_O1^l#zoj3okNg}aFmoI|iI0On<4$W#V(R9k^pdDge_
z($egt+_?rL-4oNYGkp_BEln=FY(FaW;=CLkJrg0<ts>2G3A;dP4LSO&r2iS0iTM3r
zY at rnQD?2_L_PDrT55!!-e7T3X(Sj>YF3*+a<tozUtAos+NF&<8q8+j#yybgm$mS)8
zfh)t>*(t`-S;M8Shi|z0nb39WD%H#cuAr%w#3G&d*J`&Be1_<h2HDkE9QC1jAJSkW
zz)q at 6-z87>Fx?Drr6k-c#1O-G7`5eVXH(@*u=5a6ZqATkj=oW1<&n%9upWuP>Y)<A
z=HNTFe56_9IQU9#Gd>=?V>p+H#pVE_%)#m9Xi^Z(o3x^wD1I04kiLuj#?u#Sqwoik
zi7!<*^H-*q`xUp+34-a)L=2PNOCnvB_gr=mU0GP=?tHMAMq|WpV3uo=N8uS(B%O?e
zFQT`82lgAxD`(S*eE<F9_U_Nky?wX>X`Wm6!l&n5=5&e at xGN2%TP_)#X8zR_(aPLm
zdf5MQYNFxd$<E)l3q5MHTObip1?~!fD513Ep`-uXwJNxciHh)O;s7p86-8ytDfzxM
zI2%lLd at C3o+H;g1#N?{fggWD{ERg*JT#*XoFV>JeET!{;%aaqFnb7*2d$pGN9gGdp
zN{TdtSjkBJjNMw&5Ube?ZgZ>GZ(?nsH48+8iLKQG18$!?w$sjA!#qkF?_?i_r{cR#
z14cW<^$Z}vAe-?)2kSnmT(?W7R7eFgL*<=|o}drjS!v)<dj547%L!W4sVSo5UMB87
zn3Qs>*vN3pP&y6K(U1KIg^U7o2tHY^(JkG<#^Rk&IheFWOkaK^mPy9etR1gX-Bxnk
zfFL#2X4NZ#BT)qw$u;$afDktx5IneC8X_`?Y&AG&_`Mjh1U8w%B8P(@)VPXs<L*b<
z+nN(_mzKCR+-b8H!d(W@?}j@`0Wb-5Nr6kloV0o&#HH|D9^L}=xxXCCK8jQ4E1S1&
zjZ(9{66?;>y={S9|BgAO5<qgUbQ{Hf7BCF;hwVxE1jNy!+={D$XsfL?RiVUr1h5L_
z#7D&t;|9n9anRAIP|=GKd0v*WD;gjyaq#{zPVI?RBCt@?q()t&7{>;+H|}81c+fk*
z^#tb-?BPp at 9QruV&~;qGUQGUDmKaSif?DoYO2{IT_I8?#h at mU*&fxydZ&Hp*oG4;0
z8~^>|^Zo56H@&89dUuNrr}Zq&$Q+HV`$oKUwF6g|euJLL9od($m5kuW^zQf^Ke0QX
z^$!rH38|oMX at rqt1I|*15=IUs1*GJYkw?)%M_-gTY&~t6Lk({tKvqAvPw at f+xb9<>
zuy;WWFs%z^q+9xGfh#U}I6<ref)!BwH5|FFQyv_mB%S#nL>wT!u|VwFK)zv|49;E`
z8 at Fy>zjfmVoZ<$>j*}NCf<!}O;)+$PIayLnq!6A?Gh&^38^tvViO5C5AD=z^@$uvB
z-R(z4tXB+$^&<4C*rtc9NS_pjkh{7ftu>y7q}DMvNzTxe;F+><<CoH!#A9^q$saR~
z+b!V{2uH0*6(s)Zl=w*|<71?;#+-{g7k%jMkxG>9L1#qjRq8Sdg)I1v{#-nro${6o
z9tq_PJPL|YjvQi%+OZ=Iz_nsw>DBO6zgS4PtMD<Ejm$`meAH2j=mpkU2nV~ksNtGT
z=;EE&_xwFyPQSzXM?AxLlgZvY7T$r`<XJ9JZhhy8g2<_IIms1gG5wWihfnU}2Aa<6
zkimNGU-9B)9>!F+mjFbSQQagagW{Dd;3oLD)jwwd2*^SVg{0s^FeNaibaVn0LY0tZ
zr~#j+XM1pV!!-i`V}UI%UyXkG8o at 31OCWH_9#0%0w=&%0t%q^hL_qE6Ry;r9r@=!K
z2)|!|sdsUdI|jdnR--#!rHAAj<N?>BPzJ&YvO}d1<EIYJ^$cDtVQ&C;h9cK|Ne^(=
zT2 at BM{`rw at Szq7vj;(Tpug9RTC;6H%QI at xfJG?X%a|ss4KzkjqdFT?`_-6?H1Iy{*
zGQxR+9q#8#i(NFo{?`KEcNA9Xix0m3I;SCaMfyu-=wF<Wua at d3YFTE=!~SxyTYXq$
z>jz*pZvtQBBYuLgq`#7JVDLLfoJrK>f&2(}>a?NT593aXa{w4E*ttxN47Wr%>;~=H
z>G>LV-~m$nV^cIntfU|GaY+xX9Ht%P#Z3Z8ou99_`_~qU8Oin at V@FEoGi(3>^Poby
z;c9fE31xm!mEhoLT~=>)5|9$264`eAVV#`C^m(b8 at 5Z^E=hptX75;4)_Vs`Rr|Zg#
zmgKg)Kt)@!j7me!EBfD+X1>@T#h0x9qpE&#=HCh!dOR31cm?svC2M1K<MOnshiH3@
zYo<$rZ?dyJAAy7+u}kQsQi@%5B?{6K;$m9y{toj`d}*S1Xrn5k)FDAEeJXKq at v0Lh
zNREOUNK$*QN?e3Wu!aYfP**Xs(nyqd<CG;n_2AjKL#k9L$7$pV_}~fsCCvO*7Pw`q
zYqUWGKW|x*ywBNY8C>0iV%MR7DoG*;9?Yvs7rWSLe$BU at U#qtsHbELqwx9ZaC*O8{
zt>1QB%U>cbIX2I#eJ_T;3THy$<q3Dy%FETg;fS219c=@@G7DW89OCls!fmmn|8}j!
z-;0#Ip-3$4IBQFp47Ds$-h)SvidP#Hr;`3_7?0~IM?xS;*MB`W*hXHTgg3qB)NMkW
zu0=q==pS(GrFG`#!mYQ=k=woJ_f*W)$X-&n)N`4htL8IuJueeOULg<=szt|OHwdh-
z$O#%@-e$j+l?Po3FK29ydfh{)(LEtc{NG|1ht=S?G-JiZUu{LG6b>0K&ml+1Or7RC
z%vMdnQ~0Yw;TI20F=e}X5JFo84&$RP&8`cn2?gt13{ALOUD6lIWTB$y1^~PS at 7W=&
z-tHu|GSG67buI1q)#$6c_;2au`pUPzEPpM`MA*pTap$B3dnM<~NwQhfT<xi$$)?=t
z>*`g*rp-tjgo6*o9h1)~syEnD<l3^d+$fv_)fYZ>M9GW62~5`@{cA7*Vi=Ky&6(<*
zYXF$6dfu=vXBeO2s34p1lrpiZC-V9U&J2@$5*)~0>=Qe at 19?(SbuF2{9#dk)wWLFv
zA*z6K?<9v_ht64j1h!0$t#%ZM?<<LJc%J1Z=u*IbxYkft;w&x%T>jDd$VfS*P&@qi
z)j90Gel3b)A4I82J7jHJ-B^7OIp?I+K3Exz&#~kk+EhbFnc*V0k&1*bxtrxoklrF#
zh2iCrme2T|gNIE-EKiwS;9X)-qR?iF7Am%U7QD}Q{$jaSJ1KlZcm6tBlZ6i5cY5z<
zl!`A3q%u0=%aq1yZmO)KGS@&Ig|Q#gR3rpR9lh+ at DXo`qoh{I52i3|$UabP5s&sZ5
z)uTCd1$Gn_Z-<&QoCzbDg>TcDtSE~>qsQdz;0-Z0iU)g`G-aPn at zxU0Lwk~+b;>B=
zHkvvYG;kF`8Oo%KGPJ?AKv45f6|&F`KlNQzbP~kON%B^CNJe4CxgxsqBpA_Dc$VGQ
zT}IwS#YfekOJN6!1pHf7I-w^nE~Z)=T^d2%hwZC_`^o))19}6kxtBs`@*@x#e_kGi
zg~lspzH~(Kh^xU}J$bR8__nEv-U1@#rL$5Ffy&F(eqT!RTlA$-QXm(Ql-y=du7v$B
z;z+U^{+7&R84cy7Tg{Dp(-o7KbP<yY|E^kQ^`wGsN|(}=dz{i?qgc6D#paU6?FPGY
z<E71!qnHJ8%V|D~nq$@EbJdm;%ag-ZmX=SBJ<xFCIH0k0PWX2R6Ms(l*k`Gv<I8dk
z$F#}qA6{tx=!dXySo8x#N^Mv-k?Nf$CsQ}*yoBEjifAOjM%DG|5EOQ2T{fgGfTevU
z)!ey{2Tf9;_X&axc64?KPvs8$SGDZ4gP)2VdyZtP&wa6jxJSFGNwHE)Bw^f!XvXk}
zygmBq9Ln8m?Nx4SL1FvF?56IRh*WcyM^mqfvQQ2$hkC;akAy*3gBfU&0Q6n%CnJcR
zR0F=G7S1e1!M6BYx1~k;WnqxH at KMFuFvD~KfTm`tv4SbRbvpsnv}O?lt7?RtM2d{y
z&dl3^A~eR^zXV#O)VCQm4YnnaLk<^wXe-8IqPsl+^FH19JaI%uoXYvBLS)@Igl_F0
z4^FO1lBh}b8zh;*xJ7Ci4iT3NE`q;>u4;Yo*!&`NBUAw7K}GIyOz;tlXH_|pxpFan
z`H~+GcZme_z5ZK?fx6>NRpCVX+_&LeWG)C#RR?Z|ilL5TQDIG9Tg$w|Su_Y64oMQG
zX+NqE##$a}Zf0I;)QwzvUlrNNO77z;N70ZLoaMs3D<fu0^+V^%q#Kc&m at CZhstzXs
z8N^i9PJd;Z|74ZQo=~$$%d%KP5q^0>iu^mb7Qv(lI&-Yj3QmwM2dI4!2HO$WHzq5?
zKF5$w<%=*DzU>aqMsN&Kgtoz|kLZk)G6h*v5x<v=n9 at X&5|hZ|Cqh4Oic<6IbT{3J
z93h<)- at _H~p2`XL0z%DfS4>1U-9Y?K|0B-2PFEbp8^S5+UWTJaUHq=jVmg%>qW6+e
zSRn=D^-fvf3=X>M=?+*qZC*;Q+&7%y!q!ck#-DO@*8N;;Ig)J;&S`M_J?kPk8eV7_
zz)Q<64$M>k;o$UqjS)by%c32|9x>4)OTcd7BOm2 at HYqeE(}r5<AkLVM+eE&=3bH_L
zZs;fr#flvYa8084lOqP}pfi5g=_n+Y_!1t_M at 7R~ZQxLY3l7E&H!h9AhDm|arlpfa
z(oDos4 at Zc^bfRVHSb=$- at nm5om3P#KXIrtUwi-w(Y5=hc^Bghax=e<v4vg5_iowAc
zE|hGTvbY;{N%%&e&L_V@{{9rBMvMCnDrN_TaHR8ws6~V#kTQ^FaxiQ&zP6_5p?NrI
zL7Ge at xZ2^Ubm)+l=nBtIyq=8o9=As0B_uwrc=f#3Mz&{nnmHREV`jMfoFANz8K=MY
zg|jwBobwSTESBtyqu?u+9(i_<>2{}%S!_`79v?Li`(x!9u7)9`iMP%w^@*Qg9IJXX
z5Kd)Go|G;=Y^~z&xRuWpT7qnW4S<grI0^2E{~y8+6n?s5S9^C12BU3o!64-WzF<&e
z4V3`6^K*Ll%aK74()lnkPq^GxvmCAxWp0&#+aMSs5h2VGBJfnXsH%}<7bbzJprz4<
z$xB9xFrHJeCnR4jcBchoq((ffM1*}A(R9Y~CF5f*WE*qJ{8NI&WAAa=w at a0S4N-Cq
zYjR>@OJKj$Nk~vcuT4-$K;y;dCBt)!#(7a#MxWtlQNxci+j6Vl>Ye{v9Pe%0fHZ_n
zRdzw*7^*2Iw9u%1gxo+P;0D?1b&(1o+{qvd>Zto3do{e|!{sP&Gw-~I%T13rq8uSg
z#iGKxdK;2koZ>eRlW$wXlG@$2bW{fiWfCWk7$CYp7i~Cgxe{C>w)g(~MbjS3;^l8_
z`y=!HQReAn6c;Qc6dxkKrI7jx$)7WZ9&zqmi!LZACU^J{c6x1L#aV}pzSozo0S6%q
zLOS~%Q>4a|ZeO{yNHx+7&K%b8Ne8SDpD+ at j)EaK`Wz at P=wYtrtUhB2QzGn$eSd5Z|
zdSx;mK%6qeNcg1em8lSEt1lOSbs0;TK0vDK8wU<HxnD702a-|n1-s at fnCUkrkC*Gn
zl&?1w(P%kD;(WmMvZ3@&EnH-#c97UGVCsqn;dOUQ3H?p$0E0|5f6<89U#%P7G$5kM
zCzLDqD4kC2tqR)_>Jn|GT;f!flt*7k@@>1ODaRsc_e>(ieSaLQGeRg^Ai>%-PkBgx
z9Yl7&R?VzgNWQfWrC|g2-Z14wrV<Lf41ofuEnfCiY(IZe9Q0cK)Z03P8Ld(_h={=*
z1hZMD0=7U>@u=_0sYdq(FqRt>ue~?}KH;mw#VoVqug<C>astfrB~Iz=2k3Ie!<yua
zO0fCD95&+??EbE-0X+$`3O^Vz)HA%R%|<>7 at m_piH(;w&w`LWK$YG~VV>n3E`{cpT
z+mE6tVEgssDL0W<EsezHP6>0iam+GthDZ7s<dHX=w#n-t8wM9bp(|nPaAXO|-C#C1
zl#!LwBrCaYj+Cv|g#p=y#Yx~Nxa`t&1lFZ{1lVrIBUw0Ghx84P=ogZ5K5C5l+5U5p
z)@EC=$pEKt1wxd4xZX8)nBt2JV7ZVB1om>g*WDNXkq4QLfIm5kYM4EGqJ4UC)M*Xj
zV5A=>LoB>{zrK!OSAMtbyRF|Ftp(`t*VgdnFR$>=w<>E6k<G4)n0em^<SF5VX~T_I
z>!cL91*Gw6D1ZMmc6eHhPPe45^}vW0MWmCfD$!{2s*aeEu?Gqr3EAR8^l@{Qn<Voj
zR=g0kvD+l`T at vV{Y6 at 4OahzDD*D^xM=m9I)4h at Qz8eUdv)}?S`t!Vb%9pl<E%C6I5
z*R$Ot#`4!+2NbjU3kZ#@hULZ^75)7489$sF7p at 2}Dd@<pAl*@unW6-Cd6=VCtAlOm
z9g|3&#}81<ZZa(M4c9v|4N$LC0s`-t?*^(ISW%%)K(WrSdq{=jXaMW6y6M76_gcZb
zHE}j#cre~bEmyqMtnNb`q47nL)lHVOF6dub67;x%s5!zx1tWdU2Mv5#(FCstosKe)
zn;|`&WREa8I&#dV{(-X<%_k-nTv5He?({p1m>wZt`Fl}SGL4?9dskNQY=vM|HC0%G
zEn;8KkEAo>v+#}OF2(ceLAT!;A_dnNYF22rRm&Y?24EF9bP51y%Rv+vk1H(jw~GDk
zf7tCekj*qns9>LfitfCH=dB*(#yY at VH8~p-#)blk*aMusN`nnVL3J<wGvWwmDlou@
zJI@~M{+!-O<^Y%PO0ubh(N#l at DnTQ;PPSU?W(&ZUqyrN?V1ZZ)x&s74;JQyZwfD!@
z1YM1Fxmrq)p*1#FmP$xqlUx^;V$3gm4$FQB{Ubk1#+q2ueZtbmvVRr4A>4cST`Lc|
z0!c&b at 2Qu=99{=*0{<y55Y|pl8hipw31>Ja$#!s8EM2|E42+>knh9uWAShvEB8&-q
z>I8yjd?E+iq#<9~rmEU&h);1IK8IwnNP5o^g6uv%o~D~d?)v9glO_2WiP#u#1b6?F
z7VZzzL*eDg$!=!_8I*A5Btpr2KzUK4kW@}A&zJ68N%{lhywsuB=06~INUQ5S4kNH^
z5<!}XDgcR8Ua=9ey)xOjUXVK=b1~+d_yYo)bexTgCI})tx%lA<SHqK658^vhI*25R
zHu3G~6Hm)%kK_^8UEXk``00mj9^=uL*<F6 at cOlQgCes#kPNY!^bLI{dBiUC;{%JZL
zcIVesiF$y?ZIl1pF;%pYrGlLND%KfEk99;Ldw(plf`pP=Z5&42cY+y6Gbv3I<#GaX
z0gZO7QV~cN_HrG?)tyM{dcJ5!Y_ASu*@f~|ny0)7R|949Si1k3OtjZQ&gy8rG1McK
z&-140CdpxdP}g3969u+bY7|`~?z^nNcW?6V>b2)e#p6!SG_FAW9n0+?o{jQiOiD-C
zt0J`+yY($qgJ1nL9?aL0FRC<)<&MftVdXxDpf#MlY-R8Lt+bknfp}z!kxN=>DXi%)
zbF;9u8d=u}!9?0abdMUjY18E{B=;He#`NeQXwGJ20`c%FiM5_MBWCS)eK|#XJeF8m
z#dbAuG}BhnB;a(i-2Uky6qvHCZE8v4ZX(8s%CwU*DC=*3_s8v;kYY6^iy=RDdjHQC
z-`)G-PapRau1j9IzPhoodSj&n<92s+yw>X;43Q(KGg?z{@pahgt)jxb5U%5M`{vC*
z at f)A~d*hq+n}6C^|K|GbTN at i2w{HAt{rbkn`t?5*>+^PWk at Cp2-GVaZPs71rJgNS)
z_mk>=!td^UhY5va6>g|F*+hmixzQE+eb^|9(Yw1hi}48mjQH;+9a78%YYzqCOyk^B
z^o&g(D|(i-i><xC7d*v_FP4})d_sG3v?>;N+MDpIFp?@T;Wxf5uCK3uv$B431$Wl3
zf4g~WWAo<5Ka0cjgTWZtNQy;qi7^o5Z?035q)vNhue*IDH$(Cjw=pk94_`K<GdMOl
zrK9IS4Q5$yFr*P74#Pdh3v3fGjH025H_0YYAId#CiD}Wp(cAc~M3#x7UK(PPYho)|
z at oC>ylvT&IGz<7hTGaa at JXGvcA2rfuDWlPHr(jU2#V5%ac2yTj&DF#6#&Q@$WuuI>
zNE>xZ`Mlj1XXC9w?->*IPi<9AsA;<$6~6h<a6x3*DBmHnL~!>LoCDyA#8M}%LwzO_
zLi)H-tQAjNhs?q^ItCEg$fex2bu(??$K5urV at W}zmry>osGWw*STn)*^V2ct0ucMz
zgFV8Z6o_=Jux*h3Is74TjK|gj2THgZAuB3vS_O!yP-5jGV+B)i<I?dmCq`-VVMyj5
zyk*S6|KFcni2MIZ_<cS92d}^NO~(J%Z(~dN%>O^azHv4D{~u4E%*6kVq{#hmuE*Se
zV`Fpu`sU5sQ at Ou8xOqcL`#{aTTya}1rmjU+G$b;{;xi{cuCOoW+BpE`^nC+kj at Ey^
zTd;}19U4`;MOI|qt>GgvGbaJ4%N|*nq#$r!tW}QF``8O9Eo4PaPL>;M$np63$u7xB
zy^SmVV7IhmWG_eaZpXJaDW$8_ntB#C?tHnjq8cXFqWYs)S-B at FCr?3)#R3h*9_Mbb
z+9pg^$dc?YPn~@nKvHqP<Um|Gy2sK5{PFd`nVu=UCwvB1da3J`z-2eJI=H-#uv{p^
z8T3z%UfYpW4pSbxgR}AJ*|;ewsNr*lls6_30_Bk=)ZH^rJ%X?6Dh-a{9M*#$svho>
zjg~M>s_ZMN`d8gR(M!>|^Bq>83k0~ku(7(nfMihEqOoJ&T at V^E07y3r#dk_Kd0xs@
zHU%=%3R%)hzMSx;2-|T%9!giz`gR<wUd{RU?cKed=g)XzuYzi&I3ABrH`mtQy?aOb
z;pDv4KI!&Xk^8;AllnKhj{M|+6aO$6jT6sd+>7+Gv8QpraG^Vv_d02$3U}#3R*VVf
zbDtfZC#sw`6{56dtzzUL@{_Mng9>RS2LAg_fBKadq7A9WZK**W_un<JBu0zf`AsHO
zx?NVX%|W9J3R`81OAvICSpVz*=oL5BiW;yYU!SiAa`o5JNNF4|et1za2+)r$TrjD+
z#*DQRVXlnM(G)%{lUK=sDV`tjvbB`gRc$-euSih~!V&I!B~0<rLt~2w&T>r5^FhxU
zl_EjGb=(1SZktm~mu?s_1-V17F9#EM at Gzt^RZ)ruCukw$TW<@8)o!^wcZ4IFIe(@R
zU!OZdA6h*yz{{G|bZ7m&XVo_0iL*L|k{fr{DiKym+!|gQQUN+*pCnv4@^Co;uae5Q
zBpoAzj~tcT=uOudaw0mxgzgL2;u(TR39zLhwUfrf8gATfOclu}u*<Wg=$57z`y)r$
z%_c9B4CaXnGf~S$Ay8_95ahJm7l>=nP1h7h3?hq~tBhJ;j};d5sD-i#9nr0Fi>jE5
z#op6Bb at u`~*u|VHIW;01FVeTh!hxAix_GE?TMP_g0^CT}6AlWV$6^QGXDpX8VwHZB
z{=hK(F at k%Yb|n%{-ATlvZoI0J9ou4xBAm>6;@$2fb}>S%-Z%&&jvH#yo{Q{Z+x*DD
zFf?IE9`c-tv*f(<!aC83T0<x0ng*I$;g08g?_>b-!f_B*bsq<?cskfag*KjdU|V25
z9-s8==24N$i37%VO7qdC<yzNo5zmz;S2db>OR`R|x`n?Sq^@lTv2puK<a&_iCJgpc
zCJsJTi1c5-06xStg*YG~a-2SrY`6dUa8=_+&}Mz^VqOe{1Lsux-+AkT3Sb)j>h-_t
zw{G3o$o0S9+`Ro+|2ywoUZnih=zo8HFrxz4(bNZMfM>S<u`lf1lgxjFJ66*|M;M#@
z&ZjGJrISd}i=FhaquMIkw&?yG-a;AliEDYM*m+eSnp%0GT+fpCWqRMLQ{Bf<5r6TU
z?7;bvB?I>3t9a*vD^+{gSY}Y6%dv2_ql8oO&IXr1tEG at tP4dS)szwT#ImhwIsvu??
z#~(<CFx!BtRR}bi%Ps>3i<|yFYZQik+<oVgX5wT}ZAqJh4a}=iu-W{qQBaM7YCtTU
z&>a_X0ylT+iyrCGY#cxr8eU|FtHr{moM0DJ1;HcYCvlb+l|y#kW_B4sJn<NxS`9cH
ze!@9CaxeW<PSs!hp-#$koc{*x(M7yJr~3a~zjf<&e*U}l&FAyqMUHcG*SVVW->m+h
zMp8WeUA6Zox|(wMgMRn<X{Y~aaEMUa{&)|0KU?k5aR=7%aAeE<df06AHuLLgo#OJ~
zLrLYm_O{<%9pIMW(dq!bw5^xbQFS*H&y91R8tLqkx;cKbZlfQ|jVXAQU<#Y6{}%$`
z4sFht%|ZVV;kU5|W- at nhkvBigPxQz;m-kS5 at VSzsr5RM6?!RUZs7$}JHaI%MMSPpl
z`nVT@)?owiB at PDd^O{#~m93Z!@}5aw6J-VJ(e)G+vxB9^yo)(<T#897y%4Lc)>q+X
zHZ4VZ=Dw0CbJ_rBF!biIcuaET>kR%=zOp$|sVQyYJBo)e>UawYr`P5`pF%9h2(j at D
zJ=@dftfG0Rs3TW(+ZB{kMRh7mPnnTVUk@@HGw|a`*}?Cv&oRz1!Sx{1<Nbm3AhS(O
zy&i<p)@L<HasNvA- at IxNn@s2a_3pTZbh^UW5M_$&j3e<|;VLVRhJzFTi=Jw#Ik31x
zIq80oO9oqTxnQUrh#UuMJu+N*$q*TOpPU}j;`lW+q_eM>!-c9JcvJUGIU(bwnAj$Q
zSsgp16X))L5Pg>q(lh~+L<+IWZ>nux|E6c4y7rc}5K=<iDi<g=xGCIW3Te$fbxjhY
zYWe{2K|&fCnNPh-nMoU at 7Nw0W-hYvF!A%bi(BjdO`Mb_Ij1{<kIGKjCU7_m<*$v9>
zG(sSLPcCoh5yDmw57&bWm&jxiyS2iow7Uy9HNig`D3YPFMfc$*&V$G1X|=lsYtHPw
zBNK6F&9ztA*;)>7j2a)?3mo~{lhB;B7U9`9grp|Y5Z3i$Q9}E*ERVg0Z;o79li-O5
z7lA`;&$-4}MI>M&O0+g#nygvDoS$Y0+BCZHy at y34r&&0?vT8kzxW<#2C5$nhun=Zc
z^Ce1lE>A6drLhLY9?2K~&7EzDxhHH<lF4fJE at oPCry_RaK7Oo?%U+%AA;R=!pe^90
zJV2KLt#b5|APb3*8$M}TL;S`*BBG9ZgVuN<VQ?1nVXK44S|}>mT!u&<Wy+h0Ut*U;
zp{0<Qk4`WjX`FuXdA56L{5zzfn89;y(n5^+i5C^}<KhQL>dvj&ovFfH`v37&=>Kor
z{$~AFuK&NizVX at rYo-bOz(T*b{$EJyiuC_bC3l+GqV>j5oFtBrMbIvX;12H6Lx^sJ
z`5_oZ)|6xmICpS65_fOein6kL1&H3?m<2ADdZo{os*qH*=bB=wikH~e88YV%O`hGQ
z`5a<37hR=dlSAgC#`ZqQAfdK`00{VPy$4%`B?2iK5PJQ%D;KEX8dJnwTS^1&QLe%a
z`4d<iE$#UUG+#N_oQSZCDY|1BsshhIw`FSh1^Hd?`a!a*Qm&1I*TcctX=*m{)WpYv
zDalxY#~w_+5u9n_3ZC at igu?>0rK$8sF9bmD+Lf=kZlK|=^U4l|gmTV7RS&F`@56VP
zkIF%XbRWT^Aei5084SJu-VKItxJ;1pn0sw0hOxMJx45~!vA!P9-_;G*91<nNNHU3A
z8dLrOqoo1RM*DHb!VXKs$a~zI{70Bs<<!kdNTt=$(bZvXD at kCrQeEa2=p0>?ny*@X
zvXpWPWrx|43yajC`yfC{i^XYda!8WoIJ#Osq+{j7^QQXw at P5O@`a{MSvGhCsY%Cq(
zj-8L50-|OP5 at RW8COV?ZVbgSW6}B#CV$Dr#P8}lLo%~uQBaP|&0m;F79gRi5pq11p
zyLv$Xd(5NJLXk<Do?arz1IN6G%5o`ug62`BGvzh;K{vC*k!k-S0`{xPQ7zjX at 8)qK
zUr1m=&HhTS^S0B2b$LM_kH+V{&WaioXfuaWyy at O`M=KQek+8ni?hNlP at I(NOd8MYv
z(*Slc?rp at K+O;*}l(E-AiFEAN>a4Sn@~zKS-OF{Eez-L?LOxp_pRKwQYc3{?OSzPG
zwip+#tP6z8f41tHL_Md)=`yXl`L;TNH(#H?o87w$^XBSXK1F3z$)P9iFLH6L)YX(0
zo3mM_gLX at 7)N*3>8wfN(K~xtBL^@CdI6UIy`c8cW>kO{3v1g+d-1>m)B|2 at hfCLk=
z7(v#&jvIEeosVt~pERgSyXagOG|V_l|NG71Ihtc5N9=as?J`$v4$t9<X}NORXLdQ^
zs*$74WthV!f%(}SPE==~N`vq$=I|@U^#3Mv_(c%)ztJ3i5j@}!R^#17GUho<#E%*e
zCwKK!EDxY)Vs>!LLC<tS4v-zjo$g$rpn3Ofx6T}%k9I2mzOXrbQcqq~s5zhR+7)Sw
z!p<8bUc_SNI$Ul=vsdxRB4vtw9Kvhke0h%Yss>B=SCKZ1#iXkVIm1|H_Jm<9eKzbd
z_x)?6zi%DBk$m1vQHX?Ro#Bw~W=Q+$j at mqMc5oFsFS0}3AuD$KhrP3Q2abiXmm!h3
z%aqHc`LoqDY0eooX0Au;L3M9R`5?TbGu&c_3tk}+;v07aoSo86iVFie?{F<IW0{a8
z757BAxv{AZ(a7_KBGdco{{8#7ip275?KzV8!d*8YMkG~A`j^vBbL{~xI5PyBEg1fz
zc<Qj`EX4X$P!pAtYY3y?XD27;%NF$P&V`X3&v}e~RhTx&TSX=b==FLgcV4N|Gr4yc
zJ<IHq?RZSa+9p{mG5ZpQlQ1w*WRNj^C6~_2I*>cIiZ`9}5f=d;NdwC8%nH27*G)b3
zvpVeTdp|t?srcLW&wIt=-RDn5&qcL!er2}6VMX*_uc!p{VrKi0_Jb33aALNscA<Y)
z<4oXg3fuybnxpKsbL7Np0PB5)I^)CRW@|JW94_gQw96y|8^ub#eA#$5=r^?+TKnM)
zU9t{FK+rZ_XuT~trb#+Gm${fo(~Us?^$^8*zhsaGktfBkY$DVT-5i%shlA73a4ZX$
zP1`iNR`nW(X8S<WJ{pR9gTq$O=FrXG<DKm%kLqX8^p=v;wsLZ<=`eAzzq(Cb)UTVn
z=x`d%4*lD4Di}FOag<h~T`RVZJLJ(vykYPVj2Nj?3vcEwmY#NT>EJ^Y(ffX624l{_
ze0FBOk5+rF&7RJ|xXuFHzKdIrWi{w+ufmFO`NO;J7|*d%>`Erw5!)$v!TP&lcibtE
z2)*0aX~W#0H9#!X>7Oy-0vVf)9-jJ-2g45hSCM!)W{M64oMRc4tA`OC4$k^x!4+HL
z&1Yr$#HFbn>qpalvLSxFnNWY~zl%}vD50U07tpI})l~Abjz404<th15cZ6%7!EZdX
z2_l4|$g!PCY&VEq^Qm7baRkka8HO$S<xM5%DgyH3jG2JTZOQ5`#e*(z*M#4vFk`sF
zEBK7OZ19!39n9ckF<-B;5Au|jbjYX9tK+voixCRaG0d!2nO!Xv^%e9|Brv!kXw;(P
zWwUl3=@DkFGW(f+>S4hXC<LF!-A=DfkC|ZVi4P7F4-3CD==%r@`C~%<j8`fBA#whw
zbJRNPF=_rq2*&Xj*^+qt;A(gLJ7E@{M5pMM=ZY1YYhgU;_TP;52lXQ*1DLoxJ_1ku
z{n51L9NB6qVk(|k0DF?$?lKC(g=;wzEm%6m>|FcC?~k$6W$pvf#<4d~TBiYRY(7TW
zHAw|&LaZWg65p=U-pH=&4ky^UBJo%ALfhfQP61rVVWXZA;n9vL^e|(!*>^>@I+Xzc
zikFQkTcT?y!4%<$b!d>EhaG6lkTI?}ImdnGg`Pw8Qkr4~vSaJ~;2d)IO7ZP#@n2_<
z#c}7{hQ}Kk=ncAu8+ujZ09Q)kq*2hza)d{{7ShE)hXs{kuY;y>OArsjBlw{g=6LK|
zGLtA(RhT%@6uKd*;3)WJ%l at _Qtl=&Bc4ydm-Cb(@YYFZ`|3hGwUo9=Ie!cu^c at bWb
zi>%MDlhfo}s%@W~zP$bm|HKE$)b)-LHV82vLiJ&1sj>9(U)O$Fe$~K55pZ{W^=jkQ
zEB*5ty;s;Snt;dmhEcLM2F4+PyI&X|OK!*&-*VqHM4ZscHMTAPcMXyx@{6aX$!34>
zZisaSc$ufgW0O5C9(4Py;kk8My4!dWN#A)YYD<Cg>wkBK1KcXqE5EKfs^|z~a0&(O
z?t*?VSgH{Nr-TuixPXI)JI@~M{!A?3KN;#2jAr%!xxM at R@y-)uuf1psKR(;r`Tp7V
zqX{ht!JV9r&vEG%2&+U=9BY_)OwphF2cy%!W|)X_wn>F-+Ki$-LUd^;?dLejrqrrN
zBbih=n{cZfA+n~ja%%zo_hE;EdlPb~FpN(I1Z$%B!vdT~B;^Ooz?q-CHOP;#xaW#$
z8I_I;hG{nPQY at LZ#1+c>NAt<AyEeX}dS2D9_UZ+hj>L0KKeoU)fA1MItQ$rdX#|XZ
zR|Ek7?C}|7TwciSNes_^#<i;-D4F=?KB@$tPEFk*g;Z2ayMFR#KCQ4h7IuWLYO<Hn
z#`{Y(2fGp+5gLA`3p*8XzGOrZb$Tx1jLj6XlREWZGOkcw)T64=Uj~sWdaIa*LN{Ro
zTmgQE1r+{r^Wu*Tm#C#;pV3shE|M{SigQ^F=%vj<Eie686nrUe5`JZuX=$D_WJV+I
z2==MdNFoV0DSWL_0;~l8rQ93K?H}8~<t^s_wPX}F&+=}UoD;D>xnrU?He8uM1PL{D
zhoD`@JPv5aXwW{EnYSCT!}kyA9Dw}7u6zgK%wK$W?~4zJ0iPrO|9$U@^8a4Hexn@!
z|2hBf2h8g1Rj(%g{~u5GX1o7eNs96RH*baezpvxZ%^Np1H~#X^qSrb3wpfI3iN9Aw
z{>F-l4Y|}-!=-23#n;olV*5QbKkmBkGwNfC7uyeZi$iE=Mn#m_w<#r?Khf4YluN;#
zao2C5Fncj3dml#MN8O<?UNv~#H at 6+j5*xL;Catb%tCk_wZBGIMRyX2-MoW#TQUXdN
zk!BXL^l+XDX4ldI$Vx<(R$SN>^Yyd<j^HA$p<S;QjO44+-r4JJzsZ=T6prY{%LXdb
zm%#$({VvXdR)oeslgSapMEMD%FvQXLmL0YmG8jk+*$rjilW_Yy6YI%nrNbG|t3hb4
zPhB7lyL13-R-HbQaj;A&G?^ZM+^4C!(-?nAKZPgq#w7&URUI17zz@$G%jt+J8>VYm
z+OU~8`7mia2{oRf<yn&|6RZqUmoZ^l!Un0TM{G}cE-UhsTZH_AZ6l`Q^JPM3hn-Hl
z({}E3vjsF+e$?C{jV5}K)f=4{=cWc_tXxS&3N|GwkC9ZFxC$%x4ts-9XUQ~fWDew@
zo15LyHhmh!StMZ&ox|e+lt7))%02j?Jnf7|t=GOjsl#NRgh%l?+x{|$JZYFQ?|E-B
z`=n)XhD%Ef{cO>~XMIF$zR7CZz*9-Aba$1CVcBidB at ai8Vm>EFC(K2jjOwzmbm18!
z8Y}XORPSBHd)<5_2nJ1z(JClq389U>)7JQSDTvjjy%CJ+^rY1U3varNA)chrR39#*
zbz9zrrpLSdYG|!nGtSu-hb!*=@?pr|?{FRXY?mDQaeT7zxwDPq50rIzwgHJ}Ug-jB
zdbfVgx(p{gxTjwUGvs1T&E;~f5fmfhQQw5eJ^qFPSDjExOjEKhbJ at Es&+Th&yK}!+
z?!gLTvi(dP4jZC~h&X_J|4C<a7AR>|0pE4byyg3%RWN{{439#&>tqM+{O?f(*_x3s
zI6V6L>)7an(LZgy at 1DT;Ek!i_aj(;V4R6-&sJO9FNQ!^h(Gl%{L)mqS at P>W5GwdE>
z`JfXoX=^Xf)DmuHXblLtR;*tuu768aR{|dVQ)w>=(7{py8;TBw(=MBiLUtF<OkuWL
z?e<TQiR6_v$&TZyKv_USFfn7uJM#y-5*Y5xW`yvkO74(Ox`#=J9#?hme)EW8V>(rH
z#k8_oK*-8H at hn~fW*58H=q)=(7UqCqHtH2o04f18?oES<chwo&P#d8;2kr=7?Emh(
zX!SdzB|UnPhIK-|E;fWB at +a<ccecfkfA4%y`OpLFyomV_llnN#-CQi4wB8rDaVhcb
z0v(SEIL8;HA0Zia3TMs8 at kW8WW0g3Ss2HynmIs?@GQBNM)hFHY(t3shoz}TxR at th^
z&d$I!ZyIMd5YLp-g-0If<5&Ebkfoe-f5~8HJ9_3LIIORk+hNySZ_ppvKdLnzvk4zi
z!XNPmo6LC79?)TbbUZlgwTsc<q;m|;b}Y$=gw?bTnQ0JMhO9p9e3_7=Z_Iqb{crnY
zIudM5wF9 at T|8qB-FfCU**g^Qj(`{*y0VpB8n95m$=$?V;CyfVfHy;aGv6-BT4{!*u
z!=zLfG?yUs+f5viVs2<P$1ZK{6HSskyE^p`S8^8pzn-EbF>3RWTDVoa_-e+{PP_ko
z<D2~c_Z#c$H$Lb8oe{ksRP3Vq|I^N4x7F+Z8}4*_ddPlk_NkGGD1ol*OujWZJs);o
zACIZ#zh3MP;PzGg*WkE6g2VZp;o#t)HNJiy!C1r5>S%BV#Vz>V>&|MwGrq at j#_ at Q3
zy1BOY?%li9!SDc)j$rr0*6{3vCDy*{-97CLPJ5kIYsq?r^AB=$A>vAQ1_b1K#R~%1
zdJG?A<Pf|;#emQ%P8sUDRoLB8MeA*=+hcGLI3j`IX>dW7zyhobrnRQL>kD2h4$j8K
z00oEdx`-^3c3=GP!ZnHR1`Ii4YfI8|3q6i{gLj?b@~T0-k8bw<`$_SFS>T3<&eGUm
zgy>Nb^|sqPN0b<WK?iO?BUkyp1AcL*4WCq*oQkzeo6EO1z0GCgn_^>Q^VYYU>)-yf
zI6OZXKw3FT?JjC?fkW#N&`IfDw_J`MF=@S1Y{n+uBZSRH!U-Lbw+qsmtsaU%#f8E9
zfM|t~MSPP$(V;}?$(EO$G1K5_2G03<)u0qO-1G+w9bZc$i1+q)o88d^fobv3ogwW!
z8v~4&e+^bwP?699ce%KU<pn<(UX3U=s!1q2=!|h5nt(8%^`jun12Pp|gs2u>_Hqik
zWKeUVt7vy$cYXMON>%deYLTSfPeIKif>?(d1#%iCX%q8O5+d@!CS(cvX{=s=Qu1n1
zg^1b;aHgQ{M^>prodP`#b=pLNI%j{XUxo1I2jiUybyD(bQCA7g6wE#00O~NOFi*pr
zHj!Y?vJ_50+~^bm0`-hbUSBb`JP1=zv`0|uP^5rPLy<NyABy_etluNy=VAAx)tkh>
z-hTuJRsqZuto_h=Karss)YCBMn at N!O-MtTzT0d95EDQuWedYS<#>VQ673gr`_;I|3
zGalq?$ee2~F0^^b%r$4Ha~}WxH2M6uf$Lv#|1Y@`zF5DkK~8Gt3?W~`qWIGg3B4zk
zoA!QE-B0-4MbCfGvqh(=5sx%&Irs^U(CB)0S_I;<%ok25NscIW<b at N;?c3kj3FX_B
z>$i)I+ncvGHm`qE>lIdiZ at 25j(Jo?3;)DjKE`y`NuB8YX;qV2cHw6Fm(BK*xZRujz
zl7t1htx6s`<(acVMF|vCk1p!c=xLnC!Bytr30 at T^17zROU`41^A8kL`-rugxmg7~n
zQQPzbXdhVkNL3b=s4U at NcF<<Gf5cGhN at Xe|5Pte$dw08NA4q;02IV0*5Vjhgj9{C4
z&~95uB+(=O%6MPf*n?+}luWd>35|uUMAO={anR9a0(7t at Vw=V(8$yE4oC7x4I~Ip0
zZ<|9o%c?z1CIbn8nulj}h6xiCDTxuECNWm!w-y9frhv94G at -?TlNF3VNgo)@)f0iB
z`HxQnhEaGtA*aS4gbKiAJ_QPJ%x*dlIBAWbkVBfN%isdmn9$#Z2~!)fTdEWJinaKO
zk$?yJ<FD=6XBIj*i9EZUsdcSg;@r9>Ke5T>#tkRzDdNLEwac;e;8=d8&>#d;-ZL0x
zR%REUtmHtzE>(JP4PH=!2%Eg3>;fA-D}LVWKaRi`rt4$LWT)+;^78ulJX__l!@*$K
zW*oTRJxF}+bE)f!jeYQ%`dE|H?nru%;ioWD4i>n0eV#0JCy7tnk}dO7n5WsLpx<A<
zy%M(PdC14-X0zko33$J!1bQXdC)1uTBD%l at RigYRQ}*G~;m4owE7U1n;q26i+zhHZ
zX${|e3S7*=GK);Wy!4Zf)Im at 8@p1ZpLiP3W(fWx<uK=TYijcrd7hSIeqrc<Ec$H%Q
zmEcOZu^L9{MBz_?Q94+zNG$*O$b}5`Dd2T>QEpx_`btpxJFe~7F*Uc)dnKsy66%L#
znfZhb;Qz-#3nuz{|Bnm0eR#}H_WxMFe*5<AQvRRYw?6y-djwwL9~bohNS*zSK<E(y
zKae59J5SHX)&A%iEy2g*o9j2!$75rCW&KvM{_W<?+nYDmYrW8S#h4DKbEN8h3kM|{
zP!Mx49GoDd0gUpaF<kQxJEvoY=#4u}VguI{cvuGyc})*sj^`{u$U|FjKS$$(cjBgQ
z?%;4BKZaL}JhF@&r)LMf?x8+88y~~Vym*RBUf}Du)rCts0tw~U{X_m*g^h-O at 0km_
z`3)H0O~5c(`tza(-1(#<OcC*KfWiFY2YrM9EH-zy|NF=7z5U{#bJzmnd07l at a)FUs
zq7Du^xIGPSBSXgZAyz at QJ+#EjWmuY#Jh%a8G^V$XYl5Eb0TW4U7y;b+ at j)AkJ6!pN
zkKBHQGo?gp$|Xum`X^$2kpV=1EPH6L75>Th+xyY47ti<NpIgtL|7~ZRp`FqT_rum9
zl26DjO}HG6e>h_q!Jt{}OORgEqDJu=(Tf3<aaoo(bB#mdOSbn5YBT{=_(7ojFXvYy
zMI$#4pYVq5x(_i;DgyD1#%D)IHZ=#p`QQYXE}bAegprIzXLQ)YOwhYM`k*@E9nGPM
zGYhIjT?Dd7L`PDVL$@H%bT|@N45W;BQ81=?$<Kn0DM{esI<G`bG+LHRLloow1Hvjg
zk6z}}!B$<*QL!M^Ozu{x#YV+&>U7k}>q%WF1!wKtQ%uE>!@Eh{hEjEXD#ocTyi`$a
zmi>Ql;JoH8wh>L)|8L*g$m0JtzPWw<o6r0I#jrhJtqbn|nxqM_ZbwJh?|lr~455D;
z#eX3_`{cZMIOIlj=U4f4zuz6cZS}iV;eJ{I&dB{XchNPizb5tVM^k>R9*<9Y*kidR
zOXPxpLpg!FT3 at niWw6@C4>}Ip-=DT{0~{mFaRnPP%^@IB+F={x!KrMY2#*^NP9#+s
zLKO=psS46X;@le64n&>5e9O#+>))(wY^<zr;LpvQf7!fwqspDN*gr-zn?o!)zj)Yo
z-gf%qGYsjR`+>WP^8|ZiaRUFv(P~lb;KsO-jh2{jJ3C-Lwmeoc2F*0&yBHNGaD^`3
z;PwItPKb!)ZmWTeXparG2SAXQ>Hv;7L(;DIvhn=k_y6vmHhy8b`|g#4-eo(~xIg!{
z+wU^5m&J&<r-K8 at _SM5cd-e(r+K7>ZP=d{U+<6Up1O0S(VSRygju3fTy~8uy>xtd;
zZL4=Cp_M)>jjJLgkj%Cq4De<W8Ol5qs(uQ5BEt)S_)Ruj1p}FR8I6flR=6z6L=$d*
z{E6K7$e_meF{?KLQl2YwH{Va!(t6ZP$hH8q(q-2nmRnkm&jyf1 at AYw-EmC%4LvBNd
z+|)z~Lu3GFws|7?-{FytkNYb>5IlAm;fWcMd<uHCUfK?3g3jHmm_yQG+#W8rIW}2S
z+mjYs{qsVje~;i*ji^<u7;EI|`GfWe+Iz>lHz?wQ))lsPp?6b)*bmMVfd?>hIUXQG
z0iawho}Qz{_r*Jig#hPJVn<nk at JUy^Wf6VgS>6tPmCJMPaSeKpK5J{)Ph`bw;T}-H
zSA36&I4-`&C_1ClE^b``A#~xB*5=Ent>Izuh=-A0Cw1J2sK9j;a%oh}IMz&4mIo#i
zM3F9-s+${iLUjU-V^iV>lj!t$cxuP9*&X8&X3oOtU^MD7 at _9VS$BZ00x|||1l6x%C
z2MFg~YuIN8Cz=9Kk7l5j;^yj&)%6^qxNDPz5w|G$J6cER5z`L_JRCxR*SUo751w_7
zgB=cQEN-JQ8qNX4l{@233x~d=;#V>?X at u2C6K+X(p5I_>I9p9YtDTt0Cz~_o%54P6
z&B<y47tsGtTrE=|<%=-pfiNBhUx6ScP at L&y+Sp9a#yB>oGxYrNV}%N>JRa~kQC$BQ
zb0Yl<nQ*TE>pK6rp(i=vePOF28{(dX59<Cn>Ku_nfj8h(0p>cy)y;>zmx$|SaDrg`
zu!HPl0b?Eyx?`wo-(UgJZ+d_Lcx{VF93k-&u*<zwI?~mPmCKjN!+SQwF&GIUyN8`s
zJ-?-F(5DPRBQhz~%P`J*?SeVejZwJ<wssC=cm}v}QUVOzsSQ9eI&tKRU~W-Ws0Pfu
z9B9zjJ+#%s(Tp;KuoR5!6sd#pUZ<Pt1~$a5szLW0L}nVw2(mZb#=#(hwBR<r>Q<8d
zG%508Fv8v>qs9$TbiU>x5e#s2d^T<m-t|2INgHm<$hKWgpQ!DPn2P)#D=5jS-At<U
zwkdJ+cD*zmi^^cBfE5kZ?X at q4$P{Y(EVnPWrjk~k0vg$n<K5MdC)?DLoz_Oz2!oP4
zrll9BUzjj5$;S?oQMrJKXR5KuBrGGkIQgo8Ie~&b_aaZ3n{-LHoY!jnddj&x(#13#
z_0C4e8QFzrwUi-b9+3uG;toh@>}&+0!xmUQii}FEE2E1zH8$B=`gYpf3QY0jUh0v2
zz60C`mY(JOe~9D7hiCvMpZ{;(+}K#p_5T~UZhk)hf8f;4RQ-bI|1F+49qYH~PYMH6
zH_N6tIz(E*aoFaPLvc({I2PZ$zHU*Tw^!C-47dUH|K?3t0Lr=lRg at bQuaW4#Uo7%a
zNG*a27s#`MvoAIIy>9y&nb%@lFUBP!rBEwx$oQiA;GeSBi;##7p0cK>#t%d=ZH$nw
zuh$wjxVO6Y*aSt=*DZ>gBATisClvvL-hzjwae{dZG0SE1zQZU($!7$iEGT0oGE*Rg
zD9XkqnKt=a_h_#(evSkWUa>1>k!Klu5G6YXRDQ)jq7ptYD)RGl*fTU5Rnc~Npmi<F
z5&toh>F at 15nbu}j_*!uU^x`<wV0wGRj~m?bw0fvn3)A7j_$UbBn$9ZBWzBs!K%oUk
z8w%oF{YO<ec^QzBt_njM4^^L0riZLTfGI_ at Yv9hBqdX$%zT{K1WX+=L!cC>)(HZPz
zqU!M~93jEc-?^Y{>mGIBK!{KIjat=;;-vc?%LoS}u1@>tJDxRoHWv^|#oby(75Ar{
zX{t-hO4HWakNo74L{czh#}Xz0TOi3okC1My5-MrY4kRhK5zj!OOek?{@y~1nmLdnG
zDueJqfPj9*lSL%Ae3 at X(T406HP-2a7=OybTk!RgIfB`wwC!3Oiro7P at ltRYA(e{Ll
zV;CHfpwAC++&)l2e??cT&DtiohnWdEZ8##c(h3F$of}yqKAX at Mb|6l=DFE-|e1P?t
z>J60H8??rnX_iO#VPPa{jak+(wpQO5PyZ-Lr5_W@;*3JAAZ|lafHd>)6o3?J(NuUl
z8ul2;S&WRrZfuU<PXfngnB=9DhhYcQ5=AgYw|WB5gi&E<=tH-OvvPeyzDy%($m2L}
zz(H_Ln7-JE<tPjy`%(wT1p-9sUL~7hA-U<yj4oqANfxf%sRmFH@!A)17Eq-gBD%&S
zqD=_uViW}54+Fpt*2;H)bo0`B=s?SUP#4wQ at 7eSH?M<qUdn*U$E4UCECWt<g8G&YT
z8W&9hcTF5K3KZSh+J;g9wn?l+Xi2DK9*%J53N-7`))2u)@2u16;UJDOcIh*ejzNik
zP34T%5zp$fR;iL|u{v9mvTRE41_HIKB479KYk1r`L4rd$kEfFp^=~`98H4dcw;8|L
zI+1M)gMWCw>xRBWddiCCZ8%&`Z^D&K_Z(1o>+PUR)gh3=T)y13`8VOmTT!7yb|N07
zb6|ytxj${QlJ`_f%1$Q65NQ&0KPq}%SaXnw35glI{cFYQ>gspWsMEX9HZI&OJDTFT
zF{bhh^)SfI8RmG9J_ZqyL1b;f8b2P;H(;3Us+Q%Fx^<?twAuo2X}{zc?SntX4~A%*
zu)_+g(kc!?BF090Cgw*r-AOxV2@>OcY+2eBl_Iwp<+UU(8G_q#jsN?dLpc$c6Q&*o
z^KI97i`#Z(6krd=^Ra)r{&gdc6-o300G%m)#~K0f9D)k!Be~J6rc$yY)F730lWe`B
zol*#3Ns;$iv)D4xvJ^459!mddyIdiqW<hc0y28p;!a#6tK at TQxm}7?7lrSu;Y-ovP
zDL`y%VF`#dr2DgZ>=+6oG89R`+8V)H0-J_i@*SzW;VcCGx$$#sM}AlwotJ(Bzt<tU
zv1hrXwJ}U$Z9_J}Gqgg2s%^#z#51%bl1gnu?EyT#I at zt%m7{{_Q`?G(MYA+Rj#%4H
z#pT)&EJhD0xw@%?U=kB;Bu>IS2ot8Qr-VX5Sx(RkdDv6Y+78uT4#LD|{d>VUA}U91
zj#IkclLbH;Qi4%OrbbG8`pQjo`tJX;_vZag9$DJ({GCrB{HP;2!7Gr30Kvf~@ig0D
zlb&uvE3zenf-Siv8A6i&XwUEcNbgs8uIntd+>0a|lIfX=ehHTDyOvX at PMxhzonqBM
zo2Iztq`(ph>iCl%qjueMuI$hVVn%<i+b-0hsrvQJl~5F$wJj&{YZj2MnrJ%Vj*go4
zA}>MEAr%}GDZojgX<MO^<3BJ(w+^x%gP4V47rvX?5!i^d9^TTmYmjo&+WJac<t!QT
zwmJFB430y&V!Mi*q;xZMlF at i!bUt}$m)0HXyLO<elZ+u*bOE*C)ZBE(suHfA5WY24
zk_GnMWDnZ3WSk!O3f;1Q#5~oIuv3~@&>?v**H@~&9x`z at x4w@~&XLh-84{kt*CGk=
z8_QU$j3w at s6U^$|286JXKw21tp%+cY%_c;ZLh5H6eH<Y5C*odkbq2N=RZDZNzycH-
zh+wgX6QzXB+_eGXP7KW)E+utL*zyM`-el?OyT;wFN7^PE>WwxXh4fjJbB9wKE9ev2
z6ZY*9Ov>I|UjT<g^zQIwA4(z>DcwAkA|To`Y!G!|dY&+sXzT9t)#t09+~viLtN2IT
zu{aJJo;*voiCk|E^J&K&p=kk8$~)z9qp)!ft0TJS8~To$nVfRYG46v$1kCW|Ii86@
zf{i=u|B2 at n<^qU>7P2@<<uX6K!_K1`%`y?9IAd7=b8xv#`?x}*2M@|ir12ioYse{`
zVxHS{_S_o{j|VSv?KXz1Sj&>Stq=wj3-J!iPLG$UO82gU#{wXT9o{ZjTOj0F at A$xR
zoUo=bmMFaBI5gz?o)B?SE$^QI2hz0fcjRq%G(0qWXcrdci1Gc at tR&LR!OnyO*t*pf
z<BI at NN~XBuaT6qq0zp7SM)XWCe~dl~6n>1`vrYt&?YvD;s<jSP^Cd5Qq>AASfb1_Q
z%pU99sziAvoa6k#DVbae+uBy|`vXn{xvzb2*J`UjTp3J8D_?wZ<I9ze!o96tuF=|}
zF1s~+2bMMNKV^zOn9OqLs%qX*{$cSx7<IW>53D(DNbFCLF2(`vy57|!!Re$t?}>Uw
zw3rp)^qCEx;6 at a95y3;#e?>r}EK1t-g)yUDFQV=GuVTB21oDftGNO{}ldh>iY5}-R
z4@>~c$)*fe)+orRnO8`_3L1%_(CI3#!0YUP2{R=aEp<^-GwG`+gem1M?mZ>@tgjpn
z3}teLNcrjU?3LqIS28*`-WKoa&4s#>!IhzfCjq-d8M5GLqD9|s-8vjM*6!#X#RrGu
z7l;!y8HMGtt%)Xe#YlY at Jkk?NwC&6Z#ly#NK7A#7W5Tr{ED#n;FD#?ml-q#=;^VOv
z4 at O7gpvA>(yuHnwXKjh4*xT8E_5`H&HKgb28Y~>{W-%q0fFT!VOIvJ at AH4aRYx*|0
z$Z8|9(YWd=nbbjiud?99!Db<C5?cNk0*MXRwCpRbm|TH1snONL<ZHjGrVJESv(aRe
zm`)XhxUh8P`?AdmpFJHHug;;wL09RXyzRc5K!~4UW>jZCAH%CjDQ+SkBTN>!FQ!&5
zxFw##R;mfR1dDmue9e|bYeart&6mzcGR1IqPSZUMRh}kLGS2}#JQs2rUbI|Qk$Q)a
zcbQma&)eVZcBbQZnjyC!)%l(`z5L^RG<DJIs)yIbIjX0B#cdvspYBxDX6sP*I}A6i
zdChC<pju4MPduX8^<m{e5D`dU6RvrsN-QI^;X$2~F}Z4NPJ${lpq;YBhq<xOSk8NF
zR1(G5)|2MQq@?$uMl^*r*4q2- at n0JITi-m`*{e+|Y?(p6N`y6)hpVCC1cx at qq&EW~
zW$#Vm(gq&k3JCTZk+D1IDU$P2r4v|r9|*A~A2I3Z3VH-1r9kMp2v&e$h1b|_G7s{`
z`a`JQn6|@rwnzGmTLp|O<_&>3%tggot*3{hQ4fK$ZFA<H%1_){^m5rkfe~!l*dCp~
z9CQ(2$$7`kqpH|Rdl)Xw4MsF`X^YcbT at BnAMNG4(^<u^`48Et~1+)sZXR4w?O-|)<
za4uI+L6tO=3lGl^@!TGk=y!tKo}}3#kv8p3K??;<VnuXMI(&`0Ht{dWa6Q*H<#9?J
z)_6W+P55nw2d$ULUyUYkX7t+U*Ehb{yv_&+++%bdC`|t7WP2S{xoDkJ at 8|j#H$ML?
zYwpyWE5CZJwLoWtC98#0&IF?B6)Wj0zBTbo>yF1SfHiK;GV<gc)82sQ+&sp$OC$Ic
zehJH$%gpA}(0L~~LRd`&Gkd2?1top&!Bs>~jqJ~g?}WdWv4!bPN)ynT=);ijN!M)C
zW-M<EG0I-Qx;;#p4Mj1<mQ*(`tWs95Fr$U-<RrEnOlxd7!xUi5IYL;^Pkg(ZE&@5U
zf=$oP<Gp;1_;p?#R_=SagV(4&t>QL)^$C{{o0_jOfW^G(#kB`T^$c9`Wl_Rdz~hl#
zLS69|R=?iNP-sy+7N<O(P<SB}pqJ|8kX4$pJwJz2VhD;`z4{k4Xg|TSh{23gm}eGY
z<3~r(N2CBZKf~-4SO at xKa4u%fxrLv;>7C#bG47l(lQ-p0a(E`($mUb%ZKR9EsI}yE
z<04{v>Z^<0q;*;5%3UXg)&z$YBu2WGtS~OISVT`)bb4^Ohvh1(@NSWGS}c=x#sv{6
zC at vB{cM{rtbpJ8VD?i$Ky7hqDx1Tf~^JMtT{;<yge3BWR1FYhoW*3M91vs&l$jfB6
zm&f~rz;ZB%kA%uvclTd`Z{bEjAZGgR;NYfQu5<Ini%;yN2_0t5ZfTh8tJKzBf6QRQ
zttY!_L(kjyzTJKP>%9lN&zEPk#ul4#5;5dB;e6+xlHTAi_&0CB{IO{PevkIN{3-?(
zd-1%jGBB~3N|5sE1yC}!DKwfCPf5yXKdElKRtN_X5Xp&i#)aIu%`-b!`S?_>ZUi at E
zz({BBy9c}9boQRzzrXvRu=wC^HY#K9341YyqU_du59WOM%kHDh`Cw}mS^A+m!QBrM
z at 6bN7=lIrI?O{7iDKH+9(zb8kZhiM;<=KDEYBFtUk~fq{v;rJirIGipwu_<jZsb-1
zJr)qqYEFB}fq)28*<v5lZ$Clks=3nn5bi!?Nr0kcui&6(TnUm9^m{9|6|VtXZsa8?
z9o+e@%~MU5Z>2W%eN+By9GHIqE0F+fhTn*dctQJEl}8WsD}*E at 9SDn`Uo4I-6S!o6
zVpY)-S&&fjj=~-93a{YP5fBQG8O_rHd5+~kN>;?>mQ=%f)V~l at f_Z`I5=DS4scJ-E
zts?r7(@8HnP>TWu!6uJO(-VZ8Y`nJ%m`PW#>`AT{cHYa&+PO|)S5s<l6l%lKBc?=e
z1l`E)LdB`)A;M&mkN3ez^NA_mVP4hSW}!FGocNv78OH3F<;s;X(Ng7L9haftD)Hju
zjob_25F5B!b>l_eeB`w(9(8SkcChh6)NQQ4O;NXH32vry;C+zSnX5!<uD_7<6L2w6
z2Oyv at 7$slHW~IbqJ3cn63C35yhzn)0<5Tm&jwFsjZx)cs!j-bcTOlEE$ALi}^rB-?
z(19c*i)ea0(kpFI$h=SFL}P?|U;`3PG;E!awULA>K|}jgVi_`Ts|DUF?leuVDnDc}
zSb6iC;L#Zg^A^>y1+{AX<n$9RBUpjw&+qGY*q{6Fw#TD09)Ej0?)9;c1dPf6+K7Ev
zF&(;f755uqTYorR8T5FR%Q2At&AY^I>IJ)---FUmLL?*`rj`NW(N0c;QVJNqTcQ*r
zyP6T?WbREAs0jEmaw(%BZy^7bEwJ^%0xK{Ao3G1o0$;!jEez_Gx`YcDQLa0AH8{q4
zWRb#q8%(7P5r=gp+ZJ86+*mSr$?a^402_xHPrfJan>W~3<vCm&YSvXi{|$hH*nmZC
z%D at Rl2*r%VNrt+JTEn>#-><b8?_R%u<~6zNJDtMk*|_)p&I(dae71rURbR>`@dl1#
z!7JQH`U<+Uc<dMYo1D4s58;#wyYH0j$*tR1Z7Z^MKA66vGi&YP<0s$9KP&5-?BjFK
zztOmxR6TmrUp*a6ae|C>j$RH{5Qn*jr*wF&;`i75ayx_51|7|HS8V>$J$e1qkyFqB
zg1pFWT0Ew;gWN~@yeR4o<+3~!`@qUu^h31Y_0rk|_;r{A2o9f0RN(B&?ubsQHe?fv
zhN`rHd at LU;93WwDmehQ9cJi(>9Z6Cx*u6NB>@kPt-gUD$Pz+L=!UGJu2^>UMG}+9j
zpCaA2(NrjL2Y#ycjLq~02yF-l|0 at Z~*`;!WRCbbZ>8Jt&i-I#{V#e<TH;mAMj4H{+
zApLUeC~`Er(>xR<Yr9h1rEQV>IldjF$Op|hB54rzs_6j7js(V`mqyea_TO^;@~&7i
zb`*N>vR42Xi&TgJ2j7ZP!1*K8C@^9+9ApJ1$ns<5Jx9i_-}K)y!K|#LhK;*)z!ofn
z$0{dJLdBjSAmw|W83L=IIY?K}$B2hPn2JgMBrlsScB$xxS1giHf?fRJjy($r-Liv!
zG^jaApsInmo_G at Q<q(_=;jd?8xLx=~^!`Ly)3Sd_jw^k%HE4z+{%ft)3wBWS0A^N&
zKaO_?=6t8pmj+y5c@;R3^A^Prrwk4rhWU`Ml#WX&YXK*Uh=BfXi4H>*ZNN|`oXljL
zpS=meoQeR6!UyUY)x~{9YFkMU`ji7KaI*4r`#i_mZryMVh42y%Fevnj0Y+otVM_D{
zblG7cyd<RhV?D5ifQG6zqRS=v4njP&`>wSi^<8tK6gk{}W~A5GaL`?}n`8wyCH*<p
zYa|&Raa at ksupB6<Ce9NhA8TkKut-dX#fSkuOxJpj=IFe at R-q^f*mKg1FT%7%&e1 at y
zn6=@X!FV*3kg+#*41pru*7c;1NWE9Gf!plt?L7T{=P7X5*?IK6>KxJsEXw}y4O|~Q
z%-h9v-LLwzGUXYm7t|;k5b~t-xlzhzK|Anf3lGsl_9SgD)OF at x?ZB^qq^uDjz|*cj
zW!%3W!?5wkP)A?mia=~@L;j7q*!rhu(|6*JmBV#~<z+Clu=L?;L+C^gHW*G1LYdqk
zwyAX-CB>BLlEq-{0dGmEs-+~emy{{CRD#;UPKdEorr1bvW?I=~xH}#4H+wFTzk({{
zp at K}P0)KV|gCq0swcz)Qt3m?^8KS^A*djGj2;LJr_2$jN<h$wg%=x`bjI;#Mppl3Y
zj#`i){i$|QP;{q*Qx9V(si#_jc-CzhP?|l0Fj2r|Q5abSX`qn{jJLpPnWWbOJ!Y|!
z2-GJ6oV{C<vA(?r;{@|mps}lX?X&gu=(?DJ3$2$H2<U|B6sH3n`dpX>Kve*-Fazc$
zqz6MnnxXy5kE79RMlZ`k6nhAZ&}S6ON*5 at qOVm8&sadbT-8?s|qDndL4BNjSZ8%XS
z=eVJ&3r!&*(px7e!ITh_S8yg54o0Jn+y3R!aE?ivU|gyx;#c?@=@zUXR_BP3%?u*z
zBEW{Ti+s*7T!)O_PVF>mrEIlH!xblB*#*3t^j$gJQW?r1Y?sD&`}<Fjju=9RN)Mk{
z-U at B?lB)z1c~8TO!xG>i&y%Cx&;m4gCXPNlG0<r-2n$ONktd}sbT`#60`_h<Hg9|h
zi#!BT5G9lum?1kJLF20d?kQWIlDE*2ODB{-YdfKebM=vlxr5;$9fc>#RVI)N9r(_a
zb`9rOb28xkff<%g#g%B at IZVcrIgTqKxIiGSj9Oa^FdZq^I|Xs at 1lr7B1fpWpocAw>
zV~Xg~RFMY!FQHo?4%l@{m0%#QI4KtkA-k!ky!4_dA=Z}f!})|~1e4kNEYW-e8Z#o{
z?`nIQg^YcFDx at Jj>6}Qd6tZV<9wYx79l at TRl*=m6v|<J7Ad<(u=_0WTQw-YXAsgfD
z!YjsLDmW at 6S3#Rwd{7(rb{{{2P`I(Wxw=ku{3Q;Or<w(;*9#$~X{erWqV!=6eo`S*
zkjOKn5Zdx#CANGe4nH_p*bZ%n-Wf;xRpUEwJnsHmIPDC;Q)p%G%+Uer)9FF}O(w<R
zUOv*y>k`3}NQO2ZwJ1JtM(Tyq7X4A^17RS#Z|d*=cz~3D9lwQe^$1CKC-jso48gqo
zU!ULD{5ReM!9?I2H?IBL`sU{5=b!zN|7&3czemAK=Kp#%I<d1h<eeFTG=xB0T{d3c
zXzuoIHnMV&kl=^@a>FkHL1yeP8=D(9H?K<yu%mZKh1i*%HkxR0EreCj{eWb;IDNp~
zO7C&)qxv&G>^pV|gU%x~G>0tg1ss}^*4Qqia;aFxL>tZWK%s&`IG3Kcn^11XCxhW@
zNC<8Nj*++(zsPpcVnre*^=%yfh#gd<@01%nurDJ!IIj>(03(FsWk(hiHIlMy?yj8S
z`?_(;q~++BCLE)}o<7{#hrI0U-TQ9m;Z|DG#q!F^<n;hsI<H1=edu8NP=yJ-NC3$o
zV>gXT@@9!uzFWTjWP<Hc>=y at 5aAR}z%he4g)L8?T^`4YZAY8~f%J{-jMR<BZPL4 at a
zcxB^^;u)i)x5VuchZY1dd<}`O2ULGmoDf->W!2P6RCa)U%S`nZQ##mkv(r25NNcK9
z`yrW6Km!#32!dup5vncTwFIx2Sum%6qp9Bp3~PKgB<}oo(@M?{Y;WNN!Pef+o?71%
z%`FY(54P1s5JHOVIC>{IFKR8>)>j!h_eMy<H$G=rwDl9Z1CBJ{x5%Y#-VBp|p~5mv
z7pq|yU8K_C`QSt%kB#cwvUbwP*$<&pB^IGgU9OI<$~6&su5HdI9WDCTMOxIzQuov~
zI?&i{CU^uTfi&2*{?vP^uwuy!SMDS$GHWWD9nHL;ub%}=M*u<vdt~%Q<XRUtE84Z|
z%8 at rf6iODY>o7{+!I}w3D3c at i#huFqjq2vj6mjr8 at MGL5;I>rj{V`lOTaa3XX)=SM
zJal)QarfH^Ml<Rt<C6sPI3VcGH(^=gj-!yZkp}WKW*K7}!kbyk7+YVb5KMx!xG7M=
zSF+$Qu!flcoEz{sY>)h3avp~Uy5<=j_s{=<u%{?!QZRXD%+3|}4(Y)a0E;U|_RqE?
zDBjBaq9su}Zmuh(%RsX&b{@%!<=KHcNA7a;IRKba%xlGxDVfl0#`cVpe&_BS2e8HY
zv!dt{i_s<r&3gYutftY~Wg-(CiN}Ci5LOprz>r^F4?%SiK1P}UieYGy^eE7wq1^tM
zrUYU+8zDCSohVBjAnr9eIy at O6R)%^OuaATL;deX_=ek29zd4N-aRWdWptvLo-$^a5
z1r3o?)sc6K5Le)@%#FZLk=5uP{&y&}Z7OkzG)ZRSFl)zCo^tm8pjFXLiNw@>5Lvm+
zIf1z>(I*IK;Y2aw#={BMdcYV|zQ!;vETrN}A~2U&2CT-<2VVui*?55HqJp8Kn;X#B
zVQ5tnJYZqKrWh3xL8Ke9jnj8X`5R8x>QxTMaL8HMZ&aHv$c{U8>KomF^s;jx?-&sR
zBC6LL!-7kBDs8w#Y+h1>bJ35T1qq0T#Z(W6Yzk0p(LAUGihLHwU5;KsNcizzQUEZR
z!p>swE$%SANe~CINF-N11)iB at VWrlTAC8g|uH=Q?7^dx^I>k+Cz;!->v__~_!ygeJ
z2+HM@;F5~oQ5Tny)NlqT!ge!j6vs7eLpDkyvIyt*H6&47a>^DgUN>`6DmVaM<(sjd
z6o%6J6$oL)EHxhN{&}a-S|U$KYvA`%>#L=N3ss%n3C(0Bb$6Jv+;njRZ5N^=9%s%-
zLJwF614;N3VL_%=IYMoFLAiKNFyQh$5>TS03Z?_M1No2~WP_pP at CR4o8dskJ8VgFB
zI8(S~j(f#a$kJ;ewne}_hl>W<uSREbnT!-=rYYTxqw4 at w={hbfC-EJaSYjjiIAxfk
z3A`1aP&p+CaeAcMZ;I_~q%%=YST2Be77wVuLVhf_!B_$)EJeRENseD6eiUWf<eEHd
z$Y|igN5qT at hSFSOGP-iJ7N<njh;v+D7c4w-HAxOuZW9~=I#521rM~B|EX=9y4-}dY
zGhM?KD(h*q5?e}i1>+a_5>$dIYms8aVc+pg2)xStNV#=U(x~nYB+BV~Y_{PnyI<H^
zVD!bRoq|TEc${5HRWR=66jZRHR4H@@5v0UWAz>;kqFPOFUN>d4rC8(PU-$mwL1*{T
zzVF<XhAn}NxbYY}(GnrU$xX0=O+;J)Cdo7kZ&aOqq?b(DF%N6KU|yx}lqi{u)994?
z at enZEK;SB5oFU0r^QkBbu0o4mGfqa%#d6MJ>S;cnVh==tV<hb at kr6DykM~|6yTzB4
zHy{Jg&42_+;5^@Groo5rFx5CHy1u%3wZJn>@01&*AXfs0QTZ*l5Y&f{OaT_?N}dYl
z$fOa_P~;M8wYTD_AmWacT%xbWt;Th1G?h+jWutLRJI+VKPGnk41Q(E3oQ`w~fY^+b
z(|5`Ac)X?HAaQM*bxWyBe>)Vl+{87?wm(q;tXR&?I^BDr$_x8Z<}sObT(!;{tvh03
zbb?M<!IKiJt!%a`RvE at sQBz;aVatlQ=~)o2iG;6M2u!)V7{_0JSG1sQrV_2&WKjsH
zlaOW7GbUDbB;<v*YUyD*ib$KD0`sbs0g;oDVk6j59+xcM0B at p&A(qF(fr9clqhe_Z
zEKtdpMq5Y7nXu0yux6FAl@#6(0dmo|ki#rzM8rUGAU1PJj5%RU_(F6^EHY&1T21C|
zL7G8X&BgA7%cKP)%&PTCi_utD0{5;_j*6`jR4`LsQ_RR|xM8U*dgunV9O(MJL(%`p
zV)!IrkCpjJIhIeEo>6uSPIyB(ZibbURqCuZ%Dv!nlm?j6j8)PPfY%kmJU2ucckdY7
z2aMpb2nHoSy7VnC{VlbVoVxSolPTmQ^d!927A3HvA+l!v;z|NDe)Dk(fai=b4OTKy
ztSqkA=rD-;PZ>B$lnHBVt+oID>%rfj<MU#<-TC!T%i?rOiJ)Y at 8pJqdE;CvJGV76r
z(@8wwsUQl7T2`EsXn9)L-(cuT>e)U&1&r!Iebz5Pu_>&x2+ju;B~A`^1wAbUIOg=O
z?3=?&eU6=Lak+rn4spq&p!*y<+KD$r(|l#-5W<UfTQVM#Pq1S=CE7psE|L3M1l~N4
zX at zH6CpB(57cG*TH|YRipkjs0i!3#9?M8i}B=-zPJ9`i#b-7dxkb*=)=i3Ucb)QS3
zk~AS4CBn9Db7&(0mXT=05=X9u>oF=ENvDjQ at 8x)Oeg-Zm(Ucl$fL~0F<6bTsZNyas
zuB2rpBHw2xmWKFz+Q&`g2wtS09r25&xY`%VzsfzJD17DEY1l`^@>H)*=Mqaa6;(PO
z^pB_ad1v<aH~YvjSld=oZqE}p*A`AX-ohOblkIORigN70dXiVLtQc9Ddl)GX@>h`M
z3{`A^`)n*5a$)EoCHz;>TK}hF6?b=f#>D36_!t`|0pq3jazHk`_En%ngH>>t$jIW(
z2(a<3Qqy)HF4Gen5Yyfu=cHLhP+S(+SP=4K3_ at aQa<u&5_!kom%BSLWR6NuwLH7 at E
zITb|uF84f3ozK}D1lN1n9lse2Z#KS_AY+{~-9f-aLd4k<$<3%JQs87qc&e0&f$%(x
zy^uem)0C8>GI57Gj4 at BkSFf5XWk-De5t1VPaVIB-jeQcnK!<4yCGO-9q8)7e%F4ue
zolsj1ZWhs(Ztp7kik>RAm9R7ZtVC3 at a?=&g^7bjBi_9gdRa);}4}Vq5=VHQ;0DOw|
z`ev3BI{}SEg7%g{OJIML9XKWlW*Y8W#}hvKid*EGWI)mjkhGALpm3KwTSH4?=u<m2
zl?;Ap{0Qmi<tGmS(lY=bJC1oCAxS~ugLX7Wm8nW_bcPnH3e)|L4!J4PLDSs4DQlHY
zjxPB~<}^7NdJ$xn39>0%AvTP5HT9-U63(Bp;|k(x(q$|gIUOYTCr?T1RaB~sMrXfe
z2+(x}prsB=#R?=IK_qyk(y{{L0wR5uXtGK=Rq}!WoMKYC^QF1qSY{Ou%UqhT7))vC
z#_bOjyT}LBJB%4<N>tb)@g<4zncWj~RW29C$yt|l-Vw`uG^>iXFHJk`R1`PX at 4zS|
zj+=_|F?Fs~LHV+_fUzv+RTGL1x2H!T7g!UU${gFR7b|zff)ojdW&?^`n{+v=vpz#N
z#KHJ@?TNOjjn!-2>5jA1unJLMR2z75GQia!QAa9i9`B`@NNh_6a9KN_sT~N^zZ5Xn
zPC-x2GO(b6YGadEkK0$%(-Y_rh{NGlKRpdW2`{49wJt~t8d^9W<W-}CqC)xl4#h|q
zri39oE>f(>r6tr!${-hpOx{D2Ob at ns-6Cg68;!O{Fnl6kNmf6SWlYb<L#jr%&XISs
zcYDcqDhcmW<EPV;o07qPsXts|vaH)nC)4o~a`R&s`uQ-~g^ueXD1CEuPFWNxP;}i+
zibLYSML(qyfVar}QY<1e!A7ylVVn#EIL^%Etba7XiL+O at __D36O|tc4s1*ZHUMzzB
ztscB2`#M2(7_fbbK>){s1%|LdigX2>t1^(Lx6q`FtJ+1Zm1<A|;4lI89b;R)uDyb%
zkG<teTbu&gk96pP<y0s^KI?|Bf>O+OP1+qOr-vwj5UHa(mggsJRYT@)FL at mVER;r-
z!(MFR&aG}m9l~`*k35nj)KrB5S7EOUOhvG!gXu~C_7bVLOdxrCDAKw(*bO9-J-)pp
zQG}9}g<YwLVQSlHpN9jXQFf3^Lq{O8v~atF!%h$o>V(9M)7wi(r@@2ZSbJq$%6x(9
zs%E=@+3IoUlKMp=@En#}+Pzr&n5i=Ovq_=Rmbep6Pa?iwaDtXAaFNpCt+no*TevW%
zX1VA6UWVJOft4)OLF_7rkE|%!opilG|0<>ym0Y^mD8x=fZZ>fqfg9-Ri at Jh%5qEc(
z5K$b5dYCB5J;3Wj$nTjP5yA1yWMb_fj($Qg-(+Me(kEmzr=!UfE^yMa_ at htg4M!E+
zQ4PWPN;2^>8kCGvH&C at Pw8aRI2m4PAK=GXKJSu`~XbC<)60wSGZO6)&HH+_1a8HEo
zzqIT%)DnM?z=umBiBFii_!L%qtr%|UxNV7IJzxhyuYv;$qSAmc;Z;2bi_BclThEbZ
z_$_$T=<TX9lU0O74Yv=Ig3Dh;;a+V0mS&{V^R%~@OdpWN8Fb)y?Tj$cJ0%cxF^BTd
zq&!pvH=@a!=3U3P*0isRg&U>Zf32bc096OTS at 8Zzolub?QSWzd%D?39731?F&<XxG
z=^;67)k|oTmx8^VxEyh-EgbuQZ#gd_Rb&p0-AkxIx~BV3sr}o<)d?Ywvc#r-`8Bn>
zgH}Os<4UUhaq$wT1W7Z*>Wt;b2BI+IuS>~IUp+MoAodWy<$_a at dI{l4uEE&PAJ1Xv
zb#V~)==J&8RgQw&(0GBYVazLvZ<LM at WO_SQ57+Y{`(9Br_4?Q`#g$>naT+^o5mKF2
zODBz!*wQShPsW2cvSHy{5x)fH3qG*1imMU0J+2o>P`j7INED|_60NdIDUrLsQIFS)
z-fTQ$yrd1~5XRhVW{w#R-<^)IJq&N?II^cE&XeHc8_hR}7~}v1=Xr1E!Op$?#`f;s
z{_Z1u`C<F;2fcOa2Z7;-)gO9?KV((@^4-qUoyHG)B7r-&pzh5Nv^D>lFWjw1+l?Ox
zWnOvr5i~!BKU053(EnDiH^CnID}>#ZU2k%bfR14f2t<!+OR%gF-<{Z~&FSeGqI-zH
znt<mN0a=i9Hmsz3jrL`beWuw8_Xxce)pAVDUj`sHz)I~2r;A50R3-U{?&l!1pL2VR
z1K1-7?3ayA(RMN*IKQCOLgr~aZAje>P&Y`J%}96x%R(hXa$QR-rT6U?o8&|vjgWFm
z^uF8;7TVrKc!OOjD at G=rAF_Af#7$!dt!?a|COR#fMAduhVet`7UyU&OO&tSu#n>yp
z>Mnjffn{x+jn2-wPYH~G&1tvT|7Kd@{+j{mS^PM?L2tG34VWa)yOkOlB1G64^6gb1
z<sA2pxbMRh*|<GW#FD7hxL6m!AQj$E=v}VSnjp1)@?rM7-udYnqEVdg3dWDTz_QLM
zQkGx45POgN%TkYX4c!@@PDX>Hjhn*Id`#qKJXE}*p2W=zQj)9X0ScfVwEhH=E|M-g
zz(xi_Aazuj at bX$3z15dGvdT8tPMAWpAebQa6mxR3U~sxh&l%*kX6Xk5k_f>D&m0g5
zW+fJ7U~s2PuBS){2mYMCl}fJ`TjVEVNq_TS1Ey-{!wXe*l_pK{g8ZvkB>YJK4?~Tv
z30YkZW$hfYcA}9xopVhp1iZ%yw^c)O!p(?{0-{q)k}Aq#YyKgBQ!>Vda`e05f*ve6
zthS5*ytw~Gwf)E2k8k>>9E?-A at O*QPzCbK?Bx;)1h_)vO8{l`bp24SJu;9c#ZQ_|N
zKv{8!An*`J)n*tKKg*vors_qN>%wdBuOLdsi`hmfX1v6kO~ZEh6UE!}=NqdGIIAkq
z at dCeW{FBT>R(3KSRbg!@1i<8d!MsPD$(>x_y)y at nTFl_Kvi`-&<`<2X6+~MPf9#%u
z!GDXWxY2NCWl|uA(r*1-%u0f+IKY6LJ_vX<=Mj%!&?Uqo%f$y?5s&Au{BP7q{fYmb
z!KX?^FjNM~^-m^!{aQlIjMl;{R?jL at SCW%`$-SO3^TvyF=bIlC^<|rgr_jaVIG!-z
z<j&VcMGu{bx>r<6Q~e6l(kkkd+lQ)As#2RY)KFDYbYy8+kH<Z4{YjO}KRs_Xs7F$b
zM8nTpq at PPFj_{Kte#IuP(hQ%dHsZ*c-P)RtX%QJsB4?x6LcZ(MMaQPx(ux-);&xG1
zC2K`@WOJojgqdAk3E85fb_OtYaa7h~O&0*%29EV|>S4KjF$AJ13u+%}b{8tZj!lNj
zpg3)MMuxU{*sMPPm+jwpIs@)wt)2`H7tR4TJO9`E=j$7v74m;w+q`z;kNjWnk=ASB
zs+Y|FWk$%DVX)lWqa{JQI7cRSb8thnBLS3Tp30Jd&7dYE0^7X4PPzB_%KG({^^L~H
z#?AH3o7X at 4Tcais*dES^!SV~KBprx}?Jo|-athHs=xUKTT)so^!GARJ^gEpCa9HpF
z8vPLn%Jib1iKh!q<{#(G{y{qct}StCprE_h*_PJVCZ&~_J!0?%t`0maBv^LvJ4Y~g
za3{#s#>dUD_h?Nsiz{C at ySS_h9Ow{#sDp%cZ&t6|T$44p+zOYLg!E_II)U(naNCp{
z_qEd)pg)IFdsGHqT}d5pK=PpBM!Y^!#lh=xyK#T(!QPH*9F|v%L9Q4B>nI2N`p!om
z-2xn^xJeDRE!=(xg~ARxv`tV{vL#rtqbKZ6DVmIrT-(&};3q$VD?kEtdBAw6)_K7^
z>mR)uVGAJn+!_qeU<J!{?@P#@(c>n*ZZcH0x8$Dv+&xpZS2_<aDyU11wSsp~g+=x7
zhHqq_zF*wSz2K-qGnX4osID%gnPUJsOH$&1i&EV9g<z)#PYfe$C1fhyO#Dlq^RQil
zR1~ZCAs=brGVprO^FS`rKh!#K<M#nsTd0M(jjKbZ%h9tJI;?|K=13R-g-1uW9H=Y>
zasbvJ7*CR&t;B1Yzrx;JE0knXTsUds at 0)aD5{SmFu7ww at u1&|?A)KMe95<2Mt0GfD
z_Mdacv<tJ4{iTeU+8Ukzv=8Zb)c>x3a<+T=65z$-AkIHpw+5##J&<DnuCvsbjE{7m
zD-QDPw7dTbx8d!c0tvc-cZjRujz_C!!<S3gZR|~7-Co+*SVE2k?q}-v?g_r^qLlK8
zcuY2Q-u`4+N6jsK)5b+{hR-zcX6MPQrEBe$v+X;#PT(tmpK?|NQ*riyWNhY3J at 2#R
zU$TA<d!vgsee>2DYK4YnS|~LL{VkP2#+)ftmXf_(*~g`9Sw+|^0_kz at WbK~t9c}Mx
zD9GCMc~{P($0-X+N04~fd4(^58ajIxa)zMxE3?qCUFsf4yRwPK)?TBDt9Z=I!=};+
z5 at c&26|RywIv(JtMBBoEu^w>Q3Szxs at UtGgfB@*%7Ot(?po$Pk7zXI>@aW_m!Fo7W
z&TQQjXOx)O(J16XC%Ig)lq=ruwX#PugDU`VP4=R(5OZG4xne#Rz$imWtd~k4O{Nh*
z_ at bHY6rmISVPdoklsHTU_k6D{bMSQM;p6XjwmXlI2KCwg{mvKVbm0+z27|aXLdHX?
z2R*sNUc$Zky|sds^eLT;pzqY}lmr5<t?j}=Y*$V27$en|H~q*J2&VKZv0#H<I<rJd
z2oD1bY?&rqxA$3EQ>6wH^E&}D7pF-XTa)E2WRfE_5pgEz5`*H4C!&}{EC%`_B*F!>
ztxEkRtl2efF<o)2FQ}Tsrq%+VvSFxd6q+86^g at TrwCznh@17o>+#liA#qlJ>j^(`(
z=uA~qE)zuMx5B0qzVe|)xfX|cYmNLZ9j=%KJK*3j3$k>Q1$F%+AZ=l@@sEQ4Lol$2
z{|AH*S0O^2#?wK6vTAqXE{=fN{-4h`Z)_I*KbzOq*Z=VUERNyJm%N<+N1Pd%SErgr
z;Ly48#TVw#`4acUHa5Pzxq0p8jW7QuK^29p?)P}xVf3e9X9)h0`jqY(0_^k%0YJ at 5
z&iFrZm&`;DIJ8@^?;yd|YQh)wCh!qG#>(lT9za9-2&xf}M+VglSp#gZ3*wl*Ca}^8
z3<i3-5SPi&ff+Dr4ir;gChj%`to6g%)5dqC?L1{YMIsI|!oo89!;U39!Rj<ePGZ`L
z0FC2o+=5jl=Z-6DB?0box(Hsq4m}=JL@?FU0U}yl$jWxhtO~D2<H66^TaQ)Xp5i8p
zRVwyS50_l^B_k2g at 4;EHg&c}+Cl5zB$_kUqH7JO$TPp0;zFJ-Tak7RhQ8grYy!zt=
z#vR6Udx^1?Yd>OwwfGVuk6laf7HSHTIBs1zxW`O>2OlwY`~)EkNcM4xtI*{J#M=#7
zQEEmNMhQeFc%gy1E|;}z;P#fU?|k)<o1CkoA>igE=D_`E_-9;dj_*3^??8Sh{qa|X
z<i!gNIe;$OhnOq><V&WV(Sww|!JE!cozLO0WPAmWX(L<<4-p)zXDNMGcfxw~TSASN
zd$#U9d-`<e(SBop_u<ao{?@}Mnn8on##{vwu*o|3aTVcSaP+Ywx<*4!Y)+OWD-EX5
zIj{}J>Ev21Cvm!S8(Ey-1+JLXg{CAZIPPUus8kD`wDlKTLZF)WL1^L&>gBC4U}*fm
z1f>?SV>^0RH~0yV+JZGO!2hkz=dI;cN&dZR{c_PrQsKH4bHTP?mG!MD&U0E at K~G at m
z0vJI#RP>NDpS4t5H7~N}rVvue=}77KpP<Ouj at XpWm7S7`mq3z2gkno at lHonbPHd?E
z6g&(rRYag^UTWSI0PZX6TpN>lpj0`6)jaKUvnfmlK;w8aT|0Nnj{7I0ZZBxwaGR{<
zI<f5+!-+0_<<MKV*As+Zus at vyT!%33hfY%jCGQ1G0i1fza`zafhKi=jCX at Ghlg0xC
zndbhBLLh8Z&c`8GIE?ck9xH)}ujj&$px~lFBvmV+NZ!u{BSG6m!APoBf|0zR3x*rf
zc6FUyEgh`?09te!c at 1$7jXK9*wnJ>uBNRw~z~`MZtNHWm4IZR~>J4)MFRDg~16Tba
zqXUtCLV#eu*>GiP3K8-fKU~%x5JkRYJIVcC7^aqMkm>O2jFp|$|1Ch5{xk5+bz*-w
z7+Y2uEQOiO-=#AXr!*_G;Jgw%!;(N+&p@))e=kfCCLl_cy#!UVM8kB?pJrh`QfUqm
zYQq@;E=)Zye4{8?0Y0}8fMuQ$h(B>OAXx)8uDpNez)k4t8W#^i97GMbDGGv3(jb^5
z^4GZ}f at RWth5Ps*5{~*OCk(unoocwSKaxwPpx2e(<aIQ(7(U|rRMk)~Z7{str_Rso
z1%sCwiZ>&|%X=Lf7=%18k^*!aJ0^&>{f`GLd+(t6|3vGGQL`)5w<ZwY*nzoqIELuE
zH95nH08yB3FCD{7Sa~a(8aLs69-nqk^f(Wd2PPF;ta0%+vfVrMw^tAC0qnKut36nE
zERBn>?rcDR#viCwq}7=^X-KAB-S$1-Sf;^JU1V!Ih2mcQ?hy_w*S#}yEdae4fUa(9
z=O=7y(Uhfbu4fni;#UCJy{vL9qcu2gsUi=IP*I1~fyhic5M|d(LLe{!Ll$CN{oX(<
z=+(w|qqn$=U<|Dv5d+c~A|{yY3ML11Htb6weC(7bLl8!BIzkf90klz+VW>X3Vr%S8
zmd`{&&!wJeU$}b%jwUq}uEbU3T(n}?VjR*8Rwvai_SptU+>gUV&)9#<w%v%}Lk7j2
zcE|7XeYek&eK&lUeK&Q6PsccO!V0Vn3p1XWYGS2j at 3@VRb4Bs7?t1*Dqp=gz=^o;&
zvFyq%H&r7^-o$ap!{1>P=feSl`4^v(XHvd$M$%VtAo{d!B(0T|6|=s6)5(Iy|I>8w
zQSSDBx(~J?M~o|{toS~TH>oNPmU?d#EGc0I3%RajJ3a7^)ZIk~k7xOU>{7#U>Q5%(
zu%j%aFw-n#ozw1FCgo0X?|tcEaMN}8IxVlpWYTS#kdK!#FUai+ at EGLx49bE5OZBIM
zM6l$&0*1&!6gMeO4qAj?vjvJaAPnsrI=cD~;eLsJF6kn{g#pAu6~IX85|XUWmWR!;
zvPfx}0 at mTDdLS&@@d~<P<`mAU;u2Ll=D!IN at LG_7?E0UOxD+U!-Hur7B2OP&R1{Al
zV>-+T!j*Cr66vT*F$8ZE(`O+LfayrUD3R2k2cMw342EpaKNO94jqAU7$V_!c9BN~t
zT?(;PY^5X0g^ftAXZG3eP6m{KXo;=$ySN}TZBpE4IP9e7tRNTRAs)h^%(MPK;S?C-
zDUWeF2tu%^M2C?S432!5LDdE{7Ilyp5Oc$k;+ACiEyKmwT;dWHO+{Ad|DahaE>X^<
zr#j;@OT<mPIlwwyZ+wL)2k}X#PK4&*(@(uq?@;cjx9~x2E5QkmHK>D0PX@)`^y%zB
zeHJ1PIR?z?7EsJfc#w9ES(7nqatbY+d{f7iB&GL at I+z;{XjI=QG}_=1M01$C{^=nJ
zXv#<v?D+E}DkoCZA`JKxiVXYaM?=8xQ~!o?!Ve4svnF+Z7>8jqD+h?;(}U&!&TiNu
z`6H+l8d#YuEU=A(78QBxq|^%+d$|`rE%f4#DtcL5W0ry9A02(rl<R;CF_mQq!>a<A
z*>f5i9(2R5)$hq~3IKKOy1q$k<!<@3(4#*pc9xK)&XZ$MTFn5Ur#bjE2_8QMq9*~z
zi8U7l%O(B%($b!=Ug48QSk2&{+F8X5adeuBYlVHeu~mK)#y|Jp0Y`xF$<y7$^IS6Q
zEBct-xv-YSx_<cV!3XVH)yT#Ae)gz5>|`&X0#PZb#T9QRoKRhH#oKO6nd<CCf$);2
z6^l|QPb@$q at nUz7f#YtuGkIL-Dm<(0$h4ZmxC(+I?X2)hJH!bd<Z=^HoJf~}CW{!5
z=e6!Xd+=a?=RfypK{>mNT-EBrGYR{iQ&SwYzDWVmC8N&^!;TM=&e$qH4kwOcjt7Ux
zWLD}cyeW4VUKM)Go+q7_Mrf0dq>ngS4v)_iO5<eOJ*B3c%aPiWWvFV4I+SEWRZt~7
zNYUxKa=8zGBTbe#j=!aPf1o6MUuC3f6tcDGh1kSAmZ;!RORko5{-zon*RBhosE*DC
zg)^EQPMcZ`tXv;1<0^lDK at juGDWLhA#j%*zb6tEM*k10v!1qS#hv6kEhf at +(LKYL;
zZ80r#Kz&>Sm(+;GrIQ`Y=uDeDh8lPePFXb)ZZ>w08%MAQs0M0>l6B++iQF5wU_dwJ
zB^@Iy1UNX)PkO`Flor6tz9v3s9*KsmeW39jxZ2)vsl(u)_ZPKr43(}mZ&Xy%z5S=(
zuKb8Z31U59*Yunr0BEd}WFAFxb{`z7Ba{mcK`;{NuP{fwAXISSJn;!Iu(FYwuEDdN
zuH~jWyLHnt;Yis|L`pc>3qifuzNN?1ddm-Q29}38N}Cn+*BA(;N8+!~Ux}g!uY<C7
zFn3yi!IMsa4uAvlASUS)^Rs at xMR^W43J&7VndoB~TEtUBPfVKmGYgIpF;fePpQ$z4
zs{<MF%mtX4l~iF=C6U7sU5GP}2<<rA65*Ui%lK(0txgk#L!7{1#yN!bCD^$?snEQ=
z^x5^WVZ&}*D9xE6I7o0nUCvS<R}FU#KK{q~Xe!A%DyEE}FNL^Vs3`(i$@_Yrazo1k
z;X2J2<)@$e*Sgup=76Nyv2z4EY*FMf><i=3dZx6T>2nHEFS7`Maq2NUU3Hj?oO3Xr
z$$|Xvz205AF<xjcyQ at wH$nDcG7}ZpoK~oy>tto3|*>F^LI6x+9U&Lc at Kgdv$7g$P8
z!19Vn<rjY9tMYQl%c+W>UFlpZ;9zb%YDfnRoC*@|HM!ZaY)7D1q*3fQNLX<6AO!{Q
z3^z1|vA_ at T5^4y7y4tO~e{Z9?U)k33^LBgn)8*&O&AS7TXOr;o&*@n{RD%-&1Fvu}
zGvO_|LNH2btDyI`^c0BxZu{WxS6?hMx!_&WKQdAv$py0-w{)V|-sTHA$zelI1L}xB
zjvh*>-f+3}&F-VEr+>v>g)6GaZt>Gm{|u>o<d!|0l;}0ARC~$2Vu2N+F>zqLm7Aj>
zE4mGBk=Xry>#6;ar6Gt8H3c^^orMu<6^!$F`^B=LQIa+jWhoC1C at fU}+s at O+_jeyW
zxOmNHkM?%IeYCS(su^G=6$5v2)<dVZ)vh`&q6Wro2<y?AAG$GGsHiWeMXr`w=83Eo
zPF0~hJj5xT1QncA#b#xXxF?|8NLs(NjHJOphv`Dp^%IT|10RwSLl8u|8bSFWVz5^y
z{>`6YbMXGg5iBn7U+myXa+fnXF%3VdS6uQE)NeFpj4V;fKJ_^cw!P}h)ebnPZ9%fK
zBe_N at 3r-zxjCTRz_(e?GhNw7PKCDT;B=6PaYy>|poTr|yNfjzi?@ZPkHg^@}Vow!t
zo57#Dm)N*4f}(ps2stcwBNJZkfTg^$k<7CpKkf{eM=&#MMZt0F)8-Jd0%{B=T{px0
z=7pV4Ix@##6=0F at Z7acZS~azmT#d1Gj0n1E1DQ<*FX1HB6n0LGQWt}cD_6dE&f!sI
z+7O^_id&cPBNUQun at 5aN7@eG-4kfmjVGNd-T=qNe$*X<R88$o=Vs#n+h?48 at 82^ZS
zK1;3ed2}1g6xOIua>|PZl20KWYYPsvGB5|tALS%lntM_w9>Dsz^MO}4l8FmKF-zFa
zI{+p~o!5w-(W-`q%27>{%D at XS0ZN%OAq5oJlo73|plS(_f~#typ=PQ|`YWmJ_EH|_
zshXKme5XS7PBeclWU6gY2TLrnZjgy`64z;+vXCeV*?cz-2SbJm#1E-D&Z4ij at IHV2
zbALR-uFy%%YeU0y)QM5Z<)o*EhZ-HixCgHONE)$+5m3(Nm2B`T+YcbwRX<8pK4Dzd
z+?RLuZmeg_mt(6!6IcrN#lTOJmZ2LdLQ{5Jn$fxzg>%L+DHE2$71L1Dy_ZY at XjV*9
zO?5Bn)&J{kI;Dze)qRm!aR9&8JS$P1EwLly7 at g>03t6S*G!|xx1^!S?BX%SpBN9qb
z$`K7s;GF5_w%=(WL;`7|1-N<sb%Q%L at M0<fCGR2$)USPl=KGBIpvb^1*ha7s&uDxz
z`bl()dwbhYA3xcC{Fg_adygMH*xKKH{0Ic994f$i at PZn>K6Lx5)(lrwArACvaDDrL
zL4V9Ln4u$4ED~dP4rzhCxy_r#<<Z2y+4y|@PdF&A2~QOCU{sJ|E@}`bz7LuEW at t@@
z6*;X44PD`xn<<t at S>-&L{VMf*Y1Y?tv!Gnp*X8`W4Yx`{BY~WAB`(06>2cv{qf(WN
zuVGM{HW;262UlqX9bHfSV9#1FPEStlNcKg!zLeW2jr+Sh54QJsN=K6?O<03UGXwKD
z1!(LM3x=)`G=cm#(!#x`J6roZjs2}}9_%zG-FKQAmoj|Js5zu5JQ*M~(A%MYiA9KT
zz^I8EVq}fpS2w@<8?g^$@4Cb8$-AHXJ?1M$5`#If5!oY$L^=|k=*RgkS*zsqr``b$
zA|v8;Wd+!3I<IL)_Fv=iqW5mp_kTJFN5NqY+1SRuGM%Lv at d~mZ+56yviT-N|vTa;n
z-B{iHG at +c-I|8a`V`cHul{1)ExPqm$357(-;74|0-(cFBXaI(cl8drx=IQaRp7ljB
zI|CxjTZV=}(J&`kj~_LjJ;71ForWEB>%@ui#l_`7$bTcyYq#DAxS)-ZYTmhVfZ9qK
zYpE}lVWhSgFcgCiN=j98R=q^CiWIi}4g!RSNO8dlV%r-tu+N|xG7k7hCIg%di;PJ9
z3Y?Ic%EBgz>Pkr1ICG{UWW_exazB}ypBb7ei%87;%*LIJ+<=1l8%VIy0xm(JEu=<p
zw1EpvmCfL}h+3EZmg>RL;$?`63D^`JToq*b`4!=b23=#*UBvt at VxrChhi)2t4FMs`
zggkvyJH(7Xa9njtpup~a^y<qf7DGT{kJpW{&Lnp-s@}ICgtKh$x{<M3#eRoGI9*D;
zOEwC_xi1KyW%9CguR!IIJXWpT1r#89^ti?170>rYIe`zA!q`|MVda#Uy<zo~nBTis
zha4x_f|uygV+8}dVB+)0a`ZIrFgTPj)lB4EIzxd%hf8;6v{z=&ztOPkhWkN>8gM%g
zjdN at oOkLOlo#UE{iit^G6(E|!U38~yJrhq;GAb;IR;A>aJP_Xb*PXpA!cWOLv_&n1
zns(WEC?9&6MKj4j=j~6s+;(S~ZsO+VzUv#ZW(%VYuvcxYCoe;~J+b>u4i<N;>K2`j
zCkRgt9oi>_U^gnKS8+;6qOf^LtgOOmu(l0XgSLYnI$L>Ay$gMk!BG2;{@o-qKvv4J
zT2hJAQe`5OF5+Wc`4Olr6}J^slT%C`9z`N3MO at TKmt6sM-{hvh4K=!oHa0U~(Za+t
z%c)dcatSq6`jwPa=Bhi{4m(TNPj8BUS$g!b_;x#qf@?QT at xVeQK3rR~kkCQO)e;f9
zN>pm;DA3i+sn^q%n(O2ClIE;nd@$YqGebYj2ZZ$F)BXxhRUW|$g!^8`-LtPe<uj%P
z&4}wMLkmMQ?${CB3ld$|V@^C{NG0W!?aqVfNqbS+psB at bX@=`%W(%8>NKHf`Z(l;h
z#NxBTgRhb at g^cV%p*X-xjZ^MU$#O;FP2Qu2oHm$l--%JhH1)UEkxh**sFA?$s|<P$
z0Ff&NU2unC$whO$enu8o-b#AZ$HT+P*;kj;%nGe-J==fW!7X0MHHkzyOLw~G*f<GM
zbv1pIxJ2D#m;$5BO;|)dLRudJvJ3XHbY~_m-(NiwE(gi4hnV;JI7|GlF at kG=!2xni
zu+cq4OeK7o$iSp7O!%O9usOOLD-IBIoMit|^p><bIscF-b#@*C>w^a(%DhAQgP$Iz
za47Q(6WZ*(L<4--H0F}FlGX`K|I)DYL`5y^axw#8ydUgID<2kip2(<$U5|FWH}GjQ
zwa}XhTbL|295|7p*A<EhUgj0j{wsVEMqX4K-gADuiEMZoWzAX^_jK8r8KjD7cqS%K
zIH^%T3O^zEo+C+{sUA%oW3925#@*fkIa<?=u6U+O<47&De13vTUWpD;pb5U1ml7c5
z?h=|B=HfSlUP#f7K?T?&_t6zx0s3yt4iEw;NbIR%p}(sgRPT-U>;P8<<hFb(K!28G
z1o*Fko$Ib1=dvmjxRG%nF`O at kWMsTZ?yC at zME1R$u6^y$jPu(PfKW9JG|#isvKOr)
z<|L1ROb2w_WF at BC&otnfM_#P1kaP`KcP)nvOh3Qv2YqBANO^c~JypQvPVvvCN=MiQ
z%@wy+7yy}L*GF(EBiXk^)z9Ra!MsTxkxG at 7^m$>=ksg{xIRI#8jl~S at gdX`dZu0mP
zGCzRk{i&Hmo|>AK?Ld4lHPfCd0rfmG__QxPt9Gs-pVDy5>qXUN<8@%vc#mf&&Vl=@
zj_1>#r*KG5qLsuftV=ubUtdX1|8q!?Z<0gKhnM1(Q_GL5r4ZM%RD+yuB`$@nR-Ea}
zz~@Z2n+ue*Eu9#Mw8l^x-p(ks>5~C2a8}ek@{qkk&QZeZc;@W!pise<qG->&RTVue
z`%9GoK9Rki@)C^LMww_O=77fCBwJrP7uBLwJbeWxx0YX2r})6 at B|kL?MwmqXTyh#p
z=X)Me8wLj9Z(7qxg^EsQucI8yg8zYV)~}{w)zX>@1%9VR75bBeJ*J}TF%v(~Li&`r
zO*sUElysf}M$+dTwDKkpNpphGmjhW};1t;V0Jg7vts$PZOEzyraJty4oQ_5(Q=DIc
z0gC0e&%1emeoaOusuP}0N4&hfe0t_N^MF5R+SY4d<B$$n13AM*2bcuU1uBhTnZKZE
zPsnYW{sX*b0<&N^J?2S}$fY#p9pS-A9&A`n$C5#3h!mQdbsE>2;Z%=YS(0N;wMFk8
zm~Z3cNX{b&<1E=z!N at L(5?NpXo?-E7h4M*i)s*>Lz>h3W)~zVx(<?+ZV*zuFzdJAd
zz?&w8iS at I2P`*vsKvK3u4gXMLwz^w#hDyzF!4>UiuG!Aw`r_JJY7WHP3bDd9(H~9+
zXiCeRpiSBJcWKVbp!(27*hR8IIF=DhCL4t at zdKL*;W)M^R!wor at QPS48R@NqE9`Lq
zHkGPaV^Y|z!;zpu33Ao&Ld5do{7Sq8Ml6(U3xrWKNv8Ld{Uh_~t?5{^+>)?0^Jo+@
z>G0(8Z+pNjyNzEw^XskYt2;@~Qcu){LQF(@YYnf19;xLdpEq6<yVj8slIEz_GsG}@
zF!GrQT!tlq&Yy@!|Ci7w+jH!}RjZNUWCKVVY`s7t;Hzk82p1i~vq!En93A0m$=Bh6
z9X7;IsCK(?CH$~y(h}~_bvj8QODDifmq$gS;C1UsP2R9xRhf-=4%=xD=^$}N3R^=w
zNI!-$!u+px13;lMo1R{r9*2j2rDBFeK8?Ju{L7Hcc}?tYtx<9 at Yu>Fmu?bS^W_&g|
zW}yBa^GyW!C*XharNF9X9G59UGwi0cz$aCNpvtA#IzH1Z8dDh*pEAz7ob;(Qrd}lx
zdDFiS6%i<=V~Yf1bS2YHMz$sl5np7VSsp8TVX&-y@(FK=8TR`<gow*^x;Sw>n7on;
zb at 58`GcLk6o5TLwkW<1Bt;Si4EIpkutmfkCP1+H2sl0Mk%Q0DCEs!r^q&;6?iUbbd
zZX2QDS#hZd)BWXlg*fZW?+CG{oKrBgaDfFvWW}IvJK6EJk$?yuoDA26#M>agdAEzp
z?@$$y^T&*=N7`jQ?5~rUwZR*3B{?BaY}PiG$vjs-vv#PiCoC^Nwf+D9fB*OS<Wv0X
z3UK*#%ih{?_c%*9$_%6!Ut^a^RuoJ>oDt|6heDA>Fu at Fd=Vw8=Mh(f1OJ8pRpAi=@
zBalw;yZwg`8lQ4t(;&al294NHV_&@cLu6{ody6qn?CV1PP#iAOQQ*FjuC6qkn&hSV
z4d&hWK?r at _^2Q}ynZZX}%2w`J3>=uZcUa<npbIin#Nl*whTA~cI6p;|1$NLr>)o?N
zs+{VZzMY)uFIc8_{pse7=s3fIREASfh0tzxfl}ITl*<eNE9Ms0YnM7W;?FysNUzpV
zcqH@~M-<eoC{svlGlR>rV{9ri6+gsK-9X8f81N9fMipvH_91G8b7Ab^TpJ6d`1CfE
z5d<d2CZbwM)f8ZO_)g?(?h7^Fv70T|^V~0AtY;t!c%X)Ju*ZZ!xN&1`i4kqz&0hyn
zC^u9U_Z1K#3_AX*#bjCp96Tq8jBak;1Y7-XdU~=a at x5(H*-wOkFc^u8v<~JC2zm0E
z!CXp+eHHWP$LAOy>ndZ5uu!_hUvhhZO|5K~EKX3Y^*%(!`WazC>Q&I579&`fI}=HS
zgcFe^d}eQjI<hB at Lpuz4wQ()qR4)ucB)5&BsL4133uY0>DB)!#t)_YptIQvHl_oB+
z7XgfPG)}q6{h>13**2X9vimygjXIO=n|_CBEP`hsAy>MQ_E3P_O>Q`*)pUEwIKB93
zguCt_WB+})(Ats(2txDps+pWZCe1YU?$>va2ME_BX*Xik*2 at 5i%`d#pZ>&hH)ws;!
zqQC$i;~sJjK#>s(xf_jx+%h!?c}IMgF6Bzx+ey_O$6x+TeJn9d71u$HaLvKdInO7*
z8cbGo$Dl3ahmI3qO7~Io2 at 2;9{Pw`eu*w`S8}+v%9rcnSdhHV~Cw`FDNvDyx#|TXS
zTSjyfQn?|STo)JU;UMlOYYt#mE1i7K`HtRIwmW>v)Y2&h<QgI|n;<{+U26UzSIh#V
z!@TScDdrVK%+Wn$+n&N7MATtHZ!AZ21d1{jgf9y&5xcDRqgxD7wPk{%6N96^X%4r}
z?(n*Hi^#z3yF=c<i~EC+rS1F_Ai&yA?(yIy=NWx-nc&tol>Od)BWFf$)h%1JsLY|Y
zZP#s7wY{z3+GzW{&pY5b{99}2K at d7S13iPwvkgvq-)3!zy4q!ib~XHL#Nf6h=>oT_
z2jY6J_6qU at sqCh30H)B!uIzz1xPuqF&=i}v8YCI1vxV7vHSQl{p}D_Tb|*TxFme25
z(0 at yh{nz>B;H!2$Kz?r=Qh8+g?J20RBh(#3PTyYY9O5o<`i+X+^V)lJn%ih}c>g4m
z)*x9BqPlKUqq|B&%&xZ4gU}s02(3Kh)|xf*-{>A?VE^H}t={QixU#vrv9Wq>1^Vv^
z%=ERB!68m`<HFyyvy*eE#JqL1KR!k%xL*aa=&iG}@Bh7aeRK2Lziq64zWLdWjg5^P
z*ZysNbMwaa&;GdocTxPlPdQ~&kU?(-r`W)Pw$lFzmnik12jOnh+t(Y at 3I3Vz-<z}z
z&8_n-bM6n08cG`Qusdncu>-fyU99d2Hntkg-QG<rRVE- at 54?GO!>$LuzOug2*x0za
zaqZ^y&;HgpdUuEu?bFl36~W at O_v=HR2w_gR-^SSArb08pF%8^IbUOG6SxxO(=ZrT3
zLs1myp5h`c+~j~Gg8_c3MtbSd at pyEKGY;ea5e&k2-hecUm|`6ru8)|IyS<(ugF>6l
zHtzZ}TtS2sWaGk9gk<!}PqF2}E!IL=Tq5~$V9x|@^khTKz##+*D6TVjXV(}gN(3UW
ztC)Z at Pe-e`KwWtcNs1esMvjR?wDW3k^or-N-yt8^5SPIoF;5~AwMpD{cur9z-I(5?
z+bM*p at BueLO2%XBK`(U<ZZ0(<raqJT6lMS~fAot;7SQS*;lhl0lO#-b>gA=!<bpK5
z6Ma_i0*2S<uFq21Vc1TRwq$O`06ojW1mxg6dK>A0 at dxeryf(GztO at VdXF2T)(o5Qq
z-7TH)mh4_Pp+4ywm-lSOKiK0wImc{NH5IKJmR1Wte$(GduqmEQHrgbnZ{%ViTkl4G
zHd}kL-omn at cIHb<+nFFSAWr)CooqQ*O%`KXKmCIF7>>M{?AhVImg4$y#W^GAuoR?0
ziO|q?thbCPy|5#&1}@ZDi at w)<m;$d;pW&%s`b&}A>eojwR^>|#E_FfP<F+~?H05u=
z>I4i398_{V3U|Y%aS_YhRR{CMO}bEoURo~GM$7i;TO at kpa81;<WYf$WO-7HU4iE70
z0QJT&F>t}w1e>HegKKu4?)=9yT>dObbr$E-f>=ym4OsJz39E571MCLJXmQ<%6my>B
z^MV^s^#Wc at kP--zXDd|x2AA=Gzs~#=06OqiUnE?jx_hF<KHj}<&P#D;Z4Rv$<=<DQ
z(^<Gj{Q^Z*O|}DyH80bvERMXY>|H9LQ_rRZo2-a!hSeFB`Wzmx4<<zU_1B=Im%5P|
zjR>?lY^@f_p<RWZ$T7s#pMg<!<i%iJ#4RI3HW#6y>{}$;QbX%Pi^EJgjjIqs(3urf
zV|rwUouo_gDY;PpV;#@|;q06<96s~VT)7I8DXm`u1t!}nlK6Y9fD)ya=0D81QMXE0
z-BaiKECN@(Zc-WElps7Pjs?wxn1oXEM3ddT!`hKN=ql3&V4V#Hm`_~EVQ~Tw(=Xz>
z&69R(jf>-8Yvpe*_)mA`=k=8 at UwpF6P}Mmr7X=KolKRqwBLwiyX+Uv9!1#f%XZ$f@
zdYMJLKSBO3iK~#GDMGZk2W~(l#XD!UZl1i!i}SC+g%O89JFSuo*4n at m45A`#PFaw*
zn*TD!RHll&sZxjqTdS=bcy%?cL at X*S7h#dRlP!qRH~pCmGO7|Bg>gWI7AfH7s}c$O
z{6m$vThe5J9w(*>Riad!E6YCkdJfeXxz*07^3fa<6;AJx6RnJvhB$#MdGMUctJ6gS
z)#N<bR*czO<TY13ZBHQKN?u&2Z$xg(#tNL3Vg0f~lN{E>i;cHlg<v6DDYECjI9H}N
zGmocLfi)MTi!51)z<aMoaCO(OS&|VmtB<?y8Xq at l)y5?Z9>Uj^%UI4ak`JE(F>=34
zq6dSt*lSS%it1LNid+TCjUs(lB5K#!F*Uvheot*)`XpV%?iCk?22uGOXvHgz>I!DH
zmOj%9A;pto#>n|tokLJ|5FEhULfx>UBOq(mZ3Q~_9i9R%WW8Ud6qjRv6B@>hU1Bk5
zYr(ayV}s>~N_A?M(O9y=*~`^HPXWx^l2*&@Tv_$Do}JWE*_~7~1D6O?`fmb!C=KOE
zE%D26psLq*1TDAkl$O6VAR$^;R#r6hJgvbU>XntSGacn-te0-wWv6;&BSiX@?E{&K
z+j`!y(8W at 5Qv&8Rb{nNNGfXr<e}27WV^6o?%s>Z18^~wg at 4%^cDq7s~S4k*Q!q5Qc
zK?@7|sBdR7%9<LHPMp<6ay?hK0Q?M{9`1<hbSEU;=LirpXfS0G2AV*i^U0YFsI83@
z!(JhsS_N!)tT_9T944z4 at rT}?YyO<)t*;vY{3^#byIgI#3?Nvg>8M~>36UGkLX;%{
zNsKX0sFuP3!syZjE%RskP7bv1TTS=WKSrsBBQ;Ro87U8X^V}@60ML{@@^4-&lPv^z
zp3VGt*ncegM7 at AXa1$lVpciEh6q2HZv0HRZRRJUH!uP}^orsqN9}@oMR&|xkNZ)Dy
z_cH%iS?Xx1#AKW=d`LgC%Ar(UTmZ3lt;v&!QW>j at lfd^Aq_QD9ldew%sOoBi9!rOh
z<Ci|sMo>1R%)<Ln7Os31R#vHp`|SoN^t8`b8`(gZJKaCf7ErTJo<yojR$DS;tT+<T
z$EiO{mRFk7jhu}IusRq~rFljVar!Gu at DW#K5*|RU#-uq2j&YLdJ!%|Ltd>dvVRFea
zc-BjK1J|eWbAgM*1Gp$8ii^DECv|u!4#G!<FEs_a_fRPn7HyhfMb4J5jB12e0-l(=
zi4>8Mi4*}tN~Jl`#(fnkB1brw#zQm+HW at XJ`)?a342Og_0;le-HZ=8f1AB9?M1Mhe
zH`F0e3!Csyn1MW`<%-1G2%1pmW85J0mHgAlG0awg_x6<qBw5`oDskCR*&5_ebvH;u
z^`Sd*feI8?j?A<>4d>BtVS6O<H_c#HC4lo33oiCk$#n at zoF~e3u~vw(D(y>Cj{)s5
zOILK9mDaro$dnob`J`b%7g_g7mNhnhfd%P7NIaVf-jY#uNxWYOCn+x?P#&pPN5SHy
zK4>k%hjN~g$jOT^3@(xiR!5chf;cQ<&0VE}E{5V!8^ZA~JNhUHNZu(R8VOv$f7TN2
z9r1>e>nCGt@;+^h-wXLk!s59Y#p2H82`+2xjD{!gKCHz0SESsF;YLF#e>1FT^Zybn
zT0s$wuG)fJROWMyU3gp`qDN`z$@pPYMcv_&d?503a9s7{%i<JE8Mm^Dqr$U>;9<(R
z1(vX;P>s$^axlXWs|lNlov?~%gVH2CfwrAgY&L7UD(7}$wX$p!oLNm#7jvsbeUAVu
z9zl=b#b%;Vs>-qv27R%`qL-P~ES6Ma<hP#vYsrk9ug(zkhcCyt6tHHrAuRaTNgt;Q
z!f`uJA5_yv<`RbnFNO+}K8k^tsGg*wE0%RnXjX-1Nz;u}nWEU0ruP-h1elUW77P~l
z2R0JC`CRCK2t$D_FKR5X>>PvP)!-%abS`Kyu)Q!Xm$n+%3Q+%hSPs_J?`=I;w_rE%
zK)`GZf;A!+<FAP4%#z4neOPOPO<zWPuH0UA at C#gA7QC1eesL&!jU)GJbi!o}W(LFR
z&th0>fn%BIDM5<`vi}N}G!7b`;~sJeyTWa^)EXIlWj>p?W8~N#<9rLu?Oji4FKz|I
zU=H-c8x94|96L<SKzhB{ZZ);M!w8=}`tu`PL)Uoxgm=(^6~WV?=uu}2xzp~W#_q!>
zkDu;0o;-N=Eq+zWlq)_m(Zh?p0p at wZjo=V)YVy;S+P~C5H~@S^0+0UQ at Cnn&@<yWV
zXw=RZbA6tobHs??5JZ=5qU9b<-TC&(R4-T`$EL)m2{56<Xhsp8FSy3Uua>$oU-sSQ
zJHvSy9cT01mm=A!T$lB3Ndd}zk<m>kTP{LA at 3FOI6HvePoMSI@Mpnf8>U-#?k8QT1
zovM3rz6m9y5I2%=px$aEK3LvAhkJ@~2#B}YF>Lu%sMWMr_!%$0>lB7V&Ae)1_^!s1
z`wNUt;4+B1qZ4u~Xf$OeC_4mJxntamBCN=yID<$`f<so&@sk^4lQo$(MZ*|-+;+8c
z at y(q^b_$toM{MPVMcapGnwxY0vq~!`2pM}}hKr!sD$r>X33kViqbIXi;v$JOk$P#(
zyDYFoOtZPj>Eky6&9DZv6`^+sqN^W1{6{0BF`Uv1?uXc<*TD=qmH3=%p$jmpe at AjM
z%^}gA!=BcXY)0ar)fj!q7K#KoQ!#(I#BtbzulA)2mdW(|_}JOie>2XIpvG8&MTZFf
zL0~d9^D=OdF4op!5)S?jCl3l6uSxWYt>L&PF3dsdJlC_CNqL8KiSYqTUy%hxaj0|_
z2vIO$nI6L6kZEP=Oe$m$;qVKijwJs6gXU_h9r*ms)UXeYWttC|a2FXJCg*qA3(qi5
zKq^>4?Vx9hj*8iq>tu at 4%}&E)`@I1<f~qKj)qV*KjKAVsYxyG0NPMQAM>?hglCsNV
zFepeKdA>RwJ>X{0z3v1jmsTfdCxdBwX?3Zv=fo<jdO0+c9+kK+Ua`ekDg&1D&36YZ
zw$j*;EyAUjKQAG8T`J`-4u8h!?(B`#_<3-)w2b>BhAS&^{KUotK|VO<ly{O2nT7ay
z|Alb`L^X8ji*$wezdz*ZINM-s+^o_XYN_f1O9==rhI9l{%2`AjcM^&m!U6bt7Wc_r
z{c&kHff0XeYcF2dk?S>;cKXZ4T#%PIl>0u%8ULtzK at 2Q%{x{_4Iy|}P(O-dP=K0 at i
z8#gvTFP{J1xN-f)ALoBBIF*+we!26%Vr*tdd at E=Kr+dHL{6bInZfvY<+-Trv?=}2)
z<8N}IPkyo&O|E^!Q)oDOi;cCTextRToI&5GIld|>BA77%%)^f&BfkSfr(N}#G+>$I
z$i&F+DWge<K(eFJ7-xQ!+u%L?FWtu8e>`a5*xUG>bnXpqON^)9Ywp2nrwocfn`m2f
zZEbUMeu8ru=sa(V*x8-3ETSkHlXpXuMotSipT%B9P!e;m=_zDwO at _|UQs_32#q>L@
zN>d037dMhbmEGi{21Ft&9S?Xwb^4ahaU5_yq9Y02zz_&fT8<XtW5lDq8m&skEXhV_
zFEHX9jV;mZvBYqX*Nt|6^(D;E^KnZWvZ#+PW4w?qWH{8v!;u1mq(i7GHF==}1Z at Oy
z2x<4hAnYOXXWGwUe0`?CydK~@cNf{MM at QJ6jZiv>IBlxcXTX_Yu{-V~%4KxY$5CTQ
zZ5)nlv^UnE#SppU{^X437T@&Y$`gEhFEqq>D4cjDCIQH>`)2S`!-o&MaELEyK3c$v
zv~a|zjz?}y_h!)Z>(lP|H3D$DaP=ZymoubC^VcMG(itd`4udr)jfWrvCi`m~o=>Nk
zO at QbP$;3JpOZE=&YccZ%lHiE{MTm?9 at tCo4=VLV7T5qkjHd>8Sj9wRl!O?gNt!29Q
zmbivLvp-~OJ+{COLztS!!U@!I0SF$2pqyREx at u2wu@{m6ZU7|+IC9VlQv7HX5^no?
zqbm@&K*kSUCb>h6$p~KJP`h+K9Zhl00{LGK at dPUs=+3zS5tQ<Q*kky{aB%K7b%$`;
zjz=$%Nr3Cqt};L4d4F(}r3bqYclX63gq2 at Ci1v@?Sg&26`3(1%9XFci!;`^jhgp~e
zFlfD4NBy4==?}u`Bi&DRJ4ly?Gr#B*q{PGd!XKOix_k4kyX~Mx;{X9ZAZ7h70q(@$
z;0XQ6eLtXY(k_!C5G6K2)!keC9bJ1YaQ7uhkf&L)X=m!HLu$UXCF+Z*pS4uxUuF`+
z-~twj9+1Hqa!MmR3a61zYz3wQhL2sm)FA2E(+3nQHdFY9cv>+R&}x5-v<`eA(xrMP
zz<Z{0z{97adqnPsfY9;a4PN<Ut}uS+Y_q8qi7Htp3Zb4jh_^j}Ro8v at 5K^!GaTDW^
zN*%6NhIaCSEG&1_8UZwWhj7rzjH<Ea&vP<I8O2ry at sr)WBnI6<rXNe~43F=|YGW79
zi~+Ju{S0gqr%hx>vq305i{+R;m9hFih2xe<xq}wvR_A2+8kQJrrF^73w}_pSZ1e{k
z<`v9Zfn4!M%B^fxv~sPg6^adS1~;wfVp=W&aJ{N3L`(;=g`)rfbyaUvRRsqj at 0nBe
zv#P3xuaW!=x{4yNuGi12s!B-N;glBe41m9=s(MD*Wq7I|>zAl1WC0S|Tx}RZH$>jh
zZHoKZmm~l)a6M;gOO2H~7UnAC=B+rzu?cxb7e!7TlH7TS4=tYc^(@js;8<@w;SCW;
zwgbtJZkUFF9M}6MFA%7%NDrjo#PJml--#S&8|LSa4(#NOT*kMN!NB%1!p+H_dfivd
zaR^l at D0BgkQstcL)5?jSRbRb^+ at X5pj+zYM8bY64sfNU7SE?cI*_CR at dUmB6g3c;M
z*NV{5Mq|$zzl3TxmiBfY?A+UL+<W{C*U;kpM!-AD^RsmCyPbP~UfX)K_2936+gW?M
z^JHuH=^A&4AMXBbhc$+crJetL@?dNC5wjyQQ%kXpXtOkyo;-bguOY4N?JO~qklwGr
zuBf)i+6eTD1URw_gVhcnU8Gh#hYEM{Zo*Le;+s>LM>sfBdM=9JKw>|C2 at ta1j8Oid
zY@)<J8EWb%d!w-MN^@v4QspGgI;dL(#STgV6P4iBwN~U4afz^*44}FdmI4&3%L>~p
zudweP{{_}<Ol(<6=L~xwSI$XOvMBlJ`1cbCCFI-7=$D%GbObA151CGc2d^c(bb>dM
zTug0tc17dU6~L_h!hsB2UJp4NQ%1B~cmKYJ0UaFN)Z5)(y!f>J{npdnt#2Oe?ETv2
zC9dha<*&KmclP!k?C$OVy0^cz|7`D9NqzY1w@<eo?eG1n=@5T?@c7%kU$?jLYHJS-
z-QV4Lu)Vje7e)nsF!{$xM-<~0LqTLOGub at gI1;HRuc3Fzjy9B{v(coDtCXOc;l~sK
zg;2!X+6YU*@J~R6_^a6MW)B&GB-{dfi*v<bseU2~Q6C-&5u;1uk}!vaUKUv+S8G=S
zXc6wHF8oYt7C>iU)+{;}a at zTAN0eYBp~nn at xPFKoT|=vzjmJ=*;SuRi=@H3c&Sv1h
zsWy;ukP=nYajuz_F2Sp=IhLIlz*RMXKTmZ6k>-=-M5_(+X1YN(5pgMCX+}fqpcQFc
z+)ErSK2=R5<8Ht1_s?J>3l&&sx4F~crmzngX at Oxj!K&VL)HeXTEHM{hm95-KOiXVi
zgEfI5H80 at O%5_V6Jlb|G4)4Cbl_)3H=Mj~VujC?>B3EbEP3SP<F at -6Tfe`U%Rzbd3
z=3x6 at YCqN3W;hMjU%-~vNdFdVC##9o*DqE(>dRWWz?<2ztnX`B-)2~4!fK7(ub~xq
zNR(H7U4mYe3&UOMC3`^l60<DQttoB-Ua4afFP2S96vLVVfIFd}QUEyH=O at E>GGU1f
z=+WQl-mn_RTWTsU6;Pjulgc5Mv;qMN|F|OX5N<noSs_8-WfhmBh9^qG2pzh3*CzB5
zaTnmnkz}Wk<pHN`)hCIUPhVp~Gi)Rjlo;8WO_Em6>PGs>7GF_e^ZG&xDeWh#mp7 at E
zZCJ0#zq&_VIo4bxvG6}hxPA-u<|+s{av{Fw$4L8HW9#H?_Z at UD^@Y)+=9W7be5uC_
z1t}Ltn<)y5JcxZJ#EP;tWS_IHFck2x084l{I9^><{S+#z at YgofP09d_TF0D}ZM1<0
zX#|76w%R~wrh3{cz2}%OI*qZ>HheuCy&X!$L}AOFeVU{#e^$N(E4map{=Bq~JBDfJ
zd^UOnlvac-q|}sBvQkq(7f~;a2AU*7M3`P&!1Y5UvW}KB_K^U}X{A4PpL-xTZ;FNc
zRQDO#l6yk2b%XR3#zQUU257zxzb5j(WP3wQ#7S_ud6X at 0xQUZ6a-S&xZ^X$BP38cF
zt|e!;CB&RYJUn|>xi^Rl0QeSi)>SdMnv!<J=@ce1BjrmV7{WZ at 7(-oYY>&j_=1YlV
zR9;F&|AY=}Y>EyWo3cF<8JE<(&s~Ye_q#iPX}m?|T{1%;{M|Cf-jh}}z!Re at Z1bcb
zU~hsOpycIKq&Y=*bOP$G5RrytJX7p#F-(8lKjj`1+k>ew85|A}--I1v`v4}~)NmZ;
zNdUusAh&`e<QH2Gw=i<ZyDKR<4JO~i!Iu(JMu&t3p!j|3U;@}Ncl-i8%o-fR;@reO
zy=+#k#VaYj<cj8kif~)AH3X3Hu_8Oq>ZFS<`lB=Pq1-v+Lf}k-XAJDdYU9}%wvf!_
zpY9<lyDNBJZ;R|}%bmY*^<&jZgSNktfQW+xE(>e}M=szk?0qa_Yx#UA32HwI0SDVE
z5V*HrSibPy9&#TK*_=*CSi__tBMp*FIZ7ZT4R3Z}E$`v9#z704hhwHJ!M)2ZPAIdP
zYmVGvrrqi~NFRwk<Br^6xL6GwpO)>%#Y$sQ6mt1ydv&AZV|ulzS#$VH-2bP8 at TKkn
zdK~i1I#m7#qw`5cJ>3-nnX+-PMO;_FfaqS>Xsh071V1KehYxEnutBMNS)rD6Dndcj
zu9~i1jz9<TV}R1N{}S}kJ$hZ*<l{za+#n37k=uD>UszjXOO+D2u<6Lw=6|wH at 36}m
zJI{r%4t;^m^u;^B=yrO5(Ze#t_`-F4BcEK)Q9pqCvWw^2-%z4ruP4KA*vM_tgQn9d
z=+dv^eZz($!f#MbYJPxCRb$PfD?AE9zum-Y>TrobTi{nxKE4JAS^WkpN|Df1Ir4p0
z4<x|LeERZYu)7p(`Qw0&xOJwo at tirI<eU_4xCLtZ6U3COv^?rEB+4ul*de+ZZoA&V
zDp+~kHo)FAVl#S4u##}+Cev4T!k8gt%6V7ATW9IPcyeROq&DO_RvJPq(A5}036e`!
zx(Q|#d6Rl1j?WofV>ytRipV at vW+XKOqA2++8(zTDL2F;m)2W7AdMs9|QXwy(5fJ2F
zFy^$2Bmj;uW;Q!q3oVg3hlo?_k8dyGW<9d-GhQ1pe0h5b at y){0&$>tQdmT3<g`1=`
zijPDLd_NTRWh5*15I0E-hnzj~V}0h_)tE9WQCq2zK*H^*oYcIJvO|=5Y-VOVjsWKb
z*(Nt|2MCh^H~!D{&#!N8tT*J6jc-SjSCEO_*P}PQabiWbks8q{E?@<xF*3SQBu31A
z(;e at Ewgx<fSacs9btSZE1M}AU_+<JO|1bD{npS3$Wg0Btq29zJKTXj3Nq+<1SVDf-
zaj*as#L<({WCPn&h?Ywe_r&^}^Xi+hE4NYU6?U*Ww78R&!6Ad0Gvd5z27**CA}d8j
z<vSZ@@-8S?G)7ltTM&PBDFP?Fe#!4WyoDus+R#u%9GU;e31d8$5PpWhD;&WC5l+*q
zMB{B`w7>igLhLb~Lhb74*)woBgh)*?1v*^p#@Wek-_tsN^gl40%B%NsZpAj`+B~+&
z&y034j?g03H*QALDl;pQ%ZFOB(Cun*VgECG&#$Z#Wwo*;UoA40v<sbeK6YUJ$~L`l
z^MCUMrg*}{is-%wG5mh>x>-H1^0<0l16gvV36X}yEMk^gtP8Y21A2LH`Y&$?$IYfF
zfhZTb6Id at uqv(<~4DkRaZ at Lkslp6Xa^@VY%dV>Dv{+M@(i`rqU2aUkEVnW)3*2C^k
zJ3oPs+~ZMM8qly+a3QosP&2X)kq&Q0 at Eq_~67(3`pmu!&S?$C^@mrB3Dad^=r=9#V
z#pOn<C at EbnR2Ciz+)V^8143N~G+#vu%N`{h9;a|Jfb9vFSb*bw1QqoB5S7Bkp6xn#
z=+D5;CnC;yuBa2FGM*)L3MmoN<s%~=ZU$)0xZCmR=<Or%kU+kYg5+MuG;QA;V6Z6I
z!-wpDJ!!0<;c}msS;el(p}SoB<pDBDD8^wdFaJ*vCBFmrNR^yD32Pww8aL|&7ajLO
zh89TCuZ+G{C4t&?>SrM27m0fL^#aN$?p+G-o8}1K0Fnkn5NZxb_X)H(Te(qMcPXr`
zb_nXId&CZ~uGsQ at +#DxboSfD5l`gA2O*E8ZNi+hzp7ygE#89@#A&NUC&p6ZQt at Da0
zFY{g_lbplKoC4biZ{4>24+))YM<3#v`xSZI0B$aNof at xj%^l95=ng|uSgGjXE>Hv+
zS>iM@|LEe1`CJ3WSp~{<+JdyAhZj7}QiMwmTGkR&-W_I(y9Ti`j2FpFh=5ESrU`l3
z`n{#r%|;7v0g2=gD^31Gc%i-<jR!yTV9$vv^D(0s>X9feJ*eZ80peT$1sb~S*sP8B
z8{&Nh<U^0tY3ULJ^s4VSuJ6rBeu;^@6%xYDpJg+TbY-aJnGkknIw+e^-T<b_6B5(|
zqH{O!3z2w>ID<*OReUd|M4v&R2D)CNOQ0nLOLj$%<HbEK<Aq!fA&~~oJc0PpyK#iV
z?@cbNnBTxPB)c3s=#Z*7rTV3QH!V|`Ldv*OKZr0;I-wIk$VnF)LD(ddG1J#jCxocT
zyl8y7fYd?!NUnLPZ^+$p4YKg+iHd?QOu_HzblD8OzQ5DunmSZoRyb75(7etPAEN;O
zPdo;kLUp=a!?#&Zmq!rVx>T#3F4yPO-x=aULRk(;_cQ%1GAhC=bf2+*1x9_T90EV?
zrpbm{t}1X8YKqZq2uPrlR^^=yE_oNMvuan1tl7B0*wX)U?@Ox2x$-1dvfIPNQO1sQ
z57F<Se%o5PCSaxTDt(A9ZXTrfaLR;rU$QlmE`JNoC_d#2F-B3%7)#NjEhiBRdhh!G
z1bYrd802|^`Md4*QGbAo?{l%zK(y98IkF6+cNu#g^9z;<KZsE-1Ca=ECxl|D01c9Z
zRTx{*5mR>1s}?b1f#I5^9()zulMceQ0%kU7ds6SnnHiykrGm(4I;Q?{K7!w+i(Ip?
zOC-?4@^uGVXZfaG$|GVXT+m~I0^ENej8C^@=fABt+tAhg<AlDTZgNo}^_>UU>wk<W
zbUBR7kanR>u@!LbKq{bOM4Bl%gk%O5em^#Iy_(I)<J9PFdwyM9L_IiqEo+kN(a|Xu
zXeC?XQ27z+mZ=C*OSkSuZ at c3j!Yo*5ZB3N5F at iEJ_`x1G+MqoK48haJBl_HS6UQM=
z(OHrQH9kqTEpA8AaWH=k;3lTEwZU=Re1fX_vi}GtEO5#9 at yTd}GX~WwPPM~D79>>2
zjVSAz!^3^<r$3=qicT)Q&TVgzXp^OywtELWKt~odJf*zgwMDH8l^Rb~@8%cZrNMV2
z1te9Y|MHH6c`(FV+??vtq@(u~o3C`rT0VkX;v%?pD|3lt4p7N+mTZSaFAJ9)r$U_u
zn1*Z>6D0YxY}4rLuy=EtE`!wu4ijsLNITh8Z^UgVs~`Tf<Vq4QJZV6l!*Jn)xwUd9
zg=f4Sk~8#ucM9-ids6coy;?ou8gh(=L|r{2?7G(p`P3BITwkwwbK`=~H|rYOsCy9w
z4Hz$%j=QJ}NV0fKPG8Du&8FnzK;Qh4a3%gCXX*@&b<Nn1jli0MON?6vOLUF$5bu&x
zI~E~+B10OIaNr|rvM3%|X$#Ehg at m8RK%cS!nQm>*(c>%Dalv^0W1ls3#O5k}aqlE3
z9WuB7GJCawl0g4~iZTr at w+2Xp{8Wft%1)B1kZFOoXdkXk$MP at ZQtqf+)>eYxPD3Yc
z7q1xMG&_WnE69Atlo$Nz0h1CA;}KYrO9`W>VR}Wcu0(Cksgt_W7K?n0taXw05p6t`
zEk7m|Duzsk7&J}fnx6kRJW3ZHEg6avL6VIW$g&7=#9mn{lB`My<YSd$)Sy)@#0}<o
zaPC%iF6Xs>F2-A$+S~|{d0jm_L2C_A31FopF~yinjp at 8ZRHkM6k?^TfA{i_b>W3g5
z5#d}4{vl>80n1{MnX#>)Wu$G*i>M6NZd$20H4^Vxm>A-3kxw-Mfq0tkDi7IH(p+Pj
zH%&4Fc{$&iU$lQsjiJ;1fnz4W(~YI}$4ywGwnUhUMk!fNh#_jge&Ng>H0pIcaB^jI
zAuYYu1p_L>Jfkh2zC38saTS4T^5zR@!LJa6Jvuo*9ZpO`7fm3CNI*)0*NOnk+_g=a
ziHAoJW03Glxmf^5D*8P=XD9tcG##|kXngdj2daX?1k3r~B`p;)KtURW*bY)0EPYn)
z_mc2TK8HyaP!mlWc5G3S=`e9*6JhP%kRALkoo1-&3f;_YD0Xl7A$%AU3`8c!2A~)~
z2U#N^SQs23wn*_|2SLOGJy>AX`)`nV76Ss4fSE~C^OOP08l*YyALA*K6i!quvQDu{
z;0UbelxcBd&;@o)5E8+E$^(<Y&(7hy4ze6VcEM at lVWR@lCs<eh`J{m(T8%NnSRe<s
z_U`?<y|Z^OeSKFF2^j9;xYFw)fRC356hTxbk^!_=KUr=k2mU{4d#lUKcP9hFTR<b8
zNag+{QMHSO6s^F7QH9lz)BIm6db|~R20ucfo5Z-qobn~PIkGoe(z2`A!9fl_OcY{k
zPP?yhUSxvgx;Q8l&On7Ji)a062vv4#stK5{B7!jw)x{24Lf(3-sc!z12skMryU%(|
z8zHERbs)n5Md5&mbRfr{+GTRe%3+rq&cI(HwF*h${Lr|2=%|zf5lAnYd}w at cf3w@M
z+sS%|G+mSVW>Mnuil(gSwdD}a?)HCnb|2k)@N9c$yH#4}tiue$9o+ae0cmIm=M?dp
zz5Y*#EY~v^g-(*CE%h10tToVrUo_4){J^uoi^~wx9J=A9<B+T+6tFl4z?TQDKlk6s
zo#Zgf!U<vlYx$Q9Ev&^)(_lW(>|upAB4g6h`mY}Kl!^eo*l)Q`bQyXp-Ydp`JUS at 0
z09Lz)EULns5HHP)V8X5iIJ`kEMO=En!NN^HLU5U0Xbc?5$H$PqDUTvqa019ZxcUZ2
z{ezQr<a3DxbWr$r?ntv{0y?v&Wms~If~(-ei+32d#{;d%l8Q){-pG!g9gk?tlk2E7
zmq<SZGUqNNZDuaOPvD>KbL%mD9Dn|%4DZ}V?;-9P4!5M$cv?ZR?FE)23k(2U{0ri*
z@@6X+#|7JEc+DlozDusrv0J32%fi^x0v~qxY0DoD1ErS2^wTn`SnfI(`N{?pxF at Qo
zv$ME1(#K_d7uV_D`60ZoW6;+8MS3y#V#@)x_^1q6zG#C3LK7NiIKxV0repXOx;Vy5
zolTf+o`ND7r at ZaMr~rCpkXdUaDG?CW&i|t0p%_k9YD<o%U#hJbzV%DFRY2K9A}8Lc
zkQhN_G=|}%=0TGAf(bv6Y^07Mv%2(Cb)gSm=F`L{{0IWm9%F)x|B?=wGMd|%zZXcA
zfhCHXWZvAq#5R#_IQf&c8n;*O!dlMvm%ROg>cq#k`<m^*z?`c(bW^?A8X8gME#Kj&
zJ%4kxaigHtg?2Kx{vNdaZ{9%}gG58b+RetTEMhbmo($O4+y=O#8UgUD9MGzU%)@4m
zv83g7(1d~23ksy{*H#od86n4WN9-~zEH`Zn77DjOi&l#Sn^%lAYNjdIfd$uS%Kf+4
zNXNl}y4BajZBZTe4q&Q;C9#S7bLSU|V4yee9npx|J;L#-IgGR)U|3bvJ?yx*3HoM1
z at W>`OEz}0g-ZF;SB0mY#7igA7Z+*MftSH4HC<VqjOee$GRl1B;u2sxi0mj?7ZceKP
zY|p8iky}c9%-ocb85p?3BeJ6SGW1xDO<US|a5NWj`ABW>$b<#O)z*0YbbIG%<D0)~
zu$sdn6RFX;_3+k(PU~`D>k_<C1_i{gl!DBD*lbPrIJPD at Gt`6nt;}FK##GNhKsh`_
z$PE8{X#9lfn1!HFs5ZF#eK53*75|}7R9-aig|HMU$r1paNDLQTHRU*asZ)-zhkeN`
zv7n(@6d=%6&%O<$7_42UA}cr?*=<Exe2z+&us2vD*KbD(Bm<Rht%Wu!c;5n`Ql8a>
zJH?68Z;<k$6_$Mb$Z>vp2K#7C?9mfow at 20$>>lG15fq(OkfG_8yj#L_F*@xXx;GLN
zLqKtR3cyQz$SG3e3|3$<GJh%W at 6fU{ltP}#=;7)SGRJBijU}MPrIN~~O}fnv4u^Ba
z)58<yIqB#*W7T#ntRBE^3vBlR^-_cPeiGp1S;ag^j~CQ{HWKM#5Z7->YxtM5F8+mx
zJ;yPCpsW?6;Y``Hmeupg!MHO}(iDXw05o}uTGD$PJDju+X5jchxJP`4=?-#z)P at VP
z!!-fho|lLFddKG{Cx{_~yBHb{>D8k%+I$FSs5@}}wZ at C<QcuK=qrREZe%VM{z=WwV
z6e**vliN$zmZ~yCMpsP9aG|r|w};O<SpYued5Ec^m!f-0f3j|wg^{;<hb_@;k&!Jv
zl=Yy`<!kaPXhZrs{7i~)UFutY(-*d`o1`^tM@}Xh*4Mf<IECjBXH6!zmq?U)tmo~Z
zH+^+`=?1a at yy|nS5D7lkJyLWQNfv?%QU=(JXh7zuLO~!V%f6Mv38lN0Qvx-?$@r+4
z at 8ayVyN?@|`@5$Yo=Q5LeAi{hk*%H$UlwSJEp<;Yz>=(dqV at Js&xB?f1_^dwtgcG(
zGRe+EOPY}JL!!lJ`$9Om4-&Z)LW&g)8 at fO^HGwEO*$kuB5;|hwh!kRSg)>zp*H8+P
z=wY#CByUM at S&d&GkH3+-sIZ;GzEKGqhA9|0htF$?+DO=~;nKF#r;hXn*fX}ZA<Xpz
zy#@v8?yC%mYowMzQagYbYX*a~644!AbO#Bjs^hS1o`bYbcTy$mgK%zG3fEv16t4Qd
zoM25>)dv;MR7fni@)i;&1gVmoUr3#iD7$ngeJ403u`qlM(Ppng%ozjE*t&mW at EV^4
z?{7S}o8&e$KdD^x5*n#UG0g}!@23`g_rSfMPfkW2U|9$SK63u88NElI#F0jIh}F1+
zu#rV==%jy)1oGng&%^92o<T$K=%+<AJ5pZql0bZHE$aDhy`E5>Yi3y}D8W$oBld`*
zIDV&E^VakMdIe+uV`*ha+-X~ZqeR-RbL=NeD<v6QW?VD#RukvYKQ%-Y!MMZ{s^EiM
z)5bO-W$@wB63OqHBlQ88F_I4EbkOUa^rHz9)`&x0`<JcQM_LcO1fq-f|Aku;{==qn
z??K=-i>x+V7d(d~!tbgF&>=lKjc{b;M<RYqU>kq1*zCGfjT67nqRNMd6;>+?ZG&Zo
zE$v${nJ($W^{}?gjqtxy!u4ubp=3F7a^&9&EjG#Q5ScjZSBR^{)>^N))F at Yb1*@4o
zEJWAw;xtVMuHls}OMZ%0ARsnZ*O|!LBeN*ZlT_6bRLTt0{UbaE$x|9h0F>QZ_3w{y
z-;_|Z37c at C4bleV(n4e{XTowXf!>hD{0TO`7?Ecdze_gee?uIE^kX-ZR>&v@&3{8?
z)VH_^W`xmT4g;a#`Kl#A-djbA=wl3rfgq7-rpm at u&r3xS3nLi`na^nj3hby`7ME3^
z=*pHAol4iI{S!N0c+et5Z%1QXTBwD&wyAeN{3`;05qY)W`F`gqlL<55!1eWw^>x#8
zDTx<!&5$XShMD=>;Hpq`BZ!cf3uU3IBry)TI!eys>^fSd7`j%9G at uor@m!@?I`?ZK
z7_Pw>FSz(pHbyY`!E->!w+Ah)!pL+BjwpM8v!NZJ8r`945FxXej at l1#6~p1!9d=gw
zI3qeOzN>KBvUrI$swZ0%sXCfC9h~-+CQ8MaHB$-x;qJp7Mh*UAbklGNRB_=plBW(Q
zbf)SRyMFO|;>eELA3G-%P_=P9u`kCFBlFEzG!<2boVs>pQ&lhGEZbXaYjlP2atpK%
zBP)+vO~O_`z5n#_!}Ry+C+ROTo4bQkiDvaHs2JHQyAYkpbecG4lOAiR*kV18Pr5I`
zLJnGlkJx2k>v<o>o7=UVV}86N#v+p(OVn(D at O=mZHaos35)$x|-Ro!ocw+cH at K7Mz
z!(niUF+`_JY>a9Cb|3_dtK0a?cRNpalu1Xn_>7mCgT1W4X at dmieo99Rlq23Tyo?{z
z at B(85vRVq*;HyBU)okRTg at n(zEnefLJGclL*@-a{p0>#&d75trfT&<hU!qa2El^@L
z-<k`KQi1+EgQwLGO1A3X9t}D}&<{52 at ikq{-hO#H4p@|nvnBZxa*kKSl>i~NO2Hep
zVR$!EJYG at 05DBugKyz~R-i%I2QYLVGiKz8Rf0o7(k=rd?CW3$rP1L9YlY^l=7Hq7D
z$`B(i6LJd8`C*F#2a}fz>#afD<iWy(n6x=BS0Z;$LK$qNc at xX!AUH at 0Y)&&-ct@%L
zTf}fgaLFCXaaGhx7BNfMLgrT>fjXA!JSKHlzT1EJVCC(&%j at s->TZ#dP;5j|v4HHg
zctbne!Y4spD!{YlrX^8!A}cd3SAks-s1l1F*6U>&sAyT|tw`cQI+LDn$!>)C*CF2x
zRy8Thfd&f=r4|z1eP)mDJ>@{_rr4BG0GSBQ;>2z=p6cBp%o`dH@&rtBy2$H$y16y)
zEDzxkg4uwYd at s|wWtv2Fr|RvdCz7Lb^-(QncGS?XHN-y>P!GAFYP%c|>o%4|agWze
z%BdOvD-DUGsk*7bgkjb&|It|whd1PcbGFQ@)K3PlYap=eZGYJKVfBYo<n8K at b-n$7
z_ at 5vCAA8^4*Vd7wJ%8s at oUrUjcFfgwVmrpM0AXtlh)BYY$H{602v7nNBMIBgWcRbb
z&r{XcbCCqbndIH*ml)}szE)RPSJ!nl{V>04@&?J at xzUG)nf^NoD%xZt+2^Z&kJ||y
za0r#VJXOJsz!eA+l3Y=GJy1vk7~PM(5&c!7c2JK3wGlD}+4v;PV4()*%u9VZ7&7Js
zyjtYi<jAfkM$$plDA7dlgiJ{Eh9kwP^<~I5{cri*f4jt=_kQ~I at 9+Nm??3(hPRJ^i
zJEQRDo$q+DgtZjyrE-a*mFJh<iDnFeW#7@&>3{97|K+bAf3!dG4M#MjIRC58MaqJa
z^8rIfh0-W%tPT2I$chE56L>M?ii5xcje!x!Ktlmibo%Esq-R)hQxh4vcr@@U$s5m1
zE!bh?G$3q=(CW<E2(Ad9h1HWJR|Q2f*RE8iIHH&VT0slMvuT|KcMoDFKWaP)+6{U>
z?HD$*0p2VIM3t at NQsH#-AtjbdDp=rGehlSYO;OInOKeEElp0=!na{|qfR`3yOpv^2
zNyxRx$9S?wF9}5xLPxGVL{jxj%)p;*ko3c0NBUXQ3x($`SfFs)7=<j8Qv7q9Nw9m^
zWwsnR&~;QsAvBm)@=$dgbOTpGwvG?l!L5Kk>@b^ARzrhZXd6c$SY=ri9 at dM}CBJ32
z9U77xT<BPX`T(Bi*y+8|AWN}0dS<M^u_SZ%U`omozkB3!j>w5*j*tk}X81f+Y%)|>
z_COlN;Na!n5p6)`gcwUKBT9D6n&veF&r$kYB6UdLw~(D?ykZDCL+?`}x2ja9@|aW(
zq|J$q8)f0ek`wh at yqUI0&J>dcjsZ3hv~D0l)-qF*f8Y`&E|oZ>#z at 2tk>223vZR4o
zuqoKEk~TY**&7kuu!j1P1t>{s`tsjp7=OPL=p<2yy8 at I0%BRB9rSx}5pS}ce^j2L+
zN36AW%8+#$VG*3=d6YI&F5F<cNCn+pf7$c8&ZSNdD4kUH-t7;fE+QF3;3rJK3<*e@
zkLKcFjZ*np9zJ~V=s{ARYo6l}hJ`(|(d1xxD2Jl(qt0?7{~?oLvvL=d3dAgmAvrRz
zs8Nc9nmd(7E0RFky8Iii1`HgKCNPi^jUk`<6~=B|%|k9I7-f}39v_fjm`2g0Tuf78
zvYt9%*h?WY<P5=!$Bc5+fGDQl(rUDB(v*O`P17N3V9Ce!qr>0=N7D=#HqK*SXFJm|
zBZZ{XM9f3-r$3(>7DCr~<E9=+1%kZKXfs5UXfcdIMq4q3T0v|-YYO!kR9P&BQnuh}
zOK0R%XNDe_2Td(VBgoMJ!xaTdk2_sr3C62YxV|a$DkXv_ab>Q~EkX#E_tyqc%2>V-
zKACbef+r?O83as65h!ohc51DJkAK~3)HkY|`;aWk&#ihR+27l&w5q>u*Ee1zwcVuo
zvVyle_01|`4#=$_>!E<l0XFvNem=8AERI4|;3$>i2rhsXj~3CsS^X(q#mOj;Zaq7~
zxSv$p(MA_bD!o)&sd?;3CFWK>k!+R<8+rg-mY{XcR1uNu;=p$)xTNT>L0WVt#Kstb
z$&JsCF$l!KZgFss!FXtOa4JIJ0_2 at VD2+U3;5!jIZu!B&^4AN?kDnwv$okdko+YoK
z988{`cY0^f&-KwSc(Qnepi^ds^2hNL;X`C|mbgFcSr4mZ^Z`OKj)H7XkA{j-GiJ6_
zRHltaQ*a at En;VZKd~%cWyZp;FCI$Fc)B%UbsyGPoU)dMN1sIz;KOzDvWk>d|H0Ylr
z5oQ-D-Sl)V^^VI&gTqTIIu{{Mt!iGH^{d(u;*_Q+9Pilwf?#3x;)|r;8t>GfU%5t~
zmVp0Q`ZoEWoTGBugf7Kj9q0P*WkQDD7R|?>xq0hKX#9V&uv6ghhg;Wah#Fs<;$Pgx
zvue!Aqh>YcF=c>&#BVFZ7HVXxE#%eEbdq8nb~qa4(v>_CF&bZ;(H0y1yJ)#jlC$yf
z+vLL#x{3bD0t0hBNyY~Y!?Sd}{dmH8?F)}3?fbD~4>Un>(=kNC>byBpYC>b78I2C|
zK}fNZ?|Bl`juHQ-1U8<RJz8d9l$d=vs|Lv20Ob0Iv=mPz2 at dSX?m&M#YrWL55dgtR
zv|@v3JxkOgTEEL#WZ?xq#ho at _cY+cSmcYfq*h{;#@)3sJ9AV=NxtNQ6(yHa1iq4xS
z=e&@S0|ucsEw2sIA8p5aRk%vle}YBqCq{2Ry*Y at A3^i?EW?0s^@nA3>56)*BlvWix
ztzgB;OInQ;zQgkoHqt5B#S_f25|g8efq+0CI8rgljF5&;kya?9l at wPY^;`*HoN`so
zHMVp(Ow3NtLIxo-!J7hWOD+=lOJn%O8p3d{hT1adkq%TmXd>;hSdQh~%@_R7J&{d8
zKcn$7*Mgr<*b_HjH at i_YSU&qvQgi?ZbCPp+ZElt`_j*JizBIDOe=8{DRGmnQZ+zaC
z^t@$$Y)&)$6yC#GNU&<w<2k48OmEU4X;GS3{eehsWDq|qa105~03>zt5a?-8I1^%_
zxggi8Dxq-CasPIPyZ5i>pNkkI#&u;#??@S*-v5mf4mv3+heE$F6G)ny#d@)ba>trF
zL>|9s$u#nn1)eJncIwP)MS&h$VdQw@(zPly)PS#hTMZhmfxQDV8QQSujhxNAqyE&P
zrTfbc&A6Kd=_zhba)MKnFu7GO((TiDQ;RRxshZs at aR4(Tj at 05NBY+RB_no&0Uo+4-
zT+fK&_H!-!ea(n?O9uRZI?Es^s3^#dN>Qx&?H0Clz$SqKb1Z^BBwkI_#95XB8cKve
zPu?T{vy!A4eQVO&UeE!Xr*MPu!g at _dQ`hE~{!R;8pmw+jw8}V+k#swUr5E`8x&Q5M
zwb|^#9Ug9f>~CZt_oc7tpL47G`xYH^KAA$_Ds@&mstF^A%pTyLm>T0plPy3EWgWL*
zPIQSNe5BTnEsFM4J~k at Hi6p*QqB-8(Sp9G?IJ%1cTcMU<8z{-b&ml=45f5fOlxC?D
z$Kac##x16ih>|?WT^lAU2sJS{>_OWtCQ9UzjOFGjlq=S7U!r4jwAl}AU~sQCOTeo&
z04Jg+6cx*NR{4ay71sK4l;1K3Y<&TA<R~Xa4c>femI+}T8T#e`HmJsz4O7hKrx4VM
z;KQ-$Qwj`aP}ypkJQLF4Z6%tJ#-=5D2;`e){2ck@#36Pf4yUZ0C$lL8t)vrHXkWmq
z@#U~Dre%c7Odk$v+EmhxsJILx?6q}EQcJu~N?KtUw*Uhil4l($3{xUl1KJXJ(?rPN
zTYx=&3KZ6wkZ*{Es3>)BIbp^+Xd$v?9F1Y^%&1RHmf`Ol5G=!A3;)`k#{3TUj&Cpl
zq25tI&>eq?)yj0+*G}Dxw*kWWUqGC=MtUt#G~<a8*8q^drReW`Frq=U^%%ifae!BJ
zL`wOoK`cIyJOFw<9DG<Hj1dA1xf&#}0ewt5$;H{_2 at Iu$DG(jEn~YyA+TmF*F&~`7
z(9+%*9xXHpH3Dlv26(x^0HIG)EF>sA#W!Z4=)&X>dT(0Y|BO5v(kG^La)}YaS7Xc^
zhIEcOLT+zZgu}dW*o88 at PtKN914g?i<5L|g&-@(AWzkCKJV)k@$gv~8$Sox;fVM^K
ziyhGJB+oc;qLoaVpiKcA{IfCb55(F9law?f0)FRmheHbbt;00SoYRq5HEq_KEhHvr
zg*JX(ex4c{YDBw3x(}?wQyzNklLP<KSoek-OR65 at lH%$_9DdPo#bH70l_odl at 4`A6
z!)D27u;q=n8uokCD+vH}0{Yen;Iux2e8J?D!^-_QPrAIT3G_G673wF|dQNdjA`lSJ
zRG6VS_VP7a=R8~wLF;x4Zm6dPlfvxxd!SAu<Rc&h`MNg*dFXYLmB)`CudJ?oZ9LP+
z_MCM=hL91!HnN9Q6g}8zfEK`u1I!m}GnjW4 at +)N1QFdXZ!N?Kj6gz%&(LIElB0>v;
zqOqK9iO1o^>BY`f<p|f><i&o?l7`Xc#RUyqFd-8|afuQr&3!^Mm(k_nscVKDud(U{
zovECWRGpm0J}MjvDN<*6a*6UBh&Zz_=H&s#4|f&-!Zs=9rldz5&?a?6XIMRUBoqt{
z(R0OK(-)K0DIR_3VgAM)1p@&OIqn@^o^@b++{NX5fQE!$kiPqa_r1fey7-~+n=Xa`
z#sk!x={qln45t<VM?C9kg3g(vb5<TLCe48~#-*@hm&F47N9Yw4Sp!B3YwU=(tOUKM
z=|gU!P6_!2P;4{G_8oKy1;-mpvj|K|v+#4qsv=mwW%LgY+!V7dC?=YPyP(e?amM=k
za22Hw!c7ksHnymw6A&?Wy12q5az{G9BB4F*B7u)?@lt|3qi~2NPW7{8fIBLgLtEy9
zG14QGOTW9ny{*wDO-dt_LT;GL(Gy)uXXwon4QK;qatzZ;EIHxkmd!N0FJTfi9>IFO
z^->N#NM+B?F2^RV#(5V2yZX{iuist%_#{d8F+JB8^$JWs6HKyvCpm(1H4k~tzh{AK
zIu at 6LaqpnV%p!{k^Y at Ays%w&HDNd6|2D0;mBP5zexzKY{x4C46F)DmN43vdmyJf2)
zlFC);p2M<j&T={y2j)~RH5y+Y>!#v(NuVvQg^YMvv{U)w()gCi>@-sPOIQCti|({>
z&CrHW1Y7yt5p&^kXi_iJ_5%mCH*N_eyvZ$C3iv_&OP15DrO_Q`qkh`=0zV6B?;$A%
zFbtzH>}QE^AGU)1Ym}1s83q25qjq9 at v>JB7RHCukrWc(SMzgW1(j=qkX7Rukls`cL
zOq7f45LAaR5iVd|VEJ^`vLBfeBd~jBfUi=0OoEt|C*B^+Y>T%HH9KYg)s+O0(~)8M
z(utOO#{mN>zQWkmZsWtu0W?6Y{+aYGU_ at P!wFI6NhER9_3p77<1Kp|+j<fbh#RYsp
z;j*QS2~Xb$W5Z2=GHT}`TR<Tct(u=SyO_5y4E^bVYOZ~Z0Refz8KGB0?@40IIBn=Y
z1f$&Hm7J9%<T%kh1(2HFDVj_(4x2f>B*49344y%<i!VIGG21)CS!54sGkN}*Gkwgl
z6VnG-IEu(1b}}CkA=)3f|4Yt1q#^9#l7VOf=4J=*@pcB5MF<PbuW(X#KX%S9aQt=j
z%yvyW$%lv}Tnak59*Z(kysbOQ`gVOCuGh at sh!csP*FL<gYeO8}IC{fK$U&`KgtR3r
zU_7NT!C!VJoa<VU5uN8NmIS;nX1rl19Gq^^UEcqoCo+CvN#hiST=mstvwPg at n^l*a
zu&_4ZF<^xV9qW>r0SAsaXbyDV)SQFVp-r}j4@}Z!D|+z;oPWU{$Ld!(sKO!`M_eLJ
zSAmOQLnVnM7U6Jkp<FVEEI1G%!5NqpGEY1mVeNH_$jWrNSH{=4ga^WIzdyJTGUT)x
zde0^EtpNdhhjR4V*3;u-EAw=_=^-r$<4rNDOzG)S at 4em5$Yus+2S--Ce+z9ZvaO|S
z#&eL}3OlVt)#tLm!ZmgC4B;Lu4FPvKq@^p#*5w6#wB(YLiA5lDg*v at 0(p6Lg^T!D8
z7 at xx+mf>e!dZ0T4%E9%rtvtUJ&lJ`w{1*f-<?}GPu=rdULc?T+;&qYPbThQ!1SV;}
z4NSr3UG+P~57~ah&}B3PPP!2bv>Y3o>!4tv+a<@K5QhK=5cg_L{H}^PAjUpcD8#@_
zYcYOfqFJ9a>p}Ll_aIxr_t{+04%);P^|Z<lQ>}9#dU$^-{K}c9mT{q#IhXKr9dIi>
z$=mU^MGte4ZOO^)$cY0zhxBv_Bq2=$Y%^Z|mH#AQqLMPmdt{W!Dx8&(E4uEDk at osv
z at C%N51gbM(*Pz<wC1-}>h}y1YRRB#A>j7Teyj-D<5bSMAaW)@}1Sgr~pY>zo69`Z9
z7GNG(&ShGlMM7{p$tj|Mtj+b#DWoBp`7XL4S-?hrCq&rR(ZE{>*{Y*DIX~>q?;W-6
zu#^tz1ZJ+UIWc at 2%d^ZtiB76&8`6}umD#I90i+{#*hA#~*gb@(z#<S+W=@|<DVeZA
zvkl5_<+jMQe4ULtnJ(HjA*xWIJY|m8C6wvrKR>awJx(N;1+aGBx*6(ORN=QGrFK?k
znGghE#vxvtv}SNEq9&x|PnSArT3vWrMwL-_CT@)!I;HMQuPC2Qv*DyMg8w1Q=2>NO
zY)H*xI5xw|gVtoDN3o%K%Y2YdT8=FP0+!SdsF at 8k<a4GAXT#`0f5kukmN1Dnk}BQ~
zSM|^Ca6s|kD8*J~?Q6rWtpEnm$_6pAQ^jA7(s67yDhwY;C;~FB7G&_b5Cv=w4~Nuw
zXKhtVhF3d8GT5%Rs)^Gf at j~Tde%K`29D>Gs#EOEY$=rSM{ws0f{wmCpVdo%yr`(1o
z5q`9GeGWTbM?c-kXe3DUxfc&IfN$Lb0uIzv9CgbM>+_cD=MhB<$Kq+7w?;pYw#2%@
zF45#^nqZwISMYT^FLRY$3mDN6qKt7w>4kM!H>T{OL_PTP7XS7RNn&u$-9a}|+QpE#
zS4a=}QZU3c_xaDmBV5=gorQK1+-b$!NnGl;I`u5v^Y0Jgn67=yaUtwSS8K|dqRHGS
z1^9)h5<(2oVB`PSQ$>gdZ9I$!!-C5G%_FQ6?-a$iiIV8aCf+1~nnEsPO6%!a=~WHN
zL1BsXRxyQW+(Z=N={i`2NnK}I<oS at KriYp>{@Ljk*{VM{)zT?UrdeT`-v`C=Bl<*o
z1u8^KEMf{J9`I|5PGOOH-j7X>MGQ}$B}uh|n${K~s+o&>vFnj0&53GJP;o;a`ZPE8
z>Ds1TiOA954I&M6btV<bPfa+at|O#w1}uo*xOCP#7$W>%cLed&=;Ew%#V~o2JZzK`
zZJw1=vMA(*;8T9$H^F*gt<qU6$jwU%8W`ZY2B at Qen+J%`GGkk(qg{XX)qF2K^LeU4
z*g5X?f&C+ckH%C7V=%@WtpS2EeuU!cB>9gA-#mEy;68E%AaEKjTOPo45xNB4rL5wP
z1~hJj><KNIk2e;Cp$h70ti(B7+WN>KHzy5xLyDfCXxvQaJ)-W=jEDLRnD9is&D(Jx
zgo8DpXiH4nQMqJ#!o30M&wIR}5F887B$7gA{<j_)+)g7mJUCx+s~I_C#>P~HkcDsG
z1v7yR5?iLIop-5ARR96p{L=WsQDuDWL#q=O;HQwi&8eM=8!pvjYBetbgxXYXL;0E&
z5(rJYh8EjeCrEm|@|S5 at uDD*&^NR9Yz%Iyo61<`X3zO>Q0x6eDs(aU-s<f*T^hxbf
z=thzUYJwu3yYRU|KqW+k>yBS{X_eMFGcA{?kcF&)w_$8Wnn8j+x|jS|VhE-m_1n>r
zej!Zt+o^v`fp- at L?tGg{gvkNLAG8b;J`M16i42+78qVeTnxhG=UhO!t(*Fs--{H)L
zpAP$@!H53!CM)q-uQy!;*d9v&^n=024GBn&_*jsVllr&E18Wx=ud}RLE}ZfLOIRQl
zW0{-jEsi82(f at -JL0Oe})8nxvxo at BWPMD2lA!RDRn7rfTSg;O0{I~;mfwm?1q!{UE
z2>FE$(ods-&AZORmNKo!2Sre6U<@SFR=XDF88i)Z=3FxwPBd_Kz{b;b&F8p@&WCp;
zzCeC;n49J5whHSx0GYf_QrlXOJ7MDN)eC7L4CK!)kGcq$k7HgfD at L6@0z>_?+lrF>
zY at t9vu4nH$M}=a+$W9&45b}KS^hZlVal at hJ9u0Q+J*HSZm1Itso<u~2;n5lFA<Cua
z<sTQ(=#RW--~aB8hD0q<j(h_M7fh35GHmViJWAPlPH2^Q=;mh`FY+8Q at Y(`9_srE0
zR;&muvXBfns#qAi76n5m^%8Gm+qC`b7prZzwZX$w53oh5>%K3~zW-8fm>#$r!I)lm
zmF)n*S}+Sb&715j^8Ol5(UJfuvc?$rUVG67vXz!*!#LXx24CE7_Q+<p;RPtzbD7bH
z<zmRu8vti!R3j|S!NJZl%nFv!_S>4MTli#G8;OxLPmNse$hA=q5OriLPx^}xRfZ at -
zKBOuSS!4H0m+S`Zs`x8y%Hw)V83bylsfVA~cPx6dx*+$IU6yE}>Lp{bx6(vCQ$A3w
z)Xym}?0nfPAF|V+KdZ`PWV~4{6Vkof{u~N9o2j6a;06V{7%e3 at j(&2PoF}*=C%xn_
zdMWIHsSN*{VegP8AS)z(nO4+9A2r4wcpdN3hV-=aUQPK%@axr-333zQrm(?eq7E?{
z{fMC_+`^6*BtIQBaS&-lR-#b0XkwV)Vp-G}WZ!TH`~V+k<jpmM6W<KpHOQDan^KI7
zF9N$!49E=&sTSxdLWzRC#^-ifmMyHUqIGw6*we;c^V7BWn()?uKNJ#2!1Ko#JBkmD
zK!hD at MhS{l00DS}9I7*o0h}Kz%Nl0Vro|C|bLgm%ZNd9Xu%eq_#{C7JApnW at IYE~L
zX6P|P!`YIaf)2#G%ftUmtZFf8!Ji)Nf1!i;F2)}n1JTXid~u<OI6^O!()N{|j7s;c
zSV4p};=@6yQ6a~Z=Qt;xaPQ0=RWja4cOb3&`*e&r0GeZ20w~Q1ix5cyc=^n;`YwnA
zXsv_APF}RdaD{l<dqy05y3{MmGizZGD1iiE$VNvI01XMEWwGUdr&9*9JB!-faT7Dl
zDV1^B44g;ZWx;x9PAOajCV~s1%cAtCQIC>6FnH1iVUyH#l1ngnF{v|lI4|kDaEed#
zk7eScpi$QwYyqWyo{EI6+fN8drVEq%5m+nnF_snz_ls?Uf5DE3HUHV=IkSh}bjTWZ
zY}%OFA;)bYg#LmPtpL?oDf|RgIN)IX#Y~~CA24jW=y{!Tt}XF~%WW>@USwMjmJUwF
zF?F1TTp;dSJdZ=42k`*m2|+YR(s*^a_%3%i?0-Vv?^gASZjmTGHol)UJT^a1T?IHK
zekUJmz1JZ}N(+NiGiU3Cqn75ve at LB+Y<Du_zK?mK0({S=j{-)m*BgbVgPo=6mFqUm
z!%F3>S*1w`41O2Dn{a;sJb_K0%<=F_uLAH|(UrLezT at odo-6VFezozo-E7qx)d{yM
zb|E{Lt(b10cC+1pDG<q__M-0 at -XPb#kZpw@#$C~h;=JbvuYRpK55s2fq0z}3y-+_8
zcFOMp67)$j;%>sg{%yG4><-3T$b$tNwJDuV#Fpn4K*z&w*F+i#Co^FtGtI)yfYTwr
zP&`;iu6oCa^eFOLMtm$Ben2Q3Yyu6195)_n!5eY+f$m}oIiHb(fl>mdUiMn;Wia55
zGSX5?G_pk<{|Kp;e{19*c*YZmm$u-gW%GloCJuxxF9aodO6##_?-u at gGX7S!Dt8AF
z3e at JOr%Up7;*#WqW9CYRpLvNdkHvMNGfXFU?l1tg&G3URvo at EuB*z05mlx9s;xzU;
z`>K?lTDyLb`x%Y;!+8~aUrdCkoOE-1+j0my*CTz9T#JMk3<Hlb5+nE+jMiqb_b+bA
zy>U%C$wkU+)}EJlXFuE+!iJ~eway`_5g#woir#}1<Iw1{>r0{BT>Tf!`ggm9bF9hz
zz#%rwC67}{^X$9mcL|vMLnI#-GftI2RqK7knk1==1KV4ePlW6>x*}@h^9k4dlDW!q
ztk=2nyRZfmrx_o+6xtjlX9)re#xE2c!gskd*f at 7JAq87M8_-V+k~}eUpdA#r7jRR^
zs-*WSD&8Ppr#p3i`W<vFwl_E%$f|@=BO_f?2i=jlWYZ&CG)HN%6M>DUTGby~Rw}1m
zW0a804Wl>bi1I~$ah^^vYYMUxuo-^Pl$Gas79%@x$g_0faCV3MN~C$b4kqk7vvbj?
ziJ_ at 8)1WNcq5i98N=S{;IiV$p<K1}Y(x>3vY-AIhJiQ$Djf>?LK|0c!T!q?hrSUd@
z9XNpb1FR=QFO!pdCu^3!6WPZn3C!Z&#O`B3q@@#>6&YQ71g$8Bx12vPkFQ3?V`Nzq
zuZ>Z|0G$XhY{mS3Wc&tw+Ju at N7nckd;q%UT{c7CZgds)QH-9g=e-AS62~D~MFd!-6
z_Lb=devfi|I);y?d2SH!lPvB4>F~PdsuNWz7*m1xz~c#r`BTA~8AOzvv7YU<oGs9C
zfPBScz`NTyFUH9jQ^0eZg~^{|{t+Sc%K>QGt<cYooPXMgf>O~OM!kshw+o8R>S2(>
z`lq{5tl?g?dD|hP*PBA&S`k#~k6Caxc~s8OCDysd(MICHD#6)CThh-Y!4 at R9P$b$*
zu;?6=n|N~H4#BdPbv~34V^>m+3Z#T3no9XScx3GVMwvcW$x}qTb0*96SqBG|HBJKH
z5JJV?ex3SBVytjgj8Ymh9f`6gNgtrrGWHz|1Y^R?;kZ5Tn4oX$BmLnDk$9%*FLrC@
z1m5nQ_h38L8IHhwfagH$p91?xq&PccVFZ|9;i)14LtM<+JGwl;aDqGdGWKAa4+;mP
zQohB-9Q3sF&8JX&3#c0_WJB>0#f{oV1`Y}GyWdM5=(F5?Y#QQxT{?J)TZgcI8qux;
z!}+I&!)HrR&yIZza63Hv*C7iZ+yWgmfW1B$bQRO`j{-u*@y<xhKKDkI?Qb#4QLe(P
z2S+}Ui2aVHHq#|TCX~U_cmotp_>(F2j7Y#ier`ngd|FsfGi(IXgR>4oXldjs33r)U
z06`-gCA5ur^dVD~TN=Iedp~#2o+KLxoJpc&u4ah3G?5+_wWbyxHc5yHxkV411zw!|
zc_Sn%UmfzBoELJq;0P$@VL50>n%8gzo at D2)FsC5`^y<dM^Og^n0$$x?h&xpzzAa?L
z;UU2=ZU?=-xclU;+HG7-2?eg3xtpnkpv@&$VSeyHAS$*ZwRY?6UbVemYfU=65evPo
zalb-rW`}tnf4X7oPdKdA>F8&y7 at dxOhSSkuw|8b`8 at MMT?su}3Ji5cTUwt)cfE<SF
z7S|>yu at L<4xLo?r<wr-bK7=DU;9o{I(XwSb?38e5{>*zLKKZvEwjGmIKCvIyD<7ca
zG~O*3QH at TgpbO7NVmqjS=X$aQcAg$dV1_yO<HzOYIa~^VT&5|eIW-FgGecXCq^*Nn
zX{#e`^>3xEBWY`R8*Q!Vxc+vdwm$h{>-e(k-fLaOEJMe2O at H$7I)|!VpI1gBAqj+o
z9pXD*gHN8KJF`eEGy0vf&}nG%ckw}DFNN9r;0TwyD>%A{r(%DwAoj$F#Qmh;EV)EZ
z0L0hEotY)cfw(rkh7~NcDNsP78C~bhw^5!Qsc~tvf+*|!Fz+7dpdd1YHaGP!)Rq`2
z4mGzLW2)dr65#4UY%yiZI0q$|qEOL%c`+Ab-a)8b7S9Pt77tJ1H?di1Rex>4J?MFl
z1i(w%#i=iZjMyeSWrElS=N}`VnPaw7xt=-$OP`BF0Ut5NG>=RitYnqkOffH;C at 22Y
zj*l2w^uZ4P(~d6#oWSTM7mZoLmHE?-&%@7Ji^&sk>3`bsS?B$q7zwiwnLGr|H=Lq4
zUw?#mirOB+@}qKeG(tG>)9%R0HbruYLis0yZB!QJ|ALL*go}rT#V1(Sv57*#mu=tv
zbryDDlAP=rm$2Kh5u9ll!4M{4NIt91dHi-JWHa(G)LY)Z`PlEnbj;a!L27jiW at E0o
z--*dsF(osJk08>t)a>(^lmQ~{ZYN^>OgvD#cc<>I+0oVZm`|Ydx897cbF{J{n1+|f
z#BXI9^?CH8GwCK`fTgayys=4|AY>4{fW&(=hHJwSWPhn>KfHq!X&zx(G;4yM+ep!q
zW9w`(&Y18i6Lr=xQl+2~+_bU^a7c5k4!q~};JMeR9Bj<5ErFP`UD<w6$?Dou<1UH;
zGJDTBV{g*2<Hj5-FOuUhE*Ws@{$d=GESqj)1V2v=GSxdd9aC1GiBcvw=lB3)k`_lO
z%VbH%1^5>5^tTI5CLWPFtmutnleuLf^bnQIt(QQvz;<Bf9sKElN$p;js at t9;{OhxH
z^H(q<KO5lKgT>^9CYhsV3it#u6QZ}mgB#Wa(EQuX8=@gZ7CMoNh&2b3{S6&p&=fvO
z|J*}D%bNXVw+WjLY+*7qAZKT#s<2CZvO1ZZs+g4|rgXM9vsWbn$ySeh4QL>OdeJu#
zmMK>Vm15_e8fEUbyjDo8f^K*)yBJjH{CaVjeAFu>$NJ=$SiDO9cHyuB0^m<;3ndBS
zHN3%U%oZc7s2i at vb%KE1ATCxk?Re{%%(Z4itIiaXO{3U-hcHlK!X%B@>ssLc$k|8v
zn?bM+6#^T-L)db4hjY0u>4=;xyj=cH0opjWG8&F-*;)SK9mJM<+Ut`iqt<wBPSQCc
zfY at BpJ3@YsDbd5;{b!pdW*aZ78?V;uKeRV%jrM>3G$-LC*5&|-An at 2bnNT_`Hw_Sf
zni at 9F4mI^xW-&mpr{3W&YicfO0G7sP^ulabHYizl)adk2x`>a)F>VUw+k%m?Zs=*V
zMyVf5`BR at M2wrLy_NUB7RPJUj#6FF4kKrpqSWUm at SD1banmUdCQ<CNDV&%*i<02;4
zwgfS2&0XZvkVXwgGuN8jyO}YUwM5=;t=w%ANQr{;f=7X|aImNC&CbH#(I!;UAz6z0
zaQ$*T9>A>KP7c~9`3jj-V5_VuvFooK4BmreA2+G5q~caqJ;k3)U2jX7(}o~9bQeWa
z{LAlrxy{_L+WaPqZPDDs_ZEezjrA>hMnu`^AP3(yq}361!H-*6#tf|U7g8?FP$J*#
zJ|O7}Z&da8taovN3`&F_MK9te8w`=6AKZAq`bw|6j`de{k!+EG=77~VvA04j^rB<;
zUgCWDbS<WFy-fs35x at Pyb!fboB=($PI$G5DuMdu{%6CdmrH+tJlDhM5vKi;bG^ztl
z)$PI%S!xS^ER)b!k}<<Q>Ta?D!AlP|<h)O7qUdgCe2GNfCj(}%9N at Myd=ICvmpD_I
z`TOaqetCY}`2|v&h3+E!quCN0dv2zM;7x<GE^a?I_7GK<whW>&jfjN>Xb`7smR3(-
z2M=>PbC+UOJ0p93$eq5|$0VS>XEu8b+yKya+c}hc3QWHG9yc-jc+~B3Fyaapg1n49
zb$96tYn~9ke{Cc_vNS07FToHq$js1;dL8$@P4$KwC3EM9FWL)o+0RK5A_h+%4=yrN
ziQKDCERoQd>9Ha{4WoBtZrr_0nA<WkyY}I(G_5GYJaG5f*qqto^rJZ#_rY~UC$ULR
zoSU1tNP6a)^0KG-<G}zqV=z?s8Ah&YSn$G>(cx^15=RrX<*0dhA0ed01c6SBpY-+6
z^2kIU4s+IY<RJ|aM8rQ9Y^TqhsP)wGY91^s9<W9HDK&9)_~?uId?_qiBnBwh%YY8D
zg>Vv<Ao97RQLzr)3^kj6+LgDdr=tx(n)4eWy|Nfn(A^gL9EeUFgHXrX$7DB8h^W!_
zA>6OAO at d2&h>0_A7zM%~ajOteNMwJr?UKzI|J&>VWtx7YU0^x1Df_?|`?u at _yA45p
z{}4OIg6ogCXZ~pWh1w}$v?iVTN8J%KhF6-&JoDbK!MBk|9K`?bqH7P=Va|zah;8RA
zu!#(b!L^tVt4_l}ei8(MV}Kb9>6QK577Ie<!)@~*S<;xtZ_Mk&V#Xu{+XOx$y(|+L
ziQqOC at e;+%G(yOZ;dTQEM_N8Y++WuwY54wRs5 at u&iWOfU{!dZ785wGEI{AHY)Sn&m
zgOj at W5@`$lTX=~-x$2n&ESU=j&n0_C{=qrw&%O&R|Mw?X9R|_-)O)Cf>i?-TCd+Eg
z$U#{?((KtB2I`s;=hvZlGn6^2$XO(^Q)IXlq=IiS!sgOXsXC1+Lee%{(5Fu<=arhr
zC$M`dZE9jBBSy`%+N?I4wfgS65(YP9hH2J`rFBK)m{ck~ibnSW67mh0Dk9!Vs=?eL
zoOeD-<lIbY2L=elM|9RJDw!U_PUmBTDI90&9!AQUg0APhm${QTN(FjJP24p&u^ep!
zdZX6}U4A6u_2jw3BR5571Z at UA9vlsb;^&=T7~tk(@BH!{?EHE6{GdylQIl>W;ez*0
zE{9Z?$lzQ>nCL7a3|$ZAetoC~n%{4$iN%))p$(OVEq8c19Kr(Q>`K)jh&+d!cxUKg
z`~g`IkfpNUr2?Tdyo#zJAU9;tCQCT)VD-jkwZZTZqN<lp^3 at 2UK4^<#enSSohmbPo
zBd1W9Cn)3=o17m#3~np|h#<U`8&ttjFGHZom}v?d0^d|Gl?QRt8ZSuUTFtlp`lfcQ
zRY;dk2gBY!fh3(X%9gE=li&Rtr-zG}j at ieaCKtGlPZ*lNj~b(c;#n9OxLPc5_Qnt>
zU)z`i)%3`2ae{80%tbX#1$CO{UOr*vVj72aF=;;H$Z)eSM%-S!6!E(W3lSIm<Yh=T
z7wT3%Wn$?iXoN?=tnkkg`EU(Xx$U-Dwy?z9reV*`CgqQoc%`x(O<1jL;ZI&MKdu{Y
z8Q%aWmR_kHds5E2N^&5E3v)AYOEWQ~<<SJ-%KJ}-r?&EGgEpZ*r<0WQVebwDh8W2t
zx1D_lrrQM|%Q(C5MASaTkW7GVy17pVa;CwX!8_dyrWu1CV$O4LFNtAIl%t?&1G9m^
zzjVyZT#~>BnX?gEm|+1~;YeNzV}K@*1WHn7!5{-Qx*xlTmt(^?T_sGg9ah8vf*n=B
zWZ4!a;vWMOit^n=_njY~OPq-r&rDq}dot(poSAdhEZnS!#Qlds8Kwr104K>*UEPm|
zT>zltW@^%O!TN?>B6%61X?aYUG|yFID=~3?%!siPrNj{X|Muv#cMLm=$#p#nFD>b9
zPHw`qx?$``*t0R*V}hIx#)R4IP|WONaKX4LU4tTy8Ky1FBnB}D1t$+OWF^y;b^HbO
zg)j+4oNcY&m88bRHe=d95xC*FeYJ_L$IQgFh8|a)*h`voyjDNy$`;jOjK$AgxTYLj
zo}2)K<be?pAk4`#gF){*!}ihT`9(fzn*C-a3qd`aMgjY*5t=n at LL^fOP=lSMmS`jq
zuqNwcyB%C%$MNzd+gfbTTBnTfZ9>(Mo|qdKiju<3;jY586LZPvaM-&TJ1aBEjfeT+
zOz57#BuL01OlM)E4w=ztaM;6EkQ_>UBmE&yU+?hLjf&Y0d5z0_l#CLtCT=-yh_*X*
z<w>MFQ$p<M<UW{J$i_|4A)uI)ba&o-gcY=xg4XN}>Ic#Q*ybD^qzB9iQqg$OK~Pwx
zyDg}x>k`&xO?^6{8na-Am2~p^jcroM6C636LqNTcg+upP_3m&u7>)|Y;O?!iMUKH9
zZVok~+IEQ%r^h59a+PHr#sl0qZJtG<9poYr&Y=r7IMZj^5H9;T`H-<tGa<1_0pe#F
z0#4 at fDcr;0RCWcM#lZ<=1GH`A77+==Of%}h?zMk}y)d_3+o`q0xdiwZf!LxoOur-*
zXq%yqOzWH<lQ(f~O-M?N<$@BzZoJHXp-d}>II4nH(hFr;3&_LF%fvzDFO{E)6+l?+
zC5eTz4jnNw=#fA;u>}KjQ9JC(f8ktO1jkc2mm>A#=@>?f^lSrRlfSY-g}HDg3RVJl
zeVfibfT4{k$}GiWkOZ!PG%$m0D|4#uP<{nB7eqRjNYLH!rV=_Blk#b_0xV&uT#H0~
zxAVStBF440e)#rf7qO>@5ME7gL=Bm>dsDs99l;uQR0mQ?>lA<$S>DP(%6|=0H2ifQ
z=pX}ab46f1Z>eq@^d at bbdvt&TLiO;M#7)m;YrE?x6yDlxj<4~)$Ae&__+LQyxHXGf
z7K|wB*4<)8Tq9Wa_yt!_hHXyx^y1`+5gjw&xPj*)>y#^nn0kYTci?p2M`*Y+&H7>a
z1}%vVlOPK(PT1p1u?d$Uh-Vm3j~}oB{4)>p#$LZa!1=_h+DLLBxG}#gwctx;5`NBS
z9*bn7hT5CRU}6SMe%m*yebFckOoFr>t}(JTyer8eFKIm}^@ms4fX2u(RFo;fT$b8`
z6;##VJQBnDRv?(^_XD8QZ6k{;D2l5f!kj5ZW!5W6EPVqfKld|IJcC96ss~8(j0C>;
z)kEUvlR2FY!3|DK?V$ng(*Fhyjq{yj*hu?#?+~^4r<He0{9`W-X(#@;wF!;c2ELGi
zV5}>P$pSyg9vI#ZI6gTKB?YoP4+^d%FOZ5t-baMEbHFoBnKR1?LO;Ocg=wHKkqYww
zWELOv$B&^J?$RlTue|a8#l##_4gks_bs3r=r;|lKnb~RrL2Iv%VGNFsfpgYF0$djJ
zw@}iLRe0YUTp~X<h^lS~i?^otccp&kefyv at q{toPi*x2l;e000Ur}=9ew;6oT94W?
z7XEUg1ODJgUUP)<D|(&ln3ryD;x+E8BIgZ1Zlzz+dCq7iw!U!P)&-CRhs^hBeojgc
zkO&wYp;uVzw>;bRmBsrB_}+zXpE>^&ll5i+DvHfdE?6CB$z~X4Nf38ls~qt>GX9%u
zVOn|jIKaPEyR$a!)rw3HokPHg at heeIH=o;NtBWh%#RS3)J?xns0x^^U9nEwc?mijb
zRFqXCI3c?h<sw-v8!%)!J}AX1B6WCbb{B5iP-ezOFsYKwWe1xDB1HI<rt8D?Ri8Ui
zFKRR)8#x^BUY at I3)Z<=0s%uha-%~*IJSxmnzy`q$G7RB(IOM at rfVCd!-DZ^&z(R`|
zHk7~!z&Y9UhiNT^k}V`Fg at us7(lv>4ewISv0{+g6!3i6 at 0I%5S9wPKLRKfJHRtV;k
z9&}*}EoiY699X?9D}&u;P8#)IRsI^Q0L?7oxN<&B<;q12k0sZCxPmQ~mVRSAKw-rL
z8_qkL+xHOHUA1~VtHE5k_GDj<<*|4=-*J2e;ZA%d#9HKPpFDv=y4Pj?S;rbG-s*aQ
zY6lHlThY$P>PKY%*q}=i`I>)4Yi8snN4 at vfmmg9`=#b}fERH!KDKBf->0^`rvs=!c
zEQh%h_pFR`40i{G{K0ZX0MU1y=Zj05gTqUT6ov0zWOC8}K&5un$#W#WLc)WexD4->
zIzN$N$qQg*g+!Qj&NThDQd(^>=T<;hdJ6XD*~(LLIns9oOOF=V43!I9Um at Oxe8?@{
zO=ctO?bXFLW{ZP;kStfj1?RnyJV7x_FnK3`zbyz4jMKgE<-e;qouZ=xe22NMK}JJ~
zj6wV_nLkkSuL+}DM94GDt86LBB;dJRw#maGx^a1K+>{oYsKG at e-6bo7(~@C8GLIvb
zviZ*0ht3u6%fL#Us2#|1a5vFHWXf^93_hsOJ4*Ls=ltSKj^LduN(LS-E-!wBP6P*~
z3_NMRtiMT`tx9XZnQlNO5F_)JHfL6fsdBNPJH0vLBnU5nnDD|g8K5V~`NxjV!n3Jt
z*)SY>h)+F=!|g&;F>Gclbw78<1c)L}46;S|8ZsJoR<dn<IJ(b((yj*{JWmgX2s@$w
z+TarzTs|<j3fvf!j{*`L<C at in{Y`SrL>ik`;;GjRP6nt at rY|qo99CbNjH%?!g2XEr
z;_e<{r58g~k$h11lGWwq)rIBz3(KodfJ|c*nSrl^@cF*uuX-fTxSJq7A`%h{8Zk35
z&_Tpb<$!&|#R1}H_M|%xh%-d`$~9MzBM$hc%yyHydMlOF$h!|tEE?hmHimJHom53!
zWn6D<V2iSe^qg^z!)7sXGn;ozw36NXt`_Z%+z;2XyJAZ;YrSU&8%MyZn}U_aQ5-u4
zky(f?KM#<>qa^WGa2}a)$Pte~E8ya!w(O!nlA>mY5a;t^8lToII*B53ndZA6Appf%
zFp0cGTL^}mzDs8+aF=4`x3Czn6r+SJU^H-~@>qqL at +mnKR<<9RgzGuA08+ at WuPY{t
zc at DM}A^;Ili31cyo>!lZNZeWGsWheKu8iTDqhyQnU_>zPp1muvJItVcgnYCBee_IL
z*_}#u3ihu_-yIB#h@)E}x1E^A+h+3r#tq0cFun+s`4#Qc7zEd<8Nq;XNv$Efa97FL
zZ8~}d4{19ZSKK^H{|3ndaY|NA7GeBE%tIl9@$ql9Z?ZDxp2$AZhlUl~&U=Xo7FWPH
z5<P(b1 at R_+gtWv=*GITmv%!lEGdMm#+=>)8m>z*hghPRDJQNVv{9ZA2D_=EH^h62e
zDM0 at 1h9@SDO=p=b+=*={;!lEsz78#-N$2yHuOPCKDQ(%~JdkKKLY@}Sl!Ez4gqS4)
z4(2Q{BLxZXBi?Tdx?+q(h?qA48T88<1}~#1>S$OJ-Yvfbq8gM;cr%Ba3`>L7+a`Z;
zuugex<3{UvUa*{-QWqCITw=rLuV8;d-vQqX)WIf(6 at w~*QqW|TYT)nkQq}9t^P~&X
z3Z5R<(erZ{Qlnx>XN?@#ZZi1`X5_En8ozZ+(HajJR8(nAIpCJu*n9)FHdP2xF;FJ3
z)O>0VkYYqnY<>H1ZN;8mtS!X<Q}H(*hN!1U?@A^*8WsY8Wj~PXY!Kdv at rG#ic>&NQ
z?b;oqR5d4HATg1Cg6VxiPa4apxT}1&+QP71*fXQQRnE>R9Lkv??m#ANjh^l|ncHQb
zVGnQAhrb$oq><gNlIu7mn42pQ6?8G&NwSI<fgI1SoWjJ0iSj%~h>(T71*@9vZ(lLm
z_862c>hn5iO#+llmWghLnD)+3tbj!&dY!W~uoZ(3bC7u+jZfF+?mwDKPQkXEj at RZ^
zS98J&E|!wf at X*B9bI`mv at 3c-~Y*jmllvRac(r#PCUalAkA<q&mv3Sux;rmj4H=Q$#
zA+8Uy_y)3BSvW+e63N^gqw at J>^2i}`PGN{jE+X=T2`!1(j(58FO=ih+t0R@>^ie)t
z(o%YHblu1TJMb9!)1I>zsNq)MgL{6O8|6uRATjUiLjifY1dnng6>jrzBZthtZGBeC
zvS?vxC_)*@k+%ak5WsmupMrBO9kl6|Dyx;^*KTzjdRTHC!Lcdb9|0hF-3#<W{>qC|
z7>ko68=Im)lEQ8AspDrG5iGkOF9t&{Km^OGJ}uy~0pBq=87Y%DOOMg)PO#dGANVMj
z$m@<zqR^y at 4>q`HfHC<S5RTcG2xv;=rliy4=wyC6+{r>*sY;k-xmD)3H13VhOiMWx
zg#-k#HT`CG6E1zei3G?t;|zitlZXDv`1z at eNce%i&AyNZQHua!+ACa6Q++a2JU;tx
zI?)JOPkTp4T|^$FzylGcttK#qVAE#j>gkknv21GRILcKGIk9t(*{*zWLIEc6t~I?b
zK}>L-y774_^~2n&Of0IFAb61BWqr5JHC9d=!Nu_EGD**F#wMaiZvS}X!9A~aGdb$N
zQ)o&Y7Kq at c_;m)nbD}Q*dn+bZ2 at Utu#!6WOLh)8r7rb3VoRl@`${1XP=bXJzPmhBc
z$H27qBDnS*cgP{w2j%&L%VS84Eu&$6;>wey{HCN*X<raL14Mq9%we}Y_v7-)3e(Ca
z8jdggH(*D?DhQ at czQt7F32OQ=bM+lTHh<!KdR{K0vxoS9_0F&IRsXEsx$~SOFp_iM
zp1C=j3yf(N5k<4M*?#dMBS)l3*y|*n_nqDuksb~P7E3Z#)*`6`no+WD7WlK8J;Rt{
zQhd;~*MS&7{tir~9c|{8ln((mt95g1Il=0ztvYB}B0{51%a7Z!ZvNb+#s8;FQm;$v
zjIDsRIQ3Qs*wYS$@I6Kdv(4vE#mrW%Qb5kOD%;JfAzk{4Vx6Zd4eXAeJw1beL|=1G
z`2!t<O3sDM(Di_Sx at 2pG3KgKEs2jz~_TATd8CfZbp-cSkv3+OBFR>ZN)220LniK7~
zke&CiX)qBGaTrBWx>!q&`3bGNo2M=OWdxyc04%|eFaxGk%$oCUR2{HvHTDgB`IaBU
z&FBwQaNH3gpDUu2qBoXPn%XL?bY=yR7e;fp!@*xGT6D-%EZB_auWS-qditf<bi$-R
z;R1p2O0jgdJE=kjDw0xVMrI|rB3N($%U<Mzdsw0H03p0fPXozM4?+bv2+btKIe;b{
zlj611%Y|0HcH$y_&6m^cu^tU at 3=hoI2 at -%E;Epy{P%t|`YWpZnwf~l6IBmihst3!M
zM&J_`t;ilSeH0eryUFemF)pq at yO{RxjEl<R`3vh%FdiRpHVYEA@&{P<txF14IkCCv
zORt6V=Q<k-5GwZLua!<2Xt*#05*GyWl+>$HWD)&E$KSzJdL!}11<^p5%Vag&woFc8
z0t3nBumdAgI2}RdGo-mISjG=9svpx^Slnk|AE9C%XH6jujbLnuG)}5{bS==kPin!a
z#|$5N;VE8PJnJ1$y<<lMrYFH|SuHte%tKRaju6Mz<)OGCXhpQsIUAgew0mxpeCGf)
z=L;_!lLTv2irG7nK$p97W-}?7wc2e+C;B at ub&$c>_A_G&t9xgJuzGrn&qv^v)LyFA
z3RYo_4TM7FT&sm_Ltzz1l!PEf$7Fg)f_k|pY*a0Cx_U&H79<~$oJ0m?b59{DIum)5
zl9SJ>5+s)vD}j;mapkC5%$ce7FMfui(YnN>;PaEaNC11ylTLvhih6R-Ia at 5AT86p>
z#~SIGCqo;JYNb_8Ue~H`bmQN>t0-pwn7~X&AU}tQbAY4`J+h^sM1$lImQC<=?+ABd
zsu^-wh9Uv(ab22peZ8=}vas@)c7<XaXz7ktR|;jRkD13^OLc1?IaINKz!k0o-=r~w
z3^J0Vg9Q;CANLN!QNb33mStB))olEtxLJsDJ8wbA+O^$Q`*pR!AZ5w3wdCP4KH=v1
zH*76r{~#pE+2nJ1ek)F99%k8Hq at -;HJ_&xjy<$ZA{Ck9h8BON|13VSgoa6dR!J8Cc
zGvhAcaz_*~#07=>(<OhEQ}Ly;?EeD+53EN1^5^H%AplI=xvCtU_xcO)pn;nYTzpR8
z^L)Al#$*VC(e7votOw3hODnG5CwKbS4<7u5fALBEU3s{?viz5o<!@HMez>x-^6>s&
zmRFY_u72~EWcm7CUBAZV2-c}d@|WRYFrHL<+WSd$f5-3C*lOu64wLgI^sFXV3!W3a
zSTg#s_8=LL at Xv_<KB2#>iFwhy=pxJnt$~k{rUq!(f(-=CjMY`p;}zs#6p3vh;h-em
z6?5aHF*pD({9l99{s_X?r^CU)L1(=B98B_Xv^W}E4iCFfrkr#a`w--?{^@vp at nmV~
z!-o%xgW*AMv;f8&_<4EG5=-BmtzC2nu!3JSEty`e7h^}JMmK&lN(r{X_zi}+XGjbj
zsTa)sv_acChNKK6#I#7fD~$NuA@$L7YAG$Hz}!1g^1Xydu(%C>=)o^e+TDA(XPcB0
z9J6F=xG)$=^yqBx0Rnp~d~Si?C-1)p?JPu}bh(3c=!{;WkaK|*xT3 at ww*quvCp5B^
zpWDID*N(8F(cVRLp4G?qxdPuTEI(LS`6gLedGhf7llx!)Ejhe`(y2W at Pv$u`u7t>;
zd4Oa5;qje$e{_}#Xen0Y64di-0MGbzyh~`SF|Je{I}xy;usBvfct4Eu1GrdY$@>V&
zE;eeQNT~*(2Z6_`?Ms}!I|->4%;;g)hP#~gsU<@r3nP#P9-hP7f`0uPC=)&vFt=xU
zR>W+Vs82{*Lj-0Sz-Yd6l$>({7{Wb7#)O$W+zh)gyT=_5&wv3ZCx}{cdSMrxEm&qK
z1xtFtJOIJFZ;wA=gPvyqSh79FF4J5cKtFivk4U>$;s167+pmSYdY8o3`FeF(6d;5H
zyoPuW#XjaulWGw at 6}!rVt1&%J?kYMnK24w3Uyb?6STjVyE6zKrf*OJ$M#yWEp?N`(
zK&g!t74w5Ge8>dGlL{nj!sr^r at g-dgaO}F5Jh~%JMRvk8 at tmdFW3AR34Hh0fdiZ!@
z)_Pbo8fqP0_!>DQlQO>ydXE;w=2Qk$RBWt^gRAEkz6jSCwq3|xCOCl0$y)L}y<30*
zOqvKh$EAZ_NzSGt3vIM6+?Oko>A at l+#3PhFoOTa}V3FYocOqMYvJAN8TX;QM=-q>1
zHaF8z(r9ffGmE+;g?SrSBeEIH3mX#P#A9<SEcQQPpQSthlJdN?<n>Z6`O?<GAY)#W
zThRm0_3pK_pan~b#BO5vCeR8PR~<nDd}17+4-lOMna(*2OOYg_;m-bctG52ORc%*y
zH|m?U-4|FX=60XH3~>=GvwEpg=B~@m- at 5U0bJ#1b0{U1U4uvB~Oz6P$Hof&ebnEZC
zVGoLCU*- at qIYK=pvsBDH76mThH@)Vh>GGIvOOxTCLg~-c+Ie#_9FSmu7 at 7iskHI=9
zkP|q at UShXifj{6e2Ba8KoYw(~WGE3WMf&&#GCn;~5SUNGGoull4)+&Gk435pXF#6n
zEDB*VgpY@!ww9m~+?UQ at iPhPa;{n3cyV+{c|Hzz{B9p|9F~fCVaI%fMogt!x0jGt2
zPcPZ)OF^T4_h~N?7DOh?G4>H`kj{x5o)QyyIF1=O3tI<3krr$eYIE!oA2{k>ziHTn
zR19gp!~|;ceqOtP*6`FcZR6fxquQnj0QVk6wGIimacdG%f(m9bkfsX5fdFeF!>~Zi
zY2%Ke4Yno^ygO0H#^c-$&v&0qemZ9d?51~T&hdE8tU-)s4c?t#*C7NMEct+Xz%Y*#
z3U9N}SO8>)>L3xU2fV;OL=}{!cPzv>DGo4~V}s{^swh}A*r!d$G}$*9L?eU8fOdi=
zenJ#^(MG?xJg;z!2vsom=}783%L7vm^07i~R8 at e&Tf#7d^f$%o%6LGXmn|alIersh
z21I-UhI83k#Mmlf5qTCC!rGt}Vu)EN)3Ip;*t^b1bPPxL#NxA{ikwph5zxp9LSkU|
z_4-&W1P#={9e7}@LZty3T*wRCP+8^xpGO^*JeH%H&!5`oa-wmZc*41a5Q+2%X14?`
zg+ at He8Vd`0-ppH+<ryFOABsa6BuMNW(nJGtFg^kuy<ZsUU_nsoUb1pWSco6tEE$9>
za9yk=U)t~5Ir|I;;}lTp%q9RZv+xyNArq;@?dKR{qD^fX^>9}ks~07k at B^n=H}F_c
z*%D^AUrgcY8%3^}pwpNAqx_a|8Ndeg1<d>kNV{6*c+xJT^yDRH-{?qd{RZb#>mQzh
zJAL0RGu#-KNrs2NG77tQELmk4S!$gGd0ajr=4tr}#I&H>sjCpt1>AlZX%0l{$dg;M
zCVNBN#eMn&i8xG$TjdZ(1KcHjTa2f)nCvidf<%it?_BX-#UqJ<ogiiyfX)60rl9aV
zFPf07s- at _Ncv3`){a`XkGjYj%J*;{N5QgY=2YSxJ_eK>1yYl>@UD|n!unp1U3ikHO
z<JE6rC&Mw9DwbW>0-cX6u)6ZV75H0Rpx0lO0$;lVnHHqL179H1!hN>z;8Af4QsCi3
zS3p`2A|RtYR1(GUV}izZ$iUK`=>@B%^?~;m9QG?FZZs-r99M;FwzKNnS-rJ(ChW3c
zjjz44DDDEE+#mNK^C$lqVX~b#dN>0RQ(Q;z*5a6QFqTl7lP?MOU<U1NSu3tUR5s7V
z9zi4$p}roR4&ifBzlYVMs at OI0WT)(#=0DDA4luwiEGmYBOfqd9ggF-Np0eaJ0E&Q&
zyN)O-p8%JFMN1c%N7yG^G24N$74NJ1bUuCxhtqISkc-I4E}{snu!#HKMC6Glnu|f}
zy*@I~*oz8|SSUg1*uuL7ZeT`^1-UR|#1ez%VZNK}>^EB^u=@U9a)b(4e+Zy`V;18q
z8aR|OUr at f_dSnfRqwd+hDUVZnAjoW+cE|RJ!89<5aNOC7Qg<RzHbbQ4%0U;b*D=rc
ziCCpmZ_0hI)~^f^unLU;voIO`mt(Uig<w_}L>rv6crT-N0l4Okr-F+rhrC_v9fb{R
zCs=3MHMT@{&D7!{uI24DEMm>h!JL}U8kSh at 77VR*kst)0HgN|If2)T7Wl=;#5V1AC
zukn(5$nf57a_{ERW*DhJI9S%f03vm?H0I_)8xqeIdY1?3E+^z(05VR(fs3t1k{3SU
z$3g_KVTG^40B33%;yBA3_EW|=VRL2IJKA1<DpP;Q8oJLrG_R*C*8ld-Lrb;mkB3U%
zV*T&x!*3p}Wc0re{?z|oAJ8|baYOy at wipL6Q2{iV2rBm;yc^?|G5$oN_~N8iM#D<c
zC2l5?3c-}PIJ-o41_X&xZZA??#z;rS<^4xaak;#bEI)p-`t_5Q2Pws+sOqFS2u*pT
z;(_{0e}Fi`xP;NF=_JvpyBG`k%%v}k6u6Dx5D1>N7#Kc?*s0BeG at UjkSb;FvUfe}K
z3s~SzBvtMun~nNjvRP?W)+^1bkMCv&1ZG5%lnl=?!0y?o3vO|!nnu+bltpE*@$yxh
zEx~Ylg;xqAdQMcP<2X!&dSn=3^p4;~A_qG>8;FXTyo2LSEoaNKj3R4>h&1(Vc@#Fm
z)Gsa%&U%LeAFFDT>xaybF(*+IZ1}(AbhqvtY!T9-a|W$}@P~PH+I)terZYsTKnUw2
zJxb;54a;Q?VZ-(Wjvm3$8#fs;4yKxSUs$@EJS2}O0fXU2l$<jv0(rvmU;t$&q~1UT
zp2NQVGTSfT!PzZ?mw7S4O*xtxUO$ZFTB(_W3Gu^V2br;D*nyl$2Oez*%uGu>Xq>tA
zu;buDC;2m}nS=0;mw&UNT<#9TAUZWTwuG!>gdV2QPHm?uG0w at E2F>4tupW1OD!lkb
zt4=`{H5%OTV=N=M(iwtfk54V?$O8cB`7u27`u;t<{e}njmQO_aQcC8ma)=zVg!5w{
zA^A^O_u(?m9`7X&439XkGE__!U%*SEsCjcNn?TE(M}nZN0G4%Ct}-kS(`F*-;pwn^
zA2LPqu=04tJzly0IKm0Dq9x>`z@`!()TNVu_AZRhPWijAv- at n-D!bXZsJEeS=6!7a
zZ-|!`NHFtSKS1lNh0Q;3gJy$sd#`?6UcQh2AIwc_H$7<EH&KF0MMt9=2nc1OPZ|xF
zq50|wy67~hD)l0j79F=Wj|ZJ5iU9{D)0f75xTldUfr2k9yPMlcGz#2j`UJ6E81>HK
z&I$Bn!qU+gKCl__nb&i|R0KwD5_g1XA`N^P_7FY_z1o~NW=m)gO^k4OsR}Q1lS{ug
z7PgGM30mw(3{ORo8iq}i7=s!(8m>{a8TfOE7d&!gtFddFYh=o1Q}_bz;@u_ at oUjRK
zjX8e|{|)=ybRj*YL<g3PYfEj+7J*6VNsJ~=1`ObhFC+;P2uq-X2iC6G{&t>MEPM<L
znfdc8_|EYVko-9K3tJ`_(cnu=!tr4AOYcJ5^D${wFzMQYM>sDelsLAfwA6tF5h&2R
zIJ?4c?a&Q at K6})pvM=#9<ecn4Awhu&LU%||;Jt|$j&F>5-IlSo)vZvED-1j64Dd8D
zsJU^C??nc35gCAf2H~g~)c*qz6f^Za36k-ekC1^73^;PK7t^qSRhF=U%wfWZZ1PK!
z(={_flM`3y7_?aDNIW6zez5$m2(4Wr(!<vI;gM)p1%SaXIVJ5Q7*-j2TiCXtxZ0fl
zE5r6)p>8ch8WooJMUzEbqjS3AJ_u8_+uBNi?Jxe-zJX2eN)?*k>;p$O5xK^OUZu%W
z&IeTc%lQzmib{#!JK``Oo|a3`|NGs$C!-7a+CTZ}r at Q3$g5O`2Yg<Y6hg!4M44>Zl
z&M}wId)(qVv&Akzw4p+18GOfbd8&wI+8u=RL@;zO_6R4O-6Uuz=5(UsvYiTx<f5&u
zpP>R at eU(2Z**b2A%NgfvYXW+YMKYTK5K at mMrA(|*&RsD(l-agXxVTII{qD!nPj}0D
zfc?ry%)gq$>(0`&mHYMA$)m|YhR1oJGO)uA{}v(y3mGzBxK6gA>uyb3FLinl_Z+Rx
zUsG2zI%a09I1#N}%khbZrfnQgTO$28KJuni$kG<uoS!<UQ?!Be!J;#Z5x!`rvp*>r
z9Q~8ZvOMLQI8`w)>Jj9`Y<EWO!^;WBL;gtF+HC6(b-B4-Yr{NByS`bcg?nfIe00K9
z`;WwM$Q)z(qp&qlz_yZW2EayNeq~E&AbyMpA|@G6x&ixJ_KM*TloOh`1#LCMHDR2h
zV6bsl?d$a4Vl-n()0o7p*5>HDT#^9EIf$p{B(7jWwWS!*fNKH?LzP($%T(qRLYRFj
z%JBq!-5nl49<f6<ttp}HvQh9 at BmI$e;!*CXIL;^Oz35c3Ef`Z0`!oGlmV~_GyHf3>
z4?TP^G-)5l-n1RUHqEgy>EH{y*2_}yHeuP~bquz=jQl20o$vVkjV7z~bGx$8tF{?o
zg%Pj0_j5S1a58ABb9^i{fTNP2+BJn25K(lGw7n?}37!Pw%3*iIe(m>M<Y-|0>bwcJ
zP5PnwcBg<{q;O^^ZeFtvrDMP_aX)b2xr444X!*h0vD<;nGWI|qU_q4ro7;Q!{9<fE
zRyApgKc%n2DHbEH?lyPMPvzt7u!HlFM1Vxw28pmm(tjuHdywrK^~I%q2xOlg9Uz1S
z)bI<MyDs?v-Ki at 3tiQdSd62=tqJU;OxWd3U3Vum0rV-Q8LMEU#t{<4Ax)3&kSLS%b
z9ZHT8GMgczh+6;|MT{=s^Y515{n-5Jt2>i<d|qC8m6&?2aL8-0I_51;Y9Qy|l-(It
z!410fEo5>$0x1VHiAU}w1Zn5sa5CzcTR#R+d`;kbPFTZhz_HAG)UWELdWVoLyhxQH
zq~EUoYVT8b0`PxTUL@?#Z*;-3xH<d0ZH at 4+)B56GV-qQd at A2Ig0eI+$6X_lzoOC52
zuG2eEPLote5YQ7O2Ff4gqMIy{3X6(P(DWtXnwNFXKE;7wvxSN5s7&3Ho|&kXFMeIg
z11FQEobi+R7xtdW?h^>W#E$pah*_N at 8hrH+p^g*H7u79vE&!nd0d|2#*eyRg+2ZAr
z)hy&TNW#7h?$XMv=c0w}%*uh>X+VvNgaQ!5;k3L at Udo$L!1N5-z&Lh*OeXjzSdhur
zIbYB%^h5#`uLXOYicGmv<^-0Dro5tW;wb}2MH`C4 at DsuKCtYBD!5hywrYY{1qb~4g
z(bKcs2iif-sg`H%y$Y3$gN$AxfYqBw_G<iPy{Z;?dvQ5BrST68wnP}MqEf-!P>ci1
zG)u8ao+2#FUakS8^gReDi5riQHn|r`D|)15*4SjbaQBkT9SZjcQ<XXqtGI1+5x at s}
z5m7 at zi6Du^wJx?R6;(?*M`#K}Spd<r27`1xX*yQ$xH(#jY-uwtwrs1=G`XN{Q<{O@
zZE12tUM-UCAP}p~G$0Y7BaM8|_29;1lq%Lb&Kk!VWWn-F2k at DOZiVU<>X(rmjpaC>
z%*Uy%KOo75QM;;Hs8L#BV~Wp+S%(<>Qx)L~tQXz!F2J>MdfER4Di<2`ttIzYzxn!+
zRd8CR3Z+b70qGR&#kJx(NX-Z>M8RMpgGb+3K?Dy6$H-6wC8pbHwm8ZNK&=AA+{m$+
zDo016T%c{niRqSkhT)0D8k{#&Wk{mhIcF9}>e-HvRZMyiq93(OBYXJP{>u+QW_lM~
zc~q`ow<ugt`jOoeLb0N%l<7+I7(C1==xR(}hGm?N-j7bYM~*JHEu<}jSJ{DvB80G{
z9gb_5cj4H=A#BXxO-A7?0CPj}TOy~fXMGKu8`q8ZE0w*XSPdHz_yD2pJ|L8?a5ahj
zxT!PdrA6Wasm{rao<cxqBe~+-=&;JsRp*j$F!s1|^NFa!o#ZKw8rp^i*dVLv%KQ1}
zo}^|Ne(9q2bw$`<hUQ8yL$qo2;;zT21<{o25Pf6u2ptXm3W&kU6cvmbo}uTwZtZ-B
zz7u643<8Xhpcv*SFzogOA_Oj-xsu3oKy~}-;KhmYgMDb^wFmzshC7L=qcE~)ehgB{
zK`>gg<L=-%RX=q}gg1ES7vENPh+^DOG{TeL!w6}}P&B|#MzGt!8^1xK#W5_8Te+yK
zS(Zr%O3}=X$&6|AbK{Qg13%H6ed#E(J at SGRGTbF*mkIrrBNPc!<ao!vGDoXDMcrX5
zr)MDP%upOLx0CIKf9 at ttYV6@jIO;KEID=!r#{LL~8ceV>O3F3Z`N^RL(yX!5#N6*3
z@@1KZv~(A at H#zEI-az7f-0hyxQb{}#Iykji{9bZ3xRf&x92eqMqhn-k=}_nrw&e1H
zK1rUM at HpN6qAQL#IVVf}wX}}0w(A@#vKtS7c@}trfX}oa*u97!_IiB>hF>&OfPEYW
z0L~P`9y9EubBRJ?f(A||sI2C5Y%4y}+ at j(%%RM=8pzXJ|79RPwOdD9hzF6-oZM%oe
z1s|(hKYm<a$NyW12e0-}xz{335A9~QjoeRd64U+4*U5VIUb0<{hM_27j>XJiwyHmV
z+~Po1#V|{5ZFz&<!l1XRzFdg77Wl;j4!s*#+FwEaH+RU$DWH^jwkT<{*njIzYRAD4
zu3>A;yKb at l_wxO3?ysiozgJh5AO0Et>lz at wanT#vfBzZ(3*rm#(SMNmU#Y!IYx>6z
zoHe}(1NQjI^5a5l`i2o*c&VdO1qd5qw<{M)$dqlq2Xk0t>@QIV4HP*gn-+1^$MMtG
z$RLKYQ2?Z*(iGBhh#<q*MM6+yOxAICzZ{?9%z`QC&)qXABqy5*FM<yCb|k=v9Zbq$
z*$mUf53o0RGnCZJ$mrDoNzWW!vL#=)4*8xqdylROurN}Zbs#h#2t&7cfZ0L;z>I*y
zjY<HLDHp7)bZRVcpJ!Jfdi at E|$AAPC($G&wZ;*f!;MU9t#TERU2aoQ5{otGQ+DxvB
zqaU{}<3*wK8j+)u?C7`<o2W4K6mW4~=trrptY8Cp*%mb+KqyeO5-}_Z+9^P6(`*EG
zyN0eGc^kl5BB7v7O-Md%aHySvVsXG4KvJ19+-O~d5|7-RhZ_~jl8L1Sy{VK7Lk;YB
z4oKb_IREYNG~6(#4%u=BYUm8bwUyj3BRW1!9xg5~E^9Ee<K7UHC*7lD#UYZ0ea~N=
z;of9O=P!@IW$OCO?9n+B|M!nGPzzYVE>cEFCDQfSjmiAq*AG|kKS=R^D-Txw<o~V*
z<Qta0DgXDqi%z;j(*vG$w2cO)laT#;g1xq=8X$^NKOh&^19~V%u~bEma5y;WQ&j&;
z_X_*^$ofmw7!}m`(1W{^cv`sp4hQGb3etKmB03sn=q8le&J`m$tiOUuMOTy%WkVt!
zfH2 at vh{is2A*;n-4nvC{4Gu5q4<c?rmP6V_koG6IZ-cf#CVwRSR1n*MwMAbAsR5Wy
z2B{U#ONt3_u|+Um;g%rmXZRk*6TpI?s0rwVXmpS=o+4H$L;#~h^nv&@6{vPJsvJ6n
zSs%pgT)N8(K#<LMlQxpxBfi3rq219xO5h=wJyN)C2SQ635~l#+$G9{~G>k2k%`WUM
zL?Wyu{E3TiD}}qA5h8uCFohfvF-PL~h%}KjHlEF5QUiZUVdy|Y at g5B>58xKXy6j-H
zy1xGc-7wVNF~gvVeBA1QFgEe4l*81*+y=_kIJp at b2PXOP{m05AudFPr-cME at Jz0J5
zWCcv}S at -<0#L4yUrq7L{M_^)>+IBB_FNtMKU(8cP)%<>sXzDWdfjvinAfu8rCg`Qg
zdecN!FI6_`{`=-8OjWAx)#hdk9((R*wb|aRZZzKRwZcb;I2k=c`T^Lq<b5CxsX)35
zzsHNg+11IQzo5%7zFM%e87(r8pvXx|mF9YFx6*i<(;8bEX}}KhMfjlfMy=+?)vWFM
z at 2%<&7;(;sq?s1Bqidv9@%8Y1)iv_^h5fp|xwBW_e!JDE at 1z?>d+SF#dzjo7Hg?!>
zQ0dL9^=L40CA_tRS>G(`helHCNBRBOI_YlWI$<|hz?VCf#w#~L54-hRs|{~B|EAU6
zsPFH(_2>KT>h6oy%dkkj5&rstKeNEc6i&eNTr3>qul_pv*(_ZBb#hCHumW5{8aCwK
zJX<*F(g}NbH5sYa_qVpHxdRdai4}ldfQ?Gi&2*z$+qSdfcZOJ1rD<uSy4z~hYk*Q_
zmYC!Q$nkK{L$oXnd^{8CZ at jGJk5SUSDSw~4XIQba(W*95%fjc)YVIz;7<+xtL>TQs
z>RQ-py1{y7yV~4v#9^aeZEV!m0hm^L!_Lw{eS5poLiUa<3}>pnv)8CLLB{eHU=p<I
zyBih1#PX~C#*xE~`tELZgTrcbb(PNGVXIQxE$D0m8c at XhmfIQzQ$p$2K~3Z+3A^LZ
zcI$6ZfgfJ(Zv)d(Ga({T_wey0>`xqiddj^~584ej=tg7X{%WQ*X&g;r$xpjn_e1QT
zJQBRos5hI{yt#6>Yz(2W==!<tH^S3nW53bB&S>X73y&3Bj?bE{$_^qD7)YB2U;&EF
z;GTtbtzo5ot$n3nr#~@XG9L at DI$5A=XzqMjf3vo=l>@Pv>$fYL4q4b<TN~8z%Y&_Y
zW5=VNJZkRaP_RX?f!x>Kia&riD{t#tJHS6jZRN?EYSqzhdGNMM>S3CwA|ABcrJL2Q
z3PMHaOpoh%-Wwf)rR?+(fMJvmpX!T7mH1#A&u|2rU=mUs0q0)@Dv(&DmIj?}_UHwS
z2;Yc at U|Izt>@t;4rZ at +=iM12a=(S1zX07>Obz}<4HmmK9ejY%u<wpTz%p0 at KxH;|w
zW3CdYI($qtfOrZP)m<Fwg=47paj44}m_-g|7BnK7e4bTzUst#5ds)!RFsmRLXW-kf
z4Xf(+`$&MA11W9x9|%M3_I>pSw`K9Q4w5D(je*7wIE-rbMnewFX!)_2Rmi!Ay}_`7
zd18z+osD4Tc*Hqy>(AGf?fo<mv;$tXUNevzI{0{=Pv^F3)or(Fw`#kaNJ$aSVr#qZ
znVNX}Zjn!EH|qY_AZG}w_ttF_d9c4*`ynJ<FRJyO4IFzpd?d#G0?f?D;Os2TM~1ah
z9A2tcz~Qk{wbgjb?({r!3u`KoZ(?`2>wyQbTOeC68f<ReyaC63vkf=&!Zvb-A9e1C
zIw8g37j+zUms=~Rt9;U9yV{lQq}?7ms7>Cd7M88InY|jopoOsV*WRmaItMnKt7$q9
zHaT!f)rjEIYR72*q6*HxzTpm at 7xo&UAP)cKAhyMz98;T>uHl@)+3ET37mfP<9xfjt
z!=}%$vA*B0w#g;99rv>OgQX8I>-+97tmPf-I at F~l8m}Qf#=<dN@^cTr+SabHW=hy<
zyMREY#ZxMHu-mHR_G=$tNO`A?tjh$p6x?OYk9pS<&=gt%ur=nbF$9!oITHoN`2$#`
zD1iloHaUtZfvb@{66_#Y!yO4y9wga;qPekMZ&nMgNVU-hV at kOz(yTaAYgTvmGS>~6
z2uC#%_p at tnr&=>w=4Q^x<zY24C)eylZq|18w$mpS8<Zh8VIFmMeG*V>wzt5TMLQDD
zuqQUnGaa(|7hO%~^|o>Q<uPX0P<{h7d1vw0p>14}F&oAB?P_pi-mY%BL)sDtQw)2j
zm|$&#^GOpdT(_l$J2(7vFc(`RAXuz`O_XIi1kS9`R1+ at 4bNcd`fte1peBQvcpA0?C
z)C-5_sK$1^vf19M5hDz6>Khd#bMah1sH{GSE=PRoC3V|%Cyl_ at m1W=9i&g*qjlV~2
z?^PVXvkf at y*it){S5 at 9f!r$R&_&(%}cCg}*Htf}#?KhR0TkxHVBfvZBjiNg<K*YDH
zJ2M^?vFci3vlp}Ks382R<7y)8;9K&mmaD<<B66n93r&s48LHHASKqGeW$2$)sl%}T
ztaIV$A1bu!`x`HFuFhJaH9%ZAe|1LrH?`JF3f}zK^_!M|0}(sZh$)WjY(8}BQ{x>S
zmpm_}+wr?|$BXjtbw5~EyQ9(~OxYhhc1MLG%pF at Ly9qf)TP48qow~!Z=+-Jf!i(*0
z{f(QCT#quFkg#Acay?3KLdavWqL~etsS^&(ib?b5pC?*%Qs4af+bUrv%*x~`OSrb2
z3quxUDUqad@|8kJWGiJL5%(B^B)@WcwE34)Ti0Ap4HB|12l)t&QTg04x_S{XGxf5=
z+kX2ZBN*`2M62L-i4IU|gkUtNMDTObpob_JqN^DUGSwGr27 at G0lSw7tO7sgpsOaC?
zAqwILg at UgvUw`8Yg7YNzs-WN9-!b=zTAISJ+U2>qsUXmqus_$ks-SftkmlANl00oa
zWIEZwOiU+Ql|>JmGt<>p1-aPV*^Hu(x)%cAEAJzbCZfK*+1{%(n{Vn3M~1?$1q2;q
z!g$gIJ>AeAg&LcosLwnJg?)QYAC<qYWcuhV+E#97L^~=fnnqVwCBRb;T1PSiJe3+b
zhmB5NYVbBO<3dPlK>Gd0RwX6mv$L!Bo0r35gdsz#>QOd}2C$e&bB!#;4G$?>BMXVJ
zMg)mGisHc?Q53cg@{=MaslwUSah1}eGLtYAC>m9>rs@#g at O%D%#8=P8K}y#E`(^3E
z_xp8!#5XFNwF>nV+C(GJ<29<#w&dQ%2&G2%41#h=?}Dk7P#A1|e79&+_i#OTO;`7}
z(+e*^k*zf0qT8rq6Z-2zqxRyZZ<KO1*F*h{RXm!8-5(5in)<2{FuRSA*=>SD+sW5f
z&(Lhlb>UaLRd0v9GBhU?V~c3Q&ZPO$$p`Rt#XYXQa94srcir5sRv}z<lMTLLfYa}A
zO#;!&LYjNBOo|ZA at 4YSxmt4R)Xx)EBKiAW+;+oQE2}#Jbh_;$cr)CJ=%#^;_a+rXx
zn^mV$(_grKWP!wSPtq@&s!dTi`RVf8^s0>wuco3gBo;orG(nq_`WXmx at Y3E)%|h4*
z5ITp8wZ9%A)4sc-HQ(+O=~M{etMjZ*rTMlQjp!|IZ95TS29^(DxBMQSY5W~sMBRfx
z?d6`OYo>&VEJxU3 at 7Rq{bZydQNnM)+>|V|uZf!WjQdC$VXql?`+z-VXXsKSHVFtV>
z&^KR^au~y%D6UPbC=yI98vi at 3VpbSR&4bXTXx;Yrh!8*QWOdEN|9!F4!dslzMM{(X
zJ at 7ns-9jbperqGz4*bofc4f`)cs%=)NYHdr_qx)+ahGC09IPjj0#wZ<A*c;dOs$$n
zLT0IoqfeBaN(DkKF24toH~y?|g<9PrVS#oV3kx8KQ7~lx#q2JqZ=9^UNZWG+?abIf
zppWJ(WU61l*xOjk7u&6gl_0{Q(`BPvT#RmaYBO&P<uE6)aaXIz&KR;jI7CVo33dLM
zWGrVoU48sm(jw3VQ7izzkWlRHNk(?XL;Us&T24-$gE%)9H;?FEQ$}E&|GI~#gQUa`
zjiDoqG|zg!(3-I~dWujH&rEPiWS;1c+sM#V*egMckGA-9$<&2+AnXn8`sJA?dYETT
z6QMJ^Jny%)NX9g=vGKC at I-=XavT7g6Jk- at SW$Cw%L!br|#43yi9P_xo8Qa)l2B}8Y
ztBqG+Y~Kb2T?s^s at 4>7Vjp)|2W{Bn&c->bo>!A$a)zlIjO)x0IF3I-p>@c)K^#^bv
zVS}0BZdEs{jhJUob^5YeNi#vI61CmkI#Y%OV{;|UlxzL|z|NY*1L$x*zIap+1Tbhb
zDyZ|@sqWNMcAUN`1vZDTUduo+7=#Q><kQklwecbxaySgrdgDdA7LUQT?n~^vjmo$Z
zX6Dk3DIJ%L<^$tfHlqc1#bnKExpq_F3WsXCL6MDZq>QUJOcU<6gP<FkmVjm3MlC!j
z$kD?@f!8-Jf%84IIN68o%!}YPPPey#wc_8ZjXLxV+od7`9PQ3x0vr|lWC9$u<_NIR
zUm@&bN)Pe{LviN%fsuK4_#WQlFv2%99;V~WbxJQP>spRI?9)ENTpluX=A`+ at B@E)N
zUH<bC+~bXd`%(A(;`tS0nIT at r($U~>38;A9=`TH8Tv_V&@k at JMkkJ@R<>=fA4YX}(
zy7!11K<dn~@7sKzp at JJ5ygVX!V2BqOhb}qnUjo)4;JhnafjFS at f`*EYC{|uTss2KE
zV$;g at i+TfU2Y0ck(DKl}3me+4Y`^vQ^a_9e4I?u}{XM<n#0 at aVcJD!=!9eeL?NB9`
zXjfjppdF24l(qGBP}_Y_HuJ0c!mBjat1Yk+?%oVC9q7T<>)uRm-6=7_)^Ak2JzU7;
z!$fwMltw$!Uv7^%`&s+8>P;UYMA&%M^w%?**#uD5pTTnB!TydLwf=H&BcOtVEQXu@
z63LAjhq;${Vn7QCwVQM^p*Xq$OmK*RGPFE(1;o_C|ANV<`(aEl-G$D+z}>;gG5B52
z6&;lQ?OF*~S$u7W78(2<Yo_=lmaHhbb2p7m2(RAy3Cqv+tLoeK8{o2AKRm96zdSm^
zLUE%}TlXcA{{Rex0|#`E@*Ak=W?OR-ht0ZsD9N+Tlp)*>mAISxd)u{8LA&`D!vC7v
z64h<Ln_wYmY$LQSm<ZY~aAO3akAFF+Vj30N5}8`^%h!AjB=SXnsBQ$xKTY}IYW at J}
zo!?Y2ufqsDe76FXzL?3mR>KKz)f%4AY}I}U>f^X`_NuTUvfbjVw;sojY9IllfYp@?
zY;LyjUB%)$=`CEaLqhnX3S4qRcm36F?!lI?0UI>Ym1so`abvr90okZqe)-|%C?-a>
z+{?=A;2>3oOWS)1$z^+wc8+5HZXVW=Si{u~%#gSNQdlpKVzjSqVhL*ixm#4P00OK4
zG26CZyhwl~KfJMSZ8uynaCiRlu2vnsxs;8EG5UZF;Y+X46%|ov;sets*MggNty#B*
z{R$LX;M!u?w82+b=M}jVgVqH`CsoL{y#q#UX##s#SG)Gg0cpDy96;2s=6G0u^>Rn7
zs9;?~u+s3~VUH2~a3*jxhjWv_Nfdm4lR*x(o3PCoD+&;1IvfbLI?$MRFM&;|;^-qX
z9Wf>O81@*c!f6ebDNK9aRLM}313UE%w|imKLFK0LiD<SV{)vb=- at _D-8!h);Xe7(B
zDuT){%Rz*lxiLZ->5p1-IZ)J!&k_BVI!f>`GS!8Jf<q8|uWfm#hi3LWxMA4)gXzoM
z5%d=oyAIyC73?=0h5)5XyY&*iM#-8=9y0K)aPnk?@W+oOP!nDTFNC3$hL at ID*KCDd
z at 8S^}sMWW&0&{C`jtHA at x6$f*IKXS3W8?3zB!7YTbCdT}8VXZSCh9mt9R0?Rke)!Z
z at QSCf1H&G)05u1OQX2h0Ea7wJdc at DyFoJsF!MN9`Z&Ww;J(ZIOo;5K)w{coq2<`35
zRZ-XE`~8|{(ZK#}F56=K(cXBuzw38v at F)P2JXM2TZ4>82`Yvj2hmLH3mvWSX-`n+F
z!j;ABC!{h`#4s-QJ^sc;jQ4~CEx7o=<{tXFfI7j?BJdc2o~}}JOQu>oMkIHju$ntF
zKl~)y5+Dcss^~Um-#1&qxr28&RXyi~Lw3L6kWPOEgMMB2)Hqi4Z3lF^0q&VRzw6Vp
zVIlqCMIp9Gj!#d`iDVmT0uB(Lc)SL60dm&<76QYl>s%eU%sD_Yw~~Lc-`cFdaT9HB
zS17Mi5H+!ryrf(7Zva8CwDv2Oc!K5t#G$RXq-HzZ?R>so!#%0mgmsJS)I8NmJCNJL
z5`;c}DqfH|t!z|qn+co6S+ at Z|r+pmQG|w5_xx&(X1cH=)q=Y_x>W at Tw4utP{Jdjmr
zH-r7iPIv3=%os)O-R2UtH7I}BQnRuJ<8V=SL?BRDwIjBG9ms07o3CoLHisvjr+D&q
z2XrzAZf`1$U2r762P#3`F!&?jSD^Q3?FU7vy)@VZ6s`D6sNCD26BkhUGHTXpYcy(m
zo<(f#2Ra#9cUvt+0%-qm@&^PM^Tgq(5=L#g_0k_8p0(pm60DIkH}!fpQ%n3C{C77^
z(S?Bp3vRCvT=`Q-&G_wT_i>f?G$6*G{bm3n at CmLC6z6VS;t%9H7v&J>o_|oQy8Zkn
zm?*ycO;0V0Z5&oajwD4FO>uA5`BJyhR!hes;aVj0DHg6p#ij_?Y+02vx$st#q)k at 9
z_6;-~MhDYEoC8Q+-}m79r?D4cr-P_7kfl+N0G4GmQ284pA{_MkaK1*`lFksJ8X&;>
zWig?iq)AINIOw4X8IEInj+isRM7BVTh#{N>G{7ZtpGas338`?@J-9r9p#MaJEsT&W
zQ=?lTP5{D0oHMg4#>0RHc&AY$*)2j%X!c-mQ6`oJ12HUNa$n335I_jSWs=fJ&0*mt
z^0z$oOjH1ifW#2iRndy;5au3vijW6ka9DO7A)HaDPDwXoR4GQ2;xsV6adeeZw-i*F
zp%<&L5m*G0RQP)z^sp#>#>fcdr7DMIT&l4I=8)hKA9|<bNN~!aBaoXS8+*T4b}Ew8
z>x)hO$O`19uD~BfaO(N)zyzzZ>v-RMp=lh>f)24QQHv?5DU_gEdNq?UmHG;8Z at o$p
zjQ<r$S-qyr7EZ}sQQ94LDP>tKll3Ct_3gUvyk2(~>UDgt`XC&U6t at Kz7dJ!)zV)|W
z&KI!;U|n3ZS-CI8z>ZT-$$>pnGgT;T$3p?J1YQUq1gx_NiT%5j#JIMHbH}}<IMDt0
zZH38!V=aWu5>+99Ql4yiGcr{4;sHMape__%9z#$jE08uZ6%@fx0{jyFdEM`s1=e1$
zYXb|=&c(G92(<H_MJ6e>flwfVXH9>NxTYA~kAq_hO=6~s$TMCZvq{de1tLcw#P6}w
z##day-44Oe?cl<b(olbH89XFL6yb*wg-yus$&*qX?+0CjIuuN at +x?K%hj%#q+^Bea
zZ!61pbDmYUU*8XI$xM3XT7X}?|9(xWKQ33cZlnQ#Ho(hvae)u|zOi-y_V%u?Mx*Y1
zV{cDy;Hf#p5im6lxOqI7tW*dTAd!Zl8ps=Orf#Tv!(_PaS6UA&806O@|LX>NiO?o_
z3-mrEUc9;9LLKz&*sQZSRfpD1S1BRgu4A!BN|jOfSGC#I8oQg@{`h%W@%oyy#$(&<
zgBxi)GDPgwH6gs!I#$FV<2TleSc at 5jzBP%lzaRs(OGX_ at ibu=Us$`TXzJZpr1_wK}
z8a%%re0SK4G7guii+SN!kUtwms+nDi;T*3~gT?yGP-a<kSLBT9rq*mixbMb-K7xbw
z+IpS!KurU&>V9yir_#rE17<K*^#rmuynF4h^uK`?C~zuP6bL1+JZRm~AV0zb-aUvo
z3_NvG1%7wHhafHZ?!_A0_1zaC>&)MwMig;M+!o!2JS?q~RIQH%uF(M*rtROXc7jM2
zOkUtxZbsK^I;i?55CWzqfns>LSMeg7uykPV5I&Ch?%+kBnKVyB9`JXs6r+kP#1fkD
zi&LM2nLG#)C#6ZtP--|8<B$MlaZS{4zIcXK)ouPIosFU6&S^*9#KQU<wVZ1yt)UCF
z_>(ktu_LT&&H1dRo){-E-PJo7yK`R;#rbJHpQz1jOR?UsgrJH(3YS<0YUADl&{g!J
z$X$t4X$l6KKW_vQY60tN@<I=a*!C&Z7=RCiuER0VyAXwjBTK0d^L!?qgum{Gfv*&}
zJ8bwo+C~eZTU9)Qzj4<=<EEqlH{N}=(~RLI9zcua>%x1 at m%X7jbAtL3Is<>&QmyXp
zJpUi5HY=O%m;)E$2t6)&47gyy+khe%!9YFnX;i1`L}5loZB%%pq}!uD4a_6-Vax;>
zmq*`yc+OAPu=;xRk_>Niz##RMRE*=#jJ_4C>yhkw>Q@*cI`sTZ%Gm8~Z;XkMOc2xf
z9=(cmvZfY3m|l?A1P>Q&L+g~OAktqBN#b)uf8`xBc(WhcVx`r=DOSBeKWrCr7HzTD
zlEbglFW^MQab%}$0|S|PM at nUC9fPyCxr<070rhR-`sl`*tAI9*f;|dsGMal30d4uS
z0SZpn%J<vVA2zCyod{l2bLo5fe%q)$gIYz}>Dy2^=jnc%1q#`CLsNCzYSzMVM)pz8
zHQv4o4OQ*4n9p%fLu(=XFy)+WAE!{*j7)r at tQOcj3q8I9E*Oj8 at 3`_K(0g))KAUcN
z{l6fMaEl$Pnw$GTCU3YJ5xtb=ne;GnM9$GgBdk|QHdPP^)N=y+kadj|)q$H~#%S3+
z2n^=kv)EO2_ie~OgUZ2$!p)pNqX9ThEvp at eSS&WyhsDf`;I3|dIs(Tet`@?drd!W=
ziFniHjK at eIxl8NeUm*&K;{a1?c~H^N(*)KMK1lYgI(vW0i^(4jJXpuV`N0AKPZ8V9
z$ujptCI5{aO~o?6ww^H)h}BmqX4(9V^gLP9g4o~Yb!cgjvJwe5eX$k7%OE<~Y$gd0
zmmk{+{^0J(DMJNYATU}m<R{NVD9;1as*ptwJH<%BDQzcPDY#<NrZH1MHYV=~MC$|f
z_)%5$lH}wVBW~tRJbGApK`L8sp5*y89D+o}y)e2!1Z at P+W@AxXG)>6!jWkMjJLr_9
zhH-`BTWe-u(>B2JD<DHLsv;D>UDA+rQJ?CbTivR)LDRpmMC&7K$gp=Ppja3nnA!VY
z_d}41A-pkWG at YS-Eu+^e);C2emTI7`5IMaa^CS_z6_cmz>u6c0OQKwlEfz}CG4ph>
z0J8XcTe4U&BL|VE2rmG8x^v3$?3Aa;_*9w`F7hn$os9e at Eg^Bp5CKoZk!7QKq{nZH
zrDN%&i^W2bSTd3AL`IZu!rjsXXyR+SSa_RM_C10>E29dcSku!NWGB(Rm00gd1m9{U
zl%piEsYPN8mlKEx4O1O({wY2^ViG2ECf8y(aOT9DKXpzC<5*;Z7SNYs1GJ#f6v`eF
zvm)cOpf%Iw!w1f{9&r#4f6<zwFR&7l{ikd*H`CN;zMrf;OXfR~dwXxx7H`WkpMS?P
zi%IE8Qo<i|Sm8MyJv|sEOV3IPUcu>I9oJ{hV0OdASASL$2+WfI?fh_fbunH%>m6J_
z_ZvHzod0e4;quoHQ~BSPA3j|EGym^zfuc9d|0Y}$SP)5nEBUix96|1^l?SUP!R-Bo
z)nz<*a)0&7%KgFwv$Z~wb0N;aKPANtJ7|tUXkgFEbZg<e<UK4?aT*+S4?9f%)f>ZY
z97d%uk?bQ^C5%`>q1eFj<q)-pNc|-UjHvlYB4%=)F;wd>D1X=;jc6uobC%IcwfCO2
zC6gLG*qKnx)w_UmI)@})=0h at N2PojIW(U9YFbWvIs%<Nyg?!mV0v1FSfvI}^RjvB2
zbaCEkE4bRd_obiiSduv!BJWAL%*1AAU4-E49S#RH)J1royMUj3Na*pI at 4W}#X&N~M
zIYxf>-utq7fMjm?)gB?mU3o_mf3?AhyxFQXU*1d11A0}pH`X`qxF-xgXPT$cD#pAq
z;B?BV0V4tgvao&qppASWNVitTSni;nrb<u#6^zf61Nfy}AppXxtQx{OxzHSVSO+e}
zbDOMIy)lqtzRz{gUr_-YRK_Q><zm6S7m-Axg0>~TMoK@#vpkv9o*7Saj+xj&*<`I@
zQ!Gb2YzbU#3uaQ}2B}()kt?W;;%(FfC^;|KCgVq2r(k}VKGtwRnkVM&v23wt9z}o?
zJU|6QT(aDtv1EZG!yD6+S#F7GW6D26O4#II!m43VLnL=bIESM_choP9H9k$hdx9<c
zo_9I(k at _66j%h7{=^(;-BI5>w1)AofXUW=HqG1wj8)o<lfkgsD`!37yb^4gOj?#>q
zbrtOjM?l-u)ByO1{ja+5vmMiaQO8I)FhB?%?S5&M2+vyfBefS{ye<ov|E{R%!*1^^
zzh%3nxEe at b*Z~g1)PCT=OKS?wWH~#QH7 at i-5H6<23bqTMuunkM%vgK`%(~O?{GZ+7
zAo<WWw3Jkr<3g^-PXCIO^~8-RT2}>(c4T%B-*f*P7l&%!l4 at jj<eof0ribI+2)QQD
zP6k6n2RTm+nM0iIeByv&>P*1Pe&MD^@Nf*lwvo4&LEp&tU~Z0nNNbtxtWQnKai)gE
zgJ6r3n%ZfQXtL4rJO>Aa)?wI9Y(is!q$;Se at Xc=boM}WOSc7Ph(f~lr<9YP~K~=C=
zC?reK8>^HEwejeKIAKUaPOK4j)fqy(CXX1Fg~YFq)QZU?WcWkU&jXXO4~G{%OG`3H
z5S5rn>Bt}5OXhxDp1bF;Q8&Ae+ki7ZD9q_(A&@zl3 at iW??ICqi;kh|!Tu`e`cd*|a
zTl^}20=lG8?$hza at GRwdjBh4XF(Ajmb8h(n+eR^@Qzx|P%ku=5O9)~A=f&)|;LCrj
zK4!W9Avswek(MND at l9@llka~k-z<Ogb?W}N^3DBk{=EPF7C3OT`(L6taKMKnwGl&x
zi+D~hB0RL~6}Xcmb)e0rK^sY%JxXU at PUPyChhDhvtlH$u%MTWoSCZw&Padv3d9YG+
zfs`|M*!{<4Z`f at QkoGSrEiOT1F+~3A?r7<sy$g%F;E=ztqN{hMaFmF|{S$d;L{sgL
zo(ztUdxzb%xyxby$pFc!M^AXM8$B5xJ_(2XBrN at 8WpQ~fDLM9s=O{lAa%r(Kj at wzA
zWZCHr(g$$n7Fl>|lcVv~>`hAHsZAaaW*y?k5z>1N77*Qy`T;*&uU^`LIN%(Tf)R3}
zCW3R|NRg5}i*>*WIf>KPN3O_GcLYp1N_HUgO?YuBE@^R?*~gG6*tVMH8QE%f43d!E
zR>`oADK=5B@*zr==g%PmFg%fE6X$`=l81f`?AwRL{3 at GEiF>>7jH%?ekg(piQetDA
zY-v(i<u^)Zx{E;ENySS~ze5QKWkedZHYYm(oWy|a>DnAZkSsi!`>uo?@XYTE3Vn5d
zJ+UXt0!G$JZ5_95Zfh^P2HDxHD9N&U7>>rw9HPkw(<Dj+Q)NS`x3+}zp+VgLAA4Wk
z*Vd7&J%8s at 9CJy8J!bWigcv6naLfz_58z~SiLWe>0L36NTI~2v=DWYoQ`ObW*(9)?
zJM;dcUt*+lda16iuCA`Fq1$>Kwq?<l^9TW7J4WwFdyBc^0kLe4ANDGRobGJiEtKh6
z&R42wUzt8Gr3Td?XDvF$iSAVNR*lbpn*aQA{`2<X=g(F at f4=(pK||I33VyC;!ZQi}
zqC;*DYw at dub|TE)%^Ixrkw}-wj2b5ZdD;~&IK-Bd)$A;&cs+VK1;d%=_Bszy{$d!x
zpp&fAtQ^>v1^&UlWv^PBSsy^Bn!W6Gse;R%AIxOKw`Z%a>}B`j{o2gWjeMb>8z?4?
zNWrV_=;VBD<}Ef-ZXYwS)Fg9d<Q7#CksyX+v-3;qhjDh$>J67mVTcNRg6^MvpJCTv
z#^s&v+4(5 at ODPP6Ql9`48z)Tpr=>u|1#<nLwm4(+!X>&VYcsglsMY)EQ+0UWAN1NS
zOmvY};&*{Sejm6DF(9E5$bN1_?<e4G_zo)hYvC>CIewv)F3N~G2>sVDTBp^Um!h`j
zWR}-vD72gnT36>YCF?C+bH1o0iHF1siG20^{ndG=CkB=I3u>kZkgJefeQl=KpTFo{
zc1MN<ikkDS at u&~S0?NF|$=jFC=UW$7=PfICHSV2^#@gUJz_vDX-eT78Gb_M*q2`Za
zka)8;gMFZT5_)JIW0?J``8EVMUdz2Uv$Syk>y-yxPr~n at -$PsTRI+pYXXU&m9lJn|
z+#@j8j5uuNI<O1Pzw6 at EifdxYL}A_T57uTzgE7fEkS-<qwHYHFU6eqa)S>+Z;>^kw
z#(-zIbNy@#nAT=GfEW)1l>>0lmt?DHoAWp?w0fas$M- at ZHg1Kq3vI!Av3ETfq^xz<
zVc9DIn1d0)`J(gdq^>DnOR>_<{oAtcb1x%018z>?t^t6fhcLU%4?35vZg2kNyyYoy
zrBLW<JUq`8soH856<NvhDOn|4j9OCub(5rXj!SO9<pym-t}?NB*}38;7swq0(!mOu
zu=N!?IYg!AalifEdI9l6|N4GjVc=^hUBl~2Ah5!5@=!kED(43f!&!ohbk$UGjLX&l
z%XuE_6w8w<6BFs49rs70{v}uK(pUGmY9~yNV50<(x=DG~Y4Oxx*!mE3P_Lcft1uTI
zA7Km24<8CYtHByE`li#l0(%;r&lAeEnbrj~_`_0!rqf0ujCs5gw_p6pqL;ag8QFa@
zvRn=0CB^~k`BZ5Oo*mS;;fpP^l``6~p}NKW0rb<Pj48Y}U2l%OGXMHI1eT-C>(Q5i
zqgK3mWNMO~@}l#$bAdf(@)kdF<|EMz6c)|<ip-ild)J`=yf$;(zX+_4JEUwLZr3UZ
z!iG-YtkI1&9ubwcZ?DUH at uZMHcoe(wMXNgU1*EGovJ%-%A^Z at M!hTgpQvUV72}!Md
z1d_4^T`CrR<-{T(iK(c{nycqA((X+Os=f<PE6Wv~_yRX2CZRQV#+NbV#eWuX?<sBL
zjx%_4mzFecsHmVY3=#f4Q at rUDl_0Jzr{En?<#_V|OOQA3y6q9p_g^inJpA&W+w<kc
zx#Jbf%L at +^K^<OC5UU4(p1jKeBw6z2VF`txA}0jMQpid;Xz`SRzGBg0xm>i!J-+Ci
zvV#RZBZMYk-zN*R7mAPc at NhAh9~~QHr~Up2iJd$1m#tstZBUeMN~9B_ou443_}atH
zl^d$V7$l*kF9l`=!A>^w#~u2}&ZB~eOZUG1isQ`{YMsJ%QeLLj{snm*FM-Il86v^z
z4muYQ8)UXt9(-<3-Pz{9)I)5Vt+kvWDzFhSaSrK>AaiFe<FrM*)s>dDqBx1*$pImS
zrdu#9>PlX=hJsrHnqPq_kgg;FNY+(exQ-xn;x|`b9tknDRWQV5y!ukm5JL(Drat?0
zDop5(x~HAt2n$oc at Df3oz3k`I+Hq@#ivMW(I8bYAmDY-R&@((O{j<wXyQ`5sYctdv
zi=~4LZzhzX=gB+_LEuk|3A(S<I)$f2jIO-l$j<Spx-ez*r)odYN}-3vfNwWZ(Hw!y
zknCuE9`{c8axuj at 6IX0e;!M)g^smqUa0K~14D_G4k6>t;Us=FLe-Eql47Szt$aX$D
zzG(9P<^`zGZxR7e at Bgv%<<ipqy#L42%Kbn5KR)r)OY=AL{}5Yw;{Ttg5jb!>{PJrT
z0r2(w%9q*l!_@~5SC_v2?~E>z*(}=d*Hg;(YUhnZ+MO0eUqkw%1Bde$1!EtyPUsfP
zBJL(l(F32tI-=eI+}UB9q&Q`E_)#Ces*=vy=ctBfByD7E1~Z*f%?-Wf5Pp<*=-JwO
z+wbD;I>ZV<J0+LYWzJR8tYVC8^}|71;)lX6^+omAaOSu~V1ip(GPK2PL*lKdq{Geu
z!}@15080?o3;%3RL#rC?W4MGjWc&^KB^zosJEt(?0^B^LcNwm50v~>dfs;Y^YD5oT
zz;H1p3g8;r@<^c54sv?)J?=;G0TUK|p;**5PFg)iVZ`kO4;+;qZJ-(-Vg9bnA}%9<
zqk~Y=u*v9F_lph-_{u^}q6=7cZy@?!$XP=jULo7fN;AT)nmDF32S`tj!aQu at AxzG!
z9gy^W$J0)9L%q&f?0g%!ILm;6L5*;Ju&}hSa`!Wo?ZcaP0LxM*!_AoRNcpejrTY)>
z;zk+q0HLQPf<`V7x`JCXIh~tNwh?5(2hH}ekEJ`}e7=%tT$D`e4Gvq$yAcRk^0^NY
zMW<=nL6&fMy0@@$Z(->k?!e_ at P#mc1G7z(tS*QOPcLwk0#Dv>m>XS_JIKYpWSt&B!
z^O61Bpg_h7xM^{{-5x>*e%={IP%6E>x|`9YB3AvM8{fF-*dBzoyS_U~i`0}$N!+j$
znWQM(@yPV`8prbvwkkR-^YTdb4FK`Bbm({a0&y+bQpOo2zGZ>agE<<542>_L+h+|V
zok!ThyH*cDJAGNd+4xG_o`uXLUI7%vRpOiD!S=JyB%+{*$1lF{<1*@+E28^$rePF<
zW1(AViAN9j3A1t9fpy)|(-%4f##qCq?sU-Uz^k9pEM?tl;c-vmjmp}R#yB(!O7aWu
zsBuWQpjWpu4ADg_MKASk-zZp#P=%3M?QHFf<f&Ctz|`@d-E%yLB+}K@?(he!^oX)Z
z|5&k_Gxgxeakda9B|S$>g1<rCq(kk-7m(?d*DMfPgkh3>HeN;LW9Fg_l8PPNSqDZf
z7uw`oM{p~7l(Y{QdD^|A_6T6we-Wt;<1#4 at Ohm~7I%M*{f<1Gth+qUgL?4ZpwFe}7
z at dtA}k}<XyVCGm&F^K~(8cT(34!NEBCd0b16(hU{@pUe~O<A}v&zZDQjgMhXb{)qw
zWRJ{s&45j~IcLWe3 at Efn6yF`Irq%FZt%O)NbdLbFCUsdKLC6tR`+|jXDP~=0jFb|_
z;rAW3iO*Wrxx5;^PbO@`_NEw)ZxNv7J6p{G<MuMrrIaClNri~<0fHj9_rU_WRR8Il
zD!vt{qID+5<9*0Dxac;&+I%w{OWf2h<PWY!E-uIF-I9<hG3PUOSUMvHaEg9?im2};
zZ8Wz_6PWS|UQc%O6u&X}`Eq`oI=wmu*=pc2d?gZJb*CE|X6eeMopye`x`6OF*T@*2
z7tK_4rB%HIg-2<D1B(x>Kw)Y^s{sUItP3H9`d-SWUf{%{#GVETs&(ACkk{h7VU3+G
zbQTaKbn>S8rt^Ndw#;o7H^1Q4m$$9%g-FW`+xI0 at s(stK7<cGQ+gMgQb(@JV<~Ahi
zH(R(?W^OizKDNm>&E$DPs>Rn_KZe0IVz5}m^~>pr*iNzB(Q>*|u)=Ifdq+#J_zLT)
zw2g=j2||?vV2&VEi1<QyyC-0cE(t&8g_wf~*vaPXo|utJ6^*5aa-s;^Yhe!#xXph1
zjqG0nG^3{s at nimkh9&&Rk_k;IsBWGTtW)qUjt-do7b6N0(*acep~d+<PTBvyeN3bO
zNl$LqA4|RdXXWA2@|QXN4^B=G{?PwiAJf;b at v-zjDUDG3b8p#ef0kDmzO(XRb>;pI
zv_F&#Qw<4s04H$yV*<o+g#m}^-U!<>_Z-~}?;r|<pF5cx_gg$R<1nr|3!W6A9~xkb
zg>jW>1&+tOLQE7rxHQdGU6jAqP~)(}>f-(5C>n`HDXF3VC(`$efvDIO`o-+5g<M~~
z)$A#>3NR~<hppr8MR)Z6F47Uag}UZ^G`fOalg2r0?=l`5zRo*PZde;sVnP2Pg1=-u
zfON18SpyoI9`p-2txY<cKAKpL*XmZugTsR2w|bOrLI|JfeO!8iiFIf(L0$xmBdTeG
zad8q*V0A|q2;9MER=)BZ_H^u_jD2UIv+6nIdGwE}&ZJ`W)PHS!_w4ZS1 at 28gIQ-7(
zH2k~hOXEAuhhJX?aT`x?S=59=)3n5!jGnAdYD%;@^}W4#_Tu?Z>zl}vT37D2SE at y0
z&Yaj<i8~T96g8dR+qs6vBH}*26%sFdLt(tUEB5OSn0}p~oSrpa9W at RlGYh|+_lI2W
zJlahvBnhTIpety+kNZQ>lGOI*%T4I;R-TC!2IpIvFg{-nJ=&Rk5;i6 at sd$wUR8Rt^
zC*WN4HkD)%%86bIhsw&LjUbccgP*D^Re)H)u<N~a?1$tgqLxA!=xQl^bA<*)U0X(c
z(%L4nJW%y}jRp%eP($F-hb at H)kOSsj%L<r!B66QB9jH5R;hexD4bJ||ljF=HP^;n`
z$*a;kzrvYcPmZD%hbjHEdp1_(5)LWo(UvOA5lmnr0k(GD$DTbLV at ra!{(!{9OcQE(
zX-dn(xdz!ucX(i>z(|}5HhO4*k1$BHl}B!8r}|C(wikcFp;w>IXc>&_(XFEma?~TK
zga<FL7{UgnG=@4NDexRD<E9w~I#r%Lulle7(bP288{Q9ykgMTQxI0vIQbJ+>{nI&h
z-Ci(XkK5TTL>P~I at Lfl&M7zQ9)R%mN4Z0V!MwR6k1nAq$2m|L43NXOdKmF|H;Ly at Q
zIpR05;4-<tl-M4^O<=^-QSmO?fJFdSrk{V7zq;AN*pz+y*lp-~KvrpzlK_0eZh*{L
z&{_oSLuY|j$7)<7I-MNQ7AT1{$L at a_Hes+CjC(TQv;L<H&WL2V at XIh6qKskY=iW>>
zzB`%#IKM~^$x9y8yO?O0_aG-g+>)-LRZ+9e^WoVNz)#Uqg9*=MQ3mqa<rejTSXB{f
z;<lG>+V*aLv at 5yBif#A$n+Si|JO=1FxaV%oCQA&YbF07()-RA^=OtF4wBq?yU<;y>
z_VQGY65{diDj=>2(NKz_El>$jAv|JmNoZ4W=OVSFV^tgECxc7f-lv>}&HhjQ at qPy@
zlJlVZS8g@}2r}j;p9m1nibKZ1XwdJS{n#4NB3lL)2=vt}$G;YpRi)f)I6%bT!s0K(
z#hCnOgm;v1xkpJOT#;dIs%CxK)kfxw>}10s at B00?EAE%!GYD_8WC$TXH(GbTk>c9;
zWk|~Y;2wM<Wj(xbxUpVtG=`*+x?aEt4yX$Lpk7=fX+PH>!8}d;4rGXFgpk{Wm+ at P8
zpq+I-GV}j~6rZf`z}gBX`=3RMWpptmIhvsOf5uu7pxXKM`jjly{{NC=uEBc((x#kd
z?khLl{Ak8U)N1dnbFH0k+O0fk{sV>+iTSlMa5-E#1c^W#H6y<<LHixp8ryn4>b2f>
znFbU>^eInA+1qX_`wLE42hN);C))F1f#?O)-}N;sj%{Hzj{5zJ5%M<uf?)lM!(1xn
zNX8Q}g|5x)J^B8>yH_(5H<`3&Z6-SA6a`I`Miw0$PGM!Ev0HMHi%$nq-#~tyL4I<<
zgSN7G2PYRQUzzp>Aw0;j0htX3f8 at qRV&d@`JtmL|_|78gYQ0<Y^G6W5wzsl}Cg+KI
zGalIq(h_KKbl}gYbS&f)osW=aC!FVa1q9NPzMFr)>N?j`k26)?p*(3-fhMX_4U{9;
z{<^2H=I0-O_Gpnx+Q*-L_K0!F_}xZo;ck0v=1`Fj34Dam?ap8(>-R4E*!bBm;{Fjo
z=!#$-!^<%+J$%=?vUd#^qYX69Jbtu@)+0Q6%lEc=9){EP3F2Sizv-0PGJMLbbUyd0
zfrUkp<IfgSZ8e-ABP_WCCX<1cmo}t%Sm@=+a1b2+XEX!y&>vH0G8a$^tvgKM8Qcob
z)y;=GZe~W+P6S{q8R$qltC0o;X<YiM9DxI$xTe9v5FFqT5zGLu6Un<w=Tm&pN`H(L
z)Gk~-+c-E7M@(p6yc<vJ!egkTekd;2a)Jsy;x}Z5UF<X9Ly9v*Z7}>IKFYa)@2ekc
z8w*3?Rychu8_wAOQoM0;ZaI~PDs6DBJMPi at srk%Z4xE6ZCCdxm&6b_=$+a!6zC^{H
zY*WMMg)V5ILASKVciIctCh~cm(XUlpP(@pVUqc-FK{N0+l?LFU%fEz{94QB5OgBhI
zD)J`1LLqAx^?n649hQYt4r^!9WBSi at O5@7vP^kGiDs=DEwF^bdSfMDrOd$GK_LBl#
z`77~dsw`Fi0{Vf~l=v#3{Xk$V2OIg7%y!`<F6XLNc0TBwuFZVDJUjgM^OafbKW at RW
z2$oCGFOifAvl8~WC#}IYSVH#%_>Q;|kpc>%gEuqT<1A-rdITpP(5>d2 at Fl=HyO(G7
z7|EO%PDq77iaTVMKRkzr^Y$een66m at +`JeK7Ot39!37UKn86CtAj+?2kXac#d!9QS
zwh8o}Tj2(oq6bN?1FScM>GKD~sDowsVE~5T1sVb)y8pmv2!<*yJ_wIUfnGUE$8Xrv
z^wSD;t~#F<=2ysx`1<_*>=1+=h(@<)_7jl$`MufUqeY~L^X%1=yvSn8x4APbXCh-#
z#+~9w!f;QK;2jfRG?x at ebyL;yuzDOgi(0V~S*4j=#R0$HYmNsOb0szx$|%FD&Iz)P
zG1&_|4I at 5UQa-?ggJ(4a4H);KDIyUw6`{urrwJ9sVal^cvB+>Xd@*8LkQmlnm<+zG
zM;c26Kple$h%+5ul})P(eW6K#xQKW5TSRC&&hlEJX<%m(d_Zm+H at oCe%g#&DYZkOT
zy|Y5KSzjEsqZl%*hGcqJyLO6LVDdDvR2Y0=s+ at 7J9BHgO-CUKqr&qU$DG1v0jAoQC
zddI^nL`&4ou19lq!)7e;6d_1fw{-3|Q1=I1B<~V?CE!zcc<9PQc|3L4Dp|Hf6+a&Y
zLE~5)=!bIFg1zS$X+|k#mXacS^MW9M*vAWn76V3iAsqM$)CKYJI~-r&pGyB+3nWqx
z%@C!Or_-8dJlZ8XtQoh8y;tK&pgzE{R}RXFtGz*Q2Q>d1U%2Yb%p5l=6Ka7QwVfxj
zcD`v$EdEnhb;AN^@|$eC2TRfu0Nz1**s|4aEu{!t!?Nt01q%NzX=!!g&bPDhGRfrP
zl4Lk33%16?-e^zw*KL8Za3l-F1~4OMR=#eg&!b at HxIKPfXngUHaewp;cibYIO+YPD
zfosg#sFW$J)7a(Kp7C#~NW&L$dURop7B_a+j-Mf<%uzdu2Gc;-w*ssc%jTdnVzxc8
zih^+~kurat*+dD2|2Q3l|BWxz%-&kd`MAZE=^C)_I)(hJe0O9|h7#uJedFVbzze+i
znAjLr>V6NJmnd*AYvBqD#Cp-aT?giLNIWtl7)*V|a?L?i6V`wGI0<!z(&OSi{y8bu
z<T8y%afF1)mzOY-y(!B2)}uwagb{Bjx5|fP#6pf$=HJq}<csOqpp;gP62HbD4haTh
zcW0j?EoD0v;9?K!_`}4-8k`y8-tGHBqjE931zR9-tIEG}C2Asrc9H5ZL}&OB)VJc8
z!^DNnE~^%|yi2+X+%0 at _=n~zSiADO>&o(YYW1wowM}IJ!k+H0D`<T;`Wpc;MaR*V9
zfe*NK8}{|QpDajGL+AcT=x}}S>Hqv1!Pl-j{{y^b#EA`@(OvgojD5QC*ZTi2--rAE
zQqKSX-qP~DKm7lv!|sQbQo|U`4R5=bup?k+MPw6v$T8#D at ZH+|Y&66_L;kx;VO3bt
zos8QSY(IMvG>2bs>q3zAP+Zgz*q%ML3<{QU0ou`US!6XqA#mW!d+y at M<)!(hhln9q
zUAnjWV5Kr}00IG}2Zqxly--u5+i!oCsF?9C3PXo9svjttMbLud7Q*KxM7 at d2?Q!ce
zV#T40ZzEO0Sr5Sik`h6ba=3Cr0{<5(I(WJJ<mJ<+Tl-s^>}ADuu-O-PNyN+{EFGqk
zPUa)k4R&}&H!Zert_c43TZgznxOuR3z)JwoHkIW0F}gx}Hb5D4 at 6$o-c-x)ah>mH7
zS&UPHybh<lLzCGZU{s)u4&!|v?na}Q@)8Kcsew9o#FSapEX%dUZHWy?G7R%m^3x*;
zEY^E%g7W-5G7D^3L%8P3zET+~t$NQsN+q`no}p0<oEdQr=pi at 7C_T6kw{2Xm=Nkt;
z+|*OP)?1B{b^uPE12+_4!3RkCvNwl-y}2Yxxd?IH;hoCSU*5$Sc099XrV!H7L}44r
z5->A<FoI+S&4{QD!~Vor(6IX!A-H<I8StZYaf)zJoUM_$3#!@9fa%0x_w;qLg$1>)
zpaNr0oPiAAT^<a+7feRd%y*K2Wo6;Zg=NIS!cR0rOgi(MO7Ee^(4o%C9qA0R9I{yB
z<~jlims|w7co;(sP-Wj401Dy|F(>&t;I4Rt%YXcw51q1!1-wga5TmddHo);n%D`Hx
zqY0&IQSG~ezzeOk866fDH{FFZsy5)!^uJD9|ByuiLpU-tcc8F0e_|<=<XsEh14y=I
z);lPdoz{(16N=SADY56d1xccw4Ty$8*0B=5cDqj5T{zv=SF>75FVmBD87zqgLy0*Q
z6M6wr_xqlFIVjHcDTJMiEoN{@Lx+qW0@@N1NGU)tG~I&pRKPmmWFUp3)_1i;@Le+Z
zuhP?0&X61C|7fxG%I@)TY$uGRo&?HgTY0GqJPx=G<N$7qj-14xCVp-pFi~Zc5nf!3
zk!xJIShXslecWA4ja;>$QhkUjCZCetQ;8)OOmdemQG!tEVOIV?%Znt<Z$Q+V&}P;m
z at +BPmpE7Z?(7B+1@!ueTBu$_tS2x%p!P8kwR`q7LqxNV(fW at uUC!OOeMs3OMT$Ydz
z-Nwkp?gs%2@|PH0AjH9Wq2+co$58L$icI=M!@D5lyOG|N|A{r{jwTfVVAhhaCiggD
zvd|2MY}XWU!?!*!TUS?{U(tL@%Zo$UfI5rdub0EKh0(9fzomSewjqGYqy}7u+4jMn
zZ%67!N}c8q+uCJoVdL5Q{`$t at 7NwxW12o0fRHcihQ=nzqUEgjoKbR<!z~8IND=^@a
z{2+mWvRH#Bsbv$bS$ibrAJ=nd90Dc|^0PP%7<Q7Xq9sMj+>>*uA)WCbRE3KIcGlY3
z-JVm+fP$h?n~Y^nF@%L5nU>DU8}(A5R|@IF3sFfMG$+4JVe)ObdX9#YYS5XL)@0W;
z)ili-ue=7WM7>U^c6m$@kAu*A$E|WjwSvqVkH9UWAkc=FB`m?Zb%k)1nmP!X1`K-(
zb*DXu9?as8AH&ftWe#==8d*dx<h1ci3&$)dY at IcI4fgJ>mmBkcc>%e7aj`M}r8|tG
zB7O1sAzx%HesJDB9nJq``#@{Ri?9tf-Y`W+&l~HlgTL-;@y__<%^>apQCPgQ#451-
zU-!1Zns?>j^t)dr<;QQ3+PUXz`0_8ceU=}`?VrJ}@Wxt)r$5 at qs-OSrs|R1tf2nn}
zNHhklr(@rP*4cQmyz*d4%b#57cfW@=AR@!t!jB^9Wci-flG#F!q1N!C|F#uiOKPn|
zmGC`OI{9BH?kdJpS?PS-Lo~MsaJrtZ`b@~_yPB?&Tn^<sO3_^j9t|i_SL{jf9amV6
zkuZFRB)$Q*$rZYgt^!m7R(%gRe!uISp~`&kJy0;Y2VX%EHn{@bp~h!8UFlk!T%nyH
zX$p|qV{m;xe^XR&IasaAWRPIA!}VrXeu^H>I!NE{7khmLY7w|2$f+T>#YMtTyeDd6
zL1-+t*PrZc`K*GrF-oq$Y>8S7W25X~_LLWpduAD(*4cHmfi}LF`*sz<h`;^(^WyEf
zqyNEIe0z20cJz4mi!PR~`JY(Ncp{x7{Yu}(foVx(6bf2{<kYSQ6z6f7t1ea(7tH9l
zfulS$X|5u+m*3DEvd5-s4T8(EbKh|n#s6~%=x^>Fz{tA3{dbmy<zHSh%je1E)!g>R
z-tG_0?dLCcP-fiIh*F6ZMPi}y!tT1sV)=N&2nj#c^1FcF<XvHi^NqxEtrz~aUDeT3
ztNUv+sR|{IyHa#m#A4vep}|BV^b%ftI&uezZEo<1oCq4RJwD7lTP_ at Dtvf3Z=mqM3
z4`}^frEr&$S0auT$t)UJQnGe{;=}=^2L47;xy?awvaFM6z1Ki&a%U~DR;U(E%yT%S
zd+^F8zXqHV!L$e&WJDw!rh1inG#r_c-x0eGw0Z9Eq<LD5oRqP6kw4Eh?mA(z5kxR7
zQztwj_S*?fw+lRu?HjT|swJR%>9!m<o}vs=X|ZNyMpMe7%09!l!h-TTLYBcfNA!f`
z-GV&f+{{BrT_jS>zB_M?vctX2z3kfnnN#tlnpGQhd}!8V0Q9|sLF>IsVjy|(^i)c%
z>lsv?y{vtVgO8kj3dahwWB^)8(1&xkJxVHEc7MfW1N)*;;NVPmE)Q^=hm-$F=ePdx
zFVJF3RXe39csSCjQ-c790wpIEnh><q+^j)?d5n}8w?9+0g=;%K%>oGKm5p)&A7oGW
z_nwO*E{h%`n;<=AaGkU at FAiIl_m_iGRS9->>9#5ha8L`SlR&ivf at s`Oai+2fU}#1A
zn0c8c$$~$~LdgqnQz$;hy?+3(wrUiRyW>u_zy1BQ!&N9jng%SN{<y!l`~7P6I(qy%
zdVcx-=cG7Rq9vq08z3tytt6TZQ*&SPHxwe8HC#{eq#GH4!otSOS`lv%xa$B at TDq<!
z=d-}^v%N>mRE{{BJ6`b=roPE5Gv=VN_2Uqw-;_ncM^IA$0vE&Xcl~<9Cd4k{=tJro
zb_|F|h~Cj56C|(nAyq#A>ELfW&F$SoyCJ(!f{HyAP92G-Iuth28J at JRI;xFpzUyAJ
zPjEHl5O%nHZ($9j at 4VYg`WUti%blIRfYgRmBDoIm&{F?u={&#T3ggGGzoGt)Dg3+2
zN=j#11OLiT8KBiTM$8v<2ES3P6ic6T8dcIqx1Lg6TJB8VByAWgvu<LJ$7iA#gu_)2
znbk0pc`j$waN-p$ru4|v^qv*WF~v$f`_nbxk>r<{OVg|pNV=}=Rl+WXiy^OZ6ZZ;H
zT?xgne<b;I at kGpe##gb=pNx@`y*GlQHEi-^37Rhc at mlr(?hq^fJjI2g`F-U+UMRV6
zKW{8z1Am0Tx{D+hO@#Hl_3I&bh8-ZxGFt043t(_$!rUTnEKXHwOO&bBI|YbpCuw+}
zFC(Nxbnu7_dMy9QZSaMS+!tUS|3k%Tvp%@FHQgAR@@Oet*qLE3#t%kG&8wqKc$o8A
zGL1_`0AW#$>;(l5T?smF&X5x3C0+yhk}N$7Lv|BJ<UvRICdS)X-`&h!OCq-B?)vks
z*FLMh at 0~U6qnY+ASWv`49JI3MevU*uWrq`v$}>+TtPdQ(#@_SiTf2w9;}~)QK19=0
zNM3XI78Fs&6G;(aeliNwTh(QRa!1502@>QA2hC>3Cn0Yb9=|@=c(#S@<>~g;&ZZ-U
z^#eS{wF^z9550CFF5$si3|^XO3+^_!jd}h at xz!qex?*Z at L81-{3>>1!lkMI0{h!D(
znY`-9XK+Sg<QT*hu{DUV3vyuUg%ofBp*=t9lLjJiiS7^`&ViiVjSLqIN~Lv&;tkqu
zA7|^W^p1tN5$NTS->PjzTP-kc_nBpyEH9mSp3;Q<NFzd%J13~aF|IT;7QvQC5?pJ(
zU1|PcYiDcYFuPMcW%9LKlR7J}r9zf*LN<?I*VfQg>?%l&U6`(_>TK<PzrBl9AAi`3
zUWahqT8GFZR#nGoX_Btk(+}!yRaI>t<o9%M|M at zWwS8C(8QGi4L91#i(W3rAq2{ov
z&iW7EH`(J3 at N)P}>#?`>w+I_Rj|ks78=Y6xW{$R`Dgb8fO&IDYRDHhw_h!C2t76X-
z`kPRFdv|l|@42p7eVb`JCe)Q~pYCtPRN$dzh(*<K*Iyp)L7Lsz-%_s2>0!k*mwi=j
zR9ipXY94NL({Ufxc6sPW-D;wJ`2sMPRMoV2&AO^!avOh5I~ABWc#TnQO(my|y`7!)
zL- at 4`%mS}no=`bZc6spfxgRA4D;3%0aC})=PZ6~Dg55b9ju7O`^i{PDT(=_%f)!ke
zIl at UY{mAk8bx{a;y`Y at vAYVhdH60$rAz=HU`6H+htBr{%Bv4AZyGBao`PuevHivBv
zwaw*y2JEvjLjgG9x$eTAz>^JZaka<^G)^pI5s{f9fiy1<2~U;~;hpX0+lQh#NCa3q
zxa>WB3Il%pPQ~jW&IC1)iagvSC=nJ8a_rA*!`yx<J1&Q<zsb29IR`E0&%r~8lV3SF
z=gE>AJ#dF7Cg#cnV>8}HxD6~QQ1FWfC1vb)%<#rt8h3j4 at E2R8^P7fu8<eLA^nR~<
z4C)t2BIJ^EN1|5meI(VYAs>&dQG-PCZbEnP?i at NSI>Jd35?KDR14lO_x!autHg4e+
z$B}Zm`;i`6cs+r$cBtr{oD$F~FB^bRZ6HFmX177uqddWopspusbIUJ|OZ8Ow<;PjY
zV&I^{xm~YB at Bo$9X?Tg<)&Drsd4**AvBw0MaT!-wPeemlQ~ae!@CUG(#nqsogXL7d
zX4qDkc)4uCHOi@%uT4>m!h{+1nI{7_LsF<Yxs=Qk3|C8X#Bs`$sDq=%h6Yy2T~Y!^
zNut|-mNY8jyi4vQ^(;bkSd6SA*p6#NLqCef&70g<D*u7a2`(e?ja616I#<{uV&)b!
zjZi_rp25pi6vs(Nb_G|Fr)RYAO{{HKbtP-sAmCqcE##NTo^0IBh9C*tEh9PePvzV*
z9Cg8W#5GJW5-T0`MBqznv2)%lRy}fqy@=~zxS0Zh*33;&NI~7XP!s0-hi5q4$EBPX
ziWwMyh8gQ%adqCo|0{i?(3E0i3RINVBSiI>)FG7MQB^bXkT4tt80-HXw557(9KkD$
zcM}x)NAY1_C<v-7ph1qK5K5f+1?&Q3j_nDy9X;AowGMj#o=D)xW8Ab at XtV|qi8P?D
zePFX%!I*z>oD&-qal$n>37Nt<Bj*9bUQH)@a&)eUu6+HB8PQ&AEbiEt^i$uBJ5ZX2
z(T2jmHNy$#%+OVRKj8#=&8~F5c`&_3S8xiw7T(g6taemCp7e}+&F-SJs~=Q-cbnl*
ze9gXcXJzTHzOURV`kMX4hie;LeSh(>`<k8k)425nvaRn-5Gkn;u1O)u at m;&C?<qal
zUvps5dEXDMzPm^haLv9V1;LbkMXG~q_7yY=zN-ln7IY2Q>`EDjS3yXB6HsW%iEH*G
zgM!W?3~3S-%AlalxNb*@l0&<jFeIGaM*b4SYj$TC6s?FG+=T8-IFED-wxv+ojSQhR
zyNeg`>B)v;;SbweKl-RaYtH`Gw4?AJ{`6uCz*{@TeWBD!V9h6vEB26o&56Y#+z at Db
z+!?)Nlz!uI>-meleJJZ2VxepBav!~oxq&32qfBmo#{JQ-*PV<a7nh{{U?hkiUt_pY
zuO)*{WUk!d#A#=av@?^ch{L%1(5Rk4T_c?5f;DruHNx#77kdNTWtFDU2&YUv{D^J=
zS6k9`bryjb`6K1{%@6{%v+%)Z5Jhp3Df3$+g3<X!S~wIDSAdNN21|uuLrV at v9DqAk
z*?G*$rGA}k-YIoF#(c>LJ95o%u~k_NNc74Jfvwu at Vh=oC;Qnl99(spdq6o!Br6vcf
zCq_AnQ<=7$%&M2<oik4UrL-kF7w)4Zmjn9a6m?h&YFIg3hl9-_T=7%wCb}U}msFDl
zcpw)3VfLDrf|t}h!;R|q?>$`pvH(1DudXgG4o??)ozbE*yDuW}=j081PLbi at +ZOWX
zl~vBoN;#(UGn7-}q-{in1&sx!QC9q4QJkEcgV-z0CY|@aOEzBG;Uwsi=04&RrzlN)
zgFq=bM~G*IxXyv{Bu%m06-zA--2|GOPB96V0`?>>0Vs&ki`NIq)e~BsgNbt&VR?F0
z!+#B7JuMt+ at xd?#T^#4oDxctXY#0Q+-VqALr0dveWP-y;DYRVbO<a`gKD?fJd<pw!
zA9M;%k{#nbS~XIstHoG-{a}N{y}5O;k<?-C3pmY74^E}+yh4aM=t77)_k;r#1$fc|
z(e)deVH1f`9KT@(!{oyCLy)A(b2K8VQMOiKln}l*kJaZxI&oy>$VQ-yCJ{v{`~^L2
z<$PwqB%H=Co>=pe5z^L)^5tv}sGk)byx6;GzKt-9mq4(KAW6|U(YYpVN7kxclg{av
zDKrByxoFTUS6D2PNx+^JoPoV-jp10AwcEMC$PoB6LXJyZlSCqu1aKPePDMPnc4icS
z+YSClOuEOhqRsyVjx{RGpq_=7{KfmGf(xG=9TN=Wy)p7!S)v|kg##>C)|WcT*cF&0
z4E0CM4>sL-seI}5=vRas7%(d!tunorskCu~tt7_QPQ<l9bwU1SFvo at A11TH2u0t#l
zX-yIp0dMe$M&gOqDS{uVL6U(<yUvG~-#O62%%s5Pw|<>h;45~KDKKK+cm;I`AowS=
zrbCYnSGr`UGitHDy!<p_z6&WMJcdAmAK>+56j(r9uzhLFEpezON%Lfx;LfzbY!2q}
z=r<8(Zj3AvrL#dpoAaa!-N%)J5)$JlTf_?ZxGpzhz{H?EqJ;{aQ_1V1=mJBo$vm$Y
z?nJN(*+#6h4AmJerR8oX8+$Kz59i7|RB6df$W7<WQl_*P;KeNNII^o+-X~6`)AcCc
zAJg|o-;aX|i~1COMoO^PQ*|0wxbaAH>agj0&R4o|@3C at hx~`KNH|{q^UAhF6l<@DL
zvk6q0Kr+>YIlrI}gIauTrs_ at xDaE7p8qA}@0=P2s2&i%9 at H`-DacT|_^|Q0}^f3F&
z9{f0JksQ@<^Rl;VZhy5E7g7hfVmn~?&V8`F9Y0Xxd+O8}4SO;ob3P`H)ngNl!TElF
z at 8yf^$xk-|CvIqOe{*X;YKXm4aEcrPoa8FIl<w|9VvU<ZIGe}{;f&{ZxCtIAIf*#6
zrTZ>sqjVgY2trAZ7i{!#Mv%}uDeRUW8-iwFC;^>8VnXtbUO!c(kY?DpbjREyamR_j
z3rj{a3wB*g?<9FqO^$HqJ9wPp0MupjcQ5n8(?2qtbK73P&Eu4rDe7kD-F64r$3^|c
zCh<L>qm2s`gL^0yXmcVjH=)Zx!c^ZolcacYmIF%;xs6xzkC_ag&Z8U;Kg68KZfJ#_
zBzhedz|Ku`Go4uk2zoQ{TYej7S?2-Z!8wwWdCPxT7jYdn8Ndo<3cg6XN_2AYuR^Ug
z3$j!IehRFJ9?f7E1yO#Cn6zmPy(s!|jl5x!fmNrq5FmL4cy!7P2HvDpPQ5&dC39xd
zP-b0`7Ni-)FMCpA9ezA`&^0D70MgB^r|U>6h)a2#pQ9d)Ulkf*Lp~Yu=JAFZ8UnHF
z4CThfYCt_t1Q5TwNP*$fBAZ%BLI(@Ic{oczP6WopV3E1oo7t&-rfo??L2C^M{y_TI
zXekm>%-C?lmU8l%X#Z~pQ!Ml-P&XZ&3PXk?qUEM7c{#^7CM^}o0NS@`yU`R_l|FXG
z?K7cv*+jpI73(&$@6K@%6BsI0U14+6xIEmT+CRaoPLUH^^=U~A=Knwcxky)RX4)nk
zl@<_Xp!^xSB8=jw0cV9$4}vK>O9**#Z=3bD{V6*w(EQ|%r!e$S*?GE5Cigta<UeJ%
z(Mp)yr=YpY@;_yVwuq<fO#>jXO#kc%Ytp!bpg at 55F=3H_<1Pk?<d*eRTnbLM;9^T(
zhF0~PsXI-1h}>-=w22U`BAaN}RX+)74j0wyi0?qWqE=Ay=ECXCJGVjcPwjdT*IW{g
zoI=mFqNYvRwd*ux6j(f_6GQAB1R>$J3kSDoh at pe@WvLZc^xaI)$YTPAhO;8H(a?07
zSuvosAe*r}QDpmiC6%JlFov_=9-n|kQ*utC%bd=Cei=&G1c15O*3nF|gU`VBIeT1q
z7|zS8T(|5q9FoTjL3Um7 at PwN~yt*BBcU9;kJYgBv$ILJ5A?i*zMq!*d+6hE@@N=db
zJT#z+&m+Rb(b7XQX3s$u8s5!L)NjGyo@>muI8bkOuosL)_s!%;1XLRnwl7wojv7UA
z*jj)(J){gTaJ6Crtg|<$kqBVM?L{Ob0Jyd1 at E)2kOJD*20HnWV5`vJ)f?)tKgTV@>
znRGRgf;u$goMwAAbS`(eAVb!LMSEq*1`75;4-Du+e7mcXUYJ2qjou`qP(dNVIS?aM
zL!pNjnadKpnQul*B+bY at 4>)qVu_pDV%(+o*8*>m<TE=t?&HyH}hWkCl at aT<VCAl|T
z8Go?#x15mAk&PD;8kEL82W5HEl3)k_%!ZS)QKavPW!!PWkREBa)!#jO;PP+!bwN0(
z!H}EpJTc@?jS+mztDH4b)f1j*q*9H&Ah|M6oFj6k_h^vXhv>JRM!ZxfmBKC)I4$66
z`6vV1H3N?JbK|Bki(he`32>rPh;_augN&2r%jdf;;<yZEYv_hRN9`wg_Cx~usxr_V
zxt%ElMZbD2Mv5Z|i+=iYXNM<cz<&^hMZXFzA+<)Ds>t66;@8A0K8)OZ+U;DlD~uDb
zT^)Lcy_OnUr!F8DRWy{*;ofz#VJG>jt`O<Bi-9v+Ufk6#)>%~*2i;${ezF=eqQ7?D
zPpIM45mJjda90^t)!O>|;r_bsBIAd(BxPDvofrGtKWy)8eZLjLgjwgsp!*g()mf)9
zR at e>7CmnE|Iaj|x0|G{-`H9L^)!Nd*>xe$NmYmwpn;MHJPBQ at TUQNm_E`**^iiK4+
zGG=%XDZ@;bu`nH}Oe1dZMf47`L3$Y-fIt)o+`1~#Dz6cQ at IyeIq*RbIJ=>sXWF?cn
zxu!7Bf;b;G)}R0*<F{c$JB2JJB9Y{FR5xVLJKWsLpHx*IzX_)mJ~ctf^$>AV?^P#z
zmY}1Y at 5|Fz6GDjfVG!dY$&}p&1iIQj?5!R_Qo0s9rP%NjiOH8Hs;GsqO^cu)7#m|1
zUqABU%q=392P}c9U`8>)QH}se|5qp=5Jw2~G|DS<9r5JR<`<&|WHz`WT~U0SY0N}3
z9Sy{hK}3E at 0w}f$XHa4OSj8!k`BBc|z}ST<wTVnka at ic3TMqq&xwqap`TAYdwBnj7
zQEU2;WAlx3hOkNg-)Ytz&_^-E&{aDIoW?m3SozScyP~2ZGZ!sURoM07e6Fo^`&-jX
zS%6wiC(&N)wV<w-noc%sx6V7lSM?O_-uZ6OTTM^g->2=w;SBqINgs8cKq9ziA5KEZ
z_fs<vCqqozkH{4H=56}x#v)S3w7mo=q^zr&(F8eV+OFK>IJqU?T}@X$h#^u?5D`_R
zrbnC&IAZVYeV^|K42rxg at TkcxsW4t>2rc=|<~q$)@C`O6?0>qpV6;aPqn+l9y at PEg
z>PW#uTY1hrU9+MGuHZRXrU`E*=7!^AC?9akr;05VtWq1ii`;O92BZ<q^fzTAjX6zu
z$eQkxsH^zQLQ0ske3*r6F`(Mte*W^g%UGl5_=wS_&_$|Gwpj_DzjPyQU1y|>+@=P1
z4|jPSrodKo_JNSc9T_E+L0*M}-Ivd|_O~~hFZQ=Kw&nUY9{>!@-K3?1jrAP{8>OG?
zv=n9?xm27vIka{YQckwY51{5;JB_9gbTWm7<r`b<qQlcP0wT;9OpD-_Xe3<{8}=BJ
z<nl6>l~h4Fr*U-+#`@OpB%}ftLo<F|9AMn3!<E&9uXjc9aR~>Kj7l`|nXWtoK>>e9
zl$Pxday6bH22V^TCFOBdiaNZSPf&W8VnfAH4$s1Yi{C?4JH5)anE6wYC^)ND$(~YO
z6Z!sxa}c!Y{;sAd9jEx=!-1Wi>quH^7epckPu<qVTmK|ni6nFixtvK8)wlqo9Dl$J
zgN#3;ZfCgA?VT{H2w85C2Tyjjki4h!tNA<4Dy$$qo6Y11;unNk+T+ufe>GM1<?54G
z*pKvplOA)pKDfZ*I5!3PHWU3gJ&8SegsU1N?W-gF$U$8fksZUeTD*AFHeslUlmQI(
zWbBNmRpb|OPuvlgfinm&qRQC<P+S^Wc#g at mr<4Do$-2G4LFbl;@~cN5O=Y*R at F;~`
zT0tlUBSYx_W*FqCgil~~3r}(DfXh|#U3>e>M_63eXhkrP<6}YF5iPG2{VBr#DHMA>
zf~S69PEmu at W+Z<}Z{`x4sn~Mx at mGRB^ZUNJDqy;FFX&4c<puj47l;zX5LbL(ASEzt
zYHG66e90~)id_(EyGA}34uP-|p;lT+XgJv>Tre6$b7Y|bf!gX!FPr@>_gI|@lZNu7
zsr}2+#Qt2F+TN<^kZCU{1-yDYFnr8$;3QU#BQV at _9ByXuo>Ojn1ZUV$Gqh0hCgO8^
z>tcMpFD15;0f$zS>c^Hv at NWo(!x5#RtR-(Set<|x+ySfH!gP4bTL}xNqG%s{l-*}i
z>6k$qDx5o;wlG8_uQ;_5PjPAbAXLnL at Hik$vzLAN;da$|A+y_v1H3GA44eF$@Tjb9
z#bsU7S|ZZjm$Z!Qk6XC0pr#pDKiQj%nsqnUEBrjZWiu9k1V2z(016iwNf9nKv7g}r
z1i8#8 at D2!*at?w_1`3df*o8%0N-{uV-Og~)Ig~<#<CS*IZ)C2evaGC%fg0UiU3iZ?
zp?g1UA-VA0ZWDJjHoq#AD9}qqiG#!a+7$ZfYAQ4mk~1n!RU*v~MZF8l-%%*=D>^L_
z78Ld<Uf|a65qZ4w8DA$|?Kn+Qf9rG8u8M+dUoyx5gK(*)O(OCZSC({TD&MoO%9qYJ
zYG;Zv8=|40ax at RM-Vxr;-86t}GcItULhh;Eahu{Ey98!5S5%uVeVFgdX;IQfRlL+^
zwu{+zpj<S*DgfNExQkddFJ~cN0|Vp-zy(+|=B`A{fhvErp at gGsA8R(PXEJ8ILEJJd
zHcA;VPPoyY;i4%laaq`oN;wYsTEhhxy0lz#x0Rnvx<!Rm`H?M5Y0`BXgToTDa_=Zc
zX7k=ypz$)T6IeE at xCyQpa5!49EI)G~liQh5P~-FV=SwT{zjVZFPmh-9geH*SPPJkS
z+75=J^yW&gAk#(eR9^%wVqKHQ<?N`*&<(7ppVB?L*l~322s*yEa_`<s)CfmZtdj!U
zxVNx!Z{glb>@uzUl~YJ?c2oM(Bymj`0)B*|G$p=jApvpW_m`GaDIpJFuI0N8mya$Q
z(?rA++7SI{+=A at 3(dbIo6rG+3FD|HytY$cwZ{tcHxe*E>>WW-Az9G}R%TtdWC~8w<
z{e|U)Ujw0`G7F7I{dp$|@c=Jv;Xu|!nhLq(*ryz1_It#q%aI--PUu7ViX&7s*Y37^
z4awPnv_5QT+&b%kskx6#oy(Z(#YYx{=;#Ycdd at jhHRp=m&E_B6hNBg3?HirWf7QrU
zyOozslPx3RN(4#p)<jFqubQ4cMSv*Sm7sth;b_cjYr<Bjqk%1T9&}h}3ewTM0-iFL
zQpA+*z(*x87jxgp;Bu$~w=1ce!jabVn>DIBd>4zy>v?B=7n$w1cJ|gcvHF)I8fU}0
ziuIev42Z at NtL2yl3G!YCCB2jLKD<WdN^DIkfer0+OaaliAh>gculFSsM8K3K5Q1Q<
z_E;)KcgWZ*%YwO;+T+X1_xTNlZ4wZp6|r)&N`YXbjggh?<JfRLG%m3e+s%j5v7Lb6
z;;(p`iug$<%dsLh;<iLb2_zv8VTsUp6yAE;i45RGP)@k;vzSH6w0#%lvTeMqpqQh+
zEM0@;)vzX^dXGBf_%b+Z+ni14R*p2+>Z{n<YJ|UXDCH8;6zd7YC&+dTvdAPPkEfaO
zK%LB!dEt4Cr!f&B1LtQe{8&rTfht<GrCXa-i8}YT7aV|H9{Z07grBieCRu^S{Q4|`
zx~wJ$T)l83LM}aD`E#y^P7%sI1*(v$d;Y9YSgA6o+ at i<>KM|N9QYS}7WDhSn8&*?6
zdZ2Yg6VU^qk6_UoLX)#33RJ>^;;j>ehcscIiYwh5o`_Fj8(D9+5p0V at +@fpGsM3*r
zLu48lA!wd}h}7$J+VcDu7ZUJRf_ at LO3QQSDvn;n4-11W at bK`FvZMd5zfS152G%?af
zeA+BZ8MVdLQQNg0w$~hm1Sp_-`ILZ!=JT)=xIr2jJe at knE1)oUP9bD^-c~k**#jYw
zPWy?l2QetA+7}02sJ3YG6UGCgk+e;mTzSAZ{Nc)-!}Ux|j-&IIUOvGvOOz4fU}YB8
zU?`;*D44?|76z>-XdNVC5~F0eX3{$b>g`IeX-9bNoNp-;zji*due<HnSP{!B_c-u7
z*(_f=UpUWv<6|%z=8C%`>E&Idllz%eZv3Tx-pe-o9mFN!0?hL3AaRga+f7a{f#*0>
z<{lc0^ftkY_r38YZz;;()o9h7QLq25qPo7<09R~~kwVb75QXe%3Da!oV1Coh#mzK>
z`bZg`3goS$18LuCW5_;ZoiSp at tu`^DW2}EpI?g=;pwL1fL?Jh;Q~TGazQawtI3Gx=
z$R$`;J2dG*2&00w3 at U%eBwJU at 5u{XFcmEGy0!qb35s$Q}gi3~Cx~im#yFEw>I(>dt
zR!|X*6&No_L}lqu&dVvefzC8rtNn15(`rD0oJrc`mSof_(S9XMPn!pOk7xoB;&`C*
zpx?!aqlOW at aU;YUmvcGcV)9kqVW~hkFE(x^VKq9MO?C>S<FJ2*h3MX)KNT)~x4(HN
zQk3A_?ueZ+Hl+|LZpARA-R0Hjy|6_hOg2802Lj34k#-c`7sNhFUbF_x_9*NWkK_hY
zn-2_{<Foba8H5cpdjz>ZLh7G!G>l~&2cIHNx19hyT6Xvc6yW8yior>FPQ(EXq4Hg5
zz>!;1m%c7wi*%GhIrNk1X=6$Mvq}b515+njzM#Md?6z^`!>%UQ75J>Sx;q2Kkke8e
z3z)R{;e<qL`UYy)>=Dje0dIWt=Re1Y<4Y9I!6119z-FA}rjmqBPCg!5%h}AknFzD*
zwo5m|PP>9$j}(om=D|}w;j$7opIjOiY2AMZ*rd<g)EA`!aREp-X5j^4ugA(JOQ_tO
z?@YTd1Ct(05|X0w2sb;#_)gfDQCU1X<{I60gO2Xl^Ks&&U?4xkel1(tH8*U7E3ky}
zt<x{P^4Ch|98cZ*+Pzs2qa&?o;}h-Py7!Zc!pH3Na7g at Z{or74<F_Y!htDQ%5Y~Va
zpN|uEj%*!diUy|xDm#Pj$<&PnK1BWr8_ejOb-lL=nB^ziQ)NDWGrNxt at 5A@b+%|#H
zRPLbhO3`ZAtDN%z65L{DOb3B=;@qxEwob>Uoy=<6N6PV3+6zlHEQyb^ON#po0LhI$
z-6RR<Ezd3dsw;!oak#`YOjuvN^FaeN4F at 18Y4n=o^FU?gK4n$Pd=K1&T(|LfBdcwm
zYcK}gNxj$ZkHPzH<1FdVNeEMIfyO?|H$OIR`w)0z?4+lUna=Hkf{;i(Vdvo$=*;m3
zC4#I#tPn2w>2{*%Kp4l^ITq~_mQ31phN3;V#>PYV@`u+h;(fE?5q4StvCCo0t39+1
zj~YAzGrsTt8rG%j0gC(d+*ZEKZ|N at n$&hJ+gNL<G>%D3ZYKcYNZhSRMmBPvpIz at pH
z%|#du3X~0|pw^g{CMG~2`49eG6&U2^BKH30X*isI#EwY9HF?nozsQj0IiuXlH0KKE
ze5wx)TQDjQGq%M;im|&O-jsH&Ct+3SeQ4KC8B^N%Czq{qNK)BAHUz*Uka26kE!Y~a
zK%4`&mEw}tw{sdqCF0c!My5XyIY|Tn)xG!vvE=mGKea>zk}+8<LV5RTq$)0Pe8NH9
zZK0}C5CWN~Yfv%Dq^8I+>bGOr2Z`vUw~2y~$tnUOI3F$@=&3rx111McZr!TffpP&`
zxnj{{O=Lldkmm&9)=+E$aEdi?BH|P_hD27iiHuSxPJ|p|buv%DEYKtr@{trE7|V^-
zAAzC at xCswr+%YE7REIen*fL09B566Ca`r{cp{S>1poAy?mSi*F_##^Rc%2`qf+MnM
zt8PUtBP8Y;9Jp1e@(-u8Fy5O18es~_8K9&aNw{#}2LWX)%1>~9AXzg=AAeyH0RM^+
zr-k)jU8$!3kyYt>J5ptjZ{by{6N($*cQ>h(mA#1Q_)ETiu#3fS(pDn`RQ6NEO0ng9
ztD=lcD~3u1^BCd#;3*a2_ZWUf!6{t^>?Hz1d2(J!`3LP0P5=3{S7bmORy6(jiRbH2
zMS~N8iRA;^GN(9!M_Ybg9c%_P7i8G!oprf^Lk3eLv1MFw$C>Y(7-8{qrPa&jH2P6E
zy+u>Ify(rsUNGQr3Sk7<<Lp5`?8HIfhcD_=*&pXL&an_lF&y;=aGG?z{w&@*utAwK
zU4hM9zXu7~Yf?K`Y(2Vo?R)Gb?$#nmwFiIOK?vmK6$~wUp*76wZ3)QZA;M!?#VckC
zxZ-`@wG~UmW1t=RAABbW4VeP%jP`MUv7~o?98z?%^^z*zAOf20ha7<o1d42#voRTE
z#oVg*Z4&fpZK(^#`tHHD6W!vD^yTK0mCAQWB(V9U`t46ZJshd)3*29-et&=lD&OL|
z%?*U!hg}WQvU*~+zoA5|zQed{eBmDK8R9`>S_L}KV~*iWbKZhY+kH?Umt(;R82&W~
zeA4jky at SK=_qRwxbHfe}pkrvr$GpJs!PgJ(t$YPbg0Gz-6$vj~%?QNWSt=|+wwyMK
z^lh7xMq at q3i?UJu*U^tvD^m&Lg03EH`kGDjqJ^Zo;(=hS2PbBUatgjebp6mUIax7Q
zAY~2iWT>VUb6mhfH65sZQ!LPG3dYc)XI8FsMH;+#S-$X^R>H#n3SoieD`V>A=eeiz
z0OvRoAy~x}NnhYyrUKTIqB5z1h}b1H6b|%UV3 at 30#vl0HXh1+M<*aUklzIQSzQ4P@
z`~3lo8<hO*UpcOW>*TjDtds#f0~i^Cy#fvc7_dvjAfEKJvx9MV1{?<`5jG^;1lNV7
zdkH_|Y4s`|x(>#5a&y}q9$14&n4lY2Zd}2DVqrIW+18!gYB&`FTOdf$-CSj4UFGx$
zG!%TjV7Hgtyzu#WvA?&mwfS;?i+ZW2FLyVX;6`F|b#1jW-hrZ{2NbfZ{Gyp)Y~-AV
z&n&{@`N1FR!33YS#!AhL5S<Vn8bSD*2QaB at 3omp9mZQrwTAwxuhku8GOk9n?Q%^eW
zG4DqNWJ9qwje8Qzr%zBhH?{66942DWszY3lh)jZ7i#Z{Vp;?k4IL8sEVj>*~fzQI?
z37bYxXe7o5C2<MtR6H>7^Wbp(@Z|wLipvO|<9COq{5dY1Iki)sI-z}O@|O`NtCI)#
z7q}_pm{tR<am*R?FVP#u_PKWgUff6ohiVS2r=!L$4f4eke6--bKB9C1!)s7n={5fy
z$QN#lSDh2Y0G~v35>c|vdVzE!Q7~oqrKI?&NVl{zl2lAg>akcts0BLx2+N`jBHG+M
zoi~!@fnQ-lrdTD(xKJ~<PD+PfwSIIZciL(%@Fd^xEKOZMHY6!~_QDn_Ru2+9D5FbC
zJavoL#L-!GYJ{CvGEi>FHTLS|AC at FnDEVP@fmi#uGUsIJ_?(2S!|{Gx$_ at 0eqL7Gr
z2 at 4!onD%VcN6KQL^(k8~nu;9;RJ)EjJKW#?{`;+c%we*2<WN$-R@~P62^NdXYodSL
z)*zIeXVqjZ_K7lr+wcb6GdRf&v$@OGd&<8e=n&ot){V3-Qo+%n^dGphj at MHa@GD#j
z0=5rTqJ+M^`*d&r`8sz^m+701)bME!qWdz$2Ye>U&CA}0k)>x1x~dIg#zpD68FiiC
zwHcNqTz9jrAGUT6o6pyGw_m)}R9JVjb=l*ahuhB~J^7#9TehB~v{l-B@|UfRL*K5p
z<Q_`eKNV1-iEyde7aT|j&J8=MsR{nDrkFaF3kODa#14c at T95BiOydfgX-IHdQe8W)
zt}c^^lag=Zn;Dxqn*)#8!k*Rc$Q=l9KSBqKi_w{fb;BO&r-s|8`;l*qHDtdm(h*<9
zpQzZ8x~z$!(KUS3uo>25hC#NrHj?@X@?bWCQTGzZBeD4#gh!2J;^S?&v?W}Z-W&0@
z=kC>5a~$NFE7BI*6k4|i`8NTNd3%~}WU{YGn>hwr7`bJItmLbO8j35&Su3GwBa4;*
z(AeDHdtpmQSv-Xnox7t(3Dgs&L6dc9+iv4<(>PV at 3~<tdeq_1HD;6l54rvGSe9125
z8&1~O^q5Yn$+G0Nj##ypryP7S+gjgvmf^zP^09c913dYPvtbqLvoex$6C>*+OjJ52
zkz!V8GS)35Qs%dhKl{@kpMMJsAdlVi_v>x&uKAUP<>iHY^HBfd&d&2FTMg6SIpQ5!
zo|@|b4<+%^!~6ID#J~9D|K5A>;K84km%dzi_+WW?`N6$EEv+nnxpMDM+0u17xoO!k
zBUrNRPXl<c*0nL|eO=vu<9Cm~1qDD|k-hC+t|BCm=?<<Cp^j}m8@^k+pN)q2XUKn7
zDc5Nbn+S`RL11>fy(%dZ^E8qzFWq}^FI!n!`f`5h!Ti#f+47gGOZQgqFaLLT(YgFO
zn-x*<v)S?BqN$=k?_K_)b$Rv8S%1`DBjMqAG(Ld<-eJl`2ne6q?iwHDX}+-D6X6o&
z<%Df7O=##K&^~KCYIome-S*my2r*V><}sN!xvH`^S60eoCs2J3*JfyWDK7_i$kr7l
z0xOC^JcC{sa<W#K#fT0~a>k|t*LbafZj1f;ges3lgU5xPKJ2rPM(2+|A3j>dp9!VD
z=p7HQzWKN%r|Y?{6yO;=judV>GUAFFjC{<j;ILc%e2Y?)lS5`tMr+O+CEDd;S#x?B
zQ|{btVrf`jP-tl!$s9GDT!Xs_@|!89G!*kfiqV&!D<QIYvW<K`2if>iVZP&Uk4Ejs
zkB(*fj~@e(?P)5=Wc>S<ET at NP)JWtz`h11DGMwU&L6X9=WRUE)+XXs`>V?VR!M9P9
zhX_lvm7Nbdr{E7{ME|%T3;I?xgb~Mb3=6N7hpn*y-gkN@%&?Uw8<D7m#ZeXLsw~R`
zPdbGr?3g5#9UB>SM;9G<w{9Tf_l&AR;U%r&B8mndMpQGJ%8}%#U4dadIc~apvo_<D
z2h3Q~9bE3f+A&A_*<F`nfJcsBhEMwgWPq9rv!E*nNs}3oCr$p`xSbo~rk)z67+`2O
zcPz_ukO(QEPT2u0I?;gQEK#+Jwr*!wl&#^hJH6UN>@Cqo@~_YSJ%!$B<iGZDlgfRc
z`1rcw428ZL`R~gwmmcQjzonIjf5?B=#q&+de=PYgPa}~1R_-r3+3)`R(sH)Eyt=fq
zdjH{nXD9EE`;gZzP5$#T<>F^GITretmq?T8a&J=*tS&p~sQSbXD=6)fFTlxz_IsM@
zwFpJt5$)O{iq0Z`*1o+_I}t=ndop~1lpdFIjiPIA8wSmgI~=x=1MqaGh!lGm#6b3T
z&O9AgaC4Es`l~TKP4EQV5kc}$Y0e at gPZO3oM#?XW!0JrK_T1ZoeMu_Jf^3Wd2IK3-
zdFSMf+7i8`6xIa0c})izn^B#@GqIflzix~#1|5I~8=dd~sSTAZS+eHdhJ1~1q5eCh
zji4_@>v%j|MWP0}M3A2{=Q>0B$>%Xv$Xnq5RG1A<&O4W_h3u#PID03>p+V+F^(eiN
zJ;9cT>e*!{DzU&Gdfi_-7uJLH%;r0-VfO-85KA}eBVgW9ceDMcTkyTOxANtK<@*bQ
zU&+f9u!FQp!NTiusI7BQFJT7eP&Xm(A0tUFH7>Br-J*f6DQPA01LA8QK_qFL01~os
z at d}hCAv|gjnX0UEJF(k6q9Sl^MKaH$hTo4-p3^RxGhSu#Wc^^POwj~$h at M<Z8vEbQ
zpfBkxv at w%7!{{M#+hCuyhEF=39>;&xX+u=X&PSIQV*YDgNWv?zouq~sOV(J at H_vqJ
zRz4WWWvknBr#e0=slle>8tr3|zHC`g<f(4}%e>zL=&nn5dsj(MS7W#mTUY*?ueji7
zG{Ad+T_f-asXXywPx(v*A;{USDDWgJSRIX!ZLiZBz#z|rasR;LkOfGq2Hhl(?g3_|
z5f0My#eqsrodi7xnWeYB2qriv$LShKgJ|uj;rw4 at P&`m=9&Zn~m>?k{9))1KvI=!=
zSuiO<DSFdGy<Z4KES8ji;iffTder%K#94~HU{L44+M_-^U#AO+RO>XrWkJltg)3<4
zMU?<tV0i^7giZ_=75Gt5TVy#~lK at o|7ELVw6Vi>4Oekk?T6 at X*qJNr)ldT$rRvK^$
zSBRiA<VFqWaIhubX})2r5VZ{yA2;>6!+-#6B^^s55IPxF)buVymQdtTqZ*6 at DdEAe
z3VAT}c?^b?EP!D}BQS)1BNzna1jm1SvgKir(h&eUz+tm}9QQA!qRu at U@WN4}>XITE
z0SEuiuzS{n*HVALgz(PgNbqW}B5dWRY|~XHr0C9ZK=&{r3z;~RSd4m0DtPEo;p(#8
zJnI0mmK<A^zfc!evv(!n<E~S9J0?p*$wFV``K}d at W+gY;ZD}wWt5u37N5*Ph$N~rh
zm7O!{puh*nf0GV$vyGY;+Quf_xxks;O at FQfQSp&s at B?sgQH&%RkLHM1!H5(S(4)BV
zFEC3&uWUo8!M_RQki*ZOHHuxoye}Jv;0W*sR>p2Pxruw6O{a$;2!S4MGzAd{s$6hJ
zlMo}&ORE|agaCK)hSdNt3*v(zwT~5e{)D&&^*S={gd69fXzsl83N1lR=s7T0mV$KL
zq}R2uSL_a;VK&N7p`N3P97<pKF&RorD?7Xr7fonp&qwhZ`&T4dZ+3 at Q7p?a=LO?yv
z)#i>3_!&H`A$$=$3F3ka7x!Dgt(Cm`2d?WYlouvid=6Gre5h>t8(~gUF76mMU2BS3
zA)zVwn_)3-$Jm{=qzaP!xcnlBx{FUDd5VqO4^$HOP#}8dRSi4ABw7BS2}Q--k#kr_
z5L-m6LlqXzgNK-0Xt3}vrrPEBalh=)<O!vP6U=aklb;vNZn?9ad+v{R;+lcu<8v)P
zH){nH3d>urZ_%-6lpY-qvc(UvrcR^(xkS<=INcs!B1N_xz^|igsMr4>nBo4ty#D9Q
zhf9Cxf3Ab$o0k1p`kyiyfez at wL$m*VHNX57l0-oPw0dtTwg2T64b+%Wo|1#l0EDl3
zPQ^Ps8=efhS5V?$;X4Ho(^ab0<d%A%A$ye&Ym-319gU8((G#A`dEWUEiH}5A!i1MR
zwTJ4R3tTJ$k3SsHz#za;im$N!R=zvEXy at NCu(3JnQ}F1FI=IrnNs8jj+0i`S2QQyI
z--hql%bi2GOj-mKIh+eb9Y%188p6~>(Q|89ShQ8(5AMzO8v|3WBBkCTo<&M%DKTcD
zgxhXIv~L~?qM#HEzKG!vCLPZJJ)AKE*q(c%AF$KMg$ab4S)A?{(H2D$+zEklImx6f
z*1?Z4882E114aiv8BqjP9taeZyNf(N((FWp6Cb#P0(+GHuwewO=}Z4_E-#ULF3ro)
z8+E5>9ixb3Am4c5%B6hsa;mRyUnr at 0(+*@AVOzZDl=kBGt{B(JY}iQD>sCVbh*6O*
zt6`cIo^w3vp}Nx3PaT&x!5VabCt!aM_WH~2|8_q50GPOf4gU^f*oTs~JNW1$pzgOj
z_#NP1 at 3k)8e}XA!X}h0h1pndzrvvSrvJ)>$s_<LQIJrNRGETmT*-&6+q~w@^qhwe@
z({Qs1yhhoW_M)r|J(Mt;lBMKZ20OoO4c- at 70I;Nn7g6tno3j{`>v)X0h3Zp{=tc#0
zN>#ekW?LElwWu3;76N)iC+8xKaXrp~I!se%oOgI7Bw}s;#)1!$<_$(Z1Scv%1OgIZ
zs(@Rgq$FkYA%Ci*WAPr3 at r1^m04q<R-yUD7MG8)L(Bq!cQe)`B>9XV_yD7RoYWx*x
zEYypEDqe(PY(HP${|Q%U{<E|q+nTlJ;b}$K;XfeB+^rpG)Df)_NGtAN$vSyr3qY_@
z=+t8+3R`nCS2Cv at mlJ3lkjYwz`vvNd;>LyoLV~Wm&&z!fikl5vryW>=)Yk at iaDuiW
zZerR!Da&n2uG41u@?Z~B?n`CDiw6(`j7I0KAd*2se1zVAm|jKX>#=(iNa`UiPG;TG
z-e$6t;=-N^i8%yH-jxdUO^LcXNMH84-~t~9)UmYn>0sS%|N0c}`P5x~9DwOI&(=O2
z$m(rWgf=I!w*bZ<C#@Ti*3I4%o|8&uk2xHji)cAJh8>1?5P>1v87EsmKmzIZugqgO
zJ49Gl6<gHPNob!PRF&lzB3S6I>Y{>*n+$xw+8y-)lkQ7c9-FJ>1I7M?KNmK%Y5OX$
z=pq})4X<hoEtrC-5W}8YGRlZH#H{5N;~brRa#RtEP|<egnH%WDou#AAD$KoZZqbQb
zcQoj7ZO7`KhA?fft)u3_`LBt3pCL$><*EiddPkauSfnEp_S at I&F9Hcv85Aab$nwH3
zLkGO$qp8M^bcsVU90^6)NZdx4h>#lYmE~a>4k>h$3FZf4xZcHD4V~hHNQ=ArU3=@N
z%}`~J^y)CZpc_z-eQg8~<0gU+tEz)OxcSufPA80#&V|Y;UX8mKy!-~UDw3f*mpjKD
zFJa?>p9mw+-4hSxJkJAh40cqxNreQp{w5tN$$A=Wo*?Z3o7byO{d2cKT-tj9>6*;T
zi~B-k5lwJ7s<McdN0C=YgUG<a3M;w5ObT3s9YIq3M%B;J3gioZa;uq-6fo10OoS@$
z=28JeD%VdQ3iWcuPwiMBvC at eIGwIw%;`(l&NvqLFNk1h+wJaEGbQDfDiK669sx+H{
zkenPH{RK(0t}VoD>)V)IV at RV}cchECH-TH??bM^e^#PY^abNjidyBzjtFrHuV~@S$
zPgsSSFgVLLh}tbMf}7M at gjn3aHJot$$qqfDJ}t1xTyyNzG!V3EMIzw5l6p(>YBBc`
zK2yvjF at kVa1lJ>$xa{0^9n>~9alI3odAh&%ytJ*t$a8b^aTX&{%1`a0tj2kK>?y~3
z3^mWq35VCd_20N45xu^1xV4{YL^ST9s`yM^3Qkh0X`!K<RbzGZU!ib!#LuAIxLXH7
zN&Rena}y~$L`A^*bJwgN!;;n2{diPBWkkv5axI!JBJ$s8AO#8#5d;_F#Hv2X5%WnN
zwwUf>5?zDNpmT;8YWOIez^3%w-P!M`&ADy+H1>$V=t~6k;$fhAnaM^@CCLAGYwSOn
zwuMRj-wxpSq3I7MX<J18K$z3v^X at 4-G_vdzhl5yBi`H3w8;{nYY~MB%Y<MB)lwF49
zSl+UVamlfY)pG4eKTYlnl6y^`?o1j6;<_`W$UNhal^mXVUX~Y#c6xMcejb4Uyh0ti
z89L{Go6XPTxg4rBK5K1891t>bubI_n-(=rDo`KuU=)8~6TwHZLLImWaZjWIT%;LE=
zbKY&YJG~jn6t*^_Vk_UwXm0wnQ67 at CNjS<7KkD+pZ$vB3r at T$sC4W!|z%y~OgjfJR
zoN(UA3y7YTqmDbTHWeZqMggRxB6Hj|IR}^Z!xOvfD7SFv$K(&A(RnT=r|IDV>sP76
zO`m4Yjn0l!Hf7^tI9tt}=#i;xK73AXo~bChQ(PD#=gA0$Qrb-P`6{o3BOPGU!i1F^
zl$jBxO3No>YSe&fy27JZ9#rb_iia1~A3`1>Kr9kgs;<%s_7JOtipR4s9C;_H$=z`-
zo at G$##F0n?6Nlj&FC7W`(ZQ4rsg45cP~3+ at Wfw+RdbF$7Wdf>;6<nZc9`Rhk6Y=6(
z!$JFc-TMj^-7Au~4D|LCq)u?j0b&iJ3*LTofvZ at 12-9Y|1%-MptZq|^U^SRGh{fO>
zj0XMQ*^ioh6?E57=~d3S;2Q`o2Ls#eBZz8Wcq|vq>Z3*1o$|ZUDDF4f4_Fw1)+3Bz
z(FRd69`LBA$c`Zy47A0V8LL-^F=O+|@RJ;kn4r={L)JCZE*y_Xqka#MWSMh5leK!i
zmUsL4hIjkQKBBQnACmHd-<(FXDOX~{*C;4bPi4H3QqzkGvEF#=*Urg!gwVK1!w6Tj
z4kDR_9~d%Jo|nOMT?-DSK-jv(fa~diyua)n)k)&uTK1B{c+57cM`xh~%@afq^~P6G
zoFvf#cUS(23<3NZX*w%mCwwsop$R8?+*n%*-MK_aN;*`+@^pRYVCx%d^WU9ARN!5$
z{fruRK~2^=1-&9F5GJ83nB#Ro$Vo{yB%_f5l{Nz1^ToK`$(*f%K~|h!`gzPTkWqcW
zK|H*Nd3d{eI%7>lj1|B<!5xBoBHan9+#o)Y`-685NT-{>Ztm_tJ^Xdt9E7;A+g!`N
z!9xx;&8$?O?AD+RoP+a=J9T5QS*T9pZ!2ZcIi{(hX(6YGmxnV)dL=S8d&Xzrsk`hJ
z3(WjBal|j)cI(yrVX?<lM8Ky}_P4y<G}bk{o{wg`uSygFvthZdAxYcIt)g0bf at T2j
zqeaC45o)|=xS_nqHo9QAt%Au0BAiGLx*-Tw);BRy^2zJts?bo12UY!})l%*M6nMf?
zEvF4;OuRN)$zZ3$tGEKXTu4S|RhTU|N7R!Dm+40_OL)1^PNzY~pL-P){Zkqxlo;~!
z?=2BU?AL1+Jvgx)!aoeqIR)`VGlZkn>%do_b2Cm=QE2rt4c at gyf(rX~^-wpSZEgJ3
zl;P8iH9yYltix#MzCJ at r+;DF;*u57_-umBL{}JPjeO_-i-1Xh{ouB?gMjN>(-)yk^
zTQAnPy;<kqnvy?}J<)d753(gjja=W3Xq6$pQAnT{%0I?9a?TZ0F_m1Sbo=(FhU;^U
z8Usg}9Ha84+i*qI29?{Sjn{7;)oeDgIpVyZqQ@!qglHSp)_Lp>P#t7y9Vj$XiPFMu
z<900mS;*!@nk}(Z!FAvpr=TcqvDF(=d|bNON}di^fIR1B%=~czuwp1OlHL^^OQT>r
zox;gLaFov0CqVS=n_xP);C@;>E8ezuH at E&i_n(ci$P at VYK-tUP?Z3U;`VYq$El1uN
z`S-xu)0aDN(D?h|e-hq|qk0vDGedgT3-t*yQDrm2yX9mtbJzWPy1lit$zQ2-IwNtj
zGqG4R6E}y945Q8^lB5o^cgUF~7nebA1~r%HL633d4IvY%jj?SsuYX9-3A26|mkl5`
zlGrfwnnQ%*`oPJ2<E%seS*HkNnV`qvFH?=JW#3t4(Vxs2bhmkl3tvfcuFWnSCEz4s
zZ||yN5f3_pK@$u+5-a>1K?f`yn=dg`JJni1kt6bo(fIW2g at DA8o1zvQs&1vhplFA0
zU)|YfV>CvMaGy2{jGeSOP3aD80Uc?{7zaA?Xt?fZ7IzzY3Zu`+6*+=Fs7~UVHf56(
zpZSolFt!NRQY4pPNyx?{M{M%gt!P?F(Lfn0k1zw+(O9lV1PnWw8oMm4E3Zs>6eA4m
zq4l=k#clO){^`R3{}PLObS at fe(?%jw3AB;D*4yq`3%6~?ya2j$q-H_%@fA}M^6Ihd
zbkM&<<}t|$V=aV0w2)eZBi}*8P1E2tUd=xiRTncPas<qr^6#1T^rqPo{{O2tP5zJ6
zC;$35sL%iL at c#1h{apT!r3Why{>cAveN11!hWb`qH~)Y3ygNKWYNzojl7GT3w!iha
zm)rYWo7wUEY<*`(xQ|QJv4HFx+4GkNhm<p%X-zIkMRrdF0c$CgVX<`tuAJ#DkZ6Kg
zS?|(&2=??5Qbnqnwbg#x!fj7rcw<=QdZX@%M(QwO2>W6?djq7~XDsayX*`f?RFk2m
zWDJ2+%F?uF7C+PoCSc9XF;p?ZETq{b?u+0^)V|2dfUc+AuxlC!kNGe11PK~&D-|q`
z?yiKW&m8!^U*E%VhwdTLM(9G at cg-v;EHLbqK)4;Z4cUf6?+$HvJL^xjcA9TngD#`9
zhVW48GRth1&12N?xoKU%?MCyf_(I6%`i at DidYw+2xl!(9+6vOZ;-;-L_&g!Q_ZcpM
zyO292(Uf~blslB5z*tkHWmZlbp?eP-xj@$PG4dkC&A4}&y~|Za)0Z&d;ySh~Hw2fw
zHydBEUxZIN%*<zOis0y_U<irq^oG2YVGi3Wri)pW2JfLTxdZ5}TNFq5aOuP#Qk^9+
zwP7ywQLZ at 2Ftln2@w2;FPF4C|^5jNz^S2$gL^lN{`NUP3<I7{YD3y=DORnEYX&Z at m
zzWVy1CSP7&o?lww#T)nTuRi#yH1W<;2*kbqySq-3uzPU{{8sY-w<v8K%I(+eR&twq
z8f`Q0s3TMhYm2TYgmK(b^XRzSa}8 at T%8J{E<rLC3Zu5jL7dZzhimYY1Cv!_qst~!T
ztjZT2+E_r!H#1vS^?yRuSj>*y<5Ku=XJ-*;FZNLQak5@{G1!eMxRFC3i|bXNH{?>D
zdhzT<a~s#k{jjxvz*}MQvezGF at 4-tP0wv3vn|eAQGBxuYHgWf8?lycEAJXajViYhe
z36=;HSgZ(({o`N2vf!`O?-AL8BPZj*e}yH#19#w3n``_p93K|`x3jFh*>&ien9tJo
zBbO>G75Z@^DG!>ENiSPx-4j@&q1Q#8y)k$<FQw(D&}mswj7l#Fh?8BPkVhKnarxKh
z5XUt#SZnS?V#(UJ#kJJ=AOar~S_uV9+9LboOdgUQsYBR==A`6;xQ^xEO4 at 2Zhgk==
zEl%I2)u?TILwNaAjcU=_*2L&MRbx^zZA*@8o=*^oxGr(~`OD|cjlJj3_jXI^Ss7nU
z0TDe_dq6pU8PNi(MfCd at +&SrlldLnu4LzU>h!;~ej%Z)0lF(YN{q3GQ8NJ-!Sybm?
z?8kH-hTtHs#n<Q$S_+rym8>%&O0t<dAN9ivpqSEgFye7j?qP0SU{8d*RQczk1$`3o
zU!sP;xfwO=gXL<g5bce~lv-z$^`MMGU?dbZ&t91DG;CzYV;oZDYE^e(de#TydpGEg
zL=u at pQV<F)l#(v`Co0<ri*=FJ+3IcC^Wk_1k0$V6(40!3TzcQyE$l7chxTf1`3rl{
zq=371aENEwx8Hv2cQxnCY_E?Rt^zXw!-vmaKi%HhI*4C_kfPTITl--6@%#Ag#@^mv
zx3}WAY3;4uAL5s`_qD0mDqsnF4s?H4*c)Odnnyhx)rVb(i at Xc$qK~YP5PiUmH0OAP
z<MS3W^g{x at 9K+4di;o^VF7Vl~a~qeyFGpdG0%5+Z6fnsv#vpvkKAi#XoJOt}a(R*C
z5bOl~15($XUG$G}eGIqDevemm`?8V{2IBf at e~e=auUc>@QOSf7wq}hmOwpYjeMr)X
z_W1Jhz2TGG38_k5+jA_G=<8%OanHC4803t+`Ccs0<w)pXtRFtZM*nmVOJ{t6;}DM#
zmzajj?hxcls_cv;-OHeJ2@>ZiNc1uk5Rh=<DI4Lz3sv5BvG`hGx^U&>a*_8LXG<nx
z*5nFSgIL9%kTE;Gw at 5nZN)yD{W&kQz%7A4tVbYdnF;sE4A~?HR+@(j->{V-YF5&u3
zOgbQeH?V|WBoIRJ8nvpz82ilC{xfS!W`w9Td}yUrd0q+w*-p|O!5AN-t-0i}Ui_Q@
z9L-`<6fG2N)JXwU^gQkto*u!RFyBL5Y3CNzI}jaKl_uiN=8UYt%Ws=-?WU6{js(Z7
znJL-hK6XU=>0J9Y*n}tJ2v=yJyS1z}7$67poa|o465JJ84Nwc2kN^4o7IIH&$>xi_
zgYd&~K>t#Bn*RkR<i9J!@;?u at 4k*jo?|5GDjM(w35Oj&89;aPiwvC|-=Wa_#gsn%p
znmb;Px3Hp{GCEn0pq&x~cmm|)JE>e&Z%|UYr|3tTxEOaTnu at 0KV0;X?FUcBtmrIa9
z{0_uLjj$)IXJ|!O_AY)yTOJODNT`dq5COQHLA7V2^SjvNWLuJL%L}#`=up-<jsx^{
zW^>tl+?;}hS3DsIVIjLRj<4t+=9 at cOgurD%$H%Nu!wk0=fFQ7)x<<7tiQE#E$RqCO
zh?TmNX{Z+T4DyTm2Hx4BO?NKThJ>e56la*K2rVoz0(_*=Rm-oAy6q5fv#ielcQQ8b
za=dE!jOu4TF1DYB25?llE`0n!yPvskEBhIi_mM`Kr5*e|9mC%%+rIf2{vJ@|$B^_h
z<y54oVx^`c#G^<{$gJ8p5D$V0QyN$#IbaGn3z}sO%7RSX2f0&0Om@?S?N^%uRip4C
z_7t4x+uZ at hx;1Re7f8ZNW^Qs38O%{5%pSxhTi!Sx=i5eb^AHL at +4pdFp4&H38=c{U
z8f1znBx&^cT~-O8YIjf<dO}x{$$<H)3A4!>C5k!hIYm&EKUiUQ0UMet=vu(_JoX-q
zS=N3j!}3zY6?LtdFjVp`I(-O7aTQe$hf(X=;4M-ZDE4}e(9?h=z!Qruxq;vWGiJI?
z)ikhj6we^~I!>D;RR$}={sM$zm|@~ZeQRnofLj*2?WU at N;*8p)V?MPm!{7{c;UyC>
z^HL?IFiiJfPX@$c3{04T(2Qc1B^@7ka}-MWy*nxtXaKz4{Xn^YQ8B|%k4f|`mtCoF
zrW%c`g`ia7_29Qc=El8o=L$Ar#F%n_OEep2S0`{V0&>dU%y}$u&lH~hW9#D0K4Olb
zhkXl_HL+Vm)dTURdo{$xwC9~6lq7U4cO$N>NOHefP2JsZR at cc8m6d~ltkUdBzyGF-
z4GVf(Y--%DM%YkkzaL+n4REI}S(2DAaT`?+VTNb27lT6aO;k>xen`;d8eA>fo}DL^
zMO|ICpxI(SP1C3%{YuKGbj+Y-%@S_x%T8u!VnbT^p at S=;Nb-!|g4RM0Zt3gn5pr-A
z`t(x`>eCeAyj0Brtji4?i)R(gx;CuQq6#@zkQ`Y?msiF?N$Z?{JwYgdxHL6XNLGb!
z)rpH{!(|INi at 55zRVErL7EZ}X;)A6zpTK}K%-gX)u=RV03J3o%^My<a`H4G71U94x
zj6^%MyVv|-eSdo$Ie!kC+s|L@?H>jeQRIRUl<#rh1vLq2$>4=NA=Uy=RU6lQK<Oai
zWTYW?*2FSn0#dm#)GHxSQbtg%cXAC!frY02pfyG%NiV}Xvy1<2#+#rsIfs&D=+(C{
z3b-SIO8j=#J!)_kRmt0UrDX5UyXh-CE5uhEY8Oy5gTxpD>W(iAsspzJ5_&MM$lZoS
zU=;vVQAr!PDkcX&{HhE9B0ZdDunPPc{-~ih%9V7?7vT(~J*LlmSF%GbE;f!4Hiq~>
zE;G5&NpJAcvk+cGl*hKv(xjH*sa(E$(LWQ_ZS?pJ)}4C3=tCwH(2TTENj{{E+wPu>
za*yFil6w-}#ub{>Gh at 4dQY>%RR)xaYC!(v=!*jcB33(aALw{9Ej0XY?H{B>1f2a^$
z)1?oAw9WnrbTP2r(h9r4bF%9J?}Q%XF%}0{01VZ{cQvYpN6xc_U0~}CJ>XhmSpD?!
zE(a&&rKnKjs(lK&JnJNb<U at BmWzrsgNVdW7upw?gxTvVz*SiV)$ib`IxVthc>Rf7$
zyS<cL?Ea;b{)Jvin!u8G#3^YJ=SG~E%W4%d>Y6Jc)_}m|zJ*yghY(i_$|f34sZ}Te
zBS(R*4xJ6hWw3d!mNb=8J-p_ckg6m!JuW8CeTG>#wR|XIK!SC7ipdxio)&SyvO-=d
zGWnQFIEV>X at AF`kt_Ie~p at WZ#)4`|Z3r(6RTd#Zp)}kvaA}@U|nV<47GIfI<`SNen
z%`SS1)dYSEZF%&p0lB|7<bg>#ZBpgVbQ3j2-VIu~GBoCu+6chz4~8)#;OP%{k6|}~
z<-F~hgk)mdqKe`15y0#NeoqkYPNCtJ$U9Qw1=jQr(Eqo)BcAU3X$B%ox(#^2D=LJo
zLC>l|9<^Oi&tBN5{rS^{gR7r}ZGV)=AvJ^z*l$!g6#K1LAEGyA5QX4(K*=5e!|mbM
zRmPb^1jI?Zb;4E0_JFExe~jarc;|_C#1QwXwX&IS+1A>O96Pw#mm$GP-?nSkprQ!j
ztesn}wmZ)HlJPEXWiYamdP$6>o!E-7 at oZxa0aSOUQ<U+yN!R*BPHsjsdJ#PlM%Ern
z2ZecIpplbENI?@(r{$+Xot8{dpwA#6YxbRgis(^5f$u|65PqtTBK$TK=#vBm8@!s2
zM<c9eoR&Z^P|aLj;Z9}BY;T|^#Hk<p)NUIdR`7^{3ei~_TD|vhND%vvIK8xSu)>|e
zq&ji;5;Ft^T<BS-m?L_5#G-2o^%72qRSyH0WK>UK0<|2<+z+)1iaMv+eAjx at 8DGuO
zEQ3=IbvsJ-qHYMbCDVsPPob6 at Rcp|Jf;CSUa9uPfQEk<$&;Y^B9Ue{&(C<cl=+gYw
z6D?zr^!4}-lywJao);aDaL&&9?_iM~W^-;#0;BXqKP4z$WHmy$+wZ-VTajtH at w+*8
z4f78pG6HY_$!@LU!|qV{6_}M at 3o=p8lsF4Tz39=88q$VNB5p?HWmY9sl(r(3Qbu20
zs-7cJ9xRmC3&Rj0oCd>}*#$-73I!ZS#<<&76*vHu=gC<qXW0!@^R5N(62c)JPbBt@
zUx*$4Rs8T<gdzRuB%TOId=6tV^dU};W4Ew5AGj0Q_9oHBhx|0K0X~1fPIGNqT+gdK
zpq;`H27kd}S`7zq15b{y=dd=gOWvDGeLxvtzE^<r!Yrha<xC--z=c+H+;TsMYnSUV
z{%zZygWVm-qe<JxI)nODjeBr%GmTQJfU7=kmgjegIzW0hNCsot at HHKS4$=*Ubg66s
ze`Lk0StcR_Zq?W(jrHa?z-Y#~KEE4wKv$AjK=5yeaK9Ezwc^)6)Ig*ih8n}KHLzGw
zfZ?+1Go)S%YauFws<B$a@*P-srYPyDi4+*ktd`%yLEibZD<8T2+qRFAb<9#;&cHs;
zOG?1N1ZvzQdItAY`rMP1!L<M%lo8Fy&%zv`30F5TTcjX3I3kje)Uj239HnBAEgWPK
zI{2i1*S0!-Q`ag%3M$}D)_N_{lpEyn=AKSQoh$f}u_vugKwtnd!l8RukH)B`$E2?q
zkcnHsU9KWE2zNA at l=$1`myvG=rwUEyQXs|X&1AGjg*|Em?L=?UR5bkPMZBCe00pN*
zhM&lm54L>yUc6`)PKI)p;NB-z4W_IS503m8;Wc$iC6n-is8f3`D@}IF(}T`v4;K5d
z)I%9?TDmDfoQ__DwKwHhgEqMSC>&w4!)XLE3jh-#f^N!A<0fUDqj9bwhQ(kV)i;y&
zE*lN1$hx+^VG^$MhgOdIF<rOBa|?UF93;RRa}L^MJEfmW*KaM2ok9*Brm*!=N)U8n
z=6473B0qPsA4P&=R#5fW0`mjY>)c8<AU)ODuIKG2*w%fT<Dl|oyX^H88nufp`s>co
zG_uj^jdtJ-E}J`4aKRr(d2Im6C^CQ!;x8Rg0%S!QEFBsxLSu8tFsF$3>R;JC<uJgJ
zI{O2}k5aeZ2OL3#TdxYX;wpq)A`9}g7a1Vy<75drxsMH4wA%*7G=rIc9GaA+FEf*<
z<ExxCE6_9lSkI`Jt at Yy}t{@wAUJklcJO>W>WCIpSSO at 8e#xo8a(_xn*a?A^vTaRj0
za3_}7OJcglvZq5NITA)~{0+WDo}J3|(3IzCt1g}C`Ns;tlM_*jo17!CXU`4~UmQ^G
z4*?)5(pNSHxpuDcv=6!Z;9y4*Ho&BGtG+nA&dx`pt6`vY(iF_5?PpLjb_P4}bfkV&
z9elV7;`K4tSo|MWUnKQtJE|~aL4N8xf04`&Ku~HyJw0eSZ&jZN7kU6NW}Myao(I at I
zM>45I-N*b0L$lBg@>oWbh)zU?Rs5%h-?A_{nMlTPk{3&^^BINnx?J_whOOtKPd{MB
z*62KQ&+uFc`6B_vqL_i3R#`M!evdW#5;#Fs*?0kLtCO$>KBYs%`h&gbyfy4K7>~pQ
zy%ugWT0j7F#{yoW8%$u<ib>wkJo#ZOQPaYrwxX<mA`)NQVZe}`>>gZ#vVUrAaB&F=
zp~IT9nprjL+Uc#ZBtfU*(c!woPAp!#DguzhRMMu@;IYvHk<98D);1T3HViKfO6g2L
zx*;{5V%oO2K}5vtZcK1D+C(p^fxu!ukTWv;)Oe3XfxTxc&Xc+tk6PI|PNQoxP#wNA
z$Q3@)$V^DuzR<v-fG6O!ndUK&_GU&h4p-tL1_Kewj}}{xLt`QDLV!SGo2%GeuC<R0
zm+<%LXBHbwi<i%HolP;rL(#^cB9)-c^rkl8Cp at seN_1MEs{WW3V5$wEyuBun;I7#9
zgcOsVFC4TeZ*qy5Y=W%})|uD_>eMUwBbGe|;V%Vs`hn=Guvv;rDD=#@eN^1*X8o{L
zw~TF;r%Rqog9Nj>8a6`#O4Mm^wg%&sJvI~-4g^^n3I-f?oufFM6cns)MP|I^PW#w}
zj~Wg#2#fTdaIWL|H&|u<Rva|GOId~(qVI#d?~@T}qGfagQdP-p+7ghW%By8{^mb&X
zjd3Po1uZ&)u&P6l-sXl_?~gN>I3T^cZYTu=ky_ZtEW|&j1fsjMc8JF1CC$w0d7gue
z4(JMp+M)zN7IjUL!aR2(g2l}|d&e}<B|wn(h^z)F0#n2+n-bYCb}m76@&w)~Ny2+p
zuVJb2g4^ziKKVe}-{yUxP?IOU>9LtjLdN4CerBVw8J4hnf~1g3E14HG7nL<cvJIg#
zZiMt*(=J`e8QiMRae)AJCB8>tKT%6Z)Jsx=lZ(fB%mgnVom at 5O?&HoiNpZFq9cl;x
zKR3bCGY8yMsKPLxGL<?G(vX)K%}UJyLSp{w!B;C^eZAyIh=SXvTz6FMj^)G$FU>v<
zy%J3ArB#KS=wmDaO$AuTqH7WlDmfW<=q`2K_lOm>N!$~}1=JKYV`uMNz at mWPJ&R)k
z5K at KCm{L&ZCvL&@g94XSP|qj{Wh+Q+Bk}<B_Y%tsrT{IiJ0Sx0sU}i~J!vkhrrM3Y
zY_=1U at Z~_lfex?@=~zHiOeYd8z4EmXaSS+?M#V*biF(xP{}L<~d0WhRw4^gKMeXM(
zuCTax3|q`LoL1P?PZuPY;3tvlad7hy-Ht}5_ at nZDq`P6ANUFCjl$+EcjocO>nLh$0
zFC*(9!VTc`1Rk2oPPyV<*sm`JLNWC~(m;OmiPRIi+cF&Jqn`1T?wQ0zBzcvT?LfZh
zm+wddTVdR{t at jkp6^Lb#9o_Kb)%Qxn+|+r_EqUz~a{+DsbZ(Worh=}|o+ at F_!sAii
zC#UzqkRa8{Gv~($$|Z4-fj9<F$4L|3_-e{_1sjZ6p_rO1%32zke+)WW7we*cg$rKM
zf3j5d0o;*E0FeK}<a<dg8RhC~(9nqR#lcO5a4d6_RU5I(`3#;dBUAoz&7s6o6{a^n
z*P?B0KU0&c4A7Zf{OT-Sm8SMC0ZH`3^=oeav5bo1Fp|=57;Xs;{bR7O+^B=R4HiyE
zg22<Ign{8n)jcKUxDRQzNRwP%pv7ItBV1Z;atVO60ORcFJjO<$dz>>4xdLCHU;&Es
zB>}00f^C#S(S?(GXL?w+S-cV$_jVF6+m~kskD-N%11RYc=7i`+YUe?w>Pqhk{5w83
z4NMKfccc{_1L0L~>)f<4Q`XbvDN{z&+M0BJ6M&6eS*DTaD+pd!@a@!iie2R1!U+k%
zs+yH#r*n!p7M`y_2$4jE-HJ_f>H5va(-;m4&}1~&){osbr{5{#z*^lx&zEICR at O$%
z4gxtB8zs%uv|~&T at _~X0=Es0NM3Z7)tx^I<Si=qSh$Erp1w4=^7RXL?w#G4(ABTb(
zo3`5OsY0=u)nWVxx_r%#d&(|!)x|0 at LKcl-2VV4$P;@I|cwabR+>snegC0Dyp}l?v
zc^D(5m=8AMy2qtsFoQo`|66u{;VU<X$;_KErF<L3NlpQTAW|%$eQ>u0QG{^il9Dk&
z)E-B1XT at WaUgJtc3TePesz(hy81ej623eF%g*EvpDMs?^Dv at a!{nw=pjvuM?%O~L*
z!KuejegFmcE0ZtWcAU2FN_X8$caDuHW1G%YMi at 9tnTx?)glfIP;Z&o3;UyJI?by0d
zRAwEt5#p`rO~tS;?m!aQ#q2`J at WRvD@J-hfV48!-7811<@OIkWJ0#bHvKYrZ4KKyg
z0XdH0*#t)fWM=t)?7ewITgkCLoWK1kjukQj2hhUe83t@)gKchXZ~$lCiS4ThBtT;%
z at zY|=Oy;}4&r{Xir~52g0DGJpxHkiqdabUmt!p8Hg(Hgu(1>(FCoqMB8|;t|bVv&&
z+8uPub6SYR!A_S31eXUGe2AMdD<&8Z5~$LSVBU^~>VbAz(=P(o&${r_rsAhFI-fBq
zZXzCKAgZ(`<A1EE)VcsGFm3IPB1DQlNVilZ6QQ7tNLQW&{nhwGoq)d;SyZA=UnB|k
z8I4PtreVw_ldCxTM&Gw)hR_!DF5`N{jwIYcOsFl^3dc`vCcaNTj8tMu&gp2s9nyG>
z1U4}XKAVIzIf(afcM{>!^Ov91H{O8s^O{Vz3HDBHBzGw=obo&SlY*Ty>Dd-ah>Tk9
z02%tmTCfIu)_!QLgT%}%q%d{}w<<??xB#SSgTSPZMR3NTipJm)`Zduy+w7enPk_<m
z<UXiv*{<DiApSF-`Pu<#OVk0AT$24EUB74|YY6UbPC7Mw1=@DP)FNz at fGn=0Jlw|n
zR0|c$dxf+vwj*NBS(=#YaH?s+_f?;x#NQFAr{GMDWLH9cVQu0Vc#4<c!nOEC6JBL-
zBt&96SiSiOk8FfEB(2lqF9lXNh<fnM=KC+B5&5j at 8iad!SL9^QvPh?|K^J|S at LvhA
zIB4kc9z_LT%njc2WGnKZlRp~s)-JN4J1Zvw^R)Ow+0FBt-~)=W=We3kYpKP`VKgsp
z{#4$=W2T(IQXaU$FwNp9Rb8Wt^C1|J1EUoLxw?FOyx#WBE#uGvUhbYFsoQ)UcgqI+
zvENf!(ob at zh;2yUp&B*nphtkL&%{G}=gk7|XM;JuyO*V{CKzvTh(wLl4*FdnAbz_X
zIY7K#Q!=*!hHfRmd`{*6`>BkH-tBG!p&yJN011dTktyV?89xc4CsB8;R673DU#!cw
zi{0L7iQygm==ii%VvEK?b+KH+U|d?MUa#|SGw|Z^V}wC&R2G*Wen-Iq;a&?;rkA<j
zOP`QD&WyIuuJ<4{`|G3}jd=96sK7WOr1t??(VJUC+5j^F5~8T at DPs7e2feu<nfZSA
z=%_xZLezeZ94D3XJhL8F-5ef^Pav%TobYyPl$>m=OXatJSClN9Nn*_Y0jl!@#FSo0
zkh^ne*SC21*84vm@#V+)2;aJ>3GIQ+sdMG-vxm^^uKu~)9K#upq*^jRmmgb|j#Szh
zu7b4?WJ%KG0n2S(o=Ida^IS_%_tDOkyAVrOZA1H;lglOIb>IeOi!w#*`(j(#-<ea`
zJq8<NkC-Ug{uwjsc9M#M?T|B}vI*PB{to9;$zv)2b1m}*1Q`m{*IYgKlri5IJfCa8
z3*KM|`)nb>*<{c%t4|?HBnImQDqagQBxhyJHymd8Pt5j1`};;XhI`Ef7C0(q)G at _q
z<3D3A#M#hzn;b>uFfjt7;}Pm{Bb$WL*37DS_E`(dfVAU-C-v4j(l~|N4=;sLspTMe
z<71LFM>kt}fuc&OA^0!`-gk%P7i4fBVn>i}dnn+mQd+YSd*N^k_cMvxKH5W-0QpaT
zO_)&0z at sn+O(9kmNSxSc50t-01LY=Qh>vvU=;K9A^0d(R3Cnom^0>NB5rGL`zzPn<
zhuI;LaYMcU2j}y!$(t-%Jmobq_Fnf~UkRXGh&dKYK2(0BxdMn7R^|@}BezKQaX_(F
zA)tsZ0}gwL%aIrRo}|3uhoqr81(Gfxjk5W{iQ2T=n&QeNW56-f+XFd?VBNU134shx
zldnV}P^+vznn_I_NdB at vP79zVuB;$_LL4vvG04F(CTYYlZOouNewH#Z5Ki&fV8qx@
z$pRsXmZmvFh>9Ozl!=qRut$8w1m%I$dVpL@^1k}tVe{kGsaqbuKo{JUu{x5S1dR%i
z at eOtr{kcM;(ALw1XX08z>||6u1=)6;c^{E74KA5p3&F=zxO~7|<ezs!NURtk(Qkq|
zi1#3anowO8a`<F3MiOTHzTjoCPdizw<6#cLG2sbkK`wc$KGbZsV}G3rnQAU%ILEEQ
zC6{=FWX2=!hKdDLC?GWUIh#oOz<Q|+0d%c<By=Pi4o()nr~isg=Gw!7;^eJUZFs=G
zrbuiD0f-+YUTyBafbIL$-sV<XhBRXKSPxk)mOq}`QXuFfJQ2Y>Zx};}{LGRqO*@FK
z(f*k))FZBjkr at b>PrPKXYsO3xDaufK>PyD1bG>N|dUq$8nG~ADAt?HSxIx at ihoSyi
z<nK2aVbM>0ZDA!DG=pZKOx9l__<VN8-axpp_*BlYHzy+iym&9N434icvT6t32hrc^
zonKm at O8_M;?idUmV5L$A2m1SgW&uO--t+U~-|Cn3Mm?IPx>>^imD3M7Pf~#^Z6txw
zQEPS at uWBQN57=Fx?avxJ3q7Xcwf{?fA#9av4f at C(EZCtPHU;LM{A0=K9Sd&`Ry-y|
zUTA2B*yN9{@YJc#QW9y7H2#@Lp_kJ<7QTITxbyVq!|mGk?z6qEo!u8kF5&R*+)!*Q
zc~E`LJ1p*`F2n=pB?dj6*1pbqi5e&?fOimuLG9tJX<F)=D?f(S#yE&b7%;()6~#t&
z`M}mo&*)&Hzk at zJZ~OVEu9+dn-rSin$sAC2k at bXa-J9rhfSn!EZ6Nl4Ny1d^rJ$cG
z-N};^Y)`}%MEV2k`NZM^{aHkWKS;!k2dd^8Qw<=wvL_^M`42D>91jx at 1U?9D%r;<%
zbbM)KJd$t1)ve(GNeh5VcwQC{qLe?2YiNuyvMBt=gNN4yG$dBjW92e`RO%w_#Ly63
zM1ZCJ?x_12Z(@)QIs!gVVKR&`b^-C0VfZDuiHGFT{eW*JAJWZhyM0G;2~89%E(`7?
znNHj-_VS&X44xWyAg_AneD!h|ngOu7iIpnwVUg<HU7 at e(OD}yBJ>mokF!5Gk#0B>_
zJ%{q|#S95<i#eOgzifUeBdScWi_!JJs^y2}hl%=MODhjo at 9KX|0NNWjxn}(@JnvbB
z$oTEWn4#_o^bTkoEij2n>jakl_<Q=dF%e~~ag((;F;3q3sZoh8ruCZ)X(an5?Jelz
zoDE<tn5tb`&uLfq5jY9F56mQ at 6oK)WVM0Ms8nNU=yacRJobZf)Q8csDSToNO94g}$
z;N at YtyrLDC$}0<%AEL_lYvu3PmNF|YiTm0Nd<!&YrKVZ+KG9vzm>&2gI0heXWH!gS
z_yy8`;h|SQ_qt#dBt0}?FyMi-Ng%I(<EW2Jh)|&HY?6yWUlG98{lFBkHu#L-ZIY&#
zD~bS6%%Dt(F;RgCFO4BymgOH}9V)&(*p8%>YLQ-*%wEnfP5cE<%R`Xp+5YzC;dXSm
z&2*ic`#(og(e{9ksIT^({muN712IVkyjSXxHvznLKQYo#s*GLP+~;(r;yki1l$;`n
z;zbG|C{wih5GHix<XHEtaISVagjHPin+J%^dx30c at bT{TLGgO?(Rb-{;)g!4O(XAE
zw8bd6(+DFh7WHb&JgV9M{rBv9^E3C?f4}?R_aEkpl4qdP?JQ_L83bas&Kt)FgEmo3
zy(R*fq_4E+0CRuUUfDe~loh+f>ve4EIcW|MUxd%>wgZJ>Mj{rGI~A#vfU0zLLtms!
zhPW>yy(`1SV>B0zEdMS>s9yz}*k7aNc{nwxUK4-22q8K3p>~<WV_wcz_-5G#7E{#A
zUK;S%r3aWT{_nqL7az?13-cA<zpvm|RxcxxrN+cM_*r_pt67^eTV9A({Y6r!4Hn8l
zX->9giNs4q@{0RHD;E>n_M9ZgkFCao>0mjLTWfCHKX$f%l8Z^fTR)rU-QqvHCrFSK
zMJny-Fe2T;-U5Zrx_iKXq7K7X1bNqMsj?wEaf{h|L^Vht0V4WxzmDGQ at B9M=a$am7
zjB2Ut))p2!e8j|OIAOCpG`kN7s{t(m-qdkel*WlXK*!(W9dc{<0X3>yDrP|HxLK-k
znp^;TVy#0*)c=k<Xxla*Huw+=O_XhB%Q1vrLZGq1Sev)QXSr79Jx&1>66~$<qisC7
zlf|+oL`a$J*pn_SxF32TMzi%tB7f1Um?{=5FIE=u;tzB;WiY^bBvXXV$d0^qU|uY1
z96RWG17bY;9ziZfsRE)12$R}?`I(rM`HE$@jv2~s+p~O`aRpfl3tEIdUYS+{;vjt%
zOOi^<^>bP^uZ&N7`d}~=V)x*)74Op;L=zjuu)MVflg*L9ha|#6QW%P1abESv+p at AE
z4>EG2$u(d94AW*%lkicrTt*qEtc$_{fQE!MMG;udS@(g%Fnxy{N=OE at tw((A5;A at C
z?3d{&GSSC2x4%8>t^G*o7TE>(7}zizoc{9f8qGI8Wig9P!BJj_r85}I`}cqOH~*X0
zJAN^+bCawzx_DTS3x$MU650^IRl0U0p7#kvz8*m?(*#hnA{Wu~3)vbxeus at zqQ&AY
zHZo^;-uw4U+*5cka3hv1r}J_?92ynQ_J2mb&%OQajMd76xMBKsF?i&Y*mYK&#G}eG
zsV*hq<#hiM=;BGO8>zkMp_q-}5gUIcw<}Euck=hg+-b(?W#AYA44{mh9-xGHl?BVV
zTi(za@;zp>%pi?U_%dMVT%Y~1%$-(1KF@~h#w!3MW!z~-_2VrNHHce%qyoN*>Y39(
zR$$Hd1!S#e-VmW3g=fn0X=Jx-zhL-&&LA=Wx672 at z-!PwWC3Aj5)ArLDD)+be|Y4N
zz1i$6X&P#V$zV+U#xt4)3v-{V%Y*yQeGW@<&|ie%*al}60*MaOuzJQ=lS4 at 6vLx$Y
zl!gaFp<{kjwfrbT&EA$I2#~UdHl+iVBRnIjI88-I<FjM+mqiSX-YS}uJc2bFb8JgR
z*}+ya65y;s67a>9shxx@{byYy^2Dl@=U at +NJj@~IsCEH*UbPq0C_aX6CrHl0%e|kX
z7yFyLhX=f8+zU1JY#O2rO~fr#rtB0v1TF>zO>>m4v=AlqE5391XQ&9v_ahaqn7>-`
zb<%4#p-lG?Q{WVzxRtTsnx*UKzsH#&cpOiY!iXOJNvj9O$78YTb6w0IylSE;FA{Kz
zhzh!Bo(#{gIFtz8Y7*g>G?SyWEh{H!jtRbK{wPAchH(V;6HS<F*gi*dCqq#NQW|_T
zH~~rkZljj7lWCOg^MvlFA?}|Rm`b0gmh%&9l6WlW!Dr7*1PNmwx;9XS`Lsu22?vJN
z5$7NPs^PY%!4Vi=V^|R~Za7BetE<hvM}8BXldFxjxSUC(>>m^fElZf&sQ3g=$)0#R
zBUuWREn}H>_exO3Ofw(tdp4Wr`+KiFM2LQRxxK$Fp4G%m93!6{v3(d|z~xCV=EV0J
zL*sY44L`vXGO|{gB0xzfvM97jUnoW?Bkk?y3^mDgMY39dxF0>G!jcbxeSBoG*x~~V
zm)20a5mbb7(pD2`F4kxz;$G!owpibkM92evTp-#WeGc{E*Ul6o1c1h#6pG<xyL;?N
zgMT6X at yFa9+myf4w~PV-g-;S8uHjwLLmT6E_One{=noZJ0qm#l9(#tUtTo$(c+JwQ
z at bGo=RX9$ooYgLjzj<zCCZlOCTLyF&=NrSuyXkBwXPXkTvUUt<X%uV7R*ho-yKN-}
z2=_EC`Bq3_g?1w=TV$ju+6fqCR|oAE`JPfx;|MAyERE4wt8K+EHL!?$Vz_~Fk)WF<
zQjyRZNC7nQAbUHV{K0M{uPPkjAX~t2e1xQl>SAt2<Ks8hCv_qz`(42FYeHWf-W-br
zXsyvcApJ|`QMj$0gTtL&aFng1$RlddWk!-TAHzpew&Kr8S`%&VZbk5q$fAQO;`Qy3
zN-#s8aj0-XWabUDcjN}d(h0pI2p?`#+01w?tF!dQe=ttP8z;0tYa<|EwjJ7z;fQdC
zJ$gL#o#bAN$+@`Yl3&}I`I|rrw12DV#huccEIW=<$&)H-o*GGGxvUKacY6P*P2J)_
zzIyH7O|HlOglZviD!Gzt>C at gaWBJ(5$=~DW&4Ylie<$d>ogjm0S|!>x at qb@eYrIvS
z)x8wX1>+=diMO##!xpZ|b0+pWhw^@oG6b**sq$dGsL57 at u-n&n`k<-eNR`apdcpyN
zsfH$nb3Mr53&co46}W5`p at +*0K^;=}V1RgPPr0S4fEPe7Fp`6e73_+hau_`~5 at tdo
zhsvkoJf%?T1rx}B!RC}#rPWEhP3&>+Z%{WtPO!^{X6=I(b_ypZTH2ID1C-P$Xs6VG
z_{-Q`*c(Z5 at be@XAJ4v0tcbm!0sN&XEZ2mT+g{fO)Ge^8>%cP>a<~H{dU+DHhq-Jp
zf~)XrZsLzp>N!7uEb$yKXtH%6Y$i6F6#LlTedgJi+-DF6-QWB^npLyVx)|`Qb7C*r
zIiYcmIjteQsgX=%L3q?Da;p#B at Dw%J23t>eiET)q^_yISkk0Bm(9K-0Ch`9{r01aZ
zCXC&6C-yxV<Nvd~Qdvs)|5U51%Xj`i69f1L4X@|_llG3u!4bR$RF})fFJ^h6T!|``
zwQ_ZBdG(*s at zqfm`N7)JjQGQttWWZHzK^oZ6XPJIX)&79VW)IYT*-w51naq{x5ru6
zVNFL3DC at 4woLeUB1D*{hNZezCsnHI)6wSBRv(v=sviFRZlz at K@`WvA>IfFiv)<5C>
zP_oz$c$191+aF3lhq&f4O2~Cj4hPc|opN9qq^Gl=bVyC{vMl|wMm9xNjfsh6c&m6M
z2R-U`ndDK~tiLEY%b1+A7{~Y}jart>h=`pql^Ut0KdOGKOXB+SmZh2D;<FqxtZWhE
zY2m&R%S`W6y4oCmTvE5!LX1!S+%C;N44|w6%vCr9R8eK6GW;lF at vj*^<1IX58DAUk
zn9dFaH*Bcq2HzCZ>`StETS3N9R4}VFzkr6Uzl&Kc2F%DH$n@{yE~^0r$g73$BDihH
z5%cMp9%TUt+~%x{c>fK?oRtZZdlUv`cdE$}4vEpvWm?n6 at +ty_KV}gIf%G#vvFIxB
zZv#31I^h(6>TNS(taF&LVt0x(h at V^xj}QUuAZKBqkjvgW#BAAzZaukcGeX8Pbz$i>
z$T0(0I7<l9%v;oG(a*-zA!lZ7W at mv=4@<9El3TDnYI|ri at jc95y*;=$O_OaFU~^YD
zxf!#IxPh4dIM*DidAn}G&K!y;a?2`Gh_85ygL5Rz9<`ZL8suEFMAJMP!Dayt+N~R$
zbs2XcLorpJ94gT{;lj^xCPhm-g$Ld2X)N?Hmv7=xvOtGTS&alk>p5Z(K4?h1OuZOs
zi9uYuVAJA`ElrY at Ow5kAZ0JSc#>Y*^p)3 at Wwfcamj^I*xyWQc&$Sh_!_|-nAI}M^u
z-MTm?e^}XBJbmlu66-R4Vey at 2e_VFRyFFb|T*ri8@#jWs;{emIFTKa at 8lSUjKW*;s
zB2p=#E5v~HQO_L&&UP&Q8;Fz*7iFfBMTap%dN>B9*G2Cb12l64D=RU=f;+MRl`P at 2
zVL`4HEnN34dg2Of2Dxg5(<S?+kPXX1?z(30vISKL>$2HKbY1aOI3F%*%zl$>g~w{H
zPjY<@gEP+}adMdk84k|n_wfHJ3uG)he+97wk(|u!S`}}@IvjzOV|*sTX(<6iV5HO}
zV3lyWQC^w3ZA1OsygXQ+>NtYTI-;2)I3!M<fEmV at cnFeAfC8Av_XRnV593zKQR#&)
zZQ|+=%arUNFB5R{rU9%a at _3JQG2Vb4jog+#QXz^}2OL)7%8U;L(iCz!PSi#m0-ju8
z0{Yl&UI0>XM1#|7ayU|6oVMn2l~njnPUoKRV|E)7a{Y?Z4F5`=W)d%D%_Q at 93{Udq
z;9B|=UOJ`jR(w=b5c26LxS2R4)TIXzggxZup}5MBV|rflT$%qt&lA=SrdngJH5k{L
z$8}!)Gqlj40L>U7Wq-8(9+U%&>VB at x3cTHA(0j9+ at nqfTDt0}SiU|pk1=s?)IEI~n
z<w)E09!sPCJ8g_Kiw-MsU96`kkVp#^dS9CE`09|;SnBN!V3s{nP&RFxPLZcoI_eZs
zd|IYbL<$Svl+<_$fj1 at Z0=`7~WZq&GiD~d+CKiQKER`lHklBH0=PSN2FE2<|JV(;(
z$nlwE5~|!Gy?*{>_q1v4ittuy-q3^PbOBvddXc0R_;<jJVO>Zbfp(Drr1Xw%Nl)G&
zX3lA(PQrt(t(9)zly!{h+?*B=lXUiB<IvO$;K at B1iV_34b<=pq4t8rc9X$d05Z at yb
zI$-=Wv3*z-n^6ybgF_LbUc(3tadK at fYpa<9C;9<WxL1?6v|Kd5hpc4>Va%q98f at HQ
zCa<!z`c2#7s)TzVagKOV at kk5I5si@I`QO?_dol{HFB}Kqan7{7h<+D5hOhdt-DW~y
zDI4j^r<3A`rC;58F;1L12ssDIEtrZkRTkFu at B+5ES(SlI<oaw;j$=U+s`J$-u}5zQ
z2J1!<K4#{A^YTr!41_b*99s!4dB?bv05wwA%q%6a4C!@9V>^tAtxpK6(M{917+Q5^
zMw at R;H^rRN12fnI92vsTr5sR(Nk)gvmNwu!gDi`)X4)xa40mdlOXe$Rls`Sroa)ID
z(%P9>wRf&;cWu$&W{U`K5En916-?7Tb}`t%KPNy@#)Ww01cH-yr|pZP(jul8{sl?b
z9^)cJn~=2lO+j$BVsb4(2)$mGcp9r%3O{hkRqZq}G&F0WJFMm1UYOp}czFmbkie{2
z$?qZ)V_xo7=JnSTmucW~?GKkN2BzA_=9R1a;I3&%8v3av+hMSD?os0}I+|hqekN|B
z{If at FAgj5#q$E?`cQHq_Q}Q?HjpSWVe;dBTvaQr`61oQnxk=a7c<Lw at 6R6<kg!rgl
z5~;_vPuw65EGG|rN0rE=NW~WXiKmz3A>dr`&NBv;E_uM9!0RR)w|Dn~3iMOaAdC;7
zZqZC*OFV3*ST}}r6uoEA?fw0|eS~}0J3tJ%6J{C4y1u44kTXx<c1Q(H56q4>;&wS)
z{n$r(6pIgnF1|zb1f)hLL3ZGi=oAHTBo+kXtB9buAob`Yd at 0PQh76fsDfUIS45<lW
zMHGNfB!&)uKuT~MF<leFk9;k}fE&RO+3YHP at 1^m$JAXU$7$vTdA>ifV>sOG27=nXP
zSVVfDcmnMP{4G^#Si%nJm(KfL_hOg=mow~xZt_j%5)m7C4PZB-HeGu}_#f0yk>C*4
zkFHI&lYkp;$V(Vr4`e-0yPwI)F`_z0C1Hpn9b9&eDQmoEH(p$!2<)0927aGKbXu43
zdAulNYn0Cdva&JaWTSw at RRe@QiYT&CkOGs5%C?-0KYoQ<$UrdApu}x_gV`i8wNSuh
zt?4sKY>ZU&7sEl2WYlA}icnA-xOo6~19ewk9c;&wnFgpw!8FzKn2Vh*mISx at QocF2
zF$?+<n69?35MSvDxBqxR66S&{>Z>Cc;1+z0hpLYoUWr}qJo&R26<}>asMaF+^DG8J
zDZ$J+3dMPql#$=Fc#hIP8_0(}=w578%k!747__m156+sc)3d?G(n@(Ac`#wjIYR2W
zjjLvVo;kRO`X`*OTfg$jnqR>EJRL>qFO%Ez4={OniRB8|u!&eVH!ltFG{;aZV7x|1
z7T$LXo=qb;YH?jpRp^Z%q_VU^^tpY$##~(+g=U8_Y`u-b`Jk78GmsD`AX?5wfz*7F
z*u4lJ%(gt?79xL3_>SclVW#%E9L<kflvEF-1q4H>94XW&pNzRt*lhPgM0X_O8{$?8
z0>#~H7?8kCTn at Rgx{lE9#L7EC at 8tYEwG<o;MQh>?+k29nF_ceIBS?Yjv=|>R#jAQI
z9^dOF-M0_oc#hQg>m^+nn=3uVJ|-nw0CK0RDPJG03$c)b1K6w_bpZ-(40|6ZUvw2A
z3sLFOddZEEIE;+N5|P54xkVdp<aJW&lGYYAyIx=7*)Ngu1JYyr0!i|ZT5#Dk@^w;Q
zWsRYy$7v<i?MjdmyNZ88W2BrD%@iKZbDcBG%X!y9I#bsg-90D>m+bDBfwPNrHa33n
z02x at J9OaaSvt2wZF45$PpD{6}JBbb9rs=RYu~0f=s4E$l2bA;}F(h%uf(PldhAxlf
zD&l8q_y+AT_8G*pMLA)@8odH?l={}`0c&eA#T#Wxc~&UD4H&8n_nQt1z)nO0lLW^j
zM+=Yq at qHX|GJjF>I}4KbwT68fR(gZ_u})-)ND9QDVj?3o-*{vY2M}}Zj8l;s)DAtk
zrX{QA80jenl2$2L5UGsq+QZ;Jiz67{p?r&KUWWitEF!0+*EB>7_8h~*nK9L7(}^uf
zqi6j-7}(WCriAUI(!wL&vbcHjSk1CxGaJ`yR>nV}!N at h`nuy8Vvm6QD!BK>fHKOsr
zXCJ%etRl2^xHiLs<T)x!hmd7f2bni<GBMbcA%q?Ij1Z1>)2(Hl$jy9kZ{WUp<F20K
zo16cSF&dNwjlIRDm7RF*(f+^Xm4}sb(*Jj9wR-3OJ28N7(C~WxztMKbR5FBDhpjQj
z<OI0MnukrZnIOE1e(-J9tcD$c-xiF*7pX)BCi6hj8sOPjGFF(EVtmYRo&+iQauAVD
z#!KJ(PR8XQ)~c&(mF1C6#v~UepDHckN6uQvFW~%i4s8n#_wHlTHO3+#yb*O3$XXfD
zs)8v#l(tHYQYI+Z4Wy`Vo`nsy<Ye%)(G__9q at bX*Kh-InLJPp8VpdsrWZ0WR)33wm
zh^Gz-;;L!TcMfWYNZD|Jn4H&}hdX<_wV(Dk- at Mu0Pm4D*aj81&Q9b#J8Yf(&X5&XP
z5geS!ut8XV`*?H<pv5Nq at rHd@Gz}S59L<=2#5A1EV?}`f(%qPYLYTY8*^i&cHPxBi
zKgZ2w_9HoD>hSJ93k!pDN&E at +<TW<4A-uPyy+_SQB!VkM<E6Mqyy_l9zVCL at 4se=S
z`AxgNdDQQo4+qV+y%r{du-QiLEiqEK)7Rzce>F-rX*a<kBWrr^9L5fK6~l?9_?;v)
zusvh=Grg}t={U572hx=L4|&6+EkfEw315ltlW+`q#t#!4AH03~dgrkA8o9q?`~$M@
zddMz)Gw~f100+qp%YL~OdsB5nUr?Db$vuE*_O`~MwE?^|cFp9Xe6{np?dW}xs<@m_
zm{~!lG4(ch0Ph*c77R8?t_$9G-K9rLI>R=TFhWE#3-`1zyMZ9ADQuQWb?hXg2#-R}
zqdj`%u0udZABaUT9Jd4u8h|qk7Lx@@9Mk|P)a}*j{zaJs*vV{c_@@%u0MZ-}W6i<}
zg9<S8L^_is{Tk*@j{?@dOpJ(-d6{a6XW*mExW5y4sm-m$h6cB6zj%fH5IkzoMKVP!
zo+FB&tM+afj1bWYBNP5()&=n7Qsa!wU!E3gr?aRr9;a;&myTrb?e5|1gE@`V|JQ`*
z{jVf;+hHfca@*F&c8A>b at Nrx;jrtz$+hHcS1GcHBitr;vXtxZXNZ1}8LCj`-Ad`(F
z;er$jLaJ`(n1C0usW;ao{E%H at n#_OkNB1-lUu5%OPR9&K@<w*cp4aTNp)%VDj+~k~
z=%TX+AEn`%UV%{M3Am<AF5#3}oHJ%6YH48W<j?i^Cr61_?V;irG>o}zJOVRLfyD7S
zki9M6RkAJ_MZkI=Ke~5a6<`wm4`M>Use!$}HmBD9{`99Y`rp#hQZoO0wY>W9PXD{^
znNHL1diq~lHOs^iC}x%As!`0A7OG`@u(niPt1OLF%whxWup{F(DD<UB6++a2m-3zA
zh6jItLz%YUM3zyfC?Ey8#H9b4YHB`al$jj}be;Lr&YSHY*2Hjyyi?J`@5?Kd)iuc~
zV3Y6Asad28B#y_WYz^>uj>J1i#M!PRnKlQ3+3Vz-Z at BuJ3*Fbm#v at U&$-az-OJ}Ww
z8w}qK>H|JgN**;1BB>qY-AHmrTKQGb_{iMsaIBN&D1q1eXrH3l_qcx18bEvemF{=&
zm%;aq{u;jFmnPwZh+xsdiyGpa`f!JfX8C0VjT1A^R*>cuA at Z$LWS@(6_YR}ox36BY
ze0CSFu1FU|-}-s!pxKHLfXeuv*;S+hb<M4n581k;De^tPX6pC9ZT}oav;S%}{w28$
zH9X$A3PAIv0A+L5v3?~}3~6?EdCkS48$RTpFOrYHLv}L64+!uX24+-r9)kvFVTU`K
zF;@X6jt&PhDAJ35W{`kJ4?w*UtA+&cQvZfW1R##$$E_1d+XqoVKA91MET<!B8BOj!
zc*Mhp(wH=m+e4}va0I^20xvM)B4Lu6he`WbS<yKKh^K+eq6?`QU9fC at MMJErfL3?o
zXJy9eLj>+KRV9U2E3AT*z!qa-6We&&#6KZDGf9+k7O^!zfTqPp0fVa150HM{Ag&K2
zlkU*LC}=1$JwlP(w>IIG2brLQkp^UDJkTw$9jfjTa<mndM9rLm`lP37MY$Qio2Y39
zXQEOB8D<`a$bz6hod7|IG5T-Xvn6sm5iqF73xo?uiPv$&KvsVyPoHK*5H>&P6O5+b
zH3q2^t|xaQ{VZ5GDRC4(lPsQn&3cm=z&Q$rFktpK1^nG@{n9*NGwCdh=dhZMplwM$
zdYkLI(L8Rkh8nDa+JN}bqROXEE`*SgY4!WS(1T<;@~nWB(A>r>`gTQg(c`Ebtwj~P
zwEtY2{51UgrfnyY|Ez$n$27eFI9mRztW+OXlJ<Xo6qRqfxk>sD;q`(72!CR2-%;(y
zeLt%2H~igg$$!~60(o!cduy5hVWC`&DzMBit*!j<Pm!^vO8p^k_)HQDamM&%<>v{x
zI3FU11EdsFAJbwj9Y_#vc0gkhA11Y3pNwTj at w>(;Kwzk4;<fRO41|)5i(W-6ZCPR{
zg6SlWsyg;_Q!Rjrnp+JTwlviiQZ(yqmWx?qsZc+e))Bi{1Qye>L~7Smju1KcaR06G
zVH0H-*5=o0e~08d=sl}<U`~C77u+2g+w8#@ElkcM=fRLMgK25Yz6E<f!9_v#V#t5y
z5QNa)Q{O=6{U`IXLDD}E5)EOsQIN8ckh}*aioFYbMk*LrE`@2~(LKdZ@&q5wQar`P
zb6G~$JU;81BkMGK2(mz`j&{4-sfA90lDihi#)k~Gmu3!b-?UsgkO_wePlA~!7~hyx
zry0Nsld{Nr(z8eo9yl-QzCwuA2-(n|$wN=^B!epxu7F#OBIJwa;D3;$MqlI{sCf?n
zCKwmQ=(>JZeI(}*NpIqrV%Lw+W4K4*Ths3T!UEFSA*URLNJQvD+?D+45)4i+CLD_q
zT>H_&!Xq91q}4ocz^POV%5D@?vh4#2xOM)lpEvQ6(MT?WQyq5wrI>cH0awvTM^Pax
zzF&|ehZhto7<BlXn+&_Q?bjQ~;VPMhHVQ;l=n2$&V5tulS3hbZsa_YphT>yZGmt0M
zDkRrzUwRH9N3(%~5IKUH=ia>PtJWV}!40#}uJ=ID)}ob*&u}G`8ze&qSEi;PwcyE@
zUWDiFC_1V%o~6NhQ9R(_<q7PFxBb|@vJemsV+^5xUH{x_58H1AbO)_pp>ntDpA9H$
za2{>a&rdx#Eg&H%3L+fwk%Q5|#%2y at Q&fqg#s!VWOFQW1v=3M>#o-rIKL^YvoHX?+
z;&xN?4;CJF9q<*nv8I;oIuPY`!+ns~O~$!Gl1=V1w*2`xR00zD^z6PN{$ifgLAP2x
zPwkiiYS6Giom~C3xenkLohoB`D9nmpsL=1l_Y_Cz<1xvbohu&E at fnWEAAdG_djH#V
za*Q{WXf=bm-WA=bPIV9z0y at AB0>5^Q_T>Gdr0fm)qd3^C`CNFIt at OIpq@yEnLiUcj
zuXtpen|nO-gsfZEN+c&x42KqE5aoSOd};eqLKX&^9w3TBgD0o&iavzFw9VR3!^`N0
zOf>)peprwCFe#bn<KQzsSD40{AJMzt0Ow<yh}`=a+DOr+?iO4QFfK_-Lc|lcWHt&d
zN1WFEbJg((jtQ|i?jW6j%H7VXU^~%T%D52H at U+!$G|VNuz~LBNF#G=0JUWm}Mh?ih
z%m at LqW9E&qE_Wi_cFdD4(h3X$e3ez?4%%{i+Ux0tT94L`dhp;C@~RZtScFmssn>th
zrgTW9)ZcZE`WHWr29)(t&!Xa_k{gAJ<>BeojHTEG80xIkb}ijMgP4U!nD9O?Jkl-2
z-r3l02Bc@?P*l+-HpPR+j at m&_B_Y}@dF;Xa#$^*FL$y%*P*_VGQE2UhwAHe19i-~>
zrjd^PJCJ{`<W31W5Zb-jxstk=`ye<h_zuCE-hz0vh3^K!80ABI=gitY9HOBUE2(u)
zl<PXYd!}FPojk_^eS8T~eTMJSh}hNrFbWc*8FIC0GX|Qm`d|zSZV%Lo#DW3IwHTow
z^|8e`hZv6AbDca&`;)*7E}j1Ukb7Y2Zqkd?TfNX|8!{kJ_P-S?jaiBXC#Nx6(QRY}
zANW`!D;~3g9JIAL#=|us!N%uN;Lcd7g$;gRA3PjnVi2+MSTM0s%%ipW4Z!6?okR1-
zU29NMY7pjfTciPJjtMupaz at oSEi>fG#_2MBnw&&dnT4eI*<|-gMpThNH9*sE3)K!-
z=!yYy{QB9!*8bj`t-YUiYtLS8?jLL)LS;)#4h=5rqv7D>dwiwLn0tmqYhPv^!LTGL
z!QE))|Fv~7AD!aAq7)tBk18$vOrvvxdYj0Y)4zv|*s=5jA%_syg<&4TPfWjF{Ihkj
zHEdrf$$DZ#!filw@$^?Z(#QT);h+ at obR9f6Z`h|}hCP~KSlLx#+%dxfA{{)|44R`C
z3~<S~gyc`Ktw at 0}d2P{0hRzif2)uOFj~I&Sfe~?<XNYV?T`iOarllFNnF>oE)J%Y7
zU~TWdLDCWWpS=l6oW;lfL`^X9&_A^hNzl}SV)T3u4kIAzDb}dCq#W326YC|bDXXfs
zZvSaj)QJ`6H?X~+tm~AT^TYzP1)@?AOUEYT)V2?Qn?vvew?f-T|6>bQCQ)Hc03C|j
zQbqtvqecs)NsZ?cR^Y at BRnFh(oOE$G+E+MQR!0cP)a1f*=kPHF_SL=-sN)tDn04g+
z6EV70C{$@g%$U951>$SXJ`t7~#$-|uw4JrMw;DgSmuI*k4OFwwv$N*$N6aO^XN!sm
zBz=iVp~Jw$<C_KoF-QkV&6%`$h|IM^dn}jaTRfDh#PARZd)AwYfaoo00M1?`R)}K~
zq?MHY<p5v)9dE?=&R<Bp1RvWtoIQ?URC^Ygz=ch1OLIB;koEfmtdAe51fO1UV2M$H
z5X=1AFRQ)&_1EKmE-nWK2x?z5R##BjS5k{Ys4Jyvq|`ISg{}~m&+&AOc5?zd+F(r{
zw||s?V8 at f4o$=XOw{?ulT`{uh$Ur-5;x%?hbMN)Kf%|#Hc=GA2MIfGU^ej1d_ZS)O
zda^s9Qub-6jS)cGCPOD50tw<%1vSogBz~!U_(XL7&x?PnU)CFSVL~b1&HG8c0)jz}
zU1O%`py_`N!;1GqbHndhTqDUP21n=5#gHFZSbellM8|qaPB!_XOPo>cJsJ)M-Oh`y
zGavd`iodZ5n7-7yY)qF#_|h-V<_tq>skDCo-LtLD!_9Ys*i0)~Gw8-x!BXkN2aHlO
zfxOptc>9Lm;{J%GP4fQR?7;He?3b>)KED4xTv-u6K>V5f&9B4v-^#<KhpT^zR<1kY
zH2wa|-+!k$|8@`FZC5B>(zdUulL49syt=%cJa_x=^23KK;rUmW%1d|e|C0gthOG?S
zdJuhTwb#h9;Qw}kCp&l*Mg7Z-<!I2yfBO9I8sDw08(9#SmqrXc{8yG9I?vC_4^ide
z+RDn>5+43X)cr8w^))2sK(!_R#of}NcC&Zte2^ian+1tySX}+%0QP72jcp6zs>REr
za~~9T4IWQ4;=t)bAsX$Arz&KS0xuUgJQ^OwK at OZv{M59}&sp>Qg5GK>MIx$E^iX-!
zViHh#0%8{(`@L=U!~_)EDYP;yoCb9?F>`V@(>@W_4G)FaS8#THiRN!GMJiI=jE=B7
z?9XU4a4NrNoW`fQ|DDFs at j2)vUjNTqM||9$4Ee^~|H{&8`u<lz|L^>NCWG%yTHVV1
zPb0=P?|<G6jwi^!!Rfo}Zk7bH=H8!w)O#%nHOsp at 8V9TWjjUb7idYP$gQqSf4H6lY
z(Q?iU4m8Fd6A|Lln!qbJNdpf4{>nIYOEe<#zTnn{HF~V#5P<}^Exc-dY$5{-8|UqY
zOMm~q_7_JBWMkf9{?CxS7;D^K9o at Uho%z4icN+SC)Hs at s@Ebslq5n(O)zyUjS6Qyy
z<$w4pXm%^~-$RUBCj1!r`V=3u8UZOn+vPztr|^|eKl6xY24OE65x9mm<`I8#iy~f3
z&zl-J8v9%hdjEh26uf(AcBW|!e<myI_^g8iVWQeGynmYFUp0D8IEcY8gp>_5CvES(
z*xB8#ZEYWJ?z}=ah at anV*A906x$UtgjGr~#8OmqmO_bICyn9+Z8nV{a*IOgzM2f#@
zR!L7acuRcD>!Zgu7KFQRUvKa4JR1+iK3*^peMYa+yeYGQIcQ%@xiQYboZgU1rkRMa
zKsI<5I-IWC=`|+nbj7&>w`ZEU(5rvdIi9qO*xA{Ew-aZ5+Ml at Rl%2-PbVhTGqT83`
z{({Z at 7szoWu=<AQDXw3IJO1CFWGeZu+4~4T%d2U{z%lY)c{!c`>*2~>{P$NuzT1)i
zQiyR)F>t*7546DQAfO3e!QarDcjQ)-FFukrz-aK_trAXi|JzN33SU|9PmZ2r?ti7c
znyUX at xvT#@Iec%@@>cGDh#1q~eKn$QzurSufZ3PZn{Vb|40jfDygiOK?+aSy-}AI#
z&|0`et5chPs3;;cX`_W?Y#ONi`fBH3^L1)T)Dj*Tt72 at y(=orS=1Khp!GISgEhoKt
z^TgW;Rhg06pc8TbyGi9uuGu%+cN+TNLPeCA{Z786(e!_*`tad$!v0r9+L*idpUEM7
z{g$^v|3kz8{a=1)gT5awl=1fa!`gCXZRz{mpzpkQA02oa((bAO#u1)Sz;}STTTi!O
z9eD|Z7Q(`c9~|L!nbdvbT&lxXvwu8!Cq{lS5&mR7Hjz(9AEtL~Qk`peoP3>6#Z31G
zmERdjIoX6^pPae!ERM!pmI8cUd-5dL*glX6do`b?pTgZc*fe%rMKZC@)oAaeO=~ne
z%{J(!a3*Qb6<*vRB8g>oG=?g0N81+tmD4Ffs at L3X=`rR`G&NH}DeA at vp{~Dx%!?4N
zV>}Eq2FZfugo4pTHePcM#_)ZCD>Z at jdlV9d_iTDR3j5z+`y=H-0ioGDEBNsZqkdk4
zHc*=u2E}p1WMBb<;BWfIk#TbM%cg9hJ?2&C_GTBi{r<2$v5nfSnyD1vBnvl$<6#d~
zw2rUxu3qwW!42Sg)&?j=)g0t5;R{@sMt6t=zn8rh0)O~YmGQ=wvu-Bnt at Y1_1IBet
z+n02*)kR$iMAA3D=6;nz<7G at Tc1^o%I9{FcA){6w)CRrJlHQ~>@pFwi at DmwD3${(W
z0M-SzFE`U7nmjOF)`6 at h&^~YSFMwv88#z8Y{rX9h4)wL8RtIp*TR{%W3FML7aFlQ`
zrYkZ;USm?jRKB#1 at 6&SbRgm?Mn6wW;qITNr4lnY6^+j;xROcKk0Op)AEiw=r2Uifm
zkgu?Ik^hqV1(wg*FNW~%tRdfM9 at z3$-s<&Op<ZZ<!2N5|M24vfu6 at l(O%!PD^Te<5
zhJ4C{a{mGddfx3`e9a|ml1CwBdFT5D at Je~)Bm%~lo4kMCY+k at Q0hQUl^v<1~Q}j#E
zBl4 at dXDY6Z^w5lr9P}<nfo2VBcFM9fX?U9T!P_@)_Vy2JKW`soHcLh9r&<N-YOG*P
zVmN3V9iX(R*D}!NfjjU$VbVOIoo3>+a!*ewy11t+(`h~h9~9BL at A%|xJ{gs4R-&?}
zK>#9i9L|gE(9A$<%i(x!I4wb(f?f1zBU*vgvznYu$9h*(@KH(9tk%Bi$p>v5xtv_j
zyCOk4L}C!;2=M#wh?Q0W9``r<)CE{)3IVl;=h~<*nLbSU4SgL!j!c#(gwGDrwIYrl
zUU at 2)MBIZpu at uH+!X~p73n`s6kuM4YW`B4-Fy<TPEB0|&J>_<XZ9MOeZ1VJK(A<J<
zkkKfBRSfI5EMDYcsGT-we%M7i?YGayHRB0vJrz_P*YtU>2}2?9Yg|LvEC*MUwS<*(
zqK4Awu=}+6oLWH>3Gh;96YT!!us_)fUP<P!#zc#VPhb;;qd%dt>9}R=Lv7n{BGom5
zlE$_DiOS`qjddv;{xy>vj2&Ft%M?FBwVAMeJpN7xIoFSoQD at vPk`s;U_)E8yh4rc0
zye6~sWEaemYwOC!(M(Ej35XK%V2~$Gw}}V31rm#tWj3FRu4fZbvl_3WQAn^6gWani
z4f|`+A+ndBpu%+*1+-61JOz`cvmy_wmG at h)KOoEcaUHiEW!R<Gy>0^|Vi=q3AKshj
z6ls{(3PQ8+?^&_h;DH!nUZ0wC_x*l-q_}4Fw&q&2gF2X~3}Cxz#27LzMr#W;xi_-!
zA%F{HJW+>4N+cZ|ZXUihESuZJ&rdJ6_qQW!>Xvln>Rb4}sI(ul!;u*G at drUpS>k<S
z at F?2bPmHmFqE|YAC^2HfWOb{Ui6HQsJO at i9X-^StZeu<wYj#x!j~QfRVVwi)Z(YP#
zo2Z1&swVvb!*8JX at p;iKo$Ia*NtEN1jBZGU1M0|Y&Z>13I*=mTCP^n^+qIw?V%u$^
zj=a7cifs~<jvmZ!umr;v(11x;@&;KinH7wkZhgS?xnrAgRqKP^MD4Wg84}){_Yt|d
zQK(L~Yxd($YWI%IjoGz!*Z*n~JYq$_qf-F0eGDeOvk0g7s%GO0^26GIycU-4s2txD
z+Z*SuiRw~o&tSc_6Mhq4O37;`p9|TvgQjiG93$SGlP)IS1q7L7TkcX{30Nt3G=6b<
z{;Zb<XA|KB8jeREG at 1w**9S-4#?@r=4tn->cN>k#@o?SjE4YQ8Y{ZkBc=H0O0qUin
zBbnz$K@#R*DJfjk;!Xj+CJ!l%maM;*kCj+sV=_QZazMHf2hrxIX6J?=^`*#f2c}{;
z`-6abb2Oz_ff04TA&_EG3egdy<y*&Afoh<jd^-S^mlWzuWKe$;jBk#-o=*4ez_#6@
zugxC`*jpgAp%VP<02g@{p}Bl*#09AtD at 33T^#IF1bL8!5bqH3Zpjlx&=lp_dL~Pp_
zK`K<jn_QC^3s4ToA7~O*7`i#d2+c3w0$%rEv4P#tT7>??=|;k2^(_EcTr|EB2;Urm
z)f5$*;b1}k2DA$zF)WDx;mE77^-ZGR0&K<cBv#z8q&#EJ7nO)_A9X!L at E3wJa~ad*
zmuaX;5MJhaFQ>F at GN8v%abaO0t%38qHF<4f0T|>WmNeY*rZ%x!ZY~ZiER}K@)}1L9
zJRdF1M^&-D6r;bO*3%z^7`Gs8CNJI}j2TIe at yDQsckd@ckL0TVF#NcNv|Na-^!BM&
z?e62=devfz;5J@!y}fZzn|%eH at cAfy5fG!B_xhTALDFYlR`HNmj-B1zy{)H_K6c=V
zSsqYO0|<{yr*=`<4@(EK?$o1_nXkCcL6{mFzwHBqZZ$_A&@vY(a+KUzF}>^`nW#5|
zf{1W|>8)O4PAZ)QOxN6pAs<PyJE$7S@`SJwBQbI#?_g%s0R$;*lHL)(c=vWL-VHTW
zh_VF&;@3YE;H$SmhV9cH=F&;soN;KQZ6nWrid|-1*=K`Fat)p7H^&zE+IL at Fef<TY
zB@#eqZ6+xFLxy3FHue1Hrr;Lv*aVo+fFw@@tp;Mn*_l6P05cm}Grcgs$UhRZ^Z(rJ
zkNUQjkws&g_&;@=z4iF-@@gvoR~0!S at 8bWiAJsQ`&s&NA3lU at b`0tV7-8%R*F at Tnk
z{>R^1Y`xyQTA;VOrBJsWf<4XsClNV9Ir(WR!07nja(TJ>Fd6^5jCA35`Cli$#@B9n
zz59;~8$B`k at 1mKV#+tYV`nYjTA}~GyjB+xIg3JLU4vdglk)3)}95GjyPeqJy82xtJ
z7wp<6^L08-bN_?f+fyuW-2GpwB<sId9xmVU|0y7R{ifHu|B1^VAjUOse%{rUvGeck
ze|-X{>mR-Joa+8xqxJ(Q8FT-atIH|=Us=7&|8c{Uovi!q-2VVErY8WVh(czTr4d|R
zYmtnk4OHth0vyC3@}HRaNdT>>DlXvZjXdwy&NQG|t;BmtN76JPY3IjcPRfeR0lsLi
z0X=XVglwxrjSdUTPP3qEXXRf=v8G5EUf-OJh<L-F(R&a3XKg(hbZK_LfXzM%QBE3W
zJ8BcJ>z at xW6ccw`?*tPAWNkx0aU1y-y!|6>NUwgIP}t^xHwHy&l&=AgUh|^fLSleP
zauSTfg?$<4&<t}8eC9Gt_Z#ecqNFJX733NiKil!~=A$;xqt|z^>)nH}{|&Z3K52^G
zJ036kNH#J!>o)SJSdxNBB&?Xu<+*CoZb!rOkI->ZTYd0V6SPYrZe|GTF*OVWm=TII
z!J?f>{=ZBgpG<1Iy;hUR{~)WKzCOq!!_V|}04e`ZRsXMAsXRpf=ezoUw|CBYBVFhG
z2hH{c%XQaIn^I{VIaS)Ip-lN;v457HY0UYfR9v$D%R|(JxwHSKA$j|s{P}(fuM8y^
zN6+s4Sxvd4k2m^ZMGO0_E>y}3m1<O3U8_D^t1SI9>a>1oo<}qH{)~|hP`~axvNd1N
zP&ybH!unA?>NGDSi!Gvou~@sKFp;flwJ4)V04D at nskVnY#KUuh_27BD-s(in)&PN+
zQPB=oL%~`VQSol>J}qJ(i39B;BC_=vMFnAEX6d?Ogh)_Vm6v(!ScK&mrLV8<%iP<a
z>p*jaa7JSQQe>_iuCR!ySkw1iH1lWic!@sT!x~w(OG at _^B${w-^6?mOs6FMc&#ghU
zx^nNNb?@F{$=y9%xu|%!{rb(T&BN{5>z&uztnX5c3Nw|0sRSI^KXw6p+aj8&SXl6E
znvKQ6T~XcJzhK|^h}WV2``epaueT at P*ckg?xw=wKzW<e1?&$yI0KP%X!~M<OgXequ
zuQv~O_I9JU2b(XpquCer-Y1aQm&geSaeY2oZ#SPH$qY(};)}&b^U>VBjf|gr_YRuy
z*+SI)R`+<=h7*(2wOSO1A-XdmV<AZD04`Y_JkAdhngMx|q4j6o%V^Mz7>Dn8f%J{E
za(sXBjyB!kl=Hh@=l-9b!wulvGLQVR?KflY|57=X|9k0Sb@@*Iv+(<pzprWk*MvjS
zoAV(`!#klZNjT;f=_ml#Z~q4$@zcYXI|tG8ombn at oBh3i>}+ixL{B#lcAiDg-|jvm
zEjow}_dt)fqn+Jo?+`gJqBpPJqK at 6ceLDi^4CL0<u`7`b`ayq5Qkr at PDL!O%^Kkfs
zKPfYSV5uZdC|=w{T|iW{4{1$5LL at S3prObKgu^v6&B6l6AJm%~h08}Z{oBZzk7_jp
zSNYnpq~myG?}oQhE7(dU!sx8tC%rpTYI%;Tt(r%~ZN;12^<)Nu#B4WR*_-nw-6BYL
zAzt?&rFR;5P=UKDvZEkx3B_6 at D|rrxcDk4Ik#UTT=%|m#I+QSsF3(!WXYlB3c8ciE
zWGhID(t^<Yz-<O3zUPnxwX{``M}iar0CP8pC+uLBbJ6R5VhWWy83x&i9O+ee7>_cK
zd7)H5B5rh%or}ws55%7p90m(x)|UDw<P~F7p`9W0S_vr`AFh_Gu4s9+j1Sh9s-oMB
zC|W-1d~|{u)McdQnNc$*99_GTuf$6#hR>it*Xg&4I0SW<HGZlo-)l1rEM%~aO)xnJ
zxaQnus%d7z>kM{#+?;ksaSUeOrNOKP&%2^}@D-UMBX%K9e=T6M9&+-A!_kt1^_r*6
z&loHE?mJxXa3cB6E<HJ)9vddXwK%nnW{XegT8tI?pUg+a_fLxP3BN14S>Xr%q~A(^
zXS*}_D?VDjxZrsC3yFwe*C$M)?lCewBhfQ39<KB6YPF|tpFiK;uhl;2V<xWTu#VJB
zFt|$B8G}O`!8!|m$AX*HU$q0gLe;uV>u*7a$B*tLvM<S)ztY&(k^fq4=B~NuoYwH7
zaE|g!mfhv7d5rv5d6=sIwOYBW|C|HNTmJZZ@*jD1$Vqc?0z9<3^n+ol%M0a7RQ_RY
zrGkPm|BSB5R8w<J%WD`c4oR<u#Q9BF1WUOBVJQ?4=xs`hOzuKqZ0Df%Vk=1UIpgFr
z>zx3$q24C5mYXrxeQ~`W;g$Aequ at G-x?8*K(I(kb3nkK$8A;(?(R at +Eefy{(%LPP7
zA?Nd8qfk3KuXjEc9<8_9r%}Ime3MbXgVpm#O3c4DH*m$}pRn2f)M^aQHpuake6<XY
z`Z!)_`2#{ai-^UPc*>&f|FYRSJsV^WPzeX9Z~*jYFjcVti4q$O7*=%D?KPUcjY7E)
zl^(5^>W_-{wJ>U)Lz4AG1qa=6$8igg%UtWFz^$-U#bVDC28HUftlX_yS+$cgGQ at l%
zMpBZq;(~|ssZ9bLGNxtQI&>!6z7GATc%dR~P0(=+`5)*1S6Nv}`v0z$%Xj|&w at m4?
zhr2EMpNA7)fcz(?@@~R}de!x*KV)(IOi$$}CY(w&|5BOhgS^w*WuuVQH;ZN#*-QIt
zaBGrMkLhG7sgk1<Q5na`vX+_28)S(_(@`2f?MA2Fq*bdpTe!=wKy<(D0>js#|0;j|
zasg#{A_ZW){GWXPU#;G~|76qa+y3;n=zl&=d;t!Sp6qM#fd3{9fS25g at OLTzoJPi}
zWEtwpH?0C(hyMEl7*c+Z6aUA_|K-)?l|NO=538#yl}cr0=}&M7ScOZ#UHtED6Z?$u
zZj1is-~@>OZ9l0bW}24r!z9iMBamjPXCM6ijmcR4lCLE8BfKK at -3!K?u`WRN-)(9|
z_+vbq^`a&#XG!K9$@VV~dPqn0F~aL$pZN&!aE1T!r4cWSeVFjC at C=0?I}Mi79BgwG
zn}Wn@?7GNIjXmQKZ}8D|?tjYJY|Q*)<iGN2IqCniw7Puv{yzq)xAV2T{}RQYI at xHY
zT9#7YOAD3CLUlE&R at YXlYt@y1YK at I(hGF-(8J}A1H9j2UAr at I&qyFW_ay01UKd92O
zvAkxZ^u_ydVW)$4TlaElC!NT9!1p8w|29v^hbRLj56^gKZuUOm>Y-kdoog}L85B(c
zkdMuaftK>XLp&TH@!D)%Nh3*LC6CVi<~ck9;HJa}<ml(_FgmVxu&EZjTls3PmN~v}
zcf}pm4uM&m28}mz_^QJ704uZKbGXvIdw=*V+D-2Nq!>8n{v+AXa)SR?mzM7Af0Kgu
zM(wii|E*v9q@&R7-g&yG_#TCH`KdR=*Qb=_i3opf>ko1We;|GAj^1tW9^x&XK1sWq
zueWO~v-1JYD)4Ecp9+~e3{}GcL;!Q2;c8@^)A@;bvSYm1$DA~S!B0qN2MQu?G$+HJ
z5Q-M6+4bmh4(~_!2-JJxp#*;$Ix4}(9mO8hJF;(FDo5=El*E!a5iT6*(MP4solPq^
zfykShNmoMo>X!Do$;1oigd!5iyMV~L3mLmCoSN{1flQj0*=gS1?4t&{TNt8xXis)1
zKBU&9IP4RIbo6qsXCL$pZqYeZSVG<;rAH`>G>6*}^6lYY4dacock~O0zhN3C?f_q&
zw3_FPWq^NCqsb75BW at W^tb at VDTB&q-dCBLy#ZGfjYF|M?GNtXLn+kx~gYc<7e9fe9
zj0<Eh#w&^fCEoXBZPFQ&#0^n*ijfo8raJ(;HaCel6)ilnOvlDffH$FAx7UL69^6G<
z!@KPe&TaH5;TJmBY-_Ozdnv{3lK3ydb)_hlmlCZ4#R&EK7Uw2 at Xu1)Vy6gO<AaEW2
z?`vR!5PXv!VFeh&|0~NW`Tt?LymY7kf2lL~$94Q)1bC>UBZPPn^&dPif_CWtF%l=f
zfC)HrzG+$7P5nT=^gE#CXyOQw at 9c4dmp9Lq!k8(u2FrRlj6F20TSHdQYUtZhrEkZI
zb?qogN?dP~_HB+*g8f+SG>*loKr_8R1c$W7l at aa`{?+)e`1^YFKN<g<8TRYoNBTb^
z{<~5wC;dNGmXQ+f&i?Bl_~rhXDE^lrrnepT8%wRRb><I``8|a6D=B|^E%DGVA{RFD
zV>6xr3Jvr?wG%Oh8R{9sL`+0Uy>mL0&=abb(NC<g6j3~fxQ?J;s|G<?s9!)i(ctD$
z0mc&4Yn97lxTb4I8IKw?Kh!us*jQtX5olbs at x?))u?sD9Aw72?$6xLuUvuQ^(0 at Pl
ze3EI$(f<_$`-Sg+ODlKzA0~n9&D&(qfB$%IgX}xY6zLgEN3_n=T at r*vq>7Nd4kjFo
z85m&4&`7-VD-gRQ&{10VXwo~navf_gZ1xe-H3oo<&eK5Vg3)Fws0(fqnDC#~wdlDq
z;_;tLYtgJ)tLo=-5tBd}R&Z}*W(O0v#>HnWgA0U-a`gJ_9&;(Nh2xM8;v0p3NoI(d
zYV>cg(&*h91MhlkAMlqnSo`p=f-?%rcj+#sVcZ#A?j0knZl;1!5tkPg`la_-*2DK7
zN;AQFN(H|Mm?JV1TK-jI!F0ceEC)RvJp%l#;lKd6Ftb#M^Je(@FYMokUBvuFOhD6H
zBe3k}$Bk%lv4sDJGyJLl#bOC;8)>%sj1Cnh_#Rb)dWT`)=FD$)L$bWz!F6YrivBo&
zCsJ={LXKy!FpHtkt>5y%|Ew$;*P;Ku?ydGnK*Anl21y!Y|3Uuur3C$dSYEpG|Hy#k
z?SJ$o>^~`-fc at u7dV#q4rnmnLhP{q8HGBnci`zfHn~r#$`|rD7jxqhp^2Xf%3LHQZ
z_kZPKwS1 at l-}G!J>3>`IKMyBx^}kH`pSqtD{ieV5*N^|8v at yNaH(|Y;D#kDEQ2OZI
z(^q>>KYT%BsR&hf*3wDt&wqNG>(GBhsGcKJ9^DgaT_gb+K$vdU+cn7fpR>fkarD2M
ztpBrA=9A!^{r4*%*KN`NNpRu|@Pbj(PRkd*fP>4F!R6#GS$R+pMwgiY1+mr}QPm_q
zNyR?f&~a%si(&zD&L5`yA(bt~`z~6KD*k+i6Ch7$6*t_1H81Acv_3u?c0ShN^xPWE
zCVP6BM#{)~0!`ZvcJJGcmir19 at +(hq9s2L<|MYHSYVRz%Z?`gr{;yOXCgVR=;Q(?+
z|1JE!<nP;}|D$l?3()<n>1xPOhU^(GeUuGYo^`}Ci?%MoL*d{5j$H+pKvVrJTq5!7
z$QTewE1N#O<%o`Qny!^%#()7qoyi@~&t2gfd8KYmN+>IvYZEbCSmR}u|7RAoEE$h!
zaSShfmdZx<$8$&PJbFX#&l!`Wt_F9{Q#|f^S=db4jFOf!#*Tm5+~3{VePR7p?FuA_
zV0c0Q%z6V3yDbR7b+~fM2h4zn=ZGt~`{SX5rtigQw<|8Du&g6y0IBKP^(#A;ybYgR
zu}A#a+()LpE)v=`JIFa^Rw>Koqw)pbL*O+ksS4>mj3;IyDVEDIGz`Ic>Na2tZ}z%F
zc*r_u+4%^m^lTPBsUi^>mDCR8=k1nv?~CEld5f<Yo%1XAUf-8-Ao?R`c63?q46NU&
z9cB|z6$F6Y1l(m$04?=vmZXQXc=e(4Eg%EWQ^ZrysdjhoFzVM&nsyiqg1N*wq)zgk
zh&sj6u-_}8)I|MUa+?oYjVn_>wNy&?LB1K>_e3AK1-BY7 at Y{?(0B)zd(7n(zK}3l`
zBD*s!Qch}c+#Pn1!Y+wqbCM7|L#i@<PAPfpej-I3Qz?K>#e|A`C86S{wsCUScaAod
zKO|&G161riwN`-9r*S?_8r936YwULDQs$Fgo<fT3Uc~u4iVG)EsnPsY>J0J3w$O?e
zh_cbb|1&51drJKEI=hus?8ek>Ig20AW6fU}T-MSHv!XS>j4ER{I}wkuW0H#`#w7N^
zt-c?<dHE)Kv=J>YE-jYjcFe#P1;mGxhS1ZM%&1rT1t=1!3%-#IRI}29q at v6eRQg%r
zqIJ<k4!}aM;8mKbWHh)eXf1ams?PuwkcW`elYb$<QWF_2Eq=gb5&wr^X?qG_DdDQ{
z0jKVp;dm6SK9U>tk>!)wBhB!RcXQn*Lagu|I|55FhWhfEL8Q&`d6%)9whg{=`$no#
zyg<+1KWTPPYzrWwe=9kJ2h_!l=makK{kZi!rI}@K!r$HSC&APhSdW84;sh at dEzo6-
zRHSf34#xp#CIiUmaBtYTM4h?OOzy^-#-bT0+Zh!0W&$G=1hR;tEuL{b(Z-;173ouc
z3#M at xl+HEk@XOAXx at TCt>mNfdxD!@faZM?){NbT*UsA08j~V+q`d_ZmrP00YoOkQV
zx8O1QAFBN%^uHy%7T($az6uWAmi{*}PJn#g_FM4Sxo5vKd;$z37Aceg&f&9^vSXrp
zXL`(eJ)`kntkYKa5<q6iXGko3AFf4%t5_#Yn(mG}V3>9h6tu`1tfPz&<&-3&tTD(}
zOzA0OvJ75^xAA8E_-xkSM1<tyGas8*Wb!j$FFrdUv*M316MVPuh$+A+0=Y$V@|b^U
zbNw&4J>>z89kV{a!4VeoG5uA{LfJU{m$!S2p5oQ)Frz at lVZGxDjEu)`_!AEo|HVPg
zK^=EeW9oQCSS{<lEAe7lgf3u&t9Zyj7dQO0e*sx+a1x7JlO+25OJ7p#91k`;OfJdG
z$^uv`o>uhx&c<KjtZ?}A(O>%V2sj^0IPQ=V`9kB$ro$eJ6&-gQ5RtI;`13UDAOE%4
zG(-cy;*Otx6 at q=slU#@Y`{pExitdfF{*JBxU0p)5&(QyOb?M=q{r8qnI(xX=;{W+L
z at rA9wih%!()=Y9DGBRuYu?B=(OOemE9itGFSvgSGvIZs7hc4+$0VC`pYEy$X%35b`
z)80~CTwDytrP at gZgzRB$Al!r7BbIX?UvWJF4B~Fg$drdkYG|;~1t1KtQkw9@!`TrO
zDl=fnr^pW at MH=w;tlf at jHiIHJ$U>876Bs^Zx26ep>h<vV8^8qTj+O|;{LPsHh){NJ
zUrL4D0G1rHyI6WN@{dKsS-X$F#z;a`%wJD1A1p2IysDlEr$SpGYk6zAlRL7>`oy2!
zl>gI6uKu_AGQb%9AMd}({9kbYyo>*w_zZ8- at JsOjG){bB86ckUzgZ3#V|lO)EQjGI
zdgB?yXAK@{CX<!NHOqrje9+D$uOm=k2VIG%iTN=GPYE1}`4gs$fOQ!=wl2b7r7#pb
zyT~9jTBz>eT~TnPJt+FDCAso+|KiUJ?S)1Zy<BUp_46zMGXo^h=?_pi1F%`ZbC7UU
z*mbrLID9;a4pEc$;BfQxo7q(aNqvw1Rm%JiL$@l+FhI at nujM&BF%FPs>f!>0*bsXq
zPscJ8cQ3W4kS_|hoMP#JXWut|tNuRs+tU2Q-)BlJDrMvWg2OR%_5=JyrZC at AXsaw!
zl*{<y`!q05PM8w}Pfi}+&jy=qY5dU$OHV?WX<!gzaf^qVX}l|5A(bWynnd_MDS?$~
zuaj{NzQ_TgPa8F$&)6y5$8?yFs);_0`jt$R-zWNOR899obYkB6%v|WVobCs|0OSh8
zl(}m}ztwcVeiNCd8e{r>ul<6PK0a$6e<YgE608P9fFS-Md)Ge|+`;7*sQNhE{>XpH
zFuHr~YImgnvg<V8>51q+($mF9uJRl%$Ib~K(W4U-=!3gMz28T{SojyXEL4r|ugIIm
zoK!GFwi?7&S=C(Bzd~Wz&&cdJ>t)<J?F<*Yz0*>=-a!ep60)T%R2D1MlGIE=xxx$h
zsqxd=Ln%kAZ<(34*6^miD=+-;0k^F(|3mtw5pwn?paSY{sdvuXd*;pYAurTYfgcF?
zoFtHhV*nx#7z#BKjLpV8Jxh>1ti>#s_2_K}70=`0>*uf~Hm)8!n&K^a9go7WC at 1z_
znPBhUAk;iiX1&?dEt~6)rS2OU5o^-Jbc at Pb3tqSby~LYg!P64J$R0$iW%*AG;~9NG
z#;pt1LI6&|M2t2`wNThh3&F5ka<$ybf$A}<@o0_WRMuR>!EvB}a!oU4rqj0G+;~Wg
z at 8(JkpVZo{_PewDkIh#*ThSJ3!ADXDK88$e{x*;SjEd`x6L=7Hj^WV%aidT_Z}tYW
z at 8MJeh0g#IPx<fRpBt1T at xIeiBf1SVT`yt4M^-dYR%D-lEpFT?Z8wqFZ at 2Fx`X2~p
z{g}QU*PMEc{#UN7ChC8{A$a-Wo&WDO!97*CKWie&lkPc6s%b4<N}(n*TBPS5fy4Bo
zmxqUMkRoALQbcy?=18|A<A(?q)M$2?>D+WdrUrQX)sbp_?%p2jwW-V8JX&4dRSuo%
zjJ{;!N$x+M3~MGS2u^$v)e at QCbn;b=zW<fwl~nw1wYqe7|0f6V4O(8${u903e^okb
zHE@}cwge8zeI%;wNHSh#x6)$XVS>nPB%)!cYO8}TEi9E;9kfziD<i>tc6HFmq<sOU
z5ur!&3<pbb^D}cYe<;P7<uz-pD2}*AEN2!vz=P<CWcWfWh~A`U5geuIpp3k at kjUz^
zy-OAJF>TQju7&iK2pYl}fGdFP*#WEuoZ!6qsd;WeWJIHQa<dBAl|a^H8 at 3&cXG+|G
z)Yy0wA}5NbA(JJHY$*w*d(28LrQD(8Pt>QQx$u!k_#F9H(0hC at Nx}~gbwJv#NX!5P
zimbicIcc2^HIK7e2!h5(-7bo4bRv3QqkRvo3Em3?B(mune`hAw0oOu5>1sGoBu?wc
z?$aSMboZjD)A~i=Uvk-TG7&^k3iZv1-B5*(C at s^_q9<+sp~s4^XsYOcY|#Q_tQ>Rq
zesjtVJX`fsj1#EdGlG467&5+tqJ9($>ob^{7=!VQWlZLkQmf{hHM17KlPrN|5z|SV
zN-y~eee@%*lNnByU}p8cH6!Y`{D*#*(wyy1-2US+d^1#H|HJ~*6IO~Nv3dk>h?N$9
z6oo~~TBX2zSCp at HEcr8DN}xk?#QPRf&QPcbiyH89deDiZ*obJqlSeJr<M`yX_~Bjg
zfaNB7TPpOh&irpOLa;?Q0Mt|0-+pKy>#)Y0VeQ%8-rsh%-xV*~^%}3Zx3={1O at qwY
z^*dlkJhy%{$;_~!pePOus17jc$w^k?cA0AkngmM;zL{u6mI{HWcMNG7vphq#!VWp>
z%xarha8?t$aydqa+k@`MW=B!7cCdYLu(P-OuBfqE{3fDZ+8z9T&^Ajjc;y0;L98{t
zhX&t;@PzhyBHgefK7(N+T^+wRS0QPVG7f`yJ(rtLS3&;4w3R-bI6}@!*fhNwcF0(f
zHjY=tX7Qa5uIo(yq7E$-M*t?tGRVllHCto{l4V2b3>1y?Jla}^fOubq<c at HHw7vNz
zZ6>8 at L;3LlnesOZ${q^B at wG&2+JO#kkfw+=j9x=i$u->!Uz%o`5V`QaQwWgA+E4Vi
zINOyZ4R at w21kub3B(uWMI$i!Akv+m32VSXx2QUSqK*jM{H!5n#7X|yrwEpDDOhu_^
zz)}FH9&k25y;&?(21UR|W61Ln+2y#~{YY)F*`Z+6K;)J*@@8oqZOB;S+bCpuLx(g?
zgJDoUD{ma7o*NYzhvaOd*;yD4P8PnGPex6{ncNL+UkPH!9mOu?$Y{s%nh1j;!V#|&
z5Mcw$c%*>=kcE!}dK<Tw@=GT0N5S4K_1X|OI|SHeb7R3HQ7f!mWDoQDr!ei*1_y2q
zv+Dxu){u|`t(WZW<G-B7(QbXlGar8N_|ZLHRKZcN57ZOA#CQNfX(_9b_}W2AJK;#-
z4+!*0tJfdsP$DpQ%q$e8 at lHSy8j+@uuOHL)e<CYFSSuxStRYx#T0s(Y7ZRv}p&9e_
zdJJ{-Htj~CoKQ#h7>Sx?B$UnZi5H)u;AT-Oa3ScgMR}j2q<`8lFtskAdWB>!I_Y)W
z5k22EAQqiv6(jYna0uJQYAtTzqP1uY*PX_7iy9YkK3CCdG|yXYl3m4&sg$dfZl!}^
zw3KS4-(+Z3sN;z0Pu)(t-uuX9Jho39N%_eTX|zebc2iyg7Rht`H=zgdI?W_^W;dqd
zD5M46%|4_p32{dyOU7`6Zo$9{VPRg<^OAJnA{T!wiVTZRkglkxx7$sqvC{abrDrM<
zV=UZ!hRbVh2gFxG*gdVe&shx9jw6rSh at BMGAB2hG6AdW?BmxGFa($c$09zuQ5p606
z!`NMeGQK`$(a8-5Sp^cWT^YFse$q;=?H4ySEp@@1*~sQ8?M~IEh_9@%`ejwWFRM_>
zX1KO-8l|i*t=4 at loib<oKrsw-At$^AO at LQ1goAJFVexSD;Nfgrp^_*t%w1rXBAB<*
zthR|IXEm{FmxZ{EPpnsJkD79^Am;^vF^zUqdJz2tZhhK8Xqgf at ND&bGZG5wdYHr_W
zy&w+GA3__B>Q<|z&XZIp!xg at x;|y4W4OX(s)CMJF?{ki%py4!u!swl_i1v2#!OTV?
zuxg_5S+FWsKpYpN77Cw8=#<a_Xr1A>zG}ALWNz6$ml{(kD^sMzkXRT3^iW|A#L*BV
zY6=_!GYybs;zs;7MQ063`~pNCtRW=oYDvYJA^`}j at zC4@nh)<`7+P%}FrFMR6~TN6
zyw4s98t9MkrnnCRFZpqNY_eziqvd77q|Knhescz$iynopCl(KK+W%Jm-CWD07+{z1
zon68=8X|{{y}sIH5}SqUVx_XUw17YZrg|yinXgx8?dp=LU0p+YUw9_o_WNJ8y1M%C
zPhtEQLc;Fe|8DTAH+k3Vz5j_W1!K27AW7xuY#ib9-f|_XqW;rDd3m8+i7J(~%F^2M
zYTol6MlRjUugi8wE70QcIW%UPs&KhjeEJ1kRC`T*k?Kd^!CtWl8)1Dg?2j1AcCh%2
zv1VY&-#6ocQmGAWU_a@<VJ#pLPDc#OSne7w5a0UD67#onaXv%|PLM{Z!6z_odTR+^
zr}XMQqlf2F_p|(lxH{-rsz=(E6g<td#J1d8JW#MbUL^wgGpEgOj&G}R5RZhIx!Kq#
zm_G_WSqoB+=}LF{o2Z)o2|lEk$n6A1Nj7b`%|vTuH(jhR%jrW)yd!BP!Rg-klmjMN
zHsqKCR$C>r)r060`DSzna)vPyXaVDXSg}@H(*0U>y`t$#6LC?Z>%9-auxR!JcBqw*
z-<u=zKcAbU_Jg%Ohes#HCdyT<1{23X??RPw<_QzD;bI9(Bh-7#b^=Z;2KUdpm$hcE
z*X<!oZyoM9V&^>Ef4i*=jJVD=ueC~sAlI{cXSX|eg at hj4f<p!dM%*&S{8-OP&tO_w
zXQH6m?@1R%XcssPbdroP_ttS5?FgwB&bq)h2mpfuJc_7!ZxnQgyj0fi-Wawo3XksH
zQz}Ma*wf<?NPwczuq^TkVq_V&!}ngk^zwfdY(cfa%)zY<&bf6?I6R&>ljEDqG0gz_
z6m1qMgz%RkjD66OKQ^1lPIm_L9`3~u-oZriF3is2q`*i?L$9^uFWL#%>nAkF_3NJ~
zbiy at 2VJAqIiK+gYM?H`D_+8K?Z4`)mg~)&Mfb6aJcEn4IccI)!;;rg^0R^ELjx1Yn
zdM!&bL$L2%xqC8pTGu6*H2s$2+GV`x{I0tr^63Qz+xnmSr at Fq0ILsyQ0M;R$!n!6N
z0ds5NF4%wQMuGL~=S_IEG#&}^E5)<ek22OEGp)gS^T+7%qxF($X)j7iv<SfuHQ at pQ
zm|zT=2apFwU~p5IZNwi274G(E`-#>!q8~tg8qq=h1acw&U8NiVHLzVrGAqSB*klHm
z9D^mYvGPl)?Q~YBi#k#R4c6fQazamylI&2Xf3!a6;eQQY<VNe0>=wVNe-G-gHT8_-
zX?&x(bvHgCqY&}F%>WE|-?k931VG3v6o9<o4n at SQtf{vo=Ln!EEK$}c;s*`{8%JC&
zEL;Pm9>J<O7JvK$@dx76ItoPUPv+0ZAZIW%@wnwrM*tj-JUi>QkP)q@>nC9%+rw{r
z+Qb-q%Jty$Ihkg?WI=?1bvpb8j7P#50XS(`=PYYa9wopL-Maks*j30zb>b3F86g;;
zK|E=jV^W?|>B?35#a#vfvs7BY|Lz(5*f-w^%$PS4N#@82`jo*+r4JvtH66zC0I at UR
ztVPL_sWefJ<+Pn)TiNe5Pt~2V9FxuVLdj|itmyyS?_T!flq$r9kSubWmUqECi5(5P
zg{a^96_3L!F==tLaD+uC*$q4BQ{xtZZ+&s<2|q${T~e1rf_QCBGEwfs2-|Cj0}~KN
zATl43^v+p(B<J8PAenH*>K+gK8wHYvMFyQ84`%0tluoxRzP`Bal;a($d01z}oW&6{
zx}4x_9o`$gD0*i+G>@r*xmuR$+4%ytB7!VrX?q;?J|%az=spNwYoOJ?Y=6=k+pR{?
zqh>qliU at n9Mb833y{OIfW`g6n<6S?mA2ksI)kQhC%z*>i4kSCkstf^RPfJbgMrB}K
z3#pmm*^u$!oCFHI)q>O)B#uga1tH0S+IM!aYqPMz6%=2m7+M(JhgKR=u8Z5e3p!~4
z=SV~sVHMg|diwNgr!iZ!)B3P3&MnHvU{xj?b9_c)PQflAJcs-<u<f%cyMOly+`Z0$
zz+_&YC``py at r9ZtUcju^1N at P6DLf5G`wrwNT*pJ5Uq9+uEE$Qic7gQHPaK7O<UpN&
z9AUd at kHjt@eJE~f-kq;~z%}klQiV=?)B+Cge#WeiB!15hyZu at 9`}9 at xPA+EbdM&-X
zZu7m>Y(>ay6yu!FL6mmkRcuREI&2|e*AXoIXtpv3E{H!M<_Z32mgE3)e7=*O+=!Rp
znV2YElP;UvaHpwqvX$VC4S*||Ogmyr{&>X6I5!4VDR6jf9L04cEx16%tUjj$>VIW*
zGZXYymDhGnz4F;FbUdfvCT%4}Lehb&=5#?X!ki;{-fYecZ6zhAr3zzqTBKdTG;op;
zZUU;@0lo;dbi-pnW%SGIfI}J7P2iC~!WRLEPUoj5NFYz*5{gu&D}i(*UuxFD;Nn{r
zYB_fg>Pq_v8kN0DG4~9Z#E5odxUB0L+>QwdvFqrTmP?3}L~-BjDn*ay6fk48HrbQF
z5Y}Ylz)aH!_aGk&eG}Hb$-uYG&K1HDdQD2#^i6^>jb>E|M}TLle&~}ZLpTj4`!a`0
z*)=n1t$QLki>O+6-t5G1+(GY|x?t~}5C9a}Ey<?^MBPSRFGS=*K(%|>fJQIgz`BP|
zuq{$aFa!2MP-CP{tW_5%JR)bU#tAmL1*6wgG(tG`YUO?)@``hok%u<Z3*wWqOH%6Z
z#Rn^g3YW`I)>Tb(Y>LqHM<C>^0h{gl!vnUKRDqGvYT?&!_GLupa3tnMHQ$H&R3w?V
zgIT35rN7Lfe{(0N3vwG%pwsql|4Obs<}mE4 at OUIfv0#3|7X^)c8=lDT^!9{$VUNZw
zCxkCV4N(hSh_~(5I*}fsre+MY82Q&0T!l{YUojya;g2e2qg!Nj0zd8{(DU95`~%nm
zlD)x;f3_~DSL1r|em$`d4bZY6fWh=|`YT+F;C$4FA2KkQ1IQe1fEV!yIRoe-Tz9T4
zp8x5X?nmMLVrI0vVCHqZ9`iQ`_jN29yQVQFkp!6i!VE%cr?MW8Js|tNdZPuy0_8bq
zmT?!SC3KKzBPRXqPx3F_V0KfGVhWVhNw%9-N3gnYzS<_M7il?GpxygX(OV5oUtCbg
zOr*OfT<2^esY>r+pcKD|`G637#YgYNWG-Jb9t&uk_#|*nHT#3XjP*<lWo{t}<bNVu
z3|MN}lu!tjAAVPr!Ca6VftWXb5*Vl3{lP%yf~JMCY$6Hf7Z_+PoD;-ndQ|2BlfXIM
z?hl4D7lfi0gpjqXj3*khizJ|*jskSZ`Yf6^&*47%o3ruw#3PI$@(5i>rnzQ28s_jV
z`{r{Js}ye}F@?xi1B0vaX#gxv*Rg(oVIkTk at 8vTenn+kOn?%Sz&W9iI*Zq0%Z}rQ1
zqaH0RU{dz^pZZ0;!y-+>GyTre#Cvdv?Iy`pXuuZ1&mTRMU`yUkV}q{cl7pl3=kjih
z<mYDZ$}{k8iHPl|!_!&s$s6|4zrT70ZiZ0hqZSHLA^{j!h>KuaDVM7c$yAVnpt54t
z!es@#6mKFh)Vm|m^@&hKk^DuMXjKsQc{Cghx}6tbygV__GL63hUHiOcI6h)q at T_Aj
zKeXh?7)jOUW%C?l)!BGr3MzkTDQd_o#Tudt_y4iIU#pcw^2;zCZ8i0+1bqEKOqD9~
z3#U`Fb<No$oH0Yh*yOiqYlT?|0_FhET5ap;Wb4>65%#(gm18s4Gj_(q&8M%nC!6$;
znvXxD9Hwv2O&)>=x%eF<&g}1HA%n4OvC|xs0R9tZZ$j22xH&cl8wG0wm9Y6ZnUWkM
zaZWY7E!e_EJ$XdD)a?FHUV8No3MG+<n76#i9lXZ0#DXXG|2u}xHfTCSmvvSeGsD>Y
z?@QH{Wd7IX^738%m$7iYjRr!_=x+3>)m|erh;Z5Q%8v^d^)EM;qd_14fwHx+yv9d+
z6L`ASLS^6jmGK(^b&CW!$P+B-!28pQlsk;hpvt2z#wQppP7xBy)~xskg;~9sGaU(Y
zkc}RNOEzJMcoZUG$Vz2xxpGa9La~s^^9%|?+BI6#hK1Ydbap{U(hj^-t}ayDL&nO%
ze5cWLOm!-56xtpc?;1za(ufDbUxe9aJ2}DLtv$uh>CyU8Yz339F>5XQW+YnpO~+c}
z$RuT>z9 at Hgw|QwvEvbu@$G__w^)G%TzYsP}_pd9kOcJ5lBK}x7kW7mtMbGxPky5V4
z_xPuq2iwXl*GorOpnI(1`uO9qNRFFKy^`%|wGuys=_m;{912Tt-h^A4W6Bj_xwfCI
z!56gr=MMnK8iu at e!XXP!@dkj((cAUUco9Kj_Km{oa=}R;fU^iX%JLIn_uh785$^GX
zOpUO3{WHK?+u1#=fmbsLfRytqqb8C?DE7;D7!}#YTJ`!Knz9>zgqQhHHzvNVUiX6K
zxt?}E%R-(VZ0+y8+1mSQ7w;vnUTq#?EjVUkpUtX(V`s5N`(HW@%ttsT!RFBB<l#0K
zF@^l3_?aU^aV-8=`APm3m<De)W_FQLk*7tj4}=_eCi!FsDSG>GixP2GM&-c3-}pj_
zi8brKtbKutqJ-BjM1QNPZ5=5Gkd}u&&KreJ_l=`UNu#iIf_sR*DR0xca|b?Ctz+2B
z9 at F!r4e`Ertmz46kUa#Hs@>da6AGXLef0;eE?#s_3kW-I5Y;QVN at q=m_M5*Y|G`F~
zT8NI|NYaF-0{l6Uko6P}nQdf%qR#}K_}1VrnKXf7ftbh2qr2W#;QIkfBKAo;qBA`z
z;RC at Wk7zTb&m7uaaiQDb^;u&~BL8*Z5PB+dtMMJqPxYTQ#h*s!e=9$HxSFj0Q+<e%
zfKfSfv|IiV9<z01h5AzudgZ90$9+Gl?>GFNlA)>PzlN3n7=#PT5}kKXyYta`tMd`T
zfOti~9p*26)x<Bll949Eos<rsh|kwlY4jis6UF6X8$`eFSHIU_l1h1 at T8=6Y*D61(
zE&cFMjM at Gnni02BBcjURWV^;aUL1az_RYBtF!CAo-56YFV?88=U63PAJhjzt4xA4j
z$`JU>=A&1#=LSNf;VY&d)3NozcniG3W{t4S=EV;xPbQrTQq8P5Fhjsn!H+Mhal7E&
zp74RvzJ|ne2c#a%07RI>)ChS}docw$&C^YhU>I(V<Ay6liN{J*+5!6zx-ZMe{3<Si
zBVjOpCQQSK63#7R^6g+0BxXMC3iG=8c7ow<x*dIUHoTlqJbYTQ+jcK+4*cMR_2>)%
z^af%M>>dWa!d745Zdvz$K9b`gwS{Nw%4qx(!bQ55e700oh2p|7(-{^~%BL8=9Px8q
zZEUTm9U<oXWAdRfQNB?JYr{o5F&ghkmsy6QIx4^;f4(LlK{bS)s(+AgAV-VMPH2V$
z2G>HwHkAONz_{WOqv3)o3gvm$P+&l4krtVhH%+`x$#CRdf5A^{s1eE}zUS~sOhO=#
zJ2{~JF#z;jqWFzU$@*Vyq3^QxR)~QI*OO1N4h9sB=r+y!qi?iMK!QtxB|aQNT<9%^
z at p8-Bg$P^wsElfG(V`hojM`-u7~-1@?_7x>FldRRc-cjUe!|LgPFPIi;A;&31~R6V
zMcu{-5i6G(@wNqd74E_LLh4cN46}wJ>T2?aa$qdi$*pJ*Qy_oglvIP|Ak&BWK9*ex
z|GEc#jt-0lS|SunA{me{3;w}|xyg9MS>%LZ0zjs62-4T1FYoUVOb-%mz458uIfjX#
zj(n8NWN~Z~X>uC;$Vf?CS9>j!46>J)X+hR85uQhxJ~M^ua^mBUhQ}eId$bVvTXP`^
zq+x!w&pB8l2{w>H8fKK<MhIYzv<Mcf&+M}^s9;~)e0%t^_7?VP6C`7AUJWtsa_530
zk`Yq4Xdo&#H*u!YVf@}xld#{k=-DS1Iz^2V#nANLIVf?{s#ieGTr~Cfltfe+2meuo
z)s`{J+HbQ^m)|)8ay{%)j>dszfV<413d|Gf2`RwAV;oxeh6nl)*i5^j6y+eFxtb*T
z at Y$CvLB%#D)1-CqWn<|-H!2(PM-|}72 at QnQqi(&|kfThW<b;R#cM6ryDcuUGB*jrN
zhfB(2ALgQo9WAE$Y;J!Ht4eKIh*vzJH;)5G;ueccX3h|IM=oxsTl=NIG3X7Og>ctt
z4iL{JoAY+2^B|tXRFa5edDeK!7Ek1YFLog at YXqKtJ`0)LButQ84nO*AS4UR9nSJ!w
zNSb1YDDRVIW7191*gU*5JHuHxIgJKVMl1;BmU1$&<P^U1!~jhL^G&-R45awt5i{Io
zns6q^V9brMc;A{6lAB;P0f)?9O9`GENlqApgSf;CFJZ&6-I&&5{7+(x(85SCHnKAz
z*`(eRs85O!+HluC+%XycCKe&5)5WTeC-)jPOL-++8tF1ND?w0cX5bnz<3~jvISq<H
ze3VK!<2#~d#VL~t78ky#gS8M(1z}0=WeZnh2zR$23R)Foywg*1NSJd4wxT$j?`L^O
z=Og~tSYgeq0#r4`V=^D}J-yOwIblkR)yn+*9|&p%XT}=s0;jZRjI{qOm6yuZr2VH-
zU0%Ag|4a$yYc;=y{U^c`Muc1#K#1u1up at RIRqJA8!cE2hN6)$!SCR&mR-0<H-#vo;
z=YP6qojy!K>%H#LQGHN-!pAd&8$wS!W}T?hCZEvp?DYVlRD+APQt9&Y61BaKTKxs+
zj7Ul|Y|A72<MWM+W*5mH7tKg!R+zb=<ywaro3Re|C|S9pGKz at x;T<~<jrfB80QB}A
zGUgfPK(*%J7ncCpf at v!4%cdrltQ#67{t^U-Fs8+L{s?sgTE}>P=t9(obE}B{LrMEe
z3I_$;TZ<&e-9u(hrgorlp0A at 4kc}D#UAqE#Shds3d^C{bd-%T&23HGsy+peBI at c`U
z&PP|>p^SojD4;v%t&bcTq26#c!T4OqpnJi|*$3*&|2s!Z3Ax6+_*RDDE3M?YLSCvG
zo2aeq;O}oJuJ at 7Q10Rwc$tXJ~GV5g>OUYb%OD68<;v{68f#+=78+K$W42Og$Cp3DI
z0&=1{e0#2b#Z)q*EW^!6%imgbfKm^XH^G$qv at s@n3i!Dtl`=3PXW(@DBiTavy_u<J
zkJ8^yJ%BXEu<zDD9S5#?SU%)DsaFzd;$84fqds_v1cs at NM6)K-t(*(~<Bkr15tUPG
z-Yp($-Wx1mm<bH5(2ntL%RQry)L9S|qN+()cM*Z#`#2x%VCxE?2Bam5&G_IPKIMa}
z^Jf37*@TA^u^F+y!1xm8fk6TnQ0!9S<oe!YFsP0B5xPk%Vf)aOi=))rW*G-exXVjb
zlMiThp at Mus57)}&wH4$8@=dr_EO?Em at Aj~*+hww$$M7mxY%aR<jF*o*lr7dU;z~3x
z%6*%va<)ixc)hc`^ZM;;Ja at i+y|)|N48@~?Xz(D~F)W&=X^u~`U|pF6cc4^+Dl(|R
znE`oirJE+X%YU=gkt_(nprv2NwDg>CJBx|zq|-QHa~!H<M)1gA*~r&qitV<veAv(l
zJ>33G_#N;)mG?B!1d8EM3R{?}^ZqFI?YUn&K{}^VgT*Zq!<h_zvV4=Pbhfy){q*gN
z8Va%Q?7oPPo-<oE5t9t2EZ%H1X1|-kP8c+gYk^;c>U<<0GGISezJJpL;$Zk;C&^uC
zQUbBJ<^s}jSctZ+AMh_D$Z22g&C&n*S5KL<Ar^+t6dZB0D at BOD-G;0srDoc1Z)=k#
zC$bbMM6t&Z09x?|fiZM|Go>K?{Y?QKs1h8+z%L0a86P;(ZXNgFOo at u6$rd<++khr4
zc#Mo`oh&Xc%3}q7-%DNNeMVRbCy+c#@G|MOM6 at 6+CQ0FyR(fczwD}c1F%@fU!5Tsf
zM2x>MHE^+s%AOFOC at sNKS6PB9ZU-fEdRHW+OQ;3Aw(`T9*U}+%)Drk5&H*fVgr68+
z?J<(a%9;;^XT_*DllTU}wuv%1l1TxTXk-q-+(VDfF-;rcKp{gIwL$2q!DVa(hD6KW
zEWH*^{>K2C=?mzCp+KA-*k)HIYeN#KFioaTgFY8}SZQECV+smdlS9ml&cMI;{KAzQ
z{4>9zCuRk<<dU8X6X|IXBw0Lvz~;Xs!nXPX##;v<%mMe!V{j6<c|be>##&%mUlhlo
zRf9;v5Es1Oj;o0s0^b#m)|JJAFry)h_)=yh{)+IO9NdB(E<y33L{Iw1u&7C|H>#FN
zLO}@4roSU4`^cpaIsW>@WN?PmGkQETW<y|&)Bt3v-(ps9E!whv at u;{M8+UNQ0SevI
zTPTS#vA$=om(bLhmvol`S8+I6henk9<@Wym-aal4`q~}j41=k)U1pjuzFmaxc3gm%
zBK_$Nb96SDBoFrh>T~fFbJ^;;mp at +Uqv0v!ccx=aqDTf>-9G*ek5Df-K&}+q!3t+B
zfI}292NjLSkVX at u013!;^3Tm<SFQsC5f1*bi`SB!2HcvRXl!a%j at LshZsiRwHcFt!
zqNo<))p>BZ at 4Py#-P7(B>FCW?xU#ng`_bOPe6;yud-rfYf-9&Z8ppzSwY>u(lHjQQ
z=;{96Pk1q_NtfJjF%rHD1AD`%F<v~E^+6re<>ebLaenV0?#XAoaKC1`_*_;$Y7MV8
zcVFmG at m1Fp^J5l2=0<vg=#0KMHi$g at fi!AQAU;v52xDT3Jz<H%_`_}>oEaLmL?5%<
zfS&Js^n)ja#$K|1PhAi?p0bM7Ir6^F7D}`4%as-UuR8Z{`BQ&Y=Sl?#!N#_0zyqVz
z*%0quaKUd4W?7+fb(vval9 at c-xMmXNWc*194=irw-avdx`*e8vT76{=sSRGH0%A)<
zT)>Y|Q-83hP2{zGhJ at bYd}Ny>_K_UQhmoRWvPJe}+nvU^seIH(F#m`*(ylOoh-_lN
z4i_4`&+r^ltIKCR7{H-Ox?9QT7^$x_*M>chSlKwP16*ZZH%qkBx{UB#wE|jU1ew5f
zX|WWT;58BnVVhsU;Mh-bCnI6H%15t};8k*vLVN4O)4U4<CGsXiy%MC2r!ve!lxluO
zxyqJ31x=$)5tk7)on6II*GpfP;Nd=O!`wQ6wu6{Gx39eR)S&P_)1WD>VS$j>*bGi(
ze_T at weu>jhHKq)A3KP3AHK!JhEyIkG+-jm%xb%s-_#2q0L%5CXF75<g0V#OkNcE^G
zNF?2g)`5choPxrrj?M&>3j_u~#A9bK%|Yy$8!u?+2DifZ1i}w4hP8}K_uq67;H?#U
z at NOA1BKskkJ*X4yLJY$IlGYSSAwc=x*;B0%Ars%3e#U6!_p;|yV_Jwfj!`Ze_=Ddx
zn7nq}VFqvi`(ObX-+PP5_%>JwzfVIVG%8|t^MN}eu at A<dYhs+fnik`a<K}W%()0M6
zf|=$>N?K=uHT+T+?G6=2nqK{A*k8kgR|l^GP#VwwfA-#ev906Q8|~kDiWOD6lpX8p
zOA^O+BFl23U0ZS``Ab{Jo1rAiW-O7~q!imtyC3Vkz<IIr`vG&mEK;(QcAu|oW07mk
zU@#aA2Ebr2Ck$+4a+Cg%?BYBhBCW2tt6eqOadEd<svhve7@>eSM1?~)Xjplq%jMJ3
z9z24sp!l$hSl;o&ZPl0|r~Wf9g_4LhzBiIu=3nSnGoA((AwGJc3x5Tlk`LIGebE`q
zl4{CB3&E?PlQL4P0W?=I^cPF1wP~f!xIL+nCUoGr4_178Hwd52+j2P9g2P>^GV%q=
zEg26>P>u^5ZfD^W^Fg^Ag>t;<o4KBGzq5W&ZlP8VS8%w3D0eL{Cx;9zDEW(W--P9k
z2CtA)RuU~A^$!OKwRY`B{m^o+`|s$n3_gJOE`*00K#=zTTyx>a<rc2Jc=^je!ouKr
zr6cJR6^4Fw<Ey)$e!aZ(U;p#N^*{W_XZP+u_<OY~_7w+a2n-`Nn%T_4Tw&_`&ZqY~
zu at GC8$A9=k at _0=i-%U&3l*jk(C8cla<Fxc`^BBjn-TWdtcl3Gs_;Y#uAcgXUK2A%2
zDUbjDcORY;PWp(fLYppq+ThLAm9O9*mYJ}?++&{lQY-}W-xtWXpADlh_z#`AAEUA0
zu7b2+>8*buBSI}2D(laK(Z!_uwl{$#0wV^+%w0UeZ03e at RD{6tVi7dMb%kOMnk_N|
zG@(kdQ3uTynE{%e`*{}}G+Sf_XfiDAxY;5RG{=K)Uo#UNP5 at FDTx;$%l;>H*<RL4Q
z?6MYI9AG(+wE!!OR at 6HLw3Pm<FEFKSkznjuVm=x%9e<Q{M35(*52Q-`G9TU?t{vtO
zvUyg6?W<@gp(9leU57n{El+BYZSkpaEdzv*&9fS8Uu7zEWrz^AJgGsp#SPqu98>_n
zJG>`@{+eiCm*nCn8B&ZI<Im#Oq?~e6xN#}<@sClmR8`>4s#hG~+W-qgG$A5}`jQDA
z<R+>Lp+JaPaNIt^TAAPw=p`%&l}vU(G%!ipXoM#-0tj|+-3=ytlwzRAuSJI|AZ}t>
zM3<Zxqu9^^Jv4!m4B=>gA9ak~S8cOdzHavtEdlXzeS2 at qykA_5Y6d*f`F-I;FH+f&
zXH?#NhS*6fa~N%@ywq97c?ABfiJJ!XD01Y2mh0G$k1!ybNh?^x!SEv5f at T&k(+mpF
z&`hB-mu*FQ-q!Us={l~@fXfs<x>Q=T`-Z-y$uy69Tqw!|WtcVikw^u+>Kycrf)!m~
zVoS;%8apgC$x?ct>-WiNE?b{}T at zxD6&hh71+zE{8057XRG>(6rnBBHCoCm519o1T
zHH at Omtz-pxK|uT at r`PnM{;L=-&w}ychoalL&I_Z=2)CfC1N|9pS;>X1#l59V2z}|{
zZtVD&pRLEgmAY=HO4%iwnRe<k#U at 7wGe(7h+($uc5}Ph~kt5BBI5u2WLm(3@^hNWH
z_b;(d_-S8GjKu7UOWJrr&@ez>VNJ1-H%M+8p%JexjKPC$gN<8UVLm{pCD&Xz8_ at 8&
zXyel|U7&omOAheb8tzdUI|P2RQj3mWmI*wlelCS%R)CI%S~-an7JF}6W!XZp`kFnD
zWMREC_&n|Be)D+!$)33_%s%8_Te53w)JrPfzH(a+aGWeEUX*w^W%^4rFc$W_sg4$k
zyeNnp_$cGHE+X-wTUu0B?C2PNGQhElU1K;-PFR8mkLV1!kF`r^m#;r8Ctet$axXqM
z$amq#?H_R99l~HCcnq;+^Bl2 at IF)$xCt7;CW6^x0+uRZ3lr~nvX54pd?O=yb_v!K-
zaN$FeqcA}&2s=@OJ#N<tP!x1+scigDv2(~m=HEo&v#&t*EgO#uN-!xCH_VR*i0t;h
z<{J#-#N~guRqwzAw^#t?FW?x4zJVZHMD?;P_>I8e{?uIyZbD$!t;m9ITrvF7dC;Vx
znjmJedLIMjR<%GumNH1A%zMobMXb=Rb$G%g>y_%pq6#Lp*~vhLFvGRD(TgD2QMVRY
z9nFe3R^6IxsxYxeC%C;R;w)ukVJRs;wm?~vwr at 53(W8}WsWQnUD;Nk_ebjfmro(cs
z1`2FYp{7?6G3k?vBh+qL(`V^hMe4Dg%CgQ^em9!G`1wa;9SB^w9|)4j!$sZ)lN^oW
zRgX370?qGS%FE)_lqwCOYLHr;0C0|!uBn1n<@8lAYbyO#_3ekwRQ-)xy?Pm8p*@R}
zw|J#t;8?bJZTS|8D`Imq;dL~^#!~;c#OueI at H&7C7^l?V{5F{VYHBMt)i9L#+!r0_
zW2l~Sp!ikP&3L+D76ww at __bzLCQb3WI?06qn^e|ac0PL3$8GgEpNliRxXlsS(XmAK
zPm$PX_$m|oeu~)owMjBf5@^a<P9;pu0*g_K+qEQ8mpcnDeu*Rb?R?~484Hunw(0P^
zaRGJ~CSQjjx>X58JY>FU+36E_m+sfKY28xTfIEg4rex{+1+YxI7cXaSV)EY?;E7Vt
z(;M$|;yFAKsB!YX1fxPd@`89<yOxceHK$_=-P9X+*xiH!ELXy%?>s$bk4c1XM>|<*
zcwNCTj1h;6O%9ku^TeFZWoXZ8(s!H;kUQ-hXT$gS-zQr~2#S~eN3jRRVar=BLc+S5
z#?$r<5^=T`SgIDVtTC88;;vzv$4Z=abyV`LfGSc^Q8T!+6*eC7q_8~zO)4iu#sP|m
zGO;*?nQn;PEc8y!UiWyI5?5>D(%Zw>P75VaeVn4E<UF~!)v-OBy|G@>rQ{VIhnF6d
z7`pf#OItI%fTTow!8Ced=`0F*0v$$eiPOoTG7!YxWNtE6vvCc at JnG7K?!9L6*ks`N
zIvqSd3zm`sUe~i{Jg0Czg2~o{A<T>3dnYjD4v?>o;VU?ShBK2$c8ni9SvZjcvLzso
zcXysP9d5p3H2(v4mcom*zY{zuRRU~ocZn|)NA_V)eM3|9?HJ1`mRI_P;9NmsWMMws
zG^}TZ3ZOK2p9HX<d2Fc${A(YpIv#Gz7PhlknDt?NyG9)VsPmR<$w{9kJR|CGK9mHP
zhb91M0xo927GM&c;E*z3?l+$%{U(N4R|<0o8#-mA5&zK5+5*z(k3I%4Ly(mY31W>O
z-6gQ|wZ!q(nvB9JY?s)8#Au|gJA#G58kJgd)9jFJ?EGyR^R&;_j)beO6=t7bWq_&Y
zv;rBUk|9q`D=P$^Rwy7+p=gWj7n+r12o{0u!B72 at yUpVsd^nRgxa|qkvTyEd#mqGK
zp!3Y$>kFL4fB0nQp&Y%x0k_Y8Uko5F8brVI1pP^$Fm5f~Tw2N9>~`5;q<og|`Q}R1
zBgA at S5XYRYPKCMy*Rc)V6%u4NInxL*?71S${N}COcRv5(%ih5uOs at 5Z8;>?0&$KNe
z_z@<&1xC78ta68e7Na;oy?iR#a=ClLzA@(vQM<qfEaVklH+fsh)=rcE#dOF-K*57(
zTs}}k;-Ha8bjJE<ZDFUFyP^CVPJYoUtQ0NpaB|e<53#RXv&dzaw9G7aibPEUd-O;)
ziV?Hd?p~ZeYo<8iGBUF}7A?1SEXeW{OyrM?BioY}LNPgQE+$LQeaX{QCNulQPdhDG
zqScUQ0e+n8pMoIYzt|f7jOfcFV+29hl0z3}3&Zg0>Sx$+nRx?)jka!LRJgk63#ten
zw!x3+?XWekwADcXQ at 1-<s4OANPiNysH)U|Co&;UkDTEsyTIW!S`J779CVSbBL;-U3
zz!^*%*3OPeWx~_XOqHikeFFPfEN^9?!O;D2Dw}&!_|nqR%2uoeQs#*AQx0UTa9F*T
z=lcee at A~f^iGKi`0ghl`j$32nl0mUH1_;bJi*Ne3o%~a!jmM9Gr_!3mose!XURX`p
zL`#=kIEAdbu}4CxN`y8Qe_f1S;6pwMG=8GGU{Y*xLp58QbjPLchV<m3mmpan%p*si
z+Q at 1n>=7E06|i7e at U@joGcH;Rm-{wqGF70)3gA?1iAVq$<y+ylEUEz%bC9S8DI1p<
zXIjwh#C1+laYf|(5yOj=BV-EJ2!u*cv=?X~_C^%C(mMHKFvZ$1z__&-rBYeSNMo1N
zR at W`I0}|(L2B$1Yl35%(2E}I*0V2l=LXd~i7DOC#UtBI{(6t at NiaH{SFgqFs_!k=!
zuC6a|x%{7JHn$lhkIY$=Wx~rE2dTf_?6Q at DjoLXUs$QXlm2m85_({f-uP~;2XE*_a
z12Ei!We5jiwDgcE5}&>vUEqeB=KSr*hlI%HS2XYjQ19p`TwXy>%Mq;q!}F8(;?R5F
ztZ(c;Uw`uCFPdZzsn+0I#JQmU*yZL3u$;vgQ<yQ{!BPsA at ozo-3YzK^Pf5v9GRu&k
z!`XX$jAL!~0|8R#0^hp5`~c4iC$YHfo4Zq4NT>{%k-Jz}(thS0GF&Poc?#-Ou(6d|
zcJ5gu#=@KpyBr#((iA-WcB+sEld?VHfXH0}cjMBZhPged<If^Y$08=XsX3*$Q!t+z
z0WhWaxtL>x))hrJ8+DJ- at H7OjXVqkxA-wS87hbzeAk8U~bM5te<HOfm!}T#DJY#5~
zESJMtsetzfy{e)fGHwT%9qpwA+_5*=WyF$(5pxPWu*;xK6>N26QjWcug+iC7N at bD*
z_lLcs=H%iKJvhO+Zye4*G7CoKAv@{mXk3n|o7XTtu3Da+FIHaW$`E^`rRigeOEVcm
zP<^#l9XGJyOjS}HYvy9JM(0EbL!Pz*0zNSwtyL&~7ff%l?BaB(F};)keDqcR2!1a$
z(0nPLuBeQGkjR)F{BBi&RYtd!DJoSw=~zXYDwp>20>_Mnmc)A*C<&I~L!=PVa67Aw
zprjm4hW$~|21GAv+%bw7JGs~zPag~^`c`SU=pUMm0&?JmT@^E$G?6EtWluhxY1kGQ
z%gyG)^x<7`dHe`G{McPq?wAbwdQV(~h#P1 at BPi%*UJsi!B%_rWqpyqN2fMX%nhm{q
z_lN&k)kMeV{#Kl at Nt8WcHd}1PxH`=rn*YIRB+cYI*VGzGf&wg5&#J<ya<$6;U{ro7
z<BDpbJG11^d_H_L#C at C3cmn-G4g-9+N3+$N8SrjF1+*QtQvOPg%BfDutFOJ6Sy|YZ
zvSr6N&g0^3O#dw#&N7_DqQGjE$M*zIp9pHm7 at dvPW@D{+vWZM&qF#u&U8P$(_`T+T
zGYq$sSB at RiPsjt8nbiOr=j0+d%MHv2<nYE&z<H4HP&D+ezmC>6jMywEx<P);`=XY8
zc!n`X5O)y<en|H6t{zL)h^+vDiv1GWEn=^@KrU=fW*e+fRfoJN#(%KH&`Tn<phUdr
z at H~UPV$BvqHO9x-pZJS4EYWaL=AeHZmMfM)7+e6R1m|cfiZrk at 6pzBD*+ilFqZv><
z>duN{_u>o^UU~y68p?8Y7Y9-Y$x7kYI3GzVaF%rI8c&Al*Lc~&Ly|axnUUDzZ^{+>
z2>b&u2_1r2&BY3SY!pBa1^flWI_BYn&pu0Ke`$;jZzR1bFboO;v#eZ3Z9~bVpzpe2
zACO#0mKDrc6$SH_3*%fH7|Yj==+R&m+Ybgn5Orgcm3D8mUs9TLR3XI0RU;lyH at y}O
zS2|FHW$1|E4Q4oo8I>#3Txyx=SFTl>c|k2tpbwl4RX>^S6dNr~aXvM}$glY1Q-n`V
z8HaE>)q-il;>*jj_GyIQ+zWEpU0$3$w`5phX^!{6H~6ibzclyq1xD5v!jG_w{CxR>
z1MSQ3S6E1Yztn_#bIGoT2z!}QqCTt4sqjJIq5?UBXr at Glv#ZKu!T71EgAi!V3uM)F
zGs7wGvJxdU2phyPs7yt}E29f`%zaZfB3kay(g5%{UX_hC;m%ya86g5d833!j(E`Ze
z-6%I#+dHPfs+yKljRmAFzrBb{d{^(>Wf&&oBgNas%y7-d?&kXbX0yNk at X4kqdbm&$
zC)=FXp*=MJUPlGw_21mvUw`@x<_2!Y==%o?*BIU<fuFcq!CY3u!+)LlAcX^Y9qFAB
zRF5kja1w$y7!x%yT-w4nE#z%vR?BxY1o-vlA#Q+#vj%nxjw4LqBQ}|&85WA0AocDM
zxgv(ElQ^r-d#7hzBt`5FFHTG{XNRflKQ2nZQfvcGCx_#~*?A3#8V&b&UtRAEJ{Z_k
z at MLd%x4zr_JXw-2AfoMH4Q?K!O7vo$w=hVg!sKHGILY^w^1L#~3>V2Wz-_muyp^6l
zc0|p-?c?l<W|@;~OD1WK3qs?EQ(E{Nn>Ux52tf+FWEuo-S|>qn4Ec%uPeLgk5bel5
zmEJ_aD(yHPUT?S0<S)hvsnkbu1p#*e$g#L#qxt=vwbh%qKd-P^<*^CVe!TVP=GpGf
zv&~&>scdg<KH6(`kazgI_2*BToyU^ie1GSUo7-D|-Q2A}Dzl+17lFu=MPqMsUt at ZW
zxaVc6D$Gj~w#^X`33i5-Ggs*M$jn$_@|-V7(&gpN?MLkA{^rwXJG<+<e`!DvZ$X9R
zhds&(iv1_#d!~HDZC1n4 at cpTb17F=hhHyFH?1J7;`@EB>R~CB_Ku~50SK);5>(<BI
z<I!iI3$-i_isW|qD$!NbvMLBj&*7*oo$PwdxfY97Di?VKJ%uA2r#$5T#<EOB8R#gy
zidKmm$Qd~cP8Eo$&zjQ<IPiGQb^Q!^LNOT at 97XU!)io at mMR4!i?lW9X##0Il>f6Q6
zACFcq+_{CcHWe5$5Z=O_A1r$97jwXD_D8g=4FO2PL8t<=kpsS873N=FPSi`n{Xn^B
zdr->T8NF*2*O%h355(9kA;sjb(Ys4vto7C<sd1I~&DQqz&ZCFQ*P1xsT<)mR%oY?H
zP$cH|zT5fU7KLK9|9o#Q&U?sF;|F|!EgRebdU0~Zr5QQRaf7Zo*>YuJp-5Uu5%>nE
z1`{{?${UL+(*@PvM2-}N9AfCPSebPt6LDSy)@B(gdMP$!h1zn`Jd{mHYD+GE1Huzb
z#%R_IKE>`l+}g%6B(#nbaQce$?W8UOjFImu4H07}rqaGBwKVlt8LC^dBYzQj;(j4f
znIb70Ema(^2r=&vJ4|4eKFQwJG at TD>W}5a`+^M)m<2?m0N0BMA+XHiB{xNkb@*roO
z+2vXR+XPQd##}N^&88j$Olvy12k&z@^GdkVbD>hD9Wp2u^Iul}Arb<ohJ#}cdE at ph
zmsHZz4N0#&0%kZ&H><YrtOKH?uPB<3v$z4qq{q*gEFVXzF!ll{$WMFRk;W{8G#DrV
zm0i<ahiUEo%+^3nuiIjl;kJrExosz;lD+I=unm{iYloG*Y+wFDZ3J#TR}~v=wOH_0
zB1h^?2Cx!yozp%Aqq_>cX2P*T?Ar7o+<prB;<Y*q<{tJ^X_;gEBsH%I^bnslR&2>S
z#+UNohRA%z6C3wOGdUT(bzB2*x;=|iuU>->u<l?NN at y7P#3O71hhS&@nBE5_yoZZM
zFTnT;Cu|W6o9yPO0}(g1gCE14ANCHRTG~1Kpm2BY;Twl-u<@ijHA*{2DMJZ&DWay{
zk1n?WQ(Hq8R}yntXyzkz>u`7`&|R22=`Anbg|Wl?YwaZz*98^qa>ut_?CJHcY#snG
zGFp?DwO*<Mo6-uln(48<g$?75Jbs+9GNa?N_D+J}LNM%#aTZ(eiQD5Nn$meV6-V*~
zqKqB>zW+UNQ2F_b)Mb5%<=xY0Mi}>;{=q6jeE~Z>ho@%?0So{%pe40uwgqQ;7N7Ab
zPDukF=k!we=!L_It+Yfoo92M$u!<-QI>{y(5`~oVZD?1L8Cy$!VVW$+ieQopjbR4K
zU(1<@X;{~5jwkN^xB8VUI`Q=y6no=Jp|n9KENyN$K5A>ka at 7nsUAU{6(MHNbqEzBJ
zS6)G3AzLIv1mjx<$b<aM8~)c{_}9VmLo%PHD~G5>gD+H&h2<^~d??dN!C6?2>-iWN
zsSt5WCg_+_$TpwkeeY<f3QsPLyN4$|gyeUalpaS%A<rm at -@YCpEAQkS5wZ|2=WqM)
z at a}Cs+1%I{x3VM^xB*|pVgKyBd9<~+zqP%wAL9Y;ADlx-cSpxvvHH8(s$7Q}G$pjf
zDsa?)7Xx50OpIOp{uTBQ&bkNh+seR?)gMnO1EB}$X`x_<3Iv0Td))U$rj`kIY9<^9
zz%)D*TcRBt4#qWjxSU*u&C(|BsJw#u_)0*v01Jjy2EW>>Sj|v~jy;c*(ZfpKAG{iN
z-}K+N_v3Kfha<nMfN=}O$q~x?_Fad9xQKbEtIE$^x!4kO!#@hyzTbc2VxpC&NzpW;
z=lldrii^aK$Z)QMg>uM~asZ}4DdQ_emH<?Icg`$<C?Dh|o-dbG&O`9cq1^Hu-7JvT
zNI;@3bX>+1Z_>o(n17(Tookza-lv~*;V+x(yItJ-z5iV!Q*Yz>?jvk6K_WTAq9T at l
z=hMTKZcHiaQ at zGfB&>mqBB;cUzrhzw{4swsjh5NgvIzKg<^x*ggAoE}Kfc}FdHxKS
zmTzyY?=L_niQz<aBrrFqxI(>ogtU&_4T21jJC}5Q8PhKVl>$l+F6ru at erfJ*KRUp<
z20DXqznok?1U>R(K#%eDhIf#aKBnrH*FZf3T4faUP~L7{gklpKCimA6b;CAgD&dLb
zeTP;GtqXe$kfTOs>J{`*ItHiMq{8$#;?ABar)5|JpI{1WW|teH$;rDHGWIWAix5fJ
zE}XnnI0TTQ2=Dsw;N%1zEo9Gr-Sm6di1Lxtn%M<Y8zePmmgupB<V!VHkXxP*6Kr8+
zkyrPj9}CJvnqrhmTn#^sjtS=!Lp3<VS~5C>AuIUWIPVE}?R2cJS(?T4ETJ#G2g1kD
zeF#8P7n9exZlN<4)RrAL96f3<;}#KDegR!sWDVA?pRuH2jYqBb<ai=WXSlUD7YMTd
z4qKQ&emKepM%l|@j?w0{;Z&2`6j9+&SQjFKm_abH<0qrhS at U}Y;iBpHqYKg1v1Q5D
zA-}ZbJIW!3_Q8igVWog6bXV8%9ICOVUm*C)bGmtr-4M^$m=@$xqbHbE#St2B4-c_u
z(wx9Xs<9{t^%yI(<p62V(s at HS8}wWeho9o(RevZ4iFocsP<)|!iM9vpl!;2<d%(4K
z<5RKLR=+Z%p}mn)N$~w?35h@@7AY7*8LA2vih at CpWGt{OotRmOiNpz10&@hf0=C|H
z;Ui9oeZ`3=Vz?LRHhJS0Lx`rZimUZ}duwOA)X-0(L0ZE!^q)Ih#TujIW4O)YRxGzG
zuOeaqJhJonF<f|t+Pb=^W|vDqQwSVuIE$o`NM|S_I>sDFQ=KCi3l^&fQSjhRsHd4n
zscL2(r`ni#94lbvVWe^K85<+Yev?M#2ItoI-)-)08hnNQ&SWP549vH}?}};&G*Hnx
z7XD+*`JQ1Hm5!<iD?KSgM}SPAJG+mtd-?D$wpCEjHmXe}ik)o%Lq~;*f+`yr+rwz{
z>=bjAvH(#e&EuWj&8=^@n?G*ac9HlO;ui?L$CQI5j(8GXCXt;>mM7DmDsV4lP9Ro8
zBtWn-up)bfhG0;lDQpZvxGD)mH5bPlbXP66yZIOt-`?2V(=}I0ON+sqq#p6v*>0Xc
zqvq25o!=k9qQH00r-W~po78ULJ1^SeZ+OSo`*yU!#4so9LZf?*W+}#cPEoehe2;~Z
zn?BH#5GNxN7_KO}{*KmVcVqp at M)&c~^X*4n-d=3QT|v>UU}lgaPa&562F?XdaQf1=
zhgISnD}<2U?7UE616B9CE+U8|C3H`>yojNm?QFz6PEf--*HOp9CrSV`C$mG$arbjd
zMv{GPwwZri97EtC?E#DCkv;GxIABU0!C4kqtvX!vJyP4iQgaXMvZ;>y2W<?q37Ii$
zuf8=^6vSOc?BdTzv_wey1+(=HIs;i**s+q}QbSd=U0ea<a1Q8Kz9!-=hW4UkPVv$A
z&W-f0>onxB at oeQtyy(E#y*Pst5SHTQDmwTsTq<gaZ5eff`&AGj$c%eBz;=Rt+M^#+
zAF^;fJ6e9BFv~yXMGwM?XIP+Ic6cN9M6;nD%&mVrMV at Ru-P$)(7seV8RB3B53h{*Y
zDFII^#mGe`{bQ(FxDf&~ko_Tm9;g0f0Cl<vfh&qEu&FB4QM+A$lEE<<m_=d}VZhbU
z4lR`Zoku%&U9`l>=+)p*-IVHKb*Y5)qEd8lON6{UM=wH9Dq~pCPDGd~8f)TJX_6S~
zAXPzQkWrEKrY at 1~y$7n2d=X0u71Gh0W`QINTF_WB#>D8!aJjvse=_M``vf4&XP(GR
zXb{u8;fw|-I3oTRf}*U^!Qx_sGrUC}jJy*w4y#@M=DYR(v$g$g{#-_|@OWqAkJy at T
z_ORo)**x8Ow3(N&OKbiH at l_j}kDl)qDv8FG*AUI16Lcr^KTIQ#A*B2vc>q3oBveTs
zI)X$+Eji+cAVykUI-foa`yD~By^bE5KHF#0d(3?*u*H|beT-$&0F<LZ%wBd8a?E90
z=id_TW+up#zB_!X-886~PTsC{(iCGCjc=Q%*Tn}csxyQTI at g_~c4n?ZGrL&Zeh?o<
z*J- at J9vmuSIkdE=5XB(CjHfAebR<4htZXWa>DNX4sESiqzZyLo?t~FmM-{7-jkdP;
zHh1^ar at Ncao~&<hO0lZ_bg<1qr%m=;^|!byoy|W3#@2QU<I(2c#_ra`42A^3B<-o*
zl0slqLQ-)33E~Fh_RXddaSz#`I6{UGOl(52NXX_G7Gtu at u!!;`J8yT5?Iccg<9ebS
zNQxPkj-x2mpya>~o&Nr;PJB$^37iDDnhvKFm;+8W1Lg-Xnz_FS#Q<mF<jlgtT=Z6a
z{_^%(`QQQi@*Sd(Vd}y72KxOsg6zo%ZcH)wvC0 at X1s5En!zkyuu8_#GHNyJdEsISO
zZj6;;gX~7i3+aQwl5sEg^nqr`s0KdKu^YCOI(~@}KgF#$eKq5WODwdQU)=DCQS)9)
zZ3l!TopLfH!HjNq%wnNh^<Cb?!=>GvE~XO-i#`4i6^LQuo~&dXzxdOH66HgLK{O;#
zkG_#~(GrYrj2ys|6#{yq#<=0RJJH+&26Xs3FMM+7IG9vKf7VfCU<Fwnhn08^SvI$_
zjWYr?TVpR?((UX0Q(hZlA%6V3sGx2d<i%+<6fW4LfVG2G8)fPV*pvN$Pc$Y|NH$}n
zc3}^qbTf at K=6&;}i73R(_a}ngj}qX2M13L*+f?Yjzhrx1)#;7?<DWAya&1P}oKh-;
zHWfyul+!@Sm6M%fCW|p3dHLZkOTJ5_ at BF{@p)tEzmmC#StJDcLTIoo at KdpTNgmCl7
z?e+Nn_-}d7 at +Tje4X@Dakc(&OdR)G?j*$v^Z{sIP7`i2eWtq~rXNwWrf!WR^;#^{E
zUHbidKaU2~5YDL=Wb>c3;IzRyMbnly3V7>M_L)R`F#8v!+HhCPif5br$}NDdZNyPs
zFrukHECDzlzc)J+eJIF+zTFk%wp04C_yTdsuyKfc$FU_Qehsd}{de&H<8XrZ3f?d&
zR)PbU1>I&^RlqFiBY2asI_dYN!BL=wI%JXsmCq|{)o&&4G+&~PwUU!<CC-_bgYaF6
zZj)T>?r1!09o6boGcEL5I5Vt&AI5 at gYS;BWzlwpRak!NuCcYHJZzPJsjeJ`#o<)3G
zKrr02ZpAX0&zD9usUHL$l<~!^|BW;h<qYe>`W~L7(1{}0F*M$dKlD@$$K^&<C8({$
zTIkOAeRDk}GtOXUale#WID~}Syzl#TbdH+wg`Vol=A{fFWQmFZvqc!#8TB!&Rf_UI
zxK37?+=X)z6G2*f at D_m=vfG at P1tcFjE>Vo+KWgR1^cS%hb-&o#Pg|n#%Y8y{W6{>F
zJ#UR&2J(AcHhQo7NP}j!*?5{oFJ6-#NjyM?JiDIRbM<*smX8FIlUyw-r6b}Jyr+uA
z`2p4<h=Amw_uc9{U=<3fOOAhKX;p)aljz(#4}?7uQ;Rr+PHT%(E}MANP+Uo+$;4_>
zrJ!sUQp(s?_&3ov+fyfkkltXmYdB}9F>B2hB=-uiv4kU5MK)lw_3`D~Tv+od*=N|5
zb-Y!Dj4$j7cDUMW*`1qE!@1uqR#M6-GO#PB1f3Caej>Kj1@*q!Z!U0bKK>m>Fvuwo
z+ at 0Wp)@sZ!Z#(1lvuRy1bgfUxE0T4B$nt0tqTE7}KJ0UWI$%R;a5pU5bu2e^L?NWx
zPR<fQyfUs`@-p(Yh<Lp+mIO4r-06`L>`aB{4zke`DUG!*Un+qsptXAuqV{E+-7*ub
zTyo7+*WF<nRbm!CzW`^I%!RC%sbcPyovn&?+fS?5BdaL_OI^yzmDB{Gr>hp^_!v)A
zb7^{$c5Bl^a(0+=#6d^OnP$VnmQh46Di<fa6qg0Q;D><}>hz-p!h_au@`r$N2)=*F
z&}_-~!PPD6utE}GHf+trZB~v+-OzPNquScQ%}sD*r}wHq2ZfB;E4cM*V<i|)I`s^=
zpoYEW+Q+&p)zYNFh#s7uzt_VzH15z7?D at mElrDi(9Dx>q<?IP;f8Gx+J&2AwRG-T|
zh!$s)>bKaYvO_XI%d8L<HM4ShK{FT21 at lf(AG{d;iI-6?q#Z0+Wl0b1Py5$NVVzO=
zOcQ}sRy3*pTP1}PS=Oo0(5cNv!u- at P?zLjXQJM$8NFIYO)a)RZi){`jP`Pk9%xgq4
z6 at AaPqx=g|tx0nvTv#TEIw!n~1Lg-8kQPP80OARBanJ)pEIY60<7eu2*`Nm>D at sL%
zvM2$aF!c0>(GHpoL?Z1kT))<=?={%3odyHJXc9gUw=8xP5R+Lq4TN$3$YLtAiMK&4
z!uBsx{3G1D3ro-(^ib~*CY+ys^|{u%dE=Up5yg(dj6hkhMPE at Bq)G-i3ow|U*1!~N
zPwfl`Ibii75F#&(o~TYTr$h%%)y}pl<DgZh&9u6#Uz#bBegWH_)h at 6iKd5XbkxVh!
zxSm=m;HglBor$B^=+uE=A%1jXUXHV*UWJ^_an;(zki(E;y)4k`vo5Zlv566;8J84M
zieQCeI4d2M^v({oOJih{qF9`qE=#YmE{5>(FwzjeQ<ZWSJzBKv2uGPSZjBH0V!O2p
zIfWp^anUOTE`>Woq5~0zhOZ_{Gg5fKz$Y*bsHB)p)Chqod{H=E$r{#piA7{Y!K4F;
zNt9`uR>hKow-hBegE&t{xY<rH_rBc?UVPB>$77t|CQj~?IwwFTe7IlzbJOS7p8iHa
z3Vt6plBc%cylc*y7!pMYqHl$CdX^toj`SqiHaS4!^9jp*P at Z9KCU6cbmjv^PAdyW5
zljum+1$qqqQiJH~-~%{_Yvg6h#>el2@?!0V2m%oa*hO=)m`ihonxrXqA2 at PQG_nTa
z$kaPlNnekcwMns)K%8K~PE6Rn3=~L{Vy at dMCl{xn1495r6iT43hJQn`m^0ln8yrXx
z#dJ$a+8gwZpysa6G1h=)2YYrD6M)kv(w|g`D=s(@qAa%%YH)nub<u1h+UquAkzq2Z
zl;&^2a+D at Q#~pM}@sO0Wj7Ts7Gm(H|_c3nFF<`XBc-oP3obx2`1eLa`eRx80`szgq
z0(BR3uJ^u_lcqziES>>XR)(z#6|1el(SbQ_njZNz0CW{)Y=0XREk!3_cUn;m%QnDb
zeqfVfD3zk1N{!*LqRJ at gW^fDvc^qKNl$6S<P7e;pq<syiv{C7KZ8}IMb2`xKgX3*E
z&cO4MWBS4jj3}l>jC1xPHO$Sx#To^xE%%4&j5g=athnjXZicYPdUokvnZcEAsp=ih
zphcu3&ii%gMug{Eo5(tXZfl&hiK5O5hz`IAJ2TlIv|Rlan6bf3 at 4PHeUwc4N=0z3j
zwE|%{;L4x9$>ajDn`WJXOqL^p>I{-(uawf9eInzt&Job1shm#fOQU}27Ij>U*wcRd
z5VDtnA{Y{PCo?4Sval7^oR=f*D`b80Q at m`N(Y0)Obdceg^W<91=(=<VAoi;Rdb7fd
zmu}=E4=8cYh(t2Vy~n at VK(3|whZD;p at k$F=rfCyrt8IfyC)6*v+7!HZg&+_zM&Psy
z6s3a3lVdA-SGar0T(Cw7Dg><&*P5y6tX38ZKS{VzG%s at P7*it}*yZK+y%760sYC=)
z6N8 at e12Ho266dp<*zquPOKDR&Z=pN<#H6T`-doX>886CMCF|tKRDAmTD6Hi!Bv%Xy
z2n-gzP*D`@kd#;gU|*mm>i;76ZFSx+l;WjD1t~fclYFdk=``E1<wziirl9R=l1ppp
zX>f%c91~{c-hBix+mbGt2HuS&$~d{f at AJj*XdujB5X6-}$RPOi{@nWBTsCL8b2fuP
zBTdf_?%x;Dzql%DXNnylc|Buxqe9nXIL at Y-6s};Xk+_GH`qRvbfcpxmZS-wN4TqVE
zYU64cNQF97Eh_r0W}2B+G_^T0YKI3rEVcn(dR5wysA5j|_p_|Ru5@`6tX8N!m8H0V
zNv>e92bmGz+M3A(2$ykJvmMKJ-L<6De-yp-3YdC!sH!(5bT8G?>}t)W$eRy#V71Jo
z9 at cLw4)oipIJK#UH8bU(MZZg`gj4(e@$`Be#FK?ynlwHIaVT>2*BlXSOjGt`LhGZ@
zleft0wQH9dex;F-OTqC?D?5$!vAV8(Z2w+bQ(Rv5j_imIC7n^JiA6Bi7#U(cRA&x$
zUhM|$NuZ0x#{x0AXiw|;JewXz2kM3#+Ky~$dq!Ijh|mNaQQoOA;q3q9Y^2`m%xyf0
zb=+VL%7U)U-JnH{L!x+alNT*w=n+sdRE at IHta^sZ{?ao~r3H(fM;6HOeclLmKIYA$
z&i$x705Z#~{Bkfi*uo}>aqcQ}O*tRq6rw(HEM;qle^KzF&t+ytV1b;^<t71Z_a=Sm
z9ztTm?gd^Oba2wIcaV^Rfs!ud>OnFBnOAqxcSH#Aj<|>o1s{&CY3!G_a=_k>^han_
z&ehq0D3g^qMiWyf8t01QTg2AYkWtBJM!_`_R}l_k>VrwFn!8dQBu33flNN>JIfuCl
z7g>XYnE3Y<`*PBZ at V~PL8MY$KQPP5|N;DX3vNcBzVY_A;r*PbDN)onJje}wja$|?4
zdAiG)CVwwlNvx>BMkazNCY<^J(oGXz$wU)fu96EoEV|pPbS#F~1|yq|;p@>`W at wR=
zXvQu^#=rGFxg1>f``+~XdPb?%Xf#M=(lab+x<5sTpKK_t at 9{e0f-9wlP0@{#xKKVW
zlAWFHj;tgR>Ye9%%*|0AzSvL)%EJ7ym<UF#S+LQ{JKM?p{>WWnBD7Lx>MpJMtS@<R
zaj`3GD(Ot-+hbNhNk&JHj&7w>I;5^4N)0ma3F0`9-Zw`B<Uk5P*OQ;-w6^gVL%W>g
zZmFmU48cxrj!wLWq<Ag5qrj)sY5W;;Vz2%xI-Gc$Tq9X2B|$qJQs{+C10ME3WGHm9
zQt#nlVkXMCkEo0~ddh_>#pNoNU~MB%1UK#}rRhGCTxS|g5FXkxX^CPDk$nL^=$@v}
zk%WdliS-6*=s1XfDt<c#C?F*Q)A022Ks$vY5#@fhOxXd42~P%ZOq#ev>?$5|Sq(1o
zgHP{tbR-ceRx6FVGC^jt<O2+N1)%KUlc*9poMDhvBiBe03a at KsWj-u!o6ArZ at 0quO
zQZ46~ya;24_hJsC>I*%!RML-0!m`h=D6K8UL27m6iVGND#oO(tko64fjb(cNCGRkx
z0T4A19#-YXp7O9UYm^6tU*>kU=ad`aL#_d`LdF6dX>zk-aSpoKY>%a+(Q+eqEsYIX
z25J;kD#mr%j%ZTqk}(Iz at v2WakwjL(N-2@@aXfiEz`6vCn<4?q17GT7zLc~ti at q(_
z9d-iwFBVMNm|%S|NnYGIMHzsCfwBf<VA!N<xM<$6vU-PV63MrF_npZXR28ES<%(vJ
z+)X~`(#3FGf)9@)oRfT2t3=v;nL8 at Yjp~{zcpk|vF=df|7q=0pi9Q3&c;F3IiZ6O6
z5gfF1(X)mPFxfbp(7yaIoQqW%)DOcaB5kZddS~^fgjWRY2)SbDmn7rKUoctE!T3Rp
z&a~lkaO1&qoD)&w5~Jtfsxc4RedySgAZ8<{M3bVl`aWdXEO!PP5kzZChQqd3fjtQz
zI$_uDHj8 at jSaKCRlB0n8m;&6X)nI+ at rSa}rT3q&kW~F8+KO(~NHCc2w%HwF-TlObg
zfCTgxN&h8*BFv(U<pQB2vYSVY>AsSltc3{RaHd%;xEbi)v~s>UqH>0QfWwff=nN%<
z!(;*`vnkW5(@Ka!aE>yVgY$?ql7teL4pH{VbcKO9m(<!(E=<h8 at G5XuCZK3u1P4he
z<9Ow%+}MN?iM-dPL(Z?%UP47d8l}7@&S&bm7bL2;Z>a}}0$|;n8U^ZZKoZr at rxkVs
z#lxP`4(_s;8JJC^Xw=~dnC4ub8I)!<ECC8unwg<#9Tnl4cQ3+Cvun&svM~8`1g3mM
zn3N2UBRQmf-8gkK3Pg-0c{nq+iHg`s<AZ(;5Z8t-0Py=FNd>iqdr(fNB!pZ0RT9F5
zdDtCx6g+{{(VxcnCFXX{n1ixnJ&8~fs|Z at MP5+)igsp?!0TA$161oEpgazU)+#TS!
z6K(12^;uet`ZiC|!B`si<DeQ5%a3sHvR=5J)@&Mihm_On57+lL^VgD1Q0pQ;yp+xh
znLO3>K*((jMlhGjB;xpR#Dni at qDg{jk}d2zQ`?`?auqJMDOe^;KPCGL1%JdhlIP89
z%=TD-rqPSAcTq|3uMLjhHyewS^Y=K|fVP?bd6MKI2o_cLO;qR9sYpMXsoq6k{-Ah_
zVwyZpge)5iR)f~IOFq1U&m#<ox=PL(<6g0xE~`Vj>Jd+V=F1`>Kq1pbwO*iC%c^NZ
zzrth`wW>^l5Mc*d(sG~;^8~}miKKaiZB?~B!KpG&z@*CSx$A@&tNI~%T7=6{t!I+7
zhzy`Gv5`-P*>Su;`kMSBtW_Wz?sX<2`H^s`&$yjJB{_0xQl1uD6W3_1B8aAmPHV%<
zrt1n$C_qyUC+u{>-}Y4tA*>?#OSw<Ps+KDsyf8l~b4~$|)>CqVp!dnx0TSh~KvKNd
z1g*a|H7x<{-$K6<)P+raI^i0ESCC!AA+#<Pr%ZJ7u?@<jHm<SW!L}20d+|#8RNRae
ze3IqN&KV+++-#}Td&^P<fypY=jbeQ+ccil%KTwQa3OI8ih*5I%z5h3-ObIo6iJVVv
z5^8DH!AeD_yI>}{(j_C=jQpY*wlCj&csI;d+m at Y>%Qqd|F>}?H^)i{_(yn9g9YV3W
z7u{AfOY3%B!crouN$I{G&r0&G#67Y(M44oLoizjv*Q!05?exc;iON!XWOlE`j1$M0
z8!a=2CEBNo5I38I1#O81!ND1YLCyt85e at bgZTti=NusbzE=O)L{M;K4=(m=YT40yJ
zfXV;_TNV1bEbi1Dgg%6J1`8bZ at n~|6BZ<9nzRUxar|)^Yr`pG&0LxXA+{d?svwu~y
zV6v0Y;O1dR{jD%;LKGlIyBThdH|cRn0t7I&M(iH`C2Ok0K4NyausfA4>jP*RVA;N_
zxC3lY`IqdH7~mP2wp?cQS4+lbbG29?w;`}Ayk%QAOkF88n`GB34LCWoy`j2rBgHKx
zr%~LFOa)8Zmsu&U>rUWjsgm+vmEz_OiYj$O_G=-o5^M&EC44{2C|qWO%sveN+EXOs
zo{|94J3HD2%<@{xcuA2NhAS)=WX|!ISLFLSoI{alZkHVY>~WrTs((~jIMYDm4xQR4
z3t#xDR4Zo1Suj89JRyZ`$?2?-3v>eTh{;TwhFCBiryyoaUInp&{*HAYs9Gb6Sr>SC
z3tE6g5vUfUnh`gd`66*Xv$OoL!&iz>Fqg=r at d@U!%c+`i3LEu~=~<Q at OS<VxxS0#V
z<+^Mw{jhZvF?iEHxo6c+*+ifiS61g_9PKtbhrs%%m}U<;V?;HKwaqq);3*{MIO9gJ
zo at VPc)}NXmpw5hPYmhU;ooLRd2Lo`9ZlOuK4f(qIwPf;wX0480+?dM?ua6`JW$F~p
zPR>DzJ)?EpbYiEB%&d}!RlS_H8{5p+P?~mxdq3QIu)`Yo9?>q6DSTMU?l2;$h=?6)
z6*chv>CM>n`Cm!ioz$NtBev}_|5oX#KJpoF+z=?>@(`I4^`+B!u3aV}5380=_{D-Y
z{xxGKrrl2Qk$dqgUyl%oKgT^4i9xc*6w99^Ql(W|gfZOYAWe*fsSP=d%bb(Eo7K_D
z;=08}>bCX}Rj?{gbh`6?9Dkz|H&vF36U$1DL~vZDf9yimudvgRV2%5yDKf=#iWB)T
z;rw1 at xkGjf10Bi;Qkp}v_0RHhsIL(j at 0SikF9grzm2)pvkjQ+QIBw<7DjPB|wM73c
z7U3}`T13TeE?}rZ%mw%BeCQndu(nn9fO!k;tD~dzrlOe6TWD5C`!L*`+ET#H`w7x<
zt>A`P&2xEn at t0g(8aRT}0~>Um^8&hvyD2G9P0nt}#Xh12a)KQ6&)>r7&>S7exh0op
zi@!1u at g&K3K2%(avzlnkTUvya&De`2V-~B{b$Uc8uWby&vZ>Jx3xm<(LYR;J0w2Z@
zs&f_)s9VJIq5aylHD4UJ{8SF5Z<5J33t^j at hQP;qln-3Uu!We1mbWIJY#qRy5t224
zV|qF7cT66RL3KAJcZFw_&5pTnby3JBVKs$;E1XX)&NPPERW-U8F_MivbF?*+H3t#u
zQ<sEMpW}r-&oIT4k%hoIL?%Im6$gtNJ=}8T#sDb<C7dQgIw&dzLiAFI+8S~<g=Vr3
z03*8CajcPr at VvrsORA=9J;in6*apZqy&c#vqHkuXf%#}nOxYyxk=jTE<V{SFye)9F
z`p%IV0K{(m{mr{<r$2Z#Y!Ic4fC;!BbYJAw((2OMXN|uaU2ie>VgG<3sh}kprN;Zn
z8b{BCY`yD#jF(kW1uu{!Y^u?$WAJ-OVj3Rq6PXv at l!E$O-hrZFUAonBgzWT;R+8(z
zdQE=Gybl-w5ZKY&n{m4^!l$(fi(`IFF&|P6C+o+fqYIoUlI2;ijF)twOU*vcg|mvD
z4%b6GVcl4e%kd_A0XX~ugZ{~pO at fUS*>d;^c|k(};upd;B$Cx?aI<M15~TNjsoDG)
zEn@;n0F1oCo?}>Fbc at E_=q?yYaGd7PKfX9o?De{FrV2WM-Vs88QUmKlHq1t+XD5A}
zMAC+O=jY=A4h}I8jz^y+gUOQTSxgXYnpkGbd^q|V;n(J{R_^7|5-`8uFF*<_-U*$U
zVDkog7p&Y>%NK>h%TWxBfPMuig6N@?DZGXGtnXs_=g1gye$qX``Oy<V3fu*BJh?IG
znweE-Oi(%MANMX!g8sVE;2^YK+{^WaA8`Gn&4<swZ8X;X2`(Q&zFoP(x8(-k+6BHY
zq~9UJHi~N at m6u;3CN65&H6E-#Y<GKS-x!4jVwZFP0-7%juFtjTr4|p_4^9yt+B-e#
zVp4(MPEI7kO1(-MhRLc~L)u(4T}3Zu&aww<#-<Q-`eain6hNJ&Wo3QvYq|Xz9Z^BV
z)IwngXGWYip6~8%Ztr*9vQ%8-9dS$3tkywSDV%g|g=^icu#1_-T^oMw*eBo`f-HSv
z`^c8apUz6fo$Wo`a=5j<UnO5bmX<t)L}iL(x7hlkZBjlj9ZCE$!{vk!VU)-N#I0>^
zeY;)nvJAXmp~`K2lx`#om+kay{n*`nyopJ$v5Axa1x?f==(|#B&lin`WLn3g5vhO%
zCuSlLtI&qT$sdjo@!dbVTP*ToXWNANHot7ZQ?mYOv-x|ox4GYJKY#KBU$=Lf^^N^4
z6#IL#y9q|#+Svcc%Tj9u_52ya>o+e4ssxKCqM<o5GV(=dH0&NB!0^0}xr;Se9^eST
zVeg1f0*%d%EV~}|rR)0A&H7TLitkA#0`u}E?ne%W8n>{xO?fR>rhc~iQiIRbF2zr*
zb~sK(Nj3X|Zu<`T0FF88hSRaI=_9SEbEvRBSYXn%0zjZ;VytVuv=HWXzY~j5FpRO+
z)E4F6d`{Z8EvP8dRS9k(#Hd`Hq4)j7m2QjjZ#ybx1hseG>IwnyJKPP{$Mo6S)N##u
z3!HrM>f}9lt>5(2NofP$%*u9x<FuHg2$+OkRGLaAg_XSp%=#nEMmXN$pbf5Fz{$5I
z@<Ry(!w5CyC@*5hcIRk}h~<M3CMhkPgTAC)Ko}tnN(AneV04C~4(v`CE5ZE-b;5ym
zi12Txo!1X5X9V16U>Nd!PZ<z11rVyfy#r at mhPeaLOyzV~f#d1(j$ANx-mz6-_#7rC
zl96rgo#y$7Vr?tLr_L85!Bf;oQGorA6jpr>vz{I!sCNMiOgs9TZ#8XH1R at 8jvJ$gt
z`;o?tNWD3A>dgX?kn03t%JD8!ju$wM?awsmY@#lB<gNI`>XgkEtl5cWMYYOmBOqI5
z1kq8C>SZ;5t*QTB!UlvQpjcf=t&bWF%?_}4MXw60 at Owey4~w)Oo(T&&E-J-qgazAq
zfn4yZ+$z1G5Yr3=At?9V8XGU{m%xL=n+_x}TXL+*<exIpTlvFgloXIHdWLnwvP1F8
zT9(K;S(1^l02%d_ta#R2mZ;2uxQK;C%~x5RSM#wSs$|4TLxBsxnD^Y6h$~M$Wl(UQ
zfR)SkL`<>NUYN1-;kHOgU?v?Xg^Bpydn2d>irlKEt}j=gr*ZFC*S8Z=NwzX_Dz8*A
znAQKtCi#gGNtlv2S&b&<F?HJM6)WrF*e!1y20J+*M!wLrEi)|?DfhBQ6af^P7h(-O
zUVr|i?%*J8bU3|#walnF74s(vT}yF%m|!NY+S<y>?ZwrV#nn4hR*^G|PW`#jc&>rg
zdoD41dfX_`vFYl?<pLM4V(FHgteb5-_i4&q3$@wO*hk at g!ls#sC<^!Alp~0j70-Ix
zTCj0lL{G*&oPk~4L8*A{tl1mxZkE at d5))2$Qwln&69$7|o#s0KWW36aO7)ViQx&_y
zyR}_RzT{`d{Ru7X|1FVV<Gc0U;=<&sp}h~IKrG`d;QVR)WacF&-n7%~j~T)cImM8&
zc)kKRAyTP&(o9X*!2lokPvJpp+%Bo#;j?|`-{2lnaKk0<U~W|$W5|B+)S$>YHIa@)
zPN<Lx6cIC*ll?BKn76&r+W^BH9kvfDzU_^Na1-3MZatWG6J9gYV83oC8=OOAdUaE{
zp(w~kldvvfFF2=vyk}HV_S@;^c0y~MVzueAT8%szb}LnOAX-V*ii!0z7Zk<^O<j{Q
z)hgH_&1L^xmp&pSY7*Vw4{$!Dt at wF;twt$u12a$EFdO<~oGLXs87|4>?yXO^F6UCQ
zU>7+7aBMxO`C%MFtvFI&VJg6z#UrC&H*Ib$iVUE7AmorBgBm1rn#2wUlg{~_f?_3^
zgNg3hau=Pjdi$V((ugm=%)k+7tE^!GkQME^z?7Ax)h|GxBjkwD%%nkx1B-_rRQ*u`
zC4Qu%{>P((AD7JUB1u>kRY-A-VL3x!il#I>8yvoo7e@#A!HuLz*4MBSSH1tPe~8!!
zfgmwN47IT^+i)?>F>~7d(Sh1#FIHYws|4#y>bO_K at xLz+Ed!;ee8+Iu6Mml}L^$HW
zigBpZrHF-ng#o{F<pE#P;jhw5I%x at urGr<b;TX*VLf&yw%5zzZvw$E-cB6?}U at x$Z
zQj<8A6w><iNfnXU!C$Fdo_9&$8c5`a(7`X=UK7HeI*zvR3`|r-Vp=C-rOvj<zvVai
z)A))1<y<xtK0XxhW)h0`cyNN7KQQBcfU3qh_|21mISQsn#v~rli%y}uPPD=czb*#r
zVbHeWv)1-Z8G7K5B9W?;c`^-naQeZ-jJLLv7uVME=V8Nkc*9QlycMkt21gi7zkJ0h
zO(drbTANAAYE#L>Da|FJ_pQw(Wwp8F;gsg0fce(OqLSKF^k_;$VSIUOJ7Ga>CVVob
zl{lzb_OY!;I(e1K=5X4 at MHPwo*%UNFj02y<Waf^Cm2x74Z$nJnG8fE{S{|-eRBDwJ
zmD*d63TJ9a&{Ej7!YaL)4kw7Sj==;kJd{8lLcQC64ds{$_po>I>h(FkLl-+591T10
zz9D}&JZ+3Im6+m5|8%ejKg?(t1rbBuW1sq*qW?8&W1|_#)6d2u+--mIJ{p9O2ojlY
zTuO}b&m1H3*cw2rry4x&yhGRzD*?y-^NTT5Lam at B+=69nfjK!Q{-<Y1g@}0Ezx5Zc
z&AG$JX0yS0Dz7&i=;Rn_J|_+H;t*9P4Ss!odP40RNilJtSbKKe{4xGa4gP-n8gx85
zl8yIf4k at n9d1tPS_m*)2diVf4{JiG#u*Xz7{db^ob8yldzA^rb>n8de$+2)t?Rx|W
zA?)YL=Egqm%vowc*$KAW{D~)=jfTIpciQM`3&LPrFM+$EAY3uM_ogz(nIt$0!K8ie
z9U}C5f@`}DP6mhOr6xhPE>pcg0CZQneFqYDEogDK>mJfCTA34NV270p?zc~N9<D#x
zd(q+W!KIGL)_JLJdJ~3ogB!bnLdq>Npu`Wk%JU1Q0Du?Fa8m`vC+~;ny?3%vEDc^9
zpv|PY6{^D5xS<>#5)WoofB{ZDgfPWDWbh7-&=~4>?vXQ?>R>XtKPUHNYhTdR+ynk5
z12Uu2pm&0M;Kmb!nc2K1N`|{kx2uz&G#ITD;<0djJRJ~DLWEMDXlF!I+VLys%W1-^
zHH;s@^D-ja`>&9(8Ii@~bC!}Tol*$4l!<cZeCK^B;+)Wa-az0xn4x!);c6&vk>I4!
zDohv<O#QTvSK at maEiezedLJ$)%rBZ%(z~wUe1F9Y*5KT|_UAsbc?%wXu9$lYG?cvq
zt5}EW9_}}M(D at 277_{js|6cpbl)AU9Z?#L9C2He??_T#|)ua220uo8!ig4<DI+%3j
zsdOV-FAXJ&92(3{Z&9FGbu0LGDIQ654S3 at 6!$E(I)dU#z$K%mB!pKVW!DN%~7A}R;
zi_W<Bwi71Rk5Ci01oBptR<a4s)*QZuFyTO^iW9RRGw&`3H%@>|iG;x(^KaV+A|nz6
zDw7}pyePBP=Sglj28aFb0S;-rvCqT51a~lQmP_ at eQVdq{m&LiuGfY?S#Fg>of*B*l
z{#0>2$Lje{z;b4)Iw7ol<5(CQOLW_XV^#egpO`UzO7)Lc>&T0^qFt0{s2Nur3~kl+
z=I}NP*O`}$FI{!G(TR<7l{F|})^JfRRqa|#ME&uAlBy6drgnVh#@-%ahi at t7ww5}+
zDf7*==m!*j0!d)h<>5QbNSxg3pHI50=BRrBz at Gkab@{Hdwf$)G&mF%6$iqKw{v~~c
z_~oRK-XG_n1p=2huCyS<Oh*>4`^~LDDXCRlo4GgNZsU|eifOTrIDN5`7A*Ap+3wcU
z_1%mdK2vZ)74P#;fg at S$pPpy9J>T2(agPBF$x9V78fpj`-JSC7Wdp#oKsBRtzxgs4
z9AE at p1uIPwK7|zvN4=2MA4?{@?r*s?G%z3zq0S6>Fd0ki>5}6U-~MpawZ$zv=-)D@
z;-<xf)`;j&A2Fvx_H1i!e`|YVKYRZC*^{jeoK8qze7Ey_H+=?n+1&j<>rb-h8CFlW
z{+L1JS-1pwo<K;S<&$i8^V`io2N}<c1L+AFPA$+9Nom(+7(r-kdZHEs2>tEn!3k90
zc(coo8Vkt2U_54QOjR{E(k#&Vc6S}eoRYrpZvLMg5XqG+_R2MsbP5fHoe~qv=UFm(
zIL=8FE}{_xd6foWs9ki at A9eySe$k`Ol06)!)oN)|UTg5m+&p~@s3k+7R0+B$7<-rx
zu<WH8odtl6CZHNxlq9NqyW0A8t at L(z+10)&?qwi?R_p;2-<zl*Uo<ow3bjI$6oCY8
z4AF~ZlbuSx9-a+B+WSr%dH6stCxiUS4$-RN^x-FI*;)IUH;YYy?wUcaG$KZ?iZmDk
z1k%!#?&S60_#Ag|D`N!QAf=2)$Dpu+S=j&CU(v+JtMbgv7(QAn-a>p+c0Qwm#VEA_
zlT2OX-7=2WDHpO4*MYN($!mu{Oi1z#TpOCHN_}ccuUOr7_{A;9Y)Pe<<BAhd at lZM@
zXz<wY)MnH96EG=3D<}RWw}=09?-n at jr{Z;ZzBBVbNpH+xzL at _>$dL5JZ$GgSXTaG?
zYdGWeOEgR at rlt^b9w5PhSsV*?21{Bt<@cOb`IMi61;fYMOf`@>HzHZd2J?z0UkYTF
zLV?<z&3P8EA28O_9xg$hT)+`5u|G1vjJ%xSG*SQP(~LN*O5y3)5IelVi8!mIZ)-wC
zIW1(V9TkM7d~rJ555h2$VnUeo>TQcS{zjlF8!-S!gI9xdL|=&e$cA at XxKWwc{dcYJ
zk55Lu^C_)+5^#k;^RdP8J+`1)Ah0Wl77}O1{%#jJEqmkldswj!UvCZ9$KwUK43eCX
zNaz+ERKomkS2(8@;G*7gx{4I`eT+uWs-M3~AAQ=rYxOP|<7#SwDSa%>f6HX^mYG{8
z8%x8aw`Cy*>LJup)+}KBPB(FA_wt$jRHd*jVEhO*A;4nuaa-!Sl0<xgqo?^Ao}#0{
z&(;BLeBrv9iZ|LUti~OEmpB*XJsb4u7k}ALs{qU*M$3Y)D0A{)o|06^O0^DpK(e|>
zXU}F6{$+~9y)lwWDNz at UQ86EsQ$CbnX`iq_o!yF(zIEi3uGq&ac|60_%|~06$2O!S
z at vhT7>`i;g88A0Ksmj_e7D70$bz;xTJIs4kaDc^LtXNyILpFWp2RvG7rvmw^gDm2L
z>BPzdn6WcAcI_Q>r|)r=8H+6zJHMKMm%}pVo;pU)2FrC=;xOAMw&dd9fG<dp#64an
z##QT;XLM<>Lk#h~Mc9{W$E-3#?O6R#ho?oMt?kH0v=ySitx9C;OpBQy=N=Ukwv at 0z
zUWm8^Bg~&Ok8&$^s$*6fO#Gc_u_`>FN5j`@a{<7XDb6#L(#S5{F(&C}Pv1+#AG|!L
z*l$|7vA9~Rw}2F?koZmi_!z1CG;2PT^q^7vVmi1Q0Mqc=3UtUXYlV=+V1#^5wbucR
zDv0vQP?4p{#7=ef+z#V7;}eg3+c1=8=5!9QE_=l6jVArBWOS%Vy2$=29i=43S6Mo&
z{wTU;4RAt^Hd;tg&%$j*r>{4v0JdTkHPxbME<@8qOvB}s$WX^d=k8-MiD;$)9$$<0
z4e*Jli{!AMR))xwu(EVWIog|ls=wLuq6PPYMI+$r*3l_W$Ef|tG>i1d>ZA&_*UPs)
zGX)J93R#Xw1qj68cHidw;6(TK)}Qb1bg^5oyZID}&M?$fxwx_O<Ox$7;h(MT)$X^O
z+nc-VPr4gha8t_J*Gm#F(5mH1QY*7!3Nr+!5AQ(R;F|exdD?PhBR#3gS|wXY5712z
zKXKyDx7tob4iM)gY3+qqG%w$gnHR-uxNokS(d+W$B-38qZ!XS{7r%(zd3GX2bAb+b
ztkmH&HcUtbG}JDAvDlmOtBmT*#7H#+UbsyYiz!Lrq*FH$)A@|=&y7c;^SL62qd8L&
zdckRL{094gO!ISc_PWO~Jh<MJD%IM^A~bm|p^C_g8bFA59*fmE9=Y=h8x=NQjg)`5
zwaqQvA^=TalCZ7f9!$_*jd5p?ZV|_nR|pJ&x&KB^<%^=rKqp&OQauF+-wqL`hG|<Q
z2w;hK)-HHF2<1IE5<_<b37<5m6bI>e<#8Pl4%v<2C`CN1xh`^H1jNQ~2iR9;PAP06
zBZ?P^qfUA3>)a>)wG+<BZV3yHx-)?)3wQF|<a{*lz3R_t;$XUyv76aDsiBl6ppvs?
zg*zzOu1t0YV5M%Xc6N}B632p&Cv6N`wilBf3rh@<*Ir;_rJ&iW+-iw4#ZCGz=4ka>
z*`asUKUJ4%S<@#~B17NMLw!Y}+;-1SE+#FGaaRAd?iM$jUT!SQIF_Fp%v&V9pS4Ur
zZ7;4ci#eyS#xBYZx0`ZBz9uCA4HJry-aX{o7P}2X{MBILnnqnR%#k}^4saVJ%S<Xb
zdd%>KNzCKhv<F2Tv{lC`TO*IOXEy9Z`_ at vk<&|ELjV?+8Z_PRf*(9cFHH?9T2|qHU
zi}BfEDSj6*2wKW2=2rrQ(I58D&IdR;ELJer$wL0g5E>xi{woA?QY@>~s&><~EI|}D
z7$2!9Pv0LMELjVFe+R$0D1UP at f*^lAnv^YZiv!wUV5lkbq^rOUq3!R~=awQf4OjA0
zs0sd-6v9<&4am`f&T!cIrgJnpMW*s4I2Jn1)+4C%TaULkA7%HkS;CmV?np-R-2Jqd
z!W|FZF}~Z3BhRo%!g(IVkQMWF at 9YdQ;jIMAE`xKem at ni|xf$1oQb1%oT{1EbJX>m#
z46DVMLgA<s3&h*bZHt=4GVq>5Nv{VomRB_krR+Q5+o|pWFf*o}3P!UddBa4NgL3d}
zx!5LXpw*E86q2_P_heBF|8hvKwnn%y43`M^P*;eS1;Qc$cSICf)4u7)S}hbV5 at jmg
z<AJX_Co6i33x?1j61SeVv7CBqO at 8*W+H2{P&zUyBwpPgxZr)wSt)GC4l`$6yT-$lI
zwd(`M5)~`KR#s9WZtw|mj8~kAEUV=hGP%3;aC2%wrs%8_UV({EWojvtDtH>Oz3+Cu
zpAKtx=h at UkCL!>&1~HMgB_MQK!S(I+Cx7|tbdpIqMEKU>aUA~5uROo9wY|5wJDtOJ
zH^J5$|NBWg`$i#I<Ri!f1TQ~F&iZy%Y!!l4F;5KnsVe}mdN0 at EnM9l(PyPQ%mrNeS
z_VH;UOLFE1dlc#FT6SRudjTB7HfL+4brt>brdr;Ou#|?lwU=R-Twa1GRyB01nd?2?
zbS%MZ36~SUN&YY#8y@#@FoA|EZf|AC-q%G1h<Z7jN<S3UW#!wN$m(xt(c%of+vr at L
z?b3D-6;kjitE<DD0*ba2+ccnn1FncwVri(-6Z(38r45T#hEyzm?u`dMI20?q6!aZ3
zsw&}H8&bpSXoM5#rDl}zBkQZe*Wp&a+zcn)nYw!gc8eaR2z&!S9>A at z_5-p){kU|!
z;gzyYhu#6$!~aosc>@ZK_HXFH7z`!V+Tl5_7zjM?;`OkUEKUpnfn%6(^d#*KN$S8E
zs9D|6IK8{D!Zhaq<|VvO{rF&rooxUn*S--W_`&3Wd~z7q7Ukb`Qql<;1c<e=zHzS^
za93pif4NCH1G_SN<vDVyRpteTK*T3}ME<a}Cn{4#n8X{7VQPGV4Ye)ojbeKJNJeA^
zi66iD at jrg7mDk-SVMpPoi{asUmo<f at P|>*BjGM`Jq$$FSc*8_~X*YaiV7fc!o#>Y3
z^_ng#<svXLw^~{3LpCxa^do<E1$|Q{k$q7QBQVp^_cP at 3v!lX?t*TC;POjS6p};AM
zPd-_WkIzIji^j^+tTbTZQqUp~;>Ed8iFH9LJ>;9{5pozGFRlM%3F?I8X0XW_5D{&2
z3_w02>&tihPoKouOK|K4XGiWLI4Ry)y2iT%k8$Cv_qI90g>hj*pQzE48WzhWwFf&E
zcyvtq1s2v8U2AFn8`Bdc4v13V0G6n7*PDkIgOel5`i;H4W_*EkKHy8e<&yD~wFDU$
zcb~ZfXi%+_EHs+KM03 at YOK7ej<Q|%-klcHK#-zPM0uPI}Et2Hw(0a^3j*lJQ1NM1i
zGI at kMb{61u2dB6_*0jtnNV1?gUWhN;hZcW)738jc@{7nn89FwDHE_x2b73t>AM=Yz
zkswT<cezm9Mf#Z?e%A<VGHMD8rd9C!E1T~nZk96QA1tZtFE1lTsWOSBhx9d03=?yS
zCHCYpOwuxFIB?X*mWd8hapYc|j1I74jrrzN6=}M2jwZ6x4vz<~F6>3it)s2IYaeaH
z5jvoz?fJvwSLP`1{NZH6yhOt7I?`q=s8RJKO$bWA=<NOJ8It#Qj!(}wBsa)Q+<Y$w
zcbfYTkTrR963+V&Dh9F0fl*!|xZ9Bj2~aep48a*O at QI8%kb!U;fDu>Bsm?F_VNP-=
zKbL7WJQaeLp`Kz7a`B{pe2$bhZ0S0{#r at tw*f?Y*_%?s>d^kXE;}~blsh+}LeKM6{
zb-2RRUYuN?Hdy6w6#i&I@<=`1+TMEl{AqV%=jl`41!qa`Y}xD0w^WaV1VDP9@^ECN
zpAeN?%8wUnAybBxdBPyAQkVo`6}i8;+Fmj<1dG<ZTiZzHt%-XC4`pXoV at gZSXVyiC
z5g4SH!6(m_lhuPU|Ei1I$CzwjVeXrSg&$T{Z{xqUYk!xo`e*IhwO?-D_{TSMHz<^l
z=mjz}!T>y=lmc#+1EK<kuek|~g9sV|jZhOiN3^VTH<nxMY})|SVnQaF$^f5_uxbAN
z?iOMU_rKfP`}9{F`F2DuJ at WhLRB_}jc?*=IHe)AaJD~-7NN6`h2gi4t)4_0X3SrH-
z{?TyhWPo(h2ubQ6ef`NNUqATdcmMwU-$H at 2*Jn at PuOERS7T1<mSC?)s_7R#on7m#F
zQ;gvj>Q9yjSi67jz8!O`eoSUrLaj>>Xa%1;w{HE8fALBG-dVkK=Xa|spRe7yy}G)3
z`{wUf*49>6Z~m at XxkMXRE_%T<Z%y+%#%i_!nfAV|?!WN6dtYNLVPP~s4^HpO&9TTW
zjxY at ze8F-2`?s3&3I0KDsQb6>Qu|gd6RKJB4erOCFs5gI3rR4GJkqSLtle5^aF@{M
ziz~MlS5}+V)w?TecW>SKYjgPi05_7KpEmQN=Xt=(pZvc0cKf+PgoHvQAuqIrFJ<fD
z(`J3^&xm0>kmiDybY7y~ACVB+9lp`CJ3dGj^7~};wm+t;Q9W-HIn9muB3}p`&Xo#w
z)dhpJeT`2)nSV9B=xRUDN8R4wo%ul&&k#-7J?))gomO3AK^7vcg>!?+Xz`0LZhyJ>
zVs-J$mvhbH;)7;xYi}ofhQ$Mi(b=BlZahD`ySyy9I}e6SxG?nO2=i`maLOp1<)hId
zGt0eM?hm`q_m+EIeQ>}DJ6Wb<^L%`~wv0a#>eOF?;vmR$944zBDz_br#HvX>;|r|C
z1=g|xH{${~vjVr`0=KdPx8nl0vjTVG0(Y_kpT`A0&kB4I7x*G8 at MT=!OB8U!b})E#
z+YZ*lr;GiI!~O4(F19dGZ*ZgX<n<Cl+zxt67iWh{5SgdF;o;fYvY6PoeqfpZZS9Y7
zevaHS?mpVv at Z-X!3?{av0Fxcrm;rB{fj=hT`7w4;&Tv_=VHa`#IVs*8A;0g@=<TpM
z7`<am`p_^ki>;qv0;~_;i}P?7hsgxSaleN&y_)2+gMKdlbQWRrpU*7e-i!ucERLg>
zf3!)UI&UW3!|v at nE31pEUw&c6=8t<De6qwRiz^n)`CzhmXKh8{>~HPK4|Q^P<QRdz
zdA|R6 at r%wUR6LDs`@Jqfm|~*~sF+qB$edh2E`qm+>!T|c8Fvri;t{z4qn?C18sKE!
z7;$FiXdlTzDPx5gyfFq0vT(tE at U{aZkqH4V^dTcNBk<*dxZ-!ll0?J6$IRzC+aEhK
z+o;*l*4{xL;bY$8hp7YWQO;3Gd>4{I%P=bTMjv%4fX&m3^Vg`<9K0PI^vCGb!=L`&
z{|70Wzt^Al9{w~M50~`UH-q!Z(#6Hnr2hcjOdKy>{29Ffw&k!Z$#47TupK~x;1|%P
zEhm%9+Uhe%Q)6;Kif*_Zs7S~>oSY!_i+U2k3$HFtnXVB5x1^@AJxW91uSA)*P`bJV
zKx_j=<S^EA5wc7ygna;Wb(WWHEt_3oUe<`NeGDiIpJM0JVCZ1uIE9STHETnmLz~Pj
zjgz8tu*(L>LtVwUS)j#<*Kq73X0p<I4M+_!Mie&y6QvZ(uaQnh(<euR#PrD)yg^+Y
zs6n9s|9v9Dl~RbxHMcN3aNEc+>^96*#g8VxERS+`YX2Q`PDT{>EX2$rGjND=5pa40
z9Eg6;QvC%+{T$92XaynvUNhOwj2{=nm3Oyw;4a(mfW|s*SL%KS<tkLjfaJtjKRT*1
zV$*v?wp-}G19xM86h}uSF*fe<Icg5x(;Ep<07jti+Ag-@*_PRh)-%be9LB at b490%T
zboQt$bwh?PvwB#<ObOgIUE=>~%x?z9%OvD0+`Oxt5y&G3*-vnyNYXQX6=EzMY-JmD
zvy+p9QQ#m3KNSs+#Rj9R&C;dLFiJs)vdQ3p`_owCh4zyDyAQFcvDPLhKY(l9VD1#9
zw|aN1;|CfDZU8WDKPz(CuDE;hwIOsw{M*6suVfC+V*jhM(dBj`&i|ede(qn+2|%O2
zZvU^YtghZl?EjmqH}Cx0{{Job<ZAYRv!|CG=rt6oA3tUY0{j6JdTJZbS4N%Q7 at fVx
zsm9mmbO)?8yCa-`ZT at rgdWZ`%ntM3Tc+fjv`-aQIWN9+G7#}k9<yC)a*gvQG3HP^H
z#c$ufT^fxKU_n5X!9R6z$`Z?8pWHv|kIqi|O9ql@^^t5ZNPrA{2+&g8?jetJGAcsT
za at Z?X&X{O#!&wErpP^LKw}2IkNQj6#<V2X`-5 at x)Vh%OAf;e*qRn4E*l&e~vefP|Q
zl-mzv`MTaL$ePAGUM8Y~T(hRfJ|rpk9G>wU`&iu^<Nk?Ub<#)jeaLkX4amUSu^pP&
z%CTRjK6mMy`SO-?&a8e;=gjRd at 2-4VbIzz1j`*izY(jf8i1A0bn1JC=$oq;LSq_06
z)@QXi&{w(iL%i9 at qc@m5ryEf=a~qC#^7e at +W8CU3y?w-JL{nE*G%S|dMSSrn(U!6n
zgFv#T)WK+U(g(J*j6pv=+2`w(yTV%;v8)47Vg&6;f7VaXZEQT--DT63JN{yOj1tUQ
z;0d8!%^qtX at fhm1^V&zz0ztFU%4*DHF_zkf>7b9GrjIp9zwR(NRHqIC*zbb|VH&jw
z|8msU*xA}d&>YEI!`<HSRex)Eh(otnS(AAIui&rC?TX_R;yRAB at e@F+`?vmh1oiP2
zHmsMIiDzfU*~NU1gRe{>efx9w{>$k7A!aPzvnF`mD70qo*f~<6(LCWFQcpE_n6GTI
zeHe}W2=}39m^6|gKqZ{x$A9f%h1ZW#Ho<wyFsoq3U=)V=&TTi0>(MZpVg3^F3x*B;
z8omFg46|8cE;Y>R>Q5;4uRY2|l&1``TXYJ8{3Yh99mQTWie{8o*Vf!H|1B!;PZ?&T
zD_m}vCFx_^;#Uzmu}VU*rB8mP^$%_n1Z)t`DFeF4a>2?cLQyN<Z*F3|@G&zJX<?1q
z1agx*d=$W6N(o!!2b)w`z-;WYHu5{&48i;`4B>3=JVYs!xdRd4ntJ}(%F6l*gfRiA
zyymx>z=yMyBAuy$JpNKwYVkC8T!5`c?=Q1tpzCJE*w~$-Whr$px9$%S75)yJLWdG#
zaYU8%Ut5k85T3$x-}T=Wm4bC$cJ4P^FDy^R3&vwx<a6?i;mpU8Fj+sL5kTIo3Z%!j
z2&@<<l8z%NqM(rDsG``03OWjlP)o5z3TjH7Z!g1kL at 3l$uFStmWdlm-sT12ymdjwJ
z#J0eMtW)NM8~kWmeEs0J at K^l1jgLzK at 29E9|KRfQ{*r8EUo!B=pxW;LyK{5x_UDQJ
zZ{-#q{X72W;|_HZ+7<nO$6yJV7`TK12N0~|&n|LyPhA3oV&;L<>E at TWjnnD&;_B^Y
z<<8yJFYd0b)|^fNYOe4#F|2yVtwA2#34(4k0~!=z`18aYsoo%8OG6+8Q|{vTkOzhC
zydhjfJY_dJz=QtD(G42|ge|7t334%EubpX<#@K5 at J;Kw^;p+=r2CRA1;K3Z6a;N9(
zMw2HrKT6Qik2q?$-~1?mf5hryzkSxckm at f1Zut{Ee?d`A8X0w5tWmavUgKbub#Bq|
zc;07QxP(Hx;5Lg`)JC6<N9V{tY?I5O5rQI|dClB;zu{#tcK7HyTy*^8ZK3z at Zra%B
znc$l$=<aMy$i1O<7#$unbVMq4&G at 4^-drQ~Q`*tl7diTL=;4BOl(e2bLxmYy$8D>u
zj&_g1C;dv(#wSTnF}==++d>#Nw&X^`%k(s;)=pNFEY!dbM}2gB%;-6}bE!xqQx)l}
zadj6_C4Vyv4W}fIbVIR^3H=_N*gq>YAmzK};;)-)pWpeSLK5^}-1^GBdM>g6&m5R+
z<s$3FbxvHQPGf3pp)qGJdDk4CHPO^Ehh>yQ>IAiB8c!47A{z;uvjoVg%s)EIY>68F
zBit>{?EuD9zK0;9m^mL`93mm3foA?R-<YFN;xML!xO=yYGj66hjZc0sbweL|Te&nM
zNUAIDR)o8 at 7UtzJlp%_?6`W0A>aN8HAv#jtn0q#C!iyJ&cHYY(R;5mXjkj??E9iJ?
zc`MGitBMjn5RXY8GqmkoPP at r)7427&sbF6FZ!rq{PNM4J$D9fX6P$Ud54lb8{4D70
z%!Ep-X5F`V7~t8sIsj_DmpXESNCIs1k<g$LQ-}pp^#;~V?5<&*8jnt~%ASsXW<0IY
z7W}+%96WQ^j{0agph?d9gULRmb5JDR`I%fC9zqhEwiDX8p37 at b7~upRblZSEo5TU<
z$FyTuLl6b8Dh2u8P%$V9UcmAZybIPZt<SwlX0&vY=JFInI)P-?Seji78AW_mO4$x3
zgfdhxunjRB4t4p!%{oMGOUS17S{B*klb%h$2?h%Yp{zGL_zBvMQ2|{AY)4{CRS`5R
zm=?q{oq&EBzC1zav4g1^0M<w at t;}gCYbCur{6HjI$z&HQluLT$il+Q&^})M$T}!5H
z!mEZ6=Pf$A;*?|<^)V#9g=@`}O?lUhlj|9R28sDKSD}rKlgc%Y);azG@?SMrM>k7i
zqiHoY;qP=;7YQq4ln^r(<<iJ6+7wFL9-1W);SSjD<&P>qTYWrkv$U$Yx#2oy=ci``
zZXnar!ZFFVRbO_zZOO+F8m*-VlU*oyjBRKwHcyo!G6gJtR%hs%IL;h3&etwFXhBR0
zEwK!h$I>g#s?zfjGKLnOBcNmrj at RIgom-YiOv-h(X|+T{_JkdP^oDjDC-f%f?mwsr
z6xsBYIi(sua69g+^Vdc{uTH=FoPI`aG89c`VYJBDaYQC!q%iu_)-8;23Wn@$I&Lf!
zKCz!*8R8?h>41kU at xf42_UL5X;LrD3<oGus5_PkTjZ7IgcY<Y>AT%+jkki;Dj?1!|
zrG6Gr5LP at E#!EpUGJJf{VZbgMOHpw`Bp|#J9cs$?dqj(?D(!fJ39B5-rP!Hq?X0|G
z_5jQ9DU71DW}|)~P^PVbx8bodYL4$6&j)=CNNy&_gZ#o~gZ&inAyl>NIi{v=($(5x
z^D*Qv)=E`b`$t{!kCQ8jtjMIZUpNfX8KjhjOqX*-`@<JaS+fv?ZBQ{eI!IBdDdwSd
zGCAvyx(6#(h2yq2#IoMnAtHe4_{g#CqC-zz4!J+ipggmwkPS=ORJIF$zIyrfcfK3B
zoZL#CsvtsZ#u##avAp9-TVgw%u+0zwT6P6^Ox{y<LtuG=8%o<QSd~Ou1icdBZUHVt
zhbBnZ1Q5kUFbjhcF(DwEI}CS6Je}>W^xY)dU_E|J$CJe<kcXx~n>{r9gg)*gZM^O3
zV;G?O2PYeFD!uCO_K_rRa{d&N>jOlJy7^pE%ToGZg*~jIH2>|BormjB_Fi<LhbU&7
z<MC*`H5}|=#pu8r%unFSsnvLl^EQ{P@~k&LAM{Qx(a83Q7WAXR_!4zCdc*VY$2gRA
zi8?p|rSY?usPlaIW{9(mr5fGGTTeFk94XVe$*Y)2<sQ7#8l%bw7$O{H88s#;Jaf{+
za+ITj^dOE$Z>^)i+jLf$MB*Rp?~mW}ER$>Y%9Fgns0+jyi>+y=MZ^3Q?iX<E!n_gz
z*=)F_Vb`y&<Rk*Dm)XRhIyL7-mO*u$0$Bw;2^{Mg2KQ9auwcE6oqgI$T~C%kPz53d
zN48u5a43&;^T-S;uysk++0Pdpk at HN3<Ap5yL}>5zxcXh5=&|<(A^e&QLw_#xHzX1m
z!pxV9fO^x92uEIiU|%}XY at n*6LNeemGbE4ln9Vae#!kSC5>U=&Ob$U0O?;fbF9FO~
zh$IC#o)$jk;mD|6Nwv9h7rlD^?8(mhqwePJZg=O8dAd!*9e#CiVpWzTCE5Aundk~G
zOAyhppF)~CX&t!)qSm)}guikWY5-Of07x9v-P`)>W)8usBheC$xm1&}PAYqrp4OYS
z1ewP>yH7t7HeTY-j?T>looDO2`&;WzKAbdeEtwscI|(ir=>4b9x{tPYKOCK4p_(0`
z&l7|;*0=Y&l0WFf5einp*%A68L1^>O`<vT)TRYnyj!&?{&V)}j<K$)MkXxpGv+f{+
zO5Dt_3$(-B4C0b|hJ&QI{1&S-1ezSXk=+Ff##3r^i|&O>LMH{x%4Jq)yHMX_8U~yz
z;s+VgRFqMFXD&E_*F^$sq&|CLmtS04*t`()$?0pR8aH{bP>tS#D^&CH_R@%&)otc_
zmONPg%+14wCtcV;M7Svgs=ii2RA2iJSBsdA<?rt;hvRJf^Nq1S7ga at o#xjO!Fc|l_
zRAS8(YXScHk*w?w5J0%JwzT4ES4>bW|2S3SN?8Terk)d0nU#c0E6=misdDKGSj94|
zmN+7=u0lyGzi3-PaUNHXiOT~7mG(55jX at qZALogrN1SEe#M!GmGFyVm?XxGTEUXe#
zZl6O*WyeSX0Qamq?PDOz%SJ~GU`&}-9spETM`O$>r*7gXAu}N$1Y?MZZ;1}@3<s)H
zr8WwFtfr=Vsv9^D8j4O-r#ATmN$rue3ZUf&EmV-tc6&=aAV8N4&Sp7>_?=PgdT}c3
zEhxHt#@mE-s!3`;!|CQvW!J`=>hs;*%|GF)j(u0bn%mx{fJyX(abbJdHD*xMW2&vW
zB at g$UPP^cpoxN^8(ptplU(9 at TJ^LW@(Yu8!<{BCB)5bWgE#VU at Q#^Lw)U5HDA-|O+
z at OFFhyD_~Y=yW=;5zI4QcxNMpBzvc<@9+SLeb3i!R$8<y<Esa}$VVTFte<dfw0f7A
z!6Z<RERGsw;wxWakb=Ru%0SfI3Ep7Lr{9cZD_iviS7I)VW_1-VK1lq!w3iLJ+uh_M
z at RP{JWG%+l)Fyp=Mx^+)HRi0?pIQ^ISML$TuhDUQY=Xf6`N8xkw4EC8;%di6hle-?
zj|{Hn)H7Mk#JJf_Jxtox?m1y$wvYs{4cRnfn~$8Js&Nv?pn~*Nl2Mx1(TskEhYl-;
zt}MyQ!Pq10DV+|^ec-D^Wyp%arN+HQRy<t_WOcgak`pZ~&J|LUy!jdv)oqp9zV82q
zHAsfcdD!W#NW7Nxj%t_u9H6A~GNP4|u?tjyrBWUe{%s$Qvm+`QsW7iuu8bMBf|P&F
zq|hyh;HrdRU(>AxQxVSO;>SnP%txYLLa~*@{uOCD72)5Qrj9u<bo9y|BM(R)hXky!
z{0V7ekrN_xE%%SSbb;u!;xyBygQYwZfkq-t*M7q-C91U>OcJ_1I)8{=t{&34J3vLP
zc-wE^hTBdQQj<P~|Fhot>p&Y0f#CZXn?r at S-lK{<^7L%zM2UBjGNDG3!C{-OO|8M2
zWwng(Qi0=zjr5%TwB2Y!nmO?kn&=*Dpq;4JWg2J;ps7hBj{t0q(on{ND(OmLtJcsk
zU^9^t86SR}?N%3q<Hpc33-o$M%~T at HMh7suus2!YBfLTqM_kN?2<YH-${ThnI$INJ
zfNgM!?!q||;N at 2)%=XE}SdS6B?TvBj9T``}jd;-S^Z3xwV1m4g?<oqH=Z70S;p>yp
zt5^2$4X94xfuxOM2^+5wGP%j^>j)EIG*OrNdXENUO=|}u|AJT1o2Hedfa8hfnSrsK
zuDi(M=6~6>)eTL+t}$&rG(+4FsJ_fZRI_!=Eimp}AqNpI9_x>>Wu;LYVUOhIbh&n(
z;or_9VA;f6n8X^S>);%hl0#E_y#A*K>0(#m5|R9s*iIY0r5E84eLYt&b4$x`+ss)=
zpdPII5l*NqQbE)__U5H6V?BO=2 at i{^x%L2&n1t1M6LA$v4^)xHxal<+Zj)Tkl2J}<
z$Q38%u0(9-R~&_Qf+TPpuI_y-<guf>H3YTKA4BD&pfDIf>Tinws8#BRqA6>M$P?n-
zyN+jC%0TY6EFcQUM#;B;NvyA|BsdyF8wdbPm(w at p=ZCM6?66QCfZifDA(-&tqQ?oy
zHKS0G!(NF2^NuJ#H?tnZlg+)Z39<_l<O_MxM at mP=y9dc1D8y4MOjy#XqZmNb2`|tB
zRXgN>REIVw`6Yp^nW at jO?qmXgTsP-EDE##JBlf*H^}^{dMj4{x7bz at 6TRQ9wS%Wew
zkp>DBXD(6n9P=2{U1ppOsK<NuqtihUJ7(K}F~tj=u(c$V6m(K*qb6jq&Rob0h;L?7
z<3&X7Js}&<mYZ)ze{oYhQ$GEoofd`5yn~jO1N$PR<HucJJnwl)p7uBDC<8 at gR@FO@
z^%Vfkpae455K{%OYk~twdVZr*wBE>#X65tGKhK(CeVxTqtNISJQq_G%YM7P748Lmf
z5z2%xqk1-j5RNe;>{t%u at 6GH>G&a@@e0&b$6q<WM%F6&dX;-IWMtTxTC#a#9Ush?%
z$eF1dNGpruqKukC;=GYttQ`hK`PU+3nMlFha+ at Dr+|Hn~6qB(|0x0*LWeKCUD}X`W
zt%1;+T-QLK|23LnzHUKNWWrw1BY&5vi- at hV8$O<tGw6`Yf4HeJT{TVX>7rBP6y0Hi
zsf`7V_)<R%)<#?(98aO?oZ(zIqPMj7&R}H}7_NvR8<;*Sz_t~&+PQEUTp+EEu7yV<
zFWa|l<<1rMM>wk~r{tJH+n$nU-cr~lh+v~yrEGrP{4x0!Fqw&;nlG|!!+6I+&(sP0
zxxtg-IG+OffGJ~sWgvP;7H;xkOJdj%fwPkf+)ig(_d1oIv=y7!wPJNbufg)bk~?fq
zDFt;E3QJ23H{Y`|df>x*WNmB5?0!LE1hzO>QFw8Dc!HZL3NH>{mo!{+Lc%xfEQut)
zLl(mSbnEG+T;iT&9k>Bg70M)1>dF_>(`3`4dnBB);pvy at lOJCU9xwHmenl%8JkBhX
ztw(pfIGM7x%2xWUVr(iC`)0XrPL*Pb4lX9Gjw7pI=Ntr(SBNCQed0%rnOidCLWE#i
z_+<?Yp_gHD0s+D^osn1*n7IPFY)}i=pJIn>UIC|6pkQQ5WpS)^xlh#9&=LLD)Oyj8
zq$jkuIxl%KW^ec%&d)-m<NTB<sj}5g%4?ab!tNUJin$$dt0KQ(F^uWUT7_uRl7>Y)
z%Tab72i>`F>YNu2xY67SmO~x@#CtRMrFihx%zWjXK%XGJq$a|P)_BBED!y1jnAv^k
zz~hCRt8(&BALBM^^LX{<ml;9qS`&;FhYmLeoeT~Ulr$PHzxvzYELd8CJp*D79BvW^
zcQOlIhKhcpxp|H4b{_uqb#(V_FanXZO&UEwqie0L-f}%>J9E$e_`}M|P5gIjF6FNo
z`dI2>63AVFLfIJN=||tp%0fNmu6(r(-I6dhB@>CiUd$&P!4x$<Fm1!S4O1H*EdI#l
zHi3tU02k&xoQkg-vfQ!*c)=d$_75ZU-L@`fozBNh at RMI9P9!|Yia<Hc-O5nWK93V1
zkZt%$h^kP^2%+}|p?TAoOw3<`>8a-@^)0$;%0=Lu=(HM6vhXRY3FJuC3&>gNZr5S(
zO?|Pk`3Xsdz;tn^5S;7_q*{JlOG4<yTFhgF%gYGclUk8b(D|9e5ZRPELmvKhaQ5ip
z^sMuebM_m{GWPU$=iqOoV&aHlyXIr3kSCMYD3~9eaY!c%plai at fQ23f8c-@DqG@=3
zybvwM&xh`UmVnNxCik&<1_P)v5Xw~+Bm1{bbC&Qcj4fYShVsD?i9O at kd^=@qUR`=@
zw8p>3hC`N*4Og0vHZ+4FvYg=LT(+!Rc0p9=$;DB>J7RQbXDPUt^<oH2>|HFu0%mLS
zubmlg-odtS_TaZY=|5-nP(;`3Ek4+V$wS|M#uI_E6V?|YqSMHT#>EHNrN-hVI>kyV
zM#H)m=X5qlvv_+%bS95^z1Y?eGoWK`?Fu2;@9k5Rr2>^G!TMVp%LSa_fc|jIH}&)<
zP-YJxP~nNf|8N0&rRArSR|__mvh7j$ch=q|+E56>G;K7NF7$U}1wv23qM9Qn7rNJw
z%4Htgg7Nr056=xd*g3^@(_)=t=MFifu#I{##!jwDf)-+i?{V|Mhnh$(i~lcJAw*Nn
zMNdYc8Fdg#=fa9~>BB(3`cm7@<w+NyU5P$tv at ENxsHck8>e$EwuSy#DmX;=yU!+Jn
zFf=@I%_zaln}Rh(+`Q&2DuML6srP@?yjisXRqL1X^=h6R?tGel+N=+ka~V~3wG)LJ
zc0{0A&1Otkfdg|jT^o{-DRj;YgFvlLss#;1gBpxL at 91Y-+>6Y1E~rFyJh0ti4lRf$
z#Vn<`&5#y6lm8sNhnHYkhF2{UYiRgm<2KKxt)jOK$T453w=6J3B)%EgM4NuFOth|n
zo{-z1&DG=?cW8K<rDB#cr8?E^+oq7D1w#7KV8YFE*lF0RMeyw_>>dn$9-QMay1&>8
zd$owjkl?t}{wcyQK2_X|NWuMry`!#)w0{rgUuBkdfRuw)M<z(Z7S`p3J|EnwrJiKl
z0Y9=VY^k^C)+DkT9npJ|M9P=eCCG3?FvR8_v4e|O6K1oP+r#jK- at hIl-Cz6i_RTdz
z<%R~5P=ObSo%Y at hPA^XBSp8!4%QYQy#=yKC3~}KyVvyg%^>%8#+2xUny9kgrbE*V#
zNu6ID9i7cBx!Y{vbaF`AArKhX952k<LXipM$rI>m#l_OXGBU7ETZbdY)L$iOs_Fa~
zFFuHS%fng$0=`-pjC&PRcqXH^+?-)Rv)RPEXfbaVOxbJAJx%I_C<YmF7`~r2$NdrP
zNyo9 at i4O!udO9u^v~76lKKO~VqEH#bl~Bjl&NZoIp<}_^LaA7f7MJ_YtIMM at Q^S}s
zCDZ82Cd|A>n0W8X4CYH*=W?ctm at QG8vzaYcYxp=Oi&?n}5dj?Tz*I>v{dPuEWhQJ>
zGsVq$;t+nE`BK5A&3u`qrxmlsGjlrNAVbwWxx|F3Dcf!{-RucuvY<Yl3v;NdXqQP7
z=r{et*CQjKI0TDL-~y0$sW>Z_TKLA>)!i=SU$+aJ^fSMuq5Xw`E7vbFlV6Ahlg_=@
z<7W8*5OiFWco|ijW~xY&0VPkv;s>0Hu9iHvXE(h>-Y|+eQ}TH)ralzsp6QQAvA7mG
zox!sD^=1#6nY~)MFA4xQzj;Rh@&F-y?ZTGL3<Hip5_PCZV&+0SG9m6BlraS+8b^HG
zN5mhv3Gr{ZmH<2Eta77yKe}L44!7u`WuS3{3gZF;n?%(^8~2Z~=?BgAZgbBlIQ`+0
ztAZO-UoG?3@<S-9-5uiGeF~f(m at Q@p$&HRYfw3U*uMc;gB5(jF46tRPIg_}NY`W0&
zE>K8zj$K||2Tv7M`!nzfK{eQsESlmDs(4kPTs+@@y!b_o6`&Cin0t7LRL_PhZZva0
zyxV;I!@GwM@!#V)yLnZ0*LZHS+g{2Stms+8qHa)Gz0*A0ywN<_%uw<|xrEr`%^%)9
zCQ at ta{mQEIX3%0q^yu-XuQ*N1z^pZwo7>*36?zj3LH{cdE_PO%bdC at QqM~@pa12(k
zZHE_TLM3wA$gec0)Kb*EHkB2wY2TUI0hb8HesOfOwN>_Z70W7+z(Qz;b4XoTbn-GR
zvHPvH0ejw-PVFp9JzoME`T|Td<W%<0%59+2W}okgSeKdkZ2E4cyCH#b-I>u&DM_U@
zMKYd_PLVASV@>VVK5$TrQq<rY=)7*)W7jzl+Pbr8dmQkr>B&Dn`3G)}FWzDE?}t~X
zz%2JaO?tz@`QUGe!?Sx0mus*6{->2&E34`KPph|9ZvXrKr^`|KYNfAs|C3y=Wc0K~
zu6fFNMD7>=BD!Dv^Sdiw++AJ!Yje^+{j!;tTaZ2xJqx;(G8uet^X6pEjpn at fMh*wb
zWle|BKoES4J7ln{i at Oz(=84ID;BUFEK~6Y)+&e!<1w0W1ty>i5xn3a#RSy492nLxp
zAw$n40uRs9qlw}KG`LuhMx0sSX(MG!-?5>Qly+fz7YB&M0gUASa9a_68@<iS-MnkC
z?Vj}p;|Z3IBn?mJUdJw at OhnW9!^!zq9iM2X^B{TsDt`T9 at X{7w?R)*x2b~)V5PHs0
z9|S|(5F=FHBkPA-b2~4VT}7$4>?^j{>z~>NeS0BT_dWm{yg#tDrL*@iXrtjPK{;zy
z-vxD-U1f#sD^IVhW!bpYbyY*~u1o?xD06;p at s~1^l1k~Fp|G*@Xp;f8e|-2T0I=*J
zXd at oNi~v|caR at O8TW}?!7J?FQ4vtJOqy&Cq0D||+u7E<w3LK0hDjbMC7(wVo1(thp
z1Bls(-s5*%U^y+p2eyb&DC|VTl)}Ja>e~mf6{9(a^3u8aGsu+wm=S)R<sV-3zFBzj
zUvuBQync;eUe4jm4=;JxM+#G+5 at 7>Dbojc9a7Y9rYJI?WVr~AId)6 at hp6zaa+r?FJ
z-JRV>o4AQK(7fi6f at E;i<rOW3`Omr9p`k}M5*|42F}~l}ez={E)fRX)2_H at FE-%NH
z9>NG7jZ9^JJw#I6ArqL{3(C-dB>@|AaiRuyi3F8ygh;a_uo(?;_Yd1;<{jd|7UcU0
zuNOUXT*LCD8BVPXO}MDFUIg}wRm9>T4Dl9C`G6o1r3i!{YY`YSd%ct|y@|tLz_GXZ
zH$kn-9SkBRJ3PHHl<xw1=75+YwTAq#@C5sTUg#{p_%8tLzWi)?0HP|5UZ7k`95y~9
zo}npbx&$7KmNL&<oqN6JHJkwV=YCk7!?MY4;QQJf*xxapnF0oIh6dH^Pp+m!{JYlw
zS_;gf|L-A216OTs4slrHDi^`F>;E_J++0cZ|FxTIcmA#a{}xPjHT}PNGC0tiNTI7>
z%XZv5q~Z-3iiHA;AC{4(cYs_6q96BuM)nlhQJyF#HSlYIm8iOlHXd0L6>ft$ap(3e
zV@`azxVC}|=kKoFzI(H5PQa^fT3G%>zb|y?HQwC*c58dHyZ8Lrvz^`j?)DA at B%_#G
z$~@ZITYvau^ASp}wwL_N<{k>s;noIj^YQxgC;KQ!KVzxnqs{&G|Bt;lZEWi}(uL=9
ze#J3|HYizKwb+(PSu{mioM;P4Ig^+2ARqx!h_NsLXo+$1-|zF((#u&uNY30l_r5`5
z5jdxp>gwvM>gwvMgXc%><3GLLZ at +%Nd+_oYQGuHQ&B`+hHj2up0o<(o%Qr9f4-fXF
z3LuAUd<HiYgtqCOpX1tCaow9Ss8Y><vSz-2_3HWl?n`L~<D!Udy?WWAF57zb^l9sN
zzR%-*`@-h9P?l2c4LZ!ohwV|!iJOtZ{N%VwP1TH#l9AJ1Qh)1S4TsmRs|E8uc792s
zT`NB8&j!79>@Lp`c{plC=A17LOA(+M4TG=>_(l(}vjHvE(*UU{n3%4)BlxXQIb%l$
z=W-?>ju|xjA(QO~-pG at XB9WCNnK42o^AO?!hY+axo*O1iV-ra3oMNMg-ps7Vx&cHy
zARH~sEYOE4M=2hxFu<!_U#1!-=vK{xS^6fOYr0cZxB`h6oI(B|4{9D*SATK}w1H)-
zj-WBZR2rIVa9qlru3r4<=nv1^Sa0ng_YWC_I{@Lf1dcHyO^KP2J(+&rqq+>U*2b3E
zTvL++TX^#QL0iK0+SS;knCWFUIG~^rK_w?3sC+pX6??B at 4t9Ly!U19KPZ<<n>g00S
zLmW>^#mhRaE0U#RQU6Xg*-{}8jaoLy31z<V4_L?1vsZsCj*ed)?*6b}D9b+L)m2aT
z{o)$)gs{w;Yv!wiY6P0Nt;`|3IAku$fY;#Rqh~i6Wzpkp+F!#kIGlzqD%0Pp8!&ij
zYhP$Oy$+FJb1vqsT+O<BcKqVGn9js(W;0?U*`o9!IOGQ-efxvub2WPhZeC0}r&sRe
zR9T!KvrH1A_iEgekGUPIyA}IxHXNAcPmUgw`eoCdgz4f0;KQ&&yl}{cM7KT-0m-os
zF=Z0-JB+c?PQR;-SUU$#ycMY~X;zvmYfs>!3Pkv+jH*)419CFGU~lqf6x1dqf`Ib?
zQQeoLcXCd96>FFIA<uB7hn{=kK>|A0!30ofVD~;87^WgAR2j}Q6w}asAz^e&M+f3v
z2J)1(xRqx)punC>D#g07qM|szl#i at p3lzKwxr7(sB#xJ5D4>_nLHU93+}7TO7<QJ#
z-(KhfUJXmFP>F at tLP(fCZs&hjAo9#ZI9R|vP^)2JQb{}_U~65&+4E>AVPWL|owIk!
zkdD&rQ;oR52{`Z7GQu=WXSmuogStE|b1Siv%qI<kE+1GYctud!IcXiKG>1<I?{Y%p
z<ymvn>!9q`+Aes;*dKY?V(%_Dt~l1=?<Pj(?Xf6O$d5j_>L~&%E1848Rh<WR5a%Kc
zXipU)IEZAk=HP_+5)G}X$C}n`QY(!Dgp|?<D^VFpj`;K#LQdg&c{g;D&%qPh0yM&J
zORool^9DhApg~;21)2iM)qv`TeYsFlMRb73Bnxa=O1(`@ZLjP6g+Al at iu0b%`L>0@
ztf}AvOV_0~)GVi(^g|I_ssTW<uWjBb;M>y`iDst7+r>USkFgB}E31>N+|UTMG%A_p
zlN**!j*VQ0LqfU9bs~pcj`@4j at y74xm4Vw&RSoo(%pPi#l5lFp4#4_k{jjR0M&+eO
zaZyDrBa_zf8m{6)$pumKnn-gEMvqWlTw^c&A~`o;5q<)bl9Lu+A6aL&T#8r?WO2LD
zG!%<<y?^)vHpW?#)t<S7&x(|Leb?(;E<WC8`@64yd!OoGzj&`N_Fud@{L?4&8%CZA
zQOUTM>=kOT-Rexv-XZ0ffY{nS+<SKLV;R at 2)9$JACY}#{|K$4;e66$TFY*1}(U0Z#
zeT0vbCRqOfKdMbAF=AGwNR`rB7d?2%_t6at{GdN-2Mv!Vs0_Z0b(yP@{^Rc90nI^2
z#q)#T?-y at d?>fKq-o9;r{<igPs;B!+3*-<?T8a#Teoqw{yX>3o#EonG9#J9g6!()k
zA>E2T;5iwxIXdxH>dzm_OFI?^oHdin&iKhz@^V9u)%7J+UHplH1B~EcC!k##$3La<
zMd1>^`Fzk*(pje9F;Tr-#*}uNLD)#Y$*$;9&gP*?LR_3N<RbhE*iWXl@!FUQ%)rPM
z{@cZKBxcw9LXw|vdO03-DR)#2wlFMrI9)-XuLz&O>}QkIPl1?8gbwc>`E~m!54>&#
zW(Tn1*RX7$>8`|n9N2ktB4Ng-f1v?THc;7UtmW!<U|)8tE7pO+n8*}sMD+GBPQ+lt
zJ{SK%#flHt?4dW65QjZ#%QlfWA0$<gX!7}vK)Xw7a>=Af%<fWa>8V77o6`lfFL#1!
zrRp10?&f>ipVD^Ok|35*$+XD5Ol7t;^NMz)wC?N52V>KTofj^EFURJ>bj515o_w|K
zRN$y<P3Z;j_}Wx3+X_)wnFKglm{yqXqg*|j(o$>ceqPc(n4xlAPKVR`X|jDZN)1b)
zWJ+vYJGHyC&`QNhkU|A at On-*rlin3vl at WcYlyJik%1EgKJ#FQPkZScxtE)f#kq!X?
zy;3S!TP1d9A}3>FwS$V2ZuquDQ>FG!4A`G+InB}9r-c}pB;KxDOB5q5+>z60(Xih3
zc_8FAjex6kM(n62J7(bN#=?c|Xrs1#6*E6NOh*s}SJS}gqlGx$CIGK`IewxW?5E?&
zzFO%_rX?(!%LBoG-amtZy{19FrXi^_qhJ0LWHz2#=;hV$^kXe!Hml^WV%VWIOs8hX
zaDeY&dAR6}dJ}c`0yjn87tPOwnv;GH at d?vYJ;P;*I3XQr2?`jrQ6%I!?snVMgzz!T
zP9!`?aJA9MOI`-lUhp&6QKF-8=)|W<j3>6OEgMawX&NH7XSlDxQzkVBtSmb~Fc#pe
z?5#0Y#IF$}K-jwmNC>%pAOZMgdj<z6+dIdx at Qr9@<}nhs+dScc!J-Tx%LgF&gC91V
zQBE}0STnW#Mm>p*WUX$mC(zCt(>oc{9J7JgRCqN9Xh5r4p4P8<tzvVoxEC7`oKkXx
zg*%@CTbdNG4q0;5k;rM{4%OfYf(`I&(6-;Utyy>x#{wjVm;=dH_;I|#`6jf;ux-G{
z7o*eZ<+oy3OkZv`#3i{xG<Sp#NQ%~US#x2GP|QVx at x2C2aJ6AcL=+fXsUm=5O7E1h
zV}2T7!Vxi@(B^kLhqN5;(k)g&j{gSgUVySuWYVxy0~^>WKJ)Lf+vKQ4*0juhnJ9%G
z$YJ1W2*~S~g7FL?jc_HcL5R$2WP3gKlE7Je^u&1<&L^H1wg9`GSqJOS`oJG0XIaZE
z7hWZ;M|O-Rub|1Wj=rCx2FT&A<W|sCZF0oiLQG?l<D7HsyMC))5WFOm4V6Uj9AV!e
zaOc!`-v7CW{5W(9ZKzy1fvg3Jhk%RO4<WY3XAOPHQDU+kjvGUptZ<OrI2U0Od{XLl
zw5rUnh+-M%uR#*PWz*C=5Mqr4PeV^F4}jMCVj02{<$!Bas#TVxwY8)sn${BOT%KWl
zwhA27C?9LMvgDwoVF^mCfXuTp%M7Dgf6%On?6?{WUHvI at tKV$JDhVG<pjaMWPyae-
z1H;ih7~&(0Y?*I`yx6T6!G-%+yJSewk|l2pL9k*){9vV5?O?I#L|)A^cPag{t&0A`
zIkX)|AeNJ5T8LUsU9#tG{nVg4MKm;2BTe1ZbQ~}VBi`ivOvxr7RmcWAeQ at r}@iaRW
zsskBb%P8pw+O`06kpU6(t*E`6y3irpjpIIPnLH%|3_2XZF-TfA9?pO%s|&R0>R)-u
z5i<!%Hq6CI%jzdEDTlC0E=@!gQsy at ht!WWhB`<r0<Q4{1ssqv{Z8ON6GSosQ_$R6?
zY@*DmWj!R5;leeJOxvx>SlkW;U0pHhkxu1p`xCdS?64}svL|&r++?WkA!%nZwLO%a
zDRFqRNHITRUZm{HSCvxPI%;|=bk_9J9O{~0n?qZ84F$b3#B>7ZvW0fL4Y$%JGK2NB
zBqZC6QlNA7-)OlJ<<!>jH23X_cAN5w&CtkQxeY5PW-BG=1PV~9se=<gA1Lj1tcBpj
zsA%;ig1^rHn;X9IynhZ*p>CyLf*>dA`G~`2v>6^h&A=}B*GjV*i^oqe8#Y6FW!nfX
zXECL9mjmZ$YuJHl-#o+o^nOwM6Z-Tu{Tn*=CO)Be__S09Jbyd7zzn>6m4g!5xqhoM
z<}o5<yngn&xCdTwjR0z4 at drj-JdU?31B00&?gu|LOgm*DQMFI4q(`}TQGJCb7G~^=
zhbIP2iGfu>YGh-I(6oDFD5fM<v1KQ3N6J=VLp-L_b=c=PdJbWi>kRaWP2q(dc`kp?
zU-~}C*|(f$rA10ZE&=juSm7?9b)?dQ637BWGd5Hi+|wQ|3PQ(L$3$jQ#NeD)`V9&k
z5a_ at iC6Ao|a^@Od*ACfQwL;ZF=O8u>+ge$8;KnNt;>C~`deymtia4m$Lh?k7O8ZR~
z_RJ=)rFQ+gNlik;n&KAiur6tCP3a_d_+rh^uke47!c|s_N;H_RsHlfpP}upD8Iy0?
zMMpm%uM+7^<P^y^$nlKRmnC-Dj#`qwRjJ~)c&Q4_p;KKSF0T2vMr1d24iUU~#}%6Y
zO<lVX{@DKGBKl3;zkHQ<+$h7Fra`fht+ at zL6yU}nL&##IJ9rY7eauq at _|{FLOhwGe
zPbWXoVZ;p>aiitS;0HT#V_4Av687+zR2>?Fr2-NG$8!k2`b)oy^Y6$$!@at`AD)_U
zU;<r8iV!;~CLKW%ugRp}?IP0)vXhK>VGjwGxtHPE(6bo_4JU2 at 3i<-PVc<fE+kL`$
zeMNe)$DLCQ7PtPw1D83)u2_E6ZNvu`hUM*4S9Td&ziP`^Io7heCN)lhmcj|MsuN=E
zq_c-OhHz9Av5Mq(y}{)rF0?xAiJUd1pQ9f6doNaTl9!!&;jKxYv}R2T1o46<yJzV9
zH99x>R~e=eoT43u%hsyFw5pHHI at hRk*!WZW%M7SCnlPxwiL{0a-n3CeqBy)+JOisg
zXCAA)R>qpdw`?5Gk<6#AC~6VJU3Enr%E?5!o`Sbkws<)0Q%zQl8>zUlvoJb@{K&|;
z?I&F~VxSCVW!N`Raz!sr$R%Eji#&vc&A7@)+LRyGV;Kh`Z=UbU-T=27I7U`3f?*@n
z_jT^%;V4P^;v at aI%L{*D3Ceuazd)j-HuC}*Fs_f3J;<!@jBG$S|B74i={LpWrP0+b
z<XvC8OEv at YewU;f>7K%O;|kvNz3Cd9+!!kRqdJ^_|9^Ai?t}9E|IPdN at BZul|3 at MD
z6AORZ{r~E%{Tdp<js5!%w(Q3K*Q=Xf7n at rTHy%8^zgZgqOhb*Df{z2?o+>E4VhIOF
z at GF=uxi=Z}41&`^IXdfguaG{3=9SyVa$Ns0b%+62sT4_a5wOXr+{-#ed at Jl<sOfkk
zv4!p!B7&*PM?IthnBoi*;cR#)(?Jq|PI0vVe1Gp4dInsk<X$#4wOAVscCVO1AYQ?i
zB&5i4`91EUA=3$lHiQhKd59rZq2>*G9m*3Q0%W&nE1DvJqsI9SWSd;b?{(LhMdiKJ
zrSCaH#>T1~6y?F*^MifdVt#=@0|)KH{UiK6Dv)OgD&Ls8sT5MY0-mIAhU<Z~Wh at 1V
zXc_3$bgkIMchMIEe$FwN_dPtOvK3)qgf{nMhr%OK_T$@E=Nva&XQT&7R&d at yVj~@p
z#LMl#Elsk(U*hBtt}X+FGrFKo3Nsas-KP*7j;dXNic>bd;a0%vir@~1#fqF|0>j-g
zq(Ags-e$kWYU{tFv7Ec^+T+{%U{#3FsuFwoYT`$zbRqkqGrauvVmuq~fYu at XaQ*_?
z<LIE0iFm{@n{r9B=+<2GRoXdvy}x(x^kA?3a`(mlox at jejv138`@z@`cb*(SX&*en
zM4~W;_4E*Nc$2L_dkWjpu(M_j92I|jwtu)^czZ{C&-P#J?%;|7&v!Xy%*JlFJB2S6
zY)-f#czTE4wc^WVw-;m_L{S)vV}r}fLOIK|S5Qrjvxt@`wg)|U6{>?AjPsL2M-24Y
z?e*lP-kY?g>+P$5;;DpI-dWnn{KYh`wPkgqTi+uA*;~l}Zo at zA^QpM0-B3zhxBj^$
z7wdUmDfL_`->D!%Ut%fLJwL{wW!-a|09BJ&C^@=cKAY`qd>ar1Kd?c6*vCQx8MoFM
z+|02W-7y2D^X97kAf<$&tb&XDRcb|4GGlmLnz|vozqYY<?|$k|FO>tMF}+U|U8SUi
z8<e{Q at 50KT^uV;CX_D- at 4#D%<f!DXk6G>6az#ho#h{(810C5H$mV5xcn7G7uV()N&
z_jo at a9uS4=B8ZHNZh)yLhp%3X>!#!5q~$A-i#bX2MVL-IXFvb-YCJ<eHA5dR>ZWW#
zeJqp7Xz(pt({qEH$H?U#=Bf-^`lbv<h7}@6AxVy|`EY$bWgF%8<?8Y4!&iIzPu?8v
zSCYvB*Z9z}<ju7A8X}oTjjg at i=g&(REy2e9 at ye})LKTu)mzruH=)#1#IKVW`Lv1J0
z(QOro?<J!drRo(_jn3pDg)A<B4?u!0kX<dQAQKJsTiuWkjrXbwc#I>Y{OCHNa*>wa
zh?Isx09lPSF)Gf`+04up1T20sC8RU`S?<oF&Jgl^TJ$X$8xNpVwD%GDa|W>cqdGvj
z0F^oS3ml1e&L<sg7R6F!iG8L7dFq;*)4#~&gX0iSCBnyV9EL+;SQ9ls+9f)$qWi at Z
z$t3`oW{;Ej1$7W2O%LMUjJq<<$<=7&pg8I*a*ac<z8;N&eD)h?nAJ(aPbT9_Az|kU
zf$W8r7hU|3>$2fmif-)j>6 at 2(#P)CLFvD&|>bgVs=hLNm0+<leQGWYW<nZYuNVM)E
z6+|lj&n;Omm^oVeAS>ML^DS~cxOm}?f!r;iy8$m7lm)a`!rv$ieC<#xMAnLII+6+n
zG7^Qm1}=`+CFzV|KwnL;?U;>6D=n(6s*Zmr{4P;%O}oWw^%>k at 0lY^_2}F)%EQ#1O
zSgxqTyw_r-H|0Ul8>+QUp<ozKIVYMz*trHxK?lT`^ZcBFuCG_IW0IADEy6Nu5#b>q
z=A0on4i_&>4kgz?0_5LwH)d%&w;82&G4OvgNX}RkCMY*&2rB*a4z|bQm5m+hd4Do|
zjyYc;GryB4{(nK5R9-V$Ng31~3$a4^_O^9P-NM5t*_-MtGR8Uc(ljdzRmrzFm0K5B
zMqhpzSz%<>wiQ_yag<&t at fQu76ip-WuQ;b}E?UI?r_T9sWg8C1qff8^&bR+<Y~8!R
z at o$?OUu`|Ozqz>y!{5f%7J at zg%l_wc^xygS)9ioofS+Q<FAy4qv>`Znx>dS_(VxP$
z*PB2g_JI5NI;ALM8{EHWsGD~8w5E2&mQwA2MgH(+|L{+3MvmLh09a<X6o>LOi#J+J
z-LPG5-Q6(T<=s_$-Q0M%b@$;0Y?o)(r{h_BHY_DD_ at OsbqaW;But^RiLTX=voUZ at Q
z)Z>~Q-ubGcDM{`?-!3#Ci!~VzP*vL=!agRpztbMn|0%;WB2+)sbGMdhJV}oBB{rGZ
zk;q9ea!Dcjm)TFn%y&K+52a%F6sr5E2OD2B5W>vz3yx5EWHvr$Tl(n~+)85iE}Le(
zi-s-t`wqZB?Vo$S%c9$#BHzNbtKVSLc^ib4Ioc!~sC10>)jDVD%rE^OGHYJ6htNQR
z6E`-o*cmSCCImts_`(5 at VeAMyuxKTeEdZw+XMAWmvF52ucOBKDc^F2#y(bz&R?q{Q
zhL;w%bs}u>4dWLF4qo_XLT^6k6i^+aX;?ePTP_LiXooN%i^UK!Hv*LOs8~~fFoc>x
zo-T#HnSQjCbLE779@|w9KZDzQ*E>T{cpinrUaAWb=5L>2g|$Cz$CrwyY~2#nbr{Fr
z!|00Oc?b`|iPVGe?x`48m(w=fdRSfJh#dr6A<RQqn!tRVONU;MT~85~V{%;##uswR
zZZoP+5eVWUy`+-G)zq6WFLsZPVLyHT>IcT>Z9N}f=zW7bl1SYC6%E_rO!x at E`hWO<
zaUuCHNAT_8sYkx}NP%>N{J;Cv=KYfV-`v{#m;C=oEPq<@Pn7>hnt=xyeY*(eEcYUw
zUX2h09M>I$#YDOSW5NH6z47Jsq<`^lMxnY at 9FDPii~ktE8%<$8-JXn3Pdl?M`henm
zXNm)&GX~MU=rKPt3<kF)p9Ioaynp{5*$hwn(^VL#5rX_`C>fl;8|+;6#+QTMnzdxT
zItvG5hHwC at b~}&=K^kGnYhjTVX^P`O9w+V<t{@~%BqIOF?3T`WJAFyLsHQaj!iOpp
z)O?OHO}4a4pKxnZga}5-Az_<_o;&DqD#2{zgo-bY(GA^hUh|4M4$~k3Y0!o;0dJ!Y
zM6#H+0Sr#jd_Zz4#>$T!c+JaHUc1z6zVSHf_f|K*DmFJC-v8#|#y5?cjh-4zaZD-6
z&VfaoKv1&7m)#u6fCWGDv$T*rZ4+=@%Nxq68QL)IP9!xH3TrETfoPRXPg2>$Eo7^O
zh_KQMiWDh_>H`KmRPCt$m)<}MNg7Lpv1S}tbnyBGbi_mEIu&5bX_+hwwD#pWnGBRT
z44%UP3z^t*RB6~g;z$%MEqMoroXivY(P-0*j;ir4gf=gfpbZ{<r2hbzprukSnPTY_
zBWRe1?DcP$0{~Pz2bRUsF$ZL01ke@?!kuDk^WInYzP|h5-d8m<G{1H>Wje1gT#u)6
zlmjF!)BcS68{kmO?>b294n7h6mtZ5NcYq{=0dfRCIg#^nX#H$i%Ng=@h_L;6S7nSt
z0iO^&J!-lMKGZJJGfABwg${s59U;EJlup)2L#0L8&j|g7dbOBTHa`SD|CvaYE4TkA
zv1-Y1!Lpd4mrJ>WBO at GMP^C6B at +-Ohc5#1gYi*-`E+(%(aWVu2)mhX at _%tOo%IRkR
zul^-dS;5*158~@j&;jS`f7JEvmGr- at jr;fiW&im!jqc-WeWLz%Oml*oIB-}v<uNCg
z1l)jRKd2^^;^4I=*Fqi*oMpZvKcHlWwW5#og3z4E=+1F;38f2P`72jmY6%Yt%;r6J
zE4wR+U^b8i=HceussiIXd9lri@<xZ3C4sElh5r+c5(2VoFBk}&$pjW-gi%9b3&;R&
zRnnqC0AfEaN3mrdjML$RO9+KuWt+Kvy8uYiF?fl?!3N2^X=UL-<Y#6HL5jFT<fFiu
zIs&^M at 3(iKJUN7=-1pWjzTB0Q+cuzsd8EFAn$asKiGT(EWbl-tP?O{5NpA?75s_rT
zum?j%=6ma7c_J<sKrLoi3{9MQI%C7*;=}cK#R1ZmKzF5$s1J8Bj1zuvxaelK3-5+w
zw(I at jYR%dCMeC=N)-l`eb#box0a`Gg!~vHOAzdmS)HaE`4!^9#yE=<B7!Mp^?BJv?
zBiXrFPefzq69pZbs<;J$jF|IoJQA$glnQoaa$pgWiAht&{r$gIPBvD*`RUiqJ9q!_
zcJ0=$ckwqqS^hgsBR&{>MGn&`7(LtLhq$7p1?@80yJ*Zzg^ohSBgpcUI9MJ70S*Pc
z(;gDTz{^i(C$z{?Hp$Wsf?CDyN;h7MLo<U}lSU_AJrE--I_w#n1Ya}~xzZLxD{NkV
z7i at 0ddk8v^kVV-kUND=YEX(2*bPI-P1+roA{ExNWZU?@U+kY8#9;0)-3H!yTBAU6k
zw4{jKIYQdWb`j1MSDnFnZ?x{)r?vj&)__TJP(=2dFUH+I&X6PrDmJU!oi4CVCErkR
zr?|;<yZG?o!&>qmam>$3?*s16h%%GBT|2qHzFz&?-~RR!N=%R!s8=b0((5C{l4Kiu
z2Tu-Jfc-pipH&?4oxQ8+y3+I=no4KPqB}mD(R9t_Z;q5bdfqD!^c{jLsm=_+12IDa
zBsWyjEdhBvzXFQRa8IG=T)+~FztVvBW#khAWnz$>0bD_`X9k^lslaL*lIr#^U%=7j
z7`-6rIQ~5(BC&w_m&ap1H69Ear&lr9B^!rb6TNX!WouNI=$E(NuFd<l?k{D{rhUqK
zOqL?n0xYjk5<#?ZRiQ(UVU9BjHr~G+ at b3=9jF2PNxPu)Q<FX))_T*5A{UD|?Pjc7P
zmx&Ly$`9_AAKYV<JLdq)ga_SYD-a)2p#>1~5a2<vy}S7>zI^#*GAx3u3<>X*dEEc0
zSVg+DYJddm1yV}8`%;d7E)gPs>rSzPgO*ja?l<k&Fg}5a^kIe3Pk00X!w3iiGP=qz
zz5pPc`GMqWNS*@4W$tK%r-TqXsOIyra)}Hia0IC=RWZ at hd%^RKknmJM!*Zj!8cxXr
z`c`1VK%9YSB8$h&OHocpUN|8MM at J+q(3SR_5mt2?@72y?bqTyZaq51%8ovD`lukqw
z#FOPd0+g%pshM$UlZ5PLA)u5<kRjCvU|82b%%_o-ccR+NWqn#FF6Vr9LYY7?k%r`5
zdFDa|A?S37#WvuMqo^AxEB^*aOjP#I*GYSh8bVG9N=irj{?kkGnGvRSU6r~^RD}*+
zzrci%1+Ls$su8`12uKNS2YcF!cVzCn-1DtJq3%ApLabiVgs8iL_rvoax98xSN5UHN
zyfg9ibxvIp1ufY`BKr(7 at uAUHK|3lNW9z995jm0y1B~#6=m6AOr1W>*M at 1S)<usy(
zYu**Jh=9Z4K~B&k+H`X}Hd}_GXlxME@&mG7sTd+=k_~`(FDk6?rxe7Tbw(|s$1Oxk
z6I7`)wUpZd<>{m}Q}tE#M!AedRr!uzmt2PidMRF}lW_G^4%Ecb3C_V`z}ZSd`caYQ
z9wWp6!@#7vpp>B@$*qL!mUYGfdQBTb7(^T!l!9rCgYo$1t4s3}C3(;XRU>x8Wo$A#
zyPD~(%jNJBedwJ?C;5W3qS+t-0CF{Kz(XAWTi-~W=UNgsfZIyVJF&U-m6Y0C|5|f+
zxNO5Pv2l=#)B+1|aDIhjT8D=72DHF#E>Xt0o27||+cLe5&Iw936Yv`5eoXga*+j)5
zohWoTz1U^qB at uF<MD9iM>Xg|4I7oN+kUCtkjqev|WAnicjqEMZ$ksh;#0U)Yr-`hL
zAjI7t%Qa<w<XV~nR at Wv8DNLl)Yx5D15X4wPnMca;DI%ef8oA37o+2d4Wf at xHB*fMj
za`!WO0&wM)v<z;_ at +?(0no2KR4Po8zEjvkjflh^9TA#yX9cNGdLH7))hOjAsr=8yb
zW;J{y=N6%s!BQC`c-}!qB`m%ei~xt5O>ynhqi-BkDI*32)6+oCVZ`tP-wv6EfH2^*
z#nT5QF2flWbZ*EHG>C7!SaGNL3%Bd=)8LTsG}J308d at aXE2X6}rjz+#F`ZLIz};;3
z7#asq>e!MjKL!63VG5KDq=la#iR`gh43>mNw2^(wl3*;+#vpbC*?ddjrL|2NCQ=;q
zCOCnz4 at cy2?Ze{AV6Q3`*=r6hF3apy<1lw&B$ksq@<1_uDQBeFgZ3`_03rJy&IVUP
zRVc~%9)e?zW<jmx%7BT5Z?J2`##J{BJY9k(MretnB$rAzK#?G~R7Eo}RG~)`F_{W%
z0StrYBr!e}s$3$45+)c$-3U at 5*ET-QO#N|2&3~0%7z2yg{~@=Srl8lq7=42E|KI*?
zzWtwRz3-On|C{%>?)}UDzwjjfhJv4F{}&}Y^E0TS5g6+4-~T4w|Ay1S=EKde9^SuS
zcmEqr&U2GIW_0p3iDK?oZq4iO2O6)8JmGr?YZ1g9tT^0#$bl~TFI*Pk&%WA4iVbsI
z(>vqG?>cZ0<mO|0*qQu%HGMo9Uv$>GJ=y@*X_j1v+r#jihcsTBF$#j<y)a|%R9wy3
zD>-!N=UWO}^s6p?Y{<&d0RY!2dR_Pf!1aTz$##lKyiK<2V$%x0Teg1WItL_?ZE!_Q
z+bcNDPysO+7ayK1OP^7?d0S9*^#j3HEw0L_zkow-wd_gDp+ZhJlYyavx at XGPAv7K<
z$lFRCMNU&4d7JJs_F&${4SmUoB6~>QkhdwYK6MMSR_tj4bC`^Q?k+CN<Ad3ty%XwL
zMjF7WY-VBRACYkN;(cASdbxp<${o%n`~|QH at 4%M{TL<V_9$)}H+LiXx9z(_hMEolk
z-dT}{C90;Z>#+|S{9_0Vz-#z8mmyWzJw at CJggq2=!;`iS!kfQ1IKCqt_C`~>F7bTA
z2grJUtR=Caecu}BkmnU9vd`X)`-obwrs5qzh<feWcm`F2GeWIG7U08&a?o(tgNt()
z4h4p3PzdyS{~_~xr#L=*v+wFXY1K6_i$-PbYo65n8TCynBDW+_Z3G2oAlc16)#dT~
z-t~*lhv&Sj%sWKC21Q6`h2pAhs}J5@;`#h^_xaI2*X0P9)rD!R(w1ZlKNg1L<-#8B
ziB^2t?+uWT$wys9fe)VawtTKvrP}lW21e71r^Ie at 9oQR`S*o{>u|*`MO**%+0C6(J
zn6wz~t|;2jg$*sWwgy1OZwY{E)PZ at 8oXUkHu{$^PBNPF25N>{AC;frmGdJ@`96O)K
zQCMVyIZ)hyE%u6ywk8Bv`rI3W2Qt+35D+2n-bk4BJ})JRW^?Ih!O19I9WF8*0Z(Zc
z>G%J}k+7S(nUY`(Al#d2u7y!Pfw%Sdf0{Q|B?;no9^p8F){u@|DFi^d%!7;sJ0RhN
zg{cJ@={cTi$UfhX*YjDg?2KqsH6F+tCYrLt*YDn|H!qJ at Zr>t7MXKhViuAWod4g3U
zS;RM*P8k=U^OLY&<vQ{9i!gE?^rnZwTB|4?bNxx#BqK;o*+!dp)^QROf*r)WcZoFx
z$MDlj at 1B1nyo#uR6k&WRQfiTuqD at IIsiJcmX+cmZ06_Qgp+hBLrZI*$0cd&{p2!Bm
z2>Ec)nf%fpJ)~y>EXo>R2o4!EuE>=dy-^Ph4T|LI8B)2^W5M+cX<5>liAf?`u4r3)
zV;B`s42i-=scTRV;FcY_Ce;qP{vf6j+<WT%%;RjeWwQ*==B?jwctpqvI_(_N?^^L@
z3S$8D8r*nCi(wd0L7)n-PjOc`?O))w#+Z%j*<)vfcsuVf9_XHkKvagG6=A)Gu at 3h;
z5N;@YAII)C+Y()SA`k`vpfL=SAgJ0&sFOjD+m;nXW~p`&cvZyyqxmIoFH!-~5^0ma
z>X(6Z6sws>LpgO4&On%y%ll3SmoSvk&wwbJN^qxCW`>6}ph+*tyF35muZ}FT|F<h@
zaQEWY>*F_ at bNBySckfo?zir&VyY;XA|Hotc<7<4{{=awuvvD{=H1|KSqJoONY*_UE
zVZ)__oS<MQ_~zcG+6gu{SGVpnPTc*kAKt5v6St3OUL*PtVsio>1+FKTFnHkJ2N$$0
zA@*5gcpt+IjE%gQE5LN+wyAskB&n3)w&HJ3&*+Lk_m}wWVt5Jv>AI(|ze6CGipQdU
z0BSH5%X+?+c*%q}7>V at hRoveOjRibYZXm_2$I*n|LVwEfDiW-LQ%iNT%NE1_2kc1w
ze1KI3V~J8%at$Y}0u}ae00IA^j}RLPTuzJ)el*IMcSzQ at j9O`#5so5Ew-S+zhTsR1
z<u=Og#mcfpuCM~@bI+Hxn~DS$Do<NWW~x<D*B~Lk-@|F~I|L#=?IT7p?hU?1RGYp~
z311*&8b&cKp4x?_T)vgYX5A!mLnKBmL`EmIF#Yi2^@1IGE9EY$N(?mtN6Y*{U{J~7
zpou=+>T at K>bCpheiu&vY<#3801<};O5OBSzDY-3c_$=Z^o5ZlbetL#;C}e-w+(<+&
zU$H~<tLri$)l#uicy;Z|QCaHE+vICo!B#R|3+b+yfYkOt#FknY7y<E$EV)~{=;LI{
zn7Bev0!#|;@uT!whm3zSc=AFeaA3cvCf_vNWph~5q)ni$QC3QC;u<HSehnk<0nQ?s
z_>5ZWavwi}ry!<X_-k~vy&QIqvD$hELxd7$wuFT7NnPMV{1jk=VpAChBcAwSME0UT
zgx=iYRiqOCa)_ikaIX&S1|xW21HCOIX#X`ZnFyA70K+8!`tS_y#2izf*?E&CX2 at u5
zv+L>PO!EfEMoMGjzJ)`;-&V<1z|Fb at y|E at Dh%5`E@~rlSx-cjX)OKMhJlV|>EP&nF
zyPc)Y2TM3k<h4ruzV4w=DqB3C-O#;~6XT({m;4j8BB>2}*!j>OUJVg<>u>aAfv6c3
zS8!SDV84(H)QA+&1uSx`c7$3s<4zYOAhZMKn<l$X#H>f-SK;e|kOouUe^RXi&3gAX
zAeV7kzykSunTmH%iF~N$BT9h*{YHjI(CIGtp{>J}oWV{>4E(Jxi5C!@ltU0ecp1tT
zv^2s>JBoFut`*u1eB8}=w0<gGf`AzOF3w;K3f{p6uM0OTGjD372Ho#r8{6dt4Dq>w
zI0R>7KqHBv%byrhKJ)psf7-+xynOxU*bX#|erhHsh%>>ZM`(B^Bf%s+MKFpuJwyj+
zMVGj{z+u6TE)i#!ejz(cii0KLGCNBzcK@^e^x*k^n_1+S3NfX~+LKvgbFzF3T|^P9
zJjpj3AvVUCVO#>{%EfkX>FpAnR&dgUoiff~WS6bBcC1nc3?`qX%0UY>sFE9NEC}oq
zJy-;EVPLe6lLKtD^M!@w)W$j10O4^Pt`q8_P;Lx;SAb+M!3*1iKQQqFz%bq1y+)vR
zW$?5Z;lIV$Zh(>PR6i>)8=#>P at cq{-+&KZWcn|k);shDaJC_*Rl(FbxVt{E2Yy;MW
z8z9072jdqaisAa;9JUK&JCc at Gam8--?i#lTz&<sQN);YneHdZWfiu9jIDi`$Z{Lm(
z`3eK&*GZ60PPH`%!SyBAqQX at s0D&5EV-};WN5#?}!S0DchK?RfI8x{!7zIkph-(>?
z(h-m(bKpg5mO=oDe6wVy?oe$ZWl_k1Ip7|ML_9Wi9Z$|CgLAwU?Hxa{ZAWk(+#)Y2
z^i=-5b}IdrlO9qkY`uMp{_wAU*teH7eXJsPLIL#M&{SPBQ8|^dECL*32@|+cO?xDq
zCP<dvPNd%CqwCG2-mIpcsZ at erNB$yXKp-}>Mg+^memZis8Eq~M+~-J<8#Dr=rmEYp
zT-M2H50-AH%y?<1jzPAKL4KYwNGcLn9v^f_E+`RzxnA7=^p3fXlD+ClC3QrxBv>pX
zF|axm;>;$-PURZ#xJOV24RQUMuP at g@QUc7?3|mm9W(1C^ZF)1cD>|^fk6O`MtF2aG
zcPxa_nqzfkLw=N(O<U=Mf3&b_6t!hP*RuTMWknzMnP+DWv)%w-HvQ&+L7(McAPCAL
zvX%lk(=R0=Rl_V^A<G2i$ZwrTMMz0NYSV<_ at nUm{SQ2MU0#G0_$SJ}tqH0Nnba+2u
zD&M}9$y{hE- at cW}{FJF|gmB(uN^I(BvC_J;bmz~vG>SzBd4Mo=CE;Z^Bf;t*DZ%0?
zmmpHDC|9u)2)!NjIRiM!EHp37 at J2&9)UVcM?Zw5R?*$<HwNL9!z?c494e;fz4Meqq
zY9n1Dq+RL|+K$vMQ_R)quQ at g<l<@}*@SOpPrKpYXNbsq!*5x4&8r2gXtU7F6%{~U>
zixkS_h*py$lGdLS8;=&9>Wig at 7tmsD7g#<9NvrF3E2vOW2gacolm`PF`jUQ4fur=(
zcq3M>YZG;+*to;XVLLSXNeePonFbu?HPl(%ELBSTlDf;75}{Bh2&fzu2_$=tcJ36b
zn<Wzx57$iH4!W!kFG9y|>Uv2ubsZ250#e!M8-GjCmAiMYTq>rBm+ at tWJ1?G%EZq$1
zR at 5TWQC$qHPNLzUMe=RPV30YL%%i_*tQ=o?^6U?<+x_W2<J*<2-2PU3c?K)Z+yXCQ
zvo95Z)@rn#Elo3BgX7`|6zi3{B?d#nlGT(OC|$cAh5slx!lYz4Qqr#U=+Yu4$*Hh!
zIPYIvnUkQM<U%lb;hLR7^rwp1U%=9ElM^>dajy`pgC14B>5;xG@<X2 at 4g$)3bQr7>
zi_y_y;#QUwQ`{*CrNy6MDbW&UgUc^B?a8eRIV*<0n!1?dRM|peVLOW;?-oAG<|AD3
zz>;AG7=+Nnp)odu7KI*<<%UFZp at S&rG)fC_h({PJ2nwD;^Wp*tEbu!gtw4C`LU*!{
z19Z;BiABfg2*IerMG~}bbBovHNS_6|OK_GQBcKsD;c29K?C9m5gmueNsDVN6xDT!a
zZ$K?kX+RLPS&it>kCo*cY)qAAUvxyg*5F<!&WMsIj1V%RF`gmAQU*HajB*OMu^d9e
zl~9gjPCw#^q*uQF at S4}N&WE#O$TVL4K_es3XR82<1uu#Slq)W{;R2_b?D0cv9A*6x
z20D3hhc%~bq;?S?BggW|%0}b!B`uW(YGWbEng9&P3bmt3DMM}kGQ|9JL3Ux;$atrx
zl7xbNm%!O6mIUt at H-_(YsiP5&rVOk#>EIXu_tY}{fu;myiWQTzK3SE0vcIT6P}6HV
zEfLvlK_!H at RXQV31ks>gN|$~^pTgXeKCwYP8xO{lR!M@@b~nSNq*8YX<em`($U7h8
zG3ulot<=vAwQIl?AWE&2pshVXNy>yfE=rK92Q|=lD4X7g(IJyp*WSJj#&@QKg at XxL
z2RQ|pLjR0M-I^(<J3hPO-5?L2Bf`W5wtB}(!50$XLRbF$G7Pv;veaukhiZ9bzS4ss
zg0SSxga9qNgT2?@Yy-CT09WpBD0=^6if-K8D)fRUz)EAUrIVU$7$mz&BCxCkTAzW|
z;YU!?UhtyUIE&{LY_tkr(zg{Pu=MQs#d93oLpPA5nmBgy*RUCuX4GxBp&gGf!_7Kd
zV-xFe;iCQ^G8+=)RFdV9ZWwGJ*ng?QkQW5wuezSWAxzHOEKeGYFoWJX0@^XZS}>Rz
zY5SH+h>@&As1toiHx=ckq at VC|gU};q2stqnCs0rbD*gbHwj7(4?2=VAMR>S~fC_yl
zk_~|a%#*lWRLMLO^EN_C8Y0O|b`axF`yX(D8S523d+(tLVSOP%50GQmfqfj{TPYQ^
zWH-MGV+)=-(Rf)uO_q at _RFNoREdef<f)x~0#h{^jT4KFKqhm-XBSQ)Cz>h;s#RI2B
zy${I-lJ9dd!${UBSz$kla|prKy7<TXlE8yClG4A+Q;stiVhPt}XXZE1zbK96=59Z#
z17wDr076_dD)p1#Oy|UpoCutKd|LmB*kWJAouI0O|5^+&V0sDsTA}vO9*;->QVP<z
zmEc^aJm9O|sPu+F*qw_NF*8@#aMg{5xMsatuFa5(bTmwtg3k{BE(b90t!<Wo at p5e3
zy~5`TxY|YIt at xnhd2XGI%t_ws<_n8YRZ(mn_M;t)dvlR--~W_x=hFI<#+^6uPaXF{
z^IauN$M&50zTZw&k53$T+Qh=+&Nf&%J>1Okl+h}w2fizdF#cMMucRkfE~eA9<<c`G
zS`ubXNr0Y~aE626-Ec}#(ub0>^hjK3GAEXW{AyZ~wu=7rYnP*oM$eb%M-x^q#IS0H
z22y`EfKPzH*;Hm78Oo5+Nhd2Vy||R2S8!WhR*wHqVWx_f&BP%H-~Zdtk_bU3g_Ff;
zVa_CQ0)FxtsE;3*tCe-f7|Cu5!47eA1J*uj;4pbYn^QMswxVh+O1MTF_ELdDZrVSD
z+*<WV6w-s(w~(3;*`zOm1JfeP^D}^kxXt*tZMFTtV13=up029_UBOPT2B%AlIjv!F
z!EiZ$WyM6i2{ol4RhL)wEsTg4Bd`Ow@(kc95t5g|=W{Y!i7AQ$HnTyOQk8wXWIj4z
z<i8mUf!~5}Er1PKP{;jCusG!>@_jrK!lL{8&JrmGJ1-!X154T$Gsj{h^l|BBZz4=P
zxB^d|zV9F?pm$(89x}LnTdpLIOwo at iSroE^u)H-!SUilU#X+NY%Vx0Rk#s)BiPyxF
z&Bzwe7fhaqCVLgRC+vuNfv$144xTNi4f6`XjQoeI-UQ*N8oHUcWD{V}RhM^%8(IM<
zf~F%RIV~5G?Pb-2G;4`!YP{F0+`+NMcf6<v8QFBWlGuwX&AMltXWUXhx3*ZOJ at kCq
zRk=LGbjh4SfJ$t&(ko^!xh-2A(9w;DMPg2_>6tYh6-Qz~DHXz8_>Ma77bCGGmHBg2
zD4Ay*AEUw6X~me69x{7D*s?Dg+K^YU&!4?3!3ke(iRzdG!_>8m^;mkEpMQC`?$}a)
zKZW~dgd3nq5S!IWd9s1KVW}Hn0{^#%m;fa14HrZ7B&;l*+yqrBhUv!<57r&n1l;w`
zJMhL#txa%|2UF_dz$G;}iInXWOGx9 at Kfhj5<0efjCBHzxD0Va9K}%dWR+cIyZhyd6
z at shVXVC~{rler&CpxOv;0AT+=500fJTFXMPKtI|GeMu3-NPtCEy^e(D8;eOfq`6wq
z`X##WlRmtO1;Z}ExgVxS4w$VnLwykBgzrxLFCFw0dmaIVR}X1D1Cl(m7#r+;z-gL=
zPACO4w3rOYZ)OH1@!eq$w_&ZKrz4{z7f7xS=h-_UHi8)Zl(TEhKDxiK*2m-{V|m$W
z<!DG%=KKxDQ00%Nl1uN}TErg?v?|;7MAT%vw+!uxFo=@Ldy=kT4qRPbEx`BmIBz;0
z;LQB=>Z17f2lqC=dT`%Md5ma8z1=GQgXVWE6oe4Dd#Cv3;k^g1Uxb3aUvN(iSBsMx
zcS|*J|Lq&AA!9A`1hJST>=tKPFntnf$-|X=+~p&e3MYw}v6GUx|1pzcz_ at fLye6q6
zcG&Dxt#VKkY^@c4lQMK1OO${<GL;`mpXoAks2$OmH~A_VVR>{(J$3st%qE&!g%Yv4
ze|U(946Cc*TvexDQ^=BRx4ZpcJk_<VVeDexZA$Tkbb`tv9jsdc_NeWFhA at lNt<>iL
zjBGlEb2Gfa5fp!dsN-_0j|EgOvtX1A)2DnApr8?WTjS~@D93{JhYd`^mEZG5H%k73
z^z-b}kpbx<kq+0rZ+RiaRh?X}ClebH*K+DN8sVm4Zkbzbg%F!4nb7>4RpNy|Zl$mm
z2eiOq!2q44YMl(&lu&_}Dk~?L={UbE&5xxXKAmuPQYjHlIf^lv09M0KVebq!k5fOH
zRi>!|IdFT=T`NVe&>uYVUi2aOdxPTl2$czi!afPjUOw8!<bkTHbQ(2hlIp|l^`u}v
z9wO360DoNf$`>@!dABqRq)-G00v{NhCx$Ty{C1M5S_TIri6aB#96-Qzu7b9>NRO^@
z-1!0W&0=n(r_K?lgtsgxG0T9RNxqoZGnF^&(?%$-H5y5|1WPSr5n_|jz8GT|5ZuAU
zF*_a5ErK`VC7n7crB2O8*JM&O%uAdc&7JPjrkpArldd{JQWj<keYUfS9No%N2pT`l
zZUjwmm$Jam0XqTVp9XF=>oRA-&SI9e>ZYo0T7+QIxyc$<+z2=3^}VXi5vM9eWZ<Rk
zBI}*DIqRQbaMT at Tu?7<;m_QR$(Z*<?Hcw<+*e4CmrDy=`aa<sN2M2`9J{#cqsmiT{
zxI*#Z(2xXAkAT6!CGfjYg$*FI4?f#--?D^Q19J_a#@WbPOFA=6jf_WQZ|Gs^@(dSy
z)$puLhYI(%EQLObsd}D~y^bxL2vlb}pt*uBV<2(5QklKY7)ec6DZ9)o3JB<4dHcN1
ziIf~B at Sdu|R%$-rzEU;Y$}T-#S$Vs$c_066-TJ$H)jwOen1$vak8!I7!T{<E_Y^5&
z${N;9VoNHos)epra$!nV5W-ev+o~C&rmL#|sBlv<YosC24nB<nFEQW<I|u?V;EL7N
zwW}n1_Brx0OcX=)FQO>c7Aa0kozOonEEL~|(Q6QQ=h&GWh&4+R90$94Jr#NZ1OCaC
z!M#^c_8~zp=mZ4w96rF|F+yEHIb;a)NYl2Su&LIZqzKOeOjGTAKj~av%5%7TLYM47
zFU1{C at h&k3Xf}`NHP*hJcEJ2QfId1})mS{mDGrtpJX3-ZVmb9E1sz>hB}8Cv0$p80
z5#}@mLdFUSb`?w?ar(vRbb9%%{)^vv6(c(g)B!o({eG3^54(2xn;=+vE7!PE2-5Eh
zK!cO|o}9>ATzi>JXC at f0TAV6l66_jz^KxDwjX*YF=6PEsuE_n&x>Vh+Q97;Zb?jkW
zZLmjjt%@GKCK;j2JQd6CR1^&9KjnXJXwYDdG&7_!d6~MASUPEp*oi6<*}5x{!B~OG
z{!V>Oy;Uwu(TYanHg1T_#*^zES~w6`A+d3w(0AnmqM>9ukq+=gB}xVtddVc?_b{Ho
zD^^h0c~ry`C(^t&!*AQ`jx3*^u&opIrHqVVS7BvbYSR at A!9&BjM(PCm!VJ4Tg{7Nq
zD!JKx{@GYCI at KME9ZK3RdaPp&(%cq=uCC&}S1*y+;J8>@LvXR9gO at +h9)@w+w)E=q
z5?68=blpv0ZnUHtS at GZyW15$U$cOLfK>QbBy_WqXG69zC>$w at VY_z24Hu(E9>?R~N
z^W(Zw5Kz5`dYK3Q)wp_S_d}R^8GCPf<RR{wouJS<D<IpElI*}Dg0x336Atg168>Rq
zyq4US+m0)iD;S)OAnmjq5ONoEan@^J&Cb6DugK!<2!*kNm{#<nM{Zz2de&(lTMKLu
zKwzjp=Sokttl1}$qyE}?EZ}2uuk2$Yutm^QhCpJb2N|wz&>q?1&`SH3WhDX$(^2fb
zdj5R(c)wt|HqwG8Wo!308ic_*VBiHO7xBQmiO@`%5J-MfNYakO5=8--NxI_eq5+m|
zp{&rRgn%j8B;bh^tb4bl3#*WtjwJAPI0d7)p~V&3QVOa%P(Gq}YgI;OG+t>jxen at f
zln@`}h)VXe<Kx$s{g5|xe<l|>I5>h`AAvXJ>H`#tGtmKxl?Mo+jOd2Qb~dK1LYJ3w
z1k&2UQ5%(I)uoU3UcCVGX+J%D^`gD^>ecTL_S?^2{c!NIQV at 0-Tq3$a2t_V`h>p_X
z$I-!)tPUoI8-BtP<9p#Drm*x-t=^@F2yw$OQtkH>+;nN54G?y*RKkqq00;;7c{h&F
z`h%Tr4 at TwoCAjiTWGNz7g|H8f8j#-wVxhD}DJZq>&UD&mnHl0{!lZ8|rB0V|AYf?1
zbP67v--XkYJnLTBrx(?p_1MVsv8HidVdL(XK)w)XmUm4I=TZo%zd#dY7GZsvPQu*{
zjH_t)(YBndKUzg9xYg}-{ZZYaTD at TpsbzS0vC4oHzw9i5889vduARek8ndvov;h?X
ziz_#9HC2B->0AsuN$t^C1Au-^BYTV(y1EAdCgZ_xZ0oRhj^VsZTG{wk^sHh{CKVdY
z9MCilpM^u=HHh`UbbjgR)8=aH>)W55>^<2%-aTo;9C-V2f7ru`(aO?$_y~{RuQ4B!
zMBLwjpw+9^aDY&UE0P}}g_{Dll{gncoUf*)*Vljgsd>iM75F&?gov6N-##68ubV6X
zx8ckE{MUqc0590m24f<D%_lQTF)W`S#!*w{9+JKuP2*b(dE4uPhV6A(cCjs4l at +1O
zH4RQ$mhpUSypzD2X3tB#s>NWHtBj5RDtlaMIqN`J=49w%NM%PVsk~YR9)GbM*glj1
zGMyT6kT=Deb74rDTq|lo2_vcns#ZSa5D;k!!PJCA8LfnorONUGS at UW{M1B~<y8bZ^
z2g`tO|NM>rt!>b=(s?2OYt5Cf`1$K-iuWhEw9;5271;sr{sG(w^lGHxMZy<%2DoD0
zy{43!eFimozx at Vj*V=MqSEi3JDeM|%0y&;V4w<`OeSHrxp7$TX%ArSTP*Z;H6>#4a
zp8BvrJ~`RVILulf{1z8_C7(n`tsHXerrOPnDJ3Mq15Vy?%LW%u$3xjyF}gMPDQC!r
z*Y6bw3k37cWoLwZq**hZ=v-X7AQyx+DMIzL?vx#e_ib2TWt^2yU>yVAMs<ajTL|OO
zsZS%xsYby#)RPX<Zb)8uo`6WY^^5*5KopXS$a9D!5Cte8Ngyfv<O?LCL^vsED4DXR
zw at jYn!qQXTS2||1N3Q*qwvlyZpW|qBP+RT at 2QB7Sw>#)}rpL&-SJU-N=Bw`vULg-0
zGAU*SIFYn!$Y!jhpNU3XdM4<Bp$M+hSvyxhPqEJ~6$Yop|4R>j=Toos;p|DK)vu0;
z>q_*NL35;4JDtK&v)wS0!zu;~fJuUPlhKAwB-2v&;4U-84Bjeif-GDQH)W_&QWn9G
zWrm(h+`M=c#y}SgYk}>rY#iFS=cv0yM24_Ox`%LKVh%0j&!`*4qa7PH5`@`Vxz1u7
z4IN?1c=d!X4fIc0qU8|lc7Pl9gx&&b*`Jyb<j^Neh5%Hc&S@!yhx2A+V4y*~V!{yH
zlJ}v`hL_cI&}1L4)Mhnr;ciTpirF`RIy{w6R(aWsA;7WTZ4Rrv^%CSE)^<esM at r5#
z6XziU2*y_%njD8iXzh)Mv?cRpxe{$-ZPJ{k at 3i)SGU-xbZwrxC!=k|OU;#*U42&9Q
zHH3<J7hB#Cr(p;X4KXkPQrLi);YkLoxS%T(tDzNm{Bwv|h)|9XEg~}?9n!R6$?G1Q
zgsw5^MQm6Nv>!U93rK&YF&4~@K>s=%5s|U+Eha>wJF~KV&@1EWhz&~}KE(W-T;t4j
z4iSkWtC$BzAx$8lZwkSnU67Z^DgeXYkBkB2ZpVbGlm+OPu?bd}#SCU1S`SDi=zv3<
zjL{Q`*pdw;qaq6sSUi7HbDtau_QhrCz07lYILvVzrW6{?{ppW*rps7q<3ve1&4Dhk
z$Wl$(DX&Ww@)ndV@}7j6LXM=!^t`_uzdn5A=@4dX4t)6xM(xVhDQhV at mt~1aDltD=
zoPcEDtB5%>-wTN$N!;5S(Nz`Z1`R=ZK?p}$1z<$c14^U7(YdC~Vvn^<EU?}u-yb9I
z2xVgOfdN2xwi*H`!3+kjQ*cZ0^IK6R`ZcS|m;+G5qJfX4QAZ#X*5Ta3J2YhMpi?cR
zBh8U%>Fo2aq at c7Z>>i!EvzoW<nJxNYr^a6ezFW+6pEV}gV9^T_R+Zfw0<wfEO&O^r
zum})fQA{w=I=4%}LOvpbs6$Uiu!d@}5o4=982;sKA{q)7-HH}GNy^8ZacLEPuPF-%
zRazthFRfNn<)qbz$k4&yPfH+`48<|AM%qL}&nGR+bJ~u~jI^^^#nGaTL|_t(2wha$
z)Q#YLTs90gb0tUztHjHB7f7;ssY1{&s!y4eWVn)bMHW$gkCrJ#O8ozJ+G|W44YSci
zs9%0rMQ`NxP82#X1^L<{6tUbdHyfL*HC&|RD>G_}*Ga-_>p4QkXS3o>^cO*isFIPT
z9Y>@<;05MdD}U<uZH_sKc2wrVbyW}r2|OQmO9WlY4%yfeB&3C4nCZnUQNSp|0&FrE
z8Nx}>dgB^$*&oN1mXE4%TElhcG{tn?wq2*-q*dR_OKR9 at 6A_(GONw}ohTSK-QfNz>
zSHOj?Ep$^tvVDY6j76ZM*L>ZlID(3YC?>-^flOUdJmY>c96#~ykwgWR?KMwtap43v
zLNsqG+C;Kd<e5K(X6Z3xapW6A$nrLup1 at 0h(X6fhh^>g?O*E)!q6592F|)&#9u2S!
zDEYY1(?gJ{+r_rHU&vELWDy-X6kll}-E432XXx;!yqyOk`m;WfM}M~F%!R{#J@&(%
zdB%hg!c6!5UIp4!?dewVw#m%|A<`ZK1k0#FlH7XC#Ugb?xt=4l02im*B;@7~ra+Ac
zm>}^Ri1vqY-UJWEHVkO|bdag0gOKS6oOVrDb=?lQDYRI at P?22~XZBY^Ntn~zG2VE!
zsgB#N8DZQUY#d7$!FcA;5A`L~s2{N>T2)Vp30#~(hTKx&?ELQ9*4?!Sph<KWy#C;O
zP~Q^IeEH_a$g`2oZ2quF6_NQJAmQ!yD%CW7_3Gp+W3q+KDuKqV^;}tDRzcWEon2%`
z<G49Dy5i;>nVBU*8n(JA5Hf$(*a-`f1LdT@%qj`rOyq|TL4nDJfW_9 at XvwCQd35EH
zgZO{KVY_&^x*~j=<FrNNqZD~zaEnB^oe2Z$5wTXGw4!QQT6h8r&7b*iXbNhr$7HQY
zT?akKesHwKY9YCZ5jakC=F=0>c1Sj9&DycOclc=g`O`<5+yJ(NOBh#a<O8#0dsse`
z;?+^*VlOfN=IF5fO3&gAIQOzqwoqytOBAhvQWqjtNkFlOsPr&k{wlban<W;fUXNzw
zG3M>q2d)qyApz1V&pN!uA981NGrP35j+}JJ at Py<5>o{yhIM0|NT%9k`+8<Gp)`l?Q
zajfE2gZJ4C=WtDeyO)w38hiyrBDEhWx9p#RH|=alEL0YjRwnVZNGCf%R2pjCVr?Jx
zn1O|++F$w?de{mY<_Ux(YSg)KaS%73;76!dvR22}OyMoF=rxI=y2}j8NBw at J@^#Km
z45Yd!Jt#yk!!QC_R6~CO<vwhZa58kcqz;o+2iNC*=^UL+`j?;)Sl2W+1<nreQC=pS
z+ at J<JKGdPH=CP6}tIM%h?m7T=MRfYr%eD0g(#_XFLT5xeI0m`K7pX1xyGOs<o_`9B
zT=L;~{&yT6qgId4SL_%bMhRG4Z%I_oD;%vzu6cF+hY_Z(?3y4FI)D>Zxw3QYtcSIW
z@$q=2B^d-2O$lPYExvoiQT+qJ;xzwvxN0QR^GN1|h}F!4{Kk*%CIfcD3^`NBDzY_T
zK9$PwJa~cHLwkBbnY4Tra-$-njRxKz`yd6G=(1I(m*;vPaIgW*-|4sPK(p*^09Ll)
zKfwhJ9$7$@YT+8HR<oOWd8N{NlJ>Jjr5coU;473zTk;?{A~wXQ7q505KN1(|7l^0`
zS00BvTYj7vM6t$|ZzO|<i!b5^+Hp+nsY+<m$%XYvpPzYDzA(LpGriXYvwB)XdJS!%
z$AnR-JFQn!+F<!;gwZoUT!Wnx{k95E8Xb0VaPnGp&{TU016#bCq)NGulKml@*3^Ef
z!pkHP80wxLe&~AeEiK)Hl$#z^xG3s8mayS|RB*Vz`~3NzgjVGWE3W>*VU3DAZWKtN
z)dCK%h at LpYAtg>QptsY;9C)(pU4bTK7s?|Rnv5mDMzT%k^Irq+h}tJ56$5F^K%+vb
zE3Knvul`uzhQRav;^=ty_{~vc3j5GCd9gT?Yl8R~js~btLS95dG+3e2!%<yoqE4cu
zlIjh}6mB7HxjBdku2<=4<9V7BSs7H)oYphT1AZWPpx at f%HAHDFu{tCMb=FKj-$CL8
zG^Q{39sc$axTHPWXN$x+mSvZnYG7t=Nggv!1yp~8#dvu&JVn6NtT8<(LF9kMvzTlH
z{y__Nkb<6=(u_U$$EO%B8$GDo+;#-q<|Pq+x!=YJYzq-1?Szgv(HxB=ov)crbzI6@
zt<eAon)$=b7u6hQt~|u5i4>nx%$@60s;^yLVvpK8<}utc;}5Oiq9J|9Y~bjP3I(4L
zZ4m=DTS*|LCD1F&HG@~{g%{xuBE1TI*v8m>!Q{8xEuh|vS2E4yMvT^u14!NT$l4N}
z7VJp^sN+&n2R at zMqH`{{D2n65H!t_-GA>I#+=EgM^`6m5I;ZeVY?d6~eTSeR`225V
zYf97PZGjpS#x7ftFf8R>#4Bep?*C#{XO<~<5m9UBIdL6VWvl5wNk;bnVce55Glzrn
zb;4V0wNnb*%tcvuafT924e=WRt0I{~YX!dB$mbeSf6_W&@Z2_xau>6A;5?6z>w4>6
zI%g?7$t)c1zurAKG%2<a9YmhxvYt)*Ax)4HCRB`hm2Qm*iP|ehzObNe>_1Z88S*`}
z<qgJlj__G{Tk${^QZx}2$(=XZ^+KC^nUz$aq-VRBCWV{bls_RBhp9l-u3+o!pY_m}
zB2o&FP^KMZ_tcc2syrJ86EcVc)WA%B^{;Mtd6RQ$#`!F7jV%0A(u<bWdAE`Itv{L4
z-!dEC5UI(K$L6Afh8PVzZdIEjmqE~Z1AEI at 5Lhk(LnDni13T${2(m3+iGwRKg2eF=
z7B=n*8WXHDM?|93&2;?j>@hj at M!(M(zg$%mQCziml`*y>;SSI~sBlbs1LK7SQ!@6D
zqt=X;FPNcwXH1j{v-Z^Yl=>EKG*}>6OCRWHy}5?#Fi_Tz6B))VOC<_><h`|xwfn`&
z5^ixm(zJQ>DB at 295m<uJB|>y?PEU{bG=>3gZtjqD6bBZ-H4HI0!hjte+gw<mVHA at x
zXPTuF&x86c&8^>NK9<$jl7?h;chnhN{|&}Lp162_&2-b5wgGpEz*%h>A=4SAN^W++
z$vxvR<P_=M+C{#v6>l@$vz8Hirx~H$FiIb!KrNI2L5tZ`^K-8FbMmsNYjLB6ASk(0
zpzH|Z>iuLW7QVCpB`@p;yyI&eOtOWj7@(`;j)RKe+mdHtQiE^Wk}e?Blo=pF?_Ri*
zeK30Bm)C_slx1GUtRP+=MIgN at bb5<=-b^H;W%V-O1WUoHWzZJTZS4rL;$=BVq9P1e
z?WzGLyoT#O9QwHYizVZ8OMwrF19%rlKav9vp5yTS9(E=_M}IH05P4Jz57#W6-%g>l
zir5UD${MWLPtv-&VU9CGUR>YHi6pAYcG809*czz6zG{N6velbSU|=$On#KeY4rss_
z(74BdBS1Sc#qn!#@DhIf$2<eZRZj#-3nR65cm{_>#g+sv=E at lV+?#$Y*_D48BN-K+
z^H3x7mbIZ6%L%MZe$`=9Ff(|X^vQg6w0e;tB&5Pxk^dx11H(54n))LW5YrSRhAS*;
zxudMN+s=$)#)k-!6==walY{Y$ZhVjsi12`uAHmS`gBJ*f*pUc!oQr7Y1(u_4AI8ud
zsnaRsnZdHg$ah3F#Rp;wLqLcJCoeX1)s|z^25A)e2f|D+44H|Z4x&?xv0)twjfA;E
zhanX#Ec|jKgO{`!vqr*1BIj#b_|*uxIBZ-fffKEx{pb68$62x4I0Eqx&QQf<B^yHX
zlhrf+Q<IG_RSDTrgz_>t(veLalq81~t;t%^k9h^B(?U0q(qCC_+QipS?#TvXhzp7F
zv>SfKCl*MneU6JGU{7%nP^he_s4OBJlX}e~?t&tuP7+5FropIz%mfnnlk?tQTQw4G
zTl9L`1~TQJDqW>(mY6e6Z(TO;-gx9EMn5lchDDWzdwuX}H{|<V;%}0HDp?%!)@!mf
zgelZ+NSald1cA^*N!>)G8V3^w5r-13&>lG`%$X>J(EOy$8)i#25U&C8*}#r!Mfze)
zhiFZPVE9zk_^6UjFd||>X82lW5!Zc~#Dqp>SY(E{36#aO!DKVY);jO7bd0M=Pl5Qs
zAyzaE-vw;Suq>-Hl3d1`-XWVCUO~y#mntxLlg2)%ZC=emD4mW!P%z=Jus<NHyA>JC
zGGW1m52h^uI$Y5S6R0NQ at 1hD6-uPYv`SV(`_t&U!3}4cU(bjOrjNcmB$OFe=uNk0C
z=1pziA;|SfOQU!tOaUXLy}{2qJRG){^xasshSOy-*pjhWHgHwp8Q>&x39I%^$PPw0
zLdX5zxC^Y6wifaoxNYUfi08-+HC5xizNifcPtGIMk(e-%-n<<2yktABT_PO9asp1d
zPMj1eDY%ksJm8`U;xd%5q<v_P^(}0384Y<8MpX_37+&Oa=zZWX_fqgf`<8n^#mvs;
zzYB&y<)tAh*fxe%A(y(T at bJm2$@f>Y*%(0*!$7fz2-J;*z)9v=wYqq>40D?B(0)Lx
z0X!Z=hfvmHK6XJeNPtW at HJ0rkZF?&jNQ06mVLrepASVz66W2Juht-%@$+uQF?yqib
zMNFXyD$-*r49;CTrY$h^3%Joc_#|<YecHoaL at U!{G->-Z?~c91+y$#FEfeIZhqYC+
zWWB7f+5iK4T4Xt5xKDaB$Z#%9>V8lGO?psu!$_H<HER}Cj+3Ba#Iehp;_C3ZIKpKW
zI9g{Ofi}E~P+g5s;{XtqTG+eLTH9-I`h|M^fi$sGPRvwGMDtrsh>8Uh!m89G5D3kV
ztCn=zXg(I>TDy5kqj?mo9c_k5f)PJq6+3&|!2q)I#Jt!7aIl7W^R37KrE2fV$;0U-
zj$9x9^wXD*`*b^tJfoHYr=S%$wF8r~(D|+X|9t&?_u!>o7LLtC&Bg(C4+5YrXAw at s
zc@>?%>IkgAbO`_SL3!ryFq}KZ*PeyXhr_>3LwY&hpEs!FG}>FsCcnhsSSD^A`72#f
z>C{v<h%8)bx{-$`s|_S!4j&cn%r+x9wacv1WwNq(o+q|P13XeJ7|SmGEor2bJ)m5;
zhwetTifjhzte9ZI#i8?w?Q#Uedmwo<fW?R)g0N-Yz~+fT+Z$C>Cb|ynPG3KR8%Sj8
z9Ca-ZPD+0a7iN3 at Sq9X?;}+v83viUc8WI8D#H2#m$VR}8;tEfAL%_5{u75)d>`nJX
zwXCQj1VsO6+(fbQh#L9|lyd}133sO|v6YwO*R(R%F_pUY7p8#ylx4}he(HM3 at DzuD
zmYdd|cVDyavc?j+4We`bEKV3Sj#epZZCQgHntT=!Xg5<{MhY&N>pKiZZ>GC^5(#cZ
zD(9;StJ$zin(5)y=nq5*7I|6!WCw}xuV-;SV<l!C*c((Q6v?=o8>$2^0V&CpR#=hM
zScnmYvY};;13W9&09I65{++H)w^AuurwC+C!6``$ZU0xWs+?phpf^%XGQ={$=&Krf
zsV9&!w(4YHnMi7A;YS_^GCUnEeXu3YqlIeOCXv)6`>chzz1XrjX~n|cO<8&5{R=|h
z`v{sL)h?<vbLCccvQ2`{8vf0 at XN9kB50XqV3vo6pGS4w0OaPNvMj0!X(AFsWye&V^
zFRRus$38`JkXGc2qLyqMy04XpH+4U^^PIJWrfxDcWCgK8!|x__wRV)Tn)jDX9a*?F
zJDy|={QWxy*yvBA?S6gTjtaw80cOrHH14kTC{w*<4aV@^94<Ueu*Xzx_FCcWY!7;H
zXy{5Dx@;qbIku(AWq}MGUNBC(b||eRp`G~~pvrLuf_dY9g6#c^uMmRs_kFn0$zdC=
zLo%w!2nu<pc>e0;58pq3^?i0ec_5m42Mr;_rC3 at epE>UpCI;hMG^1`6AH4a14S)dc
zA4#OpJ`RJs8WBWX50GxYH*4XX6NX?UEZ&HEIoDX#<j4{ECytr^AilMe<tK-9 at GAu!
ziRiuI7#dhTL3raEO;vf1$<X6OB<jWb`krJyL*969a(MJ+*9))(3COACCG#~u1><e&
z+myCLgAvH>)K7<4(^u8-)k_I!r|=|(%?dlSw#p<9V|N-h+~<maX<WpiAE*sfDDIsw
zN+JrftBIv^1nD3#4weillq5k_!}m-o<9Fa6WCU at 32uKwT@x5+<^<OW?6_q=!G~CnT
zw7sx<6}8v$e(X*9z?itT`mte_-f8OLv;(5x{&2hgQb+OFujKiqSuAu=+Jr}|ie;`y
zYZ80w(9+fH9nMsX;svtX!%T=UU0?usTME<_nmJOadfgQlYFN at pp}ltZD>0gef?{G#
z&i3!1)aKgOMu at d1REo+g9XYh`z*oMH<-ywl at K<880=QKHHbsh_Jz7u78c>(ldT>Zf
zOD)|an5n?70*X}=*T|9Ymd8qZJD)61Th{w|ByhU`)tF_T+BM0w626>Qcac&a<F*pf
z!xRK})mvGTn+8Ab9v<+r!I9n_Xaxkdma>Ip6BwhLRD_z95O*S_(ln-C5JI>j4KI6(
zss~iQ4iq4fop{FOvya2kEZt*Vfc0diPd}Dq>ejby&p81ZFG$GC=_^^LGB6}{z+p7f
z-0C^n67E`ohP%kCJD$!O#VUI#`v~S~QKOt~_7)^8{1`isgsK)iR~uWBD0u>$9=a^)
zRa?s|9vB>@x1<2Vm)yht#-;-S$!&_zK9YIYr4_4b&dI=G4Gk_8eWKCnMI!UM1+9Iw
ze{^*4>g7p7z}QveOj84f^-xn9?sZWQN0~U##29hNayICn{k*e8oobB}xCZfzSm3x4
zPKdX0(ApEP%e3dJ;uEM?9g3m&uwHYZ-qF}D6mF-Jq+JJ`<(|tp%JN9M0 at -?KgXL;x
zX`KTq0a3ds$<x%YUSeDdXLx=1>gfS)A(dC71w_yrfnMpKxgZZUekmM=e5&o<%+%MM
zQH at J<%u<6sTAh|yFk;M_laufgw)9o8J)6jj1kLsauinY4xIQsaM{=jhX~9aAJA at ux
zSC?_AZ>ov7;u%09tT5S(Dp-Rzi7yBbA;Y7iF|vxf0mir6GgI|r6DO_G5Vb^tpBt(_
zK@?Il$}rMO1G#3?JUO*WB9vRZZ~Ij4bRmR;NIeSh(`#%E7-6qM+1)X&q4oed*Fz}J
zMbu$*&=~uJdk|0(G!xYZ5PxOHxUkTu=9C-B#WJeaU8F!Bb_Q}o2yzq0!VZfoN at 0~r
z4+;V=Au3c<Ea>coi&G()N#!c7K+<t>2+!?nj$EEXd0{4iqJYZ7_-|hq|8a%WW}Zgl
zeMz~}&c8?9Cy4*DqKL$P1)fyU4|fX020<c*;jn}6*cSaN#JJpjM+&fy`UG8$->+=S
zPKTvUiAFPC3V%xlr3){psNo^(75$tQ4%IYxgG?i^u&vY#&mq6TOM0noz!dK*1zWZ*
z3KI6-2YlJQ|1E-yP-)uam(^8yvAT0NT`bfG%I<7w2g_Z^93IgqjA)FbyRG{PAAIja
zrdSbRsETya<Lw&w*mHL)I;Rua7}Ism^jDa%2lrM_G1MUzI(!LKPh=DPShqWfUx}OZ
zHc<ssSkYmm|E+r%SN9ekVuAq2I{w5hg)}0lY(gPMm>1X3ok_5|<g%RLI{XG1DfWp)
zov_cEy4lFQe1RU+;Yt(Ouu~A<2h1$evO$xEyB6dSE+y!xoNrf<-|ONE3AE!*9Svdg
zCCgbA&|&8T!jAHK6IZ2XLnabX at E)Ft0t(-RiDYzwCf6Ckw^SAS&=5e==|-4Z8L?oo
zM68?v?bvUZN*(MveDT<2T*YohxduR`e(w~2q4(H3umZ3wB8LeK2Jt8o`%FgU4C|#4
z1mrT%nbPSo4y5ifSt9_I6M*7jQq4>tfnIVxQ4{{-X at wONYz?Swvp~kCKA}^@ujjeJ
zdH(~+{I>HLn|(E+FoRmRpx3ElK&Fy~B{+8n%P&ms28f3Doky1CVSENUfg7GNWi%@e
zH#!K-3~!sgKu?BW+2oo___QgERyNt2TX*l>fAH1U-`pu4z~##*3{UUeyZ=>z(=bHk
z^7va>#nq%HR_>OD;X-}BSiAS2Kwj>~x*KbfzuS96El`nsR__+W=89JD?w#VU0UIh7
z@@{@r=@gX-Y|<yI&hIuNN1=@H78~f2y~bc;Q5FZGZS0SgNmsfkF^7s#R)6d}O6RPB
zK&(#W2Mxtl&UqI%2=v&Wn?2~bH at I%Y-4G$<OMFBdLtHn6XL(OnA|no#6KIvR59ru*
zNWVoNaCHFY(H`yz%=)<7fO}oI{~;rH1z{6Lkqu}F&<yUcZf>k at eTCPx`ay}W`N~85
zFz0ZPvK0Oi1Et{T>+6aFW0bTAk<SltW4=!*3)Aa4Zm$3l&|@toFzvDD%JW35*m`Fc
z56RQRnc~NoT2gn#`~mOq#`#+7Rx~4P4T~C|L_Ig?u$#ZawaP9NV33~VTnyt1hv8Pv
zbiA}wO()rqqi!X1=Kelrsm1D*$Q0zkKn*<3i6HPaNF_~4cc(ZwdL_JE7<CLh9^}$0
zva})k`E?TheDy1N^tbfU19{X*AKjNn=jo$+^5`;sbXOjY(nnkJ=!;?hY%=~feX%Jo
zhRLH1c~T@#w9L=R6K(EA@<jXmA$g*J9Vbr|`q#-59pZlSMDg(dB~KJtf6~)Dh&@3g
zrUC9jM1KKKOh(F^6?bvt<bt!p?M0ILR4R}#@A96R5$BgC%2LhJ-(k66wW&ItNoDjZ
z_6xB&j(Uuqg><Qb$AP}-gg)(GU?+i(ECyFgvX!vRGFXbO)x;(rG{?^A)QHfPg7ST-
zP~WN>aZ=weDep?dItuE+rPqoL>qhlKsDnb>QBzOGLDf7(8F-*6 at n5^@zM-mnTFQ}O
zYP&Xnv!1>|PSsuAtf=a2FJP-#&(`|$^lWK}-~cZ+>WXsBG8F}z4}<=dWV8;?fEb|x
zRU(PO&l0AK?a2x at 6CK|5R{~+2KnUj)YZ14rirnp;LcV<YWm=4&u>E<+Ma}Xi=>HAm
zVny<xtU{q09b{3YJ5R~vz{iTdK#(6L-#B~nF;%}T!2Y>{&O0-O+k||L#1q;zd9BPw
z&&aUpr^Qx`qFgs~cOfsu)Kaqt+5f=Qgy7WsFW<btHuz{CmpLzKiJIy at 0tY>aN5{)L
zeRM)2iE3W1kGTq|Pcf=v=$c4;c{N0g%DkpmvB5->4y$;lT&%YPa*CiS$~g+1Od0)=
zyHhA=5>R5zn|0I9q;q=39a2dxgUjkZs0tB_U+MS|(FpLhF|uH!8RMEI_z%Xy6q4aR
zG@=!c2emADBDGMZ)GaS%T!zj4{qMzRS}A1}hJ);Mh@)P1JOGNTQvi}eftP6T%VLWv
zB-2$=Hp;VA?oEVJk_PC`3&-0PT&%f+dv4S<b>vpmiOQZf5KskgHB|IRX3)g_FzyKZ
z45mN_BcGQFg>X0Go5&fBW;5J;@zPElfu2}8>i22G6$@W!#sfG{01fcyU19Q8H-Qap
z6~A!$VP-lHn8$9;hcgr!BJJZl{OxwGk=CgFzSqN<v|w5|owp&4BwnnsanzKyGWA93
zCIAtllsqzES<XZ92K54s0&;OAH0>Xk2|hpR?EdtaGo65YB9Ux>&vR+0_4#`i2%X=;
zT_A(jNr({FHGcZNHZC}+Gz-l&ZFY5&4YMgUn=-KgiM-6}G>~9Ek+tXZN;XVd1IxH5
zh4_04N{siT$ta2gHJtr|FtfZe2s^mA8_~|PjN5`}V4{h4<aQ};NsYjBc!mk>k}YEs
zruU#jY)M!ur?PT`yr5+Xjv_dNd;YW(iZ$+vfQ9|x<qXcQ1nY6N6%=?f8N*+?;k^Qd
z8}1i49%(2eH`mmqHZNhmHT}_RR6oEmeE+Pmk;`ER40_l*7*@ODP|N4E=(LpA%(DHx
ze06-Vx1RyR01z-#La_A8DSM;4I}DZyhNhBLmyw6lr+Iq9{GG^iP0UuR#fSimm2Qun
zQ%MCfW6n4}`de*igMo`G>A%dbI3Nw(LY<Mf(9s6SNbb&3If9Ofm<JMy{ykVF-r(L3
zk2`J-5e`m#+&Kj!>zq2jg3{&JXhnHd1GvZeui5an7#1=n_sa5qNth;mSI+LG#3t|X
zN<*Z`nkIT$TtW?P!X{vEWH0+&vYTvmX0u5{H7>=5SMNKM5iCD^TZR&WZ!auAS at O!+
zkIZI$LIl`71*>sO+ohQs$saL62$?{=2XP&s7+eo}tAeK>0_++(Cgr517|cCLmDTgD
zpk9J2)w2QO(mqfc2vB1k<qWCBU`4HBKv1qBqLCabs_bErWD}GEZu6Vnt^o|blL at RX
zV><C5fi2_1qn`Sr^hQ?bgjOp3goPOE=Ufzt;qw;QSvmqI3m`wj^=qI}f>%M0jXJ at O
zls6g6iF03JnTw>0RMMw2&zpEH1awjojSXwpLhy*N#xjx!Tm4L`QE*D#QPE$@?F(4=
zr&oPM<)C^*oCbQ#KsIcrgpy7JXe8sn={r*fBI2|yR7pz#H2uki4l$H`);y|dAc;gA
z!51Yf%zBN&grQ7p8;J<6OqOtvd?m6EaOIe4 at T8@s#2-MJKlq039#fRDB0u at SF^l5p
z&K+13R*Y-W8HzW}PQBZER$91rf@*g2kANBdmeONJ^MT*x<1B-zzhhy=nzc#^q7KnT
zA9}!@0vT1I^B}#4Xa!Vw at SeI7LZrbF*y(Lm;tS&~a=$QqPoTfVLJTc~S0rA*6qo85
z+!CcrSNUSHY_YV>gdz)pkd)l=m*FmeXhfKT?f&q>y|h_yshCdA;<^gTMI at k-J`=eG
zalh93d~+G;=HK_bvv)g7n-7-Y?M$~s{oWbi%ja7xvHpmEQ=_2(>r5VE9S0P%^A!d4
zPTfMYfvNCuUT?&pQ;*qEGbaqGH2(Wkaq~;<QI at _;h2Y<9Ep^zfu&e+n!t%w1lq*uL
z*o)5hD8|ks-M8CM5xeymo at VVfxzx(7M8FfDnd%pYCcrK;rYmP~&}UPk*8~wtcHeTX
zL)_K|$RD$_q>oacHO6=h#CId}W1r-|NY*ZL5}t0Faju3Bx-{p&mh!cXh{Nx27HfWj
zGV#V9SyqiQ^3+*=(Rx&B!MKUd0;+AVcRXHY<-A*PC2&(){7BFj=$WmC&J~@pOXTJ7
zcfn+E)nsonB{kcmnd_17(THlj5=<RgcWiN+230uI>{Tj==9{ba*^KF{It8AaGwR`p
z<R*a{FX5(ysgXXsJoZ|0m<UdJ(S~}C|6 at ajlXSpGh9?l?om8q*`QvcV^lCPkl2JnO
zL*o+87G&j1k08m}_!0nK1zQA5Bv~Aa9iehAD$oi8y3+lVD<?yQ4M7AD*ddQWdXwm9
z8`@ZFZC?#;ZX(vSRh9`*Y?n1tZz?UzaD!}<IpkXc7rp=7q){5~S~lMGtLQzNj)8cv
zg?xsyC;A0-;8tuGDAJO8r6Tk!ubiCou3?3UdCC$;ZLaV;jA at 2ofD&YdV$$UyuEM-Q
zs0|221n1UZc^Z%nS<23M^fMN#id>ODMM7OTwqu7Q(YM6$j~2_6CY>bNJ{oR%MVLH&
zMOwzQVhK42nPVMjn-7b>z=**#FZAQX&W82oeq{gqFzke|5yDzfZy<Oaov-z9iHAF*
zoh61hjeZ4gyp?d4Ae<q4!C at ht|K;eG-Ux8}Lv(?6P&zEwNoN2Rt$Pi-%gum^LN_F$
z%}30P5nRoh{7-C$0l7BeDRSLqSC1;`cY=kFNuDDAu0%BezZC=kn$lV(@?*dq=zv(y
zcA?BxwqZUbRMk`Uh!2gki^7EHvQ1saya1#D3ttuOlcMH=$l3xCnaBlW9Cn7&>|}0v
zHk7>T at pTmNNged1?Ia3lrbrKw%{S2-IDJX=lMp<JX}(&9TcfP!zzu@)^ugmS#u{OQ
zm_wAOMBPv|hYfphYxL;~Dj(~JgF-`$WH4p$XuvP{&{p>~Qqdch#h=tf(gg~DXfH7k
zQfB9f_RWGO+2eiz6QEvYDXyTokuPU)W^bua70ysb`0p<WT&7;{flbAxFao##vw0e+
z<W}64Y=nXMT$}hVfg-d<^gXOX5j#nyy#^U4M57dzbb^>VQ+L96Ii1ygDQwce^x+c%
z2U=y0xITa_v4%v&D%;w)_thPSpq%!4!>L>zB-=dg&0um7;5p}*5m*M{7&$?PIUJhG
z9m9kcfnPX#$h}4hoFgu7I3B`k-R?ZnQ~IOMIqbZ61EbxrgBVlj6u={vROH(MTXgNi
zfGL+aE+~kJh6gBQutkpcwE_``^o#{w8tK|_iV`_oRltl(NJmur at Ffw5Wgi0_s|*wT
z7F?$%r{M7aXKsWf7!(RpJV{;!(Ode66AG2R-y3w*G)S62se^sRiti^-cqlCebf6F{
zUnW~c%3$jBLWW7dP?XaZ7N{?ipvh;emE9+#7779JYDJ8E%G3e_7~VsSA)_IVpq*hp
zg1b>18FOi?3lgdYwFAuZBDx*<Ns2X$g*e1bBu#ij8ubQ1l5hh9<;cZX_TFW-i)_?M
zf0A7gslO5uwH{DOg53_ at cdo@bS5oVIAp{G??;VDQS&d}Rzw(g-N%!$u$+SHt8>95_
zM(~{rCSs8d%xMhu=T?vGc}^o4L=l$xfPuc~E}-+OI}V4H5)CKPoI!k>_L!PY89^ME
zUE$S|I}-DaN1d^E#e_Cx(OF?bhz*cvgB&i;n(>0xwkR#!bMgusS1Hlpjb3&n4Fs8>
z>!4gHrL7`I#dV%ve3P~;J|$n8{$%U%A(S63^KYSkN08ajGL|6Oaa)dkiJ~;{URFX+
zh#N|PC#wKMmAsA0-cuUY%h`f%kqeOaT_kZin at Om{Dpqo+6AlsVco+z=+m;mXJ;c(e
zFbe6oxjf+B$h(QudPCK6K5dzA*0E2H5k9QJyA43XFGlN9Wmueh7{PK#LvwMG(mU+l
zV`-M`wj$386?qHw?Gl=eMhr#OCYf5%ZTxqCQeGA~+efk{+D~zQiUp?MAfMv`Z0(St
zBu$jYO(83GjP#ygei>7i1_l_(9Lvr+&6p$ygjZfvQ7NlYtg2YBHN`7R85XoMAs^WQ
zgea}xf at Xw1xRXKUz^#JNvgs<o3|uvW at -Jq|R)wO4=>%23j9!k%n*d6ok`Ac`VP60}
z9u@;@-Q8eW+&@CV6}$p7pdjU2`d!yN8BP^9Y-<69CXC$s)_N^<zKj-$O!Ez}*I<_Q
zYncvT)DKLozyG_&73|5Gvqdc$2ytuuzt(QQol32hlmA-!>GrLqwcE?<Q$}@cz1`&c
z at R<~BG|j|(j5hY4L21B<*}5K>#&!hz4rp#9=PQ1ytAtM at kExwiAN)s9cs&t(9Cd#R
zWpkZ4E5TqZtiy*=%P#_AZ`L$q;o9ZogyTpHf$#LssYueoPc1aGZo6)xsL6XKwNhku
zS-%r{C^w_%JfoM7#5ag`W*I!4?mD<J(CJD(0SfKT40^DdtE!GGUK{>XC7%*M63Okj
zFxibKxd#RgPDn|zfAr?OLmMy|BkzB3o1-9w>mOA^jkobsV5gP{D at 7NH<bM at B5_!BD
zW^G34Pd6$W1r$WD1~<vCAKXL88=WheUn%$~zhn{0uVNo91#W9at*7f`8P_K!wSC-u
zP~QcQ&#czG4z=Ce1)Iq_gjWM{<JNZhpmt1ohw{tYm<NEDxm`TS0PqR)^Rb}e`78<H
z+z}H1rudeiF8L_~OMY8F$rGPmG346e!!h>%q;Q*KI(*?Q2%(LbUg_)|j at htr#PvBk
z?VuR7Z!!Pl7DI1vzE-@!c>o9tb_A&A*YXOXSo(jXiG6TB=p#c1b~AR83S)1NE2Pj~
z&ltlQHU|@l!bny_hsbz=l25M&i2Nc~pu6K$xKqlFw0E=F<wHbgJzpF3X1L_uIs3Uc
zS^w at F*Y<YcqJqHpUvzK`aR1)DyAL+MxPSvbjELQxt-Bi!zWM^j-R{oaufDps8E#KW
z1`RAMZtXjzt3>f+kLLQL<HPp!a=^$B1TQ$K0e`T|$Rq3qvUnuo`m6YDet+a!Rf*-&
z!DS}7C1UBZV0>YBQoZ8d2 at ff|z5PRH@(Z}qGlZ%j6WAX19wS&zZ*qa>Yuz5wQUhY6
zGoNu`D97X$Hdz7El2w=Q^&J?6a2ZJK2sTVa8d6ALH3p&_sD^=XmQSzF&&fn+>5iu;
z*naX32=8e0i)}(F_Ac!acLkUG`Q?ITHiZfX)33|@f9SI2z?LnOO5O|K2zSz|;A>R_
zg}Ht@=nzHH5n+zaOBcydq)6#?fFQ=iVKvnO2!)@`dOH>EICRV%LaB?`jJ%NJ;cr`X
z0=l``d~&?)`6EmmvpEWWB97}uShD*xpmjl<Me#1vXQ;(sNi(=5ULuw%CaXgZ1ROz7
z0c3VITP-=<*-6+_FdZ5~$UMO7!jTKjAmn`9e_i1;McCOM%#tW{ije)}uAWzy!TR;4
zo-hwO+2McyW?AE$Jg5nt{eG^62i-et%3K|J=W%=qwt>a0nce{vdu8R93@!yQc$x&$
z0z9Okp(x*fp`I$Q$+p;YXkXHRv9boa)<gwk^Sr<eNJo<iOsl33Ti`v&6E*6E6eI at 3
zW9PH#x%@Z4nO0|4p$Nev!#zi)tie8uAyyYUUGDbb-~u-YQX8D55*}>FslCxJCFZP&
zIN|C#>tI3SL~gA=I%7Eeta>z7u%X;j*&Xquf-`tIB*F?H_vEfzg5nS<aS~-#b;9`q
z_W&S4FW5 at uqqHDY^4NRulfolRY(B3t@=6;kxW<8UbU*5huFx6I8vHB~f*}FHNUs(W
zoH at b5TU?K?il0ZgWQ=xv9LdPgu=wEIst5Ux7P<|^fb78)tkeP+jU`l_r7oou)@0BC
zq<LK_kL}JukW;dr*y+_|!pxF>Mg#)zqK+=+o8s9i#tXCm=sL9T{_S$^GC`gqCR_#%
zWLoD4)-0|ZB0LViq2QlP*QU@?&loG>qDNJPLb at b2Wt^{lZNXfjV}$G!LKZT{4+6t{
zT}s!kf&0A+X at qJ0H1}%i*<&7Ir4kwIgJ?h!kyt$nT at sM{8Q{7El0>l78Eh+N2Hh!~
z@)Q5He0i9<4-ScFBAWR&?_gOLc at p`Rrdiow0B^zu9Vvc>NJqh6!&Xjsz2gVWUNK01
zkIX|N>yjsMSs3&x#|<?YC<&`vw0ve*bsbzgsG4F+L!%6>Lt_|<FIeoL9~Q=UBey`j
zF>I%`uevHY!L!4+we=^+Cq%y;@l;sj7X07OJAXB&!?;RoZGG^v#nDd>E_>aym8D0;
z%G2FH6kBUw-=fo%MTm at ok<gc>xr{{?QTZveme52xqq6s4QGRZ_kQ4o%#{qPGx`?M&
zTvA$;7xZP#wh at r6hx_<&!8)DbEVDOVZ{+cbu~LI^ZA)1UZ`{3pw0)^zxpErC{A{mZ
z!d*totP{Vf)l&wC^_vcgAoe~;NVov5s}jLl!5xbDmbi@}Xb<3Qeq)63YrqZYjG{jF
zkw at alvWvJq?_I2i{Rh`%CAg!oH885uMVyev4uSk6-ceSLElChao{qL9bze!GvP4YR
zp6`SB4$ba%y9hQgeOI}@LOmY;m0CpH-mQ1N52dG>$xgcw$_ApLPYLHG(w8l`4Zri_
z0z$0qEQ!sOjL<8GupTJ9tcSquGc&E|1zYY){d5 at e#VfkNXD?n+=oP=^Z-1m3rl^Cb
zbgI0m70e}D^N+)h#~H{j*;tOc=owD`lt_w5Hj!Q=Mh#Tb%b$7httHW(G&xVq^|1*V
z6nlMcsa6n*0lyxf at z)w$wQ#IX>i~u7R8D+>nYzs+l$^6GM4AAl28hseNiKr_ypa*?
zIhC*2L_!+INr^v*U<%6ddp=80up^ri7nukL2s1bmNc`NpcC4mndAvjq%E(_sVEK9B
zGJH_Hi2#239#nY_ZUI4Ael5!$kd?Nu$!NYUzWj2zpK=YvaPUQ*LaFl{S0DhWTbB`I
z{p1W6_E+#w`#>ZaHu>~qx$n`<_#UUt7GFkp19m|fcd_7?BKFMyUf^lueV at 4_I@?@*
z1oemd?=9NEJ`20B{9QU|b}c}Lsu-U=U_+)Juoyq=u_TaN6&@Cni{g4OPfY{7+J^Yf
zyL*_6^_yEML(Rr8!=|+?+)fD?wn7h4n9y)k+$O|z9kCc at NMeY{i5IMXvi0#FHO)$m
zRtwq at Y$$Rw0YCV?wk$F0jb-5A3J7U{E at P-1i|Cx{WJe8+fTo}7+$JN1bBkPqFK4_-
z8xTL9T=DSNL6jyjEh_J9in1}QEN0Q%h31J~A<zXN>LWHhRr-g-wGXD`n5w$mxbHKx
zSA3!4gia&D#x4+O4ax~3$p7)#{vob-hJq_rP)_+*Zr{qwUvu+<z54YUoMW$sJ0JA#
ztw);(vl`k+z81)C2u^>Y;A8s-CdEj1>R2Z?G>6v^%YA4lvmU}wLN*|RJy?0#2x6$w
z<IDq`6<Q?@JXwcfZA*_D%}}2y2n^X*E|b%Xz1HHD(sAzd$%2+dD7le6y^=j1&?L^y
zCTW>QPWV3sAFhT(K7eUE>x^0wNE;_L*b~7H)5BFj7#hs+4PI;T-RKK?#^)Jo=s(Tf
zD&!!vf&P?Nf>?9!)yuuz<Fx1s?3rV at -U7twH5Bv@#gZ0U5k7ni!Iz4cZ=OG2N-Iga
zMvoVS$zkmg=BilgpYzrYcHr;Flb_>gI2VpWhLgZ5h3`pcP_y+30tQ74-W6^%ay8By
z<Niqw?$)XYunlzr`-j?mt4Q?i+JjEagBo*1oj4tgaW7pQ@!(O$+vE}&31SDa#i&9^
z_UwQv5<ePH<W6xKkQ`9ZeHzFYce1P5`Pa7)=Lp+`a$TY7duyAd2ARTc{~Q9HtA!?5
zwn7=MFh$~L&qO-0R#CJW5cJ*#d at -}m<mP8(mUQqfJuedRDe*u!fkZ~tJAyqYYJ$z;
zkH|0oiPOji7nsW8&C$Wj9|}cfGOMg!JF|RI0`$}9j14UUU>T@@{X|IAo(^*&eUA@?
zl3I}{FYq8AT at Bz>=MT$bIT;={`z>3_#qP@|2`sh9A=QRR8{o3oXh1fc at mNhRKWKsg
z&}A3|v5+ituRsfkv05&Cnn6OtmDSHSN-&dtU}dlo;%ln}KI<gs3Q1pqMl%>$9;3tl
zt$%*4(gR?Nu at B?KW*&xGxuvI<=9rA7Qoq2cd~2xss_s1D8uI<Y%iY62;rb8z$v&v#
zryNc5<>djNDZ22uMih@>Z#bSHRX6VnldS_vTu(Xelfj!lUhNN!aXtX297%bfIHf9k
zVSBg!m(}VS$2Rx|!YP;O%q#le(i}cN`2Bvd at qrWRTW6n8;oUVe>MikaErF&5_#G%y
zooH|O=$HdX?4M~L(jmE4g3#-DFidPU<yN#Ip$7<R at _AyI*RPPU7s$sMFrI+#$|3W#
z_?&XPU5k5fx`d0Jf&i{GU}J7eY*Fa{s8A}qbra%ho4XO6T>CW2i?Dl-OA4ZdK#vG6
z_lP2ejrV-oBecobv5pg-!<YVvnl7I-LYK5fUbe#vDYfHMR-9XPoZKu?IcNf_TxjoY
zEk6kjN8q?9jFb6>n|t<>?*xaC?dj#9(idr>CyEbH(q^*H|6lBVdt+1Av2Xw8Q*3<P
z$mIBK1C0X&2TbBq0 at OC?X-TdsTe4BGC0CLIB<**<zu!F8V?SiskhHxwYJ;V{*JIYK
zSu?X{&6=reGI_1%sx?gppzDnSHIM|s0~JC|%9#5{LzoNnj1VRdiJ6Kk%FsE#?T=0n
zKCDx$efHUBYwK%wbT5G_YGlBlpvx+}1u%pNWLP7CR`l)^>hKymS1jKA;AfKPgr_&+
zup~)(a5=;qMN=|B!C5i`DK7%%>#QB=gy<9`0wZE}mX>1aazi(BGtVrI)!A;WS)C2D
zS7B5q;pRZ=AK#6?fCQia2R#w#hgdUcm{;Q5mW{YyA*4Sdyz)HNZa`v!#2J&8Y&X1N
zZp08vLGW^aul?oT^FQzJ?6tSQ+IfZ at L~@WBPa;c~@*7H7Kmnw&fU^f<2JM0dLg*s5
zUYgd;1trIoq(B4LE&)sPb;ac>=@rV;K)~XPgUec%EA-I&?XbHM3d3kxP|9B4qKWDy
zv!o*A`DmAc6c*<7r`<F2UxE#giNNFUI0(DOD9_y<x$<f89J9hiaX6ZXClUmv-f_ut
zx=0<Iz}Q&_YVGdSR8e?BF)rO&auT(0cPG;a?exQ at +-?VpE at -3FS%yHIvur at _N*eee
zNe6fQIlXr8BS8>FX`YluCYDcgxq=pwFfa3=RJiX|>TgOci^i1#U at REM?EQmP;!I31
z5 at 5nqdBls#AkqjJaEi~NPR>gkm!}xlT8A*Hx0r+IlfmKm9Ns$sUHbR at L%af)H;&UO
zqXd?oaz)POJiS$*l$Oq6q~m-F^F9qIC6E4u*P0`!@-%paH_l4AMd?{PtsoG}L9nlW
z3=Fy)n2C)ed>k|~aqCe_9W4U*Pp+tQ!=T4XFc#1?N4Su)_Xsr at F5|mA(;%bYXQdF0
z8~g>En&fyXWzf7d&kkwn_#gPu?8~8iV{z?+EEl^HG2OFbHj4ZVEbYq=olqPbHG#IV
zBYn+|CPO&punWz*5Dv-GmUq=jC{~i<G%_N1Jp)eQ=uT8)_E-CHj}2sCfab!^)Eb8H
z*$5uc$K6<7MsKW+8a9uOBl;RAaPXFSub6`)7BP3&Lp{b*E06+_-co8;YV3!}`H(Ad
zpbklOBDA&}UiJG}9lYq_R1iBW%pqpS58-I(CED=pnAD1CYaGODIvF8ifLb0|s}X6>
z5K}@BmC_D^`8Y0hrgUhH{Q+svQ^x%+tZ&_7Zh$rq-_MCz&{P3D?uhSOEp5E*ot`!$
z{D2DpDL>9Jqd{fB?tKV at 1`RP9DTpgjMma@^D7n=xKq<@oYS~6fjgaxn=??tXcnwfb
zE*aT`ubu%<xVw#CgTn)^qZgbaJ`oN%Pg>fB-hQ7M6;Nu7>~lS&(!z!j=^FjP4yZ?e
zLc!qNOL=QT7z`drCMClIw~Vfr%%2S5RHofR;T1e(>{++Q_w1lTMgGa~U`SBsVCKQ5
z9W3nr9G|_!O;ql1C8$BA6}ck|34ss?yt$c4EZKadNVtd5>gaQYAHC8yU- at PUb9VMw
z+35<dSu2Ed2(V$lw5_IM_6Ezu2q!xK>+H<PjSN`bk(uoY?#MW&h*MGZMP at baQ-cKb
zRp#(<evFZJ4L6BtJ!cexxW>{yW<CIvAnyYpqKkNcuvL7C(4RQuw-bnviOj^E#3F%@
zJXxgpqQRmA|2g{rr}IvU_LrL?tUfs}6=G9Spft*As3Qka;JY~fkP`r2s=*G7=T~IF
zNi_yxgVj!a5<&Zb0&s$##s2${3Edugh3DfB7l^EZ&JEBbo!n^ACkfy(`w)YLYL4FF
zk^t5R#s=3C_aZ?%2z>%r6b^c->GEAlyPX%Z#LaF6Fa=r8ZVuxq1P2U?qhqdp#NR!o
ztN4Z~#~KMB76V6X!`o!gh2H~el$^BXW~R_F>Gxf_tO$Xuz&=kflEJ|~%+;+2dqVi}
zB@$EU%W_L>4a0-bCjyCtpgZB%49i!LOWMh$22fACMQ-`F#_Sq2eMm<VsH$pf<c)y1
z&{&TjT9#6z<eq9QQDGN+$PdQwX9;jBbe>Rh0D@$d5Q)-8LW$arv}8h+qm~0b#@vEu
zg<vqupqE!t=p&Z7U9CzMH<Pg$EZ}#QssQ>M#_|v+Z$C~nn>SLbjB&1uNiiyci6GLS
zckYDHL<cuBl-5l?ThbwfRbsSKou6n2WUYif@@D{Ll?MaHc`KC5k`3&ZuVN2L>p;^!
zPX*JXU#Jnd+CpAKwYEf_dOD+Qi*D68G(gyY*~VvFj6^(;0}!BD<V|!87{jqv*U#8Q
zRRrCollgPy#SC!Bq2MP=F-YH$%!|nIh4UHbPvz+`UlZ_lC;_ at Gne5iTAv~l;syc>o
ze(9}*cH9EBoFWfyoV(f;leL@{4kQ{?4ceJG^z?I2<Lv9Hl*7Y4VS2}OfnpdLC~sk(
zK+`i~yl~5 at zMFl1zqg|8l=KV3U<rhKE7}o#It5I>=HW_Ft+mg6HiNk at 2DFpC8n4Ge
zmb*sjmmSF4=5ctUJ|6Q7+hM_}STtTCyZ**8b!d!xEi=1?-Jk;({Tb7Gfh7-_q!cpI
z?h90FrCyL23z(l>92x6)>UKZsQ?6!5YE}3Tx%k8jxw(?PM}$^b69rY?bP70<vGva`
z&OAdOmT(w&qW8z-f9Vuel>U+$&%r<I{MbhxCF=1ajHtp7smLc2NsU}K==dVw;xFLR
zARb(bLS(W^!($v9YJ=%gReOyz0mGtnjJXgGE^U~0q7dbfCAx>HppELaWUr1(R~l}l
zuu{3!WdIzGBuzIR)_nzWNmB+P3n`@|*=XEE(~zOhpx8+iED at Q3LkMQLL~2fI(CF!~
zf3&uRD)8DV{%iB@=K9*IuBNYs<JX;Hzw>7JBfM3?AwVIMk|rUImrY4Ft3d9TospZ%
z)0uD<HGkBR>>x-n1`FNk<a7R)u(@(MBpw4+SSa;`38lpFxrU!Cm0CdqfV3J7$7`DL
zIOV>18|#;~VTi78r<RkmgLJq#xdfPGa5G>bubzP;P1GSVMNi{<8+z$|u<PX!0UT>G
zxMay91^iI_8_Ush%w*b8<0cKAYa)%3uxGl~1NC|rdQR$I{8;>mZaL5>O-aWpxxy6;
z=|)+cO0=40<D`h73-NHh<CGP}af!^qjxlhYxXM|vI?nZfmvIUpN!(w8o9J)`xyTR?
zLbbdih%`AvOwuF&^$<D^<{6<+bF)K008dZKGp2EO+F~@vg{^e%A_ at fv)=t^)LN<9O
z6M)saULZR2wuybj9m|>^oN)rH?{u30r4hXIzo{N!lMv?n79UmX9QFF>S!7vWJkd=J
z#Uc1c04i{5>;gkawW5rme;n4kp)B>Jfu$OQ-V_FnLZ9Hj5^oSR3UArK*J-Tx8S{W3
z7Xc5g;$*WvKS&P*ez1ve)7pS_roM?wxvq?q at IyG@6eyJm3Rn$Db;GY#7no{lr%1VM
zz at _)sX1GSJk$!Txs*Gua^O44#v}GQsQYHugTw$f*jMFZ`U4;V+Bqh$o&Qm54Ik0Ww
zYnB?fF=6 at S!<RLa at SM;bHh0oet(H<(!OAlmT0>uPi_Ae(5x-fF_+KCI0!Rt(5qJSS
zo`P~L#NsqHwv0q)cnF+bBPz73e=-1e2-+^Gh2gMv!JU!@2$Czx;%)D{DeV2=hK~J<
zZ3-<PcqtwDJd3pvI1p at wqJlpk_eTq@6&!!9;JBfUAi*oYzgU3*ol188d^8+RR&e?(
z=NM_~Yc!)b|8RWzs<q!6!FtM=du+ZOf=H9<>3O8rgC-iBWa>{Uaff-N&J4kqkGnf|
zAp5oQ^)T44<Rx4^=n(}MOcX2axmcNlXWM>QfiW{Q3j)3Ld4Il;yM;o9oM*Tx092{4
zC<)`}6AN4=cZda0S|3)7iJ3ZK0Hz~t{r-YJK!Nw#*>f3vC_(_!SUTF+Snsh)Tvj5Z
zdnnl`xB>E<RCq+K!KUn?<9lA_>2dFv;a?6qhmR5ZfY+}}a}`0u_2=&e&!L3?HAeJ5
zuzw#6AAeaY)1-^!b1!6wP~ng+y|%c_w|$Ds8OhKU{bBR^^)am~p~9NT%0^yGL~LXV
zN=xJfqyFQ=r;NJIyn2F9tTK9eJ8_YOZrUJ1nd}06RwAI7*w2cQ?-)U)u9=Zfh1LN<
zK8q>>D*8cMVd{*8f~Lde<Xwu|97bTIT}N?b{9jNqHjzv0kwp^^pWM60=^zd_qfE{J
zVqp#B`bC^3;Fc{Xjx}=6y`eD6nt+I0`mqL{q8Iupv(+44oE{dhVLg(_xNt%yGwDc_
z3uKPL)u<8OaB;JUgeOMy4(^694{Rrdfx_jm3E5V*@Q9_#t&prlhJZif2y3uo{e5|X
zbU;~Iw#GxEuL0 at Qb>;Rj;FKeQ at yT2h1xQOg`V)-49-xJ}Pi@$=(6BfT0&09vplY0*
z<E#RxDq6DsTZm?j97q!hD*{JJgioPUeqCLJ9-~RFEv~LGC5l-cP9LGo`f9*CyiJkI
z8aKPd?G$0H0V9n^^qx*@mlnBC9Z<QD;{a?r)T2=@hYU}&)07v)3UaH;29I-y+DYc#
zr_^dHcto$r=CgK1R0#s0Ws?bvThuc^JYE*4cq?1?y*7%l`u}<3iw8G;_uEG?08;(t
z{dO1Aw6wmwwzj;n)Ek_ at w);AXAJIKLS@{rr;TFg0-P^Z+$G`ZL|H`wq)w}C=Zm+Ga
z-QM`!>e`*#tLwijZhuIpv(~*pF5yv8{En*Pv^tl)pH}zZ_}#4Y4+p7>bH;_b##lJP
zcQ!Z6^X|XbHtw$dE}Q at L)eVqKv3iZZu3Y8+^ZCE`1?Chxx8leC*_Nc)fgD6I3#fy|
z`0f48Vlu`*WB$9v{fO=H9=iOR-|b2 at B@Vb$t#7W<Gwbfs>gLkwTCujawYt8wdFQXi
z(R+CFVz*YzL&U9w-J%3w(t8_^zx*n>gw2Q=lM$|TV0VBk#_(l4maB679wJlW28Uj1
z<w2q;Z at 6wZ!c8ptlv6gEK?L7$xXoZ&5 at YTd%e^;}U}qZZ46Y!I=?SMxUQ*^sb|@|f
zWVn?D_nAc5kx@|n^?q at CU$Ylt9NbGHPcR(Xp$OY%D}?s>w0Md!5WHTIkC{X4^<;R|
zn1Lq#5gogDNJ%dD)7y%I1;ltd!B&oU{X_tFPwkQS$jY{RPqJQFuF+I`WWnWH>HDZN
zm=M|)QggRBFz7YO2O90Ak(U5vv?!IrDwRCLBPyY`F^-cO3q^S?^=tXMnsx_4k(bH9
zrXo7I&{pxqgDW$N|2Hel#{c`jzWm?(P5%EH6gTVqi&EWR?jH7+5m at YMiokUFe|rOZ
zUrGKm;nQ#O|JRuRYs&xK0i@?~2YXO+USNC>_&0P5y{sQ(Rk0us`rHo7);3cds#FCH
zV&nE5(;#jyt^NUDw>Cc8+SsVkAmCH+e*aHTkxHk}-T3y4-5Vk+VN66Y?(RY>Zc86M
z-NjYHHj2b367yQG-8pAiW$yo(5U8~b8>a$><IhRk3Ne1!f+y0 at 4jS4=SaBF9Zn-#Z
z{l5GA)phxg#?#p6t5wL<^!FNmqb6>o;tW!TM9^NX!<1&bSIc-8Uz(AX7ikCB$P8eP
z5p6}_=P~>8Ynm8B1cl{|puu(NNqhu<;O-3{&a>wSZN^_|KY6<S6 at c}Rm~VF5*=zLd
z)n4rFw*R>EmvXJbs->@!S}&jN{^{jTwW8H3y-q5A^YZDz?u)0Ds#dY`I;qM43l%Ui
zN~;=PCskfP+u!}_+0Nr~wE$-FI;r;8oxSHzb{kQdy-up>UHfuh5kLv}Ag_~3JI`Kz
zQ>_vz9sK3RPMc+tD%&p)p0{_OJ=)v(hRY(%w~eaibyE3Y_nV#lgY9o##Ck$0Rylv2
z)Z5=ldUD!|*!R~-jfR2weEI97#*6K}gDOo0Tx744YDR4V4-Q?JWuaBRMx}K7A^}R^
z3yRYlS#!>dAS7WKMFb{`JL+~iU!@u)a7FnQPd}7lS$`=RxE<YBTTPM0Vr~5o04!Q}
zA0ksC4qGG at fEdLf=OrNkb35D(TbG-ao`qPR?fm)i&ZFILwx333S?a!AZn0S3ydxm!
zZlydTDgWi}!Sn`M0E5wnoKxW<)Ibc)CThZ21x~{tO<b^44|+<+QzCx66eR<510aZY
z|FnE;!<UTnN%t5qR`y=9HQOYZRC)CLn-_aK`}<iBR^<7MgZ9(skG7v;xq%_<WM#0+
znGEH=U#WeQKQPIbd$u>~(OU-GUNYJhLon6=?(@=Mo(6hg3=1D6X?bWTwb4U17}n2`
zW*rf at x>hTx<8NflZjkqQo%4t&1Q>De`;;9>89x;DT*Pu+gI8`O1})>CAO(d+Ya1T^
zfN9~o at x{?mZ_K-JCDS*j(6J!r$Pl*<629jBLj%ZzWh!-n2H-VGrxs6G8FrQ>@}e`s
z2o5s0@*T2a<qK^++r-+dE!7u-{UX>A_QSEXwrmdBTwn>|#65EbARBy}QM71>V34B8
z5zZ#k<KO1-jE4w~O_v{3%g=^!=uABU`50;9klfIuHTp*TBGsc>ToGU!GHiImbG^3p
z(M%Y12%2!pv&wpuPQi*dYUrHDvH2T7V{1p3oV~MWzSyMbqD!Ch%C<l+-mEEU5+xYT
zBcY8z3RBy2 at tTF{3Kytwl!W_S83q%p&y-PkO-v6AK)$S7^^7TUUDBK at mkQcH?)!jB
z+{{cXbztkf7yJ89QybM3XvbrOQ=S4STDlU9D4&7n`It2Q)cxY2&0NL_ZThBwiR)~j
zckl*sq>Nh#Z@`m;E5u()QTUzCIfS83_)4+YgCSF$K{U{pb0M1c-u4ikkfCUB?Hd+P
zy|c$PUK*3}CnC`U+vmP31Ke3vPRzBAV(K&zxky at o?{Ah^V8#}d6>FAiknhJqC_~6x
z3zH;UJGgH~O$xu1$~k=cn(eVjq5!$jM?}hJJCC5LZbMo>ZsX^{-t(s~5soIOP&UDj
zD at HTa4;(^k>c7zkg1=1y3X+t<`81X(>n*kl==#)y!5ooah3FiZRD*HyFJZ;V)H;?z
zsV1qnfyU;><+>Mytq5$a6ZNACQiLmq9JS`$UU(DKpo2CdH16*{f0i{tkRh-jA+YDx
zXp{9ykwVn&9@=YHEL<TW!uXl*N<z at WVb&`)kWboxbnbOcn=su1bwwy>t~fkIbXYAR
zl?+w512#PE;lRK at lTq)2I*LplO4g_&5q5(POvB_)+3&{kWAm+V0i+|6Z8_v~M0!?~
z<-PgH^<v?Kz{&~4S#=sMDn$|&&Rb<>ar7 at iKhrhm^P!G><*Bx}++N|M%^Lv5%M;uY
zDZrdgaJKOo!9)TjQ3Krb2ua(}!xp`&jhT^YblUZ`0&B$HUy#M at Il~brm(TL|FQ0w+
z^2w8(y`9IELKQ4zCF&+1D{%P&FySsBwz1)WAtY<T-h)@wy)`rnYDz21)rb0B0VjkX
zP13916~S0cnofxhdvR;fw3=AemRPc!d=0|%)jLVHAM>VmNz=aOd}p9gV1XjGp2-w0
zJ)PmWSZkIbL~&bjpySC`Abwf5)Y&rMm++j|!TrZS<m8Pzjf8x%MaZkcxNL#uYNpTG
zH<NUV$ntifsyBBMX>fW^kr2{;QsqCu7V<61@*^n!Dg4K2H!=1mB1X?gXXjB$*9|O6
zUQXdqMpnk1<QM2kah#}wPY_Z>4u6qI%d%00=!SC$%-!3HT#Er>;~qCi7e1rq0%^;Z
zizgub{hg;!TJ%N>bb<Y^pZ|HWc)YX!Xm9t+9ah`<-xp7}cb^5*w!(T#Lk8LEVt5Ir
z1hMs_k+skogLWs$5O{8FHB{dQ8#u<XwQr$t&$i8r$eNX`KWS-T0yKmmfGRT+Q<XF5
zd5QI`H)vt9mS9a{%T@<+Xv3DRg#6%u9(qIS%yjN^Z!ktrI)g;kFxBKI;<N}x4}6`z
z7k563Y0q?H%pxZ}ARCDs?u);G=FNG36Ws{saWN73x9I9{|ArqkdM_zDv6yYgw+ZF;
z;Jw7H->a`wOP^WqE`)d at q4BpRXIqJnry``Q4xZC>spB5*jau#pW&S=~lNOvy?XT1o
zwJrQt(!p}hZ`1@{9cM2}i88-;mac?Q6x;jz&mS!oUp_zhdXW?iYwyn9?jwyLAjol{
zkY2m?R`^%@r)3C<K*dN at Fz(R=rV8;ODM<$#a*7j!8>?6&k*jW(i3NE9w|dd~a(xF*
z)ydYWxm{-|WhG1;iKn;VRaNbWap4(!>DjO128;6k17Ew7;RRe=K=g@)0g*&mJcZk^
zD$iXT3sT|crR)}oPHM at y90;BXQ7Ve;^fePLYuw$2Eywgq0y?Q7t5aUXnIKg(`T{SO
z9yq%b%vwYoWQ_zPJac3!y)h}YVl=}XxAH8Igj?dzd8{sdTwQHOc{abI8?bcg7Puv_
zLBmZ9B5z0aYGLURON{ju1cH*MuXWH2c6Ja(KJ>7b05Iw=01G%{kXQ&5W4D*rmRFa$
zy&n<j2kuk!Ook)(qSsbRhD)_X#?rV*9Mer3z-9C&*wW;;GM{We&xT7}R)aiAAGTZ4
zp)sKS(gQBqY|7bzPCM|@!7(g)Kq?GcG()OR5&~l(AsZq06Nt-%wFGB$2Ej|h7_ljE
z9NXYv1=@0x=lF*(8AzljiLjrJ-^-C`_|hiVH%w)|E~u48l;pg6v>EV8(rJnZTJ^<N
zlmS#OQN7E-CI!A}636CNF)lq}EMYma3I9xOMUhm6scE>Ct0L?LbNkKIi4{LY3GT`R
zbLmaO?HSs0us`L at L!#i+gZhWryhRe!Oty>43?D2EmpUFfmwf69=D(O)$HM;C5lu4B
zQ;CZ>NeC<uQI1rW%ISztDt%PvrVcb#{fIOp%{9=*WuvGi5jI#E8nRzZ9n1CCC%gN1
z#_dN~lhq-{0qZyY*EJ6OO-+ybn8)ZN#Fp|sfm|Ymp?i4L2Y*IL6<T?~{3T_G#(?Mk
z3Y3=Y7s5qCj;cn_%XMGds8jP4-O()+vuL+A76Y0X$UmkNb9;lfOByKc2sLV=>zmeg
z!x(JD;e3kVLw$%&0W;$BqvBAM_<tD^NhLf-AthW7i30zuSo}q(5Zj)A75+e^ABH`^
zp5gAvs0Xc*_5;f@<Lek&lB{brEpWQHI%M3X4QW``F*+Ex|Kh5Ls0C$@2po3ksx56_
z at w`)d<ZJ;jVslRzN}F3-y3Se_nLmji#w~<CinKWx7rhgp^|CtuAhIBw6EKjvm7ewV
zvn#e5&#p8m32dj$rt(PTl at BpcdSp4+^vF;HbI==$eH&r*NUH`5-fWbr&b%XU*~9&y
zk(l18xj-k%0+n)FMLPl$heGAP0+?EC1rk%cbxtD(k75yLhEA7Rk+|(cZ98e=aIqi3
z)|A)7W%D7&9#YYnw at -%S#*cV(#%QyX;?BQq7+!h`_%$<|55SLL$|pShEphIpKy_Mi
z=PJ2e5{FySNW6nO+$57$HZO2&Hr(3t#!NWZPK^Sd${42u&bYh!V$%6jolt3i86wRk
zgB>(Zz7+ab&VJc8HPcWU2q77aPt^Y_lu#a8#_W}}cp7JGNw&;^FQ^<)j|p5sXR`A5
zPBPhwPbkm)D-yQQv|KaC at M`M~Q<b-`9NBtkf+8h;AF;%(R+lxuT at LvmYm7S#gzJ}=
zh&y|PXehD_vJq3k6CHG>!}790Am^8C%N*h4Xx#v6<f?#dFl at AGM<$d392pO$S{+WF
z4JUiOG49DvwUM*9c!<5wbZMoI4e0_?3F7z);V1JU+ba_^?J2dBB9&I$(5Y>IkQDhx
z at D!Mri4Vs(Kw>>5?u<r^s!6E?^H0hyBC2Iv;+^NdWz+_8p^|tD1#@Yf!%UD^XQ^Q|
zmW)yawm&;U86!wOjeN at t2|b=L5i74xLiP!}*O4;TOR$}wZjx}<eKW%Z;Wa*CZ>~S<
zg;e4TBm-tnXB9^2>85~yw3TOvI93iGeu6i}E%+7N=SOD-hbrSS;?HEIeI~4Q08lH2
zs^xwX;u=7UxxA~S0;y3es1WANuF`+gz|_7{mBH9lBFGI#K;xTU58>V+f^|*|P})$B
zFGhHdknXR0M{kPGF;2{+pd63EtmWJTle!}$iPb=41!59p3K3?InNtzLzNy(H7IFmV
zq$hACxc6>>k&J1T+HedBOzbOzf#||b<Sc=t7QpPb{)-V at k__Jpg5wntQxF@h5^1iM
zwK2R(P0^gK8K|Oy5mM(aS3kA(e7fo6Ut?Gq%2Vhn3+O7?;>7u+mE}^y<dL3?c(p_-
zQIAfMV4&=LW<E_I-$;j%Re`5A$fm4J+&;RvU{@wdoZIIHAJDxp<lq*@tl?TjdbCma
z88-(epBenZWSq79p2YH>;EG{`cR$f&KwxBHpD1{$$F6Q}i7?x5qHK+D#0pjC0^gP1
z_*s at e*c|V?kjv49LN<ZUMxx7)F;(G9*cVeS2Mb5Kph}~ublR|BtXgoU3F9^jM{*~o
zG(ju@&ESn2C_`*>EPq4M?+V!F at F2AIk%?S;Zuh$%h0sl}$JHhA+^V0j*rls8G1Ja}
z7;zh?D2*tk?=a6ohcQPCGmmM!ELge at -zyo23l5MbivrAPHcwgu!do*>8)>6{Va>|6
z!fZ~N%)D2h&{RMD&z#blan(*M4~Mz?ly$1dURccu$C7!F^ahfr2NzzT?DtO?J58@!
zh{sem<Ibg|InC`|+R)f}gxsOasm0z@?!0ClSfTVDZr%IRjoZ2+*$v>j0 at -cZx&qn7
z*SZ3Jr?c*zULuqv>50+Mh8HgHW;I>Us@);xE)Q8f8cliZG?h=*iLBzGs{u`3Nx{LO
zk%(%<9xaMWZ|e6|m406`VLJ}PU<pmm#^mUXnm*FF<HQ+}bcSz=i*wcD`DB|rBO9tp
zHF0&?9=%Gb&aQ)gFZv9$XWpx^D`9oT;{{UGxV$*7eQL{W9>rmOo6`8f?z6vy;+K|&
zC*)pe{nFA;pFjI*_O_oqeZHNxeF;_`KY#h<(;aL6a;)%%T?z}i>{PVat!&mo>*C!r
z>71QUsl(xhAzz9dxYe$2Iz*S2e!P9)V-<LCRNtEd3U7^j+YbJe;%q%s0W55tBc4*_
zFFV_NX%Fv_&umI@(r_4p^)RJ4FW9H8Uku(blI4^dxbGe+aKx9_Amz8o=U5Ll4o`=N
zQ#$x&=kYEg189ZIi<1zp(7MCHH9G?^-)`^WZpGfNtS<ng+Qt;<Lt$$_s{n0ZExgKX
z$L?D%5<+VVcYXBr_MUGK=qHf!G`^GLm-Hb~>=h*Y9$bpwiia1Xn~X*b0mdR&3gUNg
z))~QU0?Su;2)8&n0P{w834gq`vNAqihMK&BIL){aJ6idI=X>|NR3}b9>GZqz5%_Q&
z;SWDKK_2XLDCqasH&*Z5{RA!!-TNDN?{2RC!CI{2w;W2KrCE^s)z0&8b`JKGkD@}P
zJ?SO76`Ho0NlKSJ at q(i`PQUJ)pCdq-WChbSq6^|7h~#^)DtQQ!)#dfuYDDr)m<k_v
z1gzPGRc%@jXqNTMbTFL$&BIdqpwMR0MuOMX8~FXnRcKJFK2$$Im3pMItf+`flvE-4
zDy{K-LlsrtlIBI_Ybfj&gX`2k!!X>A-#`tODIt8I`kethC>eGK`&=2j86Y%*p3K%#
z48Frl!l0nT{wd?~+Gk~D-un(QZwiK{QCz;7C!(Z;?UuD`nI@!S8^7)!<6Ke-z=5rM
zad!3|!Pi6cSu<xikL{nI_S$eN2_ at JbuD3wS-zpZk1;?MPmf`UeU#=DPwyC at G5z=Pk
ze$NN>mg>n(9U-3`c5ffnPf6cy>I&8jn6OLt+^>YbOlxoI1`~^I3eTdF&y~8#bpNJq
ze(H^e$2cmuemB_;qNy7gZ0HYm{a$<<($oP(@AX>`dlhRwJ88G2kXX&!KC0H~;GZh#
z>*{XDJgheaOy91QkG!1>l*>qZ4eXF=wk9-=DeDNPG_%RsPRL|PO}XkA^;8%^^G_xc
zxr%&Fhp2EM*I{+P?Y5Juuwv$j7`^2xXz{X5XaOMd5wK+I==;8=8gWowrv{nws?DSU
zQ3fD*+Rs93^J01k2U&?w_Hm|_lqJ(HI_W-w-Eq9NHE%Fj=3Sr?ww at 7VfZ?ljf#Qlq
zN|6G0mInHJb9oIZh{y1A$CDA#2r?P+vQ)8gKNRSe9%vVJGfNk667PI}*<{zh`&61q
z%$Gv=d&x)|=auz7*2Egx4eM;V4(B+GVT`wd%&`pzQ}FuY43+{YQC$XbvDpxj4pPnx
zA*LLcgjHP;XPI^HvbbAy1yph0slCsf2NbKTT@$aYu9$SfjauEyB<5D#>rCv_70AS2
zU4g*#>t0q=oVr3YOhT%>)HRXm0$G8}n5Q$@X-9myuS9-&Rxf?7&t{v}rpgJY<;JBb
z1!~vgF_hD0WK=oqJS)r}o6f9UH)z-%IEkAb6bveDX)13CYxx<?oOVve1=I1Uiiu2_
z(E}iDz*n2rG|rSY0D0S3J6n(5L{=LUGogOl*o3cGuU#Dh{1=;RXE6k=jSPTbziMow
zX4PZkm*TK=zSe}xz!%c7WDWIFWI{$hJb3>2IS(Aqps+}^aNHrL4Jux3OD8MgEwPKN
zgTwxS{%=hXX57b{$Qp3Py0M9jKh-wjTY$zU0tfTzobwC{s>O}fD?E<PWYyE{Vq-J2
zE}f~=oASvpnhcg?FWCr6#!bDMtQFtAg(ggFPvfGnAD!6-n}J_(i2TcCEV)wr=j(-k
zmOKy5`5)HruC8yC;y<t5xx4yX{OA9q_|He&VDyj7%oi+B&@e>FaQ|sZ7a_tmrKKwc
zeg2d!;{V7+;YMI{BED+;XUb#`9ntQ+LpX!+f?kg(2Y$}4NqCsIrnu4N+97N-*`*#x
z{`#S#**6$GuN0V<Gr)KAL-}UFB|vVhZ)~h<zQvB_-+&>J(KxwVM<~$oM8eymN68E6
zI1b)~JSTJS&jkyq2m2%av+&2G*x{=|DoT;tbWb2+aGK8Gc8QmvxkzOdyatCZ`WLFa
zYQ5-<#+YgZ41W}Eq9EIKT9_5ww?Q46+UM9vNjTL;a1%>W#Y42F!7H^V`|L`qzx<fW
zQxL7Z6=1G2#Kq#t_S5~HDZS{xZ=`kxnHZ6Z6}k#Itx^)s^YPY$%|c<9o_*32ngTG8
ziS$WE0D!TRSQ_^cBZXbm2`-PpI6VYxD^GVql;N{gw6?_4RLE0ZOqoAsYS7nGSsVHE
zNUx<j at DgYU@9Lw~63wIa7MjAdUTwVInyu<=@dJj`$(`C0qE4jOBQ(6o#_DSENt%u>
z#{FjjFs{wdeA0<~h!EpoAeq7nYq(|xYu>kOWem<uyQ4 at h5E8=b3rSiN^sgZ6JAzS+
zHZ$A<l%JZGz;B<th4~EXpu~LbpC*=e03mMiOUS)ObIj7|5dPOoF!rHX=qJYqqP8OD
zx2{Kb^u9`DS@(<4fU)gT=vR%JRgNDTL(ZlstiUA}qjHN=AgvE3TMwYbiRBEJVUqx}
zvx8NMA8R)){4g$;P^E>VQDWit?dyaqHTkK83`SC6L(Vibxr2$dFEp0&R!Q8&)78Ce
zg^x|0hU+kPrD(9fAbJ=R_G)<Hsxz9W2rLg2A&qiwpOS^h%;wi at nniw#3k!8-MyZ>`
z<<x+jpnRhjaSXK!1?8zK&&sbF(^RB?qRq%qqoIv#K-pLlO7P>yG;KGbPIvtk{U-Xc
z&k(xuKM?JK=hx!@7Y^kpoMEQ$n-YIDyTIf}V5%QzXvJ)bvW?d4Jv9XS%)7f799|$5
zGwzYr#Wl@(PVV;PZA<}KE^n+{H{v36o7p2SW(2RetcivK_F}#{Q*`(|z8k7oNNIk<
zr84`KY#_Bw#PQ1-r99BsWp*Y|7oNocYQprT^}V7pT#Z7;z(#iL57qPEHHM#rstQs3
zL``Z4cbNpFZzv%;N<MAb8dJP{l%RZNa|h0JCfH$QUeGf0wEFwR*SasT6hH6=kR6Kt
zD#Z72miTm1S5A|?8+8Dv927 at cB~|p8D6b>WvJ<Vm5)k;L--C}hTpIO20=iQl8x at 2u
zfg2;p3}?cY!W<hKL^xwXc$*?|NQfcH#e=&`Nfb#RGPxSh<nUkg4%2>e^I2LU3p+Pk
ztgR0VRYt^K64Hyp$A$^FiZQanzYjrF=UM+2L-H9I(q4{dj!#tyA8D<zgfEG+YoK5%
zgybAG;Q-lP4pl7x9}Pb<z^Hv)ioCD`j^LZ{;=0x9^>)S@;o(}RwLmBv1r7Kzwi%gF
zN&<9cv87C~&eH0ldNsC_$Wjemq~VvY(E(0~bp)2P`8vUu^mx8<bpLTfAKBP~Q!mkx
z#B-V+`UtQ|j3sA$>RU|Ora<Af880Emu~1Arzt!3gIm>WOSz094H^NAwG}+<532c^8
zniTRgH1B=9NJxT&-vS|x|NR0Xm1aivyV+uMDxe+E55KMw2T3|e!t3Ps*Xr)QlNvvE
z5UjE*<4hx|ak=3#Oa_yg2h6vTqLAhSS(l2>WVezC$`E>j)-~E0m~t&CN<4T6b$E*M
zrdBK)3s3GGut8tu{B9+bJJgLVBLpq|k)j|8RoEF9eL?MZqCw<wmI$PLK0*+rT<*j%
zXF$|B9{v^ssW*D|(PAKl7&(<_d3sV+x-jg9l-wWB1)-CNt`d`T2*Fhw0q<9cT|{`Q
z%b((VMw_55_omQAbQGw>EP9Sqh2YIh_t(d9vK^oy-uEJ7e0PU~)&vgE3@@wPWRa~@
z-qbLo#p3V+p3^)H8sI<VSCEe6KoQ*_91<GBCvYGA$w&OyT22g<iK$x{<m|DIjB1pd
zM!uH^VhI~ufiR1U6hKtaz*nVADWa0o=8PSf@}wM<)BamrBad5T!KVU-Wak6&*dM}i
zUQo~cCK8|u86!Ibo+ci`rT&mX39x at hU<u{WI+dyl6UC)@`!|k at R0rusD&DmKi1s5!
zaI!t*Z^4;71XrNIgd-{9>$k*7v>(ijocbhcU3x&5PUWwz)Fn)n1FKQ$%-bg!k1BJO
z9XhRnjNu*klRwL9<(O{beDSi#Lb^^Xt)!Hg=(Hvj(zrquh)Pju{zK;hms7()f at BI$
zGU)`y2y9b`o2xG3+`U)h=2yI*4G|3OoDne)VQDzxJuutpJ6~O3_IAChJm{TBG<jw(
z at n=Y$3FY9&p7K$2#~bAE0?{seW4MsT)Kft<;I)4T?8P4=Jl-j8l^^yd475kfVlnO<
zYY2Nfpgi5)KY&vUa*g88V=8s{tgLud at OSq8w)1|GK}4~mg15+77E>{zN-G=X(9RWY
zR}zC}p`|&)DxH3g1Nl|?zbg)PR<N3gIsc&~XDHGYSu-r<0A}5JD6xGyT^P%uoHEcg
zhz?=B`fsR9YC17#sjr7|#lmoe=s#!3^?@%Fy7wSmAuo9#rCRR@*OgDln5nvZmE2m&
zX}~xS`C@#*u8ERD at F|^MFdL3lmY0#;Xp4buDZ`-yQ}wvQ8u%Qi8~^>^DdYCb+LxuK
z(O#2liry_w%=&a~C*;b7Z4%PEuN4j#$K>reP}vmL6swn7del<BYgxDBtuHyPRZh7>
zDWh#}wo-IjyVXOUyy0nPcbg8L0a=)-^fHr@`7d|V;MeeG|E-U!Vqlj0ABb5p7=uM<
zKCJOF92%EVZ|1I6 at tJb}WBqRB{>S>}osHk_f6R>F4=8x=3(VvV91Z{2Kik5Ewh0pY
zo<q-pq$<X5?{5~9G5*2Li2Ivca_2&>UljW&2y?cx=&?lePg8iDLYrdlG-yocT@>tf
zkRO6sg7N?2q1%z=I!FU~;Zg_!;xK~m-KEuyrS-eT+Q!!E-L1{f{#qQpKSWfF39|f%
z=mh-Iu8INJT0LQqyYonvPrEQGuD1SS+~Wxs at 4rL0f`98-hbimM5bI}*9MXs*>S;*s
z(Q@;Ez>~w~Ak!-Q{G8(*FU+;H>0)tF8|bzcJBQuH*81W`YjKV;?^E$Q77%~7UzCG2
z71Ot!!=o0`yGms#E)Av+!fQy>Pm6mi4l#d){6~mNc+$q1cHfhmK<$*clN#PdgS${6
ziB;q}TK;HM^X#<d8Bk8~npYlQ9MVUi^bobr$1obd?s*CqzZz`w=82ix{#&LCB<nM1
zb1JZ#LJ+br#doFCiRPKK6wlUO2*IFdg{i(JT8!-bXn+ at WLc0r9IbTfb2G7*cU)w-J
zOUazHRu)$niYITt)f_hCiju<NDwM$R_BH&)5!2dgJB)3M*i-2m$0oETrcRpd0WkK@
z&ggZ7?ApAEsKA)I#u6N?57i3aLT1V}fr16Zm&e|`T7{Z;znE)jI^oLeN<&M<n%77N
z&WhNBwQ#j4zeW*<Yn0^!SS;2Si>0*$a5ZQWe6uV^7}Y^3{x+B!Akak1G8X*f9Rg#z
z3aTh$(T_Ag-Ybv+T;!1OU4VwS$QR{iiO!%Bi&vMTvXFJIbxnKa1ZiG at Xq)#6uYB74
z!7ao~Z=5%80wB|MAfG>fc?hTbH&qyQf8d4kU)8C1aBAj0P^W3Vueg1|Fe2Z{r_Jo{
z<pqbwCT_m!O(1J<WEnGreuHc6OY}~3xe at aYUmTt?AQ2cVZl%A*hO79hGx`yG#;^NF
zZ at 7`Xch-A2zBuoVPVju$q)lMlL&R1?Fq;zFWCV}uQ!!svACGZOp;TX35A?dD*QFO8
z8LYyk;Z6a&#gRu!A5S3YkACc6IDy%oAr7PCpe7uuNSaq(==(*j_bRX_(Hy=9rb?_D
zQg-`Cgv;X|ns}Bj05*guJ_-n~WK0lX4--qSmbiDulM^YBE^D7)d66;H&{*afh&}3Q
z&$|h41c-SAXX}Co-!FW+TFWbX|EJ#@Gx%SsNHc1hR8!$$m1hIZc!|J*?wk(1jkJ*n
zuTZ at F%!V1r#cS(ZA(vR$femgt at s)V!5G!f798^MHt$+NV<xkt~<xjs`hB at v#ZXo9W
zp;6~hFRjSg1fzIDVTNNlo^2q=LWa7icrJ%k&1&<9yn%I}I_xR*wS`u at jV`dp1J$<J
zJ3Gg7-aL^(xG927 at H6kkiKep3Y^@~%njJy1mDr>b%&V5y$2Gpt7P(FMVH2<2p+h03
zSFL=MsGU_}q6u6U<V_>#el3YZC}7vN0xQmG&zs`+r0*yX%QJPQS%RNvht^Eqkh8Tf
z2FkEKsGp?_wYBq-fXV at i1d=I+pLR<xZC1Rt1QQO%^a(7 at UW!9+V9E@#c>3{4l;e)}
z6&r|hO}~|dkMX9G?4dE(`_TZ9ltw(3;N}bwpUEo0NJZ+nq91)?xVT2cQ}v<A%5aYZ
zcDvWpZQS?;Hc4kC3BfXl;I*<%s(FVzh}+$6uF^XUtQ*bIs>)guE*!t1MfFQ&rMY*8
zuZQ?XSvVRmtG^%E&`FOWRb^9lHJOUc%}n84oJW~l-fY0X_s}PoXr_^lNac6DLChCT
znFBBcbJhBSd}*RwU*F8o1eFsUTHu3ArDz4WOou$oIK4m^+Tq~zy`5)_>8U^!q7%r0
zTX_Mjyb~&3sWFoS`rf|7giS`HFFZhfRr*rsE&wm!nlc3ZH3(4`c5ED!s4V8?Os5^R
z+dxgZ at Jp(^YH at 3aI0AI-GV>;pU_(h<vuu^%O2=9I?+BlR&Jx|y&Nu#sY=akPgEmL}
zx2n4QH(x<@?{bEGc?sXu{VfqoPxhXFBV0RQF)5N>wYrBKD;WGT`TMkzHX6ErS(Vt=
zpTFMO+bRCmJ=DPxY4?loTHa*7Br%iH<97+liemfO<Kk~Jz1GH*2BcU+8w*85EVh||
zLg84r=|uBII#&d>c)o|OGeQ41uNueLP%>cNYqWT=9?}6gy=7shjeu&okJAtYd_pgf
z_tYFg>A}+{<C>5l|D>`4-Q2l at WOM@al+|*p6;ze5ZJ_N8IT5j5q2M_2ab<UkBV4VZ
z6qPjyp_y}Thx<=2clQ2*VA{|3c7AoPEf>Yw9Yj;OsNwnK>ETQ}-#R$(=94ep^9>~u
zhwHoqxJ@)CeJ~Th9^Y=L#iM8al)1f9Q$w{d{UTVxFB3FVtL6)ZeY5A%)2lb+>!_(g
zwR1YLPlXV&@u=5DtWcz5k}FY&TdhCgW5;xXy%E**&fq;1cHA4H1S99ixw>jI5>`Cv
z!ev=Vr#Km1;5Zd(p;cQF^27l-{G>YF9#>FFj6p2ch%w9_mbjyz at -5>+Dl|$D9Z at Kq
z4)k9w3SqLIOp%2?#yU}ENK9o{@hb|iqDFdMS$tLH*R&>@1ems>ly|up1ofB at 4CxFw
z2_xFoRr^V~=Dg3)A{Hyj*EwUt)_t!n8y+c-#^4X at MFWr3#zteBUsqFIX&$=(bpFt5
zq--}-(tSQxdMK9g-lSNNz61zX?1bRME5aA7!cJzlX!bU?U0Oe2?cvi{$QN1G4u+;G
zA{Ygo|I=}^$@z<Oy9x~qWXg?n`0 at qwdi+WnSr}r0bRVfo6kqV$6eTO75}M3+JmjhW
zR5T|qHl^*H%^4BT+Jn!{-=;yI_uy6X<w8I!uEu<rPvqmBr#qOpUz8)o6%jY&2^6%b
zXZZgpEUQN8o{CcL>J5V#FxJks*;cd$`HGFS*SJD$88^NUQ=YEU1f{^JI=mI|*?azr
zt;!OjNL}0+AQ7wXmB5UNR$=ywP$$BUaWSaq<kzYFw){Jcv_vD)m-hDU_S2U;`wKY@
z#rK!*)E2K?H5GAJuN_6()$2y$QO0$3&@*&9cly9);w%YNzBM#U0_B?>4F(}{>y}zI
zI8VtAGLz}CuyT+JJFBx at q&r91HM(+Iw`<(9Yo%238J!B&8tjG4Dutcn5YfU;m`uJz
zrBH#n_n>cL=V-FUi~B!ZAP1=(<G at mghybvMZ>aYMzCjsBbi^^-8LTePqxyp_32HFz
zA!B`iLI>0yyf}FL1w{j!S2?{a5CvI%AoHa%E;J9raD*%{)lIE5+I!KNlux0=DxDuV
zxd}1b3;ILi#3Om?)^Vm?VnC(tp)kUc`1TrxiNA-w_dvhgr)bGR?`@a|lq&BvI=o!;
zQ|}<7<0oi!;S)J`;PeHXnc4NkTo3k7jV!@SEN^Br7#$8?!|*Pq0=a7h3mmMHdSC)u
zLW`5y()ZXS4S4*FyGR<N4u*#gQ-Y&`FnCNNZc<}j-%4Fp9rZf{m=W<2WspSyS~e at K
zhw-RjWBwrzND@;%oVmqXDWfuTyC}8k^PgSZqz`W`t^Jc{@U0D7 at K7(=zfbS9gS8bo
zBca~R8kv5W0fe!HaYe}=P|a~?MQG`Hq at LuOr)1P)+#Td&>MF7zK{TnOrB%m at qgN1Y
zwX!*PR2z at DA(%D7$^gr)O3E9Wi790lSM}cnk$m%hyL;9jEUhoEtu1dL2I0wRfBZT*
zwhTcqz;`CSwn&t#H~~)g|65zVyK%b||9NBM?%Hque;?r1H*?i%`u{!FxF}+#ITMmc
z4r?6T%Nc|a2;}H7y#hy)HU>8|e#BBdfv*|%j#vzx3Hh^d*321j8m-YIaC6l>0ymdd
z*NU~Zt=09d%{xsVfx?qVy}w@|3s4)GP<mia31Q0-PMbjDcDe)Tl#RVSZ)y@;y+ at 7s
zp~!->jH?m2>oI;UNda;Dj%p(XAaeQfhDkc=PVs1O2YXGn6FQLe&&a|mxSABmPx|NL
ztG(@K2m6$s=NE`*V%^^J{vflFe+hCL-JK!z9i-{;asLQ0EAZr~g8>M8IUSxL0ypFn
zusj*E6@!U7g9|l=lhBJS6KJ+4ujK|I&dYHKhm1ay6Nm!zo_9>fpF_Hjr5$>5V#pn;
z7r+)~49YJWmH7>=TuAg%#l<l$B+{TAW9||j&b!b9E93eKoLvfJM}7@^A27&=bK;~v
zhch-o10))+@!%2;lGX~?2s4h{UfNP1FV>WH*o;sjI~O`cx9k~Lv3pQ{$cG{GTnH*w
zp~wu1 at tZycBKbE}8qUrf=ALN==a4lQm=$usktS^Y7iWtk!#kkCrM1ttis75ZV%Nc3
zF8&OVaW#`SiKu76?FI+rht!P}d1FEp<HT}GM3a*PIGKX?II3Be;Q?A+^CV<rYI`tk
z^80Wg_lP-NQWj^Dq|}Z~$#Suq40JK0vF;Gm!4_5S=&bNeb7_na-hGf&B-Qb9u}ueF
z+%p1|L+69v5@?NZ(aDxj1iD~DP8!rhI=ny)g;wUx=|BlaJaC()eVGjbfp)zWsiyku
zJ0<0MSb1}cx1zW}1izip0JG?rC(_`z^oEw}uojgY=^`x-wvnB8xj2B at fZ)7<0;AKF
ze|vd#dF>C&H*U-`a%dt2g>67ZpdpX!;?o;cZm7Cdqeqf`tgfvFD_v7tcD$MGAezc*
zzu3DNrNTk4dpK?jY2|>5o{rTE@|m~qZJz)AtV#$*3&^q5ux_z~0IquPpuF&?o0O?6
zZ!$bD7~ELY77jFNiK?0$D8{`~6VL~HFL$E0m3aNx9t^OwK5bzcbo)$QMc)#O&utUM
z>1%=kH8Vp)!-QQ114oCEo-DL}{|`F-BqPn#Nx(Ykz)|5yRs%4I9NhTc1<=4_Z+z4_
z2hzjSXj)@M-xiS90Oe;GGT0Y-1v at T~w-a{+2k;}b&-_{EU0bgtf-uD~Nqmjd*@O#b
z#B4bx9Rll1lc?)iiP*GzlJ$#wbWln<NfF7Cr735SG11V!`>vI2ky(--DUC++Ht8iw
zOL2lwwDaHUIofL1HN?gcz7Z*E33=OW?0lMjct<Uc-QPr$7O-(8P=0?oD8Ii3D2Y3R
z!^pp3d^ui94qhx7?UM2<+*vPGl!>WDXXpy9206kKWJRJ1vs{ai*x17Itxs#)s~K^q
zRRX#MP9S}bG*B;Wuv$MaozH(Ttq668hAaU_pND-3q2s5}mmj-Gf8rGj?vt+;Qg!Mp
z_Yhmn2wKs4*eACT9~o;P;}>jM7KXhv=lBxmWGQ}T<Dgo$Pzy|s6uw$nVXmqzsCDn5
zKH?U1kJ=OzhXnbe=n305h9B9Ew+ at B{wxc!#$O#kA%8}v13vQ<lQDkHR-$`Xxy-ZRe
zN{VT&K!<8AyejQt3VhI1XK%v)DjcHj41X`7R?y;MpK2Ka)E9>xD5%t!R7;1tQwI{#
zcgdI^i9}a*5vp|u+Fn*XE;;wj3*=>^xp4_$fh3Iig2Z4Z!Y=(Ds-7X52UM!={W<XU
z$y}l4g8OrmL!?I$py;Wp_a<OQxHvrPPwvl|!9e4lKS3)yxCG8K^9Aa*u)m1j3o-af
z=j{A*`A6p_DZ4w^>kLkMUL#(arTs?sghlV@^)UB-g?SopzXQ7`jR%JqSZ{U*Fhljb
zPk6QT(eOf!<vuUIcz|+iw{FdGw0s415Z-$D+~Zbo(8Y7PekLm-v<FWxcwM$$$o61@
z&CD)#5&fg+3nq}Y?)A^$F2J-y_viX3F;|R7NB8H%^mBgJIRG8 at cF#H|J=*zU<nO%&
zT9?lUCv%X;-O20wb8C0zKqTCL==aVkzRVRX55UL%c|*q!U1KmgMv|JzNXg_`@9hD%
ze0pvRKcB~kPZ2pua{ORgWppdq at JtfcXpRuDK$6xWA{6ITAAub>N5I&^Gx_15{aOgT
z-5+3oh?o=5+=yPS+3o-6cpy!|--6Ttr2CRd=9A-i28E8bw_*Wlx1d8kh!5u9Inny?
zog<wC>v#uM0~vYm&)wMso?+9xKew?;R4E86fZ at 8(T$~;DM$eChcCh7~39d-54$b;y
zz#JiE?dbS)*a2qlDZKYqB2 at +gbyR{_o(!>R9E}Z=_fjP3TAWks>ixMAhQAte90HNP
zab>=4&Lmb3V2T7FlQeu0ED~(YL6%a1{b1qr;CIPpv%##85FXr^!3s2s{m+7BTTomc
z47iPCh7M3<y8Unc&YipE{BIj;o4 at 6Mn+>@iSW3w5>i2&i!4|~LJ@~Gh?^0*~8pB>Q
z5naWs=U1<u4m;Rmai1yy!C{F&z-j^$53i6N9hwD9S=jJvENfalzyP|~k-Zo1=oQ(n
z+j-yA=;gxZxNVtMDijhe23JmS0~dR{u*nuNCk^b`tDV6K>|`z7M(Ieh?JH~Cd>GE-
z+6w(b%ZrwGXcQgY)A&Bu2Cv#0<%dW?k$yM{BGv`;9!2txdFxX8UEcySyX-0JPJBL3
zFl7k9P8))Sw!-uSmD@(BT_hWmX7tJQ&xAcI*@QfMosX^wcMWZEH2*5pDM%^ik}Vj=
zQA1D-!<af#n5DEU4mnO#O&?7}ds!zLDa2lqLGhuJzK!IAXV2SnsPhKdV-rbujWT_)
z4nJ3;3#n0AR($G8MNs4T&_A_EEw3vt%)fD=%CB;Y1TR|KE??GAgESPNtL&Y~%#3}n
z$gD-)edC5kFx51fkG|gCgZEtf+4E;R*io!v4^{Vi_tEob-^z}o{{7S4FTDtoSJpPM
zxAW-vWA?GpP(T`JZ}0vu%50*H2oS`3gDgZ|P38jJC1>1u2jiYxnqp>2CxoT~W at 3Q(
z6Pw#7NCbTv?A>GAal3G(De;tcTG-&XetqfXBduZJVU(QpS}LL4h8Wr_2|wdhLMU8Q
z^_2sCIX2mka5KkE at C+~(kQVg93lFgYk`xt8ANYJ9`&mvVfT#B=U-D?^=<Iw!XL|RW
z7f(?Jwns#D8$i0i%nb{Eec^9+_V#z5KdY86LqcfkM=5N~={*oz&U+fy{j5!vnu{wm
z7!w~>aEeRJ4QQRAS6_Lt<JvLI&=OeyRvi)OA7R6`0)q_!X8+f?8jpirM(In|px5GG
zb2rJ)gtc05VTmBKM$RNNM*ec#6T+ at jjhauOk7bM5&>JpA;J$u at z&L1_rFwitCZCdB
z{Yp_$WpPTXSz78l$Y at kKW&&fK;FzJEnu%@3+SEDvHD)Cluh3$Joa at ouu!30lH^v0v
z9nqREHbrkePJa=`RNvKatEJY9=29LOr#0$;Vz&BO7EdjAAOY~Bj*u=9l}k`j`n2F?
zw1DuoegE50=bY{&n7Tm^x6ZnB$K*WLHV-jQ9md-YlGa&fGw+c#+_v7_4kiX;w at o|}
zn+RM!;20<d0NC{rf0m{IaZfStQmBmdml}s_o_>Y=tp5(s<MWo at GIVIs1~t7F8lj(u
zM>wN8LnjA38y^0kA#M?AEsF-81mFx#R~2_w>jXV(lXbng$Ce$(hk!3)h(QD5foy at _
z2%xxkdEszr&+oF!aw1Zaa~}*t4r}0W>-7wr+%?y%Nm&Pq6X1<zAuEug4=z#WaaM5(
zmUcYyz at Yy_?-Wl;-n at pOYDzFplhcg>O+^<+B)J_34-6`P!<^bL(`QJlzhEl8pflm7
zM%ueLZaB8E{}^=+FUIhcg3*kJ4RW%lerW-x^mQPP>5n9yAxX9bkZTt=nFsH27Bx6Q
ztf$Z~+E(8yoMcU4OyacDB4 at cOa2^Pwb#!DK#N!D-yx<uv#22>WTm!`%Dmhnl<(1|I
zr{4|cNCL~?d;~6A;`D`4ZqwUqd+=U-W<-NClBA0WV)W9dh|W at srdM?ae8+p-a4S?l
zA at QvuW_}nRhH<-pFUdqXVH9UjQ#F9lybzI75f{G&sR9EGA%^&vAL0paX<%)_A-4C6
zd0sz8lD>Hy!=;U|H0cWc=rUT+62NHensv&RYAW(7NL?`&^@v)WfyQ;h1{h{yY9Rs>
z<pta3r=nl!WBu1VClapPeweMPz2!ZzDE72~I0rax62du6?uFnKk%jOJT75ECfhYoa
zWBAU=%!i#0vFV)DY^m|2R1s9*v>t~<Ea?JI)%Li=yr6-m<Q`}yVOBg$MF2NmXG*x4
z0GeZ=(xu4Q#vVni!h{mpVq}-nSG{cog=X%XW}C+TiJVUVT{{!+zZg8eA#Mc6wc05V
z1PXwx;d%KkahDmM>X8FZ+JWbAW7mSvIG5#3C&*J34dp%=O8|@SkLmY`^OmwUA|Y5S
z0l|we0%?;^JuDIb(gV37Q)W8?qQ1L~pO8ANmGYQK^Yxv|v3E8ymbG5x<!s$*JG1xu
z7^yoM-m0l<e?MFAUOM5Yku^CFB7PLW3XjEXLMX!L2j0Pw4oNZ_u!5bZg%^|I1(;HQ
zl8XD94m4Cs8Y^XPnk=|Am&8tKR<0T10w-iwRI-CsDdUMswyTH+zAM9Ep{j&KKW1-U
z%$3w!_x%4v6E>~U7=fL~{AX*x;55AC^@}ONHLId*F#8vYcstNf#d{`;xlR&JLWX!v
z5wAVvd!T=%i2r5axr&Hyg5cK`@t3e?U+o!Nwn(^-lsP6Qk6NxQ77kpK!tD{c1ESZH
zaM=PEY?Z&#xhQb`ie)4)Z4CkF8&Xz(=+=`^X3{}`KzOJqa_h@{81w%iGlK8O;I!!3
z#jzy13>;%1yZUB~m8!~oQd&0dY57!3s^K%DXkCN3R91Q2-og4S?Hf{P6ULGP?SqU;
zQl-C|je~V(n}(#D5(>#yuCs{hVW at 5(4337)!><5WJ(n at C;wGXQk}Cdd_XpNuvNu4=
zYf8#SZO-UB;}%nuIJsP&SxT?UE^r|pj$pVZDNV^qIXvDk1`Kcty^TKVyxgvy)$*HM
zq0eAryx1;R at L-hEvG%&ZJo}MuXV5(f^#oyMhp?#%tbkh>+6QqU_MUN+(&E8S7IC)n
zOR$dmbr!d#mG|}ZK0i4-KbGmkRXpGcUl+tzJ>6b#ER48K&BZ?$;6T44Y#T#%FUXK_
zf<LMj<^4^5LQ(G(#ov~T3%3rehj3JkG-Tj>k=tY(-3pfeYizYLVPJ2;7*k at Z7#Qad
zFqej0+2(mib`R|4ac>BJchs-!LcJu@!Z8lSG2|<p(WR at +)z9vfdh+7eK!vdUI!t(*
z^IbS`0ECYx0XU|H0YrOk6ecsxXysVR!B7ACP}pLP1*(~K&n(<79a_nit`53cWXVSX
zC|jQn$+2F0AUTssVeV_Ds=?aIHlp2wzm6 at vCuuzA2jNY1-KZE*{(xE;m at XZiA;d<f
z3RA9UEqa+Sm6e}~Qh5A-py#(%pT+;5*O71=xA(4h_1s_V<ud>OwMzc4wc8uN`Tu{E
z`Ms=>Yx at 7Ye;5*99*#PQyp1y{1a?633!a{-iPT8ObrruSpgF&)Bz2W*0JiPilbBez
zK8S!dl8+1rt~j;?rOI8VX*pPI$;KmW at P*y1W at Da~1>7#n61DJ9y>wU%$*4;vPf}vN
z>WN-pA*~mCyWec@{UwR*h?sbfci?0i%e;KHivXeNlP52qK0Vm^-vfIFrX-FLq8UE9
z7)a<Lo_})}91+8~;g-oyBXz~7(=u&7U2rg!ykHbd4WateBIQf~<?Z-9nTV)pMRCAe
zWvXriykmq-f$>=Ri-07mZKVO+lWJd#PTQ+Ru`?Qh++OZIbzm!caE#X#EVE&PaZE_c
zXqqwP9}B=j*u-w(Sl9AsT{e-m$Z1JPmp|_OWxp|2r6YrhN9rd{FVi9qUE=HEIO0a;
z6cJ=((dh+2iP3?B?LhKAH&J83hD->&H{S2{&UXHO(K&5>FR1pi98DnHkcQ3Q#-kaH
ztd=~t6Y8ungjN}pvkgf(#4tE7g$~C-DEz1MW-VTgXN73a*bv-hFu^+6yzrBdlPKAh
zaiMheL-!K~S)uicL at Fb4RuL>qsP|kV^%P$pd_x*6k&=cLG7ykfxBCu<;-{x@&VhBy
zDTrEeL}|HDs{5AS+2Kz*pi&7_YCu>VAvWnc7v)ljhp?_&E$-v#(E;}hamo-6Dsi28
z%>*0(RbL|Q5ieaKqxR%26H$mtAf0eDHxr+N(wG?qxEY9au!iiK91lLFC5MRU43YOK
zkxrzJrZG-CL98_a9kC7gMGL%Y{jv96SXAqKr0vPxJc{u^@iH)Fq8A<jNl{nlq{uw9
zNV?FV3<GZXY-oN-1fzk>lB&vwCB=&vDf}4Cc4RQRKv7h2f~Mjk@?m5fHOwXI1KVfd
zpvV>8pS-583q&;fMQ#D{ZsDlWH%_+ at 5hn~ML8anHa7b4Z?Ogdc-Av-M6s<%D3BhJM
z0b3Id+ViAxxi(wC0C2q*cY?VJ^@1+O40!=J97OW!z%{G%f$12Ybd120zA*ClN3skQ
zClZ$lQUE6}dU2jTDULMoD^Vl9N at X(l#v-QTU<6sHUxy{Gf21I(8?LV$xj~Yk>=k?=
zw5{*K7|S1whJHpK4yIawUS9RBy=v|E{*DRNImO*W=73CQ)L<<at9D^9z_XFzz_#}v
z(Pi-Q&i<on(P_{;0&5hXL4bl!6EsP&YWoI?UQ(~Vp4R>T#bFyO1$P7l$4%YGV%6r+
z`<DlMJ3Acz*W3GFS4&I-U{_cW^+W-o34pX%9UT#RUkJr|z7+T_-vU<`N4F2_D3%yD
z#Wal~;1*)cK_bArEgKI8i#S_w at Hj)<BYN;5$k%`Y=!Q%}ME^aA5Uv|pt3gPV+kp0f
zu0~*ix-^srDm$c7*rS`1{-i|Cs;jz?lDA1bj*}mlq|mYvGFYbT5~V6xqt2`u;`?3_
zQsJ$J5u0OB2yI>eP0C-QW6?@iOsO4Nh_Vh8heeUblyn%Wcxr^CrC|bG*f_kpJQ}1s
z=la;<l?uW!t6)lS?vVNHoWj|#3s>IcgZ5yG0i8%ZKbdjFqm#gXouYez?7|G(l~t)D
zO(jVqMe;$zX-eLXX3olF^x)nEab||6W2C6Qe;0E?ESZ!A+U~7Px`>p3a)xee+ms3`
znX24Rhlptwv_>t5qXH#7ZWKfy!{KAZXlRrf>HbMPib4PIJI8pn9mLE#kSKZ5D(VC6
z=Lk}QR*_;l1dOd5E+`O+<h>YHcH14jZE8d#^}SI;9UHE^{T0ef7gKg%!SNe|`*GNp
z)83|hZL{pHZ8lVXVVm*^+%hL^PS#@aiR(nkR}?%RroX#zvr5(QRB`pDGM&m0TBDRA
z6x5Fj2nMHW9;Yzs2i~4&2S{9z(zcMiB(wNq&^(#FYCg7FimT?MLtaSq#vC70*g|Y&
zYS}~-c=Lj>SLNp6V+hURf)W9 at S_uL^4n?k0L<V(flg|*{=3>xCyC#7{lj)np;7Y97
zbw3&ZBZS-Iomm7Wues-UY5!UE(0BGUjwZnscpyHz71ucN0go|6O}d at +Is>TXnKwMD
zUkcp|=;ytzV}?CC!u?GI?$X8{X>O&YwfiMhdVyOtDknRi?em3EX6P at I1hcgfN->Gs
z6~?%mYg1^ZG{&^R#~EhY;)jnkv=F9~?5bul>hjFj9hNBcWKVX;iFR_y9!GqZ7gJPo
zGX}`nxF$TY#Q;lu6ag_^fV)5D(vz)=?wF1FhES(w``v$yyaOT>3nED5G&r7YdbJ89
zE>@qJT};S>F>56XEsAro)l~0brM4bTb{Pm#ybQ!Tq>5?cdz8v!N0-;Tj!gG9gdd}!
zqz%e69aE!(548n9S#8BwxT59yL at KFy%7&D_ at 7u2@XQ${pv3LQkU0nPDDlL-)FPv3y
z4bScbHCfXVRIPo6RxZ;WQjE$vt8}9+)Mr$mMVml~z_%*F#qg`4-DXxJ)Igu(O2Yxe
zbR35X(ii2ywT_Z04zFdPe%X6|*zL9<-0)n<o<tON3ZZ&v>5Szo-(}xW(JaylOkc7w
zGLJU3Xmrt%jKS2XC3v3O>C^;dszB@}*8(Id%N%z%fp4*Sxr2>MBKm>i?orjKutUwa
z;UNPkzDlA_UdO^ME-3M;)z5u5n2X$j?c{Cp$vv31WCsuigX*#;VC at Vbl*T(&N<XYj
z@|MWgom26<gS}Qn2p2cunV~7{I9`WtBhZPmKsMVD78*g`aXz|UFu0UWY#q*nETz{-
zD;)jgavElahF&E2^bFnXrs6a2sX{`ECmJqDL;<7(0pU(lf>VLt54<jE(~C7X*&Ej(
zE7csOztt=*6iL7!a_H at Jt=v(`F``sS&*+jmaS at 1WKWzclQFHghsX2wvH^iiJT~67O
zm=OXT9rjPa8YEtOT$@=_z-Pnia!q|2WoP<(0p)Sl!btF&nO-pM*hB~u`DAc7KL6ZD
zehIK*Ht at 0~PR5D6nQ-zl#gdk0#AIL*WpLO=4gT(Rir26gXgFBI3FE<j(U1Wv;)2Jd
zlAa10AR3ksu+qSNjuLO>W;&ez<e^HB2B6Hw5<J;@-TtJFL;g2yUW3v0 at 2zyMGPY^x
zCMsm at M98Kx43_6-{&aZMu|b0y#UZw~aYnwUvHfLv at sKkfR;z9&BvU-zd;X#@mQ&#P
zw(QcUJ)y53#_h8)Q$XPZ&R5sN5923t%8sLCY7`9}MAo5=>A&+o^+rRAf6X5n#}X$P
z>M6p5p26_~mV>W5<1c%?!DGbBMX-4+fNHaiPJit2qv1~YVI7j=Wb(i}9jkx;Fr4Nc
zN8Bg<HgwyB>apl<@PiD5 at 5kq5Y$ML}G!3F|z=>ku<Nu{u2-ArO>%jVtV at mi$-K;q4
zKxJho!ag!`@gf0__nVkgC_#=ihfv)|uoAxs(X3$~hPC_bDMKmKpuEVm_4PnGt)Lww
z9w;-YE|x*YpxEDsaVVc8{*A{d$t+e>^E#y at v7O<tOf_(vp71zzEC+HplPyb^a0UoI
z6U3t010rqXusSqQHUQ*gFPxRiGW(T4W<OU@%ra(P%MaB3NSrDYy2RF61V;>Sm!gT^
zOPidg`psz at O4^sVKV!Q<S&|IHD<`w&kD5me*8UWh&TEXdQuBjHS!uCpd_FAxEsa*@
zf0|axIw_Hql1lTne{zoXakhADy96>Hr4wYk(o5Drv at qoxB(}z#7MQu at PLV}~J;dzI
zl~<^=h<|c)@F|X}L at Nr^qm0O&R`<74TbfY|_cp-t{Hy<^<~J(~iReS6x(%>5TI#2y
z*?Fn-Z;mHaz*(JjlJhE7nyR+sEwOldI5 at Z7yjNjaeoD~u5n-vybLVwU_5jx8r_|s_
zM at Po26G`M&Q<p<wo at pg?zDt8fZoG-x)nJjiUm&}?nP+r9N?!E>f|+DXj9AW9KbBwm
zWq!-Qz5h5En8p7eDYD^ChBOo&r}BzjPxt>{-MGD0&i}c#cK0{`|0`nodd08j|1U=O
z%%Q(RBiC@}{|eX1G-)Ej<sn<2TrEKU7xcDrqd6j9PMa`AHy6bz#2f6I-z0JSZqOhg
zr$8?{Bd|!`PG3-Ke5-qin5Zxa&C^kr=LGPV1c=bZC6F<Xp!WHsg*;snYmjZ#Mj*Q#
zY`jQNM7wI at M$#Um`?F3kQC50O{0 at -$r43-JwE>i!kfre?rWLnVp>NrV+T$L4zi_NT
z$3pB3 at rB9g<ZK7u;1VgfG3hEP?)P|roS=U{r4uPGT_Vh`%v0_#Pmj~E at l^lvJh2Tr
z;;Dz%f)I7=0vyIE!exQSINxJf9JMxmK^fiDlw`)a5r(vbq)G4=lOa*ZV=IU<j at u$*
z<o9Fdlry;4bD$jb91jnXIj0yOjr!+^=|@L<Q<q7ENEXD9!b*=+N<ADlW&{~|=;VBp
zlgID6vBGKQGx*eXm?sAQb(UPKSb9*<1m*p{?VW;#=_YidPE%~#Ra7+Qtx?6$_JJf~
zfcG-SaAG~0pij*TB=T8R1A#E8y7d6ENwx$ZzV6pDx~DLt(NEpNnZG#eY#)wsrabAr
z9QAbuW|~yFe at jQUPvls~_mpRFA;&Op!Oq+I#D0{mlA#RG{?(j|G at uCgd4Dan$uT^#
z=_q;^od?GpH2e`|)`4!F>sx^!9>IB?Nr(e6SgZxsBioSNpLEocMSy&!Lep&2_QYdJ
z!o_oC!IH!syooEvllR0wT at I5M#B41)U?R{ppH^O8(#jgD0zt+B_xUM~M;DOpkQW})
zhIPpE!6?Hi<R at 4nA8#X*>Gu9koh6P`KrQw0&XetzPY=pV3Fu*3mp@&=UmWbvzzSos
zt~G9*_G(=_HHy_4m&)B at Wahqko6=YZs~i-*e<Alev|Y=g#=$BW)scf)(fTuidGtb#
zF8v<bc=?C%RL)-s8SPweAGf3A{9EIaK!t|j8NAU&J|8S(w&KcpxyZhZ=lo}CzO(3m
z2TY~5EUDJW%df0xOxOR`*Ecrr{tj8-*YDh3Tf@!I->t5%-a$(EV)e>BU8BMU#Mh`O
zem6oS_G#5Gdq1u2zwx{4>3_v*hS}hv7uwL%eXvRj$%mO<SfU+hg=-skErt6Aa%UH7
zceife-rD%ADTTY<DpeUyKXC11GGvt5uBIx+Er>DF6VL;YB9)Hm5V_#skf~ib=MIo6
z3SoshaBs&QCwoEJ4nA)ewE2FBBTo1c${3`5Z3tINA)U{0wulsq#qgZMv2%(%wn+TT
z%QR<@4E)PNT1G-0wp5vDX?LYYk8qF5TcT4i9Bq!+MyMnOMw$?%D_3?V#R9-(jBDgY
zMp1 at _hR%XtFmVCv0VD9~@TNU)GF#&nasUm-Dmd1M*eG;MCd)enYT$wo{g;dn|6jQw
z>phv{pGCD0U6E{@6ODxfCQfJ+**5cPra*z<6g)yAy(4DT76E|9`Ipt_ome2fR*_{J
z|8rlGsXfIz0kd_(@|2J>HBJ|0er9VLdfluIBM0c~t2E8>Gc=BaKxDbRYU4<siHk4O
zJ8<_aRbNR)wElxcW=D at yz#wc(b=o_gP%9L70)CN$HmY^fXnE3+d=r^MA(DAn4i00?
zPp<*SCw<H)Nmo4KNZnU~>WtN88wJo-YdR04dvS<!s?fAwdJU{^YYP`KUjU7~sA^cL
zDKsBDoK_6F*SFYUQ2n0T9LhZdMb{J}BBZZ|cb+6CHg8)zuz(>_WNJ7Z57ADg+n2W@
z`YoK!#;Ua)U!2kh5M0%Uq|4e>GD)?!3j?G<qWps>(v1lrb!g^!<hS%7pprW33MbYr
zPSxBb26nPHX4A>(0ei7_Bl5BLhAUpc(e?X{etD&CA9_}q%iA`xV*}VIcELz+tqM~M
zQ8GfvpULU_JUTA#Dd06n1<|H%8@`EPBm7*7mKu~?4Iv5C$-YQI0!f^<jiqPXR)S_d
zCp2yY$!h6dfaPP at oov{qf at 6(ff1ur7xyRTBDGlMQaW;}Sm4Kntoee-1pVgpfarQ;9
z-DEQI3#mqv32W0LVwM0Cvq;HYYm~;L;aPEl6y1n}2qlX<P<}q;QWIk5@)1~hSG%u?
zm#vH!eMpl`!nI~)W}$u!2g9^o&gM9VWXV&4)-)y7w%xOnQhTxs!%$77!1Xs7zX&!n
zmH0(Kv}<T~>_tVz22sO|5WGiPRNfc)kxnE80pqL%&Q7zGwgs59$kGGHg13|uQLg3%
zBPOo1Lb1G;9^`0Bda|KwS4yZ=8k5=}kf0lguoQbphZzf&NJnzvQ*QEMno#yc$&Z>a
zuhh8iDg+paV^(UKQ8WUjRa&T_8VH95nHL>eEEM_y`6H=|0WJjiNQbd7XIe~|u-{H8
z26B}4o(;dH5zk<)sY1(Ne^euP-I>T`ZizJWc@{__Z7PeEhB4nYLh|fnr79e)XoA`)
zl_RSosw(V at 4^vjGumr!TD#}H8I|;3TsAdE3iY?9zb;*mQe*STr?Y`0ghif07w^*f#
z7DN)+<S3Dv;mey^!JaDlVAFI0wN}Y*A$!GAAJnm4Nk}>?cG at rZclO$U-rjq*`|PU{
zWVRXe@;3bywTkbnOh!wOYgx38D&0d}s!GqFb3cL)luQEzJCBQ~+1tY?BCLY^Q7e8B
z5v5fYbW4FNE--7-)(0C>%4!}gF2&%=u_#S8#%l~U2Zw^PJho~#)e$`vP at X`atti>~
zxI%ZbIJN1ZTQ?0D?Bk=)EGCJ~_I=M#4czQRFvFapr5D_KNtGI@&J`)m at NleuX62>~
zcU+h%dHsoXi$<V{l3GI at Bk!a%tr*m|wg>dK8ir=gKylI0*>79m%><lx9{`<Qt~*?z
zYMFNP9!diQEq<GAa+?;TwbC?Srs1eAY-NkiNe3xNCc&`eAS#4VxuKRv4cco#lh$w*
zP_ke5PsB<%EVtoJMYC2tL$gNdGeH|*jY1G~Oi_`(&5%J>P$HQC2w9_pjD=(!KsOGc
z`9#=e-kz5xKoIA>`dpT2%vvfBCh8I1z%2+rD+P1T>BNuds`LlSM!*nkmkg``^%W?O
z)wvlcF%j1nWg)npRf9;WUWlTf08+va+I~js$~=pd at nQ&&hJ4{kxh67o%44Aq9r)~`
zG3l)|IxN3u99?-}HsQ(mnnon^7>uOXnMIg7s&iPOdX&<s3VoG^0zh`V46s%niw#0d
zv&tJ$rfE1nL7|sxj%Ze;CG=Ao4JHPoDGw!|mVUQs6qj+Ogy+mdCs)(&<&)r2SoV=P
zMF4}8crU_r4N;|Wa8_({KTR+PAaE4SUOwu;Y%T^PdR{aukfq)6Wh3JZWoC<?6$2pC
z(li- at o5n=zKtXf*0v#`8Elj#lDi^UMM{rK0e+PbxL*4=Ejg%sID#Oo}6lwr03X(Sw
zx4|hn<Tib0r7W at krx)$Ri~ec%(RfTRoElk{nsKY$Ak3KEY!1*@mN~n}z<4sSSjf2m
zZC!FMP)}gQ9spYSWS&*a3x+#pbI6d_;+6wLnP*z$!?0iDk8zEqk|5z!M@}nr5{Y{g
zY5dAwq<it^($kExrAIuJ>(N--=6o9 at fnbC<sKc5l?e+tuv3L8>N{%YHeoT9?S}_SZ
zZJKz_!+JmPVhzH4Q}!*v?jCxq;J^sFvJnh$2nNEYowosL8GwfnP3+JE5JA7Z_14M7
zTg6vI0->8Hvg?qZI<&DMKl7of(iF){Z>ii(I)Au-bb*YX5$6#a8+tVHS5+CIPMqOl
zAIO!;P&<7n_O<LWQ2y*{PA;Px%%~_7bg<Azx_S>t7NTMXxzgNJ1D~j~eZ0`oZvWWn
zpYnENjV&y%h6DLs+!d__vd*KX%13b2KgJp0YmG|FNd_PEu})_}6?cAby(G3|N^NKr
zDXf<b(ztNC=4|3|*C3LQm3_S~HybM5$AztGn1RDF;e)e?1uo<%)xxBUE7z at iE9@yO
zOKs%ddG!%oA|xf!{W&;LozL0jVz~k%oFZ?6e5-D5>>L+DzAY$d$qlx^tVn6#CE!4F
zWtiffKX^{`4q(h&z#TsnO(r)YM;c-~xa0SErKyZNW!NWMdYDo~Y*I;_ZLYw>6IW)J
z&j%+}<0;PK(1 at 0BXHg6lZWR*FH698O)i&8sW(s6#&<Glr^f-s3R>sV{KetxGk<K0N
z`b at N;DMVnjQ-f%0WYV9U_O8 at SvGU;F;RydGv|M`wN5-75aB`Yw!zyElt0LjOinCY6
zJ(yF6gA=_a6(k95ti~`nx_c{Ds`y at RapqKt*EN*Bg7}R-3Zz!J at x_CGV-Ku<Eoig&
z{~g0Mt~YXX;nm at t?*F&80l&Yp|KIJ6jo<wLu8!%e*SMztA8rct$FIi{0Nweby5?P+
z!?zmldOvi2?5H0-9liS06L?&W|KpxB<&7vyM?>87KxECg!;v`CNw{ipB7Td4!?$#8
zqo>}W^JD)+9e>124g0NQxFIvgy!xxbAVi103yE0^PkV+00~hxPR>+P(whBrgbMu$5
zrPv4~RhYSMApWhYbueooNHp5Tr3cvj5ygl};17F89jG1zEqvg(AwG3uNLJAZZRp6E
za&$qD!J7s_=k#p{QAJTd+{0hwaR&vc1B7p#QwG^p9aa1k-K)mj^P=)I-`?9nVu<~N
zSFORYjaDYZ5dt9+x}YFMUVRGp_r{mOc^#(9!2r_&xEl*&V+!;%zQ)y=CKx0lM&nyK
zk!_p5cw;HO5778J_ at 6hHI36Bdj5Vr(Qd(n4v6l9_h?dnm>Q{0mMARZHh$!5<JaKPs
z4YA5caHxliIkrk5JIO^P=OMKd20|HKR#-11*?hceu}ZmrDe^2VqAxomrVH;M)s}nw
z<yTB7-W#}bpF$=rS&8$}keXI=;Z&$Uhv(|E-rGORx~}c_o6b94KtQBjSj2Y+k2L^Y
zue<*z+`=z1il%njAIpI}b at c>5zJYT3wJwC3m;K}Y-sHKQ)0e9C#z&p=-v5mEVKN+?
z)KtZet2g+u_C?LDrV3cRuA`}^a*%l|iT2u3!>JOh6|mqWL8_$C$)z$JtM6>Anq&26
zOKWSz`r6j&=GMmgUtw7}`>dD;I4j{E3^%GZn3{IY4oglLaC&!+%JxlZ$S0$L9mzcz
zv&sabC at po25m)nX7Ug2eVh&b{66`__Hm`9-k_X{PqID}CiPsl2j#Mfe8!{h<{n8SP
z&BmfBuzn%>o(TgQn-I+jmXehy9p at h0SXsGu^VK6>+j(_E<uUPEMnf4}Ze78>6YN-A
z>{_UEo{u0W!pT^!B`Swo=4sSmvW!>Tr>9=M?%hI5!Eo^=3Oi9(S|M at RDp$Dgo1;_j
zT-5t7uUjv6uGf}JrK{Agr-?v3AKp|-Ubj9kzIebRvVY1(CgNF_QhCx{&IQ8fl<16`
z22 at pz7;2rjG1+21yH+L2fqEjS6r(Gg!prU>%=%2h0abaNecW?gv>ag6-LNDIQR%4u
zVI!?S6tY?%Y2Qsna}$*1a?z1S=~p-BHFSIFjAM%8;=Wd6*_?CA>)XTLRsxX(o|y8F
z0-=Gz3*$l4W#kvaiyK#I*0=;#t|3Nj)az-nMr8_Q8EHUDQL(9;Y2!eNf-fw;`WUy(
zhP;~sfl%|3!QQBxI$_`r?D4X694S?)lzV?2Predl6G1hXE5(}u8<o@&Q1j)vUWkzs
zYthkDum`;!ZWY=2SqDjm8NoarZlkHg9)xTU&hm$6ec{F2 at SMrc1g+KWX{=4G5ci&o
z4RT5-KaiVs%1D-}Mljh<(L#C#xzF7-+Zix<Sw*RrVJ0)-Us at f#=CxG{D3_RV063?;
z4){3f<)HKKeO}45rU5U<#HG3^=qoGJYEzs}pfMieiu6K at 6F>=Af<&9UN<;l_Z8QIb
zu>b!12RC3AlS}IO_60W6Q0!I;22UeNBBM1H1i$fSndIWI at pA{xa}VC>5C{Rhu6A>=
zkL-q-ztUY#Sn3H&Dwo0Ojhz=66CtBDrMb2LXm9t$LHpVEH#;CJkfX`E_KWBH2YQcs
zO4B}<YC9A|e7}2tjsxZPXwCx+ixt0(i+osnF#?dHUvBe)opjE|uUcvg=W!M8;+y{6
z2(I}KSmz#>Gng`H#MZjiZ9vi~HHp+Lj$cJ$rj4VAR4DD1q-M0=A41=H6U^S`T-pTP
z7iRV+lrs;NU;{OcqY8wgdQybl1fO9{B#BKlS`0+QC8_XAa8iQC9 at AB)ujiTuZGNll
zAa-s-GAcO9M%O7Qc72ald%5O#e~yWy5%@t&_-Tm5(ypHKpv+(ij(j{nD4Fm%r@?+7
z0c)DkU~G>}GFF;48n8QhA6<ak{~S!>g0fh at +G!QPX=FrwYh<K0bc|Ocm0>~41(r{X
zN0iJ-0EJ*G(kt^a<G!{7l~AGvvqzwUha|7KD~^!o#i at MOHyf=Zm$#Xem5mt~=B^zA
z>jh#QyTc|l!Sx&6TI=2^-G#T7R{+^@{{+fLY7&oUNEUhq=kE<ArE5p!S3TtyaG(}T
z3fZz-E<-d5+qbWzWsovz(*F^5R#-Zrc7W4^%_Hmu8vrLq7>fpk8A+8aJlJ{HZ at u&4
zHRhgx_LUVzWT4Im7SliC{`2Bo?WK~%N@%n>Fi-dJWJRi&&jJ_e$_gf(EoxgM+)ZSF
z8f-0i7>E1cd>0TW9T+F9Cl(oW0GK^YhbJ_hz{FaBwcWiqJ8y>qZH<UAruNAax|qSC
zuxg-x-di~wcHi?a5A<AO+j826#aM2Fx%D at gjAi0A$O#&`x at mu=8Z({$z{ZD=s$&`y
zh>MvTP6|yw|5 at F<dv~*R{<F5W`P=zVg27+zt7?xcpB6v%&$hVI7<vY~6NvF*{PzB4
zF&X0@#7nxrxkUq_QLX2fR*yiV4P0U6VGcGg9z~!O3_^HmLP#)Le&*32*4CER*NU}`
zt=oUt+FY$QTJA|ODyCE$b>3 at s&{LR-d1;b9Q&hdf at rbB-Sc;H=WQqYai4Z{$#5!9p
zHR_#QoFXg%aDXK(wpQ at gvksFHvJW=zH#Hm%^f4Tf6AKV*n!zOOj`U*jWcw*X@!-iZ
zyk!uUNLIC<=9qppdE6g8(mf}l$@Gy;b3TCp`<jq<nw)K3@~qQG?BP(NL5!qQ#@Ub(
zZH(YqC}Zw-%9zNU*aSAEK#cXZgh)i(JmH#FqD!zSVJVmpaV2#L5EjSRlB5Ul$iM*&
z69uA%1DF8>X)8A8uU{bT at a^UG<;_K=3ue`YTXNqO_$(~hB3cHAzYuZ8AtGQqi~)VS
z3X7i68h6mJhxd=)bADUPaGZfn8+UmFcm$Dy<^5h}RTD6=?~t<T1BXM0s|964vXD&!
z=Yh_IAdQo@&_wzkbH)zn{PJ at K0>QB9;4L#P7N>)+RbJ%Z9;yW-L1(PfA;m3Nqb74$
z+q`1zg_f^)a9AOsODjS-WeeNan1&F6hZ}S7{t~O~@?}<DoMzgFbF64T(AHiLq4oSi
zOY#XOb6;YsJ(rL#$O`W(6E-8V1_lCTl(TsQhrdFCAK?SOf2v*I-b%7ln%7#;>}7UR
zN~)VRPI+ADo+gb}C!}n~x|G&%wmi>7SBx_bU+A<=uPZ4}b;8wM8g4^%9%xcswy=>D
zg(2Yu-Czw7X%{Jo>;@8s;p%$2b(e2*wY(*Tt-+7Z!MV4hu$KY}>!K<ziAd>RMT0d+
zYJ72iu57&9<GmVV|1mR|HiR>J6)69}NJyY${L1qY7xA6XDR>vpPHFHqo5JJ3;j025
z^!+&N8pnY at 3nw`_9UcP13_5AIz!6hAf+%EYFJwAU?p5onzxK}`LraB)13d4cOC0z7
zZJqo?&Kh?voGI4!V0LK_6`q#&&x!p<{Vb-fh$K1r$qFVLUV-<^OW-~H*T8%D(|QBI
zm%w}S6XKWP#I*OTqxh#jy}mi0Aa?%oHIPmQ_o37(XVL%Bpdb2POA(!}|F3P{UcXb)
z|5sNx?)>KebuDCHvC{SQf04PFH$p-q(CXJW-4$VTX%$*MToKl{Ht#gXc*9y!^%-ut
z>gA=;2HDRya0VS0XkRsOPn`TERYL03TPVbGaG9Q*Z^6X=_U-adaN1f1xx)x!-ezCG
zT6}xs_9xUS;TO9mHNJdb?2KTn_~xRAJdvZ~9`wnhhcGLgk+;8L3lC;)ee>>W-a5jy
zJ?_CxZf*T`aqn&K at C-4mdZUM(35>Us<<UiGy2D%6++i^E%L~S#gef1p?arIx-q|UV
zZ_|-$G+rLV1?`BZN+-SLL2vRvH0mTW7UQb{5A?qi^;kk=L4l*4#Mi#<Q*2bvj}cD`
zPEEyMcVFlP at QkW6*-DXl{sw9};y(hN2tS9AA-(0vJMN#@Tjkmr_J|re4l_oD*kqWf
zmt;nt7TdCY!@i2HY8hm-eF?`(E;}(wobC8fd!9wcJrBsGF8mTm&R(z!#zGC-9%(P>
z{SglQMi?=aIoYdPW^)XN9}K9};So+~d9lUbCq4QbsW_#_9d#gteJ<}9d>MhBJl0&^
zzi(Ty5gZ=3y{9S+>069??z?xlSHF9=dHCJC)!X>*4*tXM_#YfIq>%(6PZ?Tmczn#g
zKMbLL9;{kNIZPgl4G98HyKSveg($uQUNp8^xkqeu!8>pl7#6*kgZ?`lf?(%9>72oJ
z5>XvN)^N2vd=Dyq{CvMe&Pt!f0*TzggO<fh+r{K9yf{$}$%BOS@%$7?G{a*U=JA``
zMY!k<`V-#&;ktl(>KKQ~mYg|Kf^9&;xMdw(AT$^5m*;RBBn}XE!V)&Swk9E`Vptxh
zj;!30-5J8M7R|l(wsdm^htKcU9}mX|K;yzZf64Gm34Z4JP)#RDiJTOZa$giUrz2?C
zjc<kTp%gYL+BYUubj;A$tJZt83N7<qvG&;?Rx8SXwV==i%f?*<mr#W7RSUTW&>}yT
zBtBWOZU?Temlk^sdP0mJX>D4k{Q-_}Sy0H9&H5+p6x?Tsh@$0UAx}pCIHJnvU;$SJ
z9r*!YONOs|_lot~2p*0(NeU?j_zu>Y@;e<iUasB2%P=txZPt(vo~3J=3S-9mDim?7
z4;~b2Zr%2DBPLqlYLL+1tyX~``mcvwL}4dD38&e{C9YzQLIJ0GSm>jp*NAgwG;M#v
zo&CT8S>8P|V1MHWT-w%VC`IERjTKy at QUfcD->s8k;S452Oxy$k>DAm0nfsatA6a{~
zE0)tD?5PZ at FU~X$L}_ipBK8CWfbjr=3$_Bni9c+TWTpV<Hjj|Vdw#)7j13113=Ipv
zg73bgJHQIf4QwJ^kMmt=P3mCt`nvZH1OP|yr3cx>NS|psx_Ok;s at T7M_fF1W<@c*Q
zOdF}qzPkIpj#_~7e_#a2Dr_bdZqHI-J*luUONG^>!Wz;oI3zt-0Tx>6P$Y?Qd_a4}
z=XAIWRpyVOQ2 at WGu-t%<+=OuSX0;49wkWi=NeMdlxxeFI7$70S5J#fNn0+8-?EUGu
zT-$((-%10xU00l6j39GyXod>}*e&8RgMCr}R{u~7fU9(n*S_Q`wF4e9=n1~-jVdZ>
zO%;(E06>vB`dOXoa?<$eI3e$yXsQQ?^I~w+h6|h0tN5~!(v4NH(EQQpNDALC at NHvV
zmqJ?LC)Plb`^CvmKB#G>%zEucY^lCjtS)lJ2n6!v7DC)@A~?x9TrM$~W9S)#<nSUv
zvVv}lEvZ^21ONwGI7iNgh1R!RgJ=oOrXO at 6!wU%18LZYMwz9gcY33Z$&d2?qj4h&i
zLpz4|q$RY2hgWLpM~uahCTvBULrVbi1hKf({43t+QwGLnRuf1JFK9-V1#sU(xNvQ<
zwi)4R$r43PkrQ$nUPE+P!I+PEndee9p`|WdAeq8rI0}`E1+@}_py8>7m3zcY6u935
zb;gARF5ZM_wipAT5PxFa2h#Z2CNA{Vp#MYfbYXpUb#rNL6_LzuZ9(Ah5>KypChd?d
z;8KzC2wW+G`YHP|xjtl~OxwaqGR%dj2B|e>DiEexL39WZYw=%es~dOkZrn{fCrw;N
zkemdJAScR|m71y*iu9^eXsNEDDoI*H^<)_+0Z>9rD)zWZk~2EdR6`LFXv~|!>4jEe
zCn=+R@(0lNr6pXenY!BoT=Pd=?7vE4U=56RJrx65Naa8s8 at B<vDdY?xT(Jd-V5jx#
z<VdOh6nT=iGzF6BLM3aYMyeP%&P3`YOK74&v{)0lc=<$y3*Yf$xSvkJ722(@RU%&2
znnJd<ZItO2ZPZh&LSKcyj*X&`X*@KbQH4q!2Sp3h*yn65nD%@|p<Us?vo(PXNN<Y4
z#n~Yg9;m^iM9G=00V>rahLaUwI_ at kRIbhwaY*20|AH_y(I}r3OW8p2)q+rTO)V&gr
z-%@@Hrv^KT)(Z57F7%QUQbL(Q1oBUnAk}~3!mc(@{I{s=m~@<ok1~ZbKu{y+f>cW8
zdQmY2LY8Se8A28yCSBAC0O`1+iK{A%t_q`@kCbT&Fsk5$J*)5Je77=X6UQ?p4Sd4c
z)XqM&Kkgb4-7dHVgCP)k$z at 38;xlZZ*b6Vl;q$Xr$2Zwc at zH$*Ew)Ta>9m at ZNR><?
z0cO0W8jhoM-gNgKI%R*_u~~}v0H1kpy7bsdB(u at wW#Zze$_L;6K$rm at It`ODC&LL=
z(0@@QqiBPRO)&?>UpnCmoy*|-u!fNn4JOjlnijcuTw%0f<8TlVh7U;-V<DUgX<pJ4
z=d08X8bnjJ453L0=b6?jc4|#>F#yLeXm#076DTXnoUyVflmeq!qf)>u-7WPcrpMnE
z4`Kd=#b-JHd(#>G&|m6dZ^4TLS3e4ze*U+5_s;Fr()r&y8~}ei|NAw_;(F(Q#Xb%T
zu)^J|K-~ayI-#|VX8vLUksvfs6priQY9TQme(1o<u%}TJczN`KNdfIl>BZMCHdz~v
z)^M1EO#b@?4r{nh$2{zl)w~3Hq>IJU89mu()6bufT$f;yfw3=n0ne at 8JL?5IxAhhL
zZyo9bj_Uq$@uvT}KN=Q)?7Z!CJH@>>^7mmEVS<h?en8 at x(=(ibE&p)t=XMWW>zC`;
z`QUw#;4E})b3Np{T3^Kj+{xZr+h{xsg<pypC=nwgs7}86fER3TWg7`CM+-*$dMRQ_
z3(_}*zhty)E1NRZWgVj-;-UGMkg*eyg&0o#BC$6q?Xji$;#C-O0Hmgw!(*x$i-y5_
z3 at EU2!|6%9W_;{zfS?&#aW<hkfP2KGMWEHOAO~!_!uj+y1pgUwr<y9tHietH%eEY9
zq;Dmz-_FZNOaJpC^NS3fpuyJm{-fR9MJ=_s|3AC?i}=r-FUoQ2YHCUqtDe+U<<+ot
zu=jEY-Wrr!7K(&QRf~Q_DZGlIR#=iT3F=;tgbJczZ^b8t_7~3jXmenTj*)!cu1+|=
z03{$FB(io29Z2M?3LTUu{#<y3{c|7NDAN%asU&(~(+*|k&tI)EaADD!ZN?ksZH5_d
zpp{u?yo`yu`TirtwJ+vmR)rgL9Zur~cCO;pl@}OefEH#vT~>2#Q7|W56TlS^=%z{E
zU9RtNY7<-Mp>qqYvjgSH#07c*oi6?F`syE+_y!fFZY`I(60zm{O}oR!L?5G%68{m7
zj+D<M-V^>2Nlho>m_0ZG4H2+1Gjh5z?jv-CXF^sjI^jtz{poc{qPEW2zHQ4yTb>`h
z4Fn9%)rDUO^87kZ6L5s(`MyPZC3MmczvSEtTLpTBqd~)Wn`NxE)*oeaJb0UKoB$U0
zS at 3=(V<kw5>mFdFCpCx30rD?h$uH}(W)whb=(pmtES(dG5{?{o3R^9Y#PELThgoc1
zFVyl=ioO17p&^~h5t*vA`mbF#E_8vqDBV*SjS#{Xy?z~VB(@OvRrzRXC0v>0*^<+g
z68+ at t{8)g)?MB=i#n%P#u?EE$QO+NqGcGtjxNS at yR&1KB5>80pB4xX_h;rjnIR(6h
z$h2C7GPKN5T_Lc`4L6TvTaLCeCs_Da4|srk46g}zhU4{OvAO!$opj;YQe!7M5z;f8
z_t>~x9D at oF;XOXT&?dWh$2P3ZK-~hFU~3xu#~NvfpjiX|m%VRoZ|k_#&FB1z6;%x-
z*Sh)|$8zF}?C7a&xt7zMR`F&ik&+lwqDoS}B<_Dd?+akAYZfUfPTPG>`6L#()(i%N
z!2lQx1{0pRT<B*fJUguiI8aDnx+&#o+F*KUk33V9<`ph*m;2;LxI=KrST!81<VFyT
zRxIbS3P8x)UT^Xai8#Z=!yS)$%H~2!Y7Bn|3>=K5W{+YE2;t`G7 at 3Bexl>jiPMy at I
z#d{vk6XQqX>NtB9bIcE(UFF%IOhZ6>iBZD7L4*ntPO=+(o}LxDDl2kd-H^q`^xggm
z23zjb+?bQb=HwL9#@w5epTQh+E*u}n+x4vd#+-ebL!QnPM9Bc)r)feB6N1IJPY0Hk
z5`psXOsHR;?2S*qmOuo5au{N3^8|;=5N|_ at X@b%V^;#&lH+=7C`<@!llU9G=9QG`j
z4aof;0w^KZFmYm at NoGyipr<(cJv~b2@&6o-I(uz3zs7E1dlBEnEdS5-)ja-tjVVF@
zd;j-Eh<wSim-PR<;!gLVzc=CzI{8CA5!Br3oIqF(PN6$9C}aRdrVV(GklufYU}%Y)
zp at HwtKHE}szKyJ(j1rC<9b-EBdv>EW?rHKlMI~w)()xJ0+M3{4xT+6|?=cNAW)}4V
zeIBl*_Ri+h$55@`y?XVcegEOZO(Z3GdjI*8 at 9#g^q+f;T*vs!<eYgE`>+knpZEZgf
zEy9H_E0O_DpRK`p1WmQJvVLO)QSLbRgVXqEnzuaJjB!1&bUf<*!nCWdFR%T{K&7sv
z(tLy8=+;*^+14!yH at I1?-nz5;)twtSD!cyy*LSxk$61cQ{o&~cRUmNBF|-_4m at 6_=
zk9HgSRUTCuz$+&uIy?u}8`)9|?gd<eWRloniXMtt<(}`h+87xeooXW~$^IL<U$W$m
za$eE}veCyE5|hdxw{biTN9PMK5Wj}3O4%#gv8Pco_-I+F(XH5#abKWxjS<;BX~C^p
zU6Fasjw0&W%JM#?2&%gnd4AkM&@lHlDjFBKp%wR-N!Mvt^NgLcKbUyFMiW5HjEBS1
zeH_M;sIdh__-ch4EhI%d*wZ&=X+A8Do+dW$0d}`pNH-GG)C`a4;s!egB-XhD>&z7P
zo96=i-FBE#2zBBaS2t!;hZ;6_l-rEp1SK6*?N<_XSZ_<q+gRtgc;mM>z|{KHn^Ji>
z*y8ne)u^`a!$`ApkvR%>M3N-&@JTFin(XFcXcw`Z&f=-rRhou~ptUs&pIBr3N)XvV
z?eZw*>twiC60SW64LJ*OhCnF<4RyS at K^w>9FPoo8nEa;C<)z2e0N8x4a705=KEVNV
zRb`DAg|e=4xrT*W36QfB*d|y^2?rXcwkTj5{Ln_J^R1Qz&&E};hm9o03{=&sAWiNb
z<BOyYSNMXLLX4^k5cNA4f9vfWAh$cY{4Eb|NbSP(3*^)}Iypi-))=wTAouglziz%H
z(RDK0DH?}$>934MBq?=iP at nXUDK#-+Yvq4%(s6#J4=1GiVB|ql@{w$I$k`|9D++5a
z%cwjGyW_JOn5KtPP_(-j6(ejEJ;ja+1wEFKh#}UPBovkWOmXSvqKCuDFfKU->K;UY
zUX*+%NE{*#4)0yRxZRVN_5E^tL9Q^J6I|ATHMLHlm~1ZDyHI?fS!(I3uoTv=o-0EO
z9Jn3#91<%UvrUr!W1xvA!z)qelKGFs1ea)j7IFzbsAKxk)o`=f)ITg6_$XXiNR;I(
zp`?`M_)CllG>daaYG at 3Ax6|Uj0?iz`y_p6_5Ztm!PH7=~Y;6 at 9P%;RcaVRWb`EmTG
z7%B*QGGs0XoPE$`bm!y)5-?b}36R)bUHa;ET!&T8j(J$lx9zfT2=Ac|B}Lo{d1pu=
zC;aX){+!Dj)oCsr+>^~$UO?95O&f0^XpH8l3;~c<muzxQyVdLS^>hG_x1Mh9cns#D
z7Js91OcYbwz^iNvI;qwSl at eu@>k7FoR!aH~&er;o8>vTGs*UZ+ZzS}FOQ+3httft;
zVCR3;8dzWJ`+pWH=M_~L>%XQsSOl~M!H||rhDHv5T(PM@%SnP;kwY6BttZ^j_55QZ
zRAnAb5oT8qX}-`ZS?Z9X_B=My>DUW2je(Jzwx#JP3XVjkM43e@`Ee|>`fmG&>K)RX
ziML&D;XwjAq){fFtimx*EruG93eFn*KRY|FAk+8PfMfgs+fuW at OvL%O{)zCHZ9-_0
zSZjwCCLLrv4+?$76Juxqp~0t;TYz>jZ$H3?d?Bo^`N=~^;gc6FEY=GuVAWMD2x8t%
z&#BKlAQ*-cXyspE+8HqI3&N<y62^88_R?WIVi|z at t!)YPjbN$zUuUbOn{<uf6w^n;
zlzHt8Q;)-R^jzW#-t=Oe7>zs_(#9R%YGygb&;P1;ol7qB8>^ki|MO6D-szESRA>a&
z at M5a}2ZzO1Z|44=)myi2{MY}}K+aG4_;UUqtY&42oJ7FnYyy|XS2u5&%VK?L^>($!
zBmj4=ArC;|N&>BZhLkGYI~HcsX54{tiXkmjKU4lKjenJhH~`-}=rH-!zVIz{4v)=?
z2;w4~0+XfZtyo*%L(U;-qq?*ZT<Ov`S|LjTD3zlVjnb^HIb<;yjCdI6mVlq_CGEO5
zUcpfau}}`!^=C#u0{)0RDFT8chwzOO74}#V&ZH@{<@lFWN^umLwU6C7MHTl2vK5Qa
z!j7sIaVp(VE%5c81MRcB4AYz$zX6aNZ0=Zr at V@~dGQzgcM*SH;gemHDb!e!9n#lpq
z_4E!WYGDQ7(j~Z@#&B}NlLsg2 at z7%N;XsAvl~`byBdYTGWeCPsn~PPM=s`9^)SQ8j
zYtVm#vqs!n5*GtNTCg3$wQ&T3GtrfeCk~r$q#;HQjC;mBfYyKeQxE?z&IP8lA>4db
zR~`A)W~)P`YI9Ymz_HyXEDAhM&TyNBwDGI9gqn5$wsEQvI*b<w8CD=pa&m#^ZdHJF
z#xq!SVB7Q)&e7fCZY3f4eO*);tRSB5+~Lgx7PQW{hK)Qmyxp9)%DOai=pr>9vbS^h
zk|wEm8zLmG0wcQFqvovv8OfawFujgt--y8ZiC=GxzeApsC{?M at ED}9H0*BZHh=dtN
z4yCeCb3{}|a?Ljm$by8f!R4|8uR6{6_2sp-<!f$Fp7?rf_ye9;&;n<*ketAhWyoV?
zNPZ22t*~ExxA|<d9a_Li63-Z)1oV^5=bJBOR{;1Ex(6Rq`o+=dU-iNs7gG=+D?{}|
zZ*NELl-c&<(O9Gj#*^-P)2oMrK9*QbZ@))O9Jw^mCPrT0?qJQ<RAO6h!+dCmtsp5}
zL34q6N?*aEN5mJV7u^-ejCE>v#*vdTw3=xX(#M~^%xAuktI%S`Wth at i2h}go;-v=U
za3%z(#yfHgMrW0?IW#=vWavi|;4E at L?~$XBG^ZgPK}dM)OLA57Eo3aS-7mC=z_Qka
z#PU5%S6I<VW6CYGwjVqJVZcx#zN2A at T*^QQ?mSukDfp#;*aC0>APTWo=L{R>i?Z#t
zwR!WZI$kwk8p~2_VA+RgL!M5C$cxfL;!bLirF+r`LkEr!hD92{AYciAwc{$3fZy-D
zY(IFp{lm`Y%QiODp1%Sb1hBQ4Cgzlc)6*(r`l9N+jq0YyR*`0$S%hcasMfn%-Ezx(
z>#F>*iqq-Ml0{!NUlbuo9`-Pg1c1ldIZEU~G$|f2(Gy(zkmT^sPN1ugtA*_yoLIMe
z-$nX53)|w!Fn^p at t$YS7<c~T!eZXtlVI$ytUVnekL!dlA5S}=XoMdx4I+YvUaiJ%2
zNWsh<oE at Lw3i19i_7+!HZ?CV>*0tIyV^aa|q>2;?3_)h#Sb%wWN18fkzK_ at -9}nGQ
z4JDw-r`8YjjT{N)M-UHD0Oh at RLIeC$Xv=vGSR|ccYq-q821Ln#5;jpVR~B+u&|p9G
zvqXvn8gq(c((N58JSkr44!}3G at T{{xU3#P~Nb!rc at D%%4?=RAZRk&Cy-y>DbMH<oa
z7i(jCXJ!2&ZD{$tjcBiN`e<%bx5d^=%1!IIbYnDphj|;%XU|xW=nKcVbwG`$ilO=+
zAl;y7WW&=g5qdWKrH_q`#b9WVA!U<R6A`z*-NwFsXJO at IwYVVu`epg|*R`wb|6KeQ
zTvun?`N8n8ZSti)V^qY7q;$OH<T^zx07lh!*I!2ptBGE&zUl=`gzXnFqY~0duWNmK
zwzIWa{X4p~cByVb*G1F_(kdOV<C8w at zm@+z-P(TkeCvnJ2XWt4RzmNvVRX3A`t$IF
zn`OgMp<@^0Ld*;gtXfCL at O1?AAR@>=T#<+IO!BX)Ys;(4*Yfh$eA$3?GA0Wiz{=vn
z@|DGfum5AG&Y!oR<JRAo+c1)H$yJ{|Dm at A#at^`ZX~tP?ADCbX-F7+$2*)z`SI$AR
z_1`LQa9RhuRY>fPc-lw~t>YL^L=U1{Qo}Vtv~&OQ{g+$6Hz{it(8Xlz<+}E4`|n#%
zpBAL-ITW0ulL~xf_(_=IT$J6$Vm#$hfl*&0{&1v=#3zr|>EZ%^F;q|+EUpG+;VbWd
z^=Ogx4J}#30N8zZ_|z66ACTd1)<A6Sv{4h{%B8#`BL$f;qlFVLy#h`pCiD%&G}Q*O
zn(WaR-*O9Ia?ZE8X76<uT8G`biNltttGmdE#`o!P={kgE_))mdviDiR`@FnblJNGp
zsKM%B2-_y_4gut&U+fYK7Q4k4MB&>S28Uf7Ydio6OO3MHJW8MdmJ3$Y`5pK&{t&*i
zsI|`S+>=L@`DEsJHSqd!b2|jp*vXhN;x-#Q>k2hOj5)y-=HGPK<Vh)x%2ippQvJ}Y
z#G=FvNeG<j;!=$d%gf8ond%C<zr#Hoj>4j`iHcYZay%Bco<H7hKihuvJ)<L#E9FYH
z&BNT-OE|;5C{57kaSl!PWlr1NMqfZ{n3#0qf}wHDB at PXA81XO4!TX8ZvU?rxSBl^B
zJ5YE6e+P!tEs`<X;>TvNtKsb&I3_}J803*el?4Xb-Mu66Fn3<RzVaiifge?`F^S{b
zM&=~^nD5 at 6gUMK@ku91Sjg at 9H+f>L+3 at 4DiMCC8{nb}@rFPhpaFn7{&c(31@)dm(}
zV0_$JB>q&6KD7v3bSLBpY$)Q_)|Q56IA(RSN7r878C%OX!vUpSb*>FKHJ}mOJKK+6
z{c!&!jQt2_SgjJ{Vk`+1G!^i({{Cn<9v)1VfCX}>z=L1;XDc2vAvItiOk`hz6X`I8
ze~00?y3$*e^mYA73r>3R+C`1SF5?uS4`C|4U`pS1g8c;m0Oh*uEHD7el at w{F=NfCq
ztaBbF7{Yca4Zhymh!Y93yv&{t=#&@Y23?Mkd1RZ*aI?}mL3o?UPx00dL!l=>Y(0Mj
zmni5E_XfbW4l15VK$dH;C-w&64U_|G*nG0cVh@%~XeF at AA(iU%H_ at XUAZ0Mr=y|;)
z8I1^F8wr81<VGh%;c0|}stcEeZ`%ogsa?w at l}d{uMr998f)a~V3(v8K$qifhHjd%y
z<94L(SsI4%%u^&UhNACb6K820*qEc_2&8q2Ch3c4$480<&Y73l3uUM=ZINw83VjjJ
z at Yc8L6HwpHa^nvy-aP(pguwbXjtg)kYoj$~<?hz8Fn{Mk`t1z`gEI(jcF(-D(vaTt
z>n;eDM_jb!)}B%&u1FtKUW(n;PU0<yn`QS7Sg>FL<h7|FugwIRa~tR7*7H|k at 3A&O
z3y8&7tj2Op at xemtkKI46uFL;)jyP)guj?>U?I}@>=v%S at XJV6xpFo^ay`5JtLoX;%
zJzE(TbyYm-ElGgFaPMbiDyTXK3|!=T#oJ^!IwXl9IHzqIsqV$mU5(X|*^aFcJZ8!d
zJ^#g|d_x=?#sDIu+w!(r{cMM#-F}DbLe5TWl3NGgdMdk#52eK&i6V&h>MMpKI*P<m
zFbqs2dJ@<Ytuh^iSQZ5kKHy^}sI+7mS}isv;;+zVQp$lP>iP6>-Lz1pl5~<8rhbZi
zyEuB41s?DXKdC2N3dx=%Z)(wy3poppy;O;4QRg=@qX)SL6@|!MEzca){KidW7(YDR
z=NJmnw!{%zyI2_RBUBa}$&A&P8%9FV0H9&>*D86^#Y_=JM-<;b9NPH;aE~1?h!;*V
zsK?OY%!KFO*Cz}KDr#S%)g)}%PU_j9K`}?6YsT^6^c;uOt=x at Yu-_-t0r3qNH~tBz
zTB$~ssWqDMjDK%-ZpiHf6zmdAE0axC_WqF?Q*}d&cb%2kQKxa- at nSb?io!}Yb`x#s
zfg-Z4`_xa;@lBAMeY-xoh(bLmBpnGKAXk$qX*q~nr5~Ek8`8B70{!I%H4P=f#T3w|
zK~q>nbXuYS6gxe<-<M(cTsw%F(#9DN<XuAS4KC2YRSiz+xw24BfLj1Ijm~lC9qE~z
z=i-B=iJ~gP2WxPVZ^2al5Gz-KktT7>8Dch&&wc<C8|y*SQvSjzN*9T=aw>%CrU2^*
z^2nmV47_W_-AUo%P+f#t0ZL&ioG+j)oiq_^aAGhJ4(WH8CP(B(v$!{%<;n$ai6r(c
zjhRDlnk|8QvpMZw_ at D@m{*~$lPkZTk@@&Yx*&qd#i2N!S5-HE&%qq?z)8g2uvL_4i
z;)}g=>whOhTOwCt|5Sb5G|vks?7r`6!*_vL at T1pJd?VQ;uo6FBsDX5I2+i0i;L2FD
zsR*IyWVvXoIE*nsB9#TE2GL}~<!0k{eP432m8cufd6F_kkd~4h{wy!@6X`$#)ugWx
z;r!K2sE~l}W5QCWLbJ4u$Due6GVXkUlZ?0zjnS&OIcn11>ks-9UM<5EXYLbu8)X{V
z*)|cvrt at BP_VC{Thq3C)s$33Kf at jB{%5L%gc`S at 4h*rnqfmxE0*OR?LR6+vSQHoD-
z%F%wR;wWGgQ^Iv>N>3gke=qN7K1XLl(OQ47*hZqzVrRON0F7^5NARS%AEA+CYSlEU
zn54O(#{S}Z12uZ3#Eaw3{k<_Fr6#@aM}23|v7BSFPog|wo_+^4gq%$9Sh{Qb%-&R&
zzO$5dZAI;DWjT<Z{Qzen3L0L9okFT%*-0}Q2cMH+f9Ne)Z`?A0gM9#t_Vf|6jpJ|c
z-~em8<?1<Z0aRF2xw=`0P;-fvHjHBsw99#~AWwGi+#9Bg9Al?4#ZnkI#$yUG>om at x
z0>9u4OM#$89?jF!9atnX8V-KYNK5m+UWfUWEB-s<;3h+Ci0B$bj@(I;2RIY<aC`gD
zTbsKr2KHmat9E`kqK5Mvvk93F&W~{pAoXb;ZT}YA4a*?cCwg~nC*?eNC(J*~V{lFs
zjN>6T7g{DbN*t6l?Z*M!^nCd4sxW|K?3g#y=MBk<%z3o$UTz}DVdqs`e}P>19(M&o
zZOA0)k9qM5?LG%l50isGz-q_1?@O3Jh9UC+O`wL}2MA|Fm%CVmW5#X5%iOTC<z5Vj
zHY3=jhrEzz3TWfjHaFXF2caM(eEts6Te2R-#RP6FK?|h6M?O<dVR)0t4S{=O@$=C2
zED)M9$U{1Z1&vOni^=+73^N85YVO`d{mf>Ra=&^UoFEj#Q}j8EpVYpr+x0RV#jm5Z
zViE+73gcLjMieyby at xMby+9f*3u@!%DRy at tASG=u>6xP|fI%(5do18;{vc5QW$%Ey
zD<Hk(2-1XqKm at 0Iwee$IDyeP+G9(HiS;RYtDv7_wT>=(ki}ooCkm>`^7I26R%z}pN
zwqv)Ci`-uJjv?r(Iah2h+(Zfvftc(;tdS)kv7ddo-$jJ*7x7lUE<YP+=|rI#JvNl~
zCtS{uohs786uNp8853uE9KI6P_(2^Hfe}<J1}Wi+<;w*O0MZU9sr;IbwjfzmFH7>w
z#UY-#ywHZl-d3(Dn!K4w2`r!$=q-X|Jv;>8iE*0Vw!!96P`psMV0e5Wk<-lF^QJdi
z`G(7g4Yggq?BJT=wQILl*KdCH<>6>}cG|{+^=qp)Z+!{v*WJKPPS;m&Cmmaf)D#*r
zJlcYXCJtfy?$Zivv9$RT at n6U}b at FETPIipq<A*X4?^F^Yr6XKdCz}Y@$3`YLF`sWe
ze-bSQ*ji-6@@F!^y*ZsZ+|M~km?}K*#d&m|K{{8{GPyP>E;xA#e6=8?P at NkY{fr}9
zB=eIA999Smi7jA1Uf_a<JS`_)%y?630fvo>;-?y6cA2wNE=94wwipD(JS)-1 at +}!v
zev~K>8W*l!aMi-X3Olv#>6bWyRG3|_=nz$VM|ubQi+R4p)0+C`6Jq(kMuRR;l6}#D
zAd3;nFyr+Q7UF^2wx^r`simoi;46PNF%=8S=>CAD5s-_~ULdHRATJJjtb;VM4 at VRh
zb1JwKVM@@!pBFhl&Y at DZ2prL;y?q|1^|Dvj0!l~Noi5=RZ8x9~=S)_>+NzHG at 8O!V
zjAd3ma}?3)a`j7s*Y?Z2VJRNHU00*N(zK at C1hZ94s1SxZP|51h*`%-Qx(GdVR=E at H
zINICie7Ami>SW$(qm4Us+Dtu;Tsri6k&*{oBfI$5S*?=neEL(innYbYL=!L>`GK7$
zKYX78qBIO&%o>MykEup<$*8TcGi}v4P7o-HO&BotGnDspiwC;n1#FW!;kjE4I-!$Y
zeXV5ogm&!f_*-A6)@DY>Nc;+zUlkZI&KOb}Z{ji-cCs&j9p>5x7!GI{I1~>a=Lbl0
zdyyXRhr$NVW(7s3oGUIIL^g#{pA3$Y9Vlw1Go+P;e_?ils8}<1s)xwxf;~>`hftFC
z`m{l9^*}??Q5tp`&1C!!Yt;5f-MeqyD9BNN2~6QgBeL(f;Vc)%;F&T*c?bXqh%U?{
zUFHr?>h8+1T_sZMwH*>Xustr?x_|OIAQ9((a$IQZc1yQl42idC1FzUS!k2AU2?cGW
zthzB$=L|COLfdsfPq{P(x7y<B7#w7W$t?$J)bTKeQaEW*J2(PjYQqyje;RZo)^%6m
zXW#*Bifm{ZJHmr3-?%=SJ~uvw1L71nSMhtt!9inK(m|GU>2LstmA%MjfN0bd^U at M!
z2f<^f=#BGvc-9#JT{6RIZ^(tPE<}I%fOFd&t{B)qq&;OKug-^H_rZKYr4KDEtT6oI
z&l%yUhODIkjE6im;01FD7g;jN7^y^9+6~GSx=E1lRlH%A2qDq^iLWfSqvm1u=}s=B
zmAAtdTJAB+`etZSU^Yws#k|Eu+%<p0m!zOW$HLW_I4F+H;%sR}o6}t5Nd;_{F9duT
z_IAd5gkVx-y_0)|amzYyHP8h>5-=yx0t;W99~ACbccAV>kaGKN{%kaW2=c)~3G(Re
zeK1!ahXolZXcwkJ;bApv9+UR>FSo#}6Jtb(MqYf5d<Pi%?_WMmz>(B(xL^dLzJ?{W
z4LMpi;~rRGFr~WOs)&izJ!69QO}Ew{%K<yM7HOoB83h=oU2pji7WvA-aJbhQ-C4;`
z4V$qk<O$YrP$0z5eG($Jc;9=g+PEhYhXI_st+=Q8xe)>hMvwkV$c9nal6+pUs4+>z
zLpsL1W)3urO1Izjj~&_RfW<4zHIYN>!uiqdaZ!-G;qci00eZdL(l!d7cH#)6b_9n6
z1mEPNEJtQ{9x_!zd6Zd+6bvnbA!9yCAf$!|>lQb%_=2Ata1C88W*JALBgF_h<xL})
ztM1Txj*^6>a*pBdz&iIhxcvK#P3h^Su!iQuw_Ba!`q6s9JqG>1LuP9c$Xxx^`c)i;
z?~s(Rc at S6y{mpW>=>co4iG3Xi6WRJL?z=hc_?HQq7nJ-*z_i5(GZ|%~3$7|`YR1+5
zRZ4fT-;|TSZ5^pI13^q>2o{L3D)E{^ZvbASv^JO1+hVt$-=EF)N}ddnq<$ThseLr1
zr`w-YG at 3@J9(Y1x at MA_@VRMsj%j~zMGD)S6ST%G)eCSPZ2BbzKQYV%zjt4Nq;<2?(
zzu0~`g-v5FDiclX7l;<rKKsQFRU88{aFrCD7Gml^e#0(t36d at CAbS{Z6;Scb?j}`1
zeKo92*G1)v`>(!3Sm)#I<~ho$^VBftd08#SK<Xr5{i(de0w4+lOqsu)`wb7DY+;iE
z=V*{jAJ#hDPVlE5_ANmz7u!5%z)do!+8Rv=kRJfWCY)T?y?=y^_R%i37V!Vh=$~N*
z8Z~sUh=OsA3<zi^ZD1=-e%Im5QpnE`{8`a95SG9|fGSY9)XhojH8YP*r at 9VC2z<Sn
z)CaMC0JXr5;-<$kE!w@(ESHX4oLXPRb4xZW%S=~C2UnvjK3c0zi5mFR&KRLzHAkRB
zr`QCv1`p7x_?P<ihEkFfTp8528L85GoX=f^Z$jfROYDrn at V!?NoFZkQD5_xLiWw>X
zdn{nwG70&~k`{zmZmTv{c1bBoNwZ+O(OFrNyhilDTyPdurX7EKRoy?1%KR%!i<FmO
zsOsWDuYt>eT)%z|5kQ%%hmgvIj>k+?c1oT)-6J{5d8Jw5kv_;>x}j-%DPmi=h7YS}
zWp5$sFrg4g4?{$<H;ux!6#yPl2vPc>w%qZ$0`-QKHx4qvo58l|?q)-&4gx^N)7Whe
zrtjbcMGjdz;h}alBpV#L7Is$yAqNrdvI5C8?%)9od at K^J;~s$(u$(vGVP#Bm0~wv$
z0Y=a_Sb6s)Zm@%mf|DhOo#shPF(S9c>sxBl+#9}D9&eH`jq;iM at kc~(&8^@c(32E2
z22~Ns-HT35<Th#&C&H(I%DE|LfLFF%3O5HGD^SiHVyGjzY!~F#Fc0tn!a3gdd+);L
z2Z>DLV4CuvlkO9UUVOFPesF(h^U)TLigTWkWZ4Uuh|9|>_zz`%P0(_HFGY1$c60%E
z`}nE?<vrO*{3L3RK=^5-JYTw292oako|n{SI+xR5;8qa*EhQu_T%Vjta1H!ZI(ch$
z5~C*6n<X<LAs@%Y`#(fNEP+3{gesF-`vD=1_c^<;pYBtXUs5 at 8^sq4c@&mWMdHBs=
zSOB*dX09CH1cEOTw-VlnXA0II(q%!soDAP3T>?Z3wA`abPZli#Mi!h5&km1J3R`tt
zuFE1G$<=sQ0_*1B94@*wy<EKlcq(TJkJ5Mn+M*er$DNZiTCk~v0CqdQS_{-N=h<Ff
zzj15r+V#fm<+Zh7P8Zn`trK||$`seOebs~O<p at dO7=y)bG0CV|ms)~E>8D2m0q7mK
z<OUza&;%9D6?K4fku1F&FtK5V5kT)OWCg+|;Wrg#tUx!878q1Rdf?ae!4EL!`l{yh
z5%G5*$aa59;e at 4YF1=aoomHsHte)eubs#i#UQ;<$uNN`c$kJoXuVaj|_=qGdsM8Gx
zRE$bWJN|H=>HS%~%5-<$uL!d>!A%SsKf$xkiG%ZYs7>UG0=7PzH?md~*~A%0AJM0B
z+01s=I9E;GC?jgL=xOf;Syv*(y5=hc5$GRkRe(u?6uS!BnalXt8{Q-jgYY&b1z`aN
zm`F7q0nFhwZhpuP0)k}*P{NR#KKiW|sx~e3(Hx+=tx|Ot_n2>%Nz28UG$B$@&5#cZ
zUJ)TAeFT$0Y&*R|h4UXiV2wrK{D1ag=Pysu6BlZyrer@{bp(K78a(?O3dRR5nJ4o4
z>e^~#j&sI*;cWi)jE>gK?|6`kv`I}zvX at xKn&o1Cc6)(Olr!r4hC*hX2ZPYyHXD>Y
z?#}>mLXZ#QC?PSyNG#<_z=Y-A7q<SC))eN-yjSc`boh(csT7{_l9a+ at 4V10Dh?5i4
zUgl>kY$8SH)M)GJw&I;ToD|bbV5^{^1nNGNsAB)VwC5Iry#>|4tn;|CukH3TVT3b3
zr1l15OJ=e?eUfaq<q8&7+&Q56yhb$ivL_h>C*>~)J+Cqid>rb0p)QmwMop!(ide$#
z4_bcxr-jq^AA83iPbVLL{Nv*M3Z-34^Qm*tBb!%>Q1Hb3BH3Q_Rcj5<?!3MFN9=FX
zsVEDY@#zp#3Pvd9k#i at w{EdVp)6nw;=RKhy5P1!0c4>)XzE!u^|40}|y}>CaBewMk
z4Y9$)16)%qb2Whw3mcCueEI+r at 1I8gUb0L+vt)nXPlCFulJm^JUXW<_sIhqI<R2r2
zKphEoxlvjHu`|glP18~n4x4r3q)%y5x>VHJl$43#aw<z;r@|iBI~S8sn{8`Za2fsU
znNJc!2H>DZH3v(xEqms?feCRLaXZ!a!NDAtS+v@^%M`xJz!8k$w}^{y;B0ll9vpBg
z1gN+<2ZUA~Rtsa7o0o*dhrN`&Dz0!*$L(u5$a*R*^t`nAoz{Kb5eoB!Z3b(kykfl&
zye0+qtn<Eqe0J;@Li871&HZCsH70fdyxB_6E7kX0{K>6lA-+$&xX*?|#O7BEW<(#$
z&*kCh5Seg3RL_|2_ at sJ-#azF0+;M?p4y at 38%m5I0eGYpk$dSqba^zHaZw%5FyZ~bF
z1KwD at W+vT{6WvnmS1oKq2%$sP5ojBpEm}Hm$ldc^?y}(P0{2EW=WaZk3xk!-`FUQO
zn>WE{(m(@n(qQQxn0=v at b-R#21i>TDfM<*@4vVqFzH5*Olq1l>@mq&g;u0yYJ!8hI
zAyWeFC=<I!nix(^Vj4`c%9=8k{+NF at kTH5bEJeHQOq9O6KcUew{}wAh<lrth at 2lr6
zyXIhe*nXb^0DI9vkH__35Xhh37zh%~Sc)MVTFKuX$41mNr(yJOhydvyi2oC^vf+#=
z#am7=K69TS`l7i7LT-JUSPnoc#Bq?g at m`SIU8oTj)eG?(`Pd|p7e#%L?LWAg6*9BC
z$d4duNTA}J<qO>-a%eZi2*m93?^*a~z40?B8fwzgO!<UJ at d_Uv=)A*z2PY?Y2>r at a
zNEC?~7ti+fBP4C(-xt<?Spk0_`3fx533Qv9uJTt-o6$R6mOi$0XQ>w`R0}zb<)21M
zwq>6o6 at ifcy3$e at mlK2;kW3t^2*p8FS<wj+kboL<?njkF8FC&(Me{Lo<cx|0PKn5F
za-+8Niy8Yoa<Q>|vDK3B2}6j<mr9SC%*dsKY at 9TQD_AFE9HSZmLr!~T;aUS>tG}=j
zgYJB~C<Oqc$=Hzu`NimjQg=Ll=jqMP!<SnxUbUMef-cg6=gpX_G_;X{lHlP;XEOA;
z7>LLv<tK at m<j7&e1!0<9ZN5osCWXw>h$1F|dbEOy`xZ?p at Cz0&E{@hW>Y_Qs(Tw$t
z1hPf#h4<WUS`<Gm_mw;;8)t7_9_rF>EE~A>Bn=8NcV}vy2m5tlXtxZ*J9==4xbpb3
z;V+?qT`i|<0;{>(iFaG(K)|wlgnbo)2=&r;rP at WmBU93ul%^}J?6{4_Dj)*`)0V`p
zD=DOO*<1vXTkJV9`THV}h+~YXDIW3rA^>M8hapJ;`1h#onTWSN%3V9oj`nXjtm&0x
z^;g-AVoe3&d%@~uL at LH<^~yz>^9Kr+Q6xby-hChNRuZn(LF0|&G_Swml})^uru-(!
z0YANn-s_Q+iH86Svt9?0`3rt5AlmJFuCXb&zMun60tH;5ycD~wWgJYn2X(p2$>FPo
z*~J?13P67g%8^<1t>lV8+x>BaAvH!s*#gk1iy-F#(sN|F|6ccN;EYfzIj2}~$&2UI
zVp+T+JG_1~M#xX}JXvZMPRrTV$Li$3i8(vM<+qKzOH+L>IH6>bf^g8A+*NG=LTM#A
z{O+qYI7~qO$8eU?cd&gbw at 5CyTbLCUnA76j6f*qkS!SLHK*A+dXsz%no8{M6=rU%S
zn*>xWBGiLdul_&N>xbsypT)J6;p*`ixEoL>Knm}6=kyfboCrq6hVgaiR3wT-DQia=
z7zQ72W<|{#8oLCumNIYh?#7gNYthl{V8$7N*>3N6dc&*BtJC1GF0W5(J-jP6ema at e
z__Vg8mdns_$JD=urdca1D>#ggSQMPJaeD<k^_NE9CPVnCs7yhY0G>v_gg1hY3<BEC
z0}ALjy$^C~MxWK_s?!1o_4a9*D9__mpOy|>Aoy9?ZZ9gkR4%L8IJkX`8!YE-?(yK)
zdO38?N?-;CgmfB)-xBL8bCKA at ADNO?kl5jnkeh?6I1=%zmk at C!hgE13Rg*Re%Fq9}
zD!&Ic<laQ6SAPOAOEhFzSB~J9rj%o^%+=v~Bcu7J3JI6%U82_`A{MsP^WhxthWZUe
z*@KRMlMXvkPCFZZg>S0a98DwP>db#dZLF}H_3qK+cwnk(Z}=YbFxozM+DiK#?LlXU
zP}SG#;~#?h<)Ya+f at xvQ+^f#DV7)>x(6KgR at f~gvy!I$wPQxQCb8L|zK@!RKN)Shp
zinpyQ_|0SD84lTINTl0$B>Du_OnvQ?7#`rH^pvk7aP1gz;2g&ZkSZC~bDHMnfah%F
zIiH-3P5_~GchK4E;aI?Mv at xf4jNj{@lVptz!yrLJcUPpglw(H42uW*!0b+L*Zp9eg
zjX6 at C<`1?HyY(g!*`mSB8*?;Qmx0&uGM3KR8N=ax#VBnl$Yz at d^otmcaslP~Em&!B
zJ#@Y?C-MIF2=P#JS^Q=s2e})WQnoPT<CbjF^?Y}G-5h+F?IOk^;^`O!#O|)>_X5oW
zkht}`D at y)*CC`C2G+lDQiOQT}NNX1+jDqCWAqU8&gP)n$=^wKn>PgeBMMPgQ30V86
z-|hBJpcPNgc*{+(P9#ViOYdY8ih1i?GYN-28U8O35syK*nsl&%Z`~zX{e&4E`#A}Z
z38fb(uk(lHN-xtmM=*4Cj9bKpU_ow4&LP1XVQkFtI`#KV12<RUt|LgWjXC&~N4SD0
z%r!4IIHtG)R<=2(jw(uVk`^jXAKG%g*4>lgcps-LCZ6dt$gR7=Pu1kZDI|=Fi at 9WG
zdyf?aI$4C`Ypz;p2Dmc2O&rA at 9dlZdF8}=epPzqo at AJ?8`}u!_0wK_PX?=NZZTZ?#
z4*}iqd#vCN^AVEv^u{Z^e}VI8nb(@5!bQ8zd!=t)zy2Bj;*<VeTU)((^V(-?tGCu~
z-dI~(yK(Ka)%CU28>^pHs~2tPGUajiZf8_gpN)pY$+Y^j-cPIhAN=m_HyF^*SFTiV
z`^R at AA_^zG5mt&Mht>Gq#`S74#y<!;*|>g(DdEIRb_K^5CJcIWF=%6ky;=MYL!TVS
z=sEZ<3idiM#c<>S9xv!Lc*Er)kom3d9bee7SB25PeY?VS<hPbqzgk*duhzc0vwrQ)
zjj#S*;rflQs(HXz`P@*E at 0RVQ4YLZT*p?&Sl^n~<``AI!%)#)(SQj?mBdxt;ldO1S
zEwa8y&Z@}>nN4`E1GW&9$ha@(Xou+4=v^PNeJFJTf!G<yF$vcpD3i`H<fAjBk;e~Y
zP`HQ$)PQGpKltce7RHLl=LkMN`@%qI%|wVKK4aX;7%r|-3YrQ<pwXnqw1wIrF3mg}
zAmtol?z9*(jG}&3ou2It7?NU7&!8kx=UE at eWgjq~-Q8n+-NQGU8>8{ErtpE}KkPBt
z;XTw``P_}R=tk*VyEAU at pCM<`KL&8iA??~b&07eQn^AXore+*HYKYDLRdfh8w;nQg
zwnWDPW6dzt$H5Rio&$3WuJY;zj{NO+fR3Fn)NGM%cpM~z)R~v~DubgXNh^ZxWU0d;
zkZVF at Jkc4JAOIXac_Z0v92A~))LSocI0Zqe9u$Ng5<2LynEVYx9JP{$IHF&M`gM06
z#`2rspckwetjTC&!t4OchhEzu88N-R{*DlZ7N;rhU$Han0G{KhDb196I6U&>P}0T=
z0~UPrV9PA4c6V<ffRz2M-PVq6Q%Nf1?w+KE at XaO|+45XXalt%{ecUK4bYVzc!?Af`
z8^<tZ;DKvgGkNOb0QOtgEu1{MBy0>D4<7Xocu6L6M7cx>c(H{9Iyh3!DG%9*%uk%7
z=o6g82oJWT=NxsTj>!bf#((E<o^R-c_XSNIq<Gv+x)`0!^vg%V3Pn*YunxI(9i8Kv
z<M_m)VsXwZ4KIl)b7UozaO6v~I>6^3I%9R|M~xOl1kFf9S8)7-LYRw<tdLx`m6m$c
z?;OJPMVOwIcLJPJ8N&zHS8ud8#DL=y$!7tD2rpL~^7mjU4LX4=QF;V`N#)wCOV2vm
zzCjn)X429}!US*-rcopehftzm7!nt^8V_jv9Mzjh=ZyTo8%Bm07AsFDY22Ed!=F1@
z`!g&qamzh;D36*3J?)I`pE$;hi2F5`Bu=LbT2PgU!_US at TEyWhZ*AlzNu38FXJywu
z;im}Opi8(Gk9aPWfjRJeINAR5v;vQY`)AYMKar^Af#apeu%xCHf7Bmyi>^DZ%;w3=
zA^^jau(Miw2zT$K_o90+v*2(5r9Z3G1B81WcSdjiLW68t557O`0vwFHX at vv|EUE91
z@@P06-XjEVA7Zheg9D!x^dd+5AC6(%U4ANeoE$ly7`VVRGI7A!E)rKFU<0Q$sqlE>
z_K at I3LLDl1KSo8JmpW1CGJszOCtVPKLU-v1e!P2k_tZn at HFn@^sj#wl?=Bn#C-7a!
zq^8)E51{Q<cRSV5sCTe2M_xaM*F~3;^fvzibF#Zv at WHxi;Q;Y3QCsQUt6tyT8#Q?~
zP$*D^Zjkcy$-q`gmk&q1-bo3kXl`WyT<_6*>bO;jl?YZC%Gl-Rhi>DG(Av{hDB)>d
zO(*dm$LLE`HKC8vIgr*IJ at XF58jePs5=T(bDI|}Y1E<kNNN=2Xxrx?ZMkzq$EhXc8
z*T$g+On9{g!e&emgklO!h@#WtuB7$%o-%DoUvZ at FPDc0cB0C4tfE>c1IOrX~bx1w8
z`=i;-;~#PJ+I;^t9tcn4r%bQAE0ZHs?YgSSGk-+4qaP5Ugsd}uW;M-Zt^#D{FXCXb
z6FS05h>DOFvFUxM;=q}|nRpAMOuCqz=m5R{fjjfgb?<$7vNt~c8bxd6BSKx68Y460
zE=CaBxCAwv=G$#KNOJ1(8|f-~oYTUWTD&A3DEV;p`^m<-8?$}LtlkKNmhn|lxRB;J
zHJ*%bY!OL6xYPxMpc8Ip+=0#L82gfl|4suaGec7GatOgwP#Wjt>SXxPJK7Z1^=a%J
zTKug%J!LF0PGQzTQ$R=rlV|oIroBl9@;`bU5nnm#QdnJJ97~f?$4H?~pO8t(OHRu3
zO5W}PHg at 1H`|bTZb)bI#&Pn=)28ok%X=ZWH=2P^eBy9dec@(1e?3f#;2gBb!gb}dm
zgNTCMxkdPSEVW^5)- at s3UrlpfK*~If7DBTJ4 at e#V9;0^wgtIl-Y at Fdjkwx6^fOjSZ
zo^3tbq!c at sGD=nOF|y+a1ZnKn4T%eIg|Lk{(-Msr4IiSba6~wH8*r$v($wB82nMx0
zC62?Jj8I<Df|w)J#JLtXl{0Wg*Cx9bp(<QR|MrP#fTmAMSLk0bDQljB*<5be1s)1^
z+yzAIZ?UVp=Cgq0`ZO9n12}zj^1}auQ3_6)*~8<|`*h=jDMhbYw1^6R$47R!ggZ`d
z`N2HE2nEBsK at S1&or}Nc9uA#I;tS<%n5Ve at Qg8fpn{2kF%3Ui5aa?`91O;_P@{AyD
z7<OF8yqRu1IXggQce|xrp(&}w*m;y^mEdEC2#Q@=MCJTmuSPKDCvM9L(;Qw9RF`$B
z(&x<WBU}gh@^9^(SKBW)lU}*^8aKq<Eg_Ugm+$wGY4jgwxVW_NF4>|eLO$r>R*Cj#
z_^wc!m>s}pgq#T6?y?eo?{$PWnWRhLA|>I)_g?FVF=T()F~&JqE!({<?wkB7(kRwZ
zG<M=ocJ?7I8n0?u#iudgkF;RAa+*>wwIrq#3^wkJrXz(s9mk-XXFyE#z!V%ai8Q4o
z5=L_7BAxS$wsr2Z5I=5Lh~G1U!%fbo`f=rg%~G46^fj$k*j~1z1-<};2fSSMono__
zQR55QT>5l7&9P~Oy~XF;3go^F{#bzX(mig^I$lA5AEdPOjon2R<fXK2BZ^>k%=`EN
z at u=YnQrt^C2`AuC3*xl%c8Hw6B4S(L<J>?W&c9zMbTzRL?w7!>WJ}{Tct{zd-nSb(
z3r!?TX9#gEZf@}f6isbv?zY_M$H4)$#<Y<6P4V`nIpc6R)tF*xb at eO0w%s?7h4=SX
zTdKG;-wLc=Fszb&46%d+seQfTgpm$7$%Tz`q|F+l7H^V<LX*A_mb=GSO{YlDX-ZdI
z3e)ATyf44Sysu~i(GSe51dS;uNFqVeo*(R at YT)B9fYL=E&IDsqaLa=_=ppJ0R=>aF
zbut8J;W}WWG`L9jt?6Ul`EL7%>ec-RPd9g}$1k^^$*r2HN|`<0wh=l{$S?`;(S6uh
z^~g(ka8-T1ns_18e1IhV;Ch3(&IDjKPXvfuKm~@S!!Bf}$KB>L=kvvwlbx{xI}$RE
zEQpwcfZ at Y4g7$Ri#`x;O31<_v;_hk|@>1h!H`%2f*r{1)dMf=~;UELKwH&vm(}TT;
zj*}%N(h!^)K28zOLM4=AWBhz_RD>krKbeJ0T=I8C#`_4T4wIte%Kk32aVpqWOtT17
zEB?D6rSj=qBbF5X^sEzmJf{v-R8Se`)8pb6|1;*cFE$MW5tcqONd%QVa*Kx8ba&z@
z60s%ccbLdYI+j%MppY#;jY>c=z3hjAuLM4xnn?o=P})##P^XP(lwOF{Yi`g at KFPsf
zDi#fVf>w$SN=5yS`#c?qguSQ0&y9HPt_&&ZBif`{!(}Vgn(m<GZ>k^TrMmy|*5=bk
zPWStU++gTok+8f>sX;qykq(RHXiLzlPOq8LBPc0Wo)<LLjsTiu<;0K(y)a9{84V6;
z1#r;s4Z3X>=Ajbz&izf+DDGigF}?G_mB<!<?s0R)wu=%*Poi)_S1~ayq+^0M3YY8)
zBTT|S4pJ~Q0vNM4T8;>{qvNh}jK3 at F-r3)n*W*{YSy692rR2GANUQkfJ{1mbP%eRs
ztBMgyMUg{N<v{sYQ7Q|;M&q1`Wjq5hJtL=6ln0xmLMh!YP}FrR7a8nFI_KG%iNF#G
zLid$1rYhShuoRB@^qX{vSCPq#Nb$8YjZ#~Pq)TaB3&Ci4m-8M$?RuRh*L_ at H^FRXb
zso?@lPYub*1-^Ol=&^$%i3B??1e16B at TA^bte`cNzNs%Yi)>1tT-oWJYHBGg8m2Vi
z3e9dJC3i3k$eQV at JdTl2-mH}g`nC2dsK$o65jWK;CtT1_KkIT0MoRT~rlkFhd|dGi
zF<vfuLc9fMo^nZtR1c(HY}F&opD;&0y%aA!Q^LOkS40odT+VetS9_;A#8uJu2={f+
zWvj{wwQ)qqUaMxN*9do+sJ}_Q?3eWJ`f8oge)Xt_^LKP%!E5h*$nN}3<j4;u&N(8H
zqkHPwI{V<Pwh5ZK>nVV1M at niw@dDv%Wr9gm_r~MM5HEwl!K|a6oRE(8D7*?#pL^_7
zhd;|7x)!&)6p^$e1;_l(UtY935Jn%6!?=zD-(r(yoWIkgBWZc~{CF3&K6F98<_LuJ
z at 9sHeMoGsM0B%1AZ~V at T_`cB3dVOIc0g>0&H|GFhJP9B<2zzr57<MYjVAwCt3pZ7m
z3?^bF8F8DeK2KED-McDSU)6?DDBFDi?>yGIhs`mh>Dt4QAFTmtC;=d_93<0|p at 3g|
zID&_3SPFX-YW)`Y(Y&4x_h|D%gqs)-iSSM2G7c%}$u#)FwRJkg<A+Ywr3t-pXl4*x
zhbl%LbKvUE&4;h5pOB~=S`rz-VSWD;+|I5T|NdlXV=rq~2_fCALfTe}PSxnmOvn<g
zV6cwi<O~x#mFiBU*or4>?T7C+UvB!&qhIXjM)f0Z*-@~mOaNcVy6MOIy6OJ&M;?y$
zei|GpVW27tNM_Sy0Grpwc8RWMk!UcPO{0n%R*Ft*Sb5o6jv5a3-+W-sqR<QNBgi-A
z8l*wvp&v|~vKlaNb7UKyho4V|7;AUIHszg8%Y-a?%u^3Os=qdHyEw`pzTCY3YE%8?
zaTqMfS>qlX;$_DH5o777g;j68U64K{nyP_%K}Ap!kggeFWN=M2blYG&0~Tux0uMT(
z4wgCTJ&SW7HM?O96^lz==OT7S8^V)&dXl*1q{pAJeMF34V!z at Zm8z@}4j+DSyF$kR
z!rhe<95>`WKn#;pMFT4Y65k_Ya3tl0-1g0D$EXr;0s~$~B*JL(4)CwZ{!BiDEtAtz
zoNY|S5HMjK7qBoG9`^Tj*9Xp~{SG2X<^8*(Asqbz^=t0EU at Im^Bt=}&()Byf&uT(K
zm{w;e<Fiv<>Wck}g>kP}J-+{!>e}*6Xx!+-DeH2ADG7I5p-&V$kk-WvVPSkgKhi#}
zD5KKXL}!%B`N%jNK$k6Sc%=%_pFyTYNU{MZT?MtU at pU%Bq4WjWNlQBu!Q at 3wsEc|s
z1@(3~xsniijr&xScet9FLuLwSLse2joCuyBo#x&rEGDE9W1rYZbUg5^tH8g;dSVZa
zssUp7G;F0)J=}i2^Xlb&<Rz_ej-KEoY-O)Uk~SegDm+G%#@3VP)t@*2W;K_2q852I
z!9D2H0`S36J*3Eyn?9OA)r86-Nu`&CU0+^ZUc2V*fCQy5JqF!qA2#bEoPSI_z*|Ug
z^!?iM`nBa7x6`WwT at 8*jN0Wy at d25T_t(kO+#Ny_o1lzD1CuhfdXrZYm(&*Bf3L<XG
z^-o|2;C>)m(cly@^ic=QW00~76dh`u1?Hah%pB at s7Bq1$0XUVjt4sm;6jy~9oG-!*
zg4kifzouW}NBmwwkm9Gi*QRZJVGNxFl|Abi!vtspiut+a9N9WS^5(jG4WNqy-3(7u
z8Z<!O19@(gDYw)NQ)YGnW-JwXEU65)G*C!i)kSQ@<l at 5=)lB*rJujmX45D~&8jw3X
z#mW0iA?Ir5$hqg|MJ`1*{L*hWC!&19o5yEdYC}>u16gIOgqB3hDO;JFLqeGgYbQ6O
zXphtu=Dhll$sX1#`eLx!<Z`7B(`;yzN$kL&r?Rz;F1IL0JdZagS*bS{oC_|i3(Q{+
zDH>RBy-tI{gLN`T>XI#}^$S80g|BLH1L;2fz?4KM at kOLXwpNhkpj)nDN(-=ph9}Lx
zK(Y`73*jOqwFRB<T_lhIIe*(I$a6U4Xy1i88wVC8FNI$T!#by%A%S!CSuzLbaC at wM
z;M%>>*+%_u+mcZDG(Mo?a%WkdoCf}`%SA^zuTaBcsOFfe&7xX~f;*vBCM;IeE#$D^
zJWZFf_4mPdMGInp(9v3CDWc3=HjBE$NF7e3@@1V(d0m-cbzhb9?s#99jwV|zI(8n}
zDLRgM?Ap1g>qdk{Btu^zLlb?r^!JI4opRT~Xn0&bdSIqpBs5b8g;i3AeLU3}vws>E
zvR+h)K5}jwt8IRpw9F^>rKnLru{hP6VkXs3MD+5$lwg7UG!2Rr3;qmGfq8H*>ZPmk
zh_NH;!jEx(XJ`8%^SFDFZRv9~tx>c>j}!%3K+K{tmkvO|igY5ZR5(b*MCwH>7SwcI
zdO;{^BxqevnYymC-fz;^F>{U)t|}KN82x|sgy*PpaZ<G&es}-n{fDnMUn0})s~sFb
zHd?eEZR!m-Tieeg7gVUIagC_pKCYs?Xg}P3_H6U{tEg%d`4F1>^lbl)3)rOBmmm$C
z?dvxxl}EAMn5tH|$AyqmTb?r1bNCJm$+~*EoGx)Hh^gj8<WJdyDUNVWPh{bn#rM!R
z%GFJKAy`^cM>M_G083=K8 at h}}u{IKIQ#+s#m-xN)T^yWJ*M=~S9_pxO+cai!X^ol|
z%vIRA_FD2vGN+pLo=fCX?TX@)RT@`t#)U;4XnjexHc+K?x%~@k2>=8aB#2f^n!-`d
z;_3?l9)%IWdEp!+Ys>FpBVc#kdkqa>a8nRck(I-}>Je;CYBhG5*3ZfOh=HRGok*6m
znxHIn9LMsFulS+msXkOKBQ`obRvY)sxX!T9TEJ#<e2SP(`f#=2ZtF4akJgk`ufH2!
zn%ZsIm=%<YYlVO3m6ALxOc{h_iMA|j`W#ZwI5CJ|eY>aiCz0Mu8*E+>1TM*NtYeY3
z7k)*~9Pp1gEa9QDa1LAO)OZIa7sQS14z5X*KO#Ezv11NjZjamP=uc{g5sXDm^aCFP
zmZ%Bb**wH;z3_q+`Bt(kBBSCFGgl&UW)I at QKEhzh=2d7Z=Q!;79Jl`gvl5fX18{&U
zv-z~!GV4<Zxi5$>MwB{`%NT{6P+?_}lg*!wFB^r#O1Ig}F64ttnT4##-L7C6PJ@#f
zhOF#9LS_k6RACWo0yhMDNq5s>2M0+xHIAi=&$E;Vy3WW at 5;k6e at f;p?R&b`jRrx6&
z<EG;v2 at jrs1J&4Vmen5(?zB;vzJVHztN>})XN_in6k9;!MvX;m-3IaUX$BfXNN601
zK(vMvGqNq|w2ilhtkFeW*^;C?oyT5I6<vYkVn|^^;e`VeTTKp9O-%Iv^rz5C@*+w~
zj!5InjZ_UYr;n^ZBErExi_A=Yr at 0+NvyaZHWK~41aBgS)aaD+=Y94?Wt&>(vF=Z{x
z0JI|_+IBy1Nu%tvA+4#CuVztm8!8dzIlB`Y&tREwmt%D1)d`1CYn9kflDy`2@%9Cs
zmyQxDOY&iG1kmoJh{JF=JLz7PtuE{<MY}4Z#A^5u7IFH*jyI+{c9-K at _cS^L__sa^
zB at p$oVBKQKCttV^dWiFkX%9u^;j9|3uUE~yG at g9G)+-dHmMnIXAW8VhzK)DDtiaJz
z`8VPzy<@GVP+OS+=Wyg-;7NYzjkx}#RV~Ceyo^nM16GXxk^cp36C%NSaj2zF!Y}X5
z)B_+MGcOCG^%2LHB1cEi>>}q}u&y=xM<41GEqh0IVAgah^^G`1#8E^RfZk|=y+6Is
z0p5fwwS{7B{?tmGXQ>%dCD#{XtnX!O`E at Ka8%ji!te1Gjc*#3=4ka(+q<4P+12bFo
zaY+7s3({oGSy=qnmZ98ru}{9Z?C!}B)vJh*lS+9NeY3#O4_MJ6p}4IrULJ9B1OrBi
zTL+F=-GC3?Aa0}qCu3|>B~E&ko8Ot9Qg75d9=`2iokpR`Y!(umg6IxhumU$R1heQA
zJjnZs1>Z4_a<eLCC0tyxlTOQDcOW%oLcN2>!>%1xak-fh=l~&Six%q$cI;CrDxv7y
z*%AWSeCEmVK at V{?ma-mwu=-1Sh?e>eNlJU1l35_*`Q$1jY#<R=>UbbMz;}3?h8K1V
zi0q;QGcX=bv_9tR={h&pupTE9{Xu;dRhBQV@;NFk=($}`C^I!Oq{rZa;R&LB=uS00
zaf8Jp;uu9aP2fxl-DLnnrkyneryC9PI(neZ{ikq?x_GpD44T>-c;2euM1B5bGg}U7
z&{|P!dHo43>h+cBEnCU*arD($4z7HpUyUD~J_=%5d*TBA-1{gMN~)(wt31^diCo|G
zNL{lO8DZ1{Yw7r6ddX!<cY=8yakV(0I3DRU(kEs!d)u_n@(AIvh#cga%ByE$<vxWd
z!QXeC^;5jNBC8*VLb|^P4KOuSRai`%2tQ3-jt5q3Sd9Iolg2<zS=f7l6LxDH70E!!
zB3#Srvy_$QaX-qW?jy+;#dXgJkD2g9Vf{^d`fApDcjPK&hkxag+d`Iq8yiT_ at NZ@T
zfpXsAmw5+?<`?KXl1*+HH_X%hFhT7|c>u$NcjCxfjjpBI61KQWs5=(EPS7F_ZhAPI
z?3f+{q_lG at M^hydRN<b<^4PH>7uE>4NZzFkIlF{oNtBF58)w%%0*RVr8{dEb;t?aG
zoeXL6 at _j;g5nHX`%fy)jBhJ+QT~9z^op{nIAoDGL0<lPVpJrYdW(sY_{MfPMMyi+M
z`9UaUGiSz_&eB-~{4XBxPa?F4H$VUSL2_rp8U{(YGB|<VTz0G*&&g@?aqIcc=F3+V
zqMEl0eEu&Vv#MI~v+8Q~Q=~2ME9PqXDejt|u>6ZZf4%?odn71YNS|tn*=KC(niw at 3
ztHp-O#cBr4bkTa!X)|XQ&F^gXDwTi**!k(YxcIB5L}XegmQN_GiYN8-Sjd8R9APai
zA#l;EuN0`D9v<G{W(R6<Arg#vtR7|A>2}?tE0JML;>OtGB_*(LcUynqbtvCyfoGlf
zh4Y%{@s`9rue)V}GOE8zjotKp>9FK+_eSQ?k)7){?!7p0*%9lD`cLmg5qj4f!U*7m
zI*w?HKf?WLD2%=f;j}P*>8*ZJy5=0Jy9aF4;z&5G{#~2+>fm20K2Dc<#`)ojZNLot
zlvpWEOoz3N4=$j at u!$hoy>C<;Pmd at T%5-?)UljsTG{SU5<ns8`Xu_c%2E{gDZWWTL
zIlZj!hM)ONb0?>IaL6<~6wLLxe2reY at zA&KmlnX{NMMlcb_%HhbsE1>c$;QTtWD!s
zSHYX^#0BosJ43)M(=7Df at At5Y-hl(^egF9E7*3P36I_F4pLkj|Q6^o{DaWL{%GPd^
ze;}cMzIcpw&ZlYAPiFxcvb57-zj;b1K^A^;GpleM7W%dHR2ZQ60&7 at tf|g!7#)y@$
zD&QQYMjh%<HI){4&<3}$qIWi&zlu&(QtZc8t=9AH9~KsCPaB(eUH7UO99GhiPV|*@
z<P%BAP<<jLS&k!3v at QAeJWBGiYS1rNn^P9(WE~+OCZrs=kaBVkYXL+i;W<tQK03kC
zpY)Cq)KJPBk!dE7!VQmCMwiw=)5U(Gf2<2BDSkJ}6(^H&8jZ9nt<jxN>w-eUO@<^e
z<P&?SY<TM;&lY-4kW5|LyFxZ=os`;s`3S!82Y;)6>UV#t7%L3RT3$vrvxJYvjEzgC
z92K2gde&+5nuLg0up}W)&v5tfIF=A#Z1T4542{L8#_i;=;gESq_2gKh%nJ7MRXG*P
zdnfy&@dOTeJrYfDn(u|wG59`bIF)1p7As9D^XNflo=0XtW1bdDkJ*yPc`s4}JlDwe
zw_*6=JSi6vJ+mxb8Li(eQ7F^QKnWtfZab00dT#3ScFb?JgXYIbAdH0Yx;DTjlbcZV
zwrP@&iMJoZyUPRwii<UHN3qYBk`0cZf(B3n!J!*uL+FZ#2v-2Z^>pjm)+=#vMSNZ#
zGFi0}`qgU92^bE+JnY&wq1S at 4TrP)*%yMpe6>Fxz9Px}w6iq%WqVXY@&GOp)i|o~N
z2=G~h#NNn99d(}Ps=ID?D9~6Po_;}46UoUeE(zrqqaMVD2wfcS8x2pp!*`O>Tar?6
zhqo+5pZ1UYlZQt*E}siWk+IJ^le1B0usy=b{j31T(Oi6~VB_VX<I~<glCtj;aOQ9r
zpY5Sq_VDb at 7zrk_hoxuOV3s5Q_0pXPf|H=$9&@KMF&>O`Kv)B^jv+)!cv;V at FvJ}>
z$J9!50DvhE2V(<)cZ%z95`fFTAx|w5!%<z-P#r*sjF4ChEFQ6Zj0Yw+B3bONrZ`hP
zH|FN<*@JsTQyTK}Kf22zGb!8FwMWJl56=2L0ccM#YuO9 at Au`_7#F<r>`!n)Dh<s7;
zz(5Z<(cE3)Au)K;l6;g{HFH2jq4#|eFP{WPkQOSJQf`aa;H13qNWi;=(J_A5KR%7)
z(2Dy7%1*Aj%{2n9MK8-xv2WI~rGB at uZ=uL<>08X!B at 9cM5|rUfr3Di+t2xScazh#1
z9o-P$i|{`Qogg1g?RhH!nH33l9j;h*<byT;cG90nrujG!nbcN at +-$E23TsT=8Zt7a
zeml_Tf-s{+6GqywXt5c+grLSTx`fvP?GQv^lLol)vfJd7&1EXGIt3t^WF0UUg>TDT
zF?!a{6S0Y?UCD(dq~Dlh3yxU8I|gaY!ODcreOk!5#Y)|Zh at 18gC>yfD&6{)geQeCR
zZ&R8I(JNu*B$F%c(0ErvsXbxQ5xwwQ7?XyJ-i^DYf2LBEx38&Ci|&eId;An-M(AoI
zB8_8Mz|43bNKZpVr>{HWZxdL#%ydMAR>8wll=p?)o7<A%2Pu-AxgbH~rV^plOhIUt
z0IzVcAd at _gx(Iu$LgmlB4=^M}AY^7jUd$<>CX=Fwd}bI>KJ~|c#icLZ>`njpbO6O<
zPnoQWA1r7cSeNu7QPSQ_&@WD(>$z8GX+$a{<-Juv6`fG&oW&ScY$v9hYfQ5-aMiq|
zZb0}ckW>51*$)YJnb1iMh(Z?A%yh8Mxk1Bb2 at m6=Ntg at vP7lXMzpZ1=t`Kgfr3;xz
zSA?@LD0lc9Mg(*V-p5kL%GZQ(iQN(}xWfvK$zb|3nXpH&!O4q>!~&#P6U^8P)sL=g
zq97s3N!TcCQ$!=x7AGIxAyJ6(z7oLQ#6x~VTj(8`!)RfNHjWUlx`zww;VD6?Eie`!
zpcq0g4V0egN_4Sr#X!X<v8|v^Yj|0W=%{5`#;GKQ#)@=~UxA47aXoc7L at Li->5dSo
zBhYM2iZTq;VMZ<?kCQwW!YJ20?GHydLJ0RM7ahtyli_JRpwe$d3+K;>Yb+b4u#e+t
z6GI646n04yhF%^XvI{1QUcp#<K?I#Na#)lta?b~>&CmJ!!}cRH%0v1MJz6XDNXOt`
z(<8K>_o&9s^A{yC5;FO<No>^3U$kfGS|Jfh;P<`WA at T=uB?;ZqHKteAhSUZdw`y`)
z&6$Fk;AaHR`eDZrm2JZleK!ipoE3??Q7x^}AxFYk`MY&tOB`T0I^`*0 at Btb*Pap;u
zg(Gl~J_2Nx**kZyv1e?^eLf*LTiyk7=Uv5EgK+ZRbSPUd7*;0h+^kJ=EPZqD^Uprz
z=k)0G*@yex<NnFg`tsV^^0lQN(h>E?M=OK=-l#KzhkeB^)zo|UoN03bB#@nK_2%{K
zpYbm~`QKaDZr=KAZS~gr%^PcLYd5Zawz|H)wtDlkYV`tbT)ODlc!HbYs?SEl;ba<+
zS?{OS{SSV3_Zx7)=POsLxBX+>fQ{MJdw&X_6*i2k at w<)d)ntr+#{BmVkH1K|oGaBs
z`eneV&h((rN$zDtlFjPfs6T<nrrN_D5&fTg0~n!Vhq_~^^IKguNoxrw6nUwmW3Fm#
zb?y3kwZ6J~Yiae`()ubM+_|=XXYJbGtNjm{N$tsTH4k7bpF5144OGJd#;fj=x+^31
zhVO~`F*b!pmfRl}(V?D9aX20hhI^d>Hk1Y(rnJSDkAH#{<y&z%_7I2>?*-+KrblYp
z??~6iPqAf|uUdQ!Skqdpu>>5Y;pWYn8#M;>1PP-O#GJ%Emjl(g6y2$)d4!>~d1lAO
zJwtZ7LswW|^iTE&XUYr5M#T{$R|J6?ESy5=yF52wHGU#k^48XYc#ARN2q~~^#gK5#
zLJdc(3eu+BazF=BM-_#lp)}D9HM(<zGvctJ$u)XwqUfcZ4zY<mFC12IUX at rN*cUat
zs|_67AuLnvxns(;W08rZpZQp3qNrEC-zDQ$IGb at a>~74R4#$%@xq4-IvN0zaLzf{A
z=0JLEzD_pgcs&AKu5<U?o()@MQ$RB#aI}VDA=ez&kB}+^z{mWABe_;+(Anz^I3=BH
z$D{$8rEe+bZ8u5ik-2ksMQYw-PInL8U at C*)?AdXTP$^vIsy_OhaL!!1Ed-$0$iUn_
zIYce?lgp-MUAe#~_9LQa7G){5Ogb*ZuLpj{;!g;qz4Kkqed-GhoncCFGz@>-@^Zlt
z6N(8R$Pkk`V$PH9P9f3Ws9K4MZ{#@}2r&pP5IeCa(Lr0Wdiv)gDDm+sjbqe^uN|=0
zm%A+_Q-%zzty$=!>z|zUVjl4WD(sfuL#zO~>&fhzNKyl*qQ}#{lr_J-6p!bx9w at 1b
zEnK at n7%9V}rt?XcmyNPYWDZW3Pr!8-Ot**h(S;sEt&ry-F=}OJVN$E9L=Dx5Z%j1T
z0+Xv3P?7E_P`Y*R2%DyLQrKbshHuiIyDi#P7Of$NSz@;E=piL)TfHZq2+cJzEUP8m
zbFMX&q6%q_$ZI)XFLybckw9w&M@(_!@4G&9m-2z#OU#D&(N!P&WecBLQ;XHz>U!QY
zR<*$uC%NM3G%&Wm at n504DcXUq;ah1$8MR__z{6zvx;BsAF()*}6LagJe^~c at hY`oo
zgJjGVs>q~7YWvAUR74Zyop<uQA4?okL~8iyhAI2S4E4cE25nEYK;8c>9gtm&yDKP@
zQLr?LBcM2?j-x<h2zi9e%~eOpBOWQhZ*;6Tge;I8q{Ww=<I}Hc4C+&U^N%AlLf=LY
zSSV7cSly~xo8F;LtwWyrQ7^DYi_6s<6`?4<xliT<h&wqavkI}^PBMOj2kwW{oxLvh
zeC|}pX2-srV|1D~L!?vQ2^b~j5Qdp%aT#;i+BBvDR>;1m{S)y4Vm55d9re52-pQPq
z1RTFPx8W^|Amul)_rI>bxi<&Bc^*K~P#57v at 9SV?@#U~}rl(pJysvzMMHDE3Q}MW3
z!>(Q6?H|gXmUqpr?|>+q95HbWyuO{Y!34&>eT-Bm!}0#8f0~$L_9`Zmw(h$k+z~YE
zWW?2l@^s0rSShu_!91_QxFS0avn<9HnqO|vgQTtrCC4Ra17G;_e}4X{eJKCI%lnzA
zoy-4&<0N``NUUBshPX<Y3ECH+)2G at 0b7Sq+`nBBub8Yq7fBiq6fWPCHOZtCYvPTVS
zip(nRw;(234 at rre1)czL2Bcn}B1^%`bK~}HbNhU?ggXt^zPhu1?aqy_{$4R1uef|9
z__hn5l8Hg4S|>j`mxsK<f&J3s$=;y(Ij*YRM;uzO226PW9hS$#clOS^ozUpY=gk)*
z9Q2Xdor^43oUGdVntN3+uyj+7uf@%P*HfUlJ2#zoY#J2j4m(Ap1yUrZ!vW7%FWzDQ
zH&ZbRqxKp`4yt7StFW@;V#1BHh6nhHsuLSu9}bacr>QO$B4^mq?;v5UQ=0fIDdl;r
zczCi5H&@ISdE1Vg>-CYbZLe*vLpOd6J+S5VBh}w>SnL&ZWi_H*sPG6I&U?tmHmlB#
z`Xpx+GhBeic>%}RU#8Bvdi(&lQyq6kZ|D%6!V*TGxHPCUg`o7pp2?*Y8DY5h=n|Gm
z@=M%kb2b`eVIeFP;<Qt5E8m4Ue1y=#L at QLs(Z6?+xcSj=|E%ynM?#HST<ZoqHxGej
zlMsT!NRMGJIXV=;#>KX9CbJeKo5T8Erb_`5`xs>=N?2WhAV{Wnvd^t)ce#ZN^%;xI
zI>><5)=4Q{F=V)F=5)~6ci}h=T>TKTQ(Eobdx&I5uFOgO(FL|x{wOaHL<>YAHB8Dz
z at jB_fhr6_gIFBp7?94BW$QYeT`bJZp71pENeCh3<$t~E}SZKt|s_^zjwuI69NL4ca
z$YVLf(T9%*h<N$<`2N$K%?n}mjz?+GDtzxr<j~CSxB}vr=8^?VH>TmFcO}xE!VRuh
zj?S*`JP!6SOk57)<nI26jTd}kFH(^4Kf28#)Yx#jwgNQndw=aytU>*1-e}S;^pZH2
z at C9<VdWl+z-5y!%EmA)6Ma)CBL<9gXvFko}Qq)Vci|W}hS0nKEj7VW2t30A8>?A=>
z@;<>)YsA|VU>U{BrAQCpWe at OVpDrX42v=84`oa^Kve=w~#iF_rhJ;Zk=;uh0CJ120
z3p at -3&TYx}jX4ilR&z^?m2wfCHBZKT1i{E_7+VH>j<UUQ=@`Qk9YQdiTxse}hMH><
z#68s$4zjmt%WMQ<`HSh<<$2l?_`Bi!ogSbX8H<(f8nJBrX(>EsfYOH&D5q6zsJ**C
z+zjR0Fb$UY&@;SoI=_aqC0B at ffZY#XvrG3XnA)>?6m1cOQ41uno<%7Aen>|Pfhky9
zDr%6IK>~;slTg;c_vz%0IX-qmQPpKzZn6<&i6!_tI0z3$*s+3%Ax9nNq^ZC|9m&84
zN98en`7}u9V%L?;5xSY&#@9av0zQL-YbIsqY9ns|J-z$I?n7j$y1$#%d5b8CF}zTc
zdJepA>!Bg8j>Wz`1O)a8mlN!lx%n1GQ at e4_YG@!d_9p}`(Nm@#I-VB8mK!=5$yo(1
zyLGyEd3g*iI7hU^j_DoQ2aE#4v^h}g_3ODRaua%gUQK|RC#t{;g+bN54JY#8WYwL^
zm|?PwOYU2`F>UUEbACel3tMFI=_XMrEi+9Nvv$E}n7UREV7ew+&pQ*Tqv%)7ke~bU
zWG?WDG#_bOx!eR8w<Nt}{zCL^j2?$(CW>DDdDH|g_%%~p&Ib%?Se2=VwpIqGyE*#r
zOdKIxejZa2;LI|T=z7?zF>F6cmuXy2UmZX%!den3OV2%f8mhPM#!ldLKoKS|tMzHs
zsoH$~F!akc%U)EFY$}wyIIWRidZVG-k5p=@a015bQ&<Il&3DPRVKcm?R?nCq>S_T2
zv(jXD2s6U7o(u^ji!r)ddvM&y^V-~?!KXH-#9zj<Ltb&-#Iqw`$Jt`fWtg2$H5!d;
zXOx at t3wEMIux1U`kdU>BPG3*<21_x=&#g06JcP#GTDIEJs|+qj9a}CX6jEC;k2k2f
z62kUMC34AktX9&wC{$<QUuMajR at _;5k-5aWIcXdTc=o`-b^^vR(dNniu&c3o6S;p@
z^pD*4&U2w~qW*39&z*OjE>^Gju<!XI*=0QQtM)W_UBsB67BB22Jl91!+o+kqv#lG?
z at 2=g9^<t)tjVay3s<@iinB&rW<>$`Zjy|0Wns{ZUY{#&Ni3t+7<EWSvaHb7bhj5Gh
zg_+o5inESVo!?egUcU}V++DF9H$Oh=ZPz*=iv?4fuT~_21SeY16qd`fVy3^C{_dOu
zGEYfhD$=Fh?dNByLjhybSLV97k0j(fvgMoky&7vg91fae5Hsj6acf;8T#8 at l&sUg=
zLfdHtYk`d<$oD%h+uJ*iPU4t#j~~3;{sBoI+xMT~0>h~#{<`@xd0$ga>U1i(E-vFH
z$~`+|2wV at 77)@o5L<oos?xEO`66CeObeq9UnxeiHF6qHf=<O62OQIEENlU1HhTc?9
zi<3Xd{||p_#U%F at Mj-Aoah-X$888*SmdnHvcgE9oo?sEZ#xN?{zhZZ~Accpzf)c|W
zm#08EV`jAn!~His-bVmKbg|jl5CcxV4N%P1CxW761?sWm$ks((oMxk%;O{^v`iL`u
zA;FlGE(~bi at v{uHDX^C at HTiqI`(x`VnthDBZoijH(0^>bUJhmkhkUsu3l|9Y4e90A
zu9ti{e}vovM?B2YII(rI!j-wUyne&9Zp}><As(&4E&_c$QRvPaKpgoY$7uoQ%hBh_
z8x0hY-8HS_PvY?>IjZ12xva})(1UGFnmQ+SARwmS%d-<?G86f=eX=84E3MaQLbcYH
z|2P{?zNVd56E0poxL*3Z3G*qTupv!%qxP*m?1hAQLta94*~*Du%4GSBhAplWopb$k
z=HkD at m4!));r}o^!&Ox{x^&Wc+dsq|6vLA{p3?IewMP%0_D|lB+3t2M0xXSovA&l#
z!Q5EkFM9nAYf|szOEB&dfr)ix5lt46c&SK at Wdor{I7%p?56XtfJIErJS)P6ZL at y8e
z`)^<xF>u*xr1nhRM-z*PV9R99=Zp3_8 at q1aT}h(XC^84QAxg9k at x%wuBJiag4Io)C
zYv<2B{V?q!$PozA+l+d#vl9O)QS!SA;0(W`)cRw$o-Q%Z#{^W-Xg=G at 8=(<KW~<kP
ztC;_C0@#DRgl7~Ke!?>p*q~zkfux~9ivB&^w!<^`VqyB(fWn9|>+%vRf9r@`ta%k@
z3imr0Ilf06EV7c~P9od*5;~f`3&IYt0E3#5I{yQr>4zu%Utj~s)pFQU5Q~6kl(|Rr
z0XWK8<$dg+$-WoI0w23zR>gaMVV`ZEdi+_Twe#Kf57p!EpFXV~Za at A0+4CK_M?_p{
zoS0!_mVBC2#l%^5^EWD%lYbF|=j$cx`(FVP=IZ}90)*>$3k{D<k-A)wm*O?&b;*g5
zLcZk(MxM)_BNJ1(9#f?G+GBmAU?q7;#^chezXmxHJ8UnE5q~+!=XskC`Kd|5lH{w^
zs at I$#<~>7Cq(D9AtTbB(a8MA!z9_zA;q?*4r!+wTQ>FGRjTKqsypLP6q}6dNp at 2zs
zso>O>9INnxC=Kyw!EjvK`EW8pT6Y`{(A<IaoCpMJtr<M#^Kx^~2-gSpM(sWg)fN^H
zBBA|rx00!8oLb2y2+`(t>eT7jev>qag%%Qk&<KD at l6#rE{kO82;Yxb!G%7wXE=1;z
zG<VEgolsQiZk{DI5~Nj6d8WXLo(J!~)k)CN#tIlE&A2LJD;7xyeG*Xgth3y at OTP?5
zMZ)f!a~a1Qf{|$lwZwcPSQAQXUL$257WKx^0L<zlfrzVXOTT&<_=$4x!GDy)3~O#2
z%yY{?z!a+27B(tb#P+?r;yUlyBBAOE$Qr#lFZXA|C}O2?82wOiHe)#C1c~yCrz~XN
zW0Aoc<?fCc)>zp<=-CM2&Zup-&(=LVKK_6+6<Nb$*h5P4g_;0zP7hm$FIDTdDUk!w
z=!pRUxo>l@{=0hvTL7rP64{H+dVf);W#Gvmt}du~jNIwb#uPIlOe*c`d?7;=v{P+$
zL?D!XmRUM0PR)yPl3<R)tF+QX1aQK4(s1xiJ5)uf%o>pmfOJv>A`;tFr7GBlNs*(B
z>C<rTGX-qK_eWlG>B`dJYA2rpKPoHed6Guy#@ezd^;5xw%nKwEf#(~EAhuAszt00_
zza|`Qh{YR-+L)UMih$pl`*JY(n*T?_immelf#;X71r9E-S}PvBFrC03TjH^gPOBKf
z!obyb>50O5dsD<kjtb}EG{>b_b6U5#WnM?#kAY*1ScLkQO4YlWeC5+rg_CXUOx!-M
zLmeF;9vTO~OBGA)MFvZw_sZ>9frAXaSzBRr*PXMduzSjz at xGCp6?+ystRie2Z5heL
zF$&P at YEIX<gr1qi%Z<6cH^*)H8NDY_qd=8}8C~DG(SfilM6dYc>wc(`EqJO+H-AE7
zqG_U^#&6s&4`5`h!_R1B8~PQ`TyY=Mgfk<BjdcctHk<$>gaOb{>37 at dQ{NUTU?{m*
z5C2Zptse8QK?vBNhluwFgYSus64L4D(9$O-fJGQ5-FMG?vlr~VtADYsztmXgbM`zV
zL<mpP<%Lb;h(XRf^+kutDZN|^K?7y7MhIk0xq68`e}L3GOwVAG53zZV<q2kID)#F5
zCJdbx7G>7#VU2~uZ`@S&`!!5>(;J-NICV0W^C^|?;dr%(pdrpKS6Vi!II*jE=A>`$
zHHjNB`F at ZiOKdG=7bKeqI`AS}*5vTA at Q>a^+%#i!XeHLJw6E at MR5y5HFt#$R(MbM6
zf?(~{_WPQ1_jYB4oe14WZr9Um5#lLUlBEtwS%&YdsaPb&qBw1|Qd9m~-Nug%0goi+
z3eJM3>VFxz;Y6fnkTLGBQ|wZG9V6(N!pUs97~IOz5CL<AcC}4c3)ixR;_|TP*pOjo
z!S?Wy&aItPn3v$xS5>uLei9oW%8RfN(*=4gF*0GoDup3(r<OI}3w$bmR*{AYQzQqN
zLzjxKfeRW$PP#>6s}|+q3=p5^2wU+k_TW5G9-K7v=sSbL9b<uh&Q7JN at l;Gug)6;Z
z9br#->$r0`^Q at R_sWCLe77C`CzUvK6w~mpl%JnKk3)ZlMC{pS?1^?Rby_;4J6TLTS
z?g*OXd8%m;YOy5=&+JIJ^tAea?c~um>bKLt5jQxs#U)=)3B+)OLZpu_xsWkZkG{nl
zBPlxs#K{1Kohb(t#<HpbYD%2XPeCJ{qj?^a=S+IC7K>($Hda8XgmSY%ZPwiGHgBYp
z?6SY^BD&>a=trGnC`e~J_DaTl+N`;6RBF&DH7pwpkJRrmBgZ6^pE>m%)Zo@<PLU1V
z5GcYqrlyf2ZHOYQ#yLzBtbUVxXSQC{nrU`4sP_U}cbYX5nR#%6<R54KksVZa$#N~U
zQ*%v>Cm(R;3^_=UkwU$TiQHD&S{}|+lUXmDMf>?|h&r3dEDTH?Sg1in)k$CZSb*gf
z$_)CBBz8c;mH%+i`G*_L%zFXPh1;Na_Mp at QD|sbj`mTR`=xp6STq<+bc(kAU3^EB#
zhTm%+L9{NPB5_F$vf7h0#v5}84o6C($<fB#8Z^F+ihf5L^Ft(gJ4P0iL9Y&=GeEkx
znyyr-$;N31(5KH_YwSkNb)sWhE&LAjL;GPQy(}kI#Ap$zXq@;VX2x8xeH0sTZur_b
z(9-7)Pgr+g#Vs-`q7Ft?O}w=v>|WdZlx&>FwvRg9K4RuoF6jZ0Ae-C at do{(AW~9{f
zC2`J`y*uhL=*<=uX3=?;Oij5${emUul_ANEPsxPi^TJ4+t7B_3JN6d#fLNyI>xUGt
zcjSRdduLq`XM8?&ch+Zi2MdG?^oFJDoe3t8_F`5y&Lw;=?G7+^pmD%7OW>l5|9D<s
z*6L5DZ=`E}Lw7&9ogXBg>8>Y#@1H(8!wp1DhP9P at aL#giwBph1DDnGmJAJIs20gjJ
z3m3P}!T|2M;k)}MACTI0)O*>}BM6O^Xx;tNZ|)Y}Tf^H2k8%8X8X)Y^NDM7v{iYS$
z9F2y#xgO|^2B)tEp3FcO9v4yl+{@$HmuaZ{(A(44N<SRPhKwWpm#H(oTX5oHnU6aU
zhCC6{2;VXrH at -*0cT1Mire at 5_adkS@BRRe9BednmBVVVoBy!AhM0e!q!S*RbG)u+I
z>U^eGU at M_^&~|qIK_Mal0)b at 4F)oMtgW>xrg};-`Z~!mJlmXZLRLSa=O+Vau^m6;f
zqwOD_w;z6Y|K-kRdgMTZ4`;0R+;OL0MX$~G$frJPsN%U3eQ}KY=`gt%=JD;13=?1Y
zaaoc$PNhFBrp3i?=D*bhLI~*-p1_XV;DcVYiuoD>Ph2+Bd_&N4Di)Bj0gaF(tOtNo
z<IwU2_Yoj;>O0>tSgcyDi&y<7Fwgzs05(z*k8vJG62H!;&$usao4*K6=nUF=P8v6-
z40^y6A<?zRn#a)0$68>F>yV2^xAiU7NwxFfB~1q{ooE^th!Q<aq)uIKsEu2wr`x=<
z7r3#uWN(~JNoS+}c20M1{L<qb<IO>9oPh!Vnp`mF0*N)m{hoV_MZum;1#ctcND;${
z+Z!37ipAy~-4GNaD);C#uFuSA4T4%VFP at q?(e9+<QXHI=1Stsz>x7Gg>n9_Vs&YY?
zp9;_sO_JNn$2=tt7K=U>o=WD8u})-%q<(XSM61q9qVeI$Vci65!iZbo%$6P13v`O%
ziX3(eo|si+-Uz=)tHs)>&jO2DfyRZ0`^Md5E!6}?2dCEIJmjHX0K{{XEp<XgRK2)$
z2euJ;Tb$f(37>3NDP|mRvT;pmFk|rQ+Ulw;TT0vCjmDFh^+}CfqsOc)D2K^{q0fvc
zn=FQj0LRh?OKKf0TYH){&>kL`xUki5?jU3R;PCR(#7xqH1u411k$V^S#qjplUXs+D
z(2V9OSBZlnu0 at RF;|r`Q8-Gb5Ui}qt()Q9&0oLP3TP^Xfi9{_nCEjN~X<2*}jXbYz
zx6m%8s7#t{dZ at 3ZnW?a2CR}xy at z17GEPM+#6kpfvoDlr)sDndjGN_Jk5ZbEu!?(^R
z2e<J{MXxsgPj`P8d+6-bNFk)IkqfT*Jby2X3#;gd{H-#Ay$;N8MjNBI<*PV)k8!XM
zTP?K_5<RYxTnh`sMA9r`4tWZOpEqDKTb+Jmxqn_Fw=L4DocI18rc8Dz3@?<CbVmNy
z>$vwP%m2EDq_F?Z|9T-JU$U^CNWbv?KY?wkr(laS at OJeS2{d``=P~R|td3-XlqP)@
z;fAoOz(>gVdi$#zn(=jQO)|dTymS4=o$GPNSD$T_CyS8NbcnrEJ55Ab(zrj?oUF?t
zsjt`Puza>;t(CEpTkKb3QNn2-z%SD4wnfP`G at F!zyRn}ym_zGvQEtBU>emIeUv46|
z;?Aqx77ORdwI6P8|9NY3w}rg}A#$w%4#VT5`)=#ISFc{Q?>~IF`Qlak>HX(VzQ+mq
z>4m at d=jgL?)Cfdor&mg6$v2O%GrOO^#3fVF4XT#02)h`=0R`DulW<a#W9tgX83>1)
zQU|z;4#&5LIMz0L*T=Cm$)*R|XM3nD|B!xfzj2CXh&aM2sQ0m}#S&y3(GOHSjZuqF
zQ8HWUI#o;{?06VNGk6Mh*e~lRL*s(pt?i_+WPr#v5>CScJG at QWi(pE(!gBQy{9zNG
zz^sgec!uu)7nKfiHWZstyv+*=t3RoZ<$yR2`C((~02L%j$i8sy*tY$U)k~~HX~WZ%
z>w4KV1m8yVg(1AX^GdaOLgqG~J4Q~{LpAC)7o9;=X%Hb`uzu0ah56}#AOs(Guv6lC
zaTO;bNw$3)*?^Cvl0{H|EUrCr92<9^Fe34I`Dsi?&EI<C$cDVYsK-#!E;J9g at _OT#
zJlQM`2_BzwM4C#H9#goyHXzgB{O=f#s0Xu#gL$I*!!x)*aG;5NQWii3IX+{4)CGT1
z;i7}$z!Akv@)6X3>bR(sg0lkxvOvS;(XlInXjH(#NHIBT;rcflAZAID=|oA{M^5#U
z_Jp3&-DIy%bR~uB58p17^=&dle)- at OW9zCNnuL#hDh#eOh-$pF;3&mX)KsvPyNd9g
zye!KXXDwfZMXG)aTIDiy3x-6QWbBHeTccp8+ro+a^`sj$^aGlY`dt;{@R{Qn`iI!2
zxWj|(7;rf#-_^|PoSsaU6%yRWMoy6Qrh5}}@mx3=u9gWHh*};f;j(dc*nf*lGf4<J
zG!JY<Gh;x-7^0=A5MT<!lAvlbgDJ6$kWbp1;pkx&g@>eBx~V7D8wC-z^=MkF<`7ny
zV$-5*_Tg!Np3_WkepJm1dq%obg-NBwr3E8LZvB<5x*eEXUn;{}NL;Q{bTS}(%^a at z
zZ|?{yl3-V0ryCpTc!fC;Sb=S*;NdrwG*(NEy)el4PdbASzhF4TEB at lU7f2}dwhxCc
zBaQr=NLM+>xHb=&iE$$-vnjC&)f`vAw#e9R9(5RP80RkNCS<K8tFo~G<vWT)QViEc
zAO;UN;Yy-r<cMJEh$i%KYiA#mN#e?AmopoJYd0UxX*`M>Ry~i})tuFQVO$*SjwI)=
zK#Trc?DFAp!SFZn at g<SMMiR*T3fbaZ1SQ$UI0NrX^EJ-U?ZvrOna(^jp$RxI>jVE3
zx(s%5qP-j{2+P~`4H~an<H|+`t*mZ}Y!*CsfEIt&GiZ_Mg}l*K6U)y-UvV2!BN=fY
ze9*EaG$@SZp$k$9r`vaz+OLspk(nuLdoM9GR0}CsKJr}r0;}%s-sucZk2-f=zy5Xo
z>a~9^e#3VHJUY-2^c68c+dBTd3~!A)gxKRe>@T$bM=!k-{NZ$4T=@DQ8 at sDZU%meE
z$7T78jZ#7vCP{34h?WHEdIWXh$AynS?tc6lsE$u at Cjn4htTpuU$JZZ!TwL_fb9GF-
z6O|((EH6cZB{GH&+$RtrQQD~_^Nv at W?UL$|ZMh|Tt8&>Oy^gYLka_-=_7H9hz^!8t
zDU=qIQRifgT<P4#NB&Z{av8}WlQgh8;bRYXawPJywT$5ZlfxCPjGPwCTcBVX9e|dx
z;9L1Tg{Z)KCrkbDaOw8#8(%H00i@|w2a)cDUI+J5<N8}jI$rp~J`e%B?BxJo#Hmw4
zI(GMf<xNanxD8oLpQ9P`7G1t2+Ogme at g&V|FJ5JqyJkbqU`iWZ40JV^Afpi4nG7<T
zv79EML>F2p7L74BxrAeUsE8liv0iltj)FR4U^~|1mTyQ>r{FQ17RzW08S1K6;5x=q
zALABxRv;J74G#|b`~40=>b7>atDD!p^1#i}K^GF{7<<eJX9&S7oHwl8MLq6H(<8E6
zZE^8`f+&eG>>^FCp=!I2WP>9_C<v!__PA<5ZG&TbACP`M#pvbPc-#k^eOP3Rg8I6m
zj?B)$+h(6A(=mkpcnIv-Z<|)^AapEsJ4w+2;)iF04izrZrUb+80>=Us#4{?U1**M6
zRPY#>kGR>6<N)M$14^c+5dnyDOULBh(7`L2BZ4&=1HoY|8>&W<G196DCQBvy`-arX
zl+(UOb%RwY)fZZOXOKc*um@*@L$0w-pbZX2b$tMBparojT0KTK`u!sh%0_jJs=pjj
zlT6-e*@s66UZ?fXxKxg2XMkInvABqNfw`(Cjye_DjFAg{1T}W4qGb at F_97CrKDJ;-
zcSeZZ#S~niTMcq&T(!1e%F(;1C{wBg{$#+fkouZ3$QTh+ at N~~&4Pwixj+MAm&w-|d
zGsJj1q_Jt$vfHe17sq=nF3CF5=yh!r5gDWNwV91AgnkeF2eRx@>XSK%*~`Zd*KXas
zDNWok#vh)Ipf|kzc!H^f3ofM(U~!&cfW3mO49GgbdW80%_l}M at v3Ln~j4Kex&=UEM
zyu~t?ij=}k7#m7rKkW4;eS`;L9&vjDR2y|MOtF+%<b>1cA!HClfcY;+OXQh_ePtNp
z6Y<QV7eHNcc9Q}<nt7}kY9X at X_;etQvq+vMl-_&XD?5-u=g%LGu=GRkP?eoMCJglW
zghrRJ6xUds4js=lSGk0hYfeFwCG4**-6kZtPAJOWcG3e at q?=piIxz)40ZX3 at PqZ%i
zro+pU35077<Q^S!jVaesF at RxtZTUUrCxm!C%#(x at +s+N!V<2k+&||u`egozz2P`C*
zd$zN+35P2dM$8LGL;rMA-M)E~XfSsiwHZ9n5<A2a6s}mzgITegghDI1wpVpg&@fUs
zm=9&!+hywdoLt=M9K?nNAJHb)TwZwjv2!r$zv*C#(^mCA;yUu2Z{fP|FlDeLSGIsW
z7fh{F05 at 8KFCUb>=>bM4jy^&f?IC#wE6O*P#)XFCC8;8h`SQy at tlhYE<7 at o6xq6*{
zZhUo3{@j*_H*VdOcWbNi at YXHdtmOJLQU>zPCp0P`5PCBDjV=EYDE*Z-A9ekgj~!eN
zu-EDT+&Sq>|HIF?9!c;E-{1e`%Rk&)UHck!K0y8NcS09`nbyUr4Ta7&x1oH2Is3tl
z<yzjGz1~L{K%LPU4GJO~ezj4pKS1`+cx2bK4FAPgu3lf`u&rX)_~*8a?CPy`{dHUZ
ze5FNhf29xgofcVJy%vUB(M&iv5dB<edXnt*ei!@(ok==eF at CfHP#~fvBqsDpMpJoa
zP=wk`c)~IdKEMveFvvK#DX at 2FbI`^u5fgidANQOMBdxd}_3=8)=<$^fjT<kSiP^BF
z<8^yA8mPmiH^ctzrBRre5g{6pvO4Var$#4Xnsd at 9Fw3XKW^5z2>ZubEXZ&$*I6iSR
zO~1yYwJPH%LjS>V4DtV_?`6f_IAy-HpGC-_k7bbioglAjl3~B|5vLA1Fv*CNeT~b@
zQ@(r1VqbP}GwIu2U=sju9+xt3k1s at IGu&}NVm%jU`{R%MzaZvLQ0AAoED;t$eEEm<
zo43F2jo*Cm)ZL#pZgr at Uu9GpF26qY-YS;z}G$GoZHfG(<$1ar8So*Ku0s%yHcZIT#
z$XdSd0NIRV38cre2(1 at 4DRxMh0o~q5_=Jy at r}SG~8Y9#d+5M=8>qjw+P7roupf_aH
z&kOVhd7%;Nl#Ulr4IM9H*&Bq;+{#(AH~4rs>h<0LovJ0@;=;hOHz1~8Zk~?&gW(Ah
znstu%x}EU1H^GmSv#-DG5Bcp4Ze78jKYVpPlFh)Nxkm*Ie1|?s<B7K{8~NVJ$KJ^y
z95CcfbXLCy5(szpMArCGPuy?$sLuo_17C+Yg+65z1C285B0*G>p13;|{#rK`?Q7m!
znd6&y`6ZU7gKqEZAud-k>$ev}ul0QfbnW^K at KXp;1Rv-y74RhPWzGbXkBH_$(mxdd
z?t5H=6G053O}q`-ua}u#iT3L?fDIUzAfCm|=7^qs#I4uxbaG1Sx41NsJmag)v+)}&
zf5NDpO`CrOpaI1qyn~LJ6QxDiLFXe9DLTX5zQ*RnO`>=p5+CL{mmv6KtFarl{<<xu
z`>j}rpwVXDC^zc6af#OYF=exHIOyXd;uANG>}y<}9h61b&e`xdu**RVG at m`QfXeJ?
zfI5XRMN|V}N?4BKuH;=GeLN7aqYR>ai%YZPvdn#qO_DF+-RSlQUw4oT&<T)(7<i2Y
zQ-Lc1W<j4qiURaNh^cT7BNbW`s)taa2;YP^TO_gjo{{BH^ym}#-4BPJ8i3o3ZxdXP
za}nfGWRu)p>Qmnbo8+kX at u;^qLY5&6lzt0nva~$rznqe*;sm*_Ypxq>vPQoCmCVc=
zYuAHKjV7CWQEJln;7BCdh1%**Ypai|!QuaxZt#nhWv}EROzdknDR1zH{aC+to!+1I
zYq#~`b at mbOZbzMSPKwgf>1gzEe}n|0HuUa$EbYV)KN9ZxZiL<Zc=2=;O@`W{p$WF%
z`dgQ7HbR~<Bn?=HVQByw>83imXCIHwPIT`=5OY5QgDJwIQJ!@UKOmKqlL|-E6x2~8
z<bZGqXulhpu1(s0_ahyH*cP#|3%}x8;G910Mu8)wgZ+_CwdLw~)X_>arKh#xk)PGT
zG}EO&`Pj!Y*Y!ca<{c0-V at ux!+0&2V=8||8T#?27M!-`jQbah=q73rq&QkAeU)L_8
zkYb_sbLZpF9ay#4;o?ZS?@~j4^C_nF%~dfj)^A=HQFiUd_1ibYJVz7bpP{G>JpTl_
z+0=y8xKJC-lxb?i)8=P0nPzn4&5%7`dQ)_Sy%~Od!-QR;sq~vGjc&XdDyeQ<zqwA&
z_x0=7MBGCYfMlNK(L!@KN-g*<oVS5#rrw(l7VE>&p;Nc^J&5`@MyKo7aJ3scaZNn@
z_$6JswnkBpU-SxJzXm-ff1>UUCT88*VmaZ2!Q|rrdyHpTL at 5!&uUP8eA|VID%uoBh
z$=Tcfmw&i+Yc0?ajWpA6S|gs8Q=z||)`hnp;oW`f at Yk<(<lnLjPx-d@<rs$pu=qdo
zEbxEXd-MLNjwD^U|K?L1bk#25Mk+0UZ44M~fO at ozN|<(IrhZkbl2leL>N-^jx$$>@
zpC=;MvuT5wJMXoo$4KYo$&8GQjEIbkrT?)C{K5e|;FUcO&MNK&24|lKaFGGuHqiUO
z%I^gRG;Y*({C8IB=upuz_$_~}q1>Fx$1wMe0bdEm7=9ig#C>G>xBJ5r^FVegG^EAH
z=KeyIGG%4B;!q<w7#W+ua_&}W5T4X^^kCo=c<i?>i5U4MBQgeZmNqhP2RAX7e(BM1
zgtBOR400WN6jk&&tkSQC{m-2#oSF%&{E`87D4O+d7q{Cm3wQikBkDCP;i`HS=~mTk
zIRf(CIs}w=I0|P($rFg4;pp>lG`@f{pYj{`NB9jeGZfyvi$p5kggUHZ)a4y}hzt5W
z50)yY1fKUlpM#p!(yPCDFh%`4m&Mvgv6tWy0e$MFZjp{%)MwVvUDj*)Iu-Tm=3U&~
zq#da1qEPw`bw1%uTYLPuJ#PKp<9<%g;kYq9L42cHYwYu;f9_EuX2$c${MrGDd|$u(
z2HrR0qaQszpA&+3N_U08Px<P>LvS-hdOpFrhtu_cg<oNA=OPo!XBafk?%3-MB767B
zQDQ8H`>kq}09#e-G_Kmu<I!i-wRP%){XLjByB^EVI~WbVX$cVwp}#)<!E<*EQ9gyT
zAsqNu_C7WH(Hxs1hBTgjwim(#RPTmE^+AYvEGIINTPm9}7w*x$JMM8sd<FW^cshS{
zJ`cwjFE~A|7lUBh3sA)2odz$zOD-PV-y?s4nO7`rA at cpg-Vy7mwV25M&TR6u_c`qi
zPoXyuyXIG~sieljvhr9|>y^hVyv|>F^jQ9Ryi7%V1qly45vOOK>T{wbJ^P&YM;}|F
zyy<UYYeFEe8fetz_IUEckG-L{d86}knNrkwR;FCpefcUCb??^bihiraYuXo_bglMF
zw8$S>%!rURm@&G00fwriZuw9-JY9FN3VfB$%VX_&qx{QbB4_eR|Mj`mZ#&Lwe-FPP
zRsD<9-8lUhay8n6Li(=?Zd=x^2fe6AsH*muX_Ow%-qNvk+krD+o4N!VtIv*kfM_;6
z2$`;!8Pl=#+i8r?Lj^09;i3h&#c+N`<>OQw-qP`B1HSMNom%;^EfpiAFmdC at W!!_z
zUs(y_S8GflN+(+hL at -4sLT)(v$B>}1EcD~&^a6Jxsvw(R!}cUVIUYB#v2ls#CslRe
zP7AyBb1Cd`0$<-=IuA>a6S1BqCa0g_k1HIV|GJid4<Rl1FL?QrB}(>{Co96)pNO%=
z{UxW>l_!ft9$E$lb&MOWO{838$8~eK^QeLDo^zg at j6YAN<1 at 1?=2yQgKXAeb?7)8y
zznM-4{U66?_HL`|R%nu;xp-cMBly`}*?C~B&4WMrjO6Wz8c?#bzh@^Pn)e|aTHrl-
zO{&aMlal^D_*Gp`tspK^CZ}hgr)Oi-b2X=1_eaRvM4_CDv=?>|?|kJ7#&uJSdoY9;
zvxu}rB03Nu9y%vaw`PE?oEFPra})n6K>dC?xtMSFPW1ef;UF5=F*mvRe0uiav+>gp
zo%Bhi=5aId-PaEB4le$O?{o(*FD@?83W}2jv~!0P89zpgXAHL<-{I^!0L-7XmsggI
zPDl)d0JvHEID>G~{;BOnW_`t!E9l_&)9a5I%(84iX17Hc>b8wcLKF+aXBgsPocQlC
zFtRjH57JJdx&0c^>@FI2cG$g;Fn0u^MfJBCqR~PebCAHNI2wSFxD3Mrwi)RfhGG&X
z1Yn&sC1LGc?PXj<!6XUD0mtNRFM$au;}Q19MRfqb=W9u5fl+;Et&QnqTaIrEwb*Gs
zNM0mS`K+sh9o&dIhz?*1T>}Kb2>|e4H^h&~HD at C(H1tLj2QW4T#>Nvy2qL%z0encK
zfZz;WI^^QP^8np!YNA2ia)Ac;SfbNh6sbgoNct!7l1KFE3H%Y8k~D9w=F^eQZyp@%
z9X!>zRK|(OH;CYo&xo+Fm_#r<7v!PIesGEKqyiWgf->ZrO$mv9w|cO<wfoxVx at D-!
zq-(+(8M7keGMe|8ZnvAv=nQyG)U2H+f{pOMA#mL50M;@XF^tE0jBmjf<GvK#H==Cr
z0ofl-OXKc|rA%Eu_K%_xT-4$<B;fAb_e;n-o75I;w3%CAu7aVh>UjG1zB7Vm>lHE2
zq50ko#`mC4_qQ;UZ#5Hw$t<7&K^n$nf}hf4&^ph=0}U>j9N9F$u102h$2UxbMpgvX
zL?{_gz}Pwij!`>0r at 6*D3gQa#w{xpm^7WLrtHE1;LCLqcvcv=PI_Ca-ZJxOIXSQeH
zSl>fEP_UhUgf-D3iyRJ1P$Dw#MZEB1dB2={FV}z4xjM*ZKL4H|@U``*$-bxaO~rdr
z<J|BtTV}prTEPJBJuVcp at 2MZS_ilQz;fnA1#Gy7l?Hx~=_M)4w^$uG*j}HWVizhrG
zn89;efk||#Uq_Y!0qy7<VOQ?!;62ucy~}$Cdhi}=!}syZ1 at B=Nbl*Fg3*KYx+<T%<
z_X)N at vY|ozh#5Y+FI&R0_gwh=sm9OS079FxHONDP7~Bz#a|{dz56)~bc^MQU at Dc9h
zGTB5M2!Q=)MhZkaTbfkwQL3kWOEMcT|DxV7aGWU0eQl&*HX%GD6B6l2yljf#2 at zZ-
zW8V1)c?u+UGHJIukUH=WM)nZ|m1?RK#(oPi5FYdsfW*v{L13fsSJ!klfEe(aIXku)
z=O9}5sg05B{;EdIeXn$Dg+7FfGJ2bRVqJ46S}6dyks1J|qN6h>9tF}_K5p{4)wAF+
zZZt>jd{)YYJx`j=?XBI-W>cTWqcOKnrl&||Tq*R81XTru@#dl2C*l_{{;RERj8Dn*
ze?-s<V1e)l4m%S6k5$C1u$;kcLluA>7ODY!K~kBF&Y=QzkEV<)cPolFIVC}(nwbgz
z=yWtnP5LK|&v%M}>mjR6th=CC27EIr)~(LN1i{51y+XwXvBcp2C&)Pfr9~-r!Ip-l
zjHNb?>{bksm&oBDH32mNiPq+)GAcuhg9IS=B#)9L4d*s<v>0n#{&}I^9VFuCceM{6
zvO2|&_e>UtChDhmHO-U^s%MGe=z_8Q$dQB?=~HZ3fz<>;Tjk5-GC^=L&;*+z(65ow
zqFko3B|M-qfiM+_-5kCN*GIpteRxmhAw|BT;p8~bnUG6k+vvD&hi3p2^=cj#6#0ws
z77Z)PAUBX7ID*aO5BVPe&yIWrgf8RAe?N$RXo1mclVk- at B4cKz621h<<lXq9c$o|y
z!uLGxm{oKzgzt;!0wAJT^)2%|U-emVa#~(kT3T3{H=#bL>xe7+F%mG;A%c#3CkrNV
zzydzGs at M2^W&ZD_M^6?PA7}G_uRMPIXa4UPi(lujTju|MM(K*m_1`AD5O(<gy}i98
zxqlyjY~Tm~$OC!hULW!YuQu^xnr$We at IF<}WEUOnCg=$NuYIvU^8l}c*GNT!cj$}%
z;dmR#7XHhJrZ4nV)mQM^^(Al>_QkOkF1)q_+6M&7zb=OBhNy}`5{$;vdxl-9E5M#N
z_LAMb!(?+~>o7Tdv(-qb<UG{B&F(d)@MLSZak#m<0W1;a{MfSqpBqGW{1lb6pt(Fu
zU=I<=cr-ef?3wW0(S%u&s00Z^XfR<{@mQw+RVYzv$3c!4C>uy=!Yrq-Z9@=4LC%+1
zH6Ol=vd8DS5R=D0`N1TQUz}fFOqRZT`uNe)rN{qFkhSE8WELIy<nh1IsuN81?ZLK9
zQo_1%tRO9Fj!or?v?w^mXwqwHH<GFcA0<7T>FIPbIe%KOUtC-)5ChGNZhK+aoz!XG
zX--B>dFV%^?Mri_A$hc*9tox-brt3|0X`(dizE%A!Ue5`xDum~$@zlOAFB2Uc*Ka*
zqrFEmOHpr0kue8K&In2jYc8Q65T1^S#)r~_$u^U`9rixWBTfzrVBT9yYz>ig21%)S
zUP;};Lx)7SQmV;eM-FO$Ms-75AsEn31w9wYMZv@}E+bBBI)QtSWZvmtE+lVoKm=ft
z6NV?q0rFo`?ZT{qHe`a~ye0 at L<e^G4Y2g*ufgR0jx1df@)p2|ppHWd3N=(vA<P94v
zB&*5EXe5bjq$8-;Om-uMsE|Ns!fcw7>S>tZ>JivZ at Ji6j(;ZToE?^r9iJQp~q!t>}
zh=-I;QqqG4Sii*FCX&C#!zeIE=&`uA2Wyj9Z5D^Q_qF{&Yqgz@`qN4G?YJk|_L1za
z at D(&mRwlFO^bO=DXMRxP$R_zg%A_GJ=z>?w-xTt~x&w1;xUmKmAGFs`lLj(%9^sCU
zl*Png$2#3hn^nqa+MVQ(!!Q}Y=9?VD4VHW&IqtUjIWvy2!WZ!X0x(9~$P{NY at ws{J
zjt)#OO*4&m3V9X*6%Bz7Xl^M|>syRq at nA|(HH>6~O^HmPOeKVTP}tkYxEMs9v6Iml
zp6de=2hxU(FOhhNs9~WwW>7;OI7J1LcH=CCgl)*hq}#?YJi{op<NSaRnac_prZlY+
zvC6JNHDjL4^mt-+izInN!f6ZL0tpaC%1^z)bb#T9CrF!x-GG!#B;{`MND?H`aG`vo
zlD2HGP2?3rD#!@8xp$Vjh|DkgLj*L0E6t at 3VhrLH-*V1M8rqJjiA_2uT+$*PGP9Xw
zTi|Gj{R%4<=?-{gN10BLpL8LC7!YBGtsvW_RlJs1vN6`-5^v>{oScF!vQOZ>RwGRa
zpSnPPuuPgRC5?y4Z%j%kBGXq|0OHjc at Gb0D!=wIGa`Mggz`C#^uGshkj0)z69A&I<
zm<knOUt$9fF+a)VHR2wJ2qj1&nG8h=p3LCd!lsWSTeaVUV1_3y>zHLkisKB at Fo0!1
zel>!Nw0nRasa5^1QwuxMr8()w$<}_->U5Z;5S<ZVJ7C25T<`B^dmrA{*g-_0h3`qF
zQkX%SXMv!%Z8Fbo3x3|l@%T)*mgSCoeFKQtyb2<HZ}*K!47v|pfHXsng3OL*$lq2D
zkT$phNcuq)P_{(|theAijmEa11KP)sbV)feGI`#VntsZF67%iMf~0A`5)i%y6d4{3
zJ%FPc7_tB)bG6A4Zc89)YGx)Zp^E=qi-t_E!uG3Ri`x-Z9Mw}384`10D`~r|iG&uM
z20+TCk%B3|BDDPmV7d;gU<?`&KpoM8$OX0Kb|K!8xo<K$LOC5PrOmyUS!zgYlv<Pg
zr>V at 0HRKjn78bK$SFX4nuL^A6CcpL$CKR;n6O&`hZPR2<v`u*?DzaGba9!V-XSv!N
zAQx-P?%7i{oIx`pI9Ps at cHHdZ89{xW9nOfhXdZOhGpbXj4^(UiBa?MAjVuWlAJW{4
z9FEYCt?~p`@6 at L`6maUavnx@>E6qq$E3Pp|ZI+qiD%2yU+|<(5&~A}0w3E!~=>t~j
z-cdJwYNRzSm6P*_$Y*(iypi0Ts$|^+WT%c*0UR_UxR at pkQNh9}0dXa6KoD0^g1+Z?
z<I!l68_lYP$(+<prbNYhibi4q^t$FvFk(BdLWpmZS-yr(0Sx$syx at t><*5lYxuv}U
z!Wz<#8KDZgOv4O_JUUBBc(P68U6#YJ?s`1vk4|uW<F@$1aAVl3VU|YMhqrZ1eI6hq
zrS1(7xh)@D0Z`B=0}ztKVvpj`1#JSlDgMERpyU?nV|HIl9vPS_nfP#Izp6r0*a~1}
zggBI8CZ+{Mt)$bQr{0HJBrGc~T)fjJ|MO>0EOftn4BwnF8Uj`(+8(qnHRUr7H8^9d
zDvH$DraKrgly>5 at zvvbmwEGcSc;(5bp;i#w$B1r8(3+ig)r4J>%pz>Sjfa*KO;(H<
z1Kv|9Ag?Ad<}Bx>T4o8VxHmrUUIC43l7Z%DIE&-HP=QfV50p?B&S;qc6lFr7YC)5+
zsyQ(~$B$UiD8nUS*nxCnR^Ydd`PIhy)>deovc?_G>iitl*l#dfoNEYj74BV=%xoR*
z!QxbeTC2gsWDUpsL2G;_5_x~)Rr1PMBV?8|Af-nDc7p2+Xc3ccQ_Mf<0-SvaJ&d|}
zwH${n>v||HaJ<}nwfc7Z5ckTk`3x>wodLoRZZLU~>{U}Y4KfpVlM|pTz{O5iER at 5I
z;*hr0O(3`52n1C#$TZB%L_Q~@=ybUr*gT|2s|8^*O)k2;{_YK7&yx)LozYR%0 at +XJ
z^^?kZ+qO5ExBKP;(4IR8D?9ORt~Fc32$2E1+wX||wuJcNh847kH5J4*S(xA^vkShe
zm|xiHS~HXnVBs3kAWh34m<-pM`x1E~yMtB*4f{sdnK3j^6gjy0oXvMv&f2!Sa^5tW
zB2hZ)N~k^byd!4A?ApR!tOjltB@^=zb^~=bib_RG#AmR!=n1|?EYXGcY;qm at iT|i#
zjzOcc3Brv9rY9UFr-LEPR9H$ad{ME2rm-6J!EpyLVo6=8lKE--8xwE%S;ZWqX4SK7
z{O2}=IcIDN7!=9`wnDB!s9;gs?5dfUH(4|LNyThjlj at mpw+ZPY^b?mKvI94e)9GX=
zXQeW6XPel=XfZv4cS}djn{U4Crxi2JHO<V}Xq=*o@)m}>imo)+NP3Bc+dga_SZwva
zf|qI2bCEqj3DrdynxQSREGLdfytWwNPOaBQnu3X``KZ28K<2m$Q?M9m<zfuk8)YNF
z=_sprLjJ+tILz6eMe#J64cv=SoVZGgW*TDZT1d`bZ9o|&RHAaz*%DV*Fnh}(3KQep
zERU#!2Y0ihivu2WD;6SXl!N09RZSk#g9E12(|8zJUBTkKSw4iWN-vgiH at d@1sO>fB
z^hzi*tuqu;1nhW<yQ~;kN-JX`&Z_Z+7IIYrB50-8YeQ>V16t{S4jw;toi|)fN?zk8
zbBkyMwbWX$VfnygtA3k12{Dz$r9-qG&x<gi;EoOzkhopc-E9)lsu at v$7xIETA#c32
zOp)A at VZBH5_UwtJl?`Wx0AV7<$Laab<tmk99{f^X+F(eoJ5bAgi`!Owx5)oM1=Na{
zC}{%L%W<?Tz2 at Pu7Gw?M0IIJJ*+n=@Ib#;w$8mz;J%*c9^6k#s#^JXZm0cMY62PC`
z&9*FJVQ1(f)(HJD_C|!G?8#2W6)^4;Jz_AnJt(@`CHA6kI32XH+H(9wDcX{gvmA9g
z_B=}DVKfeCw|)%#PV3V~dmF7Hx(uFzv=|cTXfF?q;iM5f@=TWQs?iV0hl>CRUH}F-
z##h1M?>cD_U_C4^k3nn>wyU6_v$WosZVfkjDI8KRyB&0u#ZGxU#a93<wYb;+#BCRd
zmKAy0)8k`}V1syqGMx5!KR-uK{#nG<=Nh+C^<BZ<+UwsDav$<%`v?GN2OeJpK~f9D
z0|GabW|Kk(mkVRHms*m^U?>(8`%G0Vovgb%gV?xS(gHwbtV4mU0&9hvE~=McH`D6S
zsD$AaTjQ20n!JCQAIVaz^SYM%Q}7M!bf5yo(7-^+-oZlqy+LncIcM>X*@W}<A#~Sm
zHjRMDya6ODMLVYj at d|@Fj1}!mYGF4TeWwc^ewiOTdXA9;0u%#?7)NxcK7?8A3<P0G
z5A0T~K!A#c?zIt)*-&h{=5lLgVR>a?<*Iw2v)=i(^dVa}ri(`IWqzRq3cGLNV at fxo
z at s#Wx|8x8+rpN~DSK0mPo?(bsL6Q+#No`{cFMLb!H8Ctu>L6Pf^1F%kIV<DiQAMo3
zg+yXU)&LdJLP?AKq(OlQl^g)3gT4LaaCL2avzB~g{@hr_gVn}n_P7v3gT2TuqVe6c
z91h at D1qu`eSL)7-ddS at Xz5T2wo>ZaUHh at Q=57{YS2w13l!*%K6Kt_nbDR`R$Om3B^
zWJAIkSQIumMcA!cy)}bTerD7pIxB<1zXu#k--r8 at 7Eu&$Kn+m2eK4Sabm+eX#YE1&
zxCOffR1F at R%Rn+O0Z*`b12)-#O&i{bT)Yr6sl$c``CEsWN&@6;NKYWqGEjmBxn&9<
zLbQkVEt|2s2`kkaADzzF!{T*l2Rmt_-H`7hh@$5?Kp;M?ss`ElFhPU`MH}=dx}x&j
zh8P<x<6zpK^x(-k50w)hfRundsDr_fnt9CQLD6fo_AMk90$S)PSWfj at xJ(;&cQ`_0
z+J-=oSl*cRmA1i*GD5LvN at 7+Q#s!TrX+e2F0m%-%62-8zxw`&_%CwmoV~W15nDPR=
ztkk^fUHP at 9Azk=keS|IoS;$U;m?v|x5K`mzKt{GphbH(+x#4+X!!>~4>itT@{j3K6
z0CUmG7ro9A0Cs|GRo)STdlM#zIYgM#u?{FQhY!!%)VVc2m{vlGErM!>$SQ;&rtxJ%
z&Q%ed#SMam{VI-f+wPu>J7B88%Jy&w6hQq=vBi%j#+?^5Kh<-As<ieN4%VP4%D`en
z7@<!@g2?<mT=wLXVJUzEr3<JFot(zH5J3!I<rWW4p*mOuX`daz&j9e^oWh&K3Brjh
z*T{{uv37{I(emWp<-x#o)9yL6ez0azQ95nUb4)=*8EgeWMK+6I+=lJE46vX9psO_l
z--36iJtU$qJ=^OwtS^+bQF79S)ehTU*N*c1xc5nU8mEDpqLVs;^n$g;W6KM1$e*CJ
zf?<N(?N-?>o`-030i^iC9&+7Wvu!w;a5ir&;{b|rJKKeKu@|cDgr?^=0bjT`jdN<M
zgRM<CU>j-Nz{Sj(WoRQl-NvwObI{^t5ZKLot^x~%+YMzvGk7-kYjJUhQ4f-Zx>Min
z$P7I3hG~F#9_m*S9MSU}jY2Be28SFj1&1R_V9wB+bQg|EXL!D;<8s{^+OG at HD)O+V
z8*627xz_+MBeiHl#Y$eleJo at kp6j%mpel7EM-km24v>gQrRm7RO5Xsf>5Fw$$67mK
z;8#XITqDibNYLF*4ZaP~g2c{4c1N<1R>r2StuS$Op?HqH4Raoijch8z!rFx0eO%4p
z@=#Qw=MdP-qsP(@b+m*lgtG at Ge@&7h2^&iUG`LYTe(qh4bfB#1;!t-L0C*#cvmf>e
z5jsa>UsTGRp$sShJx0~*1WqYgg*(R{2-G(E%mL<K04n6o?hUD71p6vbBuD2^!bI|*
zC$Kk-HPA==66?*nwDhUOU$qBND!ICN(Sr9f!*R at O{84Q<A<8Ud at 8qje!0l at begL{%
zQlnw0C)}OZR&|S5aSWE%z0Q+Y28L8lv(?8}Lr<pDobj#bb$(o@@SE9_3ySo{sa>w!
zD;bX&!=9bfG9WSyxE5j^1AG1|s?}CNbmEBwpBL1Xrm=c at jxz9=ln)+L1r*!J(E}7=
z*vEQDdPRh)aAMe!$QkWeFN9ldTCgn!l~HNDjbs5JTcootY<4VmUWrJus0N0ONhf#;
zloc33=(x;#TUn|r2iQM7-=Y&iXm8{Y?s=X(QoN4b#$`BvP0UGKog*(Kl{5>-3||$`
zP2(7x-`n-3xPE%FZ(@6L(~RDgOjR9-+?w(bHMkP5>*95^k?}bL=KPEN6sJgX#rrkk
zd<fN&fC}gc&Y(9Z@);kVb-PG5F*u)GX4!ZK<J#rM+Aid9Jp1^K2j**SJ`;#Xt5bHj
z*-eI^q_(=r$War=m#cTk8or4q1|;jl{Cd8HO3}k9ma&6gSAkR%D>22?u=TNbqVa9*
z))*%J2?`>LIf45ZzAeZ^hI0(d>>yeP@?LZycrM9(9h5UsK_0|b|Mm!JJF^QF$=h8w
z>{@HQ1qe~QJ=~Io?=iocbnP`-;ag(+w>ZTUk-xMmTuHS!^hU#y6UehXDy{9^-(88_
z!n4fGV6pm+Yp4SN6b<H{VX&3JP-aXNvP8ALgN at CDWbKz)a at 228Lo_byFfr0LM1{2m
z|3xMp+}OmwG*Z<XJF5qWwPao+dEsbqgy2&ekmQzGI#%Z_QC%4`c(}ELfNB_N&42kf
zY`6TUak#p(FPEFGOg}jHbmuFVd2fs~LD8hm6D}pe{))m+VqQyjpOB42#R^uAlQ#TF
z;PB#I)_~t$$A*>x%TLMW6Fn~^v|K_aa0Gm>Z))7ka7GW`K>s}IBHWT!GHcs=YeD}g
zI*X>r<ORBozR8eLv}^Ve^#WVSngAQ2HS<Px3gPiPWy2Uuxap6lLy6Nf at KF2YT<TyF
zkkg3w>r@*mxJ_P}K3<8JUj$6iYd{psZnX$-SRe-?)|jNlCO~|xzgaz~|Gav at e+`_v
z2E8Hg9_JO)RM23nG^?nuG>lYMWdc@*#cTQIP^+QRVdr4ZZnfFgO7IBbyd2%sRgPvD
zJtwkd<N(`mtc5_B1dk>#w<~&aD1aVDBQ1j;Gs_)wjV)P^9ODQdWAJ6a$PESr`c2-0
zDOG0LA_;ck)HKf&h#lx-^EiZ1%}vFzTw+gnqgvycoFoDp49;7)H|vNZ0QQ1%b at nAY
z5eAe!bB6vSuXM!!=w9+_iNoc&L1`OIOMOKcb3(x8wOSsk?wJS7<Yes{tC=b3p&A$$
zYJx&>+`WJ`Rnb9~2@@022~_(Nc-X+G^VgI`uK~4s7<?6-0wc=OAiD&Y*~U|4m5Wv3
zKwLwL3mngJy<R`zf7<v at hTdZB>7Tvxjp-o1jCap4xp)WjUV=fd#sjvp=hv<qG_&?L
z|1j5g2Vh`-YQ9f=;<jfD at LEx~{$Z}$cQm$GxD$tzWoGOEPUTkM7-1a at cjCE5;)#!e
z_rVnA%Yocjljg0H4mQYWD#7nK<KU=+-6oMzszP_d5o9vL?Rg{;YnNHU>?Vq*xNfk#
zH+<EP?*KDz{A9lh^&Pg_&ijP6dh%Q<SpE!2ayuEf&SC0>L_?A`&<1!Ob}wFt+6Y~-
zS|=0hJ4cGRZSWM6%$V%nqVsAMS2R?2u*HTz5RdgLikwvn)z)}5AZN`{wm at mkzw~Qj
z!lj*DP_Nz4ZY;ctv{nHx1D2DymNH*t!5bq<FlY(lWeFTR#pRu_d&!Ox_%cKIP(o at P
zPgY at zMUJ1t?sTv&UeWPl6gR*`gAn<B>yV*Zs>p3`HzQKOoi4h4>_qTl*c4=1E=>w#
zj_x_wq=6N2shggs1RT+Ga`I@}6->nxhb}3~$nD&Vur;ssrmiVGF(`ULn;6D>d)uyU
z3K-X3-HObS$Gr{vM*_T$U{*NIT5tqzTrOgAAbm<22m1MVgkaNDWH0TA0Ny;3NuViP
z7wRL%0S`N*k-x#qzeLX-?Ot3KE>9;gZQDr*B~r!G)DShc`B&e*rGE<%D0Aa0x%Rei
z^)GcKw=KAL<gDq?<e%`YY1i(0DA+KYIN}u^3H~+Fkel8W=$N$o-qdgBWDZRZAJV7<
zA at WYHF74NP1?T9!#ujSeu`P`L4V}@q3J`8A3TDGxgGfLp{n!fP(PQ2bH~F~&IbTJH
zY^v(gQLkSWAL at FlZ{*S;=Ohdi)Dd&i{Z!|9s$V}!Kh{4D`t?u!w0=4n^z|u!V?LYu
zsFULVv&vnh*W1zF*OUW9B$R(iBmsy(zenU?xBh#mSS?o(t?$w*A5fY~28~*9WRB&B
z&I}WaCqGUrrNU7%gnfzLV`-Y{yaZ<;+A%bMlFr>*!hU18VSLJSHa{)@`YPDV5Mz62
z;_h{Pfy_u{NGfW0+d-N8hAz*NyS0f^8QgJ82QF)j!6OCydW%Iea3g9MUCF`~w&Wr<
zo8rtDUV-0cY|GuRHN0=E5Nxd7b@)oUisx>d>d=kNgP%7KDuyp5wN8o<A_kVlDpWwu
zVGE3Qo81U@*BnkWhRk>fea+eIzTMuw`JU`dyeuqPJuuv`4aTaX)pCqYM6;_HgoGht
z;<o)?wIUP0W_Or{jgqXGiEna;aUd<IUzQUXr(>JkVI0OdR?J0TU(tVwI3ej&60m)Z
z?r%rHPD$`f3kGJ*5Pq)|w8NOU*_6JgikW2_-D!SQeZn1BI>BtiD;BM6s}gwWN;hQn
zaCh3YZlvm+n{Rf9wUe1$v2;P3Tdy2c*ehr<YH`aMv5$($_}90d2UPMa<`K2H<viF&
z#XS7$E9X(dir7PH{qaiJU8W6(`mt1`R*VDNVIPS?Iu*nCCLCqvR->Q{EHao>4Pskx
zj9-7f%^+~HLM$XS+NyEFMjUGO?crYOU}aoKj(S&6TBZ%gx(x@{UMi?9Y{2=%sudl%
z>VwwN^%Q08OYRd(&xM&b91>&P7=v<<zEV)+T4A``C|uf4g at _0n+-Zzz;h at 8~Hg_7y
z>urTXPlxi2?lhLy-73cNjqWs7g^H(hx{H#hJydL`umPq~`;~XMy~)41t^T+rm4o#$
zKT8So(-B>pD{xoB$+Z)_RHxvk>#kzG3R-i<c)U$3SHpHzI%~9~JwLXby=T>|?kB&s
z!6r3?sB=@O^4}H0M}K~Sc-?+*JBZ01t_5P;FocN^;23n5@$DRL07?Fn0+_ximijGZ
z?XRR~!I5c3Xkf#C>I^vZ!ik;f`+CADOIBCI0J<>Sp%f6;q;$#3Q~(%aJ&l*3BGU$V
zxQ*~)FM_bpGtHkC{p&0GFWIjA9<1BvWT}`;rX3e{cW-y|R>-5r5$*+=$FZk-W at 14j
zj8>^ZRjm~6!B~!Xm?9TJIV&bAaxL#NEL~jO9bpAtGwtp?q}-TYHJ)j7m%)0+O~inh
zVx=;kP&gC1o68lsLbY`n+Fc|~>EUh}kqWqG>%zGW@<Ut|x^g9hKfw%mfBN&*<~x at b
zi0<OU&OCgj1m;4S#<k0UgPGlSzsXH#2Ps^d)=8}bn?;T9f>rwCBTW~)H)vC<7&zPT
z4ijemy?;&N*H>o3BYwk1cNh!Ita2Fh{w^r=dT%MQ_$GH5$m#N><G2=g!5EU=A#X|r
zDIk_zTij(b at XX7G)5q-CHn__mr%(=Y-PsgJ)pC&*H_PJAI5F0z=OmW;xQm;tqpTNW
zg}`Hlk_v3<YYYmHO5DPfD|A&dhf!ZcWUa0k$2ZAN5afjaIrod$J0 at NfxP&()QC>6c
z{a!VzY(tFsm{sG-6tSww`NLiX;Rgo)TTAYW;~-g*I}FAHB)>{dEJGJe3?soE^tsJo
zwt`4b5mkxHQZv<xWz04t;oMj!Vv<O&juvl>OdE_7PdhWWvIS%}6&j^~eFasP;Evw|
z^YCPB;^<s@{hx1U@%B}mKDGwpuUg>rp>GPEJ~9Z6CTu?|^xnw7<m5oH*Q5*oy}0E=
z9f09-JUx%qfr?gFEM3e{d_O7D3JEtsm|R5hWlcD(#nMTYAdEXVbCw9$NHA2s9ml)D
znZx%*gSp`cB@>HUV4TXmRWdX75t^6_r<HBQIbG9uAJ4~I=1a%%O*qOmjrW;RtZBY{
z5Zi)dT-SIX4}yq at CfRev+W00M#zw8GODjOb|D3$6SRJR2mCnYs;4r169Wz%ynSQ5t
z1)W7LFve}@jD1{5XW2%a&yDGfop>TDL|WX0quiLzqzg+$<%8H39OLG6#z8z0m5$<@
zaG2ZB83%GyR634p!C^d|nIYxm%)xyXMx>`eVkXAc3CTzcsM1GzY{ocO(LdpmI$q6D
z-XtB9aNI19h-9024-j`qC+gAhaqp;y1P3Pd;pk|}qpLXCN}$3T5?Zk4A==|$i-K$j
z`DA?!B!r>~AnmtMBM`2)?2HvR<s&9mGQ~eT-H!`W5NH8nqmE?tb(y at RU(NVWYbdw^
z0?+3uk}*iC9(3J<mpT-GNsLj7E%|asK3r>MDk$XM5ig}6B6tY^1Pgn}7)Ka43b14X
z`#$!%7ZR+_eC9LmFC^vwYn*xL(hD(e3zjMgjn&>z6%}dV#f3dVU<6Z!Nk`~L6M^wB
zl=omwKk*8;8vG0~k+AN>IT%VRIjd*h9PXe7Do2sb5pbBc4KmG}Bjmxr7!@Bp<Wj-E
zT>*xVI)e*r1+>Qti%jK?ijM~LcJBlr$dBt5DiDdof at 477$gU;-NGF$wX%V!*R0N-P
zn;mzVHMfKa(h)k5R2K;d5YyA2c~nA`Y$k{Ryuj}P`NHiSMG}Cc>kteVI1*q1!RR{@
zj9pez##d2wncH7CcoZ6wnM4>RhcEUKBhbJBGFJQI7l7Wx!>z6`)_3)h{P!{ci(Go3
zAN}p5)ei#WGUG<F8T}h)a65j4zoOSfAqM_h$lFHE#wim_F!G#U#FD<2u||xJhqtao
zniYl~nVBFW#&iKP2RS}uIy~meQP24?7&>c8V)Kq=E84%S at MO9sa1nx{=fq5RINwW0
z^WT5}_=ov0>5_#FbC5EG*iVo at xKv@>+?;G0Y*WLUq)y#ZHbf^{IMW|)yi9lNwzneq
z3Y!t!>E!tP<`i-F2=;9r^#W%3ifL(|BEI&bb(s=R5Dth6b-0~JG#p}W5MJ3a=+wm3
zW=s2Qd>Zi3<cAA*$|wi!Wxcjkgcc!Acl<&3WQqVMM&{WdLoBL9`$|9xR?$L)gh<_m
zlZB-AUvo$4=kD-9O=Q&i?_C7#ftWbx=I{hz8x(cb)%9NW`q)eaj-(iG$=o|aA0W=H
zbVR#KiUJWMoHP#KiXxM~@gZ0rVv;4T6EfNoVCDeqN{U1^+D99LWuZ)0SeX>E1sV65
zhzgPHQrbarETN#Q!%NAXgj}XFIF8#OH}GkTK8dsBkW!DveEAUy0tMH)`uYPA6df)x
zhpCw7)2yQaDpRf_srSY3TI5?0LtrV}z9M=Hx0K8)!y+6)oS1jGwd5+<p-jTD5CNP!
z9l$w5Nhk~eV1EMXQ$<293;Z4-iy_j8xkH(8?jBK@?AlAj8{?!^QACfek0WFfz*PmX
ziTF@#dUY at N`QNE~F@*6W0TIija5}O<S-GUspF_4Wr4Lg9=!$HfB`c2stk-Kv3*bCH
z6}f`KCVWZKa9v0`KYK&NnLtsn at z&&K5w!;FTX2<$KVuRLqlJNmQ1Qk;i0{WQuAsWG
zp_U~|QAp;HDHv=BXu+ih^N0!xnMkfXBqHM<A&;(v5XuW_%wfpi^bddyE~US_skxrC
z1M`9YL8~Dt#5P7-HZP3aJ21Nsd?<U?&b}hq$7i3Uao#=Z9iv#Y223(hrKpTVwE`@1
z1e>}P at yJIPP+6>Lu^UvJXPI<a2%}hETwE-i45tgD at ku=$9Zyhgy<4{^;#t6-HT+`%
z2dA9w5V{|Ia;vbiMXKNYgyYCQ#Qh*<xA~XEOuc at 1u)5pW-Z~68 at 2aDWX#QFkM%8qV
zq$<RMRpt?+jHk at -ih~LWSgBg7yK@~u&r;movWmKL2|d&xqkz=K7J?>|bjpg~4b*8_
zQz%KXUM4LAQi{nAVhkbE9;P^#X>FHd7OchDP2`i1rK~pC87P_&)JztMU!_C^Sq8H4
zaP*MmLe0|QgwR22ijiCJ7T8rC^B#9d$a#_dC3>=4%RYfpnrQ<CHS+|@YUat4+>`He
zPrlDR`62gYX)*t3DgP)B_EH}1r99wE4stkLB9TQpzl0(Vw*TOn8#8$31`VFMc?Zwj
z%+E%>@8_Y;E3R-VbEBWMmsgfte^B7&mt0T$%b|*Yxc)xPgEu(U*Y?|;9?k!DZvQ%i
z7kcyYlf|X^r60a`Um^kA{F7xj(Z-vtSBK5NZ#8Q7n0w=^9H7>rS&jz1-&H&Q23(1y
zm<*L4g6Lg>0hfb-;scr!Go5QK0&F;LlWtm<f23R|;zyyKOcr1RF>0vKTM*>_?lbwR
z=DL!^l6qoQC0$%6n8?s419oy=<Vp$#D=G#X?K3ZBcMRR!C3wt%5boUAs2TLIDG5>|
z)xO{@_HN{HVe+aH5$5otnKE at k4$?KIr|I4e)~JsHXbaz816~$;C<J#$UfdG13XOJA
z3T*s32P-{OL3Bt>jZ- at kk7|e?^TA3QC7VCV)c977&}v8s{XA{)JEYzJcKLxE3lK<8
zQjn`;C^Oo*ikZ1 at mll>EYcqYXEF-I8$G1v{rVrpK=KApqOze at rgLWgEX^}K?a|%he
zc+6b3B0HwOz?k2;Yj2!-m_S(vq at arsORZ#kZ};`#=06ULb2Vi)4JsY5hYjh}4jb>B
zk|wz&7W1#scxB at s^?OHWRQ8m+cu-Y7>*CF~N1qI at vPxhKq6KOdx@|*}14Q5zy#{C*
zg`9INB0u6Q%$k*fBwj8m1$MX`ndDzyhg5DoevV|q at g3O&X|8nRChL=N|8J|~F$k5~
z5m(0+ST&g%Wa%WVVtB&bDIxjBE5p9Ds~zbnT9^FG9Kj$*l+vgqu|Vz{(BdhHrA_dt
zy}|NM3{lZ!-C^VrMCFE~V#1EsN|H~B78gMkJ_bBtSt+rma^7`QYC~+PJbU&j;Zjs&
zra4?;BU0uFnaL at QB#&aOhPsUWuee*#W?7aK<8KGHh2u+8ZDT?S6~S8cI)}q at s5J>?
zCD=&b1I^*ikRRmo|Hq)4_kcaKD`5+3A^(ocGo<z3#m0Av?DW6$pwa(qar)UmJMLdy
zW7=33Ob)*Yv)NaGtmZop&Pe3|Dp^8X!4A^$(cDT#tU-z)PYKKyChw7`I&*#mKc#1y
z8uNv;FljQOFN1_w8wx&9J(eUgFF2;2w=7Czi}a~d at hqF!tnr30bKVC~6)1^b11&3F
z?ua+*ym}9z{)pa}B_Dgplh+b1PgdG!`~=~irl at 6hrj~=<y~E9?d?9AU1OcF^;*34M
zwQ2UqIK7_%JTl$B5x=HaSn%9^MfMe!5n~7I$KAnVgK!i?%@k9F7uoRC*Nb4(bfeY;
zli8zTyj>gUY)v at Rx{D46<kmP;^coPwD&{o+5<J`d&zIK)j0*?eb6E;nzCji?_?w^#
zI*!_OB$K?tC^Y~|yG;I(Acagn#nQ6YBwV54m;MnHnq_Y>#T`h0>-;j>ebICD7Zn(6
z;N}9xEV(+yA)kpP<x<P0yQGmsG<2i+jZ}R!8b+w at 35!Nf=PAN0Pm;gG5Y~`t at 7yh2
zt)TD#>Ahhv#CU3X#DEu4%z%kCDGIFS5+wA^&}vK~1b1urE}vOGevu=KcfAfIAEe8F
zN)2JvS2H8U$d!gVkbE3rIR6qOJ`RQ58zi<wisD<2s9%>2Y2RYZm8C#e&MYm9jY_TS
zjWtuKMpw^NGhWz23Q8OeaUmsFDX8Yu=Y=1a_3w at OF;1p13Px#+qwkYBL<-}^g^3BJ
zJb*+FXDK#bKEc}?SeZ~{FH;L6`wElG2s7o(*uA7D#EY<cq@^E$%)miowkDJp3Ways
zXByJe&t~GEkCB)p3unX<1r}X<aP`AhoZGtKEr5-^`I2{xX;52zG5Q}Syj+Gy0B%%<
zFxdjr;9Vx+>=_dDW>v!i at -&!)nwKY)@EyQge(VL!Td00JNTNJXhK~Y?hJ9m;t9Zpf
zhJOpIl!IPouf)r$Oq*RsaD<NmLd>WIL9O%i at rWWAb#^3aW%5jjQLBx~@$>}zs{08H
z(KMipRt`={krgO0l7N^^e!9+lm=S21H$+h6`<(o<JI1{WYD&ws3X*P)SQ5;@00!5g
zy8vO~^?mvy3_oHArMEx^RTUup%x}x#GOqz#u*u)*Hcd9 at V^RNm1Eq$}TT(uoB!ry-
zT^@kG`=zn<?w8lXWXYaK$J`9Gyx<aD-8jg9N8^R$04ClZt~0@^p)@?HzebsCln90o
z20W!j9FMbTj+ftzHIJU7$wbd{1R!aFbtNey=z+{JxuX%aKOI9Ylcd2JbjCyPYRh~Q
z-}r?e{9e62|0RFWA1wE at 56;7!jcQ8Zhl8^-pztY4>e2k-<N3u$Y=s}Oou|Aup&JsZ
z2hL at 3SE7cM^k|H0b1WClm|U-ylM!4|TtD9@<5qi`K26 at ixY)(=V7X!P86%Vp9tv1o
zpwFd(<eI^r_*E>T${Ud at 8vfkQ=BeWu$n}*w&OxtMAt8rflpPaqB<v$KXXI4th#ent
zm_vRMkyrQ_3tW52;<n8<dyT`FNj-V_v!=+B-)*5!`9t!Cy-YqQFHxmq=a<!uovq!M
zflhk`=$=q-0R2W$T1c6Ie{=0Q+!k`Z;-z|aZLBx)dG7>j`@9O~+kpvpgHtlB7|P=N
zOGTibar2~M4rJoV9}!0>U_3nNCgp{p?oiw>4gn9mIbhR)Jp!yMa5034NK^V`gtaCf
zWJPz(v!sS4?-4WQC8Fn^W0?&luqjyJki4m*<wUACiBlc{;{(?A!|u8XKs&f>q`y at G
zOxah(V4ZgRV0==g1ITeTJ+O&4a36aE)Zpa8$gMZ%Z)*^{Hf3LVNWKb(lUo|9XTS?R
z1pUp7Ds}Rn1_Wu4p#CXk7eqh;86cObl(lqTC6lgc^IF2{6fk$SaBC`sW6(4HS3=#q
zFWN^BF=_j!+<XgqpA??S&DE`_{umpE3$x#a=NiC;j*pW=xs&1`;^$*wl8NAShR><B
zf%pkGXQvPKG&g6hH`uH41UGQ;d}6|v!FCj5`8l~4eq}A`D^~4jG6V6VlMZ9x>F)!T
zi2f{oDexyQJbL1DWtT*Hf#(Y<lfV)N|A$szJ+$xwPxVQ1K4{HL%gn at L`9vf-ZiANA
zVj=Lk7hEpeaUgC~UxT4iY8!~T6BqMT4qyg2g~o~M(<ktjwgp!+kQAVJzdN at 4ISWki
z3gFlS*4NlUGP2cU3=V8fTf9sD3O^#_pflE8FL8OqzLT&ly+k!8`Rk;#v1$^&B`gdD
z-L?$J#F3Y!LDcvnUC*I!Zic_IMlqZ(a3tv)P1-;$=RHwBDi4jh))9#pyd^y}Hn%s|
z4>7}62YWl5=DRnW2b)Qet0s at Q0PO$wxbq5;kdV6mh3NAQh(Ye8uR*^FGl|R6C%8Z(
zJF&$D$TYzXdBaa?)mx0f9>L2LD876b^^vPICyp(~^As&*u!v~<L(EiK&jkfWX!26i
z9oX~{eE;aB>~fovPKxjQe6R0o?4x8z`w~OPC-=>N>~F7b?NZw?<m*ZEnxlS#m`9qh
zFswC#%D&Hy{SKuZ>?C<oga(fxuQzG~+TCi3FG|M^TI5FlnF54%3WMU%F%__z*CP~`
zV(r=s7-h5EBIeZLd~M&QfcXZ1%W`ca9S^#2(t;B)>CKi~phkFYyqFG32Y2s1PQJ>9
zd)IAan at I_`>3M(D>eN%{N%fwI)P;%S2=)qPfnFWkFwapZ3nEiLgsc>cA8-PDyD4<k
z{nS00(j^lobRP{OGT;@3?WYzJV54x^0 at 4U@^x8tQ?G-gWtwWoVcQ8LHH1K|$o->kI
z`k`U%uTupCGoerdks`o}uCr_r5^AJEyp?V-muMA&r@(#W)$PW|ftt00e0Yl}KcZkt
z5*19C@|3$(ky|ulBD#3KeDlR;+d!w;xw>b!m??9Yk61!pmtAIf2x~77k+hSL9<ana
zjbxL#`su!pC4-+MjCPU7sMut|P4)Uh$ft7I4l!_cBJP=;h*g4idg;+ZC`ddJZ>7oW
zjRbKP%ka!LPVPU!IaW0AOE`@UM|FCCAe=y)Z~-;#b$Akl1CqGZMviH>P(6- at Q{3jH
zJuD&T&!VKyl1B`GddTA%m3cHJ;}F#+Z5^Wm3XJMJ22V!p4-UAJMzc%!a8-3BA-~>O
zc3zwjEypj28<~l>N^i at N7IJe8a~f7mEW?;3A>Z0pvnD(Th72VL_faTC5A|DI#eD*w
zh{n&p0t8;7eieQO4xhk-7`u)uX|;zk&>R1ml}q?L0 at CpN{V_VboJZsw6X_vZQsUgq
zK at Yp!2;*dqe$KetfnyG9a}RTui4g;m;gP#wFv;BlXJ2vc*mrP-Ssl>A&f_Aie7Mfg
zql;9bPv(xnO;G}f`qD=V(X3pI4di~btzn!jCG&=0gnBXpA2153MPVRr<OF5F;0?K6
zc+4mN?hYO%=b!NZlRvWHl%NIBaD<4aB8c=Yq3RC4no^28JGs_l)R0+nt7ke5MEHE~
z2&Z;7h26+pDz)e;Z!}X<;W2E at Bba4R#JzqMS}Q4*Rf#0il&+Y$8)|`oF0sfdPDn&C
zTVcP7C(ikFj1U}CV15TF*+K8<$iee4Ss$HW>J2YU*~`gW&@L}Wts<WsA|`4Gr__^6
zVci5pS}>wWgjOfZg~Lsc!Q5Dx<q2OD?WG+!Q3(Hw0QNjM!)kIGTrlqY8VoHJ!<+Yj
zBBQ^VB}FbY>Xv$!K%<SQ50FtN$^yJvB)v7d=v|LpmMe%j#Df4LonHm5X+)9^_PQ<O
zEOcPu%pfYWhvMPS3+q5fi}=3g8`<H%3Xk4^|3#mU9ci++yZy_3?u$dUnQ>paEdoxV
z7CxFcdBEe_jWyh_F|CtCMjemg>1Ct8I}5nV87_>c^-lYwp21E?yyzoZ2Kl>^R5 at xo
znIfvrsS26?V=|Q<-y;$<cY%_5lP68c(asbl)**_aPm`hA0|w5wR~@}f at A@rvMimGJ
zjq=bOp7NZ-&~A+0htq6=nrXDn!$t<zL9jz}2<IXqz)<fIkeZa*43=x+zNcD<09?~N
zcljg&%bd&evvA$y*9~MVn3CBB?J$?c1zx~^6&lu1qQF4m^-4I=qR at +`IiPJeF|}(S
zqKNYDFI&5Z_=S$lG=Q<rvIuF70)i at yNH*w+uxrcB0^-@^q8^&r=$uioy-AfSrbCOs
zjSv+*cZANkl9~Zd<3DN!Li-oMG`|v1^DAmfZ*OB7=FgqYjjgx1&9i^|-`2KX`#)Z7
z at 2%P<8+&ipwrzJCo9kQXF&Kxnrp=$O>~!$A`Sq90)dTY at eVtu{-CtN>Irx*vHh%_h
z6ztrCpfNqpgZI_}-E_6N`*z3t+SqjcBNk1<b!uySd)pcvV>HOs3H(i<|En=^7ik`!
z$_AO)+fCl?3mvS#Jvi9hJ#4y3&%hJce8n>ZB5QfDyu=Y#3u}_Ns2C_QYQ*@$GOYBx
zt7_wH27SC9J8cGWFZ|jXt3vMRAkEWJ_Ek(ucIsQZs|UZBKi=*(wqEaUZe;#U{<(Ru
z_i76zh%|x-*C%sobfh`xRi>i!gXG^510|^BojzENJ+Zl%OBiY8mHDS|YPMrJrATXt
z3H<2L!P{tJY{44kTU$B{`P<W+{Mp!hySuUZkD$T!`f9_Fv9x%b`FnToUC?@ewb6Ko
z67RvIz3q)=!Q-6`8wN(O8gEvYf^Rl=*AIT#H$<p#?(OU!Y&IG}qqn>3`G*Ll3<uv{
zZ5%eYc5$7Lf5I2*m}uDl>d&u(t{Zk!=-6)$Jm0WS{O*<~Zx7d-nMQn6(8_I#U_4sz
z@%b;|^yJyw-K~FQ`q<w**xK7 at u5N_WF%LJkUcCysJ>1K7%KrSu44S?Lih at 7iZEpSt
z;0d0r at 9nNz&L=Z|6OqZ=UH&apNHa5A1Z4hB!mEvk*hD<X>`lu6mnL8bkicqxcn#;l
zb6kS+2WNHpr*IP-K&T+z01jG|Q*M*X2jO-oY?t2{R)8eWUnI3xpsi+RYgn1$8-R7L
zMOYKA>)&TO5c2SEGt}b5k#CXf-^-|qMwC?*uZ=XTXrUsmqJfcnRV|D#tZD*DER^lr
zWH914N at bH^vY8G<w3dD=tK;8h7K^JbQnRu}^@3M_A4u-fF|<wfC{DhY_Tof-X$#Q;
z<ZZCysSoJ0vTeP?3zas*xH~3s$_aO`IbPzlZv@~Cc5@)S%vVKwIcSyJ$>HuL_-d)s
z&V-%hrJy{n#T1~=a`I3gXN00Y%t%Ikn3sI|yjUvgyGS(ZqgX!bvz(CB$9bWs&x^#R
zz9|!u=DSET*fC;Zpid)-U_SO at fe#)$RMEiSmB~7$ShP%$ZozMo8kEa;m%GQYnAFDw
zay5977q0rUNWw;MVlk_)a<Wz*mkC_+Hm5cC=SB0eDn;XPb!XpiRsG1yY)9&OY#WJk
z=WTH}3XOF%1^x;eEKytZ+l(%!4<m(6A5p9G$dTU)bQR++;Fy=%g^Spn_Eo8*n9c%z
zWj+eITE5YhOsy6yer6-(Uj?fky_8cr5-Y<Gae at m>W%k^24mJ1wNZ@^p+~dgUAqEH@
zwloPK(!#O!`Dje9lCm?{?sTwcn?)!2_(e3`+H;*-?S=i<K6qvxJhKn(+h4Y~{=*)%
z5z>~(pK>BIr`8*Q%oyTgm@{u;paTf_Yx38Hg at wNwcpXT3rnW#k=npnu!!IIeY#!Wl
z2AhaTES^E;O+14DtXmF at o2ue*;}`L;Tf4!;@y9L4-bGwa@!**^nb8}Gl)2ND*}`8S
zA9-?1INlC%m0S!+_Ej+?<jqTYaOAPT^wW!bfBEz0|5XflXN~#gg{7s1m3ai_!|Hm<
zgjL2=ra_`jq||C5qZcxnT5H)gk;Z7ICyyTeh5zCw`|qR0?-u{EwD{fflgCR-OOIFn
zvbenb-QttKB#YPV|4z+t!H*=0$zR5!(WI)QtKL_A`+xDfXFoCNWc^#jjt!pDA%uP!
zFu}u>6=@TnKT0Mk{*&^*Pw7mo0#M|$aluGtw>nQvAaMbWAmVrF(K6$PzMEfMnO|PS
zgQqLYPnTBynH*grDM52GNM_NYyD5<0Y5DA>fM;&Dd9eAPZ#Nr<?`yAN!Cu{N)IK~&
zK7WSkS6{<ky4eU{TDxec*PWX&-y}FyjxTUefQwCJgB_etW}vJ65hx+Uj=G<;yKumk
zs~qDvN&f<kQp3&75Z6u!2xBOoCYVP42f2+xyj1UeBCtcnfeNMptGMf7I5k{Gkfw>5
zr|EYvg)2!10n>>6$BhyEB<L7nJe%O1bx+K`2JrVazHGwDi!K<r{_Ic2H9Nyu*NB5O
zWsoK_SfDM$0W#m>S6sH>r?9EqY>R70O at 9SS)W2RW%Y`2W{o9YOGk}5R55}LNeiYWj
z;CpHcZSh{rr%gyS0IiM93A_E)Cdgq at gR#G_SyyrSb}`iSwG2MPjWi7YxJY}z?muC{
zI^84O3u&4x9SnWIy<-HYlpfO(FyY8U1WiafgTWN;?GqRqm~BUrd%#75+XCJI2$^{H
z6T377|9oa?VQ~gptfmWnK2u8;LiB1jIbanYQZqljsQoCk4Ke%d{>I+=;V=7}xSB<G
z`?&4dT2E%?>-Bdl>-GA^;YRWgMp7o|KRIMgxE^!hw)*w@<}Ol8<7XzwJb1Api3bl4
z>Yv!(5<4)z&Pzo(^Yub!(wV{NGAQOTOrIBYv-HCcKj_yp#NSiq^L#!d>_L&>X~Es~
zO6FRV2KK#w&rfR~KD=N4 at MH4Riy27``h~i}HYn-I?-Ci5^F?lh7lO5C^os`3^`Fl$
zYH23H?d$RLnT7f>ioW5&0{$~2H<M^EfWK<})4VpU=Q;r4jVEy4lu*fA^du2|FO=<a
zMY-4SORUS>EL~-_FwFzI!`Vb=kgI3HHQ`@9PNUYk#iOn3KCF2WZ&<+}_kMcutge74
zekj_-Utpf`w;!L+tdFEzs6=JYFz$oJL!ZwO$#p{VqvX*9|9xIaAp&6+Tu2F^0E<*3
z($j8tV(~6rBcX>yY0z&+je&Eu{hd`@{T#k&!Z@;qYov{>1F*uMl7i>SQ#y)({4o2$
zWvhd{5DVy?x$S-my5^TBT_j$Iqmh(T8V#G%F|x_>({FHy{qeW7dCYX8;Y5w(5x2J{
zgRTh#?%Tm$Y8=?GMcc&?dH0ZhIP77z*}&z~*52-WnH12Cz?#~J`4<Q=-{A>bA(%=2
zM^VQK5o<FD<?HlX&u3(c0 at VM-D$Spu-2elgIb`*J^>yclxj}b at O{w&k>;Ee&OOKz#
z`v20C#pTC;>i>nv{K5}a5ZzS&hZiN>H&x{oR|_Q;lf4B#8NcCJC4L+yP<C-;0+-wl
zbvKhNTztl$E8~C3%jg{8sSf9al^?!02ZzV=OOKPKrKd|zo-Qqx9UPL^bW(>F>GBTX
zKm&~%njxG*>BlWPJHRuL)71!Wj(#qpzBA1*LK>Q*A>7Rng5eLs%tb<NL35-+n$AKx
zpdu=Kzo>27>#20%H;sX<^Bzl*o~hD*&+AA~Mi|#YuWILmSx;7hRU{=6>}iY$4+s*V
zq`_323zEo4YymPfbx#)PPMuiv(~+J&*O!bFtD7_jfbM}DDXf~o8fVhVX&F?>F$a2{
z$_qU)Xs;;dgu}`6WY&FV4ixq^OUGdL@}WI!!2O1GRqz;J;h}UWioXU3 at i35xT;=gc
z1I8p%n1)bdmK~fw;eLOF!xqAa at Iyrjl@3mt==kV#u2%oAx%Goh-1>fA-9Fqr_`Gqj
zxBuYR^lx)Nqd at OxNv!Z0S39dz6h1fB-)!!z@^!t3LLh!F4h0;daCrbk*XUO|4gWFc
zhsmkl6)JK>m6R!B=#LvBz%rlvFc?L*)-^I%l?DdsuBQsbvwa!zIkhROh2kt716Brl
z5!4!NggrzeVS|W9LU8%}mw{B^C<3zAX~MDeY=A_!S?t>95qNYFxspa{45%ktk`}Df
z>kMm?gb9C`73rMG*CnGo!p~8s2yW%{HbyvCzfZQp_#PZh5ERzGe26{Dj!blx7UV!m
zTcq9;>j70k<TXc88XjkvvP|8+QzXC#Khg>k at Nk{L0i858+uTPQ5gz^ZO7lVT%{R$x
z^Yv!<%pMoYd6ydT0^TJA&tr5`vPm>eD!Av#;lbNYT|a8aY_X$>CFWAm|BgXMld;Bw
zNs3LB*m>W2xlm_<1z%i?$AtfL-1^s2bLq)T)YNSa&pxmQ&-;4oL+t^KF9g8A8?)JC
znBuzQ090L>^;2ZBu`yJBMeY$w;PmKBQsm1j%_*vC0gK|$%9Uhrt`IWUAaxR!S<(|=
zoz+X%oU&+k&=2m-I(8-)LG0dGk|E5Q7rgZ&>1cGI69f0kS3?1_MPJAu@%=jT=fFPY
zlY5+uAh2*8Q91}FBZeShmEIJD&v<kpnbWt?jKK2_?Gt4Oo!L$s>`=NgOEN2?=6Z?v
z+-w#WhV{`qw-B68`v%Ztp@=@N213F!0^?YK5q))CFtRY at zIJdJ4@~Y;bA~7O#5{RF
z6jm?)3$<eyPWrji{*2{$FxPzFn*aU7w-3Jkl`8h^OA$-*vE9quAM6;L4cT(%%p!63
z+b5m2<9=++pJ?@*0Ob&XS(_w at 7g*Qn2`f<DkwJp(-GN}x2APu`Um*EI{(GYt&Z-6m
z8oxe0Upd)pb!tc=XJWbfWBaAdcGl7)rXYB7YogeL$xybd={EN^(tuw67dN`nk)a~$
zHcEjoNQnJHw)S(f05Au!S#}*M(MAIBz+Q#J6c7W^ys@^`)Fe&KPJ0dvLqB;5g+ea-
zQ5<#9gKlwje1bTAL^dD7ej$PZhWZ~P%~P7}!1z19v<)n^zw8Zr7-lk88_0X at mGde1
zNMN3Io(4dsv6;wd#ykVr4B^IzJ}FP^w#uwz+MNyrcznu%A?PtM%9R_f8)hK(DA<V%
z;+b!e3{Qm<AkQiL>;ai8n~WcVmhe1zh06<wRuTa;T>m%tey2G=a^&7QV%m at -6>V^T
zfLpleGgPnQFp`3glW2-I2c<%vP+Q_ at WXh6^XLv~6G^eck2e?y68HW=>b~0k8_|}1H
zBGql>Wiu8|3wngW->NUn8k--iXts__&<&zxKrN<8 at Z4%^%_EV00VouRYevUQ8XDOC
zR24FN#A!htkVq%n3)!WSxt)maiuA>D;cUAL#4~rNRuO|j#*DZi5ZlaBFxwnK1}2M7
z>E&Wy1HXDClLP<~S_i3)+Bv{sw7;ED)$<m&o_x4wumF><2y597_F?S<c1SQiXgR$O
zc8%QwF{rp9>RZ)|;PQtI*tE7FH|+shbWM9~%)bq1uAM;uS=B&iAwtk3)tRe(uK)V&
z+`_jHeti%3=&e;myZrh={{FW9xi?7PQc0Wr_tGC$V*xF$b~;jnwTtQJA>bX$?7x@)
zAfE^ZHayqDge_`+<-b at Q*#8;8rP<zZb`G^Y5pSW0zted%guM`}?xHU+9Qc!|g()-9
zHa69n7yCk-OV=aLARf(jj(<ZOV;A3!L^F#s8}bsvc7h?1_A at _;<!ep?6(nHxi5CBB
zOo4dNIs$fEUTd%35D`vn2*V{6%efOrPh4S2AmS-GBA82h);njQ<PpwoG$7F?=IuHb
zxdCGT at Q!(Qk1^i4#rtVFnryHLt=Nc^mx1^-dG>{5a$wM7D0&^W%K5UDHmQGp at DjLW
z$)UO!@uM<DMQa02fqF#Nv2m0}MhPn#+FcyZaA*=a#mO>}1S&U}_o&g>Md31hbAr?p
zdbREt+Svd%n0OztxuUIjV_7lVHU&29sXd}WS%F$d4oq~!B400PKodg^_xNa#;rSXj
z4c=eyl^{ucF9U at yoK(?Af(H3$wr#N at eS=2jUr<{^qxZ4yhMzkmYj{m4NYICA<QAQi
zb{sr4+=KC*SL~T!mvE(-ht5j^T2PYNvo5qIU<p>%Eb}B#e9jZIpIWvRVY|sD#()7>
z{8|q){x`#k*(u@^gDD!quzIb1Lpg4xFpvj1-Q at D8l-9BU4t0U5WOj-5sg?W)Zc$R%
zxUg|B2 at gYzxu3-b55p{N+b~qol6BF8%7R5 at GwjO*8Y_dERSUm28*1ZNG=xYE=0sOl
zl{wVa2`lJiIoVm`vKZU9 at C9=?4m)#%ksV?gmjX+R%a6=I)UeU(7R<y{uE2)07sPVn
z*g?oyW`f4lr9}*UbUI~KY+3hkIKV!?WY;}A<kDh(OtHwc`bP*ahEYZg_%@ZAj4VUo
z$TUH+h>PxcE}gdV*Id-~Lyq}CtTh8~8p(h)ha<{^;;)e#hd^iXAtw^f at cP4_-FbMd
z!!5==x%0Tivo|(}2-{d<!DaMNkBX#yJyD`j^d9M%zyFat=<jl6C7O8(`yTJIn9XV+
z=|P~b_pycCzOZIUa3q-4VU>U;2w4l?Es_oL-*sT$=YfoQx0D*K)XACoBk3cIKFGBt
zyTo$fw1uoMEU7k|>x3H)y8)0eO%c;Sv=Z8lm3QQutMUe$vomGp+BnW*ga at ZXuQKv9
z at +KskGKc;UUTEZb=t9~ttRU!A&1Jo`sV4Jor^%t_tft04fCjtb!H44G#&klo$5}lE
z3_%WA0xpyxZU2*Ugz)40I3df&G^yQJ?aDF;ETV7~b8|U at uU=EK5A-zcvT#o2K;mMi
zQP#6jyXT4Lli>@gKTk<Pt|oev<iZ(Z#nfV^4rt*g56R}FN;6&AM4#jIEL|8Kh+n7%
zw7|TOOeaQfPNp|RQB}#KmFPKJdVv4aWN at y2WdKF*FJPHbc|-PMNj3z<6C|fFiyoTb
zUHF*0kEF5HXujLp-Pn8Api|7kufL+nufK|4j0{+J^EWuK_HxL-rg&)5D53S7!F5p@
z8mt`&K2{_%#3PwAza)Us7Xd5+BpcbEkd~TEbPp~NfW9E9CAe2(s`F<jcEk~h{|Y+w
z$55^hN6LZ1o<eX4N<fzUCLUHkknTd`PW3k>>Ijzkjpt3|7LISpD8U1>(V29OG10DJ
z5rT*qS}bj65O~IdWcQQw4%Wo{<eV at B*DD|h#W4CEBz;)x9)LmnY0p;QOG$6mh^9&q
zALWd*&SDe57DB|2M5(Arrd`zG0tc_RfA5_y*N})R^P{t*k#p^zz4MJJBAh;ub-c6$
z4C5ix*>tYf{+&Ap_e>efxb4ucoskn at 6#7MkTbM#{m*H_ at KhDk4zTm$QZ5GGTW!=zK
zMGuy8L)Mm;k>TPM3 at JTdy(AGJ`Q-^;d-}9bgVU&elwX<?EKTLgyuM;(PHwz1`o*6s
z6K#k5%G`ZnP|1LrcKNQ6?4_L|zntk1!)L6umWb at XxjjcI&;aA at ci-}JW;3>J!++!N
z=3kIek#$8BQSz;D48z-Xug|}b`ah6v;E;=D{DI>KJDJ>acf>){S9GM>8iLA;p_MOh
zwo~Pk>fOpFUir^r1YTF0ywI4#e4ta^WLEN>Ooy|hF&F;_1u}y(JHk$Sf<gXgW?sU|
z1$zcu>nN3np4kOUA<y$db_!Ab&iW_V`Z{{Rhnjyp9rJW at 4T6QR<uwp{41fM#6C$GL
z=S6x<Xu#FWV at mF5Z<op80)b^L9tGok6|sB`Ey=EVY&*`8LuM{Yk@{cqFmpH($D at e2
z|ECnaz!Z@=xCyw%kQQu9Iby~qPwv)8L(6eo?%IRyQ5S~eyX&UrfC^84c!8*!>M?j8
ze8B9jC_o=#H0W<QgNf)6W56n}v5`Vhl4}DT)DdQQjVy*<al`LS9?G&pAvM#t7qX*c
zIZwN}YS$X2)HE;2xa|#YD3$E9_*OSixr3G9;cw>`xCbIZ)?xGK%>%|aFp>15MO6K~
z0yvpY24VtLn@*0ucQzyrL3aePanGS*1%j(rcQzZzuQiby*$yC3 at Wx0C<*3#gN+D at 3
zX5r{1H!0L=V1<=L)OhC0pqOrD3dQ&59wW2at8QbY74t*`<{5P|Gq*HqmI(HjSv%g~
zxCNWFm0Fr|vBTpNUMo{ak}C*Kc;xZQ=S3`hi7nj&5TLst_jTGvP1|P)AazEupR`W|
zuLMs6NvlsI7X?bF4fP;U(=slcPB8i2N4PF#Y|AV)3tBan+xw3HDA at Cuk%vX+rOd~A
ztr8nz;*ss0Gu5bPAZ>BnQm}d87}kP?TgH)3_}m at OLYHpEPhF@79nfhRL?ix64*z7L
zB at 8sfGuB%}oMyM-*}WycfcyO^f=N>^f3INKIk8L}Yn&+%)Hk*)kG^y19}XsPPvx=N
zay+=Z`Z3MrRqSI~F>kv7YEfH9uGt~#NHJ#C=e1Y<Bv|!E32s-nRn-dx9+JeoYon`(
zSsl<J#Ie3ME-tb2tn01TJ;Sa;84+X3k9L*iPzCIONtagF;SZjWIVkhc2^BOpF<7vJ
z^l|i{PY0Y=z=Qc~^4#*2qL+ at bm@7&$6T}hF0~kauM{q%rwV(wa8tT8B at gd=HVA)P9
zLsa&PNNdL%Ni=IN=$#jiTYKztov<TWy;SFZmHlKKOzAw`9SgtX^(ZX59TT>ZyFd<@
z{7ohlUbk4Q1kW-JU<)$L&MPzy=We+iPK;MBBFt at 9wfF7u2X5TZ(qTJQUs{+p@^O>y
zf|K`E!Li19T;<KdA~J)`#pN;q4;DaS5*|32=k$o;-0Y{&jV#kRoPaWphJMQGz?ZL#
zCm75$ddm$1IRzlHm>Ld^>wC3+!&pl5H$<56J^Lv+Wb`>6&|+^K%45GYJAn+<9jf!%
zzWA=`6a)*_2 at MB52H{)Rp-4n2iARr!v042#=BpNE3&5xz{y-sSaPU&rUxZ&bh|{3a
zOjVwVMHn^Q`j at y9!GTES`9q0Fvbzy+Bn<NrH%KY9#S0opcQIk$KF5~OVTb_BDf)h3
zhG#A53NLQ(-L%^@00j024gmu^gL$yCaIY%IYnAmzzz;6re&<6&{LQw$NLCyETAK}n
z<0l!};1aG;8^~_}KF~!rYo5Qw6- at rbJN|*>Od_}F7OuaI#v#SXdaBEX?LUwe=)}0~
zMp8+<-(UlmLXTKedYkIf1mB7{)i;0KgE*ehy7FhDnJ*l>_a(Z6W6sXyD#N3*@t+5q
z+ncM6&3UHBGw*IWV0HW_-mW~(#(yp^|C#^gme{`8XALO48{MNM`94`%e){OUr%R}b
zakwsFmw)Dkx*0D2H?}U{|9ThQw2?iMI^lLRtls}COWz?kRGj|_EMe)-`0v|c`(|I=
zF8(_ow_QXnaL9V}#HN0FGQW%n?nh4-k^SlMKjC;i_#saFgoCch2!z{OgjtIN#!UmV
z?^TCn2P%q>>NcS3s6o`B$#sR&CZis5L)CEeVzLsmsM9ADP^Q+!bd_~E>lyQ+Pgj*9
zQ%tjc89Kh2N3_aoNOF_*E4r_Q$AekljLM#M`w3HF`M#Z9#Aue8 at kiqhyhuNwC=ZS`
zP_3=IT98&t`m*ihXw&JYNA4uA(8znjE$<2ec1>FNTEK#1D=aZ6g at vEzT4g$%gn0|-
z;3~2R;}Zj45CF^O{3-YZZ+&y|_ChSIOAsb+;V@~JZeu(`_Gn|a!flF)Qq(o0mQE)h
z<Ksi~(bgscGvGbc!|%v91-q8!`buH9!}%T)L~Ul&s_>Oa#45|4c>G{dD%JTxzI?#(
zVYGqM!-J<nBe^x|poNL9!m$nrX?_an#ZN8QP;v)o2mnrh)aC72tn#BMb(%w*7*v})
z195a1m_RJJ1xexCgM6zzJMyrnZpdPgev3z(9c|>|$Lzhk3CewIg!Zs#2$@cjOUP4p
zzEuoJaO%k%Pj^Rl<g@`V|0B5hmz}fK)I!oNVp757*eo2G;8H4)SVHMsn at +oyXwRfb
z+Ei?mZBcKPv9{*y#eRsR94%xpWY1)5&!5 at gJ-`ddK6ruM;i2_6i-nAj`-09}m~$HN
zJsr)Z3{dpp{1{*-I#&jxXJ$AnBeW+lrU70spI>0I2-Z|)Weot&BRh^;T at o2i<`1#`
zP}UE|YqQ#67*oVNE%*V!g!Ywu$Kj2#z4 at X&<=by5=3wH62i>LSs$*cCGLJ%p8j6rs
z0YZ!W0y^jA5Y51QSUE(Fm~?Ze%P)9 at p80hs?s*H?i!P)BmqILHwF9rdeK3|Sm at Ioo
zOol8!aJhTd8=wqTABG#7?kpW2nJjgvArHgEpu0t$L`!!H0$(^Ep3K17(V3hgx80K&
zpVWGxhQy9^fR*Pk;p3MX<fO7KB!HA76GF at Dd6zI5J3Kc;0N`RFeE1-oUF}&tm at s4E
z74^8aP_%a}--gF!syP<LcA at wVuRUgcQ*~73ZP5ur58d-7ZEABv{0BsAKt at eU{o6=Y
zA0ZLQJ~W4Tfm<;0ffzdXqrq^@qLZL<3hZq_*|Z3lf1#9%Zz4J^_*kP!?ertcBc(V^
zBll@=@gs(EEQUpy1yz%C+sA+up1)&c$H_OPFry15&Em*q0rf#>OJy8vS_n9T6F&2^
zNIAgX5gV%goat%IWf|g+C`BJFAeo_j&lMwb%C87R)&P$*mSJhi`0r~Qo3B>iZXY(+
z_qMlJ4{@)kdXq0oYRKPieq{EifxJnVP7P}T^{rbl{rcMWqSY{gCoci4Kc6NrC(NKA
z_wfdFqp{|gwqMJ?HoFA>Krl)T1M;G_U at XmVfyf?dX!>tRdH^@d9Fpy`f&DSdsQf8|
z9HU7}${Qp{#oA_y9~9sM3DXa`$f+MDI{~EqZbNm98Za at 31$<H8SOSX|EQG0f0B7K9
z!gVmZ_{tzLCs1>HbNBV(n`^?vog86-*Mt at ewe}^P)}q%pMH0NFH~(=nkWc{@cL5cc
zx;s=iLeb#}l_=k?M`-xMSdw*nb+Ea4%~jijp9Mwh-C>fAI7_upZ(13=mfc}Ic}NTz
zWrW+gi1Cy2kG`_f#=o|wIQcRsd}_hL%(oDZs6$}uNnd0kl#IJLxty?uLcr8jGFjmj
z&H@(%MJg;~uq7gzm!VAi$y<cH_VH<>O)&>e-Ug at z2tx5mp3^7~@r!9-bQ|8XC#qC3
z1#1xq%r`kX9d(}1;A><EB^Q4_(`kz;@e1G1Bt5(gA4K{RnPzdyo6{bO1rCuE;(Q86
z?GPKq)36J~sbo&<93<@EeYjj~4_#Fa0CJ=bkNe{6;ulxm^UN%1MCE+VETVdfmIXGb
zQ?bmc%WqbgBR{86_xNO{02Q at oIE^A3Zm3i$lJI6+ at c4#jKSp}6KmK5-7vBuq>G_Yy
zF?;Iz=8S4QS;`MIPyWlc&yac6q~k531%j+1GM}Y2L_amkTH)MvME$Q^Oa+Q)poX#m
z)!5QS3+8CMyrHVCqmw9P6BFWC_g+HwTcdCPFq5dh&5sOJ`W5e<NgF^qb?Vjh$RrXs
zIyUqZeV{0zx^AXfxCWfdvwDjef&FUf8B$XYfe%m>BiCEe=l- at b6#5d1OLiw(mohB;
z6>4?V0flom5kYJHaWDz<4H!+VrbbuA1XR_2v`2Y(@zx=eAwopng+sA5e=>9U8~iN%
z0a=@%5$2I1?LBunwORiDd}etjFb=S3q`%v5`ENYP-~LuTLbg}CDWu1crVUG>2@#Na
zJjLA?d?AD)A4T-+dnn>S#^?t!7wW=(HKx9Brpk%<1bbKL*`f}_?9PS$i-p?P-QR8`
z994rK-DyH6{v5!J?Dj|<w8geB!%}9;|F7QeZpI!{CEK1Yts#WJ%ccu$f#E)j2tqiG
z2 at 2hZ;Rc?r at KUiR3Q7r;42%X8-X*S9p)r8t at y7~?JX2E0j6|##N-r1`D&$>z)VXvl
z(JC*aPNzAB6Bi at gZN5*>=A5Jz9%oL at c`QJdT1l*2+xCiy<5!7+M3HwyhH-vgSo!@t
zYrl97<EZ_^z(};@mf~u&Y{uReu2;uGI~k4oMc}w0&6M9qI?xAk&=psd8W~E-@%~xz
z7&m~+3aJ_$iuytPk8pIJz*FRN9JGo<f&2sr-7`_;OzwWk0*TDGR%5ibLfX~ee?X at B
z-lPvjl53N93oD+Yk)aa)f2%Kr5X{w(zz08A(es2F<VhC_o%v-ZQQGh_+tUW8TPlJ6
zmth4=SyGQdi8sH^lukJkkA9xm<6fclSW@;tTm?-hj?#IQ at RS~QZ8#3UgvdgIjDGLv
z3>H+VEb0ih0Cz7OhZYziveBMX_s}56N(BM^N>bL#B$MvhmN}5CMEY52+CQE#<qCuh
zLh|=@+S%lN72`xC9$LNsj%d}x(Z*VlKV(UNhVoGz3D&RYGd%iY_E+ML_`B%_%L?Ui
zDWI9MyOJguB5>>JS@#V!RD#bXuhvox%5v(d{Tjj&)-$+h9znA(+NxNE{4E)qhCi`Q
z&ueNh^&5NPhXl&&tX-|3g(rU7q2C1di3ko0idbf at Qk?lEjS7-JXNtgx*(tJ5AaGHR
zW6G=7VEfuYAs&c)!`K6`9wsXflO<ywv~ciWWn!fe8M|XBUc;}M%?CN<Loi^>gr%|s
zi12#H_EXA6*}x4z83B?<$_*x;E1Y3r=Z*^PaD|*mrh)C0Up->RTn_4rQ4h}<r^`u6
zhkMpJ#wE0uc!m&*`zoBC)l%{h=IKkuRLtd at f1wH0F{2`Ul|Vx+ut-AKRVgLF(z7JL
zEL=<O4CRcnNyxmf7(9mA|AmXk2);74yA+gIm2;h$PD9Qb2)S6mAu{9U^6f_}(VR&S
z7eF5o{DBaTD)}ag51Xc6Le8yA9&q-yJsO_eSlYd)<s}U<7od%QLLgzoFcU=aA?JqY
zL at 5^pB*nL|&Ju(hS+xXlT<qeppCkd}eJtMSfy%#naOF(Q>91&uczQIvBs^#7{&tmo
zy{L^(Nj52)m6bw at CZNkagG@2!9cz6x!v&{09ZmLXxEF48?g{s7p>fhoNkEJnQ}-aw
z%>@S$4#Nl^y4jk$U%bJd&zjIYc5bMMaK_b2$QL)2U0>Q;MM8C&LP39fA at Afb&AzH<
zSOK3MH!FTi<+|%Lmg!ga7xB-CGVIa0Sd8CA;+Z{gGw~hIq*!wMT}>t?!xTyEF93Uy
zq%Ih}Xu}XR{>YBEv$~eTTDUyLk~zCebx3RV;$I4_{#QT=nNO&iMxz#8eB^lx*o41x
z(bs0p>yyYh<){x<)Vf^xxU-OcX4z at rD*>KLtceZY{EmMdv%>Gvku~aD#+#etjTkHr
zFLc?J8$dn2s(M~nT8}(bj<)8eMdZG_c8Ok!9XojMu1(C*m@`$q!MgG&Ubun=rGYb)
znuB0}0bd<m%p?_VQPQF*e4cp%SbmjYM>2Zldw*NAyliB&l^5?&B}RlXg39orI8EV~
zf at ACz_VKVBK!9J1rXwmmn9_4x9Yr<^hIhhKll~MiRmAs&1?C7xSdQj^LJUGo+BwO5
z&?lc$c|ht!zWS1L%1mN9-1+j;csmrN1rsToMNhCo at t;}FXLWtWse6i}yg~)8$!NGY
z76-ezTHb3Hx9fr5B`@2H+Hg#IKH_zosijfqfwX5+8JJUoA at OPd1uC4%m3SXD6i~kQ
z=#(Z;ZjPB3&(IZgVYk2vFZa8#N}86DF~f5;62P at cw8(U&`*SJqC}elIfQZkf8E3)G
zp}3!M+c>C0vSbIrk0s9y>+;s%#I+NhY)&n>>-26op$(HJ;chcBy_hKpLJR at O?X6kn
zXYFxt<Ll7oQTD9U`)HMyi`JMKBY|e$P}JQRmv6eQkC!M&e0&UNKiT}~0~f}9zYF~L
zU=1KhyQLIb3n#TXp5UVek(VU+z^9wh14g(x(WQDe1(xv-HT9C1$jdfb at II1qK4Yl4
zHrr^^>HOaz+TwkqnK7NCs3$$0LZQPijMsDyHYu6iw?QZ{>C{tOgt8bl5zf5(aRXQR
z>IAD+K$)L`rJzD#u5{K_QMXsde|3k*V4+9&n?)A+*46P}OG}TQWaB at -d%UvvXZ)AP
z;Me=@cJW`xjU$9F24ZGKR?i*OL`Ri-gvUr>%}%EWQOK+%{$?*}wV7WWx3dFKGX9q-
z|7kpc0-{3@*~(*I26XWUJb3!}@zcl4nKGcs%gLxS;`Ivr))480WF>HMm!9yiI4w^E
zUT9<t<wA+c?#BhWy<C9$T1U3rI{c6Z at B(2O&HPL4xh^}<ups%JqVztqonxPLv`F>t
zUegvhX*9QX_V*4B{bi=MEN|#s%sm${8=l4WqVR(P4p17#c2#&?oFB$4M6S0&HrP;P
zZwjke5MMNtI>7O22(LSbQMiZ<R$T0A1xCWtMXlL9jiInB+z${X5z|5!#R|#-_LS@(
zC+_j|b6+kxqPabN+Dm_CPU0|%&3#4jBJxE5CFjqCkK{u>q!CC8KSo9dkq}m<-XQ#g
z9VPU$xRD96-PAeA at y4qH+L`EUJ~$+AmejLN#=Vc4F;oSL^$3G$=D;A at L@;Ma_evDX
zK?X3iY*+#plYkoZ#iwMC!7Dr<>4<3c$Ov9lcXDPu?s=;FrNIm?nU9B!zlGy$_*<Ql
zQPlikW)>O^!g<}q)g_BsdhkO3lkJp-9204m2(Cr0HPaTm#}E+_(w;uWm2vbWMaEO4
zLYY-M6W>5&mTvX>Q9PJkL+?dnCrVhj4Xk at i&Y>pT(DV*R6D=Jkeu7DDcdsUfjgr?J
zTa8r|rP|2v0Sri?Cr%6bw-NCxtR-g`&^zBh!_8FwRHfLF>yl`Uat~Os5YN>N3lhBQ
z?>Nnso;C~&go8h%`@B1h!_cO1bt=z=M}6%BGrG}5z5VKD`-opDjqo?(@Cw-1VU~i-
zEC!x^*ySj`DfA}Gf<36}J3Dby38yXlyS~*9%t6M`E-Y}mL^R8pJrExSij9B(HE#s;
zC#me#b^_OoVKlFn)<H_l?o4!b-Da0x417(^E at y7qqwOpkTt6+8gwcEg?rwMK|3-=C
zOkw%GqU&k!HU9$4?~wQIbFv9T^OzwwQZ1P#b5QPFB4Z{iC(miRCfRLaS36Ag^rqWC
zXS8Qwmtpv%Gf3TRXBqlFcjtDyQsE});_P0{1d6v~9zAAX=4TTQS1%v$S=~YECaimH
zmWm)TMR)a>kY!=E>}#9vTeNp$33J~{bUG~l%3gh+1vav04ic at T!5QGkG8SW%dH<|#
zezO?#?1K>Gaz`-U6Ku;`EVR>z`vv`pmL>6nhpqO{t#MBx`v^nDu#pX>p#NN0hAv}X
zI?1;;5>Y-Wfc7a91+<|Z%0gsx$dcK4=P-{?&$a#Kt6SO7fmg((DFFBHkl;fhW6=D$
z0+R%li<k at OH;X9F_I}R#R6^qI-FU`FmmLOjE?jA?XIH(l{Jd~=GyUFdh52#$Do5yJ
zQ~Oh(p?Fl-<%gMDup%pBk>Y}dY*+HHk_jNmvthH8f}A44;P;+5{BQOaO<mX^mbD{K
zQTes_kRyi>0Rn;J3mFb&MspO2 at i_M;>>>zCGwyOBSMumG^b|6M at Y`aJw@<MVB#SVe
z=<E~;;b<W&;Xs0ea5U3Fn74)qc9KN&$^s5-6ml|RUhBf$dq-1x;)qbFVFt`T!(t11
ze*>RA#{n&m*Zi28RN!kHRKK37?yK}%ZvRE)C`78!j&s+6tL?v!zgt>b`Ad}lYw5}2
z%F3Vi- at D@dI^W;Y{;RfDY<IXDBEJ%9aw734%rdN-HyYE#mND#lYJ&athowi7U~qnE
zX&$8)mmWV|hE4Z}!mMDgktUkfK3kGHg{>KxHjr9^vB9wAB9ppgZ&w#tH9aGS4~Z)D
ziJ1G!Z%oQ8oCT)UxX4U-mnJK>RGvR>9d(22pnFvN<@y;3Y!QlpbPB1udCk=>PLWjr
zl2B2l$(W at 4Co*p|n6_T~O;JBywx)!9o6{MN9Q&GUe6ALzH`kVRbZh0Xekz%s)Lh^n
zU~HBPX1;DJkP at _R{g8v_4=hk?$l8q?M8sC0^jB-r?)8!R{oXA5rYPckcv)9Z#BqS7
z=)h1UR7Z1To4$kDyqAx?+6$tZtF57IDf_(7+i!0ZhvOB}9dl@;JYnfY6Ev;{a(blL
z7swgSX!1<hehtfM@;20 at u9U{qqj;A*5AGR}e;MiPkwn<iAab0*>jEed+6srlym3vC
zBK!L6XlO1){G+sm#JLP_5^XkU+nydDcgHCG*6o0z-3NsygI3Cv>cQDyR-gFKBHhow
z^?_}otPbtz#_JaW&Lo*|@VCWbbRx;jJWw)%FT;dXv)PGynDUy4hs&Zem^4+55XHgR
zzO~ojK!opl at LWN5Y%W65K|BoW3hGK|{bK1dw?y}C+B&^Y#>c382|z at tw?kQFiqy%B
z{WyIZYPa_#;8Lg|3YLHyDlA`=3p&36B)a*iD|I`}SO^Eyb+$@bkl%{uzfIX)J1Anh
z)_sK$6eORxfwqRGWGrl|^<2V(J^p8ZOPQvh6 at U>0ZByW+3%{i%LZO`BX at 5b&D`Ju~
zW*L=o1azzDc9{hQ<4gtN^GVy36p9mbi^O*PvB(6A)1DAQZj}@RrP6-k;MPZ=a`+DJ
zLb82khAwInZ8^5jq{*(qf#=GO3)|?vusO7qz+QJX7lO&;56>H6Pr{WX`MF^vmS33~
z3OX?nERu2}vl<1t?K~>3N^Ex>ymQNdQV~<bWMPhzgyTlItsIj*D2+P-gH>ntd+u*0
zY;=WIbQW?z6V8_+z+uj~L8?!ngGH83q at UQ2<TsO^(d_Z;c}M&4vc&*}BZsssq(mcL
zV|0Yrkp>Q^5J54GT!kT=Ew!tR%Z-z(2<kIhh?B1M#Hw753HVH3qHM9kiWlX<rt~>g
zwSkmX5kqHCXPC at DE+_02vANdW8qxy?`7>Fb02lQv?u{d&(c&;9`jEmLl*AOtJtzRb
zgVRcKPEYE*vwDdYZn7V(`D}tUHqiwu3v9D*u+<+`4Y9$wjOW;qdgiu)WwkFc9H?M2
zR|`vbL#fgrkoY6jQJ}IRauVgq;RmV`1YQLc^7m#bd*CO?KgepqxWY$GY!5s}DmaP~
zlz at Y}+ksMXM)jJvp6~`5X-?Xt4L4S7V!;^QDv*qn&I|0B%E_!?06utt199z`IS<6{
zN`6la4yIT&O6LIAa3nQri$r%IUBgFQmr^Yx#YG{|PIf8+jmmyFgRu4w))28h at LHe_
zKS)_zo-SJa<fYIaHXK+2pv6%FT0V;9usRm~29c$3$XtKY*2K;xZ3L=wkG?y__QuTB
zXp*GUBT=2uwtml&t(e%A5Ou0r`WA75NYL1QaPQy35l;G}Hhfe9Twz&*C5r#z>fniJ
z36$duCk9Fh5?1R!TEpLZa5>R(T+mIm*4Hu0AEC^)V?bUgEBMVbeh2q9Hm4>_k+0CP
zV*wWn$c>~efiY>VGXXp<J=59nHw;hZ%_!II%_n@?V#mlDlYOXpVGM(_liBjzl*)_J
zD;HggQD0D-LVgDtaT4S-7+)&8MLK!7A$Jq}%k>297ED_^GwQBRR$9qy1KcMl3L>*t
z(D+*Tse^xnnxXK%^QwNPvuua5xe!HbrH~MUSwFVrkBkriA>X_RkQVWPXr;7+9FVfl
zaOz{VkV)w>+mHEgNPuSL4KX!!w}kmXwO>)#9b)WYro5ZH4CZ8nR5+wJhuWtgXk6Lz
zIE4JGZhh?Acp;)C5amLSQIbcvs6Mi7 at 4cdIzxLk@3fjNhPoO(^26}^u;O0}OA_{nJ
zK3$yJu9}k^6Dg<jQ#$!wwtYqUTA-7{09#&m#z=Bag7Y{LjGX8nyL}uJj#^A34c6J7
z;)Gf76Jh}5VaL8XX5tCQXP=k}g;2~&mG&lt01^me{Fle_AfQRI#->)hy$0#AZ$ffE
z?wHku;wLCDW_NB#15Qy2fwaGSW at i!&%elwpMsPa at 9q*1B=P=h0;{4 at 8#PY-B!*(G1
zuOINLBbWUm{5MJxQMmZ|jhZ`rgdM8gK0ue}rM6kV#|(iLRgevvc%8*|$$x#fg#fC=
z9cs=Uqnm`E3vC7(3<^p5PyUvy6xJCI#5f4kwa?F4b*Z`9Kjx7Vc^~@6(_|k}5;nlX
z0^*`vd&h1ubY8hR#e2zFX#zpcPUBWa{#$NcrU6)JLQUZA^1ui`+d2RBOUA!qShL(A
zJg-PsVIF3FZhzuEd>wXC02w<YJU8JH(oHFI at cZ<?fid{OZpsv at 8A7~ZM3SR<(7#pr
z`8 at oQg}v$4Vh7jWUTl2LEykur+f1KREN8Y5U+B at u97Ca{P~ar<_Bb%)%_1u2xh>02
z_ at m5_bP;m|kH*}#=4aW_C>=1`xC at tN=(?sfp=Q30#+32$vLr*_hM~xpX1Uca=g<NV
zdur1)9s!C at G!JSh2|ko$YHEQLXLOT1y?flEoPM@`@Z#C_s~0 at z;ofy2d4&TXe2;MG
zyI_8M>Kwlgsq%?S5=z(Uu??Q{FqHCSh}ll~acb%a(!j5VB-ER;CzjcxasL>!r=f8X
zI_)dY0(EPTPS??tM^ad|W=oDj=*i9uGl#oss*dyVK?tKmE7O|?Rw4b=r`1wzv9t-<
z0_uio+8pISxnc7hnBv12*1!2imL{lv at g>SJ3&eKZf-=l9X34BjeS?dF!%uht!s%oW
zM4X1xaZKreb#q?Y8@}o at wIl|Cg~T7CWKC7qWzCPw3sLN`Xu?Et<2f=2Pe}j*XZ*pO
z*imp*m9e8(Z3^3LIoVkw37Sgkf&&g at Y&2n~5o3ojd at vecs<{WlEyKXDw7C4p{G+=a
zWX9dh{-EvILO5{B$6s?%4-b?1CG^k4q60_S{5EQZaijuGaSw~qNg*80GI)J3&b|m3
z1`oFwADU6XhVO`mcvW&1)y!H7j-wHy<pkBRtTv;N^h1gD(VH}It7IgGB3dU*ToTwK
zjxML8eg~!~{Gfx~-f!Lh(_~{RmM9}uwqP3TknxR<V2$d4Xu2rzqjUx$ZcbBp);R8@
z-b(1p{It$d5BpQHw6F|{PR$)P_7W^-$K%le{2V;k(PK0{C{jyInYb9KxN#HI%r<Qb
zkx__=U?<}~I8BkEELp0r2oQ1a_2<d=){f~e8?3!c?ivQr*yUE1+eyuY$`LY`RM4&w
zwcca)I2Zw+^R$bSskpJQ33LXn)pm;f1(WXEaSvxsosKXUU5C>93L={AjHPP~gCWy^
zHCd?|lFAoXwM(LwXjF0-o$+3opqXnVJ2m$$ZM(ULfw93W46Yd_hwY40u_y&|wPv%i
zdGPb*L9 at xuvOKsUSHLXfatb#F9y#&xu_$b=M+c2%kSa|JaZ`A?byw`*HYSIJFM^qk
zHN{G&E%W|LNHgmd=^$T%X!KU->tIHTcqnpYm>hoon^0$Q=WN?nb+XguEkrLJ&42&>
z;~(ai<YEAtV%p*rheh&zyEo<Td=;GZBCk2A>Q>c4G$r!k3lNIh)??xCU{WJ__GoOB
zEV#FLfI~92bIl2&tNMk({<?iTJiZ>c+AJT3NO~G&aNU9$3*x at Qdo9OSl_@&_XbG<&
zh9BP0hAT2zlW~_p{b$>Wb+(vgN6I<DmkPgeE%=QL2jR7KtWaSoPe#0zq3NHMfYh0$
zi#lAeVdHNtb?>e^AZJ~F>Vnl#lQH_VAJat#-8oowidZZbnLq at hxi!%%F-t-v>Sw5n
zWRTSUecAW|un&xHZpolj;%0>*z_?1I$JkQ=KpSD0JQ$zmsq2Ql1!x7B5b?+nD=w_{
zxNX3w!`V}x6ummqr84lJ{2qh9tEvnzCxs|+>I}PVUm7146d&wNQO`%`hd-JeNi__E
zh%H>Kb$JUn?6NL>YkbM|P_F at v%l;iVxC_=O<@NpmQT#&Ta8Qs+E_z3Lzr~>_cJ6y!
zzogT=>Az$V1Y at ceuy_7ctwW}{Ib1uHH%CywQmor%)`Rc;=;b5(cIs|iPxg=~SS=II
z(<rMg#YQzt7V-TeHZV08oX^K_Ju-Sz!#g4^;EJ_-;$`T|_w`@#^Wi0UTuqb at J0rvB
zj0d_gdzpt^G`6#+>=*`N(&i9mou2+b_TId`s_RPky?^Ud>?q_&*hr$WNkWVrfrQOD
zbU|_)7v&;b(gt==S85Ena=!chz3&)vuDNz2z)q#^bDyYEM%sI=*^D{*ZXOZ!>+|6p
zQJRpWzAx1M_T(O;uJ04u-+Q-d3;v_r>z(HGKF`@4Id2t)g#fUs&3HS%qQFOi3*|aa
zeqT-^(9L!q1cSQY-`b<2C!>=C6i|5ENA1c;Ty?_t?MzQk?M@$>(yT9Lw1xHk at r4>x
zPizQGcr#6K8Un at tAHFk>`%$~o8=X$wI>fZa)bI<!wukfHv^9<Vk*RBXMbj3sc~SbB
zo}J9~N~0nK^+XDro^LW{E_$>PB9oTTOl^PGQhNDR4I7(S#=OU7BHiS6`zcBDCz<<P
zckm_6P0O1s+NkL-dn52$H)hHOM#@Xt_t_9)7kdi%&IN_^rQSc11s^Jnn45A*P*o0(
zx=SQ~6`Y}F<rd^J0`!eptqOfY4X-tDm5Qdql0`J3NAwt^1}I+fyYb-4X6ilJRdiAh
zN$#vSJ1|X-u}w-<zF)Pl=Ed^(=G)^jo{xC)<pD^96})j}us3)(_<r!st?{i>Bq7C1
zgRdXbucQ-tY+Cnq-x_SwY6DM5y(9Uki;D3~{M_Fhe7^em)z!~_clEcc*Kb^n+aL8^
z`^e4JtE<<4clGM(wQE;z;#!fve(;h6^4(YRO}xfQBb_2rn(ouDie~&4s9jaq)NsFN
zxa-$`H)Fzk?E8hiF;`b_)^lS3x`VtrJ3F?@s$a700gEj_E9azo>Z4P#&W;Xmk==4O
z+<m14r9W7}#|33p&x@=T92Z+43QHu%zukKJ{Elu!#5J(~_2#2(yBY6q_LLBTtFC~l
zMk`v!$q`Pf15$ifPDW0D=LD~~4r0Yx+--c0=mO=BcJ_9_Cv?U+7~UEjpYH(H_Nkfl
zUe-}wJ3Lz1)slKI8mLpR1L1GBA3mrMpUG9{Gc!8DM=63lM|uCR#r0`}oZ6YkZJ#EA
zt`M at mFF%d2lV<YhXxo*t_qe<@ua7QI>faBNE#-xuA!Ev`lMHnpH!jaN^5cDvwhXnr
z-tm#{w at W+Ja-1JO#|#h86abHSNBmjrN{#U|cG at 3GV^7Z4F`Lv*Cm(1|+)=e`Ftg-#
zc4UIS<iai!;O=OD|G7UPE#bwP>9E$Vchjt`d6?+N0nyBOq<KJLue^rv at Tdf&x)yO2
z!2u6Ak1G=8crZLaJ6eeZV`o>A>u^hPyn2T&aW_e-cw}OXqeFr_L-|X|sEhEQI+6YX
zR`rheA`_ErqW!(W(axwB>SP50 at NHh;){fyi3)%9$+4Y`iBg5L7n0@|yq2cv(?vt(q
za!_!$Aoro&Ui|#(;y~%9w-;~lTWvKeLwYqfKqN2jWz;}wYVhsDCtNFiGCaP$`1szv
z4qDwIF!j$}fp0<lpowY}wP*w`B3c{VQ%>#v(b4hXZ?IGww(>CzPG66y4SAtcRQD(Y
zAAbn$iO~Radj}A`zB0JKw8s-jt#=ADI>0!3yE}4L*D1W4L%y|gd4Y~(|K&jB`re*6
z_33zrb9Krx2DBS`Y35MyA|F{oBL4oy3BT%+ at L$FbPhI at -rJlu8pN#SX=KsYySLLHQ
zKPDWwM?pvV=JsSts0*|N|N4yG?|P{&?ShxeGxa5 at 9>%2$UeYsu!5q6?9@$>Kne%VG
zP_{px at sv$Am3CT*sNiY0e*u=jP5I>XiIU$V{#=&xVbh(R3=dDm672gqZDx)73{u(m
z&%qXHSf|o4;yB|#;zO=}o_`*G#9%6|F7KR=_p=YAh|+n^pdFd|5#&eq5&AH$M(+nU
zlzK1t%Wv5mm5>%Gog at 4b3Cz8S+Qb6qhFS!kG{TTLLGBeR4e2v-+T(L=i~tPOqAHL4
z5c~7*t-f%n_dMT$hwW!z<=@ki2qDF0zZ>qq9?0oXcN5wg2Qfk)!CtE-r%qbEt?DK0
zOFyi9IVLbf2#_vR*<pYlxdpYf2W_(KvRj^A1?URU?($O9w0B>6TUvTIq6mtuc514I
zRyVnXU-xnkfMo%{>ZpI?PSSrf`qVpm&un4xTFXwh&m20MqT)=7rUwE=3k$uYpAQ(i
zD}d3`H}2dQjiuVw8^6c)xn*ZOdNWlv6SEE^F7r%7-}ABg*IBCsIXFCtBE^1(0}Xve
za%+FIOKZTWBT-23<PZMt)Jn7*+ky8p(wiA__<|QCuLrS)RzQ25mvA6yDllGKw=U at p
zfqd5PobX>Py$=D6A)G72%-Wfr2}nKj6`&qxdYJxUmw^-G3RQIc9&|q6RY?LoX5Op-
zfJ3Oj3_$TGr5T5NEATY8v9vu@^%Jq4DJW?*42F=y_B`50FEY%+ipT5E<w`T(5oj7}
z*eYwD1z8}hv?KnZ!coy>ertqF{8a>2{3T8wznR<eYdK9?y?K+|5*>H+fr at 9PCYt9O
zUO5+f+H}xPUYV;8+MnqYoBl))n0toe=p3J7W0Z#G+UFhSCFL-bo8>^)rLD~en|HVI
zhTMDl_ at TL)FjzYGf1Y!xM+ at Vq)e?iAcw`<<Ynu~?x4~lDF at d7r=HIDvYnJ-o2i`ug
zliP69nR${#gnpX^O)&Wo-xB*t-qBFW6dGT6fFDAH6JVT216u4XP<|{4EM*UDji&(V
zKLykKM=`PEjXU>_bjeJMJTtN4J%TDGxv(fxXG&Zaw?=B)Q%fo0ctTcs>fp&S&80CU
zMggA)VYZk9i;CEk!w)kf)Hs}%IK66yP`Wgie;g0<`J#Jy><<%?%*9TAiEs=_Sg~8o
zd|D_L7BpKJD$!#~2nxXEwE}d(Og|S0y$)eCz+47-5q+_RUoPAPhYuBM6S&k6atE1z
z1O*pxss->b5 at H`jPdcaz&)|cE)W-`a>Fuc5&WHE_p)>*f5Jnfn{e42{gTNDr+EM9z
z=>jUfU#eUP>5H&^V*iuK_dg{)J`jfHI}=;z#KJ|qxaW?Z8sS5^IcGx^cIv<O6dfI=
zNzmmJQ<+0eISn*a1mk?A_`s>2R4(<r(U*o?HXhd`Nf#SDxc~6}_Mq4CSCr)+I;E=0
zSA)k`8j2F$<|8NpJ2Yx|E0Zqo>tF2Cvb+>iQ<+Zv6;;dI!&RO#)6D7UC_S`43r#0Z
zXA(u{DvKYh;ncmrA6sQd(96F)*ZZ`eM&=8`MZM7P;LH6+-WKPNj3lfl!j at F31j&_V
z71jS|y)ur7Q6!;8Z- at 9&FjR(vCmZ*$pwxGvQp8- at mwdMss)ld|DRJ!v{!OV;Ol!w;
zn^7VbpBcW|U- at YVtmrc}pq^&X^oZj)qe&Ez+tbm(82g+6?hb)De5H(_&xb(_Q)qmt
zE*Xkx7q`6hn?L;f=_i+dBO1`D)d!n^ffmte4f?Ama|lP&w?r&;H*pktUO$pFa&Ls2
z3y+Drm~_wd*iF1LF_EbKy_VN|h1;AZb{q7`Xtlw#eyO~>0M{pHs at nR6Y<benohp9C
zotzL~>i;GFtIDorH`U at qL8VR7B%vjD#E|!XAv~D<Oe(S9q>jm~k at rUR=DV3+*&qL}
zMn`Q$-emA{Zk9)aRo9Hnd?xU>1T5u9?;3X6;BdMuw)xN at _tjN35?KpeO1_rq8innF
zEJV$57)Ql at rs|5F73X(TfKjp at r@Azh(L~X0(Q_I)*l(KQAKI583zb;^h6+cz{9BR_
z%o_RT+Nyk_GnyKRCf}RnsE1}XF~CO#cReK!q}{f+PJW|u8`!ok+{(WcJt?fN_teUl
zV(Ci#>vbg{eK^alN}j}(feNKQD<uwPun9<CDzh`L-fZWc5Wd$FFxj}mk9&=^!$aAm
z5|WjY8x?I$O7U#ybS)@mKu5^gHTCHp?d^U7SU#!Vi>zklcaxA8NIsG$6)5UoN3q*{
z%sW4Aa{uKC^0MAQq12aKYisnIaC`67!_k at kQ104S1X{2CmNcG4+~6m;_HQpf-`O7?
zzFz#&AN$^iiH&L6`755fqfC#NpH7NR9P5pF_&)bor!uW)A8YBJF at 2~|*)Q$bF at eTq
zu6bBd_8dh1i4;jSGb42snOC|My8n*5oS``G?knBRgsD~vc^Qr|t1l5-teRVquW>Sy
z6jiE0&E|k#c*^BA>$Le+Gh>U=8L7X=!LM%HF8Zhf{&oR$9c?I7=+Y$fwCJ5(JU%KN
zced&_J2Q3zO5f6neB2CSD|+4U>$Iqc=9AA%B}A|I&>NSnd0QlyR-dMx)6b;Tz9<h>
z&rdGrqUQscGgl+Kq~~MR*!r1V&qaAnlWUpx?Ce9GXg4`i6^S)X?|SaT9oH)Qi-wq5
zfLU=%Rv|o<>00kLYpzKX`WH2)>4VVRE_T<{FAc#h3C at NuQ3=qG5xv$Mg4H?&L4zqe
zx)&F*B}2jH9fe9!SVu1}YHd0(Dw3kOi6*m!YTi`Q18_%Z^IxoC*L4?$#7 at i0x;|79
zrDzhM$Nf$G`PG*TUt}|9WnSN2)KqJK8~!+qPZz($4EW+#&+cxlZ?8Y|v~>TYHQe62
z at 5Xy)uWlcn at 9z`n&Ck9WjbFYxix2&<Fq6yvsD3>>TScI4lH1C!ci!FS_P!=}sV at -f
z at XFl41bl%RKo?HW*y%ueDkkhb6(4nvX$imTMpO*1dvlV{_0}uhWq9^bxk$WKx6yoz
z4zYNLK;B(Hxi~qRfZff^D(e{fl*{|Zz+z%odPhIq8t1$>xlg^6RPZx)ad&I$+DGrA
zY$s3k=WJ;95Ht5ykiKy*l(#QNt<}@Bcl)E&xL0qv9>~h)xc5HgHjKAT9{op+_$tud
zL&lP6u|6><>}KtUA0V@}peTO(3RTaWndGirPtPg6ttQsd90{WRkaqL`dglLQ5SV}e
z1F7K at rjBF-{K7R~eE-AMt2epqVdDOWYuA7KulpZ<A=p3Y^`CkF!<JI~uuOJO#>Y;b
zZL5NdqeTvE=_ZLuxNB5@^N4spwFmp|^-Fpz#W=XSNn>`1I!AP)betP*biLo*<iJDp
z9D3ulXVP-ebPnHz^>Z%QI{uKaH at CZ%iq4Xbr&Sck*R=gm6_6J4NBlM}yuNgQ?^ao)
z(4EdP*FL)*H&k4`v2vXoDz4tTasAe{8xvO!uN5a1!>uiZV!phjN)2S_ij)`fy`{X+
z5 at LM#hthWFc2kCq>7;$wr?K?l{@u+-TU3Jl;h)A&=hHtYhXM2tApig8J at kK_5}*nC
z|NOT%um6kwKZt;T;X^-<{-?>O!xo6;`i<Ww^?bH+_1fU-?{9s6?bc`4=1~u1PG!1!
z_(U^i@&O^I`HBe2?!nPv<A%q28f*()2V1Uk(Cb`Pb at oa(8pO&_ShFTV&pqKg8ed_m
ztf6P=b at 4B}S})I4<SP at ZFtH0)5+wgz?z4&IsO%{#xN<dI at pYzKAz8^%M|HH3bM7-f
z6YoIm;6KkPSL<KLofFa2o}M+<9LI;dqD_|nUVEu-?Dpb>6*cJ0s8ZB|m+$pxn^f9m
zwRgMxU)5xKGd`q%VpV*Uv{;Of-Uq8yNtM}m`iy%V&b*<eA67XN7drUEI1gnm#?Uem
ze%VN?l){}0ta0It2Gq|74~j>c at OtY}ws{wBu5 at ipnexMZoc_y8CZA~+D}`l3v%Km|
zi9KpA at 6Q7DF8^Wh)t7BT{ER8(6<8Zg=;>?1gfABszL3c<P!WuNIWw=uF#h7zwJ&?f
z)htjIZ(f4t=FZS-MeV;tr=qQ``;Q+zbAv%Y^ZX(0!e5TK>15?g*YZE1<WSj>f|D?A
zP4ntsc^>|y{Qp8W{6F at 3hb$}Csl{ErvBI5<^p<(G7Hw0WD>_ec9jemLRs}AW|JOgi
z_W8}e{J&1;zN`O||Nji6_<8cbcoF3Yqr^giG%5R~42!PjFUBKOdUIxp^J#@)CVHVe
z{PtRE-q)_KT)i>4cJtPa&u(42KJRWgg+QCj-YmLFd{nc!i0F3rVPH0#y#8p_LU|M}
zu6DIp at 4~jd9VMNVe4!<88K)r%#eCi6Xs4+b)7Y%?j_+20!HTzD at a|k~!{FTr$8IDN
zztFWV-s>eUX`uU_TbEqFN>=jxwUy)RR;bjSWB`NLqj#qlygauiPGfBM3+5I+v at q{d
z$9?2>C9d5S^gUZ*y*g49xv!j at gBp3Sax215UCuG-UH8@>Y;6j at msCP_GTuWSJ30eX
zZx6Pge!IyRcFJbb2-RLS-gJpScnZ)FmoF=-oklU*oV};496gxXc>1dVULJAuG>xCb
z=eC|74u2fKbPY!x*B>c#BXPaOrCqd5E4osaMwhpp)W?=s)=Z at lcog>C9ck>dZ1Z)q
z%hzhu$VQj`7ddBtIDUOwiYc`;?#x9P|M)d?NwbppA0KjAts6kzUVJs)+Z!D&X5H}d
z>&2k^+l!6zG2H}N!!gw2VC_qf8l0%7Xfb736YvxCUml$uB{KWs9Cgl7=LlBK6JXjU
zRG~ar%!HCkKLZjyI4CIcoa$yD1+_GJ?|1!J2T&E^Q0DSzO8eYyTCNHyCtraps9kE-
z+5=zcp9Os7aE%8QlEp^IS%qZ+9DCN#nJ;qbG%iAXelUEi-3V*zTH;Ax;QPou_y72U
z>?sN>gtWkI@?E*1ujNaJJKG|aC&5MjxH}rtzO&o$thb>jtxP!IJlVpg(f`|H6;IR&
zhh$-a9!F#Kf0kwnkgv>y!CZcN$m`F^8lN*-e{B8=BB;gj7hQebGMWz^eri7Pi$L~|
zT%tDyZ#K17{vzqihe{Q0D7ZX(Ig*7x78(ULaaK{1)1NT-t{QCd)#S7jUy^G}K>8#1
znOAjA0d5*|;~vi$4+^co{kh*aXg=>5B<Q at aKL6-1uFoCo+T3rt8fV0V2=b9Dzx#b1
z>fV!KE5IzK{i}_~celTPvKi6hC*R(|;W$`aSzG(=#@)5GjqQ!WU+lNIwt6*0w#z$*
z`)g~PkK*d>#mp3X^XAR!n;WY~Cok8wpRT<XcfY0q^4Aq>1Nrvq-r1f_Q+3UMd$4~<
z4~gkvuKoV^zmK<LCLX*chfGh3Tp|cO=5}_nREo3a^cmN+AHMwI+4UbRPE3J6`^CNS
zNq<7QZ=dt2$Clk4_O~GXh21%gxlK at 94xSWe^3}Mx(25*7Ki*y}eqnWMQdbRoi8Hz_
z0CxW2Ms8k8KU7~-l0*Gk+V<^5JA+PNjYenWXLZr?-P6<VuJl(lKf1k$rFZadxOXr<
zT;*FCb6+*{i0y{Aol at 6uu(?aKa;l+LO>eb;+!gDVw@(yR_eY1+mZBlwZbqB%D6sPv
z<Ck(JAc!C4trR`kpKkxtlik~kt80HdT`TS=T|nB~S?j^-;+H;;5{>A<&^~O$m`oh7
z+vNqx0QPHWlrpjO-h=aFGFC?PMTDJRkp^5eF+C~S)_KF?x9SFygKXj>JcOjpNJTwp
zhtW{VRq!NIWc<tXCFHMvOG&E7^b=5SbV>9mhLchj55#{pV*1_CGVzRZkAh7yg3Hei
zxDR6de6%+{`{7x0YIAk8AD;b?nnsx--YUx4M@>F&C^pdB!PG{*exCubMM<OQ1@|28
zDibZG-3P#d&Oo}ds)I$d|2mMcecm!75$An7o|@+ByzwTt-C<S5r3P_2Uut`}J!fh;
zB9!4xPI&FUvCin+gRh>OkD+rWs=ijvA(X>1o&KG6Vz%GTzsaUa5&75^3DEPlzcm`3
z&=*96{EK()dH$PrUl*5pynr_CUlxb{+o`z6klSmK{@>XlPdL@>%X%K=$VZDL4~^C_
zO8m969LUe7v}q*v!WRPFKpAsKbk~}CL^5PCZ(T>e(8pe4-lT>1pI?<!63+2i;w8*R
zx-4Kxp7zXj(ceWTrl+X3Q8Udn2lJzyq1iLM`gW_I1g%4E+H=)Y1&Zljm<_7+oaxM?
zq~vNJwr{6+S;w?5Skce1q+_Q4YXF`e4-ZKY=B9_+i#o|<861*v0zGPkqwWZe$7fJ{
z1*ya at e%S!l&WIo<OwU{1*%xabAxCQ+0#ceL?b)ylqCwcq=_(b>2mOQ{G4lW>p6MNf
zx7{wZZ+gdHlVF(P%n&rbKKesB+%*9jgnbXZJ8G!*ZXo){zn`vz{_ATE<wf!(6m0J#
zv9LYzA{R*n`;AD{$zF{LQT-fIHZ{}zA=q6C52TcoFV0Rnh2x8}S5D^?T>j7Ko%IdS
z1bz6`?1wf+p{vPpJmbN=vf%4lFT)V=(){{q=X%dD?^zV%p2&mZp))fTrv~9Qds}j^
zxxDhRQdH|&Rsn;u;%2;1Kc0HQaWl;j*{&Y!QaH*1Y<Qm1Zo330Ic3iiA49U)9H|_f
z+aqBQ*oF09b$vSG>R8mX`!pQneys3?HVzm8HrEh+hGMK|lP_~qfF9LP(f#TN`mi0N
zy)?2BY~IuCNsPZaMZPgSrQUVf?*Nm4)hl-b1t_J(#u4Sz?3_>H+O)Eg=SL^pmp$5h
zUYcCRL*+GKKJ^5q+Hn8$x$@K*&Q*u$1LG(@{ORt5e1d8yGwXe?2cMWvzt{w8qFv4{
znuyTaXYd8_V>*=5`|;BF(@)ED-ethz(@z^C!H4d6^HUln56|w>5Azf^WhqQg at G<T5
zL+#ia-&B!Q-yMB3b9V~*P(PPuorb=cz=0`X0w6{U^q2>&2LEP00w6U;P}8%Sj{x&>
z--VYu3k!Nnne{*nqWATq`KGqRXYEpEJ at O$-;hCw^l`;jVb&buearx}>;0xg31Ad_9
z0e4l_*iX86&&sEDn|V`BAjX`>y5yI}l$^^%W`VPe(BnAT#XowfgWK<)!e@}BjB|FZ
z%EqaI4D}i3f|#Myqs<8EYDz at W?U~PFB_DC-b6y8qrvW+V*_2P(jDBVknxIk>p5A-r
zb0#VyOu_LVz0{9A^EvDN#b;hOszd+PAPbu%k9xr*Lwy$B^##~W&cxCkU(}!zv^#58
z6C=)gWcG*+!%ycFN at KA{THB&X40>|#t2>!+6Z#=WMk7pUa+lB9s%jO&J#vVn&2api
z29979s;++1kHwj_i7Ecl?vizUv4c+MI7K}W4S>RjPuK3$U*naOw>P^^!;iU?Q+acL
zRyJDyEu{G at uyquoJ4=@^D3_QL&G0=>dtK6-7yCV9=!aDMGNVHj at 8!QU^y=VX at ALGO
zxp&gP<JaYjiFJz0bUubzYv!{np%>*a*w#JA4sD+MgMJvLGOh=7IWfzf4YA2nTC2y@
zA+mDY`UXR5J=8jve+)h}HPja)#M~{-MuI*FKO7<EA;83Vvyp){{&yh2+|@H5Hsa9M
z(?9gQd*)+r>tBoyXg;GTL(70lhg4k&xvf;n`v*kUB0(6Ves^@Tdd%JMW<0&&ghV(X
zZ!gm4JWcFHvVL7~xOlCYuJx5KdU!bt72n6wFJMg{gNl&XteHLx7cYLZV@~sMkz;T0
zuL4J~1R;_!P2u9KSwEf`&DYg?xHxOFpUHbZQZ{|a%$4bxfMy7!3R6VMgka*8k2-vw
ze-EnkrKF_NhaJ2YKPiPK8PF_fe8{0Q_O#fUGg#ND`yY-1_Au4M=yZ`<IO*<28Jwpp
zPG(fwXD9djM2>Yj?y^)oYQMRw{Xh2=Oy*8Mx#^>JLds+Ms}*PF-WWxUBhjq)!GC#m
ze-ztSYpZPS&_1HPt7bUeLf4Je{WW`_`n^U$3H)bdwEk<3kAVOYnuqV!l@&0V|GkkV
z^1kC>_3Z80#|+zh_QL${&u(7*{IiMtZyL+oyz#I6?;a5UoBkM32)RuYHU0Y(5l7{b
zYjym=eX))`TE)Xy@&j_K_v5M&f3T&CMrwH`W88JB$N7n|#*a+q{%WRs>wofh8`ydK
zgnUob0-l#~){f8OcfZC=NBP~?w7Srhr3(uk$_}Drfi79m%^@cBP|ZWH$OBdCmp|V+
zIzQPR-6L^nG-#gTuJ*s_u7LX7;}<W+yJLKK%|ma-ug4zbfx4;J#tHQz*-r<5&WcjZ
zKo<V))&RfT;mgs3qnEs=pHByIo%+7YUUe1Q)6Mmbhnw}=2T^o=i#CWZ1@&~j?a>g(
zRjaoKE?ez=w<@7W4*l<M{x<6Gu3cZb`n$ok>$g55jsE7pc^cj1Hn_B~&^v9<^W>W+
zbs^s$oyVm%d^q at Q^*R}0c%|w5HKK8px*`$m_qCTa^g32kO4|O6MmktJlij#hgzBe*
zI?&e}*Xy%fAE0sRUsR$J<3ps1?&T$&?T{QV()V8s{`Zs3uZ0cqv%EN#TE6zT<I&4o
z+^V7%Xm8=g5Vsj~{Rv4)<3o;SczUeUG#1X=(v4<IS_!g>=|_WTH{y!jTlC)~oski{
zn9sxe4>woT!-j(8URHaZ=et)_8b>*@$J_ON^NYF;if_*H#^8*bU-6s=yC?6cqt<M3
z7xcK>HVWJkB{^IgbpDdGSlz#;0Koy_cCGm&I=;}^C3C>z>zki_wZp|12V`aerqeFj
zl6-+&Tu%CCO#bxlP}^^C9f0`qL=gnndQ$;3h9HKAXWVyG4&;>Ek}!?<`;!5B$e$hz
zZgAn>>W%9aRcN$A796K(hv6qQ(&g at JT-q!<&MjbbIv5=)sc&y}VWG!!T3Tmvwxgmn
zN<QAGjyor1Flb`1tRAH*2LT~RCo2NYWyQtb5dUziyoGGOD!-Qwa23W!as$b3T;qKD
z$_D|%;lKy)j?R~O%U3IL2iJ*Mlum#mQP`dLx}XWP4q&I-bcTCtx=eP2^2?Jt_`T67
z+;p$rR<k;|f3|e00RS#D=pRzBU-QX=p65DgCOR3DaTeEpK_&V;K+Dz%O#z_0abpXU
zG{?mnZYezWNrKmPFnbJFXFmngd^OOOxB>+)jxre%dk*(TZ+#EPCxd8%tLsyaarJ17
zD{Rj(UAGoeg72(R=M1Miw7}}&A(uJENik at iKulhiWkMDRj!uce0mppa_=ZYK3Slc(
zSn%$-?mv{w at P2my=E3mfHGjMtfQ~B&EAIS(=6DE)BG;~Sz2u5IFUO at Lp9GF8T>)t5
z@@)4Vhy at v%0gV5+=JDNdKz)?VoSLVi=@w6EV>(u{@5V>x^znDL4s8DJ)}OBo{_^m_
z6}9o@^02MPYxg(r4zAy%vEE?CJA6!GZQ<sFZ7oUQ-l7B3aL);zR|ek^(7ZC(<eD)s
znlB&x$NKiO%^&_!=JAr9;)(p>l$_`1J`E<35Ufc<fmIy?0r7qW1W<cy{MCpHH}P~5
zK!s<)Q+13l!EmZh55dX%Tk8+Ii*Y_lp7JMP`)+0D-AXnt9xVUq&gNy1iCuu!rnS-A
zK^}o`$kQcSh|}aNoU<(%dO1{n)<8PPQ7`0|TrBr$yz8 at onob5AiB*(4^S8PrtE}58
zU{O~N$*}b1GA!7r*u{?M8gVm at cPd-wt{WolLBN3-?l$2w&HeIvyvs59LL71D^TRO3
zBKqU|=2Oh6Ma7*5kMFD)QD9D%XkwS;Zn_m2SF!YztM?BNk2dZksD12Ul}a*Qk=2Ra
z8>=@Zb=h;ic<_#{#^Vq$wCgyb?unaT&8Is-(@5=Wzm4~m{d;~WF*OprKK~3M{UY$7
zR+67CEUc at Zjs_e%z&ZpG9Ehr6_|oV|Naq%XdUd=@zUjLGcWff9bbXM(AkM~N>&866
z-rO`$Qv_ at 2KvmPr;fbz2J8F2{>c9ea7_aOf(eg};vVBB*rcH>(EPQL>m^7$ZFtzpi
zLkA0g-bJG6Z3Bj@)T=$jk-!jW%P$c@^gV at -SBE-`o;u(nU{ZkDiTa!%1;FAX%FcB$
zF}lQ&-WVUBBU3`N=t!=NxiCHq7J-6|BVCnDL6N%TRrgcjvly2{^EU{9|G0L!U8cm3
z=t^x{2h0C9hFyQne+Mg1 at 7*0-`~BzFSA<`8XrOw%@QKU55!u{#0nU`o?SbP9%OxhV
zdS-_FZ#00aD7Cz at q7PSo;zNY%;oe#uI<an{JhJoC^~<<(VCO)mq9pkz at OGNMAgk44
z0p-}o2iVDS9b5i4CdPu=-2UlYcmI;cD$`>Dou4iboz(%rPze at LJq8aTozdP(unUla
zM0J#>xan#EC3f)bF-*hQ=U(~%j=nQ2FIDOVE-oH?8+~LZbT#^|f%4PH0h2yH27!e3
z(mBN_PmxRJlT-k_Itujd<am*N3n2`p6sRrV>6z3pJ$CvI-c8n}Y;xE*I_%L2YQx`-
zc7#%F08|8~dF#C8B(E(5a+T3ftJ2b<G{Y=DseFFX){fN|FpWbG%~5T5IEU|sCx=31
z>6#CRyMdRt<O-7N!abo9&_jRqc&k9LbaUsEzg!t?ol)4z_9$D_Z>VCj8#GwT#npu^
zYeLesN<&l7nC6;N*r4h=ca*}ceSdp6ehZN3nKoE|@Sw&2$Rs;m$VT$#Ts;_P3{(#E
zs)a*QJs4M(2et}#0jl*7512!<Ec6A9&*kE9qy?E5-1<r41PQPp$@1dApDbPmGJSkB
zir#&7q&BQ#0gVy|(?2^I at 0`0n`ZfD7*6EBvq*9APtKE8|cqsi+xxsPuL*XS|Jn9>Q
zI>mA`D)g}+u!td`D+BYO?n%=LT6(RK5iGymzPIwbg#2JRnk~isv7G)38DBhPtAbmu
z&uvPdBDrH|1k0c<L~N=XT8fB1=^%wjJcUb-bgVF1()5ipaWnf+oAPkz&cMtJT59lV
zoI^)rD{oi%zZJ$_sk5z8+P(VnCu|Pbz_-9fMjr?UcQf(yK)%ezPPyeyXWTu4ybr#Q
zwKzJxOoyi7iPy98_NO0TG??{#{`>-!(dx|z<w52Lq_vk`2oH8bS|GF?)UtPUxO7(J
zp+t`Ozu0xb&hjcZ>>i=4y0jKFu}<pYm=C?h;tIclNYB&znwnzdT at gd(KfbmQ9&$YR
z3_)lc)dDJl($j;m2k5~zl&w}Q17KQjo_IlT8?)EV!vLm4s}9`E$_>D{?^ZOc4_f?3
zJc at 2$86r7ZsON{`DP>2e!xtkkZVw%v_r+}71SknQxP^GMhv{^XN=5NS-a#K?xO<lc
za{M;luq+RdMO*2gz?&gRrLW at pO>Z}iYkAPwEwVyIvf^}>#KrnBBA;;jos7bY^ku)|
zh-Yt*`Gx5VOp?tz0eA6No|XI&KLCJOR~G33JY?bCicA^Uuv!`%bILD7a+p1cMmPJp
zLNkM)9TFXQ>dp8k^rK{3P+fJ!3D{EjsB$k%U9=`^6+Ho6ZZPyAqz-NEzTMJYsp~or
zt)yLnQL>X)Lo|5_XD+1nc;GV?Ub-Xl#QOlsadSw(SS)S0_oHk<mc<khXLU_{Dsvo-
z2`d+Ynu at +qN>o7Kcy*jZiDVl_eH(3p7r4r_-Sb|E*p=R!T>i3-G&CjvoO?U<9V-RM
z8cmy!_&pe+aO6+H0dqzVepzflEA&0l%T%VX?8~9qQ_nhjgXab+Xh3U-Mv>s|5_j0(
zDyaZfJ0{3P=*+fL#UOW1uq;QXYZI$l#r7DYWb1X~Hd8 at 3@Fg`mP)i6MKg#4ee^?5m
zupj~~-_gtKaBQf5;O1f4W6ltR2m_8 at qs)m@#3kiY@{^Hje_*2!NSb(e-?_CuzzaJ2
zeq==Aj0wN*oG*1<-1)$z0|CqNkJ?cj(#s=HqKkFhkg$J92dvN at 7D@OzmPDVOC0gfX
zicsWC?x4rNz$e6AFCf+#nE)i{><q8{cK6z7_v&x=Zhn6C>J9P%)Z0QB85|&C1KAow
z<1)XlsO{4DcBUR{TBY)KNh{e?Ak6foAD&$r|L|-{4ntqb%>4Rc4dE|qvgz9LvB$V(
zQ$I^82TIa$V1#gkgJaPo2#Nqv4W`)}_7i6?1&#`=k6yG`TCTS&T0*T^^31&!^Q^q8
zz3%M%_OqQ`z}!OFpe;|=Wwv0rXPkUN6KEMWs18A~91ET$-M?PALVA;uE?_YTh?Yk0
zwmv7shpl>XWh+lbX3PJnpHFR~;H=RTm5+%-iOl*`b;Yn39}@P6ylm3c?QB`Bt`6>*
z_{Fm<hU%!v?VyS<U}AI;Q at j3#i&QQoaRu at 6Ke;Zdp)!<cUmZM_nt>U0{&r0YcU at 1~
zBw9$jXl74?S3Uy-SW8#C+;?A%={nNEYnGDG2)IrE_t%A+*Hwr3u#Qki+I at xUFgW`3
z<jwryem!^zx6lpHnEv!5l807K(AI$J2y`8B1;yydq{`FE9jmOKU1Cc(Mm40bA~$<(
z$Y=L>;;8e_wPu^_PvSkR67qq9jMlvZX{NSXcDmNbCJ+5_TjiibVS+v=VWDGRm9U*8
zE!ZVxiMWI{X^AY8AX;NxUuuuKTi!lWy%5guPR|{q4o7qdjY~-MYP5eGvPk5FT~#3T
z2=5ejhx)aqI=5!s#=;F0_w*S>ke+7mij=K%CrA^6>(%k%`V0;h;{azn-ppVO#P{U;
zflW&|>Pm;sK<kq}BZj`DC7S--`j*!DnxBG9X)L1RSg$YakkDlvNUe#(Vj(S&#<y#o
za&IM1d|dBW`=WTG(u~k|uyp(Yb(^hEz#IeNmmF<?9spBZygS5~7|MjqCL7u at e`4Qi
z7w2lVea$wt&Y+KQ;p^nPCH1JQoT|N0h1+eQx;wliZ>MO^OX;Qw-ObhwkQF+GSzkBn
zD{=2_Kk+uCRwDmt41vpgG(0 at LtRb8AXdo%w4U#=pJVK9HOVs*zIL^3g#a)Ao2kyXb
zQ~5aa;1dvaDIJs2Iz4OSohieh=#IeZ;Y-3Hjz(4PTL)t4qOpdV9Q;_o9+OrTl_akG
z`85WV5Ldb`n=U-1E~<{6>~f{D%Q{#YYVd2Q*P{iqoFL@}zZzP_4yjN?sOTNLQ&BlM
zY%HGdi^3gb#u}rMq)yJ9me=bdy$$Q9Ch`}<A2HIQ at 6hvSXg2^gjK*SC)S-@!b>e8d
z#0Vm`XC_ieG at ZM+(!xwaisSrCdtDr)3*c5YY_J%|uxJEfw_QZm{$^1f!=0fhcp1ip
zDgu$tor%?vJ9rnt*O)M7=%_t|ARaGW-hdDfxokN5vF+66v%+e{8D>u^=O%7D?x8%4
z at f6BKJHjZNaCh2<m6Cw70?Cd?OxN95G{uFK!MMNK-hT4c`nTKPcsL>UfE0vWh|f}7
zhV#@3D8epj+JQ5aSs{WO=-NOp*x=CBSD=ub$2(u4s at RKW8f0CPBwCKHjSO=d at Jf!E
z&I$LWGd812di=B1&p70pC^?cWIvbm94Xi5BNRcuERw>gwMeXf5sst9ecb$<PwoafK
zU=_(=uH`|hPZpu3Lqp|e{5 at R7(!CY>04yF$@YFL2n8{PYQ^F2 at 8#I;6pz#_EvU-!W
zt<|+^Ckl3{B9<*xiQ*Xp-3s>~++*@}5}p}F$Xs+ix$n6bWN-3x8B>Vwkz$%al29$`
zOz0LGEmvHo6#L~Q1tRy27;K&IzM5VX6s6cLeo*^;stT|6&eHFXte1%O?w+9DBM7(}
zCFF1c>yPLAIHHC-Ts?Y*@$5BY-qXJZ*UPc7;Yc>p3&K2mp+rlaFt`^k3 at R)LU?m$t
zya at c1$S=N)0oQOuOd1#jC7tn`V$<whDMD8kh-I#1=N%YUhULZg)kL1f_L5A%?6cj~
z%Z6vMrmHc)0v1?6i9<vjL<+z3n~aL+NZG0-A_rQq0(o4c@<vm>7%p%D1k;o0R3fV;
zxd<z-m^OPnEu6~r;pn>$M%o7!ILeeep(<&E<fUp9R8QHdsgVZF2a(yW=uSfb0>8nT
z{O?cV>Hr(|MH^ksn at mo7iqsq1<qhuP=9YKOtVuEF(cVHp?|A}?h$*!vQ(|B^h-Mq0
zmrZnBw9>9J;G>)ov`U<^XGaUE<KECpV;tfq4!XvxIEpjeB>wu@>NUKPAQ5V~0Fl=s
z00YRlXuth6K6hOA`Df3sJ-`0xDhuWi@%9drK at W|9?YY#2;I$3;{0bx0#Mh6JrJ|)6
z8RrDNW8D*LT$s7WbBESwz33d1sWq~O?;D09qHm=Xb2Vm1qN<RM2MHp^frGZgH+Hj%
z=jc at B-!T=GlUVLW&G5t3V3)SjOi_^(#<39d*?k_oL0mLd`ECla_A}z*a%$~SSsh_)
z9Xd~!@fH-$V6*FX!lzdo*AxkI0;#!kIo2u6GhX(1rT6vXozsK7N{34v8Z!u2CoMr?
zwkVzzIapv{8Q4_3z~XC2|30%D^|LmmnF^aj&Nw}+i`fE36Qv!)g at 6~VvT1i=lMFhN
z4bNkqsFMwfDF3!<10tSK&>am>C=a)S2<UwQ+Xdf4B1bOv^fWN=d0D<#hBzUor3>hW
z-DuUYY!rp_LnI#oWcg-SCqN>&rUbJ8O!t)}854BBzM9E|5re!e#H=k at 9n&~_GaA0O
z_5%wMCKdJ6z_jTR<}0(SkFu=}4CbSg1;hrjZfxoGF7z&iQ*J6N%i6kgQ0V#ja=go}
z-byQdPN2nI)~=FNfYKRBP{!?`8_Pa3!$T5e41<Vz2Dpld4#$~sD(JWBJ`#_Byeb+6
z4_iO9{Ub3{wKY=NH9{AU^7L%tj0xS9Ac662$Hfe?<Trb<;FiILo-ix}bZ5_D2P=b1
z7ZzN3n=@O at 0MW?ATf~Bm(Feo59W*MX7K9K5Z`#a)D+Xyo2Eh9*B||0$sai#$`}ecT
z3rGV6>63x=M5{b#7vpL5UD*l_(KqV5ME$T4-PW{5hd++VE{%+vDlFe9#Q<p8cP4Sn
zV6BF!Oxs3Z5Y#+cggN8wjJ><#$neC9m6=3 at lTl;&c_d#nFov{bemC5G at Nf%ns;m=q
zs!g1 at WISOAIB3tpcosn>rwf<VzKqaQ<RN7~DZCsv2lh1kP+mnjZiq%;6aDDquh|c(
ze3aop*|Obe)@;E-d47K7#cnEr&@dF=+8>4f(*Q6Scc_(}`(0?%SL;2RqMp)virq*I
z8#u2Ozc%UxK$fhNzlK?N*^J_jMy?*gc(@?Zk3x+DKpH*>T~Y)S3>va=;xQY0sxwE6
z&dCW#-OU9x)=_V57HA%9c|_78nO>>BN8m`a at _dmZFnnRfHzXBvUTU{U2%8xQ#7T5=
zqNc}^$AxA}tj)5}$=beYiID1{(FqdvXnj*&C$S|Vb#}CSL^7 at ByRVR!$tXh6y-7fU
zNCHIhK6H{cT%bz35+;h7_Fu|b@#+BYfJhCdi`b`PA&1v&pV(b_D*~hv2Og>c-}Tj-
ztJf4X)5K}>@~d--m1%^Wl>3?s_q25D06pHvv$B^g>k7XMeZEHDJ*Qt^Svh?@K3;)!
zy>UXKlcK}7BfDlv&{{IVl(<vKXVlcr!61x)PTGTv!;();>-JOv>el9i&AZ#IFB47q
z)+hQ`E3|)I{i{geuY+X>o6+{q5Afb3+WhrNp88)eM^a^dXK$zf1{o{$JM5mbiEq7|
z at _<+N*U(L#Ygzq=>*QZ6=jw>1iFf>Uo6s3D_2BrgxEZbO1|EGcg;Z&KskC`-nf`8H
z#RR$+;t7hW5>lk>g*jc)gUk$=HH1UVOe>r5m<M{s>6ysHU3eD4Rahef at 7tVA7sn}S
zyOFkI>zv?zhy$@Q3Z&(|oZL#00DP at UCLYm8;nfbKqu{ebEDpWjvb2?6!~;-;dTe^>
z5R!3RK=~Dvnu#$iq-r&(m1#u{R!aUl7a45VwM8BcoHnX~U5-|Lg;a+F`Nq>Y!^g_F
zkUzpIfE5j>=wt+g!Cfq)d0$A?ae(UMz^wB(Xb)qu{5_v|x7I~|0m3by)>13)NYxCA
z`}*nnqwT at BTkBtM4jw;>g|2=w*nZ4yQ3u1NKQ7hTmj?GYHXm)@zjuFgV{qqtfA6D>
zaB>Wk#MX6B|Auv6kpmFUx`oKyJu}Lai|+oQ`Ny|zc$<H0 at EF~IMHxYL;yHJbh~>k<
z1|f)i_$fO3a4-MZdUbxLjOP6F$;pw at ohC-Q$D!r}rm+0|Y2=*qLVj>xi4pnxx?Gm=
zyFsiKZNa~ua|yK9i5Ce+b^e}fJv%rKyEH$3aJ2in7^?lvZAMK&K1cto{pY9qh?(|-
zz!!f~mvFf|GBL54r#9ns>N)T2eDo{EwprLQW1i(W{0%O|2n5&`-*R8zD}(qwfOpqy
z*Ly1!T!U_F4X2#5Tmxj<d*VFXR4|GvMsglT9%|Ut)$1_rbSe~5gKRujWWV%KTD1cx
ze)1w&GM0cz at 1g(y;{8YBoFAvNlqE!(HZ4OJe<E@(Kgt^z9d0Q3u_R84=dwC8GceV{
z8Se3DYxC(gc=d$axHqp1HW2dL=3rmIwjj$d=P<GCSQkD+yq3v#Gu|O)S$un8d(BSk
zmMI`b^qj0IZ?$r8XCA3Kf#_H%H?bN;yySJJ$rR6A!O2WhH>dV!vDXwA@~ePx{7*pJ
z9ZCw3$uv^cn+s8S1%@qur`t2KDLts3gx2oS=xV+#J~qr7`69J?o)rDT50wrt`0Hb@
zKwpte7ui+S%|v=_jXNVCb6_Qz+GdM#mv&4{Ua?A?ztn6{A_)bFQMKwansceo at VfC@
zk at y@@PdSjA6)xkN^LRB$REv<RZJ(AzI6Dv{)+Bi{QYq{6vMvPz&t#S<gYLP1vra4}
zu$eJbMbBAWZQj6h>8w4(RCf52r}zJS|H0<hn_FUD8r07vCf1pj{#a$|q)7EM5~_->
zk-OxXzbiI~mub%+9E>Y$L5Wnc at F*)dhwn|sX?VIr<m(-e0=1E}ZIe6FY65Y;Q*M0U
zQk)9QVKj!78J2c2#?X!;8&`9zd6KepEHD at O;rCKpMEE$NCUR^i!*?hlMctnW1v000
z|A{2WX)N&0 at N~R8wYZ2GigR#wx_m}B!8u2UnPc9t85gv8i5*x3fKLYZp^vCsDkheb
z(PgWLikwj at a9^l&|Na(^`mOaR_b-?CIB8JNgWvu7e#!ICtdkqpBR1t{LV?Rjm!4Ik
zM0oCRd>+f$;uE_)Gj^DTPSWXO2*I+8b{^1MjB1}#3ODvC*Nq7Rq+Za>Sl&Xlt7d#1
zQ2!nvmN1+JUgQ at WoJBD;E<ut$UZc>&aMSb}l7JhuN=~-mX+r&E at Oa1eqw<rr$3S)&
zHc_O at X~<f(;jQm8M%q{KouBNDCqu7m6k$&+Pj<Jh5ekGw1+h;fdtHEF04Ig2gio1{
z(J1`FyTr5|yttm)j6@??0oOjlJ8x_YFJBRb`6}o-Ji!xWvz_M=3`UKhnRVgydij3K
zU+2Xu)!QD(vwlh<ibF!+GDeIR(Ey^__BHWc4@?z-%k}P!U{Nv-+1=@egC0cAgfw+X
z<b;a at 2{UsJ)lo00W}CW$S-=j|vNW?JinndR<Kh~#Y^8IH?+2d4(g`xF1T;;pAv57C
zbmdd}?Y&9?uVWrCo3<n`;Ihp&r(PzYfJh|=2pd~QmZIaW^T}@d(rrN8KgN2fr;B}^
zFxLFenB~+Wh5;agdweJ$bQ1O;F at iGQl&D=&G;k4C{Uo_t<-I}?gW=gyU<Rgkr11*z
z=9}oxmI|-tndH{X=AvOl4w>?l)NXk$-)S*z$$41EvBBy=5UG%ruxtN2%M7to(BHaU
znKDK59WY4y>5COq5TTs2UW$)S-OWf*YFOZeI0+CqeOcNT3Lx7Grzoo0=<w+L<*PWq
z`#~1>x1N~u=7E{#0Cu4ydK7+(cW4cE at JX$})H7a1mW{XX8G91KZpWBJlA_5G at tI}`
zbHin{cZu^iZUaD|FzG88Du%P?Xpmbv^2EmDtj!`e$jRXFmrxygCqElKdauCYM)J}0
z_fxq`a>;M$eeqhp)A0Vo`jkLJSTZVBE0%J2=H3ujGB_gQT-B+pVlSpCm215x6o5I3
z$RY4Q)EM})3Xa8T(9?;1!NoZV*$p{CKq#UF!Z|3o%XX at XM-F{~&y>YQK2J(BW~sSU
z;c7s4BsW8Rsgtqt0(Gtz3Az;}A9bNl#m>NdFRo|;Xy`|HkY9%CBJyQ=#znI|9DRjX
z6j=f@<4wRa@@0Y!d7e_SNHZ2?a3GSh$S9J at r0DL9AjXL3LTSfNs|t*A1&cvN{9%m1
ziW+qLZ6%QmsjrWYh#^3J3wPTj^Lb^L)@ADHDh^`JN=Tq`%8cE~oi$OhxS*0nY6*G7
zc{0NEOn4Qeizp;$4mb=oGh&X^nE#1tE}O9zx)MK%ArI-j0^9Xrx5YSFhe<}KppG5j
zTz2ypJJgUkv=VWzkKW!Tz~C(F`&Ro{O-BTBd5iH28|{j-Pz at R>Y;RTB7Cr%^Nd=a(
zxEue1il3kd?LG=Q6H$xA;LFUnuyZbKJ`ZW at G2Gn@!0dE32_A-phKmn0>N`v$qPtM)
z)tvW!0`?z+If6|IfVwV6u)HXo3aUtYHd6&M+Ge+~O(I=R-ayQZL|EZ!2Qqez^LkC;
zSM(Fs%oQFS;8_Kt(=~%#Tlp>ek?lHh92bM>aswK_WL4UNq*Z<smnM{N%!rLr at Zi7{
zv6l3ZV?!v%N~eKn$eN(N1z0PbgN8yHHnGq4wCiHI1JvEKpBxO=cTRCvosGUd8N)Hf
zQ&RcgqW&~Wa&*dypUaOq`1a|8!LoHi*M=y8%!$Ir;7*k^eYV_7rJbena&@q|`clmW
z&yH`ct?3p#z5N_F at G7CoVtYvmIePAIx^Z=j97+i}Uu&7QZV1=FmX at czD?5Pkyo^vm
z;Z~fY91i3`qWPVX)v-#^@ZndK6swa}n9*phWVnG>xGZUBlkqYj2<q5RDyZsv!=U&)
zoV!pGTFIh?eTv*fB8XnXjwWLh*3SO$@HI)YhaS#kszpJQT{s9Kc~m=kNIhfA;V{Y6
z5VQ&{!Xg2BNyh39QtXBN9+QSyaItTBWzawG!Lq}b(h^~B>w}j^l!B1>AVt`V6Hd9$
z5Dds}OX7Df>ww=&ZtX?Jxr!2?DxllBW~6pFT|UdJJs$Q_vq{(xtW2OpFFF^vwC%5A
zxBl382d(2kF?E;JVh^SRtFz?!Gh|5>*LD#{Oeyr$$T4tG%L_NhN`Fp%5f}_US3XCa
zl{pm9MtwAJK`n`8eFCD8=YnN(1fn?~Na%sTM=e4;Y2-duN_%vKci*1D=No|^*&P77
z!%Ya11WIhp$FLTBN9rab(Y}w#f}K&bB{?;D=L{qx=>ZXZ7TR4x{Z)qCqV35{6%4nd
zl+ILb5eh(uEh~MM at daEXvs7Eq0F}Oq3VQ}+NArd)Goa5J>Coi%cLRfFajUeH$o>gz
zKx%n)OLa+ykpO9S%*>Li!nf};GHn#kghaVG86A at Kr+A3=-~A+2Umhem-ztbKLY*%p
zMF-S_x^;TFPn=P*0}I;@N!}Zv0zf^A3aRS`Y(s|{Ru31dO!ODXgc=fMc>~H#4qSrY
zU5#YJf*~r|4bo4e at mW}9tOtD()ltQjXdD?a*VGwaH;jvU(%YJNVCQ+69$XQ6A&bcw
ztBKPk{Yyg~zoHR{G&FC`#1gfcP-Q|K0mRy*RxpH%vy1m`dbPKNAAzH0!MqFQM0KUG
z$FS?>HHX2xcso8gKNxUn;SP%gX{s`XS)K0Gd^42^a8*qzfDJQzcC)~}T9 at Iu^Fp at l
zhb}Dr8kz2RyBdboI=0)+BC=yxO6e2jvDyeFzBaQ*7KrC at IBD~&*mr3A-6)Ba2Zq*5
zJXGpP!T+ZX`v8_w6-#@ely?ELi2aDhJ=m08tq53{N>apP5`E^566{LcGscKvZCZLL
z%s?scGucOus+T7R%h$?i%Eb0?_qoKX%ekMC3fCC5RwBhO(%yAuK#b_I&<UwKR}cmc
z6qzt)U^40z{l-<|a1H;0g^~S==D1pBO`R-^DCg*zt$@Xp>4Th-shp8w3M4LSh%ov~
ztlRU;^SLip={$iL>u>S^1~aM?gPNh^!fY=B<^*Ht;EEgfiR^QfVyOb!(g~H(D_C4c
z!<B$cYF*V^KW8?{xxOYSHl$BiI<lKP#YU9S%f`5I<Lb at 9vUDE|Jt;kXVIr=&SQi6-
z>*L;)jC9KX#>SE#s6}S30?y>K1_{;cEGzPbai^S;%EXY&h=0MkaPoXs+<>wl4OXef
zV-+K#8WnoR4JHPQ*RKDTDC^bLYjoxgC$YjC9eRU5 at 1wFg5RdiFfH}H|mfGz}e*rg|
zG<8rl?xztHl(bEertByT_M(V{5>)_0WeRxgGYmcjT)Mu1Y)@N8NEs%YeQv at BDle^R
zViqNn(5<h=`PL8Q!sm4l!x`$nTs~>Nl89gIs(0dd3ctXjo6Sm=%mdl!{)E;<J2PIj
zRhl05t*r-!O&+?qG~jC)^PIu+h0-*jp}UA(aWgWzEWN_>OgfiJZw4tU2&ycjL;4yR
zOL^p0o|evbkC!Y&^Ath$qk%sSqCla6oRnjXALQjZW-{^>knvQuMX48h%k~l1Y1cs3
z5W)oYIwlP}Ncv3|DB>+yOkNx35w*-|@PJJs)#h9x!>>V~;4fA67NA9jO4vDw)~Rfy
zBGY%ZQ_dXt*S>mvk}&WQ$GN%sR5^em2)m<M9sJpy-x}~|lrs?emgI8WrGptAFss8#
zd;)g<r_HoEz|wg0sJy8XOiG<tIpYaCPc!BU9L<xaL1{!cIZ^$aL)~?*Q at N$xs1;|!
z?mrh73axv3X^J_376}6Vsvx){FxfUJw&~H7y!&>}8OYw3Jef~rLJGw@;yFpfOb9j6
z31%%4mL*wNLV#vvIT@|^C;=F5p#78&279XNU8Fz}%r9?~=|Yjf+%?xM*godWl&Zi;
z{&=aF{ii*@(+^?q#ERUu5Ht`w^4_k?JqjzsEImFy!AMjKYCwH3#FLo0xfcG0a!Cha
zuxfv}gk$Eairu9Hj!-Mz;Z*qKvGORVl2av-%K6&lo0XJ`{v-pz*2>VsS!115g7*Fh
zI%nk}V7sMF^ZQ>yS7M=aLP at bAxw0Z3q*1)D(>ePZ=}i*l)t#Yg%18}B*p*(_EwIYb
zS#?u%Y+mZDsdSa&rOj4&Oxv_suWRv1W-%<XjCh`Gv-W8>a?G#V6tDIf50%Ndi<u9L
z;sZNbtog9`gX8t&KV=sM0Y%*s-yZ9YjNM{02RHCGEKC)R=WAOGp%`Qdn7$BwPWo)&
z+l${y?za(05v)VYi^hF<j68KC#S;}!;F~i`GfE{1vU}(>cYXD9sqnI+X?QJ{iAo0t
zi>GIMTJ#$KiWnE?P`3g{eUUtP7O4S$Uy>(r>F*^EK)*<zS^B$IT4K0A_^+ZT#3Le{
z3;^+4!Qcq`PC}t`Ziy3kun;*MO%P^4Sxs!p3MR)`zErmnjflKXLI81i$X?V)l|{kG
zZ+Qy2B?KPZV?q_dNcl8&XJ&6*UW)w`pK)&`@*m6$+;WG_#B%(o8-8QM`_=+ZXna^#
zqEoz4f*c}8&@qEz5SSuaPEASHpSb8`1hsdfRY|%Jw5!a32p{JAx2L7yL#8QcXqCX+
zt at G>JdcXmodrrKSB at K(hLxm65mN;L at 4z%AG6vUI++ejS`piZSRU{3_wUZ0u8knA<R
zNk#<W)D-ZS-vF(||E1D&VF^GZM6>Ro(hu9JOVYa0k<}H3V%gln=^*g`^5k)P>I)8&
zD+Z)VXeSrt8MTM`<9KK)Sy_h~8zj3RO=5CY`RE1fg4tWenYFMeU&kAZDjg+Ai3Vna
zRcEUZ0|kjwn029l(ZWzk7$A_?oK#|`ccgC)r9>7)R)|FL=9W|I>u}PqGI|ad#s3{R
zDEj5_a<rO{UuxCjb9LV79G9YiBFlnyl_ycgtK^VFDy#viu^TvObFG2MS34?&pH3f(
zbNO#$_A~Vsk$PW^n)z5^Uj0WKC1QdfnLSEs2*90yt0i75F7fJoWsLx`3^c%c`tYP;
znkb|7*HPiI<H+}5PFYIn?=dGSLZaji^iO~n7z*YLr>+9S=;KRB=g79hqXsZ-EWm6A
zDXuao%!|rwrQ|7ntGpIWu5`t)3Ru5#tRry3s%<h6FZ1k(Fp7}guSkqeNG#co;xv=H
z^p<dXfwC^djX|IebKx$M#qfp*D!*(RldlHzb1Z at 4Bz6|%P2Gwum1_%owrv%d8ulXl
z(hZ8>jgHR_OxR87OfIhu7R%M+`$}ZH!YOvJ>e3|~(3o>3UE)nR0Hi9|Q|rNr6gUPT
z1B*nX_y*}lQ}EK}K^tCn^WV730 at P6R%F|Kz3}1V+;`{((C<$f1!cw6mSqFAXH+XGj
zI7nj6!_^tfXgM+Vh^poyz#g_3^X%=q8GPe6UtWBkO6YGEY2 at 3u%)GW_J9PaZRW8~j
zsP(8ljWK^W7SV&#-68G~zBnMUbaivpJZtIT-M at P<Wit8bMOA#Nzgx2}y``dcfI9N^
zLGU-{(i!{F91R>`gM>u)pb10R3j*1`FCOtsH6B%%EJ5F5de{6FhTJ&^CLXeLqSPbg
zMw7Fk93^+PQLd)MqRp^&=8=4`T1~*b4i-y};R1aeFt$tB4YzRKghd0FFK@}M8IG~e
zRi*?Y!B2*b_X?J0LSXkAR8As0%7W-THS~2rnw^JOVuXPl0=9|N#^1OX$q52m26Iiq
zt2E(hZwJ;dFYWDI<04%Cxvs0X{oT6pqldPiuYPW at IH60%N6Dp*_($QK(y32zyQZ2K
zhnX~GDeHqCy-*`?D9mnNuU}f6cpIf^Q~~To2V9L!dwe at P`$N@((0j!}YzIC!l{zV<
z114saW+ko{iK5}{hmx?cd~*ZedUR_LINUU5MiDFisn5v^807R}Sp^P|dz7glO@%u~
zgP|pu-w2q0rhh&G at B*nin3#WXU5|%qPQX9{hf^#iJ`EVi6uGzanY at SIqnNlhj0Xs`
zKlDh${o_}|oe{bQoRE~fIc)P4ryBW+jo<X?=%xDFDhE+cCE1iZW}dY!CJ9o3odVgk
zpusHl4=g#n4$&lU#X)3h9=H>NpoC&G#g{$6hK%UpOzBD|^1xK$7`0Fw=8!aqZDcH6
z at Q4vP4KJMkf<;hst)|Eu29mPwv72sex_bz>b<%ZPk&dJ7TGVPp@@W)mT^!O14Jr-7
znMrpYQ0eIUAHz~g;bY3loM5*IB_=P27#BZg)MZ}%J1<=>gF7?0vGRo+TqQDbj$uo|
zW@>{5?d-|jr<=%IZ7-1L^c`a8twS#M00x7UPcJXWAxDsiobP6u2?3b>4xWR)-uPJj
z639uzx0(_xt-*Q2x&&sC*cKWH6t#bLHVFbJB6C(TQ_ at ef+(KH(*=y_#rC<BydXoJW
zm1-(sJ)+toCBBL7XugYJLiy678(Ax=mG}=KkSxdu-=Pp=!dPIBzTBdR(NWG}-Bjuo
zVP=qz%=MLTw^r7-?%u!ep*l%j#fr8}Qo_7IOZp?*#IS9)Wo0gbQPx*<jbz-A(fo@<
zl5Dop6ZPPNM>(~~ay6`>^wKie5Q_o4xt-A=VPDiuuZssk-sbKSrGAJ1w&}O7XKS^U
zP at o5KzoAo1{XZRZL8ypuae2uAJz{<(m90+SpkaF2oct5QL4t~>JGoSQP8Ri1_~2ar
zaG4c{bgV(lo at v>na>uR=tVAfXE&Pb1jtkBz1BxT#t(oMN#~fHR)!?MReCxfMx at J*Y
z;xt%cB%N$~7OM(%^uthO=1NOJrQy(L2catCZzp9q9FA98k0cZ!M~BV`nS$m=VvR34
z%fiMKJe*9TQ(-L<Ri*e*M}9<GDtO^}>4b{N at Yu!!U!+rUpxk0b80xG#^ggxeK<bpC
zUXkn~dhv?nPl9))25bOae5z%K39H%J1tmW5K3INcbQj(tlgUQj0qsC1;!D}UjXEgw
zZ`k`%Nfzwva+hRStJi&7elNW(v5jRl;jZ^_^?UaxWdy4)VMNd`v-boQM_wo?-+e6w
zAZ=D1Ri-ZnCw3N`=acyqDo3_0=kL^|<(E08AHJ<^Jyq7_7fY}CPZa`E<T|#J0bb0b
zGZOh$&c<<%%3^uQ+vj$BnbKZT5<nj7fDN>ZOR?a-R9-r_;7R**yiKu*mep3s)xiW|
zlpZM{ZjLh|m at K$Fmo(4A at l}%A>!7>)?B=TPF4Je9YG2CrT!Z#ehaCc-G$J?6Eh_XZ
z2#F_sO!!^{Uj<++BTmbcXi<@(EjBy}8F5h?zg at w6y;JSx>h<O()UpIo3#>k*Y#>qO
z#=1GBvYa{OjFl86L*-W$N=j0ToA{Q?n7$1P4Xxe5W&IVU$OZ5Bgu@*s04Zyb&4qom
zsYIKMmavh?%gs|jvW2zpnG0BFP)-QTlAYM98xBeOM}Hj(xaO!;&=OPPU^!vy#&t(=
z$oQpv+nY|jn$}!`#A(<(LRTY$hM=qT_%44gCGtO$mz4{83f~B}aWP9P&t}D-Fx6F(
z^3$n>xY;}82%$Cdw at Ch|D9344Kx&Y6SPFrHh&qR25Ss8L>@s%C$%@Skx&+p>r={Ni
z$MNXRTG#tqlV+7jL8z!q3(GV8v#>!a5X$igTrP at 01^@^*nm1rm)dUOiglvc6!_VP)
zL^8~Ys!_1q<+%#hOz`4dx5dE0ePgto;UTKRdUfyD6(%ZBrc!FA5N_B>zh=PBD&9^B
ztoVYUd6Cp;#!9*2Jy~{;c}U^4J-^Q1OhT1^6$eqrY|U6<mqo7thPV)Xw}1x|z;=(?
zsu9Q`jv=)2Uj9?f>9rle9l2o)cRDZVP=uaWFRRh>{L|EcLOP!QVv1?t8xc^^3;+oe
z+!PU`d@%BRtKwX9iQsOuDUZ{GrRBLT21oWy0Xh<YAII>m?qH+M-0`i!Mhcny_5uV9
zR at YZtW<Gwr_u{$lVD3LVsW7(aYSL*~NHTP>WshWW)r#>-GdSI7R0({|v<+Lu9f5-U
zy5J7Z1sN1DZ*IDZ?+1%@iNQdYrTc66)&j4-ra|YctP6?+gvB`SfXu{D{*bm6lz2!L
zfe*B&pKeB!8r>^}U>!Cx$VX1V0lX`jAKydQrPw0uZXM}j0R!m*aW&QdpkOh{lcf{*
zE&8<saVCnia05$V-WAPfK3~r(B~e9Sa)ERv0jxRvGa9pnKK8*3G^|0TSHiY!!4!og
z&M^k9>WY`|T}dbqb_kQ-l#dP&p@!6-7IAAGo=JX at ec>1TMJOFdC;JQ$Sk at r5jR?c3
z>Opm>xumagN2uVrJy<Gc+-VDu%d-zdwWluCb4`pN7w?BKUNt4!UMSK$?(Q>;=&^E_
zX2#1C8sBAUG$Tp_B7>e7S<2KXsI#c^yy?<xrZ<cTmtfvlxvCIige-pYb+5ILawgGu
zO#%=1v8k-L&7<uKj-xR(M3vB8kK0?{NF?`Q8z$1j`wur)s4qG^MY2aT{&Jydh((x)
zR_V#ryQRXs>p>R)#=8?Yx5mYN+r2SeGJ#5<?x7j(?7IJ(V}<sE?{n^g?9EUPjm#1w
zbaU?6k|46;g%Ph#@YlGtd*~-i2c-U;kxwfhc7MZ5;g*~D^m(RoF8vR3m4K`fkmH-l
z92#&miYkKe+ at 0Y<GCX;@xk649D$?D6UL~t-BWY1Ro2yLLA8c<v9c-`Pd9XS7E8c_W
zIZ=7 at uf_<8X8o*hY|zFrA^g|DpVyz>{bv2?^5FXCpARk%9zEV3Jo@&*gMf3qk?-_R
z;^)6vPHXN687$J|VhXfk7WFE^ml2mgm+~qg9mG{KoVt1$u2zS$<JzNqsP6xwV=2&r
z&2uC(o~)y&>0?D~PIAVx&z2DBsz<$8wa_saO*k02wF8A8 at _lD%bHzu50_DC<pOaUk
zckTOOqv0rr+rqOWRNUw(GHXv>Aj9q6)@u>0N`uCO3A2)^tpxk1Yba|hl>ficG`3uO
z-hWadE10#1(`kjn*?Y>dP;*pxB at xlf#M<3I(wkC2kw|JQnY8Qy^Em#b_H^F_U>^?O
z0^71ME8YsD!Iux5nu{&ho3g^I*l^}QNIGfqzMV~-aoqxEd>DareAPHHoU5>lp_EX~
zYBP@)a}}<`(rxm06U!CBiFA4yKAaAAV(Ve#E1S;b?@>bl5lZu4+y6vA;zt+|3EX+;
zj}k%>70tnBY2%X`b|iKUHu4=|aA2ziUrBh!yG?3~3RtY?7&w$vM?^O|e;Iv>u8EoY
z|78G9L1;D~$q?6br}u*KZ645_yxwR+S?F>!MNJZ{GbMF21hdoAaB7%ZDq=55Cm0>l
zdrP{11}OWo+U!KLggRDiWRE9%SQWuX1DC)qXK_UD23OnCQFxT@&8imc%OXiF-Q!iQ
zrK2ZLkFUfj6CP{iAT5rXxM4kMw)V?Ql=!}QA4)|&*c=Je;z2tj7BNO?q&rJVJ<%S^
z?zAOxh={OwU7>uTr>c32>#t#>;HkAV^)ST!f!~h;t-!~p-Mvp5DPeSP{lV5|<D<6k
z6R%9FQWJ`s2;)4<i7_Do)f}5*UEz(Vx+JuZI^T7LQQ at A@MWPwqme$Mo{LcX-U;j#5
zk<2E9u|__Nn~YvG?PRZ>h@%>25hhc40_m2S`jJUrM#w`KFHWYH$zvcTsAR6p9wh;~
zr0bimcyoBS<=M~~=53qK=9JN)U_8%xQL(L1mO*$<KS86$L9{}M4m^OxAIB4=#BQ)o
zmUFbPZIGg-8=<Zv#D}mrJr*sJWtRAX{PK|gEXq4BUuV48!<89J215w=h+HRHT?`Bl
za7A0a7#MzT4m9+3oP7%nK2`m{I~m1A$qg*<C~!rb$D4#j*>1ImCgBml>b`E_k(2&x
zaH#E-?x at 7VF!!3mw4`4)RuWxED2r<lU(f+W=?c(pgT5`gLB`Q*558!lQyDYamdUWN
zCL3xIMb&GlRguZh(eKC=qv4AeMM{X55i2!{7*id(_Hau3>Oa;VRUu|=)Qv?5oy*;u
z*<~f=%g7g9RyOKEM|fO$>5UG<$;CZp;*XKPB(`bPvBuub?&S#>N=q%gR0RQ<EadOg
z=WPpH26X7t+cY?3<4;bG-jbF9`+}cBt7>|p*_z^J_%#}%hr;yN(;vc>3`2&EJTtgj
zu%~eQZv(5iILuk%P^hOD2!l(A3n1UPRxJ&&FP6OjrNQ4xc at vp^IryTS>z9LPGDChC
zd@;s6JAM6S2!fzkaD{#iAXBmdIFjBYT?}=HX=((GN2Grb2TQ*pTax*CGZHtwbu>sV
zuguxHQP~aWEr~){5On}qb#jJE8~Oe6ZfM{fAeNXucBbL#z5T&5N%BZAPt?UGA_pOp
zNp&dnEB^E5)909&PdB%=vNxTu6URx1Kp;1;@>sRU`|0I`qrkW{Sow0Gs%rjk?W!Ma
zTeS0KExTU(UGp_<g4X?Re;t$0+?n;vwVVBc?#_DX`e$)+-(&+WqM^!D4nAOOfdj+s
zH72I1C<;e50{O9B!xtJjGWbnqJhM|zI?hmD!%i4ymK=iwj9u*znJ*N=)Z<lwT81!c
zCimA6mHnmcxW|V=9*D|VsIx5TMEbmQAgPZ_lpwu*`*yYYf9E at s?1p2tBh850HczcS
zd-v|$%1=N2^n;)8o>Whfm!s+Dd3WvbaIk#${>IZQgS&KJI&}xh`!W$$HVC7Fwol<M
zTC#jb&FrJhqgIw~e-~92&D&11Oto_$Lfnj7);iPf-*WB9R^&6nUK*w65e^A?8%sGy
zD2^%CM1qlsl*Jtr$@P(*K8LZzq?Cj7Csch%xb(#p#4cP+PmPS*WicNJnuS{8t}|yg
zM&<0f4?tS3$T>TNNxR)Ycg7~nH}8I#37H2+FFB{5vB;q>d}EywBFj2EB{2_aYyz@{
z|Hq4*2{E<k`}jp~M8gWeDO>bqIzp3S+e9fD(iG;o<A`$zi>FsNx>nZ&Hjv=qC6*lC
zZhTI_ at -V{BpsCvrvK4O8ajk>S$ofKPdrlYeSgm^pZlV5Anpfw at ln4)AysH0jT54S`
zm$iA6QBdoR?ifJT;{jmW!z#8E!MAp|c4N%hXnWY*z8-$NwXK<1i%0M8qTn%JoQ<6a
zXgCv)-iGN+xAm#14sz`|*1-f_^fv|AA<X%ubtq5ld~mBJ;sJFCL84iOovR<bkj~jV
zcNLl9c{tjq$DJngV#-}jQXg5(CU>loMxy|Tl8j|_MVc|cSRES4^)Bms_TG+%jBkw4
z0}p)loXT>Wjop1kXNX;x<>~#yjG>P9a4>!lz}w7F7yRgY)pT;P#0q+?T at F3#|A9=-
zmIl+VUA=l$3P-Yy8hiuoe>@sT3_ZtjBu4j2^V%y!$sVckByV^;bxi}-@&Hq0fj%wq
zdgsC8J9+z!>y5<a+&)e@>agsxSe1zSRaBr at 9X&|Gp?nw%>^53J_xR4&KaGzoKV576
zE?~Lafx=rkMRymG0`>L3k>Le3$&0o_i&L^`ASW at _;sKy4#qFj!EG6Z7E#X#Y;X!p<
z;W8mYGg`Bg!2{S$$Y^VT3JaLuRtK2y6c@(hOJW#HBobj}9KOtpoEiq<)MoL5Oe&gM
zr5x>+4;ly^0Bc`&z{PX{G^wMhsHBI|-gZMC){k9|W7mdH-8}x8&71KVO(CLy!kZ=w
z9D5iPdQF~=O{uu3TjU8#KRG#fZ<Ii7d1C-%ag}zXr^oCGz>|@5cy_n;UzyjU0=q7s
zmE=&1AZ#tTXGKtpVUA2%>#}S5abX4{&Q4<S;c<RS;5!%~I at Ion?lPcEiz|(z#iX2?
zpo;1gZ&wGFuwu2v?!?Ndx-~~#03L{*I+`6k>$)yQ>#WmA<1qR_i&J02{IgrEc?*t)
z5dTV8RfoGAMQ0K?<#YOJbaLb}Ikhk8coRjl<P&8<v)LB!SOw#CLojxx=UlV1hQ^uI
zJA3B`$5<C=aS(}aiB^)9in=%p&k0o>x+yPXmG%`7%<1rj?AM05aYg6Jy9)rb^9~Q<
zJh1r7c|eiAjJqqMB?-z|P^rxNe;6PNl@*_+<%Zai)QaE-vKE0L*hQRdOgSFhW9iz>
zhr~-$cym|X1NFz+vmBfxo`*xOb at 8!U at FAPv7S67fN1mI(#}L1`3uMHl9kndW%m7H%
z>pjD`UMA9mTQo{%xZvf+>W!<Fj8N9zgm`MHXp-Z$oINl22A%OobQILkbd^&mM at BJ-
zyKH at 34wY{a9J+67BbPow!;`Z&NrfbDs-9xvZe*L<8aQYyB3+&tc`<p#XE2*2LU*A{
zU$8U;CA1C}wYEW792vtX@?{^^v4GiOxM~PuNzYr{c>4IsU}K%2 at cPy!4M at tN#LIf=
zWb`*E4kA{s=Cfe&$5Iu<`Ym*5ACK<hLv&xfT^uqLWfe&^m8y7F^_TEqA;#Ntf}F)v
z!9`&us=J&E(7JaL_VGkDRcXw?n|o>}MgvZoiQ&eW7&#27(h1+=VS|%Fi9gNvI(nO1
z(xVwF`cpROp+pl7isiT&1=CnH at i_2iini2;$jQye;?gI>kop8h%2v7pFtY^jzhD?b
zi5ldC37jf&0WVI*DwY at 5*_yqA(q53hYAeqDQZ#?*<Wq;s6?VL$+eR`EOcou~uLCbD
z!15X&-gU=Nf)5Nmv6jGZ9Y$`9+NIKQ0;@pGx5`IaUNHdRN*T$Qg!t&f5#Z`OQd at T2
zEW-V_D1G<<d6r8PU-8{9oL{UcCXL1-GxoWqBAI`{_}#`GpSL1j;<GrYt?&-QMHT*3
z>zS~{Vr;+G)vVG1-7H<`ljeUHWof&J at uUGMN<jy->$kZGw|X`kXvS57 at Ue+gMW`2*
zsm9)}2zoN3gC#)>KD)^I;apjq4MWUGp#rYSI9J<$+C|Aj#uilaPzZgK6=W0ossw}6
z8Sxmp?-=hXdz}ZE+`H2XT=XBkHDc0<;8$=2o7s>%t2rpg47c9c*`o2??yHF{&p_nG
zxFVoPLelM3gxRq}5UM~a8F9+Q`))D$Q0)n~&UethHr2U$QZ!D?*oYq^07 at ci5xi^U
z+Yfd8rH(361=JqV?MDn3^lKT}vEP#E0a(ZTu)>0EtXM2+N0ws_s}!=3<bRHe$Y$9W
zgJ^QWX&3-*1cZ7s+8T34Xe^kuwQa&CcG2b8;WvpOl|(>}YBdCjX2$G%#jtsDXWo}$
z#bq<#^o&b^dg^t9<e=|#%Njwd+$vO%J5})HAo3ce8<gayP4YA&PhBch$P1*oy4rIc
z5F7AE>Y?E2q!nRuc5x_6FrQ^o5~5bo2_Z0AZ at C2n+DcaM;>>u~-hL<A763e;p#7fe
z*=^d-JW0z?(W;O_YgTJNT|t_eIVwH1zLtU`GE%gfBxNr)^*WfjzS*yJ^jMTw;QNf8
zK8nZ6XW_9&C_P at 3SbX($F at FrF%|@cHmQ|+a3JoMN+;CsF;pH&|-qxL30o_t3pCK%~
zrkB+3H|}hcf-nJ!`?}xZ<*QndG;N=kC1`u$Jpz#n7eI-No#(*`d`BmjbAjYUF(a9%
zgr=-qPpo+3PP5#plk0t(T*%XGvyxQL0h?X1r?G9}9TM1Wgp(DNl}1v(B)>$m5 at QRz
z4|FQA)TuR0!n9pRFfc`vaxt72+F at Cejx4i5P6_%c4&GAh((~s_A;`Rr5P@(pIX~?t
zO~i7e_9eGsd9J4Bw1|HG98%%}z at VriF10K65rzWWQEuo8d9=8>UX5ur0?#K$i_2MV
ziJDm3mz;}+;}?%t^=S5CJ-X=pj?_fBx1c7R6ugLx0%blz{Ia4_=1T;NpiJ?3G>C|-
z2-FenjL?k^#ndI=S%a8kLQ6=dk87E^ENH-NUv^&eWtf%dsJ+09+EicJYRkHT*@yZ-
zkbxND>^xpMP^nB-+fQ|i0*|#`jwA=rE^rAgIYc>W)_G(*-R<I$+*3hNma at eZ+azRD
zpD{s?WeruM?0A4jmtyWRBQexc8wvh4jHfS*o2l0K$HUW&I}<Y^2g*PI8RlAqx=dB_
zF7DJRIdn{UAp*Y{?OyChWv0PbSC%~6jzk@%&>Zh$tK~I#UXDGKV~?~1@|@uPycWG}
zbWMwprcAK(@ZBSZU4kLwtdDqsmy<c<CiNJoJZYi?*}Kg8U|TKRv|mkApkY2Cu@#)T
zZl@?28+T?Lr(wL^z?e3Sax8i|G(Uq8o|Y8Z4hibX;9+>XE4?>hOvo at 4%s6|q-*8`g
zyy80Y!%*!~h>1+i at StU}+oDxd7H4OjwD2j)ZYfLkc)_v+0zGZvOh8mr%HRUc1poG+
z4GV`Sppp9`nAq=8Co at BINl>R16gN;XsMi_n#q-80&ydB+EErN|**k*zOo6 at x+(y(m
zq1zu#p!Xy}1$Agctzc`EIjQ;Oni`t7Bmljij>!7Fyw$w48ZF}i?uR~m*;L at w_x(WJ
z(3vMnH0&ZTX!pVr<8!H-jy3`um{-A7O}O{bEp#;;oxcnyt{1WJ)2m7xQXwjy`p~+1
zL58dvF6NSPhf`71#U1rh9d7sWozsf at yZNq|yqvMBLxmo4xxg5u at JOcWBL{OLEg7dU
zbGW92FNaRAL}&M&mdUjwj`PTuZLv{*nbJ@^Nh2p7a#RQJ>@`{?YheZwY?U5MJ$3i}
zcp&vJVv(<objMnz%y&3oX5r=fjQTiWiCI>Y=$I?X;Mhf8xgI)l8WSr~a7*RcY8;`C
zL`X}4&}*rc<1^Mn%(v8)S2tm<ZKL=a`>T`S)xBvRdJ<;MDyv$RJ|UJ9dgK%)r$#b!
z16|pBfAJZVSrLcNa3Cn9SRf3<OS86<c5hva0VfsI(Ol`<+CHg*C`Npj1mE;#fdf;R
zbvD~H?d*eTo?(p+9Y>fhxglee)s1&ynrdJbCsRP|M}nt@*(N-PJixH##d?V+AIp$B
z>-l+OjHnDq at xZ<_kv6=4CBA>c6`3cfxujTuCJ?%!Qb1B(h&!W`*BCkPB-hJ|f~!kW
z2!y?_wg&xJ%te^sZqbl^;%qx(dwgB1P8Wsk(F}n_nT@%-ll>L#%lM?jlacEyWUV_b
z4c})=nc}_lLm at nE;>oMy89V4UdH2=J()Vy;m(4Rs`!jqc6AxSf1~I!uHDGGCkgcN#
zB&%gwZO0g8q(Klu9-WX6r*_V%7 at e4xtO#U at K5nLo<r5ihk@%AgX<M3E(F$s+PGpG(
zj!1`MPPuN7Mx0uR?0wy}tysvkYZ{|Qfe3T++KdGztbH!~vc+u68j4uhE>TJsMG-6s
z?qKgMuPKg_32V@!^o-}Fsmm$d*y_NsoOKuWRcf(nYB?ZiPr=n(vL6?-i1g05n at Pol
zoXNDO^%e$6gi+IKB=oP_1LIPf><=B?HZrMI#~lOa1>g?M>9!}XM1~Ti=48V_yE}k1
z+%tr-K$-ne3r<w;<ktC1r1sgy9c#GnCBnR)6lq#f#_AJ<XN0_KJZ=IY#<g;>(-B=P
zM$uYDJU`0IZSA%6bZ7tQeRPm$s;mOw;Je)=waui%PO|4$CztB}Qm}DAsOWQ<?omxZ
zxidVu&zIxfzSc2GfQ_`-p&uS$(K7|5iz;slf$)^;AvtcBj^;!WF;e)7P*#8X?qKH#
zJ5QQ1DcY$cfebFdNWlRf^Db!<mi0xPpkftyscDzgIBu!?(tYIoUaX2|%WlQ2)~B4$
zlUvM|e84gjL8=%7mWu+h9BPAQ`NC;ba(OYK0MU7i;d6KVSHd0Jyv$Du(Np|>K)6lS
zdQ|TM(^Z9KBjB&?-R2y_%PDqa&w=o*`^Zx#q){%_v0lSnfk$S1B$?wQ0J50sP0y84
zR{1#ZD^4fNvyIKIyMLzz+uyeyu0P!lNiYes1_wK6Nn<*ti<S+VWk!%HiaSkhm%Lo^
zWa`(NCBGNc^e(`ry%mdH_RQtmm4Vx`b}xG at k8Gx%YY}5nlI1p~zgHAr%>U|dV}^d&
z+FpP7M9$J&M>7;&h|x-0E0B6RS>8(QzC-f6YbI06)S?^9a}q$NR35o=|Izx>?^~Kx
zDxx*02s5Z>k;qnu at 6|L2VEutOr;b at fJaBX>XveOE(sBROq!>7$nV~x&X;gqB+zk+Q
z9e|dQIP|r>`0-*XYb#sLyA0 at 8C0*p#o}4VVtj%}qsvw(4^4>W&k)WE~Gb4MC2EZ`#
zc7<^51X&(>N3^~^jrBM&NR6)Y#sd&*vMm(RAxHU at W+=5y?c2jVmSAy7J#D7dZQZt8
zihCc9BSRuY5p-0oCYm5CPd4K$=W$e7jYd&Ur5wACmP=h)2N;WpY+DsS8*{S|I#yty
zQPp2^8!R;^uwi^C&0r<g??Zx#mOi1UWA2y~wZItkY5ChA6(JhdQ9ve*rKH026REH#
zQLq$EL+|yPygc`6VPK at wkOioVbua&F`nBwf8hQwN`QgjFEL(GTA?pxlklB#PkBkj<
zxvAxFx;agIE@*b&O~7U_-$JK4!|5zePNPH-p*Qv1G>6f{F``ZHGReJY0QY}J?_l&3
z$vy^#Jb(5?NLEwb0CGi*F_ww+hfv%!Iyj~yL3tRFr0w2U#>gof6qEby<dcF%<{io|
z<3K#***h>;TvM&@oPol}URS8$-SU;gAsenrf(V{Y?{o4&7pQnh2J@`V4m#U25yU$J
z64qRB`>H#4WN$l?mx3e^&&7)3U>5J%4-Jq^451}T8w;;XGDi=g=b~t)G6t{CkxR4}
zGzViok9Bne!Nuu<qB~H;XII91c=(padn@@tO-3S%a)TVP36>S$REp)?FYnC$vS1_3
zpQSra7A#d8k(UOX_-TB+rm@#F#&!8<b=GEFRc2JX1~s+huob?P&p$rAx38>*_c%#n
z`qXY;z)jovI9z9vPAnxkZRF9F#F%0$XD)n+)oFR5J|<fVT^=^%Jp_Kzd09EI at vN=*
zH#BL4LIflQ{y`{sfST7T&#q+PVA_;V%r{nj_Q>zObLA;VVxNu_<uo*=2CmU at B~x};
z8?4Li*<fEUaTo^sfo%7RSjco?8FqmHjyY~qd at uoJxPZu;ElSso{>&~EVccU}iA?6s
z2;A{)$FP)S(^BUc^G0Noh8fyvCghB&ec&ujesWsteo14YX9L0N?Xob?`O-|y%DoIn
zPYVEYmQ*6+run5iQa9ZPWy?WbkxVd2ej_yqf0#J<T{vCj+6w}yyr<*Q{SHEPUw^b=
zffO%&=O|(T&9(rJC{>8quWpT8>n(uigmZ<c*3p_|Qs at 4rM4Y0MJfkZLCUPAE^3cX(
z0gi|-TsP$;itX0|gzk_eXMI&-j$*>spcZxC=n|l#_D77K%@5P+3H0_ at 76jKq`6#M^
zrY{r5wpr&9SsoFfCT=HXzbw{{vI2<|k04<<nr3SvxxX?*$cDX?tl(bynY6trJtH*E
zMd6~H+34yMDMArdj62#u`}1R6C_$!+9KX-Ywod(SaQgC{9ChdUMSY>vwNHLtliK17
zlyQTzj0MgT4?dMY(=$!OXCqyQKMz7>A4Y+BFxuOBj%dklMuHV^&}aX-ACQCC{I|1(
z<}8zw+ at I(nUS!7mPSF^A;R4Tg_NQ0q4|9nu*ngV7<H+KZaI=(cB<S;{0&8oL58WdD
z4)vLRKzGau_7JsT(vBUEF|BBKq4SsS+2LYcHkIs+h=|~0%M03r|27kDt3%TdARfi^
zFb8ft#~thp%5(}sKs7fvSk4wH6fxn((Jt*qkrMXlI at Th_IORT#q{es$mmkeOEZCB+
zl}oF&R>#xS@>=sz3zo2t(Ry3%Y&;R9 at BzJgvHlKAL=6YGisC9=$0h`n9K)%SwWQHX
zKaaGtGE!u#=`S%^6eLMxiG9J~v~&mkRIasS)#_;WZ?+#kAP<k33?8^|`MP_4XZ*5z
zR05UtlsCGk$WYdP^6Ck*_TKJ8=A^(&_Vxg8Zy%jnnkbBn3!J%n7Pl~*mo1?ezpy14
z?wXSoo&#`77WIi~*X6SgBZP*Lv-Di!t?rL^g!QFffuU6;Vrh+DO3hGOV?r3|_Z~V8
z$U+#oi at UYP1Ch0FWPAUn&|b1IM4~3%n%v<0oy@>4+c%E;fPFPzK6X(SJPq%ADk!;y
zYk}*<Tvg%C(ljnXzFay46d)Iy#GIrD%7Bm?Hq{8)z41PnrfGG6lI4x3#fBDWLHLFx
zcct59@?;-MG_D21I>x9o%nKnrD++6B(h>j7`!IT!99ZMH`_l;KB(-RhOW3H14^MpB
z7#y#ML%(Fz)^h%1dH3}1qr=P9a42VvlYqzj8_MrQK~WA@)I|=`$0G at ApIT)QN^Mjx
zfvC$%V8@<(U20tCMO6;&#nu1}M!D|X#lv@)4=1CiIXG*IR&{~=N;Xm$Nl=4x%4$=4
zklqp_4jx8qj$9fd-HnZMbY4~1WY#Nf^k(}Ou*24TggC7khx;W+&Qr2yPOm1|&RctH
z*7%u;wO#;2ZPj<)_!-zRRyuU{qgS3+P7ju42T>X1ENe at HJzB3gI-{7Bv^)F4g2eKC
zaM$L^v2_o}k?wV5B8w!NX*j5ZO;b{Xmb;!MFiq?OU;s7*#AQFHNA+7A_yke%J_W79
zm5bT2%=K^e%ub;%FJfyVH`*?Erw^*c;zwj9f^6c7km6Nn%0kgvBMQawiP}VDbu#0y
z>{GmmrM!v`4{W$_m4bMX6nwZ(5(WDb4~&1Y_s#=YeAx!6_-$`)Z&arkKE5d(O-_hT
zvZ}HWDbz186!~@RMRIC6^7^FBN4lu-BpfxKPzFz6QE3ZLUwW;A!8Kg`&RUTp at q67*
zzW-^ypD)B<($eG$DG&SE!Zuiq)?L7QU(;>ArF8QN?BrmAd2Z#MPEi at D2k2UYOc(rO
zK?W!6TF``5A!a%lN=NcjUO-<?YlOVlcy(|Gn>=ZIZEgGM`lGD}_qSysY4q*_tns0R
zrbnx%*V$$+KaFeLR3(#2!1^?g37?OLso(a|A$AzV+3u(ynlj+t`Qm#r8J3;z_`>6L
zSI$F`aT;p|fzxd0|9Av{Y>AUmvVkFcT^-yl95Y7K<$?uqrR?bPujq^(@eFd;jO-F`
z38}P|U-%BV(z7;3^F at Z{kKk5WiHr0_i?|O8%%&RFbdI|R%p~`ro6}gvIqf^$Aq~eV
zB_BFynq!#BuBjbQNFlGtQki3JxL4-33M}PfF}T3K_pSApVYLGFG>hW at aX?>hm8OWI
zpJ;HCE8xr|zF}6G$L=AL$87_E&c#<Gd$a_qHP>iz58tit9q0 at q`sdYT-jCq${4dY%
zJ%0M#`qPcg4gEG){>#d}qZ8_)h+ONp%bXXPVOE$;qBPSnC-h<rlxw<zc=fZ4$%mkv
zI*{9bRQw~5d3h;cTN>Q{a^P#DC)ZN1uG3y)*sV5&<JpqWNJq5v!?UH*RH&v9iWuQ!
z;@bOTbp4DNH;qrg#&b0>ENJxg#`Q{HeTE%;MSz9pGbDb(jlq|<2iHaPm5Dlx`HqK>
zbW$!#GPe#?eE<!EelOQ7J-;y8F_U{oJ0|gFR-i=;b|hclVmO{kr;*F3%h~}G>H&N)
z_{{eVE2iK`16m>l^UCEwO2DU-YvN(4t$=KG?0jMN5%>$EXzuL at tr|CzJaswCrvrgu
zMNqn4*}7923Q+2Ugit1)6YLZdOYr&0InqG!{_n<n1k5L5(0pDKA^BS5cszbf3{<64
z=4hmZuW^!Cfe48;0%~Mkm0q?5AvF9Qt}A_cLSxgtiV}loVGQk_Dt1ZUqz+iun#OaX
z69&dU#F6xKM-bk3qhccv at CXqT6Uy5!^tRJ<-o^~Q`MZ0fn{`GfKX-|-Nr5Q`!q!vi
zNE$SKK=Dn0MjP{PEHAwo?Ze&?NQ<-5pGwV$z0EnZ_iU}Wz?2Ac(X#eN-KsD;IZ8?K
zx~l36b6(8FYx9a&`-MoQ#Mp$^rmY#k)l=^$l1DnFwL+ypYS|j72D~R##~yky1N)S#
zxp~L3cY;E;bp{zJttmCE!#7EO42^8R`en$o{pzB_xe#aU;z>z92S;XO{+*YP8<l+U
zO#U7 at 99jeoR9Mzmmj}PT7Wm*96&U!)>9*e}Au`q6510<72_A-v^W&#;<RVdQ=HX24
zH^?|59{Jwnp<MKeniS08A at 6_feG>^$eHN68#bH>k8$J!w2;*Bm5v at f$BphMrjp|z=
z#X}?U8fEmgLhcnAkWM=eMFGJ1j+#^pE%NATEz3r?>k*Yi78YAq)QE>lJ`pYsjfQ?r
zQ{<D^Yv+erjq{eIGWwz-jS%rKY<{ikBgD}?Vte<7w8EU|ZT>xKq!J>+k0JJfr|$07
z7Q3ZY&kMg1Or>{4C7Kvj0GKP>Yp{Z3AHVnoE4qht?Ifgk_H&nYaCCSSVW05-V48Y7
z&cK{mJUCM at K6=4D9G}U4ziVRE=`OH1N^~l$7xHW};bPdJgP${MVr_rW?c5|3G8yj+
zf-Mg`g&|F__jo|oS$SygDD6WtM(Wb}phALwsG2wm#bSa-K?UVBQkmVBN@^EtwFR+~
z=r-d(<nkxi;|jOZpaSPlZZw8o{shzDb3YRVLKSoO1TkGzk&F1E0J^lSFBGord=k?$
z9<HP+%_sAXYLe12HYipz$-Q)az{fp~!iWxrHSwv+)CaV&(xNtwRN}Xt8<>#fD6LK*
zDmFveg#q{A at uRP|H~+Go$s@%=v!`s&qgp-}RkTd8jxQtw(tWj|OvYXWoHsPr?@p#<
zg#^fyV^ghkyR6wYOvwzYOnCR~WPhEy`!}Z#eUI0~-U7=9dg{}7Y_R;;oukU1km=U&
z1w7`mY<Ka!at~7`w at G>N31_lcnb{t29pfZYlZG at tI6r7QEbSKegA>f&;ErQfxi{1q
zhVDTywcP-)_7^1VDI at rs!FyFZ2m&u&h)tsnMRr^y11GmG;zR+Vve1XPtzW#$CJ<**
z!#W_P#oB-5sS at tHXS|YfZaOsI^&}G$v_)?Dc5;X<I!0uA!kd!DD~>M^W-Q->fyK)3
z3B=D3Iy+lNk|7!2WnnN1Y8xDv9gzhB`|QE=-IUr!mB8v?Q5(#pTYtvytdnACsms{X
zi+E)6doq#eSEG(Mne2w2GP>K8xPFM`Ah9&=HlhX(_ at tr~-+p5U#62oSBkY;qdcWHt
z@>s@=vLg$8vYlwOJN`+ at Fi5!WcNLs+xw7|I))Yb{&LJhgyrD3$4uYM>NA4i>2v<OB
z6XhW)B8Eg!AQ-O<bQ?DF>hN%5>yWc(nlxE^qV-YnMls9puX5ZkDZM6D2Me8pi-X0T
zAU!0)9nhJ>7V^w6uNn`j&-2Syg_+o=E at V(DkaLrgBYH3~@VK7c*Gy?u2Wk`%TPt8O
zAX&o+=v1~QVj#^U57UEbW9N9{{D(l(Kd<5lk*^gm!V)$!b+<IaeL=61rOYJB7QOzC
z#ds*gN9n5(At`<+>3!43sk73V!MdgRG?nNcD<*SiGZ(c8=6yemSu((mY)z)z#ajxz
z?FT7^FtK0Swg}r_9vvC$HC;b``-G7E6fU#uHc9?FhYlj2cCDtj>B5L2WyQ$S0wDBK
z4mPs32$-m?i$I at o7s^c8ex$gn*Qk2Ll-4t3{&f&rqDu09R8RXzB&&5U<xH2nN%0GL
zuq=&y_%XC+)P-Q>aaN*hzK5_7Kjsv+)zT5oW1SAcRox**!K!1L!R0tv9YeP=2nh$Y
zlM;lW_=VJV2<^J92qN2)xbVy^BzP&I$&_<WF_KaXNG<b7nII#D!wAeM8(A{Cs~}K8
zt7Zu2MWn<EqTys(fcnMYA=Z3|8H;QUzjz@!>_M_XOCw`8kO0_-u^2ul_qy1#B&M35
zILAeVr~cs+;leF^?4f(!&4h*t=@Kkdj|nTG+jnywyd&py=_w?OtG%4Fq$vqg98D|x
z8`**3gDi~wC|uhCbH>Tr at c>#ZRK#D_Qg|olS)_9wgHWTqYk)}9l!!vr0E2J(ZT!*R
zUcO)6wTSB2xEW21CqA(vb5JH6GM1|aaCr;C!DyxZYY9;c6&jTfDOhBVj)?GBu`YOm
zRENB7I_y)#YP^;l0-g6yx=Be6>rF6W;<Vrj%<33>0VhNlC`0|Oz>mfw|Lm}|f(>;?
zy0izzgY&kqquylPx_~VBfcdOuXeNBgdWEUBHXm%>-TufKg>&nt1dl&v&NrltwtG|T
z*&bG{1GVnG`~0(PU*zh?Olo^s8B`YnRfc+Cj#BwWSI=2Z&UeI>QAuje2|pbX)jFN*
zlr`&+E6{Pp>y?X_l2d(qyni&@+ZcELR<Cb+0&jz at Dvua#5h at Z46{ya3y*s)Y_1r^2
z252B=;UpU474Ue@;cP-l%R=q{m%2A^kK;PheE-i+QC*fBAWZ-SH%U~>G6;eqEN&)1
zEv7Y?0s)dRu{9P^RCj;(`+MJrIGI%dW!ZC|dG4KY+eBsNS>nXLos2l)PdGbv|71nT
zV^mRU3yF;In}g6ZmFB|I&|S?)e1Wsbt@&D+A)H?#zz9H_9 at pK~G?q2lPNgHonFDF)
z%)~NKfm51j+g`79GZZL_wSG^`t+ivfEQ%YJJgQ#NoH_KxYF1XMZJIMsmqweorc_ff
z{rdIZ&!h1oIgn(IvI+llar>7WkrCE at dGpIyX*iXAp%ubYoUX$m at F!f!VVz*GJC)jC
z0W;{K!*UT34U{;xv^I-$%5KR}gN_wOspFM?q_|%eA<&p!dWb)YcberOPp6YXAi<9T
zgB^%KneMV?u^F4{(QlZ?Lufd#O~>x5vjutSRr*0sxh*>Q?f~_&P&n5k&zaLY9<2Oj
zw7j@{$0t2emXa=V`KixM+&~5Sr|Bfp^D~YoC1(2WqX^vo- at vyS2)di04Vb*nlLLN#
zvKRCsOag)pm)pq*tnJE=|L+}WFwaf=ME~?T(Zr7o9Eul{|I~@84P_mf=>|Mih&~7m
z0=5zLc!O5(uPE=0Jf7$^CWN{}cid#OYfkY&r1WV8=qol2{7WbqnQyt1i6LsEHpo7y
z;l*5B%M+DSFiW3R-EaiG%1fjod<YYzFTQggY8iyqEa~rnA9&;rsqz!NS2G9>Ia)`F
zdzVBCp80>a`sgN2JL-RO_3_>R$?Bhz3OzYn<tCh2Z%{ljzbN}zMOPn2-_!4$*Gb?#
ziCY+UFij%yt6(DCYyGgbr5T3b0u!xF#q-PJ%NJgHNL`y<J3}LH at YX}pP>@9znr97O
ziP>;NY)(`zKS&83yp-eM3FDRFT;xIk3Q6Ho)?wvwPlrf99Dm^}t>}m9)TIod^S-OB
zz*1>5^|jZW(_FKI$o24O-T%amnxv|Sdr>%T%0XS1FIgr4RV4Hz9xl<Q5E2`b)f=)4
zO(xp0%TleN>W^WcW9|}Vudbj9SIe+`KNM#fyB?|O*Ez5CW<S}KM5-E6na9J0l{+IE
zGTWi;q;egRzkWG)3F^q69US5`UQv`S4_qE*^QwC^uLIq;au=SoP8Q_|&_;FY19nr|
zjXj9EATDj)=~$?RrBH+aBTq?+m^3$ANGTsU;8^txxd4-N=a5f?dNw%PmwJ^8!zxV(
zWmcU`y&31yXS>JISoVQTT!kFQa*E0FC+o~;p><7xT at b|KY4yN^RXISsl~IAc=p>Mf
zi;E&>!)}4 at HI~rF<JC9<$7p~zq!`DeX#{DFO!WHTUfHQd11F`_$pV(tL0uA*?al~=
zc<^B=dg*39A;%B~kMBBb$wMzgM{<%5J>J3$j9%L at nA`)6_AM)X<=icBD{DdIO$#45
zUPFx5x)@|~?6@|vhY1V~7bT{i389nDbdEp3*?DX#GIk?H)Y!i+N~D>VZdD<O4prWf
zg5sebAN_*1JwZXkF!e7Dt^P8&RM?!cN319%l;aDKo!GWj_LVS{wr6hw46$!3KE*J4
zl_=^hZP5to^9a<$=8fqrGDuvknR=RV;;_6#Ag57)-n9xHu5-ZBe2^>2Co8E99!PIb
z2cmMCt8o=xEGf3$NOE8Sk#DsPL^fFBhCD+h6Dv_3Us1>mip2%dLqwzYBfDNF+m>@M
zZZ?lIu$C_<IKm?q9Np6lx+O{?WhN-pgF+3VnSs2fOb8PsaJIhl`He;6A{?Ck?x`8e
zOzXKh|7_hTgE5v;I~gwA!(no|!BD**+i-lJhV$|kBG9GVrXx1KjrP?rg9-!&P{YLP
zeK+xP#oX+;aTlRr;jvo-;B=|%PWEfBWUQ+tbUBQHe;m|n2ht)fX{FRWCOiwcbPf%=
z?G3FpnR_u>c^yniu^{t_2r;Ddlc|s1d07-DIs##s*^U-A>cpqhyZsyl)7eWe@|ejs
zz$lOPu}zRpo}HKvqxX|gFvDR}<Du-TF$IoIj~BVDygNK(A=dyQr@|G&N$=3 at 2W`4J
zX^}{>2mGz9A~uJwEHYqSPtadS?x9Rv{r%v+3q25bAeo2iRW4z3b~`pX#b*$EzLr6*
z3UwgR5qYy at 3r16<<e+2=y%6Gf9Rg*s>5EE1Q~yk at GaD+?g852~sT5OFxL8V2(eMO<
zgEJU!Cu_^Q5$Et!%!M<67Qy(0ROMU at F~T%>pj(+wcyN`<iuO5Fnll=F$z|7^WWX1d
zbxn5^uIi5X8Rhi>n)*69pRK3dH3D6T6f&1#`m$+J7Sd~;6f*P*gd_vU8h~+6p;1EP
zxK)@g8EN`4SD(IkvT5~IXW<e`;>vOW_8%ngj!t--Elg_T;nVL%-0JaYZA6=$%@-Te
zPOI+UPBN3d6CbXPhI5&rdTn`Jm?lgerT(*Phy|ApCy9S41iz(Na at Hae7{6U#`%a-l
zcYrzCRsgV2B7hR(^WXFr2~~uk`2h{4;kFSI!H+IUrn|?}hvPkIyISl)M&TthTJ%%N
z{3Qlr>)x+Ht!nwvqxHw at 0DY4I3XNk__~&)NtL!QXc$~cL6j*re{ktDF*1!AV>xF0c
zAIzZMi>PoHIp#|(dL#BmxJWda=5mCdNO^Gar#wuP5kuNQ4e3uDWF}9m7~fo`1>l6z
z6<XUzB+0vluz+IS79vDH5#{b8Aq{|^ml*HJS=5g9T3Se7Z)+$*FB6p&4QCMlmP0kK
zo#AbqueE-uL*c=6P0DcLiW|ghQOqZ=NGqZ6(k4!7PKl=mD^(sUEo)*$Ks%e=fiZKy
z&pp=82RsAO>Vc!CN4UCJNGC&yL2X2Bk`Cmitde>T@`YI^A4c6*;1)L?&q0&0;S>{X
z--LLc22dGxp^F$mXsg7nJrZ&ZN1zcmx&~!DM(IL7l=J~XO2hG+b5FmSTS$4=D-_9j
zcv-T<FS0n#QVWFBBeHa)Rn`$07h7)!5~5v2IVe($Cpdd_Fw*1oCyYAA(_V4eIhlk;
zD7fTn9GLRcdjytoP*i_Bfu6&lm2Ri0$c*4nqB=lp6>jvJK^ebZh+dyUN93NaCGNF6
zN}Gv?z#n~My@#o()jZX`Qw?*EXK12Q=SrrAHfEtP%J!bpWk4kINTh&;{cm*gaG^7?
z#xe&DZV`8Rj|-Abx3 at 0TQ-@R&lySy}G<_3p(<M?y?jA<CR-ovC>FMFO(|E(`DSs`F
z!O7<FqoLJ8GP*d3mV2lttp|Q-e6W5<1_M&NNwW>(^&P#MxY>`X%d%n`(W9h~hZ?Xw
zU9uZY7pnnt@;=z}@9J_?72aiE5;o&9W!*MTo8+BT=g0<!7bE?wale26ei3Xrd~-~?
zhm1WPA~L}dp8XFxbPyp+kY2G;7EXy+ivK6NK5DZ6G at J1am4^+dn3N74xM71dyp2;;
zD87Y?zDmwhr(h8<v{2O9a%eJVH{cx0+-o*k?X6aBqcYQHH_1eLSJr4gGUt`fb0xMF
zlJI_Z(QpVpa%Y7FL8>YStKDtxosk8oMI)Wka~EolpVT;)J`8j8(nn~6Dj at EkiEH8M
zQ}U$<SF9*29>WI0TXCkPP&a}L;Q^@<;bb|Oyy5gSttuSkMir?S8b$cykpQj5@@bZH
z{mE5g51(#q{>dL`0Z~AAMC8kE0%AWTN4HWlzxJoN2E6|!N)rk3$P&@H#%o+ze(&kV
zTL0d+afwcLb{M=b3mU~i8814(d;+RFYty_ehn$`I<3nQHLasw)EWBzl(EYr^tzTS^
zPHDUs&c+AU4S(frqfNX@*zEBSEB7C-Kk47^L1=cT6dQHH>M97KJCN4duv?lA>F0$M
zClzgms+^aap#)OY#kEO^&{pXrcn2E!-r+OS8UN9sxC`u_u#N-lh4?Wlj20xMB~;M?
zK6%}u^Kf_nc>O?4EQafp$4_dS8<nJV#c@{+$wgV%{e$KtW1`TfYLQ*TZ^~8qjAWx}
zia_M at F-}Z$R^BGLhiT;TM+FfVwO$VXXa=r7Z9USso}<Oqd at kagsW8jwqxU^<+ux?9
zq3Mfenb}>KKu%FVA)8)Z#KWtmPqJP_aitrJpH6M(QW|HTrY3s at 6z$?q>6e>vb-d0m
z=e($ZO3P1<-*!(La~U4QcYT@(+r&ufqnI(7*{UMuL1wkyT<Txswwqyg;tRp>hA&;@
zdwMV5u#-UUG;@(Mc>0I~m=;DXP7dC(F3D+9hP}5#w=^GEaX-uk+1R_I-$&tA5vExU
zA%D_vkQ8ws;y$K{- at 73p2q_nB_!8?HAdGpCTq=Q8mxy~U`g(y_E+b0(F@$t*J47)g
zk$LG!_3ADHB%xLS-S`XHF)!y{ADm64wvJxDJv-R{Z}pDpOVdn(!e*NgBp{&wDSAU0
zynrI(OwB0C;rg%;X`Om12m)i72VT-nMkn7pFCJF at _>sN~=3s<3%)^UWx*=zhsLU*R
zISq`nZ~oQ%84NY2WjBvOzr%GGP`)N*C5|qDGxeNq5524#z1%(c at 8h5U`}pj?cYh8r
zJkS}6h6lTp+5tocdxhqma}wPlCRGGXfW!wH2OXG|VFPMs=}htt8OZ)ne`K+6Ij2m)
z(xfk0E%Xn7f^SSK&=YEgN&{^ph64J0cON^@BJBA51hc`}8kdZou!yb at sZ^yMa}Jn7
z(@Ru{C6~X;<fNmkuh_~ax}kM7$$KS%L^0{xU6kL8$hewCoDtk+l2jb%c7}_{JNAI_
zoRL9Gs}W$A^5=9$<o_vy)^ulGSIweyQf0Hm+CA9tJQ-+kmZ7_P-onvRa`$l<sCK-s
zro%FJuGoKb72Yx0Y^*v^C#|xcUrfCd+#y%(#1n<In82QOfzCG)>e%AE)fK(0oF0^6
z6lGvV?rS?V0~}ti6<YL-?06Dm8Bn=c4nrJrwY{yjpnV^Yh$WqkR>W$A4Q|U~{v{&;
z0kPm^59+Y<lPzDJJzA}FOr+uXclc%gcG&l-s#i(;+M9lJVL?8e%ieu8{o>M9-n+Wg
zkGZq=1`~H?z47B^tM!vDZlEWNyxl^diL!xsYVZ|rWxy22;n}W)KII<Us7wZ6|CSlf
z=z-Xd4$S3S7hXM9lx=pE{_#Al<jdCT=Ud4+wxkhmg-7LSx?%It>3F_}$Mi?9bYE<K
zwVJ_&`f4=3GW(eoFZ%62l5A4`2sw$0`x3qyjjzqV{hxF;*h74sj4XAQplZsu2&L7}
z<Hd`gAlV6N(Fe+R!~~bj;<WJ>{p*u`>bYhC<{zo?!P1z;LO<d*cdfv^;MT=ty*k|-
zggZ@#BT4KvidVFA9DciUMyHtV(MP^6slQ}FzZ8SzIP{(Hx954^vM?k at E))2P^n#C!
z9Og^C*&8tZD6;%9Zg#%IGX2OXxHcoVvfdqGo=1SLAE$}ZkE}$@vAr|?)9a(7nN!)?
zYoL{>m{ayY_5|{u=gKCSp-uf5IIm;BaFG6HE9=vu_zfL{ao{KI#Ns7IJg`JJ;(zj`
zC@;`<<E3rnE(r6EaCiPAU;N)`_ORb?L0FE~eFaL5^;{)3hi|;p-ET9hxmfDJx>85G
z%)GSdDvjzf*91mBNt at 9MFpdm7Rt2|_+-G>#(44vRoa#UNr6II1k~ZMlZ+CP(f+p1e
zlfq(a#};e5<`3bl8zZoM+{{KwokXS($a5)Ftsi7A+*w?{)y9jFKe}yau1=dqTE*q>
z%i%8kyZHVlQ*S(7c~%RO^LgNLApR~3+^#onQ#|~j3TbP at a^Bal;fm4pIE7N%j7$|=
zg{g(&EDiI|%?qWnR6s&LAE{8~-#h4s(`)izsQk@<WIZe=douy<6P=b^Q~gcQ)=zjT
zym9Gc)!GE*eh(gruwMY|{=KiWz1#h at Z`U3 at eYW;|WAyaNqaXfl_`=J%$lRDgxeK3Y
zwv3W#QU=FyMXjD2UCTJx+1=*q7R#vSOIaK}-zCLEMX7p)8V7=OykdmVFw%DdDSjKO
z$r2_wl=yWYU+6x9OW7cie^a`k_x^G&CWM^+g<ZDA7Olk=279v(X}b^8Nm2*?|MpzD
zXmLMm>@vLLdMxD;r-*Qj3WzB~QLwOql=&6Lo3;WEG`J{Bu(Xz}fdYI#fK at 7xtR7B;
z&(QIbFe~EKu6)MHhOCHT&<;_<(4EkYQ?_t%mfG|B=HkU?b!hgkMn|pmsMZO3q;&V-
zANYKc8bB_t&P=s%qzW<iPEXJKq~?ofq$^v|KKDh_q4&(&RuH+;H2_XUHWGbhqj}q<
zD2i(UGHFYeM3vppfUTGee>VvvkBRSh&|cd79F<|7pLu^~4pReTWCCHcPJK;G1 at APY
z2)1D|=wC$I0}-efB=rGB9>Qh`N)0jn_Or%=!CLz$Ydk_HAFfMAo{{j(_oi3>>KSN>
zOA$Il<$7gfQVfV<L;AG~Sz>Jj7?l$v*c1tcx+P^tVcI@(STY&A?{p7madglXVo%cJ
z89K|aPbqwB0mk8!p&g;&T%7e;&DgY{FwN}VP}J&IwpjB`ZSO%PrcH0I_nXx7a^;>M
zt54!@oGPF?faY_u&8X!jd!SUvX{bJig@{A|Wq>e23#drKrY=k85O!*CQn$R)7Y$uJ
zXQ_C<ah+2jsWn~>n)a*Q7uj!1OUdO9RypnImN4?tUe477Q$Y9^&MqBrZADW@*nUMO
z#8rq2?lr%W_ycYeRRABpS!(_f;zV3))y^EJnAaQ*fskH<9Xg&AQufk4S$+eYI1-gw
zZ}|@Av&q46W%|JaEY=0Xh^Mw!3Z at XUErB9QT3KM5*<PB)p7!gYa7p7vC+WVIno=KS
zJmOP(<u$?|RS%>K%W4ueYG~t4LAL$+TV?^W*)6w7w9oy0AHbCc^l1H?wc+^;{ONx5
zd+hPw!?de&D)Inx*-49oG!MfWt`AE(kO$11PPFv)Tnt&xzqY?M_TP5$ukVk at 0e2Qo
zLGB5uMwgGg(k^?<vv63W8f99%Ts$f}j3rn+i*?5B0Nf!Hq2_H8?mgw0u|E|SA>(XW
z#DqNKLJj at YA&l`VBb2()O~Prat%40j%lodIeY at L)FK0pQ^w3i`8-i6hv at E)U_P2Bs
zVmhZYFy3((3fo6`!lg`=l2^*x>M-<G`kU}msZyM`<MQlMnvL{j7$gSEz|%jyM12za
zi10%pakMRk01Q3*;kucUd8=*`ox=~OzcZ1v&q5`qBg8A%#{@KsewW20M6MiHV>|6T
zpATEv$ja)l67pP~w<gEh93cW<TpU3hMVge-rbqJJbIh{XB)#22qZ1&Ra$p#yUk=XF
zf9S-$nPveId=*gJ5<BaY^%>)e;=;YI@(O2#YHEEHDFf+y2F%)YzlyG5m=3eyFOgl>
zX$V0K_`(Ct*$Xl4D3VPwW1tI-I5QCY1&56vEwTIkIJdE!q~SjeFQXOoCD7706PTZr
zSJ=vQBtKJvWcW at n-L!JjD#WCeUyYte=4#hH;PnadW(xci#z%=$D;8l5$1`Az4YEO;
zfk?Xc5)NQ;HBEJfC&a5uvzYp1^dFg~aI!#I#MvTx`5%}5Lr)gO8ku7On)>6?3@&fg
zLfrj6-z>C?C7;oFNByz}BsQ$;w-G;0QekLmQIAw%lO|S|r%Jb(J>9}RIC at C;0EeDz
zlCE){?rR7$+izaD(IQNt`MpI at 9D9XiU1j*-hNKn9FdK}+=;k(xb<G7TNy24|377CH
z&#a}h<mISQ#%eJSwV>@gKLTv8Ot%3p(zL`;so?6>QYI}op#uoaIyaT^uBchu<KE3h
z)+h>^l20SW6wQ7LmUBM;xy`8`3lj)7A;7L`;Nl7WkTMl0A%dMQ^r=XTI8LS87)jf^
z{FSk(zWaf(UuzFm4He4b5rb?w(ij!ufGWS6S|0PJ7KF3N(P-r`sHcVgm-ZI@#H_Kn
zp3Kpyt$Yk1m+$L`;xX=79{Q7Nany_EShd2iK)RH|6j((IQ$f}(`EO<u0#$ZIh|xfr
z!41U&YS=#CBc;?tsK(FJ<AjyX332W^`!`(B2<}h66kenQtUjsh3*3VZvzvKkarCu6
z^<rk8rHt?OLfM=(Tq54I(5i>wULqfa+b5KAaPk3{lz2GzDUjy5IFfJh<BMWOyy}2f
z62vQ$^p<W2vE$W9aaXf>DG7+#Erbl~KaYKafOc=x2&25DinQf7yK`Iw6Q6l=HdU1;
z#(J7`CV-*kd$hsEDicp}NIHgj{i$N*+B1kq@=%O0HS?0k`}^_k8`{eF--UmdutUM3
z)}NUwme-=L*J(M}N7AhHO!t9L6~sV#2nSAjPEknKjadBy?HUQ0s$Ierz?-5<OJalN
zmGBU`Q<bwNtqepmn+3uP)VMh{SmQv!WoX^7yC5*ThBp-_K_pZ9yc~Fk92YgtLfd+S
zbO~h<i{y5omcZ1$aw}yISD0dtS6OLIM3QBb?vj+a-~`fFt&4~Vs9i}^Eu2StXw6ZQ
zP|u`e6hd0)nsytF#F0PNHSx|%)aPqYUOZmfSle89VBLO3^CfJl$|MGsvj<rkvK;z>
zA;oD48?2L$<|cF3=C=92S98}eW9FZbB01W8xCZ0g*jRt^HTSQsJo#qBvJ1rEKY0na
z2Lj902S8NmZRJdLy2Q=odx8^7H$FL;K=H~I7Gu==VNyC5u3wj%epLWF)z$n~dKsQ>
zmVWj&;F2NdN(3&g3Qv!2?CtG4%mHgnQe{FF_K{ili>V7&tdJ0C^if2xxspYtW?2TI
za=9+5^va&Id#nO at K5jTC!dz(RrErI#Kt$s#5&}gjf(xs4rcDo&IIQv97v2-kzx at 9D
z at 8`ytQjrNQRsg2eCL)b8uu4?RwmnwC=SD*cfmCl41P5N?vW=OIG&fV!7()O at fyYu%
z6n;&P*0s6td7>!wKMD3)=lSUZHzn`wX|W<xmZDy9 at 0}uS4wiLNNms$O1cf#ljpoL4
z%pxqkIBM5jVm7Xz=k|Os4L;qbRS+tT7xq-9QR#FUQ<KhbJDs(3Ero3~$F&<YLLf6>
zX=bn`=}4QUcr|_8c8*mX`??{_s%!QdtaR}No`C at lVSoe5c%K=Zq3`X!nk2v^eer5V
z3->r0sRM1tl~VC;_gEPVY|?7i%$QgMzI!PWnAgt`fA83`nZNIm#JsXWJHV`1Gi+<p
z)ogNC57=hUZ0q{YxZdgr4y~In*~wG#SB7{H8HABg5<~)j4 at Ko8I!vH;WPx;AzXcSj
ziM=j@@|gI>KH(Y$T^+xjOsaaXPByg}Y2DStN6MCy+9Ffy7|R&XF5t#(A<i9i&cO1h
zL(IzA_y1Z?1#70^jkkbJ at g4LgcNz|@Kp2k4ie{vb+tv)VeKZ%_ua^0964AWc#2G+T
zeGq|^{c}}6lQ$+1L<GFe-oGzG!0Yi7atUo%S7+p$<y347lH9)C`_R28XVxfZ8K=xj
zL$*JZ($eP3wC0xu(;v59<~u)bZM|%-{aD+IGQ_NgL at _b4w((6MHHVhf=MO5$YHkaQ
zrqBUNq>@(iC*UG80vCwQVj(FEz<aQ!)AND`pCxTmZ#YbqUwbfnEt)t{qNKebrbp;y
z=++Z47+e{A9v}vfJenH%v@>Krkv+4~Vp6EZ87PpsIV7t7_0X+(rv0&BHaGX|@yb>M
z>(&779_Vu5&+B3_KVSP9kMBM=8Tl{O*lsB`a%(G81f}VLU^3eM!t`X9y*^Lu3)8ws
zk<tA7B@~@dZm;x!zlbQm1wDe9={!LOA%qwfAjCxjGW0?p25>nHy^TxHI&|}Y?wmc^
zrDyHNP5)QUdCQ9!kk+rB?r%TX{!N`Ja<)IyM)p#QRoc_koQ8=FX#=wcc-c_0VOF44
z6hse<{oxtUZB3mnT+f21Xm)Xw_3SYEI1^QEp#KhzbLJBWDC#L2{Z=l-kb;v;p5P)X
z at exw69W5-ml!(C$XqY%0==bi`Tta1JO5m;=($+ka)TjXb))3$`MD#C!y-oF-fIXz7
z|KG#9ZC#vo2FkYu<yk$W9YdtYh{d=Fh?rD~wK&)K at K@y8<vb|-%kZ#|^YI$lr}Z0X
zyWVeXJC1ouHe7fIy6!eqn`B=xcAV5Cu~Av3Wl7eKhoU&V8m38JO{D^@u+d0^AOs+F
zyy!H%dtkn#9&q&#K{f}_iwa4Dsl!sR6EGaz=$_ja+R$CmNa^SHJ<9dST&YKt>;B{F
z`sUi>XOC7ecP*`fT4~_c&lv2oz1UNyWBbSBZpjAS{NWiB5M at p6e$vp#h$Y53(5`!!
zkyeP#nw(G?ULP^DAHRVB&O?Fcp6%5l)4ImgJ3|aUU~ds;Di_eC`-I5D<`h5MdRa%*
zmR4l*qcTK<67Gu!kV~_+QY}RV<$YhixIiQ&%kp;qksj;PF~j0vL&~m>gYTwR%=nvR
z`zZfgR;`LK+R--%k!NOmO6UCXv*>DJTWw*Br*BaVrpL#=bvAoL^h*ct at gc0orHg}a
z)d-peyuWPWegBxa?*t7_={0 at F3fBdqV}G(uuS at K_1@gbG$cDc_Di?4YdLY7aE`0}4
z#D9dKdM)BN;(2A?H$dV)K}Y+fd=-N^WI=GQCkt*DK<ZF>bvV$=P*wDq?ghJP7#Kz2
z6K5h!jXFBo{=4D<ma#T}*hMg_G^k8?{a!H5NsTfWlY~8)zzkZ`s|<Uk$HbZUTd#LX
za^CXL^W1Hb2$x`Sv(@lH%S_0{z_{=t>sGZSBsCey=n>{5Zovruh$Zz6SB<q<B+=5e
zWL%{|2KYGCfx-afV#lq}RxUG)QjYNr21+=2f7x~J*8UQ7zoh{B5-vIM)?8xvyd+Qz
z-i1FFwoT`X!CM0bDv5Rw1xa{$F@|i!wdRB^OIAn}AhOGQ$v)>1FkM7QC{K1_^q{{%
za^>_LoBRvOa(0y=4MEur7oQrnz}aEhC^+#ANx`aYJfM$ed?O8Ked8JFk_QAA_ZEb9
zLT$wm>lMUvhG#I^T?>wxG<v$xk+zHDR#IdT*d2Wez*_#JU?-gGMxSYI;n8j)B17D6
zDMMswHi%eg at M}Rtv-Z710z1c)Jid}&SIz*S+%JN7R`sYc>thr4o4%%q6CRNuBhz7d
zv_5yxnu*FtyhZ*zSandBT8g&mjB)Br{yu$=QlnB%6a)i(!A+f%vs#(2Ukui>F1 at E3
z3zqvXaGMvns#oiFD|8nB>f{4NPl-V#$eeZ{E6d1$w=8ZTCTw5Ft?`xpUTKZltss}r
zq3s_MZZVg2Cwx+DFf|>U2_`%8+V0&X at 059P8=8Yf^3v0LU;naqOcG4X)6hE)RvvAv
z0mpErU_66sC9N#>aD<4j?v8#zIxNQA6h}n=Ux8?9xTjo8QiB03S>prbm0Vox9-QNL
zre6+mcJ{v;x3*6RpvlFCdmdbi+#WvG1?$NISi%YJ><M}m at S?5~siw at 2&IioBp4Uh7
zc@?n1)c^c^by-_|zIqFr`H1pyW)D!(P<7p|ciQn(JGd4rJwJYP!lf1ZRQs>VK~3jD
zxADO}E&(ESkn#jYwSl`U$BketF^fT`35<^<`?LNkbHa3Nd=JUO463Hu*)2KpybdE1
zGCxGJBC#w5J?)y)$Ko#{0f?L70<2o<$MI*e3+J~|$h`1(ySv9deOxOIVR9PY!738a
zY+~BVsE_q^)gxMWOCFPj1z>JY5#xY>d`M&Z&Ai*&r8(O<!{N4h6(*rCD~Zy`24}cd
zcZ+jgCJe;6R6Ha>b3 at JaxdvSQEQBDWyfPjKt!0L0ch^e^wE<5wYWd`YkV_zUUOunU
z$(Ci8{GS*(8v#aRK4q~AoM42qL=lkHK(cYT1b8R8tGr>jGhShJDc5WeI3wsN-#axI
z50rF;0c_Nnd-6u|$04x_6}4|s_jPjvnCT)y2}Lz5Twc6&fs>2-uCH%g^WLX7?UMT{
zTPHTKDM$qaBv*L#>vg-W+mY;@a<{KqODl&D$;$q98Id^<>xi6kGaWcz^j+|6IHw)b
zcbo|C#w#c*Z{(g-$a)e7kiu&544o|OhytqE2<uiY)w$hzqlfBfGwDj+`1}<6$pU;a
zpqVrJ_z|@>?groOUk4wOM!PM-<^-4E`SzAi!7>=NT;Kr*35K1Y)T0Wdy@=?SAYAgm
z;8Ge#7`48!@@!qu0j=-i6+s~C7_e^;^svn0T%D{50knV{MD~%Xmly9Ke1c;1;Q$Rm
zooC-|+|?|Wl+qrHZ2m2&1iOJWOpa1mtk*>v&OhYxq9ZD*xFHXy?IGcnAu&-M*}H7#
zG_O1qQIoP^Gf#)Vz-}t at M7yB%mAfE`n?V6Zu+05(1d;nsS8WvT>{7r-{sOXyTNiJj
z7tx39O4o=oXkQs=6>rL$IMQK6D0Sw^mP^uo>sGzfsciXY`EJ!$`lr1&p3ezbqT_x9
ztq|9<WF;>fsXiS&RBt!S_^<!E$L%*KqkD*AV4=3{`coGHeVgsGzY?#gTYMm=sJn7(
z$?5?|)T=?TlBv3cH^1y2iY1`7YhByFl%(bdp-}1ad19R}jM3gy(;|H^^;#LBGATy$
z)OP>8^c}BIRYj+`$?IKu`5+ZpHE0pu3owvmD+JL|gwXq&2AK1f?w-E2cpcuPCH)o9
zENS~UkoHcqAI&c;NEj?g!_Yfj{>@bc4Ei1WMZ??i`it};U-ra}e84 at qEF=^Pq?RoM
z;of?^cK&dH;-DKnVS>)oz-UIn5Ih7o$(`$P@#HKju8_vmrTji+LNpgvBFwB&N>i8`
zLtOf^AUF{(WQy6ux^0b`^TEFOQv at B*UB~|C4VsgwMM{eFQyqk)WVgL5p2SCy;TL?C
zdx7g3g&31CRk3dE$1IW-Ch?YZxG|GWxnG68&}|2^*QT0z7N2aL9UO1**=WAfiS$ys
z?=u7~DYwLXafq$Eu!rmKgGWmxmJ6~?t4|-jr{So}yyaMk)g$fE!6eCl!$Sp8N6K%O
z%8$JgVVSGFH>9FpslV3U8#(CR(ZM_IPRm~c5}0^bM{me&j_V#U97u|e)1FfLV9Bz*
z7Oeo?MempTKCxQ382=MP+GLy>H>}eU7U}_|Q!q1q%>j?@T)#fO45d%Z9Kx6F4V`SA
zoYs7TCaGo;u}UG|=hg%e<U$*~VY(BtlvLx4em6jk at 9EJDp<Ez$Nm0a$kr6VhqCivx
z9`8V}aVTjVV#O-ryRb<_n)~jo7!(#pE`$><yKcS28YifH7&i0x!^#e^J<%1KF<cD*
zJm1}Ui1heWR4GL|r|Ew-BY{L&k1T~u_7m<ufA&~s$G{6_OUL`m3pW?{Zhm%W@#L7E
z$kDPz<o%Ugy29%c#}ZW$l;&TY>N^>G(O#8Pw<avb(C?@}nR7F3!SLc~H+jP~_MuJA
z-?)B#d4d1j`0TEjytoX=<FD1<Lx+$+6=|4HXW3}vzbflqW|D|3*CgH7?WSvGJc>)b
zdXI}@Oyt{=*)+Aj&Ml_{dMxAK`J2DG5%$Ho1(NjYHLfcVA*um#%{<>A`*}#BArzBo
zzB%e9Xt9gk3RvSUXbkOUcl5WDzk$cOLvwSpvBW=g4@{ivzZsE(y$><z{Lp$U$U7mo
zUi^VWknuzIWV6l%+A<HD1hEj4e<31XTI>`Dfd8%lb{zx?n04jx^P}z2V=mE&KpX4$
zZtoW|HO2JKK{)kRv>GH55Nd*YC*9k#v*R6d!Vg~)-rd+eTRZ#-JM9I_Tv&l9&$zGW
z>f?>|wZ*GrB(ZF^$-WrW>FNFg9y<it;lk<L^D~{2$jYjO<-VRtK!oO+P*y_P*?V2&
zaru at vHXd1<S;o6k0%;D1+ToTJ5O}3njmqBOT`q5c7sq)Cm!rO+*Tdbdp^HBC8)#Vw
zn6#^JAZl-6boO-L>fhstLc7MD+Ru%Xrp=9?eudgoCj&IX7(7?*{-8o!!z8PU^Xb5b
znM;}G=N6T>DtD(iig^vkMAZry(){al$cnjvII;O^BVe$Xv~&8`aDm9F)ARk)(Wjq&
zYAh3O`MM!a5M`L!QvDKtpi>A-hF}Uu41#RY@%kA)T)Bi&rEPNIeX(yRT9NkU!Zos*
zH%Oa>r=$2~EpVW~4N$;9pbZFSS9&7og^NPdYU(d at ZDoCBI)u3{W?wdLRRM8G>9HC>
zBWA>lP)HYA(A*Pji|iToLFmRQ;_$FcQ+NfMcF=<!4DZw&f?=Q at vHzx8dj~Q=m!fMs
zE at jfGMSldG6Lm|?aUvKhyi~S$&u7tKY;=yL-uma3N;U_6T<9bEmz3GkLHOjcsP}28
zhB(eAOtAWPmj)EV1KdDoTU2{*xd&++zUbd07&o+A at ef@U9c~pfQ3+}JhA7#F at T4eV
zEz$@=JoR>+Y~u>XPKN~+rP)9#<XdI>4=@#%-u=mvFZzxo8G|xfq}Y{l`B`>wi0>g`
zc|nvSgu;;TbcH%)$4bA|bwS?DU|t;&yzWh^?M1IBI)^*3)$luU!<MaDomd=`?-;Yi
z6`INX0d}R5=k2RN$jS<p7qa$_-r8+QdlFU|4n2=T at rWJftwFnLVjH@EFR44({YqGc
z&QqjJHbo6wZa=N<=oRZn)56o8WzS^srRQ;$!r8Zg8venq7NcKP*k%{QnKTkeSnny|
zm&+ at QksWRFB>jyt>O&$Jt8 at vRoP3^E6-k1Ga at -t*baQ=#Ip?Oqoo#&DF;zg<sA#~_
z5|=oHVY}rZg&{DFuDvL<jd2l6Vd4rdc_ZLw1omJLIt$tIq8Tlt+8xv-IF59g?aScC
zClT}|Ni4jN)JaQasDnFrIJ3Y%g^5omijGUcn_8{e<kW_$^8(|$->$rjOm_(+0^q<b
zZbGYE^4<wToH1E>VyX1GBRn8nh{t)fvtZxCpEwTQIX at If7iMz)#20kYrT|hfa!%OQ
z(IfTwx0|JI6nSAK|GsZxOtg@|V8|4Vw8YbxxttW-+20{%u$S1K*<Rrf;a0_KZK<y(
zKM^g1^_ta0lob3Siuv}4(v)XSs#iFY5g`#YS<RW)s#$_Yiyb;J9v7z##N1;-2r<qe
z{;7?$YTLxK)hRBB!sp<Qv5VJtvX7_2f>+Z6I2qw=bf4jQ2PIJE at 9n+0kH1DSgiPt^
z*SWomE;rD3xGOqVmNKJU9ai&1X83#gH##8M*%XH;KR6w&a84OG4wTX!)zmB$jm{DX
zEuDFG?Fg<U=B<^(LqM01%=Gzze&$nvLokQx7HkO at S;E1sFM+uM8bIDhmH2 at XMM@|;
zUOesqwe~RLaZKY=w2)Ug at M|WYn3!d at pYuGJIDXBiDz2|vCqv?VI{MBzpwrSLr1U^<
zN&pfe6JMBl*>m3H4!p&iH{jyDa9hzJZXQzJwrrSNi_82X4xoQ62OD#RS;Z{WUn5gq
zV9TPVq#9b3fWW51sc8X2NC4Sp-5?t4L$JD4ief}42fI=C7I>bbTf(Nn;2bo3J&g;#
zz!-CXGJ=RPJMrac#M6P2l_ at Pmgmz#L at VS}yM)Uq*54_cuX32v&1g*txjWc6rEV9_v
zPTz0`LfOUz3=hk>2X{r8RhUB)m!kxO&fQ&m&#;g6U=SMq(V|`_5zCr-W!bMFw=l%I
z at 5CA8zjPZRX}S&<qUckWh-YBvP-0_3{ZK4<2EK=u<Vgk#Vk?F=o*CL#Y4NR_30(?N
zw!)Q5?l(og{DpQDg2swCMg>8r61>FBH3YCX%S`BQqxUPD*b0M#xB~Gog5lH>G%|r3
z><aOsEBPQaD81<)5pK$W-lr4n{-AIUX?Hsjh2yOIOl{0Y1vLh!9Wv>T_1JypO6u#N
z7JN}ScyzKPU9mz2=8L;soZC{JQ#(}TleQ|>G__X)Vo)eN!fOmYy3`V#EQY&H_>MJ8
z^Z9_XpJWa3S^fNU(kpEP`q0SndF&cMFn<(XL=Z}ALdMEL+GQB%+GxBQN7^+0;=(gA
z80hBgh;$h+3MIU(_L%AmDdI{IlEJKauoz#gh4Nz%W*mWBWnrN^fKFjW#4E-Dm?x(^
z^-*D2SZak&iJJ+j7{1;#4 at TXv7RF2nHsdk4rQ{#n`w^N4G>4flwlAZlJk(}IA3^A5
zdc#pXXyVp_Ji>~%V9|R at C$GRhX$l=7QXp48sPq#;dq!fbSm7cGP}C;jzm6T4#ser_
zs4uokXM<EY*SKIBZsCO)OF8Ri=!sm6cK|qb3 at f-S3>y-uv+tOpP>!>yw{6bs_3SKY
zRpaD$0ehIbLPn0Wy6<BwBKDJpe8hnyC5cYyazp&^#U(Xsi>Gp8)g{m at o~AA at KiN~W
zvU+{)N1RX6B8J&qj`&}qHD2jNfBQ$o%L5yF8kuTK9&|;(VUQ6M8~Bfi$}CG?5K`k5
z**)1(WMj+0hb_rzHXxJy$lXR>kJh{9?Qk}s^|nBAj{TT?q<vVXLw6vk%xDe5KLm<)
z%BtgJE=?sN#?$Z!lAwg*gF3vP_UY*U^QX@^U!9((O3+LDEtQcbzD6AA6t~UkF+Iby
z8>x?lrF>4F4t`k(Y<lla<d?-I0xqr}ugZ~0nI9THv2M(rlph~~Rx`r`?)ch8xa1-z
z$fP40X8;vmgBhoo<+#FmSSx*DT0||=X9u at b-cZzkG01D2=?;qdSWRUP$1?l_ZU`DT
zrtyAv4lD^Wlp17ErqXY2M`9C4tO6z at D#sUkH|oBKrA-9?PUXn`piE8Lj;2egD=dk!
zdLHOo#bgYI8+d9Zt#{>~&{yHY8K-XSz+C{l(Lzf)F~5`FrbAZso(!cEY%2Sq=};xc
zgLhrCt4C&<&R#g&&b|+UX4%i!bN4y|1(usaxwaTKh))>ikX^a81#zOGOt-3yrn0-U
zuy=UnS~u0rE!H9Uh-96+GIa^jdLtB~3b0ggoBF#C(vcNfJ?Y@`(G+=cN7vc#XT?OC
z+%Xgl+~OykhOk6y0$N#`9lG6sZ^I%pr6W0-s0WZ8y*{(`Q6BwlfH7v{3kKL&L?P6X
zs*gp2NscWX2QDA+q))-qvXo9zGJvxX{35?c0p<#HHjHpU(|8MAD?`X~fx(e(>|Ra-
zbu5wdQBaZ_Oe!C)M06b(zs>RGSd6 at t(F0F$7OiFcNPH9Gvx9+iHnKv9@@={3e#Ujg
zKt>6$V%V{u2o_$~7G*gl+}{cVT5+PR<}JmCb&H(GM~6aVa>u4~q=FQr&7}r)Kvo&{
z+u~?VJ&xq15?jG>*Qa#{H&m&l|0RJrbeKt2T*iJYiQ}!yl@$W$IZ!O4F|?1#hgNRP
zj+VRmr%$d(HxZOW{TrOQN9--i=ClB+&Mevkp)fDOB)UI^QXtIISp71X2Gj28g9lgc
zc7Ntd!)Rt`s2_X~Uid7903}v}>YAYRtC`TyyWyo{sJ6hf^}%V`&0=g?gJZg*m&UlA
zAMvknjtea;{^dsi^yT%gdjg7qR!UpaK*A2|G>S at yr|8E3x40K}Ne`sda)S->UT43X
z at m4&lhf6SdjTE7k&Q}0_yYhT}g<AkOqWRj~<zj2 at 3!~w!(S{@e=MvrAV4dJi#M5cV
zbJ#$L$6u3>>}|(SxaRxMI?5q-jt<~q091DM6f+RzE1lxzfT&0us$V6jgDT{U9x#!N
zvRT`}F}(GL9Fhg{3m0$Dc6g#Rw>s4CpA|nLaiTe0IRIssqHu`s#N|A7dKv#lN+G5v
zePDrwP<pUOdV;di{;bX;541Nb=@o at n5AaAxVs@WwyTs`1Jz5UPgL*@kvlhy`hEC}o
zWP2)3_?<l5-pH0Zq|;l?^~ZrAe^Ua{Cm(%BDeI&0z;Cql^MdDD5G%ThS;9^&?*|lE
z(+OG$&-sMf74*Q6KJKe$N2#cfgXuDb3U{eGR&rB9TpU>LjY8uXF%D1Ocjx-0R6$8)
zT_v at E2{=@Kw+I{|6v$Jw&<cbSK*ORN6YQxA at gSY1Q;%okK03aBnkfY9LrP^|)38{E
zF}Dz?r+1zpUmtv!INbm)AhS=r6wRKq7b-D~iX6z82Z<zSAZczmt(^F4gQip~J3HjH
z@^!RJ^1CQiC*64c#l~~|<>u;0oyv4n%Y1czqvJP{P2}A#8d_werYbv&E+G9WkXC|F
zRNgrK+|jW0R;%KsW$upXr}MjS7DqeVTR2jpJD}6pL{}Yw{X at Kw9EIh`sUjdH_<}~I
zMw_=fZV~YR`mgKHE at q{({7BRh0|?J#Q=!?%Je+<eG5t%lm3?pv>_D*_B%%|0o!NP4
zXe@@7ak%@?t0Mn^PsK^((88r9+4>orb--M06r!_0J#u2b=0M`obXBeh#6y2VdJ?+1
zH8~cPS9f=`d~*)xuB1z}A<!`?v)8%%{9C@#5U1G}87>jLU7+*Hq`_6m!K0<LZo=U5
zL68~8N}Xob^Hp3PnZ9v38 at Ig)CP)&a!%_lE8nIZwwN8-dSQSoTjZJERt_m|M0Szd&
z1qlwJNW_vD&@;w at cpBqzCQyy@lohTaVUrv0(DC=fgLtxwhslQ5f)>&{<t_BYTfEf(
zj=i_H?*I!KT+7P~ZzhDE;|M<o-q_UxohKHDx{wjVtO_E at c{)n$jX<K-g)Gjx9n>;;
z+N~6?+c2%bn*bMxr+kp)k6={DjmWsx!3)EN%#tuFdnXR+K%uFrjGs*=Pi31#HHG?;
zWg#B=rWrQ!H8U&I7+1<-X$KW+2U&L_8RV&(6+Un(uvzrR?%DbwGHLLW{EEo0ogL*|
z4I>OgNiouLtyYVb8R00&IGxZTS58eaBDld|9ZDMlCQFnvEm_`hb;aT9_@}c~u90IY
z1xMpW0}T!Gk<U;Njt&<%MKbqKm1yT77VX1n{#|5;vfV*k3;*1a^>mAvCWH~mnl+-E
zxpWI*yI7~il*BJUy8uZ2cma~A8M0x;W;H?DuhWUZcj>!^_Zzg9&&md>S$OXvi((#-
zEct_(fyPUJ8yiG`IWcLIpvt?^<HxHmD8Z2H2HwZ~m4QmMOPji}EO%GkADc*L0=l_O
zNk8nZmyG3i)lawKTtCQCCreq)gr-t&hL)?YzrZBKqLx!0O3$DjV^DrpV&eVV4>DIv
z(qkjbB9SUWzpbr}&FAZ at n*qSBeMK0AOor!Hlv4<R9G&C5vHBaMRe0*Uy>|}P&$w at m
z6sQilk5~!&Cudl6EX*6$1q~K=V-eLcTm`p);OAOPB-w+JyIt6)QcCbzvlctSdcSKk
zHo!y><JFtJ#go^sZroYE!=*qN`P@|S<><O=_|{QQchM3Q7=6~1h|$6y-KTfyK5iI!
z;kmavYwPrArQKJtVxMvb<|ew+g2X9!cgqFoUrqP3AMuh!8k)P`Y%Og(QoX|2MD1d|
zcF(u3P6HXv3XjA8EpKCLj2>n7HF4bgd&+&2BhNJor3GB!swin%Prr%MR)De^chXzD
zVoMAZB}|A&WVm&G`3uUovQMb~y6sJc)+VfiV7(OR;eOs22f>`V0SttTac%4a6{yZj
zYBbL1<BP6fiJBtA(j{)e47)qG7Ph5^II?m&i*5FUPpC6~g)?V>WAo!x$yOHEn;qqX
z>W&X4puJo-Juexf?cnt(kEG32t%DJ?;6u49lJ0{(ZY6!>(Fd=__~L^m(dGNIXFwWY
zTRY4zEJ>_9Ary02f066&#q&qXv%pvpm%qET6iiAyI%#{U)kJ*N?QDNpbN#y~`qKZ+
zzfWMAUxonzlW5+F^l!?gX4#h2(G$E|>#sX4#PO<+&Rw&;jQf**e7O`O{^*6rRx(SY
zb9ZSOwnGo%@W$CN)S^e1I~2)RTJ|P%8(UXVi<-8nyB7>p)r;1IwOE@%iRgBUl~Xrl
z7JMZ-M$E3^2Wkks%%@o#9 at pS*d^mVycb3SBfcMe+ryThSVJI_<bs|2cTswXmXAT2V
zeFKQzACjbIZ-Qw!E!R`Z7(CgH+&6Fq9l9tL777vYVrTi9a4eTo?;TludzMINmj=6Z
z3Sb&e=nefk(2-F4vKo0bAO1MNY?0a$SlT`^ZqSPJ_s($lbkAe8Ymsa9^ss(_W9^QX
zbX)4y+0oWu(){4L>H`1Q{L9J0FDnawy}t1I){lR<vUKU+Jh9<@<rBb`B|l$*-JdKc
zUVn0<kouFGqnFQrtTp_~9KSlI>En|dzj3I3`5#~3KOE}9r~U$C>E`X<B5IQ`aOf5f
zOwFN3Ezn8He6zv4a<_;z$sb&S2_ZOgpDf<MMzvc1mE$(37q3!A|8nii=WCB?wYl|z
zo0RYV{=cLj++Cr>jwGaC?Be~OYma`EA$U_B31J($MCxz1sjP@(XW||kk$7QI6v~?j
zN!A>M5hZ>~SCxgMLNj(?Q%V#y!8(d8D at dlQXt8}_8pL&H@;Go9-bExhj`q(LpJH9I
z->3Z+vZ{DaAe#IDDc`NRUbqZ^E3;O%Bvcz^=7=aLaNsVtg{t6F7LQf-K#dJQJk6V9
z`#B~jxFybzVlX&FvLugdOl5nB*HC>^(=AbY=K^=u8<nh at h}Q|ky~2}GD&a67>~to@
z6qe2p^*^ouimeLGq at +Bg*CnCb1J5>y%S87$O-gG3d1{HV`c!1c0NvFg!&jT~WpTDV
zmo)B2<L at ReV!bQeS6%`(NnfDCj^oM&u&uPZ$-c6NKj8l*42K&-<*nkg8QR+=grKs1
zFhBx3RSsxnP1o)iMM4sxK)M|qYfpzTnLScj`HcT&M3&>=%KZA`+9H2tw*kwmYaM@|
z0z(}W|Lpw)tmg_WKJs}oGfgY`kFQ{j=mErc!j9SAC23Xm24m&xkqxf5zxw0wRmuaE
z(}te_-9*K^Dwb3EbGWZamqSQKM5jYzPSI$jnT+t%9)mqo at v?V&XLk)BZ$2XJ_+Xae
z%od$WWZM*2oslKZ_oCdxorR;<3j#pD;nBP<;k>>=R#)0*hdW=eJW}0dO$0`iQ at eBZ
z1Ea|}GleQhNzuVTSc&W*8)mKytqfhr at 58aaR|b*}G(g;rtFacVmp*CH57q(27N`{d
zMSzl91$h;h+HugGM}%T3*+A*Mqf^}ik+th!lsYByG43YCyy(FYs}nC!V9V;ZNu3Qr
z>fo9 at RBXiFvy5S~1S>1rALdsjSOJd=Kx9oOE{!7*zhQIpSIH(m<lF=-1=Sun=4g7F
zhN99H_A|XDbSe%fE&w<^@}0(WF1U-Jo_?Ae%`Y#Lu6KdN(g(*ub=f)N0RYbOFM$}M
zct{+BypTt`bcTT~M at f!|l9OkdLUJ0FgG(eozz2~yPwkhEQ5NoDKIxrY8k{(G%GXOs
zvL$eK$t#WjCRF?C9olOch_ZogAPV62Q94lpQ32|9UF<MpXInW#R`K<_?=mw+XGui<
zqhEb&HFDm{n#nNJ1ZKg0gfI-~MWtkTnEb|#1PW5%1kCLoIZvY(L^)1?kFrdy1Wzg0
zbo at b7ksGH5+>l^y2RKFS$XtM-f{1LZZMu3!CjqC}-9MCLCG#K?F|<m`<t%3_I<}2`
zYbv5Z9d at 72v;C|igL!6+8L~SQm_>5x00ZgRy$`X;Ew&hk=bt=U=_o8rOE9uj!J6_H
zbe?i*VpB^vD_18=a!uXdqX&w8Kzk1A1S4w5G(Usq(P)}$gw;g>ue$)Pvzvx9klMFI
z1}XqG7iY at RC-gdPU}f3?Lz^B(?i=0zH^lB?&Jj{ng9-OxG6O$+Od>+dmENuUI;T^b
z0s&|>^X2FQK@)1!;F(QgancMbrc4e#4154(pF&7U>59UNydFuC*hVGz<pbzbBeNsZ
z^-pi#R>%MDq1#4Ce)S4l>~WYlG?g4)h*yy+D}QE*w}{iQDp-e+uX>5F3Ibc%-6veV
zEtzRr$qOC93g$W%D$*pGzkEqrRtt{&^;f#~=*5A(6UQ~I_JK+WCGGCh(8akL#62ju
z6cB8(_K+~}B(2J)$emYQQB9u-ixNhb6z1k!{PWwvj<cnStaYUsmD2?3&@FZ~4#y`s
z0y<lETEk*3ePjQY>ys`I<woGC*=IUf*H3#YhBnM^PbEN9J}Zk-00X2%1CrB7nh826
z?Z>#23TGQXl(#@X(OOXmBl1p7 at YeNPqj`tMv^e*vAc<k1&+%E7=~byvXxZJY_e)uJ
zRM5a^*n|9ZY$4+#GpfUC^W8;29~eqcur=SG{<DM0%C<G(-4`c&Q at xuQnfHdS)=Lgw
zip{|88HXbgeobMSwRx*;cSm!w+y7+othyhh?u%#$mMY5K(GP1ISGw^+m^9(IZb_Kw
z1IRen!bVt9NLXFuf+H|g7XT`KaRH55USvAV at GntIo0da%phvJ!=0TW;pn}v)hBJz`
zw?#lwiS+gfS4_(07*Ukc4QDai1)ZcwqXTF;*LpFo<3>2*H81wuM&}sG2%{N}14U~m
zd+$cy0Sv~ds>QojiUwwiNyTgQuG#On4L8n7=XGX^S0G!g#8T?BKbo^xnqy99^rOc{
zZnKiRY-$FxZ_<O4E?o;4cErQkKdcBX(>zHfu$EnL)6 at a27z!QDN~cl9+Nz+Y6Vcf)
zRyBn}<CYmZUcRAHdm?j$v{kTqdM1HNzemXYLt})#$i#9pR3+AJBdFV4btz)5+SL4M
zRobvpCo|<4V3%2MQGnKYOKHS`uwH2J#m%?72fNQEXK&|zyq2ueKRw1mf5Tl0++xbO
zdbfKy=O^hKCd-y&I0x at 98A-^L(q721LqCv|lf8m5u6BUVfFsE at 0tNdnK5apDs(4y5
z6{x^}IQlB-=b!i^OE2mf_+mF0ys=za0q!IihX3i=2LdXgF<gwvMA4EqFVxVdo=nq&
z4Zcmz+4q%ek^_r<o}Ln at jigQNhXHhYpt6m05{614|44f6jrpzoD|Q%KHXc(DPYl+1
zP4bZBWu5U>h4A~U9+X(4tUr!ws)ecFPd(IHLv%Hz#;-q~d9jt$Pex;{YRjKFpLu*G
zvkr|JQbZCv0+pPVkXm`dP4^GeHst771zVB36~|CBibS2lF*rK7|Am=7j;_M>I1SjM
z$=P?8c&Z!ful5&*M=htE_m_UKckm`Y at C5r4wtd#z3zy6=cv+g?uf8f-mbe%!IP=`&
z at XQ9R(glKLI)=oy;)Bc$nh!cPdRxP at gZ6QIyoK7(6pTbMuu#}3b3iO2aTmbkY4Q83
zY1{E35Kww(d|jvGQwwK`^~b5*h5%`F7GJ{9ww3G?{4IXVrnfR~wXF7{RTIepl=0Me
z0y+8*%*1e-=^|D~&x|Wk=tN*bTqZOzDgtBCaGmJJL~#)l_S~VSaCltoQTz}9yELhv
zu^1S(&qemYku2o;^>wRdx=~-*g~y<SX`=(C*mLQ0N-q%$izTq`^iXz#Rfu=PWLl^g
zT867|z=$MoyA(JHH=nzD<(z&v*go11AVw4qPL~b90DEuebz|ZDWyC=K_F(a5E}Ft$
zXM9kX15VA+&9^M9i0>`%x)SUfua^aJ!=0PtL>^bHza{sQ#~<FLp<>TgQS5D93mllD
zlw=<t;ass;cL+Aw8JNqW2F4bKad?BMLCeI^V9CFt6gmeith9}43aR?BTZ@$Jh at U*3
zd;l$U2&w*Ks&G}gjmoJA4LnqDRp at 6b8u?eea3(zktqv&nrhZ-1Ww4Gsr&D?E7P0D=
z_(T8xYH#Puo6E~LZ^bea5qc#LR}D%jB3>4V#k`J7*}Op$Sl*ry>l`vhBXP=i)@yAw
zo82lj>}q({>a;_3loI(u3B-WRvGBpC7&|)0QRG-ua|_DwF<RPO0A3)B)5~?KGM16p
zRrFZK-zG`2vg2r(6)aSFCj+4xV~IdIDy5yr1X7MV3;brEN<XqP?0IG^$t*1zaz0D*
zKUkSi*?y!32b7{WTiLye%jTRHi7^ue`C8QY3-ThxhV6Iv(!3_4CrOXHm{zbByMQR_
z9RK?l#5;r>A3c=?P9*>pF^r;I$UE9c<U!!vqAuUyu=}E?);?!b6sw(H+!wl{`Kg%x
zmV$ZKUBxQAhbW*2PUs-A`WF<bg(xp}L*^o@<wzL|3*wTb5nF#2Ou9)BOYIG~hs?A+
zE}lFz-V|18IB8~kNFD=IZwgtwoPD$Q#Jp*%knBJirhBI}(<2t(N<*{|g;Ver0EP^w
z!`1O>d~n>%=aqqjyOBrxie4*lkkIGc{6+(CJEo*7(KGeuE8#@6`KS}`7pe_ra54A5
zGbRDe8^gV_D^iI9dg_%Su8)&IVf at S>02pHG*iG7k5 at lN29a~jLjX;B7hn)y7Y8Ikt
zLtvp|Gi?mb!`fkxaZ?mC<UkU(rAC9<28-VFP|P0Nn>(fEv!7Uz{gaV8EiT>Tzi!B4
z!?=+K%vnieg$1g^G}}NU2Z?uS;eMO`ghrRF(yR47J$$hL0dr!$qWc_LYKRo%GJYFg
zBMWsHo%41Lux9LBQH{eR_(`x-eP><UlyC6jtN;!{W at gT8PI9Z*mRn_UI5)|^fi~8O
zRo%ZAXM%`a=M;GvKC-LEDDSv at t5ulMtPVjfPq50cq}P}oij8*JX|Rx)K*FG#XU?I-
z)%liR8<t(<YhM3KV(})RbE<w{m6wei;$$mvGYvRVzYShJ<p?o=hjqkmtP_)f+8h&H
zM9rPh2Eq}vDelo{)miO~RPCmMfh+wCHZDPyy+d3rH2C1yRn!{UEshr=f)^IjLieIR
zTfA|DpY-cPOx?Qxm&k?9`uo|^_il44 at z%fi|1|za?6EYffa@(=z-`6Kk`ZSY<Q$9z
zkM(ayx#gIn>QdhK1G3Ka-VO<f=w^nDDtov=kei&v^Kp4G6BsPe7hufW8oclrhMHDf
zUVcjpLVv`+x<XH96(dI+EDGTI;G`Y0#JDM-*ET?C#a3wns|d40mt7xk%$_t#jE&{z
zhP^X!5r6tS$V*6$__{0b{i~42HvZke_$_z=%HJMJ80tKf7#E2zJ{xI!{GUrJ-IE`W
zJJKB+K=E}Brv;0F9#rT6pz;g|Rekkuqxn$v9__w9d!XtuCr)k9;td<(2=4|L38V)d
zjw9U`+g|$Gz;{tPZ>kDn<RT;fr>)0X at MO>{t6Yf at x}>(%{!}|S5RD#nI)JcTThMq3
zHBi{rD at nGQ8vZ1fC={%24AF`_eR`}~{<!IFX%fJKca~K`m`s?pssi{O0M0LB;nARt
zBmuG8)<Qto-3z;%FIX5#`1&E54`Nz2oC+f3pRsUDAs8hdl2r~TFjg_%avmE9Y)Xq$
z&ksSJq<W_vkSPQ|S7$6f6lo3^F&vV~|3bmkhlTAA3+0-a_b+NI$7SuxF?fXns at sFS
z#6*7Aa*ZCXJ=h%m`RV!-I~vR&YkaSk832$HNdo5HK~S|0b$<E!^*_+2T<Z%RA%#I2
z7@<Yv#+ at WXYJ**mtRjpW_zNNFK2 at UU^q?ei=lo<Jv#a_XThJl~Ei-`q4@!#(xK^Hl
z7pi<r{7>*B$tzlG0CQ~pJ$5a)IuDX;bhi_>D1;9KeB`;b51k||g`_w-6woHjv!W0s
z_p$bi&p9LoM5&x4*1E-7TOZ`eG?&erEvdy>ad)6#LRS6ySX!=&m0IKtdiZK-^Ug;V
z;IGh6?C~SHxsjw`LxLTUgEH$;H`e(&_33Ma*zwsB1)2BRyf~#&42g|rIXj~*q at x15
zv5zaR`e4K5rtC9%!K%X}aypVLX(g%msB8^GPnm>5(>Rn^+kkeGIhm88GMsX$2wFYI
zsA1Z*v(ZRM7^cnEu;5H1qSqYkuAI_HY}nzUJ<P+67)fIxl?r&ay}!k#w!-%+;}NXb
z2_;yoH at i_!OItn*xDrE}$F3Up34DnwVgaR_?D>m05OF0_>49w}x&Xx+zG_bJ*W(0(
z*o4DF4&}(c*HN+#1J!a**uodxC$crRo;}^z+ at kbyL+1}Lrmlwy^^{*B`xD)(2O85R
zSaU`PXIIcj^_#sXNeR*r2DJ1 at 47EingX6Tz2l{hdc#DQ>zpMCzni0svHAN$wxjJ6%
zMDv1R%j1OwWtK>%|8nKY#yYiWAif|m)W<SP6F)&O758JW`Uo_Q>VWV>hk?KtfUK8@
zlfNT?%WXsklK>?ksHG!AHZS^4^uS5a0xgLat*1~Wa<D{DHuEob50^Sk?Uj?1da#db
z{#c=>&_gHWX$dX&X^EoU{O37BbD_z)(L8QpW<`yOG9F at 6vi9j<5xfPl9pCiw(Kspb
zW4AyGR*&1ilMyN>45JN+P&@?}eGdhdY6{Kty#iG_hAJgkkTXkRsI*maHNg;rf at H4&
z$1<+6`YfSVGr=dj*n;)DDoev307q6|JFCKK at e5@;>hrtLmhXIa`!nGPO?4k0(ZK!#
z979ycR09@$H*_9>FqwkEI@(x!v_ at 4&k_$E=4Y4e~B^<*?GGjoqL)hGut3C&zg_J`}
z;ZxUjXh$D*2?+(!SxK}7V}Ufc at _V9YtW)K-;|-h-Z^zl0(8!i6+TBqFq56uLOGhFe
ze?-0?U};x7^9m)$a-xgqwNafI(IN^1kt|K?nn_tOPYPZdexd=;EX53so-oZgMBymU
zMPh3T4QMa-Bj|(@^bV%0Ly5G--t83eZNd&v=ad~NEEZB$3T8Kq4>KQ!3L>irBbwz1
zNy6*Ji9&u9_Z|`;HAF*$SKB@~6!rL37ztTmQ=A<AjO2#v`4gaIV7Yz_N}F0#I0qeY
zc{%rZ^7GoyT&}dLnJ}xh1+?F|%miK$f?TF-Vi<ZFOy9DdsZg*&bFhY at n`fYKh7%Ko
zj2I0v^L0>wO>PV{MsXdT<N*A`Zf#mY at Uojq!r;Y=fM$Er#H6>U5Ego at K7H|I)4=-r
z`O_EAM)!W0fxo&KO!i-$qjstcUTGJ?hG-}{MM0tGg_4zoa5X3(u*ws3_kI{F6Hc?F
zS|hbFaO6UVT=R7}2g_!y<VOQ*CC`A$xG>0x*p4Lo!G=htd;8%SM*%|$5GtEGg(M7e
z8<&>X)o?YS=7xI9BVA2`^&!S1pbOyo$wjiDWTzwnn(_G{Pd{L at qA;g$(b{B`gLd?|
zAYJOn$p;#u7U_BA(K3sL8z|>DB<bt8PD%$uH7`n`vtj#peg5)ev+-DdOchC_Ax=zX
z>BKNoPop3;<I-mg(rP9Wsy1tkpf{A12M5zrTU0H-`G><*DBj at iuywCckB4HU0|X7P
zl!j>LmJzKkeQ_IssPPf|iXJXWgs;z)yUh{)gB#(vOet<kgQ9tLF?0VjTUDGJ>>-1a
zT at d`7ULPk%6lcBS16AE2r?O7fSE_~XrA~g`hMjEX<Iq(aH;3_KrN<KT{rGemQ?5_(
z*$zH-65<fWmkPq8V+lwt(8yKoja2vd4!@{!$>|CO*#+i5*@gMw@??WwA8bFA1pqxo
zjLQrX(t?%fGw1CFmTOXpa8xGGCKfq3ugnV?HmhMx+0io?pbj%bEJM|8{KCk7iH}-U
z2sFwt6KlETyIf?cjfi8iW8{#v)8<9i&`Ke%+oQ;z+RvVJCTg}C;YFvwT5d(as}eq@
zGr8C`rzVFDnKr$=jEtXvXIS#byGM99kh0`QqfEOEpiTv{0CXmXJ|qi-Rbe0lZs_?7
z)qaq`Cvxqw+@#cPjW%6(l&KJDSL2Yxe>GfG8pV-inz>3WEB5aF1umxVL=*HU%Wm>)
zA%oV4s6X5CP)Jg5M20cj^39_}RDO`MF2*!-sb2YMpxwOW;|}c#6oXkwEFUZZgGB|j
zz26>J1(DK)=X!^pH<8v`W{H23gqS#LV!S2Bp-uJq=9cJrw^@K9gnniS^R=)w8s0ee
z?y&+3@;uP`Gtk2(YjJ{|B6#g~8uV>xkUs8^XK^xGR!Is+IXwYfV*eb=)JHP|wqR~t
zGZ1xtf;Tn0u%Kqruw`E&C<Z?5+o^Fg6_}xxsN`{fW&Jz*{2|>LG!pZGqM~l$_o|lI
z5K43gVNbTT!FH?V(6tvHQ7gMEQmS at iN<-uX4E2 at S_ENus$F!>xtegT83P*+?bHhV4
z5E(Cey<=xaIsq163B>^l1NHu*9%&7mTSFAegfbN$k(Ra+Jt`v&Fq^1^1$YS?VlZ>a
z(!TH~<J5p5S64!X0DF`V$K{6Us`WS&G*0Nn$f-wWmhMfv<V|D2%ej1A2&>m&XHg%)
z<Et`*#8PHzC_tHvG0Mm?`oiP+*A6B&iI^HB4XYqDVQr|AQO%RwUd`fQpnG&d>Em{#
zsPqtCXv{2b!c|L^$qZjgKUAb#+3<sRvlT^e`jKET3La0#3~e)H)`MH~-@@O#j<V~{
z<dIne5|W%|P at t8D!wRZ}Lc|@)X{lP at jj0~?x?kfq7#BbiB!_ZM-hy5<!{>O6e!jQA
z^NJ9CyU;LHM~h{zVA_-$|NUt9_o`#Il(hN|`#IS|7VXOApu<vhfxAGZEJW5jZ|^vZ
zG1MqRT2H9y+q^b<@$5dgi(ebv$I8_Iu0CIjziAGsx9+cfe{Hn#Xmjm3YN0Fyfh7x)
z0xnA-xK;AAgc03<Gw%jBw{R^#l<^}ys7WiueHP+wwdu3*G9|kN+6<K#ksP3wG*<ay
z=7ce%dcRH!tRBAZ+s~nqHJt6oV%@fI2M+kr9JKmjZfOoB=;(czymQJ}nM<EO`cUW*
z3}yw%Bh;};Q<%e24)7p!xIJAS7}(??ov at T3F7ilM{!|_a?gpBD%Vz+-1&>Ik=b(^*
z=ClWeXD}8K0CnM#0ypW>U{#fiIl~!{cSrB<Yjd<hHQ-F~C%PA?pzA=Ce6hO=HbMx&
zTh|a8>Co)PmJ;`xOM|7I;RGZuaCSu4Q!_iedCp)783aRsH8?xlX+QGJkgQ^(B2@?b
z_VuyQR(5VaAFV&@wuuJXG+$csKeOstZJY)pSNHMi?ld#d>E+#Er{F>Ah#4kj6gvNF
zar$5UhA#_}U&8o+<-B=}2N^7u;pT#U1zrsvwRq>pURYK#F#mt)vyZ;<IrWxzKJ!b<
zcRu>or+O=1x{)tkp+<y^rP0dtRhg0GAl0V1b?j>5j74Uc{nCLx*ofz)>S-8gZ2=JY
zJ5h at Op|krC4Onrixt^d(ZZ)<8E^=ilK_9*e-j(#4&BY3nwC89eU*-m?jo-h2&lP)k
zJ<U^veHH}bInTsWa0kd2>q<~;E2qqwh_#$-SC>3HG$X5pmh_)tB1k`1bP&IeG^?JM
z<u~5440CUK*r5V=eW%<2KbSTqdPaqqFe&Y9Q>{VMiW0!_SJN!T#Skbm8T!Sf9F${^
zQ$piq&#4}bvg%ZX<_t-KVDJz at nTT2@<$bajww=srY0|^;7AJOTP+NbBi1V?)CJzZ&
znOGnJ04%fFZ;NFP_Y)F}4Yn;cn>~BTpiK~h^4V$C=W?Q(zlM1LZw70(&ZsTpZ0_My
z10L8~m;up at oD0`GH9>F1=nB2cl8X!$JLf}iQW_yJp*Nw~!k=jevrwHwCU~;tjUYr&
zcOJEvRmOCrX7pjo<y#quVpWv!hBAl$_k`9<BnH at W<`4WH2VopU$}O#4KL2d#^UpRY
zKi<R}B>ZSko^0L{Li5gzZ&*%^iaNN5^_=VJmvHBLTf)lFfenI7p{|gdt6o8%-U}BI
zG`sGddlY%C`bd<REl*iI%CLI#`3yrGaWWiIURosW{<iFCLFRjURUhmr?`QiKNZi}c
zQOM3{z6=Tt=b)`R^k9~27t!#ef}C8HlNvkPJ&`<fSL>X^u+u#d(&2<XoqZ%>%q+>~
zMaYViS)-GFeZYEO<V8TBkFIfx`^e3Ha{WPU-k5A5>mj)q*ak at +Ixr(drs{rkbSPgV
z1I`aNEuBzzt#X#Yrhf<CytquS%Y7yAYdCD}Ur1e&UgxW9{hJSSbo7pDkhpQf+W_!x
zn21V1W`y{f*_m`k5ss5dfMr at Ha|-+EHwFCW=mgF*H)2Y*PPH<81=QrsC8fC>Vs at b{
zb!wr0?+dRs7AX>P=A&Ztj1$z0eC1j-!VEK)%cR$yu(T~Qbf&mCEwfL`N7+DSOL3R(
zg%TFZ<UWnWo5dlVqW43Uon-_L2UHT4oRp>oW at FC|Pfi_%j!8HyPbFNG;_Bkdm-{9Z
zdqc-_BpjbSk^wEIzsc}Wxj>z(E<#a?QA8(?H!gX9m>dSR>UK`B`%T?4pI^hgs)M?&
zVrd!XcUn<W=D at BTBJ|#qLiZDv;W7MUPHE1xo&{fA7g}9m!9h*Lu>oA643qyG#HjMv
zknTgLmHZF(Ny9MgT4=45hE!xXIt7fl(S%UM-EYgpLK<HH6U`(m!|~5FG2D1{vWFu(
z^CIjLwwqX#2Fn)52Y^MnAX)>*WkcT{Z9I!ZrB3govukav9zCg6f((r~?tBCdo=FVJ
z&+hU?;+bApFC8+pLTx0L4#eDC+M*-OBVzbY4>2B#Kj{rxP0_l9tdalMQ#eusyEJzr
zqMXbh38TvLfM3v=^bM;@Ij`^8g$<4_y!5L07hf`ph(l+WJzm4*d&>0$=!fDyshx%A
zMu$I4{pc?^s1P1s^r;^PkBF|4gK}<@r8~LozDDnOJDQKSURQ(?`A#g4Ku0gXv@!1R
z at oyQYcMIm)Q6)D;j3GMJ3eOq?!{T8$Bto>y0^8_mss&tg!h~9186JjJg)01!SB&PU
zqkeq!3zRw;U0?jX&mwAK1TD&Td0kOxR8swD4(ixdUgfFl#<Fb~<)AsNMWDvM!zxeJ
z|4p4loTBdZ5aIF%L^W<Dhc4>FVjUs4=>j^t)~_TF>SCul<Pn963(uZQ!wMcLT?}kO
zw?>6izZ4d3m7W0m!e5k at 6+OhoR-z?|jzWG$;$=ut1TVna6z381snwY!`Py9Zrr+JT
z^Vw%NMC<qR?p%pe6us-Q?6x`#8#T7J*Ye;PH<K6!OgipfwNfAw1<&Qe5sZB~ypo;>
z9HuCpT2JU1(-RovXd0+NdB20Kah%nXFlG%go{&lND8>DVTGz7$QW<s$flG7{w{YA>
znw_PM`aI~yDzG+tFu!WFRkcA<1c`dOlg at y+jD@T!fU=Abim>{^%EszCC)MX2nxB15
zKMBy{{D3+MLXeW(z0sG>z{-GZO>+RgD8WjQOf at S?NlFAz+8nmyQUmC1hfXfxbDg}E
zmBC0^tf&xk(-Rpl%}2gaXjj6OXl!)9<zvAhJriIbxjtBN74)!Nwvq%w_4$j0Wd&NI
z`?6ayT88c5SRyHhm^Q^20*p7P=Xo`Hx-t6x?r3B3dUCQ?FKDyW!ZSK0%t|t9o40~7
z{;KsS)n#r<SkK60q=bNGjuC5U=@=@1r%uAy<aMvUrIEnN<XSs^cUUcgAJ(<`;FFic
zs#^m4tUgjwE*Rw{uIQ0SSrRbti^Lkm<DC2viZFfIl?ZRoP9AWi6?4pKKM2BM6!<r3
z?C22d-6=v38 at j3{^qN1_bjB#g%aK6@(`oa*Pm!az0n~Is*dsa^6rY<2UN&Ju$$2|z
zfklo#T;o={^PbAVe<!z`ep)d-CvAidD|-`s$yj5gOCbK#n}S4bdF!E{*T5R&nh<<&
zgF|{WfbQgwVRkv(|1d5A3ZJ~0qVtabyn#DTv~)DueEwohFa%|(NDD>P-JP}DT4ySo
z%4^|0+esNpM`T5EmArJQzKm(N2AMXvQgQIdWvQTDuVmHrJlXs<14BI#GBZTDzaJU1
zZ15-+!u83if(FKk;ra}dhu|BqrJFWUkPfeAN_7>xF<gyP)QGf+n+rH25|Sm5E;;C6
z?-gbN5EW_B*23gV{gGy8r0^8KbXL(|d*YwHxvdJHevuJ?GMcta2coht3kqjS{mO at A
zra0}k(gEAD=ODvPLhLI#lL-Web{-DARMN7<9>tX}@fxLL%U(7)FeU`j5Hn<)*sJBy
zWC~iB(gtYq0X;C*-r2bm;UYq_QGu9To_xup^))GZ3Lib*LqO}A8cHZKVzX-Bn%AW(
zRCO1OF!nq`EcVrEC2;~&vip{3&@blOWGVPETuAkRb`tNwEMal`E+e1XzLNstmJZv8
zyo%5k%kuW3-e~@_>(bh9-MUFfhx#bGS<IiGp4))BdGq?6c4NwT?=S;?IE7TAJwocK
zuZ2h?P?_s8g>+iqYqe}GUI>c0Re`mMQXZImrU43rJeIOAo-P+D7MD-_M9q=PY*$)-
za;cEh%BsPkwtudG8YiX at n+cCZ$@qn+Q!YsmlffxK>u`J49|4LUy}OR?%dr70Sw>VF
z7uC6Y4_0x at N?B^JH8)Xsxw2{p6M*@2X*Xylwa&H?n_VNeB*jN7Q9fnZOt5-oGms?1
zjTY!3!-dxRLj;DJV;9>bnzV(Tv=9!yRZ at v04Rk$#(9==iq`%lMS-`6gSDu?DTx0>3
z|AInr@`i$N@}U*cj5jyezTXtO+<Wx&UXjrByYAa_4Jp)L>6 at 8UNcUrL_&AJAXG1!I
zV`7SV#B4KEB#i#Zz|vV|w?>^t*8PD~=zzGR68y$8w{8{~*X5c;pWq&HHJFw~bt8>O
zVfirQFzXpmLo9TpYuT|I+ly#Xeam634;3t2bL0t`ZuBqObX)YWVl5&Q2HQF#7d}(%
zJxArUq+vvUsDD=DjQmRDSj4kBMwAcSPYQF5VfcX{5-w2C;}ReGGVl-V9(o=7rqlr?
z<#74{0-pNLN&r-&-m-%E%|YxjX at I5{=dhm0ku at D)M0!32bFGr6a%dpk3^%=rnJlW|
z!B|Z(RO0NVlj2;`@QdBOD5Mf}+Yk=(1s5IbEkYI|7GbUyAK7>4XK at N18ULAATGm3p
zH1xT_(!j&!t*SNhn=~19YywlCym<5|#<KS<12?%EJsbxPxUQ@>dgUkp`E!7x0k7?v
z)l#b=9z9`77as6P($z8rkI^kzYj<$0^?_h%g76bSU$JyiXC1?;=>giGZY~vA5pkPf
zEBlmig~}rgHa{$ku?0*Yvu4 at YC81E3--JJ$gRGutyk_%{<B;IhG1`Bs0b8!T$9II@
zl2teMX6VHe6){R=AMOy$H$&u)OfY9oxI<zHCnZ!M={JeRYC{1cdTs-;ALMvYsd at DY
z$SSJwh9nDEB2$V*Q~m1Ed*<(nTo{ozxigi at OhkOKwaU<9ffCWAMXM`@o&z5*N1ndW
zS283N(9weAEzXwWHhA!`xMs+JwVT-;3+!eT5JT@>Lm}A2uz931_PHNtVn)?vfPFsz
z6EKFXyMlM>uNJ2UT2V>zcSLsb>2i02Y&%^3h=bcbD~y2ERnDk)dw_a?g4z)B<KqfB
zJCO?Z4GEzp0R#MF(65GHpR1s7tSh#4rQQB6T;noy{pYZ>n4j)V*>L}!(Rf{M^Rt;7
zjBKw?woO?At<z(_!W<<EU~kntz#Ais0YqdR3`It94*<!5{j{ePZ at 9z_8dzM{1;{}f
z(--(LiCmR|Y at EFHC8$AupOlDhC%`y?#sJJOH!ZXn(>>c}cy at e!fKrVP=@+Yf`LB;S
zC97VwLN6(3I;)-WP)gSr*wSC6Sz|wSyJp755or}P9dI>9iRI>~W}(gune6;TmW)i?
zbbCrW%KTR8ga0ZT23j>l#7p?f+K3VHvSgSlB~PgbP;DX(${E42hvm3MA&QiqlJhAo
zIa0JvR7s$QQw_5eoFEcOjFYe(QUyk$#Dl0%v5T%@{lSNwZH_-GlcRfl3Ot2xr`Ojc
zyc}R|<F=0t0z*q=nBo~2KgO5jy#w8#HesHwjLt|r8f~s{q2B2E+9O)<=GsS*U=e?R
z;CJFK^0>^?y7tM_&5%9WHDENCX%0KPVTi!pkV}*W>wQ|4eDs57&(|NXJpW<z&DsyT
zZd7x}Tvxg)qs<?lt$q3U1J{>4CVgVvxl<%ZZ9bh@>9;G7UaW15=I2)Du8rna at u2KX
z=9F=9VRw00xi<>uVa{m6XY;oPYm{e8_tufDhM<mYlK9a5w%W#S-WYr|3khLE0IlF~
z`-;2+69mF&?s~#&xZ{5e-6>%0?fhd9)piR&%cz``tDL+NoHq1d0 at EyDFMNf{Gxv;z
zx35+&hi*_n;LWA`zla6}h|3V?=5I!vHrYQ0NvyE|5<u9%hlO!S*PzS5G4sV^LE$kz
zfRnE#`-a0NX*W)*cMTCS7TFmtbuu?74SUdzHq9w1MXqZei}Die<5Z6}>MA?)<C#it
z+gOnPBNbFd2x#1ZzzDwEZ{%UU{DnV?expO$%x6Osoc=PNz{d1-Pnj{w^x8eiKeh7l
zYOFCed0feRZa9l(RjVK1M9hgJ7aPv{j*8=&Fh$~!7H74j2WMM7Ez~6RT=^3<-_lg_
z2$~WRQZ(y_lBxE3uHl_49$QYtie4y(NOS7;%qc;@Hj0zR$D#ASIEMY_eWo$QdWe6+
zftrmYs`wKCIpAXaZ}1+A7Y`*pWV}JzJQf7f9J|%?+z$_`TlyFxl1hsMP)<vz;ghD`
zgj4qh<BizG{`tY7yiHg0uA}kP9y}bt3!PaiY69;+9fguPZCyaiO}pIV{+*6t>8)}3
zP^t3j!qsNlhze#8#WCI?lGhtErQo#d#|=U>H*kb<5!scMB-|RIHIzv~*u<)qC#mbh
zg!!ujw!CRh6S0`J?7mdYCV_@~Db%q%y1<R_{VUhPsC$6^M>Q2Xmz)tC4{$-YqCqB=
z`ET@=4S;EFUhU5CWGoxSv6BXBdQ}D)#<P%!_CBDxJZ1|D`hovMT+qCl;$}Nniq{<)
z!S%q!3E(6u@)fuZ{S*uQfct3Gf~J{{02u!m!^P1KQ_;$-ATPhv80dN&z$K at G3)j*q
zc)atPyfl=?aqGZ>F^`7N4c}lA>)I6U3c<=AgL+%*4O4BdE;~eK;$To^U?n}*VOK8o
z=sX!q7nY^YAEZyjP^r;{zCG=SC$)&*Q2{$IQ`b}u&`*1BY|#;F;ZT!99UV`9>0($x
z^O^U{et221!>XlQM(M*^V0^find&xb%IFI3j)u{TLCmGimoBMrV{cUp+eFElYAoF*
z8gm4=uBlW)iIz5beE~2Ut05u at CX3nZ4FF1mX9)Cl57)0V!RUty-47IduW>#ry6PT~
zks(13{ymz5*(||9=`pK`YWS9WD`jw4<vwjBEsQ2h%dnzR8^q)8ba2^J#tj`A?}F-R
zv^so_K^h49)9x2(NbOBXN$ac28^G+^Cgnni2`ET0Z%{QTz&j9?xWE~)Nz#avmu0tG
z!OzgstC7brI+hKF<J!XvS4|6`(+T&D-oF0x?d!y09q2MJG at f?SA1*+5H&PAmfmr-8
z2Z{x+if?&$5R??3I-aB>%H|Tl$yeH_-<-hf)pPE1)EcNS3ZIoz*4O~Xp=X%hA<#HV
zys%9a**g-a>2)X#e}YR|Qx?-nR0<QRosujkdn5%6DZvi%GAXe^ZY)gHm1BETo5jE&
zIAp_0W6NtQ&W1xKEO`AW@;J)d$25?#?ahTf+B9BWh;^CER?tMrRB6?+JdQWP)@<!?
zvNB05G_tc!?JB|#=-xLV3=7ij9$J0`B`4Dl)ww5uDvuR=@Nn{UnELS&SvrpwVVJN|
zaf7nu#=-ymgd{_o`%2Hn>BcxG9!MTtI27oUSN(-d3PB%&D?Z76U#m#24N`k{`k=?1
z#m@&>0}d|e(2VQ=-#!X>fIQG4F;a&hA?*pp;;#3N3RFui+#)+D11wFuRiVE$ju^(+
zz%$Dy<(&wG&7<vJHc^11U_OAW;IN}1PU=17z~BU_l$7o5u1-jSW_&xYYxd`G`6-#*
z1kS^oER5>MlC)>Z{HL!WqO4FDX3y;O+vGq`&~wI#+HnazZG|=jh$yJ8HAOBdoRCtZ
zw})Fh+nlopBZ!1!x4L=S_hbi>URzf7y8dy4vT_mt+m?RgUT`PG3Y(HPwVb$$I=vEh
zX!n4KGf`Jc01r5{Rs}8P-insDqpu3?a>>G{_g>*Ik at OSjYvwV;LXpd^(l>~n-5 at Sj
zZQ5co`F34!s5DQUb4A*`-;AVG=f^9Q?A)h_Dm)t5G!%V_!$O{coLn~|Tuc1J>_9d0
z(#@QFD9PFLN-XG%m4l;fjSscU at QvZRiB|OXZcLAp*$LvDroYHc67EA52#2~<vmeb2
zC0Owotb9VU-<l`RJ@~VMC&$Yb3Nd8$!}m&w|1s*x`@K^_JYt@~Nk2qXA_IGcdofC|
znAoP0N966p2irOzYn0}a&ov6rD=#*mZmmDT%kp at Qt`SxxX&LMbzl0Cq#bvK>H!F>6
z4nL64DYv#phx=uu(H^acQ{+t1J%OXMZ6{m^n^CLIYzMs`ah#dy<4wNtEd6e6Eh;{2
zMsZ0(k at 5iGc*<^)cUThAxaH6lo_BeM&|!1Y(mKqv>WTV0?^`9550E9RIhI)(w2^na
zCQHKVfOLyL$&Cy271yn?M)ONoM?e4k^XTf5B0Bd`R14cz2?01n9#J+a)k=;tCB}jR
zNXUZdk(jO?4b7 at 7M-u*LinW&0G?dwS;X)t6kT4RRZ|~vcJz*&ZN+rFq0|mQT0$}@z
zBv_#k_1)z6F>ZOMm4X#M{*0cwP9ua}t_^0eZIEdf{fXstG?JNo;N045I;d at Y&QrFU
zArK at U5##)N{S8INLbY6~@&Y04jCC99xhuk{9lUc!N)YPT8yu|^F~^74g{iCNHk$`_
zI9+5cVNOU9gWQc}78|AE!V01#lEEKFn3Fsv?zqejg*CBI{y=y`(;_Lv-yjnKEF^0}
z;jf5zc{FLK+yNHsR3#KyLYit_GLb=$&&%U)cn)|dC0c01_nS at 9ZF6H5he~!_<=*pV
z32_z>vG;Kak3}CG^byDyrQPZpD_xH?58UeN-8oo;wmUfO(RXAYpy$REHcl$NM5VCO
zw|;FOaR9)qRdgy~>f9r5Ru${&&6gP_u17}pM68q~Hu}CW3!zdWp@{KYwOLi4N+j22
zM13`ec&qJF-wmYxw8K0{sXqktu93Tclej+*%{b`V5+Uf(_m3Z4>z=_secI2~NUF%x
zNw|1M1VdpnHxP^@#o#XVFCD81s!&AfVja1%TN}PMOZkgiN+wt8&ero?yeE*yV=!Xt
zF at ZoozAtvP@pR=G&ZE9v5?7h1gBn-vdMTuIM%6EXa!uHxE|a6qR-}+S^%^pK6lsO@
z5ShwE69kQ)f`*pnx!ug5)1^uoNd;3B`-8<KbIScKXuRwYvgL8U)K|6d(E`aa+DEl(
z5#?YWXjUBzf95t?@<jQK+L6XF_Pr=3 at Bmnk#Fx}I9e*P*pLjIZ3*AV1y8 at dcSoIh~
z`+?x+ix48Lyp-a>+?Wl!XDN~)>cLKl6K55Vk<(@aRfEA5h!AeF86DlpG%AWxclTez
zN>0(VXbHbeiAHqpk&v)AW0OYRhiVN&uXYmD={LNuTpg4KxE)#bU^mbM+fRPlbB`&g
zK&geLfraYi{GBFCqu-;9A!W at VTSN(x6+x`nt|+|vgkZC!;v9<UoH8ZMEY%mYQmsSK
zXxEWQq-RkT5y`w6YPFRIqC%PCqTVro4%DGoTpNgEYpF4y!eQkj7%zg&G=;{rS4c5l
zjkFfqdTeiu8l+|mrblydTkvt4H`<Fd7waWjPI$DX^hL&#7Zvhf>;!oz*z=~a)9aJj
zg7>9MK8brV0`PjN_}c)`lfk&b-iMLRQ}j}B&yGg8vlbeX2OZ&%tb92Hq{4bxQo(<K
zdnq|Wn_oRU+5ZED)ymwTkDI&yuo8bVR-}{CZxvRMSCDe<PT#gZ?|GEFJUh#1eiqtk
z;KRenF3ct2zd3uw1+Vj2m_|XdfNFG^cDdpj*~JqOxeZ!#tnsn0MWu&u<S%Md_MC?0
z(v>GeaPKc2h(Yd0Ozs(W!2Jk8kRCiw-4=zHNbkAuMcJ_(-I%CyRM$C#Ljx#K;nd?q
zKIO(!Og<nbKO2!@<!`ef@&P#oXc!l&Jh2B5v`poH8-2I=AOs~?(ED>iTF&M5`M!Y8
zVQnZI(>~n0?2=VS3Th2wixdt^cSAmdLL#gj6U!KMVoJX%nr90Q4+iFfc^f`xnmf4t
zL70#svt+jzZH+v*8L|S;TLP&>5YeTh76eK_9#N+Udr7m<P12mtB}{apez at sib`r1v
zOo?eg0!=%7&{8Co_PTJgN7tIyoa^oaTRd5a)~9`jEtwS7*}RW%TpS at 5?2r at T)yg<K
zr<qjYu}hhK%}9Giky?N0B-Lkhc?ltrmN10_2r9Yo)pl8ejU?#3eKUeKiyS^jZb-xq
zERrZ2?b>6h!rZ=$Ijf5ccb8~yZek215rbAy?fyPT4^RGVbdUHXeTCnFPk2EPP(pI_
z6lc|J*Tb)Ph!f4|CM8B5Vyd<3F%nm3BsysE8GTX~Ja8}HeWKk8pU115aAem;jxp4!
z6%6E`4ytA<bO|Qp^)hKDMDZf)AEbzh5gA?bLfP;mazz8nWuCd(I}2xpUd~(>Ejq&4
zj(<$2pnYjZu7gCKI09vna&6rur`sZ-5_>Let1(Y<=91n15>3mIpMZgqwzOF7{18B9
z>#f1Q<p(g8GPzR~wVrU~cnB4hsoA6&*b7MFs8%&<R=7yyLk<$lDCtIj)J6n2bG8yX
zasG8^83hFlbr6Jh{>-)O=J5hg=pLh`t1n68U02%2k5`w3B=3Dl at Oq|EYglT?=v)Yj
z=T&$SCcyX+Td*0d;jE+Zr+(DVl1l`%^g|$kSV1Z|KBQd5c<E|4T!%v{o<Gkjm*E{q
z(pod~L4&b^$HSFxv8#Jwsa#9aI{aN$r^pjB*c4WPcrl}45`!RF%hBU8AP}nd=dq%z
zMU at PqD{^#{%x!ZTY=nuaLK+CP{?jv{&8_O3wX-fjV{B(kY)b<~rjd~`G$}v!k|@m8
zJ>!YoOIJB8W!2CeXTzyquE~NO;u2W8dTrE0bF{L7sFB8r<DjG0Y>V<}>pvf3Oc>?6
z?%JqOLF5wObV`EnF+qBYcuso}G8|x&PQrYP5pzQgC7j_z!9_6Gga)6N{p{A3i5vE+
z7{}%MhZ0uMF~sWZ=lHo?-s~N4X;Sm!#Fd^m0E_Hf`GoD$NGV&9Jb3=}u{<RBG$g^l
zd$@+>wG1uL<oW(c?~Wd=f3rqkp&pF17!vrHFs(glEtccso<Q-t1U!lkldPL<koYK&
zA<_4TNU*J=`)8IryViagzn`1d>Dr|TN3U?q+T at 1kyq+a~PE4w)jjtfMjzpcc(dNUo
z(aODzwI{1<qo)rj>RwqT%W8n>knhzcvOW-!PF7JhymWi&Q6<0SWTBdZO>=~W(Rjts
zfy~0{4FRuxG(b8l<_f^5HVY!>PD=3B9y!R-4ctdmzq%MuP8M1FA=w4zb`-{Sch=9P
z1A$35j+36lVc1&lyB)ktYO4$>_KNRu|B$F1UemJ*7CvD8a+~t_gYQh3oOLW4#;Y($
ztkxPYtVD<_0TQfRYb|CS!bMvS^+lY95#_h&vZ6aSNP+c!3+q92?Igl68Jg(lgLr-#
z6E+dR^8dB6`Eu>Y at 0-I<v!pLm at QA8hYwiOxA?=HLFBJP?6BmX=W1>ujhRXZIyyT{A
zDVfz-(OS8KjnTzd;1#sy>5+HNw{Ln9kGa~)D0a3t(myYfD0>AO`dfJ~U+pu%f1z3J
zz1rXXpV9A?S|KgSzk5tsx82|1nxN`C<nw>20geazpAqkiSEqL3BbSWm{^qW=|5cOl
zV*J0~bB=kJO+D-WmN5FS8ne9{4>W4qjNj at 0h6;0WaIGeFn>IM=;En6(x at m6TlH0|K
z9syg>EsCsV{No%q)0fU5_m`@M!WsqpTtMKSi6YPgFechNc*93EHuMxVUD0JxYPT4j
zTB5z#KicMO)dCF1FfpCG*~PBgTzmZN>2qauI<0i$+Gyk9)9*(2SNL;fV~xKbJzf1K
zAIiI-;relcIfMn+<&4U(lj0MOof6G<Q%Vx@%-mmfs)!QMm;E3g!w8c1O6$(z)W{>5
znKYQYs4`m=3Mghk{9}*4{^?LrBLIln+$_A?%29E04ksdma4Fatf=joEk)LH+Z%3rB
zIis2U8>5_BdD58T8rPi3Re~zzt9HOf-+yI1Npei<2B^5tuzHtI<sDY-y_k!?gBs;M
zG~bPnc+|}%3_;BLVrs?!Z=@jIiFLBkNQSm+>QKgJa(ST|j;M59iSS5`lPtJ6E(>z-
zZ8|S0d|u79*37Eli~)9?HtByl2#d4$CUoq`Q1BTcma<OM3cOrPb~3ZUB<_T_*G9 at T
z&X+jd{!2fadRt at Ec;T7DVMGGBA!8(zYGff%s-*+shO5&j at Lx*=f&|eitVVMc#O&fg
zt_MJI8m7{T3_c(LLlHWv#51rmYzv^l8k`HzjuQw(DH2kPt){yQjvE+!V`yToLJ8{}
zGi9hQnybv^l2rW-KM-Zg-sTI490XH9AWYz(aF>3x%2Jw at nrzz{i?;Zr4^*0u^jDi{
zr9YJM8Ed|oAz}GgWK2&ruog83mmL(=uF=j3mkKNkl4#VK4kwO#a>g=O<2I&NA?=Ru
z>6uRlQjH9l`>Nd-T)-uKu~VO)b{t=n{gFJSn?-?ulmK(0T;cR>Z#_GLb&Xaxz9lX|
zcQ4s05N9_tV|o#-CqNOHVj!0g&K6nRdMaS3cThBR(CYEYNZ+39t20upJY^Cq+?1i6
zOOswxjd9DjuYeewEF$4ZQz`BA9Hz!7T)Hd(IOG3;2$@9Kc;oi%FkOs&_^Aq@>?j`4
z(x##Thwm_K at cW}I8 at t#|?4umhAs^V~-YK^Sh(`R2#h2FJ;LFS~yzDQzi4}5xPYrwd
z**^C)Z0J_TYwq$VVPT%FLYJ8fJ?0jd&JK>}t~k>JMz7GzXb>zJZ4j)Wk-*zs0v(3w
z)^{33N~LDx;-6BVRK8;dQjv=QoX!aa)4j6r5cQf-hDA_x9CP_CagmR#rSdjuXJ|}`
zHW8=`a#GV6r9fQ!bG#*EJb_uLr4dyb&2uLcP!M9)8;xg=KJ1=__mtBk{}Q%swN+uO
z!8E6A{PgvQu3ZrwO{<eeBvA&p at u)s-(1}~8Y|bzch>|t{ntJ~|5kaTdeT$B2I at F7M
z3m34?UlbDFU|sMT1}+1h3=cG1RawCk@$!^?9K_`#e>qw at KRsD;yV0fnz3n9y<Dg;c
z;F|W5?rf6xlhKPO>)&UK-U$5loM7jODPIjaTzBx!TRAxHqUHM0A5Q+C_Rh5{jw4yu
z^O;{!!(k2JQ8z-CY>$MjL4ah&x{W~Ac(b)|Lvv}-&>9+K;o1K0=XoPCv$CqI0U_Dj
z=PX#Zpu4j25*Zoyi2Rv&Yd%XPxlI&_Y<=ujsUyZyCm*j$yF^Kks(55T*P|E|RFx`j
z05WXXwKlHBnA&fV3{cO-6l2QOx at 9fzK+>r)V-2awb7tPYO5jA?moPb)(@@S4I}TFt
zWOuQ%?K=2cOp<UrlPHPtV8cjQM7C}ymvR^<Ccd@|eM1;4EGA||5g${Q%=PPu8km6X
zA_gQ!*7RIH9i&Ta``ZUP&Ip1btqbsmyPSr*c0Y6&X{e1qJhSrZbD`vg_MUDiKpZl(
zsHX|JMms{}gDWYV8gYYbCX9knS%oppDd?ekCdl5MxWsrf8H<NHo*oXlU-4_w;Y;71
zc?9}ON6 at rF={^%)$kxWJor(tm)mT5oSgMH~d#SikG!D7nT*{D;ppQvQmUi#m?GMzo
z_~BV16z~W;ZfP8G<#?4?K7kt|G0-ZD`6VL}@ovA>8xC6Ed~@e-t@&8lBk@(wrBe+l
z<M80E)s|tA3?D0S-H1@{;8l>?8F*&7?d at 1R1zkz2V53FD#6;1i=v9l;#dtCZVKRV%
znl}3v?7m1%_k!5#SDpc9IfLMDP$6h6q{k}Y8tmO^E4v=|{(xN~#8GB8n7meX2MwiC
zyEc at IyOtvg;VA3Nl>6vWADU_uV9StSA-j%JCbpZd5qtO5x~62ZEEpo0QwPigt%@6}
z-MR(0J23Uw4LC at phsu2b`B<vS{=f|lVb9#E9>J1s-P78k)f at oBgNTm~CldlynA0_V
z at -f~Iu<VA5bb{Fjx)(3^R23it<`5FTt;kLM07n2a>sEj3_!0}iUYe&1UP~<QfE%F{
z-lAQ_yRRfh9`HdYqddl~*q2IUV7pZ)AySV5&|_FkQ~{iwu+2g*qf7D%1}qS+3Blu;
zgHnA>)r5Maj^|(l9-{!7O6_u(lDs+j3NZ|;DpI;l^aJN`owrIMB3zLL^-4h%HaShE
zM11%RMS<`|s(O@$%}*~eQ||ggj0*t|I#zcr^l12A*(^p6hj-^P0@&tByS6iPd`H&Z
zN!Dx*dVX{;XML56n;=(Oc3Vf2;R#o<OcY<XQwTN0Uo$l*872iE^W8%8Q5 at q0AvlI;
zwx8BI7z4{M0&YY)P!2CswO9wcWWrqZ`ULb4Ni(1TRf_{Q-5s%&=PqU|)~TDp7g+-s
z5%xL}V at xF`+jY>i(?JA_FcCpt<o~6gax%EK?8+_UUj(({*^3z`%ZXt at Ks*5$D at Z6L
zG%@iFeDAf{VkKjGJ*O-uG2ApFc<{Dg7eTUvE*UpBt*!z-&KN4V^}^Yfh39CNfh|!M
zTorEv>ob<9OB*fEXD;@w76dbvQ(h(KD!9xmd>g2eb902dL&w_m1NK<eQHh{Kv^KY0
z2|vw4)%>5z;%8K6BKXwvY_pKVE+4EjR=?}VG!uHK6I at C_$xa|Ws)|*%c1T9rn}GuD
zTv*klP%4frfRMMcSvl$_o+Bl}PF8s|v#rqiBj9uq-NF=AR_d3?AWd at FGK_{RA8?Qy
zN6uHw^gB%ZWcEfI78KjqDU#ZN*OG7T+EH?>t-Me2eTP(=%6&eHmMjQB1BY2cR-Rl|
zuxPy{sR|b5&*MB|aWlUn6 at Qi@jI1+b-41GHyZH!9HWx+#n4s4wrVP>kID$xX*PT?^
zs%i^@)7Sv!CyHT3;^!jJc)nvFA`Z+~Vc>!fZVHduN}kLFH|q{2P~L~)(WB3|taL-)
z9YNY_i=SejB?m}S7DojlR?x$xTj7$_DFP;vm}mV<ir`JF6-py}O}ql}K(=!I6-|V9
zSp>-yq>{KY;vRsKB3OUomdPw9|1ya=CUH2V7jX<LHLdIwp)G29I`LKjI2x}0B}pUJ
zAYEEpyTziIRZmuPVFrv=0uzj#Kt>3L3hlyY>Bm&z1Oc97k})^89{Tp{t%xVq+dH<Y
zgGmg*MjYHjyd30#z~sORF_}6SEsR4Vli(npTtgicYDpul=+QS`0eeS_(8Sd_HMzgg
zQ6R--E48x>OrCbP;zKtEqy`WK>Zam at QaAq0TN=s0sS_)%g(<rTD#QRMwq)RT&!^c!
z(}rW&3Lz`vZbo|jI`bLSE{$X^q*={-yx40q!1_xS1FEi}(VxPpL_dNC9o2b`0%S+_
z6j3!83n*X~4k3=}F1VP&MlG>Ndpl2vdb57k`D*#$W0)D6WRA2Mso~2zC?`aM>zUm(
zD|x$8`Lo1P;~iR1DP(9-SQaGicGXi@#=ylryY#1|6alJo0tiYWa_iya={H{l5)^Mx
zh-qIExr`=cbk)zoy39lRj~FanP|zdWFUbCDR!VnmpQJ?2;F7fAtzM^?SzBLg&ENcb
zmQ!wCbj}fSsBclo3sKZGm$^6~ji{`kvh1Vnc1|#raRVg;1JqB$+Ff^A4CDwk98;X_
zxSIS7w^Y6=dW#;>2!lo6?zu8al9vL%V%|0kENF=sR3=g3ovk8%d%xkw>SHXguCECV
zvA`V<EK<~x2Qgow9kkB>nV4u5>jNM(EM5{vzs*e_2n at x-iG8=(IoU+}k6-J4<8N(=
zY?-tHHYk7{JPE==6tzM-g-6JSPp8H}=KuD$Z-h6v2New~v#RExiWZ<Ff;hXjpik}a
zNpsl7IrR>UTqyC-{`Yo!yAx;PMb?rA%3&3PhvDTyRyLFFd>4IX^C-DQ*q7|4PEo$F
zkX$N`^v`5AoH45?%j%uX#<d1pau6b=HiR{4>d)C$UB&$LfrD;vs3{K)k1%U)@5fo1
z`U{J68R(Hzn at l8(K+`U2@%tVNtmF2DBJ;PWc{OG8aEx7lFP45-Gr=_^(MShKqLLQN
zp|q99%}^<;RsvNH3TUY!O^8`ek3G?$gk at AA8o=Nawcyb><S4L#)sw-4ZP6y|pQj&+
zg+5`;0v6bVGz15bq!}SbsY_+=SU(~OhXeo;)`)G=SshnzndYu_E)x|JlnMh`d{>7v
zGDavoA1`8b^k%>+O4Z~XUMf)`Fs3geW;qu~P%P^!yEQOwg at oI4VfB(Dh*^NdK>4N?
zh{)gSoZJ$);7LRe)l{(vw&><`EXATOTZM_Su)i?4TYJr^r3Hj<zmq$FWN9>d#myQo
zr at ksO?BM4)U4|9fEk6wA&8lQM^9(zMNf}g>rm~IWghKDJQtM=CqtIDTPR?4!>q26y
zpFa!w5=9B`U5rbMR0r)Bk2<ICL8fA%qmONh^XQ|X<lgPxu*H=n8R3fVuN0^o2h`b+
z+~%21P&X=2glBs)Vl;d|@--;_cn5{6ctYM|v9Q<Ym*zrVtmqPDVcXq<xKkC{6lcM9
zKyfRC_37DS7b!^$SR~VSUms5KZkt{B=iV;}X*xTiN8fX2$N^iyF&n(+v>b`wEgbl_
znoLg~xf~=Ecx8Xsdo0RO5L}L_1cy3&!G0FsWA{HR7I3m05)!j>td3B(b))KD-d8+%
z+H6RVLoGwHi1O-qP2x8AMNA&C?F$|MLp>jHDf8(Ou0+*6iSUYD+eWBMlXj3}Zb#sq
z3ELdGp|>GjH9X7*ez<e=R)S~om}%;8?b&Yw&al^MZy$EryT@@{i}2IAD0d|=8H^gp
z*zNg-Ar|{M8Hmq=FCfu^N(aRP3N&luyW`H*X}&Vgy0}e%=$tMI;a>%d>MXH{Eo at XL
z@$3N+896Wr#`F+a5jTwM{(zYmPZu|rAFd+f$ku3`_M$i!rkKZQ2&v#BZr%^iNoNW^
z!$>O<mimcsCYm#qP!vBAJd^(Xwmn1{Si6$e2sRf0__K|f?Lcq<m9ouEMH)zj1|7u+
z|M_qw%nBnNH8F$Rf+t2k6t^9ozYLk0g?(pZVn6B^4|@BZ2O3tNH0Cy69Ovk|bA+HQ
z(~f7tm{bGDn~V0=z)izA;gjSS=><eT#01;u{WO#`wj`seeX at NB9poHWqEm3sR!6xI
z;!D4f5>)c(I>49q3A5*#L3rO|in;ASaLG%&aMCdi@#BzZR at wlhhL$MFEzlX&G at 3cj
zJwXLWks at -O<|38Ps|F(1m~~FQrtn2Slxg1#F&=k_y+10xqlkudz;HZJKX#7yc$6W>
z)@hHDYg$0rHAm30JCbQ!lBjtx6*3XvUA~yrIQQ6`e_C;)5O(oblL65xpuF*@t(JnK
zw#u<@jznM1WiCC=C^2}pwO&mbF`)W8aWbz!8NYp;ARbBFqQf5Uy_{l`07zN4Cahu~
z at lrye#QHhRB4#nOr3N$&?I=;vLfR4Zw+4!&&=$P at ac%YWkB>2hNPQ(NUn)B5QGtz=
z;T$>;_3y#e<-LfrZh~_-i3o!1m3d7RBOW?2FGQra_!|P<!0dPWPH|l~z&yJ~BT)=A
zXB;A!jYKYfJU!^`_l^g}_k at afJ8&-h?UeJVy?gq$2f`n6h}&=9MH2m%E206+PI1sV
zdfP)6hCL*^g6RWs9>&mmgOlUp<zV<r=j06JD;Bz6q8J-bYnH7{c3I{?zwTkWjmm`(
zl3FweJxD=SY*OTyMq2!Uh_dE<VBzQ+GG7ji2Q-fo02r`1(6p8lzeplP+&UkW1d4tn
zfq=>TAMHc?UVxHSD`Q~VYOgRN%L2|CnS8is0a~uOc&J&_VP4?fFc}%d;SZZoQA|Ff
zhsk7iv)g4dL-8&JP1-0lb8d(<t}aN)Ammt77$yo_ldsP23*XMb%*{tYaPH1mN|%?4
z1;Va$B~29z=nT8<9s8iQo<dai_D|ZwBqvA+NaAF$^r)9rWTE0^yLf^~1kdLJRU{1l
zv|i2=sWT%8d4vNB;36RRi+>QzEIsWuZrQ-*mImnHV4|}+b&NY<_hbN<p|&+Bd-O|0
zS?c%yyo(n!fi;yw`c9gA)CjF>4nKIb&K?fly(<=uc5Z&SaMFio(CIq+zgVg!E@{8R
zVBb5#J~#;6`do~~Zm~1$?K!`@)#gI5fXW%<hWOf`O5A{9Agloov=c>SYr6XnP9G%I
z;3aoK+J%{}j_|sa4h%6cZ6g<JJCJkgHK8{XWy{1Dw$G@>wRvJ%__?z#C8wM%hnYtv
z90^%MpvB_*-Z55^!TZqCMCMp3f>S9#F#m}~kTsq!p?>Kn2$rAdLei3w>j;^Qv&SB&
zgwhRs#U`H^zfoR^tMiI8%tNng&VKh#S7cQD5f9M-5Vm^*w2~XeOPI+q?*0da_M&*V
zR*riI#Qr0ka<LZq7IOTu8PMTHnJx$lBhCGROnnd0E{?jG(CLsl@{5?DeTv~kBJz;X
z2RN2);o+1lcaFjI8(i>!d2NO35XcEUB;c7HTc(gw7jjB8aR&*R7_((A at FAW2dlO)G
zi|;xhERTsVM(ZfP??1p;d1K<qDdt!{4GsYG4H-;`p)|V**X<(H!eQ7Vj at GkIkLNZF
zfi#?|BUFt&R;N4u=uj0=cg}85bDmq0;FpN%FU$Z|&gi>N2RAsC!w))#gOdRTeSSQJ
zxIol-<;H{@W#$h9C1L6(XA&;k9RMr^023wlo<3dcGbqJJ41<8YcUr8SvNGvbeEWW9
z8wiD?w~jE6ZSnvRzwE&E53z_J4&PF24alet7;n7dk`V#o!LazD9YF9FqT7b@;V-4d
zlO2l3EcW-9!w=Z2s5o(;mB7S^P%eI8nOwxM^B!pbz*EMevIgbO2DJW#6p~+Bi&!-e
zd1Hx4xZ-uEcVproorBXYu|V$B3|kWCOwlPQ>E3>at)=fCCb$3U?Xi0&2EM0^^~-*z
zr<CxC=MZd$>_^L{q>&%oYUc{oMMle3OWw7DIj}gZ2*K|ZaqS at e9${mr|1*v at -KFWu
zQ0q0sLRt at DCV1pQ0J9?#G+^Dq2TlH$V2^SVj2tDE;JJ&>?!G}{#(~WhTO_{kap8_9
zd=RW*ok4k2PryvX8pW+OEvc>MaFHpQ|4mrp{BNW14vSUYHMvDqH$pp*-Z&`M7bt-1
zJ6-Z+GxwQd;R{*3zUmWQ>yAtSxnX%ql8Y%X*3s at M_H1w?nDA}+Gv;BHgF<dl2dl{j
zFuLF at L5?8 at ME3`NPw?d~n)*SjKRh&zO2*Hly_PRe$p5Wby>pUQ3KB_a7d^BTVj5#7
zSH`8?2^(XEp>I*aB`g9^Nlr;hhRssd5Mc*$&t-KV6vfCsxfc=t9OED#9Lig$=y60_
zd5;`;av`yU>+TUMQcx2Yd!mDDh8bN}PyKGsJw{))6y7s~hJZXvB;bdWmXxp|0#Foq
zEWHN|v&b}jP?ph9C=D6I9B2{m6V6$WgTF;65M_Zec|-d_BSe+A9TQTHj(;`->0N=u
z?wq%-I6e+f;~55)03jlk<zo+7*ygyHw>l;>?v9p-{BNR?!9$o9ay1TfyifAHdIiBG
z0#@Z)vezH6Me}VLD*#N=qBRc_Ut77gOuoW!+Yxo5PWJ#-w8qPi6_+i;cj*Ig^Z(P1
z1f3<y1p<$<$aC-jI1tK{5ta>Qvn%sjQtEX*gIJ5=1h}+MAqZNwW-5h9_w#@-_{7O1
zLUn>qTe#MDQTR2~t7F0=2_OX4lmS6;5hDBIn^f^5+KHng-;f!(_y64%@!>|0_VMY+
zDTz1 at cDmi&uu~}lnb9FyC9Lw2kq$2e;R=2 at JaHyw1^}0~56pgyVA>nL6*P%Y>l+>g
z-+V4fl*S5V_T<fnyV|iasU#d5P|!dV{QC)0ytcByz2X at r$(AUa4wvV|`N5XOSNcfD
z*cI)!W{3FG?QM61(Y9fV(WVd}27Q;LV;UNCR+qNyiRG537fh8RoDeTg;4yn6UbqNh
z!vc8g_HB*d8-CM1Iy*(fV3X?m&VF-USco196Nn0~4WjjZ<pZpPVIwl1#r)*GR^`2T
zl4|mvjl>f2ovO-w9=r7qWQFgKJMe1!27nPHJl(_20h52)gQ at q6=b&SEfKXJLsS_{%
zzRz9OlDBNQfXF6E^rTEn)cU at 6fI!&a>J4x`2T@|FZKh^q88(zqdSvl~!F%sy4PVWE
z2eu(^EbsqgK!CyVDIbw- at J(>?o?z`W0p at _IV*^lGAsQ+KX9%5>rGN%DrN`7`=<Ud1
zt!l?&RS0sTcj4-01#g at wtikfRC0;{4Rim&_mUiFGqJfLZ++YHApv_LV*<Q)kR+qrf
z7a at 2mO~-hTk;$yG(!?VeGc!5pk=ES<wxT5#NCHtf;|^~7+5>>v`zN8mK+BrNB%C8m
zKazVEaaZr}AfTiu_Euj3Rl>Y7YRA at Ubcw&dC>}=Du?4!r)>Mp&a*f2C9pk^Vi{Xmx
zp8VB#^;{ou+W)t|eW`;9R%|<YTcfnl4zjv1mVPbS2p1 at FQv5JmXb^cWEO9>zOA+8z
z5JiS4ojd7TQDTUMO7JuRN+xTwN{d<ItUknE1pE!&fKSO4oKY{gq9S`Tb at km67lX7R
z6DF5o160*y+!d12Bn}%}XAj8OLHv156exv~wtP)nc4NENU^^5SGRGz<IZpv;CTak1
zzl%rau}*)Fpn{WqPC5&~%!L;3qF4-mu$xH#ajJkCau)$js4%$nc(s^W@&K*Ja1#{;
zSdA8XgC(_qOl%ORtxgz0B362`4X?qMnzzDc)*LVE6yrJ$#la*lMK%y7jCI*^zuciI
z(MK>!SuzfvC8O!+<hIZH4gRal8R`)D85B`xw8kfc_cy%la}sz3KSHJ<QfC+_4;?!k
z_YFO`dKv|4XVwfd6sppu5q_%8x7DWiK~Ot-7=>*LxV0qX`+&jnXgG-o#td!YXk?T~
z(?<%*N*&xb77!w_<mgmvvFI^LMw~eLxNKD35L8TN2}^Q=o<>k=u at 91Cr_mH9DUrdl
zjSMW+t+c*FQC`C#29Z@&atNL35Ng=i!ls0W8(|H!wv=90qy4vze4H>n63K`O0mC{7
zp_pGmGSbv+{WSi9P#&Jgn9^uh_IIO5t*yoejFtV!eChyImkA5=13<k!+PVs^mffvk
z9 at pXX2M}QmSjH3yW(q3`iA9dTcB3+?Hs2coh{j&@zbIh1;%uEMNp%M43TAb5g2Qof
zr~>BL>ap=av7H)OZYVPaWeAL<6#?3`;vH)xfE(O|TTqIlA#!k->?6zUZy7QOQEb7e
zFp5zWctV-C&>D2Hyj`gdTAWE+Iv{(;1EScNLXf|ZY_dX#;rQ74?efz|7L8hu??n_)
zvZ*(t_i#RvE))+Y$@AiVc1+Tpoyix4E+?AoyCZX}L3D>d1U})NkwQHPk(37d$IHcI
zuRM+&E<{*r(J|T*oDE9<Lj-B1fhFo~P7Iq;2qLi<H8^+g9p}(0mN~`uIXzy!l_6Eb
zxZcdX?ybUpNrP4;QaizqpS>y|>k^LjXN9nv_?{DUn^vHR-Y<FMC)!T5utR8pP#kVc
z<-`z)oYAsCdo+>^(sm@#^I><^t$GqCFZ(sV?m#|0lE`IF9-a4)$d8BJ$eH3L#riF%
zT;z}y`jzRTi`ILE at Y%i7Gv7hUj at LPHp+Xtt_60#Q15R+<+o<k_JOQ&qK%q=k!Eg%p
zTIa0zJy at L+w#XqGxTviCLpuVR2UZLNmk37vOvm7Gq^^!i%!iY-y2|BF#t2yz9I<5f
zYpTG7G1rf_^lA`4wv2gnp^bLmX73a+Rsq8Z74F;(wa<M&R#E&u*rbyRC5Z*xRE0eB
zUKQ^*Vk<_fb0PUhT1uu#5rg?6n|TgxKk+Rj1!xr;36j}PND?ynAcz-{93hHv6x@(4
z%yHMBh#07%cpHwsakGw=BazA(P%C72I#Dxms)8Dd(Fx^obY3Ig5%|b<8xcZk5s1xc
z&GKXkm8hnC89W)gmQ^3HB2ESal7a|~GkMgn at G@bqSE1C51-H0e2^oEp!i|n$H`W$k
zARDEo+IMELSjIW)Z3$XN1FfCH8X{in?EzUJ{G>jb at Q5K+*FtII)wO)@gfu#7?2`!o
zv11&O7*GJf4OtH?(YMGTH`wLOxNac%mQAT3Oqz*EVTxD|*y`*4$BUK6hJ+SZm{^wK
z2$prf^D-P(FkecBV)jd6G~)cbeb5W|=x&H0K*td at KxFwE&%giPxK{k$0v!B7D)b_B
ziA6~Oi(5c+s)G#2(6+x`X+~lc=hN^M7;3A$zo(t;Vn!QDDynYGI2jE01zbFrrsP1g
zFhRiZwJgbq7Q7oZ6X__Prb*olZ7+P|l$}@n6^e}@i~SBk%ny~1vlMzNC-8i&_!nae
z9p#nw;}q7B3IK&Hj8HTjN)Yp+g03;#r&gD+y0)5p<}OD=0tsOSfi*v%u?q?TIa2X`
z37T-AeNUH;&)ylw!M at C2X%hoy^)(#Yv#^5jiiD;lUWKKq?C;D|3syTlCcz*(eNUz2
zuEY>;r>LX}N&OJjU5nTjw$*0J-)LQ;xjQW>$zd{9H<-zoh%pr7Rg2iQabZE))mJGM
zPLabLEe=b_Wwx4=eS9MbSQH$v_){GuTp<5^LR5B4{xum7BP|X<Gu?S$Nfci}t0Ux2
zSw)I9S1)FkA3lx8Jh(c2^MgS(T!yaeP4rd+B<-yTZ=3P>w$ITPm&0|GyyD7Z4o>KV
zNJ~6SVdn!*#v`b6qOTlECYZedv=+&cdVgda;<QOBzhJE$N{2+k#A0_qE`Wo=sgw4U
z1MJRHqs!D+>8d=0qh&cYXK>CE_`9 at _g2{#w^g-CXsRQ|ApGTOx>Rda#1=)mib{cY$
zj{jC3E23(`i>j18^J3>1?+-_qQ!0!7%V4rwNp-vod4*vd<v#L8Y8tG2Hc_Idn5(5T
zL{-9hDs!U27q;u*a1tCRd4Ta;LX at T5z7WJnvmAoqc=lvIggdg=!Jpyuh~zj^k1$sT
zvS%DBTA7{QD at YJcMB5N{N}J%PqNT!uHsemo?KBp`UkJLERu4&03QZt+Dw^jNx|Obk
z8{v4sA!3td<&T^&nltirp at 4hln$Q`{gf&j0`Kp{AnyewgS_edv(Qu?F1XIS#M at wvR
zEIzJ<v14YKEM|DdRhZ#Guo9_RTC5VNArzLBL60uSDjJ9VW21nGd&`Fukl5Z=(!voj
zs;1h7Ws^5K=n~?wr>+9H+^J&#OvEhNN@(Y(rTNbP?T%E7$Nz;)lpmg$Rpy*s_F{24
zYPuVmyd>)d^Mq_381qj1I1Y9G(s5!Up}3wbSIW!kNjJrPaOzyj#WpNaZX~KpkZUgL
z_+~U%Nx&+<Zb9f`f*P_}%(PQ`0B5Urb_R$gIVEAtmtWJ(nLn1DE>>4R5=lD at L2|~-
zZS_MhIj`C2h-?2~;S}c$M?<_XN~keKYHdx#TREmsA$wo38)s3bs<Juyak<#hE?ceM
zw}n-Ph~~Vw*I|9|3xy0Pm}3;k7=|syNvT#6^aw-oa9tKfu~p9o%3_ioh at UJV5<#e2
zi+};h9MX_1eZ)nKeE$n46Y<5=1058=@3Dt&j#8C2SsF}O78Y3IDOadV6mW4IbP2+C
z&&3$@YL&*7)M<`M{1Yl4ia*~7rqB~KiUE4jfZ#}>Ap+8`8}ra+1^^rbB-9ta&_-I+
zAapA`3wK?jBL$;ae2Mm}r^aC%%<D^t%ofXdNY1dPu_Q0(0K<N!Xv&sG_ae}`oJn-i
zw%ATT-`dLK{-vk*FPOTIV{u^2^%bg*LcLzCKWcqblQ3kvux05ggc({Ie!he~nc4P<
zs&@>67(X<Vk<5x_wDc+rSeT)HddoN>Za$k>6uZs%<%_q7IIARVf;nFTdqjV~Fi2)r
zACw-4r`QjJpEo0cpoQBw>gbD?!K{5s0Mm?tse>R%O at Luhr_AlAGXPVvb&018{tj`|
zSfyqr9fX7!sHwDZTT(CsbJpdXa6!g7jL{UDvMV?(U^6nG2kcR__e@~kBC>d353p+`
zA<S^;^_NTdNOVHwN$rNbn11VB5I-fHpT4tMB$lXIdMve=px5`Ty^!LUwMm_KhQ~p_
zLo-nI1}zX>fXm at hl(lTahGRO|4n>iAq5QjnY)u|FV8D!`fex&n1DPB%RR0C}Td!7G
zKJ!KeYmo$gqQ*|zwK=iB%pUd+ZU$@hF$LP{A0s}?7|D17Btjb07st^L*f+a{Wf9>r
zpC`aZpGnH)Hnl(fVSh at mdW$Rv!UkF)e|7HNVK-fEPNs%c3b@)bNdCL|)$QAV(r<q1
zzrVio<=1~AY4g at scjo8k?|k{En~Ju)^QYqG)rR}Hw<x&{Iu(CXeT(znyy*FP at BV?G
zEj$1NC`e6C#UWKV&>s=E!EJbKG5q=d?c!v}KUlHu- at dE*$`lfwDD+?P_b6XYt#-Ln
zxdB^>`J1<H-&E}E*R7kkTQ}#6`T4syZ{5B9)qfQ+e6yIczGMQE%OOL@<rrdVWu4Qw
zb5vpT;$RA=DyB8Cs21dwm#6PdOm%xZo4VI=6Bb+CFK*szcq2X!?})B)J=3Ol*;X;I
zP`)9u=2(}30nm at dcV?zGUp!x1*X{LFCXr~ckejnf86&@;c(|#`cr#PF{cmc0p4L<1
z+MDb1v_`Z%fvljX%!DpBX!B-cdga;U)n_Z*lA-3JnV0DM7L6(7qV)33)SrC^KxWE;
zZ;c!HR&`)H!v<GSKED_g%f-Wq-fqD(<K*ub)2q*(Jzst}ZKN<fp!4#<Z1EqXm~<4u
z2zHU6K%FkhOjGuON93wuci#%|19p$xBZE{MA$N<r+^6~9Tk1A<^`I#szwEFXwZ1l{
z9^HE5=7r)fe^FtSag8>n5gynHG`kZZ9w)8t+0JEXASSA#nVUDJX|zJn-to&22E1Zx
ziF5f?0K?O{b5|nWDl1xk=s^Q!lS7YU7kLgW4B0Fo3H2V?3xC?n)u)Rue^eLnRBFrp
z^VNzZMtu=X9d|=0oy=J-Acl at ySraezK@+guWH1Fs!ysep$uJbB#qrt9v=#haeYU*v
zufmG1PZxx7kzkfC>YEYP^5yisxX>wE&n8#Ubk64K_C9=<KS8mA*~app2w1W`6G at 08
z1u0w(i?)_zrgw>yhS;9VrOBZ-Ae+ogA%17mw9-bKXqAI)9@$D}!?yBHWhxtbbz^$T
zO5 at oj?9*@F(AB)-N<5nKBeAK1N$Qa^tSRK6D$nvqK<d_bNZmRIP(-)<o{+lr>5$UF
z`?EIp<ZPz436JLA%<9NBJ!WJb%lwQ at kwds?AQph87oV)Jy!49GMH4RGDmPy{W<MZj
zvADckJbM0eW%cp1;`@~!xfjTGG&TwCYMA}V_iMJX?R4>S<q`J|P*i`dXlzmIt-EEr
z- at Z)SaHcLdOFw_Ju%5Igqs0U6o<-{=GUm at f?x^>HE0CPx#%1TgE!s3Ho<A#=SDvhJ
zX at H<RmAddVqW69s8N{<ZKW>m$FQ_734&q%j4HAzfWlbCnX39y=iWr_xgK>%NbR%WT
zn$8=!c7hn`b*1gET*Co_6LUL4J;)i|uO3<EpfpH7=8m+*Cu^{Z-M!e`H0%=IrJxn6
z)WY`c!lQf#vgzD}b-_M78M7a|ctq0NUA|uK4aMZsIw}*;o-k9&@Wv{CsA>Dk+hJ;=
zqefF at n~OeSfEK)i7?jDlk+A{h=4Q^&oqes?c<Ty%4>qLEXczK~6*o~L+|<AAc&<KM
zTY0%&tUg<R-gG?2!Ku3iXB89ScDWJ$lEKs<YPvJ+6CP^H^&k4;wt7O4j=6ssmxKRl
zEG2!is0~sRU6`<T@$b+uezcZNWFQ+>RK^2vnoe!C;eSuZb&{P0+Sx7DJ0{E+82($L
z%th-P+sV3<txxMD(7sRWB#^vM>m<-ZI=MPX9yyKt at 97aLDf(jU1tDT{`*a3G1|^7T
zCRQxc9)zuzKW?tA!#^s#Nt>D-;(0&BtLACzq*GiWD|%(*_}2Of#GoQej&>sS_;ms@
z6`daWRHn9WAgoZj#)(w8;z3#l;@XX=NBqBji{H1L<a!ahnMoP>a09f~k>arsqRGsC
zIPBk3{2vKnC-+ZJc3a;}&fc4wv%iY=)Mk04z0LF+!`sxOqFY+Qcz72o)!NoK^kL1U
zdQ4N)1hE&D>HZ`H(~h?c3X=$`60Pq~PPes~_Vi at 2Wgjf4vncqy{BU01oE~#Aq6~;q
z2h8hlPuJ at YK_!`s?BS#OLvSQLTz+`#yngEsIdSRLNA-uCr1<dLg*mPDTQQ_xCmwwJ
z2R8f!n?$B?H`sqHZ-XYEX26iq=N$Xb{GG3ER_#CYU)}op+WzxtK)>YMpVR&mu?4%&
z{O!L5yU&*`?!cM9a~IRk{GCs-`&5lIBX%E7+rs|IVPC%pMBtZ9TL?)rH)sD-=qceh
zTu at 1jTT2@F`}-AgXt!gDINqN$x~Q&7!srDghOPNqcjhOHIXY9mzBKLolU6{|E)w95
zW(aHOV0*|F>%>It-k;13O3ZuC-<S(o0{(Hntry~~fBn=6`{EH42h`wm%1xJ_ZR&aV
zi9^6DB^0l%|M&#k6~on5Mm_BQ&bQI7w=n0QCl;(m>bDaU3tNNkS%831ahv}1!n<!x
zS4ra_F|QBS(0sN}q9o05$Y%>%$LtMyl2|}^xp#<b;&}W1qyX=(8^-IuOSbLyyQ4iA
zk44MfpPZkBhBIKLkA?}vReVQRi0}9j&K at b~I84O55Yo+sMa?;GUh-J}Zq3f8|D|E|
zQzmpi{l9hR>o32o)Bmro?f;(w at yow^HTqxtJrv6FY8z#-1i~`OOm8o?WA%i;lO5hu
zO^ieIxhAJUiDJKzyP(Q8a#9?I#-9+}0H$Vh11k<t?svco!Zo<#90M)@Z;GA7qRKMR
zOeHE+qlO|$_Jb8B5Pr2EKR^_fGtYynsYZ$yY@`^=<2S<>WVRm4(x1)3%OY}-ijk;I
zQ*>pna4C7gALneVth_jBWOwqvk0y&C-vXb7KW{8y*;(8WNzR|C>_KG|Ca5SNuKhOK
zaBR=)+?ONipGczjSjF8EtRQvsC8#_T-;yMQA-x9B=zPMwJQO&~$IUA>q#JE)n<J|$
zArpN at 8q-X6i^`*@G1mP%j@)sa*veCUF+9wSKBtGAZ`4|p3QzS-F_GYCH?CfL4bB)H
zO4awO{mqp+Wmw3Nj{ajfQ35m|uw4zf`E2p2czS8;2Nx{BMkW+AKG~;;qX>cfBb_{d
z{cPoB<^78W+gy9P_~c3T6 at SOD<y?nYI)i3+a#qfKDN1}8y)Lq)Vf8{A4T))^dsZ$Y
z>t?D43~(t5_u|r{^G<O at SX6i1^Osu!%dQ%Lx-r!gV9PcdPN%EQ!OJ?_n9jGtr%*it
zq4NOj#(vLvt?WI*KK78-RG)%@VPp=Q1oB7_EIZ_rFS5kLk6doBCyX7dy5 at 1iT+~ZB
z;~EIE4#xmPWLLA(Pq{XBWb^r}^)b*GInCvZm%@P?#mckw&40e)4&b%1OAEtS0d&F0
zAJg$zn2nAx26VO2n!#9taQ(*@kfMN48O1A)Ud4f4c1I?hd-dwHw+eO~^<yTQ!Pwja
zbSTfusM{qGpk}5dSIi_O)^n!3F|CS>)gMlO>PeX7=W4PJ at ks{;6vN16V at DYRD?w0g
z at 4?wia)6;R4nEcU>tFqW`+~|zj9pH8cN#kT=1pC4P|wo~bN+gI=wt9gFa%atJN at Qf
zm=G;2KuooNhVBbNNW;JUz<y*S9V1eB;3i_kF4bSYsBrRfQ95dsN0Aj|X5q%?=dpJR
zv<7!pl at Z6jk4_Ia6=+&x;CfuT-m9-}4=6|%+PmenaL+qnatSId*H=5r<O#Fb9VA8{
zXHu at B3X*{Aia#O1#_oPAxxei<{11P<GelhR#R36&nqt|HGo%b*Ckbhx>0kd^;f^Mi
z4mXKmmXj$?Ecd%VdiCT<@o07B$?{r=Q)pK~b<UVh%KebcQm%}ynoa-ZVVHVba(N-)
zC1MlO8b&+_83Z@#(;VTEu+63CPhLHJwz(=}%GBF829v3`<>WM>EB5J9ob`&pVc`<N
zYVm2^N0Mx_)%+ySSoiWYaFP>!(6f)7ymoByp=?S49;x?d#8!>;{x(uCjpY=~{|$#G
z8(voWjCSCR80I&$r9xJCMSFyE{-Rh_6deL<{xHO39JPq2$OCBDiv~&qAAID_QAJu+
zsZGf+s^8~SDC#>ZuIXx?(a8X3ShL_&)FDcn8f^+}g*dE}<Bz6KytOg8WD3e;uAmso
z<>LAjky9dOA~VfY#u#fPF!0E6B*yfCiz!K at 8hDKv@b9BLQqHJCG_nw=>JF9ELo+~5
zq34a8{1HOq&}B$XjL{H6|G7CcgHB=@{nmZ^O3<8aS9?OyXz5Gu&Oen$HVY~Qjp{NG
zUm*lFL_cWwQbSTRsYga8i~HZ&+)qjS{ZEB7=%p#`=(O)>lJlm6MOF>sk2hRie->Kt
z{r#fE+v*xih00f%t)tf8(zyO??qlCu8#@mMJl)xt7BHy4hB+Wt?`jW?kz3$roK^ho
zt6dvAyIMy!+2)Rtco(~N@~BVcUspy#MRJZsL4}MKnbi6J2X3`d)#K?IiyzBlckVOd
zRhmhTaDND#3i`#=NoGKq$_an4NeT<6Kh7>`ub?E1vrXD_*(Z&`KqH#%l4>?qq^)q7
zCK>kaa8pAl#?FQ at 1F2SvU+PUpysB$P5u6HdqLS67R?*K=GgL=(MY?UElcoY@$Lp$t
zNxMx<y+&qXJLfB<$oM5qSL}6^4gv*>bn-GC)%n9XD3nZ~4g&4!Rl#8I9!mRRXJU}^
z++0Z{twG$s+QyXU{WDByWYEgVsbUclfzYr-k&-iMCZ_fy7?gW-0faW@>-{B4*4SSO
z9?(C^;{IiQBhnl`-fR$s`5X|rIRE!3oR-)s##>S3%SWcDR-Q#^tyGVza<HDucy7V)
zg!YX-4S6DCTI6zcRhtj7n<&>Ypp!93VwBcV6P({2Yz~e${e?}%fhOsBykAKrKEtFl
z*OKkT=$cCi33!3GNr56IWpiZo?3B1Q$;s&|-`_;-Uma^9$kgCycomIZt=S2HldY2e
z>fkRY>Nbal9yg{|;|g?cMdMP8dhEF(hpQEA1z!|tQ6#KmaYBSulxzygGbH1iLuG$j
zDk*Vlo)@dP_2c337_K1o0q$mq$v;~Hb4g;-vC#WkX&sdmE at zN{hK4 at NzpVG{qdKoi
zC9FzY!#$8>sC2lv2L%`3+qNMkp}^!f+A{5$dm8}f$(|BTDpQk0E8kB at 0RSazA(Hb!
zMoYmkQD5d%>!nW44L)vM3a#DtYK@^gwQP=3C((=gF-GONJpm53`i(Sx&Wrq&Ldgjc
zYW3C|)6WQr_X8zkDu~-OXZ1Ap6pR{qlI?xf!c-IleMx+k^k6a5 at J^ZF3`!!$A*m%U
zNxw_FTm9tU`@ezGjGcQ<LA@>M#qy9Q3REGI<tqLkp{?aQYLt{k{{93s4$6K;>EfDh
zMwE_6G^djmB9PJ1|NrRbZ$~QQnU6^Kzd@!-5_JwyiWAIe5kzMU-5C|!a=|LffJp^$
zDJ at XJ<UPTSG%8yK!4g at gl&YfqsxN;Bef6y(2_!gNL1E2xH0)!UJR~^|23V7=vgMk4
z(#H;(X5QIY at 4l%yOt$8KtT{2uxkRS{(GN+FF!921qXO&p{UmsNvZ^4MX1G-}XbPsm
zQ!bYn- at 3|>g<x$E$mQ1nc at kI^MXL=*RFCT8&=0C6aj3)Em{BZ0&mV~@QjY_xOh<iO
z(pBK8u~mI0KUDS813XFGjrD9oIg)05g{I2NPg=^Q1KPwCTwu>%sc%3os)bn|;URLd
zF&dye*A!(vVN|h3M&#0ZvGn}e(&GB&>$MqVt{cTq+%d00uRrmpt<gWt7K>}ePyV3n
zB5<vrKKx{l|MgRuZ5J8ZPiOw@$EIiR{n-yq&-VS<cR%IBS+=%x{OZouz$2wir^`Z#
z&TU!8z)aT*g%lzh29Hw6pf+&gfe=6dn&6!qb}A?7JhyAuFGn=-Dvdf at JaBKJN;!~S
zWScqavQs1lg>oo9Z$|J?9;XyegGw00aLz^LXqf1Q at lLhHYihhda&@5g=$zh*zt at k*
z;Ah<xHln`U*X3ylZ&l_~nZdX*XW1;EB69?Qqr-cb&OJIO{=2)o=|zM-H38`S`0uao
z+`RKuJ^uUl?XR!vzg#|w`|2&P7XNMMr&|9d#}<p^p05>tng4RM at XK8CzCWgps+S?P
zN at J-2iyfNr#;lPL?(t2b<|D1s at M~W1){E%H$ZP7eobFPK7^~a(Ze!!jmX_0C<RQ_`
z2KKB#=sCaKj0|m=U)~QW7)4SNMgJ)-MfG)6IUAlGZBKe=?Xb-S%d)vpnWx9?ukx;2
z9yb?w(N)K(pI*9I%*ej;^he6Cu5P|sTiJZMvi9o9I^i#r?<I^X)Dn at AM@1O7^}eE^
zsf{6f7qu}$wL6s{^jO*U#FXdJhUoRp0maG48ZTYxnS4 at 4c|XJPOBi<^cV7n?mtBPU
zXwr!P9?m3tC+j1Jo#&c^E^;9zd{>{l16_MYH9y at 9gZYiGlmbt*KDN5fmVoC`-P|Y^
zE at I@?E5AlgC9i2fQ2Q4Sf4gdgO at MZ)B<c?4FEj^CoCKlo+TCN_URUGE5J=@TZX=^&
zvKc|u2N+9AKD8pL8b`Hlt1s8#O11$dgZsL&8^{uS9BRY+d$wjKq$C6Df`XG&pegRP
zBzRHeNY=?5k+Na~QOq&d{?ID^?9NOPZt-kz0wTkVBZQS^4hQCnnUteo`R5@~N|FIi
zrc$g>4izbKA!#iZtMy`b3g`Skv12mbI$R4$vRtf<XN^2%KvU7XbWhM<rxx!w{wVE|
zI!h_FG9Lq;)&PePHt90=#jr4Vo1O2oL!<2a_k~BOW>irjd at fOcn4R^wit#8?Y5%#=
zB=7taKtoL at 0v;vX7#cJ!n at fpZN<q-Q7#Cve&yESPV^Th^d@#z at da13-_A)>f;UU;Y
zTHPUGx5_|f)W#}GK}5r)K6bhVzW~1OAOT96iL(++_<Uar#@QC5m?ni3&xc6lv|m3K
z^%?zEzf)xP!w5FL;eF*$)_aPtkct{={a_{tb!f(wok})`3=T3Lm?KK0<-%GbITnH*
zC7FxUsr+v9X}Wm*9VLH?p!vbu#unj7r7zAeT2U}l^}G0NncopjHVOaLwGE0EkRyLz
z;2rgDXnv9&obQJE6%m9tibs^BSwY!qV#}PG#`XTbI}q24MdJ?vexSU0^uGc2(<4NO
znXu99jdnKwDGj6X+bvvc2i1n*Jo4b=yz}_yaL_Rt3aw^~|M{O{Dtxf=d?Wb^am=z6
zArlfO$a1DctI2uQspyT-Ib*UPhV!jZJPHK<#?^u at k6+M>VkR7GgkT{8#=Gs~3yS`T
z&J;f^K6ynAu$hZ#!Hx0sBJBn}dYPIC_4s?_q$g-zc+_JT@%K~&Oi5^>^@dI<YrWa)
zMt+c4Xw2M_ea7TMa!Ugxf%z;Jrv(a1ai}`fMX%V_*nK{50jnO3pg8Z`zu;%&os4af
za6H%~%O1fUVa_964YdQdSDz~gvBKseWb|8Mx1l;GSZWp)Nf~(){T&R3`PXCTbMAPo
z98uXk>c*0E?e1_CKpH4GX_!{rFWwAuO_f9&=BjrYCh9}65+vRvF9NCO`41;mQ@#Wg
z^j7fmSMnU4x!Ofoisto?)U?*63l!@gCjqEC6B_C-lsQ{Qqr7t4SW2aC^iy5OhCJh8
zDw^5op88u&v`bG$DVn~mqDyte<`LKl?3i3qNqNt7Q3(Me+8$ThL-k83*<1(jcZ#FO
zj^Loir#HJ)D211Bg_z1{%199OOKHGX>y66>ceu?@m$Z-TD-?7$v at d2*SWU%daB5nk
zK}-GKCeQ=vMAiptIURPId3WGxj?xxylA%-sj{d5ZP+XktA3dz2(#qJg7S8 at S3}cYm
zX|n~|mAp}Xr5HKeAqJrNjE7Ya(*T5AL1T_mUVBc?y6NOjc=c>O7O68RVSdRQUnDt7
zcAOqtmi5!+;|Pt5g)^Ut%f_kd9!qtONKG!yln;$KCmfDHTF~Q{&tJVL9{zX*SUi8Z
zOm$FRmDnr_S-P}Hn;HQ(<U<24udFRmzqWC5Q~8Ei3YwGNipX7Q^U=&$Yd4Zt=|*WN
z1R_N;pYj1mCNx`oJ3a_WeS`437O2I=0&YFSs^?<`Bb8{w`E()l6KI3jli9KoRXE}%
z7h_<FG&Djpbi-?ba*S;ia$_{o474K$&1}Z~%Iu{|6K&L3_O40jC!^cW81g}yu|cmj
zuzh{4A0W-rjx2W00^htx?zHK0Erj3nrxXvBIF>;d^PbY8#sY!<fVj9TFNMA0?wMTz
z^R$x)`dtge3)iRkB&z??#f;tPVqF~e_V%^asZSYH4`nfi1|FR|53c$!8Wk?+i5+pd
zmzCDk@^<>Wv!ir6&SxsD<B~FkUJG)CObDe!hIh5H*W>7XeOz6ElZ@?;9HwOf at qF(a
zcvI}GI;*fE^{iQ?j~7izz39aMImMln at 0NK$25w8^3LOW?U5MCmva!?fo+Ejh<j6qd
zQ9gFqEdN~m^b$vgJM<{;FT!9)qM4OyB+cJrN~=)Gcfc2X(JnOafWHgLDN*iH0MFW2
z0PX#q58Lr at ZGMtTN<d6P8UKfK=;GGMQO;he3Rf;IjUHP;r%`qKB-ILXL{M?KJch#5
z+HkW;>qb;!pxIOV&gII{7ztqjec%Y;Ml<fwIrzDU4RZLdcg&TGBa2q+DMAA_KXCHD
zycx=}=-d3qTAZERf->5a1|+I>eq0~cVpBI8s#$w{JFb!NJGO~1ITjVo(sA-xm3Uqv
zqTx8VWgR1bmpI<IY;^^obdN>6+|udyG$oxCMC1S;`z~sX*#S(>VM)Ket;P^H1vt56
zcCo<dAVZ2PjW^zr^g9eW!TcZW95;#&H;S{_3u-Hu+d#jc#kf=3GrCnZV}#EULky3?
z14G-&$1_Q*Dqvhru=<yT#fo5>Z{me=>DX?;BRu1}mMWdkBQg#gpT at pbIu0VrUqq1I
zerboI!Ie;5YC70|MWeUFHy$kUO>Tb44qun(nlWcDzM$XUdGSRY#?JV~V>Os(^IrA0
zFIUsJ>}t=7E3dY{vpbH`<n#KiSF34UcC}pE9f5u^ysLYA`tA>~v#0MayVA3(uk<_?
z^4o80lq!Oku#py|Hi4s!G)fH+Iqafg2`DW$<tj9yI~e8c!BYZbs#DMgYjik^m4W^6
z?R1S7HtdrGk!tOlscmPuR+eWpK)M2KWLS$A6yuDq8M*H at WAaq?!c_Xu+}6cb&uNOU
zZA^c_NMnwi%2(&Rb2Q~Nn03K?#|Svhf at t$x&PM0LS06POYya_ci2`c?|At4M`h7Fm
zN-Y-kjn(FAwa&F6Pa%|^lrHIDx%=WbG`iKqpbFCFIF|o?o@?4HNaJpqxSV{Id#Fp{
z3S1fM at G6neL2c69W$b at iRX$uze$#o9)O4OhTwVCKsgO%7<x&xg%1ymcC{hniKf?Sp
zN~4|52Ehz<k$FzNtG5x{^}Bm?mXwfKf;4__2kPux^o=wBeZBfuL1CZid5A3G_S5h<
zAH(A<eg|wG9rTJgt&SRR4)GDH|5i3UyKAXx6EEY%KUWNmG?YtgSDG^I*H+dGDd={x
zOEib0=_&f!$RoJJrRbu=<Ql1(1&N3;&8%HdFNJO;s_7N>>Nk(-sL_|J;M{LwEztVG
z*w11yD9=HKgSu_N*`J+`F^8u1wZtiAcAo8EJQj>t6)qiNCV<p`GHHM045w#E-y;tj
zH0q#1+Z}gH$DJm9t2Cp*HdSOyhWcoZQMs~OOk<qxRJ?Q$g#Nt)5gnoVw;FsMr<VV|
zGHv^a-am#_Rv-(;xrBJxb$q at c$gq1KE#8fuf*RT-6m|2KVQKm<6XO&`>uM|3v)9D-
ztB$-~&=<Xaa_uRY!l+re^pqTf?w0jA<#lDY1|QTWMj=g0U2$qIe*>?2QB)e}l$J$h
z{od9K>J^3%)qC(*Ps at vaWQiJKv@4e?%$MPQ5fo!85cwj4V+ar_R at uGO!+riVI{=n@
zZoBXGdnb4~2gEBY&=|wNqVtj^5^2f-W-)uoT>U#}YEh1B3|<BIuM#U9_SV)iR(&Z~
zdLe!rXiQg$T{h|};o*p`q6=!EpoaxlBkd2m_a}**nbb{f#B<-DOaRdJ7?Xt<6}KI6
z;SKx4O+}(p3s$?1*jE2oEcAEw2&oAV?E)rCK~Om9lI`ycZLX8Pd%EPvsNKTcnD>OS
zbhvYj_b8-qZSMED^Ye%xKrGhrerP*nq_u|*7wloU*23Gz`F97Co+ovGvW#rEdy#BC
zj?ZDO&W9%nsP|ZUZg$%54cmfPdw9BasO*FQ2z%M?Qnv;1Pdrj0nU<oE9pcKZ#&L7%
ztja5Q+VvYCTli_v=t0GWkc(wTDK54Hz{Uh^+>L1);po_f1S)_z&_j<IQS<e>J{n{Y
zD&REsRG+Lmvk6a=>ZF^QcEG0iSAEDT753LGOQ>-u7BfvCYSWr5gx8m~Fy}CcS2t-w
ziE!Iqq*W)tmVk(OGv`wd_?u(Vai`k at b^H)iG9D5>-JC3XtlC<JYzV#z7pw~1xU_Yr
zJ4ssMS)Y?cYTZe1yVGw`S$Oa0ZgB`+_jiPf3;oX4PG2Oj-dnsM%$A at -wbJdK2<;1w
zkY2jl%(>I7K6Adh`b4=!D_p;pCc11=+~`!<rpjscbCqD4Uo^&Y9}m=n!N~6Vaw0TW
zQlW)8oz6g3)OR|Qj&#}H+q<x)7d19y@%6AF72VLu at vN5-QVI9Eh*oYN>;0>cN}I!r
zKM<+33E66N`<)I~W!H3NUOXHj(j7df2*mx#TbzNz&Ic~=+&kI7KY53bp@(`Wc0iDb
zVn<DZ4Dsa*FQ#XVHh>+AI2H~`MBIL2apEEz#hg<Pp03vJZ5`_QtlpLUns~>^+RmSr
zVqW8<9NPjNykJ%y;CzYUFMA-)JqqP92(lPdUn#R8#>|3aVTVJ4+k*TRLSHT3jh0Al
z3TQUrjql>wNy6>>LI3>@sjU2*&roW?jM;hAyZX^d+t)>Y+z7aT>)ULnMex>)yR2LC
zZE^1bxAoD6mUhmkgrR>JbH32;Q}fBxht#Ghi<Jo-&JaW9m at oWuNR%=}cg{A4`%z}G
z&&rRO>K=E9EhoPjof#p5B7_KjoAqx)ecveloa`LF%X<5J)IrV_fvS^my&~_(%l8oI
z-8p{WgLQ_Rw2Ie1uC2cQ at p0<~H?!#e^5KJ&O1UweJ(SV?KM7f5!qn!A=WFX5(@GEb
zi_)y%i^P9f=xeQX5`I1#_I^Iwqe1LW_&Zha0C=sxe6`}zhFuGMetl!Vud+S&b~x7^
z9JU1D_FL`-O&6%tg!W5tBK6TFIYWFomug6;KN%cFf}2`J3AuLm)(3lg{hhUKr19<j
ztwHCw>)aUmxZm48xIgI)mKkiB!DgnxTKDs!)jE;9#OQ`r;{<@0!nxY0_JRflOKp at W
z1T1uW?@h2t^FSQycZNgLZG2{>IM$2G=-t9qhI>(pnLwrpL5bDVA!8G{7*^ym$Iplk
zc4RC%4PR1u4$K$p=- at 3BomOjsNiVp%%X25}!UW0j({HVqWO<Yjw6>N0j>>b+Od3Vr
zG~&<`gPSDjz_ov_9p_98ci at 9FhiAQR+vL#p&%N%+{%q^kjbcoLeL{=(Pi9+pX743t
zX=i8L#Lk~idvK(gv*J`mb;hH%{zE9h_NkW94vzaa#9p6=8<SNxyH>XG;mzcmcJ#xi
zrF}pR{J4J38v7xP?AOn-UI()xV_386W?cXPTCj+BA0|H!RDG0_!8_ULvr#OltYMTI
z at s3D!!QNHZa_ckqo6mk`{tk69rh4XDzWg{JxAPSYn!IITGhxv2dkl;|Zj1_c*$9=T
zWn=oFM7?(UnGEyY^VijzkF1#pK>EQ-EVf!E!_;Vr(}dt?7<pYH#<(PWOo)L_xr!xo
zWZf1ymCZP`4yj?I5B&a*;pX;{4nvd$%H)?c3LV)*O+K7XgnWd$jnH!s;(=M7x<#Q%
zcXLSS_$|!Q%vYF+t#t-oVee6}k+Y#(LPeY at R}mRO+^Vn~zo(iBjNXw)w;R)s{3>bT
zeu<9i!<E=fm1PAmxmt;p2v?Q!;ht-i^O=c|Ct|_Z8}_K2Yh*W8v)#oM>wDsSY2{mL
z2c?@A%8NyfF~#MRy2v#4T`h~bw&FoRFrzpXdBL_n7eGWb)vIZ0Se6s}uwyEoG84zk
zU#lMC at bcUom(+1Nx2LxUW5q<W7l8|zw5VcgA1`tR78bSt(iW=S`MfsGXr~P3zkK!n
z$OWb*#eJ-CG)_M%>kD>tig-`@&A6_U<ILD{vR_x%)}^Rvc&>ZjKeuIRAR2A at uhFl5
zEWhHfd=kmxqXUzj>TO#=<t(d3EY09g{cPxaFf5VE{2D1en;LYxiW3BVPmWKsJmd2O
z#qR0hVWwD-G#!+zh_&ijKU15BOve9agxG9j+NNkq$;hQ=JX-lcGTny1tVC!l4^pm2
z{UvQ%v`=3woNz0OOT-Ok;keBD1XEYjz at hfu*q8z*ecbnaRDUCZx$KuhQq`HqsVJx~
z{#|V`vNm5|_uEF3xyWh+f*R^)!HvJs_#eVSOHq159Q4h|)XF{g_k&L_*A47oj)h{=
zTx>oKR(%(D*}b|=T`vgPb&1#Mj$+4}@uq1Ode^t-62^Nq){pY+>nK;Mx!%VAt(yDw
zoe$;=I<2V5g0IGjDp#%esh=kBLD|htbh*ukfPf~S9i4JTyKY2mP-i^u?@iKt&!o#5
z_F?u4)N%Bv)K~vIti_GJni&;scK2$Q6-u^Fmku*A?H4M7=jKpTNmV7~0|_!@g5gc`
zvw;|F#YXH*x|5{=M9AyWG~s}8E0xDK>re<{m)XbPe#1Wpkj}0IBovNjAcZKQ&k7{t
zy)}@R_XnSIe6d3>5Adv#*r at zutRqALz)};2kI?gGUS%{du;V&yb23xqQH}h`8`gMJ
zNwy-xX=XnDa)m97%w2$35RpmC(>EY{{rKwJEAXMK@}S0vY7Y8o at +v249ZEf>&rQ_3
zgy7h5#u4gK$kYj2W0#kQ at o!0-o2OQzIn9kOjU)N|bMM>5R5M1R2kFyuOCFTc0)e at A
zb*K3#J#C)y|Ju50gl=SA(7V}eU3~nk>#CE!5$MoB+E1pOr_(>$Hs8;xQWkd<;z)T(
zJ8&N2q5P%47V~3wY7BSINlwKaUmZ4ca8ySv;ha1m9x{@>VYv(QAQ8gAys`G18Aipr
zVoqk7)RG(;b<wGAotZ?HK@<u374 at e!1?xf)DdCSOZAc3$WvnH;V(A$|zPW}&k=#<8
zIDgY>e%dIwttmtMf}<4t6?%ouku%y5B?-R0-4tqAEGddal73kkz_3hpKq>QLA&3Oi
zQ3J%~$*w2a!)_}tQRZWKV5#_2IzF~&I|2>|KX>BwWmB6-ohQc~ikYBG#_M<OTZw0E
zUG^<IPsI}Zspy?z&VM%6ZneWqT`*kf4a1GmNsFlH<t00dN`}StMpuiAjJ3#K8_Tty
zx*VX1<?E5L`y9*%aI(VH#3&6O_t7^hY?H6s|IOiJqx5?&!iTqs((x~J2usY0T|k5r
zAc60wI#qJi at -LHs?8W-J4PmD}!f#AaUkv;+A7Y|ZiB5%yd9kI-8?8p)KNsF*NS@=Y
zV!fmCBS3vzcQtF69mEjLR@=YPeidPWs`b3 at p$u_f_|2;er~Pvvl(v4fSDBeFeAUic
z)4Mq>97ALt59+Ad)RBiqWx~4SkpC+JQ53C9{8-oCoT^8~uy_~hK2qPd=oY)`hawck
zet~RXbh74`=)C2WPB<M1I+51a1ul3MDK^d$^Lpbdsc at Q}l~JA3a@&Vq907>g*6jGH
zype*Nn%<}orb|SDd1;e8WEStUTXOK>+xVG*_EN^+O9i&pB196;&IXHll_7-AL7hFH
zc9yrW<uprYp*N(&;F;nnbO7dfB4h5|zZ`81-`(@(zN8#W>l|Bx!RFp^kJv|r8K#fA
zLO|y{k9Vv-tecb9=;<*XxkcF{9zSXpT%$NR&Zc3XeI6r1LetF3_Dxemf*2fMd2YtX
zH at iJN-a`VgvstDmV<A>;(KNSp$)d}#^Q%k}0YNs=%_01Mldu6|RkfWBUstzuv_XA-
zi~YV$Z;hT`D<0u0(=*8r->lE7{B+U2rk3?tEpu_|a&OxlPSx<*EcP at D)g2u7h*hwQ
z5Nx07{Rw&1XO}(~hxroy2nF-AU|R1g*rc<sC-Y##F_L~}hYKD!dC8tzJ!h&Jr>Gd}
z5#Ng<v8I*zX{sjZC-_xMN0yl76RMC7w>$54EELaMkA3~c$m=f#k}>h=$w8FAo$LbP
zbUTDHV83I`<3=#Q(33S{PtS#L`F?<{eev5u)nI2U5eq7XTr;9VV- at hLi4$^Gmv_gA
zcGc}MQ3v7Jgn^9DYc!J*^~@srWwm9%<(=IQ&fz$285XBE;*U#_m+%afBB@>tuQ at 9T
zlS+FWRGmx&Hixs`tM9zNb9NJ$PR?m+@=y&q%V=?2y?~pz at ah%_C{fN3;|T$MW7S#h
zf<yp!8;AT7SzqSfcHVdVTX=l#5I-*@j)qNcXsuX3K|E8PFLG+w!HR?0&iu=rzR??U
zJkkXb_$}wY_(HeJ1nwQ~thU=#>~fi;$lg2WVxy7USXlVg at 0q%O^BMxz5V(fGH3Y69
za1DWL2wX$p8Uoi4xQ4(r1g;@)4S{P2Ttna*0 at o0@hQKuht|4#@folj{L*N<$*ATdd
Vz%>M}A#e?WYY1FJ;J1Om{{=3B3<dxI

diff --git a/ext/zlib/tests/bug_40189.phpt b/ext/zlib/tests/bug_40189.phpt
index 07e5191..5eaf22a 100644
--- a/ext/zlib/tests/bug_40189.phpt
+++ b/ext/zlib/tests/bug_40189.phpt
@@ -21,5 +21,5 @@ var_dump(file_get_contents(dirname(__FILE__) . '/test.other'));
 ?>
 --EXPECT--
 string(40) "AwCFRi98wqppK23l2/7kIY8AlyEdAgAAAEdCTUI="
-int(0)
+bool(false)
 string(0) ""
diff --git a/ext/zlib/tests/bug_40189_2.phpt b/ext/zlib/tests/bug_40189_2.phpt
deleted file mode 100644
index 13a19db..0000000
--- a/ext/zlib/tests/bug_40189_2.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #40189 (test for truncated deflate, also part of erroneous fix for #40189)
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php
-$a = fopen(dirname(__FILE__). '/bug.tar', 'rb');
-stream_filter_append($a, 'zlib.deflate', STREAM_FILTER_READ, array('window' => 15+16));
-$b = fread($a, 4716032);
-var_dump(strlen($b));
-// when broken, this outputs "int(686904)"
-?>
---EXPECT--
-int(1676116)
\ No newline at end of file
diff --git a/ext/zlib/tests/gzinflate-bug42663.phpt b/ext/zlib/tests/gzinflate-bug42663.phpt
new file mode 100644
index 0000000..dd53c78
--- /dev/null
+++ b/ext/zlib/tests/gzinflate-bug42663.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #42663 (gzinflate() try to allocate all memory with truncated $data)
+--SKIPIF--
+<?php if (!extension_loaded("zlib")) print "skip"; ?>
+--FILE--
+<?php
+// build a predictable string
+$string = b'';
+for($i=0; $i<30000; ++$i) $string .= (binary)$i . b' ';
+var_dump(strlen($string));
+// deflate string
+$deflated = gzdeflate($string,9);
+var_dump(strlen($deflated));
+// truncate $deflated string
+$truncated = substr($deflated, 0, 65535);
+var_dump(strlen($truncated));
+// inflate $truncated string (check if it will not eat all memory)
+gzinflate($truncated);
+?>
+--EXPECT--
+int(168890)
+int(66743)
+int(65535)
diff --git a/ext/zlib/tests/gzinflate_length.phpt b/ext/zlib/tests/gzinflate_length.phpt
new file mode 100644
index 0000000..436025d
--- /dev/null
+++ b/ext/zlib/tests/gzinflate_length.phpt
@@ -0,0 +1,26 @@
+--TEST--
+gzinflate() and $length argument
+--SKIPIF--
+<?php if (!extension_loaded("zlib")) print "skip"; ?>
+--FILE--
+<?php
+$original = b'aaaaaaaaaaaaaaa';
+$packed=gzdeflate($original);
+echo strlen($packed)." ".strlen($original)."\n";
+$unpacked=gzinflate($packed, strlen($original));
+if (strcmp($original,$unpacked)==0) echo "Strings are equal\n";
+
+$unpacked=gzinflate($packed, strlen($original)*10);
+if (strcmp($original,$unpacked)==0) echo "Strings are equal\n";
+
+$unpacked=gzinflate($packed, 1);
+if ($unpacked === false) echo "Failed (as expected)\n";
+?>
+--EXPECTF--
+5 15
+Strings are equal
+Strings are equal
+
+Warning: gzinflate(): insufficient memory in %s on line %d
+Failed (as expected)
+
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index 3649acd..b304356 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: zlib.c,v 1.183.2.6.2.8 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: zlib.c,v 1.183.2.6.2.14 2009/05/28 10:14:22 lbarnaud Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -34,47 +34,51 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+
 #ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
+# define O_RDONLY _O_RDONLY
+# include "win32/param.h"
 #else
-#include <sys/param.h>
+# include <sys/param.h>
 /* #include <sys/uio.h> */
 #endif
+
 #include "ext/standard/head.h"
 #include "safe_mode.h"
 #include "ext/standard/php_standard.h"
 #include "ext/standard/info.h"
 #include "php_zlib.h"
 #include "fopen_wrappers.h"
+
 #if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
+# ifdef PHP_WIN32
+#  include "win32/pwd.h"
+# else
+#  include <pwd.h>
+# endif
 #endif
+
 #if defined(HAVE_UNISTD_H) && defined(PHP_WIN32)
-#undef HAVE_UNISTD_H
+# undef HAVE_UNISTD_H
 #endif
 
 #ifdef COMPILE_DL_ZLIB
-#ifndef PUTS
-#define PUTS(a) php_printf("%s",a)
-#endif
-#ifndef PUTC
-#define PUTC(a) PUTS(a)
-#endif
-#ifndef PHPWRITE
-#define PHPWRITE(a,n) php_write((a),(n) TSRMLS_CC)
-#endif
+# ifndef PUTS
+#  define PUTS(a) php_printf("%s",a)
+# endif
+# ifndef PUTC
+#  define PUTC(a) PUTS(a)
+# endif
+# ifndef PHPWRITE
+#  define PHPWRITE(a,n) php_write((a),(n) TSRMLS_CC)
+# endif
 #endif
 
 /* Win32 needs some more memory */
 #ifdef PHP_WIN32
-#define PHP_ZLIB_MODIFIER 100
+# define PHP_ZLIB_MODIFIER 100
 #else
-#define PHP_ZLIB_MODIFIER 1000
+# define PHP_ZLIB_MODIFIER 1000
 #endif
 
 #define OS_CODE			0x03 /* FIXME */
@@ -84,7 +88,7 @@
 /* True globals, no need for thread safety */
 static const int gz_magic[2] = {0x1f, 0x8b};	/* gzip magic header */
 
-static int php_enable_output_compression(int buffer_size TSRMLS_DC);
+static int php_zlib_output_compression_start(TSRMLS_D);
 
 static PHP_MINIT_FUNCTION(zlib);
 static PHP_MSHUTDOWN_FUNCTION(zlib);
@@ -119,10 +123,10 @@ static zend_function_entry php_zlib_functions[] = {
 	PHP_FALIAS(gzwrite,		fwrite,			NULL)
 	PHP_FALIAS(gzputs,		fwrite,			NULL)
 	PHP_FE(gzfile,							NULL)
-	PHP_FE(gzcompress,            			NULL)
-	PHP_FE(gzuncompress,           			NULL)
-	PHP_FE(gzdeflate,             			NULL)
-	PHP_FE(gzinflate,              			NULL)
+	PHP_FE(gzcompress,						NULL)
+	PHP_FE(gzuncompress,					NULL)
+	PHP_FE(gzdeflate,						NULL)
+	PHP_FE(gzinflate,						NULL)
 	PHP_FE(gzencode,						NULL)
 	PHP_FE(ob_gzhandler,					NULL)
 	PHP_FE(zlib_get_coding_type,			NULL)
@@ -172,12 +176,13 @@ static void php_zlib_free(voidpf opaque, voidpf address)
 /* {{{ OnUpdate_zlib_output_compression */
 static PHP_INI_MH(OnUpdate_zlib_output_compression)
 {
+	int status, int_value;
 	char *ini_value;
 
 	if (new_value == NULL) {
 		return FAILURE;
 	}
-	
+
 	if (!strncasecmp(new_value, "off", sizeof("off"))) {
 		new_value = "0";
 		new_value_length = sizeof("0");
@@ -186,8 +191,10 @@ static PHP_INI_MH(OnUpdate_zlib_output_compression)
 		new_value_length = sizeof("1");
 	}
 
-	ini_value = zend_ini_string("output_handler", sizeof("output_handler"), 0); 
-	if (ini_value != NULL && strlen(ini_value) != 0 && zend_atoi(new_value, new_value_length) != 0) {
+	int_value = zend_atoi(new_value, new_value_length);
+	ini_value = zend_ini_string("output_handler", sizeof("output_handler"), 0);
+
+	if (ini_value && *ini_value && int_value) {
 		php_error_docref("ref.outcontrol" TSRMLS_CC, E_CORE_ERROR, "Cannot use both zlib.output_compression and output_handler together!!");
 		return FAILURE;
 	}
@@ -197,9 +204,13 @@ static PHP_INI_MH(OnUpdate_zlib_output_compression)
 		return FAILURE;
 	}
 
-	OnUpdateLong(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+	status = OnUpdateLong(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
 
-	return SUCCESS;
+	if (stage == PHP_INI_STAGE_RUNTIME && int_value) {
+		status = php_zlib_output_compression_start(TSRMLS_C);
+	}
+
+	return status;
 }
 /* }}} */
 
@@ -253,17 +264,11 @@ static PHP_MINIT_FUNCTION(zlib)
  */
 static PHP_RINIT_FUNCTION(zlib)
 {
-	uint chunk_size = ZLIBG(output_compression);
-
 	ZLIBG(ob_gzhandler_status) = 0;
 	ZLIBG(compression_coding) = 0;
-	if (chunk_size) {
-		if (chunk_size == 1) {
-			chunk_size = 4096; /* use the default size */
-			ZLIBG(output_compression) = chunk_size;
-		}
-		php_enable_output_compression(chunk_size TSRMLS_CC);
-	}
+
+	php_zlib_output_compression_start(TSRMLS_C);
+
 	return SUCCESS;
 }
 /* }}} */
@@ -274,7 +279,7 @@ static PHP_MSHUTDOWN_FUNCTION(zlib)
 {
 	php_unregister_url_stream_wrapper("zlib" TSRMLS_CC);
 	php_stream_filter_unregister_factory("zlib.*" TSRMLS_CC);
-	
+
 	UNREGISTER_INI_ENTRIES();
 
 	return SUCCESS;
@@ -331,7 +336,7 @@ static PHP_FUNCTION(gzfile)
 	while (php_stream_gets(stream, buf, sizeof(buf) - 1) != NULL) {
 		if (PG(magic_quotes_runtime)) {
 			int len;
-			
+
 			slashed = php_addslashes(buf, 0, &len, 0 TSRMLS_CC); /* 0 = don't free source string */
 			add_index_stringl(return_value, i++, slashed, len, 0);
 		} else {
@@ -351,7 +356,7 @@ static PHP_FUNCTION(gzopen)
 	long flags = 0;
 	php_stream *stream;
 	int use_include_path = 0;
-	
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &filename, &filename_len, &mode, &mode_len, &flags) == FAILURE) {
 		return;
 	}
@@ -364,7 +369,7 @@ static PHP_FUNCTION(gzopen)
 		RETURN_FALSE;
 	}
 	php_stream_to_zval(stream, return_value);
-}	
+}
 /* }}} */
 
 /*
@@ -380,7 +385,7 @@ static PHP_FUNCTION(readgzfile)
 	php_stream *stream;
 	int size;
 	int use_include_path = 0;
-	
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &filename, &filename_len, &flags) == FAILURE) {
 		return;
 	}
@@ -392,12 +397,12 @@ static PHP_FUNCTION(readgzfile)
 		RETURN_FALSE;
 	}
 	size = php_stream_passthru(stream);
-   	php_stream_close(stream);
+	php_stream_close(stream);
 	RETURN_LONG(size);
 }
 /* }}} */
 
-/* {{{ proto string gzcompress(string data [, int level]) 
+/* {{{ proto string gzcompress(string data [, int level])
    Gzip-compress a string */
 static PHP_FUNCTION(gzcompress)
 {
@@ -420,13 +425,13 @@ static PHP_FUNCTION(gzcompress)
 	if (!s2) {
 		RETURN_FALSE;
 	}
-		
+
 	if (level >= 0) {
 		status = compress2(s2, &l2, data, data_len, level);
 	} else {
 		status = compress(s2, &l2, data, data_len);
 	}
-	
+
 	if (status == Z_OK) {
 		s2 = erealloc(s2, l2 + 1);
 		s2[l2] = '\0';
@@ -439,7 +444,7 @@ static PHP_FUNCTION(gzcompress)
 }
 /* }}} */
 
-/* {{{ proto string gzuncompress(string data [, int length]) 
+/* {{{ proto string gzuncompress(string data [, int length])
    Unzip a gzip-compressed string */
 static PHP_FUNCTION(gzuncompress)
 {
@@ -464,7 +469,7 @@ static PHP_FUNCTION(gzuncompress)
 	 if none was given as a parameter
 	 we try from input length * 2 up to input length * 2^15
 	 doubling it whenever it wasn't big enough
-	 that should be eneugh for all real life cases	
+	 that should be eneugh for all real life cases
 	*/
 	do {
 		length = plength ? plength : (unsigned long)data_len * (1 << factor++);
@@ -485,7 +490,7 @@ static PHP_FUNCTION(gzuncompress)
 }
 /* }}} */
 
-/* {{{ proto string gzdeflate(string data [, int level]) 
+/* {{{ proto string gzdeflate(string data [, int level])
    Gzip-compress a string */
 static PHP_FUNCTION(gzdeflate)
 {
@@ -517,7 +522,7 @@ static PHP_FUNCTION(gzdeflate)
 	if (!s2) {
 		RETURN_FALSE;
 	}
-	
+
 	stream.next_out = s2;
 
 	/* init with -MAX_WBITS disables the zlib internal headers */
@@ -546,7 +551,7 @@ static PHP_FUNCTION(gzdeflate)
 }
 /* }}} */
 
-/* {{{ proto string gzinflate(string data [, int length]) 
+/* {{{ proto string gzinflate(string data [, int length])
    Unzip a gzip-compressed string */
 static PHP_FUNCTION(gzinflate)
 {
@@ -571,50 +576,53 @@ static PHP_FUNCTION(gzinflate)
 	}
 	plength = limit;
 
+	stream.zalloc = php_zlib_alloc;
+	stream.zfree = php_zlib_free;
+	stream.opaque = Z_NULL;
+	stream.avail_in = data_len + 1; /* there is room for \0 */
+	stream.next_in = (Bytef *) data;
+	stream.total_out = 0;
+
+	/* init with -MAX_WBITS disables the zlib internal headers */
+	status = inflateInit2(&stream, -MAX_WBITS);
+	if (status != Z_OK) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
+		RETURN_FALSE;
+	}
+
 	/*
 	  stream.avail_out wants to know the output data length
 	  if none was given as a parameter
 	  we try from input length * 2 up to input length * 2^15
 	  doubling it whenever it wasn't big enough
-	  that should be enaugh for all real life cases	
+	  that should be enaugh for all real life cases
 	*/
-
-	stream.zalloc = php_zlib_alloc;
-	stream.zfree = php_zlib_free;
-
 	do {
 		length = plength ? plength : (unsigned long)data_len * (1 << factor++);
 		s2 = (char *) erealloc(s1, length);
 
-		if (!s2 && s1) {
-			efree(s1);
+		if (!s2) {
+			if (s1) {
+				efree(s1);
+			}
+			inflateEnd(&stream);
 			RETURN_FALSE;
 		}
+		s1 = s2;
 
-		stream.next_in = (Bytef *) data;
-		stream.avail_in = (uInt) data_len + 1; /* there is room for \0 */
+		stream.next_out = (Bytef *) &s2[stream.total_out];
+		stream.avail_out = length - stream.total_out;
+		status = inflate(&stream, Z_NO_FLUSH);
 
-		stream.next_out = s2;
-		stream.avail_out = (uInt) length;
+	} while ((Z_BUF_ERROR == status || (Z_OK == status && stream.avail_in)) && !plength && factor < maxfactor);
 
-		/* init with -MAX_WBITS disables the zlib internal headers */
-		status = inflateInit2(&stream, -MAX_WBITS);
-		if (status == Z_OK) {
-			status = inflate(&stream, Z_FINISH);
-			if (status != Z_STREAM_END) {
-				inflateEnd(&stream);
-				if (status == Z_OK) {
-					status = Z_BUF_ERROR;
-				}
-			} else {
-				status = inflateEnd(&stream);
-			}
-		}
-		s1 = s2;
-		
-	} while ((status == Z_BUF_ERROR) && (!plength) && (factor < maxfactor));
+	inflateEnd(&stream);
 
-	if (status == Z_OK) {
+	if ((plength && Z_OK == status) || factor >= maxfactor) {
+		status = Z_MEM_ERROR;
+	}
+
+	if (Z_STREAM_END == status || Z_OK == status) {
 		s2 = erealloc(s2, stream.total_out + 1); /* room for \0 */
 		s2[ stream.total_out ] = '\0';
 		RETURN_STRINGL(s2, stream.total_out, 0);
@@ -657,7 +665,7 @@ static int php_do_deflate(uint str_length, Bytef **p_buffer, uint *p_buffer_len,
 	} else {
 		buffer = *p_buffer;
 	}
-	
+
 	ZLIBG(stream).next_out = buffer + start_offset;
 	ZLIBG(stream).avail_out = outlen;
 
@@ -668,7 +676,7 @@ static int php_do_deflate(uint str_length, Bytef **p_buffer, uint *p_buffer_len,
 		if ((outlen + start_offset + end_offset) > *p_buffer_len) {
 			buffer = erealloc(buffer, outlen + start_offset + end_offset);
 		}
-		
+
 		ZLIBG(stream).next_out = buffer + start_offset + prev_outlen;
 		ZLIBG(stream).avail_out = prev_outlen * 2;
 
@@ -705,7 +713,7 @@ static int php_deflate_string(const char *str, uint str_length, char **newstr, u
 					/* TODO: print out error */
 					return FAILURE;
 				}
-		
+
 				ZLIBG(crc) = crc32(0L, Z_NULL, 0);
 				break;
 
@@ -714,7 +722,7 @@ static int php_deflate_string(const char *str, uint str_length, char **newstr, u
 					/* TODO: print out error */
 					return FAILURE;
 				}
-				break;		
+				break;
 		}
 	}
 
@@ -810,14 +818,14 @@ static PHP_FUNCTION(gzencode)
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
 				RETURN_FALSE;
 			}
-		
+
 			break;
 		case CODING_DEFLATE:
 			if ((status = deflateInit(&stream, level)) != Z_OK) {
 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
 				RETURN_FALSE;
 			}
-			break;		
+			break;
 	}
 
 	status = deflate(&stream, Z_FINISH);
@@ -851,7 +859,7 @@ static PHP_FUNCTION(gzencode)
 			trailer[7] = (char) (stream.total_in >> 24) & 0xFF;
 			trailer[8] = '\0';
 		} else {
-			s2[stream.total_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0)] = '\0'; 
+			s2[stream.total_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0)] = '\0';
 		}
 		RETURN_STRINGL(s2, stream.total_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0), 0);
 	} else {
@@ -905,8 +913,9 @@ static PHP_FUNCTION(ob_gzhandler)
 		return;
 	}
 
-	if(ZLIBG(ob_gzhandler_status) == -1)
+	if (ZLIBG(ob_gzhandler_status) == -1) {
 		RETURN_FALSE;
+	}
 
 	zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
 
@@ -926,7 +935,7 @@ static PHP_FUNCTION(ob_gzhandler)
 		ZLIBG(ob_gzhandler_status) = -1;
 		RETURN_FALSE;
 	}
-	
+
 	do_start = ((mode & PHP_OUTPUT_HANDLER_START) ? 1 : 0);
 	do_end = ((mode & PHP_OUTPUT_HANDLER_END) ? 1 : 0);
 	Z_STRVAL_P(return_value) = NULL;
@@ -979,7 +988,7 @@ static void php_gzip_output_handler(char *output, uint output_len, char **handle
 {
 	zend_bool do_start, do_end;
 
-	if (!ZLIBG(output_compression)) {
+	if (!ZLIBG(output_compression) || SG(sapi_headers).http_response_code == 204 || SG(sapi_headers).http_response_code == 304) {
 		*handled_output = NULL;
 	} else {
 		do_start = (mode & PHP_OUTPUT_HANDLER_START ? 1 : 0);
@@ -1024,6 +1033,25 @@ static int php_enable_output_compression(int buffer_size TSRMLS_DC)
 }
 /* }}} */
 
+/* {{{ php_zlib_output_compression_start() */
+static int php_zlib_output_compression_start(TSRMLS_D)
+{
+	switch (ZLIBG(output_compression)) {
+		case 0:
+			break;
+		case 1:
+			ZLIBG(output_compression) = 4096;
+			/* break omitted intentionally */
+		default:
+			/* ZLIBG(compression_coding) should be 0 when zlib compression hasn't been started yet.. */
+			if (ZLIBG(compression_coding) == 0) {
+				return php_enable_output_compression(ZLIBG(output_compression) TSRMLS_CC);
+			}
+	}
+	return SUCCESS;
+}
+/* }}} */
+
 /*
  * Local variables:
  * tab-width: 4
diff --git a/generated_lists b/generated_lists
index 34a1db2..c93cdd0 100644
--- a/generated_lists
+++ b/generated_lists
@@ -1,3 +1,3 @@
 makefile_am_files = Zend/Makefile.am TSRM/Makefile.am
 config_h_files = Zend/acconfig.h TSRM/acconfig.h
-config_m4_files = Zend/Zend.m4 TSRM/tsrm.m4 TSRM/threads.m4 Zend/acinclude.m4 ext/bcmath/config.m4 ext/bz2/config.m4 ext/calendar/config.m4 ext/ctype/config.m4 ext/curl/config.m4 ext/date/config.m4 ext/dba/config.m4 ext/dbase/config.m4 ext/dom/config.m4 ext/exif/config.m4 ext/fbsql/config.m4 ext/fdf/config.m4 ext/filter/config.m4 ext/ftp/config.m4 ext/gd/config.m4 ext/gettext/config.m4 ext/gmp/config.m4 ext/hash/config.m4 ext/iconv/config.m4 ext/imap/config.m4 ext/interbase/config.m4 ext/json/config.m4 ext/ldap/config.m4 ext/libxml/config0.m4 ext/mbstring/config.m4 ext/mcrypt/config.m4 ext/mhash/config.m4 ext/mime_magic/config.m4 ext/ming/config.m4 ext/msql/config.m4 ext/mssql/config.m4 ext/mysql/config.m4 ext/mysqli/config.m4 ext/ncurses/config.m4 ext/oci8/config.m4 ext/odbc/config.m4 ext/openssl/config0.m4 ext/pcntl/config.m4 ext/pcre/config0.m4 ext/pdo/config.m4 ext/pdo_dblib/config.m4 ext/pdo_firebird/config.m4 ext/pdo_mysql/config.m4 ext/pdo_oci/config.m4 ext/pdo_odbc/config.m4 ext/pdo_pgsql/config.m4 ext/pdo_sqlite/config.m4 ext/pgsql/config.m4 ext/posix/config.m4 ext/pspell/config.m4 ext/readline/config.m4 ext/recode/config.m4 ext/recode/config9.m4 ext/reflection/config.m4 ext/session/config.m4 ext/shmop/config.m4 ext/simplexml/config.m4 ext/snmp/config.m4 ext/soap/config.m4 ext/sockets/config.m4 ext/spl/config.m4 ext/sqlite/config.m4 ext/standard/config.m4 ext/sybase/config.m4 ext/sybase_ct/config.m4 ext/sysvmsg/config.m4 ext/sysvsem/config.m4 ext/sysvshm/config.m4 ext/tidy/config.m4 ext/tokenizer/config.m4 ext/wddx/config.m4 ext/xml/config.m4 ext/xmlreader/config.m4 ext/xmlrpc/config.m4 ext/xmlwriter/config.m4 ext/xsl/config.m4 ext/zip/config.m4 ext/zlib/config0.m4 sapi/aolserver/config.m4 sapi/apache/config.m4 sapi/apache2filter/config.m4 sapi/apache2handler/config.m4 sapi/apache_hooks/config.m4 sapi/caudium/config.m4 sapi/cli/config.m4 sapi/continuity/config.m4 sapi/embed/config.m4 sapi/isapi/config.m4 sapi/milter/config.m4 sapi/nsapi/config.m4 sapi/phttpd/config.m4 sapi/pi3web/config.m4 sapi/roxen/config.m4 sapi/thttpd/config.m4 sapi/tux/config.m4 sapi/webjames/config.m4
+config_m4_files = Zend/Zend.m4 TSRM/tsrm.m4 TSRM/threads.m4 Zend/acinclude.m4 ext/bcmath/config.m4 ext/bz2/config.m4 ext/calendar/config.m4 ext/ctype/config.m4 ext/curl/config.m4 ext/date/config0.m4 ext/dba/config.m4 ext/dbase/config.m4 ext/dom/config.m4 ext/exif/config.m4 ext/fbsql/config.m4 ext/fdf/config.m4 ext/filter/config.m4 ext/ftp/config.m4 ext/gd/config.m4 ext/gettext/config.m4 ext/gmp/config.m4 ext/hash/config.m4 ext/iconv/config.m4 ext/imap/config.m4 ext/interbase/config.m4 ext/json/config.m4 ext/ldap/config.m4 ext/libxml/config0.m4 ext/mbstring/config.m4 ext/mcrypt/config.m4 ext/mhash/config.m4 ext/mime_magic/config.m4 ext/ming/config.m4 ext/msql/config.m4 ext/mssql/config.m4 ext/mysql/config.m4 ext/mysqli/config.m4 ext/ncurses/config.m4 ext/oci8/config.m4 ext/odbc/config.m4 ext/openssl/config0.m4 ext/pcntl/config.m4 ext/pcre/config0.m4 ext/pdo/config.m4 ext/pdo_dblib/config.m4 ext/pdo_firebird/config.m4 ext/pdo_mysql/config.m4 ext/pdo_oci/config.m4 ext/pdo_odbc/config.m4 ext/pdo_pgsql/config.m4 ext/pdo_sqlite/config.m4 ext/pgsql/config.m4 ext/posix/config.m4 ext/pspell/config.m4 ext/readline/config.m4 ext/recode/config.m4 ext/recode/config9.m4 ext/reflection/config.m4 ext/session/config.m4 ext/shmop/config.m4 ext/simplexml/config.m4 ext/snmp/config.m4 ext/soap/config.m4 ext/sockets/config.m4 ext/spl/config.m4 ext/sqlite/config.m4 ext/standard/config.m4 ext/sybase/config.m4 ext/sybase_ct/config.m4 ext/sysvmsg/config.m4 ext/sysvsem/config.m4 ext/sysvshm/config.m4 ext/tidy/config.m4 ext/tokenizer/config.m4 ext/wddx/config.m4 ext/xml/config.m4 ext/xmlreader/config.m4 ext/xmlrpc/config.m4 ext/xmlwriter/config.m4 ext/xsl/config.m4 ext/zip/config.m4 ext/zlib/config0.m4 sapi/aolserver/config.m4 sapi/apache/config.m4 sapi/apache2filter/config.m4 sapi/apache2handler/config.m4 sapi/apache_hooks/config.m4 sapi/caudium/config.m4 sapi/cli/config.m4 sapi/continuity/config.m4 sapi/embed/config.m4 sapi/isapi/config.m4 sapi/milter/config.m4 sapi/nsapi/config.m4 sapi/phttpd/config.m4 sapi/pi3web/config.m4 sapi/roxen/config.m4 sapi/thttpd/config.m4 sapi/tux/config.m4 sapi/webjames/config.m4
diff --git a/main/main.c b/main/main.c
index 2a5ff25..c746940 100644
--- a/main/main.c
+++ b/main/main.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: main.c,v 1.640.2.23.2.68 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: main.c,v 1.640.2.23.2.70 2009/05/04 19:55:42 derick Exp $ */
 
 /* {{{ includes
  */
@@ -59,6 +59,7 @@
 #include "fopen_wrappers.h"
 #include "ext/standard/php_standard.h"
 #include "ext/standard/php_string.h"
+#include "ext/date/php_date.h"
 #include "php_variables.h"
 #include "ext/standard/credits.h"
 #ifdef PHP_WIN32
@@ -473,8 +474,6 @@ static int module_shutdown = 0;
 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
 {
 	int fd = -1;
-	char error_time_str[128];
-	struct tm tmbuf;
 	time_t error_time;
 
 	/* Try to use the specified logging location. */
@@ -489,14 +488,17 @@ PHPAPI void php_log_err(char *log_message TSRMLS_DC)
 		if (fd != -1) {
 			char *tmp;
 			int len;
+			char *error_time_str;
+
 			time(&error_time);
-			strftime(error_time_str, sizeof(error_time_str), "%d-%b-%Y %H:%M:%S", php_localtime_r(&error_time, &tmbuf));
+			error_time_str = php_format_date("d-M-Y H:i:s", 11, error_time, 1 TSRMLS_CC);
 			len = spprintf(&tmp, 0, "[%s] %s%s", error_time_str, log_message, PHP_EOL);
 #ifdef PHP_WIN32
 			php_flock(fd, 2);
 #endif
 			write(fd, tmp, len);
 			efree(tmp);
+			efree(error_time_str);
 			close(fd);
 			return;
 		}
diff --git a/main/network.c b/main/network.c
index 2ae5af3..c1ce25a 100644
--- a/main/network.c
+++ b/main/network.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: network.c,v 1.118.2.2.2.16 2009/01/03 00:06:59 felipe Exp $ */
+/* $Id: network.c,v 1.118.2.2.2.20 2009/05/04 14:46:37 tony2001 Exp $ */
 
 /*#define DEBUG_MAIN_NETWORK 1*/
 
@@ -786,9 +786,14 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short
 		switch (sa->sa_family) {
 #if HAVE_GETADDRINFO && HAVE_IPV6
 			case AF_INET6:
-				((struct sockaddr_in6 *)sa)->sin6_family = sa->sa_family;
-				((struct sockaddr_in6 *)sa)->sin6_port = htons(port);
-				socklen = sizeof(struct sockaddr_in6);
+				if (bindto && strchr(bindto, ':')) {
+					((struct sockaddr_in6 *)sa)->sin6_family = sa->sa_family;
+					((struct sockaddr_in6 *)sa)->sin6_port = htons(port);
+					socklen = sizeof(struct sockaddr_in6);
+				} else {
+					socklen = 0;
+					sa = NULL;
+				}
 				break;
 #endif
 			case AF_INET:
@@ -808,7 +813,7 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short
 			if (bindto) {
 				struct sockaddr *local_address = NULL;
 				int local_address_len = 0;
-			
+
 				if (sa->sa_family == AF_INET) {
 					struct sockaddr_in *in4 = emalloc(sizeof(struct sockaddr_in));
 
diff --git a/main/output.c b/main/output.c
index 67368e9..ba4d7cc 100644
--- a/main/output.c
+++ b/main/output.c
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: output.c,v 1.167.2.3.2.8 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: output.c,v 1.167.2.3.2.9 2009/03/26 00:00:18 cseiler Exp $ */
 
 #include "php.h"
 #include "ext/standard/head.h"
@@ -855,10 +855,12 @@ PHP_FUNCTION(ob_get_flush)
 	/* error checks */
 	if (!OG(ob_nesting_level)) {
 		php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete and flush buffer. No buffer to delete or flush.");
+		zval_dtor(return_value);
 		RETURN_FALSE;
 	}
 	if (OG(ob_nesting_level) && !OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
 		php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
+		zval_dtor(return_value);
 		RETURN_FALSE;
 	}
 	/* flush */
@@ -880,10 +882,12 @@ PHP_FUNCTION(ob_get_clean)
 	/* error checks */
 	if (!OG(ob_nesting_level)) {
 		php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer. No buffer to delete.");
+		zval_dtor(return_value);
 		RETURN_FALSE;
 	}
 	if (OG(ob_nesting_level) && !OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
 		php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
+		zval_dtor(return_value);
 		RETURN_FALSE;
 	}
 	/* delete buffer */
diff --git a/main/php_config.h.in b/main/php_config.h.in
index dd7b15e..c72ba22 100644
--- a/main/php_config.h.in
+++ b/main/php_config.h.in
@@ -1208,6 +1208,15 @@
 /* Whether to enable IPv6 support */
 #undef HAVE_IPV6
 
+/*  Define if int32_t type is present.  */
+#undef HAVE_INT32_T
+
+/*  Define if uint32_t type is present.  */
+#undef HAVE_UINT32_T
+
+/* Whether to build date as dynamic module */
+#undef COMPILE_DL_DATE
+
 /*   */
 #undef HAVE_LIBXML
 
@@ -1295,15 +1304,6 @@
 /* Whether to build curl as dynamic module */
 #undef COMPILE_DL_CURL
 
-/*  Define if int32_t type is present.  */
-#undef HAVE_INT32_T
-
-/*  Define if uint32_t type is present.  */
-#undef HAVE_UINT32_T
-
-/* Whether to build date as dynamic module */
-#undef COMPILE_DL_DATE
-
 /*   */
 #undef QDBM_INCLUDE_FILE
 
diff --git a/main/php_sprintf.c b/main/php_sprintf.c
index d269d5d..76d61b7 100644
--- a/main/php_sprintf.c
+++ b/main/php_sprintf.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_sprintf.c,v 1.23.2.1.2.3 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: php_sprintf.c,v 1.23.2.1.2.4 2009/05/14 08:21:38 dmitry Exp $ */
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -37,9 +37,7 @@ php_sprintf (char*s, const char* format, ...)
   s[0] = '\0';
   ret = vsprintf (s, format, args);
   va_end (args);
-  if (!ret)
-    return -1;
-  return strlen (s);
+  return (ret < 0) ? -1 : ret;
 }
 
 /*
diff --git a/main/php_streams.h b/main/php_streams.h
index d1a49e0..2f6a87d 100755
--- a/main/php_streams.h
+++ b/main/php_streams.h
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_streams.h,v 1.103.2.1.2.9 2008/12/31 11:17:47 sebastian Exp $ */
+/* $Id: php_streams.h,v 1.103.2.1.2.11 2009/04/19 17:10:52 lbarnaud Exp $ */
 
 #ifndef PHP_STREAMS_H
 #define PHP_STREAMS_H
@@ -419,6 +419,8 @@ END_EXTERN_C()
 BEGIN_EXTERN_C()
 PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC TSRMLS_DC);
 #define php_stream_copy_to_stream(src, dest, maxlen)	_php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC TSRMLS_CC)
+PHPAPI size_t _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC TSRMLS_DC);
+#define php_stream_copy_to_stream_ex(src, dest, maxlen, len)	_php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC TSRMLS_CC)
 
 
 /* read all data from stream and put into a buffer. Caller must free buffer when done.
diff --git a/main/php_version.h b/main/php_version.h
index dfb0a4e..24e47f4 100644
--- a/main/php_version.h
+++ b/main/php_version.h
@@ -2,7 +2,7 @@
 /* edit configure.in to change version number */
 #define PHP_MAJOR_VERSION 5
 #define PHP_MINOR_VERSION 2
-#define PHP_RELEASE_VERSION 9
+#define PHP_RELEASE_VERSION 10
 #define PHP_EXTRA_VERSION ""
-#define PHP_VERSION "5.2.9"
-#define PHP_VERSION_ID 50209
+#define PHP_VERSION "5.2.10"
+#define PHP_VERSION_ID 50210
diff --git a/main/spprintf.c b/main/spprintf.c
index 3c4235f..8b81003 100644
--- a/main/spprintf.c
+++ b/main/spprintf.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: spprintf.c,v 1.25.2.2.2.15 2009/02/04 15:03:12 iliaa Exp $ */
+/* $Id: spprintf.c,v 1.25.2.2.2.16 2009/03/30 19:59:07 iliaa Exp $ */
 
 /* This is the spprintf implementation.
  * It has emerged from apache snprintf. See original header:
@@ -76,6 +76,7 @@
  * SIO stdio-replacement strx_* functions by Panos Tsirigotis
  * <panos at alumni.cs.colorado.edu> for xinetd.
  */
+#define _GNU_SOURCE
 #include "php.h"
 
 #include <stddef.h>
diff --git a/main/streams/cast.c b/main/streams/cast.c
index 5694300..5e31aaa 100644
--- a/main/streams/cast.c
+++ b/main/streams/cast.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: cast.c,v 1.12.2.1.2.3 2008/12/31 11:17:48 sebastian Exp $ */
+/* $Id: cast.c,v 1.12.2.1.2.6 2009/06/03 08:59:19 kalle Exp $ */
 
 #define _GNU_SOURCE
 #include "php.h"
@@ -214,12 +214,12 @@ PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show
 
 			newstream = php_stream_fopen_tmpfile();
 			if (newstream) {
-				size_t copied = php_stream_copy_to_stream(stream, newstream, PHP_STREAM_COPY_ALL);
+				int ret = php_stream_copy_to_stream_ex(stream, newstream, PHP_STREAM_COPY_ALL, NULL);
 
-				if (copied == 0) {
+				if (ret != SUCCESS) {
 					php_stream_close(newstream);
 				} else {
-					int retcode = php_stream_cast(newstream, castas | flags, ret, show_err);
+					int retcode = php_stream_cast(newstream, castas | flags, (void **)ret, show_err);
 
 					if (retcode == SUCCESS)
 						rewind(*(FILE**)ret);
@@ -327,7 +327,7 @@ PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstr
 	if (*newstream == NULL)
 		return PHP_STREAM_FAILED;
 
-	if (php_stream_copy_to_stream(origstream, *newstream, PHP_STREAM_COPY_ALL) == 0) {
+	if (php_stream_copy_to_stream_ex(origstream, *newstream, PHP_STREAM_COPY_ALL, NULL) != SUCCESS) {
 		php_stream_close(*newstream);
 		*newstream = NULL;
 		return PHP_STREAM_CRITICAL;
diff --git a/main/streams/memory.c b/main/streams/memory.c
index 0c1e34b..512d809 100644
--- a/main/streams/memory.c
+++ b/main/streams/memory.c
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: memory.c,v 1.8.2.6.2.20 2008/12/31 11:17:48 sebastian Exp $ */
+/* $Id: memory.c,v 1.8.2.6.2.21 2009/05/16 20:28:02 lbarnaud Exp $ */
 
 #define _GNU_SOURCE
 #include "php.h"
@@ -563,6 +563,7 @@ PHPAPI php_stream *_php_stream_temp_create(int mode, size_t max_memory_usage STR
 	stream = php_stream_alloc_rel(&php_stream_temp_ops, self, 0, mode & TEMP_STREAM_READONLY ? "rb" : "w+b");
 	stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
 	self->innerstream = php_stream_memory_create_rel(mode);
+	php_stream_auto_cleanup(self->innerstream); // do not warn if innerstream is GC'ed before stream
 	((php_stream_memory_data*)self->innerstream->abstract)->owner_ptr = &self->innerstream;
 
 	return stream;
diff --git a/main/streams/mmap.c b/main/streams/mmap.c
index a70bf58..71fb2e6 100644
--- a/main/streams/mmap.c
+++ b/main/streams/mmap.c
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mmap.c,v 1.8.2.1.2.3 2008/12/31 11:17:48 sebastian Exp $ */
+/* $Id: mmap.c,v 1.8.2.1.2.4 2009/05/17 14:59:24 lbarnaud Exp $ */
 
 /* Memory Mapping interface for streams */
 #include "php.h"
@@ -51,6 +51,20 @@ PHPAPI int _php_stream_mmap_unmap(php_stream *stream TSRMLS_DC)
 	return php_stream_set_option(stream, PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_UNMAP, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0;
 }
 
+PHPAPI int _php_stream_mmap_unmap_ex(php_stream *stream, off_t readden TSRMLS_DC)
+{
+	int ret = 1;
+
+	if (php_stream_seek(stream, readden, SEEK_CUR) != 0) {
+		ret = 0;
+	}
+	if (php_stream_mmap_unmap(stream) == 0) {
+		ret = 0;
+	}
+
+	return ret;
+}
+
 /*
  * Local variables:
  * tab-width: 4
diff --git a/main/streams/php_stream_mmap.h b/main/streams/php_stream_mmap.h
index 1b3ad6d..7132d57 100644
--- a/main/streams/php_stream_mmap.h
+++ b/main/streams/php_stream_mmap.h
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_stream_mmap.h,v 1.5.2.1.2.3 2008/12/31 11:17:48 sebastian Exp $ */
+/* $Id: php_stream_mmap.h,v 1.5.2.1.2.4 2009/05/17 14:59:24 lbarnaud Exp $ */
 
 /* Memory Mapping interface for streams.
  * The intention is to provide a uniform interface over the most common
@@ -58,6 +58,8 @@ typedef struct {
 
 } php_stream_mmap_range;
 
+#define PHP_STREAM_MMAP_ALL 0
+
 #define php_stream_mmap_supported(stream)	(_php_stream_set_option((stream), PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_SUPPORTED, NULL TSRMLS_CC) == 0 ? 1 : 0)
 
 /* Returns 1 if the stream in its current state can be memory mapped,
@@ -71,6 +73,9 @@ PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t le
 /* un-maps the last mapped range */
 PHPAPI int _php_stream_mmap_unmap(php_stream *stream TSRMLS_DC);
 #define php_stream_mmap_unmap(stream)				_php_stream_mmap_unmap((stream) TSRMLS_CC)
+
+PHPAPI int _php_stream_mmap_unmap_ex(php_stream *stream, off_t readden TSRMLS_DC);
+#define php_stream_mmap_unmap_ex(stream, readden)			_php_stream_mmap_unmap_ex((stream), (readden) TSRMLS_CC)
 END_EXTERN_C()
 
 /*
diff --git a/main/streams/streams.c b/main/streams/streams.c
index ddd7a2c..4ccf4a7 100755
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: streams.c,v 1.82.2.6.2.33 2009/01/08 19:21:25 felipe Exp $ */
+/* $Id: streams.c,v 1.82.2.6.2.38 2009/05/17 14:59:24 lbarnaud Exp $ */
 
 #define _GNU_SOURCE
 #include "php.h"
@@ -531,16 +531,16 @@ static void php_stream_fill_read_buffer(php_stream *stream, size_t size TSRMLS_D
 		efree(chunk_buf);
 
 	} else {
-		/* reduce buffer memory consumption if possible, to avoid a realloc */
-		if (stream->readbuf && stream->readbuflen - stream->writepos < stream->chunk_size) {
-			memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->readbuflen - stream->readpos);
-			stream->writepos -= stream->readpos;
-			stream->readpos = 0;
-		}
 		/* is there enough data in the buffer ? */
-		while (stream->writepos - stream->readpos < (off_t)size) {
+		if (stream->writepos - stream->readpos < (off_t)size) {
 			size_t justread = 0;
-			size_t toread;
+
+			/* reduce buffer memory consumption if possible, to avoid a realloc */
+			if (stream->readbuf && stream->readbuflen - stream->writepos < stream->chunk_size) {
+				memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->readbuflen - stream->readpos);
+				stream->writepos -= stream->readpos;
+				stream->readpos = 0;
+			}
 
 			/* grow the buffer if required
 			 * TODO: this can fail for persistent streams */
@@ -550,17 +550,13 @@ static void php_stream_fill_read_buffer(php_stream *stream, size_t size TSRMLS_D
 						stream->is_persistent);
 			}
 
-			toread = stream->readbuflen - stream->writepos;
 			justread = stream->ops->read(stream, stream->readbuf + stream->writepos,
-					toread
+					stream->readbuflen - stream->writepos
 					TSRMLS_CC);
 
 			if (justread != (size_t)-1) {
 				stream->writepos += justread;
 			}
-			if (stream->eof || justread != toread) {
-				break;
-			}
 		}
 	}
 }
@@ -859,10 +855,25 @@ PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen,
 PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *returned_len, char *delim, size_t delim_len TSRMLS_DC)
 {
 	char *e, *buf;
-	size_t toread;
+	size_t toread, len;
 	int skip = 0;
 
-	php_stream_fill_read_buffer(stream, maxlen TSRMLS_CC);
+	len = stream->writepos - stream->readpos;
+
+	while (len < maxlen) {
+
+		size_t just_read;
+		toread = MIN(maxlen - len, stream->chunk_size);
+
+		php_stream_fill_read_buffer(stream, len + toread TSRMLS_CC);
+
+		just_read = (stream->writepos - stream->readpos) - len;
+		len += just_read;
+
+		if (just_read < toread) {
+			break;
+		}
+	}
 
 	if (delim_len == 0 || !delim) {
 		toread = maxlen;
@@ -1195,12 +1206,12 @@ PHPAPI size_t _php_stream_passthru(php_stream * stream STREAMS_DC TSRMLS_DC)
 		char *p;
 		size_t mapped;
 
-		p = php_stream_mmap_range(stream, php_stream_tell(stream), PHP_STREAM_COPY_ALL, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
+		p = php_stream_mmap_range(stream, php_stream_tell(stream), PHP_STREAM_MMAP_ALL, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
 
 		if (p) {
 			PHPWRITE(p, mapped);
 
-			php_stream_mmap_unmap(stream);
+			php_stream_mmap_unmap_ex(stream, mapped);
 
 			return mapped;
 		}
@@ -1277,16 +1288,23 @@ PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen
 	return len;
 }
 
-PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC TSRMLS_DC)
+/* Returns SUCCESS/FAILURE and sets *len to the number of bytes moved */
+PHPAPI size_t _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC TSRMLS_DC)
 {
 	char buf[CHUNK_SIZE];
 	size_t readchunk;
 	size_t haveread = 0;
 	size_t didread;
+	size_t dummy;
 	php_stream_statbuf ssbuf;
 
+	if (!len) {
+		len = &dummy;
+	}
+
 	if (maxlen == 0) {
-		return 0;
+		*len = 0;
+		return SUCCESS;
 	}
 
 	if (maxlen == PHP_STREAM_COPY_ALL) {
@@ -1294,17 +1312,13 @@ PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size
 	}
 
 	if (php_stream_stat(src, &ssbuf) == 0) {
-		/* in the event that the source file is 0 bytes, return 1 to indicate success
-		 * because opening the file to write had already created a copy */
 		if (ssbuf.sb.st_size == 0
-#ifdef S_ISFIFO
-		 && !S_ISFIFO(ssbuf.sb.st_mode)
-#endif
-#ifdef S_ISCHR
-		 && !S_ISCHR(ssbuf.sb.st_mode)
+#ifdef S_ISREG
+			&& S_ISREG(ssbuf.sb.st_mode)
 #endif
 		) {
-			return 1;
+			*len = 0;
+			return SUCCESS;
 		}
 	}
 
@@ -1317,9 +1331,17 @@ PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size
 		if (p) {
 			mapped = php_stream_write(dest, p, mapped);
 
-			php_stream_mmap_unmap(src);
+			php_stream_mmap_unmap_ex(src, mapped);
 
-			return mapped;
+			*len = mapped;
+			
+			/* we've got at least 1 byte to read. 
+			 * less than 1 is an error */
+
+			if (mapped > 0) {
+				return SUCCESS;
+			}
+			return FAILURE;
 		}
 	}
 
@@ -1343,22 +1365,44 @@ PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size
 			while(towrite) {
 				didwrite = php_stream_write(dest, writeptr, towrite);
 				if (didwrite == 0) {
-					return 0;	/* error */
+					*len = haveread - (didread - towrite);
+					return FAILURE;
 				}
 
 				towrite -= didwrite;
 				writeptr += didwrite;
 			}
 		} else {
-			return haveread;
+			break;
 		}
 
 		if (maxlen - haveread == 0) {
 			break;
 		}
 	}
-	return haveread;
 
+	*len = haveread;
+
+	/* we've got at least 1 byte to read. 
+	 * less than 1 is an error */
+
+	if (haveread > 0) {
+		return SUCCESS;
+	}
+	return FAILURE;
+}
+
+/* Returns the number of bytes moved.
+ * Returns 1 when source len is 0. 
+ * Deprecated in favor of php_stream_copy_to_stream_ex() */
+PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC TSRMLS_DC)
+{
+	size_t len;
+	int ret = _php_stream_copy_to_stream_ex(src, dest, maxlen, &len STREAMS_REL_CC TSRMLS_CC);
+	if (ret == SUCCESS && len == 0 && maxlen != 0) {
+		return 1;
+	}
+	return len;
 }
 /* }}} */
 
diff --git a/pear/install-pear-nozlib.phar b/pear/install-pear-nozlib.phar
index 29d3753..81f77eb 100644
--- a/pear/install-pear-nozlib.phar
+++ b/pear/install-pear-nozlib.phar
@@ -1234,14 +1234,9 @@ if (extension_loaded('phar')) {if (isset($_SERVER) && isset($_SERVER['REQUEST_UR
 
 
 require_once 'phar://install-pear-nozlib.phar/index.php';
-__HALT_COMPILER();¯
  D          install-pear-nozlib.phar       Archive/Tar.phpýî  š1Hýî  rdIóm         Archive_Tar-1.3.2.tar Z š1H Z ¤³®m         Console/Getopt.phpô(  š1Hô(  =¡¶m         Console_Getopt-1.2.3.tar F  š1H F  ÆYxÕm      	   index.phpó   š1Hó   9 áçm         OS/Guess.php]+  š1H]+  Ø ü•m         PEAR-1.7.2.tar 4 š1H 4 È+Rªm         PEAR.php"ˆ  š1H"ˆ  ×)Xím         PEAR/ChannelFile.phpß  š1Hß  Ãk“m         PEAR/ChannelFile/Parser.phpš  š1Hš  Ï“©Vm         PEAR/Command.php–3  š1H–3  ÍÅ@Tm         PEAR/Command/Common.phpå"  š1Hå"  çÓ|óm         PEAR/Command/Install.phpVÄ  š1HVÄ  Å€…/m         PEAR/Command/Install.xmlC  š1HC  ÜrûÓm         PEAR/Common.php‹Œ  š1H‹Œ  Ém         PEAR/Config.php š1H æÔ«™m         PEAR/Dependency2.php„Ñ  š1H„Ñ  ×.Î\m         PEAR/DependencyDB.php£d  š1H£d  ?ͧªm         PEAR/Downloader.php) š1H) %P†m         PEAR/Downloader/Package.phpJ) š1HJ) $’I\m         PEAR/ErrorStack.phpÀ„  š1HÀ„  ƒE5.m         PEAR/Frontend.php´  š1H´  ÎŽ¥Ÿm         PEAR/Frontend/CLI.phpHn  š1HHn  JŽm         PEAR/Installer.php- š1H- e7Hªm         PEAR/Installer/Role.phpê   š1Hê   ᳄™m         PEAR/Installer/Role/Common.phpõ  š1Hõ  Ž
-)}m         PEAR/Installer/Role/Data.php°  š1H°  ˜¡¥$m         PEAR/Installer/Role/Data.xml’  š1H’  fszm         PEAR/Installer/Role/Doc.php­  š1H­  A$ºOm         PEAR/Installer/Role/Doc.xml‘  š1H‘  h&P*m         PEAR/Installer/Role/Php.php­  š1H­  èýñNm         PEAR/Installer/Role/Php.xml­  š1H­  zqm         PEAR/Installer/Role/Script.php¶  š1H¶  ÍÇø.m         PEAR/Installer/Role/Script.xml°  š1H°  @v§Ðm         PEAR/Installer/Role/Test.php°  š1H°  ¶\ýòm         PEAR/Installer/Role/Test.xml’  š1H’  B] m         PEAR/PackageFile.php¤A  š1H¤A  \#|m      !   PEAR/PackageFile/Generator/v1.phpèÆ  š1HèÆ  ðÜm      !   PEAR/PackageFile/Generator/v2.phpî  š1Hî  ²Xöem         PEAR/PackageFile/Parser/v1.php]B  š1H]B  ¤oڐm         PEAR/PackageFile/Parser/v2.php  š1H  N?mm         PEAR/PackageFile/v1.php½É  š1H½É  ù*`m         PEAR/PackageFile/v2.phpü š1Hü ¶ h#m      !   PEAR/PackageFile/v2/Validator.phpFM š1HFM SnÐm         PEAR/Registry.phpõ" š1Hõ" —'p‚m         PEAR/Remote.phpµG  š1HµG  °×/m      
   PEAR/REST.php–<  š1H–<   Õm         PEAR/REST/10.php:ƒ  š1H:ƒ  b°m         PEAR/Start.phpò6  š1Hò6  bám         PEAR/Start/CLI.phpÅQ  š1HÅQ  w
-Žm         PEAR/Task/Common.phpa  š1Ha  Æ|zvm         PEAR/Task/Postinstallscript.phpû9  š1Hû9  j—‹m      "   PEAR/Task/Postinstallscript/rw.phpc  š1Hc  zÄöm         PEAR/Task/Replace.php  š1H  ž‡£m         PEAR/Task/Replace/rw.phpÏ  š1HÏ  •Æ©m         PEAR/Task/Unixeol.phpd
-  š1Hd
-  $mm         PEAR/Task/Unixeol/rw.phpß  š1Hß  üZò(m         PEAR/Task/Windowseol.php_
-  š1H_
-  ä€dm         PEAR/Task/Windowseol/rw.phpô  š1Hô  ¥™hm         PEAR/Validate.phpˆW  š1HˆW  ™m         PEAR/Validator/PECL.php‘  š1H‘  »¿ám         PEAR/XMLParser.php‚  š1H‚  y2	m         Structures/Graph.php½  š1H½  rÀ*m      ,   Structures/Graph/Manipulator/AcyclicTest.phpß  š1Hß  1sÏm      2   Structures/Graph/Manipulator/TopologicalSorter.phpº  š1Hº  ¥Eûm         Structures/Graph/Node.phpä*  š1Hä*  '&¸m         Structures_Graph-1.0.2.tar X š1H X 'ß(Ám      
-   System.php'N  š1H'N  :´m      <?php
+__HALT_COMPILER();Ú
  E          install-pear-nozlib.phar       Archive/Tar.phpýî  +ŸâIýî  rdIóm         Archive_Tar-1.3.3.tar v +ŸâI v `	•m         Console/Getopt.phpô(  +ŸâIô(  =¡¶m         Console_Getopt-1.2.3.tar F  +ŸâI F  ÆYxÕm      	   index.phpã$  +ŸâIã$   ±$m         OS/Guess.phpÄ)  +ŸâIÄ)  ë	yñm         PEAR-1.8.0.tar < +ŸâI < f;m         PEAR.phpì‹  +ŸâIì‹  Õ$8Mm         PEAR/ChannelFile.phpÆ  +ŸâIÆ  ;]Rêm         PEAR/ChannelFile/Parser.php>  +ŸâI>  r×·“m         PEAR/Command.php62  +ŸâI62  Ø{~m         PEAR/Command/Common.phpŒ   +ŸâIŒ   ½ñ˜m         PEAR/Command/Install.php¿Å  +ŸâI¿Å  ¶?Rbm         PEAR/Command/Install.xml~!  +ŸâI~!  áW_Em         PEAR/Common.php#i  +ŸâI#i  „fà4m         PEAR/Config.phpª	 +ŸâIª	 P
¦ m         PEAR/Dependency2.phpLÆ  +ŸâILÆ  7+‡m         PEAR/DependencyDB.phpª_  +ŸâIª_  ïŽm         PEAR/Downloader.php +ŸâI Jâ
 m         PEAR/Downloader/Package.php´+ +ŸâI´+ ¯NÔ"m         PEAR/ErrorStack.php­ˆ  +ŸâI­ˆ  b!ém         PEAR/Frontend.phpJ  +ŸâIJ  à`ƒm         PEAR/Frontend/CLI.phpÊa  +ŸâIÊa  “·”m         PEAR/Installer.php* +ŸâI* Çü³m         PEAR/Installer/Role.php¹   +ŸâI¹   bCiïm         PEAR/Installer/Role/Common.phpž  +ŸâIž  Òt]€m         PEAR/Installer/Role/Data.phpp  +ŸâIp  à[rm         PEAR/Installer/Role/Data.xml’  +ŸâI’  fszm         PEAR/Installer/Role/Doc.phpm  +ŸâIm  µîæm         PEAR/Installer/Role/Doc.xml‘  +ŸâI‘  h&P*m         PEAR/Installer/Role/Php.phpm  +ŸâIm  «Ÿ m         PEAR/Installer/Role/Php.xml­  +ŸâI­  zqm         PEAR/Installer/Role/Script.phpv  +ŸâIv  Òê|m         PEAR/Installer/Role/Script.xml°  +ŸâI°  @v§Ðm         PEAR/Installer/Role/Test.phpp  +ŸâIp  }aòˆm         PEAR/Installer/Role/Test.xml’  +ŸâI’  B] m         PEAR/PackageFile.php @  +ŸâI @  u´lAm      !   PEAR/PackageFile/Generator/v1.php›Å  +ŸâI›Å  7Ÿ|Öm      !   PEAR/PackageFile/Generator/v2.phpƒ  +ŸâIƒ  T)+lm         PEAR/PackageFile/Parser/v1.phpï@  +ŸâIï@  yU3m         PEAR/PackageFile/Parser/v2.phpÕ  +ŸâIÕ  ï´“m         PEAR/PackageFile/v1.php®Î  +ŸâI®Î  p·‘m         PEAR/PackageFile/v2.php¦ +ŸâI¦ ÒÍÝ®m      !   PEAR/PackageFile/v2/Validator.php%P +ŸâI%P hsÁRm         PEAR/Registry.phpc0 +ŸâIc0 gx³‚m      
   PEAR/REST.php´<  +ŸâI´<  Û
Í*m         PEAR/REST/10.php
  +ŸâI
  ž™%ãm         PEAR/Start.phpÝ6  +ŸâIÝ6  ¡=ðm         PEAR/Start/CLI.phpÅQ  +ŸâIÅQ  w
+Žm         PEAR/Task/Common.php  +ŸâI  ]7b€m         PEAR/Task/Postinstallscript.phpŸ8  +ŸâIŸ8  ýªYœm      "   PEAR/Task/Postinstallscript/rw.phpñ  +ŸâIñ  ¥ž$m         PEAR/Task/Replace.php  +ŸâI  ]> m         PEAR/Task/Replace/rw.php°  +ŸâI°  ±œ}m         PEAR/Task/Unixeol.php		  +ŸâI		  ¤ÂÎym         PEAR/Task/Unixeol/rw.php»  +ŸâI»  Útöm         PEAR/Task/Windowseol.php	  +ŸâI	  u(žÉm         PEAR/Task/Windowseol/rw.phpÐ  +ŸâIÐ  £BX‹m         PEAR/Validate.phpzV  +ŸâIzV  -åÄm         PEAR/Validator/PECL.php¥  +ŸâI¥  Hëm         PEAR/XMLParser.phpô  +ŸâIô  €heÜm         Structures/Graph.php½  +ŸâI½  rÀ*m      ,   Structures/Graph/Manipulator/AcyclicTest.phpß  +ŸâIß  1sÏm      2   Structures/Graph/Manipulator/TopologicalSorter.phpº  +ŸâIº  ¥Eûm         Structures/Graph/Node.phpé*  +ŸâIé*  úT¯æm         Structures_Graph-1.0.2.tar X +ŸâI X 'ß(Ám      
+   System.phpLN  +ŸâILN  OÊÞjm         XML/Util.phpÇv  +ŸâIÇv  ¥°m         XML_Util-1.2.1.tar â +ŸâI â 7l \m      <?php
 /* vim: set ts=4 sw=4: */
 // +----------------------------------------------------------------------+
 // | PHP Version 4                                                        |
@@ -3056,8 +3051,8 @@ class Archive_Tar extends PEAR
 
 }
 ?>
-package.xml                                                                                         100644    1750    1750        13604 10547623416   6451                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.5.0RC2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+package2.xml                                                                                        100664     764     764        14772      100664   6346                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.8.0RC1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
  <name>Archive_Tar</name>
  <channel>pear.php.net</channel>
  <summary>Tar file management class</summary>
@@ -3083,29 +3078,28 @@ loaded. Bz2 compression is also supported with the bz2 extension loaded.</descri
   <email>stig at php.net</email>
   <active>no</active>
  </helper>
- <date>2007-01-05</date>
- <time>22:35:26</time>
+ <date>2009-03-27</date>
+ <time>02:37:57</time>
  <version>
-  <release>1.3.2</release>
-  <api>1.3.2</api>
+  <release>1.3.3</release>
+  <api>1.3.1</api>
  </version>
  <stability>
   <release>stable</release>
   <api>stable</api>
  </stability>
- <license uri="http://www.php.net/license">PHP License</license>
- <notes>Correct Bug #4016
-Remove duplicate remove error display with &apos;@&apos;
-Correct Bug #3909 : Check existence of OS_WINDOWS constant
-Correct Bug #5452 fix for &quot;lone zero block&quot; when untarring packages
-Change filemode (from pear-core/Archive/Tar.php v.1.21)
-Correct Bug #6486 Can not extract symlinks
-Correct Bug #6933 Archive_Tar (Tar file management class) Directory traversal	
-Correct Bug #8114 Files added on-the-fly not storing date
-Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
+ <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+ <notes>
+Change the license to New BSD license
+
+   minor bugfix release
+   * fix Bug #9921 compression with bzip2 fails [cellog]
+   * fix Bug #11594 _readLongHeader leaves 0 bytes in filename [jamessas]
+   * fix Bug #11769 Incorrect symlink handing [fajar99]
+ </notes>
  <contents>
   <dir name="/">
-   <file baseinstalldir="/" md5sum="06409d39f4268a9aa9e2924c7f397a38" name="Archive/Tar.php" role="php" />
+   <file baseinstalldir="/" md5sum="d6c6633566e7484aff188f798529b061" name="Archive/Tar.php" role="php" />
    <file baseinstalldir="/" md5sum="29b03715377b18b1fafcff98a99cc9a7" name="docs/Archive_Tar.txt" role="doc" />
   </dir>
  </contents>
@@ -3118,10 +3112,10 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
  <dependencies>
   <required>
    <php>
-    <min>4.0.0</min>
+    <min>4.3.0</min>
    </php>
    <pearinstaller>
-    <min>1.4.0b1</min>
+    <min>1.5.4</min>
    </pearinstaller>
   </required>
  </dependencies>
@@ -3129,6 +3123,29 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
  <changelog>
   <release>
    <version>
+    <release>1.3.2</release>
+    <api>1.3.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2007-01-03</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>
+Correct Bug #4016
+Remove duplicate remove error display with &apos;@&apos;
+Correct Bug #3909 : Check existence of OS_WINDOWS constant
+Correct Bug #5452 fix for &quot;lone zero block&quot; when untarring packages
+Change filemode (from pear-core/Archive/Tar.php v.1.21)
+Correct Bug #6486 Can not extract symlinks
+Correct Bug #6933 Archive_Tar (Tar file management class) Directory traversal
+Correct Bug #8114 Files added on-the-fly not storing date
+Correct Bug #9352 Bug on _dirCheck function over nfs path
+   </notes>
+  </release>
+  <release>
+   <version>
     <release>1.3.1</release>
     <api>1.3.1</api>
    </version>
@@ -3138,7 +3155,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2005-03-17</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Correct Bug #3855</notes>
+   <notes>
+Correct Bug #3855
+   </notes>
   </release>
   <release>
    <version>
@@ -3151,7 +3170,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2005-03-06</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Bugs correction (2475, 2488, 2135, 2176)</notes>
+   <notes>
+Bugs correction (2475, 2488, 2135, 2176)
+   </notes>
   </release>
   <release>
    <version>
@@ -3164,8 +3185,10 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2004-05-08</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Add support for other separator than the space char and bug
-	correction</notes>
+   <notes>
+Add support for other separator than the space char and bug
+	correction
+   </notes>
   </release>
   <release>
    <version>
@@ -3178,8 +3201,10 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2003-05-28</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>* Add support for BZ2 compression
-* Add support for add and extract without using temporary files : methods addString() and extractInString()</notes>
+   <notes>
+* Add support for BZ2 compression
+* Add support for add and extract without using temporary files : methods addString() and extractInString()
+   </notes>
   </release>
   <release>
    <version>
@@ -3192,7 +3217,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2003-01-24</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Change status to stable</notes>
+   <notes>
+Change status to stable
+   </notes>
   </release>
   <release>
    <version>
@@ -3205,7 +3232,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2003-01-08</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Add support for long filenames (greater than 99 characters)</notes>
+   <notes>
+Add support for long filenames (greater than 99 characters)
+   </notes>
   </release>
   <release>
    <version>
@@ -3218,7 +3247,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2002-05-27</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Auto-detect gzip&apos;ed files</notes>
+   <notes>
+Auto-detect gzip&apos;ed files
+   </notes>
   </release>
   <release>
    <version>
@@ -3231,7 +3262,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2002-05-20</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Windows bugfix: use forward slashes inside archives</notes>
+   <notes>
+Windows bugfix: use forward slashes inside archives
+   </notes>
   </release>
   <release>
    <version>
@@ -3244,7 +3277,9 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2002-02-18</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>From initial commit to stable</notes>
+   <notes>
+From initial commit to stable
+   </notes>
   </release>
   <release>
    <version>
@@ -3257,29 +3292,53 @@ Correct Bug #9352 Bug on _dirCheck function over nfs path</notes>
    </stability>
    <date>2002-04-13</date>
    <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Windows bugfix: used wrong directory separators</notes>
+   <notes>
+Windows bugfix: used wrong directory separators
+   </notes>
   </release>
  </changelog>
 </package>
-                                                                                                                            Archive_Tar-1.3.2/Archive/Tar.php                                                                   100644    1750    1750       167330 10547623416  12030                                                                                                                                                                                                                                                                                                                                                                      <?php
-/* vim: set ts=4 sw=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license at php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Author: Vincent Blavet <vincent at phpconcept.net>                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: Tar.php,v 1.39 2006/12/22 19:20:08 cellog Exp $
+      Archive_Tar-1.3.3/Archive/Tar.php                                                                   100777     764     764       171523      100777  11646                                                                                                                                                                                                                                                                                                                                                                      <?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * File::CSV
+ *
+ * PHP versions 4 and 5
+ *
+ * Copyright (c) 1997-2008,
+ * Vincent Blavet <vincent at phpconcept.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * @category    File_Formats
+ * @package     Archive_Tar
+ * @author      Vincent Blavet <vincent at phpconcept.net>
+ * @copyright   1997-2008 The Authors
+ * @license     http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @version     CVS: $Id: Tar.php,v 1.43 2008/10/30 17:58:42 dufuz Exp $
+ * @link        http://pear.php.net/package/Archive_Tar
+ */
 
 require_once 'PEAR.php';
 
@@ -3291,8 +3350,9 @@ define ('ARCHIVE_TAR_END_BLOCK', pack("a512", ''));
 * Creates a (compressed) Tar archive
 *
 * @author   Vincent Blavet <vincent at phpconcept.net>
-* @version  $Revision: 1.39 $
-* @package  Archive
+* @version  $Revision: 1.43 $
+* @license  http://www.opensource.org/licenses/bsd-license.php New BSD License
+* @package  Archive_Tar
 */
 class Archive_Tar extends PEAR
 {
@@ -3640,14 +3700,14 @@ class Archive_Tar extends PEAR
     function addString($p_filename, $p_string)
     {
         $v_result = true;
-        
+
         if (!$this->_isArchive()) {
             if (!$this->_openWrite()) {
                 return false;
             }
             $this->_close();
         }
-        
+
         if (!$this->_openAppend())
             return false;
 
@@ -3787,12 +3847,12 @@ class Archive_Tar extends PEAR
     function setAttribute()
     {
         $v_result = true;
-        
+
         // ----- Get the number of variable list of arguments
         if (($v_size = func_num_args()) == 0) {
             return true;
         }
-        
+
         // ----- Get the arguments
         $v_att_list = &func_get_args();
 
@@ -3852,7 +3912,7 @@ class Archive_Tar extends PEAR
             $p_filename = $this->_tarname;
         }
         clearstatcache();
-        return @is_file($p_filename);
+        return @is_file($p_filename) && !@is_link($p_filename);
     }
     // }}}
 
@@ -3862,7 +3922,7 @@ class Archive_Tar extends PEAR
         if ($this->_compress_type == 'gz')
             $this->_file = @gzopen($this->_tarname, "wb9");
         else if ($this->_compress_type == 'bz2')
-            $this->_file = @bzopen($this->_tarname, "wb");
+            $this->_file = @bzopen($this->_tarname, "w");
         else if ($this->_compress_type == 'none')
             $this->_file = @fopen($this->_tarname, "wb");
         else
@@ -3915,7 +3975,7 @@ class Archive_Tar extends PEAR
         if ($this->_compress_type == 'gz')
             $this->_file = @gzopen($v_filename, "rb");
         else if ($this->_compress_type == 'bz2')
-            $this->_file = @bzopen($v_filename, "rb");
+            $this->_file = @bzopen($v_filename, "r");
         else if ($this->_compress_type == 'none')
             $this->_file = @fopen($v_filename, "rb");
         else
@@ -3936,9 +3996,11 @@ class Archive_Tar extends PEAR
     {
         if ($this->_compress_type == 'gz')
             $this->_file = @gzopen($this->_tarname, "r+b");
-        else if ($this->_compress_type == 'bz2')
-            $this->_file = @bzopen($this->_tarname, "r+b");
-        else if ($this->_compress_type == 'none')
+        else if ($this->_compress_type == 'bz2') {
+            $this->_error('Unable to open bz2 in read/write mode \''
+			              .$this->_tarname.'\' (limitation of bz2 extension)');
+            return false;
+        } else if ($this->_compress_type == 'none')
             $this->_file = @fopen($this->_tarname, "r+b");
         else
             $this->_error('Unknown or missing compression type ('
@@ -4129,7 +4191,7 @@ class Archive_Tar extends PEAR
         if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir))
             return false;
 
-        if (@is_dir($v_filename)) {
+        if (@is_dir($v_filename) && !@is_link($v_filename)) {
             if (!($p_hdir = opendir($v_filename))) {
                 $this->_warning("Directory '$v_filename' can not be read");
                 continue;
@@ -4262,24 +4324,28 @@ class Archive_Tar extends PEAR
             return false;
         }
 
-        $v_info = stat($p_filename);
+        $v_info = lstat($p_filename);
         $v_uid = sprintf("%6s ", DecOct($v_info[4]));
         $v_gid = sprintf("%6s ", DecOct($v_info[5]));
-        $v_perms = sprintf("%6s ", DecOct(fileperms($p_filename)));
+        $v_perms = sprintf("%6s ", DecOct($v_info['mode']));
 
-        $v_mtime = sprintf("%11s", DecOct(filemtime($p_filename)));
+        $v_mtime = sprintf("%11s", DecOct($v_info['mode']));
 
-        if (@is_dir($p_filename)) {
+        $v_linkname = '';
+
+        if (@is_link($p_filename)) {
+          $v_typeflag = '2';
+          $v_linkname = readlink($p_filename);
+          $v_size = sprintf("%11s ", DecOct(0));
+        } elseif (@is_dir($p_filename)) {
           $v_typeflag = "5";
           $v_size = sprintf("%11s ", DecOct(0));
         } else {
           $v_typeflag = '';
           clearstatcache();
-          $v_size = sprintf("%11s ", DecOct(filesize($p_filename)));
+          $v_size = sprintf("%11s ", DecOct($v_info['size']));
         }
 
-        $v_linkname = '';
-
         $v_magic = '';
 
         $v_version = '';
@@ -4586,6 +4652,7 @@ class Archive_Tar extends PEAR
       if (!$this->_readHeader($v_binary_data, $v_header))
         return false;
 
+      $v_filename = trim($v_filename);
       $v_header['filename'] = $v_filename;
         if ($this->_maliciousFilename($v_filename)) {
             $this->_error('Malicious .tar detected, file "' . $v_filename .
@@ -4793,6 +4860,9 @@ class Archive_Tar extends PEAR
                 }
             }
           } elseif ($v_header['typeflag'] == "2") {
+              if (@file_exists($v_header['filename'])) {
+                  @unlink($v_header['filename']);
+              }
               if (!@symlink($v_header['link'], $v_header['filename'])) {
                   $this->_error('Unable to extract symbolic link {'
                                 .$v_header['filename'].'}');
@@ -4874,7 +4944,7 @@ class Archive_Tar extends PEAR
     {
         if (filesize($this->_tarname) == 0)
           return $this->_openWrite();
-          
+
         if ($this->_compress) {
             $this->_close();
 
@@ -4888,8 +4958,8 @@ class Archive_Tar extends PEAR
             if ($this->_compress_type == 'gz')
                 $v_temp_tar = @gzopen($this->_tarname.".tmp", "rb");
             elseif ($this->_compress_type == 'bz2')
-                $v_temp_tar = @bzopen($this->_tarname.".tmp", "rb");
-                
+                $v_temp_tar = @bzopen($this->_tarname.".tmp", "r");
+
             if ($v_temp_tar == 0) {
                 $this->_error('Unable to open file \''.$this->_tarname
 				              .'.tmp\' in binary read mode');
@@ -4943,14 +5013,14 @@ class Archive_Tar extends PEAR
             $v_size = filesize($this->_tarname);
 
             // We might have zero, one or two end blocks.
-            // The standard is two, but we should try to handle 
+            // The standard is two, but we should try to handle
             // other cases.
             fseek($this->_file, $v_size - 1024);
             if (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) {
                 fseek($this->_file, $v_size - 1024);
             }
             elseif (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) {
-                fseek($this->_file, $v_size - 512);    
+                fseek($this->_file, $v_size - 512);
             }
         }
 
@@ -4963,7 +5033,7 @@ class Archive_Tar extends PEAR
     {
         if (!$this->_openAppend())
             return false;
-            
+
         if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir))
            $this->_writeFooter();
 
@@ -5009,7 +5079,7 @@ class Archive_Tar extends PEAR
     // {{{ _pathReduction()
 
     /**
-     * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", 
+     * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar",
      * rand emove double slashes.
      *
      * @param string $p_dir path to reduce
@@ -5076,7 +5146,7 @@ class Archive_Tar extends PEAR
 
 }
 ?>
-                                                                                                                                                                                                                                                                                                        Archive_Tar-1.3.2/docs/Archive_Tar.txt                                                              100644    1750    1750        43673 10547623416  13053                                                                                                                                                                                                                                                                                                                                                                      Documentation for class Archive_Tar
+                                                                                                                                                                             Archive_Tar-1.3.3/docs/Archive_Tar.txt                                                              100777     764     764        43673      100777  12672                                                                                                                                                                                                                                                                                                                                                                      Documentation for class Archive_Tar
 ===================================
 Last update : 2001-08-15
 
@@ -5537,7 +5607,162 @@ How it works :
   Go through the archive and extract only the files present in the
   list. 
 
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     <?php
+                                                                     package.xml                                                                                         100664     764     764        11522      100664   6252                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+<package version="1.0" packagerversion="1.8.0RC1">
+ <name>Archive_Tar</name>
+ <summary>Tar file management class</summary>
+ <description>This class provides handling of tar files in PHP.
+It supports creating, listing, extracting and adding to tar files.
+Gzip support is available if PHP has the zlib extension built-in or
+loaded. Bz2 compression is also supported with the bz2 extension loaded.
+ </description>
+ <maintainers>
+  <maintainer>
+   <user>cellog</user>
+   <name>Gregory Beaver</name>
+   <email>cellog at php.net</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>vblavet</user>
+   <name>Vincent Blavet</name>
+   <email>vincent at phpconcept.net</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>ssb</user>
+   <name>Stig Bakken</name>
+   <email>stig at php.net</email>
+   <role>helper</role>
+  </maintainer>
+  </maintainers>
+ <release>
+  <version>1.3.3</version>
+  <date>2009-03-27</date>
+  <license>New BSD License</license>
+  <state>stable</state>
+  <notes>minor bugfix release
+* fix Bug #9921 compression with bzip2 fails [cellog]
+* fix Bug #11594 _readLongHeader leaves 0 bytes in filename [jamessas]
+* fix Bug #11769 Incorrect symlink handing [fajar99]
+  </notes>
+  <provides type="class" name="Archive_Tar" />
+  <provides type="function" name="Archive_Tar::create" />
+  <provides type="function" name="Archive_Tar::add" />
+  <provides type="function" name="Archive_Tar::extract" />
+  <provides type="function" name="Archive_Tar::listContent" />
+  <provides type="function" name="Archive_Tar::createModify" />
+  <provides type="function" name="Archive_Tar::addModify" />
+  <provides type="function" name="Archive_Tar::addString" />
+  <provides type="function" name="Archive_Tar::extractModify" />
+  <provides type="function" name="Archive_Tar::extractInString" />
+  <provides type="function" name="Archive_Tar::extractList" />
+  <provides type="function" name="Archive_Tar::setAttribute" />
+  <filelist>
+   <file role="php" baseinstalldir="/" name="Archive/Tar.php"/>
+   <file role="doc" baseinstalldir="/" name="docs/Archive_Tar.txt"/>
+  </filelist>
+ </release>
+ <changelog>
+   <release>
+    <version>1.3.3</version>
+    <date>2007-08-25</date>
+    <license>PHP License</license>
+    <state>stable</state>
+   </release>
+   <release>
+    <version>1.3.2</version>
+    <date>2007-01-03</date>
+    <license>PHP License</license>
+    <state>stable</state>
+    <notes>Correct Bug #4016
+Remove duplicate remove error display with &apos;@&apos;
+Correct Bug #3909 : Check existence of OS_WINDOWS constant
+Correct Bug #5452 fix for &quot;lone zero block&quot; when untarring packages
+Change filemode (from pear-core/Archive/Tar.php v.1.21)
+Correct Bug #6486 Can not extract symlinks
+Correct Bug #6933 Archive_Tar (Tar file management class) Directory traversal
+Correct Bug #8114 Files added on-the-fly not storing date
+Correct Bug #9352 Bug on _dirCheck function over nfs path
+    </notes>
+   </release>
+   <release>
+    <version>1.3.1</version>
+    <date>2005-03-17</date>
+    <license>PHP License</license>
+    <state>stable</state>
+    <notes>Correct Bug #3855
+    </notes>
+   </release>
+   <release>
+    <version>1.3.0</version>
+    <date>2005-03-06</date>
+    <state>stable</state>
+    <notes>Bugs correction (2475, 2488, 2135, 2176)
+    </notes>
+   </release>
+   <release>
+    <version>1.2</version>
+    <date>2004-05-08</date>
+    <state>stable</state>
+    <notes>Add support for other separator than the space char and bug
+	correction
+    </notes>
+   </release>
+   <release>
+    <version>1.1</version>
+    <date>2003-05-28</date>
+    <state>stable</state>
+    <notes>* Add support for BZ2 compression
+* Add support for add and extract without using temporary files : methods addString() and extractInString()
+    </notes>
+   </release>
+   <release>
+    <version>1.0</version>
+    <date>2003-01-24</date>
+    <state>stable</state>
+    <notes>Change status to stable
+    </notes>
+   </release>
+   <release>
+    <version>0.10-b1</version>
+    <date>2003-01-08</date>
+    <state>beta</state>
+    <notes>Add support for long filenames (greater than 99 characters)
+    </notes>
+   </release>
+   <release>
+    <version>0.9</version>
+    <date>2002-05-27</date>
+    <state>stable</state>
+    <notes>Auto-detect gzip&apos;ed files
+    </notes>
+   </release>
+   <release>
+    <version>0.4</version>
+    <date>2002-05-20</date>
+    <state>stable</state>
+    <notes>Windows bugfix: use forward slashes inside archives
+    </notes>
+   </release>
+   <release>
+    <version>0.2</version>
+    <date>2002-02-18</date>
+    <state>stable</state>
+    <notes>From initial commit to stable
+    </notes>
+   </release>
+   <release>
+    <version>0.3</version>
+    <date>2002-04-13</date>
+    <state>stable</state>
+    <notes>Windows bugfix: used wrong directory separators
+    </notes>
+   </release>
+ </changelog>
+</package>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <?php
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
 // +----------------------------------------------------------------------+
 // | PHP Version 5                                                        |
@@ -6261,267 +6486,291 @@ class Console_Getopt {
 }
 
 ?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <?php
-
-/* $Id: install-pear.php,v 1.35 2008/05/19 15:14:58 cellog Exp $ */
-
-error_reporting(1803);
-$pear_dir = dirname(__FILE__);
-ini_set('include_path', '');
-if (function_exists('mb_internal_encoding')) {
-    mb_internal_encoding('ASCII');
-}
-set_time_limit(0);
-include_once 'phar://install-pear-nozlib.phar/PEAR.php';
-include_once 'phar://install-pear-nozlib.phar/PEAR/Installer.php';
-include_once 'phar://install-pear-nozlib.phar/PEAR/Registry.php';
-include_once 'phar://install-pear-nozlib.phar/PEAR/PackageFile.php';
-include_once 'phar://install-pear-nozlib.phar/PEAR/Downloader/Package.php';
-include_once 'phar://install-pear-nozlib.phar/PEAR/Frontend.php';
-$a = true;
-if (!PEAR::loadExtension('xml')) {
-    $a = false;
-    echo "[PEAR] xml extension is required\n";
-}
-if (!PEAR::loadExtension('pcre')) {
-    $a = false;
-    echo "[PEAR] pcre extension is required\n";
-}
-if (!$a) {
-    return -1;
-}
-
-$force = false;
-$install_files = array('Console_Getopt' => 'phar://install-pear-nozlib.phar/Console_Getopt-1.2.3.tar',
-'Archive_Tar' => 'phar://install-pear-nozlib.phar/Archive_Tar-1.3.2.tar',
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <?php
+
+/* $Id: install-pear.php,v 1.37 2009/02/16 00:46:55 dufuz Exp $ */
+
+error_reporting(1803);
+
+if (ini_get('date.timezone') === '' && function_exists('date_default_timezone_set')) {
+    date_default_timezone_set('UTC');
+}
+
+$pear_dir = dirname(__FILE__);
+ini_set('include_path', '');
+if (function_exists('mb_internal_encoding')) {
+    mb_internal_encoding('ASCII');
+}
+set_time_limit(0);
+include_once 'phar://install-pear-nozlib.phar/PEAR.php';
+include_once 'phar://install-pear-nozlib.phar/PEAR/Installer.php';
+include_once 'phar://install-pear-nozlib.phar/PEAR/Registry.php';
+include_once 'phar://install-pear-nozlib.phar/PEAR/PackageFile.php';
+include_once 'phar://install-pear-nozlib.phar/PEAR/Downloader/Package.php';
+include_once 'phar://install-pear-nozlib.phar/PEAR/Frontend.php';
+$a = true;
+if (!PEAR::loadExtension('xml')) {
+    $a = false;
+    echo "[PEAR] xml extension is required\n";
+}
+if (!PEAR::loadExtension('pcre')) {
+    $a = false;
+    echo "[PEAR] pcre extension is required\n";
+}
+if (!$a) {
+    return -1;
+}
+
+$force = false;
+$install_files = array('Archive_Tar' => 'phar://install-pear-nozlib.phar/Archive_Tar-1.3.3.tar',
+'Console_Getopt' => 'phar://install-pear-nozlib.phar/Console_Getopt-1.2.3.tar',
 'Structures_Graph' => 'phar://install-pear-nozlib.phar/Structures_Graph-1.0.2.tar',
-'PEAR' => 'phar://install-pear-nozlib.phar/PEAR-1.7.2.tar',
-);
-array_shift($argv);
-$debug = false;
-for ($i = 0; $i < sizeof($argv); $i++) {
-    $arg = $argv[$i];
-    $bn = basename($arg);
-    if (ereg('package-(.*)\.xml$', $bn, $matches) ||
-        ereg('([A-Za-z0-9_:]+)-.*\.(tar|tgz)$', $bn, $matches)) {
-        $install_files[$matches[1]] = $arg;
-    } elseif ($arg == '--force') {
-        $force = true;
-    } elseif ($arg == '-d') {
-        $with_dir = $argv[$i+1];
-        $i++;
-    } elseif ($arg == '-b') {
-        $bin_dir = $argv[$i+1];
-        $i++;
-    } elseif ($arg == '-c') {
-        $cfg_dir = $argv[$i+1];
-        $i++;
-    } elseif ($arg == '-w') {
-        $www_dir = $argv[$i+1];
-        $i++;
-    } elseif ($arg == '-p') {
-        $php_bin = $argv[$i+1];
-        $i++;
-    } elseif ($arg == '--debug') {
-        $debug = 1;
-    } elseif ($arg == '--extremedebug') {
-        $debug = 2;
-    }
-}
-
-$config = PEAR_Config::singleton();
-
-if (PEAR::isError($config)) {
-    $locs = PEAR_Config::getDefaultConfigFiles();
-    die("ERROR: One of $locs[user] or $locs[system] is corrupt, please remove them and try again");
-}
-
-// make sure we use only default values
-$config_layers = $config->getLayers();
-foreach ($config_layers as $layer) {
-    if ($layer == 'default') continue;
-    $config->removeLayer($layer);
-}
-$keys = $config->getKeys();
-if ($debug) {
-    $config->set('verbose', 5, 'default');
-} else {
-    $config->set('verbose', 0, 'default');
-}
-// PEAR executables
-if (!empty($bin_dir)) {
-    $config->set('bin_dir', $bin_dir, 'default');
-}
-
-// Config files
-if (!empty($cfg_dir)) {
-    $config->set('cfg_dir', $cfg_dir, 'default');
-}
-
-// Web files
-if (!empty($www_dir)) {
-    $config->set('www_dir', $www_dir, 'default');
-}
-
-// User supplied a dir prefix
-if (!empty($with_dir)) {
-    $ds = DIRECTORY_SEPARATOR;
-    $config->set('php_dir', $with_dir, 'default');
-    $config->set('doc_dir', $with_dir . $ds . 'doc', 'default');
-    $config->set('data_dir', $with_dir . $ds . 'data', 'default');
-    $config->set('test_dir', $with_dir . $ds . 'test', 'default');
-    if (empty($www_dir)) {
-        $config->set('www_dir', $with_dir . $ds . 'htdocs', 'default');
-    }
-    if (empty($cfg_dir)) {
-        $config->set('cfg_dir', $with_dir . $ds . 'cfg', 'default');
-    }
-    if (!is_writable($config->get('cache_dir'))) {
-        include_once 'phar://install-pear-nozlib.phar/System.php';
-        $cdir = System::mktemp(array('-d', 'pear'));
-        if (PEAR::isError($cdir)) {
-            $ui->outputData("[PEAR] cannot make new temporary directory: " . $cdir);
-            die(1);
-        }
-        $oldcachedir = $config->get('cache_dir');
-        $config->set('cache_dir', $cdir);
-    }
-}
-if (!empty($php_bin)) {
-    $config->set('php_bin', $php_bin);
-}
-/* Print PEAR Conf (useful for debuging do NOT REMOVE) */
-if ($debug) {
-    sort($keys);
-    foreach ($keys as $key) {
-        echo $key . '    ' .
-            $config->getPrompt($key) . ": " . $config->get($key, null, 'default') . "\n";
-    }
-    if ($debug == 2) { // extreme debugging
-        exit;
-    }
-}
-// end print
-
-$php_dir = $config->get('php_dir');
-$options = array();
-$options['upgrade'] = true;
-$install_root = getenv('INSTALL_ROOT');
-if (!empty($install_root)) {
-    $options['packagingroot'] = $install_root;
-    $reg = &new PEAR_Registry($options['packagingroot']);
-} else {
-    $reg = $config->getRegistry('default');
-}
-
-$ui = PEAR_Frontend::singleton('PEAR_Frontend_CLI');
-if (PEAR::isError($ui)) {
-    die($ui->getMessage());
-}
-$installer = new PEAR_Installer($ui);
-$pkg = new PEAR_PackageFile($config, $debug);
-
-foreach ($install_files as $package => $instfile) {
-    $info = $pkg->fromAnyFile($instfile, PEAR_VALIDATE_INSTALLING);
-    if (PEAR::isError($info)) {
-        if (is_array($info->getUserInfo())) {
-            foreach ($info->getUserInfo() as $err) {
-                $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err['message']));
-            }
-        }
-        $ui->outputData(sprintf("[PEAR] %s: %s", $package, $info->getMessage()));
-        continue;
-    }
-    $new_ver = $info->getVersion();
-    $downloaderpackage = new PEAR_Downloader_Package($installer);
-    $err = $downloaderpackage->initialize($instfile);
-    if (PEAR::isError($err)) {
-        $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
-        continue;
-    }
-    if ($reg->packageExists($package)) {
-        $old_ver = $reg->packageInfo($package, 'version');
-        if (version_compare($new_ver, $old_ver, 'gt')) {
-            $installer->setOptions($options);
-            $dp = array($downloaderpackage);
-            $installer->setDownloadedPackages($dp);
-            $err = $installer->install($downloaderpackage, $options);
-            if (PEAR::isError($err)) {
-                $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
-                continue;
-            }
-            $ui->outputData(sprintf("[PEAR] %-15s- upgraded:  %s", $package, $new_ver));
-        } else {
-            if ($force) {
-                $options['force'] = true;
-                $installer->setOptions($options);
-                $dp = array($downloaderpackage);
-                $installer->setDownloadedPackages($dp);
-                $err = $installer->install($downloaderpackage, $options);
-                if (PEAR::isError($err)) {
-                    $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
-                    continue;
-                }
-                $ui->outputData(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
-            } else {
-                $ui->outputData(sprintf("[PEAR] %-15s- already installed: %s", $package, $old_ver));
-            }
-        }
-    } else {
-        $options['nodeps'] = true;
-        $installer->setOptions($options);
-        $dp = array($downloaderpackage);
-        $installer->setDownloadedPackages($dp);
-        $err = $installer->install($downloaderpackage, $options);
-        if (PEAR::isError($err)) {
-            $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
-            continue;
-        }
-        $ui->outputData(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
-    }
-    if ($package == 'PEAR') {
-        if (is_file($ufile = $config->getConfFile('user'))) {
-            $ui->outputData('Warning! a PEAR user config file already exists from ' .
-                            'a previous PEAR installation at ' .
-                            "'$ufile'. You may probably want to remove it.");
-        }
-        $config->set('verbose', 1, 'default');
-        if (isset($oldcachedir)) {
-            $config->set('cache_dir', $oldcachedir);
-        }
-        $data = array();
-        foreach ($config->getKeys() as $key) {
-            $data[$key] = $config->get($key);
-        }
-        $cnf_file = $config->getConfFile('system');
-        if (!empty($install_root)) {
-            $cnf_file = $install_root . DIRECTORY_SEPARATOR . $cnf_file;
-        }
-        $config->writeConfigFile($cnf_file, 'system', $data);
-        $ui->outputData('Wrote PEAR system config file at: ' . $cnf_file);
-        $ui->outputData('You may want to add: ' . $config->get('php_dir') . ' to your php.ini include_path');
-    }
-}
-?>
+'XML_Util' => 'phar://install-pear-nozlib.phar/XML_Util-1.2.1.tar',
+'PEAR' => 'phar://install-pear-nozlib.phar/PEAR-1.8.0.tar',
+);
+array_shift($argv);
+$debug = false;
+for ($i = 0; $i < sizeof($argv); $i++) {
+    $arg = $argv[$i];
+    $bn = basename($arg);
+    if (ereg('package-(.*)\.xml$', $bn, $matches) ||
+        ereg('([A-Za-z0-9_:]+)-.*\.(tar|tgz)$', $bn, $matches)) {
+        $install_files[$matches[1]] = $arg;
+    } elseif ($arg == '-a') {
+        $cache_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '--force') {
+        $force = true;
+    } elseif ($arg == '-d') {
+        $with_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '-b') {
+        $bin_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '-c') {
+        $cfg_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '-w') {
+        $www_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '-p') {
+        $php_bin = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '-o') {
+        $download_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '-t') {
+        $temp_dir = $argv[$i+1];
+        $i++;
+    } elseif ($arg == '--debug') {
+        $debug = 1;
+    } elseif ($arg == '--extremedebug') {
+        $debug = 2;
+    }
+}
+
+$config = PEAR_Config::singleton();
+
+if (PEAR::isError($config)) {
+    $locs = PEAR_Config::getDefaultConfigFiles();
+    die("ERROR: One of $locs[user] or $locs[system] is corrupt, please remove them and try again");
+}
+
+// make sure we use only default values
+$config_layers = $config->getLayers();
+foreach ($config_layers as $layer) {
+    if ($layer == 'default') continue;
+    $config->removeLayer($layer);
+}
+$keys = $config->getKeys();
+if ($debug) {
+    $config->set('verbose', 5, 'default');
+} else {
+    $config->set('verbose', 0, 'default');
+}
+// PEAR executables
+if (!empty($bin_dir)) {
+    $config->set('bin_dir', $bin_dir, 'default');
+}
+
+// Cache files
+if (!empty($cache_dir)) {
+    $config->set('cache_dir', $cache_dir, 'default');
+}
+
+// Config files
+if (!empty($cfg_dir)) {
+    $config->set('cfg_dir', $cfg_dir, 'default');
+}
+
+// Web files
+if (!empty($www_dir)) {
+    $config->set('www_dir', $www_dir, 'default');
+}
+
+// Downloaded files
+if (!empty($download_dir)) {
+    $config->set('download_dir', $download_dir, 'default');
+}
+
+// Temporary files
+if (!empty($temp_dir)) {
+    $config->set('temp_dir', $temp_dir, 'default');
+}
+
+// User supplied a dir prefix
+if (!empty($with_dir)) {
+    $ds = DIRECTORY_SEPARATOR;
+    $config->set('php_dir', $with_dir, 'default');
+    $config->set('doc_dir', $with_dir . $ds . 'doc', 'default');
+    $config->set('data_dir', $with_dir . $ds . 'data', 'default');
+    $config->set('test_dir', $with_dir . $ds . 'test', 'default');
+    if (empty($www_dir)) {
+        $config->set('www_dir', $with_dir . $ds . 'htdocs', 'default');
+    }
+    if (empty($cfg_dir)) {
+        $config->set('cfg_dir', $with_dir . $ds . 'cfg', 'default');
+    }
+    if (!is_writable($config->get('cache_dir'))) {
+        include_once 'phar://install-pear-nozlib.phar/System.php';
+        $cdir = System::mktemp(array('-d', 'pear'));
+        if (PEAR::isError($cdir)) {
+            $ui->outputData("[PEAR] cannot make new temporary directory: " . $cdir);
+            die(1);
+        }
+        $oldcachedir = $config->get('cache_dir');
+        $config->set('cache_dir', $cdir);
+    }
+}
+if (!empty($php_bin)) {
+    $config->set('php_bin', $php_bin);
+}
+/* Print PEAR Conf (useful for debuging do NOT REMOVE) */
+if ($debug) {
+    sort($keys);
+    foreach ($keys as $key) {
+        echo $key . '    ' .
+            $config->getPrompt($key) . ": " . $config->get($key, null, 'default') . "\n";
+    }
+    if ($debug == 2) { // extreme debugging
+        exit;
+    }
+}
+// end print
+
+$php_dir = $config->get('php_dir');
+$options = array();
+$options['upgrade'] = true;
+$install_root = getenv('INSTALL_ROOT');
+if (!empty($install_root)) {
+    $options['packagingroot'] = $install_root;
+    $reg = &new PEAR_Registry($options['packagingroot']);
+} else {
+    $reg = $config->getRegistry('default');
+}
+
+$ui = PEAR_Frontend::singleton('PEAR_Frontend_CLI');
+if (PEAR::isError($ui)) {
+    die($ui->getMessage());
+}
+$installer = new PEAR_Installer($ui);
+$pkg = new PEAR_PackageFile($config, $debug);
+
+foreach ($install_files as $package => $instfile) {
+    $info = $pkg->fromAnyFile($instfile, PEAR_VALIDATE_INSTALLING);
+    if (PEAR::isError($info)) {
+        if (is_array($info->getUserInfo())) {
+            foreach ($info->getUserInfo() as $err) {
+                $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err['message']));
+            }
+        }
+        $ui->outputData(sprintf("[PEAR] %s: %s", $package, $info->getMessage()));
+        continue;
+    }
+    $new_ver = $info->getVersion();
+    $downloaderpackage = new PEAR_Downloader_Package($installer);
+    $err = $downloaderpackage->initialize($instfile);
+    if (PEAR::isError($err)) {
+        $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+        continue;
+    }
+    if ($reg->packageExists($package)) {
+        $old_ver = $reg->packageInfo($package, 'version');
+        if (version_compare($new_ver, $old_ver, 'gt')) {
+            $installer->setOptions($options);
+            $dp = array($downloaderpackage);
+            $installer->setDownloadedPackages($dp);
+            $err = $installer->install($downloaderpackage, $options);
+            if (PEAR::isError($err)) {
+                $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+                continue;
+            }
+            $ui->outputData(sprintf("[PEAR] %-15s- upgraded:  %s", $package, $new_ver));
+        } else {
+            if ($force) {
+                $options['force'] = true;
+                $installer->setOptions($options);
+                $dp = array($downloaderpackage);
+                $installer->setDownloadedPackages($dp);
+                $err = $installer->install($downloaderpackage, $options);
+                if (PEAR::isError($err)) {
+                    $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+                    continue;
+                }
+                $ui->outputData(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
+            } else {
+                $ui->outputData(sprintf("[PEAR] %-15s- already installed: %s", $package, $old_ver));
+            }
+        }
+    } else {
+        $options['nodeps'] = true;
+        $installer->setOptions($options);
+        $dp = array($downloaderpackage);
+        $installer->setDownloadedPackages($dp);
+        $err = $installer->install($downloaderpackage, $options);
+        if (PEAR::isError($err)) {
+            $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+            continue;
+        }
+        $ui->outputData(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
+    }
+    if ($package == 'PEAR') {
+        if (is_file($ufile = $config->getConfFile('user'))) {
+            $ui->outputData('Warning! a PEAR user config file already exists from ' .
+                            'a previous PEAR installation at ' .
+                            "'$ufile'. You may probably want to remove it.");
+        }
+        $config->set('verbose', 1, 'default');
+        if (isset($oldcachedir)) {
+            $config->set('cache_dir', $oldcachedir);
+        }
+        $data = array();
+        foreach ($config->getKeys() as $key) {
+            $data[$key] = $config->get($key);
+        }
+        $cnf_file = $config->getConfFile('system');
+        if (!empty($install_root)) {
+            $cnf_file = $install_root . DIRECTORY_SEPARATOR . $cnf_file;
+        }
+        $config->writeConfigFile($cnf_file, 'system', $data);
+        $ui->outputData('Wrote PEAR system config file at: ' . $cnf_file);
+        $ui->outputData('You may want to add: ' . $config->get('php_dir') . ' to your php.ini include_path');
+    }
+}
+?>
 <?php
 /**
  * The OS_Guess class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Gregory Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Guess.php,v 1.26 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Guess.php,v 1.29 2009/04/09 22:24:12 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since PEAR 0.1
  */
@@ -6579,7 +6828,7 @@ foreach ($install_files as $package => $instfile) {
 // Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug  5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC  Power Macintosh
 //
 // Mac OS X early versions
-// 
+//
 
 // }}}
 
@@ -6596,9 +6845,9 @@ foreach ($install_files as $package => $instfile) {
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Gregory Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -6633,16 +6882,16 @@ class OS_Guess
         if ($uname === null) {
             $uname = php_uname();
         }
-        $parts = split('[[:space:]]+', trim($uname));
+        $parts = preg_split('/\s+/', trim($uname));
         $n = count($parts);
 
-        $release = $machine = $cpu = '';
-        $sysname = $parts[0];
+        $release  = $machine = $cpu = '';
+        $sysname  = $parts[0];
         $nodename = $parts[1];
-        $cpu = $parts[$n-1];
+        $cpu      = $parts[$n-1];
         $extra = '';
         if ($cpu == 'unknown') {
-            $cpu = $parts[$n-2];
+            $cpu = $parts[$n - 2];
         }
 
         switch ($sysname) {
@@ -6663,7 +6912,7 @@ class OS_Guess
             case 'Linux' :
                 $extra = $this->_detectGlibcVersion();
                 // use only the first two digits from the kernel version
-                $release = ereg_replace('^([[:digit:]]+\.[[:digit:]]+).*', '\1', $parts[2]);
+                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
                 break;
             case 'Mac' :
                 $sysname = 'darwin';
@@ -6681,14 +6930,13 @@ class OS_Guess
                         $cpu = 'powerpc';
                     }
                 }
-                $release = ereg_replace('^([[:digit:]]+\.[[:digit:]]+).*', '\1', $parts[2]);
+                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
                 break;
             default:
-                $release = ereg_replace('-.*', '', $parts[2]);
+                $release = preg_replace('/-.*/', '', $parts[2]);
                 break;
         }
 
-
         if (isset($sysmap[$sysname])) {
             $sysname = $sysmap[$sysname];
         } else {
@@ -6728,6 +6976,7 @@ class OS_Guess
                         }
                         continue;
                     }
+
                     if (strpos($line, '__GLIBC_MINOR__'))  {
                         // got the minor version number
                         // #define __GLIBC_MINOR__ version
@@ -6745,6 +6994,7 @@ class OS_Guess
                 }
                 return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ;
             } // no cpp
+
             $tmpfile = System::mktemp("glibctest");
             $fp = fopen($tmpfile, "w");
             fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
@@ -6754,6 +7004,7 @@ class OS_Guess
                 if ($line{0} == '#' || trim($line) == '') {
                     continue;
                 }
+
                 if (list($major, $minor) = explode(' ', trim($line))) {
                     break;
                 }
@@ -6761,15 +7012,18 @@ class OS_Guess
             pclose($cpp);
             unlink($tmpfile);
         } // features.h
+
         if (!($major && $minor) && @is_link('/lib/libc.so.6')) {
             // Let's try reading the libc.so.6 symlink
-            if (ereg('^libc-(.*)\.so$', basename(readlink('/lib/libc.so.6')), $matches)) {
+            if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) {
                 list($major, $minor) = explode('.', $matches[1]);
             }
         }
+
         if (!($major && $minor)) {
             return $glibc = '';
         }
+
         return $glibc = "glibc{$major}.{$minor}";
     }
 
@@ -6808,11 +7062,7 @@ class OS_Guess
 
     function matchSignature($match)
     {
-        if (is_array($match)) {
-            $fragments = $match;
-        } else {
-            $fragments = explode('-', $match);
-        }
+        $fragments = is_array($match) ? $match : explode('-', $match);
         $n = count($fragments);
         $matches = 0;
         if ($n > 0) {
@@ -6833,8 +7083,8 @@ class OS_Guess
     function _matchFragment($fragment, $value)
     {
         if (strcspn($fragment, '*?') < strlen($fragment)) {
-            $reg = '^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '$';
-            return eregi($reg, $value);
+            $reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '\\z/';
+            return preg_match($reg, $value);
         }
         return ($fragment == '*' || !strcasecmp($fragment, $value));
     }
@@ -6845,10 +7095,8 @@ class OS_Guess
  * indent-tabs-mode: nil
  * c-basic-offset: 4
  * End:
- */
-?>
-package.xml                                                                                         100644    1750    1750       104543 11014312742   6457                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.7.2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
+ */package2.xml                                                                                        100664     764     764       123245      100664   6362                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.8.0" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
  <name>PEAR</name>
  <channel>pear.php.net</channel>
  <summary>PEAR Base System</summary>
@@ -6863,7 +7111,6 @@ package.xml                                                                     
  * the System class for quick handling of common operations
    with files and directories
  * the PEAR base class
-
   Features in a nutshell:
   * full support for channels
   * pre-download dependency validation
@@ -6881,7 +7128,7 @@ package.xml                                                                     
   <name>Greg Beaver</name>
   <user>cellog</user>
   <email>cellog at php.net</email>
-  <active>yes</active>
+  <active>no</active>
  </lead>
  <lead>
   <name>Pierre-Alain Joye</name>
@@ -6901,12 +7148,12 @@ package.xml                                                                     
   <email>cox at idecnet.com</email>
   <active>no</active>
  </lead>
- <developer>
+ <lead>
   <name>Helgi Thormar</name>
   <user>dufuz</user>
   <email>dufuz at php.net</email>
   <active>yes</active>
- </developer>
+ </lead>
  <developer>
   <name>Tias Guns</name>
   <user>tias</user>
@@ -6931,267 +7178,325 @@ package.xml                                                                     
   <email>mj at php.net</email>
   <active>no</active>
  </helper>
- <date>2008-05-19</date>
- <time>09:59:46</time>
+ <date>2009-04-10</date>
+ <time>21:01:25</time>
  <version>
-  <release>1.7.2</release>
-  <api>1.7.0</api>
+  <release>1.8.0</release>
+  <api>1.8.0</api>
  </version>
  <stability>
   <release>stable</release>
   <api>stable</api>
  </stability>
- <license uri="http://www.php.net/license">PHP License</license>
- <notes>* Implement Request #13375: install-pear.php should have option to set cfg_dir [timj]
-* Fix Bug #12945 PEAR_Registry::setConfig() does not set install path [cweiske/cellog]
-* Fix Bug #12959 PEAR should give warning when doing &quot;special&quot; handling with cfg role [cellog]
-* Fix Bug #12960 role=cfg should automatically replace file if it has not been modified [cellog]
-* Fix Bug #13031 PEAR fails to authenticate when doing upgrade-all on non-default channel [timj]
-* Fix Bug #13033 Signature to PEAR_REST_XX::listAll() changes between REST1.0 and 1.1 [timj]
-* Fix Bug #13059 Invalid release type causes Undefined Property notice [gwynne, dufuz]
-* Fix Bug #13123 pear config-set works, but pecl config-set does not [cellog]
-* Fix Bug #13323 Deprecated errors in many places [hubbitus]
-* Fix Bug #13315 Upgrading of package fails if more than one file of role=cfg has changed [timj]
-* Fix Bug #13386 &quot;pear install --register-only&quot; fails with cfg role [cellog]
-* Fix Bug #13434 Breaks on HPUX - &quot;find () -ls&quot; doesn&apos;t work [cellog]
-* Fix Bug #13484 pear package brings up warnings [dufuz]
-* Fix Bug #13485 pear package-validate brings up ASCII issues [dufuz]
-* Fix Bug #13508 undefined index errors when installing a remote bundle [cellog/tswicegood]
-* Fix Bug #13525 pear package-validate is not showing warnings even if there are [dufuz]
-* Fix Bug #13559 installing package fails via proxy to virtual-hosted server. [hirose]
-* Fix Bug #13691 Pear doesn&apos;t remove old directories on upgrade [cellog]
-* Fix Bug #13870 Notice uninstalling or using bundles [cellog]
-* Fix Bug #13883 file permissions not preserved on packaging [cellog]</notes>
+ <license uri="http://opensource.org/licenses/bsd-license.php New BSD License">New BSD License</license>
+ <notes>
+Changes since RC1:
+  * Fix Bug #14792: Bad md5sum for files with replaced content [dufuz]
+  * Fix Bug #16057:-r is limited to 4 directories in depth [dufuz]
+  * Fix Bug #16077: PEAR5::getStaticProperty does not return a reference to the property [dufuz]
+
+  Remove custom XML_Util class in favor of using upstream XML_Util package as dependency
+
+RC1 Release Notes:
+  * Fix Bug #14331: pear cvstag only works from inside the package directory [dufuz]
+  * Fix Bug #16045: E_Notice: Undefined index: channel in PEAR/DependencyDB.php [dufuz]
+
+  * Implemented Request #11230: better error message when mirror not in channel.xml file [dufuz]
+  * Implemented Request #13150: Add support for following HTTP 302 redirects [dufuz]
+
+Alpha1 Release Notes:
+  * Implement Request #10373: if pref_state=stable and installed package=beta, allow up to latest beta version [dufuz]
+  * Implement Request #10581: login / logout should map to channel-login / channel-logout [dufuz]
+  * Implement Request #10825: Only display the &quot;invalid or missing package file&quot;-error if it makes sense [dufuz]
+  * Implement Request #11170: script to generate Command/[command].xml [dufuz]
+  * Implement Request #11176: improve channel ... has updated its protocols message [dufuz]
+  * Implement Request #12706: pear list -a hard to read [dufuz]
+  * Implement Request #11353: upgrade-all and upgrade commands to upgrade within the same stability level [dufuz]
+  * Implement Request #13015: Add https discovery for channel.xml [dufuz / initial patch by Martin Roos]
+  * Implement Request #13927: install-pear.php should have option to set www_dir [timj]
+  * Implement Request #14324: Make the pear install command behave similar to apt-get [dufuz]
+  * Implement Request #14325: make pear upgrade with no params behave like pear upgrade-all [dufuz]
+    - upgrade-all can be considered deprecated in favor of calling upgrade with no parameters to replicate
+      better what other package managers are doing. upgrade-all will still work as intended.
+  * Implement Request #14504: add a channel parameter support to the upgrade function [dufuz]
+    - Options -c ezc and --channel=ezc got added to upgrade and upgrade-all to allow for
+      channel specific upgrades
+  * Implement Request #14556: install-pear-nozlib.phar should get download_dir config and other options [cweiske]
+  * Implement Request #15566: Add doc.php.net as a default channel [dufuz / saltybeagle]
+
+  * Fix PHP Bug #43857: --program-suffix not always reflected everywhere [cellog]
+  * Fix PHP Bug #47323: strotime warnings in make install [dufuz]
+
+  * Fix Bug #13908: pear info command and maintainers inactive not mentioned [dufuz]
+  * Fix Bug #13926: install-pear.php does not set cfg_dir if -d option set with no -c option [timj]
+  * Fix Bug #13943: tests fail when php.exe path contains spaces [dufuz / jorrit]
+  * Fix Bug #13953: config-set/config-show with channel alias fail [cellog]
+  * Fix Bug #13958: When a phpt tests exit() or die() xdebug coverage is not generated, patch by izi (David Jean Louis) [izi / dufuz]
+  * Fix Bug #14041: Unpredictable unit test processing sequence [dufuz]
+  * Fix Bug #14140: Strict warning not suppressed in the shutdown function [dufuz]
+  * Fix Bug #14210: pear list -ia brings warnings [dufuz]
+  * Fix Bug #14274: PEAR packager mangles package.xml encoding, then complains about it [dufuz]
+  * Fix Bug #14287: cannot upgrade from stable to beta via -beta when config is set to stable [dufuz]
+  * Fix Bug #14300: Package files themselves can not be served over https [dufuz / initial patch by Martin Roos]
+  * Fix Bug #14437: openbasedir warning when loading config [dufuz]
+  * Fix Bug #14558: PackageFile.php creates tmp directory outside configured temp_dir [cweiske]
+  * Fix Bug #14947: downloadHttp() is missing Host part of the HTTP Request when using Proxy [ifeghali]
+  * Fix Bug #14977: PEAR/Frontend.php doesn&apos;t require_once PEAR.php [dufuz]
+  * Fix Bug #15750: Unreachable code in PEAR_Downloader [dufuz]
+  * Fix Bug #15979: Package files incorrectly removed when splitting a package into multiple pkgs [dufuz]
+  * Fix Bug #15914: pear upgrade installs different version if desired version not found [dufuz]
+
+  NOTE!
+  Functions that have been deprecated for 3+ years in PEAR_Common, please take a moment
+  to migrate over to one of the alternatives that have ben provided:
+  * PEAR_Common-&gt;downloadHttp (use PEAR_Downloader-&gt;downloadHttp instead)
+  * PEAR_Common-&gt;infoFromTgzFile (use PEAR_PackageFile-&gt;fromTgzFile instead)
+  * PEAR_Common-&gt;infoFromDescriptionFile (use PEAR_PackageFile-&gt;fromPackageFile instead)
+  * PEAR_Common-&gt;infoFromString (use PEAR_PackageFile-&gt;fromXmlstring instead)
+  * PEAR_Common-&gt;infoFromArray (use PEAR_PackageFile-&gt;fromAnyFile instead)
+  * PEAR_Common-&gt;xmlFromInfo (use a PEAR_PackageFile_v* object&apos;s generator instead)
+  * PEAR_Common-&gt;validatePackageInfo (use the validation of PEAR_PackageFile objects)
+  * PEAR_Common-&gt;analyzeSourceCode (use a PEAR_PackageFile_v* object instead)
+  * PEAR_Common-&gt;detectDependencies (use PEAR_Downloader_Package-&gt;detectDependencies instead)
+  * PEAR_Common-&gt;buildProvidesArray (use PEAR_PackageFile_v1-&gt;_buildProvidesArray or
+    PEAR_PackageFile_v2_Validator-&gt;_buildProvidesArray)
+
+  PHP 4.4 and 5.1.6 are now the minimum PHP requirements, for brave souls
+  pear upgrade -f PEAR will allow people with lower versions
+  to upgrade to this release but no guarantees will be made that it will work properly.
+
+  Support for XML RPC channels has been dropped - The only ones that used it
+  (pear.php.net and pecl.php.net) have used the REST interface for years now.
+  SOAP support also removed as it was only proof of concept.
+
+  Move codebase from the PHP License to New BSD 2 clause license
+ </notes>
  <contents>
   <dir name="/">
-   <file md5sum="4fa6b540f217ae9dbab8975f8b93d200" name="OS/Guess.php" role="php">
+   <file md5sum="c5b7cabb1fd56e54d51de624b10e7e0a" name="OS/Guess.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="2da630f82eca1531a57fe04696e26a06" name="PEAR/ChannelFile/Parser.php" role="php">
+   <file md5sum="58e6a076eaedbcfa157080c122bb0f6b" name="PEAR/ChannelFile/Parser.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="381496e0186e16d613ddb01564fca4a0" name="PEAR/Command/Auth.xml" role="php" />
-   <file md5sum="2bd9a76a6932fe9fb4fe80d06fd099d4" name="PEAR/Command/Auth.php" role="php">
+   <file md5sum="8fd87e64002e11fd86eb2f3fbfee6599" name="PEAR/Command/Auth.xml" role="php" />
+   <file md5sum="cf9d055aabc38596be6729d63919f0a1" name="PEAR/Command/Auth.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="73602fd7f051eaf8d37452d0e3063bdb" name="PEAR/Command/Build.xml" role="php" />
-   <file md5sum="2af3d1912b4b6aef6bf17db5e01f257e" name="PEAR/Command/Build.php" role="php">
+   <file md5sum="483dd90056453bc93314472a66388057" name="PEAR/Command/Build.xml" role="php" />
+   <file md5sum="e01afa618052f88b2ffe0c037c7892d2" name="PEAR/Command/Build.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="5dfb7898501c43ab655c5f9b7176ea20" name="PEAR/Command/Channels.xml" role="php" />
-   <file md5sum="5876be616c6e401fd911fb6f5c50b102" name="PEAR/Command/Channels.php" role="php">
+   <file md5sum="dec008667dd7c3cb3740b5aa7d3ac619" name="PEAR/Command/Channels.xml" role="php" />
+   <file md5sum="d32278c6471cc9276890f72645d3993c" name="PEAR/Command/Channels.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="22079bbfa5f8ac010683cb0cd84af21f" name="PEAR/Command/Common.php" role="php">
+   <file md5sum="86b458158392cdba2f2c62131a238a6b" name="PEAR/Command/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="91f189cb9423b5e87ee0abc5ea1a2be3" name="PEAR/Command/Config.xml" role="php" />
-   <file md5sum="8d36af1a687b1648a474008e6e2b0239" name="PEAR/Command/Config.php" role="php">
+   <file md5sum="c1ff72162e26064888987e77ff2fb851" name="PEAR/Command/Config.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="e0f361c6ebda100653e550a762a66a06" name="PEAR/Command/Install.xml" role="php" />
-   <file md5sum="b1954beca05df6a53595112ca12f2cad" name="PEAR/Command/Install.php" role="php">
+   <file md5sum="54c542190627909c2ccabdc844dbd5e9" name="PEAR/Command/Install.xml" role="php" />
+   <file md5sum="8b564d859a10dc4c881d8275793305d5" name="PEAR/Command/Install.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="5cb62a04c0a268f4edd64a49a3895c92" name="PEAR/Command/Mirror.xml" role="php" />
-   <file md5sum="b1c6d624fa98d7f95948e1bca76c46b5" name="PEAR/Command/Mirror.php" role="php">
+   <file md5sum="6a05eff162094574269851bf8d2eb86e" name="PEAR/Command/Mirror.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="bbf88f26cd10b1caa76d5eec474f093f" name="PEAR/Command/Package.xml" role="php" />
-   <file md5sum="cb6f4b8cf4f297200d1ddb35b768d65f" name="PEAR/Command/Package.php" role="php">
+   <file md5sum="fedae0702f3bdc32c37a9912dc8fe171" name="PEAR/Command/Package.xml" role="php" />
+   <file md5sum="db75e44ce6d61a2d84271cefc847ee67" name="PEAR/Command/Package.php" role="php">
     <tasks:replace from="@DATA-DIR@" to="data_dir" type="pear-config" />
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="29c0947f423695818f90759e65376e5c" name="PEAR/Command/Pickle.xml" role="php" />
-   <file md5sum="b7777e69e2b771a9f691fb4fade4686a" name="PEAR/Command/Pickle.php" role="php">
+   <file md5sum="28dc842ea725d8787b9f9c3dbca5aa22" name="PEAR/Command/Pickle.xml" role="php" />
+   <file md5sum="a56f511146a5aceded33637631c17b74" name="PEAR/Command/Pickle.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="49b046cfc14747f0365e02e9c3f0e6dc" name="PEAR/Command/Registry.xml" role="php" />
-   <file md5sum="0e6a7070d8b3bfe5160255b5f5352425" name="PEAR/Command/Registry.php" role="php">
+   <file md5sum="c28030095775bcf060571ffceefe17da" name="PEAR/Command/Registry.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="05729e322af29b0ddcdd85559e44cd41" name="PEAR/Command/Remote.xml" role="php" />
-   <file md5sum="61cf1731830f4adbb51335a890570b8a" name="PEAR/Command/Remote.php" role="php">
+   <file md5sum="29c02e823879b4e3e291f6b36fb339f1" name="PEAR/Command/Remote.xml" role="php" />
+   <file md5sum="170e88fb6930a13c348ece2c2c915ee8" name="PEAR/Command/Remote.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="118af6fbf9c37e90957f0bb9d5cf9d82" name="PEAR/Command/Test.xml" role="php" />
-   <file md5sum="9bd7498ec025144d036a1ca34b0f4365" name="PEAR/Command/Test.php" role="php">
+   <file md5sum="ff80fba20e3637a1d53a68b9fa017197" name="PEAR/Command/Test.xml" role="php" />
+   <file md5sum="a2684aabe6246adb0e4483f860d5e11a" name="PEAR/Command/Test.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="4ee3dab326b3f108574d001ca74f1620" name="PEAR/Downloader/Package.php" role="php">
+   <file md5sum="d2ff9bb14e39abf0ed122b806a086a6d" name="PEAR/Downloader/Package.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="4d43b606e210a61e003fcea2a46d0fd4" name="PEAR/Frontend/CLI.php" role="php">
+   <file md5sum="ad5d4d946dfd6b990007450e30b3dfb1" name="PEAR/Frontend/CLI.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="82094070511d6369af82529bb8194c8b" name="PEAR/Installer/Role/Common.php" role="php">
+   <file md5sum="3c882c3ef0b2c42516ffecefcff26f9e" name="PEAR/Installer/Role/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="d8c62e6275e3aaa7784290912406092c" name="PEAR/Installer/Role/Cfg.xml" role="php" />
-   <file md5sum="3fb2045c4328ba0f0791e6c46aabce8a" name="PEAR/Installer/Role/Cfg.php" role="php">
+   <file md5sum="97524d269a5289ca703b906f30906942" name="PEAR/Installer/Role/Cfg.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="89a4a2a286e842d45a98974f40a0565c" name="PEAR/Installer/Role/Data.xml" role="php" />
-   <file md5sum="d505eea75d38763c94f92e639580201a" name="PEAR/Installer/Role/Data.php" role="php">
+   <file md5sum="de4de130aa45ebbca82432bdc0b5e929" name="PEAR/Installer/Role/Data.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="b1ce0fe105251c3b75209d6518ee69ac" name="PEAR/Installer/Role/Doc.xml" role="php" />
-   <file md5sum="d381e479248b847e1fba152dc95f10d4" name="PEAR/Installer/Role/Doc.php" role="php">
+   <file md5sum="747444f4c829d356d812eaf7c9c0b099" name="PEAR/Installer/Role/Doc.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="af71c0ad42d16a323afe24a4f884ef15" name="PEAR/Installer/Role/Ext.xml" role="php" />
-   <file md5sum="205b68b09e62134f965c16bdac37bcc7" name="PEAR/Installer/Role/Ext.php" role="php">
+   <file md5sum="14cedff64246d06ac73597cc7008e9fe" name="PEAR/Installer/Role/Ext.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="ef88f0321d3e481c2130c95122cf76d8" name="PEAR/Installer/Role/Php.xml" role="php" />
-   <file md5sum="284067a202f05fc1b62981d7c0b10419" name="PEAR/Installer/Role/Php.php" role="php">
+   <file md5sum="3ffee54fd27e11c57805de49ccb9599d" name="PEAR/Installer/Role/Php.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="746461dc3b48af6d24094cb0211608f2" name="PEAR/Installer/Role/Script.xml" role="php" />
-   <file md5sum="c879348f293100cc0c78220c4de6d711" name="PEAR/Installer/Role/Script.php" role="php">
+   <file md5sum="f4c2288d22e16db5222e9423ac27ba3f" name="PEAR/Installer/Role/Script.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="e147d63f168ea156fc2be38caaa63804" name="PEAR/Installer/Role/Src.xml" role="php" />
-   <file md5sum="e0200455cde8eba003dff160b3657c43" name="PEAR/Installer/Role/Src.php" role="php">
+   <file md5sum="999bc34ddef1d3cfc1d03ac64a45d680" name="PEAR/Installer/Role/Src.xml" role="php" />
+   <file md5sum="0d1ddded65dbd723ac268c76b5b52a18" name="PEAR/Installer/Role/Src.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="a24b596ec987aa5688fc19e8ed4e97ea" name="PEAR/Installer/Role/Test.xml" role="php" />
-   <file md5sum="47f59482d09100bc9ad7e137785855e7" name="PEAR/Installer/Role/Test.php" role="php">
+   <file md5sum="9a955fcc40e6ff3187604dc71af21d2a" name="PEAR/Installer/Role/Test.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="7641e71c5785bb33a4261ebe25ed0fd7" name="PEAR/Installer/Role/Www.xml" role="php" />
-   <file md5sum="0076ccbaa7a6208559df11aa3eb798b5" name="PEAR/Installer/Role/Www.php" role="php">
+   <file md5sum="26f696fe4e32a1a4d95441ba8a9ec66e" name="PEAR/Installer/Role/Www.xml" role="php" />
+   <file md5sum="1776b898ec03d9212a0b9b85a5841dcf" name="PEAR/Installer/Role/Www.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="273540b734ed43343649c416a4f52a99" name="PEAR/Installer/Role.php" role="php">
+   <file md5sum="935f9dc1ad736be6f92889414b477a23" name="PEAR/Installer/Role.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="9ff6a4888868c72abf2433f8dfc40be6" name="PEAR/PackageFile/Generator/v1.php" role="php">
+   <file md5sum="59655b9d4816cc1e94a661764b49e229" name="PEAR/PackageFile/Generator/v1.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="b23f0359cd3306c87bd027eefff38892" name="PEAR/PackageFile/Generator/v2.php" role="php">
+   <file md5sum="2a25244b486984ef074a5023865969b9" name="PEAR/PackageFile/Generator/v2.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="e439d694e4e2c3b4146ee308a2758f5a" name="PEAR/PackageFile/Parser/v1.php" role="php">
+   <file md5sum="50058789604936483b9e82c5990f5751" name="PEAR/PackageFile/Parser/v1.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="9fdba40240a1a72820780b5d6184391b" name="PEAR/PackageFile/Parser/v2.php" role="php">
+   <file md5sum="eb78e5f34b4e0ae993fe2f43830ca367" name="PEAR/PackageFile/Parser/v2.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="c56d70ed9adb2071e530142ed6d296ab" name="PEAR/PackageFile/v2/rw.php" role="php">
+   <file md5sum="3863e2343baa5cfab1c4c1f386deb9ba" name="PEAR/PackageFile/v2/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="85530152fe2098b549ef8e9cbc727f8c" name="PEAR/PackageFile/v2/Validator.php" role="php">
+   <file md5sum="105d1ef053e38954ef32b056fe057101" name="PEAR/PackageFile/v2/Validator.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="63a79337dfe25c16aee1ce9b136f7044" name="PEAR/PackageFile/v1.php" role="php">
+   <file md5sum="d1001b5d6336ab4e218c72624cf591d0" name="PEAR/PackageFile/v1.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="1fdb0bd1548aafec891aa6d9580ea59b" name="PEAR/PackageFile/v2.php" role="php">
+   <file md5sum="9170859737fc3c16a0a380acb036c871" name="PEAR/PackageFile/v2.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="3284fc0ec89030c9d841200beecbf4fa" name="PEAR/REST/10.php" role="php">
+   <file md5sum="71161e2ad26859b65ade1121df4e581c" name="PEAR/REST/10.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="71d7072f1cdf9f2065205f4585a2ecc6" name="PEAR/REST/11.php" role="php">
+   <file md5sum="226d07e4adaf0cffa766a61a60674614" name="PEAR/REST/11.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="619b085112e10287e66197cc4fc6acaa" name="PEAR/REST/13.php" role="php">
+   <file md5sum="3cd456e38ecc49a3d2494ed3d2aa10af" name="PEAR/REST/13.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="9339412e86586c299727121e08adefba" name="PEAR/Task/Postinstallscript/rw.php" role="php">
+   <file md5sum="4205d96470d330b79785470092da51b7" name="PEAR/Task/Postinstallscript/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="9fe592cd22a83915d796a11af6331606" name="PEAR/Task/Replace/rw.php" role="php">
+   <file md5sum="5c493ff8705bcd75745679cf946ccce3" name="PEAR/Task/Replace/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="3c7a6eb3a4e207f665f06093cb8bcdf9" name="PEAR/Task/Unixeol/rw.php" role="php">
+   <file md5sum="47f9acf9063cf8709d34adc9fd506e22" name="PEAR/Task/Unixeol/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="1a390d0f5b489d7f61f9e6682203bcc3" name="PEAR/Task/Windowseol/rw.php" role="php">
+   <file md5sum="36d60522e57f34da581af0595dc02df3" name="PEAR/Task/Windowseol/rw.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="b5a728f8d59013ab6d5077f27b517a96" name="PEAR/Task/Common.php" role="php">
+   <file md5sum="3e8d8a967da5a7571331819a2b340150" name="PEAR/Task/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="b9e5cc9fed2ebad6d2011ee6a4d592bf" name="PEAR/Task/Postinstallscript.php" role="php">
+   <file md5sum="542744e38c5f49462047c6b0f21b27be" name="PEAR/Task/Postinstallscript.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="5a3d680bb9c327530f696d830b8b605b" name="PEAR/Task/Replace.php" role="php">
+   <file md5sum="fe0e5e543a72531908f9feedeb904384" name="PEAR/Task/Replace.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="f9dc0e5d8d8957ea207d9da8e37dcb26" name="PEAR/Task/Unixeol.php" role="php">
+   <file md5sum="1e4ab461f8c59644fba160eff3729f42" name="PEAR/Task/Unixeol.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="2ce493f5d43d7df681a1b45034060904" name="PEAR/Task/Windowseol.php" role="php">
+   <file md5sum="20ae133e8f43ff99c2ab25f12dbd52a6" name="PEAR/Task/Windowseol.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="2ae06a82c9f955f68c31fdc11bf217c5" name="PEAR/Validator/PECL.php" role="php">
+   <file md5sum="70389318e500120b2fdd6df9cf9eb9e2" name="PEAR/Validator/PECL.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="9cd95af3af7654b473842723cc7c1bec" name="PEAR/Autoloader.php" role="php">
+   <file md5sum="8dff2754449b92d30700617b0d95c5b3" name="PEAR/Autoloader.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="062dc2dba3349a8f2cadb9e81320cfdb" name="PEAR/Builder.php" role="php">
+   <file md5sum="6fedb21642af9a4a5dac405b8f335874" name="PEAR/Builder.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="54638616d9fae90609ef027430b86656" name="PEAR/ChannelFile.php" role="php">
+   <file md5sum="c0ca2d8695b28855002f8d2675a88519" name="PEAR/ChannelFile.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="7147a5789e7f15c85f3b23d4ffb6b236" name="PEAR/Command.php" role="php">
+   <file md5sum="7b0a88899e6ff37694546a9ff32ed6f8" name="PEAR/Command.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="a7ec0f20c252a9cb436968bc9f5635da" name="PEAR/Common.php" role="php">
+   <file md5sum="e76884b29acc9273c3cb13c55734ba9b" name="PEAR/Common.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="d18ae493cc76570cecff6d6dddc24d3b" name="PEAR/Config.php" role="php">
+   <file md5sum="09ede5947b2145f79074c6df4ecdbe5a" name="PEAR/Config.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="bcfff6330848fa83118e1ff11b3d7ba0" name="PEAR/Dependency.php" role="php" />
-   <file md5sum="f48a05aee6a88319eb2b45a9a649b0f0" name="PEAR/DependencyDB.php" role="php">
+   <file md5sum="3b0923bb6eb52049b57b1a1553a93cff" name="PEAR/DependencyDB.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="893b4e4250ca595dc41c596a60e36de2" name="PEAR/Dependency2.php" role="php">
+   <file md5sum="20ba6fb65adce82c8ad000f2d622f69c" name="PEAR/Dependency2.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="c631755222fd7ae155cce369ae46f929" name="PEAR/Downloader.php" role="php">
+   <file md5sum="1029b9ad5560624b9d4f17838d02983f" name="PEAR/Downloader.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="cf883c744c4be529a3a75b235608eaa4" name="PEAR/ErrorStack.php" role="php">
+   <file md5sum="278eefd89ba1d74a62c4436dda6dfca8" name="PEAR/ErrorStack.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="60040e0928e18981a9ccb036e54db840" name="PEAR/Exception.php" role="php">
+   <file md5sum="abf45593961edd5bb1f92d70e4623997" name="PEAR/Exception.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="e0e4cbcec4a972fbad779d0f9d323120" name="PEAR/FixPHP5PEARWarnings.php" role="php" />
-   <file md5sum="d26049bf4358619459eac6bd08e0c61e" name="PEAR/Frontend.php" role="php">
+   <file md5sum="68f488516741f6f8a3af57c16678e0fd" name="PEAR/Frontend.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="828e42237cd8b0e04a2cf0a5b13099f2" name="PEAR/Installer.php" role="php">
+   <file md5sum="4e03c62b818773511b1cc25ef4061bb9" name="PEAR/Installer.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="4546fbff936d36496c30227f20d5b6a7" name="PEAR/PackageFile.php" role="php">
+   <file md5sum="8078d5d41ed18a6fe6eefe9abe68e5b0" name="PEAR/PackageFile.php" role="php">
     <tasks:replace from="@PEAR-VER@" to="version" type="package-info" />
    </file>
-   <file md5sum="c1708307d9a6037f60ef4cf130b8c1d9" name="PEAR/Packager.php" role="php">
+   <file md5sum="7448e3df885514343512094b946f475b" name="PEAR/Packager.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="eb579ef0fbff7c72a2f272a90550337e" name="PEAR/Registry.php" role="php">
+   <file md5sum="45503b28720431d9ad8d64c36bb87bc1" name="PEAR/Registry.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="ac90346df7467a1b43b9392069a87750" name="PEAR/Remote.php" role="php">
+   <file md5sum="63a2caea137e35fadd6d9085b6894d94" name="PEAR/REST.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="b8c5c610bcf441261b6101c6ed176e96" name="PEAR/REST.php" role="php">
+   <file md5sum="5c2b6d2791b94bf8d98cff37dc6f1bfc" name="PEAR/RunTest.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="3345c49c04db53a8424a25985bd69633" name="PEAR/RunTest.php" role="php">
+   <file md5sum="4235e4ed6a3be97da6eff9c069e93516" name="PEAR/Validate.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
-   <file md5sum="2f97edd3496adace0a0e5c9f1b70ae76" name="PEAR/Validate.php" role="php">
-    <tasks:replace from="@package_version@" to="version" type="package-info" />
-   </file>
-   <file md5sum="dab39738e174b584eebc71bd3ece7a91" name="PEAR/XMLParser.php" role="php">
+   <file md5sum="f3e6145dd13e447ea0d8e9a0e3f7812b" name="PEAR/XMLParser.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file baseinstalldir="/" md5sum="bd65b087b7707463525e9f0092337793" name="scripts/pear.bat" role="script">
@@ -7233,25 +7538,26 @@ package.xml                                                                     
     <tasks:replace from="@include_path@" to="php_dir" type="pear-config" />
     <tasks:unixeol />
    </file>
-   <file baseinstalldir="/" md5sum="a398d2c6875a38dc38aa399f3fa12e49" name="scripts/pearcmd.php" role="php">
+   <file baseinstalldir="/" md5sum="d52e189171fbd1b50aeb7fd9ae79f3f5" name="scripts/pearcmd.php" role="php">
     <tasks:replace from="@php_bin@" to="php_bin" type="pear-config" />
     <tasks:replace from="@php_dir@" to="php_dir" type="pear-config" />
     <tasks:replace from="@pear_version@" to="version" type="package-info" />
     <tasks:replace from="@include_path@" to="php_dir" type="pear-config" />
    </file>
-   <file baseinstalldir="/" md5sum="6356b5beefa80d0bbfd234d222873c7d" name="scripts/peclcmd.php" role="php">
+   <file baseinstalldir="/" md5sum="c7bd82e5f20e548980aa1f0bae4427a4" name="scripts/peclcmd.php" role="php">
     <tasks:replace from="@php_bin@" to="php_bin" type="pear-config" />
     <tasks:replace from="@php_dir@" to="php_dir" type="pear-config" />
     <tasks:replace from="@pear_version@" to="version" type="package-info" />
     <tasks:replace from="@include_path@" to="php_dir" type="pear-config" />
    </file>
+   <file md5sum="45b44486d8090de17b2a8b4211fab247" name="LICENSE" role="doc" />
    <file md5sum="671e6690634062ee521d2027a9971f22" name="INSTALL" role="doc" />
    <file md5sum="ca444da9174e05f8a0dc71d8ee47900f" name="package.dtd" role="data" />
-   <file md5sum="80921dfa70e0699a934c7d21f60b60c7" name="PEAR.php" role="php">
+   <file md5sum="0965c4c961762dc0c99ef4e62f69cd25" name="PEAR.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="ae70dd96347165e048bd37521d6437f2" name="README" role="doc" />
-   <file md5sum="43762dbc126b34e811326bacb76e8609" name="System.php" role="php">
+   <file md5sum="9aeb41ebb0a0072a9b537d0b3d9767a8" name="System.php" role="php">
     <tasks:replace from="@package_version@" to="version" type="package-info" />
    </file>
    <file md5sum="acd010e3bc43c0f72df584acde7b9158" name="template.spec" role="data" />
@@ -7260,7 +7566,14 @@ package.xml                                                                     
  <dependencies>
   <required>
    <php>
-    <min>4.3.0</min>
+    <min>4.4.0</min>
+    <exclude>5.0</exclude>
+    <exclude>5.1.0</exclude>
+    <exclude>5.1.1</exclude>
+    <exclude>5.1.2</exclude>
+    <exclude>5.1.3</exclude>
+    <exclude>5.1.4</exclude>
+    <exclude>5.1.5</exclude>
    </php>
    <pearinstaller>
     <min>1.4.3</min>
@@ -7269,7 +7582,7 @@ package.xml                                                                     
     <name>Archive_Tar</name>
     <channel>pear.php.net</channel>
     <min>1.1</min>
-    <recommended>1.3.2</recommended>
+    <recommended>1.3.3</recommended>
     <exclude>1.3.0</exclude>
    </package>
    <package>
@@ -7285,6 +7598,12 @@ package.xml                                                                     
     <recommended>1.2.3</recommended>
    </package>
    <package>
+    <name>XML_Util</name>
+    <channel>pear.php.net</channel>
+    <min>1.2.0</min>
+    <recommended>1.2.1</recommended>
+   </package>
+   <package>
     <name>PEAR_Frontend_Web</name>
     <channel>pear.php.net</channel>
     <max>0.4</max>
@@ -7304,28 +7623,21 @@ package.xml                                                                     
     <name>pcre</name>
    </extension>
   </required>
-  <optional>
-   <package>
-    <name>XML_RPC</name>
-    <channel>pear.php.net</channel>
-    <min>1.4.0</min>
-   </package>
-  </optional>
-  <group hint="PEAR&apos;s web-based installer" name="webinstaller">
+  <group hint="PEAR's web-based installer" name="webinstaller">
    <package>
     <name>PEAR_Frontend_Web</name>
     <channel>pear.php.net</channel>
     <min>0.5.1</min>
    </package>
   </group>
-  <group hint="PEAR&apos;s PHP-GTK-based installer" name="gtkinstaller">
+  <group hint="PEAR's PHP-GTK-based installer" name="gtkinstaller">
    <package>
     <name>PEAR_Frontend_Gtk</name>
     <channel>pear.php.net</channel>
     <min>0.4.0</min>
    </package>
   </group>
-  <group hint="PEAR&apos;s PHP-GTK2-based installer" name="gtk2installer">
+  <group hint="PEAR's PHP-GTK2-based installer" name="gtk2installer">
    <package>
     <name>PEAR_Frontend_Gtk2</name>
     <channel>pear.php.net</channel>
@@ -7364,201 +7676,211 @@ package.xml                                                                     
  <changelog>
   <release>
    <version>
-    <release>1.6.2</release>
-    <api>1.6.0</api>
+    <release>1.8.0alpha1</release>
+    <api>1.8.0</api>
    </version>
    <stability>
-    <release>stable</release>
+    <release>alpha</release>
     <api>stable</api>
    </stability>
-   <date>2007-09-09</date>
-   <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Minor bugfix release
-* fix Bug #11420: warning on pecl (un)install with --register-only option [cellog]
-* fix Bug #11481: PEAR_PackageFile_Parser_v1 skips single-char directories [pmjones]
-* fix Bug #11517: Error : download directory &quot;/var/cache/php-pear&quot;
-  is not writeable. [remicollet]
-* fix Bug #11616: Incorrect equality operator used when comparing md5 check sums [robham]
-* fix Bug #11642: PEAR fails to authenticate when downloading deps from non-default
-  channels [timj]
-* fix Bug #11657: Installer generate bad &quot;dirtree&quot; using INSTALL_ROOT [remicollet]
-* fix Bug #11678: Registry.php getChannel() deadlocks [cellog]
-* fix Bug #11703: pear convert and package.xml with optional dependencies fails [cellog]
-* fix Bug #11754: Error at upgrade-all command run [cellog]
-* fix Bug #11861: uninstall of package did not delete directory created during install
-  of package [cellog]
-* fix Bug #11862: Notice: Array to string conversion in PEAR/PackageFile.php on line 433
-  [cellog]
-* fix Bug #11883: run-tests -u -p SomePackage should run the topmost
-  &quot;AllTests.php&quot; file [cellog]
-* fix Bug #11936: run-tests fails to preserve SYSTEMROOT environment variable [cellog]</notes>
+   <date>2009-03-09</date>
+   <license uri="http://opensource.org/licenses/bsd-license.php New BSD License">New BSD License</license>
+   <notes>
+* Implement Request #10373: if pref_state=stable and installed package=beta, allow up to latest beta version [dufuz]
+* Implement Request #10581: login / logout should map to channel-login / channel-logout [dufuz]
+* Implement Request #10825: Only display the &quot;invalid or missing package file&quot;-error if it makes sense [dufuz]
+* Implement Request #11170: script to generate Command/[command].xml [dufuz]
+* Implement Request #11176: improve channel ... has updated its protocols message [dufuz]
+* Implement Request #12706: pear list -a hard to read [dufuz]
+* Implement Request #11353: upgrade-all and upgrade commands to upgrade within the same stability level [dufuz]
+* Implement Request #13015: Add https discovery for channel.xml [dufuz / initial patch by Martin Roos]
+* Implement Request #13927: install-pear.php should have option to set www_dir [timj]
+* Implement Request #14324: Make the pear install command behave similar to apt-get [dufuz]
+* Implement Request #14325: make pear upgrade with no params behave like pear upgrade-all [dufuz]
+  - upgrade-all can be considered deprecated in favor of calling upgrade with no parameters to replicate
+    better what other package managers are doing. upgrade-all will still work as intended.
+* Implement Request #14504: add a channel parameter support to the upgrade function [dufuz]
+  - Options -c ezc and --channel=ezc got added to upgrade and upgrade-all to allow for
+    channel specific upgrades
+* Implement Request #14556: install-pear-nozlib.phar should get download_dir config and other options [cweiske]
+* Implement Request #15566: Add doc.php.net as a default channel [dufuz / saltybeagle]
+
+* Fix PHP Bug #43857: --program-suffix not always reflected everywhere [cellog]
+* Fix PHP Bug #47323: strotime warnings in make install [dufuz]
+
+* Fix Bug #13908: pear info command and maintainers inactive not mentioned [dufuz]
+* Fix Bug #13926: install-pear.php does not set cfg_dir if -d option set with no -c option [timj]
+* Fix Bug #13943: tests fail when php.exe path contains spaces [dufuz / jorrit]
+* Fix Bug #13953: config-set/config-show with channel alias fail [cellog]
+* Fix Bug #13958: When a phpt tests exit() or die() xdebug coverage is not generated, patch by izi (David Jean Louis) [izi / dufuz]
+* Fix Bug #14041: Unpredictable unit test processing sequence [dufuz]
+* Fix Bug #14140: Strict warning not suppressed in the shutdown function [dufuz]
+* Fix Bug #14210: pear list -ia brings warnings [dufuz]
+* Fix Bug #14274: PEAR packager mangles package.xml encoding, then complains about it [dufuz]
+* Fix Bug #14287: cannot upgrade from stable to beta via -beta when config is set to stable [dufuz]
+* Fix Bug #14300: Package files themselves can not be served over https [dufuz / initial patch by Martin Roos]
+* Fix Bug #14437: openbasedir warning when loading config [dufuz]
+* Fix Bug #14558: PackageFile.php creates tmp directory outside configured temp_dir [cweiske]
+* Fix Bug #14947: downloadHttp() is missing Host part of the HTTP Request when using Proxy [ifeghali]
+* Fix Bug #14977: PEAR/Frontend.php doesn&apos;t require_once PEAR.php [dufuz]
+* Fix Bug #15750: Unreachable code in PEAR_Downloader [dufuz]
+* Fix Bug #15979: Package files incorrectly removed when splitting a package into multiple pkgs [dufuz]
+* Fix Bug #15914: pear upgrade installs different version if desired version not found [dufuz]
+
+NOTE!
+Functions that have been deprecated for 3+ years in PEAR_Common, please take a moment
+to migrate over to one of the alternatives that have ben provided:
+* PEAR_Common-&gt;downloadHttp (use PEAR_Downloader-&gt;downloadHttp instead)
+* PEAR_Common-&gt;infoFromTgzFile (use PEAR_PackageFile-&gt;fromTgzFile instead)
+* PEAR_Common-&gt;infoFromDescriptionFile (use PEAR_PackageFile-&gt;fromPackageFile instead)
+* PEAR_Common-&gt;infoFromString (use PEAR_PackageFile-&gt;fromXmlstring instead)
+* PEAR_Common-&gt;infoFromArray (use PEAR_PackageFile-&gt;fromAnyFile instead)
+* PEAR_Common-&gt;xmlFromInfo (use a PEAR_PackageFile_v* object&apos;s generator instead)
+* PEAR_Common-&gt;validatePackageInfo (use the validation of PEAR_PackageFile objects)
+* PEAR_Common-&gt;analyzeSourceCode (use a PEAR_PackageFile_v* object instead)
+* PEAR_Common-&gt;detectDependencies (use PEAR_Downloader_Package-&gt;detectDependencies instead)
+* PEAR_Common-&gt;buildProvidesArray (use PEAR_PackageFile_v1-&gt;_buildProvidesArray or
+  PEAR_PackageFile_v2_Validator-&gt;_buildProvidesArray)
+
+PHP 4.4 and 5.1.6 are now the minimum PHP requirements, for brave souls
+pear upgrade -f PEAR will allow people with lower versions
+to upgrade to this release but no guarantees will be made that it will work properly.
+
+Support for XML RPC channels has been dropped - The only ones that used it
+(pear.php.net and pecl.php.net) have used the REST interface for years now.
+SOAP support also removed as it was only proof of concept.
+
+Move codebase from the PHP License to New BSD 2 clause license
+   </notes>
   </release>
   <release>
+   <date>2009-03-27</date>
    <version>
-    <release>1.7.0RC1</release>
-    <api>1.6.0</api>
+    <release>1.8.0RC1</release>
+    <api>1.8.0</api>
    </version>
    <stability>
     <release>beta</release>
     <api>stable</api>
    </stability>
-   <date>2007-12-10</date>
-   <license uri="http://www.php.net/license">PHP License</license>
-   <notes>* fix Bug #12116: Accept-Encoding not supported: breaks installer [jldupont]
-* fix Bug #12162: config-create doesn&apos;t work after installing custom roles [cellog]
-* fix Bug #12553: System::find() does not find exact filename matches [cellog/jorrit]
-* fix Bug #12554: enableExtension() zeros php.ini in some instances [jlightsey]
-* implement Request #11964: introduce www role, www_dir config variable [cellog]
-* implement Request #12108: Add &quot;config&quot; (cfg) role [cellog]
-* implement Request #12147: Avoid compile-time strict warnings [cellog]</notes>
+   <license uri="http://opensource.org/licenses/bsd-license.php New BSD License">New BSD License</license>
+   <notes>
+* Fix Bug #14331: pear cvstag only works from inside the package directory [dufuz]
+* Fix Bug #16045: E_Notice: Undefined index: channel in PEAR/DependencyDB.php [dufuz]
+
+* Implemented Request #11230: better error message when mirror not in channel.xml file [dufuz]
+* Implemented Request #13150: Add support for following HTTP 302 redirects [dufuz]
+   </notes>
   </release>
   <release>
+   <date>2009-04-10</date>
    <version>
-    <release>1.7.0RC2</release>
-    <api>1.6.0</api>
-   </version>
-   <stability>
-    <release>beta</release>
-    <api>stable</api>
-   </stability>
-   <date>2007-01-03</date>
-   <license uri="http://www.php.net/license">PHP License</license>
-   <notes>**WARNING** MAJOR BC BREAK IN WWW ROLE**
-The www role was installing into packagename/ and now installs into the root directory
-of www_dir.  This is necessary to allow easy migration from applications already using
-Role_Web
-
- fixed since 1.7.0RC1:
-* fix Bug #12662: System::_parseArgs() should be declared statically [cellog]
-* fix Bug #12661: System::mktemp needs to be declaired statically [cellog]
-* implement PEAR_Error::__toString() as alias to getMessage() [cellog]
- fixed since 1.6.2:
-* fix Bug #12116: Accept-Encoding not supported: breaks installer [jldupont]
-* fix Bug #12162: config-create doesn&apos;t work after installing custom roles [cellog]
-* fix Bug #12553: System::find() does not find exact filename matches [cellog/jorrit]
-* fix Bug #12554: enableExtension() zeros php.ini in some instances [jlightsey]
-* implement Request #11964: introduce www role, www_dir config variable [cellog]
-* implement Request #12108: Add &quot;config&quot; (cfg) role [cellog]
-* implement Request #12147: Avoid compile-time strict warnings [cellog]</notes>
-  </release>
-  <release>
-   <version>
-    <release>1.7.0</release>
-    <api>1.7.0</api>
-   </version>
-   <stability>
-    <release>stable</release>
-    <api>stable</api>
-   </stability>
-   <date>2008-01-31</date>
-   <license uri="http://www.php.net/license">PHP License</license>
-   <notes>Minor feature addition release
-
-Known bugs to be fixed in version 1.7.1:
- - Bug #12945 	PEAR_Registry::setConfig() does not set install path
- - Bug #12959 	PEAR should give warning when doing &quot;special&quot; handling with cfg role
- - Bug #12960 	role=cfg should automatically replace file if it has not been modified
- - Bug #13031 	PEAR fails to authenticate when doing upgrade-all on non-default channel
- - Bug #13033 	Signature to PEAR_REST_XX::listAll() changes between REST1.0 and 1.1
-
-fixed since 1.7.0RC2
- * fix bug #13030: Port not set for REST HTTP requests [timj]
- * fix bug #13029: Duplicate Host headers set when requesting REST data [timj]
- * fix Bug #12987: improper calls to class_exists [weirdan]
- * fix Bug #12954: Host header missing when using proxy [flint]
- * fix Bug #12918: file tasks ignored for role=src [cellog]
- * fix Bug #12816: &lt;configureoption&gt; default isn&apos;t being parsed [jon]
- * fix Bug #12793: run-tests fails when using --ARGS-- in phpt test files [izi]
-fixed since 1.7.0RC1:
- * fix Bug #12818: package.xml 1.0 parsing can drop lines [cellog]
- * fix Bug #12662: System::_parseArgs() should be declared statically [cellog]
- * fix Bug #12661: System::mktemp needs to be declaired statically [cellog]
- * implement PEAR_Error::__toString() as alias to getMessage() [cellog]
-fixed since 1.6.2:
- * fix Bug #12116: Accept-Encoding not supported: breaks installer [jldupont]
- * fix Bug #12162: config-create doesn&apos;t work after installing custom roles [cellog]
- * fix Bug #12553: System::find() does not find exact filename matches [cellog/jorrit]
- * fix Bug #12554: enableExtension() zeros php.ini in some instances [jlightsey]
- * implement Request #11964: introduce www role, www_dir config variable [cellog]
- * implement Request #12108: Add &quot;config&quot; (cfg) role [cellog]
- * implement Request #12147: Avoid compile-time strict warnings [cellog]</notes>
-  </release>
-  <release>
-   <version>
-    <release>1.7.1</release>
-    <api>1.7.0</api>
-   </version>
-   <stability>
-    <release>stable</release>
-    <api>stable</api>
-   </stability>
-   <date>2008-02-03</date>
-   <license uri="http://www.php.net/license">PHP License</license>
-   <notes>fixed since 1.7.0
- * fix bug #13030: Port not set for REST HTTP requests [timj]
- * fix bug #13029: Duplicate Host headers set when requesting REST data [timj]
- * fix bug #13047: PEAR fails to install *any* package [timj]
-
-Known bugs to be fixed in version 1.7.2:
- - Bug #12945 	PEAR_Registry::setConfig() does not set install path
- - Bug #12959 	PEAR should give warning when doing &quot;special&quot; handling with cfg role
- - Bug #12960 	role=cfg should automatically replace file if it has not been modified
- - Bug #13031 	PEAR fails to authenticate when doing upgrade-all on non-default channel
- - Bug #13033 	Signature to PEAR_REST_XX::listAll() changes between REST1.0 and 1.1</notes>
-  </release>
-  <release>
-   <version>
-    <release>1.7.2</release>
-    <api>1.7.0</api>
+    <release>1.8.0</release>
+    <api>1.8.0</api>
    </version>
    <stability>
     <release>stable</release>
     <api>stable</api>
    </stability>
-   <date>2008-05-17</date>
-   <license uri="http://www.php.net/license">PHP License</license>
-   <notes>* Implement Request #13375: install-pear.php should have option to set cfg_dir [timj]
-* Fix Bug #12945 PEAR_Registry::setConfig() does not set install path [cweiske/cellog]
-* Fix Bug #12959 PEAR should give warning when doing &quot;special&quot; handling with cfg role [cellog]
-* Fix Bug #12960 role=cfg should automatically replace file if it has not been modified [cellog]
-* Fix Bug #13031 PEAR fails to authenticate when doing upgrade-all on non-default channel [timj]
-* Fix Bug #13033 Signature to PEAR_REST_XX::listAll() changes between REST1.0 and 1.1 [timj]
-* Fix Bug #13059 Invalid release type causes Undefined Property notice [gwynne, dufuz]
-* Fix Bug #13123 pear config-set works, but pecl config-set does not [cellog]
-* Fix Bug #13323 Deprecated errors in many places [hubbitus]
-* Fix Bug #13315 Upgrading of package fails if more than one file of role=cfg has changed [timj]
-* Fix Bug #13386 &quot;pear install --register-only&quot; fails with cfg role [cellog]
-* Fix Bug #13434 Breaks on HPUX - &quot;find () -ls&quot; doesn&apos;t work [cellog]
-* Fix Bug #13484 pear package brings up warnings [dufuz]
-* Fix Bug #13485 pear package-validate brings up ASCII issues [dufuz]
-* Fix Bug #13508 undefined index errors when installing a remote bundle [cellog/tswicegood]
-* Fix Bug #13525 pear package-validate is not showing warnings even if there are [dufuz]
-* Fix Bug #13559 installing package fails via proxy to virtual-hosted server. [hirose]
-* Fix Bug #13691 Pear doesn&apos;t remove old directories on upgrade [cellog]
-* Fix Bug #13870 Notice uninstalling or using bundles [cellog]
-* Fix Bug #13883 file permissions not preserved on packaging [cellog]</notes>
+   <license uri="http://opensource.org/licenses/bsd-license.php New BSD License">New BSD License</license>
+   <notes>
+Changes since RC1:
+  * Fix Bug #14792: Bad md5sum for files with replaced content [dufuz]
+  * Fix Bug #16057:-r is limited to 4 directories in depth [dufuz]
+  * Fix Bug #16077: PEAR5::getStaticProperty does not return a reference to the property [dufuz]
+
+  Remove custom XML_Util class in favor of using upstream XML_Util package as dependency
+
+RC1 Release Notes:
+  * Fix Bug #14331: pear cvstag only works from inside the package directory [dufuz]
+  * Fix Bug #16045: E_Notice: Undefined index: channel in PEAR/DependencyDB.php [dufuz]
+
+  * Implemented Request #11230: better error message when mirror not in channel.xml file [dufuz]
+  * Implemented Request #13150: Add support for following HTTP 302 redirects [dufuz]
+
+Alpha1 Release Notes:
+  * Implement Request #10373: if pref_state=stable and installed package=beta, allow up to latest beta version [dufuz]
+  * Implement Request #10581: login / logout should map to channel-login / channel-logout [dufuz]
+  * Implement Request #10825: Only display the &quot;invalid or missing package file&quot;-error if it makes sense [dufuz]
+  * Implement Request #11170: script to generate Command/[command].xml [dufuz]
+  * Implement Request #11176: improve channel ... has updated its protocols message [dufuz]
+  * Implement Request #12706: pear list -a hard to read [dufuz]
+  * Implement Request #11353: upgrade-all and upgrade commands to upgrade within the same stability level [dufuz]
+  * Implement Request #13015: Add https discovery for channel.xml [dufuz / initial patch by Martin Roos]
+  * Implement Request #13927: install-pear.php should have option to set www_dir [timj]
+  * Implement Request #14324: Make the pear install command behave similar to apt-get [dufuz]
+  * Implement Request #14325: make pear upgrade with no params behave like pear upgrade-all [dufuz]
+    - upgrade-all can be considered deprecated in favor of calling upgrade with no parameters to replicate
+      better what other package managers are doing. upgrade-all will still work as intended.
+  * Implement Request #14504: add a channel parameter support to the upgrade function [dufuz]
+    - Options -c ezc and --channel=ezc got added to upgrade and upgrade-all to allow for
+      channel specific upgrades
+  * Implement Request #14556: install-pear-nozlib.phar should get download_dir config and other options [cweiske]
+  * Implement Request #15566: Add doc.php.net as a default channel [dufuz / saltybeagle]
+
+  * Fix PHP Bug #43857: --program-suffix not always reflected everywhere [cellog]
+  * Fix PHP Bug #47323: strotime warnings in make install [dufuz]
+
+  * Fix Bug #13908: pear info command and maintainers inactive not mentioned [dufuz]
+  * Fix Bug #13926: install-pear.php does not set cfg_dir if -d option set with no -c option [timj]
+  * Fix Bug #13943: tests fail when php.exe path contains spaces [dufuz / jorrit]
+  * Fix Bug #13953: config-set/config-show with channel alias fail [cellog]
+  * Fix Bug #13958: When a phpt tests exit() or die() xdebug coverage is not generated, patch by izi (David Jean Louis) [izi / dufuz]
+  * Fix Bug #14041: Unpredictable unit test processing sequence [dufuz]
+  * Fix Bug #14140: Strict warning not suppressed in the shutdown function [dufuz]
+  * Fix Bug #14210: pear list -ia brings warnings [dufuz]
+  * Fix Bug #14274: PEAR packager mangles package.xml encoding, then complains about it [dufuz]
+  * Fix Bug #14287: cannot upgrade from stable to beta via -beta when config is set to stable [dufuz]
+  * Fix Bug #14300: Package files themselves can not be served over https [dufuz / initial patch by Martin Roos]
+  * Fix Bug #14437: openbasedir warning when loading config [dufuz]
+  * Fix Bug #14558: PackageFile.php creates tmp directory outside configured temp_dir [cweiske]
+  * Fix Bug #14947: downloadHttp() is missing Host part of the HTTP Request when using Proxy [ifeghali]
+  * Fix Bug #14977: PEAR/Frontend.php doesn&apos;t require_once PEAR.php [dufuz]
+  * Fix Bug #15750: Unreachable code in PEAR_Downloader [dufuz]
+  * Fix Bug #15979: Package files incorrectly removed when splitting a package into multiple pkgs [dufuz]
+  * Fix Bug #15914: pear upgrade installs different version if desired version not found [dufuz]
+
+  NOTE!
+  Functions that have been deprecated for 3+ years in PEAR_Common, please take a moment
+  to migrate over to one of the alternatives that have ben provided:
+  * PEAR_Common-&gt;downloadHttp (use PEAR_Downloader-&gt;downloadHttp instead)
+  * PEAR_Common-&gt;infoFromTgzFile (use PEAR_PackageFile-&gt;fromTgzFile instead)
+  * PEAR_Common-&gt;infoFromDescriptionFile (use PEAR_PackageFile-&gt;fromPackageFile instead)
+  * PEAR_Common-&gt;infoFromString (use PEAR_PackageFile-&gt;fromXmlstring instead)
+  * PEAR_Common-&gt;infoFromArray (use PEAR_PackageFile-&gt;fromAnyFile instead)
+  * PEAR_Common-&gt;xmlFromInfo (use a PEAR_PackageFile_v* object&apos;s generator instead)
+  * PEAR_Common-&gt;validatePackageInfo (use the validation of PEAR_PackageFile objects)
+  * PEAR_Common-&gt;analyzeSourceCode (use a PEAR_PackageFile_v* object instead)
+  * PEAR_Common-&gt;detectDependencies (use PEAR_Downloader_Package-&gt;detectDependencies instead)
+  * PEAR_Common-&gt;buildProvidesArray (use PEAR_PackageFile_v1-&gt;_buildProvidesArray or
+    PEAR_PackageFile_v2_Validator-&gt;_buildProvidesArray)
+
+  PHP 4.4 and 5.1.6 are now the minimum PHP requirements, for brave souls
+  pear upgrade -f PEAR will allow people with lower versions
+  to upgrade to this release but no guarantees will be made that it will work properly.
+
+  Support for XML RPC channels has been dropped - The only ones that used it
+  (pear.php.net and pecl.php.net) have used the REST interface for years now.
+  SOAP support also removed as it was only proof of concept.
+
+  Move codebase from the PHP License to New BSD 2 clause license
+   </notes>
   </release>
  </changelog>
 </package>
-                                                                                                                                                             PEAR-1.7.2/OS/Guess.php                                                                             100644    1750    1750        25470 11014312742   7635                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                                                                           PEAR-1.8.0/OS/Guess.php                                                                             100664     764     764        24637      100664   7461                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * The OS_Guess class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Gregory Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Guess.php,v 1.26 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Guess.php,v 1.29 2009/04/09 22:24:12 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since PEAR 0.1
  */
@@ -7616,7 +7938,7 @@ Known bugs to be fixed in version 1.7.2:
 // Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug  5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC  Power Macintosh
 //
 // Mac OS X early versions
-// 
+//
 
 // }}}
 
@@ -7633,9 +7955,9 @@ Known bugs to be fixed in version 1.7.2:
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Gregory Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -7670,16 +7992,16 @@ class OS_Guess
         if ($uname === null) {
             $uname = php_uname();
         }
-        $parts = split('[[:space:]]+', trim($uname));
+        $parts = preg_split('/\s+/', trim($uname));
         $n = count($parts);
 
-        $release = $machine = $cpu = '';
-        $sysname = $parts[0];
+        $release  = $machine = $cpu = '';
+        $sysname  = $parts[0];
         $nodename = $parts[1];
-        $cpu = $parts[$n-1];
+        $cpu      = $parts[$n-1];
         $extra = '';
         if ($cpu == 'unknown') {
-            $cpu = $parts[$n-2];
+            $cpu = $parts[$n - 2];
         }
 
         switch ($sysname) {
@@ -7700,7 +8022,7 @@ class OS_Guess
             case 'Linux' :
                 $extra = $this->_detectGlibcVersion();
                 // use only the first two digits from the kernel version
-                $release = ereg_replace('^([[:digit:]]+\.[[:digit:]]+).*', '\1', $parts[2]);
+                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
                 break;
             case 'Mac' :
                 $sysname = 'darwin';
@@ -7718,14 +8040,13 @@ class OS_Guess
                         $cpu = 'powerpc';
                     }
                 }
-                $release = ereg_replace('^([[:digit:]]+\.[[:digit:]]+).*', '\1', $parts[2]);
+                $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
                 break;
             default:
-                $release = ereg_replace('-.*', '', $parts[2]);
+                $release = preg_replace('/-.*/', '', $parts[2]);
                 break;
         }
 
-
         if (isset($sysmap[$sysname])) {
             $sysname = $sysmap[$sysname];
         } else {
@@ -7765,6 +8086,7 @@ class OS_Guess
                         }
                         continue;
                     }
+
                     if (strpos($line, '__GLIBC_MINOR__'))  {
                         // got the minor version number
                         // #define __GLIBC_MINOR__ version
@@ -7782,6 +8104,7 @@ class OS_Guess
                 }
                 return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ;
             } // no cpp
+
             $tmpfile = System::mktemp("glibctest");
             $fp = fopen($tmpfile, "w");
             fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
@@ -7791,6 +8114,7 @@ class OS_Guess
                 if ($line{0} == '#' || trim($line) == '') {
                     continue;
                 }
+
                 if (list($major, $minor) = explode(' ', trim($line))) {
                     break;
                 }
@@ -7798,15 +8122,18 @@ class OS_Guess
             pclose($cpp);
             unlink($tmpfile);
         } // features.h
+
         if (!($major && $minor) && @is_link('/lib/libc.so.6')) {
             // Let's try reading the libc.so.6 symlink
-            if (ereg('^libc-(.*)\.so$', basename(readlink('/lib/libc.so.6')), $matches)) {
+            if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) {
                 list($major, $minor) = explode('.', $matches[1]);
             }
         }
+
         if (!($major && $minor)) {
             return $glibc = '';
         }
+
         return $glibc = "glibc{$major}.{$minor}";
     }
 
@@ -7845,11 +8172,7 @@ class OS_Guess
 
     function matchSignature($match)
     {
-        if (is_array($match)) {
-            $fragments = $match;
-        } else {
-            $fragments = explode('-', $match);
-        }
+        $fragments = is_array($match) ? $match : explode('-', $match);
         $n = count($fragments);
         $matches = 0;
         if ($n > 0) {
@@ -7870,8 +8193,8 @@ class OS_Guess
     function _matchFragment($fragment, $value)
     {
         if (strcspn($fragment, '*?') < strlen($fragment)) {
-            $reg = '^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '$';
-            return eregi($reg, $value);
+            $reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '\\z/';
+            return preg_match($reg, $value);
         }
         return ($fragment == '*' || !strcasecmp($fragment, $value));
     }
@@ -7882,26 +8205,18 @@ class OS_Guess
  * indent-tabs-mode: nil
  * c-basic-offset: 4
  * End:
- */
-?>
-                                                                                                                                                                                                        PEAR-1.7.2/PEAR/ChannelFile/Parser.php                                                              100644    1750    1750         4120 11014312742  12326                                                                                                                                                                                                                                                                                                                                                                      <?php
+ */                                                                                                 PEAR-1.8.0/PEAR/ChannelFile/Parser.php                                                              100664     764     764         3364      100664  12157                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_ChannelFile_Parser for parsing channel.xml
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Parser.php,v 1.5 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Parser.php,v 1.7 2009/02/24 23:39:07 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -7916,9 +8231,9 @@ require_once 'PEAR/ChannelFile.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -7944,26 +8259,29 @@ class PEAR_ChannelFile_Parser extends PEAR_XMLParser
         if (PEAR::isError($err = parent::parse($data, $file))) {
             return $err;
         }
+
         $ret = new PEAR_ChannelFile;
         $ret->setConfig($this->_config);
         if (isset($this->_logger)) {
             $ret->setLogger($this->_logger);
         }
+
         $ret->fromArray($this->_unserializedData);
         // make sure the filelist is in the easy to read format needed
         $ret->flattenFilelist();
         $ret->setPackagefile($file, $archive);
         return $ret;
     }
-}
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                PEAR-1.7.2/PEAR/Command/Auth.xml                                                                    100644    1750    1750         1756 11014312742  11226                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                                                                            PEAR-1.8.0/PEAR/Command/Auth.xml                                                                    100777     764     764         2314      100777  11047                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <login>
-  <summary>Connects and authenticates to remote server</summary>
-  <shortcut>li</shortcut>
+  <summary>Connects and authenticates to remote server [Deprecated in favor of channel-login]</summary>
   <function>doLogin</function>
+  <shortcut>li</shortcut>
   <options />
   <doc>&lt;channel name&gt;
-Log in to a remote channel server.  &lt;channel name&gt; is not supplied, 
+WARNING: This function is deprecated in favor of using channel-login
+
+Log in to a remote channel server.  If &lt;channel name&gt; is not supplied,
 the default channel is used. To use remote functions in the installer
 that require any kind of privileges, you need to log in first.  The
 username and password you enter here will be stored in your per-user
@@ -7972,43 +8290,39 @@ in, your username and password will be sent along in subsequent
 operations on the remote server.</doc>
  </login>
  <logout>
-  <summary>Logs out from the remote server</summary>
-  <shortcut>lo</shortcut>
+  <summary>Logs out from the remote server [Deprecated in favor of channel-logout]</summary>
   <function>doLogout</function>
+  <shortcut>lo</shortcut>
   <options />
   <doc>
+WARNING: This function is deprecated in favor of using channel-logout
+
 Logs out from the remote server.  This command does not actually
 connect to the remote server, it only deletes the stored username and
 password from your user configuration.</doc>
  </logout>
-</commands>                  PEAR-1.7.2/PEAR/Command/Auth.php                                                                    100644    1750    1750        14202 11014312742  11223                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                                                                                                                                    PEAR-1.8.0/PEAR/Command/Auth.php                                                                    100664     764     764         5141      100664  11025                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Auth (login, logout commands)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Auth.php,v 1.31 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Auth.php,v 1.36 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
+ * @deprecated since 1.8.0alpha1
  */
 
 /**
  * base class
  */
-require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Config.php';
+require_once 'PEAR/Command/Channels.php';
 
 /**
  * PEAR commands for login/logout
@@ -8017,24 +8331,25 @@ require_once 'PEAR/Config.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
+ * @deprecated since 1.8.0alpha1
  */
-class PEAR_Command_Auth extends PEAR_Command_Common
+class PEAR_Command_Auth extends PEAR_Command_Channels
 {
-    // {{{ properties
-
     var $commands = array(
         'login' => array(
-            'summary' => 'Connects and authenticates to remote server',
+            'summary' => 'Connects and authenticates to remote server [Deprecated in favor of channel-login]',
             'shortcut' => 'li',
             'function' => 'doLogin',
             'options' => array(),
             'doc' => '<channel name>
-Log in to a remote channel server.  If <channel name> is not supplied, 
+WARNING: This function is deprecated in favor of using channel-login
+
+Log in to a remote channel server.  If <channel name> is not supplied,
 the default channel is used. To use remote functions in the installer
 that require any kind of privileges, you need to log in first.  The
 username and password you enter here will be stored in your per-user
@@ -8043,11 +8358,13 @@ in, your username and password will be sent along in subsequent
 operations on the remote server.',
             ),
         'logout' => array(
-            'summary' => 'Logs out from the remote server',
+            'summary' => 'Logs out from the remote server [Deprecated in favor of channel-logout]',
             'shortcut' => 'lo',
             'function' => 'doLogout',
             'options' => array(),
             'doc' => '
+WARNING: This function is deprecated in favor of using channel-logout
+
 Logs out from the remote server.  This command does not actually
 connect to the remote server, it only deletes the stored username and
 password from your user configuration.',
@@ -8055,10 +8372,6 @@ password from your user configuration.',
 
         );
 
-    // }}}
-
-    // {{{ constructor
-
     /**
      * PEAR_Command_Auth constructor.
      *
@@ -8066,237 +8379,102 @@ password from your user configuration.',
      */
     function PEAR_Command_Auth(&$ui, &$config)
     {
-        parent::PEAR_Command_Common($ui, $config);
-    }
-
-    // }}}
-
-    // {{{ doLogin()
-
-    /**
-     * Execute the 'login' command.
-     *
-     * @param string $command command name
-     *
-     * @param array $options option_name => value
-     *
-     * @param array $params list of additional parameters
-     *
-     * @return bool TRUE on success or
-     * a PEAR error on failure
-     *
-     * @access public
-     */
-    function doLogin($command, $options, $params)
-    {
-        $reg = &$this->config->getRegistry();
-        
-        // If a parameter is supplied, use that as the channel to log in to
-        if (isset($params[0])) {
-            $channel = $params[0];
-        } else {
-            $channel = $this->config->get('default_channel');
-        }
-        
-        $chan = $reg->getChannel($channel);
-        if (PEAR::isError($chan)) {
-            return $this->raiseError($chan);
-        }
-        $server = $this->config->get('preferred_mirror', null, $channel);
-        $remote = &$this->config->getRemote();
-        $username = $this->config->get('username', null, $channel);
-        if (empty($username)) {
-            $username = isset($_ENV['USER']) ? $_ENV['USER'] : null;
-        }
-        $this->ui->outputData("Logging in to $server.", $command);
-        
-        list($username, $password) = $this->ui->userDialog(
-            $command,
-            array('Username', 'Password'),
-            array('text',     'password'),
-            array($username,  '')
-            );
-        $username = trim($username);
-        $password = trim($password);
-
-        $ourfile = $this->config->getConfFile('user');
-        if (!$ourfile) {
-            $ourfile = $this->config->getConfFile('system');
-        }
-
-        $this->config->set('username', $username, 'user', $channel);
-        $this->config->set('password', $password, 'user', $channel);
-
-        if ($chan->supportsREST()) {
-            $ok = true;
-        } else {
-            $remote->expectError(401);
-            $ok = $remote->call('logintest');
-            $remote->popExpect();
-        }
-        if ($ok === true) {
-            $this->ui->outputData("Logged in.", $command);
-            // avoid changing any temporary settings changed with -d
-            $ourconfig = new PEAR_Config($ourfile, $ourfile);
-            $ourconfig->set('username', $username, 'user', $channel);
-            $ourconfig->set('password', $password, 'user', $channel);
-            $ourconfig->store();
-        } else {
-            return $this->raiseError("Login failed!");
-        }
-        return true;
-    }
-
-    // }}}
-    // {{{ doLogout()
-
-    /**
-     * Execute the 'logout' command.
-     *
-     * @param string $command command name
-     *
-     * @param array $options option_name => value
-     *
-     * @param array $params list of additional parameters
-     *
-     * @return bool TRUE on success or
-     * a PEAR error on failure
-     *
-     * @access public
-     */
-    function doLogout($command, $options, $params)
-    {
-        $reg = &$this->config->getRegistry();
-        $channel = $this->config->get('default_channel');
-        $chan = $reg->getChannel($channel);
-        if (PEAR::isError($chan)) {
-            return $this->raiseError($chan);
-        }
-        $server = $this->config->get('preferred_mirror');
-        $this->ui->outputData("Logging out from $server.", $command);
-        $this->config->remove('username');
-        $this->config->remove('password');
-        $this->config->store();
-        return true;
+        parent::PEAR_Command_Channels($ui, $config);
     }
-
-    // }}}
-}
-
-?>                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.7.2/PEAR/Command/Build.xml                                                                   100644    1750    1750          404 11014312742  11331                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                               PEAR-1.8.0/PEAR/Command/Build.xml                                                                   100777     764     764          405      100777  11164                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <build>
   <summary>Build an Extension From C Source</summary>
   <function>doBuild</function>
   <shortcut>b</shortcut>
   <options />
-  <doc>[package.xml]
+  <doc>[package.xml]
 Builds one or more extensions contained in a package.</doc>
  </build>
-</commands>                                                                                                                                                                                                                                                            PEAR-1.7.2/PEAR/Command/Build.php                                                                   100644    1750    1750         5430 11014312742  11344                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Command_Auth (build command)
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Tomas V.V.Cox <cox at idecnet.com>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Build.php,v 1.14 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
- */
-
-/**
- * base class
- */
-require_once 'PEAR/Command/Common.php';
-
-/**
- * PEAR commands for building extensions.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Tomas V.V.Cox <cox at idecnet.com>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 0.1
- */
-class PEAR_Command_Build extends PEAR_Command_Common
-{
-    // {{{ properties
-
-    var $commands = array(
-        'build' => array(
-            'summary' => 'Build an Extension From C Source',
-            'function' => 'doBuild',
-            'shortcut' => 'b',
-            'options' => array(),
-            'doc' => '[package.xml]
-Builds one or more extensions contained in a package.'
-            ),
-        );
-
-    // }}}
-
-    // {{{ constructor
-
-    /**
-     * PEAR_Command_Build constructor.
-     *
-     * @access public
-     */
-    function PEAR_Command_Build(&$ui, &$config)
-    {
-        parent::PEAR_Command_Common($ui, $config);
-    }
-
-    // }}}
-
-    // {{{ doBuild()
-
-    function doBuild($command, $options, $params)
-    {
-        require_once 'PEAR/Builder.php';
-        if (sizeof($params) < 1) {
-            $params[0] = 'package.xml';
-        }
-        $builder = &new PEAR_Builder($this->ui);
-        $this->debug = $this->config->get('verbose');
-        $err = $builder->build($params[0], array(&$this, 'buildCallback'));
-        if (PEAR::isError($err)) {
-            return $err;
-        }
-        return true;
-    }
-
-    // }}}
-    // {{{ buildCallback()
-
-    function buildCallback($what, $data)
-    {
-        if (($what == 'cmdoutput' && $this->debug > 1) ||
-            ($what == 'output' && $this->debug > 0)) {
-            $this->ui->outputData(rtrim($data), 'build');
-        }
-    }
-
-    // }}}
-}
-                                                                                                                                                                                                                                        PEAR-1.7.2/PEAR/Command/Channels.xml                                                                100644    1750    1750         6030 11014312742  12046                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+</commands>                                                                                                                                                                                                                                                           PEAR-1.8.0/PEAR/Command/Build.php                                                                   100664     764     764         4602      100664  11164                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Command_Auth (build command)
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V.V.Cox <cox at idecnet.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Build.php,v 1.16 2009/02/24 23:39:29 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+
+/**
+ * PEAR commands for building extensions.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V.V.Cox <cox at idecnet.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+class PEAR_Command_Build extends PEAR_Command_Common
+{
+    var $commands = array(
+        'build' => array(
+            'summary' => 'Build an Extension From C Source',
+            'function' => 'doBuild',
+            'shortcut' => 'b',
+            'options' => array(),
+            'doc' => '[package.xml]
+Builds one or more extensions contained in a package.'
+            ),
+        );
+
+    /**
+     * PEAR_Command_Build constructor.
+     *
+     * @access public
+     */
+    function PEAR_Command_Build(&$ui, &$config)
+    {
+        parent::PEAR_Command_Common($ui, $config);
+    }
+
+    function doBuild($command, $options, $params)
+    {
+        require_once 'PEAR/Builder.php';
+        if (sizeof($params) < 1) {
+            $params[0] = 'package.xml';
+        }
+
+        $builder = &new PEAR_Builder($this->ui);
+        $this->debug = $this->config->get('verbose');
+        $err = $builder->build($params[0], array(&$this, 'buildCallback'));
+        if (PEAR::isError($err)) {
+            return $err;
+        }
+
+        return true;
+    }
+
+    function buildCallback($what, $data)
+    {
+        if (($what == 'cmdoutput' && $this->debug > 1) ||
+            ($what == 'output' && $this->debug > 0)) {
+            $this->ui->outputData(rtrim($data), 'build');
+        }
+    }
+}                                                                                                                              PEAR-1.8.0/PEAR/Command/Channels.xml                                                                100777     764     764        10032      100777  11715                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <list-channels>
   <summary>List Available Channels</summary>
   <function>doList</function>
@@ -8348,8 +8526,8 @@ channel.xml.
    </force>
    <channel>
     <shortopt>c</shortopt>
-    <arg>CHANNEL</arg>
     <doc>will force download of new channel.xml if an existing channel name is used</doc>
+    <arg>CHANNEL</arg>
    </channel>
   </options>
   <doc>[&lt;channel.xml&gt;|&lt;channel name&gt;]
@@ -8390,11 +8568,34 @@ If &lt;channel name&gt; is in the format &quot;&lt;username&gt;:&lt;password&gt;
 &lt;username&gt; and &lt;password&gt; will be set as the login username/password for
 &lt;channel&gt;. Use caution when passing the username/password in this way, as
 it may allow other users on your computer to briefly view your username/
-password via the system's process list.
+password via the system&#039;s process list.
 </doc>
  </channel-discover>
-</commands>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.7.2/PEAR/Command/Channels.php                                                                100644    1750    1750        73163 11014312742  12070                                                                                                                                                                                                                                                                                                                                                                      <?php
+ <channel-login>
+  <summary>Connects and authenticates to remote channel server</summary>
+  <function>doLogin</function>
+  <shortcut>cli</shortcut>
+  <options />
+  <doc>&lt;channel name&gt;
+Log in to a remote channel server.  If &lt;channel name&gt; is not supplied,
+the default channel is used. To use remote functions in the installer
+that require any kind of privileges, you need to log in first.  The
+username and password you enter here will be stored in your per-user
+PEAR configuration (~/.pearrc on Unix-like systems).  After logging
+in, your username and password will be sent along in subsequent
+operations on the remote server.</doc>
+ </channel-login>
+ <channel-logout>
+  <summary>Logs out from the remote channel server</summary>
+  <function>doLogout</function>
+  <shortcut>clo</shortcut>
+  <options />
+  <doc>
+Logs out from the remote server.  This command does not actually
+connect to the remote server, it only deletes the stored username and
+password from your user configuration.</doc>
+ </channel-logout>
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.8.0/PEAR/Command/Channels.php                                                                100664     764     764       100632      100664  11720                                                                                                                                                                                                                                                                                                                                                                      <?php
 // /* vim: set expandtab tabstop=4 shiftwidth=4: */
 /**
  * PEAR_Command_Channels (list-channels, update-channels, channel-delete, channel-add,
@@ -8402,19 +8603,13 @@ password via the system's process list.
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Channels.php,v 1.57 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Channels.php,v 1.64 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -8424,22 +8619,22 @@ password via the system's process list.
  */
 require_once 'PEAR/Command/Common.php';
 
+define('PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS', -500);
+
 /**
  * PEAR commands for managing channels.
  *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
 class PEAR_Command_Channels extends PEAR_Command_Common
 {
-    // {{{ properties
-
     var $commands = array(
         'list-channels' => array(
             'summary' => 'List Available Channels',
@@ -8537,11 +8732,32 @@ it may allow other users on your computer to briefly view your username/
 password via the system\'s process list.
 '
             ),
+        'channel-login' => array(
+            'summary' => 'Connects and authenticates to remote channel server',
+            'shortcut' => 'cli',
+            'function' => 'doLogin',
+            'options' => array(),
+            'doc' => '<channel name>
+Log in to a remote channel server.  If <channel name> is not supplied,
+the default channel is used. To use remote functions in the installer
+that require any kind of privileges, you need to log in first.  The
+username and password you enter here will be stored in your per-user
+PEAR configuration (~/.pearrc on Unix-like systems).  After logging
+in, your username and password will be sent along in subsequent
+operations on the remote server.',
+            ),
+        'channel-logout' => array(
+            'summary' => 'Logs out from the remote channel server',
+            'shortcut' => 'clo',
+            'function' => 'doLogout',
+            'options' => array(),
+            'doc' => '
+Logs out from the remote server.  This command does not actually
+connect to the remote server, it only deletes the stored username and
+password from your user configuration.',
+            ),
         );
 
-    // }}}
-    // {{{ constructor
-
     /**
      * PEAR_Command_Registry constructor.
      *
@@ -8552,10 +8768,6 @@ password via the system\'s process list.
         parent::PEAR_Command_Common($ui, $config);
     }
 
-    // }}}
-
-    // {{{ doList()
-    
     function _sortChannels($a, $b)
     {
         return strnatcasecmp($a->getName(), $b->getName());
@@ -8576,13 +8788,14 @@ password via the system\'s process list.
             $data['data'][] = array($channel->getName(),
                                       $channel->getSummary());
         }
-        if (count($registered)==0) {
+
+        if (count($registered) === 0) {
             $data = '(no registered channels)';
         }
         $this->ui->outputData($data, $command);
         return true;
     }
-    
+
     function doUpdateAll($command, $options, $params)
     {
         $reg = &$this->config->getRegistry();
@@ -8605,13 +8818,14 @@ password via the system\'s process list.
         }
         return $success;
     }
-    
+
     function doInfo($command, $options, $params)
     {
-        if (sizeof($params) != 1) {
+        if (count($params) !== 1) {
             return $this->raiseError("No channel specified");
         }
-        $reg = &$this->config->getRegistry();
+
+        $reg     = &$this->config->getRegistry();
         $channel = strtolower($params[0]);
         if ($reg->channelExists($channel)) {
             $chan = $reg->getChannel($channel);
@@ -8632,23 +8846,26 @@ password via the system\'s process list.
                     $contents = implode('', file($loc));
                 }
             } else {
-                if (file_exists($params[0])) {
-                    $fp = fopen($params[0], 'r');
-                    if (!$fp) {
-                        return $this->raiseError('Cannot open "' . $params[0] . '"');
-                    }
-                } else {
+                if (!file_exists($params[0])) {
                     return $this->raiseError('Unknown channel "' . $channel . '"');
                 }
+
+                $fp = fopen($params[0], 'r');
+                if (!$fp) {
+                    return $this->raiseError('Cannot open "' . $params[0] . '"');
+                }
+
                 $contents = '';
                 while (!feof($fp)) {
                     $contents .= fread($fp, 1024);
                 }
                 fclose($fp);
             }
+
             if (!class_exists('PEAR_ChannelFile')) {
                 require_once 'PEAR/ChannelFile.php';
             }
+
             $chan = new PEAR_ChannelFile;
             $chan->fromXmlString($contents);
             $chan->validate();
@@ -8659,147 +8876,123 @@ password via the system\'s process list.
                 return $this->raiseError('Channel file "' . $params[0] . '" is not valid');
             }
         }
-        if ($chan) {
-            $channel = $chan->getName();
-            $caption = 'Channel ' . $channel . ' Information:';
-            $data1 = array(
-                'caption' => $caption,
-                'border' => true);
-            $data1['data']['server'] = array('Name and Server', $chan->getName());
-            if ($chan->getAlias() != $chan->getName()) {
-                $data1['data']['alias'] = array('Alias', $chan->getAlias());
-            }
-            $data1['data']['summary'] = array('Summary', $chan->getSummary());
-            $validate = $chan->getValidationPackage();
-            $data1['data']['vpackage'] = array('Validation Package Name', $validate['_content']);
-            $data1['data']['vpackageversion'] =
-                array('Validation Package Version', $validate['attribs']['version']);
-            $d = array();
-            $d['main'] = $data1;
 
-            $data['data'] = array();
-            $data['caption'] = 'Server Capabilities';
-            $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
-            $capabilities = $chan->getFunctions('xmlrpc');
-            $soaps = $chan->getFunctions('soap');
-            if ($capabilities || $soaps || $chan->supportsREST()) {
-                if ($capabilities) {
-                    if (!isset($capabilities[0])) {
-                        $capabilities = array($capabilities);
-                    }
-                    foreach ($capabilities as $protocol) {
-                        $data['data'][] = array('xmlrpc', $protocol['attribs']['version'],
-                            $protocol['_content']);
-                    }
-                }
-                if ($soaps) {
-                    if (!isset($soaps[0])) {
-                        $soaps = array($soaps);
-                    }
-                    foreach ($soaps as $protocol) {
-                        $data['data'][] = array('soap', $protocol['attribs']['version'],
-                            $protocol['_content']);
-                    }
+        if (!$chan) {
+            return $this->raiseError('Serious error: Channel "' . $params[0] .
+                '" has a corrupted registry entry');
+        }
+
+        $channel = $chan->getName();
+        $caption = 'Channel ' . $channel . ' Information:';
+        $data1 = array(
+            'caption' => $caption,
+            'border' => true);
+        $data1['data']['server'] = array('Name and Server', $chan->getName());
+        if ($chan->getAlias() != $chan->getName()) {
+            $data1['data']['alias'] = array('Alias', $chan->getAlias());
+        }
+
+        $data1['data']['summary'] = array('Summary', $chan->getSummary());
+        $validate = $chan->getValidationPackage();
+        $data1['data']['vpackage'] = array('Validation Package Name', $validate['_content']);
+        $data1['data']['vpackageversion'] =
+            array('Validation Package Version', $validate['attribs']['version']);
+        $d = array();
+        $d['main'] = $data1;
+
+        $data['data'] = array();
+        $data['caption'] = 'Server Capabilities';
+        $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
+        if ($chan->supportsREST()) {
+            if ($chan->supportsREST()) {
+                $funcs = $chan->getFunctions('rest');
+                if (!isset($funcs[0])) {
+                    $funcs = array($funcs);
                 }
-                if ($chan->supportsREST()) {
-                    $funcs = $chan->getFunctions('rest');
-                    if (!isset($funcs[0])) {
-                        $funcs = array($funcs);
-                    }
-                    foreach ($funcs as $protocol) {
-                        $data['data'][] = array('rest', $protocol['attribs']['type'],
-                            $protocol['_content']); 
-                    }
+                foreach ($funcs as $protocol) {
+                    $data['data'][] = array('rest', $protocol['attribs']['type'],
+                        $protocol['_content']);
                 }
-            } else {
-                $data['data'][] = array('No supported protocols');
             }
-            $d['protocols'] = $data;
-            $data['data'] = array();
-            $mirrors = $chan->getMirrors();
-            if ($mirrors) {
-                $data['caption'] = 'Channel ' . $channel . ' Mirrors:';
-                unset($data['headline']);
-                foreach ($mirrors as $mirror) {
-                    $data['data'][] = array($mirror['attribs']['host']);
-                    $d['mirrors'] = $data;
-                }
-                foreach ($mirrors as $i => $mirror) {
-                    $data['data'] = array();
-                    $data['caption'] = 'Mirror ' . $mirror['attribs']['host'] . ' Capabilities';
-                    $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
-                    $capabilities = $chan->getFunctions('xmlrpc', $mirror['attribs']['host']);
-                    $soaps = $chan->getFunctions('soap', $mirror['attribs']['host']);
-                    if ($capabilities || $soaps || $chan->supportsREST($mirror['attribs']['host'])) {
-                        if ($capabilities) {
-                            if (!isset($capabilities[0])) {
-                                $capabilities = array($capabilities);
-                            }
-                            foreach ($capabilities as $protocol) {
-                                $data['data'][] = array('xmlrpc', $protocol['attribs']['version'],
-                                    $protocol['_content']);
-                            }
-                        }
-                        if ($soaps) {
-                            if (!isset($soaps[0])) {
-                                $soaps = array($soaps);
-                            }
-                            foreach ($soaps as $protocol) {
-                                $data['data'][] = array('soap', $protocol['attribs']['version'],
-                                    $protocol['_content']);
-                            }
+        } else {
+            $data['data'][] = array('No supported protocols');
+        }
+
+        $d['protocols'] = $data;
+        $data['data'] = array();
+        $mirrors = $chan->getMirrors();
+        if ($mirrors) {
+            $data['caption'] = 'Channel ' . $channel . ' Mirrors:';
+            unset($data['headline']);
+            foreach ($mirrors as $mirror) {
+                $data['data'][] = array($mirror['attribs']['host']);
+                $d['mirrors'] = $data;
+            }
+
+            foreach ($mirrors as $i => $mirror) {
+                $data['data'] = array();
+                $data['caption'] = 'Mirror ' . $mirror['attribs']['host'] . ' Capabilities';
+                $data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
+                if ($chan->supportsREST($mirror['attribs']['host'])) {
+                    if ($chan->supportsREST($mirror['attribs']['host'])) {
+                        $funcs = $chan->getFunctions('rest', $mirror['attribs']['host']);
+                        if (!isset($funcs[0])) {
+                            $funcs = array($funcs);
                         }
-                        if ($chan->supportsREST($mirror['attribs']['host'])) {
-                            $funcs = $chan->getFunctions('rest', $mirror['attribs']['host']);
-                            if (!isset($funcs[0])) {
-                                $funcs = array($funcs);
-                            }
-                            foreach ($funcs as $protocol) {
-                                $data['data'][] = array('rest', $protocol['attribs']['type'],
-                                    $protocol['_content']); 
-                            }
+
+                        foreach ($funcs as $protocol) {
+                            $data['data'][] = array('rest', $protocol['attribs']['type'],
+                                $protocol['_content']);
                         }
-                    } else {
-                        $data['data'][] = array('No supported protocols');
                     }
-                    $d['mirrorprotocols' . $i] = $data;
+                } else {
+                    $data['data'][] = array('No supported protocols');
                 }
+                $d['mirrorprotocols' . $i] = $data;
             }
-            $this->ui->outputData($d, 'channel-info');
-        } else {
-            return $this->raiseError('Serious error: Channel "' . $params[0] .
-                '" has a corrupted registry entry');
         }
+        $this->ui->outputData($d, 'channel-info');
     }
 
     // }}}
-    
+
     function doDelete($command, $options, $params)
     {
-        if (sizeof($params) != 1) {
+        if (count($params) !== 1) {
             return $this->raiseError('channel-delete: no channel specified');
         }
+
         $reg = &$this->config->getRegistry();
         if (!$reg->channelExists($params[0])) {
             return $this->raiseError('channel-delete: channel "' . $params[0] . '" does not exist');
         }
+
         $channel = $reg->channelName($params[0]);
         if ($channel == 'pear.php.net') {
             return $this->raiseError('Cannot delete the pear.php.net channel');
         }
+
         if ($channel == 'pecl.php.net') {
             return $this->raiseError('Cannot delete the pecl.php.net channel');
         }
+
+        if ($channel == 'doc.php.net') {
+            return $this->raiseError('Cannot delete the doc.php.net channel');
+        }
+
         if ($channel == '__uri') {
             return $this->raiseError('Cannot delete the __uri pseudo-channel');
         }
+
         if (PEAR::isError($err = $reg->listPackages($channel))) {
             return $err;
         }
+
         if (count($err)) {
             return $this->raiseError('Channel "' . $channel .
                 '" has installed packages, cannot delete');
         }
+
         if (!$reg->deleteChannel($channel)) {
             return $this->raiseError('Channel "' . $channel . '" deletion failed');
         } else {
@@ -8810,9 +9003,10 @@ password via the system\'s process list.
 
     function doAdd($command, $options, $params)
     {
-        if (sizeof($params) != 1) {
+        if (count($params) !== 1) {
             return $this->raiseError('channel-add: no channel file specified');
         }
+
         if (strpos($params[0], '://')) {
             $downloader = &$this->getDownloader();
             $tmpdir = $this->config->get('temp_dir');
@@ -8823,42 +9017,48 @@ password via the system\'s process list.
                 PEAR::staticPopErrorHandling();
                 if (PEAR::isError($err)) {
                     return $this->raiseError('channel-add: temp_dir does not exist: "' .
-                        $tmpdir . 
+                        $tmpdir .
                         '" - You can change this location with "pear config-set temp_dir"');
                 }
             }
+
             if (!is_writable($tmpdir)) {
                 return $this->raiseError('channel-add: temp_dir is not writable: "' .
-                    $tmpdir . 
+                    $tmpdir .
                     '" - You can change this location with "pear config-set temp_dir"');
             }
+
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
             $loc = $downloader->downloadHttp($params[0], $this->ui, $tmpdir, null, false);
             PEAR::staticPopErrorHandling();
             if (PEAR::isError($loc)) {
                 return $this->raiseError('channel-add: Cannot open "' . $params[0] .
                     '" (' . $loc->getMessage() . ')');
-            } else {
-                list($loc, $lastmodified) = $loc;
-                $contents = implode('', file($loc));
             }
+
+            list($loc, $lastmodified) = $loc;
+            $contents = implode('', file($loc));
         } else {
             $lastmodified = $fp = false;
             if (file_exists($params[0])) {
                 $fp = fopen($params[0], 'r');
             }
+
             if (!$fp) {
                 return $this->raiseError('channel-add: cannot open "' . $params[0] . '"');
             }
+
             $contents = '';
             while (!feof($fp)) {
                 $contents .= fread($fp, 1024);
             }
             fclose($fp);
         }
+
         if (!class_exists('PEAR_ChannelFile')) {
             require_once 'PEAR/ChannelFile.php';
         }
+
         $channel = new PEAR_ChannelFile;
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $result = $channel->fromXmlString($contents);
@@ -8877,19 +9077,23 @@ password via the system\'s process list.
                 }
             }
         }
+
         $reg = &$this->config->getRegistry();
         if ($reg->channelExists($channel->getName())) {
             return $this->raiseError('channel-add: Channel "' . $channel->getName() .
-                '" exists, use channel-update to update entry');
+                '" exists, use channel-update to update entry', PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS);
         }
+
         $ret = $reg->addChannel($channel, $lastmodified);
         if (PEAR::isError($ret)) {
             return $ret;
         }
+
         if (!$ret) {
             return $this->raiseError('channel-add: adding Channel "' . $channel->getName() .
                 '" to registry failed');
         }
+
         $this->config->setChannels($reg->listChannels());
         $this->config->writeConfigFile();
         $this->ui->outputData('Adding Channel "' . $channel->getName() . '" succeeded', $command);
@@ -8897,6 +9101,10 @@ password via the system\'s process list.
 
     function doUpdate($command, $options, $params)
     {
+        if (count($params) !== 1) {
+            return $this->raiseError("No channel file specified");
+        }
+
         $tmpdir = $this->config->get('temp_dir');
         if (!file_exists($tmpdir)) {
             require_once 'System.php';
@@ -8905,19 +9113,18 @@ password via the system\'s process list.
             PEAR::staticPopErrorHandling();
             if (PEAR::isError($err)) {
                 return $this->raiseError('channel-add: temp_dir does not exist: "' .
-                    $tmpdir . 
+                    $tmpdir .
                     '" - You can change this location with "pear config-set temp_dir"');
             }
         }
+
         if (!is_writable($tmpdir)) {
             return $this->raiseError('channel-add: temp_dir is not writable: "' .
-                $tmpdir . 
+                $tmpdir .
                 '" - You can change this location with "pear config-set temp_dir"');
         }
+
         $reg = &$this->config->getRegistry();
-        if (sizeof($params) != 1) {
-            return $this->raiseError("No channel file specified");
-        }
         $lastmodified = false;
         if ((!file_exists($params[0]) || is_dir($params[0]))
               && $reg->channelExists(strtolower($params[0]))) {
@@ -8925,6 +9132,7 @@ password via the system\'s process list.
             if (PEAR::isError($c)) {
                 return $this->raiseError($c);
             }
+
             $this->ui->outputData("Updating channel \"$params[0]\"", $command);
             $dl = &$this->getDownloader(array());
             // if force is specified, use a timestamp of "1" to force retrieval
@@ -8934,32 +9142,44 @@ password via the system\'s process list.
                 $this->ui, $tmpdir, null, $lastmodified);
             PEAR::staticPopErrorHandling();
             if (PEAR::isError($contents)) {
-                return $this->raiseError('Cannot retrieve channel.xml for channel "' .
-                    $c->getName() . '" (' . $contents->getMessage() . ')');
+                // Attempt to fall back to https
+                $this->ui->outputData("Channel \"$params[0]\" is not responding over http://, failed with message: " . $contents->getMessage());
+                $this->ui->outputData("Trying channel \"$params[0]\" over https:// instead");
+                PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                $contents = $dl->downloadHttp('https://' . $c->getName() . '/channel.xml',
+                    $this->ui, $tmpdir, null, $lastmodified);
+                PEAR::staticPopErrorHandling();
+                if (PEAR::isError($contents)) {
+                    return $this->raiseError('Cannot retrieve channel.xml for channel "' .
+                        $c->getName() . '" (' . $contents->getMessage() . ')');
+                }
             }
+
             list($contents, $lastmodified) = $contents;
             if (!$contents) {
                 $this->ui->outputData("Channel \"$params[0]\" is up to date");
                 return;
             }
+
             $contents = implode('', file($contents));
             if (!class_exists('PEAR_ChannelFile')) {
                 require_once 'PEAR/ChannelFile.php';
             }
+
             $channel = new PEAR_ChannelFile;
             $channel->fromXmlString($contents);
             if (!$channel->getErrors()) {
                 // security check: is the downloaded file for the channel we got it from?
                 if (strtolower($channel->getName()) != strtolower($c->getName())) {
-                    if (isset($options['force'])) {
-                        $this->ui->log(0, 'WARNING: downloaded channel definition file' .
-                            ' for channel "' . $channel->getName() . '" from channel "' .
-                            strtolower($c->getName()) . '"');
-                    } else {
+                    if (!isset($options['force'])) {
                         return $this->raiseError('ERROR: downloaded channel definition file' .
                             ' for channel "' . $channel->getName() . '" from channel "' .
                             strtolower($c->getName()) . '"');
                     }
+
+                    $this->ui->log(0, 'WARNING: downloaded channel definition file' .
+                        ' for channel "' . $channel->getName() . '" from channel "' .
+                        strtolower($c->getName()) . '"');
                 }
             }
         } else {
@@ -8972,30 +9192,35 @@ password via the system\'s process list.
                 if (PEAR::isError($loc)) {
                     return $this->raiseError("Cannot open " . $params[0] .
                          ' (' . $loc->getMessage() . ')');
-                } else {
-                    list($loc, $lastmodified) = $loc;
-                    $contents = implode('', file($loc));
                 }
+
+                list($loc, $lastmodified) = $loc;
+                $contents = implode('', file($loc));
             } else {
                 $fp = false;
                 if (file_exists($params[0])) {
                     $fp = fopen($params[0], 'r');
                 }
+
                 if (!$fp) {
                     return $this->raiseError("Cannot open " . $params[0]);
                 }
+
                 $contents = '';
                 while (!feof($fp)) {
                     $contents .= fread($fp, 1024);
                 }
                 fclose($fp);
             }
+
             if (!class_exists('PEAR_ChannelFile')) {
                 require_once 'PEAR/ChannelFile.php';
             }
+
             $channel = new PEAR_ChannelFile;
             $channel->fromXmlString($contents);
         }
+
         $exit = false;
         if (count($errors = $channel->getErrors(true))) {
             foreach ($errors as $error) {
@@ -9008,18 +9233,22 @@ password via the system\'s process list.
                 return $this->raiseError('Invalid channel.xml file');
             }
         }
+
         if (!$reg->channelExists($channel->getName())) {
             return $this->raiseError('Error: Channel "' . $channel->getName() .
                 '" does not exist, use channel-add to add an entry');
         }
+
         $ret = $reg->updateChannel($channel, $lastmodified);
         if (PEAR::isError($ret)) {
             return $ret;
         }
+
         if (!$ret) {
             return $this->raiseError('Updating Channel "' . $channel->getName() .
                 '" in registry failed');
         }
+
         $this->config->setChannels($reg->listChannels());
         $this->config->writeConfigFile();
         $this->ui->outputData('Update of Channel "' . $channel->getName() . '" succeeded');
@@ -9036,37 +9265,43 @@ password via the system\'s process list.
 
     function doAlias($command, $options, $params)
     {
-        $reg = &$this->config->getRegistry();
-        if (sizeof($params) == 1) {
+        if (count($params) === 1) {
             return $this->raiseError('No channel alias specified');
         }
-        if (sizeof($params) != 2) {
+
+        if (count($params) !== 2) {
             return $this->raiseError(
                 'Invalid format, correct is: channel-alias channel alias');
         }
+
+        $reg = &$this->config->getRegistry();
         if (!$reg->channelExists($params[0], true)) {
+            $extra = '';
             if ($reg->isAlias($params[0])) {
                 $extra = ' (use "channel-alias ' . $reg->channelName($params[0]) . ' ' .
                     strtolower($params[1]) . '")';
-            } else {
-                $extra = '';
             }
+
             return $this->raiseError('"' . $params[0] . '" is not a valid channel' . $extra);
         }
+
         if ($reg->isAlias($params[1])) {
             return $this->raiseError('Channel "' . $reg->channelName($params[1]) . '" is ' .
                 'already aliased to "' . strtolower($params[1]) . '", cannot re-alias');
         }
+
         $chan = &$reg->getChannel($params[0]);
         if (PEAR::isError($chan)) {
             return $this->raiseError('Corrupt registry?  Error retrieving channel "' . $params[0] .
                 '" information (' . $chan->getMessage() . ')');
         }
+
         // make it a local alias
         if (!$chan->setAlias(strtolower($params[1]), true)) {
             return $this->raiseError('Alias "' . strtolower($params[1]) .
                 '" is not a valid channel alias');
         }
+
         $reg->updateChannel($chan);
         $this->ui->outputData('Channel "' . $chan->getName() . '" aliased successfully to "' .
             strtolower($params[1]) . '"');
@@ -9085,37 +9320,50 @@ password via the system\'s process list.
      */
     function doDiscover($command, $options, $params)
     {
-        $reg = &$this->config->getRegistry();
-        if (sizeof($params) != 1) {
+        if (count($params) !== 1) {
             return $this->raiseError("No channel server specified");
         }
-        
+
         // Look for the possible input format "<username>:<password>@<channel>"
         if (preg_match('/^(.+):(.+)@(.+)\\z/', $params[0], $matches)) {
             $username = $matches[1];
             $password = $matches[2];
-            $channel = $matches[3];
+            $channel  = $matches[3];
         } else {
             $channel = $params[0];
         }
-        
+
+        $reg = &$this->config->getRegistry();
         if ($reg->channelExists($channel)) {
-            if ($reg->isAlias($channel)) {
-                return $this->raiseError("A channel alias named \"$channel\" " .
-                    'already exists, aliasing channel "' . $reg->channelName($channel)
-                    . '"');
-            } else {
-                return $this->raiseError("Channel \"$channel\" is already initialized");
+            if (!$reg->isAlias($channel)) {
+                return $this->raiseError("Channel \"$channel\" is already initialized", PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS);
             }
+
+            return $this->raiseError("A channel alias named \"$channel\" " .
+                'already exists, aliasing channel "' . $reg->channelName($channel)
+                . '"');
         }
+
         $this->pushErrorHandling(PEAR_ERROR_RETURN);
         $err = $this->doAdd($command, $options, array('http://' . $channel . '/channel.xml'));
         $this->popErrorHandling();
         if (PEAR::isError($err)) {
-            return $this->raiseError("Discovery of channel \"$channel\" failed (" .
-                $err->getMessage() . ')');
+            if ($err->getCode() === PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS) {
+                return $this->raiseError("Discovery of channel \"$channel\" failed (" .
+                    $err->getMessage() . ')');
+            }
+            // Attempt fetch via https
+            $this->ui->outputData("Discovering channel $channel over http:// failed with message: " . $err->getMessage());
+            $this->ui->outputData("Trying to discover channel $channel over https:// instead");
+            $this->pushErrorHandling(PEAR_ERROR_RETURN);
+            $err = $this->doAdd($command, $options, array('https://' . $channel . '/channel.xml'));
+            $this->popErrorHandling();
+            if (PEAR::isError($err)) {
+                return $this->raiseError("Discovery of channel \"$channel\" failed (" .
+                    $err->getMessage() . ')');
+            }
         }
-        
+
         // Store username/password if they were given
         // Arguably we should do a logintest on the channel here, but since
         // that's awkward on a REST-based channel (even "pear login" doesn't
@@ -9126,30 +9374,117 @@ password via the system\'s process list.
             $this->config->store();
             $this->ui->outputData("Stored login for channel \"$channel\" using username \"$username\"", $command);
         }
-        
+
         $this->ui->outputData("Discovery of channel \"$channel\" succeeded", $command);
     }
-}
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.7.2/PEAR/Command/Common.php                                                                  100644    1750    1750        21300 11014312742  11547                                                                                                                                                                                                                                                                                                                                                                      <?php
+
+    /**
+     * Execute the 'login' command.
+     *
+     * @param string $command command name
+     * @param array $options option_name => value
+     * @param array $params list of additional parameters
+     *
+     * @return bool TRUE on success or
+     * a PEAR error on failure
+     *
+     * @access public
+     */
+    function doLogin($command, $options, $params)
+    {
+        $reg = &$this->config->getRegistry();
+
+        // If a parameter is supplied, use that as the channel to log in to
+        $channel = isset($params[0]) ? $params[0] : $this->config->get('default_channel');
+
+        $chan = $reg->getChannel($channel);
+        if (PEAR::isError($chan)) {
+            return $this->raiseError($chan);
+        }
+
+        $server   = $this->config->get('preferred_mirror', null, $channel);
+        $username = $this->config->get('username',         null, $channel);
+        if (empty($username)) {
+            $username = isset($_ENV['USER']) ? $_ENV['USER'] : null;
+        }
+        $this->ui->outputData("Logging in to $server.", $command);
+
+        list($username, $password) = $this->ui->userDialog(
+            $command,
+            array('Username', 'Password'),
+            array('text',     'password'),
+            array($username,  '')
+            );
+        $username = trim($username);
+        $password = trim($password);
+
+        $ourfile = $this->config->getConfFile('user');
+        if (!$ourfile) {
+            $ourfile = $this->config->getConfFile('system');
+        }
+
+        $this->config->set('username', $username, 'user', $channel);
+        $this->config->set('password', $password, 'user', $channel);
+
+        if ($chan->supportsREST()) {
+            $ok = true;
+        }
+
+        if ($ok !== true) {
+            return $this->raiseError('Login failed!');
+        }
+
+        $this->ui->outputData("Logged in.", $command);
+        // avoid changing any temporary settings changed with -d
+        $ourconfig = new PEAR_Config($ourfile, $ourfile);
+        $ourconfig->set('username', $username, 'user', $channel);
+        $ourconfig->set('password', $password, 'user', $channel);
+        $ourconfig->store();
+
+        return true;
+    }
+
+    /**
+     * Execute the 'logout' command.
+     *
+     * @param string $command command name
+     * @param array $options option_name => value
+     * @param array $params list of additional parameters
+     *
+     * @return bool TRUE on success or
+     * a PEAR error on failure
+     *
+     * @access public
+     */
+    function doLogout($command, $options, $params)
+    {
+        $reg     = &$this->config->getRegistry();
+        $channel = $this->config->get('default_channel');
+        $chan    = $reg->getChannel($channel);
+        if (PEAR::isError($chan)) {
+            return $this->raiseError($chan);
+        }
+
+        $server = $this->config->get('preferred_mirror');
+        $this->ui->outputData("Logging out from $server.", $command);
+        $this->config->remove('username');
+        $this->config->remove('password');
+        $this->config->store();
+        return true;
+    }
+}                                                                                                      PEAR-1.8.0/PEAR/Command/Common.php                                                                  100664     764     764        20147      100664  11377                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Common base class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.36 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.39 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -9166,16 +9501,14 @@ require_once 'PEAR.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Command_Common extends PEAR
 {
-    // {{{ properties
-
     /**
      * PEAR_Config object used to pass user system and configuration
      * on when executing commands
@@ -9217,9 +9550,6 @@ class PEAR_Command_Common extends PEAR
                                   'sapi' => 'SAPI backend'
                                   );
 
-    // }}}
-    // {{{ constructor
-
     /**
      * PEAR_Command_Common constructor.
      *
@@ -9232,10 +9562,6 @@ class PEAR_Command_Common extends PEAR
         $this->ui = &$ui;
     }
 
-    // }}}
-
-    // {{{ getCommands()
-
     /**
      * Return a list of all the commands defined by this class.
      * @return array list of commands
@@ -9247,12 +9573,10 @@ class PEAR_Command_Common extends PEAR
         foreach (array_keys($this->commands) as $command) {
             $ret[$command] = $this->commands[$command]['summary'];
         }
+
         return $ret;
     }
 
-    // }}}
-    // {{{ getShortcuts()
-
     /**
      * Return a list of all the command shortcuts defined by this class.
      * @return array shortcut => command
@@ -9266,36 +9590,33 @@ class PEAR_Command_Common extends PEAR
                 $ret[$this->commands[$command]['shortcut']] = $command;
             }
         }
+
         return $ret;
     }
 
-    // }}}
-    // {{{ getOptions()
-
     function getOptions($command)
     {
         $shortcuts = $this->getShortcuts();
         if (isset($shortcuts[$command])) {
             $command = $shortcuts[$command];
         }
+
         if (isset($this->commands[$command]) &&
               isset($this->commands[$command]['options'])) {
             return $this->commands[$command]['options'];
-        } else {
-            return null;
         }
-    }
 
-    // }}}
-    // {{{ getGetoptArgs()
+        return null;
+    }
 
     function getGetoptArgs($command, &$short_args, &$long_args)
     {
-        $short_args = "";
+        $short_args = '';
         $long_args = array();
         if (empty($this->commands[$command]) || empty($this->commands[$command]['options'])) {
             return;
         }
+
         reset($this->commands[$command]['options']);
         while (list($option, $info) = each($this->commands[$command]['options'])) {
             $larg = $sarg = '';
@@ -9310,15 +9631,15 @@ class PEAR_Command_Common extends PEAR
                     $arg = $info['arg'];
                 }
             }
+
             if (isset($info['shortopt'])) {
                 $short_args .= $info['shortopt'] . $sarg;
             }
+
             $long_args[] = $option . $larg;
         }
     }
 
-    // }}}
-    // {{{ getHelp()
     /**
     * Returns the help message for the given command
     *
@@ -9333,10 +9654,12 @@ class PEAR_Command_Common extends PEAR
         if (!isset($this->commands[$command])) {
             return "No such command \"$command\"";
         }
+
         $help = null;
         if (isset($this->commands[$command]['doc'])) {
             $help = $this->commands[$command]['doc'];
         }
+
         if (empty($help)) {
             // XXX (cox) Fallback to summary if there is no doc (show both?)
             if (!isset($this->commands[$command]['summary'])) {
@@ -9344,22 +9667,22 @@ class PEAR_Command_Common extends PEAR
             }
             $help = $this->commands[$command]['summary'];
         }
+
         if (preg_match_all('/{config\s+([^\}]+)}/e', $help, $matches)) {
             foreach($matches[0] as $k => $v) {
                 $help = preg_replace("/$v/", $config->get($matches[1][$k]), $help);
             }
         }
+
         return array($help, $this->getHelpArgs($command));
     }
 
-    // }}}
-    // {{{ getHelpArgs()
     /**
-    * Returns the help for the accepted arguments of a command
-    *
-    * @param  string $command
-    * @return string The help string
-    */
+     * Returns the help for the accepted arguments of a command
+     *
+     * @param  string $command
+     * @return string The help string
+     */
     function getHelpArgs($command)
     {
         if (isset($this->commands[$command]['options']) &&
@@ -9379,24 +9702,25 @@ class PEAR_Command_Common extends PEAR
                 } else {
                     $sapp = $lapp = "";
                 }
+
                 if (isset($v['shortopt'])) {
                     $s = $v['shortopt'];
                     $help .= "  -$s$sapp, --$k$lapp\n";
                 } else {
                     $help .= "  --$k$lapp\n";
                 }
+
                 $p = "        ";
                 $doc = rtrim(str_replace("\n", "\n$p", $v['doc']));
                 $help .= "        $doc\n";
             }
+
             return $help;
         }
+
         return null;
     }
 
-    // }}}
-    // {{{ run()
-
     function run($command, $options, $params)
     {
         if (empty($this->commands[$command]['function'])) {
@@ -9409,20 +9733,18 @@ class PEAR_Command_Common extends PEAR
                         $func = $this->commands[$cmd]['function'];
                     }
                     $command = $cmd;
+
+                    //$command = $this->commands[$cmd]['function'];
                     break;
                 }
             }
         } else {
             $func = $this->commands[$command]['function'];
         }
+
         return $this->$func($command, $options, $params);
     }
-
-    // }}}
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                PEAR-1.7.2/PEAR/Command/Config.xml                                                                  100644    1750    1750         6466 11014312742  11535                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                         PEAR-1.8.0/PEAR/Command/Config.xml                                                                  100777     764     764         6466      100777  11367                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <config-show>
   <summary>Show All Settings</summary>
   <function>doConfigShow</function>
@@ -9513,25 +9835,19 @@ PEAR installation (using the --remoteconfig option of install, upgrade,
 and uninstall).
 </doc>
  </config-create>
-</commands>                                                                                                                                                                                                          PEAR-1.7.2/PEAR/Command/Config.php                                                                  100644    1750    1750        36251 11014312742  11537                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                          PEAR-1.8.0/PEAR/Command/Config.php                                                                  100664     764     764        35663      100664  11365                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Config (config-show, config-get, config-set, config-help, config-create commands)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Config.php,v 1.56 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Config.php,v 1.61 2009/03/26 21:36:32 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -9548,16 +9864,14 @@ require_once 'PEAR/Command/Common.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Command_Config extends PEAR_Command_Common
 {
-    // {{{ properties
-
     var $commands = array(
         'config-show' => array(
             'summary' => 'Show All Settings',
@@ -9651,9 +9965,6 @@ and uninstall).
             ),
         );
 
-    // }}}
-    // {{{ constructor
-
     /**
      * PEAR_Command_Config constructor.
      *
@@ -9664,22 +9975,18 @@ and uninstall).
         parent::PEAR_Command_Common($ui, $config);
     }
 
-    // }}}
-
-    // {{{ doConfigShow()
-
     function doConfigShow($command, $options, $params)
     {
+        $layer = null;
         if (is_array($params)) {
-            $layer = isset($params[0]) ? $params[0] : NULL;
-        } else {
-            $layer = NULL;
+            $layer = isset($params[0]) ? $params[0] : null;
         }
 
         // $params[0] -> the layer
         if ($error = $this->_checkLayer($layer)) {
             return $this->raiseError("config-show:$error");
         }
+
         $keys = $this->config->getKeys();
         sort($keys);
         $channel = isset($options['channel']) ? $options['channel'] :
@@ -9688,6 +9995,8 @@ and uninstall).
         if (!$reg->channelExists($channel)) {
             return $this->raiseError('Channel "' . $channel . '" does not exist');
         }
+
+        $channel = $reg->channelName($channel);
         $data = array('caption' => 'Configuration (channel ' . $channel . '):');
         foreach ($keys as $key) {
             $type = $this->config->getType($key);
@@ -9695,13 +10004,16 @@ and uninstall).
             if ($type == 'password' && $value) {
                 $value = '********';
             }
+
             if ($value === false) {
                 $value = 'false';
             } elseif ($value === true) {
                 $value = 'true';
             }
+
             $data['data'][$this->config->getGroup($key)][] = array($this->config->getPrompt($key) , $key, $value);
         }
+
         foreach ($this->config->getLayers() as $layer) {
             $data['data']['Config Files'][] = array(ucfirst($layer) . ' Configuration File', 'Filename' , $this->config->getConfFile($layer));
         }
@@ -9710,21 +10022,13 @@ and uninstall).
         return true;
     }
 
-    // }}}
-    // {{{ doConfigGet()
-
     function doConfigGet($command, $options, $params)
     {
-        if (!is_array($params)) {
-            $args_cnt = 0;
-        } else {
-            $args_cnt  = count($params);
-        }
-
+        $args_cnt = is_array($params) ? count($params) : 0;
         switch ($args_cnt) {
             case 1:
                 $config_key = $params[0];
-                $layer = NULL;
+                $layer = null;
                 break;
             case 2:
                 $config_key = $params[0];
@@ -9740,73 +10044,79 @@ and uninstall).
 
         $channel = isset($options['channel']) ? $options['channel'] : $this->config->get('default_channel');
         $reg = &$this->config->getRegistry();
-
         if (!$reg->channelExists($channel)) {
             return $this->raiseError('Channel "' . $channel . '" does not exist');
         }
 
         $this->ui->outputData($this->config->get($config_key, $layer, $channel), $command);
-
         return true;
     }
 
-    // }}}
-    // {{{ doConfigSet()
-
     function doConfigSet($command, $options, $params)
     {
         // $param[0] -> a parameter to set
         // $param[1] -> the value for the parameter
         // $param[2] -> the layer
         $failmsg = '';
-        if (sizeof($params) < 2 || sizeof($params) > 3) {
+        if (count($params) < 2 || count($params) > 3) {
             $failmsg .= "config-set expects 2 or 3 parameters";
             return PEAR::raiseError($failmsg);
         }
+
         if (isset($params[2]) && ($error = $this->_checkLayer($params[2]))) {
             $failmsg .= $error;
             return PEAR::raiseError("config-set:$failmsg");
         }
-        $channel = isset($options['channel']) ? $options['channel'] :
-            $this->config->get('default_channel');
+
+        $channel = isset($options['channel']) ? $options['channel'] : $this->config->get('default_channel');
         $reg = &$this->config->getRegistry();
         if (!$reg->channelExists($channel)) {
             return $this->raiseError('Channel "' . $channel . '" does not exist');
         }
-        if ($params[0] == 'default_channel') {
-            if (!$reg->channelExists($params[1])) {
-                return $this->raiseError('Channel "' . $params[1] . '" does not exist');
-            }
+
+        $channel = $reg->channelName($channel);
+        if ($params[0] == 'default_channel' && !$reg->channelExists($params[1])) {
+            return $this->raiseError('Channel "' . $params[1] . '" does not exist');
+        }
+
+        if ($params[0] == 'preferred_mirror' && !$reg->channelExists($params[1])) {
+            $msg  = 'Channel Mirror "' . $params[1] . '" does not exist';
+            $msg .= ' in your registry for channel "' . $channel . '".';
+            $msg .= "\n" . 'Attempt to run "pear channel-update ' . $channel .'"';
+            $msg .= ' if you believe this mirror should exist as you may';
+            $msg .= ' have outdated channel information.';
+            return $this->raiseError($msg);
         }
+
         if (count($params) == 2) {
             array_push($params, 'user');
             $layer = 'user';
         } else {
             $layer = $params[2];
         }
+
         array_push($params, $channel);
-        if (!call_user_func_array(array(&$this->config, 'set'), $params))
-        {
+        if (!call_user_func_array(array(&$this->config, 'set'), $params)) {
             array_pop($params);
             $failmsg = "config-set (" . implode(", ", $params) . ") failed, channel $channel";
         } else {
             $this->config->store($layer);
         }
+
         if ($failmsg) {
             return $this->raiseError($failmsg);
         }
+
         $this->ui->outputData('config-set succeeded', $command);
         return true;
     }
 
-    // }}}
-    // {{{ doConfigHelp()
-
     function doConfigHelp($command, $options, $params)
     {
         if (empty($params)) {
             $params = $this->config->getKeys();
         }
+
         $data['caption']  = "Config help" . ((count($params) == 1) ? " for $params[0]" : '');
         $data['headline'] = array('Name', 'Type', 'Description');
         $data['border']   = true;
@@ -9817,20 +10127,20 @@ and uninstall).
                 $docs = rtrim($docs) . "\nValid set: " .
                     implode(' ', $this->config->getSetValues($name));
             }
+
             $data['data'][] = array($name, $type, $docs);
         }
+
         $this->ui->outputData($data, $command);
     }
 
-    // }}}
-    // {{{ doConfigCreate()
-
     function doConfigCreate($command, $options, $params)
     {
         if (count($params) != 2) {
             return PEAR::raiseError('config-create: must have 2 parameters, root path and ' .
                 'filename to save as');
         }
+
         $root = $params[0];
         // Clean up the DIRECTORY_SEPARATOR mess
         $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
@@ -9838,30 +10148,32 @@ and uninstall).
                              array('/', '/', '/'),
                             $root);
         if ($root{0} != '/') {
-            if (isset($options['windows'])) {
-                if (!preg_match('/^[A-Za-z]:/', $root)) {
-                    return PEAR::raiseError('Root directory must be an absolute path beginning ' .
-                        'with "\\" or "C:\\", was: "' . $root . '"');
-                }
-            } else {
+            if (!isset($options['windows'])) {
                 return PEAR::raiseError('Root directory must be an absolute path beginning ' .
                     'with "/", was: "' . $root . '"');
             }
+
+            if (!preg_match('/^[A-Za-z]:/', $root)) {
+                return PEAR::raiseError('Root directory must be an absolute path beginning ' .
+                    'with "\\" or "C:\\", was: "' . $root . '"');
+            }
         }
+
         $windows = isset($options['windows']);
         if ($windows) {
             $root = str_replace('/', '\\', $root);
         }
-        if (!file_exists($params[1])) {
-            if (!@touch($params[1])) {
-                return PEAR::raiseError('Could not create "' . $params[1] . '"');
-            }
+
+        if (!file_exists($params[1]) && !@touch($params[1])) {
+            return PEAR::raiseError('Could not create "' . $params[1] . '"');
         }
+
         $params[1] = realpath($params[1]);
         $config = &new PEAR_Config($params[1], '#no#system#config#', false, false);
         if ($root{strlen($root) - 1} == '/') {
             $root = substr($root, 0, strlen($root) - 1);
         }
+
         $config->noRegistry();
         $config->set('php_dir', $windows ? "$root\\pear\\php" : "$root/pear/php", 'user');
         $config->set('data_dir', $windows ? "$root\\pear\\data" : "$root/pear/data");
@@ -9880,8 +10192,6 @@ and uninstall).
             $command);
     }
 
-    // }}}
-
     function _showConfig(&$config)
     {
         $params = array('user');
@@ -9895,6 +10205,7 @@ and uninstall).
             if ($type == 'password' && $value) {
                 $value = '********';
             }
+
             if ($value === false) {
                 $value = 'false';
             } elseif ($value === true) {
@@ -9903,6 +10214,7 @@ and uninstall).
             $data['data'][$config->getGroup($key)][] =
                 array($config->getPrompt($key) , $key, $value);
         }
+
         foreach ($config->getLayers() as $layer) {
             $data['data']['Config Files'][] =
                 array(ucfirst($layer) . ' Configuration File', 'Filename' ,
@@ -9912,7 +10224,6 @@ and uninstall).
         $this->ui->outputData($data, 'config-show');
         return true;
     }
-    // {{{ _checkLayer()
 
     /**
      * Checks if a layer is defined or not
@@ -9928,14 +10239,10 @@ and uninstall).
                 return " only the layers: \"" . implode('" or "', $layers) . "\" are supported";
             }
         }
+
         return false;
     }
-
-    // }}}
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                       PEAR-1.7.2/PEAR/Command/Install.xml                                                                 100644    1750    1750        17503 11014312742  11750                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                             PEAR-1.8.0/PEAR/Command/Install.xml                                                                 100775     764     764        20576      100775  11602                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <install>
   <summary>Install Package</summary>
   <function>doInstall</function>
@@ -9963,7 +10270,7 @@ and uninstall).
    </soft>
    <nobuild>
     <shortopt>B</shortopt>
-    <doc>don&apos;t build C extensions</doc>
+    <doc>don&#039;t build C extensions</doc>
    </nobuild>
    <nocompress>
     <shortopt>Z</shortopt>
@@ -9971,15 +10278,16 @@ and uninstall).
    </nocompress>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT), use packagingroot for RPM</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT), use packagingroot for RPM</doc>
    </installroot>
    <packagingroot>
     <shortopt>P</shortopt>
-    <arg>DIR</arg>
     <doc>root directory used when packaging files, like RPM packaging</doc>
+    <arg>DIR</arg>
    </packagingroot>
    <ignore-errors>
+    <shortopt></shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <alldeps>
@@ -10012,7 +10320,7 @@ anywhere on the net.
 package.xml.  Useful for testing, or for wrapping a PEAR package in
 another package manager such as RPM.
 
-&quot;Package[-version/state][.tar]&quot; : queries your default channel&apos;s server
+&quot;Package[-version/state][.tar]&quot; : queries your default channel&#039;s server
 ({config master_server}) and downloads the newest package with
 the preferred quality/state ({config preferred_state}).
 
@@ -10032,6 +10340,11 @@ four ways of specifying packages.
   <function>doInstall</function>
   <shortcut>up</shortcut>
   <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>upgrade packages from a specific channel</doc>
+    <arg>CHAN</arg>
+   </channel>
    <force>
     <shortopt>f</shortopt>
     <doc>overwrite newer installed packages</doc>
@@ -10050,7 +10363,7 @@ four ways of specifying packages.
    </register-only>
    <nobuild>
     <shortopt>B</shortopt>
-    <doc>don&apos;t build C extensions</doc>
+    <doc>don&#039;t build C extensions</doc>
    </nobuild>
    <nocompress>
     <shortopt>Z</shortopt>
@@ -10058,10 +10371,11 @@ four ways of specifying packages.
    </nocompress>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT)</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
    </installroot>
    <ignore-errors>
+    <shortopt></shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <alldeps>
@@ -10093,10 +10407,15 @@ More than one package may be specified at once.
 </doc>
  </upgrade>
  <upgrade-all>
-  <summary>Upgrade All Packages</summary>
-  <function>doInstall</function>
+  <summary>Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters]</summary>
+  <function>doUpgradeAll</function>
   <shortcut>ua</shortcut>
   <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>upgrade packages from a specific channel</doc>
+    <arg>CHAN</arg>
+   </channel>
    <nodeps>
     <shortopt>n</shortopt>
     <doc>ignore dependencies, upgrade anyway</doc>
@@ -10107,7 +10426,7 @@ More than one package may be specified at once.
    </register-only>
    <nobuild>
     <shortopt>B</shortopt>
-    <doc>don&apos;t build C extensions</doc>
+    <doc>don&#039;t build C extensions</doc>
    </nobuild>
    <nocompress>
     <shortopt>Z</shortopt>
@@ -10115,17 +10434,21 @@ More than one package may be specified at once.
    </nocompress>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT), use packagingroot for RPM</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
    </installroot>
    <ignore-errors>
+    <shortopt></shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <loose>
+    <shortopt></shortopt>
     <doc>do not check for recommended dependency version</doc>
    </loose>
   </options>
   <doc>
+WARNING: This function is deprecated in favor of using the upgrade command with no params
+
 Upgrades all packages that have a newer release available.  Upgrades are
 done only if there is a release available of the state specified in
 &quot;preferred_state&quot; (currently {config preferred_state}), or a state considered
@@ -10147,10 +10470,11 @@ more stable.
    </register-only>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT)</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
    </installroot>
    <ignore-errors>
+    <shortopt>f</shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <offline>
@@ -10171,11 +10495,11 @@ channel not in your default channel ({config default_channel})
   <options>
    <destination>
     <shortopt>d</shortopt>
-    <arg>DIR</arg>
     <doc>Optional destination directory for unpacking (defaults to current path or &quot;ext&quot; if exists)</doc>
+    <arg>DIR</arg>
    </destination>
    <force>
-    <shortopt>f</shortopt>
+    <shortopt></shortopt>
     <doc>Force the unpacking even if there were errors in the package</doc>
    </force>
   </options>
@@ -10193,25 +10517,19 @@ package if needed.
 Run post-installation scripts in package &lt;package&gt;, if any exist.
 </doc>
  </run-scripts>
-</commands>                                                                                                                                                                                             PEAR-1.7.2/PEAR/Command/Install.php                                                                 100644    1750    1750       141702 11014312742  11756                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                  PEAR-1.8.0/PEAR/Command/Install.php                                                                 100664     764     764       142453      100664  11602                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Install (install, upgrade, upgrade-all, uninstall, bundle, run-scripts commands)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Install.php,v 1.141 2008/05/13 18:32:29 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Install.php,v 1.153 2009/03/08 04:01:11 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -10229,9 +10547,9 @@ require_once 'PEAR/Command/Common.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -10335,6 +10653,11 @@ four ways of specifying packages.
             'function' => 'doInstall',
             'shortcut' => 'up',
             'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'upgrade packages from a specific channel',
+                    'arg' => 'CHAN',
+                    ),
                 'force' => array(
                     'shortopt' => 'f',
                     'doc' => 'overwrite newer installed packages',
@@ -10395,10 +10718,15 @@ upgrade anyway).
 More than one package may be specified at once.
 '),
         'upgrade-all' => array(
-            'summary' => 'Upgrade All Packages',
+            'summary' => 'Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters]',
             'function' => 'doUpgradeAll',
             'shortcut' => 'ua',
             'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'upgrade packages from a specific channel',
+                    'arg' => 'CHAN',
+                    ),
                 'nodeps' => array(
                     'shortopt' => 'n',
                     'doc' => 'ignore dependencies, upgrade anyway',
@@ -10428,6 +10756,8 @@ More than one package may be specified at once.
                     ),
                 ),
             'doc' => '
+WARNING: This function is deprecated in favor of using the upgrade command with no params
+
 Upgrades all packages that have a newer release available.  Upgrades are
 done only if there is a release available of the state specified in
 "preferred_state" (currently {config preferred_state}), or a state considered
@@ -10641,70 +10971,71 @@ Run post-installation scripts in package <package>, if any exist.
 
     function _parseIni($filename)
     {
-        if (file_exists($filename)) {
-            if (filesize($filename) > 300000) {
-                return PEAR::raiseError('php.ini "' . $filename . '" is too large, aborting');
+        if (!file_exists($filename)) {
+            return PEAR::raiseError('php.ini "' . $filename . '" does not exist');
+        }
+
+        if (filesize($filename) > 300000) {
+            return PEAR::raiseError('php.ini "' . $filename . '" is too large, aborting');
+        }
+
+        ob_start();
+        phpinfo(INFO_GENERAL);
+        $info = ob_get_contents();
+        ob_end_clean();
+        $debug = function_exists('leak') ? '_debug' : '';
+        $ts = preg_match('/Thread Safety.+enabled/', $info) ? '_ts' : '';
+        $zend_extension_line = 'zend_extension' . $debug . $ts;
+        $all = @file($filename);
+        if (!$all) {
+            return PEAR::raiseError('php.ini "' . $filename .'" could not be read');
+        }
+        $zend_extensions = $extensions = array();
+        // assume this is right, but pull from the php.ini if it is found
+        $extension_dir = ini_get('extension_dir');
+        foreach ($all as $linenum => $line) {
+            $line = trim($line);
+            if (!$line) {
+                continue;
             }
-            ob_start();
-            phpinfo(INFO_GENERAL);
-            $info = ob_get_contents();
-            ob_end_clean();
-            $debug = function_exists('leak') ? '_debug' : '';
-            $ts = preg_match('/Thread Safety.+enabled/', $info) ? '_ts' : '';
-            $zend_extension_line = 'zend_extension' . $debug . $ts;
-            $all = @file($filename);
-            if (!$all) {
-                return PEAR::raiseError('php.ini "' . $filename .'" could not be read');
-            }
-            $zend_extensions = $extensions = array();
-            // assume this is right, but pull from the php.ini if it is found
-            $extension_dir = ini_get('extension_dir');
-            foreach ($all as $linenum => $line) {
-                $line = trim($line);
-                if (!$line) {
+            if ($line[0] == ';') {
+                continue;
+            }
+            if (strtolower(substr($line, 0, 13)) == 'extension_dir') {
+                $line = trim(substr($line, 13));
+                if ($line[0] == '=') {
+                    $x = trim(substr($line, 1));
+                    $x = explode(';', $x);
+                    $extension_dir = str_replace('"', '', array_shift($x));
                     continue;
                 }
-                if ($line[0] == ';') {
+            }
+            if (strtolower(substr($line, 0, 9)) == 'extension') {
+                $line = trim(substr($line, 9));
+                if ($line[0] == '=') {
+                    $x = trim(substr($line, 1));
+                    $x = explode(';', $x);
+                    $extensions[$linenum] = str_replace('"', '', array_shift($x));
                     continue;
                 }
-                if (strtolower(substr($line, 0, 13)) == 'extension_dir') {
-                    $line = trim(substr($line, 13));
-                    if ($line[0] == '=') {
-                        $x = trim(substr($line, 1));
-                        $x = explode(';', $x);
-                        $extension_dir = str_replace('"', '', array_shift($x));
-                        continue;
-                    }
-                }
-                if (strtolower(substr($line, 0, 9)) == 'extension') {
-                    $line = trim(substr($line, 9));
-                    if ($line[0] == '=') {
-                        $x = trim(substr($line, 1));
-                        $x = explode(';', $x);
-                        $extensions[$linenum] = str_replace('"', '', array_shift($x));
-                        continue;
-                    }
-                }
-                if (strtolower(substr($line, 0, strlen($zend_extension_line))) ==
-                      $zend_extension_line) {
-                    $line = trim(substr($line, strlen($zend_extension_line)));
-                    if ($line[0] == '=') {
-                        $x = trim(substr($line, 1));
-                        $x = explode(';', $x);
-                        $zend_extensions[$linenum] = str_replace('"', '', array_shift($x));
-                        continue;
-                    }
+            }
+            if (strtolower(substr($line, 0, strlen($zend_extension_line))) ==
+                  $zend_extension_line) {
+                $line = trim(substr($line, strlen($zend_extension_line)));
+                if ($line[0] == '=') {
+                    $x = trim(substr($line, 1));
+                    $x = explode(';', $x);
+                    $zend_extensions[$linenum] = str_replace('"', '', array_shift($x));
+                    continue;
                 }
             }
-            return array(
-                'extensions' => $extensions,
-                'zend_extensions' => $zend_extensions,
-                'extension_dir' => $extension_dir,
-                'all' => $all,
-            );
-        } else {
-            return PEAR::raiseError('php.ini "' . $filename . '" does not exist');
         }
+        return array(
+            'extensions' => $extensions,
+            'zend_extensions' => $zend_extensions,
+            'extension_dir' => $extension_dir,
+            'all' => $all,
+        );
     }
 
     // {{{ doInstall()
@@ -10714,18 +11045,31 @@ Run post-installation scripts in package <package>, if any exist.
         if (!class_exists('PEAR_PackageFile')) {
             require_once 'PEAR/PackageFile.php';
         }
+
+        if (isset($options['installroot']) && isset($options['packagingroot'])) {
+            return $this->raiseError('ERROR: cannot use both --installroot and --packagingroot');
+        }
+
+        $reg = &$this->config->getRegistry();
+        $channel = isset($options['channel']) ? $options['channel'] : $this->config->get('default_channel');
+        if (!$reg->channelExists($channel)) {
+            return $this->raiseError('Channel "' . $channel . '" does not exist');
+        }
+
         if (empty($this->installer)) {
             $this->installer = &$this->getInstaller($this->ui);
         }
+
         if ($command == 'upgrade' || $command == 'upgrade-all') {
+            // If people run the upgrade command but pass nothing, emulate a upgrade-all
+            if ($command == 'upgrade' && empty($params)) {
+                return $this->doUpgradeAll($command, $options, $params);
+            }
             $options['upgrade'] = true;
         } else {
             $packages = $params;
         }
-        if (isset($options['installroot']) && isset($options['packagingroot'])) {
-            return $this->raiseError('ERROR: cannot use both --installroot and --packagingroot');
-        }
-        $reg = &$this->config->getRegistry();
+
         $instreg = &$reg; // instreg used to check if package is installed
         if (isset($options['packagingroot']) && !isset($options['upgrade'])) {
             $packrootphp_dir = $this->installer->_prependPath(
@@ -10737,30 +11081,35 @@ Run post-installation scripts in package <package>, if any exist.
                 $this->ui->outputData('using package root: ' . $options['packagingroot']);
             }
         }
+
         $abstractpackages = array();
-        $otherpackages = array();
+        $otherpackages    = array();
         // parse params
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        foreach($params as $param) {
+
+        foreach ($params as $param) {
             if (strpos($param, 'http://') === 0) {
                 $otherpackages[] = $param;
                 continue;
             }
+
             if (strpos($param, 'channel://') === false && @file_exists($param)) {
                 if (isset($options['force'])) {
                     $otherpackages[] = $param;
                     continue;
                 }
+
                 $pkg = new PEAR_PackageFile($this->config);
-                $pf = $pkg->fromAnyFile($param, PEAR_VALIDATE_DOWNLOADING);
+                $pf  = $pkg->fromAnyFile($param, PEAR_VALIDATE_DOWNLOADING);
                 if (PEAR::isError($pf)) {
                     $otherpackages[] = $param;
                     continue;
                 }
-                if ($reg->packageExists($pf->getPackage(), $pf->getChannel()) &&
-                      version_compare($pf->getVersion(),
-                      $reg->packageInfo($pf->getPackage(), 'version', $pf->getChannel()),
-                      '<=')) {
+
+                $exists   = $reg->packageExists($pf->getPackage(), $pf->getChannel());
+                $pversion = $reg->packageInfo($pf->getPackage(), 'version', $pf->getChannel());
+                $version_compare = version_compare($pf->getVersion(), $pversion, '<=');
+                if ($exists && $version_compare) {
                     if ($this->config->get('verbose')) {
                         $this->ui->outputData('Ignoring installed package ' .
                             $reg->parsedPackageNameToString(
@@ -10772,7 +11121,8 @@ Run post-installation scripts in package <package>, if any exist.
                 $otherpackages[] = $param;
                 continue;
             }
-            $e = $reg->parsePackageName($param, $this->config->get('default_channel'));
+
+            $e = $reg->parsePackageName($param, $channel);
             if (PEAR::isError($e)) {
                 $otherpackages[] = $param;
             } else {
@@ -10786,20 +11136,26 @@ Run post-installation scripts in package <package>, if any exist.
         if (count($abstractpackages) && !isset($options['force'])) {
             // when not being forced, only do necessary upgrades/installs
             if (isset($options['upgrade'])) {
-                $abstractpackages = $this->_filterUptodatePackages($abstractpackages,
-                    $command);
+                $abstractpackages = $this->_filterUptodatePackages($abstractpackages, $command);
             } else {
+                $count = count($abstractpackages);
                 foreach ($abstractpackages as $i => $package) {
                     if (isset($package['group'])) {
                         // do not filter out install groups
                         continue;
                     }
+
                     if ($instreg->packageExists($package['package'], $package['channel'])) {
-                        if ($this->config->get('verbose')) {
-                            $this->ui->outputData('Ignoring installed package ' .
-                                $reg->parsedPackageNameToString($package, true));
+                        if ($count > 1) {
+                            if ($this->config->get('verbose')) {
+                                $this->ui->outputData('Ignoring installed package ' .
+                                    $reg->parsedPackageNameToString($package, true));
+                            }
+                            unset($abstractpackages[$i]);
+                        } elseif ($count === 1) {
+                            // Lets try to upgrade it since it's already installed
+                            $options['upgrade'] = true;
                         }
-                        unset($abstractpackages[$i]);
                     }
                 }
             }
@@ -10810,37 +11166,47 @@ Run post-installation scripts in package <package>, if any exist.
                 array_map(array($reg, 'parsedPackageNameToString'), $abstractpackages);
         }
 
-
         $packages = array_merge($abstractpackages, $otherpackages);
         if (!count($packages)) {
-            $this->ui->outputData('Nothing to ' . $command);
+            $c = '';
+            if (isset($options['channel'])){
+                $c .= ' in channel "' . $options['channel'] . '"';
+            }
+            $this->ui->outputData('Nothing to ' . $command . $c);
             return true;
         }
 
         $this->downloader = &$this->getDownloader($this->ui, $options, $this->config);
-        $errors = array();
-        $binaries = array();
-        $downloaded = array();
+        $errors = $downloaded = $binaries   = array();
         $downloaded = &$this->downloader->download($packages);
         if (PEAR::isError($downloaded)) {
             return $this->raiseError($downloaded);
         }
+
         $errors = $this->downloader->getErrorMsgs();
         if (count($errors)) {
             $err = array();
             $err['data'] = array();
             foreach ($errors as $error) {
-                $err['data'][] = array($error);
+                if ($error !== null) {
+                    $err['data'][] = array($error);
+                }
+            }
+
+            if (!empty($err['data'])) {
+                $err['headline'] = 'Install Errors';
+                $this->ui->outputData($err);
             }
-            $err['headline'] = 'Install Errors';
-            $this->ui->outputData($err);
+
             if (!count($downloaded)) {
                 return $this->raiseError("$command failed");
             }
         }
+
         $data = array(
             'headline' => 'Packages that would be Installed'
         );
+
         if (isset($options['pretend'])) {
             foreach ($downloaded as $package) {
                 $data['data'][] = array($reg->parsedPackageNameToString($package->getParsedPackage()));
@@ -10848,14 +11214,16 @@ Run post-installation scripts in package <package>, if any exist.
             $this->ui->outputData($data, 'pretend');
             return true;
         }
+
         $this->installer->setOptions($options);
         $this->installer->sortPackagesForInstall($downloaded);
         if (PEAR::isError($err = $this->installer->setDownloadedPackages($downloaded))) {
             $this->raiseError($err->getMessage());
             return true;
         }
+
         $extrainfo = array();
-        $binaries = array();
+        $binaries  = array();
         foreach ($downloaded as $param) {
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
             $info = $this->installer->install($param, $options);
@@ -10868,145 +11236,157 @@ Run post-installation scripts in package <package>, if any exist.
                         $this->ui->outputData('ERROR: ' .$oldinfo->getMessage());
                         continue;
                     }
+
                     // we just installed a different package than requested,
                     // let's change the param and info so that the rest of this works
                     $param = $info[0];
-                    $info = $info[1];
+                    $info  = $info[1];
                 }
             }
-            if (is_array($info)) {
-                if ($param->getPackageType() == 'extsrc' ||
-                      $param->getPackageType() == 'extbin' ||
-                      $param->getPackageType() == 'zendextsrc' ||
-                      $param->getPackageType() == 'zendextbin') {
-                    $pkg = &$param->getPackageFile();
-                    if ($instbin = $pkg->getInstalledBinary()) {
-                        $instpkg = &$instreg->getPackage($instbin, $pkg->getChannel());
-                    } else {
-                        $instpkg = &$instreg->getPackage($pkg->getPackage(), $pkg->getChannel());
+
+            if (!is_array($info)) {
+                return $this->raiseError("$command failed");
+            }
+
+            if ($param->getPackageType() == 'extsrc' ||
+                  $param->getPackageType() == 'extbin' ||
+                  $param->getPackageType() == 'zendextsrc' ||
+                  $param->getPackageType() == 'zendextbin') {
+                $pkg = &$param->getPackageFile();
+                if ($instbin = $pkg->getInstalledBinary()) {
+                    $instpkg = &$instreg->getPackage($instbin, $pkg->getChannel());
+                } else {
+                    $instpkg = &$instreg->getPackage($pkg->getPackage(), $pkg->getChannel());
+                }
+
+                foreach ($instpkg->getFilelist() as $name => $atts) {
+                    $pinfo = pathinfo($atts['installed_as']);
+                    if (!isset($pinfo['extension']) ||
+                          in_array($pinfo['extension'], array('c', 'h'))) {
+                        continue; // make sure we don't match php_blah.h
                     }
 
-                    foreach ($instpkg->getFilelist() as $name => $atts) {
-                        $pinfo = pathinfo($atts['installed_as']);
-                        if (!isset($pinfo['extension']) ||
-                              in_array($pinfo['extension'], array('c', 'h'))) {
-                            continue; // make sure we don't match php_blah.h
-                        }
-                        if ((strpos($pinfo['basename'], 'php_') === 0 &&
-                              $pinfo['extension'] == 'dll') ||
-                              // most unices
-                              $pinfo['extension'] == 'so' ||
-                              // hp-ux
-                              $pinfo['extension'] == 'sl') {
-                            $binaries[] = array($atts['installed_as'], $pinfo);
-                            break;
-                        }
+                    if ((strpos($pinfo['basename'], 'php_') === 0 &&
+                          $pinfo['extension'] == 'dll') ||
+                          // most unices
+                          $pinfo['extension'] == 'so' ||
+                          // hp-ux
+                          $pinfo['extension'] == 'sl') {
+                        $binaries[] = array($atts['installed_as'], $pinfo);
+                        break;
                     }
-                    if (count($binaries)) {
-                        foreach ($binaries as $pinfo) {
-                            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-                            $ret = $this->enableExtension(array($pinfo[0]), $param->getPackageType());
-                            PEAR::staticPopErrorHandling();
-                            if (PEAR::isError($ret)) {
-                                $extrainfo[] = $ret->getMessage();
-                                if ($param->getPackageType() == 'extsrc' ||
-                                      $param->getPackageType() == 'extbin') {
-                                    $exttype = 'extension';
-                                } else {
-                                    ob_start();
-                                    phpinfo(INFO_GENERAL);
-                                    $info = ob_get_contents();
-                                    ob_end_clean();
-                                    $debug = function_exists('leak') ? '_debug' : '';
-                                    $ts = preg_match('Thread Safety.+enabled', $info) ? '_ts' : '';
-                                    $exttype = 'zend_extension' . $debug . $ts;
-                                }
-                                $extrainfo[] = 'You should add "' . $exttype . '=' .
-                                    $pinfo[1]['basename'] . '" to php.ini';
+                }
+
+                if (count($binaries)) {
+                    foreach ($binaries as $pinfo) {
+                        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                        $ret = $this->enableExtension(array($pinfo[0]), $param->getPackageType());
+                        PEAR::staticPopErrorHandling();
+                        if (PEAR::isError($ret)) {
+                            $extrainfo[] = $ret->getMessage();
+                            if ($param->getPackageType() == 'extsrc' ||
+                                  $param->getPackageType() == 'extbin') {
+                                $exttype = 'extension';
                             } else {
-                                $extrainfo[] = 'Extension ' . $instpkg->getProvidesExtension() .
-                                    ' enabled in php.ini';
+                                ob_start();
+                                phpinfo(INFO_GENERAL);
+                                $info = ob_get_contents();
+                                ob_end_clean();
+                                $debug = function_exists('leak') ? '_debug' : '';
+                                $ts = preg_match('Thread Safety.+enabled', $info) ? '_ts' : '';
+                                $exttype = 'zend_extension' . $debug . $ts;
                             }
+                            $extrainfo[] = 'You should add "' . $exttype . '=' .
+                                $pinfo[1]['basename'] . '" to php.ini';
+                        } else {
+                            $extrainfo[] = 'Extension ' . $instpkg->getProvidesExtension() .
+                                ' enabled in php.ini';
                         }
                     }
                 }
-                if ($this->config->get('verbose') > 0) {
-                    $channel = $param->getChannel();
-                    $label = $reg->parsedPackageNameToString(
-                        array(
-                            'channel' => $channel,
-                            'package' => $param->getPackage(),
-                            'version' => $param->getVersion(),
-                        ));
-                    $out = array('data' => "$command ok: $label");
-                    if (isset($info['release_warnings'])) {
-                        $out['release_warnings'] = $info['release_warnings'];
-                    }
-                    $this->ui->outputData($out, $command);
-                    if (!isset($options['register-only']) && !isset($options['offline'])) {
-                        if ($this->config->isDefinedLayer('ftp')) {
-                            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-                            $info = $this->installer->ftpInstall($param);
-                            PEAR::staticPopErrorHandling();
-                            if (PEAR::isError($info)) {
-                                $this->ui->outputData($info->getMessage());
-                                $this->ui->outputData("remote install failed: $label");
-                            } else {
-                                $this->ui->outputData("remote install ok: $label");
-                            }
+            }
+
+            if ($this->config->get('verbose') > 0) {
+                $chan = $param->getChannel();
+                $label = $reg->parsedPackageNameToString(
+                    array(
+                        'channel' => $chan,
+                        'package' => $param->getPackage(),
+                        'version' => $param->getVersion(),
+                    ));
+                $out = array('data' => "$command ok: $label");
+                if (isset($info['release_warnings'])) {
+                    $out['release_warnings'] = $info['release_warnings'];
+                }
+                $this->ui->outputData($out, $command);
+
+                if (!isset($options['register-only']) && !isset($options['offline'])) {
+                    if ($this->config->isDefinedLayer('ftp')) {
+                        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                        $info = $this->installer->ftpInstall($param);
+                        PEAR::staticPopErrorHandling();
+                        if (PEAR::isError($info)) {
+                            $this->ui->outputData($info->getMessage());
+                            $this->ui->outputData("remote install failed: $label");
+                        } else {
+                            $this->ui->outputData("remote install ok: $label");
                         }
                     }
                 }
-                $deps = $param->getDeps();
-                if ($deps) {
-                    if (isset($deps['group'])) {
-                        $groups = $deps['group'];
-                        if (!isset($groups[0])) {
-                            $groups = array($groups);
-                        }
-                        foreach ($groups as $group) {
-                            if ($group['attribs']['name'] == 'default') {
-                                // default group is always installed, unless the user
-                                // explicitly chooses to install another group
-                                continue;
-                            }
-                            $extrainfo[] = $param->getPackage() . ': Optional feature ' .
-                                $group['attribs']['name'] . ' available (' .
-                                $group['attribs']['hint'] . ')';
-                        }
-                        $extrainfo[] = $param->getPackage() .
-                            ': To install optional features use "pear install ' .
-                            $reg->parsedPackageNameToString(
-                                array('package' => $param->getPackage(),
-                                      'channel' => $param->getChannel()), true) .
-                                  '#featurename"';
-                    }
-                }
-                $pkg = &$instreg->getPackage($param->getPackage(), $param->getChannel());
-                // $pkg may be NULL if install is a 'fake' install via --packagingroot
-                if (is_object($pkg)) {
-                    $pkg->setConfig($this->config);
-                    if ($list = $pkg->listPostinstallScripts()) {
-                        $pn = $reg->parsedPackageNameToString(array('channel' =>
-                           $param->getChannel(), 'package' => $param->getPackage()), true);
-                        $extrainfo[] = $pn . ' has post-install scripts:';
-                        foreach ($list as $file) {
-                            $extrainfo[] = $file;
+            }
+
+            $deps = $param->getDeps();
+            if ($deps) {
+                if (isset($deps['group'])) {
+                    $groups = $deps['group'];
+                    if (!isset($groups[0])) {
+                        $groups = array($groups);
+                    }
+
+                    foreach ($groups as $group) {
+                        if ($group['attribs']['name'] == 'default') {
+                            // default group is always installed, unless the user
+                            // explicitly chooses to install another group
+                            continue;
                         }
-                        $extrainfo[] = $param->getPackage() .
-                            ': Use "pear run-scripts ' . $pn . '" to finish setup.';
-                        $extrainfo[] = 'DO NOT RUN SCRIPTS FROM UNTRUSTED SOURCES';
+                        $extrainfo[] = $param->getPackage() . ': Optional feature ' .
+                            $group['attribs']['name'] . ' available (' .
+                            $group['attribs']['hint'] . ')';
                     }
+
+                    $extrainfo[] = $param->getPackage() .
+                        ': To install optional features use "pear install ' .
+                        $reg->parsedPackageNameToString(
+                            array('package' => $param->getPackage(),
+                                  'channel' => $param->getChannel()), true) .
+                              '#featurename"';
+                }
+            }
+
+            $pkg = &$instreg->getPackage($param->getPackage(), $param->getChannel());
+            // $pkg may be NULL if install is a 'fake' install via --packagingroot
+            if (is_object($pkg)) {
+                $pkg->setConfig($this->config);
+                if ($list = $pkg->listPostinstallScripts()) {
+                    $pn = $reg->parsedPackageNameToString(array('channel' =>
+                       $param->getChannel(), 'package' => $param->getPackage()), true);
+                    $extrainfo[] = $pn . ' has post-install scripts:';
+                    foreach ($list as $file) {
+                        $extrainfo[] = $file;
+                    }
+                    $extrainfo[] = $param->getPackage() .
+                        ': Use "pear run-scripts ' . $pn . '" to finish setup.';
+                    $extrainfo[] = 'DO NOT RUN SCRIPTS FROM UNTRUSTED SOURCES';
                 }
-            } else {
-                return $this->raiseError("$command failed");
             }
         }
+
         if (count($extrainfo)) {
             foreach ($extrainfo as $info) {
                 $this->ui->outputData($info);
             }
         }
+
         return true;
     }
 
@@ -11016,22 +11396,29 @@ Run post-installation scripts in package <package>, if any exist.
     function doUpgradeAll($command, $options, $params)
     {
         $reg = &$this->config->getRegistry();
-        $toUpgrade = array();
-        foreach ($reg->listChannels() as $channel) {
+        $upgrade = array();
+
+        if (isset($options['channel'])) {
+            $channels = array($options['channel']);
+        } else {
+            $channels = $reg->listChannels();
+        }
+
+        foreach ($channels as $channel) {
             if ($channel == '__uri') {
                 continue;
             }
 
             // parse name with channel
             foreach ($reg->listPackages($channel) as $name) {
-                $toUpgrade[] = $reg->parsedPackageNameToString(array(
+                $upgrade[] = $reg->parsedPackageNameToString(array(
                         'channel' => $channel,
                         'package' => $name
                     ));
             }
         }
 
-        $err = $this->doInstall('upgrade-all', $options, $toUpgrade);
+        $err = $this->doInstall($command, $options, $upgrade);
         if (PEAR::isError($err)) {
             $this->ui->outputData($err->getMessage(), $command);
         }
@@ -11042,18 +11429,21 @@ Run post-installation scripts in package <package>, if any exist.
 
     function doUninstall($command, $options, $params)
     {
+        if (count($params) < 1) {
+            return $this->raiseError("Please supply the package(s) you want to uninstall");
+        }
+
         if (empty($this->installer)) {
             $this->installer = &$this->getInstaller($this->ui);
         }
+
         if (isset($options['remoteconfig'])) {
             $e = $this->config->readFTPConfigFile($options['remoteconfig']);
             if (!PEAR::isError($e)) {
                 $this->installer->setConfig($this->config);
             }
         }
-        if (sizeof($params) < 1) {
-            return $this->raiseError("Please supply the package(s) you want to uninstall");
-        }
+
         $reg = &$this->config->getRegistry();
         $newparams = array();
         $binaries = array();
@@ -11199,12 +11589,13 @@ Run post-installation scripts in package <package>, if any exist.
                 }
             } else {
                 $this->installer->popErrorHandling();
-                if (is_object($pkg)) {
-                    $pkg = $reg->parsedPackageNameToString($pkg);
+                if (!is_object($pkg)) {
+                    return $this->raiseError("uninstall failed: $pkg");
                 }
-                return $this->raiseError("uninstall failed: $pkg");
+                $pkg = $reg->parsedPackageNameToString($pkg);
             }
         }
+
         return true;
     }
 
@@ -11220,10 +11611,15 @@ Run post-installation scripts in package <package>, if any exist.
 
     function doBundle($command, $options, $params)
     {
-        $downloader = &$this->getDownloader($this->ui, array('force' => true, 'nodeps' => true,
-            'soft' => true, 'downloadonly' => true), $this->config);
+        $opts = array(
+            'force'        => true,
+            'nodeps'       => true,
+            'soft'         => true,
+            'downloadonly' => true
+        );
+        $downloader = &$this->getDownloader($this->ui, $opts, $this->config);
         $reg = &$this->config->getRegistry();
-        if (sizeof($params) < 1) {
+        if (count($params) < 1) {
             return $this->raiseError("Please supply the package you want to bundle");
         }
 
@@ -11233,12 +11629,9 @@ Run post-installation scripts in package <package>, if any exist.
             }
             $dest = realpath($options['destination']);
         } else {
-            $pwd = getcwd();
-            if (is_dir($pwd . DIRECTORY_SEPARATOR . 'ext')) {
-                $dest = $pwd . DIRECTORY_SEPARATOR . 'ext';
-            } else {
-                $dest = $pwd;
-            }
+            $pwd  = getcwd();
+            $dir  = $pwd . DIRECTORY_SEPARATOR . 'ext';
+            $dest = is_dir($dir) ? $dir : $pwd;
         }
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $err = $downloader->setDownloadDir($dest);
@@ -11277,6 +11670,7 @@ Run post-installation scripts in package <package>, if any exist.
         if (!isset($params[0])) {
             return $this->raiseError('run-scripts expects 1 parameter: a package name');
         }
+
         $reg = &$this->config->getRegistry();
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $parsed = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
@@ -11284,13 +11678,14 @@ Run post-installation scripts in package <package>, if any exist.
         if (PEAR::isError($parsed)) {
             return $this->raiseError($parsed);
         }
+
         $package = &$reg->getPackage($parsed['package'], $parsed['channel']);
-        if (is_object($package)) {
-            $package->setConfig($this->config);
-            $package->runPostinstallScripts();
-        } else {
+        if (!is_object($package)) {
             return $this->raiseError('Could not retrieve package "' . $params[0] . '" from registry');
         }
+
+        $package->setConfig($this->config);
+        $package->runPostinstallScripts();
         $this->ui->outputData('Install scripts complete', $command);
         return true;
     }
@@ -11307,47 +11702,47 @@ Run post-installation scripts in package <package>, if any exist.
         $latestReleases = array();
 
         $ret = array();
-        foreach($packages as $package) {
+        foreach ($packages as $package) {
             if (isset($package['group'])) {
                 $ret[] = $package;
                 continue;
             }
-            $channel = $package['channel'];
-            $name = $package['package'];
 
+            $channel = $package['channel'];
+            $name    = $package['package'];
             if (!$reg->packageExists($name, $channel)) {
                 $ret[] = $package;
                 continue;
             }
+
             if (!isset($latestReleases[$channel])) {
                 // fill in cache for this channel
                 $chan = &$reg->getChannel($channel);
                 if (PEAR::isError($chan)) {
                     return $this->raiseError($chan);
                 }
-                if ($chan->supportsREST($this->config->get('preferred_mirror',
-                                                           null, $channel)) &&
-                      $base = $chan->getBaseURL('REST1.0',
-                                                $this->config->get('preferred_mirror',
-                                                                   null, $channel)))
+
+                $preferred_mirror = $this->config->get('preferred_mirror', null, $channel);
+                if ($chan->supportsREST($preferred_mirror) &&
+                      $base = $chan->getBaseURL('REST1.0', $preferred_mirror))
                 {
                     $dorest = true;
-                } else {
-                    $dorest = false;
-                    $remote = &$this->config->getRemote($this->config);
                 }
+
                 PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                if (!isset($package['state'])) {
+                    $state = $this->config->get('preferred_state', null, $channel);
+                } else {
+                    $state = $package['state'];
+                }
+
                 if ($dorest) {
                     $rest = &$this->config->getREST('1.0', array());
                     $installed = array_flip($reg->listPackages($channel));
-                    $latest = $rest->listLatestUpgrades($base,
-                        $this->config->get('preferred_state', null, $channel), $installed,
-                        $channel, $reg);
-                } else {
-                    $latest = $remote->call("package.listLatestReleases",
-                        $this->config->get('preferred_state', null, $channel));
-                    unset($remote);
+
+                    $latest = $rest->listLatestUpgrades($base, $state, $installed, $channel, $reg);
                 }
+
                 PEAR::staticPopErrorHandling();
                 if (PEAR::isError($latest)) {
                     $this->ui->outputData('Error getting channel info from ' . $channel .
@@ -11359,14 +11754,16 @@ Run post-installation scripts in package <package>, if any exist.
             }
 
             // check package for latest release
-            if (isset($latestReleases[$channel][strtolower($name)])) {
+            $name_lower = strtolower($name);
+            if (isset($latestReleases[$channel][$name_lower])) {
                 // if not set, up to date
-                $inst_version = $reg->packageInfo($name, 'version', $channel);
-                $channel_version = $latestReleases[$channel][strtolower($name)]['version'];
-                if (version_compare($channel_version, $inst_version, "le")) {
+                $inst_version    = $reg->packageInfo($name, 'version', $channel);
+                $channel_version = $latestReleases[$channel][$name_lower]['version'];
+                if (version_compare($channel_version, $inst_version, 'le')) {
                     // installed version is up-to-date
                     continue;
                 }
+
                 // maintain BC
                 if ($command == 'upgrade-all') {
                     $this->ui->outputData(array('data' => 'Will upgrade ' .
@@ -11378,10 +11775,7 @@ Run post-installation scripts in package <package>, if any exist.
 
         return $ret;
     }
-
-}
-?>
-                                                              PEAR-1.7.2/PEAR/Command/Mirror.xml                                                                  100644    1750    1750         1151 11014312742  11564                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                     PEAR-1.8.0/PEAR/Command/Mirror.xml                                                                  100777     764     764         1151      100777  11416                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <download-all>
   <summary>Downloads each available package from the default channel</summary>
   <function>doDownloadAll</function>
@@ -11398,24 +11792,18 @@ Requests a list of available packages from the default channel ({config default_
 and downloads them to current working directory.  Note: only
 packages within preferred_state ({config preferred_state}) will be downloaded</doc>
  </download-all>
-</commands>                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.7.2/PEAR/Command/Mirror.php                                                                  100644    1750    1750        12230 11014312742  11573                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.8.0/PEAR/Command/Mirror.php                                                                  100664     764     764        10765      100664  11426                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Mirror (download-all command)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Alexander Merz <alexmerz at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Mirror.php,v 1.20 2008/04/11 01:16:40 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Mirror.php,v 1.23 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.2.0
  */
@@ -11431,16 +11819,14 @@ require_once 'PEAR/Command/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Alexander Merz <alexmerz at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.2.0
  */
 class PEAR_Command_Mirror extends PEAR_Command_Common
 {
-    // {{{ properties
-
     var $commands = array(
         'download-all' => array(
             'summary' => 'Downloads each available package from the default channel',
@@ -11461,10 +11847,6 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
             ),
         );
 
-    // }}}
-
-    // {{{ constructor
-
     /**
      * PEAR_Command_Mirror constructor.
      *
@@ -11477,8 +11859,6 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
         parent::PEAR_Command_Common($ui, $config);
     }
 
-    // }}}
-
     /**
      * For unit-testing
      */
@@ -11488,7 +11868,6 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
         return $a;
     }
 
-    // {{{ doDownloadAll()
     /**
     * retrieves a list of avaible Packages from master server
     * and downloads them
@@ -11511,30 +11890,32 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
             return $this->raiseError('Channel "' . $channel . '" does not exist');
         }
         $this->config->set('default_channel', $channel);
+
         $this->ui->outputData('Using Channel ' . $this->config->get('default_channel'));
         $chan = $reg->getChannel($channel);
         if (PEAR::isError($chan)) {
             return $this->raiseError($chan);
         }
+
         if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
               $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
             $rest = &$this->config->getREST('1.0', array());
             $remoteInfo = array_flip($rest->listPackages($base, $channel));
-        } else {
-            $remote = &$this->config->getRemote();
-            $stable = ($this->config->get('preferred_state') == 'stable');
-            $remoteInfo = $remote->call("package.listAll", true, $stable, false);
         }
+
         if (PEAR::isError($remoteInfo)) {
             return $remoteInfo;
         }
+
         $cmd = &$this->factory("download");
         if (PEAR::isError($cmd)) {
             return $cmd;
         }
+
         $this->ui->outputData('Using Preferred State of ' .
             $this->config->get('preferred_state'));
         $this->ui->outputData('Gathering release information, please wait...');
+
         /**
          * Error handling not necessary, because already done by
          * the download command
@@ -11546,12 +11927,10 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
         if (PEAR::isError($err)) {
             $this->ui->outputData($err->getMessage());
         }
+
         return true;
     }
-
-    // }}}
-}
-                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.7.2/PEAR/Command/Package.xml                                                                 100644    1750    1750        13206 11014312742  11671                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}           PEAR-1.8.0/PEAR/Command/Package.xml                                                                 100777     764     764        13665      100777  11534                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <package>
   <summary>Build Package</summary>
   <function>doPackage</function>
@@ -11566,13 +11945,13 @@ packages within preferred_state ({config preferred_state}) will be downloaded'
     <doc>Print the name of the packaged file.</doc>
    </showname>
   </options>
-  <doc>[descfile] [descfile2]
-Creates a PEAR package from its description file (usually called
-package.xml).  If a second packagefile is passed in, then
-the packager will check to make sure that one is a package.xml
-version 1.0, and the other is a package.xml version 2.0.  The
-package.xml version 1.0 will be saved as &quot;package.xml&quot; in the archive,
-and the other as &quot;package2.xml&quot; in the archive&quot;
+  <doc>[descfile] [descfile2]
+Creates a PEAR package from its description file (usually called
+package.xml).  If a second packagefile is passed in, then
+the packager will check to make sure that one is a package.xml
+version 1.0, and the other is a package.xml version 2.0.  The
+package.xml version 1.0 will be saved as &quot;package.xml&quot; in the archive,
+and the other as &quot;package2.xml&quot; in the archive&quot;
 </doc>
  </package>
  <package-validate>
@@ -11580,7 +11959,7 @@ and the other as &quot;package2.xml&quot; in the archive&quot;
   <function>doPackageValidate</function>
   <shortcut>pv</shortcut>
   <options />
-  <doc>
+  <doc>
 </doc>
  </package-validate>
  <cvsdiff>
@@ -11632,18 +12011,19 @@ and the other as &quot;package2.xml&quot; in the archive&quot;
     <doc>Ignore changes that insert or delete blank lines</doc>
    </ignore-blank-lines>
    <brief>
+    <shortopt></shortopt>
     <doc>Report only whether the files differ, no details</doc>
    </brief>
    <dry-run>
     <shortopt>n</shortopt>
-    <doc>Don&apos;t do anything, just pretend</doc>
+    <doc>Don&#039;t do anything, just pretend</doc>
    </dry-run>
   </options>
-  <doc>&lt;package.xml&gt;
-Compares all the files in a package.  Without any options, this
-command will compare the current code with the last checked-in code.
-Using the -r or -R option you may compare the current code with that
-of a specific release.
+  <doc>&lt;package.xml&gt;
+Compares all the files in a package.  Without any options, this
+command will compare the current code with the last checked-in code.
+Using the -r or -R option you may compare the current code with that
+of a specific release.
 </doc>
  </cvsdiff>
  <cvstag>
@@ -11669,15 +12049,18 @@ of a specific release.
    </delete>
    <dry-run>
     <shortopt>n</shortopt>
-    <doc>Don&apos;t do anything, just pretend</doc>
+    <doc>Don&#039;t do anything, just pretend</doc>
    </dry-run>
   </options>
-  <doc>&lt;package.xml&gt;
-Sets a CVS tag on all files in a package.  Use this command after you have
-packaged a distribution tarball with the &quot;package&quot; command to tag what
-revisions of what files were in that release.  If need to fix something
-after running cvstag once, but before the tarball is released to the public,
-use the &quot;slide&quot; option to move the release tag.
+  <doc>&lt;package.xml&gt; [files...]
+Sets a CVS tag on all files in a package.  Use this command after you have
+packaged a distribution tarball with the &quot;package&quot; command to tag what
+revisions of what files were in that release.  If need to fix something
+after running cvstag once, but before the tarball is released to the public,
+use the &quot;slide&quot; option to move the release tag.
+
+to include files (such as a second package.xml, or tests not included in the
+release), pass them as additional parameters.
 </doc>
  </cvstag>
  <package-dependencies>
@@ -11685,15 +12068,20 @@ use the &quot;slide&quot; option to move the release tag.
   <function>doPackageDependencies</function>
   <shortcut>pd</shortcut>
   <options />
-  <doc>
+  <doc>
 List all dependencies the package has.</doc>
  </package-dependencies>
  <sign>
   <summary>Sign a package distribution file</summary>
   <function>doSign</function>
   <shortcut>si</shortcut>
-  <options />
-  <doc>&lt;package-file&gt;
+  <options>
+   <verbose>
+    <shortopt>v</shortopt>
+    <doc>Display GnuPG output</doc>
+   </verbose>
+  </options>
+  <doc>&lt;package-file&gt;
 Signs a package distribution (.tar or .tgz) file with GnuPG.</doc>
  </sign>
  <makerpm>
@@ -11703,27 +12091,27 @@ Signs a package distribution (.tar or .tgz) file with GnuPG.</doc>
   <options>
    <spec-template>
     <shortopt>t</shortopt>
-    <arg>FILE</arg>
     <doc>Use FILE as RPM spec file template</doc>
+    <arg>FILE</arg>
    </spec-template>
    <rpm-pkgname>
     <shortopt>p</shortopt>
-    <arg>FORMAT</arg>
-    <doc>Use FORMAT as format string for RPM package name, %s is replaced
+    <doc>Use FORMAT as format string for RPM package name, %s is replaced
 by the PEAR package name, defaults to &quot;PEAR::%s&quot;.</doc>
+    <arg>FORMAT</arg>
    </rpm-pkgname>
   </options>
-  <doc>&lt;package-file&gt;
-
-Creates an RPM .spec file for wrapping a PEAR package inside an RPM
-package.  Intended to be used from the SPECS directory, with the PEAR
-package tarball in the SOURCES directory:
-
-$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
-Wrote RPM spec file PEAR::Net_Geo-1.0.spec
-$ rpm -bb PEAR::Net_Socket-1.0.spec
-...
-Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
+  <doc>&lt;package-file&gt;
+
+Creates an RPM .spec file for wrapping a PEAR package inside an RPM
+package.  Intended to be used from the SPECS directory, with the PEAR
+package tarball in the SOURCES directory:
+
+$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
+Wrote RPM spec file PEAR::Net_Geo-1.0.spec
+$ rpm -bb PEAR::Net_Socket-1.0.spec
+...
+Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
 </doc>
  </makerpm>
  <convert>
@@ -11736,859 +12124,881 @@ Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
     <doc>do not beautify the filelist.</doc>
    </flat>
   </options>
-  <doc>[descfile] [descfile2]
-Converts a package.xml in 1.0 format into a package.xml
-in 2.0 format.  The new file will be named package2.xml by default,
-and package.xml will be used as the old file by default.
-This is not the most intelligent conversion, and should only be
-used for automated conversion or learning the format.
+  <doc>[descfile] [descfile2]
+Converts a package.xml in 1.0 format into a package.xml
+in 2.0 format.  The new file will be named package2.xml by default,
+and package.xml will be used as the old file by default.
+This is not the most intelligent conversion, and should only be
+used for automated conversion or learning the format.
 </doc>
  </convert>
-</commands>
-                                                                                                                                                                                                                                                                                                                                                                                          PEAR-1.7.2/PEAR/Command/Package.php                                                                 100644    1750    1750        75344 11014312742  11673                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Command_Package (package, package-validate, cvsdiff, cvstag, package-dependencies,
- * sign, makerpm, convert commands)
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Martin Jansen <mj at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Package.php,v 1.128 2008/03/29 21:06:58 dufuz Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
- */
-
-/**
- * base class
- */
-require_once 'PEAR/Command/Common.php';
-
-/**
- * PEAR commands for login/logout
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Martin Jansen <mj at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: @package_version@
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 0.1
- */
-
-class PEAR_Command_Package extends PEAR_Command_Common
-{
-    // {{{ properties
-
-    var $commands = array(
-        'package' => array(
-            'summary' => 'Build Package',
-            'function' => 'doPackage',
-            'shortcut' => 'p',
-            'options' => array(
-                'nocompress' => array(
-                    'shortopt' => 'Z',
-                    'doc' => 'Do not gzip the package file'
-                    ),
-                'showname' => array(
-                    'shortopt' => 'n',
-                    'doc' => 'Print the name of the packaged file.',
-                    ),
-                ),
-            'doc' => '[descfile] [descfile2]
-Creates a PEAR package from its description file (usually called
-package.xml).  If a second packagefile is passed in, then
-the packager will check to make sure that one is a package.xml
-version 1.0, and the other is a package.xml version 2.0.  The
-package.xml version 1.0 will be saved as "package.xml" in the archive,
-and the other as "package2.xml" in the archive"
-'
-            ),
-        'package-validate' => array(
-            'summary' => 'Validate Package Consistency',
-            'function' => 'doPackageValidate',
-            'shortcut' => 'pv',
-            'options' => array(),
-            'doc' => '
-',
-            ),
-        'cvsdiff' => array(
-            'summary' => 'Run a "cvs diff" for all files in a package',
-            'function' => 'doCvsDiff',
-            'shortcut' => 'cd',
-            'options' => array(
-                'quiet' => array(
-                    'shortopt' => 'q',
-                    'doc' => 'Be quiet',
-                    ),
-                'reallyquiet' => array(
-                    'shortopt' => 'Q',
-                    'doc' => 'Be really quiet',
-                    ),
-                'date' => array(
-                    'shortopt' => 'D',
-                    'doc' => 'Diff against revision of DATE',
-                    'arg' => 'DATE',
-                    ),
-                'release' => array(
-                    'shortopt' => 'R',
-                    'doc' => 'Diff against tag for package release REL',
-                    'arg' => 'REL',
-                    ),
-                'revision' => array(
-                    'shortopt' => 'r',
-                    'doc' => 'Diff against revision REV',
-                    'arg' => 'REV',
-                    ),
-                'context' => array(
-                    'shortopt' => 'c',
-                    'doc' => 'Generate context diff',
-                    ),
-                'unified' => array(
-                    'shortopt' => 'u',
-                    'doc' => 'Generate unified diff',
-                    ),
-                'ignore-case' => array(
-                    'shortopt' => 'i',
-                    'doc' => 'Ignore case, consider upper- and lower-case letters equivalent',
-                    ),
-                'ignore-whitespace' => array(
-                    'shortopt' => 'b',
-                    'doc' => 'Ignore changes in amount of white space',
-                    ),
-                'ignore-blank-lines' => array(
-                    'shortopt' => 'B',
-                    'doc' => 'Ignore changes that insert or delete blank lines',
-                    ),
-                'brief' => array(
-                    'doc' => 'Report only whether the files differ, no details',
-                    ),
-                'dry-run' => array(
-                    'shortopt' => 'n',
-                    'doc' => 'Don\'t do anything, just pretend',
-                    ),
-                ),
-            'doc' => '<package.xml>
-Compares all the files in a package.  Without any options, this
-command will compare the current code with the last checked-in code.
-Using the -r or -R option you may compare the current code with that
-of a specific release.
-',
-            ),
-        'cvstag' => array(
-            'summary' => 'Set CVS Release Tag',
-            'function' => 'doCvsTag',
-            'shortcut' => 'ct',
-            'options' => array(
-                'quiet' => array(
-                    'shortopt' => 'q',
-                    'doc' => 'Be quiet',
-                    ),
-                'reallyquiet' => array(
-                    'shortopt' => 'Q',
-                    'doc' => 'Be really quiet',
-                    ),
-                'slide' => array(
-                    'shortopt' => 'F',
-                    'doc' => 'Move (slide) tag if it exists',
-                    ),
-                'delete' => array(
-                    'shortopt' => 'd',
-                    'doc' => 'Remove tag',
-                    ),
-                'dry-run' => array(
-                    'shortopt' => 'n',
-                    'doc' => 'Don\'t do anything, just pretend',
-                    ),
-                ),
-            'doc' => '<package.xml> [files...]
-Sets a CVS tag on all files in a package.  Use this command after you have
-packaged a distribution tarball with the "package" command to tag what
-revisions of what files were in that release.  If need to fix something
-after running cvstag once, but before the tarball is released to the public,
-use the "slide" option to move the release tag.
-
-to include files (such as a second package.xml, or tests not included in the
-release), pass them as additional parameters.
-',
-            ),
-        'package-dependencies' => array(
-            'summary' => 'Show package dependencies',
-            'function' => 'doPackageDependencies',
-            'shortcut' => 'pd',
-            'options' => array(),
-            'doc' => '
-List all dependencies the package has.'
-            ),
-        'sign' => array(
-            'summary' => 'Sign a package distribution file',
-            'function' => 'doSign',
-            'shortcut' => 'si',
-            'options' => array(
-                'verbose' => array(
-                    'shortopt' => 'v',
-                    'doc' => 'Display GnuPG output',
-                    ),
-            ),
-            'doc' => '<package-file>
-Signs a package distribution (.tar or .tgz) file with GnuPG.',
-            ),
-        'makerpm' => array(
-            'summary' => 'Builds an RPM spec file from a PEAR package',
-            'function' => 'doMakeRPM',
-            'shortcut' => 'rpm',
-            'options' => array(
-                'spec-template' => array(
-                    'shortopt' => 't',
-                    'arg' => 'FILE',
-                    'doc' => 'Use FILE as RPM spec file template'
-                    ),
-                'rpm-pkgname' => array(
-                    'shortopt' => 'p',
-                    'arg' => 'FORMAT',
-                    'doc' => 'Use FORMAT as format string for RPM package name, %s is replaced
-by the PEAR package name, defaults to "PEAR::%s".',
-                    ),
-                ),
-            'doc' => '<package-file>
-
-Creates an RPM .spec file for wrapping a PEAR package inside an RPM
-package.  Intended to be used from the SPECS directory, with the PEAR
-package tarball in the SOURCES directory:
-
-$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
-Wrote RPM spec file PEAR::Net_Geo-1.0.spec
-$ rpm -bb PEAR::Net_Socket-1.0.spec
-...
-Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
-',
-            ),
-        'convert' => array(
-            'summary' => 'Convert a package.xml 1.0 to package.xml 2.0 format',
-            'function' => 'doConvert',
-            'shortcut' => 'c2',
-            'options' => array(
-                'flat' => array(
-                    'shortopt' => 'f',
-                    'doc' => 'do not beautify the filelist.',
-                    ),
-                ),
-            'doc' => '[descfile] [descfile2]
-Converts a package.xml in 1.0 format into a package.xml
-in 2.0 format.  The new file will be named package2.xml by default,
-and package.xml will be used as the old file by default.
-This is not the most intelligent conversion, and should only be
-used for automated conversion or learning the format.
-'
-            ),
-        );
-
-    var $output;
-
-    // }}}
-    // {{{ constructor
-
-    /**
-     * PEAR_Command_Package constructor.
-     *
-     * @access public
-     */
-    function PEAR_Command_Package(&$ui, &$config)
-    {
-        parent::PEAR_Command_Common($ui, $config);
-    }
-
-    // }}}
-
-    // {{{ _displayValidationResults()
-
-    function _displayValidationResults($err, $warn, $strict = false)
-    {
-        foreach ($err as $e) {
-            $this->output .= "Error: $e\n";
-        }
-        foreach ($warn as $w) {
-            $this->output .= "Warning: $w\n";
-        }
-        $this->output .= sprintf('Validation: %d error(s), %d warning(s)'."\n",
-                                       sizeof($err), sizeof($warn));
-        if ($strict && sizeof($err) > 0) {
-            $this->output .= "Fix these errors and try again.";
-            return false;
-        }
-        return true;
-    }
-
-    // }}}
-    function &getPackager()
-    {
-        if (!class_exists('PEAR_Packager')) {
-            require_once 'PEAR/Packager.php';
-        }
-        $a = &new PEAR_Packager;
-        return $a;
-    }
-
-    function &getPackageFile($config, $debug = false, $tmpdir = null)
-    {
-        if (!class_exists('PEAR_Common')) {
-            require_once 'PEAR/Common.php';
-        }
-        if (!class_exists('PEAR_PackageFile')) {
-            require_once 'PEAR/PackageFile.php';
-        }
-        $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
-        $common = new PEAR_Common;
-        $common->ui = $this->ui;
-        $a->setLogger($common);
-        return $a;
-    }
-    // {{{ doPackage()
-
-    function doPackage($command, $options, $params)
-    {
-        $this->output = '';
-        $pkginfofile = isset($params[0]) ? $params[0] : 'package.xml';
-        $pkg2 = isset($params[1]) ? $params[1] : null;
-        if (!$pkg2 && !isset($params[0])) {
-            if (file_exists('package2.xml')) {
-                $pkg2 = 'package2.xml';
-            }
-        }
-        $packager = &$this->getPackager();
-        $compress = empty($options['nocompress']) ? true : false;
-        $result = $packager->package($pkginfofile, $compress, $pkg2);
-        if (PEAR::isError($result)) {
-            return $this->raiseError($result);
-        }
-        // Don't want output, only the package file name just created
-        if (isset($options['showname'])) {
-            $this->output = $result;
-        }
-        if ($this->output) {
-            $this->ui->outputData($this->output, $command);
-        }
-        return true;
-    }
-
-    // }}}
-    // {{{ doPackageValidate()
-
-    function doPackageValidate($command, $options, $params)
-    {
-        $this->output = '';
-        if (sizeof($params) < 1) {
-            $params[0] = "package.xml";
-        }
-        $obj = &$this->getPackageFile($this->config, $this->_debug);
-        $obj->rawReturn();
-        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $info = $obj->fromTgzFile($params[0], PEAR_VALIDATE_NORMAL);
-        if (PEAR::isError($info)) {
-            $info = $obj->fromPackageFile($params[0], PEAR_VALIDATE_NORMAL);
-        } else {
-            $archive = $info->getArchiveFile();
-            $tar = &new Archive_Tar($archive);
-            $tar->extract(dirname($info->getPackageFile()));
-            $info->setPackageFile(dirname($info->getPackageFile()) . DIRECTORY_SEPARATOR .
-                $info->getPackage() . '-' . $info->getVersion() . DIRECTORY_SEPARATOR .
-                basename($info->getPackageFile()));
-        }
-        PEAR::staticPopErrorHandling();
-        if (PEAR::isError($info)) {
-            return $this->raiseError($info);
-        }
-        $valid = false;
-        if ($info->getPackagexmlVersion() == '2.0') {
-            if ($valid = $info->validate(PEAR_VALIDATE_NORMAL)) {
-                $info->flattenFileList();
-                $valid = $info->validate(PEAR_VALIDATE_PACKAGING);
-            }
-        } else {
-            $valid = $info->validate(PEAR_VALIDATE_PACKAGING);
-        }
-        $err = $warn = array();
-        if ($errors = $info->getValidationWarnings()) {
-            foreach ($errors as $error) {
-                if ($error['level'] == 'warning') {
-                    $warn[] = $error['message'];
-                } else {
-                    $err[] = $error['message'];
-                }
-            }
-        }
-        $this->_displayValidationResults($err, $warn);
-        $this->ui->outputData($this->output, $command);
-        return true;
-    }
-
-    // }}}
-    // {{{ doCvsTag()
-
-    function doCvsTag($command, $options, $params)
-    {
-        $this->output = '';
-        $_cmd = $command;
-        if (sizeof($params) < 1) {
-            $help = $this->getHelp($command);
-            return $this->raiseError("$command: missing parameter: $help[0]");
-        }
-        $obj = &$this->getPackageFile($this->config, $this->_debug);
-        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
-        if (PEAR::isError($info)) {
-            return $this->raiseError($info);
-        }
-        $err = $warn = array();
-        if (!$info->validate()) {
-            foreach ($info->getValidationWarnings() as $error) {
-                if ($error['level'] == 'warning') {
-                    $warn[] = $error['message'];
-                } else {
-                    $err[] = $error['message'];
-                }
-            }
-        }
-        if (!$this->_displayValidationResults($err, $warn, true)) {
-            $this->ui->outputData($this->output, $command);
-            return $this->raiseError('CVS tag failed');
-        }
-        $version = $info->getVersion();
-        $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $version);
-        $cvstag = "RELEASE_$cvsversion";
-        $files = array_keys($info->getFilelist());
-        $command = "cvs";
-        if (isset($options['quiet'])) {
-            $command .= ' -q';
-        }
-        if (isset($options['reallyquiet'])) {
-            $command .= ' -Q';
-        }
-        $command .= ' tag';
-        if (isset($options['slide'])) {
-            $command .= ' -F';
-        }
-        if (isset($options['delete'])) {
-            $command .= ' -d';
-        }
-        $command .= ' ' . $cvstag . ' ' . escapeshellarg($params[0]);
-        array_shift($params);
-        if (count($params)) {
-            // add in additional files to be tagged
-            $files = array_merge($files, $params);
-        }
-        foreach ($files as $file) {
-            $command .= ' ' . escapeshellarg($file);
-        }
-        if ($this->config->get('verbose') > 1) {
-            $this->output .= "+ $command\n";
-        }
-        $this->output .= "+ $command\n";
-        if (empty($options['dry-run'])) {
-            $fp = popen($command, "r");
-            while ($line = fgets($fp, 1024)) {
-                $this->output .= rtrim($line)."\n";
-            }
-            pclose($fp);
-        }
-        $this->ui->outputData($this->output, $_cmd);
-        return true;
-    }
-
-    // }}}
-    // {{{ doCvsDiff()
-
-    function doCvsDiff($command, $options, $params)
-    {
-        $this->output = '';
-        if (sizeof($params) < 1) {
-            $help = $this->getHelp($command);
-            return $this->raiseError("$command: missing parameter: $help[0]");
-        }
-        $obj = &$this->getPackageFile($this->config, $this->_debug);
-        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
-        if (PEAR::isError($info)) {
-            return $this->raiseError($info);
-        }
-        $err = $warn = array();
-        if (!$info->validate()) {
-            foreach ($info->getValidationWarnings() as $error) {
-                if ($error['level'] == 'warning') {
-                    $warn[] = $error['message'];
-                } else {
-                    $err[] = $error['message'];
-                }
-            }
-        }
-        if (!$this->_displayValidationResults($err, $warn, true)) {
-            $this->ui->outputData($this->output, $command);
-            return $this->raiseError('CVS diff failed');
-        }
-        $info1 = $info->getFilelist();
-        $files = $info1;
-        $cmd = "cvs";
-        if (isset($options['quiet'])) {
-            $cmd .= ' -q';
-            unset($options['quiet']);
-        }
-        if (isset($options['reallyquiet'])) {
-            $cmd .= ' -Q';
-            unset($options['reallyquiet']);
-        }
-        if (isset($options['release'])) {
-            $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $options['release']);
-            $cvstag = "RELEASE_$cvsversion";
-            $options['revision'] = $cvstag;
-            unset($options['release']);
-        }
-        $execute = true;
-        if (isset($options['dry-run'])) {
-            $execute = false;
-            unset($options['dry-run']);
-        }
-        $cmd .= ' diff';
-        // the rest of the options are passed right on to "cvs diff"
-        foreach ($options as $option => $optarg) {
-            $arg = $short = false;
-            if (isset($this->commands[$command]['options'][$option])) {
-                $arg = $this->commands[$command]['options'][$option]['arg'];
-                $short = $this->commands[$command]['options'][$option]['shortopt'];
-            }
-            $cmd .= $short ? " -$short" : " --$option";
-            if ($arg && $optarg) {
-                $cmd .= ($short ? '' : '=') . escapeshellarg($optarg);
-            }
-        }
-        foreach ($files as $file) {
-            $cmd .= ' ' . escapeshellarg($file['name']);
-        }
-        if ($this->config->get('verbose') > 1) {
-            $this->output .= "+ $cmd\n";
-        }
-        if ($execute) {
-            $fp = popen($cmd, "r");
-            while ($line = fgets($fp, 1024)) {
-                $this->output .= rtrim($line)."\n";
-            }
-            pclose($fp);
-        }
-        $this->ui->outputData($this->output, $command);
-        return true;
-    }
-
-    // }}}
-    // {{{ doPackageDependencies()
-
-    function doPackageDependencies($command, $options, $params)
-    {
-        // $params[0] -> the PEAR package to list its information
-        if (sizeof($params) != 1) {
-            return $this->raiseError("bad parameter(s), try \"help $command\"");
-        }
-        $obj = &$this->getPackageFile($this->config, $this->_debug);
-        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
-        if (PEAR::isError($info)) {
-            return $this->raiseError($info);
-        }
-        $deps = $info->getDeps();
-        if (is_array($deps)) {
-            if ($info->getPackagexmlVersion() == '1.0') {
-                $data = array(
-                    'caption' => 'Dependencies for pear/' . $info->getPackage(),
-                    'border' => true,
-                    'headline' => array("Required?", "Type", "Name", "Relation", "Version"),
-                    );
-
-                foreach ($deps as $d) {
-                    if (isset($d['optional'])) {
-                        if ($d['optional'] == 'yes') {
-                            $req = 'No';
-                        } else {
-                            $req = 'Yes';
-                        }
-                    } else {
-                        $req = 'Yes';
-                    }
-                    if (isset($this->_deps_rel_trans[$d['rel']])) {
-                        $rel = $this->_deps_rel_trans[$d['rel']];
-                    } else {
-                        $rel = $d['rel'];
-                    }
-
-                    if (isset($this->_deps_type_trans[$d['type']])) {
-                        $type = ucfirst($this->_deps_type_trans[$d['type']]);
-                    } else {
-                        $type = $d['type'];
-                    }
-
-                    if (isset($d['name'])) {
-                        $name = $d['name'];
-                    } else {
-                        $name = '';
-                    }
-
-                    if (isset($d['version'])) {
-                        $version = $d['version'];
-                    } else {
-                        $version = '';
-                    }
-
-                    $data['data'][] = array($req, $type, $name, $rel, $version);
-                }
-            } else { // package.xml 2.0 dependencies display
-                require_once 'PEAR/Dependency2.php';
-                $deps = $info->getDependencies();
-                $reg = &$this->config->getRegistry();
-                if (is_array($deps)) {
-                    $d = new PEAR_Dependency2($this->config, array(), '');
-                    $data = array(
-                        'caption' => 'Dependencies for ' . $info->getPackage(),
-                        'border' => true,
-                        'headline' => array("Required?", "Type", "Name", 'Versioning', 'Group'),
-                        );
-                    foreach ($deps as $type => $subd) {
-                        $req = ($type == 'required') ? 'Yes' : 'No';
-                        if ($type == 'group') {
-                            $group = $subd['attribs']['name'];
-                        } else {
-                            $group = '';
-                        }
-                        if (!isset($subd[0])) {
-                            $subd = array($subd);
-                        }
-                        foreach ($subd as $groupa) {
-                            foreach ($groupa as $deptype => $depinfo) {
-                                if ($deptype == 'attribs') {
-                                    continue;
-                                }
-                                if ($deptype == 'pearinstaller') {
-                                    $deptype = 'pear Installer';
-                                }
-                                if (!isset($depinfo[0])) {
-                                    $depinfo = array($depinfo);
-                                }
-                                foreach ($depinfo as $inf) {
-                                    $name = '';
-                                    if (isset($inf['channel'])) {
-                                        $alias = $reg->channelAlias($inf['channel']);
-                                        if (!$alias) {
-                                            $alias = '(channel?) ' .$inf['channel'];
-                                        }
-                                        $name = $alias . '/';
-                                    }
-                                    if (isset($inf['name'])) {
-                                        $name .= $inf['name'];
-                                    } elseif (isset($inf['pattern'])) {
-                                        $name .= $inf['pattern'];
-                                    } else {
-                                        $name .= '';
-                                    }
-                                    if (isset($inf['uri'])) {
-                                        $name .= ' [' . $inf['uri'] .  ']';
-                                    }
-                                    if (isset($inf['conflicts'])) {
-                                        $ver = 'conflicts';
-                                    } else {
-                                        $ver = $d->_getExtraString($inf);
-                                    }
-                                    $data['data'][] = array($req, ucfirst($deptype), $name,
-                                        $ver, $group);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            $this->ui->outputData($data, $command);
-            return true;
-        }
-
-        // Fallback
-        $this->ui->outputData("This package does not have any dependencies.", $command);
-    }
-
-    // }}}
-    // {{{ doSign()
-
-    function doSign($command, $options, $params)
-    {
-        require_once 'System.php';
-        require_once 'Archive/Tar.php';
-        // should move most of this code into PEAR_Packager
-        // so it'll be easy to implement "pear package --sign"
-        if (sizeof($params) != 1) {
-            return $this->raiseError("bad parameter(s), try \"help $command\"");
-        }
-        if (!file_exists($params[0])) {
-            return $this->raiseError("file does not exist: $params[0]");
-        }
-        $obj = $this->getPackageFile($this->config, $this->_debug);
-        $info = $obj->fromTgzFile($params[0], PEAR_VALIDATE_NORMAL);
-        if (PEAR::isError($info)) {
-            return $this->raiseError($info);
-        }
-        $tar = new Archive_Tar($params[0]);
-        $tmpdir = System::mktemp('-d pearsign');
-        if (!$tar->extractList('package2.xml package.xml package.sig', $tmpdir)) {
-            return $this->raiseError("failed to extract tar file");
-        }
-        if (file_exists("$tmpdir/package.sig")) {
-            return $this->raiseError("package already signed");
-        }
-        $packagexml = 'package.xml';
-        if (file_exists("$tmpdir/package2.xml")) {
-            $packagexml = 'package2.xml';
-        }
-        if (file_exists("$tmpdir/package.sig")) {
-            unlink("$tmpdir/package.sig");
-        }
-        if (!file_exists("$tmpdir/$packagexml")) {
-            return $this->raiseError("Extracted file $tmpdir/$packagexml not found.");
-        }
-        $input = $this->ui->userDialog($command,
-                                       array('GnuPG Passphrase'),
-                                       array('password'));
-        if (!isset($input[0])) {
-            //use empty passphrase
-            $input[0] = '';
-        }
-
-        $devnull = (isset($options['verbose'])) ? '' : ' 2>/dev/null';
-        $gpg = popen("gpg --batch --passphrase-fd 0 --armor --detach-sign --output $tmpdir/package.sig $tmpdir/$packagexml" . $devnull, "w");
-        if (!$gpg) {
-            return $this->raiseError("gpg command failed");
-        }
-        fwrite($gpg, "$input[0]\n");
-        if (pclose($gpg) || !file_exists("$tmpdir/package.sig")) {
-            return $this->raiseError("gpg sign failed");
-        }
-        if (!$tar->addModify("$tmpdir/package.sig", '', $tmpdir)) {
-            return $this->raiseError('failed adding signature to file');
-        }
-
-        $this->ui->outputData("Package signed.", $command);
-        return true;
-    }
-
-    // }}}
-
-    /**
-     * For unit testing purposes
-     */
-    function &getInstaller(&$ui)
-    {
-        if (!class_exists('PEAR_Installer')) {
-            require_once 'PEAR/Installer.php';
-        }
-        $a = &new PEAR_Installer($ui);
-        return $a;
-    }
-
-    /**
-     * For unit testing purposes
-     */
-    function &getCommandPackaging(&$ui, &$config)
-    {
-        if (!class_exists('PEAR_Command_Packaging')) {
-            if ($fp = @fopen('PEAR/Command/Packaging.php', 'r', true)) {
-                fclose($fp);
-                include_once 'PEAR/Command/Packaging.php';
-            }
-        }
-
-        if (class_exists('PEAR_Command_Packaging')) {
-            $a = &new PEAR_Command_Packaging($ui, $config);
-        } else {
-            $a = null;
-        }
-        return $a;
-    }
-
-    // {{{ doMakeRPM()
-
-    function doMakeRPM($command, $options, $params)
-    {
-
-        // Check to see if PEAR_Command_Packaging is installed, and
-        // transparently switch to use the "make-rpm-spec" command from it
-        // instead, if it does. Otherwise, continue to use the old version
-        // of "makerpm" supplied with this package (PEAR).
-        $packaging_cmd = $this->getCommandPackaging($this->ui, $this->config);
-        if ($packaging_cmd !== null) {
-            $this->ui->outputData('PEAR_Command_Packaging is installed; using '.
-                'newer "make-rpm-spec" command instead');
-            return $packaging_cmd->run('make-rpm-spec', $options, $params);
-        } else {
-            $this->ui->outputData('WARNING: "pear makerpm" is no longer available; an '.
-              'improved version is available via "pear make-rpm-spec", which '.
-              'is available by installing PEAR_Command_Packaging');
-        }
-        return true;
-    }
-
-    function doConvert($command, $options, $params)
-    {
-        $packagexml = isset($params[0]) ? $params[0] : 'package.xml';
-        $newpackagexml = isset($params[1]) ? $params[1] : dirname($packagexml) .
-            DIRECTORY_SEPARATOR . 'package2.xml';
-        $pkg = &$this->getPackageFile($this->config, $this->_debug);
-        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $pf = $pkg->fromPackageFile($packagexml, PEAR_VALIDATE_NORMAL);
-        PEAR::staticPopErrorHandling();
-        if (!PEAR::isError($pf)) {
-            if (is_a($pf, 'PEAR_PackageFile_v2')) {
-                $this->ui->outputData($packagexml . ' is already a package.xml version 2.0');
-                return true;
-            }
-            $gen = &$pf->getDefaultGenerator();
-            $newpf = &$gen->toV2();
-            $newpf->setPackagefile($newpackagexml);
-            $gen = &$newpf->getDefaultGenerator();
-            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-            $state = (isset($options['flat']) ? PEAR_VALIDATE_PACKAGING : PEAR_VALIDATE_NORMAL);
-            $saved = $gen->toPackageFile(dirname($newpackagexml), $state,
-                basename($newpackagexml));
-            PEAR::staticPopErrorHandling();
-            if (PEAR::isError($saved)) {
-                if (is_array($saved->getUserInfo())) {
-                    foreach ($saved->getUserInfo() as $warning) {
-                        $this->ui->outputData($warning['message']);
-                    }
-                }
-                $this->ui->outputData($saved->getMessage());
-                return true;
-            }
-            $this->ui->outputData('Wrote new version 2.0 package.xml to "' . $saved . '"');
-            return true;
-        } else {
-            if (is_array($pf->getUserInfo())) {
-                foreach ($pf->getUserInfo() as $warning) {
-                    $this->ui->outputData($warning['message']);
-                }
-            }
-            return $this->raiseError($pf);
-        }
-    }
-
-    // }}}
-}
-
-?>
-                                                                                                                                                                                                                                                                                            PEAR-1.7.2/PEAR/Command/Pickle.xml                                                                  100644    1750    1750         2761 11014312742  11531                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+</commands>                                                                           PEAR-1.8.0/PEAR/Command/Package.php                                                                 100664     764     764        76030      100664  11504                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Command_Package (package, package-validate, cvsdiff, cvstag, package-dependencies,
+ * sign, makerpm, convert commands)
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Martin Jansen <mj at php.net>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Package.php,v 1.133 2009/03/25 02:15:57 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+
+/**
+ * PEAR commands for login/logout
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Martin Jansen <mj at php.net>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+
+class PEAR_Command_Package extends PEAR_Command_Common
+{
+    var $commands = array(
+        'package' => array(
+            'summary' => 'Build Package',
+            'function' => 'doPackage',
+            'shortcut' => 'p',
+            'options' => array(
+                'nocompress' => array(
+                    'shortopt' => 'Z',
+                    'doc' => 'Do not gzip the package file'
+                    ),
+                'showname' => array(
+                    'shortopt' => 'n',
+                    'doc' => 'Print the name of the packaged file.',
+                    ),
+                ),
+            'doc' => '[descfile] [descfile2]
+Creates a PEAR package from its description file (usually called
+package.xml).  If a second packagefile is passed in, then
+the packager will check to make sure that one is a package.xml
+version 1.0, and the other is a package.xml version 2.0.  The
+package.xml version 1.0 will be saved as "package.xml" in the archive,
+and the other as "package2.xml" in the archive"
+'
+            ),
+        'package-validate' => array(
+            'summary' => 'Validate Package Consistency',
+            'function' => 'doPackageValidate',
+            'shortcut' => 'pv',
+            'options' => array(),
+            'doc' => '
+',
+            ),
+        'cvsdiff' => array(
+            'summary' => 'Run a "cvs diff" for all files in a package',
+            'function' => 'doCvsDiff',
+            'shortcut' => 'cd',
+            'options' => array(
+                'quiet' => array(
+                    'shortopt' => 'q',
+                    'doc' => 'Be quiet',
+                    ),
+                'reallyquiet' => array(
+                    'shortopt' => 'Q',
+                    'doc' => 'Be really quiet',
+                    ),
+                'date' => array(
+                    'shortopt' => 'D',
+                    'doc' => 'Diff against revision of DATE',
+                    'arg' => 'DATE',
+                    ),
+                'release' => array(
+                    'shortopt' => 'R',
+                    'doc' => 'Diff against tag for package release REL',
+                    'arg' => 'REL',
+                    ),
+                'revision' => array(
+                    'shortopt' => 'r',
+                    'doc' => 'Diff against revision REV',
+                    'arg' => 'REV',
+                    ),
+                'context' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'Generate context diff',
+                    ),
+                'unified' => array(
+                    'shortopt' => 'u',
+                    'doc' => 'Generate unified diff',
+                    ),
+                'ignore-case' => array(
+                    'shortopt' => 'i',
+                    'doc' => 'Ignore case, consider upper- and lower-case letters equivalent',
+                    ),
+                'ignore-whitespace' => array(
+                    'shortopt' => 'b',
+                    'doc' => 'Ignore changes in amount of white space',
+                    ),
+                'ignore-blank-lines' => array(
+                    'shortopt' => 'B',
+                    'doc' => 'Ignore changes that insert or delete blank lines',
+                    ),
+                'brief' => array(
+                    'doc' => 'Report only whether the files differ, no details',
+                    ),
+                'dry-run' => array(
+                    'shortopt' => 'n',
+                    'doc' => 'Don\'t do anything, just pretend',
+                    ),
+                ),
+            'doc' => '<package.xml>
+Compares all the files in a package.  Without any options, this
+command will compare the current code with the last checked-in code.
+Using the -r or -R option you may compare the current code with that
+of a specific release.
+',
+            ),
+        'cvstag' => array(
+            'summary' => 'Set CVS Release Tag',
+            'function' => 'doCvsTag',
+            'shortcut' => 'ct',
+            'options' => array(
+                'quiet' => array(
+                    'shortopt' => 'q',
+                    'doc' => 'Be quiet',
+                    ),
+                'reallyquiet' => array(
+                    'shortopt' => 'Q',
+                    'doc' => 'Be really quiet',
+                    ),
+                'slide' => array(
+                    'shortopt' => 'F',
+                    'doc' => 'Move (slide) tag if it exists',
+                    ),
+                'delete' => array(
+                    'shortopt' => 'd',
+                    'doc' => 'Remove tag',
+                    ),
+                'dry-run' => array(
+                    'shortopt' => 'n',
+                    'doc' => 'Don\'t do anything, just pretend',
+                    ),
+                ),
+            'doc' => '<package.xml> [files...]
+Sets a CVS tag on all files in a package.  Use this command after you have
+packaged a distribution tarball with the "package" command to tag what
+revisions of what files were in that release.  If need to fix something
+after running cvstag once, but before the tarball is released to the public,
+use the "slide" option to move the release tag.
+
+to include files (such as a second package.xml, or tests not included in the
+release), pass them as additional parameters.
+',
+            ),
+        'package-dependencies' => array(
+            'summary' => 'Show package dependencies',
+            'function' => 'doPackageDependencies',
+            'shortcut' => 'pd',
+            'options' => array(),
+            'doc' => '
+List all dependencies the package has.'
+            ),
+        'sign' => array(
+            'summary' => 'Sign a package distribution file',
+            'function' => 'doSign',
+            'shortcut' => 'si',
+            'options' => array(
+                'verbose' => array(
+                    'shortopt' => 'v',
+                    'doc' => 'Display GnuPG output',
+                    ),
+            ),
+            'doc' => '<package-file>
+Signs a package distribution (.tar or .tgz) file with GnuPG.',
+            ),
+        'makerpm' => array(
+            'summary' => 'Builds an RPM spec file from a PEAR package',
+            'function' => 'doMakeRPM',
+            'shortcut' => 'rpm',
+            'options' => array(
+                'spec-template' => array(
+                    'shortopt' => 't',
+                    'arg' => 'FILE',
+                    'doc' => 'Use FILE as RPM spec file template'
+                    ),
+                'rpm-pkgname' => array(
+                    'shortopt' => 'p',
+                    'arg' => 'FORMAT',
+                    'doc' => 'Use FORMAT as format string for RPM package name, %s is replaced
+by the PEAR package name, defaults to "PEAR::%s".',
+                    ),
+                ),
+            'doc' => '<package-file>
+
+Creates an RPM .spec file for wrapping a PEAR package inside an RPM
+package.  Intended to be used from the SPECS directory, with the PEAR
+package tarball in the SOURCES directory:
+
+$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
+Wrote RPM spec file PEAR::Net_Geo-1.0.spec
+$ rpm -bb PEAR::Net_Socket-1.0.spec
+...
+Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
+',
+            ),
+        'convert' => array(
+            'summary' => 'Convert a package.xml 1.0 to package.xml 2.0 format',
+            'function' => 'doConvert',
+            'shortcut' => 'c2',
+            'options' => array(
+                'flat' => array(
+                    'shortopt' => 'f',
+                    'doc' => 'do not beautify the filelist.',
+                    ),
+                ),
+            'doc' => '[descfile] [descfile2]
+Converts a package.xml in 1.0 format into a package.xml
+in 2.0 format.  The new file will be named package2.xml by default,
+and package.xml will be used as the old file by default.
+This is not the most intelligent conversion, and should only be
+used for automated conversion or learning the format.
+'
+            ),
+        );
+
+    var $output;
+
+    /**
+     * PEAR_Command_Package constructor.
+     *
+     * @access public
+     */
+    function PEAR_Command_Package(&$ui, &$config)
+    {
+        parent::PEAR_Command_Common($ui, $config);
+    }
+
+    function _displayValidationResults($err, $warn, $strict = false)
+    {
+        foreach ($err as $e) {
+            $this->output .= "Error: $e\n";
+        }
+        foreach ($warn as $w) {
+            $this->output .= "Warning: $w\n";
+        }
+        $this->output .= sprintf('Validation: %d error(s), %d warning(s)'."\n",
+                                       sizeof($err), sizeof($warn));
+        if ($strict && count($err) > 0) {
+            $this->output .= "Fix these errors and try again.";
+            return false;
+        }
+        return true;
+    }
+
+    function &getPackager()
+    {
+        if (!class_exists('PEAR_Packager')) {
+            require_once 'PEAR/Packager.php';
+        }
+        $a = &new PEAR_Packager;
+        return $a;
+    }
+
+    function &getPackageFile($config, $debug = false, $tmpdir = null)
+    {
+        if (!class_exists('PEAR_Common')) {
+            require_once 'PEAR/Common.php';
+        }
+        if (!class_exists('PEAR_PackageFile')) {
+            require_once 'PEAR/PackageFile.php';
+        }
+        $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
+        $common = new PEAR_Common;
+        $common->ui = $this->ui;
+        $a->setLogger($common);
+        return $a;
+    }
+
+    function doPackage($command, $options, $params)
+    {
+        $this->output = '';
+        $pkginfofile = isset($params[0]) ? $params[0] : 'package.xml';
+        $pkg2 = isset($params[1]) ? $params[1] : null;
+        if (!$pkg2 && !isset($params[0]) && file_exists('package2.xml')) {
+            $pkg2 = 'package2.xml';
+        }
+
+        $packager = &$this->getPackager();
+        $compress = empty($options['nocompress']) ? true : false;
+        $result   = $packager->package($pkginfofile, $compress, $pkg2);
+        if (PEAR::isError($result)) {
+            return $this->raiseError($result);
+        }
+
+        // Don't want output, only the package file name just created
+        if (isset($options['showname'])) {
+            $this->output = $result;
+        }
+
+        if ($this->output) {
+            $this->ui->outputData($this->output, $command);
+        }
+
+        return true;
+    }
+
+    function doPackageValidate($command, $options, $params)
+    {
+        $this->output = '';
+        if (count($params) < 1) {
+            $params[0] = 'package.xml';
+        }
+
+        $obj = &$this->getPackageFile($this->config, $this->_debug);
+        $obj->rawReturn();
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $info = $obj->fromTgzFile($params[0], PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
+            $info = $obj->fromPackageFile($params[0], PEAR_VALIDATE_NORMAL);
+        } else {
+            $archive = $info->getArchiveFile();
+            $tar = &new Archive_Tar($archive);
+            $tar->extract(dirname($info->getPackageFile()));
+            $info->setPackageFile(dirname($info->getPackageFile()) . DIRECTORY_SEPARATOR .
+                $info->getPackage() . '-' . $info->getVersion() . DIRECTORY_SEPARATOR .
+                basename($info->getPackageFile()));
+        }
+
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($info)) {
+            return $this->raiseError($info);
+        }
+
+        $valid = false;
+        if ($info->getPackagexmlVersion() == '2.0') {
+            if ($valid = $info->validate(PEAR_VALIDATE_NORMAL)) {
+                $info->flattenFileList();
+                $valid = $info->validate(PEAR_VALIDATE_PACKAGING);
+            }
+        } else {
+            $valid = $info->validate(PEAR_VALIDATE_PACKAGING);
+        }
+
+        $err = $warn = array();
+        if ($errors = $info->getValidationWarnings()) {
+            foreach ($errors as $error) {
+                if ($error['level'] == 'warning') {
+                    $warn[] = $error['message'];
+                } else {
+                    $err[] = $error['message'];
+                }
+            }
+        }
+
+        $this->_displayValidationResults($err, $warn);
+        $this->ui->outputData($this->output, $command);
+        return true;
+    }
+
+    function doCvsTag($command, $options, $params)
+    {
+        $this->output = '';
+        $_cmd = $command;
+        if (count($params) < 1) {
+            $help = $this->getHelp($command);
+            return $this->raiseError("$command: missing parameter: $help[0]");
+        }
+
+        $packageFile = realpath($params[0]);
+        $obj  = &$this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromAnyFile($packageFile, PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
+            return $this->raiseError($info);
+        }
+
+        $err = $warn = array();
+        if (!$info->validate()) {
+            foreach ($info->getValidationWarnings() as $error) {
+                if ($error['level'] == 'warning') {
+                    $warn[] = $error['message'];
+                } else {
+                    $err[] = $error['message'];
+                }
+            }
+        }
+
+        if (!$this->_displayValidationResults($err, $warn, true)) {
+            $this->ui->outputData($this->output, $command);
+            return $this->raiseError('CVS tag failed');
+        }
+
+        $version    = $info->getVersion();
+        $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $version);
+        $cvstag     = "RELEASE_$cvsversion";
+        $files      = array_keys($info->getFilelist());
+        $command = 'cvs';
+        if (isset($options['quiet'])) {
+            $command .= ' -q';
+        }
+
+        if (isset($options['reallyquiet'])) {
+            $command .= ' -Q';
+        }
+
+        $command .= ' tag';
+        if (isset($options['slide'])) {
+            $command .= ' -F';
+        }
+
+        if (isset($options['delete'])) {
+            $command .= ' -d';
+        }
+
+        $command .= ' ' . $cvstag . ' ' . escapeshellarg($params[0]);
+        array_shift($params);
+        if (count($params)) {
+            // add in additional files to be tagged
+            $files = array_merge($files, $params);
+        }
+
+        $dir = dirname($packageFile);
+        $dir = substr($dir, strrpos($dir, '/') + 1);
+        foreach ($files as $file) {
+            if (!file_exists($file)) {
+                $file = $dir . DIRECTORY_SEPARATOR . $file;
+            }
+            $command .= ' ' . escapeshellarg($file);
+        }
+
+        if ($this->config->get('verbose') > 1) {
+            $this->output .= "+ $command\n";
+        }
+
+        $this->output .= "+ $command\n";
+        if (empty($options['dry-run'])) {
+            $fp = popen($command, "r");
+            while ($line = fgets($fp, 1024)) {
+                $this->output .= rtrim($line)."\n";
+            }
+            pclose($fp);
+        }
+
+        $this->ui->outputData($this->output, $_cmd);
+        return true;
+    }
+
+    function doCvsDiff($command, $options, $params)
+    {
+        $this->output = '';
+        if (sizeof($params) < 1) {
+            $help = $this->getHelp($command);
+            return $this->raiseError("$command: missing parameter: $help[0]");
+        }
+
+        $file = realpath($params[0]);
+        $obj  = &$this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromAnyFile($file, PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
+            return $this->raiseError($info);
+        }
+
+        $err = $warn = array();
+        if (!$info->validate()) {
+            foreach ($info->getValidationWarnings() as $error) {
+                if ($error['level'] == 'warning') {
+                    $warn[] = $error['message'];
+                } else {
+                    $err[] = $error['message'];
+                }
+            }
+        }
+
+        if (!$this->_displayValidationResults($err, $warn, true)) {
+            $this->ui->outputData($this->output, $command);
+            return $this->raiseError('CVS diff failed');
+        }
+
+        $info1 = $info->getFilelist();
+        $files = $info1;
+        $cmd = "cvs";
+        if (isset($options['quiet'])) {
+            $cmd .= ' -q';
+            unset($options['quiet']);
+        }
+
+        if (isset($options['reallyquiet'])) {
+            $cmd .= ' -Q';
+            unset($options['reallyquiet']);
+        }
+
+        if (isset($options['release'])) {
+            $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $options['release']);
+            $cvstag = "RELEASE_$cvsversion";
+            $options['revision'] = $cvstag;
+            unset($options['release']);
+        }
+
+        $execute = true;
+        if (isset($options['dry-run'])) {
+            $execute = false;
+            unset($options['dry-run']);
+        }
+
+        $cmd .= ' diff';
+        // the rest of the options are passed right on to "cvs diff"
+        foreach ($options as $option => $optarg) {
+            $arg = $short = false;
+            if (isset($this->commands[$command]['options'][$option])) {
+                $arg = $this->commands[$command]['options'][$option]['arg'];
+                $short = $this->commands[$command]['options'][$option]['shortopt'];
+            }
+            $cmd .= $short ? " -$short" : " --$option";
+            if ($arg && $optarg) {
+                $cmd .= ($short ? '' : '=') . escapeshellarg($optarg);
+            }
+        }
+
+        foreach ($files as $file) {
+            $cmd .= ' ' . escapeshellarg($file['name']);
+        }
+
+        if ($this->config->get('verbose') > 1) {
+            $this->output .= "+ $cmd\n";
+        }
+
+        if ($execute) {
+            $fp = popen($cmd, "r");
+            while ($line = fgets($fp, 1024)) {
+                $this->output .= rtrim($line)."\n";
+            }
+            pclose($fp);
+        }
+
+        $this->ui->outputData($this->output, $command);
+        return true;
+    }
+
+    function doPackageDependencies($command, $options, $params)
+    {
+        // $params[0] -> the PEAR package to list its information
+        if (count($params) !== 1) {
+            return $this->raiseError("bad parameter(s), try \"help $command\"");
+        }
+
+        $obj  = &$this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
+            return $this->raiseError($info);
+        }
+
+        $deps = $info->getDeps();
+        if (is_array($deps)) {
+            if ($info->getPackagexmlVersion() == '1.0') {
+                $data = array(
+                    'caption' => 'Dependencies for pear/' . $info->getPackage(),
+                    'border' => true,
+                    'headline' => array("Required?", "Type", "Name", "Relation", "Version"),
+                    );
+
+                foreach ($deps as $d) {
+                    if (isset($d['optional'])) {
+                        if ($d['optional'] == 'yes') {
+                            $req = 'No';
+                        } else {
+                            $req = 'Yes';
+                        }
+                    } else {
+                        $req = 'Yes';
+                    }
+
+                    if (isset($this->_deps_rel_trans[$d['rel']])) {
+                        $rel = $this->_deps_rel_trans[$d['rel']];
+                    } else {
+                        $rel = $d['rel'];
+                    }
+
+                    if (isset($this->_deps_type_trans[$d['type']])) {
+                        $type = ucfirst($this->_deps_type_trans[$d['type']]);
+                    } else {
+                        $type = $d['type'];
+                    }
+
+                    if (isset($d['name'])) {
+                        $name = $d['name'];
+                    } else {
+                        $name = '';
+                    }
+
+                    if (isset($d['version'])) {
+                        $version = $d['version'];
+                    } else {
+                        $version = '';
+                    }
+
+                    $data['data'][] = array($req, $type, $name, $rel, $version);
+                }
+            } else { // package.xml 2.0 dependencies display
+                require_once 'PEAR/Dependency2.php';
+                $deps = $info->getDependencies();
+                $reg = &$this->config->getRegistry();
+                if (is_array($deps)) {
+                    $d = new PEAR_Dependency2($this->config, array(), '');
+                    $data = array(
+                        'caption' => 'Dependencies for ' . $info->getPackage(),
+                        'border' => true,
+                        'headline' => array("Required?", "Type", "Name", 'Versioning', 'Group'),
+                        );
+                    foreach ($deps as $type => $subd) {
+                        $req = ($type == 'required') ? 'Yes' : 'No';
+                        if ($type == 'group') {
+                            $group = $subd['attribs']['name'];
+                        } else {
+                            $group = '';
+                        }
+
+                        if (!isset($subd[0])) {
+                            $subd = array($subd);
+                        }
+
+                        foreach ($subd as $groupa) {
+                            foreach ($groupa as $deptype => $depinfo) {
+                                if ($deptype == 'attribs') {
+                                    continue;
+                                }
+
+                                if ($deptype == 'pearinstaller') {
+                                    $deptype = 'pear Installer';
+                                }
+
+                                if (!isset($depinfo[0])) {
+                                    $depinfo = array($depinfo);
+                                }
+
+                                foreach ($depinfo as $inf) {
+                                    $name = '';
+                                    if (isset($inf['channel'])) {
+                                        $alias = $reg->channelAlias($inf['channel']);
+                                        if (!$alias) {
+                                            $alias = '(channel?) ' .$inf['channel'];
+                                        }
+                                        $name = $alias . '/';
+
+                                    }
+                                    if (isset($inf['name'])) {
+                                        $name .= $inf['name'];
+                                    } elseif (isset($inf['pattern'])) {
+                                        $name .= $inf['pattern'];
+                                    } else {
+                                        $name .= '';
+                                    }
+
+                                    if (isset($inf['uri'])) {
+                                        $name .= ' [' . $inf['uri'] .  ']';
+                                    }
+
+                                    if (isset($inf['conflicts'])) {
+                                        $ver = 'conflicts';
+                                    } else {
+                                        $ver = $d->_getExtraString($inf);
+                                    }
+
+                                    $data['data'][] = array($req, ucfirst($deptype), $name,
+                                        $ver, $group);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            $this->ui->outputData($data, $command);
+            return true;
+        }
+
+        // Fallback
+        $this->ui->outputData("This package does not have any dependencies.", $command);
+    }
+
+    function doSign($command, $options, $params)
+    {
+        // should move most of this code into PEAR_Packager
+        // so it'll be easy to implement "pear package --sign"
+        if (count($params) !== 1) {
+            return $this->raiseError("bad parameter(s), try \"help $command\"");
+        }
+
+        require_once 'System.php';
+        require_once 'Archive/Tar.php';
+
+        if (!file_exists($params[0])) {
+            return $this->raiseError("file does not exist: $params[0]");
+        }
+
+        $obj = $this->getPackageFile($this->config, $this->_debug);
+        $info = $obj->fromTgzFile($params[0], PEAR_VALIDATE_NORMAL);
+        if (PEAR::isError($info)) {
+            return $this->raiseError($info);
+        }
+
+        $tar = new Archive_Tar($params[0]);
+        $tmpdir = System::mktemp('-d pearsign');
+        if (!$tar->extractList('package2.xml package.xml package.sig', $tmpdir)) {
+            return $this->raiseError("failed to extract tar file");
+        }
+
+        if (file_exists("$tmpdir/package.sig")) {
+            return $this->raiseError("package already signed");
+        }
+
+        $packagexml = 'package.xml';
+        if (file_exists("$tmpdir/package2.xml")) {
+            $packagexml = 'package2.xml';
+        }
+
+        if (file_exists("$tmpdir/package.sig")) {
+            unlink("$tmpdir/package.sig");
+        }
+
+        if (!file_exists("$tmpdir/$packagexml")) {
+            return $this->raiseError("Extracted file $tmpdir/$packagexml not found.");
+        }
+
+        $input = $this->ui->userDialog($command,
+                                       array('GnuPG Passphrase'),
+                                       array('password'));
+        if (!isset($input[0])) {
+            //use empty passphrase
+            $input[0] = '';
+        }
+
+        $devnull = (isset($options['verbose'])) ? '' : ' 2>/dev/null';
+        $gpg = popen("gpg --batch --passphrase-fd 0 --armor --detach-sign --output $tmpdir/package.sig $tmpdir/$packagexml" . $devnull, "w");
+        if (!$gpg) {
+            return $this->raiseError("gpg command failed");
+        }
+
+        fwrite($gpg, "$input[0]\n");
+        if (pclose($gpg) || !file_exists("$tmpdir/package.sig")) {
+            return $this->raiseError("gpg sign failed");
+        }
+
+        if (!$tar->addModify("$tmpdir/package.sig", '', $tmpdir)) {
+            return $this->raiseError('failed adding signature to file');
+        }
+
+        $this->ui->outputData("Package signed.", $command);
+        return true;
+    }
+
+    /**
+     * For unit testing purposes
+     */
+    function &getInstaller(&$ui)
+    {
+        if (!class_exists('PEAR_Installer')) {
+            require_once 'PEAR/Installer.php';
+        }
+        $a = &new PEAR_Installer($ui);
+        return $a;
+    }
+
+    /**
+     * For unit testing purposes
+     */
+    function &getCommandPackaging(&$ui, &$config)
+    {
+        if (!class_exists('PEAR_Command_Packaging')) {
+            if ($fp = @fopen('PEAR/Command/Packaging.php', 'r', true)) {
+                fclose($fp);
+                include_once 'PEAR/Command/Packaging.php';
+            }
+        }
+
+        if (class_exists('PEAR_Command_Packaging')) {
+            $a = &new PEAR_Command_Packaging($ui, $config);
+        } else {
+            $a = null;
+        }
+
+        return $a;
+    }
+
+    function doMakeRPM($command, $options, $params)
+    {
+
+        // Check to see if PEAR_Command_Packaging is installed, and
+        // transparently switch to use the "make-rpm-spec" command from it
+        // instead, if it does. Otherwise, continue to use the old version
+        // of "makerpm" supplied with this package (PEAR).
+        $packaging_cmd = $this->getCommandPackaging($this->ui, $this->config);
+        if ($packaging_cmd !== null) {
+            $this->ui->outputData('PEAR_Command_Packaging is installed; using '.
+                'newer "make-rpm-spec" command instead');
+            return $packaging_cmd->run('make-rpm-spec', $options, $params);
+        }
+
+        $this->ui->outputData('WARNING: "pear makerpm" is no longer available; an '.
+          'improved version is available via "pear make-rpm-spec", which '.
+          'is available by installing PEAR_Command_Packaging');
+        return true;
+    }
+
+    function doConvert($command, $options, $params)
+    {
+        $packagexml    = isset($params[0]) ? $params[0] : 'package.xml';
+        $newpackagexml = isset($params[1]) ? $params[1] : dirname($packagexml) .
+            DIRECTORY_SEPARATOR . 'package2.xml';
+        $pkg = &$this->getPackageFile($this->config, $this->_debug);
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $pf = $pkg->fromPackageFile($packagexml, PEAR_VALIDATE_NORMAL);
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($pf)) {
+            if (is_array($pf->getUserInfo())) {
+                foreach ($pf->getUserInfo() as $warning) {
+                    $this->ui->outputData($warning['message']);
+                }
+            }
+            return $this->raiseError($pf);
+        }
+
+        if (is_a($pf, 'PEAR_PackageFile_v2')) {
+            $this->ui->outputData($packagexml . ' is already a package.xml version 2.0');
+            return true;
+        }
+
+        $gen   = &$pf->getDefaultGenerator();
+        $newpf = &$gen->toV2();
+        $newpf->setPackagefile($newpackagexml);
+        $gen = &$newpf->getDefaultGenerator();
+        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+        $state = (isset($options['flat']) ? PEAR_VALIDATE_PACKAGING : PEAR_VALIDATE_NORMAL);
+        $saved = $gen->toPackageFile(dirname($newpackagexml), $state, basename($newpackagexml));
+        PEAR::staticPopErrorHandling();
+        if (PEAR::isError($saved)) {
+            if (is_array($saved->getUserInfo())) {
+                foreach ($saved->getUserInfo() as $warning) {
+                    $this->ui->outputData($warning['message']);
+                }
+            }
+
+            $this->ui->outputData($saved->getMessage());
+            return true;
+        }
+
+        $this->ui->outputData('Wrote new version 2.0 package.xml to "' . $saved . '"');
+        return true;
+    }
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.8.0/PEAR/Command/Pickle.xml                                                                  100777     764     764         2233      100777  11355                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <pickle>
   <summary>Build PECL Package</summary>
   <function>doPackage</function>
@@ -12603,20 +13013,15 @@ used for automated conversion or learning the format.
     <doc>Print the name of the packaged file.</doc>
    </showname>
   </options>
-  <doc>[descfile] [descfile2]
-Creates a PECL package from its description file (usually called
-package.xml).  If a second packagefile is passed in, then
-the packager will check to make sure that one is a package.xml
-version 1.0, and the other is a package.xml version 2.0.  The
-package.xml version 1.0 will be saved as &quot;package.xml&quot; in the archive,
-and the other as &quot;package2.xml&quot; in the archive&quot;
-
-If no second file is passed in, and [descfile] is a package.xml 2.0,
-an automatic conversion will be made to a package.xml 1.0.  Note that
+  <doc>[descfile]
+Creates a PECL package from its package2.xml file.
+
+An automatic conversion will be made to a package.xml 1.0 and written out to
+disk in the current directory as &quot;package.xml&quot;.  Note that
 only simple package.xml 2.0 will be converted.  package.xml 2.0 with:
 
  - dependency types other than required/optional PECL package/ext/php/pearinstaller
- - more than one extsrcrelease/zendextsrcrelease
+ - more than one extsrcrelease or zendextsrcrelease
  - zendextbinrelease, extbinrelease, phprelease, or bundle release type
  - dependency groups
  - ignore tags in release filelist
@@ -12625,26 +13030,21 @@ only simple package.xml 2.0 will be converted.  package.xml 2.0 with:
 
 will cause pickle to fail, and output an error message.  If your package2.xml
 uses any of these features, you are best off using PEAR_PackageFileManager to
-generate both package.xml.</doc>
+generate both package.xml.
+</doc>
  </pickle>
-</commands>               PEAR-1.7.2/PEAR/Command/Pickle.php                                                                  100644    1750    1750        37420 11014312742  11540                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.8.0/PEAR/Command/Pickle.php                                                                  100664     764     764        37212      100664  11357                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Pickle (pickle command)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  2005-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Pickle.php,v 1.8 2008/01/29 03:21:01 cellog Exp $
+ * @copyright  2005-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Pickle.php,v 1.13 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.1
  */
@@ -12660,9 +13060,9 @@ require_once 'PEAR/Command/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  2005-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  2005-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.1
  */
@@ -12716,7 +13116,6 @@ generate both package.xml.
         parent::PEAR_Command_Common($ui, $config);
     }
 
-
     /**
      * For unit-testing ease
      *
@@ -12727,6 +13126,7 @@ generate both package.xml.
         if (!class_exists('PEAR_Packager')) {
             require_once 'PEAR/Packager.php';
         }
+
         $a = &new PEAR_Packager;
         return $a;
     }
@@ -12744,9 +13144,11 @@ generate both package.xml.
         if (!class_exists('PEAR_Common')) {
             require_once 'PEAR/Common.php';
         }
+
         if (!class_exists('PEAR_PackageFile')) {
             require_once 'PEAR/PackageFile.php';
         }
+
         $a = &new PEAR_PackageFile($config, $debug, $tmpdir);
         $common = new PEAR_Common;
         $common->ui = $this->ui;
@@ -12762,15 +13164,18 @@ generate both package.xml.
         if (PEAR::isError($err = $this->_convertPackage($pkginfofile))) {
             return $err;
         }
+
         $compress = empty($options['nocompress']) ? true : false;
         $result = $packager->package($pkginfofile, $compress, 'package.xml');
         if (PEAR::isError($result)) {
             return $this->raiseError($result);
         }
+
         // Don't want output, only the package file name just created
         if (isset($options['showname'])) {
             $this->ui->outputData($result, $command);
         }
+
         return true;
     }
 
@@ -12782,6 +13187,7 @@ generate both package.xml.
             return $this->raiseError('Cannot process "' .
                 $packagexml . '", is not a package.xml 2.0');
         }
+
         require_once 'PEAR/PackageFile/v1.php';
         $pf = new PEAR_PackageFile_v1;
         $pf->setConfig($this->config);
@@ -12790,38 +13196,45 @@ generate both package.xml.
             '", is not an extension source package.  Using a PEAR_PackageFileManager-based ' .
             'script is an option');
         }
+
         if (is_array($pf2->getUsesRole())) {
             return $this->raiseError('Cannot safely convert "' . $packagexml .
             '", contains custom roles.  Using a PEAR_PackageFileManager-based script or ' .
             'the convert command is an option');
         }
+
         if (is_array($pf2->getUsesTask())) {
             return $this->raiseError('Cannot safely convert "' . $packagexml .
             '", contains custom tasks.  Using a PEAR_PackageFileManager-based script or ' .
             'the convert command is an option');
         }
+
         $deps = $pf2->getDependencies();
         if (isset($deps['group'])) {
             return $this->raiseError('Cannot safely convert "' . $packagexml .
             '", contains dependency groups.  Using a PEAR_PackageFileManager-based script ' .
             'or the convert command is an option');
         }
+
         if (isset($deps['required']['subpackage']) ||
               isset($deps['optional']['subpackage'])) {
             return $this->raiseError('Cannot safely convert "' . $packagexml .
             '", contains subpackage dependencies.  Using a PEAR_PackageFileManager-based  '.
             'script is an option');
         }
+
         if (isset($deps['required']['os'])) {
             return $this->raiseError('Cannot safely convert "' . $packagexml .
             '", contains os dependencies.  Using a PEAR_PackageFileManager-based  '.
             'script is an option');
         }
+
         if (isset($deps['required']['arch'])) {
             return $this->raiseError('Cannot safely convert "' . $packagexml .
             '", contains arch dependencies.  Using a PEAR_PackageFileManager-based  '.
             'script is an option');
         }
+
         $pf->setPackage($pf2->getPackage());
         $pf->setSummary($pf2->getSummary());
         $pf->setDescription($pf2->getDescription());
@@ -12829,6 +13242,7 @@ generate both package.xml.
             $pf->addMaintainer($maintainer['role'], $maintainer['handle'],
                 $maintainer['name'], $maintainer['email']);
         }
+
         $pf->setVersion($pf2->getVersion());
         $pf->setDate($pf2->getDate());
         $pf->setLicense($pf2->getLicense());
@@ -12838,134 +13252,168 @@ generate both package.xml.
         if (isset($deps['required']['php']['max'])) {
             $pf->addPhpDep($deps['required']['php']['max'], 'le');
         }
+
         if (isset($deps['required']['package'])) {
             if (!isset($deps['required']['package'][0])) {
                 $deps['required']['package'] = array($deps['required']['package']);
             }
+
             foreach ($deps['required']['package'] as $dep) {
                 if (!isset($dep['channel'])) {
                     return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
                     ' contains uri-based dependency on a package.  Using a ' .
                     'PEAR_PackageFileManager-based script is an option');
                 }
-                if ($dep['channel'] != 'pear.php.net' && $dep['channel'] != 'pecl.php.net') {
+
+                if ($dep['channel'] != 'pear.php.net'
+                    && $dep['channel'] != 'pecl.php.net'
+                    && $dep['channel'] != 'doc.php.net') {
                     return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
                     ' contains dependency on a non-standard channel package.  Using a ' .
                     'PEAR_PackageFileManager-based script is an option');
                 }
+
                 if (isset($dep['conflicts'])) {
                     return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
                     ' contains conflicts dependency.  Using a ' .
                     'PEAR_PackageFileManager-based script is an option');
                 }
+
                 if (isset($dep['exclude'])) {
                     $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
                 }
+
                 if (isset($dep['min'])) {
                     $pf->addPackageDep($dep['name'], $dep['min'], 'ge');
                 }
+
                 if (isset($dep['max'])) {
                     $pf->addPackageDep($dep['name'], $dep['max'], 'le');
                 }
             }
         }
+
         if (isset($deps['required']['extension'])) {
             if (!isset($deps['required']['extension'][0])) {
                 $deps['required']['extension'] = array($deps['required']['extension']);
             }
+
             foreach ($deps['required']['extension'] as $dep) {
                 if (isset($dep['conflicts'])) {
                     return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
                     ' contains conflicts dependency.  Using a ' .
                     'PEAR_PackageFileManager-based script is an option');
                 }
+
                 if (isset($dep['exclude'])) {
                     $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
                 }
+
                 if (isset($dep['min'])) {
                     $pf->addExtensionDep($dep['name'], $dep['min'], 'ge');
                 }
+
                 if (isset($dep['max'])) {
                     $pf->addExtensionDep($dep['name'], $dep['max'], 'le');
                 }
             }
         }
+
         if (isset($deps['optional']['package'])) {
             if (!isset($deps['optional']['package'][0])) {
                 $deps['optional']['package'] = array($deps['optional']['package']);
             }
+
             foreach ($deps['optional']['package'] as $dep) {
                 if (!isset($dep['channel'])) {
                     return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
                     ' contains uri-based dependency on a package.  Using a ' .
                     'PEAR_PackageFileManager-based script is an option');
                 }
-                if ($dep['channel'] != 'pear.php.net' && $dep['channel'] != 'pecl.php.net') {
+
+                if ($dep['channel'] != 'pear.php.net'
+                    && $dep['channel'] != 'pecl.php.net'
+                    && $dep['channel'] != 'doc.php.net') {
                     return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
                     ' contains dependency on a non-standard channel package.  Using a ' .
                     'PEAR_PackageFileManager-based script is an option');
                 }
+
                 if (isset($dep['exclude'])) {
                     $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
                 }
+
                 if (isset($dep['min'])) {
                     $pf->addPackageDep($dep['name'], $dep['min'], 'ge', 'yes');
                 }
+
                 if (isset($dep['max'])) {
                     $pf->addPackageDep($dep['name'], $dep['max'], 'le', 'yes');
                 }
             }
         }
+
         if (isset($deps['optional']['extension'])) {
             if (!isset($deps['optional']['extension'][0])) {
                 $deps['optional']['extension'] = array($deps['optional']['extension']);
             }
+
             foreach ($deps['optional']['extension'] as $dep) {
                 if (isset($dep['exclude'])) {
                     $this->ui->outputData('WARNING: exclude tags are ignored in conversion');
                 }
+
                 if (isset($dep['min'])) {
                     $pf->addExtensionDep($dep['name'], $dep['min'], 'ge', 'yes');
                 }
+
                 if (isset($dep['max'])) {
                     $pf->addExtensionDep($dep['name'], $dep['max'], 'le', 'yes');
                 }
             }
         }
+
         $contents = $pf2->getContents();
-        $release = $pf2->getReleases();
+        $release  = $pf2->getReleases();
         if (isset($releases[0])) {
-            return $this->raiseError('Cannot safely process "' . $packagexml . '" contains ' 
+            return $this->raiseError('Cannot safely process "' . $packagexml . '" contains '
             . 'multiple extsrcrelease/zendextsrcrelease tags.  Using a PEAR_PackageFileManager-based script ' .
             'or the convert command is an option');
         }
+
         if ($configoptions = $pf2->getConfigureOptions()) {
             foreach ($configoptions as $option) {
-                $pf->addConfigureOption($option['name'], $option['prompt'],
-                    isset($option['default']) ? $option['default'] : false);
+                $default = isset($option['default']) ? $option['default'] : false;
+                $pf->addConfigureOption($option['name'], $option['prompt'], $default);
             }
         }
+
         if (isset($release['filelist']['ignore'])) {
-            return $this->raiseError('Cannot safely process "' . $packagexml . '" contains ' 
+            return $this->raiseError('Cannot safely process "' . $packagexml . '" contains '
             . 'ignore tags.  Using a PEAR_PackageFileManager-based script or the convert' .
             ' command is an option');
         }
+
         if (isset($release['filelist']['install']) &&
               !isset($release['filelist']['install'][0])) {
             $release['filelist']['install'] = array($release['filelist']['install']);
         }
+
         if (isset($contents['dir']['attribs']['baseinstalldir'])) {
             $baseinstalldir = $contents['dir']['attribs']['baseinstalldir'];
         } else {
             $baseinstalldir = false;
         }
+
         if (!isset($contents['dir']['file'][0])) {
             $contents['dir']['file'] = array($contents['dir']['file']);
         }
+
         foreach ($contents['dir']['file'] as $file) {
             if ($baseinstalldir && !isset($file['attribs']['baseinstalldir'])) {
                 $file['attribs']['baseinstalldir'] = $baseinstalldir;
             }
+
             $processFile = $file;
             unset($processFile['attribs']);
             if (count($processFile)) {
@@ -12978,11 +13426,13 @@ generate both package.xml.
                     $file['attribs']['replace'][] = $task;
                 }
             }
+
             if (!in_array($file['attribs']['role'], PEAR_Common::getFileRoles())) {
                 return $this->raiseError('Cannot safely convert "' . $packagexml .
                 '", contains custom roles.  Using a PEAR_PackageFileManager-based script ' .
                 'or the convert command is an option');
             }
+
             if (isset($release['filelist']['install'])) {
                 foreach ($release['filelist']['install'] as $installas) {
                     if ($installas['attribs']['name'] == $file['attribs']['name']) {
@@ -12990,20 +13440,20 @@ generate both package.xml.
                     }
                 }
             }
+
             $pf->addFile('/', $file['attribs']['name'], $file['attribs']);
         }
+
         if ($pf2->getChangeLog()) {
             $this->ui->outputData('WARNING: changelog is not translated to package.xml ' .
                 '1.0, use PEAR_PackageFileManager-based script if you need changelog-' .
                 'translation for package.xml 1.0');
         }
+
         $gen = &$pf->getDefaultGenerator();
         $gen->toPackageFile('.');
     }
-}
-
-?>
-                                                                                                                                                                                                                                                PEAR-1.7.2/PEAR/Command/Registry.xml                                                                100644    1750    1750         3376 11014312742  12135                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.8.0/PEAR/Command/Registry.xml                                                                100777     764     764         3376      100777  11767                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <list>
   <summary>List Installed Packages In The Default Channel</summary>
   <function>doList</function>
@@ -13060,25 +13510,19 @@ Displays information about a package. The package argument may be a
 local package file, an URL to a package file, or the name of an
 installed package.</doc>
  </info>
-</commands>                                                                                                                                                                                                                                                                  PEAR-1.7.2/PEAR/Command/Registry.php                                                                100644    1750    1750       133067 11014312742  12165                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                                                                                  PEAR-1.8.0/PEAR/Command/Registry.php                                                                100664     764     764       132374      100664  12005                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Registry (list, list-files, shell-test, info commands)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Registry.php,v 1.81 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Registry.php,v 1.88 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -13095,16 +13539,14 @@ require_once 'PEAR/Command/Common.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Command_Registry extends PEAR_Command_Common
 {
-    // {{{ properties
-
     var $commands = array(
         'list' => array(
             'summary' => 'List Installed Packages In The Default Channel',
@@ -13163,9 +13605,6 @@ installed package.'
             )
         );
 
-    // }}}
-    // {{{ constructor
-
     /**
      * PEAR_Command_Registry constructor.
      *
@@ -13176,10 +13615,6 @@ installed package.'
         parent::PEAR_Command_Common($ui, $config);
     }
 
-    // }}}
-
-    // {{{ doList()
-
     function _sortinfo($a, $b)
     {
         $apackage = isset($a['package']) ? $a['package'] : $a['name'];
@@ -13194,6 +13629,7 @@ installed package.'
         if (isset($options['allchannels']) && !$channelinfo) {
             return $this->doListAll($command, array(), $params);
         }
+
         if (isset($options['allchannels']) && $channelinfo) {
             // allchannels with $channelinfo
             unset($options['allchannels']);
@@ -13208,26 +13644,30 @@ installed package.'
                     $errors[] = $ret;
                 }
             }
+
             PEAR::staticPopErrorHandling();
             if (count($errors)) {
                 // for now, only give first error
                 return PEAR::raiseError($errors[0]);
             }
+
             return true;
         }
 
-        if (count($params) == 1) {
+        if (count($params) === 1) {
             return $this->doFileList($command, $options, $params);
         }
+
         if (isset($options['channel'])) {
-            if ($reg->channelExists($options['channel'])) {
-                $channel = $reg->channelName($options['channel']);
-            } else {
+            if (!$reg->channelExists($options['channel'])) {
                 return $this->raiseError('Channel "' . $options['channel'] .'" does not exist');
             }
+
+            $channel = $reg->channelName($options['channel']);
         } else {
             $channel = $this->config->get('default_channel');
         }
+
         $installed = $reg->packageInfo(null, null, $channel);
         usort($installed, array(&$this, '_sortinfo'));
 
@@ -13258,7 +13698,8 @@ installed package.'
             }
             $data['data'][] = $packageinfo;
         }
-        if (count($installed) == 0) {
+
+        if (count($installed) === 0) {
             if (!$channelinfo) {
                 $data = '(no packages installed from channel ' . $channel . ')';
             } else {
@@ -13267,14 +13708,15 @@ installed package.'
                         $channel . ':',
                     'border' => true,
                     'channel' => $channel,
-                    'data' => '(no packages installed)',
+                    'data' => array(array('(no packages installed)')),
                 );
             }
         }
+
         $this->ui->outputData($data, $command);
         return true;
     }
-    
+
     function doListAll($command, $options, $params)
     {
         // This duplicate code is deprecated over
@@ -13285,22 +13727,27 @@ installed package.'
         foreach ($installed as $channel => $packages) {
             usort($packages, array($this, '_sortinfo'));
             $data = array(
-                'caption' => 'Installed packages, channel ' . $channel . ':',
-                'border' => true,
+                'caption'  => 'Installed packages, channel ' . $channel . ':',
+                'border'   => true,
                 'headline' => array('Package', 'Version', 'State'),
-                'channel' => $channel
-                );
+                'channel'  => $channel
+            );
+
             foreach ($packages as $package) {
-                $pobj = $reg->getPackage(isset($package['package']) ?
-                                            $package['package'] : $package['name'], $channel);
+                $p = isset($package['package']) ? $package['package'] : $package['name'];
+                $pobj = $reg->getPackage($p, $channel);
                 $data['data'][] = array($pobj->getPackage(), $pobj->getVersion(),
                                         $pobj->getState() ? $pobj->getState() : null);
             }
-            if (count($packages)==0) {
+
+            // Adds a blank line after each section
+            $data['data'][] = array();
+
+            if (count($packages) === 0) {
                 $data = array(
                     'caption' => 'Installed packages, channel ' . $channel . ':',
                     'border' => true,
-                    'data' => array(array('(no packages installed)')),
+                    'data' => array(array('(no packages installed)'), array()),
                     'channel' => $channel
                     );
             }
@@ -13308,22 +13755,24 @@ installed package.'
         }
         return true;
     }
-    
+
     function doFileList($command, $options, $params)
     {
-        if (count($params) != 1) {
+        if (count($params) !== 1) {
             return $this->raiseError('list-files expects 1 parameter');
         }
+
         $reg = &$this->config->getRegistry();
         $fp = false;
-        if (!is_dir($params[0]) && (file_exists($params[0]) || $fp = @fopen($params[0],
-              'r'))) {
+        if (!is_dir($params[0]) && (file_exists($params[0]) || $fp = @fopen($params[0], 'r'))) {
             if ($fp) {
                 fclose($fp);
             }
+
             if (!class_exists('PEAR_PackageFile')) {
                 require_once 'PEAR/PackageFile.php';
             }
+
             $pkg = &new PEAR_PackageFile($this->config, $this->_debug);
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
             $info = &$pkg->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
@@ -13337,16 +13786,20 @@ installed package.'
             if (PEAR::isError($parsed)) {
                 return $this->raiseError($parsed);
             }
+
             $info = &$reg->getPackage($parsed['package'], $parsed['channel']);
             $headings = array('Type', 'Install Path');
             $installed = true;
         }
+
         if (PEAR::isError($info)) {
             return $this->raiseError($info);
         }
+
         if ($info === null) {
             return $this->raiseError("`$params[0]' not installed");
         }
+
         $list = ($info->getPackagexmlVersion() == '1.0' || $installed) ?
             $info->getFilelist() : $info->getContents();
         if ($installed) {
@@ -13354,6 +13807,7 @@ installed package.'
         } else {
             $caption = 'Contents of ' . basename($params[0]);
         }
+
         $data = array(
             'caption' => $caption,
             'border' => true,
@@ -13403,6 +13857,7 @@ installed package.'
             if (!isset($list['dir']['file'][0])) {
                 $list['dir']['file'] = array($list['dir']['file']);
             }
+
             foreach ($list['dir']['file'] as $att) {
                 $att = $att['attribs'];
                 $file = $att['name'];
@@ -13421,24 +13876,24 @@ installed package.'
                 $data['data'][] = array($file, $dest);
             }
         }
+
         $this->ui->outputData($data, $command);
         return true;
     }
 
-    // }}}
-    // {{{ doShellTest()
-
     function doShellTest($command, $options, $params)
     {
         if (count($params) < 1) {
             return PEAR::raiseError('ERROR, usage: pear shell-test packagename [[relation] version]');
         }
+
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $reg = &$this->config->getRegistry();
         $info = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
         if (PEAR::isError($info)) {
             exit(1); // invalid package name
         }
+
         $package = $info['package'];
         $channel = $info['channel'];
         // "pear shell-test Foo"
@@ -13449,18 +13904,19 @@ installed package.'
                 }
             }
         }
-        if (sizeof($params) == 1) {
+
+        if (count($params) === 1) {
             if (!$reg->packageExists($package, $channel)) {
                 exit(1);
             }
             // "pear shell-test Foo 1.0"
-        } elseif (sizeof($params) == 2) {
+        } elseif (count($params) === 2) {
             $v = $reg->packageInfo($package, 'version', $channel);
             if (!$v || !version_compare("$v", "{$params[1]}", "ge")) {
                 exit(1);
             }
             // "pear shell-test Foo ge 1.0"
-        } elseif (sizeof($params) == 3) {
+        } elseif (count($params) === 3) {
             $v = $reg->packageInfo($package, 'version', $channel);
             if (!$v || !version_compare("$v", "{$params[2]}", $params[1])) {
                 exit(1);
@@ -13472,23 +13928,23 @@ installed package.'
         }
     }
 
-    // }}}
-    // {{{ doInfo
-
     function doInfo($command, $options, $params)
     {
-        if (count($params) != 1) {
+        if (count($params) !== 1) {
             return $this->raiseError('pear info expects 1 parameter');
         }
+
         $info = $fp = false;
         $reg = &$this->config->getRegistry();
         if ((file_exists($params[0]) && is_file($params[0]) && !is_dir($params[0])) || $fp = @fopen($params[0], 'r')) {
             if ($fp) {
                 fclose($fp);
             }
+
             if (!class_exists('PEAR_PackageFile')) {
                 require_once 'PEAR/PackageFile.php';
             }
+
             $pkg = &new PEAR_PackageFile($this->config, $this->_debug);
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
             $obj = &$pkg->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);
@@ -13503,18 +13959,21 @@ installed package.'
                         $this->ui->outputData($message);
                     }
                 }
+
                 return $this->raiseError($obj);
             }
-            if ($obj->getPackagexmlVersion() == '1.0') {
-                $info = $obj->toArray();
-            } else {
+
+            if ($obj->getPackagexmlVersion() != '1.0') {
                 return $this->_doInfo2($command, $options, $params, $obj, false);
             }
+
+            $info = $obj->toArray();
         } else {
             $parsed = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
             if (PEAR::isError($parsed)) {
                 return $this->raiseError($parsed);
             }
+
             $package = $parsed['package'];
             $channel = $parsed['channel'];
             $info = $reg->packageInfo($package, null, $channel);
@@ -13523,13 +13982,16 @@ installed package.'
                 return $this->_doInfo2($command, $options, $params, $obj, true);
             }
         }
+
         if (PEAR::isError($info)) {
             return $info;
         }
+
         if (empty($info)) {
             $this->raiseError("No information found for `$params[0]'");
             return;
         }
+
         unset($info['filelist']);
         unset($info['dirtree']);
         unset($info['changelog']);
@@ -13537,10 +13999,12 @@ installed package.'
             $info['package.xml version'] = $info['xsdversion'];
             unset($info['xsdversion']);
         }
+
         if (isset($info['packagerversion'])) {
             $info['packaged with PEAR version'] = $info['packagerversion'];
             unset($info['packagerversion']);
         }
+
         $keys = array_keys($info);
         $longtext = array('description', 'summary');
         foreach ($keys as $key) {
@@ -13645,6 +14109,7 @@ installed package.'
                     }
                 }
             }
+
             if ($key == '_lastmodified') {
                 $hdate = date('Y-m-d', $info[$key]);
                 unset($info[$key]);
@@ -13659,6 +14124,7 @@ installed package.'
                 }
             }
         }
+
         $caption = 'About ' . $info['package'] . '-' . $info['version'];
         $data = array(
             'caption' => $caption,
@@ -13672,8 +14138,6 @@ installed package.'
         $this->ui->outputData($data, 'package-info');
     }
 
-    // }}}
-
     /**
      * @access private
      */
@@ -13711,6 +14175,7 @@ installed package.'
         if ($src = $obj->getSourcePackage()) {
             $extends .= ' (source package ' . $src['channel'] . '/' . $src['package'] . ')';
         }
+
         $info = array(
             'Release Type' => $release,
             'Name' => $extends,
@@ -13724,21 +14189,27 @@ installed package.'
             if (!$leads) {
                 continue;
             }
+
             if (isset($leads['active'])) {
                 $leads = array($leads);
             }
+
             foreach ($leads as $lead) {
                 if (!empty($info['Maintainers'])) {
                     $info['Maintainers'] .= "\n";
                 }
+
+                $active = $lead['active'] == 'no' ? ', inactive' : '';
                 $info['Maintainers'] .= $lead['name'] . ' <';
-                $info['Maintainers'] .= $lead['email'] . "> ($role)";
+                $info['Maintainers'] .= $lead['email'] . "> ($role$active)";
             }
         }
+
         $info['Release Date'] = $obj->getDate();
         if ($time = $obj->getTime()) {
             $info['Release Date'] .= ' ' . $time;
         }
+
         $info['Release Version'] = $obj->getVersion() . ' (' . $obj->getState() . ')';
         $info['API Version'] = $obj->getVersion('api') . ' (' . $obj->getState('api') . ')';
         $info['License'] = $obj->getLicense();
@@ -13753,11 +14224,13 @@ installed package.'
                 }
             }
         }
+
         $info['Release Notes'] = $obj->getNotes();
         if ($compat = $obj->getCompatible()) {
             if (!isset($compat[0])) {
                 $compat = array($compat);
             }
+
             $info['Compatible with'] = '';
             foreach ($compat as $package) {
                 $info['Compatible with'] .= $package['channel'] . '/' . $package['name'] .
@@ -13766,6 +14239,7 @@ installed package.'
                     if (is_array($package['exclude'])) {
                         $package['exclude'] = implode(', ', $package['exclude']);
                     }
+
                     if (!isset($info['Not Compatible with'])) {
                         $info['Not Compatible with'] = '';
                     } else {
@@ -13776,17 +14250,20 @@ installed package.'
                 }
             }
         }
+
         $usesrole = $obj->getUsesrole();
         if ($usesrole) {
             if (!isset($usesrole[0])) {
                 $usesrole = array($usesrole);
             }
+
             foreach ($usesrole as $roledata) {
                 if (isset($info['Uses Custom Roles'])) {
                     $info['Uses Custom Roles'] .= "\n";
                 } else {
                     $info['Uses Custom Roles'] = '';
                 }
+
                 if (isset($roledata['package'])) {
                     $rolepackage = $reg->parsedPackageNameToString($roledata, true);
                 } else {
@@ -13795,17 +14272,20 @@ installed package.'
                 $info['Uses Custom Roles'] .= $roledata['role'] . ' (' . $rolepackage . ')';
             }
         }
+
         $usestask = $obj->getUsestask();
         if ($usestask) {
             if (!isset($usestask[0])) {
                 $usestask = array($usestask);
             }
+
             foreach ($usestask as $taskdata) {
                 if (isset($info['Uses Custom Tasks'])) {
                     $info['Uses Custom Tasks'] .= "\n";
                 } else {
                     $info['Uses Custom Tasks'] = '';
                 }
+
                 if (isset($taskdata['package'])) {
                     $taskpackage = $reg->parsedPackageNameToString($taskdata, true);
                 } else {
@@ -13814,6 +14294,7 @@ installed package.'
                 $info['Uses Custom Tasks'] .= $taskdata['task'] . ' (' . $taskpackage . ')';
             }
         }
+
         $deps = $obj->getDependencies();
         $info['Required Dependencies'] = 'PHP version ' . $deps['required']['php']['min'];
         if (isset($deps['required']['php']['max'])) {
@@ -13821,12 +14302,14 @@ installed package.'
         } else {
             $info['Required Dependencies'] .= "\n";
         }
+
         if (isset($deps['required']['php']['exclude'])) {
             if (!isset($info['Not Compatible with'])) {
                 $info['Not Compatible with'] = '';
             } else {
                 $info['Not Compatible with'] .= "\n";
             }
+
             if (is_array($deps['required']['php']['exclude'])) {
                 $deps['required']['php']['exclude'] =
                     implode(', ', $deps['required']['php']['exclude']);
@@ -13834,6 +14317,7 @@ installed package.'
             $info['Not Compatible with'] .= "PHP versions\n  " .
                 $deps['required']['php']['exclude'];
         }
+
         $info['Required Dependencies'] .= 'PEAR installer version';
         if (isset($deps['required']['pearinstaller']['max'])) {
             $info['Required Dependencies'] .= 's ' .
@@ -13843,12 +14327,14 @@ installed package.'
             $info['Required Dependencies'] .= ' ' .
                 $deps['required']['pearinstaller']['min'] . ' or newer';
         }
+
         if (isset($deps['required']['pearinstaller']['exclude'])) {
             if (!isset($info['Not Compatible with'])) {
                 $info['Not Compatible with'] = '';
             } else {
                 $info['Not Compatible with'] .= "\n";
             }
+
             if (is_array($deps['required']['pearinstaller']['exclude'])) {
                 $deps['required']['pearinstaller']['exclude'] =
                     implode(', ', $deps['required']['pearinstaller']['exclude']);
@@ -13856,12 +14342,14 @@ installed package.'
             $info['Not Compatible with'] .= "PEAR installer\n  Versions " .
                 $deps['required']['pearinstaller']['exclude'];
         }
+
         foreach (array('Package', 'Extension') as $type) {
             $index = strtolower($type);
             if (isset($deps['required'][$index])) {
                 if (isset($deps['required'][$index]['name'])) {
                     $deps['required'][$index] = array($deps['required'][$index]);
                 }
+
                 foreach ($deps['required'][$index] as $package) {
                     if (isset($package['conflicts'])) {
                         $infoindex = 'Not Compatible with';
@@ -13874,6 +14362,7 @@ installed package.'
                         $infoindex = 'Required Dependencies';
                         $info[$infoindex] .= "\n";
                     }
+
                     if ($index == 'extension') {
                         $name = $package['name'];
                     } else {
@@ -13883,11 +14372,13 @@ installed package.'
                             $name = '__uri/' . $package['name'] . ' (static URI)';
                         }
                     }
+
                     $info[$infoindex] .= "$type $name";
                     if (isset($package['uri'])) {
                         $info[$infoindex] .= "\n  Download URI: $package[uri]";
                         continue;
                     }
+
                     if (isset($package['max']) && isset($package['min'])) {
                         $info[$infoindex] .= " \n  Versions " .
                             $package['min'] . '-' . $package['max'];
@@ -13898,18 +14389,22 @@ installed package.'
                         $info[$infoindex] .= " \n  Version " .
                             $package['max'] . ' or older';
                     }
+
                     if (isset($package['recommended'])) {
                         $info[$infoindex] .= "\n  Recommended version: $package[recommended]";
                     }
+
                     if (isset($package['exclude'])) {
                         if (!isset($info['Not Compatible with'])) {
                             $info['Not Compatible with'] = '';
                         } else {
                             $info['Not Compatible with'] .= "\n";
                         }
+
                         if (is_array($package['exclude'])) {
                             $package['exclude'] = implode(', ', $package['exclude']);
                         }
+
                         $package['package'] = $package['name']; // for parsedPackageNameToString
                          if (isset($package['conflicts'])) {
                             $info['Not Compatible with'] .= '=> except ';
@@ -13921,10 +14416,12 @@ installed package.'
                 }
             }
         }
+
         if (isset($deps['required']['os'])) {
             if (isset($deps['required']['os']['name'])) {
                 $dep['required']['os']['name'] = array($dep['required']['os']['name']);
             }
+
             foreach ($dep['required']['os'] as $os) {
                 if (isset($os['conflicts']) && $os['conflicts'] == 'yes') {
                     if (!isset($info['Not Compatible with'])) {
@@ -13939,10 +14436,12 @@ installed package.'
                 }
             }
         }
+
         if (isset($deps['required']['arch'])) {
             if (isset($deps['required']['arch']['pattern'])) {
                 $dep['required']['arch']['pattern'] = array($dep['required']['os']['pattern']);
             }
+
             foreach ($dep['required']['arch'] as $os) {
                 if (isset($os['conflicts']) && $os['conflicts'] == 'yes') {
                     if (!isset($info['Not Compatible with'])) {
@@ -13957,6 +14456,7 @@ installed package.'
                 }
             }
         }
+
         if (isset($deps['optional'])) {
             foreach (array('Package', 'Extension') as $type) {
                 $index = strtolower($type);
@@ -13964,6 +14464,7 @@ installed package.'
                     if (isset($deps['optional'][$index]['name'])) {
                         $deps['optional'][$index] = array($deps['optional'][$index]);
                     }
+
                     foreach ($deps['optional'][$index] as $package) {
                         if (isset($package['conflicts']) && $package['conflicts'] == 'yes') {
                             $infoindex = 'Not Compatible with';
@@ -13980,6 +14481,7 @@ installed package.'
                                 $info['Optional Dependencies'] .= "\n";
                             }
                         }
+
                         if ($index == 'extension') {
                             $name = $package['name'];
                         } else {
@@ -13989,15 +14491,18 @@ installed package.'
                                 $name = '__uri/' . $package['name'] . ' (static URI)';
                             }
                         }
+
                         $info[$infoindex] .= "$type $name";
                         if (isset($package['uri'])) {
                             $info[$infoindex] .= "\n  Download URI: $package[uri]";
                             continue;
                         }
+
                         if ($infoindex == 'Not Compatible with') {
                             // conflicts is only used to say that all versions conflict
                             continue;
                         }
+
                         if (isset($package['max']) && isset($package['min'])) {
                             $info[$infoindex] .= " \n  Versions " .
                                 $package['min'] . '-' . $package['max'];
@@ -14008,18 +14513,22 @@ installed package.'
                             $info[$infoindex] .= " \n  Version " .
                                 $package['min'] . ' or older';
                         }
+
                         if (isset($package['recommended'])) {
                             $info[$infoindex] .= "\n  Recommended version: $package[recommended]";
                         }
+
                         if (isset($package['exclude'])) {
                             if (!isset($info['Not Compatible with'])) {
                                 $info['Not Compatible with'] = '';
                             } else {
                                 $info['Not Compatible with'] .= "\n";
                             }
+
                             if (is_array($package['exclude'])) {
                                 $package['exclude'] = implode(', ', $package['exclude']);
                             }
+
                             $info['Not Compatible with'] .= "Package $package\n  Versions " .
                                 $package['exclude'];
                         }
@@ -14027,10 +14536,12 @@ installed package.'
                 }
             }
         }
+
         if (isset($deps['group'])) {
             if (!isset($deps['group'][0])) {
                 $deps['group'] = array($deps['group']);
             }
+
             foreach ($deps['group'] as $group) {
                 $info['Dependency Group ' . $group['attribs']['name']] = $group['attribs']['hint'];
                 $groupindex = $group['attribs']['name'] . ' Contents';
@@ -14041,10 +14552,12 @@ installed package.'
                         if (isset($group[$index]['name'])) {
                             $group[$index] = array($group[$index]);
                         }
+
                         foreach ($group[$index] as $package) {
                             if (!empty($info[$groupindex])) {
                                 $info[$groupindex] .= "\n";
                             }
+
                             if ($index == 'extension') {
                                 $name = $package['name'];
                             } else {
@@ -14054,19 +14567,23 @@ installed package.'
                                     $name = '__uri/' . $package['name'] . ' (static URI)';
                                 }
                             }
+
                             if (isset($package['uri'])) {
                                 if (isset($package['conflicts']) && $package['conflicts'] == 'yes') {
                                     $info[$groupindex] .= "Not Compatible with $type $name";
                                 } else {
                                     $info[$groupindex] .= "$type $name";
                                 }
+
                                 $info[$groupindex] .= "\n  Download URI: $package[uri]";
                                 continue;
                             }
+
                             if (isset($package['conflicts']) && $package['conflicts'] == 'yes') {
                                 $info[$groupindex] .= "Not Compatible with $type $name";
                                 continue;
                             }
+
                             $info[$groupindex] .= "$type $name";
                             if (isset($package['max']) && isset($package['min'])) {
                                 $info[$groupindex] .= " \n  Versions " .
@@ -14078,15 +14595,18 @@ installed package.'
                                 $info[$groupindex] .= " \n  Version " .
                                     $package['min'] . ' or older';
                             }
+
                             if (isset($package['recommended'])) {
                                 $info[$groupindex] .= "\n  Recommended version: $package[recommended]";
                             }
+
                             if (isset($package['exclude'])) {
                                 if (!isset($info['Not Compatible with'])) {
                                     $info['Not Compatible with'] = '';
                                 } else {
                                     $info[$groupindex] .= "Not Compatible with\n";
                                 }
+
                                 if (is_array($package['exclude'])) {
                                     $package['exclude'] = implode(', ', $package['exclude']);
                                 }
@@ -14098,12 +14618,14 @@ installed package.'
                 }
             }
         }
+
         if ($obj->getPackageType() == 'bundle') {
             $info['Bundled Packages'] = '';
             foreach ($obj->getBundledPackages() as $package) {
                 if (!empty($info['Bundled Packages'])) {
                     $info['Bundled Packages'] .= "\n";
                 }
+
                 if (isset($package['uri'])) {
                     $info['Bundled Packages'] .= '__uri/' . $package['name'];
                     $info['Bundled Packages'] .= "\n  (URI: $package[uri]";
@@ -14112,25 +14634,25 @@ installed package.'
                 }
             }
         }
+
         $info['package.xml version'] = '2.0';
         if ($installed) {
             if ($obj->getLastModified()) {
                 $info['Last Modified'] = date('Y-m-d H:i', $obj->getLastModified());
             }
+
             $v = $obj->getLastInstalledVersion();
             $info['Previous Installed Version'] = $v ? $v : '- None -';
         }
+
         foreach ($info as $key => $value) {
             $data['data'][] = array($key, $value);
         }
-        $data['raw'] = $obj->getArray(); // no validation needed
 
+        $data['raw'] = $obj->getArray(); // no validation needed
         $this->ui->outputData($data, 'package-info');
     }
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                         PEAR-1.7.2/PEAR/Command/Remote.xml                                                                  100644    1750    1750         6344 11014312742  11556                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                                                                    PEAR-1.8.0/PEAR/Command/Remote.xml                                                                  100777     764     764         6357      100777  11414                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <remote-info>
   <summary>Information About Remote Packages</summary>
   <function>doRemoteInfo</function>
@@ -14143,7 +14665,12 @@ Get details on a package from the server.</doc>
   <summary>List Available Upgrades</summary>
   <function>doListUpgrades</function>
   <shortcut>lu</shortcut>
-  <options />
+  <options>
+   <channelinfo>
+    <shortopt>i</shortopt>
+    <doc>output fully channel-aware data, even on failure</doc>
+   </channelinfo>
+  </options>
   <doc>[preferred_state]
 List releases on the server of packages you have installed where
 a newer version is available with the same release state (stable etc.)
@@ -14159,10 +14686,6 @@ or the state passed as the second parameter.</doc>
     <doc>specify a channel other than the default channel</doc>
     <arg>CHAN</arg>
    </channel>
-   <channelinfo>
-    <shortopt>i</shortopt>
-    <doc>output fully channel-aware data, even on failure</doc>
-   </channelinfo>
   </options>
   <doc>
 Lists the packages available on the configured server along with the
@@ -14237,26 +14760,20 @@ Clear the XML-RPC/REST cache.  See also the cache_ttl configuration
 parameter.
 </doc>
  </clear-cache>
-</commands>                                                                                                                                                                                                                                                                                            PEAR-1.7.2/PEAR/Command/Remote.php                                                                  100644    1750    1750        76234 11014312742  11572                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                                                                                                 PEAR-1.8.0/PEAR/Command/Remote.php                                                                  100664     764     764        72007      100664  11404                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command_Remote (remote-info, list-upgrades, remote-list, search, list-all, download,
  * clear-cache commands)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Remote.php,v 1.107 2008/04/11 01:16:40 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Remote.php,v 1.120 2009/03/09 01:33:20 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -14274,16 +14791,14 @@ require_once 'PEAR/REST.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Command_Remote extends PEAR_Command_Common
 {
-    // {{{ command definitions
-
     var $commands = array(
         'remote-info' => array(
             'summary' => 'Information About Remote Packages',
@@ -14397,9 +14912,6 @@ parameter.
             ),
         );
 
-    // }}}
-    // {{{ constructor
-
     /**
      * PEAR_Command_Remote constructor.
      *
@@ -14410,8 +14922,6 @@ parameter.
         parent::PEAR_Command_Common($ui, $config);
     }
 
-    // }}}
-
     function _checkChannelForStatus($channel, $chan)
     {
         if (PEAR::isError($chan)) {
@@ -14430,13 +14940,11 @@ parameter.
         PEAR::staticPopErrorHandling();
         if (!PEAR::isError($a) && $a) {
             $this->ui->outputData('WARNING: channel "' . $channel . '" has ' .
-                'updated its protocols, use "channel-update ' . $channel .
+                'updated its protocols, use "' . PEAR_RUNTYPE . ' channel-update ' . $channel .
                 '" to update');
         }
     }
 
-    // {{{ doRemoteInfo()
-
     function doRemoteInfo($command, $options, $params)
     {
         if (sizeof($params) != 1) {
@@ -14456,18 +14964,22 @@ parameter.
         if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
             return $e;
         }
-        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
-              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+
+        $mirror = $this->config->get('preferred_mirror');
+        if ($chan->supportsREST($mirror) && $base = $chan->getBaseURL('REST1.0', $mirror)) {
             $rest = &$this->config->getREST('1.0', array());
             $info = $rest->packageInfo($base, $parsed['package'], $channel);
-        } else {
-            $r = &$this->config->getRemote();
-            $info = $r->call('package.info', $parsed['package']);
         }
+
+        if (!isset($info)) {
+            return $this->raiseError('No supported protocol was found');
+        }
+
         if (PEAR::isError($info)) {
             $this->config->set('default_channel', $savechannel);
             return $this->raiseError($info);
         }
+
         if (!isset($info['name'])) {
             return $this->raiseError('No remote package "' . $package . '" was found');
         }
@@ -14484,31 +14996,33 @@ parameter.
         return true;
     }
 
-    // }}}
-    // {{{ doRemoteList()
-
     function doRemoteList($command, $options, $params)
     {
         $savechannel = $channel = $this->config->get('default_channel');
         $reg = &$this->config->getRegistry();
         if (isset($options['channel'])) {
             $channel = $options['channel'];
-            if ($reg->channelExists($channel)) {
-                $this->config->set('default_channel', $channel);
-            } else {
+            if (!$reg->channelExists($channel)) {
                 return $this->raiseError('Channel "' . $channel . '" does not exist');
             }
+
+            $this->config->set('default_channel', $channel);
         }
+
         $chan = $reg->getChannel($channel);
         if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
             return $e;
         }
+
         $list_options = false;
         if ($this->config->get('preferred_state') == 'stable') {
             $list_options = true;
         }
+
+        $available = array();
         if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
-              $base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) {
+              $base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))
+        ) {
             // use faster list-all if available
             $rest = &$this->config->getREST('1.1', array());
             $available = $rest->listAll($base, $list_options, true, false, false, $chan->getName());
@@ -14516,19 +15030,13 @@ parameter.
               $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
             $rest = &$this->config->getREST('1.0', array());
             $available = $rest->listAll($base, $list_options, true, false, false, $chan->getName());
-        } else {
-            $r = &$this->config->getRemote();
-            if ($channel == 'pear.php.net') {
-                // hack because of poor pearweb design
-                $available = $r->call('package.listAll', true, $list_options, false);
-            } else {
-                $available = $r->call('package.listAll', true, $list_options);
-            }
         }
+
         if (PEAR::isError($available)) {
             $this->config->set('default_channel', $savechannel);
             return $this->raiseError($available);
         }
+
         $i = $j = 0;
         $data = array(
             'caption' => 'Channel ' . $channel . ' Available packages:',
@@ -14536,12 +15044,13 @@ parameter.
             'headline' => array('Package', 'Version'),
             'channel' => $channel
             );
-        if (count($available)==0) {
+
+        if (count($available) == 0) {
             $data = '(no packages available yet)';
         } else {
             foreach ($available as $name => $info) {
-                $data['data'][] = array($name, (isset($info['stable']) && $info['stable'])
-                    ? $info['stable'] : '-n/a-');
+                $version = (isset($info['stable']) && $info['stable']) ? $info['stable'] : '-n/a-';
+                $data['data'][] = array($name, $version);
             }
         }
         $this->ui->outputData($data, $command);
@@ -14549,29 +15058,29 @@ parameter.
         return true;
     }
 
-    // }}}
-    // {{{ doListAll()
-
     function doListAll($command, $options, $params)
     {
         $savechannel = $channel = $this->config->get('default_channel');
         $reg = &$this->config->getRegistry();
         if (isset($options['channel'])) {
             $channel = $options['channel'];
-            if ($reg->channelExists($channel)) {
-                $this->config->set('default_channel', $channel);
-            } else {
+            if (!$reg->channelExists($channel)) {
                 return $this->raiseError("Channel \"$channel\" does not exist");
             }
+
+            $this->config->set('default_channel', $channel);
         }
+
         $list_options = false;
         if ($this->config->get('preferred_state') == 'stable') {
             $list_options = true;
         }
+
         $chan = $reg->getChannel($channel);
         if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
             return $e;
         }
+
         if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
               $base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) {
             // use faster list-all if available
@@ -14581,25 +15090,20 @@ parameter.
               $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
             $rest = &$this->config->getREST('1.0', array());
             $available = $rest->listAll($base, $list_options, false, false, false, $chan->getName());
-        } else {
-            $r = &$this->config->getRemote();
-            if ($channel == 'pear.php.net') {
-                // hack because of poor pearweb design
-                $available = $r->call('package.listAll', true, $list_options, false);
-            } else {
-                $available = $r->call('package.listAll', true, $list_options);
-            }
         }
+
         if (PEAR::isError($available)) {
             $this->config->set('default_channel', $savechannel);
             return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "' . $available->getMessage() . '")');
         }
+
         $data = array(
             'caption' => 'All packages [Channel ' . $channel . ']:',
             'border' => true,
             'headline' => array('Package', 'Latest', 'Local'),
             'channel' => $channel,
             );
+
         if (isset($options['channelinfo'])) {
             // add full channelinfo
             $data['caption'] = 'Channel ' . $channel . ' All packages:';
@@ -14679,6 +15183,7 @@ parameter.
             $this->ui->outputData($data, $command);
             return true;
         }
+
         foreach ($local_pkgs as $name) {
             $info = &$reg->getPackage($name, $channel);
             $data['data']['Local'][] = array(
@@ -14695,16 +15200,13 @@ parameter.
         return true;
     }
 
-    // }}}
-    // {{{ doSearch()
-
     function doSearch($command, $options, $params)
     {
         if ((!isset($params[0]) || empty($params[0]))
             && (!isset($params[1]) || empty($params[1])))
         {
             return $this->raiseError('no valid search string supplied');
-        };
+        }
 
         $channelinfo = isset($options['channelinfo']);
         $reg = &$this->config->getRegistry();
@@ -14723,6 +15225,7 @@ parameter.
                     }
                 }
             }
+
             PEAR::staticPopErrorHandling();
             if (count($errors) !== 0) {
                 // for now, only give first error
@@ -14733,34 +15236,34 @@ parameter.
         }
 
         $savechannel = $channel = $this->config->get('default_channel');
-        $package = $params[0];
+        $package = strtolower($params[0]);
         $summary = isset($params[1]) ? $params[1] : false;
         if (isset($options['channel'])) {
             $reg = &$this->config->getRegistry();
             $channel = $options['channel'];
-            if ($reg->channelExists($channel)) {
-                $this->config->set('default_channel', $channel);
-            } else {
+            if (!$reg->channelExists($channel)) {
                 return $this->raiseError('Channel "' . $channel . '" does not exist');
             }
+
+            $this->config->set('default_channel', $channel);
         }
+
         $chan = $reg->getChannel($channel);
         if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
             return $e;
         }
+
         if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
               $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
             $rest = &$this->config->getREST('1.0', array());
             $available = $rest->listAll($base, false, false, $package, $summary, $chan->getName());
-        } else {
-            $r = &$this->config->getRemote();
-            $available = $r->call('package.search', $package, $summary, true,
-                $this->config->get('preferred_state') == 'stable', true);
         }
+
         if (PEAR::isError($available)) {
             $this->config->set('default_channel', $savechannel);
             return $this->raiseError($available);
         }
+
         if (!$available && !$channelinfo) {
             // clean exit when not found, no error !
             $data = 'no packages found that match pattern "' . $package . '", for channel '.$channel.'.';
@@ -14768,6 +15271,7 @@ parameter.
             $this->config->set('default_channel', $channel);
             return true;
         }
+
         if ($channelinfo) {
             $data = array(
                 'caption' => 'Matched packages, channel ' . $channel . ':',
@@ -14789,6 +15293,7 @@ parameter.
             $data['data'] = 'No packages found that match pattern "' . $package . '".';
             $available = array();
         }
+
         foreach ($available as $name => $info) {
             $installed = $reg->packageInfo($name, null, $channel);
             $desc = $info['summary'];
@@ -14825,12 +15330,12 @@ parameter.
             }
             $data['data'][$info['category']][] = $packageinfo;
         }
+
         $this->ui->outputData($data, $command);
         $this->config->set('default_channel', $channel);
         return true;
     }
 
-    // }}}
     function &getDownloader($options)
     {
         if (!class_exists('PEAR_Downloader')) {
@@ -14839,7 +15344,6 @@ parameter.
         $a = &new PEAR_Downloader($this->ui, $options, $this->config);
         return $a;
     }
-    // {{{ doDownload()
 
     function doDownload($command, $options, $params)
     {
@@ -14859,23 +15363,30 @@ parameter.
         if (PEAR::isError($e)) {
             return $this->raiseError('Current directory is not writeable, cannot download');
         }
+
         $errors = array();
         $downloaded = array();
         $err = $downloader->download($params);
         if (PEAR::isError($err)) {
             return $err;
         }
+
         $errors = $downloader->getErrorMsgs();
         if (count($errors)) {
             foreach ($errors as $error) {
-                $this->ui->outputData($error);
+                if ($error !== null) {
+                    $this->ui->outputData($error);
+                }
             }
+
             return $this->raiseError("$command failed");
         }
+
         $downloaded = $downloader->getDownloadedPackages();
         foreach ($downloaded as $pkg) {
             $this->ui->outputData("File $pkg[file] downloaded", $command);
         }
+
         return true;
     }
 
@@ -14886,15 +15397,13 @@ parameter.
         }
     }
 
-    // }}}
-    // {{{ doListUpgrades()
-
     function doListUpgrades($command, $options, $params)
     {
         require_once 'PEAR/Common.php';
         if (isset($params[0]) && !is_array(PEAR_Common::betterStates($params[0]))) {
             return $this->raiseError($params[0] . ' is not a valid state (stable/beta/alpha/devel/etc.) try "pear help list-upgrades"');
         }
+
         $savechannel = $channel = $this->config->get('default_channel');
         $reg = &$this->config->getRegistry();
         foreach ($reg->listChannels() as $channel) {
@@ -14902,20 +15411,21 @@ parameter.
             if (!count($inst)) {
                 continue;
             }
+
             if ($channel == '__uri') {
                 continue;
             }
+
             $this->config->set('default_channel', $channel);
-            if (empty($params[0])) {
-                $state = $this->config->get('preferred_state');
-            } else {
-                $state = $params[0];
-            }
+            $state = empty($params[0]) ? $this->config->get('preferred_state') : $params[0];
+
             $caption = $channel . ' Available Upgrades';
             $chan = $reg->getChannel($channel);
             if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
                 return $e;
             }
+
+            $latest = array();
             if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
                   $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
                 $rest = &$this->config->getREST('1.0', array());
@@ -14924,41 +15434,37 @@ parameter.
                 } else {
                     $caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
                 }
+
                 PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
                 $latest = $rest->listLatestUpgrades($base, $state, $inst, $channel, $reg);
                 PEAR::staticPopErrorHandling();
-            } else {
-                $remote = &$this->config->getRemote();
-                $remote->pushErrorHandling(PEAR_ERROR_RETURN);
-                if (empty($state) || $state == 'any') {
-                    $latest = $remote->call("package.listLatestReleases");
-                } else {
-                    $latest = $remote->call("package.listLatestReleases", $state);
-                    $caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
-                }
-                $remote->popErrorHandling();
             }
+
             if (PEAR::isError($latest)) {
                 $this->ui->outputData($latest->getMessage());
                 continue;
             }
+
             $caption .= ':';
             if (PEAR::isError($latest)) {
                 $this->config->set('default_channel', $savechannel);
                 return $latest;
             }
+
             $data = array(
                 'caption' => $caption,
                 'border' => 1,
                 'headline' => array('Channel', 'Package', 'Local', 'Remote', 'Size'),
                 'channel' => $channel
                 );
+
             foreach ((array)$latest as $pkg => $info) {
                 $package = strtolower($pkg);
                 if (!isset($inst[$package])) {
                     // skip packages we don't have installed
                     continue;
                 }
+
                 extract($info);
                 $inst_version = $reg->packageInfo($package, 'version', $channel);
                 $inst_state   = $reg->packageInfo($package, 'release_state', $channel);
@@ -14966,6 +15472,7 @@ parameter.
                     // installed version is up-to-date
                     continue;
                 }
+
                 if ($filesize >= 20480) {
                     $filesize += 1024 - ($filesize % 1024);
                     $fs = sprintf("%dkB", $filesize / 1024);
@@ -14975,8 +15482,10 @@ parameter.
                 } else {
                     $fs = "  -"; // XXX center instead
                 }
+
                 $data['data'][] = array($channel, $pkg, "$inst_version ($inst_state)", "$version ($state)", $fs);
             }
+
             if (isset($options['channelinfo'])) {
                 if (empty($data['data'])) {
                     unset($data['headline']);
@@ -14995,31 +15504,30 @@ parameter.
                 }
             }
         }
+
         $this->config->set('default_channel', $savechannel);
         return true;
     }
 
-    // }}}
-    // {{{ doClearCache()
-
     function doClearCache($command, $options, $params)
     {
         $cache_dir = $this->config->get('cache_dir');
-        $verbose = $this->config->get('verbose');
+        $verbose   = $this->config->get('verbose');
         $output = '';
         if (!file_exists($cache_dir) || !is_dir($cache_dir)) {
             return $this->raiseError("$cache_dir does not exist or is not a directory");
         }
+
         if (!($dp = @opendir($cache_dir))) {
             return $this->raiseError("opendir($cache_dir) failed: $php_errormsg");
         }
+
         if ($verbose >= 1) {
             $output .= "reading directory $cache_dir\n";
         }
         $num = 0;
         while ($ent = readdir($dp)) {
-            if (preg_match('/^xmlrpc_cache_[a-z0-9]{32}\\z/', $ent) ||
-                  preg_match('/rest.cache(file|id)\\z/', $ent)) {
+            if (preg_match('/rest.cache(file|id)\\z/', $ent)) {
                 $path = $cache_dir . DIRECTORY_SEPARATOR . $ent;
                 if (file_exists($path)) {
                     $ok = @unlink($path);
@@ -15027,6 +15535,7 @@ parameter.
                     $ok = false;
                     $php_errormsg = '';
                 }
+
                 if ($ok) {
                     if ($verbose >= 2) {
                         $output .= "deleted $path\n";
@@ -15037,19 +15546,16 @@ parameter.
                 }
             }
         }
+
         closedir($dp);
         if ($verbose >= 1) {
             $output .= "$num cache entries cleared\n";
         }
+
         $this->ui->outputData(rtrim($output), $command);
         return $num;
     }
-
-    // }}}
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                    PEAR-1.7.2/PEAR/Command/Test.xml                                                                    100644    1750    1750         3152 11014312742  11234                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         PEAR-1.8.0/PEAR/Command/Test.xml                                                                    100777     764     764         3153      100777  11067                                                                                                                                                                                                                                                                                                                                                                      <commands version="1.0">
  <run-tests>
   <summary>Run Regression Tests</summary>
   <function>doRunTests</function>
@@ -15082,7 +15588,7 @@ parameter.
    </package>
    <phpunit>
     <shortopt>u</shortopt>
-    <doc>Search parameters for AllTests.php, and use that to run phpunit-based tests.
+    <doc>Search parameters for AllTests.php, and use that to run phpunit-based tests
 If none is found, all .phpt tests will be tried instead.</doc>
    </phpunit>
    <tapoutput>
@@ -15099,374 +15605,361 @@ If none is found, all .phpt tests will be tried instead.</doc>
     <doc>Generate a code coverage report (requires Xdebug 2.0.0+)</doc>
    </coverage>
   </options>
-  <doc>[testfile|dir ...]
-Run regression tests with PHP&apos;s regression testing script (run-tests.php).</doc>
+  <doc>[testfile|dir ...]
+Run regression tests with PHP&#039;s regression testing script (run-tests.php).</doc>
  </run-tests>
-</commands>                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.7.2/PEAR/Command/Test.php                                                                    100644    1750    1750        30361 11014312742  11245                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Command_Test (run-tests)
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Martin Jansen <mj at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Test.php,v 1.27 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
- */
-
-/**
- * base class
- */
-require_once 'PEAR/Command/Common.php';
-
-/**
- * PEAR commands for login/logout
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Martin Jansen <mj at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 0.1
- */
-
-class PEAR_Command_Test extends PEAR_Command_Common
-{
-    // {{{ properties
-
-    var $commands = array(
-        'run-tests' => array(
-            'summary' => 'Run Regression Tests',
-            'function' => 'doRunTests',
-            'shortcut' => 'rt',
-            'options' => array(
-                'recur' => array(
-                    'shortopt' => 'r',
-                    'doc' => 'Run tests in child directories, recursively.  4 dirs deep maximum',
-                ),
-                'ini' => array(
-                    'shortopt' => 'i',
-                    'doc' => 'actual string of settings to pass to php in format " -d setting=blah"',
-                    'arg' => 'SETTINGS'
-                ),
-                'realtimelog' => array(
-                    'shortopt' => 'l',
-                    'doc' => 'Log test runs/results as they are run',
-                ),
-                'quiet' => array(
-                    'shortopt' => 'q',
-                    'doc' => 'Only display detail for failed tests',
-                ),
-                'simple' => array(
-                    'shortopt' => 's',
-                    'doc' => 'Display simple output for all tests',
-                ),
-                'package' => array(
-                    'shortopt' => 'p',
-                    'doc' => 'Treat parameters as installed packages from which to run tests',
-                ),
-                'phpunit' => array(
-                    'shortopt' => 'u',
-                    'doc' => 'Search parameters for AllTests.php, and use that to run phpunit-based tests
-If none is found, all .phpt tests will be tried instead.',
-                ),
-                'tapoutput' => array(
-                    'shortopt' => 't',
-                    'doc' => 'Output run-tests.log in TAP-compliant format',
-                ),
-                'cgi' => array(
-                    'shortopt' => 'c',
-                    'doc' => 'CGI php executable (needed for tests with POST/GET section)',
-                    'arg' => 'PHPCGI',
-                ),
-                'coverage' => array(
-                    'shortopt' => 'x',
-                    'doc'      => 'Generate a code coverage report (requires Xdebug 2.0.0+)',
-                ),
-            ),
-            'doc' => '[testfile|dir ...]
-Run regression tests with PHP\'s regression testing script (run-tests.php).',
-            ),
-        );
-
-    var $output;
-
-    // }}}
-    // {{{ constructor
-
-    /**
-     * PEAR_Command_Test constructor.
-     *
-     * @access public
-     */
-    function PEAR_Command_Test(&$ui, &$config)
-    {
-        parent::PEAR_Command_Common($ui, $config);
-    }
-
-    // }}}
-    // {{{ doRunTests()
-
-    function doRunTests($command, $options, $params)
-    {
-        if (isset($options['phpunit']) && isset($options['tapoutput'])) {
-            return $this->raiseError('ERROR: cannot use both --phpunit and --tapoutput at the same time');
-        }
-        require_once 'PEAR/Common.php';
-        require_once 'System.php';
-        $log = new PEAR_Common;
-        $log->ui = &$this->ui; // slightly hacky, but it will work
-        $tests = array();
-        $depth = isset($options['recur']) ? 4 : 1;
-
-        if (!count($params)) {
-            $params[] = '.';
-        }
-        if (isset($options['package'])) {
-            $oldparams = $params;
-            $params = array();
-            $reg = &$this->config->getRegistry();
-            foreach ($oldparams as $param) {
-                $pname = $reg->parsePackageName($param, $this->config->get('default_channel'));
-                if (PEAR::isError($pname)) {
-                    return $this->raiseError($pname);
-                }
-
-                $package = &$reg->getPackage($pname['package'], $pname['channel']);
-                if (!$package) {
-                    return PEAR::raiseError('Unknown package "' .
-                        $reg->parsedPackageNameToString($pname) . '"');
-                }
-
-                $filelist = $package->getFilelist();
-                foreach ($filelist as $name => $atts) {
-                    if (isset($atts['role']) && $atts['role'] != 'test') {
-                        continue;
-                    }
-
-                    if (isset($options['phpunit']) && preg_match('/AllTests\.php\\z/i', $name)) {
-                        $params[] = $atts['installed_as'];
-                        continue;
-                    } elseif (!preg_match('/\.phpt\\z/', $name)) {
-                        continue;
-                    }
-                    $params[] = $atts['installed_as'];
-                }
-            }
-        }
-
-        foreach ($params as $p) {
-            if (is_dir($p)) {
-                if (isset($options['phpunit'])) {
-                    $dir = System::find(array($p, '-type', 'f',
-                                                '-maxdepth', $depth,
-                                                '-name', 'AllTests.php'));
-                    if (count($dir)) {
-                        foreach ($dir as $p) {
-                            $p = realpath($p);
-                            if (!count($tests) ||
-                                  (count($tests) && strlen($p) < strlen($tests[0]))) {
-                                // this is in a higher-level directory, use this one instead.
-                                $tests = array($p);
-                            }
-                        }
-                    }
-                    continue;
-                }
-                $dir = System::find(array($p, '-type', 'f',
-                                            '-maxdepth', $depth,
-                                            '-name', '*.phpt'));
-                $tests = array_merge($tests, $dir);
-            } else {
-                if (isset($options['phpunit'])) {
-                    if (preg_match('/AllTests\.php\\z/i', $p)) {
-                        $p = realpath($p);
-                        if (!count($tests) ||
-                              (count($tests) && strlen($p) < strlen($tests[0]))) {
-                            // this is in a higher-level directory, use this one instead.
-                            $tests = array($p);
-                        }
-                    }
-                    continue;
-                }
-
-                if (file_exists($p) && preg_match('/\.phpt$/', $p)) {
-                    $tests[] = $p;
-                    continue;
-                }
-
-                if (!preg_match('/\.phpt\\z/', $p)) {
-                    $p .= '.phpt';
-                }
-                $dir = System::find(array(dirname($p), '-type', 'f',
-                                            '-maxdepth', $depth,
-                                            '-name', $p));
-                $tests = array_merge($tests, $dir);
-            }
-        }
-
-        $ini_settings = '';
-        if (isset($options['ini'])) {
-            $ini_settings .= $options['ini'];
-        }
-
-        if (isset($_ENV['TEST_PHP_INCLUDE_PATH'])) {
-            $ini_settings .= " -d include_path={$_ENV['TEST_PHP_INCLUDE_PATH']}";
-        }
-
-        if ($ini_settings) {
-            $this->ui->outputData('Using INI settings: "' . $ini_settings . '"');
-        }
-        $skipped = $passed = $failed = array();
-        $tests_count = count($tests);
-        $this->ui->outputData('Running ' . $tests_count . ' tests', $command);
-        $start = time();
-        if (isset($options['realtimelog']) && file_exists('run-tests.log')) {
-            unlink('run-tests.log');
-        }
-
-        if (isset($options['tapoutput'])) {
-            $tap = '1..' . $tests_count . "\n";
-        }
-
-        require_once 'PEAR/RunTest.php';
-        $run = new PEAR_RunTest($log, $options);
-        $run->tests_count = $tests_count;
-
-        if (isset($options['coverage']) && extension_loaded('xdebug')){
-            $run->xdebug_loaded = true;
-        } else {
-            $run->xdebug_loaded = false;
-        }
-
-        $j = $i = 1;
-        foreach ($tests as $t) {
-            if (isset($options['realtimelog'])) {
-                $fp = @fopen('run-tests.log', 'a');
-                if ($fp) {
-                    fwrite($fp, "Running test [$i / $tests_count] $t...");
-                    fclose($fp);
-                }
-            }
-            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-            if (isset($options['phpunit'])) {
-                $result = $run->runPHPUnit($t, $ini_settings);
-            } else {
-                $result = $run->run($t, $ini_settings, $j);
-            }
-            PEAR::staticPopErrorHandling();
-            if (PEAR::isError($result)) {
-                $this->ui->log($result->getMessage());
-                continue;
-            }
-
-            if (isset($options['tapoutput'])) {
-                $tap .= $result[0] . ' ' . $i . $result[1] . "\n";
-                continue;
-            }
-
-            if (isset($options['realtimelog'])) {
-                $fp = @fopen('run-tests.log', 'a');
-                if ($fp) {
-                    fwrite($fp, "$result\n");
-                    fclose($fp);
-                }
-            }
-            
-            if ($result == 'FAILED') {
-            	$failed[] = $t;
-            }
-            if ($result == 'PASSED') {
-            	$passed[] = $t;
-            }
-            if ($result == 'SKIPPED') {
-            	$skipped[] = $t;
-            }
-            
-            $j++;
-        }
-
-        $total = date('i:s', time() - $start);
-        if (isset($options['tapoutput'])) {
-            $fp = @fopen('run-tests.log', 'w');
-            if ($fp) {
-                fwrite($fp, $tap, strlen($tap));
-                fclose($fp);
-                $this->ui->outputData('wrote TAP-format log to "' .realpath('run-tests.log') .
-                    '"', $command);
-            }
-        } else {
-            if (count($failed)) {
-                $output = "TOTAL TIME: $total\n";
-                $output .= count($passed) . " PASSED TESTS\n";
-                $output .= count($skipped) . " SKIPPED TESTS\n";
-        		$output .= count($failed) . " FAILED TESTS:\n";
-            	foreach ($failed as $failure) {
-            		$output .= $failure . "\n";
-            	}
-                
-                $mode = isset($options['realtimelog']) ? 'a' : 'w';
-                $fp   = @fopen('run-tests.log', $mode);
-
-                if ($fp) {
-                    fwrite($fp, $output, strlen($output));
-                    fclose($fp);
-                    $this->ui->outputData('wrote log to "' . realpath('run-tests.log') . '"', $command);
-                }
-            } elseif (file_exists('run-tests.log') && !is_dir('run-tests.log')) {
-                @unlink('run-tests.log');
-            }
-        }
-        $this->ui->outputData('TOTAL TIME: ' . $total);
-        $this->ui->outputData(count($passed) . ' PASSED TESTS', $command);
-        $this->ui->outputData(count($skipped) . ' SKIPPED TESTS', $command);
-        if (count($failed)) {
-    		$this->ui->outputData(count($failed) . ' FAILED TESTS:', $command);
-        	foreach ($failed as $failure) {
-        		$this->ui->outputData($failure, $command);
-        	}
-        }
-
-        return true;
-    }
-    // }}}
-}                                                                                                                                                                                                                                                                               PEAR-1.7.2/PEAR/Downloader/Package.php                                                              100644    1750    1750       224107 11014312742  12424                                                                                                                                                                                                                                                                                                                                                                      <?php
+</commands>                                                                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.8.0/PEAR/Command/Test.php                                                                    100664     764     764        30011      100664  11055                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Command_Test (run-tests)
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Martin Jansen <mj at php.net>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Test.php,v 1.32 2009/04/04 00:06:17 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * base class
+ */
+require_once 'PEAR/Command/Common.php';
+
+/**
+ * PEAR commands for login/logout
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Martin Jansen <mj at php.net>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 0.1
+ */
+
+class PEAR_Command_Test extends PEAR_Command_Common
+{
+    var $commands = array(
+        'run-tests' => array(
+            'summary' => 'Run Regression Tests',
+            'function' => 'doRunTests',
+            'shortcut' => 'rt',
+            'options' => array(
+                'recur' => array(
+                    'shortopt' => 'r',
+                    'doc' => 'Run tests in child directories, recursively.  4 dirs deep maximum',
+                ),
+                'ini' => array(
+                    'shortopt' => 'i',
+                    'doc' => 'actual string of settings to pass to php in format " -d setting=blah"',
+                    'arg' => 'SETTINGS'
+                ),
+                'realtimelog' => array(
+                    'shortopt' => 'l',
+                    'doc' => 'Log test runs/results as they are run',
+                ),
+                'quiet' => array(
+                    'shortopt' => 'q',
+                    'doc' => 'Only display detail for failed tests',
+                ),
+                'simple' => array(
+                    'shortopt' => 's',
+                    'doc' => 'Display simple output for all tests',
+                ),
+                'package' => array(
+                    'shortopt' => 'p',
+                    'doc' => 'Treat parameters as installed packages from which to run tests',
+                ),
+                'phpunit' => array(
+                    'shortopt' => 'u',
+                    'doc' => 'Search parameters for AllTests.php, and use that to run phpunit-based tests
+If none is found, all .phpt tests will be tried instead.',
+                ),
+                'tapoutput' => array(
+                    'shortopt' => 't',
+                    'doc' => 'Output run-tests.log in TAP-compliant format',
+                ),
+                'cgi' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'CGI php executable (needed for tests with POST/GET section)',
+                    'arg' => 'PHPCGI',
+                ),
+                'coverage' => array(
+                    'shortopt' => 'x',
+                    'doc'      => 'Generate a code coverage report (requires Xdebug 2.0.0+)',
+                ),
+            ),
+            'doc' => '[testfile|dir ...]
+Run regression tests with PHP\'s regression testing script (run-tests.php).',
+            ),
+        );
+
+    var $output;
+
+    /**
+     * PEAR_Command_Test constructor.
+     *
+     * @access public
+     */
+    function PEAR_Command_Test(&$ui, &$config)
+    {
+        parent::PEAR_Command_Common($ui, $config);
+    }
+
+    function doRunTests($command, $options, $params)
+    {
+        if (isset($options['phpunit']) && isset($options['tapoutput'])) {
+            return $this->raiseError('ERROR: cannot use both --phpunit and --tapoutput at the same time');
+        }
+
+        require_once 'PEAR/Common.php';
+        require_once 'System.php';
+        $log = new PEAR_Common;
+        $log->ui = &$this->ui; // slightly hacky, but it will work
+        $tests = array();
+        $depth = isset($options['recur']) ? 14 : 1;
+
+        if (!count($params)) {
+            $params[] = '.';
+        }
+
+        if (isset($options['package'])) {
+            $oldparams = $params;
+            $params = array();
+            $reg = &$this->config->getRegistry();
+            foreach ($oldparams as $param) {
+                $pname = $reg->parsePackageName($param, $this->config->get('default_channel'));
+                if (PEAR::isError($pname)) {
+                    return $this->raiseError($pname);
+                }
+
+                $package = &$reg->getPackage($pname['package'], $pname['channel']);
+                if (!$package) {
+                    return PEAR::raiseError('Unknown package "' .
+                        $reg->parsedPackageNameToString($pname) . '"');
+                }
+
+                $filelist = $package->getFilelist();
+                foreach ($filelist as $name => $atts) {
+                    if (isset($atts['role']) && $atts['role'] != 'test') {
+                        continue;
+                    }
+
+                    if (isset($options['phpunit']) && preg_match('/AllTests\.php\\z/i', $name)) {
+                        $params[] = $atts['installed_as'];
+                        continue;
+                    } elseif (!preg_match('/\.phpt\\z/', $name)) {
+                        continue;
+                    }
+                    $params[] = $atts['installed_as'];
+                }
+            }
+        }
+
+        foreach ($params as $p) {
+            if (is_dir($p)) {
+                if (isset($options['phpunit'])) {
+                    $dir = System::find(array($p, '-type', 'f',
+                                                '-maxdepth', $depth,
+                                                '-name', 'AllTests.php'));
+                    if (count($dir)) {
+                        foreach ($dir as $p) {
+                            $p = realpath($p);
+                            if (!count($tests) ||
+                                  (count($tests) && strlen($p) < strlen($tests[0]))) {
+                                // this is in a higher-level directory, use this one instead.
+                                $tests = array($p);
+                            }
+                        }
+                    }
+                    continue;
+                }
+
+                $args  = array($p, '-type', 'f', '-name', '*.phpt');
+            } else {
+                if (isset($options['phpunit'])) {
+                    if (preg_match('/AllTests\.php\\z/i', $p)) {
+                        $p = realpath($p);
+                        if (!count($tests) ||
+                              (count($tests) && strlen($p) < strlen($tests[0]))) {
+                            // this is in a higher-level directory, use this one instead.
+                            $tests = array($p);
+                        }
+                    }
+                    continue;
+                }
+
+                if (file_exists($p) && preg_match('/\.phpt$/', $p)) {
+                    $tests[] = $p;
+                    continue;
+                }
+
+                if (!preg_match('/\.phpt\\z/', $p)) {
+                    $p .= '.phpt';
+                }
+
+                $args  = array(dirname($p), '-type', 'f', '-name', $p);
+            }
+
+            if (!isset($options['recur'])) {
+                $args[] = '-maxdepth';
+                $args[] = 1;
+            }
+
+            $dir   = System::find($args);
+            $tests = array_merge($tests, $dir);
+        }
+
+        $ini_settings = '';
+        if (isset($options['ini'])) {
+            $ini_settings .= $options['ini'];
+        }
+
+        if (isset($_ENV['TEST_PHP_INCLUDE_PATH'])) {
+            $ini_settings .= " -d include_path={$_ENV['TEST_PHP_INCLUDE_PATH']}";
+        }
+
+        if ($ini_settings) {
+            $this->ui->outputData('Using INI settings: "' . $ini_settings . '"');
+        }
+
+        $skipped = $passed = $failed = array();
+        $tests_count = count($tests);
+        $this->ui->outputData('Running ' . $tests_count . ' tests', $command);
+        $start = time();
+        if (isset($options['realtimelog']) && file_exists('run-tests.log')) {
+            unlink('run-tests.log');
+        }
+
+        if (isset($options['tapoutput'])) {
+            $tap = '1..' . $tests_count . "\n";
+        }
+
+        require_once 'PEAR/RunTest.php';
+        $run = new PEAR_RunTest($log, $options);
+        $run->tests_count = $tests_count;
+
+        if (isset($options['coverage']) && extension_loaded('xdebug')){
+            $run->xdebug_loaded = true;
+        } else {
+            $run->xdebug_loaded = false;
+        }
+
+        $j = $i = 1;
+        foreach ($tests as $t) {
+            if (isset($options['realtimelog'])) {
+                $fp = @fopen('run-tests.log', 'a');
+                if ($fp) {
+                    fwrite($fp, "Running test [$i / $tests_count] $t...");
+                    fclose($fp);
+                }
+            }
+            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+            if (isset($options['phpunit'])) {
+                $result = $run->runPHPUnit($t, $ini_settings);
+            } else {
+                $result = $run->run($t, $ini_settings, $j);
+            }
+            PEAR::staticPopErrorHandling();
+            if (PEAR::isError($result)) {
+                $this->ui->log($result->getMessage());
+                continue;
+            }
+
+            if (isset($options['tapoutput'])) {
+                $tap .= $result[0] . ' ' . $i . $result[1] . "\n";
+                continue;
+            }
+
+            if (isset($options['realtimelog'])) {
+                $fp = @fopen('run-tests.log', 'a');
+                if ($fp) {
+                    fwrite($fp, "$result\n");
+                    fclose($fp);
+                }
+            }
+
+            if ($result == 'FAILED') {
+                $failed[] = $t;
+            }
+            if ($result == 'PASSED') {
+                $passed[] = $t;
+            }
+            if ($result == 'SKIPPED') {
+                $skipped[] = $t;
+            }
+
+            $j++;
+        }
+
+        $total = date('i:s', time() - $start);
+        if (isset($options['tapoutput'])) {
+            $fp = @fopen('run-tests.log', 'w');
+            if ($fp) {
+                fwrite($fp, $tap, strlen($tap));
+                fclose($fp);
+                $this->ui->outputData('wrote TAP-format log to "' .realpath('run-tests.log') .
+                    '"', $command);
+            }
+        } else {
+            if (count($failed)) {
+                $output = "TOTAL TIME: $total\n";
+                $output .= count($passed) . " PASSED TESTS\n";
+                $output .= count($skipped) . " SKIPPED TESTS\n";
+                $output .= count($failed) . " FAILED TESTS:\n";
+                foreach ($failed as $failure) {
+                    $output .= $failure . "\n";
+                }
+
+                $mode = isset($options['realtimelog']) ? 'a' : 'w';
+                $fp   = @fopen('run-tests.log', $mode);
+
+                if ($fp) {
+                    fwrite($fp, $output, strlen($output));
+                    fclose($fp);
+                    $this->ui->outputData('wrote log to "' . realpath('run-tests.log') . '"', $command);
+                }
+            } elseif (file_exists('run-tests.log') && !is_dir('run-tests.log')) {
+                @unlink('run-tests.log');
+            }
+        }
+        $this->ui->outputData('TOTAL TIME: ' . $total);
+        $this->ui->outputData(count($passed) . ' PASSED TESTS', $command);
+        $this->ui->outputData(count($skipped) . ' SKIPPED TESTS', $command);
+        if (count($failed)) {
+            $this->ui->outputData(count($failed) . ' FAILED TESTS:', $command);
+            foreach ($failed as $failure) {
+                $this->ui->outputData($failure, $command);
+            }
+        }
+
+        return true;
+    }
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.8.0/PEAR/Downloader/Package.php                                                              100664     764     764       225261      100664  12246                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Downloader_Package
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Package.php,v 1.113 2008/03/29 14:18:36 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Package.php,v 1.126 2009/03/07 21:51:52 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
+
 /**
  * Error code when parameter initialization fails because no releases
  * exist within preferred_state, but releases do exist
@@ -15477,6 +15970,7 @@ define('PEAR_DOWNLOADER_PACKAGE_STATE', -1003);
  * exist that will work with the existing PHP version
  */
 define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
+
 /**
  * Coordinates download parameters and manages their dependencies
  * prior to downloading them.
@@ -15500,9 +15994,9 @@ define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -15563,7 +16057,7 @@ class PEAR_Downloader_Package
      */
     var $_explicitGroup = false;
     /**
-     * Package type local|url|xmlrpc
+     * Package type local|url
      * @var string
      */
     var $_type;
@@ -15610,67 +16104,81 @@ class PEAR_Downloader_Package
     function initialize($param)
     {
         $origErr = $this->_fromFile($param);
-        if (!$this->_valid) {
-            $options = $this->_downloader->getOptions();
-            if (isset($options['offline'])) {
-                if (PEAR::isError($origErr)) {
-                    if (!isset($options['soft'])) {
-                        $this->_downloader->log(0, $origErr->getMessage());
-                    }
+        if ($this->_valid) {
+            return true;
+        }
+
+        $options = $this->_downloader->getOptions();
+        if (isset($options['offline'])) {
+            if (PEAR::isError($origErr) && !isset($options['soft'])) {
+                $this->_downloader->log(0, $origErr->getMessage());
+            }
+
+            return PEAR::raiseError('Cannot download non-local package "' . $param . '"');
+        }
+
+        $err = $this->_fromUrl($param);
+        if (PEAR::isError($err) || !$this->_valid) {
+            if ($this->_type == 'url') {
+                if (PEAR::isError($err) && !isset($options['soft'])) {
+                    $this->_downloader->log(0, $err->getMessage());
                 }
-                return PEAR::raiseError('Cannot download non-local package "' . $param . '"');
+
+                return PEAR::raiseError("Invalid or missing remote package file");
             }
-            $err = $this->_fromUrl($param);
+
+            $err = $this->_fromString($param);
             if (PEAR::isError($err) || !$this->_valid) {
-                if ($this->_type == 'url') {
-                    if (PEAR::isError($err)) {
-                        if (!isset($options['soft'])) {
-                            $this->_downloader->log(0, $err->getMessage());
-                        }
-                    }
-                    return PEAR::raiseError("Invalid or missing remote package file");
+                if (PEAR::isError($err) && $err->getCode() == PEAR_DOWNLOADER_PACKAGE_STATE) {
+                    return false; // instruct the downloader to silently skip
                 }
-                $err = $this->_fromString($param);
-                if (PEAR::isError($err) || !$this->_valid) {
-                    if (PEAR::isError($err) &&
-                          $err->getCode() == PEAR_DOWNLOADER_PACKAGE_STATE) {
-                        return false; // instruct the downloader to silently skip
-                    }
-                    if (isset($this->_type) && $this->_type == 'local' &&
-                          PEAR::isError($origErr)) {
-                        if (is_array($origErr->getUserInfo())) {
-                            foreach ($origErr->getUserInfo() as $err) {
-                                if (is_array($err)) {
-                                    $err = $err['message'];
-                                }
-                                if (!isset($options['soft'])) {
-                                    $this->_downloader->log(0, $err);
-                                }
+
+                if (isset($this->_type) && $this->_type == 'local' && PEAR::isError($origErr)) {
+                    if (is_array($origErr->getUserInfo())) {
+                        foreach ($origErr->getUserInfo() as $err) {
+                            if (is_array($err)) {
+                                $err = $err['message'];
+                            }
+
+                            if (!isset($options['soft'])) {
+                                $this->_downloader->log(0, $err);
                             }
                         }
-                        if (!isset($options['soft'])) {
-                            $this->_downloader->log(0, $origErr->getMessage());
-                        }
-                        if (is_array($param)) {
-                            $param = $this->_registry->parsedPackageNameToString($param,
-                                true);
-                        }
-                        return PEAR::raiseError(
-                            "Cannot initialize '$param', invalid or missing package file");
                     }
-                    if (PEAR::isError($err)) {
-                        if (!isset($options['soft'])) {
-                            $this->_downloader->log(0, $err->getMessage());
-                        }
+
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(0, $origErr->getMessage());
                     }
+
                     if (is_array($param)) {
                         $param = $this->_registry->parsedPackageNameToString($param, true);
                     }
-                    return PEAR::raiseError(
-                        "Cannot initialize '$param', invalid or missing package file");
+
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(2, "Cannot initialize '$param', invalid or missing package file");
+                    }
+
+                    // Passing no message back - already logged above
+                    return PEAR::raiseError();
                 }
+
+                if (PEAR::isError($err) && !isset($options['soft'])) {
+                    $this->_downloader->log(0, $err->getMessage());
+                }
+
+                if (is_array($param)) {
+                    $param = $this->_registry->parsedPackageNameToString($param, true);
+                }
+
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(2, "Cannot initialize '$param', invalid or missing package file");
+                }
+
+                // Passing no message back - already logged above
+                return PEAR::raiseError();
             }
         }
+
         return true;
     }
 
@@ -15683,18 +16191,21 @@ class PEAR_Downloader_Package
         if (isset($this->_packagefile)) {
             return $this->_packagefile;
         }
+
         if (isset($this->_downloadURL['url'])) {
             $this->_isvalid = false;
             $info = $this->getParsedPackage();
             foreach ($info as $i => $p) {
                 $info[$i] = strtolower($p);
             }
+
             $err = $this->_fromUrl($this->_downloadURL['url'],
                 $this->_registry->parsedPackageNameToString($this->_parsedname, true));
             $newinfo = $this->getParsedPackage();
             foreach ($newinfo as $i => $p) {
                 $newinfo[$i] = strtolower($p);
             }
+
             if ($info != $newinfo) {
                 do {
                     if ($info['package'] == 'pecl.php.net' && $newinfo['package'] == 'pear.php.net') {
@@ -15704,16 +16215,19 @@ class PEAR_Downloader_Package
                             break;
                         }
                     }
+
                     return PEAR::raiseError('CRITICAL ERROR: We are ' .
                         $this->_registry->parsedPackageNameToString($info) . ', but the file ' .
                         'downloaded claims to be ' .
                         $this->_registry->parsedPackageNameToString($this->getParsedPackage()));
                 } while (false);
             }
+
             if (PEAR::isError($err) || !$this->_valid) {
                 return $err;
             }
         }
+
         $this->_type = 'local';
         return $this->_packagefile;
     }
@@ -15746,6 +16260,7 @@ class PEAR_Downloader_Package
             } else {
                 $ext = '.tgz';
             }
+
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $err = $this->_fromUrl($dep['uri'] . $ext);
             PEAR::popErrorHandling();
@@ -15753,6 +16268,7 @@ class PEAR_Downloader_Package
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $err->getMessage());
                 }
+
                 return PEAR::raiseError('Invalid uri dependency "' . $dep['uri'] . $ext . '", ' .
                     'cannot download');
             }
@@ -15767,6 +16283,7 @@ class PEAR_Downloader_Package
                 $this->_parsedname['group'] = 'default'; // download the default dependency group
                 $this->_explicitGroup = false;
             }
+
             $this->_rawpackagefile = $dep['raw'];
         }
     }
@@ -15777,23 +16294,27 @@ class PEAR_Downloader_Package
         if (isset($options['downloadonly'])) {
             return;
         }
+
         if (isset($options['offline'])) {
             $this->_downloader->log(3, 'Skipping dependency download check, --offline specified');
             return;
         }
+
         $pname = $this->getParsedPackage();
         if (!$pname) {
             return;
         }
+
         $deps = $this->getDeps();
         if (!$deps) {
             return;
         }
+
         if (isset($deps['required'])) { // package.xml 2.0
             return $this->_detect2($deps, $pname, $options, $params);
-        } else {
-            return $this->_detect1($deps, $pname, $options, $params);
         }
+
+        return $this->_detect1($deps, $pname, $options, $params);
     }
 
     function setValidated()
@@ -15816,14 +16337,17 @@ class PEAR_Downloader_Package
         if (!isset($params[0])) {
             return;
         }
+
         $options = $params[0]->_downloader->getOptions();
         if (!isset($options['downloadonly'])) {
             foreach ($params as $i => $param) {
+                $package = $param->getPackage();
+                $channel = $param->getChannel();
                 // remove self if already installed with this version
                 // this does not need any pecl magic - we only remove exact matches
-                if ($param->_installRegistry->packageExists($param->getPackage(), $param->getChannel())) {
-                    if (version_compare($param->_installRegistry->packageInfo($param->getPackage(), 'version',
-                          $param->getChannel()), $param->getVersion(), '==')) {
+                if ($param->_installRegistry->packageExists($package, $channel)) {
+                    $packageVersion = $param->_installRegistry->packageInfo($package, 'version', $channel);
+                    if (version_compare($packageVersion, $param->getVersion(), '==')) {
                         if (!isset($options['force'])) {
                             $info = $param->getParsedPackage();
                             unset($info['version']);
@@ -15831,9 +16355,7 @@ class PEAR_Downloader_Package
                             if (!isset($options['soft'])) {
                                 $param->_downloader->log(1, 'Skipping package "' .
                                     $param->getShortName() .
-                                    '", already installed as version ' .
-                                    $param->_installRegistry->packageInfo($param->getPackage(),
-                                        'version', $param->getChannel()));
+                                    '", already installed as version ' . $packageVersion);
                             }
                             $params[$i] = false;
                         }
@@ -15842,14 +16364,13 @@ class PEAR_Downloader_Package
                         $info = $param->getParsedPackage();
                         $param->_downloader->log(1, 'Skipping package "' .
                             $param->getShortName() .
-                            '", already installed as version ' .
-                            $param->_installRegistry->packageInfo($param->getPackage(), 'version',
-                                $param->getChannel()));
+                            '", already installed as version ' . $packageVersion);
                         $params[$i] = false;
                     }
                 }
             }
         }
+
         PEAR_Downloader_Package::removeDuplicates($params);
     }
 
@@ -15869,6 +16390,8 @@ class PEAR_Downloader_Package
                         $ret = $this->_detect2Dep($dep, $pname, 'required', $params);
                         if (is_array($ret)) {
                             $this->_downloadDeps[] = $ret;
+                        } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                            $this->_downloader->log(0, $ret->getMessage());
                         }
                     }
                 } else {
@@ -15878,16 +16401,20 @@ class PEAR_Downloader_Package
                         $ret = $this->_detect2Dep($dep, $pname, 'required', $params);
                         if (is_array($ret)) {
                             $this->_downloadDeps[] = $ret;
+                        } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                            $this->_downloader->log(0, $ret->getMessage());
                         }
                     }
                 }
             }
+
             // get optional dependency group, if any
             if (isset($deps['optional'][$packagetype])) {
                 $skipnames = array();
                 if (!isset($deps['optional'][$packagetype][0])) {
                     $deps['optional'][$packagetype] = array($deps['optional'][$packagetype]);
                 }
+
                 foreach ($deps['optional'][$packagetype] as $dep) {
                     $skip = false;
                     if (!isset($options['alldeps'])) {
@@ -15904,7 +16431,13 @@ class PEAR_Downloader_Package
                         $skip = true;
                         unset($dep['package']);
                     }
-                    if (!($ret = $this->_detect2Dep($dep, $pname, 'optional', $params))) {
+
+                    $ret = $this->_detect2Dep($dep, $pname, 'optional', $params);
+                    if (PEAR::isError($ret) && !isset($options['soft'])) {
+                        $this->_downloader->log(0, $ret->getMessage());
+                    }
+
+                    if (!$ret) {
                         $dep['package'] = $dep['name'];
                         $skip = count($skipnames) ?
                             $skipnames[count($skipnames) - 1] : '';
@@ -15913,10 +16446,12 @@ class PEAR_Downloader_Package
                             array_pop($skipnames);
                         }
                     }
+
                     if (!$skip && is_array($ret)) {
                         $this->_downloadDeps[] = $ret;
                     }
                 }
+
                 if (count($skipnames)) {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(1, 'Did not download optional dependencies: ' .
@@ -15925,19 +16460,22 @@ class PEAR_Downloader_Package
                     }
                 }
             }
+
             // get requested dependency group, if any
             $groupname = $this->getGroup();
-            $explicit = $this->_explicitGroup;
+            $explicit  = $this->_explicitGroup;
             if (!$groupname) {
-                if ($this->canDefault()) {
-                    $groupname = 'default'; // try the default dependency group
-                } else {
+                if (!$this->canDefault()) {
                     continue;
                 }
+
+                $groupname = 'default'; // try the default dependency group
             }
+
             if ($groupnotfound) {
                 continue;
             }
+
             if (isset($deps['group'])) {
                 if (isset($deps['group']['attribs'])) {
                     if (strtolower($deps['group']['attribs']['name']) == strtolower($groupname)) {
@@ -15948,6 +16486,7 @@ class PEAR_Downloader_Package
                                 $this->_registry->parsedPackageNameToString($pname, true) .
                                 '" has no dependency ' . 'group named "' . $groupname . '"');
                         }
+
                         $groupnotfound = true;
                         continue;
                     }
@@ -15959,6 +16498,7 @@ class PEAR_Downloader_Package
                             break;
                         }
                     }
+
                     if (!$found) {
                         if ($explicit) {
                             if (!isset($options['soft'])) {
@@ -15967,29 +16507,33 @@ class PEAR_Downloader_Package
                                     '" has no dependency ' . 'group named "' . $groupname . '"');
                             }
                         }
+
                         $groupnotfound = true;
                         continue;
                     }
                 }
             }
-            if (isset($group)) {
-                if (isset($group[$packagetype])) {
-                    if (isset($group[$packagetype][0])) {
-                        foreach ($group[$packagetype] as $dep) {
-                            $ret = $this->_detect2Dep($dep, $pname, 'dependency group "' .
-                                $group['attribs']['name'] . '"', $params);
-                            if (is_array($ret)) {
-                                $this->_downloadDeps[] = $ret;
-                            }
-                        }
-                    } else {
-                        $ret = $this->_detect2Dep($group[$packagetype], $pname,
-                            'dependency group "' .
+
+            if (isset($group) && isset($group[$packagetype])) {
+                if (isset($group[$packagetype][0])) {
+                    foreach ($group[$packagetype] as $dep) {
+                        $ret = $this->_detect2Dep($dep, $pname, 'dependency group "' .
                             $group['attribs']['name'] . '"', $params);
                         if (is_array($ret)) {
                             $this->_downloadDeps[] = $ret;
+                        } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                            $this->_downloader->log(0, $ret->getMessage());
                         }
                     }
+                } else {
+                    $ret = $this->_detect2Dep($group[$packagetype], $pname,
+                        'dependency group "' .
+                        $group['attribs']['name'] . '"', $params);
+                    if (is_array($ret)) {
+                        $this->_downloadDeps[] = $ret;
+                    } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                        $this->_downloader->log(0, $ret->getMessage());
+                    }
                 }
             }
         }
@@ -16000,10 +16544,12 @@ class PEAR_Downloader_Package
         if (isset($dep['conflicts'])) {
             return true;
         }
+
         $options = $this->_downloader->getOptions();
         if (isset($dep['uri'])) {
             return array('uri' => $dep['uri'], 'dep' => $dep);;
         }
+
         $testdep = $dep;
         $testdep['package'] = $dep['name'];
         if (PEAR_Downloader_Package::willDownload($testdep, $params)) {
@@ -16016,17 +16562,19 @@ class PEAR_Downloader_Package
             }
             return false;
         }
+
         $options = $this->_downloader->getOptions();
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
         if ($this->_explicitState) {
             $pname['state'] = $this->_explicitState;
         }
-        $url =
-            $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
+
+        $url = $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
         if (PEAR::isError($url)) {
             PEAR::popErrorHandling();
             return $url;
         }
+
         $dep['package'] = $dep['name'];
         $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params, $group == 'optional' &&
             !isset($options['alldeps']), true);
@@ -16035,34 +16583,39 @@ class PEAR_Downloader_Package
             if (!isset($options['soft'])) {
                 $this->_downloader->log(0, $ret->getMessage());
             }
+
             return false;
+        }
+
+        // check to see if a dep is already installed and is the same or newer
+        if (!isset($dep['min']) && !isset($dep['max']) && !isset($dep['recommended'])) {
+            $oper = 'has';
         } else {
-            // check to see if a dep is already installed and is the same or newer
-            if (!isset($dep['min']) && !isset($dep['max']) && !isset($dep['recommended'])) {
-                $oper = 'has';
-            } else {
-                $oper = 'gt';
-            }
-            // do not try to move this before getDepPackageDownloadURL
-            // we can't determine whether upgrade is necessary until we know what
-            // version would be downloaded
-            if (!isset($options['force']) && $this->isInstalled($ret, $oper)) {
-                $version = $this->_installRegistry->packageInfo($dep['name'], 'version',
-                    $dep['channel']);
-                $dep['package'] = $dep['name'];
-                if (!isset($options['soft'])) {
-                    $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
-                        ' dependency "' .
-                    $this->_registry->parsedPackageNameToString($dep, true) .
-                        '" version ' . $url['version'] . ', already installed as version ' .
-                        $version);
-                }
-                return false;
+            $oper = 'gt';
+        }
+
+        // do not try to move this before getDepPackageDownloadURL
+        // we can't determine whether upgrade is necessary until we know what
+        // version would be downloaded
+        if (!isset($options['force']) && $this->isInstalled($ret, $oper)) {
+            $version = $this->_installRegistry->packageInfo($dep['name'], 'version',
+                $dep['channel']);
+            $dep['package'] = $dep['name'];
+            if (!isset($options['soft'])) {
+                $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
+                    ' dependency "' .
+                $this->_registry->parsedPackageNameToString($dep, true) .
+                    '" version ' . $url['version'] . ', already installed as version ' .
+                    $version);
             }
+
+            return false;
         }
+
         if (isset($dep['nodefault'])) {
             $ret['nodefault'] = true;
         }
+
         return $ret;
     }
 
@@ -16072,7 +16625,7 @@ class PEAR_Downloader_Package
         $skipnames = array();
         foreach ($deps as $dep) {
             $nodownload = false;
-            if ($dep['type'] == 'pkg') {
+            if (isset ($dep['type']) && $dep['type'] === 'pkg') {
                 $dep['channel'] = 'pear.php.net';
                 $dep['package'] = $dep['name'];
                 switch ($dep['rel']) {
@@ -16104,12 +16657,13 @@ class PEAR_Downloader_Package
                             continue 2;
                         }
                 }
+
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 if ($this->_explicitState) {
                     $pname['state'] = $this->_explicitState;
                 }
-                $url =
-                    $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
+
+                $url = $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
                 $chan = 'pear.php.net';
                 if (PEAR::isError($url)) {
                     // check to see if this is a pecl package that has jumped
@@ -16117,6 +16671,7 @@ class PEAR_Downloader_Package
                     if (!class_exists('PEAR_Dependency2')) {
                         require_once 'PEAR/Dependency2.php';
                     }
+
                     $newdep = PEAR_Dependency2::normalizeDep($dep);
                     $newdep = $newdep[0];
                     $newdep['channel'] = 'pecl.php.net';
@@ -16157,6 +16712,7 @@ class PEAR_Downloader_Package
                         }
                     }
                 }
+
                 PEAR::popErrorHandling();
                 if (!isset($options['alldeps'])) {
                     if (isset($dep['optional']) && $dep['optional'] == 'yes') {
@@ -16175,6 +16731,7 @@ class PEAR_Downloader_Package
                         $nodownload = true;
                     }
                 }
+
                 if (!isset($options['alldeps']) && !isset($options['onlyreqdeps'])) {
                     if (!isset($dep['optional']) || $dep['optional'] == 'no') {
                         if (!isset($options['soft'])) {
@@ -16192,6 +16749,7 @@ class PEAR_Downloader_Package
                         $nodownload = true;
                     }
                 }
+
                 // check to see if a dep is already installed
                 // do not try to move this before getDepPackageDownloadURL
                 // we can't determine whether upgrade is necessary until we know what
@@ -16208,6 +16766,7 @@ class PEAR_Downloader_Package
                     } else {
                         $version = $this->_installRegistry->packageInfo($dep['name'], 'version');
                     }
+
                     $dep['version'] = $url['version'];
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
@@ -16215,21 +16774,26 @@ class PEAR_Downloader_Package
                             $this->_registry->parsedPackageNameToString($dep, true) .
                             '", already installed as version ' . $version);
                     }
+
                     $skip = count($skipnames) ?
                         $skipnames[count($skipnames) - 1] : '';
                     if ($skip ==
                           $this->_registry->parsedPackageNameToString($dep, true)) {
                         array_pop($skipnames);
                     }
+
                     continue;
                 }
+
                 if ($nodownload) {
                     continue;
                 }
+
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 if (isset($newdep)) {
                     $dep = $newdep;
                 }
+
                 $dep['package'] = $dep['name'];
                 $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params,
                     isset($dep['optional']) && $dep['optional'] == 'yes' &&
@@ -16241,9 +16805,11 @@ class PEAR_Downloader_Package
                     }
                     continue;
                 }
+
                 $this->_downloadDeps[] = $ret;
             }
         }
+
         if (count($skipnames)) {
             if (!isset($options['soft'])) {
                 $this->_downloader->log(1, 'Did not download dependencies: ' .
@@ -16281,6 +16847,7 @@ class PEAR_Downloader_Package
                 'package' => $this->getPackage(),
                 'version' => $this->getVersion());
         }
+
         return false;
     }
 
@@ -16291,11 +16858,10 @@ class PEAR_Downloader_Package
 
     function canDefault()
     {
-        if (isset($this->_downloadURL)) {
-            if (isset($this->_downloadURL['nodefault'])) {
-                return false;
-            }
+        if (isset($this->_downloadURL) && isset($this->_downloadURL['nodefault'])) {
+            return false;
         }
+
         return true;
     }
 
@@ -16305,9 +16871,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getPackage();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getPackage();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -16319,9 +16885,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->isSubpackage($pf);
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->isSubpackage($pf);
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getPackageType()
@@ -16330,18 +16896,18 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getPackageType();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getPackageType();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function isBundle()
     {
         if (isset($this->_packagefile)) {
             return $this->_packagefile->getPackageType() == 'bundle';
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getPackageXmlVersion()
@@ -16350,9 +16916,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getPackagexmlVersion();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getPackagexmlVersion();
-        } else {
-            return '1.0';
         }
+
+        return '1.0';
     }
 
     function getChannel()
@@ -16361,9 +16927,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getChannel();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getChannel();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getURI()
@@ -16372,9 +16938,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getURI();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getURI();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getVersion()
@@ -16383,9 +16949,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getVersion();
         } elseif (isset($this->_downloadURL['version'])) {
             return $this->_downloadURL['version'];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function isCompatible($pf)
@@ -16394,9 +16960,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->isCompatible($pf);
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->isCompatible($pf);
-        } else {
-            return true;
         }
+
+        return true;
     }
 
     function setGroup($group)
@@ -16408,9 +16974,9 @@ class PEAR_Downloader_Package
     {
         if (isset($this->_parsedname['group'])) {
             return $this->_parsedname['group'];
-        } else {
-            return '';
         }
+
+        return '';
     }
 
     function isExtension($name)
@@ -16418,14 +16984,14 @@ class PEAR_Downloader_Package
         if (isset($this->_packagefile)) {
             return $this->_packagefile->isExtension($name);
         } elseif (isset($this->_downloadURL['info'])) {
-			if ($this->_downloadURL['info']->getPackagexmlVersion() == '2.0') {
-				return $this->_downloadURL['info']->getProvidesExtension() == $name;
-			} else {
-				return false;
-			}
-        } else {
+            if ($this->_downloadURL['info']->getPackagexmlVersion() == '2.0') {
+                return $this->_downloadURL['info']->getProvidesExtension() == $name;
+            }
+
             return false;
         }
+
+        return false;
     }
 
     function getDeps()
@@ -16434,19 +17000,19 @@ class PEAR_Downloader_Package
             $ver = $this->_packagefile->getPackagexmlVersion();
             if (version_compare($ver, '2.0', '>=')) {
                 return $this->_packagefile->getDeps(true);
-            } else {
-                return $this->_packagefile->getDeps();
             }
+
+            return $this->_packagefile->getDeps();
         } elseif (isset($this->_downloadURL['info'])) {
             $ver = $this->_downloadURL['info']->getPackagexmlVersion();
             if (version_compare($ver, '2.0', '>=')) {
                 return $this->_downloadURL['info']->getDeps(true);
-            } else {
-                return $this->_downloadURL['info']->getDeps();
             }
-        } else {
-            return array();
+
+            return $this->_downloadURL['info']->getDeps();
         }
+
+        return array();
     }
 
     /**
@@ -16479,27 +17045,30 @@ class PEAR_Downloader_Package
                 }
                 return $param['uri'] == $this->getURI();
             }
-            $package = isset($param['package']) ? $param['package'] :
-                $param['info']->getPackage();
-            $channel = isset($param['channel']) ? $param['channel'] :
-                $param['info']->getChannel();
+
+            $package = isset($param['package']) ? $param['package'] : $param['info']->getPackage();
+            $channel = isset($param['channel']) ? $param['channel'] : $param['info']->getChannel();
             if (isset($param['rel'])) {
                 if (!class_exists('PEAR_Dependency2')) {
                     require_once 'PEAR/Dependency2.php';
                 }
+
                 $newdep = PEAR_Dependency2::normalizeDep($param);
                 $newdep = $newdep[0];
             } elseif (isset($param['min'])) {
                 $newdep = $param;
             }
         }
+
         if (isset($newdep)) {
             if (!isset($newdep['min'])) {
                 $newdep['min'] = '0';
             }
+
             if (!isset($newdep['max'])) {
                 $newdep['max'] = '100000000000000000000';
             }
+
             // use magic to support pecl packages suddenly jumping to the pecl channel
             // we need to support both dependency possibilities
             if ($channel == 'pear.php.net' && $this->getChannel() == 'pecl.php.net') {
@@ -16517,20 +17086,22 @@ class PEAR_Downloader_Package
                 version_compare($newdep['min'], $this->getVersion(), '<=') &&
                 version_compare($newdep['max'], $this->getVersion(), '>='));
         }
+
         // use magic to support pecl packages suddenly jumping to the pecl channel
         if ($channel == 'pecl.php.net' && $this->getChannel() == 'pear.php.net') {
             if (strtolower($package) == strtolower($this->getPackage())) {
                 $channel = 'pear.php.net';
             }
         }
+
         if (isset($param['version'])) {
             return (strtolower($package) == strtolower($this->getPackage()) &&
                 $channel == $this->getChannel() &&
                 $param['version'] == $this->getVersion());
-        } else {
-            return strtolower($package) == strtolower($this->getPackage()) &&
-                $channel == $this->getChannel();
         }
+
+        return strtolower($package) == strtolower($this->getPackage()) &&
+            $channel == $this->getChannel();
     }
 
     function isInstalled($dep, $oper = '==')
@@ -16538,9 +17109,11 @@ class PEAR_Downloader_Package
         if (!$dep) {
             return false;
         }
+
         if ($oper != 'ge' && $oper != 'gt' && $oper != 'has' && $oper != '==') {
             return false;
         }
+
         if (is_object($dep)) {
             $package = $dep->getPackage();
             $channel = $dep->getChannel();
@@ -16563,39 +17136,34 @@ class PEAR_Downloader_Package
                 $package = $dep['info']->getPackage();
             }
         }
+
         $options = $this->_downloader->getOptions();
-        $test = $this->_installRegistry->packageExists($package, $channel);
+        $test    = $this->_installRegistry->packageExists($package, $channel);
         if (!$test && $channel == 'pecl.php.net') {
             // do magic to allow upgrading from old pecl packages to new ones
             $test = $this->_installRegistry->packageExists($package, 'pear.php.net');
             $channel = 'pear.php.net';
         }
+
         if ($test) {
             if (isset($dep['uri'])) {
                 if ($this->_installRegistry->packageInfo($package, 'uri', '__uri') == $dep['uri']) {
                     return true;
                 }
             }
+
             if (isset($options['upgrade'])) {
-                if ($oper == 'has') {
-                    if (version_compare($this->_installRegistry->packageInfo(
-                          $package, 'version', $channel),
-                          $dep['version'], '>=')) {
-                        return true;
-                    } else {
-                        return false;
-                    }
-                } else {
-                    if (version_compare($this->_installRegistry->packageInfo(
-                          $package, 'version', $channel),
-                          $dep['version'], '>=')) {
-                        return true;
-                    }
-                    return false;
+                $packageVersion = $this->_installRegistry->packageInfo($package, 'version', $channel);
+                if (version_compare($packageVersion, $dep['version'], '>=')) {
+                    return true;
                 }
+
+                return false;
             }
+
             return true;
         }
+
         return false;
     }
 
@@ -16620,9 +17188,11 @@ class PEAR_Downloader_Package
             if (!isset($existing[$channel . '/' . $package])) {
                 $existing[$channel . '/' . $package] = array();
             }
+
             if (!isset($existing[$channel . '/' . $package][$group])) {
                 $existing[$channel . '/' . $package][$group] = array();
             }
+
             $existing[$channel . '/' . $package][$group][] = $i;
         }
 
@@ -16639,6 +17209,7 @@ class PEAR_Downloader_Package
         foreach ($indices as $index) {
             $errorparams[] = $params[$index];
         }
+
         return count($errorparams);
     }
 
@@ -16660,39 +17231,42 @@ class PEAR_Downloader_Package
                 } else {
                     $group = $param->getGroup();
                 }
+
                 $pnames[$i] = $param->getChannel() . '/' .
                     $param->getPackage() . '-' . $param->getVersion() . '#' . $group;
             }
         }
+
         $pnames = array_unique($pnames);
-        $unset = array_diff(array_keys($params), array_keys($pnames));
-        $testp = array_flip($pnames);
+        $unset  = array_diff(array_keys($params), array_keys($pnames));
+        $testp  = array_flip($pnames);
         foreach ($params as $i => $param) {
             if (!$param) {
                 $unset[] = $i;
                 continue;
             }
+
             if (!is_a($param, 'PEAR_Downloader_Package')) {
                 $unset[] = $i;
                 continue;
             }
-            if ($ignoreGroups) {
-                $group = '';
-            } else {
-                $group = $param->getGroup();
-            }
+
+            $group = $ignoreGroups ? '' : $param->getGroup();
             if (!isset($testp[$param->getChannel() . '/' . $param->getPackage() . '-' .
                   $param->getVersion() . '#' . $group])) {
                 $unset[] = $i;
             }
         }
+
         foreach ($unset as $i) {
             unset($params[$i]);
         }
+
         $ret = array();
         foreach ($params as $i => $param) {
             $ret[] = &$params[$i];
         }
+
         $params = array();
         foreach ($ret as $i => $param) {
             $params[] = &$ret[$i];
@@ -16714,12 +17288,12 @@ class PEAR_Downloader_Package
      */
     function mergeDependencies(&$params)
     {
-        $newparams = array();
-        $bundles = array();
+        $bundles = $newparams = array();
         foreach ($params as $i => $param) {
             if (!$param->isBundle()) {
                 continue;
             }
+
             $bundles[] = $i;
             $pf = &$param->getPackageFile();
             $newdeps = array();
@@ -16727,6 +17301,7 @@ class PEAR_Downloader_Package
             if (!is_array($contents)) {
                 $contents = array($contents);
             }
+
             foreach ($contents as $file) {
                 $filecontents = $pf->getFileContents($file);
                 $dl = &$param->getDownloader();
@@ -16734,21 +17309,25 @@ class PEAR_Downloader_Package
                 if (PEAR::isError($dir = $dl->getDownloadDir())) {
                     return $dir;
                 }
+
                 $fp = @fopen($dir . DIRECTORY_SEPARATOR . $file, 'wb');
                 if (!$fp) {
                     continue;
                 }
+
                 fwrite($fp, $filecontents, strlen($filecontents));
                 fclose($fp);
                 if ($s = $params[$i]->explicitState()) {
                     $obj->setExplicitState($s);
                 }
+
                 $obj = &new PEAR_Downloader_Package($params[$i]->getDownloader());
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 if (PEAR::isError($dir = $dl->getDownloadDir())) {
                     PEAR::popErrorHandling();
                     return $dir;
                 }
+
                 $e = $obj->_fromFile($a = $dir . DIRECTORY_SEPARATOR . $file);
                 PEAR::popErrorHandling();
                 if (PEAR::isError($e)) {
@@ -16757,6 +17336,7 @@ class PEAR_Downloader_Package
                     }
                     continue;
                 }
+
                 $j = &$obj;
                 if (!PEAR_Downloader_Package::willDownload($j,
                       array_merge($params, $newparams)) && !$param->isInstalled($j)) {
@@ -16764,9 +17344,11 @@ class PEAR_Downloader_Package
                 }
             }
         }
+
         foreach ($bundles as $i) {
             unset($params[$i]); // remove bundles - only their contents matter for installation
         }
+
         PEAR_Downloader_Package::removeDuplicates($params); // strip any unset indices
         if (count($newparams)) { // add in bundled packages for install
             foreach ($newparams as $i => $unused) {
@@ -16774,24 +17356,29 @@ class PEAR_Downloader_Package
             }
             $newparams = array();
         }
+
         foreach ($params as $i => $param) {
             $newdeps = array();
             foreach ($param->_downloadDeps as $dep) {
-                if (!PEAR_Downloader_Package::willDownload($dep,
-                      array_merge($params, $newparams)) && !$param->isInstalled($dep)) {
+                $merge = array_merge($params, $newparams);
+                if (!PEAR_Downloader_Package::willDownload($dep, $merge)
+                    && !$param->isInstalled($dep)
+                ) {
                     $newdeps[] = $dep;
                 } else {
+                    //var_dump($dep);
                     // detect versioning conflicts here
                 }
             }
-            // convert the dependencies into PEAR_Downloader_Package objects for the next time
-            // around
+
+            // convert the dependencies into PEAR_Downloader_Package objects for the next time around
             $params[$i]->_downloadDeps = array();
             foreach ($newdeps as $dep) {
                 $obj = &new PEAR_Downloader_Package($params[$i]->getDownloader());
                 if ($s = $params[$i]->explicitState()) {
                     $obj->setExplicitState($s);
                 }
+
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 $e = $obj->fromDepURL($dep);
                 PEAR::popErrorHandling();
@@ -16801,24 +17388,27 @@ class PEAR_Downloader_Package
                     }
                     continue;
                 }
+
                 $e = $obj->detectDependencies($params);
                 if (PEAR::isError($e)) {
                     if (!isset($options['soft'])) {
                         $obj->_downloader->log(0, $e->getMessage());
                     }
                 }
+
                 $j = &$obj;
                 $newparams[] = &$j;
             }
         }
+
         if (count($newparams)) {
             foreach ($newparams as $i => $unused) {
                 $params[] = &$newparams[$i];
             }
             return true;
-        } else {
-            return false;
         }
+
+        return false;
     }
 
 
@@ -16830,11 +17420,13 @@ class PEAR_Downloader_Package
         if (!is_array($params)) {
             return false;
         }
+
         foreach ($params as $obj) {
             if ($obj->isEqual($param)) {
                 return true;
             }
         }
+
         return false;
     }
 
@@ -16870,6 +17462,7 @@ class PEAR_Downloader_Package
                     $this->_explicitGroup = true;
                 }
             }
+
             if (@is_file($param)) {
                 $this->_type = 'local';
                 $options = $this->_downloader->getOptions();
@@ -16904,8 +17497,7 @@ class PEAR_Downloader_Package
 
     function _fromUrl($param, $saveparam = '')
     {
-        if (!is_array($param) &&
-              (preg_match('#^(http|ftp)://#', $param))) {
+        if (!is_array($param) && (preg_match('#^(http|https|ftp)://#', $param))) {
             $options = $this->_downloader->getOptions();
             $this->_type = 'url';
             $callback = $this->_downloader->ui ?
@@ -16915,6 +17507,7 @@ class PEAR_Downloader_Package
                 $this->_downloader->popErrorHandling();
                 return $dir;
             }
+
             $this->_downloader->log(3, 'Downloading "' . $param . '"');
             $file = $this->_downloader->downloadHttp($param, $this->_downloader->ui,
                 $dir, $callback, null, false, $this->getChannel());
@@ -16927,6 +17520,7 @@ class PEAR_Downloader_Package
                     '"' . $saveparam . ' (' . $file->getMessage() . ')');
                     return $err;
             }
+
             if ($this->_rawpackagefile) {
                 require_once 'Archive/Tar.php';
                 $tar = &new Archive_Tar($file);
@@ -16934,32 +17528,35 @@ class PEAR_Downloader_Package
                 if (!$packagexml) {
                     $packagexml = $tar->extractInString('package.xml');
                 }
+
                 if (str_replace(array("\n", "\r"), array('',''), $packagexml) !=
                       str_replace(array("\n", "\r"), array('',''), $this->_rawpackagefile)) {
-                    if ($this->getChannel() == 'pear.php.net') {
-                        // be more lax for the existing PEAR packages that have not-ok
-                        // characters in their package.xml
-                        $this->_downloader->log(0, 'CRITICAL WARNING: The "' .
-                            $this->getPackage() . '" package has invalid characters in its ' .
-                            'package.xml.  The next version of PEAR may not be able to install ' .
-                            'this package for security reasons.  Please open a bug report at ' .
-                            'http://pear.php.net/package/' . $this->getPackage() . '/bugs');
-                    } else {
+                    if ($this->getChannel() != 'pear.php.net') {
                         return PEAR::raiseError('CRITICAL ERROR: package.xml downloaded does ' .
                             'not match value returned from xml-rpc');
                     }
+
+                    // be more lax for the existing PEAR packages that have not-ok
+                    // characters in their package.xml
+                    $this->_downloader->log(0, 'CRITICAL WARNING: The "' .
+                        $this->getPackage() . '" package has invalid characters in its ' .
+                        'package.xml.  The next version of PEAR may not be able to install ' .
+                        'this package for security reasons.  Please open a bug report at ' .
+                        'http://pear.php.net/package/' . $this->getPackage() . '/bugs');
                 }
             }
+
             // whew, download worked!
             if (isset($options['downloadonly'])) {
                 $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
             } else {
-                if (PEAR::isError($dir = $this->_downloader->getDownloadDir())) {
+                $dir = $this->_downloader->getDownloadDir();
+                if (PEAR::isError($dir)) {
                     return $dir;
                 }
-                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug,
-                    $dir);
+                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug, $dir);
             }
+
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $pf = &$pkg->fromAnyFile($file, PEAR_VALIDATE_INSTALLING);
             PEAR::popErrorHandling();
@@ -16969,23 +17566,30 @@ class PEAR_Downloader_Package
                         if (is_array($err)) {
                             $err = $err['message'];
                         }
+
                         if (!isset($options['soft'])) {
                             $this->_downloader->log(0, "Validation Error: $err");
                         }
                     }
                 }
+
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $pf->getMessage());
                 }
-                $err = PEAR::raiseError('Download of "' . ($saveparam ? $saveparam :
-                    $param) . '" succeeded, but it is not a valid package archive');
+
+                ///FIXME need to pass back some error code that we can use to match with to cancel all further operations
+                /// At least stop all deps of this package from being installed
+                $out = $saveparam ? $saveparam : $param;
+                $err = PEAR::raiseError('Download of "' . $out . '" succeeded, but it is not a valid package archive');
                 $this->_valid = false;
                 return $err;
             }
+
             $this->_packagefile = &$pf;
             $this->setGroup('default'); // install the default dependency group
             return $this->_valid = true;
         }
+
         return $this->_valid = false;
     }
 
@@ -17002,22 +17606,22 @@ class PEAR_Downloader_Package
     function _fromString($param)
     {
         $options = $this->_downloader->getOptions();
+        $channel = $this->_config->get('default_channel');
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        $pname = $this->_registry->parsePackageName($param,
-            $this->_config->get('default_channel'));
+        $pname = $this->_registry->parsePackageName($param, $channel);
         PEAR::popErrorHandling();
         if (PEAR::isError($pname)) {
             if ($pname->getCode() == 'invalid') {
                 $this->_valid = false;
                 return false;
             }
+
             if ($pname->getCode() == 'channel') {
                 $parsed = $pname->getUserInfo();
                 if ($this->_downloader->discover($parsed['channel'])) {
                     if ($this->_config->get('auto_discover')) {
                         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-                        $pname = $this->_registry->parsePackageName($param,
-                            $this->_config->get('default_channel'));
+                        $pname = $this->_registry->parsePackageName($param, $channel);
                         PEAR::popErrorHandling();
                     } else {
                         if (!isset($options['soft'])) {
@@ -17028,15 +17632,17 @@ class PEAR_Downloader_Package
                         }
                     }
                 }
+
                 if (PEAR::isError($pname)) {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(0, $pname->getMessage());
                     }
+
                     if (is_array($param)) {
                         $param = $this->_registry->parsedPackageNameToString($param);
                     }
-                    $err = PEAR::raiseError('invalid package name/package file "' .
-                        $param . '"');
+
+                    $err = PEAR::raiseError('invalid package name/package file "' . $param . '"');
                     $this->_valid = false;
                     return $err;
                 }
@@ -17044,26 +17650,21 @@ class PEAR_Downloader_Package
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $pname->getMessage());
                 }
-                $err = PEAR::raiseError('invalid package name/package file "' .
-                    $param . '"');
+
+                $err = PEAR::raiseError('invalid package name/package file "' . $param . '"');
                 $this->_valid = false;
                 return $err;
             }
         }
+
         if (!isset($this->_type)) {
-            $this->_type = 'xmlrpc';
-        }
-        $this->_parsedname = $pname;
-        if (isset($pname['state'])) {
-            $this->_explicitState = $pname['state'];
-        } else {
-            $this->_explicitState = false;
-        }
-        if (isset($pname['group'])) {
-            $this->_explicitGroup = true;
-        } else {
-            $this->_explicitGroup = false;
+            $this->_type = 'rest';
         }
+
+        $this->_parsedname    = $pname;
+        $this->_explicitState = isset($pname['state']) ? $pname['state'] : false;
+        $this->_explicitGroup = isset($pname['group']) ? true : false;
+
         $info = $this->_downloader->_getPackageDownloadUrl($pname);
         if (PEAR::isError($info)) {
             if ($info->getCode() != -976 && $pname['channel'] == 'pear.php.net') {
@@ -17082,13 +17683,16 @@ class PEAR_Downloader_Package
                     $pname['channel'] = 'pear.php.net';
                 }
             }
+
             return $info;
         }
+
         $this->_rawpackagefile = $info['raw'];
         $ret = $this->_analyzeDownloadURL($info, $param, $pname);
         if (PEAR::isError($ret)) {
             return $ret;
         }
+
         if ($ret) {
             $this->_downloadURL = $ret;
             return $this->_valid = (bool) $ret;
@@ -17111,16 +17715,15 @@ class PEAR_Downloader_Package
         if (!is_string($param) && PEAR_Downloader_Package::willDownload($param, $params)) {
             return false;
         }
-        if (!$info) {
-            if (!is_string($param)) {
-                $saveparam = ", cannot download \"$param\"";
-            } else {
-                $saveparam = '';
-            }
+
+        if ($info === false) {
+            $saveparam = !is_string($param) ? ", cannot download \"$param\"" : '';
+
             // no releases exist
             return PEAR::raiseError('No releases for package "' .
                 $this->_registry->parsedPackageNameToString($pname, true) . '" exist' . $saveparam);
         }
+
         if (strtolower($info['info']->getChannel()) != strtolower($pname['channel'])) {
             $err = false;
             if ($pname['channel'] == 'pecl.php.net') {
@@ -17134,23 +17737,47 @@ class PEAR_Downloader_Package
             } else {
                 $err = true;
             }
+
             if ($err) {
                 return PEAR::raiseError('SECURITY ERROR: package in channel "' . $pname['channel'] .
                     '" retrieved another channel\'s name for download! ("' .
                     $info['info']->getChannel() . '")');
             }
         }
+
+        $preferred_state = $this->_config->get('preferred_state');
         if (!isset($info['url'])) {
+            $package_version = $this->_registry->packageInfo($info['info']->getPackage(),
+            'version', $info['info']->getChannel());
             if ($this->isInstalled($info)) {
-                if ($isdependency && version_compare($info['version'],
-                      $this->_registry->packageInfo($info['info']->getPackage(),
-                            'version', $info['info']->getChannel()), '<=')) {
+                if ($isdependency && version_compare($info['version'], $package_version, '<=')) {
                     // ignore bogus errors of "failed to download dependency"
                     // if it is already installed and the one that would be
                     // downloaded is older or the same version (Bug #7219)
                     return false;
                 }
             }
+
+            if ($info['version'] === $package_version) {
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
+                        '/' . $pname['package'] . '-' . $pname['version'] . ', additionally the suggested version' .
+                        ' (' . $package_version . ') is the same as the locally installed one.');
+                }
+
+                return false;
+            }
+
+            if (version_compare($info['version'], $package_version, '<=')) {
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
+                        '/' . $pname['package'] . '-' . $pname['version'] . ', additionally the suggested version' .
+                        ' (' . $info['version'] . ') is a lower version than the locally installed one (' . $package_version . ').');
+                }
+
+                return false;
+            }
+
             $instead =  ', will instead download version ' . $info['version'] .
                         ', stability "' . $info['info']->getState() . '"';
             // releases exist, but we failed to get any
@@ -17163,8 +17790,9 @@ class PEAR_Downloader_Package
                     if (!class_exists('PEAR_Common')) {
                         require_once 'PEAR/Common.php';
                     }
+
                     if (!in_array($info['info']->getState(),
-                          PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
+                          PEAR_Common::betterStates($preferred_state, true))) {
                         if ($optional) {
                             // don't spit out confusing error message
                             return $this->_downloader->_getPackageDownloadUrl(
@@ -17172,12 +17800,13 @@ class PEAR_Downloader_Package
                                       'channel' => $pname['channel'],
                                       'version' => $info['version']));
                         }
-                        $vs = ' within preferred state "' . $this->_config->get('preferred_state') .
+                        $vs = ' within preferred state "' . $preferred_state .
                             '"';
                     } else {
                         if (!class_exists('PEAR_Dependency2')) {
                             require_once 'PEAR/Dependency2.php';
                         }
+
                         if ($optional) {
                             // don't spit out confusing error message
                             return $this->_downloader->_getPackageDownloadUrl(
@@ -17189,13 +17818,14 @@ class PEAR_Downloader_Package
                         $instead = '';
                     }
                 } else {
-                    $vs = ' within preferred state "' . $this->_config->get(
-                        'preferred_state') . '"';
+                    $vs = ' within preferred state "' . $preferred_state . '"';
                 }
+
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
                         '/' . $pname['package'] . $vs . $instead);
                 }
+
                 // download the latest release
                 return $this->_downloader->_getPackageDownloadUrl(
                     array('package' => $pname['package'],
@@ -17217,6 +17847,7 @@ class PEAR_Downloader_Package
                             PEAR_DOWNLOADER_PACKAGE_PHPVERSION);
                     return $err;
                 }
+
                 // construct helpful error message
                 if (isset($pname['version'])) {
                     $vs = ', version "' . $pname['version'] . '"';
@@ -17226,8 +17857,9 @@ class PEAR_Downloader_Package
                     if (!class_exists('PEAR_Common')) {
                         require_once 'PEAR/Common.php';
                     }
+
                     if (!in_array($info['info']->getState(),
-                          PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
+                          PEAR_Common::betterStates($preferred_state, true))) {
                         if ($optional) {
                             // don't spit out confusing error message, and don't die on
                             // optional dep failure!
@@ -17236,12 +17868,12 @@ class PEAR_Downloader_Package
                                       'channel' => $pname['channel'],
                                       'version' => $info['version']));
                         }
-                        $vs = ' within preferred state "' . $this->_config->get('preferred_state') .
-                            '"';
+                        $vs = ' within preferred state "' . $preferred_state . '"';
                     } else {
                         if (!class_exists('PEAR_Dependency2')) {
                             require_once 'PEAR/Dependency2.php';
                         }
+
                         if ($optional) {
                             // don't spit out confusing error message, and don't die on
                             // optional dep failure!
@@ -17253,9 +17885,9 @@ class PEAR_Downloader_Package
                         $vs = PEAR_Dependency2::_getExtraString($pname);
                     }
                 } else {
-                    $vs = ' within preferred state "' . $this->_downloader->config->get(
-                        'preferred_state') . '"';
+                    $vs = ' within preferred state "' . $this->_downloader->config->get('preferred_state') . '"';
                 }
+
                 $options = $this->_downloader->getOptions();
                 // this is only set by the "download-all" command
                 if (isset($options['ignorepreferred_state'])) {
@@ -17272,19 +17904,29 @@ class PEAR_Downloader_Package
                             PEAR_DOWNLOADER_PACKAGE_STATE);
                     return $err;
                 }
-                $err = PEAR::raiseError(
-                    'Failed to download ' . $this->_registry->parsedPackageNameToString(
-                        array('channel' => $pname['channel'], 'package' => $pname['package']),
-                            true)
-                     . $vs .
-                    ', latest release is version ' . $info['version'] .
-                    ', stability "' . $info['info']->getState() . '", use "' .
-                    $this->_registry->parsedPackageNameToString(
-                        array('channel' => $pname['channel'], 'package' => $pname['package'],
-                        'version' => $info['version'])) . '" to install');
-                return $err;
+
+                // Checks if the user has a package installed already and checks the release against
+                // the state against the installed package, this allows upgrades for packages
+                // with lower stability than the preferred_state
+                $stability = $this->_registry->packageInfo($pname['package'], 'stability', $pname['channel']);
+                if (!$this->isInstalled($info)
+                    || !in_array($info['info']->getState(), PEAR_Common::betterStates($stability['release'], true))
+                ) {
+                    $err = PEAR::raiseError(
+                        'Failed to download ' . $this->_registry->parsedPackageNameToString(
+                            array('channel' => $pname['channel'], 'package' => $pname['package']),
+                                true)
+                         . $vs .
+                        ', latest release is version ' . $info['version'] .
+                        ', stability "' . $info['info']->getState() . '", use "' .
+                        $this->_registry->parsedPackageNameToString(
+                            array('channel' => $pname['channel'], 'package' => $pname['package'],
+                            'version' => $info['version'])) . '" to install');
+                    return $err;
+                }
             }
         }
+
         if (isset($info['deprecated']) && $info['deprecated']) {
             $this->_downloader->log(0,
                 'WARNING: "' .
@@ -17295,29 +17937,22 @@ class PEAR_Downloader_Package
                     $this->_registry->parsedPackageNameToString($info['deprecated'], true) .
                 '"');
         }
+
         return $info;
     }
-}
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                         PEAR-1.7.2/PEAR/Frontend/CLI.php                                                                    100644    1750    1750        67043 11014312742  11145                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                               PEAR-1.8.0/PEAR/Frontend/CLI.php                                                                    100664     764     764        60645      100664  10766                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Frontend_CLI
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: CLI.php,v 1.68 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: CLI.php,v 1.76 2009/04/04 00:09:14 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -17332,16 +17967,14 @@ require_once 'PEAR/Frontend.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Frontend_CLI extends PEAR_Frontend
 {
-    // {{{ properties
-
     /**
      * What type of user interface this frontend is for.
      * @var string
@@ -17352,13 +17985,9 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
 
     var $params = array();
     var $term = array(
-        'bold' => '',
+        'bold'   => '',
         'normal' => '',
-        );
-
-    // }}}
-
-    // {{{ constructor
+    );
 
     function PEAR_Frontend_CLI()
     {
@@ -17367,60 +17996,26 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
         if (function_exists('posix_isatty') && !posix_isatty(1)) {
             // output is being redirected to a file or through a pipe
         } elseif ($term) {
-            // XXX can use ncurses extension here, if available
             if (preg_match('/^(xterm|vt220|linux)/', $term)) {
-                $this->term['bold'] = sprintf("%c%c%c%c", 27, 91, 49, 109);
-                $this->term['normal']=sprintf("%c%c%c", 27, 91, 109);
+                $this->term['bold']   = sprintf("%c%c%c%c", 27, 91, 49, 109);
+                $this->term['normal'] = sprintf("%c%c%c", 27, 91, 109);
             } elseif (preg_match('/^vt100/', $term)) {
-                $this->term['bold'] = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
-                $this->term['normal']=sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
+                $this->term['bold']   = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
+                $this->term['normal'] = sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
             }
         } elseif (OS_WINDOWS) {
             // XXX add ANSI codes here
         }
     }
 
-    // }}}
-
-    // {{{ displayLine(text)
-
-    function displayLine($text)
-    {
-        trigger_error("PEAR_Frontend_CLI::displayLine deprecated", E_USER_ERROR);
-    }
-
-    function _displayLine($text)
-    {
-        print "$this->lp$text\n";
-    }
-
-    // }}}
-    // {{{ display(text)
-
-    function display($text)
-    {
-        trigger_error("PEAR_Frontend_CLI::display deprecated", E_USER_ERROR);
-    }
-
-    function _display($text)
-    {
-        print $text;
-    }
-
-    // }}}
-    // {{{ displayError(eobj)
-
     /**
      * @param object PEAR_Error object
      */
-    function displayError($eobj)
+    function displayError($e)
     {
-        return $this->_displayLine($eobj->getMessage());
+        return $this->_displayLine($e->getMessage());
     }
 
-    // }}}
-    // {{{ displayFatalError(eobj)
-
     /**
      * @param object PEAR_Error object
      */
@@ -17432,54 +18027,34 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
             if ($config->get('verbose') > 5) {
                 if (function_exists('debug_print_backtrace')) {
                     debug_print_backtrace();
-                } elseif (function_exists('debug_backtrace')) {
-                    $trace = debug_backtrace();
-                    $raised = false;
-                    foreach ($trace as $i => $frame) {
-                        if (!$raised) {
-                            if (isset($frame['class']) && strtolower($frame['class']) ==
-                                  'pear' && strtolower($frame['function']) == 'raiseerror') {
-                                $raised = true;
-                            } else {
-                                continue;
-                            }
-                        }
-                        if (!isset($frame['class'])) {
-                            $frame['class'] = '';
-                        }
-                        if (!isset($frame['type'])) {
-                            $frame['type'] = '';
-                        }
-                        if (!isset($frame['function'])) {
-                            $frame['function'] = '';
-                        }
-                        if (!isset($frame['line'])) {
-                            $frame['line'] = '';
+                    exit(1);
+                }
+
+                $raised = false;
+                foreach (debug_backtrace() as $i => $frame) {
+                    if (!$raised) {
+                        if (isset($frame['class'])
+                            && strtolower($frame['class']) == 'pear'
+                            && strtolower($frame['function']) == 'raiseerror'
+                        ) {
+                            $raised = true;
+                        } else {
+                            continue;
                         }
-                        $this->_displayLine("#$i: $frame[class]$frame[type]$frame[function] $frame[line]");
                     }
+
+                    $frame['class']    = !isset($frame['class'])    ? '' : $frame['class'];
+                    $frame['type']     = !isset($frame['type'])     ? '' : $frame['type'];
+                    $frame['function'] = !isset($frame['function']) ? '' : $frame['function'];
+                    $frame['line']     = !isset($frame['line'])     ? '' : $frame['line'];
+                    $this->_displayLine("#$i: $frame[class]$frame[type]$frame[function] $frame[line]");
                 }
             }
         }
-        exit(1);
-    }
-
-    // }}}
-    // {{{ displayHeading(title)
-
-    function displayHeading($title)
-    {
-        trigger_error("PEAR_Frontend_CLI::displayHeading deprecated", E_USER_ERROR);
-    }
 
-    function _displayHeading($title)
-    {
-        print $this->lp.$this->bold($title)."\n";
-        print $this->lp.str_repeat("=", strlen($title))."\n";
+        exit(1);
     }
 
-    // }}}
-
     /**
      * Instruct the runInstallScript method to skip a paramgroup that matches the
      * id value passed in.
@@ -17511,94 +18086,105 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
         $this->_skipSections = array();
         if (!is_array($xml) || !isset($xml['paramgroup'])) {
             $script->run(array(), '_default');
-        } else {
-            $completedPhases = array();
-            if (!isset($xml['paramgroup'][0])) {
-                $xml['paramgroup'] = array($xml['paramgroup']);
+            return;
+        }
+
+        $completedPhases = array();
+        if (!isset($xml['paramgroup'][0])) {
+            $xml['paramgroup'] = array($xml['paramgroup']);
+        }
+
+        foreach ($xml['paramgroup'] as $group) {
+            if (isset($this->_skipSections[$group['id']])) {
+                // the post-install script chose to skip this section dynamically
+                continue;
             }
-            foreach ($xml['paramgroup'] as $group) {
-                if (isset($this->_skipSections[$group['id']])) {
-                    // the post-install script chose to skip this section dynamically
+
+            if (isset($group['name'])) {
+                $paramname = explode('::', $group['name']);
+                if ($lastgroup['id'] != $paramname[0]) {
                     continue;
                 }
-                if (isset($group['name'])) {
-                    $paramname = explode('::', $group['name']);
-                    if ($lastgroup['id'] != $paramname[0]) {
-                        continue;
-                    }
-                    $group['name'] = $paramname[1];
-                    if (isset($answers)) {
-                        if (isset($answers[$group['name']])) {
-                            switch ($group['conditiontype']) {
-                                case '=' :
-                                    if ($answers[$group['name']] != $group['value']) {
-                                        continue 2;
-                                    }
-                                break;
-                                case '!=' :
-                                    if ($answers[$group['name']] == $group['value']) {
-                                        continue 2;
-                                    }
-                                break;
-                                case 'preg_match' :
-                                    if (!@preg_match('/' . $group['value'] . '/',
-                                          $answers[$group['name']])) {
-                                        continue 2;
-                                    }
-                                break;
-                                default :
-                                return;
+
+                $group['name'] = $paramname[1];
+                if (!isset($answers)) {
+                    return;
+                }
+
+                if (isset($answers[$group['name']])) {
+                    switch ($group['conditiontype']) {
+                        case '=' :
+                            if ($answers[$group['name']] != $group['value']) {
+                                continue 2;
                             }
-                        }
-                    } else {
+                        break;
+                        case '!=' :
+                            if ($answers[$group['name']] == $group['value']) {
+                                continue 2;
+                            }
+                        break;
+                        case 'preg_match' :
+                            if (!@preg_match('/' . $group['value'] . '/',
+                                  $answers[$group['name']])) {
+                                continue 2;
+                            }
+                        break;
+                        default :
                         return;
                     }
                 }
-                $lastgroup = $group;
-                if (isset($group['instructions'])) {
-                    $this->_display($group['instructions']);
-                }
-                if (!isset($group['param'][0])) {
-                    $group['param'] = array($group['param']);
-                }
-                if (isset($group['param'])) {
-                    if (method_exists($script, 'postProcessPrompts')) {
-                        $prompts = $script->postProcessPrompts($group['param'], $group['id']);
-                        if (!is_array($prompts) || count($prompts) != count($group['param'])) {
-                            $this->outputData('postinstall', 'Error: post-install script did not ' .
-                                'return proper post-processed prompts');
-                            $prompts = $group['param'];
-                        } else {
-                            foreach ($prompts as $i => $var) {
-                                if (!is_array($var) || !isset($var['prompt']) ||
-                                      !isset($var['name']) ||
-                                      ($var['name'] != $group['param'][$i]['name']) ||
-                                      ($var['type'] != $group['param'][$i]['type'])) {
-                                    $this->outputData('postinstall', 'Error: post-install script ' .
-                                        'modified the variables or prompts, severe security risk. ' .
-                                        'Will instead use the defaults from the package.xml');
-                                    $prompts = $group['param'];
-                                }
+            }
+
+            $lastgroup = $group;
+            if (isset($group['instructions'])) {
+                $this->_display($group['instructions']);
+            }
+
+            if (!isset($group['param'][0])) {
+                $group['param'] = array($group['param']);
+            }
+
+            if (isset($group['param'])) {
+                if (method_exists($script, 'postProcessPrompts')) {
+                    $prompts = $script->postProcessPrompts($group['param'], $group['id']);
+                    if (!is_array($prompts) || count($prompts) != count($group['param'])) {
+                        $this->outputData('postinstall', 'Error: post-install script did not ' .
+                            'return proper post-processed prompts');
+                        $prompts = $group['param'];
+                    } else {
+                        foreach ($prompts as $i => $var) {
+                            if (!is_array($var) || !isset($var['prompt']) ||
+                                  !isset($var['name']) ||
+                                  ($var['name'] != $group['param'][$i]['name']) ||
+                                  ($var['type'] != $group['param'][$i]['type'])
+                            ) {
+                                $this->outputData('postinstall', 'Error: post-install script ' .
+                                    'modified the variables or prompts, severe security risk. ' .
+                                    'Will instead use the defaults from the package.xml');
+                                $prompts = $group['param'];
                             }
                         }
-                        $answers = $this->confirmDialog($prompts);
-                    } else {
-                        $answers = $this->confirmDialog($group['param']);
-                    }
-                }
-                if ((isset($answers) && $answers) || !isset($group['param'])) {
-                    if (!isset($answers)) {
-                        $answers = array();
-                    }
-                    array_unshift($completedPhases, $group['id']);
-                    if (!$script->run($answers, $group['id'])) {
-                        $script->run($completedPhases, '_undoOnError');
-                        return;
                     }
+
+                    $answers = $this->confirmDialog($prompts);
                 } else {
+                    $answers = $this->confirmDialog($group['param']);
+                }
+            }
+
+            if ((isset($answers) && $answers) || !isset($group['param'])) {
+                if (!isset($answers)) {
+                    $answers = array();
+                }
+
+                array_unshift($completedPhases, $group['id']);
+                if (!$script->run($answers, $group['id'])) {
                     $script->run($completedPhases, '_undoOnError');
                     return;
                 }
+            } else {
+                $script->run($completedPhases, '_undoOnError');
+                return;
             }
         }
     }
@@ -17611,17 +18197,13 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
      */
     function confirmDialog($params)
     {
-        $answers = array();
-        $prompts = $types = array();
+        $answers = $prompts = $types = array();
         foreach ($params as $param) {
             $prompts[$param['name']] = $param['prompt'];
-            $types[$param['name']] = $param['type'];
-            if (isset($param['default'])) {
-                $answers[$param['name']] = $param['default'];
-            } else {
-                $answers[$param['name']] = '';
-            }
+            $types[$param['name']]   = $param['type'];
+            $answers[$param['name']] = isset($param['default']) ? $param['default'] : '';
         }
+
         $tried = false;
         do {
             if ($tried) {
@@ -17633,100 +18215,89 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $i++;
                 }
             }
+
             $answers = $this->userDialog('', $prompts, $types, $answers);
-            $tried = true;
+            $tried   = true;
         } while (is_array($answers) && count(array_filter($answers)) != count($prompts));
+
         return $answers;
     }
-    // {{{ userDialog(prompt, [type], [default])
 
-    function userDialog($command, $prompts, $types = array(), $defaults = array(),
-                        $screensize = 20)
+    function userDialog($command, $prompts, $types = array(), $defaults = array(), $screensize = 20)
     {
         if (!is_array($prompts)) {
             return array();
         }
+
         $testprompts = array_keys($prompts);
-        $result = $defaults;
-        if (!defined('STDIN')) {
-            $fp = fopen('php://stdin', 'r');
-        } else {
-            $fp = STDIN;
-        }
+        $result      = $defaults;
+
         reset($prompts);
-        if (count($prompts) == 1 && $types[key($prompts)] == 'yesno') {
+        if (count($prompts) === 1) {
             foreach ($prompts as $key => $prompt) {
-                $type = $types[$key];
+                $type    = $types[$key];
                 $default = @$defaults[$key];
                 print "$prompt ";
                 if ($default) {
                     print "[$default] ";
                 }
                 print ": ";
-                if (version_compare(phpversion(), '5.0.0', '<')) {
-                    $line = fgets($fp, 2048);
-                } else {
-                    if (!defined('STDIN')) {
-                        define('STDIN', fopen('php://stdin', 'r'));
-                    }
-                    $line = fgets(STDIN, 2048);
-                }
-                if ($default && trim($line) == "") {
-                    $result[$key] = $default;
-                } else {
-                    $result[$key] = trim($line);
-                }
+
+                $line         = fgets(STDIN, 2048);
+                $result[$key] =  ($default && trim($line) == '') ? $default : trim($line);
             }
+
             return $result;
         }
+
+        $first_run = true;
         while (true) {
             $descLength = max(array_map('strlen', $prompts));
             $descFormat = "%-{$descLength}s";
-            $last = count($prompts);
+            $last       = count($prompts);
 
             $i = 0;
             foreach ($prompts as $n => $var) {
-                printf("%2d. $descFormat : %s\n", ++$i, $prompts[$n], isset($result[$n]) ?
-                    $result[$n] : null);
+                $res = isset($result[$n]) ? $result[$n] : null;
+                printf("%2d. $descFormat : %s\n", ++$i, $prompts[$n], $res);
             }
-
             print "\n1-$last, 'all', 'abort', or Enter to continue: ";
-            $tmp = trim(fgets($fp, 1024));
+
+            $tmp = trim(fgets(STDIN, 1024));
             if (empty($tmp)) {
                 break;
             }
+
             if ($tmp == 'abort') {
                 return false;
             }
+
             if (isset($testprompts[(int)$tmp - 1])) {
-                $var = $testprompts[(int)$tmp - 1];
-                $desc = $prompts[$var];
+                $var     = $testprompts[(int)$tmp - 1];
+                $desc    = $prompts[$var];
                 $current = @$result[$var];
                 print "$desc [$current] : ";
-                $tmp = trim(fgets($fp, 1024));
-                if (trim($tmp) !== '') {
-                    $result[$var] = trim($tmp);
+                $tmp = trim(fgets(STDIN, 1024));
+                if ($tmp !== '') {
+                    $result[$var] = $tmp;
                 }
             } elseif ($tmp == 'all') {
                 foreach ($prompts as $var => $desc) {
                     $current = $result[$var];
                     print "$desc [$current] : ";
-                    $tmp = trim(fgets($fp, 1024));
+                    $tmp = trim(fgets(STDIN, 1024));
                     if (trim($tmp) !== '') {
                         $result[$var] = trim($tmp);
                     }
                 }
             }
+
+            $first_run = false;
         }
-        if (!defined('STDIN')) {
-            fclose($fp);
-        }
+
         return $result;
     }
 
-    // }}}
-    // {{{ userConfirm(prompt, [default])
-
     function userConfirm($prompt, $default = 'yes')
     {
         trigger_error("PEAR_Frontend_CLI::userConfirm not yet converted", E_USER_ERROR);
@@ -17752,48 +18323,200 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
         return false;
     }
 
-    // }}}
-    // {{{ startTable([params])
+    function outputData($data, $command = '_default')
+    {
+        switch ($command) {
+            case 'channel-info':
+                foreach ($data as $type => $section) {
+                    if ($type == 'main') {
+                        $section['data'] = array_values($section['data']);
+                    }
+
+                    $this->outputData($section);
+                }
+                break;
+            case 'install':
+            case 'upgrade':
+            case 'upgrade-all':
+                if (isset($data['release_warnings'])) {
+                    $this->_displayLine('');
+                    $this->_startTable(array(
+                        'border' => false,
+                        'caption' => 'Release Warnings'
+                    ));
+                    $this->_tableRow(array($data['release_warnings']), null, array(1 => array('wrap' => 55)));
+                    $this->_endTable();
+                    $this->_displayLine('');
+                }
+
+                $this->_displayLine($data['data']);
+                break;
+            case 'search':
+                $this->_startTable($data);
+                if (isset($data['headline']) && is_array($data['headline'])) {
+                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
+                }
+
+                foreach($data['data'] as $category) {
+                    foreach($category as $pkg) {
+                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    }
+                }
+
+                $this->_endTable();
+                break;
+            case 'list-all':
+                if (!isset($data['data'])) {
+                      $this->_displayLine('No packages in channel');
+                      break;
+                }
+
+                $this->_startTable($data);
+                if (isset($data['headline']) && is_array($data['headline'])) {
+                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
+                }
+
+                foreach($data['data'] as $category) {
+                    foreach($category as $pkg) {
+                        unset($pkg[4], $pkg[5]);
+                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    }
+                }
+
+                $this->_endTable();
+                break;
+            case 'config-show':
+                $data['border'] = false;
+                $opts = array(
+                    0 => array('wrap' => 30),
+                    1 => array('wrap' => 20),
+                    2 => array('wrap' => 35)
+                );
+
+                $this->_startTable($data);
+                if (isset($data['headline']) && is_array($data['headline'])) {
+                    $this->_tableRow($data['headline'], array('bold' => true), $opts);
+                }
+
+                foreach ($data['data'] as $group) {
+                    foreach ($group as $value) {
+                        if ($value[2] == '') {
+                            $value[2] = "<not set>";
+                        }
+
+                        $this->_tableRow($value, null, $opts);
+                    }
+                }
+
+                $this->_endTable();
+                break;
+            case 'remote-info':
+                $d = $data;
+                $data = array(
+                    'caption' => 'Package details:',
+                    'border'  => false,
+                    'data'    => array(
+                        array("Latest",      $data['stable']),
+                        array("Installed",   $data['installed']),
+                        array("Package",     $data['name']),
+                        array("License",     $data['license']),
+                        array("Category",    $data['category']),
+                        array("Summary",     $data['summary']),
+                        array("Description", $data['description']),
+                    ),
+                );
+
+                if (isset($d['deprecated']) && $d['deprecated']) {
+                    $conf = &PEAR_Config::singleton();
+                    $reg = $conf->getRegistry();
+                    $name = $reg->parsedPackageNameToString($d['deprecated'], true);
+                    $data['data'][] = array('Deprecated! use', $name);
+                }
+            default: {
+                if (is_array($data)) {
+                    $this->_startTable($data);
+                    $count = count($data['data'][0]);
+                    if ($count == 2) {
+                        $opts = array(0 => array('wrap' => 25),
+                                      1 => array('wrap' => 48)
+                        );
+                    } elseif ($count == 3) {
+                        $opts = array(0 => array('wrap' => 30),
+                                      1 => array('wrap' => 20),
+                                      2 => array('wrap' => 35)
+                        );
+                    } else {
+                        $opts = null;
+                    }
+                    if (isset($data['headline']) && is_array($data['headline'])) {
+                        $this->_tableRow($data['headline'],
+                                         array('bold' => true),
+                                         $opts);
+                    }
+
+                    foreach($data['data'] as $row) {
+                        $this->_tableRow($row, null, $opts);
+                    }
+                    $this->_endTable();
+                } else {
+                    $this->_displayLine($data);
+                }
+            }
+        }
+    }
 
-    function startTable($params = array())
+    function log($text, $append_crlf = true)
     {
-        trigger_error("PEAR_Frontend_CLI::startTable deprecated", E_USER_ERROR);
+        if ($append_crlf) {
+            return $this->_displayLine($text);
+        }
+
+        return $this->_display($text);
     }
 
-    function _startTable($params = array())
+    function bold($text)
     {
-        $params['table_data'] = array();
-        $params['widest'] = array();  // indexed by column
-        $params['highest'] = array(); // indexed by row
-        $params['ncols'] = 0;
-        $this->params = $params;
+        if (empty($this->term['bold'])) {
+            return strtoupper($text);
+        }
+
+        return $this->term['bold'] . $text . $this->term['normal'];
     }
 
-    // }}}
-    // {{{ tableRow(columns, [rowparams], [colparams])
+    function _displayHeading($title)
+    {
+        print $this->lp.$this->bold($title)."\n";
+        print $this->lp.str_repeat("=", strlen($title))."\n";
+    }
 
-    function tableRow($columns, $rowparams = array(), $colparams = array())
+    function _startTable($params = array())
     {
-        trigger_error("PEAR_Frontend_CLI::tableRow deprecated", E_USER_ERROR);
+        $params['table_data'] = array();
+        $params['widest']     = array();  // indexed by column
+        $params['highest']    = array(); // indexed by row
+        $params['ncols']      = 0;
+        $this->params         = $params;
     }
 
     function _tableRow($columns, $rowparams = array(), $colparams = array())
     {
         $highest = 1;
-        for ($i = 0; $i < sizeof($columns); $i++) {
+        for ($i = 0; $i < count($columns); $i++) {
             $col = &$columns[$i];
             if (isset($colparams[$i]) && !empty($colparams[$i]['wrap'])) {
-                $col = wordwrap($col, $colparams[$i]['wrap'], "\n", 0);
+                $col = wordwrap($col, $colparams[$i]['wrap']);
             }
+
             if (strpos($col, "\n") !== false) {
                 $multiline = explode("\n", $col);
                 $w = 0;
                 foreach ($multiline as $n => $line) {
-                    if (strlen($line) > $w) {
-                        $w = strlen($line);
+                    $len = strlen($line);
+                    if ($len > $w) {
+                        $w = $len;
                     }
                 }
-                $lines = sizeof($multiline);
+                $lines = count($multiline);
             } else {
                 $w = strlen($col);
             }
@@ -17805,6 +18528,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
             } else {
                 $this->params['widest'][$i] = $w;
             }
+
             $tmp = count_chars($columns[$i], 1);
             // handle unix, mac and windows formats
             $lines = (isset($tmp[10]) ? $tmp[10] : (isset($tmp[13]) ? $tmp[13] : 0)) + 1;
@@ -17812,35 +18536,31 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                 $highest = $lines;
             }
         }
-        if (sizeof($columns) > $this->params['ncols']) {
-            $this->params['ncols'] = sizeof($columns);
+
+        if (count($columns) > $this->params['ncols']) {
+            $this->params['ncols'] = count($columns);
         }
+
         $new_row = array(
-            'data' => $columns,
-            'height' => $highest,
+            'data'      => $columns,
+            'height'    => $highest,
             'rowparams' => $rowparams,
             'colparams' => $colparams,
-            );
+        );
         $this->params['table_data'][] = $new_row;
     }
 
-    // }}}
-    // {{{ endTable()
-
-    function endTable()
-    {
-        trigger_error("PEAR_Frontend_CLI::endTable deprecated", E_USER_ERROR);
-    }
-
     function _endTable()
     {
         extract($this->params);
         if (!empty($caption)) {
             $this->_displayHeading($caption);
         }
-        if (count($table_data) == 0) {
+
+        if (count($table_data) === 0) {
             return;
         }
+
         if (!isset($width)) {
             $width = $widest;
         } else {
@@ -17850,56 +18570,63 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                 }
             }
         }
+
         $border = false;
         if (empty($border)) {
-            $cellstart = '';
-            $cellend = ' ';
-            $rowend = '';
-            $padrowend = false;
+            $cellstart  = '';
+            $cellend    = ' ';
+            $rowend     = '';
+            $padrowend  = false;
             $borderline = '';
         } else {
-            $cellstart = '| ';
-            $cellend = ' ';
-            $rowend = '|';
-            $padrowend = true;
+            $cellstart  = '| ';
+            $cellend    = ' ';
+            $rowend     = '|';
+            $padrowend  = true;
             $borderline = '+';
             foreach ($width as $w) {
                 $borderline .= str_repeat('-', $w + strlen($cellstart) + strlen($cellend) - 1);
                 $borderline .= '+';
             }
         }
+
         if ($borderline) {
             $this->_displayLine($borderline);
         }
-        for ($i = 0; $i < sizeof($table_data); $i++) {
+
+        for ($i = 0; $i < count($table_data); $i++) {
             extract($table_data[$i]);
             if (!is_array($rowparams)) {
                 $rowparams = array();
             }
+
             if (!is_array($colparams)) {
                 $colparams = array();
             }
+
             $rowlines = array();
             if ($height > 1) {
-                for ($c = 0; $c < sizeof($data); $c++) {
+                for ($c = 0; $c < count($data); $c++) {
                     $rowlines[$c] = preg_split('/(\r?\n|\r)/', $data[$c]);
-                    if (sizeof($rowlines[$c]) < $height) {
+                    if (count($rowlines[$c]) < $height) {
                         $rowlines[$c] = array_pad($rowlines[$c], $height, '');
                     }
                 }
             } else {
-                for ($c = 0; $c < sizeof($data); $c++) {
+                for ($c = 0; $c < count($data); $c++) {
                     $rowlines[$c] = array($data[$c]);
                 }
             }
+
             for ($r = 0; $r < $height; $r++) {
                 $rowtext = '';
-                for ($c = 0; $c < sizeof($data); $c++) {
+                for ($c = 0; $c < count($data); $c++) {
                     if (isset($colparams[$c])) {
                         $attribs = array_merge($rowparams, $colparams);
                     } else {
                         $attribs = $rowparams;
                     }
+
                     $w = isset($width[$c]) ? $width[$c] : 0;
                     //$cell = $data[$c];
                     $cell = $rowlines[$c][$r];
@@ -17907,9 +18634,11 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     if ($l > $w) {
                         $cell = substr($cell, 0, $w);
                     }
+
                     if (isset($attribs['bold'])) {
                         $cell = $this->bold($cell);
                     }
+
                     if ($l < $w) {
                         // not using str_pad here because we may
                         // add bold escape characters to $cell
@@ -17918,199 +18647,42 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
 
                     $rowtext .= $cellstart . $cell . $cellend;
                 }
+
                 if (!$border) {
                     $rowtext = rtrim($rowtext);
                 }
+
                 $rowtext .= $rowend;
                 $this->_displayLine($rowtext);
             }
         }
+
         if ($borderline) {
             $this->_displayLine($borderline);
         }
     }
 
-    // }}}
-    // {{{ outputData()
-
-    function outputData($data, $command = '_default')
-    {
-        switch ($command) {
-            case 'channel-info':
-                foreach ($data as $type => $section) {
-                    if ($type == 'main') {
-                        $section['data'] = array_values($section['data']);
-                    }
-                    $this->outputData($section);
-                }
-                break;
-            case 'install':
-            case 'upgrade':
-            case 'upgrade-all':
-                if (isset($data['release_warnings'])) {
-                    $this->_displayLine('');
-                    $this->_startTable(array(
-                        'border' => false,
-                        'caption' => 'Release Warnings'
-                        ));
-                    $this->_tableRow(array($data['release_warnings']), null, array(1 => array('wrap' => 55)));
-                    $this->_endTable();
-                    $this->_displayLine('');
-                }
-                $this->_displayLine($data['data']);
-                break;
-            case 'search':
-                $this->_startTable($data);
-                if (isset($data['headline']) && is_array($data['headline'])) {
-                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
-                }
-
-                foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
-                    }
-                };
-                $this->_endTable();
-                break;
-            case 'list-all':
-                if (!isset($data['data'])) {
-                      $this->_displayLine('No packages in channel');
-                      break;
-                }
-                $this->_startTable($data);
-                if (isset($data['headline']) && is_array($data['headline'])) {
-                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
-                }
-
-                foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        unset($pkg[4]);
-                        unset($pkg[5]);
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
-                    }
-                };
-                $this->_endTable();
-                break;
-            case 'config-show':
-                $data['border'] = false;
-                $opts = array(0 => array('wrap' => 30),
-                              1 => array('wrap' => 20),
-                              2 => array('wrap' => 35));
-                $this->_startTable($data);
-                if (isset($data['headline']) && is_array($data['headline'])) {
-                    $this->_tableRow($data['headline'],
-                                     array('bold' => true),
-                                     $opts);
-                }
-                foreach($data['data'] as $group) {
-                    foreach($group as $value) {
-                        if ($value[2] == '') {
-                            $value[2] = "<not set>";
-                        }
-                        $this->_tableRow($value, null, $opts);
-                    }
-                }
-                $this->_endTable();
-                break;
-            case 'remote-info':
-                $d = $data;
-                $data = array(
-                    'caption' => 'Package details:',
-                    'border' => false,
-                    'data' => array(
-                        array("Latest",    $data['stable']),
-                        array("Installed", $data['installed']),
-                        array("Package",   $data['name']),
-                        array("License",   $data['license']),
-                        array("Category",  $data['category']),
-                        array("Summary",   $data['summary']),
-                        array("Description", $data['description']),
-                        ),
-                    );
-                    if (isset($d['deprecated']) && $d['deprecated']) {
-                        $conf = &PEAR_Config::singleton();
-                        $reg = $conf->getRegistry();
-                        $name = $reg->parsedPackageNameToString($d['deprecated'], true);
-                        $data['data'][] = array('Deprecated! use', $name);
-                    }
-            default: {
-                if (is_array($data)) {
-                    $this->_startTable($data);
-                    $count = count($data['data'][0]);
-                    if ($count == 2) {
-                        $opts = array(0 => array('wrap' => 25),
-                                      1 => array('wrap' => 48)
-                        );
-                    } elseif ($count == 3) {
-                        $opts = array(0 => array('wrap' => 30),
-                                      1 => array('wrap' => 20),
-                                      2 => array('wrap' => 35)
-                        );
-                    } else {
-                        $opts = null;
-                    }
-                    if (isset($data['headline']) && is_array($data['headline'])) {
-                        $this->_tableRow($data['headline'],
-                                         array('bold' => true),
-                                         $opts);
-                    }
-                    foreach($data['data'] as $row) {
-                        $this->_tableRow($row, null, $opts);
-                    }
-                    $this->_endTable();
-                } else {
-                    $this->_displayLine($data);
-                }
-            }
-        }
-    }
-
-    // }}}
-    // {{{ log(text)
-
-
-    function log($text, $append_crlf = true)
+    function _displayLine($text)
     {
-        if ($append_crlf) {
-            return $this->_displayLine($text);
-        }
-        return $this->_display($text);
+        print "$this->lp$text\n";
     }
 
-
-    // }}}
-    // {{{ bold($text)
-
-    function bold($text)
+    function _display($text)
     {
-        if (empty($this->term['bold'])) {
-            return strtoupper($text);
-        }
-        return $this->term['bold'] . $text . $this->term['normal'];
+        print $text;
     }
-
-    // }}}
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.7.2/PEAR/Installer/Role/Common.php                                                           100644    1750    1750        14765 11014312742  13050                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                           PEAR-1.8.0/PEAR/Installer/Role/Common.php                                                           100664     764     764        14236      100664  12661                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * Base class for all installation roles.
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.12 2006/10/19 23:55:32 cellog Exp $
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.13 2009/02/24 23:39:37 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -18124,8 +18696,8 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -18272,7 +18844,7 @@ class PEAR_Installer_Role_Common
         return $roleInfo['phpextension'];
     }
 }
-?>           PEAR-1.7.2/PEAR/Installer/Role/Cfg.xml                                                              100644    1750    1750          645 11014312742  12260                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+?>                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.8.0/PEAR/Installer/Role/Cfg.xml                                                              100777     764     764          645      100777  12112                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -18286,162 +18858,153 @@ class PEAR_Installer_Role_Common
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                           PEAR-1.7.2/PEAR/Installer/Role/Cfg.php                                                              100644    1750    1750        10612 11014312742  12302                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Cfg
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  2007-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Cfg.php,v 1.8 2008/05/14 21:26:30 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.7.0
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  2007-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.7.0
- */
-class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
-{
-    /**
-     * @var PEAR_Installer
-     */
-    var $installer;
-    /**
-     * the md5 of the original file
-     *
-     * @var unknown_type
-     */
-    var $md5 = null;
-    /**
-     * Do any unusual setup here
-     * @param PEAR_Installer
-     * @param PEAR_PackageFile_v2
-     * @param array file attributes
-     * @param string file name
-     */
-    function setup(&$installer, $pkg, $atts, $file)
-    {
-        $this->installer = &$installer;
-        $reg = &$this->installer->config->getRegistry();
-        $package = $reg->getPackage($pkg->getPackage(), $pkg->getChannel());
-        if ($package) {
-            $filelist = $package->getFilelist();
-            if (isset($filelist[$file]) && isset($filelist[$file]['md5sum'])) {
-                $this->md5 = $filelist[$file]['md5sum'];
-            }
-        }
-    }
-
-    function processInstallation($pkg, $atts, $file, $tmp_path, $layer = null)
-    {
-        $test = parent::processInstallation($pkg, $atts, $file, $tmp_path, $layer);
-        if (@file_exists($test[2]) && @file_exists($test[3])) {
-            $md5 = md5_file($test[2]);
-            // configuration has already been installed, check for mods
-            if ($md5 !== $this->md5 && $md5 !== md5_file($test[3])) {
-                // configuration has been modified, so save our version as
-                // configfile-version
-                $old = $test[2];
-                $test[2] .= '.new-' . $pkg->getVersion();
-                // backup original and re-install it
-                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-                $tmpcfg = $this->config->get('temp_dir');
-                $newloc = System::mkdir(array('-p', $tmpcfg));
-                if (!$newloc) {
-                    // try temp_dir
-                    $newloc = System::mktemp(array('-d'));
-                    if (!$newloc || PEAR::isError($newloc)) {
-                        PEAR::popErrorHandling();
-                        return PEAR::raiseError('Could not save existing configuration file '.
-                            $old . ', unable to install.  Please set temp_dir ' .
-                            'configuration variable to a writeable location and try again');
-                    }
-                } else {
-                    $newloc = $tmpcfg;
-                }
-                $temp_file = $newloc . DIRECTORY_SEPARATOR . uniqid('savefile');
-                if (!@copy($old, $temp_file)) {
-                    PEAR::popErrorHandling();
-                    return PEAR::raiseError('Could not save existing configuration file '.
-                        $old . ', unable to install.  Please set temp_dir ' .
-                        'configuration variable to a writeable location and try again');
-                }
-                PEAR::popErrorHandling();
-                $this->installer->log(0, "WARNING: configuration file $old is being installed as $test[2], you should manually merge in changes to the existing configuration file");
-                $this->installer->addFileOperation('rename', array($temp_file, $old, false));
-                $this->installer->addFileOperation('delete', array($temp_file));
-            }
-        }
-        return $test;
-    }
-}
-?>
-                                                                                                                      PEAR-1.7.2/PEAR/Installer/Role/Data.xml                                                             100644    1750    1750          622 11014312742  12425                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
- <releasetypes>php</releasetypes>
- <releasetypes>extsrc</releasetypes>
- <releasetypes>extbin</releasetypes>
- <releasetypes>zendextsrc</releasetypes>
- <releasetypes>zendextbin</releasetypes>
- <installable>1</installable>
- <locationconfig>data_dir</locationconfig>
- <honorsbaseinstall />
- <unusualbaseinstall />
- <phpfile />
- <executable />
- <phpextension />
- <config_vars />
-</role>                                                                                                              PEAR-1.7.2/PEAR/Installer/Role/Data.php                                                             100644    1750    1750         2260 11014312742  12434                                                                                                                                                                                                                                                                                                                                                                      <?php
+</role>                                                                                           PEAR-1.8.0/PEAR/Installer/Role/Cfg.php                                                              100664     764     764         7704      100664  12112                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
- * PEAR_Installer_Role_Data
+ * PEAR_Installer_Role_Cfg
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Data.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  2007-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Cfg.php,v 1.9 2009/02/24 23:39:37 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
+ * @since      File available since Release 1.7.0
  */
 
 /**
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  2007-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
+ * @since      Class available since Release 1.7.0
  */
-class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                                PEAR-1.7.2/PEAR/Installer/Role/Doc.xml                                                              100644    1750    1750          621 11014312742  12260                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
+{
+    /**
+     * @var PEAR_Installer
+     */
+    var $installer;
+
+    /**
+     * the md5 of the original file
+     *
+     * @var unknown_type
+     */
+    var $md5 = null;
+
+    /**
+     * Do any unusual setup here
+     * @param PEAR_Installer
+     * @param PEAR_PackageFile_v2
+     * @param array file attributes
+     * @param string file name
+     */
+    function setup(&$installer, $pkg, $atts, $file)
+    {
+        $this->installer = &$installer;
+        $reg = &$this->installer->config->getRegistry();
+        $package = $reg->getPackage($pkg->getPackage(), $pkg->getChannel());
+        if ($package) {
+            $filelist = $package->getFilelist();
+            if (isset($filelist[$file]) && isset($filelist[$file]['md5sum'])) {
+                $this->md5 = $filelist[$file]['md5sum'];
+            }
+        }
+    }
+
+    function processInstallation($pkg, $atts, $file, $tmp_path, $layer = null)
+    {
+        $test = parent::processInstallation($pkg, $atts, $file, $tmp_path, $layer);
+        if (@file_exists($test[2]) && @file_exists($test[3])) {
+            $md5 = md5_file($test[2]);
+            // configuration has already been installed, check for mods
+            if ($md5 !== $this->md5 && $md5 !== md5_file($test[3])) {
+                // configuration has been modified, so save our version as
+                // configfile-version
+                $old = $test[2];
+                $test[2] .= '.new-' . $pkg->getVersion();
+                // backup original and re-install it
+                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                $tmpcfg = $this->config->get('temp_dir');
+                $newloc = System::mkdir(array('-p', $tmpcfg));
+                if (!$newloc) {
+                    // try temp_dir
+                    $newloc = System::mktemp(array('-d'));
+                    if (!$newloc || PEAR::isError($newloc)) {
+                        PEAR::popErrorHandling();
+                        return PEAR::raiseError('Could not save existing configuration file '.
+                            $old . ', unable to install.  Please set temp_dir ' .
+                            'configuration variable to a writeable location and try again');
+                    }
+                } else {
+                    $newloc = $tmpcfg;
+                }
+
+                $temp_file = $newloc . DIRECTORY_SEPARATOR . uniqid('savefile');
+                if (!@copy($old, $temp_file)) {
+                    PEAR::popErrorHandling();
+                    return PEAR::raiseError('Could not save existing configuration file '.
+                        $old . ', unable to install.  Please set temp_dir ' .
+                        'configuration variable to a writeable location and try again');
+                }
+
+                PEAR::popErrorHandling();
+                $this->installer->log(0, "WARNING: configuration file $old is being installed as $test[2], you should manually merge in changes to the existing configuration file");
+                $this->installer->addFileOperation('rename', array($temp_file, $old, false));
+                $this->installer->addFileOperation('delete', array($temp_file));
+            }
+        }
+
+        return $test;
+    }
+}                                                            PEAR-1.8.0/PEAR/Installer/Role/Data.xml                                                             100777     764     764          622      100777  12257                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <releasetypes>zendextsrc</releasetypes>
+ <releasetypes>zendextbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>data_dir</locationconfig>
+ <honorsbaseinstall />
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>                                                                                                              PEAR-1.8.0/PEAR/Installer/Role/Data.php                                                             100664     764     764         1560      100664  12256                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Data
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Data.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                                PEAR-1.8.0/PEAR/Installer/Role/Doc.xml                                                              100777     764     764          621      100777  12112                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -18455,40 +19018,34 @@ class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                                               PEAR-1.7.2/PEAR/Installer/Role/Doc.php                                                              100644    1750    1750         2255 11014312742  12274                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Doc
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Doc.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                                   PEAR-1.7.2/PEAR/Installer/Role/Ext.xml                                                              100644    1750    1750          502 11014312742  12311                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+</role>                                                                                                               PEAR-1.8.0/PEAR/Installer/Role/Doc.php                                                              100664     764     764         1555      100664  12116                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Doc
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Doc.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                                   PEAR-1.8.0/PEAR/Installer/Role/Ext.xml                                                              100777     764     764          502      100777  12143                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
  <releasetypes>extbin</releasetypes>
  <releasetypes>zendextbin</releasetypes>
  <installable>1</installable>
@@ -18499,40 +19056,34 @@ class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension>1</phpextension>
  <config_vars />
-</role>                                                                                                                                                                                              PEAR-1.7.2/PEAR/Installer/Role/Ext.php                                                              100644    1750    1750         2255 11014312742  12327                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Ext
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Ext.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                                   PEAR-1.7.2/PEAR/Installer/Role/Php.xml                                                              100644    1750    1750          655 11014312742  12311                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+</role>                                                                                                                                                                                              PEAR-1.8.0/PEAR/Installer/Role/Ext.php                                                              100664     764     764         1555      100664  12151                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Ext
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Ext.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                                   PEAR-1.8.0/PEAR/Installer/Role/Php.xml                                                              100777     764     764          655      100777  12143                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -18546,40 +19097,34 @@ class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                   PEAR-1.7.2/PEAR/Installer/Role/Php.php                                                              100644    1750    1750         2255 11014312742  12316                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Php
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Php.php,v 1.8 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                                   PEAR-1.7.2/PEAR/Installer/Role/Script.xml                                                           100644    1750    1750          660 11014312742  13022                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+</role>                                                                                   PEAR-1.8.0/PEAR/Installer/Role/Php.php                                                              100664     764     764         1555      100664  12140                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Php
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Php.php,v 1.9 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                                   PEAR-1.8.0/PEAR/Installer/Role/Script.xml                                                           100777     764     764          660      100777  12654                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -18593,90 +19138,78 @@ class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
  <executable>1</executable>
  <phpextension />
  <config_vars />
-</role>                                                                                PEAR-1.7.2/PEAR/Installer/Role/Script.php                                                           100644    1750    1750         2266 11014312742  13035                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Script
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Script.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                          PEAR-1.7.2/PEAR/Installer/Role/Src.xml                                                              100644    1750    1750          442 11014312742  12303                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
- <releasetypes>extsrc</releasetypes>
- <releasetypes>zendextsrc</releasetypes>
- <installable>1</installable>
- <locationconfig>temp_dir</locationconfig>
- <honorsbaseinstall />
- <unusualbaseinstall />
- <phpfile />
- <executable />
- <phpextension />
- <config_vars />
-</role>                                                                                                                                                                                                                              PEAR-1.7.2/PEAR/Installer/Role/Src.php                                                              100644    1750    1750         2422 11014312742  12312                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Src
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Src.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
-{
-    function setup(&$installer, $pkg, $atts, $file)
-    {
-        $installer->source_files++;
-    }
-}
-?>                                                                                                                                                                                                                                              PEAR-1.7.2/PEAR/Installer/Role/Test.xml                                                             100644    1750    1750          622 11014312742  12473                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+</role>                                                                                PEAR-1.8.0/PEAR/Installer/Role/Script.php                                                           100664     764     764         1566      100664  12657                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Script
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Script.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                          PEAR-1.8.0/PEAR/Installer/Role/Src.xml                                                              100777     764     764          455      100777  12141                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>zendextsrc</releasetypes>
+ <installable>1</installable>
+ <locationconfig>temp_dir</locationconfig>
+ <honorsbaseinstall />
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>                                                                                                                                                                                                                   PEAR-1.8.0/PEAR/Installer/Role/Src.php                                                              100664     764     764         1730      100664  12133                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Src
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Src.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
+{
+    function setup(&$installer, $pkg, $atts, $file)
+    {
+        $installer->source_files++;
+    }
+}
+?>                                        PEAR-1.8.0/PEAR/Installer/Role/Test.xml                                                             100777     764     764          622      100777  12325                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
  <releasetypes>extbin</releasetypes>
@@ -18690,357 +19223,361 @@ class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common
  <executable />
  <phpextension />
  <config_vars />
-</role>                                                                                                              PEAR-1.7.2/PEAR/Installer/Role/Test.php                                                             100644    1750    1750         2260 11014312742  12502                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Test
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Test.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                                PEAR-1.7.2/PEAR/Installer/Role/Www.xml                                                              100644    1750    1750          644 11014312742  12344                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
- <releasetypes>php</releasetypes>
- <releasetypes>extsrc</releasetypes>
- <releasetypes>extbin</releasetypes>
- <releasetypes>zendextsrc</releasetypes>
- <releasetypes>zendextbin</releasetypes>
- <installable>1</installable>
- <locationconfig>www_dir</locationconfig>
- <honorsbaseinstall>1</honorsbaseinstall>
- <unusualbaseinstall />
- <phpfile />
- <executable />
- <phpextension />
- <config_vars />
-</role>                                                                                            PEAR-1.7.2/PEAR/Installer/Role/Www.php                                                              100644    1750    1750         2251 11014312742  12347                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role_Www
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  2007-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Www.php,v 1.2 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.7.0
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  2007-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.7.0
- */
-class PEAR_Installer_Role_Www extends PEAR_Installer_Role_Common {}
-?>                                                                                                                                                                                                                                                                                                                                                       PEAR-1.7.2/PEAR/Installer/Role.php                                                                  100644    1750    1750        20173 11014312742  11606                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Installer_Role
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Role.php,v 1.20 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * base class for installer roles
- */
-require_once 'PEAR/Installer/Role/Common.php';
-require_once 'PEAR/XMLParser.php';
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role
-{
-    /**
-     * Set up any additional configuration variables that file roles require
-     *
-     * Never call this directly, it is called by the PEAR_Config constructor
-     * @param PEAR_Config
-     * @access private
-     * @static
-     */
-    function initializeConfig(&$config)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $class => $info) {
-            if (!$info['config_vars']) {
-                continue;
-            }
-            $config->_addConfigVars($class, $info['config_vars']);
-        }
-    }
-
-    /**
-     * @param PEAR_PackageFile_v2
-     * @param string role name
-     * @param PEAR_Config
-     * @return PEAR_Installer_Role_Common
-     * @static
-     */
-    function &factory($pkg, $role, &$config)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        if (!in_array($role, PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
-            $a = false;
-            return $a;
-        }
-        $a = 'PEAR_Installer_Role_' . ucfirst($role);
-        if (!class_exists($a)) {
-            require_once str_replace('_', '/', $a) . '.php';
-        }
-        $b = new $a($config);
-        return $b;
-    }
-
-    /**
-     * Get a list of file roles that are valid for the particular release type.
-     *
-     * For instance, src files serve no purpose in regular php releases.
-     * @param string
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getValidRoles($release, $clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret = array();
-        if ($clear) {
-            $ret = array();
-        }
-        if (isset($ret[$release])) {
-            return $ret[$release];
-        }
-        $ret[$release] = array();
-        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-            if (in_array($release, $okreleases['releasetypes'])) {
-                $ret[$release][] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-            }
-        }
-        return $ret[$release];
-    }
-
-    /**
-     * Get a list of roles that require their files to be installed
-     *
-     * Most roles must be installed, but src and package roles, for instance
-     * are pseudo-roles.  src files are compiled into a new extension.  Package
-     * roles are actually fully bundled releases of a package
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getInstallableRoles($clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret;
-        if ($clear) {
-            unset($ret);
-        }
-        if (!isset($ret)) {
-            $ret = array();
-            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-                if ($okreleases['installable']) {
-                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-                }
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * Return an array of roles that are affected by the baseinstalldir attribute
-     *
-     * Most roles ignore this attribute, and instead install directly into:
-     * PackageName/filepath
-     * so a tests file tests/file.phpt is installed into PackageName/tests/filepath.php
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getBaseinstallRoles($clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret;
-        if ($clear) {
-            unset($ret);
-        }
-        if (!isset($ret)) {
-            $ret = array();
-            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-                if ($okreleases['honorsbaseinstall']) {
-                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-                }
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * Return an array of file roles that should be analyzed for PHP content at package time,
-     * like the "php" role.
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getPhpRoles($clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret;
-        if ($clear) {
-            unset($ret);
-        }
-        if (!isset($ret)) {
-            $ret = array();
-            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-                if ($okreleases['phpfile']) {
-                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-                }
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * Scan through the Command directory looking for classes
-     * and see what commands they implement.
-     * @param string which directory to look for classes, defaults to
-     *               the Installer/Roles subdirectory of
-     *               the directory from where this file (__FILE__) is
-     *               included.
-     *
-     * @return bool TRUE on success, a PEAR error on failure
-     * @access public
-     * @static
-     */
-    function registerRoles($dir = null)
-    {
-        $GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
-        $parser = new PEAR_XMLParser;
-        if ($dir === null) {
-            $dir = dirname(__FILE__) . '/Role';
-        }
-        if (!file_exists($dir) || !is_dir($dir)) {
-            return PEAR::raiseError("registerRoles: opendir($dir) failed: does not exist/is not directory");
-        }
-        $dp = @opendir($dir);
-        if (empty($dp)) {
-            return PEAR::raiseError("registerRoles: opendir($dir) failed: $php_errmsg");
-        }
-        while ($entry = readdir($dp)) {
-            if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
-                continue;
-            }
-            $class = "PEAR_Installer_Role_".substr($entry, 0, -4);
-            // List of roles
-            if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
-                $file = "$dir/$entry";
-                $parser->parse(file_get_contents($file));
-                $data = $parser->getData();
-                if (!is_array($data['releasetypes'])) {
-                    $data['releasetypes'] = array($data['releasetypes']);
-                }
-                $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
-            }
-        }
-        closedir($dp);
-        ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
-        PEAR_Installer_Role::getBaseinstallRoles(true);
-        PEAR_Installer_Role::getInstallableRoles(true);
-        PEAR_Installer_Role::getPhpRoles(true);
-        PEAR_Installer_Role::getValidRoles('****', true);
-        return true;
-    }
-}
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.7.2/PEAR/PackageFile/Generator/v1.php                                                        100644    1750    1750       143124 11014312742  13401                                                                                                                                                                                                                                                                                                                                                                      <?php
+</role>                                                                                                              PEAR-1.8.0/PEAR/Installer/Role/Test.php                                                             100664     764     764         1560      100664  12324                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Test
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Test.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                                PEAR-1.8.0/PEAR/Installer/Role/Www.xml                                                              100777     764     764          662      100777  12176                                                                                                                                                                                                                                                                                                                                                                      <role version="1.0">
+ <releasetypes>php</releasetypes>
+ <releasetypes>extsrc</releasetypes>
+ <releasetypes>extbin</releasetypes>
+ <releasetypes>zendextsrc</releasetypes>
+ <releasetypes>zendextbin</releasetypes>
+ <installable>1</installable>
+ <locationconfig>www_dir</locationconfig>
+ <honorsbaseinstall>1</honorsbaseinstall>
+ <unusualbaseinstall />
+ <phpfile />
+ <executable />
+ <phpextension />
+ <config_vars />
+</role>                                                                              PEAR-1.8.0/PEAR/Installer/Role/Www.php                                                              100664     764     764         1551      100664  12171                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role_Www
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  2007-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Www.php,v 1.3 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.7.0
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  2007-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.7.0
+ */
+class PEAR_Installer_Role_Www extends PEAR_Installer_Role_Common {}
+?>                                                                                                                                                       PEAR-1.8.0/PEAR/Installer/Role.php                                                                  100664     764     764        20112      100664  11417                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Installer_Role
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Role.php,v 1.22 2009/04/10 19:42:49 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * base class for installer roles
+ */
+require_once 'PEAR/Installer/Role/Common.php';
+require_once 'PEAR/XMLParser.php';
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role
+{
+    /**
+     * Set up any additional configuration variables that file roles require
+     *
+     * Never call this directly, it is called by the PEAR_Config constructor
+     * @param PEAR_Config
+     * @access private
+     * @static
+     */
+    function initializeConfig(&$config)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $class => $info) {
+            if (!$info['config_vars']) {
+                continue;
+            }
+
+            $config->_addConfigVars($class, $info['config_vars']);
+        }
+    }
+
+    /**
+     * @param PEAR_PackageFile_v2
+     * @param string role name
+     * @param PEAR_Config
+     * @return PEAR_Installer_Role_Common
+     * @static
+     */
+    function &factory($pkg, $role, &$config)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        if (!in_array($role, PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
+            $a = false;
+            return $a;
+        }
+
+        $a = 'PEAR_Installer_Role_' . ucfirst($role);
+        if (!class_exists($a)) {
+            require_once str_replace('_', '/', $a) . '.php';
+        }
+
+        $b = new $a($config);
+        return $b;
+    }
+
+    /**
+     * Get a list of file roles that are valid for the particular release type.
+     *
+     * For instance, src files serve no purpose in regular php releases.
+     * @param string
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getValidRoles($release, $clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret = array();
+        if ($clear) {
+            $ret = array();
+        }
+
+        if (isset($ret[$release])) {
+            return $ret[$release];
+        }
+
+        $ret[$release] = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if (in_array($release, $okreleases['releasetypes'])) {
+                $ret[$release][] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret[$release];
+    }
+
+    /**
+     * Get a list of roles that require their files to be installed
+     *
+     * Most roles must be installed, but src and package roles, for instance
+     * are pseudo-roles.  src files are compiled into a new extension.  Package
+     * roles are actually fully bundled releases of a package
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getInstallableRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+
+        if (isset($ret)) {
+            return $ret;
+        }
+
+        $ret = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if ($okreleases['installable']) {
+                $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Return an array of roles that are affected by the baseinstalldir attribute
+     *
+     * Most roles ignore this attribute, and instead install directly into:
+     * PackageName/filepath
+     * so a tests file tests/file.phpt is installed into PackageName/tests/filepath.php
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getBaseinstallRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+
+        if (isset($ret)) {
+            return $ret;
+        }
+
+        $ret = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if ($okreleases['honorsbaseinstall']) {
+                $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Return an array of file roles that should be analyzed for PHP content at package time,
+     * like the "php" role.
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getPhpRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+
+        if (isset($ret)) {
+            return $ret;
+        }
+
+        $ret = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if ($okreleases['phpfile']) {
+                $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Scan through the Command directory looking for classes
+     * and see what commands they implement.
+     * @param string which directory to look for classes, defaults to
+     *               the Installer/Roles subdirectory of
+     *               the directory from where this file (__FILE__) is
+     *               included.
+     *
+     * @return bool TRUE on success, a PEAR error on failure
+     * @access public
+     * @static
+     */
+    function registerRoles($dir = null)
+    {
+        $GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
+        $parser = new PEAR_XMLParser;
+        if ($dir === null) {
+            $dir = dirname(__FILE__) . '/Role';
+        }
+
+        if (!file_exists($dir) || !is_dir($dir)) {
+            return PEAR::raiseError("registerRoles: opendir($dir) failed: does not exist/is not directory");
+        }
+
+        $dp = @opendir($dir);
+        if (empty($dp)) {
+            return PEAR::raiseError("registerRoles: opendir($dir) failed: $php_errmsg");
+        }
+
+        while ($entry = readdir($dp)) {
+            if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
+                continue;
+            }
+
+            $class = "PEAR_Installer_Role_".substr($entry, 0, -4);
+            // List of roles
+            if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
+                $file = "$dir/$entry";
+                $parser->parse(file_get_contents($file));
+                $data = $parser->getData();
+                if (!is_array($data['releasetypes'])) {
+                    $data['releasetypes'] = array($data['releasetypes']);
+                }
+
+                $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
+            }
+        }
+
+        closedir($dp);
+        ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
+        PEAR_Installer_Role::getBaseinstallRoles(true);
+        PEAR_Installer_Role::getInstallableRoles(true);
+        PEAR_Installer_Role::getPhpRoles(true);
+        PEAR_Installer_Role::getValidRoles('****', true);
+        return true;
+    }
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.8.0/PEAR/PackageFile/Generator/v1.php                                                        100664     764     764       142407      100664  13224                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * package.xml generation class, package.xml version 1.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v1.php,v 1.74 2008/01/03 20:26:37 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v1.php,v 1.76 2009/02/24 23:45:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -19058,9 +19595,9 @@ require_once 'PEAR/PackageFile/v2.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -19077,7 +19614,7 @@ class PEAR_PackageFile_Generator_v1
 
     function getPackagerVersion()
     {
-        return '1.7.2';
+        return '1.8.0';
     }
 
     /**
@@ -19231,7 +19768,7 @@ class PEAR_PackageFile_Generator_v1
             );
         $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
         $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
-        $ret .= "<package version=\"1.0\" packagerversion=\"1.7.2\">\n" .
+        $ret .= "<package version=\"1.0\" packagerversion=\"1.8.0\">\n" .
 " <name>$pkginfo[package]</name>";
         if (isset($pkginfo['extends'])) {
             $ret .= "\n<extends>$pkginfo[extends]</extends>";
@@ -19546,6 +20083,7 @@ class PEAR_PackageFile_Generator_v1
                 return $a;
             }
         }
+
         $arr = array(
             'attribs' => array(
                              'version' => '2.0',
@@ -19575,6 +20113,7 @@ class PEAR_PackageFile_Generator_v1
             );
             $arr['lead'][] = $new;
         }
+
         if (!isset($arr['lead'])) { // some people... you know?
             $arr['lead'] = array(
                 'name' => 'unknown',
@@ -19583,9 +20122,11 @@ class PEAR_PackageFile_Generator_v1
                 'active' => 'no',
             );
         }
+
         if (count($arr['lead']) == 1) {
             $arr['lead'] = $arr['lead'][0];
         }
+
         foreach ($maintainers as $maintainer) {
             if ($maintainer['role'] == 'lead') {
                 continue;
@@ -19598,15 +20139,19 @@ class PEAR_PackageFile_Generator_v1
             );
             $arr[$maintainer['role']][] = $new;
         }
+
         if (isset($arr['developer']) && count($arr['developer']) == 1) {
             $arr['developer'] = $arr['developer'][0];
         }
+
         if (isset($arr['contributor']) && count($arr['contributor']) == 1) {
             $arr['contributor'] = $arr['contributor'][0];
         }
+
         if (isset($arr['helper']) && count($arr['helper']) == 1) {
             $arr['helper'] = $arr['helper'][0];
         }
+
         $arr['date'] = $this->_packagefile->getDate();
         $arr['version'] =
             array(
@@ -19630,6 +20175,7 @@ class PEAR_PackageFile_Generator_v1
                 'gpl' => 'http://www.gnu.org/copyleft/gpl.html',
                 'apache' => 'http://www.opensource.org/licenses/apache2.0.php'
             );
+
         if (isset($licensemap[strtolower($this->_packagefile->getLicense())])) {
             $arr['license'] = array(
                 'attribs' => array('uri' =>
@@ -19640,6 +20186,7 @@ class PEAR_PackageFile_Generator_v1
             // don't use bogus uri
             $arr['license'] = $this->_packagefile->getLicense();
         }
+
         $arr['notes'] = $this->_packagefile->getNotes();
         $temp = array();
         $arr['contents'] = $this->_convertFilelist2_0($temp);
@@ -19650,6 +20197,7 @@ class PEAR_PackageFile_Generator_v1
             $arr['channel'] = 'pecl.php.net';
             $arr['providesextension'] = $arr['name']; // assumption
         }
+
         $arr[$release] = array();
         if ($this->_packagefile->getConfigureOptions()) {
             $arr[$release]['configureoption'] = $this->_packagefile->getConfigureOptions();
@@ -19660,11 +20208,13 @@ class PEAR_PackageFile_Generator_v1
                 $arr[$release]['configureoption'] = $arr[$release]['configureoption'][0];
             }
         }
+
         $this->_convertRelease2_0($arr[$release], $temp);
         if ($release == 'extsrcrelease' && count($arr[$release]) > 1) {
             // multiple extsrcrelease tags added in PEAR 1.4.1
             $arr['dependencies']['required']['pearinstaller']['min'] = '1.4.1';
         }
+
         if ($cl = $this->_packagefile->getChangelog()) {
             foreach ($cl as $release) {
                 $rel = array();
@@ -19676,6 +20226,7 @@ class PEAR_PackageFile_Generator_v1
                 if (!isset($release['release_state'])) {
                     $release['release_state'] = 'stable';
                 }
+
                 $rel['stability'] =
                     array(
                         'release' => $release['release_state'],
@@ -19686,6 +20237,7 @@ class PEAR_PackageFile_Generator_v1
                 } else {
                     $rel['date'] = date('Y-m-d');
                 }
+
                 if (isset($release['release_license'])) {
                     if (isset($licensemap[strtolower($release['release_license'])])) {
                         $uri = $licensemap[strtolower($release['release_license'])];
@@ -19699,18 +20251,22 @@ class PEAR_PackageFile_Generator_v1
                 } else {
                     $rel['license'] = $arr['license'];
                 }
+
                 if (!isset($release['release_notes'])) {
                     $release['release_notes'] = 'no release notes';
                 }
+
                 $rel['notes'] = $release['release_notes'];
                 $arr['changelog']['release'][] = $rel;
             }
         }
+
         $ret = new $class;
         $ret->setConfig($this->_packagefile->_config);
         if (isset($this->_packagefile->_logger) && is_object($this->_packagefile->_logger)) {
             $ret->setLogger($this->_packagefile->_logger);
         }
+
         $ret->fromArray($arr);
         return $ret;
     }
@@ -19856,9 +20412,9 @@ class PEAR_PackageFile_Generator_v1
     /**
      * Post-process special files with install-as/platform attributes and
      * make the release tag.
-     * 
+     *
      * This complex method follows this work-flow to create the release tags:
-     * 
+     *
      * <pre>
      * - if any install-as/platform exist, create a generic release and fill it with
      *   o <install as=..> tags for <file name=... install-as=...>
@@ -19874,10 +20430,10 @@ class PEAR_PackageFile_Generator_v1
      *   o <ignore> tags for <file name=... platform=other platform install-as=..>
      *   o <ignore> tags for <file name=... platform=!this platform install-as=..>
      * </pre>
-     * 
+     *
      * It does this by accessing the $package parameter, which contains an array with
      * indices:
-     * 
+     *
      *  - platform: mapping of file => OS the file should be installed on
      *  - install-as: mapping of file => installed name
      *  - osmap: mapping of OS => list of files that should be installed
@@ -19891,7 +20447,7 @@ class PEAR_PackageFile_Generator_v1
      */
     function _convertRelease2_0(&$release, $package)
     {
-        //- if any install-as/platform exist, create a generic release and fill it with 
+        //- if any install-as/platform exist, create a generic release and fill it with
         if (count($package['platform']) || count($package['install-as'])) {
             $generic = array();
             $genericIgnore = array();
@@ -20294,25 +20850,19 @@ class PEAR_PackageFile_Generator_v1
         return $ret;
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                            PEAR-1.7.2/PEAR/PackageFile/Generator/v2.php                                                        100644    1750    1750       166634 11014312742  13415                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                         PEAR-1.8.0/PEAR/PackageFile/Generator/v2.php                                                        100664     764     764       101226      100664  13217                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * package.xml generation class, package.xml version 2.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stephan Schmidt (original XML_Serializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v2.php,v 1.39 2008/05/13 05:29:24 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v2.php,v 1.51 2009/03/27 17:11:18 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -20320,6 +20870,8 @@ class PEAR_PackageFile_Generator_v1
  * file/dir manipulation routines
  */
 require_once 'System.php';
+require_once 'XML/Util.php';
+
 /**
  * This class converts a PEAR_PackageFile_v2 object into any output format.
  *
@@ -20329,9 +20881,9 @@ require_once 'System.php';
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stephan Schmidt (original XML_Serializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -20343,37 +20895,37 @@ class PEAR_PackageFile_Generator_v2
     * @var array $_defaultOptions
     */
     var $_defaultOptions = array(
-                         'indent'             => ' ',                    // string used for indentation
-                         'linebreak'          => "\n",                  // string used for newlines
-                         'typeHints'          => false,                 // automatically add type hin attributes
-                         'addDecl'            => true,                 // add an XML declaration
-                         'defaultTagName'     => 'XML_Serializer_Tag',  // tag used for indexed arrays or invalid names
-                         'classAsTagName'     => false,                 // use classname for objects in indexed arrays
-                         'keyAttribute'       => '_originalKey',        // attribute where original key is stored
-                         'typeAttribute'      => '_type',               // attribute for type (only if typeHints => true)
-                         'classAttribute'     => '_class',              // attribute for class of objects (only if typeHints => true)
-                         'scalarAsAttributes' => false,                 // scalar values (strings, ints,..) will be serialized as attribute
-                         'prependAttributes'  => '',                    // prepend string for attributes
-                         'indentAttributes'   => false,                 // indent the attributes, if set to '_auto', it will indent attributes so they all start at the same column
-                         'mode'               => 'simplexml',             // use 'simplexml' to use parent name as tagname if transforming an indexed array
-                         'addDoctype'         => false,                 // add a doctype declaration
-                         'doctype'            => null,                  // supply a string or an array with id and uri ({@see PEAR_PackageFile_Generator_v2_PEAR_PackageFile_Generator_v2_XML_Util::getDoctypeDeclaration()}
-                         'rootName'           => 'package',                  // name of the root tag
-                         'rootAttributes'     => array(
-                             'version' => '2.0',
-                             'xmlns' => 'http://pear.php.net/dtd/package-2.0',
-                             'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
-                             'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
-                             'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0
+        'indent'             => ' ',                    // string used for indentation
+        'linebreak'          => "\n",                  // string used for newlines
+        'typeHints'          => false,                 // automatically add type hin attributes
+        'addDecl'            => true,                 // add an XML declaration
+        'defaultTagName'     => 'XML_Serializer_Tag',  // tag used for indexed arrays or invalid names
+        'classAsTagName'     => false,                 // use classname for objects in indexed arrays
+        'keyAttribute'       => '_originalKey',        // attribute where original key is stored
+        'typeAttribute'      => '_type',               // attribute for type (only if typeHints => true)
+        'classAttribute'     => '_class',              // attribute for class of objects (only if typeHints => true)
+        'scalarAsAttributes' => false,                 // scalar values (strings, ints,..) will be serialized as attribute
+        'prependAttributes'  => '',                    // prepend string for attributes
+        'indentAttributes'   => false,                 // indent the attributes, if set to '_auto', it will indent attributes so they all start at the same column
+        'mode'               => 'simplexml',             // use 'simplexml' to use parent name as tagname if transforming an indexed array
+        'addDoctype'         => false,                 // add a doctype declaration
+        'doctype'            => null,                  // supply a string or an array with id and uri ({@see XML_Util::getDoctypeDeclaration()}
+        'rootName'           => 'package',                  // name of the root tag
+        'rootAttributes'     => array(
+            'version' => '2.0',
+            'xmlns' => 'http://pear.php.net/dtd/package-2.0',
+            'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
+            'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
+            'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0
 http://pear.php.net/dtd/tasks-1.0.xsd
 http://pear.php.net/dtd/package-2.0
 http://pear.php.net/dtd/package-2.0.xsd',
-                         ),               // attributes of the root tag
-                         'attributesArray'    => 'attribs',                  // all values in this key will be treated as attributes
-                         'contentName'        => '_content',                   // this value will be used directly as content, instead of creating a new tag, may only be used in conjuction with attributesArray
-                         'beautifyFilelist'   => false,
-                         'encoding' => 'UTF-8',
-                        );
+        ),               // attributes of the root tag
+        'attributesArray'    => 'attribs',                  // all values in this key will be treated as attributes
+        'contentName'        => '_content',                   // this value will be used directly as content, instead of creating a new tag, may only be used in conjuction with attributesArray
+        'beautifyFilelist'   => false,
+        'encoding' => 'UTF-8',
+    );
 
    /**
     * options for the serialization
@@ -20403,6 +20955,9 @@ http://pear.php.net/dtd/package-2.0.xsd',
     function PEAR_PackageFile_Generator_v2(&$packagefile)
     {
         $this->_packagefile = &$packagefile;
+        if (isset($this->_packagefile->encoding)) {
+            $this->_defaultOptions['encoding'] = $this->_packagefile->encoding;
+        }
     }
 
     /**
@@ -20410,7 +20965,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
      */
     function getPackagerVersion()
     {
-        return '1.7.2';
+        return '1.8.0';
     }
 
     /**
@@ -20440,6 +20995,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 '" is not equivalent to "' . basename($this->_packagefile->getPackageFile())
                 . '"');
         }
+
         if ($where === null) {
             if (!($where = System::mktemp(array('-d')))) {
                 return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: mktemp failed');
@@ -20448,29 +21004,34 @@ http://pear.php.net/dtd/package-2.0.xsd',
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: "' . $where . '" could' .
                 ' not be created');
         }
-        if (file_exists($where . DIRECTORY_SEPARATOR . 'package.xml') &&
-              !is_file($where . DIRECTORY_SEPARATOR . 'package.xml')) {
+
+        $file = $where . DIRECTORY_SEPARATOR . 'package.xml';
+        if (file_exists($file) && !is_file($file)) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: unable to save package.xml as' .
-                ' "' . $where . DIRECTORY_SEPARATOR . 'package.xml"');
+                ' "' . $file  .'"');
         }
+
         if (!$this->_packagefile->validate(PEAR_VALIDATE_PACKAGING)) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: invalid package.xml');
         }
+
         $ext = $compress ? '.tgz' : '.tar';
         $pkgver = $this->_packagefile->getPackage() . '-' . $this->_packagefile->getVersion();
         $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
-        if (file_exists(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext) &&
-              !is_file(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext)) {
+        if (file_exists($dest_package) && !is_file($dest_package)) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: cannot create tgz file "' .
-                getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext . '"');
+                $dest_package . '"');
         }
-        if ($pkgfile = $this->_packagefile->getPackageFile()) {
-            $pkgdir = dirname(realpath($pkgfile));
-            $pkgfile = basename($pkgfile);
-        } else {
+
+        $pkgfile = $this->_packagefile->getPackageFile();
+        if (!$pkgfile) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: package file object must ' .
                 'be created from a real file');
         }
+
+        $pkgdir  = dirname(realpath($pkgfile));
+        $pkgfile = basename($pkgfile);
+
         // {{{ Create the package file list
         $filelist = array();
         $i = 0;
@@ -20481,6 +21042,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             if (!isset($contents[0])) {
                 $contents = array($contents);
             }
+
             $packageDir = $where;
             foreach ($contents as $i => $package) {
                 $fname = $package;
@@ -20488,6 +21050,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 if (!file_exists($file)) {
                     return $packager->raiseError("File does not exist: $fname");
                 }
+
                 $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
                 System::mkdir(array('-p', dirname($tfile)));
                 copy($file, $tfile);
@@ -20499,7 +21062,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             if (!isset($contents[0])) {
                 $contents = array($contents);
             }
-    
+
             $packageDir = $where;
             foreach ($contents as $i => $file) {
                 $fname = $file['attribs']['name'];
@@ -20508,53 +21071,54 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
                 if (!file_exists($file)) {
                     return $packager->raiseError("File does not exist: $fname");
-                } else {
-                    $origperms = fileperms($file);
-                    $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
-                    unset($orig['attribs']);
-                    if (count($orig)) { // file with tasks
-                        // run any package-time tasks
-                        $contents = file_get_contents($file);
-                        foreach ($orig as $tag => $raw) {
-                            $tag = str_replace(
-                                array($this->_packagefile->getTasksNs() . ':', '-'),
-                                array('', '_'), $tag);
-                            $task = "PEAR_Task_$tag";
-                            $task = &new $task($this->_packagefile->_config,
-                                $this->_packagefile->_logger,
-                                PEAR_TASK_PACKAGE);
-                            $task->init($raw, $atts, null);
-                            $res = $task->startSession($this->_packagefile, $contents, $tfile);
-                            if (!$res) {
-                                continue; // skip this task
-                            }
-                            if (PEAR::isError($res)) {
-                                return $res;
-                            }
-                            $contents = $res; // save changes
-                            System::mkdir(array('-p', dirname($tfile)));
-                            $wp = fopen($tfile, "wb");
-                            fwrite($wp, $contents);
-                            fclose($wp);
+                }
+
+                $origperms = fileperms($file);
+                $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
+                unset($orig['attribs']);
+                if (count($orig)) { // file with tasks
+                    // run any package-time tasks
+                    $contents = file_get_contents($file);
+                    foreach ($orig as $tag => $raw) {
+                        $tag = str_replace(
+                            array($this->_packagefile->getTasksNs() . ':', '-'),
+                            array('', '_'), $tag);
+                        $task = "PEAR_Task_$tag";
+                        $task = &new $task($this->_packagefile->_config,
+                            $this->_packagefile->_logger,
+                            PEAR_TASK_PACKAGE);
+                        $task->init($raw, $atts, null);
+                        $res = $task->startSession($this->_packagefile, $contents, $tfile);
+                        if (!$res) {
+                            continue; // skip this task
                         }
-                    }
-                    if (!file_exists($tfile)) {
+
+                        if (PEAR::isError($res)) {
+                            return $res;
+                        }
+
+                        $contents = $res; // save changes
                         System::mkdir(array('-p', dirname($tfile)));
-                        copy($file, $tfile);
+                        $wp = fopen($tfile, "wb");
+                        fwrite($wp, $contents);
+                        fclose($wp);
                     }
-                    chmod($tfile, $origperms);
-                    $filelist[$i++] = $tfile;
-                    $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($tfile), $i - 1);
-                    $packager->log(2, "Adding file $fname");
                 }
+
+                if (!file_exists($tfile)) {
+                    System::mkdir(array('-p', dirname($tfile)));
+                    copy($file, $tfile);
+                }
+
+                chmod($tfile, $origperms);
+                $filelist[$i++] = $tfile;
+                $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($tfile), $i - 1);
+                $packager->log(2, "Adding file $fname");
             }
         }
             // }}}
-        if ($pf1 !== null) {
-            $name = 'package2.xml';
-        } else {
-            $name = 'package.xml';
-        }
+
+        $name       = $pf1 !== null ? 'package2.xml' : 'package.xml';
         $packagexml = $this->toPackageFile($where, PEAR_VALIDATE_PACKAGING, $name);
         if ($packagexml) {
             $tar =& new Archive_Tar($dest_package, $compress);
@@ -20567,21 +21131,23 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 return $packager->raiseError('PEAR_Packagefile_v2::toTgz(): adding ' . $name .
                     ' failed');
             }
+
             // ----- Add the content of the package
             if (!$tar->addModify($filelist, $pkgver, $where)) {
                 return $packager->raiseError(
                     'PEAR_Packagefile_v2::toTgz(): tarball creation failed');
             }
+
             // add the package.xml version 1.0
             if ($pf1 !== null) {
                 $pfgen = &$pf1->getDefaultGenerator();
-                $packagexml1 = $pfgen->toPackageFile($where, PEAR_VALIDATE_PACKAGING,
-                    'package.xml', true);
+                $packagexml1 = $pfgen->toPackageFile($where, PEAR_VALIDATE_PACKAGING, 'package.xml', true);
                 if (!$tar->addModify(array($packagexml1), '', $where)) {
                     return $packager->raiseError(
                         'PEAR_Packagefile_v2::toTgz(): adding package.xml failed');
                 }
             }
+
             return $dest_package;
         }
     }
@@ -20592,6 +21158,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: invalid package.xml',
                 null, null, null, $this->_packagefile->getValidationWarnings());
         }
+
         if ($where === null) {
             if (!($where = System::mktemp(array('-d')))) {
                 return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: mktemp failed');
@@ -20600,6 +21167,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: "' . $where . '" could' .
                 ' not be created');
         }
+
         $newpkgfile = $where . DIRECTORY_SEPARATOR . $name;
         $np = @fopen($newpkgfile, 'wb');
         if (!$np) {
@@ -20629,18 +21197,46 @@ http://pear.php.net/dtd/package-2.0.xsd',
         if (!$this->_packagefile->validate($state)) {
             return false;
         }
+
         if (is_array($options)) {
             $this->options = array_merge($this->_defaultOptions, $options);
         } else {
             $this->options = $this->_defaultOptions;
         }
+
         $arr = $this->_packagefile->getArray();
         if (isset($arr['filelist'])) {
             unset($arr['filelist']);
         }
+
         if (isset($arr['_lastversion'])) {
             unset($arr['_lastversion']);
         }
+
+        // Fix the notes a little bit
+        if (isset($arr['notes'])) {
+            // This trims out the indenting, needs fixing
+            $arr['notes'] = "\n" . trim($arr['notes']) . "\n";
+        }
+
+        if (isset($arr['changelog']) && !empty($arr['changelog'])) {
+            // Fix for inconsistency how the array is filled depending on the changelog release amount
+            if (!isset($arr['changelog']['release'][0])) {
+                $release = $arr['changelog']['release'];
+                unset($arr['changelog']['release']);
+
+                $arr['changelog']['release']    = array();
+                $arr['changelog']['release'][0] = $release;
+            }
+
+            foreach ($arr['changelog']['release'] as &$c) {
+                if (isset($c['notes'])) {
+                    // This trims out the indenting, needs fixing
+                    $c['notes'] = "\n" . trim($c['notes']) . "\n";
+                }
+            }
+        }
+
         if ($state ^ PEAR_VALIDATE_PACKAGING && !isset($arr['bundle'])) {
             $use = $this->_recursiveXmlFilelist($arr['contents']['dir']['file']);
             unset($arr['contents']['dir']['file']);
@@ -20652,10 +21248,12 @@ http://pear.php.net/dtd/package-2.0.xsd',
             }
             $this->options['beautifyFilelist'] = true;
         }
-        $arr['attribs']['packagerversion'] = '1.7.2';
+
+        $arr['attribs']['packagerversion'] = '1.8.0';
         if ($this->serialize($arr, $options)) {
             return $this->_serializedData . "\n";
         }
+
         return false;
     }
 
@@ -20777,7 +21375,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
     {
         $this->options[$name] = $value;
     }
-    
+
    /**
     * sets several options at once
     *
@@ -20809,29 +21407,22 @@ http://pear.php.net/dtd/package-2.0.xsd',
             } else {
                 $this->options = array_merge($this->options, $options);
             }
-        }
-        else {
+        } else {
             $optionsBak = null;
         }
-        
+
         //  start depth is zero
         $this->_tagDepth = 0;
-
         $this->_serializedData = '';
         // serialize an array
         if (is_array($data)) {
-            if (isset($this->options['rootName'])) {
-                $tagName = $this->options['rootName'];
-            } else {
-                $tagName = 'array';
-            }
-
+            $tagName = isset($this->options['rootName']) ? $this->options['rootName'] : 'array';
             $this->_serializedData .= $this->_serializeArray($data, $tagName, $this->options['rootAttributes']);
         }
-        
+
         // add doctype declaration
         if ($this->options['addDoctype'] === true) {
-            $this->_serializedData = PEAR_PackageFile_Generator_v2_XML_Util::getDoctypeDeclaration($tagName, $this->options['doctype'])
+            $this->_serializedData = XML_Util::getDoctypeDeclaration($tagName, $this->options['doctype'])
                                    . $this->options['linebreak']
                                    . $this->_serializedData;
         }
@@ -20839,21 +21430,17 @@ http://pear.php.net/dtd/package-2.0.xsd',
         //  build xml declaration
         if ($this->options['addDecl']) {
             $atts = array();
-            if (isset($this->options['encoding']) ) {
-                $encoding = $this->options['encoding'];
-            } else {
-                $encoding = null;
-            }
-            $this->_serializedData = PEAR_PackageFile_Generator_v2_XML_Util::getXMLDeclaration('1.0', $encoding)
+            $encoding = isset($this->options['encoding']) ? $this->options['encoding'] : null;
+            $this->_serializedData = XML_Util::getXMLDeclaration('1.0', $encoding)
                                    . $this->options['linebreak']
                                    . $this->_serializedData;
         }
-        
-        
-		if ($optionsBak !== null) {
-			$this->options = $optionsBak;
-		}
-		
+
+
+        if ($optionsBak !== null) {
+            $this->options = $optionsBak;
+        }
+
         return  true;
     }
 
@@ -20865,12 +21452,12 @@ http://pear.php.net/dtd/package-2.0.xsd',
     */
     function getSerializedData()
     {
-        if ($this->_serializedData == null ) {
+        if ($this->_serializedData === null) {
             return  $this->raiseError('No serialized data available. Use XML_Serializer::serialize() first.', XML_SERIALIZER_ERROR_NO_SERIALIZATION);
         }
         return $this->_serializedData;
     }
-    
+
    /**
     * serialize any value
     *
@@ -20898,7 +21485,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
         }
         return $xml;
     }
-    
+
    /**
     * serialize an array
     *
@@ -20907,12 +21494,12 @@ http://pear.php.net/dtd/package-2.0.xsd',
     * @param    string  $tagName     name of the root tag
     * @param    array   $attributes  attributes for the root tag
     * @return   string  $string      serialized data
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::isValidName() to check, whether key has to be substituted
+    * @uses     XML_Util::isValidName() to check, whether key has to be substituted
     */
     function _serializeArray(&$array, $tagName = null, $attributes = array())
     {
         $_content = null;
-        
+
         /**
          * check for special attributes
          */
@@ -20976,25 +21563,25 @@ http://pear.php.net/dtd/package-2.0.xsd',
                             $this->_curdir = $savedir;
                         }
                     }
-                    
+
                     $string .= $this->options['linebreak'];
-        			//	do indentation
-                    if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                    // do indentation
+                    if ($this->options['indent'] !== null && $this->_tagDepth > 0) {
                         $string .= str_repeat($this->options['indent'], $this->_tagDepth);
                     }
                 }
                 return rtrim($string);
             }
         }
-        
-		if ($this->options['scalarAsAttributes'] === true) {
-	        foreach ($array as $key => $value) {
-				if (is_scalar($value) && (PEAR_PackageFile_Generator_v2_XML_Util::isValidName($key) === true)) {
-					unset($array[$key]);
-					$attributes[$this->options['prependAttributes'].$key] = $value;
-				}
-			}
-		}
+
+        if ($this->options['scalarAsAttributes'] === true) {
+            foreach ($array as $key => $value) {
+                if (is_scalar($value) && (XML_Util::isValidName($key) === true)) {
+                    unset($array[$key]);
+                    $attributes[$this->options['prependAttributes'].$key] = $value;
+                }
+            }
+        }
 
         // check for empty array => create empty tag
         if (empty($array)) {
@@ -21008,29 +21595,29 @@ http://pear.php.net/dtd/package-2.0.xsd',
             $this->_tagDepth++;
             $tmp = $this->options['linebreak'];
             foreach ($array as $key => $value) {
-    			//	do indentation
-                if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                // do indentation
+                if ($this->options['indent'] !== null && $this->_tagDepth > 0) {
                     $tmp .= str_repeat($this->options['indent'], $this->_tagDepth);
                 }
-    
-    			//	copy key
-    			$origKey	=	$key;
-    			//	key cannot be used as tagname => use default tag
-                $valid = PEAR_PackageFile_Generator_v2_XML_Util::isValidName($key);
-    	        if (PEAR::isError($valid)) {
-    	            if ($this->options['classAsTagName'] && is_object($value)) {
-    	                $key = get_class($value);
-    	            } else {
-            	        $key = $this->options['defaultTagName'];
-    	            }
-           	 	}
+
+                // copy key
+                $origKey = $key;
+                // key cannot be used as tagname => use default tag
+                $valid = XML_Util::isValidName($key);
+                if (PEAR::isError($valid)) {
+                    if ($this->options['classAsTagName'] && is_object($value)) {
+                        $key = get_class($value);
+                    } else {
+                        $key = $this->options['defaultTagName'];
+                    }
+                }
                 $atts = array();
                 if ($this->options['typeHints'] === true) {
                     $atts[$this->options['typeAttribute']] = gettype($value);
-    				if ($key !== $origKey) {
-    					$atts[$this->options['keyAttribute']] = (string)$origKey;
-    				}
-    
+                    if ($key !== $origKey) {
+                        $atts[$this->options['keyAttribute']] = (string)$origKey;
+                    }
+
                 }
                 if ($this->options['beautifyFilelist'] && $key == 'dir') {
                     if (!isset($this->_curdir)) {
@@ -21066,21 +21653,21 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 }
                 $tmp .= $this->options['linebreak'];
             }
-            
+
             $this->_tagDepth--;
             if ($this->options['indent']!==null && $this->_tagDepth>0) {
                 $tmp .= str_repeat($this->options['indent'], $this->_tagDepth);
             }
-    
-    		if (trim($tmp) === '') {
-    			$tmp = null;
-    		}
-    		
+
+            if (trim($tmp) === '') {
+                $tmp = null;
+            }
+
             $tag = array(
-                            'qname'      => $tagName,
-                            'content'    => $tmp,
-                            'attributes' => $attributes
-                        );
+                'qname'      => $tagName,
+                'content'    => $tmp,
+                'attributes' => $attributes
+            );
         }
         if ($this->options['typeHints'] === true) {
             if (!isset($tag['attributes'][$this->options['typeAttribute']])) {
@@ -21091,7 +21678,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
         $string = $this->_createXMLTag($tag, false);
         return $string;
     }
-  
+
    /**
     * create a tag from an array
     * this method awaits an array in the following format
@@ -21108,7 +21695,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
     * @param    boolean $replaceEntities whether to replace XML entities in content or not
     * @return   string  $string XML tag
     */
-    function _createXMLTag( $tag, $replaceEntities = true )
+    function _createXMLTag($tag, $replaceEntities = true)
     {
         if ($this->options['indentAttributes'] !== false) {
             $multiline = true;
@@ -21121,727 +21708,51 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 $indent .= $this->options['indentAttributes'];
             }
         } else {
-            $multiline = false;
-            $indent    = false;
+            $indent = $multiline = false;
         }
-    
+
         if (is_array($tag['content'])) {
             if (empty($tag['content'])) {
-                $tag['content'] =   '';
+                $tag['content'] = '';
             }
         } elseif(is_scalar($tag['content']) && (string)$tag['content'] == '') {
-            $tag['content'] =   '';
+            $tag['content'] = '';
         }
-    
+
         if (is_scalar($tag['content']) || is_null($tag['content'])) {
             if ($this->options['encoding'] == 'UTF-8' &&
-                  version_compare(phpversion(), '5.0.0', 'lt')) {
-                $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_UTF8_XML;
-            } else {
-                $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML;
+                  version_compare(phpversion(), '5.0.0', 'lt')
+            ) {
+                $tag = utf8_encode($tag);
             }
-            $tag = PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $this->options['linebreak'], $encoding);
+
+            if ($replaceEntities === true) {
+                $replaceEntities = XML_UTIL_ENTITIES_XML;
+            }
+
+            $tag = XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $this->options['linebreak']);
         } elseif (is_array($tag['content'])) {
-            $tag    =   $this->_serializeArray($tag['content'], $tag['qname'], $tag['attributes']);
+            $tag = $this->_serializeArray($tag['content'], $tag['qname'], $tag['attributes']);
         } elseif (is_object($tag['content'])) {
-            $tag    =   $this->_serializeObject($tag['content'], $tag['qname'], $tag['attributes']);
+            $tag = $this->_serializeObject($tag['content'], $tag['qname'], $tag['attributes']);
         } elseif (is_resource($tag['content'])) {
             settype($tag['content'], 'string');
-            $tag    =   PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag, $replaceEntities);
-        }
-        return  $tag;
-    }
-}
-
-// well, it's one way to do things without extra deps ...
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available at through the world-wide-web at                           |
-// | http://www.php.net/license/2_02.txt.                                 |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license at php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stephan Schmidt <schst at php-tools.net>                       |
-// +----------------------------------------------------------------------+
-//
-//    $Id: v2.php,v 1.39 2008/05/13 05:29:24 cellog Exp $
-
-/**
- * error code for invalid chars in XML name
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_CHARS", 51);
-
-/**
- * error code for invalid chars in XML name
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_START", 52);
-
-/**
- * error code for non-scalar tag content
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NON_SCALAR_CONTENT", 60);
-    
-/**
- * error code for missing tag name
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NO_TAG_NAME", 61);
-    
-/**
- * replace XML entities
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES", 1);
-
-/**
- * embedd content in a CData Section
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_CDATA_SECTION", 2);
-
-/**
- * do not replace entitites
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE", 0);
-
-/**
- * replace all XML entitites
- * This setting will replace <, >, ", ' and &
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML", 1);
-
-/**
- * replace only required XML entitites
- * This setting will replace <, " and &
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED", 2);
-
-/**
- * replace HTML entitites
- * @link    http://www.php.net/htmlentities
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML", 3);
-
-/**
- * replace all XML entitites, and encode from ISO-8859-1 to UTF-8
- * This setting will replace <, >, ", ' and &
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_UTF8_XML", 4);
-
-/**
- * utility class for working with XML documents
- * 
- * customized version of XML_Util 0.6.0
- *
- * @category XML
- * @package  PEAR
- * @version  0.6.0
- * @author   Stephan Schmidt <schst at php.net>
- * @author   Gregory Beaver <cellog at php.net>
- */
-class PEAR_PackageFile_Generator_v2_XML_Util {
-
-   /**
-    * return API version
-    *
-    * @access   public
-    * @static
-    * @return   string  $version API version
-    */
-    function apiVersion()
-    {
-        return "0.6";
-    }
-
-   /**
-    * replace XML entities
-    *
-    * With the optional second parameter, you may select, which
-    * entities should be replaced.
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // replace XML entites:
-    * $string = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities("This string contains < & >.");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  string where XML special chars should be replaced
-    * @param    integer setting for entities in attribute values (one of PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML)
-    * @return   string  string with replaced chars
-    */
-    function replaceEntities($string, $replaceEntities = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        switch ($replaceEntities) {
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_UTF8_XML:
-                return strtr(utf8_encode($string),array(
-                                          '&'  => '&amp;',
-                                          '>'  => '&gt;',
-                                          '<'  => '&lt;',
-                                          '"'  => '&quot;',
-                                          '\'' => '&apos;' ));
-                break;
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML:
-                return strtr($string,array(
-                                          '&'  => '&amp;',
-                                          '>'  => '&gt;',
-                                          '<'  => '&lt;',
-                                          '"'  => '&quot;',
-                                          '\'' => '&apos;' ));
-                break;
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED:
-                return strtr($string,array(
-                                          '&'  => '&amp;',
-                                          '<'  => '&lt;',
-                                          '"'  => '&quot;' ));
-                break;
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML:
-                return htmlspecialchars($string);
-                break;
-        }
-        return $string;
-    }
-
-   /**
-    * build an xml declaration
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // get an XML declaration:
-    * $xmlDecl = PEAR_PackageFile_Generator_v2_XML_Util::getXMLDeclaration("1.0", "UTF-8", true);
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $version     xml version
-    * @param    string  $encoding    character encoding
-    * @param    boolean $standAlone  document is standalone (or not)
-    * @return   string  $decl xml declaration
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::attributesToString() to serialize the attributes of the XML declaration
-    */
-    function getXMLDeclaration($version = "1.0", $encoding = null, $standalone = null)
-    {
-        $attributes = array(
-                            "version" => $version,
-                           );
-        // add encoding
-        if ($encoding !== null) {
-            $attributes["encoding"] = $encoding;
-        }
-        // add standalone, if specified
-        if ($standalone !== null) {
-            $attributes["standalone"] = $standalone ? "yes" : "no";
-        }
-        
-        return sprintf("<?xml%s?>", PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($attributes, false));
-    }
-
-   /**
-    * build a document type declaration
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // get a doctype declaration:
-    * $xmlDecl = PEAR_PackageFile_Generator_v2_XML_Util::getDocTypeDeclaration("rootTag","myDocType.dtd");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $root         name of the root tag
-    * @param    string  $uri          uri of the doctype definition (or array with uri and public id)
-    * @param    string  $internalDtd  internal dtd entries   
-    * @return   string  $decl         doctype declaration
-    * @since    0.2
-    */
-    function getDocTypeDeclaration($root, $uri = null, $internalDtd = null)
-    {
-        if (is_array($uri)) {
-            $ref = sprintf( ' PUBLIC "%s" "%s"', $uri["id"], $uri["uri"] );
-        } elseif (!empty($uri)) {
-            $ref = sprintf( ' SYSTEM "%s"', $uri );
-        } else {
-            $ref = "";
-        }
-
-        if (empty($internalDtd)) {
-            return sprintf("<!DOCTYPE %s%s>", $root, $ref);
-        } else {
-            return sprintf("<!DOCTYPE %s%s [\n%s\n]>", $root, $ref, $internalDtd);
-        }
-    }
-
-   /**
-    * create string representation of an attribute list
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // build an attribute string
-    * $att = array(
-    *              "foo"   =>  "bar",
-    *              "argh"  =>  "tomato"
-    *            );
-    *
-    * $attList = PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($att);    
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    array         $attributes        attribute array
-    * @param    boolean|array $sort              sort attribute list alphabetically, may also be an assoc array containing the keys 'sort', 'multiline', 'indent', 'linebreak' and 'entities'
-    * @param    boolean       $multiline         use linebreaks, if more than one attribute is given
-    * @param    string        $indent            string used for indentation of multiline attributes
-    * @param    string        $linebreak         string used for linebreaks of multiline attributes
-    * @param    integer       $entities          setting for entities in attribute values (one of PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML)
-    * @return   string                           string representation of the attributes
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities() to replace XML entities in attribute values
-    * @todo     allow sort also to be an options array
-    */
-    function attributesToString($attributes, $sort = true, $multiline = false, $indent = '    ', $linebreak = "\n", $entities = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        /**
-         * second parameter may be an array
-         */
-        if (is_array($sort)) {
-            if (isset($sort['multiline'])) {
-                $multiline = $sort['multiline'];
-            }
-            if (isset($sort['indent'])) {
-                $indent = $sort['indent'];
-            }
-            if (isset($sort['linebreak'])) {
-                $multiline = $sort['linebreak'];
-            }
-            if (isset($sort['entities'])) {
-                $entities = $sort['entities'];
-            }
-            if (isset($sort['sort'])) {
-                $sort = $sort['sort'];
-            } else {
-                $sort = true;
-            }
-        }
-        $string = '';
-        if (is_array($attributes) && !empty($attributes)) {
-            if ($sort) {
-                ksort($attributes);
-            }
-            if( !$multiline || count($attributes) == 1) {
-                foreach ($attributes as $key => $value) {
-                    if ($entities != PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE) {
-                        $value = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities($value, $entities);
-                    }
-                    $string .= ' '.$key.'="'.$value.'"';
-                }
-            } else {
-                $first = true;
-                foreach ($attributes as $key => $value) {
-                    if ($entities != PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE) {
-                        $value = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities($value, $entities);
-                    }
-                    if ($first) {
-                        $string .= " ".$key.'="'.$value.'"';
-                        $first = false;
-                    } else {
-                        $string .= $linebreak.$indent.$key.'="'.$value.'"';
-                    }
-                }
-            }
-        }
-        return $string;
-    }
-
-   /**
-    * create a tag
-    *
-    * This method will call PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray(), which
-    * is more flexible.
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML tag:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createTag("myNs:myTag", array("foo" => "bar"), "This is inside the tag", "http://www.w3c.org/myNs#");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $qname             qualified tagname (including namespace)
-    * @param    array   $attributes        array containg attributes
-    * @param    mixed   $content
-    * @param    string  $namespaceUri      URI of the namespace
-    * @param    integer $replaceEntities   whether to replace XML special chars in content, embedd it in a CData section or none of both
-    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
-    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
-    * @param    string  $linebreak         string used for linebreaks
-    * @param    string  $encoding          encoding that should be used to translate content
-    * @return   string  $string            XML tag
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray()
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray() to create the tag
-    */
-    function createTag($qname, $attributes = array(), $content = null, $namespaceUri = null, $replaceEntities = PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES, $multiline = false, $indent = "_auto", $linebreak = "\n", $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        $tag = array(
-                     "qname"      => $qname,
-                     "attributes" => $attributes
-                    );
-
-        // add tag content
-        if ($content !== null) {
-            $tag["content"] = $content;
-        }
-        
-        // add namespace Uri
-        if ($namespaceUri !== null) {
-            $tag["namespaceUri"] = $namespaceUri;
+            $tag = XML_Util::createTagFromArray($tag, $replaceEntities);
         }
-
-        return PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $linebreak, $encoding);
-    }
-
-   /**
-    * create a tag from an array
-    * this method awaits an array in the following format
-    * <pre>
-    * array(
-    *  "qname"        => $qname         // qualified name of the tag
-    *  "namespace"    => $namespace     // namespace prefix (optional, if qname is specified or no namespace)
-    *  "localpart"    => $localpart,    // local part of the tagname (optional, if qname is specified)
-    *  "attributes"   => array(),       // array containing all attributes (optional)
-    *  "content"      => $content,      // tag content (optional)
-    *  "namespaceUri" => $namespaceUri  // namespaceUri for the given namespace (optional)
-    *   )
-    * </pre>
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * $tag = array(
-    *           "qname"        => "foo:bar",
-    *           "namespaceUri" => "http://foo.com",
-    *           "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
-    *           "content"      => "I'm inside the tag",
-    *            );
-    * // creating a tag with qualified name and namespaceUri
-    * $string = PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag);
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    array   $tag               tag definition
-    * @param    integer $replaceEntities   whether to replace XML special chars in content, embedd it in a CData section or none of both
-    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
-    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
-    * @param    string  $linebreak         string used for linebreaks
-    * @return   string  $string            XML tag
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createTag()
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::attributesToString() to serialize the attributes of the tag
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName() to get local part and namespace of a qualified name
-    */
-    function createTagFromArray($tag, $replaceEntities = PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES, $multiline = false, $indent = "_auto", $linebreak = "\n", $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        if (isset($tag["content"]) && !is_scalar($tag["content"])) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( "Supplied non-scalar value as tag content", PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NON_SCALAR_CONTENT );
-        }
-
-        if (!isset($tag['qname']) && !isset($tag['localPart'])) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( 'You must either supply a qualified name (qname) or local tag name (localPart).', PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NO_TAG_NAME );
-        }
-
-        // if no attributes hav been set, use empty attributes
-        if (!isset($tag["attributes"]) || !is_array($tag["attributes"])) {
-            $tag["attributes"] = array();
-        }
-        
-        // qualified name is not given
-        if (!isset($tag["qname"])) {
-            // check for namespace
-            if (isset($tag["namespace"]) && !empty($tag["namespace"])) {
-                $tag["qname"] = $tag["namespace"].":".$tag["localPart"];
-            } else {
-                $tag["qname"] = $tag["localPart"];
-            }
-        // namespace URI is set, but no namespace
-        } elseif (isset($tag["namespaceUri"]) && !isset($tag["namespace"])) {
-            $parts = PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName($tag["qname"]);
-            $tag["localPart"] = $parts["localPart"];
-            if (isset($parts["namespace"])) {
-                $tag["namespace"] = $parts["namespace"];
-            }
-        }
-
-        if (isset($tag["namespaceUri"]) && !empty($tag["namespaceUri"])) {
-            // is a namespace given
-            if (isset($tag["namespace"]) && !empty($tag["namespace"])) {
-                $tag["attributes"]["xmlns:".$tag["namespace"]] = $tag["namespaceUri"];
-            } else {
-                // define this Uri as the default namespace
-                $tag["attributes"]["xmlns"] = $tag["namespaceUri"];
-            }
-        }
-
-        // check for multiline attributes
-        if ($multiline === true) {
-            if ($indent === "_auto") {
-                $indent = str_repeat(" ", (strlen($tag["qname"])+2));
-            }
-        }
-        
-        // create attribute list
-        $attList    =   PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($tag["attributes"], true, $multiline, $indent, $linebreak );
-        if (!isset($tag["content"]) || (string)$tag["content"] == '') {
-            $tag    =   sprintf("<%s%s />", $tag["qname"], $attList);
-        } else {
-            if ($replaceEntities == PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES) {
-                $tag["content"] = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities($tag["content"], $encoding);
-            } elseif ($replaceEntities == PEAR_PackageFile_Generator_v2_XML_Util_CDATA_SECTION) {
-                $tag["content"] = PEAR_PackageFile_Generator_v2_XML_Util::createCDataSection($tag["content"]);
-            }
-            $tag    =   sprintf("<%s%s>%s</%s>", $tag["qname"], $attList, $tag["content"], $tag["qname"] );
-        }        
         return  $tag;
     }
-
-   /**
-    * create a start element
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML start element:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createStartElement("myNs:myTag", array("foo" => "bar") ,"http://www.w3c.org/myNs#");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $qname             qualified tagname (including namespace)
-    * @param    array   $attributes        array containg attributes
-    * @param    string  $namespaceUri      URI of the namespace
-    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
-    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
-    * @param    string  $linebreak         string used for linebreaks
-    * @return   string  $string            XML start element
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createEndElement(), PEAR_PackageFile_Generator_v2_XML_Util::createTag()
-    */
-    function createStartElement($qname, $attributes = array(), $namespaceUri = null, $multiline = false, $indent = '_auto', $linebreak = "\n")
-    {
-        // if no attributes hav been set, use empty attributes
-        if (!isset($attributes) || !is_array($attributes)) {
-            $attributes = array();
-        }
-        
-        if ($namespaceUri != null) {
-            $parts = PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName($qname);
-        }
-
-        // check for multiline attributes
-        if ($multiline === true) {
-            if ($indent === "_auto") {
-                $indent = str_repeat(" ", (strlen($qname)+2));
-            }
-        }
-
-        if ($namespaceUri != null) {
-            // is a namespace given
-            if (isset($parts["namespace"]) && !empty($parts["namespace"])) {
-                $attributes["xmlns:".$parts["namespace"]] = $namespaceUri;
-            } else {
-                // define this Uri as the default namespace
-                $attributes["xmlns"] = $namespaceUri;
-            }
-        }
-
-        // create attribute list
-        $attList    =   PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($attributes, true, $multiline, $indent, $linebreak);
-        $element    =   sprintf("<%s%s>", $qname, $attList);
-        return  $element;
-    }
-
-   /**
-    * create an end element
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML start element:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createEndElement("myNs:myTag");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $qname             qualified tagname (including namespace)
-    * @return   string  $string            XML end element
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createStartElement(), PEAR_PackageFile_Generator_v2_XML_Util::createTag()
-    */
-    function createEndElement($qname)
-    {
-        $element    =   sprintf("</%s>", $qname);
-        return  $element;
-    }
-    
-   /**
-    * create an XML comment
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML start element:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createComment("I am a comment");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $content           content of the comment
-    * @return   string  $comment           XML comment
-    */
-    function createComment($content)
-    {
-        $comment    =   sprintf("<!-- %s -->", $content);
-        return  $comment;
-    }
-    
-   /**
-    * create a CData section
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create a CData section
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createCDataSection("I am content.");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $data              data of the CData section
-    * @return   string  $string            CData section with content
-    */
-    function createCDataSection($data)
-    {
-        return  sprintf("<![CDATA[%s]]>", $data);
-    }
-
-   /**
-    * split qualified name and return namespace and local part
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // split qualified tag
-    * $parts = PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName("xslt:stylesheet");
-    * </code>
-    * the returned array will contain two elements:
-    * <pre>
-    * array(
-    *       "namespace" => "xslt",
-    *       "localPart" => "stylesheet"
-    *      );
-    * </pre>
-    *
-    * @access public
-    * @static
-    * @param  string    $qname      qualified tag name
-    * @param  string    $defaultNs  default namespace (optional)
-    * @return array     $parts      array containing namespace and local part
-    */
-    function splitQualifiedName($qname, $defaultNs = null)
-    {
-        if (strstr($qname, ':')) {
-            $tmp = explode(":", $qname);
-            return array(
-                          "namespace" => $tmp[0],
-                          "localPart" => $tmp[1]
-                        );
-        }
-        return array(
-                      "namespace" => $defaultNs,
-                      "localPart" => $qname
-                    );
-    }
-
-   /**
-    * check, whether string is valid XML name
-    *
-    * <p>XML names are used for tagname, attribute names and various
-    * other, lesser known entities.</p>
-    * <p>An XML name may only consist of alphanumeric characters,
-    * dashes, undescores and periods, and has to start with a letter
-    * or an underscore.
-    * </p>
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // verify tag name
-    * $result = PEAR_PackageFile_Generator_v2_XML_Util::isValidName("invalidTag?");
-    * if (PEAR_PackageFile_Generator_v2_XML_Util::isError($result)) {
-    *    print "Invalid XML name: " . $result->getMessage();
-    * }
-    * </code>
-    *
-    * @access  public
-    * @static
-    * @param   string  $string string that should be checked
-    * @return  mixed   $valid  true, if string is a valid XML name, PEAR error otherwise
-    * @todo    support for other charsets
-    */
-    function isValidName($string)
-    {
-        // check for invalid chars
-        if (!preg_match("/^[[:alnum:]_\-.]\\z/", $string{0})) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( "XML names may only start with letter or underscore", PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_START );
-        }
-        
-        // check for invalid chars
-        if (!preg_match("/^([a-zA-Z_]([a-zA-Z0-9_\-\.]*)?:)?[a-zA-Z_]([a-zA-Z0-9_\-\.]+)?\\z/", $string)) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( "XML names may only contain alphanumeric chars, period, hyphen, colon and underscores", PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_CHARS );
-         }
-        // XML name is valid
-        return true;
-    }
-
-   /**
-    * replacement for PEAR_PackageFile_Generator_v2_XML_Util::raiseError
-    *
-    * Avoids the necessity to always require
-    * PEAR.php
-    *
-    * @access   public
-    * @param    string      error message
-    * @param    integer     error code
-    * @return   object PEAR_Error
-    */
-    function raiseError($msg, $code)
-    {
-        require_once 'PEAR.php';
-        return PEAR::raiseError($msg, $code);
-    }
-}
-?>                                                                                                    PEAR-1.7.2/PEAR/PackageFile/Parser/v1.php                                                           100644    1750    1750        41075 11014312742  12671                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                          PEAR-1.8.0/PEAR/PackageFile/Parser/v1.php                                                           100664     764     764        40317      100664  12507                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * package.xml parsing class, package.xml version 1.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v1.php,v 1.27 2008/01/03 20:55:16 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v1.php,v 1.30 2009/02/24 23:45:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -21854,8 +21765,8 @@ require_once 'PEAR/PackageFile/v1.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
  * @version    Release: @PEAR-VER@
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
@@ -22163,7 +22074,6 @@ class PEAR_PackageFile_Parser_v1
                 $this->current_maintainer['role'] = $data;
                 break;
             case 'version':
-                //$data = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $data);
                 if ($this->in_changelog) {
                     $this->current_release['version'] = $data;
                 } else {
@@ -22180,7 +22090,8 @@ class PEAR_PackageFile_Parser_v1
             case 'notes':
                 // try to "de-indent" release notes in case someone
                 // has been over-indenting their xml ;-)
-                $data = $this->_unIndent($this->cdata);
+                // Trim only on the right side
+                $data = rtrim($this->_unIndent($this->cdata));
                 if ($this->in_changelog) {
                     $this->current_release['release_notes'] = $data;
                 } else {
@@ -22288,24 +22199,18 @@ class PEAR_PackageFile_Parser_v1
 
     // }}}
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.7.2/PEAR/PackageFile/Parser/v2.php                                                           100644    1750    1750         6702 11014312742  12650                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                                 PEAR-1.8.0/PEAR/PackageFile/Parser/v2.php                                                           100664     764     764         6220      100664  12463                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * package.xml parsing class, package.xml version 2.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v2.php,v 1.21 2008/01/03 20:26:37 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v2.php,v 1.24 2009/02/24 23:45:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -22319,8 +22224,8 @@ require_once 'PEAR/PackageFile/v2.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
  * @version    Release: @PEAR-VER@
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
@@ -22394,34 +22299,30 @@ class PEAR_PackageFile_Parser_v2 extends PEAR_XMLParser
         if (PEAR::isError($err = parent::parse($data, $file))) {
             return $err;
         }
+
         $ret = new $class;
+        $ret->encoding = $this->encoding;
         $ret->setConfig($this->_config);
         if (isset($this->_logger)) {
             $ret->setLogger($this->_logger);
         }
+
         $ret->fromArray($this->_unserializedData);
         $ret->setPackagefile($file, $archive);
         return $ret;
     }
-}
-?>                                                              PEAR-1.7.2/PEAR/PackageFile/v2/rw.php                                                               100644    1750    1750       173744 11014312742  12117                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                                PEAR-1.8.0/PEAR/PackageFile/v2/rw.php                                                               100664     764     764       173213      100664  11726                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0, read/write version
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.22 2008/01/18 22:47:49 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.25 2009/02/24 23:46:03 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a8
  */
@@ -22433,9 +22334,9 @@ require_once 'PEAR/PackageFile/v2.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  */
@@ -22514,7 +22415,7 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
         $this->_isValid = 0;
         if (!isset($this->_packageInfo['uri'])) {
             // ensure that the uri tag is set up in the right location
-            $this->_packageInfo = $this->_insertBefore($this->_packageInfo, 
+            $this->_packageInfo = $this->_insertBefore($this->_packageInfo,
                 array('extends', 'summary', 'description', 'lead',
                 'developer', 'contributor', 'helper', 'date', 'time', 'version',
                 'stability', 'license', 'notes', 'contents', 'compatible',
@@ -22864,7 +22765,7 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
                     'bundle', 'changelog'), array(), 'contents');
         }
         if ($this->getPackageType() != 'bundle') {
-            $this->_packageInfo['contents'] = 
+            $this->_packageInfo['contents'] =
                 array('dir' => array('attribs' => array('name' => '/')));
             if ($baseinstall) {
                 $this->_packageInfo['contents']['dir']['attribs']['baseinstalldir'] = $baseinstall;
@@ -23633,21 +23534,26 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
                                    'zendextbin', 'bundle'))) {
             return false;
         }
+
         if (in_array($type, array('zendextsrc', 'zendextbin'))) {
             $this->_setPackageVersion2_1();
         }
+
         if ($type != 'bundle') {
             $type .= 'release';
         }
+
         foreach (array('phprelease', 'extbinrelease', 'extsrcrelease',
                        'zendextsrcrelease', 'zendextbinrelease', 'bundle') as $test) {
             unset($this->_packageInfo[$test]);
         }
+
         if (!isset($this->_packageInfo[$type])) {
             // ensure that the release tag is set up
             $this->_packageInfo = $this->_insertBefore($this->_packageInfo, array('changelog'),
                 array(), $type);
         }
+
         $this->_packageInfo[$type] = array();
         return true;
     }
@@ -23767,14 +23673,17 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
         if ($this->getPackageType() != 'extsrc' && $this->getPackageType() != 'zendextsrc') {
             return false;
         }
+
         $r = &$this->_getCurrentRelease(false);
         if ($r === null) {
             return false;
         }
+
         $opt = array('attribs' => array('name' => $name, 'prompt' => $prompt));
         if ($default !== null) {
             $opt['attribs']['default'] = $default;
         }
+
         $this->_isValid = 0;
         $r = $this->_mergeTag($r, $opt,
             array(
@@ -23952,7 +23861,7 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
     function generateChangeLogEntry($notes = false)
     {
         return array(
-            'version' => 
+            'version' =>
                 array(
                     'release' => $this->getVersion('release'),
                     'api' => $this->getVersion('api'),
@@ -24005,25 +23914,18 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
     {
         unset($this->_packageInfo['changelog']);
     }
-}
-?>                            PEAR-1.7.2/PEAR/PackageFile/v2/Validator.php                                                        100644    1750    1750       246506 11014312742  13411                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.8.0/PEAR/PackageFile/v2/Validator.php                                                        100664     764     764       250045      100664  13222                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0, read/write version
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Validator.php,v 1.106 2008/03/28 22:23:41 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Validator.php,v 1.110 2009/03/27 19:29:31 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a8
  */
@@ -24033,9 +23935,9 @@ class PEAR_PackageFile_v2_rw extends PEAR_PackageFile_v2
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  * @access private
@@ -24126,7 +24028,7 @@ class PEAR_PackageFile_v2_Validator
               isset($test['dependencies']['required']) &&
               isset($test['dependencies']['required']['pearinstaller']) &&
               isset($test['dependencies']['required']['pearinstaller']['min']) &&
-              version_compare('1.7.2',
+              version_compare('1.8.0',
                 $test['dependencies']['required']['pearinstaller']['min'], '<')
         ) {
             $this->_pearVersionTooLow($test['dependencies']['required']['pearinstaller']['min']);
@@ -24246,14 +24148,17 @@ class PEAR_PackageFile_v2_Validator
                 }
             }
         }
+
         if ($fail) {
             return false;
         }
+
         $list = $this->_packageInfo['contents'];
         if (isset($list['dir']) && is_array($list['dir']) && isset($list['dir'][0])) {
             $this->_multipleToplevelDirNotAllowed();
             return $this->_isValid = 0;
         }
+
         $this->_validateFilelist();
         $this->_validateRelease();
         if (!$this->_stack->hasErrors()) {
@@ -24289,6 +24194,7 @@ class PEAR_PackageFile_v2_Validator
                 }
             }
         }
+
         $this->_pf->_isValid = $this->_isValid = !$this->_stack->hasErrors('error');
         if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$this->_filesValid) {
             if ($this->_pf->getPackageType() == 'bundle') {
@@ -24305,9 +24211,11 @@ class PEAR_PackageFile_v2_Validator
                 }
             }
         }
+
         if ($this->_isValid) {
             return $this->_pf->_isValid = $this->_isValid = $state;
         }
+
         return $this->_pf->_isValid = $this->_isValid = 0;
     }
 
@@ -25359,7 +25267,7 @@ class PEAR_PackageFile_v2_Validator
         $this->_stack->push(__FUNCTION__, 'error',
             array('version' => $version),
             'This package.xml requires PEAR version %version% to parse properly, we are ' .
-            'version 1.7.2');
+            'version 1.8.0');
     }
 
     function _invalidTagOrder($oktags, $actual, $root)
@@ -25854,15 +25762,19 @@ class PEAR_PackageFile_v2_Validator
                 'Parser error: token_get_all() function must exist to analyze source code, PHP may have been compiled with --disable-tokenizer');
             return false;
         }
+
         if (!defined('T_DOC_COMMENT')) {
             define('T_DOC_COMMENT', T_COMMENT);
         }
+
         if (!defined('T_INTERFACE')) {
             define('T_INTERFACE', -1);
         }
+
         if (!defined('T_IMPLEMENTS')) {
             define('T_IMPLEMENTS', -1);
         }
+
         if ($string) {
             $contents = $file;
         } else {
@@ -25876,12 +25788,13 @@ class PEAR_PackageFile_v2_Validator
         // Silence this function so we can catch PHP Warnings and show our own custom message
         $tokens = @token_get_all($contents);
         if (isset($php_errormsg)) {
-            $pn = $this->_pf->getPackage();
-            $this->_stack->push(__FUNCTION__, 'warning',
-                    array('file' => $file, 'package' => $pn),
-                    'in %file%: Could not process file for unkown reasons,' .
-                    ' possibly a PHP parse error in %file% from %package%');
-
+            if (isset($this->_stack)) {
+                $pn = $this->_pf->getPackage();
+                $this->_stack->push(__FUNCTION__, 'warning',
+                        array('file' => $file, 'package' => $pn),
+                        'in %file%: Could not process file for unkown reasons,' .
+                        ' possibly a PHP parse error in %file% from %package%');
+            }
         }
 /*
         for ($i = 0; $i < sizeof($tokens); $i++) {
@@ -25922,6 +25835,7 @@ class PEAR_PackageFile_v2_Validator
                 $token = $tokens[$i];
                 $data = '';
             }
+
             if ($inquote) {
                 if ($token != '"' && $token != T_END_HEREDOC) {
                     continue;
@@ -25930,6 +25844,7 @@ class PEAR_PackageFile_v2_Validator
                     continue;
                 }
             }
+
             switch ($token) {
                 case T_WHITESPACE :
                     continue;
@@ -25965,8 +25880,14 @@ class PEAR_PackageFile_v2_Validator
                     $interface = true;
                 case T_CLASS:
                     if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
-                        'Parser error: invalid PHP found in file "%file%"');
+                        if (isset($this->_stack)) {
+                            $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
+                            'Parser error: invalid PHP found in file "%file%"');
+                        } else {
+                            PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
+                                PEAR_COMMON_ERROR_INVALIDPHP);
+                        }
+
                         return false;
                     }
                 case T_FUNCTION:
@@ -25980,13 +25901,21 @@ class PEAR_PackageFile_v2_Validator
                         if (in_array(strtolower($data),
                             array('public', 'private', 'protected', 'abstract',
                                   'interface', 'implements', 'throw')
-                                 )) {
-                            $this->_stack->push(__FUNCTION__, 'warning', array(
-                                'file' => $file),
-                                'Error, PHP5 token encountered in %file%,' .
-                                ' analysis should be in PHP5');
+                                 )
+                        ) {
+                            if (isset($this->_stack)) {
+                                $this->_stack->push(__FUNCTION__, 'warning', array(
+                                    'file' => $file),
+                                    'Error, PHP5 token encountered in %file%,' .
+                                    ' analysis should be in PHP5');
+                            } else {
+                                PEAR::raiseError('Error: PHP5 token encountered in ' . $file .
+                                    'packaging should be done in PHP 5');
+                                return false;
+                            }
                         }
                     }
+
                     if ($look_for == T_CLASS) {
                         $current_class = $data;
                         $current_class_level = $brace_level;
@@ -26010,11 +25939,13 @@ class PEAR_PackageFile_v2_Validator
                             $current_function = $data;
                             $declared_functions[] = $current_function;
                         }
+
                         $current_function_level = $brace_level;
                         $m = array();
                     } elseif ($look_for == T_NEW) {
                         $used_classes[$data] = true;
                     }
+
                     $look_for = 0;
                     continue 2;
                 case T_VARIABLE:
@@ -26031,17 +25962,26 @@ class PEAR_PackageFile_v2_Validator
                     continue 2;
                 case T_DOUBLE_COLON:
                     if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
-                            'Parser error: invalid PHP found in file "%file%"');
+                        if (isset($this->_stack)) {
+                            $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
+                                'Parser error: invalid PHP found in file "%file%"');
+                        } else {
+                            PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
+                                PEAR_COMMON_ERROR_INVALIDPHP);
+                        }
+
                         return false;
                     }
+
                     $class = $tokens[$i - 1][1];
                     if (strtolower($class) != 'parent') {
                         $used_classes[$class] = true;
                     }
+
                     continue 2;
             }
         }
+
         return array(
             "source_file" => $file,
             "declared_classes" => $declared_classes,
@@ -26051,7 +25991,7 @@ class PEAR_PackageFile_v2_Validator
             "used_classes" => array_diff(array_keys($used_classes), $nodeps),
             "inheritance" => $extends,
             "implements" => $implements,
-            );
+        );
     }
 
     /**
@@ -26078,15 +26018,17 @@ class PEAR_PackageFile_v2_Validator
         if (!$this->_isValid) {
             return array();
         }
+
         $providesret = array();
-        $file = basename($srcinfo['source_file']);
-        $pn = $this->_pf->getPackage();
-        $pnl = strlen($pn);
+        $file        = basename($srcinfo['source_file']);
+        $pn          = isset($this->_pf) ? $this->_pf->getPackage() : '';
+        $pnl         = strlen($pn);
         foreach ($srcinfo['declared_classes'] as $class) {
             $key = "class;$class";
             if (isset($providesret[$key])) {
                 continue;
             }
+
             $providesret[$key] =
                 array('file'=> $file, 'type' => 'class', 'name' => $class);
             if (isset($srcinfo['inheritance'][$class])) {
@@ -26094,6 +26036,7 @@ class PEAR_PackageFile_v2_Validator
                     $srcinfo['inheritance'][$class];
             }
         }
+
         foreach ($srcinfo['declared_methods'] as $class => $methods) {
             foreach ($methods as $method) {
                 $function = "$class::$method";
@@ -26102,6 +26045,7 @@ class PEAR_PackageFile_v2_Validator
                     isset($providesret[$key])) {
                     continue;
                 }
+
                 $providesret[$key] =
                     array('file'=> $file, 'type' => 'function', 'name' => $function);
             }
@@ -26112,1651 +26056,1641 @@ class PEAR_PackageFile_v2_Validator
             if ($function{0} == '_' || isset($providesret[$key])) {
                 continue;
             }
+
             if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
                 $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
             }
+
             $providesret[$key] =
                 array('file'=> $file, 'type' => 'function', 'name' => $function);
         }
-        return $providesret;
-    }
-}
-?>                                                                                                                                                                                          PEAR-1.7.2/PEAR/PackageFile/v1.php                                                                  100644    1750    1750       144516 11014312742  11461                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_PackageFile_v1, package.xml version 1.0
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v1.php,v 1.74 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-/**
- * For error handling
- */
-require_once 'PEAR/ErrorStack.php';
-
-/**
- * Error code if parsing is attempted with no xml extension
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_XML_EXT', 3);
-
-/**
- * Error code if creating the xml parser resource fails
- */
-define('PEAR_PACKAGEFILE_ERROR_CANT_MAKE_PARSER', 4);
-
-/**
- * Error code used for all sax xml parsing errors
- */
-define('PEAR_PACKAGEFILE_ERROR_PARSER_ERROR', 5);
-
-/**
- * Error code used when there is no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_NAME', 6);
-
-/**
- * Error code when a package name is not valid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_NAME', 7);
-
-/**
- * Error code used when no summary is parsed
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_SUMMARY', 8);
-
-/**
- * Error code for summaries that are more than 1 line
- */
-define('PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY', 9);
-
-/**
- * Error code used when no description is present
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION', 10);
-
-/**
- * Error code used when no license is present
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_LICENSE', 11);
-
-/**
- * Error code used when a <version> version number is not present
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_VERSION', 12);
-
-/**
- * Error code used when a <version> version number is invalid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_VERSION', 13);
-
-/**
- * Error code when release state is missing
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_STATE', 14);
-
-/**
- * Error code when release state is invalid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_STATE', 15);
-
-/**
- * Error code when release state is missing
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DATE', 16);
-
-/**
- * Error code when release state is invalid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DATE', 17);
-
-/**
- * Error code when no release notes are found
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_NOTES', 18);
-
-/**
- * Error code when no maintainers are found
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS', 19);
-
-/**
- * Error code when a maintainer has no handle
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE', 20);
-
-/**
- * Error code when a maintainer has no handle
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE', 21);
-
-/**
- * Error code when a maintainer has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME', 22);
-
-/**
- * Error code when a maintainer has no email
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL', 23);
-
-/**
- * Error code when a maintainer has no handle
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_MAINTROLE', 24);
-
-/**
- * Error code when a dependency is not a PHP dependency, but has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPNAME', 25);
-
-/**
- * Error code when a dependency has no type (pkg, php, etc.)
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE', 26);
-
-/**
- * Error code when a dependency has no relation (lt, ge, has, etc.)
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPREL', 27);
-
-/**
- * Error code when a dependency is not a 'has' relation, but has no version
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION', 28);
-
-/**
- * Error code when a dependency has an invalid relation
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPREL', 29);
-
-/**
- * Error code when a dependency has an invalid type
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPTYPE', 30);
-
-/**
- * Error code when a dependency has an invalid optional option
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL', 31);
-
-/**
- * Error code when a dependency is a pkg dependency, and has an invalid package name
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPNAME', 32);
-
-/**
- * Error code when a dependency has a channel="foo" attribute, and foo is not a registered channel
- */
-define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_DEPCHANNEL', 33);
-
-/**
- * Error code when rel="has" and version attribute is present.
- */
-define('PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED', 34);
-
-/**
- * Error code when type="php" and dependency name is present
- */
-define('PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED', 35);
-
-/**
- * Error code when a configure option has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_CONFNAME', 36);
-
-/**
- * Error code when a configure option has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT', 37);
-
-/**
- * Error code when a file in the filelist has an invalid role
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE', 38);
-
-/**
- * Error code when a file in the filelist has no role
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_FILEROLE', 39);
-
-/**
- * Error code when analyzing a php source file that has parse errors
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE', 40);
-
-/**
- * Error code when analyzing a php source file reveals a source element
- * without a package name prefix
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX', 41);
-
-/**
- * Error code when an unknown channel is specified
- */
-define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_CHANNEL', 42);
-
-/**
- * Error code when no files are found in the filelist
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_FILES', 43);
-
-/**
- * Error code when a file is not valid php according to _analyzeSourceCode()
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_FILE', 44);
-
-/**
- * Error code when the channel validator returns an error or warning
- */
-define('PEAR_PACKAGEFILE_ERROR_CHANNELVAL', 45);
-
-/**
- * Error code when a php5 package is packaged in php4 (analysis doesn't work)
- */
-define('PEAR_PACKAGEFILE_ERROR_PHP5', 46);
-
-/**
- * Error code when a file is listed in package.xml but does not exist
- */
-define('PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND', 47);
-
-/**
- * Error code when a <dep type="php" rel="not"... is encountered (use rel="ne")
- */
-define('PEAR_PACKAGEFILE_PHP_NO_NOT', 48);
-
-/**
- * Error code when a package.xml contains non-ISO-8859-1 characters
- */
-define('PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS', 49);
-
-/**
- * Error code when a dependency is not a 'has' relation, but has no version
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION', 50);
-
-/**
- * Error code when a package has no lead developer
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_LEAD', 51);
-
-/**
- * Error code when a filename begins with "."
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
-/**
- * package.xml encapsulator
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_PackageFile_v1
-{
-    /**
-     * @access private
-     * @var PEAR_ErrorStack
-     * @access private
-     */
-    var $_stack;
-
-    /**
-     * A registry object, used to access the package name validation regex for non-standard channels
-     * @var PEAR_Registry
-     * @access private
-     */
-    var $_registry;
-
-    /**
-     * An object that contains a log method that matches PEAR_Common::log's signature
-     * @var object
-     * @access private
-     */
-    var $_logger;
-
-    /**
-     * Parsed package information
-     * @var array
-     * @access private
-     */
-    var $_packageInfo;
-
-    /**
-     * path to package.xml
-     * @var string
-     * @access private
-     */
-    var $_packageFile;
-
-    /**
-     * path to package .tgz or false if this is a local/extracted package.xml
-     * @var string
-     * @access private
-     */
-    var $_archiveFile;
-
-    /**
-     * @var int
-     * @access private
-     */
-    var $_isValid = 0;
-
-    /**
-     * Determines whether this packagefile was initialized only with partial package info
-     *
-     * If this package file was constructed via parsing REST, it will only contain
-     *
-     * - package name
-     * - channel name
-     * - dependencies 
-     * @var boolean
-     * @access private
-     */
-    var $_incomplete = true;
-
-    /**
-     * @param bool determines whether to return a PEAR_Error object, or use the PEAR_ErrorStack
-     * @param string Name of Error Stack class to use.
-     */
-    function PEAR_PackageFile_v1()
-    {
-        $this->_stack = &new PEAR_ErrorStack('PEAR_PackageFile_v1');
-        $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
-        $this->_isValid = 0;
-    }
-
-    function installBinary($installer)
-    {
-        return false;
-    }
-
-    function isExtension($name)
-    {
-        return false;
-    }
-
-    function setConfig(&$config)
-    {
-        $this->_config = &$config;
-        $this->_registry = &$config->getRegistry();
-    }
-
-    function setRequestedGroup()
-    {
-        // placeholder
-    }
-
-    /**
-     * For saving in the registry.
-     *
-     * Set the last version that was installed
-     * @param string
-     */
-    function setLastInstalledVersion($version)
-    {
-        $this->_packageInfo['_lastversion'] = $version;
-    }
-
-    /**
-     * @return string|false
-     */
-    function getLastInstalledVersion()
-    {
-        if (isset($this->_packageInfo['_lastversion'])) {
-            return $this->_packageInfo['_lastversion'];
-        }
-        return false;
-    }
-
-    function getInstalledBinary()
-    {
-        return false;
-    }
-
-    function listPostinstallScripts()
-    {
-        return false;
-    }
-
-    function initPostinstallScripts()
-    {
-        return false;
-    }
-
-    function setLogger(&$logger)
-    {
-        if ($logger && (!is_object($logger) || !method_exists($logger, 'log'))) {
-            return PEAR::raiseError('Logger must be compatible with PEAR_Common::log');
-        }
-        $this->_logger = &$logger;
-    }
-
-    function setPackagefile($file, $archive = false)
-    {
-        $this->_packageFile = $file;
-        $this->_archiveFile = $archive ? $archive : $file;
-    }
-
-    function getPackageFile()
-    {
-        return isset($this->_packageFile) ? $this->_packageFile : false;
-    }
-
-    function getPackageType()
-    {
-        return 'php';
-    }
-
-    function getArchiveFile()
-    {
-        return $this->_archiveFile;
-    }
-
-    function packageInfo($field)
-    {
-        if (!is_string($field) || empty($field) ||
-            !isset($this->_packageInfo[$field])) {
-            return false;
-        }
-        return $this->_packageInfo[$field];
-    }
-
-    function setDirtree($path)
-    {
-        if (!isset($this->_packageInfo['dirtree'])) {
-            $this->_packageInfo['dirtree'] = array();
-        }
-        $this->_packageInfo['dirtree'][$path] = true;
-    }
-
-    function getDirtree()
-    {
-        if (isset($this->_packageInfo['dirtree']) && count($this->_packageInfo['dirtree'])) {
-            return $this->_packageInfo['dirtree'];
-        }
-        return false;
-    }
-
-    function resetDirtree()
-    {
-        unset($this->_packageInfo['dirtree']);
-    }
-
-    function fromArray($pinfo)
-    {
-        $this->_incomplete = false;
-        $this->_packageInfo = $pinfo;
-    }
-
-    function isIncomplete()
-    {
-        return $this->_incomplete;
-    }
-
-    function getChannel()
-    {
-        return 'pear.php.net';
-    }
-
-    function getUri()
-    {
-        return false;
-    }
-
-    function getTime()
-    {
-        return false;
-    }
-
-    function getExtends()
-    {
-        if (isset($this->_packageInfo['extends'])) {
-            return $this->_packageInfo['extends'];
-        }
-        return false;
-    }
-
-    /**
-     * @return array
-     */
-    function toArray()
-    {
-        if (!$this->validate(PEAR_VALIDATE_NORMAL)) {
-            return false;
-        }
-        return $this->getArray();
-    }
-
-    function getArray()
-    {
-        return $this->_packageInfo;
-    }
-
-    function getName()
-    {
-        return $this->getPackage();
-    }
-
-    function getPackage()
-    {
-        if (isset($this->_packageInfo['package'])) {
-            return $this->_packageInfo['package'];
-        }
-        return false;
-    }
-
-    /**
-     * WARNING - don't use this unless you know what you are doing
-     */
-    function setRawPackage($package)
-    {
-        $this->_packageInfo['package'] = $package;
-    }
-
-    function setPackage($package)
-    {
-        $this->_packageInfo['package'] = $package;
-        $this->_isValid = false;
-    }
-
-    function getVersion()
-    {
-        if (isset($this->_packageInfo['version'])) {
-            return $this->_packageInfo['version'];
-        }
-        return false;
-    }
-
-    function setVersion($version)
-    {
-        $this->_packageInfo['version'] = $version;
-        $this->_isValid = false;
-    }
-
-    function clearMaintainers()
-    {
-        unset($this->_packageInfo['maintainers']);
-    }
-
-    function getMaintainers()
-    {
-        if (isset($this->_packageInfo['maintainers'])) {
-            return $this->_packageInfo['maintainers'];
-        }
-        return false;
-    }
-
-    /**
-     * Adds a new maintainer - no checking of duplicates is performed, use
-     * updatemaintainer for that purpose.
-     */
-    function addMaintainer($role, $handle, $name, $email)
-    {
-        $this->_packageInfo['maintainers'][] =
-            array('handle' => $handle, 'role' => $role, 'email' => $email, 'name' => $name);
-        $this->_isValid = false;
-    }
-
-    function updateMaintainer($role, $handle, $name, $email)
-    {
-        $found = false;
-        if (!isset($this->_packageInfo['maintainers']) ||
-              !is_array($this->_packageInfo['maintainers'])) {
-            return $this->addMaintainer($role, $handle, $name, $email);
-        }
-        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
-            if ($maintainer['handle'] == $handle) {
-                $found = $i;
-                break;
-            }
-        }
-        if ($found !== false) {
-            unset($this->_packageInfo['maintainers'][$found]);
-            $this->_packageInfo['maintainers'] =
-                array_values($this->_packageInfo['maintainers']);
-        }
-        $this->addMaintainer($role, $handle, $name, $email);
-    }
-
-    function deleteMaintainer($handle)
-    {
-        $found = false;
-        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
-            if ($maintainer['handle'] == $handle) {
-                $found = $i;
-                break;
-            }
-        }
-        if ($found !== false) {
-            unset($this->_packageInfo['maintainers'][$found]);
-            $this->_packageInfo['maintainers'] =
-                array_values($this->_packageInfo['maintainers']);
-            return true;
-        }
-        return false;
-    }
-
-    function getState()
-    {
-        if (isset($this->_packageInfo['release_state'])) {
-            return $this->_packageInfo['release_state'];
-        }
-        return false;
-    }
-
-    function setRawState($state)
-    {
-        $this->_packageInfo['release_state'] = $state;
-    }
-
-    function setState($state)
-    {
-        $this->_packageInfo['release_state'] = $state;
-        $this->_isValid = false;
-    }
-
-    function getDate()
-    {
-        if (isset($this->_packageInfo['release_date'])) {
-            return $this->_packageInfo['release_date'];
-        }
-        return false;
-    }
-
-    function setDate($date)
-    {
-        $this->_packageInfo['release_date'] = $date;
-        $this->_isValid = false;
-    }
-
-    function getLicense()
-    {
-        if (isset($this->_packageInfo['release_license'])) {
-            return $this->_packageInfo['release_license'];
-        }
-        return false;
-    }
-
-    function setLicense($date)
-    {
-        $this->_packageInfo['release_license'] = $date;
-        $this->_isValid = false;
-    }
-
-    function getSummary()
-    {
-        if (isset($this->_packageInfo['summary'])) {
-            return $this->_packageInfo['summary'];
-        }
-        return false;
-    }
-
-    function setSummary($summary)
-    {
-        $this->_packageInfo['summary'] = $summary;
-        $this->_isValid = false;
-    }
-
-    function getDescription()
-    {
-        if (isset($this->_packageInfo['description'])) {
-            return $this->_packageInfo['description'];
-        }
-        return false;
-    }
-
-    function setDescription($desc)
-    {
-        $this->_packageInfo['description'] = $desc;
-        $this->_isValid = false;
-    }
-
-    function getNotes()
-    {
-        if (isset($this->_packageInfo['release_notes'])) {
-            return $this->_packageInfo['release_notes'];
-        }
-        return false;
-    }
-
-    function setNotes($notes)
-    {
-        $this->_packageInfo['release_notes'] = $notes;
-        $this->_isValid = false;
-    }
-
-    function getDeps()
-    {
-        if (isset($this->_packageInfo['release_deps'])) {
-            return $this->_packageInfo['release_deps'];
-        }
-        return false;
-    }
-
-    /**
-     * Reset dependencies prior to adding new ones
-     */
-    function clearDeps()
-    {
-        unset($this->_packageInfo['release_deps']);
-    }
-
-    function addPhpDep($version, $rel)
-    {
-        $this->_isValid = false;
-        $this->_packageInfo['release_deps'][] =
-            array('type' => 'php',
-                  'rel' => $rel,
-                  'version' => $version);
-    }
-
-    function addPackageDep($name, $version, $rel, $optional = 'no')
-    {
-        $this->_isValid = false;
-        $dep =
-            array('type' => 'pkg',
-                  'name' => $name,
-                  'rel' => $rel,
-                  'optional' => $optional);
-        if ($rel != 'has' && $rel != 'not') {
-            $dep['version'] = $version;
-        }
-        $this->_packageInfo['release_deps'][] = $dep;
-    }
-
-    function addExtensionDep($name, $version, $rel, $optional = 'no')
-    {
-        $this->_isValid = false;
-        $this->_packageInfo['release_deps'][] =
-            array('type' => 'ext',
-                  'name' => $name,
-                  'rel' => $rel,
-                  'version' => $version,
-                  'optional' => $optional);
-    }
-
-    /**
-     * WARNING - do not use this function directly unless you know what you're doing
-     */
-    function setDeps($deps)
-    {
-        $this->_packageInfo['release_deps'] = $deps;
-    }
-
-    function hasDeps()
-    {
-        return isset($this->_packageInfo['release_deps']) &&
-            count($this->_packageInfo['release_deps']);
-    }
-
-    function getDependencyGroup($group)
-    {
-        return false;
-    }
-
-    function isCompatible($pf)
-    {
-        return false;
-    }
-
-    function isSubpackageOf($p)
-    {
-        return $p->isSubpackage($this);
-    }
-
-    function isSubpackage($p)
-    {
-        return false;
-    }
-
-    function dependsOn($package, $channel)
-    {
-        if (strtolower($channel) != 'pear.php.net') {
-            return false;
-        }
-        if (!($deps = $this->getDeps())) {
-            return false;
-        }
-        foreach ($deps as $dep) {
-            if ($dep['type'] != 'pkg') {
-                continue;
-            }
-            if (strtolower($dep['name']) == strtolower($package)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    function getConfigureOptions()
-    {
-        if (isset($this->_packageInfo['configure_options'])) {
-            return $this->_packageInfo['configure_options'];
-        }
-        return false;
-    }
-
-    function hasConfigureOptions()
-    {
-        return isset($this->_packageInfo['configure_options']) &&
-            count($this->_packageInfo['configure_options']);
-    }
-
-    function addConfigureOption($name, $prompt, $default = false)
-    {
-        $o = array('name' => $name, 'prompt' => $prompt);
-        if ($default !== false) {
-            $o['default'] = $default;
-        }
-        if (!isset($this->_packageInfo['configure_options'])) {
-            $this->_packageInfo['configure_options'] = array();
-        }
-        $this->_packageInfo['configure_options'][] = $o;
-    }
-
-    function clearConfigureOptions()
-    {
-        unset($this->_packageInfo['configure_options']);
-    }
-
-    function getProvides()
-    {
-        if (isset($this->_packageInfo['provides'])) {
-            return $this->_packageInfo['provides'];
-        }
-        return false;
-    }
-
-    function getProvidesExtension()
-    {
-        return false;
-    }
-
-    function addFile($dir, $file, $attrs)
-    {
-        $dir = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'), $dir);
-        if ($dir == '/' || $dir == '') {
-            $dir = '';
-        } else {
-            $dir .= '/';
-        }
-        $file = $dir . $file;
-        $file = preg_replace('![\\/]+!', '/', $file);
-        $this->_packageInfo['filelist'][$file] = $attrs;
-    }
-
-    function getInstallationFilelist()
-    {
-        return $this->getFilelist();
-    }
-
-    function getFilelist()
-    {
-        if (isset($this->_packageInfo['filelist'])) {
-            return $this->_packageInfo['filelist'];
-        }
-        return false;
-    }
-
-    function setFileAttribute($file, $attr, $value)
-    {
-        $this->_packageInfo['filelist'][$file][$attr] = $value;
-    }
-
-    function resetFilelist()
-    {
-        $this->_packageInfo['filelist'] = array();
-    }
-
-    function setInstalledAs($file, $path)
-    {
-        if ($path) {
-            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
-        }
-        unset($this->_packageInfo['filelist'][$file]['installed_as']);
-    }
-
-    function installedFile($file, $atts)
-    {
-        if (isset($this->_packageInfo['filelist'][$file])) {
-            $this->_packageInfo['filelist'][$file] =
-                array_merge($this->_packageInfo['filelist'][$file], $atts);
-        } else {
-            $this->_packageInfo['filelist'][$file] = $atts;
-        }
-    }
-
-    function getChangelog()
-    {
-        if (isset($this->_packageInfo['changelog'])) {
-            return $this->_packageInfo['changelog'];
-        }
-        return false;
-    }
-
-    function getPackagexmlVersion()
-    {
-        return '1.0';
-    }
-
-    /**
-     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
-     * @param boolean determines whether to purge the error stack after retrieving
-     * @return array
-     */
-    function getValidationWarnings($purge = true)
-    {
-        return $this->_stack->getErrors($purge);
-    }
-
-    // }}}
-    /**
-     * Validation error.  Also marks the object contents as invalid
-     * @param error code
-     * @param array error information
-     * @access private
-     */
-    function _validateError($code, $params = array())
-    {
-        $this->_stack->push($code, 'error', $params, false, false, debug_backtrace());
-        $this->_isValid = false;
-    }
-
-    /**
-     * Validation warning.  Does not mark the object contents invalid.
-     * @param error code
-     * @param array error information
-     * @access private
-     */
-    function _validateWarning($code, $params = array())
-    {
-        $this->_stack->push($code, 'warning', $params, false, false, debug_backtrace());
-    }
-
-    /**
-     * @param integer error code
-     * @access protected
-     */
-    function _getErrorMessage()
-    {
-        return array(
-                PEAR_PACKAGEFILE_ERROR_NO_NAME =>
-                    'Missing Package Name',
-                PEAR_PACKAGEFILE_ERROR_NO_SUMMARY =>
-                    'No summary found',
-                PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY =>
-                    'Summary should be on one line',
-                PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION =>
-                    'Missing description',
-                PEAR_PACKAGEFILE_ERROR_NO_LICENSE =>
-                    'Missing license',
-                PEAR_PACKAGEFILE_ERROR_NO_VERSION =>
-                    'No release version found',
-                PEAR_PACKAGEFILE_ERROR_NO_STATE =>
-                    'No release state found',
-                PEAR_PACKAGEFILE_ERROR_NO_DATE =>
-                    'No release date found',
-                PEAR_PACKAGEFILE_ERROR_NO_NOTES =>
-                    'No release notes found',
-                PEAR_PACKAGEFILE_ERROR_NO_LEAD =>
-                    'Package must have at least one lead maintainer',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS =>
-                    'No maintainers found, at least one must be defined',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE =>
-                    'Maintainer %index% has no handle (user ID at channel server)',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE =>
-                    'Maintainer %index% has no role',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME =>
-                    'Maintainer %index% has no name',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL =>
-                    'Maintainer %index% has no email',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPNAME =>
-                    'Dependency %index% is not a php dependency, and has no name',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPREL =>
-                    'Dependency %index% has no relation (rel)',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE =>
-                    'Dependency %index% has no type',
-                PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED =>
-                    'PHP Dependency %index% has a name attribute of "%name%" which will be' .
-                        ' ignored!',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION =>
-                    'Dependency %index% is not a rel="has" or rel="not" dependency, ' .
-                        'and has no version',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION =>
-                    'Dependency %index% is a type="php" dependency, ' .
-                        'and has no version',
-                PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED =>
-                    'Dependency %index% is a rel="%rel%" dependency, versioning is ignored',
-                PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL =>
-                    'Dependency %index% has invalid optional value "%opt%", should be yes or no',
-                PEAR_PACKAGEFILE_PHP_NO_NOT =>
-                    'Dependency %index%: php dependencies cannot use "not" rel, use "ne"' .
-                        ' to exclude specific versions',
-                PEAR_PACKAGEFILE_ERROR_NO_CONFNAME =>
-                    'Configure Option %index% has no name',
-                PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT =>
-                    'Configure Option %index% has no prompt',
-                PEAR_PACKAGEFILE_ERROR_NO_FILES =>
-                    'No files in <filelist> section of package.xml',
-                PEAR_PACKAGEFILE_ERROR_NO_FILEROLE =>
-                    'File "%file%" has no role, expecting one of "%roles%"',
-                PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE =>
-                    'File "%file%" has invalid role "%role%", expecting one of "%roles%"',
-                PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME =>
-                    'File "%file%" cannot start with ".", cannot package or install',
-                PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE =>
-                    'Parser error: invalid PHP found in file "%file%"',
-                PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX =>
-                    'in %file%: %type% "%name%" not prefixed with package name "%package%"',
-                PEAR_PACKAGEFILE_ERROR_INVALID_FILE =>
-                    'Parser error: invalid PHP file "%file%"',
-                PEAR_PACKAGEFILE_ERROR_CHANNELVAL =>
-                    'Channel validator error: field "%field%" - %reason%',
-                PEAR_PACKAGEFILE_ERROR_PHP5 =>
-                    'Error, PHP5 token encountered in %file%, analysis should be in PHP5',
-                PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND =>
-                    'File "%file%" in package.xml does not exist',
-                PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS =>
-                    'Package.xml contains non-ISO-8859-1 characters, and may not validate',
-            );
-    }
-
-    /**
-     * Validate XML package definition file.
-     *
-     * @access public
-     * @return boolean
-     */
-    function validate($state = PEAR_VALIDATE_NORMAL, $nofilechecking = false)
-    {
-        if (($this->_isValid & $state) == $state) {
-            return true;
-        }
-        $this->_isValid = true;
-        $info = $this->_packageInfo;
-        if (empty($info['package'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NAME);
-            $this->_packageName = $pn = 'unknown';
-        } else {
-            $this->_packageName = $pn = $info['package'];
-        }
-
-        if (empty($info['summary'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_SUMMARY);
-        } elseif (strpos(trim($info['summary']), "\n") !== false) {
-            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY,
-                array('summary' => $info['summary']));
-        }
-        if (empty($info['description'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION);
-        }
-        if (empty($info['release_license'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LICENSE);
-        }
-        if (empty($info['version'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_VERSION);
-        }
-        if (empty($info['release_state'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_STATE);
-        }
-        if (empty($info['release_date'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DATE);
-        }
-        if (empty($info['release_notes'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NOTES);
-        }
-        if (empty($info['maintainers'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS);
-        } else {
-            $haslead = false;
-            $i = 1;
-            foreach ($info['maintainers'] as $m) {
-                if (empty($m['handle'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE,
-                        array('index' => $i));
-                }
-                if (empty($m['role'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE,
-                        array('index' => $i, 'roles' => PEAR_Common::getUserRoles()));
-                } elseif ($m['role'] == 'lead') {
-                    $haslead = true;
-                }
-                if (empty($m['name'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME,
-                        array('index' => $i));
-                }
-                if (empty($m['email'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL,
-                        array('index' => $i));
-                }
-                $i++;
-            }
-            if (!$haslead) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LEAD);
-            }
-        }
-        if (!empty($info['release_deps'])) {
-            $i = 1;
-            foreach ($info['release_deps'] as $d) {
-                if (!isset($d['type']) || empty($d['type'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE,
-                        array('index' => $i, 'types' => PEAR_Common::getDependencyTypes()));
-                    continue;
-                }
-                if (!isset($d['rel']) || empty($d['rel'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPREL,
-                        array('index' => $i, 'rels' => PEAR_Common::getDependencyRelations()));
-                    continue;
-                }
-                if (!empty($d['optional'])) {
-                    if (!in_array($d['optional'], array('yes', 'no'))) {
-                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL,
-                            array('index' => $i, 'opt' => $d['optional']));
-                    }
-                }
-                if ($d['rel'] != 'has' && $d['rel'] != 'not' && empty($d['version'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION,
-                        array('index' => $i));
-                } elseif (($d['rel'] == 'has' || $d['rel'] == 'not') && !empty($d['version'])) {
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED,
-                        array('index' => $i, 'rel' => $d['rel']));
-                }
-                if ($d['type'] == 'php' && !empty($d['name'])) {
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED,
-                        array('index' => $i, 'name' => $d['name']));
-                } elseif ($d['type'] != 'php' && empty($d['name'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPNAME,
-                        array('index' => $i));
-                }
-                if ($d['type'] == 'php' && empty($d['version'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION,
-                        array('index' => $i));
-                }
-                if (($d['rel'] == 'not') && ($d['type'] == 'php')) {
-                    $this->_validateError(PEAR_PACKAGEFILE_PHP_NO_NOT,
-                        array('index' => $i));
-                }
-                $i++;
-            }
-        }
-        if (!empty($info['configure_options'])) {
-            $i = 1;
-            foreach ($info['configure_options'] as $c) {
-                if (empty($c['name'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFNAME,
-                        array('index' => $i));
-                }
-                if (empty($c['prompt'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT,
-                        array('index' => $i));
-                }
-                $i++;
-            }
-        }
-        if (empty($info['filelist'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILES);
-            $errors[] = 'no files';
-        } else {
-            foreach ($info['filelist'] as $file => $fa) {
-                if (empty($fa['role'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILEROLE,
-                        array('file' => $file, 'roles' => PEAR_Common::getFileRoles()));
-                    continue;
-                } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE,
-                        array('file' => $file, 'role' => $fa['role'], 'roles' => PEAR_Common::getFileRoles()));
-                }
-                if (preg_match('~/\.\.?(/|\\z)|^\.\.?/~', str_replace('\\', '/', $file))) {
-                    // file contains .. parent directory or . cur directory references
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
-                        array('file' => $file));
-                }
-                if (isset($fa['install-as']) &&
-                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
-                                 str_replace('\\', '/', $fa['install-as']))) {
-                    // install-as contains .. parent directory or . cur directory references
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
-                        array('file' => $file . ' [installed as ' . $fa['install-as'] . ']'));
-                }
-                if (isset($fa['baseinstalldir']) &&
-                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
-                                 str_replace('\\', '/', $fa['baseinstalldir']))) {
-                    // install-as contains .. parent directory or . cur directory references
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
-                        array('file' => $file . ' [baseinstalldir ' . $fa['baseinstalldir'] . ']'));
-                }
-            }
-        }
-        if (isset($this->_registry) && $this->_isValid) {
-            $chan = $this->_registry->getChannel('pear.php.net');
-            if (PEAR::isError($chan)) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $chan->getMessage());
-                return $this->_isValid = 0;
-            }
-            $validator = $chan->getValidationObject();
-            $validator->setPackageFile($this);
-            $validator->validate($state);
-            $failures = $validator->getFailures();
-            foreach ($failures['errors'] as $error) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $error);
-            }
-            foreach ($failures['warnings'] as $warning) {
-                $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $warning);
-            }
-        }
-        if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$nofilechecking) {
-            if ($this->_analyzePhpFiles()) {
-                $this->_isValid = true;
-            }
-        }
-        if ($this->_isValid) {
-            return $this->_isValid = $state;
-        }
-        return $this->_isValid = 0;
-    }
-
-    function _analyzePhpFiles()
-    {
-        if (!$this->_isValid) {
-            return false;
-        }
-        if (!isset($this->_packageFile)) {
-            return false;
-        }
-        $dir_prefix = dirname($this->_packageFile);
-        $common = new PEAR_Common;
-        $log = isset($this->_logger) ? array(&$this->_logger, 'log') :
-            array($common, 'log');
-        $info = $this->getFilelist();
-        foreach ($info as $file => $fa) {
-            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $file)) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND,
-                    array('file' => realpath($dir_prefix) . DIRECTORY_SEPARATOR . $file));
-                continue;
-            }
-            if ($fa['role'] == 'php' && $dir_prefix) {
-                call_user_func_array($log, array(1, "Analyzing $file"));
-                $srcinfo = $this->_analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
-                if ($srcinfo) {
-                    $this->_buildProvidesArray($srcinfo);
-                }
-            }
-        }
-        $this->_packageName = $pn = $this->getPackage();
-        $pnl = strlen($pn);
-        if (isset($this->_packageInfo['provides'])) {
-            foreach ((array) $this->_packageInfo['provides'] as $key => $what) {
-                if (isset($what['explicit'])) {
-                    // skip conformance checks if the provides entry is
-                    // specified in the package.xml file
-                    continue;
-                }
-                extract($what);
-                if ($type == 'class') {
-                    if (!strncasecmp($name, $pn, $pnl)) {
-                        continue;
-                    }
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
-                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
-                } elseif ($type == 'function') {
-                    if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
-                        continue;
-                    }
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
-                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
-                }
-            }
-        }
-        return $this->_isValid;
-    }
-
-    /**
-     * Get the default xml generator object
-     *
-     * @return PEAR_PackageFile_Generator_v1
-     */
-    function &getDefaultGenerator()
-    {
-        if (!class_exists('PEAR_PackageFile_Generator_v1')) {
-            require_once 'PEAR/PackageFile/Generator/v1.php';
-        }
-        $a = &new PEAR_PackageFile_Generator_v1($this);
-        return $a;
-    }
-
-    /**
-     * Get the contents of a file listed within the package.xml
-     * @param string
-     * @return string
-     */
-    function getFileContents($file)
-    {
-        if ($this->_archiveFile == $this->_packageFile) { // unpacked
-            $dir = dirname($this->_packageFile);
-            $file = $dir . DIRECTORY_SEPARATOR . $file;
-            $file = str_replace(array('/', '\\'),
-                array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
-            if (file_exists($file) && is_readable($file)) {
-                return implode('', file($file));
-            }
-        } else { // tgz
-            if (!class_exists('Archive_Tar')) {
-                require_once 'Archive/Tar.php';
-            }
-            $tar = &new Archive_Tar($this->_archiveFile);
-            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
-            if ($file != 'package.xml' && $file != 'package2.xml') {
-                $file = $this->getPackage() . '-' . $this->getVersion() . '/' . $file;
-            }
-            $file = $tar->extractInString($file);
-            $tar->popErrorHandling();
-            if (PEAR::isError($file)) {
-                return PEAR::raiseError("Cannot locate file '$file' in archive");
-            }
-            return $file;
-        }
-    }
 
-    // {{{ analyzeSourceCode()
-    /**
-     * Analyze the source code of the given PHP file
-     *
-     * @param  string Filename of the PHP file
-     * @return mixed
-     * @access private
-     */
-    function _analyzeSourceCode($file)
-    {
-        if (!function_exists("token_get_all")) {
-            return false;
-        }
-        if (!defined('T_DOC_COMMENT')) {
-            define('T_DOC_COMMENT', T_COMMENT);
-        }
-        if (!defined('T_INTERFACE')) {
-            define('T_INTERFACE', -1);
-        }
-        if (!defined('T_IMPLEMENTS')) {
-            define('T_IMPLEMENTS', -1);
-        }
-        if (!$fp = @fopen($file, "r")) {
-            return false;
-        }
-        fclose($fp);
-        $contents = file_get_contents($file);
-        $tokens = token_get_all($contents);
-/*
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            @list($token, $data) = $tokens[$i];
-            if (is_string($token)) {
-                var_dump($token);
-            } else {
-                print token_name($token) . ' ';
-                var_dump(rtrim($data));
-            }
-        }
-*/
-        $look_for = 0;
-        $paren_level = 0;
-        $bracket_level = 0;
-        $brace_level = 0;
-        $lastphpdoc = '';
-        $current_class = '';
-        $current_interface = '';
-        $current_class_level = -1;
-        $current_function = '';
-        $current_function_level = -1;
-        $declared_classes = array();
-        $declared_interfaces = array();
-        $declared_functions = array();
-        $declared_methods = array();
-        $used_classes = array();
-        $used_functions = array();
-        $extends = array();
-        $implements = array();
-        $nodeps = array();
-        $inquote = false;
-        $interface = false;
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            if (is_array($tokens[$i])) {
-                list($token, $data) = $tokens[$i];
-            } else {
-                $token = $tokens[$i];
-                $data = '';
-            }
-            if ($inquote) {
-                if ($token != '"' && $token != T_END_HEREDOC) {
-                    continue;
-                } else {
-                    $inquote = false;
-                    continue;
-                }
-            }
-            switch ($token) {
-                case T_WHITESPACE :
-                    continue;
-                case ';':
-                    if ($interface) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    break;
-                case '"':
-                case T_START_HEREDOC:
-                    $inquote = true;
-                    break;
-                case T_CURLY_OPEN:
-                case T_DOLLAR_OPEN_CURLY_BRACES:
-                case '{': $brace_level++; continue 2;
-                case '}':
-                    $brace_level--;
-                    if ($current_class_level == $brace_level) {
-                        $current_class = '';
-                        $current_class_level = -1;
-                    }
-                    if ($current_function_level == $brace_level) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    continue 2;
-                case '[': $bracket_level++; continue 2;
-                case ']': $bracket_level--; continue 2;
-                case '(': $paren_level++;   continue 2;
-                case ')': $paren_level--;   continue 2;
-                case T_INTERFACE:
-                    $interface = true;
-                case T_CLASS:
-                    if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
-                            array('file' => $file));
-                        return false;
-                    }
-                case T_FUNCTION:
-                case T_NEW:
-                case T_EXTENDS:
-                case T_IMPLEMENTS:
-                    $look_for = $token;
-                    continue 2;
-                case T_STRING:
-                    if (version_compare(zend_version(), '2.0', '<')) {
-                        if (in_array(strtolower($data),
-                            array('public', 'private', 'protected', 'abstract',
-                                  'interface', 'implements', 'throw') 
-                                 )) {
-                            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_PHP5,
-                                array($file));
-                        }
-                    }
-                    if ($look_for == T_CLASS) {
-                        $current_class = $data;
-                        $current_class_level = $brace_level;
-                        $declared_classes[] = $current_class;
-                    } elseif ($look_for == T_INTERFACE) {
-                        $current_interface = $data;
-                        $current_class_level = $brace_level;
-                        $declared_interfaces[] = $current_interface;
-                    } elseif ($look_for == T_IMPLEMENTS) {
-                        $implements[$current_class] = $data;
-                    } elseif ($look_for == T_EXTENDS) {
-                        $extends[$current_class] = $data;
-                    } elseif ($look_for == T_FUNCTION) {
-                        if ($current_class) {
-                            $current_function = "$current_class::$data";
-                            $declared_methods[$current_class][] = $data;
-                        } elseif ($current_interface) {
-                            $current_function = "$current_interface::$data";
-                            $declared_methods[$current_interface][] = $data;
-                        } else {
-                            $current_function = $data;
-                            $declared_functions[] = $current_function;
-                        }
-                        $current_function_level = $brace_level;
-                        $m = array();
-                    } elseif ($look_for == T_NEW) {
-                        $used_classes[$data] = true;
-                    }
-                    $look_for = 0;
-                    continue 2;
-                case T_VARIABLE:
-                    $look_for = 0;
-                    continue 2;
-                case T_DOC_COMMENT:
-                case T_COMMENT:
-                    if (preg_match('!^/\*\*\s!', $data)) {
-                        $lastphpdoc = $data;
-                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
-                            $nodeps = array_merge($nodeps, $m[1]);
-                        }
-                    }
-                    continue 2;
-                case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
-                            array('file' => $file));
-                        return false;
-                    }
-                    $class = $tokens[$i - 1][1];
-                    if (strtolower($class) != 'parent') {
-                        $used_classes[$class] = true;
-                    }
-                    continue 2;
-            }
-        }
-        return array(
-            "source_file" => $file,
-            "declared_classes" => $declared_classes,
-            "declared_interfaces" => $declared_interfaces,
-            "declared_methods" => $declared_methods,
-            "declared_functions" => $declared_functions,
-            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
-            "inheritance" => $extends,
-            "implements" => $implements,
-            );
-    }
-
-    /**
-     * Build a "provides" array from data returned by
-     * analyzeSourceCode().  The format of the built array is like
-     * this:
-     *
-     *  array(
-     *    'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
-     *    ...
-     *  )
-     *
-     *
-     * @param array $srcinfo array with information about a source file
-     * as returned by the analyzeSourceCode() method.
-     *
-     * @return void
-     *
-     * @access private
-     *
-     */
-    function _buildProvidesArray($srcinfo)
-    {
-        if (!$this->_isValid) {
-            return false;
-        }
-        $file = basename($srcinfo['source_file']);
-        $pn = $this->getPackage();
-        $pnl = strlen($pn);
-        foreach ($srcinfo['declared_classes'] as $class) {
-            $key = "class;$class";
-            if (isset($this->_packageInfo['provides'][$key])) {
-                continue;
-            }
-            $this->_packageInfo['provides'][$key] =
-                array('file'=> $file, 'type' => 'class', 'name' => $class);
-            if (isset($srcinfo['inheritance'][$class])) {
-                $this->_packageInfo['provides'][$key]['extends'] =
-                    $srcinfo['inheritance'][$class];
-            }
-        }
-        foreach ($srcinfo['declared_methods'] as $class => $methods) {
-            foreach ($methods as $method) {
-                $function = "$class::$method";
-                $key = "function;$function";
-                if ($method{0} == '_' || !strcasecmp($method, $class) ||
-                    isset($this->_packageInfo['provides'][$key])) {
-                    continue;
-                }
-                $this->_packageInfo['provides'][$key] =
-                    array('file'=> $file, 'type' => 'function', 'name' => $function);
-            }
-        }
-
-        foreach ($srcinfo['declared_functions'] as $function) {
-            $key = "function;$function";
-            if ($function{0} == '_' || isset($this->_packageInfo['provides'][$key])) {
-                continue;
-            }
-            if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
-                $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
-            }
-            $this->_packageInfo['provides'][$key] =
-                array('file'=> $file, 'type' => 'function', 'name' => $function);
-        }
+        return $providesret;
     }
-
-    // }}}
-}
-?>
-                                                                                                                                                                                  PEAR-1.7.2/PEAR/PackageFile/v2.php                                                                  100644    1750    1750       210330 11014312742  11446                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PEAR-1.8.0/PEAR/PackageFile/v1.php                                                                  100664     764     764       147077      100664  11306                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_PackageFile_v1, package.xml version 1.0
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v1.php,v 1.75 2009/02/24 23:39:16 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * For error handling
+ */
+require_once 'PEAR/ErrorStack.php';
+
+/**
+ * Error code if parsing is attempted with no xml extension
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_XML_EXT', 3);
+
+/**
+ * Error code if creating the xml parser resource fails
+ */
+define('PEAR_PACKAGEFILE_ERROR_CANT_MAKE_PARSER', 4);
+
+/**
+ * Error code used for all sax xml parsing errors
+ */
+define('PEAR_PACKAGEFILE_ERROR_PARSER_ERROR', 5);
+
+/**
+ * Error code used when there is no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_NAME', 6);
+
+/**
+ * Error code when a package name is not valid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_NAME', 7);
+
+/**
+ * Error code used when no summary is parsed
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_SUMMARY', 8);
+
+/**
+ * Error code for summaries that are more than 1 line
+ */
+define('PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY', 9);
+
+/**
+ * Error code used when no description is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION', 10);
+
+/**
+ * Error code used when no license is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_LICENSE', 11);
+
+/**
+ * Error code used when a <version> version number is not present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_VERSION', 12);
+
+/**
+ * Error code used when a <version> version number is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_VERSION', 13);
+
+/**
+ * Error code when release state is missing
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_STATE', 14);
+
+/**
+ * Error code when release state is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_STATE', 15);
+
+/**
+ * Error code when release state is missing
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DATE', 16);
+
+/**
+ * Error code when release state is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DATE', 17);
+
+/**
+ * Error code when no release notes are found
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_NOTES', 18);
+
+/**
+ * Error code when no maintainers are found
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS', 19);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE', 20);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE', 21);
+
+/**
+ * Error code when a maintainer has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME', 22);
+
+/**
+ * Error code when a maintainer has no email
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL', 23);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_MAINTROLE', 24);
+
+/**
+ * Error code when a dependency is not a PHP dependency, but has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPNAME', 25);
+
+/**
+ * Error code when a dependency has no type (pkg, php, etc.)
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE', 26);
+
+/**
+ * Error code when a dependency has no relation (lt, ge, has, etc.)
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPREL', 27);
+
+/**
+ * Error code when a dependency is not a 'has' relation, but has no version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION', 28);
+
+/**
+ * Error code when a dependency has an invalid relation
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPREL', 29);
+
+/**
+ * Error code when a dependency has an invalid type
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPTYPE', 30);
+
+/**
+ * Error code when a dependency has an invalid optional option
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL', 31);
+
+/**
+ * Error code when a dependency is a pkg dependency, and has an invalid package name
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPNAME', 32);
+
+/**
+ * Error code when a dependency has a channel="foo" attribute, and foo is not a registered channel
+ */
+define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_DEPCHANNEL', 33);
+
+/**
+ * Error code when rel="has" and version attribute is present.
+ */
+define('PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED', 34);
+
+/**
+ * Error code when type="php" and dependency name is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED', 35);
+
+/**
+ * Error code when a configure option has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_CONFNAME', 36);
+
+/**
+ * Error code when a configure option has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT', 37);
+
+/**
+ * Error code when a file in the filelist has an invalid role
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE', 38);
+
+/**
+ * Error code when a file in the filelist has no role
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_FILEROLE', 39);
+
+/**
+ * Error code when analyzing a php source file that has parse errors
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE', 40);
+
+/**
+ * Error code when analyzing a php source file reveals a source element
+ * without a package name prefix
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX', 41);
+
+/**
+ * Error code when an unknown channel is specified
+ */
+define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_CHANNEL', 42);
+
+/**
+ * Error code when no files are found in the filelist
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_FILES', 43);
+
+/**
+ * Error code when a file is not valid php according to _analyzeSourceCode()
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILE', 44);
+
+/**
+ * Error code when the channel validator returns an error or warning
+ */
+define('PEAR_PACKAGEFILE_ERROR_CHANNELVAL', 45);
+
+/**
+ * Error code when a php5 package is packaged in php4 (analysis doesn't work)
+ */
+define('PEAR_PACKAGEFILE_ERROR_PHP5', 46);
+
+/**
+ * Error code when a file is listed in package.xml but does not exist
+ */
+define('PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND', 47);
+
+/**
+ * Error code when a <dep type="php" rel="not"... is encountered (use rel="ne")
+ */
+define('PEAR_PACKAGEFILE_PHP_NO_NOT', 48);
+
+/**
+ * Error code when a package.xml contains non-ISO-8859-1 characters
+ */
+define('PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS', 49);
+
+/**
+ * Error code when a dependency is not a 'has' relation, but has no version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION', 50);
+
+/**
+ * Error code when a package has no lead developer
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_LEAD', 51);
+
+/**
+ * Error code when a filename begins with "."
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
+/**
+ * package.xml encapsulator
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_v1
+{
+    /**
+     * @access private
+     * @var PEAR_ErrorStack
+     * @access private
+     */
+    var $_stack;
+
+    /**
+     * A registry object, used to access the package name validation regex for non-standard channels
+     * @var PEAR_Registry
+     * @access private
+     */
+    var $_registry;
+
+    /**
+     * An object that contains a log method that matches PEAR_Common::log's signature
+     * @var object
+     * @access private
+     */
+    var $_logger;
+
+    /**
+     * Parsed package information
+     * @var array
+     * @access private
+     */
+    var $_packageInfo;
+
+    /**
+     * path to package.xml
+     * @var string
+     * @access private
+     */
+    var $_packageFile;
+
+    /**
+     * path to package .tgz or false if this is a local/extracted package.xml
+     * @var string
+     * @access private
+     */
+    var $_archiveFile;
+
+    /**
+     * @var int
+     * @access private
+     */
+    var $_isValid = 0;
+
+    /**
+     * Determines whether this packagefile was initialized only with partial package info
+     *
+     * If this package file was constructed via parsing REST, it will only contain
+     *
+     * - package name
+     * - channel name
+     * - dependencies 
+     * @var boolean
+     * @access private
+     */
+    var $_incomplete = true;
+
+    /**
+     * @param bool determines whether to return a PEAR_Error object, or use the PEAR_ErrorStack
+     * @param string Name of Error Stack class to use.
+     */
+    function PEAR_PackageFile_v1()
+    {
+        $this->_stack = &new PEAR_ErrorStack('PEAR_PackageFile_v1');
+        $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
+        $this->_isValid = 0;
+    }
+
+    function installBinary($installer)
+    {
+        return false;
+    }
+
+    function isExtension($name)
+    {
+        return false;
+    }
+
+    function setConfig(&$config)
+    {
+        $this->_config = &$config;
+        $this->_registry = &$config->getRegistry();
+    }
+
+    function setRequestedGroup()
+    {
+        // placeholder
+    }
+
+    /**
+     * For saving in the registry.
+     *
+     * Set the last version that was installed
+     * @param string
+     */
+    function setLastInstalledVersion($version)
+    {
+        $this->_packageInfo['_lastversion'] = $version;
+    }
+
+    /**
+     * @return string|false
+     */
+    function getLastInstalledVersion()
+    {
+        if (isset($this->_packageInfo['_lastversion'])) {
+            return $this->_packageInfo['_lastversion'];
+        }
+        return false;
+    }
+
+    function getInstalledBinary()
+    {
+        return false;
+    }
+
+    function listPostinstallScripts()
+    {
+        return false;
+    }
+
+    function initPostinstallScripts()
+    {
+        return false;
+    }
+
+    function setLogger(&$logger)
+    {
+        if ($logger && (!is_object($logger) || !method_exists($logger, 'log'))) {
+            return PEAR::raiseError('Logger must be compatible with PEAR_Common::log');
+        }
+        $this->_logger = &$logger;
+    }
+
+    function setPackagefile($file, $archive = false)
+    {
+        $this->_packageFile = $file;
+        $this->_archiveFile = $archive ? $archive : $file;
+    }
+
+    function getPackageFile()
+    {
+        return isset($this->_packageFile) ? $this->_packageFile : false;
+    }
+
+    function getPackageType()
+    {
+        return 'php';
+    }
+
+    function getArchiveFile()
+    {
+        return $this->_archiveFile;
+    }
+
+    function packageInfo($field)
+    {
+        if (!is_string($field) || empty($field) ||
+            !isset($this->_packageInfo[$field])) {
+            return false;
+        }
+        return $this->_packageInfo[$field];
+    }
+
+    function setDirtree($path)
+    {
+        if (!isset($this->_packageInfo['dirtree'])) {
+            $this->_packageInfo['dirtree'] = array();
+        }
+        $this->_packageInfo['dirtree'][$path] = true;
+    }
+
+    function getDirtree()
+    {
+        if (isset($this->_packageInfo['dirtree']) && count($this->_packageInfo['dirtree'])) {
+            return $this->_packageInfo['dirtree'];
+        }
+        return false;
+    }
+
+    function resetDirtree()
+    {
+        unset($this->_packageInfo['dirtree']);
+    }
+
+    function fromArray($pinfo)
+    {
+        $this->_incomplete = false;
+        $this->_packageInfo = $pinfo;
+    }
+
+    function isIncomplete()
+    {
+        return $this->_incomplete;
+    }
+
+    function getChannel()
+    {
+        return 'pear.php.net';
+    }
+
+    function getUri()
+    {
+        return false;
+    }
+
+    function getTime()
+    {
+        return false;
+    }
+
+    function getExtends()
+    {
+        if (isset($this->_packageInfo['extends'])) {
+            return $this->_packageInfo['extends'];
+        }
+        return false;
+    }
+
+    /**
+     * @return array
+     */
+    function toArray()
+    {
+        if (!$this->validate(PEAR_VALIDATE_NORMAL)) {
+            return false;
+        }
+        return $this->getArray();
+    }
+
+    function getArray()
+    {
+        return $this->_packageInfo;
+    }
+
+    function getName()
+    {
+        return $this->getPackage();
+    }
+
+    function getPackage()
+    {
+        if (isset($this->_packageInfo['package'])) {
+            return $this->_packageInfo['package'];
+        }
+        return false;
+    }
+
+    /**
+     * WARNING - don't use this unless you know what you are doing
+     */
+    function setRawPackage($package)
+    {
+        $this->_packageInfo['package'] = $package;
+    }
+
+    function setPackage($package)
+    {
+        $this->_packageInfo['package'] = $package;
+        $this->_isValid = false;
+    }
+
+    function getVersion()
+    {
+        if (isset($this->_packageInfo['version'])) {
+            return $this->_packageInfo['version'];
+        }
+        return false;
+    }
+
+    function setVersion($version)
+    {
+        $this->_packageInfo['version'] = $version;
+        $this->_isValid = false;
+    }
+
+    function clearMaintainers()
+    {
+        unset($this->_packageInfo['maintainers']);
+    }
+
+    function getMaintainers()
+    {
+        if (isset($this->_packageInfo['maintainers'])) {
+            return $this->_packageInfo['maintainers'];
+        }
+        return false;
+    }
+
+    /**
+     * Adds a new maintainer - no checking of duplicates is performed, use
+     * updatemaintainer for that purpose.
+     */
+    function addMaintainer($role, $handle, $name, $email)
+    {
+        $this->_packageInfo['maintainers'][] =
+            array('handle' => $handle, 'role' => $role, 'email' => $email, 'name' => $name);
+        $this->_isValid = false;
+    }
+
+    function updateMaintainer($role, $handle, $name, $email)
+    {
+        $found = false;
+        if (!isset($this->_packageInfo['maintainers']) ||
+              !is_array($this->_packageInfo['maintainers'])) {
+            return $this->addMaintainer($role, $handle, $name, $email);
+        }
+        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
+            if ($maintainer['handle'] == $handle) {
+                $found = $i;
+                break;
+            }
+        }
+        if ($found !== false) {
+            unset($this->_packageInfo['maintainers'][$found]);
+            $this->_packageInfo['maintainers'] =
+                array_values($this->_packageInfo['maintainers']);
+        }
+        $this->addMaintainer($role, $handle, $name, $email);
+    }
+
+    function deleteMaintainer($handle)
+    {
+        $found = false;
+        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
+            if ($maintainer['handle'] == $handle) {
+                $found = $i;
+                break;
+            }
+        }
+        if ($found !== false) {
+            unset($this->_packageInfo['maintainers'][$found]);
+            $this->_packageInfo['maintainers'] =
+                array_values($this->_packageInfo['maintainers']);
+            return true;
+        }
+        return false;
+    }
+
+    function getState()
+    {
+        if (isset($this->_packageInfo['release_state'])) {
+            return $this->_packageInfo['release_state'];
+        }
+        return false;
+    }
+
+    function setRawState($state)
+    {
+        $this->_packageInfo['release_state'] = $state;
+    }
+
+    function setState($state)
+    {
+        $this->_packageInfo['release_state'] = $state;
+        $this->_isValid = false;
+    }
+
+    function getDate()
+    {
+        if (isset($this->_packageInfo['release_date'])) {
+            return $this->_packageInfo['release_date'];
+        }
+        return false;
+    }
+
+    function setDate($date)
+    {
+        $this->_packageInfo['release_date'] = $date;
+        $this->_isValid = false;
+    }
+
+    function getLicense()
+    {
+        if (isset($this->_packageInfo['release_license'])) {
+            return $this->_packageInfo['release_license'];
+        }
+        return false;
+    }
+
+    function setLicense($date)
+    {
+        $this->_packageInfo['release_license'] = $date;
+        $this->_isValid = false;
+    }
+
+    function getSummary()
+    {
+        if (isset($this->_packageInfo['summary'])) {
+            return $this->_packageInfo['summary'];
+        }
+        return false;
+    }
+
+    function setSummary($summary)
+    {
+        $this->_packageInfo['summary'] = $summary;
+        $this->_isValid = false;
+    }
+
+    function getDescription()
+    {
+        if (isset($this->_packageInfo['description'])) {
+            return $this->_packageInfo['description'];
+        }
+        return false;
+    }
+
+    function setDescription($desc)
+    {
+        $this->_packageInfo['description'] = $desc;
+        $this->_isValid = false;
+    }
+
+    function getNotes()
+    {
+        if (isset($this->_packageInfo['release_notes'])) {
+            return $this->_packageInfo['release_notes'];
+        }
+        return false;
+    }
+
+    function setNotes($notes)
+    {
+        $this->_packageInfo['release_notes'] = $notes;
+        $this->_isValid = false;
+    }
+
+    function getDeps()
+    {
+        if (isset($this->_packageInfo['release_deps'])) {
+            return $this->_packageInfo['release_deps'];
+        }
+        return false;
+    }
+
+    /**
+     * Reset dependencies prior to adding new ones
+     */
+    function clearDeps()
+    {
+        unset($this->_packageInfo['release_deps']);
+    }
+
+    function addPhpDep($version, $rel)
+    {
+        $this->_isValid = false;
+        $this->_packageInfo['release_deps'][] =
+            array('type' => 'php',
+                  'rel' => $rel,
+                  'version' => $version);
+    }
+
+    function addPackageDep($name, $version, $rel, $optional = 'no')
+    {
+        $this->_isValid = false;
+        $dep =
+            array('type' => 'pkg',
+                  'name' => $name,
+                  'rel' => $rel,
+                  'optional' => $optional);
+        if ($rel != 'has' && $rel != 'not') {
+            $dep['version'] = $version;
+        }
+        $this->_packageInfo['release_deps'][] = $dep;
+    }
+
+    function addExtensionDep($name, $version, $rel, $optional = 'no')
+    {
+        $this->_isValid = false;
+        $this->_packageInfo['release_deps'][] =
+            array('type' => 'ext',
+                  'name' => $name,
+                  'rel' => $rel,
+                  'version' => $version,
+                  'optional' => $optional);
+    }
+
+    /**
+     * WARNING - do not use this function directly unless you know what you're doing
+     */
+    function setDeps($deps)
+    {
+        $this->_packageInfo['release_deps'] = $deps;
+    }
+
+    function hasDeps()
+    {
+        return isset($this->_packageInfo['release_deps']) &&
+            count($this->_packageInfo['release_deps']);
+    }
+
+    function getDependencyGroup($group)
+    {
+        return false;
+    }
+
+    function isCompatible($pf)
+    {
+        return false;
+    }
+
+    function isSubpackageOf($p)
+    {
+        return $p->isSubpackage($this);
+    }
+
+    function isSubpackage($p)
+    {
+        return false;
+    }
+
+    function dependsOn($package, $channel)
+    {
+        if (strtolower($channel) != 'pear.php.net') {
+            return false;
+        }
+        if (!($deps = $this->getDeps())) {
+            return false;
+        }
+        foreach ($deps as $dep) {
+            if ($dep['type'] != 'pkg') {
+                continue;
+            }
+            if (strtolower($dep['name']) == strtolower($package)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    function getConfigureOptions()
+    {
+        if (isset($this->_packageInfo['configure_options'])) {
+            return $this->_packageInfo['configure_options'];
+        }
+        return false;
+    }
+
+    function hasConfigureOptions()
+    {
+        return isset($this->_packageInfo['configure_options']) &&
+            count($this->_packageInfo['configure_options']);
+    }
+
+    function addConfigureOption($name, $prompt, $default = false)
+    {
+        $o = array('name' => $name, 'prompt' => $prompt);
+        if ($default !== false) {
+            $o['default'] = $default;
+        }
+        if (!isset($this->_packageInfo['configure_options'])) {
+            $this->_packageInfo['configure_options'] = array();
+        }
+        $this->_packageInfo['configure_options'][] = $o;
+    }
+
+    function clearConfigureOptions()
+    {
+        unset($this->_packageInfo['configure_options']);
+    }
+
+    function getProvides()
+    {
+        if (isset($this->_packageInfo['provides'])) {
+            return $this->_packageInfo['provides'];
+        }
+        return false;
+    }
+
+    function getProvidesExtension()
+    {
+        return false;
+    }
+
+    function addFile($dir, $file, $attrs)
+    {
+        $dir = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'), $dir);
+        if ($dir == '/' || $dir == '') {
+            $dir = '';
+        } else {
+            $dir .= '/';
+        }
+        $file = $dir . $file;
+        $file = preg_replace('![\\/]+!', '/', $file);
+        $this->_packageInfo['filelist'][$file] = $attrs;
+    }
+
+    function getInstallationFilelist()
+    {
+        return $this->getFilelist();
+    }
+
+    function getFilelist()
+    {
+        if (isset($this->_packageInfo['filelist'])) {
+            return $this->_packageInfo['filelist'];
+        }
+        return false;
+    }
+
+    function setFileAttribute($file, $attr, $value)
+    {
+        $this->_packageInfo['filelist'][$file][$attr] = $value;
+    }
+
+    function resetFilelist()
+    {
+        $this->_packageInfo['filelist'] = array();
+    }
+
+    function setInstalledAs($file, $path)
+    {
+        if ($path) {
+            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
+        }
+        unset($this->_packageInfo['filelist'][$file]['installed_as']);
+    }
+
+    function installedFile($file, $atts)
+    {
+        if (isset($this->_packageInfo['filelist'][$file])) {
+            $this->_packageInfo['filelist'][$file] =
+                array_merge($this->_packageInfo['filelist'][$file], $atts);
+        } else {
+            $this->_packageInfo['filelist'][$file] = $atts;
+        }
+    }
+
+    function getChangelog()
+    {
+        if (isset($this->_packageInfo['changelog'])) {
+            return $this->_packageInfo['changelog'];
+        }
+        return false;
+    }
+
+    function getPackagexmlVersion()
+    {
+        return '1.0';
+    }
+
+    /**
+     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
+     * @param boolean determines whether to purge the error stack after retrieving
+     * @return array
+     */
+    function getValidationWarnings($purge = true)
+    {
+        return $this->_stack->getErrors($purge);
+    }
+
+    // }}}
+    /**
+     * Validation error.  Also marks the object contents as invalid
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateError($code, $params = array())
+    {
+        $this->_stack->push($code, 'error', $params, false, false, debug_backtrace());
+        $this->_isValid = false;
+    }
+
+    /**
+     * Validation warning.  Does not mark the object contents invalid.
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateWarning($code, $params = array())
+    {
+        $this->_stack->push($code, 'warning', $params, false, false, debug_backtrace());
+    }
+
+    /**
+     * @param integer error code
+     * @access protected
+     */
+    function _getErrorMessage()
+    {
+        return array(
+                PEAR_PACKAGEFILE_ERROR_NO_NAME =>
+                    'Missing Package Name',
+                PEAR_PACKAGEFILE_ERROR_NO_SUMMARY =>
+                    'No summary found',
+                PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY =>
+                    'Summary should be on one line',
+                PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION =>
+                    'Missing description',
+                PEAR_PACKAGEFILE_ERROR_NO_LICENSE =>
+                    'Missing license',
+                PEAR_PACKAGEFILE_ERROR_NO_VERSION =>
+                    'No release version found',
+                PEAR_PACKAGEFILE_ERROR_NO_STATE =>
+                    'No release state found',
+                PEAR_PACKAGEFILE_ERROR_NO_DATE =>
+                    'No release date found',
+                PEAR_PACKAGEFILE_ERROR_NO_NOTES =>
+                    'No release notes found',
+                PEAR_PACKAGEFILE_ERROR_NO_LEAD =>
+                    'Package must have at least one lead maintainer',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS =>
+                    'No maintainers found, at least one must be defined',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE =>
+                    'Maintainer %index% has no handle (user ID at channel server)',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE =>
+                    'Maintainer %index% has no role',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME =>
+                    'Maintainer %index% has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL =>
+                    'Maintainer %index% has no email',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPNAME =>
+                    'Dependency %index% is not a php dependency, and has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPREL =>
+                    'Dependency %index% has no relation (rel)',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE =>
+                    'Dependency %index% has no type',
+                PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED =>
+                    'PHP Dependency %index% has a name attribute of "%name%" which will be' .
+                        ' ignored!',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION =>
+                    'Dependency %index% is not a rel="has" or rel="not" dependency, ' .
+                        'and has no version',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION =>
+                    'Dependency %index% is a type="php" dependency, ' .
+                        'and has no version',
+                PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED =>
+                    'Dependency %index% is a rel="%rel%" dependency, versioning is ignored',
+                PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL =>
+                    'Dependency %index% has invalid optional value "%opt%", should be yes or no',
+                PEAR_PACKAGEFILE_PHP_NO_NOT =>
+                    'Dependency %index%: php dependencies cannot use "not" rel, use "ne"' .
+                        ' to exclude specific versions',
+                PEAR_PACKAGEFILE_ERROR_NO_CONFNAME =>
+                    'Configure Option %index% has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT =>
+                    'Configure Option %index% has no prompt',
+                PEAR_PACKAGEFILE_ERROR_NO_FILES =>
+                    'No files in <filelist> section of package.xml',
+                PEAR_PACKAGEFILE_ERROR_NO_FILEROLE =>
+                    'File "%file%" has no role, expecting one of "%roles%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE =>
+                    'File "%file%" has invalid role "%role%", expecting one of "%roles%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME =>
+                    'File "%file%" cannot start with ".", cannot package or install',
+                PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE =>
+                    'Parser error: invalid PHP found in file "%file%"',
+                PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX =>
+                    'in %file%: %type% "%name%" not prefixed with package name "%package%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILE =>
+                    'Parser error: invalid PHP file "%file%"',
+                PEAR_PACKAGEFILE_ERROR_CHANNELVAL =>
+                    'Channel validator error: field "%field%" - %reason%',
+                PEAR_PACKAGEFILE_ERROR_PHP5 =>
+                    'Error, PHP5 token encountered in %file%, analysis should be in PHP5',
+                PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND =>
+                    'File "%file%" in package.xml does not exist',
+                PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS =>
+                    'Package.xml contains non-ISO-8859-1 characters, and may not validate',
+            );
+    }
+
+    /**
+     * Validate XML package definition file.
+     *
+     * @access public
+     * @return boolean
+     */
+    function validate($state = PEAR_VALIDATE_NORMAL, $nofilechecking = false)
+    {
+        if (($this->_isValid & $state) == $state) {
+            return true;
+        }
+        $this->_isValid = true;
+        $info = $this->_packageInfo;
+        if (empty($info['package'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NAME);
+            $this->_packageName = $pn = 'unknown';
+        } else {
+            $this->_packageName = $pn = $info['package'];
+        }
+
+        if (empty($info['summary'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_SUMMARY);
+        } elseif (strpos(trim($info['summary']), "\n") !== false) {
+            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY,
+                array('summary' => $info['summary']));
+        }
+        if (empty($info['description'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION);
+        }
+        if (empty($info['release_license'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LICENSE);
+        }
+        if (empty($info['version'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_VERSION);
+        }
+        if (empty($info['release_state'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_STATE);
+        }
+        if (empty($info['release_date'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DATE);
+        }
+        if (empty($info['release_notes'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NOTES);
+        }
+        if (empty($info['maintainers'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS);
+        } else {
+            $haslead = false;
+            $i = 1;
+            foreach ($info['maintainers'] as $m) {
+                if (empty($m['handle'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE,
+                        array('index' => $i));
+                }
+                if (empty($m['role'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE,
+                        array('index' => $i, 'roles' => PEAR_Common::getUserRoles()));
+                } elseif ($m['role'] == 'lead') {
+                    $haslead = true;
+                }
+                if (empty($m['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME,
+                        array('index' => $i));
+                }
+                if (empty($m['email'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+            if (!$haslead) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LEAD);
+            }
+        }
+        if (!empty($info['release_deps'])) {
+            $i = 1;
+            foreach ($info['release_deps'] as $d) {
+                if (!isset($d['type']) || empty($d['type'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE,
+                        array('index' => $i, 'types' => PEAR_Common::getDependencyTypes()));
+                    continue;
+                }
+                if (!isset($d['rel']) || empty($d['rel'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPREL,
+                        array('index' => $i, 'rels' => PEAR_Common::getDependencyRelations()));
+                    continue;
+                }
+                if (!empty($d['optional'])) {
+                    if (!in_array($d['optional'], array('yes', 'no'))) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL,
+                            array('index' => $i, 'opt' => $d['optional']));
+                    }
+                }
+                if ($d['rel'] != 'has' && $d['rel'] != 'not' && empty($d['version'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION,
+                        array('index' => $i));
+                } elseif (($d['rel'] == 'has' || $d['rel'] == 'not') && !empty($d['version'])) {
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED,
+                        array('index' => $i, 'rel' => $d['rel']));
+                }
+                if ($d['type'] == 'php' && !empty($d['name'])) {
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED,
+                        array('index' => $i, 'name' => $d['name']));
+                } elseif ($d['type'] != 'php' && empty($d['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPNAME,
+                        array('index' => $i));
+                }
+                if ($d['type'] == 'php' && empty($d['version'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION,
+                        array('index' => $i));
+                }
+                if (($d['rel'] == 'not') && ($d['type'] == 'php')) {
+                    $this->_validateError(PEAR_PACKAGEFILE_PHP_NO_NOT,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+        }
+        if (!empty($info['configure_options'])) {
+            $i = 1;
+            foreach ($info['configure_options'] as $c) {
+                if (empty($c['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFNAME,
+                        array('index' => $i));
+                }
+                if (empty($c['prompt'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+        }
+        if (empty($info['filelist'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILES);
+            $errors[] = 'no files';
+        } else {
+            foreach ($info['filelist'] as $file => $fa) {
+                if (empty($fa['role'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILEROLE,
+                        array('file' => $file, 'roles' => PEAR_Common::getFileRoles()));
+                    continue;
+                } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE,
+                        array('file' => $file, 'role' => $fa['role'], 'roles' => PEAR_Common::getFileRoles()));
+                }
+                if (preg_match('~/\.\.?(/|\\z)|^\.\.?/~', str_replace('\\', '/', $file))) {
+                    // file contains .. parent directory or . cur directory references
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file));
+                }
+                if (isset($fa['install-as']) &&
+                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
+                                 str_replace('\\', '/', $fa['install-as']))) {
+                    // install-as contains .. parent directory or . cur directory references
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file . ' [installed as ' . $fa['install-as'] . ']'));
+                }
+                if (isset($fa['baseinstalldir']) &&
+                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
+                                 str_replace('\\', '/', $fa['baseinstalldir']))) {
+                    // install-as contains .. parent directory or . cur directory references
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file . ' [baseinstalldir ' . $fa['baseinstalldir'] . ']'));
+                }
+            }
+        }
+        if (isset($this->_registry) && $this->_isValid) {
+            $chan = $this->_registry->getChannel('pear.php.net');
+            if (PEAR::isError($chan)) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $chan->getMessage());
+                return $this->_isValid = 0;
+            }
+            $validator = $chan->getValidationObject();
+            $validator->setPackageFile($this);
+            $validator->validate($state);
+            $failures = $validator->getFailures();
+            foreach ($failures['errors'] as $error) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $error);
+            }
+            foreach ($failures['warnings'] as $warning) {
+                $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $warning);
+            }
+        }
+        if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$nofilechecking) {
+            if ($this->_analyzePhpFiles()) {
+                $this->_isValid = true;
+            }
+        }
+        if ($this->_isValid) {
+            return $this->_isValid = $state;
+        }
+        return $this->_isValid = 0;
+    }
+
+    function _analyzePhpFiles()
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        if (!isset($this->_packageFile)) {
+            return false;
+        }
+        $dir_prefix = dirname($this->_packageFile);
+        $common = new PEAR_Common;
+        $log = isset($this->_logger) ? array(&$this->_logger, 'log') :
+            array($common, 'log');
+        $info = $this->getFilelist();
+        foreach ($info as $file => $fa) {
+            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $file)) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND,
+                    array('file' => realpath($dir_prefix) . DIRECTORY_SEPARATOR . $file));
+                continue;
+            }
+            if ($fa['role'] == 'php' && $dir_prefix) {
+                call_user_func_array($log, array(1, "Analyzing $file"));
+                $srcinfo = $this->_analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
+                if ($srcinfo) {
+                    $this->_buildProvidesArray($srcinfo);
+                }
+            }
+        }
+        $this->_packageName = $pn = $this->getPackage();
+        $pnl = strlen($pn);
+        if (isset($this->_packageInfo['provides'])) {
+            foreach ((array) $this->_packageInfo['provides'] as $key => $what) {
+                if (isset($what['explicit'])) {
+                    // skip conformance checks if the provides entry is
+                    // specified in the package.xml file
+                    continue;
+                }
+                extract($what);
+                if ($type == 'class') {
+                    if (!strncasecmp($name, $pn, $pnl)) {
+                        continue;
+                    }
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
+                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
+                } elseif ($type == 'function') {
+                    if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
+                        continue;
+                    }
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
+                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
+                }
+            }
+        }
+        return $this->_isValid;
+    }
+
+    /**
+     * Get the default xml generator object
+     *
+     * @return PEAR_PackageFile_Generator_v1
+     */
+    function &getDefaultGenerator()
+    {
+        if (!class_exists('PEAR_PackageFile_Generator_v1')) {
+            require_once 'PEAR/PackageFile/Generator/v1.php';
+        }
+        $a = &new PEAR_PackageFile_Generator_v1($this);
+        return $a;
+    }
+
+    /**
+     * Get the contents of a file listed within the package.xml
+     * @param string
+     * @return string
+     */
+    function getFileContents($file)
+    {
+        if ($this->_archiveFile == $this->_packageFile) { // unpacked
+            $dir = dirname($this->_packageFile);
+            $file = $dir . DIRECTORY_SEPARATOR . $file;
+            $file = str_replace(array('/', '\\'),
+                array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
+            if (file_exists($file) && is_readable($file)) {
+                return implode('', file($file));
+            }
+        } else { // tgz
+            if (!class_exists('Archive_Tar')) {
+                require_once 'Archive/Tar.php';
+            }
+            $tar = &new Archive_Tar($this->_archiveFile);
+            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
+            if ($file != 'package.xml' && $file != 'package2.xml') {
+                $file = $this->getPackage() . '-' . $this->getVersion() . '/' . $file;
+            }
+            $file = $tar->extractInString($file);
+            $tar->popErrorHandling();
+            if (PEAR::isError($file)) {
+                return PEAR::raiseError("Cannot locate file '$file' in archive");
+            }
+            return $file;
+        }
+    }
+
+    // {{{ analyzeSourceCode()
+    /**
+     * Analyze the source code of the given PHP file
+     *
+     * @param  string Filename of the PHP file
+     * @return mixed
+     * @access private
+     */
+    function _analyzeSourceCode($file)
+    {
+        if (!function_exists("token_get_all")) {
+            return false;
+        }
+        if (!defined('T_DOC_COMMENT')) {
+            define('T_DOC_COMMENT', T_COMMENT);
+        }
+        if (!defined('T_INTERFACE')) {
+            define('T_INTERFACE', -1);
+        }
+        if (!defined('T_IMPLEMENTS')) {
+            define('T_IMPLEMENTS', -1);
+        }
+        if (!$fp = @fopen($file, "r")) {
+            return false;
+        }
+        fclose($fp);
+        $contents = file_get_contents($file);
+        $tokens = token_get_all($contents);
+/*
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            @list($token, $data) = $tokens[$i];
+            if (is_string($token)) {
+                var_dump($token);
+            } else {
+                print token_name($token) . ' ';
+                var_dump(rtrim($data));
+            }
+        }
+*/
+        $look_for = 0;
+        $paren_level = 0;
+        $bracket_level = 0;
+        $brace_level = 0;
+        $lastphpdoc = '';
+        $current_class = '';
+        $current_interface = '';
+        $current_class_level = -1;
+        $current_function = '';
+        $current_function_level = -1;
+        $declared_classes = array();
+        $declared_interfaces = array();
+        $declared_functions = array();
+        $declared_methods = array();
+        $used_classes = array();
+        $used_functions = array();
+        $extends = array();
+        $implements = array();
+        $nodeps = array();
+        $inquote = false;
+        $interface = false;
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            if (is_array($tokens[$i])) {
+                list($token, $data) = $tokens[$i];
+            } else {
+                $token = $tokens[$i];
+                $data = '';
+            }
+            if ($inquote) {
+                if ($token != '"' && $token != T_END_HEREDOC) {
+                    continue;
+                } else {
+                    $inquote = false;
+                    continue;
+                }
+            }
+            switch ($token) {
+                case T_WHITESPACE :
+                    continue;
+                case ';':
+                    if ($interface) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    break;
+                case '"':
+                case T_START_HEREDOC:
+                    $inquote = true;
+                    break;
+                case T_CURLY_OPEN:
+                case T_DOLLAR_OPEN_CURLY_BRACES:
+                case '{': $brace_level++; continue 2;
+                case '}':
+                    $brace_level--;
+                    if ($current_class_level == $brace_level) {
+                        $current_class = '';
+                        $current_class_level = -1;
+                    }
+                    if ($current_function_level == $brace_level) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    continue 2;
+                case '[': $bracket_level++; continue 2;
+                case ']': $bracket_level--; continue 2;
+                case '(': $paren_level++;   continue 2;
+                case ')': $paren_level--;   continue 2;
+                case T_INTERFACE:
+                    $interface = true;
+                case T_CLASS:
+                    if (($current_class_level != -1) || ($current_function_level != -1)) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
+                            array('file' => $file));
+                        return false;
+                    }
+                case T_FUNCTION:
+                case T_NEW:
+                case T_EXTENDS:
+                case T_IMPLEMENTS:
+                    $look_for = $token;
+                    continue 2;
+                case T_STRING:
+                    if (version_compare(zend_version(), '2.0', '<')) {
+                        if (in_array(strtolower($data),
+                            array('public', 'private', 'protected', 'abstract',
+                                  'interface', 'implements', 'throw') 
+                                 )) {
+                            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_PHP5,
+                                array($file));
+                        }
+                    }
+                    if ($look_for == T_CLASS) {
+                        $current_class = $data;
+                        $current_class_level = $brace_level;
+                        $declared_classes[] = $current_class;
+                    } elseif ($look_for == T_INTERFACE) {
+                        $current_interface = $data;
+                        $current_class_level = $brace_level;
+                        $declared_interfaces[] = $current_interface;
+                    } elseif ($look_for == T_IMPLEMENTS) {
+                        $implements[$current_class] = $data;
+                    } elseif ($look_for == T_EXTENDS) {
+                        $extends[$current_class] = $data;
+                    } elseif ($look_for == T_FUNCTION) {
+                        if ($current_class) {
+                            $current_function = "$current_class::$data";
+                            $declared_methods[$current_class][] = $data;
+                        } elseif ($current_interface) {
+                            $current_function = "$current_interface::$data";
+                            $declared_methods[$current_interface][] = $data;
+                        } else {
+                            $current_function = $data;
+                            $declared_functions[] = $current_function;
+                        }
+                        $current_function_level = $brace_level;
+                        $m = array();
+                    } elseif ($look_for == T_NEW) {
+                        $used_classes[$data] = true;
+                    }
+                    $look_for = 0;
+                    continue 2;
+                case T_VARIABLE:
+                    $look_for = 0;
+                    continue 2;
+                case T_DOC_COMMENT:
+                case T_COMMENT:
+                    if (preg_match('!^/\*\*\s!', $data)) {
+                        $lastphpdoc = $data;
+                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
+                            $nodeps = array_merge($nodeps, $m[1]);
+                        }
+                    }
+                    continue 2;
+                case T_DOUBLE_COLON:
+                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
+                            array('file' => $file));
+                        return false;
+                    }
+                    $class = $tokens[$i - 1][1];
+                    if (strtolower($class) != 'parent') {
+                        $used_classes[$class] = true;
+                    }
+                    continue 2;
+            }
+        }
+        return array(
+            "source_file" => $file,
+            "declared_classes" => $declared_classes,
+            "declared_interfaces" => $declared_interfaces,
+            "declared_methods" => $declared_methods,
+            "declared_functions" => $declared_functions,
+            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
+            "inheritance" => $extends,
+            "implements" => $implements,
+            );
+    }
+
+    /**
+     * Build a "provides" array from data returned by
+     * analyzeSourceCode().  The format of the built array is like
+     * this:
+     *
+     *  array(
+     *    'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
+     *    ...
+     *  )
+     *
+     *
+     * @param array $srcinfo array with information about a source file
+     * as returned by the analyzeSourceCode() method.
+     *
+     * @return void
+     *
+     * @access private
+     *
+     */
+    function _buildProvidesArray($srcinfo)
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        $file = basename($srcinfo['source_file']);
+        $pn = $this->getPackage();
+        $pnl = strlen($pn);
+        foreach ($srcinfo['declared_classes'] as $class) {
+            $key = "class;$class";
+            if (isset($this->_packageInfo['provides'][$key])) {
+                continue;
+            }
+            $this->_packageInfo['provides'][$key] =
+                array('file'=> $file, 'type' => 'class', 'name' => $class);
+            if (isset($srcinfo['inheritance'][$class])) {
+                $this->_packageInfo['provides'][$key]['extends'] =
+                    $srcinfo['inheritance'][$class];
+            }
+        }
+        foreach ($srcinfo['declared_methods'] as $class => $methods) {
+            foreach ($methods as $method) {
+                $function = "$class::$method";
+                $key = "function;$function";
+                if ($method{0} == '_' || !strcasecmp($method, $class) ||
+                    isset($this->_packageInfo['provides'][$key])) {
+                    continue;
+                }
+                $this->_packageInfo['provides'][$key] =
+                    array('file'=> $file, 'type' => 'function', 'name' => $function);
+            }
+        }
+
+        foreach ($srcinfo['declared_functions'] as $function) {
+            $key = "function;$function";
+            if ($function{0} == '_' || isset($this->_packageInfo['provides'][$key])) {
+                continue;
+            }
+            if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
+                $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
+            }
+            $this->_packageInfo['provides'][$key] =
+                array('file'=> $file, 'type' => 'function', 'name' => $function);
+        }
+    }
+
+    // }}}
+}
+?>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.8.0/PEAR/PackageFile/v2.php                                                                  100664     764     764       207602      100664  11276                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v2.php,v 1.143 2008/05/13 05:28:51 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v2.php,v 1.145 2009/02/24 23:39:16 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -27768,9 +27702,9 @@ require_once 'PEAR/ErrorStack.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -28944,19 +28878,24 @@ class PEAR_PackageFile_v2
         if ($this->getPackageType() != 'extsrc' && $this->getPackageType() != 'zendextsrc') {
             return false;
         }
+
         $releases = $this->getReleases();
         if (isset($releases[0])) {
             $releases = $releases[0];
         }
+
         if (isset($releases['configureoption'])) {
             if (!isset($releases['configureoption'][0])) {
                 $releases['configureoption'] = array($releases['configureoption']);
             }
+
             for ($i = 0; $i < count($releases['configureoption']); $i++) {
                 $releases['configureoption'][$i] = $releases['configureoption'][$i]['attribs'];
             }
+
             return $releases['configureoption'];
         }
+
         return false;
     }
 
@@ -29785,820 +29724,861 @@ class PEAR_PackageFile_v2
     }
 }
 ?>
-                                                                                                                                                                                                                                                                                                        PEAR-1.7.2/PEAR/REST/10.php                                                                         100644    1750    1750       101313 11014312742   7761                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_REST_10
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: 10.php,v 1.53 2008/04/11 01:16:40 dufuz Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a12
- */
-
-/**
- * For downloading REST xml/txt files
- */
-require_once 'PEAR/REST.php';
-
-/**
- * Implement REST 1.0
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a12
- */
-class PEAR_REST_10
-{
-    /**
-     * @var PEAR_REST
-     */
-    var $_rest;
-    function PEAR_REST_10($config, $options = array())
-    {
-        $this->_rest = &new PEAR_REST($config, $options);
-    }
-
-    /**
-     * Retrieve information about a remote package to be downloaded from a REST server
-     *
-     * @param string $base The uri to prepend to all REST calls
-     * @param array $packageinfo an array of format:
-     * <pre>
-     *  array(
-     *   'package' => 'packagename',
-     *   'channel' => 'channelname',
-     *  ['state' => 'alpha' (or valid state),]
-     *  -or-
-     *  ['version' => '1.whatever']
-     * </pre>
-     * @param string $prefstate Current preferred_state config variable value
-     * @param bool $installed the installed version of this package to compare against
-     * @return array|false|PEAR_Error see {@link _returnDownloadURL()}
-     */
-    function getDownloadURL($base, $packageinfo, $prefstate, $installed, $channel = false)
-    {
-        $channel = $packageinfo['channel'];
-        $package = $packageinfo['package'];
-        $states = $this->betterStates($prefstate, true);
-        if (!$states) {
-            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
-        }
-        $state   = isset($packageinfo['state'])   ? $packageinfo['state']   : null;
-        $version = isset($packageinfo['version']) ? $packageinfo['version'] : null;
-        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
-        if (PEAR::isError($info)) {
-            return PEAR::raiseError('No releases available for package "' .
-                $channel . '/' . $package . '"');
-        }
-        if (!isset($info['r'])) {
-            return false;
-        }
-        $release = $found = false;
-        if (!is_array($info['r']) || !isset($info['r'][0])) {
-            $info['r'] = array($info['r']);
-        }
-        foreach ($info['r'] as $release) {
-            if (!isset($this->_rest->_options['force']) && ($installed &&
-                  version_compare($release['v'], $installed, '<'))) {
-                continue;
-            }
-            if (isset($state)) {
-                // try our preferred state first
-                if ($release['s'] == $state) {
-                    $found = true;
-                    break;
-                }
-                // see if there is something newer and more stable
-                // bug #7221
-                if (in_array($release['s'], $this->betterStates($state), true)) {
-                    $found = true;
-                    break;
-                }
-            } elseif (isset($version)) {
-                if ($release['v'] == $version) {
-                    $found = true;
-                    break;
-                }
-            } else {
-                if (in_array($release['s'], $states)) {
-                    $found = true;
-                    break;
-                }
-            }
-        }
-        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
-    }
-
-    function getDepDownloadURL($base, $xsdversion, $dependency, $deppackage,
-                               $prefstate = 'stable', $installed = false, $channel = false)
-    {
-        $channel = $dependency['channel'];
-        $package = $dependency['name'];
-        $states = $this->betterStates($prefstate, true);
-        if (!$states) {
-            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
-        }
-        $state   = isset($dependency['state'])   ? $dependency['state']   : null;
-        $version = isset($dependency['version']) ? $dependency['version'] : null;
-        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
-        if (PEAR::isError($info)) {
-            return PEAR::raiseError('Package "' . $deppackage['channel'] . '/' . $deppackage['package']
-                . '" dependency "' . $channel . '/' . $package . '" has no releases');
-        }
-        if (!is_array($info) || !isset($info['r'])) {
-            return false;
-        }
-        $exclude = array();
-        $min = $max = $recommended = false;
-        if ($xsdversion == '1.0') {
-            switch ($dependency['rel']) {
-                case 'ge' :
-                    $min = $dependency['version'];
-                break;
-                case 'gt' :
-                    $min = $dependency['version'];
-                    $exclude = array($dependency['version']);
-                break;
-                case 'eq' :
-                    $recommended = $dependency['version'];
-                break;
-                case 'lt' :
-                    $max = $dependency['version'];
-                    $exclude = array($dependency['version']);
-                break;
-                case 'le' :
-                    $max = $dependency['version'];
-                break;
-                case 'ne' :
-                    $exclude = array($dependency['version']);
-                break;
-            }
-        } else {
-            $min = isset($dependency['min']) ? $dependency['min'] : false;
-            $max = isset($dependency['max']) ? $dependency['max'] : false;
-            $recommended = isset($dependency['recommended']) ?
-                $dependency['recommended'] : false;
-            if (isset($dependency['exclude'])) {
-                if (!isset($dependency['exclude'][0])) {
-                    $exclude = array($dependency['exclude']);
-                }
-            }
-        }
-        $release = $found = false;
-        if (!is_array($info['r']) || !isset($info['r'][0])) {
-            $info['r'] = array($info['r']);
-        }
-        foreach ($info['r'] as $release) {
-            if (!isset($this->_rest->_options['force']) && ($installed &&
-                  version_compare($release['v'], $installed, '<'))) {
-                continue;
-            }
-            if (in_array($release['v'], $exclude)) { // skip excluded versions
-                continue;
-            }
-            // allow newer releases to say "I'm OK with the dependent package"
-            if ($xsdversion == '2.0' && isset($release['co'])) {
-                if (!is_array($release['co']) || !isset($release['co'][0])) {
-                    $release['co'] = array($release['co']);
-                }
-                foreach ($release['co'] as $entry) {
-                    if (isset($entry['x']) && !is_array($entry['x'])) {
-                        $entry['x'] = array($entry['x']);
-                    } elseif (!isset($entry['x'])) {
-                        $entry['x'] = array();
-                    }
-                    if ($entry['c'] == $deppackage['channel'] &&
-                          strtolower($entry['p']) == strtolower($deppackage['package']) &&
-                          version_compare($deppackage['version'], $entry['min'], '>=') &&
-                          version_compare($deppackage['version'], $entry['max'], '<=') &&
-                          !in_array($release['v'], $entry['x'])) {
-                        $recommended = $release['v'];
-                        break;
-                    }
-                }
-            }
-            if ($recommended) {
-                if ($release['v'] != $recommended) { // if we want a specific
-                    // version, then skip all others
-                    continue;
-                } else {
-                    if (!in_array($release['s'], $states)) {
-                        // the stability is too low, but we must return the
-                        // recommended version if possible
-                        return $this->_returnDownloadURL($base, $package, $release, $info, true, false, $channel);
-                    }
-                }
-            }
-            if ($min && version_compare($release['v'], $min, 'lt')) { // skip too old versions
-                continue;
-            }
-            if ($max && version_compare($release['v'], $max, 'gt')) { // skip too new versions
-                continue;
-            }
-            if ($installed && version_compare($release['v'], $installed, '<')) {
-                continue;
-            }
-            if (in_array($release['s'], $states)) { // if in the preferred state...
-                $found = true; // ... then use it
-                break;
-            }
-        }
-        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
-    }
-
-    /**
-     * Take raw data and return the array needed for processing a download URL
-     *
-     * @param string $base REST base uri
-     * @param string $package Package name
-     * @param array $release an array of format array('v' => version, 's' => state)
-     *                       describing the release to download
-     * @param array $info list of all releases as defined by allreleases.xml
-     * @param bool|null $found determines whether the release was found or this is the next
-     *                    best alternative.  If null, then versions were skipped because
-     *                    of PHP dependency
-     * @return array|PEAR_Error
-     * @access private
-     */
-    function _returnDownloadURL($base, $package, $release, $info, $found, $phpversion = false, $channel = false)
-    {
-        if (!$found) {
-            $release = $info['r'][0];
-        }
-        $pinfo = $this->_rest->retrieveCacheFirst($base . 'p/' . strtolower($package) . '/' .
-            'info.xml', false, false, $channel);
-        if (PEAR::isError($pinfo)) {
-            return PEAR::raiseError('Package "' . $package .
-                '" does not have REST info xml available');
-        }
-        $releaseinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
-            $release['v'] . '.xml', false, false, $channel);
-        if (PEAR::isError($releaseinfo)) {
-            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
-                '" does not have REST xml available');
-        }
-        $packagexml = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
-            'deps.' . $release['v'] . '.txt', false, true, $channel);
-        if (PEAR::isError($packagexml)) {
-            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
-                '" does not have REST dependency information available');
-        }
-        $packagexml = unserialize($packagexml);
-        if (!$packagexml) {
-            $packagexml = array();
-        }
-        $allinfo = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-            '/allreleases.xml', false, false, $channel);
-        if (!is_array($allinfo['r']) || !isset($allinfo['r'][0])) {
-            $allinfo['r'] = array($allinfo['r']);
-        }
-        $compatible = false;
-        foreach ($allinfo['r'] as $release) {
-            if ($release['v'] != $releaseinfo['v']) {
-                continue;
-            }
-            if (!isset($release['co'])) {
-                break;
-            }
-            $compatible = array();
-            if (!is_array($release['co']) || !isset($release['co'][0])) {
-                $release['co'] = array($release['co']);
-            }
-            foreach ($release['co'] as $entry) {
-                $comp = array();
-                $comp['name'] = $entry['p'];
-                $comp['channel'] = $entry['c'];
-                $comp['min'] = $entry['min'];
-                $comp['max'] = $entry['max'];
-                if (isset($entry['x']) && !is_array($entry['x'])) {
-                    $comp['exclude'] = $entry['x'];
-                }
-                $compatible[] = $comp;
-            }
-            if (count($compatible) == 1) {
-                $compatible = $compatible[0];
-            }
-            break;
-        }
-        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
-            if (is_array($pinfo['dp'])) {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']['_content']));
-            } else {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']));
-            }
-        } else {
-            $deprecated = false;
-        }
-        if ($found) {
-            return
-                array('version' => $releaseinfo['v'],
-                      'info' => $packagexml,
-                      'package' => $releaseinfo['p']['_content'],
-                      'stability' => $releaseinfo['st'],
-                      'url' => $releaseinfo['g'],
-                      'compatible' => $compatible,
-                      'deprecated' => $deprecated,
-                );
-        } else {
-            return
-                array('version' => $releaseinfo['v'],
-                      'package' => $releaseinfo['p']['_content'],
-                      'stability' => $releaseinfo['st'],
-                      'info' => $packagexml,
-                      'compatible' => $compatible,
-                      'deprecated' => $deprecated,
-                      'php' => $phpversion
-                );
-        }
-    }
-
-    function listPackages($base, $channel = false)
-    {
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return array();
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-        return $packagelist['p'];
-    }
-
-    /**
-     * List all categories of a REST server
-     *
-     * @param string $base base URL of the server
-     * @return array of categorynames
-     */
-    function listCategories($base, $channel = false)
-    {
-        $categories = array();
-
-        // c/categories.xml does not exist;
-        // check for every package its category manually
-        // This is SLOOOWWWW : ///
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            $ret = array();
-            return $ret;
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-
-        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        foreach ($packagelist['p'] as $package) {
-                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
-                if (PEAR::isError($inf)) {
-                    PEAR::popErrorHandling();
-                    return $inf;
-                }
-                $cat = $inf['ca']['_content'];
-                if (!isset($categories[$cat])) {
-                    $categories[$cat] = $inf['ca'];
-                }
-        }
-        return array_values($categories);
-    }
-
-    /**
-     * List a category of a REST server
-     *
-     * @param string $base base URL of the server
-     * @param string $category name of the category
-     * @param boolean $info also download full package info
-     * @return array of packagenames
-     */
-    function listCategory($base, $category, $info = false, $channel = false)
-    {
-        // gives '404 Not Found' error when category doesn't exist
-        $packagelist = $this->_rest->retrieveData($base.'c/'.urlencode($category).'/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return array();
-        }
-        if (!is_array($packagelist['p']) ||
-            !isset($packagelist['p'][0])) { // only 1 pkg
-            $packagelist = array($packagelist['p']);
-        } else {
-            $packagelist = $packagelist['p'];
-        }
-
-        if ($info == true) {
-            // get individual package info
-            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-            foreach ($packagelist as $i => $packageitem) {
-                $url = sprintf('%s'.'r/%s/latest.txt',
-                        $base,
-                        strtolower($packageitem['_content']));
-                $version = $this->_rest->retrieveData($url, false, false, $channel);
-                if (PEAR::isError($version)) {
-                    break; // skipit
-                }
-                $url = sprintf('%s'.'r/%s/%s.xml',
-                        $base,
-                        strtolower($packageitem['_content']),
-                        $version);
-                $info = $this->_rest->retrieveData($url, false, false, $channel);
-                if (PEAR::isError($info)) {
-                    break; // skipit
-                }
-                $packagelist[$i]['info'] = $info;
-            }
-            PEAR::popErrorHandling();
-        }
-
-        return $packagelist;
-    }
-
-
-    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false, $channel = false)
-    {
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if ($this->_rest->config->get('verbose') > 0) {
-            $ui = &PEAR_Frontend::singleton();
-            $ui->log('Retrieving data...0%', false);
-        }
-        $ret = array();
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return $ret;
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-
-        // only search-packagename = quicksearch !
-        if ($searchpackage && (!$searchsummary || empty($searchpackage))) {
-            $newpackagelist = array();
-            foreach ($packagelist['p'] as $package) {
-                if (!empty($searchpackage) && stristr($package, $searchpackage) !== false) {
-                    $newpackagelist[] = $package;
-                }
-            }
-            $packagelist['p'] = $newpackagelist;
-        }
-        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        $next = .1;
-        foreach ($packagelist['p'] as $progress => $package) {
-            if ($this->_rest->config->get('verbose') > 0) {
-                if ($progress / count($packagelist['p']) >= $next) {
-                    if ($next == .5) {
-                        $ui->log('50%', false);
-                    } else {
-                        $ui->log('.', false);
-                    }
-                    $next += .1;
-                }
-            }
-            if ($basic) { // remote-list command
-                if ($dostable) {
-                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                        '/stable.txt', false, false, $channel);
-                } else {
-                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                        '/latest.txt', false, false, $channel);
-                }
-                if (PEAR::isError($latest)) {
-                    $latest = false;
-                }
-                $info = array('stable' => $latest);
-            } else { // list-all command
-                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
-                if (PEAR::isError($inf)) {
-                    PEAR::popErrorHandling();
-                    return $inf;
-                }
-                if ($searchpackage) {
-                    $found = (!empty($searchpackage) && stristr($package, $searchpackage) !== false);
-                    if (!$found && !(isset($searchsummary) && !empty($searchsummary)
-                        && (stristr($inf['s'], $searchsummary) !== false
-                            || stristr($inf['d'], $searchsummary) !== false)))
-                    {
-                        continue;
-                    };
-                }
-                $releases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                    '/allreleases.xml', false, false, $channel);
-                if (PEAR::isError($releases)) {
-                    continue;
-                }
-                if (!isset($releases['r'][0])) {
-                    $releases['r'] = array($releases['r']);
-                }
-                unset($latest);
-                unset($unstable);
-                unset($stable);
-                unset($state);
-                foreach ($releases['r'] as $release) {
-                    if (!isset($latest)) {
-                        if ($dostable && $release['s'] == 'stable') {
-                            $latest = $release['v'];
-                            $state = 'stable';
-                        }
-                        if (!$dostable) {
-                            $latest = $release['v'];
-                            $state = $release['s'];
-                        }
-                    }
-                    if (!isset($stable) && $release['s'] == 'stable') {
-                        $stable = $release['v'];
-                        if (!isset($unstable)) {
-                            $unstable = $stable;
-                        }
-                    }
-                    if (!isset($unstable) && $release['s'] != 'stable') {
-                        $latest = $unstable = $release['v'];
-                        $state = $release['s'];
-                    }
-                    if (isset($latest) && !isset($state)) {
-                        $state = $release['s'];
-                    }
-                    if (isset($latest) && isset($stable) && isset($unstable)) {
-                        break;
-                    }
-                }
-                $deps = array();
-                if (!isset($unstable)) {
-                    $unstable = false;
-                    $state = 'stable';
-                    if (isset($stable)) {
-                        $latest = $unstable = $stable;
-                    }
-                } else {
-                    $latest = $unstable;
-                }
-                if (!isset($latest)) {
-                    $latest = false;
-                }
-                if ($latest) {
-                    $d = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
-                        $latest . '.txt', false, false, $channel);
-                    if (!PEAR::isError($d)) {
-                        $d = unserialize($d);
-                        if ($d) {
-                            if (isset($d['required'])) {
-                                if (!class_exists('PEAR_PackageFile_v2')) {
-                                    require_once 'PEAR/PackageFile/v2.php';
-                                }
-                                if (!isset($pf)) {
-                                    $pf = new PEAR_PackageFile_v2;
-                                }
-                                $pf->setDeps($d);
-                                $tdeps = $pf->getDeps();
-                            } else {
-                                $tdeps = $d;
-                            }
-                            foreach ($tdeps as $dep) {
-                                if ($dep['type'] !== 'pkg') {
-                                    continue;
-                                }
-                                $deps[] = $dep;
-                            }
-                        }
-                    }
-                }
-                if (!isset($stable)) {
-                    $stable = '-n/a-';
-                }
-                if (!$searchpackage) {
-                    $info = array('stable' => $latest, 'summary' => $inf['s'], 'description' =>
-                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
-                        'unstable' => $unstable, 'state' => $state);
-                } else {
-                    $info = array('stable' => $stable, 'summary' => $inf['s'], 'description' =>
-                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
-                        'unstable' => $unstable, 'state' => $state);
-                }
-            }
-            $ret[$package] = $info;
-        }
-        PEAR::popErrorHandling();
-        return $ret;
-    }
-
-    function listLatestUpgrades($base, $pref_state, $installed, $channel, &$reg)
-    {
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        $ret = array();
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return $ret;
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-        foreach ($packagelist['p'] as $package) {
-            if (!isset($installed[strtolower($package)])) {
-                continue;
-            }
-            $inst_version = $reg->packageInfo($package, 'version', $channel);
-            $inst_state = $reg->packageInfo($package, 'release_state', $channel);
-            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-            $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                '/allreleases.xml', false, false, $channel);
-            PEAR::popErrorHandling();
-            if (PEAR::isError($info)) {
-                continue; // no remote releases
-            }
-            if (!isset($info['r'])) {
-                continue;
-            }
-            $found = false;
-            $release = false;
-            if (!is_array($info['r']) || !isset($info['r'][0])) {
-                $info['r'] = array($info['r']);
-            }
-            // $info['r'] is sorted by version number
-            foreach ($info['r'] as $release) {
-                if ($inst_version && version_compare($release['v'], $inst_version, '<=')) {
-                    // not newer than the one installed
-                    break;
-                }
-
-                // new version > installed version
-                if (!$pref_state) {
-                    // every state is a good state
-                    $found = true;
-                    break;
-                } else {
-                    $new_state = $release['s'];
-                    // if new state >= installed state: go
-                    if (in_array($new_state, $this->betterStates($inst_state, true))) {
-                        $found = true;
-                        break;
-                    } else {
-                        // only allow to lower the state of package,
-                        // if new state >= preferred state: go
-                        if (in_array($new_state, $this->betterStates($pref_state, true))) {
-                            $found = true;
-                            break;
-                        }
-                    }
-                }
-            }
-            if (!$found) {
-                continue;
-            }
-            $relinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
-                $release['v'] . '.xml', false, false, $channel);
-            if (PEAR::isError($relinfo)) {
-                return $relinfo;
-            }
-            $ret[$package] = array(
-                    'version' => $release['v'],
-                    'state' => $release['s'],
-                    'filesize' => $relinfo['f'],
-                );
-        }
-        return $ret;
-    }
-
-    function packageInfo($base, $package, $channel = false)
-    {
-        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        $pinfo = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
-        if (PEAR::isError($pinfo)) {
-            PEAR::popErrorHandling();
-            return PEAR::raiseError('Unknown package: "' . $package . '" (Debug: ' .
-                $pinfo->getMessage() . ')');
-        }
-        $releases = array();
-        $allreleases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-            '/allreleases.xml', false, false, $channel);
-        if (!PEAR::isError($allreleases)) {
-            if (!class_exists('PEAR_PackageFile_v2')) {
-                require_once 'PEAR/PackageFile/v2.php';
-            }
-            if (!is_array($allreleases['r']) || !isset($allreleases['r'][0])) {
-                $allreleases['r'] = array($allreleases['r']);
-            }
-            $pf = new PEAR_PackageFile_v2;
-            foreach ($allreleases['r'] as $release) {
-                $ds = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
-                    $release['v'] . '.txt', false, false, $channel);
-                if (PEAR::isError($ds)) {
-                    continue;
-                }
-                if (!isset($latest)) {
-                    $latest = $release['v'];
-                }
-                $pf->setDeps(unserialize($ds));
-                $ds = $pf->getDeps();
-                $info = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package)
-                    . '/' . $release['v'] . '.xml', false, false, $channel);
-                if (PEAR::isError($info)) {
-                    continue;
-                }
-                $releases[$release['v']] = array(
-                    'doneby' => $info['m'],
-                    'license' => $info['l'],
-                    'summary' => $info['s'],
-                    'description' => $info['d'],
-                    'releasedate' => $info['da'],
-                    'releasenotes' => $info['n'],
-                    'state' => $release['s'],
-                    'deps' => $ds ? $ds : array(),
-                );
-            }
-        } else {
-            $latest = '';
-        }
-        PEAR::popErrorHandling();
-        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
-            if (is_array($pinfo['dp'])) {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']['_content']));
-            } else {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']));
-            }
-        } else {
-            $deprecated = false;
-        }
-        return array(
-            'name' => $pinfo['n'],
-            'channel' => $pinfo['c'],
-            'category' => $pinfo['ca']['_content'],
-            'stable' => $latest,
-            'license' => $pinfo['l'],
-            'summary' => $pinfo['s'],
-            'description' => $pinfo['d'],
-            'releases' => $releases,
-            'deprecated' => $deprecated,
-            );
-    }
-
-    /**
-     * Return an array containing all of the states that are more stable than
-     * or equal to the passed in state
-     *
-     * @param string Release state
-     * @param boolean Determines whether to include $state in the list
-     * @return false|array False if $state is not a valid release state
-     */
-    function betterStates($state, $include = false)
-    {
-        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
-        $i = array_search($state, $states);
-        if ($i === false) {
-            return false;
-        }
-        if ($include) {
-            $i--;
-        }
-        return array_slice($states, $i + 1);
-    }
-}
-?>                                                                                                                                                                                                                                                                                                                     PEAR-1.7.2/PEAR/REST/11.php                                                                         100644    1750    1750        27065 11014312742   7755                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                              PEAR-1.8.0/PEAR/REST/10.php                                                                         100664     764     764       100236      100664   7604                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_REST_10
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: 10.php,v 1.60 2009/03/07 23:09:56 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a12
+ */
+
+/**
+ * For downloading REST xml/txt files
+ */
+require_once 'PEAR/REST.php';
+
+/**
+ * Implement REST 1.0
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a12
+ */
+class PEAR_REST_10
+{
+    /**
+     * @var PEAR_REST
+     */
+    var $_rest;
+    function PEAR_REST_10($config, $options = array())
+    {
+        $this->_rest = &new PEAR_REST($config, $options);
+    }
+
+    /**
+     * Retrieve information about a remote package to be downloaded from a REST server
+     *
+     * @param string $base The uri to prepend to all REST calls
+     * @param array $packageinfo an array of format:
+     * <pre>
+     *  array(
+     *   'package' => 'packagename',
+     *   'channel' => 'channelname',
+     *  ['state' => 'alpha' (or valid state),]
+     *  -or-
+     *  ['version' => '1.whatever']
+     * </pre>
+     * @param string $prefstate Current preferred_state config variable value
+     * @param bool $installed the installed version of this package to compare against
+     * @return array|false|PEAR_Error see {@link _returnDownloadURL()}
+     */
+    function getDownloadURL($base, $packageinfo, $prefstate, $installed, $channel = false)
+    {
+        $channel = $packageinfo['channel'];
+        $package = $packageinfo['package'];
+        $states = $this->betterStates($prefstate, true);
+        if (!$states) {
+            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
+        }
+
+        $state   = isset($packageinfo['state'])   ? $packageinfo['state']   : null;
+        $version = isset($packageinfo['version']) ? $packageinfo['version'] : null;
+        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
+        if (PEAR::isError($info)) {
+            return PEAR::raiseError('No releases available for package "' .
+                $channel . '/' . $package . '"');
+        }
+
+        if (!isset($info['r'])) {
+            return false;
+        }
+
+        $release = $found = false;
+        if (!is_array($info['r']) || !isset($info['r'][0])) {
+            $info['r'] = array($info['r']);
+        }
+
+        foreach ($info['r'] as $release) {
+            if (!isset($this->_rest->_options['force']) && ($installed &&
+                  version_compare($release['v'], $installed, '<'))) {
+                continue;
+            }
+
+            if (isset($state)) {
+                // try our preferred state first
+                if ($release['s'] == $state) {
+                    $found = true;
+                    break;
+                }
+                // see if there is something newer and more stable
+                // bug #7221
+                if (in_array($release['s'], $this->betterStates($state), true)) {
+                    $found = true;
+                    break;
+                }
+            } elseif (isset($version)) {
+                if ($release['v'] == $version) {
+                    $found = true;
+                    break;
+                }
+            } else {
+                if (in_array($release['s'], $states)) {
+                    $found = true;
+                    break;
+                }
+            }
+        }
+
+        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
+    }
+
+    function getDepDownloadURL($base, $xsdversion, $dependency, $deppackage,
+                               $prefstate = 'stable', $installed = false, $channel = false)
+    {
+        $channel = $dependency['channel'];
+        $package = $dependency['name'];
+        $states = $this->betterStates($prefstate, true);
+        if (!$states) {
+            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
+        }
+        $state   = isset($dependency['state'])   ? $dependency['state']   : null;
+        $version = isset($dependency['version']) ? $dependency['version'] : null;
+        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
+        if (PEAR::isError($info)) {
+            return PEAR::raiseError('Package "' . $deppackage['channel'] . '/' . $deppackage['package']
+                . '" dependency "' . $channel . '/' . $package . '" has no releases');
+        }
+        if (!is_array($info) || !isset($info['r'])) {
+            return false;
+        }
+        $exclude = array();
+        $min = $max = $recommended = false;
+        if ($xsdversion == '1.0') {
+            switch ($dependency['rel']) {
+                case 'ge' :
+                    $min = $dependency['version'];
+                break;
+                case 'gt' :
+                    $min = $dependency['version'];
+                    $exclude = array($dependency['version']);
+                break;
+                case 'eq' :
+                    $recommended = $dependency['version'];
+                break;
+                case 'lt' :
+                    $max = $dependency['version'];
+                    $exclude = array($dependency['version']);
+                break;
+                case 'le' :
+                    $max = $dependency['version'];
+                break;
+                case 'ne' :
+                    $exclude = array($dependency['version']);
+                break;
+            }
+        } else {
+            $min = isset($dependency['min']) ? $dependency['min'] : false;
+            $max = isset($dependency['max']) ? $dependency['max'] : false;
+            $recommended = isset($dependency['recommended']) ?
+                $dependency['recommended'] : false;
+            if (isset($dependency['exclude'])) {
+                if (!isset($dependency['exclude'][0])) {
+                    $exclude = array($dependency['exclude']);
+                }
+            }
+        }
+        $release = $found = false;
+        if (!is_array($info['r']) || !isset($info['r'][0])) {
+            $info['r'] = array($info['r']);
+        }
+        foreach ($info['r'] as $release) {
+            if (!isset($this->_rest->_options['force']) && ($installed &&
+                  version_compare($release['v'], $installed, '<'))) {
+                continue;
+            }
+            if (in_array($release['v'], $exclude)) { // skip excluded versions
+                continue;
+            }
+            // allow newer releases to say "I'm OK with the dependent package"
+            if ($xsdversion == '2.0' && isset($release['co'])) {
+                if (!is_array($release['co']) || !isset($release['co'][0])) {
+                    $release['co'] = array($release['co']);
+                }
+                foreach ($release['co'] as $entry) {
+                    if (isset($entry['x']) && !is_array($entry['x'])) {
+                        $entry['x'] = array($entry['x']);
+                    } elseif (!isset($entry['x'])) {
+                        $entry['x'] = array();
+                    }
+                    if ($entry['c'] == $deppackage['channel'] &&
+                          strtolower($entry['p']) == strtolower($deppackage['package']) &&
+                          version_compare($deppackage['version'], $entry['min'], '>=') &&
+                          version_compare($deppackage['version'], $entry['max'], '<=') &&
+                          !in_array($release['v'], $entry['x'])) {
+                        $recommended = $release['v'];
+                        break;
+                    }
+                }
+            }
+            if ($recommended) {
+                if ($release['v'] != $recommended) { // if we want a specific
+                    // version, then skip all others
+                    continue;
+                } else {
+                    if (!in_array($release['s'], $states)) {
+                        // the stability is too low, but we must return the
+                        // recommended version if possible
+                        return $this->_returnDownloadURL($base, $package, $release, $info, true, false, $channel);
+                    }
+                }
+            }
+            if ($min && version_compare($release['v'], $min, 'lt')) { // skip too old versions
+                continue;
+            }
+            if ($max && version_compare($release['v'], $max, 'gt')) { // skip too new versions
+                continue;
+            }
+            if ($installed && version_compare($release['v'], $installed, '<')) {
+                continue;
+            }
+            if (in_array($release['s'], $states)) { // if in the preferred state...
+                $found = true; // ... then use it
+                break;
+            }
+        }
+        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
+    }
+
+    /**
+     * Take raw data and return the array needed for processing a download URL
+     *
+     * @param string $base REST base uri
+     * @param string $package Package name
+     * @param array $release an array of format array('v' => version, 's' => state)
+     *                       describing the release to download
+     * @param array $info list of all releases as defined by allreleases.xml
+     * @param bool|null $found determines whether the release was found or this is the next
+     *                    best alternative.  If null, then versions were skipped because
+     *                    of PHP dependency
+     * @return array|PEAR_Error
+     * @access private
+     */
+    function _returnDownloadURL($base, $package, $release, $info, $found, $phpversion = false, $channel = false)
+    {
+        if (!$found) {
+            $release = $info['r'][0];
+        }
+        $pinfo = $this->_rest->retrieveCacheFirst($base . 'p/' . strtolower($package) . '/' .
+            'info.xml', false, false, $channel);
+        if (PEAR::isError($pinfo)) {
+            return PEAR::raiseError('Package "' . $package .
+                '" does not have REST info xml available');
+        }
+        $releaseinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+            $release['v'] . '.xml', false, false, $channel);
+        if (PEAR::isError($releaseinfo)) {
+            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
+                '" does not have REST xml available');
+        }
+        $packagexml = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+            'deps.' . $release['v'] . '.txt', false, true, $channel);
+        if (PEAR::isError($packagexml)) {
+            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
+                '" does not have REST dependency information available');
+        }
+
+        $packagexml = unserialize($packagexml);
+        if (!$packagexml) {
+            $packagexml = array();
+        }
+        $allinfo = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+            '/allreleases.xml', false, false, $channel);
+        if (!is_array($allinfo['r']) || !isset($allinfo['r'][0])) {
+            $allinfo['r'] = array($allinfo['r']);
+        }
+        $compatible = false;
+        foreach ($allinfo['r'] as $release) {
+            if ($release['v'] != $releaseinfo['v']) {
+                continue;
+            }
+            if (!isset($release['co'])) {
+                break;
+            }
+            $compatible = array();
+            if (!is_array($release['co']) || !isset($release['co'][0])) {
+                $release['co'] = array($release['co']);
+            }
+            foreach ($release['co'] as $entry) {
+                $comp = array();
+                $comp['name'] = $entry['p'];
+                $comp['channel'] = $entry['c'];
+                $comp['min'] = $entry['min'];
+                $comp['max'] = $entry['max'];
+                if (isset($entry['x']) && !is_array($entry['x'])) {
+                    $comp['exclude'] = $entry['x'];
+                }
+                $compatible[] = $comp;
+            }
+            if (count($compatible) == 1) {
+                $compatible = $compatible[0];
+            }
+            break;
+        }
+        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
+            if (is_array($pinfo['dp'])) {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']['_content']));
+            } else {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']));
+            }
+        } else {
+            $deprecated = false;
+        }
+        if ($found) {
+            return
+                array('version' => $releaseinfo['v'],
+                      'info' => $packagexml,
+                      'package' => $releaseinfo['p']['_content'],
+                      'stability' => $releaseinfo['st'],
+                      'url' => $releaseinfo['g'],
+                      'compatible' => $compatible,
+                      'deprecated' => $deprecated,
+                );
+        } else {
+            return
+                array('version' => $releaseinfo['v'],
+                      'package' => $releaseinfo['p']['_content'],
+                      'stability' => $releaseinfo['st'],
+                      'info' => $packagexml,
+                      'compatible' => $compatible,
+                      'deprecated' => $deprecated,
+                      'php' => $phpversion
+                );
+        }
+    }
+
+    function listPackages($base, $channel = false)
+    {
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return array();
+        }
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+        return $packagelist['p'];
+    }
+
+    /**
+     * List all categories of a REST server
+     *
+     * @param string $base base URL of the server
+     * @return array of categorynames
+     */
+    function listCategories($base, $channel = false)
+    {
+        $categories = array();
+
+        // c/categories.xml does not exist;
+        // check for every package its category manually
+        // This is SLOOOWWWW : ///
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            $ret = array();
+            return $ret;
+        }
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        foreach ($packagelist['p'] as $package) {
+                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
+                if (PEAR::isError($inf)) {
+                    PEAR::popErrorHandling();
+                    return $inf;
+                }
+                $cat = $inf['ca']['_content'];
+                if (!isset($categories[$cat])) {
+                    $categories[$cat] = $inf['ca'];
+                }
+        }
+        return array_values($categories);
+    }
+
+    /**
+     * List a category of a REST server
+     *
+     * @param string $base base URL of the server
+     * @param string $category name of the category
+     * @param boolean $info also download full package info
+     * @return array of packagenames
+     */
+    function listCategory($base, $category, $info = false, $channel = false)
+    {
+        // gives '404 Not Found' error when category doesn't exist
+        $packagelist = $this->_rest->retrieveData($base.'c/'.urlencode($category).'/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return array();
+        }
+        if (!is_array($packagelist['p']) ||
+            !isset($packagelist['p'][0])) { // only 1 pkg
+            $packagelist = array($packagelist['p']);
+        } else {
+            $packagelist = $packagelist['p'];
+        }
+
+        if ($info == true) {
+            // get individual package info
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            foreach ($packagelist as $i => $packageitem) {
+                $url = sprintf('%s'.'r/%s/latest.txt',
+                        $base,
+                        strtolower($packageitem['_content']));
+                $version = $this->_rest->retrieveData($url, false, false, $channel);
+                if (PEAR::isError($version)) {
+                    break; // skipit
+                }
+                $url = sprintf('%s'.'r/%s/%s.xml',
+                        $base,
+                        strtolower($packageitem['_content']),
+                        $version);
+                $info = $this->_rest->retrieveData($url, false, false, $channel);
+                if (PEAR::isError($info)) {
+                    break; // skipit
+                }
+                $packagelist[$i]['info'] = $info;
+            }
+            PEAR::popErrorHandling();
+        }
+
+        return $packagelist;
+    }
+
+
+    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false, $channel = false)
+    {
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+        if ($this->_rest->config->get('verbose') > 0) {
+            $ui = &PEAR_Frontend::singleton();
+            $ui->log('Retrieving data...0%', false);
+        }
+        $ret = array();
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return $ret;
+        }
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+
+        // only search-packagename = quicksearch !
+        if ($searchpackage && (!$searchsummary || empty($searchpackage))) {
+            $newpackagelist = array();
+            foreach ($packagelist['p'] as $package) {
+                if (!empty($searchpackage) && stristr($package, $searchpackage) !== false) {
+                    $newpackagelist[] = $package;
+                }
+            }
+            $packagelist['p'] = $newpackagelist;
+        }
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $next = .1;
+        foreach ($packagelist['p'] as $progress => $package) {
+            if ($this->_rest->config->get('verbose') > 0) {
+                if ($progress / count($packagelist['p']) >= $next) {
+                    if ($next == .5) {
+                        $ui->log('50%', false);
+                    } else {
+                        $ui->log('.', false);
+                    }
+                    $next += .1;
+                }
+            }
+
+            if ($basic) { // remote-list command
+                if ($dostable) {
+                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                        '/stable.txt', false, false, $channel);
+                } else {
+                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                        '/latest.txt', false, false, $channel);
+                }
+                if (PEAR::isError($latest)) {
+                    $latest = false;
+                }
+                $info = array('stable' => $latest);
+            } else { // list-all command
+                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
+                if (PEAR::isError($inf)) {
+                    PEAR::popErrorHandling();
+                    return $inf;
+                }
+                if ($searchpackage) {
+                    $found = (!empty($searchpackage) && stristr($package, $searchpackage) !== false);
+                    if (!$found && !(isset($searchsummary) && !empty($searchsummary)
+                        && (stristr($inf['s'], $searchsummary) !== false
+                            || stristr($inf['d'], $searchsummary) !== false)))
+                    {
+                        continue;
+                    };
+                }
+                $releases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                    '/allreleases.xml', false, false, $channel);
+                if (PEAR::isError($releases)) {
+                    continue;
+                }
+                if (!isset($releases['r'][0])) {
+                    $releases['r'] = array($releases['r']);
+                }
+                unset($latest);
+                unset($unstable);
+                unset($stable);
+                unset($state);
+                foreach ($releases['r'] as $release) {
+                    if (!isset($latest)) {
+                        if ($dostable && $release['s'] == 'stable') {
+                            $latest = $release['v'];
+                            $state = 'stable';
+                        }
+                        if (!$dostable) {
+                            $latest = $release['v'];
+                            $state = $release['s'];
+                        }
+                    }
+                    if (!isset($stable) && $release['s'] == 'stable') {
+                        $stable = $release['v'];
+                        if (!isset($unstable)) {
+                            $unstable = $stable;
+                        }
+                    }
+                    if (!isset($unstable) && $release['s'] != 'stable') {
+                        $latest = $unstable = $release['v'];
+                        $state = $release['s'];
+                    }
+                    if (isset($latest) && !isset($state)) {
+                        $state = $release['s'];
+                    }
+                    if (isset($latest) && isset($stable) && isset($unstable)) {
+                        break;
+                    }
+                }
+                $deps = array();
+                if (!isset($unstable)) {
+                    $unstable = false;
+                    $state = 'stable';
+                    if (isset($stable)) {
+                        $latest = $unstable = $stable;
+                    }
+                } else {
+                    $latest = $unstable;
+                }
+                if (!isset($latest)) {
+                    $latest = false;
+                }
+                if ($latest) {
+                    $d = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
+                        $latest . '.txt', false, false, $channel);
+                    if (!PEAR::isError($d)) {
+                        $d = unserialize($d);
+                        if ($d) {
+                            if (isset($d['required'])) {
+                                if (!class_exists('PEAR_PackageFile_v2')) {
+                                    require_once 'PEAR/PackageFile/v2.php';
+                                }
+                                if (!isset($pf)) {
+                                    $pf = new PEAR_PackageFile_v2;
+                                }
+                                $pf->setDeps($d);
+                                $tdeps = $pf->getDeps();
+                            } else {
+                                $tdeps = $d;
+                            }
+                            foreach ($tdeps as $dep) {
+                                if ($dep['type'] !== 'pkg') {
+                                    continue;
+                                }
+                                $deps[] = $dep;
+                            }
+                        }
+                    }
+                }
+                if (!isset($stable)) {
+                    $stable = '-n/a-';
+                }
+                if (!$searchpackage) {
+                    $info = array('stable' => $latest, 'summary' => $inf['s'], 'description' =>
+                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
+                        'unstable' => $unstable, 'state' => $state);
+                } else {
+                    $info = array('stable' => $stable, 'summary' => $inf['s'], 'description' =>
+                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
+                        'unstable' => $unstable, 'state' => $state);
+                }
+            }
+            $ret[$package] = $info;
+        }
+        PEAR::popErrorHandling();
+        return $ret;
+    }
+
+    function listLatestUpgrades($base, $pref_state, $installed, $channel, &$reg)
+    {
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
+        }
+
+        $ret = array();
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return $ret;
+        }
+
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
+
+        foreach ($packagelist['p'] as $package) {
+            if (!isset($installed[strtolower($package)])) {
+                continue;
+            }
+
+            $inst_version = $reg->packageInfo($package, 'version', $channel);
+            $inst_state   = $reg->packageInfo($package, 'release_state', $channel);
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                '/allreleases.xml', false, false, $channel);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($info)) {
+                continue; // no remote releases
+            }
+
+            if (!isset($info['r'])) {
+                continue;
+            }
+
+            $release = $found = false;
+            if (!is_array($info['r']) || !isset($info['r'][0])) {
+                $info['r'] = array($info['r']);
+            }
+
+            // $info['r'] is sorted by version number
+            usort($info['r'], array($this, '_sortReleasesByVersionNumber'));
+            foreach ($info['r'] as $release) {
+                if ($inst_version && version_compare($release['v'], $inst_version, '<=')) {
+                    // not newer than the one installed
+                    break;
+                }
+
+                // new version > installed version
+                if (!$pref_state) {
+                    // every state is a good state
+                    $found = true;
+                    break;
+                } else {
+                    $new_state = $release['s'];
+                    // if new state >= installed state: go
+                    if (in_array($new_state, $this->betterStates($inst_state, true))) {
+                        $found = true;
+                        break;
+                    } else {
+                        // only allow to lower the state of package,
+                        // if new state >= preferred state: go
+                        if (in_array($new_state, $this->betterStates($pref_state, true))) {
+                            $found = true;
+                            break;
+                        }
+                    }
+                }
+            }
+
+            if (!$found) {
+                continue;
+            }
+
+            $relinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+                $release['v'] . '.xml', false, false, $channel);
+            if (PEAR::isError($relinfo)) {
+                return $relinfo;
+            }
+
+            $ret[$package] = array(
+                'version'  => $release['v'],
+                'state'    => $release['s'],
+                'filesize' => $relinfo['f'],
+            );
+        }
+
+        return $ret;
+    }
+
+    function packageInfo($base, $package, $channel = false)
+    {
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $pinfo = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
+        if (PEAR::isError($pinfo)) {
+            PEAR::popErrorHandling();
+            return PEAR::raiseError('Unknown package: "' . $package . '" in channel "' . $channel . '"' . "\n". 'Debug: ' .
+                $pinfo->getMessage());
+        }
+
+        $releases = array();
+        $allreleases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+            '/allreleases.xml', false, false, $channel);
+        if (!PEAR::isError($allreleases)) {
+            if (!class_exists('PEAR_PackageFile_v2')) {
+                require_once 'PEAR/PackageFile/v2.php';
+            }
+
+            if (!is_array($allreleases['r']) || !isset($allreleases['r'][0])) {
+                $allreleases['r'] = array($allreleases['r']);
+            }
+
+            $pf = new PEAR_PackageFile_v2;
+            foreach ($allreleases['r'] as $release) {
+                $ds = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
+                    $release['v'] . '.txt', false, false, $channel);
+                if (PEAR::isError($ds)) {
+                    continue;
+                }
+
+                if (!isset($latest)) {
+                    $latest = $release['v'];
+                }
+
+                $pf->setDeps(unserialize($ds));
+                $ds = $pf->getDeps();
+                $info = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package)
+                    . '/' . $release['v'] . '.xml', false, false, $channel);
+
+                if (PEAR::isError($info)) {
+                    continue;
+                }
+
+                $releases[$release['v']] = array(
+                    'doneby' => $info['m'],
+                    'license' => $info['l'],
+                    'summary' => $info['s'],
+                    'description' => $info['d'],
+                    'releasedate' => $info['da'],
+                    'releasenotes' => $info['n'],
+                    'state' => $release['s'],
+                    'deps' => $ds ? $ds : array(),
+                );
+            }
+        } else {
+            $latest = '';
+        }
+
+        PEAR::popErrorHandling();
+        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
+            if (is_array($pinfo['dp'])) {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']['_content']));
+            } else {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']));
+            }
+        } else {
+            $deprecated = false;
+        }
+
+        if (!isset($latest)) {
+            $latest = '';
+        }
+
+        return array(
+            'name' => $pinfo['n'],
+            'channel' => $pinfo['c'],
+            'category' => $pinfo['ca']['_content'],
+            'stable' => $latest,
+            'license' => $pinfo['l'],
+            'summary' => $pinfo['s'],
+            'description' => $pinfo['d'],
+            'releases' => $releases,
+            'deprecated' => $deprecated,
+            );
+    }
+
+    /**
+     * Return an array containing all of the states that are more stable than
+     * or equal to the passed in state
+     *
+     * @param string Release state
+     * @param boolean Determines whether to include $state in the list
+     * @return false|array False if $state is not a valid release state
+     */
+    function betterStates($state, $include = false)
+    {
+        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+        $i = array_search($state, $states);
+        if ($i === false) {
+            return false;
+        }
+
+        if ($include) {
+            $i--;
+        }
+
+        return array_slice($states, $i + 1);
+    }
+
+    /**
+     * Sort releases by version number
+     *
+     * @access private
+     */
+    function _sortReleasesByVersionNumber($a, $b)
+    {
+        if (version_compare($a['v'], $b['v'], '=')) {
+            return 0;
+        }
+
+        if (version_compare($a['v'], $b['v'], '>')) {
+            return -1;
+        }
+
+        if (version_compare($a['v'], $b['v'], '<')) {
+            return 1;
+        }
+    }
+}                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.8.0/PEAR/REST/11.php                                                                         100664     764     764        26471      100664   7575                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_REST_11 - implement faster list-all/remote-list command
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: 11.php,v 1.14 2008/04/11 01:16:40 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: 11.php,v 1.16 2009/02/24 23:39:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.3
  */
@@ -30614,9 +30594,9 @@ require_once 'PEAR/REST.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.3
  */
@@ -30638,10 +30618,12 @@ class PEAR_REST_11
         if (PEAR::isError($categorylist)) {
             return $categorylist;
         }
+
         $ret = array();
         if (!is_array($categorylist['c']) || !isset($categorylist['c'][0])) {
             $categorylist['c'] = array($categorylist['c']);
         }
+
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
 
         foreach ($categorylist['c'] as $progress => $category) {
@@ -30662,6 +30644,10 @@ class PEAR_REST_11
             }
 
             foreach ($packagesinfo['pi'] as $packageinfo) {
+                if (empty($packageinfo)) {
+                    continue;
+                }
+
                 $info = $packageinfo['p'];
                 $package = $info['n'];
                 $releases = isset($packageinfo['a']) ? $packageinfo['a'] : false;
@@ -30897,24 +30883,18 @@ class PEAR_REST_11
         return array_slice($states, $i + 1);
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PEAR-1.7.2/PEAR/REST/13.php                                                                         100644    1750    1750        27653 11014312742   7762                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                       PEAR-1.8.0/PEAR/REST/13.php                                                                         100664     764     764        27117      100664   7575                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_REST_13
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: 13.php,v 1.6 2008/04/11 01:16:40 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: 13.php,v 1.8 2009/02/24 23:39:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a12
  */
@@ -30931,9 +30911,9 @@ require_once 'PEAR/REST/10.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a12
  */
@@ -30965,6 +30945,7 @@ class PEAR_REST_13 extends PEAR_REST_10
         if (!$states) {
             return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
         }
+
         $state   = isset($packageinfo['state'])   ? $packageinfo['state']   : null;
         $version = isset($packageinfo['version']) ? $packageinfo['version'] : null;
         $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
@@ -30973,19 +30954,23 @@ class PEAR_REST_13 extends PEAR_REST_10
             return PEAR::raiseError('No releases available for package "' .
                 $channel . '/' . $package . '"');
         }
+
         if (!isset($info['r'])) {
             return false;
         }
+
         $release = $found = false;
         if (!is_array($info['r']) || !isset($info['r'][0])) {
             $info['r'] = array($info['r']);
         }
+
         $skippedphp = false;
         foreach ($info['r'] as $release) {
             if (!isset($this->_rest->_options['force']) && ($installed &&
                   version_compare($release['v'], $installed, '<'))) {
                 continue;
             }
+
             if (isset($state)) {
                 // try our preferred state first
                 if ($release['s'] == $state) {
@@ -30997,6 +30982,7 @@ class PEAR_REST_13 extends PEAR_REST_10
                     $found = true;
                     break;
                 }
+
                 // see if there is something newer and more stable
                 // bug #7221
                 if (in_array($release['s'], $this->betterStates($state), true)) {
@@ -31032,9 +31018,11 @@ class PEAR_REST_13 extends PEAR_REST_10
                 }
             }
         }
+
         if (!$found && $skippedphp) {
             $found = null;
         }
+
         return $this->_returnDownloadURL($base, $package, $release, $info, $found, $skippedphp, $channel);
     }
 
@@ -31047,6 +31035,7 @@ class PEAR_REST_13 extends PEAR_REST_10
         if (!$states) {
             return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
         }
+
         $state   = isset($dependency['state'])   ? $dependency['state']   : null;
         $version = isset($dependency['version']) ? $dependency['version'] : null;
         $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
@@ -31055,9 +31044,11 @@ class PEAR_REST_13 extends PEAR_REST_10
             return PEAR::raiseError('Package "' . $deppackage['channel'] . '/' . $deppackage['package']
                 . '" dependency "' . $channel . '/' . $package . '" has no releases');
         }
+
         if (!is_array($info) || !isset($info['r'])) {
             return false;
         }
+
         $exclude = array();
         $min = $max = $recommended = false;
         if ($xsdversion == '1.0') {
@@ -31097,31 +31088,37 @@ class PEAR_REST_13 extends PEAR_REST_10
                 }
             }
         }
+
         $found = false;
         $release = false;
         $skippedphp = false;
         if (!is_array($info['r']) || !isset($info['r'][0])) {
             $info['r'] = array($info['r']);
         }
+
         foreach ($info['r'] as $release) {
             if (!isset($this->_rest->_options['force']) && ($installed &&
                   version_compare($release['v'], $installed, '<'))) {
                 continue;
             }
+
             if (in_array($release['v'], $exclude)) { // skip excluded versions
                 continue;
             }
+
             // allow newer releases to say "I'm OK with the dependent package"
             if ($xsdversion == '2.0' && isset($release['co'])) {
                 if (!is_array($release['co']) || !isset($release['co'][0])) {
                     $release['co'] = array($release['co']);
                 }
+
                 foreach ($release['co'] as $entry) {
                     if (isset($entry['x']) && !is_array($entry['x'])) {
                         $entry['x'] = array($entry['x']);
                     } elseif (!isset($entry['x'])) {
                         $entry['x'] = array();
                     }
+
                     if ($entry['c'] == $deppackage['channel'] &&
                           strtolower($entry['p']) == strtolower($deppackage['package']) &&
                           version_compare($deppackage['version'], $entry['min'], '>=') &&
@@ -31133,32 +31130,38 @@ class PEAR_REST_13 extends PEAR_REST_10
                             $skippedphp = $release;
                             continue;
                         }
+
                         $recommended = $release['v'];
                         break;
                     }
                 }
             }
+
             if ($recommended) {
                 if ($release['v'] != $recommended) { // if we want a specific
                     // version, then skip all others
                     continue;
-                } else {
-                    if (!in_array($release['s'], $states)) {
-                        // the stability is too low, but we must return the
-                        // recommended version if possible
-                        return $this->_returnDownloadURL($base, $package, $release, $info, true, false, $channel);
-                    }
+                }
+
+                if (!in_array($release['s'], $states)) {
+                    // the stability is too low, but we must return the
+                    // recommended version if possible
+                    return $this->_returnDownloadURL($base, $package, $release, $info, true, false, $channel);
                 }
             }
+
             if ($min && version_compare($release['v'], $min, 'lt')) { // skip too old versions
                 continue;
             }
+
             if ($max && version_compare($release['v'], $max, 'gt')) { // skip too new versions
                 continue;
             }
+
             if ($installed && version_compare($release['v'], $installed, '<')) {
                 continue;
             }
+
             if (in_array($release['s'], $states)) { // if in the preferred state...
                 if (version_compare($release['m'], phpversion(), '>')) {
                     // skip dependency releases that require a PHP version
@@ -31166,34 +31169,30 @@ class PEAR_REST_13 extends PEAR_REST_10
                     $skippedphp = $release;
                     continue;
                 }
+
                 $found = true; // ... then use it
                 break;
             }
         }
+
         if (!$found && $skippedphp) {
             $found = null;
         }
+
         return $this->_returnDownloadURL($base, $package, $release, $info, $found, $skippedphp, $channel);
     }
-}
-?>                                                                                     PEAR-1.7.2/PEAR/Task/Postinstallscript/rw.php                                                       100644    1750    1750        14076 11014312742  14050                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.8.0/PEAR/Task/Postinstallscript/rw.php                                                       100664     764     764        13314      100664  13662                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * <tasks:postinstallscript> - read/write version
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.12 2008/01/03 20:26:37 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.14 2009/02/24 23:45:32 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a10
  */
@@ -31206,9 +31205,9 @@ require_once 'PEAR/Task/Postinstallscript.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -31254,7 +31253,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
      * sequence the users should see the paramgroups.  The $params
      * parameter should either be the result of a call to {@link getParam()}
      * or an array of calls to getParam().
-     * 
+     *
      * Use {@link addConditionTypeGroup()} to add a <paramgroup> containing
      * a <conditiontype> tag
      * @param string $id <paramgroup> id as seen by the script
@@ -31288,7 +31287,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
      * sequence the users should see the paramgroups.  The $params
      * parameter should either be the result of a call to {@link getParam()}
      * or an array of calls to getParam().
-     * 
+     *
      * Use {@link addParamGroup()} to add a simple <paramgroup>
      *
      * @param string $id <paramgroup> id as seen by the script
@@ -31307,10 +31306,9 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
         if ($params && isset($params[0]) && !isset($params[1])) {
             $params = $params[0];
         }
-        $stuff =
-            array(
-                $this->_pkg->getTasksNs() . ':id' => $id,
-            );
+        $stuff = array(
+            $this->_pkg->getTasksNs() . ':id' => $id,
+        );
         if ($instructions) {
             $stuff[$this->_pkg->getTasksNs() . ':instructions'] = $instructions;
         }
@@ -31335,7 +31333,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
     function getParam($name, $prompt, $type = 'string', $default = null)
     {
         if ($default !== null) {
-            return 
+            return
             array(
                 $this->_pkg->getTasksNs() . ':name' => $name,
                 $this->_pkg->getTasksNs() . ':prompt' => $prompt,
@@ -31351,212 +31349,188 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
             );
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                  PEAR-1.7.2/PEAR/Task/Replace/rw.php                                                                 100644    1750    1750         3652 11014312742  11640                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * <tasks:replace> - read/write version
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.4 2008/01/03 20:26:37 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a10
- */
-/**
- * Base class
- */
-require_once 'PEAR/Task/Replace.php';
-/**
- * Abstracts the replace task xml.
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a10
- */
-class PEAR_Task_Replace_rw extends PEAR_Task_Replace
-{
-    function PEAR_Task_Replace_rw(&$pkg, &$config, &$logger, $fileXml)
-    {
-        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
-        $this->_contents = $fileXml;
-        $this->_pkg = &$pkg;
-        $this->_params = array();
-    }
-
-    function validate()
-    {
-        return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents);
-    }
-
-    function setInfo($from, $to, $type)
-    {
-        $this->_params = array('attribs' => array('from' => $from, 'to' => $to, 'type' => $type));
-    }
-
-    function getName()
-    {
-        return 'replace';
-    }
-
-    function getXml()
-    {
-        return $this->_params;
-    }
-}
-?>                                                                                      PEAR-1.7.2/PEAR/Task/Unixeol/rw.php                                                                 100644    1750    1750         3272 11014312742  11706                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * <tasks:unixeol> - read/write version
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.5 2008/01/03 20:26:37 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a10
- */
-/**
- * Base class
- */
-require_once 'PEAR/Task/Unixeol.php';
-/**
- * Abstracts the unixeol task xml.
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a10
- */
-class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
-{
-    function PEAR_Task_Unixeol_rw(&$pkg, &$config, &$logger, $fileXml)
-    {
-        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
-        $this->_contents = $fileXml;
-        $this->_pkg = &$pkg;
-        $this->_params = array();
-    }
-
-    function validate()
-    {
-        return true;
-    }
-
-    function getName()
-    {
-        return 'unixeol';
-    }
-
-    function getXml()
-    {
-        return '';
-    }
-}
-?>                                                                                                                                                                                                                                                                                                                                      PEAR-1.7.2/PEAR/Task/Windowseol/rw.php                                                              100644    1750    1750         3317 11014312742  12415                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * <tasks:windowseol> - read/write version
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.5 2008/01/03 20:26:37 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a10
- */
-/**
- * Base class
- */
-require_once 'PEAR/Task/Windowseol.php';
-/**
- * Abstracts the windowseol task xml.
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a10
- */
-class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
-{
-    function PEAR_Task_Windowseol_rw(&$pkg, &$config, &$logger, $fileXml)
-    {
-        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
-        $this->_contents = $fileXml;
-        $this->_pkg = &$pkg;
-        $this->_params = array();
-    }
-
-    function validate()
-    {
-        return true;
-    }
-
-    function getName()
-    {
-        return 'windowseol';
-    }
-
-    function getXml()
-    {
-        return '';
-    }
-}
-?>                                                                                                                                                                                                                                                                                                                 PEAR-1.7.2/PEAR/Task/Common.php                                                                     100644    1750    1750        14474 11014312742  11111                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                                    PEAR-1.8.0/PEAR/Task/Replace/rw.php                                                                 100664     764     764         3213      100664  11451                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * <tasks:replace> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.5 2009/02/24 23:45:44 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Replace.php';
+/**
+ * Abstracts the replace task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Replace_rw extends PEAR_Task_Replace
+{
+    function PEAR_Task_Replace_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents);
+    }
+
+    function setInfo($from, $to, $type)
+    {
+        $this->_params = array('attribs' => array('from' => $from, 'to' => $to, 'type' => $type));
+    }
+
+    function getName()
+    {
+        return 'replace';
+    }
+
+    function getXml()
+    {
+        return $this->_params;
+    }
+}
+?>                                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.8.0/PEAR/Task/Unixeol/rw.php                                                                 100664     764     764         2626      100664  11530                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * <tasks:unixeol> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.6 2009/02/24 23:45:30 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Unixeol.php';
+/**
+ * Abstracts the unixeol task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
+{
+    function PEAR_Task_Unixeol_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return true;
+    }
+
+    function getName()
+    {
+        return 'unixeol';
+    }
+
+    function getXml()
+    {
+        return '';
+    }
+}
+?>                                                                                                          PEAR-1.8.0/PEAR/Task/Windowseol/rw.php                                                              100664     764     764         2653      100664  12237                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * <tasks:windowseol> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.6 2009/02/24 23:45:20 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'PEAR/Task/Windowseol.php';
+/**
+ * Abstracts the windowseol task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
+{
+    function PEAR_Task_Windowseol_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return true;
+    }
+
+    function getName()
+    {
+        return 'windowseol';
+    }
+
+    function getXml()
+    {
+        return '';
+    }
+}
+?>                                                                                     PEAR-1.8.0/PEAR/Task/Common.php                                                                     100664     764     764        13741      100664  10725                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Task_Common, base class for installer tasks
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.18 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.20 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -31592,9 +31566,9 @@ define('PEAR_TASK_PACKAGEANDINSTALL', 3);
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @abstract
@@ -31746,24 +31720,18 @@ class PEAR_Task_Common
         return PEAR::raiseError($msg, $code);
     }
 }
-?>                                                                                                                                                                                                    PEAR-1.7.2/PEAR/Task/Postinstallscript.php                                                          100644    1750    1750        34661 11014312742  13422                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                               PEAR-1.8.0/PEAR/Task/Postinstallscript.php                                                          100664     764     764        34125      100664  13235                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * <tasks:postinstallscript>
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Postinstallscript.php,v 1.20 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Postinstallscript.php,v 1.22 2009/02/24 23:45:56 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -31779,9 +31747,9 @@ require_once 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -31899,7 +31867,7 @@ class PEAR_Task_Postinstallscript extends PEAR_Task_Common
                         return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
                             $fileXml['name'] . '" ' . $tasksNamespace .
                             'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
-                            '" must have a ' . $tasksNamespace . 
+                            '" must have a ' . $tasksNamespace .
                             'conditiontype> tag containing either "=", ' .
                             '"!=", or "preg_match"');
                     }
@@ -32074,24 +32042,18 @@ class PEAR_Task_Postinstallscript extends PEAR_Task_Common
     {
     }
 }
-?>                                                                               PEAR-1.7.2/PEAR/Task/Replace.php                                                                    100644    1750    1750        15770 11014312742  11234                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                                                                                                                                                           PEAR-1.8.0/PEAR/Task/Replace.php                                                                    100664     764     764        15235      100664  11050                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * <tasks:replace>
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Replace.php,v 1.17 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Replace.php,v 1.19 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32104,9 +32066,9 @@ require_once 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32255,24 +32217,18 @@ class PEAR_Task_Replace extends PEAR_Task_Common
         return $contents;
     }
 }
-?>        PEAR-1.7.2/PEAR/Task/Unixeol.php                                                                    100644    1750    1750         5077 11014312742  11263                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                                                                                   PEAR-1.8.0/PEAR/Task/Unixeol.php                                                                    100664     764     764         4344      100664  11077                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * <tasks:unixeol>
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Unixeol.php,v 1.10 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Unixeol.php,v 1.12 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32285,9 +32241,9 @@ require_once 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32337,24 +32293,18 @@ class PEAR_Task_Unixeol extends PEAR_Task_Common
         return preg_replace("/\r\n|\n\r|\r|\n/", "\n", $contents);
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.7.2/PEAR/Task/Windowseol.php                                                                 100644    1750    1750         5072 11014312742  11765                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                            PEAR-1.8.0/PEAR/Task/Windowseol.php                                                                 100664     764     764         4340      100664  11602                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * <tasks:windowseol>
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Windowseol.php,v 1.9 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Windowseol.php,v 1.11 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -32367,9 +32317,9 @@ require_once 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -32419,7 +32369,7 @@ class PEAR_Task_Windowseol extends PEAR_Task_Common
         return preg_replace("/\r\n|\n\r|\r|\n/", "\r\n", $contents);
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.7.2/PEAR/Validator/PECL.php                                                                  100644    1750    1750         4154 11014312742  11401                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                PEAR-1.8.0/PEAR/Validator/PECL.php                                                                  100664     764     764         4200      100664  11211                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * Channel Validator for the pecl.php.net channel
  *
@@ -32429,8 +32379,8 @@ class PEAR_Task_Windowseol extends PEAR_Task_Common
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: PECL.php,v 1.9 2008/01/03 20:26:37 cellog Exp $
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: PECL.php,v 1.10 2009/02/24 23:39:19 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a5
  */
@@ -32443,9 +32393,9 @@ require_once 'PEAR/Validate.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a5
  */
@@ -32481,251 +32431,240 @@ class PEAR_Validator_PECL extends PEAR_Validate
         return $ret;
     }
 }
-?>                                                                                                                                                                                                                                                                                                                                                                                                                    PEAR-1.7.2/PEAR/Autoloader.php                                                                      100644    1750    1750        15402 11014312742  11046                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * Class auto-loader
- *
- * PHP versions 4
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Autoloader.php,v 1.14 2008/01/03 20:26:34 cellog Exp $
- * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
- * @since      File available since Release 0.1
- * @deprecated File deprecated in Release 1.4.0a1
- */
-
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-
-if (!extension_loaded("overload")) {
-    // die hard without ext/overload
-    die("Rebuild PHP with the `overload' extension to use PEAR_Autoloader");
-}
-
-/**
- * Include for PEAR_Error and PEAR classes
- */
-require_once "PEAR.php";
-
-/**
- * This class is for objects where you want to separate the code for
- * some methods into separate classes.  This is useful if you have a
- * class with not-frequently-used methods that contain lots of code
- * that you would like to avoid always parsing.
- *
- * The PEAR_Autoloader class provides autoloading and aggregation.
- * The autoloading lets you set up in which classes the separated
- * methods are found.  Aggregation is the technique used to import new
- * methods, an instance of each class providing separated methods is
- * stored and called every time the aggregated method is called.
- *
- * @category   pear
- * @package    PEAR
- * @author Stig Bakken <ssb at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
- * @since      File available since Release 0.1
- * @deprecated File deprecated in Release 1.4.0a1
- */
-class PEAR_Autoloader extends PEAR
-{
-    // {{{ properties
-
-    /**
-     * Map of methods and classes where they are defined
-     *
-     * @var array
-     *
-     * @access private
-     */
-    var $_autoload_map = array();
-
-    /**
-     * Map of methods and aggregate objects
-     *
-     * @var array
-     *
-     * @access private
-     */
-    var $_method_map = array();
-
-    // }}}
-    // {{{ addAutoload()
-
-    /**
-     * Add one or more autoload entries.
-     *
-     * @param string $method     which method to autoload
-     *
-     * @param string $classname  (optional) which class to find the method in.
-     *                           If the $method parameter is an array, this
-     *                           parameter may be omitted (and will be ignored
-     *                           if not), and the $method parameter will be
-     *                           treated as an associative array with method
-     *                           names as keys and class names as values.
-     *
-     * @return void
-     *
-     * @access public
-     */
-    function addAutoload($method, $classname = null)
-    {
-        if (is_array($method)) {
-            array_walk($method, create_function('$a,&$b', '$b = strtolower($b);'));
-            $this->_autoload_map = array_merge($this->_autoload_map, $method);
-        } else {
-            $this->_autoload_map[strtolower($method)] = $classname;
-        }
-    }
-
-    // }}}
-    // {{{ removeAutoload()
-
-    /**
-     * Remove an autoload entry.
-     *
-     * @param string $method  which method to remove the autoload entry for
-     *
-     * @return bool TRUE if an entry was removed, FALSE if not
-     *
-     * @access public
-     */
-    function removeAutoload($method)
-    {
-        $method = strtolower($method);
-        $ok = isset($this->_autoload_map[$method]);
-        unset($this->_autoload_map[$method]);
-        return $ok;
-    }
-
-    // }}}
-    // {{{ addAggregateObject()
-
-    /**
-     * Add an aggregate object to this object.  If the specified class
-     * is not defined, loading it will be attempted following PEAR's
-     * file naming scheme.  All the methods in the class will be
-     * aggregated, except private ones (name starting with an
-     * underscore) and constructors.
-     *
-     * @param string $classname  what class to instantiate for the object.
-     *
-     * @return void
-     *
-     * @access public
-     */
-    function addAggregateObject($classname)
-    {
-        $classname = strtolower($classname);
-        if (!class_exists($classname)) {
-            $include_file = preg_replace('/[^a-z0-9]/i', '_', $classname);
-            include_once $include_file;
-        }
-        $obj =& new $classname;
-        $methods = get_class_methods($classname);
-        foreach ($methods as $method) {
-            // don't import priviate methods and constructors
-            if ($method{0} != '_' && $method != $classname) {
-                $this->_method_map[$method] = $obj;
-            }
-        }
-    }
-
-    // }}}
-    // {{{ removeAggregateObject()
-
-    /**
-     * Remove an aggregate object.
-     *
-     * @param string $classname  the class of the object to remove
-     *
-     * @return bool  TRUE if an object was removed, FALSE if not
-     *
-     * @access public
-     */
-    function removeAggregateObject($classname)
-    {
-        $ok = false;
-        $classname = strtolower($classname);
-        reset($this->_method_map);
-        while (list($method, $obj) = each($this->_method_map)) {
-            if (is_a($obj, $classname)) {
-                unset($this->_method_map[$method]);
-                $ok = true;
-            }
-        }
-        return $ok;
-    }
-
-    // }}}
-    // {{{ __call()
-
-    /**
-     * Overloaded object call handler, called each time an
-     * undefined/aggregated method is invoked.  This method repeats
-     * the call in the right aggregate object and passes on the return
-     * value.
-     *
-     * @param string $method  which method that was called
-     *
-     * @param string $args    An array of the parameters passed in the
-     *                        original call
-     *
-     * @return mixed  The return value from the aggregated method, or a PEAR
-     *                error if the called method was unknown.
-     */
-    function __call($method, $args, &$retval)
-    {
-        $method = strtolower($method);
-        if (empty($this->_method_map[$method]) && isset($this->_autoload_map[$method])) {
-            $this->addAggregateObject($this->_autoload_map[$method]);
-        }
-        if (isset($this->_method_map[$method])) {
-            $retval = call_user_func_array(array($this->_method_map[$method], $method), $args);
-            return true;
-        }
-        return false;
-    }
-
-    // }}}
-}
-
-overload("PEAR_Autoloader");
-
-?>
-                                                                                                                                                                                                                                                              PEAR-1.7.2/PEAR/Builder.php                                                                         100644    1750    1750        37137 11014312742  10346                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                                                                                                                PEAR-1.8.0/PEAR/Autoloader.php                                                                      100664     764     764        15202      100664  10664                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * Class auto-loader
+ *
+ * PHP versions 4
+
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Autoloader.php,v 1.15 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
+ * @since      File available since Release 0.1
+ * @deprecated File deprecated in Release 1.4.0a1
+ */
+
+// /* vim: set expandtab tabstop=4 shiftwidth=4: */
+
+if (!extension_loaded("overload")) {
+    // die hard without ext/overload
+    die("Rebuild PHP with the `overload' extension to use PEAR_Autoloader");
+}
+
+/**
+ * Include for PEAR_Error and PEAR classes
+ */
+require_once "PEAR.php";
+
+/**
+ * This class is for objects where you want to separate the code for
+ * some methods into separate classes.  This is useful if you have a
+ * class with not-frequently-used methods that contain lots of code
+ * that you would like to avoid always parsing.
+ *
+ * The PEAR_Autoloader class provides autoloading and aggregation.
+ * The autoloading lets you set up in which classes the separated
+ * methods are found.  Aggregation is the technique used to import new
+ * methods, an instance of each class providing separated methods is
+ * stored and called every time the aggregated method is called.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author Stig Bakken <ssb at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
+ * @since      File available since Release 0.1
+ * @deprecated File deprecated in Release 1.4.0a1
+ */
+class PEAR_Autoloader extends PEAR
+{
+    // {{{ properties
+
+    /**
+     * Map of methods and classes where they are defined
+     *
+     * @var array
+     *
+     * @access private
+     */
+    var $_autoload_map = array();
+
+    /**
+     * Map of methods and aggregate objects
+     *
+     * @var array
+     *
+     * @access private
+     */
+    var $_method_map = array();
+
+    // }}}
+    // {{{ addAutoload()
+
+    /**
+     * Add one or more autoload entries.
+     *
+     * @param string $method     which method to autoload
+     *
+     * @param string $classname  (optional) which class to find the method in.
+     *                           If the $method parameter is an array, this
+     *                           parameter may be omitted (and will be ignored
+     *                           if not), and the $method parameter will be
+     *                           treated as an associative array with method
+     *                           names as keys and class names as values.
+     *
+     * @return void
+     *
+     * @access public
+     */
+    function addAutoload($method, $classname = null)
+    {
+        if (is_array($method)) {
+            array_walk($method, create_function('$a,&$b', '$b = strtolower($b);'));
+            $this->_autoload_map = array_merge($this->_autoload_map, $method);
+        } else {
+            $this->_autoload_map[strtolower($method)] = $classname;
+        }
+    }
+
+    // }}}
+    // {{{ removeAutoload()
+
+    /**
+     * Remove an autoload entry.
+     *
+     * @param string $method  which method to remove the autoload entry for
+     *
+     * @return bool TRUE if an entry was removed, FALSE if not
+     *
+     * @access public
+     */
+    function removeAutoload($method)
+    {
+        $method = strtolower($method);
+        $ok = isset($this->_autoload_map[$method]);
+        unset($this->_autoload_map[$method]);
+        return $ok;
+    }
+
+    // }}}
+    // {{{ addAggregateObject()
+
+    /**
+     * Add an aggregate object to this object.  If the specified class
+     * is not defined, loading it will be attempted following PEAR's
+     * file naming scheme.  All the methods in the class will be
+     * aggregated, except private ones (name starting with an
+     * underscore) and constructors.
+     *
+     * @param string $classname  what class to instantiate for the object.
+     *
+     * @return void
+     *
+     * @access public
+     */
+    function addAggregateObject($classname)
+    {
+        $classname = strtolower($classname);
+        if (!class_exists($classname)) {
+            $include_file = preg_replace('/[^a-z0-9]/i', '_', $classname);
+            include_once $include_file;
+        }
+        $obj =& new $classname;
+        $methods = get_class_methods($classname);
+        foreach ($methods as $method) {
+            // don't import priviate methods and constructors
+            if ($method{0} != '_' && $method != $classname) {
+                $this->_method_map[$method] = $obj;
+            }
+        }
+    }
+
+    // }}}
+    // {{{ removeAggregateObject()
+
+    /**
+     * Remove an aggregate object.
+     *
+     * @param string $classname  the class of the object to remove
+     *
+     * @return bool  TRUE if an object was removed, FALSE if not
+     *
+     * @access public
+     */
+    function removeAggregateObject($classname)
+    {
+        $ok = false;
+        $classname = strtolower($classname);
+        reset($this->_method_map);
+        while (list($method, $obj) = each($this->_method_map)) {
+            if (is_a($obj, $classname)) {
+                unset($this->_method_map[$method]);
+                $ok = true;
+            }
+        }
+        return $ok;
+    }
+
+    // }}}
+    // {{{ __call()
+
+    /**
+     * Overloaded object call handler, called each time an
+     * undefined/aggregated method is invoked.  This method repeats
+     * the call in the right aggregate object and passes on the return
+     * value.
+     *
+     * @param string $method  which method that was called
+     *
+     * @param string $args    An array of the parameters passed in the
+     *                        original call
+     *
+     * @return mixed  The return value from the aggregated method, or a PEAR
+     *                error if the called method was unknown.
+     */
+    function __call($method, $args, &$retval)
+    {
+        $method = strtolower($method);
+        if (empty($this->_method_map[$method]) && isset($this->_autoload_map[$method])) {
+            $this->addAggregateObject($this->_autoload_map[$method]);
+        }
+        if (isset($this->_method_map[$method])) {
+            $retval = call_user_func_array(array($this->_method_map[$method], $method), $args);
+            return true;
+        }
+        return false;
+    }
+
+    // }}}
+}
+
+overload("PEAR_Autoloader");
+
+?>
+                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.8.0/PEAR/Builder.php                                                                         100664     764     764        40123      100664  10153                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Builder for building PHP extensions (PECL packages)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Builder.php,v 1.34 2008/05/12 23:43:21 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Builder.php,v 1.38 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
- * 
+ *
  * TODO: log output parameters in PECL command line
  * TODO: msdev path in configuration
  */
@@ -32735,6 +32674,7 @@ overload("PEAR_Autoloader");
  */
 require_once 'PEAR/Common.php';
 require_once 'PEAR/PackageFile.php';
+
 /**
  * Class to handle building (compiling) extensions.
  *
@@ -32742,17 +32682,15 @@ require_once 'PEAR/PackageFile.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since PHP 4.0.2
  * @see        http://pear.php.net/manual/en/core.ppm.pear-builder.php
  */
 class PEAR_Builder extends PEAR_Common
 {
-    // {{{ properties
-
     var $php_api_version = 0;
     var $zend_module_api_no = 0;
     var $zend_extension_api_no = 0;
@@ -32768,8 +32706,6 @@ class PEAR_Builder extends PEAR_Common
     // used for msdev builds
     var $_lastline = null;
     var $_firstline = null;
-    // }}}
-    // {{{ constructor
 
     /**
      * PEAR_Builder constructor.
@@ -32784,10 +32720,6 @@ class PEAR_Builder extends PEAR_Common
         $this->setFrontendObject($ui);
     }
 
-    // }}}
-
-    // {{{ _build_win32()
-
     /**
      * Build an extension from source on windows.
      * requires msdev
@@ -32810,14 +32742,15 @@ class PEAR_Builder extends PEAR_Common
         if (!file_exists($dir) || !is_dir($dir) || !chdir($dir)) {
             return $this->raiseError("could not chdir to $dir");
         }
+
         // packages that were in a .tar have the packagefile in this directory
         $vdir = $pkg->getPackage() . '-' . $pkg->getVersion();
         if (file_exists($dir) && is_dir($vdir)) {
-            if (chdir($vdir)) {
-                $dir = getcwd();
-            } else {
+            if (!chdir($vdir)) {
                 return $this->raiseError("could not chdir to " . realpath($vdir));
             }
+
+            $dir = getcwd();
         }
 
         $this->log(2, "building in $dir");
@@ -32842,7 +32775,7 @@ class PEAR_Builder extends PEAR_Common
             $buildtype = $matches[2];
         }
 
-        if (preg_match('/(.*)?\s-\s(\d+).*?(\d+)/',$this->_lastline,$matches)) {
+        if (preg_match('/(.*)?\s-\s(\d+).*?(\d+)/', $this->_lastline, $matches)) {
             if ($matches[2]) {
                 // there were errors in the build
                 return $this->raiseError("There were errors during compilation.");
@@ -32864,7 +32797,7 @@ class PEAR_Builder extends PEAR_Common
                     $buildtype.'").*?'.
                     '\/out:"(.*?)"/is';
 
-        if ($dsptext && preg_match($regex,$dsptext,$matches)) {
+        if ($dsptext && preg_match($regex, $dsptext, $matches)) {
             // what we get back is a relative path to the output file itself.
             $outfile = realpath($matches[2]);
         } else {
@@ -32894,9 +32827,7 @@ class PEAR_Builder extends PEAR_Common
         $this->_lastline = $data;
         call_user_func($this->current_callback, $what, $data);
     }
-    // }}}
 
-    // {{{ _harventInstDir
     /**
      * @param string
      * @param string
@@ -32937,10 +32868,6 @@ class PEAR_Builder extends PEAR_Common
         return $ret;
     }
 
-    // }}}
-
-    // {{{ build()
-
     /**
      * Build an extension from source.  Runs "phpize" in the source
      * directory, but compiles in a temporary directory
@@ -32966,9 +32893,26 @@ class PEAR_Builder extends PEAR_Common
      */
     function build($descfile, $callback = null)
     {
+        if (preg_match('/(\\/|\\\\|^)([^\\/\\\\]+)?php(.+)?$/',
+                       $this->config->get('php_bin'), $matches)) {
+            if (isset($matches[2]) && strlen($matches[2]) &&
+                trim($matches[2]) != trim($this->config->get('php_prefix'))) {
+                $this->log(0, 'WARNING: php_bin ' . $this->config->get('php_bin') .
+                           ' appears to have a prefix ' . $matches[2] . ', but' .
+                           ' config variable php_prefix does not match');
+            }
+            if (isset($matches[3]) && strlen($matches[3]) &&
+                trim($matches[3]) != trim($this->config->get('php_suffix'))) {
+                $this->log(0, 'WARNING: php_bin ' . $this->config->get('php_bin') .
+                           ' appears to have a suffix ' . $matches[3] . ', but' .
+                           ' config variable php_suffix does not match');
+            }
+        }
+
+
         $this->current_callback = $callback;
         if (PEAR_OS == "Windows") {
-            return $this->_build_win32($descfile,$callback);
+            return $this->_build_win32($descfile, $callback);
         }
         if (PEAR_OS != 'Unix') {
             return $this->raiseError("building extensions not supported on this platform");
@@ -33002,7 +32946,10 @@ class PEAR_Builder extends PEAR_Common
         $dir = getcwd();
         $this->log(2, "building in $dir");
         putenv('PATH=' . $this->config->get('bin_dir') . ':' . getenv('PATH'));
-        $err = $this->_runCommand("phpize", array(&$this, 'phpizeCallback'));
+        $err = $this->_runCommand($this->config->get('php_prefix')
+                                . "phpize" .
+                                $this->config->get('php_suffix'),
+                                array(&$this, 'phpizeCallback'));
         if (PEAR::isError($err)) {
             return $err;
         }
@@ -33064,7 +33011,7 @@ class PEAR_Builder extends PEAR_Common
         if (!file_exists($build_dir) || !is_dir($build_dir) || !chdir($build_dir)) {
             return $this->raiseError("could not chdir to $build_dir");
         }
-        putenv('PHP_PEAR_VERSION=1.7.2');
+        putenv('PHP_PEAR_VERSION=1.8.0');
         foreach ($to_run as $cmd) {
             $err = $this->_runCommand($cmd, $callback);
             if (PEAR::isError($err)) {
@@ -33081,15 +33028,14 @@ class PEAR_Builder extends PEAR_Common
             return $this->raiseError("no `modules' directory found");
         }
         $built_files = array();
-        $prefix = exec("php-config --prefix");
+        $prefix = exec($this->config->get('php_prefix')
+                        . "php-config" .
+                       $this->config->get('php_suffix') . " --prefix");
         $this->_harvestInstDir($prefix, $inst_dir . DIRECTORY_SEPARATOR . $prefix, $built_files);
         chdir($old_cwd);
         return $built_files;
     }
 
-    // }}}
-    // {{{ phpizeCallback()
-
     /**
      * Message callback function used when running the "phpize"
      * program.  Extracts the API numbers used.  Ignores other message
@@ -33123,9 +33069,6 @@ class PEAR_Builder extends PEAR_Common
         }
     }
 
-    // }}}
-    // {{{ _runCommand()
-
     /**
      * Run an external command, using a message callback to report
      * output.  The command will be run through popen and output is
@@ -33164,17 +33107,11 @@ class PEAR_Builder extends PEAR_Common
         if ($callback && isset($olddbg)) {
             $callback[0]->debug = $olddbg;
         }
-        if (is_resource($pp)) {
-            $exitcode = pclose($pp);
-        } else {
-            $exitcode = -1;
-        }
+
+        $exitcode = is_resource($pp) ? pclose($pp) : -1;
         return ($exitcode == 0);
     }
 
-    // }}}
-    // {{{ log()
-
     function log($level, $msg)
     {
         if ($this->current_callback) {
@@ -33185,29 +33122,18 @@ class PEAR_Builder extends PEAR_Common
         }
         return PEAR_Common::log($level, $msg);
     }
-
-    // }}}
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                 PEAR-1.7.2/PEAR/ChannelFile.php                                                                     100644    1750    1750       157212 11014312742  11145                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.8.0/PEAR/ChannelFile.php                                                                     100664     764     764       142432      100664  10763                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_ChannelFile, the channel handling class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: ChannelFile.php,v 1.80 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: ChannelFile.php,v 1.84 2009/03/09 01:03:51 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -33264,11 +33190,11 @@ define('PEAR_CHANNELFILE_ERROR_NO_SUMMARY', 8);
  */
 define('PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY', 9);
 /**
- * Error code when channel server is missing for xmlrpc or soap protocol
+ * Error code when channel server is missing for protocol
  */
 define('PEAR_CHANNELFILE_ERROR_NO_HOST', 10);
 /**
- * Error code when channel server is invalid for xmlrpc or soap protocol
+ * Error code when channel server is invalid for protocol
  */
 define('PEAR_CHANNELFILE_ERROR_INVALID_HOST', 11);
 /**
@@ -33320,11 +33246,11 @@ define('PEAR_CHANNELFILE_ERROR_NO_STATICVERSION', 34);
  * Error code when <baseurl> contains no type attribute in a <rest> protocol definition
  */
 define('PEAR_CHANNELFILE_ERROR_NOBASEURLTYPE', 35);
-/** 
+/**
  * Error code when a mirror is defined and the channel.xml represents the __uri pseudo-channel
  */
 define('PEAR_CHANNELFILE_URI_CANT_MIRROR', 36);
-/** 
+/**
  * Error code when ssl attribute is present and is not "yes"
  */
 define('PEAR_CHANNELFILE_ERROR_INVALID_SSL', 37);
@@ -33342,20 +33268,21 @@ $GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] =  array('server');
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
-class PEAR_ChannelFile {
+class PEAR_ChannelFile
+{
     /**
      * @access private
      * @var PEAR_ErrorStack
      * @access private
      */
     var $_stack;
-    
+
     /**
      * Supported channel.xml versions, for parsing
      * @var array
@@ -33383,7 +33310,7 @@ class PEAR_ChannelFile {
      * @access private
      */
     var $_mirrorIndex;
-    
+
     /**
      * Flag used to determine the validity of parsed content
      * @var boolean
@@ -33397,7 +33324,7 @@ class PEAR_ChannelFile {
         $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
         $this->_isValid = false;
     }
-    
+
     /**
      * @return array
      * @access protected
@@ -33489,7 +33416,7 @@ class PEAR_ChannelFile {
             return false;
         }
     }
-    
+
     /**
      * @return array
      */
@@ -33500,7 +33427,7 @@ class PEAR_ChannelFile {
         }
         return $this->_channelInfo;
     }
-    
+
     /**
      * @param array
      * @static
@@ -33530,7 +33457,7 @@ class PEAR_ChannelFile {
         $a->_fromArray($data);
         return $a;
     }
-    
+
     /**
      * @param array
      * @access private
@@ -33539,7 +33466,7 @@ class PEAR_ChannelFile {
     {
         $this->_channelInfo = $data;
     }
-    
+
     /**
      * Wrapper to {@link PEAR_ErrorStack::getErrors()}
      * @param boolean determines whether to purge the error stack after retrieving
@@ -33676,15 +33603,9 @@ class PEAR_ChannelFile {
             $ret .= ' port="' . $channelInfo['servers']['primary']['attribs']['port'] . '"';
         }
         $ret .= ">\n";
-        if (isset($channelInfo['servers']['primary']['xmlrpc'])) {
-            $ret .= $this->_makeXmlrpcXml($channelInfo['servers']['primary']['xmlrpc'], '   ');
-        }
         if (isset($channelInfo['servers']['primary']['rest'])) {
             $ret .= $this->_makeRestXml($channelInfo['servers']['primary']['rest'], '   ');
         }
-        if (isset($channelInfo['servers']['primary']['soap'])) {
-            $ret .= $this->_makeSoapXml($channelInfo['servers']['primary']['soap'], '   ');
-        }
         $ret .= "  </primary>\n";
         if (isset($channelInfo['servers']['mirror'])) {
             $ret .= $this->_makeMirrorsXml($channelInfo);
@@ -33695,38 +33616,6 @@ class PEAR_ChannelFile {
     }
 
     /**
-     * Generate the <xmlrpc> tag
-     * @access private
-     */
-    function _makeXmlrpcXml($info, $indent)
-    {
-        $ret = $indent . "<xmlrpc";
-        if (isset($info['attribs']['path'])) {
-            $ret .= ' path="' . htmlspecialchars($info['attribs']['path']) . '"';
-        }
-        $ret .= ">\n";
-        $ret .= $this->_makeFunctionsXml($info['function'], "$indent ");
-        $ret .= $indent . "</xmlrpc>\n";
-        return $ret;
-    }
-
-    /**
-     * Generate the <soap> tag
-     * @access private
-     */
-    function _makeSoapXml($info, $indent)
-    {
-        $ret = $indent . "<soap";
-        if (isset($info['attribs']['path'])) {
-            $ret .= ' path="' . htmlspecialchars($info['attribs']['path']) . '"';
-        }
-        $ret .= ">\n";
-        $ret .= $this->_makeFunctionsXml($info['function'], "$indent ");
-        $ret .= $indent . "</soap>\n";
-        return $ret;
-    }
-
-    /**
      * Generate the <rest> tag
      * @access private
      */
@@ -33763,16 +33652,10 @@ class PEAR_ChannelFile {
                 $ret .= ' ssl="' . $mirror['attribs']['ssl'] . '"';
             }
             $ret .= ">\n";
-            if (isset($mirror['xmlrpc']) || isset($mirror['soap'])) {
-                if (isset($mirror['xmlrpc'])) {
-                    $ret .= $this->_makeXmlrpcXml($mirror['xmlrpc'], '   ');
-                }
+            if (isset($mirror['rest'])) {
                 if (isset($mirror['rest'])) {
                     $ret .= $this->_makeRestXml($mirror['rest'], '   ');
                 }
-                if (isset($mirror['soap'])) {
-                    $ret .= $this->_makeSoapXml($mirror['soap'], '   ');
-                }
                 $ret .= "  </mirror>\n";
             } else {
                 $ret .= "/>\n";
@@ -33872,26 +33755,20 @@ class PEAR_ChannelFile {
                     array('package' => $content));
             }
         }
-        if (isset($info['servers']['primary']['attribs']['port']) &&
+
+        if (isset($info['servers']['primary']['attribs'], $info['servers']['primary']['attribs']['port']) &&
               !is_numeric($info['servers']['primary']['attribs']['port'])) {
             $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_PORT,
                 array('port' => $info['servers']['primary']['attribs']['port']));
         }
-        if (isset($info['servers']['primary']['attribs']['ssl']) &&
+
+        if (isset($info['servers']['primary']['attribs'], $info['servers']['primary']['attribs']['ssl']) &&
               $info['servers']['primary']['attribs']['ssl'] != 'yes') {
             $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_SSL,
                 array('ssl' => $info['servers']['primary']['attribs']['ssl'],
                     'server' => $info['name']));
         }
 
-        if (isset($info['servers']['primary']['xmlrpc']) &&
-              isset($info['servers']['primary']['xmlrpc']['function'])) {
-            $this->_validateFunctions('xmlrpc', $info['servers']['primary']['xmlrpc']['function']);
-        }
-        if (isset($info['servers']['primary']['soap']) &&
-              isset($info['servers']['primary']['soap']['function'])) {
-            $this->_validateFunctions('soap', $info['servers']['primary']['soap']['function']);
-        }
         if (isset($info['servers']['primary']['rest']) &&
               isset($info['servers']['primary']['rest']['baseurl'])) {
             $this->_validateFunctions('rest', $info['servers']['primary']['rest']['baseurl']);
@@ -33915,14 +33792,6 @@ class PEAR_ChannelFile {
                     $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_SSL,
                         array('ssl' => $info['ssl'], 'server' => $mirror['attribs']['host']));
                 }
-                if (isset($mirror['xmlrpc'])) {
-                    $this->_validateFunctions('xmlrpc',
-                        $mirror['xmlrpc']['function'], $mirror['attribs']['host']);
-                }
-                if (isset($mirror['soap'])) {
-                    $this->_validateFunctions('soap', $mirror['soap']['function'],
-                        $mirror['attribs']['host']);
-                }
                 if (isset($mirror['rest'])) {
                     $this->_validateFunctions('rest', $mirror['rest']['baseurl'],
                         $mirror['attribs']['host']);
@@ -33933,7 +33802,7 @@ class PEAR_ChannelFile {
     }
 
     /**
-     * @param string xmlrpc or soap - protocol name this function applies to
+     * @param string  rest - protocol name this function applies to
      * @param array the functions
      * @param string the name of the parent element (mirror name, for instance)
      */
@@ -33983,9 +33852,9 @@ class PEAR_ChannelFile {
     {
         if (isset($this->_channelInfo['name'])) {
             return $this->_channelInfo['name'];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -33995,9 +33864,9 @@ class PEAR_ChannelFile {
     {
         if (isset($this->_channelInfo['name'])) {
             return $this->_channelInfo['name'];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -34009,21 +33878,26 @@ class PEAR_ChannelFile {
             if ($mir = $this->getMirror($mirror)) {
                 if (isset($mir['attribs']['port'])) {
                     return $mir['attribs']['port'];
-                } else {
-                    if ($this->getSSL($mirror)) {
-                        return 443;
-                    }
-                    return 80;
                 }
+
+                if ($this->getSSL($mirror)) {
+                    return 443;
+                }
+
+                return 80;
             }
+
             return false;
         }
+
         if (isset($this->_channelInfo['servers']['primary']['attribs']['port'])) {
             return $this->_channelInfo['servers']['primary']['attribs']['port'];
         }
+
         if ($this->getSSL()) {
             return 443;
         }
+
         return 80;
     }
 
@@ -34036,15 +33910,18 @@ class PEAR_ChannelFile {
             if ($mir = $this->getMirror($mirror)) {
                 if (isset($mir['attribs']['ssl'])) {
                     return true;
-                } else {
-                    return false;
                 }
+
+                return false;
             }
+
             return false;
         }
+
         if (isset($this->_channelInfo['servers']['primary']['attribs']['ssl'])) {
             return true;
         }
+
         return false;
     }
 
@@ -34055,37 +33932,13 @@ class PEAR_ChannelFile {
     {
         if (isset($this->_channelInfo['summary'])) {
             return $this->_channelInfo['summary'];
-        } else {
-            return false;
         }
-    }
 
-    /**
-     * @param string xmlrpc or soap
-     * @param string|false mirror name or false for primary server
-     */
-    function getPath($protocol, $mirror = false)
-    {   
-        if (!in_array($protocol, array('xmlrpc', 'soap'))) {
-            return false;
-        }
-        if ($mirror) {
-            if (!($mir = $this->getMirror($mirror))) {
-                return false;
-            }
-            if (isset($mir[$protocol]['attribs']['path'])) {
-                return $mir[$protocol]['attribs']['path'];
-            } else {
-                return $protocol . '.php';
-            }
-        } elseif (isset($this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'])) {
-            return $this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'];
-        }
-        return $protocol . '.php';
+        return false;
     }
 
     /**
-     * @param string protocol type (xmlrpc, soap)
+     * @param string protocol type
      * @param string Mirror name
      * @return array|false
      */
@@ -34094,24 +33947,23 @@ class PEAR_ChannelFile {
         if ($this->getName() == '__uri') {
             return false;
         }
-        if ($protocol == 'rest') {
-            $function = 'baseurl';
-        } else {
-            $function = 'function';
-        }
+
+        $function = $protocol == 'rest' ? 'baseurl' : 'function';
         if ($mirror) {
             if ($mir = $this->getMirror($mirror)) {
                 if (isset($mir[$protocol][$function])) {
                     return $mir[$protocol][$function];
                 }
             }
+
             return false;
         }
+
         if (isset($this->_channelInfo['servers']['primary'][$protocol][$function])) {
             return $this->_channelInfo['servers']['primary'][$protocol][$function];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -34127,15 +33979,19 @@ class PEAR_ChannelFile {
         if (!$protocols) {
             return false;
         }
+
         foreach ($protocols as $protocol) {
             if ($name === null) {
                 return $protocol;
             }
+
             if ($protocol['_content'] != $name) {
                 continue;
             }
+
             return $protocol;
         }
+
         return false;
      }
 
@@ -34152,18 +34008,23 @@ class PEAR_ChannelFile {
         if (!$protocols) {
             return false;
         }
+
         foreach ($protocols as $protocol) {
             if ($protocol['attribs']['version'] != $version) {
                 continue;
             }
+
             if ($name === null) {
                 return true;
             }
+
             if ($protocol['_content'] != $name) {
                 continue;
             }
+
             return true;
         }
+
         return false;
     }
 
@@ -34178,12 +34039,15 @@ class PEAR_ChannelFile {
         if ($mirror == $this->_channelInfo['name']) {
             $mirror = false;
         }
+
         if ($mirror) {
             if ($mir = $this->getMirror($mirror)) {
                 return isset($mir['rest']);
             }
+
             return false;
         }
+
         return isset($this->_channelInfo['servers']['primary']['rest']);
     }
 
@@ -34199,23 +34063,28 @@ class PEAR_ChannelFile {
         if ($mirror == $this->_channelInfo['name']) {
             $mirror = false;
         }
+
         if ($mirror) {
-            if ($mir = $this->getMirror($mirror)) {
-                $rest = $mir['rest'];
-            } else {
+            $mir = $this->getMirror($mirror);
+            if (!$mir) {
                 return false;
             }
+
+            $rest = $mir['rest'];
         } else {
             $rest = $this->_channelInfo['servers']['primary']['rest'];
         }
+
         if (!isset($rest['baseurl'][0])) {
             $rest['baseurl'] = array($rest['baseurl']);
         }
+
         foreach ($rest['baseurl'] as $baseurl) {
             if (strtolower($baseurl['attribs']['type']) == strtolower($resourceType)) {
                 return $baseurl['_content'];
             }
         }
+
         return false;
     }
 
@@ -34231,7 +34100,7 @@ class PEAR_ChannelFile {
 
     /**
      * Empty all protocol definitions
-     * @param string protocol type (xmlrpc, soap)
+     * @param string protocol type
      * @param string|false mirror name, if any
      */
     function resetFunctions($type, $mirror = false)
@@ -34242,24 +34111,28 @@ class PEAR_ChannelFile {
                 if (!isset($mirrors[0])) {
                     $mirrors = array($mirrors);
                 }
+
                 foreach ($mirrors as $i => $mir) {
                     if ($mir['attribs']['host'] == $mirror) {
                         if (isset($this->_channelInfo['servers']['mirror'][$i][$type])) {
                             unset($this->_channelInfo['servers']['mirror'][$i][$type]);
                         }
+
                         return true;
                     }
                 }
+
                 return false;
-            } else {
-                return false;
-            }
-        } else {
-            if (isset($this->_channelInfo['servers']['primary'][$type])) {
-                unset($this->_channelInfo['servers']['primary'][$type]);
             }
-            return true;
+
+            return false;
         }
+
+        if (isset($this->_channelInfo['servers']['primary'][$type])) {
+            unset($this->_channelInfo['servers']['primary'][$type]);
+        }
+
+        return true;
     }
 
     /**
@@ -34269,19 +34142,7 @@ class PEAR_ChannelFile {
     {
         switch ($version) {
             case '1.0' :
-                $this->resetFunctions('xmlrpc', $mirror);
-                $this->resetFunctions('soap', $mirror);
                 $this->resetREST($mirror);
-                $this->addFunction('xmlrpc', '1.0', 'logintest', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.listLatestReleases', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.listAll', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.info', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.getDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.1', 'package.getDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.getDepDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.1', 'package.getDepDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.search', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'channel.listAll', $mirror);
                 return true;
             break;
             default :
@@ -34289,7 +34150,7 @@ class PEAR_ChannelFile {
             break;
         }
     }
-    
+
     /**
      * @return array
      */
@@ -34300,10 +34161,11 @@ class PEAR_ChannelFile {
             if (!isset($mirrors[0])) {
                 $mirrors = array($mirrors);
             }
+
             return $mirrors;
-        } else {
-            return array();
         }
+
+        return array();
     }
 
     /**
@@ -34317,6 +34179,7 @@ class PEAR_ChannelFile {
                 return $mirror;
             }
         }
+
         return false;
     }
 
@@ -34344,6 +34207,7 @@ class PEAR_ChannelFile {
                     array('mirror' => $mirror));
                 return false;
             }
+
             if (isset($this->_channelInfo['servers']['mirror'][0])) {
                 foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
                     if ($mirror == $mir['attribs']['host']) {
@@ -34351,6 +34215,7 @@ class PEAR_ChannelFile {
                         return true;
                     }
                 }
+
                 return false;
             } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
                 $this->_channelInfo['servers']['mirror']['attribs']['port'] = $port;
@@ -34358,6 +34223,7 @@ class PEAR_ChannelFile {
                 return true;
             }
         }
+
         $this->_channelInfo['servers']['primary']['attribs']['port'] = $port;
         $this->_isValid = false;
         return true;
@@ -34376,6 +34242,7 @@ class PEAR_ChannelFile {
                     array('mirror' => $mirror));
                 return false;
             }
+
             if (isset($this->_channelInfo['servers']['mirror'][0])) {
                 foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
                     if ($mirror == $mir['attribs']['host']) {
@@ -34387,9 +34254,11 @@ class PEAR_ChannelFile {
                         } else {
                             $this->_channelInfo['servers']['mirror'][$i]['attribs']['ssl'] = 'yes';
                         }
+
                         return true;
                     }
                 }
+
                 return false;
             } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
                 if (!$ssl) {
@@ -34399,10 +34268,12 @@ class PEAR_ChannelFile {
                 } else {
                     $this->_channelInfo['servers']['mirror']['attribs']['ssl'] = 'yes';
                 }
+
                 $this->_isValid = false;
                 return true;
             }
         }
+
         if ($ssl) {
             $this->_channelInfo['servers']['primary']['attribs']['ssl'] = 'yes';
         } else {
@@ -34410,44 +34281,7 @@ class PEAR_ChannelFile {
                 unset($this->_channelInfo['servers']['primary']['attribs']['ssl']);
             }
         }
-        $this->_isValid = false;
-        return true;
-    }
 
-    /**
-     * Set the socket number (port) that is used to connect to this channel
-     * @param integer
-     * @param string|false name of the mirror server, or false for the primary
-     */
-    function setPath($protocol, $path, $mirror = false)
-    {
-        if (!in_array($protocol, array('xmlrpc', 'soap'))) {
-            return false;
-        }
-        if ($mirror) {
-            if (!isset($this->_channelInfo['servers']['mirror'])) {
-                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
-                    array('mirror' => $mirror));
-                return false;
-            }
-            if (isset($this->_channelInfo['servers']['mirror'][0])) {
-                foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
-                    if ($mirror == $mir['attribs']['host']) {
-                        $this->_channelInfo['servers']['mirror'][$i][$protocol]['attribs']['path'] =
-                            $path;
-                        return true;
-                    }
-                }
-                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
-                    array('mirror' => $mirror));
-                return false;
-            } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
-                $this->_channelInfo['servers']['mirror'][$protocol]['attribs']['path'] = $path;
-                $this->_isValid = false;
-                return true;
-            }
-        }
-        $this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'] = $path;
         $this->_isValid = false;
         return true;
     }
@@ -34468,6 +34302,7 @@ class PEAR_ChannelFile {
                 array('tag' => 'name', 'name' => $server));
             return false;
         }
+
         if ($mirror) {
             $found = false;
             foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
@@ -34476,14 +34311,17 @@ class PEAR_ChannelFile {
                     break;
                 }
             }
+
             if (!$found) {
                 $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
                     array('mirror' => $mirror));
                 return false;
             }
+
             $this->_channelInfo['mirror'][$i]['attribs']['host'] = $server;
             return true;
         }
+
         $this->_channelInfo['name'] = $server;
         return true;
     }
@@ -34503,6 +34341,7 @@ class PEAR_ChannelFile {
             $this->_validateWarning(PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY,
                 array('summary' => $summary));
         }
+
         $this->_channelInfo['summary'] = $summary;
         return true;
     }
@@ -34519,11 +34358,13 @@ class PEAR_ChannelFile {
                 array('tag' => 'suggestedalias', 'name' => $alias));
             return false;
         }
+
         if ($local) {
             $this->_channelInfo['localalias'] = $alias;
         } else {
             $this->_channelInfo['suggestedalias'] = $alias;
         }
+
         return true;
     }
 
@@ -34573,6 +34414,7 @@ class PEAR_ChannelFile {
         if ($mirror) {
             return $this->addMirrorFunction($mirror, $type, $version, $name);
         }
+
         $set = array('attribs' => array('version' => $version), '_content' => $name);
         if (!isset($this->_channelInfo['servers']['primary'][$type]['function'])) {
             if (!isset($this->_channelInfo['servers'])) {
@@ -34581,6 +34423,7 @@ class PEAR_ChannelFile {
             } elseif (!isset($this->_channelInfo['servers']['primary'])) {
                 $this->_channelInfo['servers']['primary'] = array($type => array());
             }
+
             $this->_channelInfo['servers']['primary'][$type]['function'] = $set;
             $this->_isValid = false;
             return true;
@@ -34588,6 +34431,7 @@ class PEAR_ChannelFile {
             $this->_channelInfo['servers']['primary'][$type]['function'] = array(
                 $this->_channelInfo['servers']['primary'][$type]['function']);
         }
+
         $this->_channelInfo['servers']['primary'][$type]['function'][] = $set;
         return true;
     }
@@ -34605,6 +34449,7 @@ class PEAR_ChannelFile {
                 array('mirror' => $mirror));
             return false;
         }
+
         $setmirror = false;
         if (isset($this->_channelInfo['servers']['mirror'][0])) {
             foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
@@ -34618,11 +34463,13 @@ class PEAR_ChannelFile {
                 $setmirror = &$this->_channelInfo['servers']['mirror'];
             }
         }
+
         if (!$setmirror) {
             $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
                 array('mirror' => $mirror));
             return false;
         }
+
         $set = array('attribs' => array('version' => $version), '_content' => $name);
         if (!isset($setmirror[$type]['function'])) {
             $setmirror[$type]['function'] = $set;
@@ -34631,6 +34478,7 @@ class PEAR_ChannelFile {
         } elseif (!isset($setmirror[$type]['function'][0])) {
             $setmirror[$type]['function'] = array($setmirror[$type]['function']);
         }
+
         $setmirror[$type]['function'][] = $set;
         $this->_isValid = false;
         return true;
@@ -34649,6 +34497,7 @@ class PEAR_ChannelFile {
                     array('mirror' => $mirror));
                 return false;
             }
+
             $setmirror = false;
             if (isset($this->_channelInfo['servers']['mirror'][0])) {
                 foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
@@ -34665,10 +34514,12 @@ class PEAR_ChannelFile {
         } else {
             $setmirror = &$this->_channelInfo['servers']['primary'];
         }
+
         $set = array('attribs' => array('type' => $resourceType), '_content' => $url);
         if (!isset($setmirror['rest'])) {
             $setmirror['rest'] = array();
         }
+
         if (!isset($setmirror['rest']['baseurl'])) {
             $setmirror['rest']['baseurl'] = $set;
             $this->_isValid = false;
@@ -34676,6 +34527,7 @@ class PEAR_ChannelFile {
         } elseif (!isset($setmirror['rest']['baseurl'][0])) {
             $setmirror['rest']['baseurl'] = array($setmirror['rest']['baseurl']);
         }
+
         foreach ($setmirror['rest']['baseurl'] as $i => $url) {
             if ($url['attribs']['type'] == $resourceType) {
                 $this->_isValid = false;
@@ -34683,6 +34535,7 @@ class PEAR_ChannelFile {
                 return true;
             }
         }
+
         $setmirror['rest']['baseurl'][] = $set;
         $this->_isValid = false;
         return true;
@@ -34698,19 +34551,22 @@ class PEAR_ChannelFile {
         if ($this->_channelInfo['name'] == '__uri') {
             return false; // the __uri channel cannot have mirrors by definition
         }
+
         $set = array('attribs' => array('host' => $server));
         if (is_numeric($port)) {
             $set['attribs']['port'] = $port;
         }
+
         if (!isset($this->_channelInfo['servers']['mirror'])) {
             $this->_channelInfo['servers']['mirror'] = $set;
             return true;
-        } else {
-            if (!isset($this->_channelInfo['servers']['mirror'][0])) {
-                $this->_channelInfo['servers']['mirror'] =
-                    array($this->_channelInfo['servers']['mirror']);
-            }
         }
+
+        if (!isset($this->_channelInfo['servers']['mirror'][0])) {
+            $this->_channelInfo['servers']['mirror'] =
+                array($this->_channelInfo['servers']['mirror']);
+        }
+
         $this->_channelInfo['servers']['mirror'][] = $set;
         return true;
     }
@@ -34724,10 +34580,12 @@ class PEAR_ChannelFile {
         if (!$this->_isValid && !$this->validate()) {
             return false;
         }
+
         if (!isset($this->_channelInfo['validatepackage'])) {
             return array('attribs' => array('version' => 'default'),
                 '_content' => 'PEAR_Validate');
         }
+
         return $this->_channelInfo['validatepackage'];
     }
 
@@ -34743,18 +34601,21 @@ class PEAR_ChannelFile {
         if (!class_exists('PEAR_Validate')) {
             require_once 'PEAR/Validate.php';
         }
+
         if (!$this->_isValid) {
             if (!$this->validate()) {
                 $a = false;
                 return $a;
             }
         }
+
         if (isset($this->_channelInfo['validatepackage'])) {
             if ($package == $this->_channelInfo['validatepackage']) {
                 // channel validation packages are always validated by PEAR_Validate
                 $val = &new PEAR_Validate;
                 return $val;
             }
+
             if (!class_exists(str_replace('.', '_',
                   $this->_channelInfo['validatepackage']['_content']))) {
                 if ($this->isIncludeable(str_replace('_', '/',
@@ -34776,6 +34637,7 @@ class PEAR_ChannelFile {
         } else {
             $val = &new PEAR_Validate;
         }
+
         return $val;
     }
 
@@ -34788,6 +34650,7 @@ class PEAR_ChannelFile {
                 return true;
             }
         }
+
         return false;
     }
 
@@ -34801,29 +34664,22 @@ class PEAR_ChannelFile {
         if (isset($this->_channelInfo['_lastmodified'])) {
             return $this->_channelInfo['_lastmodified'];
         }
+
         return time();
     }
-}
-?>
-                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.7.2/PEAR/Command.php                                                                         100644    1750    1750        31447 11014312742  10334                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                      PEAR-1.8.0/PEAR/Command.php                                                                         100664     764     764        30707      100664  10152                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Command, command pattern class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Command.php,v 1.39 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Command.php,v 1.41 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -34905,9 +34761,9 @@ $GLOBALS['_PEAR_Command_objects'] = array();
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -35218,29 +35074,20 @@ class PEAR_Command
         return false;
     }
     // }}}
-}
-
-?>
-                                                                                                                                                                                                                         PEAR-1.7.2/PEAR/Common.php                                                                          100644    1750    1750       105476 11014312742  10232                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                         PEAR-1.8.0/PEAR/Common.php                                                                          100664     764     764        63661      100664  10031                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Common, the base class for the PEAR Installer
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.160 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.168 2009/03/27 19:35:47 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1.0
  * @deprecated File deprecated since Release 1.4.0a1
@@ -35251,8 +35098,6 @@ class PEAR_Command
  */
 require_once 'PEAR.php';
 
-// {{{ constants and globals
-
 /**
  * PEAR_Common error when an invalid PHP file is passed to PEAR_Common::analyzeSourceCode()
  */
@@ -35340,8 +35185,6 @@ $GLOBALS['_PEAR_Common_provide_types'] = array('ext', 'prog', 'class', 'function
  */
 $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'pre-uninstall', 'post-uninstall', 'pre-build', 'post-build', 'pre-configure', 'post-configure', 'pre-setup', 'post-setup');
 
-// }}}
-
 /**
  * Class providing common functionality for PEAR administration classes.
  * @category   pear
@@ -35349,9 +35192,9 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @deprecated This class will disappear, and its components will be spread
@@ -35359,20 +35202,6 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  */
 class PEAR_Common extends PEAR
 {
-    // {{{ properties
-
-    /** stack of elements, gives some sort of XML context */
-    var $element_stack = array();
-
-    /** name of currently parsed XML element */
-    var $current_element;
-
-    /** array of attributes of the currently parsed XML element */
-    var $current_attributes = array();
-
-    /** assoc with information about a package */
-    var $pkginfo = array();
-
     /**
      * User Interface object (PEAR_Frontend_* class).  If null,
      * the log() method uses print.
@@ -35386,24 +35215,27 @@ class PEAR_Common extends PEAR
      */
     var $config = null;
 
+    /** stack of elements, gives some sort of XML context */
+    var $element_stack = array();
+
+    /** name of currently parsed XML element */
+    var $current_element;
+
+    /** array of attributes of the currently parsed XML element */
+    var $current_attributes = array();
+
+    /** assoc with information about a package */
+    var $pkginfo = array();
+
     var $current_path = null;
 
     /**
-     * PEAR_SourceAnalyzer instance
-     * @var object
-     */
-    var $source_analyzer = null;
-    /**
      * Flag variable used to mark a valid package file
      * @var boolean
      * @access private
      */
     var $_validPackageFile;
 
-    // }}}
-
-    // {{{ constructor
-
     /**
      * PEAR_Common constructor
      *
@@ -35416,9 +35248,6 @@ class PEAR_Common extends PEAR
         $this->debug = $this->config->get('verbose');
     }
 
-    // }}}
-    // {{{ destructor
-
     /**
      * PEAR_Common destructor
      *
@@ -35434,6 +35263,7 @@ class PEAR_Common extends PEAR
                 if (!class_exists('System')) {
                     require_once 'System.php';
                 }
+
                 System::rm(array('-rf', $file));
             } elseif (file_exists($file)) {
                 unlink($file);
@@ -35441,9 +35271,6 @@ class PEAR_Common extends PEAR
         }
     }
 
-    // }}}
-    // {{{ addTempFile()
-
     /**
      * Register a temporary file or directory.  When the destructor is
      * executed, all registered temporary files and directories are
@@ -35463,9 +35290,6 @@ class PEAR_Common extends PEAR
         PEAR_Frontend::addTempFile($file);
     }
 
-    // }}}
-    // {{{ mkDirHier()
-
     /**
      * Wrapper to System::mkDir(), creates a directory as well as
      * any necessary parent directories.
@@ -35478,6 +35302,7 @@ class PEAR_Common extends PEAR
      */
     function mkDirHier($dir)
     {
+        // Only used in Installer - move it there ?
         $this->log(2, "+ create dir $dir");
         if (!class_exists('System')) {
             require_once 'System.php';
@@ -35485,9 +35310,6 @@ class PEAR_Common extends PEAR
         return System::mkDir(array('-p', $dir));
     }
 
-    // }}}
-    // {{{ log()
-
     /**
      * Logging method.
      *
@@ -35505,6 +35327,7 @@ class PEAR_Common extends PEAR
             if (!class_exists('PEAR_Frontend')) {
                 require_once 'PEAR/Frontend.php';
             }
+
             $ui = &PEAR_Frontend::singleton();
             if (is_a($ui, 'PEAR_Frontend')) {
                 $ui->log($msg, $append_crlf);
@@ -35514,9 +35337,6 @@ class PEAR_Common extends PEAR
         }
     }
 
-    // }}}
-    // {{{ mkTempDir()
-
     /**
      * Create and register a temporary directory.
      *
@@ -35530,25 +35350,20 @@ class PEAR_Common extends PEAR
      */
     function mkTempDir($tmpdir = '')
     {
-        if ($tmpdir) {
-            $topt = array('-t', $tmpdir);
-        } else {
-            $topt = array();
-        }
+        $topt = $tmpdir ? array('-t', $tmpdir) : array();
         $topt = array_merge($topt, array('-d', 'pear'));
         if (!class_exists('System')) {
             require_once 'System.php';
         }
+
         if (!$tmpdir = System::mktemp($topt)) {
             return false;
         }
+
         $this->addTempFile($tmpdir);
         return $tmpdir;
     }
 
-    // }}}
-    // {{{ setFrontendObject()
-
     /**
      * Set object that represents the frontend to be used.
      *
@@ -35561,9 +35376,164 @@ class PEAR_Common extends PEAR
         $this->ui = &$ui;
     }
 
-    // }}}
+    /**
+     * Return an array containing all of the states that are more stable than
+     * or equal to the passed in state
+     *
+     * @param string Release state
+     * @param boolean Determines whether to include $state in the list
+     * @return false|array False if $state is not a valid release state
+     */
+    function betterStates($state, $include = false)
+    {
+        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+        $i = array_search($state, $states);
+        if ($i === false) {
+            return false;
+        }
+        if ($include) {
+            $i--;
+        }
+        return array_slice($states, $i + 1);
+    }
+
+    /**
+     * Get the valid roles for a PEAR package maintainer
+     *
+     * @return array
+     * @static
+     */
+    function getUserRoles()
+    {
+        return $GLOBALS['_PEAR_Common_maintainer_roles'];
+    }
 
-    // {{{ infoFromTgzFile()
+    /**
+     * Get the valid package release states of packages
+     *
+     * @return array
+     * @static
+     */
+    function getReleaseStates()
+    {
+        return $GLOBALS['_PEAR_Common_release_states'];
+    }
+
+    /**
+     * Get the implemented dependency types (php, ext, pkg etc.)
+     *
+     * @return array
+     * @static
+     */
+    function getDependencyTypes()
+    {
+        return $GLOBALS['_PEAR_Common_dependency_types'];
+    }
+
+    /**
+     * Get the implemented dependency relations (has, lt, ge etc.)
+     *
+     * @return array
+     * @static
+     */
+    function getDependencyRelations()
+    {
+        return $GLOBALS['_PEAR_Common_dependency_relations'];
+    }
+
+    /**
+     * Get the implemented file roles
+     *
+     * @return array
+     * @static
+     */
+    function getFileRoles()
+    {
+        return $GLOBALS['_PEAR_Common_file_roles'];
+    }
+
+    /**
+     * Get the implemented file replacement types in
+     *
+     * @return array
+     * @static
+     */
+    function getReplacementTypes()
+    {
+        return $GLOBALS['_PEAR_Common_replacement_types'];
+    }
+
+    /**
+     * Get the implemented file replacement types in
+     *
+     * @return array
+     * @static
+     */
+    function getProvideTypes()
+    {
+        return $GLOBALS['_PEAR_Common_provide_types'];
+    }
+
+    /**
+     * Get the implemented file replacement types in
+     *
+     * @return array
+     * @static
+     */
+    function getScriptPhases()
+    {
+        return $GLOBALS['_PEAR_Common_script_phases'];
+    }
+
+    /**
+     * Test whether a string contains a valid package name.
+     *
+     * @param string $name the package name to test
+     *
+     * @return bool
+     *
+     * @access public
+     */
+    function validPackageName($name)
+    {
+        return (bool)preg_match(PEAR_COMMON_PACKAGE_NAME_PREG, $name);
+    }
+
+    /**
+     * Test whether a string contains a valid package version.
+     *
+     * @param string $ver the package version to test
+     *
+     * @return bool
+     *
+     * @access public
+     */
+    function validPackageVersion($ver)
+    {
+        return (bool)preg_match(PEAR_COMMON_PACKAGE_VERSION_PREG, $ver);
+    }
+
+    /**
+     * @param string $path relative or absolute include path
+     * @return boolean
+     * @static
+     */
+    function isIncludeable($path)
+    {
+        if (file_exists($path) && is_readable($path)) {
+            return true;
+        }
+
+        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
+        foreach ($ipath as $include) {
+            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
+            if (file_exists($test) && is_readable($test)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 
     /**
      * Returns information about a package file.  Expects the name of
@@ -35588,14 +35558,13 @@ class PEAR_Common extends PEAR
                     $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                 }
             }
+
             return $pf;
         }
+
         return $this->_postProcessValidPackagexml($pf);
     }
 
-    // }}}
-    // {{{ infoFromDescriptionFile()
-
     /**
      * Returns information about a package file.  Expects the name of
      * a package xml file as input.
@@ -35619,14 +35588,13 @@ class PEAR_Common extends PEAR
                     $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                 }
             }
+
             return $pf;
         }
+
         return $this->_postProcessValidPackagexml($pf);
     }
 
-    // }}}
-    // {{{ infoFromString()
-
     /**
      * Returns information about a package file.  Expects the contents
      * of a package xml file as input.
@@ -35650,11 +35618,12 @@ class PEAR_Common extends PEAR
                     $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                 }
             }
+
             return $pf;
         }
+
         return $this->_postProcessValidPackagexml($pf);
     }
-    // }}}
 
     /**
      * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
@@ -35662,37 +35631,36 @@ class PEAR_Common extends PEAR
      */
     function _postProcessValidPackagexml(&$pf)
     {
-        if (is_a($pf, 'PEAR_PackageFile_v2')) {
-            // sort of make this into a package.xml 1.0-style array
-            // changelog is not converted to old format.
-            $arr = $pf->toArray(true);
-            $arr = array_merge($arr, $arr['old']);
-            unset($arr['old']);
-            unset($arr['xsdversion']);
-            unset($arr['contents']);
-            unset($arr['compatible']);
-            unset($arr['channel']);
-            unset($arr['uri']);
-            unset($arr['dependencies']);
-            unset($arr['phprelease']);
-            unset($arr['extsrcrelease']);
-            unset($arr['zendextsrcrelease']);
-            unset($arr['extbinrelease']);
-            unset($arr['zendextbinrelease']);
-            unset($arr['bundle']);
-            unset($arr['lead']);
-            unset($arr['developer']);
-            unset($arr['helper']);
-            unset($arr['contributor']);
-            $arr['filelist'] = $pf->getFilelist();
-            $this->pkginfo = $arr;
-            return $arr;
-        } else {
+        if (!is_a($pf, 'PEAR_PackageFile_v2')) {
             $this->pkginfo = $pf->toArray();
             return $this->pkginfo;
         }
+
+        // sort of make this into a package.xml 1.0-style array
+        // changelog is not converted to old format.
+        $arr = $pf->toArray(true);
+        $arr = array_merge($arr, $arr['old']);
+        unset($arr['old']);
+        unset($arr['xsdversion']);
+        unset($arr['contents']);
+        unset($arr['compatible']);
+        unset($arr['channel']);
+        unset($arr['uri']);
+        unset($arr['dependencies']);
+        unset($arr['phprelease']);
+        unset($arr['extsrcrelease']);
+        unset($arr['zendextsrcrelease']);
+        unset($arr['extbinrelease']);
+        unset($arr['zendextbinrelease']);
+        unset($arr['bundle']);
+        unset($arr['lead']);
+        unset($arr['developer']);
+        unset($arr['helper']);
+        unset($arr['contributor']);
+        $arr['filelist'] = $pf->getFilelist();
+        $this->pkginfo = $arr;
+        return $arr;
     }
-    // {{{ infoFromAny()
 
     /**
      * Returns package information from different sources
@@ -35717,16 +35685,16 @@ class PEAR_Common extends PEAR
                         $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                     }
                 }
+
                 return $pf;
             }
+
             return $this->_postProcessValidPackagexml($pf);
         }
+
         return $info;
     }
 
-    // }}}
-    // {{{ xmlFromInfo()
-
     /**
      * Return an XML document based on the package info (as returned
      * by the PEAR_Common::infoFrom* methods).
@@ -35740,16 +35708,13 @@ class PEAR_Common extends PEAR
      */
     function xmlFromInfo($pkginfo)
     {
-        $config = &PEAR_Config::singleton();
+        $config      = &PEAR_Config::singleton();
         $packagefile = &new PEAR_PackageFile($config);
         $pf = &$packagefile->fromArray($pkginfo);
         $gen = &$pf->getDefaultGenerator();
         return $gen->toXml(PEAR_VALIDATE_PACKAGING);
     }
 
-    // }}}
-    // {{{ validatePackageInfo()
-
     /**
      * Validate XML package definition file.
      *
@@ -35765,7 +35730,7 @@ class PEAR_Common extends PEAR
      */
     function validatePackageInfo($info, &$errors, &$warnings, $dir_prefix = '')
     {
-        $config = &PEAR_Config::singleton();
+        $config      = &PEAR_Config::singleton();
         $packagefile = &new PEAR_PackageFile($config);
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         if (strpos($info, '<?xml') !== false) {
@@ -35773,6 +35738,7 @@ class PEAR_Common extends PEAR
         } else {
             $pf = &$packagefile->fromAnyFile($info, PEAR_VALIDATE_NORMAL);
         }
+
         PEAR::staticPopErrorHandling();
         if (PEAR::isError($pf)) {
             $errs = $pf->getUserinfo();
@@ -35785,14 +35751,13 @@ class PEAR_Common extends PEAR
                     }
                 }
             }
+
             return false;
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ buildProvidesArray()
-
     /**
      * Build a "provides" array from data returned by
      * analyzeSourceCode().  The format of the built array is like
@@ -35819,12 +35784,14 @@ class PEAR_Common extends PEAR
         if (isset($this->_packageName)) {
             $pn = $this->_packageName;
         }
+
         $pnl = strlen($pn);
         foreach ($srcinfo['declared_classes'] as $class) {
             $key = "class;$class";
             if (isset($this->pkginfo['provides'][$key])) {
                 continue;
             }
+
             $this->pkginfo['provides'][$key] =
                 array('file'=> $file, 'type' => 'class', 'name' => $class);
             if (isset($srcinfo['inheritance'][$class])) {
@@ -35832,6 +35799,7 @@ class PEAR_Common extends PEAR
                     $srcinfo['inheritance'][$class];
             }
         }
+
         foreach ($srcinfo['declared_methods'] as $class => $methods) {
             foreach ($methods as $method) {
                 $function = "$class::$method";
@@ -35840,6 +35808,7 @@ class PEAR_Common extends PEAR
                     isset($this->pkginfo['provides'][$key])) {
                     continue;
                 }
+
                 $this->pkginfo['provides'][$key] =
                     array('file'=> $file, 'type' => 'function', 'name' => $function);
             }
@@ -35850,17 +35819,16 @@ class PEAR_Common extends PEAR
             if ($function{0} == '_' || isset($this->pkginfo['provides'][$key])) {
                 continue;
             }
+
             if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
                 $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
             }
+
             $this->pkginfo['provides'][$key] =
                 array('file'=> $file, 'type' => 'function', 'name' => $function);
         }
     }
 
-    // }}}
-    // {{{ analyzeSourceCode()
-
     /**
      * Analyze the source code of the given PHP file
      *
@@ -35870,231 +35838,28 @@ class PEAR_Common extends PEAR
      */
     function analyzeSourceCode($file)
     {
-        if (!function_exists("token_get_all")) {
-            return false;
-        }
-        if (!defined('T_DOC_COMMENT')) {
-            define('T_DOC_COMMENT', T_COMMENT);
-        }
-        if (!defined('T_INTERFACE')) {
-            define('T_INTERFACE', -1);
-        }
-        if (!defined('T_IMPLEMENTS')) {
-            define('T_IMPLEMENTS', -1);
-        }
-        if (!$fp = @fopen($file, "r")) {
-            return false;
-        }
-        fclose($fp);
-        $contents = file_get_contents($file);
-        $tokens = token_get_all($contents);
-/*
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            @list($token, $data) = $tokens[$i];
-            if (is_string($token)) {
-                var_dump($token);
-            } else {
-                print token_name($token) . ' ';
-                var_dump(rtrim($data));
-            }
-        }
-*/
-        $look_for = 0;
-        $paren_level = 0;
-        $bracket_level = 0;
-        $brace_level = 0;
-        $lastphpdoc = '';
-        $current_class = '';
-        $current_interface = '';
-        $current_class_level = -1;
-        $current_function = '';
-        $current_function_level = -1;
-        $declared_classes = array();
-        $declared_interfaces = array();
-        $declared_functions = array();
-        $declared_methods = array();
-        $used_classes = array();
-        $used_functions = array();
-        $extends = array();
-        $implements = array();
-        $nodeps = array();
-        $inquote = false;
-        $interface = false;
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            if (is_array($tokens[$i])) {
-                list($token, $data) = $tokens[$i];
-            } else {
-                $token = $tokens[$i];
-                $data = '';
-            }
-            if ($inquote) {
-                if ($token != '"') {
-                    continue;
-                } else {
-                    $inquote = false;
-                    continue;
-                }
-            }
-            switch ($token) {
-                case T_WHITESPACE:
-                    continue;
-                case ';':
-                    if ($interface) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    break;
-                case '"':
-                    $inquote = true;
-                    break;
-                case T_CURLY_OPEN:
-                case T_DOLLAR_OPEN_CURLY_BRACES:
-                case '{': $brace_level++; continue 2;
-                case '}':
-                    $brace_level--;
-                    if ($current_class_level == $brace_level) {
-                        $current_class = '';
-                        $current_class_level = -1;
-                    }
-                    if ($current_function_level == $brace_level) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    continue 2;
-                case '[': $bracket_level++; continue 2;
-                case ']': $bracket_level--; continue 2;
-                case '(': $paren_level++;   continue 2;
-                case ')': $paren_level--;   continue 2;
-                case T_INTERFACE:
-                    $interface = true;
-                case T_CLASS:
-                    if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
-                            PEAR_COMMON_ERROR_INVALIDPHP);
-                        return false;
-                    }
-                case T_FUNCTION:
-                case T_NEW:
-                case T_EXTENDS:
-                case T_IMPLEMENTS:
-                    $look_for = $token;
-                    continue 2;
-                case T_STRING:
-                    if (version_compare(zend_version(), '2.0', '<')) {
-                        if (in_array(strtolower($data),
-                            array('public', 'private', 'protected', 'abstract',
-                                  'interface', 'implements', 'throw') 
-                                 )) {
-                            PEAR::raiseError('Error: PHP5 token encountered in ' . $file . 
-                            'packaging should be done in PHP 5');
-                            return false;
-                        }
-                    }
-                    if ($look_for == T_CLASS) {
-                        $current_class = $data;
-                        $current_class_level = $brace_level;
-                        $declared_classes[] = $current_class;
-                    } elseif ($look_for == T_INTERFACE) {
-                        $current_interface = $data;
-                        $current_class_level = $brace_level;
-                        $declared_interfaces[] = $current_interface;
-                    } elseif ($look_for == T_IMPLEMENTS) {
-                        $implements[$current_class] = $data;
-                    } elseif ($look_for == T_EXTENDS) {
-                        $extends[$current_class] = $data;
-                    } elseif ($look_for == T_FUNCTION) {
-                        if ($current_class) {
-                            $current_function = "$current_class::$data";
-                            $declared_methods[$current_class][] = $data;
-                        } elseif ($current_interface) {
-                            $current_function = "$current_interface::$data";
-                            $declared_methods[$current_interface][] = $data;
-                        } else {
-                            $current_function = $data;
-                            $declared_functions[] = $current_function;
-                        }
-                        $current_function_level = $brace_level;
-                        $m = array();
-                    } elseif ($look_for == T_NEW) {
-                        $used_classes[$data] = true;
-                    }
-                    $look_for = 0;
-                    continue 2;
-                case T_VARIABLE:
-                    $look_for = 0;
-                    continue 2;
-                case T_DOC_COMMENT:
-                case T_COMMENT:
-                    if (preg_match('!^/\*\*\s!', $data)) {
-                        $lastphpdoc = $data;
-                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
-                            $nodeps = array_merge($nodeps, $m[1]);
-                        }
-                    }
-                    continue 2;
-                case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
-                            PEAR_COMMON_ERROR_INVALIDPHP);
-                        return false;
-                    }
-                    $class = $tokens[$i - 1][1];
-                    if (strtolower($class) != 'parent') {
-                        $used_classes[$class] = true;
-                    }
-                    continue 2;
-            }
+        if (!class_exists('PEAR_PackageFile_v2_Validator')) {
+            require_once 'PEAR/PackageFile/v2/Validator.php';
         }
-        return array(
-            "source_file" => $file,
-            "declared_classes" => $declared_classes,
-            "declared_interfaces" => $declared_interfaces,
-            "declared_methods" => $declared_methods,
-            "declared_functions" => $declared_functions,
-            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
-            "inheritance" => $extends,
-            "implements" => $implements,
-            );
-    }
-
-    // }}}
-    // {{{  betterStates()
 
-    /**
-     * Return an array containing all of the states that are more stable than
-     * or equal to the passed in state
-     *
-     * @param string Release state
-     * @param boolean Determines whether to include $state in the list
-     * @return false|array False if $state is not a valid release state
-     */
-    function betterStates($state, $include = false)
-    {
-        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
-        $i = array_search($state, $states);
-        if ($i === false) {
-            return false;
-        }
-        if ($include) {
-            $i--;
-        }
-        return array_slice($states, $i + 1);
+        $a = new PEAR_PackageFile_v2_Validator;
+        return $a->analyzeSourceCode($file);
     }
 
-    // }}}
-    // {{{ detectDependencies()
-
     function detectDependencies($any, $status_callback = null)
     {
         if (!function_exists("token_get_all")) {
             return false;
         }
+
         if (PEAR::isError($info = $this->infoFromAny($any))) {
             return $this->raiseError($info);
         }
+
         if (!is_array($info)) {
             return false;
         }
+
         $deps = array();
         $used_c = $decl_c = $decl_f = $decl_m = array();
         foreach ($info['filelist'] as $file => $fa) {
@@ -36105,9 +35870,11 @@ class PEAR_Common extends PEAR
             $decl_m = @array_merge($decl_m, $tmp['declared_methods']);
             $inheri = @array_merge($inheri, $tmp['inheritance']);
         }
+
         $used_c = array_unique($used_c);
         $decl_c = array_unique($decl_c);
         $undecl_c = array_diff($used_c, $decl_c);
+
         return array('used_classes' => $used_c,
                      'declared_classes' => $decl_c,
                      'declared_methods' => $decl_m,
@@ -36117,158 +35884,6 @@ class PEAR_Common extends PEAR
                      );
     }
 
-    // }}}
-    // {{{ getUserRoles()
-
-    /**
-     * Get the valid roles for a PEAR package maintainer
-     *
-     * @return array
-     * @static
-     */
-    function getUserRoles()
-    {
-        return $GLOBALS['_PEAR_Common_maintainer_roles'];
-    }
-
-    // }}}
-    // {{{ getReleaseStates()
-
-    /**
-     * Get the valid package release states of packages
-     *
-     * @return array
-     * @static
-     */
-    function getReleaseStates()
-    {
-        return $GLOBALS['_PEAR_Common_release_states'];
-    }
-
-    // }}}
-    // {{{ getDependencyTypes()
-
-    /**
-     * Get the implemented dependency types (php, ext, pkg etc.)
-     *
-     * @return array
-     * @static
-     */
-    function getDependencyTypes()
-    {
-        return $GLOBALS['_PEAR_Common_dependency_types'];
-    }
-
-    // }}}
-    // {{{ getDependencyRelations()
-
-    /**
-     * Get the implemented dependency relations (has, lt, ge etc.)
-     *
-     * @return array
-     * @static
-     */
-    function getDependencyRelations()
-    {
-        return $GLOBALS['_PEAR_Common_dependency_relations'];
-    }
-
-    // }}}
-    // {{{ getFileRoles()
-
-    /**
-     * Get the implemented file roles
-     *
-     * @return array
-     * @static
-     */
-    function getFileRoles()
-    {
-        return $GLOBALS['_PEAR_Common_file_roles'];
-    }
-
-    // }}}
-    // {{{ getReplacementTypes()
-
-    /**
-     * Get the implemented file replacement types in
-     *
-     * @return array
-     * @static
-     */
-    function getReplacementTypes()
-    {
-        return $GLOBALS['_PEAR_Common_replacement_types'];
-    }
-
-    // }}}
-    // {{{ getProvideTypes()
-
-    /**
-     * Get the implemented file replacement types in
-     *
-     * @return array
-     * @static
-     */
-    function getProvideTypes()
-    {
-        return $GLOBALS['_PEAR_Common_provide_types'];
-    }
-
-    // }}}
-    // {{{ getScriptPhases()
-
-    /**
-     * Get the implemented file replacement types in
-     *
-     * @return array
-     * @static
-     */
-    function getScriptPhases()
-    {
-        return $GLOBALS['_PEAR_Common_script_phases'];
-    }
-
-    // }}}
-    // {{{ validPackageName()
-
-    /**
-     * Test whether a string contains a valid package name.
-     *
-     * @param string $name the package name to test
-     *
-     * @return bool
-     *
-     * @access public
-     */
-    function validPackageName($name)
-    {
-        return (bool)preg_match(PEAR_COMMON_PACKAGE_NAME_PREG, $name);
-    }
-
-
-    // }}}
-    // {{{ validPackageVersion()
-
-    /**
-     * Test whether a string contains a valid package version.
-     *
-     * @param string $ver the package version to test
-     *
-     * @return bool
-     *
-     * @access public
-     */
-    function validPackageVersion($ver)
-    {
-        return (bool)preg_match(PEAR_COMMON_PACKAGE_VERSION_PREG, $ver);
-    }
-
-
-    // }}}
-
-    // {{{ downloadHttp()
-
     /**
      * Download a file through HTTP.  Considers suggested file name in
      * Content-disposition: header and can run a callback function for
@@ -36321,50 +35936,22 @@ class PEAR_Common extends PEAR
         }
         return PEAR_Downloader::downloadHttp($url, $ui, $save_dir, $callback);
     }
-
-    // }}}
-
-    /**
-     * @param string $path relative or absolute include path
-     * @return boolean
-     * @static
-     */
-    function isIncludeable($path)
-    {
-        if (file_exists($path) && is_readable($path)) {
-            return true;
-        }
-        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
-        foreach ($ipath as $include) {
-            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
-            if (file_exists($test) && is_readable($test)) {
-                return true;
-            }
-        }
-        return false;
-    }
 }
+
 require_once 'PEAR/Config.php';
-require_once 'PEAR/PackageFile.php';
-?>                                                                                                                                                                                                  PEAR-1.7.2/PEAR/Config.php                                                                          100644    1750    1750       212737 11014312742  10206                                                                                                                                                                                                                                                                                                                                                                      <?php
+require_once 'PEAR/PackageFile.php';                                                                               PEAR-1.8.0/PEAR/Config.php                                                                          100664     764     764       204247      100664  10023                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Config, customized configuration handling for the PEAR Installer
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Config.php,v 1.146 2008/05/14 04:16:08 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Config.php,v 1.157 2009/02/25 00:23:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -36376,7 +35963,6 @@ require_once 'PEAR.php';
 require_once 'PEAR/Registry.php';
 require_once 'PEAR/Installer/Role.php';
 require_once 'System.php';
-require_once 'PEAR/Remote.php';
 
 /**
  * Last created PEAR_Config instance.
@@ -36397,8 +35983,11 @@ if (!defined('PEAR_INSTALL_DIR') || !PEAR_INSTALL_DIR) {
 
 // default channel and preferred mirror is based on whether we are invoked through
 // the "pear" or the "pecl" command
+if (!defined('PEAR_RUNTYPE')) {
+    define('PEAR_RUNTYPE', 'pear');
+}
 
-if (!defined('PEAR_RUNTYPE') || PEAR_RUNTYPE == 'pear') {
+if (PEAR_RUNTYPE == 'pear') {
     define('PEAR_CONFIG_DEFAULT_CHANNEL', 'pear.php.net');
 } else {
     define('PEAR_CONFIG_DEFAULT_CHANNEL', 'pecl.php.net');
@@ -36432,9 +36021,8 @@ if (getenv('PHP_PEAR_HTTP_PROXY')) {
 if (getenv('PHP_PEAR_INSTALL_DIR')) {
     define('PEAR_CONFIG_DEFAULT_PHP_DIR', getenv('PHP_PEAR_INSTALL_DIR'));
 } else {
-    if (file_exists($PEAR_INSTALL_DIR) && is_dir($PEAR_INSTALL_DIR)) {
-        define('PEAR_CONFIG_DEFAULT_PHP_DIR',
-               $PEAR_INSTALL_DIR);
+    if (@file_exists($PEAR_INSTALL_DIR) && is_dir($PEAR_INSTALL_DIR)) {
+        define('PEAR_CONFIG_DEFAULT_PHP_DIR', $PEAR_INSTALL_DIR);
     } else {
         define('PEAR_CONFIG_DEFAULT_PHP_DIR', $PEAR_INSTALL_DIR);
     }
@@ -36597,16 +36185,14 @@ if (getenv('PHP_PEAR_SIG_KEYDIR')) {
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Config extends PEAR
 {
-    // {{{ properties
-
     /**
      * Array of config files used.
      *
@@ -36618,7 +36204,7 @@ class PEAR_Config extends PEAR
         );
 
     var $layers = array();
-    
+
     /**
      * Configuration data, two-dimensional array where the first
      * dimension is the config layer ('user', 'system' and 'default'),
@@ -36636,7 +36222,7 @@ class PEAR_Config extends PEAR
         'system' => array(),
         'default' => array(),
         );
-    
+
     /**
      * Configuration values that can be set for a channel
      *
@@ -36646,8 +36232,8 @@ class PEAR_Config extends PEAR
      */
     var $_channelConfigInfo = array(
         'php_dir', 'ext_dir', 'doc_dir', 'bin_dir', 'data_dir', 'cfg_dir',
-        'test_dir', 'www_dir', 'php_bin', 'username', 'password', 'verbose',
-        'preferred_state', 'umask', 'preferred_mirror', 'php_ini'
+        'test_dir', 'www_dir', 'php_bin', 'php_prefix', 'php_suffix', 'username',
+        'password', 'verbose', 'preferred_state', 'umask', 'preferred_mirror', 'php_ini'
         );
 
     /**
@@ -36805,7 +36391,7 @@ class PEAR_Config extends PEAR
         'cache_dir' => array(
             'type' => 'directory',
             'default' => PEAR_CONFIG_DEFAULT_CACHE_DIR,
-            'doc' => 'directory which is used for XMLRPC cache',
+            'doc' => 'directory which is used for web service cache',
             'prompt' => 'PEAR Installer cache directory',
             'group' => 'File Locations (Advanced)',
             ),
@@ -36830,6 +36416,20 @@ class PEAR_Config extends PEAR
             'prompt' => 'PHP CLI/CGI binary',
             'group' => 'File Locations (Advanced)',
             ),
+        'php_prefix' => array(
+            'type' => 'string',
+            'default' => '',
+            'doc' => '--program-prefix for php_bin\'s ./configure, used for pecl installs',
+            'prompt' => '--program-prefix passed to PHP\'s ./configure',
+            'group' => 'File Locations (Advanced)',
+            ),
+        'php_suffix' => array(
+            'type' => 'string',
+            'default' => '',
+            'doc' => '--program-suffix for php_bin\'s ./configure, used for pecl installs',
+            'prompt' => '--program-suffix passed to PHP\'s ./configure',
+            'group' => 'File Locations (Advanced)',
+            ),
         'php_ini' => array(
             'type' => 'file',
             'default' => '',
@@ -36919,10 +36519,6 @@ class PEAR_Config extends PEAR
         // __channels is reserved - used for channel-specific configuration
         );
 
-    // }}}
-
-    // {{{ PEAR_Config([file], [defaults_file])
-
     /**
      * Constructor.
      *
@@ -36950,16 +36546,18 @@ class PEAR_Config extends PEAR
                 $user_file = getenv('HOME') . $sl . '.pearrc';
             }
         }
+
         if (empty($system_file)) {
+            $system_file = PEAR_CONFIG_SYSCONFDIR . $sl;
             if (OS_WINDOWS) {
-                $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pearsys.ini';
+                $system_file .= 'pearsys.ini';
             } else {
-                $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf';
+                $system_file .= 'pear.conf';
             }
         }
 
         $this->layers = array_keys($this->configuration);
-        $this->files['user'] = $user_file;
+        $this->files['user']   = $user_file;
         $this->files['system'] = $system_file;
         if ($user_file && file_exists($user_file)) {
             $this->pushErrorHandling(PEAR_ERROR_RETURN);
@@ -36970,7 +36568,7 @@ class PEAR_Config extends PEAR
             }
         }
 
-        if ($system_file && file_exists($system_file)) {
+        if ($system_file && @file_exists($system_file)) {
             $this->mergeConfigFile($system_file, false, 'system', $strict);
             if ($this->_errorsFound > 0) {
                 return;
@@ -36996,7 +36594,6 @@ class PEAR_Config extends PEAR
         //$GLOBALS['_PEAR_Config_instance'] = &$this;
     }
 
-    // }}}
     /**
      * Return the default locations of user and system configuration files
      * @static
@@ -37006,17 +36603,16 @@ class PEAR_Config extends PEAR
         $sl = DIRECTORY_SEPARATOR;
         if (OS_WINDOWS) {
             return array(
-                'user' => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.ini',
+                'user'   => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.ini',
                 'system' =>  PEAR_CONFIG_SYSCONFDIR . $sl . 'pearsys.ini'
             );
-        } else {
-            return array(
-                'user' => getenv('HOME') . $sl . '.pearrc',
-                'system' => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf'
-            );
         }
+
+        return array(
+            'user'   => getenv('HOME') . $sl . '.pearrc',
+            'system' => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf'
+        );
     }
-    // {{{ singleton([file], [defaults_file])
 
     /**
      * Static singleton method.  If you want to keep only one instance
@@ -37048,9 +36644,6 @@ class PEAR_Config extends PEAR
         return $GLOBALS['_PEAR_Config_instance'];
     }
 
-    // }}}
-    // {{{ validConfiguration()
-
     /**
      * Determine whether any configuration files have been detected, and whether a
      * registry object can be retrieved from this configuration.
@@ -37062,12 +36655,10 @@ class PEAR_Config extends PEAR
         if ($this->isDefinedLayer('user') || $this->isDefinedLayer('system')) {
             return true;
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ readConfigFile([file], [layer])
-
     /**
      * Reads configuration data from a file.  All existing values in
      * the config layer are discarded and replaced with data from the
@@ -37088,20 +36679,18 @@ class PEAR_Config extends PEAR
         }
 
         $data = $this->_readConfigDataFrom($file);
-
         if (PEAR::isError($data)) {
-            if ($strict) {
-                $this->_errorsFound++;
-                $this->lastError = $data;
-
-                return $data;
-            } else {
+            if (!$strict) {
                 return true;
             }
-        } else {
-            $this->files[$layer] = $file;
+
+            $this->_errorsFound++;
+            $this->lastError = $data;
+
+            return $data;
         }
 
+        $this->files[$layer] = $file;
         $this->_decodeInput($data);
         $this->configuration[$layer] = $data;
         $this->_setupChannels();
@@ -37115,8 +36704,6 @@ class PEAR_Config extends PEAR
         return true;
     }
 
-    // }}}
-
     /**
      * @param string url to the remote config file, like ftp://www.example.com/pear/config.ini
      * @return true|PEAR_Error
@@ -37132,61 +36719,64 @@ class PEAR_Config extends PEAR
                     require_once 'PEAR/FTP.php';
                 }
             }
-            if (class_exists('PEAR_FTP')) {
-                $this->_ftp = &new PEAR_FTP;
-                $this->_ftp->pushErrorHandling(PEAR_ERROR_RETURN);
-                $e = $this->_ftp->init($path);
-                if (PEAR::isError($e)) {
-                    $this->_ftp->popErrorHandling();
-                    return $e;
-                }
-                $tmp = System::mktemp('-d');
-                PEAR_Common::addTempFile($tmp);
-                $e = $this->_ftp->get(basename($path), $tmp . DIRECTORY_SEPARATOR .
-                    'pear.ini', false, FTP_BINARY);
-                if (PEAR::isError($e)) {
-                    $this->_ftp->popErrorHandling();
-                    return $e;
-                }
-                PEAR_Common::addTempFile($tmp . DIRECTORY_SEPARATOR . 'pear.ini');
-                $this->_ftp->disconnect();
+
+            if (!class_exists('PEAR_FTP')) {
+                return PEAR::raiseError('PEAR_RemoteInstaller must be installed to use remote config');
+            }
+
+            $this->_ftp = &new PEAR_FTP;
+            $this->_ftp->pushErrorHandling(PEAR_ERROR_RETURN);
+            $e = $this->_ftp->init($path);
+            if (PEAR::isError($e)) {
                 $this->_ftp->popErrorHandling();
-                $this->files['ftp'] = $tmp . DIRECTORY_SEPARATOR . 'pear.ini';
-                $e = $this->readConfigFile(null, 'ftp');
-                if (PEAR::isError($e)) {
-                    return $e;
-                }
-                $fail = array();
-                foreach ($this->configuration_info as $key => $val) {
-                    if (in_array($this->getGroup($key),
-                          array('File Locations', 'File Locations (Advanced)')) &&
-                          $this->getType($key) == 'directory') {
-                        // any directory configs must be set for this to work
-                        if (!isset($this->configuration['ftp'][$key])) {
-                            $fail[] = $key;
-                        }
+                return $e;
+            }
+
+            $tmp = System::mktemp('-d');
+            PEAR_Common::addTempFile($tmp);
+            $e = $this->_ftp->get(basename($path), $tmp . DIRECTORY_SEPARATOR .
+                'pear.ini', false, FTP_BINARY);
+            if (PEAR::isError($e)) {
+                $this->_ftp->popErrorHandling();
+                return $e;
+            }
+
+            PEAR_Common::addTempFile($tmp . DIRECTORY_SEPARATOR . 'pear.ini');
+            $this->_ftp->disconnect();
+            $this->_ftp->popErrorHandling();
+            $this->files['ftp'] = $tmp . DIRECTORY_SEPARATOR . 'pear.ini';
+            $e = $this->readConfigFile(null, 'ftp');
+            if (PEAR::isError($e)) {
+                return $e;
+            }
+
+            $fail = array();
+            foreach ($this->configuration_info as $key => $val) {
+                if (in_array($this->getGroup($key),
+                      array('File Locations', 'File Locations (Advanced)')) &&
+                      $this->getType($key) == 'directory') {
+                    // any directory configs must be set for this to work
+                    if (!isset($this->configuration['ftp'][$key])) {
+                        $fail[] = $key;
                     }
                 }
-                if (count($fail)) {
-                    $fail = '"' . implode('", "', $fail) . '"';
-                    unset($this->files['ftp']);
-                    unset($this->configuration['ftp']);
-                    return PEAR::raiseError('ERROR: Ftp configuration file must set all ' .
-                        'directory configuration variables.  These variables were not set: ' .
-                        $fail);
-                } else {
-                    return true;
-                }
-            } else {
-                return PEAR::raiseError('PEAR_RemoteInstaller must be installed to use remote config');
             }
+
+            if (!count($fail)) {
+                return true;
+            }
+
+            $fail = '"' . implode('", "', $fail) . '"';
+            unset($this->files['ftp']);
+            unset($this->configuration['ftp']);
+            return PEAR::raiseError('ERROR: Ftp configuration file must set all ' .
+                'directory configuration variables.  These variables were not set: ' .
+                $fail);
         } while (false); // poor man's catch
         unset($this->files['ftp']);
         return PEAR::raiseError('no remote host specified');
     }
 
-    // {{{ _setupChannels()
-    
     /**
      * Reads the existing configurations and creates the _channels array from it
      */
@@ -37205,26 +36795,20 @@ class PEAR_Config extends PEAR
         $this->setChannels($this->_channels);
     }
 
-    // }}}
-    // {{{ deleteChannel(channel)
-
     function deleteChannel($channel)
     {
+        $ch = strtolower($channel);
         foreach ($this->configuration as $layer => $data) {
-            if (isset($data['__channels'])) {
-                if (isset($data['__channels'][strtolower($channel)])) {
-                    unset($this->configuration[$layer]['__channels'][strtolower($channel)]);
-                }
+            if (isset($data['__channels']) && isset($data['__channels'][$ch])) {
+                unset($this->configuration[$layer]['__channels'][$ch]);
             }
         }
+
         $this->_channels = array_flip($this->_channels);
-        unset($this->_channels[strtolower($channel)]);
+        unset($this->_channels[$ch]);
         $this->_channels = array_flip($this->_channels);
     }
 
-    // }}}
-    // {{{ mergeConfigFile(file, [override], [layer])
-
     /**
      * Merges data into a config layer from a file.  Does the same
      * thing as readConfigFile, except it does not replace all
@@ -37240,20 +36824,23 @@ class PEAR_Config extends PEAR
         if (empty($this->files[$layer])) {
             return $this->raiseError("unknown config layer `$layer'");
         }
+
         if ($file === null) {
             $file = $this->files[$layer];
         }
+
         $data = $this->_readConfigDataFrom($file);
         if (PEAR::isError($data)) {
-            if ($strict) {
-                $this->_errorsFound++;
-                $this->lastError = $data;
-
-                return $data;
-            } else {
+            if (!$strict) {
                 return true;
             }
+
+            $this->_errorsFound++;
+            $this->lastError = $data;
+
+            return $data;
         }
+
         $this->_decodeInput($data);
         if ($override) {
             $this->configuration[$layer] =
@@ -37262,6 +36849,7 @@ class PEAR_Config extends PEAR
             $this->configuration[$layer] =
                 PEAR_Config::arrayMergeRecursive($data, $this->configuration[$layer]);
         }
+
         $this->_setupChannels();
         if (!$this->_noRegistry && ($phpdir = $this->get('php_dir', $layer, 'pear.php.net'))) {
             $this->_registry[$layer] = &new PEAR_Registry($phpdir);
@@ -37273,8 +36861,6 @@ class PEAR_Config extends PEAR
         return true;
     }
 
-    // }}}
-    // {{{ arrayMergeRecursive($arr2, $arr1)
     /**
      * @param array
      * @param array
@@ -37300,12 +36886,10 @@ class PEAR_Config extends PEAR
                 unset($arr1[$key]);
             }
         }
+
         return array_merge($ret, $arr1);
     }
 
-    // }}}
-    // {{{ writeConfigFile([file], [layer])
-
     /**
      * Writes data into a config layer from a file.
      *
@@ -37327,25 +36911,31 @@ class PEAR_Config extends PEAR
             }
             return true;
         }
+
         if (empty($this->files[$layer])) {
             return $this->raiseError("unknown config file type `$layer'");
         }
+
         if ($file === null) {
             $file = $this->files[$layer];
         }
+
         $data = ($data === null) ? $this->configuration[$layer] : $data;
         $this->_encodeOutput($data);
         $opt = array('-p', dirname($file));
         if (!@System::mkDir($opt)) {
             return $this->raiseError("could not create directory: " . dirname($file));
         }
+
         if (file_exists($file) && is_file($file) && !is_writeable($file)) {
             return $this->raiseError("no write access to $file!");
         }
+
         $fp = @fopen($file, "w");
         if (!$fp) {
             return $this->raiseError("PEAR_Config::writeConfigFile fopen('$file','w') failed ($php_errormsg)");
         }
+
         $contents = "#PEAR_Config 0.9\n" . serialize($data);
         if (!@fwrite($fp, $contents)) {
             return $this->raiseError("PEAR_Config::writeConfigFile: fwrite failed ($php_errormsg)");
@@ -37353,17 +36943,12 @@ class PEAR_Config extends PEAR
         return true;
     }
 
-    // }}}
-    // {{{ _readConfigDataFrom(file)
-
     /**
      * Reads configuration data from a file and returns the parsed data
      * in an array.
      *
      * @param string file to read from
-     *
      * @return array configuration data or a PEAR error on failure
-     *
      * @access private
      */
     function _readConfigDataFrom($file)
@@ -37372,9 +36957,11 @@ class PEAR_Config extends PEAR
         if (file_exists($file)) {
             $fp = @fopen($file, "r");
         }
+
         if (!$fp) {
             return $this->raiseError("PEAR_Config::readConfigFile fopen('$file','r') failed");
         }
+
         $size = filesize($file);
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
@@ -37383,7 +36970,7 @@ class PEAR_Config extends PEAR
         if (empty($contents)) {
             return $this->raiseError('Configuration file "' . $file . '" is empty');
         }
-        
+
         set_magic_quotes_runtime($rt);
 
         $version = false;
@@ -37396,8 +36983,8 @@ class PEAR_Config extends PEAR
                 $version = '0.1';
             }
         }
-        if ($version && version_compare("$version", '1', '<')) {
 
+        if ($version && version_compare("$version", '1', '<')) {
             // no '@', it is possible that unserialize
             // raises a notice but it seems to block IO to
             // STDOUT if a '@' is used and a notice is raise
@@ -37416,33 +37003,29 @@ class PEAR_Config extends PEAR
                     $error = "PEAR_Config: bad data in $file";
                     $err = $this->raiseError($error);
                     return $err;
-                } else {
-                    $data = array();
                 }
+
+                $data = array();
             }
         // add parsing of newer formats here...
         } else {
             $err = $this->raiseError("$file: unknown version `$version'");
-            return $err; 
+            return $err;
         }
+
         return $data;
     }
 
-    // }}}
-    // {{{ getConfFile(layer)
     /**
     * Gets the file used for storing the config for a layer
     *
     * @param string $layer 'user' or 'system'
     */
-
     function getConfFile($layer)
     {
         return $this->files[$layer];
     }
 
-    // }}}
-
     /**
      * @param string Configuration class name, used for detecting duplicate calls
      * @param array information on a role as parsed from its xml file
@@ -37455,92 +37038,96 @@ class PEAR_Config extends PEAR
         if (isset($called[$class])) {
             return;
         }
+
         $called[$class] = 1;
         if (count($vars) > 3) {
             return $this->raiseError('Roles can only define 3 new config variables or less');
         }
+
         foreach ($vars as $name => $var) {
             if (!is_array($var)) {
                 return $this->raiseError('Configuration information must be an array');
             }
+
             if (!isset($var['type'])) {
                 return $this->raiseError('Configuration information must contain a type');
-            } else {
-                if (!in_array($var['type'],
-                      array('string', 'mask', 'password', 'directory', 'file', 'set'))) {
-                    return $this->raiseError(
-                        'Configuration type must be one of directory, file, string, ' .
-                        'mask, set, or password');
-                }
+            } elseif (!in_array($var['type'],
+                    array('string', 'mask', 'password', 'directory', 'file', 'set'))) {
+                  return $this->raiseError(
+                      'Configuration type must be one of directory, file, string, ' .
+                      'mask, set, or password');
             }
             if (!isset($var['default'])) {
                 return $this->raiseError(
                     'Configuration information must contain a default value ("default" index)');
-            } else {
-                if (is_array($var['default'])) {
-                    $real_default = '';
-                    foreach ($var['default'] as $config_var => $val) {
-                        if (strpos($config_var, 'text') === 0) {
-                            $real_default .= $val;
-                        } elseif (strpos($config_var, 'constant') === 0) {
-                            if (defined($val)) {
-                                $real_default .= constant($val);
-                            } else {
-                                return $this->raiseError(
-                                    'Unknown constant "' . $val . '" requested in ' .
-                                    'default value for configuration variable "' .
-                                    $name . '"');
-                            }
-                        } elseif (isset($this->configuration_info[$config_var])) {
-                            $real_default .=
-                                $this->configuration_info[$config_var]['default'];
-                        } else {
+            }
+
+            if (is_array($var['default'])) {
+                $real_default = '';
+                foreach ($var['default'] as $config_var => $val) {
+                    if (strpos($config_var, 'text') === 0) {
+                        $real_default .= $val;
+                    } elseif (strpos($config_var, 'constant') === 0) {
+                        if (!defined($val)) {
                             return $this->raiseError(
-                                'Unknown request for "' . $config_var . '" value in ' .
+                                'Unknown constant "' . $val . '" requested in ' .
                                 'default value for configuration variable "' .
                                 $name . '"');
                         }
+
+                        $real_default .= constant($val);
+                    } elseif (isset($this->configuration_info[$config_var])) {
+                        $real_default .=
+                            $this->configuration_info[$config_var]['default'];
+                    } else {
+                        return $this->raiseError(
+                            'Unknown request for "' . $config_var . '" value in ' .
+                            'default value for configuration variable "' .
+                            $name . '"');
                     }
-                    $var['default'] = $real_default;
-                }
-                if ($var['type'] == 'integer') {
-                    $var['default'] = (integer) $var['default'];
                 }
+                $var['default'] = $real_default;
+            }
+
+            if ($var['type'] == 'integer') {
+                $var['default'] = (integer) $var['default'];
             }
+
             if (!isset($var['doc'])) {
                 return $this->raiseError(
                     'Configuration information must contain a summary ("doc" index)');
             }
+
             if (!isset($var['prompt'])) {
                 return $this->raiseError(
                     'Configuration information must contain a simple prompt ("prompt" index)');
             }
+
             if (!isset($var['group'])) {
                 return $this->raiseError(
                     'Configuration information must contain a simple group ("group" index)');
             }
+
             if (isset($this->configuration_info[$name])) {
                 return $this->raiseError('Configuration variable "' . $name .
                     '" already exists');
             }
+
             $this->configuration_info[$name] = $var;
             // fix bug #7351: setting custom config variable in a channel fails
             $this->_channelConfigInfo[] = $name;
         }
+
         return true;
     }
 
-    // {{{ _encodeOutput(&data)
-
     /**
      * Encodes/scrambles configuration data before writing to files.
      * Currently, 'password' values will be base64-encoded as to avoid
      * that people spot cleartext passwords by accident.
      *
      * @param array (reference) array to encode values in
-     *
      * @return bool TRUE on success
-     *
      * @access private
      */
     function _encodeOutput(&$data)
@@ -37551,9 +37138,11 @@ class PEAR_Config extends PEAR
                     $this->_encodeOutput($data['__channels'][$channel]);
                 }
             }
+
             if (!isset($this->configuration_info[$key])) {
                 continue;
             }
+
             $type = $this->configuration_info[$key]['type'];
             switch ($type) {
                 // we base64-encode passwords so they are at least
@@ -37568,19 +37157,15 @@ class PEAR_Config extends PEAR
                 }
             }
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ _decodeInput(&data)
-
     /**
      * Decodes/unscrambles configuration data after reading from files.
      *
      * @param array (reference) array to encode values in
-     *
      * @return bool TRUE on success
-     *
      * @access private
      *
      * @see PEAR_Config::_encodeOutput
@@ -37590,15 +37175,18 @@ class PEAR_Config extends PEAR
         if (!is_array($data)) {
             return true;
         }
+
         foreach ($data as $key => $value) {
             if ($key == '__channels') {
                 foreach ($data['__channels'] as $channel => $blah) {
                     $this->_decodeInput($data['__channels'][$channel]);
                 }
             }
+
             if (!isset($this->configuration_info[$key])) {
                 continue;
             }
+
             $type = $this->configuration_info[$key]['type'];
             switch ($type) {
                 case 'password': {
@@ -37611,11 +37199,10 @@ class PEAR_Config extends PEAR
                 }
             }
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ getDefaultChannel([layer])
     /**
      * Retrieve the default channel.
      *
@@ -37637,27 +37224,28 @@ class PEAR_Config extends PEAR
         } elseif (isset($this->configuration[$layer]['default_channel'])) {
             $ret = $this->configuration[$layer]['default_channel'];
         }
+
         if ($ret == 'pear.php.net' && defined('PEAR_RUNTYPE') && PEAR_RUNTYPE == 'pecl') {
             $ret = 'pecl.php.net';
         }
+
         if ($ret) {
             if ($ret != 'pear.php.net') {
                 $this->_lazyChannelSetup();
             }
+
             return $ret;
         }
+
         return PEAR_CONFIG_DEFAULT_CHANNEL;
     }
 
-    // {{{ get(key, [layer])
     /**
      * Returns a configuration value, prioritizing layers as per the
      * layers property.
      *
      * @param string config key
-     *
      * @return mixed the config value, or NULL if not found
-     *
      * @access public
      */
     function get($key, $layer = null, $channel = false)
@@ -37665,19 +37253,22 @@ class PEAR_Config extends PEAR
         if (!isset($this->configuration_info[$key])) {
             return null;
         }
+
         if ($key == '__channels') {
             return null;
         }
+
         if ($key == 'default_channel') {
             return $this->getDefaultChannel($layer);
         }
+
         if (!$channel) {
             $channel = $this->getDefaultChannel();
         } elseif ($channel != 'pear.php.net') {
             $this->_lazyChannelSetup();
         }
         $channel = strtolower($channel);
-        
+
         $test = (in_array($key, $this->_channelConfigInfo)) ?
             $this->_getChannelValue($key, $layer, $channel) :
             null;
@@ -37691,6 +37282,7 @@ class PEAR_Config extends PEAR
             }
             return $test;
         }
+
         if ($layer === null) {
             foreach ($this->layers as $layer) {
                 if (isset($this->configuration[$layer][$key])) {
@@ -37702,6 +37294,7 @@ class PEAR_Config extends PEAR
                             return $this->_prependPath($test, $this->_installRoot);
                         }
                     }
+
                     if ($key == 'preferred_mirror') {
                         $reg = &$this->getRegistry();
                         if (is_object($reg)) {
@@ -37709,6 +37302,7 @@ class PEAR_Config extends PEAR
                             if (PEAR::isError($chan)) {
                                 return $channel;
                             }
+
                             if (!$chan->getMirror($test) && $chan->getName() != $test) {
                                 return $channel; // mirror does not exist
                             }
@@ -37726,6 +37320,7 @@ class PEAR_Config extends PEAR
                     return $this->_prependPath($test, $this->_installRoot);
                 }
             }
+
             if ($key == 'preferred_mirror') {
                 $reg = &$this->getRegistry();
                 if (is_object($reg)) {
@@ -37733,26 +37328,25 @@ class PEAR_Config extends PEAR
                     if (PEAR::isError($chan)) {
                         return $channel;
                     }
+
                     if (!$chan->getMirror($test) && $chan->getName() != $test) {
                         return $channel; // mirror does not exist
                     }
                 }
             }
+
             return $test;
         }
+
         return null;
     }
 
-    // }}}
-    // {{{ _getChannelValue(key, value, [layer])
     /**
      * Returns a channel-specific configuration value, prioritizing layers as per the
      * layers property.
      *
      * @param string config key
-     *
      * @return mixed the config value, or NULL if not found
-     *
      * @access private
      */
     function _getChannelValue($key, $layer, $channel)
@@ -37760,6 +37354,7 @@ class PEAR_Config extends PEAR
         if ($key == '__channels' || $channel == 'pear.php.net') {
             return null;
         }
+
         $ret = null;
         if ($layer === null) {
             foreach ($this->layers as $ilayer) {
@@ -37771,33 +37366,35 @@ class PEAR_Config extends PEAR
         } elseif (isset($this->configuration[$layer]['__channels'][$channel][$key])) {
             $ret = $this->configuration[$layer]['__channels'][$channel][$key];
         }
-        if ($key == 'preferred_mirror') {
-            if ($ret !== null) {
-                $reg = &$this->getRegistry($layer);
-                if (is_object($reg)) {
-                    $chan = &$reg->getChannel($channel);
-                    if (PEAR::isError($chan)) {
-                        return $channel;
-                    }
-                    if (!$chan->getMirror($ret) && $chan->getName() != $ret) {
-                        return $channel; // mirror does not exist
-                    }
+
+        if ($key != 'preferred_mirror') {
+            return $ret;
+        }
+
+
+        if ($ret !== null) {
+            $reg = &$this->getRegistry($layer);
+            if (is_object($reg)) {
+                $chan = &$reg->getChannel($channel);
+                if (PEAR::isError($chan)) {
+                    return $channel;
+                }
+
+                if (!$chan->getMirror($ret) && $chan->getName() != $ret) {
+                    return $channel; // mirror does not exist
                 }
-                return $ret;
-            }
-            if ($channel != $this->getDefaultChannel($layer)) {
-                return $channel; // we must use the channel name as the preferred mirror
-                                 // if the user has not chosen an alternate
-            } else {
-                return $this->getDefaultChannel($layer);
             }
+
+            return $ret;
         }
-        return $ret;
-    }
 
+        if ($channel != $this->getDefaultChannel($layer)) {
+            return $channel; // we must use the channel name as the preferred mirror
+                             // if the user has not chosen an alternate
+        }
 
-    // }}}
-    // {{{ set(key, value, [layer])
+        return $this->getDefaultChannel($layer);
+    }
 
     /**
      * Set a config value in a specific layer (defaults to 'user').
@@ -37816,9 +37413,11 @@ class PEAR_Config extends PEAR
         if ($key == '__channels') {
             return false;
         }
+
         if (!isset($this->configuration[$layer])) {
             return false;
         }
+
         if ($key == 'default_channel') {
             // can only set this value globally
             $channel = 'pear.php.net';
@@ -37826,24 +37425,29 @@ class PEAR_Config extends PEAR
                 $this->_lazyChannelSetup($layer);
             }
         }
+
         if ($key == 'preferred_mirror') {
             if ($channel == '__uri') {
                 return false; // can't set the __uri pseudo-channel's mirror
             }
+
             $reg = &$this->getRegistry($layer);
             if (is_object($reg)) {
                 $chan = &$reg->getChannel($channel ? $channel : 'pear.php.net');
                 if (PEAR::isError($chan)) {
                     return false;
                 }
+
                 if (!$chan->getMirror($value) && $chan->getName() != $value) {
                     return false; // mirror does not exist
                 }
             }
         }
+
         if (!isset($this->configuration_info[$key])) {
             return false;
         }
+
         extract($this->configuration_info[$key]);
         switch ($type) {
             case 'integer':
@@ -37864,42 +37468,49 @@ class PEAR_Config extends PEAR
                 break;
             }
         }
+
         if (!$channel) {
             $channel = $this->get('default_channel', null, 'pear.php.net');
         }
+
         if (!in_array($channel, $this->_channels)) {
             $this->_lazyChannelSetup($layer);
             $reg = &$this->getRegistry($layer);
             if ($reg) {
                 $channel = $reg->channelName($channel);
             }
+
             if (!in_array($channel, $this->_channels)) {
                 return false;
             }
         }
+
         if ($channel != 'pear.php.net') {
             if (in_array($key, $this->_channelConfigInfo)) {
                 $this->configuration[$layer]['__channels'][$channel][$key] = $value;
                 return true;
-            } else {
-                return false;
             }
-        } else {
-            if ($key == 'default_channel') {
-                if (!isset($reg)) {
-                    $reg = &$this->getRegistry($layer);
-                    if (!$reg) {
-                        $reg = &$this->getRegistry();
-                    }
-                }
-                if ($reg) {
-                    $value = $reg->channelName($value);
-                }
-                if (!$value) {
-                    return false;
+
+            return false;
+        }
+
+        if ($key == 'default_channel') {
+            if (!isset($reg)) {
+                $reg = &$this->getRegistry($layer);
+                if (!$reg) {
+                    $reg = &$this->getRegistry();
                 }
             }
+
+            if ($reg) {
+                $value = $reg->channelName($value);
+            }
+
+            if (!$value) {
+                return false;
+            }
         }
+
         $this->configuration[$layer][$key] = $value;
         if ($key == 'php_dir' && !$this->_noRegistry) {
             if (!isset($this->_registry[$layer]) ||
@@ -37909,26 +37520,29 @@ class PEAR_Config extends PEAR
                 $this->_registry[$layer]->setConfig($this, false);
             }
         }
+
         return true;
     }
 
-    // }}}
     function _lazyChannelSetup($uselayer = false)
     {
         if ($this->_noRegistry) {
             return;
         }
+
         $merge = false;
         foreach ($this->_registry as $layer => $p) {
             if ($uselayer && $uselayer != $layer) {
                 continue;
             }
+
             if (!$this->_regInitialized[$layer]) {
                 if ($layer == 'default' && isset($this->_registry['user']) ||
                       isset($this->_registry['system'])) {
                     // only use the default registry if there are no alternatives
                     continue;
                 }
+
                 if (!is_object($this->_registry[$layer])) {
                     if ($phpdir = $this->get('php_dir', $layer, 'pear.php.net')) {
                         $this->_registry[$layer] = &new PEAR_Registry($phpdir);
@@ -37939,14 +37553,14 @@ class PEAR_Config extends PEAR
                         return;
                     }
                 }
+
                 $this->setChannels($this->_registry[$layer]->listChannels(), $merge);
                 $this->_regInitialized[$layer] = true;
                 $merge = true;
             }
         }
     }
-    // {{{ setChannels()
-    
+
     /**
      * Set the list of channels.
      *
@@ -37960,16 +37574,19 @@ class PEAR_Config extends PEAR
         if (!is_array($channels)) {
             return false;
         }
+
         if ($merge) {
             $this->_channels = array_merge($this->_channels, $channels);
         } else {
             $this->_channels = $channels;
         }
+
         foreach ($channels as $channel) {
             $channel = strtolower($channel);
             if ($channel == 'pear.php.net') {
                 continue;
             }
+
             foreach ($this->layers as $layer) {
                 if (!isset($this->configuration[$layer]['__channels'])) {
                     $this->configuration[$layer]['__channels'] = array();
@@ -37980,12 +37597,10 @@ class PEAR_Config extends PEAR
                 }
             }
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ getType(key)
-
     /**
      * Get the type of a config value.
      *
@@ -38005,14 +37620,10 @@ class PEAR_Config extends PEAR
         return false;
     }
 
-    // }}}
-    // {{{ getDocs(key)
-
     /**
      * Get the documentation for a config value.
      *
      * @param string  config key
-     *
      * @return string documentation string
      *
      * @access public
@@ -38023,16 +37634,14 @@ class PEAR_Config extends PEAR
         if (isset($this->configuration_info[$key])) {
             return $this->configuration_info[$key]['doc'];
         }
+
         return false;
     }
-       // }}}
-    // {{{ getPrompt(key)
 
     /**
      * Get the short documentation for a config value.
      *
      * @param string  config key
-     *
      * @return string short documentation string
      *
      * @access public
@@ -38043,16 +37652,14 @@ class PEAR_Config extends PEAR
         if (isset($this->configuration_info[$key])) {
             return $this->configuration_info[$key]['prompt'];
         }
+
         return false;
     }
-    // }}}
-    // {{{ getGroup(key)
 
     /**
      * Get the parameter group for a config key.
      *
      * @param string  config key
-     *
      * @return string parameter group
      *
      * @access public
@@ -38063,12 +37670,10 @@ class PEAR_Config extends PEAR
         if (isset($this->configuration_info[$key])) {
             return $this->configuration_info[$key]['group'];
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ getGroups()
-
     /**
      * Get the list of parameter groups.
      *
@@ -38083,17 +37688,14 @@ class PEAR_Config extends PEAR
         foreach ($this->configuration_info as $key => $info) {
             $tmp[$info['group']] = 1;
         }
+
         return array_keys($tmp);
     }
 
-    // }}}
-    // {{{ getGroupKeys()
-
     /**
      * Get the list of the parameters in a group.
      *
      * @param string $group parameter group
-     *
      * @return array list of parameters in $group
      *
      * @access public
@@ -38107,18 +37709,15 @@ class PEAR_Config extends PEAR
                 $keys[] = $key;
             }
         }
+
         return $keys;
     }
 
-    // }}}
-    // {{{ getSetValues(key)
-
     /**
      * Get the list of allowed set values for a config value.  Returns
      * NULL for config values that are not sets.
      *
      * @param string  config key
-     *
      * @return array enumerated array of set values, or NULL if the
      *               config key is unknown or not a set
      *
@@ -38136,14 +37735,13 @@ class PEAR_Config extends PEAR
             if (key($valid_set) === 0) {
                 return $valid_set;
             }
+
             return array_keys($valid_set);
         }
+
         return null;
     }
 
-    // }}}
-    // {{{ getKeys()
-
     /**
      * Get all the current config keys.
      *
@@ -38161,22 +37759,19 @@ class PEAR_Config extends PEAR
                     $keys = array_merge($keys, $configs);
                 }
             }
+
             unset($test['__channels']);
             $keys = array_merge($keys, $test);
+
         }
         return array_keys($keys);
     }
 
-    // }}}
-    // {{{ remove(key, [layer])
-
     /**
      * Remove the a config key from a specific config layer.
      *
      * @param string config key
-     *
      * @param string (optional) config layer
-     *
      * @return bool TRUE on success, FALSE on failure
      *
      * @access public
@@ -38190,23 +37785,20 @@ class PEAR_Config extends PEAR
                 return true;
             }
         }
+
         if (isset($this->configuration[$layer][$key])) {
             unset($this->configuration[$layer][$key]);
             return true;
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ removeLayer(layer)
-
     /**
      * Temporarily remove an entire config layer.  USE WITH CARE!
      *
      * @param string config key
-     *
      * @param string (optional) config layer
-     *
      * @return bool TRUE on success, FALSE on failure
      *
      * @access public
@@ -38217,17 +37809,14 @@ class PEAR_Config extends PEAR
             $this->configuration[$layer] = array();
             return true;
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ store([layer])
-
     /**
      * Stores configuration data in a layer.
      *
      * @param string config layer to store
-     *
      * @return bool TRUE on success, or PEAR error on failure
      *
      * @access public
@@ -38237,28 +37826,6 @@ class PEAR_Config extends PEAR
         return $this->writeConfigFile(null, $layer, $data);
     }
 
-    // }}}
-    // {{{ toDefault(key)
-
-    /**
-     * Unset the user-defined value of a config key, reverting the
-     * value to the system-defined one.
-     *
-     * @param string config key
-     *
-     * @return bool TRUE on success, FALSE on failure
-     *
-     * @access public
-     */
-    function toDefault($key)
-    {
-        trigger_error("PEAR_Config::toDefault() deprecated, use PEAR_Config::remove() instead", E_USER_NOTICE);
-        return $this->remove($key, 'user');
-    }
-
-    // }}}
-    // {{{ definedBy(key)
-
     /**
      * Tells what config layer that gets to define a key.
      *
@@ -38284,6 +37851,7 @@ class PEAR_Config extends PEAR
                     return $layer;
                 }
             }
+
             if (isset($this->configuration[$layer][$key])) {
                 if ($returnchannel) {
                     return array('layer' => $layer, 'channel' => 'pear.php.net');
@@ -38291,37 +37859,14 @@ class PEAR_Config extends PEAR
                 return $layer;
             }
         }
-        return '';
-    }
-
-    // }}}
-    // {{{ isDefaulted(key)
 
-    /**
-     * Tells whether a config value has a system-defined value.
-     *
-     * @param string   config key
-     *
-     * @return bool
-     *
-     * @access public
-     *
-     * @deprecated
-     */
-    function isDefaulted($key)
-    {
-        trigger_error("PEAR_Config::isDefaulted() deprecated, use PEAR_Config::definedBy() instead", E_USER_NOTICE);
-        return $this->definedBy($key) == 'system';
+        return '';
     }
 
-    // }}}
-    // {{{ isDefined(key)
-
     /**
      * Tells whether a given key exists as a config value.
      *
      * @param string config key
-     *
      * @return bool whether <config key> exists in this object
      *
      * @access public
@@ -38333,17 +37878,14 @@ class PEAR_Config extends PEAR
                 return true;
             }
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ isDefinedLayer(key)
-
     /**
      * Tells whether a given config layer exists.
      *
      * @param string config layer
-     *
      * @return bool whether <config layer> exists in this object
      *
      * @access public
@@ -38353,9 +37895,6 @@ class PEAR_Config extends PEAR
         return isset($this->configuration[$layer]);
     }
 
-    // }}}
-    // {{{ getLayers()
-
     /**
      * Returns the layers defined (except the 'default' one)
      *
@@ -38368,24 +37907,17 @@ class PEAR_Config extends PEAR
         return array_keys($cf);
     }
 
-    // }}}
-    // {{{ apiVersion()
     function apiVersion()
     {
         return '1.1';
     }
-    // }}}
 
     /**
      * @return PEAR_Registry
      */
     function &getRegistry($use = null)
     {
-        if ($use === null) {
-            $layer = 'user';
-        } else {
-            $layer = $use;
-        }
+        $layer = $use === null ? 'user' : $use;
         if (isset($this->_registry[$layer])) {
             return $this->_registry[$layer];
         } elseif ($use === null && isset($this->_registry['system'])) {
@@ -38395,12 +37927,13 @@ class PEAR_Config extends PEAR
         } elseif ($use) {
             $a = false;
             return $a;
-        } else {
-            // only go here if null was passed in
-            echo "CRITICAL ERROR: Registry could not be initialized from any value";
-            exit(1);
         }
+
+        // only go here if null was passed in
+        echo "CRITICAL ERROR: Registry could not be initialized from any value";
+        exit(1);
     }
+
     /**
      * This is to allow customization like the use of installroot
      * @param PEAR_Registry
@@ -38411,13 +37944,16 @@ class PEAR_Config extends PEAR
         if ($this->_noRegistry) {
             return false;
         }
+
         if (!in_array($layer, array('user', 'system'))) {
             return false;
         }
+
         $this->_registry[$layer] = &$reg;
         if (is_object($reg)) {
             $this->_registry[$layer]->setConfig($this, false);
         }
+
         return true;
     }
 
@@ -38427,15 +37963,6 @@ class PEAR_Config extends PEAR
     }
 
     /**
-     * @return PEAR_Remote
-     */
-    function &getRemote()
-    {
-        $remote = &new PEAR_Remote($this);
-        return $remote;
-    }
-
-    /**
      * @return PEAR_REST
      */
     function &getREST($version, $options = array())
@@ -38444,6 +37971,7 @@ class PEAR_Config extends PEAR
         if (!class_exists($class = 'PEAR_REST_' . $version)) {
             require_once 'PEAR/REST/' . $version . '.php';
         }
+
         $remote = &new $class($this, $options);
         return $remote;
     }
@@ -38457,13 +37985,11 @@ class PEAR_Config extends PEAR
     {
         if (isset($this->_ftp)) {
             return $this->_ftp;
-        } else {
-            $a = false;
-            return $a;
         }
-    }
 
-    // {{{ _prependPath($path, $prepend)
+        $a = false;
+        return $a;
+    }
 
     function _prependPath($path, $prepend)
     {
@@ -38481,7 +38007,6 @@ class PEAR_Config extends PEAR
         }
         return $path;
     }
-    // }}}
 
     /**
      * @param string|false installation directory to prepend to all _dir variables, or false to
@@ -38507,525 +38032,19 @@ class PEAR_Config extends PEAR
         }
     }
 }
-
-?>
-                                 PEAR-1.7.2/PEAR/Dependency.php                                                                      100644    1750    1750        41343 11014312742  11030                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Dependency
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * THIS FILE IS DEPRECATED IN FAVOR OF DEPENDENCY2.PHP, AND IS NOT USED IN THE INSTALLER
- * 
- * @category   pear
- * @package    PEAR
- * @author     Tomas V.V.Cox <cox at idecnet.com>
- * @author     Stig Bakken <ssb at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Dependency.php,v 1.43 2008/01/03 20:26:34 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-require_once "PEAR.php";
-require_once "OS/Guess.php";
-
-define('PEAR_DEPENDENCY_MISSING',        -1);
-define('PEAR_DEPENDENCY_CONFLICT',       -2);
-define('PEAR_DEPENDENCY_UPGRADE_MINOR',  -3);
-define('PEAR_DEPENDENCY_UPGRADE_MAJOR',  -4);
-define('PEAR_DEPENDENCY_BAD_DEPENDENCY', -5);
-define('PEAR_DEPENDENCY_MISSING_OPTIONAL', -6);
-define('PEAR_DEPENDENCY_CONFLICT_OPTIONAL',       -7);
-define('PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL',  -8);
-define('PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL',  -9);
-
-/**
- * Dependency check for PEAR packages
- *
- * The class is based on the dependency RFC that can be found at
- * http://cvs.php.net/cvs.php/pearweb/rfc. It requires PHP >= 4.1
- *
- * @author Tomas V.V.Vox <cox at idecnet.com>
- * @author Stig Bakken <ssb at php.net>
- */
-class PEAR_Dependency
-{
-    // {{{ constructor
-    /**
-     * Constructor
-     *
-     * @access public
-     * @param  object Registry object
-     * @return void
-     */
-    function PEAR_Dependency(&$registry)
-    {
-        $this->registry = &$registry;
-    }
-
-    // }}}
-    // {{{ callCheckMethod()
-
-    /**
-    * This method maps the XML dependency definition to the
-    * corresponding one from PEAR_Dependency
-    *
-    * <pre>
-    * $opts => Array
-    *    (
-    *        [type] => pkg
-    *        [rel] => ge
-    *        [version] => 3.4
-    *        [name] => HTML_Common
-    *        [optional] => false
-    *    )
-    * </pre>
-    *
-    * @param  string Error message
-    * @param  array  Options
-    * @return boolean
-    */
-    function callCheckMethod(&$errmsg, $opts)
-    {
-        $rel = isset($opts['rel']) ? $opts['rel'] : 'has';
-        $req = isset($opts['version']) ? $opts['version'] : null;
-        $name = isset($opts['name']) ? $opts['name'] : null;
-        $channel = isset($opts['channel']) ? $opts['channel'] : 'pear.php.net';
-        $opt = (isset($opts['optional']) && $opts['optional'] == 'yes') ?
-            $opts['optional'] : null;
-        $errmsg = '';
-        switch ($opts['type']) {
-            case 'pkg':
-                return $this->checkPackage($errmsg, $name, $req, $rel, $opt, $channel);
-                break;
-            case 'ext':
-                return $this->checkExtension($errmsg, $name, $req, $rel, $opt);
-                break;
-            case 'php':
-                return $this->checkPHP($errmsg, $req, $rel);
-                break;
-            case 'prog':
-                return $this->checkProgram($errmsg, $name);
-                break;
-            case 'os':
-                return $this->checkOS($errmsg, $name);
-                break;
-            case 'sapi':
-                return $this->checkSAPI($errmsg, $name);
-                break;
-            case 'zend':
-                return $this->checkZend($errmsg, $name);
-                break;
-            default:
-                return "'{$opts['type']}' dependency type not supported";
-        }
-    }
-
-    // }}}
-    // {{{ checkPackage()
-
-    /**
-     * Package dependencies check method
-     *
-     * @param string $errmsg    Empty string, it will be populated with an error message, if any
-     * @param string $name      Name of the package to test
-     * @param string $req       The package version required
-     * @param string $relation  How to compare versions with each other
-     * @param bool   $opt       Whether the relationship is optional
-     * @param string $channel   Channel name
-     *
-     * @return mixed bool false if no error or the error string
-     */
-    function checkPackage(&$errmsg, $name, $req = null, $relation = 'has',
-                          $opt = false, $channel = 'pear.php.net')
-    {
-        if (is_string($req) && substr($req, 0, 2) == 'v.') {
-            $req = substr($req, 2);
-        }
-        switch ($relation) {
-            case 'has':
-                if (!$this->registry->packageExists($name, $channel)) {
-                    if ($opt) {
-                        $errmsg = "package `$channel/$name' is recommended to utilize some features.";
-                        return PEAR_DEPENDENCY_MISSING_OPTIONAL;
-                    }
-                    $errmsg = "requires package `$channel/$name'";
-                    return PEAR_DEPENDENCY_MISSING;
-                }
-                return false;
-            case 'not':
-                if ($this->registry->packageExists($name, $channel)) {
-                    $errmsg = "conflicts with package `$channel/$name'";
-                    return PEAR_DEPENDENCY_CONFLICT;
-                }
-                return false;
-            case 'lt':
-            case 'le':
-            case 'eq':
-            case 'ne':
-            case 'ge':
-            case 'gt':
-                $version = $this->registry->packageInfo($name, 'version', $channel);
-                if (!$this->registry->packageExists($name, $channel)
-                    || !version_compare("$version", "$req", $relation))
-                {
-                    $code = $this->codeFromRelation($relation, $version, $req, $opt);
-                    if ($opt) {
-                        $errmsg = "package `$channel/$name' version " . $this->signOperator($relation) .
-                            " $req is recommended to utilize some features.";
-                        if ($version) {
-                            $errmsg .= "  Installed version is $version";
-                        }
-                        return $code;
-                    }
-                    $errmsg = "requires package `$channel/$name' " .
-                        $this->signOperator($relation) . " $req";
-                    return $code;
-                }
-                return false;
-        }
-        $errmsg = "relation '$relation' with requirement '$req' is not supported (name=$channel/$name)";
-        return PEAR_DEPENDENCY_BAD_DEPENDENCY;
-    }
-
-    // }}}
-    // {{{ checkPackageUninstall()
-
-    /**
-     * Check package dependencies on uninstall
-     *
-     * @param string $error     The resultant error string
-     * @param string $warning   The resultant warning string
-     * @param string $name      Name of the package to test
-     * @param string $channel   Channel name of the package
-     *
-     * @return bool true if there were errors
-     */
-    function checkPackageUninstall(&$error, &$warning, $package, $channel = 'pear.php.net')
-    {
-        $channel = strtolower($channel);
-        $error = null;
-        $channels = $this->registry->listAllPackages();
-        foreach ($channels as $channelname => $packages) {
-            foreach ($packages as $pkg) {
-                if ($pkg == $package && $channel == $channelname) {
-                    continue;
-                }
-                $deps = $this->registry->packageInfo($pkg, 'release_deps', $channel);
-                if (empty($deps)) {
-                    continue;
-                }
-                foreach ($deps as $dep) {
-                    $depchannel = isset($dep['channel']) ? $dep['channel'] : 'pear.php.net';
-                    if ($dep['type'] == 'pkg' && (strcasecmp($dep['name'], $package) == 0) &&
-                          ($depchannel == $channel)) {
-                        if ($dep['rel'] == 'ne') {
-                            continue;
-                        }
-                        if (isset($dep['optional']) && $dep['optional'] == 'yes') {
-                            $warning .= "\nWarning: Package '$depchannel/$pkg' optionally depends on '$channel:/package'";
-                        } else {
-                            $error .= "Package '$depchannel/$pkg' depends on '$channel/$package'\n";
-                        }
-                    }
-                }
-            }
-        }
-        return ($error) ? true : false;
-    }
-
-    // }}}
-    // {{{ checkExtension()
-
-    /**
-     * Extension dependencies check method
-     *
-     * @param string $name        Name of the extension to test
-     * @param string $req_ext_ver Required extension version to compare with
-     * @param string $relation    How to compare versions with eachother
-     * @param bool   $opt         Whether the relationship is optional
-     *
-     * @return mixed bool false if no error or the error string
-     */
-    function checkExtension(&$errmsg, $name, $req = null, $relation = 'has',
-        $opt = false)
-    {
-        if ($relation == 'not') {
-            if (extension_loaded($name)) {
-                $errmsg = "conflicts with  PHP extension '$name'";
-                return PEAR_DEPENDENCY_CONFLICT;
-            } else {
-                return false;
-            }
-        }
-
-        if (!extension_loaded($name)) {
-            if ($relation == 'ne') {
-                return false;
-            }
-            if ($opt) {
-                $errmsg = "'$name' PHP extension is recommended to utilize some features";
-                return PEAR_DEPENDENCY_MISSING_OPTIONAL;
-            }
-            $errmsg = "'$name' PHP extension is not installed";
-            return PEAR_DEPENDENCY_MISSING;
-        }
-        if ($relation == 'has') {
-            return false;
-        }
-        $code = false;
-        if (is_string($req) && substr($req, 0, 2) == 'v.') {
-            $req = substr($req, 2);
-        }
-        $ext_ver = phpversion($name);
-        $operator = $relation;
-        // Force params to be strings, otherwise the comparation will fail (ex. 0.9==0.90)
-        if (!version_compare("$ext_ver", "$req", $operator)) {
-            $errmsg = "'$name' PHP extension version " .
-                $this->signOperator($operator) . " $req is required";
-            $code = $this->codeFromRelation($relation, $ext_ver, $req, $opt);
-            if ($opt) {
-                $errmsg = "'$name' PHP extension version " . $this->signOperator($operator) .
-                    " $req is recommended to utilize some features";
-                return $code;
-            }
-        }
-        return $code;
-    }
-
-    // }}}
-    // {{{ checkOS()
-
-    /**
-     * Operating system  dependencies check method
-     *
-     * @param string $os  Name of the operating system
-     *
-     * @return mixed bool false if no error or the error string
-     */
-    function checkOS(&$errmsg, $os)
-    {
-        // XXX Fixme: Implement a more flexible way, like
-        // comma separated values or something similar to PEAR_OS
-        static $myos;
-        if (empty($myos)) {
-            $myos = new OS_Guess();
-        }
-        // only 'has' relation is currently supported
-        if ($myos->matchSignature($os)) {
-            return false;
-        }
-        $errmsg = "'$os' operating system not supported";
-        return PEAR_DEPENDENCY_CONFLICT;
-    }
-
-    // }}}
-    // {{{ checkPHP()
-
-    /**
-     * PHP version check method
-     *
-     * @param string $req   which version to compare
-     * @param string $relation  how to compare the version
-     *
-     * @return mixed bool false if no error or the error string
-     */
-    function checkPHP(&$errmsg, $req, $relation = 'ge')
-    {
-        // this would be a bit stupid, but oh well :)
-        if ($relation == 'has') {
-            return false;
-        }
-        if ($relation == 'not') {
-            $errmsg = "Invalid dependency - 'not' is allowed when specifying PHP, you must run PHP in PHP";
-            return PEAR_DEPENDENCY_BAD_DEPENDENCY;
-        }
-        if (substr($req, 0, 2) == 'v.') {
-            $req = substr($req,2, strlen($req) - 2);
-        }
-        $php_ver = phpversion();
-        $operator = $relation;
-        if (!version_compare("$php_ver", "$req", $operator)) {
-            $errmsg = "PHP version " . $this->signOperator($operator) .
-                " $req is required";
-            return PEAR_DEPENDENCY_CONFLICT;
-        }
-        return false;
-    }
-
-    // }}}
-    // {{{ checkProgram()
-
-    /**
-     * External program check method.  Looks for executable files in
-     * directories listed in the PATH environment variable.
-     *
-     * @param string $program   which program to look for
-     *
-     * @return mixed bool false if no error or the error string
-     */
-    function checkProgram(&$errmsg, $program)
-    {
-        // XXX FIXME honor safe mode
-        $exe_suffix = OS_WINDOWS ? '.exe' : '';
-        $path_elements = explode(PATH_SEPARATOR, getenv('PATH'));
-        foreach ($path_elements as $dir) {
-            $file = $dir . DIRECTORY_SEPARATOR . $program . $exe_suffix;
-            if (file_exists($file) && is_executable($file)) {
-                return false;
-            }
-        }
-        $errmsg = "'$program' program is not present in the PATH";
-        return PEAR_DEPENDENCY_MISSING;
-    }
-
-    // }}}
-    // {{{ checkSAPI()
-
-    /**
-     * SAPI backend check method.  Version comparison is not yet
-     * available here.
-     *
-     * @param string $name      name of SAPI backend
-     * @param string $req   which version to compare
-     * @param string $relation  how to compare versions (currently
-     *                          hardcoded to 'has')
-     * @return mixed bool false if no error or the error string
-     */
-    function checkSAPI(&$errmsg, $name, $req = null, $relation = 'has')
-    {
-        // XXX Fixme: There is no way to know if the user has or
-        // not other SAPI backends installed than the installer one
-
-        $sapi_backend = php_sapi_name();
-        // Version comparisons not supported, sapi backends don't have
-        // version information yet.
-        if ($sapi_backend == $name) {
-            return false;
-        }
-        $errmsg = "'$sapi_backend' SAPI backend not supported";
-        return PEAR_DEPENDENCY_CONFLICT;
-    }
-
-    // }}}
-    // {{{ checkZend()
-
-    /**
-     * Zend version check method
-     *
-     * @param string $req   which version to compare
-     * @param string $relation  how to compare the version
-     *
-     * @return mixed bool false if no error or the error string
-     */
-    function checkZend(&$errmsg, $req, $relation = 'ge')
-    {
-        if (substr($req, 0, 2) == 'v.') {
-            $req = substr($req,2, strlen($req) - 2);
-        }
-        $zend_ver = zend_version();
-        $operator = substr($relation,0,2);
-        if (!version_compare("$zend_ver", "$req", $operator)) {
-            $errmsg = "Zend version " . $this->signOperator($operator) .
-                " $req is required";
-            return PEAR_DEPENDENCY_CONFLICT;
-        }
-        return false;
-    }
-
-    // }}}
-    // {{{ signOperator()
-
-    /**
-     * Converts text comparing operators to them sign equivalents
-     *
-     * Example: 'ge' to '>='
-     *
-     * @access public
-     * @param  string Operator
-     * @return string Sign equivalent
-     */
-    function signOperator($operator)
-    {
-        switch($operator) {
-            case 'lt': return '<';
-            case 'le': return '<=';
-            case 'gt': return '>';
-            case 'ge': return '>=';
-            case 'eq': return '==';
-            case 'ne': return '!=';
-            default:
-                return $operator;
-        }
-    }
-
-    // }}}
-    // {{{ codeFromRelation()
-
-    /**
-     * Convert relation into corresponding code
-     *
-     * @access public
-     * @param  string Relation
-     * @param  string Version
-     * @param  string Requirement
-     * @param  bool   Optional dependency indicator
-     * @return integer
-     */
-    function codeFromRelation($relation, $version, $req, $opt = false)
-    {
-        $code = PEAR_DEPENDENCY_BAD_DEPENDENCY;
-        switch ($relation) {
-            case 'gt': case 'ge': case 'eq':
-                // upgrade
-                $have_major = preg_replace('/\D.*/', '', $version);
-                $need_major = preg_replace('/\D.*/', '', $req);
-                if ($need_major > $have_major) {
-                    $code = $opt ? PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL :
-                                   PEAR_DEPENDENCY_UPGRADE_MAJOR;
-                } else {
-                    $code = $opt ? PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL :
-                                   PEAR_DEPENDENCY_UPGRADE_MINOR;
-                }
-                break;
-            case 'lt': case 'le': case 'ne':
-                $code = $opt ? PEAR_DEPENDENCY_CONFLICT_OPTIONAL :
-                               PEAR_DEPENDENCY_CONFLICT;
-                break;
-        }
-        return $code;
-    }
-
-    // }}}
-}
-?>
-                                                                                                                                                                                                                                                                                             PEAR-1.7.2/PEAR/DependencyDB.php                                                                    100644    1750    1750        62131 11014312742  11234                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                                                                                                                                                                         PEAR-1.8.0/PEAR/DependencyDB.php                                                                    100664     764     764        57540      100664  11064                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_DependencyDB, advanced installed packages dependency database
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: DependencyDB.php,v 1.37 2008/01/03 20:26:35 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: DependencyDB.php,v 1.44 2009/03/21 15:15:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -39043,9 +38062,9 @@ $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array();
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Tomas V.V.Cox <cox at idec.net.com>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -39108,18 +38127,18 @@ class PEAR_DependencyDB
      */
     function &singleton(&$config, $depdb = false)
     {
-        if (!isset($GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
-              [$config->get('php_dir', null, 'pear.php.net')])) {
+        $phpdir = $config->get('php_dir', null, 'pear.php.net');
+        if (!isset($GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir])) {
             $a = new PEAR_DependencyDB;
-            $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
-              [$config->get('php_dir', null, 'pear.php.net')] = &$a;
+            $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir] = &$a;
             $a->setConfig($config, $depdb);
-            if (PEAR::isError($e = $a->assertDepsDB())) {
+            $e = $a->assertDepsDB();
+            if (PEAR::isError($e)) {
                 return $e;
             }
         }
-        return $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
-              [$config->get('php_dir', null, 'pear.php.net')];
+
+        return $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir];
     }
 
     /**
@@ -39134,6 +38153,7 @@ class PEAR_DependencyDB
         } else {
             $this->_config = &$config;
         }
+
         $this->_registry = &$this->_config->getRegistry();
         if (!$depdb) {
             $this->_depdb = $this->_config->get('php_dir', null, 'pear.php.net') .
@@ -39141,6 +38161,7 @@ class PEAR_DependencyDB
         } else {
             $this->_depdb = $depdb;
         }
+
         $this->_lockfile = dirname($this->_depdb) . DIRECTORY_SEPARATOR . '.depdblock';
     }
     // }}}
@@ -39154,13 +38175,15 @@ class PEAR_DependencyDB
                 if ($dir != '.' && file_exists($dir)) {
                     if (is_writeable($dir)) {
                         return true;
-                    } else {
-                        return false;
                     }
+
+                    return false;
                 }
             }
+
             return false;
         }
+
         return is_writeable($this->_depdb);
     }
 
@@ -39181,6 +38204,7 @@ class PEAR_DependencyDB
             if ($depdb['_version'] < $this->_version) {
                 $this->rebuildDB();
             }
+
             if ($depdb['_version']{0} > $this->_version{0}) {
                 return PEAR::raiseError('Dependency database is version ' .
                     $depdb['_version'] . ', and we are version ' .
@@ -39204,9 +38228,11 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         if (isset($data['packages'][$channel][$package])) {
             return $data['packages'][$channel][$package];
         }
+
         return false;
     }
 
@@ -39226,19 +38252,24 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         $depend = $this->getDependentPackages($pkg);
         if (!$depend) {
             return false;
         }
+
         $dependencies = array();
         foreach ($depend as $info) {
             $temp = $this->getDependencies($info);
             foreach ($temp as $dep) {
-                if (strtolower($dep['dep']['channel']) == strtolower($channel) &&
-                      strtolower($dep['dep']['name']) == strtolower($package)) {
+                if (isset($dep['dep'], $dep['dep']['channel'], $dep['dep']['name']) &&
+                      strtolower($dep['dep']['channel']) == $channel &&
+                      strtolower($dep['dep']['name']) == $package
+                ) {
                     if (!isset($dependencies[$info['channel']])) {
                         $dependencies[$info['channel']] = array();
                     }
+
                     if (!isset($dependencies[$info['channel']][$info['package']])) {
                         $dependencies[$info['channel']][$info['package']] = array();
                     }
@@ -39246,6 +38277,7 @@ class PEAR_DependencyDB
                 }
             }
         }
+
         return $dependencies;
     }
 
@@ -39263,10 +38295,12 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         $data = $this->_getDepDB();
         if (isset($data['dependencies'][$channel][$package])) {
             return $data['dependencies'][$channel][$package];
         }
+
         return false;
     }
 
@@ -39281,7 +38315,7 @@ class PEAR_DependencyDB
         $this->_getDepDB();
         return $this->_dependsOn($parent, $child, $c);
     }
-    
+
     function _dependsOn($parent, $child, &$checked)
     {
         if (is_object($parent)) {
@@ -39291,6 +38325,7 @@ class PEAR_DependencyDB
             $channel = strtolower($parent['channel']);
             $package = strtolower($parent['package']);
         }
+
         if (is_object($child)) {
             $depchannel = strtolower($child->getChannel());
             $deppackage = strtolower($child->getPackage());
@@ -39298,13 +38333,16 @@ class PEAR_DependencyDB
             $depchannel = strtolower($child['channel']);
             $deppackage = strtolower($child['package']);
         }
+
         if (isset($checked[$channel][$package][$depchannel][$deppackage])) {
             return false; // avoid endless recursion
         }
+
         $checked[$channel][$package][$depchannel][$deppackage] = true;
         if (!isset($this->_cache['dependencies'][$channel][$package])) {
             return false;
         }
+
         foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
             if (isset($info['dep']['uri'])) {
                 if (is_object($child)) {
@@ -39318,11 +38356,13 @@ class PEAR_DependencyDB
                 }
                 return false;
             }
-            if (strtolower($info['dep']['channel']) == strtolower($depchannel) &&
-                  strtolower($info['dep']['name']) == strtolower($deppackage)) {
+
+            if (strtolower($info['dep']['channel']) == $depchannel &&
+                  strtolower($info['dep']['name']) == $deppackage) {
                 return true;
             }
         }
+
         foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
             if (isset($info['dep']['uri'])) {
                 if ($this->_dependsOn(array(
@@ -39338,6 +38378,7 @@ class PEAR_DependencyDB
                 }
             }
         }
+
         return false;
     }
 
@@ -39371,50 +38412,51 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         if (!isset($data['dependencies'][$channel][$package])) {
             return true;
         }
+
         foreach ($data['dependencies'][$channel][$package] as $dep) {
-            $found = false;
-            if (isset($dep['dep']['uri'])) {
-                $depchannel = '__uri';
-            } else {
-                $depchannel = strtolower($dep['dep']['channel']);
-            }
-            if (isset($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {
-                foreach ($data['packages'][$depchannel][strtolower($dep['dep']['name'])] as
-                      $i => $info) {
-                    if ($info['channel'] == $channel &&
-                          $info['package'] == $package) {
+            $found      = false;
+            $depchannel = isset($dep['dep']['uri']) ? '__uri' : strtolower($dep['dep']['channel']);
+            $depname    = strtolower($dep['dep']['name']);
+            if (isset($data['packages'][$depchannel][$depname])) {
+                foreach ($data['packages'][$depchannel][$depname] as $i => $info) {
+                    if ($info['channel'] == $channel && $info['package'] == $package) {
                         $found = true;
                         break;
                     }
                 }
             }
+
             if ($found) {
-                unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])][$i]);
-                if (!count($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {
-                    unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])]);
+                unset($data['packages'][$depchannel][$depname][$i]);
+                if (!count($data['packages'][$depchannel][$depname])) {
+                    unset($data['packages'][$depchannel][$depname]);
                     if (!count($data['packages'][$depchannel])) {
                         unset($data['packages'][$depchannel]);
                     }
                 } else {
-                    $data['packages'][$depchannel][strtolower($dep['dep']['name'])] =
-                        array_values(
-                            $data['packages'][$depchannel][strtolower($dep['dep']['name'])]);
+                    $data['packages'][$depchannel][$depname] =
+                        array_values($data['packages'][$depchannel][$depname]);
                 }
             }
         }
+
         unset($data['dependencies'][$channel][$package]);
         if (!count($data['dependencies'][$channel])) {
             unset($data['dependencies'][$channel]);
         }
+
         if (!count($data['dependencies'])) {
             unset($data['dependencies']);
         }
+
         if (!count($data['packages'])) {
             unset($data['packages']);
         }
+
         $this->_writeDepDB($data);
     }
 
@@ -39429,10 +38471,12 @@ class PEAR_DependencyDB
             // allow startup for read-only with older Registry
             return $depdb;
         }
+
         $packages = $this->_registry->listAllPackages();
         if (PEAR::isError($packages)) {
             return $packages;
         }
+
         foreach ($packages as $channel => $ps) {
             foreach ($ps as $package) {
                 $package = $this->_registry->getPackage($package, $channel);
@@ -39442,10 +38486,12 @@ class PEAR_DependencyDB
                 $this->_setPackageDeps($depdb, $package);
             }
         }
+
         $error = $this->_writeDepDB($depdb);
         if (PEAR::isError($error)) {
             return $error;
         }
+
         $this->_cache = $depdb;
         return true;
     }
@@ -39458,40 +38504,47 @@ class PEAR_DependencyDB
      */
     function _lock($mode = LOCK_EX)
     {
-        if (!eregi('Windows 9', php_uname())) {
-            if ($mode != LOCK_UN && is_resource($this->_lockFp)) {
-                // XXX does not check type of lock (LOCK_SH/LOCK_EX)
-                return true;
-            }
-            $open_mode = 'w';
-            // XXX People reported problems with LOCK_SH and 'w'
-            if ($mode === LOCK_SH) {
-                if (!file_exists($this->_lockfile)) {
-                    touch($this->_lockfile);
-                } elseif (!is_file($this->_lockfile)) {
-                    return PEAR::raiseError('could not create Dependency lock file, ' .
-                        'it exists and is not a regular file');
-                }
-                $open_mode = 'r';
-            }
+        if (stristr(php_uname(), 'Windows 9')) {
+            return true;
+        }
 
-            if (!is_resource($this->_lockFp)) {
-                $this->_lockFp = @fopen($this->_lockfile, $open_mode);
-            }
-            if (!is_resource($this->_lockFp)) {
-                return PEAR::raiseError("could not create Dependency lock file" .
-                                         (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+        if ($mode != LOCK_UN && is_resource($this->_lockFp)) {
+            // XXX does not check type of lock (LOCK_SH/LOCK_EX)
+            return true;
+        }
+
+        $open_mode = 'w';
+        // XXX People reported problems with LOCK_SH and 'w'
+        if ($mode === LOCK_SH) {
+            if (!file_exists($this->_lockfile)) {
+                touch($this->_lockfile);
+            } elseif (!is_file($this->_lockfile)) {
+                return PEAR::raiseError('could not create Dependency lock file, ' .
+                    'it exists and is not a regular file');
             }
-            if (!(int)flock($this->_lockFp, $mode)) {
-                switch ($mode) {
-                    case LOCK_SH: $str = 'shared';    break;
-                    case LOCK_EX: $str = 'exclusive'; break;
-                    case LOCK_UN: $str = 'unlock';    break;
-                    default:      $str = 'unknown';   break;
-                }
-                return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");
+            $open_mode = 'r';
+        }
+
+        if (!is_resource($this->_lockFp)) {
+            $this->_lockFp = @fopen($this->_lockfile, $open_mode);
+        }
+
+        if (!is_resource($this->_lockFp)) {
+            return PEAR::raiseError("could not create Dependency lock file" .
+                                     (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+        }
+
+        if (!(int)flock($this->_lockFp, $mode)) {
+            switch ($mode) {
+                case LOCK_SH: $str = 'shared';    break;
+                case LOCK_EX: $str = 'exclusive'; break;
+                case LOCK_UN: $str = 'unlock';    break;
+                default:      $str = 'unknown';   break;
             }
+
+            return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");
         }
+
         return true;
     }
 
@@ -39519,13 +38572,16 @@ class PEAR_DependencyDB
         if (!$this->hasWriteAccess()) {
             return array('_version' => $this->_version);
         }
+
         if (isset($this->_cache)) {
             return $this->_cache;
         }
+
         if (!$fp = fopen($this->_depdb, 'r')) {
             $err = PEAR::raiseError("Could not open dependencies file `".$this->_depdb."'");
             return $err;
         }
+
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
         clearstatcache();
@@ -39547,10 +38603,12 @@ class PEAR_DependencyDB
         if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
             return $e;
         }
+
         if (!$fp = fopen($this->_depdb, 'wb')) {
             $this->_unlock();
             return PEAR::raiseError("Could not open dependencies file `".$this->_depdb."' for writing");
         }
+
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
         fwrite($fp, serialize($deps));
@@ -39577,70 +38635,89 @@ class PEAR_DependencyDB
         } else {
             $deps = $pkg->getDeps(true);
         }
+
         if (!$deps) {
             return;
         }
+
         if (!is_array($data)) {
             $data = array();
         }
+
         if (!isset($data['dependencies'])) {
             $data['dependencies'] = array();
         }
-        if (!isset($data['dependencies'][strtolower($pkg->getChannel())])) {
-            $data['dependencies'][strtolower($pkg->getChannel())] = array();
+
+        $channel = strtolower($pkg->getChannel());
+        $package = strtolower($pkg->getPackage());
+
+        if (!isset($data['dependencies'][$channel])) {
+            $data['dependencies'][$channel] = array();
         }
-        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())]
-            = array();
+
+        $data['dependencies'][$channel][$package] = array();
         if (isset($deps['required']['package'])) {
             if (!isset($deps['required']['package'][0])) {
                 $deps['required']['package'] = array($deps['required']['package']);
             }
+
             foreach ($deps['required']['package'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'required');
             }
         }
+
         if (isset($deps['optional']['package'])) {
             if (!isset($deps['optional']['package'][0])) {
                 $deps['optional']['package'] = array($deps['optional']['package']);
             }
+
             foreach ($deps['optional']['package'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'optional');
             }
         }
+
         if (isset($deps['required']['subpackage'])) {
             if (!isset($deps['required']['subpackage'][0])) {
                 $deps['required']['subpackage'] = array($deps['required']['subpackage']);
             }
+
             foreach ($deps['required']['subpackage'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'required');
             }
         }
+
         if (isset($deps['optional']['subpackage'])) {
             if (!isset($deps['optional']['subpackage'][0])) {
                 $deps['optional']['subpackage'] = array($deps['optional']['subpackage']);
             }
+
             foreach ($deps['optional']['subpackage'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'optional');
             }
         }
+
         if (isset($deps['group'])) {
             if (!isset($deps['group'][0])) {
                 $deps['group'] = array($deps['group']);
             }
+
             foreach ($deps['group'] as $group) {
                 if (isset($group['package'])) {
                     if (!isset($group['package'][0])) {
                         $group['package'] = array($group['package']);
                     }
+
                     foreach ($group['package'] as $dep) {
                         $this->_registerDep($data, $pkg, $dep, 'optional',
                             $group['attribs']['name']);
                     }
                 }
+
                 if (isset($group['subpackage'])) {
                     if (!isset($group['subpackage'][0])) {
                         $group['subpackage'] = array($group['subpackage']);
                     }
+
                     foreach ($group['subpackage'] as $dep) {
                         $this->_registerDep($data, $pkg, $dep, 'optional',
                             $group['attribs']['name']);
@@ -39648,12 +38725,11 @@ class PEAR_DependencyDB
                 }
             }
         }
-        if ($data['dependencies'][strtolower($pkg->getChannel())]
-              [strtolower($pkg->getPackage())] == array()) {
-            unset($data['dependencies'][strtolower($pkg->getChannel())]
-              [strtolower($pkg->getPackage())]);
-            if (!count($data['dependencies'][strtolower($pkg->getChannel())])) {
-                unset($data['dependencies'][strtolower($pkg->getChannel())]);
+
+        if ($data['dependencies'][$channel][$package] == array()) {
+            unset($data['dependencies'][$channel][$package]);
+            if (!count($data['dependencies'][$channel])) {
+                unset($data['dependencies'][$channel]);
             }
         }
     }
@@ -39668,75 +38744,75 @@ class PEAR_DependencyDB
     function _registerDep(&$data, &$pkg, $dep, $type, $group = false)
     {
         $info = array(
-            'dep' => $dep,
-            'type' => $type,
-            'group' => $group);
+            'dep'   => $dep,
+            'type'  => $type,
+            'group' => $group
+        );
 
-        if (isset($dep['channel'])) {
-            $depchannel = $dep['channel'];
-        } else {
-            $depchannel = '__uri';
-        }
+        $dep  = array_map('strtolower', $dep);
+        $depchannel = isset($dep['channel']) ? $dep['channel'] : '__uri';
         if (!isset($data['dependencies'])) {
             $data['dependencies'] = array();
         }
-        if (!isset($data['dependencies'][strtolower($pkg->getChannel())])) {
-            $data['dependencies'][strtolower($pkg->getChannel())] = array();
+
+        $channel = strtolower($pkg->getChannel());
+        $package = strtolower($pkg->getPackage());
+
+        if (!isset($data['dependencies'][$channel])) {
+            $data['dependencies'][$channel] = array();
         }
-        if (!isset($data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())])) {
-            $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())] = array();
+
+        if (!isset($data['dependencies'][$channel][$package])) {
+            $data['dependencies'][$channel][$package] = array();
         }
-        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())][]
-            = $info;
-        if (isset($data['packages'][strtolower($depchannel)][strtolower($dep['name'])])) {
+
+        $data['dependencies'][$channel][$package][] = $info;
+        if (isset($data['packages'][$depchannel][$dep['name']])) {
             $found = false;
-            foreach ($data['packages'][strtolower($depchannel)][strtolower($dep['name'])]
-                  as $i => $p) {
-                if ($p['channel'] == strtolower($pkg->getChannel()) &&
-                      $p['package'] == strtolower($pkg->getPackage())) {
+            foreach ($data['packages'][$depchannel][$dep['name']] as $i => $p) {
+                if ($p['channel'] == $channel && $p['package'] == $package) {
                     $found = true;
                     break;
                 }
             }
+
             if (!$found) {
-                $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]
-                    = array('channel' => strtolower($pkg->getChannel()),
-                            'package' => strtolower($pkg->getPackage()));
+                $data['packages'][$depchannel][$dep['name']][] = array(
+                    'channel' => $channel,
+                    'package' => $package
+                );
             }
         } else {
             if (!isset($data['packages'])) {
                 $data['packages'] = array();
             }
-            if (!isset($data['packages'][strtolower($depchannel)])) {
-                $data['packages'][strtolower($depchannel)] = array();
+
+            if (!isset($data['packages'][$depchannel])) {
+                $data['packages'][$depchannel] = array();
             }
-            if (!isset($data['packages'][strtolower($depchannel)][strtolower($dep['name'])])) {
-                $data['packages'][strtolower($depchannel)][strtolower($dep['name'])] = array();
+
+            if (!isset($data['packages'][$depchannel][$dep['name']])) {
+                $data['packages'][$depchannel][$dep['name']] = array();
             }
-            $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]
-                = array('channel' => strtolower($pkg->getChannel()),
-                        'package' => strtolower($pkg->getPackage()));
+
+            $data['packages'][$depchannel][$dep['name']][] = array(
+                'channel' => $channel,
+                'package' => $package
+            );
         }
     }
-}
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.7.2/PEAR/Dependency2.php                                                                     100644    1750    1750       150313 11014312742  11130                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                PEAR-1.8.0/PEAR/Dependency2.php                                                                     100664     764     764       142623      100664  10755                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Dependency2, advanced dependency validation
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Dependency2.php,v 1.56 2008/01/03 20:26:35 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Dependency2.php,v 1.59 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -39756,9 +38832,9 @@ require_once 'PEAR/Validate.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -39770,32 +38846,39 @@ class PEAR_Dependency2
      * @var integer
      */
     var $_state;
+
     /**
      * Command-line options to install/upgrade/uninstall commands
      * @param array
      */
     var $_options;
+
     /**
      * @var OS_Guess
      */
     var $_os;
+
     /**
      * @var PEAR_Registry
      */
     var $_registry;
+
     /**
      * @var PEAR_Config
      */
     var $_config;
+
     /**
      * @var PEAR_DependencyDB
      */
     var $_dependencydb;
+
     /**
      * Output of PEAR_Registry::parsedPackageName()
      * @var array
      */
     var $_currentPackage;
+
     /**
      * @param PEAR_Config
      * @param array installation options
@@ -39809,20 +38892,24 @@ class PEAR_Dependency2
         if (!class_exists('PEAR_DependencyDB')) {
             require_once 'PEAR/DependencyDB.php';
         }
+
         if (isset($installoptions['packagingroot'])) {
             // make sure depdb is in the right location
             $config->setInstallRoot($installoptions['packagingroot']);
         }
+
         $this->_registry = &$config->getRegistry();
         $this->_dependencydb = &PEAR_DependencyDB::singleton($config);
         if (isset($installoptions['packagingroot'])) {
             $config->setInstallRoot(false);
         }
+
         $this->_options = $installoptions;
         $this->_state = $state;
         if (!class_exists('OS_Guess')) {
             require_once 'OS/Guess.php';
         }
+
         $this->_os = new OS_Guess;
         $this->_currentPackage = $package;
     }
@@ -39833,25 +38920,30 @@ class PEAR_Dependency2
         if (isset($dep['uri'])) {
             return '';
         }
+
         if (isset($dep['recommended'])) {
             $extra .= 'recommended version ' . $dep['recommended'];
         } else {
             if (isset($dep['min'])) {
                 $extra .= 'version >= ' . $dep['min'];
             }
+
             if (isset($dep['max'])) {
                 if ($extra != ' (') {
                     $extra .= ', ';
                 }
                 $extra .= 'version <= ' . $dep['max'];
             }
+
             if (isset($dep['exclude'])) {
                 if (!is_array($dep['exclude'])) {
                     $dep['exclude'] = array($dep['exclude']);
                 }
+
                 if ($extra != ' (') {
                     $extra .= ', ';
                 }
+
                 $extra .= 'excluded versions: ';
                 foreach ($dep['exclude'] as $i => $exclude) {
                     if ($i) {
@@ -39861,10 +38953,12 @@ class PEAR_Dependency2
                 }
             }
         }
+
         $extra .= ')';
         if ($extra == ' ()') {
             $extra = '';
         }
+
         return $extra;
     }
 
@@ -39892,37 +38986,32 @@ class PEAR_Dependency2
      */
     function validateOsDependency($dep)
     {
-        if ($this->_state != PEAR_VALIDATE_INSTALLING &&
-              $this->_state != PEAR_VALIDATE_DOWNLOADING) {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING && $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
-        if (isset($dep['conflicts'])) {
-            $not = true;
-        } else {
-            $not = false;
-        }
+
         if ($dep['name'] == '*') {
             return true;
         }
+
+        $not = isset($dep['conflicts']) ? true : false;
         switch (strtolower($dep['name'])) {
             case 'windows' :
                 if ($not) {
                     if (strtolower(substr($this->getPHP_OS(), 0, 3)) == 'win') {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Cannot install %s on Windows");
-                        } else {
-                            return $this->warning("warning: Cannot install %s on Windows");
                         }
+
+                        return $this->warning("warning: Cannot install %s on Windows");
                     }
                 } else {
                     if (strtolower(substr($this->getPHP_OS(), 0, 3)) != 'win') {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Can only install %s on Windows");
-                        } else {
-                            return $this->warning("warning: Can only install %s on Windows");
                         }
+
+                        return $this->warning("warning: Can only install %s on Windows");
                     }
                 }
             break;
@@ -39930,23 +39019,19 @@ class PEAR_Dependency2
                 $unices = array('linux', 'freebsd', 'darwin', 'sunos', 'irix', 'hpux', 'aix');
                 if ($not) {
                     if (in_array($this->getSysname(), $unices)) {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Cannot install %s on any Unix system");
-                        } else {
-                            return $this->warning(
-                                "warning: Cannot install %s on any Unix system");
                         }
+
+                        return $this->warning( "warning: Cannot install %s on any Unix system");
                     }
                 } else {
                     if (!in_array($this->getSysname(), $unices)) {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Can only install %s on a Unix system");
-                        } else {
-                            return $this->warning(
-                                "warning: Can only install %s on a Unix system");
                         }
+
+                        return $this->warning("warning: Can only install %s on a Unix system");
                     }
                 }
             break;
@@ -39957,23 +39042,22 @@ class PEAR_Dependency2
                               !isset($this->_options['force'])) {
                             return $this->raiseError('Cannot install %s on ' . $dep['name'] .
                                 ' operating system');
-                        } else {
-                            return $this->warning('warning: Cannot install %s on ' .
-                                $dep['name'] . ' operating system');
                         }
+
+                        return $this->warning('warning: Cannot install %s on ' .
+                            $dep['name'] . ' operating system');
                     }
                 } else {
                     if (strtolower($dep['name']) != strtolower($this->getSysname())) {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError('Cannot install %s on ' .
                                 $this->getSysname() .
                                 ' operating system, can only install on ' . $dep['name']);
-                        } else {
-                            return $this->warning('warning: Cannot install %s on ' .
-                                $this->getSysname() .
-                                ' operating system, can only install on ' . $dep['name']);
                         }
+
+                        return $this->warning('warning: Cannot install %s on ' .
+                            $this->getSysname() .
+                            ' operating system, can only install on ' . $dep['name']);
                     }
                 }
         }
@@ -40000,34 +39084,33 @@ class PEAR_Dependency2
         if ($this->_state != PEAR_VALIDATE_INSTALLING) {
             return true;
         }
-        if (isset($dep['conflicts'])) {
-            $not = true;
-        } else {
-            $not = false;
-        }
+
+        $not = isset($dep['conflicts']) ? true : false;
         if (!$this->matchSignature($dep['pattern'])) {
             if (!$not) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s Architecture dependency failed, does not ' .
                         'match "' . $dep['pattern'] . '"');
-                } else {
-                    return $this->warning('warning: %s Architecture dependency failed, does ' .
-                        'not match "' . $dep['pattern'] . '"');
                 }
+
+                return $this->warning('warning: %s Architecture dependency failed, does ' .
+                    'not match "' . $dep['pattern'] . '"');
             }
+
             return true;
-        } else {
-            if ($not) {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s Architecture dependency failed, required "' .
-                        $dep['pattern'] . '"');
-                } else {
-                    return $this->warning('warning: %s Architecture dependency failed, ' .
-                        'required "' . $dep['pattern'] . '"');
-                }
+        }
+
+        if ($not) {
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s Architecture dependency failed, required "' .
+                    $dep['pattern'] . '"');
             }
-            return true;
+
+            return $this->warning('warning: %s Architecture dependency failed, ' .
+                'required "' . $dep['pattern'] . '"');
         }
+
+        return true;
     }
 
     /**
@@ -40045,9 +39128,9 @@ class PEAR_Dependency2
     {
         if ($name !== null) {
             return phpversion($name);
-        } else {
-            return phpversion();
         }
+
+        return phpversion();
     }
 
     function validateExtensionDependency($dep, $required = true)
@@ -40056,13 +39139,15 @@ class PEAR_Dependency2
               $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
+
         $loaded = $this->extension_loaded($dep['name']);
-        $extra = $this->_getExtraString($dep);
+        $extra  = $this->_getExtraString($dep);
         if (isset($dep['exclude'])) {
             if (!is_array($dep['exclude'])) {
                 $dep['exclude'] = array($dep['exclude']);
             }
         }
+
         if (!isset($dep['min']) && !isset($dep['max']) &&
               !isset($dep['recommended']) && !isset($dep['exclude'])) {
             if ($loaded) {
@@ -40070,121 +39155,129 @@ class PEAR_Dependency2
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s conflicts with PHP extension "' .
                             $dep['name'] . '"' . $extra);
-                    } else {
-                        return $this->warning('warning: %s conflicts with PHP extension "' .
-                            $dep['name'] . '"' . $extra);
                     }
+
+                    return $this->warning('warning: %s conflicts with PHP extension "' .
+                        $dep['name'] . '"' . $extra);
                 }
+
                 return true;
             } else {
                 if (isset($dep['conflicts'])) {
                     return true;
                 }
+
                 if ($required) {
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s requires PHP extension "' .
                             $dep['name'] . '"' . $extra);
-                    } else {
-                        return $this->warning('warning: %s requires PHP extension "' .
-                            $dep['name'] . '"' . $extra);
                     }
-                } else {
-                    return $this->warning('%s can optionally use PHP extension "' .
+
+                    return $this->warning('warning: %s requires PHP extension "' .
                         $dep['name'] . '"' . $extra);
                 }
+
+                return $this->warning('%s can optionally use PHP extension "' .
+                    $dep['name'] . '"' . $extra);
             }
         }
+
         if (!$loaded) {
             if (isset($dep['conflicts'])) {
                 return true;
             }
+
             if (!$required) {
                 return $this->warning('%s can optionally use PHP extension "' .
                     $dep['name'] . '"' . $extra);
-            } else {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
-                        '"' . $extra);
-                }
-                    return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
-                        '"' . $extra);
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
+                    '"' . $extra);
+            }
+
+            return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
+                    '"' . $extra);
         }
+
         $version = (string) $this->phpversion($dep['name']);
         if (empty($version)) {
             $version = '0';
         }
+
         $fail = false;
-        if (isset($dep['min'])) {
-            if (!version_compare($version, $dep['min'], '>=')) {
-                $fail = true;
-            }
+        if (isset($dep['min']) && !version_compare($version, $dep['min'], '>=')) {
+            $fail = true;
         }
-        if (isset($dep['max'])) {
-            if (!version_compare($version, $dep['max'], '<=')) {
-                $fail = true;
-            }
+
+        if (isset($dep['max']) && !version_compare($version, $dep['max'], '<=')) {
+            $fail = true;
         }
+
         if ($fail && !isset($dep['conflicts'])) {
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
                     '"' . $extra . ', installed version is ' . $version);
-            } else {
-                return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
-                    '"' . $extra . ', installed version is ' . $version);
             }
+
+            return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
+                '"' . $extra . ', installed version is ' . $version);
         } elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail && isset($dep['conflicts'])) {
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s conflicts with PHP extension "' .
                     $dep['name'] . '"' . $extra . ', installed version is ' . $version);
-            } else {
-                return $this->warning('warning: %s conflicts with PHP extension "' .
-                    $dep['name'] . '"' . $extra . ', installed version is ' . $version);
             }
+
+            return $this->warning('warning: %s conflicts with PHP extension "' .
+                $dep['name'] . '"' . $extra . ', installed version is ' . $version);
         }
+
         if (isset($dep['exclude'])) {
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($version, $exclude, '==')) {
                     if (isset($dep['conflicts'])) {
                         continue;
                     }
-                    if (!isset($this->_options['nodeps']) &&
-                          !isset($this->_options['force'])) {
+
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s is not compatible with PHP extension "' .
                             $dep['name'] . '" version ' .
                             $exclude);
-                    } else {
-                        return $this->warning('warning: %s is not compatible with PHP extension "' .
-                            $dep['name'] . '" version ' .
-                            $exclude);
                     }
+
+                    return $this->warning('warning: %s is not compatible with PHP extension "' .
+                        $dep['name'] . '" version ' .
+                        $exclude);
                 } elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s conflicts with PHP extension "' .
                             $dep['name'] . '"' . $extra . ', installed version is ' . $version);
-                    } else {
-                        return $this->warning('warning: %s conflicts with PHP extension "' .
-                            $dep['name'] . '"' . $extra . ', installed version is ' . $version);
                     }
+
+                    return $this->warning('warning: %s conflicts with PHP extension "' .
+                        $dep['name'] . '"' . $extra . ', installed version is ' . $version);
                 }
             }
         }
+
         if (isset($dep['recommended'])) {
             if (version_compare($version, $dep['recommended'], '==')) {
                 return true;
-            } else {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
-                        ' version "' . $version . '"' .
-                        ' is not the recommended version "' . $dep['recommended'] .
-                        '", but may be compatible, use --force to install');
-                } else {
-                    return $this->warning('warning: %s dependency: PHP extension ' .
-                        $dep['name'] . ' version "' . $version . '"' .
-                        ' is not the recommended version "' . $dep['recommended'].'"');
-                }
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
+                    ' version "' . $version . '"' .
+                    ' is not the recommended version "' . $dep['recommended'] .
+                    '", but may be compatible, use --force to install');
+            }
+
+            return $this->warning('warning: %s dependency: PHP extension ' .
+                $dep['name'] . ' version "' . $version . '"' .
+                ' is not the recommended version "' . $dep['recommended'].'"');
         }
+
         return true;
     }
 
@@ -40194,50 +39287,54 @@ class PEAR_Dependency2
               $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
+
         $version = $this->phpversion();
-        $extra = $this->_getExtraString($dep);
+        $extra   = $this->_getExtraString($dep);
         if (isset($dep['exclude'])) {
             if (!is_array($dep['exclude'])) {
                 $dep['exclude'] = array($dep['exclude']);
             }
         }
+
         if (isset($dep['min'])) {
             if (!version_compare($version, $dep['min'], '>=')) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s requires PHP' .
                         $extra . ', installed version is ' . $version);
-                } else {
-                    return $this->warning('warning: %s requires PHP' .
-                        $extra . ', installed version is ' . $version);
                 }
+
+                return $this->warning('warning: %s requires PHP' .
+                    $extra . ', installed version is ' . $version);
             }
         }
+
         if (isset($dep['max'])) {
             if (!version_compare($version, $dep['max'], '<=')) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s requires PHP' .
                         $extra . ', installed version is ' . $version);
-                } else {
-                    return $this->warning('warning: %s requires PHP' .
-                        $extra . ', installed version is ' . $version);
                 }
+
+                return $this->warning('warning: %s requires PHP' .
+                    $extra . ', installed version is ' . $version);
             }
         }
+
         if (isset($dep['exclude'])) {
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($version, $exclude, '==')) {
-                    if (!isset($this->_options['nodeps']) &&
-                          !isset($this->_options['force'])) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s is not compatible with PHP version ' .
                             $exclude);
-                    } else {
-                        return $this->warning(
-                            'warning: %s is not compatible with PHP version ' .
-                            $exclude);
                     }
+
+                    return $this->warning(
+                        'warning: %s is not compatible with PHP version ' .
+                        $exclude);
                 }
             }
         }
+
         return true;
     }
 
@@ -40246,7 +39343,7 @@ class PEAR_Dependency2
      */
     function getPEARVersion()
     {
-        return '1.7.2';
+        return '1.8.0';
     }
 
     function validatePearinstallerDependency($dep)
@@ -40258,42 +39355,47 @@ class PEAR_Dependency2
                 $dep['exclude'] = array($dep['exclude']);
             }
         }
+
         if (version_compare($pearversion, $dep['min'], '<')) {
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s requires PEAR Installer' . $extra .
                     ', installed version is ' . $pearversion);
-            } else {
-                return $this->warning('warning: %s requires PEAR Installer' . $extra .
-                    ', installed version is ' . $pearversion);
             }
+
+            return $this->warning('warning: %s requires PEAR Installer' . $extra .
+                ', installed version is ' . $pearversion);
         }
+
         if (isset($dep['max'])) {
             if (version_compare($pearversion, $dep['max'], '>')) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s requires PEAR Installer' . $extra .
                         ', installed version is ' . $pearversion);
-                } else {
-                    return $this->warning('warning: %s requires PEAR Installer' . $extra .
-                        ', installed version is ' . $pearversion);
                 }
+
+                return $this->warning('warning: %s requires PEAR Installer' . $extra .
+                    ', installed version is ' . $pearversion);
             }
         }
+
         if (isset($dep['exclude'])) {
             if (!isset($dep['exclude'][0])) {
                 $dep['exclude'] = array($dep['exclude']);
             }
+
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($exclude, $pearversion, '==')) {
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s is not compatible with PEAR Installer ' .
                             'version ' . $exclude);
-                    } else {
-                        return $this->warning('warning: %s is not compatible with PEAR ' .
-                            'Installer version ' . $exclude);
                     }
+
+                    return $this->warning('warning: %s is not compatible with PEAR ' .
+                        'Installer version ' . $exclude);
                 }
             }
         }
+
         return true;
     }
 
@@ -40316,6 +39418,7 @@ class PEAR_Dependency2
               $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
+
         if (isset($dep['providesextension'])) {
             if ($this->extension_loaded($dep['providesextension'])) {
                 $save = $dep;
@@ -40329,9 +39432,11 @@ class PEAR_Dependency2
                 }
             }
         }
+
         if ($this->_state == PEAR_VALIDATE_INSTALLING) {
             return $this->_validatePackageInstall($dep, $required, $depv1);
         }
+
         if ($this->_state == PEAR_VALIDATE_DOWNLOADING) {
             return $this->_validatePackageDownload($dep, $required, $params, $depv1);
         }
@@ -40343,6 +39448,7 @@ class PEAR_Dependency2
         if (isset($dep['uri'])) {
             $dep['channel'] = '__uri';
         }
+
         $depname = $this->_registry->parsedPackageNameToString($dep, true);
         $found = false;
         foreach ($params as $param) {
@@ -40352,6 +39458,7 @@ class PEAR_Dependency2
                 $found = true;
                 break;
             }
+
             if ($depv1 && $dep['channel'] == 'pear.php.net') {
                 if ($param->isEqual(
                   array('package' => $dep['name'],
@@ -40361,6 +39468,7 @@ class PEAR_Dependency2
                 }
             }
         }
+
         if (!$found && isset($dep['providesextension'])) {
             foreach ($params as $param) {
                 if ($param->isExtension($dep['providesextension'])) {
@@ -40369,6 +39477,7 @@ class PEAR_Dependency2
                 }
             }
         }
+
         if ($found) {
             $version = $param->getVersion();
             $installed = false;
@@ -40393,77 +39502,73 @@ class PEAR_Dependency2
                 }
             }
         }
+
         $extra = $this->_getExtraString($dep);
-        if (isset($dep['exclude'])) {
-            if (!is_array($dep['exclude'])) {
-                $dep['exclude'] = array($dep['exclude']);
-            }
+        if (isset($dep['exclude']) && !is_array($dep['exclude'])) {
+            $dep['exclude'] = array($dep['exclude']);
         }
+
         if (!isset($dep['min']) && !isset($dep['max']) &&
-              !isset($dep['recommended']) && !isset($dep['exclude'])) {
+              !isset($dep['recommended']) && !isset($dep['exclude'])
+        ) {
             if ($installed || $downloaded) {
                 $installed = $installed ? 'installed' : 'downloaded';
                 if (isset($dep['conflicts'])) {
+                    $rest = '';
                     if ($version) {
                         $rest = ", $installed version is " . $version;
-                    } else {
-                        $rest = '';
                     }
+
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                        return $this->raiseError('%s conflicts with package "' . $depname . '"' .
-                            $extra . $rest);
-                    } else {
-                        return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
-                            $extra . $rest);
+                        return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra . $rest);
                     }
+
+                    return $this->warning('warning: %s conflicts with package "' . $depname . '"' . $extra . $rest);
                 }
+
                 return true;
-            } else {
-                if (isset($dep['conflicts'])) {
-                    return true;
-                }
-                if ($required) {
-                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                        return $this->raiseError('%s requires package "' . $depname . '"' .
-                            $extra);
-                    } else {
-                        return $this->warning('warning: %s requires package "' . $depname . '"' .
-                            $extra);
-                    }
-                } else {
-                    return $this->warning('%s can optionally use package "' . $depname . '"' .
-                        $extra);
+            }
+
+            if (isset($dep['conflicts'])) {
+                return true;
+            }
+
+            if ($required) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires package "' . $depname . '"' . $extra);
                 }
+
+                return $this->warning('warning: %s requires package "' . $depname . '"' . $extra);
             }
+
+            return $this->warning('%s can optionally use package "' . $depname . '"' . $extra);
         }
+
         if (!$installed && !$downloaded) {
             if (isset($dep['conflicts'])) {
                 return true;
             }
+
             if ($required) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s requires package "' . $depname . '"' .
-                        $extra);
-                } else {
-                    return $this->warning('warning: %s requires package "' . $depname . '"' .
-                        $extra);
+                    return $this->raiseError('%s requires package "' . $depname . '"' . $extra);
                 }
-            } else {
-                return $this->warning('%s can optionally use package "' . $depname . '"' .
-                    $extra);
+
+                return $this->warning('warning: %s requires package "' . $depname . '"' . $extra);
             }
+
+            return $this->warning('%s can optionally use package "' . $depname . '"' . $extra);
         }
+
         $fail = false;
-        if (isset($dep['min'])) {
-            if (version_compare($version, $dep['min'], '<')) {
-                $fail = true;
-            }
+        if (isset($dep['min']) && version_compare($version, $dep['min'], '<')) {
+            $fail = true;
         }
-        if (isset($dep['max'])) {
-            if (version_compare($version, $dep['max'], '>')) {
-                $fail = true;
-            }
+
+        if (isset($dep['max']) && version_compare($version, $dep['max'], '>')) {
+            $fail = true;
         }
+
         if ($fail && !isset($dep['conflicts'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             $dep['package'] = $dep['name'];
@@ -40471,92 +39576,98 @@ class PEAR_Dependency2
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s requires package "' . $depname . '"' .
                     $extra . ", $installed version is " . $version);
-            } else {
-                return $this->warning('warning: %s requires package "' . $depname . '"' .
-                    $extra . ", $installed version is " . $version);
             }
+
+            return $this->warning('warning: %s requires package "' . $depname . '"' .
+                $extra . ", $installed version is " . $version);
         } elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail &&
               isset($dep['conflicts']) && !isset($dep['exclude'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra .
                     ", $installed version is " . $version);
-            } else {
-                return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
-                    $extra . ", $installed version is " . $version);
             }
+
+            return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                $extra . ", $installed version is " . $version);
         }
+
         if (isset($dep['exclude'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($version, $exclude, '==') && !isset($dep['conflicts'])) {
                     if (!isset($this->_options['nodeps']) &&
-                          !isset($this->_options['force'])) {
+                          !isset($this->_options['force'])
+                    ) {
                         return $this->raiseError('%s is not compatible with ' .
                             $installed . ' package "' .
                             $depname . '" version ' .
                             $exclude);
-                    } else {
-                        return $this->warning('warning: %s is not compatible with ' .
-                            $installed . ' package "' .
-                            $depname . '" version ' .
-                            $exclude);
                     }
+
+                    return $this->warning('warning: %s is not compatible with ' .
+                        $installed . ' package "' .
+                        $depname . '" version ' .
+                        $exclude);
                 } elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
                     $installed = $installed ? 'installed' : 'downloaded';
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s conflicts with package "' . $depname . '"' .
                             $extra . ", $installed version is " . $version);
-                    } else {
-                        return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
-                            $extra . ", $installed version is " . $version);
                     }
+
+                    return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                        $extra . ", $installed version is " . $version);
                 }
             }
         }
+
         if (isset($dep['recommended'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             if (version_compare($version, $dep['recommended'], '==')) {
                 return true;
-            } else {
-                if (!$found && $installed) {
-                    $param = $this->_registry->getPackage($dep['name'], $dep['channel']);
+            }
+
+            if (!$found && $installed) {
+                $param = $this->_registry->getPackage($dep['name'], $dep['channel']);
+            }
+
+            if ($param) {
+                $found = false;
+                foreach ($params as $parent) {
+                    if ($parent->isEqual($this->_currentPackage)) {
+                        $found = true;
+                        break;
+                    }
                 }
-                if ($param) {
-                    $found = false;
-                    foreach ($params as $parent) {
-                        if ($parent->isEqual($this->_currentPackage)) {
-                            $found = true;
-                            break;
-                        }
+
+                if ($found) {
+                    if ($param->isCompatible($parent)) {
+                        return true;
                     }
-                    if ($found) {
-                        if ($param->isCompatible($parent)) {
-                            return true;
-                        }
-                    } else { // this is for validPackage() calls
-                        $parent = $this->_registry->getPackage($this->_currentPackage['package'],
-                            $this->_currentPackage['channel']);
-                        if ($parent !== null) {
-                            if ($param->isCompatible($parent)) {
-                                return true;
-                            }
-                        }
+                } else { // this is for validPackage() calls
+                    $parent = $this->_registry->getPackage($this->_currentPackage['package'],
+                        $this->_currentPackage['channel']);
+                    if ($parent !== null && $param->isCompatible($parent)) {
+                        return true;
                     }
                 }
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
-                      !isset($this->_options['loose'])) {
-                    return $this->raiseError('%s dependency package "' . $depname .
-                        '" ' . $installed . ' version ' . $version . 
-                        ' is not the recommended version ' . $dep['recommended'] .
-                        ', but may be compatible, use --force to install');
-                } else {
-                    return $this->warning('warning: %s dependency package "' . $depname .
-                        '" ' . $installed . ' version ' . $version .
-                        ' is not the recommended version ' . $dep['recommended']);
-                }
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
+                  !isset($this->_options['loose'])
+            ) {
+                return $this->raiseError('%s dependency package "' . $depname .
+                    '" ' . $installed . ' version ' . $version .
+                    ' is not the recommended version ' . $dep['recommended'] .
+                    ', but may be compatible, use --force to install');
+            }
+
+            return $this->warning('warning: %s dependency package "' . $depname .
+                '" ' . $installed . ' version ' . $version .
+                ' is not the recommended version ' . $dep['recommended']);
         }
+
         return true;
     }
 
@@ -40576,6 +39687,7 @@ class PEAR_Dependency2
         if (PEAR::isError($this->_dependencydb)) {
             return $this->_dependencydb;
         }
+
         $params = array();
         // construct an array of "downloaded" packages to fool the package dependency checker
         // into using these to validate uninstalls of circular dependencies
@@ -40588,6 +39700,7 @@ class PEAR_Dependency2
             $dp->setPackageFile($downloaded[$i]);
             $params[$i] = &$dp;
         }
+
         // check cache
         $memyselfandI = strtolower($this->_currentPackage['channel']) . '/' .
             strtolower($this->_currentPackage['package']);
@@ -40598,6 +39711,7 @@ class PEAR_Dependency2
                     $dl->log(0, $warning[0]);
                 }
             }
+
             if (isset($badpackages[$memyselfandI]['errors'])) {
                 foreach ($badpackages[$memyselfandI]['errors'] as $error) {
                     if (is_array($error)) {
@@ -40606,23 +39720,29 @@ class PEAR_Dependency2
                         $dl->log(0, $error->getMessage());
                     }
                 }
+
                 if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
                     return $this->warning(
                         'warning: %s should not be uninstalled, other installed packages depend ' .
                         'on this package');
-                } else {
-                    return $this->raiseError(
-                        '%s cannot be uninstalled, other installed packages depend on this package');
                 }
+
+                return $this->raiseError(
+                    '%s cannot be uninstalled, other installed packages depend on this package');
             }
+
             return true;
         }
+
         // first, list the immediate parents of each package to be uninstalled
         $perpackagelist = array();
         $allparents = array();
         foreach ($params as $i => $param) {
-            $a = array('channel' => strtolower($param->getChannel()),
-                      'package' => strtolower($param->getPackage()));
+            $a = array(
+                'channel' => strtolower($param->getChannel()),
+                'package' => strtolower($param->getPackage())
+            );
+
             $deps = $this->_dependencydb->getDependentPackages($a);
             if ($deps) {
                 foreach ($deps as $d) {
@@ -40649,6 +39769,7 @@ class PEAR_Dependency2
                 }
             }
         }
+
         // next, remove any packages from the parents list that are not installed
         $remove = array();
         foreach ($allparents as $parent => $d1) {
@@ -40659,6 +39780,7 @@ class PEAR_Dependency2
                 $remove[$parent] = true;
             }
         }
+
         // next remove any packages from the parents list that are not passed in for
         // uninstallation
         foreach ($allparents as $parent => $d1) {
@@ -40673,6 +39795,7 @@ class PEAR_Dependency2
                 $remove[$parent] = true;
             }
         }
+
         // remove all packages whose dependencies fail
         // save which ones failed for error reporting
         $badchildren = array();
@@ -40682,6 +39805,7 @@ class PEAR_Dependency2
                 if (!isset($allparents[$package])) {
                     continue;
                 }
+
                 foreach ($allparents[$package] as $kid => $d1) {
                     foreach ($d1 as $depinfo) {
                         if ($depinfo[1]['type'] != 'optional') {
@@ -40701,6 +39825,7 @@ class PEAR_Dependency2
                 }
             }
         } while ($fail);
+
         // next, construct the list of packages that can't be uninstalled
         $badpackages = array();
         $save = $this->_currentPackage;
@@ -40709,6 +39834,7 @@ class PEAR_Dependency2
                 if (!isset($remove[$parent[0]])) {
                     continue;
                 }
+
                 $packagename = $this->_registry->parsePackageName($parent[0]);
                 $packagename['channel'] = $this->_registry->channelAlias($packagename['channel']);
                 $pa = $this->_registry->getPackage($packagename['package'], $packagename['channel']);
@@ -40734,7 +39860,8 @@ class PEAR_Dependency2
                 }
             }
         }
-        $this->_currentPackage = $save;
+
+        $this->_currentPackage          = $save;
         $dl->___uninstall_package_cache = $badpackages;
         if (isset($badpackages[$memyselfandI])) {
             if (isset($badpackages[$memyselfandI]['warnings'])) {
@@ -40742,6 +39869,7 @@ class PEAR_Dependency2
                     $dl->log(0, $warning[0]);
                 }
             }
+
             if (isset($badpackages[$memyselfandI]['errors'])) {
                 foreach ($badpackages[$memyselfandI]['errors'] as $error) {
                     if (is_array($error)) {
@@ -40750,81 +39878,81 @@ class PEAR_Dependency2
                         $dl->log(0, $error->getMessage());
                     }
                 }
+
                 if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
                     return $this->warning(
                         'warning: %s should not be uninstalled, other installed packages depend ' .
                         'on this package');
-                } else {
-                    return $this->raiseError(
-                        '%s cannot be uninstalled, other installed packages depend on this package');
                 }
+
+                return $this->raiseError(
+                    '%s cannot be uninstalled, other installed packages depend on this package');
             }
         }
+
         return true;
     }
 
     function _validatePackageUninstall($dep, $required, $dl)
     {
         $depname = $this->_registry->parsedPackageNameToString($dep, true);
-        $version = $this->_registry->packageinfo($dep['package'], 'version',
-            $dep['channel']);
+        $version = $this->_registry->packageinfo($dep['package'], 'version', $dep['channel']);
         if (!$version) {
             return true;
         }
+
         $extra = $this->_getExtraString($dep);
-        if (isset($dep['exclude'])) {
-            if (!is_array($dep['exclude'])) {
-                $dep['exclude'] = array($dep['exclude']);
-            }
+        if (isset($dep['exclude']) && !is_array($dep['exclude'])) {
+            $dep['exclude'] = array($dep['exclude']);
         }
+
         if (isset($dep['conflicts'])) {
             return true; // uninstall OK - these packages conflict (probably installed with --force)
         }
+
         if (!isset($dep['min']) && !isset($dep['max'])) {
-            if ($required) {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('"' . $depname . '" is required by ' .
-                        'installed package %s' . $extra);
-                } else {
-                    return $this->warning('warning: "' . $depname . '" is required by ' .
-                        'installed package %s' . $extra);
-                }
-            } else {
+            if (!$required) {
                 return $this->warning('"' . $depname . '" can be optionally used by ' .
                         'installed package %s' . $extra);
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('"' . $depname . '" is required by ' .
+                    'installed package %s' . $extra);
+            }
+
+            return $this->warning('warning: "' . $depname . '" is required by ' .
+                'installed package %s' . $extra);
         }
+
         $fail = false;
-        if (isset($dep['min'])) {
-            if (version_compare($version, $dep['min'], '>=')) {
-                $fail = true;
-            }
+        if (isset($dep['min']) && version_compare($version, $dep['min'], '>=')) {
+            $fail = true;
         }
-        if (isset($dep['max'])) {
-            if (version_compare($version, $dep['max'], '<=')) {
-                $fail = true;
-            }
+
+        if (isset($dep['max']) && version_compare($version, $dep['max'], '<=')) {
+            $fail = true;
         }
+
         // we re-use this variable, preserve the original value
         $saverequired = $required;
-        if ($required) {
-            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                return $this->raiseError($depname . $extra . ' is required by installed package' .
-                    ' "%s"');
-            } else {
-                return $this->raiseError('warning: ' . $depname . $extra .
-                    ' is required by installed package "%s"');
-            }
-        } else {
+        if (!$required) {
             return $this->warning($depname . $extra . ' can be optionally used by installed package' .
                     ' "%s"');
         }
-        return true;
+
+        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+            return $this->raiseError($depname . $extra . ' is required by installed package' .
+                ' "%s"');
+        }
+
+        return $this->raiseError('warning: ' . $depname . $extra .
+            ' is required by installed package "%s"');
     }
 
     /**
      * validate a downloaded package against installed packages
-     * 
+     *
      * As of PEAR 1.4.3, this will only validate
      *
      * @param array|PEAR_Downloader_Package|PEAR_PackageFile_v1|PEAR_PackageFile_v2
@@ -40842,17 +39970,20 @@ class PEAR_Dependency2
         } else {
             $deps = $this->_dependencydb->getDependentPackageDependencies($pkg);
         }
+
         $fail = false;
         if ($deps) {
             if (!class_exists('PEAR_Downloader_Package')) {
                 require_once 'PEAR/Downloader/Package.php';
             }
+
             $dp = &new PEAR_Downloader_Package($dl);
             if (is_object($pkg)) {
                 $dp->setPackageFile($pkg);
             } else {
                 $dp->setDownloadURL($pkg);
             }
+
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             foreach ($deps as $channel => $info) {
                 foreach ($info as $package => $ds) {
@@ -40868,6 +39999,7 @@ class PEAR_Dependency2
                             continue 2; // jump to next package
                         }
                     }
+
                     foreach ($ds as $d) {
                         $checker = &new PEAR_Dependency2($this->_config, $this->_options,
                             array('channel' => $channel, 'package' => $package), $this->_state);
@@ -40885,10 +40017,12 @@ class PEAR_Dependency2
             }
             PEAR::popErrorHandling();
         }
+
         if ($fail) {
             return $this->raiseError(
                 '%s cannot be installed, conflicts with installed packages');
         }
+
         return true;
     }
 
@@ -40900,10 +40034,12 @@ class PEAR_Dependency2
         if (!isset($dep['optional'])) {
             $dep['optional'] = 'no';
         }
+
         list($newdep, $type) = $this->normalizeDep($dep);
         if (!$newdep) {
             return $this->raiseError("Invalid Dependency");
         }
+
         if (method_exists($this, "validate{$type}Dependency")) {
             return $this->{"validate{$type}Dependency"}($newdep, $dep['optional'] == 'no',
                 $params, true);
@@ -40921,11 +40057,13 @@ class PEAR_Dependency2
             'os' => 'Os',
             'php' => 'Php'
         );
-        if (isset($types[$dep['type']])) {
-            $type = $types[$dep['type']];
-        } else {
+
+        if (!isset($types[$dep['type']])) {
             return array(false, false);
         }
+
+        $type = $types[$dep['type']];
+
         $newdep = array();
         switch ($type) {
             case 'Package' :
@@ -40935,6 +40073,7 @@ class PEAR_Dependency2
                 $newdep['name'] = $dep['name'];
             break;
         }
+
         $dep['rel'] = PEAR_Dependency2::signOperator($dep['rel']);
         switch ($dep['rel']) {
             case 'has' :
@@ -40970,8 +40109,9 @@ class PEAR_Dependency2
         }
         if ($type == 'Php') {
             if (!isset($newdep['min'])) {
-                $newdep['min'] = '4.2.0';
+                $newdep['min'] = '4.4.0';
             }
+
             if (!isset($newdep['max'])) {
                 $newdep['max'] = '6.0.0';
             }
@@ -41007,6 +40147,7 @@ class PEAR_Dependency2
         if (isset($this->_options['ignore-errors'])) {
             return $this->warning($msg);
         }
+
         return PEAR::raiseError(sprintf($msg, $this->_registry->parsedPackageNameToString(
             $this->_currentPackage, true)));
     }
@@ -41016,28 +40157,21 @@ class PEAR_Dependency2
         return array(sprintf($msg, $this->_registry->parsedPackageNameToString(
             $this->_currentPackage, true)));
     }
-}
-?>                                                                                                                                                                                                                                                                                                                     PEAR-1.7.2/PEAR/Downloader.php                                                                      100644    1750    1750       210776 11014312742  11100                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                             PEAR-1.8.0/PEAR/Downloader.php                                                                      100664     764     764       202344      100664  10710                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Downloader, the PEAR Installer's download utility class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Downloader.php,v 1.138 2008/04/11 01:16:40 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Downloader.php,v 1.159 2009/03/08 04:01:08 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.0
  */
@@ -41062,9 +40196,9 @@ define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.0
  */
@@ -41077,12 +40211,6 @@ class PEAR_Downloader extends PEAR_Common
     var $_registry;
 
     /**
-     * @var PEAR_Remote
-     * @access private
-     */
-    var $_remote;
-
-    /**
      * Preferred Installation State (snapshot, devel, alpha, beta, stable)
      * @var string|null
      * @access private
@@ -41193,7 +40321,6 @@ class PEAR_Downloader extends PEAR_Common
             $this->config->setInstallRoot($this->_options['installroot']);
         }
         $this->_registry = &$config->getRegistry();
-        $this->_remote = &$config->getRemote();
 
         if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
             $this->_installed = $this->_registry->listAllPackages();
@@ -41221,16 +40348,26 @@ class PEAR_Downloader extends PEAR_Common
         if (!class_exists('System')) {
             require_once 'System.php';
         }
-        $a = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui,
-            System::mktemp(array('-d')), $callback, false);
+
+        $tmp = System::mktemp(array('-d'));
+        $a   = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false);
         PEAR::popErrorHandling();
         if (PEAR::isError($a)) {
-            return false;
+            // Attempt to fallback to https automatically.
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $this->log(1, 'Attempting fallback to https instead of http on channel "' . $channel . '"...');
+            $a = $this->downloadHttp('https://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($a)) {
+                return false;
+            }
         }
+
         list($a, $lastmodified) = $a;
         if (!class_exists('PEAR_ChannelFile')) {
             require_once 'PEAR/ChannelFile.php';
         }
+
         $b = new PEAR_ChannelFile;
         if ($b->fromXmlFile($a)) {
             unlink($a);
@@ -41240,11 +40377,14 @@ class PEAR_Downloader extends PEAR_Common
                 if ($b->getName() == $this->_registry->channelName($b->getAlias())) {
                     $alias = $b->getAlias();
                 }
+
                 $this->log(1, 'Auto-discovered channel "' . $channel .
                     '", alias "' . $alias . '", adding to registry');
             }
+
             return true;
         }
+
         unlink($a);
         return false;
     }
@@ -41285,12 +40425,11 @@ class PEAR_Downloader extends PEAR_Common
             $a = array();
             return $a;
         }
+
         if (!isset($this->_registry)) {
             $this->_registry = &$this->config->getRegistry();
         }
-        if (!isset($this->_remote)) {
-            $this->_remote = &$this->config->getRemote();
-        }
+
         $channelschecked = array();
         // convert all parameters into PEAR_Downloader_Package objects
         foreach ($params as $i => $param) {
@@ -41302,23 +40441,30 @@ class PEAR_Downloader extends PEAR_Common
                 // skip parameters that were missed by preferred_state
                 continue;
             }
+
             if (PEAR::isError($err)) {
-                if (!isset($this->_options['soft'])) {
+                if (!isset($this->_options['soft']) && $err->getMessage() !== '') {
                     $this->log(0, $err->getMessage());
                 }
+
                 $params[$i] = false;
                 if (is_object($param)) {
                     $param = $param->getChannel() . '/' . $param->getPackage();
                 }
-                $this->pushError('Package "' . $param . '" is not valid',
-                    PEAR_INSTALLER_SKIPPED);
+
+                if (!isset($this->_options['soft'])) {
+                    $this->log(2, 'Package "' . $param . '" is not valid');
+                }
+
+                // Message logged above in a specific verbose mode, passing null to not show up on CLI
+                $this->pushError(null, PEAR_INSTALLER_SKIPPED);
             } else {
                 do {
                     if ($params[$i] && $params[$i]->getType() == 'local') {
-                        // bug #7090
-                        // skip channel.xml check for local packages
+                        // bug #7090 skip channel.xml check for local packages
                         break;
                     }
+
                     if ($params[$i] && !isset($channelschecked[$params[$i]->getChannel()]) &&
                           !isset($this->_options['offline'])) {
                         $channelschecked[$params[$i]->getChannel()] = true;
@@ -41326,15 +40472,18 @@ class PEAR_Downloader extends PEAR_Common
                         if (!class_exists('System')) {
                             require_once 'System.php';
                         }
+
                         $curchannel = &$this->_registry->getChannel($params[$i]->getChannel());
                         if (PEAR::isError($curchannel)) {
                             PEAR::staticPopErrorHandling();
                             return $this->raiseError($curchannel);
                         }
+
                         if (PEAR::isError($dir = $this->getDownloadDir())) {
                             PEAR::staticPopErrorHandling();
                             break;
                         }
+
                         $mirror = $this->config->get('preferred_mirror', null,
                                                      $params[$i]->getChannel());
                         $a = $this->downloadHttp('http://' . $mirror .
@@ -41342,13 +40491,22 @@ class PEAR_Downloader extends PEAR_Common
 
                         PEAR::staticPopErrorHandling();
                         if (PEAR::isError($a) || !$a) {
-                            break;
+                            // Attempt fallback to https automatically
+                            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                            $a = $this->downloadHttp('https://' . $mirror .
+                                '/channel.xml', $this->ui, $dir, null, $curchannel->lastModified());
+
+                            PEAR::staticPopErrorHandling();
+                            if (PEAR::isError($a) || !$a) {
+                                break;
+                            }
                         }
                         $this->log(0, 'WARNING: channel "' . $params[$i]->getChannel() . '" has ' .
-                            'updated its protocols, use "channel-update ' . $params[$i]->getChannel() .
+                            'updated its protocols, use "' . PEAR_RUNTYPE . ' channel-update ' . $params[$i]->getChannel() .
                             '" to update');
                     }
                 } while (false);
+
                 if ($params[$i] && !isset($this->_options['downloadonly'])) {
                     if (isset($this->_options['packagingroot'])) {
                         $checkdir = $this->_prependPath(
@@ -41358,12 +40516,15 @@ class PEAR_Downloader extends PEAR_Common
                         $checkdir = $this->config->get('php_dir',
                             null, $params[$i]->getChannel());
                     }
+
                     while ($checkdir && $checkdir != '/' && !file_exists($checkdir)) {
                         $checkdir = dirname($checkdir);
                     }
+
                     if ($checkdir == '.') {
                         $checkdir = '/';
                     }
+
                     if (!is_writeable($checkdir)) {
                         return PEAR::raiseError('Cannot install, php_dir for channel "' .
                             $params[$i]->getChannel() . '" is not writeable by the current user');
@@ -41371,12 +40532,14 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         unset($channelschecked);
         PEAR_Downloader_Package::removeDuplicates($params);
         if (!count($params)) {
             $a = array();
             return $a;
         }
+
         if (!isset($this->_options['nodeps']) && !isset($this->_options['offline'])) {
             $reverify = true;
             while ($reverify) {
@@ -41398,13 +40561,16 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         if (isset($this->_options['offline'])) {
             $this->log(3, 'Skipping dependency download check, --offline specified');
         }
+
         if (!count($params)) {
             $a = array();
             return $a;
         }
+
         while (PEAR_Downloader_Package::mergeDependencies($params));
         PEAR_Downloader_Package::removeDuplicates($params, true);
         $errorparams = array();
@@ -41418,12 +40584,14 @@ class PEAR_Downloader extends PEAR_Common
                 return $a;
             }
         }
+
         PEAR_Downloader_Package::removeInstalled($params);
         if (!count($params)) {
             $this->pushError('No valid packages found', PEAR_INSTALLER_FAILED);
             $a = array();
             return $a;
         }
+
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
         $err = $this->analyzeDependencies($params);
         PEAR::popErrorHandling();
@@ -41432,11 +40600,13 @@ class PEAR_Downloader extends PEAR_Common
             $a = array();
             return $a;
         }
+
         $ret = array();
         $newparams = array();
         if (isset($this->_options['pretend'])) {
             return $params;
         }
+
         $somefailed = false;
         foreach ($params as $i => $package) {
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
@@ -41453,11 +40623,15 @@ class PEAR_Downloader extends PEAR_Common
                 $somefailed = true;
                 continue;
             }
+
             $newparams[] = &$params[$i];
-            $ret[] = array('file' => $pf->getArchiveFile(),
-                                   'info' => &$pf,
-                                   'pkg' => $pf->getPackage());
+            $ret[] = array(
+                'file' => $pf->getArchiveFile(),
+                'info' => &$pf,
+                'pkg'  => $pf->getPackage()
+            );
         }
+
         if ($somefailed) {
             // remove params that did not download successfully
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
@@ -41469,6 +40643,7 @@ class PEAR_Downloader extends PEAR_Common
                 return $a;
             }
         }
+
         $this->_downloadedPackages = $ret;
         return $newparams;
     }
@@ -41482,8 +40657,9 @@ class PEAR_Downloader extends PEAR_Common
         if (isset($this->_options['downloadonly'])) {
             return;
         }
+
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $redo = true;
+        $redo  = true;
         $reset = false;
         while ($redo) {
             $redo = false;
@@ -41492,50 +40668,50 @@ class PEAR_Downloader extends PEAR_Common
                 if (!$deps) {
                     $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),
                         $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);
-                    if ($param->getType() == 'xmlrpc') {
-                        $send = $param->getDownloadURL();
-                    } else {
-                        $send = $param->getPackageFile();
-                    }
+                    $send = $param->getPackageFile();
+
                     $installcheck = $depchecker->validatePackage($send, $this, $params);
                     if (PEAR::isError($installcheck)) {
                         if (!isset($this->_options['soft'])) {
                             $this->log(0, $installcheck->getMessage());
                         }
-                        $hasfailed = true;
+                        $hasfailed  = true;
                         $params[$i] = false;
-                        $reset = true;
-                        $redo = true;
-                        $failed = false;
+                        $reset      = true;
+                        $redo       = true;
+                        $failed     = false;
                         PEAR_Downloader_Package::removeDuplicates($params);
                         continue 2;
                     }
                     continue;
                 }
+
                 if (!$reset && $param->alreadyValidated() && !$force) {
                     continue;
                 }
+
                 if (count($deps)) {
                     $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),
                         $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);
-                    if ($param->getType() == 'xmlrpc') {
+                    $send = $param->getPackageFile();
+                    if ($send === null) {
                         $send = $param->getDownloadURL();
-                    } else {
-                        $send = $param->getPackageFile();
                     }
+
                     $installcheck = $depchecker->validatePackage($send, $this, $params);
                     if (PEAR::isError($installcheck)) {
                         if (!isset($this->_options['soft'])) {
                             $this->log(0, $installcheck->getMessage());
                         }
-                        $hasfailed = true;
+                        $hasfailed  = true;
                         $params[$i] = false;
-                        $reset = true;
-                        $redo = true;
-                        $failed = false;
+                        $reset      = true;
+                        $redo       = true;
+                        $failed     = false;
                         PEAR_Downloader_Package::removeDuplicates($params);
                         continue 2;
                     }
+
                     $failed = false;
                     if (isset($deps['required'])) {
                         foreach ($deps['required'] as $type => $dep) {
@@ -41570,6 +40746,7 @@ class PEAR_Downloader extends PEAR_Common
                                 }
                             }
                         }
+
                         if (isset($deps['optional'])) {
                             foreach ($deps['optional'] as $type => $dep) {
                                 if (!isset($dep[0])) {
@@ -41603,11 +40780,13 @@ class PEAR_Downloader extends PEAR_Common
                                 }
                             }
                         }
+
                         $groupname = $param->getGroup();
                         if (isset($deps['group']) && $groupname) {
                             if (!isset($deps['group'][0])) {
                                 $deps['group'] = array($deps['group']);
                             }
+
                             $found = false;
                             foreach ($deps['group'] as $group) {
                                 if ($group['attribs']['name'] == $groupname) {
@@ -41615,6 +40794,7 @@ class PEAR_Downloader extends PEAR_Common
                                     break;
                                 }
                             }
+
                             if ($found) {
                                 unset($group['attribs']);
                                 foreach ($group as $type => $dep) {
@@ -41666,12 +40846,13 @@ class PEAR_Downloader extends PEAR_Common
                     }
                     $params[$i]->setValidated();
                 }
+
                 if ($failed) {
-                    $hasfailed = true;
+                    $hasfailed  = true;
                     $params[$i] = false;
-                    $reset = true;
-                    $redo = true;
-                    $failed = false;
+                    $reset      = true;
+                    $redo       = true;
+                    $failed     = false;
                     PEAR_Downloader_Package::removeDuplicates($params);
                     continue 2;
                 }
@@ -41794,152 +40975,124 @@ class PEAR_Downloader extends PEAR_Common
         $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');
         if (!$this->_registry->channelExists($parr['channel'])) {
             do {
-                if ($this->config->get('auto_discover')) {
-                    if ($this->discover($parr['channel'])) {
-                        break;
-                    }
+                if ($this->config->get('auto_discover') && $this->discover($parr['channel'])) {
+                    break;
                 }
+
                 $this->configSet('default_channel', $curchannel);
-                return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);
+                return PEAR::raiseError('Unknown remote channel: ' . $parr['channel']);
             } while (false);
         }
+
         $chan = &$this->_registry->getChannel($parr['channel']);
         if (PEAR::isError($chan)) {
             return $chan;
         }
+
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $version = $this->_registry->packageInfo($parr['package'], 'version',
-            $parr['channel']);
+        $version   = $this->_registry->packageInfo($parr['package'], 'version', $parr['channel']);
+        $stability = $this->_registry->packageInfo($parr['package'], 'stability', $parr['channel']);
+        // package is installed - use the installed release stability level
+        if (!isset($parr['state']) && $stability !== null) {
+            $state = $stability['release'];
+        }
         PEAR::staticPopErrorHandling();
         $base2 = false;
-        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
-              (($base2 = $chan->getBaseURL('REST1.3', $this->config->get('preferred_mirror'))) ||
-              ($base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))))) {
-            if ($base2) {
-                $rest = &$this->config->getREST('1.3', $this->_options);
-                $base = $base2;
-            } else {
-                $rest = &$this->config->getREST('1.0', $this->_options);
-            }
-            if (!isset($parr['version']) && !isset($parr['state']) && $version
-                  && !PEAR::isError($version)
-                  && !isset($this->_options['downloadonly'])) {
-                $url = $rest->getDownloadURL($base, $parr, $state, $version, $chan->getName());
-            } else {
-                $url = $rest->getDownloadURL($base, $parr, $state, false, $chan->getName());
-            }
-            if (PEAR::isError($url)) {
-                $this->configSet('default_channel', $curchannel);
-                return $url;
-            }
-            if ($parr['channel'] != $curchannel) {
-                $this->configSet('default_channel', $curchannel);
-            }
-            if (!is_array($url)) {
-                return $url;
-            }
-            $url['raw'] = false; // no checking is necessary for REST
-            if (!is_array($url['info'])) {
-                return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
-                    'this should never happen');
-            }
-            if (!isset($this->_options['force']) &&
-                  !isset($this->_options['downloadonly']) &&
-                  $version &&
-                  !PEAR::isError($version) &&
-                  !isset($parr['group'])) {
-                if (version_compare($version, $url['version'], '>=')) {
-                    return PEAR::raiseError($this->_registry->parsedPackageNameToString(
-                        $parr, true) . ' is already installed and is newer than detected ' .
-                        'release version ' . $url['version'], -976);
-                }
-            }
-            if (isset($url['info']['required']) || $url['compatible']) {
-                require_once 'PEAR/PackageFile/v2.php';
-                $pf = new PEAR_PackageFile_v2;
-                $pf->setRawChannel($parr['channel']);
-                if ($url['compatible']) {
-                    $pf->setRawCompatible($url['compatible']);
-                }
-            } else {
-                require_once 'PEAR/PackageFile/v1.php';
-                $pf = new PEAR_PackageFile_v1;
-            }
-            $pf->setRawPackage($url['package']);
-            $pf->setDeps($url['info']);
-            if ($url['compatible']) {
-                $pf->setCompatible($url['compatible']);
-            }
-            $pf->setRawState($url['stability']);
-            $url['info'] = &$pf;
-            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
-                $ext = '.tar';
-            } else {
-                $ext = '.tgz';
-            }
-            if (is_array($url)) {
-                if (isset($url['url'])) {
-                    $url['url'] .= $ext;
-                }
-            }
-            return $url;
-        } elseif ($chan->supports('xmlrpc', 'package.getDownloadURL', false, '1.1')) {
-            // don't install with the old version information unless we're doing a plain
-            // vanilla simple installation.  If the user says to install a particular
-            // version or state, ignore the current installed version
-            if (!isset($parr['version']) && !isset($parr['state']) && $version
-                  && !isset($this->_options['downloadonly'])) {
-                $url = $this->_remote->call('package.getDownloadURL', $parr, $state, $version);
-            } else {
-                $url = $this->_remote->call('package.getDownloadURL', $parr, $state);
-            }
+
+        $preferred_mirror = $this->config->get('preferred_mirror');
+        if (!$chan->supportsREST($preferred_mirror) ||
+              (
+               !($base2 = $chan->getBaseURL('REST1.3', $preferred_mirror))
+               &&
+               !($base = $chan->getBaseURL('REST1.0', $preferred_mirror))
+              )
+        ) {
+            return $this->raiseError($parr['channel'] . ' is using a unsupported protocal - This should never happen.');
+        }
+
+        if ($base2) {
+            $rest = &$this->config->getREST('1.3', $this->_options);
+            $base = $base2;
         } else {
-            $url = $this->_remote->call('package.getDownloadURL', $parr, $state);
+            $rest = &$this->config->getREST('1.0', $this->_options);
         }
+
+        if (!isset($parr['version']) && !isset($parr['state']) && $version
+              && !PEAR::isError($version)
+              && !isset($this->_options['downloadonly'])) {
+            $url = $rest->getDownloadURL($base, $parr, $state, $version, $chan->getName());
+        } else {
+            $url = $rest->getDownloadURL($base, $parr, $state, false, $chan->getName());
+        }
+
         if (PEAR::isError($url)) {
+            $this->configSet('default_channel', $curchannel);
             return $url;
         }
+
         if ($parr['channel'] != $curchannel) {
             $this->configSet('default_channel', $curchannel);
         }
-        if (isset($url['__PEAR_ERROR_CLASS__'])) {
-            return PEAR::raiseError($url['message']);
-        }
+
         if (!is_array($url)) {
             return $url;
         }
-        $url['raw'] = $url['info'];
-        if (isset($this->_options['downloadonly'])) {
-            $pkg = &$this->getPackagefileObject($this->config, $this->debug);
-        } else {
-            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-            if (PEAR::isError($dir = $this->getDownloadDir())) {
-                PEAR::staticPopErrorHandling();
-                return $dir;
+
+        $url['raw'] = false; // no checking is necessary for REST
+        if (!is_array($url['info'])) {
+            return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
+                'this should never happen');
+        }
+
+        if (!isset($this->_options['force']) &&
+              !isset($this->_options['downloadonly']) &&
+              $version &&
+              !PEAR::isError($version) &&
+              !isset($parr['group'])
+        ) {
+            if (version_compare($version, $url['version'], '=')) {
+                return PEAR::raiseError($this->_registry->parsedPackageNameToString(
+                    $parr, true) . ' is already installed and is the same as the ' .
+                    'released version ' . $url['version'], -976);
+            }
+
+            if (version_compare($version, $url['version'], '>')) {
+                return PEAR::raiseError($this->_registry->parsedPackageNameToString(
+                    $parr, true) . ' is already installed and is newer than detected ' .
+                    'released version ' . $url['version'], -976);
             }
-            PEAR::staticPopErrorHandling();
-            $pkg = &$this->getPackagefileObject($this->config, $this->debug, $dir);
         }
-        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $pinfo = &$pkg->fromXmlString($url['info'], PEAR_VALIDATE_DOWNLOADING, 'remote');
-        PEAR::staticPopErrorHandling();
-        if (PEAR::isError($pinfo)) {
-            if (!isset($this->_options['soft'])) {
-                $this->log(0, $pinfo->getMessage());
+
+        if (isset($url['info']['required']) || $url['compatible']) {
+            require_once 'PEAR/PackageFile/v2.php';
+            $pf = new PEAR_PackageFile_v2;
+            $pf->setRawChannel($parr['channel']);
+            if ($url['compatible']) {
+                $pf->setRawCompatible($url['compatible']);
             }
-            return PEAR::raiseError('Remote package.xml is not valid - this should never happen');
+        } else {
+            require_once 'PEAR/PackageFile/v1.php';
+            $pf = new PEAR_PackageFile_v1;
         }
-        $url['info'] = &$pinfo;
+
+        $pf->setRawPackage($url['package']);
+        $pf->setDeps($url['info']);
+        if ($url['compatible']) {
+            $pf->setCompatible($url['compatible']);
+        }
+
+        $pf->setRawState($url['stability']);
+        $url['info'] = &$pf;
         if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
             $ext = '.tar';
         } else {
             $ext = '.tgz';
         }
-        if (is_array($url)) {
-            if (isset($url['url'])) {
-                $url['url'] .= $ext;
-            }
+
+        if (is_array($url) && isset($url['url'])) {
+            $url['url'] .= $ext;
         }
+
         return $url;
     }
     // }}}
@@ -41959,6 +41112,7 @@ class PEAR_Downloader extends PEAR_Common
             if (PEAR::isError($chan)) {
                 return $chan;
             }
+
             $version = $this->_registry->packageInfo($dep['name'], 'version', '__uri');
             $this->configSet('default_channel', '__uri');
         } else {
@@ -41967,6 +41121,7 @@ class PEAR_Downloader extends PEAR_Common
             } else {
                 $remotechannel = 'pear.php.net';
             }
+
             if (!$this->_registry->channelExists($remotechannel)) {
                 do {
                     if ($this->config->get('auto_discover')) {
@@ -41977,18 +41132,21 @@ class PEAR_Downloader extends PEAR_Common
                     return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);
                 } while (false);
             }
+
             $chan = &$this->_registry->getChannel($remotechannel);
             if (PEAR::isError($chan)) {
                 return $chan;
             }
-            $version = $this->_registry->packageInfo($dep['name'], 'version',
-                $remotechannel);
+
+            $version = $this->_registry->packageInfo($dep['name'], 'version', $remotechannel);
             $this->configSet('default_channel', $remotechannel);
         }
+
         $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');
         if (isset($parr['state']) && isset($parr['version'])) {
             unset($parr['state']);
         }
+
         if (isset($dep['uri'])) {
             $info = &$this->newDownloaderPackage($this);
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
@@ -41998,35 +41156,42 @@ class PEAR_Downloader extends PEAR_Common
                 // skip parameters that were missed by preferred_state
                 return PEAR::raiseError('Cannot initialize dependency');
             }
+
             if (PEAR::isError($err)) {
                 if (!isset($this->_options['soft'])) {
                     $this->log(0, $err->getMessage());
                 }
+
                 if (is_object($info)) {
                     $param = $info->getChannel() . '/' . $info->getPackage();
                 }
                 return PEAR::raiseError('Package "' . $param . '" is not valid');
             }
             return $info;
-        } elseif ($chan->supportsREST($this->config->get('preferred_mirror')) &&
-              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+        } elseif ($chan->supportsREST($this->config->get('preferred_mirror'))
+              && $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))
+        ) {
             $rest = &$this->config->getREST('1.0', $this->_options);
             $url = $rest->getDepDownloadURL($base, $xsdversion, $dep, $parr,
                     $state, $version, $chan->getName());
             if (PEAR::isError($url)) {
                 return $url;
             }
+
             if ($parr['channel'] != $curchannel) {
                 $this->configSet('default_channel', $curchannel);
             }
+
             if (!is_array($url)) {
                 return $url;
             }
+
             $url['raw'] = false; // no checking is necessary for REST
             if (!is_array($url['info'])) {
                 return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
                     'this should never happen');
             }
+
             if (isset($url['info']['required'])) {
                 if (!class_exists('PEAR_PackageFile_v2')) {
                     require_once 'PEAR/PackageFile/v2.php';
@@ -42038,12 +41203,14 @@ class PEAR_Downloader extends PEAR_Common
                     require_once 'PEAR/PackageFile/v1.php';
                 }
                 $pf = new PEAR_PackageFile_v1;
+
             }
             $pf->setRawPackage($url['package']);
             $pf->setDeps($url['info']);
             if ($url['compatible']) {
                 $pf->setCompatible($url['compatible']);
             }
+
             $pf->setRawState($url['stability']);
             $url['info'] = &$pf;
             if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
@@ -42051,55 +41218,15 @@ class PEAR_Downloader extends PEAR_Common
             } else {
                 $ext = '.tgz';
             }
-            if (is_array($url)) {
-                if (isset($url['url'])) {
-                    $url['url'] .= $ext;
-                }
-            }
-            return $url;
-        } elseif ($chan->supports('xmlrpc', 'package.getDepDownloadURL', false, '1.1')) {
-            if ($version) {
-                $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr,
-                    $state, $version);
-            } else {
-                $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr,
-                    $state);
-            }
-        } else {
-            $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr, $state);
-        }
-        if ($this->config->get('default_channel') != $curchannel) {
-            $this->configSet('default_channel', $curchannel);
-        }
-        if (!is_array($url)) {
-            return $url;
-        }
-        if (isset($url['__PEAR_ERROR_CLASS__'])) {
-            return PEAR::raiseError($url['message']);
-        }
-        $url['raw'] = $url['info'];
-        $pkg = &$this->getPackagefileObject($this->config, $this->debug);
-        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $pinfo = &$pkg->fromXmlString($url['info'], PEAR_VALIDATE_DOWNLOADING, 'remote');
-        PEAR::staticPopErrorHandling();
-        if (PEAR::isError($pinfo)) {
-            if (!isset($this->_options['soft'])) {
-                $this->log(0, $pinfo->getMessage());
-            }
-            return PEAR::raiseError('Remote package.xml is not valid - this should never happen');
-        }
-        $url['info'] = &$pinfo;
-        if (is_array($url)) {
-            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
-                $ext = '.tar';
-            } else {
-                $ext = '.tgz';
-            }
-            if (isset($url['url'])) {
+
+            if (is_array($url) && isset($url['url'])) {
                 $url['url'] .= $ext;
             }
+
+            return $url;
         }
-        return $url;
+
+        return $this->raiseError($parr['channel'] . ' is using a unsupported protocal - This should never happen.');
     }
     // }}}
     // {{{ getPackageDownloadUrl()
@@ -42262,6 +41389,7 @@ class PEAR_Downloader extends PEAR_Common
             $nodes[$pname]->setData($packages[$i]);
             $depgraph->addNode($nodes[$pname]);
         }
+
         $deplinks = array();
         foreach ($nodes as $package => $node) {
             $pf = &$node->getData();
@@ -42269,36 +41397,41 @@ class PEAR_Downloader extends PEAR_Common
             if (!$pdeps) {
                 continue;
             }
+
             if ($pf->getPackagexmlVersion() == '1.0') {
                 foreach ($pdeps as $dep) {
                     if ($dep['type'] != 'pkg' ||
                           (isset($dep['optional']) && $dep['optional'] == 'yes')) {
                         continue;
                     }
+
                     $dname = $reg->parsedPackageNameToString(
                           array(
                               'channel' => 'pear.php.net',
                               'package' => strtolower($dep['name']),
                           ));
-                    if (isset($nodes[$dname]))
-                    {
+
+                    if (isset($nodes[$dname])) {
                         if (!isset($deplinks[$dname])) {
                             $deplinks[$dname] = array();
                         }
+
                         $deplinks[$dname][$package] = 1;
                         // dependency is in installed packages
                         continue;
                     }
+
                     $dname = $reg->parsedPackageNameToString(
                           array(
                               'channel' => 'pecl.php.net',
                               'package' => strtolower($dep['name']),
                           ));
-                    if (isset($nodes[$dname]))
-                    {
+
+                    if (isset($nodes[$dname])) {
                         if (!isset($deplinks[$dname])) {
                             $deplinks[$dname] = array();
                         }
+
                         $deplinks[$dname][$package] = 1;
                         // dependency is in installed packages
                         continue;
@@ -42313,58 +41446,71 @@ class PEAR_Downloader extends PEAR_Common
                     if (!isset($t[0])) {
                         $t = array($t);
                     }
+
                     $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                 }
+
                 if (isset($pdeps['group'])) {
                     if (!isset($pdeps['group'][0])) {
                         $pdeps['group'] = array($pdeps['group']);
                     }
+
                     foreach ($pdeps['group'] as $group) {
                         if (isset($group['subpackage'])) {
                             $t = $group['subpackage'];
                             if (!isset($t[0])) {
                                 $t = array($t);
                             }
+
                             $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                         }
                     }
                 }
+
                 if (isset($pdeps['optional']['subpackage'])) {
                     $t = $pdeps['optional']['subpackage'];
                     if (!isset($t[0])) {
                         $t = array($t);
                     }
+
                     $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                 }
+
                 if (isset($pdeps['required']['package'])) {
                     $t = $pdeps['required']['package'];
                     if (!isset($t[0])) {
                         $t = array($t);
                     }
+
                     $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                 }
+
                 if (isset($pdeps['group'])) {
                     if (!isset($pdeps['group'][0])) {
                         $pdeps['group'] = array($pdeps['group']);
                     }
+
                     foreach ($pdeps['group'] as $group) {
                         if (isset($group['package'])) {
                             $t = $group['package'];
                             if (!isset($t[0])) {
                                 $t = array($t);
                             }
+
                             $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                         }
                     }
                 }
             }
         }
+
         $this->_detectDepCycle($deplinks);
         foreach ($deplinks as $dependent => $parents) {
             foreach ($parents as $parent => $unused) {
                 $nodes[$dependent]->connectTo($nodes[$parent]);
             }
         }
+
         $installOrder = Structures_Graph_Manipulator_TopologicalSorter::sort($depgraph);
         $ret = array();
         for ($i = 0; $i < count($installOrder); $i++) {
@@ -42377,6 +41523,7 @@ class PEAR_Downloader extends PEAR_Common
                           ))]->getData();
             }
         }
+
         $packages = $ret;
         return;
     }
@@ -42450,15 +41597,14 @@ class PEAR_Downloader extends PEAR_Common
     function _setupGraph($t, $reg, &$deplinks, &$nodes, $package)
     {
         foreach ($t as $dep) {
-            $depchannel = !isset($dep['channel']) ?
-                '__uri': $dep['channel'];
+            $depchannel = !isset($dep['channel']) ? '__uri': $dep['channel'];
             $dname = $reg->parsedPackageNameToString(
                   array(
                       'channel' => $depchannel,
                       'package' => strtolower($dep['name']),
                   ));
-            if (isset($nodes[$dname]))
-            {
+
+            if (isset($nodes[$dname])) {
                 if (!isset($deplinks[$dname])) {
                     $deplinks[$dname] = array();
                 }
@@ -42469,8 +41615,7 @@ class PEAR_Downloader extends PEAR_Common
 
     function _dependsOn($a, $b)
     {
-        return $this->_checkDepTree(strtolower($a->getChannel()), strtolower($a->getPackage()),
-            $b);
+        return $this->_checkDepTree(strtolower($a->getChannel()), strtolower($a->getPackage()), $b);
     }
 
     function _checkDepTree($channel, $package, $b, $checked = array())
@@ -42479,10 +41624,12 @@ class PEAR_Downloader extends PEAR_Common
         if (!isset($this->_depTree[$channel][$package])) {
             return false;
         }
+
         if (isset($this->_depTree[$channel][$package][strtolower($b->getChannel())]
               [strtolower($b->getPackage())])) {
             return true;
         }
+
         foreach ($this->_depTree[$channel][$package] as $ch => $packages) {
             foreach ($packages as $pa => $true) {
                 if ($this->_checkDepTree($ch, $pa, $b, $checked)) {
@@ -42490,6 +41637,7 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         return false;
     }
 
@@ -42566,28 +41714,32 @@ class PEAR_Downloader extends PEAR_Common
                           $accept = false, $channel = false)
     {
         static $redirect = 0;
-        // allways reset , so we are clean case of error
+        // always reset , so we are clean case of error
         $wasredirect = $redirect;
         $redirect = 0;
         if ($callback) {
             call_user_func($callback, 'setup', array(&$ui));
         }
+
         $info = parse_url($url);
         if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
             return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
         }
+
         if (!isset($info['host'])) {
             return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
-        } else {
-            $host = isset($info['host']) ? $info['host'] : null;
-            $port = isset($info['port']) ? $info['port'] : null;
-            $path = isset($info['path']) ? $info['path'] : null;
         }
+
+        $host = isset($info['host']) ? $info['host'] : null;
+        $port = isset($info['port']) ? $info['port'] : null;
+        $path = isset($info['path']) ? $info['path'] : null;
+
         if (isset($this)) {
             $config = &$this->config;
         } else {
             $config = &PEAR_Config::singleton();
         }
+
         $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
         if ($config->get('http_proxy') &&
               $proxy = parse_url($config->get('http_proxy'))) {
@@ -42603,13 +41755,13 @@ class PEAR_Downloader extends PEAR_Common
                 call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
             }
         }
+
         if (empty($port)) {
-            if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $port = 443;
-            } else {
-                $port = 80;
-            }
+            $port = (isset($info['scheme']) && $info['scheme'] == 'https') ? 443 : 80;
         }
+
+        $scheme = (isset($info['scheme']) && $info['scheme'] == 'https') ? 'https' : 'http';
+
         if ($proxy_host != '') {
             $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
             if (!$fp) {
@@ -42619,16 +41771,21 @@ class PEAR_Downloader extends PEAR_Common
                 }
                 return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
             }
+
             if ($lastmodified === false || $lastmodified) {
-                $request = "GET $url HTTP/1.1\r\n";
+                $request  = "GET $url HTTP/1.1\r\n";
+                $request .= "Host: $host:$port\r\n";
             } else {
-                $request = "GET $url HTTP/1.0\r\n";
+                $request  = "GET $url HTTP/1.0\r\n";
+                $request .= "Host: $host\r\n";
             }
         } else {
+            $network_host = $host;
             if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $host = 'ssl://' . $host;
+                $network_host = 'ssl://' . $host;
             }
-            $fp = @fsockopen($host, $port, $errno, $errstr);
+
+            $fp = @fsockopen($network_host, $port, $errno, $errstr);
             if (!$fp) {
                 if ($callback) {
                     call_user_func($callback, 'connfailed', array($host, $port,
@@ -42636,6 +41793,7 @@ class PEAR_Downloader extends PEAR_Common
                 }
                 return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
             }
+
             if ($lastmodified === false || $lastmodified) {
                 $request = "GET $path HTTP/1.1\r\n";
                 $request .= "Host: $host:$port\r\n";
@@ -42644,19 +41802,23 @@ class PEAR_Downloader extends PEAR_Common
                 $request .= "Host: $host\r\n";
             }
         }
+
         $ifmodifiedsince = '';
         if (is_array($lastmodified)) {
             if (isset($lastmodified['Last-Modified'])) {
                 $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
             }
+
             if (isset($lastmodified['ETag'])) {
                 $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
             }
         } else {
             $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
         }
-        $request .= $ifmodifiedsince . "User-Agent: PEAR/1.7.2/PHP/" .
-            PHP_VERSION . "\r\n";
+
+        $request .= $ifmodifiedsince .
+            "User-Agent: PEAR/1.8.0/PHP/" . PHP_VERSION . "\r\n";
+
         if (isset($this)) { // only pass in authentication for non-static calls
             $username = $config->get('username', null, $channel);
             $password = $config->get('password', null, $channel);
@@ -42665,13 +41827,16 @@ class PEAR_Downloader extends PEAR_Common
                 $request .= "Authorization: Basic $tmp\r\n";
             }
         }
+
         if ($proxy_host != '' && $proxy_user != '') {
             $request .= 'Proxy-Authorization: Basic ' .
                 base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
         }
+
         if ($accept) {
             $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
         }
+
         $request .= "Connection: close\r\n";
         $request .= "\r\n";
         fwrite($fp, $request);
@@ -42681,40 +41846,45 @@ class PEAR_Downloader extends PEAR_Common
             if (preg_match('/^([^:]+):\s+(.*)\s*\\z/', $line, $matches)) {
                 $headers[strtolower($matches[1])] = trim($matches[2]);
             } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
-                $reply = (int) $matches[1];
+                $reply = (int)$matches[1];
                 if ($reply == 304 && ($lastmodified || ($lastmodified === false))) {
                     return false;
                 }
-                if (! in_array($reply, array(200, 301, 302, 303, 305, 307))) {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
+
+                if (!in_array($reply, array(200, 301, 302, 303, 305, 307))) {
+                    return PEAR::raiseError("File $scheme://$host:$port$path not valid (received: $line)");
                 }
             }
         }
+
         if ($reply != 200) {
-            if (isset($headers['location'])) {
-                if ($wasredirect < 5) {
-                    $redirect = $wasredirect + 1;
-                    return $this->downloadHttp($headers['location'],
-                            $ui, $save_dir, $callback, $lastmodified, $accept);
-                } else {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (redirection looped more than 5 times)");
-                }
-            } else {
-                return PEAR::raiseError("File http://$host:$port$path not valid (redirected but no location)");
+            if (!isset($headers['location'])) {
+                return PEAR::raiseError("File $scheme://$host:$port$path not valid (redirected but no location)");
             }
+
+            if ($wasredirect > 4) {
+                return PEAR::raiseError("File $scheme://$host:$port$path not valid (redirection looped more than 5 times)");
+            }
+
+            $redirect = $wasredirect + 1;
+            return $this->downloadHttp($headers['location'],
+                    $ui, $save_dir, $callback, $lastmodified, $accept);
         }
+
         if (isset($headers['content-disposition']) &&
             preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|\\z)/', $headers['content-disposition'], $matches)) {
             $save_as = basename($matches[1]);
         } else {
             $save_as = basename($url);
         }
+
         if ($callback) {
             $tmp = call_user_func($callback, 'saveas', $save_as);
             if ($tmp) {
                 $save_as = $tmp;
             }
         }
+
         $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
         if (!$wp = @fopen($dest_file, 'wb')) {
             fclose($fp);
@@ -42723,15 +41893,14 @@ class PEAR_Downloader extends PEAR_Common
             }
             return PEAR::raiseError("could not open $dest_file for writing");
         }
-        if (isset($headers['content-length'])) {
-            $length = $headers['content-length'];
-        } else {
-            $length = -1;
-        }
+
+        $length = isset($headers['content-length']) ? $headers['content-length'] : -1;
+
         $bytes = 0;
         if ($callback) {
             call_user_func($callback, 'start', array(basename($dest_file), $length));
         }
+
         while ($data = fread($fp, 1024)) {
             $bytes += strlen($data);
             if ($callback) {
@@ -42750,6 +41919,7 @@ class PEAR_Downloader extends PEAR_Common
         if ($callback) {
             call_user_func($callback, 'done', $bytes);
         }
+
         if ($lastmodified === false || $lastmodified) {
             if (isset($headers['etag'])) {
                 $lastmodified = array('ETag' => $headers['etag']);
@@ -42766,1639 +41936,1629 @@ class PEAR_Downloader extends PEAR_Common
         return $dest_file;
     }
 }
-// }}}
-
-?>
-  PEAR-1.7.2/PEAR/ErrorStack.php                                                                      100644    1750    1750       102233 11014312742  11045                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * Error Stack Implementation
- * 
- * This is an incredibly simple implementation of a very complex error handling
- * facility.  It contains the ability
- * to track multiple errors from multiple packages simultaneously.  In addition,
- * it can track errors of many levels, save data along with the error, context
- * information such as the exact file, line number, class and function that
- * generated the error, and if necessary, it can raise a traditional PEAR_Error.
- * It has built-in support for PEAR::Log, to log errors as they occur
- * 
- * Since version 0.2alpha, it is also possible to selectively ignore errors,
- * through the use of an error callback, see {@link pushCallback()}
- * 
- * Since version 0.3alpha, it is possible to specify the exception class
- * returned from {@link push()}
- *
- * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
- * still be done quite handily in an error callback or by manipulating the returned array
- * @category   Debugging
- * @package    PEAR_ErrorStack
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  2004-2008 Greg Beaver
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: ErrorStack.php,v 1.28 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR_ErrorStack
- */
-
-/**
- * Singleton storage
- * 
- * Format:
- * <pre>
- * array(
- *  'package1' => PEAR_ErrorStack object,
- *  'package2' => PEAR_ErrorStack object,
- *  ...
- * )
- * </pre>
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
- */
-$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();
-
-/**
- * Global error callback (default)
- * 
- * This is only used if set to non-false.  * is the default callback for
- * all packages, whereas specific packages may set a default callback
- * for all instances, regardless of whether they are a singleton or not.
- *
- * To exclude non-singletons, only set the local callback for the singleton
- * @see PEAR_ErrorStack::setDefaultCallback()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
- */
-$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
-    '*' => false,
-);
-
-/**
- * Global Log object (default)
- * 
- * This is only used if set to non-false.  Use to set a default log object for
- * all stacks, regardless of instantiation order or location
- * @see PEAR_ErrorStack::setDefaultLogger()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
- */
-$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;
-
-/**
- * Global Overriding Callback
- * 
- * This callback will override any error callbacks that specific loggers have set.
- * Use with EXTREME caution
- * @see PEAR_ErrorStack::staticPushCallback()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
- */
-$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
-
-/**#@+
- * One of four possible return values from the error Callback
- * @see PEAR_ErrorStack::_errorCallback()
- */
-/**
- * If this is returned, then the error will be both pushed onto the stack
- * and logged.
- */
-define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
-/**
- * If this is returned, then the error will only be pushed onto the stack,
- * and not logged.
- */
-define('PEAR_ERRORSTACK_PUSH', 2);
-/**
- * If this is returned, then the error will only be logged, but not pushed
- * onto the error stack.
- */
-define('PEAR_ERRORSTACK_LOG', 3);
-/**
- * If this is returned, then the error is completely ignored.
- */
-define('PEAR_ERRORSTACK_IGNORE', 4);
-/**
- * If this is returned, then the error is logged and die() is called.
- */
-define('PEAR_ERRORSTACK_DIE', 5);
-/**#@-*/
-
-/**
- * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
- * the singleton method.
- */
-define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);
-
-/**
- * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
- * that has no __toString() method
- */
-define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
-/**
- * Error Stack Implementation
- *
- * Usage:
- * <code>
- * // global error stack
- * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
- * // local error stack
- * $local_stack = new PEAR_ErrorStack('MyPackage');
- * </code>
- * @author     Greg Beaver <cellog at php.net>
- * @version    1.7.2
- * @package    PEAR_ErrorStack
- * @category   Debugging
- * @copyright  2004-2008 Greg Beaver
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: ErrorStack.php,v 1.28 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR_ErrorStack
- */
-class PEAR_ErrorStack {
-    /**
-     * Errors are stored in the order that they are pushed on the stack.
-     * @since 0.4alpha Errors are no longer organized by error level.
-     * This renders pop() nearly unusable, and levels could be more easily
-     * handled in a callback anyway
-     * @var array
-     * @access private
-     */
-    var $_errors = array();
-
-    /**
-     * Storage of errors by level.
-     *
-     * Allows easy retrieval and deletion of only errors from a particular level
-     * @since PEAR 1.4.0dev
-     * @var array
-     * @access private
-     */
-    var $_errorsByLevel = array();
-
-    /**
-     * Package name this error stack represents
-     * @var string
-     * @access protected
-     */
-    var $_package;
-    
-    /**
-     * Determines whether a PEAR_Error is thrown upon every error addition
-     * @var boolean
-     * @access private
-     */
-    var $_compat = false;
-    
-    /**
-     * If set to a valid callback, this will be used to generate the error
-     * message from the error code, otherwise the message passed in will be
-     * used
-     * @var false|string|array
-     * @access private
-     */
-    var $_msgCallback = false;
-    
-    /**
-     * If set to a valid callback, this will be used to generate the error
-     * context for an error.  For PHP-related errors, this will be a file
-     * and line number as retrieved from debug_backtrace(), but can be
-     * customized for other purposes.  The error might actually be in a separate
-     * configuration file, or in a database query.
-     * @var false|string|array
-     * @access protected
-     */
-    var $_contextCallback = false;
-    
-    /**
-     * If set to a valid callback, this will be called every time an error
-     * is pushed onto the stack.  The return value will be used to determine
-     * whether to allow an error to be pushed or logged.
-     * 
-     * The return value must be one an PEAR_ERRORSTACK_* constant
-     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
-     * @var false|string|array
-     * @access protected
-     */
-    var $_errorCallback = array();
-    
-    /**
-     * PEAR::Log object for logging errors
-     * @var false|Log
-     * @access protected
-     */
-    var $_logger = false;
-    
-    /**
-     * Error messages - designed to be overridden
-     * @var array
-     * @abstract
-     */
-    var $_errorMsgs = array();
-    
-    /**
-     * Set up a new error stack
-     * 
-     * @param string   $package name of the package this error stack represents
-     * @param callback $msgCallback callback used for error message generation
-     * @param callback $contextCallback callback used for context generation,
-     *                 defaults to {@link getFileLine()}
-     * @param boolean  $throwPEAR_Error
-     */
-    function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false,
-                         $throwPEAR_Error = false)
-    {
-        $this->_package = $package;
-        $this->setMessageCallback($msgCallback);
-        $this->setContextCallback($contextCallback);
-        $this->_compat = $throwPEAR_Error;
-    }
-    
-    /**
-     * Return a single error stack for this package.
-     * 
-     * Note that all parameters are ignored if the stack for package $package
-     * has already been instantiated
-     * @param string   $package name of the package this error stack represents
-     * @param callback $msgCallback callback used for error message generation
-     * @param callback $contextCallback callback used for context generation,
-     *                 defaults to {@link getFileLine()}
-     * @param boolean  $throwPEAR_Error
-     * @param string   $stackClass class to instantiate
-     * @static
-     * @return PEAR_ErrorStack
-     */
-    function &singleton($package, $msgCallback = false, $contextCallback = false,
-                         $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack')
-    {
-        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
-            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
-        }
-        if (!class_exists($stackClass)) {
-            if (function_exists('debug_backtrace')) {
-                $trace = debug_backtrace();
-            }
-            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
-                'exception', array('stackclass' => $stackClass),
-                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
-                false, $trace);
-        }
-        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
-            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
-
-        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
-    }
-
-    /**
-     * Internal error handler for PEAR_ErrorStack class
-     * 
-     * Dies if the error is an exception (and would have died anyway)
-     * @access private
-     */
-    function _handleError($err)
-    {
-        if ($err['level'] == 'exception') {
-            $message = $err['message'];
-            if (isset($_SERVER['REQUEST_URI'])) {
-                echo '<br />';
-            } else {
-                echo "\n";
-            }
-            var_dump($err['context']);
-            die($message);
-        }
-    }
-    
-    /**
-     * Set up a PEAR::Log object for all error stacks that don't have one
-     * @param Log $log 
-     * @static
-     */
-    function setDefaultLogger(&$log)
-    {
-        if (is_object($log) && method_exists($log, 'log') ) {
-            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
-        } elseif (is_callable($log)) {
-            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
-	}
-    }
-    
-    /**
-     * Set up a PEAR::Log object for this error stack
-     * @param Log $log 
-     */
-    function setLogger(&$log)
-    {
-        if (is_object($log) && method_exists($log, 'log') ) {
-            $this->_logger = &$log;
-        } elseif (is_callable($log)) {
-            $this->_logger = &$log;
-        }
-    }
-    
-    /**
-     * Set an error code => error message mapping callback
-     * 
-     * This method sets the callback that can be used to generate error
-     * messages for any instance
-     * @param array|string Callback function/method
-     */
-    function setMessageCallback($msgCallback)
-    {
-        if (!$msgCallback) {
-            $this->_msgCallback = array(&$this, 'getErrorMessage');
-        } else {
-            if (is_callable($msgCallback)) {
-                $this->_msgCallback = $msgCallback;
-            }
-        }
-    }
-    
-    /**
-     * Get an error code => error message mapping callback
-     * 
-     * This method returns the current callback that can be used to generate error
-     * messages
-     * @return array|string|false Callback function/method or false if none
-     */
-    function getMessageCallback()
-    {
-        return $this->_msgCallback;
-    }
-    
-    /**
-     * Sets a default callback to be used by all error stacks
-     * 
-     * This method sets the callback that can be used to generate error
-     * messages for a singleton
-     * @param array|string Callback function/method
-     * @param string Package name, or false for all packages
-     * @static
-     */
-    function setDefaultCallback($callback = false, $package = false)
-    {
-        if (!is_callable($callback)) {
-            $callback = false;
-        }
-        $package = $package ? $package : '*';
-        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
-    }
-    
-    /**
-     * Set a callback that generates context information (location of error) for an error stack
-     * 
-     * This method sets the callback that can be used to generate context
-     * information for an error.  Passing in NULL will disable context generation
-     * and remove the expensive call to debug_backtrace()
-     * @param array|string|null Callback function/method
-     */
-    function setContextCallback($contextCallback)
-    {
-        if ($contextCallback === null) {
-            return $this->_contextCallback = false;
-        }
-        if (!$contextCallback) {
-            $this->_contextCallback = array(&$this, 'getFileLine');
-        } else {
-            if (is_callable($contextCallback)) {
-                $this->_contextCallback = $contextCallback;
-            }
-        }
-    }
-    
-    /**
-     * Set an error Callback
-     * If set to a valid callback, this will be called every time an error
-     * is pushed onto the stack.  The return value will be used to determine
-     * whether to allow an error to be pushed or logged.
-     * 
-     * The return value must be one of the ERRORSTACK_* constants.
-     * 
-     * This functionality can be used to emulate PEAR's pushErrorHandling, and
-     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
-     * the error stack or logging
-     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
-     * @see popCallback()
-     * @param string|array $cb
-     */
-    function pushCallback($cb)
-    {
-        array_push($this->_errorCallback, $cb);
-    }
-    
-    /**
-     * Remove a callback from the error callback stack
-     * @see pushCallback()
-     * @return array|string|false
-     */
-    function popCallback()
-    {
-        if (!count($this->_errorCallback)) {
-            return false;
-        }
-        return array_pop($this->_errorCallback);
-    }
-    
-    /**
-     * Set a temporary overriding error callback for every package error stack
-     *
-     * Use this to temporarily disable all existing callbacks (can be used
-     * to emulate the @ operator, for instance)
-     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
-     * @see staticPopCallback(), pushCallback()
-     * @param string|array $cb
-     * @static
-     */
-    function staticPushCallback($cb)
-    {
-        array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
-    }
-    
-    /**
-     * Remove a temporary overriding error callback
-     * @see staticPushCallback()
-     * @return array|string|false
-     * @static
-     */
-    function staticPopCallback()
-    {
-        $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
-        if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
-            $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
-        }
-        return $ret;
-    }
-    
-    /**
-     * Add an error to the stack
-     * 
-     * If the message generator exists, it is called with 2 parameters.
-     *  - the current Error Stack object
-     *  - an array that is in the same format as an error.  Available indices
-     *    are 'code', 'package', 'time', 'params', 'level', and 'context'
-     * 
-     * Next, if the error should contain context information, this is
-     * handled by the context grabbing method.
-     * Finally, the error is pushed onto the proper error stack
-     * @param int    $code      Package-specific error code
-     * @param string $level     Error level.  This is NOT spell-checked
-     * @param array  $params    associative array of error parameters
-     * @param string $msg       Error message, or a portion of it if the message
-     *                          is to be generated
-     * @param array  $repackage If this error re-packages an error pushed by
-     *                          another package, place the array returned from
-     *                          {@link pop()} in this parameter
-     * @param array  $backtrace Protected parameter: use this to pass in the
-     *                          {@link debug_backtrace()} that should be used
-     *                          to find error context
-     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
-     * thrown.  If a PEAR_Error is returned, the userinfo
-     * property is set to the following array:
-     * 
-     * <code>
-     * array(
-     *    'code' => $code,
-     *    'params' => $params,
-     *    'package' => $this->_package,
-     *    'level' => $level,
-     *    'time' => time(),
-     *    'context' => $context,
-     *    'message' => $msg,
-     * //['repackage' => $err] repackaged error array/Exception class
-     * );
-     * </code>
-     * 
-     * Normally, the previous array is returned.
-     */
-    function push($code, $level = 'error', $params = array(), $msg = false,
-                  $repackage = false, $backtrace = false)
-    {
-        $context = false;
-        // grab error context
-        if ($this->_contextCallback) {
-            if (!$backtrace) {
-                $backtrace = debug_backtrace();
-            }
-            $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
-        }
-        
-        // save error
-        $time = explode(' ', microtime());
-        $time = $time[1] + $time[0];
-        $err = array(
-                'code' => $code,
-                'params' => $params,
-                'package' => $this->_package,
-                'level' => $level,
-                'time' => $time,
-                'context' => $context,
-                'message' => $msg,
-               );
-
-        if ($repackage) {
-            $err['repackage'] = $repackage;
-        }
-
-        // set up the error message, if necessary
-        if ($this->_msgCallback) {
-            $msg = call_user_func_array($this->_msgCallback,
-                                        array(&$this, $err));
-            $err['message'] = $msg;
-        }        
-        $push = $log = true;
-        $die = false;
-        // try the overriding callback first
-        $callback = $this->staticPopCallback();
-        if ($callback) {
-            $this->staticPushCallback($callback);
-        }
-        if (!is_callable($callback)) {
-            // try the local callback next
-            $callback = $this->popCallback();
-            if (is_callable($callback)) {
-                $this->pushCallback($callback);
-            } else {
-                // try the default callback
-                $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
-                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
-                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
-            }
-        }
-        if (is_callable($callback)) {
-            switch(call_user_func($callback, $err)){
-            	case PEAR_ERRORSTACK_IGNORE: 
-            		return $err;
-        		break;
-            	case PEAR_ERRORSTACK_PUSH: 
-            		$log = false;
-        		break;
-            	case PEAR_ERRORSTACK_LOG: 
-            		$push = false;
-        		break;
-            	case PEAR_ERRORSTACK_DIE: 
-            		$die = true;
-        		break;
-                // anything else returned has the same effect as pushandlog
-            }
-        }
-        if ($push) {
-            array_unshift($this->_errors, $err);
-            if (!isset($this->_errorsByLevel[$err['level']])) {
-                $this->_errorsByLevel[$err['level']] = array();
-            }
-            $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
-        }
-        if ($log) {
-            if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
-                $this->_log($err);
-            }
-        }
-        if ($die) {
-            die();
-        }
-        if ($this->_compat && $push) {
-            return $this->raiseError($msg, $code, null, null, $err);
-        }
-        return $err;
-    }
-    
-    /**
-     * Static version of {@link push()}
-     * 
-     * @param string $package   Package name this error belongs to
-     * @param int    $code      Package-specific error code
-     * @param string $level     Error level.  This is NOT spell-checked
-     * @param array  $params    associative array of error parameters
-     * @param string $msg       Error message, or a portion of it if the message
-     *                          is to be generated
-     * @param array  $repackage If this error re-packages an error pushed by
-     *                          another package, place the array returned from
-     *                          {@link pop()} in this parameter
-     * @param array  $backtrace Protected parameter: use this to pass in the
-     *                          {@link debug_backtrace()} that should be used
-     *                          to find error context
-     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
-     *                          thrown.  see docs for {@link push()}
-     * @static
-     */
-    function staticPush($package, $code, $level = 'error', $params = array(),
-                        $msg = false, $repackage = false, $backtrace = false)
-    {
-        $s = &PEAR_ErrorStack::singleton($package);
-        if ($s->_contextCallback) {
-            if (!$backtrace) {
-                if (function_exists('debug_backtrace')) {
-                    $backtrace = debug_backtrace();
-                }
-            }
-        }
-        return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
-    }
-    
-    /**
-     * Log an error using PEAR::Log
-     * @param array $err Error array
-     * @param array $levels Error level => Log constant map
-     * @access protected
-     */
-    function _log($err)
-    {
-        if ($this->_logger) {
-            $logger = &$this->_logger;
-        } else {
-            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
-        }
-        if (is_a($logger, 'Log')) {
-            $levels = array(
-                'exception' => PEAR_LOG_CRIT,
-                'alert' => PEAR_LOG_ALERT,
-                'critical' => PEAR_LOG_CRIT,
-                'error' => PEAR_LOG_ERR,
-                'warning' => PEAR_LOG_WARNING,
-                'notice' => PEAR_LOG_NOTICE,
-                'info' => PEAR_LOG_INFO,
-                'debug' => PEAR_LOG_DEBUG);
-            if (isset($levels[$err['level']])) {
-                $level = $levels[$err['level']];
-            } else {
-                $level = PEAR_LOG_INFO;
-            }
-            $logger->log($err['message'], $level, $err);
-        } else { // support non-standard logs
-            call_user_func($logger, $err);
-        }
-    }
-
-    
-    /**
-     * Pop an error off of the error stack
-     * 
-     * @return false|array
-     * @since 0.4alpha it is no longer possible to specify a specific error
-     * level to return - the last error pushed will be returned, instead
-     */
-    function pop()
-    {
-        $err = @array_shift($this->_errors);
-        if (!is_null($err)) {
-            @array_pop($this->_errorsByLevel[$err['level']]);
-            if (!count($this->_errorsByLevel[$err['level']])) {
-                unset($this->_errorsByLevel[$err['level']]);
-            }
-        }
-        return $err;
-    }
-
-    /**
-     * Pop an error off of the error stack, static method
-     *
-     * @param string package name
-     * @return boolean
-     * @since PEAR1.5.0a1
-     */
-    function staticPop($package)
-    {
-        if ($package) {
-            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
-                return false;
-            }
-            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
-        }
-    }
-
-    /**
-     * Determine whether there are any errors on the stack
-     * @param string|array Level name.  Use to determine if any errors
-     * of level (string), or levels (array) have been pushed
-     * @return boolean
-     */
-    function hasErrors($level = false)
-    {
-        if ($level) {
-            return isset($this->_errorsByLevel[$level]);
-        }
-        return count($this->_errors);
-    }
-    
-    /**
-     * Retrieve all errors since last purge
-     * 
-     * @param boolean set in order to empty the error stack
-     * @param string level name, to return only errors of a particular severity
-     * @return array
-     */
-    function getErrors($purge = false, $level = false)
-    {
-        if (!$purge) {
-            if ($level) {
-                if (!isset($this->_errorsByLevel[$level])) {
-                    return array();
-                } else {
-                    return $this->_errorsByLevel[$level];
-                }
-            } else {
-                return $this->_errors;
-            }
-        }
-        if ($level) {
-            $ret = $this->_errorsByLevel[$level];
-            foreach ($this->_errorsByLevel[$level] as $i => $unused) {
-                // entries are references to the $_errors array
-                $this->_errorsByLevel[$level][$i] = false;
-            }
-            // array_filter removes all entries === false
-            $this->_errors = array_filter($this->_errors);
-            unset($this->_errorsByLevel[$level]);
-            return $ret;
-        }
-        $ret = $this->_errors;
-        $this->_errors = array();
-        $this->_errorsByLevel = array();
-        return $ret;
-    }
-    
-    /**
-     * Determine whether there are any errors on a single error stack, or on any error stack
-     *
-     * The optional parameter can be used to test the existence of any errors without the need of
-     * singleton instantiation
-     * @param string|false Package name to check for errors
-     * @param string Level name to check for a particular severity
-     * @return boolean
-     * @static
-     */
-    function staticHasErrors($package = false, $level = false)
-    {
-        if ($package) {
-            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
-                return false;
-            }
-            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
-        }
-        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
-            if ($obj->hasErrors($level)) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Get a list of all errors since last purge, organized by package
-     * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
-     * @param boolean $purge Set to purge the error stack of existing errors
-     * @param string  $level Set to a level name in order to retrieve only errors of a particular level
-     * @param boolean $merge Set to return a flat array, not organized by package
-     * @param array   $sortfunc Function used to sort a merged array - default
-     *        sorts by time, and should be good for most cases
-     * @static
-     * @return array 
-     */
-    function staticGetErrors($purge = false, $level = false, $merge = false,
-                             $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
-    {
-        $ret = array();
-        if (!is_callable($sortfunc)) {
-            $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
-        }
-        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
-            $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
-            if ($test) {
-                if ($merge) {
-                    $ret = array_merge($ret, $test);
-                } else {
-                    $ret[$package] = $test;
-                }
-            }
-        }
-        if ($merge) {
-            usort($ret, $sortfunc);
-        }
-        return $ret;
-    }
-    
-    /**
-     * Error sorting function, sorts by time
-     * @access private
-     */
-    function _sortErrors($a, $b)
-    {
-        if ($a['time'] == $b['time']) {
-            return 0;
-        }
-        if ($a['time'] < $b['time']) {
-            return 1;
-        }
-        return -1;
-    }
-
-    /**
-     * Standard file/line number/function/class context callback
-     *
-     * This function uses a backtrace generated from {@link debug_backtrace()}
-     * and so will not work at all in PHP < 4.3.0.  The frame should
-     * reference the frame that contains the source of the error.
-     * @return array|false either array('file' => file, 'line' => line,
-     *         'function' => function name, 'class' => class name) or
-     *         if this doesn't work, then false
-     * @param unused
-     * @param integer backtrace frame.
-     * @param array Results of debug_backtrace()
-     * @static
-     */
-    function getFileLine($code, $params, $backtrace = null)
-    {
-        if ($backtrace === null) {
-            return false;
-        }
-        $frame = 0;
-        $functionframe = 1;
-        if (!isset($backtrace[1])) {
-            $functionframe = 0;
-        } else {
-            while (isset($backtrace[$functionframe]['function']) &&
-                  $backtrace[$functionframe]['function'] == 'eval' &&
-                  isset($backtrace[$functionframe + 1])) {
-                $functionframe++;
-            }
-        }
-        if (isset($backtrace[$frame])) {
-            if (!isset($backtrace[$frame]['file'])) {
-                $frame++;
-            }
-            $funcbacktrace = $backtrace[$functionframe];
-            $filebacktrace = $backtrace[$frame];
-            $ret = array('file' => $filebacktrace['file'],
-                         'line' => $filebacktrace['line']);
-            // rearrange for eval'd code or create function errors
-            if (strpos($filebacktrace['file'], '(') && 
-            	  preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
-                  $matches)) {
-                $ret['file'] = $matches[1];
-                $ret['line'] = $matches[2] + 0;
-            }
-            if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
-                if ($funcbacktrace['function'] != 'eval') {
-                    if ($funcbacktrace['function'] == '__lambda_func') {
-                        $ret['function'] = 'create_function() code';
-                    } else {
-                        $ret['function'] = $funcbacktrace['function'];
-                    }
-                }
-            }
-            if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
-                $ret['class'] = $funcbacktrace['class'];
-            }
-            return $ret;
-        }
-        return false;
-    }
-    
-    /**
-     * Standard error message generation callback
-     * 
-     * This method may also be called by a custom error message generator
-     * to fill in template values from the params array, simply
-     * set the third parameter to the error message template string to use
-     * 
-     * The special variable %__msg% is reserved: use it only to specify
-     * where a message passed in by the user should be placed in the template,
-     * like so:
-     * 
-     * Error message: %msg% - internal error
-     * 
-     * If the message passed like so:
-     * 
-     * <code>
-     * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
-     * </code>
-     * 
-     * The returned error message will be "Error message: server error 500 -
-     * internal error"
-     * @param PEAR_ErrorStack
-     * @param array
-     * @param string|false Pre-generated error message template
-     * @static
-     * @return string
-     */
-    function getErrorMessage(&$stack, $err, $template = false)
-    {
-        if ($template) {
-            $mainmsg = $template;
-        } else {
-            $mainmsg = $stack->getErrorMessageTemplate($err['code']);
-        }
-        $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
-        if (is_array($err['params']) && count($err['params'])) {
-            foreach ($err['params'] as $name => $val) {
-                if (is_array($val)) {
-                    // @ is needed in case $val is a multi-dimensional array
-                    $val = @implode(', ', $val);
-                }
-                if (is_object($val)) {
-                    if (method_exists($val, '__toString')) {
-                        $val = $val->__toString();
-                    } else {
-                        PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
-                            'warning', array('obj' => get_class($val)),
-                            'object %obj% passed into getErrorMessage, but has no __toString() method');
-                        $val = 'Object';
-                    }
-                }
-                $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
-            }
-        }
-        return $mainmsg;
-    }
-    
-    /**
-     * Standard Error Message Template generator from code
-     * @return string
-     */
-    function getErrorMessageTemplate($code)
-    {
-        if (!isset($this->_errorMsgs[$code])) {
-            return '%__msg%';
-        }
-        return $this->_errorMsgs[$code];
-    }
-    
-    /**
-     * Set the Error Message Template array
-     * 
-     * The array format must be:
-     * <pre>
-     * array(error code => 'message template',...)
-     * </pre>
-     * 
-     * Error message parameters passed into {@link push()} will be used as input
-     * for the error message.  If the template is 'message %foo% was %bar%', and the
-     * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
-     * be 'message one was six'
-     * @return string
-     */
-    function setErrorMessageTemplate($template)
-    {
-        $this->_errorMsgs = $template;
-    }
-    
-    
-    /**
-     * emulate PEAR::raiseError()
-     * 
-     * @return PEAR_Error
-     */
-    function raiseError()
-    {
-        require_once 'PEAR.php';
-        $args = func_get_args();
-        return call_user_func_array(array('PEAR', 'raiseError'), $args);
-    }
-}
-$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
-$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
-?>
-                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.7.2/PEAR/Exception.php                                                                       100644    1750    1750        33567 11014312742  10721                                                                                                                                                                                                                                                                                                                                                                      <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-/**
- * PEAR_Exception
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Tomas V. V. Cox <cox at idecnet.com>
- * @author     Hans Lellelid <hans at velum.net>
- * @author     Bertrand Mansion <bmansion at mamasam.com>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Exception.php,v 1.29 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.3.3
- */
-
-
-/**
- * Base PEAR_Exception Class
- *
- * 1) Features:
- *
- * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
- * - Definable triggers, shot when exceptions occur
- * - Pretty and informative error messages
- * - Added more context info available (like class, method or cause)
- * - cause can be a PEAR_Exception or an array of mixed
- *   PEAR_Exceptions/PEAR_ErrorStack warnings
- * - callbacks for specific exception classes and their children
- *
- * 2) Ideas:
- *
- * - Maybe a way to define a 'template' for the output
- *
- * 3) Inherited properties from PHP Exception Class:
- *
- * protected $message
- * protected $code
- * protected $line
- * protected $file
- * private   $trace
- *
- * 4) Inherited methods from PHP Exception Class:
- *
- * __clone
- * __construct
- * getMessage
- * getCode
- * getFile
- * getLine
- * getTraceSafe
- * getTraceSafeAsString
- * __toString
- *
- * 5) Usage example
- *
- * <code>
- *  require_once 'PEAR/Exception.php';
- *
- *  class Test {
- *     function foo() {
- *         throw new PEAR_Exception('Error Message', ERROR_CODE);
- *     }
- *  }
- *
- *  function myLogger($pear_exception) {
- *     echo $pear_exception->getMessage();
- *  }
- *  // each time a exception is thrown the 'myLogger' will be called
- *  // (its use is completely optional)
- *  PEAR_Exception::addObserver('myLogger');
- *  $test = new Test;
- *  try {
- *     $test->foo();
- *  } catch (PEAR_Exception $e) {
- *     print $e;
- *  }
- * </code>
- *
- * @category   pear
- * @package    PEAR
- * @author     Tomas V.V.Cox <cox at idecnet.com>
- * @author     Hans Lellelid <hans at velum.net>
- * @author     Bertrand Mansion <bmansion at mamasam.com>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.3.3
- *
- */
-class PEAR_Exception extends Exception
-{
-    const OBSERVER_PRINT = -2;
-    const OBSERVER_TRIGGER = -4;
-    const OBSERVER_DIE = -8;
-    protected $cause;
-    private static $_observers = array();
-    private static $_uniqueid = 0;
-    private $_trace;
-
-    /**
-     * Supported signatures:
-     *  - PEAR_Exception(string $message);
-     *  - PEAR_Exception(string $message, int $code);
-     *  - PEAR_Exception(string $message, Exception $cause);
-     *  - PEAR_Exception(string $message, Exception $cause, int $code);
-     *  - PEAR_Exception(string $message, PEAR_Error $cause);
-     *  - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
-     *  - PEAR_Exception(string $message, array $causes);
-     *  - PEAR_Exception(string $message, array $causes, int $code);
-     * @param string exception message
-     * @param int|Exception|PEAR_Error|array|null exception cause
-     * @param int|null exception code or null
-     */
-    public function __construct($message, $p2 = null, $p3 = null)
-    {
-        if (is_int($p2)) {
-            $code = $p2;
-            $this->cause = null;
-        } elseif (is_object($p2) || is_array($p2)) {
-            // using is_object allows both Exception and PEAR_Error
-            if (is_object($p2) && !($p2 instanceof Exception)) {
-                if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
-                    throw new PEAR_Exception('exception cause must be Exception, ' .
-                        'array, or PEAR_Error');
-                }
-            }
-            $code = $p3;
-            if (is_array($p2) && isset($p2['message'])) {
-                // fix potential problem of passing in a single warning
-                $p2 = array($p2);
-            }
-            $this->cause = $p2;
-        } else {
-            $code = null;
-            $this->cause = null;
-        }
-        parent::__construct($message, $code);
-        $this->signal();
-    }
-
-    /**
-     * @param mixed $callback  - A valid php callback, see php func is_callable()
-     *                         - A PEAR_Exception::OBSERVER_* constant
-     *                         - An array(const PEAR_Exception::OBSERVER_*,
-     *                           mixed $options)
-     * @param string $label    The name of the observer. Use this if you want
-     *                         to remove it later with removeObserver()
-     */
-    public static function addObserver($callback, $label = 'default')
-    {
-        self::$_observers[$label] = $callback;
-    }
-
-    public static function removeObserver($label = 'default')
-    {
-        unset(self::$_observers[$label]);
-    }
-
-    /**
-     * @return int unique identifier for an observer
-     */
-    public static function getUniqueId()
-    {
-        return self::$_uniqueid++;
-    }
-
-    private function signal()
-    {
-        foreach (self::$_observers as $func) {
-            if (is_callable($func)) {
-                call_user_func($func, $this);
-                continue;
-            }
-            settype($func, 'array');
-            switch ($func[0]) {
-                case self::OBSERVER_PRINT :
-                    $f = (isset($func[1])) ? $func[1] : '%s';
-                    printf($f, $this->getMessage());
-                    break;
-                case self::OBSERVER_TRIGGER :
-                    $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
-                    trigger_error($this->getMessage(), $f);
-                    break;
-                case self::OBSERVER_DIE :
-                    $f = (isset($func[1])) ? $func[1] : '%s';
-                    die(printf($f, $this->getMessage()));
-                    break;
-                default:
-                    trigger_error('invalid observer type', E_USER_WARNING);
-            }
-        }
-    }
-
-    /**
-     * Return specific error information that can be used for more detailed
-     * error messages or translation.
-     *
-     * This method may be overridden in child exception classes in order
-     * to add functionality not present in PEAR_Exception and is a placeholder
-     * to define API
-     *
-     * The returned array must be an associative array of parameter => value like so:
-     * <pre>
-     * array('name' => $name, 'context' => array(...))
-     * </pre>
-     * @return array
-     */
-    public function getErrorData()
-    {
-        return array();
-    }
-
-    /**
-     * Returns the exception that caused this exception to be thrown
-     * @access public
-     * @return Exception|array The context of the exception
-     */
-    public function getCause()
-    {
-        return $this->cause;
-    }
-
-    /**
-     * Function must be public to call on caused exceptions
-     * @param array
-     */
-    public function getCauseMessage(&$causes)
-    {
-        $trace = $this->getTraceSafe();
-        $cause = array('class'   => get_class($this),
-                       'message' => $this->message,
-                       'file' => 'unknown',
-                       'line' => 'unknown');
-        if (isset($trace[0])) {
-            if (isset($trace[0]['file'])) {
-                $cause['file'] = $trace[0]['file'];
-                $cause['line'] = $trace[0]['line'];
-            }
-        }
-        $causes[] = $cause;
-        if ($this->cause instanceof PEAR_Exception) {
-            $this->cause->getCauseMessage($causes);
-        } elseif ($this->cause instanceof Exception) {
-            $causes[] = array('class'   => get_class($this->cause),
-                              'message' => $this->cause->getMessage(),
-                              'file' => $this->cause->getFile(),
-                              'line' => $this->cause->getLine());
-        } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
-            $causes[] = array('class' => get_class($this->cause),
-                              'message' => $this->cause->getMessage(),
-                              'file' => 'unknown',
-                              'line' => 'unknown');
-        } elseif (is_array($this->cause)) {
-            foreach ($this->cause as $cause) {
-                if ($cause instanceof PEAR_Exception) {
-                    $cause->getCauseMessage($causes);
-                } elseif ($cause instanceof Exception) {
-                    $causes[] = array('class'   => get_class($cause),
-                                   'message' => $cause->getMessage(),
-                                   'file' => $cause->getFile(),
-                                   'line' => $cause->getLine());
-                } elseif (class_exists('PEAR_Error') && $cause instanceof PEAR_Error) {
-                    $causes[] = array('class' => get_class($cause),
-                                      'message' => $cause->getMessage(),
-                                      'file' => 'unknown',
-                                      'line' => 'unknown');
-                } elseif (is_array($cause) && isset($cause['message'])) {
-                    // PEAR_ErrorStack warning
-                    $causes[] = array(
-                        'class' => $cause['package'],
-                        'message' => $cause['message'],
-                        'file' => isset($cause['context']['file']) ?
-                                            $cause['context']['file'] :
-                                            'unknown',
-                        'line' => isset($cause['context']['line']) ?
-                                            $cause['context']['line'] :
-                                            'unknown',
-                    );
-                }
-            }
-        }
-    }
-
-    public function getTraceSafe()
-    {   
-        if (!isset($this->_trace)) {
-            $this->_trace = $this->getTrace();
-            if (empty($this->_trace)) {
-                $backtrace = debug_backtrace();
-                $this->_trace = array($backtrace[count($backtrace)-1]);
-            }
-        }
-        return $this->_trace;
-    }
-
-    public function getErrorClass()
-    {
-        $trace = $this->getTraceSafe();
-        return $trace[0]['class'];
-    }
-
-    public function getErrorMethod()
-    {
-        $trace = $this->getTraceSafe();
-        return $trace[0]['function'];
-    }
-
-    public function __toString()
-    {
-        if (isset($_SERVER['REQUEST_URI'])) {
-            return $this->toHtml();
-        }
-        return $this->toText();
-    }
-
-    public function toHtml()
-    {
-        $trace = $this->getTraceSafe();
-        $causes = array();
-        $this->getCauseMessage($causes);
-        $html =  '<table border="1" cellspacing="0">' . "\n";
-        foreach ($causes as $i => $cause) {
-            $html .= '<tr><td colspan="3" bgcolor="#ff9999">'
-               . str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
-               . htmlspecialchars($cause['message']) . ' in <b>' . $cause['file'] . '</b> '
-               . 'on line <b>' . $cause['line'] . '</b>'
-               . "</td></tr>\n";
-        }
-        $html .= '<tr><td colspan="3" bgcolor="#aaaaaa" align="center"><b>Exception trace</b></td></tr>' . "\n"
-               . '<tr><td align="center" bgcolor="#cccccc" width="20"><b>#</b></td>'
-               . '<td align="center" bgcolor="#cccccc"><b>Function</b></td>'
-               . '<td align="center" bgcolor="#cccccc"><b>Location</b></td></tr>' . "\n";
-
-        foreach ($trace as $k => $v) {
-            $html .= '<tr><td align="center">' . $k . '</td>'
-                   . '<td>';
-            if (!empty($v['class'])) {
-                $html .= $v['class'] . $v['type'];
-            }
-            $html .= $v['function'];
-            $args = array();
-            if (!empty($v['args'])) {
-                foreach ($v['args'] as $arg) {
-                    if (is_null($arg)) $args[] = 'null';
-                    elseif (is_array($arg)) $args[] = 'Array';
-                    elseif (is_object($arg)) $args[] = 'Object('.get_class($arg).')';
-                    elseif (is_bool($arg)) $args[] = $arg ? 'true' : 'false';
-                    elseif (is_int($arg) || is_double($arg)) $args[] = $arg;
-                    else {
-                        $arg = (string)$arg;
-                        $str = htmlspecialchars(substr($arg, 0, 16));
-                        if (strlen($arg) > 16) $str .= '&hellip;';
-                        $args[] = "'" . $str . "'";
-                    }
-                }
-            }
-            $html .= '(' . implode(', ',$args) . ')'
-                   . '</td>'
-                   . '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
-                   . ':' . (isset($v['line']) ? $v['line'] : 'unknown')
-                   . '</td></tr>' . "\n";
-        }
-        $html .= '<tr><td align="center">' . ($k+1) . '</td>'
-               . '<td>{main}</td>'
-               . '<td>&nbsp;</td></tr>' . "\n"
-               . '</table>';
-        return $html;
-    }
-
-    public function toText()
-    {
-        $causes = array();
-        $this->getCauseMessage($causes);
-        $causeMsg = '';
-        foreach ($causes as $i => $cause) {
-            $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': '
-                   . $cause['message'] . ' in ' . $cause['file']
-                   . ' on line ' . $cause['line'] . "\n";
-        }
-        return $causeMsg . $this->getTraceAsString();
-    }
-}
-
-?>                                                                                                                                         PEAR-1.7.2/PEAR/FixPHP5PEARWarnings.php                                                             100644    1750    1750          231 11014312742  12245                                                                                                                                                                                                                                                                                                                                                                      <?php
+// }}}                                                                                                                                                                                                                                                                                            PEAR-1.8.0/PEAR/ErrorStack.php                                                                      100664     764     764       104210      100664  10662                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * Error Stack Implementation
+ * 
+ * This is an incredibly simple implementation of a very complex error handling
+ * facility.  It contains the ability
+ * to track multiple errors from multiple packages simultaneously.  In addition,
+ * it can track errors of many levels, save data along with the error, context
+ * information such as the exact file, line number, class and function that
+ * generated the error, and if necessary, it can raise a traditional PEAR_Error.
+ * It has built-in support for PEAR::Log, to log errors as they occur
+ * 
+ * Since version 0.2alpha, it is also possible to selectively ignore errors,
+ * through the use of an error callback, see {@link pushCallback()}
+ * 
+ * Since version 0.3alpha, it is possible to specify the exception class
+ * returned from {@link push()}
+ *
+ * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
+ * still be done quite handily in an error callback or by manipulating the returned array
+ * @category   Debugging
+ * @package    PEAR_ErrorStack
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  2004-2008 Greg Beaver
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: ErrorStack.php,v 1.29 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
+ */
+
+/**
+ * Singleton storage
+ * 
+ * Format:
+ * <pre>
+ * array(
+ *  'package1' => PEAR_ErrorStack object,
+ *  'package2' => PEAR_ErrorStack object,
+ *  ...
+ * )
+ * </pre>
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();
+
+/**
+ * Global error callback (default)
+ * 
+ * This is only used if set to non-false.  * is the default callback for
+ * all packages, whereas specific packages may set a default callback
+ * for all instances, regardless of whether they are a singleton or not.
+ *
+ * To exclude non-singletons, only set the local callback for the singleton
+ * @see PEAR_ErrorStack::setDefaultCallback()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
+    '*' => false,
+);
+
+/**
+ * Global Log object (default)
+ * 
+ * This is only used if set to non-false.  Use to set a default log object for
+ * all stacks, regardless of instantiation order or location
+ * @see PEAR_ErrorStack::setDefaultLogger()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;
+
+/**
+ * Global Overriding Callback
+ * 
+ * This callback will override any error callbacks that specific loggers have set.
+ * Use with EXTREME caution
+ * @see PEAR_ErrorStack::staticPushCallback()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
+
+/**#@+
+ * One of four possible return values from the error Callback
+ * @see PEAR_ErrorStack::_errorCallback()
+ */
+/**
+ * If this is returned, then the error will be both pushed onto the stack
+ * and logged.
+ */
+define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
+/**
+ * If this is returned, then the error will only be pushed onto the stack,
+ * and not logged.
+ */
+define('PEAR_ERRORSTACK_PUSH', 2);
+/**
+ * If this is returned, then the error will only be logged, but not pushed
+ * onto the error stack.
+ */
+define('PEAR_ERRORSTACK_LOG', 3);
+/**
+ * If this is returned, then the error is completely ignored.
+ */
+define('PEAR_ERRORSTACK_IGNORE', 4);
+/**
+ * If this is returned, then the error is logged and die() is called.
+ */
+define('PEAR_ERRORSTACK_DIE', 5);
+/**#@-*/
+
+/**
+ * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
+ * the singleton method.
+ */
+define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);
+
+/**
+ * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
+ * that has no __toString() method
+ */
+define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
+/**
+ * Error Stack Implementation
+ *
+ * Usage:
+ * <code>
+ * // global error stack
+ * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
+ * // local error stack
+ * $local_stack = new PEAR_ErrorStack('MyPackage');
+ * </code>
+ * @author     Greg Beaver <cellog at php.net>
+ * @version    1.8.0
+ * @package    PEAR_ErrorStack
+ * @category   Debugging
+ * @copyright  2004-2008 Greg Beaver
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: ErrorStack.php,v 1.29 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
+ */
+class PEAR_ErrorStack {
+    /**
+     * Errors are stored in the order that they are pushed on the stack.
+     * @since 0.4alpha Errors are no longer organized by error level.
+     * This renders pop() nearly unusable, and levels could be more easily
+     * handled in a callback anyway
+     * @var array
+     * @access private
+     */
+    var $_errors = array();
+
+    /**
+     * Storage of errors by level.
+     *
+     * Allows easy retrieval and deletion of only errors from a particular level
+     * @since PEAR 1.4.0dev
+     * @var array
+     * @access private
+     */
+    var $_errorsByLevel = array();
+
+    /**
+     * Package name this error stack represents
+     * @var string
+     * @access protected
+     */
+    var $_package;
+    
+    /**
+     * Determines whether a PEAR_Error is thrown upon every error addition
+     * @var boolean
+     * @access private
+     */
+    var $_compat = false;
+    
+    /**
+     * If set to a valid callback, this will be used to generate the error
+     * message from the error code, otherwise the message passed in will be
+     * used
+     * @var false|string|array
+     * @access private
+     */
+    var $_msgCallback = false;
+    
+    /**
+     * If set to a valid callback, this will be used to generate the error
+     * context for an error.  For PHP-related errors, this will be a file
+     * and line number as retrieved from debug_backtrace(), but can be
+     * customized for other purposes.  The error might actually be in a separate
+     * configuration file, or in a database query.
+     * @var false|string|array
+     * @access protected
+     */
+    var $_contextCallback = false;
+    
+    /**
+     * If set to a valid callback, this will be called every time an error
+     * is pushed onto the stack.  The return value will be used to determine
+     * whether to allow an error to be pushed or logged.
+     * 
+     * The return value must be one an PEAR_ERRORSTACK_* constant
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @var false|string|array
+     * @access protected
+     */
+    var $_errorCallback = array();
+    
+    /**
+     * PEAR::Log object for logging errors
+     * @var false|Log
+     * @access protected
+     */
+    var $_logger = false;
+    
+    /**
+     * Error messages - designed to be overridden
+     * @var array
+     * @abstract
+     */
+    var $_errorMsgs = array();
+    
+    /**
+     * Set up a new error stack
+     * 
+     * @param string   $package name of the package this error stack represents
+     * @param callback $msgCallback callback used for error message generation
+     * @param callback $contextCallback callback used for context generation,
+     *                 defaults to {@link getFileLine()}
+     * @param boolean  $throwPEAR_Error
+     */
+    function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false,
+                         $throwPEAR_Error = false)
+    {
+        $this->_package = $package;
+        $this->setMessageCallback($msgCallback);
+        $this->setContextCallback($contextCallback);
+        $this->_compat = $throwPEAR_Error;
+    }
+    
+    /**
+     * Return a single error stack for this package.
+     * 
+     * Note that all parameters are ignored if the stack for package $package
+     * has already been instantiated
+     * @param string   $package name of the package this error stack represents
+     * @param callback $msgCallback callback used for error message generation
+     * @param callback $contextCallback callback used for context generation,
+     *                 defaults to {@link getFileLine()}
+     * @param boolean  $throwPEAR_Error
+     * @param string   $stackClass class to instantiate
+     * @static
+     * @return PEAR_ErrorStack
+     */
+    function &singleton($package, $msgCallback = false, $contextCallback = false,
+                         $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack')
+    {
+        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
+        }
+        if (!class_exists($stackClass)) {
+            if (function_exists('debug_backtrace')) {
+                $trace = debug_backtrace();
+            }
+            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
+                'exception', array('stackclass' => $stackClass),
+                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
+                false, $trace);
+        }
+        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
+            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
+
+        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
+    }
+
+    /**
+     * Internal error handler for PEAR_ErrorStack class
+     * 
+     * Dies if the error is an exception (and would have died anyway)
+     * @access private
+     */
+    function _handleError($err)
+    {
+        if ($err['level'] == 'exception') {
+            $message = $err['message'];
+            if (isset($_SERVER['REQUEST_URI'])) {
+                echo '<br />';
+            } else {
+                echo "\n";
+            }
+            var_dump($err['context']);
+            die($message);
+        }
+    }
+    
+    /**
+     * Set up a PEAR::Log object for all error stacks that don't have one
+     * @param Log $log 
+     * @static
+     */
+    function setDefaultLogger(&$log)
+    {
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+        } elseif (is_callable($log)) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+	}
+    }
+    
+    /**
+     * Set up a PEAR::Log object for this error stack
+     * @param Log $log 
+     */
+    function setLogger(&$log)
+    {
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $this->_logger = &$log;
+        } elseif (is_callable($log)) {
+            $this->_logger = &$log;
+        }
+    }
+    
+    /**
+     * Set an error code => error message mapping callback
+     * 
+     * This method sets the callback that can be used to generate error
+     * messages for any instance
+     * @param array|string Callback function/method
+     */
+    function setMessageCallback($msgCallback)
+    {
+        if (!$msgCallback) {
+            $this->_msgCallback = array(&$this, 'getErrorMessage');
+        } else {
+            if (is_callable($msgCallback)) {
+                $this->_msgCallback = $msgCallback;
+            }
+        }
+    }
+    
+    /**
+     * Get an error code => error message mapping callback
+     * 
+     * This method returns the current callback that can be used to generate error
+     * messages
+     * @return array|string|false Callback function/method or false if none
+     */
+    function getMessageCallback()
+    {
+        return $this->_msgCallback;
+    }
+    
+    /**
+     * Sets a default callback to be used by all error stacks
+     * 
+     * This method sets the callback that can be used to generate error
+     * messages for a singleton
+     * @param array|string Callback function/method
+     * @param string Package name, or false for all packages
+     * @static
+     */
+    function setDefaultCallback($callback = false, $package = false)
+    {
+        if (!is_callable($callback)) {
+            $callback = false;
+        }
+        $package = $package ? $package : '*';
+        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
+    }
+    
+    /**
+     * Set a callback that generates context information (location of error) for an error stack
+     * 
+     * This method sets the callback that can be used to generate context
+     * information for an error.  Passing in NULL will disable context generation
+     * and remove the expensive call to debug_backtrace()
+     * @param array|string|null Callback function/method
+     */
+    function setContextCallback($contextCallback)
+    {
+        if ($contextCallback === null) {
+            return $this->_contextCallback = false;
+        }
+        if (!$contextCallback) {
+            $this->_contextCallback = array(&$this, 'getFileLine');
+        } else {
+            if (is_callable($contextCallback)) {
+                $this->_contextCallback = $contextCallback;
+            }
+        }
+    }
+    
+    /**
+     * Set an error Callback
+     * If set to a valid callback, this will be called every time an error
+     * is pushed onto the stack.  The return value will be used to determine
+     * whether to allow an error to be pushed or logged.
+     * 
+     * The return value must be one of the ERRORSTACK_* constants.
+     * 
+     * This functionality can be used to emulate PEAR's pushErrorHandling, and
+     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
+     * the error stack or logging
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @see popCallback()
+     * @param string|array $cb
+     */
+    function pushCallback($cb)
+    {
+        array_push($this->_errorCallback, $cb);
+    }
+    
+    /**
+     * Remove a callback from the error callback stack
+     * @see pushCallback()
+     * @return array|string|false
+     */
+    function popCallback()
+    {
+        if (!count($this->_errorCallback)) {
+            return false;
+        }
+        return array_pop($this->_errorCallback);
+    }
+    
+    /**
+     * Set a temporary overriding error callback for every package error stack
+     *
+     * Use this to temporarily disable all existing callbacks (can be used
+     * to emulate the @ operator, for instance)
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @see staticPopCallback(), pushCallback()
+     * @param string|array $cb
+     * @static
+     */
+    function staticPushCallback($cb)
+    {
+        array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
+    }
+    
+    /**
+     * Remove a temporary overriding error callback
+     * @see staticPushCallback()
+     * @return array|string|false
+     * @static
+     */
+    function staticPopCallback()
+    {
+        $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
+        if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
+            $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
+        }
+        return $ret;
+    }
+    
+    /**
+     * Add an error to the stack
+     * 
+     * If the message generator exists, it is called with 2 parameters.
+     *  - the current Error Stack object
+     *  - an array that is in the same format as an error.  Available indices
+     *    are 'code', 'package', 'time', 'params', 'level', and 'context'
+     * 
+     * Next, if the error should contain context information, this is
+     * handled by the context grabbing method.
+     * Finally, the error is pushed onto the proper error stack
+     * @param int    $code      Package-specific error code
+     * @param string $level     Error level.  This is NOT spell-checked
+     * @param array  $params    associative array of error parameters
+     * @param string $msg       Error message, or a portion of it if the message
+     *                          is to be generated
+     * @param array  $repackage If this error re-packages an error pushed by
+     *                          another package, place the array returned from
+     *                          {@link pop()} in this parameter
+     * @param array  $backtrace Protected parameter: use this to pass in the
+     *                          {@link debug_backtrace()} that should be used
+     *                          to find error context
+     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
+     * thrown.  If a PEAR_Error is returned, the userinfo
+     * property is set to the following array:
+     * 
+     * <code>
+     * array(
+     *    'code' => $code,
+     *    'params' => $params,
+     *    'package' => $this->_package,
+     *    'level' => $level,
+     *    'time' => time(),
+     *    'context' => $context,
+     *    'message' => $msg,
+     * //['repackage' => $err] repackaged error array/Exception class
+     * );
+     * </code>
+     * 
+     * Normally, the previous array is returned.
+     */
+    function push($code, $level = 'error', $params = array(), $msg = false,
+                  $repackage = false, $backtrace = false)
+    {
+        $context = false;
+        // grab error context
+        if ($this->_contextCallback) {
+            if (!$backtrace) {
+                $backtrace = debug_backtrace();
+            }
+            $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
+        }
+        
+        // save error
+        $time = explode(' ', microtime());
+        $time = $time[1] + $time[0];
+        $err = array(
+                'code' => $code,
+                'params' => $params,
+                'package' => $this->_package,
+                'level' => $level,
+                'time' => $time,
+                'context' => $context,
+                'message' => $msg,
+               );
+
+        if ($repackage) {
+            $err['repackage'] = $repackage;
+        }
+
+        // set up the error message, if necessary
+        if ($this->_msgCallback) {
+            $msg = call_user_func_array($this->_msgCallback,
+                                        array(&$this, $err));
+            $err['message'] = $msg;
+        }        
+        $push = $log = true;
+        $die = false;
+        // try the overriding callback first
+        $callback = $this->staticPopCallback();
+        if ($callback) {
+            $this->staticPushCallback($callback);
+        }
+        if (!is_callable($callback)) {
+            // try the local callback next
+            $callback = $this->popCallback();
+            if (is_callable($callback)) {
+                $this->pushCallback($callback);
+            } else {
+                // try the default callback
+                $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
+                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
+                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
+            }
+        }
+        if (is_callable($callback)) {
+            switch(call_user_func($callback, $err)){
+            	case PEAR_ERRORSTACK_IGNORE: 
+            		return $err;
+        		break;
+            	case PEAR_ERRORSTACK_PUSH: 
+            		$log = false;
+        		break;
+            	case PEAR_ERRORSTACK_LOG: 
+            		$push = false;
+        		break;
+            	case PEAR_ERRORSTACK_DIE: 
+            		$die = true;
+        		break;
+                // anything else returned has the same effect as pushandlog
+            }
+        }
+        if ($push) {
+            array_unshift($this->_errors, $err);
+            if (!isset($this->_errorsByLevel[$err['level']])) {
+                $this->_errorsByLevel[$err['level']] = array();
+            }
+            $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
+        }
+        if ($log) {
+            if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
+                $this->_log($err);
+            }
+        }
+        if ($die) {
+            die();
+        }
+        if ($this->_compat && $push) {
+            return $this->raiseError($msg, $code, null, null, $err);
+        }
+        return $err;
+    }
+    
+    /**
+     * Static version of {@link push()}
+     * 
+     * @param string $package   Package name this error belongs to
+     * @param int    $code      Package-specific error code
+     * @param string $level     Error level.  This is NOT spell-checked
+     * @param array  $params    associative array of error parameters
+     * @param string $msg       Error message, or a portion of it if the message
+     *                          is to be generated
+     * @param array  $repackage If this error re-packages an error pushed by
+     *                          another package, place the array returned from
+     *                          {@link pop()} in this parameter
+     * @param array  $backtrace Protected parameter: use this to pass in the
+     *                          {@link debug_backtrace()} that should be used
+     *                          to find error context
+     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
+     *                          thrown.  see docs for {@link push()}
+     * @static
+     */
+    function staticPush($package, $code, $level = 'error', $params = array(),
+                        $msg = false, $repackage = false, $backtrace = false)
+    {
+        $s = &PEAR_ErrorStack::singleton($package);
+        if ($s->_contextCallback) {
+            if (!$backtrace) {
+                if (function_exists('debug_backtrace')) {
+                    $backtrace = debug_backtrace();
+                }
+            }
+        }
+        return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
+    }
+    
+    /**
+     * Log an error using PEAR::Log
+     * @param array $err Error array
+     * @param array $levels Error level => Log constant map
+     * @access protected
+     */
+    function _log($err)
+    {
+        if ($this->_logger) {
+            $logger = &$this->_logger;
+        } else {
+            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
+        }
+        if (is_a($logger, 'Log')) {
+            $levels = array(
+                'exception' => PEAR_LOG_CRIT,
+                'alert' => PEAR_LOG_ALERT,
+                'critical' => PEAR_LOG_CRIT,
+                'error' => PEAR_LOG_ERR,
+                'warning' => PEAR_LOG_WARNING,
+                'notice' => PEAR_LOG_NOTICE,
+                'info' => PEAR_LOG_INFO,
+                'debug' => PEAR_LOG_DEBUG);
+            if (isset($levels[$err['level']])) {
+                $level = $levels[$err['level']];
+            } else {
+                $level = PEAR_LOG_INFO;
+            }
+            $logger->log($err['message'], $level, $err);
+        } else { // support non-standard logs
+            call_user_func($logger, $err);
+        }
+    }
+
+    
+    /**
+     * Pop an error off of the error stack
+     * 
+     * @return false|array
+     * @since 0.4alpha it is no longer possible to specify a specific error
+     * level to return - the last error pushed will be returned, instead
+     */
+    function pop()
+    {
+        $err = @array_shift($this->_errors);
+        if (!is_null($err)) {
+            @array_pop($this->_errorsByLevel[$err['level']]);
+            if (!count($this->_errorsByLevel[$err['level']])) {
+                unset($this->_errorsByLevel[$err['level']]);
+            }
+        }
+        return $err;
+    }
+
+    /**
+     * Pop an error off of the error stack, static method
+     *
+     * @param string package name
+     * @return boolean
+     * @since PEAR1.5.0a1
+     */
+    function staticPop($package)
+    {
+        if ($package) {
+            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+                return false;
+            }
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
+        }
+    }
+
+    /**
+     * Determine whether there are any errors on the stack
+     * @param string|array Level name.  Use to determine if any errors
+     * of level (string), or levels (array) have been pushed
+     * @return boolean
+     */
+    function hasErrors($level = false)
+    {
+        if ($level) {
+            return isset($this->_errorsByLevel[$level]);
+        }
+        return count($this->_errors);
+    }
+    
+    /**
+     * Retrieve all errors since last purge
+     * 
+     * @param boolean set in order to empty the error stack
+     * @param string level name, to return only errors of a particular severity
+     * @return array
+     */
+    function getErrors($purge = false, $level = false)
+    {
+        if (!$purge) {
+            if ($level) {
+                if (!isset($this->_errorsByLevel[$level])) {
+                    return array();
+                } else {
+                    return $this->_errorsByLevel[$level];
+                }
+            } else {
+                return $this->_errors;
+            }
+        }
+        if ($level) {
+            $ret = $this->_errorsByLevel[$level];
+            foreach ($this->_errorsByLevel[$level] as $i => $unused) {
+                // entries are references to the $_errors array
+                $this->_errorsByLevel[$level][$i] = false;
+            }
+            // array_filter removes all entries === false
+            $this->_errors = array_filter($this->_errors);
+            unset($this->_errorsByLevel[$level]);
+            return $ret;
+        }
+        $ret = $this->_errors;
+        $this->_errors = array();
+        $this->_errorsByLevel = array();
+        return $ret;
+    }
+    
+    /**
+     * Determine whether there are any errors on a single error stack, or on any error stack
+     *
+     * The optional parameter can be used to test the existence of any errors without the need of
+     * singleton instantiation
+     * @param string|false Package name to check for errors
+     * @param string Level name to check for a particular severity
+     * @return boolean
+     * @static
+     */
+    function staticHasErrors($package = false, $level = false)
+    {
+        if ($package) {
+            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+                return false;
+            }
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
+        }
+        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
+            if ($obj->hasErrors($level)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Get a list of all errors since last purge, organized by package
+     * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
+     * @param boolean $purge Set to purge the error stack of existing errors
+     * @param string  $level Set to a level name in order to retrieve only errors of a particular level
+     * @param boolean $merge Set to return a flat array, not organized by package
+     * @param array   $sortfunc Function used to sort a merged array - default
+     *        sorts by time, and should be good for most cases
+     * @static
+     * @return array 
+     */
+    function staticGetErrors($purge = false, $level = false, $merge = false,
+                             $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
+    {
+        $ret = array();
+        if (!is_callable($sortfunc)) {
+            $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
+        }
+        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
+            $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
+            if ($test) {
+                if ($merge) {
+                    $ret = array_merge($ret, $test);
+                } else {
+                    $ret[$package] = $test;
+                }
+            }
+        }
+        if ($merge) {
+            usort($ret, $sortfunc);
+        }
+        return $ret;
+    }
+    
+    /**
+     * Error sorting function, sorts by time
+     * @access private
+     */
+    function _sortErrors($a, $b)
+    {
+        if ($a['time'] == $b['time']) {
+            return 0;
+        }
+        if ($a['time'] < $b['time']) {
+            return 1;
+        }
+        return -1;
+    }
+
+    /**
+     * Standard file/line number/function/class context callback
+     *
+     * This function uses a backtrace generated from {@link debug_backtrace()}
+     * and so will not work at all in PHP < 4.3.0.  The frame should
+     * reference the frame that contains the source of the error.
+     * @return array|false either array('file' => file, 'line' => line,
+     *         'function' => function name, 'class' => class name) or
+     *         if this doesn't work, then false
+     * @param unused
+     * @param integer backtrace frame.
+     * @param array Results of debug_backtrace()
+     * @static
+     */
+    function getFileLine($code, $params, $backtrace = null)
+    {
+        if ($backtrace === null) {
+            return false;
+        }
+        $frame = 0;
+        $functionframe = 1;
+        if (!isset($backtrace[1])) {
+            $functionframe = 0;
+        } else {
+            while (isset($backtrace[$functionframe]['function']) &&
+                  $backtrace[$functionframe]['function'] == 'eval' &&
+                  isset($backtrace[$functionframe + 1])) {
+                $functionframe++;
+            }
+        }
+        if (isset($backtrace[$frame])) {
+            if (!isset($backtrace[$frame]['file'])) {
+                $frame++;
+            }
+            $funcbacktrace = $backtrace[$functionframe];
+            $filebacktrace = $backtrace[$frame];
+            $ret = array('file' => $filebacktrace['file'],
+                         'line' => $filebacktrace['line']);
+            // rearrange for eval'd code or create function errors
+            if (strpos($filebacktrace['file'], '(') && 
+            	  preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
+                  $matches)) {
+                $ret['file'] = $matches[1];
+                $ret['line'] = $matches[2] + 0;
+            }
+            if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
+                if ($funcbacktrace['function'] != 'eval') {
+                    if ($funcbacktrace['function'] == '__lambda_func') {
+                        $ret['function'] = 'create_function() code';
+                    } else {
+                        $ret['function'] = $funcbacktrace['function'];
+                    }
+                }
+            }
+            if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
+                $ret['class'] = $funcbacktrace['class'];
+            }
+            return $ret;
+        }
+        return false;
+    }
+    
+    /**
+     * Standard error message generation callback
+     * 
+     * This method may also be called by a custom error message generator
+     * to fill in template values from the params array, simply
+     * set the third parameter to the error message template string to use
+     * 
+     * The special variable %__msg% is reserved: use it only to specify
+     * where a message passed in by the user should be placed in the template,
+     * like so:
+     * 
+     * Error message: %msg% - internal error
+     * 
+     * If the message passed like so:
+     * 
+     * <code>
+     * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
+     * </code>
+     * 
+     * The returned error message will be "Error message: server error 500 -
+     * internal error"
+     * @param PEAR_ErrorStack
+     * @param array
+     * @param string|false Pre-generated error message template
+     * @static
+     * @return string
+     */
+    function getErrorMessage(&$stack, $err, $template = false)
+    {
+        if ($template) {
+            $mainmsg = $template;
+        } else {
+            $mainmsg = $stack->getErrorMessageTemplate($err['code']);
+        }
+        $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
+        if (is_array($err['params']) && count($err['params'])) {
+            foreach ($err['params'] as $name => $val) {
+                if (is_array($val)) {
+                    // @ is needed in case $val is a multi-dimensional array
+                    $val = @implode(', ', $val);
+                }
+                if (is_object($val)) {
+                    if (method_exists($val, '__toString')) {
+                        $val = $val->__toString();
+                    } else {
+                        PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
+                            'warning', array('obj' => get_class($val)),
+                            'object %obj% passed into getErrorMessage, but has no __toString() method');
+                        $val = 'Object';
+                    }
+                }
+                $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
+            }
+        }
+        return $mainmsg;
+    }
+    
+    /**
+     * Standard Error Message Template generator from code
+     * @return string
+     */
+    function getErrorMessageTemplate($code)
+    {
+        if (!isset($this->_errorMsgs[$code])) {
+            return '%__msg%';
+        }
+        return $this->_errorMsgs[$code];
+    }
+    
+    /**
+     * Set the Error Message Template array
+     * 
+     * The array format must be:
+     * <pre>
+     * array(error code => 'message template',...)
+     * </pre>
+     * 
+     * Error message parameters passed into {@link push()} will be used as input
+     * for the error message.  If the template is 'message %foo% was %bar%', and the
+     * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
+     * be 'message one was six'
+     * @return string
+     */
+    function setErrorMessageTemplate($template)
+    {
+        $this->_errorMsgs = $template;
+    }
+    
+    
+    /**
+     * emulate PEAR::raiseError()
+     * 
+     * @return PEAR_Error
+     */
+    function raiseError()
+    {
+        require_once 'PEAR.php';
+        $args = func_get_args();
+        return call_user_func_array(array('PEAR', 'raiseError'), $args);
+    }
+}
+$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
+$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
+?>
+                                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.8.0/PEAR/Exception.php                                                                       100664     764     764        33642      100664  10533                                                                                                                                                                                                                                                                                                                                                                      <?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
+/**
+ * PEAR_Exception
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V. V. Cox <cox at idecnet.com>
+ * @author     Hans Lellelid <hans at velum.net>
+ * @author     Bertrand Mansion <bmansion at mamasam.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Exception.php,v 1.30 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.3.3
+ */
+
+
+/**
+ * Base PEAR_Exception Class
+ *
+ * 1) Features:
+ *
+ * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
+ * - Definable triggers, shot when exceptions occur
+ * - Pretty and informative error messages
+ * - Added more context info available (like class, method or cause)
+ * - cause can be a PEAR_Exception or an array of mixed
+ *   PEAR_Exceptions/PEAR_ErrorStack warnings
+ * - callbacks for specific exception classes and their children
+ *
+ * 2) Ideas:
+ *
+ * - Maybe a way to define a 'template' for the output
+ *
+ * 3) Inherited properties from PHP Exception Class:
+ *
+ * protected $message
+ * protected $code
+ * protected $line
+ * protected $file
+ * private   $trace
+ *
+ * 4) Inherited methods from PHP Exception Class:
+ *
+ * __clone
+ * __construct
+ * getMessage
+ * getCode
+ * getFile
+ * getLine
+ * getTraceSafe
+ * getTraceSafeAsString
+ * __toString
+ *
+ * 5) Usage example
+ *
+ * <code>
+ *  require_once 'PEAR/Exception.php';
+ *
+ *  class Test {
+ *     function foo() {
+ *         throw new PEAR_Exception('Error Message', ERROR_CODE);
+ *     }
+ *  }
+ *
+ *  function myLogger($pear_exception) {
+ *     echo $pear_exception->getMessage();
+ *  }
+ *  // each time a exception is thrown the 'myLogger' will be called
+ *  // (its use is completely optional)
+ *  PEAR_Exception::addObserver('myLogger');
+ *  $test = new Test;
+ *  try {
+ *     $test->foo();
+ *  } catch (PEAR_Exception $e) {
+ *     print $e;
+ *  }
+ * </code>
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Tomas V.V.Cox <cox at idecnet.com>
+ * @author     Hans Lellelid <hans at velum.net>
+ * @author     Bertrand Mansion <bmansion at mamasam.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.3.3
+ *
+ */
+class PEAR_Exception extends Exception
+{
+    const OBSERVER_PRINT = -2;
+    const OBSERVER_TRIGGER = -4;
+    const OBSERVER_DIE = -8;
+    protected $cause;
+    private static $_observers = array();
+    private static $_uniqueid = 0;
+    private $_trace;
+
+    /**
+     * Supported signatures:
+     *  - PEAR_Exception(string $message);
+     *  - PEAR_Exception(string $message, int $code);
+     *  - PEAR_Exception(string $message, Exception $cause);
+     *  - PEAR_Exception(string $message, Exception $cause, int $code);
+     *  - PEAR_Exception(string $message, PEAR_Error $cause);
+     *  - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
+     *  - PEAR_Exception(string $message, array $causes);
+     *  - PEAR_Exception(string $message, array $causes, int $code);
+     * @param string exception message
+     * @param int|Exception|PEAR_Error|array|null exception cause
+     * @param int|null exception code or null
+     */
+    public function __construct($message, $p2 = null, $p3 = null)
+    {
+        if (is_int($p2)) {
+            $code = $p2;
+            $this->cause = null;
+        } elseif (is_object($p2) || is_array($p2)) {
+            // using is_object allows both Exception and PEAR_Error
+            if (is_object($p2) && !($p2 instanceof Exception)) {
+                if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
+                    throw new PEAR_Exception('exception cause must be Exception, ' .
+                        'array, or PEAR_Error');
+                }
+            }
+            $code = $p3;
+            if (is_array($p2) && isset($p2['message'])) {
+                // fix potential problem of passing in a single warning
+                $p2 = array($p2);
+            }
+            $this->cause = $p2;
+        } else {
+            $code = null;
+            $this->cause = null;
+        }
+        parent::__construct($message, $code);
+        $this->signal();
+    }
+
+    /**
+     * @param mixed $callback  - A valid php callback, see php func is_callable()
+     *                         - A PEAR_Exception::OBSERVER_* constant
+     *                         - An array(const PEAR_Exception::OBSERVER_*,
+     *                           mixed $options)
+     * @param string $label    The name of the observer. Use this if you want
+     *                         to remove it later with removeObserver()
+     */
+    public static function addObserver($callback, $label = 'default')
+    {
+        self::$_observers[$label] = $callback;
+    }
+
+    public static function removeObserver($label = 'default')
+    {
+        unset(self::$_observers[$label]);
+    }
+
+    /**
+     * @return int unique identifier for an observer
+     */
+    public static function getUniqueId()
+    {
+        return self::$_uniqueid++;
+    }
+
+    private function signal()
+    {
+        foreach (self::$_observers as $func) {
+            if (is_callable($func)) {
+                call_user_func($func, $this);
+                continue;
+            }
+            settype($func, 'array');
+            switch ($func[0]) {
+                case self::OBSERVER_PRINT :
+                    $f = (isset($func[1])) ? $func[1] : '%s';
+                    printf($f, $this->getMessage());
+                    break;
+                case self::OBSERVER_TRIGGER :
+                    $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
+                    trigger_error($this->getMessage(), $f);
+                    break;
+                case self::OBSERVER_DIE :
+                    $f = (isset($func[1])) ? $func[1] : '%s';
+                    die(printf($f, $this->getMessage()));
+                    break;
+                default:
+                    trigger_error('invalid observer type', E_USER_WARNING);
+            }
+        }
+    }
+
+    /**
+     * Return specific error information that can be used for more detailed
+     * error messages or translation.
+     *
+     * This method may be overridden in child exception classes in order
+     * to add functionality not present in PEAR_Exception and is a placeholder
+     * to define API
+     *
+     * The returned array must be an associative array of parameter => value like so:
+     * <pre>
+     * array('name' => $name, 'context' => array(...))
+     * </pre>
+     * @return array
+     */
+    public function getErrorData()
+    {
+        return array();
+    }
+
+    /**
+     * Returns the exception that caused this exception to be thrown
+     * @access public
+     * @return Exception|array The context of the exception
+     */
+    public function getCause()
+    {
+        return $this->cause;
+    }
+
+    /**
+     * Function must be public to call on caused exceptions
+     * @param array
+     */
+    public function getCauseMessage(&$causes)
+    {
+        $trace = $this->getTraceSafe();
+        $cause = array('class'   => get_class($this),
+                       'message' => $this->message,
+                       'file' => 'unknown',
+                       'line' => 'unknown');
+        if (isset($trace[0])) {
+            if (isset($trace[0]['file'])) {
+                $cause['file'] = $trace[0]['file'];
+                $cause['line'] = $trace[0]['line'];
+            }
+        }
+        $causes[] = $cause;
+        if ($this->cause instanceof PEAR_Exception) {
+            $this->cause->getCauseMessage($causes);
+        } elseif ($this->cause instanceof Exception) {
+            $causes[] = array('class'   => get_class($this->cause),
+                              'message' => $this->cause->getMessage(),
+                              'file' => $this->cause->getFile(),
+                              'line' => $this->cause->getLine());
+        } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
+            $causes[] = array('class' => get_class($this->cause),
+                              'message' => $this->cause->getMessage(),
+                              'file' => 'unknown',
+                              'line' => 'unknown');
+        } elseif (is_array($this->cause)) {
+            foreach ($this->cause as $cause) {
+                if ($cause instanceof PEAR_Exception) {
+                    $cause->getCauseMessage($causes);
+                } elseif ($cause instanceof Exception) {
+                    $causes[] = array('class'   => get_class($cause),
+                                   'message' => $cause->getMessage(),
+                                   'file' => $cause->getFile(),
+                                   'line' => $cause->getLine());
+                } elseif (class_exists('PEAR_Error') && $cause instanceof PEAR_Error) {
+                    $causes[] = array('class' => get_class($cause),
+                                      'message' => $cause->getMessage(),
+                                      'file' => 'unknown',
+                                      'line' => 'unknown');
+                } elseif (is_array($cause) && isset($cause['message'])) {
+                    // PEAR_ErrorStack warning
+                    $causes[] = array(
+                        'class' => $cause['package'],
+                        'message' => $cause['message'],
+                        'file' => isset($cause['context']['file']) ?
+                                            $cause['context']['file'] :
+                                            'unknown',
+                        'line' => isset($cause['context']['line']) ?
+                                            $cause['context']['line'] :
+                                            'unknown',
+                    );
+                }
+            }
+        }
+    }
+
+    public function getTraceSafe()
+    {   
+        if (!isset($this->_trace)) {
+            $this->_trace = $this->getTrace();
+            if (empty($this->_trace)) {
+                $backtrace = debug_backtrace();
+                $this->_trace = array($backtrace[count($backtrace)-1]);
+            }
+        }
+        return $this->_trace;
+    }
+
+    public function getErrorClass()
+    {
+        $trace = $this->getTraceSafe();
+        return $trace[0]['class'];
+    }
+
+    public function getErrorMethod()
+    {
+        $trace = $this->getTraceSafe();
+        return $trace[0]['function'];
+    }
+
+    public function __toString()
+    {
+        if (isset($_SERVER['REQUEST_URI'])) {
+            return $this->toHtml();
+        }
+        return $this->toText();
+    }
+
+    public function toHtml()
+    {
+        $trace = $this->getTraceSafe();
+        $causes = array();
+        $this->getCauseMessage($causes);
+        $html =  '<table border="1" cellspacing="0">' . "\n";
+        foreach ($causes as $i => $cause) {
+            $html .= '<tr><td colspan="3" bgcolor="#ff9999">'
+               . str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
+               . htmlspecialchars($cause['message']) . ' in <b>' . $cause['file'] . '</b> '
+               . 'on line <b>' . $cause['line'] . '</b>'
+               . "</td></tr>\n";
+        }
+        $html .= '<tr><td colspan="3" bgcolor="#aaaaaa" align="center"><b>Exception trace</b></td></tr>' . "\n"
+               . '<tr><td align="center" bgcolor="#cccccc" width="20"><b>#</b></td>'
+               . '<td align="center" bgcolor="#cccccc"><b>Function</b></td>'
+               . '<td align="center" bgcolor="#cccccc"><b>Location</b></td></tr>' . "\n";
+
+        foreach ($trace as $k => $v) {
+            $html .= '<tr><td align="center">' . $k . '</td>'
+                   . '<td>';
+            if (!empty($v['class'])) {
+                $html .= $v['class'] . $v['type'];
+            }
+            $html .= $v['function'];
+            $args = array();
+            if (!empty($v['args'])) {
+                foreach ($v['args'] as $arg) {
+                    if (is_null($arg)) $args[] = 'null';
+                    elseif (is_array($arg)) $args[] = 'Array';
+                    elseif (is_object($arg)) $args[] = 'Object('.get_class($arg).')';
+                    elseif (is_bool($arg)) $args[] = $arg ? 'true' : 'false';
+                    elseif (is_int($arg) || is_double($arg)) $args[] = $arg;
+                    else {
+                        $arg = (string)$arg;
+                        $str = htmlspecialchars(substr($arg, 0, 16));
+                        if (strlen($arg) > 16) $str .= '&hellip;';
+                        $args[] = "'" . $str . "'";
+                    }
+                }
+            }
+            $html .= '(' . implode(', ',$args) . ')'
+                   . '</td>'
+                   . '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
+                   . ':' . (isset($v['line']) ? $v['line'] : 'unknown')
+                   . '</td></tr>' . "\n";
+        }
+        $html .= '<tr><td align="center">' . ($k+1) . '</td>'
+               . '<td>{main}</td>'
+               . '<td>&nbsp;</td></tr>' . "\n"
+               . '</table>';
+        return $html;
+    }
+
+    public function toText()
+    {
+        $causes = array();
+        $this->getCauseMessage($causes);
+        $causeMsg = '';
+        foreach ($causes as $i => $cause) {
+            $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': '
+                   . $cause['message'] . ' in ' . $cause['file']
+                   . ' on line ' . $cause['line'] . "\n";
+        }
+        return $causeMsg . $this->getTraceAsString();
+    }
+}
+
+?>                                                                                              PEAR-1.8.0/PEAR/FixPHP5PEARWarnings.php                                                             100777     764     764          231      100777  12077                                                                                                                                                                                                                                                                                                                                                                      <?php
 if ($skipmsg) {
     $a = &new $ec($code, $mode, $options, $userinfo);
 } else {
     $a = &new $ec($message, $code, $mode, $options, $userinfo);
 }
-?>                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.7.2/PEAR/Frontend.php                                                                        100644    1750    1750        15617 11014312742  10536                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Frontend, the singleton-based frontend for user input/output
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Frontend.php,v 1.13 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * Which user interface class is being used.
- * @var string class name
- */
-$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
-
-/**
- * Instance of $_PEAR_Command_uiclass.
- * @var object
- */
-$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
-
-/**
- * Singleton-based frontend for PEAR user input/output
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Frontend extends PEAR
-{
-    /**
-     * Retrieve the frontend object
-     * @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
-     * @static
-     */
-    function &singleton($type = null)
-    {
-        if ($type === null) {
-            if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
-                $a = false;
-                return $a;
-            }
-            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
-        } else {
-            $a = PEAR_Frontend::setFrontendClass($type);
-            return $a;
-        }
-    }
-
-    /**
-     * Set the frontend class that will be used by calls to {@link singleton()}
-     *
-     * Frontends are expected to conform to the PEAR naming standard of
-     * _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
-     * @param string $uiclass full class name
-     * @return PEAR_Frontend
-     * @static
-     */
-    function &setFrontendClass($uiclass)
-    {
-        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
-              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
-            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
-        }
-        if (!class_exists($uiclass)) {
-            $file = str_replace('_', '/', $uiclass) . '.php';
-            if (PEAR_Frontend::isIncludeable($file)) {
-                include_once $file;
-            }
-        }
-        if (class_exists($uiclass)) {
-            $obj = &new $uiclass;
-            // quick test to see if this class implements a few of the most
-            // important frontend methods
-            if (is_a($obj, 'PEAR_Frontend')) {
-                $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
-                $GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
-                return $obj;
-            } else {
-                $err = PEAR::raiseError("not a frontend class: $uiclass");
-                return $err;
-            }
-        }
-        $err = PEAR::raiseError("no such class: $uiclass");
-        return $err;
-    }
-
-    /**
-     * Set the frontend class that will be used by calls to {@link singleton()}
-     *
-     * Frontends are expected to be a descendant of PEAR_Frontend
-     * @param PEAR_Frontend
-     * @return PEAR_Frontend
-     * @static
-     */
-    function &setFrontendObject($uiobject)
-    {
-        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
-              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], get_class($uiobject))) {
-            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
-        }
-        if (!is_a($uiobject, 'PEAR_Frontend')) {
-            $err = PEAR::raiseError('not a valid frontend class: (' .
-                get_class($uiobject) . ')');
-            return $err;
-        }
-        $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$uiobject;
-        $GLOBALS['_PEAR_FRONTEND_CLASS'] = get_class($uiobject);
-        return $uiobject;
-    }
-
-    /**
-     * @param string $path relative or absolute include path
-     * @return boolean
-     * @static
-     */
-    function isIncludeable($path)
-    {
-        if (file_exists($path) && is_readable($path)) {
-            return true;
-        }
-        $fp = @fopen($path, 'r', true);
-        if ($fp) {
-            fclose($fp);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @param PEAR_Config
-     */
-    function setConfig(&$config)
-    {
-    }
-
-    /**
-     * This can be overridden to allow session-based temporary file management
-     *
-     * By default, all files are deleted at the end of a session.  The web installer
-     * needs to be able to sustain a list over many sessions in order to support
-     * user interaction with install scripts
-     */
-    function addTempFile($file)
-    {
-        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
-    }
-
-    /**
-     * Log an action
-     *
-     * @param string $msg the message to log
-     * @param boolean $append_crlf
-     * @return boolean true
-     * @abstract
-     */
-    function log($msg, $append_crlf = true)
-    {
-    }
-
-    /**
-     * Run a post-installation script
-     *
-     * @param array $scripts array of post-install scripts
-     * @abstract
-     */
-    function runPostinstallScripts(&$scripts)
-    {
-    }
-
-    /**
-     * Display human-friendly output formatted depending on the
-     * $command parameter.
-     *
-     * This should be able to handle basic output data with no command
-     * @param mixed  $data    data structure containing the information to display
-     * @param string $command command from which this method was called
-     * @abstract
-     */
-    function outputData($data, $command = '_default')
-    {
-    }
-
-    /**
-     * Display a modal form dialog and return the given input
-     *
-     * A frontend that requires multiple requests to retrieve and process
-     * data must take these needs into account, and implement the request
-     * handling code.
-     * @param string $command  command from which this method was called
-     * @param array  $prompts  associative array. keys are the input field names
-     *                         and values are the description
-     * @param array  $types    array of input field types (text, password,
-     *                         etc.) keys have to be the same like in $prompts
-     * @param array  $defaults array of default values. again keys have
-     *                         to be the same like in $prompts.  Do not depend
-     *                         on a default value being set.
-     * @return array input sent by the user
-     * @abstract
-     */
-    function userDialog($command, $prompts, $types = array(), $defaults = array())
-    {
-    }
-}
-?>                                                                                                                 PEAR-1.7.2/PEAR/Installer.php                                                                       100644    1750    1750       210161 11014312742  10723                                                                                                                                                                                                                                                                                                                                                                      <?php
+?>                                                                                                                                                                                                                                                                                                                                                                       PEAR-1.8.0/PEAR/Frontend.php                                                                        100664     764     764        15445      100664  10355                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Frontend, the singleton-based frontend for user input/output
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Frontend.php,v 1.18 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Include error handling
+ */
+//require_once 'PEAR.php';
+
+/**
+ * Which user interface class is being used.
+ * @var string class name
+ */
+$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
+
+/**
+ * Instance of $_PEAR_Command_uiclass.
+ * @var object
+ */
+$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
+
+/**
+ * Singleton-based frontend for PEAR user input/output
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Frontend extends PEAR
+{
+    /**
+     * Retrieve the frontend object
+     * @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
+     * @static
+     */
+    function &singleton($type = null)
+    {
+        if ($type === null) {
+            if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
+                $a = false;
+                return $a;
+            }
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+
+        $a = PEAR_Frontend::setFrontendClass($type);
+        return $a;
+    }
+
+    /**
+     * Set the frontend class that will be used by calls to {@link singleton()}
+     *
+     * Frontends are expected to conform to the PEAR naming standard of
+     * _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
+     * @param string $uiclass full class name
+     * @return PEAR_Frontend
+     * @static
+     */
+    function &setFrontendClass($uiclass)
+    {
+        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
+              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+
+        if (!class_exists($uiclass)) {
+            $file = str_replace('_', '/', $uiclass) . '.php';
+            if (PEAR_Frontend::isIncludeable($file)) {
+                include_once $file;
+            }
+        }
+
+        if (class_exists($uiclass)) {
+            $obj = &new $uiclass;
+            // quick test to see if this class implements a few of the most
+            // important frontend methods
+            if (is_a($obj, 'PEAR_Frontend')) {
+                $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
+                $GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
+                return $obj;
+            }
+
+            $err = PEAR::raiseError("not a frontend class: $uiclass");
+            return $err;
+        }
+
+        $err = PEAR::raiseError("no such class: $uiclass");
+        return $err;
+    }
+
+    /**
+     * Set the frontend class that will be used by calls to {@link singleton()}
+     *
+     * Frontends are expected to be a descendant of PEAR_Frontend
+     * @param PEAR_Frontend
+     * @return PEAR_Frontend
+     * @static
+     */
+    function &setFrontendObject($uiobject)
+    {
+        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
+              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], get_class($uiobject))) {
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+
+        if (!is_a($uiobject, 'PEAR_Frontend')) {
+            $err = PEAR::raiseError('not a valid frontend class: (' .
+                get_class($uiobject) . ')');
+            return $err;
+        }
+
+        $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$uiobject;
+        $GLOBALS['_PEAR_FRONTEND_CLASS'] = get_class($uiobject);
+        return $uiobject;
+    }
+
+    /**
+     * @param string $path relative or absolute include path
+     * @return boolean
+     * @static
+     */
+    function isIncludeable($path)
+    {
+        if (file_exists($path) && is_readable($path)) {
+            return true;
+        }
+
+        $fp = @fopen($path, 'r', true);
+        if ($fp) {
+            fclose($fp);
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @param PEAR_Config
+     */
+    function setConfig(&$config)
+    {
+    }
+
+    /**
+     * This can be overridden to allow session-based temporary file management
+     *
+     * By default, all files are deleted at the end of a session.  The web installer
+     * needs to be able to sustain a list over many sessions in order to support
+     * user interaction with install scripts
+     */
+    function addTempFile($file)
+    {
+        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
+    }
+
+    /**
+     * Log an action
+     *
+     * @param string $msg the message to log
+     * @param boolean $append_crlf
+     * @return boolean true
+     * @abstract
+     */
+    function log($msg, $append_crlf = true)
+    {
+    }
+
+    /**
+     * Run a post-installation script
+     *
+     * @param array $scripts array of post-install scripts
+     * @abstract
+     */
+    function runPostinstallScripts(&$scripts)
+    {
+    }
+
+    /**
+     * Display human-friendly output formatted depending on the
+     * $command parameter.
+     *
+     * This should be able to handle basic output data with no command
+     * @param mixed  $data    data structure containing the information to display
+     * @param string $command command from which this method was called
+     * @abstract
+     */
+    function outputData($data, $command = '_default')
+    {
+    }
+
+    /**
+     * Display a modal form dialog and return the given input
+     *
+     * A frontend that requires multiple requests to retrieve and process
+     * data must take these needs into account, and implement the request
+     * handling code.
+     * @param string $command  command from which this method was called
+     * @param array  $prompts  associative array. keys are the input field names
+     *                         and values are the description
+     * @param array  $types    array of input field types (text, password,
+     *                         etc.) keys have to be the same like in $prompts
+     * @param array  $defaults array of default values. again keys have
+     *                         to be the same like in $prompts.  Do not depend
+     *                         on a default value being set.
+     * @return array input sent by the user
+     * @abstract
+     */
+    function userDialog($command, $prompts, $types = array(), $defaults = array())
+    {
+    }
+}                                                                                                                                                                                                                           PEAR-1.8.0/PEAR/Installer.php                                                                       100664     764     764       211556      100664  10554                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Installer
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Installer.php,v 1.253 2008/05/13 22:46:07 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Installer.php,v 1.259 2009/04/09 00:55:07 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -44420,9 +43580,9 @@ define('PEAR_INSTALLER_NOBINARY', -240);
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -44516,7 +43676,7 @@ class PEAR_Installer extends PEAR_Downloader
 
     function setConfig(&$config)
     {
-        $this->config = &$config;
+        $this->config    = &$config;
         $this->_registry = &$config->getRegistry();
     }
 
@@ -44545,9 +43705,11 @@ class PEAR_Installer extends PEAR_Downloader
         if (!$channel) {
             $channel = 'pear.php.net';
         }
+
         if (!strlen($package)) {
             return $this->raiseError("No package to uninstall given");
         }
+
         if (strtolower($package) == 'pear' && $channel == 'pear.php.net') {
             // to avoid race conditions, include all possible needed files
             require_once 'PEAR/Task/Common.php';
@@ -44559,25 +43721,31 @@ class PEAR_Installer extends PEAR_Downloader
             require_once 'PEAR/PackageFile/Generator/v1.php';
             require_once 'PEAR/PackageFile/Generator/v2.php';
         }
+
         $filelist = $this->_registry->packageInfo($package, 'filelist', $channel);
         if ($filelist == null) {
             return $this->raiseError("$channel/$package not installed");
         }
+
         $ret = array();
         foreach ($filelist as $file => $props) {
             if (empty($props['installed_as'])) {
                 continue;
             }
+
             $path = $props['installed_as'];
             if ($backup) {
                 $this->addFileOperation('backup', array($path));
                 $ret[] = $path;
             }
+
             $this->addFileOperation('delete', array($path));
         }
+
         if ($backup) {
             return $ret;
         }
+
         return true;
     }
 
@@ -44598,17 +43766,20 @@ class PEAR_Installer extends PEAR_Downloader
         if (!isset($this->_registry)) {
             $this->_registry = &$this->config->getRegistry();
         }
+
         if (isset($atts['platform'])) {
             if (empty($os)) {
                 $os = new OS_Guess();
             }
+
             if (strlen($atts['platform']) && $atts['platform']{0} == '!') {
-                $negate = true;
+                $negate   = true;
                 $platform = substr($atts['platform'], 1);
             } else {
-                $negate = false;
+                $negate    = false;
                 $platform = $atts['platform'];
             }
+
             if ((bool) $os->matchSignature($platform) === $negate) {
                 $this->log(3, "skipped $file (meant for $atts[platform], we are ".$os->getSignature().")");
                 return PEAR_INSTALLER_SKIPPED;
@@ -44640,13 +43811,16 @@ class PEAR_Installer extends PEAR_Downloader
             default:
                 return $this->raiseError("Invalid role `$atts[role]' for file $file");
         }
+
         $save_destdir = $dest_dir;
         if (!empty($atts['baseinstalldir'])) {
             $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
         }
+
         if (dirname($file) != '.' && empty($atts['install-as'])) {
             $dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
         }
+
         if (empty($atts['install-as'])) {
             $dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
         } else {
@@ -44663,15 +43837,15 @@ class PEAR_Installer extends PEAR_Downloader
                                                     array($dest_file, $orig_file));
         $final_dest_file = $installed_as = $dest_file;
         if (isset($this->_options['packagingroot'])) {
-            $installedas_dest_dir = dirname($final_dest_file);
+            $installedas_dest_dir  = dirname($final_dest_file);
             $installedas_dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
-            $final_dest_file = $this->_prependPath($final_dest_file,
-                $this->_options['packagingroot']);
+            $final_dest_file = $this->_prependPath($final_dest_file, $this->_options['packagingroot']);
         } else {
-            $installedas_dest_dir = dirname($final_dest_file);
+            $installedas_dest_dir  = dirname($final_dest_file);
             $installedas_dest_file = $installedas_dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         }
-        $dest_dir = dirname($final_dest_file);
+
+        $dest_dir  = dirname($final_dest_file);
         $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         if (preg_match('~/\.\.(/|\\z)|^\.\./~', str_replace('\\', '/', $dest_file))) {
             return $this->raiseError("SECURITY ERROR: file $file (installed to $dest_file) contains parent directory reference ..", PEAR_INSTALLER_FAILED);
@@ -44686,6 +43860,7 @@ class PEAR_Installer extends PEAR_Downloader
             }
             $this->log(3, "+ mkdir $dest_dir");
         }
+
         // pretty much nothing happens if we are only registering the install
         if (empty($this->_options['register-only'])) {
             if (empty($atts['replacements'])) {
@@ -44693,10 +43868,12 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file $orig_file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 if (!@copy($orig_file, $dest_file)) {
                     return $this->raiseError("failed to write $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $this->log(3, "+ cp $orig_file $dest_file");
                 if (isset($atts['md5sum'])) {
                     $md5sum = md5_file($dest_file);
@@ -44707,13 +43884,16 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $contents = file_get_contents($orig_file);
                 if ($contents === false) {
                     $contents = '';
                 }
+
                 if (isset($atts['md5sum'])) {
                     $md5sum = md5($contents);
                 }
+
                 $subst_from = $subst_to = array();
                 foreach ($atts['replacements'] as $a) {
                     $to = '';
@@ -44758,22 +43938,27 @@ class PEAR_Installer extends PEAR_Downloader
                         $subst_to[] = $to;
                     }
                 }
+
                 $this->log(3, "doing ".sizeof($subst_from)." substitution(s) for $final_dest_file");
                 if (sizeof($subst_from)) {
                     $contents = str_replace($subst_from, $subst_to, $contents);
                 }
+
                 $wp = @fopen($dest_file, "wb");
                 if (!is_resource($wp)) {
                     return $this->raiseError("failed to create $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 if (@fwrite($wp, $contents) === false) {
                     return $this->raiseError("failed writing to $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 fclose($wp);
                 // }}}
             }
+
             // {{{ check the md5
             if (isset($md5sum)) {
                 if (strtolower($md5sum) === strtolower($atts['md5sum'])) {
@@ -44784,13 +43969,14 @@ class PEAR_Installer extends PEAR_Downloader
                         if (file_exists($dest_file)) {
                             unlink($dest_file);
                         }
+
                         if (!isset($options['ignore-errors'])) {
                             return $this->raiseError("bad md5sum for file $final_dest_file",
                                                  PEAR_INSTALLER_FAILED);
-                        } else {
-                            if (!isset($options['soft'])) {
-                                $this->log(0, "warning : bad md5sum for file $final_dest_file");
-                            }
+                        }
+
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "warning : bad md5sum for file $final_dest_file");
                         }
                     } else {
                         if (!isset($options['soft'])) {
@@ -44808,6 +43994,7 @@ class PEAR_Installer extends PEAR_Downloader
                 } else {
                     $mode = 0666 & ~(int)octdec($this->config->get('umask'));
                 }
+
                 if ($atts['role'] != 'src') {
                     $this->addFileOperation("chmod", array($mode, $dest_file));
                     if (!@chmod($dest_file, $mode)) {
@@ -44818,6 +44005,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
             // }}}
+
             if ($atts['role'] == 'src') {
                 rename($dest_file, $final_dest_file);
                 $this->log(2, "renamed source file $dest_file to $final_dest_file");
@@ -44826,12 +44014,14 @@ class PEAR_Installer extends PEAR_Downloader
                     $atts['role'] == 'ext'));
             }
         }
+
         // Store the full path where the file was installed for easy unistall
         if ($atts['role'] != 'script') {
             $loc = $this->config->get($atts['role'] . '_dir');
         } else {
             $loc = $this->config->get('bin_dir');
         }
+
         if ($atts['role'] != 'src') {
             $this->addFileOperation("installed_as", array($file, $installed_as,
                                     $loc,
@@ -44867,29 +44057,34 @@ class PEAR_Installer extends PEAR_Downloader
             return $this->raiseError('Invalid role `' . $atts['attribs']['role'] .
                     "' for file $file");
         }
+
         $role = &PEAR_Installer_Role::factory($pkg, $atts['attribs']['role'], $this->config);
-        $err = $role->setup($this, $pkg, $atts['attribs'], $file);
+        $err  = $role->setup($this, $pkg, $atts['attribs'], $file);
         if (PEAR::isError($err)) {
             return $err;
         }
+
         if (!$role->isInstallable()) {
             return;
         }
+
         $info = $role->processInstallation($pkg, $atts['attribs'], $file, $tmp_path);
         if (PEAR::isError($info)) {
             return $info;
-        } else {
-            list($save_destdir, $dest_dir, $dest_file, $orig_file) = $info;
         }
+
+        list($save_destdir, $dest_dir, $dest_file, $orig_file) = $info;
         if (preg_match('~/\.\.(/|\\z)|^\.\./~', str_replace('\\', '/', $dest_file))) {
             return $this->raiseError("SECURITY ERROR: file $file (installed to $dest_file) contains parent directory reference ..", PEAR_INSTALLER_FAILED);
         }
+
         $final_dest_file = $installed_as = $dest_file;
         if (isset($this->_options['packagingroot'])) {
             $final_dest_file = $this->_prependPath($final_dest_file,
                 $this->_options['packagingroot']);
         }
-        $dest_dir = dirname($final_dest_file);
+
+        $dest_dir  = dirname($final_dest_file);
         $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         // }}}
 
@@ -44902,6 +44097,7 @@ class PEAR_Installer extends PEAR_Downloader
                 $this->log(3, "+ mkdir $dest_dir");
             }
         }
+
         $attribs = $atts['attribs'];
         unset($atts['attribs']);
         // pretty much nothing happens if we are only registering the install
@@ -44911,10 +44107,12 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file $orig_file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 if (!@copy($orig_file, $dest_file)) {
                     return $this->raiseError("failed to write $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $this->log(3, "+ cp $orig_file $dest_file");
                 if (isset($attribs['md5sum'])) {
                     $md5sum = md5_file($dest_file);
@@ -44924,16 +44122,18 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file $orig_file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $contents = file_get_contents($orig_file);
                 if ($contents === false) {
                     $contents = '';
                 }
+
                 if (isset($attribs['md5sum'])) {
                     $md5sum = md5($contents);
                 }
+
                 foreach ($atts as $tag => $raw) {
-                    $tag = str_replace(array($pkg->getTasksNs() . ':', '-'), 
-                        array('', '_'), $tag);
+                    $tag = str_replace(array($pkg->getTasksNs() . ':', '-'), array('', '_'), $tag);
                     $task = "PEAR_Task_$tag";
                     $task = &new $task($this->config, $this, PEAR_TASK_INSTALL);
                     if (!$task->isScript()) { // scripts are only handled after installation
@@ -44942,40 +44142,53 @@ class PEAR_Installer extends PEAR_Downloader
                         if ($res === false) {
                             continue; // skip this file
                         }
+
                         if (PEAR::isError($res)) {
                             return $res;
                         }
+
                         $contents = $res; // save changes
                     }
+
                     $wp = @fopen($dest_file, "wb");
                     if (!is_resource($wp)) {
                         return $this->raiseError("failed to create $dest_file: $php_errormsg",
                                                  PEAR_INSTALLER_FAILED);
                     }
+
                     if (fwrite($wp, $contents) === false) {
                         return $this->raiseError("failed writing to $dest_file: $php_errormsg",
                                                  PEAR_INSTALLER_FAILED);
                     }
+
                     fclose($wp);
                 }
             }
+
             // {{{ check the md5
             if (isset($md5sum)) {
+                // Make sure the original md5 sum matches with expected
                 if (strtolower($md5sum) === strtolower($attribs['md5sum'])) {
                     $this->log(2, "md5sum ok: $final_dest_file");
+
+                    if (isset($contents)) {
+                        // set md5 sum based on $content in case any tasks were run.
+                        $real_atts['attribs']['md5sum'] = md5($contents);
+                    }
                 } else {
                     if (empty($options['force'])) {
                         // delete the file
                         if (file_exists($dest_file)) {
                             unlink($dest_file);
                         }
+
                         if (!isset($options['ignore-errors'])) {
                             return $this->raiseError("bad md5sum for file $final_dest_file",
                                                      PEAR_INSTALLER_FAILED);
-                        } else {
-                            if (!isset($options['soft'])) {
-                                $this->log(0, "warning : bad md5sum for file $final_dest_file");
-                            }
+                        }
+
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "warning : bad md5sum for file $final_dest_file");
                         }
                     } else {
                         if (!isset($options['soft'])) {
@@ -44986,6 +44199,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $real_atts['attribs']['md5sum'] = md5_file($dest_file);
             }
+
             // }}}
             // {{{ set file permissions
             if (!OS_WINDOWS) {
@@ -44995,6 +44209,7 @@ class PEAR_Installer extends PEAR_Downloader
                 } else {
                     $mode = 0666 & ~(int)octdec($this->config->get('umask'));
                 }
+
                 if ($attribs['role'] != 'src') {
                     $this->addFileOperation("chmod", array($mode, $dest_file));
                     if (!@chmod($dest_file, $mode)) {
@@ -45005,6 +44220,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
             // }}}
+
             if ($attribs['role'] == 'src') {
                 rename($dest_file, $final_dest_file);
                 $this->log(2, "renamed source file $dest_file to $final_dest_file");
@@ -45012,10 +44228,11 @@ class PEAR_Installer extends PEAR_Downloader
                 $this->addFileOperation("rename", array($dest_file, $final_dest_file, $role->isExtension()));
             }
         }
+
         // Store the full path where the file was installed for easy uninstall
         if ($attribs['role'] != 'src') {
             $loc = $this->config->get($role->getLocationConfig(), null, $channel);
-            $this->addFileOperation("installed_as", array($file, $installed_as,
+            $this->addFileOperation('installed_as', array($file, $installed_as,
                                 $loc,
                                 dirname(substr($installed_as, strlen($loc)))));
         }
@@ -45057,6 +44274,7 @@ class PEAR_Installer extends PEAR_Downloader
             return $this->raiseError('Internal Error: $data in addFileOperation'
                 . ' must be an array, was ' . gettype($data));
         }
+
         if ($type == 'chmod') {
             $octmode = decoct($data[0]);
             $this->log(3, "adding to transaction: $type $octmode $data[1]");
@@ -45093,6 +44311,7 @@ class PEAR_Installer extends PEAR_Downloader
                     if (!file_exists($data[0])) {
                         $errors[] = "cannot rename file $data[0], doesn't exist";
                     }
+
                     // check that dest dir. is writable
                     if (!is_writable(dirname($data[1]))) {
                         $errors[] = "permission denied ($type): $data[1]";
@@ -45128,17 +44347,19 @@ class PEAR_Installer extends PEAR_Downloader
 
         }
         // }}}
-        $m = sizeof($errors);
+        $m = count($errors);
         if ($m > 0) {
             foreach ($errors as $error) {
                 if (!isset($this->_options['soft'])) {
                     $this->log(1, $error);
                 }
             }
+
             if (!isset($this->_options['ignore-errors'])) {
                 return false;
             }
         }
+
         $this->_dirtree = array();
         // {{{ really commit the transaction
         foreach ($this->file_operations as $i => $tr) {
@@ -45146,6 +44367,7 @@ class PEAR_Installer extends PEAR_Downloader
                 // support removal of non-existing backups
                 continue;
             }
+
             list($type, $data) = $tr;
             switch ($type) {
                 case 'backup':
@@ -45153,6 +44375,7 @@ class PEAR_Installer extends PEAR_Downloader
                         $this->file_operations[$i] = false;
                         break;
                     }
+
                     if (!@copy($data[0], $data[0] . '.bak')) {
                         $this->log(1, 'Could not copy ' . $data[0] . ' to ' . $data[0] .
                             '.bak ' . $php_errormsg);
@@ -45167,11 +44390,7 @@ class PEAR_Installer extends PEAR_Downloader
                     }
                     break;
                 case 'rename':
-                    if (file_exists($data[1])) {
-                        $test = @unlink($data[1]);
-                    } else {
-                        $test = null;
-                    }
+                    $test = file_exists($data[1]) ? @unlink($data[1]) : null;
                     if (!$test && file_exists($data[1])) {
                         if ($data[2]) {
                             $extra = ', this extension must be installed manually.  Rename to "' .
@@ -45179,14 +44398,17 @@ class PEAR_Installer extends PEAR_Downloader
                         } else {
                             $extra = '';
                         }
+
                         if (!isset($this->_options['soft'])) {
                             $this->log(1, 'Could not delete ' . $data[1] . ', cannot rename ' .
                                 $data[0] . $extra);
                         }
+
                         if (!isset($this->_options['ignore-errors'])) {
                             return false;
                         }
                     }
+
                     // permissions issues with rename - copy() is far superior
                     $perms = @fileperms($data[0]);
                     if (!@copy($data[0], $data[1])) {
@@ -45194,6 +44416,7 @@ class PEAR_Installer extends PEAR_Downloader
                             ' ' . $php_errormsg);
                         return false;
                     }
+
                     // copy over permissions, otherwise they are lost
                     @chmod($data[1], $perms);
                     @unlink($data[0]);
@@ -45205,6 +44428,7 @@ class PEAR_Installer extends PEAR_Downloader
                             decoct($data[0]) . ' ' . $php_errormsg);
                         return false;
                     }
+
                     $octmode = decoct($data[0]);
                     $this->log(3, "+ chmod $octmode $data[1]");
                     break;
@@ -45230,6 +44454,7 @@ class PEAR_Installer extends PEAR_Downloader
                                 break 2; // this directory is not empty and can't be
                                          // deleted
                             }
+
                             closedir($testme);
                             if (!@rmdir($data[0])) {
                                 $this->log(1, 'Could not rmdir ' . $data[0] . ' ' .
@@ -45346,8 +44571,8 @@ class PEAR_Installer extends PEAR_Downloader
     {
         // trickiness: initialize here
         parent::PEAR_Downloader($this->ui, $options, $config);
-        $ret = parent::download($packages);
-        $errors = $this->getErrorMsgs();
+        $ret             = parent::download($packages);
+        $errors          = $this->getErrorMsgs();
         $installpackages = $this->getDownloadedPackages();
         trigger_error("PEAR Warning: PEAR_Installer::download() is deprecated " .
                       "in favor of PEAR_Downloader class", E_USER_WARNING);
@@ -45373,6 +44598,7 @@ class PEAR_Installer extends PEAR_Downloader
             $this->log(3, '+ tmp dir created at ' . $tmpdir);
             // }}}
         }
+
         // Parse xml file -----------------------------------------------
         $pkg = new PEAR_PackageFile($this->config, $this->debug, $tmpdir);
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
@@ -45388,9 +44614,9 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
             return $this->raiseError('Installation failed: invalid package file');
-        } else {
-            $descfile = $p->getPackageFile();
         }
+
+        $descfile = $p->getPackageFile();
         return $p;
     }
 
@@ -45452,15 +44678,16 @@ class PEAR_Installer extends PEAR_Downloader
         $this->_options = $options;
         $this->_registry = &$this->config->getRegistry();
         if (is_object($pkgfile)) {
-            $dlpkg = &$pkgfile;
-            $pkg = $pkgfile->getPackageFile();
-            $pkgfile = $pkg->getArchiveFile();
+            $dlpkg    = &$pkgfile;
+            $pkg      = $pkgfile->getPackageFile();
+            $pkgfile  = $pkg->getArchiveFile();
             $descfile = $pkg->getPackageFile();
-            $tmpdir = dirname($descfile);
+            $tmpdir   = dirname($descfile);
         } else {
             $descfile = $pkgfile;
-            $tmpdir = '';
-            if (PEAR::isError($pkg = &$this->_parsePackageXml($descfile, $tmpdir))) {
+            $tmpdir   = '';
+            $pkg      = &$this->_parsePackageXml($descfile, $tmpdir);
+            if (PEAR::isError($pkg)) {
                 return $pkg;
             }
         }
@@ -45478,6 +44705,7 @@ class PEAR_Installer extends PEAR_Downloader
             $regdir = $this->_prependPath(
                 $this->config->get('php_dir', null, 'pear.php.net'),
                 $this->_options['packagingroot']);
+
             $packrootphp_dir = $this->_prependPath(
                 $this->config->get('php_dir', null, $channel),
                 $this->_options['packagingroot']);
@@ -45516,12 +44744,14 @@ class PEAR_Installer extends PEAR_Downloader
             if (PEAR::isError($instfilelist)) {
                 return $instfilelist;
             }
+
             // ensure we have the most accurate registry
             $installregistry->flushFileMap();
             $test = $installregistry->checkFileMap($instfilelist, $testp, '1.1');
             if (PEAR::isError($test)) {
                 return $test;
             }
+
             if (sizeof($test)) {
                 $pkgs = $this->getInstallPackages();
                 $found = false;
@@ -45531,6 +44761,7 @@ class PEAR_Installer extends PEAR_Downloader
                         break;
                     }
                 }
+
                 if ($found) {
                     // subpackages can conflict with earlier versions of parent packages
                     $parentreg = $installregistry->packageInfo($param->getPackage(), null, $param->getChannel());
@@ -45538,24 +44769,52 @@ class PEAR_Installer extends PEAR_Downloader
                     foreach ($tmp as $file => $info) {
                         if (is_array($info)) {
                             if (strtolower($info[1]) == strtolower($param->getPackage()) &&
-                                  strtolower($info[0]) == strtolower($param->getChannel())) {
+                                  strtolower($info[0]) == strtolower($param->getChannel())
+                            ) {
+                                if (isset($parentreg['filelist'][$file])) {
+                                    unset($parentreg['filelist'][$file]);
+                                } else{
+                                    $pos     = strpos($file, '/');
+                                    $basedir = substr($file, 0, $pos);
+                                    $file2   = substr($file, $pos + 1);
+                                    if (isset($parentreg['filelist'][$file2]['baseinstalldir'])
+                                        && $parentreg['filelist'][$file2]['baseinstalldir'] === $basedir
+                                    ) {
+                                        unset($parentreg['filelist'][$file2]);
+                                    }
+                                }
+
                                 unset($test[$file]);
-                                unset($parentreg['filelist'][$file]);
                             }
                         } else {
                             if (strtolower($param->getChannel()) != 'pear.php.net') {
                                 continue;
                             }
+
                             if (strtolower($info) == strtolower($param->getPackage())) {
+                                if (isset($parentreg['filelist'][$file])) {
+                                    unset($parentreg['filelist'][$file]);
+                                } else{
+                                    $pos     = strpos($file, '/');
+                                    $basedir = substr($file, 0, $pos);
+                                    $file2   = substr($file, $pos + 1);
+                                    if (isset($parentreg['filelist'][$file2]['baseinstalldir'])
+                                        && $parentreg['filelist'][$file2]['baseinstalldir'] === $basedir
+                                    ) {
+                                        unset($parentreg['filelist'][$file2]);
+                                    }
+                                }
+
                                 unset($test[$file]);
-                                unset($parentreg['filelist'][$file]);
                             }
                         }
                     }
+
                     $pfk = &new PEAR_PackageFile($this->config);
                     $parentpkg = &$pfk->fromArray($parentreg);
                     $installregistry->updatePackage2($parentpkg);
                 }
+
                 if ($param->getChannel() == 'pecl.php.net' && isset($options['upgrade'])) {
                     $tmp = $test;
                     foreach ($tmp as $file => $info) {
@@ -45568,7 +44827,8 @@ class PEAR_Installer extends PEAR_Downloader
                         }
                     }
                 }
-                if (sizeof($test)) {
+
+                if (count($test)) {
                     $msg = "$channel/$pkgname: conflicting files found:\n";
                     $longest = max(array_map("strlen", array_keys($test)));
                     $fmt = "%${longest}s (%s)\n";
@@ -45579,12 +44839,13 @@ class PEAR_Installer extends PEAR_Downloader
                         $info = $info[0] . '/' . $info[1];
                         $msg .= sprintf($fmt, $file, $info);
                     }
+
                     if (!isset($options['ignore-errors'])) {
                         return $this->raiseError($msg);
-                    } else {
-                        if (!isset($options['soft'])) {
-                            $this->log(0, "WARNING: $msg");
-                        }
+                    }
+
+                    if (!isset($options['soft'])) {
+                        $this->log(0, "WARNING: $msg");
                     }
                 }
             }
@@ -45603,6 +44864,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             if (empty($options['force']) && $test) {
                 return $this->raiseError("$channel/$pkgname is already installed");
             }
@@ -45617,6 +44879,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             if ($test) {
                 $v1 = $installregistry->packageInfo($pkgname, 'version', $usechannel);
                 $v2 = $pkg->getVersion();
@@ -45624,16 +44887,17 @@ class PEAR_Installer extends PEAR_Downloader
                 if (empty($options['force']) && !version_compare("$v2", "$v1", 'gt')) {
                     return $this->raiseError("upgrade to a newer version ($v2 is not newer than $v1)");
                 }
+
                 if (empty($options['register-only'])) {
                     // when upgrading, remove old release's files first:
                     if (PEAR::isError($err = $this->_deletePackageFiles($pkgname, $usechannel,
                           true))) {
                         if (!isset($options['ignore-errors'])) {
                             return $this->raiseError($err);
-                        } else {
-                            if (!isset($options['soft'])) {
-                                $this->log(0, 'WARNING: ' . $err->getMessage());
-                            }
+                        }
+
+                        if (!isset($options['soft'])) {
+                            $this->log(0, 'WARNING: ' . $err->getMessage());
                         }
                     } else {
                         $backedup = $err;
@@ -45670,41 +44934,45 @@ class PEAR_Installer extends PEAR_Downloader
         } else {
             $filelist = $pkg->getFileList();
         }
+
         if (PEAR::isError($filelist)) {
             return $filelist;
         }
+
         $p = &$installregistry->getPackage($pkgname, $channel);
         if (empty($options['register-only']) && $p) {
             $dirtree = $p->getDirTree();
         } else {
             $dirtree = false;
         }
+
         $pkg->resetFilelist();
         $pkg->setLastInstalledVersion($installregistry->packageInfo($pkg->getPackage(),
             'version', $pkg->getChannel()));
         foreach ($filelist as $file => $atts) {
+            $this->expectError(PEAR_INSTALLER_FAILED);
             if ($pkg->getPackagexmlVersion() == '1.0') {
-                $this->expectError(PEAR_INSTALLER_FAILED);
                 $res = $this->_installFile($file, $atts, $tmp_path, $options);
-                $this->popExpect();
             } else {
-                $this->expectError(PEAR_INSTALLER_FAILED);
                 $res = $this->_installFile2($pkg, $file, $atts, $tmp_path, $options);
-                $this->popExpect();
             }
+            $this->popExpect();
+
             if (PEAR::isError($res)) {
                 if (empty($options['ignore-errors'])) {
                     $this->rollbackFileTransaction();
                     if ($res->getMessage() == "file does not exist") {
                         $this->raiseError("file $file in package.xml does not exist");
                     }
+
                     return $this->raiseError($res);
-                } else {
-                    if (!isset($options['soft'])) {
-                        $this->log(0, "Warning: " . $res->getMessage());
-                    }
+                }
+
+                if (!isset($options['soft'])) {
+                    $this->log(0, "Warning: " . $res->getMessage());
                 }
             }
+
             $real = isset($atts['attribs']) ? $atts['attribs'] : $atts;
             if ($res == PEAR_INSTALLER_OK && $real['role'] != 'src') {
                 // Register files that were installed
@@ -45725,6 +44993,7 @@ class PEAR_Installer extends PEAR_Downloader
         if (isset($backedup)) {
             $this->_removeBackups($backedup);
         }
+
         if (!$this->commitFileTransaction()) {
             $this->rollbackFileTransaction();
             $this->configSet('default_channel', $savechannel);
@@ -45732,9 +45001,9 @@ class PEAR_Installer extends PEAR_Downloader
         }
         // }}}
 
-        $ret = false;
+        $ret          = false;
         $installphase = 'install';
-        $oldversion = false;
+        $oldversion   = false;
         // {{{ Register that the package is installed -----------------------
         if (empty($options['upgrade'])) {
             // if 'force' is used, replace the info in registry
@@ -45748,6 +45017,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             if (!empty($options['force']) && $test) {
                 $oldversion = $installregistry->packageInfo($pkgname, 'version', $usechannel);
                 $installregistry->deletePackage($pkgname, $usechannel);
@@ -45763,6 +45033,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
                 $this->commitFileTransaction();
             }
+
             $usechannel = $channel;
             if ($channel == 'pecl.php.net') {
                 $test = $installregistry->packageExists($pkgname, $channel);
@@ -45773,6 +45044,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             // new: upgrade installs a package if it isn't installed
             if (!$test) {
                 $ret = $installregistry->addPackage2($pkg);
@@ -45786,17 +45058,20 @@ class PEAR_Installer extends PEAR_Downloader
                 $installphase = 'upgrade';
             }
         }
+
         if (!$ret) {
             $this->configSet('default_channel', $savechannel);
             return $this->raiseError("Adding package $channel/$pkgname to registry failed");
         }
         // }}}
+
         $this->configSet('default_channel', $savechannel);
         if (class_exists('PEAR_Task_Common')) { // this is auto-included if any tasks exist
             if (PEAR_Task_Common::hasPostinstallTasks()) {
                 PEAR_Task_Common::runPostinstallTasks($installphase);
             }
         }
+
         return $pkg->toArray(true);
     }
 
@@ -45819,6 +45094,7 @@ class PEAR_Installer extends PEAR_Downloader
             $this->configSet('default_channel', $savechannel);
             return $built;
         }
+
         $this->log(1, "\nBuild process completed successfully");
         foreach ($built as $ext) {
             $bn = basename($ext['file']);
@@ -45833,17 +45109,20 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $role = 'src';
             }
+
             $dest = $ext['dest'];
             $packagingroot = '';
             if (isset($this->_options['packagingroot'])) {
                 $packagingroot = $this->_options['packagingroot'];
             }
+
             $copyto = $this->_prependPath($dest, $packagingroot);
             if ($copyto != $dest) {
-	            $this->log(1, "Installing '$dest' as '$copyto'");
+                $this->log(1, "Installing '$dest' as '$copyto'");
             } else {
-	            $this->log(1, "Installing '$dest'");
+                $this->log(1, "Installing '$dest'");
             }
+
             $copydir = dirname($copyto);
             // pretty much nothing happens if we are only registering the install
             if (empty($this->_options['register-only'])) {
@@ -45852,11 +45131,14 @@ class PEAR_Installer extends PEAR_Downloader
                         return $this->raiseError("failed to mkdir $copydir",
                             PEAR_INSTALLER_FAILED);
                     }
+
                     $this->log(3, "+ mkdir $copydir");
                 }
+
                 if (!@copy($ext['file'], $copyto)) {
                     return $this->raiseError("failed to write $copyto ($php_errormsg)", PEAR_INSTALLER_FAILED);
                 }
+
                 $this->log(3, "+ cp $ext[file] $copyto");
                 $this->addFileOperation('rename', array($ext['file'], $copyto));
                 if (!OS_WINDOWS) {
@@ -45914,15 +45196,15 @@ class PEAR_Installer extends PEAR_Downloader
     {
         if (isset($options['installroot'])) {
             $this->config->setInstallRoot($options['installroot']);
-            $this->installroot = '';
         } else {
             $this->config->setInstallRoot('');
-            $this->installroot = '';
         }
+
+        $this->installroot = '';
         $this->_registry = &$this->config->getRegistry();
         if (is_object($package)) {
             $channel = $package->getChannel();
-            $pkg = $package;
+            $pkg     = $package;
             $package = $pkg->getPackage();
         } else {
             $pkg = false;
@@ -45931,11 +45213,13 @@ class PEAR_Installer extends PEAR_Downloader
             $channel = $info['channel'];
             $package = $info['package'];
         }
+
         $savechannel = $this->config->get('default_channel');
         $this->configSet('default_channel', $channel);
         if (!is_object($pkg)) {
             $pkg = $this->_registry->getPackage($package, $channel);
         }
+
         if (!$pkg) {
             $this->configSet('default_channel', $savechannel);
             return $this->raiseError($this->_registry->parsedPackageNameToString(
@@ -45944,16 +45228,19 @@ class PEAR_Installer extends PEAR_Downloader
                     'package' => $package
                 ), true) . ' not installed');
         }
+
         if ($pkg->getInstalledBinary()) {
             // this is just an alias for a binary package
             return $this->_registry->deletePackage($package, $channel);
         }
+
         $filelist = $pkg->getFilelist();
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         if (!class_exists('PEAR_Dependency2')) {
             require_once 'PEAR/Dependency2.php';
         }
-        $depchecker = &new PEAR_Dependency2($this->config, $options, 
+
+        $depchecker = &new PEAR_Dependency2($this->config, $options,
             array('channel' => $channel, 'package' => $package),
             PEAR_VALIDATE_UNINSTALLING);
         $e = $depchecker->validatePackageUninstall($this);
@@ -45961,16 +45248,17 @@ class PEAR_Installer extends PEAR_Downloader
         if (PEAR::isError($e)) {
             if (!isset($options['ignore-errors'])) {
                 return $this->raiseError($e);
-            } else {
-                if (!isset($options['soft'])) {
-                    $this->log(0, 'WARNING: ' . $e->getMessage());
-                }
+            }
+
+            if (!isset($options['soft'])) {
+                $this->log(0, 'WARNING: ' . $e->getMessage());
             }
         } elseif (is_array($e)) {
             if (!isset($options['soft'])) {
                 $this->log(0, $e[0]);
             }
         }
+
         $this->pkginfo = &$pkg;
         // pretty much nothing happens if we are only registering the uninstall
         if (empty($options['register-only'])) {
@@ -45983,19 +45271,22 @@ class PEAR_Installer extends PEAR_Downloader
                 $this->configSet('default_channel', $savechannel);
                 if (!isset($options['ignore-errors'])) {
                     return $this->raiseError($err);
-                } else {
-                    if (!isset($options['soft'])) {
-                        $this->log(0, 'WARNING: ' . $err->getMessage());
-                    }
+                }
+
+                if (!isset($options['soft'])) {
+                    $this->log(0, 'WARNING: ' . $err->getMessage());
                 }
             } else {
                 PEAR::popErrorHandling();
             }
+
             if (!$this->commitFileTransaction()) {
                 $this->rollbackFileTransaction();
                 if (!isset($options['ignore-errors'])) {
                     return $this->raiseError("uninstall failed");
-                } elseif (!isset($options['soft'])) {
+                }
+
+                if (!isset($options['soft'])) {
                     $this->log(0, 'WARNING: uninstall failed');
                 }
             } else {
@@ -46010,11 +45301,14 @@ class PEAR_Installer extends PEAR_Downloader
                     $this->configSet('default_channel', $savechannel);
                     return $this->_registry->deletePackage($package, $channel);
                 }
+
                 if (!$this->commitFileTransaction()) {
                     $this->rollbackFileTransaction();
                     if (!isset($options['ignore-errors'])) {
                         return $this->raiseError("uninstall failed");
-                    } elseif (!isset($options['soft'])) {
+                    }
+
+                    if (!isset($options['soft'])) {
                         $this->log(0, 'WARNING: uninstall failed');
                     }
                 }
@@ -46086,38 +45380,18 @@ class PEAR_Installer extends PEAR_Downloader
     }
 
     // }}}
-}
-
-// {{{ md5_file() utility function
-if (!function_exists("md5_file")) {
-    function md5_file($filename) {
-        if (!$fd = @fopen($file, 'r')) {
-            return false;
-        }
-        fclose($fd);
-        return md5(file_get_contents($filename));
-    }
-}
-// }}}
-
-?>                                                                                                                                                                                                                                                                                                                                                                                                               PEAR-1.7.2/PEAR/PackageFile.php                                                                     100644    1750    1750        40353 11014312742  11105                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                  PEAR-1.8.0/PEAR/PackageFile.php                                                                     100664     764     764        37507      100664  10734                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_PackageFile, package.xml parsing utility class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: PackageFile.php,v 1.41 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: PackageFile.php,v 1.48 2009/04/09 22:16:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -46141,9 +45415,9 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2);
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -46205,6 +45479,7 @@ class PEAR_PackageFile
             $a = false;
             return $a;
         }
+
         include_once 'PEAR/PackageFile/Parser/v' . $version{0} . '.php';
         $version = $version{0};
         $class = "PEAR_PackageFile_Parser_v$version";
@@ -46232,6 +45507,7 @@ class PEAR_PackageFile
             $a = false;
             return $a;
         }
+
         include_once 'PEAR/PackageFile/v' . $version{0} . '.php';
         $version = $version{0};
         $class = $this->getClassPrefix() . $version;
@@ -46255,22 +45531,25 @@ class PEAR_PackageFile
             if ($this->_logger) {
                 $obj->setLogger($this->_logger);
             }
+
             $obj->setConfig($this->_config);
             $obj->fromArray($arr);
             return $obj;
+        }
+
+        if (isset($arr['package']['attribs']['version'])) {
+            $obj = &$this->factory($arr['package']['attribs']['version']);
         } else {
-            if (isset($arr['package']['attribs']['version'])) {
-                $obj = &$this->factory($arr['package']['attribs']['version']);
-            } else {
-                $obj = &$this->factory('1.0');
-            }
-            if ($this->_logger) {
-                $obj->setLogger($this->_logger);
-            }
-            $obj->setConfig($this->_config);
-            $obj->fromArray($arr);
-            return $obj;
+            $obj = &$this->factory('1.0');
+        }
+
+        if ($this->_logger) {
+            $obj->setLogger($this->_logger);
         }
+
+        $obj->setConfig($this->_config);
+        $obj->fromArray($arr);
+        return $obj;
     }
 
     /**
@@ -46292,44 +45571,46 @@ class PEAR_PackageFile
                 return PEAR::raiseError('package.xml version "' . $packageversion[1] .
                     '" is not supported, only 1.0, 2.0, and 2.1 are supported.');
             }
+
             $object = &$this->parserFactory($packageversion[1]);
             if ($this->_logger) {
                 $object->setLogger($this->_logger);
             }
+
             $object->setConfig($this->_config);
             $pf = $object->parse($data, $file, $archive);
             if (PEAR::isError($pf)) {
                 return $pf;
             }
+
             if ($this->_rawReturn) {
                 return $pf;
             }
-            if ($pf->validate($state)) {
-                if ($this->_logger) {
-                    if ($pf->getValidationWarnings(false)) {
-                        foreach ($pf->getValidationWarnings() as $warning) {
-                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);
-                        }
-                    }
-                }
-                if (method_exists($pf, 'flattenFilelist')) {
-                    $pf->flattenFilelist(); // for v2
-                }
-                return $pf;
-            } else {
-                if ($this->_config->get('verbose') > 0) {
-                    if ($this->_logger) {
-                        if ($pf->getValidationWarnings(false)) {
-                            foreach ($pf->getValidationWarnings(false) as $warning) {
-                                $this->_logger->log(0, 'ERROR: ' . $warning['message']);
-                            }
-                        }
+
+            if (!$pf->validate($state)) {
+                if ($this->_config->get('verbose') > 0
+                    && $this->_logger && $pf->getValidationWarnings(false)) {
+                    foreach ($pf->getValidationWarnings(false) as $warning) {
+                        $this->_logger->log(0, 'ERROR: ' . $warning['message']);
                     }
                 }
+
                 $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',
                     2, null, null, $pf->getValidationWarnings());
                 return $a;
             }
+
+            if ($this->_logger && $pf->getValidationWarnings(false)) {
+                foreach ($pf->getValidationWarnings() as $warning) {
+                    $this->_logger->log(0, 'WARNING: ' . $warning['message']);
+                }
+            }
+
+            if (method_exists($pf, 'flattenFilelist')) {
+                $pf->flattenFilelist(); // for v2
+            }
+
+            return $pf;
         } elseif (preg_match('/<package[^>]+version="([^"]+)"/', $data, $packageversion)) {
             $a = PEAR::raiseError('package.xml file "' . $file .
                 '" has unsupported package.xml <package> version "' . $packageversion[1] . '"');
@@ -46338,6 +45619,7 @@ class PEAR_PackageFile
             if (!class_exists('PEAR_ErrorStack')) {
                 require_once 'PEAR/ErrorStack.php';
             }
+
             PEAR_ErrorStack::staticPush('PEAR_PackageFile',
                 PEAR_PACKAGEFILE_ERROR_NO_PACKAGEVERSION,
                 'warning', array('xml' => $data), 'package.xml "' . $file .
@@ -46348,26 +45630,28 @@ class PEAR_PackageFile
             if (PEAR::isError($pf)) {
                 return $pf;
             }
+
             if ($this->_rawReturn) {
                 return $pf;
             }
-            if ($pf->validate($state)) {
-                if ($this->_logger) {
-                    if ($pf->getValidationWarnings(false)) {
-                        foreach ($pf->getValidationWarnings() as $warning) {
-                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);
-                        }
-                    }
-                }
-                if (method_exists($pf, 'flattenFilelist')) {
-                    $pf->flattenFilelist(); // for v2
-                }
-                return $pf;
-            } else {
+
+            if (!$pf->validate($state)) {
                 $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',
                     2, null, null, $pf->getValidationWarnings());
                 return $a;
             }
+
+            if ($this->_logger && $pf->getValidationWarnings(false)) {
+                foreach ($pf->getValidationWarnings() as $warning) {
+                    $this->_logger->log(0, 'WARNING: ' . $warning['message']);
+                }
+            }
+
+            if (method_exists($pf, 'flattenFilelist')) {
+                $pf->flattenFilelist(); // for v2
+            }
+
+            return $pf;
         }
     }
 
@@ -46399,20 +45683,24 @@ class PEAR_PackageFile
         if (!class_exists('Archive_Tar')) {
             require_once 'Archive/Tar.php';
         }
+
         $tar = new Archive_Tar($file);
         if ($this->_debug <= 1) {
             $tar->pushErrorHandling(PEAR_ERROR_RETURN);
         }
+
         $content = $tar->listContent();
         if ($this->_debug <= 1) {
             $tar->popErrorHandling();
         }
+
         if (!is_array($content)) {
             if (is_string($file) && strlen($file < 255) &&
                   (!file_exists($file) || !@is_file($file))) {
                 $ret = PEAR::raiseError("could not open file \"$file\"");
                 return $ret;
             }
+
             $file = realpath($file);
             $ret = PEAR::raiseError("Could not get contents of package \"$file\"".
                                      '. Invalid tgz file.');
@@ -46423,7 +45711,8 @@ class PEAR_PackageFile
                 return $ret;
             }
         }
-        $xml = null;
+
+        $xml      = null;
         $origfile = $file;
         foreach ($content as $file) {
             $name = $file['filename'];
@@ -46431,20 +45720,28 @@ class PEAR_PackageFile
                 $xml = $name;
                 break;
             }
+
             if ($name == 'package.xml') {
                 $xml = $name;
                 break;
-            } elseif (ereg('package.xml$', $name, $match)) {
+            } elseif (preg_match('/package.xml$/', $name, $match)) {
                 $xml = $name;
                 break;
             }
         }
+
         if ($this->_tmpdir) {
             $tmpdir = $this->_tmpdir;
         } else {
-            $tmpdir = System::mkTemp(array('-d', 'pear'));
+            $tmpdir = System::mkTemp(array('-t', $this->_config->get('temp_dir'), '-d', 'pear'));
+            if ($tmpdir === false) {
+                $ret = PEAR::raiseError("there was a problem with getting the configured temp directory");
+                return $ret;
+            }
+
             PEAR_PackageFile::addTempFile($tmpdir);
         }
+
         $this->_extractErrors();
         PEAR::staticPushErrorHandling(PEAR_ERROR_CALLBACK, array($this, '_extractErrors'));
         if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
@@ -46452,11 +45749,13 @@ class PEAR_PackageFile
             if ($extra) {
                 $extra = ' ' . $extra;
             }
+
             PEAR::staticPopErrorHandling();
             $ret = PEAR::raiseError('could not extract the package.xml file from "' .
                 $origfile . '"' . $extra);
             return $ret;
         }
+
         PEAR::staticPopErrorHandling();
         $ret = &PEAR_PackageFile::fromPackageFile("$tmpdir/$xml", $state, $origfile);
         return $ret;
@@ -46501,9 +45800,13 @@ class PEAR_PackageFile
      */
     function &fromPackageFile($descfile, $state, $archive = false)
     {
+        $fp = false;
         if (is_string($descfile) && strlen($descfile) < 255 &&
-             (!file_exists($descfile) || !is_file($descfile) || !is_readable($descfile) ||
-             (!$fp = @fopen($descfile, 'r')))) {
+             (
+              !file_exists($descfile) || !is_file($descfile) || !is_readable($descfile)
+              || (!$fp = @fopen($descfile, 'r'))
+             )
+        ) {
             $a = PEAR::raiseError("Unable to open $descfile");
             return $a;
         }
@@ -46541,59 +45844,55 @@ class PEAR_PackageFile
             } else {
                 $info = PEAR::raiseError("No package definition found in '$info' directory");
             }
+
             return $info;
         }
 
         $fp = false;
         if (is_string($info) && strlen($info) < 255 &&
-             (file_exists($info) || ($fp = @fopen($info, 'r')))) {
+             (file_exists($info) || ($fp = @fopen($info, 'r')))
+        ) {
+
             if ($fp) {
                 fclose($fp);
             }
+
             $tmp = substr($info, -4);
             if ($tmp == '.xml') {
                 $info = &PEAR_PackageFile::fromPackageFile($info, $state);
             } elseif ($tmp == '.tar' || $tmp == '.tgz') {
                 $info = &PEAR_PackageFile::fromTgzFile($info, $state);
             } else {
-                $fp = fopen($info, "r");
+                $fp   = fopen($info, 'r');
                 $test = fread($fp, 5);
                 fclose($fp);
-                if ($test == "<?xml") {
+                if ($test == '<?xml') {
                     $info = &PEAR_PackageFile::fromPackageFile($info, $state);
                 } else {
                     $info = &PEAR_PackageFile::fromTgzFile($info, $state);
                 }
             }
-        } else {
-            $info = PEAR::raiseError("Cannot open '$info' for parsing");
+
             return $info;
         }
+
+        $info = PEAR::raiseError("Cannot open '$info' for parsing");
         return $info;
     }
-}
-
-?>
-                                                                                                                                                                                                                                                                                     PEAR-1.7.2/PEAR/Packager.php                                                                        100644    1750    1750        17163 11014312742  10472                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                         PEAR-1.8.0/PEAR/Packager.php                                                                        100664     764     764        15603      100664  10307                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Packager for generating releases
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Packager.php,v 1.71 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Packager.php,v 1.75 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -46611,9 +45910,9 @@ require_once 'System.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -46623,7 +45922,6 @@ class PEAR_Packager extends PEAR_Common
      * @var PEAR_Registry
      */
     var $_registry;
-    // {{{ package()
 
     function package($pkgfile = null, $compress = true, $pkg2 = null)
     {
@@ -46631,9 +45929,10 @@ class PEAR_Packager extends PEAR_Common
         if (empty($pkgfile)) {
             $pkgfile = 'package.xml';
         }
+
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $pkg = &new PEAR_PackageFile($this->config, $this->debug);
-        $pf = &$pkg->fromPackageFile($pkgfile, PEAR_VALIDATE_NORMAL);
+        $pkg  = &new PEAR_PackageFile($this->config, $this->debug);
+        $pf   = &$pkg->fromPackageFile($pkgfile, PEAR_VALIDATE_NORMAL);
         $main = &$pf;
         PEAR::staticPopErrorHandling();
         if (PEAR::isError($pf)) {
@@ -46642,12 +45941,13 @@ class PEAR_Packager extends PEAR_Common
                     $this->log(0, 'Error: ' . $error['message']);
                 }
             }
+
             $this->log(0, $pf->getMessage());
             return $this->raiseError("Cannot package, errors in package file");
-        } else {
-            foreach ($pf->getValidationWarnings() as $warning) {
-                $this->log(1, 'Warning: ' . $warning['message']);
-            }
+        }
+
+        foreach ($pf->getValidationWarnings() as $warning) {
+            $this->log(1, 'Warning: ' . $warning['message']);
         }
 
         // }}}
@@ -46664,40 +45964,46 @@ class PEAR_Packager extends PEAR_Common
                 }
                 $this->log(0, $pf2->getMessage());
                 return $this->raiseError("Cannot package, errors in second package file");
-            } else {
-                foreach ($pf2->getValidationWarnings() as $warning) {
-                    $this->log(1, 'Warning: ' . $warning['message']);
-                }
             }
+
+            foreach ($pf2->getValidationWarnings() as $warning) {
+                $this->log(1, 'Warning: ' . $warning['message']);
+            }
+
             if ($pf2->getPackagexmlVersion() == '2.0' ||
-                  $pf2->getPackagexmlVersion() == '2.1') {
-                $main = &$pf2;
+                  $pf2->getPackagexmlVersion() == '2.1'
+            ) {
+                $main  = &$pf2;
                 $other = &$pf;
             } else {
-                $main = &$pf;
+                $main  = &$pf;
                 $other = &$pf2;
             }
+
             if ($main->getPackagexmlVersion() != '2.0' &&
                   $main->getPackagexmlVersion() != '2.1') {
                 return PEAR::raiseError('Error: cannot package two package.xml version 1.0, can ' .
                     'only package together a package.xml 1.0 and package.xml 2.0');
             }
+
             if ($other->getPackagexmlVersion() != '1.0') {
                 return PEAR::raiseError('Error: cannot package two package.xml version 2.0, can ' .
                     'only package together a package.xml 1.0 and package.xml 2.0');
             }
         }
+
         $main->setLogger($this);
         if (!$main->validate(PEAR_VALIDATE_PACKAGING)) {
             foreach ($main->getValidationWarnings() as $warning) {
                 $this->log(0, 'Error: ' . $warning['message']);
             }
             return $this->raiseError("Cannot package, errors in package");
-        } else {
-            foreach ($main->getValidationWarnings() as $warning) {
-                $this->log(1, 'Warning: ' . $warning['message']);
-            }
         }
+
+        foreach ($main->getValidationWarnings() as $warning) {
+            $this->log(1, 'Warning: ' . $warning['message']);
+        }
+
         if ($pkg2) {
             $other->setLogger($this);
             $a = false;
@@ -46705,26 +46011,31 @@ class PEAR_Packager extends PEAR_Common
                 foreach ($other->getValidationWarnings() as $warning) {
                     $this->log(0, 'Error: ' . $warning['message']);
                 }
+
                 foreach ($main->getValidationWarnings() as $warning) {
                     $this->log(0, 'Error: ' . $warning['message']);
                 }
+
                 if ($a) {
                     return $this->raiseError('The two package.xml files are not equivalent!');
                 }
+
                 return $this->raiseError("Cannot package, errors in package");
-            } else {
-                foreach ($other->getValidationWarnings() as $warning) {
-                    $this->log(1, 'Warning: ' . $warning['message']);
-                }
             }
+
+            foreach ($other->getValidationWarnings() as $warning) {
+                $this->log(1, 'Warning: ' . $warning['message']);
+            }
+
             $gen = &$main->getDefaultGenerator();
             $tgzfile = $gen->toTgz2($this, $other, $compress);
             if (PEAR::isError($tgzfile)) {
                 return $tgzfile;
             }
+
             $dest_package = basename($tgzfile);
-            $pkgdir = dirname($pkgfile);
-    
+            $pkgdir       = dirname($pkgfile);
+
             // TAR the Package -------------------------------------------
             $this->log(1, "Package $dest_package done");
             if (file_exists("$pkgdir/CVS/Root")) {
@@ -46741,9 +46052,10 @@ class PEAR_Packager extends PEAR_Common
                 $this->log(0, $tgzfile->getMessage());
                 return $this->raiseError("Cannot package, errors in package");
             }
+
             $dest_package = basename($tgzfile);
-            $pkgdir = dirname($pkgfile);
-    
+            $pkgdir       = dirname($pkgfile);
+
             // TAR the Package -------------------------------------------
             $this->log(1, "Package $dest_package done");
             if (file_exists("$pkgdir/CVS/Root")) {
@@ -46753,3176 +46065,2823 @@ class PEAR_Packager extends PEAR_Common
                 $this->log(1, "(or set the CVS tag $cvstag by hand)");
             }
         }
-        return $dest_package;
-    }
-
-    // }}}
-}
 
-// {{{ md5_file() utility function
-if (!function_exists('md5_file')) {
-    function md5_file($file) {
-        if (!$fd = @fopen($file, 'r')) {
-            return false;
-        }
-        fclose($fd);
-        $md5 = md5(file_get_contents($file));
-        return $md5;
+        return $dest_package;
     }
-}
-// }}}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.7.2/PEAR/Registry.php                                                                        100644    1750    1750       220133 11014312742  10576                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                             PEAR-1.8.0/PEAR/Registry.php                                                                        100664     764     764       226577      100664  10440                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR_Registry
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V. V. Cox <cox at idecnet.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Registry.php,v 1.179 2009/04/10 19:42:18 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * for PEAR_Error
+ */
+require_once 'PEAR.php';
+require_once 'PEAR/DependencyDB.php';
+
+define('PEAR_REGISTRY_ERROR_LOCK',         -2);
+define('PEAR_REGISTRY_ERROR_FORMAT',       -3);
+define('PEAR_REGISTRY_ERROR_FILE',         -4);
+define('PEAR_REGISTRY_ERROR_CONFLICT',     -5);
+define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
+
+/**
+ * Administration class used to maintain the installed package database.
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V. V. Cox <cox at idecnet.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Registry extends PEAR
+{
+    /**
+     * File containing all channel information.
+     * @var string
+     */
+    var $channels = '';
+
+    /** Directory where registry files are stored.
+     * @var string
+     */
+    var $statedir = '';
+
+    /** File where the file map is stored
+     * @var string
+     */
+    var $filemap = '';
+
+    /** Directory where registry files for channels are stored.
+     * @var string
+     */
+    var $channelsdir = '';
+
+    /** Name of file used for locking the registry
+     * @var string
+     */
+    var $lockfile = '';
+
+    /** File descriptor used during locking
+     * @var resource
+     */
+    var $lock_fp = null;
+
+    /** Mode used during locking
+     * @var int
+     */
+    var $lock_mode = 0; // XXX UNUSED
+
+    /** Cache of package information.  Structure:
+     * array(
+     *   'package' => array('id' => ... ),
+     *   ... )
+     * @var array
+     */
+    var $pkginfo_cache = array();
+
+    /** Cache of file map.  Structure:
+     * array( '/path/to/file' => 'package', ... )
+     * @var array
+     */
+    var $filemap_cache = array();
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_pearChannel;
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_peclChannel;
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_docChannel;
+
+    /**
+     * @var PEAR_DependencyDB
+     */
+    var $_dependencyDB;
+
+    /**
+     * @var PEAR_Config
+     */
+    var $_config;
+
+    /**
+     * PEAR_Registry constructor.
+     *
+     * @param string (optional) PEAR install directory (for .php files)
+     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PEAR channel, if
+     *        default values are not desired.  Only used the very first time a PEAR
+     *        repository is initialized
+     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PECL channel, if
+     *        default values are not desired.  Only used the very first time a PEAR
+     *        repository is initialized
+     *
+     * @access public
+     */
+    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,
+                           $pecl_channel = false)
+    {
+        parent::PEAR();
+        $this->setInstallDir($pear_install_dir);
+        $this->_pearChannel = $pear_channel;
+        $this->_peclChannel = $pecl_channel;
+        $this->_config      = false;
+    }
+
+    function setInstallDir($pear_install_dir = PEAR_INSTALL_DIR)
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        $this->install_dir = $pear_install_dir;
+        $this->channelsdir = $pear_install_dir.$ds.'.channels';
+        $this->statedir    = $pear_install_dir.$ds.'.registry';
+        $this->filemap     = $pear_install_dir.$ds.'.filemap';
+        $this->lockfile    = $pear_install_dir.$ds.'.lock';
+    }
+
+    function hasWriteAccess()
+    {
+        if (!file_exists($this->install_dir)) {
+            $dir = $this->install_dir;
+            while ($dir && $dir != '.') {
+                $olddir = $dir;
+                $dir    = dirname($dir);
+                if ($dir != '.' && file_exists($dir)) {
+                    if (is_writeable($dir)) {
+                        return true;
+                    }
+
+                    return false;
+                }
+
+                if ($dir == $olddir) { // this can happen in safe mode
+                    return @is_writable($dir);
+                }
+            }
+
+            return false;
+        }
+
+        return is_writeable($this->install_dir);
+    }
+
+    function setConfig(&$config, $resetInstallDir = true)
+    {
+        $this->_config = &$config;
+        if ($resetInstallDir) {
+            $this->setInstallDir($config->get('php_dir'));
+        }
+    }
+
+    function _initializeChannelDirs()
+    {
+        static $running = false;
+        if (!$running) {
+            $running = true;
+            $ds = DIRECTORY_SEPARATOR;
+            if (!is_dir($this->channelsdir) ||
+                  !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'doc.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+                    $pear_channel = $this->_pearChannel;
+                    if (!is_a($pear_channel, 'PEAR_ChannelFile') || !$pear_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'PEAR/ChannelFile.php';
+                        }
+
+                        $pear_channel = new PEAR_ChannelFile;
+                        $pear_channel->setName('pear.php.net');
+                        $pear_channel->setAlias('pear');
+                        $pear_channel->setServer('pear.php.net');
+                        $pear_channel->setSummary('PHP Extension and Application Repository');
+                        $pear_channel->setDefaultPEARProtocols();
+                        $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
+                        $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
+                    } else {
+                        $pear_channel->setName('pear.php.net');
+                        $pear_channel->setAlias('pear');
+                    }
+
+                    $pear_channel->validate();
+                    $this->_addChannel($pear_channel);
+                }
+
+                if (!file_exists($this->channelsdir . $ds . 'pecl.php.net.reg')) {
+                    $pecl_channel = $this->_peclChannel;
+                    if (!is_a($pecl_channel, 'PEAR_ChannelFile') || !$pecl_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'PEAR/ChannelFile.php';
+                        }
+
+                        $pecl_channel = new PEAR_ChannelFile;
+                        $pecl_channel->setName('pecl.php.net');
+                        $pecl_channel->setAlias('pecl');
+                        $pecl_channel->setServer('pecl.php.net');
+                        $pecl_channel->setSummary('PHP Extension Community Library');
+                        $pecl_channel->setDefaultPEARProtocols();
+                        $pecl_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
+                        $pecl_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
+                        $pecl_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
+                    } else {
+                        $pecl_channel->setName('pecl.php.net');
+                        $pecl_channel->setAlias('pecl');
+                    }
+
+                    $pecl_channel->validate();
+                    $this->_addChannel($pecl_channel);
+                }
+
+                if (!file_exists($this->channelsdir . $ds . 'doc.php.net.reg')) {
+                    $doc_channel = $this->_docChannel;
+                    if (!is_a($doc_channel, 'PEAR_ChannelFile') || !$doc_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'PEAR/ChannelFile.php';
+                        }
+
+                        $doc_channel = new PEAR_ChannelFile;
+                        $doc_channel->setName('doc.php.net');
+                        $doc_channel->setAlias('phpdocs');
+                        $doc_channel->setServer('doc.php.net');
+                        $doc_channel->setSummary('PHP Documentation Team');
+                        $doc_channel->setDefaultPEARProtocols();
+                        $doc_channel->setBaseURL('REST1.0', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+                        $doc_channel->setBaseURL('REST1.1', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+                    } else {
+                        $doc_channel->setName('doc.php.net');
+                        $doc_channel->setAlias('doc');
+                    }
+
+                    $doc_channel->validate();
+                    $this->_addChannel($doc_channel);
+                }
+
+                if (!file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                    if (!class_exists('PEAR_ChannelFile')) {
+                        require_once 'PEAR/ChannelFile.php';
+                    }
+
+                    $private = new PEAR_ChannelFile;
+                    $private->setName('__uri');
+                    $private->setDefaultPEARProtocols();
+                    $private->setBaseURL('REST1.0', '****');
+                    $private->setSummary('Pseudo-channel for static packages');
+                    $this->_addChannel($private);
+                }
+                $this->_rebuildFileMap();
+            }
+
+            $running = false;
+        }
+    }
+
+    function _initializeDirs()
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        // XXX Compatibility code should be removed in the future
+        // rename all registry files if any to lowercase
+        if (!OS_WINDOWS && file_exists($this->statedir) && is_dir($this->statedir) &&
+              $handle = opendir($this->statedir)) {
+            $dest = $this->statedir . $ds;
+            while (false !== ($file = readdir($handle))) {
+                if (preg_match('/^.*[A-Z].*\.reg\\z/', $file)) {
+                    rename($dest . $file, $dest . strtolower($file));
+                }
+            }
+            closedir($handle);
+        }
+
+        $this->_initializeChannelDirs();
+        if (!file_exists($this->filemap)) {
+            $this->_rebuildFileMap();
+        }
+        $this->_initializeDepDB();
+    }
+
+    function _initializeDepDB()
+    {
+        if (!isset($this->_dependencyDB)) {
+            static $initializing = false;
+            if (!$initializing) {
+                $initializing = true;
+                if (!$this->_config) { // never used?
+                    $file = OS_WINDOWS ? 'pear.ini' : '.pearrc';
+                    $this->_config = &new PEAR_Config($this->statedir . DIRECTORY_SEPARATOR .
+                        $file);
+                    $this->_config->setRegistry($this);
+                    $this->_config->set('php_dir', $this->install_dir);
+                }
+
+                $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                if (PEAR::isError($this->_dependencyDB)) {
+                    // attempt to recover by removing the dep db
+                    if (file_exists($this->_config->get('php_dir', null, 'pear.php.net') .
+                        DIRECTORY_SEPARATOR . '.depdb')) {
+                        @unlink($this->_config->get('php_dir', null, 'pear.php.net') .
+                            DIRECTORY_SEPARATOR . '.depdb');
+                    }
+
+                    $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                    if (PEAR::isError($this->_dependencyDB)) {
+                        echo $this->_dependencyDB->getMessage();
+                        echo 'Unrecoverable error';
+                        exit(1);
+                    }
+                }
+
+                $initializing = false;
+            }
+        }
+    }
+
+    /**
+     * PEAR_Registry destructor.  Makes sure no locks are forgotten.
+     *
+     * @access private
+     */
+    function _PEAR_Registry()
+    {
+        parent::_PEAR();
+        if (is_resource($this->lock_fp)) {
+            $this->_unlock();
+        }
+    }
+
+    /**
+     * Make sure the directory where we keep registry files exists.
+     *
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertStateDir($channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_assertChannelStateDir($channel);
+        }
+
+        static $init = false;
+        if (!file_exists($this->statedir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $this->statedir))) {
+                return $this->raiseError("could not create directory '{$this->statedir}'");
+            }
+            $init = true;
+        } elseif (!is_dir($this->statedir)) {
+            return $this->raiseError('Cannot create directory ' . $this->statedir . ', ' .
+                'it already exists and is not a directory');
+        }
+
+        $ds = DIRECTORY_SEPARATOR;
+        if (!file_exists($this->channelsdir)) {
+            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'doc.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                $init = true;
+            }
+        } elseif (!is_dir($this->channelsdir)) {
+            return $this->raiseError('Cannot create directory ' . $this->channelsdir . ', ' .
+                'it already exists and is not a directory');
+        }
+
+        if ($init) {
+            static $running = false;
+            if (!$running) {
+                $running = true;
+                $this->_initializeDirs();
+                $running = false;
+                $init = false;
+            }
+        } else {
+            $this->_initializeDepDB();
+        }
+
+        return true;
+    }
+
+    /**
+     * Make sure the directory where we keep registry files exists for a non-standard channel.
+     *
+     * @param string channel name
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertChannelStateDir($channel)
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+                $this->_initializeChannelDirs();
+            }
+            return $this->_assertStateDir($channel);
+        }
+
+        $channelDir = $this->_channelDirectoryName($channel);
+        if (!is_dir($this->channelsdir) ||
+              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+            $this->_initializeChannelDirs();
+        }
+
+        if (!file_exists($channelDir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $channelDir))) {
+                return $this->raiseError("could not create directory '" . $channelDir .
+                    "'");
+            }
+        } elseif (!is_dir($channelDir)) {
+            return $this->raiseError("could not create directory '" . $channelDir .
+                "', already exists and is not a directory");
+        }
+
+        return true;
+    }
+
+    /**
+     * Make sure the directory where we keep registry files for channels exists
+     *
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertChannelDir()
+    {
+        if (!file_exists($this->channelsdir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $this->channelsdir))) {
+                return $this->raiseError("could not create directory '{$this->channelsdir}'");
+            }
+        } elseif (!is_dir($this->channelsdir)) {
+            return $this->raiseError("could not create directory '{$this->channelsdir}" .
+                "', it already exists and is not a directory");
+        }
+
+        if (!file_exists($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'System.php';
+            if (!System::mkdir(array('-p', $this->channelsdir . DIRECTORY_SEPARATOR . '.alias'))) {
+                return $this->raiseError("could not create directory '{$this->channelsdir}/.alias'");
+            }
+        } elseif (!is_dir($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
+            return $this->raiseError("could not create directory '{$this->channelsdir}" .
+                "/.alias', it already exists and is not a directory");
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the name of the file where data for a given package is stored.
+     *
+     * @param string channel name, or false if this is a PEAR package
+     * @param string package name
+     *
+     * @return string registry file name
+     *
+     * @access public
+     */
+    function _packageFileName($package, $channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_channelDirectoryName($channel) . DIRECTORY_SEPARATOR .
+                strtolower($package) . '.reg';
+        }
+
+        return $this->statedir . DIRECTORY_SEPARATOR . strtolower($package) . '.reg';
+    }
+
+    /**
+     * Get the name of the file where data for a given channel is stored.
+     * @param string channel name
+     * @return string registry file name
+     */
+    function _channelFileName($channel, $noaliases = false)
+    {
+        if (!$noaliases) {
+            if (file_exists($this->_getChannelAliasFileName($channel))) {
+                $channel = implode('', file($this->_getChannelAliasFileName($channel)));
+            }
+        }
+        return $this->channelsdir . DIRECTORY_SEPARATOR . str_replace('/', '_',
+            strtolower($channel)) . '.reg';
+    }
+
+    /**
+     * @param string
+     * @return string
+     */
+    function _getChannelAliasFileName($alias)
+    {
+        return $this->channelsdir . DIRECTORY_SEPARATOR . '.alias' .
+              DIRECTORY_SEPARATOR . str_replace('/', '_', strtolower($alias)) . '.txt';
+    }
+
+    /**
+     * Get the name of a channel from its alias
+     */
+    function _getChannelFromAlias($channel)
+    {
+        if (!$this->_channelExists($channel)) {
+            if ($channel == 'pear.php.net') {
+                return 'pear.php.net';
+            }
+
+            if ($channel == 'pecl.php.net') {
+                return 'pecl.php.net';
+            }
+
+            if ($channel == 'doc.php.net') {
+                return 'doc.php.net';
+            }
+
+            if ($channel == '__uri') {
+                return '__uri';
+            }
+
+            return false;
+        }
+
+        $channel = strtolower($channel);
+        if (file_exists($this->_getChannelAliasFileName($channel))) {
+            // translate an alias to an actual channel
+            return implode('', file($this->_getChannelAliasFileName($channel)));
+        }
+
+        return $channel;
+    }
+
+    /**
+     * Get the alias of a channel from its alias or its name
+     */
+    function _getAlias($channel)
+    {
+        if (!$this->_channelExists($channel)) {
+            if ($channel == 'pear.php.net') {
+                return 'pear';
+            }
+
+            if ($channel == 'pecl.php.net') {
+                return 'pecl';
+            }
+
+            if ($channel == 'doc.php.net') {
+                return 'phpdocs';
+            }
+
+            return false;
+        }
+
+        $channel = $this->_getChannel($channel);
+        if (PEAR::isError($channel)) {
+            return $channel;
+        }
+
+        return $channel->getAlias();
+    }
+
+    /**
+     * Get the name of the file where data for a given package is stored.
+     *
+     * @param string channel name, or false if this is a PEAR package
+     * @param string package name
+     *
+     * @return string registry file name
+     *
+     * @access public
+     */
+    function _channelDirectoryName($channel)
+    {
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            return $this->statedir;
+        }
+
+        $ch = $this->_getChannelFromAlias($channel);
+        if (!$ch) {
+            $ch = $channel;
+        }
+
+        return $this->statedir . DIRECTORY_SEPARATOR . strtolower('.channel.' .
+            str_replace('/', '_', $ch));
+    }
+
+    function _openPackageFile($package, $mode, $channel = false)
+    {
+        if (!$this->_assertStateDir($channel)) {
+            return null;
+        }
+
+        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
+            return null;
+        }
+
+        $file = $this->_packageFileName($package, $channel);
+        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
+            return null;
+        }
+
+        $fp = @fopen($file, $mode);
+        if (!$fp) {
+            return null;
+        }
+
+        return $fp;
+    }
+
+    function _closePackageFile($fp)
+    {
+        fclose($fp);
+    }
+
+    function _openChannelFile($channel, $mode)
+    {
+        if (!$this->_assertChannelDir()) {
+            return null;
+        }
+
+        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
+            return null;
+        }
+
+        $file = $this->_channelFileName($channel);
+        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
+            return null;
+        }
+
+        $fp = @fopen($file, $mode);
+        if (!$fp) {
+            return null;
+        }
+
+        return $fp;
+    }
+
+    function _closeChannelFile($fp)
+    {
+        fclose($fp);
+    }
+
+    function _rebuildFileMap()
+    {
+        if (!class_exists('PEAR_Installer_Role')) {
+            require_once 'PEAR/Installer/Role.php';
+        }
+
+        $channels = $this->_listAllPackages();
+        $files = array();
+        foreach ($channels as $channel => $packages) {
+            foreach ($packages as $package) {
+                $version = $this->_packageInfo($package, 'version', $channel);
+                $filelist = $this->_packageInfo($package, 'filelist', $channel);
+                if (!is_array($filelist)) {
+                    continue;
+                }
+
+                foreach ($filelist as $name => $attrs) {
+                    if (isset($attrs['attribs'])) {
+                        $attrs = $attrs['attribs'];
+                    }
+
+                    // it is possible for conflicting packages in different channels to
+                    // conflict with data files/doc files
+                    if ($name == 'dirtree') {
+                        continue;
+                    }
+
+                    if (isset($attrs['role']) && !in_array($attrs['role'],
+                          PEAR_Installer_Role::getInstallableRoles())) {
+                        // these are not installed
+                        continue;
+                    }
+
+                    if (isset($attrs['role']) && !in_array($attrs['role'],
+                          PEAR_Installer_Role::getBaseinstallRoles())) {
+                        $attrs['baseinstalldir'] = $package;
+                    }
+
+                    if (isset($attrs['baseinstalldir'])) {
+                        $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
+                    } else {
+                        $file = $name;
+                    }
+
+                    $file = preg_replace(',^/+,', '', $file);
+                    if ($channel != 'pear.php.net') {
+                        if (!isset($files[$attrs['role']])) {
+                            $files[$attrs['role']] = array();
+                        }
+                        $files[$attrs['role']][$file] = array(strtolower($channel),
+                            strtolower($package));
+                    } else {
+                        if (!isset($files[$attrs['role']])) {
+                            $files[$attrs['role']] = array();
+                        }
+                        $files[$attrs['role']][$file] = strtolower($package);
+                    }
+                }
+            }
+        }
+
+
+        $this->_assertStateDir();
+        if (!$this->hasWriteAccess()) {
+            return false;
+        }
+
+        $fp = @fopen($this->filemap, 'wb');
+        if (!$fp) {
+            return false;
+        }
+
+        $this->filemap_cache = $files;
+        fwrite($fp, serialize($files));
+        fclose($fp);
+        return true;
+    }
+
+    function _readFileMap()
+    {
+        if (!file_exists($this->filemap)) {
+            return array();
+        }
+
+        $fp = @fopen($this->filemap, 'r');
+        if (!$fp) {
+            return $this->raiseError('PEAR_Registry: could not open filemap "' . $this->filemap . '"', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
+        }
+
+        clearstatcache();
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        $fsize = filesize($this->filemap);
+        fclose($fp);
+        $data = file_get_contents($this->filemap);
+        set_magic_quotes_runtime($rt);
+        $tmp = unserialize($data);
+        if (!$tmp && $fsize > 7) {
+            return $this->raiseError('PEAR_Registry: invalid filemap data', PEAR_REGISTRY_ERROR_FORMAT, null, null, $data);
+        }
+
+        $this->filemap_cache = $tmp;
+        return true;
+    }
+
+    /**
+     * Lock the registry.
+     *
+     * @param integer lock mode, one of LOCK_EX, LOCK_SH or LOCK_UN.
+     *                See flock manual for more information.
+     *
+     * @return bool TRUE on success, FALSE if locking failed, or a
+     *              PEAR error if some other error occurs (such as the
+     *              lock file not being writable).
+     *
+     * @access private
+     */
+    function _lock($mode = LOCK_EX)
+    {
+        if (stristr(php_uname(), 'Windows 9')) {
+            return true;
+        }
+
+        if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
+            // XXX does not check type of lock (LOCK_SH/LOCK_EX)
+            return true;
+        }
+
+        if (!$this->_assertStateDir()) {
+            if ($mode == LOCK_EX) {
+                return $this->raiseError('Registry directory is not writeable by the current user');
+            }
+
+            return true;
+        }
+
+        $open_mode = 'w';
+        // XXX People reported problems with LOCK_SH and 'w'
+        if ($mode === LOCK_SH || $mode === LOCK_UN) {
+            if (!file_exists($this->lockfile)) {
+                touch($this->lockfile);
+            }
+            $open_mode = 'r';
+        }
+
+        if (!is_resource($this->lock_fp)) {
+            $this->lock_fp = @fopen($this->lockfile, $open_mode);
+        }
+
+        if (!is_resource($this->lock_fp)) {
+            $this->lock_fp = null;
+            return $this->raiseError("could not create lock file" .
+                                     (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+        }
+
+        if (!(int)flock($this->lock_fp, $mode)) {
+            switch ($mode) {
+                case LOCK_SH: $str = 'shared';    break;
+                case LOCK_EX: $str = 'exclusive'; break;
+                case LOCK_UN: $str = 'unlock';    break;
+                default:      $str = 'unknown';   break;
+            }
+
+            //is resource at this point, close it on error.
+            fclose($this->lock_fp);
+            $this->lock_fp = null;
+            return $this->raiseError("could not acquire $str lock ($this->lockfile)",
+                                     PEAR_REGISTRY_ERROR_LOCK);
+        }
+
+        return true;
+    }
+
+    function _unlock()
+    {
+        $ret = $this->_lock(LOCK_UN);
+        if (is_resource($this->lock_fp)) {
+            fclose($this->lock_fp);
+        }
+
+        $this->lock_fp = null;
+        return $ret;
+    }
+
+    function _packageExists($package, $channel = false)
+    {
+        return file_exists($this->_packageFileName($package, $channel));
+    }
+
+    /**
+     * Determine whether a channel exists in the registry
+     * @param string Channel name
+     * @param bool if true, then aliases will be ignored
+     * @return boolean
+     */
+    function _channelExists($channel, $noaliases = false)
+    {
+        $a = file_exists($this->_channelFileName($channel, $noaliases));
+        if (!$a && $channel == 'pear.php.net') {
+            return true;
+        }
+
+        if (!$a && $channel == 'pecl.php.net') {
+            return true;
+        }
+
+        if (!$a && $channel == 'doc.php.net') {
+            return true;
+        }
+
+        return $a;
+    }
+
+    /**
+     * @param PEAR_ChannelFile Channel object
+     * @param donotuse
+     * @param string Last-Modified HTTP tag from remote request
+     * @return boolean|PEAR_Error True on creation, false if it already exists
+     */
+    function _addChannel($channel, $update = false, $lastmodified = false)
+    {
+        if (!is_a($channel, 'PEAR_ChannelFile')) {
+            return false;
+        }
+
+        if (!$channel->validate()) {
+            return false;
+        }
+
+        if (file_exists($this->_channelFileName($channel->getName()))) {
+            if (!$update) {
+                return false;
+            }
+
+            $checker = $this->_getChannel($channel->getName());
+            if (PEAR::isError($checker)) {
+                return $checker;
+            }
+
+            if ($channel->getAlias() != $checker->getAlias()) {
+                if (file_exists($this->_getChannelAliasFileName($checker->getAlias()))) {
+                    @unlink($this->_getChannelAliasFileName($checker->getAlias()));
+                }
+            }
+        } else {
+            if ($update && !in_array($channel->getName(), array('pear.php.net', 'pecl.php.net', 'doc.php.net'))) {
+                return false;
+            }
+        }
+
+        $ret = $this->_assertChannelDir();
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+
+        $ret = $this->_assertChannelStateDir($channel->getName());
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+
+        if ($channel->getAlias() != $channel->getName()) {
+            if (file_exists($this->_getChannelAliasFileName($channel->getAlias())) &&
+                  $this->_getChannelFromAlias($channel->getAlias()) != $channel->getName()) {
+                $channel->setAlias($channel->getName());
+            }
+
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            $fp = @fopen($this->_getChannelAliasFileName($channel->getAlias()), 'w');
+            if (!$fp) {
+                return false;
+            }
+
+            fwrite($fp, $channel->getName());
+            fclose($fp);
+        }
+
+        if (!$this->hasWriteAccess()) {
+            return false;
+        }
+
+        $fp = @fopen($this->_channelFileName($channel->getName()), 'wb');
+        if (!$fp) {
+            return false;
+        }
+
+        $info = $channel->toArray();
+        if ($lastmodified) {
+            $info['_lastmodified'] = $lastmodified;
+        } else {
+            $info['_lastmodified'] = date('r');
+        }
+
+        fwrite($fp, serialize($info));
+        fclose($fp);
+        return true;
+    }
+
+    /**
+     * Deletion fails if there are any packages installed from the channel
+     * @param string|PEAR_ChannelFile channel name
+     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
+     */
+    function _deleteChannel($channel)
+    {
+        if (!is_string($channel)) {
+            if (!is_a($channel, 'PEAR_ChannelFile')) {
+                return false;
+            }
+
+            if (!$channel->validate()) {
+                return false;
+            }
+            $channel = $channel->getName();
+        }
+
+        if ($this->_getChannelFromAlias($channel) == '__uri') {
+            return false;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
+            return false;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'doc.php.net') {
+            return false;
+        }
+
+        if (!$this->_channelExists($channel)) {
+            return false;
+        }
+
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            return false;
+        }
+
+        $channel = $this->_getChannelFromAlias($channel);
+        if ($channel == 'pear.php.net') {
+            return false;
+        }
+
+        $test = $this->_listChannelPackages($channel);
+        if (count($test)) {
+            return false;
+        }
+
+        $test = @rmdir($this->_channelDirectoryName($channel));
+        if (!$test) {
+            return false;
+        }
+
+        $file = $this->_getChannelAliasFileName($this->_getAlias($channel));
+        if (file_exists($file)) {
+            $test = @unlink($file);
+            if (!$test) {
+                return false;
+            }
+        }
+
+        $file = $this->_channelFileName($channel);
+        $ret = true;
+        if (file_exists($file)) {
+            $ret = @unlink($file);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Determine whether a channel exists in the registry
+     * @param string Channel Alias
+     * @return boolean
+     */
+    function _isChannelAlias($alias)
+    {
+        return file_exists($this->_getChannelAliasFileName($alias));
+    }
+
+    /**
+     * @param string|null
+     * @param string|null
+     * @param string|null
+     * @return array|null
+     * @access private
+     */
+    function _packageInfo($package = null, $key = null, $channel = 'pear.php.net')
+    {
+        if ($package === null) {
+            if ($channel === null) {
+                $channels = $this->_listChannels();
+                $ret = array();
+                foreach ($channels as $channel) {
+                    $channel = strtolower($channel);
+                    $ret[$channel] = array();
+                    $packages = $this->_listPackages($channel);
+                    foreach ($packages as $package) {
+                        $ret[$channel][] = $this->_packageInfo($package, null, $channel);
+                    }
+                }
+
+                return $ret;
+            }
+
+            $ps = $this->_listPackages($channel);
+            if (!count($ps)) {
+                return array();
+            }
+            return array_map(array(&$this, '_packageInfo'),
+                             $ps, array_fill(0, count($ps), null),
+                             array_fill(0, count($ps), $channel));
+        }
+
+        $fp = $this->_openPackageFile($package, 'r', $channel);
+        if ($fp === null) {
+            return null;
+        }
+
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        $this->_closePackageFile($fp);
+        $data = file_get_contents($this->_packageFileName($package, $channel));
+        set_magic_quotes_runtime($rt);
+        $data = unserialize($data);
+        if ($key === null) {
+            return $data;
+        }
+
+        // compatibility for package.xml version 2.0
+        if (isset($data['old'][$key])) {
+            return $data['old'][$key];
+        }
+
+        if (isset($data[$key])) {
+            return $data[$key];
+        }
+
+        return null;
+    }
+
+    /**
+     * @param string Channel name
+     * @param bool whether to strictly retrieve info of channels, not just aliases
+     * @return array|null
+     */
+    function _channelInfo($channel, $noaliases = false)
+    {
+        if (!$this->_channelExists($channel, $noaliases)) {
+            return null;
+        }
+
+        $fp = $this->_openChannelFile($channel, 'r');
+        if ($fp === null) {
+            return null;
+        }
+
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        $this->_closeChannelFile($fp);
+        $data = file_get_contents($this->_channelFileName($channel));
+        set_magic_quotes_runtime($rt);
+        $data = unserialize($data);
+        return $data;
+    }
+
+    function _listChannels()
+    {
+        $channellist = array();
+        if (!file_exists($this->channelsdir) || !is_dir($this->channelsdir)) {
+            return array('pear.php.net', 'pecl.php.net', 'doc.php.net', '__uri');
+        }
+
+        $dp = opendir($this->channelsdir);
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+
+            if ($ent == '__uri.reg') {
+                $channellist[] = '__uri';
+                continue;
+            }
+
+            $channellist[] = str_replace('_', '/', substr($ent, 0, -4));
+        }
+
+        closedir($dp);
+        if (!in_array('pear.php.net', $channellist)) {
+            $channellist[] = 'pear.php.net';
+        }
+
+        if (!in_array('pecl.php.net', $channellist)) {
+            $channellist[] = 'pecl.php.net';
+        }
+
+        if (!in_array('doc.php.net', $channellist)) {
+            $channellist[] = 'doc.php.net';
+        }
+
+
+        if (!in_array('__uri', $channellist)) {
+            $channellist[] = '__uri';
+        }
+
+        natsort($channellist);
+        return $channellist;
+    }
+
+    function _listPackages($channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_listChannelPackages($channel);
+        }
+
+        if (!file_exists($this->statedir) || !is_dir($this->statedir)) {
+            return array();
+        }
+
+        $pkglist = array();
+        $dp = opendir($this->statedir);
+        if (!$dp) {
+            return $pkglist;
+        }
+
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+
+            $pkglist[] = substr($ent, 0, -4);
+        }
+        closedir($dp);
+        return $pkglist;
+    }
+
+    function _listChannelPackages($channel)
+    {
+        $pkglist = array();
+        if (!file_exists($this->_channelDirectoryName($channel)) ||
+              !is_dir($this->_channelDirectoryName($channel))) {
+            return array();
+        }
+
+        $dp = opendir($this->_channelDirectoryName($channel));
+        if (!$dp) {
+            return $pkglist;
+        }
+
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+            $pkglist[] = substr($ent, 0, -4);
+        }
+
+        closedir($dp);
+        return $pkglist;
+    }
+
+    function _listAllPackages()
+    {
+        $ret = array();
+        foreach ($this->_listChannels() as $channel) {
+            $ret[$channel] = $this->_listPackages($channel);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Add an installed package to the registry
+     * @param string package name
+     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
+     * @return bool success of saving
+     * @access private
+     */
+    function _addPackage($package, $info)
+    {
+        if ($this->_packageExists($package)) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($package, 'wb');
+        if ($fp === null) {
+            return false;
+        }
+
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        if (isset($info['filelist'])) {
+            $this->_rebuildFileMap();
+        }
+
+        return true;
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     * @access private
+     */
+    function _addPackage2($info)
+    {
+        if (!is_a($info, 'PEAR_PackageFile_v1') && !is_a($info, 'PEAR_PackageFile_v2')) {
+            return false;
+        }
+
+        if (!$info->validate()) {
+            if (class_exists('PEAR_Common')) {
+                $ui = PEAR_Frontend::singleton();
+                if ($ui) {
+                    foreach ($info->getValidationWarnings() as $err) {
+                        $ui->log($err['message'], true);
+                    }
+                }
+            }
+            return false;
+        }
+
+        $channel = $info->getChannel();
+        $package = $info->getPackage();
+        $save = $info;
+        if ($this->_packageExists($package, $channel)) {
+            return false;
+        }
+
+        if (!$this->_channelExists($channel, true)) {
+            return false;
+        }
+
+        $info = $info->toArray(true);
+        if (!$info) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($package, 'wb', $channel);
+        if ($fp === null) {
+            return false;
+        }
+
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        $this->_rebuildFileMap();
+        return true;
+    }
+
+    /**
+     * @param string Package name
+     * @param array parsed package.xml 1.0
+     * @param bool this parameter is only here for BC.  Don't use it.
+     * @access private
+     */
+    function _updatePackage($package, $info, $merge = true)
+    {
+        $oldinfo = $this->_packageInfo($package);
+        if (empty($oldinfo)) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($package, 'w');
+        if ($fp === null) {
+            return false;
+        }
+
+        if (is_object($info)) {
+            $info = $info->toArray();
+        }
+        $info['_lastmodified'] = time();
+
+        $newinfo = $info;
+        if ($merge) {
+            $info = array_merge($oldinfo, $info);
+        } else {
+            $diff = $info;
+        }
+
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        if (isset($newinfo['filelist'])) {
+            $this->_rebuildFileMap();
+        }
+
+        return true;
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     * @access private
+     */
+    function _updatePackage2($info)
+    {
+        if (!$this->_packageExists($info->getPackage(), $info->getChannel())) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($info->getPackage(), 'w', $info->getChannel());
+        if ($fp === null) {
+            return false;
+        }
+
+        $save = $info;
+        $info = $save->getArray(true);
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        $this->_rebuildFileMap();
+        return true;
+    }
+
+    /**
+     * @param string Package name
+     * @param string Channel name
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
+     * @access private
+     */
+    function &_getPackage($package, $channel = 'pear.php.net')
+    {
+        $info = $this->_packageInfo($package, null, $channel);
+        if ($info === null) {
+            return $info;
+        }
+
+        $a = $this->_config;
+        if (!$a) {
+            $this->_config = &new PEAR_Config;
+            $this->_config->set('php_dir', $this->statedir);
+        }
+
+        if (!class_exists('PEAR_PackageFile')) {
+            require_once 'PEAR/PackageFile.php';
+        }
+
+        $pkg = &new PEAR_PackageFile($this->_config);
+        $pf = &$pkg->fromArray($info);
+        return $pf;
+    }
+
+    /**
+     * @param string channel name
+     * @param bool whether to strictly retrieve channel names
+     * @return PEAR_ChannelFile|PEAR_Error
+     * @access private
+     */
+    function &_getChannel($channel, $noaliases = false)
+    {
+        $ch = false;
+        if ($this->_channelExists($channel, $noaliases)) {
+            $chinfo = $this->_channelInfo($channel, $noaliases);
+            if ($chinfo) {
+                if (!class_exists('PEAR_ChannelFile')) {
+                    require_once 'PEAR/ChannelFile.php';
+                }
+
+                $ch = &PEAR_ChannelFile::fromArrayWithErrors($chinfo);
+            }
+        }
+
+        if ($ch) {
+            if ($ch->validate()) {
+                return $ch;
+            }
+
+            foreach ($ch->getErrors(true) as $err) {
+                $message = $err['message'] . "\n";
+            }
+
+            $ch = PEAR::raiseError($message);
+            return $ch;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+
+            $pear_channel = new PEAR_ChannelFile;
+            $pear_channel->setName('pear.php.net');
+            $pear_channel->setAlias('pear');
+            $pear_channel->setSummary('PHP Extension and Application Repository');
+            $pear_channel->setDefaultPEARProtocols();
+            $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
+            $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
+            return $pear_channel;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+            $pear_channel = new PEAR_ChannelFile;
+            $pear_channel->setName('pecl.php.net');
+            $pear_channel->setAlias('pecl');
+            $pear_channel->setSummary('PHP Extension Community Library');
+            $pear_channel->setDefaultPEARProtocols();
+            $pear_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
+            $pear_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
+            $pear_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
+            return $pear_channel;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'doc.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+
+            $doc_channel = new PEAR_ChannelFile;
+            $doc_channel->setName('doc.php.net');
+            $doc_channel->setAlias('phpdocs');
+            $doc_channel->setSummary('PHP Documentation Team');
+            $doc_channel->setDefaultPEARProtocols();
+            $doc_channel->setBaseURL('REST1.0', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+            $doc_channel->setBaseURL('REST1.1', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+            return $doc_channel;
+        }
+
+
+        if ($this->_getChannelFromAlias($channel) == '__uri') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'PEAR/ChannelFile.php';
+            }
+
+            $private = new PEAR_ChannelFile;
+            $private->setName('__uri');
+            $private->setDefaultPEARProtocols();
+            $private->setBaseURL('REST1.0', '****');
+            $private->setSummary('Pseudo-channel for static packages');
+            return $private;
+        }
+
+        return $ch;
+    }
+
+    /**
+     * @param string Package name
+     * @param string Channel name
+     * @return bool
+     */
+    function packageExists($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_packageExists($package, $channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    // {{{ channelExists()
+
+    /**
+     * @param string channel name
+     * @param bool if true, then aliases will be ignored
+     * @return bool
+     */
+    function channelExists($channel, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_channelExists($channel, $noaliases);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    // {{{ isAlias()
+
+    /**
+     * Determines whether the parameter is an alias of a channel
+     * @param string
+     * @return bool
+     */
+    function isAlias($alias)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_isChannelAlias($alias);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ packageInfo()
+
+    /**
+     * @param string|null
+     * @param string|null
+     * @param string
+     * @return array|null
+     */
+    function packageInfo($package = null, $key = null, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_packageInfo($package, $key, $channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ channelInfo()
+
+    /**
+     * Retrieve a raw array of channel data.
+     *
+     * Do not use this, instead use {@link getChannel()} for normal
+     * operations.  Array structure is undefined in this method
+     * @param string channel name
+     * @param bool whether to strictly retrieve information only on non-aliases
+     * @return array|null|PEAR_Error
+     */
+    function channelInfo($channel = null, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_channelInfo($channel, $noaliases);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    /**
+     * @param string
+     */
+    function channelName($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_getChannelFromAlias($channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    /**
+     * @param string
+     */
+    function channelAlias($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_getAlias($channel);
+        $this->_unlock();
+        return $ret;
+    }
+    // {{{ listPackages()
+
+    function listPackages($channel = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listPackages($channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ listAllPackages()
+
+    function listAllPackages()
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listAllPackages();
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ listChannel()
+
+    function listChannels()
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listChannels();
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addPackage()
+
+    /**
+     * Add an installed package to the registry
+     * @param string|PEAR_PackageFile_v1|PEAR_PackageFile_v2 package name or object
+     *               that will be passed to {@link addPackage2()}
+     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
+     * @return bool success of saving
+     */
+    function addPackage($package, $info)
+    {
+        if (is_object($info)) {
+            return $this->addPackage2($info);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addPackage($package, $info);
+        $this->_unlock();
+        if ($ret) {
+            if (!class_exists('PEAR_PackageFile_v1')) {
+                require_once 'PEAR/PackageFile/v1.php';
+            }
+            $pf = new PEAR_PackageFile_v1;
+            $pf->setConfig($this->_config);
+            $pf->fromArray($info);
+            $this->_dependencyDB->uninstallPackage($pf);
+            $this->_dependencyDB->installPackage($pf);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addPackage2()
+
+    function addPackage2($info)
+    {
+        if (!is_object($info)) {
+            return $this->addPackage($info['package'], $info);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addPackage2($info);
+        $this->_unlock();
+        if ($ret) {
+            $this->_dependencyDB->uninstallPackage($info);
+            $this->_dependencyDB->installPackage($info);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updateChannel()
+
+    /**
+     * For future expandibility purposes, separate this
+     * @param PEAR_ChannelFile
+     */
+    function updateChannel($channel, $lastmodified = null)
+    {
+        if ($channel->getName() == '__uri') {
+            return false;
+        }
+        return $this->addChannel($channel, $lastmodified, true);
+    }
+
+    // }}}
+    // {{{ deleteChannel()
+
+    /**
+     * Deletion fails if there are any packages installed from the channel
+     * @param string|PEAR_ChannelFile channel name
+     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
+     */
+    function deleteChannel($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_deleteChannel($channel);
+        $this->_unlock();
+        if ($ret && is_a($this->_config, 'PEAR_Config')) {
+            $this->_config->setChannels($this->listChannels());
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addChannel()
+
+    /**
+     * @param PEAR_ChannelFile Channel object
+     * @param string Last-Modified header from HTTP for caching
+     * @return boolean|PEAR_Error True on creation, false if it already exists
+     */
+    function addChannel($channel, $lastmodified = false, $update = false)
+    {
+        if (!is_a($channel, 'PEAR_ChannelFile')) {
+            return false;
+        }
+        if (!$channel->validate()) {
+            return false;
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addChannel($channel, $update, $lastmodified);
+        $this->_unlock();
+        if (!$update && $ret && is_a($this->_config, 'PEAR_Config')) {
+            $this->_config->setChannels($this->listChannels());
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ deletePackage()
+
+    function deletePackage($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $file = $this->_packageFileName($package, $channel);
+        if (file_exists($file)) {
+            $ret = @unlink($file);
+        } else {
+            $ret = false;
+        }
+        $this->_rebuildFileMap();
+        $this->_unlock();
+        $p = array('channel' => $channel, 'package' => $package);
+        $this->_dependencyDB->uninstallPackage($p);
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updatePackage()
+
+    function updatePackage($package, $info, $merge = true)
+    {
+        if (is_object($info)) {
+            return $this->updatePackage2($info, $merge);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_updatePackage($package, $info, $merge);
+        $this->_unlock();
+        if ($ret) {
+            if (!class_exists('PEAR_PackageFile_v1')) {
+                require_once 'PEAR/PackageFile/v1.php';
+            }
+            $pf = new PEAR_PackageFile_v1;
+            $pf->setConfig($this->_config);
+            $pf->fromArray($this->packageInfo($package));
+            $this->_dependencyDB->uninstallPackage($pf);
+            $this->_dependencyDB->installPackage($pf);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updatePackage2()
+
+    function updatePackage2($info)
+    {
+
+        if (!is_object($info)) {
+            return $this->updatePackage($info['package'], $info, $merge);
+        }
+
+        if (!$info->validate(PEAR_VALIDATE_DOWNLOADING)) {
+            return false;
+        }
+
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+
+        $ret = $this->_updatePackage2($info);
+        $this->_unlock();
+        if ($ret) {
+            $this->_dependencyDB->uninstallPackage($info);
+            $this->_dependencyDB->installPackage($info);
+        }
+
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getChannel()
+    /**
+     * @param string channel name
+     * @param bool whether to strictly return raw channels (no aliases)
+     * @return PEAR_ChannelFile|PEAR_Error
+     */
+    function &getChannel($channel, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = &$this->_getChannel($channel, $noaliases);
+        $this->_unlock();
+        if (!$ret) {
+            return PEAR::raiseError('Unknown channel: ' . $channel);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getPackage()
+    /**
+     * @param string package name
+     * @param string channel name
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
+     */
+    function &getPackage($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $pf = &$this->_getPackage($package, $channel);
+        $this->_unlock();
+        return $pf;
+    }
+
+    // }}}
+
+    /**
+     * Get PEAR_PackageFile_v[1/2] objects representing the contents of
+     * a dependency group that are installed.
+     *
+     * This is used at uninstall-time
+     * @param array
+     * @return array|false
+     */
+    function getInstalledGroup($group)
+    {
+        $ret = array();
+        if (isset($group['package'])) {
+            if (!isset($group['package'][0])) {
+                $group['package'] = array($group['package']);
+            }
+            foreach ($group['package'] as $package) {
+                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
+                $p = &$this->getPackage($package['name'], $depchannel);
+                if ($p) {
+                    $save = &$p;
+                    $ret[] = &$save;
+                }
+            }
+        }
+        if (isset($group['subpackage'])) {
+            if (!isset($group['subpackage'][0])) {
+                $group['subpackage'] = array($group['subpackage']);
+            }
+            foreach ($group['subpackage'] as $package) {
+                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
+                $p = &$this->getPackage($package['name'], $depchannel);
+                if ($p) {
+                    $save = &$p;
+                    $ret[] = &$save;
+                }
+            }
+        }
+        if (!count($ret)) {
+            return false;
+        }
+        return $ret;
+    }
+
+    // {{{ getChannelValidator()
+    /**
+     * @param string channel name
+     * @return PEAR_Validate|false
+     */
+    function &getChannelValidator($channel)
+    {
+        $chan = $this->getChannel($channel);
+        if (PEAR::isError($chan)) {
+            return $chan;
+        }
+        $val = $chan->getValidationObject();
+        return $val;
+    }
+    // }}}
+    // {{{ getChannels()
+    /**
+     * @param string channel name
+     * @return array an array of PEAR_ChannelFile objects representing every installed channel
+     */
+    function &getChannels()
+    {
+        $ret = array();
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        foreach ($this->_listChannels() as $channel) {
+            $e = &$this->_getChannel($channel);
+            if (!$e || PEAR::isError($e)) {
+                continue;
+            }
+            $ret[] = $e;
+        }
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ checkFileMap()
+
+    /**
+     * Test whether a file or set of files belongs to a package.
+     *
+     * If an array is passed in
+     * @param string|array file path, absolute or relative to the pear
+     *                     install dir
+     * @param string|array name of PEAR package or array('package' => name, 'channel' =>
+     *                     channel) of a package that will be ignored
+     * @param string API version - 1.1 will exclude any files belonging to a package
+     * @param array private recursion variable
+     * @return array|false which package and channel the file belongs to, or an empty
+     *                     string if the file does not belong to an installed package,
+     *                     or belongs to the second parameter's package
+     */
+    function checkFileMap($path, $package = false, $api = '1.0', $attrs = false)
+    {
+        if (is_array($path)) {
+            static $notempty;
+            if (empty($notempty)) {
+                if (!class_exists('PEAR_Installer_Role')) {
+                    require_once 'PEAR/Installer/Role.php';
+                }
+                $notempty = create_function('$a','return !empty($a);');
+            }
+            $package = is_array($package) ? array(strtolower($package[0]), strtolower($package[1]))
+                : strtolower($package);
+            $pkgs = array();
+            foreach ($path as $name => $attrs) {
+                if (is_array($attrs)) {
+                    if (isset($attrs['install-as'])) {
+                        $name = $attrs['install-as'];
+                    }
+                    if (!in_array($attrs['role'], PEAR_Installer_Role::getInstallableRoles())) {
+                        // these are not installed
+                        continue;
+                    }
+                    if (!in_array($attrs['role'], PEAR_Installer_Role::getBaseinstallRoles())) {
+                        $attrs['baseinstalldir'] = is_array($package) ? $package[1] : $package;
+                    }
+                    if (isset($attrs['baseinstalldir'])) {
+                        $name = $attrs['baseinstalldir'] . DIRECTORY_SEPARATOR . $name;
+                    }
+                }
+                $pkgs[$name] = $this->checkFileMap($name, $package, $api, $attrs);
+                if (PEAR::isError($pkgs[$name])) {
+                    return $pkgs[$name];
+                }
+            }
+            return array_filter($pkgs, $notempty);
+        }
+        if (empty($this->filemap_cache)) {
+            if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+                return $e;
+            }
+            $err = $this->_readFileMap();
+            $this->_unlock();
+            if (PEAR::isError($err)) {
+                return $err;
+            }
+        }
+        if (!$attrs) {
+            $attrs = array('role' => 'php'); // any old call would be for PHP role only
+        }
+        if (isset($this->filemap_cache[$attrs['role']][$path])) {
+            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
+                return false;
+            }
+            return $this->filemap_cache[$attrs['role']][$path];
+        }
+        $l = strlen($this->install_dir);
+        if (substr($path, 0, $l) == $this->install_dir) {
+            $path = preg_replace('!^'.DIRECTORY_SEPARATOR.'+!', '', substr($path, $l));
+        }
+        if (isset($this->filemap_cache[$attrs['role']][$path])) {
+            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
+                return false;
+            }
+            return $this->filemap_cache[$attrs['role']][$path];
+        }
+        return false;
+    }
+
+    // }}}
+    // {{{ flush()
+    /**
+     * Force a reload of the filemap
+     * @since 1.5.0RC3
+     */
+    function flushFileMap()
+    {
+        $this->filemap_cache = null;
+        clearstatcache(); // ensure that the next read gets the full, current filemap
+    }
+
+    // }}}
+    // {{{ apiVersion()
+    /**
+     * Get the expected API version.  Channels API is version 1.1, as it is backwards
+     * compatible with 1.0
+     * @return string
+     */
+    function apiVersion()
+    {
+        return '1.1';
+    }
+    // }}}
+
+
+    /**
+     * Parse a package name, or validate a parsed package name array
+     * @param string|array pass in an array of format
+     *                     array(
+     *                      'package' => 'pname',
+     *                     ['channel' => 'channame',]
+     *                     ['version' => 'version',]
+     *                     ['state' => 'state',]
+     *                     ['group' => 'groupname'])
+     *                     or a string of format
+     *                     [channel://][channame/]pname[-version|-state][/group=groupname]
+     * @return array|PEAR_Error
+     */
+    function parsePackageName($param, $defaultchannel = 'pear.php.net')
+    {
+        $saveparam = $param;
+        if (is_array($param)) {
+            // convert to string for error messages
+            $saveparam = $this->parsedPackageNameToString($param);
+            // process the array
+            if (!isset($param['package'])) {
+                return PEAR::raiseError('parsePackageName(): array $param ' .
+                    'must contain a valid package name in index "param"',
+                    'package', null, null, $param);
+            }
+            if (!isset($param['uri'])) {
+                if (!isset($param['channel'])) {
+                    $param['channel'] = $defaultchannel;
+                }
+            } else {
+                $param['channel'] = '__uri';
+            }
+        } else {
+            $components = @parse_url((string) $param);
+            if (isset($components['scheme'])) {
+                if ($components['scheme'] == 'http') {
+                    // uri package
+                    $param = array('uri' => $param, 'channel' => '__uri');
+                } elseif($components['scheme'] != 'channel') {
+                    return PEAR::raiseError('parsePackageName(): only channel:// uris may ' .
+                        'be downloaded, not "' . $param . '"', 'invalid', null, null, $param);
+                }
+            }
+            if (!isset($components['path'])) {
+                return PEAR::raiseError('parsePackageName(): array $param ' .
+                    'must contain a valid package name in "' . $param . '"',
+                    'package', null, null, $param);
+            }
+            if (isset($components['host'])) {
+                // remove the leading "/"
+                $components['path'] = substr($components['path'], 1);
+            }
+            if (!isset($components['scheme'])) {
+                if (strpos($components['path'], '/') !== false) {
+                    if ($components['path']{0} == '/') {
+                        return PEAR::raiseError('parsePackageName(): this is not ' .
+                            'a package name, it begins with "/" in "' . $param . '"',
+                            'invalid', null, null, $param);
+                    }
+                    $parts = explode('/', $components['path']);
+                    $components['host'] = array_shift($parts);
+                    if (count($parts) > 1) {
+                        $components['path'] = array_pop($parts);
+                        $components['host'] .= '/' . implode('/', $parts);
+                    } else {
+                        $components['path'] = implode('/', $parts);
+                    }
+                } else {
+                    $components['host'] = $defaultchannel;
+                }
+            } else {
+                if (strpos($components['path'], '/')) {
+                    $parts = explode('/', $components['path']);
+                    $components['path'] = array_pop($parts);
+                    $components['host'] .= '/' . implode('/', $parts);
+                }
+            }
+
+            if (is_array($param)) {
+                $param['package'] = $components['path'];
+            } else {
+                $param = array(
+                    'package' => $components['path']
+                    );
+                if (isset($components['host'])) {
+                    $param['channel'] = $components['host'];
+                }
+            }
+            if (isset($components['fragment'])) {
+                $param['group'] = $components['fragment'];
+            }
+            if (isset($components['user'])) {
+                $param['user'] = $components['user'];
+            }
+            if (isset($components['pass'])) {
+                $param['pass'] = $components['pass'];
+            }
+            if (isset($components['query'])) {
+                parse_str($components['query'], $param['opts']);
+            }
+            // check for extension
+            $pathinfo = pathinfo($param['package']);
+            if (isset($pathinfo['extension']) &&
+                  in_array(strtolower($pathinfo['extension']), array('tgz', 'tar'))) {
+                $param['extension'] = $pathinfo['extension'];
+                $param['package'] = substr($pathinfo['basename'], 0,
+                    strlen($pathinfo['basename']) - 4);
+            }
+            // check for version
+            if (strpos($param['package'], '-')) {
+                $test = explode('-', $param['package']);
+                if (count($test) != 2) {
+                    return PEAR::raiseError('parsePackageName(): only one version/state ' .
+                        'delimiter "-" is allowed in "' . $saveparam . '"',
+                        'version', null, null, $param);
+                }
+                list($param['package'], $param['version']) = $test;
+            }
+        }
+        // validation
+        $info = $this->channelExists($param['channel']);
+        if (PEAR::isError($info)) {
+            return $info;
+        }
+        if (!$info) {
+            return PEAR::raiseError('unknown channel "' . $param['channel'] .
+                '" in "' . $saveparam . '"', 'channel', null, null, $param);
+        }
+        $chan = $this->getChannel($param['channel']);
+        if (PEAR::isError($chan)) {
+            return $chan;
+        }
+        if (!$chan) {
+            return PEAR::raiseError("Exception: corrupt registry, could not " .
+                "retrieve channel " . $param['channel'] . " information",
+                'registry', null, null, $param);
+        }
+        $param['channel'] = $chan->getName();
+        $validate = $chan->getValidationObject();
+        $vpackage = $chan->getValidationPackage();
+        // validate package name
+        if (!$validate->validPackageName($param['package'], $vpackage['_content'])) {
+            return PEAR::raiseError('parsePackageName(): invalid package name "' .
+                $param['package'] . '" in "' . $saveparam . '"',
+                'package', null, null, $param);
+        }
+        if (isset($param['group'])) {
+            if (!PEAR_Validate::validGroupName($param['group'])) {
+                return PEAR::raiseError('parsePackageName(): dependency group "' . $param['group'] .
+                    '" is not a valid group name in "' . $saveparam . '"', 'group', null, null,
+                    $param);
+            }
+        }
+        if (isset($param['state'])) {
+            if (!in_array(strtolower($param['state']), $validate->getValidStates())) {
+                return PEAR::raiseError('parsePackageName(): state "' . $param['state']
+                    . '" is not a valid state in "' . $saveparam . '"',
+                    'state', null, null, $param);
+            }
+        }
+        if (isset($param['version'])) {
+            if (isset($param['state'])) {
+                return PEAR::raiseError('parsePackageName(): cannot contain both ' .
+                    'a version and a stability (state) in "' . $saveparam . '"',
+                    'version/state', null, null, $param);
+            }
+            // check whether version is actually a state
+            if (in_array(strtolower($param['version']), $validate->getValidStates())) {
+                $param['state'] = strtolower($param['version']);
+                unset($param['version']);
+            } else {
+                if (!$validate->validVersion($param['version'])) {
+                    return PEAR::raiseError('parsePackageName(): "' . $param['version'] .
+                        '" is neither a valid version nor a valid state in "' .
+                        $saveparam . '"', 'version/state', null, null, $param);
+                }
+            }
+        }
+        return $param;
+    }
+
+    /**
+     * @param array
+     * @return string
+     */
+    function parsedPackageNameToString($parsed, $brief = false)
+    {
+        if (is_string($parsed)) {
+            return $parsed;
+        }
+        if (is_object($parsed)) {
+            $p = $parsed;
+            $parsed = array(
+                'package' => $p->getPackage(),
+                'channel' => $p->getChannel(),
+                'version' => $p->getVersion(),
+            );
+        }
+        if (isset($parsed['uri'])) {
+            return $parsed['uri'];
+        }
+        if ($brief) {
+            if ($channel = $this->channelAlias($parsed['channel'])) {
+                return $channel . '/' . $parsed['package'];
+            }
+        }
+        $upass = '';
+        if (isset($parsed['user'])) {
+            $upass = $parsed['user'];
+            if (isset($parsed['pass'])) {
+                $upass .= ':' . $parsed['pass'];
+            }
+            $upass = "$upass@";
+        }
+        $ret = 'channel://' . $upass . $parsed['channel'] . '/' . $parsed['package'];
+        if (isset($parsed['version']) || isset($parsed['state'])) {
+            $ver = isset($parsed['version']) ? $parsed['version'] : '';
+            $ver .= isset($parsed['state']) ? $parsed['state'] : '';
+            $ret .= '-' . $ver;
+        }
+        if (isset($parsed['extension'])) {
+            $ret .= '.' . $parsed['extension'];
+        }
+        if (isset($parsed['opts'])) {
+            $ret .= '?';
+            foreach ($parsed['opts'] as $name => $value) {
+                $parsed['opts'][$name] = "$name=$value";
+            }
+            $ret .= implode('&', $parsed['opts']);
+        }
+        if (isset($parsed['group'])) {
+            $ret .= '#' . $parsed['group'];
+        }
+        return $ret;
+    }
+}                                                                                                                                 PEAR-1.8.0/PEAR/REST.php                                                                            100664     764     764        36152      100664   7351                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
- * PEAR_Registry
+ * PEAR_REST
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Registry.php,v 1.171 2008/05/14 04:16:08 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: REST.php,v 1.40 2009/03/26 23:12:46 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
+ * @since      File available since Release 1.4.0a1
  */
 
 /**
- * for PEAR_Error
+ * For downloading xml files
  */
 require_once 'PEAR.php';
-require_once 'PEAR/DependencyDB.php';
-
-define('PEAR_REGISTRY_ERROR_LOCK',   -2);
-define('PEAR_REGISTRY_ERROR_FORMAT', -3);
-define('PEAR_REGISTRY_ERROR_FILE',   -4);
-define('PEAR_REGISTRY_ERROR_CONFLICT', -5);
-define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
+require_once 'PEAR/XMLParser.php';
 
 /**
- * Administration class used to maintain the installed package database.
+ * Intelligently retrieve data, following hyperlinks if necessary, and re-directing
+ * as well
  * @category   pear
  * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
-class PEAR_Registry extends PEAR
+class PEAR_REST
 {
-    // {{{ properties
-
-    /**
-     * File containing all channel information.
-     * @var string
-     */
-    var $channels = '';
-
-    /** Directory where registry files are stored.
-     * @var string
-     */
-    var $statedir = '';
-
-    /** File where the file map is stored
-     * @var string
-     */
-    var $filemap = '';
-
-    /** Directory where registry files for channels are stored.
-     * @var string
-     */
-    var $channelsdir = '';
-
-    /** Name of file used for locking the registry
-     * @var string
-     */
-    var $lockfile = '';
-
-    /** File descriptor used during locking
-     * @var resource
-     */
-    var $lock_fp = null;
-
-    /** Mode used during locking
-     * @var int
-     */
-    var $lock_mode = 0; // XXX UNUSED
-
-    /** Cache of package information.  Structure:
-     * array(
-     *   'package' => array('id' => ... ),
-     *   ... )
-     * @var array
-     */
-    var $pkginfo_cache = array();
-
-    /** Cache of file map.  Structure:
-     * array( '/path/to/file' => 'package', ... )
-     * @var array
-     */
-    var $filemap_cache = array();
-
-    /**
-     * @var false|PEAR_ChannelFile
-     */
-    var $_pearChannel;
-
-    /**
-     * @var false|PEAR_ChannelFile
-     */
-    var $_peclChannel;
-
-    /**
-     * @var PEAR_DependencyDB
-     */
-    var $_dependencyDB;
-
-    /**
-     * @var PEAR_Config
-     */
-    var $_config;
-    // }}}
-
-    // {{{ constructor
-
-    /**
-     * PEAR_Registry constructor.
-     *
-     * @param string (optional) PEAR install directory (for .php files)
-     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PEAR channel, if
-     *        default values are not desired.  Only used the very first time a PEAR
-     *        repository is initialized
-     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PECL channel, if
-     *        default values are not desired.  Only used the very first time a PEAR
-     *        repository is initialized
-     *
-     * @access public
-     */
-    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,
-                           $pecl_channel = false)
-    {
-        parent::PEAR();
-        $this->setInstallDir($pear_install_dir);
-        $this->_pearChannel = $pear_channel;
-        $this->_peclChannel = $pecl_channel;
-        $this->_config = false;
-    }
-
-    function setInstallDir($pear_install_dir = PEAR_INSTALL_DIR)
-    {
-        $ds = DIRECTORY_SEPARATOR;
-        $this->install_dir = $pear_install_dir;
-        $this->channelsdir = $pear_install_dir.$ds.'.channels';
-        $this->statedir = $pear_install_dir.$ds.'.registry';
-        $this->filemap  = $pear_install_dir.$ds.'.filemap';
-        $this->lockfile = $pear_install_dir.$ds.'.lock';
-    }
-
-    function hasWriteAccess()
-    {
-        if (!file_exists($this->install_dir)) {
-            $dir = $this->install_dir;
-            while ($dir && $dir != '.') {
-                $olddir = $dir;
-                $dir = dirname($dir); // cd ..
-                if ($dir != '.' && file_exists($dir)) {
-                    if (is_writeable($dir)) {
-                        return true;
-                    } else {
-                        return false;
-                    }
-                }
-                if ($dir == $olddir) { // this can happen in safe mode
-                    return @is_writable($dir);
-                }
-            }
-            return false;
-        }
-        return is_writeable($this->install_dir);
-    }
-
-    function setConfig(&$config, $resetInstallDir = true)
-    {
-        $this->_config = &$config;
-        if ($resetInstallDir) {
-            $this->setInstallDir($config->get('php_dir'));
-        }
-    }
-
-    function _initializeChannelDirs()
-    {
-        static $running = false;
-        if (!$running) {
-            $running = true;
-            $ds = DIRECTORY_SEPARATOR;
-            if (!is_dir($this->channelsdir) ||
-                  !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
-                if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
-                    $pear_channel = $this->_pearChannel;
-                    if (!is_a($pear_channel, 'PEAR_ChannelFile') || !$pear_channel->validate()) {
-                        if (!class_exists('PEAR_ChannelFile')) {
-                            require_once 'PEAR/ChannelFile.php';
-                        }
-                        $pear_channel = new PEAR_ChannelFile;
-                        $pear_channel->setName('pear.php.net');
-                        $pear_channel->setAlias('pear');
-                        $pear_channel->setServer('pear.php.net');
-                        $pear_channel->setSummary('PHP Extension and Application Repository');
-                        $pear_channel->setDefaultPEARProtocols();
-                        $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
-                        $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
-                    } else {
-                        $pear_channel->setName('pear.php.net');
-                        $pear_channel->setAlias('pear');
-                    }
-                    $pear_channel->validate();
-                    $this->_addChannel($pear_channel);
-                }
-                if (!file_exists($this->channelsdir . $ds . 'pecl.php.net.reg')) {
-                    $pecl_channel = $this->_peclChannel;
-                    if (!is_a($pecl_channel, 'PEAR_ChannelFile') || !$pecl_channel->validate()) {
-                        if (!class_exists('PEAR_ChannelFile')) {
-                            require_once 'PEAR/ChannelFile.php';
-                        }
-                        $pecl_channel = new PEAR_ChannelFile;
-                        $pecl_channel->setName('pecl.php.net');
-                        $pecl_channel->setAlias('pecl');
-                        $pecl_channel->setServer('pecl.php.net');
-                        $pecl_channel->setSummary('PHP Extension Community Library');
-                        $pecl_channel->setDefaultPEARProtocols();
-                        $pecl_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
-                        $pecl_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
-                        $pecl_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
-                    } else {
-                        $pecl_channel->setName('pecl.php.net');
-                        $pecl_channel->setAlias('pecl');
-                    }
-                    $pecl_channel->validate();
-                    $this->_addChannel($pecl_channel);
-                }
-                if (!file_exists($this->channelsdir . $ds . '__uri.reg')) {
-                    if (!class_exists('PEAR_ChannelFile')) {
-                        require_once 'PEAR/ChannelFile.php';
-                    }
-                    $private = new PEAR_ChannelFile;
-                    $private->setName('__uri');
-                    $private->addFunction('xmlrpc', '1.0', '****');
-                    $private->setSummary('Pseudo-channel for static packages');
-                    $this->_addChannel($private);
-                }
-                $this->_rebuildFileMap();
-            }
-            $running = false;
-        }
-    }
-
-    function _initializeDirs()
-    {
-        $ds = DIRECTORY_SEPARATOR;
-        // XXX Compatibility code should be removed in the future
-        // rename all registry files if any to lowercase
-        if (!OS_WINDOWS && file_exists($this->statedir) && is_dir($this->statedir) &&
-              $handle = opendir($this->statedir)) {
-            $dest = $this->statedir . $ds;
-            while (false !== ($file = readdir($handle))) {
-                if (preg_match('/^.*[A-Z].*\.reg\\z/', $file)) {
-                    rename($dest . $file, $dest . strtolower($file));
-                }
-            }
-            closedir($handle);
-        }
-        $this->_initializeChannelDirs();
-        if (!file_exists($this->filemap)) {
-            $this->_rebuildFileMap();
-        }
-        $this->_initializeDepDB();
-    }
+    var $config;
+    var $_options;
 
-    function _initializeDepDB()
+    function PEAR_REST(&$config, $options = array())
     {
-        if (!isset($this->_dependencyDB)) {
-            static $initializing = false;
-            if (!$initializing) {
-                $initializing = true;
-                if (!$this->_config) { // never used?
-                    if (OS_WINDOWS) {
-                        $file = 'pear.ini';
-                    } else {
-                        $file = '.pearrc';
-                    }
-                    $this->_config = &new PEAR_Config($this->statedir . DIRECTORY_SEPARATOR .
-                        $file);
-                    $this->_config->setRegistry($this);
-                    $this->_config->set('php_dir', $this->install_dir);
-                }
-                $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
-                if (PEAR::isError($this->_dependencyDB)) {
-                    // attempt to recover by removing the dep db
-                    if (file_exists($this->_config->get('php_dir', null, 'pear.php.net') .
-                        DIRECTORY_SEPARATOR . '.depdb')) {
-                        @unlink($this->_config->get('php_dir', null, 'pear.php.net') .
-                            DIRECTORY_SEPARATOR . '.depdb');
-                    }
-                    $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
-                    if (PEAR::isError($this->_dependencyDB)) {
-                        echo $this->_dependencyDB->getMessage();
-                        echo 'Unrecoverable error';
-                        exit(1);
-                    }
-                }
-                $initializing = false;
-            }
-        }
+        $this->config = &$config;
+        $this->_options = $options;
     }
-    // }}}
-    // {{{ destructor
 
     /**
-     * PEAR_Registry destructor.  Makes sure no locks are forgotten.
+     * Retrieve REST data, but always retrieve the local cache if it is available.
      *
-     * @access private
+     * This is useful for elements that should never change, such as information on a particular
+     * release
+     * @param string full URL to this resource
+     * @param array|false contents of the accept-encoding header
+     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
+     *                    parsed using PEAR_XMLParser
+     * @return string|array
      */
-    function _PEAR_Registry()
+    function retrieveCacheFirst($url, $accept = false, $forcestring = false, $channel = false)
     {
-        parent::_PEAR();
-        if (is_resource($this->lock_fp)) {
-            $this->_unlock();
-        }
-    }
-
-    // }}}
 
-    // {{{ _assertStateDir()
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
 
-    /**
-     * Make sure the directory where we keep registry files exists.
-     *
-     * @return bool TRUE if directory exists, FALSE if it could not be
-     * created
-     *
-     * @access private
-     */
-    function _assertStateDir($channel = false)
-    {
-        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
-            return $this->_assertChannelStateDir($channel);
-        }
-        static $init = false;
-        if (!file_exists($this->statedir)) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'System.php';
-            if (!System::mkdir(array('-p', $this->statedir))) {
-                return $this->raiseError("could not create directory '{$this->statedir}'");
-            }
-            $init = true;
-        } elseif (!is_dir($this->statedir)) {
-            return $this->raiseError('Cannot create directory ' . $this->statedir . ', ' .
-                'it already exists and is not a directory');
-        }
-        $ds = DIRECTORY_SEPARATOR;
-        if (!file_exists($this->channelsdir)) {
-            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
-                $init = true;
-            }
-        } elseif (!is_dir($this->channelsdir)) {
-            return $this->raiseError('Cannot create directory ' . $this->channelsdir . ', ' .
-                'it already exists and is not a directory');
-        }
-        if ($init) {
-            static $running = false;
-            if (!$running) {
-                $running = true;
-                $this->_initializeDirs();
-                $running = false;
-                $init = false;
-            }
-        } else {
-            $this->_initializeDepDB();
+        if (file_exists($cachefile)) {
+            return unserialize(implode('', file($cachefile)));
         }
-        return true;
-    }
-
-    // }}}
-    // {{{ _assertChannelStateDir()
 
-    /**
-     * Make sure the directory where we keep registry files exists for a non-standard channel.
-     *
-     * @param string channel name
-     * @return bool TRUE if directory exists, FALSE if it could not be
-     * created
-     *
-     * @access private
-     */
-    function _assertChannelStateDir($channel)
-    {
-        $ds = DIRECTORY_SEPARATOR;
-        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
-                $this->_initializeChannelDirs();
-            }
-            return $this->_assertStateDir($channel);
-        }
-        $channelDir = $this->_channelDirectoryName($channel);
-        if (!is_dir($this->channelsdir) ||
-              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
-            $this->_initializeChannelDirs();
-        }
-        if (!file_exists($channelDir)) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'System.php';
-            if (!System::mkdir(array('-p', $channelDir))) {
-                return $this->raiseError("could not create directory '" . $channelDir .
-                    "'");
-            }
-        } elseif (!is_dir($channelDir)) {
-            return $this->raiseError("could not create directory '" . $channelDir .
-                "', already exists and is not a directory");
-        }
-        return true;
+        return $this->retrieveData($url, $accept, $forcestring, $channel);
     }
 
-    // }}}
-    // {{{ _assertChannelDir()
-
     /**
-     * Make sure the directory where we keep registry files for channels exists
-     *
-     * @return bool TRUE if directory exists, FALSE if it could not be
-     * created
-     *
-     * @access private
+     * Retrieve a remote REST resource
+     * @param string full URL to this resource
+     * @param array|false contents of the accept-encoding header
+     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
+     *                    parsed using PEAR_XMLParser
+     * @return string|array
      */
-    function _assertChannelDir()
+    function retrieveData($url, $accept = false, $forcestring = false, $channel = false)
     {
-        if (!file_exists($this->channelsdir)) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'System.php';
-            if (!System::mkdir(array('-p', $this->channelsdir))) {
-                return $this->raiseError("could not create directory '{$this->channelsdir}'");
-            }
-        } elseif (!is_dir($this->channelsdir)) {
-            return $this->raiseError("could not create directory '{$this->channelsdir}" .
-                "', it already exists and is not a directory");
-            
-        }
-        if (!file_exists($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'System.php';
-            if (!System::mkdir(array('-p', $this->channelsdir . DIRECTORY_SEPARATOR . '.alias'))) {
-                return $this->raiseError("could not create directory '{$this->channelsdir}/.alias'");
-            }
-        } elseif (!is_dir($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
-            return $this->raiseError("could not create directory '{$this->channelsdir}" .
-                "/.alias', it already exists and is not a directory");
-            
+        $cacheId = $this->getCacheId($url);
+        if ($ret = $this->useLocalCache($url, $cacheId)) {
+            return $ret;
         }
-        return true;
-    }
 
-    // }}}
-    // {{{ _packageFileName()
-
-    /**
-     * Get the name of the file where data for a given package is stored.
-     *
-     * @param string channel name, or false if this is a PEAR package
-     * @param string package name
-     *
-     * @return string registry file name
-     *
-     * @access public
-     */
-    function _packageFileName($package, $channel = false)
-    {
-        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
-            return $this->_channelDirectoryName($channel) . DIRECTORY_SEPARATOR .
-                strtolower($package) . '.reg';
+        $file = $trieddownload = false;
+        if (!isset($this->_options['offline'])) {
+            $trieddownload = true;
+            $file = $this->downloadHttp($url, $cacheId ? $cacheId['lastChange'] : false, $accept, $channel);
         }
-        return $this->statedir . DIRECTORY_SEPARATOR . strtolower($package) . '.reg';
-    }
-
-    // }}}
-    // {{{ _channelFileName()
 
-    /**
-     * Get the name of the file where data for a given channel is stored.
-     * @param string channel name
-     * @return string registry file name
-     */
-    function _channelFileName($channel, $noaliases = false)
-    {
-        if (!$noaliases) {
-            if (file_exists($this->_getChannelAliasFileName($channel))) {
-                $channel = implode('', file($this->_getChannelAliasFileName($channel)));
+        if (PEAR::isError($file)) {
+            if ($file->getCode() !== -9276) {
+                return $file;
             }
-        }
-        return $this->channelsdir . DIRECTORY_SEPARATOR . str_replace('/', '_',
-            strtolower($channel)) . '.reg';
-    }
 
-    // }}}
-    // {{{ getChannelAliasFileName()
-
-    /**
-     * @param string
-     * @return string
-     */
-    function _getChannelAliasFileName($alias)
-    {
-        return $this->channelsdir . DIRECTORY_SEPARATOR . '.alias' .
-              DIRECTORY_SEPARATOR . str_replace('/', '_', strtolower($alias)) . '.txt';
-    }
-
-    // }}}
-    // {{{ _getChannelFromAlias()
-
-    /**
-     * Get the name of a channel from its alias
-     */
-    function _getChannelFromAlias($channel)
-    {
-        if (!$this->_channelExists($channel)) {
-            if ($channel == 'pear.php.net') {
-                return 'pear.php.net';
-            }
-            if ($channel == 'pecl.php.net') {
-                return 'pecl.php.net';
-            }
-            if ($channel == '__uri') {
-                return '__uri';
-            }
-            return false;
+            $trieddownload = false;
+            $file = false; // use local copy if available on socket connect error
         }
-        $channel = strtolower($channel);
-        if (file_exists($this->_getChannelAliasFileName($channel))) {
-            // translate an alias to an actual channel
-            return implode('', file($this->_getChannelAliasFileName($channel)));
-        } else {
-            return $channel;
-        }
-    }    
-    // }}}
-    // {{{ _getChannelFromAlias()
 
-    /**
-     * Get the alias of a channel from its alias or its name
-     */
-    function _getAlias($channel)
-    {
-        if (!$this->_channelExists($channel)) {
-            if ($channel == 'pear.php.net') {
-                return 'pear';
+        if (!$file) {
+            $ret = $this->getCache($url);
+            if (!PEAR::isError($ret) && $trieddownload) {
+                // reset the age of the cache if the server says it was unmodified
+                $this->saveCache($url, $ret, null, true, $cacheId);
             }
-            if ($channel == 'pecl.php.net') {
-                return 'pecl';
-            }
-            return false;
-        }
-        $channel = $this->_getChannel($channel);
-        if (PEAR::isError($channel)) {
-            return $channel;
-        }
-        return $channel->getAlias();
-    }    
-    // }}}
-    // {{{ _channelDirectoryName()
 
-    /**
-     * Get the name of the file where data for a given package is stored.
-     *
-     * @param string channel name, or false if this is a PEAR package
-     * @param string package name
-     *
-     * @return string registry file name
-     *
-     * @access public
-     */
-    function _channelDirectoryName($channel)
-    {
-        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            return $this->statedir;
-        } else {
-            $ch = $this->_getChannelFromAlias($channel);
-            if (!$ch) {
-                $ch = $channel;
-            }
-            return $this->statedir . DIRECTORY_SEPARATOR . strtolower('.channel.' .
-                str_replace('/', '_', $ch));
+            return $ret;
         }
-    }
-
-    // }}}
-    // {{{ _openPackageFile()
 
-    function _openPackageFile($package, $mode, $channel = false)
-    {
-        if (!$this->_assertStateDir($channel)) {
-            return null;
-        }
-        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
-            return null;
-        }
-        $file = $this->_packageFileName($package, $channel);
-        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
-            return null;
-        }
-        $fp = @fopen($file, $mode);
-        if (!$fp) {
-            return null;
+        if (is_array($file)) {
+            $headers      = $file[2];
+            $lastmodified = $file[1];
+            $content      = $file[0];
+        } else {
+            $headers      = array();
+            $lastmodified = false;
+            $content      = $file;
         }
-        return $fp;
-    }
-
-    // }}}
-    // {{{ _closePackageFile()
 
-    function _closePackageFile($fp)
-    {
-        fclose($fp);
-    }
-
-    // }}}
-    // {{{ _openChannelFile()
-
-    function _openChannelFile($channel, $mode)
-    {
-        if (!$this->_assertChannelDir()) {
-            return null;
-        }
-        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
-            return null;
-        }
-        $file = $this->_channelFileName($channel);
-        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
-            return null;
+        if ($forcestring) {
+            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            return $content;
         }
-        $fp = @fopen($file, $mode);
-        if (!$fp) {
-            return null;
-        }
-        return $fp;
-    }
-
-    // }}}
-    // {{{ _closePackageFile()
-
-    function _closeChannelFile($fp)
-    {
-        fclose($fp);
-    }
 
-    // }}}
-    // {{{ _rebuildFileMap()
-
-    function _rebuildFileMap()
-    {
-        if (!class_exists('PEAR_Installer_Role')) {
-            require_once 'PEAR/Installer/Role.php';
-        }
-        $channels = $this->_listAllPackages();
-        $files = array();
-        foreach ($channels as $channel => $packages) {
-            foreach ($packages as $package) {
-                $version = $this->_packageInfo($package, 'version', $channel);
-                $filelist = $this->_packageInfo($package, 'filelist', $channel);
-                if (!is_array($filelist)) {
-                    continue;
-                }
-                foreach ($filelist as $name => $attrs) {
-                    if (isset($attrs['attribs'])) {
-                        $attrs = $attrs['attribs'];
-                    }
-                    // it is possible for conflicting packages in different channels to
-                    // conflict with data files/doc files
-                    if ($name == 'dirtree') {
-                        continue;
-                    }
-                    if (isset($attrs['role']) && !in_array($attrs['role'],
-                          PEAR_Installer_Role::getInstallableRoles())) {
-                        // these are not installed
-                        continue;
-                    }
-                    if (isset($attrs['role']) && !in_array($attrs['role'],
-                          PEAR_Installer_Role::getBaseinstallRoles())) {
-                        $attrs['baseinstalldir'] = $package;
-                    }
-                    if (isset($attrs['baseinstalldir'])) {
-                        $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
-                    } else {
-                        $file = $name;
-                    }
-                    $file = preg_replace(',^/+,', '', $file);
-                    if ($channel != 'pear.php.net') {
-                        if (!isset($files[$attrs['role']])) {
-                            $files[$attrs['role']] = array();
-                        }
-                        $files[$attrs['role']][$file] = array(strtolower($channel),
-                            strtolower($package));
-                    } else {
-                        if (!isset($files[$attrs['role']])) {
-                            $files[$attrs['role']] = array();
+        if (isset($headers['content-type'])) {
+            switch ($headers['content-type']) {
+                case 'text/xml' :
+                case 'application/xml' :
+                case 'text/plain' :
+                    if ($headers['content-type'] === 'text/plain') {
+                        $check = substr($content, 0, 5);
+                        if ($check !== '<?xml') {
+                            break;
                         }
-                        $files[$attrs['role']][$file] = strtolower($package);
                     }
-                }
+
+                    $parser = new PEAR_XMLParser;
+                    PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                    $err = $parser->parse($content);
+                    PEAR::popErrorHandling();
+                    if (PEAR::isError($err)) {
+                        return PEAR::raiseError('Invalid xml downloaded from "' . $url . '": ' .
+                            $err->getMessage());
+                    }
+                    $content = $parser->getData();
+                case 'text/html' :
+                default :
+                    // use it as a string
             }
+        } else {
+            // assume XML
+            $parser = new PEAR_XMLParser;
+            $parser->parse($content);
+            $content = $parser->getData();
         }
-        $this->_assertStateDir();
-        if (!$this->hasWriteAccess()) {
-            return false;
-        }
-        $fp = @fopen($this->filemap, 'wb');
-        if (!$fp) {
-            return false;
-        }
-        $this->filemap_cache = $files;
-        fwrite($fp, serialize($files));
-        fclose($fp);
-        return true;
-    }
-
-    // }}}
-    // {{{ _readFileMap()
 
-    function _readFileMap()
-    {
-        if (!file_exists($this->filemap)) {
-            return array();
-        }
-        $fp = @fopen($this->filemap, 'r');
-        if (!$fp) {
-            return $this->raiseError('PEAR_Registry: could not open filemap "' . $this->filemap . '"', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
-        }
-        clearstatcache();
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        $fsize = filesize($this->filemap);
-        fclose($fp);
-        $data = file_get_contents($this->filemap);
-        set_magic_quotes_runtime($rt);
-        $tmp = unserialize($data);
-        if (!$tmp && $fsize > 7) {
-            return $this->raiseError('PEAR_Registry: invalid filemap data', PEAR_REGISTRY_ERROR_FORMAT, null, null, $data);
-        }
-        $this->filemap_cache = $tmp;
-        return true;
+        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        return $content;
     }
 
-    // }}}
-    // {{{ _lock()
-
-    /**
-     * Lock the registry.
-     *
-     * @param integer lock mode, one of LOCK_EX, LOCK_SH or LOCK_UN.
-     *                See flock manual for more information.
-     *
-     * @return bool TRUE on success, FALSE if locking failed, or a
-     *              PEAR error if some other error occurs (such as the
-     *              lock file not being writable).
-     *
-     * @access private
-     */
-    function _lock($mode = LOCK_EX)
+    function useLocalCache($url, $cacheid = null)
     {
-        if (!eregi('Windows 9', php_uname())) {
-            if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
-                // XXX does not check type of lock (LOCK_SH/LOCK_EX)
-                return true;
-            }
-            if (!$this->_assertStateDir()) {
-                if ($mode == LOCK_EX) {
-                    return $this->raiseError('Registry directory is not writeable by the current user');
-                } else {
-                    return true;
-                }
-            }
-            $open_mode = 'w';
-            // XXX People reported problems with LOCK_SH and 'w'
-            if ($mode === LOCK_SH || $mode === LOCK_UN) {
-                if (!file_exists($this->lockfile)) {
-                    touch($this->lockfile);
-                }
-                $open_mode = 'r';
-            }
-
-            if (!is_resource($this->lock_fp)) {
-                $this->lock_fp = @fopen($this->lockfile, $open_mode);
+        if ($cacheid === null) {
+            $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+                md5($url) . 'rest.cacheid';
+            if (!file_exists($cacheidfile)) {
+                return false;
             }
 
-            if (!is_resource($this->lock_fp)) {
-                $this->lock_fp = null;
-                return $this->raiseError("could not create lock file" .
-                                         (isset($php_errormsg) ? ": " . $php_errormsg : ""));
-            }
-            if (!(int)flock($this->lock_fp, $mode)) {
-                switch ($mode) {
-                    case LOCK_SH: $str = 'shared';    break;
-                    case LOCK_EX: $str = 'exclusive'; break;
-                    case LOCK_UN: $str = 'unlock';    break;
-                    default:      $str = 'unknown';   break;
-                }
-                //is resource at this point, close it on error.
-                fclose($this->lock_fp);
-                $this->lock_fp = null;
-                return $this->raiseError("could not acquire $str lock ($this->lockfile)",
-                                         PEAR_REGISTRY_ERROR_LOCK);
-            }
+            $cacheid = unserialize(implode('', file($cacheidfile)));
         }
-        return true;
-    }
 
-    // }}}
-    // {{{ _unlock()
-
-    function _unlock()
-    {
-        $ret = $this->_lock(LOCK_UN);
-        if (is_resource($this->lock_fp)) {
-            fclose($this->lock_fp);
+        $cachettl = $this->config->get('cache_ttl');
+        // If cache is newer than $cachettl seconds, we use the cache!
+        if (time() - $cacheid['age'] < $cachettl) {
+            return $this->getCache($url);
         }
-        $this->lock_fp = null;
-        return $ret;
-    }
 
-    // }}}
-    // {{{ _packageExists()
-
-    function _packageExists($package, $channel = false)
-    {
-        return file_exists($this->_packageFileName($package, $channel));
+        return false;
     }
 
-    // }}}
-    // {{{ _channelExists()
-
-    /**
-     * Determine whether a channel exists in the registry
-     * @param string Channel name
-     * @param bool if true, then aliases will be ignored
-     * @return boolean
-     */
-    function _channelExists($channel, $noaliases = false)
+    function getCacheId($url)
     {
-        $a = file_exists($this->_channelFileName($channel, $noaliases));
-        if (!$a && $channel == 'pear.php.net') {
-            return true;
-        }
-        if (!$a && $channel == 'pecl.php.net') {
-            return true;
-        }
-        return $a;
-    }
-
-    // }}}
-    // {{{ _addChannel()
+        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cacheid';
 
-    /**
-     * @param PEAR_ChannelFile Channel object
-     * @param donotuse
-     * @param string Last-Modified HTTP tag from remote request
-     * @return boolean|PEAR_Error True on creation, false if it already exists
-     */
-    function _addChannel($channel, $update = false, $lastmodified = false)
-    {
-        if (!is_a($channel, 'PEAR_ChannelFile')) {
+        if (!file_exists($cacheidfile)) {
             return false;
         }
-        if (!$channel->validate()) {
-            return false;
-        }
-        if (file_exists($this->_channelFileName($channel->getName()))) {
-            if (!$update) {
-                return false;
-            }
-            $checker = $this->_getChannel($channel->getName());
-            if (PEAR::isError($checker)) {
-                return $checker;
-            }
-            if ($channel->getAlias() != $checker->getAlias()) {
-                if (file_exists($this->_getChannelAliasFileName($checker->getAlias()))) {
-                    @unlink($this->_getChannelAliasFileName($checker->getAlias()));
-                }
-            }
-        } else {
-            if ($update && !in_array($channel->getName(), array('pear.php.net', 'pecl.php.net'))) {
-                return false;
-            }
-        }
-        $ret = $this->_assertChannelDir();
-        if (PEAR::isError($ret)) {
-            return $ret;
-        }
-        $ret = $this->_assertChannelStateDir($channel->getName());
-        if (PEAR::isError($ret)) {
-            return $ret;
-        }
-        if ($channel->getAlias() != $channel->getName()) {
-            if (file_exists($this->_getChannelAliasFileName($channel->getAlias())) &&
-                  $this->_getChannelFromAlias($channel->getAlias()) != $channel->getName()) {
-                $channel->setAlias($channel->getName());
-            }
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            $fp = @fopen($this->_getChannelAliasFileName($channel->getAlias()), 'w');
-            if (!$fp) {
-                return false;
-            }
-            fwrite($fp, $channel->getName());
-            fclose($fp);
-        }
-        if (!$this->hasWriteAccess()) {
-            return false;
-        }
-        $fp = @fopen($this->_channelFileName($channel->getName()), 'wb');
-        if (!$fp) {
-            return false;
-        }
-        $info = $channel->toArray();
-        if ($lastmodified) {
-            $info['_lastmodified'] = $lastmodified;
-        } else {
-            $info['_lastmodified'] = date('r');
-        }
-        fwrite($fp, serialize($info));
-        fclose($fp);
-        return true;
-    }
-
-    // }}}
-    // {{{ _deleteChannel()
 
-    /**
-     * Deletion fails if there are any packages installed from the channel
-     * @param string|PEAR_ChannelFile channel name
-     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
-     */
-    function _deleteChannel($channel)
-    {
-        if (!is_string($channel)) {
-            if (is_a($channel, 'PEAR_ChannelFile')) {
-                if (!$channel->validate()) {
-                    return false;
-                }
-                $channel = $channel->getName();
-            } else {
-                return false;
-            }
-        }
-        if ($this->_getChannelFromAlias($channel) == '__uri') {
-            return false;
-        }
-        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
-            return false;
-        }
-        if (!$this->_channelExists($channel)) {
-            return false;
-        }
-        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            return false;
-        }
-        $channel = $this->_getChannelFromAlias($channel);
-        if ($channel == 'pear.php.net') {
-            return false;
-        }
-        $test = $this->_listChannelPackages($channel);
-        if (count($test)) {
-            return false;
-        }
-        $test = @rmdir($this->_channelDirectoryName($channel));
-        if (!$test) {
-            return false;
-        }
-        $file = $this->_getChannelAliasFileName($this->_getAlias($channel));
-        if (file_exists($file)) {
-            $test = @unlink($file);
-            if (!$test) {
-                return false;
-            }
-        }
-        $file = $this->_channelFileName($channel);
-        $ret = true;
-        if (file_exists($file)) {
-            $ret = @unlink($file);
-        }
+        $ret = unserialize(implode('', file($cacheidfile)));
         return $ret;
     }
 
-    // }}}
-    // {{{ _isChannelAlias()
-
-    /**
-     * Determine whether a channel exists in the registry
-     * @param string Channel Alias
-     * @return boolean
-     */
-    function _isChannelAlias($alias)
+    function getCache($url)
     {
-        return file_exists($this->_getChannelAliasFileName($alias));
-    }
-
-    // }}}
-    // {{{ _packageInfo()
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
 
-    /**
-     * @param string|null
-     * @param string|null
-     * @param string|null
-     * @return array|null
-     * @access private
-     */
-    function _packageInfo($package = null, $key = null, $channel = 'pear.php.net')
-    {
-        if ($package === null) {
-            if ($channel === null) {
-                $channels = $this->_listChannels();
-                $ret = array();
-                foreach ($channels as $channel) {
-                    $channel = strtolower($channel);
-                    $ret[$channel] = array();
-                    $packages = $this->_listPackages($channel);
-                    foreach ($packages as $package) {
-                        $ret[$channel][] = $this->_packageInfo($package, null, $channel);
-                    }
-                }
-                return $ret;
-            }
-            $ps = $this->_listPackages($channel);
-            if (!count($ps)) {
-                return array();
-            }
-            return array_map(array(&$this, '_packageInfo'),
-                             $ps, array_fill(0, count($ps), null),
-                             array_fill(0, count($ps), $channel));
-        }
-        $fp = $this->_openPackageFile($package, 'r', $channel);
-        if ($fp === null) {
-            return null;
+        if (!file_exists($cachefile)) {
+            return PEAR::raiseError('No cached content available for "' . $url . '"');
         }
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        clearstatcache();
-        $this->_closePackageFile($fp);
-        $data = file_get_contents($this->_packageFileName($package, $channel));
-        set_magic_quotes_runtime($rt);
-        $data = unserialize($data);
-        if ($key === null) {
-            return $data;
-        }
-        // compatibility for package.xml version 2.0
-        if (isset($data['old'][$key])) {
-            return $data['old'][$key];
-        }
-        if (isset($data[$key])) {
-            return $data[$key];
-        }
-        return null;
-    }
 
-    // }}}
-    // {{{ _channelInfo()
+        return unserialize(implode('', file($cachefile)));
+    }
 
     /**
-     * @param string Channel name
-     * @param bool whether to strictly retrieve info of channels, not just aliases
-     * @return array|null
+     * @param string full URL to REST resource
+     * @param string original contents of the REST resource
+     * @param array  HTTP Last-Modified and ETag headers
+     * @param bool   if true, then the cache id file should be regenerated to
+     *               trigger a new time-to-live value
      */
-    function _channelInfo($channel, $noaliases = false)
+    function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
     {
-        if (!$this->_channelExists($channel, $noaliases)) {
-            return null;
-        }
-        $fp = $this->_openChannelFile($channel, 'r');
-        if ($fp === null) {
-            return null;
-        }
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        clearstatcache();
-        $this->_closeChannelFile($fp);
-        $data = file_get_contents($this->_channelFileName($channel));
-        set_magic_quotes_runtime($rt);
-        $data = unserialize($data);
-        return $data;
-    }
+        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cacheid';
 
-    // }}}
-    // {{{ _listChannels()
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
 
-    function _listChannels()
-    {
-        $channellist = array();
-        if (!file_exists($this->channelsdir) || !is_dir($this->channelsdir)) {
-            return array('pear.php.net', 'pecl.php.net', '__uri');
+        if ($cacheid === null && $nochange) {
+            $cacheid = unserialize(implode('', file($cacheidfile)));
         }
-        $dp = opendir($this->channelsdir);
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
-                continue;
-            }
-            if ($ent == '__uri.reg') {
-                $channellist[] = '__uri';
-                continue;
-            }
-            $channellist[] = str_replace('_', '/', substr($ent, 0, -4));
-        }
-        closedir($dp);
-        if (!in_array('pear.php.net', $channellist)) {
-            $channellist[] = 'pear.php.net';
-        }
-        if (!in_array('pecl.php.net', $channellist)) {
-            $channellist[] = 'pecl.php.net';
-        }
-        if (!in_array('__uri', $channellist)) {
-            $channellist[] = '__uri';
-        } 
-   
-        natsort($channellist);
-        return $channellist;
-    }
 
-    // }}}
-    // {{{ _listPackages()
-
-    function _listPackages($channel = false)
-    {
-        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
-            return $this->_listChannelPackages($channel);
-        }
-        if (!file_exists($this->statedir) || !is_dir($this->statedir)) {
-            return array();
-        }
-        $pkglist = array();
-        $dp = opendir($this->statedir);
-        if (!$dp) {
-            return $pkglist;
-        }
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
-                continue;
+        $fp = @fopen($cacheidfile, 'wb');
+        if (!$fp) {
+            $cache_dir = $this->config->get('cache_dir');
+            if (is_dir($cache_dir)) {
+                return false;
             }
-            $pkglist[] = substr($ent, 0, -4);
-        }
-        closedir($dp);
-        return $pkglist;
-    }
-
-    // }}}
-    // {{{ _listChannelPackages()
 
-    function _listChannelPackages($channel)
-    {
-        $pkglist = array();
-        if (!file_exists($this->_channelDirectoryName($channel)) ||
-              !is_dir($this->_channelDirectoryName($channel))) {
-            return array();
-        }
-        $dp = opendir($this->_channelDirectoryName($channel));
-        if (!$dp) {
-            return $pkglist;
-        }
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
-                continue;
+            System::mkdir(array('-p', $cache_dir));
+            $fp = @fopen($cacheidfile, 'wb');
+            if (!$fp) {
+                return false;
             }
-            $pkglist[] = substr($ent, 0, -4);
         }
-        closedir($dp);
-        return $pkglist;
-    }
 
-    // }}}
-    
-    function _listAllPackages()
-    {
-        $ret = array();
-        foreach ($this->_listChannels() as $channel) {
-            $ret[$channel] = $this->_listPackages($channel);
-        }
-        return $ret;
-    }
+        if ($nochange) {
+            fwrite($fp, serialize(array(
+                'age'        => time(),
+                'lastChange' => $cacheid['lastChange'],
+                ))
+            );
 
-    /**
-     * Add an installed package to the registry
-     * @param string package name
-     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
-     * @return bool success of saving
-     * @access private
-     */
-    function _addPackage($package, $info)
-    {
-        if ($this->_packageExists($package)) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($package, 'wb');
-        if ($fp === null) {
-            return false;
-        }
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        if (isset($info['filelist'])) {
-            $this->_rebuildFileMap();
+            fclose($fp);
+            return true;
         }
-        return true;
-    }
 
-    /**
-     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
-     * @return bool
-     * @access private
-     */
-    function _addPackage2($info)
-    {
-        if (!is_a($info, 'PEAR_PackageFile_v1') && !is_a($info, 'PEAR_PackageFile_v2')) {
-            return false;
-        }
+        fwrite($fp, serialize(array(
+            'age'        => time(),
+            'lastChange' => $lastmodified,
+            ))
+        );
 
-        if (!$info->validate()) {
-            if (class_exists('PEAR_Common')) {
-                $ui = PEAR_Frontend::singleton();
-                if ($ui) {
-                    foreach ($info->getValidationWarnings() as $err) {
-                        $ui->log($err['message'], true);
-                    }
-                }
+        fclose($fp);
+        $fp = @fopen($cachefile, 'wb');
+        if (!$fp) {
+            if (file_exists($cacheidfile)) {
+                @unlink($cacheidfile);
             }
-            return false;
-        }
-        $channel = $info->getChannel();
-        $package = $info->getPackage();
-        $save = $info;
-        if ($this->_packageExists($package, $channel)) {
-            return false;
-        }
-        if (!$this->_channelExists($channel, true)) {
-            return false;
-        }
-        $info = $info->toArray(true);
-        if (!$info) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($package, 'wb', $channel);
-        if ($fp === null) {
-            return false;
-        }
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        $this->_rebuildFileMap();
-        return true;
-    }
 
-    /**
-     * @param string Package name
-     * @param array parsed package.xml 1.0
-     * @param bool this parameter is only here for BC.  Don't use it.
-     * @access private
-     */
-    function _updatePackage($package, $info, $merge = true)
-    {
-        $oldinfo = $this->_packageInfo($package);
-        if (empty($oldinfo)) {
             return false;
         }
-        $fp = $this->_openPackageFile($package, 'w');
-        if ($fp === null) {
-            return false;
-        }
-        if (is_object($info)) {
-            $info = $info->toArray();
-        }
-        $info['_lastmodified'] = time();
-        $newinfo = $info;
-        if ($merge) {
-            $info = array_merge($oldinfo, $info);
-        } else {
-            $diff = $info;
-        }
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        if (isset($newinfo['filelist'])) {
-            $this->_rebuildFileMap();
-        }
-        return true;
-    }
 
-    /**
-     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
-     * @return bool
-     * @access private
-     */
-    function _updatePackage2($info)
-    {
-        if (!$this->_packageExists($info->getPackage(), $info->getChannel())) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($info->getPackage(), 'w', $info->getChannel());
-        if ($fp === null) {
-            return false;
-        }
-        $save = $info;
-        $info = $save->getArray(true);
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        $this->_rebuildFileMap();
+        fwrite($fp, serialize($contents));
+        fclose($fp);
         return true;
     }
 
     /**
-     * @param string Package name
-     * @param string Channel name
-     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
-     * @access private
-     */
-    function &_getPackage($package, $channel = 'pear.php.net')
-    {
-        $info = $this->_packageInfo($package, null, $channel);
-        if ($info === null) {
-            return $info;
-        }
-        $a = $this->_config;
-        if (!$a) {
-            $this->_config = &new PEAR_Config;
-            $this->_config->set('php_dir', $this->statedir);
-        }
-        if (!class_exists('PEAR_PackageFile')) {
-            require_once 'PEAR/PackageFile.php';
-        }
-        $pkg = &new PEAR_PackageFile($this->_config);
-        $pf = &$pkg->fromArray($info);
-        return $pf;
-    }
-
-    /**
-     * @param string channel name
-     * @param bool whether to strictly retrieve channel names
-     * @return PEAR_ChannelFile|PEAR_Error
-     * @access private
-     */
-    function &_getChannel($channel, $noaliases = false)
-    {
-        $ch = false;
-        if ($this->_channelExists($channel, $noaliases)) {
-            $chinfo = $this->_channelInfo($channel, $noaliases);
-            if ($chinfo) {
-                if (!class_exists('PEAR_ChannelFile')) {
-                    require_once 'PEAR/ChannelFile.php';
-                }
-                $ch = &PEAR_ChannelFile::fromArrayWithErrors($chinfo);
-            }
-        }
-        if ($ch) {
-            if ($ch->validate()) {
-                return $ch;
-            }
-            foreach ($ch->getErrors(true) as $err) {
-                $message = $err['message'] . "\n";
-            }
-            $ch = PEAR::raiseError($message);
-            return $ch;
-        }
-        if ($this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            // the registry is not properly set up, so use defaults
-            if (!class_exists('PEAR_ChannelFile')) {
-                require_once 'PEAR/ChannelFile.php';
-            }
-            $pear_channel = new PEAR_ChannelFile;
-            $pear_channel->setName('pear.php.net');
-            $pear_channel->setAlias('pear');
-            $pear_channel->setSummary('PHP Extension and Application Repository');
-            $pear_channel->setDefaultPEARProtocols();
-            $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
-            $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
-            return $pear_channel;
-        }
-        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
-            // the registry is not properly set up, so use defaults
-            if (!class_exists('PEAR_ChannelFile')) {
-                require_once 'PEAR/ChannelFile.php';
-            }
-            $pear_channel = new PEAR_ChannelFile;
-            $pear_channel->setName('pecl.php.net');
-            $pear_channel->setAlias('pecl');
-            $pear_channel->setSummary('PHP Extension Community Library');
-            $pear_channel->setDefaultPEARProtocols();
-            $pear_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
-            $pear_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
-            $pear_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
-            return $pear_channel;
-        }
-        if ($this->_getChannelFromAlias($channel) == '__uri') {
-            // the registry is not properly set up, so use defaults
-            if (!class_exists('PEAR_ChannelFile')) {
-                require_once 'PEAR/ChannelFile.php';
-            }
-            $private = new PEAR_ChannelFile;
-            $private->setName('__uri');
-            $private->addFunction('xmlrpc', '1.0', '****');
-            $private->setSummary('Pseudo-channel for static packages');
-            return $private;
-        }
-        return $ch;
-    }
-
-    // {{{ packageExists()
-
-    /**
-     * @param string Package name
-     * @param string Channel name
-     * @return bool
-     */
-    function packageExists($package, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_packageExists($package, $channel);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-
-    // {{{ channelExists()
-
-    /**
-     * @param string channel name
-     * @param bool if true, then aliases will be ignored
-     * @return bool
-     */
-    function channelExists($channel, $noaliases = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_channelExists($channel, $noaliases);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-
-    // {{{ isAlias()
-
-    /**
-     * Determines whether the parameter is an alias of a channel
-     * @param string
-     * @return bool
-     */
-    function isAlias($alias)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_isChannelAlias($alias);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ packageInfo()
-
-    /**
-     * @param string|null
-     * @param string|null
-     * @param string
-     * @return array|null
-     */
-    function packageInfo($package = null, $key = null, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_packageInfo($package, $key, $channel);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ channelInfo()
-
-    /**
-     * Retrieve a raw array of channel data.
+     * Efficiently Download a file through HTTP.  Returns downloaded file as a string in-memory
+     * This is best used for small files
      *
-     * Do not use this, instead use {@link getChannel()} for normal
-     * operations.  Array structure is undefined in this method
-     * @param string channel name
-     * @param bool whether to strictly retrieve information only on non-aliases
-     * @return array|null|PEAR_Error
-     */
-    function channelInfo($channel = null, $noaliases = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_channelInfo($channel, $noaliases);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-
-    /**
-     * @param string
-     */
-    function channelName($channel)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_getChannelFromAlias($channel);
-        $this->_unlock();
-        return $ret;
-    }
-
-    /**
-     * @param string
+     * If an HTTP proxy has been configured (http_proxy PEAR_Config
+     * setting), the proxy will be used.
+     *
+     * @param string  $url       the URL to download
+     * @param string  $save_dir  directory to save file in
+     * @param false|string|array $lastmodified header values to check against for caching
+     *                           use false to return the header values from this download
+     * @param false|array $accept Accept headers to send
+     * @return string|array  Returns the contents of the downloaded file or a PEAR
+     *                       error on failure.  If the error is caused by
+     *                       socket-related errors, the error object will
+     *                       have the fsockopen error code available through
+     *                       getCode().  If caching is requested, then return the header
+     *                       values.
+     *
+     * @access public
      */
-    function channelAlias($channel)
+    function downloadHttp($url, $lastmodified = null, $accept = false, $channel = false)
     {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_getAlias($channel);
-        $this->_unlock();
-        return $ret;
-    }
-    // {{{ listPackages()
+        static $redirect = 0;
+        // always reset , so we are clean case of error
+        $wasredirect = $redirect;
+        $redirect = 0;
 
-    function listPackages($channel = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        $info = parse_url($url);
+        if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
+            return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
         }
-        $ret = $this->_listPackages($channel);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ listAllPackages()
 
-    function listAllPackages()
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if (!isset($info['host'])) {
+            return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
         }
-        $ret = $this->_listAllPackages();
-        $this->_unlock();
-        return $ret;
-    }
 
-    // }}}
-    // {{{ listChannel()
+        $host   = isset($info['host']) ? $info['host'] : null;
+        $port   = isset($info['port']) ? $info['port'] : null;
+        $path   = isset($info['path']) ? $info['path'] : null;
+        $schema = (isset($info['scheme']) && $info['scheme'] == 'https') ? 'https' : 'http';
 
-    function listChannels()
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_listChannels();
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ addPackage()
-
-    /**
-     * Add an installed package to the registry
-     * @param string|PEAR_PackageFile_v1|PEAR_PackageFile_v2 package name or object
-     *               that will be passed to {@link addPackage2()}
-     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
-     * @return bool success of saving
-     */
-    function addPackage($package, $info)
-    {
-        if (is_object($info)) {
-            return $this->addPackage2($info);
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_addPackage($package, $info);
-        $this->_unlock();
-        if ($ret) {
-            if (!class_exists('PEAR_PackageFile_v1')) {
-                require_once 'PEAR/PackageFile/v1.php';
+        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
+        if ($this->config->get('http_proxy')&&
+              $proxy = parse_url($this->config->get('http_proxy'))
+        ) {
+            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
+            if ($schema === 'https') {
+                $proxy_host = 'ssl://' . $proxy_host;
             }
-            $pf = new PEAR_PackageFile_v1;
-            $pf->setConfig($this->_config);
-            $pf->fromArray($info);
-            $this->_dependencyDB->uninstallPackage($pf);
-            $this->_dependencyDB->installPackage($pf);
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ addPackage2()
 
-    function addPackage2($info)
-    {
-        if (!is_object($info)) {
-            return $this->addPackage($info['package'], $info);
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_addPackage2($info);
-        $this->_unlock();
-        if ($ret) {
-            $this->_dependencyDB->uninstallPackage($info);
-            $this->_dependencyDB->installPackage($info);
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ updateChannel()
-
-    /**
-     * For future expandibility purposes, separate this
-     * @param PEAR_ChannelFile
-     */
-    function updateChannel($channel, $lastmodified = null)
-    {
-        if ($channel->getName() == '__uri') {
-            return false;
-        }
-        return $this->addChannel($channel, $lastmodified, true);
-    }
-
-    // }}}
-    // {{{ deleteChannel()
-
-    /**
-     * Deletion fails if there are any packages installed from the channel
-     * @param string|PEAR_ChannelFile channel name
-     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
-     */
-    function deleteChannel($channel)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
+            $proxy_port   = isset($proxy['port']) ? $proxy['port'] : 8080;
+            $proxy_user   = isset($proxy['user']) ? urldecode($proxy['user']) : null;
+            $proxy_pass   = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
+            $proxy_schema = (isset($proxy['scheme']) && $proxy['scheme'] == 'https') ? 'https' : 'http';
         }
-        $ret = $this->_deleteChannel($channel);
-        $this->_unlock();
-        if ($ret && is_a($this->_config, 'PEAR_Config')) {
-            $this->_config->setChannels($this->listChannels());
-        }
-        return $ret;
-    }
 
-    // }}}
-    // {{{ addChannel()
-
-    /**
-     * @param PEAR_ChannelFile Channel object
-     * @param string Last-Modified header from HTTP for caching
-     * @return boolean|PEAR_Error True on creation, false if it already exists
-     */
-    function addChannel($channel, $lastmodified = false, $update = false)
-    {
-        if (!is_a($channel, 'PEAR_ChannelFile')) {
-            return false;
-        }
-        if (!$channel->validate()) {
-            return false;
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_addChannel($channel, $update, $lastmodified);
-        $this->_unlock();
-        if (!$update && $ret && is_a($this->_config, 'PEAR_Config')) {
-            $this->_config->setChannels($this->listChannels());
+        if (empty($port)) {
+            $port = (isset($info['scheme']) && $info['scheme'] == 'https')  ? 443 : 80;
         }
-        return $ret;
-    }
 
-    // }}}
-    // {{{ deletePackage()
-
-    function deletePackage($package, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $file = $this->_packageFileName($package, $channel);
-        if (file_exists($file)) {
-            $ret = @unlink($file);
+        if (isset($proxy['host'])) {
+            $request = "GET $url HTTP/1.1\r\n";
         } else {
-            $ret = false;
+            $request = "GET $path HTTP/1.1\r\n";
         }
-        $this->_rebuildFileMap();
-        $this->_unlock();
-        $p = array('channel' => $channel, 'package' => $package);
-        $this->_dependencyDB->uninstallPackage($p);
-        return $ret;
-    }
-
-    // }}}
-    // {{{ updatePackage()
 
-    function updatePackage($package, $info, $merge = true)
-    {
-        if (is_object($info)) {
-            return $this->updatePackage2($info, $merge);
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_updatePackage($package, $info, $merge);
-        $this->_unlock();
-        if ($ret) {
-            if (!class_exists('PEAR_PackageFile_v1')) {
-                require_once 'PEAR/PackageFile/v1.php';
+        $request .= "Host: $host:$port\r\n";
+        $ifmodifiedsince = '';
+        if (is_array($lastmodified)) {
+            if (isset($lastmodified['Last-Modified'])) {
+                $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
             }
-            $pf = new PEAR_PackageFile_v1;
-            $pf->setConfig($this->_config);
-            $pf->fromArray($this->packageInfo($package));
-            $this->_dependencyDB->uninstallPackage($pf);
-            $this->_dependencyDB->installPackage($pf);
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ updatePackage2()
-
-    function updatePackage2($info)
-    {
-        if (!is_object($info)) {
-            return $this->updatePackage($info['package'], $info, $merge);
-        }
-        if (!$info->validate(PEAR_VALIDATE_DOWNLOADING)) {
-            return false;
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_updatePackage2($info);
-        $this->_unlock();
-        if ($ret) {
-            $this->_dependencyDB->uninstallPackage($info);
-            $this->_dependencyDB->installPackage($info);
-        }
-        return $ret;
-    }
 
-    // }}}
-    // {{{ getChannel()
-    /**
-     * @param string channel name
-     * @param bool whether to strictly return raw channels (no aliases)
-     * @return PEAR_ChannelFile|PEAR_Error
-     */
-    function &getChannel($channel, $noaliases = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = &$this->_getChannel($channel, $noaliases);
-        $this->_unlock();
-        if (!$ret) {
-            return PEAR::raiseError('Unknown channel: ' . $channel);
+            if (isset($lastmodified['ETag'])) {
+                $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
+            }
+        } else {
+            $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
         }
-        return $ret;
-    }
 
-    // }}}
-    // {{{ getPackage()
-    /**
-     * @param string package name
-     * @param string channel name
-     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
-     */
-    function &getPackage($package, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $pf = &$this->_getPackage($package, $channel);
-        $this->_unlock();
-        return $pf;
-    }
+        $request .= $ifmodifiedsince .
+            "User-Agent: PEAR/1.8.0/PHP/" . PHP_VERSION . "\r\n";
 
-    // }}}
+        $username = $this->config->get('username', null, $channel);
+        $password = $this->config->get('password', null, $channel);
 
-    /**
-     * Get PEAR_PackageFile_v[1/2] objects representing the contents of
-     * a dependency group that are installed.
-     *
-     * This is used at uninstall-time
-     * @param array
-     * @return array|false
-     */
-    function getInstalledGroup($group)
-    {
-        $ret = array();
-        if (isset($group['package'])) {
-            if (!isset($group['package'][0])) {
-                $group['package'] = array($group['package']);
-            }
-            foreach ($group['package'] as $package) {
-                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
-                $p = &$this->getPackage($package['name'], $depchannel);
-                if ($p) {
-                    $save = &$p;
-                    $ret[] = &$save;
-                }
-            }
-        }
-        if (isset($group['subpackage'])) {
-            if (!isset($group['subpackage'][0])) {
-                $group['subpackage'] = array($group['subpackage']);
-            }
-            foreach ($group['subpackage'] as $package) {
-                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
-                $p = &$this->getPackage($package['name'], $depchannel);
-                if ($p) {
-                    $save = &$p;
-                    $ret[] = &$save;
-                }
-            }
-        }
-        if (!count($ret)) {
-            return false;
+        if ($username && $password) {
+            $tmp = base64_encode("$username:$password");
+            $request .= "Authorization: Basic $tmp\r\n";
         }
-        return $ret;
-    }
 
-    // {{{ getChannelValidator()
-    /**
-     * @param string channel name
-     * @return PEAR_Validate|false
-     */
-    function &getChannelValidator($channel)
-    {
-        $chan = $this->getChannel($channel);
-        if (PEAR::isError($chan)) {
-            return $chan;
-        }
-        $val = $chan->getValidationObject();
-        return $val;
-    }
-    // }}}
-    // {{{ getChannels()
-    /**
-     * @param string channel name
-     * @return array an array of PEAR_ChannelFile objects representing every installed channel
-     */
-    function &getChannels()
-    {
-        $ret = array();
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        foreach ($this->_listChannels() as $channel) {
-            $e = &$this->_getChannel($channel);
-            if (!$e || PEAR::isError($e)) {
-                continue;
-            }
-            $ret[] = $e;
+        if ($proxy_host != '' && $proxy_user != '') {
+            $request .= 'Proxy-Authorization: Basic ' .
+                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
         }
-        $this->_unlock();
-        return $ret;
-    }
 
-    // }}}
-    // {{{ checkFileMap()
-
-    /**
-     * Test whether a file or set of files belongs to a package.
-     *
-     * If an array is passed in
-     * @param string|array file path, absolute or relative to the pear
-     *                     install dir
-     * @param string|array name of PEAR package or array('package' => name, 'channel' =>
-     *                     channel) of a package that will be ignored
-     * @param string API version - 1.1 will exclude any files belonging to a package
-     * @param array private recursion variable
-     * @return array|false which package and channel the file belongs to, or an empty
-     *                     string if the file does not belong to an installed package,
-     *                     or belongs to the second parameter's package
-     */
-    function checkFileMap($path, $package = false, $api = '1.0', $attrs = false)
-    {
-        if (is_array($path)) {
-            static $notempty;
-            if (empty($notempty)) {
-                if (!class_exists('PEAR_Installer_Role')) {
-                    require_once 'PEAR/Installer/Role.php';
-                }
-                $notempty = create_function('$a','return !empty($a);');
-            }
-            $package = is_array($package) ? array(strtolower($package[0]), strtolower($package[1]))
-                : strtolower($package);
-            $pkgs = array();
-            foreach ($path as $name => $attrs) {
-                if (is_array($attrs)) {
-                    if (isset($attrs['install-as'])) {
-                        $name = $attrs['install-as'];
-                    }
-                    if (!in_array($attrs['role'], PEAR_Installer_Role::getInstallableRoles())) {
-                        // these are not installed
-                        continue;
-                    }
-                    if (!in_array($attrs['role'], PEAR_Installer_Role::getBaseinstallRoles())) {
-                        $attrs['baseinstalldir'] = is_array($package) ? $package[1] : $package;
-                    }
-                    if (isset($attrs['baseinstalldir'])) {
-                        $name = $attrs['baseinstalldir'] . DIRECTORY_SEPARATOR . $name;
-                    }
-                }
-                $pkgs[$name] = $this->checkFileMap($name, $package, $api, $attrs);
-                if (PEAR::isError($pkgs[$name])) {
-                    return $pkgs[$name];
-                }
-            }
-            return array_filter($pkgs, $notempty);
-        }
-        if (empty($this->filemap_cache)) {
-            if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-                return $e;
-            }
-            $err = $this->_readFileMap();
-            $this->_unlock();
-            if (PEAR::isError($err)) {
-                return $err;
-            }
-        }
-        if (!$attrs) {
-            $attrs = array('role' => 'php'); // any old call would be for PHP role only
-        }
-        if (isset($this->filemap_cache[$attrs['role']][$path])) {
-            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
-                return false;
-            }
-            return $this->filemap_cache[$attrs['role']][$path];
-        }
-        $l = strlen($this->install_dir);
-        if (substr($path, 0, $l) == $this->install_dir) {
-            $path = preg_replace('!^'.DIRECTORY_SEPARATOR.'+!', '', substr($path, $l));
-        }
-        if (isset($this->filemap_cache[$attrs['role']][$path])) {
-            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
-                return false;
-            }
-            return $this->filemap_cache[$attrs['role']][$path];
+        if ($accept) {
+            $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
         }
-        return false;
-    }
-
-    // }}}
-    // {{{ flush()
-    /**
-     * Force a reload of the filemap
-     * @since 1.5.0RC3
-     */
-    function flushFileMap()
-    {
-        $this->filemap_cache = null;
-        clearstatcache(); // ensure that the next read gets the full, current filemap
-    }
-
-    // }}}
-    // {{{ apiVersion()
-    /**
-     * Get the expected API version.  Channels API is version 1.1, as it is backwards
-     * compatible with 1.0
-     * @return string
-     */
-    function apiVersion()
-    {
-        return '1.1';
-    }
-    // }}}
 
+        $request .= "Accept-Encoding:\r\n";
+        $request .= "Connection: close\r\n";
+        $request .= "\r\n";
 
-    /**
-     * Parse a package name, or validate a parsed package name array
-     * @param string|array pass in an array of format
-     *                     array(
-     *                      'package' => 'pname',
-     *                     ['channel' => 'channame',]
-     *                     ['version' => 'version',]
-     *                     ['state' => 'state',]
-     *                     ['group' => 'groupname'])
-     *                     or a string of format
-     *                     [channel://][channame/]pname[-version|-state][/group=groupname]
-     * @return array|PEAR_Error
-     */
-    function parsePackageName($param, $defaultchannel = 'pear.php.net')
-    {
-        $saveparam = $param;
-        if (is_array($param)) {
-            // convert to string for error messages
-            $saveparam = $this->parsedPackageNameToString($param);
-            // process the array
-            if (!isset($param['package'])) {
-                return PEAR::raiseError('parsePackageName(): array $param ' .
-                    'must contain a valid package name in index "param"',
-                    'package', null, null, $param);
-            }
-            if (!isset($param['uri'])) {
-                if (!isset($param['channel'])) {
-                    $param['channel'] = $defaultchannel;
-                }
-            } else {
-                $param['channel'] = '__uri';
+        if ($proxy_host != '') {
+            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr, 15);
+            if (!$fp) {
+                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", -9276);
             }
         } else {
-            $components = @parse_url((string) $param);
-            if (isset($components['scheme'])) {
-                if ($components['scheme'] == 'http') {
-                    // uri package
-                    $param = array('uri' => $param, 'channel' => '__uri');
-                } elseif($components['scheme'] != 'channel') {
-                    return PEAR::raiseError('parsePackageName(): only channel:// uris may ' .
-                        'be downloaded, not "' . $param . '"', 'invalid', null, null, $param);
-                }
-            }
-            if (!isset($components['path'])) {
-                return PEAR::raiseError('parsePackageName(): array $param ' .
-                    'must contain a valid package name in "' . $param . '"',
-                    'package', null, null, $param);
-            }
-            if (isset($components['host'])) {
-                // remove the leading "/"
-                $components['path'] = substr($components['path'], 1);
-            }
-            if (!isset($components['scheme'])) {
-                if (strpos($components['path'], '/') !== false) {
-                    if ($components['path']{0} == '/') {
-                        return PEAR::raiseError('parsePackageName(): this is not ' .
-                            'a package name, it begins with "/" in "' . $param . '"',
-                            'invalid', null, null, $param);
-                    }
-                    $parts = explode('/', $components['path']);
-                    $components['host'] = array_shift($parts);
-                    if (count($parts) > 1) {
-                        $components['path'] = array_pop($parts);
-                        $components['host'] .= '/' . implode('/', $parts);
-                    } else {
-                        $components['path'] = implode('/', $parts);
-                    }
-                } else {
-                    $components['host'] = $defaultchannel;
-                }
-            } else {
-                if (strpos($components['path'], '/')) {
-                    $parts = explode('/', $components['path']);
-                    $components['path'] = array_pop($parts);
-                    $components['host'] .= '/' . implode('/', $parts);
-                }
-            }
-
-            if (is_array($param)) {
-                $param['package'] = $components['path'];
-            } else {
-                $param = array(
-                    'package' => $components['path']
-                    );
-                if (isset($components['host'])) {
-                    $param['channel'] = $components['host'];
-                }
-            }
-            if (isset($components['fragment'])) {
-                $param['group'] = $components['fragment'];
-            }
-            if (isset($components['user'])) {
-                $param['user'] = $components['user'];
-            }
-            if (isset($components['pass'])) {
-                $param['pass'] = $components['pass'];
-            }
-            if (isset($components['query'])) {
-                parse_str($components['query'], $param['opts']);
-            }
-            // check for extension
-            $pathinfo = pathinfo($param['package']);
-            if (isset($pathinfo['extension']) &&
-                  in_array(strtolower($pathinfo['extension']), array('tgz', 'tar'))) {
-                $param['extension'] = $pathinfo['extension'];
-                $param['package'] = substr($pathinfo['basename'], 0,
-                    strlen($pathinfo['basename']) - 4);
-            }
-            // check for version
-            if (strpos($param['package'], '-')) {
-                $test = explode('-', $param['package']);
-                if (count($test) != 2) {
-                    return PEAR::raiseError('parsePackageName(): only one version/state ' .
-                        'delimiter "-" is allowed in "' . $saveparam . '"',
-                        'version', null, null, $param);
-                }
-                list($param['package'], $param['version']) = $test;
-            }
-        }
-        // validation
-        $info = $this->channelExists($param['channel']);
-        if (PEAR::isError($info)) {
-            return $info;
-        }
-        if (!$info) {
-            return PEAR::raiseError('unknown channel "' . $param['channel'] .
-                '" in "' . $saveparam . '"', 'channel', null, null, $param);
-        }
-        $chan = $this->getChannel($param['channel']);
-        if (PEAR::isError($chan)) {
-            return $chan;
-        }
-        if (!$chan) {
-            return PEAR::raiseError("Exception: corrupt registry, could not " .
-                "retrieve channel " . $param['channel'] . " information",
-                'registry', null, null, $param);
-        }
-        $param['channel'] = $chan->getName();
-        $validate = $chan->getValidationObject();
-        $vpackage = $chan->getValidationPackage();
-        // validate package name
-        if (!$validate->validPackageName($param['package'], $vpackage['_content'])) {
-            return PEAR::raiseError('parsePackageName(): invalid package name "' .
-                $param['package'] . '" in "' . $saveparam . '"',
-                'package', null, null, $param);
-        }
-        if (isset($param['group'])) {
-            if (!PEAR_Validate::validGroupName($param['group'])) {
-                return PEAR::raiseError('parsePackageName(): dependency group "' . $param['group'] .
-                    '" is not a valid group name in "' . $saveparam . '"', 'group', null, null,
-                    $param);
-            }
-        }
-        if (isset($param['state'])) {
-            if (!in_array(strtolower($param['state']), $validate->getValidStates())) {
-                return PEAR::raiseError('parsePackageName(): state "' . $param['state']
-                    . '" is not a valid state in "' . $saveparam . '"',
-                    'state', null, null, $param);
-            }
-        }
-        if (isset($param['version'])) {
-            if (isset($param['state'])) {
-                return PEAR::raiseError('parsePackageName(): cannot contain both ' .
-                    'a version and a stability (state) in "' . $saveparam . '"',
-                    'version/state', null, null, $param);
-            }
-            // check whether version is actually a state
-            if (in_array(strtolower($param['version']), $validate->getValidStates())) {
-                $param['state'] = strtolower($param['version']);
-                unset($param['version']);
-            } else {
-                if (!$validate->validVersion($param['version'])) {
-                    return PEAR::raiseError('parsePackageName(): "' . $param['version'] .
-                        '" is neither a valid version nor a valid state in "' .
-                        $saveparam . '"', 'version/state', null, null, $param);
-                }                    
+            if ($schema === 'https') {
+                $host = 'ssl://' . $host;
             }
-        }
-        return $param;
-    }
 
-    /**
-     * @param array
-     * @return string
-     */
-    function parsedPackageNameToString($parsed, $brief = false)
-    {
-        if (is_string($parsed)) {
-            return $parsed;
-        }
-        if (is_object($parsed)) {
-            $p = $parsed;
-            $parsed = array(
-                'package' => $p->getPackage(),
-                'channel' => $p->getChannel(),
-                'version' => $p->getVersion(),
-            );
-        }
-        if (isset($parsed['uri'])) {
-            return $parsed['uri'];
-        }
-        if ($brief) {
-            if ($channel = $this->channelAlias($parsed['channel'])) {
-                return $channel . '/' . $parsed['package'];
-            }
-        }
-        $upass = '';
-        if (isset($parsed['user'])) {
-            $upass = $parsed['user'];
-            if (isset($parsed['pass'])) {
-                $upass .= ':' . $parsed['pass'];
-            }
-            $upass = "$upass@";
-        }
-        $ret = 'channel://' . $upass . $parsed['channel'] . '/' . $parsed['package'];
-        if (isset($parsed['version']) || isset($parsed['state'])) {
-            $ver = isset($parsed['version']) ? $parsed['version'] : '';
-            $ver .= isset($parsed['state']) ? $parsed['state'] : '';
-            $ret .= '-' . $ver;
-        }
-        if (isset($parsed['extension'])) {
-            $ret .= '.' . $parsed['extension'];
-        }
-        if (isset($parsed['opts'])) {
-            $ret .= '?';
-            foreach ($parsed['opts'] as $name => $value) {
-                $parsed['opts'][$name] = "$name=$value";
+            $fp = @fsockopen($host, $port, $errno, $errstr);
+            if (!$fp) {
+                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
             }
-            $ret .= implode('&', $parsed['opts']);
-        }
-        if (isset($parsed['group'])) {
-            $ret .= '#' . $parsed['group'];
         }
-        return $ret;
-    }
-}
-
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                     PEAR-1.7.2/PEAR/Remote.php                                                                          100644    1750    1750        43506 11014312742  10210                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_Remote
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Remote.php,v 1.80 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
- */
-
-/**
- * needed for PEAR_Error
- */
-require_once 'PEAR.php';
-require_once 'PEAR/Config.php';
-
-/**
- * This is a class for doing remote operations against the central
- * PEAR database.
- *
- * @nodep XML_RPC_Value
- * @nodep XML_RPC_Message
- * @nodep XML_RPC_Client
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 0.1
- */
-class PEAR_Remote extends PEAR
-{
-    // {{{ properties
-
-    var $config = null;
-    var $cache  = null;
-    /**
-     * @var PEAR_Registry
-     * @access private
-     */
-    var $_registry;
-
-    // }}}
-
-    // {{{ PEAR_Remote(config_object)
-
-    function PEAR_Remote(&$config)
-    {
-        $this->PEAR();
-        $this->config = &$config;
-        $this->_registry = &$this->config->getRegistry();
-    }
-
-    // }}}
-    // {{{ setRegistry()
-    
-    function setRegistry(&$reg)
-    {
-        $this->_registry = &$reg;
-    }
-    // }}}
-    // {{{ getCache()
 
+        fwrite($fp, $request);
 
-    function getCache($args)
-    {
-        $id       = md5(serialize($args));
-        $cachedir = $this->config->get('cache_dir');
-        $filename = $cachedir . DIRECTORY_SEPARATOR . 'xmlrpc_cache_' . $id;
-        if (!file_exists($filename)) {
-            return null;
-        }
-
-        $fp = fopen($filename, 'rb');
-        if (!$fp) {
-            return null;
-        }
-        fclose($fp);
-        $content = file_get_contents($filename);
-        $result   = array(
-            'age'        => time() - filemtime($filename),
-            'lastChange' => filemtime($filename),
-            'content'    => unserialize($content),
-            );
-        return $result;
-    }
-
-    // }}}
-
-    // {{{ saveCache()
-
-    function saveCache($args, $data)
-    {
-        $id       = md5(serialize($args));
-        $cachedir = $this->config->get('cache_dir');
-        if (!file_exists($cachedir)) {
-            System::mkdir(array('-p', $cachedir));
-        }
-        $filename = $cachedir.'/xmlrpc_cache_'.$id;
-
-        $fp = @fopen($filename, "wb");
-        if ($fp) {
-            fwrite($fp, serialize($data));
-            fclose($fp);
-        }
-    }
-
-    // }}}
-
-    // {{{ clearCache()
-
-    function clearCache($method, $args)
-    {
-        array_unshift($args, $method);
-        array_unshift($args, $this->config->get('default_channel')); // cache by channel
-        $id       = md5(serialize($args));
-        $cachedir = $this->config->get('cache_dir');
-        $filename = $cachedir.'/xmlrpc_cache_'.$id;
-        if (file_exists($filename)) {
-            @unlink($filename);
-        }
-    }
-
-    // }}}
-    // {{{ call(method, [args...])
-
-    function call($method)
-    {
-        $_args = $args = func_get_args();
-
-        $server_channel = $this->config->get('default_channel');
-        $channel = $this->_registry->getChannel($server_channel);
-        if (!PEAR::isError($channel)) {
-            $mirror = $this->config->get('preferred_mirror');
-            if ($channel->getMirror($mirror)) {
-                if ($channel->supports('xmlrpc', $method, $mirror)) {
-                    $server_channel = $server_host = $mirror; // use the preferred mirror
-                    $server_port = $channel->getPort($mirror);
-                } elseif (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not " .
-                        "support xml-rpc method $method");
+        $headers = array();
+        $reply   = 0;
+        while ($line = trim(fgets($fp, 1024))) {
+            if (preg_match('/^([^:]+):\s+(.*)\s*\\z/', $line, $matches)) {
+                $headers[strtolower($matches[1])] = trim($matches[2]);
+            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
+                $reply = (int)$matches[1];
+                if ($reply == 304 && ($lastmodified || ($lastmodified === false))) {
+                    return false;
                 }
-            }
-            if (!isset($server_host)) {
-                if (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not support " .
-                        "xml-rpc method $method");
-                } else {
-                    $server_host = $server_channel;
-                    $server_port = $channel->getPort();
+
+                if (!in_array($reply, array(200, 301, 302, 303, 305, 307))) {
+                    return PEAR::raiseError("File $schema://$host:$port$path not valid (received: $line)");
                 }
             }
-        } else {
-            return $this->raiseError("Unknown channel '$server_channel'");
         }
 
-        array_unshift($_args, $server_channel); // cache by channel
-        $this->cache = $this->getCache($_args);
-        $cachettl = $this->config->get('cache_ttl');
-        // If cache is newer than $cachettl seconds, we use the cache!
-        if ($this->cache !== null && $this->cache['age'] < $cachettl) {
-            return $this->cache['content'];
-        }
-        $fp = false;
-        if (extension_loaded("xmlrpc")) {
-            $result = call_user_func_array(array(&$this, 'call_epi'), $args);
-            if (!PEAR::isError($result)) {
-                $this->saveCache($_args, $result);
+        if ($reply != 200) {
+            if (!isset($headers['location'])) {
+                return PEAR::raiseError("File $schema://$host:$port$path not valid (redirected but no location)");
             }
-            return $result;
-        } elseif (!($fp = fopen('XML/RPC.php', 'r', true))) {
-            return $this->raiseError("For this remote PEAR operation you need to load the xmlrpc extension or install XML_RPC");
-        }
-        include_once 'XML/RPC.php';
-        if ($fp) {
-            fclose($fp);
-        }
 
-        array_shift($args);
-        $username = $this->config->get('username');
-        $password = $this->config->get('password');
-        $eargs = array();
-        foreach($args as $arg) {
-            $eargs[] = $this->_encode($arg);
-        }
-        $f = new XML_RPC_Message($method, $eargs);
-        if ($this->cache !== null) {
-            $maxAge = '?maxAge='.$this->cache['lastChange'];
-        } else {
-            $maxAge = '';
-        }
-        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-        if ($proxy = parse_url($this->config->get('http_proxy'))) {
-            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
-            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
-                $proxy_host = 'https://' . $proxy_host;
-            }
-            $proxy_port = isset($proxy['port']) ? $proxy['port'] : 8080;
-            $proxy_user = isset($proxy['user']) ? urldecode($proxy['user']) : null;
-            $proxy_pass = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
-        }
-        $shost = $server_host;
-        if ($channel->getSSL()) {
-            $shost = "https://$shost";
-        }
-        $c = new XML_RPC_Client('/' . $channel->getPath('xmlrpc')
-            . $maxAge, $shost, $server_port, $proxy_host, $proxy_port,
-            $proxy_user, $proxy_pass);
-        if ($username && $password) {
-            $c->setCredentials($username, $password);
-        }
-        if ($this->config->get('verbose') >= 3) {
-            $c->setDebug(1);
-        }
-        $r = $c->send($f);
-        if (!$r) {
-            return $this->raiseError("XML_RPC send failed");
-        }
-        $v = $r->value();
-        if ($e = $r->faultCode()) {
-            if ($e == $GLOBALS['XML_RPC_err']['http_error'] && strstr($r->faultString(), '304 Not Modified') !== false) {
-                return $this->cache['content'];
+            if ($wasredirect > 4) {
+                return PEAR::raiseError("File $schema://$host:$port$path not valid (redirection looped more than 5 times)");
             }
-            return $this->raiseError($r->faultString(), $e);
-        }
-
-        $result = XML_RPC_decode($v);
-        $this->saveCache($_args, $result);
-        return $result;
-    }
-
-    // }}}
 
-    // {{{ call_epi(method, [args...])
-
-    function call_epi($method)
-    {
-        if (!extension_loaded("xmlrpc")) {
-            return $this->raiseError("xmlrpc extension is not loaded");
-        }
-        $server_channel = $this->config->get('default_channel');
-        $channel = $this->_registry->getChannel($server_channel);
-        if (!PEAR::isError($channel)) {
-            $mirror = $this->config->get('preferred_mirror');
-            if ($channel->getMirror($mirror)) {
-                if ($channel->supports('xmlrpc', $method, $mirror)) {
-                    $server_channel = $server_host = $mirror; // use the preferred mirror
-                    $server_port = $channel->getPort($mirror);
-                } elseif (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not " .
-                        "support xml-rpc method $method");
-                }
-            }
-            if (!isset($server_host)) {
-                if (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not support " .
-                        "xml-rpc method $method");
-                } else {
-                    $server_host = $server_channel;
-                    $server_port = $channel->getPort();
-                }
-            }
-        } else {
-            return $this->raiseError("Unknown channel '$server_channel'");
-        }
-        $params = func_get_args();
-        array_shift($params);
-        $method = str_replace("_", ".", $method);
-        $request = xmlrpc_encode_request($method, $params);
-        if ($http_proxy = $this->config->get('http_proxy')) {
-            $proxy = parse_url($http_proxy);
-            $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
-            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
-                $proxy_host = 'https://' . $proxy_host;
-            }
-            $proxy_port = isset($proxy['port']) ? $proxy['port'] : null;
-            $proxy_user = isset($proxy['user']) ? urldecode($proxy['user']) : null;
-            $proxy_pass = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
-            $fp = @fsockopen($proxy_host, $proxy_port);
-            $use_proxy = true;
-            if ($channel->getSSL()) {
-                $server_host = "https://$server_host";
-            }
-        } else {
-            $use_proxy = false;
-            $ssl = $channel->getSSL();
-            $fp = @fsockopen(($ssl ? 'ssl://' : '') . $server_host, $server_port);
-            if (!$fp) {
-                $server_host = "$ssl$server_host"; // for error-reporting
-            }
-        }
-        if (!$fp && $http_proxy) {
-            return $this->raiseError("PEAR_Remote::call: fsockopen(`$proxy_host', $proxy_port) failed");
-        } elseif (!$fp) {
-            return $this->raiseError("PEAR_Remote::call: fsockopen(`$server_host', $server_port) failed");
-        }
-        $len = strlen($request);
-        $req_headers = "Host: $server_host:$server_port\r\n" .
-             "Content-type: text/xml\r\n" .
-             "Content-length: $len\r\n";
-        $username = $this->config->get('username');
-        $password = $this->config->get('password');
-        if ($username && $password) {
-            $req_headers .= "Cookie: PEAR_USER=$username; PEAR_PW=$password\r\n";
-            $tmp = base64_encode("$username:$password");
-            $req_headers .= "Authorization: Basic $tmp\r\n";
-        }
-        if ($this->cache !== null) {
-            $maxAge = '?maxAge='.$this->cache['lastChange'];
-        } else {
-            $maxAge = '';
+            $redirect = $wasredirect + 1;
+            return $this->downloadHttp($headers['location'], $lastmodified, $accept, $channel);
         }
 
-        if ($use_proxy && $proxy_host != '' && $proxy_user != '') {
-            $req_headers .= 'Proxy-Authorization: Basic '
-                .base64_encode($proxy_user.':'.$proxy_pass)
-                ."\r\n";
-        }
+        $length = isset($headers['content-length']) ? $headers['content-length'] : -1;
 
-        if ($this->config->get('verbose') > 3) {
-            print "XMLRPC REQUEST HEADERS:\n";
-            var_dump($req_headers);
-            print "XMLRPC REQUEST BODY:\n";
-            var_dump($request);
+        $data = '';
+        while ($chunk = @fread($fp, 8192)) {
+            $data .= $chunk;
         }
+        fclose($fp);
 
-        if ($use_proxy && $proxy_host != '') {
-            $post_string = "POST http://".$server_host;
-            if ($proxy_port > '') {
-                $post_string .= ':'.$server_port;
+        if ($lastmodified === false || $lastmodified) {
+            if (isset($headers['etag'])) {
+                $lastmodified = array('ETag' => $headers['etag']);
             }
-        } else {
-            $post_string = "POST ";
-        }
 
-        $path = '/' . $channel->getPath('xmlrpc');
-        fwrite($fp, ($post_string . $path . "$maxAge HTTP/1.0\r\n$req_headers\r\n$request"));
-        $response = '';
-        $line1 = fgets($fp, 2048);
-        if (!preg_match('!^HTTP/[0-9\.]+ (\d+) (.*)!', $line1, $matches)) {
-            return $this->raiseError("PEAR_Remote: invalid HTTP response from XML-RPC server");
-        }
-        switch ($matches[1]) {
-            case "200": // OK
-                break;
-            case "304": // Not Modified
-                return $this->cache['content'];
-            case "401": // Unauthorized
-                if ($username && $password) {
-                    return $this->raiseError("PEAR_Remote ($server_host:$server_port) " .
-                        ": authorization failed", 401);
+            if (isset($headers['last-modified'])) {
+                if (is_array($lastmodified)) {
+                    $lastmodified['Last-Modified'] = $headers['last-modified'];
                 } else {
-                    return $this->raiseError("PEAR_Remote ($server_host:$server_port) " .
-                        ": authorization required, please log in first", 401);
+                    $lastmodified = $headers['last-modified'];
                 }
-            default:
-                return $this->raiseError("PEAR_Remote ($server_host:$server_port) : " .
-                    "unexpected HTTP response", (int)$matches[1], null, null,
-                    "$matches[1] $matches[2]");
-        }
-        while (trim(fgets($fp, 2048)) != ''); // skip rest of headers
-        while ($chunk = fread($fp, 10240)) {
-            $response .= $chunk;
-        }
-        fclose($fp);
-        if ($this->config->get('verbose') > 3) {
-            print "XMLRPC RESPONSE:\n";
-            var_dump($response);
-        }
-        $ret = xmlrpc_decode($response);
-        if (is_array($ret) && isset($ret['__PEAR_TYPE__'])) {
-            if ($ret['__PEAR_TYPE__'] == 'error') {
-                if (isset($ret['__PEAR_CLASS__'])) {
-                    $class = $ret['__PEAR_CLASS__'];
-                } else {
-                    $class = "PEAR_Error";
-                }
-                if ($ret['code']     === '') $ret['code']     = null;
-                if ($ret['message']  === '') $ret['message']  = null;
-                if ($ret['userinfo'] === '') $ret['userinfo'] = null;
-                if (strtolower($class) == 'db_error') {
-                    $ret = $this->raiseError(PEAR::errorMessage($ret['code']),
-                                             $ret['code'], null, null,
-                                             $ret['userinfo']);
-                } else {
-                    $ret = $this->raiseError($ret['message'], $ret['code'],
-                                             null, null, $ret['userinfo']);
-                }
-            }
-        } elseif (is_array($ret) && sizeof($ret) == 1 && isset($ret[0])
-                  && is_array($ret[0]) &&
-                  !empty($ret[0]['faultString']) &&
-                  !empty($ret[0]['faultCode'])) {
-            extract($ret[0]);
-            $faultString = "XML-RPC Server Fault: " .
-                 str_replace("\n", " ", $faultString);
-            return $this->raiseError($faultString, $faultCode);
-        } elseif (is_array($ret) && sizeof($ret) == 2 && !empty($ret['faultString']) &&
-              !empty($ret['faultCode'])) {
-            extract($ret);
-            $faultString = "XML-RPC Server Fault: " .
-                 str_replace("\n", " ", $faultString);
-            return $this->raiseError($faultString, $faultCode);
-        }
-        return $ret;
-    }
-
-    // }}}
+            }
 
-    // {{{ _encode
-
-    // a slightly extended version of XML_RPC_encode
-    function _encode($php_val)
-    {
-        global $XML_RPC_Boolean, $XML_RPC_Int, $XML_RPC_Double;
-        global $XML_RPC_String, $XML_RPC_Array, $XML_RPC_Struct;
-
-        $type = gettype($php_val);
-        $xmlrpcval = new XML_RPC_Value;
-
-        switch($type) {
-            case "array":
-                reset($php_val);
-                $firstkey = key($php_val);
-                end($php_val);
-                $lastkey = key($php_val);
-                reset($php_val);
-                if ($firstkey === 0 && is_int($lastkey) &&
-                    ($lastkey + 1) == count($php_val)) {
-                    $is_continuous = true;
-                    reset($php_val);
-                    $size = count($php_val);
-                    for ($expect = 0; $expect < $size; $expect++, next($php_val)) {
-                        if (key($php_val) !== $expect) {
-                            $is_continuous = false;
-                            break;
-                        }
-                    }
-                    if ($is_continuous) {
-                        reset($php_val);
-                        $arr = array();
-                        while (list($k, $v) = each($php_val)) {
-                            $arr[$k] = $this->_encode($v);
-                        }
-                        $xmlrpcval->addArray($arr);
-                        break;
-                    }
-                }
-                // fall though if not numerical and continuous
-            case "object":
-                $arr = array();
-                while (list($k, $v) = each($php_val)) {
-                    $arr[$k] = $this->_encode($v);
-                }
-                $xmlrpcval->addStruct($arr);
-                break;
-            case "integer":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_Int);
-                break;
-            case "double":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_Double);
-                break;
-            case "string":
-            case "NULL":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_String);
-                break;
-            case "boolean":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_Boolean);
-                break;
-            case "unknown type":
-            default:
-                return null;
+            return array($data, $lastmodified, $headers);
         }
-        return $xmlrpcval;
-    }
-
-    // }}}
 
-}
-
-?>
-                                                                                                                                                                                          PEAR-1.7.2/PEAR/REST.php                                                                            100644    1750    1750        36114 11014312742   7527                                                                                                                                                                                                                                                                                                                                                                      <?php
-/**
- * PEAR_REST
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: REST.php,v 1.31 2008/05/13 18:03:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * For downloading xml files
- */
-require_once 'PEAR.php';
-require_once 'PEAR/XMLParser.php';
-
-/**
- * Intelligently retrieve data, following hyperlinks if necessary, and re-directing
- * as well
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_REST
-{
-    var $config;
-    var $_options;
-    function PEAR_REST(&$config, $options = array())
-    {
-        $this->config = &$config;
-        $this->_options = $options;
-    }
-
-    /**
-     * Retrieve REST data, but always retrieve the local cache if it is available.
-     *
-     * This is useful for elements that should never change, such as information on a particular
-     * release
-     * @param string full URL to this resource
-     * @param array|false contents of the accept-encoding header
-     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
-     *                    parsed using PEAR_XMLParser
-     * @return string|array
-     */
-    function retrieveCacheFirst($url, $accept = false, $forcestring = false, $channel = false)
-    {
-        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cachefile';
-        if (file_exists($cachefile)) {
-            return unserialize(implode('', file($cachefile)));
-        }
-        return $this->retrieveData($url, $accept, $forcestring, $channel);
-    }
-
-    /**
-     * Retrieve a remote REST resource
-     * @param string full URL to this resource
-     * @param array|false contents of the accept-encoding header
-     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
-     *                    parsed using PEAR_XMLParser
-     * @return string|array
-     */
-    function retrieveData($url, $accept = false, $forcestring = false, $channel = false)
-    {
-        $cacheId = $this->getCacheId($url);
-        if ($ret = $this->useLocalCache($url, $cacheId)) {
-            return $ret;
-        }
-        if (!isset($this->_options['offline'])) {
-            $trieddownload = true;
-            $file = $this->downloadHttp($url, $cacheId ? $cacheId['lastChange'] : false, $accept, $channel);
-        } else {
-            $trieddownload = false;
-            $file = false;
-        }
-        if (PEAR::isError($file)) {
-            if ($file->getCode() == -9276) {
-                $trieddownload = false;
-                $file = false; // use local copy if available on socket connect error
-            } else {
-                return $file;
-            }
-        }
-        if (!$file) {
-            $ret = $this->getCache($url);
-            if (!PEAR::isError($ret) && $trieddownload) {
-                // reset the age of the cache if the server says it was unmodified
-                $this->saveCache($url, $ret, null, true, $cacheId);
-            }
-            return $ret;
-        }
-        if (is_array($file)) {
-            $headers = $file[2];
-            $lastmodified = $file[1];
-            $content = $file[0];
-        } else {
-            $content = $file;
-            $lastmodified = false;
-            $headers = array();
-        }
-        if ($forcestring) {
-            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
-            return $content;
-        }
-        if (isset($headers['content-type'])) {
-            switch ($headers['content-type']) {
-                case 'text/xml' :
-                case 'application/xml' :
-                    $parser = new PEAR_XMLParser;
-                    PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-                    $err = $parser->parse($content);
-                    PEAR::popErrorHandling();
-                    if (PEAR::isError($err)) {
-                        return PEAR::raiseError('Invalid xml downloaded from "' . $url . '": ' .
-                            $err->getMessage());
-                    }
-                    $content = $parser->getData();
-                case 'text/html' :
-                default :
-                    // use it as a string
-            }
-        } else {
-            // assume XML
-            $parser = new PEAR_XMLParser;
-            $parser->parse($content);
-            $content = $parser->getData();
-        }
-        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
-        return $content;
-    }
-
-    function useLocalCache($url, $cacheid = null)
-    {
-        if ($cacheid === null) {
-            $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-                md5($url) . 'rest.cacheid';
-            if (file_exists($cacheidfile)) {
-                $cacheid = unserialize(implode('', file($cacheidfile)));
-            } else {
-                return false;
-            }
-        }
-        $cachettl = $this->config->get('cache_ttl');
-        // If cache is newer than $cachettl seconds, we use the cache!
-        if (time() - $cacheid['age'] < $cachettl) {
-            return $this->getCache($url);
-        }
-        return false;
-    }
-
-    function getCacheId($url)
-    {
-        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cacheid';
-        if (file_exists($cacheidfile)) {
-            $ret = unserialize(implode('', file($cacheidfile)));
-            return $ret;
-        } else {
-            return false;
-        }
-    }
-
-    function getCache($url)
-    {
-        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cachefile';
-        if (file_exists($cachefile)) {
-            return unserialize(implode('', file($cachefile)));
-        } else {
-            return PEAR::raiseError('No cached content available for "' . $url . '"');
-        }
-    }
-
-    /**
-     * @param string full URL to REST resource
-     * @param string original contents of the REST resource
-     * @param array  HTTP Last-Modified and ETag headers
-     * @param bool   if true, then the cache id file should be regenerated to
-     *               trigger a new time-to-live value
-     */
-    function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
-    {
-        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cacheid';
-        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cachefile';
-        if ($cacheid === null && $nochange) {
-            $cacheid = unserialize(implode('', file($cacheidfile)));
-        }
-
-        $fp = @fopen($cacheidfile, 'wb');
-        if (!$fp) {
-            $cache_dir = $this->config->get('cache_dir');
-            if (!is_dir($cache_dir)) {
-                System::mkdir(array('-p', $cache_dir));
-                $fp = @fopen($cacheidfile, 'wb');
-                if (!$fp) {
-                    return false;
-                }
-            } else {
-                return false;
-            }
-        }
-
-        if ($nochange) {
-            fwrite($fp, serialize(array(
-                'age'        => time(),
-                'lastChange' => $cacheid['lastChange'],
-                )));
-            fclose($fp);
-            return true;
-        } else {
-            fwrite($fp, serialize(array(
-                'age'        => time(),
-                'lastChange' => $lastmodified,
-                )));
-        }
-        fclose($fp);
-        $fp = @fopen($cachefile, 'wb');
-        if (!$fp) {
-            if (file_exists($cacheidfile)) {
-                @unlink($cacheidfile);
-            }
-            return false;
-        }
-        fwrite($fp, serialize($contents));
-        fclose($fp);
-        return true;
-    }
-
-    /**
-     * Efficiently Download a file through HTTP.  Returns downloaded file as a string in-memory
-     * This is best used for small files
-     *
-     * If an HTTP proxy has been configured (http_proxy PEAR_Config
-     * setting), the proxy will be used.
-     *
-     * @param string  $url       the URL to download
-     * @param string  $save_dir  directory to save file in
-     * @param false|string|array $lastmodified header values to check against for caching
-     *                           use false to return the header values from this download
-     * @param false|array $accept Accept headers to send
-     * @return string|array  Returns the contents of the downloaded file or a PEAR
-     *                       error on failure.  If the error is caused by
-     *                       socket-related errors, the error object will
-     *                       have the fsockopen error code available through
-     *                       getCode().  If caching is requested, then return the header
-     *                       values.
-     *
-     * @access public
-     */
-    function downloadHttp($url, $lastmodified = null, $accept = false, $channel = false)
-    {
-        $info = parse_url($url);
-        if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
-            return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
-        }
-        if (!isset($info['host'])) {
-            return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
-        } else {
-            $host = $info['host'];
-            if (!array_key_exists('port', $info)) {
-                $info['port'] = null;
-            }
-            if (!array_key_exists('path', $info)) {
-                $info['path'] = null;
-            }
-            $port = $info['port'];
-            $path = $info['path'];
-        }
-        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-        if ($this->config->get('http_proxy')&&
-              $proxy = parse_url($this->config->get('http_proxy'))) {
-            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
-            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
-                $proxy_host = 'ssl://' . $proxy_host;
-            }
-            $proxy_port = isset($proxy['port']) ? $proxy['port'] : 8080;
-            $proxy_user = isset($proxy['user']) ? urldecode($proxy['user']) : null;
-            $proxy_pass = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
-        }
-        if (empty($port)) {
-            if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $port = 443;
-            } else {
-                $port = 80;
-            }
-        }
-        If (isset($proxy['host'])) {
-            $request = "GET $url HTTP/1.1\r\n";
-        } else {
-            $request = "GET $path HTTP/1.1\r\n";
-        }
-        $request .= "Host: $host:$port\r\n";
-
-        $ifmodifiedsince = '';
-        if (is_array($lastmodified)) {
-            if (isset($lastmodified['Last-Modified'])) {
-                $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
-            }
-            if (isset($lastmodified['ETag'])) {
-                $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
-            }
-        } else {
-            $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
-        }
-        $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.7.2/PHP/" . PHP_VERSION . "\r\n";
-        $username = $this->config->get('username', null, $channel);
-        $password = $this->config->get('password', null, $channel);
-        if ($username && $password) {
-            $tmp = base64_encode("$username:$password");
-            $request .= "Authorization: Basic $tmp\r\n";
-        }
-        if ($proxy_host != '' && $proxy_user != '') {
-            $request .= 'Proxy-Authorization: Basic ' .
-                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
-        }
-        if ($accept) {
-            $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
-        }
-        $request .= "Accept-Encoding:\r\n";
-        $request .= "Connection: close\r\n";
-        $request .= "\r\n";
-        if ($proxy_host != '') {
-            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr, 15);
-            if (!$fp) {
-                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr",
-                    -9276);
-            }
-        } else {
-            if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $host = 'ssl://' . $host;
-            }
-            $fp = @fsockopen($host, $port, $errno, $errstr);
-            if (!$fp) {
-                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
-            }
-        }
-        fwrite($fp, $request);
-        $headers = array();
-        while (trim($line = fgets($fp, 1024))) {
-            if (preg_match('/^([^:]+):\s+(.*)\s*\\z/', $line, $matches)) {
-                $headers[strtolower($matches[1])] = trim($matches[2]);
-            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
-                if ($matches[1] == 304 && ($lastmodified || ($lastmodified === false))) {
-                    return false;
-                }
-                if ($matches[1] != 200) {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)", (int) $matches[1]);
-                }
-            }
-        }
-        if (isset($headers['content-length'])) {
-            $length = $headers['content-length'];
-        } else {
-            $length = -1;
-        }
-        $data = '';
-        while ($chunk = @fread($fp, 8192)) {
-            $data .= $chunk;
-        }
-        fclose($fp);
-        if ($lastmodified === false || $lastmodified) {
-            if (isset($headers['etag'])) {
-                $lastmodified = array('ETag' => $headers['etag']);
-            }
-            if (isset($headers['last-modified'])) {
-                if (is_array($lastmodified)) {
-                    $lastmodified['Last-Modified'] = $headers['last-modified'];
-                } else {
-                    $lastmodified = $headers['last-modified'];
-                }
-            }
-            return array($data, $lastmodified, $headers);
-        }
-        return $data;
-    }
-}
-?>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                    PEAR-1.7.2/PEAR/RunTest.php                                                                         100644    1750    1750       103774 11014312742  10405                                                                                                                                                                                                                                                                                                                                                                      <?php
+        return $data;
+    }
+}                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.8.0/PEAR/RunTest.php                                                                         100664     764     764       104653      100664  10222                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_RunTest
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: RunTest.php,v 1.67 2008/05/14 02:30:16 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: RunTest.php,v 1.74 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.3
  */
@@ -49948,9 +48907,9 @@ putenv("PHP_PEAR_RUNTESTS=1");
  * @package    PEAR
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.3
  */
@@ -50140,6 +49099,19 @@ class PEAR_RunTest
         return $settings;
     }
 
+    function _preparePhpBin($php, $file, $ini_settings)
+    {
+        $file = escapeshellarg($file);
+        // This was fixed in php 5.3 and is not needed after that
+        if (OS_WINDOWS && version_compare(PHP_VERSION, '5.3', '<')) {
+            $cmd = '"'.escapeshellarg($php).' '.$ini_settings.' -f ' . $file .'"';
+        } else {
+            $cmd = $php . $ini_settings . ' -f ' . $file;
+        }
+
+        return $cmd;
+    }
+
     function runPHPUnit($file, $ini_settings = '')
     {
         if (!file_exists($file) && file_exists(getcwd() . DIRECTORY_SEPARATOR . $file)) {
@@ -50148,7 +49120,8 @@ class PEAR_RunTest
         } elseif (file_exists($file)) {
             $file = realpath($file);
         }
-        $cmd = "$this->_php$ini_settings -f $file";
+
+        $cmd = $this->_preparePhpBin($this->_php, $file. $ini_settings);
         if (isset($this->_logger)) {
             $this->_logger->log(2, 'Running command "' . $cmd . '"');
         }
@@ -50268,28 +49241,31 @@ class PEAR_RunTest
 
         // We've satisfied the preconditions - run the test!
         if (isset($this->_options['coverage']) && $this->xdebug_loaded) {
+            $xdebug_file = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'xdebug';
+            $text = '<?php';
+            $text .= "\n" . 'function coverage_shutdown() {' .
+                     "\n" . '    $xdebug = var_export(xdebug_get_code_coverage(), true);';
+            if (!function_exists('file_put_contents')) {
+                $text .= "\n" . '    $fh = fopen(\'' . $xdebug_file . '\', "wb");' .
+                        "\n" . '    if ($fh !== false) {' .
+                        "\n" . '        fwrite($fh, $xdebug);' .
+                        "\n" . '        fclose($fh);' .
+                        "\n" . '    }';
+            } else {
+                $text .= "\n" . '    file_put_contents(\'' . $xdebug_file . '\', $xdebug);';
+            }
+
+            $text .= "\n" . 'xdebug_stop_code_coverage();' .
+                "\n" . '} // end coverage_shutdown()' .
+                "\n" . 'register_shutdown_function("coverage_shutdown");';
+            $text .= "\n" . 'xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);' . "\n?>";
+
             $len_f = 5;
             if (substr($section_text['FILE'], 0, 5) != '<?php'
                 && substr($section_text['FILE'], 0, 2) == '<?') {
                 $len_f = 2;
             }
-
-            $text = '<?php' . "\n" . 'xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);' . "\n";
-            $new  = substr($section_text['FILE'], $len_f, strlen($section_text['FILE']));
-            $text .= substr($new, 0, strrpos($new, '?>'));
-            $xdebug_file = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'xdebug';
-            $text .= "\n" .
-                   "\n" . '$xdebug = var_export(xdebug_get_code_coverage(), true);';
-            if (!function_exists('file_put_contents')) {
-                $text .= "\n" . '$fh = fopen(\'' . $xdebug_file . '\', "wb");' .
-                        "\n" . 'if ($fh !== false) {' .
-                        "\n" . '    fwrite($fh, $xdebug);' .
-                        "\n" . '    fclose($fh);' .
-                        "\n" . '}';
-            } else {
-                $text .= "\n" . 'file_put_contents(\'' . $xdebug_file . '\', $xdebug);';
-            }
-            $text .= "\n" . 'xdebug_stop_code_coverage();' . "\n" . '?>';
+            $text .= $section_text['FILE'];
 
             $this->save_text($temp_file, $text);
         } else {
@@ -50297,7 +49273,8 @@ class PEAR_RunTest
         }
 
         $args = $section_text['ARGS'] ? ' -- '.$section_text['ARGS'] : '';
-        $cmd = "$this->_php$ini_settings -f \"$temp_file\" $args 2>&1";
+        $cmd = $this->_preparePhpBin($this->_php, $temp_file, $ini_settings);
+        $cmd.= "$args 2>&1";
         if (isset($this->_logger)) {
             $this->_logger->log(2, 'Running command "' . $cmd . '"');
         }
@@ -50414,6 +49391,7 @@ class PEAR_RunTest
                     $wanted_re = str_replace("%c", ".", $wanted_re);
                     // %f allows two points "-.0.0" but that is the best *simple* expression
                 }
+
     /* DEBUG YOUR REGEX HERE
             var_dump($wanted_re);
             print(str_repeat('=', 80) . "\n");
@@ -50744,6 +49722,9 @@ $text
         $env['CONTENT_TYPE']    = '';
         $env['CONTENT_LENGTH']  = '';
         if (!empty($section_text['ENV'])) {
+            if (strpos($section_text['ENV'], '{PWD}') !== false) {
+                $section_text['ENV'] = str_replace('{PWD}', dirname($temp_file), $section_text['ENV']);
+            }
             foreach (explode("\n", trim($section_text['ENV'])) as $e) {
                 $e = explode('=', trim($e), 2);
                 if (!empty($e[0]) && isset($e[1])) {
@@ -50830,24 +49811,18 @@ $text
             }
         }
     }
-}    PEAR-1.7.2/PEAR/Validate.php                                                                        100644    1750    1750        53476 11014312742  10515                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                     PEAR-1.8.0/PEAR/Validate.php                                                                        100664     764     764        53060      100664  10322                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_Validate
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Validate.php,v 1.52 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Validate.php,v 1.54 2009/02/24 23:38:23 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -50868,9 +49843,9 @@ require_once 'PEAR/Validator/PECL.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -51290,7 +50265,6 @@ class PEAR_Validate
                 return false;
             }
 
-
             if ($this->_state == PEAR_VALIDATE_PACKAGING &&
                   $this->_packagexml->getDate() != date('Y-m-d')) {
                 $this->_addWarning('date', 'Release Date "' .
@@ -51309,8 +50283,8 @@ class PEAR_Validate
             // default of no time value set
             return true;
         }
-        // packager automatically sets time, so only validate if
-        // pear validate is called
+
+        // packager automatically sets time, so only validate if pear validate is called
         if ($this->_state = PEAR_VALIDATE_NORMAL) {
             if (!preg_match('/\d\d:\d\d:\d\d/',
                   $this->_packagexml->getTime())) {
@@ -51318,12 +50292,15 @@ class PEAR_Validate
                     $this->_packagexml->getTime() . '"');
                 return false;
             }
-            if (strtotime($this->_packagexml->getTime()) == -1) {
+
+            $result = preg_match('|\d{2}\:\d{2}\:\d{2}|', $this->_packagexml->getTime(), $matches);
+            if ($result === false || empty($matches)) {
                 $this->_addFailure('time', 'invalid release time "' .
                     $this->_packagexml->getTime() . '"');
                 return false;
             }
         }
+
         return true;
     }
 
@@ -51462,42 +50439,34 @@ class PEAR_Validate
     {
         return true;
     }
-}
-?>
-                                                                                                                                                                                                  PEAR-1.7.2/PEAR/XMLParser.php                                                                       100644    1750    1750        17070 11014312742  10567                                                                                                                                                                                                                                                                                                                                                                      <?php
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                PEAR-1.8.0/PEAR/XMLParser.php                                                                       100664     764     764        16252      100664  10410                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR_XMLParser
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stephan Schmidt (original XML_Unserializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: XMLParser.php,v 1.13 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version    CVS: $Id: XMLParser.php,v 1.22 2009/03/08 00:45:39 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
 
 /**
  * Parser for any xml file
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @author     Stephan Schmidt (original XML_Unserializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
+ * @category  pear
+ * @package   PEAR
+ * @author    Greg Beaver <cellog at php.net>
+ * @author    Stephan Schmidt (original XML_Unserializer code)
+ * @copyright 1997-2009 The Authors
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version   Release: 1.8.0
+ * @link      http://pear.php.net/package/PEAR
+ * @since     Class available since Release 1.4.0a1
  */
 class PEAR_XMLParser
 {
@@ -51532,6 +50501,12 @@ class PEAR_XMLParser
     var $_depth = 0;
 
     /**
+     * The XML encoding to use
+     * @var string $encoding
+     */
+    var $encoding = 'ISO-8859-1';
+
+    /**
      * @return array
      */
     function getData()
@@ -51553,18 +50528,20 @@ class PEAR_XMLParser
         $this->_dataStack = array();
         $this->_depth = 0;
 
-        if (version_compare(phpversion(), '5.0.0', 'lt')) {
-            if (strpos($data, 'encoding="UTF-8"')) {
-                $data = utf8_decode($data);
-            }
-            $xp = xml_parser_create('ISO-8859-1');
-        } else {
-            if (strpos($data, 'encoding="UTF-8"')) {
-                $xp = xml_parser_create('UTF-8');
-            } else {
-                $xp = xml_parser_create('ISO-8859-1');
-            }
+        if (
+            strpos($data, 'encoding="UTF-8"')
+            || strpos($data, 'encoding="utf-8"')
+            || strpos($data, "encoding='UTF-8'")
+            || strpos($data, "encoding='utf-8'")
+        ) {
+            $this->encoding = 'UTF-8';
         }
+
+        if (version_compare(phpversion(), '5.0.0', 'lt') && $this->encoding == 'UTF-8') {
+            $data = utf8_decode($data);
+        }
+
+        $xp = xml_parser_create($this->encoding);
         xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, 0);
         xml_set_object($xp, $this);
         xml_set_element_handler($xp, 'startHandler', 'endHandler');
@@ -51642,9 +50619,7 @@ class PEAR_XMLParser
         // adjust type of the value
         switch(strtolower($value['type'])) {
 
-            /*
-             * unserialize an array
-             */
+            // unserialize an array
             case 'array':
                 if ($data !== '') {
                     $value['children']['_content'] = $data;
@@ -51671,42 +50646,43 @@ class PEAR_XMLParser
                 $value['value'] = $data;
                 break;
         }
+
         $parent = array_pop($this->_valStack);
         if ($parent === null) {
             $this->_unserializedData = &$value['value'];
             $this->_root = &$value['name'];
             return true;
-        } else {
-            // parent has to be an array
-            if (!isset($parent['children']) || !is_array($parent['children'])) {
-                $parent['children'] = array();
-                if ($parent['type'] != 'array') {
-                    $parent['type'] = 'array';
-                }
+        }
+
+        // parent has to be an array
+        if (!isset($parent['children']) || !is_array($parent['children'])) {
+            $parent['children'] = array();
+            if ($parent['type'] != 'array') {
+                $parent['type'] = 'array';
             }
+        }
 
-            if (!empty($value['name'])) {
-                // there already has been a tag with this name
-                if (in_array($value['name'], $parent['childrenKeys'])) {
-                    // no aggregate has been created for this tag
-                    if (!in_array($value['name'], $parent['aggregKeys'])) {
-                        if (isset($parent['children'][$value['name']])) {
-                            $parent['children'][$value['name']] = array($parent['children'][$value['name']]);
-                        } else {
-                            $parent['children'][$value['name']] = array();
-                        }
-                        array_push($parent['aggregKeys'], $value['name']);
+        if (!empty($value['name'])) {
+            // there already has been a tag with this name
+            if (in_array($value['name'], $parent['childrenKeys'])) {
+                // no aggregate has been created for this tag
+                if (!in_array($value['name'], $parent['aggregKeys'])) {
+                    if (isset($parent['children'][$value['name']])) {
+                        $parent['children'][$value['name']] = array($parent['children'][$value['name']]);
+                    } else {
+                        $parent['children'][$value['name']] = array();
                     }
-                    array_push($parent['children'][$value['name']], $value['value']);
-                } else {
-                    $parent['children'][$value['name']] = &$value['value'];
-                    array_push($parent['childrenKeys'], $value['name']);
+                    array_push($parent['aggregKeys'], $value['name']);
                 }
+                array_push($parent['children'][$value['name']], $value['value']);
             } else {
-                array_push($parent['children'],$value['value']);
+                $parent['children'][$value['name']] = &$value['value'];
+                array_push($parent['childrenKeys'], $value['name']);
             }
-            array_push($this->_valStack, $parent);
+        } else {
+            array_push($parent['children'],$value['value']);
         }
+        array_push($this->_valStack, $parent);
 
         $this->_depth--;
     }
@@ -51723,8 +50699,7 @@ class PEAR_XMLParser
     {
         $this->_dataStack[$this->_depth] .= $cdata;
     }
-}
-?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PEAR-1.7.2/scripts/pear.bat                                                                         100755    1750    1750        11102 11014312742  10611                                                                                                                                                                                                                                                                                                                                                                      @ECHO OFF
+}                                                                                                                                                                                                                                                                                                                                                      PEAR-1.8.0/scripts/pear.bat                                                                         100777     764     764        11102      100777  10440                                                                                                                                                                                                                                                                                                                                                                      @ECHO OFF
 
 REM ----------------------------------------------------------------------
 REM PHP version 5
@@ -51838,7 +50813,7 @@ GOTO END
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -d output_buffering=1 -d safe_mode=0 -d open_basedir="" -d auto_prepend_file="" -d auto_append_file="" -d variables_order=EGPCS -d register_argc_argv="On" -d include_path="%PHP_PEAR_INSTALL_DIR%" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
- at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.7.2/scripts/peardev.bat                                                                      100644    1750    1750        11112 11014312742  11306                                                                                                                                                                                                                                                                                                                                                                      @ECHO OFF
+ at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.8.0/scripts/peardev.bat                                                                      100777     764     764        11112      100777  11140                                                                                                                                                                                                                                                                                                                                                                      @ECHO OFF
 
 REM ----------------------------------------------------------------------
 REM PHP version 5
@@ -51952,7 +50927,7 @@ GOTO END
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -d memory_limit="-1" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" -d variables_order=EGPCS -d open_basedir="" -d output_buffering=1 -d include_path="%PHP_PEAR_INSTALL_DIR%" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
- at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.7.2/scripts/pecl.bat                                                                         100644    1750    1750        11003 11014312742  10602                                                                                                                                                                                                                                                                                                                                                                      @ECHO OFF
+ at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                      PEAR-1.8.0/scripts/pecl.bat                                                                         100777     764     764        11003      100777  10434                                                                                                                                                                                                                                                                                                                                                                      @ECHO OFF
 
 REM ----------------------------------------------------------------------
 REM PHP version 5
@@ -52066,7 +51041,7 @@ GOTO END
 :RUN
 "%PHP_PEAR_PHP_BIN%" -C -n -d output_buffering=1 -d safe_mode=0 -d include_path="%PHP_PEAR_INSTALL_DIR%" -d register_argc_argv="On" -d variables_order=EGPCS -f "%PHP_PEAR_INSTALL_DIR%\peclcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
 :END
- at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.7.2/scripts/pear.sh                                                                          100644    1750    1750         1362 11014312742  10441                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
+ at ECHO ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PEAR-1.8.0/scripts/pear.sh                                                                          100777     764     764         1362      100777  10273                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
 
 # first find which PHP binary to use
 if test "x$PHP_PEAR_PHP_BIN" != "x"; then
@@ -52094,7 +51069,7 @@ else
 fi
 
 exec $PHP -C -q $INCARG -d output_buffering=1 -d variables_order=EGPCS -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" $INCDIR/pearcmd.php "$@"
-                                                                                                                                                                                                                                                                              PEAR-1.7.2/scripts/peardev.sh                                                                       100644    1750    1750         1407 11014312742  11140                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
+                                                                                                                                                                                                                                                                              PEAR-1.8.0/scripts/peardev.sh                                                                       100777     764     764         1407      100777  10772                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
 
 # first find which PHP binary to use
 if test "x$PHP_PEAR_PHP_BIN" != "x"; then
@@ -52122,7 +51097,7 @@ else
 fi
 
 exec $PHP -d memory_limit="-1" -C -q $INCARG -d output_buffering=1 -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d variables_order=EGPCS -d auto_append_file="" $INCDIR/pearcmd.php "$@"
-                                                                                                                                                                                                                                                         PEAR-1.7.2/scripts/pecl.sh                                                                          100644    1750    1750         1263 11014312742  10435                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
+                                                                                                                                                                                                                                                         PEAR-1.8.0/scripts/pecl.sh                                                                          100777     764     764         1263      100777  10267                                                                                                                                                                                                                                                                                                                                                                      #!/bin/sh
 
 # first find which PHP binary to use
 if test "x$PHP_PEAR_PHP_BIN" != "x"; then
@@ -52150,27 +51125,23 @@ else
 fi
 
 exec $PHP -C -n -q $INCARG -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"
-                                                                                                                                                                                                                                                                                                                                             PEAR-1.7.2/scripts/pearcmd.php                                                                      100644    1750    1750        36342 11014312742  11330                                                                                                                                                                                                                                                                                                                                                                      <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license at php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb at php.net>                                   |
-// |          Tomas V.V.Cox <cox at idecnet.com>                             |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: pearcmd.php,v 1.39 2008/03/25 04:58:42 cellog Exp $
+                                                                                                                                                                                                                                                                                                                                             PEAR-1.8.0/scripts/pearcmd.php                                                                      100664     764     764        34617      100664  11153                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR, the PHP Extension and Application Repository
+ *
+ * Command line interface
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V.V.Cox <cox at idecnet.com>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: pearcmd.php,v 1.41 2009/03/04 20:05:56 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ */
 
 ob_end_clean();
 if (!defined('PEAR_RUNTYPE')) {
@@ -52451,7 +51422,7 @@ if ($fetype == 'Gtk' || $fetype == 'Gtk2') {
         if (strlen($opt) == 1) {
             $cmdoptions = $cmd->getOptions($command);
             foreach ($cmdoptions as $o => $d) {
-                if (@$d['shortopt'] == $opt) {
+                if (isset($d['shortopt']) && $d['shortopt'] == $opt) {
                     $opts[$o] = $value;
                 }
             }
@@ -52597,30 +51568,23 @@ function error_handler($errno, $errmsg, $file, $line, $vars) {
  * mode: php
  * End:
  */
-// vim600:syn=php
-
-?>
-                                                                                                                                                                                                                                                                                              PEAR-1.7.2/scripts/peclcmd.php                                                                      100644    1750    1750         3406 11014312742  11277                                                                                                                                                                                                                                                                                                                                                                      <?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 3.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available through the world-wide-web at the following url:           |
-// | http://www.php.net/license/3_0.txt.                                  |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license at php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb at php.net>                                   |
-// |          Tomas V.V.Cox <cox at idecnet.com>                             |
-// |                                                                      |
-// +----------------------------------------------------------------------+
-//
-// $Id: peclcmd.php,v 1.1 2005/02/21 05:30:56 cellog Exp $
+// vim600:syn=php                                                                                                                 PEAR-1.8.0/scripts/peclcmd.php                                                                      100664     764     764         1640      100664  11115                                                                                                                                                                                                                                                                                                                                                                      <?php
+/**
+ * PEAR, the PHP Extension and Application Repository
+ *
+ * Command line interface
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V.V.Cox <cox at idecnet.com>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: peclcmd.php,v 1.2 2009/02/25 00:06:23 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ */
 
 /**
  * @nodep Gtk
@@ -52645,7 +51609,34 @@ require_once 'pearcmd.php';
 // vim600:syn=php
 
 ?>
-                                                                                                                                                                                                                                                          PEAR-1.7.2/INSTALL                                                                                  100644    1750    1750         3643 11014312742   6524                                                                                                                                                                                                                                                                                                                                                                      PEAR - The PEAR Installer
+                                                                                                PEAR-1.8.0/LICENSE                                                                                  100664     764     764         2705      100664   6316                                                                                                                                                                                                                                                                                                                                                                      Copyright (c) 1997-2009,
+ Stig Bakken <ssb at php.net>,
+ Gregory Beaver <cellog at php.net>,
+ Helgi Þormar Þorbjörnsson <helgi at php.net>,
+ Tomas V.V.Cox <cox at idecnet.com>,
+ Martin Jansen <mj at php.net>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+                                                           PEAR-1.8.0/INSTALL                                                                                  100777     764     764         3643      100777   6356                                                                                                                                                                                                                                                                                                                                                                      PEAR - The PEAR Installer
 =========================
 Installing the PEAR Installer.
 
@@ -52697,7 +51688,7 @@ related issues.
 
 Happy PHPing, we hope PEAR will be a great tool for your development work!
 
-$Id: INSTALL,v 1.1 2006/09/22 03:31:36 cellog Exp $                                                                                             PEAR-1.7.2/package.dtd                                                                              100644    1750    1750         6477 11014312742   7573                                                                                                                                                                                                                                                                                                                                                                      <!--
+$Id: INSTALL,v 1.1 2006/09/22 03:31:36 cellog Exp $                                                                                             PEAR-1.8.0/package.dtd                                                                              100777     764     764         6477      100777   7425                                                                                                                                                                                                                                                                                                                                                                      <!--
      $Id: package.dtd,v 1.38 2005/11/12 02:23:07 cellog Exp $
 
      This is the PEAR package description, version 1.0.
@@ -52800,7 +51791,7 @@ $Id: INSTALL,v 1.1 2006/09/22 03:31:36 cellog Exp $                             
                               to CDATA #REQUIRED>
 
 
-                                                                                                                                                                                                 PEAR-1.7.2/PEAR.php                                                                                 100644    1750    1750       103775 11014312742   7002                                                                                                                                                                                                                                                                                                                                                                      <?php
+                                                                                                                                                                                                 PEAR-1.8.0/PEAR.php                                                                                 100664     764     764       105707      100664   6617                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * PEAR, the PHP Extension and Application Repository
  *
@@ -52808,21 +51799,15 @@ $Id: INSTALL,v 1.1 2006/09/22 03:31:36 cellog Exp $                             
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Sterling Hughes <sterling at php.net>
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: PEAR.php,v 1.104 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: PEAR.php,v 1.111 2009/04/08 23:32:04 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -52854,15 +51839,6 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
     define('PEAR_OS',    'Unix'); // blatant assumption
 }
 
-// instant backwards compatibility
-if (!defined('PATH_SEPARATOR')) {
-    if (OS_WINDOWS) {
-        define('PATH_SEPARATOR', ';');
-    } else {
-        define('PATH_SEPARATOR', ':');
-    }
-}
-
 $GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
 $GLOBALS['_PEAR_default_error_options']  = E_USER_NOTICE;
 $GLOBALS['_PEAR_destructor_object_list'] = array();
@@ -52894,8 +51870,8 @@ $GLOBALS['_PEAR_error_handler_stack']    = array();
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @see        PEAR_Error
  * @since      Class available since PHP 4.0.2
@@ -53035,9 +52011,11 @@ class PEAR
         if (!isset($properties[$class])) {
             $properties[$class] = array();
         }
+
         if (!array_key_exists($var, $properties[$class])) {
             $properties[$class][$var] = null;
         }
+
         return $properties[$class][$var];
     }
 
@@ -53080,16 +52058,17 @@ class PEAR
      */
     function isError($data, $code = null)
     {
-        if (is_a($data, 'PEAR_Error')) {
-            if (is_null($code)) {
-                return true;
-            } elseif (is_string($code)) {
-                return $data->getMessage() == $code;
-            } else {
-                return $data->getCode() == $code;
-            }
+        if (!is_a($data, 'PEAR_Error')) {
+            return false;
         }
-        return false;
+
+        if (is_null($code)) {
+            return true;
+        } elseif (is_string($code)) {
+            return $data->getMessage() == $code;
+        }
+
+        return $data->getCode() == $code;
     }
 
     // }}}
@@ -53257,7 +52236,6 @@ class PEAR
     function delExpect($error_code)
     {
         $deleted = false;
-
         if ((is_array($error_code) && (0 != count($error_code)))) {
             // $error_code is a non-empty array here;
             // we walk through it trying to unset all
@@ -53277,10 +52255,10 @@ class PEAR
             } else {
                 return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
             }
-        } else {
-            // $error_code is empty
-            return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
         }
+
+        // $error_code is empty
+        return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
     }
 
     // }}}
@@ -53347,6 +52325,7 @@ class PEAR
                 $mode = PEAR_ERROR_RETURN;
             }
         }
+
         // No mode given, try global ones
         if ($mode === null) {
             // Class error handler
@@ -53367,16 +52346,19 @@ class PEAR
         } else {
             $ec = 'PEAR_Error';
         }
+
         if (intval(PHP_VERSION) < 5) {
             // little non-eval hack to fix bug #12147
             include 'PEAR/FixPHP5PEARWarnings.php';
             return $a;
         }
+
         if ($skipmsg) {
             $a = new $ec($code, $mode, $options, $userinfo);
         } else {
             $a = new $ec($message, $code, $mode, $options, $userinfo);
         }
+
         return $a;
     }
 
@@ -53397,10 +52379,10 @@ class PEAR
         if (isset($this) && is_a($this, 'PEAR')) {
             $a = &$this->raiseError($message, $code, null, null, $userinfo);
             return $a;
-        } else {
-            $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
-            return $a;
         }
+
+        $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
+        return $a;
     }
 
     // }}}
@@ -53551,6 +52533,7 @@ class PEAR
             if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
                 return false;
             }
+
             if (OS_WINDOWS) {
                 $suffix = '.dll';
             } elseif (PHP_OS == 'HP-UX') {
@@ -53562,14 +52545,51 @@ class PEAR
             } else {
                 $suffix = '.so';
             }
+
             return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
         }
+
         return true;
     }
 
     // }}}
 }
 
+if (PEAR_ZE2) {
+    /**
+     * This is only meant for PHP 5 to get rid of certain strict warning
+     * that doesn't get hidden since it's in the shutdown function
+     */
+    class PEAR5
+    {
+        /**
+        * If you have a class that's mostly/entirely static, and you need static
+        * properties, you can use this method to simulate them. Eg. in your method(s)
+        * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar');
+        * You MUST use a reference, or they will not persist!
+        *
+        * @access public
+        * @param  string $class  The calling classname, to prevent clashes
+        * @param  string $var    The variable to retrieve.
+        * @return mixed   A reference to the variable. If not set it will be
+        *                 auto initialised to NULL.
+        */
+        static function &getStaticProperty($class, $var)
+        {
+            static $properties;
+            if (!isset($properties[$class])) {
+                $properties[$class] = array();
+            }
+
+            if (!array_key_exists($var, $properties[$class])) {
+                $properties[$class][$var] = null;
+            }
+
+            return $properties[$class][$var];
+        }
+    }
+}
+
 // {{{ _PEAR_call_destructors()
 
 function _PEAR_call_destructors()
@@ -53579,9 +52599,16 @@ function _PEAR_call_destructors()
         sizeof($_PEAR_destructor_object_list))
     {
         reset($_PEAR_destructor_object_list);
-        if (PEAR::getStaticProperty('PEAR', 'destructlifo')) {
+        if (PEAR_ZE2) {
+            $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo');
+        } else {
+            $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
+        }
+
+        if ($destructLifoExists) {
             $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
         }
+
         while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
             $classname = get_class($objref);
             while ($classname) {
@@ -53619,8 +52646,8 @@ function _PEAR_call_destructors()
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
  * @see        PEAR::raiseError(), PEAR::throwError()
  * @since      Class available since PHP 4.0.2
@@ -53670,7 +52697,14 @@ class PEAR_Error
         $this->code      = $code;
         $this->mode      = $mode;
         $this->userinfo  = $userinfo;
-        if (!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
+
+        if (PEAR_ZE2) {
+            $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace');
+        } else {
+            $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
+        }
+
+        if (!$skiptrace) {
             $this->backtrace = debug_backtrace();
             if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
                 unset($this->backtrace[0]['object']);
@@ -53916,9 +52950,7 @@ class PEAR_Error
  * tab-width: 4
  * c-basic-offset: 4
  * End:
- */
-?>
-   PEAR-1.7.2/README                                                                                   100644    1750    1750         2251 11014312742   6345                                                                                                                                                                                                                                                                                                                                                                      PEAR - The PEAR Installer
+ */                                                         PEAR-1.8.0/README                                                                                   100777     764     764         2251      100777   6177                                                                                                                                                                                                                                                                                                                                                                      PEAR - The PEAR Installer
 =========================
 
 What is the PEAR Installer?  What is PEAR?
@@ -53949,24 +52981,18 @@ prior to use.
 
 Happy PHPing, we hope PEAR will be a great tool for your development work!
 
-$Id: README,v 1.11 2006/09/22 03:31:36 cellog Exp $                                                                                                                                                                                                                                                                                                                                                       PEAR-1.7.2/System.php                                                                               100644    1750    1750        46735 11014312742   7521                                                                                                                                                                                                                                                                                                                                                                      <?php
+$Id: README,v 1.11 2006/09/22 03:31:36 cellog Exp $                                                                                                                                                                                                                                                                                                                                                       PEAR-1.8.0/System.php                                                                               100664     764     764        47002      100664   7325                                                                                                                                                                                                                                                                                                                                                                      <?php
 /**
  * File/Directory manipulation
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    System
  * @author     Tomas V.V.Cox <cox at idecnet.com>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: System.php,v 1.62 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: System.php,v 1.66 2009/02/24 23:52:56 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -54007,24 +53033,24 @@ $GLOBALS['_System_temp_files'] = array();
 * @package    System
 * @author     Tomas V.V. Cox <cox at idecnet.com>
 * @copyright  1997-2006 The PHP Group
-* @license    http://www.php.net/license/3_0.txt  PHP License 3.0
-* @version    Release: 1.7.2
+* @license    http://opensource.org/licenses/bsd-license.php New BSD License
+* @version    Release: 1.8.0
 * @link       http://pear.php.net/package/PEAR
 * @since      Class available since Release 0.1
-* @static 
+* @static
 */
 class System
 {
     /**
-    * returns the commandline arguments of a function
-    *
-    * @param    string  $argv           the commandline
-    * @param    string  $short_options  the allowed option short-tags
-    * @param    string  $long_options   the allowed option long-tags
-    * @return   array   the given options and there values
-    * @static 
-    * @access private
-    */
+     * returns the commandline arguments of a function
+     *
+     * @param    string  $argv           the commandline
+     * @param    string  $short_options  the allowed option short-tags
+     * @param    string  $long_options   the allowed option long-tags
+     * @return   array   the given options and there values
+     * @static
+     * @access private
+     */
     function _parseArgs($argv, $short_options, $long_options = null)
     {
         if (!is_array($argv) && $argv !== null) {
@@ -54034,14 +53060,14 @@ class System
     }
 
     /**
-    * Output errors with PHP trigger_error(). You can silence the errors
-    * with prefixing a "@" sign to the function call: @System::mkdir(..);
-    *
-    * @param mixed $error a PEAR error or a string with the error message
-    * @return bool false
-    * @static 
-    * @access private
-    */
+     * Output errors with PHP trigger_error(). You can silence the errors
+     * with prefixing a "@" sign to the function call: @System::mkdir(..);
+     *
+     * @param mixed $error a PEAR error or a string with the error message
+     * @return bool false
+     * @static
+     * @access private
+     */
     function raiseError($error)
     {
         if (PEAR::isError($error)) {
@@ -54052,31 +53078,30 @@ class System
     }
 
     /**
-    * Creates a nested array representing the structure of a directory
-    *
-    * System::_dirToStruct('dir1', 0) =>
-    *   Array
-    *    (
-    *    [dirs] => Array
-    *        (
-    *            [0] => dir1
-    *        )
-    *
-    *    [files] => Array
-    *        (
-    *            [0] => dir1/file2
-    *            [1] => dir1/file3
-    *        )
-    *    )
-    * @param    string  $sPath      Name of the directory
-    * @param    integer $maxinst    max. deep of the lookup
-    * @param    integer $aktinst    starting deep of the lookup
-    * @param    bool    $silent     if true, do not emit errors.
-    * @return   array   the structure of the dir
-    * @static 
-    * @access   private
-    */
-
+     * Creates a nested array representing the structure of a directory
+     *
+     * System::_dirToStruct('dir1', 0) =>
+     *   Array
+     *    (
+     *    [dirs] => Array
+     *        (
+     *            [0] => dir1
+     *        )
+     *
+     *    [files] => Array
+     *        (
+     *            [0] => dir1/file2
+     *            [1] => dir1/file3
+     *        )
+     *    )
+     * @param    string  $sPath      Name of the directory
+     * @param    integer $maxinst    max. deep of the lookup
+     * @param    integer $aktinst    starting deep of the lookup
+     * @param    bool    $silent     if true, do not emit errors.
+     * @return   array   the structure of the dir
+     * @static
+     * @access   private
+     */
     function _dirToStruct($sPath, $maxinst, $aktinst = 0, $silent = false)
     {
         $struct = array('dirs' => array(), 'files' => array());
@@ -54086,6 +53111,7 @@ class System
             }
             return $struct; // XXX could not open error
         }
+
         $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ?
         $list = array();
         while (false !== ($file = readdir($dir))) {
@@ -54093,54 +53119,58 @@ class System
                 $list[] = $file;
             }
         }
+
         closedir($dir);
-        sort($list);
+        natsort($list);
         if ($aktinst < $maxinst || $maxinst == 0) {
             foreach ($list as $val) {
                 $path = $sPath . DIRECTORY_SEPARATOR . $val;
                 if (is_dir($path) && !is_link($path)) {
-                    $tmp = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent);
-                    $struct = array_merge_recursive($tmp, $struct);
+                    $tmp    = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent);
+                    $struct = array_merge_recursive($struct, $tmp);
                 } else {
                     $struct['files'][] = $path;
                 }
             }
         }
+
         return $struct;
     }
 
     /**
-    * Creates a nested array representing the structure of a directory and files
-    *
-    * @param    array $files Array listing files and dirs
-    * @return   array
-    * @static 
-    * @see System::_dirToStruct()
-    */
+     * Creates a nested array representing the structure of a directory and files
+     *
+     * @param    array $files Array listing files and dirs
+     * @return   array
+     * @static
+     * @see System::_dirToStruct()
+     */
     function _multipleToStruct($files)
     {
         $struct = array('dirs' => array(), 'files' => array());
         settype($files, 'array');
         foreach ($files as $file) {
             if (is_dir($file) && !is_link($file)) {
-                $tmp = System::_dirToStruct($file, 0);
+                $tmp    = System::_dirToStruct($file, 0);
                 $struct = array_merge_recursive($tmp, $struct);
             } else {
-                $struct['files'][] = $file;
+                if (!in_array($file, $struct['files'])) {
+                    $struct['files'][] = $file;
+                }
             }
         }
         return $struct;
     }
 
     /**
-    * The rm command for removing files.
-    * Supports multiple files and dirs and also recursive deletes
-    *
-    * @param    string  $args   the arguments for rm
-    * @return   mixed   PEAR_Error or true for success
-    * @static 
-    * @access   public
-    */
+     * The rm command for removing files.
+     * Supports multiple files and dirs and also recursive deletes
+     *
+     * @param    string  $args   the arguments for rm
+     * @return   mixed   PEAR_Error or true for success
+     * @static
+     * @access   public
+     */
     function rm($args)
     {
         $opts = System::_parseArgs($args, 'rf'); // "f" does nothing but I like it :-)
@@ -54160,6 +53190,8 @@ class System
                     $ret = false;
                 }
             }
+
+            rsort($struct['dirs']);
             foreach ($struct['dirs'] as $dir) {
                 if (!@rmdir($dir)) {
                     $ret = false;
@@ -54177,20 +53209,21 @@ class System
     }
 
     /**
-    * Make directories.
-    *
-    * The -p option will create parent directories
-    * @param    string  $args    the name of the director(y|ies) to create
-    * @return   bool    True for success
-    * @static 
-    * @access   public
-    */
+     * Make directories.
+     *
+     * The -p option will create parent directories
+     * @param    string  $args    the name of the director(y|ies) to create
+     * @return   bool    True for success
+     * @static
+     * @access   public
+     */
     function mkDir($args)
     {
         $opts = System::_parseArgs($args, 'pm:');
         if (PEAR::isError($opts)) {
             return System::raiseError($opts);
         }
+
         $mode = 0777; // default mode
         foreach ($opts[0] as $opt) {
             if ($opt[0] == 'p') {
@@ -54207,6 +53240,7 @@ class System
                 $mode = $opt[1];
             }
         }
+
         $ret = true;
         if (isset($create_parents)) {
             foreach ($opts[1] as $dir) {
@@ -54216,11 +53250,13 @@ class System
                     array_unshift($dirstack, $dir);
                     $dir = dirname($dir);
                 }
+
                 while ($newdir = array_shift($dirstack)) {
                     if (!is_writeable(dirname($newdir))) {
                         $ret = false;
                         break;
                     }
+
                     if (!mkdir($newdir, $mode)) {
                         $ret = false;
                     }
@@ -54233,24 +53269,25 @@ class System
                 }
             }
         }
+
         return $ret;
     }
 
     /**
-    * Concatenate files
-    *
-    * Usage:
-    * 1) $var = System::cat('sample.txt test.txt');
-    * 2) System::cat('sample.txt test.txt > final.txt');
-    * 3) System::cat('sample.txt test.txt >> final.txt');
-    *
-    * Note: as the class use fopen, urls should work also (test that)
-    *
-    * @param    string  $args   the arguments
-    * @return   boolean true on success
-    * @static 
-    * @access   public
-    */
+     * Concatenate files
+     *
+     * Usage:
+     * 1) $var = System::cat('sample.txt test.txt');
+     * 2) System::cat('sample.txt test.txt > final.txt');
+     * 3) System::cat('sample.txt test.txt >> final.txt');
+     *
+     * Note: as the class use fopen, urls should work also (test that)
+     *
+     * @param    string  $args   the arguments
+     * @return   boolean true on success
+     * @static
+     * @access   public
+     */
     function &cat($args)
     {
         $ret = null;
@@ -54302,29 +53339,29 @@ class System
     }
 
     /**
-    * Creates temporary files or directories. This function will remove
-    * the created files when the scripts finish its execution.
-    *
-    * Usage:
-    *   1) $tempfile = System::mktemp("prefix");
-    *   2) $tempdir  = System::mktemp("-d prefix");
-    *   3) $tempfile = System::mktemp();
-    *   4) $tempfile = System::mktemp("-t /var/tmp prefix");
-    *
-    * prefix -> The string that will be prepended to the temp name
-    *           (defaults to "tmp").
-    * -d     -> A temporary dir will be created instead of a file.
-    * -t     -> The target dir where the temporary (file|dir) will be created. If
-    *           this param is missing by default the env vars TMP on Windows or
-    *           TMPDIR in Unix will be used. If these vars are also missing
-    *           c:\windows\temp or /tmp will be used.
-    *
-    * @param   string  $args  The arguments
-    * @return  mixed   the full path of the created (file|dir) or false
-    * @see System::tmpdir()
-    * @static 
-    * @access  public
-    */
+     * Creates temporary files or directories. This function will remove
+     * the created files when the scripts finish its execution.
+     *
+     * Usage:
+     *   1) $tempfile = System::mktemp("prefix");
+     *   2) $tempdir  = System::mktemp("-d prefix");
+     *   3) $tempfile = System::mktemp();
+     *   4) $tempfile = System::mktemp("-t /var/tmp prefix");
+     *
+     * prefix -> The string that will be prepended to the temp name
+     *           (defaults to "tmp").
+     * -d     -> A temporary dir will be created instead of a file.
+     * -t     -> The target dir where the temporary (file|dir) will be created. If
+     *           this param is missing by default the env vars TMP on Windows or
+     *           TMPDIR in Unix will be used. If these vars are also missing
+     *           c:\windows\temp or /tmp will be used.
+     *
+     * @param   string  $args  The arguments
+     * @return  mixed   the full path of the created (file|dir) or false
+     * @see System::tmpdir()
+     * @static
+     * @access  public
+     */
     function mktemp($args = null)
     {
         static $first_time = true;
@@ -54332,6 +53369,7 @@ class System
         if (PEAR::isError($opts)) {
             return System::raiseError($opts);
         }
+
         foreach ($opts[0] as $opt) {
             if ($opt[0] == 'd') {
                 $tmp_is_dir = true;
@@ -54339,13 +53377,16 @@ class System
                 $tmpdir = $opt[1];
             }
         }
+
         $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp';
         if (!isset($tmpdir)) {
             $tmpdir = System::tmpdir();
         }
+
         if (!System::mkDir(array('-p', $tmpdir))) {
             return false;
         }
+
         $tmp = tempnam($tmpdir, $prefix);
         if (isset($tmp_is_dir)) {
             unlink($tmp); // be careful possible race condition here
@@ -54353,21 +53394,27 @@ class System
                 return System::raiseError("Unable to create temporary directory $tmpdir");
             }
         }
+
         $GLOBALS['_System_temp_files'][] = $tmp;
+        if (isset($tmp_is_dir)) {
+            //$GLOBALS['_System_temp_files'][] = dirname($tmp);
+        }
+
         if ($first_time) {
             PEAR::registerShutdownFunc(array('System', '_removeTmpFiles'));
             $first_time = false;
         }
+
         return $tmp;
     }
 
     /**
-    * Remove temporary files created my mkTemp. This function is executed
-    * at script shutdown time
-    *
-    * @static 
-    * @access private
-    */
+     * Remove temporary files created my mkTemp. This function is executed
+     * at script shutdown time
+     *
+     * @static
+     * @access private
+     */
     function _removeTmpFiles()
     {
         if (count($GLOBALS['_System_temp_files'])) {
@@ -54379,14 +53426,14 @@ class System
     }
 
     /**
-    * Get the path of the temporal directory set in the system
-    * by looking in its environments variables.
-    * Note: php.ini-recommended removes the "E" from the variables_order setting,
-    * making unavaible the $_ENV array, that s why we do tests with _ENV
-    *
-    * @static 
-    * @return string The temporary directory on the system
-    */
+     * Get the path of the temporal directory set in the system
+     * by looking in its environments variables.
+     * Note: php.ini-recommended removes the "E" from the variables_order setting,
+     * making unavaible the $_ENV array, that s why we do tests with _ENV
+     *
+     * @static
+     * @return string The temporary directory on the system
+     */
     function tmpdir()
     {
         if (OS_WINDOWS) {
@@ -54411,15 +53458,15 @@ class System
     }
 
     /**
-    * The "which" command (show the full path of a command)
-    *
-    * @param string $program The command to search for
-    * @param mixed  $fallback Value to return if $program is not found
-    *
-    * @return mixed A string with the full path or false if not found
-    * @static 
-    * @author Stig Bakken <ssb at php.net>
-    */
+     * The "which" command (show the full path of a command)
+     *
+     * @param string $program The command to search for
+     * @param mixed  $fallback Value to return if $program is not found
+     *
+     * @return mixed A string with the full path or false if not found
+     * @static
+     * @author Stig Bakken <ssb at php.net>
+     */
     function which($program, $fallback = false)
     {
         // enforce API
@@ -54469,29 +53516,29 @@ class System
     }
 
     /**
-    * The "find" command
-    *
-    * Usage:
-    *
-    * System::find($dir);
-    * System::find("$dir -type d");
-    * System::find("$dir -type f");
-    * System::find("$dir -name *.php");
-    * System::find("$dir -name *.php -name *.htm*");
-    * System::find("$dir -maxdepth 1");
-    *
-    * Params implmented:
-    * $dir            -> Start the search at this directory
-    * -type d         -> return only directories
-    * -type f         -> return only files
-    * -maxdepth <n>   -> max depth of recursion
-    * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
-    *
-    * @param  mixed Either array or string with the command line
-    * @return array Array of found files
-    * @static 
-    *
-    */
+     * The "find" command
+     *
+     * Usage:
+     *
+     * System::find($dir);
+     * System::find("$dir -type d");
+     * System::find("$dir -type f");
+     * System::find("$dir -name *.php");
+     * System::find("$dir -name *.php -name *.htm*");
+     * System::find("$dir -maxdepth 1");
+     *
+     * Params implmented:
+     * $dir            -> Start the search at this directory
+     * -type d         -> return only directories
+     * -type f         -> return only files
+     * -maxdepth <n>   -> max depth of recursion
+     * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
+     *
+     * @param  mixed Either array or string with the command line
+     * @return array Array of found files
+     * @static
+     *
+     */
     function find($args)
     {
         if (!is_array($args)) {
@@ -54554,7 +53601,7 @@ class System
         }
         return $files;
     }
-}                                   PEAR-1.7.2/template.spec                                                                            100644    1750    1750         3725 11014312742  10163                                                                                                                                                                                                                                                                                                                                                                      Summary: PEAR: @summary@
+}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              PEAR-1.8.0/template.spec                                                                            100777     764     764         3725      100777  10015                                                                                                                                                                                                                                                                                                                                                                      Summary: PEAR: @summary@
 Name: @rpm_package@
 Version: @version@
 Release: 1
@@ -54626,7 +53673,568 @@ cp -p package at package2xml@.xml %{buildroot}@rpm_xml_dir@/@package at .xml
     %defattr(-,root,root)
     %doc @doc_files@
     /
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           <?php
+                                           package.xml                                                                                         100664     764     764        70773      100664   6267                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+<package version="1.0" packagerversion="1.8.0">
+ <name>PEAR</name>
+ <summary>PEAR Base System</summary>
+ <description>The PEAR package contains:
+ * the PEAR installer, for creating, distributing
+   and installing packages
+ * the PEAR_Exception PHP5 error handling mechanism
+ * the PEAR_ErrorStack advanced error handling mechanism
+ * the PEAR_Error error handling mechanism
+ * the OS_Guess class for retrieving info about the OS
+   where PHP is running on
+ * the System class for quick handling of common operations
+   with files and directories
+ * the PEAR base class
+
+  Features in a nutshell:
+  * full support for channels
+  * pre-download dependency validation
+  * new package.xml 2.0 format allows tremendous flexibility while maintaining BC
+  * support for optional dependency groups and limited support for sub-packaging
+  * robust dependency support
+  * full dependency validation on uninstall
+  * remote install for hosts with only ftp access - no more problems with
+    restricted host installation
+  * full support for mirroring
+  * support for bundling several packages into a single tarball
+  * support for static dependencies on a url-based package
+  * support for custom file roles and installation tasks
+ </description>
+ <maintainers>
+  <maintainer>
+   <user>cellog</user>
+   <name>Greg Beaver</name>
+   <email>cellog at php.net</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>pajoye</user>
+   <name>Pierre-Alain Joye</name>
+   <email>pierre at php.net</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>ssb</user>
+   <name>Stig Bakken</name>
+   <email>stig at php.net</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>cox</user>
+   <name>Tomas V.V.Cox</name>
+   <email>cox at idecnet.com</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>dufuz</user>
+   <name>Helgi Thormar</name>
+   <email>dufuz at php.net</email>
+   <role>lead</role>
+  </maintainer>
+  <maintainer>
+   <user>tias</user>
+   <name>Tias Guns</name>
+   <email>tias at php.net</email>
+   <role>developer</role>
+  </maintainer>
+  <maintainer>
+   <user>timj</user>
+   <name>Tim Jackson</name>
+   <email>timj at php.net</email>
+   <role>helper</role>
+  </maintainer>
+  <maintainer>
+   <user>toggg</user>
+   <name>Bertrand Gugger</name>
+   <email>toggg at php.net</email>
+   <role>helper</role>
+  </maintainer>
+  <maintainer>
+   <user>mj</user>
+   <name>Martin Jansen</name>
+   <email>mj at php.net</email>
+   <role>helper</role>
+  </maintainer>
+  </maintainers>
+ <release>
+  <version>1.8.0</version>
+  <date>2009-04-10</date>
+  <license>New BSD License</license>
+  <state>stable</state>
+  <notes>* Fix Bug #14792: Bad md5sum for files with replaced content [dufuz]
+* Fix Bug #16057:-r is limited to 4 directories in depth [dufuz]
+* Fix Bug #16077: PEAR5::getStaticProperty does not return a reference to the property [dufuz]
+Remove custom XML_Util class in favor of using upstream XML_Util package as dependency
+  </notes>
+  <deps>
+   <dep type="php" rel="ge" version="4.4.0"/>
+   <dep type="pkg" rel="ge" version="1.3.3">PEAR</dep>
+   <dep type="pkg" rel="ge" version="1.3.1">Archive_Tar</dep>
+   <dep type="pkg" rel="ge" version="1.2">Console_Getopt</dep>
+   <dep type="pkg" rel="ge" version="1.0.2">Structures_Graph</dep>
+   <dep type="pkg" rel="ge" version="0.5.0" optional="yes">PEAR_Frontend_Web</dep>
+   <dep type="pkg" rel="ge" version="0.4.0" optional="yes">PEAR_Frontend_Gtk</dep>
+   <dep type="ext" rel="has">xml</dep>
+   <dep type="ext" rel="has">pcre</dep>
+  </deps>
+  <provides type="class" name="OS_Guess" />
+  <provides type="class" name="System" />
+  <filelist>
+   <file role="php" name="OS/Guess.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/ChannelFile/Parser.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Auth.xml"/>
+   <file role="php" name="PEAR/Command/Auth.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Build.xml"/>
+   <file role="php" name="PEAR/Command/Build.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Channels.xml"/>
+   <file role="php" name="PEAR/Command/Channels.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Common.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Config.xml"/>
+   <file role="php" name="PEAR/Command/Config.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Install.xml"/>
+   <file role="php" name="PEAR/Command/Install.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Package.xml"/>
+   <file role="php" name="PEAR/Command/Package.php">
+    <replace from="@DATA-DIR@" to="data_dir" type="pear-config"/>
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Pickle.xml"/>
+   <file role="php" name="PEAR/Command/Pickle.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Registry.xml"/>
+   <file role="php" name="PEAR/Command/Registry.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Remote.xml"/>
+   <file role="php" name="PEAR/Command/Remote.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Mirror.xml"/>
+   <file role="php" name="PEAR/Command/Mirror.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command/Test.xml"/>
+   <file role="php" name="PEAR/Command/Test.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Downloader/Package.php">
+    <replace from="@PEAR-VER@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Frontend/CLI.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Common.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Cfg.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Cfg.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Data.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Data.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Doc.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Doc.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Ext.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Ext.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Php.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Php.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Script.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Script.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Src.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Src.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Test.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Test.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role/Www.xml"/>
+   <file role="php" name="PEAR/Installer/Role/Www.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer/Role.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/Generator/v1.php">
+    <replace from="@PEAR-VER@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/Generator/v2.php">
+    <replace from="@PEAR-VER@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/Parser/v1.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/Parser/v2.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/v2/rw.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/v2/Validator.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/v1.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile/v2.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/REST/10.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/REST/11.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/REST/13.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Postinstallscript/rw.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Replace/rw.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Unixeol/rw.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Windowseol/rw.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Common.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Postinstallscript.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Replace.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Unixeol.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Task/Windowseol.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Validator/PECL.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Autoloader.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Builder.php">
+    <replace from="@PEAR-VER@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/ChannelFile.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Command.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Common.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Config.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/DependencyDB.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Dependency2.php">
+    <replace from="@PEAR-VER@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Downloader.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/ErrorStack.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Exception.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/FixPHP5PEARWarnings.php"/>
+   <file role="php" name="PEAR/Frontend.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Installer.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Packager.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/PackageFile.php">
+    <replace from="@PEAR-VER@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Registry.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/REST.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/RunTest.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/Validate.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="php" name="PEAR/XMLParser.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="script" baseinstalldir="/" platform="!windows" install-as="pear" name="scripts/pear.sh">
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+    <replace from="@pear_version@" to="version" type="package-info"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="script" baseinstalldir="/" platform="!windows" install-as="peardev" name="scripts/peardev.sh">
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+    <replace from="@pear_version@" to="version" type="package-info"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="script" baseinstalldir="/" platform="!windows" install-as="pecl" name="scripts/pecl.sh">
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+    <replace from="@pear_version@" to="version" type="package-info"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="script" baseinstalldir="/" platform="windows" install-as="peardev.bat" name="scripts/peardev.bat">
+    <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="script" baseinstalldir="/" platform="windows" install-as="pear.bat" name="scripts/pear.bat">
+    <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="script" baseinstalldir="/" platform="windows" install-as="pecl.bat" name="scripts/pecl.bat">
+    <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="php" baseinstalldir="/" install-as="pearcmd.php" name="scripts/pearcmd.php">
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+    <replace from="@pear_version@" to="version" type="package-info"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="php" baseinstalldir="/" install-as="peclcmd.php" name="scripts/peclcmd.php">
+    <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+    <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+    <replace from="@pear_version@" to="version" type="package-info"/>
+    <replace from="@include_path@" to="php_dir" type="pear-config"/>
+   </file>
+   <file role="doc" baseinstalldir="/" name="LICENSE"/>
+   <file role="doc" baseinstalldir="/" name="INSTALL"/>
+   <file role="data" baseinstalldir="/" name="package.dtd"/>
+   <file role="data" baseinstalldir="/" name="template.spec"/>
+   <file role="php" baseinstalldir="/" name="PEAR.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+   <file role="doc" baseinstalldir="/" name="README"/>
+   <file role="php" baseinstalldir="/" name="System.php">
+    <replace from="@package_version@" to="version" type="package-info"/>
+   </file>
+  </filelist>
+ </release>
+ <changelog>
+   <release>
+    <version>1.8.0alpha1</version>
+    <date>2009-03-09</date>
+    <license>New BSD License</license>
+    <state>alpha</state>
+    <notes>* Implement Request #10373: if pref_state=stable and installed package=beta, allow up to latest beta version [dufuz]
+* Implement Request #10581: login / logout should map to channel-login / channel-logout [dufuz]
+* Implement Request #10825: Only display the &quot;invalid or missing package file&quot;-error if it makes sense [dufuz]
+* Implement Request #11170: script to generate Command/[command].xml [dufuz]
+* Implement Request #11176: improve channel ... has updated its protocols message [dufuz]
+* Implement Request #12706: pear list -a hard to read [dufuz]
+* Implement Request #11353: upgrade-all and upgrade commands to upgrade within the same stability level [dufuz]
+* Implement Request #13015: Add https discovery for channel.xml [dufuz / initial patch by Martin Roos]
+* Implement Request #13927: install-pear.php should have option to set www_dir [timj]
+* Implement Request #14324: Make the pear install command behave similar to apt-get [dufuz]
+* Implement Request #14325: make pear upgrade with no params behave like pear upgrade-all [dufuz]
+  - upgrade-all can be considered deprecated in favor of calling upgrade with no parameters to replicate
+    better what other package managers are doing. upgrade-all will still work as intended.
+* Implement Request #14504: add a channel parameter support to the upgrade function [dufuz]
+  - Options -c ezc and --channel=ezc got added to upgrade and upgrade-all to allow for
+    channel specific upgrades
+* Implement Request #14556: install-pear-nozlib.phar should get download_dir config and other options [cweiske]
+* Implement Request #15566: Add doc.php.net as a default channel [dufuz / saltybeagle]
+* Fix PHP Bug #43857: --program-suffix not always reflected everywhere [cellog]
+* Fix PHP Bug #47323: strotime warnings in make install [dufuz]
+* Fix Bug #13908: pear info command and maintainers inactive not mentioned [dufuz]
+* Fix Bug #13926: install-pear.php does not set cfg_dir if -d option set with no -c option [timj]
+* Fix Bug #13943: tests fail when php.exe path contains spaces [dufuz / jorrit]
+* Fix Bug #13953: config-set/config-show with channel alias fail [cellog]
+* Fix Bug #13958: When a phpt tests exit() or die() xdebug coverage is not generated, patch by izi (David Jean Louis) [izi / dufuz]
+* Fix Bug #14041: Unpredictable unit test processing sequence [dufuz]
+* Fix Bug #14140: Strict warning not suppressed in the shutdown function [dufuz]
+* Fix Bug #14210: pear list -ia brings warnings [dufuz]
+* Fix Bug #14274: PEAR packager mangles package.xml encoding, then complains about it [dufuz]
+* Fix Bug #14287: cannot upgrade from stable to beta via -beta when config is set to stable [dufuz]
+* Fix Bug #14300: Package files themselves can not be served over https [dufuz / initial patch by Martin Roos]
+* Fix Bug #14437: openbasedir warning when loading config [dufuz]
+* Fix Bug #14558: PackageFile.php creates tmp directory outside configured temp_dir [cweiske]
+* Fix Bug #14947: downloadHttp() is missing Host part of the HTTP Request when using Proxy [ifeghali]
+* Fix Bug #14977: PEAR/Frontend.php doesn&apos;t require_once PEAR.php [dufuz]
+* Fix Bug #15750: Unreachable code in PEAR_Downloader [dufuz]
+* Fix Bug #15979: Package files incorrectly removed when splitting a package into multiple pkgs [dufuz]
+* Fix Bug #15914: pear upgrade installs different version if desired version not found [dufuz]
+NOTE!
+Functions that have been deprecated for 3+ years in PEAR_Common, please take a moment
+to migrate over to one of the alternatives that have ben provided:
+* PEAR_Common-&gt;downloadHttp (use PEAR_Downloader-&gt;downloadHttp instead)
+* PEAR_Common-&gt;infoFromTgzFile (use PEAR_PackageFile-&gt;fromTgzFile instead)
+* PEAR_Common-&gt;infoFromDescriptionFile (use PEAR_PackageFile-&gt;fromPackageFile instead)
+* PEAR_Common-&gt;infoFromString (use PEAR_PackageFile-&gt;fromXmlstring instead)
+* PEAR_Common-&gt;infoFromArray (use PEAR_PackageFile-&gt;fromAnyFile instead)
+* PEAR_Common-&gt;xmlFromInfo (use a PEAR_PackageFile_v* object&apos;s generator instead)
+* PEAR_Common-&gt;validatePackageInfo (use the validation of PEAR_PackageFile objects)
+* PEAR_Common-&gt;analyzeSourceCode (use a PEAR_PackageFile_v* object instead)
+* PEAR_Common-&gt;detectDependencies (use PEAR_Downloader_Package-&gt;detectDependencies instead)
+* PEAR_Common-&gt;buildProvidesArray (use PEAR_PackageFile_v1-&gt;_buildProvidesArray or
+  PEAR_PackageFile_v2_Validator-&gt;_buildProvidesArray)
+PHP 4.4 and 5.1.6 are now the minimum PHP requirements, for brave souls
+pear upgrade -f PEAR will allow people with lower versions
+to upgrade to this release but no guarantees will be made that it will work properly.
+Support for XML RPC channels has been dropped - The only ones that used it
+(pear.php.net and pecl.php.net) have used the REST interface for years now.
+SOAP support also removed as it was only proof of concept.
+Move codebase from the PHP License to New BSD 2 clause license
+    </notes>
+   </release>
+   <release>
+    <version>1.8.0RC1</version>
+    <date>2009-03-27</date>
+    <license>New BSD License</license>
+    <state>beta</state>
+    <notes>* Fix Bug #14331: pear cvstag only works from inside the package directory [dufuz]
+* Fix Bug #16045: E_Notice: Undefined index: channel in PEAR/DependencyDB.php [dufuz]
+* Implemented Request #11230: better error message when mirror not in channel.xml file [dufuz]
+* Implemented Request #13150: Add support for following HTTP 302 redirects [dufuz]
+    </notes>
+   </release>
+   <release>
+   </release>
+   <release>
+    <license>New BSD License</license>
+    <notes>Changes since RC1:
+  * Fix Bug #14792: Bad md5sum for files with replaced content [dufuz]
+  * Fix Bug #16057:-r is limited to 4 directories in depth [dufuz]
+  * Fix Bug #16077: PEAR5::getStaticProperty does not return a reference to the property [dufuz]
+
+  Remove custom XML_Util class in favor of using upstream XML_Util package as dependency
+
+RC1 Release Notes:
+  * Fix Bug #14331: pear cvstag only works from inside the package directory [dufuz]
+  * Fix Bug #16045: E_Notice: Undefined index: channel in PEAR/DependencyDB.php [dufuz]
+
+  * Implemented Request #11230: better error message when mirror not in channel.xml file [dufuz]
+  * Implemented Request #13150: Add support for following HTTP 302 redirects [dufuz]
+
+Alpha1 Release Notes:
+  * Implement Request #10373: if pref_state=stable and installed package=beta, allow up to latest beta version [dufuz]
+  * Implement Request #10581: login / logout should map to channel-login / channel-logout [dufuz]
+  * Implement Request #10825: Only display the &quot;invalid or missing package file&quot;-error if it makes sense [dufuz]
+  * Implement Request #11170: script to generate Command/[command].xml [dufuz]
+  * Implement Request #11176: improve channel ... has updated its protocols message [dufuz]
+  * Implement Request #12706: pear list -a hard to read [dufuz]
+  * Implement Request #11353: upgrade-all and upgrade commands to upgrade within the same stability level [dufuz]
+  * Implement Request #13015: Add https discovery for channel.xml [dufuz / initial patch by Martin Roos]
+  * Implement Request #13927: install-pear.php should have option to set www_dir [timj]
+  * Implement Request #14324: Make the pear install command behave similar to apt-get [dufuz]
+  * Implement Request #14325: make pear upgrade with no params behave like pear upgrade-all [dufuz]
+    - upgrade-all can be considered deprecated in favor of calling upgrade with no parameters to replicate
+      better what other package managers are doing. upgrade-all will still work as intended.
+  * Implement Request #14504: add a channel parameter support to the upgrade function [dufuz]
+    - Options -c ezc and --channel=ezc got added to upgrade and upgrade-all to allow for
+      channel specific upgrades
+  * Implement Request #14556: install-pear-nozlib.phar should get download_dir config and other options [cweiske]
+  * Implement Request #15566: Add doc.php.net as a default channel [dufuz / saltybeagle]
+
+  * Fix PHP Bug #43857: --program-suffix not always reflected everywhere [cellog]
+  * Fix PHP Bug #47323: strotime warnings in make install [dufuz]
+
+  * Fix Bug #13908: pear info command and maintainers inactive not mentioned [dufuz]
+  * Fix Bug #13926: install-pear.php does not set cfg_dir if -d option set with no -c option [timj]
+  * Fix Bug #13943: tests fail when php.exe path contains spaces [dufuz / jorrit]
+  * Fix Bug #13953: config-set/config-show with channel alias fail [cellog]
+  * Fix Bug #13958: When a phpt tests exit() or die() xdebug coverage is not generated, patch by izi (David Jean Louis) [izi / dufuz]
+  * Fix Bug #14041: Unpredictable unit test processing sequence [dufuz]
+  * Fix Bug #14140: Strict warning not suppressed in the shutdown function [dufuz]
+  * Fix Bug #14210: pear list -ia brings warnings [dufuz]
+  * Fix Bug #14274: PEAR packager mangles package.xml encoding, then complains about it [dufuz]
+  * Fix Bug #14287: cannot upgrade from stable to beta via -beta when config is set to stable [dufuz]
+  * Fix Bug #14300: Package files themselves can not be served over https [dufuz / initial patch by Martin Roos]
+  * Fix Bug #14437: openbasedir warning when loading config [dufuz]
+  * Fix Bug #14558: PackageFile.php creates tmp directory outside configured temp_dir [cweiske]
+  * Fix Bug #14947: downloadHttp() is missing Host part of the HTTP Request when using Proxy [ifeghali]
+  * Fix Bug #14977: PEAR/Frontend.php doesn&apos;t require_once PEAR.php [dufuz]
+  * Fix Bug #15750: Unreachable code in PEAR_Downloader [dufuz]
+  * Fix Bug #15979: Package files incorrectly removed when splitting a package into multiple pkgs [dufuz]
+  * Fix Bug #15914: pear upgrade installs different version if desired version not found [dufuz]
+
+  NOTE!
+  Functions that have been deprecated for 3+ years in PEAR_Common, please take a moment
+  to migrate over to one of the alternatives that have ben provided:
+  * PEAR_Common-&gt;downloadHttp (use PEAR_Downloader-&gt;downloadHttp instead)
+  * PEAR_Common-&gt;infoFromTgzFile (use PEAR_PackageFile-&gt;fromTgzFile instead)
+  * PEAR_Common-&gt;infoFromDescriptionFile (use PEAR_PackageFile-&gt;fromPackageFile instead)
+  * PEAR_Common-&gt;infoFromString (use PEAR_PackageFile-&gt;fromXmlstring instead)
+  * PEAR_Common-&gt;infoFromArray (use PEAR_PackageFile-&gt;fromAnyFile instead)
+  * PEAR_Common-&gt;xmlFromInfo (use a PEAR_PackageFile_v* object&apos;s generator instead)
+  * PEAR_Common-&gt;validatePackageInfo (use the validation of PEAR_PackageFile objects)
+  * PEAR_Common-&gt;analyzeSourceCode (use a PEAR_PackageFile_v* object instead)
+  * PEAR_Common-&gt;detectDependencies (use PEAR_Downloader_Package-&gt;detectDependencies instead)
+  * PEAR_Common-&gt;buildProvidesArray (use PEAR_PackageFile_v1-&gt;_buildProvidesArray or
+    PEAR_PackageFile_v2_Validator-&gt;_buildProvidesArray)
+
+  PHP 4.4 and 5.1.6 are now the minimum PHP requirements, for brave souls
+  pear upgrade -f PEAR will allow people with lower versions
+  to upgrade to this release but no guarantees will be made that it will work properly.
+
+  Support for XML RPC channels has been dropped - The only ones that used it
+  (pear.php.net and pecl.php.net) have used the REST interface for years now.
+  SOAP support also removed as it was only proof of concept.
+
+  Move codebase from the PHP License to New BSD 2 clause license
+    </notes>
+   </release>
+ </changelog>
+</package>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     <?php
 /**
  * PEAR, the PHP Extension and Application Repository
  *
@@ -54634,21 +54242,15 @@ cp -p package at package2xml@.xml %{buildroot}@rpm_xml_dir@/@package at .xml
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Sterling Hughes <sterling at php.net>
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V.V.Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: PEAR.php,v 1.104 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: PEAR.php,v 1.111 2009/04/08 23:32:04 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -54680,15 +54282,6 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
     define('PEAR_OS',    'Unix'); // blatant assumption
 }
 
-// instant backwards compatibility
-if (!defined('PATH_SEPARATOR')) {
-    if (OS_WINDOWS) {
-        define('PATH_SEPARATOR', ';');
-    } else {
-        define('PATH_SEPARATOR', ':');
-    }
-}
-
 $GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
 $GLOBALS['_PEAR_default_error_options']  = E_USER_NOTICE;
 $GLOBALS['_PEAR_destructor_object_list'] = array();
@@ -54720,8 +54313,8 @@ $GLOBALS['_PEAR_error_handler_stack']    = array();
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @see        PEAR_Error
  * @since      Class available since PHP 4.0.2
@@ -54861,9 +54454,11 @@ class PEAR
         if (!isset($properties[$class])) {
             $properties[$class] = array();
         }
+
         if (!array_key_exists($var, $properties[$class])) {
             $properties[$class][$var] = null;
         }
+
         return $properties[$class][$var];
     }
 
@@ -54906,16 +54501,17 @@ class PEAR
      */
     function isError($data, $code = null)
     {
-        if (is_a($data, 'PEAR_Error')) {
-            if (is_null($code)) {
-                return true;
-            } elseif (is_string($code)) {
-                return $data->getMessage() == $code;
-            } else {
-                return $data->getCode() == $code;
-            }
+        if (!is_a($data, 'PEAR_Error')) {
+            return false;
         }
-        return false;
+
+        if (is_null($code)) {
+            return true;
+        } elseif (is_string($code)) {
+            return $data->getMessage() == $code;
+        }
+
+        return $data->getCode() == $code;
     }
 
     // }}}
@@ -55083,7 +54679,6 @@ class PEAR
     function delExpect($error_code)
     {
         $deleted = false;
-
         if ((is_array($error_code) && (0 != count($error_code)))) {
             // $error_code is a non-empty array here;
             // we walk through it trying to unset all
@@ -55103,10 +54698,10 @@ class PEAR
             } else {
                 return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
             }
-        } else {
-            // $error_code is empty
-            return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
         }
+
+        // $error_code is empty
+        return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
     }
 
     // }}}
@@ -55173,6 +54768,7 @@ class PEAR
                 $mode = PEAR_ERROR_RETURN;
             }
         }
+
         // No mode given, try global ones
         if ($mode === null) {
             // Class error handler
@@ -55193,16 +54789,19 @@ class PEAR
         } else {
             $ec = 'PEAR_Error';
         }
+
         if (intval(PHP_VERSION) < 5) {
             // little non-eval hack to fix bug #12147
             include 'phar://install-pear-nozlib.phar/' . 'PEAR/FixPHP5PEARWarnings.php';
             return $a;
         }
+
         if ($skipmsg) {
             $a = new $ec($code, $mode, $options, $userinfo);
         } else {
             $a = new $ec($message, $code, $mode, $options, $userinfo);
         }
+
         return $a;
     }
 
@@ -55223,10 +54822,10 @@ class PEAR
         if (isset($this) && is_a($this, 'PEAR')) {
             $a = &$this->raiseError($message, $code, null, null, $userinfo);
             return $a;
-        } else {
-            $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
-            return $a;
         }
+
+        $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
+        return $a;
     }
 
     // }}}
@@ -55377,6 +54976,7 @@ class PEAR
             if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
                 return false;
             }
+
             if (OS_WINDOWS) {
                 $suffix = '.dll';
             } elseif (PHP_OS == 'HP-UX') {
@@ -55388,14 +54988,51 @@ class PEAR
             } else {
                 $suffix = '.so';
             }
+
             return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
         }
+
         return true;
     }
 
     // }}}
 }
 
+if (PEAR_ZE2) {
+    /**
+     * This is only meant for PHP 5 to get rid of certain strict warning
+     * that doesn't get hidden since it's in the shutdown function
+     */
+    class PEAR5
+    {
+        /**
+        * If you have a class that's mostly/entirely static, and you need static
+        * properties, you can use this method to simulate them. Eg. in your method(s)
+        * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar');
+        * You MUST use a reference, or they will not persist!
+        *
+        * @access public
+        * @param  string $class  The calling classname, to prevent clashes
+        * @param  string $var    The variable to retrieve.
+        * @return mixed   A reference to the variable. If not set it will be
+        *                 auto initialised to NULL.
+        */
+        static function &getStaticProperty($class, $var)
+        {
+            static $properties;
+            if (!isset($properties[$class])) {
+                $properties[$class] = array();
+            }
+
+            if (!array_key_exists($var, $properties[$class])) {
+                $properties[$class][$var] = null;
+            }
+
+            return $properties[$class][$var];
+        }
+    }
+}
+
 // {{{ _PEAR_call_destructors()
 
 function _PEAR_call_destructors()
@@ -55405,9 +55042,16 @@ function _PEAR_call_destructors()
         sizeof($_PEAR_destructor_object_list))
     {
         reset($_PEAR_destructor_object_list);
-        if (PEAR::getStaticProperty('PEAR', 'destructlifo')) {
+        if (PEAR_ZE2) {
+            $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo');
+        } else {
+            $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
+        }
+
+        if ($destructLifoExists) {
             $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
         }
+
         while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
             $classname = get_class($objref);
             while ($classname) {
@@ -55445,8 +55089,8 @@ function _PEAR_call_destructors()
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Gregory Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
  * @see        PEAR::raiseError(), PEAR::throwError()
  * @since      Class available since PHP 4.0.2
@@ -55496,7 +55140,14 @@ class PEAR_Error
         $this->code      = $code;
         $this->mode      = $mode;
         $this->userinfo  = $userinfo;
-        if (!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
+
+        if (PEAR_ZE2) {
+            $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace');
+        } else {
+            $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
+        }
+
+        if (!$skiptrace) {
             $this->backtrace = debug_backtrace();
             if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
                 unset($this->backtrace[0]['object']);
@@ -55742,26 +55393,18 @@ class PEAR_Error
  * tab-width: 4
  * c-basic-offset: 4
  * End:
- */
-?>
-<?php
+ */<?php
 /**
  * PEAR_ChannelFile, the channel handling class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: ChannelFile.php,v 1.80 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: ChannelFile.php,v 1.84 2009/03/09 01:03:51 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -55818,11 +55461,11 @@ define('PEAR_CHANNELFILE_ERROR_NO_SUMMARY', 8);
  */
 define('PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY', 9);
 /**
- * Error code when channel server is missing for xmlrpc or soap protocol
+ * Error code when channel server is missing for protocol
  */
 define('PEAR_CHANNELFILE_ERROR_NO_HOST', 10);
 /**
- * Error code when channel server is invalid for xmlrpc or soap protocol
+ * Error code when channel server is invalid for protocol
  */
 define('PEAR_CHANNELFILE_ERROR_INVALID_HOST', 11);
 /**
@@ -55874,11 +55517,11 @@ define('PEAR_CHANNELFILE_ERROR_NO_STATICVERSION', 34);
  * Error code when <baseurl> contains no type attribute in a <rest> protocol definition
  */
 define('PEAR_CHANNELFILE_ERROR_NOBASEURLTYPE', 35);
-/** 
+/**
  * Error code when a mirror is defined and the channel.xml represents the __uri pseudo-channel
  */
 define('PEAR_CHANNELFILE_URI_CANT_MIRROR', 36);
-/** 
+/**
  * Error code when ssl attribute is present and is not "yes"
  */
 define('PEAR_CHANNELFILE_ERROR_INVALID_SSL', 37);
@@ -55896,20 +55539,21 @@ $GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] =  array('server');
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
-class PEAR_ChannelFile {
+class PEAR_ChannelFile
+{
     /**
      * @access private
      * @var PEAR_ErrorStack
      * @access private
      */
     var $_stack;
-    
+
     /**
      * Supported channel.xml versions, for parsing
      * @var array
@@ -55937,7 +55581,7 @@ class PEAR_ChannelFile {
      * @access private
      */
     var $_mirrorIndex;
-    
+
     /**
      * Flag used to determine the validity of parsed content
      * @var boolean
@@ -55951,7 +55595,7 @@ class PEAR_ChannelFile {
         $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
         $this->_isValid = false;
     }
-    
+
     /**
      * @return array
      * @access protected
@@ -56043,7 +55687,7 @@ class PEAR_ChannelFile {
             return false;
         }
     }
-    
+
     /**
      * @return array
      */
@@ -56054,7 +55698,7 @@ class PEAR_ChannelFile {
         }
         return $this->_channelInfo;
     }
-    
+
     /**
      * @param array
      * @static
@@ -56084,7 +55728,7 @@ class PEAR_ChannelFile {
         $a->_fromArray($data);
         return $a;
     }
-    
+
     /**
      * @param array
      * @access private
@@ -56093,7 +55737,7 @@ class PEAR_ChannelFile {
     {
         $this->_channelInfo = $data;
     }
-    
+
     /**
      * Wrapper to {@link PEAR_ErrorStack::getErrors()}
      * @param boolean determines whether to purge the error stack after retrieving
@@ -56230,15 +55874,9 @@ class PEAR_ChannelFile {
             $ret .= ' port="' . $channelInfo['servers']['primary']['attribs']['port'] . '"';
         }
         $ret .= ">\n";
-        if (isset($channelInfo['servers']['primary']['xmlrpc'])) {
-            $ret .= $this->_makeXmlrpcXml($channelInfo['servers']['primary']['xmlrpc'], '   ');
-        }
         if (isset($channelInfo['servers']['primary']['rest'])) {
             $ret .= $this->_makeRestXml($channelInfo['servers']['primary']['rest'], '   ');
         }
-        if (isset($channelInfo['servers']['primary']['soap'])) {
-            $ret .= $this->_makeSoapXml($channelInfo['servers']['primary']['soap'], '   ');
-        }
         $ret .= "  </primary>\n";
         if (isset($channelInfo['servers']['mirror'])) {
             $ret .= $this->_makeMirrorsXml($channelInfo);
@@ -56249,38 +55887,6 @@ class PEAR_ChannelFile {
     }
 
     /**
-     * Generate the <xmlrpc> tag
-     * @access private
-     */
-    function _makeXmlrpcXml($info, $indent)
-    {
-        $ret = $indent . "<xmlrpc";
-        if (isset($info['attribs']['path'])) {
-            $ret .= ' path="' . htmlspecialchars($info['attribs']['path']) . '"';
-        }
-        $ret .= ">\n";
-        $ret .= $this->_makeFunctionsXml($info['function'], "$indent ");
-        $ret .= $indent . "</xmlrpc>\n";
-        return $ret;
-    }
-
-    /**
-     * Generate the <soap> tag
-     * @access private
-     */
-    function _makeSoapXml($info, $indent)
-    {
-        $ret = $indent . "<soap";
-        if (isset($info['attribs']['path'])) {
-            $ret .= ' path="' . htmlspecialchars($info['attribs']['path']) . '"';
-        }
-        $ret .= ">\n";
-        $ret .= $this->_makeFunctionsXml($info['function'], "$indent ");
-        $ret .= $indent . "</soap>\n";
-        return $ret;
-    }
-
-    /**
      * Generate the <rest> tag
      * @access private
      */
@@ -56317,16 +55923,10 @@ class PEAR_ChannelFile {
                 $ret .= ' ssl="' . $mirror['attribs']['ssl'] . '"';
             }
             $ret .= ">\n";
-            if (isset($mirror['xmlrpc']) || isset($mirror['soap'])) {
-                if (isset($mirror['xmlrpc'])) {
-                    $ret .= $this->_makeXmlrpcXml($mirror['xmlrpc'], '   ');
-                }
+            if (isset($mirror['rest'])) {
                 if (isset($mirror['rest'])) {
                     $ret .= $this->_makeRestXml($mirror['rest'], '   ');
                 }
-                if (isset($mirror['soap'])) {
-                    $ret .= $this->_makeSoapXml($mirror['soap'], '   ');
-                }
                 $ret .= "  </mirror>\n";
             } else {
                 $ret .= "/>\n";
@@ -56426,26 +56026,20 @@ class PEAR_ChannelFile {
                     array('package' => $content));
             }
         }
-        if (isset($info['servers']['primary']['attribs']['port']) &&
+
+        if (isset($info['servers']['primary']['attribs'], $info['servers']['primary']['attribs']['port']) &&
               !is_numeric($info['servers']['primary']['attribs']['port'])) {
             $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_PORT,
                 array('port' => $info['servers']['primary']['attribs']['port']));
         }
-        if (isset($info['servers']['primary']['attribs']['ssl']) &&
+
+        if (isset($info['servers']['primary']['attribs'], $info['servers']['primary']['attribs']['ssl']) &&
               $info['servers']['primary']['attribs']['ssl'] != 'yes') {
             $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_SSL,
                 array('ssl' => $info['servers']['primary']['attribs']['ssl'],
                     'server' => $info['name']));
         }
 
-        if (isset($info['servers']['primary']['xmlrpc']) &&
-              isset($info['servers']['primary']['xmlrpc']['function'])) {
-            $this->_validateFunctions('xmlrpc', $info['servers']['primary']['xmlrpc']['function']);
-        }
-        if (isset($info['servers']['primary']['soap']) &&
-              isset($info['servers']['primary']['soap']['function'])) {
-            $this->_validateFunctions('soap', $info['servers']['primary']['soap']['function']);
-        }
         if (isset($info['servers']['primary']['rest']) &&
               isset($info['servers']['primary']['rest']['baseurl'])) {
             $this->_validateFunctions('rest', $info['servers']['primary']['rest']['baseurl']);
@@ -56469,14 +56063,6 @@ class PEAR_ChannelFile {
                     $this->_validateError(PEAR_CHANNELFILE_ERROR_INVALID_SSL,
                         array('ssl' => $info['ssl'], 'server' => $mirror['attribs']['host']));
                 }
-                if (isset($mirror['xmlrpc'])) {
-                    $this->_validateFunctions('xmlrpc',
-                        $mirror['xmlrpc']['function'], $mirror['attribs']['host']);
-                }
-                if (isset($mirror['soap'])) {
-                    $this->_validateFunctions('soap', $mirror['soap']['function'],
-                        $mirror['attribs']['host']);
-                }
                 if (isset($mirror['rest'])) {
                     $this->_validateFunctions('rest', $mirror['rest']['baseurl'],
                         $mirror['attribs']['host']);
@@ -56487,7 +56073,7 @@ class PEAR_ChannelFile {
     }
 
     /**
-     * @param string xmlrpc or soap - protocol name this function applies to
+     * @param string  rest - protocol name this function applies to
      * @param array the functions
      * @param string the name of the parent element (mirror name, for instance)
      */
@@ -56537,9 +56123,9 @@ class PEAR_ChannelFile {
     {
         if (isset($this->_channelInfo['name'])) {
             return $this->_channelInfo['name'];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -56549,9 +56135,9 @@ class PEAR_ChannelFile {
     {
         if (isset($this->_channelInfo['name'])) {
             return $this->_channelInfo['name'];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -56563,21 +56149,26 @@ class PEAR_ChannelFile {
             if ($mir = $this->getMirror($mirror)) {
                 if (isset($mir['attribs']['port'])) {
                     return $mir['attribs']['port'];
-                } else {
-                    if ($this->getSSL($mirror)) {
-                        return 443;
-                    }
-                    return 80;
                 }
+
+                if ($this->getSSL($mirror)) {
+                    return 443;
+                }
+
+                return 80;
             }
+
             return false;
         }
+
         if (isset($this->_channelInfo['servers']['primary']['attribs']['port'])) {
             return $this->_channelInfo['servers']['primary']['attribs']['port'];
         }
+
         if ($this->getSSL()) {
             return 443;
         }
+
         return 80;
     }
 
@@ -56590,15 +56181,18 @@ class PEAR_ChannelFile {
             if ($mir = $this->getMirror($mirror)) {
                 if (isset($mir['attribs']['ssl'])) {
                     return true;
-                } else {
-                    return false;
                 }
+
+                return false;
             }
+
             return false;
         }
+
         if (isset($this->_channelInfo['servers']['primary']['attribs']['ssl'])) {
             return true;
         }
+
         return false;
     }
 
@@ -56609,37 +56203,13 @@ class PEAR_ChannelFile {
     {
         if (isset($this->_channelInfo['summary'])) {
             return $this->_channelInfo['summary'];
-        } else {
-            return false;
         }
-    }
 
-    /**
-     * @param string xmlrpc or soap
-     * @param string|false mirror name or false for primary server
-     */
-    function getPath($protocol, $mirror = false)
-    {   
-        if (!in_array($protocol, array('xmlrpc', 'soap'))) {
-            return false;
-        }
-        if ($mirror) {
-            if (!($mir = $this->getMirror($mirror))) {
-                return false;
-            }
-            if (isset($mir[$protocol]['attribs']['path'])) {
-                return $mir[$protocol]['attribs']['path'];
-            } else {
-                return $protocol . '.php';
-            }
-        } elseif (isset($this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'])) {
-            return $this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'];
-        }
-        return $protocol . '.php';
+        return false;
     }
 
     /**
-     * @param string protocol type (xmlrpc, soap)
+     * @param string protocol type
      * @param string Mirror name
      * @return array|false
      */
@@ -56648,24 +56218,23 @@ class PEAR_ChannelFile {
         if ($this->getName() == '__uri') {
             return false;
         }
-        if ($protocol == 'rest') {
-            $function = 'baseurl';
-        } else {
-            $function = 'function';
-        }
+
+        $function = $protocol == 'rest' ? 'baseurl' : 'function';
         if ($mirror) {
             if ($mir = $this->getMirror($mirror)) {
                 if (isset($mir[$protocol][$function])) {
                     return $mir[$protocol][$function];
                 }
             }
+
             return false;
         }
+
         if (isset($this->_channelInfo['servers']['primary'][$protocol][$function])) {
             return $this->_channelInfo['servers']['primary'][$protocol][$function];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -56681,15 +56250,19 @@ class PEAR_ChannelFile {
         if (!$protocols) {
             return false;
         }
+
         foreach ($protocols as $protocol) {
             if ($name === null) {
                 return $protocol;
             }
+
             if ($protocol['_content'] != $name) {
                 continue;
             }
+
             return $protocol;
         }
+
         return false;
      }
 
@@ -56706,18 +56279,23 @@ class PEAR_ChannelFile {
         if (!$protocols) {
             return false;
         }
+
         foreach ($protocols as $protocol) {
             if ($protocol['attribs']['version'] != $version) {
                 continue;
             }
+
             if ($name === null) {
                 return true;
             }
+
             if ($protocol['_content'] != $name) {
                 continue;
             }
+
             return true;
         }
+
         return false;
     }
 
@@ -56732,12 +56310,15 @@ class PEAR_ChannelFile {
         if ($mirror == $this->_channelInfo['name']) {
             $mirror = false;
         }
+
         if ($mirror) {
             if ($mir = $this->getMirror($mirror)) {
                 return isset($mir['rest']);
             }
+
             return false;
         }
+
         return isset($this->_channelInfo['servers']['primary']['rest']);
     }
 
@@ -56753,23 +56334,28 @@ class PEAR_ChannelFile {
         if ($mirror == $this->_channelInfo['name']) {
             $mirror = false;
         }
+
         if ($mirror) {
-            if ($mir = $this->getMirror($mirror)) {
-                $rest = $mir['rest'];
-            } else {
+            $mir = $this->getMirror($mirror);
+            if (!$mir) {
                 return false;
             }
+
+            $rest = $mir['rest'];
         } else {
             $rest = $this->_channelInfo['servers']['primary']['rest'];
         }
+
         if (!isset($rest['baseurl'][0])) {
             $rest['baseurl'] = array($rest['baseurl']);
         }
+
         foreach ($rest['baseurl'] as $baseurl) {
             if (strtolower($baseurl['attribs']['type']) == strtolower($resourceType)) {
                 return $baseurl['_content'];
             }
         }
+
         return false;
     }
 
@@ -56785,7 +56371,7 @@ class PEAR_ChannelFile {
 
     /**
      * Empty all protocol definitions
-     * @param string protocol type (xmlrpc, soap)
+     * @param string protocol type
      * @param string|false mirror name, if any
      */
     function resetFunctions($type, $mirror = false)
@@ -56796,24 +56382,28 @@ class PEAR_ChannelFile {
                 if (!isset($mirrors[0])) {
                     $mirrors = array($mirrors);
                 }
+
                 foreach ($mirrors as $i => $mir) {
                     if ($mir['attribs']['host'] == $mirror) {
                         if (isset($this->_channelInfo['servers']['mirror'][$i][$type])) {
                             unset($this->_channelInfo['servers']['mirror'][$i][$type]);
                         }
+
                         return true;
                     }
                 }
+
                 return false;
-            } else {
-                return false;
-            }
-        } else {
-            if (isset($this->_channelInfo['servers']['primary'][$type])) {
-                unset($this->_channelInfo['servers']['primary'][$type]);
             }
-            return true;
+
+            return false;
         }
+
+        if (isset($this->_channelInfo['servers']['primary'][$type])) {
+            unset($this->_channelInfo['servers']['primary'][$type]);
+        }
+
+        return true;
     }
 
     /**
@@ -56823,19 +56413,7 @@ class PEAR_ChannelFile {
     {
         switch ($version) {
             case '1.0' :
-                $this->resetFunctions('xmlrpc', $mirror);
-                $this->resetFunctions('soap', $mirror);
                 $this->resetREST($mirror);
-                $this->addFunction('xmlrpc', '1.0', 'logintest', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.listLatestReleases', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.listAll', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.info', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.getDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.1', 'package.getDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.getDepDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.1', 'package.getDepDownloadURL', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'package.search', $mirror);
-                $this->addFunction('xmlrpc', '1.0', 'channel.listAll', $mirror);
                 return true;
             break;
             default :
@@ -56843,7 +56421,7 @@ class PEAR_ChannelFile {
             break;
         }
     }
-    
+
     /**
      * @return array
      */
@@ -56854,10 +56432,11 @@ class PEAR_ChannelFile {
             if (!isset($mirrors[0])) {
                 $mirrors = array($mirrors);
             }
+
             return $mirrors;
-        } else {
-            return array();
         }
+
+        return array();
     }
 
     /**
@@ -56871,6 +56450,7 @@ class PEAR_ChannelFile {
                 return $mirror;
             }
         }
+
         return false;
     }
 
@@ -56898,6 +56478,7 @@ class PEAR_ChannelFile {
                     array('mirror' => $mirror));
                 return false;
             }
+
             if (isset($this->_channelInfo['servers']['mirror'][0])) {
                 foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
                     if ($mirror == $mir['attribs']['host']) {
@@ -56905,6 +56486,7 @@ class PEAR_ChannelFile {
                         return true;
                     }
                 }
+
                 return false;
             } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
                 $this->_channelInfo['servers']['mirror']['attribs']['port'] = $port;
@@ -56912,6 +56494,7 @@ class PEAR_ChannelFile {
                 return true;
             }
         }
+
         $this->_channelInfo['servers']['primary']['attribs']['port'] = $port;
         $this->_isValid = false;
         return true;
@@ -56930,6 +56513,7 @@ class PEAR_ChannelFile {
                     array('mirror' => $mirror));
                 return false;
             }
+
             if (isset($this->_channelInfo['servers']['mirror'][0])) {
                 foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
                     if ($mirror == $mir['attribs']['host']) {
@@ -56941,9 +56525,11 @@ class PEAR_ChannelFile {
                         } else {
                             $this->_channelInfo['servers']['mirror'][$i]['attribs']['ssl'] = 'yes';
                         }
+
                         return true;
                     }
                 }
+
                 return false;
             } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
                 if (!$ssl) {
@@ -56953,10 +56539,12 @@ class PEAR_ChannelFile {
                 } else {
                     $this->_channelInfo['servers']['mirror']['attribs']['ssl'] = 'yes';
                 }
+
                 $this->_isValid = false;
                 return true;
             }
         }
+
         if ($ssl) {
             $this->_channelInfo['servers']['primary']['attribs']['ssl'] = 'yes';
         } else {
@@ -56964,44 +56552,7 @@ class PEAR_ChannelFile {
                 unset($this->_channelInfo['servers']['primary']['attribs']['ssl']);
             }
         }
-        $this->_isValid = false;
-        return true;
-    }
 
-    /**
-     * Set the socket number (port) that is used to connect to this channel
-     * @param integer
-     * @param string|false name of the mirror server, or false for the primary
-     */
-    function setPath($protocol, $path, $mirror = false)
-    {
-        if (!in_array($protocol, array('xmlrpc', 'soap'))) {
-            return false;
-        }
-        if ($mirror) {
-            if (!isset($this->_channelInfo['servers']['mirror'])) {
-                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
-                    array('mirror' => $mirror));
-                return false;
-            }
-            if (isset($this->_channelInfo['servers']['mirror'][0])) {
-                foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
-                    if ($mirror == $mir['attribs']['host']) {
-                        $this->_channelInfo['servers']['mirror'][$i][$protocol]['attribs']['path'] =
-                            $path;
-                        return true;
-                    }
-                }
-                $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
-                    array('mirror' => $mirror));
-                return false;
-            } elseif ($this->_channelInfo['servers']['mirror']['attribs']['host'] == $mirror) {
-                $this->_channelInfo['servers']['mirror'][$protocol]['attribs']['path'] = $path;
-                $this->_isValid = false;
-                return true;
-            }
-        }
-        $this->_channelInfo['servers']['primary'][$protocol]['attribs']['path'] = $path;
         $this->_isValid = false;
         return true;
     }
@@ -57022,6 +56573,7 @@ class PEAR_ChannelFile {
                 array('tag' => 'name', 'name' => $server));
             return false;
         }
+
         if ($mirror) {
             $found = false;
             foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
@@ -57030,14 +56582,17 @@ class PEAR_ChannelFile {
                     break;
                 }
             }
+
             if (!$found) {
                 $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
                     array('mirror' => $mirror));
                 return false;
             }
+
             $this->_channelInfo['mirror'][$i]['attribs']['host'] = $server;
             return true;
         }
+
         $this->_channelInfo['name'] = $server;
         return true;
     }
@@ -57057,6 +56612,7 @@ class PEAR_ChannelFile {
             $this->_validateWarning(PEAR_CHANNELFILE_ERROR_MULTILINE_SUMMARY,
                 array('summary' => $summary));
         }
+
         $this->_channelInfo['summary'] = $summary;
         return true;
     }
@@ -57073,11 +56629,13 @@ class PEAR_ChannelFile {
                 array('tag' => 'suggestedalias', 'name' => $alias));
             return false;
         }
+
         if ($local) {
             $this->_channelInfo['localalias'] = $alias;
         } else {
             $this->_channelInfo['suggestedalias'] = $alias;
         }
+
         return true;
     }
 
@@ -57127,6 +56685,7 @@ class PEAR_ChannelFile {
         if ($mirror) {
             return $this->addMirrorFunction($mirror, $type, $version, $name);
         }
+
         $set = array('attribs' => array('version' => $version), '_content' => $name);
         if (!isset($this->_channelInfo['servers']['primary'][$type]['function'])) {
             if (!isset($this->_channelInfo['servers'])) {
@@ -57135,6 +56694,7 @@ class PEAR_ChannelFile {
             } elseif (!isset($this->_channelInfo['servers']['primary'])) {
                 $this->_channelInfo['servers']['primary'] = array($type => array());
             }
+
             $this->_channelInfo['servers']['primary'][$type]['function'] = $set;
             $this->_isValid = false;
             return true;
@@ -57142,6 +56702,7 @@ class PEAR_ChannelFile {
             $this->_channelInfo['servers']['primary'][$type]['function'] = array(
                 $this->_channelInfo['servers']['primary'][$type]['function']);
         }
+
         $this->_channelInfo['servers']['primary'][$type]['function'][] = $set;
         return true;
     }
@@ -57159,6 +56720,7 @@ class PEAR_ChannelFile {
                 array('mirror' => $mirror));
             return false;
         }
+
         $setmirror = false;
         if (isset($this->_channelInfo['servers']['mirror'][0])) {
             foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
@@ -57172,11 +56734,13 @@ class PEAR_ChannelFile {
                 $setmirror = &$this->_channelInfo['servers']['mirror'];
             }
         }
+
         if (!$setmirror) {
             $this->_validateError(PEAR_CHANNELFILE_ERROR_MIRROR_NOT_FOUND,
                 array('mirror' => $mirror));
             return false;
         }
+
         $set = array('attribs' => array('version' => $version), '_content' => $name);
         if (!isset($setmirror[$type]['function'])) {
             $setmirror[$type]['function'] = $set;
@@ -57185,6 +56749,7 @@ class PEAR_ChannelFile {
         } elseif (!isset($setmirror[$type]['function'][0])) {
             $setmirror[$type]['function'] = array($setmirror[$type]['function']);
         }
+
         $setmirror[$type]['function'][] = $set;
         $this->_isValid = false;
         return true;
@@ -57203,6 +56768,7 @@ class PEAR_ChannelFile {
                     array('mirror' => $mirror));
                 return false;
             }
+
             $setmirror = false;
             if (isset($this->_channelInfo['servers']['mirror'][0])) {
                 foreach ($this->_channelInfo['servers']['mirror'] as $i => $mir) {
@@ -57219,10 +56785,12 @@ class PEAR_ChannelFile {
         } else {
             $setmirror = &$this->_channelInfo['servers']['primary'];
         }
+
         $set = array('attribs' => array('type' => $resourceType), '_content' => $url);
         if (!isset($setmirror['rest'])) {
             $setmirror['rest'] = array();
         }
+
         if (!isset($setmirror['rest']['baseurl'])) {
             $setmirror['rest']['baseurl'] = $set;
             $this->_isValid = false;
@@ -57230,6 +56798,7 @@ class PEAR_ChannelFile {
         } elseif (!isset($setmirror['rest']['baseurl'][0])) {
             $setmirror['rest']['baseurl'] = array($setmirror['rest']['baseurl']);
         }
+
         foreach ($setmirror['rest']['baseurl'] as $i => $url) {
             if ($url['attribs']['type'] == $resourceType) {
                 $this->_isValid = false;
@@ -57237,6 +56806,7 @@ class PEAR_ChannelFile {
                 return true;
             }
         }
+
         $setmirror['rest']['baseurl'][] = $set;
         $this->_isValid = false;
         return true;
@@ -57252,19 +56822,22 @@ class PEAR_ChannelFile {
         if ($this->_channelInfo['name'] == '__uri') {
             return false; // the __uri channel cannot have mirrors by definition
         }
+
         $set = array('attribs' => array('host' => $server));
         if (is_numeric($port)) {
             $set['attribs']['port'] = $port;
         }
+
         if (!isset($this->_channelInfo['servers']['mirror'])) {
             $this->_channelInfo['servers']['mirror'] = $set;
             return true;
-        } else {
-            if (!isset($this->_channelInfo['servers']['mirror'][0])) {
-                $this->_channelInfo['servers']['mirror'] =
-                    array($this->_channelInfo['servers']['mirror']);
-            }
         }
+
+        if (!isset($this->_channelInfo['servers']['mirror'][0])) {
+            $this->_channelInfo['servers']['mirror'] =
+                array($this->_channelInfo['servers']['mirror']);
+        }
+
         $this->_channelInfo['servers']['mirror'][] = $set;
         return true;
     }
@@ -57278,10 +56851,12 @@ class PEAR_ChannelFile {
         if (!$this->_isValid && !$this->validate()) {
             return false;
         }
+
         if (!isset($this->_channelInfo['validatepackage'])) {
             return array('attribs' => array('version' => 'default'),
                 '_content' => 'PEAR_Validate');
         }
+
         return $this->_channelInfo['validatepackage'];
     }
 
@@ -57297,18 +56872,21 @@ class PEAR_ChannelFile {
         if (!class_exists('PEAR_Validate')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validate.php';
         }
+
         if (!$this->_isValid) {
             if (!$this->validate()) {
                 $a = false;
                 return $a;
             }
         }
+
         if (isset($this->_channelInfo['validatepackage'])) {
             if ($package == $this->_channelInfo['validatepackage']) {
                 // channel validation packages are always validated by PEAR_Validate
                 $val = &new PEAR_Validate;
                 return $val;
             }
+
             if (!class_exists(str_replace('.', '_',
                   $this->_channelInfo['validatepackage']['_content']))) {
                 if ($this->isIncludeable(str_replace('_', '/',
@@ -57330,6 +56908,7 @@ class PEAR_ChannelFile {
         } else {
             $val = &new PEAR_Validate;
         }
+
         return $val;
     }
 
@@ -57342,6 +56921,7 @@ class PEAR_ChannelFile {
                 return true;
             }
         }
+
         return false;
     }
 
@@ -57355,28 +56935,21 @@ class PEAR_ChannelFile {
         if (isset($this->_channelInfo['_lastmodified'])) {
             return $this->_channelInfo['_lastmodified'];
         }
+
         return time();
     }
-}
-?>
-<?php
+}<?php
 /**
  * PEAR_ChannelFile_Parser for parsing channel.xml
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Parser.php,v 1.5 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Parser.php,v 1.7 2009/02/24 23:39:07 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -57391,9 +56964,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -57419,37 +56992,32 @@ class PEAR_ChannelFile_Parser extends PEAR_XMLParser
         if (PEAR::isError($err = parent::parse($data, $file))) {
             return $err;
         }
+
         $ret = new PEAR_ChannelFile;
         $ret->setConfig($this->_config);
         if (isset($this->_logger)) {
             $ret->setLogger($this->_logger);
         }
+
         $ret->fromArray($this->_unserializedData);
         // make sure the filelist is in the easy to read format needed
         $ret->flattenFilelist();
         $ret->setPackagefile($file, $archive);
         return $ret;
     }
-}
-?><?php
+}<?php
 /**
  * PEAR_Command, command pattern class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Command.php,v 1.39 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Command.php,v 1.41 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -57531,9 +57099,9 @@ $GLOBALS['_PEAR_Command_objects'] = array();
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -57844,28 +57412,19 @@ class PEAR_Command
         return false;
     }
     // }}}
-}
-
-?>
-<?php
+}<?php
 /**
  * PEAR_Command_Common base class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.36 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.39 2009/02/24 23:39:29 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -57882,16 +57441,14 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Command_Common extends PEAR
 {
-    // {{{ properties
-
     /**
      * PEAR_Config object used to pass user system and configuration
      * on when executing commands
@@ -57933,9 +57490,6 @@ class PEAR_Command_Common extends PEAR
                                   'sapi' => 'SAPI backend'
                                   );
 
-    // }}}
-    // {{{ constructor
-
     /**
      * PEAR_Command_Common constructor.
      *
@@ -57948,10 +57502,6 @@ class PEAR_Command_Common extends PEAR
         $this->ui = &$ui;
     }
 
-    // }}}
-
-    // {{{ getCommands()
-
     /**
      * Return a list of all the commands defined by this class.
      * @return array list of commands
@@ -57963,12 +57513,10 @@ class PEAR_Command_Common extends PEAR
         foreach (array_keys($this->commands) as $command) {
             $ret[$command] = $this->commands[$command]['summary'];
         }
+
         return $ret;
     }
 
-    // }}}
-    // {{{ getShortcuts()
-
     /**
      * Return a list of all the command shortcuts defined by this class.
      * @return array shortcut => command
@@ -57982,36 +57530,33 @@ class PEAR_Command_Common extends PEAR
                 $ret[$this->commands[$command]['shortcut']] = $command;
             }
         }
+
         return $ret;
     }
 
-    // }}}
-    // {{{ getOptions()
-
     function getOptions($command)
     {
         $shortcuts = $this->getShortcuts();
         if (isset($shortcuts[$command])) {
             $command = $shortcuts[$command];
         }
+
         if (isset($this->commands[$command]) &&
               isset($this->commands[$command]['options'])) {
             return $this->commands[$command]['options'];
-        } else {
-            return null;
         }
-    }
 
-    // }}}
-    // {{{ getGetoptArgs()
+        return null;
+    }
 
     function getGetoptArgs($command, &$short_args, &$long_args)
     {
-        $short_args = "";
+        $short_args = '';
         $long_args = array();
         if (empty($this->commands[$command]) || empty($this->commands[$command]['options'])) {
             return;
         }
+
         reset($this->commands[$command]['options']);
         while (list($option, $info) = each($this->commands[$command]['options'])) {
             $larg = $sarg = '';
@@ -58026,15 +57571,15 @@ class PEAR_Command_Common extends PEAR
                     $arg = $info['arg'];
                 }
             }
+
             if (isset($info['shortopt'])) {
                 $short_args .= $info['shortopt'] . $sarg;
             }
+
             $long_args[] = $option . $larg;
         }
     }
 
-    // }}}
-    // {{{ getHelp()
     /**
     * Returns the help message for the given command
     *
@@ -58049,10 +57594,12 @@ class PEAR_Command_Common extends PEAR
         if (!isset($this->commands[$command])) {
             return "No such command \"$command\"";
         }
+
         $help = null;
         if (isset($this->commands[$command]['doc'])) {
             $help = $this->commands[$command]['doc'];
         }
+
         if (empty($help)) {
             // XXX (cox) Fallback to summary if there is no doc (show both?)
             if (!isset($this->commands[$command]['summary'])) {
@@ -58060,22 +57607,22 @@ class PEAR_Command_Common extends PEAR
             }
             $help = $this->commands[$command]['summary'];
         }
+
         if (preg_match_all('/{config\s+([^\}]+)}/e', $help, $matches)) {
             foreach($matches[0] as $k => $v) {
                 $help = preg_replace("/$v/", $config->get($matches[1][$k]), $help);
             }
         }
+
         return array($help, $this->getHelpArgs($command));
     }
 
-    // }}}
-    // {{{ getHelpArgs()
     /**
-    * Returns the help for the accepted arguments of a command
-    *
-    * @param  string $command
-    * @return string The help string
-    */
+     * Returns the help for the accepted arguments of a command
+     *
+     * @param  string $command
+     * @return string The help string
+     */
     function getHelpArgs($command)
     {
         if (isset($this->commands[$command]['options']) &&
@@ -58095,24 +57642,25 @@ class PEAR_Command_Common extends PEAR
                 } else {
                     $sapp = $lapp = "";
                 }
+
                 if (isset($v['shortopt'])) {
                     $s = $v['shortopt'];
                     $help .= "  -$s$sapp, --$k$lapp\n";
                 } else {
                     $help .= "  --$k$lapp\n";
                 }
+
                 $p = "        ";
                 $doc = rtrim(str_replace("\n", "\n$p", $v['doc']));
                 $help .= "        $doc\n";
             }
+
             return $help;
         }
+
         return null;
     }
 
-    // }}}
-    // {{{ run()
-
     function run($command, $options, $params)
     {
         if (empty($this->commands[$command]['function'])) {
@@ -58125,38 +57673,30 @@ class PEAR_Command_Common extends PEAR
                         $func = $this->commands[$cmd]['function'];
                     }
                     $command = $cmd;
+
+                    //$command = $this->commands[$cmd]['function'];
                     break;
                 }
             }
         } else {
             $func = $this->commands[$command]['function'];
         }
+
         return $this->$func($command, $options, $params);
     }
-
-    // }}}
-}
-
-?>
-<?php
+}<?php
 /**
  * PEAR_Command_Install (install, upgrade, upgrade-all, uninstall, bundle, run-scripts commands)
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Install.php,v 1.141 2008/05/13 18:32:29 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Install.php,v 1.153 2009/03/08 04:01:11 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -58174,9 +57714,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Command/Common.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -58280,6 +57820,11 @@ four ways of specifying packages.
             'function' => 'doInstall',
             'shortcut' => 'up',
             'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'upgrade packages from a specific channel',
+                    'arg' => 'CHAN',
+                    ),
                 'force' => array(
                     'shortopt' => 'f',
                     'doc' => 'overwrite newer installed packages',
@@ -58340,10 +57885,15 @@ upgrade anyway).
 More than one package may be specified at once.
 '),
         'upgrade-all' => array(
-            'summary' => 'Upgrade All Packages',
+            'summary' => 'Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters]',
             'function' => 'doUpgradeAll',
             'shortcut' => 'ua',
             'options' => array(
+                'channel' => array(
+                    'shortopt' => 'c',
+                    'doc' => 'upgrade packages from a specific channel',
+                    'arg' => 'CHAN',
+                    ),
                 'nodeps' => array(
                     'shortopt' => 'n',
                     'doc' => 'ignore dependencies, upgrade anyway',
@@ -58373,6 +57923,8 @@ More than one package may be specified at once.
                     ),
                 ),
             'doc' => '
+WARNING: This function is deprecated in favor of using the upgrade command with no params
+
 Upgrades all packages that have a newer release available.  Upgrades are
 done only if there is a release available of the state specified in
 "preferred_state" (currently {config preferred_state}), or a state considered
@@ -58586,70 +58138,71 @@ Run post-installation scripts in package <package>, if any exist.
 
     function _parseIni($filename)
     {
-        if (file_exists($filename)) {
-            if (filesize($filename) > 300000) {
-                return PEAR::raiseError('php.ini "' . $filename . '" is too large, aborting');
+        if (!file_exists($filename)) {
+            return PEAR::raiseError('php.ini "' . $filename . '" does not exist');
+        }
+
+        if (filesize($filename) > 300000) {
+            return PEAR::raiseError('php.ini "' . $filename . '" is too large, aborting');
+        }
+
+        ob_start();
+        phpinfo(INFO_GENERAL);
+        $info = ob_get_contents();
+        ob_end_clean();
+        $debug = function_exists('leak') ? '_debug' : '';
+        $ts = preg_match('/Thread Safety.+enabled/', $info) ? '_ts' : '';
+        $zend_extension_line = 'zend_extension' . $debug . $ts;
+        $all = @file($filename);
+        if (!$all) {
+            return PEAR::raiseError('php.ini "' . $filename .'" could not be read');
+        }
+        $zend_extensions = $extensions = array();
+        // assume this is right, but pull from the php.ini if it is found
+        $extension_dir = ini_get('extension_dir');
+        foreach ($all as $linenum => $line) {
+            $line = trim($line);
+            if (!$line) {
+                continue;
             }
-            ob_start();
-            phpinfo(INFO_GENERAL);
-            $info = ob_get_contents();
-            ob_end_clean();
-            $debug = function_exists('leak') ? '_debug' : '';
-            $ts = preg_match('/Thread Safety.+enabled/', $info) ? '_ts' : '';
-            $zend_extension_line = 'zend_extension' . $debug . $ts;
-            $all = @file($filename);
-            if (!$all) {
-                return PEAR::raiseError('php.ini "' . $filename .'" could not be read');
-            }
-            $zend_extensions = $extensions = array();
-            // assume this is right, but pull from the php.ini if it is found
-            $extension_dir = ini_get('extension_dir');
-            foreach ($all as $linenum => $line) {
-                $line = trim($line);
-                if (!$line) {
+            if ($line[0] == ';') {
+                continue;
+            }
+            if (strtolower(substr($line, 0, 13)) == 'extension_dir') {
+                $line = trim(substr($line, 13));
+                if ($line[0] == '=') {
+                    $x = trim(substr($line, 1));
+                    $x = explode(';', $x);
+                    $extension_dir = str_replace('"', '', array_shift($x));
                     continue;
                 }
-                if ($line[0] == ';') {
+            }
+            if (strtolower(substr($line, 0, 9)) == 'extension') {
+                $line = trim(substr($line, 9));
+                if ($line[0] == '=') {
+                    $x = trim(substr($line, 1));
+                    $x = explode(';', $x);
+                    $extensions[$linenum] = str_replace('"', '', array_shift($x));
                     continue;
                 }
-                if (strtolower(substr($line, 0, 13)) == 'extension_dir') {
-                    $line = trim(substr($line, 13));
-                    if ($line[0] == '=') {
-                        $x = trim(substr($line, 1));
-                        $x = explode(';', $x);
-                        $extension_dir = str_replace('"', '', array_shift($x));
-                        continue;
-                    }
-                }
-                if (strtolower(substr($line, 0, 9)) == 'extension') {
-                    $line = trim(substr($line, 9));
-                    if ($line[0] == '=') {
-                        $x = trim(substr($line, 1));
-                        $x = explode(';', $x);
-                        $extensions[$linenum] = str_replace('"', '', array_shift($x));
-                        continue;
-                    }
-                }
-                if (strtolower(substr($line, 0, strlen($zend_extension_line))) ==
-                      $zend_extension_line) {
-                    $line = trim(substr($line, strlen($zend_extension_line)));
-                    if ($line[0] == '=') {
-                        $x = trim(substr($line, 1));
-                        $x = explode(';', $x);
-                        $zend_extensions[$linenum] = str_replace('"', '', array_shift($x));
-                        continue;
-                    }
+            }
+            if (strtolower(substr($line, 0, strlen($zend_extension_line))) ==
+                  $zend_extension_line) {
+                $line = trim(substr($line, strlen($zend_extension_line)));
+                if ($line[0] == '=') {
+                    $x = trim(substr($line, 1));
+                    $x = explode(';', $x);
+                    $zend_extensions[$linenum] = str_replace('"', '', array_shift($x));
+                    continue;
                 }
             }
-            return array(
-                'extensions' => $extensions,
-                'zend_extensions' => $zend_extensions,
-                'extension_dir' => $extension_dir,
-                'all' => $all,
-            );
-        } else {
-            return PEAR::raiseError('php.ini "' . $filename . '" does not exist');
         }
+        return array(
+            'extensions' => $extensions,
+            'zend_extensions' => $zend_extensions,
+            'extension_dir' => $extension_dir,
+            'all' => $all,
+        );
     }
 
     // {{{ doInstall()
@@ -58659,18 +58212,31 @@ Run post-installation scripts in package <package>, if any exist.
         if (!class_exists('PEAR_PackageFile')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile.php';
         }
+
+        if (isset($options['installroot']) && isset($options['packagingroot'])) {
+            return $this->raiseError('ERROR: cannot use both --installroot and --packagingroot');
+        }
+
+        $reg = &$this->config->getRegistry();
+        $channel = isset($options['channel']) ? $options['channel'] : $this->config->get('default_channel');
+        if (!$reg->channelExists($channel)) {
+            return $this->raiseError('Channel "' . $channel . '" does not exist');
+        }
+
         if (empty($this->installer)) {
             $this->installer = &$this->getInstaller($this->ui);
         }
+
         if ($command == 'upgrade' || $command == 'upgrade-all') {
+            // If people run the upgrade command but pass nothing, emulate a upgrade-all
+            if ($command == 'upgrade' && empty($params)) {
+                return $this->doUpgradeAll($command, $options, $params);
+            }
             $options['upgrade'] = true;
         } else {
             $packages = $params;
         }
-        if (isset($options['installroot']) && isset($options['packagingroot'])) {
-            return $this->raiseError('ERROR: cannot use both --installroot and --packagingroot');
-        }
-        $reg = &$this->config->getRegistry();
+
         $instreg = &$reg; // instreg used to check if package is installed
         if (isset($options['packagingroot']) && !isset($options['upgrade'])) {
             $packrootphp_dir = $this->installer->_prependPath(
@@ -58682,30 +58248,35 @@ Run post-installation scripts in package <package>, if any exist.
                 $this->ui->outputData('using package root: ' . $options['packagingroot']);
             }
         }
+
         $abstractpackages = array();
-        $otherpackages = array();
+        $otherpackages    = array();
         // parse params
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        foreach($params as $param) {
+
+        foreach ($params as $param) {
             if (strpos($param, 'http://') === 0) {
                 $otherpackages[] = $param;
                 continue;
             }
+
             if (strpos($param, 'channel://') === false && @file_exists($param)) {
                 if (isset($options['force'])) {
                     $otherpackages[] = $param;
                     continue;
                 }
+
                 $pkg = new PEAR_PackageFile($this->config);
-                $pf = $pkg->fromAnyFile($param, PEAR_VALIDATE_DOWNLOADING);
+                $pf  = $pkg->fromAnyFile($param, PEAR_VALIDATE_DOWNLOADING);
                 if (PEAR::isError($pf)) {
                     $otherpackages[] = $param;
                     continue;
                 }
-                if ($reg->packageExists($pf->getPackage(), $pf->getChannel()) &&
-                      version_compare($pf->getVersion(),
-                      $reg->packageInfo($pf->getPackage(), 'version', $pf->getChannel()),
-                      '<=')) {
+
+                $exists   = $reg->packageExists($pf->getPackage(), $pf->getChannel());
+                $pversion = $reg->packageInfo($pf->getPackage(), 'version', $pf->getChannel());
+                $version_compare = version_compare($pf->getVersion(), $pversion, '<=');
+                if ($exists && $version_compare) {
                     if ($this->config->get('verbose')) {
                         $this->ui->outputData('Ignoring installed package ' .
                             $reg->parsedPackageNameToString(
@@ -58717,7 +58288,8 @@ Run post-installation scripts in package <package>, if any exist.
                 $otherpackages[] = $param;
                 continue;
             }
-            $e = $reg->parsePackageName($param, $this->config->get('default_channel'));
+
+            $e = $reg->parsePackageName($param, $channel);
             if (PEAR::isError($e)) {
                 $otherpackages[] = $param;
             } else {
@@ -58731,20 +58303,26 @@ Run post-installation scripts in package <package>, if any exist.
         if (count($abstractpackages) && !isset($options['force'])) {
             // when not being forced, only do necessary upgrades/installs
             if (isset($options['upgrade'])) {
-                $abstractpackages = $this->_filterUptodatePackages($abstractpackages,
-                    $command);
+                $abstractpackages = $this->_filterUptodatePackages($abstractpackages, $command);
             } else {
+                $count = count($abstractpackages);
                 foreach ($abstractpackages as $i => $package) {
                     if (isset($package['group'])) {
                         // do not filter out install groups
                         continue;
                     }
+
                     if ($instreg->packageExists($package['package'], $package['channel'])) {
-                        if ($this->config->get('verbose')) {
-                            $this->ui->outputData('Ignoring installed package ' .
-                                $reg->parsedPackageNameToString($package, true));
+                        if ($count > 1) {
+                            if ($this->config->get('verbose')) {
+                                $this->ui->outputData('Ignoring installed package ' .
+                                    $reg->parsedPackageNameToString($package, true));
+                            }
+                            unset($abstractpackages[$i]);
+                        } elseif ($count === 1) {
+                            // Lets try to upgrade it since it's already installed
+                            $options['upgrade'] = true;
                         }
-                        unset($abstractpackages[$i]);
                     }
                 }
             }
@@ -58755,37 +58333,47 @@ Run post-installation scripts in package <package>, if any exist.
                 array_map(array($reg, 'parsedPackageNameToString'), $abstractpackages);
         }
 
-
         $packages = array_merge($abstractpackages, $otherpackages);
         if (!count($packages)) {
-            $this->ui->outputData('Nothing to ' . $command);
+            $c = '';
+            if (isset($options['channel'])){
+                $c .= ' in channel "' . $options['channel'] . '"';
+            }
+            $this->ui->outputData('Nothing to ' . $command . $c);
             return true;
         }
 
         $this->downloader = &$this->getDownloader($this->ui, $options, $this->config);
-        $errors = array();
-        $binaries = array();
-        $downloaded = array();
+        $errors = $downloaded = $binaries   = array();
         $downloaded = &$this->downloader->download($packages);
         if (PEAR::isError($downloaded)) {
             return $this->raiseError($downloaded);
         }
+
         $errors = $this->downloader->getErrorMsgs();
         if (count($errors)) {
             $err = array();
             $err['data'] = array();
             foreach ($errors as $error) {
-                $err['data'][] = array($error);
+                if ($error !== null) {
+                    $err['data'][] = array($error);
+                }
             }
-            $err['headline'] = 'Install Errors';
-            $this->ui->outputData($err);
+
+            if (!empty($err['data'])) {
+                $err['headline'] = 'Install Errors';
+                $this->ui->outputData($err);
+            }
+
             if (!count($downloaded)) {
                 return $this->raiseError("$command failed");
             }
         }
+
         $data = array(
             'headline' => 'Packages that would be Installed'
         );
+
         if (isset($options['pretend'])) {
             foreach ($downloaded as $package) {
                 $data['data'][] = array($reg->parsedPackageNameToString($package->getParsedPackage()));
@@ -58793,14 +58381,16 @@ Run post-installation scripts in package <package>, if any exist.
             $this->ui->outputData($data, 'pretend');
             return true;
         }
+
         $this->installer->setOptions($options);
         $this->installer->sortPackagesForInstall($downloaded);
         if (PEAR::isError($err = $this->installer->setDownloadedPackages($downloaded))) {
             $this->raiseError($err->getMessage());
             return true;
         }
+
         $extrainfo = array();
-        $binaries = array();
+        $binaries  = array();
         foreach ($downloaded as $param) {
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
             $info = $this->installer->install($param, $options);
@@ -58813,145 +58403,157 @@ Run post-installation scripts in package <package>, if any exist.
                         $this->ui->outputData('ERROR: ' .$oldinfo->getMessage());
                         continue;
                     }
+
                     // we just installed a different package than requested,
                     // let's change the param and info so that the rest of this works
                     $param = $info[0];
-                    $info = $info[1];
+                    $info  = $info[1];
                 }
             }
-            if (is_array($info)) {
-                if ($param->getPackageType() == 'extsrc' ||
-                      $param->getPackageType() == 'extbin' ||
-                      $param->getPackageType() == 'zendextsrc' ||
-                      $param->getPackageType() == 'zendextbin') {
-                    $pkg = &$param->getPackageFile();
-                    if ($instbin = $pkg->getInstalledBinary()) {
-                        $instpkg = &$instreg->getPackage($instbin, $pkg->getChannel());
-                    } else {
-                        $instpkg = &$instreg->getPackage($pkg->getPackage(), $pkg->getChannel());
+
+            if (!is_array($info)) {
+                return $this->raiseError("$command failed");
+            }
+
+            if ($param->getPackageType() == 'extsrc' ||
+                  $param->getPackageType() == 'extbin' ||
+                  $param->getPackageType() == 'zendextsrc' ||
+                  $param->getPackageType() == 'zendextbin') {
+                $pkg = &$param->getPackageFile();
+                if ($instbin = $pkg->getInstalledBinary()) {
+                    $instpkg = &$instreg->getPackage($instbin, $pkg->getChannel());
+                } else {
+                    $instpkg = &$instreg->getPackage($pkg->getPackage(), $pkg->getChannel());
+                }
+
+                foreach ($instpkg->getFilelist() as $name => $atts) {
+                    $pinfo = pathinfo($atts['installed_as']);
+                    if (!isset($pinfo['extension']) ||
+                          in_array($pinfo['extension'], array('c', 'h'))) {
+                        continue; // make sure we don't match php_blah.h
                     }
 
-                    foreach ($instpkg->getFilelist() as $name => $atts) {
-                        $pinfo = pathinfo($atts['installed_as']);
-                        if (!isset($pinfo['extension']) ||
-                              in_array($pinfo['extension'], array('c', 'h'))) {
-                            continue; // make sure we don't match php_blah.h
-                        }
-                        if ((strpos($pinfo['basename'], 'php_') === 0 &&
-                              $pinfo['extension'] == 'dll') ||
-                              // most unices
-                              $pinfo['extension'] == 'so' ||
-                              // hp-ux
-                              $pinfo['extension'] == 'sl') {
-                            $binaries[] = array($atts['installed_as'], $pinfo);
-                            break;
-                        }
+                    if ((strpos($pinfo['basename'], 'php_') === 0 &&
+                          $pinfo['extension'] == 'dll') ||
+                          // most unices
+                          $pinfo['extension'] == 'so' ||
+                          // hp-ux
+                          $pinfo['extension'] == 'sl') {
+                        $binaries[] = array($atts['installed_as'], $pinfo);
+                        break;
                     }
-                    if (count($binaries)) {
-                        foreach ($binaries as $pinfo) {
-                            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-                            $ret = $this->enableExtension(array($pinfo[0]), $param->getPackageType());
-                            PEAR::staticPopErrorHandling();
-                            if (PEAR::isError($ret)) {
-                                $extrainfo[] = $ret->getMessage();
-                                if ($param->getPackageType() == 'extsrc' ||
-                                      $param->getPackageType() == 'extbin') {
-                                    $exttype = 'extension';
-                                } else {
-                                    ob_start();
-                                    phpinfo(INFO_GENERAL);
-                                    $info = ob_get_contents();
-                                    ob_end_clean();
-                                    $debug = function_exists('leak') ? '_debug' : '';
-                                    $ts = preg_match('Thread Safety.+enabled', $info) ? '_ts' : '';
-                                    $exttype = 'zend_extension' . $debug . $ts;
-                                }
-                                $extrainfo[] = 'You should add "' . $exttype . '=' .
-                                    $pinfo[1]['basename'] . '" to php.ini';
+                }
+
+                if (count($binaries)) {
+                    foreach ($binaries as $pinfo) {
+                        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                        $ret = $this->enableExtension(array($pinfo[0]), $param->getPackageType());
+                        PEAR::staticPopErrorHandling();
+                        if (PEAR::isError($ret)) {
+                            $extrainfo[] = $ret->getMessage();
+                            if ($param->getPackageType() == 'extsrc' ||
+                                  $param->getPackageType() == 'extbin') {
+                                $exttype = 'extension';
                             } else {
-                                $extrainfo[] = 'Extension ' . $instpkg->getProvidesExtension() .
-                                    ' enabled in php.ini';
+                                ob_start();
+                                phpinfo(INFO_GENERAL);
+                                $info = ob_get_contents();
+                                ob_end_clean();
+                                $debug = function_exists('leak') ? '_debug' : '';
+                                $ts = preg_match('Thread Safety.+enabled', $info) ? '_ts' : '';
+                                $exttype = 'zend_extension' . $debug . $ts;
                             }
+                            $extrainfo[] = 'You should add "' . $exttype . '=' .
+                                $pinfo[1]['basename'] . '" to php.ini';
+                        } else {
+                            $extrainfo[] = 'Extension ' . $instpkg->getProvidesExtension() .
+                                ' enabled in php.ini';
                         }
                     }
                 }
-                if ($this->config->get('verbose') > 0) {
-                    $channel = $param->getChannel();
-                    $label = $reg->parsedPackageNameToString(
-                        array(
-                            'channel' => $channel,
-                            'package' => $param->getPackage(),
-                            'version' => $param->getVersion(),
-                        ));
-                    $out = array('data' => "$command ok: $label");
-                    if (isset($info['release_warnings'])) {
-                        $out['release_warnings'] = $info['release_warnings'];
-                    }
-                    $this->ui->outputData($out, $command);
-                    if (!isset($options['register-only']) && !isset($options['offline'])) {
-                        if ($this->config->isDefinedLayer('ftp')) {
-                            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-                            $info = $this->installer->ftpInstall($param);
-                            PEAR::staticPopErrorHandling();
-                            if (PEAR::isError($info)) {
-                                $this->ui->outputData($info->getMessage());
-                                $this->ui->outputData("remote install failed: $label");
-                            } else {
-                                $this->ui->outputData("remote install ok: $label");
-                            }
+            }
+
+            if ($this->config->get('verbose') > 0) {
+                $chan = $param->getChannel();
+                $label = $reg->parsedPackageNameToString(
+                    array(
+                        'channel' => $chan,
+                        'package' => $param->getPackage(),
+                        'version' => $param->getVersion(),
+                    ));
+                $out = array('data' => "$command ok: $label");
+                if (isset($info['release_warnings'])) {
+                    $out['release_warnings'] = $info['release_warnings'];
+                }
+                $this->ui->outputData($out, $command);
+
+                if (!isset($options['register-only']) && !isset($options['offline'])) {
+                    if ($this->config->isDefinedLayer('ftp')) {
+                        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                        $info = $this->installer->ftpInstall($param);
+                        PEAR::staticPopErrorHandling();
+                        if (PEAR::isError($info)) {
+                            $this->ui->outputData($info->getMessage());
+                            $this->ui->outputData("remote install failed: $label");
+                        } else {
+                            $this->ui->outputData("remote install ok: $label");
                         }
                     }
                 }
-                $deps = $param->getDeps();
-                if ($deps) {
-                    if (isset($deps['group'])) {
-                        $groups = $deps['group'];
-                        if (!isset($groups[0])) {
-                            $groups = array($groups);
-                        }
-                        foreach ($groups as $group) {
-                            if ($group['attribs']['name'] == 'default') {
-                                // default group is always installed, unless the user
-                                // explicitly chooses to install another group
-                                continue;
-                            }
-                            $extrainfo[] = $param->getPackage() . ': Optional feature ' .
-                                $group['attribs']['name'] . ' available (' .
-                                $group['attribs']['hint'] . ')';
-                        }
-                        $extrainfo[] = $param->getPackage() .
-                            ': To install optional features use "pear install ' .
-                            $reg->parsedPackageNameToString(
-                                array('package' => $param->getPackage(),
-                                      'channel' => $param->getChannel()), true) .
-                                  '#featurename"';
-                    }
-                }
-                $pkg = &$instreg->getPackage($param->getPackage(), $param->getChannel());
-                // $pkg may be NULL if install is a 'fake' install via --packagingroot
-                if (is_object($pkg)) {
-                    $pkg->setConfig($this->config);
-                    if ($list = $pkg->listPostinstallScripts()) {
-                        $pn = $reg->parsedPackageNameToString(array('channel' =>
-                           $param->getChannel(), 'package' => $param->getPackage()), true);
-                        $extrainfo[] = $pn . ' has post-install scripts:';
-                        foreach ($list as $file) {
-                            $extrainfo[] = $file;
+            }
+
+            $deps = $param->getDeps();
+            if ($deps) {
+                if (isset($deps['group'])) {
+                    $groups = $deps['group'];
+                    if (!isset($groups[0])) {
+                        $groups = array($groups);
+                    }
+
+                    foreach ($groups as $group) {
+                        if ($group['attribs']['name'] == 'default') {
+                            // default group is always installed, unless the user
+                            // explicitly chooses to install another group
+                            continue;
                         }
-                        $extrainfo[] = $param->getPackage() .
-                            ': Use "pear run-scripts ' . $pn . '" to finish setup.';
-                        $extrainfo[] = 'DO NOT RUN SCRIPTS FROM UNTRUSTED SOURCES';
+                        $extrainfo[] = $param->getPackage() . ': Optional feature ' .
+                            $group['attribs']['name'] . ' available (' .
+                            $group['attribs']['hint'] . ')';
+                    }
+
+                    $extrainfo[] = $param->getPackage() .
+                        ': To install optional features use "pear install ' .
+                        $reg->parsedPackageNameToString(
+                            array('package' => $param->getPackage(),
+                                  'channel' => $param->getChannel()), true) .
+                              '#featurename"';
+                }
+            }
+
+            $pkg = &$instreg->getPackage($param->getPackage(), $param->getChannel());
+            // $pkg may be NULL if install is a 'fake' install via --packagingroot
+            if (is_object($pkg)) {
+                $pkg->setConfig($this->config);
+                if ($list = $pkg->listPostinstallScripts()) {
+                    $pn = $reg->parsedPackageNameToString(array('channel' =>
+                       $param->getChannel(), 'package' => $param->getPackage()), true);
+                    $extrainfo[] = $pn . ' has post-install scripts:';
+                    foreach ($list as $file) {
+                        $extrainfo[] = $file;
                     }
+                    $extrainfo[] = $param->getPackage() .
+                        ': Use "pear run-scripts ' . $pn . '" to finish setup.';
+                    $extrainfo[] = 'DO NOT RUN SCRIPTS FROM UNTRUSTED SOURCES';
                 }
-            } else {
-                return $this->raiseError("$command failed");
             }
         }
+
         if (count($extrainfo)) {
             foreach ($extrainfo as $info) {
                 $this->ui->outputData($info);
             }
         }
+
         return true;
     }
 
@@ -58961,22 +58563,29 @@ Run post-installation scripts in package <package>, if any exist.
     function doUpgradeAll($command, $options, $params)
     {
         $reg = &$this->config->getRegistry();
-        $toUpgrade = array();
-        foreach ($reg->listChannels() as $channel) {
+        $upgrade = array();
+
+        if (isset($options['channel'])) {
+            $channels = array($options['channel']);
+        } else {
+            $channels = $reg->listChannels();
+        }
+
+        foreach ($channels as $channel) {
             if ($channel == '__uri') {
                 continue;
             }
 
             // parse name with channel
             foreach ($reg->listPackages($channel) as $name) {
-                $toUpgrade[] = $reg->parsedPackageNameToString(array(
+                $upgrade[] = $reg->parsedPackageNameToString(array(
                         'channel' => $channel,
                         'package' => $name
                     ));
             }
         }
 
-        $err = $this->doInstall('upgrade-all', $options, $toUpgrade);
+        $err = $this->doInstall($command, $options, $upgrade);
         if (PEAR::isError($err)) {
             $this->ui->outputData($err->getMessage(), $command);
         }
@@ -58987,18 +58596,21 @@ Run post-installation scripts in package <package>, if any exist.
 
     function doUninstall($command, $options, $params)
     {
+        if (count($params) < 1) {
+            return $this->raiseError("Please supply the package(s) you want to uninstall");
+        }
+
         if (empty($this->installer)) {
             $this->installer = &$this->getInstaller($this->ui);
         }
+
         if (isset($options['remoteconfig'])) {
             $e = $this->config->readFTPConfigFile($options['remoteconfig']);
             if (!PEAR::isError($e)) {
                 $this->installer->setConfig($this->config);
             }
         }
-        if (sizeof($params) < 1) {
-            return $this->raiseError("Please supply the package(s) you want to uninstall");
-        }
+
         $reg = &$this->config->getRegistry();
         $newparams = array();
         $binaries = array();
@@ -59144,12 +58756,13 @@ Run post-installation scripts in package <package>, if any exist.
                 }
             } else {
                 $this->installer->popErrorHandling();
-                if (is_object($pkg)) {
-                    $pkg = $reg->parsedPackageNameToString($pkg);
+                if (!is_object($pkg)) {
+                    return $this->raiseError("uninstall failed: $pkg");
                 }
-                return $this->raiseError("uninstall failed: $pkg");
+                $pkg = $reg->parsedPackageNameToString($pkg);
             }
         }
+
         return true;
     }
 
@@ -59165,10 +58778,15 @@ Run post-installation scripts in package <package>, if any exist.
 
     function doBundle($command, $options, $params)
     {
-        $downloader = &$this->getDownloader($this->ui, array('force' => true, 'nodeps' => true,
-            'soft' => true, 'downloadonly' => true), $this->config);
+        $opts = array(
+            'force'        => true,
+            'nodeps'       => true,
+            'soft'         => true,
+            'downloadonly' => true
+        );
+        $downloader = &$this->getDownloader($this->ui, $opts, $this->config);
         $reg = &$this->config->getRegistry();
-        if (sizeof($params) < 1) {
+        if (count($params) < 1) {
             return $this->raiseError("Please supply the package you want to bundle");
         }
 
@@ -59178,12 +58796,9 @@ Run post-installation scripts in package <package>, if any exist.
             }
             $dest = realpath($options['destination']);
         } else {
-            $pwd = getcwd();
-            if (is_dir($pwd . DIRECTORY_SEPARATOR . 'ext')) {
-                $dest = $pwd . DIRECTORY_SEPARATOR . 'ext';
-            } else {
-                $dest = $pwd;
-            }
+            $pwd  = getcwd();
+            $dir  = $pwd . DIRECTORY_SEPARATOR . 'ext';
+            $dest = is_dir($dir) ? $dir : $pwd;
         }
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $err = $downloader->setDownloadDir($dest);
@@ -59222,6 +58837,7 @@ Run post-installation scripts in package <package>, if any exist.
         if (!isset($params[0])) {
             return $this->raiseError('run-scripts expects 1 parameter: a package name');
         }
+
         $reg = &$this->config->getRegistry();
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         $parsed = $reg->parsePackageName($params[0], $this->config->get('default_channel'));
@@ -59229,13 +58845,14 @@ Run post-installation scripts in package <package>, if any exist.
         if (PEAR::isError($parsed)) {
             return $this->raiseError($parsed);
         }
+
         $package = &$reg->getPackage($parsed['package'], $parsed['channel']);
-        if (is_object($package)) {
-            $package->setConfig($this->config);
-            $package->runPostinstallScripts();
-        } else {
+        if (!is_object($package)) {
             return $this->raiseError('Could not retrieve package "' . $params[0] . '" from registry');
         }
+
+        $package->setConfig($this->config);
+        $package->runPostinstallScripts();
         $this->ui->outputData('Install scripts complete', $command);
         return true;
     }
@@ -59252,47 +58869,47 @@ Run post-installation scripts in package <package>, if any exist.
         $latestReleases = array();
 
         $ret = array();
-        foreach($packages as $package) {
+        foreach ($packages as $package) {
             if (isset($package['group'])) {
                 $ret[] = $package;
                 continue;
             }
-            $channel = $package['channel'];
-            $name = $package['package'];
 
+            $channel = $package['channel'];
+            $name    = $package['package'];
             if (!$reg->packageExists($name, $channel)) {
                 $ret[] = $package;
                 continue;
             }
+
             if (!isset($latestReleases[$channel])) {
                 // fill in cache for this channel
                 $chan = &$reg->getChannel($channel);
                 if (PEAR::isError($chan)) {
                     return $this->raiseError($chan);
                 }
-                if ($chan->supportsREST($this->config->get('preferred_mirror',
-                                                           null, $channel)) &&
-                      $base = $chan->getBaseURL('REST1.0',
-                                                $this->config->get('preferred_mirror',
-                                                                   null, $channel)))
+
+                $preferred_mirror = $this->config->get('preferred_mirror', null, $channel);
+                if ($chan->supportsREST($preferred_mirror) &&
+                      $base = $chan->getBaseURL('REST1.0', $preferred_mirror))
                 {
                     $dorest = true;
-                } else {
-                    $dorest = false;
-                    $remote = &$this->config->getRemote($this->config);
                 }
+
                 PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
+                if (!isset($package['state'])) {
+                    $state = $this->config->get('preferred_state', null, $channel);
+                } else {
+                    $state = $package['state'];
+                }
+
                 if ($dorest) {
                     $rest = &$this->config->getREST('1.0', array());
                     $installed = array_flip($reg->listPackages($channel));
-                    $latest = $rest->listLatestUpgrades($base,
-                        $this->config->get('preferred_state', null, $channel), $installed,
-                        $channel, $reg);
-                } else {
-                    $latest = $remote->call("package.listLatestReleases",
-                        $this->config->get('preferred_state', null, $channel));
-                    unset($remote);
+
+                    $latest = $rest->listLatestUpgrades($base, $state, $installed, $channel, $reg);
                 }
+
                 PEAR::staticPopErrorHandling();
                 if (PEAR::isError($latest)) {
                     $this->ui->outputData('Error getting channel info from ' . $channel .
@@ -59304,14 +58921,16 @@ Run post-installation scripts in package <package>, if any exist.
             }
 
             // check package for latest release
-            if (isset($latestReleases[$channel][strtolower($name)])) {
+            $name_lower = strtolower($name);
+            if (isset($latestReleases[$channel][$name_lower])) {
                 // if not set, up to date
-                $inst_version = $reg->packageInfo($name, 'version', $channel);
-                $channel_version = $latestReleases[$channel][strtolower($name)]['version'];
-                if (version_compare($channel_version, $inst_version, "le")) {
+                $inst_version    = $reg->packageInfo($name, 'version', $channel);
+                $channel_version = $latestReleases[$channel][$name_lower]['version'];
+                if (version_compare($channel_version, $inst_version, 'le')) {
                     // installed version is up-to-date
                     continue;
                 }
+
                 // maintain BC
                 if ($command == 'upgrade-all') {
                     $this->ui->outputData(array('data' => 'Will upgrade ' .
@@ -59323,10 +58942,7 @@ Run post-installation scripts in package <package>, if any exist.
 
         return $ret;
     }
-
-}
-?>
-<commands version="1.0">
+}<commands version="1.0">
  <install>
   <summary>Install Package</summary>
   <function>doInstall</function>
@@ -59354,7 +58970,7 @@ Run post-installation scripts in package <package>, if any exist.
    </soft>
    <nobuild>
     <shortopt>B</shortopt>
-    <doc>don&apos;t build C extensions</doc>
+    <doc>don&#039;t build C extensions</doc>
    </nobuild>
    <nocompress>
     <shortopt>Z</shortopt>
@@ -59362,15 +58978,16 @@ Run post-installation scripts in package <package>, if any exist.
    </nocompress>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT), use packagingroot for RPM</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT), use packagingroot for RPM</doc>
    </installroot>
    <packagingroot>
     <shortopt>P</shortopt>
-    <arg>DIR</arg>
     <doc>root directory used when packaging files, like RPM packaging</doc>
+    <arg>DIR</arg>
    </packagingroot>
    <ignore-errors>
+    <shortopt></shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <alldeps>
@@ -59403,7 +59020,7 @@ anywhere on the net.
 package.xml.  Useful for testing, or for wrapping a PEAR package in
 another package manager such as RPM.
 
-&quot;Package[-version/state][.tar]&quot; : queries your default channel&apos;s server
+&quot;Package[-version/state][.tar]&quot; : queries your default channel&#039;s server
 ({config master_server}) and downloads the newest package with
 the preferred quality/state ({config preferred_state}).
 
@@ -59423,6 +59040,11 @@ four ways of specifying packages.
   <function>doInstall</function>
   <shortcut>up</shortcut>
   <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>upgrade packages from a specific channel</doc>
+    <arg>CHAN</arg>
+   </channel>
    <force>
     <shortopt>f</shortopt>
     <doc>overwrite newer installed packages</doc>
@@ -59441,7 +59063,7 @@ four ways of specifying packages.
    </register-only>
    <nobuild>
     <shortopt>B</shortopt>
-    <doc>don&apos;t build C extensions</doc>
+    <doc>don&#039;t build C extensions</doc>
    </nobuild>
    <nocompress>
     <shortopt>Z</shortopt>
@@ -59449,10 +59071,11 @@ four ways of specifying packages.
    </nocompress>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT)</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
    </installroot>
    <ignore-errors>
+    <shortopt></shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <alldeps>
@@ -59484,10 +59107,15 @@ More than one package may be specified at once.
 </doc>
  </upgrade>
  <upgrade-all>
-  <summary>Upgrade All Packages</summary>
-  <function>doInstall</function>
+  <summary>Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters]</summary>
+  <function>doUpgradeAll</function>
   <shortcut>ua</shortcut>
   <options>
+   <channel>
+    <shortopt>c</shortopt>
+    <doc>upgrade packages from a specific channel</doc>
+    <arg>CHAN</arg>
+   </channel>
    <nodeps>
     <shortopt>n</shortopt>
     <doc>ignore dependencies, upgrade anyway</doc>
@@ -59498,7 +59126,7 @@ More than one package may be specified at once.
    </register-only>
    <nobuild>
     <shortopt>B</shortopt>
-    <doc>don&apos;t build C extensions</doc>
+    <doc>don&#039;t build C extensions</doc>
    </nobuild>
    <nocompress>
     <shortopt>Z</shortopt>
@@ -59506,17 +59134,21 @@ More than one package may be specified at once.
    </nocompress>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT), use packagingroot for RPM</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
    </installroot>
    <ignore-errors>
+    <shortopt></shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <loose>
+    <shortopt></shortopt>
     <doc>do not check for recommended dependency version</doc>
    </loose>
   </options>
   <doc>
+WARNING: This function is deprecated in favor of using the upgrade command with no params
+
 Upgrades all packages that have a newer release available.  Upgrades are
 done only if there is a release available of the state specified in
 &quot;preferred_state&quot; (currently {config preferred_state}), or a state considered
@@ -59538,10 +59170,11 @@ more stable.
    </register-only>
    <installroot>
     <shortopt>R</shortopt>
+    <doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT)</doc>
     <arg>DIR</arg>
-    <doc>root directory used when installing files (ala PHP&apos;s INSTALL_ROOT)</doc>
    </installroot>
    <ignore-errors>
+    <shortopt>f</shortopt>
     <doc>force install even if there were errors</doc>
    </ignore-errors>
    <offline>
@@ -59562,11 +59195,11 @@ channel not in your default channel ({config default_channel})
   <options>
    <destination>
     <shortopt>d</shortopt>
-    <arg>DIR</arg>
     <doc>Optional destination directory for unpacking (defaults to current path or &quot;ext&quot; if exists)</doc>
+    <arg>DIR</arg>
    </destination>
    <force>
-    <shortopt>f</shortopt>
+    <shortopt></shortopt>
     <doc>Force the unpacking even if there were errors in the package</doc>
    </force>
   </options>
@@ -59590,20 +59223,14 @@ Run post-installation scripts in package &lt;package&gt;, if any exist.
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.160 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.168 2009/03/27 19:35:47 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1.0
  * @deprecated File deprecated since Release 1.4.0a1
@@ -59614,8 +59241,6 @@ Run post-installation scripts in package &lt;package&gt;, if any exist.
  */
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
 
-// {{{ constants and globals
-
 /**
  * PEAR_Common error when an invalid PHP file is passed to PEAR_Common::analyzeSourceCode()
  */
@@ -59703,8 +59328,6 @@ $GLOBALS['_PEAR_Common_provide_types'] = array('ext', 'prog', 'class', 'function
  */
 $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'pre-uninstall', 'post-uninstall', 'pre-build', 'post-build', 'pre-configure', 'post-configure', 'pre-setup', 'post-setup');
 
-// }}}
-
 /**
  * Class providing common functionality for PEAR administration classes.
  * @category   pear
@@ -59712,9 +59335,9 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @deprecated This class will disappear, and its components will be spread
@@ -59722,20 +59345,6 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  */
 class PEAR_Common extends PEAR
 {
-    // {{{ properties
-
-    /** stack of elements, gives some sort of XML context */
-    var $element_stack = array();
-
-    /** name of currently parsed XML element */
-    var $current_element;
-
-    /** array of attributes of the currently parsed XML element */
-    var $current_attributes = array();
-
-    /** assoc with information about a package */
-    var $pkginfo = array();
-
     /**
      * User Interface object (PEAR_Frontend_* class).  If null,
      * the log() method uses print.
@@ -59749,24 +59358,27 @@ class PEAR_Common extends PEAR
      */
     var $config = null;
 
+    /** stack of elements, gives some sort of XML context */
+    var $element_stack = array();
+
+    /** name of currently parsed XML element */
+    var $current_element;
+
+    /** array of attributes of the currently parsed XML element */
+    var $current_attributes = array();
+
+    /** assoc with information about a package */
+    var $pkginfo = array();
+
     var $current_path = null;
 
     /**
-     * PEAR_SourceAnalyzer instance
-     * @var object
-     */
-    var $source_analyzer = null;
-    /**
      * Flag variable used to mark a valid package file
      * @var boolean
      * @access private
      */
     var $_validPackageFile;
 
-    // }}}
-
-    // {{{ constructor
-
     /**
      * PEAR_Common constructor
      *
@@ -59779,9 +59391,6 @@ class PEAR_Common extends PEAR
         $this->debug = $this->config->get('verbose');
     }
 
-    // }}}
-    // {{{ destructor
-
     /**
      * PEAR_Common destructor
      *
@@ -59797,6 +59406,7 @@ class PEAR_Common extends PEAR
                 if (!class_exists('System')) {
                     require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
                 }
+
                 System::rm(array('-rf', $file));
             } elseif (file_exists($file)) {
                 unlink($file);
@@ -59804,9 +59414,6 @@ class PEAR_Common extends PEAR
         }
     }
 
-    // }}}
-    // {{{ addTempFile()
-
     /**
      * Register a temporary file or directory.  When the destructor is
      * executed, all registered temporary files and directories are
@@ -59826,9 +59433,6 @@ class PEAR_Common extends PEAR
         PEAR_Frontend::addTempFile($file);
     }
 
-    // }}}
-    // {{{ mkDirHier()
-
     /**
      * Wrapper to System::mkDir(), creates a directory as well as
      * any necessary parent directories.
@@ -59841,6 +59445,7 @@ class PEAR_Common extends PEAR
      */
     function mkDirHier($dir)
     {
+        // Only used in Installer - move it there ?
         $this->log(2, "+ create dir $dir");
         if (!class_exists('System')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
@@ -59848,9 +59453,6 @@ class PEAR_Common extends PEAR
         return System::mkDir(array('-p', $dir));
     }
 
-    // }}}
-    // {{{ log()
-
     /**
      * Logging method.
      *
@@ -59868,6 +59470,7 @@ class PEAR_Common extends PEAR
             if (!class_exists('PEAR_Frontend')) {
                 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Frontend.php';
             }
+
             $ui = &PEAR_Frontend::singleton();
             if (is_a($ui, 'PEAR_Frontend')) {
                 $ui->log($msg, $append_crlf);
@@ -59877,9 +59480,6 @@ class PEAR_Common extends PEAR
         }
     }
 
-    // }}}
-    // {{{ mkTempDir()
-
     /**
      * Create and register a temporary directory.
      *
@@ -59893,25 +59493,20 @@ class PEAR_Common extends PEAR
      */
     function mkTempDir($tmpdir = '')
     {
-        if ($tmpdir) {
-            $topt = array('-t', $tmpdir);
-        } else {
-            $topt = array();
-        }
+        $topt = $tmpdir ? array('-t', $tmpdir) : array();
         $topt = array_merge($topt, array('-d', 'pear'));
         if (!class_exists('System')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
         }
+
         if (!$tmpdir = System::mktemp($topt)) {
             return false;
         }
+
         $this->addTempFile($tmpdir);
         return $tmpdir;
     }
 
-    // }}}
-    // {{{ setFrontendObject()
-
     /**
      * Set object that represents the frontend to be used.
      *
@@ -59924,9 +59519,164 @@ class PEAR_Common extends PEAR
         $this->ui = &$ui;
     }
 
-    // }}}
+    /**
+     * Return an array containing all of the states that are more stable than
+     * or equal to the passed in state
+     *
+     * @param string Release state
+     * @param boolean Determines whether to include $state in the list
+     * @return false|array False if $state is not a valid release state
+     */
+    function betterStates($state, $include = false)
+    {
+        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+        $i = array_search($state, $states);
+        if ($i === false) {
+            return false;
+        }
+        if ($include) {
+            $i--;
+        }
+        return array_slice($states, $i + 1);
+    }
+
+    /**
+     * Get the valid roles for a PEAR package maintainer
+     *
+     * @return array
+     * @static
+     */
+    function getUserRoles()
+    {
+        return $GLOBALS['_PEAR_Common_maintainer_roles'];
+    }
+
+    /**
+     * Get the valid package release states of packages
+     *
+     * @return array
+     * @static
+     */
+    function getReleaseStates()
+    {
+        return $GLOBALS['_PEAR_Common_release_states'];
+    }
+
+    /**
+     * Get the implemented dependency types (php, ext, pkg etc.)
+     *
+     * @return array
+     * @static
+     */
+    function getDependencyTypes()
+    {
+        return $GLOBALS['_PEAR_Common_dependency_types'];
+    }
+
+    /**
+     * Get the implemented dependency relations (has, lt, ge etc.)
+     *
+     * @return array
+     * @static
+     */
+    function getDependencyRelations()
+    {
+        return $GLOBALS['_PEAR_Common_dependency_relations'];
+    }
+
+    /**
+     * Get the implemented file roles
+     *
+     * @return array
+     * @static
+     */
+    function getFileRoles()
+    {
+        return $GLOBALS['_PEAR_Common_file_roles'];
+    }
+
+    /**
+     * Get the implemented file replacement types in
+     *
+     * @return array
+     * @static
+     */
+    function getReplacementTypes()
+    {
+        return $GLOBALS['_PEAR_Common_replacement_types'];
+    }
+
+    /**
+     * Get the implemented file replacement types in
+     *
+     * @return array
+     * @static
+     */
+    function getProvideTypes()
+    {
+        return $GLOBALS['_PEAR_Common_provide_types'];
+    }
 
-    // {{{ infoFromTgzFile()
+    /**
+     * Get the implemented file replacement types in
+     *
+     * @return array
+     * @static
+     */
+    function getScriptPhases()
+    {
+        return $GLOBALS['_PEAR_Common_script_phases'];
+    }
+
+    /**
+     * Test whether a string contains a valid package name.
+     *
+     * @param string $name the package name to test
+     *
+     * @return bool
+     *
+     * @access public
+     */
+    function validPackageName($name)
+    {
+        return (bool)preg_match(PEAR_COMMON_PACKAGE_NAME_PREG, $name);
+    }
+
+    /**
+     * Test whether a string contains a valid package version.
+     *
+     * @param string $ver the package version to test
+     *
+     * @return bool
+     *
+     * @access public
+     */
+    function validPackageVersion($ver)
+    {
+        return (bool)preg_match(PEAR_COMMON_PACKAGE_VERSION_PREG, $ver);
+    }
+
+    /**
+     * @param string $path relative or absolute include path
+     * @return boolean
+     * @static
+     */
+    function isIncludeable($path)
+    {
+        if (file_exists($path) && is_readable($path)) {
+            return true;
+        }
+
+        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
+        foreach ($ipath as $include) {
+            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
+            if (file_exists($test) && is_readable($test)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 
     /**
      * Returns information about a package file.  Expects the name of
@@ -59951,14 +59701,13 @@ class PEAR_Common extends PEAR
                     $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                 }
             }
+
             return $pf;
         }
+
         return $this->_postProcessValidPackagexml($pf);
     }
 
-    // }}}
-    // {{{ infoFromDescriptionFile()
-
     /**
      * Returns information about a package file.  Expects the name of
      * a package xml file as input.
@@ -59982,14 +59731,13 @@ class PEAR_Common extends PEAR
                     $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                 }
             }
+
             return $pf;
         }
+
         return $this->_postProcessValidPackagexml($pf);
     }
 
-    // }}}
-    // {{{ infoFromString()
-
     /**
      * Returns information about a package file.  Expects the contents
      * of a package xml file as input.
@@ -60013,11 +59761,12 @@ class PEAR_Common extends PEAR
                     $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                 }
             }
+
             return $pf;
         }
+
         return $this->_postProcessValidPackagexml($pf);
     }
-    // }}}
 
     /**
      * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
@@ -60025,37 +59774,36 @@ class PEAR_Common extends PEAR
      */
     function _postProcessValidPackagexml(&$pf)
     {
-        if (is_a($pf, 'PEAR_PackageFile_v2')) {
-            // sort of make this into a package.xml 1.0-style array
-            // changelog is not converted to old format.
-            $arr = $pf->toArray(true);
-            $arr = array_merge($arr, $arr['old']);
-            unset($arr['old']);
-            unset($arr['xsdversion']);
-            unset($arr['contents']);
-            unset($arr['compatible']);
-            unset($arr['channel']);
-            unset($arr['uri']);
-            unset($arr['dependencies']);
-            unset($arr['phprelease']);
-            unset($arr['extsrcrelease']);
-            unset($arr['zendextsrcrelease']);
-            unset($arr['extbinrelease']);
-            unset($arr['zendextbinrelease']);
-            unset($arr['bundle']);
-            unset($arr['lead']);
-            unset($arr['developer']);
-            unset($arr['helper']);
-            unset($arr['contributor']);
-            $arr['filelist'] = $pf->getFilelist();
-            $this->pkginfo = $arr;
-            return $arr;
-        } else {
+        if (!is_a($pf, 'PEAR_PackageFile_v2')) {
             $this->pkginfo = $pf->toArray();
             return $this->pkginfo;
         }
+
+        // sort of make this into a package.xml 1.0-style array
+        // changelog is not converted to old format.
+        $arr = $pf->toArray(true);
+        $arr = array_merge($arr, $arr['old']);
+        unset($arr['old']);
+        unset($arr['xsdversion']);
+        unset($arr['contents']);
+        unset($arr['compatible']);
+        unset($arr['channel']);
+        unset($arr['uri']);
+        unset($arr['dependencies']);
+        unset($arr['phprelease']);
+        unset($arr['extsrcrelease']);
+        unset($arr['zendextsrcrelease']);
+        unset($arr['extbinrelease']);
+        unset($arr['zendextbinrelease']);
+        unset($arr['bundle']);
+        unset($arr['lead']);
+        unset($arr['developer']);
+        unset($arr['helper']);
+        unset($arr['contributor']);
+        $arr['filelist'] = $pf->getFilelist();
+        $this->pkginfo = $arr;
+        return $arr;
     }
-    // {{{ infoFromAny()
 
     /**
      * Returns package information from different sources
@@ -60080,16 +59828,16 @@ class PEAR_Common extends PEAR
                         $e = $this->raiseError($error['message'], $error['code'], null, null, $error);
                     }
                 }
+
                 return $pf;
             }
+
             return $this->_postProcessValidPackagexml($pf);
         }
+
         return $info;
     }
 
-    // }}}
-    // {{{ xmlFromInfo()
-
     /**
      * Return an XML document based on the package info (as returned
      * by the PEAR_Common::infoFrom* methods).
@@ -60103,16 +59851,13 @@ class PEAR_Common extends PEAR
      */
     function xmlFromInfo($pkginfo)
     {
-        $config = &PEAR_Config::singleton();
+        $config      = &PEAR_Config::singleton();
         $packagefile = &new PEAR_PackageFile($config);
         $pf = &$packagefile->fromArray($pkginfo);
         $gen = &$pf->getDefaultGenerator();
         return $gen->toXml(PEAR_VALIDATE_PACKAGING);
     }
 
-    // }}}
-    // {{{ validatePackageInfo()
-
     /**
      * Validate XML package definition file.
      *
@@ -60128,7 +59873,7 @@ class PEAR_Common extends PEAR
      */
     function validatePackageInfo($info, &$errors, &$warnings, $dir_prefix = '')
     {
-        $config = &PEAR_Config::singleton();
+        $config      = &PEAR_Config::singleton();
         $packagefile = &new PEAR_PackageFile($config);
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         if (strpos($info, '<?xml') !== false) {
@@ -60136,6 +59881,7 @@ class PEAR_Common extends PEAR
         } else {
             $pf = &$packagefile->fromAnyFile($info, PEAR_VALIDATE_NORMAL);
         }
+
         PEAR::staticPopErrorHandling();
         if (PEAR::isError($pf)) {
             $errs = $pf->getUserinfo();
@@ -60148,14 +59894,13 @@ class PEAR_Common extends PEAR
                     }
                 }
             }
+
             return false;
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ buildProvidesArray()
-
     /**
      * Build a "provides" array from data returned by
      * analyzeSourceCode().  The format of the built array is like
@@ -60182,12 +59927,14 @@ class PEAR_Common extends PEAR
         if (isset($this->_packageName)) {
             $pn = $this->_packageName;
         }
+
         $pnl = strlen($pn);
         foreach ($srcinfo['declared_classes'] as $class) {
             $key = "class;$class";
             if (isset($this->pkginfo['provides'][$key])) {
                 continue;
             }
+
             $this->pkginfo['provides'][$key] =
                 array('file'=> $file, 'type' => 'class', 'name' => $class);
             if (isset($srcinfo['inheritance'][$class])) {
@@ -60195,6 +59942,7 @@ class PEAR_Common extends PEAR
                     $srcinfo['inheritance'][$class];
             }
         }
+
         foreach ($srcinfo['declared_methods'] as $class => $methods) {
             foreach ($methods as $method) {
                 $function = "$class::$method";
@@ -60203,6 +59951,7 @@ class PEAR_Common extends PEAR
                     isset($this->pkginfo['provides'][$key])) {
                     continue;
                 }
+
                 $this->pkginfo['provides'][$key] =
                     array('file'=> $file, 'type' => 'function', 'name' => $function);
             }
@@ -60213,17 +59962,16 @@ class PEAR_Common extends PEAR
             if ($function{0} == '_' || isset($this->pkginfo['provides'][$key])) {
                 continue;
             }
+
             if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
                 $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
             }
+
             $this->pkginfo['provides'][$key] =
                 array('file'=> $file, 'type' => 'function', 'name' => $function);
         }
     }
 
-    // }}}
-    // {{{ analyzeSourceCode()
-
     /**
      * Analyze the source code of the given PHP file
      *
@@ -60233,231 +59981,28 @@ class PEAR_Common extends PEAR
      */
     function analyzeSourceCode($file)
     {
-        if (!function_exists("token_get_all")) {
-            return false;
-        }
-        if (!defined('T_DOC_COMMENT')) {
-            define('T_DOC_COMMENT', T_COMMENT);
-        }
-        if (!defined('T_INTERFACE')) {
-            define('T_INTERFACE', -1);
+        if (!class_exists('PEAR_PackageFile_v2_Validator')) {
+            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2/Validator.php';
         }
-        if (!defined('T_IMPLEMENTS')) {
-            define('T_IMPLEMENTS', -1);
-        }
-        if (!$fp = @fopen($file, "r")) {
-            return false;
-        }
-        fclose($fp);
-        $contents = file_get_contents($file);
-        $tokens = token_get_all($contents);
-/*
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            @list($token, $data) = $tokens[$i];
-            if (is_string($token)) {
-                var_dump($token);
-            } else {
-                print token_name($token) . ' ';
-                var_dump(rtrim($data));
-            }
-        }
-*/
-        $look_for = 0;
-        $paren_level = 0;
-        $bracket_level = 0;
-        $brace_level = 0;
-        $lastphpdoc = '';
-        $current_class = '';
-        $current_interface = '';
-        $current_class_level = -1;
-        $current_function = '';
-        $current_function_level = -1;
-        $declared_classes = array();
-        $declared_interfaces = array();
-        $declared_functions = array();
-        $declared_methods = array();
-        $used_classes = array();
-        $used_functions = array();
-        $extends = array();
-        $implements = array();
-        $nodeps = array();
-        $inquote = false;
-        $interface = false;
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            if (is_array($tokens[$i])) {
-                list($token, $data) = $tokens[$i];
-            } else {
-                $token = $tokens[$i];
-                $data = '';
-            }
-            if ($inquote) {
-                if ($token != '"') {
-                    continue;
-                } else {
-                    $inquote = false;
-                    continue;
-                }
-            }
-            switch ($token) {
-                case T_WHITESPACE:
-                    continue;
-                case ';':
-                    if ($interface) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    break;
-                case '"':
-                    $inquote = true;
-                    break;
-                case T_CURLY_OPEN:
-                case T_DOLLAR_OPEN_CURLY_BRACES:
-                case '{': $brace_level++; continue 2;
-                case '}':
-                    $brace_level--;
-                    if ($current_class_level == $brace_level) {
-                        $current_class = '';
-                        $current_class_level = -1;
-                    }
-                    if ($current_function_level == $brace_level) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    continue 2;
-                case '[': $bracket_level++; continue 2;
-                case ']': $bracket_level--; continue 2;
-                case '(': $paren_level++;   continue 2;
-                case ')': $paren_level--;   continue 2;
-                case T_INTERFACE:
-                    $interface = true;
-                case T_CLASS:
-                    if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
-                            PEAR_COMMON_ERROR_INVALIDPHP);
-                        return false;
-                    }
-                case T_FUNCTION:
-                case T_NEW:
-                case T_EXTENDS:
-                case T_IMPLEMENTS:
-                    $look_for = $token;
-                    continue 2;
-                case T_STRING:
-                    if (version_compare(zend_version(), '2.0', '<')) {
-                        if (in_array(strtolower($data),
-                            array('public', 'private', 'protected', 'abstract',
-                                  'interface', 'implements', 'throw') 
-                                 )) {
-                            PEAR::raiseError('Error: PHP5 token encountered in ' . $file . 
-                            'packaging should be done in PHP 5');
-                            return false;
-                        }
-                    }
-                    if ($look_for == T_CLASS) {
-                        $current_class = $data;
-                        $current_class_level = $brace_level;
-                        $declared_classes[] = $current_class;
-                    } elseif ($look_for == T_INTERFACE) {
-                        $current_interface = $data;
-                        $current_class_level = $brace_level;
-                        $declared_interfaces[] = $current_interface;
-                    } elseif ($look_for == T_IMPLEMENTS) {
-                        $implements[$current_class] = $data;
-                    } elseif ($look_for == T_EXTENDS) {
-                        $extends[$current_class] = $data;
-                    } elseif ($look_for == T_FUNCTION) {
-                        if ($current_class) {
-                            $current_function = "$current_class::$data";
-                            $declared_methods[$current_class][] = $data;
-                        } elseif ($current_interface) {
-                            $current_function = "$current_interface::$data";
-                            $declared_methods[$current_interface][] = $data;
-                        } else {
-                            $current_function = $data;
-                            $declared_functions[] = $current_function;
-                        }
-                        $current_function_level = $brace_level;
-                        $m = array();
-                    } elseif ($look_for == T_NEW) {
-                        $used_classes[$data] = true;
-                    }
-                    $look_for = 0;
-                    continue 2;
-                case T_VARIABLE:
-                    $look_for = 0;
-                    continue 2;
-                case T_DOC_COMMENT:
-                case T_COMMENT:
-                    if (preg_match('!^/\*\*\s!', $data)) {
-                        $lastphpdoc = $data;
-                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
-                            $nodeps = array_merge($nodeps, $m[1]);
-                        }
-                    }
-                    continue 2;
-                case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
-                            PEAR_COMMON_ERROR_INVALIDPHP);
-                        return false;
-                    }
-                    $class = $tokens[$i - 1][1];
-                    if (strtolower($class) != 'parent') {
-                        $used_classes[$class] = true;
-                    }
-                    continue 2;
-            }
-        }
-        return array(
-            "source_file" => $file,
-            "declared_classes" => $declared_classes,
-            "declared_interfaces" => $declared_interfaces,
-            "declared_methods" => $declared_methods,
-            "declared_functions" => $declared_functions,
-            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
-            "inheritance" => $extends,
-            "implements" => $implements,
-            );
-    }
-
-    // }}}
-    // {{{  betterStates()
 
-    /**
-     * Return an array containing all of the states that are more stable than
-     * or equal to the passed in state
-     *
-     * @param string Release state
-     * @param boolean Determines whether to include $state in the list
-     * @return false|array False if $state is not a valid release state
-     */
-    function betterStates($state, $include = false)
-    {
-        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
-        $i = array_search($state, $states);
-        if ($i === false) {
-            return false;
-        }
-        if ($include) {
-            $i--;
-        }
-        return array_slice($states, $i + 1);
+        $a = new PEAR_PackageFile_v2_Validator;
+        return $a->analyzeSourceCode($file);
     }
 
-    // }}}
-    // {{{ detectDependencies()
-
     function detectDependencies($any, $status_callback = null)
     {
         if (!function_exists("token_get_all")) {
             return false;
         }
+
         if (PEAR::isError($info = $this->infoFromAny($any))) {
             return $this->raiseError($info);
         }
+
         if (!is_array($info)) {
             return false;
         }
+
         $deps = array();
         $used_c = $decl_c = $decl_f = $decl_m = array();
         foreach ($info['filelist'] as $file => $fa) {
@@ -60468,9 +60013,11 @@ class PEAR_Common extends PEAR
             $decl_m = @array_merge($decl_m, $tmp['declared_methods']);
             $inheri = @array_merge($inheri, $tmp['inheritance']);
         }
+
         $used_c = array_unique($used_c);
         $decl_c = array_unique($decl_c);
         $undecl_c = array_diff($used_c, $decl_c);
+
         return array('used_classes' => $used_c,
                      'declared_classes' => $decl_c,
                      'declared_methods' => $decl_m,
@@ -60480,158 +60027,6 @@ class PEAR_Common extends PEAR
                      );
     }
 
-    // }}}
-    // {{{ getUserRoles()
-
-    /**
-     * Get the valid roles for a PEAR package maintainer
-     *
-     * @return array
-     * @static
-     */
-    function getUserRoles()
-    {
-        return $GLOBALS['_PEAR_Common_maintainer_roles'];
-    }
-
-    // }}}
-    // {{{ getReleaseStates()
-
-    /**
-     * Get the valid package release states of packages
-     *
-     * @return array
-     * @static
-     */
-    function getReleaseStates()
-    {
-        return $GLOBALS['_PEAR_Common_release_states'];
-    }
-
-    // }}}
-    // {{{ getDependencyTypes()
-
-    /**
-     * Get the implemented dependency types (php, ext, pkg etc.)
-     *
-     * @return array
-     * @static
-     */
-    function getDependencyTypes()
-    {
-        return $GLOBALS['_PEAR_Common_dependency_types'];
-    }
-
-    // }}}
-    // {{{ getDependencyRelations()
-
-    /**
-     * Get the implemented dependency relations (has, lt, ge etc.)
-     *
-     * @return array
-     * @static
-     */
-    function getDependencyRelations()
-    {
-        return $GLOBALS['_PEAR_Common_dependency_relations'];
-    }
-
-    // }}}
-    // {{{ getFileRoles()
-
-    /**
-     * Get the implemented file roles
-     *
-     * @return array
-     * @static
-     */
-    function getFileRoles()
-    {
-        return $GLOBALS['_PEAR_Common_file_roles'];
-    }
-
-    // }}}
-    // {{{ getReplacementTypes()
-
-    /**
-     * Get the implemented file replacement types in
-     *
-     * @return array
-     * @static
-     */
-    function getReplacementTypes()
-    {
-        return $GLOBALS['_PEAR_Common_replacement_types'];
-    }
-
-    // }}}
-    // {{{ getProvideTypes()
-
-    /**
-     * Get the implemented file replacement types in
-     *
-     * @return array
-     * @static
-     */
-    function getProvideTypes()
-    {
-        return $GLOBALS['_PEAR_Common_provide_types'];
-    }
-
-    // }}}
-    // {{{ getScriptPhases()
-
-    /**
-     * Get the implemented file replacement types in
-     *
-     * @return array
-     * @static
-     */
-    function getScriptPhases()
-    {
-        return $GLOBALS['_PEAR_Common_script_phases'];
-    }
-
-    // }}}
-    // {{{ validPackageName()
-
-    /**
-     * Test whether a string contains a valid package name.
-     *
-     * @param string $name the package name to test
-     *
-     * @return bool
-     *
-     * @access public
-     */
-    function validPackageName($name)
-    {
-        return (bool)preg_match(PEAR_COMMON_PACKAGE_NAME_PREG, $name);
-    }
-
-
-    // }}}
-    // {{{ validPackageVersion()
-
-    /**
-     * Test whether a string contains a valid package version.
-     *
-     * @param string $ver the package version to test
-     *
-     * @return bool
-     *
-     * @access public
-     */
-    function validPackageVersion($ver)
-    {
-        return (bool)preg_match(PEAR_COMMON_PACKAGE_VERSION_PREG, $ver);
-    }
-
-
-    // }}}
-
-    // {{{ downloadHttp()
-
     /**
      * Download a file through HTTP.  Considers suggested file name in
      * Content-disposition: header and can run a callback function for
@@ -60684,50 +60079,22 @@ class PEAR_Common extends PEAR
         }
         return PEAR_Downloader::downloadHttp($url, $ui, $save_dir, $callback);
     }
-
-    // }}}
-
-    /**
-     * @param string $path relative or absolute include path
-     * @return boolean
-     * @static
-     */
-    function isIncludeable($path)
-    {
-        if (file_exists($path) && is_readable($path)) {
-            return true;
-        }
-        $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
-        foreach ($ipath as $include) {
-            $test = realpath($include . DIRECTORY_SEPARATOR . $path);
-            if (file_exists($test) && is_readable($test)) {
-                return true;
-            }
-        }
-        return false;
-    }
 }
+
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Config.php';
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile.php';
-?><?php
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile.php';<?php
 /**
  * PEAR_Config, customized configuration handling for the PEAR Installer
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Config.php,v 1.146 2008/05/14 04:16:08 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Config.php,v 1.157 2009/02/25 00:23:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -60739,7 +60106,6 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Registry.php';
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role.php';
 require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Remote.php';
 
 /**
  * Last created PEAR_Config instance.
@@ -60760,8 +60126,11 @@ if (!defined('PEAR_INSTALL_DIR') || !PEAR_INSTALL_DIR) {
 
 // default channel and preferred mirror is based on whether we are invoked through
 // the "pear" or the "pecl" command
+if (!defined('PEAR_RUNTYPE')) {
+    define('PEAR_RUNTYPE', 'pear');
+}
 
-if (!defined('PEAR_RUNTYPE') || PEAR_RUNTYPE == 'pear') {
+if (PEAR_RUNTYPE == 'pear') {
     define('PEAR_CONFIG_DEFAULT_CHANNEL', 'pear.php.net');
 } else {
     define('PEAR_CONFIG_DEFAULT_CHANNEL', 'pecl.php.net');
@@ -60795,9 +60164,8 @@ if (getenv('PHP_PEAR_HTTP_PROXY')) {
 if (getenv('PHP_PEAR_INSTALL_DIR')) {
     define('PEAR_CONFIG_DEFAULT_PHP_DIR', getenv('PHP_PEAR_INSTALL_DIR'));
 } else {
-    if (file_exists($PEAR_INSTALL_DIR) && is_dir($PEAR_INSTALL_DIR)) {
-        define('PEAR_CONFIG_DEFAULT_PHP_DIR',
-               $PEAR_INSTALL_DIR);
+    if (@file_exists($PEAR_INSTALL_DIR) && is_dir($PEAR_INSTALL_DIR)) {
+        define('PEAR_CONFIG_DEFAULT_PHP_DIR', $PEAR_INSTALL_DIR);
     } else {
         define('PEAR_CONFIG_DEFAULT_PHP_DIR', $PEAR_INSTALL_DIR);
     }
@@ -60960,16 +60328,14 @@ if (getenv('PHP_PEAR_SIG_KEYDIR')) {
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Config extends PEAR
 {
-    // {{{ properties
-
     /**
      * Array of config files used.
      *
@@ -60981,7 +60347,7 @@ class PEAR_Config extends PEAR
         );
 
     var $layers = array();
-    
+
     /**
      * Configuration data, two-dimensional array where the first
      * dimension is the config layer ('user', 'system' and 'default'),
@@ -60999,7 +60365,7 @@ class PEAR_Config extends PEAR
         'system' => array(),
         'default' => array(),
         );
-    
+
     /**
      * Configuration values that can be set for a channel
      *
@@ -61009,8 +60375,8 @@ class PEAR_Config extends PEAR
      */
     var $_channelConfigInfo = array(
         'php_dir', 'ext_dir', 'doc_dir', 'bin_dir', 'data_dir', 'cfg_dir',
-        'test_dir', 'www_dir', 'php_bin', 'username', 'password', 'verbose',
-        'preferred_state', 'umask', 'preferred_mirror', 'php_ini'
+        'test_dir', 'www_dir', 'php_bin', 'php_prefix', 'php_suffix', 'username',
+        'password', 'verbose', 'preferred_state', 'umask', 'preferred_mirror', 'php_ini'
         );
 
     /**
@@ -61168,7 +60534,7 @@ class PEAR_Config extends PEAR
         'cache_dir' => array(
             'type' => 'directory',
             'default' => PEAR_CONFIG_DEFAULT_CACHE_DIR,
-            'doc' => 'directory which is used for XMLRPC cache',
+            'doc' => 'directory which is used for web service cache',
             'prompt' => 'PEAR Installer cache directory',
             'group' => 'File Locations (Advanced)',
             ),
@@ -61193,6 +60559,20 @@ class PEAR_Config extends PEAR
             'prompt' => 'PHP CLI/CGI binary',
             'group' => 'File Locations (Advanced)',
             ),
+        'php_prefix' => array(
+            'type' => 'string',
+            'default' => '',
+            'doc' => '--program-prefix for php_bin\'s ./configure, used for pecl installs',
+            'prompt' => '--program-prefix passed to PHP\'s ./configure',
+            'group' => 'File Locations (Advanced)',
+            ),
+        'php_suffix' => array(
+            'type' => 'string',
+            'default' => '',
+            'doc' => '--program-suffix for php_bin\'s ./configure, used for pecl installs',
+            'prompt' => '--program-suffix passed to PHP\'s ./configure',
+            'group' => 'File Locations (Advanced)',
+            ),
         'php_ini' => array(
             'type' => 'file',
             'default' => '',
@@ -61282,10 +60662,6 @@ class PEAR_Config extends PEAR
         // __channels is reserved - used for channel-specific configuration
         );
 
-    // }}}
-
-    // {{{ PEAR_Config([file], [defaults_file])
-
     /**
      * Constructor.
      *
@@ -61313,16 +60689,18 @@ class PEAR_Config extends PEAR
                 $user_file = getenv('HOME') . $sl . '.pearrc';
             }
         }
+
         if (empty($system_file)) {
+            $system_file = PEAR_CONFIG_SYSCONFDIR . $sl;
             if (OS_WINDOWS) {
-                $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pearsys.ini';
+                $system_file .= 'pearsys.ini';
             } else {
-                $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf';
+                $system_file .= 'pear.conf';
             }
         }
 
         $this->layers = array_keys($this->configuration);
-        $this->files['user'] = $user_file;
+        $this->files['user']   = $user_file;
         $this->files['system'] = $system_file;
         if ($user_file && file_exists($user_file)) {
             $this->pushErrorHandling(PEAR_ERROR_RETURN);
@@ -61333,7 +60711,7 @@ class PEAR_Config extends PEAR
             }
         }
 
-        if ($system_file && file_exists($system_file)) {
+        if ($system_file && @file_exists($system_file)) {
             $this->mergeConfigFile($system_file, false, 'system', $strict);
             if ($this->_errorsFound > 0) {
                 return;
@@ -61359,7 +60737,6 @@ class PEAR_Config extends PEAR
         //$GLOBALS['_PEAR_Config_instance'] = &$this;
     }
 
-    // }}}
     /**
      * Return the default locations of user and system configuration files
      * @static
@@ -61369,17 +60746,16 @@ class PEAR_Config extends PEAR
         $sl = DIRECTORY_SEPARATOR;
         if (OS_WINDOWS) {
             return array(
-                'user' => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.ini',
+                'user'   => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.ini',
                 'system' =>  PEAR_CONFIG_SYSCONFDIR . $sl . 'pearsys.ini'
             );
-        } else {
-            return array(
-                'user' => getenv('HOME') . $sl . '.pearrc',
-                'system' => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf'
-            );
         }
+
+        return array(
+            'user'   => getenv('HOME') . $sl . '.pearrc',
+            'system' => PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf'
+        );
     }
-    // {{{ singleton([file], [defaults_file])
 
     /**
      * Static singleton method.  If you want to keep only one instance
@@ -61411,9 +60787,6 @@ class PEAR_Config extends PEAR
         return $GLOBALS['_PEAR_Config_instance'];
     }
 
-    // }}}
-    // {{{ validConfiguration()
-
     /**
      * Determine whether any configuration files have been detected, and whether a
      * registry object can be retrieved from this configuration.
@@ -61425,12 +60798,10 @@ class PEAR_Config extends PEAR
         if ($this->isDefinedLayer('user') || $this->isDefinedLayer('system')) {
             return true;
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ readConfigFile([file], [layer])
-
     /**
      * Reads configuration data from a file.  All existing values in
      * the config layer are discarded and replaced with data from the
@@ -61451,20 +60822,18 @@ class PEAR_Config extends PEAR
         }
 
         $data = $this->_readConfigDataFrom($file);
-
         if (PEAR::isError($data)) {
-            if ($strict) {
-                $this->_errorsFound++;
-                $this->lastError = $data;
-
-                return $data;
-            } else {
+            if (!$strict) {
                 return true;
             }
-        } else {
-            $this->files[$layer] = $file;
+
+            $this->_errorsFound++;
+            $this->lastError = $data;
+
+            return $data;
         }
 
+        $this->files[$layer] = $file;
         $this->_decodeInput($data);
         $this->configuration[$layer] = $data;
         $this->_setupChannels();
@@ -61478,8 +60847,6 @@ class PEAR_Config extends PEAR
         return true;
     }
 
-    // }}}
-
     /**
      * @param string url to the remote config file, like ftp://www.example.com/pear/config.ini
      * @return true|PEAR_Error
@@ -61495,61 +60862,64 @@ class PEAR_Config extends PEAR
                     require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/FTP.php';
                 }
             }
-            if (class_exists('PEAR_FTP')) {
-                $this->_ftp = &new PEAR_FTP;
-                $this->_ftp->pushErrorHandling(PEAR_ERROR_RETURN);
-                $e = $this->_ftp->init($path);
-                if (PEAR::isError($e)) {
-                    $this->_ftp->popErrorHandling();
-                    return $e;
-                }
-                $tmp = System::mktemp('-d');
-                PEAR_Common::addTempFile($tmp);
-                $e = $this->_ftp->get(basename($path), $tmp . DIRECTORY_SEPARATOR .
-                    'pear.ini', false, FTP_BINARY);
-                if (PEAR::isError($e)) {
-                    $this->_ftp->popErrorHandling();
-                    return $e;
-                }
-                PEAR_Common::addTempFile($tmp . DIRECTORY_SEPARATOR . 'pear.ini');
-                $this->_ftp->disconnect();
+
+            if (!class_exists('PEAR_FTP')) {
+                return PEAR::raiseError('PEAR_RemoteInstaller must be installed to use remote config');
+            }
+
+            $this->_ftp = &new PEAR_FTP;
+            $this->_ftp->pushErrorHandling(PEAR_ERROR_RETURN);
+            $e = $this->_ftp->init($path);
+            if (PEAR::isError($e)) {
                 $this->_ftp->popErrorHandling();
-                $this->files['ftp'] = $tmp . DIRECTORY_SEPARATOR . 'pear.ini';
-                $e = $this->readConfigFile(null, 'ftp');
-                if (PEAR::isError($e)) {
-                    return $e;
-                }
-                $fail = array();
-                foreach ($this->configuration_info as $key => $val) {
-                    if (in_array($this->getGroup($key),
-                          array('File Locations', 'File Locations (Advanced)')) &&
-                          $this->getType($key) == 'directory') {
-                        // any directory configs must be set for this to work
-                        if (!isset($this->configuration['ftp'][$key])) {
-                            $fail[] = $key;
-                        }
+                return $e;
+            }
+
+            $tmp = System::mktemp('-d');
+            PEAR_Common::addTempFile($tmp);
+            $e = $this->_ftp->get(basename($path), $tmp . DIRECTORY_SEPARATOR .
+                'pear.ini', false, FTP_BINARY);
+            if (PEAR::isError($e)) {
+                $this->_ftp->popErrorHandling();
+                return $e;
+            }
+
+            PEAR_Common::addTempFile($tmp . DIRECTORY_SEPARATOR . 'pear.ini');
+            $this->_ftp->disconnect();
+            $this->_ftp->popErrorHandling();
+            $this->files['ftp'] = $tmp . DIRECTORY_SEPARATOR . 'pear.ini';
+            $e = $this->readConfigFile(null, 'ftp');
+            if (PEAR::isError($e)) {
+                return $e;
+            }
+
+            $fail = array();
+            foreach ($this->configuration_info as $key => $val) {
+                if (in_array($this->getGroup($key),
+                      array('File Locations', 'File Locations (Advanced)')) &&
+                      $this->getType($key) == 'directory') {
+                    // any directory configs must be set for this to work
+                    if (!isset($this->configuration['ftp'][$key])) {
+                        $fail[] = $key;
                     }
                 }
-                if (count($fail)) {
-                    $fail = '"' . implode('", "', $fail) . '"';
-                    unset($this->files['ftp']);
-                    unset($this->configuration['ftp']);
-                    return PEAR::raiseError('ERROR: Ftp configuration file must set all ' .
-                        'directory configuration variables.  These variables were not set: ' .
-                        $fail);
-                } else {
-                    return true;
-                }
-            } else {
-                return PEAR::raiseError('PEAR_RemoteInstaller must be installed to use remote config');
             }
+
+            if (!count($fail)) {
+                return true;
+            }
+
+            $fail = '"' . implode('", "', $fail) . '"';
+            unset($this->files['ftp']);
+            unset($this->configuration['ftp']);
+            return PEAR::raiseError('ERROR: Ftp configuration file must set all ' .
+                'directory configuration variables.  These variables were not set: ' .
+                $fail);
         } while (false); // poor man's catch
         unset($this->files['ftp']);
         return PEAR::raiseError('no remote host specified');
     }
 
-    // {{{ _setupChannels()
-    
     /**
      * Reads the existing configurations and creates the _channels array from it
      */
@@ -61568,26 +60938,20 @@ class PEAR_Config extends PEAR
         $this->setChannels($this->_channels);
     }
 
-    // }}}
-    // {{{ deleteChannel(channel)
-
     function deleteChannel($channel)
     {
+        $ch = strtolower($channel);
         foreach ($this->configuration as $layer => $data) {
-            if (isset($data['__channels'])) {
-                if (isset($data['__channels'][strtolower($channel)])) {
-                    unset($this->configuration[$layer]['__channels'][strtolower($channel)]);
-                }
+            if (isset($data['__channels']) && isset($data['__channels'][$ch])) {
+                unset($this->configuration[$layer]['__channels'][$ch]);
             }
         }
+
         $this->_channels = array_flip($this->_channels);
-        unset($this->_channels[strtolower($channel)]);
+        unset($this->_channels[$ch]);
         $this->_channels = array_flip($this->_channels);
     }
 
-    // }}}
-    // {{{ mergeConfigFile(file, [override], [layer])
-
     /**
      * Merges data into a config layer from a file.  Does the same
      * thing as readConfigFile, except it does not replace all
@@ -61603,20 +60967,23 @@ class PEAR_Config extends PEAR
         if (empty($this->files[$layer])) {
             return $this->raiseError("unknown config layer `$layer'");
         }
+
         if ($file === null) {
             $file = $this->files[$layer];
         }
+
         $data = $this->_readConfigDataFrom($file);
         if (PEAR::isError($data)) {
-            if ($strict) {
-                $this->_errorsFound++;
-                $this->lastError = $data;
-
-                return $data;
-            } else {
+            if (!$strict) {
                 return true;
             }
+
+            $this->_errorsFound++;
+            $this->lastError = $data;
+
+            return $data;
         }
+
         $this->_decodeInput($data);
         if ($override) {
             $this->configuration[$layer] =
@@ -61625,6 +60992,7 @@ class PEAR_Config extends PEAR
             $this->configuration[$layer] =
                 PEAR_Config::arrayMergeRecursive($data, $this->configuration[$layer]);
         }
+
         $this->_setupChannels();
         if (!$this->_noRegistry && ($phpdir = $this->get('php_dir', $layer, 'pear.php.net'))) {
             $this->_registry[$layer] = &new PEAR_Registry($phpdir);
@@ -61636,8 +61004,6 @@ class PEAR_Config extends PEAR
         return true;
     }
 
-    // }}}
-    // {{{ arrayMergeRecursive($arr2, $arr1)
     /**
      * @param array
      * @param array
@@ -61663,12 +61029,10 @@ class PEAR_Config extends PEAR
                 unset($arr1[$key]);
             }
         }
+
         return array_merge($ret, $arr1);
     }
 
-    // }}}
-    // {{{ writeConfigFile([file], [layer])
-
     /**
      * Writes data into a config layer from a file.
      *
@@ -61690,25 +61054,31 @@ class PEAR_Config extends PEAR
             }
             return true;
         }
+
         if (empty($this->files[$layer])) {
             return $this->raiseError("unknown config file type `$layer'");
         }
+
         if ($file === null) {
             $file = $this->files[$layer];
         }
+
         $data = ($data === null) ? $this->configuration[$layer] : $data;
         $this->_encodeOutput($data);
         $opt = array('-p', dirname($file));
         if (!@System::mkDir($opt)) {
             return $this->raiseError("could not create directory: " . dirname($file));
         }
+
         if (file_exists($file) && is_file($file) && !is_writeable($file)) {
             return $this->raiseError("no write access to $file!");
         }
+
         $fp = @fopen($file, "w");
         if (!$fp) {
             return $this->raiseError("PEAR_Config::writeConfigFile fopen('$file','w') failed ($php_errormsg)");
         }
+
         $contents = "#PEAR_Config 0.9\n" . serialize($data);
         if (!@fwrite($fp, $contents)) {
             return $this->raiseError("PEAR_Config::writeConfigFile: fwrite failed ($php_errormsg)");
@@ -61716,17 +61086,12 @@ class PEAR_Config extends PEAR
         return true;
     }
 
-    // }}}
-    // {{{ _readConfigDataFrom(file)
-
     /**
      * Reads configuration data from a file and returns the parsed data
      * in an array.
      *
      * @param string file to read from
-     *
      * @return array configuration data or a PEAR error on failure
-     *
      * @access private
      */
     function _readConfigDataFrom($file)
@@ -61735,9 +61100,11 @@ class PEAR_Config extends PEAR
         if (file_exists($file)) {
             $fp = @fopen($file, "r");
         }
+
         if (!$fp) {
             return $this->raiseError("PEAR_Config::readConfigFile fopen('$file','r') failed");
         }
+
         $size = filesize($file);
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
@@ -61746,7 +61113,7 @@ class PEAR_Config extends PEAR
         if (empty($contents)) {
             return $this->raiseError('Configuration file "' . $file . '" is empty');
         }
-        
+
         set_magic_quotes_runtime($rt);
 
         $version = false;
@@ -61759,8 +61126,8 @@ class PEAR_Config extends PEAR
                 $version = '0.1';
             }
         }
-        if ($version && version_compare("$version", '1', '<')) {
 
+        if ($version && version_compare("$version", '1', '<')) {
             // no '@', it is possible that unserialize
             // raises a notice but it seems to block IO to
             // STDOUT if a '@' is used and a notice is raise
@@ -61779,33 +61146,29 @@ class PEAR_Config extends PEAR
                     $error = "PEAR_Config: bad data in $file";
                     $err = $this->raiseError($error);
                     return $err;
-                } else {
-                    $data = array();
                 }
+
+                $data = array();
             }
         // add parsing of newer formats here...
         } else {
             $err = $this->raiseError("$file: unknown version `$version'");
-            return $err; 
+            return $err;
         }
+
         return $data;
     }
 
-    // }}}
-    // {{{ getConfFile(layer)
     /**
     * Gets the file used for storing the config for a layer
     *
     * @param string $layer 'user' or 'system'
     */
-
     function getConfFile($layer)
     {
         return $this->files[$layer];
     }
 
-    // }}}
-
     /**
      * @param string Configuration class name, used for detecting duplicate calls
      * @param array information on a role as parsed from its xml file
@@ -61818,92 +61181,96 @@ class PEAR_Config extends PEAR
         if (isset($called[$class])) {
             return;
         }
+
         $called[$class] = 1;
         if (count($vars) > 3) {
             return $this->raiseError('Roles can only define 3 new config variables or less');
         }
+
         foreach ($vars as $name => $var) {
             if (!is_array($var)) {
                 return $this->raiseError('Configuration information must be an array');
             }
+
             if (!isset($var['type'])) {
                 return $this->raiseError('Configuration information must contain a type');
-            } else {
-                if (!in_array($var['type'],
-                      array('string', 'mask', 'password', 'directory', 'file', 'set'))) {
-                    return $this->raiseError(
-                        'Configuration type must be one of directory, file, string, ' .
-                        'mask, set, or password');
-                }
+            } elseif (!in_array($var['type'],
+                    array('string', 'mask', 'password', 'directory', 'file', 'set'))) {
+                  return $this->raiseError(
+                      'Configuration type must be one of directory, file, string, ' .
+                      'mask, set, or password');
             }
             if (!isset($var['default'])) {
                 return $this->raiseError(
                     'Configuration information must contain a default value ("default" index)');
-            } else {
-                if (is_array($var['default'])) {
-                    $real_default = '';
-                    foreach ($var['default'] as $config_var => $val) {
-                        if (strpos($config_var, 'text') === 0) {
-                            $real_default .= $val;
-                        } elseif (strpos($config_var, 'constant') === 0) {
-                            if (defined($val)) {
-                                $real_default .= constant($val);
-                            } else {
-                                return $this->raiseError(
-                                    'Unknown constant "' . $val . '" requested in ' .
-                                    'default value for configuration variable "' .
-                                    $name . '"');
-                            }
-                        } elseif (isset($this->configuration_info[$config_var])) {
-                            $real_default .=
-                                $this->configuration_info[$config_var]['default'];
-                        } else {
+            }
+
+            if (is_array($var['default'])) {
+                $real_default = '';
+                foreach ($var['default'] as $config_var => $val) {
+                    if (strpos($config_var, 'text') === 0) {
+                        $real_default .= $val;
+                    } elseif (strpos($config_var, 'constant') === 0) {
+                        if (!defined($val)) {
                             return $this->raiseError(
-                                'Unknown request for "' . $config_var . '" value in ' .
+                                'Unknown constant "' . $val . '" requested in ' .
                                 'default value for configuration variable "' .
                                 $name . '"');
                         }
+
+                        $real_default .= constant($val);
+                    } elseif (isset($this->configuration_info[$config_var])) {
+                        $real_default .=
+                            $this->configuration_info[$config_var]['default'];
+                    } else {
+                        return $this->raiseError(
+                            'Unknown request for "' . $config_var . '" value in ' .
+                            'default value for configuration variable "' .
+                            $name . '"');
                     }
-                    $var['default'] = $real_default;
-                }
-                if ($var['type'] == 'integer') {
-                    $var['default'] = (integer) $var['default'];
                 }
+                $var['default'] = $real_default;
             }
+
+            if ($var['type'] == 'integer') {
+                $var['default'] = (integer) $var['default'];
+            }
+
             if (!isset($var['doc'])) {
                 return $this->raiseError(
                     'Configuration information must contain a summary ("doc" index)');
             }
+
             if (!isset($var['prompt'])) {
                 return $this->raiseError(
                     'Configuration information must contain a simple prompt ("prompt" index)');
             }
+
             if (!isset($var['group'])) {
                 return $this->raiseError(
                     'Configuration information must contain a simple group ("group" index)');
             }
+
             if (isset($this->configuration_info[$name])) {
                 return $this->raiseError('Configuration variable "' . $name .
                     '" already exists');
             }
+
             $this->configuration_info[$name] = $var;
             // fix bug #7351: setting custom config variable in a channel fails
             $this->_channelConfigInfo[] = $name;
         }
+
         return true;
     }
 
-    // {{{ _encodeOutput(&data)
-
     /**
      * Encodes/scrambles configuration data before writing to files.
      * Currently, 'password' values will be base64-encoded as to avoid
      * that people spot cleartext passwords by accident.
      *
      * @param array (reference) array to encode values in
-     *
      * @return bool TRUE on success
-     *
      * @access private
      */
     function _encodeOutput(&$data)
@@ -61914,9 +61281,11 @@ class PEAR_Config extends PEAR
                     $this->_encodeOutput($data['__channels'][$channel]);
                 }
             }
+
             if (!isset($this->configuration_info[$key])) {
                 continue;
             }
+
             $type = $this->configuration_info[$key]['type'];
             switch ($type) {
                 // we base64-encode passwords so they are at least
@@ -61931,19 +61300,15 @@ class PEAR_Config extends PEAR
                 }
             }
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ _decodeInput(&data)
-
     /**
      * Decodes/unscrambles configuration data after reading from files.
      *
      * @param array (reference) array to encode values in
-     *
      * @return bool TRUE on success
-     *
      * @access private
      *
      * @see PEAR_Config::_encodeOutput
@@ -61953,15 +61318,18 @@ class PEAR_Config extends PEAR
         if (!is_array($data)) {
             return true;
         }
+
         foreach ($data as $key => $value) {
             if ($key == '__channels') {
                 foreach ($data['__channels'] as $channel => $blah) {
                     $this->_decodeInput($data['__channels'][$channel]);
                 }
             }
+
             if (!isset($this->configuration_info[$key])) {
                 continue;
             }
+
             $type = $this->configuration_info[$key]['type'];
             switch ($type) {
                 case 'password': {
@@ -61974,11 +61342,10 @@ class PEAR_Config extends PEAR
                 }
             }
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ getDefaultChannel([layer])
     /**
      * Retrieve the default channel.
      *
@@ -62000,27 +61367,28 @@ class PEAR_Config extends PEAR
         } elseif (isset($this->configuration[$layer]['default_channel'])) {
             $ret = $this->configuration[$layer]['default_channel'];
         }
+
         if ($ret == 'pear.php.net' && defined('PEAR_RUNTYPE') && PEAR_RUNTYPE == 'pecl') {
             $ret = 'pecl.php.net';
         }
+
         if ($ret) {
             if ($ret != 'pear.php.net') {
                 $this->_lazyChannelSetup();
             }
+
             return $ret;
         }
+
         return PEAR_CONFIG_DEFAULT_CHANNEL;
     }
 
-    // {{{ get(key, [layer])
     /**
      * Returns a configuration value, prioritizing layers as per the
      * layers property.
      *
      * @param string config key
-     *
      * @return mixed the config value, or NULL if not found
-     *
      * @access public
      */
     function get($key, $layer = null, $channel = false)
@@ -62028,19 +61396,22 @@ class PEAR_Config extends PEAR
         if (!isset($this->configuration_info[$key])) {
             return null;
         }
+
         if ($key == '__channels') {
             return null;
         }
+
         if ($key == 'default_channel') {
             return $this->getDefaultChannel($layer);
         }
+
         if (!$channel) {
             $channel = $this->getDefaultChannel();
         } elseif ($channel != 'pear.php.net') {
             $this->_lazyChannelSetup();
         }
         $channel = strtolower($channel);
-        
+
         $test = (in_array($key, $this->_channelConfigInfo)) ?
             $this->_getChannelValue($key, $layer, $channel) :
             null;
@@ -62054,6 +61425,7 @@ class PEAR_Config extends PEAR
             }
             return $test;
         }
+
         if ($layer === null) {
             foreach ($this->layers as $layer) {
                 if (isset($this->configuration[$layer][$key])) {
@@ -62065,6 +61437,7 @@ class PEAR_Config extends PEAR
                             return $this->_prependPath($test, $this->_installRoot);
                         }
                     }
+
                     if ($key == 'preferred_mirror') {
                         $reg = &$this->getRegistry();
                         if (is_object($reg)) {
@@ -62072,6 +61445,7 @@ class PEAR_Config extends PEAR
                             if (PEAR::isError($chan)) {
                                 return $channel;
                             }
+
                             if (!$chan->getMirror($test) && $chan->getName() != $test) {
                                 return $channel; // mirror does not exist
                             }
@@ -62089,6 +61463,7 @@ class PEAR_Config extends PEAR
                     return $this->_prependPath($test, $this->_installRoot);
                 }
             }
+
             if ($key == 'preferred_mirror') {
                 $reg = &$this->getRegistry();
                 if (is_object($reg)) {
@@ -62096,26 +61471,25 @@ class PEAR_Config extends PEAR
                     if (PEAR::isError($chan)) {
                         return $channel;
                     }
+
                     if (!$chan->getMirror($test) && $chan->getName() != $test) {
                         return $channel; // mirror does not exist
                     }
                 }
             }
+
             return $test;
         }
+
         return null;
     }
 
-    // }}}
-    // {{{ _getChannelValue(key, value, [layer])
     /**
      * Returns a channel-specific configuration value, prioritizing layers as per the
      * layers property.
      *
      * @param string config key
-     *
      * @return mixed the config value, or NULL if not found
-     *
      * @access private
      */
     function _getChannelValue($key, $layer, $channel)
@@ -62123,6 +61497,7 @@ class PEAR_Config extends PEAR
         if ($key == '__channels' || $channel == 'pear.php.net') {
             return null;
         }
+
         $ret = null;
         if ($layer === null) {
             foreach ($this->layers as $ilayer) {
@@ -62134,33 +61509,35 @@ class PEAR_Config extends PEAR
         } elseif (isset($this->configuration[$layer]['__channels'][$channel][$key])) {
             $ret = $this->configuration[$layer]['__channels'][$channel][$key];
         }
-        if ($key == 'preferred_mirror') {
-            if ($ret !== null) {
-                $reg = &$this->getRegistry($layer);
-                if (is_object($reg)) {
-                    $chan = &$reg->getChannel($channel);
-                    if (PEAR::isError($chan)) {
-                        return $channel;
-                    }
-                    if (!$chan->getMirror($ret) && $chan->getName() != $ret) {
-                        return $channel; // mirror does not exist
-                    }
+
+        if ($key != 'preferred_mirror') {
+            return $ret;
+        }
+
+
+        if ($ret !== null) {
+            $reg = &$this->getRegistry($layer);
+            if (is_object($reg)) {
+                $chan = &$reg->getChannel($channel);
+                if (PEAR::isError($chan)) {
+                    return $channel;
+                }
+
+                if (!$chan->getMirror($ret) && $chan->getName() != $ret) {
+                    return $channel; // mirror does not exist
                 }
-                return $ret;
-            }
-            if ($channel != $this->getDefaultChannel($layer)) {
-                return $channel; // we must use the channel name as the preferred mirror
-                                 // if the user has not chosen an alternate
-            } else {
-                return $this->getDefaultChannel($layer);
             }
+
+            return $ret;
         }
-        return $ret;
-    }
 
+        if ($channel != $this->getDefaultChannel($layer)) {
+            return $channel; // we must use the channel name as the preferred mirror
+                             // if the user has not chosen an alternate
+        }
 
-    // }}}
-    // {{{ set(key, value, [layer])
+        return $this->getDefaultChannel($layer);
+    }
 
     /**
      * Set a config value in a specific layer (defaults to 'user').
@@ -62179,9 +61556,11 @@ class PEAR_Config extends PEAR
         if ($key == '__channels') {
             return false;
         }
+
         if (!isset($this->configuration[$layer])) {
             return false;
         }
+
         if ($key == 'default_channel') {
             // can only set this value globally
             $channel = 'pear.php.net';
@@ -62189,24 +61568,29 @@ class PEAR_Config extends PEAR
                 $this->_lazyChannelSetup($layer);
             }
         }
+
         if ($key == 'preferred_mirror') {
             if ($channel == '__uri') {
                 return false; // can't set the __uri pseudo-channel's mirror
             }
+
             $reg = &$this->getRegistry($layer);
             if (is_object($reg)) {
                 $chan = &$reg->getChannel($channel ? $channel : 'pear.php.net');
                 if (PEAR::isError($chan)) {
                     return false;
                 }
+
                 if (!$chan->getMirror($value) && $chan->getName() != $value) {
                     return false; // mirror does not exist
                 }
             }
         }
+
         if (!isset($this->configuration_info[$key])) {
             return false;
         }
+
         extract($this->configuration_info[$key]);
         switch ($type) {
             case 'integer':
@@ -62227,42 +61611,49 @@ class PEAR_Config extends PEAR
                 break;
             }
         }
+
         if (!$channel) {
             $channel = $this->get('default_channel', null, 'pear.php.net');
         }
+
         if (!in_array($channel, $this->_channels)) {
             $this->_lazyChannelSetup($layer);
             $reg = &$this->getRegistry($layer);
             if ($reg) {
                 $channel = $reg->channelName($channel);
             }
+
             if (!in_array($channel, $this->_channels)) {
                 return false;
             }
         }
+
         if ($channel != 'pear.php.net') {
             if (in_array($key, $this->_channelConfigInfo)) {
                 $this->configuration[$layer]['__channels'][$channel][$key] = $value;
                 return true;
-            } else {
-                return false;
             }
-        } else {
-            if ($key == 'default_channel') {
-                if (!isset($reg)) {
-                    $reg = &$this->getRegistry($layer);
-                    if (!$reg) {
-                        $reg = &$this->getRegistry();
-                    }
-                }
-                if ($reg) {
-                    $value = $reg->channelName($value);
-                }
-                if (!$value) {
-                    return false;
+
+            return false;
+        }
+
+        if ($key == 'default_channel') {
+            if (!isset($reg)) {
+                $reg = &$this->getRegistry($layer);
+                if (!$reg) {
+                    $reg = &$this->getRegistry();
                 }
             }
+
+            if ($reg) {
+                $value = $reg->channelName($value);
+            }
+
+            if (!$value) {
+                return false;
+            }
         }
+
         $this->configuration[$layer][$key] = $value;
         if ($key == 'php_dir' && !$this->_noRegistry) {
             if (!isset($this->_registry[$layer]) ||
@@ -62272,26 +61663,29 @@ class PEAR_Config extends PEAR
                 $this->_registry[$layer]->setConfig($this, false);
             }
         }
+
         return true;
     }
 
-    // }}}
     function _lazyChannelSetup($uselayer = false)
     {
         if ($this->_noRegistry) {
             return;
         }
+
         $merge = false;
         foreach ($this->_registry as $layer => $p) {
             if ($uselayer && $uselayer != $layer) {
                 continue;
             }
+
             if (!$this->_regInitialized[$layer]) {
                 if ($layer == 'default' && isset($this->_registry['user']) ||
                       isset($this->_registry['system'])) {
                     // only use the default registry if there are no alternatives
                     continue;
                 }
+
                 if (!is_object($this->_registry[$layer])) {
                     if ($phpdir = $this->get('php_dir', $layer, 'pear.php.net')) {
                         $this->_registry[$layer] = &new PEAR_Registry($phpdir);
@@ -62302,14 +61696,14 @@ class PEAR_Config extends PEAR
                         return;
                     }
                 }
+
                 $this->setChannels($this->_registry[$layer]->listChannels(), $merge);
                 $this->_regInitialized[$layer] = true;
                 $merge = true;
             }
         }
     }
-    // {{{ setChannels()
-    
+
     /**
      * Set the list of channels.
      *
@@ -62323,16 +61717,19 @@ class PEAR_Config extends PEAR
         if (!is_array($channels)) {
             return false;
         }
+
         if ($merge) {
             $this->_channels = array_merge($this->_channels, $channels);
         } else {
             $this->_channels = $channels;
         }
+
         foreach ($channels as $channel) {
             $channel = strtolower($channel);
             if ($channel == 'pear.php.net') {
                 continue;
             }
+
             foreach ($this->layers as $layer) {
                 if (!isset($this->configuration[$layer]['__channels'])) {
                     $this->configuration[$layer]['__channels'] = array();
@@ -62343,12 +61740,10 @@ class PEAR_Config extends PEAR
                 }
             }
         }
+
         return true;
     }
 
-    // }}}
-    // {{{ getType(key)
-
     /**
      * Get the type of a config value.
      *
@@ -62368,14 +61763,10 @@ class PEAR_Config extends PEAR
         return false;
     }
 
-    // }}}
-    // {{{ getDocs(key)
-
     /**
      * Get the documentation for a config value.
      *
      * @param string  config key
-     *
      * @return string documentation string
      *
      * @access public
@@ -62386,16 +61777,14 @@ class PEAR_Config extends PEAR
         if (isset($this->configuration_info[$key])) {
             return $this->configuration_info[$key]['doc'];
         }
+
         return false;
     }
-       // }}}
-    // {{{ getPrompt(key)
 
     /**
      * Get the short documentation for a config value.
      *
      * @param string  config key
-     *
      * @return string short documentation string
      *
      * @access public
@@ -62406,16 +61795,14 @@ class PEAR_Config extends PEAR
         if (isset($this->configuration_info[$key])) {
             return $this->configuration_info[$key]['prompt'];
         }
+
         return false;
     }
-    // }}}
-    // {{{ getGroup(key)
 
     /**
      * Get the parameter group for a config key.
      *
      * @param string  config key
-     *
      * @return string parameter group
      *
      * @access public
@@ -62426,12 +61813,10 @@ class PEAR_Config extends PEAR
         if (isset($this->configuration_info[$key])) {
             return $this->configuration_info[$key]['group'];
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ getGroups()
-
     /**
      * Get the list of parameter groups.
      *
@@ -62446,17 +61831,14 @@ class PEAR_Config extends PEAR
         foreach ($this->configuration_info as $key => $info) {
             $tmp[$info['group']] = 1;
         }
+
         return array_keys($tmp);
     }
 
-    // }}}
-    // {{{ getGroupKeys()
-
     /**
      * Get the list of the parameters in a group.
      *
      * @param string $group parameter group
-     *
      * @return array list of parameters in $group
      *
      * @access public
@@ -62470,18 +61852,15 @@ class PEAR_Config extends PEAR
                 $keys[] = $key;
             }
         }
+
         return $keys;
     }
 
-    // }}}
-    // {{{ getSetValues(key)
-
     /**
      * Get the list of allowed set values for a config value.  Returns
      * NULL for config values that are not sets.
      *
      * @param string  config key
-     *
      * @return array enumerated array of set values, or NULL if the
      *               config key is unknown or not a set
      *
@@ -62499,14 +61878,13 @@ class PEAR_Config extends PEAR
             if (key($valid_set) === 0) {
                 return $valid_set;
             }
+
             return array_keys($valid_set);
         }
+
         return null;
     }
 
-    // }}}
-    // {{{ getKeys()
-
     /**
      * Get all the current config keys.
      *
@@ -62524,22 +61902,19 @@ class PEAR_Config extends PEAR
                     $keys = array_merge($keys, $configs);
                 }
             }
+
             unset($test['__channels']);
             $keys = array_merge($keys, $test);
+
         }
         return array_keys($keys);
     }
 
-    // }}}
-    // {{{ remove(key, [layer])
-
     /**
      * Remove the a config key from a specific config layer.
      *
      * @param string config key
-     *
      * @param string (optional) config layer
-     *
      * @return bool TRUE on success, FALSE on failure
      *
      * @access public
@@ -62553,23 +61928,20 @@ class PEAR_Config extends PEAR
                 return true;
             }
         }
+
         if (isset($this->configuration[$layer][$key])) {
             unset($this->configuration[$layer][$key]);
             return true;
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ removeLayer(layer)
-
     /**
      * Temporarily remove an entire config layer.  USE WITH CARE!
      *
      * @param string config key
-     *
      * @param string (optional) config layer
-     *
      * @return bool TRUE on success, FALSE on failure
      *
      * @access public
@@ -62580,17 +61952,14 @@ class PEAR_Config extends PEAR
             $this->configuration[$layer] = array();
             return true;
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ store([layer])
-
     /**
      * Stores configuration data in a layer.
      *
      * @param string config layer to store
-     *
      * @return bool TRUE on success, or PEAR error on failure
      *
      * @access public
@@ -62600,28 +61969,6 @@ class PEAR_Config extends PEAR
         return $this->writeConfigFile(null, $layer, $data);
     }
 
-    // }}}
-    // {{{ toDefault(key)
-
-    /**
-     * Unset the user-defined value of a config key, reverting the
-     * value to the system-defined one.
-     *
-     * @param string config key
-     *
-     * @return bool TRUE on success, FALSE on failure
-     *
-     * @access public
-     */
-    function toDefault($key)
-    {
-        trigger_error("PEAR_Config::toDefault() deprecated, use PEAR_Config::remove() instead", E_USER_NOTICE);
-        return $this->remove($key, 'user');
-    }
-
-    // }}}
-    // {{{ definedBy(key)
-
     /**
      * Tells what config layer that gets to define a key.
      *
@@ -62647,6 +61994,7 @@ class PEAR_Config extends PEAR
                     return $layer;
                 }
             }
+
             if (isset($this->configuration[$layer][$key])) {
                 if ($returnchannel) {
                     return array('layer' => $layer, 'channel' => 'pear.php.net');
@@ -62654,37 +62002,14 @@ class PEAR_Config extends PEAR
                 return $layer;
             }
         }
-        return '';
-    }
 
-    // }}}
-    // {{{ isDefaulted(key)
-
-    /**
-     * Tells whether a config value has a system-defined value.
-     *
-     * @param string   config key
-     *
-     * @return bool
-     *
-     * @access public
-     *
-     * @deprecated
-     */
-    function isDefaulted($key)
-    {
-        trigger_error("PEAR_Config::isDefaulted() deprecated, use PEAR_Config::definedBy() instead", E_USER_NOTICE);
-        return $this->definedBy($key) == 'system';
+        return '';
     }
 
-    // }}}
-    // {{{ isDefined(key)
-
     /**
      * Tells whether a given key exists as a config value.
      *
      * @param string config key
-     *
      * @return bool whether <config key> exists in this object
      *
      * @access public
@@ -62696,17 +62021,14 @@ class PEAR_Config extends PEAR
                 return true;
             }
         }
+
         return false;
     }
 
-    // }}}
-    // {{{ isDefinedLayer(key)
-
     /**
      * Tells whether a given config layer exists.
      *
      * @param string config layer
-     *
      * @return bool whether <config layer> exists in this object
      *
      * @access public
@@ -62716,9 +62038,6 @@ class PEAR_Config extends PEAR
         return isset($this->configuration[$layer]);
     }
 
-    // }}}
-    // {{{ getLayers()
-
     /**
      * Returns the layers defined (except the 'default' one)
      *
@@ -62731,24 +62050,17 @@ class PEAR_Config extends PEAR
         return array_keys($cf);
     }
 
-    // }}}
-    // {{{ apiVersion()
     function apiVersion()
     {
         return '1.1';
     }
-    // }}}
 
     /**
      * @return PEAR_Registry
      */
     function &getRegistry($use = null)
     {
-        if ($use === null) {
-            $layer = 'user';
-        } else {
-            $layer = $use;
-        }
+        $layer = $use === null ? 'user' : $use;
         if (isset($this->_registry[$layer])) {
             return $this->_registry[$layer];
         } elseif ($use === null && isset($this->_registry['system'])) {
@@ -62758,12 +62070,13 @@ class PEAR_Config extends PEAR
         } elseif ($use) {
             $a = false;
             return $a;
-        } else {
-            // only go here if null was passed in
-            echo "CRITICAL ERROR: Registry could not be initialized from any value";
-            exit(1);
         }
+
+        // only go here if null was passed in
+        echo "CRITICAL ERROR: Registry could not be initialized from any value";
+        exit(1);
     }
+
     /**
      * This is to allow customization like the use of installroot
      * @param PEAR_Registry
@@ -62774,13 +62087,16 @@ class PEAR_Config extends PEAR
         if ($this->_noRegistry) {
             return false;
         }
+
         if (!in_array($layer, array('user', 'system'))) {
             return false;
         }
+
         $this->_registry[$layer] = &$reg;
         if (is_object($reg)) {
             $this->_registry[$layer]->setConfig($this, false);
         }
+
         return true;
     }
 
@@ -62790,15 +62106,6 @@ class PEAR_Config extends PEAR
     }
 
     /**
-     * @return PEAR_Remote
-     */
-    function &getRemote()
-    {
-        $remote = &new PEAR_Remote($this);
-        return $remote;
-    }
-
-    /**
      * @return PEAR_REST
      */
     function &getREST($version, $options = array())
@@ -62807,6 +62114,7 @@ class PEAR_Config extends PEAR
         if (!class_exists($class = 'PEAR_REST_' . $version)) {
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/REST/' . $version . '.php';
         }
+
         $remote = &new $class($this, $options);
         return $remote;
     }
@@ -62820,13 +62128,11 @@ class PEAR_Config extends PEAR
     {
         if (isset($this->_ftp)) {
             return $this->_ftp;
-        } else {
-            $a = false;
-            return $a;
         }
-    }
 
-    // {{{ _prependPath($path, $prepend)
+        $a = false;
+        return $a;
+    }
 
     function _prependPath($path, $prepend)
     {
@@ -62844,7 +62150,6 @@ class PEAR_Config extends PEAR
         }
         return $path;
     }
-    // }}}
 
     /**
      * @param string|false installation directory to prepend to all _dir variables, or false to
@@ -62870,26 +62175,18 @@ class PEAR_Config extends PEAR
         }
     }
 }
-
-?>
 <?php
 /**
  * PEAR_Dependency2, advanced dependency validation
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Dependency2.php,v 1.56 2008/01/03 20:26:35 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Dependency2.php,v 1.59 2009/02/24 23:38:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -62909,9 +62206,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validate.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -62923,32 +62220,39 @@ class PEAR_Dependency2
      * @var integer
      */
     var $_state;
+
     /**
      * Command-line options to install/upgrade/uninstall commands
      * @param array
      */
     var $_options;
+
     /**
      * @var OS_Guess
      */
     var $_os;
+
     /**
      * @var PEAR_Registry
      */
     var $_registry;
+
     /**
      * @var PEAR_Config
      */
     var $_config;
+
     /**
      * @var PEAR_DependencyDB
      */
     var $_dependencydb;
+
     /**
      * Output of PEAR_Registry::parsedPackageName()
      * @var array
      */
     var $_currentPackage;
+
     /**
      * @param PEAR_Config
      * @param array installation options
@@ -62962,20 +62266,24 @@ class PEAR_Dependency2
         if (!class_exists('PEAR_DependencyDB')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/DependencyDB.php';
         }
+
         if (isset($installoptions['packagingroot'])) {
             // make sure depdb is in the right location
             $config->setInstallRoot($installoptions['packagingroot']);
         }
+
         $this->_registry = &$config->getRegistry();
         $this->_dependencydb = &PEAR_DependencyDB::singleton($config);
         if (isset($installoptions['packagingroot'])) {
             $config->setInstallRoot(false);
         }
+
         $this->_options = $installoptions;
         $this->_state = $state;
         if (!class_exists('OS_Guess')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'OS/Guess.php';
         }
+
         $this->_os = new OS_Guess;
         $this->_currentPackage = $package;
     }
@@ -62986,25 +62294,30 @@ class PEAR_Dependency2
         if (isset($dep['uri'])) {
             return '';
         }
+
         if (isset($dep['recommended'])) {
             $extra .= 'recommended version ' . $dep['recommended'];
         } else {
             if (isset($dep['min'])) {
                 $extra .= 'version >= ' . $dep['min'];
             }
+
             if (isset($dep['max'])) {
                 if ($extra != ' (') {
                     $extra .= ', ';
                 }
                 $extra .= 'version <= ' . $dep['max'];
             }
+
             if (isset($dep['exclude'])) {
                 if (!is_array($dep['exclude'])) {
                     $dep['exclude'] = array($dep['exclude']);
                 }
+
                 if ($extra != ' (') {
                     $extra .= ', ';
                 }
+
                 $extra .= 'excluded versions: ';
                 foreach ($dep['exclude'] as $i => $exclude) {
                     if ($i) {
@@ -63014,10 +62327,12 @@ class PEAR_Dependency2
                 }
             }
         }
+
         $extra .= ')';
         if ($extra == ' ()') {
             $extra = '';
         }
+
         return $extra;
     }
 
@@ -63045,37 +62360,32 @@ class PEAR_Dependency2
      */
     function validateOsDependency($dep)
     {
-        if ($this->_state != PEAR_VALIDATE_INSTALLING &&
-              $this->_state != PEAR_VALIDATE_DOWNLOADING) {
+        if ($this->_state != PEAR_VALIDATE_INSTALLING && $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
-        if (isset($dep['conflicts'])) {
-            $not = true;
-        } else {
-            $not = false;
-        }
+
         if ($dep['name'] == '*') {
             return true;
         }
+
+        $not = isset($dep['conflicts']) ? true : false;
         switch (strtolower($dep['name'])) {
             case 'windows' :
                 if ($not) {
                     if (strtolower(substr($this->getPHP_OS(), 0, 3)) == 'win') {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Cannot install %s on Windows");
-                        } else {
-                            return $this->warning("warning: Cannot install %s on Windows");
                         }
+
+                        return $this->warning("warning: Cannot install %s on Windows");
                     }
                 } else {
                     if (strtolower(substr($this->getPHP_OS(), 0, 3)) != 'win') {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Can only install %s on Windows");
-                        } else {
-                            return $this->warning("warning: Can only install %s on Windows");
                         }
+
+                        return $this->warning("warning: Can only install %s on Windows");
                     }
                 }
             break;
@@ -63083,23 +62393,19 @@ class PEAR_Dependency2
                 $unices = array('linux', 'freebsd', 'darwin', 'sunos', 'irix', 'hpux', 'aix');
                 if ($not) {
                     if (in_array($this->getSysname(), $unices)) {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Cannot install %s on any Unix system");
-                        } else {
-                            return $this->warning(
-                                "warning: Cannot install %s on any Unix system");
                         }
+
+                        return $this->warning( "warning: Cannot install %s on any Unix system");
                     }
                 } else {
                     if (!in_array($this->getSysname(), $unices)) {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError("Can only install %s on a Unix system");
-                        } else {
-                            return $this->warning(
-                                "warning: Can only install %s on a Unix system");
                         }
+
+                        return $this->warning("warning: Can only install %s on a Unix system");
                     }
                 }
             break;
@@ -63110,23 +62416,22 @@ class PEAR_Dependency2
                               !isset($this->_options['force'])) {
                             return $this->raiseError('Cannot install %s on ' . $dep['name'] .
                                 ' operating system');
-                        } else {
-                            return $this->warning('warning: Cannot install %s on ' .
-                                $dep['name'] . ' operating system');
                         }
+
+                        return $this->warning('warning: Cannot install %s on ' .
+                            $dep['name'] . ' operating system');
                     }
                 } else {
                     if (strtolower($dep['name']) != strtolower($this->getSysname())) {
-                        if (!isset($this->_options['nodeps']) &&
-                              !isset($this->_options['force'])) {
+                        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                             return $this->raiseError('Cannot install %s on ' .
                                 $this->getSysname() .
                                 ' operating system, can only install on ' . $dep['name']);
-                        } else {
-                            return $this->warning('warning: Cannot install %s on ' .
-                                $this->getSysname() .
-                                ' operating system, can only install on ' . $dep['name']);
                         }
+
+                        return $this->warning('warning: Cannot install %s on ' .
+                            $this->getSysname() .
+                            ' operating system, can only install on ' . $dep['name']);
                     }
                 }
         }
@@ -63153,34 +62458,33 @@ class PEAR_Dependency2
         if ($this->_state != PEAR_VALIDATE_INSTALLING) {
             return true;
         }
-        if (isset($dep['conflicts'])) {
-            $not = true;
-        } else {
-            $not = false;
-        }
+
+        $not = isset($dep['conflicts']) ? true : false;
         if (!$this->matchSignature($dep['pattern'])) {
             if (!$not) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s Architecture dependency failed, does not ' .
                         'match "' . $dep['pattern'] . '"');
-                } else {
-                    return $this->warning('warning: %s Architecture dependency failed, does ' .
-                        'not match "' . $dep['pattern'] . '"');
                 }
+
+                return $this->warning('warning: %s Architecture dependency failed, does ' .
+                    'not match "' . $dep['pattern'] . '"');
             }
+
             return true;
-        } else {
-            if ($not) {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s Architecture dependency failed, required "' .
-                        $dep['pattern'] . '"');
-                } else {
-                    return $this->warning('warning: %s Architecture dependency failed, ' .
-                        'required "' . $dep['pattern'] . '"');
-                }
+        }
+
+        if ($not) {
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s Architecture dependency failed, required "' .
+                    $dep['pattern'] . '"');
             }
-            return true;
+
+            return $this->warning('warning: %s Architecture dependency failed, ' .
+                'required "' . $dep['pattern'] . '"');
         }
+
+        return true;
     }
 
     /**
@@ -63198,9 +62502,9 @@ class PEAR_Dependency2
     {
         if ($name !== null) {
             return phpversion($name);
-        } else {
-            return phpversion();
         }
+
+        return phpversion();
     }
 
     function validateExtensionDependency($dep, $required = true)
@@ -63209,13 +62513,15 @@ class PEAR_Dependency2
               $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
+
         $loaded = $this->extension_loaded($dep['name']);
-        $extra = $this->_getExtraString($dep);
+        $extra  = $this->_getExtraString($dep);
         if (isset($dep['exclude'])) {
             if (!is_array($dep['exclude'])) {
                 $dep['exclude'] = array($dep['exclude']);
             }
         }
+
         if (!isset($dep['min']) && !isset($dep['max']) &&
               !isset($dep['recommended']) && !isset($dep['exclude'])) {
             if ($loaded) {
@@ -63223,121 +62529,129 @@ class PEAR_Dependency2
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s conflicts with PHP extension "' .
                             $dep['name'] . '"' . $extra);
-                    } else {
-                        return $this->warning('warning: %s conflicts with PHP extension "' .
-                            $dep['name'] . '"' . $extra);
                     }
+
+                    return $this->warning('warning: %s conflicts with PHP extension "' .
+                        $dep['name'] . '"' . $extra);
                 }
+
                 return true;
             } else {
                 if (isset($dep['conflicts'])) {
                     return true;
                 }
+
                 if ($required) {
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s requires PHP extension "' .
                             $dep['name'] . '"' . $extra);
-                    } else {
-                        return $this->warning('warning: %s requires PHP extension "' .
-                            $dep['name'] . '"' . $extra);
                     }
-                } else {
-                    return $this->warning('%s can optionally use PHP extension "' .
+
+                    return $this->warning('warning: %s requires PHP extension "' .
                         $dep['name'] . '"' . $extra);
                 }
+
+                return $this->warning('%s can optionally use PHP extension "' .
+                    $dep['name'] . '"' . $extra);
             }
         }
+
         if (!$loaded) {
             if (isset($dep['conflicts'])) {
                 return true;
             }
+
             if (!$required) {
                 return $this->warning('%s can optionally use PHP extension "' .
                     $dep['name'] . '"' . $extra);
-            } else {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
-                        '"' . $extra);
-                }
-                    return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
-                        '"' . $extra);
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
+                    '"' . $extra);
+            }
+
+            return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
+                    '"' . $extra);
         }
+
         $version = (string) $this->phpversion($dep['name']);
         if (empty($version)) {
             $version = '0';
         }
+
         $fail = false;
-        if (isset($dep['min'])) {
-            if (!version_compare($version, $dep['min'], '>=')) {
-                $fail = true;
-            }
+        if (isset($dep['min']) && !version_compare($version, $dep['min'], '>=')) {
+            $fail = true;
         }
-        if (isset($dep['max'])) {
-            if (!version_compare($version, $dep['max'], '<=')) {
-                $fail = true;
-            }
+
+        if (isset($dep['max']) && !version_compare($version, $dep['max'], '<=')) {
+            $fail = true;
         }
+
         if ($fail && !isset($dep['conflicts'])) {
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
                     '"' . $extra . ', installed version is ' . $version);
-            } else {
-                return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
-                    '"' . $extra . ', installed version is ' . $version);
             }
+
+            return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
+                '"' . $extra . ', installed version is ' . $version);
         } elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail && isset($dep['conflicts'])) {
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s conflicts with PHP extension "' .
                     $dep['name'] . '"' . $extra . ', installed version is ' . $version);
-            } else {
-                return $this->warning('warning: %s conflicts with PHP extension "' .
-                    $dep['name'] . '"' . $extra . ', installed version is ' . $version);
             }
+
+            return $this->warning('warning: %s conflicts with PHP extension "' .
+                $dep['name'] . '"' . $extra . ', installed version is ' . $version);
         }
+
         if (isset($dep['exclude'])) {
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($version, $exclude, '==')) {
                     if (isset($dep['conflicts'])) {
                         continue;
                     }
-                    if (!isset($this->_options['nodeps']) &&
-                          !isset($this->_options['force'])) {
+
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s is not compatible with PHP extension "' .
                             $dep['name'] . '" version ' .
                             $exclude);
-                    } else {
-                        return $this->warning('warning: %s is not compatible with PHP extension "' .
-                            $dep['name'] . '" version ' .
-                            $exclude);
                     }
+
+                    return $this->warning('warning: %s is not compatible with PHP extension "' .
+                        $dep['name'] . '" version ' .
+                        $exclude);
                 } elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s conflicts with PHP extension "' .
                             $dep['name'] . '"' . $extra . ', installed version is ' . $version);
-                    } else {
-                        return $this->warning('warning: %s conflicts with PHP extension "' .
-                            $dep['name'] . '"' . $extra . ', installed version is ' . $version);
                     }
+
+                    return $this->warning('warning: %s conflicts with PHP extension "' .
+                        $dep['name'] . '"' . $extra . ', installed version is ' . $version);
                 }
             }
         }
+
         if (isset($dep['recommended'])) {
             if (version_compare($version, $dep['recommended'], '==')) {
                 return true;
-            } else {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
-                        ' version "' . $version . '"' .
-                        ' is not the recommended version "' . $dep['recommended'] .
-                        '", but may be compatible, use --force to install');
-                } else {
-                    return $this->warning('warning: %s dependency: PHP extension ' .
-                        $dep['name'] . ' version "' . $version . '"' .
-                        ' is not the recommended version "' . $dep['recommended'].'"');
-                }
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
+                    ' version "' . $version . '"' .
+                    ' is not the recommended version "' . $dep['recommended'] .
+                    '", but may be compatible, use --force to install');
+            }
+
+            return $this->warning('warning: %s dependency: PHP extension ' .
+                $dep['name'] . ' version "' . $version . '"' .
+                ' is not the recommended version "' . $dep['recommended'].'"');
         }
+
         return true;
     }
 
@@ -63347,50 +62661,54 @@ class PEAR_Dependency2
               $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
+
         $version = $this->phpversion();
-        $extra = $this->_getExtraString($dep);
+        $extra   = $this->_getExtraString($dep);
         if (isset($dep['exclude'])) {
             if (!is_array($dep['exclude'])) {
                 $dep['exclude'] = array($dep['exclude']);
             }
         }
+
         if (isset($dep['min'])) {
             if (!version_compare($version, $dep['min'], '>=')) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s requires PHP' .
                         $extra . ', installed version is ' . $version);
-                } else {
-                    return $this->warning('warning: %s requires PHP' .
-                        $extra . ', installed version is ' . $version);
                 }
+
+                return $this->warning('warning: %s requires PHP' .
+                    $extra . ', installed version is ' . $version);
             }
         }
+
         if (isset($dep['max'])) {
             if (!version_compare($version, $dep['max'], '<=')) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s requires PHP' .
                         $extra . ', installed version is ' . $version);
-                } else {
-                    return $this->warning('warning: %s requires PHP' .
-                        $extra . ', installed version is ' . $version);
                 }
+
+                return $this->warning('warning: %s requires PHP' .
+                    $extra . ', installed version is ' . $version);
             }
         }
+
         if (isset($dep['exclude'])) {
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($version, $exclude, '==')) {
-                    if (!isset($this->_options['nodeps']) &&
-                          !isset($this->_options['force'])) {
+                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s is not compatible with PHP version ' .
                             $exclude);
-                    } else {
-                        return $this->warning(
-                            'warning: %s is not compatible with PHP version ' .
-                            $exclude);
                     }
+
+                    return $this->warning(
+                        'warning: %s is not compatible with PHP version ' .
+                        $exclude);
                 }
             }
         }
+
         return true;
     }
 
@@ -63399,7 +62717,7 @@ class PEAR_Dependency2
      */
     function getPEARVersion()
     {
-        return '1.7.2';
+        return '1.8.0';
     }
 
     function validatePearinstallerDependency($dep)
@@ -63411,42 +62729,47 @@ class PEAR_Dependency2
                 $dep['exclude'] = array($dep['exclude']);
             }
         }
+
         if (version_compare($pearversion, $dep['min'], '<')) {
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s requires PEAR Installer' . $extra .
                     ', installed version is ' . $pearversion);
-            } else {
-                return $this->warning('warning: %s requires PEAR Installer' . $extra .
-                    ', installed version is ' . $pearversion);
             }
+
+            return $this->warning('warning: %s requires PEAR Installer' . $extra .
+                ', installed version is ' . $pearversion);
         }
+
         if (isset($dep['max'])) {
             if (version_compare($pearversion, $dep['max'], '>')) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                     return $this->raiseError('%s requires PEAR Installer' . $extra .
                         ', installed version is ' . $pearversion);
-                } else {
-                    return $this->warning('warning: %s requires PEAR Installer' . $extra .
-                        ', installed version is ' . $pearversion);
                 }
+
+                return $this->warning('warning: %s requires PEAR Installer' . $extra .
+                    ', installed version is ' . $pearversion);
             }
         }
+
         if (isset($dep['exclude'])) {
             if (!isset($dep['exclude'][0])) {
                 $dep['exclude'] = array($dep['exclude']);
             }
+
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($exclude, $pearversion, '==')) {
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s is not compatible with PEAR Installer ' .
                             'version ' . $exclude);
-                    } else {
-                        return $this->warning('warning: %s is not compatible with PEAR ' .
-                            'Installer version ' . $exclude);
                     }
+
+                    return $this->warning('warning: %s is not compatible with PEAR ' .
+                        'Installer version ' . $exclude);
                 }
             }
         }
+
         return true;
     }
 
@@ -63469,6 +62792,7 @@ class PEAR_Dependency2
               $this->_state != PEAR_VALIDATE_DOWNLOADING) {
             return true;
         }
+
         if (isset($dep['providesextension'])) {
             if ($this->extension_loaded($dep['providesextension'])) {
                 $save = $dep;
@@ -63482,9 +62806,11 @@ class PEAR_Dependency2
                 }
             }
         }
+
         if ($this->_state == PEAR_VALIDATE_INSTALLING) {
             return $this->_validatePackageInstall($dep, $required, $depv1);
         }
+
         if ($this->_state == PEAR_VALIDATE_DOWNLOADING) {
             return $this->_validatePackageDownload($dep, $required, $params, $depv1);
         }
@@ -63496,6 +62822,7 @@ class PEAR_Dependency2
         if (isset($dep['uri'])) {
             $dep['channel'] = '__uri';
         }
+
         $depname = $this->_registry->parsedPackageNameToString($dep, true);
         $found = false;
         foreach ($params as $param) {
@@ -63505,6 +62832,7 @@ class PEAR_Dependency2
                 $found = true;
                 break;
             }
+
             if ($depv1 && $dep['channel'] == 'pear.php.net') {
                 if ($param->isEqual(
                   array('package' => $dep['name'],
@@ -63514,6 +62842,7 @@ class PEAR_Dependency2
                 }
             }
         }
+
         if (!$found && isset($dep['providesextension'])) {
             foreach ($params as $param) {
                 if ($param->isExtension($dep['providesextension'])) {
@@ -63522,6 +62851,7 @@ class PEAR_Dependency2
                 }
             }
         }
+
         if ($found) {
             $version = $param->getVersion();
             $installed = false;
@@ -63546,77 +62876,73 @@ class PEAR_Dependency2
                 }
             }
         }
+
         $extra = $this->_getExtraString($dep);
-        if (isset($dep['exclude'])) {
-            if (!is_array($dep['exclude'])) {
-                $dep['exclude'] = array($dep['exclude']);
-            }
+        if (isset($dep['exclude']) && !is_array($dep['exclude'])) {
+            $dep['exclude'] = array($dep['exclude']);
         }
+
         if (!isset($dep['min']) && !isset($dep['max']) &&
-              !isset($dep['recommended']) && !isset($dep['exclude'])) {
+              !isset($dep['recommended']) && !isset($dep['exclude'])
+        ) {
             if ($installed || $downloaded) {
                 $installed = $installed ? 'installed' : 'downloaded';
                 if (isset($dep['conflicts'])) {
+                    $rest = '';
                     if ($version) {
                         $rest = ", $installed version is " . $version;
-                    } else {
-                        $rest = '';
                     }
+
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                        return $this->raiseError('%s conflicts with package "' . $depname . '"' .
-                            $extra . $rest);
-                    } else {
-                        return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
-                            $extra . $rest);
+                        return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra . $rest);
                     }
+
+                    return $this->warning('warning: %s conflicts with package "' . $depname . '"' . $extra . $rest);
                 }
+
                 return true;
-            } else {
-                if (isset($dep['conflicts'])) {
-                    return true;
-                }
-                if ($required) {
-                    if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                        return $this->raiseError('%s requires package "' . $depname . '"' .
-                            $extra);
-                    } else {
-                        return $this->warning('warning: %s requires package "' . $depname . '"' .
-                            $extra);
-                    }
-                } else {
-                    return $this->warning('%s can optionally use package "' . $depname . '"' .
-                        $extra);
+            }
+
+            if (isset($dep['conflicts'])) {
+                return true;
+            }
+
+            if ($required) {
+                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                    return $this->raiseError('%s requires package "' . $depname . '"' . $extra);
                 }
+
+                return $this->warning('warning: %s requires package "' . $depname . '"' . $extra);
             }
+
+            return $this->warning('%s can optionally use package "' . $depname . '"' . $extra);
         }
+
         if (!$installed && !$downloaded) {
             if (isset($dep['conflicts'])) {
                 return true;
             }
+
             if ($required) {
                 if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('%s requires package "' . $depname . '"' .
-                        $extra);
-                } else {
-                    return $this->warning('warning: %s requires package "' . $depname . '"' .
-                        $extra);
+                    return $this->raiseError('%s requires package "' . $depname . '"' . $extra);
                 }
-            } else {
-                return $this->warning('%s can optionally use package "' . $depname . '"' .
-                    $extra);
+
+                return $this->warning('warning: %s requires package "' . $depname . '"' . $extra);
             }
+
+            return $this->warning('%s can optionally use package "' . $depname . '"' . $extra);
         }
+
         $fail = false;
-        if (isset($dep['min'])) {
-            if (version_compare($version, $dep['min'], '<')) {
-                $fail = true;
-            }
+        if (isset($dep['min']) && version_compare($version, $dep['min'], '<')) {
+            $fail = true;
         }
-        if (isset($dep['max'])) {
-            if (version_compare($version, $dep['max'], '>')) {
-                $fail = true;
-            }
+
+        if (isset($dep['max']) && version_compare($version, $dep['max'], '>')) {
+            $fail = true;
         }
+
         if ($fail && !isset($dep['conflicts'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             $dep['package'] = $dep['name'];
@@ -63624,92 +62950,98 @@ class PEAR_Dependency2
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s requires package "' . $depname . '"' .
                     $extra . ", $installed version is " . $version);
-            } else {
-                return $this->warning('warning: %s requires package "' . $depname . '"' .
-                    $extra . ", $installed version is " . $version);
             }
+
+            return $this->warning('warning: %s requires package "' . $depname . '"' .
+                $extra . ", $installed version is " . $version);
         } elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail &&
               isset($dep['conflicts']) && !isset($dep['exclude'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                 return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra .
                     ", $installed version is " . $version);
-            } else {
-                return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
-                    $extra . ", $installed version is " . $version);
             }
+
+            return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                $extra . ", $installed version is " . $version);
         }
+
         if (isset($dep['exclude'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             foreach ($dep['exclude'] as $exclude) {
                 if (version_compare($version, $exclude, '==') && !isset($dep['conflicts'])) {
                     if (!isset($this->_options['nodeps']) &&
-                          !isset($this->_options['force'])) {
+                          !isset($this->_options['force'])
+                    ) {
                         return $this->raiseError('%s is not compatible with ' .
                             $installed . ' package "' .
                             $depname . '" version ' .
                             $exclude);
-                    } else {
-                        return $this->warning('warning: %s is not compatible with ' .
-                            $installed . ' package "' .
-                            $depname . '" version ' .
-                            $exclude);
                     }
+
+                    return $this->warning('warning: %s is not compatible with ' .
+                        $installed . ' package "' .
+                        $depname . '" version ' .
+                        $exclude);
                 } elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
                     $installed = $installed ? 'installed' : 'downloaded';
                     if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
                         return $this->raiseError('%s conflicts with package "' . $depname . '"' .
                             $extra . ", $installed version is " . $version);
-                    } else {
-                        return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
-                            $extra . ", $installed version is " . $version);
                     }
+
+                    return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
+                        $extra . ", $installed version is " . $version);
                 }
             }
         }
+
         if (isset($dep['recommended'])) {
             $installed = $installed ? 'installed' : 'downloaded';
             if (version_compare($version, $dep['recommended'], '==')) {
                 return true;
-            } else {
-                if (!$found && $installed) {
-                    $param = $this->_registry->getPackage($dep['name'], $dep['channel']);
+            }
+
+            if (!$found && $installed) {
+                $param = $this->_registry->getPackage($dep['name'], $dep['channel']);
+            }
+
+            if ($param) {
+                $found = false;
+                foreach ($params as $parent) {
+                    if ($parent->isEqual($this->_currentPackage)) {
+                        $found = true;
+                        break;
+                    }
                 }
-                if ($param) {
-                    $found = false;
-                    foreach ($params as $parent) {
-                        if ($parent->isEqual($this->_currentPackage)) {
-                            $found = true;
-                            break;
-                        }
+
+                if ($found) {
+                    if ($param->isCompatible($parent)) {
+                        return true;
                     }
-                    if ($found) {
-                        if ($param->isCompatible($parent)) {
-                            return true;
-                        }
-                    } else { // this is for validPackage() calls
-                        $parent = $this->_registry->getPackage($this->_currentPackage['package'],
-                            $this->_currentPackage['channel']);
-                        if ($parent !== null) {
-                            if ($param->isCompatible($parent)) {
-                                return true;
-                            }
-                        }
+                } else { // this is for validPackage() calls
+                    $parent = $this->_registry->getPackage($this->_currentPackage['package'],
+                        $this->_currentPackage['channel']);
+                    if ($parent !== null && $param->isCompatible($parent)) {
+                        return true;
                     }
                 }
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
-                      !isset($this->_options['loose'])) {
-                    return $this->raiseError('%s dependency package "' . $depname .
-                        '" ' . $installed . ' version ' . $version . 
-                        ' is not the recommended version ' . $dep['recommended'] .
-                        ', but may be compatible, use --force to install');
-                } else {
-                    return $this->warning('warning: %s dependency package "' . $depname .
-                        '" ' . $installed . ' version ' . $version .
-                        ' is not the recommended version ' . $dep['recommended']);
-                }
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
+                  !isset($this->_options['loose'])
+            ) {
+                return $this->raiseError('%s dependency package "' . $depname .
+                    '" ' . $installed . ' version ' . $version .
+                    ' is not the recommended version ' . $dep['recommended'] .
+                    ', but may be compatible, use --force to install');
+            }
+
+            return $this->warning('warning: %s dependency package "' . $depname .
+                '" ' . $installed . ' version ' . $version .
+                ' is not the recommended version ' . $dep['recommended']);
         }
+
         return true;
     }
 
@@ -63729,6 +63061,7 @@ class PEAR_Dependency2
         if (PEAR::isError($this->_dependencydb)) {
             return $this->_dependencydb;
         }
+
         $params = array();
         // construct an array of "downloaded" packages to fool the package dependency checker
         // into using these to validate uninstalls of circular dependencies
@@ -63741,6 +63074,7 @@ class PEAR_Dependency2
             $dp->setPackageFile($downloaded[$i]);
             $params[$i] = &$dp;
         }
+
         // check cache
         $memyselfandI = strtolower($this->_currentPackage['channel']) . '/' .
             strtolower($this->_currentPackage['package']);
@@ -63751,6 +63085,7 @@ class PEAR_Dependency2
                     $dl->log(0, $warning[0]);
                 }
             }
+
             if (isset($badpackages[$memyselfandI]['errors'])) {
                 foreach ($badpackages[$memyselfandI]['errors'] as $error) {
                     if (is_array($error)) {
@@ -63759,23 +63094,29 @@ class PEAR_Dependency2
                         $dl->log(0, $error->getMessage());
                     }
                 }
+
                 if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
                     return $this->warning(
                         'warning: %s should not be uninstalled, other installed packages depend ' .
                         'on this package');
-                } else {
-                    return $this->raiseError(
-                        '%s cannot be uninstalled, other installed packages depend on this package');
                 }
+
+                return $this->raiseError(
+                    '%s cannot be uninstalled, other installed packages depend on this package');
             }
+
             return true;
         }
+
         // first, list the immediate parents of each package to be uninstalled
         $perpackagelist = array();
         $allparents = array();
         foreach ($params as $i => $param) {
-            $a = array('channel' => strtolower($param->getChannel()),
-                      'package' => strtolower($param->getPackage()));
+            $a = array(
+                'channel' => strtolower($param->getChannel()),
+                'package' => strtolower($param->getPackage())
+            );
+
             $deps = $this->_dependencydb->getDependentPackages($a);
             if ($deps) {
                 foreach ($deps as $d) {
@@ -63802,6 +63143,7 @@ class PEAR_Dependency2
                 }
             }
         }
+
         // next, remove any packages from the parents list that are not installed
         $remove = array();
         foreach ($allparents as $parent => $d1) {
@@ -63812,6 +63154,7 @@ class PEAR_Dependency2
                 $remove[$parent] = true;
             }
         }
+
         // next remove any packages from the parents list that are not passed in for
         // uninstallation
         foreach ($allparents as $parent => $d1) {
@@ -63826,6 +63169,7 @@ class PEAR_Dependency2
                 $remove[$parent] = true;
             }
         }
+
         // remove all packages whose dependencies fail
         // save which ones failed for error reporting
         $badchildren = array();
@@ -63835,6 +63179,7 @@ class PEAR_Dependency2
                 if (!isset($allparents[$package])) {
                     continue;
                 }
+
                 foreach ($allparents[$package] as $kid => $d1) {
                     foreach ($d1 as $depinfo) {
                         if ($depinfo[1]['type'] != 'optional') {
@@ -63854,6 +63199,7 @@ class PEAR_Dependency2
                 }
             }
         } while ($fail);
+
         // next, construct the list of packages that can't be uninstalled
         $badpackages = array();
         $save = $this->_currentPackage;
@@ -63862,6 +63208,7 @@ class PEAR_Dependency2
                 if (!isset($remove[$parent[0]])) {
                     continue;
                 }
+
                 $packagename = $this->_registry->parsePackageName($parent[0]);
                 $packagename['channel'] = $this->_registry->channelAlias($packagename['channel']);
                 $pa = $this->_registry->getPackage($packagename['package'], $packagename['channel']);
@@ -63887,7 +63234,8 @@ class PEAR_Dependency2
                 }
             }
         }
-        $this->_currentPackage = $save;
+
+        $this->_currentPackage          = $save;
         $dl->___uninstall_package_cache = $badpackages;
         if (isset($badpackages[$memyselfandI])) {
             if (isset($badpackages[$memyselfandI]['warnings'])) {
@@ -63895,6 +63243,7 @@ class PEAR_Dependency2
                     $dl->log(0, $warning[0]);
                 }
             }
+
             if (isset($badpackages[$memyselfandI]['errors'])) {
                 foreach ($badpackages[$memyselfandI]['errors'] as $error) {
                     if (is_array($error)) {
@@ -63903,81 +63252,81 @@ class PEAR_Dependency2
                         $dl->log(0, $error->getMessage());
                     }
                 }
+
                 if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
                     return $this->warning(
                         'warning: %s should not be uninstalled, other installed packages depend ' .
                         'on this package');
-                } else {
-                    return $this->raiseError(
-                        '%s cannot be uninstalled, other installed packages depend on this package');
                 }
+
+                return $this->raiseError(
+                    '%s cannot be uninstalled, other installed packages depend on this package');
             }
         }
+
         return true;
     }
 
     function _validatePackageUninstall($dep, $required, $dl)
     {
         $depname = $this->_registry->parsedPackageNameToString($dep, true);
-        $version = $this->_registry->packageinfo($dep['package'], 'version',
-            $dep['channel']);
+        $version = $this->_registry->packageinfo($dep['package'], 'version', $dep['channel']);
         if (!$version) {
             return true;
         }
+
         $extra = $this->_getExtraString($dep);
-        if (isset($dep['exclude'])) {
-            if (!is_array($dep['exclude'])) {
-                $dep['exclude'] = array($dep['exclude']);
-            }
+        if (isset($dep['exclude']) && !is_array($dep['exclude'])) {
+            $dep['exclude'] = array($dep['exclude']);
         }
+
         if (isset($dep['conflicts'])) {
             return true; // uninstall OK - these packages conflict (probably installed with --force)
         }
+
         if (!isset($dep['min']) && !isset($dep['max'])) {
-            if ($required) {
-                if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                    return $this->raiseError('"' . $depname . '" is required by ' .
-                        'installed package %s' . $extra);
-                } else {
-                    return $this->warning('warning: "' . $depname . '" is required by ' .
-                        'installed package %s' . $extra);
-                }
-            } else {
+            if (!$required) {
                 return $this->warning('"' . $depname . '" can be optionally used by ' .
                         'installed package %s' . $extra);
             }
+
+            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+                return $this->raiseError('"' . $depname . '" is required by ' .
+                    'installed package %s' . $extra);
+            }
+
+            return $this->warning('warning: "' . $depname . '" is required by ' .
+                'installed package %s' . $extra);
         }
+
         $fail = false;
-        if (isset($dep['min'])) {
-            if (version_compare($version, $dep['min'], '>=')) {
-                $fail = true;
-            }
+        if (isset($dep['min']) && version_compare($version, $dep['min'], '>=')) {
+            $fail = true;
         }
-        if (isset($dep['max'])) {
-            if (version_compare($version, $dep['max'], '<=')) {
-                $fail = true;
-            }
+
+        if (isset($dep['max']) && version_compare($version, $dep['max'], '<=')) {
+            $fail = true;
         }
+
         // we re-use this variable, preserve the original value
         $saverequired = $required;
-        if ($required) {
-            if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
-                return $this->raiseError($depname . $extra . ' is required by installed package' .
-                    ' "%s"');
-            } else {
-                return $this->raiseError('warning: ' . $depname . $extra .
-                    ' is required by installed package "%s"');
-            }
-        } else {
+        if (!$required) {
             return $this->warning($depname . $extra . ' can be optionally used by installed package' .
                     ' "%s"');
         }
-        return true;
+
+        if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
+            return $this->raiseError($depname . $extra . ' is required by installed package' .
+                ' "%s"');
+        }
+
+        return $this->raiseError('warning: ' . $depname . $extra .
+            ' is required by installed package "%s"');
     }
 
     /**
      * validate a downloaded package against installed packages
-     * 
+     *
      * As of PEAR 1.4.3, this will only validate
      *
      * @param array|PEAR_Downloader_Package|PEAR_PackageFile_v1|PEAR_PackageFile_v2
@@ -63995,17 +63344,20 @@ class PEAR_Dependency2
         } else {
             $deps = $this->_dependencydb->getDependentPackageDependencies($pkg);
         }
+
         $fail = false;
         if ($deps) {
             if (!class_exists('PEAR_Downloader_Package')) {
                 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Downloader/Package.php';
             }
+
             $dp = &new PEAR_Downloader_Package($dl);
             if (is_object($pkg)) {
                 $dp->setPackageFile($pkg);
             } else {
                 $dp->setDownloadURL($pkg);
             }
+
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             foreach ($deps as $channel => $info) {
                 foreach ($info as $package => $ds) {
@@ -64021,6 +63373,7 @@ class PEAR_Dependency2
                             continue 2; // jump to next package
                         }
                     }
+
                     foreach ($ds as $d) {
                         $checker = &new PEAR_Dependency2($this->_config, $this->_options,
                             array('channel' => $channel, 'package' => $package), $this->_state);
@@ -64038,10 +63391,12 @@ class PEAR_Dependency2
             }
             PEAR::popErrorHandling();
         }
+
         if ($fail) {
             return $this->raiseError(
                 '%s cannot be installed, conflicts with installed packages');
         }
+
         return true;
     }
 
@@ -64053,10 +63408,12 @@ class PEAR_Dependency2
         if (!isset($dep['optional'])) {
             $dep['optional'] = 'no';
         }
+
         list($newdep, $type) = $this->normalizeDep($dep);
         if (!$newdep) {
             return $this->raiseError("Invalid Dependency");
         }
+
         if (method_exists($this, "validate{$type}Dependency")) {
             return $this->{"validate{$type}Dependency"}($newdep, $dep['optional'] == 'no',
                 $params, true);
@@ -64074,11 +63431,13 @@ class PEAR_Dependency2
             'os' => 'Os',
             'php' => 'Php'
         );
-        if (isset($types[$dep['type']])) {
-            $type = $types[$dep['type']];
-        } else {
+
+        if (!isset($types[$dep['type']])) {
             return array(false, false);
         }
+
+        $type = $types[$dep['type']];
+
         $newdep = array();
         switch ($type) {
             case 'Package' :
@@ -64088,6 +63447,7 @@ class PEAR_Dependency2
                 $newdep['name'] = $dep['name'];
             break;
         }
+
         $dep['rel'] = PEAR_Dependency2::signOperator($dep['rel']);
         switch ($dep['rel']) {
             case 'has' :
@@ -64123,8 +63483,9 @@ class PEAR_Dependency2
         }
         if ($type == 'Php') {
             if (!isset($newdep['min'])) {
-                $newdep['min'] = '4.2.0';
+                $newdep['min'] = '4.4.0';
             }
+
             if (!isset($newdep['max'])) {
                 $newdep['max'] = '6.0.0';
             }
@@ -64160,6 +63521,7 @@ class PEAR_Dependency2
         if (isset($this->_options['ignore-errors'])) {
             return $this->warning($msg);
         }
+
         return PEAR::raiseError(sprintf($msg, $this->_registry->parsedPackageNameToString(
             $this->_currentPackage, true)));
     }
@@ -64169,26 +63531,19 @@ class PEAR_Dependency2
         return array(sprintf($msg, $this->_registry->parsedPackageNameToString(
             $this->_currentPackage, true)));
     }
-}
-?><?php
+}<?php
 /**
  * PEAR_DependencyDB, advanced installed packages dependency database
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: DependencyDB.php,v 1.37 2008/01/03 20:26:35 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: DependencyDB.php,v 1.44 2009/03/21 15:15:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -64206,9 +63561,9 @@ $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array();
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Tomas V.V.Cox <cox at idec.net.com>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -64271,18 +63626,18 @@ class PEAR_DependencyDB
      */
     function &singleton(&$config, $depdb = false)
     {
-        if (!isset($GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
-              [$config->get('php_dir', null, 'pear.php.net')])) {
+        $phpdir = $config->get('php_dir', null, 'pear.php.net');
+        if (!isset($GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir])) {
             $a = new PEAR_DependencyDB;
-            $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
-              [$config->get('php_dir', null, 'pear.php.net')] = &$a;
+            $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir] = &$a;
             $a->setConfig($config, $depdb);
-            if (PEAR::isError($e = $a->assertDepsDB())) {
+            $e = $a->assertDepsDB();
+            if (PEAR::isError($e)) {
                 return $e;
             }
         }
-        return $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE']
-              [$config->get('php_dir', null, 'pear.php.net')];
+
+        return $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir];
     }
 
     /**
@@ -64297,6 +63652,7 @@ class PEAR_DependencyDB
         } else {
             $this->_config = &$config;
         }
+
         $this->_registry = &$this->_config->getRegistry();
         if (!$depdb) {
             $this->_depdb = $this->_config->get('php_dir', null, 'pear.php.net') .
@@ -64304,6 +63660,7 @@ class PEAR_DependencyDB
         } else {
             $this->_depdb = $depdb;
         }
+
         $this->_lockfile = dirname($this->_depdb) . DIRECTORY_SEPARATOR . '.depdblock';
     }
     // }}}
@@ -64317,13 +63674,15 @@ class PEAR_DependencyDB
                 if ($dir != '.' && file_exists($dir)) {
                     if (is_writeable($dir)) {
                         return true;
-                    } else {
-                        return false;
                     }
+
+                    return false;
                 }
             }
+
             return false;
         }
+
         return is_writeable($this->_depdb);
     }
 
@@ -64344,6 +63703,7 @@ class PEAR_DependencyDB
             if ($depdb['_version'] < $this->_version) {
                 $this->rebuildDB();
             }
+
             if ($depdb['_version']{0} > $this->_version{0}) {
                 return PEAR::raiseError('Dependency database is version ' .
                     $depdb['_version'] . ', and we are version ' .
@@ -64367,9 +63727,11 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         if (isset($data['packages'][$channel][$package])) {
             return $data['packages'][$channel][$package];
         }
+
         return false;
     }
 
@@ -64389,19 +63751,24 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         $depend = $this->getDependentPackages($pkg);
         if (!$depend) {
             return false;
         }
+
         $dependencies = array();
         foreach ($depend as $info) {
             $temp = $this->getDependencies($info);
             foreach ($temp as $dep) {
-                if (strtolower($dep['dep']['channel']) == strtolower($channel) &&
-                      strtolower($dep['dep']['name']) == strtolower($package)) {
+                if (isset($dep['dep'], $dep['dep']['channel'], $dep['dep']['name']) &&
+                      strtolower($dep['dep']['channel']) == $channel &&
+                      strtolower($dep['dep']['name']) == $package
+                ) {
                     if (!isset($dependencies[$info['channel']])) {
                         $dependencies[$info['channel']] = array();
                     }
+
                     if (!isset($dependencies[$info['channel']][$info['package']])) {
                         $dependencies[$info['channel']][$info['package']] = array();
                     }
@@ -64409,6 +63776,7 @@ class PEAR_DependencyDB
                 }
             }
         }
+
         return $dependencies;
     }
 
@@ -64426,10 +63794,12 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         $data = $this->_getDepDB();
         if (isset($data['dependencies'][$channel][$package])) {
             return $data['dependencies'][$channel][$package];
         }
+
         return false;
     }
 
@@ -64444,7 +63814,7 @@ class PEAR_DependencyDB
         $this->_getDepDB();
         return $this->_dependsOn($parent, $child, $c);
     }
-    
+
     function _dependsOn($parent, $child, &$checked)
     {
         if (is_object($parent)) {
@@ -64454,6 +63824,7 @@ class PEAR_DependencyDB
             $channel = strtolower($parent['channel']);
             $package = strtolower($parent['package']);
         }
+
         if (is_object($child)) {
             $depchannel = strtolower($child->getChannel());
             $deppackage = strtolower($child->getPackage());
@@ -64461,13 +63832,16 @@ class PEAR_DependencyDB
             $depchannel = strtolower($child['channel']);
             $deppackage = strtolower($child['package']);
         }
+
         if (isset($checked[$channel][$package][$depchannel][$deppackage])) {
             return false; // avoid endless recursion
         }
+
         $checked[$channel][$package][$depchannel][$deppackage] = true;
         if (!isset($this->_cache['dependencies'][$channel][$package])) {
             return false;
         }
+
         foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
             if (isset($info['dep']['uri'])) {
                 if (is_object($child)) {
@@ -64481,11 +63855,13 @@ class PEAR_DependencyDB
                 }
                 return false;
             }
-            if (strtolower($info['dep']['channel']) == strtolower($depchannel) &&
-                  strtolower($info['dep']['name']) == strtolower($deppackage)) {
+
+            if (strtolower($info['dep']['channel']) == $depchannel &&
+                  strtolower($info['dep']['name']) == $deppackage) {
                 return true;
             }
         }
+
         foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
             if (isset($info['dep']['uri'])) {
                 if ($this->_dependsOn(array(
@@ -64501,6 +63877,7 @@ class PEAR_DependencyDB
                 }
             }
         }
+
         return false;
     }
 
@@ -64534,50 +63911,51 @@ class PEAR_DependencyDB
             $channel = strtolower($pkg['channel']);
             $package = strtolower($pkg['package']);
         }
+
         if (!isset($data['dependencies'][$channel][$package])) {
             return true;
         }
+
         foreach ($data['dependencies'][$channel][$package] as $dep) {
-            $found = false;
-            if (isset($dep['dep']['uri'])) {
-                $depchannel = '__uri';
-            } else {
-                $depchannel = strtolower($dep['dep']['channel']);
-            }
-            if (isset($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {
-                foreach ($data['packages'][$depchannel][strtolower($dep['dep']['name'])] as
-                      $i => $info) {
-                    if ($info['channel'] == $channel &&
-                          $info['package'] == $package) {
+            $found      = false;
+            $depchannel = isset($dep['dep']['uri']) ? '__uri' : strtolower($dep['dep']['channel']);
+            $depname    = strtolower($dep['dep']['name']);
+            if (isset($data['packages'][$depchannel][$depname])) {
+                foreach ($data['packages'][$depchannel][$depname] as $i => $info) {
+                    if ($info['channel'] == $channel && $info['package'] == $package) {
                         $found = true;
                         break;
                     }
                 }
             }
+
             if ($found) {
-                unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])][$i]);
-                if (!count($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {
-                    unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])]);
+                unset($data['packages'][$depchannel][$depname][$i]);
+                if (!count($data['packages'][$depchannel][$depname])) {
+                    unset($data['packages'][$depchannel][$depname]);
                     if (!count($data['packages'][$depchannel])) {
                         unset($data['packages'][$depchannel]);
                     }
                 } else {
-                    $data['packages'][$depchannel][strtolower($dep['dep']['name'])] =
-                        array_values(
-                            $data['packages'][$depchannel][strtolower($dep['dep']['name'])]);
+                    $data['packages'][$depchannel][$depname] =
+                        array_values($data['packages'][$depchannel][$depname]);
                 }
             }
         }
+
         unset($data['dependencies'][$channel][$package]);
         if (!count($data['dependencies'][$channel])) {
             unset($data['dependencies'][$channel]);
         }
+
         if (!count($data['dependencies'])) {
             unset($data['dependencies']);
         }
+
         if (!count($data['packages'])) {
             unset($data['packages']);
         }
+
         $this->_writeDepDB($data);
     }
 
@@ -64592,10 +63970,12 @@ class PEAR_DependencyDB
             // allow startup for read-only with older Registry
             return $depdb;
         }
+
         $packages = $this->_registry->listAllPackages();
         if (PEAR::isError($packages)) {
             return $packages;
         }
+
         foreach ($packages as $channel => $ps) {
             foreach ($ps as $package) {
                 $package = $this->_registry->getPackage($package, $channel);
@@ -64605,10 +63985,12 @@ class PEAR_DependencyDB
                 $this->_setPackageDeps($depdb, $package);
             }
         }
+
         $error = $this->_writeDepDB($depdb);
         if (PEAR::isError($error)) {
             return $error;
         }
+
         $this->_cache = $depdb;
         return true;
     }
@@ -64621,40 +64003,47 @@ class PEAR_DependencyDB
      */
     function _lock($mode = LOCK_EX)
     {
-        if (!eregi('Windows 9', php_uname())) {
-            if ($mode != LOCK_UN && is_resource($this->_lockFp)) {
-                // XXX does not check type of lock (LOCK_SH/LOCK_EX)
-                return true;
-            }
-            $open_mode = 'w';
-            // XXX People reported problems with LOCK_SH and 'w'
-            if ($mode === LOCK_SH) {
-                if (!file_exists($this->_lockfile)) {
-                    touch($this->_lockfile);
-                } elseif (!is_file($this->_lockfile)) {
-                    return PEAR::raiseError('could not create Dependency lock file, ' .
-                        'it exists and is not a regular file');
-                }
-                $open_mode = 'r';
-            }
+        if (stristr(php_uname(), 'Windows 9')) {
+            return true;
+        }
 
-            if (!is_resource($this->_lockFp)) {
-                $this->_lockFp = @fopen($this->_lockfile, $open_mode);
-            }
-            if (!is_resource($this->_lockFp)) {
-                return PEAR::raiseError("could not create Dependency lock file" .
-                                         (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+        if ($mode != LOCK_UN && is_resource($this->_lockFp)) {
+            // XXX does not check type of lock (LOCK_SH/LOCK_EX)
+            return true;
+        }
+
+        $open_mode = 'w';
+        // XXX People reported problems with LOCK_SH and 'w'
+        if ($mode === LOCK_SH) {
+            if (!file_exists($this->_lockfile)) {
+                touch($this->_lockfile);
+            } elseif (!is_file($this->_lockfile)) {
+                return PEAR::raiseError('could not create Dependency lock file, ' .
+                    'it exists and is not a regular file');
             }
-            if (!(int)flock($this->_lockFp, $mode)) {
-                switch ($mode) {
-                    case LOCK_SH: $str = 'shared';    break;
-                    case LOCK_EX: $str = 'exclusive'; break;
-                    case LOCK_UN: $str = 'unlock';    break;
-                    default:      $str = 'unknown';   break;
-                }
-                return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");
+            $open_mode = 'r';
+        }
+
+        if (!is_resource($this->_lockFp)) {
+            $this->_lockFp = @fopen($this->_lockfile, $open_mode);
+        }
+
+        if (!is_resource($this->_lockFp)) {
+            return PEAR::raiseError("could not create Dependency lock file" .
+                                     (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+        }
+
+        if (!(int)flock($this->_lockFp, $mode)) {
+            switch ($mode) {
+                case LOCK_SH: $str = 'shared';    break;
+                case LOCK_EX: $str = 'exclusive'; break;
+                case LOCK_UN: $str = 'unlock';    break;
+                default:      $str = 'unknown';   break;
             }
+
+            return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");
         }
+
         return true;
     }
 
@@ -64682,13 +64071,16 @@ class PEAR_DependencyDB
         if (!$this->hasWriteAccess()) {
             return array('_version' => $this->_version);
         }
+
         if (isset($this->_cache)) {
             return $this->_cache;
         }
+
         if (!$fp = fopen($this->_depdb, 'r')) {
             $err = PEAR::raiseError("Could not open dependencies file `".$this->_depdb."'");
             return $err;
         }
+
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
         clearstatcache();
@@ -64710,10 +64102,12 @@ class PEAR_DependencyDB
         if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
             return $e;
         }
+
         if (!$fp = fopen($this->_depdb, 'wb')) {
             $this->_unlock();
             return PEAR::raiseError("Could not open dependencies file `".$this->_depdb."' for writing");
         }
+
         $rt = get_magic_quotes_runtime();
         set_magic_quotes_runtime(0);
         fwrite($fp, serialize($deps));
@@ -64740,70 +64134,89 @@ class PEAR_DependencyDB
         } else {
             $deps = $pkg->getDeps(true);
         }
+
         if (!$deps) {
             return;
         }
+
         if (!is_array($data)) {
             $data = array();
         }
+
         if (!isset($data['dependencies'])) {
             $data['dependencies'] = array();
         }
-        if (!isset($data['dependencies'][strtolower($pkg->getChannel())])) {
-            $data['dependencies'][strtolower($pkg->getChannel())] = array();
+
+        $channel = strtolower($pkg->getChannel());
+        $package = strtolower($pkg->getPackage());
+
+        if (!isset($data['dependencies'][$channel])) {
+            $data['dependencies'][$channel] = array();
         }
-        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())]
-            = array();
+
+        $data['dependencies'][$channel][$package] = array();
         if (isset($deps['required']['package'])) {
             if (!isset($deps['required']['package'][0])) {
                 $deps['required']['package'] = array($deps['required']['package']);
             }
+
             foreach ($deps['required']['package'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'required');
             }
         }
+
         if (isset($deps['optional']['package'])) {
             if (!isset($deps['optional']['package'][0])) {
                 $deps['optional']['package'] = array($deps['optional']['package']);
             }
+
             foreach ($deps['optional']['package'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'optional');
             }
         }
+
         if (isset($deps['required']['subpackage'])) {
             if (!isset($deps['required']['subpackage'][0])) {
                 $deps['required']['subpackage'] = array($deps['required']['subpackage']);
             }
+
             foreach ($deps['required']['subpackage'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'required');
             }
         }
+
         if (isset($deps['optional']['subpackage'])) {
             if (!isset($deps['optional']['subpackage'][0])) {
                 $deps['optional']['subpackage'] = array($deps['optional']['subpackage']);
             }
+
             foreach ($deps['optional']['subpackage'] as $dep) {
                 $this->_registerDep($data, $pkg, $dep, 'optional');
             }
         }
+
         if (isset($deps['group'])) {
             if (!isset($deps['group'][0])) {
                 $deps['group'] = array($deps['group']);
             }
+
             foreach ($deps['group'] as $group) {
                 if (isset($group['package'])) {
                     if (!isset($group['package'][0])) {
                         $group['package'] = array($group['package']);
                     }
+
                     foreach ($group['package'] as $dep) {
                         $this->_registerDep($data, $pkg, $dep, 'optional',
                             $group['attribs']['name']);
                     }
                 }
+
                 if (isset($group['subpackage'])) {
                     if (!isset($group['subpackage'][0])) {
                         $group['subpackage'] = array($group['subpackage']);
                     }
+
                     foreach ($group['subpackage'] as $dep) {
                         $this->_registerDep($data, $pkg, $dep, 'optional',
                             $group['attribs']['name']);
@@ -64811,12 +64224,11 @@ class PEAR_DependencyDB
                 }
             }
         }
-        if ($data['dependencies'][strtolower($pkg->getChannel())]
-              [strtolower($pkg->getPackage())] == array()) {
-            unset($data['dependencies'][strtolower($pkg->getChannel())]
-              [strtolower($pkg->getPackage())]);
-            if (!count($data['dependencies'][strtolower($pkg->getChannel())])) {
-                unset($data['dependencies'][strtolower($pkg->getChannel())]);
+
+        if ($data['dependencies'][$channel][$package] == array()) {
+            unset($data['dependencies'][$channel][$package]);
+            if (!count($data['dependencies'][$channel])) {
+                unset($data['dependencies'][$channel]);
             }
         }
     }
@@ -64831,78 +64243,78 @@ class PEAR_DependencyDB
     function _registerDep(&$data, &$pkg, $dep, $type, $group = false)
     {
         $info = array(
-            'dep' => $dep,
-            'type' => $type,
-            'group' => $group);
+            'dep'   => $dep,
+            'type'  => $type,
+            'group' => $group
+        );
 
-        if (isset($dep['channel'])) {
-            $depchannel = $dep['channel'];
-        } else {
-            $depchannel = '__uri';
-        }
+        $dep  = array_map('strtolower', $dep);
+        $depchannel = isset($dep['channel']) ? $dep['channel'] : '__uri';
         if (!isset($data['dependencies'])) {
             $data['dependencies'] = array();
         }
-        if (!isset($data['dependencies'][strtolower($pkg->getChannel())])) {
-            $data['dependencies'][strtolower($pkg->getChannel())] = array();
+
+        $channel = strtolower($pkg->getChannel());
+        $package = strtolower($pkg->getPackage());
+
+        if (!isset($data['dependencies'][$channel])) {
+            $data['dependencies'][$channel] = array();
         }
-        if (!isset($data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())])) {
-            $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())] = array();
+
+        if (!isset($data['dependencies'][$channel][$package])) {
+            $data['dependencies'][$channel][$package] = array();
         }
-        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())][]
-            = $info;
-        if (isset($data['packages'][strtolower($depchannel)][strtolower($dep['name'])])) {
+
+        $data['dependencies'][$channel][$package][] = $info;
+        if (isset($data['packages'][$depchannel][$dep['name']])) {
             $found = false;
-            foreach ($data['packages'][strtolower($depchannel)][strtolower($dep['name'])]
-                  as $i => $p) {
-                if ($p['channel'] == strtolower($pkg->getChannel()) &&
-                      $p['package'] == strtolower($pkg->getPackage())) {
+            foreach ($data['packages'][$depchannel][$dep['name']] as $i => $p) {
+                if ($p['channel'] == $channel && $p['package'] == $package) {
                     $found = true;
                     break;
                 }
             }
+
             if (!$found) {
-                $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]
-                    = array('channel' => strtolower($pkg->getChannel()),
-                            'package' => strtolower($pkg->getPackage()));
+                $data['packages'][$depchannel][$dep['name']][] = array(
+                    'channel' => $channel,
+                    'package' => $package
+                );
             }
         } else {
             if (!isset($data['packages'])) {
                 $data['packages'] = array();
             }
-            if (!isset($data['packages'][strtolower($depchannel)])) {
-                $data['packages'][strtolower($depchannel)] = array();
+
+            if (!isset($data['packages'][$depchannel])) {
+                $data['packages'][$depchannel] = array();
             }
-            if (!isset($data['packages'][strtolower($depchannel)][strtolower($dep['name'])])) {
-                $data['packages'][strtolower($depchannel)][strtolower($dep['name'])] = array();
+
+            if (!isset($data['packages'][$depchannel][$dep['name']])) {
+                $data['packages'][$depchannel][$dep['name']] = array();
             }
-            $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]
-                = array('channel' => strtolower($pkg->getChannel()),
-                        'package' => strtolower($pkg->getPackage()));
+
+            $data['packages'][$depchannel][$dep['name']][] = array(
+                'channel' => $channel,
+                'package' => $package
+            );
         }
     }
-}
-?><?php
+}<?php
 /**
  * PEAR_Downloader, the PEAR Installer's download utility class
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Downloader.php,v 1.138 2008/04/11 01:16:40 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Downloader.php,v 1.159 2009/03/08 04:01:08 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.3.0
  */
@@ -64927,9 +64339,9 @@ define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.0
  */
@@ -64942,12 +64354,6 @@ class PEAR_Downloader extends PEAR_Common
     var $_registry;
 
     /**
-     * @var PEAR_Remote
-     * @access private
-     */
-    var $_remote;
-
-    /**
      * Preferred Installation State (snapshot, devel, alpha, beta, stable)
      * @var string|null
      * @access private
@@ -65058,7 +64464,6 @@ class PEAR_Downloader extends PEAR_Common
             $this->config->setInstallRoot($this->_options['installroot']);
         }
         $this->_registry = &$config->getRegistry();
-        $this->_remote = &$config->getRemote();
 
         if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
             $this->_installed = $this->_registry->listAllPackages();
@@ -65086,16 +64491,26 @@ class PEAR_Downloader extends PEAR_Common
         if (!class_exists('System')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
         }
-        $a = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui,
-            System::mktemp(array('-d')), $callback, false);
+
+        $tmp = System::mktemp(array('-d'));
+        $a   = $this->downloadHttp('http://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false);
         PEAR::popErrorHandling();
         if (PEAR::isError($a)) {
-            return false;
+            // Attempt to fallback to https automatically.
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $this->log(1, 'Attempting fallback to https instead of http on channel "' . $channel . '"...');
+            $a = $this->downloadHttp('https://' . $channel . '/channel.xml', $this->ui, $tmp, $callback, false);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($a)) {
+                return false;
+            }
         }
+
         list($a, $lastmodified) = $a;
         if (!class_exists('PEAR_ChannelFile')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
         }
+
         $b = new PEAR_ChannelFile;
         if ($b->fromXmlFile($a)) {
             unlink($a);
@@ -65105,11 +64520,14 @@ class PEAR_Downloader extends PEAR_Common
                 if ($b->getName() == $this->_registry->channelName($b->getAlias())) {
                     $alias = $b->getAlias();
                 }
+
                 $this->log(1, 'Auto-discovered channel "' . $channel .
                     '", alias "' . $alias . '", adding to registry');
             }
+
             return true;
         }
+
         unlink($a);
         return false;
     }
@@ -65150,12 +64568,11 @@ class PEAR_Downloader extends PEAR_Common
             $a = array();
             return $a;
         }
+
         if (!isset($this->_registry)) {
             $this->_registry = &$this->config->getRegistry();
         }
-        if (!isset($this->_remote)) {
-            $this->_remote = &$this->config->getRemote();
-        }
+
         $channelschecked = array();
         // convert all parameters into PEAR_Downloader_Package objects
         foreach ($params as $i => $param) {
@@ -65167,23 +64584,30 @@ class PEAR_Downloader extends PEAR_Common
                 // skip parameters that were missed by preferred_state
                 continue;
             }
+
             if (PEAR::isError($err)) {
-                if (!isset($this->_options['soft'])) {
+                if (!isset($this->_options['soft']) && $err->getMessage() !== '') {
                     $this->log(0, $err->getMessage());
                 }
+
                 $params[$i] = false;
                 if (is_object($param)) {
                     $param = $param->getChannel() . '/' . $param->getPackage();
                 }
-                $this->pushError('Package "' . $param . '" is not valid',
-                    PEAR_INSTALLER_SKIPPED);
+
+                if (!isset($this->_options['soft'])) {
+                    $this->log(2, 'Package "' . $param . '" is not valid');
+                }
+
+                // Message logged above in a specific verbose mode, passing null to not show up on CLI
+                $this->pushError(null, PEAR_INSTALLER_SKIPPED);
             } else {
                 do {
                     if ($params[$i] && $params[$i]->getType() == 'local') {
-                        // bug #7090
-                        // skip channel.xml check for local packages
+                        // bug #7090 skip channel.xml check for local packages
                         break;
                     }
+
                     if ($params[$i] && !isset($channelschecked[$params[$i]->getChannel()]) &&
                           !isset($this->_options['offline'])) {
                         $channelschecked[$params[$i]->getChannel()] = true;
@@ -65191,15 +64615,18 @@ class PEAR_Downloader extends PEAR_Common
                         if (!class_exists('System')) {
                             require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
                         }
+
                         $curchannel = &$this->_registry->getChannel($params[$i]->getChannel());
                         if (PEAR::isError($curchannel)) {
                             PEAR::staticPopErrorHandling();
                             return $this->raiseError($curchannel);
                         }
+
                         if (PEAR::isError($dir = $this->getDownloadDir())) {
                             PEAR::staticPopErrorHandling();
                             break;
                         }
+
                         $mirror = $this->config->get('preferred_mirror', null,
                                                      $params[$i]->getChannel());
                         $a = $this->downloadHttp('http://' . $mirror .
@@ -65207,13 +64634,22 @@ class PEAR_Downloader extends PEAR_Common
 
                         PEAR::staticPopErrorHandling();
                         if (PEAR::isError($a) || !$a) {
-                            break;
+                            // Attempt fallback to https automatically
+                            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                            $a = $this->downloadHttp('https://' . $mirror .
+                                '/channel.xml', $this->ui, $dir, null, $curchannel->lastModified());
+
+                            PEAR::staticPopErrorHandling();
+                            if (PEAR::isError($a) || !$a) {
+                                break;
+                            }
                         }
                         $this->log(0, 'WARNING: channel "' . $params[$i]->getChannel() . '" has ' .
-                            'updated its protocols, use "channel-update ' . $params[$i]->getChannel() .
+                            'updated its protocols, use "' . PEAR_RUNTYPE . ' channel-update ' . $params[$i]->getChannel() .
                             '" to update');
                     }
                 } while (false);
+
                 if ($params[$i] && !isset($this->_options['downloadonly'])) {
                     if (isset($this->_options['packagingroot'])) {
                         $checkdir = $this->_prependPath(
@@ -65223,12 +64659,15 @@ class PEAR_Downloader extends PEAR_Common
                         $checkdir = $this->config->get('php_dir',
                             null, $params[$i]->getChannel());
                     }
+
                     while ($checkdir && $checkdir != '/' && !file_exists($checkdir)) {
                         $checkdir = dirname($checkdir);
                     }
+
                     if ($checkdir == '.') {
                         $checkdir = '/';
                     }
+
                     if (!is_writeable($checkdir)) {
                         return PEAR::raiseError('Cannot install, php_dir for channel "' .
                             $params[$i]->getChannel() . '" is not writeable by the current user');
@@ -65236,12 +64675,14 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         unset($channelschecked);
         PEAR_Downloader_Package::removeDuplicates($params);
         if (!count($params)) {
             $a = array();
             return $a;
         }
+
         if (!isset($this->_options['nodeps']) && !isset($this->_options['offline'])) {
             $reverify = true;
             while ($reverify) {
@@ -65263,13 +64704,16 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         if (isset($this->_options['offline'])) {
             $this->log(3, 'Skipping dependency download check, --offline specified');
         }
+
         if (!count($params)) {
             $a = array();
             return $a;
         }
+
         while (PEAR_Downloader_Package::mergeDependencies($params));
         PEAR_Downloader_Package::removeDuplicates($params, true);
         $errorparams = array();
@@ -65283,12 +64727,14 @@ class PEAR_Downloader extends PEAR_Common
                 return $a;
             }
         }
+
         PEAR_Downloader_Package::removeInstalled($params);
         if (!count($params)) {
             $this->pushError('No valid packages found', PEAR_INSTALLER_FAILED);
             $a = array();
             return $a;
         }
+
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
         $err = $this->analyzeDependencies($params);
         PEAR::popErrorHandling();
@@ -65297,11 +64743,13 @@ class PEAR_Downloader extends PEAR_Common
             $a = array();
             return $a;
         }
+
         $ret = array();
         $newparams = array();
         if (isset($this->_options['pretend'])) {
             return $params;
         }
+
         $somefailed = false;
         foreach ($params as $i => $package) {
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
@@ -65318,11 +64766,15 @@ class PEAR_Downloader extends PEAR_Common
                 $somefailed = true;
                 continue;
             }
+
             $newparams[] = &$params[$i];
-            $ret[] = array('file' => $pf->getArchiveFile(),
-                                   'info' => &$pf,
-                                   'pkg' => $pf->getPackage());
+            $ret[] = array(
+                'file' => $pf->getArchiveFile(),
+                'info' => &$pf,
+                'pkg'  => $pf->getPackage()
+            );
         }
+
         if ($somefailed) {
             // remove params that did not download successfully
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
@@ -65334,6 +64786,7 @@ class PEAR_Downloader extends PEAR_Common
                 return $a;
             }
         }
+
         $this->_downloadedPackages = $ret;
         return $newparams;
     }
@@ -65347,8 +64800,9 @@ class PEAR_Downloader extends PEAR_Common
         if (isset($this->_options['downloadonly'])) {
             return;
         }
+
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $redo = true;
+        $redo  = true;
         $reset = false;
         while ($redo) {
             $redo = false;
@@ -65357,50 +64811,50 @@ class PEAR_Downloader extends PEAR_Common
                 if (!$deps) {
                     $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),
                         $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);
-                    if ($param->getType() == 'xmlrpc') {
-                        $send = $param->getDownloadURL();
-                    } else {
-                        $send = $param->getPackageFile();
-                    }
+                    $send = $param->getPackageFile();
+
                     $installcheck = $depchecker->validatePackage($send, $this, $params);
                     if (PEAR::isError($installcheck)) {
                         if (!isset($this->_options['soft'])) {
                             $this->log(0, $installcheck->getMessage());
                         }
-                        $hasfailed = true;
+                        $hasfailed  = true;
                         $params[$i] = false;
-                        $reset = true;
-                        $redo = true;
-                        $failed = false;
+                        $reset      = true;
+                        $redo       = true;
+                        $failed     = false;
                         PEAR_Downloader_Package::removeDuplicates($params);
                         continue 2;
                     }
                     continue;
                 }
+
                 if (!$reset && $param->alreadyValidated() && !$force) {
                     continue;
                 }
+
                 if (count($deps)) {
                     $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),
                         $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);
-                    if ($param->getType() == 'xmlrpc') {
+                    $send = $param->getPackageFile();
+                    if ($send === null) {
                         $send = $param->getDownloadURL();
-                    } else {
-                        $send = $param->getPackageFile();
                     }
+
                     $installcheck = $depchecker->validatePackage($send, $this, $params);
                     if (PEAR::isError($installcheck)) {
                         if (!isset($this->_options['soft'])) {
                             $this->log(0, $installcheck->getMessage());
                         }
-                        $hasfailed = true;
+                        $hasfailed  = true;
                         $params[$i] = false;
-                        $reset = true;
-                        $redo = true;
-                        $failed = false;
+                        $reset      = true;
+                        $redo       = true;
+                        $failed     = false;
                         PEAR_Downloader_Package::removeDuplicates($params);
                         continue 2;
                     }
+
                     $failed = false;
                     if (isset($deps['required'])) {
                         foreach ($deps['required'] as $type => $dep) {
@@ -65435,6 +64889,7 @@ class PEAR_Downloader extends PEAR_Common
                                 }
                             }
                         }
+
                         if (isset($deps['optional'])) {
                             foreach ($deps['optional'] as $type => $dep) {
                                 if (!isset($dep[0])) {
@@ -65468,11 +64923,13 @@ class PEAR_Downloader extends PEAR_Common
                                 }
                             }
                         }
+
                         $groupname = $param->getGroup();
                         if (isset($deps['group']) && $groupname) {
                             if (!isset($deps['group'][0])) {
                                 $deps['group'] = array($deps['group']);
                             }
+
                             $found = false;
                             foreach ($deps['group'] as $group) {
                                 if ($group['attribs']['name'] == $groupname) {
@@ -65480,6 +64937,7 @@ class PEAR_Downloader extends PEAR_Common
                                     break;
                                 }
                             }
+
                             if ($found) {
                                 unset($group['attribs']);
                                 foreach ($group as $type => $dep) {
@@ -65531,12 +64989,13 @@ class PEAR_Downloader extends PEAR_Common
                     }
                     $params[$i]->setValidated();
                 }
+
                 if ($failed) {
-                    $hasfailed = true;
+                    $hasfailed  = true;
                     $params[$i] = false;
-                    $reset = true;
-                    $redo = true;
-                    $failed = false;
+                    $reset      = true;
+                    $redo       = true;
+                    $failed     = false;
                     PEAR_Downloader_Package::removeDuplicates($params);
                     continue 2;
                 }
@@ -65659,152 +65118,124 @@ class PEAR_Downloader extends PEAR_Common
         $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');
         if (!$this->_registry->channelExists($parr['channel'])) {
             do {
-                if ($this->config->get('auto_discover')) {
-                    if ($this->discover($parr['channel'])) {
-                        break;
-                    }
+                if ($this->config->get('auto_discover') && $this->discover($parr['channel'])) {
+                    break;
                 }
+
                 $this->configSet('default_channel', $curchannel);
-                return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);
+                return PEAR::raiseError('Unknown remote channel: ' . $parr['channel']);
             } while (false);
         }
+
         $chan = &$this->_registry->getChannel($parr['channel']);
         if (PEAR::isError($chan)) {
             return $chan;
         }
+
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $version = $this->_registry->packageInfo($parr['package'], 'version',
-            $parr['channel']);
+        $version   = $this->_registry->packageInfo($parr['package'], 'version', $parr['channel']);
+        $stability = $this->_registry->packageInfo($parr['package'], 'stability', $parr['channel']);
+        // package is installed - use the installed release stability level
+        if (!isset($parr['state']) && $stability !== null) {
+            $state = $stability['release'];
+        }
         PEAR::staticPopErrorHandling();
         $base2 = false;
-        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
-              (($base2 = $chan->getBaseURL('REST1.3', $this->config->get('preferred_mirror'))) ||
-              ($base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))))) {
-            if ($base2) {
-                $rest = &$this->config->getREST('1.3', $this->_options);
-                $base = $base2;
-            } else {
-                $rest = &$this->config->getREST('1.0', $this->_options);
-            }
-            if (!isset($parr['version']) && !isset($parr['state']) && $version
-                  && !PEAR::isError($version)
-                  && !isset($this->_options['downloadonly'])) {
-                $url = $rest->getDownloadURL($base, $parr, $state, $version, $chan->getName());
-            } else {
-                $url = $rest->getDownloadURL($base, $parr, $state, false, $chan->getName());
-            }
-            if (PEAR::isError($url)) {
-                $this->configSet('default_channel', $curchannel);
-                return $url;
-            }
-            if ($parr['channel'] != $curchannel) {
-                $this->configSet('default_channel', $curchannel);
-            }
-            if (!is_array($url)) {
-                return $url;
-            }
-            $url['raw'] = false; // no checking is necessary for REST
-            if (!is_array($url['info'])) {
-                return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
-                    'this should never happen');
-            }
-            if (!isset($this->_options['force']) &&
-                  !isset($this->_options['downloadonly']) &&
-                  $version &&
-                  !PEAR::isError($version) &&
-                  !isset($parr['group'])) {
-                if (version_compare($version, $url['version'], '>=')) {
-                    return PEAR::raiseError($this->_registry->parsedPackageNameToString(
-                        $parr, true) . ' is already installed and is newer than detected ' .
-                        'release version ' . $url['version'], -976);
-                }
-            }
-            if (isset($url['info']['required']) || $url['compatible']) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
-                $pf = new PEAR_PackageFile_v2;
-                $pf->setRawChannel($parr['channel']);
-                if ($url['compatible']) {
-                    $pf->setRawCompatible($url['compatible']);
-                }
-            } else {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
-                $pf = new PEAR_PackageFile_v1;
-            }
-            $pf->setRawPackage($url['package']);
-            $pf->setDeps($url['info']);
-            if ($url['compatible']) {
-                $pf->setCompatible($url['compatible']);
-            }
-            $pf->setRawState($url['stability']);
-            $url['info'] = &$pf;
-            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
-                $ext = '.tar';
-            } else {
-                $ext = '.tgz';
-            }
-            if (is_array($url)) {
-                if (isset($url['url'])) {
-                    $url['url'] .= $ext;
-                }
-            }
-            return $url;
-        } elseif ($chan->supports('xmlrpc', 'package.getDownloadURL', false, '1.1')) {
-            // don't install with the old version information unless we're doing a plain
-            // vanilla simple installation.  If the user says to install a particular
-            // version or state, ignore the current installed version
-            if (!isset($parr['version']) && !isset($parr['state']) && $version
-                  && !isset($this->_options['downloadonly'])) {
-                $url = $this->_remote->call('package.getDownloadURL', $parr, $state, $version);
-            } else {
-                $url = $this->_remote->call('package.getDownloadURL', $parr, $state);
-            }
+
+        $preferred_mirror = $this->config->get('preferred_mirror');
+        if (!$chan->supportsREST($preferred_mirror) ||
+              (
+               !($base2 = $chan->getBaseURL('REST1.3', $preferred_mirror))
+               &&
+               !($base = $chan->getBaseURL('REST1.0', $preferred_mirror))
+              )
+        ) {
+            return $this->raiseError($parr['channel'] . ' is using a unsupported protocal - This should never happen.');
+        }
+
+        if ($base2) {
+            $rest = &$this->config->getREST('1.3', $this->_options);
+            $base = $base2;
         } else {
-            $url = $this->_remote->call('package.getDownloadURL', $parr, $state);
+            $rest = &$this->config->getREST('1.0', $this->_options);
+        }
+
+        if (!isset($parr['version']) && !isset($parr['state']) && $version
+              && !PEAR::isError($version)
+              && !isset($this->_options['downloadonly'])) {
+            $url = $rest->getDownloadURL($base, $parr, $state, $version, $chan->getName());
+        } else {
+            $url = $rest->getDownloadURL($base, $parr, $state, false, $chan->getName());
         }
+
         if (PEAR::isError($url)) {
+            $this->configSet('default_channel', $curchannel);
             return $url;
         }
+
         if ($parr['channel'] != $curchannel) {
             $this->configSet('default_channel', $curchannel);
         }
-        if (isset($url['__PEAR_ERROR_CLASS__'])) {
-            return PEAR::raiseError($url['message']);
-        }
+
         if (!is_array($url)) {
             return $url;
         }
-        $url['raw'] = $url['info'];
-        if (isset($this->_options['downloadonly'])) {
-            $pkg = &$this->getPackagefileObject($this->config, $this->debug);
-        } else {
-            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-            if (PEAR::isError($dir = $this->getDownloadDir())) {
-                PEAR::staticPopErrorHandling();
-                return $dir;
+
+        $url['raw'] = false; // no checking is necessary for REST
+        if (!is_array($url['info'])) {
+            return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
+                'this should never happen');
+        }
+
+        if (!isset($this->_options['force']) &&
+              !isset($this->_options['downloadonly']) &&
+              $version &&
+              !PEAR::isError($version) &&
+              !isset($parr['group'])
+        ) {
+            if (version_compare($version, $url['version'], '=')) {
+                return PEAR::raiseError($this->_registry->parsedPackageNameToString(
+                    $parr, true) . ' is already installed and is the same as the ' .
+                    'released version ' . $url['version'], -976);
+            }
+
+            if (version_compare($version, $url['version'], '>')) {
+                return PEAR::raiseError($this->_registry->parsedPackageNameToString(
+                    $parr, true) . ' is already installed and is newer than detected ' .
+                    'released version ' . $url['version'], -976);
             }
-            PEAR::staticPopErrorHandling();
-            $pkg = &$this->getPackagefileObject($this->config, $this->debug, $dir);
         }
-        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $pinfo = &$pkg->fromXmlString($url['info'], PEAR_VALIDATE_DOWNLOADING, 'remote');
-        PEAR::staticPopErrorHandling();
-        if (PEAR::isError($pinfo)) {
-            if (!isset($this->_options['soft'])) {
-                $this->log(0, $pinfo->getMessage());
+
+        if (isset($url['info']['required']) || $url['compatible']) {
+            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
+            $pf = new PEAR_PackageFile_v2;
+            $pf->setRawChannel($parr['channel']);
+            if ($url['compatible']) {
+                $pf->setRawCompatible($url['compatible']);
             }
-            return PEAR::raiseError('Remote package.xml is not valid - this should never happen');
+        } else {
+            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
+            $pf = new PEAR_PackageFile_v1;
+        }
+
+        $pf->setRawPackage($url['package']);
+        $pf->setDeps($url['info']);
+        if ($url['compatible']) {
+            $pf->setCompatible($url['compatible']);
         }
-        $url['info'] = &$pinfo;
+
+        $pf->setRawState($url['stability']);
+        $url['info'] = &$pf;
         if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
             $ext = '.tar';
         } else {
             $ext = '.tgz';
         }
-        if (is_array($url)) {
-            if (isset($url['url'])) {
-                $url['url'] .= $ext;
-            }
+
+        if (is_array($url) && isset($url['url'])) {
+            $url['url'] .= $ext;
         }
+
         return $url;
     }
     // }}}
@@ -65824,6 +65255,7 @@ class PEAR_Downloader extends PEAR_Common
             if (PEAR::isError($chan)) {
                 return $chan;
             }
+
             $version = $this->_registry->packageInfo($dep['name'], 'version', '__uri');
             $this->configSet('default_channel', '__uri');
         } else {
@@ -65832,6 +65264,7 @@ class PEAR_Downloader extends PEAR_Common
             } else {
                 $remotechannel = 'pear.php.net';
             }
+
             if (!$this->_registry->channelExists($remotechannel)) {
                 do {
                     if ($this->config->get('auto_discover')) {
@@ -65842,18 +65275,21 @@ class PEAR_Downloader extends PEAR_Common
                     return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);
                 } while (false);
             }
+
             $chan = &$this->_registry->getChannel($remotechannel);
             if (PEAR::isError($chan)) {
                 return $chan;
             }
-            $version = $this->_registry->packageInfo($dep['name'], 'version',
-                $remotechannel);
+
+            $version = $this->_registry->packageInfo($dep['name'], 'version', $remotechannel);
             $this->configSet('default_channel', $remotechannel);
         }
+
         $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');
         if (isset($parr['state']) && isset($parr['version'])) {
             unset($parr['state']);
         }
+
         if (isset($dep['uri'])) {
             $info = &$this->newDownloaderPackage($this);
             PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
@@ -65863,35 +65299,42 @@ class PEAR_Downloader extends PEAR_Common
                 // skip parameters that were missed by preferred_state
                 return PEAR::raiseError('Cannot initialize dependency');
             }
+
             if (PEAR::isError($err)) {
                 if (!isset($this->_options['soft'])) {
                     $this->log(0, $err->getMessage());
                 }
+
                 if (is_object($info)) {
                     $param = $info->getChannel() . '/' . $info->getPackage();
                 }
                 return PEAR::raiseError('Package "' . $param . '" is not valid');
             }
             return $info;
-        } elseif ($chan->supportsREST($this->config->get('preferred_mirror')) &&
-              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
+        } elseif ($chan->supportsREST($this->config->get('preferred_mirror'))
+              && $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))
+        ) {
             $rest = &$this->config->getREST('1.0', $this->_options);
             $url = $rest->getDepDownloadURL($base, $xsdversion, $dep, $parr,
                     $state, $version, $chan->getName());
             if (PEAR::isError($url)) {
                 return $url;
             }
+
             if ($parr['channel'] != $curchannel) {
                 $this->configSet('default_channel', $curchannel);
             }
+
             if (!is_array($url)) {
                 return $url;
             }
+
             $url['raw'] = false; // no checking is necessary for REST
             if (!is_array($url['info'])) {
                 return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .
                     'this should never happen');
             }
+
             if (isset($url['info']['required'])) {
                 if (!class_exists('PEAR_PackageFile_v2')) {
                     require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
@@ -65903,12 +65346,14 @@ class PEAR_Downloader extends PEAR_Common
                     require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
                 }
                 $pf = new PEAR_PackageFile_v1;
+
             }
             $pf->setRawPackage($url['package']);
             $pf->setDeps($url['info']);
             if ($url['compatible']) {
                 $pf->setCompatible($url['compatible']);
             }
+
             $pf->setRawState($url['stability']);
             $url['info'] = &$pf;
             if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
@@ -65916,55 +65361,15 @@ class PEAR_Downloader extends PEAR_Common
             } else {
                 $ext = '.tgz';
             }
-            if (is_array($url)) {
-                if (isset($url['url'])) {
-                    $url['url'] .= $ext;
-                }
-            }
-            return $url;
-        } elseif ($chan->supports('xmlrpc', 'package.getDepDownloadURL', false, '1.1')) {
-            if ($version) {
-                $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr,
-                    $state, $version);
-            } else {
-                $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr,
-                    $state);
-            }
-        } else {
-            $url = $this->_remote->call('package.getDepDownloadURL', $xsdversion, $dep, $parr, $state);
-        }
-        if ($this->config->get('default_channel') != $curchannel) {
-            $this->configSet('default_channel', $curchannel);
-        }
-        if (!is_array($url)) {
-            return $url;
-        }
-        if (isset($url['__PEAR_ERROR_CLASS__'])) {
-            return PEAR::raiseError($url['message']);
-        }
-        $url['raw'] = $url['info'];
-        $pkg = &$this->getPackagefileObject($this->config, $this->debug);
-        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
-        $pinfo = &$pkg->fromXmlString($url['info'], PEAR_VALIDATE_DOWNLOADING, 'remote');
-        PEAR::staticPopErrorHandling();
-        if (PEAR::isError($pinfo)) {
-            if (!isset($this->_options['soft'])) {
-                $this->log(0, $pinfo->getMessage());
-            }
-            return PEAR::raiseError('Remote package.xml is not valid - this should never happen');
-        }
-        $url['info'] = &$pinfo;
-        if (is_array($url)) {
-            if (!extension_loaded("zlib") || isset($this->_options['nocompress'])) {
-                $ext = '.tar';
-            } else {
-                $ext = '.tgz';
-            }
-            if (isset($url['url'])) {
+
+            if (is_array($url) && isset($url['url'])) {
                 $url['url'] .= $ext;
             }
+
+            return $url;
         }
-        return $url;
+
+        return $this->raiseError($parr['channel'] . ' is using a unsupported protocal - This should never happen.');
     }
     // }}}
     // {{{ getPackageDownloadUrl()
@@ -66127,6 +65532,7 @@ class PEAR_Downloader extends PEAR_Common
             $nodes[$pname]->setData($packages[$i]);
             $depgraph->addNode($nodes[$pname]);
         }
+
         $deplinks = array();
         foreach ($nodes as $package => $node) {
             $pf = &$node->getData();
@@ -66134,36 +65540,41 @@ class PEAR_Downloader extends PEAR_Common
             if (!$pdeps) {
                 continue;
             }
+
             if ($pf->getPackagexmlVersion() == '1.0') {
                 foreach ($pdeps as $dep) {
                     if ($dep['type'] != 'pkg' ||
                           (isset($dep['optional']) && $dep['optional'] == 'yes')) {
                         continue;
                     }
+
                     $dname = $reg->parsedPackageNameToString(
                           array(
                               'channel' => 'pear.php.net',
                               'package' => strtolower($dep['name']),
                           ));
-                    if (isset($nodes[$dname]))
-                    {
+
+                    if (isset($nodes[$dname])) {
                         if (!isset($deplinks[$dname])) {
                             $deplinks[$dname] = array();
                         }
+
                         $deplinks[$dname][$package] = 1;
                         // dependency is in installed packages
                         continue;
                     }
+
                     $dname = $reg->parsedPackageNameToString(
                           array(
                               'channel' => 'pecl.php.net',
                               'package' => strtolower($dep['name']),
                           ));
-                    if (isset($nodes[$dname]))
-                    {
+
+                    if (isset($nodes[$dname])) {
                         if (!isset($deplinks[$dname])) {
                             $deplinks[$dname] = array();
                         }
+
                         $deplinks[$dname][$package] = 1;
                         // dependency is in installed packages
                         continue;
@@ -66178,58 +65589,71 @@ class PEAR_Downloader extends PEAR_Common
                     if (!isset($t[0])) {
                         $t = array($t);
                     }
+
                     $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                 }
+
                 if (isset($pdeps['group'])) {
                     if (!isset($pdeps['group'][0])) {
                         $pdeps['group'] = array($pdeps['group']);
                     }
+
                     foreach ($pdeps['group'] as $group) {
                         if (isset($group['subpackage'])) {
                             $t = $group['subpackage'];
                             if (!isset($t[0])) {
                                 $t = array($t);
                             }
+
                             $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                         }
                     }
                 }
+
                 if (isset($pdeps['optional']['subpackage'])) {
                     $t = $pdeps['optional']['subpackage'];
                     if (!isset($t[0])) {
                         $t = array($t);
                     }
+
                     $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                 }
+
                 if (isset($pdeps['required']['package'])) {
                     $t = $pdeps['required']['package'];
                     if (!isset($t[0])) {
                         $t = array($t);
                     }
+
                     $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                 }
+
                 if (isset($pdeps['group'])) {
                     if (!isset($pdeps['group'][0])) {
                         $pdeps['group'] = array($pdeps['group']);
                     }
+
                     foreach ($pdeps['group'] as $group) {
                         if (isset($group['package'])) {
                             $t = $group['package'];
                             if (!isset($t[0])) {
                                 $t = array($t);
                             }
+
                             $this->_setupGraph($t, $reg, $deplinks, $nodes, $package);
                         }
                     }
                 }
             }
         }
+
         $this->_detectDepCycle($deplinks);
         foreach ($deplinks as $dependent => $parents) {
             foreach ($parents as $parent => $unused) {
                 $nodes[$dependent]->connectTo($nodes[$parent]);
             }
         }
+
         $installOrder = Structures_Graph_Manipulator_TopologicalSorter::sort($depgraph);
         $ret = array();
         for ($i = 0; $i < count($installOrder); $i++) {
@@ -66242,6 +65666,7 @@ class PEAR_Downloader extends PEAR_Common
                           ))]->getData();
             }
         }
+
         $packages = $ret;
         return;
     }
@@ -66315,15 +65740,14 @@ class PEAR_Downloader extends PEAR_Common
     function _setupGraph($t, $reg, &$deplinks, &$nodes, $package)
     {
         foreach ($t as $dep) {
-            $depchannel = !isset($dep['channel']) ?
-                '__uri': $dep['channel'];
+            $depchannel = !isset($dep['channel']) ? '__uri': $dep['channel'];
             $dname = $reg->parsedPackageNameToString(
                   array(
                       'channel' => $depchannel,
                       'package' => strtolower($dep['name']),
                   ));
-            if (isset($nodes[$dname]))
-            {
+
+            if (isset($nodes[$dname])) {
                 if (!isset($deplinks[$dname])) {
                     $deplinks[$dname] = array();
                 }
@@ -66334,8 +65758,7 @@ class PEAR_Downloader extends PEAR_Common
 
     function _dependsOn($a, $b)
     {
-        return $this->_checkDepTree(strtolower($a->getChannel()), strtolower($a->getPackage()),
-            $b);
+        return $this->_checkDepTree(strtolower($a->getChannel()), strtolower($a->getPackage()), $b);
     }
 
     function _checkDepTree($channel, $package, $b, $checked = array())
@@ -66344,10 +65767,12 @@ class PEAR_Downloader extends PEAR_Common
         if (!isset($this->_depTree[$channel][$package])) {
             return false;
         }
+
         if (isset($this->_depTree[$channel][$package][strtolower($b->getChannel())]
               [strtolower($b->getPackage())])) {
             return true;
         }
+
         foreach ($this->_depTree[$channel][$package] as $ch => $packages) {
             foreach ($packages as $pa => $true) {
                 if ($this->_checkDepTree($ch, $pa, $b, $checked)) {
@@ -66355,6 +65780,7 @@ class PEAR_Downloader extends PEAR_Common
                 }
             }
         }
+
         return false;
     }
 
@@ -66431,28 +65857,32 @@ class PEAR_Downloader extends PEAR_Common
                           $accept = false, $channel = false)
     {
         static $redirect = 0;
-        // allways reset , so we are clean case of error
+        // always reset , so we are clean case of error
         $wasredirect = $redirect;
         $redirect = 0;
         if ($callback) {
             call_user_func($callback, 'setup', array(&$ui));
         }
+
         $info = parse_url($url);
         if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
             return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
         }
+
         if (!isset($info['host'])) {
             return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
-        } else {
-            $host = isset($info['host']) ? $info['host'] : null;
-            $port = isset($info['port']) ? $info['port'] : null;
-            $path = isset($info['path']) ? $info['path'] : null;
         }
+
+        $host = isset($info['host']) ? $info['host'] : null;
+        $port = isset($info['port']) ? $info['port'] : null;
+        $path = isset($info['path']) ? $info['path'] : null;
+
         if (isset($this)) {
             $config = &$this->config;
         } else {
             $config = &PEAR_Config::singleton();
         }
+
         $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
         if ($config->get('http_proxy') &&
               $proxy = parse_url($config->get('http_proxy'))) {
@@ -66468,13 +65898,13 @@ class PEAR_Downloader extends PEAR_Common
                 call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
             }
         }
+
         if (empty($port)) {
-            if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $port = 443;
-            } else {
-                $port = 80;
-            }
+            $port = (isset($info['scheme']) && $info['scheme'] == 'https') ? 443 : 80;
         }
+
+        $scheme = (isset($info['scheme']) && $info['scheme'] == 'https') ? 'https' : 'http';
+
         if ($proxy_host != '') {
             $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
             if (!$fp) {
@@ -66484,16 +65914,21 @@ class PEAR_Downloader extends PEAR_Common
                 }
                 return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
             }
+
             if ($lastmodified === false || $lastmodified) {
-                $request = "GET $url HTTP/1.1\r\n";
+                $request  = "GET $url HTTP/1.1\r\n";
+                $request .= "Host: $host:$port\r\n";
             } else {
-                $request = "GET $url HTTP/1.0\r\n";
+                $request  = "GET $url HTTP/1.0\r\n";
+                $request .= "Host: $host\r\n";
             }
         } else {
+            $network_host = $host;
             if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $host = 'ssl://' . $host;
+                $network_host = 'ssl://' . $host;
             }
-            $fp = @fsockopen($host, $port, $errno, $errstr);
+
+            $fp = @fsockopen($network_host, $port, $errno, $errstr);
             if (!$fp) {
                 if ($callback) {
                     call_user_func($callback, 'connfailed', array($host, $port,
@@ -66501,6 +65936,7 @@ class PEAR_Downloader extends PEAR_Common
                 }
                 return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
             }
+
             if ($lastmodified === false || $lastmodified) {
                 $request = "GET $path HTTP/1.1\r\n";
                 $request .= "Host: $host:$port\r\n";
@@ -66509,19 +65945,23 @@ class PEAR_Downloader extends PEAR_Common
                 $request .= "Host: $host\r\n";
             }
         }
+
         $ifmodifiedsince = '';
         if (is_array($lastmodified)) {
             if (isset($lastmodified['Last-Modified'])) {
                 $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
             }
+
             if (isset($lastmodified['ETag'])) {
                 $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
             }
         } else {
             $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
         }
-        $request .= $ifmodifiedsince . "User-Agent: PEAR/1.7.2/PHP/" .
-            PHP_VERSION . "\r\n";
+
+        $request .= $ifmodifiedsince .
+            "User-Agent: PEAR/1.8.0/PHP/" . PHP_VERSION . "\r\n";
+
         if (isset($this)) { // only pass in authentication for non-static calls
             $username = $config->get('username', null, $channel);
             $password = $config->get('password', null, $channel);
@@ -66530,13 +65970,16 @@ class PEAR_Downloader extends PEAR_Common
                 $request .= "Authorization: Basic $tmp\r\n";
             }
         }
+
         if ($proxy_host != '' && $proxy_user != '') {
             $request .= 'Proxy-Authorization: Basic ' .
                 base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
         }
+
         if ($accept) {
             $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
         }
+
         $request .= "Connection: close\r\n";
         $request .= "\r\n";
         fwrite($fp, $request);
@@ -66546,40 +65989,45 @@ class PEAR_Downloader extends PEAR_Common
             if (preg_match('/^([^:]+):\s+(.*)\s*\\z/', $line, $matches)) {
                 $headers[strtolower($matches[1])] = trim($matches[2]);
             } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
-                $reply = (int) $matches[1];
+                $reply = (int)$matches[1];
                 if ($reply == 304 && ($lastmodified || ($lastmodified === false))) {
                     return false;
                 }
-                if (! in_array($reply, array(200, 301, 302, 303, 305, 307))) {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
+
+                if (!in_array($reply, array(200, 301, 302, 303, 305, 307))) {
+                    return PEAR::raiseError("File $scheme://$host:$port$path not valid (received: $line)");
                 }
             }
         }
+
         if ($reply != 200) {
-            if (isset($headers['location'])) {
-                if ($wasredirect < 5) {
-                    $redirect = $wasredirect + 1;
-                    return $this->downloadHttp($headers['location'],
-                            $ui, $save_dir, $callback, $lastmodified, $accept);
-                } else {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (redirection looped more than 5 times)");
-                }
-            } else {
-                return PEAR::raiseError("File http://$host:$port$path not valid (redirected but no location)");
+            if (!isset($headers['location'])) {
+                return PEAR::raiseError("File $scheme://$host:$port$path not valid (redirected but no location)");
+            }
+
+            if ($wasredirect > 4) {
+                return PEAR::raiseError("File $scheme://$host:$port$path not valid (redirection looped more than 5 times)");
             }
+
+            $redirect = $wasredirect + 1;
+            return $this->downloadHttp($headers['location'],
+                    $ui, $save_dir, $callback, $lastmodified, $accept);
         }
+
         if (isset($headers['content-disposition']) &&
             preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|\\z)/', $headers['content-disposition'], $matches)) {
             $save_as = basename($matches[1]);
         } else {
             $save_as = basename($url);
         }
+
         if ($callback) {
             $tmp = call_user_func($callback, 'saveas', $save_as);
             if ($tmp) {
                 $save_as = $tmp;
             }
         }
+
         $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
         if (!$wp = @fopen($dest_file, 'wb')) {
             fclose($fp);
@@ -66588,15 +66036,14 @@ class PEAR_Downloader extends PEAR_Common
             }
             return PEAR::raiseError("could not open $dest_file for writing");
         }
-        if (isset($headers['content-length'])) {
-            $length = $headers['content-length'];
-        } else {
-            $length = -1;
-        }
+
+        $length = isset($headers['content-length']) ? $headers['content-length'] : -1;
+
         $bytes = 0;
         if ($callback) {
             call_user_func($callback, 'start', array(basename($dest_file), $length));
         }
+
         while ($data = fread($fp, 1024)) {
             $bytes += strlen($data);
             if ($callback) {
@@ -66615,6 +66062,7 @@ class PEAR_Downloader extends PEAR_Common
         if ($callback) {
             call_user_func($callback, 'done', $bytes);
         }
+
         if ($lastmodified === false || $lastmodified) {
             if (isset($headers['etag'])) {
                 $lastmodified = array('ETag' => $headers['etag']);
@@ -66631,30 +66079,22 @@ class PEAR_Downloader extends PEAR_Common
         return $dest_file;
     }
 }
-// }}}
-
-?>
-<?php
+// }}}<?php
 /**
  * PEAR_Downloader_Package
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Package.php,v 1.113 2008/03/29 14:18:36 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Package.php,v 1.126 2009/03/07 21:51:52 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
+
 /**
  * Error code when parameter initialization fails because no releases
  * exist within preferred_state, but releases do exist
@@ -66665,6 +66105,7 @@ define('PEAR_DOWNLOADER_PACKAGE_STATE', -1003);
  * exist that will work with the existing PHP version
  */
 define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
+
 /**
  * Coordinates download parameters and manages their dependencies
  * prior to downloading them.
@@ -66688,9 +66129,9 @@ define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -66751,7 +66192,7 @@ class PEAR_Downloader_Package
      */
     var $_explicitGroup = false;
     /**
-     * Package type local|url|xmlrpc
+     * Package type local|url
      * @var string
      */
     var $_type;
@@ -66798,67 +66239,81 @@ class PEAR_Downloader_Package
     function initialize($param)
     {
         $origErr = $this->_fromFile($param);
-        if (!$this->_valid) {
-            $options = $this->_downloader->getOptions();
-            if (isset($options['offline'])) {
-                if (PEAR::isError($origErr)) {
-                    if (!isset($options['soft'])) {
-                        $this->_downloader->log(0, $origErr->getMessage());
-                    }
+        if ($this->_valid) {
+            return true;
+        }
+
+        $options = $this->_downloader->getOptions();
+        if (isset($options['offline'])) {
+            if (PEAR::isError($origErr) && !isset($options['soft'])) {
+                $this->_downloader->log(0, $origErr->getMessage());
+            }
+
+            return PEAR::raiseError('Cannot download non-local package "' . $param . '"');
+        }
+
+        $err = $this->_fromUrl($param);
+        if (PEAR::isError($err) || !$this->_valid) {
+            if ($this->_type == 'url') {
+                if (PEAR::isError($err) && !isset($options['soft'])) {
+                    $this->_downloader->log(0, $err->getMessage());
                 }
-                return PEAR::raiseError('Cannot download non-local package "' . $param . '"');
+
+                return PEAR::raiseError("Invalid or missing remote package file");
             }
-            $err = $this->_fromUrl($param);
+
+            $err = $this->_fromString($param);
             if (PEAR::isError($err) || !$this->_valid) {
-                if ($this->_type == 'url') {
-                    if (PEAR::isError($err)) {
-                        if (!isset($options['soft'])) {
-                            $this->_downloader->log(0, $err->getMessage());
-                        }
-                    }
-                    return PEAR::raiseError("Invalid or missing remote package file");
+                if (PEAR::isError($err) && $err->getCode() == PEAR_DOWNLOADER_PACKAGE_STATE) {
+                    return false; // instruct the downloader to silently skip
                 }
-                $err = $this->_fromString($param);
-                if (PEAR::isError($err) || !$this->_valid) {
-                    if (PEAR::isError($err) &&
-                          $err->getCode() == PEAR_DOWNLOADER_PACKAGE_STATE) {
-                        return false; // instruct the downloader to silently skip
-                    }
-                    if (isset($this->_type) && $this->_type == 'local' &&
-                          PEAR::isError($origErr)) {
-                        if (is_array($origErr->getUserInfo())) {
-                            foreach ($origErr->getUserInfo() as $err) {
-                                if (is_array($err)) {
-                                    $err = $err['message'];
-                                }
-                                if (!isset($options['soft'])) {
-                                    $this->_downloader->log(0, $err);
-                                }
+
+                if (isset($this->_type) && $this->_type == 'local' && PEAR::isError($origErr)) {
+                    if (is_array($origErr->getUserInfo())) {
+                        foreach ($origErr->getUserInfo() as $err) {
+                            if (is_array($err)) {
+                                $err = $err['message'];
+                            }
+
+                            if (!isset($options['soft'])) {
+                                $this->_downloader->log(0, $err);
                             }
                         }
-                        if (!isset($options['soft'])) {
-                            $this->_downloader->log(0, $origErr->getMessage());
-                        }
-                        if (is_array($param)) {
-                            $param = $this->_registry->parsedPackageNameToString($param,
-                                true);
-                        }
-                        return PEAR::raiseError(
-                            "Cannot initialize '$param', invalid or missing package file");
                     }
-                    if (PEAR::isError($err)) {
-                        if (!isset($options['soft'])) {
-                            $this->_downloader->log(0, $err->getMessage());
-                        }
+
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(0, $origErr->getMessage());
                     }
+
                     if (is_array($param)) {
                         $param = $this->_registry->parsedPackageNameToString($param, true);
                     }
-                    return PEAR::raiseError(
-                        "Cannot initialize '$param', invalid or missing package file");
+
+                    if (!isset($options['soft'])) {
+                        $this->_downloader->log(2, "Cannot initialize '$param', invalid or missing package file");
+                    }
+
+                    // Passing no message back - already logged above
+                    return PEAR::raiseError();
+                }
+
+                if (PEAR::isError($err) && !isset($options['soft'])) {
+                    $this->_downloader->log(0, $err->getMessage());
+                }
+
+                if (is_array($param)) {
+                    $param = $this->_registry->parsedPackageNameToString($param, true);
+                }
+
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(2, "Cannot initialize '$param', invalid or missing package file");
                 }
+
+                // Passing no message back - already logged above
+                return PEAR::raiseError();
             }
         }
+
         return true;
     }
 
@@ -66871,18 +66326,21 @@ class PEAR_Downloader_Package
         if (isset($this->_packagefile)) {
             return $this->_packagefile;
         }
+
         if (isset($this->_downloadURL['url'])) {
             $this->_isvalid = false;
             $info = $this->getParsedPackage();
             foreach ($info as $i => $p) {
                 $info[$i] = strtolower($p);
             }
+
             $err = $this->_fromUrl($this->_downloadURL['url'],
                 $this->_registry->parsedPackageNameToString($this->_parsedname, true));
             $newinfo = $this->getParsedPackage();
             foreach ($newinfo as $i => $p) {
                 $newinfo[$i] = strtolower($p);
             }
+
             if ($info != $newinfo) {
                 do {
                     if ($info['package'] == 'pecl.php.net' && $newinfo['package'] == 'pear.php.net') {
@@ -66892,16 +66350,19 @@ class PEAR_Downloader_Package
                             break;
                         }
                     }
+
                     return PEAR::raiseError('CRITICAL ERROR: We are ' .
                         $this->_registry->parsedPackageNameToString($info) . ', but the file ' .
                         'downloaded claims to be ' .
                         $this->_registry->parsedPackageNameToString($this->getParsedPackage()));
                 } while (false);
             }
+
             if (PEAR::isError($err) || !$this->_valid) {
                 return $err;
             }
         }
+
         $this->_type = 'local';
         return $this->_packagefile;
     }
@@ -66934,6 +66395,7 @@ class PEAR_Downloader_Package
             } else {
                 $ext = '.tgz';
             }
+
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $err = $this->_fromUrl($dep['uri'] . $ext);
             PEAR::popErrorHandling();
@@ -66941,6 +66403,7 @@ class PEAR_Downloader_Package
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $err->getMessage());
                 }
+
                 return PEAR::raiseError('Invalid uri dependency "' . $dep['uri'] . $ext . '", ' .
                     'cannot download');
             }
@@ -66955,6 +66418,7 @@ class PEAR_Downloader_Package
                 $this->_parsedname['group'] = 'default'; // download the default dependency group
                 $this->_explicitGroup = false;
             }
+
             $this->_rawpackagefile = $dep['raw'];
         }
     }
@@ -66965,23 +66429,27 @@ class PEAR_Downloader_Package
         if (isset($options['downloadonly'])) {
             return;
         }
+
         if (isset($options['offline'])) {
             $this->_downloader->log(3, 'Skipping dependency download check, --offline specified');
             return;
         }
+
         $pname = $this->getParsedPackage();
         if (!$pname) {
             return;
         }
+
         $deps = $this->getDeps();
         if (!$deps) {
             return;
         }
+
         if (isset($deps['required'])) { // package.xml 2.0
             return $this->_detect2($deps, $pname, $options, $params);
-        } else {
-            return $this->_detect1($deps, $pname, $options, $params);
         }
+
+        return $this->_detect1($deps, $pname, $options, $params);
     }
 
     function setValidated()
@@ -67004,14 +66472,17 @@ class PEAR_Downloader_Package
         if (!isset($params[0])) {
             return;
         }
+
         $options = $params[0]->_downloader->getOptions();
         if (!isset($options['downloadonly'])) {
             foreach ($params as $i => $param) {
+                $package = $param->getPackage();
+                $channel = $param->getChannel();
                 // remove self if already installed with this version
                 // this does not need any pecl magic - we only remove exact matches
-                if ($param->_installRegistry->packageExists($param->getPackage(), $param->getChannel())) {
-                    if (version_compare($param->_installRegistry->packageInfo($param->getPackage(), 'version',
-                          $param->getChannel()), $param->getVersion(), '==')) {
+                if ($param->_installRegistry->packageExists($package, $channel)) {
+                    $packageVersion = $param->_installRegistry->packageInfo($package, 'version', $channel);
+                    if (version_compare($packageVersion, $param->getVersion(), '==')) {
                         if (!isset($options['force'])) {
                             $info = $param->getParsedPackage();
                             unset($info['version']);
@@ -67019,9 +66490,7 @@ class PEAR_Downloader_Package
                             if (!isset($options['soft'])) {
                                 $param->_downloader->log(1, 'Skipping package "' .
                                     $param->getShortName() .
-                                    '", already installed as version ' .
-                                    $param->_installRegistry->packageInfo($param->getPackage(),
-                                        'version', $param->getChannel()));
+                                    '", already installed as version ' . $packageVersion);
                             }
                             $params[$i] = false;
                         }
@@ -67030,14 +66499,13 @@ class PEAR_Downloader_Package
                         $info = $param->getParsedPackage();
                         $param->_downloader->log(1, 'Skipping package "' .
                             $param->getShortName() .
-                            '", already installed as version ' .
-                            $param->_installRegistry->packageInfo($param->getPackage(), 'version',
-                                $param->getChannel()));
+                            '", already installed as version ' . $packageVersion);
                         $params[$i] = false;
                     }
                 }
             }
         }
+
         PEAR_Downloader_Package::removeDuplicates($params);
     }
 
@@ -67057,6 +66525,8 @@ class PEAR_Downloader_Package
                         $ret = $this->_detect2Dep($dep, $pname, 'required', $params);
                         if (is_array($ret)) {
                             $this->_downloadDeps[] = $ret;
+                        } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                            $this->_downloader->log(0, $ret->getMessage());
                         }
                     }
                 } else {
@@ -67066,16 +66536,20 @@ class PEAR_Downloader_Package
                         $ret = $this->_detect2Dep($dep, $pname, 'required', $params);
                         if (is_array($ret)) {
                             $this->_downloadDeps[] = $ret;
+                        } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                            $this->_downloader->log(0, $ret->getMessage());
                         }
                     }
                 }
             }
+
             // get optional dependency group, if any
             if (isset($deps['optional'][$packagetype])) {
                 $skipnames = array();
                 if (!isset($deps['optional'][$packagetype][0])) {
                     $deps['optional'][$packagetype] = array($deps['optional'][$packagetype]);
                 }
+
                 foreach ($deps['optional'][$packagetype] as $dep) {
                     $skip = false;
                     if (!isset($options['alldeps'])) {
@@ -67092,7 +66566,13 @@ class PEAR_Downloader_Package
                         $skip = true;
                         unset($dep['package']);
                     }
-                    if (!($ret = $this->_detect2Dep($dep, $pname, 'optional', $params))) {
+
+                    $ret = $this->_detect2Dep($dep, $pname, 'optional', $params);
+                    if (PEAR::isError($ret) && !isset($options['soft'])) {
+                        $this->_downloader->log(0, $ret->getMessage());
+                    }
+
+                    if (!$ret) {
                         $dep['package'] = $dep['name'];
                         $skip = count($skipnames) ?
                             $skipnames[count($skipnames) - 1] : '';
@@ -67101,10 +66581,12 @@ class PEAR_Downloader_Package
                             array_pop($skipnames);
                         }
                     }
+
                     if (!$skip && is_array($ret)) {
                         $this->_downloadDeps[] = $ret;
                     }
                 }
+
                 if (count($skipnames)) {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(1, 'Did not download optional dependencies: ' .
@@ -67113,19 +66595,22 @@ class PEAR_Downloader_Package
                     }
                 }
             }
+
             // get requested dependency group, if any
             $groupname = $this->getGroup();
-            $explicit = $this->_explicitGroup;
+            $explicit  = $this->_explicitGroup;
             if (!$groupname) {
-                if ($this->canDefault()) {
-                    $groupname = 'default'; // try the default dependency group
-                } else {
+                if (!$this->canDefault()) {
                     continue;
                 }
+
+                $groupname = 'default'; // try the default dependency group
             }
+
             if ($groupnotfound) {
                 continue;
             }
+
             if (isset($deps['group'])) {
                 if (isset($deps['group']['attribs'])) {
                     if (strtolower($deps['group']['attribs']['name']) == strtolower($groupname)) {
@@ -67136,6 +66621,7 @@ class PEAR_Downloader_Package
                                 $this->_registry->parsedPackageNameToString($pname, true) .
                                 '" has no dependency ' . 'group named "' . $groupname . '"');
                         }
+
                         $groupnotfound = true;
                         continue;
                     }
@@ -67147,6 +66633,7 @@ class PEAR_Downloader_Package
                             break;
                         }
                     }
+
                     if (!$found) {
                         if ($explicit) {
                             if (!isset($options['soft'])) {
@@ -67155,29 +66642,33 @@ class PEAR_Downloader_Package
                                     '" has no dependency ' . 'group named "' . $groupname . '"');
                             }
                         }
+
                         $groupnotfound = true;
                         continue;
                     }
                 }
             }
-            if (isset($group)) {
-                if (isset($group[$packagetype])) {
-                    if (isset($group[$packagetype][0])) {
-                        foreach ($group[$packagetype] as $dep) {
-                            $ret = $this->_detect2Dep($dep, $pname, 'dependency group "' .
-                                $group['attribs']['name'] . '"', $params);
-                            if (is_array($ret)) {
-                                $this->_downloadDeps[] = $ret;
-                            }
-                        }
-                    } else {
-                        $ret = $this->_detect2Dep($group[$packagetype], $pname,
-                            'dependency group "' .
+
+            if (isset($group) && isset($group[$packagetype])) {
+                if (isset($group[$packagetype][0])) {
+                    foreach ($group[$packagetype] as $dep) {
+                        $ret = $this->_detect2Dep($dep, $pname, 'dependency group "' .
                             $group['attribs']['name'] . '"', $params);
                         if (is_array($ret)) {
                             $this->_downloadDeps[] = $ret;
+                        } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                            $this->_downloader->log(0, $ret->getMessage());
                         }
                     }
+                } else {
+                    $ret = $this->_detect2Dep($group[$packagetype], $pname,
+                        'dependency group "' .
+                        $group['attribs']['name'] . '"', $params);
+                    if (is_array($ret)) {
+                        $this->_downloadDeps[] = $ret;
+                    } elseif (PEAR::isError($ret) && !isset($options['soft'])) {
+                        $this->_downloader->log(0, $ret->getMessage());
+                    }
                 }
             }
         }
@@ -67188,10 +66679,12 @@ class PEAR_Downloader_Package
         if (isset($dep['conflicts'])) {
             return true;
         }
+
         $options = $this->_downloader->getOptions();
         if (isset($dep['uri'])) {
             return array('uri' => $dep['uri'], 'dep' => $dep);;
         }
+
         $testdep = $dep;
         $testdep['package'] = $dep['name'];
         if (PEAR_Downloader_Package::willDownload($testdep, $params)) {
@@ -67204,17 +66697,19 @@ class PEAR_Downloader_Package
             }
             return false;
         }
+
         $options = $this->_downloader->getOptions();
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
         if ($this->_explicitState) {
             $pname['state'] = $this->_explicitState;
         }
-        $url =
-            $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
+
+        $url = $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
         if (PEAR::isError($url)) {
             PEAR::popErrorHandling();
             return $url;
         }
+
         $dep['package'] = $dep['name'];
         $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params, $group == 'optional' &&
             !isset($options['alldeps']), true);
@@ -67223,34 +66718,39 @@ class PEAR_Downloader_Package
             if (!isset($options['soft'])) {
                 $this->_downloader->log(0, $ret->getMessage());
             }
+
             return false;
+        }
+
+        // check to see if a dep is already installed and is the same or newer
+        if (!isset($dep['min']) && !isset($dep['max']) && !isset($dep['recommended'])) {
+            $oper = 'has';
         } else {
-            // check to see if a dep is already installed and is the same or newer
-            if (!isset($dep['min']) && !isset($dep['max']) && !isset($dep['recommended'])) {
-                $oper = 'has';
-            } else {
-                $oper = 'gt';
-            }
-            // do not try to move this before getDepPackageDownloadURL
-            // we can't determine whether upgrade is necessary until we know what
-            // version would be downloaded
-            if (!isset($options['force']) && $this->isInstalled($ret, $oper)) {
-                $version = $this->_installRegistry->packageInfo($dep['name'], 'version',
-                    $dep['channel']);
-                $dep['package'] = $dep['name'];
-                if (!isset($options['soft'])) {
-                    $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
-                        ' dependency "' .
-                    $this->_registry->parsedPackageNameToString($dep, true) .
-                        '" version ' . $url['version'] . ', already installed as version ' .
-                        $version);
-                }
-                return false;
+            $oper = 'gt';
+        }
+
+        // do not try to move this before getDepPackageDownloadURL
+        // we can't determine whether upgrade is necessary until we know what
+        // version would be downloaded
+        if (!isset($options['force']) && $this->isInstalled($ret, $oper)) {
+            $version = $this->_installRegistry->packageInfo($dep['name'], 'version',
+                $dep['channel']);
+            $dep['package'] = $dep['name'];
+            if (!isset($options['soft'])) {
+                $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
+                    ' dependency "' .
+                $this->_registry->parsedPackageNameToString($dep, true) .
+                    '" version ' . $url['version'] . ', already installed as version ' .
+                    $version);
             }
+
+            return false;
         }
+
         if (isset($dep['nodefault'])) {
             $ret['nodefault'] = true;
         }
+
         return $ret;
     }
 
@@ -67260,7 +66760,7 @@ class PEAR_Downloader_Package
         $skipnames = array();
         foreach ($deps as $dep) {
             $nodownload = false;
-            if ($dep['type'] == 'pkg') {
+            if (isset ($dep['type']) && $dep['type'] === 'pkg') {
                 $dep['channel'] = 'pear.php.net';
                 $dep['package'] = $dep['name'];
                 switch ($dep['rel']) {
@@ -67292,12 +66792,13 @@ class PEAR_Downloader_Package
                             continue 2;
                         }
                 }
+
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 if ($this->_explicitState) {
                     $pname['state'] = $this->_explicitState;
                 }
-                $url =
-                    $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
+
+                $url = $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
                 $chan = 'pear.php.net';
                 if (PEAR::isError($url)) {
                     // check to see if this is a pecl package that has jumped
@@ -67305,6 +66806,7 @@ class PEAR_Downloader_Package
                     if (!class_exists('PEAR_Dependency2')) {
                         require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Dependency2.php';
                     }
+
                     $newdep = PEAR_Dependency2::normalizeDep($dep);
                     $newdep = $newdep[0];
                     $newdep['channel'] = 'pecl.php.net';
@@ -67345,6 +66847,7 @@ class PEAR_Downloader_Package
                         }
                     }
                 }
+
                 PEAR::popErrorHandling();
                 if (!isset($options['alldeps'])) {
                     if (isset($dep['optional']) && $dep['optional'] == 'yes') {
@@ -67363,6 +66866,7 @@ class PEAR_Downloader_Package
                         $nodownload = true;
                     }
                 }
+
                 if (!isset($options['alldeps']) && !isset($options['onlyreqdeps'])) {
                     if (!isset($dep['optional']) || $dep['optional'] == 'no') {
                         if (!isset($options['soft'])) {
@@ -67380,6 +66884,7 @@ class PEAR_Downloader_Package
                         $nodownload = true;
                     }
                 }
+
                 // check to see if a dep is already installed
                 // do not try to move this before getDepPackageDownloadURL
                 // we can't determine whether upgrade is necessary until we know what
@@ -67396,6 +66901,7 @@ class PEAR_Downloader_Package
                     } else {
                         $version = $this->_installRegistry->packageInfo($dep['name'], 'version');
                     }
+
                     $dep['version'] = $url['version'];
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .
@@ -67403,21 +66909,26 @@ class PEAR_Downloader_Package
                             $this->_registry->parsedPackageNameToString($dep, true) .
                             '", already installed as version ' . $version);
                     }
+
                     $skip = count($skipnames) ?
                         $skipnames[count($skipnames) - 1] : '';
                     if ($skip ==
                           $this->_registry->parsedPackageNameToString($dep, true)) {
                         array_pop($skipnames);
                     }
+
                     continue;
                 }
+
                 if ($nodownload) {
                     continue;
                 }
+
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 if (isset($newdep)) {
                     $dep = $newdep;
                 }
+
                 $dep['package'] = $dep['name'];
                 $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params,
                     isset($dep['optional']) && $dep['optional'] == 'yes' &&
@@ -67429,9 +66940,11 @@ class PEAR_Downloader_Package
                     }
                     continue;
                 }
+
                 $this->_downloadDeps[] = $ret;
             }
         }
+
         if (count($skipnames)) {
             if (!isset($options['soft'])) {
                 $this->_downloader->log(1, 'Did not download dependencies: ' .
@@ -67469,6 +66982,7 @@ class PEAR_Downloader_Package
                 'package' => $this->getPackage(),
                 'version' => $this->getVersion());
         }
+
         return false;
     }
 
@@ -67479,11 +66993,10 @@ class PEAR_Downloader_Package
 
     function canDefault()
     {
-        if (isset($this->_downloadURL)) {
-            if (isset($this->_downloadURL['nodefault'])) {
-                return false;
-            }
+        if (isset($this->_downloadURL) && isset($this->_downloadURL['nodefault'])) {
+            return false;
         }
+
         return true;
     }
 
@@ -67493,9 +67006,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getPackage();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getPackage();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     /**
@@ -67507,9 +67020,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->isSubpackage($pf);
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->isSubpackage($pf);
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getPackageType()
@@ -67518,18 +67031,18 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getPackageType();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getPackageType();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function isBundle()
     {
         if (isset($this->_packagefile)) {
             return $this->_packagefile->getPackageType() == 'bundle';
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getPackageXmlVersion()
@@ -67538,9 +67051,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getPackagexmlVersion();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getPackagexmlVersion();
-        } else {
-            return '1.0';
         }
+
+        return '1.0';
     }
 
     function getChannel()
@@ -67549,9 +67062,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getChannel();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getChannel();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getURI()
@@ -67560,9 +67073,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getURI();
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->getURI();
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function getVersion()
@@ -67571,9 +67084,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->getVersion();
         } elseif (isset($this->_downloadURL['version'])) {
             return $this->_downloadURL['version'];
-        } else {
-            return false;
         }
+
+        return false;
     }
 
     function isCompatible($pf)
@@ -67582,9 +67095,9 @@ class PEAR_Downloader_Package
             return $this->_packagefile->isCompatible($pf);
         } elseif (isset($this->_downloadURL['info'])) {
             return $this->_downloadURL['info']->isCompatible($pf);
-        } else {
-            return true;
         }
+
+        return true;
     }
 
     function setGroup($group)
@@ -67596,9 +67109,9 @@ class PEAR_Downloader_Package
     {
         if (isset($this->_parsedname['group'])) {
             return $this->_parsedname['group'];
-        } else {
-            return '';
         }
+
+        return '';
     }
 
     function isExtension($name)
@@ -67606,14 +67119,14 @@ class PEAR_Downloader_Package
         if (isset($this->_packagefile)) {
             return $this->_packagefile->isExtension($name);
         } elseif (isset($this->_downloadURL['info'])) {
-			if ($this->_downloadURL['info']->getPackagexmlVersion() == '2.0') {
-				return $this->_downloadURL['info']->getProvidesExtension() == $name;
-			} else {
-				return false;
-			}
-        } else {
+            if ($this->_downloadURL['info']->getPackagexmlVersion() == '2.0') {
+                return $this->_downloadURL['info']->getProvidesExtension() == $name;
+            }
+
             return false;
         }
+
+        return false;
     }
 
     function getDeps()
@@ -67622,19 +67135,19 @@ class PEAR_Downloader_Package
             $ver = $this->_packagefile->getPackagexmlVersion();
             if (version_compare($ver, '2.0', '>=')) {
                 return $this->_packagefile->getDeps(true);
-            } else {
-                return $this->_packagefile->getDeps();
             }
+
+            return $this->_packagefile->getDeps();
         } elseif (isset($this->_downloadURL['info'])) {
             $ver = $this->_downloadURL['info']->getPackagexmlVersion();
             if (version_compare($ver, '2.0', '>=')) {
                 return $this->_downloadURL['info']->getDeps(true);
-            } else {
-                return $this->_downloadURL['info']->getDeps();
             }
-        } else {
-            return array();
+
+            return $this->_downloadURL['info']->getDeps();
         }
+
+        return array();
     }
 
     /**
@@ -67667,27 +67180,30 @@ class PEAR_Downloader_Package
                 }
                 return $param['uri'] == $this->getURI();
             }
-            $package = isset($param['package']) ? $param['package'] :
-                $param['info']->getPackage();
-            $channel = isset($param['channel']) ? $param['channel'] :
-                $param['info']->getChannel();
+
+            $package = isset($param['package']) ? $param['package'] : $param['info']->getPackage();
+            $channel = isset($param['channel']) ? $param['channel'] : $param['info']->getChannel();
             if (isset($param['rel'])) {
                 if (!class_exists('PEAR_Dependency2')) {
                     require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Dependency2.php';
                 }
+
                 $newdep = PEAR_Dependency2::normalizeDep($param);
                 $newdep = $newdep[0];
             } elseif (isset($param['min'])) {
                 $newdep = $param;
             }
         }
+
         if (isset($newdep)) {
             if (!isset($newdep['min'])) {
                 $newdep['min'] = '0';
             }
+
             if (!isset($newdep['max'])) {
                 $newdep['max'] = '100000000000000000000';
             }
+
             // use magic to support pecl packages suddenly jumping to the pecl channel
             // we need to support both dependency possibilities
             if ($channel == 'pear.php.net' && $this->getChannel() == 'pecl.php.net') {
@@ -67705,20 +67221,22 @@ class PEAR_Downloader_Package
                 version_compare($newdep['min'], $this->getVersion(), '<=') &&
                 version_compare($newdep['max'], $this->getVersion(), '>='));
         }
+
         // use magic to support pecl packages suddenly jumping to the pecl channel
         if ($channel == 'pecl.php.net' && $this->getChannel() == 'pear.php.net') {
             if (strtolower($package) == strtolower($this->getPackage())) {
                 $channel = 'pear.php.net';
             }
         }
+
         if (isset($param['version'])) {
             return (strtolower($package) == strtolower($this->getPackage()) &&
                 $channel == $this->getChannel() &&
                 $param['version'] == $this->getVersion());
-        } else {
-            return strtolower($package) == strtolower($this->getPackage()) &&
-                $channel == $this->getChannel();
         }
+
+        return strtolower($package) == strtolower($this->getPackage()) &&
+            $channel == $this->getChannel();
     }
 
     function isInstalled($dep, $oper = '==')
@@ -67726,9 +67244,11 @@ class PEAR_Downloader_Package
         if (!$dep) {
             return false;
         }
+
         if ($oper != 'ge' && $oper != 'gt' && $oper != 'has' && $oper != '==') {
             return false;
         }
+
         if (is_object($dep)) {
             $package = $dep->getPackage();
             $channel = $dep->getChannel();
@@ -67751,39 +67271,34 @@ class PEAR_Downloader_Package
                 $package = $dep['info']->getPackage();
             }
         }
+
         $options = $this->_downloader->getOptions();
-        $test = $this->_installRegistry->packageExists($package, $channel);
+        $test    = $this->_installRegistry->packageExists($package, $channel);
         if (!$test && $channel == 'pecl.php.net') {
             // do magic to allow upgrading from old pecl packages to new ones
             $test = $this->_installRegistry->packageExists($package, 'pear.php.net');
             $channel = 'pear.php.net';
         }
+
         if ($test) {
             if (isset($dep['uri'])) {
                 if ($this->_installRegistry->packageInfo($package, 'uri', '__uri') == $dep['uri']) {
                     return true;
                 }
             }
+
             if (isset($options['upgrade'])) {
-                if ($oper == 'has') {
-                    if (version_compare($this->_installRegistry->packageInfo(
-                          $package, 'version', $channel),
-                          $dep['version'], '>=')) {
-                        return true;
-                    } else {
-                        return false;
-                    }
-                } else {
-                    if (version_compare($this->_installRegistry->packageInfo(
-                          $package, 'version', $channel),
-                          $dep['version'], '>=')) {
-                        return true;
-                    }
-                    return false;
+                $packageVersion = $this->_installRegistry->packageInfo($package, 'version', $channel);
+                if (version_compare($packageVersion, $dep['version'], '>=')) {
+                    return true;
                 }
+
+                return false;
             }
+
             return true;
         }
+
         return false;
     }
 
@@ -67808,9 +67323,11 @@ class PEAR_Downloader_Package
             if (!isset($existing[$channel . '/' . $package])) {
                 $existing[$channel . '/' . $package] = array();
             }
+
             if (!isset($existing[$channel . '/' . $package][$group])) {
                 $existing[$channel . '/' . $package][$group] = array();
             }
+
             $existing[$channel . '/' . $package][$group][] = $i;
         }
 
@@ -67827,6 +67344,7 @@ class PEAR_Downloader_Package
         foreach ($indices as $index) {
             $errorparams[] = $params[$index];
         }
+
         return count($errorparams);
     }
 
@@ -67848,39 +67366,42 @@ class PEAR_Downloader_Package
                 } else {
                     $group = $param->getGroup();
                 }
+
                 $pnames[$i] = $param->getChannel() . '/' .
                     $param->getPackage() . '-' . $param->getVersion() . '#' . $group;
             }
         }
+
         $pnames = array_unique($pnames);
-        $unset = array_diff(array_keys($params), array_keys($pnames));
-        $testp = array_flip($pnames);
+        $unset  = array_diff(array_keys($params), array_keys($pnames));
+        $testp  = array_flip($pnames);
         foreach ($params as $i => $param) {
             if (!$param) {
                 $unset[] = $i;
                 continue;
             }
+
             if (!is_a($param, 'PEAR_Downloader_Package')) {
                 $unset[] = $i;
                 continue;
             }
-            if ($ignoreGroups) {
-                $group = '';
-            } else {
-                $group = $param->getGroup();
-            }
+
+            $group = $ignoreGroups ? '' : $param->getGroup();
             if (!isset($testp[$param->getChannel() . '/' . $param->getPackage() . '-' .
                   $param->getVersion() . '#' . $group])) {
                 $unset[] = $i;
             }
         }
+
         foreach ($unset as $i) {
             unset($params[$i]);
         }
+
         $ret = array();
         foreach ($params as $i => $param) {
             $ret[] = &$params[$i];
         }
+
         $params = array();
         foreach ($ret as $i => $param) {
             $params[] = &$ret[$i];
@@ -67902,12 +67423,12 @@ class PEAR_Downloader_Package
      */
     function mergeDependencies(&$params)
     {
-        $newparams = array();
-        $bundles = array();
+        $bundles = $newparams = array();
         foreach ($params as $i => $param) {
             if (!$param->isBundle()) {
                 continue;
             }
+
             $bundles[] = $i;
             $pf = &$param->getPackageFile();
             $newdeps = array();
@@ -67915,6 +67436,7 @@ class PEAR_Downloader_Package
             if (!is_array($contents)) {
                 $contents = array($contents);
             }
+
             foreach ($contents as $file) {
                 $filecontents = $pf->getFileContents($file);
                 $dl = &$param->getDownloader();
@@ -67922,21 +67444,25 @@ class PEAR_Downloader_Package
                 if (PEAR::isError($dir = $dl->getDownloadDir())) {
                     return $dir;
                 }
+
                 $fp = @fopen($dir . DIRECTORY_SEPARATOR . $file, 'wb');
                 if (!$fp) {
                     continue;
                 }
+
                 fwrite($fp, $filecontents, strlen($filecontents));
                 fclose($fp);
                 if ($s = $params[$i]->explicitState()) {
                     $obj->setExplicitState($s);
                 }
+
                 $obj = &new PEAR_Downloader_Package($params[$i]->getDownloader());
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 if (PEAR::isError($dir = $dl->getDownloadDir())) {
                     PEAR::popErrorHandling();
                     return $dir;
                 }
+
                 $e = $obj->_fromFile($a = $dir . DIRECTORY_SEPARATOR . $file);
                 PEAR::popErrorHandling();
                 if (PEAR::isError($e)) {
@@ -67945,6 +67471,7 @@ class PEAR_Downloader_Package
                     }
                     continue;
                 }
+
                 $j = &$obj;
                 if (!PEAR_Downloader_Package::willDownload($j,
                       array_merge($params, $newparams)) && !$param->isInstalled($j)) {
@@ -67952,9 +67479,11 @@ class PEAR_Downloader_Package
                 }
             }
         }
+
         foreach ($bundles as $i) {
             unset($params[$i]); // remove bundles - only their contents matter for installation
         }
+
         PEAR_Downloader_Package::removeDuplicates($params); // strip any unset indices
         if (count($newparams)) { // add in bundled packages for install
             foreach ($newparams as $i => $unused) {
@@ -67962,24 +67491,29 @@ class PEAR_Downloader_Package
             }
             $newparams = array();
         }
+
         foreach ($params as $i => $param) {
             $newdeps = array();
             foreach ($param->_downloadDeps as $dep) {
-                if (!PEAR_Downloader_Package::willDownload($dep,
-                      array_merge($params, $newparams)) && !$param->isInstalled($dep)) {
+                $merge = array_merge($params, $newparams);
+                if (!PEAR_Downloader_Package::willDownload($dep, $merge)
+                    && !$param->isInstalled($dep)
+                ) {
                     $newdeps[] = $dep;
                 } else {
+                    //var_dump($dep);
                     // detect versioning conflicts here
                 }
             }
-            // convert the dependencies into PEAR_Downloader_Package objects for the next time
-            // around
+
+            // convert the dependencies into PEAR_Downloader_Package objects for the next time around
             $params[$i]->_downloadDeps = array();
             foreach ($newdeps as $dep) {
                 $obj = &new PEAR_Downloader_Package($params[$i]->getDownloader());
                 if ($s = $params[$i]->explicitState()) {
                     $obj->setExplicitState($s);
                 }
+
                 PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
                 $e = $obj->fromDepURL($dep);
                 PEAR::popErrorHandling();
@@ -67989,24 +67523,27 @@ class PEAR_Downloader_Package
                     }
                     continue;
                 }
+
                 $e = $obj->detectDependencies($params);
                 if (PEAR::isError($e)) {
                     if (!isset($options['soft'])) {
                         $obj->_downloader->log(0, $e->getMessage());
                     }
                 }
+
                 $j = &$obj;
                 $newparams[] = &$j;
             }
         }
+
         if (count($newparams)) {
             foreach ($newparams as $i => $unused) {
                 $params[] = &$newparams[$i];
             }
             return true;
-        } else {
-            return false;
         }
+
+        return false;
     }
 
 
@@ -68018,11 +67555,13 @@ class PEAR_Downloader_Package
         if (!is_array($params)) {
             return false;
         }
+
         foreach ($params as $obj) {
             if ($obj->isEqual($param)) {
                 return true;
             }
         }
+
         return false;
     }
 
@@ -68058,6 +67597,7 @@ class PEAR_Downloader_Package
                     $this->_explicitGroup = true;
                 }
             }
+
             if (@is_file($param)) {
                 $this->_type = 'local';
                 $options = $this->_downloader->getOptions();
@@ -68092,8 +67632,7 @@ class PEAR_Downloader_Package
 
     function _fromUrl($param, $saveparam = '')
     {
-        if (!is_array($param) &&
-              (preg_match('#^(http|ftp)://#', $param))) {
+        if (!is_array($param) && (preg_match('#^(http|https|ftp)://#', $param))) {
             $options = $this->_downloader->getOptions();
             $this->_type = 'url';
             $callback = $this->_downloader->ui ?
@@ -68103,6 +67642,7 @@ class PEAR_Downloader_Package
                 $this->_downloader->popErrorHandling();
                 return $dir;
             }
+
             $this->_downloader->log(3, 'Downloading "' . $param . '"');
             $file = $this->_downloader->downloadHttp($param, $this->_downloader->ui,
                 $dir, $callback, null, false, $this->getChannel());
@@ -68115,6 +67655,7 @@ class PEAR_Downloader_Package
                     '"' . $saveparam . ' (' . $file->getMessage() . ')');
                     return $err;
             }
+
             if ($this->_rawpackagefile) {
                 require_once 'phar://install-pear-nozlib.phar/' . 'Archive/Tar.php';
                 $tar = &new Archive_Tar($file);
@@ -68122,32 +67663,35 @@ class PEAR_Downloader_Package
                 if (!$packagexml) {
                     $packagexml = $tar->extractInString('package.xml');
                 }
+
                 if (str_replace(array("\n", "\r"), array('',''), $packagexml) !=
                       str_replace(array("\n", "\r"), array('',''), $this->_rawpackagefile)) {
-                    if ($this->getChannel() == 'pear.php.net') {
-                        // be more lax for the existing PEAR packages that have not-ok
-                        // characters in their package.xml
-                        $this->_downloader->log(0, 'CRITICAL WARNING: The "' .
-                            $this->getPackage() . '" package has invalid characters in its ' .
-                            'package.xml.  The next version of PEAR may not be able to install ' .
-                            'this package for security reasons.  Please open a bug report at ' .
-                            'http://pear.php.net/package/' . $this->getPackage() . '/bugs');
-                    } else {
+                    if ($this->getChannel() != 'pear.php.net') {
                         return PEAR::raiseError('CRITICAL ERROR: package.xml downloaded does ' .
                             'not match value returned from xml-rpc');
                     }
+
+                    // be more lax for the existing PEAR packages that have not-ok
+                    // characters in their package.xml
+                    $this->_downloader->log(0, 'CRITICAL WARNING: The "' .
+                        $this->getPackage() . '" package has invalid characters in its ' .
+                        'package.xml.  The next version of PEAR may not be able to install ' .
+                        'this package for security reasons.  Please open a bug report at ' .
+                        'http://pear.php.net/package/' . $this->getPackage() . '/bugs');
                 }
             }
+
             // whew, download worked!
             if (isset($options['downloadonly'])) {
                 $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug);
             } else {
-                if (PEAR::isError($dir = $this->_downloader->getDownloadDir())) {
+                $dir = $this->_downloader->getDownloadDir();
+                if (PEAR::isError($dir)) {
                     return $dir;
                 }
-                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug,
-                    $dir);
+                $pkg = &$this->getPackagefileObject($this->_config, $this->_downloader->debug, $dir);
             }
+
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $pf = &$pkg->fromAnyFile($file, PEAR_VALIDATE_INSTALLING);
             PEAR::popErrorHandling();
@@ -68157,23 +67701,30 @@ class PEAR_Downloader_Package
                         if (is_array($err)) {
                             $err = $err['message'];
                         }
+
                         if (!isset($options['soft'])) {
                             $this->_downloader->log(0, "Validation Error: $err");
                         }
                     }
                 }
+
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $pf->getMessage());
                 }
-                $err = PEAR::raiseError('Download of "' . ($saveparam ? $saveparam :
-                    $param) . '" succeeded, but it is not a valid package archive');
+
+                ///FIXME need to pass back some error code that we can use to match with to cancel all further operations
+                /// At least stop all deps of this package from being installed
+                $out = $saveparam ? $saveparam : $param;
+                $err = PEAR::raiseError('Download of "' . $out . '" succeeded, but it is not a valid package archive');
                 $this->_valid = false;
                 return $err;
             }
+
             $this->_packagefile = &$pf;
             $this->setGroup('default'); // install the default dependency group
             return $this->_valid = true;
         }
+
         return $this->_valid = false;
     }
 
@@ -68190,22 +67741,22 @@ class PEAR_Downloader_Package
     function _fromString($param)
     {
         $options = $this->_downloader->getOptions();
+        $channel = $this->_config->get('default_channel');
         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        $pname = $this->_registry->parsePackageName($param,
-            $this->_config->get('default_channel'));
+        $pname = $this->_registry->parsePackageName($param, $channel);
         PEAR::popErrorHandling();
         if (PEAR::isError($pname)) {
             if ($pname->getCode() == 'invalid') {
                 $this->_valid = false;
                 return false;
             }
+
             if ($pname->getCode() == 'channel') {
                 $parsed = $pname->getUserInfo();
                 if ($this->_downloader->discover($parsed['channel'])) {
                     if ($this->_config->get('auto_discover')) {
                         PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-                        $pname = $this->_registry->parsePackageName($param,
-                            $this->_config->get('default_channel'));
+                        $pname = $this->_registry->parsePackageName($param, $channel);
                         PEAR::popErrorHandling();
                     } else {
                         if (!isset($options['soft'])) {
@@ -68216,15 +67767,17 @@ class PEAR_Downloader_Package
                         }
                     }
                 }
+
                 if (PEAR::isError($pname)) {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(0, $pname->getMessage());
                     }
+
                     if (is_array($param)) {
                         $param = $this->_registry->parsedPackageNameToString($param);
                     }
-                    $err = PEAR::raiseError('invalid package name/package file "' .
-                        $param . '"');
+
+                    $err = PEAR::raiseError('invalid package name/package file "' . $param . '"');
                     $this->_valid = false;
                     return $err;
                 }
@@ -68232,26 +67785,21 @@ class PEAR_Downloader_Package
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $pname->getMessage());
                 }
-                $err = PEAR::raiseError('invalid package name/package file "' .
-                    $param . '"');
+
+                $err = PEAR::raiseError('invalid package name/package file "' . $param . '"');
                 $this->_valid = false;
                 return $err;
             }
         }
+
         if (!isset($this->_type)) {
-            $this->_type = 'xmlrpc';
-        }
-        $this->_parsedname = $pname;
-        if (isset($pname['state'])) {
-            $this->_explicitState = $pname['state'];
-        } else {
-            $this->_explicitState = false;
-        }
-        if (isset($pname['group'])) {
-            $this->_explicitGroup = true;
-        } else {
-            $this->_explicitGroup = false;
+            $this->_type = 'rest';
         }
+
+        $this->_parsedname    = $pname;
+        $this->_explicitState = isset($pname['state']) ? $pname['state'] : false;
+        $this->_explicitGroup = isset($pname['group']) ? true : false;
+
         $info = $this->_downloader->_getPackageDownloadUrl($pname);
         if (PEAR::isError($info)) {
             if ($info->getCode() != -976 && $pname['channel'] == 'pear.php.net') {
@@ -68270,13 +67818,16 @@ class PEAR_Downloader_Package
                     $pname['channel'] = 'pear.php.net';
                 }
             }
+
             return $info;
         }
+
         $this->_rawpackagefile = $info['raw'];
         $ret = $this->_analyzeDownloadURL($info, $param, $pname);
         if (PEAR::isError($ret)) {
             return $ret;
         }
+
         if ($ret) {
             $this->_downloadURL = $ret;
             return $this->_valid = (bool) $ret;
@@ -68299,16 +67850,15 @@ class PEAR_Downloader_Package
         if (!is_string($param) && PEAR_Downloader_Package::willDownload($param, $params)) {
             return false;
         }
-        if (!$info) {
-            if (!is_string($param)) {
-                $saveparam = ", cannot download \"$param\"";
-            } else {
-                $saveparam = '';
-            }
+
+        if ($info === false) {
+            $saveparam = !is_string($param) ? ", cannot download \"$param\"" : '';
+
             // no releases exist
             return PEAR::raiseError('No releases for package "' .
                 $this->_registry->parsedPackageNameToString($pname, true) . '" exist' . $saveparam);
         }
+
         if (strtolower($info['info']->getChannel()) != strtolower($pname['channel'])) {
             $err = false;
             if ($pname['channel'] == 'pecl.php.net') {
@@ -68322,23 +67872,47 @@ class PEAR_Downloader_Package
             } else {
                 $err = true;
             }
+
             if ($err) {
                 return PEAR::raiseError('SECURITY ERROR: package in channel "' . $pname['channel'] .
                     '" retrieved another channel\'s name for download! ("' .
                     $info['info']->getChannel() . '")');
             }
         }
+
+        $preferred_state = $this->_config->get('preferred_state');
         if (!isset($info['url'])) {
+            $package_version = $this->_registry->packageInfo($info['info']->getPackage(),
+            'version', $info['info']->getChannel());
             if ($this->isInstalled($info)) {
-                if ($isdependency && version_compare($info['version'],
-                      $this->_registry->packageInfo($info['info']->getPackage(),
-                            'version', $info['info']->getChannel()), '<=')) {
+                if ($isdependency && version_compare($info['version'], $package_version, '<=')) {
                     // ignore bogus errors of "failed to download dependency"
                     // if it is already installed and the one that would be
                     // downloaded is older or the same version (Bug #7219)
                     return false;
                 }
             }
+
+            if ($info['version'] === $package_version) {
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
+                        '/' . $pname['package'] . '-' . $pname['version'] . ', additionally the suggested version' .
+                        ' (' . $package_version . ') is the same as the locally installed one.');
+                }
+
+                return false;
+            }
+
+            if (version_compare($info['version'], $package_version, '<=')) {
+                if (!isset($options['soft'])) {
+                    $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
+                        '/' . $pname['package'] . '-' . $pname['version'] . ', additionally the suggested version' .
+                        ' (' . $info['version'] . ') is a lower version than the locally installed one (' . $package_version . ').');
+                }
+
+                return false;
+            }
+
             $instead =  ', will instead download version ' . $info['version'] .
                         ', stability "' . $info['info']->getState() . '"';
             // releases exist, but we failed to get any
@@ -68351,8 +67925,9 @@ class PEAR_Downloader_Package
                     if (!class_exists('PEAR_Common')) {
                         require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Common.php';
                     }
+
                     if (!in_array($info['info']->getState(),
-                          PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
+                          PEAR_Common::betterStates($preferred_state, true))) {
                         if ($optional) {
                             // don't spit out confusing error message
                             return $this->_downloader->_getPackageDownloadUrl(
@@ -68360,12 +67935,13 @@ class PEAR_Downloader_Package
                                       'channel' => $pname['channel'],
                                       'version' => $info['version']));
                         }
-                        $vs = ' within preferred state "' . $this->_config->get('preferred_state') .
+                        $vs = ' within preferred state "' . $preferred_state .
                             '"';
                     } else {
                         if (!class_exists('PEAR_Dependency2')) {
                             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Dependency2.php';
                         }
+
                         if ($optional) {
                             // don't spit out confusing error message
                             return $this->_downloader->_getPackageDownloadUrl(
@@ -68377,13 +67953,14 @@ class PEAR_Downloader_Package
                         $instead = '';
                     }
                 } else {
-                    $vs = ' within preferred state "' . $this->_config->get(
-                        'preferred_state') . '"';
+                    $vs = ' within preferred state "' . $preferred_state . '"';
                 }
+
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(1, 'WARNING: failed to download ' . $pname['channel'] .
                         '/' . $pname['package'] . $vs . $instead);
                 }
+
                 // download the latest release
                 return $this->_downloader->_getPackageDownloadUrl(
                     array('package' => $pname['package'],
@@ -68405,6 +67982,7 @@ class PEAR_Downloader_Package
                             PEAR_DOWNLOADER_PACKAGE_PHPVERSION);
                     return $err;
                 }
+
                 // construct helpful error message
                 if (isset($pname['version'])) {
                     $vs = ', version "' . $pname['version'] . '"';
@@ -68414,8 +67992,9 @@ class PEAR_Downloader_Package
                     if (!class_exists('PEAR_Common')) {
                         require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Common.php';
                     }
+
                     if (!in_array($info['info']->getState(),
-                          PEAR_Common::betterStates($this->_config->get('preferred_state'), true))) {
+                          PEAR_Common::betterStates($preferred_state, true))) {
                         if ($optional) {
                             // don't spit out confusing error message, and don't die on
                             // optional dep failure!
@@ -68424,12 +68003,12 @@ class PEAR_Downloader_Package
                                       'channel' => $pname['channel'],
                                       'version' => $info['version']));
                         }
-                        $vs = ' within preferred state "' . $this->_config->get('preferred_state') .
-                            '"';
+                        $vs = ' within preferred state "' . $preferred_state . '"';
                     } else {
                         if (!class_exists('PEAR_Dependency2')) {
                             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Dependency2.php';
                         }
+
                         if ($optional) {
                             // don't spit out confusing error message, and don't die on
                             // optional dep failure!
@@ -68441,9 +68020,9 @@ class PEAR_Downloader_Package
                         $vs = PEAR_Dependency2::_getExtraString($pname);
                     }
                 } else {
-                    $vs = ' within preferred state "' . $this->_downloader->config->get(
-                        'preferred_state') . '"';
+                    $vs = ' within preferred state "' . $this->_downloader->config->get('preferred_state') . '"';
                 }
+
                 $options = $this->_downloader->getOptions();
                 // this is only set by the "download-all" command
                 if (isset($options['ignorepreferred_state'])) {
@@ -68460,19 +68039,29 @@ class PEAR_Downloader_Package
                             PEAR_DOWNLOADER_PACKAGE_STATE);
                     return $err;
                 }
-                $err = PEAR::raiseError(
-                    'Failed to download ' . $this->_registry->parsedPackageNameToString(
-                        array('channel' => $pname['channel'], 'package' => $pname['package']),
-                            true)
-                     . $vs .
-                    ', latest release is version ' . $info['version'] .
-                    ', stability "' . $info['info']->getState() . '", use "' .
-                    $this->_registry->parsedPackageNameToString(
-                        array('channel' => $pname['channel'], 'package' => $pname['package'],
-                        'version' => $info['version'])) . '" to install');
-                return $err;
+
+                // Checks if the user has a package installed already and checks the release against
+                // the state against the installed package, this allows upgrades for packages
+                // with lower stability than the preferred_state
+                $stability = $this->_registry->packageInfo($pname['package'], 'stability', $pname['channel']);
+                if (!$this->isInstalled($info)
+                    || !in_array($info['info']->getState(), PEAR_Common::betterStates($stability['release'], true))
+                ) {
+                    $err = PEAR::raiseError(
+                        'Failed to download ' . $this->_registry->parsedPackageNameToString(
+                            array('channel' => $pname['channel'], 'package' => $pname['package']),
+                                true)
+                         . $vs .
+                        ', latest release is version ' . $info['version'] .
+                        ', stability "' . $info['info']->getState() . '", use "' .
+                        $this->_registry->parsedPackageNameToString(
+                            array('channel' => $pname['channel'], 'package' => $pname['package'],
+                            'version' => $info['version'])) . '" to install');
+                    return $err;
+                }
             }
         }
+
         if (isset($info['deprecated']) && $info['deprecated']) {
             $this->_downloader->log(0,
                 'WARNING: "' .
@@ -68483,1236 +68072,1234 @@ class PEAR_Downloader_Package
                     $this->_registry->parsedPackageNameToString($info['deprecated'], true) .
                 '"');
         }
-        return $info;
-    }
-}
-?>
-<?php
-/**
- * Error Stack Implementation
- * 
- * This is an incredibly simple implementation of a very complex error handling
- * facility.  It contains the ability
- * to track multiple errors from multiple packages simultaneously.  In addition,
- * it can track errors of many levels, save data along with the error, context
- * information such as the exact file, line number, class and function that
- * generated the error, and if necessary, it can raise a traditional PEAR_Error.
- * It has built-in support for PEAR::Log, to log errors as they occur
- * 
- * Since version 0.2alpha, it is also possible to selectively ignore errors,
- * through the use of an error callback, see {@link pushCallback()}
- * 
- * Since version 0.3alpha, it is possible to specify the exception class
- * returned from {@link push()}
- *
- * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
- * still be done quite handily in an error callback or by manipulating the returned array
- * @category   Debugging
- * @package    PEAR_ErrorStack
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  2004-2008 Greg Beaver
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: ErrorStack.php,v 1.28 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR_ErrorStack
- */
-
-/**
- * Singleton storage
- * 
- * Format:
- * <pre>
- * array(
- *  'package1' => PEAR_ErrorStack object,
- *  'package2' => PEAR_ErrorStack object,
- *  ...
- * )
- * </pre>
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
- */
-$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();
-
-/**
- * Global error callback (default)
- * 
- * This is only used if set to non-false.  * is the default callback for
- * all packages, whereas specific packages may set a default callback
- * for all instances, regardless of whether they are a singleton or not.
- *
- * To exclude non-singletons, only set the local callback for the singleton
- * @see PEAR_ErrorStack::setDefaultCallback()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
- */
-$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
-    '*' => false,
-);
-
-/**
- * Global Log object (default)
- * 
- * This is only used if set to non-false.  Use to set a default log object for
- * all stacks, regardless of instantiation order or location
- * @see PEAR_ErrorStack::setDefaultLogger()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
- */
-$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;
-
-/**
- * Global Overriding Callback
- * 
- * This callback will override any error callbacks that specific loggers have set.
- * Use with EXTREME caution
- * @see PEAR_ErrorStack::staticPushCallback()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
- */
-$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
-
-/**#@+
- * One of four possible return values from the error Callback
- * @see PEAR_ErrorStack::_errorCallback()
- */
-/**
- * If this is returned, then the error will be both pushed onto the stack
- * and logged.
- */
-define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
-/**
- * If this is returned, then the error will only be pushed onto the stack,
- * and not logged.
- */
-define('PEAR_ERRORSTACK_PUSH', 2);
-/**
- * If this is returned, then the error will only be logged, but not pushed
- * onto the error stack.
- */
-define('PEAR_ERRORSTACK_LOG', 3);
-/**
- * If this is returned, then the error is completely ignored.
- */
-define('PEAR_ERRORSTACK_IGNORE', 4);
-/**
- * If this is returned, then the error is logged and die() is called.
- */
-define('PEAR_ERRORSTACK_DIE', 5);
-/**#@-*/
-
-/**
- * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
- * the singleton method.
- */
-define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);
-
-/**
- * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
- * that has no __toString() method
- */
-define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
-/**
- * Error Stack Implementation
- *
- * Usage:
- * <code>
- * // global error stack
- * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
- * // local error stack
- * $local_stack = new PEAR_ErrorStack('MyPackage');
- * </code>
- * @author     Greg Beaver <cellog at php.net>
- * @version    1.7.2
- * @package    PEAR_ErrorStack
- * @category   Debugging
- * @copyright  2004-2008 Greg Beaver
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: ErrorStack.php,v 1.28 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR_ErrorStack
- */
-class PEAR_ErrorStack {
-    /**
-     * Errors are stored in the order that they are pushed on the stack.
-     * @since 0.4alpha Errors are no longer organized by error level.
-     * This renders pop() nearly unusable, and levels could be more easily
-     * handled in a callback anyway
-     * @var array
-     * @access private
-     */
-    var $_errors = array();
-
-    /**
-     * Storage of errors by level.
-     *
-     * Allows easy retrieval and deletion of only errors from a particular level
-     * @since PEAR 1.4.0dev
-     * @var array
-     * @access private
-     */
-    var $_errorsByLevel = array();
-
-    /**
-     * Package name this error stack represents
-     * @var string
-     * @access protected
-     */
-    var $_package;
-    
-    /**
-     * Determines whether a PEAR_Error is thrown upon every error addition
-     * @var boolean
-     * @access private
-     */
-    var $_compat = false;
-    
-    /**
-     * If set to a valid callback, this will be used to generate the error
-     * message from the error code, otherwise the message passed in will be
-     * used
-     * @var false|string|array
-     * @access private
-     */
-    var $_msgCallback = false;
-    
-    /**
-     * If set to a valid callback, this will be used to generate the error
-     * context for an error.  For PHP-related errors, this will be a file
-     * and line number as retrieved from debug_backtrace(), but can be
-     * customized for other purposes.  The error might actually be in a separate
-     * configuration file, or in a database query.
-     * @var false|string|array
-     * @access protected
-     */
-    var $_contextCallback = false;
-    
-    /**
-     * If set to a valid callback, this will be called every time an error
-     * is pushed onto the stack.  The return value will be used to determine
-     * whether to allow an error to be pushed or logged.
-     * 
-     * The return value must be one an PEAR_ERRORSTACK_* constant
-     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
-     * @var false|string|array
-     * @access protected
-     */
-    var $_errorCallback = array();
-    
-    /**
-     * PEAR::Log object for logging errors
-     * @var false|Log
-     * @access protected
-     */
-    var $_logger = false;
-    
-    /**
-     * Error messages - designed to be overridden
-     * @var array
-     * @abstract
-     */
-    var $_errorMsgs = array();
-    
-    /**
-     * Set up a new error stack
-     * 
-     * @param string   $package name of the package this error stack represents
-     * @param callback $msgCallback callback used for error message generation
-     * @param callback $contextCallback callback used for context generation,
-     *                 defaults to {@link getFileLine()}
-     * @param boolean  $throwPEAR_Error
-     */
-    function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false,
-                         $throwPEAR_Error = false)
-    {
-        $this->_package = $package;
-        $this->setMessageCallback($msgCallback);
-        $this->setContextCallback($contextCallback);
-        $this->_compat = $throwPEAR_Error;
-    }
-    
-    /**
-     * Return a single error stack for this package.
-     * 
-     * Note that all parameters are ignored if the stack for package $package
-     * has already been instantiated
-     * @param string   $package name of the package this error stack represents
-     * @param callback $msgCallback callback used for error message generation
-     * @param callback $contextCallback callback used for context generation,
-     *                 defaults to {@link getFileLine()}
-     * @param boolean  $throwPEAR_Error
-     * @param string   $stackClass class to instantiate
-     * @static
-     * @return PEAR_ErrorStack
-     */
-    function &singleton($package, $msgCallback = false, $contextCallback = false,
-                         $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack')
-    {
-        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
-            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
-        }
-        if (!class_exists($stackClass)) {
-            if (function_exists('debug_backtrace')) {
-                $trace = debug_backtrace();
-            }
-            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
-                'exception', array('stackclass' => $stackClass),
-                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
-                false, $trace);
-        }
-        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
-            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
-
-        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
-    }
-
-    /**
-     * Internal error handler for PEAR_ErrorStack class
-     * 
-     * Dies if the error is an exception (and would have died anyway)
-     * @access private
-     */
-    function _handleError($err)
-    {
-        if ($err['level'] == 'exception') {
-            $message = $err['message'];
-            if (isset($_SERVER['REQUEST_URI'])) {
-                echo '<br />';
-            } else {
-                echo "\n";
-            }
-            var_dump($err['context']);
-            die($message);
-        }
-    }
-    
-    /**
-     * Set up a PEAR::Log object for all error stacks that don't have one
-     * @param Log $log 
-     * @static
-     */
-    function setDefaultLogger(&$log)
-    {
-        if (is_object($log) && method_exists($log, 'log') ) {
-            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
-        } elseif (is_callable($log)) {
-            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
-	}
-    }
-    
-    /**
-     * Set up a PEAR::Log object for this error stack
-     * @param Log $log 
-     */
-    function setLogger(&$log)
-    {
-        if (is_object($log) && method_exists($log, 'log') ) {
-            $this->_logger = &$log;
-        } elseif (is_callable($log)) {
-            $this->_logger = &$log;
-        }
-    }
-    
-    /**
-     * Set an error code => error message mapping callback
-     * 
-     * This method sets the callback that can be used to generate error
-     * messages for any instance
-     * @param array|string Callback function/method
-     */
-    function setMessageCallback($msgCallback)
-    {
-        if (!$msgCallback) {
-            $this->_msgCallback = array(&$this, 'getErrorMessage');
-        } else {
-            if (is_callable($msgCallback)) {
-                $this->_msgCallback = $msgCallback;
-            }
-        }
-    }
-    
-    /**
-     * Get an error code => error message mapping callback
-     * 
-     * This method returns the current callback that can be used to generate error
-     * messages
-     * @return array|string|false Callback function/method or false if none
-     */
-    function getMessageCallback()
-    {
-        return $this->_msgCallback;
-    }
-    
-    /**
-     * Sets a default callback to be used by all error stacks
-     * 
-     * This method sets the callback that can be used to generate error
-     * messages for a singleton
-     * @param array|string Callback function/method
-     * @param string Package name, or false for all packages
-     * @static
-     */
-    function setDefaultCallback($callback = false, $package = false)
-    {
-        if (!is_callable($callback)) {
-            $callback = false;
-        }
-        $package = $package ? $package : '*';
-        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
-    }
-    
-    /**
-     * Set a callback that generates context information (location of error) for an error stack
-     * 
-     * This method sets the callback that can be used to generate context
-     * information for an error.  Passing in NULL will disable context generation
-     * and remove the expensive call to debug_backtrace()
-     * @param array|string|null Callback function/method
-     */
-    function setContextCallback($contextCallback)
-    {
-        if ($contextCallback === null) {
-            return $this->_contextCallback = false;
-        }
-        if (!$contextCallback) {
-            $this->_contextCallback = array(&$this, 'getFileLine');
-        } else {
-            if (is_callable($contextCallback)) {
-                $this->_contextCallback = $contextCallback;
-            }
-        }
-    }
-    
-    /**
-     * Set an error Callback
-     * If set to a valid callback, this will be called every time an error
-     * is pushed onto the stack.  The return value will be used to determine
-     * whether to allow an error to be pushed or logged.
-     * 
-     * The return value must be one of the ERRORSTACK_* constants.
-     * 
-     * This functionality can be used to emulate PEAR's pushErrorHandling, and
-     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
-     * the error stack or logging
-     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
-     * @see popCallback()
-     * @param string|array $cb
-     */
-    function pushCallback($cb)
-    {
-        array_push($this->_errorCallback, $cb);
-    }
-    
-    /**
-     * Remove a callback from the error callback stack
-     * @see pushCallback()
-     * @return array|string|false
-     */
-    function popCallback()
-    {
-        if (!count($this->_errorCallback)) {
-            return false;
-        }
-        return array_pop($this->_errorCallback);
-    }
-    
-    /**
-     * Set a temporary overriding error callback for every package error stack
-     *
-     * Use this to temporarily disable all existing callbacks (can be used
-     * to emulate the @ operator, for instance)
-     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
-     * @see staticPopCallback(), pushCallback()
-     * @param string|array $cb
-     * @static
-     */
-    function staticPushCallback($cb)
-    {
-        array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
-    }
-    
-    /**
-     * Remove a temporary overriding error callback
-     * @see staticPushCallback()
-     * @return array|string|false
-     * @static
-     */
-    function staticPopCallback()
-    {
-        $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
-        if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
-            $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
-        }
-        return $ret;
-    }
-    
-    /**
-     * Add an error to the stack
-     * 
-     * If the message generator exists, it is called with 2 parameters.
-     *  - the current Error Stack object
-     *  - an array that is in the same format as an error.  Available indices
-     *    are 'code', 'package', 'time', 'params', 'level', and 'context'
-     * 
-     * Next, if the error should contain context information, this is
-     * handled by the context grabbing method.
-     * Finally, the error is pushed onto the proper error stack
-     * @param int    $code      Package-specific error code
-     * @param string $level     Error level.  This is NOT spell-checked
-     * @param array  $params    associative array of error parameters
-     * @param string $msg       Error message, or a portion of it if the message
-     *                          is to be generated
-     * @param array  $repackage If this error re-packages an error pushed by
-     *                          another package, place the array returned from
-     *                          {@link pop()} in this parameter
-     * @param array  $backtrace Protected parameter: use this to pass in the
-     *                          {@link debug_backtrace()} that should be used
-     *                          to find error context
-     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
-     * thrown.  If a PEAR_Error is returned, the userinfo
-     * property is set to the following array:
-     * 
-     * <code>
-     * array(
-     *    'code' => $code,
-     *    'params' => $params,
-     *    'package' => $this->_package,
-     *    'level' => $level,
-     *    'time' => time(),
-     *    'context' => $context,
-     *    'message' => $msg,
-     * //['repackage' => $err] repackaged error array/Exception class
-     * );
-     * </code>
-     * 
-     * Normally, the previous array is returned.
-     */
-    function push($code, $level = 'error', $params = array(), $msg = false,
-                  $repackage = false, $backtrace = false)
-    {
-        $context = false;
-        // grab error context
-        if ($this->_contextCallback) {
-            if (!$backtrace) {
-                $backtrace = debug_backtrace();
-            }
-            $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
-        }
-        
-        // save error
-        $time = explode(' ', microtime());
-        $time = $time[1] + $time[0];
-        $err = array(
-                'code' => $code,
-                'params' => $params,
-                'package' => $this->_package,
-                'level' => $level,
-                'time' => $time,
-                'context' => $context,
-                'message' => $msg,
-               );
-
-        if ($repackage) {
-            $err['repackage'] = $repackage;
-        }
-
-        // set up the error message, if necessary
-        if ($this->_msgCallback) {
-            $msg = call_user_func_array($this->_msgCallback,
-                                        array(&$this, $err));
-            $err['message'] = $msg;
-        }        
-        $push = $log = true;
-        $die = false;
-        // try the overriding callback first
-        $callback = $this->staticPopCallback();
-        if ($callback) {
-            $this->staticPushCallback($callback);
-        }
-        if (!is_callable($callback)) {
-            // try the local callback next
-            $callback = $this->popCallback();
-            if (is_callable($callback)) {
-                $this->pushCallback($callback);
-            } else {
-                // try the default callback
-                $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
-                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
-                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
-            }
-        }
-        if (is_callable($callback)) {
-            switch(call_user_func($callback, $err)){
-            	case PEAR_ERRORSTACK_IGNORE: 
-            		return $err;
-        		break;
-            	case PEAR_ERRORSTACK_PUSH: 
-            		$log = false;
-        		break;
-            	case PEAR_ERRORSTACK_LOG: 
-            		$push = false;
-        		break;
-            	case PEAR_ERRORSTACK_DIE: 
-            		$die = true;
-        		break;
-                // anything else returned has the same effect as pushandlog
-            }
-        }
-        if ($push) {
-            array_unshift($this->_errors, $err);
-            if (!isset($this->_errorsByLevel[$err['level']])) {
-                $this->_errorsByLevel[$err['level']] = array();
-            }
-            $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
-        }
-        if ($log) {
-            if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
-                $this->_log($err);
-            }
-        }
-        if ($die) {
-            die();
-        }
-        if ($this->_compat && $push) {
-            return $this->raiseError($msg, $code, null, null, $err);
-        }
-        return $err;
-    }
-    
-    /**
-     * Static version of {@link push()}
-     * 
-     * @param string $package   Package name this error belongs to
-     * @param int    $code      Package-specific error code
-     * @param string $level     Error level.  This is NOT spell-checked
-     * @param array  $params    associative array of error parameters
-     * @param string $msg       Error message, or a portion of it if the message
-     *                          is to be generated
-     * @param array  $repackage If this error re-packages an error pushed by
-     *                          another package, place the array returned from
-     *                          {@link pop()} in this parameter
-     * @param array  $backtrace Protected parameter: use this to pass in the
-     *                          {@link debug_backtrace()} that should be used
-     *                          to find error context
-     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
-     *                          thrown.  see docs for {@link push()}
-     * @static
-     */
-    function staticPush($package, $code, $level = 'error', $params = array(),
-                        $msg = false, $repackage = false, $backtrace = false)
-    {
-        $s = &PEAR_ErrorStack::singleton($package);
-        if ($s->_contextCallback) {
-            if (!$backtrace) {
-                if (function_exists('debug_backtrace')) {
-                    $backtrace = debug_backtrace();
-                }
-            }
-        }
-        return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
-    }
-    
-    /**
-     * Log an error using PEAR::Log
-     * @param array $err Error array
-     * @param array $levels Error level => Log constant map
-     * @access protected
-     */
-    function _log($err)
-    {
-        if ($this->_logger) {
-            $logger = &$this->_logger;
-        } else {
-            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
-        }
-        if (is_a($logger, 'Log')) {
-            $levels = array(
-                'exception' => PEAR_LOG_CRIT,
-                'alert' => PEAR_LOG_ALERT,
-                'critical' => PEAR_LOG_CRIT,
-                'error' => PEAR_LOG_ERR,
-                'warning' => PEAR_LOG_WARNING,
-                'notice' => PEAR_LOG_NOTICE,
-                'info' => PEAR_LOG_INFO,
-                'debug' => PEAR_LOG_DEBUG);
-            if (isset($levels[$err['level']])) {
-                $level = $levels[$err['level']];
-            } else {
-                $level = PEAR_LOG_INFO;
-            }
-            $logger->log($err['message'], $level, $err);
-        } else { // support non-standard logs
-            call_user_func($logger, $err);
-        }
-    }
-
-    
-    /**
-     * Pop an error off of the error stack
-     * 
-     * @return false|array
-     * @since 0.4alpha it is no longer possible to specify a specific error
-     * level to return - the last error pushed will be returned, instead
-     */
-    function pop()
-    {
-        $err = @array_shift($this->_errors);
-        if (!is_null($err)) {
-            @array_pop($this->_errorsByLevel[$err['level']]);
-            if (!count($this->_errorsByLevel[$err['level']])) {
-                unset($this->_errorsByLevel[$err['level']]);
-            }
-        }
-        return $err;
-    }
-
-    /**
-     * Pop an error off of the error stack, static method
-     *
-     * @param string package name
-     * @return boolean
-     * @since PEAR1.5.0a1
-     */
-    function staticPop($package)
-    {
-        if ($package) {
-            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
-                return false;
-            }
-            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
-        }
-    }
-
-    /**
-     * Determine whether there are any errors on the stack
-     * @param string|array Level name.  Use to determine if any errors
-     * of level (string), or levels (array) have been pushed
-     * @return boolean
-     */
-    function hasErrors($level = false)
-    {
-        if ($level) {
-            return isset($this->_errorsByLevel[$level]);
-        }
-        return count($this->_errors);
-    }
-    
-    /**
-     * Retrieve all errors since last purge
-     * 
-     * @param boolean set in order to empty the error stack
-     * @param string level name, to return only errors of a particular severity
-     * @return array
-     */
-    function getErrors($purge = false, $level = false)
-    {
-        if (!$purge) {
-            if ($level) {
-                if (!isset($this->_errorsByLevel[$level])) {
-                    return array();
-                } else {
-                    return $this->_errorsByLevel[$level];
-                }
-            } else {
-                return $this->_errors;
-            }
-        }
-        if ($level) {
-            $ret = $this->_errorsByLevel[$level];
-            foreach ($this->_errorsByLevel[$level] as $i => $unused) {
-                // entries are references to the $_errors array
-                $this->_errorsByLevel[$level][$i] = false;
-            }
-            // array_filter removes all entries === false
-            $this->_errors = array_filter($this->_errors);
-            unset($this->_errorsByLevel[$level]);
-            return $ret;
-        }
-        $ret = $this->_errors;
-        $this->_errors = array();
-        $this->_errorsByLevel = array();
-        return $ret;
-    }
-    
-    /**
-     * Determine whether there are any errors on a single error stack, or on any error stack
-     *
-     * The optional parameter can be used to test the existence of any errors without the need of
-     * singleton instantiation
-     * @param string|false Package name to check for errors
-     * @param string Level name to check for a particular severity
-     * @return boolean
-     * @static
-     */
-    function staticHasErrors($package = false, $level = false)
-    {
-        if ($package) {
-            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
-                return false;
-            }
-            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
-        }
-        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
-            if ($obj->hasErrors($level)) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Get a list of all errors since last purge, organized by package
-     * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
-     * @param boolean $purge Set to purge the error stack of existing errors
-     * @param string  $level Set to a level name in order to retrieve only errors of a particular level
-     * @param boolean $merge Set to return a flat array, not organized by package
-     * @param array   $sortfunc Function used to sort a merged array - default
-     *        sorts by time, and should be good for most cases
-     * @static
-     * @return array 
-     */
-    function staticGetErrors($purge = false, $level = false, $merge = false,
-                             $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
-    {
-        $ret = array();
-        if (!is_callable($sortfunc)) {
-            $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
-        }
-        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
-            $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
-            if ($test) {
-                if ($merge) {
-                    $ret = array_merge($ret, $test);
-                } else {
-                    $ret[$package] = $test;
-                }
-            }
-        }
-        if ($merge) {
-            usort($ret, $sortfunc);
-        }
-        return $ret;
-    }
-    
-    /**
-     * Error sorting function, sorts by time
-     * @access private
-     */
-    function _sortErrors($a, $b)
-    {
-        if ($a['time'] == $b['time']) {
-            return 0;
-        }
-        if ($a['time'] < $b['time']) {
-            return 1;
-        }
-        return -1;
-    }
-
-    /**
-     * Standard file/line number/function/class context callback
-     *
-     * This function uses a backtrace generated from {@link debug_backtrace()}
-     * and so will not work at all in PHP < 4.3.0.  The frame should
-     * reference the frame that contains the source of the error.
-     * @return array|false either array('file' => file, 'line' => line,
-     *         'function' => function name, 'class' => class name) or
-     *         if this doesn't work, then false
-     * @param unused
-     * @param integer backtrace frame.
-     * @param array Results of debug_backtrace()
-     * @static
-     */
-    function getFileLine($code, $params, $backtrace = null)
-    {
-        if ($backtrace === null) {
-            return false;
-        }
-        $frame = 0;
-        $functionframe = 1;
-        if (!isset($backtrace[1])) {
-            $functionframe = 0;
-        } else {
-            while (isset($backtrace[$functionframe]['function']) &&
-                  $backtrace[$functionframe]['function'] == 'eval' &&
-                  isset($backtrace[$functionframe + 1])) {
-                $functionframe++;
-            }
-        }
-        if (isset($backtrace[$frame])) {
-            if (!isset($backtrace[$frame]['file'])) {
-                $frame++;
-            }
-            $funcbacktrace = $backtrace[$functionframe];
-            $filebacktrace = $backtrace[$frame];
-            $ret = array('file' => $filebacktrace['file'],
-                         'line' => $filebacktrace['line']);
-            // rearrange for eval'd code or create function errors
-            if (strpos($filebacktrace['file'], '(') && 
-            	  preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
-                  $matches)) {
-                $ret['file'] = $matches[1];
-                $ret['line'] = $matches[2] + 0;
-            }
-            if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
-                if ($funcbacktrace['function'] != 'eval') {
-                    if ($funcbacktrace['function'] == '__lambda_func') {
-                        $ret['function'] = 'create_function() code';
-                    } else {
-                        $ret['function'] = $funcbacktrace['function'];
-                    }
-                }
-            }
-            if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
-                $ret['class'] = $funcbacktrace['class'];
-            }
-            return $ret;
-        }
-        return false;
-    }
-    
-    /**
-     * Standard error message generation callback
-     * 
-     * This method may also be called by a custom error message generator
-     * to fill in template values from the params array, simply
-     * set the third parameter to the error message template string to use
-     * 
-     * The special variable %__msg% is reserved: use it only to specify
-     * where a message passed in by the user should be placed in the template,
-     * like so:
-     * 
-     * Error message: %msg% - internal error
-     * 
-     * If the message passed like so:
-     * 
-     * <code>
-     * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
-     * </code>
-     * 
-     * The returned error message will be "Error message: server error 500 -
-     * internal error"
-     * @param PEAR_ErrorStack
-     * @param array
-     * @param string|false Pre-generated error message template
-     * @static
-     * @return string
-     */
-    function getErrorMessage(&$stack, $err, $template = false)
-    {
-        if ($template) {
-            $mainmsg = $template;
-        } else {
-            $mainmsg = $stack->getErrorMessageTemplate($err['code']);
-        }
-        $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
-        if (is_array($err['params']) && count($err['params'])) {
-            foreach ($err['params'] as $name => $val) {
-                if (is_array($val)) {
-                    // @ is needed in case $val is a multi-dimensional array
-                    $val = @implode(', ', $val);
-                }
-                if (is_object($val)) {
-                    if (method_exists($val, '__toString')) {
-                        $val = $val->__toString();
-                    } else {
-                        PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
-                            'warning', array('obj' => get_class($val)),
-                            'object %obj% passed into getErrorMessage, but has no __toString() method');
-                        $val = 'Object';
-                    }
-                }
-                $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
-            }
-        }
-        return $mainmsg;
-    }
-    
-    /**
-     * Standard Error Message Template generator from code
-     * @return string
-     */
-    function getErrorMessageTemplate($code)
-    {
-        if (!isset($this->_errorMsgs[$code])) {
-            return '%__msg%';
-        }
-        return $this->_errorMsgs[$code];
-    }
-    
-    /**
-     * Set the Error Message Template array
-     * 
-     * The array format must be:
-     * <pre>
-     * array(error code => 'message template',...)
-     * </pre>
-     * 
-     * Error message parameters passed into {@link push()} will be used as input
-     * for the error message.  If the template is 'message %foo% was %bar%', and the
-     * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
-     * be 'message one was six'
-     * @return string
-     */
-    function setErrorMessageTemplate($template)
-    {
-        $this->_errorMsgs = $template;
-    }
-    
-    
-    /**
-     * emulate PEAR::raiseError()
-     * 
-     * @return PEAR_Error
-     */
-    function raiseError()
-    {
-        require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
-        $args = func_get_args();
-        return call_user_func_array(array('PEAR', 'raiseError'), $args);
-    }
-}
-$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
-$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
-?>
-<?php
-/**
- * PEAR_Frontend, the singleton-based frontend for user input/output
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Frontend.php,v 1.13 2008/01/03 20:26:35 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * Which user interface class is being used.
- * @var string class name
- */
-$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
-
-/**
- * Instance of $_PEAR_Command_uiclass.
- * @var object
- */
-$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
-
-/**
- * Singleton-based frontend for PEAR user input/output
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Frontend extends PEAR
-{
-    /**
-     * Retrieve the frontend object
-     * @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
-     * @static
-     */
-    function &singleton($type = null)
-    {
-        if ($type === null) {
-            if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
-                $a = false;
-                return $a;
-            }
-            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
-        } else {
-            $a = PEAR_Frontend::setFrontendClass($type);
-            return $a;
-        }
-    }
-
-    /**
-     * Set the frontend class that will be used by calls to {@link singleton()}
-     *
-     * Frontends are expected to conform to the PEAR naming standard of
-     * _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
-     * @param string $uiclass full class name
-     * @return PEAR_Frontend
-     * @static
-     */
-    function &setFrontendClass($uiclass)
-    {
-        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
-              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
-            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
-        }
-        if (!class_exists($uiclass)) {
-            $file = 'phar://install-pear-nozlib.phar/' . str_replace('_', '/', $uiclass) . '.php';
-            if (PEAR_Frontend::isIncludeable($file)) {
-                include_once $file;
-            }
-        }
-        if (class_exists($uiclass)) {
-            $obj = &new $uiclass;
-            // quick test to see if this class implements a few of the most
-            // important frontend methods
-            if (is_a($obj, 'PEAR_Frontend')) {
-                $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
-                $GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
-                return $obj;
-            } else {
-                $err = PEAR::raiseError("not a frontend class: $uiclass");
-                return $err;
-            }
-        }
-        $err = PEAR::raiseError("no such class: $uiclass");
-        return $err;
-    }
-
-    /**
-     * Set the frontend class that will be used by calls to {@link singleton()}
-     *
-     * Frontends are expected to be a descendant of PEAR_Frontend
-     * @param PEAR_Frontend
-     * @return PEAR_Frontend
-     * @static
-     */
-    function &setFrontendObject($uiobject)
-    {
-        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
-              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], get_class($uiobject))) {
-            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
-        }
-        if (!is_a($uiobject, 'PEAR_Frontend')) {
-            $err = PEAR::raiseError('not a valid frontend class: (' .
-                get_class($uiobject) . ')');
-            return $err;
-        }
-        $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$uiobject;
-        $GLOBALS['_PEAR_FRONTEND_CLASS'] = get_class($uiobject);
-        return $uiobject;
-    }
-
-    /**
-     * @param string $path relative or absolute include path
-     * @return boolean
-     * @static
-     */
-    function isIncludeable($path)
-    {
-        if (file_exists($path) && is_readable($path)) {
-            return true;
-        }
-        $fp = @fopen($path, 'r', true);
-        if ($fp) {
-            fclose($fp);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @param PEAR_Config
-     */
-    function setConfig(&$config)
-    {
-    }
-
-    /**
-     * This can be overridden to allow session-based temporary file management
-     *
-     * By default, all files are deleted at the end of a session.  The web installer
-     * needs to be able to sustain a list over many sessions in order to support
-     * user interaction with install scripts
-     */
-    function addTempFile($file)
-    {
-        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
-    }
-
-    /**
-     * Log an action
-     *
-     * @param string $msg the message to log
-     * @param boolean $append_crlf
-     * @return boolean true
-     * @abstract
-     */
-    function log($msg, $append_crlf = true)
-    {
-    }
 
-    /**
-     * Run a post-installation script
-     *
-     * @param array $scripts array of post-install scripts
-     * @abstract
-     */
-    function runPostinstallScripts(&$scripts)
-    {
-    }
-
-    /**
-     * Display human-friendly output formatted depending on the
-     * $command parameter.
-     *
-     * This should be able to handle basic output data with no command
-     * @param mixed  $data    data structure containing the information to display
-     * @param string $command command from which this method was called
-     * @abstract
-     */
-    function outputData($data, $command = '_default')
-    {
-    }
-
-    /**
-     * Display a modal form dialog and return the given input
-     *
-     * A frontend that requires multiple requests to retrieve and process
-     * data must take these needs into account, and implement the request
-     * handling code.
-     * @param string $command  command from which this method was called
-     * @param array  $prompts  associative array. keys are the input field names
-     *                         and values are the description
-     * @param array  $types    array of input field types (text, password,
-     *                         etc.) keys have to be the same like in $prompts
-     * @param array  $defaults array of default values. again keys have
-     *                         to be the same like in $prompts.  Do not depend
-     *                         on a default value being set.
-     * @return array input sent by the user
-     * @abstract
-     */
-    function userDialog($command, $prompts, $types = array(), $defaults = array())
-    {
+        return $info;
     }
-}
-?><?php
+}<?php
+/**
+ * Error Stack Implementation
+ * 
+ * This is an incredibly simple implementation of a very complex error handling
+ * facility.  It contains the ability
+ * to track multiple errors from multiple packages simultaneously.  In addition,
+ * it can track errors of many levels, save data along with the error, context
+ * information such as the exact file, line number, class and function that
+ * generated the error, and if necessary, it can raise a traditional PEAR_Error.
+ * It has built-in support for PEAR::Log, to log errors as they occur
+ * 
+ * Since version 0.2alpha, it is also possible to selectively ignore errors,
+ * through the use of an error callback, see {@link pushCallback()}
+ * 
+ * Since version 0.3alpha, it is possible to specify the exception class
+ * returned from {@link push()}
+ *
+ * Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class.  This can
+ * still be done quite handily in an error callback or by manipulating the returned array
+ * @category   Debugging
+ * @package    PEAR_ErrorStack
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  2004-2008 Greg Beaver
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: ErrorStack.php,v 1.29 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
+ */
+
+/**
+ * Singleton storage
+ * 
+ * Format:
+ * <pre>
+ * array(
+ *  'package1' => PEAR_ErrorStack object,
+ *  'package2' => PEAR_ErrorStack object,
+ *  ...
+ * )
+ * </pre>
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();
+
+/**
+ * Global error callback (default)
+ * 
+ * This is only used if set to non-false.  * is the default callback for
+ * all packages, whereas specific packages may set a default callback
+ * for all instances, regardless of whether they are a singleton or not.
+ *
+ * To exclude non-singletons, only set the local callback for the singleton
+ * @see PEAR_ErrorStack::setDefaultCallback()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
+    '*' => false,
+);
+
+/**
+ * Global Log object (default)
+ * 
+ * This is only used if set to non-false.  Use to set a default log object for
+ * all stacks, regardless of instantiation order or location
+ * @see PEAR_ErrorStack::setDefaultLogger()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;
+
+/**
+ * Global Overriding Callback
+ * 
+ * This callback will override any error callbacks that specific loggers have set.
+ * Use with EXTREME caution
+ * @see PEAR_ErrorStack::staticPushCallback()
+ * @access private
+ * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
+ */
+$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
+
+/**#@+
+ * One of four possible return values from the error Callback
+ * @see PEAR_ErrorStack::_errorCallback()
+ */
+/**
+ * If this is returned, then the error will be both pushed onto the stack
+ * and logged.
+ */
+define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
+/**
+ * If this is returned, then the error will only be pushed onto the stack,
+ * and not logged.
+ */
+define('PEAR_ERRORSTACK_PUSH', 2);
+/**
+ * If this is returned, then the error will only be logged, but not pushed
+ * onto the error stack.
+ */
+define('PEAR_ERRORSTACK_LOG', 3);
+/**
+ * If this is returned, then the error is completely ignored.
+ */
+define('PEAR_ERRORSTACK_IGNORE', 4);
+/**
+ * If this is returned, then the error is logged and die() is called.
+ */
+define('PEAR_ERRORSTACK_DIE', 5);
+/**#@-*/
+
+/**
+ * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
+ * the singleton method.
+ */
+define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);
+
+/**
+ * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
+ * that has no __toString() method
+ */
+define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
+/**
+ * Error Stack Implementation
+ *
+ * Usage:
+ * <code>
+ * // global error stack
+ * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
+ * // local error stack
+ * $local_stack = new PEAR_ErrorStack('MyPackage');
+ * </code>
+ * @author     Greg Beaver <cellog at php.net>
+ * @version    1.8.0
+ * @package    PEAR_ErrorStack
+ * @category   Debugging
+ * @copyright  2004-2008 Greg Beaver
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: ErrorStack.php,v 1.29 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR_ErrorStack
+ */
+class PEAR_ErrorStack {
+    /**
+     * Errors are stored in the order that they are pushed on the stack.
+     * @since 0.4alpha Errors are no longer organized by error level.
+     * This renders pop() nearly unusable, and levels could be more easily
+     * handled in a callback anyway
+     * @var array
+     * @access private
+     */
+    var $_errors = array();
+
+    /**
+     * Storage of errors by level.
+     *
+     * Allows easy retrieval and deletion of only errors from a particular level
+     * @since PEAR 1.4.0dev
+     * @var array
+     * @access private
+     */
+    var $_errorsByLevel = array();
+
+    /**
+     * Package name this error stack represents
+     * @var string
+     * @access protected
+     */
+    var $_package;
+    
+    /**
+     * Determines whether a PEAR_Error is thrown upon every error addition
+     * @var boolean
+     * @access private
+     */
+    var $_compat = false;
+    
+    /**
+     * If set to a valid callback, this will be used to generate the error
+     * message from the error code, otherwise the message passed in will be
+     * used
+     * @var false|string|array
+     * @access private
+     */
+    var $_msgCallback = false;
+    
+    /**
+     * If set to a valid callback, this will be used to generate the error
+     * context for an error.  For PHP-related errors, this will be a file
+     * and line number as retrieved from debug_backtrace(), but can be
+     * customized for other purposes.  The error might actually be in a separate
+     * configuration file, or in a database query.
+     * @var false|string|array
+     * @access protected
+     */
+    var $_contextCallback = false;
+    
+    /**
+     * If set to a valid callback, this will be called every time an error
+     * is pushed onto the stack.  The return value will be used to determine
+     * whether to allow an error to be pushed or logged.
+     * 
+     * The return value must be one an PEAR_ERRORSTACK_* constant
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @var false|string|array
+     * @access protected
+     */
+    var $_errorCallback = array();
+    
+    /**
+     * PEAR::Log object for logging errors
+     * @var false|Log
+     * @access protected
+     */
+    var $_logger = false;
+    
+    /**
+     * Error messages - designed to be overridden
+     * @var array
+     * @abstract
+     */
+    var $_errorMsgs = array();
+    
+    /**
+     * Set up a new error stack
+     * 
+     * @param string   $package name of the package this error stack represents
+     * @param callback $msgCallback callback used for error message generation
+     * @param callback $contextCallback callback used for context generation,
+     *                 defaults to {@link getFileLine()}
+     * @param boolean  $throwPEAR_Error
+     */
+    function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false,
+                         $throwPEAR_Error = false)
+    {
+        $this->_package = $package;
+        $this->setMessageCallback($msgCallback);
+        $this->setContextCallback($contextCallback);
+        $this->_compat = $throwPEAR_Error;
+    }
+    
+    /**
+     * Return a single error stack for this package.
+     * 
+     * Note that all parameters are ignored if the stack for package $package
+     * has already been instantiated
+     * @param string   $package name of the package this error stack represents
+     * @param callback $msgCallback callback used for error message generation
+     * @param callback $contextCallback callback used for context generation,
+     *                 defaults to {@link getFileLine()}
+     * @param boolean  $throwPEAR_Error
+     * @param string   $stackClass class to instantiate
+     * @static
+     * @return PEAR_ErrorStack
+     */
+    function &singleton($package, $msgCallback = false, $contextCallback = false,
+                         $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack')
+    {
+        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
+        }
+        if (!class_exists($stackClass)) {
+            if (function_exists('debug_backtrace')) {
+                $trace = debug_backtrace();
+            }
+            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
+                'exception', array('stackclass' => $stackClass),
+                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
+                false, $trace);
+        }
+        $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
+            new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
+
+        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
+    }
+
+    /**
+     * Internal error handler for PEAR_ErrorStack class
+     * 
+     * Dies if the error is an exception (and would have died anyway)
+     * @access private
+     */
+    function _handleError($err)
+    {
+        if ($err['level'] == 'exception') {
+            $message = $err['message'];
+            if (isset($_SERVER['REQUEST_URI'])) {
+                echo '<br />';
+            } else {
+                echo "\n";
+            }
+            var_dump($err['context']);
+            die($message);
+        }
+    }
+    
+    /**
+     * Set up a PEAR::Log object for all error stacks that don't have one
+     * @param Log $log 
+     * @static
+     */
+    function setDefaultLogger(&$log)
+    {
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+        } elseif (is_callable($log)) {
+            $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
+	}
+    }
+    
+    /**
+     * Set up a PEAR::Log object for this error stack
+     * @param Log $log 
+     */
+    function setLogger(&$log)
+    {
+        if (is_object($log) && method_exists($log, 'log') ) {
+            $this->_logger = &$log;
+        } elseif (is_callable($log)) {
+            $this->_logger = &$log;
+        }
+    }
+    
+    /**
+     * Set an error code => error message mapping callback
+     * 
+     * This method sets the callback that can be used to generate error
+     * messages for any instance
+     * @param array|string Callback function/method
+     */
+    function setMessageCallback($msgCallback)
+    {
+        if (!$msgCallback) {
+            $this->_msgCallback = array(&$this, 'getErrorMessage');
+        } else {
+            if (is_callable($msgCallback)) {
+                $this->_msgCallback = $msgCallback;
+            }
+        }
+    }
+    
+    /**
+     * Get an error code => error message mapping callback
+     * 
+     * This method returns the current callback that can be used to generate error
+     * messages
+     * @return array|string|false Callback function/method or false if none
+     */
+    function getMessageCallback()
+    {
+        return $this->_msgCallback;
+    }
+    
+    /**
+     * Sets a default callback to be used by all error stacks
+     * 
+     * This method sets the callback that can be used to generate error
+     * messages for a singleton
+     * @param array|string Callback function/method
+     * @param string Package name, or false for all packages
+     * @static
+     */
+    function setDefaultCallback($callback = false, $package = false)
+    {
+        if (!is_callable($callback)) {
+            $callback = false;
+        }
+        $package = $package ? $package : '*';
+        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
+    }
+    
+    /**
+     * Set a callback that generates context information (location of error) for an error stack
+     * 
+     * This method sets the callback that can be used to generate context
+     * information for an error.  Passing in NULL will disable context generation
+     * and remove the expensive call to debug_backtrace()
+     * @param array|string|null Callback function/method
+     */
+    function setContextCallback($contextCallback)
+    {
+        if ($contextCallback === null) {
+            return $this->_contextCallback = false;
+        }
+        if (!$contextCallback) {
+            $this->_contextCallback = array(&$this, 'getFileLine');
+        } else {
+            if (is_callable($contextCallback)) {
+                $this->_contextCallback = $contextCallback;
+            }
+        }
+    }
+    
+    /**
+     * Set an error Callback
+     * If set to a valid callback, this will be called every time an error
+     * is pushed onto the stack.  The return value will be used to determine
+     * whether to allow an error to be pushed or logged.
+     * 
+     * The return value must be one of the ERRORSTACK_* constants.
+     * 
+     * This functionality can be used to emulate PEAR's pushErrorHandling, and
+     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
+     * the error stack or logging
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @see popCallback()
+     * @param string|array $cb
+     */
+    function pushCallback($cb)
+    {
+        array_push($this->_errorCallback, $cb);
+    }
+    
+    /**
+     * Remove a callback from the error callback stack
+     * @see pushCallback()
+     * @return array|string|false
+     */
+    function popCallback()
+    {
+        if (!count($this->_errorCallback)) {
+            return false;
+        }
+        return array_pop($this->_errorCallback);
+    }
+    
+    /**
+     * Set a temporary overriding error callback for every package error stack
+     *
+     * Use this to temporarily disable all existing callbacks (can be used
+     * to emulate the @ operator, for instance)
+     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
+     * @see staticPopCallback(), pushCallback()
+     * @param string|array $cb
+     * @static
+     */
+    function staticPushCallback($cb)
+    {
+        array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
+    }
+    
+    /**
+     * Remove a temporary overriding error callback
+     * @see staticPushCallback()
+     * @return array|string|false
+     * @static
+     */
+    function staticPopCallback()
+    {
+        $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
+        if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
+            $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
+        }
+        return $ret;
+    }
+    
+    /**
+     * Add an error to the stack
+     * 
+     * If the message generator exists, it is called with 2 parameters.
+     *  - the current Error Stack object
+     *  - an array that is in the same format as an error.  Available indices
+     *    are 'code', 'package', 'time', 'params', 'level', and 'context'
+     * 
+     * Next, if the error should contain context information, this is
+     * handled by the context grabbing method.
+     * Finally, the error is pushed onto the proper error stack
+     * @param int    $code      Package-specific error code
+     * @param string $level     Error level.  This is NOT spell-checked
+     * @param array  $params    associative array of error parameters
+     * @param string $msg       Error message, or a portion of it if the message
+     *                          is to be generated
+     * @param array  $repackage If this error re-packages an error pushed by
+     *                          another package, place the array returned from
+     *                          {@link pop()} in this parameter
+     * @param array  $backtrace Protected parameter: use this to pass in the
+     *                          {@link debug_backtrace()} that should be used
+     *                          to find error context
+     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
+     * thrown.  If a PEAR_Error is returned, the userinfo
+     * property is set to the following array:
+     * 
+     * <code>
+     * array(
+     *    'code' => $code,
+     *    'params' => $params,
+     *    'package' => $this->_package,
+     *    'level' => $level,
+     *    'time' => time(),
+     *    'context' => $context,
+     *    'message' => $msg,
+     * //['repackage' => $err] repackaged error array/Exception class
+     * );
+     * </code>
+     * 
+     * Normally, the previous array is returned.
+     */
+    function push($code, $level = 'error', $params = array(), $msg = false,
+                  $repackage = false, $backtrace = false)
+    {
+        $context = false;
+        // grab error context
+        if ($this->_contextCallback) {
+            if (!$backtrace) {
+                $backtrace = debug_backtrace();
+            }
+            $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
+        }
+        
+        // save error
+        $time = explode(' ', microtime());
+        $time = $time[1] + $time[0];
+        $err = array(
+                'code' => $code,
+                'params' => $params,
+                'package' => $this->_package,
+                'level' => $level,
+                'time' => $time,
+                'context' => $context,
+                'message' => $msg,
+               );
+
+        if ($repackage) {
+            $err['repackage'] = $repackage;
+        }
+
+        // set up the error message, if necessary
+        if ($this->_msgCallback) {
+            $msg = call_user_func_array($this->_msgCallback,
+                                        array(&$this, $err));
+            $err['message'] = $msg;
+        }        
+        $push = $log = true;
+        $die = false;
+        // try the overriding callback first
+        $callback = $this->staticPopCallback();
+        if ($callback) {
+            $this->staticPushCallback($callback);
+        }
+        if (!is_callable($callback)) {
+            // try the local callback next
+            $callback = $this->popCallback();
+            if (is_callable($callback)) {
+                $this->pushCallback($callback);
+            } else {
+                // try the default callback
+                $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
+                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
+                    $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
+            }
+        }
+        if (is_callable($callback)) {
+            switch(call_user_func($callback, $err)){
+            	case PEAR_ERRORSTACK_IGNORE: 
+            		return $err;
+        		break;
+            	case PEAR_ERRORSTACK_PUSH: 
+            		$log = false;
+        		break;
+            	case PEAR_ERRORSTACK_LOG: 
+            		$push = false;
+        		break;
+            	case PEAR_ERRORSTACK_DIE: 
+            		$die = true;
+        		break;
+                // anything else returned has the same effect as pushandlog
+            }
+        }
+        if ($push) {
+            array_unshift($this->_errors, $err);
+            if (!isset($this->_errorsByLevel[$err['level']])) {
+                $this->_errorsByLevel[$err['level']] = array();
+            }
+            $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
+        }
+        if ($log) {
+            if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
+                $this->_log($err);
+            }
+        }
+        if ($die) {
+            die();
+        }
+        if ($this->_compat && $push) {
+            return $this->raiseError($msg, $code, null, null, $err);
+        }
+        return $err;
+    }
+    
+    /**
+     * Static version of {@link push()}
+     * 
+     * @param string $package   Package name this error belongs to
+     * @param int    $code      Package-specific error code
+     * @param string $level     Error level.  This is NOT spell-checked
+     * @param array  $params    associative array of error parameters
+     * @param string $msg       Error message, or a portion of it if the message
+     *                          is to be generated
+     * @param array  $repackage If this error re-packages an error pushed by
+     *                          another package, place the array returned from
+     *                          {@link pop()} in this parameter
+     * @param array  $backtrace Protected parameter: use this to pass in the
+     *                          {@link debug_backtrace()} that should be used
+     *                          to find error context
+     * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
+     *                          thrown.  see docs for {@link push()}
+     * @static
+     */
+    function staticPush($package, $code, $level = 'error', $params = array(),
+                        $msg = false, $repackage = false, $backtrace = false)
+    {
+        $s = &PEAR_ErrorStack::singleton($package);
+        if ($s->_contextCallback) {
+            if (!$backtrace) {
+                if (function_exists('debug_backtrace')) {
+                    $backtrace = debug_backtrace();
+                }
+            }
+        }
+        return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
+    }
+    
+    /**
+     * Log an error using PEAR::Log
+     * @param array $err Error array
+     * @param array $levels Error level => Log constant map
+     * @access protected
+     */
+    function _log($err)
+    {
+        if ($this->_logger) {
+            $logger = &$this->_logger;
+        } else {
+            $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'];
+        }
+        if (is_a($logger, 'Log')) {
+            $levels = array(
+                'exception' => PEAR_LOG_CRIT,
+                'alert' => PEAR_LOG_ALERT,
+                'critical' => PEAR_LOG_CRIT,
+                'error' => PEAR_LOG_ERR,
+                'warning' => PEAR_LOG_WARNING,
+                'notice' => PEAR_LOG_NOTICE,
+                'info' => PEAR_LOG_INFO,
+                'debug' => PEAR_LOG_DEBUG);
+            if (isset($levels[$err['level']])) {
+                $level = $levels[$err['level']];
+            } else {
+                $level = PEAR_LOG_INFO;
+            }
+            $logger->log($err['message'], $level, $err);
+        } else { // support non-standard logs
+            call_user_func($logger, $err);
+        }
+    }
+
+    
+    /**
+     * Pop an error off of the error stack
+     * 
+     * @return false|array
+     * @since 0.4alpha it is no longer possible to specify a specific error
+     * level to return - the last error pushed will be returned, instead
+     */
+    function pop()
+    {
+        $err = @array_shift($this->_errors);
+        if (!is_null($err)) {
+            @array_pop($this->_errorsByLevel[$err['level']]);
+            if (!count($this->_errorsByLevel[$err['level']])) {
+                unset($this->_errorsByLevel[$err['level']]);
+            }
+        }
+        return $err;
+    }
+
+    /**
+     * Pop an error off of the error stack, static method
+     *
+     * @param string package name
+     * @return boolean
+     * @since PEAR1.5.0a1
+     */
+    function staticPop($package)
+    {
+        if ($package) {
+            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+                return false;
+            }
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
+        }
+    }
+
+    /**
+     * Determine whether there are any errors on the stack
+     * @param string|array Level name.  Use to determine if any errors
+     * of level (string), or levels (array) have been pushed
+     * @return boolean
+     */
+    function hasErrors($level = false)
+    {
+        if ($level) {
+            return isset($this->_errorsByLevel[$level]);
+        }
+        return count($this->_errors);
+    }
+    
+    /**
+     * Retrieve all errors since last purge
+     * 
+     * @param boolean set in order to empty the error stack
+     * @param string level name, to return only errors of a particular severity
+     * @return array
+     */
+    function getErrors($purge = false, $level = false)
+    {
+        if (!$purge) {
+            if ($level) {
+                if (!isset($this->_errorsByLevel[$level])) {
+                    return array();
+                } else {
+                    return $this->_errorsByLevel[$level];
+                }
+            } else {
+                return $this->_errors;
+            }
+        }
+        if ($level) {
+            $ret = $this->_errorsByLevel[$level];
+            foreach ($this->_errorsByLevel[$level] as $i => $unused) {
+                // entries are references to the $_errors array
+                $this->_errorsByLevel[$level][$i] = false;
+            }
+            // array_filter removes all entries === false
+            $this->_errors = array_filter($this->_errors);
+            unset($this->_errorsByLevel[$level]);
+            return $ret;
+        }
+        $ret = $this->_errors;
+        $this->_errors = array();
+        $this->_errorsByLevel = array();
+        return $ret;
+    }
+    
+    /**
+     * Determine whether there are any errors on a single error stack, or on any error stack
+     *
+     * The optional parameter can be used to test the existence of any errors without the need of
+     * singleton instantiation
+     * @param string|false Package name to check for errors
+     * @param string Level name to check for a particular severity
+     * @return boolean
+     * @static
+     */
+    function staticHasErrors($package = false, $level = false)
+    {
+        if ($package) {
+            if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
+                return false;
+            }
+            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
+        }
+        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
+            if ($obj->hasErrors($level)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Get a list of all errors since last purge, organized by package
+     * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
+     * @param boolean $purge Set to purge the error stack of existing errors
+     * @param string  $level Set to a level name in order to retrieve only errors of a particular level
+     * @param boolean $merge Set to return a flat array, not organized by package
+     * @param array   $sortfunc Function used to sort a merged array - default
+     *        sorts by time, and should be good for most cases
+     * @static
+     * @return array 
+     */
+    function staticGetErrors($purge = false, $level = false, $merge = false,
+                             $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
+    {
+        $ret = array();
+        if (!is_callable($sortfunc)) {
+            $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
+        }
+        foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
+            $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
+            if ($test) {
+                if ($merge) {
+                    $ret = array_merge($ret, $test);
+                } else {
+                    $ret[$package] = $test;
+                }
+            }
+        }
+        if ($merge) {
+            usort($ret, $sortfunc);
+        }
+        return $ret;
+    }
+    
+    /**
+     * Error sorting function, sorts by time
+     * @access private
+     */
+    function _sortErrors($a, $b)
+    {
+        if ($a['time'] == $b['time']) {
+            return 0;
+        }
+        if ($a['time'] < $b['time']) {
+            return 1;
+        }
+        return -1;
+    }
+
+    /**
+     * Standard file/line number/function/class context callback
+     *
+     * This function uses a backtrace generated from {@link debug_backtrace()}
+     * and so will not work at all in PHP < 4.3.0.  The frame should
+     * reference the frame that contains the source of the error.
+     * @return array|false either array('file' => file, 'line' => line,
+     *         'function' => function name, 'class' => class name) or
+     *         if this doesn't work, then false
+     * @param unused
+     * @param integer backtrace frame.
+     * @param array Results of debug_backtrace()
+     * @static
+     */
+    function getFileLine($code, $params, $backtrace = null)
+    {
+        if ($backtrace === null) {
+            return false;
+        }
+        $frame = 0;
+        $functionframe = 1;
+        if (!isset($backtrace[1])) {
+            $functionframe = 0;
+        } else {
+            while (isset($backtrace[$functionframe]['function']) &&
+                  $backtrace[$functionframe]['function'] == 'eval' &&
+                  isset($backtrace[$functionframe + 1])) {
+                $functionframe++;
+            }
+        }
+        if (isset($backtrace[$frame])) {
+            if (!isset($backtrace[$frame]['file'])) {
+                $frame++;
+            }
+            $funcbacktrace = $backtrace[$functionframe];
+            $filebacktrace = $backtrace[$frame];
+            $ret = array('file' => $filebacktrace['file'],
+                         'line' => $filebacktrace['line']);
+            // rearrange for eval'd code or create function errors
+            if (strpos($filebacktrace['file'], '(') && 
+            	  preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
+                  $matches)) {
+                $ret['file'] = $matches[1];
+                $ret['line'] = $matches[2] + 0;
+            }
+            if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
+                if ($funcbacktrace['function'] != 'eval') {
+                    if ($funcbacktrace['function'] == '__lambda_func') {
+                        $ret['function'] = 'create_function() code';
+                    } else {
+                        $ret['function'] = $funcbacktrace['function'];
+                    }
+                }
+            }
+            if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
+                $ret['class'] = $funcbacktrace['class'];
+            }
+            return $ret;
+        }
+        return false;
+    }
+    
+    /**
+     * Standard error message generation callback
+     * 
+     * This method may also be called by a custom error message generator
+     * to fill in template values from the params array, simply
+     * set the third parameter to the error message template string to use
+     * 
+     * The special variable %__msg% is reserved: use it only to specify
+     * where a message passed in by the user should be placed in the template,
+     * like so:
+     * 
+     * Error message: %msg% - internal error
+     * 
+     * If the message passed like so:
+     * 
+     * <code>
+     * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
+     * </code>
+     * 
+     * The returned error message will be "Error message: server error 500 -
+     * internal error"
+     * @param PEAR_ErrorStack
+     * @param array
+     * @param string|false Pre-generated error message template
+     * @static
+     * @return string
+     */
+    function getErrorMessage(&$stack, $err, $template = false)
+    {
+        if ($template) {
+            $mainmsg = $template;
+        } else {
+            $mainmsg = $stack->getErrorMessageTemplate($err['code']);
+        }
+        $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
+        if (is_array($err['params']) && count($err['params'])) {
+            foreach ($err['params'] as $name => $val) {
+                if (is_array($val)) {
+                    // @ is needed in case $val is a multi-dimensional array
+                    $val = @implode(', ', $val);
+                }
+                if (is_object($val)) {
+                    if (method_exists($val, '__toString')) {
+                        $val = $val->__toString();
+                    } else {
+                        PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
+                            'warning', array('obj' => get_class($val)),
+                            'object %obj% passed into getErrorMessage, but has no __toString() method');
+                        $val = 'Object';
+                    }
+                }
+                $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
+            }
+        }
+        return $mainmsg;
+    }
+    
+    /**
+     * Standard Error Message Template generator from code
+     * @return string
+     */
+    function getErrorMessageTemplate($code)
+    {
+        if (!isset($this->_errorMsgs[$code])) {
+            return '%__msg%';
+        }
+        return $this->_errorMsgs[$code];
+    }
+    
+    /**
+     * Set the Error Message Template array
+     * 
+     * The array format must be:
+     * <pre>
+     * array(error code => 'message template',...)
+     * </pre>
+     * 
+     * Error message parameters passed into {@link push()} will be used as input
+     * for the error message.  If the template is 'message %foo% was %bar%', and the
+     * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
+     * be 'message one was six'
+     * @return string
+     */
+    function setErrorMessageTemplate($template)
+    {
+        $this->_errorMsgs = $template;
+    }
+    
+    
+    /**
+     * emulate PEAR::raiseError()
+     * 
+     * @return PEAR_Error
+     */
+    function raiseError()
+    {
+        require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
+        $args = func_get_args();
+        return call_user_func_array(array('PEAR', 'raiseError'), $args);
+    }
+}
+$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
+$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
+?>
+<?php
+/**
+ * PEAR_Frontend, the singleton-based frontend for user input/output
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Frontend.php,v 1.18 2009/02/24 23:38:22 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * Include error handling
+ */
+//require_once 'PEAR.php';
+
+/**
+ * Which user interface class is being used.
+ * @var string class name
+ */
+$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
+
+/**
+ * Instance of $_PEAR_Command_uiclass.
+ * @var object
+ */
+$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
+
+/**
+ * Singleton-based frontend for PEAR user input/output
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Frontend extends PEAR
+{
+    /**
+     * Retrieve the frontend object
+     * @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
+     * @static
+     */
+    function &singleton($type = null)
+    {
+        if ($type === null) {
+            if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
+                $a = false;
+                return $a;
+            }
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+
+        $a = PEAR_Frontend::setFrontendClass($type);
+        return $a;
+    }
+
+    /**
+     * Set the frontend class that will be used by calls to {@link singleton()}
+     *
+     * Frontends are expected to conform to the PEAR naming standard of
+     * _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
+     * @param string $uiclass full class name
+     * @return PEAR_Frontend
+     * @static
+     */
+    function &setFrontendClass($uiclass)
+    {
+        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
+              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+
+        if (!class_exists($uiclass)) {
+            $file = 'phar://install-pear-nozlib.phar/' . str_replace('_', '/', $uiclass) . '.php';
+            if (PEAR_Frontend::isIncludeable($file)) {
+                include_once $file;
+            }
+        }
+
+        if (class_exists($uiclass)) {
+            $obj = &new $uiclass;
+            // quick test to see if this class implements a few of the most
+            // important frontend methods
+            if (is_a($obj, 'PEAR_Frontend')) {
+                $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
+                $GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
+                return $obj;
+            }
+
+            $err = PEAR::raiseError("not a frontend class: $uiclass");
+            return $err;
+        }
+
+        $err = PEAR::raiseError("no such class: $uiclass");
+        return $err;
+    }
+
+    /**
+     * Set the frontend class that will be used by calls to {@link singleton()}
+     *
+     * Frontends are expected to be a descendant of PEAR_Frontend
+     * @param PEAR_Frontend
+     * @return PEAR_Frontend
+     * @static
+     */
+    function &setFrontendObject($uiobject)
+    {
+        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
+              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], get_class($uiobject))) {
+            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
+        }
+
+        if (!is_a($uiobject, 'PEAR_Frontend')) {
+            $err = PEAR::raiseError('not a valid frontend class: (' .
+                get_class($uiobject) . ')');
+            return $err;
+        }
+
+        $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$uiobject;
+        $GLOBALS['_PEAR_FRONTEND_CLASS'] = get_class($uiobject);
+        return $uiobject;
+    }
+
+    /**
+     * @param string $path relative or absolute include path
+     * @return boolean
+     * @static
+     */
+    function isIncludeable($path)
+    {
+        if (file_exists($path) && is_readable($path)) {
+            return true;
+        }
+
+        $fp = @fopen($path, 'r', true);
+        if ($fp) {
+            fclose($fp);
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @param PEAR_Config
+     */
+    function setConfig(&$config)
+    {
+    }
+
+    /**
+     * This can be overridden to allow session-based temporary file management
+     *
+     * By default, all files are deleted at the end of a session.  The web installer
+     * needs to be able to sustain a list over many sessions in order to support
+     * user interaction with install scripts
+     */
+    function addTempFile($file)
+    {
+        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
+    }
+
+    /**
+     * Log an action
+     *
+     * @param string $msg the message to log
+     * @param boolean $append_crlf
+     * @return boolean true
+     * @abstract
+     */
+    function log($msg, $append_crlf = true)
+    {
+    }
+
+    /**
+     * Run a post-installation script
+     *
+     * @param array $scripts array of post-install scripts
+     * @abstract
+     */
+    function runPostinstallScripts(&$scripts)
+    {
+    }
+
+    /**
+     * Display human-friendly output formatted depending on the
+     * $command parameter.
+     *
+     * This should be able to handle basic output data with no command
+     * @param mixed  $data    data structure containing the information to display
+     * @param string $command command from which this method was called
+     * @abstract
+     */
+    function outputData($data, $command = '_default')
+    {
+    }
+
+    /**
+     * Display a modal form dialog and return the given input
+     *
+     * A frontend that requires multiple requests to retrieve and process
+     * data must take these needs into account, and implement the request
+     * handling code.
+     * @param string $command  command from which this method was called
+     * @param array  $prompts  associative array. keys are the input field names
+     *                         and values are the description
+     * @param array  $types    array of input field types (text, password,
+     *                         etc.) keys have to be the same like in $prompts
+     * @param array  $defaults array of default values. again keys have
+     *                         to be the same like in $prompts.  Do not depend
+     *                         on a default value being set.
+     * @return array input sent by the user
+     * @abstract
+     */
+    function userDialog($command, $prompts, $types = array(), $defaults = array())
+    {
+    }
+}<?php
 /**
  * PEAR_Frontend_CLI
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: CLI.php,v 1.68 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: CLI.php,v 1.76 2009/04/04 00:09:14 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -69727,16 +69314,14 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Frontend.php';
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
 class PEAR_Frontend_CLI extends PEAR_Frontend
 {
-    // {{{ properties
-
     /**
      * What type of user interface this frontend is for.
      * @var string
@@ -69747,13 +69332,9 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
 
     var $params = array();
     var $term = array(
-        'bold' => '',
+        'bold'   => '',
         'normal' => '',
-        );
-
-    // }}}
-
-    // {{{ constructor
+    );
 
     function PEAR_Frontend_CLI()
     {
@@ -69762,60 +69343,26 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
         if (function_exists('posix_isatty') && !posix_isatty(1)) {
             // output is being redirected to a file or through a pipe
         } elseif ($term) {
-            // XXX can use ncurses extension here, if available
             if (preg_match('/^(xterm|vt220|linux)/', $term)) {
-                $this->term['bold'] = sprintf("%c%c%c%c", 27, 91, 49, 109);
-                $this->term['normal']=sprintf("%c%c%c", 27, 91, 109);
+                $this->term['bold']   = sprintf("%c%c%c%c", 27, 91, 49, 109);
+                $this->term['normal'] = sprintf("%c%c%c", 27, 91, 109);
             } elseif (preg_match('/^vt100/', $term)) {
-                $this->term['bold'] = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
-                $this->term['normal']=sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
+                $this->term['bold']   = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
+                $this->term['normal'] = sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
             }
         } elseif (OS_WINDOWS) {
             // XXX add ANSI codes here
         }
     }
 
-    // }}}
-
-    // {{{ displayLine(text)
-
-    function displayLine($text)
-    {
-        trigger_error("PEAR_Frontend_CLI::displayLine deprecated", E_USER_ERROR);
-    }
-
-    function _displayLine($text)
-    {
-        print "$this->lp$text\n";
-    }
-
-    // }}}
-    // {{{ display(text)
-
-    function display($text)
-    {
-        trigger_error("PEAR_Frontend_CLI::display deprecated", E_USER_ERROR);
-    }
-
-    function _display($text)
-    {
-        print $text;
-    }
-
-    // }}}
-    // {{{ displayError(eobj)
-
     /**
      * @param object PEAR_Error object
      */
-    function displayError($eobj)
+    function displayError($e)
     {
-        return $this->_displayLine($eobj->getMessage());
+        return $this->_displayLine($e->getMessage());
     }
 
-    // }}}
-    // {{{ displayFatalError(eobj)
-
     /**
      * @param object PEAR_Error object
      */
@@ -69827,54 +69374,34 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
             if ($config->get('verbose') > 5) {
                 if (function_exists('debug_print_backtrace')) {
                     debug_print_backtrace();
-                } elseif (function_exists('debug_backtrace')) {
-                    $trace = debug_backtrace();
-                    $raised = false;
-                    foreach ($trace as $i => $frame) {
-                        if (!$raised) {
-                            if (isset($frame['class']) && strtolower($frame['class']) ==
-                                  'pear' && strtolower($frame['function']) == 'raiseerror') {
-                                $raised = true;
-                            } else {
-                                continue;
-                            }
-                        }
-                        if (!isset($frame['class'])) {
-                            $frame['class'] = '';
-                        }
-                        if (!isset($frame['type'])) {
-                            $frame['type'] = '';
-                        }
-                        if (!isset($frame['function'])) {
-                            $frame['function'] = '';
-                        }
-                        if (!isset($frame['line'])) {
-                            $frame['line'] = '';
+                    exit(1);
+                }
+
+                $raised = false;
+                foreach (debug_backtrace() as $i => $frame) {
+                    if (!$raised) {
+                        if (isset($frame['class'])
+                            && strtolower($frame['class']) == 'pear'
+                            && strtolower($frame['function']) == 'raiseerror'
+                        ) {
+                            $raised = true;
+                        } else {
+                            continue;
                         }
-                        $this->_displayLine("#$i: $frame[class]$frame[type]$frame[function] $frame[line]");
                     }
+
+                    $frame['class']    = !isset($frame['class'])    ? '' : $frame['class'];
+                    $frame['type']     = !isset($frame['type'])     ? '' : $frame['type'];
+                    $frame['function'] = !isset($frame['function']) ? '' : $frame['function'];
+                    $frame['line']     = !isset($frame['line'])     ? '' : $frame['line'];
+                    $this->_displayLine("#$i: $frame[class]$frame[type]$frame[function] $frame[line]");
                 }
             }
         }
-        exit(1);
-    }
-
-    // }}}
-    // {{{ displayHeading(title)
-
-    function displayHeading($title)
-    {
-        trigger_error("PEAR_Frontend_CLI::displayHeading deprecated", E_USER_ERROR);
-    }
 
-    function _displayHeading($title)
-    {
-        print $this->lp.$this->bold($title)."\n";
-        print $this->lp.str_repeat("=", strlen($title))."\n";
+        exit(1);
     }
 
-    // }}}
-
     /**
      * Instruct the runInstallScript method to skip a paramgroup that matches the
      * id value passed in.
@@ -69906,94 +69433,105 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
         $this->_skipSections = array();
         if (!is_array($xml) || !isset($xml['paramgroup'])) {
             $script->run(array(), '_default');
-        } else {
-            $completedPhases = array();
-            if (!isset($xml['paramgroup'][0])) {
-                $xml['paramgroup'] = array($xml['paramgroup']);
+            return;
+        }
+
+        $completedPhases = array();
+        if (!isset($xml['paramgroup'][0])) {
+            $xml['paramgroup'] = array($xml['paramgroup']);
+        }
+
+        foreach ($xml['paramgroup'] as $group) {
+            if (isset($this->_skipSections[$group['id']])) {
+                // the post-install script chose to skip this section dynamically
+                continue;
             }
-            foreach ($xml['paramgroup'] as $group) {
-                if (isset($this->_skipSections[$group['id']])) {
-                    // the post-install script chose to skip this section dynamically
+
+            if (isset($group['name'])) {
+                $paramname = explode('::', $group['name']);
+                if ($lastgroup['id'] != $paramname[0]) {
                     continue;
                 }
-                if (isset($group['name'])) {
-                    $paramname = explode('::', $group['name']);
-                    if ($lastgroup['id'] != $paramname[0]) {
-                        continue;
-                    }
-                    $group['name'] = $paramname[1];
-                    if (isset($answers)) {
-                        if (isset($answers[$group['name']])) {
-                            switch ($group['conditiontype']) {
-                                case '=' :
-                                    if ($answers[$group['name']] != $group['value']) {
-                                        continue 2;
-                                    }
-                                break;
-                                case '!=' :
-                                    if ($answers[$group['name']] == $group['value']) {
-                                        continue 2;
-                                    }
-                                break;
-                                case 'preg_match' :
-                                    if (!@preg_match('/' . $group['value'] . '/',
-                                          $answers[$group['name']])) {
-                                        continue 2;
-                                    }
-                                break;
-                                default :
-                                return;
+
+                $group['name'] = $paramname[1];
+                if (!isset($answers)) {
+                    return;
+                }
+
+                if (isset($answers[$group['name']])) {
+                    switch ($group['conditiontype']) {
+                        case '=' :
+                            if ($answers[$group['name']] != $group['value']) {
+                                continue 2;
                             }
-                        }
-                    } else {
+                        break;
+                        case '!=' :
+                            if ($answers[$group['name']] == $group['value']) {
+                                continue 2;
+                            }
+                        break;
+                        case 'preg_match' :
+                            if (!@preg_match('/' . $group['value'] . '/',
+                                  $answers[$group['name']])) {
+                                continue 2;
+                            }
+                        break;
+                        default :
                         return;
                     }
                 }
-                $lastgroup = $group;
-                if (isset($group['instructions'])) {
-                    $this->_display($group['instructions']);
-                }
-                if (!isset($group['param'][0])) {
-                    $group['param'] = array($group['param']);
-                }
-                if (isset($group['param'])) {
-                    if (method_exists($script, 'postProcessPrompts')) {
-                        $prompts = $script->postProcessPrompts($group['param'], $group['id']);
-                        if (!is_array($prompts) || count($prompts) != count($group['param'])) {
-                            $this->outputData('postinstall', 'Error: post-install script did not ' .
-                                'return proper post-processed prompts');
-                            $prompts = $group['param'];
-                        } else {
-                            foreach ($prompts as $i => $var) {
-                                if (!is_array($var) || !isset($var['prompt']) ||
-                                      !isset($var['name']) ||
-                                      ($var['name'] != $group['param'][$i]['name']) ||
-                                      ($var['type'] != $group['param'][$i]['type'])) {
-                                    $this->outputData('postinstall', 'Error: post-install script ' .
-                                        'modified the variables or prompts, severe security risk. ' .
-                                        'Will instead use the defaults from the package.xml');
-                                    $prompts = $group['param'];
-                                }
+            }
+
+            $lastgroup = $group;
+            if (isset($group['instructions'])) {
+                $this->_display($group['instructions']);
+            }
+
+            if (!isset($group['param'][0])) {
+                $group['param'] = array($group['param']);
+            }
+
+            if (isset($group['param'])) {
+                if (method_exists($script, 'postProcessPrompts')) {
+                    $prompts = $script->postProcessPrompts($group['param'], $group['id']);
+                    if (!is_array($prompts) || count($prompts) != count($group['param'])) {
+                        $this->outputData('postinstall', 'Error: post-install script did not ' .
+                            'return proper post-processed prompts');
+                        $prompts = $group['param'];
+                    } else {
+                        foreach ($prompts as $i => $var) {
+                            if (!is_array($var) || !isset($var['prompt']) ||
+                                  !isset($var['name']) ||
+                                  ($var['name'] != $group['param'][$i]['name']) ||
+                                  ($var['type'] != $group['param'][$i]['type'])
+                            ) {
+                                $this->outputData('postinstall', 'Error: post-install script ' .
+                                    'modified the variables or prompts, severe security risk. ' .
+                                    'Will instead use the defaults from the package.xml');
+                                $prompts = $group['param'];
                             }
                         }
-                        $answers = $this->confirmDialog($prompts);
-                    } else {
-                        $answers = $this->confirmDialog($group['param']);
-                    }
-                }
-                if ((isset($answers) && $answers) || !isset($group['param'])) {
-                    if (!isset($answers)) {
-                        $answers = array();
-                    }
-                    array_unshift($completedPhases, $group['id']);
-                    if (!$script->run($answers, $group['id'])) {
-                        $script->run($completedPhases, '_undoOnError');
-                        return;
                     }
+
+                    $answers = $this->confirmDialog($prompts);
                 } else {
+                    $answers = $this->confirmDialog($group['param']);
+                }
+            }
+
+            if ((isset($answers) && $answers) || !isset($group['param'])) {
+                if (!isset($answers)) {
+                    $answers = array();
+                }
+
+                array_unshift($completedPhases, $group['id']);
+                if (!$script->run($answers, $group['id'])) {
                     $script->run($completedPhases, '_undoOnError');
                     return;
                 }
+            } else {
+                $script->run($completedPhases, '_undoOnError');
+                return;
             }
         }
     }
@@ -70006,17 +69544,13 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
      */
     function confirmDialog($params)
     {
-        $answers = array();
-        $prompts = $types = array();
+        $answers = $prompts = $types = array();
         foreach ($params as $param) {
             $prompts[$param['name']] = $param['prompt'];
-            $types[$param['name']] = $param['type'];
-            if (isset($param['default'])) {
-                $answers[$param['name']] = $param['default'];
-            } else {
-                $answers[$param['name']] = '';
-            }
+            $types[$param['name']]   = $param['type'];
+            $answers[$param['name']] = isset($param['default']) ? $param['default'] : '';
         }
+
         $tried = false;
         do {
             if ($tried) {
@@ -70028,100 +69562,89 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     $i++;
                 }
             }
+
             $answers = $this->userDialog('', $prompts, $types, $answers);
-            $tried = true;
+            $tried   = true;
         } while (is_array($answers) && count(array_filter($answers)) != count($prompts));
+
         return $answers;
     }
-    // {{{ userDialog(prompt, [type], [default])
 
-    function userDialog($command, $prompts, $types = array(), $defaults = array(),
-                        $screensize = 20)
+    function userDialog($command, $prompts, $types = array(), $defaults = array(), $screensize = 20)
     {
         if (!is_array($prompts)) {
             return array();
         }
+
         $testprompts = array_keys($prompts);
-        $result = $defaults;
-        if (!defined('STDIN')) {
-            $fp = fopen('php://stdin', 'r');
-        } else {
-            $fp = STDIN;
-        }
+        $result      = $defaults;
+
         reset($prompts);
-        if (count($prompts) == 1 && $types[key($prompts)] == 'yesno') {
+        if (count($prompts) === 1) {
             foreach ($prompts as $key => $prompt) {
-                $type = $types[$key];
+                $type    = $types[$key];
                 $default = @$defaults[$key];
                 print "$prompt ";
                 if ($default) {
                     print "[$default] ";
                 }
                 print ": ";
-                if (version_compare(phpversion(), '5.0.0', '<')) {
-                    $line = fgets($fp, 2048);
-                } else {
-                    if (!defined('STDIN')) {
-                        define('STDIN', fopen('php://stdin', 'r'));
-                    }
-                    $line = fgets(STDIN, 2048);
-                }
-                if ($default && trim($line) == "") {
-                    $result[$key] = $default;
-                } else {
-                    $result[$key] = trim($line);
-                }
+
+                $line         = fgets(STDIN, 2048);
+                $result[$key] =  ($default && trim($line) == '') ? $default : trim($line);
             }
+
             return $result;
         }
+
+        $first_run = true;
         while (true) {
             $descLength = max(array_map('strlen', $prompts));
             $descFormat = "%-{$descLength}s";
-            $last = count($prompts);
+            $last       = count($prompts);
 
             $i = 0;
             foreach ($prompts as $n => $var) {
-                printf("%2d. $descFormat : %s\n", ++$i, $prompts[$n], isset($result[$n]) ?
-                    $result[$n] : null);
+                $res = isset($result[$n]) ? $result[$n] : null;
+                printf("%2d. $descFormat : %s\n", ++$i, $prompts[$n], $res);
             }
-
             print "\n1-$last, 'all', 'abort', or Enter to continue: ";
-            $tmp = trim(fgets($fp, 1024));
+
+            $tmp = trim(fgets(STDIN, 1024));
             if (empty($tmp)) {
                 break;
             }
+
             if ($tmp == 'abort') {
                 return false;
             }
+
             if (isset($testprompts[(int)$tmp - 1])) {
-                $var = $testprompts[(int)$tmp - 1];
-                $desc = $prompts[$var];
+                $var     = $testprompts[(int)$tmp - 1];
+                $desc    = $prompts[$var];
                 $current = @$result[$var];
                 print "$desc [$current] : ";
-                $tmp = trim(fgets($fp, 1024));
-                if (trim($tmp) !== '') {
-                    $result[$var] = trim($tmp);
+                $tmp = trim(fgets(STDIN, 1024));
+                if ($tmp !== '') {
+                    $result[$var] = $tmp;
                 }
             } elseif ($tmp == 'all') {
                 foreach ($prompts as $var => $desc) {
                     $current = $result[$var];
                     print "$desc [$current] : ";
-                    $tmp = trim(fgets($fp, 1024));
+                    $tmp = trim(fgets(STDIN, 1024));
                     if (trim($tmp) !== '') {
                         $result[$var] = trim($tmp);
                     }
                 }
             }
+
+            $first_run = false;
         }
-        if (!defined('STDIN')) {
-            fclose($fp);
-        }
+
         return $result;
     }
 
-    // }}}
-    // {{{ userConfirm(prompt, [default])
-
     function userConfirm($prompt, $default = 'yes')
     {
         trigger_error("PEAR_Frontend_CLI::userConfirm not yet converted", E_USER_ERROR);
@@ -70147,48 +69670,200 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
         return false;
     }
 
-    // }}}
-    // {{{ startTable([params])
+    function outputData($data, $command = '_default')
+    {
+        switch ($command) {
+            case 'channel-info':
+                foreach ($data as $type => $section) {
+                    if ($type == 'main') {
+                        $section['data'] = array_values($section['data']);
+                    }
+
+                    $this->outputData($section);
+                }
+                break;
+            case 'install':
+            case 'upgrade':
+            case 'upgrade-all':
+                if (isset($data['release_warnings'])) {
+                    $this->_displayLine('');
+                    $this->_startTable(array(
+                        'border' => false,
+                        'caption' => 'Release Warnings'
+                    ));
+                    $this->_tableRow(array($data['release_warnings']), null, array(1 => array('wrap' => 55)));
+                    $this->_endTable();
+                    $this->_displayLine('');
+                }
 
-    function startTable($params = array())
+                $this->_displayLine($data['data']);
+                break;
+            case 'search':
+                $this->_startTable($data);
+                if (isset($data['headline']) && is_array($data['headline'])) {
+                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
+                }
+
+                foreach($data['data'] as $category) {
+                    foreach($category as $pkg) {
+                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    }
+                }
+
+                $this->_endTable();
+                break;
+            case 'list-all':
+                if (!isset($data['data'])) {
+                      $this->_displayLine('No packages in channel');
+                      break;
+                }
+
+                $this->_startTable($data);
+                if (isset($data['headline']) && is_array($data['headline'])) {
+                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
+                }
+
+                foreach($data['data'] as $category) {
+                    foreach($category as $pkg) {
+                        unset($pkg[4], $pkg[5]);
+                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
+                    }
+                }
+
+                $this->_endTable();
+                break;
+            case 'config-show':
+                $data['border'] = false;
+                $opts = array(
+                    0 => array('wrap' => 30),
+                    1 => array('wrap' => 20),
+                    2 => array('wrap' => 35)
+                );
+
+                $this->_startTable($data);
+                if (isset($data['headline']) && is_array($data['headline'])) {
+                    $this->_tableRow($data['headline'], array('bold' => true), $opts);
+                }
+
+                foreach ($data['data'] as $group) {
+                    foreach ($group as $value) {
+                        if ($value[2] == '') {
+                            $value[2] = "<not set>";
+                        }
+
+                        $this->_tableRow($value, null, $opts);
+                    }
+                }
+
+                $this->_endTable();
+                break;
+            case 'remote-info':
+                $d = $data;
+                $data = array(
+                    'caption' => 'Package details:',
+                    'border'  => false,
+                    'data'    => array(
+                        array("Latest",      $data['stable']),
+                        array("Installed",   $data['installed']),
+                        array("Package",     $data['name']),
+                        array("License",     $data['license']),
+                        array("Category",    $data['category']),
+                        array("Summary",     $data['summary']),
+                        array("Description", $data['description']),
+                    ),
+                );
+
+                if (isset($d['deprecated']) && $d['deprecated']) {
+                    $conf = &PEAR_Config::singleton();
+                    $reg = $conf->getRegistry();
+                    $name = $reg->parsedPackageNameToString($d['deprecated'], true);
+                    $data['data'][] = array('Deprecated! use', $name);
+                }
+            default: {
+                if (is_array($data)) {
+                    $this->_startTable($data);
+                    $count = count($data['data'][0]);
+                    if ($count == 2) {
+                        $opts = array(0 => array('wrap' => 25),
+                                      1 => array('wrap' => 48)
+                        );
+                    } elseif ($count == 3) {
+                        $opts = array(0 => array('wrap' => 30),
+                                      1 => array('wrap' => 20),
+                                      2 => array('wrap' => 35)
+                        );
+                    } else {
+                        $opts = null;
+                    }
+                    if (isset($data['headline']) && is_array($data['headline'])) {
+                        $this->_tableRow($data['headline'],
+                                         array('bold' => true),
+                                         $opts);
+                    }
+
+                    foreach($data['data'] as $row) {
+                        $this->_tableRow($row, null, $opts);
+                    }
+                    $this->_endTable();
+                } else {
+                    $this->_displayLine($data);
+                }
+            }
+        }
+    }
+
+    function log($text, $append_crlf = true)
     {
-        trigger_error("PEAR_Frontend_CLI::startTable deprecated", E_USER_ERROR);
+        if ($append_crlf) {
+            return $this->_displayLine($text);
+        }
+
+        return $this->_display($text);
     }
 
-    function _startTable($params = array())
+    function bold($text)
     {
-        $params['table_data'] = array();
-        $params['widest'] = array();  // indexed by column
-        $params['highest'] = array(); // indexed by row
-        $params['ncols'] = 0;
-        $this->params = $params;
+        if (empty($this->term['bold'])) {
+            return strtoupper($text);
+        }
+
+        return $this->term['bold'] . $text . $this->term['normal'];
     }
 
-    // }}}
-    // {{{ tableRow(columns, [rowparams], [colparams])
+    function _displayHeading($title)
+    {
+        print $this->lp.$this->bold($title)."\n";
+        print $this->lp.str_repeat("=", strlen($title))."\n";
+    }
 
-    function tableRow($columns, $rowparams = array(), $colparams = array())
+    function _startTable($params = array())
     {
-        trigger_error("PEAR_Frontend_CLI::tableRow deprecated", E_USER_ERROR);
+        $params['table_data'] = array();
+        $params['widest']     = array();  // indexed by column
+        $params['highest']    = array(); // indexed by row
+        $params['ncols']      = 0;
+        $this->params         = $params;
     }
 
     function _tableRow($columns, $rowparams = array(), $colparams = array())
     {
         $highest = 1;
-        for ($i = 0; $i < sizeof($columns); $i++) {
+        for ($i = 0; $i < count($columns); $i++) {
             $col = &$columns[$i];
             if (isset($colparams[$i]) && !empty($colparams[$i]['wrap'])) {
-                $col = wordwrap($col, $colparams[$i]['wrap'], "\n", 0);
+                $col = wordwrap($col, $colparams[$i]['wrap']);
             }
+
             if (strpos($col, "\n") !== false) {
                 $multiline = explode("\n", $col);
                 $w = 0;
                 foreach ($multiline as $n => $line) {
-                    if (strlen($line) > $w) {
-                        $w = strlen($line);
+                    $len = strlen($line);
+                    if ($len > $w) {
+                        $w = $len;
                     }
                 }
-                $lines = sizeof($multiline);
+                $lines = count($multiline);
             } else {
                 $w = strlen($col);
             }
@@ -70200,6 +69875,7 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
             } else {
                 $this->params['widest'][$i] = $w;
             }
+
             $tmp = count_chars($columns[$i], 1);
             // handle unix, mac and windows formats
             $lines = (isset($tmp[10]) ? $tmp[10] : (isset($tmp[13]) ? $tmp[13] : 0)) + 1;
@@ -70207,35 +69883,31 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                 $highest = $lines;
             }
         }
-        if (sizeof($columns) > $this->params['ncols']) {
-            $this->params['ncols'] = sizeof($columns);
+
+        if (count($columns) > $this->params['ncols']) {
+            $this->params['ncols'] = count($columns);
         }
+
         $new_row = array(
-            'data' => $columns,
-            'height' => $highest,
+            'data'      => $columns,
+            'height'    => $highest,
             'rowparams' => $rowparams,
             'colparams' => $colparams,
-            );
+        );
         $this->params['table_data'][] = $new_row;
     }
 
-    // }}}
-    // {{{ endTable()
-
-    function endTable()
-    {
-        trigger_error("PEAR_Frontend_CLI::endTable deprecated", E_USER_ERROR);
-    }
-
     function _endTable()
     {
         extract($this->params);
         if (!empty($caption)) {
             $this->_displayHeading($caption);
         }
-        if (count($table_data) == 0) {
+
+        if (count($table_data) === 0) {
             return;
         }
+
         if (!isset($width)) {
             $width = $widest;
         } else {
@@ -70245,56 +69917,63 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                 }
             }
         }
+
         $border = false;
         if (empty($border)) {
-            $cellstart = '';
-            $cellend = ' ';
-            $rowend = '';
-            $padrowend = false;
+            $cellstart  = '';
+            $cellend    = ' ';
+            $rowend     = '';
+            $padrowend  = false;
             $borderline = '';
         } else {
-            $cellstart = '| ';
-            $cellend = ' ';
-            $rowend = '|';
-            $padrowend = true;
+            $cellstart  = '| ';
+            $cellend    = ' ';
+            $rowend     = '|';
+            $padrowend  = true;
             $borderline = '+';
             foreach ($width as $w) {
                 $borderline .= str_repeat('-', $w + strlen($cellstart) + strlen($cellend) - 1);
                 $borderline .= '+';
             }
         }
+
         if ($borderline) {
             $this->_displayLine($borderline);
         }
-        for ($i = 0; $i < sizeof($table_data); $i++) {
+
+        for ($i = 0; $i < count($table_data); $i++) {
             extract($table_data[$i]);
             if (!is_array($rowparams)) {
                 $rowparams = array();
             }
+
             if (!is_array($colparams)) {
                 $colparams = array();
             }
+
             $rowlines = array();
             if ($height > 1) {
-                for ($c = 0; $c < sizeof($data); $c++) {
+                for ($c = 0; $c < count($data); $c++) {
                     $rowlines[$c] = preg_split('/(\r?\n|\r)/', $data[$c]);
-                    if (sizeof($rowlines[$c]) < $height) {
+                    if (count($rowlines[$c]) < $height) {
                         $rowlines[$c] = array_pad($rowlines[$c], $height, '');
                     }
                 }
             } else {
-                for ($c = 0; $c < sizeof($data); $c++) {
+                for ($c = 0; $c < count($data); $c++) {
                     $rowlines[$c] = array($data[$c]);
                 }
             }
+
             for ($r = 0; $r < $height; $r++) {
                 $rowtext = '';
-                for ($c = 0; $c < sizeof($data); $c++) {
+                for ($c = 0; $c < count($data); $c++) {
                     if (isset($colparams[$c])) {
                         $attribs = array_merge($rowparams, $colparams);
                     } else {
                         $attribs = $rowparams;
                     }
+
                     $w = isset($width[$c]) ? $width[$c] : 0;
                     //$cell = $data[$c];
                     $cell = $rowlines[$c][$r];
@@ -70302,9 +69981,11 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
                     if ($l > $w) {
                         $cell = substr($cell, 0, $w);
                     }
+
                     if (isset($attribs['bold'])) {
                         $cell = $this->bold($cell);
                     }
+
                     if ($l < $w) {
                         // not using str_pad here because we may
                         // add bold escape characters to $cell
@@ -70313,202 +69994,45 @@ class PEAR_Frontend_CLI extends PEAR_Frontend
 
                     $rowtext .= $cellstart . $cell . $cellend;
                 }
+
                 if (!$border) {
                     $rowtext = rtrim($rowtext);
                 }
+
                 $rowtext .= $rowend;
                 $this->_displayLine($rowtext);
             }
         }
+
         if ($borderline) {
             $this->_displayLine($borderline);
         }
     }
 
-    // }}}
-    // {{{ outputData()
-
-    function outputData($data, $command = '_default')
-    {
-        switch ($command) {
-            case 'channel-info':
-                foreach ($data as $type => $section) {
-                    if ($type == 'main') {
-                        $section['data'] = array_values($section['data']);
-                    }
-                    $this->outputData($section);
-                }
-                break;
-            case 'install':
-            case 'upgrade':
-            case 'upgrade-all':
-                if (isset($data['release_warnings'])) {
-                    $this->_displayLine('');
-                    $this->_startTable(array(
-                        'border' => false,
-                        'caption' => 'Release Warnings'
-                        ));
-                    $this->_tableRow(array($data['release_warnings']), null, array(1 => array('wrap' => 55)));
-                    $this->_endTable();
-                    $this->_displayLine('');
-                }
-                $this->_displayLine($data['data']);
-                break;
-            case 'search':
-                $this->_startTable($data);
-                if (isset($data['headline']) && is_array($data['headline'])) {
-                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
-                }
-
-                foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
-                    }
-                };
-                $this->_endTable();
-                break;
-            case 'list-all':
-                if (!isset($data['data'])) {
-                      $this->_displayLine('No packages in channel');
-                      break;
-                }
-                $this->_startTable($data);
-                if (isset($data['headline']) && is_array($data['headline'])) {
-                    $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
-                }
-
-                foreach($data['data'] as $category) {
-                    foreach($category as $pkg) {
-                        unset($pkg[4]);
-                        unset($pkg[5]);
-                        $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
-                    }
-                };
-                $this->_endTable();
-                break;
-            case 'config-show':
-                $data['border'] = false;
-                $opts = array(0 => array('wrap' => 30),
-                              1 => array('wrap' => 20),
-                              2 => array('wrap' => 35));
-                $this->_startTable($data);
-                if (isset($data['headline']) && is_array($data['headline'])) {
-                    $this->_tableRow($data['headline'],
-                                     array('bold' => true),
-                                     $opts);
-                }
-                foreach($data['data'] as $group) {
-                    foreach($group as $value) {
-                        if ($value[2] == '') {
-                            $value[2] = "<not set>";
-                        }
-                        $this->_tableRow($value, null, $opts);
-                    }
-                }
-                $this->_endTable();
-                break;
-            case 'remote-info':
-                $d = $data;
-                $data = array(
-                    'caption' => 'Package details:',
-                    'border' => false,
-                    'data' => array(
-                        array("Latest",    $data['stable']),
-                        array("Installed", $data['installed']),
-                        array("Package",   $data['name']),
-                        array("License",   $data['license']),
-                        array("Category",  $data['category']),
-                        array("Summary",   $data['summary']),
-                        array("Description", $data['description']),
-                        ),
-                    );
-                    if (isset($d['deprecated']) && $d['deprecated']) {
-                        $conf = &PEAR_Config::singleton();
-                        $reg = $conf->getRegistry();
-                        $name = $reg->parsedPackageNameToString($d['deprecated'], true);
-                        $data['data'][] = array('Deprecated! use', $name);
-                    }
-            default: {
-                if (is_array($data)) {
-                    $this->_startTable($data);
-                    $count = count($data['data'][0]);
-                    if ($count == 2) {
-                        $opts = array(0 => array('wrap' => 25),
-                                      1 => array('wrap' => 48)
-                        );
-                    } elseif ($count == 3) {
-                        $opts = array(0 => array('wrap' => 30),
-                                      1 => array('wrap' => 20),
-                                      2 => array('wrap' => 35)
-                        );
-                    } else {
-                        $opts = null;
-                    }
-                    if (isset($data['headline']) && is_array($data['headline'])) {
-                        $this->_tableRow($data['headline'],
-                                         array('bold' => true),
-                                         $opts);
-                    }
-                    foreach($data['data'] as $row) {
-                        $this->_tableRow($row, null, $opts);
-                    }
-                    $this->_endTable();
-                } else {
-                    $this->_displayLine($data);
-                }
-            }
-        }
-    }
-
-    // }}}
-    // {{{ log(text)
-
-
-    function log($text, $append_crlf = true)
+    function _displayLine($text)
     {
-        if ($append_crlf) {
-            return $this->_displayLine($text);
-        }
-        return $this->_display($text);
+        print "$this->lp$text\n";
     }
 
-
-    // }}}
-    // {{{ bold($text)
-
-    function bold($text)
+    function _display($text)
     {
-        if (empty($this->term['bold'])) {
-            return strtoupper($text);
-        }
-        return $this->term['bold'] . $text . $this->term['normal'];
+        print $text;
     }
-
-    // }}}
-}
-
-?>
-<?php
+}<?php
 /**
  * PEAR_Installer
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Stig Bakken <ssb at php.net>
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Installer.php,v 1.253 2008/05/13 22:46:07 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Installer.php,v 1.259 2009/04/09 00:55:07 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -70530,9 +70054,9 @@ define('PEAR_INSTALLER_NOBINARY', -240);
  * @author     Tomas V.V. Cox <cox at idecnet.com>
  * @author     Martin Jansen <mj at php.net>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -70626,7 +70150,7 @@ class PEAR_Installer extends PEAR_Downloader
 
     function setConfig(&$config)
     {
-        $this->config = &$config;
+        $this->config    = &$config;
         $this->_registry = &$config->getRegistry();
     }
 
@@ -70655,9 +70179,11 @@ class PEAR_Installer extends PEAR_Downloader
         if (!$channel) {
             $channel = 'pear.php.net';
         }
+
         if (!strlen($package)) {
             return $this->raiseError("No package to uninstall given");
         }
+
         if (strtolower($package) == 'pear' && $channel == 'pear.php.net') {
             // to avoid race conditions, include all possible needed files
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
@@ -70669,25 +70195,31 @@ class PEAR_Installer extends PEAR_Downloader
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/Generator/v1.php';
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/Generator/v2.php';
         }
+
         $filelist = $this->_registry->packageInfo($package, 'filelist', $channel);
         if ($filelist == null) {
             return $this->raiseError("$channel/$package not installed");
         }
+
         $ret = array();
         foreach ($filelist as $file => $props) {
             if (empty($props['installed_as'])) {
                 continue;
             }
+
             $path = $props['installed_as'];
             if ($backup) {
                 $this->addFileOperation('backup', array($path));
                 $ret[] = $path;
             }
+
             $this->addFileOperation('delete', array($path));
         }
+
         if ($backup) {
             return $ret;
         }
+
         return true;
     }
 
@@ -70708,17 +70240,20 @@ class PEAR_Installer extends PEAR_Downloader
         if (!isset($this->_registry)) {
             $this->_registry = &$this->config->getRegistry();
         }
+
         if (isset($atts['platform'])) {
             if (empty($os)) {
                 $os = new OS_Guess();
             }
+
             if (strlen($atts['platform']) && $atts['platform']{0} == '!') {
-                $negate = true;
+                $negate   = true;
                 $platform = substr($atts['platform'], 1);
             } else {
-                $negate = false;
+                $negate    = false;
                 $platform = $atts['platform'];
             }
+
             if ((bool) $os->matchSignature($platform) === $negate) {
                 $this->log(3, "skipped $file (meant for $atts[platform], we are ".$os->getSignature().")");
                 return PEAR_INSTALLER_SKIPPED;
@@ -70750,13 +70285,16 @@ class PEAR_Installer extends PEAR_Downloader
             default:
                 return $this->raiseError("Invalid role `$atts[role]' for file $file");
         }
+
         $save_destdir = $dest_dir;
         if (!empty($atts['baseinstalldir'])) {
             $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
         }
+
         if (dirname($file) != '.' && empty($atts['install-as'])) {
             $dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
         }
+
         if (empty($atts['install-as'])) {
             $dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
         } else {
@@ -70773,15 +70311,15 @@ class PEAR_Installer extends PEAR_Downloader
                                                     array($dest_file, $orig_file));
         $final_dest_file = $installed_as = $dest_file;
         if (isset($this->_options['packagingroot'])) {
-            $installedas_dest_dir = dirname($final_dest_file);
+            $installedas_dest_dir  = dirname($final_dest_file);
             $installedas_dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
-            $final_dest_file = $this->_prependPath($final_dest_file,
-                $this->_options['packagingroot']);
+            $final_dest_file = $this->_prependPath($final_dest_file, $this->_options['packagingroot']);
         } else {
-            $installedas_dest_dir = dirname($final_dest_file);
+            $installedas_dest_dir  = dirname($final_dest_file);
             $installedas_dest_file = $installedas_dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         }
-        $dest_dir = dirname($final_dest_file);
+
+        $dest_dir  = dirname($final_dest_file);
         $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         if (preg_match('~/\.\.(/|\\z)|^\.\./~', str_replace('\\', '/', $dest_file))) {
             return $this->raiseError("SECURITY ERROR: file $file (installed to $dest_file) contains parent directory reference ..", PEAR_INSTALLER_FAILED);
@@ -70796,6 +70334,7 @@ class PEAR_Installer extends PEAR_Downloader
             }
             $this->log(3, "+ mkdir $dest_dir");
         }
+
         // pretty much nothing happens if we are only registering the install
         if (empty($this->_options['register-only'])) {
             if (empty($atts['replacements'])) {
@@ -70803,10 +70342,12 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file $orig_file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 if (!@copy($orig_file, $dest_file)) {
                     return $this->raiseError("failed to write $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $this->log(3, "+ cp $orig_file $dest_file");
                 if (isset($atts['md5sum'])) {
                     $md5sum = md5_file($dest_file);
@@ -70817,13 +70358,16 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $contents = file_get_contents($orig_file);
                 if ($contents === false) {
                     $contents = '';
                 }
+
                 if (isset($atts['md5sum'])) {
                     $md5sum = md5($contents);
                 }
+
                 $subst_from = $subst_to = array();
                 foreach ($atts['replacements'] as $a) {
                     $to = '';
@@ -70868,22 +70412,27 @@ class PEAR_Installer extends PEAR_Downloader
                         $subst_to[] = $to;
                     }
                 }
+
                 $this->log(3, "doing ".sizeof($subst_from)." substitution(s) for $final_dest_file");
                 if (sizeof($subst_from)) {
                     $contents = str_replace($subst_from, $subst_to, $contents);
                 }
+
                 $wp = @fopen($dest_file, "wb");
                 if (!is_resource($wp)) {
                     return $this->raiseError("failed to create $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 if (@fwrite($wp, $contents) === false) {
                     return $this->raiseError("failed writing to $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 fclose($wp);
                 // }}}
             }
+
             // {{{ check the md5
             if (isset($md5sum)) {
                 if (strtolower($md5sum) === strtolower($atts['md5sum'])) {
@@ -70894,13 +70443,14 @@ class PEAR_Installer extends PEAR_Downloader
                         if (file_exists($dest_file)) {
                             unlink($dest_file);
                         }
+
                         if (!isset($options['ignore-errors'])) {
                             return $this->raiseError("bad md5sum for file $final_dest_file",
                                                  PEAR_INSTALLER_FAILED);
-                        } else {
-                            if (!isset($options['soft'])) {
-                                $this->log(0, "warning : bad md5sum for file $final_dest_file");
-                            }
+                        }
+
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "warning : bad md5sum for file $final_dest_file");
                         }
                     } else {
                         if (!isset($options['soft'])) {
@@ -70918,6 +70468,7 @@ class PEAR_Installer extends PEAR_Downloader
                 } else {
                     $mode = 0666 & ~(int)octdec($this->config->get('umask'));
                 }
+
                 if ($atts['role'] != 'src') {
                     $this->addFileOperation("chmod", array($mode, $dest_file));
                     if (!@chmod($dest_file, $mode)) {
@@ -70928,6 +70479,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
             // }}}
+
             if ($atts['role'] == 'src') {
                 rename($dest_file, $final_dest_file);
                 $this->log(2, "renamed source file $dest_file to $final_dest_file");
@@ -70936,12 +70488,14 @@ class PEAR_Installer extends PEAR_Downloader
                     $atts['role'] == 'ext'));
             }
         }
+
         // Store the full path where the file was installed for easy unistall
         if ($atts['role'] != 'script') {
             $loc = $this->config->get($atts['role'] . '_dir');
         } else {
             $loc = $this->config->get('bin_dir');
         }
+
         if ($atts['role'] != 'src') {
             $this->addFileOperation("installed_as", array($file, $installed_as,
                                     $loc,
@@ -70977,29 +70531,34 @@ class PEAR_Installer extends PEAR_Downloader
             return $this->raiseError('Invalid role `' . $atts['attribs']['role'] .
                     "' for file $file");
         }
+
         $role = &PEAR_Installer_Role::factory($pkg, $atts['attribs']['role'], $this->config);
-        $err = $role->setup($this, $pkg, $atts['attribs'], $file);
+        $err  = $role->setup($this, $pkg, $atts['attribs'], $file);
         if (PEAR::isError($err)) {
             return $err;
         }
+
         if (!$role->isInstallable()) {
             return;
         }
+
         $info = $role->processInstallation($pkg, $atts['attribs'], $file, $tmp_path);
         if (PEAR::isError($info)) {
             return $info;
-        } else {
-            list($save_destdir, $dest_dir, $dest_file, $orig_file) = $info;
         }
+
+        list($save_destdir, $dest_dir, $dest_file, $orig_file) = $info;
         if (preg_match('~/\.\.(/|\\z)|^\.\./~', str_replace('\\', '/', $dest_file))) {
             return $this->raiseError("SECURITY ERROR: file $file (installed to $dest_file) contains parent directory reference ..", PEAR_INSTALLER_FAILED);
         }
+
         $final_dest_file = $installed_as = $dest_file;
         if (isset($this->_options['packagingroot'])) {
             $final_dest_file = $this->_prependPath($final_dest_file,
                 $this->_options['packagingroot']);
         }
-        $dest_dir = dirname($final_dest_file);
+
+        $dest_dir  = dirname($final_dest_file);
         $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
         // }}}
 
@@ -71012,6 +70571,7 @@ class PEAR_Installer extends PEAR_Downloader
                 $this->log(3, "+ mkdir $dest_dir");
             }
         }
+
         $attribs = $atts['attribs'];
         unset($atts['attribs']);
         // pretty much nothing happens if we are only registering the install
@@ -71021,10 +70581,12 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file $orig_file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 if (!@copy($orig_file, $dest_file)) {
                     return $this->raiseError("failed to write $dest_file: $php_errormsg",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $this->log(3, "+ cp $orig_file $dest_file");
                 if (isset($attribs['md5sum'])) {
                     $md5sum = md5_file($dest_file);
@@ -71034,16 +70596,18 @@ class PEAR_Installer extends PEAR_Downloader
                     return $this->raiseError("file $orig_file does not exist",
                                              PEAR_INSTALLER_FAILED);
                 }
+
                 $contents = file_get_contents($orig_file);
                 if ($contents === false) {
                     $contents = '';
                 }
+
                 if (isset($attribs['md5sum'])) {
                     $md5sum = md5($contents);
                 }
+
                 foreach ($atts as $tag => $raw) {
-                    $tag = str_replace(array($pkg->getTasksNs() . ':', '-'), 
-                        array('', '_'), $tag);
+                    $tag = str_replace(array($pkg->getTasksNs() . ':', '-'), array('', '_'), $tag);
                     $task = "PEAR_Task_$tag";
                     $task = &new $task($this->config, $this, PEAR_TASK_INSTALL);
                     if (!$task->isScript()) { // scripts are only handled after installation
@@ -71052,40 +70616,53 @@ class PEAR_Installer extends PEAR_Downloader
                         if ($res === false) {
                             continue; // skip this file
                         }
+
                         if (PEAR::isError($res)) {
                             return $res;
                         }
+
                         $contents = $res; // save changes
                     }
+
                     $wp = @fopen($dest_file, "wb");
                     if (!is_resource($wp)) {
                         return $this->raiseError("failed to create $dest_file: $php_errormsg",
                                                  PEAR_INSTALLER_FAILED);
                     }
+
                     if (fwrite($wp, $contents) === false) {
                         return $this->raiseError("failed writing to $dest_file: $php_errormsg",
                                                  PEAR_INSTALLER_FAILED);
                     }
+
                     fclose($wp);
                 }
             }
+
             // {{{ check the md5
             if (isset($md5sum)) {
+                // Make sure the original md5 sum matches with expected
                 if (strtolower($md5sum) === strtolower($attribs['md5sum'])) {
                     $this->log(2, "md5sum ok: $final_dest_file");
+
+                    if (isset($contents)) {
+                        // set md5 sum based on $content in case any tasks were run.
+                        $real_atts['attribs']['md5sum'] = md5($contents);
+                    }
                 } else {
                     if (empty($options['force'])) {
                         // delete the file
                         if (file_exists($dest_file)) {
                             unlink($dest_file);
                         }
+
                         if (!isset($options['ignore-errors'])) {
                             return $this->raiseError("bad md5sum for file $final_dest_file",
                                                      PEAR_INSTALLER_FAILED);
-                        } else {
-                            if (!isset($options['soft'])) {
-                                $this->log(0, "warning : bad md5sum for file $final_dest_file");
-                            }
+                        }
+
+                        if (!isset($options['soft'])) {
+                            $this->log(0, "warning : bad md5sum for file $final_dest_file");
                         }
                     } else {
                         if (!isset($options['soft'])) {
@@ -71096,6 +70673,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $real_atts['attribs']['md5sum'] = md5_file($dest_file);
             }
+
             // }}}
             // {{{ set file permissions
             if (!OS_WINDOWS) {
@@ -71105,6 +70683,7 @@ class PEAR_Installer extends PEAR_Downloader
                 } else {
                     $mode = 0666 & ~(int)octdec($this->config->get('umask'));
                 }
+
                 if ($attribs['role'] != 'src') {
                     $this->addFileOperation("chmod", array($mode, $dest_file));
                     if (!@chmod($dest_file, $mode)) {
@@ -71115,6 +70694,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
             // }}}
+
             if ($attribs['role'] == 'src') {
                 rename($dest_file, $final_dest_file);
                 $this->log(2, "renamed source file $dest_file to $final_dest_file");
@@ -71122,10 +70702,11 @@ class PEAR_Installer extends PEAR_Downloader
                 $this->addFileOperation("rename", array($dest_file, $final_dest_file, $role->isExtension()));
             }
         }
+
         // Store the full path where the file was installed for easy uninstall
         if ($attribs['role'] != 'src') {
             $loc = $this->config->get($role->getLocationConfig(), null, $channel);
-            $this->addFileOperation("installed_as", array($file, $installed_as,
+            $this->addFileOperation('installed_as', array($file, $installed_as,
                                 $loc,
                                 dirname(substr($installed_as, strlen($loc)))));
         }
@@ -71167,6 +70748,7 @@ class PEAR_Installer extends PEAR_Downloader
             return $this->raiseError('Internal Error: $data in addFileOperation'
                 . ' must be an array, was ' . gettype($data));
         }
+
         if ($type == 'chmod') {
             $octmode = decoct($data[0]);
             $this->log(3, "adding to transaction: $type $octmode $data[1]");
@@ -71203,6 +70785,7 @@ class PEAR_Installer extends PEAR_Downloader
                     if (!file_exists($data[0])) {
                         $errors[] = "cannot rename file $data[0], doesn't exist";
                     }
+
                     // check that dest dir. is writable
                     if (!is_writable(dirname($data[1]))) {
                         $errors[] = "permission denied ($type): $data[1]";
@@ -71238,17 +70821,19 @@ class PEAR_Installer extends PEAR_Downloader
 
         }
         // }}}
-        $m = sizeof($errors);
+        $m = count($errors);
         if ($m > 0) {
             foreach ($errors as $error) {
                 if (!isset($this->_options['soft'])) {
                     $this->log(1, $error);
                 }
             }
+
             if (!isset($this->_options['ignore-errors'])) {
                 return false;
             }
         }
+
         $this->_dirtree = array();
         // {{{ really commit the transaction
         foreach ($this->file_operations as $i => $tr) {
@@ -71256,6 +70841,7 @@ class PEAR_Installer extends PEAR_Downloader
                 // support removal of non-existing backups
                 continue;
             }
+
             list($type, $data) = $tr;
             switch ($type) {
                 case 'backup':
@@ -71263,6 +70849,7 @@ class PEAR_Installer extends PEAR_Downloader
                         $this->file_operations[$i] = false;
                         break;
                     }
+
                     if (!@copy($data[0], $data[0] . '.bak')) {
                         $this->log(1, 'Could not copy ' . $data[0] . ' to ' . $data[0] .
                             '.bak ' . $php_errormsg);
@@ -71277,11 +70864,7 @@ class PEAR_Installer extends PEAR_Downloader
                     }
                     break;
                 case 'rename':
-                    if (file_exists($data[1])) {
-                        $test = @unlink($data[1]);
-                    } else {
-                        $test = null;
-                    }
+                    $test = file_exists($data[1]) ? @unlink($data[1]) : null;
                     if (!$test && file_exists($data[1])) {
                         if ($data[2]) {
                             $extra = ', this extension must be installed manually.  Rename to "' .
@@ -71289,14 +70872,17 @@ class PEAR_Installer extends PEAR_Downloader
                         } else {
                             $extra = '';
                         }
+
                         if (!isset($this->_options['soft'])) {
                             $this->log(1, 'Could not delete ' . $data[1] . ', cannot rename ' .
                                 $data[0] . $extra);
                         }
+
                         if (!isset($this->_options['ignore-errors'])) {
                             return false;
                         }
                     }
+
                     // permissions issues with rename - copy() is far superior
                     $perms = @fileperms($data[0]);
                     if (!@copy($data[0], $data[1])) {
@@ -71304,6 +70890,7 @@ class PEAR_Installer extends PEAR_Downloader
                             ' ' . $php_errormsg);
                         return false;
                     }
+
                     // copy over permissions, otherwise they are lost
                     @chmod($data[1], $perms);
                     @unlink($data[0]);
@@ -71315,6 +70902,7 @@ class PEAR_Installer extends PEAR_Downloader
                             decoct($data[0]) . ' ' . $php_errormsg);
                         return false;
                     }
+
                     $octmode = decoct($data[0]);
                     $this->log(3, "+ chmod $octmode $data[1]");
                     break;
@@ -71340,6 +70928,7 @@ class PEAR_Installer extends PEAR_Downloader
                                 break 2; // this directory is not empty and can't be
                                          // deleted
                             }
+
                             closedir($testme);
                             if (!@rmdir($data[0])) {
                                 $this->log(1, 'Could not rmdir ' . $data[0] . ' ' .
@@ -71456,8 +71045,8 @@ class PEAR_Installer extends PEAR_Downloader
     {
         // trickiness: initialize here
         parent::PEAR_Downloader($this->ui, $options, $config);
-        $ret = parent::download($packages);
-        $errors = $this->getErrorMsgs();
+        $ret             = parent::download($packages);
+        $errors          = $this->getErrorMsgs();
         $installpackages = $this->getDownloadedPackages();
         trigger_error("PEAR Warning: PEAR_Installer::download() is deprecated " .
                       "in favor of PEAR_Downloader class", E_USER_WARNING);
@@ -71483,6 +71072,7 @@ class PEAR_Installer extends PEAR_Downloader
             $this->log(3, '+ tmp dir created at ' . $tmpdir);
             // }}}
         }
+
         // Parse xml file -----------------------------------------------
         $pkg = new PEAR_PackageFile($this->config, $this->debug, $tmpdir);
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
@@ -71498,9 +71088,9 @@ class PEAR_Installer extends PEAR_Downloader
                 }
             }
             return $this->raiseError('Installation failed: invalid package file');
-        } else {
-            $descfile = $p->getPackageFile();
         }
+
+        $descfile = $p->getPackageFile();
         return $p;
     }
 
@@ -71562,15 +71152,16 @@ class PEAR_Installer extends PEAR_Downloader
         $this->_options = $options;
         $this->_registry = &$this->config->getRegistry();
         if (is_object($pkgfile)) {
-            $dlpkg = &$pkgfile;
-            $pkg = $pkgfile->getPackageFile();
-            $pkgfile = $pkg->getArchiveFile();
+            $dlpkg    = &$pkgfile;
+            $pkg      = $pkgfile->getPackageFile();
+            $pkgfile  = $pkg->getArchiveFile();
             $descfile = $pkg->getPackageFile();
-            $tmpdir = dirname($descfile);
+            $tmpdir   = dirname($descfile);
         } else {
             $descfile = $pkgfile;
-            $tmpdir = '';
-            if (PEAR::isError($pkg = &$this->_parsePackageXml($descfile, $tmpdir))) {
+            $tmpdir   = '';
+            $pkg      = &$this->_parsePackageXml($descfile, $tmpdir);
+            if (PEAR::isError($pkg)) {
                 return $pkg;
             }
         }
@@ -71588,6 +71179,7 @@ class PEAR_Installer extends PEAR_Downloader
             $regdir = $this->_prependPath(
                 $this->config->get('php_dir', null, 'pear.php.net'),
                 $this->_options['packagingroot']);
+
             $packrootphp_dir = $this->_prependPath(
                 $this->config->get('php_dir', null, $channel),
                 $this->_options['packagingroot']);
@@ -71626,12 +71218,14 @@ class PEAR_Installer extends PEAR_Downloader
             if (PEAR::isError($instfilelist)) {
                 return $instfilelist;
             }
+
             // ensure we have the most accurate registry
             $installregistry->flushFileMap();
             $test = $installregistry->checkFileMap($instfilelist, $testp, '1.1');
             if (PEAR::isError($test)) {
                 return $test;
             }
+
             if (sizeof($test)) {
                 $pkgs = $this->getInstallPackages();
                 $found = false;
@@ -71641,6 +71235,7 @@ class PEAR_Installer extends PEAR_Downloader
                         break;
                     }
                 }
+
                 if ($found) {
                     // subpackages can conflict with earlier versions of parent packages
                     $parentreg = $installregistry->packageInfo($param->getPackage(), null, $param->getChannel());
@@ -71648,24 +71243,52 @@ class PEAR_Installer extends PEAR_Downloader
                     foreach ($tmp as $file => $info) {
                         if (is_array($info)) {
                             if (strtolower($info[1]) == strtolower($param->getPackage()) &&
-                                  strtolower($info[0]) == strtolower($param->getChannel())) {
+                                  strtolower($info[0]) == strtolower($param->getChannel())
+                            ) {
+                                if (isset($parentreg['filelist'][$file])) {
+                                    unset($parentreg['filelist'][$file]);
+                                } else{
+                                    $pos     = strpos($file, '/');
+                                    $basedir = substr($file, 0, $pos);
+                                    $file2   = substr($file, $pos + 1);
+                                    if (isset($parentreg['filelist'][$file2]['baseinstalldir'])
+                                        && $parentreg['filelist'][$file2]['baseinstalldir'] === $basedir
+                                    ) {
+                                        unset($parentreg['filelist'][$file2]);
+                                    }
+                                }
+
                                 unset($test[$file]);
-                                unset($parentreg['filelist'][$file]);
                             }
                         } else {
                             if (strtolower($param->getChannel()) != 'pear.php.net') {
                                 continue;
                             }
+
                             if (strtolower($info) == strtolower($param->getPackage())) {
+                                if (isset($parentreg['filelist'][$file])) {
+                                    unset($parentreg['filelist'][$file]);
+                                } else{
+                                    $pos     = strpos($file, '/');
+                                    $basedir = substr($file, 0, $pos);
+                                    $file2   = substr($file, $pos + 1);
+                                    if (isset($parentreg['filelist'][$file2]['baseinstalldir'])
+                                        && $parentreg['filelist'][$file2]['baseinstalldir'] === $basedir
+                                    ) {
+                                        unset($parentreg['filelist'][$file2]);
+                                    }
+                                }
+
                                 unset($test[$file]);
-                                unset($parentreg['filelist'][$file]);
                             }
                         }
                     }
+
                     $pfk = &new PEAR_PackageFile($this->config);
                     $parentpkg = &$pfk->fromArray($parentreg);
                     $installregistry->updatePackage2($parentpkg);
                 }
+
                 if ($param->getChannel() == 'pecl.php.net' && isset($options['upgrade'])) {
                     $tmp = $test;
                     foreach ($tmp as $file => $info) {
@@ -71678,7 +71301,8 @@ class PEAR_Installer extends PEAR_Downloader
                         }
                     }
                 }
-                if (sizeof($test)) {
+
+                if (count($test)) {
                     $msg = "$channel/$pkgname: conflicting files found:\n";
                     $longest = max(array_map("strlen", array_keys($test)));
                     $fmt = "%${longest}s (%s)\n";
@@ -71689,12 +71313,13 @@ class PEAR_Installer extends PEAR_Downloader
                         $info = $info[0] . '/' . $info[1];
                         $msg .= sprintf($fmt, $file, $info);
                     }
+
                     if (!isset($options['ignore-errors'])) {
                         return $this->raiseError($msg);
-                    } else {
-                        if (!isset($options['soft'])) {
-                            $this->log(0, "WARNING: $msg");
-                        }
+                    }
+
+                    if (!isset($options['soft'])) {
+                        $this->log(0, "WARNING: $msg");
                     }
                 }
             }
@@ -71713,6 +71338,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             if (empty($options['force']) && $test) {
                 return $this->raiseError("$channel/$pkgname is already installed");
             }
@@ -71727,6 +71353,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             if ($test) {
                 $v1 = $installregistry->packageInfo($pkgname, 'version', $usechannel);
                 $v2 = $pkg->getVersion();
@@ -71734,16 +71361,17 @@ class PEAR_Installer extends PEAR_Downloader
                 if (empty($options['force']) && !version_compare("$v2", "$v1", 'gt')) {
                     return $this->raiseError("upgrade to a newer version ($v2 is not newer than $v1)");
                 }
+
                 if (empty($options['register-only'])) {
                     // when upgrading, remove old release's files first:
                     if (PEAR::isError($err = $this->_deletePackageFiles($pkgname, $usechannel,
                           true))) {
                         if (!isset($options['ignore-errors'])) {
                             return $this->raiseError($err);
-                        } else {
-                            if (!isset($options['soft'])) {
-                                $this->log(0, 'WARNING: ' . $err->getMessage());
-                            }
+                        }
+
+                        if (!isset($options['soft'])) {
+                            $this->log(0, 'WARNING: ' . $err->getMessage());
                         }
                     } else {
                         $backedup = $err;
@@ -71780,41 +71408,45 @@ class PEAR_Installer extends PEAR_Downloader
         } else {
             $filelist = $pkg->getFileList();
         }
+
         if (PEAR::isError($filelist)) {
             return $filelist;
         }
+
         $p = &$installregistry->getPackage($pkgname, $channel);
         if (empty($options['register-only']) && $p) {
             $dirtree = $p->getDirTree();
         } else {
             $dirtree = false;
         }
+
         $pkg->resetFilelist();
         $pkg->setLastInstalledVersion($installregistry->packageInfo($pkg->getPackage(),
             'version', $pkg->getChannel()));
         foreach ($filelist as $file => $atts) {
+            $this->expectError(PEAR_INSTALLER_FAILED);
             if ($pkg->getPackagexmlVersion() == '1.0') {
-                $this->expectError(PEAR_INSTALLER_FAILED);
                 $res = $this->_installFile($file, $atts, $tmp_path, $options);
-                $this->popExpect();
             } else {
-                $this->expectError(PEAR_INSTALLER_FAILED);
                 $res = $this->_installFile2($pkg, $file, $atts, $tmp_path, $options);
-                $this->popExpect();
             }
+            $this->popExpect();
+
             if (PEAR::isError($res)) {
                 if (empty($options['ignore-errors'])) {
                     $this->rollbackFileTransaction();
                     if ($res->getMessage() == "file does not exist") {
                         $this->raiseError("file $file in package.xml does not exist");
                     }
+
                     return $this->raiseError($res);
-                } else {
-                    if (!isset($options['soft'])) {
-                        $this->log(0, "Warning: " . $res->getMessage());
-                    }
+                }
+
+                if (!isset($options['soft'])) {
+                    $this->log(0, "Warning: " . $res->getMessage());
                 }
             }
+
             $real = isset($atts['attribs']) ? $atts['attribs'] : $atts;
             if ($res == PEAR_INSTALLER_OK && $real['role'] != 'src') {
                 // Register files that were installed
@@ -71835,6 +71467,7 @@ class PEAR_Installer extends PEAR_Downloader
         if (isset($backedup)) {
             $this->_removeBackups($backedup);
         }
+
         if (!$this->commitFileTransaction()) {
             $this->rollbackFileTransaction();
             $this->configSet('default_channel', $savechannel);
@@ -71842,9 +71475,9 @@ class PEAR_Installer extends PEAR_Downloader
         }
         // }}}
 
-        $ret = false;
+        $ret          = false;
         $installphase = 'install';
-        $oldversion = false;
+        $oldversion   = false;
         // {{{ Register that the package is installed -----------------------
         if (empty($options['upgrade'])) {
             // if 'force' is used, replace the info in registry
@@ -71858,6 +71491,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             if (!empty($options['force']) && $test) {
                 $oldversion = $installregistry->packageInfo($pkgname, 'version', $usechannel);
                 $installregistry->deletePackage($pkgname, $usechannel);
@@ -71873,6 +71507,7 @@ class PEAR_Installer extends PEAR_Downloader
                 }
                 $this->commitFileTransaction();
             }
+
             $usechannel = $channel;
             if ($channel == 'pecl.php.net') {
                 $test = $installregistry->packageExists($pkgname, $channel);
@@ -71883,6 +71518,7 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $test = $installregistry->packageExists($pkgname, $channel);
             }
+
             // new: upgrade installs a package if it isn't installed
             if (!$test) {
                 $ret = $installregistry->addPackage2($pkg);
@@ -71896,17 +71532,20 @@ class PEAR_Installer extends PEAR_Downloader
                 $installphase = 'upgrade';
             }
         }
+
         if (!$ret) {
             $this->configSet('default_channel', $savechannel);
             return $this->raiseError("Adding package $channel/$pkgname to registry failed");
         }
         // }}}
+
         $this->configSet('default_channel', $savechannel);
         if (class_exists('PEAR_Task_Common')) { // this is auto-included if any tasks exist
             if (PEAR_Task_Common::hasPostinstallTasks()) {
                 PEAR_Task_Common::runPostinstallTasks($installphase);
             }
         }
+
         return $pkg->toArray(true);
     }
 
@@ -71929,6 +71568,7 @@ class PEAR_Installer extends PEAR_Downloader
             $this->configSet('default_channel', $savechannel);
             return $built;
         }
+
         $this->log(1, "\nBuild process completed successfully");
         foreach ($built as $ext) {
             $bn = basename($ext['file']);
@@ -71943,17 +71583,20 @@ class PEAR_Installer extends PEAR_Downloader
             } else {
                 $role = 'src';
             }
+
             $dest = $ext['dest'];
             $packagingroot = '';
             if (isset($this->_options['packagingroot'])) {
                 $packagingroot = $this->_options['packagingroot'];
             }
+
             $copyto = $this->_prependPath($dest, $packagingroot);
             if ($copyto != $dest) {
-	            $this->log(1, "Installing '$dest' as '$copyto'");
+                $this->log(1, "Installing '$dest' as '$copyto'");
             } else {
-	            $this->log(1, "Installing '$dest'");
+                $this->log(1, "Installing '$dest'");
             }
+
             $copydir = dirname($copyto);
             // pretty much nothing happens if we are only registering the install
             if (empty($this->_options['register-only'])) {
@@ -71962,11 +71605,14 @@ class PEAR_Installer extends PEAR_Downloader
                         return $this->raiseError("failed to mkdir $copydir",
                             PEAR_INSTALLER_FAILED);
                     }
+
                     $this->log(3, "+ mkdir $copydir");
                 }
+
                 if (!@copy($ext['file'], $copyto)) {
                     return $this->raiseError("failed to write $copyto ($php_errormsg)", PEAR_INSTALLER_FAILED);
                 }
+
                 $this->log(3, "+ cp $ext[file] $copyto");
                 $this->addFileOperation('rename', array($ext['file'], $copyto));
                 if (!OS_WINDOWS) {
@@ -72024,15 +71670,15 @@ class PEAR_Installer extends PEAR_Downloader
     {
         if (isset($options['installroot'])) {
             $this->config->setInstallRoot($options['installroot']);
-            $this->installroot = '';
         } else {
             $this->config->setInstallRoot('');
-            $this->installroot = '';
         }
+
+        $this->installroot = '';
         $this->_registry = &$this->config->getRegistry();
         if (is_object($package)) {
             $channel = $package->getChannel();
-            $pkg = $package;
+            $pkg     = $package;
             $package = $pkg->getPackage();
         } else {
             $pkg = false;
@@ -72041,11 +71687,13 @@ class PEAR_Installer extends PEAR_Downloader
             $channel = $info['channel'];
             $package = $info['package'];
         }
+
         $savechannel = $this->config->get('default_channel');
         $this->configSet('default_channel', $channel);
         if (!is_object($pkg)) {
             $pkg = $this->_registry->getPackage($package, $channel);
         }
+
         if (!$pkg) {
             $this->configSet('default_channel', $savechannel);
             return $this->raiseError($this->_registry->parsedPackageNameToString(
@@ -72054,16 +71702,19 @@ class PEAR_Installer extends PEAR_Downloader
                     'package' => $package
                 ), true) . ' not installed');
         }
+
         if ($pkg->getInstalledBinary()) {
             // this is just an alias for a binary package
             return $this->_registry->deletePackage($package, $channel);
         }
+
         $filelist = $pkg->getFilelist();
         PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
         if (!class_exists('PEAR_Dependency2')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Dependency2.php';
         }
-        $depchecker = &new PEAR_Dependency2($this->config, $options, 
+
+        $depchecker = &new PEAR_Dependency2($this->config, $options,
             array('channel' => $channel, 'package' => $package),
             PEAR_VALIDATE_UNINSTALLING);
         $e = $depchecker->validatePackageUninstall($this);
@@ -72071,16 +71722,17 @@ class PEAR_Installer extends PEAR_Downloader
         if (PEAR::isError($e)) {
             if (!isset($options['ignore-errors'])) {
                 return $this->raiseError($e);
-            } else {
-                if (!isset($options['soft'])) {
-                    $this->log(0, 'WARNING: ' . $e->getMessage());
-                }
+            }
+
+            if (!isset($options['soft'])) {
+                $this->log(0, 'WARNING: ' . $e->getMessage());
             }
         } elseif (is_array($e)) {
             if (!isset($options['soft'])) {
                 $this->log(0, $e[0]);
             }
         }
+
         $this->pkginfo = &$pkg;
         // pretty much nothing happens if we are only registering the uninstall
         if (empty($options['register-only'])) {
@@ -72093,19 +71745,22 @@ class PEAR_Installer extends PEAR_Downloader
                 $this->configSet('default_channel', $savechannel);
                 if (!isset($options['ignore-errors'])) {
                     return $this->raiseError($err);
-                } else {
-                    if (!isset($options['soft'])) {
-                        $this->log(0, 'WARNING: ' . $err->getMessage());
-                    }
+                }
+
+                if (!isset($options['soft'])) {
+                    $this->log(0, 'WARNING: ' . $err->getMessage());
                 }
             } else {
                 PEAR::popErrorHandling();
             }
+
             if (!$this->commitFileTransaction()) {
                 $this->rollbackFileTransaction();
                 if (!isset($options['ignore-errors'])) {
                     return $this->raiseError("uninstall failed");
-                } elseif (!isset($options['soft'])) {
+                }
+
+                if (!isset($options['soft'])) {
                     $this->log(0, 'WARNING: uninstall failed');
                 }
             } else {
@@ -72120,11 +71775,14 @@ class PEAR_Installer extends PEAR_Downloader
                     $this->configSet('default_channel', $savechannel);
                     return $this->_registry->deletePackage($package, $channel);
                 }
+
                 if (!$this->commitFileTransaction()) {
                     $this->rollbackFileTransaction();
                     if (!isset($options['ignore-errors'])) {
                         return $this->raiseError("uninstall failed");
-                    } elseif (!isset($options['soft'])) {
+                    }
+
+                    if (!isset($options['soft'])) {
                         $this->log(0, 'WARNING: uninstall failed');
                     }
                 }
@@ -72196,291 +71854,293 @@ class PEAR_Installer extends PEAR_Downloader
     }
 
     // }}}
-}
-
-// {{{ md5_file() utility function
-if (!function_exists("md5_file")) {
-    function md5_file($filename) {
-        if (!$fd = @fopen($file, 'r')) {
-            return false;
-        }
-        fclose($fd);
-        return md5(file_get_contents($filename));
-    }
-}
-// }}}
-
-?><?php
-/**
- * PEAR_Installer_Role
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Role.php,v 1.20 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * base class for installer roles
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role/Common.php';
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/XMLParser.php';
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role
-{
-    /**
-     * Set up any additional configuration variables that file roles require
-     *
-     * Never call this directly, it is called by the PEAR_Config constructor
-     * @param PEAR_Config
-     * @access private
-     * @static
-     */
-    function initializeConfig(&$config)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $class => $info) {
-            if (!$info['config_vars']) {
-                continue;
-            }
-            $config->_addConfigVars($class, $info['config_vars']);
-        }
-    }
-
-    /**
-     * @param PEAR_PackageFile_v2
-     * @param string role name
-     * @param PEAR_Config
-     * @return PEAR_Installer_Role_Common
-     * @static
-     */
-    function &factory($pkg, $role, &$config)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        if (!in_array($role, PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
-            $a = false;
-            return $a;
-        }
-        $a = 'PEAR_Installer_Role_' . ucfirst($role);
-        if (!class_exists($a)) {
-            require_once 'phar://install-pear-nozlib.phar/' . str_replace('_', '/', $a) . '.php';
-        }
-        $b = new $a($config);
-        return $b;
-    }
-
-    /**
-     * Get a list of file roles that are valid for the particular release type.
-     *
-     * For instance, src files serve no purpose in regular php releases.
-     * @param string
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getValidRoles($release, $clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret = array();
-        if ($clear) {
-            $ret = array();
-        }
-        if (isset($ret[$release])) {
-            return $ret[$release];
-        }
-        $ret[$release] = array();
-        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-            if (in_array($release, $okreleases['releasetypes'])) {
-                $ret[$release][] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-            }
-        }
-        return $ret[$release];
-    }
-
-    /**
-     * Get a list of roles that require their files to be installed
-     *
-     * Most roles must be installed, but src and package roles, for instance
-     * are pseudo-roles.  src files are compiled into a new extension.  Package
-     * roles are actually fully bundled releases of a package
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getInstallableRoles($clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret;
-        if ($clear) {
-            unset($ret);
-        }
-        if (!isset($ret)) {
-            $ret = array();
-            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-                if ($okreleases['installable']) {
-                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-                }
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * Return an array of roles that are affected by the baseinstalldir attribute
-     *
-     * Most roles ignore this attribute, and instead install directly into:
-     * PackageName/filepath
-     * so a tests file tests/file.phpt is installed into PackageName/tests/filepath.php
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getBaseinstallRoles($clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret;
-        if ($clear) {
-            unset($ret);
-        }
-        if (!isset($ret)) {
-            $ret = array();
-            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-                if ($okreleases['honorsbaseinstall']) {
-                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-                }
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * Return an array of file roles that should be analyzed for PHP content at package time,
-     * like the "php" role.
-     * @param bool clear cache
-     * @return array
-     * @static
-     */
-    function getPhpRoles($clear = false)
-    {
-        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
-            PEAR_Installer_Role::registerRoles();
-        }
-        static $ret;
-        if ($clear) {
-            unset($ret);
-        }
-        if (!isset($ret)) {
-            $ret = array();
-            foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
-                if ($okreleases['phpfile']) {
-                    $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
-                }
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * Scan through the Command directory looking for classes
-     * and see what commands they implement.
-     * @param string which directory to look for classes, defaults to
-     *               the Installer/Roles subdirectory of
-     *               the directory from where this file (__FILE__) is
-     *               included.
-     *
-     * @return bool TRUE on success, a PEAR error on failure
-     * @access public
-     * @static
-     */
-    function registerRoles($dir = null)
-    {
-        $GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
-        $parser = new PEAR_XMLParser;
-        if ($dir === null) {
-            $dir = dirname(__FILE__) . '/Role';
-        }
-        if (!file_exists($dir) || !is_dir($dir)) {
-            return PEAR::raiseError("registerRoles: opendir($dir) failed: does not exist/is not directory");
-        }
-        $dp = @opendir($dir);
-        if (empty($dp)) {
-            return PEAR::raiseError("registerRoles: opendir($dir) failed: $php_errmsg");
-        }
-        while ($entry = readdir($dp)) {
-            if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
-                continue;
-            }
-            $class = "PEAR_Installer_Role_".substr($entry, 0, -4);
-            // List of roles
-            if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
-                $file = "$dir/$entry";
-                $parser->parse(file_get_contents($file));
-                $data = $parser->getData();
-                if (!is_array($data['releasetypes'])) {
-                    $data['releasetypes'] = array($data['releasetypes']);
-                }
-                $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
-            }
-        }
-        closedir($dp);
-        ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
-        PEAR_Installer_Role::getBaseinstallRoles(true);
-        PEAR_Installer_Role::getInstallableRoles(true);
-        PEAR_Installer_Role::getPhpRoles(true);
-        PEAR_Installer_Role::getValidRoles('****', true);
-        return true;
-    }
-}
-?>
-<?php
+}<?php
+/**
+ * PEAR_Installer_Role
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Role.php,v 1.22 2009/04/10 19:42:49 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * base class for installer roles
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role/Common.php';
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/XMLParser.php';
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role
+{
+    /**
+     * Set up any additional configuration variables that file roles require
+     *
+     * Never call this directly, it is called by the PEAR_Config constructor
+     * @param PEAR_Config
+     * @access private
+     * @static
+     */
+    function initializeConfig(&$config)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $class => $info) {
+            if (!$info['config_vars']) {
+                continue;
+            }
+
+            $config->_addConfigVars($class, $info['config_vars']);
+        }
+    }
+
+    /**
+     * @param PEAR_PackageFile_v2
+     * @param string role name
+     * @param PEAR_Config
+     * @return PEAR_Installer_Role_Common
+     * @static
+     */
+    function &factory($pkg, $role, &$config)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        if (!in_array($role, PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
+            $a = false;
+            return $a;
+        }
+
+        $a = 'PEAR_Installer_Role_' . ucfirst($role);
+        if (!class_exists($a)) {
+            require_once 'phar://install-pear-nozlib.phar/' . str_replace('_', '/', $a) . '.php';
+        }
+
+        $b = new $a($config);
+        return $b;
+    }
+
+    /**
+     * Get a list of file roles that are valid for the particular release type.
+     *
+     * For instance, src files serve no purpose in regular php releases.
+     * @param string
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getValidRoles($release, $clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret = array();
+        if ($clear) {
+            $ret = array();
+        }
+
+        if (isset($ret[$release])) {
+            return $ret[$release];
+        }
+
+        $ret[$release] = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if (in_array($release, $okreleases['releasetypes'])) {
+                $ret[$release][] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret[$release];
+    }
+
+    /**
+     * Get a list of roles that require their files to be installed
+     *
+     * Most roles must be installed, but src and package roles, for instance
+     * are pseudo-roles.  src files are compiled into a new extension.  Package
+     * roles are actually fully bundled releases of a package
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getInstallableRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+
+        if (isset($ret)) {
+            return $ret;
+        }
+
+        $ret = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if ($okreleases['installable']) {
+                $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Return an array of roles that are affected by the baseinstalldir attribute
+     *
+     * Most roles ignore this attribute, and instead install directly into:
+     * PackageName/filepath
+     * so a tests file tests/file.phpt is installed into PackageName/tests/filepath.php
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getBaseinstallRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+
+        if (isset($ret)) {
+            return $ret;
+        }
+
+        $ret = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if ($okreleases['honorsbaseinstall']) {
+                $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Return an array of file roles that should be analyzed for PHP content at package time,
+     * like the "php" role.
+     * @param bool clear cache
+     * @return array
+     * @static
+     */
+    function getPhpRoles($clear = false)
+    {
+        if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
+            PEAR_Installer_Role::registerRoles();
+        }
+
+        static $ret;
+        if ($clear) {
+            unset($ret);
+        }
+
+        if (isset($ret)) {
+            return $ret;
+        }
+
+        $ret = array();
+        foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
+            if ($okreleases['phpfile']) {
+                $ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Scan through the Command directory looking for classes
+     * and see what commands they implement.
+     * @param string which directory to look for classes, defaults to
+     *               the Installer/Roles subdirectory of
+     *               the directory from where this file (__FILE__) is
+     *               included.
+     *
+     * @return bool TRUE on success, a PEAR error on failure
+     * @access public
+     * @static
+     */
+    function registerRoles($dir = null)
+    {
+        $GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
+        $parser = new PEAR_XMLParser;
+        if ($dir === null) {
+            $dir = dirname(__FILE__) . '/Role';
+        }
+
+        if (!file_exists($dir) || !is_dir($dir)) {
+            return PEAR::raiseError("registerRoles: opendir($dir) failed: does not exist/is not directory");
+        }
+
+        $dp = @opendir($dir);
+        if (empty($dp)) {
+            return PEAR::raiseError("registerRoles: opendir($dir) failed: $php_errmsg");
+        }
+
+        while ($entry = readdir($dp)) {
+            if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
+                continue;
+            }
+
+            $class = "PEAR_Installer_Role_".substr($entry, 0, -4);
+            // List of roles
+            if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
+                $file = "$dir/$entry";
+                $parser->parse(file_get_contents($file));
+                $data = $parser->getData();
+                if (!is_array($data['releasetypes'])) {
+                    $data['releasetypes'] = array($data['releasetypes']);
+                }
+
+                $GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
+            }
+        }
+
+        closedir($dp);
+        ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
+        PEAR_Installer_Role::getBaseinstallRoles(true);
+        PEAR_Installer_Role::getInstallableRoles(true);
+        PEAR_Installer_Role::getPhpRoles(true);
+        PEAR_Installer_Role::getValidRoles('****', true);
+        return true;
+    }
+}<?php
 /**
  * Base class for all installation roles.
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.12 2006/10/19 23:55:32 cellog Exp $
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.13 2009/02/24 23:39:37 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -72494,8 +72154,8 @@ class PEAR_Installer_Role
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72642,39 +72302,33 @@ class PEAR_Installer_Role_Common
         return $roleInfo['phpextension'];
     }
 }
-?><?php
-/**
- * PEAR_Installer_Role_Data
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Data.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
+?><?php
+/**
+ * PEAR_Installer_Role_Data
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Data.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
 ?><role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
@@ -72689,39 +72343,33 @@ class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role><?php
-/**
- * PEAR_Installer_Role_Doc
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Doc.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
+</role><?php
+/**
+ * PEAR_Installer_Role_Doc
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Doc.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
 ?><role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
@@ -72736,39 +72384,33 @@ class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role><?php
-/**
- * PEAR_Installer_Role_Php
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Php.php,v 1.8 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
+</role><?php
+/**
+ * PEAR_Installer_Role_Php
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Php.php,v 1.9 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
 ?><role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
@@ -72783,39 +72425,33 @@ class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
  <executable />
  <phpextension />
  <config_vars />
-</role><?php
-/**
- * PEAR_Installer_Role_Script
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Script.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
+</role><?php
+/**
+ * PEAR_Installer_Role_Script
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Script.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
 ?><role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
@@ -72830,39 +72466,33 @@ class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
  <executable>1</executable>
  <phpextension />
  <config_vars />
-</role><?php
-/**
- * PEAR_Installer_Role_Test
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Test.php,v 1.7 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
+</role><?php
+/**
+ * PEAR_Installer_Role_Test
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Test.php,v 1.8 2009/02/24 23:39:37 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+
+/**
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
 ?><role version="1.0">
  <releasetypes>php</releasetypes>
  <releasetypes>extsrc</releasetypes>
@@ -72883,18 +72513,12 @@ class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {}
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: PackageFile.php,v 1.41 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: PackageFile.php,v 1.48 2009/04/09 22:16:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -72918,9 +72542,9 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2);
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -72982,6 +72606,7 @@ class PEAR_PackageFile
             $a = false;
             return $a;
         }
+
         include_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/Parser/v' . $version{0} . '.php';
         $version = $version{0};
         $class = "PEAR_PackageFile_Parser_v$version";
@@ -73009,6 +72634,7 @@ class PEAR_PackageFile
             $a = false;
             return $a;
         }
+
         include_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v' . $version{0} . '.php';
         $version = $version{0};
         $class = $this->getClassPrefix() . $version;
@@ -73032,22 +72658,25 @@ class PEAR_PackageFile
             if ($this->_logger) {
                 $obj->setLogger($this->_logger);
             }
+
             $obj->setConfig($this->_config);
             $obj->fromArray($arr);
             return $obj;
+        }
+
+        if (isset($arr['package']['attribs']['version'])) {
+            $obj = &$this->factory($arr['package']['attribs']['version']);
         } else {
-            if (isset($arr['package']['attribs']['version'])) {
-                $obj = &$this->factory($arr['package']['attribs']['version']);
-            } else {
-                $obj = &$this->factory('1.0');
-            }
-            if ($this->_logger) {
-                $obj->setLogger($this->_logger);
-            }
-            $obj->setConfig($this->_config);
-            $obj->fromArray($arr);
-            return $obj;
+            $obj = &$this->factory('1.0');
         }
+
+        if ($this->_logger) {
+            $obj->setLogger($this->_logger);
+        }
+
+        $obj->setConfig($this->_config);
+        $obj->fromArray($arr);
+        return $obj;
     }
 
     /**
@@ -73069,44 +72698,46 @@ class PEAR_PackageFile
                 return PEAR::raiseError('package.xml version "' . $packageversion[1] .
                     '" is not supported, only 1.0, 2.0, and 2.1 are supported.');
             }
+
             $object = &$this->parserFactory($packageversion[1]);
             if ($this->_logger) {
                 $object->setLogger($this->_logger);
             }
+
             $object->setConfig($this->_config);
             $pf = $object->parse($data, $file, $archive);
             if (PEAR::isError($pf)) {
                 return $pf;
             }
+
             if ($this->_rawReturn) {
                 return $pf;
             }
-            if ($pf->validate($state)) {
-                if ($this->_logger) {
-                    if ($pf->getValidationWarnings(false)) {
-                        foreach ($pf->getValidationWarnings() as $warning) {
-                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);
-                        }
-                    }
-                }
-                if (method_exists($pf, 'flattenFilelist')) {
-                    $pf->flattenFilelist(); // for v2
-                }
-                return $pf;
-            } else {
-                if ($this->_config->get('verbose') > 0) {
-                    if ($this->_logger) {
-                        if ($pf->getValidationWarnings(false)) {
-                            foreach ($pf->getValidationWarnings(false) as $warning) {
-                                $this->_logger->log(0, 'ERROR: ' . $warning['message']);
-                            }
-                        }
+
+            if (!$pf->validate($state)) {
+                if ($this->_config->get('verbose') > 0
+                    && $this->_logger && $pf->getValidationWarnings(false)) {
+                    foreach ($pf->getValidationWarnings(false) as $warning) {
+                        $this->_logger->log(0, 'ERROR: ' . $warning['message']);
                     }
                 }
+
                 $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',
                     2, null, null, $pf->getValidationWarnings());
                 return $a;
             }
+
+            if ($this->_logger && $pf->getValidationWarnings(false)) {
+                foreach ($pf->getValidationWarnings() as $warning) {
+                    $this->_logger->log(0, 'WARNING: ' . $warning['message']);
+                }
+            }
+
+            if (method_exists($pf, 'flattenFilelist')) {
+                $pf->flattenFilelist(); // for v2
+            }
+
+            return $pf;
         } elseif (preg_match('/<package[^>]+version="([^"]+)"/', $data, $packageversion)) {
             $a = PEAR::raiseError('package.xml file "' . $file .
                 '" has unsupported package.xml <package> version "' . $packageversion[1] . '"');
@@ -73115,6 +72746,7 @@ class PEAR_PackageFile
             if (!class_exists('PEAR_ErrorStack')) {
                 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ErrorStack.php';
             }
+
             PEAR_ErrorStack::staticPush('PEAR_PackageFile',
                 PEAR_PACKAGEFILE_ERROR_NO_PACKAGEVERSION,
                 'warning', array('xml' => $data), 'package.xml "' . $file .
@@ -73125,26 +72757,28 @@ class PEAR_PackageFile
             if (PEAR::isError($pf)) {
                 return $pf;
             }
+
             if ($this->_rawReturn) {
                 return $pf;
             }
-            if ($pf->validate($state)) {
-                if ($this->_logger) {
-                    if ($pf->getValidationWarnings(false)) {
-                        foreach ($pf->getValidationWarnings() as $warning) {
-                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);
-                        }
-                    }
-                }
-                if (method_exists($pf, 'flattenFilelist')) {
-                    $pf->flattenFilelist(); // for v2
-                }
-                return $pf;
-            } else {
+
+            if (!$pf->validate($state)) {
                 $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',
                     2, null, null, $pf->getValidationWarnings());
                 return $a;
             }
+
+            if ($this->_logger && $pf->getValidationWarnings(false)) {
+                foreach ($pf->getValidationWarnings() as $warning) {
+                    $this->_logger->log(0, 'WARNING: ' . $warning['message']);
+                }
+            }
+
+            if (method_exists($pf, 'flattenFilelist')) {
+                $pf->flattenFilelist(); // for v2
+            }
+
+            return $pf;
         }
     }
 
@@ -73176,20 +72810,24 @@ class PEAR_PackageFile
         if (!class_exists('Archive_Tar')) {
             require_once 'phar://install-pear-nozlib.phar/' . 'Archive/Tar.php';
         }
+
         $tar = new Archive_Tar($file);
         if ($this->_debug <= 1) {
             $tar->pushErrorHandling(PEAR_ERROR_RETURN);
         }
+
         $content = $tar->listContent();
         if ($this->_debug <= 1) {
             $tar->popErrorHandling();
         }
+
         if (!is_array($content)) {
             if (is_string($file) && strlen($file < 255) &&
                   (!file_exists($file) || !@is_file($file))) {
                 $ret = PEAR::raiseError("could not open file \"$file\"");
                 return $ret;
             }
+
             $file = realpath($file);
             $ret = PEAR::raiseError("Could not get contents of package \"$file\"".
                                      '. Invalid tgz file.');
@@ -73200,7 +72838,8 @@ class PEAR_PackageFile
                 return $ret;
             }
         }
-        $xml = null;
+
+        $xml      = null;
         $origfile = $file;
         foreach ($content as $file) {
             $name = $file['filename'];
@@ -73208,20 +72847,28 @@ class PEAR_PackageFile
                 $xml = $name;
                 break;
             }
+
             if ($name == 'package.xml') {
                 $xml = $name;
                 break;
-            } elseif (ereg('package.xml$', $name, $match)) {
+            } elseif (preg_match('/package.xml$/', $name, $match)) {
                 $xml = $name;
                 break;
             }
         }
+
         if ($this->_tmpdir) {
             $tmpdir = $this->_tmpdir;
         } else {
-            $tmpdir = System::mkTemp(array('-d', 'pear'));
+            $tmpdir = System::mkTemp(array('-t', $this->_config->get('temp_dir'), '-d', 'pear'));
+            if ($tmpdir === false) {
+                $ret = PEAR::raiseError("there was a problem with getting the configured temp directory");
+                return $ret;
+            }
+
             PEAR_PackageFile::addTempFile($tmpdir);
         }
+
         $this->_extractErrors();
         PEAR::staticPushErrorHandling(PEAR_ERROR_CALLBACK, array($this, '_extractErrors'));
         if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
@@ -73229,11 +72876,13 @@ class PEAR_PackageFile
             if ($extra) {
                 $extra = ' ' . $extra;
             }
+
             PEAR::staticPopErrorHandling();
             $ret = PEAR::raiseError('could not extract the package.xml file from "' .
                 $origfile . '"' . $extra);
             return $ret;
         }
+
         PEAR::staticPopErrorHandling();
         $ret = &PEAR_PackageFile::fromPackageFile("$tmpdir/$xml", $state, $origfile);
         return $ret;
@@ -73278,9 +72927,13 @@ class PEAR_PackageFile
      */
     function &fromPackageFile($descfile, $state, $archive = false)
     {
+        $fp = false;
         if (is_string($descfile) && strlen($descfile) < 255 &&
-             (!file_exists($descfile) || !is_file($descfile) || !is_readable($descfile) ||
-             (!$fp = @fopen($descfile, 'r')))) {
+             (
+              !file_exists($descfile) || !is_file($descfile) || !is_readable($descfile)
+              || (!$fp = @fopen($descfile, 'r'))
+             )
+        ) {
             $a = PEAR::raiseError("Unable to open $descfile");
             return $a;
         }
@@ -73318,57 +72971,53 @@ class PEAR_PackageFile
             } else {
                 $info = PEAR::raiseError("No package definition found in '$info' directory");
             }
+
             return $info;
         }
 
         $fp = false;
         if (is_string($info) && strlen($info) < 255 &&
-             (file_exists($info) || ($fp = @fopen($info, 'r')))) {
+             (file_exists($info) || ($fp = @fopen($info, 'r')))
+        ) {
+
             if ($fp) {
                 fclose($fp);
             }
+
             $tmp = substr($info, -4);
             if ($tmp == '.xml') {
                 $info = &PEAR_PackageFile::fromPackageFile($info, $state);
             } elseif ($tmp == '.tar' || $tmp == '.tgz') {
                 $info = &PEAR_PackageFile::fromTgzFile($info, $state);
             } else {
-                $fp = fopen($info, "r");
+                $fp   = fopen($info, 'r');
                 $test = fread($fp, 5);
                 fclose($fp);
-                if ($test == "<?xml") {
+                if ($test == '<?xml') {
                     $info = &PEAR_PackageFile::fromPackageFile($info, $state);
                 } else {
                     $info = &PEAR_PackageFile::fromTgzFile($info, $state);
                 }
             }
-        } else {
-            $info = PEAR::raiseError("Cannot open '$info' for parsing");
+
             return $info;
         }
+
+        $info = PEAR::raiseError("Cannot open '$info' for parsing");
         return $info;
     }
-}
-
-?>
-<?php
+}<?php
 /**
  * package.xml generation class, package.xml version 1.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v1.php,v 1.74 2008/01/03 20:26:37 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v1.php,v 1.76 2009/02/24 23:45:26 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -73386,9 +73035,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -73405,7 +73054,7 @@ class PEAR_PackageFile_Generator_v1
 
     function getPackagerVersion()
     {
-        return '1.7.2';
+        return '1.8.0';
     }
 
     /**
@@ -73559,7 +73208,7 @@ class PEAR_PackageFile_Generator_v1
             );
         $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
         $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
-        $ret .= "<package version=\"1.0\" packagerversion=\"1.7.2\">\n" .
+        $ret .= "<package version=\"1.0\" packagerversion=\"1.8.0\">\n" .
 " <name>$pkginfo[package]</name>";
         if (isset($pkginfo['extends'])) {
             $ret .= "\n<extends>$pkginfo[extends]</extends>";
@@ -73874,6 +73523,7 @@ class PEAR_PackageFile_Generator_v1
                 return $a;
             }
         }
+
         $arr = array(
             'attribs' => array(
                              'version' => '2.0',
@@ -73903,6 +73553,7 @@ class PEAR_PackageFile_Generator_v1
             );
             $arr['lead'][] = $new;
         }
+
         if (!isset($arr['lead'])) { // some people... you know?
             $arr['lead'] = array(
                 'name' => 'unknown',
@@ -73911,9 +73562,11 @@ class PEAR_PackageFile_Generator_v1
                 'active' => 'no',
             );
         }
+
         if (count($arr['lead']) == 1) {
             $arr['lead'] = $arr['lead'][0];
         }
+
         foreach ($maintainers as $maintainer) {
             if ($maintainer['role'] == 'lead') {
                 continue;
@@ -73926,15 +73579,19 @@ class PEAR_PackageFile_Generator_v1
             );
             $arr[$maintainer['role']][] = $new;
         }
+
         if (isset($arr['developer']) && count($arr['developer']) == 1) {
             $arr['developer'] = $arr['developer'][0];
         }
+
         if (isset($arr['contributor']) && count($arr['contributor']) == 1) {
             $arr['contributor'] = $arr['contributor'][0];
         }
+
         if (isset($arr['helper']) && count($arr['helper']) == 1) {
             $arr['helper'] = $arr['helper'][0];
         }
+
         $arr['date'] = $this->_packagefile->getDate();
         $arr['version'] =
             array(
@@ -73958,6 +73615,7 @@ class PEAR_PackageFile_Generator_v1
                 'gpl' => 'http://www.gnu.org/copyleft/gpl.html',
                 'apache' => 'http://www.opensource.org/licenses/apache2.0.php'
             );
+
         if (isset($licensemap[strtolower($this->_packagefile->getLicense())])) {
             $arr['license'] = array(
                 'attribs' => array('uri' =>
@@ -73968,6 +73626,7 @@ class PEAR_PackageFile_Generator_v1
             // don't use bogus uri
             $arr['license'] = $this->_packagefile->getLicense();
         }
+
         $arr['notes'] = $this->_packagefile->getNotes();
         $temp = array();
         $arr['contents'] = $this->_convertFilelist2_0($temp);
@@ -73978,6 +73637,7 @@ class PEAR_PackageFile_Generator_v1
             $arr['channel'] = 'pecl.php.net';
             $arr['providesextension'] = $arr['name']; // assumption
         }
+
         $arr[$release] = array();
         if ($this->_packagefile->getConfigureOptions()) {
             $arr[$release]['configureoption'] = $this->_packagefile->getConfigureOptions();
@@ -73988,11 +73648,13 @@ class PEAR_PackageFile_Generator_v1
                 $arr[$release]['configureoption'] = $arr[$release]['configureoption'][0];
             }
         }
+
         $this->_convertRelease2_0($arr[$release], $temp);
         if ($release == 'extsrcrelease' && count($arr[$release]) > 1) {
             // multiple extsrcrelease tags added in PEAR 1.4.1
             $arr['dependencies']['required']['pearinstaller']['min'] = '1.4.1';
         }
+
         if ($cl = $this->_packagefile->getChangelog()) {
             foreach ($cl as $release) {
                 $rel = array();
@@ -74004,6 +73666,7 @@ class PEAR_PackageFile_Generator_v1
                 if (!isset($release['release_state'])) {
                     $release['release_state'] = 'stable';
                 }
+
                 $rel['stability'] =
                     array(
                         'release' => $release['release_state'],
@@ -74014,6 +73677,7 @@ class PEAR_PackageFile_Generator_v1
                 } else {
                     $rel['date'] = date('Y-m-d');
                 }
+
                 if (isset($release['release_license'])) {
                     if (isset($licensemap[strtolower($release['release_license'])])) {
                         $uri = $licensemap[strtolower($release['release_license'])];
@@ -74027,18 +73691,22 @@ class PEAR_PackageFile_Generator_v1
                 } else {
                     $rel['license'] = $arr['license'];
                 }
+
                 if (!isset($release['release_notes'])) {
                     $release['release_notes'] = 'no release notes';
                 }
+
                 $rel['notes'] = $release['release_notes'];
                 $arr['changelog']['release'][] = $rel;
             }
         }
+
         $ret = new $class;
         $ret->setConfig($this->_packagefile->_config);
         if (isset($this->_packagefile->_logger) && is_object($this->_packagefile->_logger)) {
             $ret->setLogger($this->_packagefile->_logger);
         }
+
         $ret->fromArray($arr);
         return $ret;
     }
@@ -74184,9 +73852,9 @@ class PEAR_PackageFile_Generator_v1
     /**
      * Post-process special files with install-as/platform attributes and
      * make the release tag.
-     * 
+     *
      * This complex method follows this work-flow to create the release tags:
-     * 
+     *
      * <pre>
      * - if any install-as/platform exist, create a generic release and fill it with
      *   o <install as=..> tags for <file name=... install-as=...>
@@ -74202,10 +73870,10 @@ class PEAR_PackageFile_Generator_v1
      *   o <ignore> tags for <file name=... platform=other platform install-as=..>
      *   o <ignore> tags for <file name=... platform=!this platform install-as=..>
      * </pre>
-     * 
+     *
      * It does this by accessing the $package parameter, which contains an array with
      * indices:
-     * 
+     *
      *  - platform: mapping of file => OS the file should be installed on
      *  - install-as: mapping of file => installed name
      *  - osmap: mapping of OS => list of files that should be installed
@@ -74219,7 +73887,7 @@ class PEAR_PackageFile_Generator_v1
      */
     function _convertRelease2_0(&$release, $package)
     {
-        //- if any install-as/platform exist, create a generic release and fill it with 
+        //- if any install-as/platform exist, create a generic release and fill it with
         if (count($package['platform']) || count($package['install-as'])) {
             $generic = array();
             $genericIgnore = array();
@@ -74628,19 +74296,13 @@ class PEAR_PackageFile_Generator_v1
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stephan Schmidt (original XML_Serializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v2.php,v 1.39 2008/05/13 05:29:24 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v2.php,v 1.51 2009/03/27 17:11:18 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -74648,6 +74310,8 @@ class PEAR_PackageFile_Generator_v1
  * file/dir manipulation routines
  */
 require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
+require_once 'phar://install-pear-nozlib.phar/' . 'XML/Util.php';
+
 /**
  * This class converts a PEAR_PackageFile_v2 object into any output format.
  *
@@ -74657,9 +74321,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stephan Schmidt (original XML_Serializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -74671,37 +74335,37 @@ class PEAR_PackageFile_Generator_v2
     * @var array $_defaultOptions
     */
     var $_defaultOptions = array(
-                         'indent'             => ' ',                    // string used for indentation
-                         'linebreak'          => "\n",                  // string used for newlines
-                         'typeHints'          => false,                 // automatically add type hin attributes
-                         'addDecl'            => true,                 // add an XML declaration
-                         'defaultTagName'     => 'XML_Serializer_Tag',  // tag used for indexed arrays or invalid names
-                         'classAsTagName'     => false,                 // use classname for objects in indexed arrays
-                         'keyAttribute'       => '_originalKey',        // attribute where original key is stored
-                         'typeAttribute'      => '_type',               // attribute for type (only if typeHints => true)
-                         'classAttribute'     => '_class',              // attribute for class of objects (only if typeHints => true)
-                         'scalarAsAttributes' => false,                 // scalar values (strings, ints,..) will be serialized as attribute
-                         'prependAttributes'  => '',                    // prepend string for attributes
-                         'indentAttributes'   => false,                 // indent the attributes, if set to '_auto', it will indent attributes so they all start at the same column
-                         'mode'               => 'simplexml',             // use 'simplexml' to use parent name as tagname if transforming an indexed array
-                         'addDoctype'         => false,                 // add a doctype declaration
-                         'doctype'            => null,                  // supply a string or an array with id and uri ({@see PEAR_PackageFile_Generator_v2_PEAR_PackageFile_Generator_v2_XML_Util::getDoctypeDeclaration()}
-                         'rootName'           => 'package',                  // name of the root tag
-                         'rootAttributes'     => array(
-                             'version' => '2.0',
-                             'xmlns' => 'http://pear.php.net/dtd/package-2.0',
-                             'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
-                             'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
-                             'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0
+        'indent'             => ' ',                    // string used for indentation
+        'linebreak'          => "\n",                  // string used for newlines
+        'typeHints'          => false,                 // automatically add type hin attributes
+        'addDecl'            => true,                 // add an XML declaration
+        'defaultTagName'     => 'XML_Serializer_Tag',  // tag used for indexed arrays or invalid names
+        'classAsTagName'     => false,                 // use classname for objects in indexed arrays
+        'keyAttribute'       => '_originalKey',        // attribute where original key is stored
+        'typeAttribute'      => '_type',               // attribute for type (only if typeHints => true)
+        'classAttribute'     => '_class',              // attribute for class of objects (only if typeHints => true)
+        'scalarAsAttributes' => false,                 // scalar values (strings, ints,..) will be serialized as attribute
+        'prependAttributes'  => '',                    // prepend string for attributes
+        'indentAttributes'   => false,                 // indent the attributes, if set to '_auto', it will indent attributes so they all start at the same column
+        'mode'               => 'simplexml',             // use 'simplexml' to use parent name as tagname if transforming an indexed array
+        'addDoctype'         => false,                 // add a doctype declaration
+        'doctype'            => null,                  // supply a string or an array with id and uri ({@see XML_Util::getDoctypeDeclaration()}
+        'rootName'           => 'package',                  // name of the root tag
+        'rootAttributes'     => array(
+            'version' => '2.0',
+            'xmlns' => 'http://pear.php.net/dtd/package-2.0',
+            'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',
+            'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
+            'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0
 http://pear.php.net/dtd/tasks-1.0.xsd
 http://pear.php.net/dtd/package-2.0
 http://pear.php.net/dtd/package-2.0.xsd',
-                         ),               // attributes of the root tag
-                         'attributesArray'    => 'attribs',                  // all values in this key will be treated as attributes
-                         'contentName'        => '_content',                   // this value will be used directly as content, instead of creating a new tag, may only be used in conjuction with attributesArray
-                         'beautifyFilelist'   => false,
-                         'encoding' => 'UTF-8',
-                        );
+        ),               // attributes of the root tag
+        'attributesArray'    => 'attribs',                  // all values in this key will be treated as attributes
+        'contentName'        => '_content',                   // this value will be used directly as content, instead of creating a new tag, may only be used in conjuction with attributesArray
+        'beautifyFilelist'   => false,
+        'encoding' => 'UTF-8',
+    );
 
    /**
     * options for the serialization
@@ -74731,6 +74395,9 @@ http://pear.php.net/dtd/package-2.0.xsd',
     function PEAR_PackageFile_Generator_v2(&$packagefile)
     {
         $this->_packagefile = &$packagefile;
+        if (isset($this->_packagefile->encoding)) {
+            $this->_defaultOptions['encoding'] = $this->_packagefile->encoding;
+        }
     }
 
     /**
@@ -74738,7 +74405,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
      */
     function getPackagerVersion()
     {
-        return '1.7.2';
+        return '1.8.0';
     }
 
     /**
@@ -74768,6 +74435,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 '" is not equivalent to "' . basename($this->_packagefile->getPackageFile())
                 . '"');
         }
+
         if ($where === null) {
             if (!($where = System::mktemp(array('-d')))) {
                 return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: mktemp failed');
@@ -74776,29 +74444,34 @@ http://pear.php.net/dtd/package-2.0.xsd',
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: "' . $where . '" could' .
                 ' not be created');
         }
-        if (file_exists($where . DIRECTORY_SEPARATOR . 'package.xml') &&
-              !is_file($where . DIRECTORY_SEPARATOR . 'package.xml')) {
+
+        $file = $where . DIRECTORY_SEPARATOR . 'package.xml';
+        if (file_exists($file) && !is_file($file)) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: unable to save package.xml as' .
-                ' "' . $where . DIRECTORY_SEPARATOR . 'package.xml"');
+                ' "' . $file  .'"');
         }
+
         if (!$this->_packagefile->validate(PEAR_VALIDATE_PACKAGING)) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: invalid package.xml');
         }
+
         $ext = $compress ? '.tgz' : '.tar';
         $pkgver = $this->_packagefile->getPackage() . '-' . $this->_packagefile->getVersion();
         $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
-        if (file_exists(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext) &&
-              !is_file(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext)) {
+        if (file_exists($dest_package) && !is_file($dest_package)) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: cannot create tgz file "' .
-                getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext . '"');
+                $dest_package . '"');
         }
-        if ($pkgfile = $this->_packagefile->getPackageFile()) {
-            $pkgdir = dirname(realpath($pkgfile));
-            $pkgfile = basename($pkgfile);
-        } else {
+
+        $pkgfile = $this->_packagefile->getPackageFile();
+        if (!$pkgfile) {
             return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: package file object must ' .
                 'be created from a real file');
         }
+
+        $pkgdir  = dirname(realpath($pkgfile));
+        $pkgfile = basename($pkgfile);
+
         // {{{ Create the package file list
         $filelist = array();
         $i = 0;
@@ -74809,6 +74482,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             if (!isset($contents[0])) {
                 $contents = array($contents);
             }
+
             $packageDir = $where;
             foreach ($contents as $i => $package) {
                 $fname = $package;
@@ -74816,6 +74490,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 if (!file_exists($file)) {
                     return $packager->raiseError("File does not exist: $fname");
                 }
+
                 $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
                 System::mkdir(array('-p', dirname($tfile)));
                 copy($file, $tfile);
@@ -74827,7 +74502,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             if (!isset($contents[0])) {
                 $contents = array($contents);
             }
-    
+
             $packageDir = $where;
             foreach ($contents as $i => $file) {
                 $fname = $file['attribs']['name'];
@@ -74836,53 +74511,54 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
                 if (!file_exists($file)) {
                     return $packager->raiseError("File does not exist: $fname");
-                } else {
-                    $origperms = fileperms($file);
-                    $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
-                    unset($orig['attribs']);
-                    if (count($orig)) { // file with tasks
-                        // run any package-time tasks
-                        $contents = file_get_contents($file);
-                        foreach ($orig as $tag => $raw) {
-                            $tag = str_replace(
-                                array($this->_packagefile->getTasksNs() . ':', '-'),
-                                array('', '_'), $tag);
-                            $task = "PEAR_Task_$tag";
-                            $task = &new $task($this->_packagefile->_config,
-                                $this->_packagefile->_logger,
-                                PEAR_TASK_PACKAGE);
-                            $task->init($raw, $atts, null);
-                            $res = $task->startSession($this->_packagefile, $contents, $tfile);
-                            if (!$res) {
-                                continue; // skip this task
-                            }
-                            if (PEAR::isError($res)) {
-                                return $res;
-                            }
-                            $contents = $res; // save changes
-                            System::mkdir(array('-p', dirname($tfile)));
-                            $wp = fopen($tfile, "wb");
-                            fwrite($wp, $contents);
-                            fclose($wp);
+                }
+
+                $origperms = fileperms($file);
+                $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;
+                unset($orig['attribs']);
+                if (count($orig)) { // file with tasks
+                    // run any package-time tasks
+                    $contents = file_get_contents($file);
+                    foreach ($orig as $tag => $raw) {
+                        $tag = str_replace(
+                            array($this->_packagefile->getTasksNs() . ':', '-'),
+                            array('', '_'), $tag);
+                        $task = "PEAR_Task_$tag";
+                        $task = &new $task($this->_packagefile->_config,
+                            $this->_packagefile->_logger,
+                            PEAR_TASK_PACKAGE);
+                        $task->init($raw, $atts, null);
+                        $res = $task->startSession($this->_packagefile, $contents, $tfile);
+                        if (!$res) {
+                            continue; // skip this task
                         }
-                    }
-                    if (!file_exists($tfile)) {
+
+                        if (PEAR::isError($res)) {
+                            return $res;
+                        }
+
+                        $contents = $res; // save changes
                         System::mkdir(array('-p', dirname($tfile)));
-                        copy($file, $tfile);
+                        $wp = fopen($tfile, "wb");
+                        fwrite($wp, $contents);
+                        fclose($wp);
                     }
-                    chmod($tfile, $origperms);
-                    $filelist[$i++] = $tfile;
-                    $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($tfile), $i - 1);
-                    $packager->log(2, "Adding file $fname");
                 }
+
+                if (!file_exists($tfile)) {
+                    System::mkdir(array('-p', dirname($tfile)));
+                    copy($file, $tfile);
+                }
+
+                chmod($tfile, $origperms);
+                $filelist[$i++] = $tfile;
+                $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($tfile), $i - 1);
+                $packager->log(2, "Adding file $fname");
             }
         }
             // }}}
-        if ($pf1 !== null) {
-            $name = 'package2.xml';
-        } else {
-            $name = 'package.xml';
-        }
+
+        $name       = $pf1 !== null ? 'package2.xml' : 'package.xml';
         $packagexml = $this->toPackageFile($where, PEAR_VALIDATE_PACKAGING, $name);
         if ($packagexml) {
             $tar =& new Archive_Tar($dest_package, $compress);
@@ -74895,21 +74571,23 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 return $packager->raiseError('PEAR_Packagefile_v2::toTgz(): adding ' . $name .
                     ' failed');
             }
+
             // ----- Add the content of the package
             if (!$tar->addModify($filelist, $pkgver, $where)) {
                 return $packager->raiseError(
                     'PEAR_Packagefile_v2::toTgz(): tarball creation failed');
             }
+
             // add the package.xml version 1.0
             if ($pf1 !== null) {
                 $pfgen = &$pf1->getDefaultGenerator();
-                $packagexml1 = $pfgen->toPackageFile($where, PEAR_VALIDATE_PACKAGING,
-                    'package.xml', true);
+                $packagexml1 = $pfgen->toPackageFile($where, PEAR_VALIDATE_PACKAGING, 'package.xml', true);
                 if (!$tar->addModify(array($packagexml1), '', $where)) {
                     return $packager->raiseError(
                         'PEAR_Packagefile_v2::toTgz(): adding package.xml failed');
                 }
             }
+
             return $dest_package;
         }
     }
@@ -74920,6 +74598,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: invalid package.xml',
                 null, null, null, $this->_packagefile->getValidationWarnings());
         }
+
         if ($where === null) {
             if (!($where = System::mktemp(array('-d')))) {
                 return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: mktemp failed');
@@ -74928,6 +74607,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: "' . $where . '" could' .
                 ' not be created');
         }
+
         $newpkgfile = $where . DIRECTORY_SEPARATOR . $name;
         $np = @fopen($newpkgfile, 'wb');
         if (!$np) {
@@ -74957,18 +74637,46 @@ http://pear.php.net/dtd/package-2.0.xsd',
         if (!$this->_packagefile->validate($state)) {
             return false;
         }
+
         if (is_array($options)) {
             $this->options = array_merge($this->_defaultOptions, $options);
         } else {
             $this->options = $this->_defaultOptions;
         }
+
         $arr = $this->_packagefile->getArray();
         if (isset($arr['filelist'])) {
             unset($arr['filelist']);
         }
+
         if (isset($arr['_lastversion'])) {
             unset($arr['_lastversion']);
         }
+
+        // Fix the notes a little bit
+        if (isset($arr['notes'])) {
+            // This trims out the indenting, needs fixing
+            $arr['notes'] = "\n" . trim($arr['notes']) . "\n";
+        }
+
+        if (isset($arr['changelog']) && !empty($arr['changelog'])) {
+            // Fix for inconsistency how the array is filled depending on the changelog release amount
+            if (!isset($arr['changelog']['release'][0])) {
+                $release = $arr['changelog']['release'];
+                unset($arr['changelog']['release']);
+
+                $arr['changelog']['release']    = array();
+                $arr['changelog']['release'][0] = $release;
+            }
+
+            foreach ($arr['changelog']['release'] as &$c) {
+                if (isset($c['notes'])) {
+                    // This trims out the indenting, needs fixing
+                    $c['notes'] = "\n" . trim($c['notes']) . "\n";
+                }
+            }
+        }
+
         if ($state ^ PEAR_VALIDATE_PACKAGING && !isset($arr['bundle'])) {
             $use = $this->_recursiveXmlFilelist($arr['contents']['dir']['file']);
             unset($arr['contents']['dir']['file']);
@@ -74980,10 +74688,12 @@ http://pear.php.net/dtd/package-2.0.xsd',
             }
             $this->options['beautifyFilelist'] = true;
         }
-        $arr['attribs']['packagerversion'] = '1.7.2';
+
+        $arr['attribs']['packagerversion'] = '1.8.0';
         if ($this->serialize($arr, $options)) {
             return $this->_serializedData . "\n";
         }
+
         return false;
     }
 
@@ -75105,7 +74815,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
     {
         $this->options[$name] = $value;
     }
-    
+
    /**
     * sets several options at once
     *
@@ -75137,29 +74847,22 @@ http://pear.php.net/dtd/package-2.0.xsd',
             } else {
                 $this->options = array_merge($this->options, $options);
             }
-        }
-        else {
+        } else {
             $optionsBak = null;
         }
-        
+
         //  start depth is zero
         $this->_tagDepth = 0;
-
         $this->_serializedData = '';
         // serialize an array
         if (is_array($data)) {
-            if (isset($this->options['rootName'])) {
-                $tagName = $this->options['rootName'];
-            } else {
-                $tagName = 'array';
-            }
-
+            $tagName = isset($this->options['rootName']) ? $this->options['rootName'] : 'array';
             $this->_serializedData .= $this->_serializeArray($data, $tagName, $this->options['rootAttributes']);
         }
-        
+
         // add doctype declaration
         if ($this->options['addDoctype'] === true) {
-            $this->_serializedData = PEAR_PackageFile_Generator_v2_XML_Util::getDoctypeDeclaration($tagName, $this->options['doctype'])
+            $this->_serializedData = XML_Util::getDoctypeDeclaration($tagName, $this->options['doctype'])
                                    . $this->options['linebreak']
                                    . $this->_serializedData;
         }
@@ -75167,21 +74870,17 @@ http://pear.php.net/dtd/package-2.0.xsd',
         //  build xml declaration
         if ($this->options['addDecl']) {
             $atts = array();
-            if (isset($this->options['encoding']) ) {
-                $encoding = $this->options['encoding'];
-            } else {
-                $encoding = null;
-            }
-            $this->_serializedData = PEAR_PackageFile_Generator_v2_XML_Util::getXMLDeclaration('1.0', $encoding)
+            $encoding = isset($this->options['encoding']) ? $this->options['encoding'] : null;
+            $this->_serializedData = XML_Util::getXMLDeclaration('1.0', $encoding)
                                    . $this->options['linebreak']
                                    . $this->_serializedData;
         }
-        
-        
-		if ($optionsBak !== null) {
-			$this->options = $optionsBak;
-		}
-		
+
+
+        if ($optionsBak !== null) {
+            $this->options = $optionsBak;
+        }
+
         return  true;
     }
 
@@ -75193,12 +74892,12 @@ http://pear.php.net/dtd/package-2.0.xsd',
     */
     function getSerializedData()
     {
-        if ($this->_serializedData == null ) {
+        if ($this->_serializedData === null) {
             return  $this->raiseError('No serialized data available. Use XML_Serializer::serialize() first.', XML_SERIALIZER_ERROR_NO_SERIALIZATION);
         }
         return $this->_serializedData;
     }
-    
+
    /**
     * serialize any value
     *
@@ -75226,7 +74925,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
         }
         return $xml;
     }
-    
+
    /**
     * serialize an array
     *
@@ -75235,12 +74934,12 @@ http://pear.php.net/dtd/package-2.0.xsd',
     * @param    string  $tagName     name of the root tag
     * @param    array   $attributes  attributes for the root tag
     * @return   string  $string      serialized data
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::isValidName() to check, whether key has to be substituted
+    * @uses     XML_Util::isValidName() to check, whether key has to be substituted
     */
     function _serializeArray(&$array, $tagName = null, $attributes = array())
     {
         $_content = null;
-        
+
         /**
          * check for special attributes
          */
@@ -75304,25 +75003,25 @@ http://pear.php.net/dtd/package-2.0.xsd',
                             $this->_curdir = $savedir;
                         }
                     }
-                    
+
                     $string .= $this->options['linebreak'];
-        			//	do indentation
-                    if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                    // do indentation
+                    if ($this->options['indent'] !== null && $this->_tagDepth > 0) {
                         $string .= str_repeat($this->options['indent'], $this->_tagDepth);
                     }
                 }
                 return rtrim($string);
             }
         }
-        
-		if ($this->options['scalarAsAttributes'] === true) {
-	        foreach ($array as $key => $value) {
-				if (is_scalar($value) && (PEAR_PackageFile_Generator_v2_XML_Util::isValidName($key) === true)) {
-					unset($array[$key]);
-					$attributes[$this->options['prependAttributes'].$key] = $value;
-				}
-			}
-		}
+
+        if ($this->options['scalarAsAttributes'] === true) {
+            foreach ($array as $key => $value) {
+                if (is_scalar($value) && (XML_Util::isValidName($key) === true)) {
+                    unset($array[$key]);
+                    $attributes[$this->options['prependAttributes'].$key] = $value;
+                }
+            }
+        }
 
         // check for empty array => create empty tag
         if (empty($array)) {
@@ -75336,29 +75035,29 @@ http://pear.php.net/dtd/package-2.0.xsd',
             $this->_tagDepth++;
             $tmp = $this->options['linebreak'];
             foreach ($array as $key => $value) {
-    			//	do indentation
-                if ($this->options['indent']!==null && $this->_tagDepth>0) {
+                // do indentation
+                if ($this->options['indent'] !== null && $this->_tagDepth > 0) {
                     $tmp .= str_repeat($this->options['indent'], $this->_tagDepth);
                 }
-    
-    			//	copy key
-    			$origKey	=	$key;
-    			//	key cannot be used as tagname => use default tag
-                $valid = PEAR_PackageFile_Generator_v2_XML_Util::isValidName($key);
-    	        if (PEAR::isError($valid)) {
-    	            if ($this->options['classAsTagName'] && is_object($value)) {
-    	                $key = get_class($value);
-    	            } else {
-            	        $key = $this->options['defaultTagName'];
-    	            }
-           	 	}
+
+                // copy key
+                $origKey = $key;
+                // key cannot be used as tagname => use default tag
+                $valid = XML_Util::isValidName($key);
+                if (PEAR::isError($valid)) {
+                    if ($this->options['classAsTagName'] && is_object($value)) {
+                        $key = get_class($value);
+                    } else {
+                        $key = $this->options['defaultTagName'];
+                    }
+                }
                 $atts = array();
                 if ($this->options['typeHints'] === true) {
                     $atts[$this->options['typeAttribute']] = gettype($value);
-    				if ($key !== $origKey) {
-    					$atts[$this->options['keyAttribute']] = (string)$origKey;
-    				}
-    
+                    if ($key !== $origKey) {
+                        $atts[$this->options['keyAttribute']] = (string)$origKey;
+                    }
+
                 }
                 if ($this->options['beautifyFilelist'] && $key == 'dir') {
                     if (!isset($this->_curdir)) {
@@ -75394,21 +75093,21 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 }
                 $tmp .= $this->options['linebreak'];
             }
-            
+
             $this->_tagDepth--;
             if ($this->options['indent']!==null && $this->_tagDepth>0) {
                 $tmp .= str_repeat($this->options['indent'], $this->_tagDepth);
             }
-    
-    		if (trim($tmp) === '') {
-    			$tmp = null;
-    		}
-    		
+
+            if (trim($tmp) === '') {
+                $tmp = null;
+            }
+
             $tag = array(
-                            'qname'      => $tagName,
-                            'content'    => $tmp,
-                            'attributes' => $attributes
-                        );
+                'qname'      => $tagName,
+                'content'    => $tmp,
+                'attributes' => $attributes
+            );
         }
         if ($this->options['typeHints'] === true) {
             if (!isset($tag['attributes'][$this->options['typeAttribute']])) {
@@ -75419,7 +75118,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
         $string = $this->_createXMLTag($tag, false);
         return $string;
     }
-  
+
    /**
     * create a tag from an array
     * this method awaits an array in the following format
@@ -75436,7 +75135,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
     * @param    boolean $replaceEntities whether to replace XML entities in content or not
     * @return   string  $string XML tag
     */
-    function _createXMLTag( $tag, $replaceEntities = true )
+    function _createXMLTag($tag, $replaceEntities = true)
     {
         if ($this->options['indentAttributes'] !== false) {
             $multiline = true;
@@ -75449,727 +75148,51 @@ http://pear.php.net/dtd/package-2.0.xsd',
                 $indent .= $this->options['indentAttributes'];
             }
         } else {
-            $multiline = false;
-            $indent    = false;
+            $indent = $multiline = false;
         }
-    
+
         if (is_array($tag['content'])) {
             if (empty($tag['content'])) {
-                $tag['content'] =   '';
+                $tag['content'] = '';
             }
         } elseif(is_scalar($tag['content']) && (string)$tag['content'] == '') {
-            $tag['content'] =   '';
+            $tag['content'] = '';
         }
-    
+
         if (is_scalar($tag['content']) || is_null($tag['content'])) {
             if ($this->options['encoding'] == 'UTF-8' &&
-                  version_compare(phpversion(), '5.0.0', 'lt')) {
-                $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_UTF8_XML;
-            } else {
-                $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML;
+                  version_compare(phpversion(), '5.0.0', 'lt')
+            ) {
+                $tag = utf8_encode($tag);
             }
-            $tag = PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $this->options['linebreak'], $encoding);
+
+            if ($replaceEntities === true) {
+                $replaceEntities = XML_UTIL_ENTITIES_XML;
+            }
+
+            $tag = XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $this->options['linebreak']);
         } elseif (is_array($tag['content'])) {
-            $tag    =   $this->_serializeArray($tag['content'], $tag['qname'], $tag['attributes']);
+            $tag = $this->_serializeArray($tag['content'], $tag['qname'], $tag['attributes']);
         } elseif (is_object($tag['content'])) {
-            $tag    =   $this->_serializeObject($tag['content'], $tag['qname'], $tag['attributes']);
+            $tag = $this->_serializeObject($tag['content'], $tag['qname'], $tag['attributes']);
         } elseif (is_resource($tag['content'])) {
             settype($tag['content'], 'string');
-            $tag    =   PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag, $replaceEntities);
+            $tag = XML_Util::createTagFromArray($tag, $replaceEntities);
         }
         return  $tag;
     }
-}
-
-// well, it's one way to do things without extra deps ...
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4                                                        |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available at through the world-wide-web at                           |
-// | http://www.php.net/license/2_02.txt.                                 |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license at php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Stephan Schmidt <schst at php-tools.net>                       |
-// +----------------------------------------------------------------------+
-//
-//    $Id: v2.php,v 1.39 2008/05/13 05:29:24 cellog Exp $
-
-/**
- * error code for invalid chars in XML name
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_CHARS", 51);
-
-/**
- * error code for invalid chars in XML name
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_START", 52);
-
-/**
- * error code for non-scalar tag content
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NON_SCALAR_CONTENT", 60);
-    
-/**
- * error code for missing tag name
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NO_TAG_NAME", 61);
-    
-/**
- * replace XML entities
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES", 1);
-
-/**
- * embedd content in a CData Section
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_CDATA_SECTION", 2);
-
-/**
- * do not replace entitites
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE", 0);
-
-/**
- * replace all XML entitites
- * This setting will replace <, >, ", ' and &
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML", 1);
-
-/**
- * replace only required XML entitites
- * This setting will replace <, " and &
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED", 2);
-
-/**
- * replace HTML entitites
- * @link    http://www.php.net/htmlentities
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML", 3);
-
-/**
- * replace all XML entitites, and encode from ISO-8859-1 to UTF-8
- * This setting will replace <, >, ", ' and &
- */
-define("PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_UTF8_XML", 4);
-
-/**
- * utility class for working with XML documents
- * 
- * customized version of XML_Util 0.6.0
- *
- * @category XML
- * @package  PEAR
- * @version  0.6.0
- * @author   Stephan Schmidt <schst at php.net>
- * @author   Gregory Beaver <cellog at php.net>
- */
-class PEAR_PackageFile_Generator_v2_XML_Util {
-
-   /**
-    * return API version
-    *
-    * @access   public
-    * @static
-    * @return   string  $version API version
-    */
-    function apiVersion()
-    {
-        return "0.6";
-    }
-
-   /**
-    * replace XML entities
-    *
-    * With the optional second parameter, you may select, which
-    * entities should be replaced.
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // replace XML entites:
-    * $string = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities("This string contains < & >.");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  string where XML special chars should be replaced
-    * @param    integer setting for entities in attribute values (one of PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML)
-    * @return   string  string with replaced chars
-    */
-    function replaceEntities($string, $replaceEntities = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        switch ($replaceEntities) {
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_UTF8_XML:
-                return strtr(utf8_encode($string),array(
-                                          '&'  => '&amp;',
-                                          '>'  => '&gt;',
-                                          '<'  => '&lt;',
-                                          '"'  => '&quot;',
-                                          '\'' => '&apos;' ));
-                break;
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML:
-                return strtr($string,array(
-                                          '&'  => '&amp;',
-                                          '>'  => '&gt;',
-                                          '<'  => '&lt;',
-                                          '"'  => '&quot;',
-                                          '\'' => '&apos;' ));
-                break;
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED:
-                return strtr($string,array(
-                                          '&'  => '&amp;',
-                                          '<'  => '&lt;',
-                                          '"'  => '&quot;' ));
-                break;
-            case PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML:
-                return htmlspecialchars($string);
-                break;
-        }
-        return $string;
-    }
-
-   /**
-    * build an xml declaration
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // get an XML declaration:
-    * $xmlDecl = PEAR_PackageFile_Generator_v2_XML_Util::getXMLDeclaration("1.0", "UTF-8", true);
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $version     xml version
-    * @param    string  $encoding    character encoding
-    * @param    boolean $standAlone  document is standalone (or not)
-    * @return   string  $decl xml declaration
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::attributesToString() to serialize the attributes of the XML declaration
-    */
-    function getXMLDeclaration($version = "1.0", $encoding = null, $standalone = null)
-    {
-        $attributes = array(
-                            "version" => $version,
-                           );
-        // add encoding
-        if ($encoding !== null) {
-            $attributes["encoding"] = $encoding;
-        }
-        // add standalone, if specified
-        if ($standalone !== null) {
-            $attributes["standalone"] = $standalone ? "yes" : "no";
-        }
-        
-        return sprintf("<?xml%s?>", PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($attributes, false));
-    }
-
-   /**
-    * build a document type declaration
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // get a doctype declaration:
-    * $xmlDecl = PEAR_PackageFile_Generator_v2_XML_Util::getDocTypeDeclaration("rootTag","myDocType.dtd");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $root         name of the root tag
-    * @param    string  $uri          uri of the doctype definition (or array with uri and public id)
-    * @param    string  $internalDtd  internal dtd entries   
-    * @return   string  $decl         doctype declaration
-    * @since    0.2
-    */
-    function getDocTypeDeclaration($root, $uri = null, $internalDtd = null)
-    {
-        if (is_array($uri)) {
-            $ref = sprintf( ' PUBLIC "%s" "%s"', $uri["id"], $uri["uri"] );
-        } elseif (!empty($uri)) {
-            $ref = sprintf( ' SYSTEM "%s"', $uri );
-        } else {
-            $ref = "";
-        }
-
-        if (empty($internalDtd)) {
-            return sprintf("<!DOCTYPE %s%s>", $root, $ref);
-        } else {
-            return sprintf("<!DOCTYPE %s%s [\n%s\n]>", $root, $ref, $internalDtd);
-        }
-    }
-
-   /**
-    * create string representation of an attribute list
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // build an attribute string
-    * $att = array(
-    *              "foo"   =>  "bar",
-    *              "argh"  =>  "tomato"
-    *            );
-    *
-    * $attList = PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($att);    
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    array         $attributes        attribute array
-    * @param    boolean|array $sort              sort attribute list alphabetically, may also be an assoc array containing the keys 'sort', 'multiline', 'indent', 'linebreak' and 'entities'
-    * @param    boolean       $multiline         use linebreaks, if more than one attribute is given
-    * @param    string        $indent            string used for indentation of multiline attributes
-    * @param    string        $linebreak         string used for linebreaks of multiline attributes
-    * @param    integer       $entities          setting for entities in attribute values (one of PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML_REQUIRED, PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_HTML)
-    * @return   string                           string representation of the attributes
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities() to replace XML entities in attribute values
-    * @todo     allow sort also to be an options array
-    */
-    function attributesToString($attributes, $sort = true, $multiline = false, $indent = '    ', $linebreak = "\n", $entities = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        /**
-         * second parameter may be an array
-         */
-        if (is_array($sort)) {
-            if (isset($sort['multiline'])) {
-                $multiline = $sort['multiline'];
-            }
-            if (isset($sort['indent'])) {
-                $indent = $sort['indent'];
-            }
-            if (isset($sort['linebreak'])) {
-                $multiline = $sort['linebreak'];
-            }
-            if (isset($sort['entities'])) {
-                $entities = $sort['entities'];
-            }
-            if (isset($sort['sort'])) {
-                $sort = $sort['sort'];
-            } else {
-                $sort = true;
-            }
-        }
-        $string = '';
-        if (is_array($attributes) && !empty($attributes)) {
-            if ($sort) {
-                ksort($attributes);
-            }
-            if( !$multiline || count($attributes) == 1) {
-                foreach ($attributes as $key => $value) {
-                    if ($entities != PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE) {
-                        $value = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities($value, $entities);
-                    }
-                    $string .= ' '.$key.'="'.$value.'"';
-                }
-            } else {
-                $first = true;
-                foreach ($attributes as $key => $value) {
-                    if ($entities != PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_NONE) {
-                        $value = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities($value, $entities);
-                    }
-                    if ($first) {
-                        $string .= " ".$key.'="'.$value.'"';
-                        $first = false;
-                    } else {
-                        $string .= $linebreak.$indent.$key.'="'.$value.'"';
-                    }
-                }
-            }
-        }
-        return $string;
-    }
-
-   /**
-    * create a tag
-    *
-    * This method will call PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray(), which
-    * is more flexible.
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML tag:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createTag("myNs:myTag", array("foo" => "bar"), "This is inside the tag", "http://www.w3c.org/myNs#");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $qname             qualified tagname (including namespace)
-    * @param    array   $attributes        array containg attributes
-    * @param    mixed   $content
-    * @param    string  $namespaceUri      URI of the namespace
-    * @param    integer $replaceEntities   whether to replace XML special chars in content, embedd it in a CData section or none of both
-    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
-    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
-    * @param    string  $linebreak         string used for linebreaks
-    * @param    string  $encoding          encoding that should be used to translate content
-    * @return   string  $string            XML tag
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray()
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray() to create the tag
-    */
-    function createTag($qname, $attributes = array(), $content = null, $namespaceUri = null, $replaceEntities = PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES, $multiline = false, $indent = "_auto", $linebreak = "\n", $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        $tag = array(
-                     "qname"      => $qname,
-                     "attributes" => $attributes
-                    );
-
-        // add tag content
-        if ($content !== null) {
-            $tag["content"] = $content;
-        }
-        
-        // add namespace Uri
-        if ($namespaceUri !== null) {
-            $tag["namespaceUri"] = $namespaceUri;
-        }
-
-        return PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, $indent, $linebreak, $encoding);
-    }
-
-   /**
-    * create a tag from an array
-    * this method awaits an array in the following format
-    * <pre>
-    * array(
-    *  "qname"        => $qname         // qualified name of the tag
-    *  "namespace"    => $namespace     // namespace prefix (optional, if qname is specified or no namespace)
-    *  "localpart"    => $localpart,    // local part of the tagname (optional, if qname is specified)
-    *  "attributes"   => array(),       // array containing all attributes (optional)
-    *  "content"      => $content,      // tag content (optional)
-    *  "namespaceUri" => $namespaceUri  // namespaceUri for the given namespace (optional)
-    *   )
-    * </pre>
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * $tag = array(
-    *           "qname"        => "foo:bar",
-    *           "namespaceUri" => "http://foo.com",
-    *           "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
-    *           "content"      => "I'm inside the tag",
-    *            );
-    * // creating a tag with qualified name and namespaceUri
-    * $string = PEAR_PackageFile_Generator_v2_XML_Util::createTagFromArray($tag);
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    array   $tag               tag definition
-    * @param    integer $replaceEntities   whether to replace XML special chars in content, embedd it in a CData section or none of both
-    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
-    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
-    * @param    string  $linebreak         string used for linebreaks
-    * @return   string  $string            XML tag
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createTag()
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::attributesToString() to serialize the attributes of the tag
-    * @uses     PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName() to get local part and namespace of a qualified name
-    */
-    function createTagFromArray($tag, $replaceEntities = PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES, $multiline = false, $indent = "_auto", $linebreak = "\n", $encoding = PEAR_PackageFile_Generator_v2_XML_Util_ENTITIES_XML)
-    {
-        if (isset($tag["content"]) && !is_scalar($tag["content"])) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( "Supplied non-scalar value as tag content", PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NON_SCALAR_CONTENT );
-        }
-
-        if (!isset($tag['qname']) && !isset($tag['localPart'])) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( 'You must either supply a qualified name (qname) or local tag name (localPart).', PEAR_PackageFile_Generator_v2_XML_Util_ERROR_NO_TAG_NAME );
-        }
-
-        // if no attributes hav been set, use empty attributes
-        if (!isset($tag["attributes"]) || !is_array($tag["attributes"])) {
-            $tag["attributes"] = array();
-        }
-        
-        // qualified name is not given
-        if (!isset($tag["qname"])) {
-            // check for namespace
-            if (isset($tag["namespace"]) && !empty($tag["namespace"])) {
-                $tag["qname"] = $tag["namespace"].":".$tag["localPart"];
-            } else {
-                $tag["qname"] = $tag["localPart"];
-            }
-        // namespace URI is set, but no namespace
-        } elseif (isset($tag["namespaceUri"]) && !isset($tag["namespace"])) {
-            $parts = PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName($tag["qname"]);
-            $tag["localPart"] = $parts["localPart"];
-            if (isset($parts["namespace"])) {
-                $tag["namespace"] = $parts["namespace"];
-            }
-        }
-
-        if (isset($tag["namespaceUri"]) && !empty($tag["namespaceUri"])) {
-            // is a namespace given
-            if (isset($tag["namespace"]) && !empty($tag["namespace"])) {
-                $tag["attributes"]["xmlns:".$tag["namespace"]] = $tag["namespaceUri"];
-            } else {
-                // define this Uri as the default namespace
-                $tag["attributes"]["xmlns"] = $tag["namespaceUri"];
-            }
-        }
-
-        // check for multiline attributes
-        if ($multiline === true) {
-            if ($indent === "_auto") {
-                $indent = str_repeat(" ", (strlen($tag["qname"])+2));
-            }
-        }
-        
-        // create attribute list
-        $attList    =   PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($tag["attributes"], true, $multiline, $indent, $linebreak );
-        if (!isset($tag["content"]) || (string)$tag["content"] == '') {
-            $tag    =   sprintf("<%s%s />", $tag["qname"], $attList);
-        } else {
-            if ($replaceEntities == PEAR_PackageFile_Generator_v2_XML_Util_REPLACE_ENTITIES) {
-                $tag["content"] = PEAR_PackageFile_Generator_v2_XML_Util::replaceEntities($tag["content"], $encoding);
-            } elseif ($replaceEntities == PEAR_PackageFile_Generator_v2_XML_Util_CDATA_SECTION) {
-                $tag["content"] = PEAR_PackageFile_Generator_v2_XML_Util::createCDataSection($tag["content"]);
-            }
-            $tag    =   sprintf("<%s%s>%s</%s>", $tag["qname"], $attList, $tag["content"], $tag["qname"] );
-        }        
-        return  $tag;
-    }
-
-   /**
-    * create a start element
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML start element:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createStartElement("myNs:myTag", array("foo" => "bar") ,"http://www.w3c.org/myNs#");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $qname             qualified tagname (including namespace)
-    * @param    array   $attributes        array containg attributes
-    * @param    string  $namespaceUri      URI of the namespace
-    * @param    boolean $multiline         whether to create a multiline tag where each attribute gets written to a single line
-    * @param    string  $indent            string used to indent attributes (_auto indents attributes so they start at the same column)
-    * @param    string  $linebreak         string used for linebreaks
-    * @return   string  $string            XML start element
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createEndElement(), PEAR_PackageFile_Generator_v2_XML_Util::createTag()
-    */
-    function createStartElement($qname, $attributes = array(), $namespaceUri = null, $multiline = false, $indent = '_auto', $linebreak = "\n")
-    {
-        // if no attributes hav been set, use empty attributes
-        if (!isset($attributes) || !is_array($attributes)) {
-            $attributes = array();
-        }
-        
-        if ($namespaceUri != null) {
-            $parts = PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName($qname);
-        }
-
-        // check for multiline attributes
-        if ($multiline === true) {
-            if ($indent === "_auto") {
-                $indent = str_repeat(" ", (strlen($qname)+2));
-            }
-        }
-
-        if ($namespaceUri != null) {
-            // is a namespace given
-            if (isset($parts["namespace"]) && !empty($parts["namespace"])) {
-                $attributes["xmlns:".$parts["namespace"]] = $namespaceUri;
-            } else {
-                // define this Uri as the default namespace
-                $attributes["xmlns"] = $namespaceUri;
-            }
-        }
-
-        // create attribute list
-        $attList    =   PEAR_PackageFile_Generator_v2_XML_Util::attributesToString($attributes, true, $multiline, $indent, $linebreak);
-        $element    =   sprintf("<%s%s>", $qname, $attList);
-        return  $element;
-    }
-
-   /**
-    * create an end element
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML start element:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createEndElement("myNs:myTag");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $qname             qualified tagname (including namespace)
-    * @return   string  $string            XML end element
-    * @see      PEAR_PackageFile_Generator_v2_XML_Util::createStartElement(), PEAR_PackageFile_Generator_v2_XML_Util::createTag()
-    */
-    function createEndElement($qname)
-    {
-        $element    =   sprintf("</%s>", $qname);
-        return  $element;
-    }
-    
-   /**
-    * create an XML comment
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create an XML start element:
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createComment("I am a comment");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $content           content of the comment
-    * @return   string  $comment           XML comment
-    */
-    function createComment($content)
-    {
-        $comment    =   sprintf("<!-- %s -->", $content);
-        return  $comment;
-    }
-    
-   /**
-    * create a CData section
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // create a CData section
-    * $tag = PEAR_PackageFile_Generator_v2_XML_Util::createCDataSection("I am content.");
-    * </code>
-    *
-    * @access   public
-    * @static
-    * @param    string  $data              data of the CData section
-    * @return   string  $string            CData section with content
-    */
-    function createCDataSection($data)
-    {
-        return  sprintf("<![CDATA[%s]]>", $data);
-    }
-
-   /**
-    * split qualified name and return namespace and local part
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // split qualified tag
-    * $parts = PEAR_PackageFile_Generator_v2_XML_Util::splitQualifiedName("xslt:stylesheet");
-    * </code>
-    * the returned array will contain two elements:
-    * <pre>
-    * array(
-    *       "namespace" => "xslt",
-    *       "localPart" => "stylesheet"
-    *      );
-    * </pre>
-    *
-    * @access public
-    * @static
-    * @param  string    $qname      qualified tag name
-    * @param  string    $defaultNs  default namespace (optional)
-    * @return array     $parts      array containing namespace and local part
-    */
-    function splitQualifiedName($qname, $defaultNs = null)
-    {
-        if (strstr($qname, ':')) {
-            $tmp = explode(":", $qname);
-            return array(
-                          "namespace" => $tmp[0],
-                          "localPart" => $tmp[1]
-                        );
-        }
-        return array(
-                      "namespace" => $defaultNs,
-                      "localPart" => $qname
-                    );
-    }
-
-   /**
-    * check, whether string is valid XML name
-    *
-    * <p>XML names are used for tagname, attribute names and various
-    * other, lesser known entities.</p>
-    * <p>An XML name may only consist of alphanumeric characters,
-    * dashes, undescores and periods, and has to start with a letter
-    * or an underscore.
-    * </p>
-    *
-    * <code>
-    * require_once 'XML/Util.php';
-    * 
-    * // verify tag name
-    * $result = PEAR_PackageFile_Generator_v2_XML_Util::isValidName("invalidTag?");
-    * if (PEAR_PackageFile_Generator_v2_XML_Util::isError($result)) {
-    *    print "Invalid XML name: " . $result->getMessage();
-    * }
-    * </code>
-    *
-    * @access  public
-    * @static
-    * @param   string  $string string that should be checked
-    * @return  mixed   $valid  true, if string is a valid XML name, PEAR error otherwise
-    * @todo    support for other charsets
-    */
-    function isValidName($string)
-    {
-        // check for invalid chars
-        if (!preg_match("/^[[:alnum:]_\-.]\\z/", $string{0})) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( "XML names may only start with letter or underscore", PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_START );
-        }
-        
-        // check for invalid chars
-        if (!preg_match("/^([a-zA-Z_]([a-zA-Z0-9_\-\.]*)?:)?[a-zA-Z_]([a-zA-Z0-9_\-\.]+)?\\z/", $string)) {
-            return PEAR_PackageFile_Generator_v2_XML_Util::raiseError( "XML names may only contain alphanumeric chars, period, hyphen, colon and underscores", PEAR_PackageFile_Generator_v2_XML_Util_ERROR_INVALID_CHARS );
-         }
-        // XML name is valid
-        return true;
-    }
-
-   /**
-    * replacement for PEAR_PackageFile_Generator_v2_XML_Util::raiseError
-    *
-    * Avoids the necessity to always require
-    * PEAR.php
-    *
-    * @access   public
-    * @param    string      error message
-    * @param    integer     error code
-    * @return   object PEAR_Error
-    */
-    function raiseError($msg, $code)
-    {
-        require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
-        return PEAR::raiseError($msg, $code);
-    }
-}
-?><?php
+}<?php
 /**
  * package.xml parsing class, package.xml version 1.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v1.php,v 1.27 2008/01/03 20:55:16 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v1.php,v 1.30 2009/02/24 23:45:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -76182,9 +75205,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -76491,7 +75514,6 @@ class PEAR_PackageFile_Parser_v1
                 $this->current_maintainer['role'] = $data;
                 break;
             case 'version':
-                //$data = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $data);
                 if ($this->in_changelog) {
                     $this->current_release['version'] = $data;
                 } else {
@@ -76508,7 +75530,8 @@ class PEAR_PackageFile_Parser_v1
             case 'notes':
                 // try to "de-indent" release notes in case someone
                 // has been over-indenting their xml ;-)
-                $data = $this->_unIndent($this->cdata);
+                // Trim only on the right side
+                $data = rtrim($this->_unIndent($this->cdata));
                 if ($this->in_changelog) {
                     $this->current_release['release_notes'] = $data;
                 } else {
@@ -76622,18 +75645,12 @@ class PEAR_PackageFile_Parser_v1
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v2.php,v 1.21 2008/01/03 20:26:37 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v2.php,v 1.24 2009/02/24 23:45:22 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -76647,9 +75664,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -76722,1652 +75739,1642 @@ class PEAR_PackageFile_Parser_v2 extends PEAR_XMLParser
         if (PEAR::isError($err = parent::parse($data, $file))) {
             return $err;
         }
+
         $ret = new $class;
+        $ret->encoding = $this->encoding;
         $ret->setConfig($this->_config);
         if (isset($this->_logger)) {
             $ret->setLogger($this->_logger);
         }
+
         $ret->fromArray($this->_unserializedData);
         $ret->setPackagefile($file, $archive);
         return $ret;
     }
-}
-?><?php
-/**
- * PEAR_PackageFile_v1, package.xml version 1.0
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v1.php,v 1.74 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-/**
- * For error handling
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ErrorStack.php';
-
-/**
- * Error code if parsing is attempted with no xml extension
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_XML_EXT', 3);
-
-/**
- * Error code if creating the xml parser resource fails
- */
-define('PEAR_PACKAGEFILE_ERROR_CANT_MAKE_PARSER', 4);
-
-/**
- * Error code used for all sax xml parsing errors
- */
-define('PEAR_PACKAGEFILE_ERROR_PARSER_ERROR', 5);
-
-/**
- * Error code used when there is no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_NAME', 6);
-
-/**
- * Error code when a package name is not valid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_NAME', 7);
-
-/**
- * Error code used when no summary is parsed
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_SUMMARY', 8);
-
-/**
- * Error code for summaries that are more than 1 line
- */
-define('PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY', 9);
-
-/**
- * Error code used when no description is present
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION', 10);
-
-/**
- * Error code used when no license is present
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_LICENSE', 11);
-
-/**
- * Error code used when a <version> version number is not present
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_VERSION', 12);
-
-/**
- * Error code used when a <version> version number is invalid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_VERSION', 13);
-
-/**
- * Error code when release state is missing
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_STATE', 14);
-
-/**
- * Error code when release state is invalid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_STATE', 15);
-
-/**
- * Error code when release state is missing
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DATE', 16);
-
-/**
- * Error code when release state is invalid
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DATE', 17);
-
-/**
- * Error code when no release notes are found
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_NOTES', 18);
-
-/**
- * Error code when no maintainers are found
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS', 19);
-
-/**
- * Error code when a maintainer has no handle
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE', 20);
-
-/**
- * Error code when a maintainer has no handle
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE', 21);
-
-/**
- * Error code when a maintainer has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME', 22);
-
-/**
- * Error code when a maintainer has no email
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL', 23);
-
-/**
- * Error code when a maintainer has no handle
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_MAINTROLE', 24);
-
-/**
- * Error code when a dependency is not a PHP dependency, but has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPNAME', 25);
-
-/**
- * Error code when a dependency has no type (pkg, php, etc.)
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE', 26);
-
-/**
- * Error code when a dependency has no relation (lt, ge, has, etc.)
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPREL', 27);
-
-/**
- * Error code when a dependency is not a 'has' relation, but has no version
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION', 28);
-
-/**
- * Error code when a dependency has an invalid relation
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPREL', 29);
-
-/**
- * Error code when a dependency has an invalid type
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPTYPE', 30);
-
-/**
- * Error code when a dependency has an invalid optional option
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL', 31);
-
-/**
- * Error code when a dependency is a pkg dependency, and has an invalid package name
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPNAME', 32);
-
-/**
- * Error code when a dependency has a channel="foo" attribute, and foo is not a registered channel
- */
-define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_DEPCHANNEL', 33);
-
-/**
- * Error code when rel="has" and version attribute is present.
- */
-define('PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED', 34);
-
-/**
- * Error code when type="php" and dependency name is present
- */
-define('PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED', 35);
-
-/**
- * Error code when a configure option has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_CONFNAME', 36);
-
-/**
- * Error code when a configure option has no name
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT', 37);
-
-/**
- * Error code when a file in the filelist has an invalid role
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE', 38);
-
-/**
- * Error code when a file in the filelist has no role
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_FILEROLE', 39);
-
-/**
- * Error code when analyzing a php source file that has parse errors
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE', 40);
-
-/**
- * Error code when analyzing a php source file reveals a source element
- * without a package name prefix
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX', 41);
-
-/**
- * Error code when an unknown channel is specified
- */
-define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_CHANNEL', 42);
-
-/**
- * Error code when no files are found in the filelist
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_FILES', 43);
-
-/**
- * Error code when a file is not valid php according to _analyzeSourceCode()
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_FILE', 44);
-
-/**
- * Error code when the channel validator returns an error or warning
- */
-define('PEAR_PACKAGEFILE_ERROR_CHANNELVAL', 45);
-
-/**
- * Error code when a php5 package is packaged in php4 (analysis doesn't work)
- */
-define('PEAR_PACKAGEFILE_ERROR_PHP5', 46);
-
-/**
- * Error code when a file is listed in package.xml but does not exist
- */
-define('PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND', 47);
-
-/**
- * Error code when a <dep type="php" rel="not"... is encountered (use rel="ne")
- */
-define('PEAR_PACKAGEFILE_PHP_NO_NOT', 48);
-
-/**
- * Error code when a package.xml contains non-ISO-8859-1 characters
- */
-define('PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS', 49);
-
-/**
- * Error code when a dependency is not a 'has' relation, but has no version
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION', 50);
-
-/**
- * Error code when a package has no lead developer
- */
-define('PEAR_PACKAGEFILE_ERROR_NO_LEAD', 51);
-
-/**
- * Error code when a filename begins with "."
- */
-define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
-/**
- * package.xml encapsulator
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_PackageFile_v1
-{
-    /**
-     * @access private
-     * @var PEAR_ErrorStack
-     * @access private
-     */
-    var $_stack;
-
-    /**
-     * A registry object, used to access the package name validation regex for non-standard channels
-     * @var PEAR_Registry
-     * @access private
-     */
-    var $_registry;
-
-    /**
-     * An object that contains a log method that matches PEAR_Common::log's signature
-     * @var object
-     * @access private
-     */
-    var $_logger;
-
-    /**
-     * Parsed package information
-     * @var array
-     * @access private
-     */
-    var $_packageInfo;
-
-    /**
-     * path to package.xml
-     * @var string
-     * @access private
-     */
-    var $_packageFile;
-
-    /**
-     * path to package .tgz or false if this is a local/extracted package.xml
-     * @var string
-     * @access private
-     */
-    var $_archiveFile;
-
-    /**
-     * @var int
-     * @access private
-     */
-    var $_isValid = 0;
-
-    /**
-     * Determines whether this packagefile was initialized only with partial package info
-     *
-     * If this package file was constructed via parsing REST, it will only contain
-     *
-     * - package name
-     * - channel name
-     * - dependencies 
-     * @var boolean
-     * @access private
-     */
-    var $_incomplete = true;
-
-    /**
-     * @param bool determines whether to return a PEAR_Error object, or use the PEAR_ErrorStack
-     * @param string Name of Error Stack class to use.
-     */
-    function PEAR_PackageFile_v1()
-    {
-        $this->_stack = &new PEAR_ErrorStack('PEAR_PackageFile_v1');
-        $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
-        $this->_isValid = 0;
-    }
-
-    function installBinary($installer)
-    {
-        return false;
-    }
-
-    function isExtension($name)
-    {
-        return false;
-    }
-
-    function setConfig(&$config)
-    {
-        $this->_config = &$config;
-        $this->_registry = &$config->getRegistry();
-    }
-
-    function setRequestedGroup()
-    {
-        // placeholder
-    }
-
-    /**
-     * For saving in the registry.
-     *
-     * Set the last version that was installed
-     * @param string
-     */
-    function setLastInstalledVersion($version)
-    {
-        $this->_packageInfo['_lastversion'] = $version;
-    }
-
-    /**
-     * @return string|false
-     */
-    function getLastInstalledVersion()
-    {
-        if (isset($this->_packageInfo['_lastversion'])) {
-            return $this->_packageInfo['_lastversion'];
-        }
-        return false;
-    }
-
-    function getInstalledBinary()
-    {
-        return false;
-    }
-
-    function listPostinstallScripts()
-    {
-        return false;
-    }
-
-    function initPostinstallScripts()
-    {
-        return false;
-    }
-
-    function setLogger(&$logger)
-    {
-        if ($logger && (!is_object($logger) || !method_exists($logger, 'log'))) {
-            return PEAR::raiseError('Logger must be compatible with PEAR_Common::log');
-        }
-        $this->_logger = &$logger;
-    }
-
-    function setPackagefile($file, $archive = false)
-    {
-        $this->_packageFile = $file;
-        $this->_archiveFile = $archive ? $archive : $file;
-    }
-
-    function getPackageFile()
-    {
-        return isset($this->_packageFile) ? $this->_packageFile : false;
-    }
-
-    function getPackageType()
-    {
-        return 'php';
-    }
-
-    function getArchiveFile()
-    {
-        return $this->_archiveFile;
-    }
-
-    function packageInfo($field)
-    {
-        if (!is_string($field) || empty($field) ||
-            !isset($this->_packageInfo[$field])) {
-            return false;
-        }
-        return $this->_packageInfo[$field];
-    }
-
-    function setDirtree($path)
-    {
-        if (!isset($this->_packageInfo['dirtree'])) {
-            $this->_packageInfo['dirtree'] = array();
-        }
-        $this->_packageInfo['dirtree'][$path] = true;
-    }
-
-    function getDirtree()
-    {
-        if (isset($this->_packageInfo['dirtree']) && count($this->_packageInfo['dirtree'])) {
-            return $this->_packageInfo['dirtree'];
-        }
-        return false;
-    }
-
-    function resetDirtree()
-    {
-        unset($this->_packageInfo['dirtree']);
-    }
-
-    function fromArray($pinfo)
-    {
-        $this->_incomplete = false;
-        $this->_packageInfo = $pinfo;
-    }
-
-    function isIncomplete()
-    {
-        return $this->_incomplete;
-    }
-
-    function getChannel()
-    {
-        return 'pear.php.net';
-    }
-
-    function getUri()
-    {
-        return false;
-    }
-
-    function getTime()
-    {
-        return false;
-    }
-
-    function getExtends()
-    {
-        if (isset($this->_packageInfo['extends'])) {
-            return $this->_packageInfo['extends'];
-        }
-        return false;
-    }
-
-    /**
-     * @return array
-     */
-    function toArray()
-    {
-        if (!$this->validate(PEAR_VALIDATE_NORMAL)) {
-            return false;
-        }
-        return $this->getArray();
-    }
-
-    function getArray()
-    {
-        return $this->_packageInfo;
-    }
-
-    function getName()
-    {
-        return $this->getPackage();
-    }
-
-    function getPackage()
-    {
-        if (isset($this->_packageInfo['package'])) {
-            return $this->_packageInfo['package'];
-        }
-        return false;
-    }
-
-    /**
-     * WARNING - don't use this unless you know what you are doing
-     */
-    function setRawPackage($package)
-    {
-        $this->_packageInfo['package'] = $package;
-    }
-
-    function setPackage($package)
-    {
-        $this->_packageInfo['package'] = $package;
-        $this->_isValid = false;
-    }
-
-    function getVersion()
-    {
-        if (isset($this->_packageInfo['version'])) {
-            return $this->_packageInfo['version'];
-        }
-        return false;
-    }
-
-    function setVersion($version)
-    {
-        $this->_packageInfo['version'] = $version;
-        $this->_isValid = false;
-    }
-
-    function clearMaintainers()
-    {
-        unset($this->_packageInfo['maintainers']);
-    }
-
-    function getMaintainers()
-    {
-        if (isset($this->_packageInfo['maintainers'])) {
-            return $this->_packageInfo['maintainers'];
-        }
-        return false;
-    }
-
-    /**
-     * Adds a new maintainer - no checking of duplicates is performed, use
-     * updatemaintainer for that purpose.
-     */
-    function addMaintainer($role, $handle, $name, $email)
-    {
-        $this->_packageInfo['maintainers'][] =
-            array('handle' => $handle, 'role' => $role, 'email' => $email, 'name' => $name);
-        $this->_isValid = false;
-    }
-
-    function updateMaintainer($role, $handle, $name, $email)
-    {
-        $found = false;
-        if (!isset($this->_packageInfo['maintainers']) ||
-              !is_array($this->_packageInfo['maintainers'])) {
-            return $this->addMaintainer($role, $handle, $name, $email);
-        }
-        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
-            if ($maintainer['handle'] == $handle) {
-                $found = $i;
-                break;
-            }
-        }
-        if ($found !== false) {
-            unset($this->_packageInfo['maintainers'][$found]);
-            $this->_packageInfo['maintainers'] =
-                array_values($this->_packageInfo['maintainers']);
-        }
-        $this->addMaintainer($role, $handle, $name, $email);
-    }
-
-    function deleteMaintainer($handle)
-    {
-        $found = false;
-        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
-            if ($maintainer['handle'] == $handle) {
-                $found = $i;
-                break;
-            }
-        }
-        if ($found !== false) {
-            unset($this->_packageInfo['maintainers'][$found]);
-            $this->_packageInfo['maintainers'] =
-                array_values($this->_packageInfo['maintainers']);
-            return true;
-        }
-        return false;
-    }
-
-    function getState()
-    {
-        if (isset($this->_packageInfo['release_state'])) {
-            return $this->_packageInfo['release_state'];
-        }
-        return false;
-    }
-
-    function setRawState($state)
-    {
-        $this->_packageInfo['release_state'] = $state;
-    }
-
-    function setState($state)
-    {
-        $this->_packageInfo['release_state'] = $state;
-        $this->_isValid = false;
-    }
-
-    function getDate()
-    {
-        if (isset($this->_packageInfo['release_date'])) {
-            return $this->_packageInfo['release_date'];
-        }
-        return false;
-    }
-
-    function setDate($date)
-    {
-        $this->_packageInfo['release_date'] = $date;
-        $this->_isValid = false;
-    }
-
-    function getLicense()
-    {
-        if (isset($this->_packageInfo['release_license'])) {
-            return $this->_packageInfo['release_license'];
-        }
-        return false;
-    }
-
-    function setLicense($date)
-    {
-        $this->_packageInfo['release_license'] = $date;
-        $this->_isValid = false;
-    }
-
-    function getSummary()
-    {
-        if (isset($this->_packageInfo['summary'])) {
-            return $this->_packageInfo['summary'];
-        }
-        return false;
-    }
-
-    function setSummary($summary)
-    {
-        $this->_packageInfo['summary'] = $summary;
-        $this->_isValid = false;
-    }
-
-    function getDescription()
-    {
-        if (isset($this->_packageInfo['description'])) {
-            return $this->_packageInfo['description'];
-        }
-        return false;
-    }
-
-    function setDescription($desc)
-    {
-        $this->_packageInfo['description'] = $desc;
-        $this->_isValid = false;
-    }
-
-    function getNotes()
-    {
-        if (isset($this->_packageInfo['release_notes'])) {
-            return $this->_packageInfo['release_notes'];
-        }
-        return false;
-    }
-
-    function setNotes($notes)
-    {
-        $this->_packageInfo['release_notes'] = $notes;
-        $this->_isValid = false;
-    }
-
-    function getDeps()
-    {
-        if (isset($this->_packageInfo['release_deps'])) {
-            return $this->_packageInfo['release_deps'];
-        }
-        return false;
-    }
-
-    /**
-     * Reset dependencies prior to adding new ones
-     */
-    function clearDeps()
-    {
-        unset($this->_packageInfo['release_deps']);
-    }
-
-    function addPhpDep($version, $rel)
-    {
-        $this->_isValid = false;
-        $this->_packageInfo['release_deps'][] =
-            array('type' => 'php',
-                  'rel' => $rel,
-                  'version' => $version);
-    }
-
-    function addPackageDep($name, $version, $rel, $optional = 'no')
-    {
-        $this->_isValid = false;
-        $dep =
-            array('type' => 'pkg',
-                  'name' => $name,
-                  'rel' => $rel,
-                  'optional' => $optional);
-        if ($rel != 'has' && $rel != 'not') {
-            $dep['version'] = $version;
-        }
-        $this->_packageInfo['release_deps'][] = $dep;
-    }
-
-    function addExtensionDep($name, $version, $rel, $optional = 'no')
-    {
-        $this->_isValid = false;
-        $this->_packageInfo['release_deps'][] =
-            array('type' => 'ext',
-                  'name' => $name,
-                  'rel' => $rel,
-                  'version' => $version,
-                  'optional' => $optional);
-    }
-
-    /**
-     * WARNING - do not use this function directly unless you know what you're doing
-     */
-    function setDeps($deps)
-    {
-        $this->_packageInfo['release_deps'] = $deps;
-    }
-
-    function hasDeps()
-    {
-        return isset($this->_packageInfo['release_deps']) &&
-            count($this->_packageInfo['release_deps']);
-    }
-
-    function getDependencyGroup($group)
-    {
-        return false;
-    }
-
-    function isCompatible($pf)
-    {
-        return false;
-    }
-
-    function isSubpackageOf($p)
-    {
-        return $p->isSubpackage($this);
-    }
-
-    function isSubpackage($p)
-    {
-        return false;
-    }
-
-    function dependsOn($package, $channel)
-    {
-        if (strtolower($channel) != 'pear.php.net') {
-            return false;
-        }
-        if (!($deps = $this->getDeps())) {
-            return false;
-        }
-        foreach ($deps as $dep) {
-            if ($dep['type'] != 'pkg') {
-                continue;
-            }
-            if (strtolower($dep['name']) == strtolower($package)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    function getConfigureOptions()
-    {
-        if (isset($this->_packageInfo['configure_options'])) {
-            return $this->_packageInfo['configure_options'];
-        }
-        return false;
-    }
-
-    function hasConfigureOptions()
-    {
-        return isset($this->_packageInfo['configure_options']) &&
-            count($this->_packageInfo['configure_options']);
-    }
-
-    function addConfigureOption($name, $prompt, $default = false)
-    {
-        $o = array('name' => $name, 'prompt' => $prompt);
-        if ($default !== false) {
-            $o['default'] = $default;
-        }
-        if (!isset($this->_packageInfo['configure_options'])) {
-            $this->_packageInfo['configure_options'] = array();
-        }
-        $this->_packageInfo['configure_options'][] = $o;
-    }
-
-    function clearConfigureOptions()
-    {
-        unset($this->_packageInfo['configure_options']);
-    }
-
-    function getProvides()
-    {
-        if (isset($this->_packageInfo['provides'])) {
-            return $this->_packageInfo['provides'];
-        }
-        return false;
-    }
-
-    function getProvidesExtension()
-    {
-        return false;
-    }
-
-    function addFile($dir, $file, $attrs)
-    {
-        $dir = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'), $dir);
-        if ($dir == '/' || $dir == '') {
-            $dir = '';
-        } else {
-            $dir .= '/';
-        }
-        $file = $dir . $file;
-        $file = preg_replace('![\\/]+!', '/', $file);
-        $this->_packageInfo['filelist'][$file] = $attrs;
-    }
-
-    function getInstallationFilelist()
-    {
-        return $this->getFilelist();
-    }
-
-    function getFilelist()
-    {
-        if (isset($this->_packageInfo['filelist'])) {
-            return $this->_packageInfo['filelist'];
-        }
-        return false;
-    }
-
-    function setFileAttribute($file, $attr, $value)
-    {
-        $this->_packageInfo['filelist'][$file][$attr] = $value;
-    }
-
-    function resetFilelist()
-    {
-        $this->_packageInfo['filelist'] = array();
-    }
-
-    function setInstalledAs($file, $path)
-    {
-        if ($path) {
-            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
-        }
-        unset($this->_packageInfo['filelist'][$file]['installed_as']);
-    }
-
-    function installedFile($file, $atts)
-    {
-        if (isset($this->_packageInfo['filelist'][$file])) {
-            $this->_packageInfo['filelist'][$file] =
-                array_merge($this->_packageInfo['filelist'][$file], $atts);
-        } else {
-            $this->_packageInfo['filelist'][$file] = $atts;
-        }
-    }
-
-    function getChangelog()
-    {
-        if (isset($this->_packageInfo['changelog'])) {
-            return $this->_packageInfo['changelog'];
-        }
-        return false;
-    }
-
-    function getPackagexmlVersion()
-    {
-        return '1.0';
-    }
-
-    /**
-     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
-     * @param boolean determines whether to purge the error stack after retrieving
-     * @return array
-     */
-    function getValidationWarnings($purge = true)
-    {
-        return $this->_stack->getErrors($purge);
-    }
-
-    // }}}
-    /**
-     * Validation error.  Also marks the object contents as invalid
-     * @param error code
-     * @param array error information
-     * @access private
-     */
-    function _validateError($code, $params = array())
-    {
-        $this->_stack->push($code, 'error', $params, false, false, debug_backtrace());
-        $this->_isValid = false;
-    }
-
-    /**
-     * Validation warning.  Does not mark the object contents invalid.
-     * @param error code
-     * @param array error information
-     * @access private
-     */
-    function _validateWarning($code, $params = array())
-    {
-        $this->_stack->push($code, 'warning', $params, false, false, debug_backtrace());
-    }
-
-    /**
-     * @param integer error code
-     * @access protected
-     */
-    function _getErrorMessage()
-    {
-        return array(
-                PEAR_PACKAGEFILE_ERROR_NO_NAME =>
-                    'Missing Package Name',
-                PEAR_PACKAGEFILE_ERROR_NO_SUMMARY =>
-                    'No summary found',
-                PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY =>
-                    'Summary should be on one line',
-                PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION =>
-                    'Missing description',
-                PEAR_PACKAGEFILE_ERROR_NO_LICENSE =>
-                    'Missing license',
-                PEAR_PACKAGEFILE_ERROR_NO_VERSION =>
-                    'No release version found',
-                PEAR_PACKAGEFILE_ERROR_NO_STATE =>
-                    'No release state found',
-                PEAR_PACKAGEFILE_ERROR_NO_DATE =>
-                    'No release date found',
-                PEAR_PACKAGEFILE_ERROR_NO_NOTES =>
-                    'No release notes found',
-                PEAR_PACKAGEFILE_ERROR_NO_LEAD =>
-                    'Package must have at least one lead maintainer',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS =>
-                    'No maintainers found, at least one must be defined',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE =>
-                    'Maintainer %index% has no handle (user ID at channel server)',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE =>
-                    'Maintainer %index% has no role',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME =>
-                    'Maintainer %index% has no name',
-                PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL =>
-                    'Maintainer %index% has no email',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPNAME =>
-                    'Dependency %index% is not a php dependency, and has no name',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPREL =>
-                    'Dependency %index% has no relation (rel)',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE =>
-                    'Dependency %index% has no type',
-                PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED =>
-                    'PHP Dependency %index% has a name attribute of "%name%" which will be' .
-                        ' ignored!',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION =>
-                    'Dependency %index% is not a rel="has" or rel="not" dependency, ' .
-                        'and has no version',
-                PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION =>
-                    'Dependency %index% is a type="php" dependency, ' .
-                        'and has no version',
-                PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED =>
-                    'Dependency %index% is a rel="%rel%" dependency, versioning is ignored',
-                PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL =>
-                    'Dependency %index% has invalid optional value "%opt%", should be yes or no',
-                PEAR_PACKAGEFILE_PHP_NO_NOT =>
-                    'Dependency %index%: php dependencies cannot use "not" rel, use "ne"' .
-                        ' to exclude specific versions',
-                PEAR_PACKAGEFILE_ERROR_NO_CONFNAME =>
-                    'Configure Option %index% has no name',
-                PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT =>
-                    'Configure Option %index% has no prompt',
-                PEAR_PACKAGEFILE_ERROR_NO_FILES =>
-                    'No files in <filelist> section of package.xml',
-                PEAR_PACKAGEFILE_ERROR_NO_FILEROLE =>
-                    'File "%file%" has no role, expecting one of "%roles%"',
-                PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE =>
-                    'File "%file%" has invalid role "%role%", expecting one of "%roles%"',
-                PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME =>
-                    'File "%file%" cannot start with ".", cannot package or install',
-                PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE =>
-                    'Parser error: invalid PHP found in file "%file%"',
-                PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX =>
-                    'in %file%: %type% "%name%" not prefixed with package name "%package%"',
-                PEAR_PACKAGEFILE_ERROR_INVALID_FILE =>
-                    'Parser error: invalid PHP file "%file%"',
-                PEAR_PACKAGEFILE_ERROR_CHANNELVAL =>
-                    'Channel validator error: field "%field%" - %reason%',
-                PEAR_PACKAGEFILE_ERROR_PHP5 =>
-                    'Error, PHP5 token encountered in %file%, analysis should be in PHP5',
-                PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND =>
-                    'File "%file%" in package.xml does not exist',
-                PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS =>
-                    'Package.xml contains non-ISO-8859-1 characters, and may not validate',
-            );
-    }
-
-    /**
-     * Validate XML package definition file.
-     *
-     * @access public
-     * @return boolean
-     */
-    function validate($state = PEAR_VALIDATE_NORMAL, $nofilechecking = false)
-    {
-        if (($this->_isValid & $state) == $state) {
-            return true;
-        }
-        $this->_isValid = true;
-        $info = $this->_packageInfo;
-        if (empty($info['package'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NAME);
-            $this->_packageName = $pn = 'unknown';
-        } else {
-            $this->_packageName = $pn = $info['package'];
-        }
-
-        if (empty($info['summary'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_SUMMARY);
-        } elseif (strpos(trim($info['summary']), "\n") !== false) {
-            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY,
-                array('summary' => $info['summary']));
-        }
-        if (empty($info['description'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION);
-        }
-        if (empty($info['release_license'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LICENSE);
-        }
-        if (empty($info['version'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_VERSION);
-        }
-        if (empty($info['release_state'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_STATE);
-        }
-        if (empty($info['release_date'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DATE);
-        }
-        if (empty($info['release_notes'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NOTES);
-        }
-        if (empty($info['maintainers'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS);
-        } else {
-            $haslead = false;
-            $i = 1;
-            foreach ($info['maintainers'] as $m) {
-                if (empty($m['handle'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE,
-                        array('index' => $i));
-                }
-                if (empty($m['role'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE,
-                        array('index' => $i, 'roles' => PEAR_Common::getUserRoles()));
-                } elseif ($m['role'] == 'lead') {
-                    $haslead = true;
-                }
-                if (empty($m['name'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME,
-                        array('index' => $i));
-                }
-                if (empty($m['email'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL,
-                        array('index' => $i));
-                }
-                $i++;
-            }
-            if (!$haslead) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LEAD);
-            }
-        }
-        if (!empty($info['release_deps'])) {
-            $i = 1;
-            foreach ($info['release_deps'] as $d) {
-                if (!isset($d['type']) || empty($d['type'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE,
-                        array('index' => $i, 'types' => PEAR_Common::getDependencyTypes()));
-                    continue;
-                }
-                if (!isset($d['rel']) || empty($d['rel'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPREL,
-                        array('index' => $i, 'rels' => PEAR_Common::getDependencyRelations()));
-                    continue;
-                }
-                if (!empty($d['optional'])) {
-                    if (!in_array($d['optional'], array('yes', 'no'))) {
-                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL,
-                            array('index' => $i, 'opt' => $d['optional']));
-                    }
-                }
-                if ($d['rel'] != 'has' && $d['rel'] != 'not' && empty($d['version'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION,
-                        array('index' => $i));
-                } elseif (($d['rel'] == 'has' || $d['rel'] == 'not') && !empty($d['version'])) {
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED,
-                        array('index' => $i, 'rel' => $d['rel']));
-                }
-                if ($d['type'] == 'php' && !empty($d['name'])) {
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED,
-                        array('index' => $i, 'name' => $d['name']));
-                } elseif ($d['type'] != 'php' && empty($d['name'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPNAME,
-                        array('index' => $i));
-                }
-                if ($d['type'] == 'php' && empty($d['version'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION,
-                        array('index' => $i));
-                }
-                if (($d['rel'] == 'not') && ($d['type'] == 'php')) {
-                    $this->_validateError(PEAR_PACKAGEFILE_PHP_NO_NOT,
-                        array('index' => $i));
-                }
-                $i++;
-            }
-        }
-        if (!empty($info['configure_options'])) {
-            $i = 1;
-            foreach ($info['configure_options'] as $c) {
-                if (empty($c['name'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFNAME,
-                        array('index' => $i));
-                }
-                if (empty($c['prompt'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT,
-                        array('index' => $i));
-                }
-                $i++;
-            }
-        }
-        if (empty($info['filelist'])) {
-            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILES);
-            $errors[] = 'no files';
-        } else {
-            foreach ($info['filelist'] as $file => $fa) {
-                if (empty($fa['role'])) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILEROLE,
-                        array('file' => $file, 'roles' => PEAR_Common::getFileRoles()));
-                    continue;
-                } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE,
-                        array('file' => $file, 'role' => $fa['role'], 'roles' => PEAR_Common::getFileRoles()));
-                }
-                if (preg_match('~/\.\.?(/|\\z)|^\.\.?/~', str_replace('\\', '/', $file))) {
-                    // file contains .. parent directory or . cur directory references
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
-                        array('file' => $file));
-                }
-                if (isset($fa['install-as']) &&
-                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
-                                 str_replace('\\', '/', $fa['install-as']))) {
-                    // install-as contains .. parent directory or . cur directory references
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
-                        array('file' => $file . ' [installed as ' . $fa['install-as'] . ']'));
-                }
-                if (isset($fa['baseinstalldir']) &&
-                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
-                                 str_replace('\\', '/', $fa['baseinstalldir']))) {
-                    // install-as contains .. parent directory or . cur directory references
-                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
-                        array('file' => $file . ' [baseinstalldir ' . $fa['baseinstalldir'] . ']'));
-                }
-            }
-        }
-        if (isset($this->_registry) && $this->_isValid) {
-            $chan = $this->_registry->getChannel('pear.php.net');
-            if (PEAR::isError($chan)) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $chan->getMessage());
-                return $this->_isValid = 0;
-            }
-            $validator = $chan->getValidationObject();
-            $validator->setPackageFile($this);
-            $validator->validate($state);
-            $failures = $validator->getFailures();
-            foreach ($failures['errors'] as $error) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $error);
-            }
-            foreach ($failures['warnings'] as $warning) {
-                $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $warning);
-            }
-        }
-        if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$nofilechecking) {
-            if ($this->_analyzePhpFiles()) {
-                $this->_isValid = true;
-            }
-        }
-        if ($this->_isValid) {
-            return $this->_isValid = $state;
-        }
-        return $this->_isValid = 0;
-    }
-
-    function _analyzePhpFiles()
-    {
-        if (!$this->_isValid) {
-            return false;
-        }
-        if (!isset($this->_packageFile)) {
-            return false;
-        }
-        $dir_prefix = dirname($this->_packageFile);
-        $common = new PEAR_Common;
-        $log = isset($this->_logger) ? array(&$this->_logger, 'log') :
-            array($common, 'log');
-        $info = $this->getFilelist();
-        foreach ($info as $file => $fa) {
-            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $file)) {
-                $this->_validateError(PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND,
-                    array('file' => realpath($dir_prefix) . DIRECTORY_SEPARATOR . $file));
-                continue;
-            }
-            if ($fa['role'] == 'php' && $dir_prefix) {
-                call_user_func_array($log, array(1, "Analyzing $file"));
-                $srcinfo = $this->_analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
-                if ($srcinfo) {
-                    $this->_buildProvidesArray($srcinfo);
-                }
-            }
-        }
-        $this->_packageName = $pn = $this->getPackage();
-        $pnl = strlen($pn);
-        if (isset($this->_packageInfo['provides'])) {
-            foreach ((array) $this->_packageInfo['provides'] as $key => $what) {
-                if (isset($what['explicit'])) {
-                    // skip conformance checks if the provides entry is
-                    // specified in the package.xml file
-                    continue;
-                }
-                extract($what);
-                if ($type == 'class') {
-                    if (!strncasecmp($name, $pn, $pnl)) {
-                        continue;
-                    }
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
-                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
-                } elseif ($type == 'function') {
-                    if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
-                        continue;
-                    }
-                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
-                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
-                }
-            }
-        }
-        return $this->_isValid;
-    }
-
-    /**
-     * Get the default xml generator object
-     *
-     * @return PEAR_PackageFile_Generator_v1
-     */
-    function &getDefaultGenerator()
-    {
-        if (!class_exists('PEAR_PackageFile_Generator_v1')) {
-            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/Generator/v1.php';
-        }
-        $a = &new PEAR_PackageFile_Generator_v1($this);
-        return $a;
-    }
-
-    /**
-     * Get the contents of a file listed within the package.xml
-     * @param string
-     * @return string
-     */
-    function getFileContents($file)
-    {
-        if ($this->_archiveFile == $this->_packageFile) { // unpacked
-            $dir = dirname($this->_packageFile);
-            $file = $dir . DIRECTORY_SEPARATOR . $file;
-            $file = str_replace(array('/', '\\'),
-                array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
-            if (file_exists($file) && is_readable($file)) {
-                return implode('', file($file));
-            }
-        } else { // tgz
-            if (!class_exists('Archive_Tar')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'Archive/Tar.php';
-            }
-            $tar = &new Archive_Tar($this->_archiveFile);
-            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
-            if ($file != 'package.xml' && $file != 'package2.xml') {
-                $file = $this->getPackage() . '-' . $this->getVersion() . '/' . $file;
-            }
-            $file = $tar->extractInString($file);
-            $tar->popErrorHandling();
-            if (PEAR::isError($file)) {
-                return PEAR::raiseError("Cannot locate file '$file' in archive");
-            }
-            return $file;
-        }
-    }
-
-    // {{{ analyzeSourceCode()
-    /**
-     * Analyze the source code of the given PHP file
-     *
-     * @param  string Filename of the PHP file
-     * @return mixed
-     * @access private
-     */
-    function _analyzeSourceCode($file)
-    {
-        if (!function_exists("token_get_all")) {
-            return false;
-        }
-        if (!defined('T_DOC_COMMENT')) {
-            define('T_DOC_COMMENT', T_COMMENT);
-        }
-        if (!defined('T_INTERFACE')) {
-            define('T_INTERFACE', -1);
-        }
-        if (!defined('T_IMPLEMENTS')) {
-            define('T_IMPLEMENTS', -1);
-        }
-        if (!$fp = @fopen($file, "r")) {
-            return false;
-        }
-        fclose($fp);
-        $contents = file_get_contents($file);
-        $tokens = token_get_all($contents);
-/*
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            @list($token, $data) = $tokens[$i];
-            if (is_string($token)) {
-                var_dump($token);
-            } else {
-                print token_name($token) . ' ';
-                var_dump(rtrim($data));
-            }
-        }
-*/
-        $look_for = 0;
-        $paren_level = 0;
-        $bracket_level = 0;
-        $brace_level = 0;
-        $lastphpdoc = '';
-        $current_class = '';
-        $current_interface = '';
-        $current_class_level = -1;
-        $current_function = '';
-        $current_function_level = -1;
-        $declared_classes = array();
-        $declared_interfaces = array();
-        $declared_functions = array();
-        $declared_methods = array();
-        $used_classes = array();
-        $used_functions = array();
-        $extends = array();
-        $implements = array();
-        $nodeps = array();
-        $inquote = false;
-        $interface = false;
-        for ($i = 0; $i < sizeof($tokens); $i++) {
-            if (is_array($tokens[$i])) {
-                list($token, $data) = $tokens[$i];
-            } else {
-                $token = $tokens[$i];
-                $data = '';
-            }
-            if ($inquote) {
-                if ($token != '"' && $token != T_END_HEREDOC) {
-                    continue;
-                } else {
-                    $inquote = false;
-                    continue;
-                }
-            }
-            switch ($token) {
-                case T_WHITESPACE :
-                    continue;
-                case ';':
-                    if ($interface) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    break;
-                case '"':
-                case T_START_HEREDOC:
-                    $inquote = true;
-                    break;
-                case T_CURLY_OPEN:
-                case T_DOLLAR_OPEN_CURLY_BRACES:
-                case '{': $brace_level++; continue 2;
-                case '}':
-                    $brace_level--;
-                    if ($current_class_level == $brace_level) {
-                        $current_class = '';
-                        $current_class_level = -1;
-                    }
-                    if ($current_function_level == $brace_level) {
-                        $current_function = '';
-                        $current_function_level = -1;
-                    }
-                    continue 2;
-                case '[': $bracket_level++; continue 2;
-                case ']': $bracket_level--; continue 2;
-                case '(': $paren_level++;   continue 2;
-                case ')': $paren_level--;   continue 2;
-                case T_INTERFACE:
-                    $interface = true;
-                case T_CLASS:
-                    if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
-                            array('file' => $file));
-                        return false;
-                    }
-                case T_FUNCTION:
-                case T_NEW:
-                case T_EXTENDS:
-                case T_IMPLEMENTS:
-                    $look_for = $token;
-                    continue 2;
-                case T_STRING:
-                    if (version_compare(zend_version(), '2.0', '<')) {
-                        if (in_array(strtolower($data),
-                            array('public', 'private', 'protected', 'abstract',
-                                  'interface', 'implements', 'throw') 
-                                 )) {
-                            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_PHP5,
-                                array($file));
-                        }
-                    }
-                    if ($look_for == T_CLASS) {
-                        $current_class = $data;
-                        $current_class_level = $brace_level;
-                        $declared_classes[] = $current_class;
-                    } elseif ($look_for == T_INTERFACE) {
-                        $current_interface = $data;
-                        $current_class_level = $brace_level;
-                        $declared_interfaces[] = $current_interface;
-                    } elseif ($look_for == T_IMPLEMENTS) {
-                        $implements[$current_class] = $data;
-                    } elseif ($look_for == T_EXTENDS) {
-                        $extends[$current_class] = $data;
-                    } elseif ($look_for == T_FUNCTION) {
-                        if ($current_class) {
-                            $current_function = "$current_class::$data";
-                            $declared_methods[$current_class][] = $data;
-                        } elseif ($current_interface) {
-                            $current_function = "$current_interface::$data";
-                            $declared_methods[$current_interface][] = $data;
-                        } else {
-                            $current_function = $data;
-                            $declared_functions[] = $current_function;
-                        }
-                        $current_function_level = $brace_level;
-                        $m = array();
-                    } elseif ($look_for == T_NEW) {
-                        $used_classes[$data] = true;
-                    }
-                    $look_for = 0;
-                    continue 2;
-                case T_VARIABLE:
-                    $look_for = 0;
-                    continue 2;
-                case T_DOC_COMMENT:
-                case T_COMMENT:
-                    if (preg_match('!^/\*\*\s!', $data)) {
-                        $lastphpdoc = $data;
-                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
-                            $nodeps = array_merge($nodeps, $m[1]);
-                        }
-                    }
-                    continue 2;
-                case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
-                            array('file' => $file));
-                        return false;
-                    }
-                    $class = $tokens[$i - 1][1];
-                    if (strtolower($class) != 'parent') {
-                        $used_classes[$class] = true;
-                    }
-                    continue 2;
-            }
-        }
-        return array(
-            "source_file" => $file,
-            "declared_classes" => $declared_classes,
-            "declared_interfaces" => $declared_interfaces,
-            "declared_methods" => $declared_methods,
-            "declared_functions" => $declared_functions,
-            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
-            "inheritance" => $extends,
-            "implements" => $implements,
-            );
-    }
-
-    /**
-     * Build a "provides" array from data returned by
-     * analyzeSourceCode().  The format of the built array is like
-     * this:
-     *
-     *  array(
-     *    'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
-     *    ...
-     *  )
-     *
-     *
-     * @param array $srcinfo array with information about a source file
-     * as returned by the analyzeSourceCode() method.
-     *
-     * @return void
-     *
-     * @access private
-     *
-     */
-    function _buildProvidesArray($srcinfo)
-    {
-        if (!$this->_isValid) {
-            return false;
-        }
-        $file = basename($srcinfo['source_file']);
-        $pn = $this->getPackage();
-        $pnl = strlen($pn);
-        foreach ($srcinfo['declared_classes'] as $class) {
-            $key = "class;$class";
-            if (isset($this->_packageInfo['provides'][$key])) {
-                continue;
-            }
-            $this->_packageInfo['provides'][$key] =
-                array('file'=> $file, 'type' => 'class', 'name' => $class);
-            if (isset($srcinfo['inheritance'][$class])) {
-                $this->_packageInfo['provides'][$key]['extends'] =
-                    $srcinfo['inheritance'][$class];
-            }
-        }
-        foreach ($srcinfo['declared_methods'] as $class => $methods) {
-            foreach ($methods as $method) {
-                $function = "$class::$method";
-                $key = "function;$function";
-                if ($method{0} == '_' || !strcasecmp($method, $class) ||
-                    isset($this->_packageInfo['provides'][$key])) {
-                    continue;
-                }
-                $this->_packageInfo['provides'][$key] =
-                    array('file'=> $file, 'type' => 'function', 'name' => $function);
-            }
-        }
-
-        foreach ($srcinfo['declared_functions'] as $function) {
-            $key = "function;$function";
-            if ($function{0} == '_' || isset($this->_packageInfo['provides'][$key])) {
-                continue;
-            }
-            if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
-                $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
-            }
-            $this->_packageInfo['provides'][$key] =
-                array('file'=> $file, 'type' => 'function', 'name' => $function);
-        }
-    }
-
-    // }}}
-}
-?>
+}<?php
+/**
+ * PEAR_PackageFile_v1, package.xml version 1.0
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v1.php,v 1.75 2009/02/24 23:39:16 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a1
+ */
+/**
+ * For error handling
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ErrorStack.php';
+
+/**
+ * Error code if parsing is attempted with no xml extension
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_XML_EXT', 3);
+
+/**
+ * Error code if creating the xml parser resource fails
+ */
+define('PEAR_PACKAGEFILE_ERROR_CANT_MAKE_PARSER', 4);
+
+/**
+ * Error code used for all sax xml parsing errors
+ */
+define('PEAR_PACKAGEFILE_ERROR_PARSER_ERROR', 5);
+
+/**
+ * Error code used when there is no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_NAME', 6);
+
+/**
+ * Error code when a package name is not valid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_NAME', 7);
+
+/**
+ * Error code used when no summary is parsed
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_SUMMARY', 8);
+
+/**
+ * Error code for summaries that are more than 1 line
+ */
+define('PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY', 9);
+
+/**
+ * Error code used when no description is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION', 10);
+
+/**
+ * Error code used when no license is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_LICENSE', 11);
+
+/**
+ * Error code used when a <version> version number is not present
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_VERSION', 12);
+
+/**
+ * Error code used when a <version> version number is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_VERSION', 13);
+
+/**
+ * Error code when release state is missing
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_STATE', 14);
+
+/**
+ * Error code when release state is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_STATE', 15);
+
+/**
+ * Error code when release state is missing
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DATE', 16);
+
+/**
+ * Error code when release state is invalid
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DATE', 17);
+
+/**
+ * Error code when no release notes are found
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_NOTES', 18);
+
+/**
+ * Error code when no maintainers are found
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS', 19);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE', 20);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE', 21);
+
+/**
+ * Error code when a maintainer has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME', 22);
+
+/**
+ * Error code when a maintainer has no email
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL', 23);
+
+/**
+ * Error code when a maintainer has no handle
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_MAINTROLE', 24);
+
+/**
+ * Error code when a dependency is not a PHP dependency, but has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPNAME', 25);
+
+/**
+ * Error code when a dependency has no type (pkg, php, etc.)
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE', 26);
+
+/**
+ * Error code when a dependency has no relation (lt, ge, has, etc.)
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPREL', 27);
+
+/**
+ * Error code when a dependency is not a 'has' relation, but has no version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION', 28);
+
+/**
+ * Error code when a dependency has an invalid relation
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPREL', 29);
+
+/**
+ * Error code when a dependency has an invalid type
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPTYPE', 30);
+
+/**
+ * Error code when a dependency has an invalid optional option
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL', 31);
+
+/**
+ * Error code when a dependency is a pkg dependency, and has an invalid package name
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_DEPNAME', 32);
+
+/**
+ * Error code when a dependency has a channel="foo" attribute, and foo is not a registered channel
+ */
+define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_DEPCHANNEL', 33);
+
+/**
+ * Error code when rel="has" and version attribute is present.
+ */
+define('PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED', 34);
+
+/**
+ * Error code when type="php" and dependency name is present
+ */
+define('PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED', 35);
+
+/**
+ * Error code when a configure option has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_CONFNAME', 36);
+
+/**
+ * Error code when a configure option has no name
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT', 37);
+
+/**
+ * Error code when a file in the filelist has an invalid role
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE', 38);
+
+/**
+ * Error code when a file in the filelist has no role
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_FILEROLE', 39);
+
+/**
+ * Error code when analyzing a php source file that has parse errors
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE', 40);
+
+/**
+ * Error code when analyzing a php source file reveals a source element
+ * without a package name prefix
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX', 41);
+
+/**
+ * Error code when an unknown channel is specified
+ */
+define('PEAR_PACKAGEFILE_ERROR_UNKNOWN_CHANNEL', 42);
+
+/**
+ * Error code when no files are found in the filelist
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_FILES', 43);
+
+/**
+ * Error code when a file is not valid php according to _analyzeSourceCode()
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILE', 44);
+
+/**
+ * Error code when the channel validator returns an error or warning
+ */
+define('PEAR_PACKAGEFILE_ERROR_CHANNELVAL', 45);
+
+/**
+ * Error code when a php5 package is packaged in php4 (analysis doesn't work)
+ */
+define('PEAR_PACKAGEFILE_ERROR_PHP5', 46);
+
+/**
+ * Error code when a file is listed in package.xml but does not exist
+ */
+define('PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND', 47);
+
+/**
+ * Error code when a <dep type="php" rel="not"... is encountered (use rel="ne")
+ */
+define('PEAR_PACKAGEFILE_PHP_NO_NOT', 48);
+
+/**
+ * Error code when a package.xml contains non-ISO-8859-1 characters
+ */
+define('PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS', 49);
+
+/**
+ * Error code when a dependency is not a 'has' relation, but has no version
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION', 50);
+
+/**
+ * Error code when a package has no lead developer
+ */
+define('PEAR_PACKAGEFILE_ERROR_NO_LEAD', 51);
+
+/**
+ * Error code when a filename begins with "."
+ */
+define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
+/**
+ * package.xml encapsulator
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_PackageFile_v1
+{
+    /**
+     * @access private
+     * @var PEAR_ErrorStack
+     * @access private
+     */
+    var $_stack;
+
+    /**
+     * A registry object, used to access the package name validation regex for non-standard channels
+     * @var PEAR_Registry
+     * @access private
+     */
+    var $_registry;
+
+    /**
+     * An object that contains a log method that matches PEAR_Common::log's signature
+     * @var object
+     * @access private
+     */
+    var $_logger;
+
+    /**
+     * Parsed package information
+     * @var array
+     * @access private
+     */
+    var $_packageInfo;
+
+    /**
+     * path to package.xml
+     * @var string
+     * @access private
+     */
+    var $_packageFile;
+
+    /**
+     * path to package .tgz or false if this is a local/extracted package.xml
+     * @var string
+     * @access private
+     */
+    var $_archiveFile;
+
+    /**
+     * @var int
+     * @access private
+     */
+    var $_isValid = 0;
+
+    /**
+     * Determines whether this packagefile was initialized only with partial package info
+     *
+     * If this package file was constructed via parsing REST, it will only contain
+     *
+     * - package name
+     * - channel name
+     * - dependencies 
+     * @var boolean
+     * @access private
+     */
+    var $_incomplete = true;
+
+    /**
+     * @param bool determines whether to return a PEAR_Error object, or use the PEAR_ErrorStack
+     * @param string Name of Error Stack class to use.
+     */
+    function PEAR_PackageFile_v1()
+    {
+        $this->_stack = &new PEAR_ErrorStack('PEAR_PackageFile_v1');
+        $this->_stack->setErrorMessageTemplate($this->_getErrorMessage());
+        $this->_isValid = 0;
+    }
+
+    function installBinary($installer)
+    {
+        return false;
+    }
+
+    function isExtension($name)
+    {
+        return false;
+    }
+
+    function setConfig(&$config)
+    {
+        $this->_config = &$config;
+        $this->_registry = &$config->getRegistry();
+    }
+
+    function setRequestedGroup()
+    {
+        // placeholder
+    }
+
+    /**
+     * For saving in the registry.
+     *
+     * Set the last version that was installed
+     * @param string
+     */
+    function setLastInstalledVersion($version)
+    {
+        $this->_packageInfo['_lastversion'] = $version;
+    }
+
+    /**
+     * @return string|false
+     */
+    function getLastInstalledVersion()
+    {
+        if (isset($this->_packageInfo['_lastversion'])) {
+            return $this->_packageInfo['_lastversion'];
+        }
+        return false;
+    }
+
+    function getInstalledBinary()
+    {
+        return false;
+    }
+
+    function listPostinstallScripts()
+    {
+        return false;
+    }
+
+    function initPostinstallScripts()
+    {
+        return false;
+    }
+
+    function setLogger(&$logger)
+    {
+        if ($logger && (!is_object($logger) || !method_exists($logger, 'log'))) {
+            return PEAR::raiseError('Logger must be compatible with PEAR_Common::log');
+        }
+        $this->_logger = &$logger;
+    }
+
+    function setPackagefile($file, $archive = false)
+    {
+        $this->_packageFile = $file;
+        $this->_archiveFile = $archive ? $archive : $file;
+    }
+
+    function getPackageFile()
+    {
+        return isset($this->_packageFile) ? $this->_packageFile : false;
+    }
+
+    function getPackageType()
+    {
+        return 'php';
+    }
+
+    function getArchiveFile()
+    {
+        return $this->_archiveFile;
+    }
+
+    function packageInfo($field)
+    {
+        if (!is_string($field) || empty($field) ||
+            !isset($this->_packageInfo[$field])) {
+            return false;
+        }
+        return $this->_packageInfo[$field];
+    }
+
+    function setDirtree($path)
+    {
+        if (!isset($this->_packageInfo['dirtree'])) {
+            $this->_packageInfo['dirtree'] = array();
+        }
+        $this->_packageInfo['dirtree'][$path] = true;
+    }
+
+    function getDirtree()
+    {
+        if (isset($this->_packageInfo['dirtree']) && count($this->_packageInfo['dirtree'])) {
+            return $this->_packageInfo['dirtree'];
+        }
+        return false;
+    }
+
+    function resetDirtree()
+    {
+        unset($this->_packageInfo['dirtree']);
+    }
+
+    function fromArray($pinfo)
+    {
+        $this->_incomplete = false;
+        $this->_packageInfo = $pinfo;
+    }
+
+    function isIncomplete()
+    {
+        return $this->_incomplete;
+    }
+
+    function getChannel()
+    {
+        return 'pear.php.net';
+    }
+
+    function getUri()
+    {
+        return false;
+    }
+
+    function getTime()
+    {
+        return false;
+    }
+
+    function getExtends()
+    {
+        if (isset($this->_packageInfo['extends'])) {
+            return $this->_packageInfo['extends'];
+        }
+        return false;
+    }
+
+    /**
+     * @return array
+     */
+    function toArray()
+    {
+        if (!$this->validate(PEAR_VALIDATE_NORMAL)) {
+            return false;
+        }
+        return $this->getArray();
+    }
+
+    function getArray()
+    {
+        return $this->_packageInfo;
+    }
+
+    function getName()
+    {
+        return $this->getPackage();
+    }
+
+    function getPackage()
+    {
+        if (isset($this->_packageInfo['package'])) {
+            return $this->_packageInfo['package'];
+        }
+        return false;
+    }
+
+    /**
+     * WARNING - don't use this unless you know what you are doing
+     */
+    function setRawPackage($package)
+    {
+        $this->_packageInfo['package'] = $package;
+    }
+
+    function setPackage($package)
+    {
+        $this->_packageInfo['package'] = $package;
+        $this->_isValid = false;
+    }
+
+    function getVersion()
+    {
+        if (isset($this->_packageInfo['version'])) {
+            return $this->_packageInfo['version'];
+        }
+        return false;
+    }
+
+    function setVersion($version)
+    {
+        $this->_packageInfo['version'] = $version;
+        $this->_isValid = false;
+    }
+
+    function clearMaintainers()
+    {
+        unset($this->_packageInfo['maintainers']);
+    }
+
+    function getMaintainers()
+    {
+        if (isset($this->_packageInfo['maintainers'])) {
+            return $this->_packageInfo['maintainers'];
+        }
+        return false;
+    }
+
+    /**
+     * Adds a new maintainer - no checking of duplicates is performed, use
+     * updatemaintainer for that purpose.
+     */
+    function addMaintainer($role, $handle, $name, $email)
+    {
+        $this->_packageInfo['maintainers'][] =
+            array('handle' => $handle, 'role' => $role, 'email' => $email, 'name' => $name);
+        $this->_isValid = false;
+    }
+
+    function updateMaintainer($role, $handle, $name, $email)
+    {
+        $found = false;
+        if (!isset($this->_packageInfo['maintainers']) ||
+              !is_array($this->_packageInfo['maintainers'])) {
+            return $this->addMaintainer($role, $handle, $name, $email);
+        }
+        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
+            if ($maintainer['handle'] == $handle) {
+                $found = $i;
+                break;
+            }
+        }
+        if ($found !== false) {
+            unset($this->_packageInfo['maintainers'][$found]);
+            $this->_packageInfo['maintainers'] =
+                array_values($this->_packageInfo['maintainers']);
+        }
+        $this->addMaintainer($role, $handle, $name, $email);
+    }
+
+    function deleteMaintainer($handle)
+    {
+        $found = false;
+        foreach ($this->_packageInfo['maintainers'] as $i => $maintainer) {
+            if ($maintainer['handle'] == $handle) {
+                $found = $i;
+                break;
+            }
+        }
+        if ($found !== false) {
+            unset($this->_packageInfo['maintainers'][$found]);
+            $this->_packageInfo['maintainers'] =
+                array_values($this->_packageInfo['maintainers']);
+            return true;
+        }
+        return false;
+    }
+
+    function getState()
+    {
+        if (isset($this->_packageInfo['release_state'])) {
+            return $this->_packageInfo['release_state'];
+        }
+        return false;
+    }
+
+    function setRawState($state)
+    {
+        $this->_packageInfo['release_state'] = $state;
+    }
+
+    function setState($state)
+    {
+        $this->_packageInfo['release_state'] = $state;
+        $this->_isValid = false;
+    }
+
+    function getDate()
+    {
+        if (isset($this->_packageInfo['release_date'])) {
+            return $this->_packageInfo['release_date'];
+        }
+        return false;
+    }
+
+    function setDate($date)
+    {
+        $this->_packageInfo['release_date'] = $date;
+        $this->_isValid = false;
+    }
+
+    function getLicense()
+    {
+        if (isset($this->_packageInfo['release_license'])) {
+            return $this->_packageInfo['release_license'];
+        }
+        return false;
+    }
+
+    function setLicense($date)
+    {
+        $this->_packageInfo['release_license'] = $date;
+        $this->_isValid = false;
+    }
+
+    function getSummary()
+    {
+        if (isset($this->_packageInfo['summary'])) {
+            return $this->_packageInfo['summary'];
+        }
+        return false;
+    }
+
+    function setSummary($summary)
+    {
+        $this->_packageInfo['summary'] = $summary;
+        $this->_isValid = false;
+    }
+
+    function getDescription()
+    {
+        if (isset($this->_packageInfo['description'])) {
+            return $this->_packageInfo['description'];
+        }
+        return false;
+    }
+
+    function setDescription($desc)
+    {
+        $this->_packageInfo['description'] = $desc;
+        $this->_isValid = false;
+    }
+
+    function getNotes()
+    {
+        if (isset($this->_packageInfo['release_notes'])) {
+            return $this->_packageInfo['release_notes'];
+        }
+        return false;
+    }
+
+    function setNotes($notes)
+    {
+        $this->_packageInfo['release_notes'] = $notes;
+        $this->_isValid = false;
+    }
+
+    function getDeps()
+    {
+        if (isset($this->_packageInfo['release_deps'])) {
+            return $this->_packageInfo['release_deps'];
+        }
+        return false;
+    }
+
+    /**
+     * Reset dependencies prior to adding new ones
+     */
+    function clearDeps()
+    {
+        unset($this->_packageInfo['release_deps']);
+    }
+
+    function addPhpDep($version, $rel)
+    {
+        $this->_isValid = false;
+        $this->_packageInfo['release_deps'][] =
+            array('type' => 'php',
+                  'rel' => $rel,
+                  'version' => $version);
+    }
+
+    function addPackageDep($name, $version, $rel, $optional = 'no')
+    {
+        $this->_isValid = false;
+        $dep =
+            array('type' => 'pkg',
+                  'name' => $name,
+                  'rel' => $rel,
+                  'optional' => $optional);
+        if ($rel != 'has' && $rel != 'not') {
+            $dep['version'] = $version;
+        }
+        $this->_packageInfo['release_deps'][] = $dep;
+    }
+
+    function addExtensionDep($name, $version, $rel, $optional = 'no')
+    {
+        $this->_isValid = false;
+        $this->_packageInfo['release_deps'][] =
+            array('type' => 'ext',
+                  'name' => $name,
+                  'rel' => $rel,
+                  'version' => $version,
+                  'optional' => $optional);
+    }
+
+    /**
+     * WARNING - do not use this function directly unless you know what you're doing
+     */
+    function setDeps($deps)
+    {
+        $this->_packageInfo['release_deps'] = $deps;
+    }
+
+    function hasDeps()
+    {
+        return isset($this->_packageInfo['release_deps']) &&
+            count($this->_packageInfo['release_deps']);
+    }
+
+    function getDependencyGroup($group)
+    {
+        return false;
+    }
+
+    function isCompatible($pf)
+    {
+        return false;
+    }
+
+    function isSubpackageOf($p)
+    {
+        return $p->isSubpackage($this);
+    }
+
+    function isSubpackage($p)
+    {
+        return false;
+    }
+
+    function dependsOn($package, $channel)
+    {
+        if (strtolower($channel) != 'pear.php.net') {
+            return false;
+        }
+        if (!($deps = $this->getDeps())) {
+            return false;
+        }
+        foreach ($deps as $dep) {
+            if ($dep['type'] != 'pkg') {
+                continue;
+            }
+            if (strtolower($dep['name']) == strtolower($package)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    function getConfigureOptions()
+    {
+        if (isset($this->_packageInfo['configure_options'])) {
+            return $this->_packageInfo['configure_options'];
+        }
+        return false;
+    }
+
+    function hasConfigureOptions()
+    {
+        return isset($this->_packageInfo['configure_options']) &&
+            count($this->_packageInfo['configure_options']);
+    }
+
+    function addConfigureOption($name, $prompt, $default = false)
+    {
+        $o = array('name' => $name, 'prompt' => $prompt);
+        if ($default !== false) {
+            $o['default'] = $default;
+        }
+        if (!isset($this->_packageInfo['configure_options'])) {
+            $this->_packageInfo['configure_options'] = array();
+        }
+        $this->_packageInfo['configure_options'][] = $o;
+    }
+
+    function clearConfigureOptions()
+    {
+        unset($this->_packageInfo['configure_options']);
+    }
+
+    function getProvides()
+    {
+        if (isset($this->_packageInfo['provides'])) {
+            return $this->_packageInfo['provides'];
+        }
+        return false;
+    }
+
+    function getProvidesExtension()
+    {
+        return false;
+    }
+
+    function addFile($dir, $file, $attrs)
+    {
+        $dir = preg_replace(array('!\\\\+!', '!/+!'), array('/', '/'), $dir);
+        if ($dir == '/' || $dir == '') {
+            $dir = '';
+        } else {
+            $dir .= '/';
+        }
+        $file = $dir . $file;
+        $file = preg_replace('![\\/]+!', '/', $file);
+        $this->_packageInfo['filelist'][$file] = $attrs;
+    }
+
+    function getInstallationFilelist()
+    {
+        return $this->getFilelist();
+    }
+
+    function getFilelist()
+    {
+        if (isset($this->_packageInfo['filelist'])) {
+            return $this->_packageInfo['filelist'];
+        }
+        return false;
+    }
+
+    function setFileAttribute($file, $attr, $value)
+    {
+        $this->_packageInfo['filelist'][$file][$attr] = $value;
+    }
+
+    function resetFilelist()
+    {
+        $this->_packageInfo['filelist'] = array();
+    }
+
+    function setInstalledAs($file, $path)
+    {
+        if ($path) {
+            return $this->_packageInfo['filelist'][$file]['installed_as'] = $path;
+        }
+        unset($this->_packageInfo['filelist'][$file]['installed_as']);
+    }
+
+    function installedFile($file, $atts)
+    {
+        if (isset($this->_packageInfo['filelist'][$file])) {
+            $this->_packageInfo['filelist'][$file] =
+                array_merge($this->_packageInfo['filelist'][$file], $atts);
+        } else {
+            $this->_packageInfo['filelist'][$file] = $atts;
+        }
+    }
+
+    function getChangelog()
+    {
+        if (isset($this->_packageInfo['changelog'])) {
+            return $this->_packageInfo['changelog'];
+        }
+        return false;
+    }
+
+    function getPackagexmlVersion()
+    {
+        return '1.0';
+    }
+
+    /**
+     * Wrapper to {@link PEAR_ErrorStack::getErrors()}
+     * @param boolean determines whether to purge the error stack after retrieving
+     * @return array
+     */
+    function getValidationWarnings($purge = true)
+    {
+        return $this->_stack->getErrors($purge);
+    }
+
+    // }}}
+    /**
+     * Validation error.  Also marks the object contents as invalid
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateError($code, $params = array())
+    {
+        $this->_stack->push($code, 'error', $params, false, false, debug_backtrace());
+        $this->_isValid = false;
+    }
+
+    /**
+     * Validation warning.  Does not mark the object contents invalid.
+     * @param error code
+     * @param array error information
+     * @access private
+     */
+    function _validateWarning($code, $params = array())
+    {
+        $this->_stack->push($code, 'warning', $params, false, false, debug_backtrace());
+    }
+
+    /**
+     * @param integer error code
+     * @access protected
+     */
+    function _getErrorMessage()
+    {
+        return array(
+                PEAR_PACKAGEFILE_ERROR_NO_NAME =>
+                    'Missing Package Name',
+                PEAR_PACKAGEFILE_ERROR_NO_SUMMARY =>
+                    'No summary found',
+                PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY =>
+                    'Summary should be on one line',
+                PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION =>
+                    'Missing description',
+                PEAR_PACKAGEFILE_ERROR_NO_LICENSE =>
+                    'Missing license',
+                PEAR_PACKAGEFILE_ERROR_NO_VERSION =>
+                    'No release version found',
+                PEAR_PACKAGEFILE_ERROR_NO_STATE =>
+                    'No release state found',
+                PEAR_PACKAGEFILE_ERROR_NO_DATE =>
+                    'No release date found',
+                PEAR_PACKAGEFILE_ERROR_NO_NOTES =>
+                    'No release notes found',
+                PEAR_PACKAGEFILE_ERROR_NO_LEAD =>
+                    'Package must have at least one lead maintainer',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS =>
+                    'No maintainers found, at least one must be defined',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE =>
+                    'Maintainer %index% has no handle (user ID at channel server)',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE =>
+                    'Maintainer %index% has no role',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME =>
+                    'Maintainer %index% has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL =>
+                    'Maintainer %index% has no email',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPNAME =>
+                    'Dependency %index% is not a php dependency, and has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPREL =>
+                    'Dependency %index% has no relation (rel)',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE =>
+                    'Dependency %index% has no type',
+                PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED =>
+                    'PHP Dependency %index% has a name attribute of "%name%" which will be' .
+                        ' ignored!',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION =>
+                    'Dependency %index% is not a rel="has" or rel="not" dependency, ' .
+                        'and has no version',
+                PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION =>
+                    'Dependency %index% is a type="php" dependency, ' .
+                        'and has no version',
+                PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED =>
+                    'Dependency %index% is a rel="%rel%" dependency, versioning is ignored',
+                PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL =>
+                    'Dependency %index% has invalid optional value "%opt%", should be yes or no',
+                PEAR_PACKAGEFILE_PHP_NO_NOT =>
+                    'Dependency %index%: php dependencies cannot use "not" rel, use "ne"' .
+                        ' to exclude specific versions',
+                PEAR_PACKAGEFILE_ERROR_NO_CONFNAME =>
+                    'Configure Option %index% has no name',
+                PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT =>
+                    'Configure Option %index% has no prompt',
+                PEAR_PACKAGEFILE_ERROR_NO_FILES =>
+                    'No files in <filelist> section of package.xml',
+                PEAR_PACKAGEFILE_ERROR_NO_FILEROLE =>
+                    'File "%file%" has no role, expecting one of "%roles%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE =>
+                    'File "%file%" has invalid role "%role%", expecting one of "%roles%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME =>
+                    'File "%file%" cannot start with ".", cannot package or install',
+                PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE =>
+                    'Parser error: invalid PHP found in file "%file%"',
+                PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX =>
+                    'in %file%: %type% "%name%" not prefixed with package name "%package%"',
+                PEAR_PACKAGEFILE_ERROR_INVALID_FILE =>
+                    'Parser error: invalid PHP file "%file%"',
+                PEAR_PACKAGEFILE_ERROR_CHANNELVAL =>
+                    'Channel validator error: field "%field%" - %reason%',
+                PEAR_PACKAGEFILE_ERROR_PHP5 =>
+                    'Error, PHP5 token encountered in %file%, analysis should be in PHP5',
+                PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND =>
+                    'File "%file%" in package.xml does not exist',
+                PEAR_PACKAGEFILE_ERROR_NON_ISO_CHARS =>
+                    'Package.xml contains non-ISO-8859-1 characters, and may not validate',
+            );
+    }
+
+    /**
+     * Validate XML package definition file.
+     *
+     * @access public
+     * @return boolean
+     */
+    function validate($state = PEAR_VALIDATE_NORMAL, $nofilechecking = false)
+    {
+        if (($this->_isValid & $state) == $state) {
+            return true;
+        }
+        $this->_isValid = true;
+        $info = $this->_packageInfo;
+        if (empty($info['package'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NAME);
+            $this->_packageName = $pn = 'unknown';
+        } else {
+            $this->_packageName = $pn = $info['package'];
+        }
+
+        if (empty($info['summary'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_SUMMARY);
+        } elseif (strpos(trim($info['summary']), "\n") !== false) {
+            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_MULTILINE_SUMMARY,
+                array('summary' => $info['summary']));
+        }
+        if (empty($info['description'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DESCRIPTION);
+        }
+        if (empty($info['release_license'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LICENSE);
+        }
+        if (empty($info['version'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_VERSION);
+        }
+        if (empty($info['release_state'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_STATE);
+        }
+        if (empty($info['release_date'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DATE);
+        }
+        if (empty($info['release_notes'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_NOTES);
+        }
+        if (empty($info['maintainers'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTAINERS);
+        } else {
+            $haslead = false;
+            $i = 1;
+            foreach ($info['maintainers'] as $m) {
+                if (empty($m['handle'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTHANDLE,
+                        array('index' => $i));
+                }
+                if (empty($m['role'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTROLE,
+                        array('index' => $i, 'roles' => PEAR_Common::getUserRoles()));
+                } elseif ($m['role'] == 'lead') {
+                    $haslead = true;
+                }
+                if (empty($m['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTNAME,
+                        array('index' => $i));
+                }
+                if (empty($m['email'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_MAINTEMAIL,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+            if (!$haslead) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_LEAD);
+            }
+        }
+        if (!empty($info['release_deps'])) {
+            $i = 1;
+            foreach ($info['release_deps'] as $d) {
+                if (!isset($d['type']) || empty($d['type'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPTYPE,
+                        array('index' => $i, 'types' => PEAR_Common::getDependencyTypes()));
+                    continue;
+                }
+                if (!isset($d['rel']) || empty($d['rel'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPREL,
+                        array('index' => $i, 'rels' => PEAR_Common::getDependencyRelations()));
+                    continue;
+                }
+                if (!empty($d['optional'])) {
+                    if (!in_array($d['optional'], array('yes', 'no'))) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_DEPOPTIONAL,
+                            array('index' => $i, 'opt' => $d['optional']));
+                    }
+                }
+                if ($d['rel'] != 'has' && $d['rel'] != 'not' && empty($d['version'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPVERSION,
+                        array('index' => $i));
+                } elseif (($d['rel'] == 'has' || $d['rel'] == 'not') && !empty($d['version'])) {
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPVERSION_IGNORED,
+                        array('index' => $i, 'rel' => $d['rel']));
+                }
+                if ($d['type'] == 'php' && !empty($d['name'])) {
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_DEPNAME_IGNORED,
+                        array('index' => $i, 'name' => $d['name']));
+                } elseif ($d['type'] != 'php' && empty($d['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPNAME,
+                        array('index' => $i));
+                }
+                if ($d['type'] == 'php' && empty($d['version'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_DEPPHPVERSION,
+                        array('index' => $i));
+                }
+                if (($d['rel'] == 'not') && ($d['type'] == 'php')) {
+                    $this->_validateError(PEAR_PACKAGEFILE_PHP_NO_NOT,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+        }
+        if (!empty($info['configure_options'])) {
+            $i = 1;
+            foreach ($info['configure_options'] as $c) {
+                if (empty($c['name'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFNAME,
+                        array('index' => $i));
+                }
+                if (empty($c['prompt'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_CONFPROMPT,
+                        array('index' => $i));
+                }
+                $i++;
+            }
+        }
+        if (empty($info['filelist'])) {
+            $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILES);
+            $errors[] = 'no files';
+        } else {
+            foreach ($info['filelist'] as $file => $fa) {
+                if (empty($fa['role'])) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_NO_FILEROLE,
+                        array('file' => $file, 'roles' => PEAR_Common::getFileRoles()));
+                    continue;
+                } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILEROLE,
+                        array('file' => $file, 'role' => $fa['role'], 'roles' => PEAR_Common::getFileRoles()));
+                }
+                if (preg_match('~/\.\.?(/|\\z)|^\.\.?/~', str_replace('\\', '/', $file))) {
+                    // file contains .. parent directory or . cur directory references
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file));
+                }
+                if (isset($fa['install-as']) &&
+                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
+                                 str_replace('\\', '/', $fa['install-as']))) {
+                    // install-as contains .. parent directory or . cur directory references
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file . ' [installed as ' . $fa['install-as'] . ']'));
+                }
+                if (isset($fa['baseinstalldir']) &&
+                      preg_match('~/\.\.?(/|\\z)|^\.\.?/~', 
+                                 str_replace('\\', '/', $fa['baseinstalldir']))) {
+                    // install-as contains .. parent directory or . cur directory references
+                    $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME,
+                        array('file' => $file . ' [baseinstalldir ' . $fa['baseinstalldir'] . ']'));
+                }
+            }
+        }
+        if (isset($this->_registry) && $this->_isValid) {
+            $chan = $this->_registry->getChannel('pear.php.net');
+            if (PEAR::isError($chan)) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $chan->getMessage());
+                return $this->_isValid = 0;
+            }
+            $validator = $chan->getValidationObject();
+            $validator->setPackageFile($this);
+            $validator->validate($state);
+            $failures = $validator->getFailures();
+            foreach ($failures['errors'] as $error) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $error);
+            }
+            foreach ($failures['warnings'] as $warning) {
+                $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_CHANNELVAL, $warning);
+            }
+        }
+        if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$nofilechecking) {
+            if ($this->_analyzePhpFiles()) {
+                $this->_isValid = true;
+            }
+        }
+        if ($this->_isValid) {
+            return $this->_isValid = $state;
+        }
+        return $this->_isValid = 0;
+    }
+
+    function _analyzePhpFiles()
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        if (!isset($this->_packageFile)) {
+            return false;
+        }
+        $dir_prefix = dirname($this->_packageFile);
+        $common = new PEAR_Common;
+        $log = isset($this->_logger) ? array(&$this->_logger, 'log') :
+            array($common, 'log');
+        $info = $this->getFilelist();
+        foreach ($info as $file => $fa) {
+            if (!file_exists($dir_prefix . DIRECTORY_SEPARATOR . $file)) {
+                $this->_validateError(PEAR_PACKAGEFILE_ERROR_FILE_NOTFOUND,
+                    array('file' => realpath($dir_prefix) . DIRECTORY_SEPARATOR . $file));
+                continue;
+            }
+            if ($fa['role'] == 'php' && $dir_prefix) {
+                call_user_func_array($log, array(1, "Analyzing $file"));
+                $srcinfo = $this->_analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
+                if ($srcinfo) {
+                    $this->_buildProvidesArray($srcinfo);
+                }
+            }
+        }
+        $this->_packageName = $pn = $this->getPackage();
+        $pnl = strlen($pn);
+        if (isset($this->_packageInfo['provides'])) {
+            foreach ((array) $this->_packageInfo['provides'] as $key => $what) {
+                if (isset($what['explicit'])) {
+                    // skip conformance checks if the provides entry is
+                    // specified in the package.xml file
+                    continue;
+                }
+                extract($what);
+                if ($type == 'class') {
+                    if (!strncasecmp($name, $pn, $pnl)) {
+                        continue;
+                    }
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
+                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
+                } elseif ($type == 'function') {
+                    if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
+                        continue;
+                    }
+                    $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_NO_PNAME_PREFIX,
+                        array('file' => $file, 'type' => $type, 'name' => $name, 'package' => $pn));
+                }
+            }
+        }
+        return $this->_isValid;
+    }
+
+    /**
+     * Get the default xml generator object
+     *
+     * @return PEAR_PackageFile_Generator_v1
+     */
+    function &getDefaultGenerator()
+    {
+        if (!class_exists('PEAR_PackageFile_Generator_v1')) {
+            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/Generator/v1.php';
+        }
+        $a = &new PEAR_PackageFile_Generator_v1($this);
+        return $a;
+    }
+
+    /**
+     * Get the contents of a file listed within the package.xml
+     * @param string
+     * @return string
+     */
+    function getFileContents($file)
+    {
+        if ($this->_archiveFile == $this->_packageFile) { // unpacked
+            $dir = dirname($this->_packageFile);
+            $file = $dir . DIRECTORY_SEPARATOR . $file;
+            $file = str_replace(array('/', '\\'),
+                array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $file);
+            if (file_exists($file) && is_readable($file)) {
+                return implode('', file($file));
+            }
+        } else { // tgz
+            if (!class_exists('Archive_Tar')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'Archive/Tar.php';
+            }
+            $tar = &new Archive_Tar($this->_archiveFile);
+            $tar->pushErrorHandling(PEAR_ERROR_RETURN);
+            if ($file != 'package.xml' && $file != 'package2.xml') {
+                $file = $this->getPackage() . '-' . $this->getVersion() . '/' . $file;
+            }
+            $file = $tar->extractInString($file);
+            $tar->popErrorHandling();
+            if (PEAR::isError($file)) {
+                return PEAR::raiseError("Cannot locate file '$file' in archive");
+            }
+            return $file;
+        }
+    }
+
+    // {{{ analyzeSourceCode()
+    /**
+     * Analyze the source code of the given PHP file
+     *
+     * @param  string Filename of the PHP file
+     * @return mixed
+     * @access private
+     */
+    function _analyzeSourceCode($file)
+    {
+        if (!function_exists("token_get_all")) {
+            return false;
+        }
+        if (!defined('T_DOC_COMMENT')) {
+            define('T_DOC_COMMENT', T_COMMENT);
+        }
+        if (!defined('T_INTERFACE')) {
+            define('T_INTERFACE', -1);
+        }
+        if (!defined('T_IMPLEMENTS')) {
+            define('T_IMPLEMENTS', -1);
+        }
+        if (!$fp = @fopen($file, "r")) {
+            return false;
+        }
+        fclose($fp);
+        $contents = file_get_contents($file);
+        $tokens = token_get_all($contents);
+/*
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            @list($token, $data) = $tokens[$i];
+            if (is_string($token)) {
+                var_dump($token);
+            } else {
+                print token_name($token) . ' ';
+                var_dump(rtrim($data));
+            }
+        }
+*/
+        $look_for = 0;
+        $paren_level = 0;
+        $bracket_level = 0;
+        $brace_level = 0;
+        $lastphpdoc = '';
+        $current_class = '';
+        $current_interface = '';
+        $current_class_level = -1;
+        $current_function = '';
+        $current_function_level = -1;
+        $declared_classes = array();
+        $declared_interfaces = array();
+        $declared_functions = array();
+        $declared_methods = array();
+        $used_classes = array();
+        $used_functions = array();
+        $extends = array();
+        $implements = array();
+        $nodeps = array();
+        $inquote = false;
+        $interface = false;
+        for ($i = 0; $i < sizeof($tokens); $i++) {
+            if (is_array($tokens[$i])) {
+                list($token, $data) = $tokens[$i];
+            } else {
+                $token = $tokens[$i];
+                $data = '';
+            }
+            if ($inquote) {
+                if ($token != '"' && $token != T_END_HEREDOC) {
+                    continue;
+                } else {
+                    $inquote = false;
+                    continue;
+                }
+            }
+            switch ($token) {
+                case T_WHITESPACE :
+                    continue;
+                case ';':
+                    if ($interface) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    break;
+                case '"':
+                case T_START_HEREDOC:
+                    $inquote = true;
+                    break;
+                case T_CURLY_OPEN:
+                case T_DOLLAR_OPEN_CURLY_BRACES:
+                case '{': $brace_level++; continue 2;
+                case '}':
+                    $brace_level--;
+                    if ($current_class_level == $brace_level) {
+                        $current_class = '';
+                        $current_class_level = -1;
+                    }
+                    if ($current_function_level == $brace_level) {
+                        $current_function = '';
+                        $current_function_level = -1;
+                    }
+                    continue 2;
+                case '[': $bracket_level++; continue 2;
+                case ']': $bracket_level--; continue 2;
+                case '(': $paren_level++;   continue 2;
+                case ')': $paren_level--;   continue 2;
+                case T_INTERFACE:
+                    $interface = true;
+                case T_CLASS:
+                    if (($current_class_level != -1) || ($current_function_level != -1)) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
+                            array('file' => $file));
+                        return false;
+                    }
+                case T_FUNCTION:
+                case T_NEW:
+                case T_EXTENDS:
+                case T_IMPLEMENTS:
+                    $look_for = $token;
+                    continue 2;
+                case T_STRING:
+                    if (version_compare(zend_version(), '2.0', '<')) {
+                        if (in_array(strtolower($data),
+                            array('public', 'private', 'protected', 'abstract',
+                                  'interface', 'implements', 'throw') 
+                                 )) {
+                            $this->_validateWarning(PEAR_PACKAGEFILE_ERROR_PHP5,
+                                array($file));
+                        }
+                    }
+                    if ($look_for == T_CLASS) {
+                        $current_class = $data;
+                        $current_class_level = $brace_level;
+                        $declared_classes[] = $current_class;
+                    } elseif ($look_for == T_INTERFACE) {
+                        $current_interface = $data;
+                        $current_class_level = $brace_level;
+                        $declared_interfaces[] = $current_interface;
+                    } elseif ($look_for == T_IMPLEMENTS) {
+                        $implements[$current_class] = $data;
+                    } elseif ($look_for == T_EXTENDS) {
+                        $extends[$current_class] = $data;
+                    } elseif ($look_for == T_FUNCTION) {
+                        if ($current_class) {
+                            $current_function = "$current_class::$data";
+                            $declared_methods[$current_class][] = $data;
+                        } elseif ($current_interface) {
+                            $current_function = "$current_interface::$data";
+                            $declared_methods[$current_interface][] = $data;
+                        } else {
+                            $current_function = $data;
+                            $declared_functions[] = $current_function;
+                        }
+                        $current_function_level = $brace_level;
+                        $m = array();
+                    } elseif ($look_for == T_NEW) {
+                        $used_classes[$data] = true;
+                    }
+                    $look_for = 0;
+                    continue 2;
+                case T_VARIABLE:
+                    $look_for = 0;
+                    continue 2;
+                case T_DOC_COMMENT:
+                case T_COMMENT:
+                    if (preg_match('!^/\*\*\s!', $data)) {
+                        $lastphpdoc = $data;
+                        if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
+                            $nodeps = array_merge($nodeps, $m[1]);
+                        }
+                    }
+                    continue 2;
+                case T_DOUBLE_COLON:
+                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                        $this->_validateError(PEAR_PACKAGEFILE_ERROR_INVALID_PHPFILE,
+                            array('file' => $file));
+                        return false;
+                    }
+                    $class = $tokens[$i - 1][1];
+                    if (strtolower($class) != 'parent') {
+                        $used_classes[$class] = true;
+                    }
+                    continue 2;
+            }
+        }
+        return array(
+            "source_file" => $file,
+            "declared_classes" => $declared_classes,
+            "declared_interfaces" => $declared_interfaces,
+            "declared_methods" => $declared_methods,
+            "declared_functions" => $declared_functions,
+            "used_classes" => array_diff(array_keys($used_classes), $nodeps),
+            "inheritance" => $extends,
+            "implements" => $implements,
+            );
+    }
+
+    /**
+     * Build a "provides" array from data returned by
+     * analyzeSourceCode().  The format of the built array is like
+     * this:
+     *
+     *  array(
+     *    'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
+     *    ...
+     *  )
+     *
+     *
+     * @param array $srcinfo array with information about a source file
+     * as returned by the analyzeSourceCode() method.
+     *
+     * @return void
+     *
+     * @access private
+     *
+     */
+    function _buildProvidesArray($srcinfo)
+    {
+        if (!$this->_isValid) {
+            return false;
+        }
+        $file = basename($srcinfo['source_file']);
+        $pn = $this->getPackage();
+        $pnl = strlen($pn);
+        foreach ($srcinfo['declared_classes'] as $class) {
+            $key = "class;$class";
+            if (isset($this->_packageInfo['provides'][$key])) {
+                continue;
+            }
+            $this->_packageInfo['provides'][$key] =
+                array('file'=> $file, 'type' => 'class', 'name' => $class);
+            if (isset($srcinfo['inheritance'][$class])) {
+                $this->_packageInfo['provides'][$key]['extends'] =
+                    $srcinfo['inheritance'][$class];
+            }
+        }
+        foreach ($srcinfo['declared_methods'] as $class => $methods) {
+            foreach ($methods as $method) {
+                $function = "$class::$method";
+                $key = "function;$function";
+                if ($method{0} == '_' || !strcasecmp($method, $class) ||
+                    isset($this->_packageInfo['provides'][$key])) {
+                    continue;
+                }
+                $this->_packageInfo['provides'][$key] =
+                    array('file'=> $file, 'type' => 'function', 'name' => $function);
+            }
+        }
+
+        foreach ($srcinfo['declared_functions'] as $function) {
+            $key = "function;$function";
+            if ($function{0} == '_' || isset($this->_packageInfo['provides'][$key])) {
+                continue;
+            }
+            if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
+                $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
+            }
+            $this->_packageInfo['provides'][$key] =
+                array('file'=> $file, 'type' => 'function', 'name' => $function);
+        }
+    }
+
+    // }}}
+}
+?>
 <?php
 /**
  * PEAR_PackageFile_v2, package.xml version 2.0
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: v2.php,v 1.143 2008/05/13 05:28:51 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: v2.php,v 1.145 2009/02/24 23:39:16 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -78379,9 +77386,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ErrorStack.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -79555,19 +78562,24 @@ class PEAR_PackageFile_v2
         if ($this->getPackageType() != 'extsrc' && $this->getPackageType() != 'zendextsrc') {
             return false;
         }
+
         $releases = $this->getReleases();
         if (isset($releases[0])) {
             $releases = $releases[0];
         }
+
         if (isset($releases['configureoption'])) {
             if (!isset($releases['configureoption'][0])) {
                 $releases['configureoption'] = array($releases['configureoption']);
             }
+
             for ($i = 0; $i < count($releases['configureoption']); $i++) {
                 $releases['configureoption'][$i] = $releases['configureoption'][$i]['attribs'];
             }
+
             return $releases['configureoption'];
         }
+
         return false;
     }
 
@@ -80402,18 +79414,12 @@ class PEAR_PackageFile_v2
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Validator.php,v 1.106 2008/03/28 22:23:41 dufuz Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Validator.php,v 1.110 2009/03/27 19:29:31 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a8
  */
@@ -80423,9 +79429,9 @@ class PEAR_PackageFile_v2
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  * @access private
@@ -80516,7 +79522,7 @@ class PEAR_PackageFile_v2_Validator
               isset($test['dependencies']['required']) &&
               isset($test['dependencies']['required']['pearinstaller']) &&
               isset($test['dependencies']['required']['pearinstaller']['min']) &&
-              version_compare('1.7.2',
+              version_compare('1.8.0',
                 $test['dependencies']['required']['pearinstaller']['min'], '<')
         ) {
             $this->_pearVersionTooLow($test['dependencies']['required']['pearinstaller']['min']);
@@ -80636,14 +79642,17 @@ class PEAR_PackageFile_v2_Validator
                 }
             }
         }
+
         if ($fail) {
             return false;
         }
+
         $list = $this->_packageInfo['contents'];
         if (isset($list['dir']) && is_array($list['dir']) && isset($list['dir'][0])) {
             $this->_multipleToplevelDirNotAllowed();
             return $this->_isValid = 0;
         }
+
         $this->_validateFilelist();
         $this->_validateRelease();
         if (!$this->_stack->hasErrors()) {
@@ -80679,6 +79688,7 @@ class PEAR_PackageFile_v2_Validator
                 }
             }
         }
+
         $this->_pf->_isValid = $this->_isValid = !$this->_stack->hasErrors('error');
         if ($this->_isValid && $state == PEAR_VALIDATE_PACKAGING && !$this->_filesValid) {
             if ($this->_pf->getPackageType() == 'bundle') {
@@ -80695,9 +79705,11 @@ class PEAR_PackageFile_v2_Validator
                 }
             }
         }
+
         if ($this->_isValid) {
             return $this->_pf->_isValid = $this->_isValid = $state;
         }
+
         return $this->_pf->_isValid = $this->_isValid = 0;
     }
 
@@ -81749,7 +80761,7 @@ class PEAR_PackageFile_v2_Validator
         $this->_stack->push(__FUNCTION__, 'error',
             array('version' => $version),
             'This package.xml requires PEAR version %version% to parse properly, we are ' .
-            'version 1.7.2');
+            'version 1.8.0');
     }
 
     function _invalidTagOrder($oktags, $actual, $root)
@@ -82244,15 +81256,19 @@ class PEAR_PackageFile_v2_Validator
                 'Parser error: token_get_all() function must exist to analyze source code, PHP may have been compiled with --disable-tokenizer');
             return false;
         }
+
         if (!defined('T_DOC_COMMENT')) {
             define('T_DOC_COMMENT', T_COMMENT);
         }
+
         if (!defined('T_INTERFACE')) {
             define('T_INTERFACE', -1);
         }
+
         if (!defined('T_IMPLEMENTS')) {
             define('T_IMPLEMENTS', -1);
         }
+
         if ($string) {
             $contents = $file;
         } else {
@@ -82266,12 +81282,13 @@ class PEAR_PackageFile_v2_Validator
         // Silence this function so we can catch PHP Warnings and show our own custom message
         $tokens = @token_get_all($contents);
         if (isset($php_errormsg)) {
-            $pn = $this->_pf->getPackage();
-            $this->_stack->push(__FUNCTION__, 'warning',
-                    array('file' => $file, 'package' => $pn),
-                    'in %file%: Could not process file for unkown reasons,' .
-                    ' possibly a PHP parse error in %file% from %package%');
-
+            if (isset($this->_stack)) {
+                $pn = $this->_pf->getPackage();
+                $this->_stack->push(__FUNCTION__, 'warning',
+                        array('file' => $file, 'package' => $pn),
+                        'in %file%: Could not process file for unkown reasons,' .
+                        ' possibly a PHP parse error in %file% from %package%');
+            }
         }
 /*
         for ($i = 0; $i < sizeof($tokens); $i++) {
@@ -82312,6 +81329,7 @@ class PEAR_PackageFile_v2_Validator
                 $token = $tokens[$i];
                 $data = '';
             }
+
             if ($inquote) {
                 if ($token != '"' && $token != T_END_HEREDOC) {
                     continue;
@@ -82320,6 +81338,7 @@ class PEAR_PackageFile_v2_Validator
                     continue;
                 }
             }
+
             switch ($token) {
                 case T_WHITESPACE :
                     continue;
@@ -82355,8 +81374,14 @@ class PEAR_PackageFile_v2_Validator
                     $interface = true;
                 case T_CLASS:
                     if (($current_class_level != -1) || ($current_function_level != -1)) {
-                        $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
-                        'Parser error: invalid PHP found in file "%file%"');
+                        if (isset($this->_stack)) {
+                            $this->_stack->push(__FUNCTION__, 'error', array('file' => $file),
+                            'Parser error: invalid PHP found in file "%file%"');
+                        } else {
+                            PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
+                                PEAR_COMMON_ERROR_INVALIDPHP);
+                        }
+
                         return false;
                     }
                 case T_FUNCTION:
@@ -82370,13 +81395,21 @@ class PEAR_PackageFile_v2_Validator
                         if (in_array(strtolower($data),
                             array('public', 'private', 'protected', 'abstract',
                                   'interface', 'implements', 'throw')
-                                 )) {
-                            $this->_stack->push(__FUNCTION__, 'warning', array(
-                                'file' => $file),
-                                'Error, PHP5 token encountered in %file%,' .
-                                ' analysis should be in PHP5');
+                                 )
+                        ) {
+                            if (isset($this->_stack)) {
+                                $this->_stack->push(__FUNCTION__, 'warning', array(
+                                    'file' => $file),
+                                    'Error, PHP5 token encountered in %file%,' .
+                                    ' analysis should be in PHP5');
+                            } else {
+                                PEAR::raiseError('Error: PHP5 token encountered in ' . $file .
+                                    'packaging should be done in PHP 5');
+                                return false;
+                            }
                         }
                     }
+
                     if ($look_for == T_CLASS) {
                         $current_class = $data;
                         $current_class_level = $brace_level;
@@ -82400,11 +81433,13 @@ class PEAR_PackageFile_v2_Validator
                             $current_function = $data;
                             $declared_functions[] = $current_function;
                         }
+
                         $current_function_level = $brace_level;
                         $m = array();
                     } elseif ($look_for == T_NEW) {
                         $used_classes[$data] = true;
                     }
+
                     $look_for = 0;
                     continue 2;
                 case T_VARIABLE:
@@ -82421,17 +81456,26 @@ class PEAR_PackageFile_v2_Validator
                     continue 2;
                 case T_DOUBLE_COLON:
                     if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
-                        $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
-                            'Parser error: invalid PHP found in file "%file%"');
+                        if (isset($this->_stack)) {
+                            $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
+                                'Parser error: invalid PHP found in file "%file%"');
+                        } else {
+                            PEAR::raiseError("Parser error: invalid PHP found in file \"$file\"",
+                                PEAR_COMMON_ERROR_INVALIDPHP);
+                        }
+
                         return false;
                     }
+
                     $class = $tokens[$i - 1][1];
                     if (strtolower($class) != 'parent') {
                         $used_classes[$class] = true;
                     }
+
                     continue 2;
             }
         }
+
         return array(
             "source_file" => $file,
             "declared_classes" => $declared_classes,
@@ -82441,7 +81485,7 @@ class PEAR_PackageFile_v2_Validator
             "used_classes" => array_diff(array_keys($used_classes), $nodeps),
             "inheritance" => $extends,
             "implements" => $implements,
-            );
+        );
     }
 
     /**
@@ -82468,15 +81512,17 @@ class PEAR_PackageFile_v2_Validator
         if (!$this->_isValid) {
             return array();
         }
+
         $providesret = array();
-        $file = basename($srcinfo['source_file']);
-        $pn = $this->_pf->getPackage();
-        $pnl = strlen($pn);
+        $file        = basename($srcinfo['source_file']);
+        $pn          = isset($this->_pf) ? $this->_pf->getPackage() : '';
+        $pnl         = strlen($pn);
         foreach ($srcinfo['declared_classes'] as $class) {
             $key = "class;$class";
             if (isset($providesret[$key])) {
                 continue;
             }
+
             $providesret[$key] =
                 array('file'=> $file, 'type' => 'class', 'name' => $class);
             if (isset($srcinfo['inheritance'][$class])) {
@@ -82484,6 +81530,7 @@ class PEAR_PackageFile_v2_Validator
                     $srcinfo['inheritance'][$class];
             }
         }
+
         foreach ($srcinfo['declared_methods'] as $class => $methods) {
             foreach ($methods as $method) {
                 $function = "$class::$method";
@@ -82492,6 +81539,7 @@ class PEAR_PackageFile_v2_Validator
                     isset($providesret[$key])) {
                     continue;
                 }
+
                 $providesret[$key] =
                     array('file'=> $file, 'type' => 'function', 'name' => $function);
             }
@@ -82502,3943 +81550,3662 @@ class PEAR_PackageFile_v2_Validator
             if ($function{0} == '_' || isset($providesret[$key])) {
                 continue;
             }
+
             if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
                 $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
             }
+
             $providesret[$key] =
                 array('file'=> $file, 'type' => 'function', 'name' => $function);
         }
+
         return $providesret;
     }
-}
-?><?php
+}<?php
+/**
+ * PEAR_Registry
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V. V. Cox <cox at idecnet.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Registry.php,v 1.179 2009/04/10 19:42:18 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**
+ * for PEAR_Error
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/DependencyDB.php';
+
+define('PEAR_REGISTRY_ERROR_LOCK',         -2);
+define('PEAR_REGISTRY_ERROR_FORMAT',       -3);
+define('PEAR_REGISTRY_ERROR_FILE',         -4);
+define('PEAR_REGISTRY_ERROR_CONFLICT',     -5);
+define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
+
+/**
+ * Administration class used to maintain the installed package database.
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb at php.net>
+ * @author     Tomas V. V. Cox <cox at idecnet.com>
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a1
+ */
+class PEAR_Registry extends PEAR
+{
+    /**
+     * File containing all channel information.
+     * @var string
+     */
+    var $channels = '';
+
+    /** Directory where registry files are stored.
+     * @var string
+     */
+    var $statedir = '';
+
+    /** File where the file map is stored
+     * @var string
+     */
+    var $filemap = '';
+
+    /** Directory where registry files for channels are stored.
+     * @var string
+     */
+    var $channelsdir = '';
+
+    /** Name of file used for locking the registry
+     * @var string
+     */
+    var $lockfile = '';
+
+    /** File descriptor used during locking
+     * @var resource
+     */
+    var $lock_fp = null;
+
+    /** Mode used during locking
+     * @var int
+     */
+    var $lock_mode = 0; // XXX UNUSED
+
+    /** Cache of package information.  Structure:
+     * array(
+     *   'package' => array('id' => ... ),
+     *   ... )
+     * @var array
+     */
+    var $pkginfo_cache = array();
+
+    /** Cache of file map.  Structure:
+     * array( '/path/to/file' => 'package', ... )
+     * @var array
+     */
+    var $filemap_cache = array();
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_pearChannel;
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_peclChannel;
+
+    /**
+     * @var false|PEAR_ChannelFile
+     */
+    var $_docChannel;
+
+    /**
+     * @var PEAR_DependencyDB
+     */
+    var $_dependencyDB;
+
+    /**
+     * @var PEAR_Config
+     */
+    var $_config;
+
+    /**
+     * PEAR_Registry constructor.
+     *
+     * @param string (optional) PEAR install directory (for .php files)
+     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PEAR channel, if
+     *        default values are not desired.  Only used the very first time a PEAR
+     *        repository is initialized
+     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PECL channel, if
+     *        default values are not desired.  Only used the very first time a PEAR
+     *        repository is initialized
+     *
+     * @access public
+     */
+    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,
+                           $pecl_channel = false)
+    {
+        parent::PEAR();
+        $this->setInstallDir($pear_install_dir);
+        $this->_pearChannel = $pear_channel;
+        $this->_peclChannel = $pecl_channel;
+        $this->_config      = false;
+    }
+
+    function setInstallDir($pear_install_dir = PEAR_INSTALL_DIR)
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        $this->install_dir = $pear_install_dir;
+        $this->channelsdir = $pear_install_dir.$ds.'.channels';
+        $this->statedir    = $pear_install_dir.$ds.'.registry';
+        $this->filemap     = $pear_install_dir.$ds.'.filemap';
+        $this->lockfile    = $pear_install_dir.$ds.'.lock';
+    }
+
+    function hasWriteAccess()
+    {
+        if (!file_exists($this->install_dir)) {
+            $dir = $this->install_dir;
+            while ($dir && $dir != '.') {
+                $olddir = $dir;
+                $dir    = dirname($dir);
+                if ($dir != '.' && file_exists($dir)) {
+                    if (is_writeable($dir)) {
+                        return true;
+                    }
+
+                    return false;
+                }
+
+                if ($dir == $olddir) { // this can happen in safe mode
+                    return @is_writable($dir);
+                }
+            }
+
+            return false;
+        }
+
+        return is_writeable($this->install_dir);
+    }
+
+    function setConfig(&$config, $resetInstallDir = true)
+    {
+        $this->_config = &$config;
+        if ($resetInstallDir) {
+            $this->setInstallDir($config->get('php_dir'));
+        }
+    }
+
+    function _initializeChannelDirs()
+    {
+        static $running = false;
+        if (!$running) {
+            $running = true;
+            $ds = DIRECTORY_SEPARATOR;
+            if (!is_dir($this->channelsdir) ||
+                  !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'doc.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+                    $pear_channel = $this->_pearChannel;
+                    if (!is_a($pear_channel, 'PEAR_ChannelFile') || !$pear_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+                        }
+
+                        $pear_channel = new PEAR_ChannelFile;
+                        $pear_channel->setName('pear.php.net');
+                        $pear_channel->setAlias('pear');
+                        $pear_channel->setServer('pear.php.net');
+                        $pear_channel->setSummary('PHP Extension and Application Repository');
+                        $pear_channel->setDefaultPEARProtocols();
+                        $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
+                        $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
+                    } else {
+                        $pear_channel->setName('pear.php.net');
+                        $pear_channel->setAlias('pear');
+                    }
+
+                    $pear_channel->validate();
+                    $this->_addChannel($pear_channel);
+                }
+
+                if (!file_exists($this->channelsdir . $ds . 'pecl.php.net.reg')) {
+                    $pecl_channel = $this->_peclChannel;
+                    if (!is_a($pecl_channel, 'PEAR_ChannelFile') || !$pecl_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+                        }
+
+                        $pecl_channel = new PEAR_ChannelFile;
+                        $pecl_channel->setName('pecl.php.net');
+                        $pecl_channel->setAlias('pecl');
+                        $pecl_channel->setServer('pecl.php.net');
+                        $pecl_channel->setSummary('PHP Extension Community Library');
+                        $pecl_channel->setDefaultPEARProtocols();
+                        $pecl_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
+                        $pecl_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
+                        $pecl_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
+                    } else {
+                        $pecl_channel->setName('pecl.php.net');
+                        $pecl_channel->setAlias('pecl');
+                    }
+
+                    $pecl_channel->validate();
+                    $this->_addChannel($pecl_channel);
+                }
+
+                if (!file_exists($this->channelsdir . $ds . 'doc.php.net.reg')) {
+                    $doc_channel = $this->_docChannel;
+                    if (!is_a($doc_channel, 'PEAR_ChannelFile') || !$doc_channel->validate()) {
+                        if (!class_exists('PEAR_ChannelFile')) {
+                            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+                        }
+
+                        $doc_channel = new PEAR_ChannelFile;
+                        $doc_channel->setName('doc.php.net');
+                        $doc_channel->setAlias('phpdocs');
+                        $doc_channel->setServer('doc.php.net');
+                        $doc_channel->setSummary('PHP Documentation Team');
+                        $doc_channel->setDefaultPEARProtocols();
+                        $doc_channel->setBaseURL('REST1.0', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+                        $doc_channel->setBaseURL('REST1.1', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+                    } else {
+                        $doc_channel->setName('doc.php.net');
+                        $doc_channel->setAlias('doc');
+                    }
+
+                    $doc_channel->validate();
+                    $this->_addChannel($doc_channel);
+                }
+
+                if (!file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                    if (!class_exists('PEAR_ChannelFile')) {
+                        require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+                    }
+
+                    $private = new PEAR_ChannelFile;
+                    $private->setName('__uri');
+                    $private->setDefaultPEARProtocols();
+                    $private->setBaseURL('REST1.0', '****');
+                    $private->setSummary('Pseudo-channel for static packages');
+                    $this->_addChannel($private);
+                }
+                $this->_rebuildFileMap();
+            }
+
+            $running = false;
+        }
+    }
+
+    function _initializeDirs()
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        // XXX Compatibility code should be removed in the future
+        // rename all registry files if any to lowercase
+        if (!OS_WINDOWS && file_exists($this->statedir) && is_dir($this->statedir) &&
+              $handle = opendir($this->statedir)) {
+            $dest = $this->statedir . $ds;
+            while (false !== ($file = readdir($handle))) {
+                if (preg_match('/^.*[A-Z].*\.reg\\z/', $file)) {
+                    rename($dest . $file, $dest . strtolower($file));
+                }
+            }
+            closedir($handle);
+        }
+
+        $this->_initializeChannelDirs();
+        if (!file_exists($this->filemap)) {
+            $this->_rebuildFileMap();
+        }
+        $this->_initializeDepDB();
+    }
+
+    function _initializeDepDB()
+    {
+        if (!isset($this->_dependencyDB)) {
+            static $initializing = false;
+            if (!$initializing) {
+                $initializing = true;
+                if (!$this->_config) { // never used?
+                    $file = OS_WINDOWS ? 'pear.ini' : '.pearrc';
+                    $this->_config = &new PEAR_Config($this->statedir . DIRECTORY_SEPARATOR .
+                        $file);
+                    $this->_config->setRegistry($this);
+                    $this->_config->set('php_dir', $this->install_dir);
+                }
+
+                $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                if (PEAR::isError($this->_dependencyDB)) {
+                    // attempt to recover by removing the dep db
+                    if (file_exists($this->_config->get('php_dir', null, 'pear.php.net') .
+                        DIRECTORY_SEPARATOR . '.depdb')) {
+                        @unlink($this->_config->get('php_dir', null, 'pear.php.net') .
+                            DIRECTORY_SEPARATOR . '.depdb');
+                    }
+
+                    $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                    if (PEAR::isError($this->_dependencyDB)) {
+                        echo $this->_dependencyDB->getMessage();
+                        echo 'Unrecoverable error';
+                        exit(1);
+                    }
+                }
+
+                $initializing = false;
+            }
+        }
+    }
+
+    /**
+     * PEAR_Registry destructor.  Makes sure no locks are forgotten.
+     *
+     * @access private
+     */
+    function _PEAR_Registry()
+    {
+        parent::_PEAR();
+        if (is_resource($this->lock_fp)) {
+            $this->_unlock();
+        }
+    }
+
+    /**
+     * Make sure the directory where we keep registry files exists.
+     *
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertStateDir($channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_assertChannelStateDir($channel);
+        }
+
+        static $init = false;
+        if (!file_exists($this->statedir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
+            if (!System::mkdir(array('-p', $this->statedir))) {
+                return $this->raiseError("could not create directory '{$this->statedir}'");
+            }
+            $init = true;
+        } elseif (!is_dir($this->statedir)) {
+            return $this->raiseError('Cannot create directory ' . $this->statedir . ', ' .
+                'it already exists and is not a directory');
+        }
+
+        $ds = DIRECTORY_SEPARATOR;
+        if (!file_exists($this->channelsdir)) {
+            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . 'doc.php.net.reg') ||
+                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
+                $init = true;
+            }
+        } elseif (!is_dir($this->channelsdir)) {
+            return $this->raiseError('Cannot create directory ' . $this->channelsdir . ', ' .
+                'it already exists and is not a directory');
+        }
+
+        if ($init) {
+            static $running = false;
+            if (!$running) {
+                $running = true;
+                $this->_initializeDirs();
+                $running = false;
+                $init = false;
+            }
+        } else {
+            $this->_initializeDepDB();
+        }
+
+        return true;
+    }
+
+    /**
+     * Make sure the directory where we keep registry files exists for a non-standard channel.
+     *
+     * @param string channel name
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertChannelStateDir($channel)
+    {
+        $ds = DIRECTORY_SEPARATOR;
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+                $this->_initializeChannelDirs();
+            }
+            return $this->_assertStateDir($channel);
+        }
+
+        $channelDir = $this->_channelDirectoryName($channel);
+        if (!is_dir($this->channelsdir) ||
+              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
+            $this->_initializeChannelDirs();
+        }
+
+        if (!file_exists($channelDir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
+            if (!System::mkdir(array('-p', $channelDir))) {
+                return $this->raiseError("could not create directory '" . $channelDir .
+                    "'");
+            }
+        } elseif (!is_dir($channelDir)) {
+            return $this->raiseError("could not create directory '" . $channelDir .
+                "', already exists and is not a directory");
+        }
+
+        return true;
+    }
+
+    /**
+     * Make sure the directory where we keep registry files for channels exists
+     *
+     * @return bool TRUE if directory exists, FALSE if it could not be
+     * created
+     *
+     * @access private
+     */
+    function _assertChannelDir()
+    {
+        if (!file_exists($this->channelsdir)) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
+            if (!System::mkdir(array('-p', $this->channelsdir))) {
+                return $this->raiseError("could not create directory '{$this->channelsdir}'");
+            }
+        } elseif (!is_dir($this->channelsdir)) {
+            return $this->raiseError("could not create directory '{$this->channelsdir}" .
+                "', it already exists and is not a directory");
+        }
+
+        if (!file_exists($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
+            if (!System::mkdir(array('-p', $this->channelsdir . DIRECTORY_SEPARATOR . '.alias'))) {
+                return $this->raiseError("could not create directory '{$this->channelsdir}/.alias'");
+            }
+        } elseif (!is_dir($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
+            return $this->raiseError("could not create directory '{$this->channelsdir}" .
+                "/.alias', it already exists and is not a directory");
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the name of the file where data for a given package is stored.
+     *
+     * @param string channel name, or false if this is a PEAR package
+     * @param string package name
+     *
+     * @return string registry file name
+     *
+     * @access public
+     */
+    function _packageFileName($package, $channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_channelDirectoryName($channel) . DIRECTORY_SEPARATOR .
+                strtolower($package) . '.reg';
+        }
+
+        return $this->statedir . DIRECTORY_SEPARATOR . strtolower($package) . '.reg';
+    }
+
+    /**
+     * Get the name of the file where data for a given channel is stored.
+     * @param string channel name
+     * @return string registry file name
+     */
+    function _channelFileName($channel, $noaliases = false)
+    {
+        if (!$noaliases) {
+            if (file_exists($this->_getChannelAliasFileName($channel))) {
+                $channel = implode('', file($this->_getChannelAliasFileName($channel)));
+            }
+        }
+        return $this->channelsdir . DIRECTORY_SEPARATOR . str_replace('/', '_',
+            strtolower($channel)) . '.reg';
+    }
+
+    /**
+     * @param string
+     * @return string
+     */
+    function _getChannelAliasFileName($alias)
+    {
+        return $this->channelsdir . DIRECTORY_SEPARATOR . '.alias' .
+              DIRECTORY_SEPARATOR . str_replace('/', '_', strtolower($alias)) . '.txt';
+    }
+
+    /**
+     * Get the name of a channel from its alias
+     */
+    function _getChannelFromAlias($channel)
+    {
+        if (!$this->_channelExists($channel)) {
+            if ($channel == 'pear.php.net') {
+                return 'pear.php.net';
+            }
+
+            if ($channel == 'pecl.php.net') {
+                return 'pecl.php.net';
+            }
+
+            if ($channel == 'doc.php.net') {
+                return 'doc.php.net';
+            }
+
+            if ($channel == '__uri') {
+                return '__uri';
+            }
+
+            return false;
+        }
+
+        $channel = strtolower($channel);
+        if (file_exists($this->_getChannelAliasFileName($channel))) {
+            // translate an alias to an actual channel
+            return implode('', file($this->_getChannelAliasFileName($channel)));
+        }
+
+        return $channel;
+    }
+
+    /**
+     * Get the alias of a channel from its alias or its name
+     */
+    function _getAlias($channel)
+    {
+        if (!$this->_channelExists($channel)) {
+            if ($channel == 'pear.php.net') {
+                return 'pear';
+            }
+
+            if ($channel == 'pecl.php.net') {
+                return 'pecl';
+            }
+
+            if ($channel == 'doc.php.net') {
+                return 'phpdocs';
+            }
+
+            return false;
+        }
+
+        $channel = $this->_getChannel($channel);
+        if (PEAR::isError($channel)) {
+            return $channel;
+        }
+
+        return $channel->getAlias();
+    }
+
+    /**
+     * Get the name of the file where data for a given package is stored.
+     *
+     * @param string channel name, or false if this is a PEAR package
+     * @param string package name
+     *
+     * @return string registry file name
+     *
+     * @access public
+     */
+    function _channelDirectoryName($channel)
+    {
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            return $this->statedir;
+        }
+
+        $ch = $this->_getChannelFromAlias($channel);
+        if (!$ch) {
+            $ch = $channel;
+        }
+
+        return $this->statedir . DIRECTORY_SEPARATOR . strtolower('.channel.' .
+            str_replace('/', '_', $ch));
+    }
+
+    function _openPackageFile($package, $mode, $channel = false)
+    {
+        if (!$this->_assertStateDir($channel)) {
+            return null;
+        }
+
+        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
+            return null;
+        }
+
+        $file = $this->_packageFileName($package, $channel);
+        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
+            return null;
+        }
+
+        $fp = @fopen($file, $mode);
+        if (!$fp) {
+            return null;
+        }
+
+        return $fp;
+    }
+
+    function _closePackageFile($fp)
+    {
+        fclose($fp);
+    }
+
+    function _openChannelFile($channel, $mode)
+    {
+        if (!$this->_assertChannelDir()) {
+            return null;
+        }
+
+        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
+            return null;
+        }
+
+        $file = $this->_channelFileName($channel);
+        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
+            return null;
+        }
+
+        $fp = @fopen($file, $mode);
+        if (!$fp) {
+            return null;
+        }
+
+        return $fp;
+    }
+
+    function _closeChannelFile($fp)
+    {
+        fclose($fp);
+    }
+
+    function _rebuildFileMap()
+    {
+        if (!class_exists('PEAR_Installer_Role')) {
+            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role.php';
+        }
+
+        $channels = $this->_listAllPackages();
+        $files = array();
+        foreach ($channels as $channel => $packages) {
+            foreach ($packages as $package) {
+                $version = $this->_packageInfo($package, 'version', $channel);
+                $filelist = $this->_packageInfo($package, 'filelist', $channel);
+                if (!is_array($filelist)) {
+                    continue;
+                }
+
+                foreach ($filelist as $name => $attrs) {
+                    if (isset($attrs['attribs'])) {
+                        $attrs = $attrs['attribs'];
+                    }
+
+                    // it is possible for conflicting packages in different channels to
+                    // conflict with data files/doc files
+                    if ($name == 'dirtree') {
+                        continue;
+                    }
+
+                    if (isset($attrs['role']) && !in_array($attrs['role'],
+                          PEAR_Installer_Role::getInstallableRoles())) {
+                        // these are not installed
+                        continue;
+                    }
+
+                    if (isset($attrs['role']) && !in_array($attrs['role'],
+                          PEAR_Installer_Role::getBaseinstallRoles())) {
+                        $attrs['baseinstalldir'] = $package;
+                    }
+
+                    if (isset($attrs['baseinstalldir'])) {
+                        $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
+                    } else {
+                        $file = $name;
+                    }
+
+                    $file = preg_replace(',^/+,', '', $file);
+                    if ($channel != 'pear.php.net') {
+                        if (!isset($files[$attrs['role']])) {
+                            $files[$attrs['role']] = array();
+                        }
+                        $files[$attrs['role']][$file] = array(strtolower($channel),
+                            strtolower($package));
+                    } else {
+                        if (!isset($files[$attrs['role']])) {
+                            $files[$attrs['role']] = array();
+                        }
+                        $files[$attrs['role']][$file] = strtolower($package);
+                    }
+                }
+            }
+        }
+
+
+        $this->_assertStateDir();
+        if (!$this->hasWriteAccess()) {
+            return false;
+        }
+
+        $fp = @fopen($this->filemap, 'wb');
+        if (!$fp) {
+            return false;
+        }
+
+        $this->filemap_cache = $files;
+        fwrite($fp, serialize($files));
+        fclose($fp);
+        return true;
+    }
+
+    function _readFileMap()
+    {
+        if (!file_exists($this->filemap)) {
+            return array();
+        }
+
+        $fp = @fopen($this->filemap, 'r');
+        if (!$fp) {
+            return $this->raiseError('PEAR_Registry: could not open filemap "' . $this->filemap . '"', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
+        }
+
+        clearstatcache();
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        $fsize = filesize($this->filemap);
+        fclose($fp);
+        $data = file_get_contents($this->filemap);
+        set_magic_quotes_runtime($rt);
+        $tmp = unserialize($data);
+        if (!$tmp && $fsize > 7) {
+            return $this->raiseError('PEAR_Registry: invalid filemap data', PEAR_REGISTRY_ERROR_FORMAT, null, null, $data);
+        }
+
+        $this->filemap_cache = $tmp;
+        return true;
+    }
+
+    /**
+     * Lock the registry.
+     *
+     * @param integer lock mode, one of LOCK_EX, LOCK_SH or LOCK_UN.
+     *                See flock manual for more information.
+     *
+     * @return bool TRUE on success, FALSE if locking failed, or a
+     *              PEAR error if some other error occurs (such as the
+     *              lock file not being writable).
+     *
+     * @access private
+     */
+    function _lock($mode = LOCK_EX)
+    {
+        if (stristr(php_uname(), 'Windows 9')) {
+            return true;
+        }
+
+        if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
+            // XXX does not check type of lock (LOCK_SH/LOCK_EX)
+            return true;
+        }
+
+        if (!$this->_assertStateDir()) {
+            if ($mode == LOCK_EX) {
+                return $this->raiseError('Registry directory is not writeable by the current user');
+            }
+
+            return true;
+        }
+
+        $open_mode = 'w';
+        // XXX People reported problems with LOCK_SH and 'w'
+        if ($mode === LOCK_SH || $mode === LOCK_UN) {
+            if (!file_exists($this->lockfile)) {
+                touch($this->lockfile);
+            }
+            $open_mode = 'r';
+        }
+
+        if (!is_resource($this->lock_fp)) {
+            $this->lock_fp = @fopen($this->lockfile, $open_mode);
+        }
+
+        if (!is_resource($this->lock_fp)) {
+            $this->lock_fp = null;
+            return $this->raiseError("could not create lock file" .
+                                     (isset($php_errormsg) ? ": " . $php_errormsg : ""));
+        }
+
+        if (!(int)flock($this->lock_fp, $mode)) {
+            switch ($mode) {
+                case LOCK_SH: $str = 'shared';    break;
+                case LOCK_EX: $str = 'exclusive'; break;
+                case LOCK_UN: $str = 'unlock';    break;
+                default:      $str = 'unknown';   break;
+            }
+
+            //is resource at this point, close it on error.
+            fclose($this->lock_fp);
+            $this->lock_fp = null;
+            return $this->raiseError("could not acquire $str lock ($this->lockfile)",
+                                     PEAR_REGISTRY_ERROR_LOCK);
+        }
+
+        return true;
+    }
+
+    function _unlock()
+    {
+        $ret = $this->_lock(LOCK_UN);
+        if (is_resource($this->lock_fp)) {
+            fclose($this->lock_fp);
+        }
+
+        $this->lock_fp = null;
+        return $ret;
+    }
+
+    function _packageExists($package, $channel = false)
+    {
+        return file_exists($this->_packageFileName($package, $channel));
+    }
+
+    /**
+     * Determine whether a channel exists in the registry
+     * @param string Channel name
+     * @param bool if true, then aliases will be ignored
+     * @return boolean
+     */
+    function _channelExists($channel, $noaliases = false)
+    {
+        $a = file_exists($this->_channelFileName($channel, $noaliases));
+        if (!$a && $channel == 'pear.php.net') {
+            return true;
+        }
+
+        if (!$a && $channel == 'pecl.php.net') {
+            return true;
+        }
+
+        if (!$a && $channel == 'doc.php.net') {
+            return true;
+        }
+
+        return $a;
+    }
+
+    /**
+     * @param PEAR_ChannelFile Channel object
+     * @param donotuse
+     * @param string Last-Modified HTTP tag from remote request
+     * @return boolean|PEAR_Error True on creation, false if it already exists
+     */
+    function _addChannel($channel, $update = false, $lastmodified = false)
+    {
+        if (!is_a($channel, 'PEAR_ChannelFile')) {
+            return false;
+        }
+
+        if (!$channel->validate()) {
+            return false;
+        }
+
+        if (file_exists($this->_channelFileName($channel->getName()))) {
+            if (!$update) {
+                return false;
+            }
+
+            $checker = $this->_getChannel($channel->getName());
+            if (PEAR::isError($checker)) {
+                return $checker;
+            }
+
+            if ($channel->getAlias() != $checker->getAlias()) {
+                if (file_exists($this->_getChannelAliasFileName($checker->getAlias()))) {
+                    @unlink($this->_getChannelAliasFileName($checker->getAlias()));
+                }
+            }
+        } else {
+            if ($update && !in_array($channel->getName(), array('pear.php.net', 'pecl.php.net', 'doc.php.net'))) {
+                return false;
+            }
+        }
+
+        $ret = $this->_assertChannelDir();
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+
+        $ret = $this->_assertChannelStateDir($channel->getName());
+        if (PEAR::isError($ret)) {
+            return $ret;
+        }
+
+        if ($channel->getAlias() != $channel->getName()) {
+            if (file_exists($this->_getChannelAliasFileName($channel->getAlias())) &&
+                  $this->_getChannelFromAlias($channel->getAlias()) != $channel->getName()) {
+                $channel->setAlias($channel->getName());
+            }
+
+            if (!$this->hasWriteAccess()) {
+                return false;
+            }
+
+            $fp = @fopen($this->_getChannelAliasFileName($channel->getAlias()), 'w');
+            if (!$fp) {
+                return false;
+            }
+
+            fwrite($fp, $channel->getName());
+            fclose($fp);
+        }
+
+        if (!$this->hasWriteAccess()) {
+            return false;
+        }
+
+        $fp = @fopen($this->_channelFileName($channel->getName()), 'wb');
+        if (!$fp) {
+            return false;
+        }
+
+        $info = $channel->toArray();
+        if ($lastmodified) {
+            $info['_lastmodified'] = $lastmodified;
+        } else {
+            $info['_lastmodified'] = date('r');
+        }
+
+        fwrite($fp, serialize($info));
+        fclose($fp);
+        return true;
+    }
+
+    /**
+     * Deletion fails if there are any packages installed from the channel
+     * @param string|PEAR_ChannelFile channel name
+     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
+     */
+    function _deleteChannel($channel)
+    {
+        if (!is_string($channel)) {
+            if (!is_a($channel, 'PEAR_ChannelFile')) {
+                return false;
+            }
+
+            if (!$channel->validate()) {
+                return false;
+            }
+            $channel = $channel->getName();
+        }
+
+        if ($this->_getChannelFromAlias($channel) == '__uri') {
+            return false;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
+            return false;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'doc.php.net') {
+            return false;
+        }
+
+        if (!$this->_channelExists($channel)) {
+            return false;
+        }
+
+        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            return false;
+        }
+
+        $channel = $this->_getChannelFromAlias($channel);
+        if ($channel == 'pear.php.net') {
+            return false;
+        }
+
+        $test = $this->_listChannelPackages($channel);
+        if (count($test)) {
+            return false;
+        }
+
+        $test = @rmdir($this->_channelDirectoryName($channel));
+        if (!$test) {
+            return false;
+        }
+
+        $file = $this->_getChannelAliasFileName($this->_getAlias($channel));
+        if (file_exists($file)) {
+            $test = @unlink($file);
+            if (!$test) {
+                return false;
+            }
+        }
+
+        $file = $this->_channelFileName($channel);
+        $ret = true;
+        if (file_exists($file)) {
+            $ret = @unlink($file);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Determine whether a channel exists in the registry
+     * @param string Channel Alias
+     * @return boolean
+     */
+    function _isChannelAlias($alias)
+    {
+        return file_exists($this->_getChannelAliasFileName($alias));
+    }
+
+    /**
+     * @param string|null
+     * @param string|null
+     * @param string|null
+     * @return array|null
+     * @access private
+     */
+    function _packageInfo($package = null, $key = null, $channel = 'pear.php.net')
+    {
+        if ($package === null) {
+            if ($channel === null) {
+                $channels = $this->_listChannels();
+                $ret = array();
+                foreach ($channels as $channel) {
+                    $channel = strtolower($channel);
+                    $ret[$channel] = array();
+                    $packages = $this->_listPackages($channel);
+                    foreach ($packages as $package) {
+                        $ret[$channel][] = $this->_packageInfo($package, null, $channel);
+                    }
+                }
+
+                return $ret;
+            }
+
+            $ps = $this->_listPackages($channel);
+            if (!count($ps)) {
+                return array();
+            }
+            return array_map(array(&$this, '_packageInfo'),
+                             $ps, array_fill(0, count($ps), null),
+                             array_fill(0, count($ps), $channel));
+        }
+
+        $fp = $this->_openPackageFile($package, 'r', $channel);
+        if ($fp === null) {
+            return null;
+        }
+
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        $this->_closePackageFile($fp);
+        $data = file_get_contents($this->_packageFileName($package, $channel));
+        set_magic_quotes_runtime($rt);
+        $data = unserialize($data);
+        if ($key === null) {
+            return $data;
+        }
+
+        // compatibility for package.xml version 2.0
+        if (isset($data['old'][$key])) {
+            return $data['old'][$key];
+        }
+
+        if (isset($data[$key])) {
+            return $data[$key];
+        }
+
+        return null;
+    }
+
+    /**
+     * @param string Channel name
+     * @param bool whether to strictly retrieve info of channels, not just aliases
+     * @return array|null
+     */
+    function _channelInfo($channel, $noaliases = false)
+    {
+        if (!$this->_channelExists($channel, $noaliases)) {
+            return null;
+        }
+
+        $fp = $this->_openChannelFile($channel, 'r');
+        if ($fp === null) {
+            return null;
+        }
+
+        $rt = get_magic_quotes_runtime();
+        set_magic_quotes_runtime(0);
+        clearstatcache();
+        $this->_closeChannelFile($fp);
+        $data = file_get_contents($this->_channelFileName($channel));
+        set_magic_quotes_runtime($rt);
+        $data = unserialize($data);
+        return $data;
+    }
+
+    function _listChannels()
+    {
+        $channellist = array();
+        if (!file_exists($this->channelsdir) || !is_dir($this->channelsdir)) {
+            return array('pear.php.net', 'pecl.php.net', 'doc.php.net', '__uri');
+        }
+
+        $dp = opendir($this->channelsdir);
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+
+            if ($ent == '__uri.reg') {
+                $channellist[] = '__uri';
+                continue;
+            }
+
+            $channellist[] = str_replace('_', '/', substr($ent, 0, -4));
+        }
+
+        closedir($dp);
+        if (!in_array('pear.php.net', $channellist)) {
+            $channellist[] = 'pear.php.net';
+        }
+
+        if (!in_array('pecl.php.net', $channellist)) {
+            $channellist[] = 'pecl.php.net';
+        }
+
+        if (!in_array('doc.php.net', $channellist)) {
+            $channellist[] = 'doc.php.net';
+        }
+
+
+        if (!in_array('__uri', $channellist)) {
+            $channellist[] = '__uri';
+        }
+
+        natsort($channellist);
+        return $channellist;
+    }
+
+    function _listPackages($channel = false)
+    {
+        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
+            return $this->_listChannelPackages($channel);
+        }
+
+        if (!file_exists($this->statedir) || !is_dir($this->statedir)) {
+            return array();
+        }
+
+        $pkglist = array();
+        $dp = opendir($this->statedir);
+        if (!$dp) {
+            return $pkglist;
+        }
+
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+
+            $pkglist[] = substr($ent, 0, -4);
+        }
+        closedir($dp);
+        return $pkglist;
+    }
+
+    function _listChannelPackages($channel)
+    {
+        $pkglist = array();
+        if (!file_exists($this->_channelDirectoryName($channel)) ||
+              !is_dir($this->_channelDirectoryName($channel))) {
+            return array();
+        }
+
+        $dp = opendir($this->_channelDirectoryName($channel));
+        if (!$dp) {
+            return $pkglist;
+        }
+
+        while ($ent = readdir($dp)) {
+            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+                continue;
+            }
+            $pkglist[] = substr($ent, 0, -4);
+        }
+
+        closedir($dp);
+        return $pkglist;
+    }
+
+    function _listAllPackages()
+    {
+        $ret = array();
+        foreach ($this->_listChannels() as $channel) {
+            $ret[$channel] = $this->_listPackages($channel);
+        }
+
+        return $ret;
+    }
+
+    /**
+     * Add an installed package to the registry
+     * @param string package name
+     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
+     * @return bool success of saving
+     * @access private
+     */
+    function _addPackage($package, $info)
+    {
+        if ($this->_packageExists($package)) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($package, 'wb');
+        if ($fp === null) {
+            return false;
+        }
+
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        if (isset($info['filelist'])) {
+            $this->_rebuildFileMap();
+        }
+
+        return true;
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     * @access private
+     */
+    function _addPackage2($info)
+    {
+        if (!is_a($info, 'PEAR_PackageFile_v1') && !is_a($info, 'PEAR_PackageFile_v2')) {
+            return false;
+        }
+
+        if (!$info->validate()) {
+            if (class_exists('PEAR_Common')) {
+                $ui = PEAR_Frontend::singleton();
+                if ($ui) {
+                    foreach ($info->getValidationWarnings() as $err) {
+                        $ui->log($err['message'], true);
+                    }
+                }
+            }
+            return false;
+        }
+
+        $channel = $info->getChannel();
+        $package = $info->getPackage();
+        $save = $info;
+        if ($this->_packageExists($package, $channel)) {
+            return false;
+        }
+
+        if (!$this->_channelExists($channel, true)) {
+            return false;
+        }
+
+        $info = $info->toArray(true);
+        if (!$info) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($package, 'wb', $channel);
+        if ($fp === null) {
+            return false;
+        }
+
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        $this->_rebuildFileMap();
+        return true;
+    }
+
+    /**
+     * @param string Package name
+     * @param array parsed package.xml 1.0
+     * @param bool this parameter is only here for BC.  Don't use it.
+     * @access private
+     */
+    function _updatePackage($package, $info, $merge = true)
+    {
+        $oldinfo = $this->_packageInfo($package);
+        if (empty($oldinfo)) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($package, 'w');
+        if ($fp === null) {
+            return false;
+        }
+
+        if (is_object($info)) {
+            $info = $info->toArray();
+        }
+        $info['_lastmodified'] = time();
+
+        $newinfo = $info;
+        if ($merge) {
+            $info = array_merge($oldinfo, $info);
+        } else {
+            $diff = $info;
+        }
+
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        if (isset($newinfo['filelist'])) {
+            $this->_rebuildFileMap();
+        }
+
+        return true;
+    }
+
+    /**
+     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
+     * @return bool
+     * @access private
+     */
+    function _updatePackage2($info)
+    {
+        if (!$this->_packageExists($info->getPackage(), $info->getChannel())) {
+            return false;
+        }
+
+        $fp = $this->_openPackageFile($info->getPackage(), 'w', $info->getChannel());
+        if ($fp === null) {
+            return false;
+        }
+
+        $save = $info;
+        $info = $save->getArray(true);
+        $info['_lastmodified'] = time();
+        fwrite($fp, serialize($info));
+        $this->_closePackageFile($fp);
+        $this->_rebuildFileMap();
+        return true;
+    }
+
+    /**
+     * @param string Package name
+     * @param string Channel name
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
+     * @access private
+     */
+    function &_getPackage($package, $channel = 'pear.php.net')
+    {
+        $info = $this->_packageInfo($package, null, $channel);
+        if ($info === null) {
+            return $info;
+        }
+
+        $a = $this->_config;
+        if (!$a) {
+            $this->_config = &new PEAR_Config;
+            $this->_config->set('php_dir', $this->statedir);
+        }
+
+        if (!class_exists('PEAR_PackageFile')) {
+            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile.php';
+        }
+
+        $pkg = &new PEAR_PackageFile($this->_config);
+        $pf = &$pkg->fromArray($info);
+        return $pf;
+    }
+
+    /**
+     * @param string channel name
+     * @param bool whether to strictly retrieve channel names
+     * @return PEAR_ChannelFile|PEAR_Error
+     * @access private
+     */
+    function &_getChannel($channel, $noaliases = false)
+    {
+        $ch = false;
+        if ($this->_channelExists($channel, $noaliases)) {
+            $chinfo = $this->_channelInfo($channel, $noaliases);
+            if ($chinfo) {
+                if (!class_exists('PEAR_ChannelFile')) {
+                    require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+                }
+
+                $ch = &PEAR_ChannelFile::fromArrayWithErrors($chinfo);
+            }
+        }
+
+        if ($ch) {
+            if ($ch->validate()) {
+                return $ch;
+            }
+
+            foreach ($ch->getErrors(true) as $err) {
+                $message = $err['message'] . "\n";
+            }
+
+            $ch = PEAR::raiseError($message);
+            return $ch;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'pear.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+            }
+
+            $pear_channel = new PEAR_ChannelFile;
+            $pear_channel->setName('pear.php.net');
+            $pear_channel->setAlias('pear');
+            $pear_channel->setSummary('PHP Extension and Application Repository');
+            $pear_channel->setDefaultPEARProtocols();
+            $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
+            $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
+            return $pear_channel;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+            }
+            $pear_channel = new PEAR_ChannelFile;
+            $pear_channel->setName('pecl.php.net');
+            $pear_channel->setAlias('pecl');
+            $pear_channel->setSummary('PHP Extension Community Library');
+            $pear_channel->setDefaultPEARProtocols();
+            $pear_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
+            $pear_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
+            $pear_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
+            return $pear_channel;
+        }
+
+        if ($this->_getChannelFromAlias($channel) == 'doc.php.net') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+            }
+
+            $doc_channel = new PEAR_ChannelFile;
+            $doc_channel->setName('doc.php.net');
+            $doc_channel->setAlias('phpdocs');
+            $doc_channel->setSummary('PHP Documentation Team');
+            $doc_channel->setDefaultPEARProtocols();
+            $doc_channel->setBaseURL('REST1.0', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+            $doc_channel->setBaseURL('REST1.1', 'http://doc.php.net/Chiara_PEAR_Server_REST/');
+            return $doc_channel;
+        }
+
+
+        if ($this->_getChannelFromAlias($channel) == '__uri') {
+            // the registry is not properly set up, so use defaults
+            if (!class_exists('PEAR_ChannelFile')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+            }
+
+            $private = new PEAR_ChannelFile;
+            $private->setName('__uri');
+            $private->setDefaultPEARProtocols();
+            $private->setBaseURL('REST1.0', '****');
+            $private->setSummary('Pseudo-channel for static packages');
+            return $private;
+        }
+
+        return $ch;
+    }
+
+    /**
+     * @param string Package name
+     * @param string Channel name
+     * @return bool
+     */
+    function packageExists($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_packageExists($package, $channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    // {{{ channelExists()
+
+    /**
+     * @param string channel name
+     * @param bool if true, then aliases will be ignored
+     * @return bool
+     */
+    function channelExists($channel, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_channelExists($channel, $noaliases);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    // {{{ isAlias()
+
+    /**
+     * Determines whether the parameter is an alias of a channel
+     * @param string
+     * @return bool
+     */
+    function isAlias($alias)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_isChannelAlias($alias);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ packageInfo()
+
+    /**
+     * @param string|null
+     * @param string|null
+     * @param string
+     * @return array|null
+     */
+    function packageInfo($package = null, $key = null, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_packageInfo($package, $key, $channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ channelInfo()
+
+    /**
+     * Retrieve a raw array of channel data.
+     *
+     * Do not use this, instead use {@link getChannel()} for normal
+     * operations.  Array structure is undefined in this method
+     * @param string channel name
+     * @param bool whether to strictly retrieve information only on non-aliases
+     * @return array|null|PEAR_Error
+     */
+    function channelInfo($channel = null, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_channelInfo($channel, $noaliases);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+
+    /**
+     * @param string
+     */
+    function channelName($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_getChannelFromAlias($channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    /**
+     * @param string
+     */
+    function channelAlias($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_getAlias($channel);
+        $this->_unlock();
+        return $ret;
+    }
+    // {{{ listPackages()
+
+    function listPackages($channel = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listPackages($channel);
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ listAllPackages()
+
+    function listAllPackages()
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listAllPackages();
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ listChannel()
+
+    function listChannels()
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = $this->_listChannels();
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addPackage()
+
+    /**
+     * Add an installed package to the registry
+     * @param string|PEAR_PackageFile_v1|PEAR_PackageFile_v2 package name or object
+     *               that will be passed to {@link addPackage2()}
+     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
+     * @return bool success of saving
+     */
+    function addPackage($package, $info)
+    {
+        if (is_object($info)) {
+            return $this->addPackage2($info);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addPackage($package, $info);
+        $this->_unlock();
+        if ($ret) {
+            if (!class_exists('PEAR_PackageFile_v1')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
+            }
+            $pf = new PEAR_PackageFile_v1;
+            $pf->setConfig($this->_config);
+            $pf->fromArray($info);
+            $this->_dependencyDB->uninstallPackage($pf);
+            $this->_dependencyDB->installPackage($pf);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addPackage2()
+
+    function addPackage2($info)
+    {
+        if (!is_object($info)) {
+            return $this->addPackage($info['package'], $info);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addPackage2($info);
+        $this->_unlock();
+        if ($ret) {
+            $this->_dependencyDB->uninstallPackage($info);
+            $this->_dependencyDB->installPackage($info);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updateChannel()
+
+    /**
+     * For future expandibility purposes, separate this
+     * @param PEAR_ChannelFile
+     */
+    function updateChannel($channel, $lastmodified = null)
+    {
+        if ($channel->getName() == '__uri') {
+            return false;
+        }
+        return $this->addChannel($channel, $lastmodified, true);
+    }
+
+    // }}}
+    // {{{ deleteChannel()
+
+    /**
+     * Deletion fails if there are any packages installed from the channel
+     * @param string|PEAR_ChannelFile channel name
+     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
+     */
+    function deleteChannel($channel)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_deleteChannel($channel);
+        $this->_unlock();
+        if ($ret && is_a($this->_config, 'PEAR_Config')) {
+            $this->_config->setChannels($this->listChannels());
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ addChannel()
+
+    /**
+     * @param PEAR_ChannelFile Channel object
+     * @param string Last-Modified header from HTTP for caching
+     * @return boolean|PEAR_Error True on creation, false if it already exists
+     */
+    function addChannel($channel, $lastmodified = false, $update = false)
+    {
+        if (!is_a($channel, 'PEAR_ChannelFile')) {
+            return false;
+        }
+        if (!$channel->validate()) {
+            return false;
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_addChannel($channel, $update, $lastmodified);
+        $this->_unlock();
+        if (!$update && $ret && is_a($this->_config, 'PEAR_Config')) {
+            $this->_config->setChannels($this->listChannels());
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ deletePackage()
+
+    function deletePackage($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $file = $this->_packageFileName($package, $channel);
+        if (file_exists($file)) {
+            $ret = @unlink($file);
+        } else {
+            $ret = false;
+        }
+        $this->_rebuildFileMap();
+        $this->_unlock();
+        $p = array('channel' => $channel, 'package' => $package);
+        $this->_dependencyDB->uninstallPackage($p);
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updatePackage()
+
+    function updatePackage($package, $info, $merge = true)
+    {
+        if (is_object($info)) {
+            return $this->updatePackage2($info, $merge);
+        }
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+        $ret = $this->_updatePackage($package, $info, $merge);
+        $this->_unlock();
+        if ($ret) {
+            if (!class_exists('PEAR_PackageFile_v1')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
+            }
+            $pf = new PEAR_PackageFile_v1;
+            $pf->setConfig($this->_config);
+            $pf->fromArray($this->packageInfo($package));
+            $this->_dependencyDB->uninstallPackage($pf);
+            $this->_dependencyDB->installPackage($pf);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ updatePackage2()
+
+    function updatePackage2($info)
+    {
+
+        if (!is_object($info)) {
+            return $this->updatePackage($info['package'], $info, $merge);
+        }
+
+        if (!$info->validate(PEAR_VALIDATE_DOWNLOADING)) {
+            return false;
+        }
+
+        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
+            return $e;
+        }
+
+        $ret = $this->_updatePackage2($info);
+        $this->_unlock();
+        if ($ret) {
+            $this->_dependencyDB->uninstallPackage($info);
+            $this->_dependencyDB->installPackage($info);
+        }
+
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getChannel()
+    /**
+     * @param string channel name
+     * @param bool whether to strictly return raw channels (no aliases)
+     * @return PEAR_ChannelFile|PEAR_Error
+     */
+    function &getChannel($channel, $noaliases = false)
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $ret = &$this->_getChannel($channel, $noaliases);
+        $this->_unlock();
+        if (!$ret) {
+            return PEAR::raiseError('Unknown channel: ' . $channel);
+        }
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getPackage()
+    /**
+     * @param string package name
+     * @param string channel name
+     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
+     */
+    function &getPackage($package, $channel = 'pear.php.net')
+    {
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        $pf = &$this->_getPackage($package, $channel);
+        $this->_unlock();
+        return $pf;
+    }
+
+    // }}}
+
+    /**
+     * Get PEAR_PackageFile_v[1/2] objects representing the contents of
+     * a dependency group that are installed.
+     *
+     * This is used at uninstall-time
+     * @param array
+     * @return array|false
+     */
+    function getInstalledGroup($group)
+    {
+        $ret = array();
+        if (isset($group['package'])) {
+            if (!isset($group['package'][0])) {
+                $group['package'] = array($group['package']);
+            }
+            foreach ($group['package'] as $package) {
+                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
+                $p = &$this->getPackage($package['name'], $depchannel);
+                if ($p) {
+                    $save = &$p;
+                    $ret[] = &$save;
+                }
+            }
+        }
+        if (isset($group['subpackage'])) {
+            if (!isset($group['subpackage'][0])) {
+                $group['subpackage'] = array($group['subpackage']);
+            }
+            foreach ($group['subpackage'] as $package) {
+                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
+                $p = &$this->getPackage($package['name'], $depchannel);
+                if ($p) {
+                    $save = &$p;
+                    $ret[] = &$save;
+                }
+            }
+        }
+        if (!count($ret)) {
+            return false;
+        }
+        return $ret;
+    }
+
+    // {{{ getChannelValidator()
+    /**
+     * @param string channel name
+     * @return PEAR_Validate|false
+     */
+    function &getChannelValidator($channel)
+    {
+        $chan = $this->getChannel($channel);
+        if (PEAR::isError($chan)) {
+            return $chan;
+        }
+        $val = $chan->getValidationObject();
+        return $val;
+    }
+    // }}}
+    // {{{ getChannels()
+    /**
+     * @param string channel name
+     * @return array an array of PEAR_ChannelFile objects representing every installed channel
+     */
+    function &getChannels()
+    {
+        $ret = array();
+        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+            return $e;
+        }
+        foreach ($this->_listChannels() as $channel) {
+            $e = &$this->_getChannel($channel);
+            if (!$e || PEAR::isError($e)) {
+                continue;
+            }
+            $ret[] = $e;
+        }
+        $this->_unlock();
+        return $ret;
+    }
+
+    // }}}
+    // {{{ checkFileMap()
+
+    /**
+     * Test whether a file or set of files belongs to a package.
+     *
+     * If an array is passed in
+     * @param string|array file path, absolute or relative to the pear
+     *                     install dir
+     * @param string|array name of PEAR package or array('package' => name, 'channel' =>
+     *                     channel) of a package that will be ignored
+     * @param string API version - 1.1 will exclude any files belonging to a package
+     * @param array private recursion variable
+     * @return array|false which package and channel the file belongs to, or an empty
+     *                     string if the file does not belong to an installed package,
+     *                     or belongs to the second parameter's package
+     */
+    function checkFileMap($path, $package = false, $api = '1.0', $attrs = false)
+    {
+        if (is_array($path)) {
+            static $notempty;
+            if (empty($notempty)) {
+                if (!class_exists('PEAR_Installer_Role')) {
+                    require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role.php';
+                }
+                $notempty = create_function('$a','return !empty($a);');
+            }
+            $package = is_array($package) ? array(strtolower($package[0]), strtolower($package[1]))
+                : strtolower($package);
+            $pkgs = array();
+            foreach ($path as $name => $attrs) {
+                if (is_array($attrs)) {
+                    if (isset($attrs['install-as'])) {
+                        $name = $attrs['install-as'];
+                    }
+                    if (!in_array($attrs['role'], PEAR_Installer_Role::getInstallableRoles())) {
+                        // these are not installed
+                        continue;
+                    }
+                    if (!in_array($attrs['role'], PEAR_Installer_Role::getBaseinstallRoles())) {
+                        $attrs['baseinstalldir'] = is_array($package) ? $package[1] : $package;
+                    }
+                    if (isset($attrs['baseinstalldir'])) {
+                        $name = $attrs['baseinstalldir'] . DIRECTORY_SEPARATOR . $name;
+                    }
+                }
+                $pkgs[$name] = $this->checkFileMap($name, $package, $api, $attrs);
+                if (PEAR::isError($pkgs[$name])) {
+                    return $pkgs[$name];
+                }
+            }
+            return array_filter($pkgs, $notempty);
+        }
+        if (empty($this->filemap_cache)) {
+            if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
+                return $e;
+            }
+            $err = $this->_readFileMap();
+            $this->_unlock();
+            if (PEAR::isError($err)) {
+                return $err;
+            }
+        }
+        if (!$attrs) {
+            $attrs = array('role' => 'php'); // any old call would be for PHP role only
+        }
+        if (isset($this->filemap_cache[$attrs['role']][$path])) {
+            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
+                return false;
+            }
+            return $this->filemap_cache[$attrs['role']][$path];
+        }
+        $l = strlen($this->install_dir);
+        if (substr($path, 0, $l) == $this->install_dir) {
+            $path = preg_replace('!^'.DIRECTORY_SEPARATOR.'+!', '', substr($path, $l));
+        }
+        if (isset($this->filemap_cache[$attrs['role']][$path])) {
+            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
+                return false;
+            }
+            return $this->filemap_cache[$attrs['role']][$path];
+        }
+        return false;
+    }
+
+    // }}}
+    // {{{ flush()
+    /**
+     * Force a reload of the filemap
+     * @since 1.5.0RC3
+     */
+    function flushFileMap()
+    {
+        $this->filemap_cache = null;
+        clearstatcache(); // ensure that the next read gets the full, current filemap
+    }
+
+    // }}}
+    // {{{ apiVersion()
+    /**
+     * Get the expected API version.  Channels API is version 1.1, as it is backwards
+     * compatible with 1.0
+     * @return string
+     */
+    function apiVersion()
+    {
+        return '1.1';
+    }
+    // }}}
+
+
+    /**
+     * Parse a package name, or validate a parsed package name array
+     * @param string|array pass in an array of format
+     *                     array(
+     *                      'package' => 'pname',
+     *                     ['channel' => 'channame',]
+     *                     ['version' => 'version',]
+     *                     ['state' => 'state',]
+     *                     ['group' => 'groupname'])
+     *                     or a string of format
+     *                     [channel://][channame/]pname[-version|-state][/group=groupname]
+     * @return array|PEAR_Error
+     */
+    function parsePackageName($param, $defaultchannel = 'pear.php.net')
+    {
+        $saveparam = $param;
+        if (is_array($param)) {
+            // convert to string for error messages
+            $saveparam = $this->parsedPackageNameToString($param);
+            // process the array
+            if (!isset($param['package'])) {
+                return PEAR::raiseError('parsePackageName(): array $param ' .
+                    'must contain a valid package name in index "param"',
+                    'package', null, null, $param);
+            }
+            if (!isset($param['uri'])) {
+                if (!isset($param['channel'])) {
+                    $param['channel'] = $defaultchannel;
+                }
+            } else {
+                $param['channel'] = '__uri';
+            }
+        } else {
+            $components = @parse_url((string) $param);
+            if (isset($components['scheme'])) {
+                if ($components['scheme'] == 'http') {
+                    // uri package
+                    $param = array('uri' => $param, 'channel' => '__uri');
+                } elseif($components['scheme'] != 'channel') {
+                    return PEAR::raiseError('parsePackageName(): only channel:// uris may ' .
+                        'be downloaded, not "' . $param . '"', 'invalid', null, null, $param);
+                }
+            }
+            if (!isset($components['path'])) {
+                return PEAR::raiseError('parsePackageName(): array $param ' .
+                    'must contain a valid package name in "' . $param . '"',
+                    'package', null, null, $param);
+            }
+            if (isset($components['host'])) {
+                // remove the leading "/"
+                $components['path'] = substr($components['path'], 1);
+            }
+            if (!isset($components['scheme'])) {
+                if (strpos($components['path'], '/') !== false) {
+                    if ($components['path']{0} == '/') {
+                        return PEAR::raiseError('parsePackageName(): this is not ' .
+                            'a package name, it begins with "/" in "' . $param . '"',
+                            'invalid', null, null, $param);
+                    }
+                    $parts = explode('/', $components['path']);
+                    $components['host'] = array_shift($parts);
+                    if (count($parts) > 1) {
+                        $components['path'] = array_pop($parts);
+                        $components['host'] .= '/' . implode('/', $parts);
+                    } else {
+                        $components['path'] = implode('/', $parts);
+                    }
+                } else {
+                    $components['host'] = $defaultchannel;
+                }
+            } else {
+                if (strpos($components['path'], '/')) {
+                    $parts = explode('/', $components['path']);
+                    $components['path'] = array_pop($parts);
+                    $components['host'] .= '/' . implode('/', $parts);
+                }
+            }
+
+            if (is_array($param)) {
+                $param['package'] = $components['path'];
+            } else {
+                $param = array(
+                    'package' => $components['path']
+                    );
+                if (isset($components['host'])) {
+                    $param['channel'] = $components['host'];
+                }
+            }
+            if (isset($components['fragment'])) {
+                $param['group'] = $components['fragment'];
+            }
+            if (isset($components['user'])) {
+                $param['user'] = $components['user'];
+            }
+            if (isset($components['pass'])) {
+                $param['pass'] = $components['pass'];
+            }
+            if (isset($components['query'])) {
+                parse_str($components['query'], $param['opts']);
+            }
+            // check for extension
+            $pathinfo = pathinfo($param['package']);
+            if (isset($pathinfo['extension']) &&
+                  in_array(strtolower($pathinfo['extension']), array('tgz', 'tar'))) {
+                $param['extension'] = $pathinfo['extension'];
+                $param['package'] = substr($pathinfo['basename'], 0,
+                    strlen($pathinfo['basename']) - 4);
+            }
+            // check for version
+            if (strpos($param['package'], '-')) {
+                $test = explode('-', $param['package']);
+                if (count($test) != 2) {
+                    return PEAR::raiseError('parsePackageName(): only one version/state ' .
+                        'delimiter "-" is allowed in "' . $saveparam . '"',
+                        'version', null, null, $param);
+                }
+                list($param['package'], $param['version']) = $test;
+            }
+        }
+        // validation
+        $info = $this->channelExists($param['channel']);
+        if (PEAR::isError($info)) {
+            return $info;
+        }
+        if (!$info) {
+            return PEAR::raiseError('unknown channel "' . $param['channel'] .
+                '" in "' . $saveparam . '"', 'channel', null, null, $param);
+        }
+        $chan = $this->getChannel($param['channel']);
+        if (PEAR::isError($chan)) {
+            return $chan;
+        }
+        if (!$chan) {
+            return PEAR::raiseError("Exception: corrupt registry, could not " .
+                "retrieve channel " . $param['channel'] . " information",
+                'registry', null, null, $param);
+        }
+        $param['channel'] = $chan->getName();
+        $validate = $chan->getValidationObject();
+        $vpackage = $chan->getValidationPackage();
+        // validate package name
+        if (!$validate->validPackageName($param['package'], $vpackage['_content'])) {
+            return PEAR::raiseError('parsePackageName(): invalid package name "' .
+                $param['package'] . '" in "' . $saveparam . '"',
+                'package', null, null, $param);
+        }
+        if (isset($param['group'])) {
+            if (!PEAR_Validate::validGroupName($param['group'])) {
+                return PEAR::raiseError('parsePackageName(): dependency group "' . $param['group'] .
+                    '" is not a valid group name in "' . $saveparam . '"', 'group', null, null,
+                    $param);
+            }
+        }
+        if (isset($param['state'])) {
+            if (!in_array(strtolower($param['state']), $validate->getValidStates())) {
+                return PEAR::raiseError('parsePackageName(): state "' . $param['state']
+                    . '" is not a valid state in "' . $saveparam . '"',
+                    'state', null, null, $param);
+            }
+        }
+        if (isset($param['version'])) {
+            if (isset($param['state'])) {
+                return PEAR::raiseError('parsePackageName(): cannot contain both ' .
+                    'a version and a stability (state) in "' . $saveparam . '"',
+                    'version/state', null, null, $param);
+            }
+            // check whether version is actually a state
+            if (in_array(strtolower($param['version']), $validate->getValidStates())) {
+                $param['state'] = strtolower($param['version']);
+                unset($param['version']);
+            } else {
+                if (!$validate->validVersion($param['version'])) {
+                    return PEAR::raiseError('parsePackageName(): "' . $param['version'] .
+                        '" is neither a valid version nor a valid state in "' .
+                        $saveparam . '"', 'version/state', null, null, $param);
+                }
+            }
+        }
+        return $param;
+    }
+
+    /**
+     * @param array
+     * @return string
+     */
+    function parsedPackageNameToString($parsed, $brief = false)
+    {
+        if (is_string($parsed)) {
+            return $parsed;
+        }
+        if (is_object($parsed)) {
+            $p = $parsed;
+            $parsed = array(
+                'package' => $p->getPackage(),
+                'channel' => $p->getChannel(),
+                'version' => $p->getVersion(),
+            );
+        }
+        if (isset($parsed['uri'])) {
+            return $parsed['uri'];
+        }
+        if ($brief) {
+            if ($channel = $this->channelAlias($parsed['channel'])) {
+                return $channel . '/' . $parsed['package'];
+            }
+        }
+        $upass = '';
+        if (isset($parsed['user'])) {
+            $upass = $parsed['user'];
+            if (isset($parsed['pass'])) {
+                $upass .= ':' . $parsed['pass'];
+            }
+            $upass = "$upass@";
+        }
+        $ret = 'channel://' . $upass . $parsed['channel'] . '/' . $parsed['package'];
+        if (isset($parsed['version']) || isset($parsed['state'])) {
+            $ver = isset($parsed['version']) ? $parsed['version'] : '';
+            $ver .= isset($parsed['state']) ? $parsed['state'] : '';
+            $ret .= '-' . $ver;
+        }
+        if (isset($parsed['extension'])) {
+            $ret .= '.' . $parsed['extension'];
+        }
+        if (isset($parsed['opts'])) {
+            $ret .= '?';
+            foreach ($parsed['opts'] as $name => $value) {
+                $parsed['opts'][$name] = "$name=$value";
+            }
+            $ret .= implode('&', $parsed['opts']);
+        }
+        if (isset($parsed['group'])) {
+            $ret .= '#' . $parsed['group'];
+        }
+        return $ret;
+    }
+}<?php
 /**
- * PEAR_Registry
+ * PEAR_REST
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Registry.php,v 1.171 2008/05/14 04:16:08 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: REST.php,v 1.40 2009/03/26 23:12:46 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
+ * @since      File available since Release 1.4.0a1
  */
 
 /**
- * for PEAR_Error
+ * For downloading xml files
  */
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/DependencyDB.php';
-
-define('PEAR_REGISTRY_ERROR_LOCK',   -2);
-define('PEAR_REGISTRY_ERROR_FORMAT', -3);
-define('PEAR_REGISTRY_ERROR_FILE',   -4);
-define('PEAR_REGISTRY_ERROR_CONFLICT', -5);
-define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/XMLParser.php';
 
 /**
- * Administration class used to maintain the installed package database.
+ * Intelligently retrieve data, following hyperlinks if necessary, and re-directing
+ * as well
  * @category   pear
  * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Tomas V. V. Cox <cox at idecnet.com>
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
-class PEAR_Registry extends PEAR
+class PEAR_REST
 {
-    // {{{ properties
-
-    /**
-     * File containing all channel information.
-     * @var string
-     */
-    var $channels = '';
-
-    /** Directory where registry files are stored.
-     * @var string
-     */
-    var $statedir = '';
-
-    /** File where the file map is stored
-     * @var string
-     */
-    var $filemap = '';
-
-    /** Directory where registry files for channels are stored.
-     * @var string
-     */
-    var $channelsdir = '';
+    var $config;
+    var $_options;
 
-    /** Name of file used for locking the registry
-     * @var string
-     */
-    var $lockfile = '';
+    function PEAR_REST(&$config, $options = array())
+    {
+        $this->config = &$config;
+        $this->_options = $options;
+    }
 
-    /** File descriptor used during locking
-     * @var resource
+    /**
+     * Retrieve REST data, but always retrieve the local cache if it is available.
+     *
+     * This is useful for elements that should never change, such as information on a particular
+     * release
+     * @param string full URL to this resource
+     * @param array|false contents of the accept-encoding header
+     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
+     *                    parsed using PEAR_XMLParser
+     * @return string|array
      */
-    var $lock_fp = null;
+    function retrieveCacheFirst($url, $accept = false, $forcestring = false, $channel = false)
+    {
 
-    /** Mode used during locking
-     * @var int
-     */
-    var $lock_mode = 0; // XXX UNUSED
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
 
-    /** Cache of package information.  Structure:
-     * array(
-     *   'package' => array('id' => ... ),
-     *   ... )
-     * @var array
-     */
-    var $pkginfo_cache = array();
+        if (file_exists($cachefile)) {
+            return unserialize(implode('', file($cachefile)));
+        }
 
-    /** Cache of file map.  Structure:
-     * array( '/path/to/file' => 'package', ... )
-     * @var array
-     */
-    var $filemap_cache = array();
+        return $this->retrieveData($url, $accept, $forcestring, $channel);
+    }
 
     /**
-     * @var false|PEAR_ChannelFile
+     * Retrieve a remote REST resource
+     * @param string full URL to this resource
+     * @param array|false contents of the accept-encoding header
+     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
+     *                    parsed using PEAR_XMLParser
+     * @return string|array
      */
-    var $_pearChannel;
+    function retrieveData($url, $accept = false, $forcestring = false, $channel = false)
+    {
+        $cacheId = $this->getCacheId($url);
+        if ($ret = $this->useLocalCache($url, $cacheId)) {
+            return $ret;
+        }
 
-    /**
-     * @var false|PEAR_ChannelFile
-     */
-    var $_peclChannel;
+        $file = $trieddownload = false;
+        if (!isset($this->_options['offline'])) {
+            $trieddownload = true;
+            $file = $this->downloadHttp($url, $cacheId ? $cacheId['lastChange'] : false, $accept, $channel);
+        }
 
-    /**
-     * @var PEAR_DependencyDB
-     */
-    var $_dependencyDB;
+        if (PEAR::isError($file)) {
+            if ($file->getCode() !== -9276) {
+                return $file;
+            }
 
-    /**
-     * @var PEAR_Config
-     */
-    var $_config;
-    // }}}
+            $trieddownload = false;
+            $file = false; // use local copy if available on socket connect error
+        }
 
-    // {{{ constructor
+        if (!$file) {
+            $ret = $this->getCache($url);
+            if (!PEAR::isError($ret) && $trieddownload) {
+                // reset the age of the cache if the server says it was unmodified
+                $this->saveCache($url, $ret, null, true, $cacheId);
+            }
 
-    /**
-     * PEAR_Registry constructor.
-     *
-     * @param string (optional) PEAR install directory (for .php files)
-     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PEAR channel, if
-     *        default values are not desired.  Only used the very first time a PEAR
-     *        repository is initialized
-     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PECL channel, if
-     *        default values are not desired.  Only used the very first time a PEAR
-     *        repository is initialized
-     *
-     * @access public
-     */
-    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,
-                           $pecl_channel = false)
-    {
-        parent::PEAR();
-        $this->setInstallDir($pear_install_dir);
-        $this->_pearChannel = $pear_channel;
-        $this->_peclChannel = $pecl_channel;
-        $this->_config = false;
-    }
+            return $ret;
+        }
 
-    function setInstallDir($pear_install_dir = PEAR_INSTALL_DIR)
-    {
-        $ds = DIRECTORY_SEPARATOR;
-        $this->install_dir = $pear_install_dir;
-        $this->channelsdir = $pear_install_dir.$ds.'.channels';
-        $this->statedir = $pear_install_dir.$ds.'.registry';
-        $this->filemap  = $pear_install_dir.$ds.'.filemap';
-        $this->lockfile = $pear_install_dir.$ds.'.lock';
-    }
+        if (is_array($file)) {
+            $headers      = $file[2];
+            $lastmodified = $file[1];
+            $content      = $file[0];
+        } else {
+            $headers      = array();
+            $lastmodified = false;
+            $content      = $file;
+        }
 
-    function hasWriteAccess()
-    {
-        if (!file_exists($this->install_dir)) {
-            $dir = $this->install_dir;
-            while ($dir && $dir != '.') {
-                $olddir = $dir;
-                $dir = dirname($dir); // cd ..
-                if ($dir != '.' && file_exists($dir)) {
-                    if (is_writeable($dir)) {
-                        return true;
-                    } else {
-                        return false;
-                    }
-                }
-                if ($dir == $olddir) { // this can happen in safe mode
-                    return @is_writable($dir);
-                }
-            }
-            return false;
+        if ($forcestring) {
+            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+            return $content;
         }
-        return is_writeable($this->install_dir);
-    }
 
-    function setConfig(&$config, $resetInstallDir = true)
-    {
-        $this->_config = &$config;
-        if ($resetInstallDir) {
-            $this->setInstallDir($config->get('php_dir'));
-        }
-    }
-
-    function _initializeChannelDirs()
-    {
-        static $running = false;
-        if (!$running) {
-            $running = true;
-            $ds = DIRECTORY_SEPARATOR;
-            if (!is_dir($this->channelsdir) ||
-                  !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
-                if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
-                    $pear_channel = $this->_pearChannel;
-                    if (!is_a($pear_channel, 'PEAR_ChannelFile') || !$pear_channel->validate()) {
-                        if (!class_exists('PEAR_ChannelFile')) {
-                            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
-                        }
-                        $pear_channel = new PEAR_ChannelFile;
-                        $pear_channel->setName('pear.php.net');
-                        $pear_channel->setAlias('pear');
-                        $pear_channel->setServer('pear.php.net');
-                        $pear_channel->setSummary('PHP Extension and Application Repository');
-                        $pear_channel->setDefaultPEARProtocols();
-                        $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
-                        $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
-                    } else {
-                        $pear_channel->setName('pear.php.net');
-                        $pear_channel->setAlias('pear');
-                    }
-                    $pear_channel->validate();
-                    $this->_addChannel($pear_channel);
-                }
-                if (!file_exists($this->channelsdir . $ds . 'pecl.php.net.reg')) {
-                    $pecl_channel = $this->_peclChannel;
-                    if (!is_a($pecl_channel, 'PEAR_ChannelFile') || !$pecl_channel->validate()) {
-                        if (!class_exists('PEAR_ChannelFile')) {
-                            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+        if (isset($headers['content-type'])) {
+            switch ($headers['content-type']) {
+                case 'text/xml' :
+                case 'application/xml' :
+                case 'text/plain' :
+                    if ($headers['content-type'] === 'text/plain') {
+                        $check = substr($content, 0, 5);
+                        if ($check !== '<?xml') {
+                            break;
                         }
-                        $pecl_channel = new PEAR_ChannelFile;
-                        $pecl_channel->setName('pecl.php.net');
-                        $pecl_channel->setAlias('pecl');
-                        $pecl_channel->setServer('pecl.php.net');
-                        $pecl_channel->setSummary('PHP Extension Community Library');
-                        $pecl_channel->setDefaultPEARProtocols();
-                        $pecl_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
-                        $pecl_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
-                        $pecl_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
-                    } else {
-                        $pecl_channel->setName('pecl.php.net');
-                        $pecl_channel->setAlias('pecl');
                     }
-                    $pecl_channel->validate();
-                    $this->_addChannel($pecl_channel);
-                }
-                if (!file_exists($this->channelsdir . $ds . '__uri.reg')) {
-                    if (!class_exists('PEAR_ChannelFile')) {
-                        require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+
+                    $parser = new PEAR_XMLParser;
+                    PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+                    $err = $parser->parse($content);
+                    PEAR::popErrorHandling();
+                    if (PEAR::isError($err)) {
+                        return PEAR::raiseError('Invalid xml downloaded from "' . $url . '": ' .
+                            $err->getMessage());
                     }
-                    $private = new PEAR_ChannelFile;
-                    $private->setName('__uri');
-                    $private->addFunction('xmlrpc', '1.0', '****');
-                    $private->setSummary('Pseudo-channel for static packages');
-                    $this->_addChannel($private);
-                }
-                $this->_rebuildFileMap();
+                    $content = $parser->getData();
+                case 'text/html' :
+                default :
+                    // use it as a string
             }
-            $running = false;
+        } else {
+            // assume XML
+            $parser = new PEAR_XMLParser;
+            $parser->parse($content);
+            $content = $parser->getData();
         }
+
+        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
+        return $content;
     }
 
-    function _initializeDirs()
+    function useLocalCache($url, $cacheid = null)
     {
-        $ds = DIRECTORY_SEPARATOR;
-        // XXX Compatibility code should be removed in the future
-        // rename all registry files if any to lowercase
-        if (!OS_WINDOWS && file_exists($this->statedir) && is_dir($this->statedir) &&
-              $handle = opendir($this->statedir)) {
-            $dest = $this->statedir . $ds;
-            while (false !== ($file = readdir($handle))) {
-                if (preg_match('/^.*[A-Z].*\.reg\\z/', $file)) {
-                    rename($dest . $file, $dest . strtolower($file));
-                }
+        if ($cacheid === null) {
+            $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+                md5($url) . 'rest.cacheid';
+            if (!file_exists($cacheidfile)) {
+                return false;
             }
-            closedir($handle);
+
+            $cacheid = unserialize(implode('', file($cacheidfile)));
         }
-        $this->_initializeChannelDirs();
-        if (!file_exists($this->filemap)) {
-            $this->_rebuildFileMap();
+
+        $cachettl = $this->config->get('cache_ttl');
+        // If cache is newer than $cachettl seconds, we use the cache!
+        if (time() - $cacheid['age'] < $cachettl) {
+            return $this->getCache($url);
         }
-        $this->_initializeDepDB();
+
+        return false;
     }
 
-    function _initializeDepDB()
+    function getCacheId($url)
     {
-        if (!isset($this->_dependencyDB)) {
-            static $initializing = false;
-            if (!$initializing) {
-                $initializing = true;
-                if (!$this->_config) { // never used?
-                    if (OS_WINDOWS) {
-                        $file = 'pear.ini';
-                    } else {
-                        $file = '.pearrc';
-                    }
-                    $this->_config = &new PEAR_Config($this->statedir . DIRECTORY_SEPARATOR .
-                        $file);
-                    $this->_config->setRegistry($this);
-                    $this->_config->set('php_dir', $this->install_dir);
-                }
-                $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
-                if (PEAR::isError($this->_dependencyDB)) {
-                    // attempt to recover by removing the dep db
-                    if (file_exists($this->_config->get('php_dir', null, 'pear.php.net') .
-                        DIRECTORY_SEPARATOR . '.depdb')) {
-                        @unlink($this->_config->get('php_dir', null, 'pear.php.net') .
-                            DIRECTORY_SEPARATOR . '.depdb');
-                    }
-                    $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
-                    if (PEAR::isError($this->_dependencyDB)) {
-                        echo $this->_dependencyDB->getMessage();
-                        echo 'Unrecoverable error';
-                        exit(1);
-                    }
-                }
-                $initializing = false;
-            }
+        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cacheid';
+
+        if (!file_exists($cacheidfile)) {
+            return false;
         }
+
+        $ret = unserialize(implode('', file($cacheidfile)));
+        return $ret;
     }
-    // }}}
-    // {{{ destructor
 
-    /**
-     * PEAR_Registry destructor.  Makes sure no locks are forgotten.
-     *
-     * @access private
-     */
-    function _PEAR_Registry()
+    function getCache($url)
     {
-        parent::_PEAR();
-        if (is_resource($this->lock_fp)) {
-            $this->_unlock();
-        }
-    }
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
 
-    // }}}
+        if (!file_exists($cachefile)) {
+            return PEAR::raiseError('No cached content available for "' . $url . '"');
+        }
 
-    // {{{ _assertStateDir()
+        return unserialize(implode('', file($cachefile)));
+    }
 
     /**
-     * Make sure the directory where we keep registry files exists.
-     *
-     * @return bool TRUE if directory exists, FALSE if it could not be
-     * created
-     *
-     * @access private
+     * @param string full URL to REST resource
+     * @param string original contents of the REST resource
+     * @param array  HTTP Last-Modified and ETag headers
+     * @param bool   if true, then the cache id file should be regenerated to
+     *               trigger a new time-to-live value
      */
-    function _assertStateDir($channel = false)
+    function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
     {
-        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
-            return $this->_assertChannelStateDir($channel);
-        }
-        static $init = false;
-        if (!file_exists($this->statedir)) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
-            if (!System::mkdir(array('-p', $this->statedir))) {
-                return $this->raiseError("could not create directory '{$this->statedir}'");
-            }
-            $init = true;
-        } elseif (!is_dir($this->statedir)) {
-            return $this->raiseError('Cannot create directory ' . $this->statedir . ', ' .
-                'it already exists and is not a directory');
-        }
-        $ds = DIRECTORY_SEPARATOR;
-        if (!file_exists($this->channelsdir)) {
-            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||
-                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {
-                $init = true;
-            }
-        } elseif (!is_dir($this->channelsdir)) {
-            return $this->raiseError('Cannot create directory ' . $this->channelsdir . ', ' .
-                'it already exists and is not a directory');
-        }
-        if ($init) {
-            static $running = false;
-            if (!$running) {
-                $running = true;
-                $this->_initializeDirs();
-                $running = false;
-                $init = false;
-            }
-        } else {
-            $this->_initializeDepDB();
-        }
-        return true;
-    }
+        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cacheid';
 
-    // }}}
-    // {{{ _assertChannelStateDir()
+        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
+            md5($url) . 'rest.cachefile';
 
-    /**
-     * Make sure the directory where we keep registry files exists for a non-standard channel.
-     *
-     * @param string channel name
-     * @return bool TRUE if directory exists, FALSE if it could not be
-     * created
-     *
-     * @access private
-     */
-    function _assertChannelStateDir($channel)
-    {
-        $ds = DIRECTORY_SEPARATOR;
-        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
-                $this->_initializeChannelDirs();
-            }
-            return $this->_assertStateDir($channel);
-        }
-        $channelDir = $this->_channelDirectoryName($channel);
-        if (!is_dir($this->channelsdir) ||
-              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {
-            $this->_initializeChannelDirs();
+        if ($cacheid === null && $nochange) {
+            $cacheid = unserialize(implode('', file($cacheidfile)));
         }
-        if (!file_exists($channelDir)) {
-            if (!$this->hasWriteAccess()) {
+
+        $fp = @fopen($cacheidfile, 'wb');
+        if (!$fp) {
+            $cache_dir = $this->config->get('cache_dir');
+            if (is_dir($cache_dir)) {
                 return false;
             }
-            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
-            if (!System::mkdir(array('-p', $channelDir))) {
-                return $this->raiseError("could not create directory '" . $channelDir .
-                    "'");
+
+            System::mkdir(array('-p', $cache_dir));
+            $fp = @fopen($cacheidfile, 'wb');
+            if (!$fp) {
+                return false;
             }
-        } elseif (!is_dir($channelDir)) {
-            return $this->raiseError("could not create directory '" . $channelDir .
-                "', already exists and is not a directory");
         }
-        return true;
-    }
 
-    // }}}
-    // {{{ _assertChannelDir()
+        if ($nochange) {
+            fwrite($fp, serialize(array(
+                'age'        => time(),
+                'lastChange' => $cacheid['lastChange'],
+                ))
+            );
 
-    /**
-     * Make sure the directory where we keep registry files for channels exists
-     *
-     * @return bool TRUE if directory exists, FALSE if it could not be
-     * created
-     *
-     * @access private
-     */
-    function _assertChannelDir()
-    {
-        if (!file_exists($this->channelsdir)) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
-            if (!System::mkdir(array('-p', $this->channelsdir))) {
-                return $this->raiseError("could not create directory '{$this->channelsdir}'");
-            }
-        } elseif (!is_dir($this->channelsdir)) {
-            return $this->raiseError("could not create directory '{$this->channelsdir}" .
-                "', it already exists and is not a directory");
-            
+            fclose($fp);
+            return true;
         }
-        if (!file_exists($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
-            if (!System::mkdir(array('-p', $this->channelsdir . DIRECTORY_SEPARATOR . '.alias'))) {
-                return $this->raiseError("could not create directory '{$this->channelsdir}/.alias'");
+
+        fwrite($fp, serialize(array(
+            'age'        => time(),
+            'lastChange' => $lastmodified,
+            ))
+        );
+
+        fclose($fp);
+        $fp = @fopen($cachefile, 'wb');
+        if (!$fp) {
+            if (file_exists($cacheidfile)) {
+                @unlink($cacheidfile);
             }
-        } elseif (!is_dir($this->channelsdir . DIRECTORY_SEPARATOR . '.alias')) {
-            return $this->raiseError("could not create directory '{$this->channelsdir}" .
-                "/.alias', it already exists and is not a directory");
-            
+
+            return false;
         }
+
+        fwrite($fp, serialize($contents));
+        fclose($fp);
         return true;
     }
 
-    // }}}
-    // {{{ _packageFileName()
-
     /**
-     * Get the name of the file where data for a given package is stored.
+     * Efficiently Download a file through HTTP.  Returns downloaded file as a string in-memory
+     * This is best used for small files
      *
-     * @param string channel name, or false if this is a PEAR package
-     * @param string package name
+     * If an HTTP proxy has been configured (http_proxy PEAR_Config
+     * setting), the proxy will be used.
      *
-     * @return string registry file name
+     * @param string  $url       the URL to download
+     * @param string  $save_dir  directory to save file in
+     * @param false|string|array $lastmodified header values to check against for caching
+     *                           use false to return the header values from this download
+     * @param false|array $accept Accept headers to send
+     * @return string|array  Returns the contents of the downloaded file or a PEAR
+     *                       error on failure.  If the error is caused by
+     *                       socket-related errors, the error object will
+     *                       have the fsockopen error code available through
+     *                       getCode().  If caching is requested, then return the header
+     *                       values.
      *
      * @access public
      */
-    function _packageFileName($package, $channel = false)
+    function downloadHttp($url, $lastmodified = null, $accept = false, $channel = false)
     {
-        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
-            return $this->_channelDirectoryName($channel) . DIRECTORY_SEPARATOR .
-                strtolower($package) . '.reg';
-        }
-        return $this->statedir . DIRECTORY_SEPARATOR . strtolower($package) . '.reg';
-    }
+        static $redirect = 0;
+        // always reset , so we are clean case of error
+        $wasredirect = $redirect;
+        $redirect = 0;
 
-    // }}}
-    // {{{ _channelFileName()
+        $info = parse_url($url);
+        if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
+            return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
+        }
 
-    /**
-     * Get the name of the file where data for a given channel is stored.
-     * @param string channel name
-     * @return string registry file name
-     */
-    function _channelFileName($channel, $noaliases = false)
-    {
-        if (!$noaliases) {
-            if (file_exists($this->_getChannelAliasFileName($channel))) {
-                $channel = implode('', file($this->_getChannelAliasFileName($channel)));
-            }
+        if (!isset($info['host'])) {
+            return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
         }
-        return $this->channelsdir . DIRECTORY_SEPARATOR . str_replace('/', '_',
-            strtolower($channel)) . '.reg';
-    }
 
-    // }}}
-    // {{{ getChannelAliasFileName()
+        $host   = isset($info['host']) ? $info['host'] : null;
+        $port   = isset($info['port']) ? $info['port'] : null;
+        $path   = isset($info['path']) ? $info['path'] : null;
+        $schema = (isset($info['scheme']) && $info['scheme'] == 'https') ? 'https' : 'http';
 
-    /**
-     * @param string
-     * @return string
-     */
-    function _getChannelAliasFileName($alias)
-    {
-        return $this->channelsdir . DIRECTORY_SEPARATOR . '.alias' .
-              DIRECTORY_SEPARATOR . str_replace('/', '_', strtolower($alias)) . '.txt';
-    }
+        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
+        if ($this->config->get('http_proxy')&&
+              $proxy = parse_url($this->config->get('http_proxy'))
+        ) {
+            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
+            if ($schema === 'https') {
+                $proxy_host = 'ssl://' . $proxy_host;
+            }
 
-    // }}}
-    // {{{ _getChannelFromAlias()
+            $proxy_port   = isset($proxy['port']) ? $proxy['port'] : 8080;
+            $proxy_user   = isset($proxy['user']) ? urldecode($proxy['user']) : null;
+            $proxy_pass   = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
+            $proxy_schema = (isset($proxy['scheme']) && $proxy['scheme'] == 'https') ? 'https' : 'http';
+        }
 
-    /**
-     * Get the name of a channel from its alias
-     */
-    function _getChannelFromAlias($channel)
-    {
-        if (!$this->_channelExists($channel)) {
-            if ($channel == 'pear.php.net') {
-                return 'pear.php.net';
-            }
-            if ($channel == 'pecl.php.net') {
-                return 'pecl.php.net';
-            }
-            if ($channel == '__uri') {
-                return '__uri';
-            }
-            return false;
+        if (empty($port)) {
+            $port = (isset($info['scheme']) && $info['scheme'] == 'https')  ? 443 : 80;
         }
-        $channel = strtolower($channel);
-        if (file_exists($this->_getChannelAliasFileName($channel))) {
-            // translate an alias to an actual channel
-            return implode('', file($this->_getChannelAliasFileName($channel)));
+
+        if (isset($proxy['host'])) {
+            $request = "GET $url HTTP/1.1\r\n";
         } else {
-            return $channel;
+            $request = "GET $path HTTP/1.1\r\n";
         }
-    }    
-    // }}}
-    // {{{ _getChannelFromAlias()
 
-    /**
-     * Get the alias of a channel from its alias or its name
-     */
-    function _getAlias($channel)
-    {
-        if (!$this->_channelExists($channel)) {
-            if ($channel == 'pear.php.net') {
-                return 'pear';
-            }
-            if ($channel == 'pecl.php.net') {
-                return 'pecl';
+        $request .= "Host: $host:$port\r\n";
+        $ifmodifiedsince = '';
+        if (is_array($lastmodified)) {
+            if (isset($lastmodified['Last-Modified'])) {
+                $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
             }
-            return false;
-        }
-        $channel = $this->_getChannel($channel);
-        if (PEAR::isError($channel)) {
-            return $channel;
-        }
-        return $channel->getAlias();
-    }    
-    // }}}
-    // {{{ _channelDirectoryName()
 
-    /**
-     * Get the name of the file where data for a given package is stored.
-     *
-     * @param string channel name, or false if this is a PEAR package
-     * @param string package name
-     *
-     * @return string registry file name
-     *
-     * @access public
-     */
-    function _channelDirectoryName($channel)
-    {
-        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            return $this->statedir;
-        } else {
-            $ch = $this->_getChannelFromAlias($channel);
-            if (!$ch) {
-                $ch = $channel;
+            if (isset($lastmodified['ETag'])) {
+                $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
             }
-            return $this->statedir . DIRECTORY_SEPARATOR . strtolower('.channel.' .
-                str_replace('/', '_', $ch));
+        } else {
+            $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
         }
-    }
 
-    // }}}
-    // {{{ _openPackageFile()
+        $request .= $ifmodifiedsince .
+            "User-Agent: PEAR/1.8.0/PHP/" . PHP_VERSION . "\r\n";
 
-    function _openPackageFile($package, $mode, $channel = false)
-    {
-        if (!$this->_assertStateDir($channel)) {
-            return null;
-        }
-        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
-            return null;
-        }
-        $file = $this->_packageFileName($package, $channel);
-        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
-            return null;
+        $username = $this->config->get('username', null, $channel);
+        $password = $this->config->get('password', null, $channel);
+
+        if ($username && $password) {
+            $tmp = base64_encode("$username:$password");
+            $request .= "Authorization: Basic $tmp\r\n";
         }
-        $fp = @fopen($file, $mode);
-        if (!$fp) {
-            return null;
+
+        if ($proxy_host != '' && $proxy_user != '') {
+            $request .= 'Proxy-Authorization: Basic ' .
+                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
         }
-        return $fp;
-    }
 
-    // }}}
-    // {{{ _closePackageFile()
+        if ($accept) {
+            $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
+        }
 
-    function _closePackageFile($fp)
-    {
-        fclose($fp);
-    }
+        $request .= "Accept-Encoding:\r\n";
+        $request .= "Connection: close\r\n";
+        $request .= "\r\n";
 
-    // }}}
-    // {{{ _openChannelFile()
+        if ($proxy_host != '') {
+            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr, 15);
+            if (!$fp) {
+                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", -9276);
+            }
+        } else {
+            if ($schema === 'https') {
+                $host = 'ssl://' . $host;
+            }
 
-    function _openChannelFile($channel, $mode)
-    {
-        if (!$this->_assertChannelDir()) {
-            return null;
-        }
-        if (!in_array($mode, array('r', 'rb')) && !$this->hasWriteAccess()) {
-            return null;
-        }
-        $file = $this->_channelFileName($channel);
-        if (!file_exists($file) && $mode == 'r' || $mode == 'rb') {
-            return null;
-        }
-        $fp = @fopen($file, $mode);
-        if (!$fp) {
-            return null;
+            $fp = @fsockopen($host, $port, $errno, $errstr);
+            if (!$fp) {
+                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
+            }
         }
-        return $fp;
-    }
-
-    // }}}
-    // {{{ _closePackageFile()
 
-    function _closeChannelFile($fp)
-    {
-        fclose($fp);
-    }
-
-    // }}}
-    // {{{ _rebuildFileMap()
+        fwrite($fp, $request);
 
-    function _rebuildFileMap()
-    {
-        if (!class_exists('PEAR_Installer_Role')) {
-            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role.php';
-        }
-        $channels = $this->_listAllPackages();
-        $files = array();
-        foreach ($channels as $channel => $packages) {
-            foreach ($packages as $package) {
-                $version = $this->_packageInfo($package, 'version', $channel);
-                $filelist = $this->_packageInfo($package, 'filelist', $channel);
-                if (!is_array($filelist)) {
-                    continue;
+        $headers = array();
+        $reply   = 0;
+        while ($line = trim(fgets($fp, 1024))) {
+            if (preg_match('/^([^:]+):\s+(.*)\s*\\z/', $line, $matches)) {
+                $headers[strtolower($matches[1])] = trim($matches[2]);
+            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
+                $reply = (int)$matches[1];
+                if ($reply == 304 && ($lastmodified || ($lastmodified === false))) {
+                    return false;
                 }
-                foreach ($filelist as $name => $attrs) {
-                    if (isset($attrs['attribs'])) {
-                        $attrs = $attrs['attribs'];
-                    }
-                    // it is possible for conflicting packages in different channels to
-                    // conflict with data files/doc files
-                    if ($name == 'dirtree') {
-                        continue;
-                    }
-                    if (isset($attrs['role']) && !in_array($attrs['role'],
-                          PEAR_Installer_Role::getInstallableRoles())) {
-                        // these are not installed
-                        continue;
-                    }
-                    if (isset($attrs['role']) && !in_array($attrs['role'],
-                          PEAR_Installer_Role::getBaseinstallRoles())) {
-                        $attrs['baseinstalldir'] = $package;
-                    }
-                    if (isset($attrs['baseinstalldir'])) {
-                        $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
-                    } else {
-                        $file = $name;
-                    }
-                    $file = preg_replace(',^/+,', '', $file);
-                    if ($channel != 'pear.php.net') {
-                        if (!isset($files[$attrs['role']])) {
-                            $files[$attrs['role']] = array();
-                        }
-                        $files[$attrs['role']][$file] = array(strtolower($channel),
-                            strtolower($package));
-                    } else {
-                        if (!isset($files[$attrs['role']])) {
-                            $files[$attrs['role']] = array();
-                        }
-                        $files[$attrs['role']][$file] = strtolower($package);
-                    }
+
+                if (!in_array($reply, array(200, 301, 302, 303, 305, 307))) {
+                    return PEAR::raiseError("File $schema://$host:$port$path not valid (received: $line)");
                 }
             }
         }
-        $this->_assertStateDir();
-        if (!$this->hasWriteAccess()) {
-            return false;
-        }
-        $fp = @fopen($this->filemap, 'wb');
-        if (!$fp) {
-            return false;
-        }
-        $this->filemap_cache = $files;
-        fwrite($fp, serialize($files));
-        fclose($fp);
-        return true;
-    }
 
-    // }}}
-    // {{{ _readFileMap()
+        if ($reply != 200) {
+            if (!isset($headers['location'])) {
+                return PEAR::raiseError("File $schema://$host:$port$path not valid (redirected but no location)");
+            }
 
-    function _readFileMap()
-    {
-        if (!file_exists($this->filemap)) {
-            return array();
-        }
-        $fp = @fopen($this->filemap, 'r');
-        if (!$fp) {
-            return $this->raiseError('PEAR_Registry: could not open filemap "' . $this->filemap . '"', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
-        }
-        clearstatcache();
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        $fsize = filesize($this->filemap);
-        fclose($fp);
-        $data = file_get_contents($this->filemap);
-        set_magic_quotes_runtime($rt);
-        $tmp = unserialize($data);
-        if (!$tmp && $fsize > 7) {
-            return $this->raiseError('PEAR_Registry: invalid filemap data', PEAR_REGISTRY_ERROR_FORMAT, null, null, $data);
+            if ($wasredirect > 4) {
+                return PEAR::raiseError("File $schema://$host:$port$path not valid (redirection looped more than 5 times)");
+            }
+
+            $redirect = $wasredirect + 1;
+            return $this->downloadHttp($headers['location'], $lastmodified, $accept, $channel);
         }
-        $this->filemap_cache = $tmp;
-        return true;
-    }
 
-    // }}}
-    // {{{ _lock()
+        $length = isset($headers['content-length']) ? $headers['content-length'] : -1;
 
-    /**
-     * Lock the registry.
-     *
-     * @param integer lock mode, one of LOCK_EX, LOCK_SH or LOCK_UN.
-     *                See flock manual for more information.
-     *
-     * @return bool TRUE on success, FALSE if locking failed, or a
-     *              PEAR error if some other error occurs (such as the
-     *              lock file not being writable).
-     *
-     * @access private
-     */
-    function _lock($mode = LOCK_EX)
-    {
-        if (!eregi('Windows 9', php_uname())) {
-            if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
-                // XXX does not check type of lock (LOCK_SH/LOCK_EX)
-                return true;
-            }
-            if (!$this->_assertStateDir()) {
-                if ($mode == LOCK_EX) {
-                    return $this->raiseError('Registry directory is not writeable by the current user');
-                } else {
-                    return true;
-                }
-            }
-            $open_mode = 'w';
-            // XXX People reported problems with LOCK_SH and 'w'
-            if ($mode === LOCK_SH || $mode === LOCK_UN) {
-                if (!file_exists($this->lockfile)) {
-                    touch($this->lockfile);
-                }
-                $open_mode = 'r';
-            }
+        $data = '';
+        while ($chunk = @fread($fp, 8192)) {
+            $data .= $chunk;
+        }
+        fclose($fp);
 
-            if (!is_resource($this->lock_fp)) {
-                $this->lock_fp = @fopen($this->lockfile, $open_mode);
+        if ($lastmodified === false || $lastmodified) {
+            if (isset($headers['etag'])) {
+                $lastmodified = array('ETag' => $headers['etag']);
             }
 
-            if (!is_resource($this->lock_fp)) {
-                $this->lock_fp = null;
-                return $this->raiseError("could not create lock file" .
-                                         (isset($php_errormsg) ? ": " . $php_errormsg : ""));
-            }
-            if (!(int)flock($this->lock_fp, $mode)) {
-                switch ($mode) {
-                    case LOCK_SH: $str = 'shared';    break;
-                    case LOCK_EX: $str = 'exclusive'; break;
-                    case LOCK_UN: $str = 'unlock';    break;
-                    default:      $str = 'unknown';   break;
+            if (isset($headers['last-modified'])) {
+                if (is_array($lastmodified)) {
+                    $lastmodified['Last-Modified'] = $headers['last-modified'];
+                } else {
+                    $lastmodified = $headers['last-modified'];
                 }
-                //is resource at this point, close it on error.
-                fclose($this->lock_fp);
-                $this->lock_fp = null;
-                return $this->raiseError("could not acquire $str lock ($this->lockfile)",
-                                         PEAR_REGISTRY_ERROR_LOCK);
             }
-        }
-        return true;
-    }
 
-    // }}}
-    // {{{ _unlock()
-
-    function _unlock()
-    {
-        $ret = $this->_lock(LOCK_UN);
-        if (is_resource($this->lock_fp)) {
-            fclose($this->lock_fp);
+            return array($data, $lastmodified, $headers);
         }
-        $this->lock_fp = null;
-        return $ret;
-    }
 
-    // }}}
-    // {{{ _packageExists()
-
-    function _packageExists($package, $channel = false)
-    {
-        return file_exists($this->_packageFileName($package, $channel));
+        return $data;
     }
+}<?php
+/**
+ * PEAR_REST_10
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: 10.php,v 1.60 2009/03/07 23:09:56 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a12
+ */
 
-    // }}}
-    // {{{ _channelExists()
+/**
+ * For downloading REST xml/txt files
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/REST.php';
 
+/**
+ * Implement REST 1.0
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a12
+ */
+class PEAR_REST_10
+{
     /**
-     * Determine whether a channel exists in the registry
-     * @param string Channel name
-     * @param bool if true, then aliases will be ignored
-     * @return boolean
+     * @var PEAR_REST
      */
-    function _channelExists($channel, $noaliases = false)
+    var $_rest;
+    function PEAR_REST_10($config, $options = array())
     {
-        $a = file_exists($this->_channelFileName($channel, $noaliases));
-        if (!$a && $channel == 'pear.php.net') {
-            return true;
-        }
-        if (!$a && $channel == 'pecl.php.net') {
-            return true;
-        }
-        return $a;
+        $this->_rest = &new PEAR_REST($config, $options);
     }
 
-    // }}}
-    // {{{ _addChannel()
-
     /**
-     * @param PEAR_ChannelFile Channel object
-     * @param donotuse
-     * @param string Last-Modified HTTP tag from remote request
-     * @return boolean|PEAR_Error True on creation, false if it already exists
+     * Retrieve information about a remote package to be downloaded from a REST server
+     *
+     * @param string $base The uri to prepend to all REST calls
+     * @param array $packageinfo an array of format:
+     * <pre>
+     *  array(
+     *   'package' => 'packagename',
+     *   'channel' => 'channelname',
+     *  ['state' => 'alpha' (or valid state),]
+     *  -or-
+     *  ['version' => '1.whatever']
+     * </pre>
+     * @param string $prefstate Current preferred_state config variable value
+     * @param bool $installed the installed version of this package to compare against
+     * @return array|false|PEAR_Error see {@link _returnDownloadURL()}
      */
-    function _addChannel($channel, $update = false, $lastmodified = false)
+    function getDownloadURL($base, $packageinfo, $prefstate, $installed, $channel = false)
     {
-        if (!is_a($channel, 'PEAR_ChannelFile')) {
-            return false;
-        }
-        if (!$channel->validate()) {
-            return false;
-        }
-        if (file_exists($this->_channelFileName($channel->getName()))) {
-            if (!$update) {
-                return false;
-            }
-            $checker = $this->_getChannel($channel->getName());
-            if (PEAR::isError($checker)) {
-                return $checker;
-            }
-            if ($channel->getAlias() != $checker->getAlias()) {
-                if (file_exists($this->_getChannelAliasFileName($checker->getAlias()))) {
-                    @unlink($this->_getChannelAliasFileName($checker->getAlias()));
-                }
-            }
-        } else {
-            if ($update && !in_array($channel->getName(), array('pear.php.net', 'pecl.php.net'))) {
-                return false;
-            }
+        $channel = $packageinfo['channel'];
+        $package = $packageinfo['package'];
+        $states = $this->betterStates($prefstate, true);
+        if (!$states) {
+            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
         }
-        $ret = $this->_assertChannelDir();
-        if (PEAR::isError($ret)) {
-            return $ret;
-        }
-        $ret = $this->_assertChannelStateDir($channel->getName());
-        if (PEAR::isError($ret)) {
-            return $ret;
-        }
-        if ($channel->getAlias() != $channel->getName()) {
-            if (file_exists($this->_getChannelAliasFileName($channel->getAlias())) &&
-                  $this->_getChannelFromAlias($channel->getAlias()) != $channel->getName()) {
-                $channel->setAlias($channel->getName());
-            }
-            if (!$this->hasWriteAccess()) {
-                return false;
-            }
-            $fp = @fopen($this->_getChannelAliasFileName($channel->getAlias()), 'w');
-            if (!$fp) {
-                return false;
-            }
-            fwrite($fp, $channel->getName());
-            fclose($fp);
-        }
-        if (!$this->hasWriteAccess()) {
-            return false;
+
+        $state   = isset($packageinfo['state'])   ? $packageinfo['state']   : null;
+        $version = isset($packageinfo['version']) ? $packageinfo['version'] : null;
+        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
+        if (PEAR::isError($info)) {
+            return PEAR::raiseError('No releases available for package "' .
+                $channel . '/' . $package . '"');
         }
-        $fp = @fopen($this->_channelFileName($channel->getName()), 'wb');
-        if (!$fp) {
+
+        if (!isset($info['r'])) {
             return false;
         }
-        $info = $channel->toArray();
-        if ($lastmodified) {
-            $info['_lastmodified'] = $lastmodified;
-        } else {
-            $info['_lastmodified'] = date('r');
+
+        $release = $found = false;
+        if (!is_array($info['r']) || !isset($info['r'][0])) {
+            $info['r'] = array($info['r']);
         }
-        fwrite($fp, serialize($info));
-        fclose($fp);
-        return true;
-    }
 
-    // }}}
-    // {{{ _deleteChannel()
+        foreach ($info['r'] as $release) {
+            if (!isset($this->_rest->_options['force']) && ($installed &&
+                  version_compare($release['v'], $installed, '<'))) {
+                continue;
+            }
 
-    /**
-     * Deletion fails if there are any packages installed from the channel
-     * @param string|PEAR_ChannelFile channel name
-     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
-     */
-    function _deleteChannel($channel)
-    {
-        if (!is_string($channel)) {
-            if (is_a($channel, 'PEAR_ChannelFile')) {
-                if (!$channel->validate()) {
-                    return false;
+            if (isset($state)) {
+                // try our preferred state first
+                if ($release['s'] == $state) {
+                    $found = true;
+                    break;
+                }
+                // see if there is something newer and more stable
+                // bug #7221
+                if (in_array($release['s'], $this->betterStates($state), true)) {
+                    $found = true;
+                    break;
+                }
+            } elseif (isset($version)) {
+                if ($release['v'] == $version) {
+                    $found = true;
+                    break;
                 }
-                $channel = $channel->getName();
             } else {
-                return false;
+                if (in_array($release['s'], $states)) {
+                    $found = true;
+                    break;
+                }
             }
         }
-        if ($this->_getChannelFromAlias($channel) == '__uri') {
-            return false;
-        }
-        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
-            return false;
-        }
-        if (!$this->_channelExists($channel)) {
-            return false;
-        }
-        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            return false;
-        }
-        $channel = $this->_getChannelFromAlias($channel);
-        if ($channel == 'pear.php.net') {
-            return false;
+
+        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
+    }
+
+    function getDepDownloadURL($base, $xsdversion, $dependency, $deppackage,
+                               $prefstate = 'stable', $installed = false, $channel = false)
+    {
+        $channel = $dependency['channel'];
+        $package = $dependency['name'];
+        $states = $this->betterStates($prefstate, true);
+        if (!$states) {
+            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
         }
-        $test = $this->_listChannelPackages($channel);
-        if (count($test)) {
-            return false;
+        $state   = isset($dependency['state'])   ? $dependency['state']   : null;
+        $version = isset($dependency['version']) ? $dependency['version'] : null;
+        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
+        if (PEAR::isError($info)) {
+            return PEAR::raiseError('Package "' . $deppackage['channel'] . '/' . $deppackage['package']
+                . '" dependency "' . $channel . '/' . $package . '" has no releases');
         }
-        $test = @rmdir($this->_channelDirectoryName($channel));
-        if (!$test) {
+        if (!is_array($info) || !isset($info['r'])) {
             return false;
         }
-        $file = $this->_getChannelAliasFileName($this->_getAlias($channel));
-        if (file_exists($file)) {
-            $test = @unlink($file);
-            if (!$test) {
-                return false;
+        $exclude = array();
+        $min = $max = $recommended = false;
+        if ($xsdversion == '1.0') {
+            switch ($dependency['rel']) {
+                case 'ge' :
+                    $min = $dependency['version'];
+                break;
+                case 'gt' :
+                    $min = $dependency['version'];
+                    $exclude = array($dependency['version']);
+                break;
+                case 'eq' :
+                    $recommended = $dependency['version'];
+                break;
+                case 'lt' :
+                    $max = $dependency['version'];
+                    $exclude = array($dependency['version']);
+                break;
+                case 'le' :
+                    $max = $dependency['version'];
+                break;
+                case 'ne' :
+                    $exclude = array($dependency['version']);
+                break;
+            }
+        } else {
+            $min = isset($dependency['min']) ? $dependency['min'] : false;
+            $max = isset($dependency['max']) ? $dependency['max'] : false;
+            $recommended = isset($dependency['recommended']) ?
+                $dependency['recommended'] : false;
+            if (isset($dependency['exclude'])) {
+                if (!isset($dependency['exclude'][0])) {
+                    $exclude = array($dependency['exclude']);
+                }
             }
         }
-        $file = $this->_channelFileName($channel);
-        $ret = true;
-        if (file_exists($file)) {
-            $ret = @unlink($file);
+        $release = $found = false;
+        if (!is_array($info['r']) || !isset($info['r'][0])) {
+            $info['r'] = array($info['r']);
         }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ _isChannelAlias()
-
-    /**
-     * Determine whether a channel exists in the registry
-     * @param string Channel Alias
-     * @return boolean
-     */
-    function _isChannelAlias($alias)
-    {
-        return file_exists($this->_getChannelAliasFileName($alias));
-    }
-
-    // }}}
-    // {{{ _packageInfo()
-
-    /**
-     * @param string|null
-     * @param string|null
-     * @param string|null
-     * @return array|null
-     * @access private
-     */
-    function _packageInfo($package = null, $key = null, $channel = 'pear.php.net')
-    {
-        if ($package === null) {
-            if ($channel === null) {
-                $channels = $this->_listChannels();
-                $ret = array();
-                foreach ($channels as $channel) {
-                    $channel = strtolower($channel);
-                    $ret[$channel] = array();
-                    $packages = $this->_listPackages($channel);
-                    foreach ($packages as $package) {
-                        $ret[$channel][] = $this->_packageInfo($package, null, $channel);
+        foreach ($info['r'] as $release) {
+            if (!isset($this->_rest->_options['force']) && ($installed &&
+                  version_compare($release['v'], $installed, '<'))) {
+                continue;
+            }
+            if (in_array($release['v'], $exclude)) { // skip excluded versions
+                continue;
+            }
+            // allow newer releases to say "I'm OK with the dependent package"
+            if ($xsdversion == '2.0' && isset($release['co'])) {
+                if (!is_array($release['co']) || !isset($release['co'][0])) {
+                    $release['co'] = array($release['co']);
+                }
+                foreach ($release['co'] as $entry) {
+                    if (isset($entry['x']) && !is_array($entry['x'])) {
+                        $entry['x'] = array($entry['x']);
+                    } elseif (!isset($entry['x'])) {
+                        $entry['x'] = array();
+                    }
+                    if ($entry['c'] == $deppackage['channel'] &&
+                          strtolower($entry['p']) == strtolower($deppackage['package']) &&
+                          version_compare($deppackage['version'], $entry['min'], '>=') &&
+                          version_compare($deppackage['version'], $entry['max'], '<=') &&
+                          !in_array($release['v'], $entry['x'])) {
+                        $recommended = $release['v'];
+                        break;
                     }
                 }
-                return $ret;
             }
-            $ps = $this->_listPackages($channel);
-            if (!count($ps)) {
-                return array();
+            if ($recommended) {
+                if ($release['v'] != $recommended) { // if we want a specific
+                    // version, then skip all others
+                    continue;
+                } else {
+                    if (!in_array($release['s'], $states)) {
+                        // the stability is too low, but we must return the
+                        // recommended version if possible
+                        return $this->_returnDownloadURL($base, $package, $release, $info, true, false, $channel);
+                    }
+                }
             }
-            return array_map(array(&$this, '_packageInfo'),
-                             $ps, array_fill(0, count($ps), null),
-                             array_fill(0, count($ps), $channel));
-        }
-        $fp = $this->_openPackageFile($package, 'r', $channel);
-        if ($fp === null) {
-            return null;
-        }
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        clearstatcache();
-        $this->_closePackageFile($fp);
-        $data = file_get_contents($this->_packageFileName($package, $channel));
-        set_magic_quotes_runtime($rt);
-        $data = unserialize($data);
-        if ($key === null) {
-            return $data;
-        }
-        // compatibility for package.xml version 2.0
-        if (isset($data['old'][$key])) {
-            return $data['old'][$key];
-        }
-        if (isset($data[$key])) {
-            return $data[$key];
-        }
-        return null;
-    }
-
-    // }}}
-    // {{{ _channelInfo()
-
-    /**
-     * @param string Channel name
-     * @param bool whether to strictly retrieve info of channels, not just aliases
-     * @return array|null
-     */
-    function _channelInfo($channel, $noaliases = false)
-    {
-        if (!$this->_channelExists($channel, $noaliases)) {
-            return null;
-        }
-        $fp = $this->_openChannelFile($channel, 'r');
-        if ($fp === null) {
-            return null;
-        }
-        $rt = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        clearstatcache();
-        $this->_closeChannelFile($fp);
-        $data = file_get_contents($this->_channelFileName($channel));
-        set_magic_quotes_runtime($rt);
-        $data = unserialize($data);
-        return $data;
-    }
-
-    // }}}
-    // {{{ _listChannels()
-
-    function _listChannels()
-    {
-        $channellist = array();
-        if (!file_exists($this->channelsdir) || !is_dir($this->channelsdir)) {
-            return array('pear.php.net', 'pecl.php.net', '__uri');
-        }
-        $dp = opendir($this->channelsdir);
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+            if ($min && version_compare($release['v'], $min, 'lt')) { // skip too old versions
                 continue;
             }
-            if ($ent == '__uri.reg') {
-                $channellist[] = '__uri';
+            if ($max && version_compare($release['v'], $max, 'gt')) { // skip too new versions
                 continue;
             }
-            $channellist[] = str_replace('_', '/', substr($ent, 0, -4));
-        }
-        closedir($dp);
-        if (!in_array('pear.php.net', $channellist)) {
-            $channellist[] = 'pear.php.net';
-        }
-        if (!in_array('pecl.php.net', $channellist)) {
-            $channellist[] = 'pecl.php.net';
-        }
-        if (!in_array('__uri', $channellist)) {
-            $channellist[] = '__uri';
-        } 
-   
-        natsort($channellist);
-        return $channellist;
-    }
-
-    // }}}
-    // {{{ _listPackages()
-
-    function _listPackages($channel = false)
-    {
-        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {
-            return $this->_listChannelPackages($channel);
-        }
-        if (!file_exists($this->statedir) || !is_dir($this->statedir)) {
-            return array();
-        }
-        $pkglist = array();
-        $dp = opendir($this->statedir);
-        if (!$dp) {
-            return $pkglist;
-        }
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
+            if ($installed && version_compare($release['v'], $installed, '<')) {
                 continue;
             }
-            $pkglist[] = substr($ent, 0, -4);
-        }
-        closedir($dp);
-        return $pkglist;
-    }
-
-    // }}}
-    // {{{ _listChannelPackages()
-
-    function _listChannelPackages($channel)
-    {
-        $pkglist = array();
-        if (!file_exists($this->_channelDirectoryName($channel)) ||
-              !is_dir($this->_channelDirectoryName($channel))) {
-            return array();
-        }
-        $dp = opendir($this->_channelDirectoryName($channel));
-        if (!$dp) {
-            return $pkglist;
-        }
-        while ($ent = readdir($dp)) {
-            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
-                continue;
+            if (in_array($release['s'], $states)) { // if in the preferred state...
+                $found = true; // ... then use it
+                break;
             }
-            $pkglist[] = substr($ent, 0, -4);
         }
-        closedir($dp);
-        return $pkglist;
-    }
-
-    // }}}
-    
-    function _listAllPackages()
-    {
-        $ret = array();
-        foreach ($this->_listChannels() as $channel) {
-            $ret[$channel] = $this->_listPackages($channel);
-        }
-        return $ret;
+        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
     }
 
     /**
-     * Add an installed package to the registry
-     * @param string package name
-     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
-     * @return bool success of saving
-     * @access private
-     */
-    function _addPackage($package, $info)
-    {
-        if ($this->_packageExists($package)) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($package, 'wb');
-        if ($fp === null) {
-            return false;
-        }
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        if (isset($info['filelist'])) {
-            $this->_rebuildFileMap();
-        }
-        return true;
-    }
-
-    /**
-     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
-     * @return bool
+     * Take raw data and return the array needed for processing a download URL
+     *
+     * @param string $base REST base uri
+     * @param string $package Package name
+     * @param array $release an array of format array('v' => version, 's' => state)
+     *                       describing the release to download
+     * @param array $info list of all releases as defined by allreleases.xml
+     * @param bool|null $found determines whether the release was found or this is the next
+     *                    best alternative.  If null, then versions were skipped because
+     *                    of PHP dependency
+     * @return array|PEAR_Error
      * @access private
      */
-    function _addPackage2($info)
+    function _returnDownloadURL($base, $package, $release, $info, $found, $phpversion = false, $channel = false)
     {
-        if (!is_a($info, 'PEAR_PackageFile_v1') && !is_a($info, 'PEAR_PackageFile_v2')) {
-            return false;
+        if (!$found) {
+            $release = $info['r'][0];
         }
-
-        if (!$info->validate()) {
-            if (class_exists('PEAR_Common')) {
-                $ui = PEAR_Frontend::singleton();
-                if ($ui) {
-                    foreach ($info->getValidationWarnings() as $err) {
-                        $ui->log($err['message'], true);
-                    }
-                }
+        $pinfo = $this->_rest->retrieveCacheFirst($base . 'p/' . strtolower($package) . '/' .
+            'info.xml', false, false, $channel);
+        if (PEAR::isError($pinfo)) {
+            return PEAR::raiseError('Package "' . $package .
+                '" does not have REST info xml available');
+        }
+        $releaseinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+            $release['v'] . '.xml', false, false, $channel);
+        if (PEAR::isError($releaseinfo)) {
+            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
+                '" does not have REST xml available');
+        }
+        $packagexml = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+            'deps.' . $release['v'] . '.txt', false, true, $channel);
+        if (PEAR::isError($packagexml)) {
+            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
+                '" does not have REST dependency information available');
+        }
+
+        $packagexml = unserialize($packagexml);
+        if (!$packagexml) {
+            $packagexml = array();
+        }
+        $allinfo = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+            '/allreleases.xml', false, false, $channel);
+        if (!is_array($allinfo['r']) || !isset($allinfo['r'][0])) {
+            $allinfo['r'] = array($allinfo['r']);
+        }
+        $compatible = false;
+        foreach ($allinfo['r'] as $release) {
+            if ($release['v'] != $releaseinfo['v']) {
+                continue;
             }
-            return false;
-        }
-        $channel = $info->getChannel();
-        $package = $info->getPackage();
-        $save = $info;
-        if ($this->_packageExists($package, $channel)) {
-            return false;
-        }
-        if (!$this->_channelExists($channel, true)) {
-            return false;
-        }
-        $info = $info->toArray(true);
-        if (!$info) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($package, 'wb', $channel);
-        if ($fp === null) {
-            return false;
-        }
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        $this->_rebuildFileMap();
-        return true;
-    }
-
-    /**
-     * @param string Package name
-     * @param array parsed package.xml 1.0
-     * @param bool this parameter is only here for BC.  Don't use it.
-     * @access private
-     */
-    function _updatePackage($package, $info, $merge = true)
-    {
-        $oldinfo = $this->_packageInfo($package);
-        if (empty($oldinfo)) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($package, 'w');
-        if ($fp === null) {
-            return false;
-        }
-        if (is_object($info)) {
-            $info = $info->toArray();
-        }
-        $info['_lastmodified'] = time();
-        $newinfo = $info;
-        if ($merge) {
-            $info = array_merge($oldinfo, $info);
-        } else {
-            $diff = $info;
-        }
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        if (isset($newinfo['filelist'])) {
-            $this->_rebuildFileMap();
-        }
-        return true;
-    }
-
-    /**
-     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
-     * @return bool
-     * @access private
-     */
-    function _updatePackage2($info)
-    {
-        if (!$this->_packageExists($info->getPackage(), $info->getChannel())) {
-            return false;
-        }
-        $fp = $this->_openPackageFile($info->getPackage(), 'w', $info->getChannel());
-        if ($fp === null) {
-            return false;
-        }
-        $save = $info;
-        $info = $save->getArray(true);
-        $info['_lastmodified'] = time();
-        fwrite($fp, serialize($info));
-        $this->_closePackageFile($fp);
-        $this->_rebuildFileMap();
-        return true;
-    }
-
-    /**
-     * @param string Package name
-     * @param string Channel name
-     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
-     * @access private
-     */
-    function &_getPackage($package, $channel = 'pear.php.net')
-    {
-        $info = $this->_packageInfo($package, null, $channel);
-        if ($info === null) {
-            return $info;
-        }
-        $a = $this->_config;
-        if (!$a) {
-            $this->_config = &new PEAR_Config;
-            $this->_config->set('php_dir', $this->statedir);
-        }
-        if (!class_exists('PEAR_PackageFile')) {
-            require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile.php';
-        }
-        $pkg = &new PEAR_PackageFile($this->_config);
-        $pf = &$pkg->fromArray($info);
-        return $pf;
-    }
-
-    /**
-     * @param string channel name
-     * @param bool whether to strictly retrieve channel names
-     * @return PEAR_ChannelFile|PEAR_Error
-     * @access private
-     */
-    function &_getChannel($channel, $noaliases = false)
-    {
-        $ch = false;
-        if ($this->_channelExists($channel, $noaliases)) {
-            $chinfo = $this->_channelInfo($channel, $noaliases);
-            if ($chinfo) {
-                if (!class_exists('PEAR_ChannelFile')) {
-                    require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
-                }
-                $ch = &PEAR_ChannelFile::fromArrayWithErrors($chinfo);
+            if (!isset($release['co'])) {
+                break;
             }
-        }
-        if ($ch) {
-            if ($ch->validate()) {
-                return $ch;
+            $compatible = array();
+            if (!is_array($release['co']) || !isset($release['co'][0])) {
+                $release['co'] = array($release['co']);
+            }
+            foreach ($release['co'] as $entry) {
+                $comp = array();
+                $comp['name'] = $entry['p'];
+                $comp['channel'] = $entry['c'];
+                $comp['min'] = $entry['min'];
+                $comp['max'] = $entry['max'];
+                if (isset($entry['x']) && !is_array($entry['x'])) {
+                    $comp['exclude'] = $entry['x'];
+                }
+                $compatible[] = $comp;
             }
-            foreach ($ch->getErrors(true) as $err) {
-                $message = $err['message'] . "\n";
+            if (count($compatible) == 1) {
+                $compatible = $compatible[0];
             }
-            $ch = PEAR::raiseError($message);
-            return $ch;
+            break;
         }
-        if ($this->_getChannelFromAlias($channel) == 'pear.php.net') {
-            // the registry is not properly set up, so use defaults
-            if (!class_exists('PEAR_ChannelFile')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
-            }
-            $pear_channel = new PEAR_ChannelFile;
-            $pear_channel->setName('pear.php.net');
-            $pear_channel->setAlias('pear');
-            $pear_channel->setSummary('PHP Extension and Application Repository');
-            $pear_channel->setDefaultPEARProtocols();
-            $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');
-            $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');
-            return $pear_channel;
-        }
-        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {
-            // the registry is not properly set up, so use defaults
-            if (!class_exists('PEAR_ChannelFile')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
-            }
-            $pear_channel = new PEAR_ChannelFile;
-            $pear_channel->setName('pecl.php.net');
-            $pear_channel->setAlias('pecl');
-            $pear_channel->setSummary('PHP Extension Community Library');
-            $pear_channel->setDefaultPEARProtocols();
-            $pear_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');
-            $pear_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');
-            $pear_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');
-            return $pear_channel;
-        }
-        if ($this->_getChannelFromAlias($channel) == '__uri') {
-            // the registry is not properly set up, so use defaults
-            if (!class_exists('PEAR_ChannelFile')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/ChannelFile.php';
+        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
+            if (is_array($pinfo['dp'])) {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']['_content']));
+            } else {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']));
             }
-            $private = new PEAR_ChannelFile;
-            $private->setName('__uri');
-            $private->addFunction('xmlrpc', '1.0', '****');
-            $private->setSummary('Pseudo-channel for static packages');
-            return $private;
+        } else {
+            $deprecated = false;
         }
-        return $ch;
-    }
-
-    // {{{ packageExists()
-
-    /**
-     * @param string Package name
-     * @param string Channel name
-     * @return bool
-     */
-    function packageExists($package, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if ($found) {
+            return
+                array('version' => $releaseinfo['v'],
+                      'info' => $packagexml,
+                      'package' => $releaseinfo['p']['_content'],
+                      'stability' => $releaseinfo['st'],
+                      'url' => $releaseinfo['g'],
+                      'compatible' => $compatible,
+                      'deprecated' => $deprecated,
+                );
+        } else {
+            return
+                array('version' => $releaseinfo['v'],
+                      'package' => $releaseinfo['p']['_content'],
+                      'stability' => $releaseinfo['st'],
+                      'info' => $packagexml,
+                      'compatible' => $compatible,
+                      'deprecated' => $deprecated,
+                      'php' => $phpversion
+                );
         }
-        $ret = $this->_packageExists($package, $channel);
-        $this->_unlock();
-        return $ret;
     }
 
-    // }}}
-
-    // {{{ channelExists()
-
-    /**
-     * @param string channel name
-     * @param bool if true, then aliases will be ignored
-     * @return bool
-     */
-    function channelExists($channel, $noaliases = false)
+    function listPackages($base, $channel = false)
     {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
         }
-        $ret = $this->_channelExists($channel, $noaliases);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-
-    // {{{ isAlias()
-
-    /**
-     * Determines whether the parameter is an alias of a channel
-     * @param string
-     * @return bool
-     */
-    function isAlias($alias)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return array();
         }
-        $ret = $this->_isChannelAlias($alias);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ packageInfo()
-
-    /**
-     * @param string|null
-     * @param string|null
-     * @param string
-     * @return array|null
-     */
-    function packageInfo($package = null, $key = null, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
         }
-        $ret = $this->_packageInfo($package, $key, $channel);
-        $this->_unlock();
-        return $ret;
+        return $packagelist['p'];
     }
 
-    // }}}
-    // {{{ channelInfo()
-
     /**
-     * Retrieve a raw array of channel data.
+     * List all categories of a REST server
      *
-     * Do not use this, instead use {@link getChannel()} for normal
-     * operations.  Array structure is undefined in this method
-     * @param string channel name
-     * @param bool whether to strictly retrieve information only on non-aliases
-     * @return array|null|PEAR_Error
-     */
-    function channelInfo($channel = null, $noaliases = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_channelInfo($channel, $noaliases);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-
-    /**
-     * @param string
-     */
-    function channelName($channel)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_getChannelFromAlias($channel);
-        $this->_unlock();
-        return $ret;
-    }
-
-    /**
-     * @param string
-     */
-    function channelAlias($channel)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_getAlias($channel);
-        $this->_unlock();
-        return $ret;
-    }
-    // {{{ listPackages()
-
-    function listPackages($channel = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_listPackages($channel);
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ listAllPackages()
-
-    function listAllPackages()
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_listAllPackages();
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ listChannel()
-
-    function listChannels()
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        $ret = $this->_listChannels();
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ addPackage()
-
-    /**
-     * Add an installed package to the registry
-     * @param string|PEAR_PackageFile_v1|PEAR_PackageFile_v2 package name or object
-     *               that will be passed to {@link addPackage2()}
-     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)
-     * @return bool success of saving
+     * @param string $base base URL of the server
+     * @return array of categorynames
      */
-    function addPackage($package, $info)
+    function listCategories($base, $channel = false)
     {
-        if (is_object($info)) {
-            return $this->addPackage2($info);
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_addPackage($package, $info);
-        $this->_unlock();
-        if ($ret) {
-            if (!class_exists('PEAR_PackageFile_v1')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
-            }
-            $pf = new PEAR_PackageFile_v1;
-            $pf->setConfig($this->_config);
-            $pf->fromArray($info);
-            $this->_dependencyDB->uninstallPackage($pf);
-            $this->_dependencyDB->installPackage($pf);
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ addPackage2()
+        $categories = array();
 
-    function addPackage2($info)
-    {
-        if (!is_object($info)) {
-            return $this->addPackage($info['package'], $info);
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
+        // c/categories.xml does not exist;
+        // check for every package its category manually
+        // This is SLOOOWWWW : ///
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
         }
-        $ret = $this->_addPackage2($info);
-        $this->_unlock();
-        if ($ret) {
-            $this->_dependencyDB->uninstallPackage($info);
-            $this->_dependencyDB->installPackage($info);
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            $ret = array();
+            return $ret;
         }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ updateChannel()
-
-    /**
-     * For future expandibility purposes, separate this
-     * @param PEAR_ChannelFile
-     */
-    function updateChannel($channel, $lastmodified = null)
-    {
-        if ($channel->getName() == '__uri') {
-            return false;
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
         }
-        return $this->addChannel($channel, $lastmodified, true);
-    }
-
-    // }}}
-    // {{{ deleteChannel()
 
-    /**
-     * Deletion fails if there are any packages installed from the channel
-     * @param string|PEAR_ChannelFile channel name
-     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist
-     */
-    function deleteChannel($channel)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_deleteChannel($channel);
-        $this->_unlock();
-        if ($ret && is_a($this->_config, 'PEAR_Config')) {
-            $this->_config->setChannels($this->listChannels());
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        foreach ($packagelist['p'] as $package) {
+                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
+                if (PEAR::isError($inf)) {
+                    PEAR::popErrorHandling();
+                    return $inf;
+                }
+                $cat = $inf['ca']['_content'];
+                if (!isset($categories[$cat])) {
+                    $categories[$cat] = $inf['ca'];
+                }
         }
-        return $ret;
+        return array_values($categories);
     }
 
-    // }}}
-    // {{{ addChannel()
-
     /**
-     * @param PEAR_ChannelFile Channel object
-     * @param string Last-Modified header from HTTP for caching
-     * @return boolean|PEAR_Error True on creation, false if it already exists
+     * List a category of a REST server
+     *
+     * @param string $base base URL of the server
+     * @param string $category name of the category
+     * @param boolean $info also download full package info
+     * @return array of packagenames
      */
-    function addChannel($channel, $lastmodified = false, $update = false)
+    function listCategory($base, $category, $info = false, $channel = false)
     {
-        if (!is_a($channel, 'PEAR_ChannelFile')) {
-            return false;
-        }
-        if (!$channel->validate()) {
-            return false;
+        // gives '404 Not Found' error when category doesn't exist
+        $packagelist = $this->_rest->retrieveData($base.'c/'.urlencode($category).'/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
         }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_addChannel($channel, $update, $lastmodified);
-        $this->_unlock();
-        if (!$update && $ret && is_a($this->_config, 'PEAR_Config')) {
-            $this->_config->setChannels($this->listChannels());
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ deletePackage()
-
-    function deletePackage($package, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return array();
         }
-        $file = $this->_packageFileName($package, $channel);
-        if (file_exists($file)) {
-            $ret = @unlink($file);
+        if (!is_array($packagelist['p']) ||
+            !isset($packagelist['p'][0])) { // only 1 pkg
+            $packagelist = array($packagelist['p']);
         } else {
-            $ret = false;
+            $packagelist = $packagelist['p'];
         }
-        $this->_rebuildFileMap();
-        $this->_unlock();
-        $p = array('channel' => $channel, 'package' => $package);
-        $this->_dependencyDB->uninstallPackage($p);
-        return $ret;
-    }
 
-    // }}}
-    // {{{ updatePackage()
-
-    function updatePackage($package, $info, $merge = true)
-    {
-        if (is_object($info)) {
-            return $this->updatePackage2($info, $merge);
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        $ret = $this->_updatePackage($package, $info, $merge);
-        $this->_unlock();
-        if ($ret) {
-            if (!class_exists('PEAR_PackageFile_v1')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v1.php';
+        if ($info == true) {
+            // get individual package info
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            foreach ($packagelist as $i => $packageitem) {
+                $url = sprintf('%s'.'r/%s/latest.txt',
+                        $base,
+                        strtolower($packageitem['_content']));
+                $version = $this->_rest->retrieveData($url, false, false, $channel);
+                if (PEAR::isError($version)) {
+                    break; // skipit
+                }
+                $url = sprintf('%s'.'r/%s/%s.xml',
+                        $base,
+                        strtolower($packageitem['_content']),
+                        $version);
+                $info = $this->_rest->retrieveData($url, false, false, $channel);
+                if (PEAR::isError($info)) {
+                    break; // skipit
+                }
+                $packagelist[$i]['info'] = $info;
             }
-            $pf = new PEAR_PackageFile_v1;
-            $pf->setConfig($this->_config);
-            $pf->fromArray($this->packageInfo($package));
-            $this->_dependencyDB->uninstallPackage($pf);
-            $this->_dependencyDB->installPackage($pf);
+            PEAR::popErrorHandling();
         }
-        return $ret;
+
+        return $packagelist;
     }
 
-    // }}}
-    // {{{ updatePackage2()
 
-    function updatePackage2($info)
+    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false, $channel = false)
     {
-        if (!is_object($info)) {
-            return $this->updatePackage($info['package'], $info, $merge);
-        }
-        if (!$info->validate(PEAR_VALIDATE_DOWNLOADING)) {
-            return false;
-        }
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
         }
-        $ret = $this->_updatePackage2($info);
-        $this->_unlock();
-        if ($ret) {
-            $this->_dependencyDB->uninstallPackage($info);
-            $this->_dependencyDB->installPackage($info);
-        }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ getChannel()
-    /**
-     * @param string channel name
-     * @param bool whether to strictly return raw channels (no aliases)
-     * @return PEAR_ChannelFile|PEAR_Error
-     */
-    function &getChannel($channel, $noaliases = false)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if ($this->_rest->config->get('verbose') > 0) {
+            $ui = &PEAR_Frontend::singleton();
+            $ui->log('Retrieving data...0%', false);
         }
-        $ret = &$this->_getChannel($channel, $noaliases);
-        $this->_unlock();
-        if (!$ret) {
-            return PEAR::raiseError('Unknown channel: ' . $channel);
+        $ret = array();
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return $ret;
         }
-        return $ret;
-    }
-
-    // }}}
-    // {{{ getPackage()
-    /**
-     * @param string package name
-     * @param string channel name
-     * @return PEAR_PackageFile_v1|PEAR_PackageFile_v2|null
-     */
-    function &getPackage($package, $channel = 'pear.php.net')
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
         }
-        $pf = &$this->_getPackage($package, $channel);
-        $this->_unlock();
-        return $pf;
-    }
 
-    // }}}
-
-    /**
-     * Get PEAR_PackageFile_v[1/2] objects representing the contents of
-     * a dependency group that are installed.
-     *
-     * This is used at uninstall-time
-     * @param array
-     * @return array|false
-     */
-    function getInstalledGroup($group)
-    {
-        $ret = array();
-        if (isset($group['package'])) {
-            if (!isset($group['package'][0])) {
-                $group['package'] = array($group['package']);
-            }
-            foreach ($group['package'] as $package) {
-                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
-                $p = &$this->getPackage($package['name'], $depchannel);
-                if ($p) {
-                    $save = &$p;
-                    $ret[] = &$save;
+        // only search-packagename = quicksearch !
+        if ($searchpackage && (!$searchsummary || empty($searchpackage))) {
+            $newpackagelist = array();
+            foreach ($packagelist['p'] as $package) {
+                if (!empty($searchpackage) && stristr($package, $searchpackage) !== false) {
+                    $newpackagelist[] = $package;
                 }
             }
+            $packagelist['p'] = $newpackagelist;
         }
-        if (isset($group['subpackage'])) {
-            if (!isset($group['subpackage'][0])) {
-                $group['subpackage'] = array($group['subpackage']);
-            }
-            foreach ($group['subpackage'] as $package) {
-                $depchannel = isset($package['channel']) ? $package['channel'] : '__uri';
-                $p = &$this->getPackage($package['name'], $depchannel);
-                if ($p) {
-                    $save = &$p;
-                    $ret[] = &$save;
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $next = .1;
+        foreach ($packagelist['p'] as $progress => $package) {
+            if ($this->_rest->config->get('verbose') > 0) {
+                if ($progress / count($packagelist['p']) >= $next) {
+                    if ($next == .5) {
+                        $ui->log('50%', false);
+                    } else {
+                        $ui->log('.', false);
+                    }
+                    $next += .1;
                 }
             }
-        }
-        if (!count($ret)) {
-            return false;
-        }
-        return $ret;
-    }
 
-    // {{{ getChannelValidator()
-    /**
-     * @param string channel name
-     * @return PEAR_Validate|false
-     */
-    function &getChannelValidator($channel)
-    {
-        $chan = $this->getChannel($channel);
-        if (PEAR::isError($chan)) {
-            return $chan;
-        }
-        $val = $chan->getValidationObject();
-        return $val;
-    }
-    // }}}
-    // {{{ getChannels()
-    /**
-     * @param string channel name
-     * @return array an array of PEAR_ChannelFile objects representing every installed channel
-     */
-    function &getChannels()
-    {
-        $ret = array();
-        if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-            return $e;
-        }
-        foreach ($this->_listChannels() as $channel) {
-            $e = &$this->_getChannel($channel);
-            if (!$e || PEAR::isError($e)) {
-                continue;
-            }
-            $ret[] = $e;
-        }
-        $this->_unlock();
-        return $ret;
-    }
-
-    // }}}
-    // {{{ checkFileMap()
-
-    /**
-     * Test whether a file or set of files belongs to a package.
-     *
-     * If an array is passed in
-     * @param string|array file path, absolute or relative to the pear
-     *                     install dir
-     * @param string|array name of PEAR package or array('package' => name, 'channel' =>
-     *                     channel) of a package that will be ignored
-     * @param string API version - 1.1 will exclude any files belonging to a package
-     * @param array private recursion variable
-     * @return array|false which package and channel the file belongs to, or an empty
-     *                     string if the file does not belong to an installed package,
-     *                     or belongs to the second parameter's package
-     */
-    function checkFileMap($path, $package = false, $api = '1.0', $attrs = false)
-    {
-        if (is_array($path)) {
-            static $notempty;
-            if (empty($notempty)) {
-                if (!class_exists('PEAR_Installer_Role')) {
-                    require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Installer/Role.php';
-                }
-                $notempty = create_function('$a','return !empty($a);');
-            }
-            $package = is_array($package) ? array(strtolower($package[0]), strtolower($package[1]))
-                : strtolower($package);
-            $pkgs = array();
-            foreach ($path as $name => $attrs) {
-                if (is_array($attrs)) {
-                    if (isset($attrs['install-as'])) {
-                        $name = $attrs['install-as'];
-                    }
-                    if (!in_array($attrs['role'], PEAR_Installer_Role::getInstallableRoles())) {
-                        // these are not installed
+            if ($basic) { // remote-list command
+                if ($dostable) {
+                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                        '/stable.txt', false, false, $channel);
+                } else {
+                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                        '/latest.txt', false, false, $channel);
+                }
+                if (PEAR::isError($latest)) {
+                    $latest = false;
+                }
+                $info = array('stable' => $latest);
+            } else { // list-all command
+                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
+                if (PEAR::isError($inf)) {
+                    PEAR::popErrorHandling();
+                    return $inf;
+                }
+                if ($searchpackage) {
+                    $found = (!empty($searchpackage) && stristr($package, $searchpackage) !== false);
+                    if (!$found && !(isset($searchsummary) && !empty($searchsummary)
+                        && (stristr($inf['s'], $searchsummary) !== false
+                            || stristr($inf['d'], $searchsummary) !== false)))
+                    {
                         continue;
+                    };
+                }
+                $releases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                    '/allreleases.xml', false, false, $channel);
+                if (PEAR::isError($releases)) {
+                    continue;
+                }
+                if (!isset($releases['r'][0])) {
+                    $releases['r'] = array($releases['r']);
+                }
+                unset($latest);
+                unset($unstable);
+                unset($stable);
+                unset($state);
+                foreach ($releases['r'] as $release) {
+                    if (!isset($latest)) {
+                        if ($dostable && $release['s'] == 'stable') {
+                            $latest = $release['v'];
+                            $state = 'stable';
+                        }
+                        if (!$dostable) {
+                            $latest = $release['v'];
+                            $state = $release['s'];
+                        }
                     }
-                    if (!in_array($attrs['role'], PEAR_Installer_Role::getBaseinstallRoles())) {
-                        $attrs['baseinstalldir'] = is_array($package) ? $package[1] : $package;
+                    if (!isset($stable) && $release['s'] == 'stable') {
+                        $stable = $release['v'];
+                        if (!isset($unstable)) {
+                            $unstable = $stable;
+                        }
                     }
-                    if (isset($attrs['baseinstalldir'])) {
-                        $name = $attrs['baseinstalldir'] . DIRECTORY_SEPARATOR . $name;
+                    if (!isset($unstable) && $release['s'] != 'stable') {
+                        $latest = $unstable = $release['v'];
+                        $state = $release['s'];
+                    }
+                    if (isset($latest) && !isset($state)) {
+                        $state = $release['s'];
+                    }
+                    if (isset($latest) && isset($stable) && isset($unstable)) {
+                        break;
                     }
                 }
-                $pkgs[$name] = $this->checkFileMap($name, $package, $api, $attrs);
-                if (PEAR::isError($pkgs[$name])) {
-                    return $pkgs[$name];
-                }
-            }
-            return array_filter($pkgs, $notempty);
-        }
-        if (empty($this->filemap_cache)) {
-            if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
-                return $e;
-            }
-            $err = $this->_readFileMap();
-            $this->_unlock();
-            if (PEAR::isError($err)) {
-                return $err;
-            }
-        }
-        if (!$attrs) {
-            $attrs = array('role' => 'php'); // any old call would be for PHP role only
-        }
-        if (isset($this->filemap_cache[$attrs['role']][$path])) {
-            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
-                return false;
-            }
-            return $this->filemap_cache[$attrs['role']][$path];
-        }
-        $l = strlen($this->install_dir);
-        if (substr($path, 0, $l) == $this->install_dir) {
-            $path = preg_replace('!^'.DIRECTORY_SEPARATOR.'+!', '', substr($path, $l));
-        }
-        if (isset($this->filemap_cache[$attrs['role']][$path])) {
-            if ($api >= '1.1' && $this->filemap_cache[$attrs['role']][$path] == $package) {
-                return false;
-            }
-            return $this->filemap_cache[$attrs['role']][$path];
-        }
-        return false;
-    }
-
-    // }}}
-    // {{{ flush()
-    /**
-     * Force a reload of the filemap
-     * @since 1.5.0RC3
-     */
-    function flushFileMap()
-    {
-        $this->filemap_cache = null;
-        clearstatcache(); // ensure that the next read gets the full, current filemap
-    }
-
-    // }}}
-    // {{{ apiVersion()
-    /**
-     * Get the expected API version.  Channels API is version 1.1, as it is backwards
-     * compatible with 1.0
-     * @return string
-     */
-    function apiVersion()
-    {
-        return '1.1';
-    }
-    // }}}
-
-
-    /**
-     * Parse a package name, or validate a parsed package name array
-     * @param string|array pass in an array of format
-     *                     array(
-     *                      'package' => 'pname',
-     *                     ['channel' => 'channame',]
-     *                     ['version' => 'version',]
-     *                     ['state' => 'state',]
-     *                     ['group' => 'groupname'])
-     *                     or a string of format
-     *                     [channel://][channame/]pname[-version|-state][/group=groupname]
-     * @return array|PEAR_Error
-     */
-    function parsePackageName($param, $defaultchannel = 'pear.php.net')
-    {
-        $saveparam = $param;
-        if (is_array($param)) {
-            // convert to string for error messages
-            $saveparam = $this->parsedPackageNameToString($param);
-            // process the array
-            if (!isset($param['package'])) {
-                return PEAR::raiseError('parsePackageName(): array $param ' .
-                    'must contain a valid package name in index "param"',
-                    'package', null, null, $param);
-            }
-            if (!isset($param['uri'])) {
-                if (!isset($param['channel'])) {
-                    $param['channel'] = $defaultchannel;
-                }
-            } else {
-                $param['channel'] = '__uri';
-            }
-        } else {
-            $components = @parse_url((string) $param);
-            if (isset($components['scheme'])) {
-                if ($components['scheme'] == 'http') {
-                    // uri package
-                    $param = array('uri' => $param, 'channel' => '__uri');
-                } elseif($components['scheme'] != 'channel') {
-                    return PEAR::raiseError('parsePackageName(): only channel:// uris may ' .
-                        'be downloaded, not "' . $param . '"', 'invalid', null, null, $param);
-                }
-            }
-            if (!isset($components['path'])) {
-                return PEAR::raiseError('parsePackageName(): array $param ' .
-                    'must contain a valid package name in "' . $param . '"',
-                    'package', null, null, $param);
-            }
-            if (isset($components['host'])) {
-                // remove the leading "/"
-                $components['path'] = substr($components['path'], 1);
-            }
-            if (!isset($components['scheme'])) {
-                if (strpos($components['path'], '/') !== false) {
-                    if ($components['path']{0} == '/') {
-                        return PEAR::raiseError('parsePackageName(): this is not ' .
-                            'a package name, it begins with "/" in "' . $param . '"',
-                            'invalid', null, null, $param);
-                    }
-                    $parts = explode('/', $components['path']);
-                    $components['host'] = array_shift($parts);
-                    if (count($parts) > 1) {
-                        $components['path'] = array_pop($parts);
-                        $components['host'] .= '/' . implode('/', $parts);
-                    } else {
-                        $components['path'] = implode('/', $parts);
+                $deps = array();
+                if (!isset($unstable)) {
+                    $unstable = false;
+                    $state = 'stable';
+                    if (isset($stable)) {
+                        $latest = $unstable = $stable;
                     }
                 } else {
-                    $components['host'] = $defaultchannel;
-                }
-            } else {
-                if (strpos($components['path'], '/')) {
-                    $parts = explode('/', $components['path']);
-                    $components['path'] = array_pop($parts);
-                    $components['host'] .= '/' . implode('/', $parts);
+                    $latest = $unstable;
+                }
+                if (!isset($latest)) {
+                    $latest = false;
+                }
+                if ($latest) {
+                    $d = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
+                        $latest . '.txt', false, false, $channel);
+                    if (!PEAR::isError($d)) {
+                        $d = unserialize($d);
+                        if ($d) {
+                            if (isset($d['required'])) {
+                                if (!class_exists('PEAR_PackageFile_v2')) {
+                                    require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
+                                }
+                                if (!isset($pf)) {
+                                    $pf = new PEAR_PackageFile_v2;
+                                }
+                                $pf->setDeps($d);
+                                $tdeps = $pf->getDeps();
+                            } else {
+                                $tdeps = $d;
+                            }
+                            foreach ($tdeps as $dep) {
+                                if ($dep['type'] !== 'pkg') {
+                                    continue;
+                                }
+                                $deps[] = $dep;
+                            }
+                        }
+                    }
                 }
-            }
-
-            if (is_array($param)) {
-                $param['package'] = $components['path'];
-            } else {
-                $param = array(
-                    'package' => $components['path']
-                    );
-                if (isset($components['host'])) {
-                    $param['channel'] = $components['host'];
+                if (!isset($stable)) {
+                    $stable = '-n/a-';
                 }
-            }
-            if (isset($components['fragment'])) {
-                $param['group'] = $components['fragment'];
-            }
-            if (isset($components['user'])) {
-                $param['user'] = $components['user'];
-            }
-            if (isset($components['pass'])) {
-                $param['pass'] = $components['pass'];
-            }
-            if (isset($components['query'])) {
-                parse_str($components['query'], $param['opts']);
-            }
-            // check for extension
-            $pathinfo = pathinfo($param['package']);
-            if (isset($pathinfo['extension']) &&
-                  in_array(strtolower($pathinfo['extension']), array('tgz', 'tar'))) {
-                $param['extension'] = $pathinfo['extension'];
-                $param['package'] = substr($pathinfo['basename'], 0,
-                    strlen($pathinfo['basename']) - 4);
-            }
-            // check for version
-            if (strpos($param['package'], '-')) {
-                $test = explode('-', $param['package']);
-                if (count($test) != 2) {
-                    return PEAR::raiseError('parsePackageName(): only one version/state ' .
-                        'delimiter "-" is allowed in "' . $saveparam . '"',
-                        'version', null, null, $param);
+                if (!$searchpackage) {
+                    $info = array('stable' => $latest, 'summary' => $inf['s'], 'description' =>
+                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
+                        'unstable' => $unstable, 'state' => $state);
+                } else {
+                    $info = array('stable' => $stable, 'summary' => $inf['s'], 'description' =>
+                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
+                        'unstable' => $unstable, 'state' => $state);
                 }
-                list($param['package'], $param['version']) = $test;
-            }
-        }
-        // validation
-        $info = $this->channelExists($param['channel']);
-        if (PEAR::isError($info)) {
-            return $info;
-        }
-        if (!$info) {
-            return PEAR::raiseError('unknown channel "' . $param['channel'] .
-                '" in "' . $saveparam . '"', 'channel', null, null, $param);
-        }
-        $chan = $this->getChannel($param['channel']);
-        if (PEAR::isError($chan)) {
-            return $chan;
-        }
-        if (!$chan) {
-            return PEAR::raiseError("Exception: corrupt registry, could not " .
-                "retrieve channel " . $param['channel'] . " information",
-                'registry', null, null, $param);
-        }
-        $param['channel'] = $chan->getName();
-        $validate = $chan->getValidationObject();
-        $vpackage = $chan->getValidationPackage();
-        // validate package name
-        if (!$validate->validPackageName($param['package'], $vpackage['_content'])) {
-            return PEAR::raiseError('parsePackageName(): invalid package name "' .
-                $param['package'] . '" in "' . $saveparam . '"',
-                'package', null, null, $param);
-        }
-        if (isset($param['group'])) {
-            if (!PEAR_Validate::validGroupName($param['group'])) {
-                return PEAR::raiseError('parsePackageName(): dependency group "' . $param['group'] .
-                    '" is not a valid group name in "' . $saveparam . '"', 'group', null, null,
-                    $param);
-            }
-        }
-        if (isset($param['state'])) {
-            if (!in_array(strtolower($param['state']), $validate->getValidStates())) {
-                return PEAR::raiseError('parsePackageName(): state "' . $param['state']
-                    . '" is not a valid state in "' . $saveparam . '"',
-                    'state', null, null, $param);
             }
+            $ret[$package] = $info;
         }
-        if (isset($param['version'])) {
-            if (isset($param['state'])) {
-                return PEAR::raiseError('parsePackageName(): cannot contain both ' .
-                    'a version and a stability (state) in "' . $saveparam . '"',
-                    'version/state', null, null, $param);
-            }
-            // check whether version is actually a state
-            if (in_array(strtolower($param['version']), $validate->getValidStates())) {
-                $param['state'] = strtolower($param['version']);
-                unset($param['version']);
-            } else {
-                if (!$validate->validVersion($param['version'])) {
-                    return PEAR::raiseError('parsePackageName(): "' . $param['version'] .
-                        '" is neither a valid version nor a valid state in "' .
-                        $saveparam . '"', 'version/state', null, null, $param);
-                }                    
-            }
-        }
-        return $param;
+        PEAR::popErrorHandling();
+        return $ret;
     }
 
-    /**
-     * @param array
-     * @return string
-     */
-    function parsedPackageNameToString($parsed, $brief = false)
+    function listLatestUpgrades($base, $pref_state, $installed, $channel, &$reg)
     {
-        if (is_string($parsed)) {
-            return $parsed;
-        }
-        if (is_object($parsed)) {
-            $p = $parsed;
-            $parsed = array(
-                'package' => $p->getPackage(),
-                'channel' => $p->getChannel(),
-                'version' => $p->getVersion(),
-            );
-        }
-        if (isset($parsed['uri'])) {
-            return $parsed['uri'];
+        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
+        if (PEAR::isError($packagelist)) {
+            return $packagelist;
         }
-        if ($brief) {
-            if ($channel = $this->channelAlias($parsed['channel'])) {
-                return $channel . '/' . $parsed['package'];
-            }
-        }
-        $upass = '';
-        if (isset($parsed['user'])) {
-            $upass = $parsed['user'];
-            if (isset($parsed['pass'])) {
-                $upass .= ':' . $parsed['pass'];
-            }
-            $upass = "$upass@";
-        }
-        $ret = 'channel://' . $upass . $parsed['channel'] . '/' . $parsed['package'];
-        if (isset($parsed['version']) || isset($parsed['state'])) {
-            $ver = isset($parsed['version']) ? $parsed['version'] : '';
-            $ver .= isset($parsed['state']) ? $parsed['state'] : '';
-            $ret .= '-' . $ver;
-        }
-        if (isset($parsed['extension'])) {
-            $ret .= '.' . $parsed['extension'];
-        }
-        if (isset($parsed['opts'])) {
-            $ret .= '?';
-            foreach ($parsed['opts'] as $name => $value) {
-                $parsed['opts'][$name] = "$name=$value";
-            }
-            $ret .= implode('&', $parsed['opts']);
-        }
-        if (isset($parsed['group'])) {
-            $ret .= '#' . $parsed['group'];
+
+        $ret = array();
+        if (!is_array($packagelist) || !isset($packagelist['p'])) {
+            return $ret;
         }
-        return $ret;
-    }
-}
 
-?>
-<?php
-/**
- * PEAR_Remote
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Remote.php,v 1.80 2008/01/03 20:26:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 0.1
- */
+        if (!is_array($packagelist['p'])) {
+            $packagelist['p'] = array($packagelist['p']);
+        }
 
-/**
- * needed for PEAR_Error
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Config.php';
+        foreach ($packagelist['p'] as $package) {
+            if (!isset($installed[strtolower($package)])) {
+                continue;
+            }
 
-/**
- * This is a class for doing remote operations against the central
- * PEAR database.
- *
- * @nodep XML_RPC_Value
- * @nodep XML_RPC_Message
- * @nodep XML_RPC_Client
- * @category   pear
- * @package    PEAR
- * @author     Stig Bakken <ssb at php.net>
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 0.1
- */
-class PEAR_Remote extends PEAR
-{
-    // {{{ properties
+            $inst_version = $reg->packageInfo($package, 'version', $channel);
+            $inst_state   = $reg->packageInfo($package, 'release_state', $channel);
+            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+            $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+                '/allreleases.xml', false, false, $channel);
+            PEAR::popErrorHandling();
+            if (PEAR::isError($info)) {
+                continue; // no remote releases
+            }
 
-    var $config = null;
-    var $cache  = null;
-    /**
-     * @var PEAR_Registry
-     * @access private
-     */
-    var $_registry;
+            if (!isset($info['r'])) {
+                continue;
+            }
 
-    // }}}
+            $release = $found = false;
+            if (!is_array($info['r']) || !isset($info['r'][0])) {
+                $info['r'] = array($info['r']);
+            }
 
-    // {{{ PEAR_Remote(config_object)
+            // $info['r'] is sorted by version number
+            usort($info['r'], array($this, '_sortReleasesByVersionNumber'));
+            foreach ($info['r'] as $release) {
+                if ($inst_version && version_compare($release['v'], $inst_version, '<=')) {
+                    // not newer than the one installed
+                    break;
+                }
 
-    function PEAR_Remote(&$config)
-    {
-        $this->PEAR();
-        $this->config = &$config;
-        $this->_registry = &$this->config->getRegistry();
-    }
+                // new version > installed version
+                if (!$pref_state) {
+                    // every state is a good state
+                    $found = true;
+                    break;
+                } else {
+                    $new_state = $release['s'];
+                    // if new state >= installed state: go
+                    if (in_array($new_state, $this->betterStates($inst_state, true))) {
+                        $found = true;
+                        break;
+                    } else {
+                        // only allow to lower the state of package,
+                        // if new state >= preferred state: go
+                        if (in_array($new_state, $this->betterStates($pref_state, true))) {
+                            $found = true;
+                            break;
+                        }
+                    }
+                }
+            }
 
-    // }}}
-    // {{{ setRegistry()
-    
-    function setRegistry(&$reg)
-    {
-        $this->_registry = &$reg;
-    }
-    // }}}
-    // {{{ getCache()
+            if (!$found) {
+                continue;
+            }
 
+            $relinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
+                $release['v'] . '.xml', false, false, $channel);
+            if (PEAR::isError($relinfo)) {
+                return $relinfo;
+            }
 
-    function getCache($args)
-    {
-        $id       = md5(serialize($args));
-        $cachedir = $this->config->get('cache_dir');
-        $filename = $cachedir . DIRECTORY_SEPARATOR . 'xmlrpc_cache_' . $id;
-        if (!file_exists($filename)) {
-            return null;
+            $ret[$package] = array(
+                'version'  => $release['v'],
+                'state'    => $release['s'],
+                'filesize' => $relinfo['f'],
+            );
         }
 
-        $fp = fopen($filename, 'rb');
-        if (!$fp) {
-            return null;
-        }
-        fclose($fp);
-        $content = file_get_contents($filename);
-        $result   = array(
-            'age'        => time() - filemtime($filename),
-            'lastChange' => filemtime($filename),
-            'content'    => unserialize($content),
-            );
-        return $result;
+        return $ret;
     }
 
-    // }}}
-
-    // {{{ saveCache()
-
-    function saveCache($args, $data)
+    function packageInfo($base, $package, $channel = false)
     {
-        $id       = md5(serialize($args));
-        $cachedir = $this->config->get('cache_dir');
-        if (!file_exists($cachedir)) {
-            System::mkdir(array('-p', $cachedir));
-        }
-        $filename = $cachedir.'/xmlrpc_cache_'.$id;
-
-        $fp = @fopen($filename, "wb");
-        if ($fp) {
-            fwrite($fp, serialize($data));
-            fclose($fp);
+        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+        $pinfo = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
+        if (PEAR::isError($pinfo)) {
+            PEAR::popErrorHandling();
+            return PEAR::raiseError('Unknown package: "' . $package . '" in channel "' . $channel . '"' . "\n". 'Debug: ' .
+                $pinfo->getMessage());
         }
-    }
 
-    // }}}
+        $releases = array();
+        $allreleases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
+            '/allreleases.xml', false, false, $channel);
+        if (!PEAR::isError($allreleases)) {
+            if (!class_exists('PEAR_PackageFile_v2')) {
+                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
+            }
 
-    // {{{ clearCache()
+            if (!is_array($allreleases['r']) || !isset($allreleases['r'][0])) {
+                $allreleases['r'] = array($allreleases['r']);
+            }
 
-    function clearCache($method, $args)
-    {
-        array_unshift($args, $method);
-        array_unshift($args, $this->config->get('default_channel')); // cache by channel
-        $id       = md5(serialize($args));
-        $cachedir = $this->config->get('cache_dir');
-        $filename = $cachedir.'/xmlrpc_cache_'.$id;
-        if (file_exists($filename)) {
-            @unlink($filename);
-        }
-    }
+            $pf = new PEAR_PackageFile_v2;
+            foreach ($allreleases['r'] as $release) {
+                $ds = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
+                    $release['v'] . '.txt', false, false, $channel);
+                if (PEAR::isError($ds)) {
+                    continue;
+                }
 
-    // }}}
-    // {{{ call(method, [args...])
+                if (!isset($latest)) {
+                    $latest = $release['v'];
+                }
 
-    function call($method)
-    {
-        $_args = $args = func_get_args();
+                $pf->setDeps(unserialize($ds));
+                $ds = $pf->getDeps();
+                $info = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package)
+                    . '/' . $release['v'] . '.xml', false, false, $channel);
 
-        $server_channel = $this->config->get('default_channel');
-        $channel = $this->_registry->getChannel($server_channel);
-        if (!PEAR::isError($channel)) {
-            $mirror = $this->config->get('preferred_mirror');
-            if ($channel->getMirror($mirror)) {
-                if ($channel->supports('xmlrpc', $method, $mirror)) {
-                    $server_channel = $server_host = $mirror; // use the preferred mirror
-                    $server_port = $channel->getPort($mirror);
-                } elseif (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not " .
-                        "support xml-rpc method $method");
-                }
-            }
-            if (!isset($server_host)) {
-                if (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not support " .
-                        "xml-rpc method $method");
-                } else {
-                    $server_host = $server_channel;
-                    $server_port = $channel->getPort();
+                if (PEAR::isError($info)) {
+                    continue;
                 }
+
+                $releases[$release['v']] = array(
+                    'doneby' => $info['m'],
+                    'license' => $info['l'],
+                    'summary' => $info['s'],
+                    'description' => $info['d'],
+                    'releasedate' => $info['da'],
+                    'releasenotes' => $info['n'],
+                    'state' => $release['s'],
+                    'deps' => $ds ? $ds : array(),
+                );
             }
         } else {
-            return $this->raiseError("Unknown channel '$server_channel'");
+            $latest = '';
         }
 
-        array_unshift($_args, $server_channel); // cache by channel
-        $this->cache = $this->getCache($_args);
-        $cachettl = $this->config->get('cache_ttl');
-        // If cache is newer than $cachettl seconds, we use the cache!
-        if ($this->cache !== null && $this->cache['age'] < $cachettl) {
-            return $this->cache['content'];
-        }
-        $fp = false;
-        if (extension_loaded("xmlrpc")) {
-            $result = call_user_func_array(array(&$this, 'call_epi'), $args);
-            if (!PEAR::isError($result)) {
-                $this->saveCache($_args, $result);
+        PEAR::popErrorHandling();
+        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
+            if (is_array($pinfo['dp'])) {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']['_content']));
+            } else {
+                $deprecated = array('channel' => (string) $pinfo['dc'],
+                                    'package' => trim($pinfo['dp']));
             }
-            return $result;
-        } elseif (!($fp = fopen('XML/RPC.php', 'r', true))) {
-            return $this->raiseError("For this remote PEAR operation you need to load the xmlrpc extension or install XML_RPC");
-        }
-        include_once 'phar://install-pear-nozlib.phar/' . 'XML/RPC.php';
-        if ($fp) {
-            fclose($fp);
-        }
-
-        array_shift($args);
-        $username = $this->config->get('username');
-        $password = $this->config->get('password');
-        $eargs = array();
-        foreach($args as $arg) {
-            $eargs[] = $this->_encode($arg);
-        }
-        $f = new XML_RPC_Message($method, $eargs);
-        if ($this->cache !== null) {
-            $maxAge = '?maxAge='.$this->cache['lastChange'];
         } else {
-            $maxAge = '';
-        }
-        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-        if ($proxy = parse_url($this->config->get('http_proxy'))) {
-            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
-            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
-                $proxy_host = 'https://' . $proxy_host;
-            }
-            $proxy_port = isset($proxy['port']) ? $proxy['port'] : 8080;
-            $proxy_user = isset($proxy['user']) ? urldecode($proxy['user']) : null;
-            $proxy_pass = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
-        }
-        $shost = $server_host;
-        if ($channel->getSSL()) {
-            $shost = "https://$shost";
-        }
-        $c = new XML_RPC_Client('/' . $channel->getPath('xmlrpc')
-            . $maxAge, $shost, $server_port, $proxy_host, $proxy_port,
-            $proxy_user, $proxy_pass);
-        if ($username && $password) {
-            $c->setCredentials($username, $password);
+            $deprecated = false;
         }
-        if ($this->config->get('verbose') >= 3) {
-            $c->setDebug(1);
-        }
-        $r = $c->send($f);
-        if (!$r) {
-            return $this->raiseError("XML_RPC send failed");
-        }
-        $v = $r->value();
-        if ($e = $r->faultCode()) {
-            if ($e == $GLOBALS['XML_RPC_err']['http_error'] && strstr($r->faultString(), '304 Not Modified') !== false) {
-                return $this->cache['content'];
-            }
-            return $this->raiseError($r->faultString(), $e);
+
+        if (!isset($latest)) {
+            $latest = '';
         }
 
-        $result = XML_RPC_decode($v);
-        $this->saveCache($_args, $result);
-        return $result;
+        return array(
+            'name' => $pinfo['n'],
+            'channel' => $pinfo['c'],
+            'category' => $pinfo['ca']['_content'],
+            'stable' => $latest,
+            'license' => $pinfo['l'],
+            'summary' => $pinfo['s'],
+            'description' => $pinfo['d'],
+            'releases' => $releases,
+            'deprecated' => $deprecated,
+            );
     }
 
-    // }}}
-
-    // {{{ call_epi(method, [args...])
-
-    function call_epi($method)
+    /**
+     * Return an array containing all of the states that are more stable than
+     * or equal to the passed in state
+     *
+     * @param string Release state
+     * @param boolean Determines whether to include $state in the list
+     * @return false|array False if $state is not a valid release state
+     */
+    function betterStates($state, $include = false)
     {
-        if (!extension_loaded("xmlrpc")) {
-            return $this->raiseError("xmlrpc extension is not loaded");
-        }
-        $server_channel = $this->config->get('default_channel');
-        $channel = $this->_registry->getChannel($server_channel);
-        if (!PEAR::isError($channel)) {
-            $mirror = $this->config->get('preferred_mirror');
-            if ($channel->getMirror($mirror)) {
-                if ($channel->supports('xmlrpc', $method, $mirror)) {
-                    $server_channel = $server_host = $mirror; // use the preferred mirror
-                    $server_port = $channel->getPort($mirror);
-                } elseif (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not " .
-                        "support xml-rpc method $method");
-                }
-            }
-            if (!isset($server_host)) {
-                if (!$channel->supports('xmlrpc', $method)) {
-                    return $this->raiseError("Channel $server_channel does not support " .
-                        "xml-rpc method $method");
-                } else {
-                    $server_host = $server_channel;
-                    $server_port = $channel->getPort();
-                }
-            }
-        } else {
-            return $this->raiseError("Unknown channel '$server_channel'");
-        }
-        $params = func_get_args();
-        array_shift($params);
-        $method = str_replace("_", ".", $method);
-        $request = xmlrpc_encode_request($method, $params);
-        if ($http_proxy = $this->config->get('http_proxy')) {
-            $proxy = parse_url($http_proxy);
-            $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
-            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
-                $proxy_host = 'https://' . $proxy_host;
-            }
-            $proxy_port = isset($proxy['port']) ? $proxy['port'] : null;
-            $proxy_user = isset($proxy['user']) ? urldecode($proxy['user']) : null;
-            $proxy_pass = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
-            $fp = @fsockopen($proxy_host, $proxy_port);
-            $use_proxy = true;
-            if ($channel->getSSL()) {
-                $server_host = "https://$server_host";
-            }
-        } else {
-            $use_proxy = false;
-            $ssl = $channel->getSSL();
-            $fp = @fsockopen(($ssl ? 'ssl://' : '') . $server_host, $server_port);
-            if (!$fp) {
-                $server_host = "$ssl$server_host"; // for error-reporting
-            }
-        }
-        if (!$fp && $http_proxy) {
-            return $this->raiseError("PEAR_Remote::call: fsockopen(`$proxy_host', $proxy_port) failed");
-        } elseif (!$fp) {
-            return $this->raiseError("PEAR_Remote::call: fsockopen(`$server_host', $server_port) failed");
-        }
-        $len = strlen($request);
-        $req_headers = "Host: $server_host:$server_port\r\n" .
-             "Content-type: text/xml\r\n" .
-             "Content-length: $len\r\n";
-        $username = $this->config->get('username');
-        $password = $this->config->get('password');
-        if ($username && $password) {
-            $req_headers .= "Cookie: PEAR_USER=$username; PEAR_PW=$password\r\n";
-            $tmp = base64_encode("$username:$password");
-            $req_headers .= "Authorization: Basic $tmp\r\n";
-        }
-        if ($this->cache !== null) {
-            $maxAge = '?maxAge='.$this->cache['lastChange'];
-        } else {
-            $maxAge = '';
+        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
+        $i = array_search($state, $states);
+        if ($i === false) {
+            return false;
         }
 
-        if ($use_proxy && $proxy_host != '' && $proxy_user != '') {
-            $req_headers .= 'Proxy-Authorization: Basic '
-                .base64_encode($proxy_user.':'.$proxy_pass)
-                ."\r\n";
+        if ($include) {
+            $i--;
         }
 
-        if ($this->config->get('verbose') > 3) {
-            print "XMLRPC REQUEST HEADERS:\n";
-            var_dump($req_headers);
-            print "XMLRPC REQUEST BODY:\n";
-            var_dump($request);
-        }
+        return array_slice($states, $i + 1);
+    }
 
-        if ($use_proxy && $proxy_host != '') {
-            $post_string = "POST http://".$server_host;
-            if ($proxy_port > '') {
-                $post_string .= ':'.$server_port;
-            }
-        } else {
-            $post_string = "POST ";
+    /**
+     * Sort releases by version number
+     *
+     * @access private
+     */
+    function _sortReleasesByVersionNumber($a, $b)
+    {
+        if (version_compare($a['v'], $b['v'], '=')) {
+            return 0;
         }
 
-        $path = '/' . $channel->getPath('xmlrpc');
-        fwrite($fp, ($post_string . $path . "$maxAge HTTP/1.0\r\n$req_headers\r\n$request"));
-        $response = '';
-        $line1 = fgets($fp, 2048);
-        if (!preg_match('!^HTTP/[0-9\.]+ (\d+) (.*)!', $line1, $matches)) {
-            return $this->raiseError("PEAR_Remote: invalid HTTP response from XML-RPC server");
-        }
-        switch ($matches[1]) {
-            case "200": // OK
-                break;
-            case "304": // Not Modified
-                return $this->cache['content'];
-            case "401": // Unauthorized
-                if ($username && $password) {
-                    return $this->raiseError("PEAR_Remote ($server_host:$server_port) " .
-                        ": authorization failed", 401);
-                } else {
-                    return $this->raiseError("PEAR_Remote ($server_host:$server_port) " .
-                        ": authorization required, please log in first", 401);
-                }
-            default:
-                return $this->raiseError("PEAR_Remote ($server_host:$server_port) : " .
-                    "unexpected HTTP response", (int)$matches[1], null, null,
-                    "$matches[1] $matches[2]");
-        }
-        while (trim(fgets($fp, 2048)) != ''); // skip rest of headers
-        while ($chunk = fread($fp, 10240)) {
-            $response .= $chunk;
-        }
-        fclose($fp);
-        if ($this->config->get('verbose') > 3) {
-            print "XMLRPC RESPONSE:\n";
-            var_dump($response);
-        }
-        $ret = xmlrpc_decode($response);
-        if (is_array($ret) && isset($ret['__PEAR_TYPE__'])) {
-            if ($ret['__PEAR_TYPE__'] == 'error') {
-                if (isset($ret['__PEAR_CLASS__'])) {
-                    $class = $ret['__PEAR_CLASS__'];
-                } else {
-                    $class = "PEAR_Error";
-                }
-                if ($ret['code']     === '') $ret['code']     = null;
-                if ($ret['message']  === '') $ret['message']  = null;
-                if ($ret['userinfo'] === '') $ret['userinfo'] = null;
-                if (strtolower($class) == 'db_error') {
-                    $ret = $this->raiseError(PEAR::errorMessage($ret['code']),
-                                             $ret['code'], null, null,
-                                             $ret['userinfo']);
-                } else {
-                    $ret = $this->raiseError($ret['message'], $ret['code'],
-                                             null, null, $ret['userinfo']);
-                }
-            }
-        } elseif (is_array($ret) && sizeof($ret) == 1 && isset($ret[0])
-                  && is_array($ret[0]) &&
-                  !empty($ret[0]['faultString']) &&
-                  !empty($ret[0]['faultCode'])) {
-            extract($ret[0]);
-            $faultString = "XML-RPC Server Fault: " .
-                 str_replace("\n", " ", $faultString);
-            return $this->raiseError($faultString, $faultCode);
-        } elseif (is_array($ret) && sizeof($ret) == 2 && !empty($ret['faultString']) &&
-              !empty($ret['faultCode'])) {
-            extract($ret);
-            $faultString = "XML-RPC Server Fault: " .
-                 str_replace("\n", " ", $faultString);
-            return $this->raiseError($faultString, $faultCode);
+        if (version_compare($a['v'], $b['v'], '>')) {
+            return -1;
         }
-        return $ret;
-    }
 
-    // }}}
-
-    // {{{ _encode
-
-    // a slightly extended version of XML_RPC_encode
-    function _encode($php_val)
-    {
-        global $XML_RPC_Boolean, $XML_RPC_Int, $XML_RPC_Double;
-        global $XML_RPC_String, $XML_RPC_Array, $XML_RPC_Struct;
-
-        $type = gettype($php_val);
-        $xmlrpcval = new XML_RPC_Value;
-
-        switch($type) {
-            case "array":
-                reset($php_val);
-                $firstkey = key($php_val);
-                end($php_val);
-                $lastkey = key($php_val);
-                reset($php_val);
-                if ($firstkey === 0 && is_int($lastkey) &&
-                    ($lastkey + 1) == count($php_val)) {
-                    $is_continuous = true;
-                    reset($php_val);
-                    $size = count($php_val);
-                    for ($expect = 0; $expect < $size; $expect++, next($php_val)) {
-                        if (key($php_val) !== $expect) {
-                            $is_continuous = false;
-                            break;
-                        }
-                    }
-                    if ($is_continuous) {
-                        reset($php_val);
-                        $arr = array();
-                        while (list($k, $v) = each($php_val)) {
-                            $arr[$k] = $this->_encode($v);
-                        }
-                        $xmlrpcval->addArray($arr);
-                        break;
-                    }
-                }
-                // fall though if not numerical and continuous
-            case "object":
-                $arr = array();
-                while (list($k, $v) = each($php_val)) {
-                    $arr[$k] = $this->_encode($v);
-                }
-                $xmlrpcval->addStruct($arr);
-                break;
-            case "integer":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_Int);
-                break;
-            case "double":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_Double);
-                break;
-            case "string":
-            case "NULL":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_String);
-                break;
-            case "boolean":
-                $xmlrpcval->addScalar($php_val, $XML_RPC_Boolean);
-                break;
-            case "unknown type":
-            default:
-                return null;
+        if (version_compare($a['v'], $b['v'], '<')) {
+            return 1;
         }
-        return $xmlrpcval;
     }
-
-    // }}}
-
-}
-
-?>
-<?php
-/**
- * PEAR_REST
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: REST.php,v 1.31 2008/05/13 18:03:36 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a1
- */
-
-/**
- * For downloading xml files
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/XMLParser.php';
-
-/**
- * Intelligently retrieve data, following hyperlinks if necessary, and re-directing
- * as well
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
- */
-class PEAR_REST
-{
-    var $config;
-    var $_options;
-    function PEAR_REST(&$config, $options = array())
-    {
-        $this->config = &$config;
-        $this->_options = $options;
-    }
-
-    /**
-     * Retrieve REST data, but always retrieve the local cache if it is available.
-     *
-     * This is useful for elements that should never change, such as information on a particular
-     * release
-     * @param string full URL to this resource
-     * @param array|false contents of the accept-encoding header
-     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
-     *                    parsed using PEAR_XMLParser
-     * @return string|array
-     */
-    function retrieveCacheFirst($url, $accept = false, $forcestring = false, $channel = false)
-    {
-        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cachefile';
-        if (file_exists($cachefile)) {
-            return unserialize(implode('', file($cachefile)));
-        }
-        return $this->retrieveData($url, $accept, $forcestring, $channel);
-    }
-
-    /**
-     * Retrieve a remote REST resource
-     * @param string full URL to this resource
-     * @param array|false contents of the accept-encoding header
-     * @param boolean     if true, xml will be returned as a string, otherwise, xml will be
-     *                    parsed using PEAR_XMLParser
-     * @return string|array
-     */
-    function retrieveData($url, $accept = false, $forcestring = false, $channel = false)
-    {
-        $cacheId = $this->getCacheId($url);
-        if ($ret = $this->useLocalCache($url, $cacheId)) {
-            return $ret;
-        }
-        if (!isset($this->_options['offline'])) {
-            $trieddownload = true;
-            $file = $this->downloadHttp($url, $cacheId ? $cacheId['lastChange'] : false, $accept, $channel);
-        } else {
-            $trieddownload = false;
-            $file = false;
-        }
-        if (PEAR::isError($file)) {
-            if ($file->getCode() == -9276) {
-                $trieddownload = false;
-                $file = false; // use local copy if available on socket connect error
-            } else {
-                return $file;
-            }
-        }
-        if (!$file) {
-            $ret = $this->getCache($url);
-            if (!PEAR::isError($ret) && $trieddownload) {
-                // reset the age of the cache if the server says it was unmodified
-                $this->saveCache($url, $ret, null, true, $cacheId);
-            }
-            return $ret;
-        }
-        if (is_array($file)) {
-            $headers = $file[2];
-            $lastmodified = $file[1];
-            $content = $file[0];
-        } else {
-            $content = $file;
-            $lastmodified = false;
-            $headers = array();
-        }
-        if ($forcestring) {
-            $this->saveCache($url, $content, $lastmodified, false, $cacheId);
-            return $content;
-        }
-        if (isset($headers['content-type'])) {
-            switch ($headers['content-type']) {
-                case 'text/xml' :
-                case 'application/xml' :
-                    $parser = new PEAR_XMLParser;
-                    PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-                    $err = $parser->parse($content);
-                    PEAR::popErrorHandling();
-                    if (PEAR::isError($err)) {
-                        return PEAR::raiseError('Invalid xml downloaded from "' . $url . '": ' .
-                            $err->getMessage());
-                    }
-                    $content = $parser->getData();
-                case 'text/html' :
-                default :
-                    // use it as a string
-            }
-        } else {
-            // assume XML
-            $parser = new PEAR_XMLParser;
-            $parser->parse($content);
-            $content = $parser->getData();
-        }
-        $this->saveCache($url, $content, $lastmodified, false, $cacheId);
-        return $content;
-    }
-
-    function useLocalCache($url, $cacheid = null)
-    {
-        if ($cacheid === null) {
-            $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-                md5($url) . 'rest.cacheid';
-            if (file_exists($cacheidfile)) {
-                $cacheid = unserialize(implode('', file($cacheidfile)));
-            } else {
-                return false;
-            }
-        }
-        $cachettl = $this->config->get('cache_ttl');
-        // If cache is newer than $cachettl seconds, we use the cache!
-        if (time() - $cacheid['age'] < $cachettl) {
-            return $this->getCache($url);
-        }
-        return false;
-    }
-
-    function getCacheId($url)
-    {
-        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cacheid';
-        if (file_exists($cacheidfile)) {
-            $ret = unserialize(implode('', file($cacheidfile)));
-            return $ret;
-        } else {
-            return false;
-        }
-    }
-
-    function getCache($url)
-    {
-        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cachefile';
-        if (file_exists($cachefile)) {
-            return unserialize(implode('', file($cachefile)));
-        } else {
-            return PEAR::raiseError('No cached content available for "' . $url . '"');
-        }
-    }
-
-    /**
-     * @param string full URL to REST resource
-     * @param string original contents of the REST resource
-     * @param array  HTTP Last-Modified and ETag headers
-     * @param bool   if true, then the cache id file should be regenerated to
-     *               trigger a new time-to-live value
-     */
-    function saveCache($url, $contents, $lastmodified, $nochange = false, $cacheid = null)
-    {
-        $cacheidfile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cacheid';
-        $cachefile = $this->config->get('cache_dir') . DIRECTORY_SEPARATOR .
-            md5($url) . 'rest.cachefile';
-        if ($cacheid === null && $nochange) {
-            $cacheid = unserialize(implode('', file($cacheidfile)));
-        }
-
-        $fp = @fopen($cacheidfile, 'wb');
-        if (!$fp) {
-            $cache_dir = $this->config->get('cache_dir');
-            if (!is_dir($cache_dir)) {
-                System::mkdir(array('-p', $cache_dir));
-                $fp = @fopen($cacheidfile, 'wb');
-                if (!$fp) {
-                    return false;
-                }
-            } else {
-                return false;
-            }
-        }
-
-        if ($nochange) {
-            fwrite($fp, serialize(array(
-                'age'        => time(),
-                'lastChange' => $cacheid['lastChange'],
-                )));
-            fclose($fp);
-            return true;
-        } else {
-            fwrite($fp, serialize(array(
-                'age'        => time(),
-                'lastChange' => $lastmodified,
-                )));
-        }
-        fclose($fp);
-        $fp = @fopen($cachefile, 'wb');
-        if (!$fp) {
-            if (file_exists($cacheidfile)) {
-                @unlink($cacheidfile);
-            }
-            return false;
-        }
-        fwrite($fp, serialize($contents));
-        fclose($fp);
-        return true;
-    }
-
-    /**
-     * Efficiently Download a file through HTTP.  Returns downloaded file as a string in-memory
-     * This is best used for small files
-     *
-     * If an HTTP proxy has been configured (http_proxy PEAR_Config
-     * setting), the proxy will be used.
-     *
-     * @param string  $url       the URL to download
-     * @param string  $save_dir  directory to save file in
-     * @param false|string|array $lastmodified header values to check against for caching
-     *                           use false to return the header values from this download
-     * @param false|array $accept Accept headers to send
-     * @return string|array  Returns the contents of the downloaded file or a PEAR
-     *                       error on failure.  If the error is caused by
-     *                       socket-related errors, the error object will
-     *                       have the fsockopen error code available through
-     *                       getCode().  If caching is requested, then return the header
-     *                       values.
-     *
-     * @access public
-     */
-    function downloadHttp($url, $lastmodified = null, $accept = false, $channel = false)
-    {
-        $info = parse_url($url);
-        if (!isset($info['scheme']) || !in_array($info['scheme'], array('http', 'https'))) {
-            return PEAR::raiseError('Cannot download non-http URL "' . $url . '"');
-        }
-        if (!isset($info['host'])) {
-            return PEAR::raiseError('Cannot download from non-URL "' . $url . '"');
-        } else {
-            $host = $info['host'];
-            if (!array_key_exists('port', $info)) {
-                $info['port'] = null;
-            }
-            if (!array_key_exists('path', $info)) {
-                $info['path'] = null;
-            }
-            $port = $info['port'];
-            $path = $info['path'];
-        }
-        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
-        if ($this->config->get('http_proxy')&&
-              $proxy = parse_url($this->config->get('http_proxy'))) {
-            $proxy_host = isset($proxy['host']) ? $proxy['host'] : null;
-            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {
-                $proxy_host = 'ssl://' . $proxy_host;
-            }
-            $proxy_port = isset($proxy['port']) ? $proxy['port'] : 8080;
-            $proxy_user = isset($proxy['user']) ? urldecode($proxy['user']) : null;
-            $proxy_pass = isset($proxy['pass']) ? urldecode($proxy['pass']) : null;
-        }
-        if (empty($port)) {
-            if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $port = 443;
-            } else {
-                $port = 80;
-            }
-        }
-        If (isset($proxy['host'])) {
-            $request = "GET $url HTTP/1.1\r\n";
-        } else {
-            $request = "GET $path HTTP/1.1\r\n";
-        }
-        $request .= "Host: $host:$port\r\n";
-
-        $ifmodifiedsince = '';
-        if (is_array($lastmodified)) {
-            if (isset($lastmodified['Last-Modified'])) {
-                $ifmodifiedsince = 'If-Modified-Since: ' . $lastmodified['Last-Modified'] . "\r\n";
-            }
-            if (isset($lastmodified['ETag'])) {
-                $ifmodifiedsince .= "If-None-Match: $lastmodified[ETag]\r\n";
-            }
-        } else {
-            $ifmodifiedsince = ($lastmodified ? "If-Modified-Since: $lastmodified\r\n" : '');
-        }
-        $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.7.2/PHP/" . PHP_VERSION . "\r\n";
-        $username = $this->config->get('username', null, $channel);
-        $password = $this->config->get('password', null, $channel);
-        if ($username && $password) {
-            $tmp = base64_encode("$username:$password");
-            $request .= "Authorization: Basic $tmp\r\n";
-        }
-        if ($proxy_host != '' && $proxy_user != '') {
-            $request .= 'Proxy-Authorization: Basic ' .
-                base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
-        }
-        if ($accept) {
-            $request .= 'Accept: ' . implode(', ', $accept) . "\r\n";
-        }
-        $request .= "Accept-Encoding:\r\n";
-        $request .= "Connection: close\r\n";
-        $request .= "\r\n";
-        if ($proxy_host != '') {
-            $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr, 15);
-            if (!$fp) {
-                return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr",
-                    -9276);
-            }
-        } else {
-            if (isset($info['scheme']) && $info['scheme'] == 'https') {
-                $host = 'ssl://' . $host;
-            }
-            $fp = @fsockopen($host, $port, $errno, $errstr);
-            if (!$fp) {
-                return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
-            }
-        }
-        fwrite($fp, $request);
-        $headers = array();
-        while (trim($line = fgets($fp, 1024))) {
-            if (preg_match('/^([^:]+):\s+(.*)\s*\\z/', $line, $matches)) {
-                $headers[strtolower($matches[1])] = trim($matches[2]);
-            } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
-                if ($matches[1] == 304 && ($lastmodified || ($lastmodified === false))) {
-                    return false;
-                }
-                if ($matches[1] != 200) {
-                    return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)", (int) $matches[1]);
-                }
-            }
-        }
-        if (isset($headers['content-length'])) {
-            $length = $headers['content-length'];
-        } else {
-            $length = -1;
-        }
-        $data = '';
-        while ($chunk = @fread($fp, 8192)) {
-            $data .= $chunk;
-        }
-        fclose($fp);
-        if ($lastmodified === false || $lastmodified) {
-            if (isset($headers['etag'])) {
-                $lastmodified = array('ETag' => $headers['etag']);
-            }
-            if (isset($headers['last-modified'])) {
-                if (is_array($lastmodified)) {
-                    $lastmodified['Last-Modified'] = $headers['last-modified'];
-                } else {
-                    $lastmodified = $headers['last-modified'];
-                }
-            }
-            return array($data, $lastmodified, $headers);
-        }
-        return $data;
-    }
-}
-?>
-<?php
-/**
- * PEAR_REST_10
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: 10.php,v 1.53 2008/04/11 01:16:40 dufuz Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a12
- */
-
-/**
- * For downloading REST xml/txt files
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/REST.php';
-
-/**
- * Implement REST 1.0
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a12
- */
-class PEAR_REST_10
-{
-    /**
-     * @var PEAR_REST
-     */
-    var $_rest;
-    function PEAR_REST_10($config, $options = array())
-    {
-        $this->_rest = &new PEAR_REST($config, $options);
-    }
-
-    /**
-     * Retrieve information about a remote package to be downloaded from a REST server
-     *
-     * @param string $base The uri to prepend to all REST calls
-     * @param array $packageinfo an array of format:
-     * <pre>
-     *  array(
-     *   'package' => 'packagename',
-     *   'channel' => 'channelname',
-     *  ['state' => 'alpha' (or valid state),]
-     *  -or-
-     *  ['version' => '1.whatever']
-     * </pre>
-     * @param string $prefstate Current preferred_state config variable value
-     * @param bool $installed the installed version of this package to compare against
-     * @return array|false|PEAR_Error see {@link _returnDownloadURL()}
-     */
-    function getDownloadURL($base, $packageinfo, $prefstate, $installed, $channel = false)
-    {
-        $channel = $packageinfo['channel'];
-        $package = $packageinfo['package'];
-        $states = $this->betterStates($prefstate, true);
-        if (!$states) {
-            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
-        }
-        $state   = isset($packageinfo['state'])   ? $packageinfo['state']   : null;
-        $version = isset($packageinfo['version']) ? $packageinfo['version'] : null;
-        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
-        if (PEAR::isError($info)) {
-            return PEAR::raiseError('No releases available for package "' .
-                $channel . '/' . $package . '"');
-        }
-        if (!isset($info['r'])) {
-            return false;
-        }
-        $release = $found = false;
-        if (!is_array($info['r']) || !isset($info['r'][0])) {
-            $info['r'] = array($info['r']);
-        }
-        foreach ($info['r'] as $release) {
-            if (!isset($this->_rest->_options['force']) && ($installed &&
-                  version_compare($release['v'], $installed, '<'))) {
-                continue;
-            }
-            if (isset($state)) {
-                // try our preferred state first
-                if ($release['s'] == $state) {
-                    $found = true;
-                    break;
-                }
-                // see if there is something newer and more stable
-                // bug #7221
-                if (in_array($release['s'], $this->betterStates($state), true)) {
-                    $found = true;
-                    break;
-                }
-            } elseif (isset($version)) {
-                if ($release['v'] == $version) {
-                    $found = true;
-                    break;
-                }
-            } else {
-                if (in_array($release['s'], $states)) {
-                    $found = true;
-                    break;
-                }
-            }
-        }
-        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
-    }
-
-    function getDepDownloadURL($base, $xsdversion, $dependency, $deppackage,
-                               $prefstate = 'stable', $installed = false, $channel = false)
-    {
-        $channel = $dependency['channel'];
-        $package = $dependency['name'];
-        $states = $this->betterStates($prefstate, true);
-        if (!$states) {
-            return PEAR::raiseError('"' . $prefstate . '" is not a valid state');
-        }
-        $state   = isset($dependency['state'])   ? $dependency['state']   : null;
-        $version = isset($dependency['version']) ? $dependency['version'] : null;
-        $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) . '/allreleases.xml', false, false, $channel);
-        if (PEAR::isError($info)) {
-            return PEAR::raiseError('Package "' . $deppackage['channel'] . '/' . $deppackage['package']
-                . '" dependency "' . $channel . '/' . $package . '" has no releases');
-        }
-        if (!is_array($info) || !isset($info['r'])) {
-            return false;
-        }
-        $exclude = array();
-        $min = $max = $recommended = false;
-        if ($xsdversion == '1.0') {
-            switch ($dependency['rel']) {
-                case 'ge' :
-                    $min = $dependency['version'];
-                break;
-                case 'gt' :
-                    $min = $dependency['version'];
-                    $exclude = array($dependency['version']);
-                break;
-                case 'eq' :
-                    $recommended = $dependency['version'];
-                break;
-                case 'lt' :
-                    $max = $dependency['version'];
-                    $exclude = array($dependency['version']);
-                break;
-                case 'le' :
-                    $max = $dependency['version'];
-                break;
-                case 'ne' :
-                    $exclude = array($dependency['version']);
-                break;
-            }
-        } else {
-            $min = isset($dependency['min']) ? $dependency['min'] : false;
-            $max = isset($dependency['max']) ? $dependency['max'] : false;
-            $recommended = isset($dependency['recommended']) ?
-                $dependency['recommended'] : false;
-            if (isset($dependency['exclude'])) {
-                if (!isset($dependency['exclude'][0])) {
-                    $exclude = array($dependency['exclude']);
-                }
-            }
-        }
-        $release = $found = false;
-        if (!is_array($info['r']) || !isset($info['r'][0])) {
-            $info['r'] = array($info['r']);
-        }
-        foreach ($info['r'] as $release) {
-            if (!isset($this->_rest->_options['force']) && ($installed &&
-                  version_compare($release['v'], $installed, '<'))) {
-                continue;
-            }
-            if (in_array($release['v'], $exclude)) { // skip excluded versions
-                continue;
-            }
-            // allow newer releases to say "I'm OK with the dependent package"
-            if ($xsdversion == '2.0' && isset($release['co'])) {
-                if (!is_array($release['co']) || !isset($release['co'][0])) {
-                    $release['co'] = array($release['co']);
-                }
-                foreach ($release['co'] as $entry) {
-                    if (isset($entry['x']) && !is_array($entry['x'])) {
-                        $entry['x'] = array($entry['x']);
-                    } elseif (!isset($entry['x'])) {
-                        $entry['x'] = array();
-                    }
-                    if ($entry['c'] == $deppackage['channel'] &&
-                          strtolower($entry['p']) == strtolower($deppackage['package']) &&
-                          version_compare($deppackage['version'], $entry['min'], '>=') &&
-                          version_compare($deppackage['version'], $entry['max'], '<=') &&
-                          !in_array($release['v'], $entry['x'])) {
-                        $recommended = $release['v'];
-                        break;
-                    }
-                }
-            }
-            if ($recommended) {
-                if ($release['v'] != $recommended) { // if we want a specific
-                    // version, then skip all others
-                    continue;
-                } else {
-                    if (!in_array($release['s'], $states)) {
-                        // the stability is too low, but we must return the
-                        // recommended version if possible
-                        return $this->_returnDownloadURL($base, $package, $release, $info, true, false, $channel);
-                    }
-                }
-            }
-            if ($min && version_compare($release['v'], $min, 'lt')) { // skip too old versions
-                continue;
-            }
-            if ($max && version_compare($release['v'], $max, 'gt')) { // skip too new versions
-                continue;
-            }
-            if ($installed && version_compare($release['v'], $installed, '<')) {
-                continue;
-            }
-            if (in_array($release['s'], $states)) { // if in the preferred state...
-                $found = true; // ... then use it
-                break;
-            }
-        }
-        return $this->_returnDownloadURL($base, $package, $release, $info, $found, false, $channel);
-    }
-
-    /**
-     * Take raw data and return the array needed for processing a download URL
-     *
-     * @param string $base REST base uri
-     * @param string $package Package name
-     * @param array $release an array of format array('v' => version, 's' => state)
-     *                       describing the release to download
-     * @param array $info list of all releases as defined by allreleases.xml
-     * @param bool|null $found determines whether the release was found or this is the next
-     *                    best alternative.  If null, then versions were skipped because
-     *                    of PHP dependency
-     * @return array|PEAR_Error
-     * @access private
-     */
-    function _returnDownloadURL($base, $package, $release, $info, $found, $phpversion = false, $channel = false)
-    {
-        if (!$found) {
-            $release = $info['r'][0];
-        }
-        $pinfo = $this->_rest->retrieveCacheFirst($base . 'p/' . strtolower($package) . '/' .
-            'info.xml', false, false, $channel);
-        if (PEAR::isError($pinfo)) {
-            return PEAR::raiseError('Package "' . $package .
-                '" does not have REST info xml available');
-        }
-        $releaseinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
-            $release['v'] . '.xml', false, false, $channel);
-        if (PEAR::isError($releaseinfo)) {
-            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
-                '" does not have REST xml available');
-        }
-        $packagexml = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
-            'deps.' . $release['v'] . '.txt', false, true, $channel);
-        if (PEAR::isError($packagexml)) {
-            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .
-                '" does not have REST dependency information available');
-        }
-        $packagexml = unserialize($packagexml);
-        if (!$packagexml) {
-            $packagexml = array();
-        }
-        $allinfo = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-            '/allreleases.xml', false, false, $channel);
-        if (!is_array($allinfo['r']) || !isset($allinfo['r'][0])) {
-            $allinfo['r'] = array($allinfo['r']);
-        }
-        $compatible = false;
-        foreach ($allinfo['r'] as $release) {
-            if ($release['v'] != $releaseinfo['v']) {
-                continue;
-            }
-            if (!isset($release['co'])) {
-                break;
-            }
-            $compatible = array();
-            if (!is_array($release['co']) || !isset($release['co'][0])) {
-                $release['co'] = array($release['co']);
-            }
-            foreach ($release['co'] as $entry) {
-                $comp = array();
-                $comp['name'] = $entry['p'];
-                $comp['channel'] = $entry['c'];
-                $comp['min'] = $entry['min'];
-                $comp['max'] = $entry['max'];
-                if (isset($entry['x']) && !is_array($entry['x'])) {
-                    $comp['exclude'] = $entry['x'];
-                }
-                $compatible[] = $comp;
-            }
-            if (count($compatible) == 1) {
-                $compatible = $compatible[0];
-            }
-            break;
-        }
-        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
-            if (is_array($pinfo['dp'])) {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']['_content']));
-            } else {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']));
-            }
-        } else {
-            $deprecated = false;
-        }
-        if ($found) {
-            return
-                array('version' => $releaseinfo['v'],
-                      'info' => $packagexml,
-                      'package' => $releaseinfo['p']['_content'],
-                      'stability' => $releaseinfo['st'],
-                      'url' => $releaseinfo['g'],
-                      'compatible' => $compatible,
-                      'deprecated' => $deprecated,
-                );
-        } else {
-            return
-                array('version' => $releaseinfo['v'],
-                      'package' => $releaseinfo['p']['_content'],
-                      'stability' => $releaseinfo['st'],
-                      'info' => $packagexml,
-                      'compatible' => $compatible,
-                      'deprecated' => $deprecated,
-                      'php' => $phpversion
-                );
-        }
-    }
-
-    function listPackages($base, $channel = false)
-    {
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return array();
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-        return $packagelist['p'];
-    }
-
-    /**
-     * List all categories of a REST server
-     *
-     * @param string $base base URL of the server
-     * @return array of categorynames
-     */
-    function listCategories($base, $channel = false)
-    {
-        $categories = array();
-
-        // c/categories.xml does not exist;
-        // check for every package its category manually
-        // This is SLOOOWWWW : ///
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            $ret = array();
-            return $ret;
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-
-        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        foreach ($packagelist['p'] as $package) {
-                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
-                if (PEAR::isError($inf)) {
-                    PEAR::popErrorHandling();
-                    return $inf;
-                }
-                $cat = $inf['ca']['_content'];
-                if (!isset($categories[$cat])) {
-                    $categories[$cat] = $inf['ca'];
-                }
-        }
-        return array_values($categories);
-    }
-
-    /**
-     * List a category of a REST server
-     *
-     * @param string $base base URL of the server
-     * @param string $category name of the category
-     * @param boolean $info also download full package info
-     * @return array of packagenames
-     */
-    function listCategory($base, $category, $info = false, $channel = false)
-    {
-        // gives '404 Not Found' error when category doesn't exist
-        $packagelist = $this->_rest->retrieveData($base.'c/'.urlencode($category).'/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return array();
-        }
-        if (!is_array($packagelist['p']) ||
-            !isset($packagelist['p'][0])) { // only 1 pkg
-            $packagelist = array($packagelist['p']);
-        } else {
-            $packagelist = $packagelist['p'];
-        }
-
-        if ($info == true) {
-            // get individual package info
-            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-            foreach ($packagelist as $i => $packageitem) {
-                $url = sprintf('%s'.'r/%s/latest.txt',
-                        $base,
-                        strtolower($packageitem['_content']));
-                $version = $this->_rest->retrieveData($url, false, false, $channel);
-                if (PEAR::isError($version)) {
-                    break; // skipit
-                }
-                $url = sprintf('%s'.'r/%s/%s.xml',
-                        $base,
-                        strtolower($packageitem['_content']),
-                        $version);
-                $info = $this->_rest->retrieveData($url, false, false, $channel);
-                if (PEAR::isError($info)) {
-                    break; // skipit
-                }
-                $packagelist[$i]['info'] = $info;
-            }
-            PEAR::popErrorHandling();
-        }
-
-        return $packagelist;
-    }
-
-
-    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false, $channel = false)
-    {
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        if ($this->_rest->config->get('verbose') > 0) {
-            $ui = &PEAR_Frontend::singleton();
-            $ui->log('Retrieving data...0%', false);
-        }
-        $ret = array();
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return $ret;
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-
-        // only search-packagename = quicksearch !
-        if ($searchpackage && (!$searchsummary || empty($searchpackage))) {
-            $newpackagelist = array();
-            foreach ($packagelist['p'] as $package) {
-                if (!empty($searchpackage) && stristr($package, $searchpackage) !== false) {
-                    $newpackagelist[] = $package;
-                }
-            }
-            $packagelist['p'] = $newpackagelist;
-        }
-        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        $next = .1;
-        foreach ($packagelist['p'] as $progress => $package) {
-            if ($this->_rest->config->get('verbose') > 0) {
-                if ($progress / count($packagelist['p']) >= $next) {
-                    if ($next == .5) {
-                        $ui->log('50%', false);
-                    } else {
-                        $ui->log('.', false);
-                    }
-                    $next += .1;
-                }
-            }
-            if ($basic) { // remote-list command
-                if ($dostable) {
-                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                        '/stable.txt', false, false, $channel);
-                } else {
-                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                        '/latest.txt', false, false, $channel);
-                }
-                if (PEAR::isError($latest)) {
-                    $latest = false;
-                }
-                $info = array('stable' => $latest);
-            } else { // list-all command
-                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
-                if (PEAR::isError($inf)) {
-                    PEAR::popErrorHandling();
-                    return $inf;
-                }
-                if ($searchpackage) {
-                    $found = (!empty($searchpackage) && stristr($package, $searchpackage) !== false);
-                    if (!$found && !(isset($searchsummary) && !empty($searchsummary)
-                        && (stristr($inf['s'], $searchsummary) !== false
-                            || stristr($inf['d'], $searchsummary) !== false)))
-                    {
-                        continue;
-                    };
-                }
-                $releases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                    '/allreleases.xml', false, false, $channel);
-                if (PEAR::isError($releases)) {
-                    continue;
-                }
-                if (!isset($releases['r'][0])) {
-                    $releases['r'] = array($releases['r']);
-                }
-                unset($latest);
-                unset($unstable);
-                unset($stable);
-                unset($state);
-                foreach ($releases['r'] as $release) {
-                    if (!isset($latest)) {
-                        if ($dostable && $release['s'] == 'stable') {
-                            $latest = $release['v'];
-                            $state = 'stable';
-                        }
-                        if (!$dostable) {
-                            $latest = $release['v'];
-                            $state = $release['s'];
-                        }
-                    }
-                    if (!isset($stable) && $release['s'] == 'stable') {
-                        $stable = $release['v'];
-                        if (!isset($unstable)) {
-                            $unstable = $stable;
-                        }
-                    }
-                    if (!isset($unstable) && $release['s'] != 'stable') {
-                        $latest = $unstable = $release['v'];
-                        $state = $release['s'];
-                    }
-                    if (isset($latest) && !isset($state)) {
-                        $state = $release['s'];
-                    }
-                    if (isset($latest) && isset($stable) && isset($unstable)) {
-                        break;
-                    }
-                }
-                $deps = array();
-                if (!isset($unstable)) {
-                    $unstable = false;
-                    $state = 'stable';
-                    if (isset($stable)) {
-                        $latest = $unstable = $stable;
-                    }
-                } else {
-                    $latest = $unstable;
-                }
-                if (!isset($latest)) {
-                    $latest = false;
-                }
-                if ($latest) {
-                    $d = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
-                        $latest . '.txt', false, false, $channel);
-                    if (!PEAR::isError($d)) {
-                        $d = unserialize($d);
-                        if ($d) {
-                            if (isset($d['required'])) {
-                                if (!class_exists('PEAR_PackageFile_v2')) {
-                                    require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
-                                }
-                                if (!isset($pf)) {
-                                    $pf = new PEAR_PackageFile_v2;
-                                }
-                                $pf->setDeps($d);
-                                $tdeps = $pf->getDeps();
-                            } else {
-                                $tdeps = $d;
-                            }
-                            foreach ($tdeps as $dep) {
-                                if ($dep['type'] !== 'pkg') {
-                                    continue;
-                                }
-                                $deps[] = $dep;
-                            }
-                        }
-                    }
-                }
-                if (!isset($stable)) {
-                    $stable = '-n/a-';
-                }
-                if (!$searchpackage) {
-                    $info = array('stable' => $latest, 'summary' => $inf['s'], 'description' =>
-                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
-                        'unstable' => $unstable, 'state' => $state);
-                } else {
-                    $info = array('stable' => $stable, 'summary' => $inf['s'], 'description' =>
-                        $inf['d'], 'deps' => $deps, 'category' => $inf['ca']['_content'],
-                        'unstable' => $unstable, 'state' => $state);
-                }
-            }
-            $ret[$package] = $info;
-        }
-        PEAR::popErrorHandling();
-        return $ret;
-    }
-
-    function listLatestUpgrades($base, $pref_state, $installed, $channel, &$reg)
-    {
-        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml', false, false, $channel);
-        if (PEAR::isError($packagelist)) {
-            return $packagelist;
-        }
-        $ret = array();
-        if (!is_array($packagelist) || !isset($packagelist['p'])) {
-            return $ret;
-        }
-        if (!is_array($packagelist['p'])) {
-            $packagelist['p'] = array($packagelist['p']);
-        }
-        foreach ($packagelist['p'] as $package) {
-            if (!isset($installed[strtolower($package)])) {
-                continue;
-            }
-            $inst_version = $reg->packageInfo($package, 'version', $channel);
-            $inst_state = $reg->packageInfo($package, 'release_state', $channel);
-            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-            $info = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-                '/allreleases.xml', false, false, $channel);
-            PEAR::popErrorHandling();
-            if (PEAR::isError($info)) {
-                continue; // no remote releases
-            }
-            if (!isset($info['r'])) {
-                continue;
-            }
-            $found = false;
-            $release = false;
-            if (!is_array($info['r']) || !isset($info['r'][0])) {
-                $info['r'] = array($info['r']);
-            }
-            // $info['r'] is sorted by version number
-            foreach ($info['r'] as $release) {
-                if ($inst_version && version_compare($release['v'], $inst_version, '<=')) {
-                    // not newer than the one installed
-                    break;
-                }
-
-                // new version > installed version
-                if (!$pref_state) {
-                    // every state is a good state
-                    $found = true;
-                    break;
-                } else {
-                    $new_state = $release['s'];
-                    // if new state >= installed state: go
-                    if (in_array($new_state, $this->betterStates($inst_state, true))) {
-                        $found = true;
-                        break;
-                    } else {
-                        // only allow to lower the state of package,
-                        // if new state >= preferred state: go
-                        if (in_array($new_state, $this->betterStates($pref_state, true))) {
-                            $found = true;
-                            break;
-                        }
-                    }
-                }
-            }
-            if (!$found) {
-                continue;
-            }
-            $relinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .
-                $release['v'] . '.xml', false, false, $channel);
-            if (PEAR::isError($relinfo)) {
-                return $relinfo;
-            }
-            $ret[$package] = array(
-                    'version' => $release['v'],
-                    'state' => $release['s'],
-                    'filesize' => $relinfo['f'],
-                );
-        }
-        return $ret;
-    }
-
-    function packageInfo($base, $package, $channel = false)
-    {
-        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-        $pinfo = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml', false, false, $channel);
-        if (PEAR::isError($pinfo)) {
-            PEAR::popErrorHandling();
-            return PEAR::raiseError('Unknown package: "' . $package . '" (Debug: ' .
-                $pinfo->getMessage() . ')');
-        }
-        $releases = array();
-        $allreleases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .
-            '/allreleases.xml', false, false, $channel);
-        if (!PEAR::isError($allreleases)) {
-            if (!class_exists('PEAR_PackageFile_v2')) {
-                require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/PackageFile/v2.php';
-            }
-            if (!is_array($allreleases['r']) || !isset($allreleases['r'][0])) {
-                $allreleases['r'] = array($allreleases['r']);
-            }
-            $pf = new PEAR_PackageFile_v2;
-            foreach ($allreleases['r'] as $release) {
-                $ds = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/deps.' .
-                    $release['v'] . '.txt', false, false, $channel);
-                if (PEAR::isError($ds)) {
-                    continue;
-                }
-                if (!isset($latest)) {
-                    $latest = $release['v'];
-                }
-                $pf->setDeps(unserialize($ds));
-                $ds = $pf->getDeps();
-                $info = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package)
-                    . '/' . $release['v'] . '.xml', false, false, $channel);
-                if (PEAR::isError($info)) {
-                    continue;
-                }
-                $releases[$release['v']] = array(
-                    'doneby' => $info['m'],
-                    'license' => $info['l'],
-                    'summary' => $info['s'],
-                    'description' => $info['d'],
-                    'releasedate' => $info['da'],
-                    'releasenotes' => $info['n'],
-                    'state' => $release['s'],
-                    'deps' => $ds ? $ds : array(),
-                );
-            }
-        } else {
-            $latest = '';
-        }
-        PEAR::popErrorHandling();
-        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {
-            if (is_array($pinfo['dp'])) {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']['_content']));
-            } else {
-                $deprecated = array('channel' => (string) $pinfo['dc'],
-                                    'package' => trim($pinfo['dp']));
-            }
-        } else {
-            $deprecated = false;
-        }
-        return array(
-            'name' => $pinfo['n'],
-            'channel' => $pinfo['c'],
-            'category' => $pinfo['ca']['_content'],
-            'stable' => $latest,
-            'license' => $pinfo['l'],
-            'summary' => $pinfo['s'],
-            'description' => $pinfo['d'],
-            'releases' => $releases,
-            'deprecated' => $deprecated,
-            );
-    }
-
-    /**
-     * Return an array containing all of the states that are more stable than
-     * or equal to the passed in state
-     *
-     * @param string Release state
-     * @param boolean Determines whether to include $state in the list
-     * @return false|array False if $state is not a valid release state
-     */
-    function betterStates($state, $include = false)
-    {
-        static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
-        $i = array_search($state, $states);
-        if ($i === false) {
-            return false;
-        }
-        if ($include) {
-            $i--;
-        }
-        return array_slice($states, $i + 1);
-    }
-}
-?><?php
+}<?php
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
 require_once 'phar://install-pear-nozlib.phar/' . 'System.php';
 require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Config.php';
@@ -86457,6 +85224,7 @@ class PEAR_Start extends PEAR
             'Console_Getopt',
             'PEAR',
             'Structures_Graph',
+            'XML_Util',
         );
     var $local_dir = array();
     var $origpwd;
@@ -86557,7 +85325,7 @@ class PEAR_Start extends PEAR
             if ($this->php_bin && !is_file($this->php_bin . $phpexe)) {
                 $this->php_bin = '';
             } else {
-                if (!ereg(":", $this->php_bin)) {
+                if (strpos($this->php_bin, ':') === 0) {
                     $this->php_bin = getcwd() . DIRECTORY_SEPARATOR . $this->php_bin;
                 }
             }
@@ -86667,9 +85435,9 @@ class PEAR_Start extends PEAR
             if (!$ok) { // This should not happen, really ;)
                 $this->bail('chdir ' . $this->ptmp . ' ... failed');
             }
-    
+
             print "ok\n";
-    
+
             // Adjust TEMPDIR envvars
             if (!isset($_ENV)) {
                 $_ENV = array();
@@ -86726,7 +85494,7 @@ class PEAR_Start extends PEAR
             }
             $this->PEARConfig->set($var, $this->$var);
         }
-        
+
         $this->PEARConfig->store();
 //       $this->PEARConfig->set('verbose', 6);
         print "Configuration written to $this->pear_conf...\n";
@@ -86756,11 +85524,11 @@ class PEAR_Start extends PEAR
 
         foreach ($this->config as $var) {
             $dir = $this->$var;
-        
+
             if (!preg_match('/_dir\\z/', $var)) {
                 continue;
             }
-        
+
             if (!@is_dir($dir)) {
                 if (!System::mkDir(array('-p', $dir))) {
                     $root = OS_WINDOWS ? 'administrator' : 'root';
@@ -86786,7 +85554,7 @@ Run this script as $root or pick another location.\n");
         if ($pathIni && is_file($pathIni)) {
             return $pathIni;
         }
-    
+
         // Oh well, we can keep this too :)
         // I dunno if get_cfg_var() is safe on every OS
         if (OS_WINDOWS) {
@@ -86806,11 +85574,11 @@ Run this script as $root or pick another location.\n");
         } else {
             $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini';
         }
-    
+
         if (@is_file($php_ini)) {
             return $php_ini;
         }
-    
+
         // We re running in hackz&troubles :)
         ob_implicit_flush(false);
         ob_start();
@@ -86818,7 +85586,7 @@ Run this script as $root or pick another location.\n");
         $strInfo = ob_get_contents();
         ob_end_clean();
         ob_implicit_flush(true);
-    
+
         if (php_sapi_name() != 'cli') {
             $strInfo = strip_tags($strInfo,'<td>');
             $arrayInfo = explode("</td>", $strInfo );
@@ -86827,7 +85595,7 @@ Run this script as $root or pick another location.\n");
             $arrayInfo = explode("\n", $strInfo);
             $cli = true;
         }
-    
+
         foreach ($arrayInfo as $val) {
             if (strpos($val,"php.ini")) {
                 if ($cli) {
@@ -87459,18 +86227,12 @@ Double-click this file to add it to the current user registry.
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Common.php,v 1.18 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Common.php,v 1.20 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -87506,9 +86268,9 @@ define('PEAR_TASK_PACKAGEANDINSTALL', 3);
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @abstract
@@ -87666,18 +86428,12 @@ class PEAR_Task_Common
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Postinstallscript.php,v 1.20 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Postinstallscript.php,v 1.22 2009/02/24 23:45:56 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -87693,9 +86449,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -87813,7 +86569,7 @@ class PEAR_Task_Postinstallscript extends PEAR_Task_Common
                         return array(PEAR_TASK_ERROR_INVALID, 'Post-install script "' .
                             $fileXml['name'] . '" ' . $tasksNamespace .
                             'paramgroup> id "' . $param[$tasksNamespace . 'id'] .
-                            '" must have a ' . $tasksNamespace . 
+                            '" must have a ' . $tasksNamespace .
                             'conditiontype> tag containing either "=", ' .
                             '"!=", or "preg_match"');
                     }
@@ -87994,18 +86750,12 @@ class PEAR_Task_Postinstallscript extends PEAR_Task_Common
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.12 2008/01/03 20:26:37 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.14 2009/02/24 23:45:32 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a10
  */
@@ -88018,9 +86768,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Postinstallscript.p
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
@@ -88066,7 +86816,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
      * sequence the users should see the paramgroups.  The $params
      * parameter should either be the result of a call to {@link getParam()}
      * or an array of calls to getParam().
-     * 
+     *
      * Use {@link addConditionTypeGroup()} to add a <paramgroup> containing
      * a <conditiontype> tag
      * @param string $id <paramgroup> id as seen by the script
@@ -88100,7 +86850,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
      * sequence the users should see the paramgroups.  The $params
      * parameter should either be the result of a call to {@link getParam()}
      * or an array of calls to getParam().
-     * 
+     *
      * Use {@link addParamGroup()} to add a simple <paramgroup>
      *
      * @param string $id <paramgroup> id as seen by the script
@@ -88119,10 +86869,9 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
         if ($params && isset($params[0]) && !isset($params[1])) {
             $params = $params[0];
         }
-        $stuff =
-            array(
-                $this->_pkg->getTasksNs() . ':id' => $id,
-            );
+        $stuff = array(
+            $this->_pkg->getTasksNs() . ':id' => $id,
+        );
         if ($instructions) {
             $stuff[$this->_pkg->getTasksNs() . ':instructions'] = $instructions;
         }
@@ -88147,7 +86896,7 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
     function getParam($name, $prompt, $type = 'string', $default = null)
     {
         if ($default !== null) {
-            return 
+            return
             array(
                 $this->_pkg->getTasksNs() . ':name' => $name,
                 $this->_pkg->getTasksNs() . ':prompt' => $prompt,
@@ -88169,18 +86918,12 @@ class PEAR_Task_Postinstallscript_rw extends PEAR_Task_Postinstallscript
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Replace.php,v 1.17 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Replace.php,v 1.19 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -88193,9 +86936,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -88344,90 +87087,78 @@ class PEAR_Task_Replace extends PEAR_Task_Common
         return $contents;
     }
 }
-?><?php
-/**
- * <tasks:replace> - read/write version
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.4 2008/01/03 20:26:37 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a10
- */
-/**
- * Base class
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Replace.php';
-/**
- * Abstracts the replace task xml.
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a10
- */
-class PEAR_Task_Replace_rw extends PEAR_Task_Replace
-{
-    function PEAR_Task_Replace_rw(&$pkg, &$config, &$logger, $fileXml)
-    {
-        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
-        $this->_contents = $fileXml;
-        $this->_pkg = &$pkg;
-        $this->_params = array();
-    }
-
-    function validate()
-    {
-        return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents);
-    }
-
-    function setInfo($from, $to, $type)
-    {
-        $this->_params = array('attribs' => array('from' => $from, 'to' => $to, 'type' => $type));
-    }
-
-    function getName()
-    {
-        return 'replace';
-    }
-
-    function getXml()
-    {
-        return $this->_params;
-    }
-}
+?><?php
+/**
+ * <tasks:replace> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.5 2009/02/24 23:45:44 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Replace.php';
+/**
+ * Abstracts the replace task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Replace_rw extends PEAR_Task_Replace
+{
+    function PEAR_Task_Replace_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents);
+    }
+
+    function setInfo($from, $to, $type)
+    {
+        $this->_params = array('attribs' => array('from' => $from, 'to' => $to, 'type' => $type));
+    }
+
+    function getName()
+    {
+        return 'replace';
+    }
+
+    function getXml()
+    {
+        return $this->_params;
+    }
+}
 ?><?php
 /**
  * <tasks:unixeol>
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Unixeol.php,v 1.10 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Unixeol.php,v 1.12 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -88440,9 +87171,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -88492,85 +87223,73 @@ class PEAR_Task_Unixeol extends PEAR_Task_Common
         return preg_replace("/\r\n|\n\r|\r|\n/", "\n", $contents);
     }
 }
-?><?php
-/**
- * <tasks:unixeol> - read/write version
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.5 2008/01/03 20:26:37 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a10
- */
-/**
- * Base class
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Unixeol.php';
-/**
- * Abstracts the unixeol task xml.
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a10
- */
-class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
-{
-    function PEAR_Task_Unixeol_rw(&$pkg, &$config, &$logger, $fileXml)
-    {
-        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
-        $this->_contents = $fileXml;
-        $this->_pkg = &$pkg;
-        $this->_params = array();
-    }
-
-    function validate()
-    {
-        return true;
-    }
-
-    function getName()
-    {
-        return 'unixeol';
-    }
-
-    function getXml()
-    {
-        return '';
-    }
-}
+?><?php
+/**
+ * <tasks:unixeol> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.6 2009/02/24 23:45:30 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Unixeol.php';
+/**
+ * Abstracts the unixeol task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol
+{
+    function PEAR_Task_Unixeol_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return true;
+    }
+
+    function getName()
+    {
+        return 'unixeol';
+    }
+
+    function getXml()
+    {
+        return '';
+    }
+}
 ?><?php
 /**
  * <tasks:windowseol>
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Windowseol.php,v 1.9 2008/05/13 21:28:20 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Windowseol.php,v 1.11 2009/02/25 00:15:49 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -88583,9 +87302,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Common.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -88635,85 +87354,73 @@ class PEAR_Task_Windowseol extends PEAR_Task_Common
         return preg_replace("/\r\n|\n\r|\r|\n/", "\r\n", $contents);
     }
 }
-?><?php
-/**
- * <tasks:windowseol> - read/write version
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: rw.php,v 1.5 2008/01/03 20:26:37 cellog Exp $
- * @link       http://pear.php.net/package/PEAR
- * @since      File available since Release 1.4.0a10
- */
-/**
- * Base class
- */
-require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Windowseol.php';
-/**
- * Abstracts the windowseol task xml.
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a10
- */
-class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
-{
-    function PEAR_Task_Windowseol_rw(&$pkg, &$config, &$logger, $fileXml)
-    {
-        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
-        $this->_contents = $fileXml;
-        $this->_pkg = &$pkg;
-        $this->_params = array();
-    }
-
-    function validate()
-    {
-        return true;
-    }
-
-    function getName()
-    {
-        return 'windowseol';
-    }
-
-    function getXml()
-    {
-        return '';
-    }
-}
+?><?php
+/**
+ * <tasks:windowseol> - read/write version
+ *
+ * PHP versions 4 and 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: rw.php,v 1.6 2009/02/24 23:45:20 dufuz Exp $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 1.4.0a10
+ */
+/**
+ * Base class
+ */
+require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Task/Windowseol.php';
+/**
+ * Abstracts the windowseol task xml.
+ * @category   pear
+ * @package    PEAR
+ * @author     Greg Beaver <cellog at php.net>
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
+ * @link       http://pear.php.net/package/PEAR
+ * @since      Class available since Release 1.4.0a10
+ */
+class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol
+{
+    function PEAR_Task_Windowseol_rw(&$pkg, &$config, &$logger, $fileXml)
+    {
+        parent::PEAR_Task_Common($config, $logger, PEAR_TASK_PACKAGE);
+        $this->_contents = $fileXml;
+        $this->_pkg = &$pkg;
+        $this->_params = array();
+    }
+
+    function validate()
+    {
+        return true;
+    }
+
+    function getName()
+    {
+        return 'windowseol';
+    }
+
+    function getXml()
+    {
+        return '';
+    }
+}
 ?><?php
 /**
  * PEAR_Validate
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: Validate.php,v 1.52 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: Validate.php,v 1.54 2009/02/24 23:38:23 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
@@ -88734,9 +87441,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validator/PECL.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -89156,7 +87863,6 @@ class PEAR_Validate
                 return false;
             }
 
-
             if ($this->_state == PEAR_VALIDATE_PACKAGING &&
                   $this->_packagexml->getDate() != date('Y-m-d')) {
                 $this->_addWarning('date', 'Release Date "' .
@@ -89175,8 +87881,8 @@ class PEAR_Validate
             // default of no time value set
             return true;
         }
-        // packager automatically sets time, so only validate if
-        // pear validate is called
+
+        // packager automatically sets time, so only validate if pear validate is called
         if ($this->_state = PEAR_VALIDATE_NORMAL) {
             if (!preg_match('/\d\d:\d\d:\d\d/',
                   $this->_packagexml->getTime())) {
@@ -89184,12 +87890,15 @@ class PEAR_Validate
                     $this->_packagexml->getTime() . '"');
                 return false;
             }
-            if (strtotime($this->_packagexml->getTime()) == -1) {
+
+            $result = preg_match('|\d{2}\:\d{2}\:\d{2}|', $this->_packagexml->getTime(), $matches);
+            if ($result === false || empty($matches)) {
                 $this->_addFailure('time', 'invalid release time "' .
                     $this->_packagexml->getTime() . '"');
                 return false;
             }
         }
+
         return true;
     }
 
@@ -89328,9 +88037,7 @@ class PEAR_Validate
     {
         return true;
     }
-}
-?>
-<?php
+}<?php
 /**
  * Channel Validator for the pecl.php.net channel
  *
@@ -89340,8 +88047,8 @@ class PEAR_Validate
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @copyright  1997-2006 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: PECL.php,v 1.9 2008/01/03 20:26:37 cellog Exp $
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: PECL.php,v 1.10 2009/02/24 23:39:19 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a5
  */
@@ -89354,9 +88061,9 @@ require_once 'phar://install-pear-nozlib.phar/' . 'PEAR/Validate.php';
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: 1.8.0
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a5
  */
@@ -89398,34 +88105,28 @@ class PEAR_Validator_PECL extends PEAR_Validate
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    PEAR
  * @author     Greg Beaver <cellog at php.net>
  * @author     Stephan Schmidt (original XML_Unserializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: XMLParser.php,v 1.13 2008/01/03 20:26:36 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version    CVS: $Id: XMLParser.php,v 1.22 2009/03/08 00:45:39 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 1.4.0a1
  */
 
 /**
  * Parser for any xml file
- * @category   pear
- * @package    PEAR
- * @author     Greg Beaver <cellog at php.net>
- * @author     Stephan Schmidt (original XML_Unserializer code)
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    Release: 1.7.2
- * @link       http://pear.php.net/package/PEAR
- * @since      Class available since Release 1.4.0a1
+ * @category  pear
+ * @package   PEAR
+ * @author    Greg Beaver <cellog at php.net>
+ * @author    Stephan Schmidt (original XML_Unserializer code)
+ * @copyright 1997-2009 The Authors
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version   Release: 1.8.0
+ * @link      http://pear.php.net/package/PEAR
+ * @since     Class available since Release 1.4.0a1
  */
 class PEAR_XMLParser
 {
@@ -89460,6 +88161,12 @@ class PEAR_XMLParser
     var $_depth = 0;
 
     /**
+     * The XML encoding to use
+     * @var string $encoding
+     */
+    var $encoding = 'ISO-8859-1';
+
+    /**
      * @return array
      */
     function getData()
@@ -89481,18 +88188,20 @@ class PEAR_XMLParser
         $this->_dataStack = array();
         $this->_depth = 0;
 
-        if (version_compare(phpversion(), '5.0.0', 'lt')) {
-            if (strpos($data, 'encoding="UTF-8"')) {
-                $data = utf8_decode($data);
-            }
-            $xp = xml_parser_create('ISO-8859-1');
-        } else {
-            if (strpos($data, 'encoding="UTF-8"')) {
-                $xp = xml_parser_create('UTF-8');
-            } else {
-                $xp = xml_parser_create('ISO-8859-1');
-            }
+        if (
+            strpos($data, 'encoding="UTF-8"')
+            || strpos($data, 'encoding="utf-8"')
+            || strpos($data, "encoding='UTF-8'")
+            || strpos($data, "encoding='utf-8'")
+        ) {
+            $this->encoding = 'UTF-8';
+        }
+
+        if (version_compare(phpversion(), '5.0.0', 'lt') && $this->encoding == 'UTF-8') {
+            $data = utf8_decode($data);
         }
+
+        $xp = xml_parser_create($this->encoding);
         xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, 0);
         xml_set_object($xp, $this);
         xml_set_element_handler($xp, 'startHandler', 'endHandler');
@@ -89570,9 +88279,7 @@ class PEAR_XMLParser
         // adjust type of the value
         switch(strtolower($value['type'])) {
 
-            /*
-             * unserialize an array
-             */
+            // unserialize an array
             case 'array':
                 if ($data !== '') {
                     $value['children']['_content'] = $data;
@@ -89599,42 +88306,43 @@ class PEAR_XMLParser
                 $value['value'] = $data;
                 break;
         }
+
         $parent = array_pop($this->_valStack);
         if ($parent === null) {
             $this->_unserializedData = &$value['value'];
             $this->_root = &$value['name'];
             return true;
-        } else {
-            // parent has to be an array
-            if (!isset($parent['children']) || !is_array($parent['children'])) {
-                $parent['children'] = array();
-                if ($parent['type'] != 'array') {
-                    $parent['type'] = 'array';
-                }
+        }
+
+        // parent has to be an array
+        if (!isset($parent['children']) || !is_array($parent['children'])) {
+            $parent['children'] = array();
+            if ($parent['type'] != 'array') {
+                $parent['type'] = 'array';
             }
+        }
 
-            if (!empty($value['name'])) {
-                // there already has been a tag with this name
-                if (in_array($value['name'], $parent['childrenKeys'])) {
-                    // no aggregate has been created for this tag
-                    if (!in_array($value['name'], $parent['aggregKeys'])) {
-                        if (isset($parent['children'][$value['name']])) {
-                            $parent['children'][$value['name']] = array($parent['children'][$value['name']]);
-                        } else {
-                            $parent['children'][$value['name']] = array();
-                        }
-                        array_push($parent['aggregKeys'], $value['name']);
+        if (!empty($value['name'])) {
+            // there already has been a tag with this name
+            if (in_array($value['name'], $parent['childrenKeys'])) {
+                // no aggregate has been created for this tag
+                if (!in_array($value['name'], $parent['aggregKeys'])) {
+                    if (isset($parent['children'][$value['name']])) {
+                        $parent['children'][$value['name']] = array($parent['children'][$value['name']]);
+                    } else {
+                        $parent['children'][$value['name']] = array();
                     }
-                    array_push($parent['children'][$value['name']], $value['value']);
-                } else {
-                    $parent['children'][$value['name']] = &$value['value'];
-                    array_push($parent['childrenKeys'], $value['name']);
+                    array_push($parent['aggregKeys'], $value['name']);
                 }
+                array_push($parent['children'][$value['name']], $value['value']);
             } else {
-                array_push($parent['children'],$value['value']);
+                $parent['children'][$value['name']] = &$value['value'];
+                array_push($parent['childrenKeys'], $value['name']);
             }
-            array_push($this->_valStack, $parent);
+        } else {
+            array_push($parent['children'],$value['value']);
         }
+        array_push($this->_valStack, $parent);
 
         $this->_depth--;
     }
@@ -89651,8 +88359,7 @@ class PEAR_XMLParser
     {
         $this->_dataStack[$this->_depth] .= $cdata;
     }
-}
-?><?php
+}<?php
 /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
 // +-----------------------------------------------------------------------------+
 // | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
@@ -90329,7 +89036,7 @@ class Structures_Graph_Node {
     * 
     * If the graph is not directed, the reverse arc, connecting $destinationNode to $this is also created.
     *
-    * @param    Structures_Graph Node to connect to
+    * @param    Structures_Graph_Node Node to connect to
     * @access	public
     */
     function connectTo(&$destinationNode) {
@@ -94848,18 +93555,12 @@ as well as for characteristic extraction from the graph topology.
  *
  * PHP versions 4 and 5
  *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license at php.net so we can mail you a copy immediately.
- *
  * @category   pear
  * @package    System
  * @author     Tomas V.V.Cox <cox at idecnet.com>
- * @copyright  1997-2008 The PHP Group
- * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
- * @version    CVS: $Id: System.php,v 1.62 2008/01/03 20:26:34 cellog Exp $
+ * @copyright  1997-2009 The Authors
+ * @license    http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: System.php,v 1.66 2009/02/24 23:52:56 dufuz Exp $
  * @link       http://pear.php.net/package/PEAR
  * @since      File available since Release 0.1
  */
@@ -94900,24 +93601,24 @@ $GLOBALS['_System_temp_files'] = array();
 * @package    System
 * @author     Tomas V.V. Cox <cox at idecnet.com>
 * @copyright  1997-2006 The PHP Group
-* @license    http://www.php.net/license/3_0.txt  PHP License 3.0
-* @version    Release: 1.7.2
+* @license    http://opensource.org/licenses/bsd-license.php New BSD License
+* @version    Release: 1.8.0
 * @link       http://pear.php.net/package/PEAR
 * @since      Class available since Release 0.1
-* @static 
+* @static
 */
 class System
 {
     /**
-    * returns the commandline arguments of a function
-    *
-    * @param    string  $argv           the commandline
-    * @param    string  $short_options  the allowed option short-tags
-    * @param    string  $long_options   the allowed option long-tags
-    * @return   array   the given options and there values
-    * @static 
-    * @access private
-    */
+     * returns the commandline arguments of a function
+     *
+     * @param    string  $argv           the commandline
+     * @param    string  $short_options  the allowed option short-tags
+     * @param    string  $long_options   the allowed option long-tags
+     * @return   array   the given options and there values
+     * @static
+     * @access private
+     */
     function _parseArgs($argv, $short_options, $long_options = null)
     {
         if (!is_array($argv) && $argv !== null) {
@@ -94927,14 +93628,14 @@ class System
     }
 
     /**
-    * Output errors with PHP trigger_error(). You can silence the errors
-    * with prefixing a "@" sign to the function call: @System::mkdir(..);
-    *
-    * @param mixed $error a PEAR error or a string with the error message
-    * @return bool false
-    * @static 
-    * @access private
-    */
+     * Output errors with PHP trigger_error(). You can silence the errors
+     * with prefixing a "@" sign to the function call: @System::mkdir(..);
+     *
+     * @param mixed $error a PEAR error or a string with the error message
+     * @return bool false
+     * @static
+     * @access private
+     */
     function raiseError($error)
     {
         if (PEAR::isError($error)) {
@@ -94945,31 +93646,30 @@ class System
     }
 
     /**
-    * Creates a nested array representing the structure of a directory
-    *
-    * System::_dirToStruct('dir1', 0) =>
-    *   Array
-    *    (
-    *    [dirs] => Array
-    *        (
-    *            [0] => dir1
-    *        )
-    *
-    *    [files] => Array
-    *        (
-    *            [0] => dir1/file2
-    *            [1] => dir1/file3
-    *        )
-    *    )
-    * @param    string  $sPath      Name of the directory
-    * @param    integer $maxinst    max. deep of the lookup
-    * @param    integer $aktinst    starting deep of the lookup
-    * @param    bool    $silent     if true, do not emit errors.
-    * @return   array   the structure of the dir
-    * @static 
-    * @access   private
-    */
-
+     * Creates a nested array representing the structure of a directory
+     *
+     * System::_dirToStruct('dir1', 0) =>
+     *   Array
+     *    (
+     *    [dirs] => Array
+     *        (
+     *            [0] => dir1
+     *        )
+     *
+     *    [files] => Array
+     *        (
+     *            [0] => dir1/file2
+     *            [1] => dir1/file3
+     *        )
+     *    )
+     * @param    string  $sPath      Name of the directory
+     * @param    integer $maxinst    max. deep of the lookup
+     * @param    integer $aktinst    starting deep of the lookup
+     * @param    bool    $silent     if true, do not emit errors.
+     * @return   array   the structure of the dir
+     * @static
+     * @access   private
+     */
     function _dirToStruct($sPath, $maxinst, $aktinst = 0, $silent = false)
     {
         $struct = array('dirs' => array(), 'files' => array());
@@ -94979,6 +93679,7 @@ class System
             }
             return $struct; // XXX could not open error
         }
+
         $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ?
         $list = array();
         while (false !== ($file = readdir($dir))) {
@@ -94986,54 +93687,58 @@ class System
                 $list[] = $file;
             }
         }
+
         closedir($dir);
-        sort($list);
+        natsort($list);
         if ($aktinst < $maxinst || $maxinst == 0) {
             foreach ($list as $val) {
                 $path = $sPath . DIRECTORY_SEPARATOR . $val;
                 if (is_dir($path) && !is_link($path)) {
-                    $tmp = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent);
-                    $struct = array_merge_recursive($tmp, $struct);
+                    $tmp    = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent);
+                    $struct = array_merge_recursive($struct, $tmp);
                 } else {
                     $struct['files'][] = $path;
                 }
             }
         }
+
         return $struct;
     }
 
     /**
-    * Creates a nested array representing the structure of a directory and files
-    *
-    * @param    array $files Array listing files and dirs
-    * @return   array
-    * @static 
-    * @see System::_dirToStruct()
-    */
+     * Creates a nested array representing the structure of a directory and files
+     *
+     * @param    array $files Array listing files and dirs
+     * @return   array
+     * @static
+     * @see System::_dirToStruct()
+     */
     function _multipleToStruct($files)
     {
         $struct = array('dirs' => array(), 'files' => array());
         settype($files, 'array');
         foreach ($files as $file) {
             if (is_dir($file) && !is_link($file)) {
-                $tmp = System::_dirToStruct($file, 0);
+                $tmp    = System::_dirToStruct($file, 0);
                 $struct = array_merge_recursive($tmp, $struct);
             } else {
-                $struct['files'][] = $file;
+                if (!in_array($file, $struct['files'])) {
+                    $struct['files'][] = $file;
+                }
             }
         }
         return $struct;
     }
 
     /**
-    * The rm command for removing files.
-    * Supports multiple files and dirs and also recursive deletes
-    *
-    * @param    string  $args   the arguments for rm
-    * @return   mixed   PEAR_Error or true for success
-    * @static 
-    * @access   public
-    */
+     * The rm command for removing files.
+     * Supports multiple files and dirs and also recursive deletes
+     *
+     * @param    string  $args   the arguments for rm
+     * @return   mixed   PEAR_Error or true for success
+     * @static
+     * @access   public
+     */
     function rm($args)
     {
         $opts = System::_parseArgs($args, 'rf'); // "f" does nothing but I like it :-)
@@ -95053,6 +93758,8 @@ class System
                     $ret = false;
                 }
             }
+
+            rsort($struct['dirs']);
             foreach ($struct['dirs'] as $dir) {
                 if (!@rmdir($dir)) {
                     $ret = false;
@@ -95070,20 +93777,21 @@ class System
     }
 
     /**
-    * Make directories.
-    *
-    * The -p option will create parent directories
-    * @param    string  $args    the name of the director(y|ies) to create
-    * @return   bool    True for success
-    * @static 
-    * @access   public
-    */
+     * Make directories.
+     *
+     * The -p option will create parent directories
+     * @param    string  $args    the name of the director(y|ies) to create
+     * @return   bool    True for success
+     * @static
+     * @access   public
+     */
     function mkDir($args)
     {
         $opts = System::_parseArgs($args, 'pm:');
         if (PEAR::isError($opts)) {
             return System::raiseError($opts);
         }
+
         $mode = 0777; // default mode
         foreach ($opts[0] as $opt) {
             if ($opt[0] == 'p') {
@@ -95100,6 +93808,7 @@ class System
                 $mode = $opt[1];
             }
         }
+
         $ret = true;
         if (isset($create_parents)) {
             foreach ($opts[1] as $dir) {
@@ -95109,11 +93818,13 @@ class System
                     array_unshift($dirstack, $dir);
                     $dir = dirname($dir);
                 }
+
                 while ($newdir = array_shift($dirstack)) {
                     if (!is_writeable(dirname($newdir))) {
                         $ret = false;
                         break;
                     }
+
                     if (!mkdir($newdir, $mode)) {
                         $ret = false;
                     }
@@ -95126,24 +93837,25 @@ class System
                 }
             }
         }
+
         return $ret;
     }
 
     /**
-    * Concatenate files
-    *
-    * Usage:
-    * 1) $var = System::cat('sample.txt test.txt');
-    * 2) System::cat('sample.txt test.txt > final.txt');
-    * 3) System::cat('sample.txt test.txt >> final.txt');
-    *
-    * Note: as the class use fopen, urls should work also (test that)
-    *
-    * @param    string  $args   the arguments
-    * @return   boolean true on success
-    * @static 
-    * @access   public
-    */
+     * Concatenate files
+     *
+     * Usage:
+     * 1) $var = System::cat('sample.txt test.txt');
+     * 2) System::cat('sample.txt test.txt > final.txt');
+     * 3) System::cat('sample.txt test.txt >> final.txt');
+     *
+     * Note: as the class use fopen, urls should work also (test that)
+     *
+     * @param    string  $args   the arguments
+     * @return   boolean true on success
+     * @static
+     * @access   public
+     */
     function &cat($args)
     {
         $ret = null;
@@ -95195,29 +93907,29 @@ class System
     }
 
     /**
-    * Creates temporary files or directories. This function will remove
-    * the created files when the scripts finish its execution.
-    *
-    * Usage:
-    *   1) $tempfile = System::mktemp("prefix");
-    *   2) $tempdir  = System::mktemp("-d prefix");
-    *   3) $tempfile = System::mktemp();
-    *   4) $tempfile = System::mktemp("-t /var/tmp prefix");
-    *
-    * prefix -> The string that will be prepended to the temp name
-    *           (defaults to "tmp").
-    * -d     -> A temporary dir will be created instead of a file.
-    * -t     -> The target dir where the temporary (file|dir) will be created. If
-    *           this param is missing by default the env vars TMP on Windows or
-    *           TMPDIR in Unix will be used. If these vars are also missing
-    *           c:\windows\temp or /tmp will be used.
-    *
-    * @param   string  $args  The arguments
-    * @return  mixed   the full path of the created (file|dir) or false
-    * @see System::tmpdir()
-    * @static 
-    * @access  public
-    */
+     * Creates temporary files or directories. This function will remove
+     * the created files when the scripts finish its execution.
+     *
+     * Usage:
+     *   1) $tempfile = System::mktemp("prefix");
+     *   2) $tempdir  = System::mktemp("-d prefix");
+     *   3) $tempfile = System::mktemp();
+     *   4) $tempfile = System::mktemp("-t /var/tmp prefix");
+     *
+     * prefix -> The string that will be prepended to the temp name
+     *           (defaults to "tmp").
+     * -d     -> A temporary dir will be created instead of a file.
+     * -t     -> The target dir where the temporary (file|dir) will be created. If
+     *           this param is missing by default the env vars TMP on Windows or
+     *           TMPDIR in Unix will be used. If these vars are also missing
+     *           c:\windows\temp or /tmp will be used.
+     *
+     * @param   string  $args  The arguments
+     * @return  mixed   the full path of the created (file|dir) or false
+     * @see System::tmpdir()
+     * @static
+     * @access  public
+     */
     function mktemp($args = null)
     {
         static $first_time = true;
@@ -95225,6 +93937,7 @@ class System
         if (PEAR::isError($opts)) {
             return System::raiseError($opts);
         }
+
         foreach ($opts[0] as $opt) {
             if ($opt[0] == 'd') {
                 $tmp_is_dir = true;
@@ -95232,13 +93945,16 @@ class System
                 $tmpdir = $opt[1];
             }
         }
+
         $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp';
         if (!isset($tmpdir)) {
             $tmpdir = System::tmpdir();
         }
+
         if (!System::mkDir(array('-p', $tmpdir))) {
             return false;
         }
+
         $tmp = tempnam($tmpdir, $prefix);
         if (isset($tmp_is_dir)) {
             unlink($tmp); // be careful possible race condition here
@@ -95246,21 +93962,27 @@ class System
                 return System::raiseError("Unable to create temporary directory $tmpdir");
             }
         }
+
         $GLOBALS['_System_temp_files'][] = $tmp;
+        if (isset($tmp_is_dir)) {
+            //$GLOBALS['_System_temp_files'][] = dirname($tmp);
+        }
+
         if ($first_time) {
             PEAR::registerShutdownFunc(array('System', '_removeTmpFiles'));
             $first_time = false;
         }
+
         return $tmp;
     }
 
     /**
-    * Remove temporary files created my mkTemp. This function is executed
-    * at script shutdown time
-    *
-    * @static 
-    * @access private
-    */
+     * Remove temporary files created my mkTemp. This function is executed
+     * at script shutdown time
+     *
+     * @static
+     * @access private
+     */
     function _removeTmpFiles()
     {
         if (count($GLOBALS['_System_temp_files'])) {
@@ -95272,14 +93994,14 @@ class System
     }
 
     /**
-    * Get the path of the temporal directory set in the system
-    * by looking in its environments variables.
-    * Note: php.ini-recommended removes the "E" from the variables_order setting,
-    * making unavaible the $_ENV array, that s why we do tests with _ENV
-    *
-    * @static 
-    * @return string The temporary directory on the system
-    */
+     * Get the path of the temporal directory set in the system
+     * by looking in its environments variables.
+     * Note: php.ini-recommended removes the "E" from the variables_order setting,
+     * making unavaible the $_ENV array, that s why we do tests with _ENV
+     *
+     * @static
+     * @return string The temporary directory on the system
+     */
     function tmpdir()
     {
         if (OS_WINDOWS) {
@@ -95304,15 +94026,15 @@ class System
     }
 
     /**
-    * The "which" command (show the full path of a command)
-    *
-    * @param string $program The command to search for
-    * @param mixed  $fallback Value to return if $program is not found
-    *
-    * @return mixed A string with the full path or false if not found
-    * @static 
-    * @author Stig Bakken <ssb at php.net>
-    */
+     * The "which" command (show the full path of a command)
+     *
+     * @param string $program The command to search for
+     * @param mixed  $fallback Value to return if $program is not found
+     *
+     * @return mixed A string with the full path or false if not found
+     * @static
+     * @author Stig Bakken <ssb at php.net>
+     */
     function which($program, $fallback = false)
     {
         // enforce API
@@ -95362,29 +94084,29 @@ class System
     }
 
     /**
-    * The "find" command
-    *
-    * Usage:
-    *
-    * System::find($dir);
-    * System::find("$dir -type d");
-    * System::find("$dir -type f");
-    * System::find("$dir -name *.php");
-    * System::find("$dir -name *.php -name *.htm*");
-    * System::find("$dir -maxdepth 1");
-    *
-    * Params implmented:
-    * $dir            -> Start the search at this directory
-    * -type d         -> return only directories
-    * -type f         -> return only files
-    * -maxdepth <n>   -> max depth of recursion
-    * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
-    *
-    * @param  mixed Either array or string with the command line
-    * @return array Array of found files
-    * @static 
-    *
-    */
+     * The "find" command
+     *
+     * Usage:
+     *
+     * System::find($dir);
+     * System::find("$dir -type d");
+     * System::find("$dir -type f");
+     * System::find("$dir -name *.php");
+     * System::find("$dir -name *.php -name *.htm*");
+     * System::find("$dir -maxdepth 1");
+     *
+     * Params implmented:
+     * $dir            -> Start the search at this directory
+     * -type d         -> return only directories
+     * -type f         -> return only files
+     * -maxdepth <n>   -> max depth of recursion
+     * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
+     *
+     * @param  mixed Either array or string with the command line
+     * @return array Array of found files
+     * @static
+     *
+     */
     function find($args)
     {
         if (!is_array($args)) {
@@ -95447,4 +94169,3930 @@ class System
         }
         return $files;
     }
-}þ(ó”›Ñ†HÊ߷ҦꡰÍç   GBMB
\ No newline at end of file
+}<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * XML_Util
+ *
+ * XML Utilities package
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2003-2008 Stephan Schmidt <schst at php.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *    * The name of the author may not be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category  XML
+ * @package   XML_Util
+ * @author    Stephan Schmidt <schst at php.net>
+ * @copyright 2003-2008 Stephan Schmidt <schst at php.net>
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version   CVS: $Id: Util.php,v 1.39 2009/02/09 14:23:42 ashnazg Exp $
+ * @link      http://pear.php.net/package/XML_Util
+ */
+
+/**
+ * error code for invalid chars in XML name
+ */
+define('XML_UTIL_ERROR_INVALID_CHARS', 51);
+
+/**
+ * error code for invalid chars in XML name
+ */
+define('XML_UTIL_ERROR_INVALID_START', 52);
+
+/**
+ * error code for non-scalar tag content
+ */
+define('XML_UTIL_ERROR_NON_SCALAR_CONTENT', 60);
+
+/**
+ * error code for missing tag name
+ */
+define('XML_UTIL_ERROR_NO_TAG_NAME', 61);
+
+/**
+ * replace XML entities
+ */
+define('XML_UTIL_REPLACE_ENTITIES', 1);
+
+/**
+ * embedd content in a CData Section
+ */
+define('XML_UTIL_CDATA_SECTION', 5);
+
+/**
+ * do not replace entitites
+ */
+define('XML_UTIL_ENTITIES_NONE', 0);
+
+/**
+ * replace all XML entitites
+ * This setting will replace <, >, ", ' and &
+ */
+define('XML_UTIL_ENTITIES_XML', 1);
+
+/**
+ * replace only required XML entitites
+ * This setting will replace <, " and &
+ */
+define('XML_UTIL_ENTITIES_XML_REQUIRED', 2);
+
+/**
+ * replace HTML entitites
+ * @link http://www.php.net/htmlentities
+ */
+define('XML_UTIL_ENTITIES_HTML', 3);
+
+/**
+ * Collapse all empty tags.
+ */
+define('XML_UTIL_COLLAPSE_ALL', 1);
+
+/**
+ * Collapse only empty XHTML tags that have no end tag.
+ */
+define('XML_UTIL_COLLAPSE_XHTML_ONLY', 2);
+
+/**
+ * utility class for working with XML documents
+ *
+
+ * @category  XML
+ * @package   XML_Util
+ * @author    Stephan Schmidt <schst at php.net>
+ * @copyright 2003-2008 Stephan Schmidt <schst at php.net>
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version   Release: @version@
+ * @link      http://pear.php.net/package/XML_Util
+ */
+class XML_Util
+{
+    /**
+     * return API version
+     *
+     * @return string $version API version
+     * @access public
+     * @static
+     */
+    function apiVersion()
+    {
+        return '1.1';
+    }
+
+    /**
+     * replace XML entities
+     *
+     * With the optional second parameter, you may select, which
+     * entities should be replaced.
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // replace XML entites:
+     * $string = XML_Util::replaceEntities('This string contains < & >.');
+     * </code>
+     *
+     * With the optional third parameter, you may pass the character encoding
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // replace XML entites in UTF-8:
+     * $string = XML_Util::replaceEntities(
+     *     'This string contains < & > as well as ä, ö, ß, à and ê',
+     *     XML_UTIL_ENTITIES_HTML,
+     *     'UTF-8'
+     * );
+     * </code>
+     *
+     * @param string $string          string where XML special chars
+     *                                should be replaced
+     * @param int    $replaceEntities setting for entities in attribute values
+     *                                (one of XML_UTIL_ENTITIES_XML,
+     *                                XML_UTIL_ENTITIES_XML_REQUIRED,
+     *                                XML_UTIL_ENTITIES_HTML)
+     * @param string $encoding        encoding value (if any)...
+     *                                must be a valid encoding as determined
+     *                                by the htmlentities() function
+     *
+     * @return string string with replaced chars
+     * @access public
+     * @static
+     * @see reverseEntities()
+     */
+    function replaceEntities($string, $replaceEntities = XML_UTIL_ENTITIES_XML,
+        $encoding = 'ISO-8859-1')
+    {
+        switch ($replaceEntities) {
+        case XML_UTIL_ENTITIES_XML:
+            return strtr($string, array(
+                '&'  => '&amp;',
+                '>'  => '&gt;',
+                '<'  => '&lt;',
+                '"'  => '&quot;',
+                '\'' => '&apos;' ));
+            break;
+        case XML_UTIL_ENTITIES_XML_REQUIRED:
+            return strtr($string, array(
+                '&' => '&amp;',
+                '<' => '&lt;',
+                '"' => '&quot;' ));
+            break;
+        case XML_UTIL_ENTITIES_HTML:
+            return htmlentities($string, ENT_COMPAT, $encoding);
+            break;
+        }
+        return $string;
+    }
+
+    /**
+     * reverse XML entities
+     *
+     * With the optional second parameter, you may select, which
+     * entities should be reversed.
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // reverse XML entites:
+     * $string = XML_Util::reverseEntities('This string contains &lt; &amp; &gt;.');
+     * </code>
+     *
+     * With the optional third parameter, you may pass the character encoding
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // reverse XML entites in UTF-8:
+     * $string = XML_Util::reverseEntities(
+     *     'This string contains &lt; &amp; &gt; as well as'
+     *     . ' &auml;, &ouml;, &szlig;, &agrave; and &ecirc;',
+     *     XML_UTIL_ENTITIES_HTML,
+     *     'UTF-8'
+     * );
+     * </code>
+     *
+     * @param string $string          string where XML special chars
+     *                                should be replaced
+     * @param int    $replaceEntities setting for entities in attribute values
+     *                                (one of XML_UTIL_ENTITIES_XML,
+     *                                XML_UTIL_ENTITIES_XML_REQUIRED,
+     *                                XML_UTIL_ENTITIES_HTML)
+     * @param string $encoding        encoding value (if any)...
+     *                                must be a valid encoding as determined
+     *                                by the html_entity_decode() function
+     *
+     * @return string string with replaced chars
+     * @access public
+     * @static
+     * @see replaceEntities()
+     */
+    function reverseEntities($string, $replaceEntities = XML_UTIL_ENTITIES_XML,
+        $encoding = 'ISO-8859-1')
+    {
+        switch ($replaceEntities) {
+        case XML_UTIL_ENTITIES_XML:
+            return strtr($string, array(
+                '&amp;'  => '&',
+                '&gt;'   => '>',
+                '&lt;'   => '<',
+                '&quot;' => '"',
+                '&apos;' => '\'' ));
+            break;
+        case XML_UTIL_ENTITIES_XML_REQUIRED:
+            return strtr($string, array(
+                '&amp;'  => '&',
+                '&lt;'   => '<',
+                '&quot;' => '"' ));
+            break;
+        case XML_UTIL_ENTITIES_HTML:
+            return html_entity_decode($string, ENT_COMPAT, $encoding);
+            break;
+        }
+        return $string;
+    }
+
+    /**
+     * build an xml declaration
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // get an XML declaration:
+     * $xmlDecl = XML_Util::getXMLDeclaration('1.0', 'UTF-8', true);
+     * </code>
+     *
+     * @param string $version    xml version
+     * @param string $encoding   character encoding
+     * @param bool   $standalone document is standalone (or not)
+     *
+     * @return string xml declaration
+     * @access public
+     * @static
+     * @uses attributesToString() to serialize the attributes of the XML declaration
+     */
+    function getXMLDeclaration($version = '1.0', $encoding = null,
+        $standalone = null)
+    {
+        $attributes = array(
+            'version' => $version,
+        );
+        // add encoding
+        if ($encoding !== null) {
+            $attributes['encoding'] = $encoding;
+        }
+        // add standalone, if specified
+        if ($standalone !== null) {
+            $attributes['standalone'] = $standalone ? 'yes' : 'no';
+        }
+
+        return sprintf('<?xml%s?>',
+            XML_Util::attributesToString($attributes, false));
+    }
+
+    /**
+     * build a document type declaration
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // get a doctype declaration:
+     * $xmlDecl = XML_Util::getDocTypeDeclaration('rootTag','myDocType.dtd');
+     * </code>
+     *
+     * @param string $root        name of the root tag
+     * @param string $uri         uri of the doctype definition
+     *                            (or array with uri and public id)
+     * @param string $internalDtd internal dtd entries
+     *
+     * @return string doctype declaration
+     * @access public
+     * @static
+     * @since 0.2
+     */
+    function getDocTypeDeclaration($root, $uri = null, $internalDtd = null)
+    {
+        if (is_array($uri)) {
+            $ref = sprintf(' PUBLIC "%s" "%s"', $uri['id'], $uri['uri']);
+        } elseif (!empty($uri)) {
+            $ref = sprintf(' SYSTEM "%s"', $uri);
+        } else {
+            $ref = '';
+        }
+
+        if (empty($internalDtd)) {
+            return sprintf('<!DOCTYPE %s%s>', $root, $ref);
+        } else {
+            return sprintf("<!DOCTYPE %s%s [\n%s\n]>", $root, $ref, $internalDtd);
+        }
+    }
+
+    /**
+     * create string representation of an attribute list
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // build an attribute string
+     * $att = array(
+     *              'foo'   =>  'bar',
+     *              'argh'  =>  'tomato'
+     *            );
+     *
+     * $attList = XML_Util::attributesToString($att);
+     * </code>
+     *
+     * @param array      $attributes attribute array
+     * @param bool|array $sort       sort attribute list alphabetically,
+     *                               may also be an assoc array containing
+     *                               the keys 'sort', 'multiline', 'indent',
+     *                               'linebreak' and 'entities'
+     * @param bool       $multiline  use linebreaks, if more than
+     *                               one attribute is given
+     * @param string     $indent     string used for indentation of
+     *                               multiline attributes
+     * @param string     $linebreak  string used for linebreaks of
+     *                               multiline attributes
+     * @param int        $entities   setting for entities in attribute values
+     *                               (one of XML_UTIL_ENTITIES_NONE,
+     *                               XML_UTIL_ENTITIES_XML,
+     *                               XML_UTIL_ENTITIES_XML_REQUIRED,
+     *                               XML_UTIL_ENTITIES_HTML)
+     *
+     * @return string string representation of the attributes
+     * @access public
+     * @static
+     * @uses replaceEntities() to replace XML entities in attribute values
+     * @todo allow sort also to be an options array
+     */
+    function attributesToString($attributes, $sort = true, $multiline = false,
+        $indent = '    ', $linebreak = "\n", $entities = XML_UTIL_ENTITIES_XML)
+    {
+        /*
+         * second parameter may be an array
+         */
+        if (is_array($sort)) {
+            if (isset($sort['multiline'])) {
+                $multiline = $sort['multiline'];
+            }
+            if (isset($sort['indent'])) {
+                $indent = $sort['indent'];
+            }
+            if (isset($sort['linebreak'])) {
+                $multiline = $sort['linebreak'];
+            }
+            if (isset($sort['entities'])) {
+                $entities = $sort['entities'];
+            }
+            if (isset($sort['sort'])) {
+                $sort = $sort['sort'];
+            } else {
+                $sort = true;
+            }
+        }
+        $string = '';
+        if (is_array($attributes) && !empty($attributes)) {
+            if ($sort) {
+                ksort($attributes);
+            }
+            if ( !$multiline || count($attributes) == 1) {
+                foreach ($attributes as $key => $value) {
+                    if ($entities != XML_UTIL_ENTITIES_NONE) {
+                        if ($entities === XML_UTIL_CDATA_SECTION) {
+                            $entities = XML_UTIL_ENTITIES_XML;
+                        }
+                        $value = XML_Util::replaceEntities($value, $entities);
+                    }
+                    $string .= ' ' . $key . '="' . $value . '"';
+                }
+            } else {
+                $first = true;
+                foreach ($attributes as $key => $value) {
+                    if ($entities != XML_UTIL_ENTITIES_NONE) {
+                        $value = XML_Util::replaceEntities($value, $entities);
+                    }
+                    if ($first) {
+                        $string .= ' ' . $key . '="' . $value . '"';
+                        $first   = false;
+                    } else {
+                        $string .= $linebreak . $indent . $key . '="' . $value . '"';
+                    }
+                }
+            }
+        }
+        return $string;
+    }
+
+    /**
+     * Collapses empty tags.
+     *
+     * @param string $xml  XML
+     * @param int    $mode Whether to collapse all empty tags (XML_UTIL_COLLAPSE_ALL)
+     *                      or only XHTML (XML_UTIL_COLLAPSE_XHTML_ONLY) ones.
+     *
+     * @return string XML
+     * @access public
+     * @static
+     * @todo PEAR CS - unable to avoid "space after open parens" error
+     *       in the IF branch
+     */
+    function collapseEmptyTags($xml, $mode = XML_UTIL_COLLAPSE_ALL)
+    {
+        if ($mode == XML_UTIL_COLLAPSE_XHTML_ONLY) {
+            return preg_replace(
+                '/<(area|base(?:font)?|br|col|frame|hr|img|input|isindex|link|meta|'
+                . 'param)([^>]*)><\/\\1>/s',
+                '<\\1\\2 />',
+                $xml);
+        } else {
+            return preg_replace('/<(\w+)([^>]*)><\/\\1>/s', '<\\1\\2 />', $xml);
+        }
+    }
+
+    /**
+     * create a tag
+     *
+     * This method will call XML_Util::createTagFromArray(), which
+     * is more flexible.
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML tag:
+     * $tag = XML_Util::createTag('myNs:myTag',
+     *     array('foo' => 'bar'),
+     *     'This is inside the tag',
+     *     'http://www.w3c.org/myNs#');
+     * </code>
+     *
+     * @param string $qname           qualified tagname (including namespace)
+     * @param array  $attributes      array containg attributes
+     * @param mixed  $content         the content
+     * @param string $namespaceUri    URI of the namespace
+     * @param int    $replaceEntities whether to replace XML special chars in
+     *                                content, embedd it in a CData section
+     *                                or none of both
+     * @param bool   $multiline       whether to create a multiline tag where
+     *                                each attribute gets written to a single line
+     * @param string $indent          string used to indent attributes
+     *                                (_auto indents attributes so they start
+     *                                at the same column)
+     * @param string $linebreak       string used for linebreaks
+     * @param bool   $sortAttributes  Whether to sort the attributes or not
+     *
+     * @return string XML tag
+     * @access public
+     * @static
+     * @see createTagFromArray()
+     * @uses createTagFromArray() to create the tag
+     */
+    function createTag($qname, $attributes = array(), $content = null,
+        $namespaceUri = null, $replaceEntities = XML_UTIL_REPLACE_ENTITIES,
+        $multiline = false, $indent = '_auto', $linebreak = "\n",
+        $sortAttributes = true)
+    {
+        $tag = array(
+            'qname'      => $qname,
+            'attributes' => $attributes
+        );
+
+        // add tag content
+        if ($content !== null) {
+            $tag['content'] = $content;
+        }
+
+        // add namespace Uri
+        if ($namespaceUri !== null) {
+            $tag['namespaceUri'] = $namespaceUri;
+        }
+
+        return XML_Util::createTagFromArray($tag, $replaceEntities, $multiline,
+            $indent, $linebreak, $sortAttributes);
+    }
+
+    /**
+     * create a tag from an array
+     * this method awaits an array in the following format
+     * <pre>
+     * array(
+     *     // qualified name of the tag
+     *     'qname' => $qname
+     *
+     *     // namespace prefix (optional, if qname is specified or no namespace)
+     *     'namespace' => $namespace
+     *
+     *     // local part of the tagname (optional, if qname is specified)
+     *     'localpart' => $localpart,
+     *
+     *     // array containing all attributes (optional)
+     *     'attributes' => array(),
+     *
+     *     // tag content (optional)
+     *     'content' => $content,
+     *
+     *     // namespaceUri for the given namespace (optional)
+     *     'namespaceUri' => $namespaceUri
+     * )
+     * </pre>
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * $tag = array(
+     *     'qname'        => 'foo:bar',
+     *     'namespaceUri' => 'http://foo.com',
+     *     'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+     *     'content'      => 'I\'m inside the tag',
+     * );
+     * // creating a tag with qualified name and namespaceUri
+     * $string = XML_Util::createTagFromArray($tag);
+     * </code>
+     *
+     * @param array  $tag             tag definition
+     * @param int    $replaceEntities whether to replace XML special chars in
+     *                                content, embedd it in a CData section
+     *                                or none of both
+     * @param bool   $multiline       whether to create a multiline tag where each
+     *                                attribute gets written to a single line
+     * @param string $indent          string used to indent attributes
+     *                                (_auto indents attributes so they start
+     *                                at the same column)
+     * @param string $linebreak       string used for linebreaks
+     * @param bool   $sortAttributes  Whether to sort the attributes or not
+     *
+     * @return string XML tag
+     * @access public
+     * @static
+     * @see createTag()
+     * @uses attributesToString() to serialize the attributes of the tag
+     * @uses splitQualifiedName() to get local part and namespace of a qualified name
+     * @uses createCDataSection()
+     * @uses raiseError()
+     */
+    function createTagFromArray($tag, $replaceEntities = XML_UTIL_REPLACE_ENTITIES,
+        $multiline = false, $indent = '_auto', $linebreak = "\n",
+        $sortAttributes = true)
+    {
+        if (isset($tag['content']) && !is_scalar($tag['content'])) {
+            return XML_Util::raiseError('Supplied non-scalar value as tag content',
+            XML_UTIL_ERROR_NON_SCALAR_CONTENT);
+        }
+
+        if (!isset($tag['qname']) && !isset($tag['localPart'])) {
+            return XML_Util::raiseError('You must either supply a qualified name '
+                . '(qname) or local tag name (localPart).',
+                XML_UTIL_ERROR_NO_TAG_NAME);
+        }
+
+        // if no attributes hav been set, use empty attributes
+        if (!isset($tag['attributes']) || !is_array($tag['attributes'])) {
+            $tag['attributes'] = array();
+        }
+
+        if (isset($tag['namespaces'])) {
+            foreach ($tag['namespaces'] as $ns => $uri) {
+                $tag['attributes']['xmlns:' . $ns] = $uri;
+            }
+        }
+
+        if (!isset($tag['qname'])) {
+            // qualified name is not given
+
+            // check for namespace
+            if (isset($tag['namespace']) && !empty($tag['namespace'])) {
+                $tag['qname'] = $tag['namespace'] . ':' . $tag['localPart'];
+            } else {
+                $tag['qname'] = $tag['localPart'];
+            }
+        } elseif (isset($tag['namespaceUri']) && !isset($tag['namespace'])) {
+            // namespace URI is set, but no namespace
+
+            $parts = XML_Util::splitQualifiedName($tag['qname']);
+
+            $tag['localPart'] = $parts['localPart'];
+            if (isset($parts['namespace'])) {
+                $tag['namespace'] = $parts['namespace'];
+            }
+        }
+
+        if (isset($tag['namespaceUri']) && !empty($tag['namespaceUri'])) {
+            // is a namespace given
+            if (isset($tag['namespace']) && !empty($tag['namespace'])) {
+                $tag['attributes']['xmlns:' . $tag['namespace']] =
+                    $tag['namespaceUri'];
+            } else {
+                // define this Uri as the default namespace
+                $tag['attributes']['xmlns'] = $tag['namespaceUri'];
+            }
+        }
+
+        // check for multiline attributes
+        if ($multiline === true) {
+            if ($indent === '_auto') {
+                $indent = str_repeat(' ', (strlen($tag['qname'])+2));
+            }
+        }
+
+        // create attribute list
+        $attList = XML_Util::attributesToString($tag['attributes'],
+            $sortAttributes, $multiline, $indent, $linebreak, $replaceEntities);
+        if (!isset($tag['content']) || (string)$tag['content'] == '') {
+            $tag = sprintf('<%s%s />', $tag['qname'], $attList);
+        } else {
+            switch ($replaceEntities) {
+            case XML_UTIL_ENTITIES_NONE:
+                break;
+            case XML_UTIL_CDATA_SECTION:
+                $tag['content'] = XML_Util::createCDataSection($tag['content']);
+                break;
+            default:
+                $tag['content'] = XML_Util::replaceEntities($tag['content'],
+                    $replaceEntities);
+                break;
+            }
+            $tag = sprintf('<%s%s>%s</%s>', $tag['qname'], $attList, $tag['content'],
+                $tag['qname']);
+        }
+        return $tag;
+    }
+
+    /**
+     * create a start element
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML start element:
+     * $tag = XML_Util::createStartElement('myNs:myTag',
+     *     array('foo' => 'bar') ,'http://www.w3c.org/myNs#');
+     * </code>
+     *
+     * @param string $qname          qualified tagname (including namespace)
+     * @param array  $attributes     array containg attributes
+     * @param string $namespaceUri   URI of the namespace
+     * @param bool   $multiline      whether to create a multiline tag where each
+     *                               attribute gets written to a single line
+     * @param string $indent         string used to indent attributes (_auto indents
+     *                               attributes so they start at the same column)
+     * @param string $linebreak      string used for linebreaks
+     * @param bool   $sortAttributes Whether to sort the attributes or not
+     *
+     * @return string XML start element
+     * @access public
+     * @static
+     * @see createEndElement(), createTag()
+     */
+    function createStartElement($qname, $attributes = array(), $namespaceUri = null,
+        $multiline = false, $indent = '_auto', $linebreak = "\n",
+        $sortAttributes = true)
+    {
+        // if no attributes hav been set, use empty attributes
+        if (!isset($attributes) || !is_array($attributes)) {
+            $attributes = array();
+        }
+
+        if ($namespaceUri != null) {
+            $parts = XML_Util::splitQualifiedName($qname);
+        }
+
+        // check for multiline attributes
+        if ($multiline === true) {
+            if ($indent === '_auto') {
+                $indent = str_repeat(' ', (strlen($qname)+2));
+            }
+        }
+
+        if ($namespaceUri != null) {
+            // is a namespace given
+            if (isset($parts['namespace']) && !empty($parts['namespace'])) {
+                $attributes['xmlns:' . $parts['namespace']] = $namespaceUri;
+            } else {
+                // define this Uri as the default namespace
+                $attributes['xmlns'] = $namespaceUri;
+            }
+        }
+
+        // create attribute list
+        $attList = XML_Util::attributesToString($attributes, $sortAttributes,
+            $multiline, $indent, $linebreak);
+        $element = sprintf('<%s%s>', $qname, $attList);
+        return  $element;
+    }
+
+    /**
+     * create an end element
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML start element:
+     * $tag = XML_Util::createEndElement('myNs:myTag');
+     * </code>
+     *
+     * @param string $qname qualified tagname (including namespace)
+     *
+     * @return string XML end element
+     * @access public
+     * @static
+     * @see createStartElement(), createTag()
+     */
+    function createEndElement($qname)
+    {
+        $element = sprintf('</%s>', $qname);
+        return $element;
+    }
+
+    /**
+     * create an XML comment
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML start element:
+     * $tag = XML_Util::createComment('I am a comment');
+     * </code>
+     *
+     * @param string $content content of the comment
+     *
+     * @return string XML comment
+     * @access public
+     * @static
+     */
+    function createComment($content)
+    {
+        $comment = sprintf('<!-- %s -->', $content);
+        return $comment;
+    }
+
+    /**
+     * create a CData section
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create a CData section
+     * $tag = XML_Util::createCDataSection('I am content.');
+     * </code>
+     *
+     * @param string $data data of the CData section
+     *
+     * @return string CData section with content
+     * @access public
+     * @static
+     */
+    function createCDataSection($data)
+    {
+        return sprintf('<![CDATA[%s]]>',
+            preg_replace('/\]\]>/', ']]]]><![CDATA[>', strval($data)));
+
+    }
+
+    /**
+     * split qualified name and return namespace and local part
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // split qualified tag
+     * $parts = XML_Util::splitQualifiedName('xslt:stylesheet');
+     * </code>
+     * the returned array will contain two elements:
+     * <pre>
+     * array(
+     *     'namespace' => 'xslt',
+     *     'localPart' => 'stylesheet'
+     * );
+     * </pre>
+     *
+     * @param string $qname     qualified tag name
+     * @param string $defaultNs default namespace (optional)
+     *
+     * @return array array containing namespace and local part
+     * @access public
+     * @static
+     */
+    function splitQualifiedName($qname, $defaultNs = null)
+    {
+        if (strstr($qname, ':')) {
+            $tmp = explode(':', $qname);
+            return array(
+                'namespace' => $tmp[0],
+                'localPart' => $tmp[1]
+            );
+        }
+        return array(
+            'namespace' => $defaultNs,
+            'localPart' => $qname
+        );
+    }
+
+    /**
+     * check, whether string is valid XML name
+     *
+     * <p>XML names are used for tagname, attribute names and various
+     * other, lesser known entities.</p>
+     * <p>An XML name may only consist of alphanumeric characters,
+     * dashes, undescores and periods, and has to start with a letter
+     * or an underscore.</p>
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // verify tag name
+     * $result = XML_Util::isValidName('invalidTag?');
+     * if (is_a($result, 'PEAR_Error')) {
+     *    print 'Invalid XML name: ' . $result->getMessage();
+     * }
+     * </code>
+     *
+     * @param string $string string that should be checked
+     *
+     * @return mixed true, if string is a valid XML name, PEAR error otherwise
+     * @access public
+     * @static
+     * @todo support for other charsets
+     * @todo PEAR CS - unable to avoid 85-char limit on second preg_match
+     */
+    function isValidName($string)
+    {
+        // check for invalid chars
+        if (!preg_match('/^[[:alpha:]_]\\z/', $string{0})) {
+            return XML_Util::raiseError('XML names may only start with letter '
+                . 'or underscore', XML_UTIL_ERROR_INVALID_START);
+        }
+
+        // check for invalid chars
+        if (!preg_match('/^([[:alpha:]_]([[:alnum:]\-\.]*)?:)?[[:alpha:]_]([[:alnum:]\_\-\.]+)?\\z/',
+            $string)
+        ) {
+            return XML_Util::raiseError('XML names may only contain alphanumeric '
+                . 'chars, period, hyphen, colon and underscores',
+                XML_UTIL_ERROR_INVALID_CHARS);
+        }
+        // XML name is valid
+        return true;
+    }
+
+    /**
+     * replacement for XML_Util::raiseError
+     *
+     * Avoids the necessity to always require
+     * PEAR.php
+     *
+     * @param string $msg  error message
+     * @param int    $code error code
+     *
+     * @return PEAR_Error
+     * @access public
+     * @static
+     * @todo PEAR CS - should this use include_once instead?
+     */
+    function raiseError($msg, $code)
+    {
+        require_once 'phar://install-pear-nozlib.phar/' . 'PEAR.php';
+        return PEAR::raiseError($msg, $code);
+    }
+}
+?>
+package.xml                                                                                         100644    1750    1750        36035 11117075467   6455                                                                                                                                                                                                                                                                                                                                                                      <?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.7.2" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0     http://pear.php.net/dtd/tasks-1.0.xsd     http://pear.php.net/dtd/package-2.0     http://pear.php.net/dtd/package-2.0.xsd">
+ <name>XML_Util</name>
+ <channel>pear.php.net</channel>
+ <summary>XML utility class</summary>
+ <description>Selection of methods that are often needed when working with XML documents.  Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more.</description>
+ <lead>
+  <name>Chuck Burgess</name>
+  <user>ashnazg</user>
+  <email>ashnazg at php.net</email>
+  <active>yes</active>
+ </lead>
+ <lead>
+  <name>Stephan Schmidt</name>
+  <user>schst</user>
+  <email>schst at php-tools.net</email>
+  <active>no</active>
+ </lead>
+ <helper>
+  <name>Davey Shafik</name>
+  <user>davey</user>
+  <email>davey at php.net</email>
+  <active>no</active>
+ </helper>
+ <date>2008-12-07</date>
+ <time>19:41:10</time>
+ <version>
+  <release>1.2.1</release>
+  <api>1.2.0</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
+ <notes>Fixed Bug #14760: Bug in getDocTypeDeclaration() [ashnazg|fpospisil]</notes>
+ <contents>
+  <dir baseinstalldir="XML" name="/">
+   <file baseinstalldir="XML" md5sum="06b6662b91b1a466e7b5113f37d4725f" name="examples/example.php" role="doc" />
+   <file baseinstalldir="XML" md5sum="77355702c9e861d3fc0a5318ea689eee" name="examples/example2.php" role="doc" />
+   <file baseinstalldir="XML" md5sum="0af0cff09232a6c275803bb36213cdd9" name="tests/AllTests.php" role="test" />
+   <file baseinstalldir="XML" md5sum="73088689d58b71cd4f86013c88b72216" name="tests/testBasic_apiVersion.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="4b17c0df7fbfb1bb2f3f636ebd6c2cbd" name="tests/testBasic_attributesToString.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="dc4202f1451bbeb62a5bc7d56a7c774c" name="tests/testBasic_collapseEmptyTags.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="4c87fda94fdfb7a78ba84998d6e28f45" name="tests/testBasic_createCDataSection.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="c101844768f146653c59c81978060158" name="tests/testBasic_createComment.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="ba75d66c2f0fb0010c71f3bcd1f64eb2" name="tests/testBasic_createEndElement.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="ad786fb687e1eea1f6890a7424709c79" name="tests/testBasic_createStartElement.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="5f453edadebaa3435c8e6f09a3aaaa9c" name="tests/testBasic_createTag.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="d2792da0d9c5f0987ee4587912017aa9" name="tests/testBasic_createTagFromArray.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="817882a0ab33e60f17ee71874ad975f0" name="tests/testBasic_getDocTypeDeclaration.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="5bc1926a488a6b63ec6366bfcf06a50a" name="tests/testBasic_getXmlDeclaration.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="a727860d55c14194fdaffa839a59a540" name="tests/testBasic_isValidName.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="300a6192f7cc6f7bc3d8f2576b51e4b0" name="tests/testBasic_raiseError.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="e6717d43001775cccd52bd5195cf02e0" name="tests/testBasic_replaceEntities.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="431856aa83a23396a9f00915dd2be192" name="tests/testBasic_reverseEntities.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="ab035534463cae8cc903e907aead8ffe" name="tests/testBasic_splitQualifiedName.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="1850856692ff6c6df5e8acb16e1080ce" name="tests/testBug_4950.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="b4127883df40a4b0d1736ad42215ee25" name="tests/testBug_5392.phpt" role="test" />
+   <file baseinstalldir="XML" md5sum="9bb265dafaaf06c86ca5c48f50368ded" name="Util.php" role="php">
+    <tasks:replace from="@version@" to="version" type="package-info" />
+   </file>
+  </dir>
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>4.3.0</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.3</min>
+   </pearinstaller>
+   <extension>
+    <name>pcre</name>
+   </extension>
+  </required>
+ </dependencies>
+ <phprelease />
+ <changelog>
+  <release>
+   <version>
+    <release>1.2.1</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2008-12-07</date>
+   <license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
+   <notes>Fixed Bug #14760: Bug in getDocTypeDeclaration() [ashnazg|fpospisil]</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.0</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2008-07-26</date>
+   <license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
+   <notes>Changed license to New BSD License (Req #13826 [ashnazg])
+Added a test suite against all API methods [ashnazg]
+Switch to package.xml v2 [ashnazg]
+Added Req #13839: Missing XHTML empty tags to collapse [ashnazg|drry]
+Fixed Bug #5392: encoding of ISO-8859-1 is the only supported encoding [ashnazg]
+Fixed Bug #4950: Incorrect CDATA serializing [ashnazg|drry]
+-- (this fix differs from the one in v1.2.0a1)</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.0RC1</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2008-07-12</date>
+   <license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
+   <notes>Changed license to New BSD License (Req #13826 [ashnazg])
+Added a test suite against all API methods [ashnazg]
+Switch to package.xml v2 [ashnazg]
+Added Req #13839: Missing XHTML empty tags to collapse [ashnazg|drry]
+Fixed Bug #5392: encoding of ISO-8859-1 is the only supported encoding [ashnazg]
+Fixed Bug #4950: Incorrect CDATA serializing [ashnazg|drry]
+-- (this fix differs from the one in v1.2.0a1)</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.0a2</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>alpha</api>
+   </stability>
+   <date>2008-05-22</date>
+   <license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
+   <notes>Changed license to New BSD License (Req #13826 [ashnazg])
+Added a test suite against all API methods [ashnazg]
+Switch to package.xml v2 [ashnazg]
+Added Req #13839: Missing XHTML empty tags to collapse [ashnazg|drry]
+Fixed Bug #5392: encoding of ISO-8859-1 is the only supported encoding [ashnazg]
+Fixed Bug #4950: Incorrect CDATA serializing [ashnazg|drry]
+-- (this fix differs from the one in v1.2.0a1)</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.2.0a1</release>
+    <api>1.2.0</api>
+   </version>
+   <stability>
+    <release>alpha</release>
+    <api>alpha</api>
+   </stability>
+   <date>2008-05-04</date>
+   <license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
+   <notes>Changed license to New BSD License (Req #13826 [ashnazg])
+Added a test suite against all API methods [ashnazg]
+Switch to package.xml v2 [ashnazg]
+Fixed Bug #4950: Incorrect CDATA serializing [ashnazg|ja.doma]</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1.4</release>
+    <api>1.1.4</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2006-12-16</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- Fixed bug #9561: Not allowing underscores in middle of tags</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1.2</release>
+    <api>1.1.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2006-12-01</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- fixed bug #5419: isValidName() now checks for character classes
+- implemented request #8196: added optional parameter to influence array sorting to createTag() createTagFromArray() and createStartElement()</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1.1</release>
+    <api>1.1.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-12-23</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- fixed bug in replaceEntities() and reverseEntities() in conjunction with XML_UTIL_ENTITIES_HTML
+- createTag() and createTagFromArray() now accept XML_UTIL_ENTITIES_XML, XML_UTIL_ENTITIES_XML_REQUIRED, XML_UTIL_ENTITIES_HTML, XML_UTIL_ENTITIES_NONE and XML_UTIL_CDATA_SECTION as $replaceEntities parameter</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.1.0</release>
+    <api>1.1.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-11-19</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- Added collapseEmptyTags (patch by Sebastian Bergmann and Thomas Duffey)</notes>
+  </release>
+  <release>
+   <version>
+    <release>1.0.0</release>
+    <api>1.0.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-10-28</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- Added reverseEntities() (request #2639)</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.6.1</release>
+    <api>0.6.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-10-28</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- Added check for tag name (either as local part or qualified name) in createTagFromArray() (bug #1083)</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.6.0</release>
+    <api>0.6.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2004-06-07</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- Fixed bug 1438 (namespaces not accepted for isValidName()) (thanks to davey)
+- added optional parameter to replaceEntities() to define the set of entities to replace
+- added optional parameter to attributesToString() to define, whether entities should be replaced (requested by Sebastian Bergmann)
+- allowed second parameter to XML_Util::attributesToString() to be an array containing options (easier to use, if you only need to set the last parameter)
+- introduced XML_Util::raiseError() to avoid the necessity of including PEAR.php, will only be included on error</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.6.0beta1</release>
+    <api>0.6.0beta1</api>
+   </version>
+   <stability>
+    <release>beta</release>
+    <api>beta</api>
+   </stability>
+   <date>2004-05-24</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>- Fixed bug 1438 (namespaces not accepted for isValidName()) (thanks to davey)
+- added optional parameter to replaceEntities() to define the set of entities to replace
+- added optional parameter to attributesToString() to define, whether entities should be replaced (requested by Sebastian Bergmann)
+- allowed second parameter to XML_Util::attributesToString() to be an array containing options (easier to use, if you only need to set the last parameter)
+- introduced XML_Util::raiseError() to avoid the necessity of including PEAR.php, will only be included on error</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.5.2</release>
+    <api>0.5.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-11-22</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>now creates XHTML compliant empty tags (Davey),
+minor whitespace fixes (Davey)</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.5.1</release>
+    <api>0.5.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-09-26</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>added default namespace parameter (optional) in splitQualifiedName() (requested by Sebastian Bergmann)</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.5</release>
+    <api>0.5</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-09-23</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>added support for multiline attributes in attributesToString(), createTag*() and createStartElement (requested by Yavor Shahpasov for XML_Serializer),
+added createComment</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.4</release>
+    <api>0.4</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-09-21</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>added createCDataSection(),
+added support for CData sections in createTag* methods,
+fixed bug #23,
+fixed bug in splitQualifiedName()</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.3</release>
+    <api>0.3</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-09-12</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>added createStartElement() and createEndElement()</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.2.1</release>
+    <api>0.2.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-09-05</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>fixed bug with zero as tag content in createTagFromArray and createTag</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.2</release>
+    <api>0.2</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-08-12</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>added XML_Util::getDocTypeDeclaration()</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.1.1</release>
+    <api>0.1.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-08-02</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>bugfix: removed bug in createTagFromArray</notes>
+  </release>
+  <release>
+   <version>
+    <release>0.1</release>
+    <api>0.1</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2003-08-01</date>
+   <license uri="http://www.php.net/license">PHP License</license>
+   <notes>inital release</notes>
+  </release>
+ </changelog>
+</package>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   XML_Util-1.2.1/examples/example.php                                                                 100644    1750    1750        21775 11117075466  12420                                                                                                                                                                                                                                                                                                                                                                      <?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Examples (file #1)
+ *
+ * several examples for the methods of XML_Util
+ * 
+ * PHP versions 4 and 5
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2003-2008 Stephan Schmidt <schst at php.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *    * The name of the author may not be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category   XML
+ * @package    XML_Util
+ * @subpackage Examples
+ * @author     Stephan Schmidt <schst at php.net>
+ * @copyright  2003-2008 Stephan Schmidt <schst at php.net>
+ * @license    http://opensource.org/licenses/bsd-license New BSD License
+ * @version    CVS: $Id: example.php,v 1.17 2008/05/05 19:05:28 ashnazg Exp $
+ * @link       http://pear.php.net/package/XML_Util
+ */
+
+    /**
+     * set error level
+     */
+    error_reporting(E_ALL);
+
+    require_once 'XML/Util.php';
+    
+    /**
+     * replacing XML entities
+     */
+    print 'replace XML entities:<br>';
+    print XML_Util::replaceEntities('This string contains < & >.');
+    print "\n<br><br>\n";
+
+    /**
+     * reversing XML entities
+     */
+    print 'replace XML entities:<br>';
+    print XML_Util::reverseEntities('This string contains &lt; &amp; &gt;.');
+    print "\n<br><br>\n";
+
+    /**
+     * building XML declaration
+     */
+    print 'building XML declaration:<br>';
+    print htmlspecialchars(XML_Util::getXMLDeclaration());
+    print "\n<br><br>\n";
+
+    print 'building XML declaration with additional attributes:<br>';
+    print htmlspecialchars(XML_Util::getXMLDeclaration('1.0', 'UTF-8', true));
+    print "\n<br><br>\n";
+
+    /**
+     * building document type declaration
+     */
+    print 'building DocType declaration:<br>';
+    print htmlspecialchars(XML_Util::getDocTypeDeclaration('package', 
+        'http://pear.php.net/dtd/package-1.0'));
+    print "\n<br><br>\n";
+
+    print 'building DocType declaration with public ID (does not exist):<br>';
+    print htmlspecialchars(XML_Util::getDocTypeDeclaration('package', 
+        array('uri' => 'http://pear.php.net/dtd/package-1.0', 
+            'id' => '-//PHP//PEAR/DTD PACKAGE 0.1')));
+    print "\n<br><br>\n";
+
+    print 'building DocType declaration with internal DTD:<br>';
+    print '<pre>';
+    print htmlspecialchars(XML_Util::getDocTypeDeclaration('package', 
+        'http://pear.php.net/dtd/package-1.0', 
+        '<!ELEMENT additionalInfo (#PCDATA)>'));
+    print '</pre>';
+    print "\n<br><br>\n";
+
+    /**
+     * creating an attribute string
+     */
+    $att = array(
+        'foo'  => 'bar',
+        'argh' => 'tomato'
+    );
+
+    print 'converting array to string:<br>';
+    print XML_Util::attributesToString($att);
+    print "\n<br><br>\n";
+
+
+    /**
+     * creating an attribute string with linebreaks
+     */
+    $att = array(
+        'foo'  => 'bar',
+        'argh' => 'tomato'
+    );
+
+    print 'converting array to string (including line breaks):<br>';
+    print '<pre>';
+    print XML_Util::attributesToString($att, true, true);
+    print '</pre>';
+    print "\n<br><br>\n";
+
+
+    /**
+     * splitting a qualified tag name
+     */
+    print 'splitting qualified tag name:<br>';
+    print '<pre>';
+    print_r(XML_Util::splitQualifiedName('xslt:stylesheet'));
+    print '</pre>';
+    print "\n<br>\n";
+
+
+    /**
+     * splitting a qualified tag name (no namespace)
+     */
+    print 'splitting qualified tag name (no namespace):<br>';
+    print '<pre>';
+    print_r(XML_Util::splitQualifiedName('foo'));
+    print '</pre>';
+    print "\n<br>\n";
+
+    /**
+     * splitting a qualified tag name (no namespace, but default namespace specified)
+     */
+    print 'splitting qualified tag name '
+        . '(no namespace, but default namespace specified):<br>';
+    print '<pre>';
+    print_r(XML_Util::splitQualifiedName('foo', 'bar'));
+    print '</pre>';
+    print "\n<br>\n";
+
+    /**
+     * verifying XML names
+     */
+    print 'verifying \'My private tag\':<br>';
+    print '<pre>';
+    print_r(XML_Util::isValidname('My Private Tag'));
+    print '</pre>';
+    print "\n<br><br>\n";
+    
+    print 'verifying \'-MyTag\':<br>';
+    print '<pre>';
+    print_r(XML_Util::isValidname('-MyTag'));
+    print '</pre>';
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag
+     */
+    $tag = array(
+        'namespace'  => 'foo',
+        'localPart'  => 'bar',
+        'attributes' => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+        'content'    => 'I\'m inside the tag'
+    );
+
+    print 'creating a tag with namespace and local part:<br>';
+    print htmlentities(XML_Util::createTagFromArray($tag));
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag
+     */
+    $tag = array(
+        'qname'        => 'foo:bar',
+        'namespaceUri' => 'http://foo.com',
+        'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+        'content'      => 'I\'m inside the tag'
+    );
+
+    print 'creating a tag with qualified name and namespaceUri:<br>';
+    print htmlentities(XML_Util::createTagFromArray($tag));
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag
+     */
+    $tag = array(
+        'qname'        => 'bar',
+        'namespaceUri' => 'http://foo.com',
+        'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable')
+    );
+
+    print 'creating an empty tag without namespace but namespace Uri:<br>';
+    print htmlentities(XML_Util::createTagFromArray($tag));
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag with more namespaces
+     */
+    $tag = array(
+        'namespace'   => 'foo',
+        'localPart'   => 'bar',
+        'attributes'  => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+        'content'     => 'I\'m inside the tag',
+        'namespaces'  => array(
+            'bar'  => 'http://bar.com',
+            'pear' => 'http://pear.php.net',
+        )
+    );
+
+    print 'creating an XML tag with more namespaces:<br />';
+    print htmlentities(XML_Util::createTagFromArray($tag));
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag with a CData Section
+     */
+    $tag = array(
+        'qname'      => 'foo',
+        'attributes' => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+        'content'    => 'I\'m inside the tag'
+    );
+
+    print 'creating a tag with CData section:<br>';
+    print htmlentities(XML_Util::createTagFromArray($tag, XML_UTIL_CDATA_SECTION));
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag with a CData Section
+     */
+    $tag = array(
+        'qname'      => 'foo',
+        'attributes' => array('key' => 'value', 'argh' => 'tütü'),
+        'content'    => 
+            'Also XHTML-tags can be created '
+            . 'and HTML entities can be replaced Ä ä Ü ö <>.'
+    );
+
+    print 'creating a tag with HTML entities:<br>';
+    print htmlentities(XML_Util::createTagFromArray($tag, XML_UTIL_ENTITIES_HTML));
+    print "\n<br><br>\n";
+
+    /**
+    * creating an XML tag with createTag
+    */
+    print 'creating a tag with createTag:<br>';
+    print htmlentities(XML_Util::createTag('myNs:myTag', 
+        array('foo' => 'bar'), 
+        'This is inside the tag', 
+        'http://www.w3c.org/myNs#'));
+    print "\n<br><br>\n";
+
+    
+    /**
+     * trying to create an XML tag with an array as content
+     */
+    $tag = array(
+        'qname'   => 'bar',
+        'content' => array('foo' => 'bar')
+    );
+    print 'trying to create an XML tag with an array as content:<br>';
+    print '<pre>';
+    print_r(XML_Util::createTagFromArray($tag));
+    print '</pre>';
+    print "\n<br><br>\n";
+    
+    /**
+     * trying to create an XML tag without a name
+     */
+    $tag = array(
+        'attributes' => array('foo' => 'bar'),
+    );
+    print 'trying to create an XML tag without a name:<br>';
+    print '<pre>';
+    print_r(XML_Util::createTagFromArray($tag));
+    print '</pre>';
+    print "\n<br><br>\n";
+?>
+   XML_Util-1.2.1/examples/example2.php                                                                100644    1750    1750        11441 11117075466  12467                                                                                                                                                                                                                                                                                                                                                                      <?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Examples (file #2)
+ *
+ * several examples for the methods of XML_Util
+ * 
+ * PHP versions 4 and 5
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2003-2008 Stephan Schmidt <schst at php.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *    * The name of the author may not be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category   XML
+ * @package    XML_Util
+ * @subpackage Examples
+ * @author     Stephan Schmidt <schst at php.net>
+ * @copyright  2003-2008 Stephan Schmidt <schst at php.net>
+ * @license    http://opensource.org/licenses/bsd-license New BSD License
+ * @version    CVS: $Id: example2.php,v 1.11 2008/05/05 19:03:13 ashnazg Exp $
+ * @link       http://pear.php.net/package/XML_Util
+ */
+
+    /**
+     * set error level
+     */
+    error_reporting(E_ALL);
+
+    require_once 'XML/Util.php';
+
+    /**
+     * creating a start element
+     */
+    print 'creating a start element:<br>';
+    print htmlentities(XML_Util::createStartElement('myNs:myTag', 
+        array('foo' => 'bar'), 'http://www.w3c.org/myNs#'));
+    print "\n<br><br>\n";
+
+
+    /**
+     * creating a start element
+     */
+    print 'creating a start element:<br>';
+    print htmlentities(XML_Util::createStartElement('myTag', 
+        array(), 'http://www.w3c.org/myNs#'));
+    print "\n<br><br>\n";
+
+    /**
+     * creating a start element
+     */
+    print 'creating a start element:<br>';
+    print '<pre>';
+    print htmlentities(XML_Util::createStartElement('myTag', 
+        array('foo' => 'bar', 'argh' => 'tomato'), 
+        'http://www.w3c.org/myNs#', true));
+    print '</pre>';
+    print "\n<br><br>\n";
+
+
+    /**
+     * creating an end element
+     */
+    print 'creating an end element:<br>';
+    print htmlentities(XML_Util::createEndElement('myNs:myTag'));
+    print "\n<br><br>\n";
+
+    /**
+     * creating a CData section
+     */
+    print 'creating a CData section:<br>';
+    print htmlentities(XML_Util::createCDataSection('I am content.'));
+    print "\n<br><br>\n";
+
+    /**
+     * creating a comment
+     */
+    print 'creating a comment:<br>';
+    print htmlentities(XML_Util::createComment('I am a comment.'));
+    print "\n<br><br>\n";
+
+    /**
+     * creating an XML tag with multiline mode
+     */
+    $tag = array(
+        'qname'        => 'foo:bar',
+        'namespaceUri' => 'http://foo.com',
+        'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+        'content'      => 'I\'m inside the tag & contain dangerous chars'
+    );
+
+    print 'creating a tag with qualified name and namespaceUri:<br>';
+    print '<pre>';
+    print htmlentities(XML_Util::createTagFromArray($tag, 
+        XML_UTIL_REPLACE_ENTITIES, true));
+    print '</pre>';
+    print "\n<br><br>\n";
+
+    /**
+     * create an attribute string without replacing the entities
+     */
+    $atts = array('series' => 'Starsky &amp; Hutch', 'channel' => 'ABC');
+    print 'creating a attribute string, '
+        . 'entities in values already had been replaced:<br>';
+    print htmlentities(XML_Util::attributesToString($atts, 
+        true, false, false, false, XML_UTIL_ENTITIES_NONE));
+    print "\n<br><br>\n";
+
+    /**
+     * using the array-syntax for attributesToString()
+     */
+    $atts = array('series' => 'Starsky &amp; Hutch', 'channel' => 'ABC');
+    print 'using the array-syntax for attributesToString()<br>';
+    print htmlentities(XML_Util::attributesToString($atts, 
+        array('entities' => XML_UTIL_ENTITIES_NONE)));
+    print "\n<br><br>\n";
+
+
+?>
+                                                                                                                                                                                                                               XML_Util-1.2.1/tests/AllTests.php                                                                   100644    1750    1750         7060 11117075466  12013                                                                                                                                                                                                                                                                                                                                                                      <?php
+
+/**
+ * Master Unit Test Suite file for XML_Util
+ * 
+ * This top-level test suite file organizes 
+ * all class test suite files, 
+ * so that the full suite can be run 
+ * by PhpUnit or via "pear run-tests -u". 
+ *
+ * PHP version 5
+ *
+ * @category   XML
+ * @package    XML_Util
+ * @subpackage UnitTesting
+ * @author     Chuck Burgess <ashnazg at php.net>
+ * @license    http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @version    CVS: $Id: AllTests.php,v 1.5 2008/05/30 11:53:09 ashnazg Exp $
+ * @link       http://pear.php.net/package/XML_Util
+ * @since      1.2.0a1
+ */
+
+
+/**
+ * Check PHP version... PhpUnit v3+ requires at least PHP v5.1.4
+ */
+if (version_compare(PHP_VERSION, "5.1.4") < 0) {
+    // Cannnot run test suites
+    echo 'Cannot run test suite via PhpUnit... requires at least PHP v5.1.4.' . PHP_EOL;
+    echo 'Use "pear run-tests -p xml_util" to run the PHPT tests directly.' . PHP_EOL
+;
+    exit(1);
+}
+
+
+/**
+ * Derive the "main" method name
+ * @internal PhpUnit would have to rename PHPUnit_MAIN_METHOD to PHPUNIT_MAIN_METHOD
+ *           to make this usage meet the PEAR CS... we cannot rename it here.
+ */
+if (!defined('PHPUnit_MAIN_METHOD')) {
+    define('PHPUnit_MAIN_METHOD', 'XML_Util_AllTests::main');
+}
+
+
+/*
+ * Files needed by PhpUnit
+ */
+require_once 'PHPUnit/Framework.php';
+require_once 'PHPUnit/TextUI/TestRunner.php';
+require_once 'PHPUnit/Extensions/PhptTestSuite.php';
+
+/*
+ * You must add each additional class-level test suite file here
+ */
+// there are no PhpUnit test files... only PHPTs.. so nothing is listed here
+
+/**
+ * directory where PHPT tests are located
+ */
+define('XML_UTIL_DIR_PHPT', dirname(__FILE__));
+
+/**
+ * Master Unit Test Suite class for XML_Util
+ * 
+ * This top-level test suite class organizes 
+ * all class test suite files, 
+ * so that the full suite can be run 
+ * by PhpUnit or via "pear run-tests -up xml_util". 
+ *
+ * @category   XML
+ * @package    XML_Util
+ * @subpackage UnitTesting
+ * @author     Chuck Burgess <ashnazg at php.net>
+ * @license    http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/XML_Util
+ * @since      1.2.0a1
+ */
+class XML_Util_AllTests
+{
+
+    /**
+     * Launches the TextUI test runner
+     *
+     * @return void
+     * @uses PHPUnit_TextUI_TestRunner
+     */
+    public static function main()
+    {
+        PHPUnit_TextUI_TestRunner::run(self::suite());
+    }
+
+
+    /**
+     * Adds all class test suites into the master suite
+     *
+     * @return PHPUnit_Framework_TestSuite a master test suite
+     *                                     containing all class test suites
+     * @uses PHPUnit_Framework_TestSuite
+     */ 
+    public static function suite()
+    {
+        $suite = new PHPUnit_Framework_TestSuite(
+            'XML_Util Full Suite of Unit Tests');
+
+        /*
+         * You must add each additional class-level test suite name here
+         */
+        // there are no PhpUnit test files... only PHPTs.. so nothing is listed here
+
+        /*
+         * add PHPT tests
+         */
+        $phpt = new PHPUnit_Extensions_PhptTestSuite(XML_UTIL_DIR_PHPT);
+        $suite->addTestSuite($phpt);
+
+        return $suite;
+    }
+}
+
+/**
+ * Call the main method if this file is executed directly
+ * @internal PhpUnit would have to rename PHPUnit_MAIN_METHOD to PHPUNIT_MAIN_METHOD
+ *           to make this usage meet the PEAR CS... we cannot rename it here.
+ */
+if (PHPUnit_MAIN_METHOD == 'XML_Util_AllTests::main') {
+    XML_Util_AllTests::main();
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+?>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XML_Util-1.2.1/tests/testBasic_apiVersion.phpt                                                      100644    1750    1750          701 11117075466  14537                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::apiVersion() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::apiVersion() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic apiVersion() call" . PHP_EOL;
+echo XML_Util::apiVersion() . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::apiVersion() basic tests=====
+
+TEST:  basic apiVersion() call
+1.1
+                                                               XML_Util-1.2.1/tests/testBasic_attributesToString.phpt                                              100644    1750    1750         7057 11117075466  16333                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::attributesToString() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::attributesToString() basic tests=====' . PHP_EOL . PHP_EOL;
+
+$att = array("foo" => "bar", "boo" => "baz");
+$sort1 = array(
+    'multiline' => true, 
+    'indent'    => '----', 
+    'linebreak' => "^", 
+    'entities'  => XML_UTIL_ENTITIES_XML, 
+    'sort'      => true
+);
+$sort2 = array(
+    'multiline' => true, 
+    'indent'    => '----', 
+    'linebreak' => "^", 
+    'entities'  => XML_UTIL_ENTITIES_XML, 
+);
+
+echo "TEST:  basic usage" . PHP_EOL;
+echo XML_Util::attributesToString($att) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  explicit \$sort = true" . PHP_EOL;
+echo XML_Util::attributesToString($att, true) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  explicit \$sort = false" . PHP_EOL;
+echo XML_Util::attributesToString($att, false) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  explicit \$multiline = false" . PHP_EOL;
+echo XML_Util::attributesToString($att, true, false) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  explicit \$multiline = true" . PHP_EOL;
+echo XML_Util::attributesToString($att, true, true) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  explicit \$indent = '        ' (8 spaces)" . PHP_EOL;
+echo XML_Util::attributesToString($att, true, true, '        ') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  explicit \$linebreak = '^' (some dummy char)" . PHP_EOL;
+echo XML_Util::attributesToString($att, true, true, '^') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  passing \$sort array of options that includes 'sort'" . PHP_EOL;
+echo XML_Util::attributesToString($att, $sort1) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  passing \$sort array of options that doesn't include 'sort'" . PHP_EOL;
+echo XML_Util::attributesToString($att, $sort2) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  do not replace entities" . PHP_EOL;
+$arr = array("foo" => "b@&r", "boo" => "b><z");
+echo XML_Util::attributesToString($arr, true, false, '    ', PHP_EOL, 
+    XML_UTIL_ENTITIES_NONE) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  replace all XML entities" . PHP_EOL;
+$arr = array("foo" => "b@&r", "boo" => "b><z");
+echo XML_Util::attributesToString($arr, true, false, '    ', PHP_EOL, 
+    XML_UTIL_ENTITIES_XML) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  replace only required XML entities" . PHP_EOL;
+$arr = array("foo" => "b@&r", "boo" => "b><z");
+echo XML_Util::attributesToString($arr, true, false, '    ', PHP_EOL, 
+    XML_UTIL_ENTITIES_XML_REQUIRED) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  replace HTML entities" . PHP_EOL;
+$arr = array("foo" => "b@&r", "boo" => "b><z");
+echo XML_Util::attributesToString($arr, true, false, '    ', PHP_EOL, 
+    XML_UTIL_ENTITIES_HTML) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::attributesToString() basic tests=====
+
+TEST:  basic usage
+ boo="baz" foo="bar"
+
+TEST:  explicit $sort = true
+ boo="baz" foo="bar"
+
+TEST:  explicit $sort = false
+ foo="bar" boo="baz"
+
+TEST:  explicit $multiline = false
+ boo="baz" foo="bar"
+
+TEST:  explicit $multiline = true
+ boo="baz"
+    foo="bar"
+
+TEST:  explicit $indent = '        ' (8 spaces)
+ boo="baz"
+        foo="bar"
+
+TEST:  explicit $linebreak = '^' (some dummy char)
+ boo="baz"
+^foo="bar"
+
+TEST:  passing $sort array of options that includes 'sort'
+ boo="baz"
+----foo="bar"
+
+TEST:  passing $sort array of options that doesn't include 'sort'
+ boo="baz"
+----foo="bar"
+
+TEST:  do not replace entities
+ boo="b><z" foo="b@&r"
+
+TEST:  replace all XML entities
+ boo="b&gt;&lt;z" foo="b@&amp;r"
+
+TEST:  replace only required XML entities
+ boo="b>&lt;z" foo="b@&amp;r"
+
+TEST:  replace HTML entities
+ boo="b&gt;&lt;z" foo="b@&amp;r"
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 XML_Util-1.2.1/tests/testBasic_collapseEmptyTags.phpt                                               100644    1750    1750         3403 11117075466  16102                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::collapseEmptyTags() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::collapseEmptyTags() basic tests=====' . PHP_EOL . PHP_EOL;
+
+$emptyTag = "<foo></foo>";
+$otherTag = "<bar>baz</bar>";
+$xhtmlTag = "<b></b>";
+
+echo "TEST:  basic usage" . PHP_EOL;
+echo XML_Util::collapseEmptyTags($emptyTag) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage alongside non-empty tag" . PHP_EOL;
+echo XML_Util::collapseEmptyTags($emptyTag . $otherTag) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  one empty tag, with COLLAPSE_ALL set" . PHP_EOL;
+echo XML_Util::collapseEmptyTags($emptyTag, XML_UTIL_COLLAPSE_ALL) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  one empty tag alongside non-empty tag, with COLLAPSE_ALL set" . PHP_EOL;
+echo XML_Util::collapseEmptyTags($emptyTag . $otherTag, XML_UTIL_COLLAPSE_ALL) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  one empty tag, with COLLAPSE_XHTML_ONLY set" . PHP_EOL;
+echo XML_Util::collapseEmptyTags($emptyTag, XML_UTIL_COLLAPSE_XHTML_ONLY) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  one empty tag alongside non-empty tag, with COLLAPSE_XHTML_ONLY set" . PHP_EOL;
+echo XML_Util::collapseEmptyTags($emptyTag . $xhtmlTag . $otherTag, XML_UTIL_COLLAPSE_XHTML_ONLY) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::collapseEmptyTags() basic tests=====
+
+TEST:  basic usage
+<foo />
+
+TEST:  basic usage alongside non-empty tag
+<foo /><bar>baz</bar>
+
+TEST:  one empty tag, with COLLAPSE_ALL set
+<foo />
+
+TEST:  one empty tag alongside non-empty tag, with COLLAPSE_ALL set
+<foo /><bar>baz</bar>
+
+TEST:  one empty tag, with COLLAPSE_XHTML_ONLY set
+<foo></foo>
+
+TEST:  one empty tag alongside non-empty tag, with COLLAPSE_XHTML_ONLY set
+<foo></foo><b></b><bar>baz</bar>
+                                                                                                                                                                                                                                                             XML_Util-1.2.1/tests/testBasic_createCDataSection.phpt                                              100644    1750    1750          756 11117075466  16117                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::createCDataSection() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::createCDataSection() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage" . PHP_EOL;
+echo XML_Util::createCDataSection("I am content.") . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::createCDataSection() basic tests=====
+
+TEST:  basic usage
+<![CDATA[I am content.]]>
+                  XML_Util-1.2.1/tests/testBasic_createComment.phpt                                                   100644    1750    1750          727 11117075466  15216                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::createComment() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::createComment() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage" . PHP_EOL;
+echo XML_Util::createComment("I am comment.") . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::createComment() basic tests=====
+
+TEST:  basic usage
+<!-- I am comment. -->
+                                         XML_Util-1.2.1/tests/testBasic_createEndElement.phpt                                                100644    1750    1750         1270 11117075466  15646                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::createEndElement() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::createEndElement() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage (myTag)" . PHP_EOL;
+echo XML_Util::createEndElement("myTag") . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a namespaced tag (myNs:myTag)" . PHP_EOL;
+echo XML_Util::createEndElement("myNs:myTag") . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::createEndElement() basic tests=====
+
+TEST:  basic usage (myTag)
+</myTag>
+
+TEST:  basic usage with a namespaced tag (myNs:myTag)
+</myNs:myTag>
+                                                                                                                                                                                                                                                                                                                                        XML_Util-1.2.1/tests/testBasic_createStartElement.phpt                                              100644    1750    1750         7275 11117075466  16250                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::createStartElement() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::createStartElement() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag only" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag"
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar")
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag only, passing '' as attribute arg" . PHP_EOL;
+echo XML_Util::createStartElement(
+    'myNs:myTag',
+    ''
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes and namespace" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar"),
+    "http://www.w3c.org/myNs#"
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with empty attributes, whose namespaceUri is not a full namespace" . PHP_EOL;
+echo XML_Util::createStartElement(
+    'myTag',
+    '',
+    'foo'
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes, namespace, and multiline = true" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar"),
+    "http://www.w3c.org/myNs#",
+    true
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes, namespace, multiline = true, and indent = (2 spaces only)" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar"),
+    "http://www.w3c.org/myNs#",
+    true,
+    '  '
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes, namespace, multiline = true, indent = (2 spaces only), and linebreak = '^'" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar"),
+    "http://www.w3c.org/myNs#",
+    true,
+    '  ',
+    '^'
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes, namespace, multiline = true, indent = (2 spaces only), linebreak = '^', and sortAttributes = true" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar", "boo" => "baz"),
+    "http://www.w3c.org/myNs#",
+    true,
+    '  ',
+    '^',
+    true
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attributes, namespace, multiline = true, indent = (2 spaces only), linebreak = '^', and sortAttributes = false" . PHP_EOL;
+echo XML_Util::createStartElement(
+    "myNs:myTag", 
+    array("foo" => "bar", "boo" => "baz"),
+    "http://www.w3c.org/myNs#",
+    true,
+    '  ',
+    '^',
+    false
+) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::createStartElement() basic tests=====
+
+TEST:  tag only
+<myNs:myTag>
+
+TEST:  tag with attributes
+<myNs:myTag foo="bar">
+
+TEST:  tag only, passing '' as attribute arg
+<myNs:myTag>
+
+TEST:  tag with attributes and namespace
+<myNs:myTag foo="bar" xmlns:myNs="http://www.w3c.org/myNs#">
+
+TEST:  tag with empty attributes, whose namespaceUri is not a full namespace
+<myTag xmlns="foo">
+
+TEST:  tag with attributes, namespace, and multiline = true
+<myNs:myTag foo="bar"
+            xmlns:myNs="http://www.w3c.org/myNs#">
+
+TEST:  tag with attributes, namespace, multiline = true, and indent = (2 spaces only)
+<myNs:myTag foo="bar"
+  xmlns:myNs="http://www.w3c.org/myNs#">
+
+TEST:  tag with attributes, namespace, multiline = true, indent = (2 spaces only), and linebreak = '^'
+<myNs:myTag foo="bar"^  xmlns:myNs="http://www.w3c.org/myNs#">
+
+TEST:  tag with attributes, namespace, multiline = true, indent = (2 spaces only), linebreak = '^', and sortAttributes = true
+<myNs:myTag boo="baz"^  foo="bar"^  xmlns:myNs="http://www.w3c.org/myNs#">
+
+TEST:  tag with attributes, namespace, multiline = true, indent = (2 spaces only), linebreak = '^', and sortAttributes = false
+<myNs:myTag foo="bar"^  boo="baz"^  xmlns:myNs="http://www.w3c.org/myNs#">
+                                                                                                                                                                                                                                                                                                                                   XML_Util-1.2.1/tests/testBasic_createTag.phpt                                                       100644    1750    1750        13434 11117075466  14366                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::createTag() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::createTag() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar")
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute and content" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag"
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, and namespace" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag",
+    "http://www.w3c.org/myNs#"
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, and REPLACE_ENTITIES" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, and CDATA_SECTION" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_CDATA_SECTION
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, and multiline = false" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES,
+    false
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, and multiline = true" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES,
+    true
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, and indent = (2 spaces)" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES,
+    true,
+    '  '
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, indent = (2 spaces), and linebreak = '^'" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES,
+    true,
+    '  ',
+    '^'
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = true" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar", "boo" => "baz"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES,
+    true,
+    '  ',
+    '^',
+    true
+) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = false" . PHP_EOL;
+echo XML_Util::createTag(
+    "myNs:myTag", 
+    array("foo" => "bar", "boo" => "baz"), 
+    "This is inside the tag and has < & @ > in it",
+    "http://www.w3c.org/myNs#",
+    XML_UTIL_REPLACE_ENTITIES,
+    true,
+    '  ',
+    '^',
+    false
+) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::createTag() basic tests=====
+
+TEST:  tag with attribute
+<myNs:myTag foo="bar" />
+
+TEST:  tag with attribute and content
+<myNs:myTag foo="bar">This is inside the tag</myNs:myTag>
+
+TEST:  tag with attribute, content, and namespace
+<myNs:myTag foo="bar" xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, and REPLACE_ENTITIES
+<myNs:myTag foo="bar" xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, and CDATA_SECTION
+<myNs:myTag foo="bar" xmlns:myNs="http://www.w3c.org/myNs#"><![CDATA[This is inside the tag and has < & @ > in it]]></myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, and multiline = false
+<myNs:myTag foo="bar" xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, and multiline = true
+<myNs:myTag foo="bar"
+            xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, and indent = (2 spaces)
+<myNs:myTag foo="bar"
+  xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, indent = (2 spaces), and linebreak = '^'
+<myNs:myTag foo="bar"^  xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = true
+<myNs:myTag boo="baz"^  foo="bar"^  xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+
+TEST:  tag with attribute, content, namespace, REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = false
+<myNs:myTag foo="bar"^  boo="baz"^  xmlns:myNs="http://www.w3c.org/myNs#">This is inside the tag and has &lt; &amp; @ &gt; in it</myNs:myTag>
+                                                                                                                                                                                                                                    XML_Util-1.2.1/tests/testBasic_createTagFromArray.phpt                                              100644    1750    1750        22131 11117075466  16203                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::createTagFromArray() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::createTagFromArray() basic tests=====' . PHP_EOL . PHP_EOL;
+
+$bad = array(
+    "foo" => "bar",
+);
+$tag1 = array(
+    "qname"        => "foo:bar",
+);
+$tag2 = array(
+    "qname"        => "foo:bar",
+    "namespaceUri" => "http://foo.com",
+);
+$tag3 = array(
+    "qname"        => "foo:bar",
+    "namespaceUri" => "http://foo.com",
+    "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
+);
+$tag4 = array(
+    "qname"        => "foo:bar",
+    "namespaceUri" => "http://foo.com",
+    "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
+    "content"      => "I'm inside the tag",
+);
+$tag5 = array(
+    "qname"        => "foo:bar",
+    "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
+    "content"      => "I'm inside the tag",
+);
+$tag6 = array(
+    "qname"        => "foo:bar",
+    "namespaceUri" => "http://foo.com",
+    "content"      => "I'm inside the tag",
+);
+$tag7 = array(
+    "namespaceUri" => "http://foo.com",
+    "attributes"   => array( "key" => "value", "argh" => "fruit&vegetable" ),
+    "content"      => "I'm inside the tag",
+);
+
+$tag8 = array(
+    'content'      => array('foo', 'bar')
+);
+
+$tag9 = array(
+    'qname'        => 'foo:bar',
+    'namespaces'   => array('ns1' => 'uri1', 'ns2' => 'uri2')
+);
+
+$tag10 = array(
+    'namespace'    => 'http://foo.org',
+    'localPart'    => 'bar'
+);
+
+$tag11 = array(
+    'namespace'    => '',
+    'localPart'    => 'bar'
+);
+
+$tag12 = array(
+    'localPart'    => 'foo',
+    'namespaceUri' => 'http://bar.org'
+);
+
+echo "TEST:  basic usage with an invalid array" . PHP_EOL;
+echo XML_Util::createTagFromArray($bad) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname only)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag1) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname and namespaceUri)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag2) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, and attributes)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag3) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, attributes, and content)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag5) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, and content)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag6) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (namespaceUri, attributes, and content)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag7) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), plus REPLACE_ENTITIES" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), plus ENTITIES_NONE" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_ENTITIES_NONE) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, and multiline = false" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES, false) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, and multiline = true" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES, true) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, and indent = (2 spaces)" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES, true, '  ') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, indent = (2 spaces), and linebreak = '^'" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES, true, '  ', '^') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = true" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES, true, '  ', '^', true) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = false" . PHP_EOL;
+echo XML_Util::createTagFromArray($tag4, XML_UTIL_REPLACE_ENTITIES, true, '  ', '^', false) . PHP_EOL . PHP_EOL;
+
+echo 'TEST:  cause a non-scalar error on the content tag' . PHP_EOL;
+echo XML_Util::createTagFromArray($tag8) . PHP_EOL . PHP_EOL;
+
+echo 'TEST:  handle an array of namespaces being passed' . PHP_EOL;
+echo XML_Util::createTagFromArray($tag9) . PHP_EOL . PHP_EOL;
+
+echo 'TEST:  qname is derived from namespace + localPart' . PHP_EOL;
+echo XML_Util::createTagFromArray($tag10) . PHP_EOL . PHP_EOL;
+
+echo 'TEST:  qname is derived from localPart only' . PHP_EOL;
+echo XML_Util::createTagFromArray($tag11) . PHP_EOL . PHP_EOL;
+
+echo 'TEST:  namespaceUri is given, but namespace is not' . PHP_EOL;
+echo XML_Util::createTagFromArray($tag12) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::createTagFromArray() basic tests=====
+
+TEST:  basic usage with an invalid array
+You must either supply a qualified name (qname) or local tag name (localPart).
+
+TEST:  basic usage with a valid array (qname only)
+<foo:bar />
+
+TEST:  basic usage with a valid array (qname and namespaceUri)
+<foo:bar xmlns:foo="http://foo.com" />
+
+TEST:  basic usage with a valid array (qname, namespaceUri, and attributes)
+<foo:bar argh="fruit&amp;vegetable" key="value" xmlns:foo="http://foo.com" />
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content)
+<foo:bar argh="fruit&amp;vegetable" key="value" xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, attributes, and content)
+<foo:bar argh="fruit&amp;vegetable" key="value">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, and content)
+<foo:bar xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (namespaceUri, attributes, and content)
+You must either supply a qualified name (qname) or local tag name (localPart).
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), plus REPLACE_ENTITIES
+<foo:bar argh="fruit&amp;vegetable" key="value" xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), plus ENTITIES_NONE
+<foo:bar argh="fruit&vegetable" key="value" xmlns:foo="http://foo.com">I'm inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, and multiline = false
+<foo:bar argh="fruit&amp;vegetable" key="value" xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, and multiline = true
+<foo:bar argh="fruit&amp;vegetable"
+         key="value"
+         xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, and indent = (2 spaces)
+<foo:bar argh="fruit&amp;vegetable"
+  key="value"
+  xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, indent = (2 spaces), and linebreak = '^'
+<foo:bar argh="fruit&amp;vegetable"^  key="value"^  xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = true
+<foo:bar argh="fruit&amp;vegetable"^  key="value"^  xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  basic usage with a valid array (qname, namespaceUri, attributes, and content), REPLACE_ENTITIES, multiline = true, indent = (2 spaces), linebreak = '^', and sortAttributes = false
+<foo:bar key="value"^  argh="fruit&amp;vegetable"^  xmlns:foo="http://foo.com">I&apos;m inside the tag</foo:bar>
+
+TEST:  cause a non-scalar error on the content tag
+Supplied non-scalar value as tag content
+
+TEST:  handle an array of namespaces being passed
+<foo:bar xmlns:ns1="uri1" xmlns:ns2="uri2" />
+
+TEST:  qname is derived from namespace + localPart
+<http://foo.org:bar />
+
+TEST:  qname is derived from localPart only
+<bar />
+
+TEST:  namespaceUri is given, but namespace is not
+<foo xmlns="http://bar.org" />
+                                                                                                                                                                                                                                                                                                                                                                                                                                       XML_Util-1.2.1/tests/testBasic_getDocTypeDeclaration.phpt                                           100644    1750    1750         2754 11117075466  16667                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::getDocTypeDeclaration() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::getDocTypeDeclaration() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using root only" . PHP_EOL;
+echo XML_Util::getDocTypeDeclaration("rootTag") . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using root and a string URI" . PHP_EOL;
+echo XML_Util::getDocTypeDeclaration("rootTag", "myDocType.dtd") . PHP_EOL . PHP_EOL;
+
+$uri = array(
+    'uri' => 'http://pear.php.net/dtd/package-1.0',
+    'id' => '-//PHP//PEAR/DTD PACKAGE 0.1'
+);
+$dtdEntry = '<!ELEMENT additionalInfo (#PCDATA)>';
+
+echo "TEST:  using root and an array URI" . PHP_EOL;
+echo XML_Util::getDocTypeDeclaration("rootTag", $uri) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using root and an array URI and an internal DTD entry" . PHP_EOL;
+echo XML_Util::getDocTypeDeclaration("rootTag", $uri, $dtdEntry) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::getDocTypeDeclaration() basic tests=====
+
+TEST:  using root only
+<!DOCTYPE rootTag>
+
+TEST:  using root and a string URI
+<!DOCTYPE rootTag SYSTEM "myDocType.dtd">
+
+TEST:  using root and an array URI
+<!DOCTYPE rootTag PUBLIC "-//PHP//PEAR/DTD PACKAGE 0.1" "http://pear.php.net/dtd/package-1.0">
+
+TEST:  using root and an array URI and an internal DTD entry
+<!DOCTYPE rootTag PUBLIC "-//PHP//PEAR/DTD PACKAGE 0.1" "http://pear.php.net/dtd/package-1.0" [
+<!ELEMENT additionalInfo (#PCDATA)>
+]>
+                    XML_Util-1.2.1/tests/testBasic_getXmlDeclaration.phpt                                               100644    1750    1750         2217 11117075466  16052                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::getXmlDeclaration() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::getXmlDeclaration() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using version only" . PHP_EOL;
+echo XML_Util::getXMLDeclaration("1.0") . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using version and encoding" . PHP_EOL;
+echo XML_Util::getXMLDeclaration("1.0", "UTF-8") . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using version, encoding, and standalone flag" . PHP_EOL;
+echo XML_Util::getXMLDeclaration("1.0", "UTF-8", true) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  using version and standalone flag" . PHP_EOL;
+echo XML_Util::getXMLDeclaration("1.0", null, true) . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::getXmlDeclaration() basic tests=====
+
+TEST:  using version only
+<?xml version="1.0"?>
+
+TEST:  using version and encoding
+<?xml version="1.0" encoding="UTF-8"?>
+
+TEST:  using version, encoding, and standalone flag
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+TEST:  using version and standalone flag
+<?xml version="1.0" standalone="yes"?>
+                                                                                                                                                                                                                                                                                                                                                                                 XML_Util-1.2.1/tests/testBasic_isValidName.phpt                                                     100644    1750    1750         2602 11117075466  14636                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::isValidName() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::isValidName() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  valid tag" . PHP_EOL;
+$result = XML_Util::isValidName("alpha-x_y_z.123");
+if (is_a($result, 'PEAR_Error')) {
+    print "Invalid XML name: " . $result->getMessage() . PHP_EOL . PHP_EOL;
+} else {
+    print "Valid XML name." . PHP_EOL . PHP_EOL;
+}
+
+echo "TEST:  invalid tag" . PHP_EOL;
+$result = XML_Util::isValidName("invalidTag?");
+if (is_a($result, 'PEAR_Error')) {
+    print "Invalid XML name: " . $result->getMessage() . PHP_EOL . PHP_EOL;
+} else {
+    print "Valid XML name." . PHP_EOL . PHP_EOL;
+}
+
+echo "TEST:  invalid tag that doesn't start with a letter" . PHP_EOL;
+$result = XML_Util::isValidName("1234five");
+if (is_a($result, 'PEAR_Error')) {
+    print "Invalid XML name: " . $result->getMessage() . PHP_EOL . PHP_EOL;
+} else {
+    print "Valid XML name." . PHP_EOL . PHP_EOL;
+}
+
+?>
+--EXPECT--
+=====XML_Util::isValidName() basic tests=====
+
+TEST:  valid tag
+Valid XML name.
+
+TEST:  invalid tag
+Invalid XML name: XML names may only contain alphanumeric chars, period, hyphen, colon and underscores
+
+TEST:  invalid tag that doesn't start with a letter
+Invalid XML name: XML names may only start with letter or underscore
+                                                                                                                              XML_Util-1.2.1/tests/testBasic_raiseError.phpt                                                      100644    1750    1750          766 11117075466  14550                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::raiseError() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::raiseError() basic tests=====' . PHP_EOL . PHP_EOL;
+
+$error = XML_Util::raiseError("I am an error", 12345);
+if (is_a($error, 'PEAR_Error')) {
+    print "PEAR Error: " . $error->getMessage() . PHP_EOL;
+}
+?>
+--EXPECT--
+=====XML_Util::raiseError() basic tests=====
+
+PEAR Error: I am an error
+          XML_Util-1.2.1/tests/testBasic_replaceEntities.phpt                                                 100644    1750    1750         6260 11117075466  15566                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::replaceEntities() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::replaceEntities() basic tests=====' . PHP_EOL . PHP_EOL;
+
+$data = 'This string contains < & >.';
+$utf8 = 'This data contains special chars like <, >, & and " as well as ä, ö, ß, à and ê';
+
+echo "TEST:  basic usage" . PHP_EOL;
+echo XML_Util::replaceEntities($data) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage but with bogus \$replaceEntities arg" . PHP_EOL;
+echo XML_Util::replaceEntities($data, 'I_AM_BOGUS') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML" . PHP_EOL;
+echo XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_XML) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML and UTF-8" . PHP_EOL;
+echo XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_XML, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  utf8 usage with ENTITIES_XML and UTF-8" . PHP_EOL;
+echo XML_Util::replaceEntities($utf8, XML_UTIL_ENTITIES_XML, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML_REQUIRED" . PHP_EOL;
+echo XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_XML_REQUIRED) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML_REQUIRED and UTF-8" . PHP_EOL;
+echo XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_XML_REQUIRED, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  utf8 usage with ENTITIES_XML_REQUIRED and UTF-8" . PHP_EOL;
+echo XML_Util::replaceEntities($utf8, XML_UTIL_ENTITIES_XML_REQUIRED, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_HTML" . PHP_EOL;
+echo XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_HTML) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_HTML and UTF-8" . PHP_EOL;
+echo XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_HTML, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  utf8 usage with ENTITIES_HTML and UTF-8" . PHP_EOL;
+echo XML_Util::replaceEntities($utf8, XML_UTIL_ENTITIES_HTML, 'UTF-8') . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::replaceEntities() basic tests=====
+
+TEST:  basic usage
+This string contains &lt; &amp; &gt;.
+
+TEST:  basic usage but with bogus $replaceEntities arg
+This string contains < & >.
+
+TEST:  basic usage with ENTITIES_XML
+This string contains &lt; &amp; &gt;.
+
+TEST:  basic usage with ENTITIES_XML and UTF-8
+This string contains &lt; &amp; &gt;.
+
+TEST:  utf8 usage with ENTITIES_XML and UTF-8
+This data contains special chars like &lt;, &gt;, &amp; and &quot; as well as ä, ö, ß, à and ê
+
+TEST:  basic usage with ENTITIES_XML_REQUIRED
+This string contains &lt; &amp; >.
+
+TEST:  basic usage with ENTITIES_XML_REQUIRED and UTF-8
+This string contains &lt; &amp; >.
+
+TEST:  utf8 usage with ENTITIES_XML_REQUIRED and UTF-8
+This data contains special chars like &lt;, >, &amp; and &quot; as well as ä, ö, ß, à and ê
+
+TEST:  basic usage with ENTITIES_HTML
+This string contains &lt; &amp; &gt;.
+
+TEST:  basic usage with ENTITIES_HTML and UTF-8
+This string contains &lt; &amp; &gt;.
+
+TEST:  utf8 usage with ENTITIES_HTML and UTF-8
+This data contains special chars like &lt;, &gt;, &amp; and &quot; as well as &auml;, &ouml;, &szlig;, &agrave; and &ecirc;
+
+                                                                                                                                                                                                                                                                                                                                                XML_Util-1.2.1/tests/testBasic_reverseEntities.phpt                                                 100644    1750    1750         6241 11117075466  15625                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::reverseEntities() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::reverseEntities() basic tests=====' . PHP_EOL . PHP_EOL;
+
+$data = 'This string contains &lt; &amp; &gt;.';
+$utf8 = 'This data contains special chars like &lt;, &gt;, &amp; and &quot; as well as &auml;, &ouml;, &szlig;, &agrave; and &ecirc;';
+
+echo "TEST:  basic usage" . PHP_EOL;
+echo XML_Util::reverseEntities($data) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage but with bogus \$replaceEntities arg" . PHP_EOL;
+echo XML_Util::reverseEntities($data, 'I_AM_BOGUS') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML" . PHP_EOL;
+echo XML_Util::reverseEntities($data, XML_UTIL_ENTITIES_XML) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML and UTF-8" . PHP_EOL;
+echo XML_Util::reverseEntities($data, XML_UTIL_ENTITIES_XML, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  utf8 usage with ENTITIES_XML and UTF-8" . PHP_EOL;
+echo XML_Util::reverseEntities($utf8, XML_UTIL_ENTITIES_XML, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML_REQUIRED" . PHP_EOL;
+echo XML_Util::reverseEntities($data, XML_UTIL_ENTITIES_XML_REQUIRED) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_XML_REQUIRED and UTF-8" . PHP_EOL;
+echo XML_Util::reverseEntities($data, XML_UTIL_ENTITIES_XML_REQUIRED, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  utf8 usage with ENTITIES_XML_REQUIRED and UTF-8" . PHP_EOL;
+echo XML_Util::reverseEntities($utf8, XML_UTIL_ENTITIES_XML_REQUIRED, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_HTML" . PHP_EOL;
+echo XML_Util::reverseEntities($data, XML_UTIL_ENTITIES_HTML) . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage with ENTITIES_HTML and UTF-8" . PHP_EOL;
+echo XML_Util::reverseEntities($data, XML_UTIL_ENTITIES_HTML, 'UTF-8') . PHP_EOL . PHP_EOL;
+
+echo "TEST:  utf8 usage with ENTITIES_HTML and UTF-8" . PHP_EOL;
+echo XML_Util::reverseEntities($utf8, XML_UTIL_ENTITIES_HTML, 'UTF-8') . PHP_EOL . PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::reverseEntities() basic tests=====
+
+TEST:  basic usage
+This string contains < & >.
+
+TEST:  basic usage but with bogus $replaceEntities arg
+This string contains &lt; &amp; &gt;.
+
+TEST:  basic usage with ENTITIES_XML
+This string contains < & >.
+
+TEST:  basic usage with ENTITIES_XML and UTF-8
+This string contains < & >.
+
+TEST:  utf8 usage with ENTITIES_XML and UTF-8
+This data contains special chars like <, >, & and " as well as &auml;, &ouml;, &szlig;, &agrave; and &ecirc;
+
+TEST:  basic usage with ENTITIES_XML_REQUIRED
+This string contains < & &gt;.
+
+TEST:  basic usage with ENTITIES_XML_REQUIRED and UTF-8
+This string contains < & &gt;.
+
+TEST:  utf8 usage with ENTITIES_XML_REQUIRED and UTF-8
+This data contains special chars like <, &gt;, & and " as well as &auml;, &ouml;, &szlig;, &agrave; and &ecirc;
+
+TEST:  basic usage with ENTITIES_HTML
+This string contains < & >.
+
+TEST:  basic usage with ENTITIES_HTML and UTF-8
+This string contains < & >.
+
+TEST:  utf8 usage with ENTITIES_HTML and UTF-8
+This data contains special chars like <, >, & and " as well as ä, ö, ß, à and ê
+                                                                                                                                                                                                                                                                                                                                                               XML_Util-1.2.1/tests/testBasic_splitQualifiedName.phpt                                              100644    1750    1750         1727 11117075466  16231                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util::splitQualifiedName() basic tests
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util::splitQualifiedName() basic tests=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  basic usage without namespace" . PHP_EOL;
+$return = XML_Util::splitQualifiedName("xslt:stylesheet");
+echo "namespace => " . $return['namespace'] . PHP_EOL;
+echo "localPart => " . $return['localPart'] . PHP_EOL;
+echo PHP_EOL;
+
+echo "TEST:  basic usage with namespace" . PHP_EOL;
+$return = XML_Util::splitQualifiedName("stylesheet", "myNs");
+echo "namespace => " . $return['namespace'] . PHP_EOL;
+echo "localPart => " . $return['localPart'] . PHP_EOL;
+echo PHP_EOL;
+?>
+--EXPECT--
+=====XML_Util::splitQualifiedName() basic tests=====
+
+TEST:  basic usage without namespace
+namespace => xslt
+localPart => stylesheet
+
+TEST:  basic usage with namespace
+namespace => myNs
+localPart => stylesheet
+                                         XML_Util-1.2.1/tests/testBug_4950.phpt                                                              100644    1750    1750         1243 11117075466  12537                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util tests for Bug #4950 "Incorrect CDATA serializing"
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util tests for Bug #4950 "Incorrect CDATA serializing"=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  test case provided in bug report" . PHP_EOL;
+echo XML_Util::createTag("test", array(), "Content ]]></test> here!",
+    null, XML_UTIL_CDATA_SECTION) . PHP_EOL;
+
+?>
+--EXPECT--
+=====XML_Util tests for Bug #4950 "Incorrect CDATA serializing"=====
+
+TEST:  test case provided in bug report
+<test><![CDATA[Content ]]]]><![CDATA[></test> here!]]></test>
+
+                                                                                                                                                                                                                                                                                                                                                             XML_Util-1.2.1/tests/testBug_5392.phpt                                                              100644    1750    1750         2111 11117075466  12533                                                                                                                                                                                                                                                                                                                                                                      --TEST--
+XML_Util tests for Bug #5392 "encoding of ISO-8859-1 is the only supported encoding"
+--CREDITS--
+Chuck Burgess <ashnazg at php.net>
+# created for v1.2.0a1 2008-05-04
+--FILE--
+<?php
+require_once 'XML' . DIRECTORY_SEPARATOR . 'Util.php';
+echo '=====XML_Util tests for Bug #5392 "encoding of ISO-8859-1 is the only supported encoding"=====' . PHP_EOL . PHP_EOL;
+
+echo "TEST:  test case provided in bug report" . PHP_EOL;
+$data = 'This data contains special chars like <, >, & and " as well as ä, ö, ß, à and ê';
+
+$replaced = XML_Util::replaceEntities($data, XML_UTIL_ENTITIES_HTML, 'UTF-8');
+
+$reversed = XML_Util::reverseEntities($replaced, XML_UTIL_ENTITIES_HTML, 'UTF-8');
+
+echo $replaced . PHP_EOL;
+echo $reversed . PHP_EOL;
+
+?>
+--EXPECT--
+=====XML_Util tests for Bug #5392 "encoding of ISO-8859-1 is the only supported encoding"=====
+
+TEST:  test case provided in bug report
+This data contains special chars like &lt;, &gt;, &amp; and &quot; as well as &auml;, &ouml;, &szlig;, &agrave; and &ecirc;
+This data contains special chars like <, >, & and " as well as ä, ö, ß, à and ê
+                                                                                                                                                                                                                                                                                                                                                                                                                                                       XML_Util-1.2.1/Util.php                                                                             100644    1750    1750        73350 11117075466  10060                                                                                                                                                                                                                                                                                                                                                                      <?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * XML_Util
+ *
+ * XML Utilities package
+ * 
+ * PHP versions 4 and 5
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2003-2008 Stephan Schmidt <schst at php.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *    * The name of the author may not be used to endorse or promote products
+ *      derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category  XML
+ * @package   XML_Util
+ * @author    Stephan Schmidt <schst at php.net>
+ * @copyright 2003-2008 Stephan Schmidt <schst at php.net>
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version   CVS: $Id: Util.php,v 1.38 2008/11/13 00:03:38 ashnazg Exp $
+ * @link      http://pear.php.net/package/XML_Util
+ */
+
+/**
+ * error code for invalid chars in XML name
+ */
+define('XML_UTIL_ERROR_INVALID_CHARS', 51);
+
+/**
+ * error code for invalid chars in XML name
+ */
+define('XML_UTIL_ERROR_INVALID_START', 52);
+
+/**
+ * error code for non-scalar tag content
+ */
+define('XML_UTIL_ERROR_NON_SCALAR_CONTENT', 60);
+
+/**
+ * error code for missing tag name
+ */
+define('XML_UTIL_ERROR_NO_TAG_NAME', 61);
+
+/**
+ * replace XML entities
+ */
+define('XML_UTIL_REPLACE_ENTITIES', 1);
+
+/**
+ * embedd content in a CData Section
+ */
+define('XML_UTIL_CDATA_SECTION', 5);
+
+/**
+ * do not replace entitites
+ */
+define('XML_UTIL_ENTITIES_NONE', 0);
+
+/**
+ * replace all XML entitites
+ * This setting will replace <, >, ", ' and &
+ */
+define('XML_UTIL_ENTITIES_XML', 1);
+
+/**
+ * replace only required XML entitites
+ * This setting will replace <, " and &
+ */
+define('XML_UTIL_ENTITIES_XML_REQUIRED', 2);
+
+/**
+ * replace HTML entitites
+ * @link http://www.php.net/htmlentities
+ */
+define('XML_UTIL_ENTITIES_HTML', 3);
+
+/**
+ * Collapse all empty tags.
+ */
+define('XML_UTIL_COLLAPSE_ALL', 1);
+
+/**
+ * Collapse only empty XHTML tags that have no end tag.
+ */
+define('XML_UTIL_COLLAPSE_XHTML_ONLY', 2);
+
+/**
+ * utility class for working with XML documents
+ *
+
+ * @category  XML
+ * @package   XML_Util
+ * @author    Stephan Schmidt <schst at php.net>
+ * @copyright 2003-2008 Stephan Schmidt <schst at php.net>
+ * @license   http://opensource.org/licenses/bsd-license New BSD License
+ * @version   Release: 1.2.1
+ * @link      http://pear.php.net/package/XML_Util
+ */
+class XML_Util
+{
+    /**
+     * return API version
+     *
+     * @return string $version API version
+     * @access public
+     * @static
+     */
+    function apiVersion()
+    {
+        return '1.1';
+    }
+
+    /**
+     * replace XML entities
+     *
+     * With the optional second parameter, you may select, which
+     * entities should be replaced.
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // replace XML entites:
+     * $string = XML_Util::replaceEntities('This string contains < & >.');
+     * </code>
+     *
+     * With the optional third parameter, you may pass the character encoding
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // replace XML entites in UTF-8:
+     * $string = XML_Util::replaceEntities(
+     *     'This string contains < & > as well as ä, ö, ß, à and ê',
+     *     XML_UTIL_ENTITIES_HTML,
+     *     'UTF-8'
+     * );
+     * </code>
+     *
+     * @param string $string          string where XML special chars 
+     *                                should be replaced
+     * @param int    $replaceEntities setting for entities in attribute values 
+     *                                (one of XML_UTIL_ENTITIES_XML, 
+     *                                XML_UTIL_ENTITIES_XML_REQUIRED, 
+     *                                XML_UTIL_ENTITIES_HTML)
+     * @param string $encoding        encoding value (if any)...
+     *                                must be a valid encoding as determined
+     *                                by the htmlentities() function
+     *
+     * @return string string with replaced chars
+     * @access public
+     * @static
+     * @see reverseEntities()
+     */
+    function replaceEntities($string, $replaceEntities = XML_UTIL_ENTITIES_XML,
+        $encoding = 'ISO-8859-1')
+    {
+        switch ($replaceEntities) {
+        case XML_UTIL_ENTITIES_XML:
+            return strtr($string, array(
+                '&'  => '&amp;',
+                '>'  => '&gt;',
+                '<'  => '&lt;',
+                '"'  => '&quot;',
+                '\'' => '&apos;' ));
+            break;
+        case XML_UTIL_ENTITIES_XML_REQUIRED:
+            return strtr($string, array(
+                '&' => '&amp;',
+                '<' => '&lt;',
+                '"' => '&quot;' ));
+            break;
+        case XML_UTIL_ENTITIES_HTML:
+            return htmlentities($string, ENT_COMPAT, $encoding);
+            break;
+        }
+        return $string;
+    }
+
+    /**
+     * reverse XML entities
+     *
+     * With the optional second parameter, you may select, which
+     * entities should be reversed.
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // reverse XML entites:
+     * $string = XML_Util::reverseEntities('This string contains &lt; &amp; &gt;.');
+     * </code>
+     *
+     * With the optional third parameter, you may pass the character encoding
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // reverse XML entites in UTF-8:
+     * $string = XML_Util::reverseEntities(
+     *     'This string contains &lt; &amp; &gt; as well as'
+     *     . ' &auml;, &ouml;, &szlig;, &agrave; and &ecirc;',
+     *     XML_UTIL_ENTITIES_HTML,
+     *     'UTF-8'
+     * );
+     * </code>
+     *
+     * @param string $string          string where XML special chars 
+     *                                should be replaced
+     * @param int    $replaceEntities setting for entities in attribute values 
+     *                                (one of XML_UTIL_ENTITIES_XML, 
+     *                                XML_UTIL_ENTITIES_XML_REQUIRED, 
+     *                                XML_UTIL_ENTITIES_HTML)
+     * @param string $encoding        encoding value (if any)...
+     *                                must be a valid encoding as determined
+     *                                by the html_entity_decode() function
+     *
+     * @return string string with replaced chars
+     * @access public
+     * @static
+     * @see replaceEntities()
+     */
+    function reverseEntities($string, $replaceEntities = XML_UTIL_ENTITIES_XML,
+        $encoding = 'ISO-8859-1')
+    {
+        switch ($replaceEntities) {
+        case XML_UTIL_ENTITIES_XML:
+            return strtr($string, array(
+                '&amp;'  => '&',
+                '&gt;'   => '>',
+                '&lt;'   => '<',
+                '&quot;' => '"',
+                '&apos;' => '\'' ));
+            break;
+        case XML_UTIL_ENTITIES_XML_REQUIRED:
+            return strtr($string, array(
+                '&amp;'  => '&',
+                '&lt;'   => '<',
+                '&quot;' => '"' ));
+            break;
+        case XML_UTIL_ENTITIES_HTML:
+            return html_entity_decode($string, ENT_COMPAT, $encoding);
+            break;
+        }
+        return $string;
+    }
+
+    /**
+     * build an xml declaration
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // get an XML declaration:
+     * $xmlDecl = XML_Util::getXMLDeclaration('1.0', 'UTF-8', true);
+     * </code>
+     *
+     * @param string $version    xml version
+     * @param string $encoding   character encoding
+     * @param bool   $standalone document is standalone (or not)
+     *
+     * @return string xml declaration
+     * @access public
+     * @static
+     * @uses attributesToString() to serialize the attributes of the XML declaration
+     */
+    function getXMLDeclaration($version = '1.0', $encoding = null, 
+        $standalone = null)
+    {
+        $attributes = array(
+            'version' => $version,
+        );
+        // add encoding
+        if ($encoding !== null) {
+            $attributes['encoding'] = $encoding;
+        }
+        // add standalone, if specified
+        if ($standalone !== null) {
+            $attributes['standalone'] = $standalone ? 'yes' : 'no';
+        }
+
+        return sprintf('<?xml%s?>', 
+            XML_Util::attributesToString($attributes, false));
+    }
+
+    /**
+     * build a document type declaration
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // get a doctype declaration:
+     * $xmlDecl = XML_Util::getDocTypeDeclaration('rootTag','myDocType.dtd');
+     * </code>
+     *
+     * @param string $root        name of the root tag
+     * @param string $uri         uri of the doctype definition 
+     *                            (or array with uri and public id)
+     * @param string $internalDtd internal dtd entries
+     *
+     * @return string doctype declaration
+     * @access public
+     * @static
+     * @since 0.2
+     */
+    function getDocTypeDeclaration($root, $uri = null, $internalDtd = null)
+    {
+        if (is_array($uri)) {
+            $ref = sprintf(' PUBLIC "%s" "%s"', $uri['id'], $uri['uri']);
+        } elseif (!empty($uri)) {
+            $ref = sprintf(' SYSTEM "%s"', $uri);
+        } else {
+            $ref = '';
+        }
+
+        if (empty($internalDtd)) {
+            return sprintf('<!DOCTYPE %s%s>', $root, $ref);
+        } else {
+            return sprintf("<!DOCTYPE %s%s [\n%s\n]>", $root, $ref, $internalDtd);
+        }
+    }
+
+    /**
+     * create string representation of an attribute list
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // build an attribute string
+     * $att = array(
+     *              'foo'   =>  'bar',
+     *              'argh'  =>  'tomato'
+     *            );
+     *
+     * $attList = XML_Util::attributesToString($att);
+     * </code>
+     *
+     * @param array      $attributes attribute array
+     * @param bool|array $sort       sort attribute list alphabetically, 
+     *                               may also be an assoc array containing 
+     *                               the keys 'sort', 'multiline', 'indent', 
+     *                               'linebreak' and 'entities'
+     * @param bool       $multiline  use linebreaks, if more than 
+     *                               one attribute is given
+     * @param string     $indent     string used for indentation of 
+     *                               multiline attributes
+     * @param string     $linebreak  string used for linebreaks of 
+     *                               multiline attributes
+     * @param int        $entities   setting for entities in attribute values 
+     *                               (one of XML_UTIL_ENTITIES_NONE, 
+     *                               XML_UTIL_ENTITIES_XML, 
+     *                               XML_UTIL_ENTITIES_XML_REQUIRED, 
+     *                               XML_UTIL_ENTITIES_HTML)
+     *
+     * @return string string representation of the attributes
+     * @access public
+     * @static
+     * @uses replaceEntities() to replace XML entities in attribute values
+     * @todo allow sort also to be an options array
+     */
+    function attributesToString($attributes, $sort = true, $multiline = false, 
+        $indent = '    ', $linebreak = "\n", $entities = XML_UTIL_ENTITIES_XML)
+    {
+        /*
+         * second parameter may be an array
+         */
+        if (is_array($sort)) {
+            if (isset($sort['multiline'])) {
+                $multiline = $sort['multiline'];
+            }
+            if (isset($sort['indent'])) {
+                $indent = $sort['indent'];
+            }
+            if (isset($sort['linebreak'])) {
+                $multiline = $sort['linebreak'];
+            }
+            if (isset($sort['entities'])) {
+                $entities = $sort['entities'];
+            }
+            if (isset($sort['sort'])) {
+                $sort = $sort['sort'];
+            } else {
+                $sort = true;
+            }
+        }
+        $string = '';
+        if (is_array($attributes) && !empty($attributes)) {
+            if ($sort) {
+                ksort($attributes);
+            }
+            if ( !$multiline || count($attributes) == 1) {
+                foreach ($attributes as $key => $value) {
+                    if ($entities != XML_UTIL_ENTITIES_NONE) {
+                        if ($entities === XML_UTIL_CDATA_SECTION) {
+                            $entities = XML_UTIL_ENTITIES_XML;
+                        }
+                        $value = XML_Util::replaceEntities($value, $entities);
+                    }
+                    $string .= ' ' . $key . '="' . $value . '"';
+                }
+            } else {
+                $first = true;
+                foreach ($attributes as $key => $value) {
+                    if ($entities != XML_UTIL_ENTITIES_NONE) {
+                        $value = XML_Util::replaceEntities($value, $entities);
+                    }
+                    if ($first) {
+                        $string .= ' ' . $key . '="' . $value . '"';
+                        $first   = false;
+                    } else {
+                        $string .= $linebreak . $indent . $key . '="' . $value . '"';
+                    }
+                }
+            }
+        }
+        return $string;
+    }
+
+    /**
+     * Collapses empty tags.
+     *
+     * @param string $xml  XML
+     * @param int    $mode Whether to collapse all empty tags (XML_UTIL_COLLAPSE_ALL)
+     *                      or only XHTML (XML_UTIL_COLLAPSE_XHTML_ONLY) ones.
+     *
+     * @return string XML
+     * @access public
+     * @static
+     * @todo PEAR CS - unable to avoid "space after open parens" error
+     *       in the IF branch
+     */
+    function collapseEmptyTags($xml, $mode = XML_UTIL_COLLAPSE_ALL) 
+    {
+        if ($mode == XML_UTIL_COLLAPSE_XHTML_ONLY) {
+            return preg_replace(
+                '/<(area|base(?:font)?|br|col|frame|hr|img|input|isindex|link|meta|'
+                . 'param)([^>]*)><\/\\1>/s',
+                '<\\1\\2 />',
+                $xml);
+        } else {
+            return preg_replace('/<(\w+)([^>]*)><\/\\1>/s', '<\\1\\2 />', $xml);
+        }
+    }
+
+    /**
+     * create a tag
+     *
+     * This method will call XML_Util::createTagFromArray(), which
+     * is more flexible.
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML tag:
+     * $tag = XML_Util::createTag('myNs:myTag', 
+     *     array('foo' => 'bar'), 
+     *     'This is inside the tag', 
+     *     'http://www.w3c.org/myNs#');
+     * </code>
+     *
+     * @param string $qname           qualified tagname (including namespace)
+     * @param array  $attributes      array containg attributes
+     * @param mixed  $content         the content
+     * @param string $namespaceUri    URI of the namespace
+     * @param int    $replaceEntities whether to replace XML special chars in 
+     *                                content, embedd it in a CData section 
+     *                                or none of both
+     * @param bool   $multiline       whether to create a multiline tag where 
+     *                                each attribute gets written to a single line
+     * @param string $indent          string used to indent attributes 
+     *                                (_auto indents attributes so they start 
+     *                                at the same column)
+     * @param string $linebreak       string used for linebreaks
+     * @param bool   $sortAttributes  Whether to sort the attributes or not
+     *
+     * @return string XML tag
+     * @access public
+     * @static
+     * @see createTagFromArray()
+     * @uses createTagFromArray() to create the tag
+     */
+    function createTag($qname, $attributes = array(), $content = null, 
+        $namespaceUri = null, $replaceEntities = XML_UTIL_REPLACE_ENTITIES, 
+        $multiline = false, $indent = '_auto', $linebreak = "\n", 
+        $sortAttributes = true)
+    {
+        $tag = array(
+            'qname'      => $qname,
+            'attributes' => $attributes
+        );
+
+        // add tag content
+        if ($content !== null) {
+            $tag['content'] = $content;
+        }
+
+        // add namespace Uri
+        if ($namespaceUri !== null) {
+            $tag['namespaceUri'] = $namespaceUri;
+        }
+
+        return XML_Util::createTagFromArray($tag, $replaceEntities, $multiline, 
+            $indent, $linebreak, $sortAttributes);
+    }
+
+    /**
+     * create a tag from an array
+     * this method awaits an array in the following format
+     * <pre>
+     * array(
+     *     // qualified name of the tag
+     *     'qname' => $qname        
+     *
+     *     // namespace prefix (optional, if qname is specified or no namespace)
+     *     'namespace' => $namespace    
+     *
+     *     // local part of the tagname (optional, if qname is specified)
+     *     'localpart' => $localpart,   
+     *
+     *     // array containing all attributes (optional)
+     *     'attributes' => array(),      
+     *
+     *     // tag content (optional)
+     *     'content' => $content,     
+     *
+     *     // namespaceUri for the given namespace (optional)
+     *     'namespaceUri' => $namespaceUri 
+     * )
+     * </pre>
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * $tag = array(
+     *     'qname'        => 'foo:bar',
+     *     'namespaceUri' => 'http://foo.com',
+     *     'attributes'   => array('key' => 'value', 'argh' => 'fruit&vegetable'),
+     *     'content'      => 'I\'m inside the tag',
+     * );
+     * // creating a tag with qualified name and namespaceUri
+     * $string = XML_Util::createTagFromArray($tag);
+     * </code>
+     *
+     * @param array  $tag             tag definition
+     * @param int    $replaceEntities whether to replace XML special chars in 
+     *                                content, embedd it in a CData section 
+     *                                or none of both
+     * @param bool   $multiline       whether to create a multiline tag where each 
+     *                                attribute gets written to a single line
+     * @param string $indent          string used to indent attributes 
+     *                                (_auto indents attributes so they start 
+     *                                at the same column)
+     * @param string $linebreak       string used for linebreaks
+     * @param bool   $sortAttributes  Whether to sort the attributes or not
+     *
+     * @return string XML tag
+     * @access public
+     * @static
+     * @see createTag()
+     * @uses attributesToString() to serialize the attributes of the tag
+     * @uses splitQualifiedName() to get local part and namespace of a qualified name
+     * @uses createCDataSection()
+     * @uses raiseError()
+     */
+    function createTagFromArray($tag, $replaceEntities = XML_UTIL_REPLACE_ENTITIES,
+        $multiline = false, $indent = '_auto', $linebreak = "\n", 
+        $sortAttributes = true)
+    {
+        if (isset($tag['content']) && !is_scalar($tag['content'])) {
+            return XML_Util::raiseError('Supplied non-scalar value as tag content',
+            XML_UTIL_ERROR_NON_SCALAR_CONTENT);
+        }
+
+        if (!isset($tag['qname']) && !isset($tag['localPart'])) {
+            return XML_Util::raiseError('You must either supply a qualified name '
+                . '(qname) or local tag name (localPart).', 
+                XML_UTIL_ERROR_NO_TAG_NAME);
+        }
+
+        // if no attributes hav been set, use empty attributes
+        if (!isset($tag['attributes']) || !is_array($tag['attributes'])) {
+            $tag['attributes'] = array();
+        }
+
+        if (isset($tag['namespaces'])) {
+            foreach ($tag['namespaces'] as $ns => $uri) {
+                $tag['attributes']['xmlns:' . $ns] = $uri;
+            }
+        }
+
+        if (!isset($tag['qname'])) {
+            // qualified name is not given
+
+            // check for namespace
+            if (isset($tag['namespace']) && !empty($tag['namespace'])) {
+                $tag['qname'] = $tag['namespace'] . ':' . $tag['localPart'];
+            } else {
+                $tag['qname'] = $tag['localPart'];
+            }
+        } elseif (isset($tag['namespaceUri']) && !isset($tag['namespace'])) {
+            // namespace URI is set, but no namespace
+
+            $parts = XML_Util::splitQualifiedName($tag['qname']);
+
+            $tag['localPart'] = $parts['localPart'];
+            if (isset($parts['namespace'])) {
+                $tag['namespace'] = $parts['namespace'];
+            }
+        }
+
+        if (isset($tag['namespaceUri']) && !empty($tag['namespaceUri'])) {
+            // is a namespace given
+            if (isset($tag['namespace']) && !empty($tag['namespace'])) {
+                $tag['attributes']['xmlns:' . $tag['namespace']] =
+                    $tag['namespaceUri'];
+            } else {
+                // define this Uri as the default namespace
+                $tag['attributes']['xmlns'] = $tag['namespaceUri'];
+            }
+        }
+
+        // check for multiline attributes
+        if ($multiline === true) {
+            if ($indent === '_auto') {
+                $indent = str_repeat(' ', (strlen($tag['qname'])+2));
+            }
+        }
+
+        // create attribute list
+        $attList = XML_Util::attributesToString($tag['attributes'], 
+            $sortAttributes, $multiline, $indent, $linebreak, $replaceEntities);
+        if (!isset($tag['content']) || (string)$tag['content'] == '') {
+            $tag = sprintf('<%s%s />', $tag['qname'], $attList);
+        } else {
+            switch ($replaceEntities) {
+            case XML_UTIL_ENTITIES_NONE:
+                break;
+            case XML_UTIL_CDATA_SECTION:
+                $tag['content'] = XML_Util::createCDataSection($tag['content']);
+                break;
+            default:
+                $tag['content'] = XML_Util::replaceEntities($tag['content'], 
+                    $replaceEntities);
+                break;
+            }
+            $tag = sprintf('<%s%s>%s</%s>', $tag['qname'], $attList, $tag['content'],
+                $tag['qname']);
+        }
+        return $tag;
+    }
+
+    /**
+     * create a start element
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML start element:
+     * $tag = XML_Util::createStartElement('myNs:myTag', 
+     *     array('foo' => 'bar') ,'http://www.w3c.org/myNs#');
+     * </code>
+     *
+     * @param string $qname          qualified tagname (including namespace)
+     * @param array  $attributes     array containg attributes
+     * @param string $namespaceUri   URI of the namespace
+     * @param bool   $multiline      whether to create a multiline tag where each 
+     *                               attribute gets written to a single line
+     * @param string $indent         string used to indent attributes (_auto indents
+     *                               attributes so they start at the same column)
+     * @param string $linebreak      string used for linebreaks
+     * @param bool   $sortAttributes Whether to sort the attributes or not
+     *
+     * @return string XML start element
+     * @access public
+     * @static
+     * @see createEndElement(), createTag()
+     */
+    function createStartElement($qname, $attributes = array(), $namespaceUri = null,
+        $multiline = false, $indent = '_auto', $linebreak = "\n", 
+        $sortAttributes = true)
+    {
+        // if no attributes hav been set, use empty attributes
+        if (!isset($attributes) || !is_array($attributes)) {
+            $attributes = array();
+        }
+
+        if ($namespaceUri != null) {
+            $parts = XML_Util::splitQualifiedName($qname);
+        }
+
+        // check for multiline attributes
+        if ($multiline === true) {
+            if ($indent === '_auto') {
+                $indent = str_repeat(' ', (strlen($qname)+2));
+            }
+        }
+
+        if ($namespaceUri != null) {
+            // is a namespace given
+            if (isset($parts['namespace']) && !empty($parts['namespace'])) {
+                $attributes['xmlns:' . $parts['namespace']] = $namespaceUri;
+            } else {
+                // define this Uri as the default namespace
+                $attributes['xmlns'] = $namespaceUri;
+            }
+        }
+
+        // create attribute list
+        $attList = XML_Util::attributesToString($attributes, $sortAttributes, 
+            $multiline, $indent, $linebreak);
+        $element = sprintf('<%s%s>', $qname, $attList);
+        return  $element;
+    }
+
+    /**
+     * create an end element
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML start element:
+     * $tag = XML_Util::createEndElement('myNs:myTag');
+     * </code>
+     *
+     * @param string $qname qualified tagname (including namespace)
+     *
+     * @return string XML end element
+     * @access public
+     * @static
+     * @see createStartElement(), createTag()
+     */
+    function createEndElement($qname)
+    {
+        $element = sprintf('</%s>', $qname);
+        return $element;
+    }
+
+    /**
+     * create an XML comment
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create an XML start element:
+     * $tag = XML_Util::createComment('I am a comment');
+     * </code>
+     *
+     * @param string $content content of the comment
+     *
+     * @return string XML comment
+     * @access public
+     * @static
+     */
+    function createComment($content)
+    {
+        $comment = sprintf('<!-- %s -->', $content);
+        return $comment;
+    }
+
+    /**
+     * create a CData section
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // create a CData section
+     * $tag = XML_Util::createCDataSection('I am content.');
+     * </code>
+     *
+     * @param string $data data of the CData section
+     *
+     * @return string CData section with content
+     * @access public
+     * @static
+     */
+    function createCDataSection($data)
+    {
+        return sprintf('<![CDATA[%s]]>', 
+            preg_replace('/\]\]>/', ']]]]><![CDATA[>', strval($data)));
+
+    }
+
+    /**
+     * split qualified name and return namespace and local part
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // split qualified tag
+     * $parts = XML_Util::splitQualifiedName('xslt:stylesheet');
+     * </code>
+     * the returned array will contain two elements:
+     * <pre>
+     * array(
+     *     'namespace' => 'xslt',
+     *     'localPart' => 'stylesheet'
+     * );
+     * </pre>
+     *
+     * @param string $qname     qualified tag name
+     * @param string $defaultNs default namespace (optional)
+     *
+     * @return array array containing namespace and local part
+     * @access public
+     * @static
+     */
+    function splitQualifiedName($qname, $defaultNs = null)
+    {
+        if (strstr($qname, ':')) {
+            $tmp = explode(':', $qname);
+            return array(
+                'namespace' => $tmp[0],
+                'localPart' => $tmp[1]
+            );
+        }
+        return array(
+            'namespace' => $defaultNs,
+            'localPart' => $qname
+        );
+    }
+
+    /**
+     * check, whether string is valid XML name
+     *
+     * <p>XML names are used for tagname, attribute names and various
+     * other, lesser known entities.</p>
+     * <p>An XML name may only consist of alphanumeric characters,
+     * dashes, undescores and periods, and has to start with a letter
+     * or an underscore.</p>
+     *
+     * <code>
+     * require_once 'XML/Util.php';
+     *
+     * // verify tag name
+     * $result = XML_Util::isValidName('invalidTag?');
+     * if (is_a($result, 'PEAR_Error')) {
+     *    print 'Invalid XML name: ' . $result->getMessage();
+     * }
+     * </code>
+     *
+     * @param string $string string that should be checked
+     *
+     * @return mixed true, if string is a valid XML name, PEAR error otherwise
+     * @access public
+     * @static
+     * @todo support for other charsets
+     * @todo PEAR CS - unable to avoid 85-char limit on second preg_match
+     */
+    function isValidName($string)
+    {
+        // check for invalid chars
+        if (!preg_match('/^[[:alpha:]_]$/', $string{0})) {
+            return XML_Util::raiseError('XML names may only start with letter '
+                . 'or underscore', XML_UTIL_ERROR_INVALID_START);
+        }
+
+        // check for invalid chars
+        if (!preg_match('/^([[:alpha:]_]([[:alnum:]\-\.]*)?:)?[[:alpha:]_]([[:alnum:]\_\-\.]+)?$/',
+            $string)
+        ) {
+            return XML_Util::raiseError('XML names may only contain alphanumeric '
+                . 'chars, period, hyphen, colon and underscores', 
+                XML_UTIL_ERROR_INVALID_CHARS);
+        }
+        // XML name is valid
+        return true;
+    }
+
+    /**
+     * replacement for XML_Util::raiseError
+     *
+     * Avoids the necessity to always require
+     * PEAR.php
+     *
+     * @param string $msg  error message
+     * @param int    $code error code
+     *
+     * @return PEAR_Error
+     * @access public
+     * @static
+     * @todo PEAR CS - should this use include_once instead?
+     */
+    function raiseError($msg, $code)
+    {
+        require_once 'PEAR.php';
+        return PEAR::raiseError($msg, $code);
+    }
+}
+?>
+                                                                                                                                                                                                                                                                                        package.sig                                                                                         100644    1750    1750          305 11117075544   6362                                                                                                                                                                                                                                                                                                                                                                      -----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+iEYEABECAAYFAkk8e2QACgkQcqMhusJF8XULZgCg0iwVLWueraJzK5s1AesDkVzv
+GucAn22sSv3QiTSUWG9BmakiW9hFsb4V
+=g2mr
+-----END PGP SIGNATURE-----
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           G\$UÈðÙD7ðˆ­TŸ   GBMB
\ No newline at end of file
diff --git a/php.ini-recommended b/php.ini-recommended
index a2c1085..784912e 100644
--- a/php.ini-recommended
+++ b/php.ini-recommended
@@ -1278,7 +1278,7 @@ mssql.secure_connection = Off
 ;mbstring.func_overload = 0
 
 ; enable strict encoding detection.
-;mbstring.strict_encoding = Off
+;mbstring.strict_detection = Off
 
 [FrontBase]
 ;fbsql.allow_persistent = On
diff --git a/run-tests.php b/run-tests.php
index b881e44..b38a7b5 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -24,7 +24,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: run-tests.php,v 1.226.2.37.2.57 2008/12/31 17:37:21 zoe Exp $ */
+/* $Id: run-tests.php,v 1.226.2.37.2.65 2009/05/20 09:23:15 lbarnaud Exp $ */
 
 /* Sanity check to ensure that pcre extension needed by this script is available.
  * In the event it is not, print a nice error message indicating that this script will
@@ -59,9 +59,25 @@ NO_PROC_OPEN_ERROR;
 exit;
 }
 
+// Version constants only available as of 5.2.8
+if (!defined("PHP_VERSION_ID")) {
+	list($major, $minor, $bug) = explode(".", phpversion(), 3);
+	$bug = (int)$bug; // Many distros make up their own versions
+	if ($bug < 10) {
+		$bug = "0$bug";
+	}
+
+	define("PHP_VERSION_ID", "{$major}0{$minor}$bug");
+	define("PHP_MAJOR_VERSION", $major);
+}
+
 // __DIR__ is available from 5.3.0
 if (PHP_VERSION_ID < 50300) {
 	define('__DIR__', realpath(dirname(__FILE__)));
+	// FILE_BINARY is available from 5.2.7
+	if (PHP_VERSION_ID < 50207) {
+		define('FILE_BINARY', 0);
+	}	
 }
 
 // If timezone is not set, use UTC.
@@ -214,6 +230,7 @@ $ini_overwrites = array(
 		'auto_append_file=',
 		'magic_quotes_runtime=0',
 		'ignore_repeated_errors=0',
+		'precision=14',
 		'unicode.runtime_encoding=ISO-8859-1',
 		'unicode.script_encoding=UTF-8',
 		'unicode.output_encoding=UTF-8',
@@ -617,7 +634,7 @@ if (isset($argc) && $argc > 1) {
 					$html_output = is_resource($html_file);
 					break;
 				case '--version':
-					echo '$Revision: 1.226.2.37.2.57 $' . "\n";
+					echo '$Revision: 1.226.2.37.2.65 $' . "\n";
 					exit(1);
 
 				default:
@@ -1338,7 +1355,6 @@ TEST $file
 	if (is_array($IN_REDIRECT)) {
 		$tested = $IN_REDIRECT['prefix'] . ' ' . trim($section_text['TEST']);
 		$tested_file = $tmp_relative_file;
-		$section_text['FILE'] = "# original source file: $shortname\n" . $section_text['FILE'];
 	}
 
 	// unlink old test results
@@ -1738,7 +1754,33 @@ COMMAND $cmd
 		$wanted_re = preg_replace('/\r\n/', "\n", $wanted);
 
 		if (isset($section_text['EXPECTF'])) {
-			$wanted_re = preg_quote($wanted_re, '/');
+
+			// do preg_quote, but miss out any %r delimited sections
+			$temp = "";
+			$r = "%r";
+			$startOffset = 0;
+			$length = strlen($wanted_re);
+			while($startOffset < $length) {
+				$start = strpos($wanted_re, $r, $startOffset);
+				if ($start !== false) {
+					// we have found a start tag
+					$end = strpos($wanted_re, $r, $start+2);
+					if ($end === false) {
+						// unbalanced tag, ignore it.
+						$end = $start = $length;
+					}
+				} else {
+					// no more %r sections
+					$start = $end = $length;
+				}
+				// quote a non re portion of the string
+				$temp = $temp . preg_quote(substr($wanted_re, $startOffset, ($start - $startOffset)),  '/');
+				// add the re unquoted.
+				$temp = $temp . '(' . substr($wanted_re, $start+2, ($end - $start-2)). ')';
+				$startOffset = $end + 2;
+			}
+			$wanted_re = $temp;
+		
 			$wanted_re = str_replace(
 				array('%binary_string_optional%'),
 				version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? 'string' : 'binary string',
@@ -1787,14 +1829,14 @@ COMMAND $cmd
 				$php = $old_php;
 			}
 
-                        if (!$leaked && !$failed_headers) {
-                            if (isset($section_text['XFAIL'] )) {
-                                $warn = true;
-                                $info = " (warn: XFAIL section but test passes)";
-                            }else {
-                                show_result("PASS", $tested, $tested_file, '', $temp_filenames);
-                                return 'PASSED';
-                            }
+			if (!$leaked && !$failed_headers) {
+				if (isset($section_text['XFAIL'] )) {
+					$warn = true;
+					$info = " (warn: XFAIL section but test passes)";
+				}else {
+					show_result("PASS", $tested, $tested_file, '', $temp_filenames);
+					return 'PASSED';
+				}
 			}
 		}
 
@@ -1816,14 +1858,14 @@ COMMAND $cmd
 				$php = $old_php;
 			}
 
-                        if (!$leaked && !$failed_headers) {
-                            if (isset($section_text['XFAIL'] )) {
-                                $warn = true;
-                                $info = " (warn: XFAIL section but test passes)";
-                            }else {
-                                show_result("PASS", $tested, $tested_file, '', $temp_filenames);
-                                return 'PASSED';
-                            }
+			if (!$leaked && !$failed_headers) {
+				if (isset($section_text['XFAIL'] )) {
+					$warn = true;
+					$info = " (warn: XFAIL section but test passes)";
+				}else {
+					show_result("PASS", $tested, $tested_file, '', $temp_filenames);
+					return 'PASSED';
+				}
 			}
 		}
 
@@ -1871,6 +1913,9 @@ COMMAND $cmd
 
 		// write .diff
 		$diff = generate_diff($wanted, $wanted_re, $output);
+		if (is_array($IN_REDIRECT)) {
+			$diff = "# original source file: $shortname\n" . $diff;
+		}
 		show_file_block('diff', $diff);
 		if (strpos($log_format, 'D') !== false && file_put_contents($diff_filename, (binary) $diff, FILE_BINARY) === false) {
 			error("Cannot create test diff - $diff_filename");
@@ -2210,6 +2255,19 @@ EXPECTED FAILED TEST SUMMARY
 		$failed_test_summary .=  "=====================================================================\n";
 	}
 
+	if (count($PHP_FAILED_TESTS['WARNED'])) {
+		$failed_test_summary .= '
+=====================================================================
+WARNED TEST SUMMARY
+---------------------------------------------------------------------
+';
+		foreach ($PHP_FAILED_TESTS['WARNED'] as $failed_test_data) {
+			$failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n";
+		}
+
+		$failed_test_summary .=  "=====================================================================\n";
+	}
+
 	if (count($PHP_FAILED_TESTS['LEAKED'])) {
 		$failed_test_summary .= '
 =====================================================================
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 6e11399..9f18bbb 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cgi_main.c,v 1.267.2.15.2.69 2009/01/19 18:17:59 dsp Exp $ */
+/* $Id: cgi_main.c,v 1.267.2.15.2.71 2009/06/09 13:29:39 dsp Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -461,6 +461,9 @@ static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
 	return SAPI_HEADER_SENT_SUCCESSFULLY;
 }
 
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
 
 static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
 {
@@ -473,10 +476,10 @@ static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
 			fcgi_request *request = (fcgi_request*) SG(server_context);
 			tmp_read_bytes = fcgi_read(request, buffer + read_bytes, count_bytes - read_bytes);
 		} else {
-			tmp_read_bytes = read(0, buffer + read_bytes, count_bytes - read_bytes);
+			tmp_read_bytes = read(STDIN_FILENO, buffer + read_bytes, count_bytes - read_bytes);
 		}
 #else
-		tmp_read_bytes = read(0, buffer + read_bytes, count_bytes - read_bytes);
+		tmp_read_bytes = read(STDIN_FILENO, buffer + read_bytes, count_bytes - read_bytes);
 #endif
 
 		if (tmp_read_bytes <= 0) {
@@ -961,7 +964,8 @@ static void init_request_info(TSRMLS_D)
  			}
 
  			if (env_path_translated != NULL && env_redirect_url != NULL &&
- 			    orig_script_filename != NULL && script_path_translated != NULL) {
+  			    env_path_translated != script_path_translated &&
+  			    strcmp(env_path_translated, script_path_translated) != 0) {
 				/* 
 				   pretty much apache specific.  If we have a redirect_url
 				   then our script_filename and script_name point to the
diff --git a/sapi/cli/php.1.in b/sapi/cli/php.1.in
index a212399..e2d5b93 100644
--- a/sapi/cli/php.1.in
+++ b/sapi/cli/php.1.in
@@ -233,7 +233,7 @@ after processing all input lines
 .TP
 .PD 1
 .B \-s
-Display colour syntax highlighted source
+Output HTML syntax highlighted source
 .TP
 .PD 0
 .B \-\-version
@@ -247,7 +247,7 @@ Version number
 .TP
 .PD 1
 .B \-w
-Display source with stripped comments and whitespace
+Output source with stripped comments and whitespace
 .TP
 .PD 0
 .B \-\-zend\-extension \fIfile\fP
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
index 813485e..80a0961 100644
--- a/sapi/cli/php_cli.c
+++ b/sapi/cli/php_cli.c
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_cli.c,v 1.129.2.13.2.30 2008/12/31 11:17:49 sebastian Exp $ */
+/* $Id: php_cli.c,v 1.129.2.13.2.34 2009/04/09 10:20:39 bjori Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -91,6 +91,12 @@
 
 #include "php_getopt.h"
 
+#ifndef PHP_WIN32
+# define php_select(m, r, w, e, t)	select(m, r, w, e, t)
+#else
+# include "win32/select.h"
+#endif
+
 PHPAPI extern char *php_ini_opened_path;
 PHPAPI extern char *php_ini_scanned_files;
 
@@ -224,15 +230,38 @@ static void print_extensions(TSRMLS_D) /* {{{ */
 #define STDOUT_FILENO 1
 #endif
 
-static inline size_t sapi_cli_single_write(const char *str, uint str_length) /* {{{ */
+static inline int sapi_cli_select(int fd TSRMLS_DC)
+{
+	fd_set wfd, dfd;
+	struct timeval tv;
+	int ret;
+
+	FD_ZERO(&wfd);
+	FD_ZERO(&dfd);
+
+	PHP_SAFE_FD_SET(fd, &wfd);
+
+	tv.tv_sec = FG(default_socket_timeout);
+	tv.tv_usec = 0;
+
+	ret = php_select(fd+1, &dfd, &wfd, &dfd, &tv);
+
+	return ret != -1;
+}
+
+static inline size_t sapi_cli_single_write(const char *str, uint str_length TSRMLS_DC) /* {{{ */
 {
 #ifdef PHP_WRITE_STDOUT
 	long ret;
 
-	ret = write(STDOUT_FILENO, str, str_length);
+	do {
+		ret = write(STDOUT_FILENO, str, str_length);
+	} while (ret <= 0 && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO TSRMLS_CC));
+
 	if (ret <= 0) {
 		return 0;
 	}
+
 	return ret;
 #else
 	size_t ret;
@@ -258,7 +287,7 @@ static int sapi_cli_ub_write(const char *str, uint str_length TSRMLS_DC) /* {{{
 
 	while (remaining > 0)
 	{
-		ret = sapi_cli_single_write(ptr, remaining);
+		ret = sapi_cli_single_write(ptr, remaining TSRMLS_CC);
 		if (!ret) {
 #ifndef PHP_CLI_WIN32_NO_CONSOLE
 			php_handle_aborted_connection();
@@ -456,9 +485,9 @@ static void php_cli_usage(char *argv0)
 				"  -F <file>        Parse and execute <file> for every input line\n"
 				"  -E <end_code>    Run PHP <end_code> after processing all input lines\n"
 				"  -H               Hide any passed arguments from external tools.\n"
-				"  -s               Display colour syntax highlighted source.\n"
+				"  -s               Output HTML syntax highlighted source.\n"
 				"  -v               Version number\n"
-				"  -w               Display source with stripped comments and whitespace.\n"
+				"  -w               Output source with stripped comments and whitespace.\n"
 				"  -z <file>        Load Zend extension <file>.\n"
 				"\n"
 				"  args...          Arguments passed to script. Use -- args when first argument\n"
@@ -1114,7 +1143,7 @@ int main(int argc, char *argv[])
 					pos = 0;
 					
 					if (php_last_char != '\0' && php_last_char != '\n') {
-						sapi_cli_single_write("\n", 1);
+						sapi_cli_single_write("\n", 1 TSRMLS_CC);
 					}
 
 					if (EG(exception)) {
diff --git a/sapi/cli/tests/006.phpt b/sapi/cli/tests/006.phpt
index c553a83..8b1fec8 100644
--- a/sapi/cli/tests/006.phpt
+++ b/sapi/cli/tests/006.phpt
@@ -3,7 +3,7 @@ show information about extension
 --SKIPIF--
 <?php 
 include "skipif.inc"; 
-if (!extension_loaded("reflection")) {
+if (!extension_loaded("reflection") || !extension_loaded("session")) {
 	die("skip");
 }
 ?>
@@ -27,10 +27,6 @@ string(37) "Exception: Extension  does not exist
 "
 string(%d) "Extension [ <persistent> extension #%d date version %s ] {
 
-  - Dependencies {
-    Dependency [ session (Optional) ]
-  }
-
   - INI {
     Entry [ date.timezone <ALL> ]
       Current = ''
diff --git a/sapi/nsapi/nsapi.c b/sapi/nsapi/nsapi.c
index 18c3aae..bea8dc5 100644
--- a/sapi/nsapi/nsapi.c
+++ b/sapi/nsapi/nsapi.c
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: nsapi.c,v 1.69.2.3.2.16 2009/01/06 13:46:49 thetaphi Exp $ */
+/* $Id: nsapi.c,v 1.69.2.3.2.18 2009/03/20 15:54:36 thetaphi Exp $ */
 
 /*
  * PHP includes
@@ -294,7 +294,7 @@ PHP_MSHUTDOWN_FUNCTION(nsapi)
 PHP_MINFO_FUNCTION(nsapi)
 {
 	php_info_print_table_start();
-	php_info_print_table_row(2, "NSAPI Module Revision", "$Revision: 1.69.2.3.2.16 $");
+	php_info_print_table_row(2, "NSAPI Module Revision", "$Revision: 1.69.2.3.2.18 $");
 	php_info_print_table_row(2, "Server Software", system_version());
 	php_info_print_table_row(2, "Sub-requests with nsapi_virtual()",
 	 (nsapi_servact_service)?((zend_ini_long("zlib.output_compression", sizeof("zlib.output_compression"), 0))?"not supported with zlib.output_compression":"enabled"):"not supported on this platform" );
@@ -455,6 +455,11 @@ static void sapi_nsapi_flush(void *server_context)
 {
 	nsapi_request_context *rc = (nsapi_request_context *)server_context;
 	TSRMLS_FETCH();
+	
+	if (!rc) {
+		/* we have no context, so no flushing needed. This fixes a SIGSEGV on shutdown */
+		return;
+	}
 
 	if (!SG(headers_sent)) {
 		sapi_send_headers(TSRMLS_C);
@@ -473,7 +478,7 @@ static int sapi_nsapi_header_handler(sapi_header_struct *sapi_header, sapi_heade
 	char *header_name, *header_content, *p;
 	nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
 
-	header_name = sapi_header->header;
+	header_name = nsapi_strdup(sapi_header->header);
 	header_content = p = strchr(header_name, ':');
 	if (p == NULL) {
 		efree(sapi_header->header);
@@ -497,9 +502,9 @@ static int sapi_nsapi_header_handler(sapi_header_struct *sapi_header, sapi_heade
 		pblock_nvinsert(header_name, header_content, rc->rq->srvhdrs);
 	}
 
-	sapi_free_header(sapi_header);
+	nsapi_free(header_name);
 
-	return 0;	/* don't use the default SAPI mechanism, NSAPI duplicates this functionality */
+	return SAPI_HEADER_ADD;
 }
 
 static int sapi_nsapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
@@ -826,6 +831,7 @@ void NSAPI_PUBLIC php5_close(void *vparam)
 	}
 #endif	
 
+	sapi_shutdown();
 	tsrm_shutdown();
 
 	log_error(LOG_INFORM, "php5_close", NULL, NULL, "Shutdown PHP Module");
diff --git a/scripts/phpize.in b/scripts/phpize.in
index 35f7dc7..3adb8c8 100644
--- a/scripts/phpize.in
+++ b/scripts/phpize.in
@@ -80,6 +80,24 @@ Cannot find build files at '$phpdir'. Please check your PHP installation.
 EOF
     exit 1
   fi
+
+  case "$phpdir" in
+  *\ * | *\	*)
+    cat <<EOF
+Invalid source path '$phpdir'. Whitespace is not allowed in source path.
+
+EOF
+    exit 1;;
+  esac
+
+  case "$builddir" in
+  *\ * | *\	*)
+    cat <<EOF
+Invalid build path '$builddir'. Whitespace is not allowed in build path.
+
+EOF
+      exit 1;;
+  esac
 }
 
 phpize_check_shtool()
@@ -103,18 +121,18 @@ phpize_check_autotools()
   test -z "$PHP_AUTOCONF" && PHP_AUTOCONF=autoconf
   test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader
   
-  if test ! -x "`$php_shtool path $PHP_AUTOCONF`"; then
+  if ! test -x "$PHP_AUTOCONF" && ! test -x "`$php_shtool path $PHP_AUTOCONF`"; then
     cat <<EOF
-Cannot find autoconf. Please check your autoconf installation and the \$PHP_AUTOCONF 
-environment variable is set correctly and then rerun this script. 
+Cannot find autoconf. Please check your autoconf installation and the
+\$PHP_AUTOCONF environment variable. Then, rerun this script.
 
 EOF
     exit 1
   fi
-  if test ! -x "`$php_shtool path $PHP_AUTOHEADER`"; then
+  if ! test -x "$PHP_AUTOHEADER" && ! test -x "`$php_shtool path $PHP_AUTOHEADER`"; then
     cat <<EOF
-Cannot find autoheader. Please check your autoconf installation and the \$PHP_AUTOHEADER 
-environment variable is set correctly and then rerun this script. 
+Cannot find autoheader. Please check your autoconf installation and the
+\$PHP_AUTOHEADER environment variable. Then, rerun this script.
 
 EOF
     exit 1
diff --git a/scripts/phpize.m4 b/scripts/phpize.m4
index ba668c8..adf1581 100644
--- a/scripts/phpize.m4
+++ b/scripts/phpize.m4
@@ -17,11 +17,15 @@ AC_DEFUN([PHP_ALWAYS_SHARED],[
   test "[$]$1" = "no" && $1=yes
 ])dnl
 dnl
+
+test -z "$CFLAGS" && auto_cflags=1
+
 abs_srcdir=`(cd $srcdir && pwd)`
 abs_builddir=`pwd`
 
-AC_PROG_CC
+AC_PROG_CC([cc gcc])
 PHP_DETECT_ICC
+PHP_DETECT_SUNCC
 AC_PROG_CC_C_O
 
 dnl Support systems with system libraries in e.g. /usr/lib64
@@ -73,6 +77,7 @@ php_debug_is_enabled
 ],[
   PHP_DEBUG=no
 ])
+CPPFLAGS=$old_CPPFLAGS
 AC_MSG_RESULT([$PHP_DEBUG])
 
 AC_MSG_CHECKING([if zts is enabled])
@@ -116,6 +121,15 @@ if test "$PHP_DEBUG" = "yes"; then
     CFLAGS="$CFLAGS -O0"
     CXXFLAGS="$CXXFLAGS -O0"
   fi
+  if test "$SUNCC" = "yes"; then
+    if test -n "$auto_cflags"; then
+      CFLAGS="-g"
+      CXXFLAGS="-g"
+    else
+      CFLAGS="$CFLAGS -g"
+      CXXFLAGS="$CFLAGS -g"
+    fi
+  fi
 else
   PHP_DEBUG=0
   ZEND_DEBUG=no
diff --git a/tests/classes/inheritance_007.phpt b/tests/classes/inheritance_007.phpt
index df6b96a..4cdb457 100644
--- a/tests/classes/inheritance_007.phpt
+++ b/tests/classes/inheritance_007.phpt
@@ -1,5 +1,7 @@
 --TEST--
 Ensure inherited old-style constructor doesn't block other methods.
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
 --FILE--
 <?php
 class A {
@@ -21,19 +23,19 @@ $b->b();
 array(2) {
   [0]=>
   &object(ReflectionMethod)#%d (2) {
-    [%u|b%"name"]=>
-    %string|unicode%(1) "B"
-    [%u|b%"class"]=>
-    %string|unicode%(1) "B"
+    ["name"]=>
+    string(1) "B"
+    ["class"]=>
+    string(1) "A"
   }
   [1]=>
   &object(ReflectionMethod)#%d (2) {
-    [%u|b%"name"]=>
-    %string|unicode%(1) "A"
-    [%u|b%"class"]=>
-    %string|unicode%(1) "B"
+    ["name"]=>
+    string(1) "A"
+    ["class"]=>
+    string(1) "A"
   }
 }
 In A::A
 In A::A
-In A::B
\ No newline at end of file
+In A::B
diff --git a/tests/classes/interface_optional_arg_003.inc b/tests/classes/interface_optional_arg_003.inc
new file mode 100644
index 0000000..a62c656
--- /dev/null
+++ b/tests/classes/interface_optional_arg_003.inc
@@ -0,0 +1,4 @@
+<?php 
+interface I {
+  function f($a = null);
+}
\ No newline at end of file
diff --git a/tests/classes/interface_optional_arg_003.phpt b/tests/classes/interface_optional_arg_003.phpt
new file mode 100644
index 0000000..13e36d5
--- /dev/null
+++ b/tests/classes/interface_optional_arg_003.phpt
@@ -0,0 +1,17 @@
+--TEST--
+default argument value in and in implementing class with interface in included file
+--FILE--
+<?php 
+include 'interface_optional_arg_003.inc';
+
+class C implements I {
+  function f($a = 2) {
+  	var_dump($a);
+  }
+}
+
+$c = new C;
+$c->f();
+?>
+--EXPECTF--
+int(2)
\ No newline at end of file
diff --git a/tests/classes/iterators_008.phpt b/tests/classes/iterators_008.phpt
new file mode 100644
index 0000000..22e6dc8
--- /dev/null
+++ b/tests/classes/iterators_008.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Ensure plain userspace superclass does not override special iterator behaviour on child class.
+--FILE--
+<?php
+Class C {}
+
+class D extends C implements Iterator {
+  
+  private $counter = 2;
+  
+  public function valid() {
+    echo __METHOD__ . "($this->counter)\n";
+    return $this->counter;    
+  }
+  
+  public function next() {
+    $this->counter--;   
+    echo __METHOD__ . "($this->counter)\n";
+  }
+  
+  public function rewind() {
+    echo __METHOD__ . "($this->counter)\n";
+  }
+  
+  public function current() {
+    echo __METHOD__ . "($this->counter)\n";
+  }
+  
+  public function key() {
+    echo __METHOD__ . "($this->counter)\n";
+  }
+  
+}
+
+foreach (new D as $x) {}
+?>
+--EXPECTF--
+D::rewind(2)
+D::valid(2)
+D::current(2)
+D::next(1)
+D::valid(1)
+D::current(1)
+D::next(0)
+D::valid(0)
\ No newline at end of file
diff --git a/tests/classes/static_properties_undeclared_assign.phpt b/tests/classes/static_properties_undeclared_assign.phpt
new file mode 100644
index 0000000..99340e9
--- /dev/null
+++ b/tests/classes/static_properties_undeclared_assign.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Assigning to a non-existent static property
+--FILE--
+<?php
+Class C {}
+C::$p = 1;
+?>
+--EXPECTF--
+Fatal error: Access to undeclared static property: C::$p in %s on line 3
\ No newline at end of file
diff --git a/tests/classes/static_properties_undeclared_assignInc.phpt b/tests/classes/static_properties_undeclared_assignInc.phpt
new file mode 100644
index 0000000..258f2f8
--- /dev/null
+++ b/tests/classes/static_properties_undeclared_assignInc.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Assigning & incrementing a non-existent static property
+--FILE--
+<?php
+Class C {}
+C::$p += 1;
+?>
+--EXPECTF--
+Fatal error: Access to undeclared static property: C::$p in %s on line 3
\ No newline at end of file
diff --git a/tests/classes/static_properties_undeclared_assignRef.phpt b/tests/classes/static_properties_undeclared_assignRef.phpt
new file mode 100644
index 0000000..75cf270
--- /dev/null
+++ b/tests/classes/static_properties_undeclared_assignRef.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Assigning a non-existent static property by reference
+--FILE--
+<?php
+Class C {}
+$a = 'foo';
+C::$p =& $a;
+?>
+--EXPECTF--
+Fatal error: Access to undeclared static property: C::$p in %s on line 4
\ No newline at end of file
diff --git a/tests/classes/static_properties_undeclared_inc.phpt b/tests/classes/static_properties_undeclared_inc.phpt
new file mode 100644
index 0000000..ff8b8c3
--- /dev/null
+++ b/tests/classes/static_properties_undeclared_inc.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Incrementing a non-existent static property
+--FILE--
+<?php
+Class C {}
+C::$p++;
+?>
+--EXPECTF--
+Fatal error: Access to undeclared static property: C::$p in %s on line 3
\ No newline at end of file
diff --git a/tests/classes/static_properties_undeclared_isset.phpt b/tests/classes/static_properties_undeclared_isset.phpt
new file mode 100644
index 0000000..58aac40
--- /dev/null
+++ b/tests/classes/static_properties_undeclared_isset.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Issetting a non-existent static property
+--FILE--
+<?php
+Class C {}
+var_dump(isset(C::$p));
+?>
+--EXPECTF--
+bool(false)
\ No newline at end of file
diff --git a/tests/classes/static_properties_undeclared_read.phpt b/tests/classes/static_properties_undeclared_read.phpt
new file mode 100644
index 0000000..715b41e
--- /dev/null
+++ b/tests/classes/static_properties_undeclared_read.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Reading a non-existent static property
+--FILE--
+<?php
+Class C {}
+echo C::$p;
+?>
+--EXPECTF--
+Fatal error: Access to undeclared static property: C::$p in %s on line 3
\ No newline at end of file
diff --git a/tests/func/ini_alter.phpt b/tests/func/ini_alter.phpt
new file mode 100644
index 0000000..111e826
--- /dev/null
+++ b/tests/func/ini_alter.phpt
@@ -0,0 +1,19 @@
+--TEST--
+ini_alter() check
+--CREDITS--
+Sebastian Schürmann
+sebs at php.net
+Testfest 2009 Munich
+--FILE--
+<?php
+ini_alter('error_reporting', 1);
+$var = ini_get('error_reporting');
+var_dump($var);
+ini_alter('error_reporting', 0);
+$var = ini_get('error_reporting');
+var_dump($var);
+?>
+--EXPECT--
+string(1) "1"
+string(1) "0"
+
diff --git a/tests/lang/bug45392.phpt b/tests/lang/bug45392.phpt
deleted file mode 100644
index 2fec5e4..0000000
--- a/tests/lang/bug45392.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Bug #45392 (ob_start()/ob_end_clean() and memory_limit)
---INI--
-display_errors=stderr
---FILE--
-<?php
-echo __LINE__ . "\n";
-ini_set('memory_limit', 100);
-ob_start(NULL, 10);
-echo __LINE__ ."\n";
-ob_start();
-$i = 0;
-while($i++ < 5000)  {
-  echo str_repeat("may not be displayed ", 42);
-}
-ob_end_flush();
-ob_end_clean();
-?>
---EXPECTF--
-2
-Fatal error: Allowed memory size of %d bytes exhausted%s
diff --git a/tests/lang/engine_assignExecutionOrder_001.phpt b/tests/lang/engine_assignExecutionOrder_001.phpt
new file mode 100644
index 0000000..bb197af
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_001.phpt
@@ -0,0 +1,152 @@
+--TEST--
+Evaluation order during assignments.
+--FILE--
+<?php
+
+function f() {
+	echo "in f()\n";
+	return "name";
+}
+
+function g() {
+	echo "in g()\n";
+	return "assigned value";
+}
+
+
+echo "\n\nOrder with local assignment:\n"; 
+${f()} = g();
+var_dump($name);
+
+echo "\n\nOrder with array assignment:\n";
+$a[f()] = g();
+var_dump($a);
+
+echo "\n\nOrder with object property assignment:\n";
+$oa = new stdClass;
+$oa->${f()} = g();
+var_dump($oa);
+
+echo "\n\nOrder with nested object property assignment:\n";
+$ob = new stdClass;
+$ob->o1 = new stdClass;
+$ob->o1->o2 = new stdClass;
+$ob->o1->o2->${f()} = g();
+var_dump($ob);
+
+echo "\n\nOrder with dim_list property assignment:\n";
+$oc = new stdClass;
+$oc->a[${f()}] = g();
+var_dump($oc);
+
+
+class C {
+	public static $name = "original";
+	public static $a = array(); 
+	public static $string = "hello";
+}
+echo "\n\nOrder with static property assignment:\n";
+C::${f()} = g();
+var_dump(C::$name);
+
+echo "\n\nOrder with static array property assignment:\n";
+C::$a[f()] = g();
+var_dump(C::$a);
+
+echo "\n\nOrder with indexed string assignment:\n";
+$string = "hello";
+function getOffset() { 
+	echo "in getOffset()\n";
+	return 0;
+}
+function newChar() {
+	echo "in newChar()\n";
+	return 'j';
+}
+$string[getOffset()] = newChar();
+var_dump($string);
+
+echo "\n\nOrder with static string property assignment:\n";
+C::$string[getOffset()] = newChar();
+var_dump(C::$string);
+
+?>
+--EXPECTF--
+
+
+Order with local assignment:
+in f()
+in g()
+string(14) "assigned value"
+
+
+Order with array assignment:
+in f()
+in g()
+array(1) {
+  ["name"]=>
+  string(14) "assigned value"
+}
+
+
+Order with object property assignment:
+in f()
+in g()
+object(stdClass)#%d (1) {
+  ["assigned value"]=>
+  string(14) "assigned value"
+}
+
+
+Order with nested object property assignment:
+in f()
+in g()
+object(stdClass)#%d (1) {
+  ["o1"]=>
+  object(stdClass)#%d (1) {
+    ["o2"]=>
+    object(stdClass)#%d (1) {
+      ["assigned value"]=>
+      string(14) "assigned value"
+    }
+  }
+}
+
+
+Order with dim_list property assignment:
+in f()
+in g()
+object(stdClass)#%d (1) {
+  ["a"]=>
+  array(1) {
+    ["assigned value"]=>
+    string(14) "assigned value"
+  }
+}
+
+
+Order with static property assignment:
+in f()
+in g()
+string(14) "assigned value"
+
+
+Order with static array property assignment:
+in f()
+in g()
+array(1) {
+  ["name"]=>
+  string(14) "assigned value"
+}
+
+
+Order with indexed string assignment:
+in getOffset()
+in newChar()
+string(5) "jello"
+
+
+Order with static string property assignment:
+in getOffset()
+in newChar()
+string(5) "jello"
diff --git a/tests/lang/engine_assignExecutionOrder_002.phpt b/tests/lang/engine_assignExecutionOrder_002.phpt
new file mode 100644
index 0000000..df8d75e
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_002.phpt
@@ -0,0 +1,135 @@
+--TEST--
+Evaluation order during assignments.
+--FILE--
+<?php
+
+// simple case with missing element
+$f = array("hello","item2","bye");
+list($a,,$b) = $f;
+echo "A=$a B=$b\n";
+
+
+// Warning: Cannot use a scalar value as an array in %s on line %d
+$c[$c=1] = 1;
+
+// i++ evaluated first, so $d[0] is 10
+$d = array(0,10);
+$i = 0;
+$d[$i++] = $i*10;
+// expected array is 10,10
+var_dump($d);
+
+// the f++++ makes f into 2, so $e 0 and 1 should both be 30
+$e = array(0,0);
+$f = 0;
+$g1 = array(10,10);
+$g2 = array(20,20);
+$g3 = array(30,30);
+$g = array($g1,$g2,$g3);
+list($e[$f++],$e[$f++]) = $g[$f];
+// expect 30,30
+var_dump($e); 
+
+
+$i1 = array(1,2);
+$i2 = array(10,20);
+$i3 = array(100,200);
+$i4 = array(array(1000,2000),3000);
+$i = array($i1,$i2,$i3,$i4);
+$j = array(0,0,0);
+$h = 0;
+// a list of lists 
+list(list($j[$h++],$j[$h++]),$j[$h++]) = $i[$h];
+var_dump($j);
+
+
+// list of lists with just variable assignments - expect 100,200,300
+$k3 = array(100,200);
+$k = array($k3,300);
+list(list($l,$m),$n) = $k;
+echo "L=$l M=$m N=$n\n";
+
+
+// expect $x and $y to be null - this fails on php.net 5.2.1 (invalid opcode) - fixed in 5.2.3 
+list($o,$p) = 20;
+echo "O=$o and P=$p\n";
+
+
+// list of lists with blanks and nulls expect 10 20 40 50 60 70 80
+$q1 = array(10,20,30,40);
+$q2 = array(50,60);
+$q3 = array($q1,$q2,null,70);
+$q4 = array($q3,null,80);
+
+list(list(list($r,$s,,$t),list($u,$v),,$w),,$x) = $q4;
+echo "$r $s $t $u $v $w $x\n";
+
+
+// expect y and z to be undefined 
+list($y,$z) = array();
+echo "Y=$y,Z=$z\n";
+
+// expect h to be defined and be 10
+list($aa,$bb) = array(10);
+echo "AA=$aa\n";
+
+// expect cc and dd to be 10 and 30
+list($cc,,$dd) = array(10,20,30,40);
+echo "CC=$cc DD=$dd\n";
+
+// expect the inner array to be defined 
+$ee = array("original array");
+function f() {
+  global $ee;
+  $ee = array("array created in f()");
+  return 1;
+}
+$ee["array entry created after f()"][f()] = "hello";
+print_r($ee);
+
+?>
+--EXPECTF--
+A=hello B=bye
+
+Warning: Cannot use a scalar value as an array in %s on line %d
+array(2) {
+  [0]=>
+  int(10)
+  [1]=>
+  int(10)
+}
+array(2) {
+  [0]=>
+  int(30)
+  [1]=>
+  int(30)
+}
+array(3) {
+  [0]=>
+  int(1000)
+  [1]=>
+  int(2000)
+  [2]=>
+  int(3000)
+}
+L=100 M=200 N=300
+O= and P=
+10 20 40 50 60 70 80
+
+Notice: Undefined offset:  1 in %s on line %d
+
+Notice: Undefined offset:  0 in %s on line %d
+Y=,Z=
+
+Notice: Undefined offset:  1 in %s on line %d
+AA=10
+CC=10 DD=30
+Array
+(
+    [0] => array created in f()
+    [array entry created after f()] => Array
+        (
+            [1] => hello
+        )
+
+)
diff --git a/tests/lang/engine_assignExecutionOrder_003.phpt b/tests/lang/engine_assignExecutionOrder_003.phpt
new file mode 100644
index 0000000..71c87c9
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_003.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Evaluation order during assignments.
+--FILE--
+<?php
+$b = "bb";
+$a = "aa";
+
+function foo() 
+{
+echo "Bad call\n";
+}
+
+function baa()
+{
+echo "Good call\n";
+}
+
+$bb = "baa";
+
+$aa = "foo";
+
+$c = ${$a=$b};
+
+$c();
+
+$a1 = array("dead","dead","dead");
+$a2 = array("dead","dead","live");
+$a3 = array("dead","dead","dead");
+
+$a = array($a1,$a2,$a3);
+
+function live()
+{
+echo "Good call\n";
+}
+
+function dead()
+{
+echo "Bad call\n";
+}
+
+$i = 0;
+
+$a[$i=1][++$i]();
+
+$a = -1;
+
+function foo1()
+{
+  global $a;
+  return ++$a;
+}
+
+$arr = array(array(0,0),0);
+
+$brr = array(0,0,array(0,0,0,5),0);
+$crr = array(0,0,0,0,array(0,0,0,0,0,10),0,0);
+
+$arr[foo1()][foo1()] = $brr[foo1()][foo1()] +
+                     $crr[foo1()][foo1()];
+
+$val = $arr[0][1];
+echo "Expect 15 and get...$val\n";
+
+$x = array(array(0),0);
+function mod($b)
+{
+global $x;
+$x = $b;
+return 0;
+}
+
+$x1 = array(array(1),1);
+$x2 = array(array(2),2);
+$x3 = array(array(3),3);
+$bx = array(10);
+
+$x[mod($x1)][mod($x2)] = $bx[mod($x3)];  
+
+// expecting 10,3
+
+var_dump($x);
+?>
+--EXPECT--
+Good call
+Good call
+Expect 15 and get...15
+array(2) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(10)
+  }
+  [1]=>
+  int(3)
+}
\ No newline at end of file
diff --git a/tests/lang/engine_assignExecutionOrder_004.phpt b/tests/lang/engine_assignExecutionOrder_004.phpt
new file mode 100644
index 0000000..09ff8bd
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_004.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Evaluation order during assignments.
+--FILE--
+<?php
+
+function i1() {
+        echo "i1\n";
+        return 1;
+}
+
+function i2() {
+        echo "i2\n";
+        return 1;
+}
+
+function i3() {
+        echo "i3\n";
+        return 3;
+}
+
+function i4() {
+        global $a;
+        $a = array(10, 11, 12, 13, 14);
+        echo "i4\n";
+        return 4;
+}
+
+$a = 0; // $a should not be indexable till the i4 has been executed
+list($a[i1()+i2()], , list($a[i3()], $a[i4()]), $a[]) = array (0, 1, array(30, 40), 3, 4);
+
+var_dump($a);
+
+?>
+--EXPECT--
+i1
+i2
+i3
+i4
+array(6) {
+  [0]=>
+  int(10)
+  [1]=>
+  int(11)
+  [2]=>
+  int(0)
+  [3]=>
+  int(30)
+  [4]=>
+  int(40)
+  [5]=>
+  int(3)
+}
diff --git a/tests/lang/engine_assignExecutionOrder_005.phpt b/tests/lang/engine_assignExecutionOrder_005.phpt
new file mode 100644
index 0000000..82715db
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_005.phpt
@@ -0,0 +1,74 @@
+--TEST--
+Evaluation order during assignments.
+--FILE--
+<?php
+
+function i1() {
+        echo "i1\n";
+        return 0;
+}
+
+function i2() {
+        echo "i2\n";
+        return 0;
+}
+
+function i3() {
+        echo "i3\n";
+        return 0;
+}
+
+function i4() {
+        echo "i4\n";
+        return 0;
+}
+
+function i5() {
+        echo "i5\n";
+        return 0;
+}
+
+function i6() {
+        echo "i6\n";
+        return 0;
+}
+
+$a = array(array(0));
+$b = array(array(1));
+$c = array(array(2));
+
+$a[i1()][i2()] = $b[i3()][i4()] = $c[i5()][i6()];
+
+var_dump($a);
+var_dump($b);
+var_dump($c);
+
+?>
+--EXPECT--
+i1
+i2
+i3
+i4
+i5
+i6
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
diff --git a/tests/lang/engine_assignExecutionOrder_006.phpt b/tests/lang/engine_assignExecutionOrder_006.phpt
new file mode 100644
index 0000000..ac90db8
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_006.phpt
@@ -0,0 +1,138 @@
+--TEST--
+Evaluation order during assignments.
+--FILE--
+<?php
+
+function i1() {
+        echo "i1\n";
+        return 0;
+}
+
+function i2() {
+        echo "i2\n";
+        return 0;
+}
+
+function i3() {
+        echo "i3\n";
+        return 0;
+}
+
+function i4() {
+        echo "i4\n";
+        return 0;
+}
+
+function i5() {
+        echo "i5\n";
+        return 0;
+}
+
+function i6() {
+        echo "i6\n";
+        return 0;
+}
+
+$a = array(array(0));
+$b = array(array(1));
+$c = array(array(2));
+
+$a[i1()][i2()] = ($b[i3()][i4()] = $c[i5()][i6()]);
+var_dump($a);
+var_dump($b);
+var_dump($c);
+
+$a[i1()][i2()] = $b[i3()][i4()] = -$c[i5()][i6()];
+var_dump($a);
+var_dump($b);
+var_dump($c);
+
+$a[i1()][i2()] = -($b[i3()][i4()] = +($c[i5()][i6()]));
+var_dump($a);
+var_dump($b);
+var_dump($c);
+
+
+?>
+--EXPECT--
+i1
+i2
+i3
+i4
+i5
+i6
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+i1
+i2
+i3
+i4
+i5
+i6
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(-2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(-2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+i1
+i2
+i3
+i4
+i5
+i6
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(-2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
diff --git a/tests/lang/engine_assignExecutionOrder_007.phpt b/tests/lang/engine_assignExecutionOrder_007.phpt
new file mode 100644
index 0000000..15a1696
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_007.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Check key execution order with &new. 
+--FILE--
+<?php
+$a[2][3] = 'stdClass';
+$a[$i=0][++$i] =& new $a[++$i][++$i];
+print_r($a);
+
+$o = new stdClass;
+$o->a =& new $a[$i=2][++$i];
+$o->a->b =& new $a[$i=2][++$i];
+print_r($o);
+?>
+--EXPECTF--
+
+Strict Standards: Assigning the return value of new by reference is deprecated in %s on line 3
+
+Strict Standards: Assigning the return value of new by reference is deprecated in %s on line 7
+
+Strict Standards: Assigning the return value of new by reference is deprecated in %s on line 8
+Array
+(
+    [2] => Array
+        (
+            [3] => stdClass
+        )
+
+    [0] => Array
+        (
+            [1] => stdClass Object
+                (
+                )
+
+        )
+
+)
+stdClass Object
+(
+    [a] => stdClass Object
+        (
+            [b] => stdClass Object
+                (
+                )
+
+        )
+
+)
diff --git a/tests/lang/engine_assignExecutionOrder_008.phpt b/tests/lang/engine_assignExecutionOrder_008.phpt
new file mode 100644
index 0000000..301fa54
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_008.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Ensure by value assignments leave temporaries on the stack, for all sorts of assignees.
+--FILE--
+<?php
+error_reporting(E_ALL & ~E_STRICT);
+
+function f() { return 0; }
+$a[0][1] = 'good';
+$a[1][1] = 'bad';
+
+echo "\n" . '$i=f(): ';
+echo $a[$i=f()][++$i];
+unset($i);
+
+echo "\n" . '$$x=f(): ';
+$x='i';
+echo $a[$$x=f()][++$$x];
+unset($i, $x);
+
+echo "\n" . '${\'i\'}=f(): ';
+echo $a[${'i'}=f()][++${'i'}];
+unset(${'i'});
+
+echo "\n" . '$i[0]=f(): ';
+echo $a[$i[0]=f()][++$i[0]];
+unset($i);
+
+echo "\n" . '$i[0][0]=f(): ';
+echo $a[$i[0][0]=f()][++$i[0][0]];
+unset($i);
+
+echo "\n" . '$i->p=f(): ';
+echo $a[$i->p=f()][++$i->p];
+unset($i);
+
+echo "\n" . '$i->p->q=f(): ';
+echo $a[$i->p->q=f()][++$i->p->q];
+unset($i);
+
+echo "\n" . '$i->p[0]=f(): ';
+echo $a[$i->p[0]=f()][++$i->p[0]];
+unset($i);
+
+echo "\n" . '$i->p[0]->p=f(): ';
+echo $a[$i->p[0]->p=f()][++$i->p[0]->p];
+unset($i);
+
+Class C {
+	static $p;
+}
+
+echo "\n" . 'C::$p=f(): ';
+echo $a[C::$p=f()][++C::$p];
+
+echo "\n" . 'C::$p[0]=f(): ';
+C::$p = array();
+echo $a[C::$p[0]=f()][++C::$p[0]];
+
+echo "\n" . 'C::$p->q=f(): ';
+C::$p = new stdclass;
+echo $a[C::$p->q=f()][++C::$p->q];
+?>
+--EXPECTF--
+$i=f(): good
+$$x=f(): good
+${'i'}=f(): good
+$i[0]=f(): good
+$i[0][0]=f(): good
+$i->p=f(): good
+$i->p->q=f(): good
+$i->p[0]=f(): good
+$i->p[0]->p=f(): good
+C::$p=f(): good
+C::$p[0]=f(): good
+C::$p->q=f(): good
\ No newline at end of file
diff --git a/tests/lang/engine_assignExecutionOrder_009.phpt b/tests/lang/engine_assignExecutionOrder_009.phpt
new file mode 100644
index 0000000..58300a1
--- /dev/null
+++ b/tests/lang/engine_assignExecutionOrder_009.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Execution ordering with comparison operators.
+--FILE--
+<?php
+function f($x) {
+	echo "f($x) ";
+	return $x;
+}
+
+echo "Function call args:\n";
+var_dump(f($i=0) < f(++$i)); 
+var_dump(f($i=0) <= f(++$i));
+var_dump(f($i=0) > f(++$i)); 
+var_dump(f($i=0) >= f(++$i));
+
+echo "\nArray indices:\n";
+$a[1][2] = 0;
+$a[3][4] = 1;
+$i=0;
+var_dump($a[$i=1][++$i] < $a[++$i][++$i]); 
+var_dump($a[$i=1][++$i] <= $a[++$i][++$i]);
+var_dump($a[$i=1][++$i] > $a[++$i][++$i]); 
+var_dump($a[$i=1][++$i] >= $a[++$i][++$i]);
+?>
+--EXPECTF--
+Function call args:
+f(0) f(1) bool(true)
+f(0) f(1) bool(true)
+f(0) f(1) bool(false)
+f(0) f(1) bool(false)
+
+Array indices:
+bool(true)
+bool(true)
+bool(false)
+bool(false)
diff --git a/tests/lang/execution_order.phpt b/tests/lang/execution_order.phpt
new file mode 100644
index 0000000..dc92791
--- /dev/null
+++ b/tests/lang/execution_order.phpt
@@ -0,0 +1,198 @@
+--TEST--
+Execution order of variables
+--FILE--
+<?php
+
+/* strings and concat */
+
+class strclass {
+   var $str = "bad";
+   static $statstr = "bad";
+}
+
+$a = "bad";
+$b = "good";
+echo "1)";
+$c = $a.($a=$b);
+echo $c;
+echo "\r\n";
+
+$a = "bad";
+$b = "good";
+$c = ($a=$b).$a;
+echo "2)";
+echo $c;
+echo "\r\n";
+
+
+$str = new strclass();
+$c = $str->str.($str->str="good");
+echo "3)";
+echo $c;
+echo "\r\n";
+
+$str->str = "bad";
+
+$c = ($str->str="good").$str->str;
+echo "4)";
+echo $c;
+echo "\r\n";
+
+$c = strclass::$statstr.(strclass::$statstr="good");
+echo "5)";
+echo $c;
+echo "\r\n";
+
+strclass::$statstr = "bad";
+
+$c = (strclass::$statstr="good").strclass::$statstr;
+echo "6)";
+echo $c;
+echo "\r\n";
+
+
+function foo() {
+   global $a;
+   $a = "good";
+   return $a;
+}
+
+
+$a = "bad";
+echo "7)";
+echo foo() . $a;
+echo "\r\n";
+
+$a = "bad";
+echo "8)";
+echo $a . foo();
+echo "\r\n";
+
+/* other operators */
+
+$x = 1;
+$z = $x - ($x++);
+echo "9)";
+echo $z;
+echo "\r\n";
+
+$x = 1;
+$z = ($x++) - $x;
+echo "10)";
+echo $z;
+echo "\r\n";
+
+$x = 1;
+$z = $x - (++$x);
+echo "11)";
+echo $z;
+echo "\r\n";
+
+$x = 1;
+$z = (++$x) - $x;
+echo "12)";
+echo $z;
+echo "\r\n";
+
+
+$x = 1;
+$y = 3;
+$z = $x - ($x=$y);
+echo "13)";
+echo $z;
+echo "\r\n";
+
+$x = 1;
+$y = 3;
+$z = ($x=$y) - $x;
+echo "14)";
+echo $z;
+echo "\r\n";
+
+
+$a = 100;
+$b = 200;
+echo "15)";
+echo $a + ($a=$b);
+echo "\r\n";
+
+$a = 100;
+$b = 200;
+echo "16)";
+echo ($a=$b) + $a;
+echo "\r\n";
+
+
+$a = array(100,200);
+$i = 0;
+
+echo "17)";
+echo $a[$i++] + $a[$i++];
+echo "\r\n";
+
+$i = -1;
+echo "18)";
+echo $a[++$i] + $a[++$i];
+echo "\r\n";
+
+$i = 0;
+echo "19)";
+echo $a[$i] + ($a[$i]=400);
+echo "\r\n";
+
+
+$a[0] = 100;
+echo "20)";
+echo ($a[$i]=400) + $a[$i];
+echo "\r\n";
+
+
+class c {
+   var $val = 10;
+   static $stat = 20;
+}
+
+echo "21)";
+echo c::$stat + (c::$stat=200);
+echo "\r\n";
+
+echo "22)";
+echo (c::$stat=300) + c::$stat;
+echo "\r\n";
+
+$c = new c();
+
+echo "23)";
+echo $c->val + ($c->val=200);
+echo "\r\n";
+
+echo "24)";
+echo ($c->val=300) + $c->val;
+echo "\r\n";
+ 
+?>
+--EXPECT--
+1)goodgood
+2)goodgood
+3)badgood
+4)goodgood
+5)badgood
+6)goodgood
+7)goodgood
+8)goodgood
+9)1
+10)-1
+11)0
+12)0
+13)0
+14)0
+15)400
+16)400
+17)300
+18)300
+19)500
+20)800
+21)220
+22)600
+23)210
+24)600
diff --git a/tests/lang/foreachLoop.001.phpt b/tests/lang/foreachLoop.001.phpt
new file mode 100644
index 0000000..164cac6
--- /dev/null
+++ b/tests/lang/foreachLoop.001.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Foreach loop tests - basic loop with just value and key => value.
+--FILE--
+<?php
+
+$a = array("a","b","c");
+
+foreach ($a as $v) {
+	var_dump($v);
+}
+foreach ($a as $k => $v) {
+	var_dump($k, $v);
+}
+//check key and value after the loop.
+var_dump($k, $v);
+
+echo "\n";
+//Dynamic array
+foreach (array("d","e","f") as $v) {
+	var_dump($v);
+}
+foreach (array("d","e","f") as $k => $v) {
+	var_dump($k, $v);
+}
+//check key and value after the loop.
+var_dump($k, $v);
+
+echo "\n";
+//Ensure counter is advanced during loop
+$a=array("a","b","c");
+foreach ($a as $v);
+var_dump(current($a));
+$a=array("a","b","c");
+foreach ($a as &$v);
+var_dump(current($a));
+
+?>
+--EXPECT--
+string(1) "a"
+string(1) "b"
+string(1) "c"
+int(0)
+string(1) "a"
+int(1)
+string(1) "b"
+int(2)
+string(1) "c"
+int(2)
+string(1) "c"
+
+string(1) "d"
+string(1) "e"
+string(1) "f"
+int(0)
+string(1) "d"
+int(1)
+string(1) "e"
+int(2)
+string(1) "f"
+int(2)
+string(1) "f"
+
+bool(false)
+bool(false)
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.002.phpt b/tests/lang/foreachLoop.002.phpt
new file mode 100644
index 0000000..e3000c7
--- /dev/null
+++ b/tests/lang/foreachLoop.002.phpt
@@ -0,0 +1,173 @@
+--TEST--
+Foreach loop tests - modifying the array during the loop.
+--FILE--
+<?php
+
+echo "\nDirectly changing array values.\n";
+$a = array("original.1","original.2","original.3");
+foreach ($a as $k=>$v) {
+	$a[$k]="changed.$k";
+	var_dump($v);
+}
+var_dump($a);
+
+echo "\nModifying the foreach \$value.\n";
+$a = array("original.1","original.2","original.3");
+foreach ($a as $k=>$v) {
+	$v="changed.$k";
+}
+var_dump($a);
+
+
+echo "\nModifying the foreach &\$value.\n";
+$a = array("original.1","original.2","original.3");
+foreach ($a as $k=>&$v) {
+	$v="changed.$k";
+}
+var_dump($a);
+
+echo "\nPushing elements onto an unreferenced array.\n";
+$a = array("original.1","original.2","original.3");
+$counter=0;
+foreach ($a as $v) {
+	array_push($a, "new.$counter");
+
+	//avoid infinite loop if test is failing
+    if ($counter++>10) {
+    	echo "Loop detected\n";
+    	break;    	
+    }
+}
+var_dump($a);
+
+echo "\nPushing elements onto an unreferenced array, using &\$value.\n";
+$a = array("original.1","original.2","original.3");
+$counter=0;
+foreach ($a as &$v) {
+	array_push($a, "new.$counter");
+
+	//avoid infinite loop if test is failing
+    if ($counter++>10) {
+    	echo "Loop detected\n";
+    	break;    	
+    }	
+}
+var_dump($a);
+
+echo "\nPopping elements off an unreferenced array.\n";
+$a = array("original.1","original.2","original.3");
+foreach ($a as $v) {
+	array_pop($a);
+	var_dump($v);	
+}
+var_dump($a);
+
+echo "\nPopping elements off an unreferenced array, using &\$value.\n";
+$a = array("original.1","original.2","original.3");
+foreach ($a as &$v) {
+	array_pop($a);
+	var_dump($v);
+}
+var_dump($a);
+
+?>
+--EXPECT--
+
+Directly changing array values.
+string(10) "original.1"
+string(10) "original.2"
+string(10) "original.3"
+array(3) {
+  [0]=>
+  string(9) "changed.0"
+  [1]=>
+  string(9) "changed.1"
+  [2]=>
+  string(9) "changed.2"
+}
+
+Modifying the foreach $value.
+array(3) {
+  [0]=>
+  string(10) "original.1"
+  [1]=>
+  string(10) "original.2"
+  [2]=>
+  string(10) "original.3"
+}
+
+Modifying the foreach &$value.
+array(3) {
+  [0]=>
+  string(9) "changed.0"
+  [1]=>
+  string(9) "changed.1"
+  [2]=>
+  &string(9) "changed.2"
+}
+
+Pushing elements onto an unreferenced array.
+array(6) {
+  [0]=>
+  string(10) "original.1"
+  [1]=>
+  string(10) "original.2"
+  [2]=>
+  string(10) "original.3"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.2"
+}
+
+Pushing elements onto an unreferenced array, using &$value.
+Loop detected
+array(15) {
+  [0]=>
+  string(10) "original.1"
+  [1]=>
+  string(10) "original.2"
+  [2]=>
+  string(10) "original.3"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.2"
+  [6]=>
+  string(5) "new.3"
+  [7]=>
+  string(5) "new.4"
+  [8]=>
+  string(5) "new.5"
+  [9]=>
+  string(5) "new.6"
+  [10]=>
+  string(5) "new.7"
+  [11]=>
+  &string(5) "new.8"
+  [12]=>
+  string(5) "new.9"
+  [13]=>
+  string(6) "new.10"
+  [14]=>
+  string(6) "new.11"
+}
+
+Popping elements off an unreferenced array.
+string(10) "original.1"
+string(10) "original.2"
+string(10) "original.3"
+array(0) {
+}
+
+Popping elements off an unreferenced array, using &$value.
+string(10) "original.1"
+string(10) "original.2"
+array(1) {
+  [0]=>
+  string(10) "original.1"
+}
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.003.phpt b/tests/lang/foreachLoop.003.phpt
new file mode 100644
index 0000000..d554d0d
--- /dev/null
+++ b/tests/lang/foreachLoop.003.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Foreach loop tests - error case: not an array.
+--FILE--
+<?php
+echo "\nNot an array.\n";
+$a = TRUE;
+foreach ($a as $v) {
+	var_dump($v);
+}
+
+$a = null;
+foreach ($a as $v) {
+	var_dump($v);
+}
+
+$a = 1;
+foreach ($a as $v) {
+	var_dump($v);
+}
+
+$a = 1.5;
+foreach ($a as $v) {
+	var_dump($v);
+}
+
+$a = "hello";
+foreach ($a as $v) {
+	var_dump($v);
+}
+
+echo "done.\n";
+?>
+--EXPECTF--
+
+Not an array.
+
+Warning: Invalid argument supplied for foreach() in %s on line 4
+
+Warning: Invalid argument supplied for foreach() in %s on line 9
+
+Warning: Invalid argument supplied for foreach() in %s on line 14
+
+Warning: Invalid argument supplied for foreach() in %s on line 19
+
+Warning: Invalid argument supplied for foreach() in %s on line 24
+done.
diff --git a/tests/lang/foreachLoop.004.phpt b/tests/lang/foreachLoop.004.phpt
new file mode 100644
index 0000000..8cc6094
--- /dev/null
+++ b/tests/lang/foreachLoop.004.phpt
@@ -0,0 +1,76 @@
+--TEST--
+Foreach loop tests - using an array element as the $value
+--FILE--
+<?php
+
+$a=array("a", "b", "c");
+$v=array();
+foreach($a as $v[0]) {
+	var_dump($v);
+}
+var_dump($a);
+var_dump($v);
+
+echo "\n";
+$a=array("a", "b", "c");
+$v=array();
+foreach($a as $k=>$v[0]) {
+	var_dump($k, $v);
+}
+var_dump($a);
+var_dump($k, $v);
+?>
+--EXPECT--
+array(1) {
+  [0]=>
+  string(1) "a"
+}
+array(1) {
+  [0]=>
+  string(1) "b"
+}
+array(1) {
+  [0]=>
+  string(1) "c"
+}
+array(3) {
+  [0]=>
+  string(1) "a"
+  [1]=>
+  string(1) "b"
+  [2]=>
+  string(1) "c"
+}
+array(1) {
+  [0]=>
+  string(1) "c"
+}
+
+int(0)
+array(1) {
+  [0]=>
+  string(1) "a"
+}
+int(1)
+array(1) {
+  [0]=>
+  string(1) "b"
+}
+int(2)
+array(1) {
+  [0]=>
+  string(1) "c"
+}
+array(3) {
+  [0]=>
+  string(1) "a"
+  [1]=>
+  string(1) "b"
+  [2]=>
+  string(1) "c"
+}
+int(2)
+array(1) {
+  [0]=>
+  string(1) "c"
+}
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.005.phpt b/tests/lang/foreachLoop.005.phpt
new file mode 100644
index 0000000..ae6ed3a
--- /dev/null
+++ b/tests/lang/foreachLoop.005.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Foreach loop tests - modifying the array during the loop: special case. Behaviour is good since php 5.2.2.
+--FILE--
+<?php
+$a = array("original.0","original.1","original.2");
+foreach ($a as $k=>&$v){
+  $a[$k] = "changed.$k";
+  echo "After changing \$a directly, \$v@$k is: $v\n";
+}
+//--- Expected output:
+//After changing $a directly, $v at 0 is: changed.0
+//After changing $a directly, $v at 1 is: changed.1
+//After changing $a directly, $v at 2 is: changed.2
+//--- Actual output from php.net before 5.2.2:
+//After changing $a directly, $v at 0 is: changed.0
+//After changing $a directly, $v at 1 is: original.1
+//After changing $a directly, $v at 2 is: original.2
+
+?>
+--EXPECT--
+After changing $a directly, $v at 0 is: changed.0
+After changing $a directly, $v at 1 is: changed.1
+After changing $a directly, $v at 2 is: changed.2
diff --git a/tests/lang/foreachLoop.006.phpt b/tests/lang/foreachLoop.006.phpt
new file mode 100644
index 0000000..a90f924
--- /dev/null
+++ b/tests/lang/foreachLoop.006.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Foreach loop tests - error case: key is a reference.
+--FILE--
+<?php
+$a = array("a","b","c");
+foreach ($a as &$k=>$v) {
+  var_dump($v);
+}
+?>
+--EXPECTF--
+Fatal error: Key element cannot be a reference in %s on line 3
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.007.phpt b/tests/lang/foreachLoop.007.phpt
new file mode 100644
index 0000000..f47fdc7
--- /dev/null
+++ b/tests/lang/foreachLoop.007.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Foreach loop tests - error case: reference to constant array.
+--FILE--
+<?php
+echo "\nReference to constant array\n";
+foreach (array(1,2) as &$v) {
+  var_dump($v);
+}
+?>
+--EXPECTF--
+Parse error: %s on line 3
diff --git a/tests/lang/foreachLoop.008.phpt b/tests/lang/foreachLoop.008.phpt
new file mode 100644
index 0000000..787f43b
--- /dev/null
+++ b/tests/lang/foreachLoop.008.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Foreach loop tests - error case: reference to constant array, with key.
+--FILE--
+<?php
+foreach (array(1,2) as $k=>&$v) {
+  var_dump($v);
+}
+?>
+--EXPECTF--
+Fatal error: Cannot create references to elements of a temporary array expression in %s on line 2
diff --git a/tests/lang/foreachLoop.009.phpt b/tests/lang/foreachLoop.009.phpt
new file mode 100644
index 0000000..4586a35
--- /dev/null
+++ b/tests/lang/foreachLoop.009.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Foreach loop tests - foreach operates on the original array if the array is referenced outside the loop.
+--FILE--
+<?php
+// From php.net/foreach:
+// "Unless the array is referenced, foreach operates on a copy of the specified array."
+
+echo "\nRemove elements from a referenced array during loop\n";
+$refedArray=array("original.0", "original.1", "original.2");
+$ref=&$refedArray;
+foreach ($refedArray as $k=>$v1) {
+	array_pop($refedArray);
+	echo "key: $k; value: $v1\n";
+}
+
+echo "\nRemove elements from a referenced array during loop, using &\$value\n";
+$refedArray=array("original.0", "original.1", "original.2");
+$ref=&$refedArray;
+foreach ($refedArray as $k=>&$v2) {
+	array_pop($refedArray);
+	echo "key: $k; value: $v2\n";
+}
+
+echo "\nAdd elements to a referenced array during loop\n";
+$refedArray=array("original.0", "original.1", "original.2");
+$ref=&$refedArray;
+$count=0;
+foreach ($refedArray as $k=>$v3) {
+	array_push($refedArray, "new.$k");
+	echo "key: $k; value: $v3\n";
+	
+	if ($count++>5) {
+		echo "Loop detected, as expected.\n";
+		break;
+	}
+}
+
+echo "\nAdd elements to a referenced array during loop, using &\$value\n";
+$refedArray=array("original.0", "original.1", "original.2");
+$ref=&$refedArray;
+$count=0;
+foreach ($refedArray as $k=>&$v4) {
+	array_push($refedArray, "new.$k");
+	echo "key: $k; value: $v4\n";
+	
+	if ($count++>5) {
+		echo "Loop detected, as expected.\n";
+		break;
+	}
+}
+
+?>
+--EXPECT--
+
+Remove elements from a referenced array during loop
+key: 0; value: original.0
+key: 1; value: original.1
+
+Remove elements from a referenced array during loop, using &$value
+key: 0; value: original.0
+key: 1; value: original.1
+
+Add elements to a referenced array during loop
+key: 0; value: original.0
+key: 1; value: original.1
+key: 2; value: original.2
+key: 3; value: new.0
+key: 4; value: new.1
+key: 5; value: new.2
+key: 6; value: new.3
+Loop detected, as expected.
+
+Add elements to a referenced array during loop, using &$value
+key: 0; value: original.0
+key: 1; value: original.1
+key: 2; value: original.2
+key: 3; value: new.0
+key: 4; value: new.1
+key: 5; value: new.2
+key: 6; value: new.3
+Loop detected, as expected.
+
diff --git a/tests/lang/foreachLoop.010.phpt b/tests/lang/foreachLoop.010.phpt
new file mode 100644
index 0000000..a7a3e97
--- /dev/null
+++ b/tests/lang/foreachLoop.010.phpt
@@ -0,0 +1,40 @@
+--TEST--
+This test illustrates the impact of invoking destructors when refcount is decremented to 0 on foreach.
+It will pass only if the 'contentious code' in PHPValue.decReferences() is enabled.
+--FILE--
+<?php
+
+$a = array(1,2,3);
+$container = array(&$a);
+
+// From php.net:  
+//   "Unless the array is referenced, foreach operates on a copy of
+//    the specified array and not the array itself."
+// At this point, the array $a is referenced.
+
+// The following line ensures $a is no longer references as a consequence
+// of running the 'destructor' on $container.  
+$container = null;
+
+// At this point the array $a is no longer referenced, so foreach should operate on a copy of the array.
+// However, P8 does not invoke 'destructors' when refcount is decremented to 0.
+// Consequently, $a thinks it is still referenced, and foreach will operate on the array itself.
+// This provokes a difference in behaviour when changing the number of elements in the array while
+// iterating over it.  
+
+$i=0;
+foreach ($a as $v) {
+	array_push($a, 'new');
+	var_dump($v);
+	
+	if (++$i>10) {
+		echo "Infinite loop detected\n";
+		break;
+	}
+}
+
+?>
+--EXPECTF--
+int(1)
+int(2)
+int(3)
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.011.phpt b/tests/lang/foreachLoop.011.phpt
new file mode 100644
index 0000000..94cb605
--- /dev/null
+++ b/tests/lang/foreachLoop.011.phpt
@@ -0,0 +1,34 @@
+--TEST-- 
+Changing from an interable type to a non iterable type during the iteration 
+--FILE--
+<?php
+echo "\nChange from array to non iterable:\n";
+$a = array(1,2,3);
+$b=&$a;
+foreach ($a as $v) {
+	var_dump($v);
+	$b=1;
+}
+
+echo "\nChange from object to non iterable:\n";
+$a = new stdClass;
+$a->a=1;
+$a->b=2;
+$b=&$a;
+foreach ($a as $v) {
+	var_dump($v);
+	$b='x';	
+}
+
+?>
+--EXPECTF--
+
+Change from array to non iterable:
+int(1)
+
+Warning: Invalid argument supplied for foreach() in %s on line 5
+
+Change from object to non iterable:
+int(1)
+
+Warning: Invalid argument supplied for foreach() in %s on line 15
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.012.phpt b/tests/lang/foreachLoop.012.phpt
new file mode 100644
index 0000000..1165b74
--- /dev/null
+++ b/tests/lang/foreachLoop.012.phpt
@@ -0,0 +1,494 @@
+--TEST--
+Directly modifying an unreferenced array when foreach'ing over it.
+--FILE--
+<?php
+
+define('MAX_LOOPS',5);
+
+function withRefValue($elements, $transform) {
+	echo "\n---( Array with $elements element(s): )---\n";
+	//Build array:
+	for ($i=0; $i<$elements; $i++) {
+		$a[] = "v.$i";
+	}
+	$counter=0;
+	
+	echo "--> State of array before loop:\n";
+	var_dump($a);
+	
+	echo "--> Do loop:\n";	
+	foreach ($a as $k=>$v) {
+		echo "     iteration $counter:  \$k=$k; \$v=$v\n";
+		eval($transform);
+		$counter++;
+		if ($counter>MAX_LOOPS) {
+			echo "  ** Stuck in a loop! **\n";
+			break;
+		}
+	}
+	
+	echo "--> State of array after loop:\n";
+	var_dump($a);
+}
+
+
+echo "\nPopping elements off end of an unreferenced array";
+$transform = 'array_pop($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nShift elements off start of an unreferenced array";
+$transform = 'array_shift($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nRemove current element of an unreferenced array";
+$transform = 'unset($a[$k]);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the end of an unreferenced array";
+$transform = 'array_push($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the start of an unreferenced array";
+$transform = 'array_unshift($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+?>
+--EXPECTF--
+
+Popping elements off end of an unreferenced array
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Shift elements off start of an unreferenced array
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Remove current element of an unreferenced array
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Adding elements to the end of an unreferenced array
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(5) "new.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(5) "new.0"
+  [3]=>
+  string(5) "new.1"
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(6) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.2"
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+  [4]=>
+  string(5) "new.0"
+  [5]=>
+  string(5) "new.1"
+  [6]=>
+  string(5) "new.2"
+  [7]=>
+  string(5) "new.3"
+}
+
+
+
+Adding elements to the start of an unreferenced array
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  string(5) "new.0"
+  [1]=>
+  string(3) "v.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(4) {
+  [0]=>
+  string(5) "new.1"
+  [1]=>
+  string(5) "new.0"
+  [2]=>
+  string(3) "v.0"
+  [3]=>
+  string(3) "v.1"
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(6) {
+  [0]=>
+  string(5) "new.2"
+  [1]=>
+  string(5) "new.1"
+  [2]=>
+  string(5) "new.0"
+  [3]=>
+  string(3) "v.0"
+  [4]=>
+  string(3) "v.1"
+  [5]=>
+  string(3) "v.2"
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(5) "new.3"
+  [1]=>
+  string(5) "new.2"
+  [2]=>
+  string(5) "new.1"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(3) "v.0"
+  [5]=>
+  string(3) "v.1"
+  [6]=>
+  string(3) "v.2"
+  [7]=>
+  string(3) "v.3"
+}
diff --git a/tests/lang/foreachLoop.013.phpt b/tests/lang/foreachLoop.013.phpt
new file mode 100644
index 0000000..3dec119
--- /dev/null
+++ b/tests/lang/foreachLoop.013.phpt
@@ -0,0 +1,555 @@
+--TEST--
+Directly modifying an unreferenced array when foreach'ing over it while using &$value syntax.
+--FILE--
+<?php
+
+define('MAX_LOOPS',5);
+
+function withRefValue($elements, $transform) {
+	echo "\n---( Array with $elements element(s): )---\n";
+	//Build array:
+	for ($i=0; $i<$elements; $i++) {
+		$a[] = "v.$i";
+	}
+	$counter=0;
+	
+	echo "--> State of array before loop:\n";
+	var_dump($a);
+	
+	echo "--> Do loop:\n";	
+	foreach ($a as $k=>&$v) {
+		echo "     iteration $counter:  \$k=$k; \$v=$v\n";
+		eval($transform);
+		$counter++;
+		if ($counter>MAX_LOOPS) {
+			echo "  ** Stuck in a loop! **\n";
+			break;
+		}
+	}
+	
+	echo "--> State of array after loop:\n";
+	var_dump($a);
+}
+
+
+echo "\nPopping elements off end of an unreferenced array, using &\$value.";
+$transform = 'array_pop($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nShift elements off start of an unreferenced array, using &\$value.";
+$transform = 'array_shift($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nRemove current element of an unreferenced array, using &\$value.";
+$transform = 'unset($a[$k]);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the end of an unreferenced array, using &\$value.";
+$transform = 'array_push($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the start of an unreferenced array, using &\$value.";
+$transform = 'array_unshift($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+?>
+--EXPECTF--
+
+Popping elements off end of an unreferenced array, using &$value.
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=0; $v=v.0
+     iteration 3:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Shift elements off start of an unreferenced array, using &$value.
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+     iteration 2:  $k=0; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+     iteration 2:  $k=0; $v=v.2
+     iteration 3:  $k=0; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Remove current element of an unreferenced array, using &$value.
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Adding elements to the end of an unreferenced array, using &$value.
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  &string(3) "v.0"
+  [1]=>
+  string(5) "new.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=new.0
+     iteration 3:  $k=3; $v=new.1
+     iteration 4:  $k=4; $v=new.2
+     iteration 5:  $k=5; $v=new.3
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(5) "new.0"
+  [3]=>
+  string(5) "new.1"
+  [4]=>
+  string(5) "new.2"
+  [5]=>
+  &string(5) "new.3"
+  [6]=>
+  string(5) "new.4"
+  [7]=>
+  string(5) "new.5"
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=new.0
+     iteration 4:  $k=4; $v=new.1
+     iteration 5:  $k=5; $v=new.2
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(9) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  &string(5) "new.2"
+  [6]=>
+  string(5) "new.3"
+  [7]=>
+  string(5) "new.4"
+  [8]=>
+  string(5) "new.5"
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+     iteration 4:  $k=4; $v=new.0
+     iteration 5:  $k=5; $v=new.1
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(10) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+  [4]=>
+  string(5) "new.0"
+  [5]=>
+  &string(5) "new.1"
+  [6]=>
+  string(5) "new.2"
+  [7]=>
+  string(5) "new.3"
+  [8]=>
+  string(5) "new.4"
+  [9]=>
+  string(5) "new.5"
+}
+
+
+
+Adding elements to the start of an unreferenced array, using &$value.
+---( Array with 1 element(s): )---
+--> State of array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  string(5) "new.0"
+  [1]=>
+  &string(3) "v.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  &string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+}
+
+---( Array with 3 element(s): )---
+--> State of array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(9) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  &string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+  [8]=>
+  string(3) "v.2"
+}
+
+---( Array with 4 element(s): )---
+--> State of array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(10) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  &string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+  [8]=>
+  string(3) "v.2"
+  [9]=>
+  string(3) "v.3"
+}
diff --git a/tests/lang/foreachLoop.014.phpt b/tests/lang/foreachLoop.014.phpt
new file mode 100644
index 0000000..ab3c657
--- /dev/null
+++ b/tests/lang/foreachLoop.014.phpt
@@ -0,0 +1,556 @@
+--TEST--
+Directly modifying a REFERENCED array when foreach'ing over it.
+--FILE--
+<?php
+
+define('MAX_LOOPS',5);
+
+function withRefValue($elements, $transform) {
+	echo "\n---( Array with $elements element(s): )---\n";
+	//Build array:
+	for ($i=0; $i<$elements; $i++) {
+		$a[] = "v.$i";
+	}
+	$counter=0;
+	
+	$ref = &$a;
+	
+	echo "--> State of referenced array before loop:\n";
+	var_dump($a);
+	
+	echo "--> Do loop:\n";	
+	foreach ($a as $k=>$v) {
+		echo "     iteration $counter:  \$k=$k; \$v=$v\n";
+		eval($transform);
+		$counter++;
+		if ($counter>MAX_LOOPS) {
+			echo "  ** Stuck in a loop! **\n";
+			break;
+		}
+	}
+	
+	echo "--> State of array after loop:\n";
+	var_dump($a);
+}
+
+
+echo "\nPopping elements off end of a referenced array";
+$transform = 'array_pop($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nShift elements off start of a referenced array";
+$transform = 'array_shift($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nRemove current element of a referenced array";
+$transform = 'unset($a[$k]);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the end of a referenced array";
+$transform = 'array_push($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the start of a referenced array";
+$transform = 'array_unshift($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+?>
+--EXPECTF--
+Popping elements off end of a referenced array
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=0; $v=v.0
+     iteration 3:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Shift elements off start of a referenced array
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+     iteration 2:  $k=0; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+     iteration 2:  $k=0; $v=v.2
+     iteration 3:  $k=0; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Remove current element of a referenced array
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Adding elements to the end of a referenced array
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(5) "new.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=new.0
+     iteration 3:  $k=3; $v=new.1
+     iteration 4:  $k=4; $v=new.2
+     iteration 5:  $k=5; $v=new.3
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(5) "new.0"
+  [3]=>
+  string(5) "new.1"
+  [4]=>
+  string(5) "new.2"
+  [5]=>
+  string(5) "new.3"
+  [6]=>
+  string(5) "new.4"
+  [7]=>
+  string(5) "new.5"
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=new.0
+     iteration 4:  $k=4; $v=new.1
+     iteration 5:  $k=5; $v=new.2
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(9) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.2"
+  [6]=>
+  string(5) "new.3"
+  [7]=>
+  string(5) "new.4"
+  [8]=>
+  string(5) "new.5"
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+     iteration 4:  $k=4; $v=new.0
+     iteration 5:  $k=5; $v=new.1
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(10) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+  [4]=>
+  string(5) "new.0"
+  [5]=>
+  string(5) "new.1"
+  [6]=>
+  string(5) "new.2"
+  [7]=>
+  string(5) "new.3"
+  [8]=>
+  string(5) "new.4"
+  [9]=>
+  string(5) "new.5"
+}
+
+
+
+Adding elements to the start of a referenced array
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  string(5) "new.0"
+  [1]=>
+  string(3) "v.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(9) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+  [8]=>
+  string(3) "v.2"
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(10) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+  [8]=>
+  string(3) "v.2"
+  [9]=>
+  string(3) "v.3"
+}
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.015.phpt b/tests/lang/foreachLoop.015.phpt
new file mode 100644
index 0000000..dfba159
--- /dev/null
+++ b/tests/lang/foreachLoop.015.phpt
@@ -0,0 +1,557 @@
+--TEST--
+Directly modifying a REFERENCED array when foreach'ing over it while using &$value syntax.
+--FILE--
+<?php
+
+define('MAX_LOOPS',5);
+
+function withRefValue($elements, $transform) {
+	echo "\n---( Array with $elements element(s): )---\n";
+	//Build array:
+	for ($i=0; $i<$elements; $i++) {
+		$a[] = "v.$i";
+	}
+	$counter=0;
+	
+	$ref = &$a;
+	
+	echo "--> State of referenced array before loop:\n";
+	var_dump($a);
+	
+	echo "--> Do loop:\n";	
+	foreach ($a as $k=>&$v) {
+		echo "     iteration $counter:  \$k=$k; \$v=$v\n";
+		eval($transform);
+		$counter++;
+		if ($counter>MAX_LOOPS) {
+			echo "  ** Stuck in a loop! **\n";
+			break;
+		}
+	}
+	
+	echo "--> State of array after loop:\n";
+	var_dump($a);
+}
+
+
+echo "\nPopping elements off end of a referenced array, using &\$value";
+$transform = 'array_pop($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nShift elements off start of a referenced array, using &\$value";
+$transform = 'array_shift($a);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nRemove current element of a referenced array, using &\$value";
+$transform = 'unset($a[$k]);';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the end of a referenced array, using &\$value";
+$transform = 'array_push($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+echo "\n\n\nAdding elements to the start of a referenced array, using &\$value";
+$transform = 'array_unshift($a, "new.$counter");';
+withRefValue(1, $transform);
+withRefValue(2, $transform);
+withRefValue(3, $transform);
+withRefValue(4, $transform);
+
+?>
+--EXPECTF--
+
+Popping elements off end of a referenced array, using &$value
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=0; $v=v.0
+     iteration 3:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Shift elements off start of a referenced array, using &$value
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+     iteration 2:  $k=0; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=v.1
+     iteration 2:  $k=0; $v=v.2
+     iteration 3:  $k=0; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Remove current element of a referenced array, using &$value
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+--> State of array after loop:
+array(0) {
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+--> State of array after loop:
+array(0) {
+}
+
+
+
+Adding elements to the end of a referenced array, using &$value
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  &string(3) "v.0"
+  [1]=>
+  string(5) "new.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=new.0
+     iteration 3:  $k=3; $v=new.1
+     iteration 4:  $k=4; $v=new.2
+     iteration 5:  $k=5; $v=new.3
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(5) "new.0"
+  [3]=>
+  string(5) "new.1"
+  [4]=>
+  string(5) "new.2"
+  [5]=>
+  &string(5) "new.3"
+  [6]=>
+  string(5) "new.4"
+  [7]=>
+  string(5) "new.5"
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=new.0
+     iteration 4:  $k=4; $v=new.1
+     iteration 5:  $k=5; $v=new.2
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(9) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(5) "new.0"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  &string(5) "new.2"
+  [6]=>
+  string(5) "new.3"
+  [7]=>
+  string(5) "new.4"
+  [8]=>
+  string(5) "new.5"
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=1; $v=v.1
+     iteration 2:  $k=2; $v=v.2
+     iteration 3:  $k=3; $v=v.3
+     iteration 4:  $k=4; $v=new.0
+     iteration 5:  $k=5; $v=new.1
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(10) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+  [4]=>
+  string(5) "new.0"
+  [5]=>
+  &string(5) "new.1"
+  [6]=>
+  string(5) "new.2"
+  [7]=>
+  string(5) "new.3"
+  [8]=>
+  string(5) "new.4"
+  [9]=>
+  string(5) "new.5"
+}
+
+
+
+Adding elements to the start of a referenced array, using &$value
+---( Array with 1 element(s): )---
+--> State of referenced array before loop:
+array(1) {
+  [0]=>
+  string(3) "v.0"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+--> State of array after loop:
+array(2) {
+  [0]=>
+  string(5) "new.0"
+  [1]=>
+  &string(3) "v.0"
+}
+
+---( Array with 2 element(s): )---
+--> State of referenced array before loop:
+array(2) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(8) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  &string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+}
+
+---( Array with 3 element(s): )---
+--> State of referenced array before loop:
+array(3) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(9) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  &string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+  [8]=>
+  string(3) "v.2"
+}
+
+---( Array with 4 element(s): )---
+--> State of referenced array before loop:
+array(4) {
+  [0]=>
+  string(3) "v.0"
+  [1]=>
+  string(3) "v.1"
+  [2]=>
+  string(3) "v.2"
+  [3]=>
+  string(3) "v.3"
+}
+--> Do loop:
+     iteration 0:  $k=0; $v=v.0
+     iteration 1:  $k=0; $v=new.0
+     iteration 2:  $k=0; $v=new.1
+     iteration 3:  $k=0; $v=new.2
+     iteration 4:  $k=0; $v=new.3
+     iteration 5:  $k=0; $v=new.4
+  ** Stuck in a loop! **
+--> State of array after loop:
+array(10) {
+  [0]=>
+  string(5) "new.5"
+  [1]=>
+  &string(5) "new.4"
+  [2]=>
+  string(5) "new.3"
+  [3]=>
+  string(5) "new.2"
+  [4]=>
+  string(5) "new.1"
+  [5]=>
+  string(5) "new.0"
+  [6]=>
+  string(3) "v.0"
+  [7]=>
+  string(3) "v.1"
+  [8]=>
+  string(3) "v.2"
+  [9]=>
+  string(3) "v.3"
+}
diff --git a/tests/lang/foreachLoop.016.phpt b/tests/lang/foreachLoop.016.phpt
new file mode 100644
index 0000000..dc31a50
--- /dev/null
+++ b/tests/lang/foreachLoop.016.phpt
@@ -0,0 +1,198 @@
+--TEST--
+Ensure foreach splits the iterated entity from its cow reference set, for all sorts of iterated entities.
+--FILE--
+<?php
+  error_reporting(E_ALL & ~E_STRICT);
+
+  echo "\n" . '$a' . "\n";
+  $b = $a = array('original');
+  foreach($a as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '${\'a\'}' . "\n";
+  $b = $a = array('original');
+  foreach(${'a'} as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$$a' . "\n";
+  $a = 'blah';
+  $$a = array('original');
+  $b = $$a;
+  foreach($$a as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a[0]' . "\n";
+  $b = $a[0] = array('original');
+  foreach($a[0] as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a[0][0]' . "\n";
+  $b = $a[0][0] = array('original');
+  foreach($a[0][0] as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a->b' . "\n";
+  $b = $a->b = array('original');
+  foreach($a->b as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a->b->c' . "\n";
+  $b = $a->b->c = array('original');
+  foreach($a->b as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a->b[0]' . "\n";
+  $b = $a->b[0] = array('original');
+  foreach($a->b[0] as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a->b[0][0]' . "\n";
+  $b = $a->b[0][0] = array('original');
+  foreach($a->b[0][0] as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . '$a->b[0]->c' . "\n";
+  $b = $a->b[0]->c = array('original');
+  foreach($a->b[0]->c as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  class C {
+  	public static $a;
+  }
+  
+  echo "\n" . 'C::$a' . "\n";
+  C::$a = array('original');
+  $b = C::$a;
+  foreach(C::$a as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset($a, $b);
+  
+  echo "\n" . 'C::$a[0]' . "\n";
+  C::$a[0] = array('original');
+  $b = C::$a[0];
+  foreach(C::$a[0] as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset(C::$a[0], $b);
+  
+  echo "\n" . 'C::$a[0]->b' . "\n";
+  C::$a[0]->b = array('original');
+  $b = C::$a[0]->b;
+  foreach(C::$a[0]->b as $k=>&$v) {
+  	 $v = 'changed';
+  }
+  var_dump($b);
+  unset(C::$a[0]->b, $b);
+?>
+--EXPECTF--
+
+$a
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+${'a'}
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$$a
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a[0]
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a[0][0]
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a->b
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a->b->c
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a->b[0]
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a->b[0][0]
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+$a->b[0]->c
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+C::$a
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+C::$a[0]
+array(1) {
+  [0]=>
+  string(8) "original"
+}
+
+C::$a[0]->b
+array(1) {
+  [0]=>
+  string(8) "original"
+}
\ No newline at end of file
diff --git a/tests/lang/foreachLoop.017.phpt b/tests/lang/foreachLoop.017.phpt
new file mode 100644
index 0000000..3d2618e
--- /dev/null
+++ b/tests/lang/foreachLoop.017.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Ensure foreach works with arrays with Binary keys.
+--FILE--
+<?php
+$a = array ( "\x90" => 10 );
+foreach ($a as $val=>$key) echo $key;
+echo "\nDone\n";
+?> 
+--EXPECTF--
+10
+Done
\ No newline at end of file
diff --git a/tests/lang/foreachLoopObjects.001.phpt b/tests/lang/foreachLoopObjects.001.phpt
new file mode 100644
index 0000000..e6047b7
--- /dev/null
+++ b/tests/lang/foreachLoopObjects.001.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Foreach loop on objects - basic loop with just value and key => value.
+--FILE--
+<?php
+
+class C {
+	public $a = "Original a";
+	public $b = "Original b";
+	public $c = "Original c";
+	protected $d = "Original d";
+	private $e = "Original e";
+	
+}
+
+echo "\n\nSimple loop.\n";
+$obj = new C;
+foreach ($obj as $v) {
+	var_dump($v);
+}
+foreach ($obj as $k => $v) {
+	var_dump($k, $v);
+}
+echo "\nCheck key and value after the loop.\n";
+var_dump($k, $v);
+
+
+echo "\n\nObject instantiated inside loop.\n";
+foreach (new C as $v) {
+	var_dump($v);
+}
+foreach (new C as $k => $v) {
+	var_dump($k, $v);
+}
+echo "\nCheck key and value after the loop.\n";
+var_dump($k, $v);
+?>
+--EXPECTF--
+
+
+Simple loop.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(1) "a"
+string(10) "Original a"
+string(1) "b"
+string(10) "Original b"
+string(1) "c"
+string(10) "Original c"
+
+Check key and value after the loop.
+string(1) "c"
+string(10) "Original c"
+
+
+Object instantiated inside loop.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(1) "a"
+string(10) "Original a"
+string(1) "b"
+string(10) "Original b"
+string(1) "c"
+string(10) "Original c"
+
+Check key and value after the loop.
+string(1) "c"
+string(10) "Original c"
\ No newline at end of file
diff --git a/tests/lang/foreachLoopObjects.002.phpt b/tests/lang/foreachLoopObjects.002.phpt
new file mode 100644
index 0000000..cac82f7
--- /dev/null
+++ b/tests/lang/foreachLoopObjects.002.phpt
@@ -0,0 +1,585 @@
+--TEST--
+Foreach loop tests - visibility.
+--FILE--
+<?php
+
+class C {
+	public $a = "Original a";
+	public $b = "Original b";
+	public $c = "Original c";
+	protected $d = "Original d";
+	private $e = "Original e";
+
+	function doForEachC() {
+		echo "in C::doForEachC\n";
+		foreach ($this as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+		
+	static function doForEach($obj) {
+		echo "in C::doForEach\n";
+		foreach ($obj as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+	
+	function doForEachOnThis() {
+		echo "in C::doForEachOnThis\n";
+		foreach ($this as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+	
+}
+
+class D extends C {
+	
+	private $f = "Original f";
+	protected $g = "Original g";
+	
+	static function doForEach($obj) {
+		echo "in D::doForEach\n";
+		foreach ($obj as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+
+	function doForEachOnThis() {
+		echo "in D::doForEachOnThis\n";
+		foreach ($this as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+}
+
+class E extends D {
+	public $a = "Overridden a";
+	public $b = "Overridden b";
+	public $c = "Overridden c";
+	protected $d = "Overridden d";
+	private $e = "Overridden e";	
+
+	static function doForEach($obj) {
+		echo "in E::doForEach\n";
+		foreach ($obj as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+
+	function doForEachOnThis() {
+		echo "in E::doForEachOnThis\n";
+		foreach ($this as $k=>&$v) {
+			var_dump($v);
+			$v="changed.$k";
+		}
+	}
+}
+
+echo "\n\nIterate over various generations from within overridden methods:\n";
+echo "\n--> Using instance of C:\n";
+$myC = new C;
+$myC->doForEachOnThis();
+var_dump($myC);
+echo "\n--> Using instance of D:\n";
+$myD = new D;
+$myD->doForEachOnThis();
+var_dump($myD);
+echo "\n--> Using instance of E:\n";
+$myE = new E;
+$myE->doForEachOnThis();
+var_dump($myE);
+
+echo "\n\nIterate over various generations from within an inherited method:\n";
+echo "\n--> Using instance of C:\n";
+$myC = new C;
+$myC->doForEachC();
+var_dump($myC);
+echo "\n--> Using instance of D:\n";
+$myD = new D;
+$myD->doForEachC();
+var_dump($myD);
+echo "\n--> Using instance of E:\n";
+$myE = new E;
+$myE->doForEachC();
+var_dump($myE);
+
+echo "\n\nIterate over various generations from within an overridden static method:\n";
+echo "\n--> Using instance of C:\n";
+$myC = new C;
+C::doForEach($myC);
+var_dump($myC);
+$myC = new C;
+D::doForEach($myC);
+var_dump($myC);
+$myC = new C;
+E::doForEach($myC);
+var_dump($myC);
+echo "\n--> Using instance of D:\n";
+$myD = new D;
+C::doForEach($myD);
+var_dump($myD);
+$myD = new D;
+D::doForEach($myD);
+var_dump($myD);
+$myD = new D;
+E::doForEach($myD);
+var_dump($myD);
+echo "\n--> Using instance of E:\n";
+$myE = new E;
+C::doForEach($myE);
+var_dump($myE);
+$myE = new E;
+D::doForEach($myE);
+var_dump($myE);
+$myE = new E;
+E::doForEach($myE);
+var_dump($myE);
+
+
+echo "\n\nIterate over various generations from outside the object:\n";
+echo "\n--> Using instance of C:\n";
+$myC = new C;
+foreach ($myC as $k=>&$v) {
+	var_dump($v);
+	$v="changed.$k";
+}
+var_dump($myC);
+echo "\n--> Using instance of D:\n";
+$myD = new D;
+foreach ($myD as $k=>&$v) {
+	var_dump($v);
+	$v="changed.$k";
+}
+var_dump($myD);
+echo "\n--> Using instance of E:\n";
+$myE = new E;
+foreach ($myE as $k=>&$v) {
+	var_dump($v);
+	$v="changed.$k";
+}
+var_dump($myE);
+?>
+--EXPECTF--
+Iterate over various generations from within overridden methods:
+
+--> Using instance of C:
+in C::doForEachOnThis
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+
+--> Using instance of D:
+in D::doForEachOnThis
+string(10) "Original f"
+string(10) "Original g"
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+object(D)#%d (7) {
+  ["f:private"]=>
+  string(9) "changed.f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+--> Using instance of E:
+in E::doForEachOnThis
+string(12) "Overridden a"
+string(12) "Overridden b"
+string(12) "Overridden c"
+string(12) "Overridden d"
+string(12) "Overridden e"
+string(10) "Original g"
+object(E)#%d (8) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+
+Iterate over various generations from within an inherited method:
+
+--> Using instance of C:
+in C::doForEachC
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+
+--> Using instance of D:
+in C::doForEachC
+string(10) "Original g"
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(D)#%d (7) {
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+
+--> Using instance of E:
+in C::doForEachC
+string(12) "Overridden a"
+string(12) "Overridden b"
+string(12) "Overridden c"
+string(12) "Overridden d"
+string(10) "Original g"
+string(10) "Original e"
+object(E)#%d (8) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(12) "Overridden e"
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+
+
+Iterate over various generations from within an overridden static method:
+
+--> Using instance of C:
+in C::doForEach
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+in D::doForEach
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+in E::doForEach
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+--> Using instance of D:
+in C::doForEach
+string(10) "Original g"
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(D)#%d (7) {
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+in D::doForEach
+string(10) "Original f"
+string(10) "Original g"
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+object(D)#%d (7) {
+  ["f:private"]=>
+  string(9) "changed.f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+in E::doForEach
+string(10) "Original g"
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+object(D)#%d (7) {
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+--> Using instance of E:
+in C::doForEach
+string(12) "Overridden a"
+string(12) "Overridden b"
+string(12) "Overridden c"
+string(12) "Overridden d"
+string(10) "Original g"
+string(10) "Original e"
+object(E)#%d (8) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(12) "Overridden e"
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["e:private"]=>
+  string(9) "changed.e"
+}
+in D::doForEach
+string(12) "Overridden a"
+string(12) "Overridden b"
+string(12) "Overridden c"
+string(12) "Overridden d"
+string(10) "Original f"
+string(10) "Original g"
+object(E)#%d (8) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(12) "Overridden e"
+  ["f:private"]=>
+  string(9) "changed.f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+in E::doForEach
+string(12) "Overridden a"
+string(12) "Overridden b"
+string(12) "Overridden c"
+string(12) "Overridden d"
+string(12) "Overridden e"
+string(10) "Original g"
+object(E)#%d (8) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(9) "changed.d"
+  ["e:private"]=>
+  string(9) "changed.e"
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(9) "changed.g"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+
+Iterate over various generations from outside the object:
+
+--> Using instance of C:
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  &string(9) "changed.c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+--> Using instance of D:
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+object(D)#%d (7) {
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(10) "Original g"
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  &string(9) "changed.c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+--> Using instance of E:
+string(12) "Overridden a"
+string(12) "Overridden b"
+string(12) "Overridden c"
+object(E)#%d (8) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  &string(9) "changed.c"
+  ["d:protected"]=>
+  string(12) "Overridden d"
+  ["e:private"]=>
+  string(12) "Overridden e"
+  ["f:private"]=>
+  string(10) "Original f"
+  ["g:protected"]=>
+  string(10) "Original g"
+  ["e:private"]=>
+  string(10) "Original e"
+}
diff --git a/tests/lang/foreachLoopObjects.003.phpt b/tests/lang/foreachLoopObjects.003.phpt
new file mode 100644
index 0000000..51997d1
--- /dev/null
+++ b/tests/lang/foreachLoopObjects.003.phpt
@@ -0,0 +1,249 @@
+--TEST--
+Foreach loop tests - modifying the object during the loop.
+--FILE--
+<?php
+
+class C {
+	public $a = "Original a";
+	public $b = "Original b";
+	public $c = "Original c";
+	protected $d = "Original d";
+	private $e = "Original e";
+}
+
+echo "\nDirectly changing object values.\n";
+$obj = new C;
+foreach ($obj as $k=>$v) {
+	$obj->$k="changed.$k";
+	var_dump($v);
+}
+var_dump($obj);
+
+echo "\nModifying the foreach \$value.\n";
+$obj = new C;
+foreach ($obj as $k=>$v) {
+	$v="changed.$k";
+}
+var_dump($obj);
+
+
+echo "\nModifying the foreach &\$value.\n";
+$obj = new C;
+foreach ($obj as $k=>&$v) {
+	$v="changed.$k";
+}
+var_dump($obj);
+
+echo "\nAdding properties to an an object.\n";
+$obj = new C;
+$counter=0;
+foreach ($obj as $v) {
+	$newPropName = "new$counter";
+	$obj->$newPropName = "Added property $counter";
+    if ($counter++>10) {
+    	echo "Loop detected\n";
+    	break;
+    }
+	var_dump($v);    
+}
+var_dump($obj);
+
+echo "\nAdding properties to an an object, using &\$value.\n";
+$obj = new C;
+$counter=0;
+foreach ($obj as &$v) {
+	$newPropName = "new$counter";
+	$obj->$newPropName = "Added property $counter";
+    if ($counter++>10) {
+    	echo "Loop detected\n";
+    	break;    	
+    }
+	var_dump($v);    
+}
+var_dump($obj);
+
+echo "\nRemoving properties from an object.\n";
+$obj = new C;
+foreach ($obj as $v) {
+	unset($obj->a);
+	unset($obj->b);
+	unset($obj->c);	
+	var_dump($v);
+}
+var_dump($obj);
+
+echo "\nRemoving properties from an object, using &\$value.\n";
+$obj = new C;
+foreach ($obj as &$v) {
+	unset($obj->a);
+	unset($obj->b);
+	unset($obj->c);
+	var_dump($v);
+}
+var_dump($obj);
+
+?>
+--EXPECTF--
+
+Directly changing object values.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  string(9) "changed.c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+Modifying the foreach $value.
+object(C)#%d (5) {
+  ["a"]=>
+  string(10) "Original a"
+  ["b"]=>
+  string(10) "Original b"
+  ["c"]=>
+  string(10) "Original c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+Modifying the foreach &$value.
+object(C)#%d (5) {
+  ["a"]=>
+  string(9) "changed.a"
+  ["b"]=>
+  string(9) "changed.b"
+  ["c"]=>
+  &string(9) "changed.c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+Adding properties to an an object.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(16) "Added property 0"
+string(16) "Added property 1"
+string(16) "Added property 2"
+string(16) "Added property 3"
+string(16) "Added property 4"
+string(16) "Added property 5"
+string(16) "Added property 6"
+string(16) "Added property 7"
+Loop detected
+object(C)#%d (17) {
+  ["a"]=>
+  string(10) "Original a"
+  ["b"]=>
+  string(10) "Original b"
+  ["c"]=>
+  string(10) "Original c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+  ["new0"]=>
+  string(16) "Added property 0"
+  ["new1"]=>
+  string(16) "Added property 1"
+  ["new2"]=>
+  string(16) "Added property 2"
+  ["new3"]=>
+  string(16) "Added property 3"
+  ["new4"]=>
+  string(16) "Added property 4"
+  ["new5"]=>
+  string(16) "Added property 5"
+  ["new6"]=>
+  string(16) "Added property 6"
+  ["new7"]=>
+  string(16) "Added property 7"
+  ["new8"]=>
+  string(16) "Added property 8"
+  ["new9"]=>
+  string(16) "Added property 9"
+  ["new10"]=>
+  string(17) "Added property 10"
+  ["new11"]=>
+  string(17) "Added property 11"
+}
+
+Adding properties to an an object, using &$value.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(16) "Added property 0"
+string(16) "Added property 1"
+string(16) "Added property 2"
+string(16) "Added property 3"
+string(16) "Added property 4"
+string(16) "Added property 5"
+string(16) "Added property 6"
+string(16) "Added property 7"
+Loop detected
+object(C)#%d (17) {
+  ["a"]=>
+  string(10) "Original a"
+  ["b"]=>
+  string(10) "Original b"
+  ["c"]=>
+  string(10) "Original c"
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+  ["new0"]=>
+  string(16) "Added property 0"
+  ["new1"]=>
+  string(16) "Added property 1"
+  ["new2"]=>
+  string(16) "Added property 2"
+  ["new3"]=>
+  string(16) "Added property 3"
+  ["new4"]=>
+  string(16) "Added property 4"
+  ["new5"]=>
+  string(16) "Added property 5"
+  ["new6"]=>
+  string(16) "Added property 6"
+  ["new7"]=>
+  string(16) "Added property 7"
+  ["new8"]=>
+  &string(16) "Added property 8"
+  ["new9"]=>
+  string(16) "Added property 9"
+  ["new10"]=>
+  string(17) "Added property 10"
+  ["new11"]=>
+  string(17) "Added property 11"
+}
+
+Removing properties from an object.
+string(10) "Original a"
+object(C)#%d (2) {
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
+
+Removing properties from an object, using &$value.
+string(10) "Original a"
+object(C)#%d (2) {
+  ["d:protected"]=>
+  string(10) "Original d"
+  ["e:private"]=>
+  string(10) "Original e"
+}
diff --git a/tests/lang/foreachLoopObjects.004.phpt b/tests/lang/foreachLoopObjects.004.phpt
new file mode 100644
index 0000000..060a17e
--- /dev/null
+++ b/tests/lang/foreachLoopObjects.004.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Foreach loop tests - Removing the current element from an iterated object.
+--FILE--
+<?php
+
+class C {
+	public $a = "Original a";
+	public $b = "Original b";
+	public $c = "Original c";
+	public $d = "Original d";
+	public $e = "Original e";
+}
+
+echo "\nRemoving the current element from an iterated object.\n";
+$obj = new C;
+$count=0;
+foreach ($obj as $v) {
+	if ($v==$obj->b) {
+		unset($obj->b);	
+	}
+	var_dump($v);
+	if (++$count>10) {
+		echo "Loop detected.\n";
+		break;
+	}	
+}
+var_dump($obj);
+
+
+?>
+--EXPECTF--
+
+Removing the current element from an iterated object.
+string(10) "Original a"
+string(10) "Original b"
+
+Notice: Undefined property: C::$b in %s on line 15
+string(10) "Original c"
+
+Notice: Undefined property: C::$b in %s on line 15
+string(10) "Original d"
+
+Notice: Undefined property: C::$b in %s on line 15
+string(10) "Original e"
+object(C)#%d (4) {
+  ["a"]=>
+  string(10) "Original a"
+  ["c"]=>
+  string(10) "Original c"
+  ["d"]=>
+  string(10) "Original d"
+  ["e"]=>
+  string(10) "Original e"
+}
diff --git a/tests/lang/foreachLoopObjects.005.phpt b/tests/lang/foreachLoopObjects.005.phpt
new file mode 100644
index 0000000..1692bcd
--- /dev/null
+++ b/tests/lang/foreachLoopObjects.005.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Foreach loop tests - removing properties before and after the current property during the loop.
+--FILE--
+<?php
+
+class C {
+	public $a = "Original a";
+	public $b = "Original b";
+	public $c = "Original c";
+	public $d = "Original d";
+	public $e = "Original e";
+}
+
+echo "\nRemoving properties before the current element from an iterated object.\n";
+$obj = new C;
+$count=0;
+foreach ($obj as $v) {
+	if ($v==$obj->a) {
+		unset($obj->c);	
+	}
+	var_dump($v);
+	if (++$count>10) {
+		echo "Loop detected.\n";
+		break;
+	}		
+}
+var_dump($obj);
+
+echo "\nRemoving properties before the current element from an iterated object.\n";
+$obj = new C;
+foreach ($obj as $v) {
+	if ($v==$obj->b) {
+		unset($obj->a);	
+	}
+	var_dump($v);
+	if (++$count>10) {
+		echo "Loop detected.\n";
+		break;
+	}	
+}
+var_dump($obj);
+
+
+?>
+--EXPECTF--
+
+Removing properties before the current element from an iterated object.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original d"
+string(10) "Original e"
+object(C)#%d (4) {
+  ["a"]=>
+  string(10) "Original a"
+  ["b"]=>
+  string(10) "Original b"
+  ["d"]=>
+  string(10) "Original d"
+  ["e"]=>
+  string(10) "Original e"
+}
+
+Removing properties before the current element from an iterated object.
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(C)#%d (4) {
+  ["b"]=>
+  string(10) "Original b"
+  ["c"]=>
+  string(10) "Original c"
+  ["d"]=>
+  string(10) "Original d"
+  ["e"]=>
+  string(10) "Original e"
+}
diff --git a/tests/lang/foreachLoopObjects.006.phpt b/tests/lang/foreachLoopObjects.006.phpt
new file mode 100644
index 0000000..8218b44
--- /dev/null
+++ b/tests/lang/foreachLoopObjects.006.phpt
@@ -0,0 +1,147 @@
+--TEST--
+Foreach loop tests - substituting the entire iterated entity during the loop.
+--FILE--
+<?php
+
+class C {
+	public $a = "Original a";
+	public $b = "Original b";
+	public $c = "Original c";
+	public $d = "Original d";
+	public $e = "Original e";
+}
+
+echo "\nSubstituting the iterated object for a different object.\n";
+$obj = new C;
+$obj2 = new stdclass;
+$obj2->a = "new a";
+$obj2->b = "new b";
+$obj2->c = "new c";
+$obj2->d = "new d";
+$obj2->e = "new e";
+$obj2->f = "new f";
+$ref = &$obj;
+$count=0;
+foreach ($obj as $v) {
+	var_dump($v);
+	if ($v==$obj->b) {
+	  $ref=$obj2;
+	}
+	if (++$count>10) {
+		echo "Loop detected.\n";
+		break;
+	}	
+}
+var_dump($obj);
+
+echo "\nSubstituting the iterated object for an array.\n";
+$obj = new C;
+$a = array(1,2,3,4,5,6,7,8);
+$ref = &$obj;
+$count=0;
+foreach ($obj as $v) {
+	var_dump($v);
+	if ($v==="Original b") {
+	  $ref=$a;
+	}
+	if (++$count>10) {
+		echo "Loop detected.\n";
+		break;
+	}	
+}
+var_dump($obj);
+
+echo "\nSubstituting the iterated array for an object.\n";
+$a = array(1,2,3,4,5,6,7,8);
+$obj = new C;
+$ref = &$a;
+$count=0;
+foreach ($a as $v) {
+	var_dump($v);
+	if ($v===2) {
+	  $ref=$obj;
+	}
+	if (++$count>10) {
+		echo "Loop detected.\n";
+		break;
+	}
+}
+var_dump($obj);
+
+?>
+--EXPECTF--
+
+Substituting the iterated object for a different object.
+string(10) "Original a"
+string(10) "Original b"
+string(5) "new a"
+string(5) "new b"
+string(5) "new c"
+string(5) "new d"
+string(5) "new e"
+string(5) "new f"
+object(stdClass)#%d (6) {
+  ["a"]=>
+  string(5) "new a"
+  ["b"]=>
+  string(5) "new b"
+  ["c"]=>
+  string(5) "new c"
+  ["d"]=>
+  string(5) "new d"
+  ["e"]=>
+  string(5) "new e"
+  ["f"]=>
+  string(5) "new f"
+}
+
+Substituting the iterated object for an array.
+string(10) "Original a"
+string(10) "Original b"
+int(1)
+int(2)
+int(3)
+int(4)
+int(5)
+int(6)
+int(7)
+int(8)
+array(8) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  int(3)
+  [3]=>
+  int(4)
+  [4]=>
+  int(5)
+  [5]=>
+  int(6)
+  [6]=>
+  int(7)
+  [7]=>
+  int(8)
+}
+
+Substituting the iterated array for an object.
+int(1)
+int(2)
+string(10) "Original a"
+string(10) "Original b"
+string(10) "Original c"
+string(10) "Original d"
+string(10) "Original e"
+object(C)#%d (5) {
+  ["a"]=>
+  string(10) "Original a"
+  ["b"]=>
+  string(10) "Original b"
+  ["c"]=>
+  string(10) "Original c"
+  ["d"]=>
+  string(10) "Original d"
+  ["e"]=>
+  string(10) "Original e"
+}
diff --git a/tests/lang/operators/add_basiclong_64bit.phpt b/tests/lang/operators/add_basiclong_64bit.phpt
new file mode 100644
index 0000000..cae8f4f
--- /dev/null
+++ b/tests/lang/operators/add_basiclong_64bit.phpt
@@ -0,0 +1,582 @@
+--TEST--
+Test + operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal + $otherVal ---\n";   
+      var_dump($longVal+$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal + $longVal ---\n";   
+      var_dump($otherVal+$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 + 0 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 + 1 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807 + -1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775807 + 7 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807 + 9 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807 + 65 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807 + -44 ---
+int(9223372036854775763)
+--- testing: 9223372036854775807 + 2147483647 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775807 + 9223372036854775807 ---
+float(1.844674407371E+19)
+--- testing: -9223372036854775808 + 0 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 + 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775808 + -1 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775808 + 7 ---
+int(-9223372036854775801)
+--- testing: -9223372036854775808 + 9 ---
+int(-9223372036854775799)
+--- testing: -9223372036854775808 + 65 ---
+int(-9223372036854775743)
+--- testing: -9223372036854775808 + -44 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775808 + 2147483647 ---
+int(-9223372034707292161)
+--- testing: -9223372036854775808 + 9223372036854775807 ---
+int(-1)
+--- testing: 2147483647 + 0 ---
+int(2147483647)
+--- testing: 2147483647 + 1 ---
+int(2147483648)
+--- testing: 2147483647 + -1 ---
+int(2147483646)
+--- testing: 2147483647 + 7 ---
+int(2147483654)
+--- testing: 2147483647 + 9 ---
+int(2147483656)
+--- testing: 2147483647 + 65 ---
+int(2147483712)
+--- testing: 2147483647 + -44 ---
+int(2147483603)
+--- testing: 2147483647 + 2147483647 ---
+int(4294967294)
+--- testing: 2147483647 + 9223372036854775807 ---
+float(9.2233720390023E+18)
+--- testing: -2147483648 + 0 ---
+int(-2147483648)
+--- testing: -2147483648 + 1 ---
+int(-2147483647)
+--- testing: -2147483648 + -1 ---
+int(-2147483649)
+--- testing: -2147483648 + 7 ---
+int(-2147483641)
+--- testing: -2147483648 + 9 ---
+int(-2147483639)
+--- testing: -2147483648 + 65 ---
+int(-2147483583)
+--- testing: -2147483648 + -44 ---
+int(-2147483692)
+--- testing: -2147483648 + 2147483647 ---
+int(-1)
+--- testing: -2147483648 + 9223372036854775807 ---
+int(9223372034707292159)
+--- testing: 9223372034707292160 + 0 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 + 1 ---
+int(9223372034707292161)
+--- testing: 9223372034707292160 + -1 ---
+int(9223372034707292159)
+--- testing: 9223372034707292160 + 7 ---
+int(9223372034707292167)
+--- testing: 9223372034707292160 + 9 ---
+int(9223372034707292169)
+--- testing: 9223372034707292160 + 65 ---
+int(9223372034707292225)
+--- testing: 9223372034707292160 + -44 ---
+int(9223372034707292116)
+--- testing: 9223372034707292160 + 2147483647 ---
+int(9223372036854775807)
+--- testing: 9223372034707292160 + 9223372036854775807 ---
+float(1.8446744071562E+19)
+--- testing: -9223372034707292160 + 0 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 + 1 ---
+int(-9223372034707292159)
+--- testing: -9223372034707292160 + -1 ---
+int(-9223372034707292161)
+--- testing: -9223372034707292160 + 7 ---
+int(-9223372034707292153)
+--- testing: -9223372034707292160 + 9 ---
+int(-9223372034707292151)
+--- testing: -9223372034707292160 + 65 ---
+int(-9223372034707292095)
+--- testing: -9223372034707292160 + -44 ---
+int(-9223372034707292204)
+--- testing: -9223372034707292160 + 2147483647 ---
+int(-9223372032559808513)
+--- testing: -9223372034707292160 + 9223372036854775807 ---
+int(2147483647)
+--- testing: 2147483648 + 0 ---
+int(2147483648)
+--- testing: 2147483648 + 1 ---
+int(2147483649)
+--- testing: 2147483648 + -1 ---
+int(2147483647)
+--- testing: 2147483648 + 7 ---
+int(2147483655)
+--- testing: 2147483648 + 9 ---
+int(2147483657)
+--- testing: 2147483648 + 65 ---
+int(2147483713)
+--- testing: 2147483648 + -44 ---
+int(2147483604)
+--- testing: 2147483648 + 2147483647 ---
+int(4294967295)
+--- testing: 2147483648 + 9223372036854775807 ---
+float(9.2233720390023E+18)
+--- testing: -2147483649 + 0 ---
+int(-2147483649)
+--- testing: -2147483649 + 1 ---
+int(-2147483648)
+--- testing: -2147483649 + -1 ---
+int(-2147483650)
+--- testing: -2147483649 + 7 ---
+int(-2147483642)
+--- testing: -2147483649 + 9 ---
+int(-2147483640)
+--- testing: -2147483649 + 65 ---
+int(-2147483584)
+--- testing: -2147483649 + -44 ---
+int(-2147483693)
+--- testing: -2147483649 + 2147483647 ---
+int(-2)
+--- testing: -2147483649 + 9223372036854775807 ---
+int(9223372034707292158)
+--- testing: 4294967294 + 0 ---
+int(4294967294)
+--- testing: 4294967294 + 1 ---
+int(4294967295)
+--- testing: 4294967294 + -1 ---
+int(4294967293)
+--- testing: 4294967294 + 7 ---
+int(4294967301)
+--- testing: 4294967294 + 9 ---
+int(4294967303)
+--- testing: 4294967294 + 65 ---
+int(4294967359)
+--- testing: 4294967294 + -44 ---
+int(4294967250)
+--- testing: 4294967294 + 2147483647 ---
+int(6442450941)
+--- testing: 4294967294 + 9223372036854775807 ---
+float(9.2233720411497E+18)
+--- testing: 4294967295 + 0 ---
+int(4294967295)
+--- testing: 4294967295 + 1 ---
+int(4294967296)
+--- testing: 4294967295 + -1 ---
+int(4294967294)
+--- testing: 4294967295 + 7 ---
+int(4294967302)
+--- testing: 4294967295 + 9 ---
+int(4294967304)
+--- testing: 4294967295 + 65 ---
+int(4294967360)
+--- testing: 4294967295 + -44 ---
+int(4294967251)
+--- testing: 4294967295 + 2147483647 ---
+int(6442450942)
+--- testing: 4294967295 + 9223372036854775807 ---
+float(9.2233720411497E+18)
+--- testing: 4294967293 + 0 ---
+int(4294967293)
+--- testing: 4294967293 + 1 ---
+int(4294967294)
+--- testing: 4294967293 + -1 ---
+int(4294967292)
+--- testing: 4294967293 + 7 ---
+int(4294967300)
+--- testing: 4294967293 + 9 ---
+int(4294967302)
+--- testing: 4294967293 + 65 ---
+int(4294967358)
+--- testing: 4294967293 + -44 ---
+int(4294967249)
+--- testing: 4294967293 + 2147483647 ---
+int(6442450940)
+--- testing: 4294967293 + 9223372036854775807 ---
+float(9.2233720411497E+18)
+--- testing: 9223372036854775806 + 0 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 + 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 + -1 ---
+int(9223372036854775805)
+--- testing: 9223372036854775806 + 7 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806 + 9 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806 + 65 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806 + -44 ---
+int(9223372036854775762)
+--- testing: 9223372036854775806 + 2147483647 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775806 + 9223372036854775807 ---
+float(1.844674407371E+19)
+--- testing: 9.2233720368548E+18 + 0 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + 1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + -1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + 7 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + 9 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + 65 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + -44 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 + 2147483647 ---
+float(9.2233720390023E+18)
+--- testing: 9.2233720368548E+18 + 9223372036854775807 ---
+float(1.844674407371E+19)
+--- testing: -9223372036854775807 + 0 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 + 1 ---
+int(-9223372036854775806)
+--- testing: -9223372036854775807 + -1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775807 + 7 ---
+int(-9223372036854775800)
+--- testing: -9223372036854775807 + 9 ---
+int(-9223372036854775798)
+--- testing: -9223372036854775807 + 65 ---
+int(-9223372036854775742)
+--- testing: -9223372036854775807 + -44 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775807 + 2147483647 ---
+int(-9223372034707292160)
+--- testing: -9223372036854775807 + 9223372036854775807 ---
+int(0)
+--- testing: -9.2233720368548E+18 + 0 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + 1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + -1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + 7 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + 9 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + 65 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + -44 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 + 2147483647 ---
+float(-9.2233720347073E+18)
+--- testing: -9.2233720368548E+18 + 9223372036854775807 ---
+float(0)
+--- testing: 0 + 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 0 + -9223372036854775808 ---
+int(-9223372036854775808)
+--- testing: 0 + 2147483647 ---
+int(2147483647)
+--- testing: 0 + -2147483648 ---
+int(-2147483648)
+--- testing: 0 + 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 0 + -9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: 0 + 2147483648 ---
+int(2147483648)
+--- testing: 0 + -2147483649 ---
+int(-2147483649)
+--- testing: 0 + 4294967294 ---
+int(4294967294)
+--- testing: 0 + 4294967295 ---
+int(4294967295)
+--- testing: 0 + 4294967293 ---
+int(4294967293)
+--- testing: 0 + 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: 0 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 0 + -9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: 0 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 1 + 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 1 + -9223372036854775808 ---
+int(-9223372036854775807)
+--- testing: 1 + 2147483647 ---
+int(2147483648)
+--- testing: 1 + -2147483648 ---
+int(-2147483647)
+--- testing: 1 + 9223372034707292160 ---
+int(9223372034707292161)
+--- testing: 1 + -9223372034707292160 ---
+int(-9223372034707292159)
+--- testing: 1 + 2147483648 ---
+int(2147483649)
+--- testing: 1 + -2147483649 ---
+int(-2147483648)
+--- testing: 1 + 4294967294 ---
+int(4294967295)
+--- testing: 1 + 4294967295 ---
+int(4294967296)
+--- testing: 1 + 4294967293 ---
+int(4294967294)
+--- testing: 1 + 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 1 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 1 + -9223372036854775807 ---
+int(-9223372036854775806)
+--- testing: 1 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -1 + 9223372036854775807 ---
+int(9223372036854775806)
+--- testing: -1 + -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: -1 + 2147483647 ---
+int(2147483646)
+--- testing: -1 + -2147483648 ---
+int(-2147483649)
+--- testing: -1 + 9223372034707292160 ---
+int(9223372034707292159)
+--- testing: -1 + -9223372034707292160 ---
+int(-9223372034707292161)
+--- testing: -1 + 2147483648 ---
+int(2147483647)
+--- testing: -1 + -2147483649 ---
+int(-2147483650)
+--- testing: -1 + 4294967294 ---
+int(4294967293)
+--- testing: -1 + 4294967295 ---
+int(4294967294)
+--- testing: -1 + 4294967293 ---
+int(4294967292)
+--- testing: -1 + 9223372036854775806 ---
+int(9223372036854775805)
+--- testing: -1 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -1 + -9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -1 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 7 + 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 7 + -9223372036854775808 ---
+int(-9223372036854775801)
+--- testing: 7 + 2147483647 ---
+int(2147483654)
+--- testing: 7 + -2147483648 ---
+int(-2147483641)
+--- testing: 7 + 9223372034707292160 ---
+int(9223372034707292167)
+--- testing: 7 + -9223372034707292160 ---
+int(-9223372034707292153)
+--- testing: 7 + 2147483648 ---
+int(2147483655)
+--- testing: 7 + -2147483649 ---
+int(-2147483642)
+--- testing: 7 + 4294967294 ---
+int(4294967301)
+--- testing: 7 + 4294967295 ---
+int(4294967302)
+--- testing: 7 + 4294967293 ---
+int(4294967300)
+--- testing: 7 + 9223372036854775806 ---
+float(9.2233720368548E+18)
+--- testing: 7 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 7 + -9223372036854775807 ---
+int(-9223372036854775800)
+--- testing: 7 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 9 + 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 9 + -9223372036854775808 ---
+int(-9223372036854775799)
+--- testing: 9 + 2147483647 ---
+int(2147483656)
+--- testing: 9 + -2147483648 ---
+int(-2147483639)
+--- testing: 9 + 9223372034707292160 ---
+int(9223372034707292169)
+--- testing: 9 + -9223372034707292160 ---
+int(-9223372034707292151)
+--- testing: 9 + 2147483648 ---
+int(2147483657)
+--- testing: 9 + -2147483649 ---
+int(-2147483640)
+--- testing: 9 + 4294967294 ---
+int(4294967303)
+--- testing: 9 + 4294967295 ---
+int(4294967304)
+--- testing: 9 + 4294967293 ---
+int(4294967302)
+--- testing: 9 + 9223372036854775806 ---
+float(9.2233720368548E+18)
+--- testing: 9 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 9 + -9223372036854775807 ---
+int(-9223372036854775798)
+--- testing: 9 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 65 + 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 65 + -9223372036854775808 ---
+int(-9223372036854775743)
+--- testing: 65 + 2147483647 ---
+int(2147483712)
+--- testing: 65 + -2147483648 ---
+int(-2147483583)
+--- testing: 65 + 9223372034707292160 ---
+int(9223372034707292225)
+--- testing: 65 + -9223372034707292160 ---
+int(-9223372034707292095)
+--- testing: 65 + 2147483648 ---
+int(2147483713)
+--- testing: 65 + -2147483649 ---
+int(-2147483584)
+--- testing: 65 + 4294967294 ---
+int(4294967359)
+--- testing: 65 + 4294967295 ---
+int(4294967360)
+--- testing: 65 + 4294967293 ---
+int(4294967358)
+--- testing: 65 + 9223372036854775806 ---
+float(9.2233720368548E+18)
+--- testing: 65 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 65 + -9223372036854775807 ---
+int(-9223372036854775742)
+--- testing: 65 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -44 + 9223372036854775807 ---
+int(9223372036854775763)
+--- testing: -44 + -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: -44 + 2147483647 ---
+int(2147483603)
+--- testing: -44 + -2147483648 ---
+int(-2147483692)
+--- testing: -44 + 9223372034707292160 ---
+int(9223372034707292116)
+--- testing: -44 + -9223372034707292160 ---
+int(-9223372034707292204)
+--- testing: -44 + 2147483648 ---
+int(2147483604)
+--- testing: -44 + -2147483649 ---
+int(-2147483693)
+--- testing: -44 + 4294967294 ---
+int(4294967250)
+--- testing: -44 + 4294967295 ---
+int(4294967251)
+--- testing: -44 + 4294967293 ---
+int(4294967249)
+--- testing: -44 + 9223372036854775806 ---
+int(9223372036854775762)
+--- testing: -44 + 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -44 + -9223372036854775807 ---
+float(-9.2233720368548E+18)
+--- testing: -44 + -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 2147483647 + 9223372036854775807 ---
+float(9.2233720390023E+18)
+--- testing: 2147483647 + -9223372036854775808 ---
+int(-9223372034707292161)
+--- testing: 2147483647 + 2147483647 ---
+int(4294967294)
+--- testing: 2147483647 + -2147483648 ---
+int(-1)
+--- testing: 2147483647 + 9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 2147483647 + -9223372034707292160 ---
+int(-9223372032559808513)
+--- testing: 2147483647 + 2147483648 ---
+int(4294967295)
+--- testing: 2147483647 + -2147483649 ---
+int(-2)
+--- testing: 2147483647 + 4294967294 ---
+int(6442450941)
+--- testing: 2147483647 + 4294967295 ---
+int(6442450942)
+--- testing: 2147483647 + 4294967293 ---
+int(6442450940)
+--- testing: 2147483647 + 9223372036854775806 ---
+float(9.2233720390023E+18)
+--- testing: 2147483647 + 9.2233720368548E+18 ---
+float(9.2233720390023E+18)
+--- testing: 2147483647 + -9223372036854775807 ---
+int(-9223372034707292160)
+--- testing: 2147483647 + -9.2233720368548E+18 ---
+float(-9.2233720347073E+18)
+--- testing: 9223372036854775807 + 9223372036854775807 ---
+float(1.844674407371E+19)
+--- testing: 9223372036854775807 + -9223372036854775808 ---
+int(-1)
+--- testing: 9223372036854775807 + 2147483647 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775807 + -2147483648 ---
+int(9223372034707292159)
+--- testing: 9223372036854775807 + 9223372034707292160 ---
+float(1.8446744071562E+19)
+--- testing: 9223372036854775807 + -9223372034707292160 ---
+int(2147483647)
+--- testing: 9223372036854775807 + 2147483648 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775807 + -2147483649 ---
+int(9223372034707292158)
+--- testing: 9223372036854775807 + 4294967294 ---
+float(9.2233720411497E+18)
+--- testing: 9223372036854775807 + 4294967295 ---
+float(9.2233720411497E+18)
+--- testing: 9223372036854775807 + 4294967293 ---
+float(9.2233720411497E+18)
+--- testing: 9223372036854775807 + 9223372036854775806 ---
+float(1.844674407371E+19)
+--- testing: 9223372036854775807 + 9.2233720368548E+18 ---
+float(1.844674407371E+19)
+--- testing: 9223372036854775807 + -9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775807 + -9.2233720368548E+18 ---
+float(0)
+===DONE===
diff --git a/tests/lang/operators/add_variationStr.phpt b/tests/lang/operators/add_variationStr.phpt
new file mode 100644
index 0000000..264c5c1
--- /dev/null
+++ b/tests/lang/operators/add_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test + operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' + '$otherVal' ---\n";   
+      var_dump($strVal+$otherVal);
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' + '0' ---
+int(0)
+--- testing: '0' + '65' ---
+int(65)
+--- testing: '0' + '-44' ---
+int(-44)
+--- testing: '0' + '1.2' ---
+float(1.2)
+--- testing: '0' + '-7.7' ---
+float(-7.7)
+--- testing: '0' + 'abc' ---
+int(0)
+--- testing: '0' + '123abc' ---
+int(123)
+--- testing: '0' + '123e5' ---
+float(12300000)
+--- testing: '0' + '123e5xyz' ---
+float(12300000)
+--- testing: '0' + ' 123abc' ---
+int(123)
+--- testing: '0' + '123 abc' ---
+int(123)
+--- testing: '0' + '123abc ' ---
+int(123)
+--- testing: '0' + '3.4a' ---
+float(3.4)
+--- testing: '0' + 'a5.9' ---
+int(0)
+--- testing: '65' + '0' ---
+int(65)
+--- testing: '65' + '65' ---
+int(130)
+--- testing: '65' + '-44' ---
+int(21)
+--- testing: '65' + '1.2' ---
+float(66.2)
+--- testing: '65' + '-7.7' ---
+float(57.3)
+--- testing: '65' + 'abc' ---
+int(65)
+--- testing: '65' + '123abc' ---
+int(188)
+--- testing: '65' + '123e5' ---
+float(12300065)
+--- testing: '65' + '123e5xyz' ---
+float(12300065)
+--- testing: '65' + ' 123abc' ---
+int(188)
+--- testing: '65' + '123 abc' ---
+int(188)
+--- testing: '65' + '123abc ' ---
+int(188)
+--- testing: '65' + '3.4a' ---
+float(68.4)
+--- testing: '65' + 'a5.9' ---
+int(65)
+--- testing: '-44' + '0' ---
+int(-44)
+--- testing: '-44' + '65' ---
+int(21)
+--- testing: '-44' + '-44' ---
+int(-88)
+--- testing: '-44' + '1.2' ---
+float(-42.8)
+--- testing: '-44' + '-7.7' ---
+float(-51.7)
+--- testing: '-44' + 'abc' ---
+int(-44)
+--- testing: '-44' + '123abc' ---
+int(79)
+--- testing: '-44' + '123e5' ---
+float(12299956)
+--- testing: '-44' + '123e5xyz' ---
+float(12299956)
+--- testing: '-44' + ' 123abc' ---
+int(79)
+--- testing: '-44' + '123 abc' ---
+int(79)
+--- testing: '-44' + '123abc ' ---
+int(79)
+--- testing: '-44' + '3.4a' ---
+float(-40.6)
+--- testing: '-44' + 'a5.9' ---
+int(-44)
+--- testing: '1.2' + '0' ---
+float(1.2)
+--- testing: '1.2' + '65' ---
+float(66.2)
+--- testing: '1.2' + '-44' ---
+float(-42.8)
+--- testing: '1.2' + '1.2' ---
+float(2.4)
+--- testing: '1.2' + '-7.7' ---
+float(-6.5)
+--- testing: '1.2' + 'abc' ---
+float(1.2)
+--- testing: '1.2' + '123abc' ---
+float(124.2)
+--- testing: '1.2' + '123e5' ---
+float(12300001.2)
+--- testing: '1.2' + '123e5xyz' ---
+float(12300001.2)
+--- testing: '1.2' + ' 123abc' ---
+float(124.2)
+--- testing: '1.2' + '123 abc' ---
+float(124.2)
+--- testing: '1.2' + '123abc ' ---
+float(124.2)
+--- testing: '1.2' + '3.4a' ---
+float(4.6)
+--- testing: '1.2' + 'a5.9' ---
+float(1.2)
+--- testing: '-7.7' + '0' ---
+float(-7.7)
+--- testing: '-7.7' + '65' ---
+float(57.3)
+--- testing: '-7.7' + '-44' ---
+float(-51.7)
+--- testing: '-7.7' + '1.2' ---
+float(-6.5)
+--- testing: '-7.7' + '-7.7' ---
+float(-15.4)
+--- testing: '-7.7' + 'abc' ---
+float(-7.7)
+--- testing: '-7.7' + '123abc' ---
+float(115.3)
+--- testing: '-7.7' + '123e5' ---
+float(12299992.3)
+--- testing: '-7.7' + '123e5xyz' ---
+float(12299992.3)
+--- testing: '-7.7' + ' 123abc' ---
+float(115.3)
+--- testing: '-7.7' + '123 abc' ---
+float(115.3)
+--- testing: '-7.7' + '123abc ' ---
+float(115.3)
+--- testing: '-7.7' + '3.4a' ---
+float(-4.3)
+--- testing: '-7.7' + 'a5.9' ---
+float(-7.7)
+--- testing: 'abc' + '0' ---
+int(0)
+--- testing: 'abc' + '65' ---
+int(65)
+--- testing: 'abc' + '-44' ---
+int(-44)
+--- testing: 'abc' + '1.2' ---
+float(1.2)
+--- testing: 'abc' + '-7.7' ---
+float(-7.7)
+--- testing: 'abc' + 'abc' ---
+int(0)
+--- testing: 'abc' + '123abc' ---
+int(123)
+--- testing: 'abc' + '123e5' ---
+float(12300000)
+--- testing: 'abc' + '123e5xyz' ---
+float(12300000)
+--- testing: 'abc' + ' 123abc' ---
+int(123)
+--- testing: 'abc' + '123 abc' ---
+int(123)
+--- testing: 'abc' + '123abc ' ---
+int(123)
+--- testing: 'abc' + '3.4a' ---
+float(3.4)
+--- testing: 'abc' + 'a5.9' ---
+int(0)
+--- testing: '123abc' + '0' ---
+int(123)
+--- testing: '123abc' + '65' ---
+int(188)
+--- testing: '123abc' + '-44' ---
+int(79)
+--- testing: '123abc' + '1.2' ---
+float(124.2)
+--- testing: '123abc' + '-7.7' ---
+float(115.3)
+--- testing: '123abc' + 'abc' ---
+int(123)
+--- testing: '123abc' + '123abc' ---
+int(246)
+--- testing: '123abc' + '123e5' ---
+float(12300123)
+--- testing: '123abc' + '123e5xyz' ---
+float(12300123)
+--- testing: '123abc' + ' 123abc' ---
+int(246)
+--- testing: '123abc' + '123 abc' ---
+int(246)
+--- testing: '123abc' + '123abc ' ---
+int(246)
+--- testing: '123abc' + '3.4a' ---
+float(126.4)
+--- testing: '123abc' + 'a5.9' ---
+int(123)
+--- testing: '123e5' + '0' ---
+float(12300000)
+--- testing: '123e5' + '65' ---
+float(12300065)
+--- testing: '123e5' + '-44' ---
+float(12299956)
+--- testing: '123e5' + '1.2' ---
+float(12300001.2)
+--- testing: '123e5' + '-7.7' ---
+float(12299992.3)
+--- testing: '123e5' + 'abc' ---
+float(12300000)
+--- testing: '123e5' + '123abc' ---
+float(12300123)
+--- testing: '123e5' + '123e5' ---
+float(24600000)
+--- testing: '123e5' + '123e5xyz' ---
+float(24600000)
+--- testing: '123e5' + ' 123abc' ---
+float(12300123)
+--- testing: '123e5' + '123 abc' ---
+float(12300123)
+--- testing: '123e5' + '123abc ' ---
+float(12300123)
+--- testing: '123e5' + '3.4a' ---
+float(12300003.4)
+--- testing: '123e5' + 'a5.9' ---
+float(12300000)
+--- testing: '123e5xyz' + '0' ---
+float(12300000)
+--- testing: '123e5xyz' + '65' ---
+float(12300065)
+--- testing: '123e5xyz' + '-44' ---
+float(12299956)
+--- testing: '123e5xyz' + '1.2' ---
+float(12300001.2)
+--- testing: '123e5xyz' + '-7.7' ---
+float(12299992.3)
+--- testing: '123e5xyz' + 'abc' ---
+float(12300000)
+--- testing: '123e5xyz' + '123abc' ---
+float(12300123)
+--- testing: '123e5xyz' + '123e5' ---
+float(24600000)
+--- testing: '123e5xyz' + '123e5xyz' ---
+float(24600000)
+--- testing: '123e5xyz' + ' 123abc' ---
+float(12300123)
+--- testing: '123e5xyz' + '123 abc' ---
+float(12300123)
+--- testing: '123e5xyz' + '123abc ' ---
+float(12300123)
+--- testing: '123e5xyz' + '3.4a' ---
+float(12300003.4)
+--- testing: '123e5xyz' + 'a5.9' ---
+float(12300000)
+--- testing: ' 123abc' + '0' ---
+int(123)
+--- testing: ' 123abc' + '65' ---
+int(188)
+--- testing: ' 123abc' + '-44' ---
+int(79)
+--- testing: ' 123abc' + '1.2' ---
+float(124.2)
+--- testing: ' 123abc' + '-7.7' ---
+float(115.3)
+--- testing: ' 123abc' + 'abc' ---
+int(123)
+--- testing: ' 123abc' + '123abc' ---
+int(246)
+--- testing: ' 123abc' + '123e5' ---
+float(12300123)
+--- testing: ' 123abc' + '123e5xyz' ---
+float(12300123)
+--- testing: ' 123abc' + ' 123abc' ---
+int(246)
+--- testing: ' 123abc' + '123 abc' ---
+int(246)
+--- testing: ' 123abc' + '123abc ' ---
+int(246)
+--- testing: ' 123abc' + '3.4a' ---
+float(126.4)
+--- testing: ' 123abc' + 'a5.9' ---
+int(123)
+--- testing: '123 abc' + '0' ---
+int(123)
+--- testing: '123 abc' + '65' ---
+int(188)
+--- testing: '123 abc' + '-44' ---
+int(79)
+--- testing: '123 abc' + '1.2' ---
+float(124.2)
+--- testing: '123 abc' + '-7.7' ---
+float(115.3)
+--- testing: '123 abc' + 'abc' ---
+int(123)
+--- testing: '123 abc' + '123abc' ---
+int(246)
+--- testing: '123 abc' + '123e5' ---
+float(12300123)
+--- testing: '123 abc' + '123e5xyz' ---
+float(12300123)
+--- testing: '123 abc' + ' 123abc' ---
+int(246)
+--- testing: '123 abc' + '123 abc' ---
+int(246)
+--- testing: '123 abc' + '123abc ' ---
+int(246)
+--- testing: '123 abc' + '3.4a' ---
+float(126.4)
+--- testing: '123 abc' + 'a5.9' ---
+int(123)
+--- testing: '123abc ' + '0' ---
+int(123)
+--- testing: '123abc ' + '65' ---
+int(188)
+--- testing: '123abc ' + '-44' ---
+int(79)
+--- testing: '123abc ' + '1.2' ---
+float(124.2)
+--- testing: '123abc ' + '-7.7' ---
+float(115.3)
+--- testing: '123abc ' + 'abc' ---
+int(123)
+--- testing: '123abc ' + '123abc' ---
+int(246)
+--- testing: '123abc ' + '123e5' ---
+float(12300123)
+--- testing: '123abc ' + '123e5xyz' ---
+float(12300123)
+--- testing: '123abc ' + ' 123abc' ---
+int(246)
+--- testing: '123abc ' + '123 abc' ---
+int(246)
+--- testing: '123abc ' + '123abc ' ---
+int(246)
+--- testing: '123abc ' + '3.4a' ---
+float(126.4)
+--- testing: '123abc ' + 'a5.9' ---
+int(123)
+--- testing: '3.4a' + '0' ---
+float(3.4)
+--- testing: '3.4a' + '65' ---
+float(68.4)
+--- testing: '3.4a' + '-44' ---
+float(-40.6)
+--- testing: '3.4a' + '1.2' ---
+float(4.6)
+--- testing: '3.4a' + '-7.7' ---
+float(-4.3)
+--- testing: '3.4a' + 'abc' ---
+float(3.4)
+--- testing: '3.4a' + '123abc' ---
+float(126.4)
+--- testing: '3.4a' + '123e5' ---
+float(12300003.4)
+--- testing: '3.4a' + '123e5xyz' ---
+float(12300003.4)
+--- testing: '3.4a' + ' 123abc' ---
+float(126.4)
+--- testing: '3.4a' + '123 abc' ---
+float(126.4)
+--- testing: '3.4a' + '123abc ' ---
+float(126.4)
+--- testing: '3.4a' + '3.4a' ---
+float(6.8)
+--- testing: '3.4a' + 'a5.9' ---
+float(3.4)
+--- testing: 'a5.9' + '0' ---
+int(0)
+--- testing: 'a5.9' + '65' ---
+int(65)
+--- testing: 'a5.9' + '-44' ---
+int(-44)
+--- testing: 'a5.9' + '1.2' ---
+float(1.2)
+--- testing: 'a5.9' + '-7.7' ---
+float(-7.7)
+--- testing: 'a5.9' + 'abc' ---
+int(0)
+--- testing: 'a5.9' + '123abc' ---
+int(123)
+--- testing: 'a5.9' + '123e5' ---
+float(12300000)
+--- testing: 'a5.9' + '123e5xyz' ---
+float(12300000)
+--- testing: 'a5.9' + ' 123abc' ---
+int(123)
+--- testing: 'a5.9' + '123 abc' ---
+int(123)
+--- testing: 'a5.9' + '123abc ' ---
+int(123)
+--- testing: 'a5.9' + '3.4a' ---
+float(3.4)
+--- testing: 'a5.9' + 'a5.9' ---
+int(0)
+===DONE===
diff --git a/tests/lang/operators/bitwiseAnd_basiclong_64bit.phpt b/tests/lang/operators/bitwiseAnd_basiclong_64bit.phpt
new file mode 100644
index 0000000..f463e5d
--- /dev/null
+++ b/tests/lang/operators/bitwiseAnd_basiclong_64bit.phpt
@@ -0,0 +1,582 @@
+--TEST--
+Test & operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal & $otherVal ---\n";   
+      var_dump($longVal&$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal & $longVal ---\n";   
+      var_dump($otherVal&$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 & 0 ---
+int(0)
+--- testing: 9223372036854775807 & 1 ---
+int(1)
+--- testing: 9223372036854775807 & -1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 & 7 ---
+int(7)
+--- testing: 9223372036854775807 & 9 ---
+int(9)
+--- testing: 9223372036854775807 & 65 ---
+int(65)
+--- testing: 9223372036854775807 & -44 ---
+int(9223372036854775764)
+--- testing: 9223372036854775807 & 2147483647 ---
+int(2147483647)
+--- testing: 9223372036854775807 & 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -9223372036854775808 & 0 ---
+int(0)
+--- testing: -9223372036854775808 & 1 ---
+int(0)
+--- testing: -9223372036854775808 & -1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 & 7 ---
+int(0)
+--- testing: -9223372036854775808 & 9 ---
+int(0)
+--- testing: -9223372036854775808 & 65 ---
+int(0)
+--- testing: -9223372036854775808 & -44 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 & 2147483647 ---
+int(0)
+--- testing: -9223372036854775808 & 9223372036854775807 ---
+int(0)
+--- testing: 2147483647 & 0 ---
+int(0)
+--- testing: 2147483647 & 1 ---
+int(1)
+--- testing: 2147483647 & -1 ---
+int(2147483647)
+--- testing: 2147483647 & 7 ---
+int(7)
+--- testing: 2147483647 & 9 ---
+int(9)
+--- testing: 2147483647 & 65 ---
+int(65)
+--- testing: 2147483647 & -44 ---
+int(2147483604)
+--- testing: 2147483647 & 2147483647 ---
+int(2147483647)
+--- testing: 2147483647 & 9223372036854775807 ---
+int(2147483647)
+--- testing: -2147483648 & 0 ---
+int(0)
+--- testing: -2147483648 & 1 ---
+int(0)
+--- testing: -2147483648 & -1 ---
+int(-2147483648)
+--- testing: -2147483648 & 7 ---
+int(0)
+--- testing: -2147483648 & 9 ---
+int(0)
+--- testing: -2147483648 & 65 ---
+int(0)
+--- testing: -2147483648 & -44 ---
+int(-2147483648)
+--- testing: -2147483648 & 2147483647 ---
+int(0)
+--- testing: -2147483648 & 9223372036854775807 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 & 0 ---
+int(0)
+--- testing: 9223372034707292160 & 1 ---
+int(0)
+--- testing: 9223372034707292160 & -1 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 & 7 ---
+int(0)
+--- testing: 9223372034707292160 & 9 ---
+int(0)
+--- testing: 9223372034707292160 & 65 ---
+int(0)
+--- testing: 9223372034707292160 & -44 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 & 2147483647 ---
+int(0)
+--- testing: 9223372034707292160 & 9223372036854775807 ---
+int(9223372034707292160)
+--- testing: -9223372034707292160 & 0 ---
+int(0)
+--- testing: -9223372034707292160 & 1 ---
+int(0)
+--- testing: -9223372034707292160 & -1 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 & 7 ---
+int(0)
+--- testing: -9223372034707292160 & 9 ---
+int(0)
+--- testing: -9223372034707292160 & 65 ---
+int(0)
+--- testing: -9223372034707292160 & -44 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 & 2147483647 ---
+int(0)
+--- testing: -9223372034707292160 & 9223372036854775807 ---
+int(2147483648)
+--- testing: 2147483648 & 0 ---
+int(0)
+--- testing: 2147483648 & 1 ---
+int(0)
+--- testing: 2147483648 & -1 ---
+int(2147483648)
+--- testing: 2147483648 & 7 ---
+int(0)
+--- testing: 2147483648 & 9 ---
+int(0)
+--- testing: 2147483648 & 65 ---
+int(0)
+--- testing: 2147483648 & -44 ---
+int(2147483648)
+--- testing: 2147483648 & 2147483647 ---
+int(0)
+--- testing: 2147483648 & 9223372036854775807 ---
+int(2147483648)
+--- testing: -2147483649 & 0 ---
+int(0)
+--- testing: -2147483649 & 1 ---
+int(1)
+--- testing: -2147483649 & -1 ---
+int(-2147483649)
+--- testing: -2147483649 & 7 ---
+int(7)
+--- testing: -2147483649 & 9 ---
+int(9)
+--- testing: -2147483649 & 65 ---
+int(65)
+--- testing: -2147483649 & -44 ---
+int(-2147483692)
+--- testing: -2147483649 & 2147483647 ---
+int(2147483647)
+--- testing: -2147483649 & 9223372036854775807 ---
+int(9223372034707292159)
+--- testing: 4294967294 & 0 ---
+int(0)
+--- testing: 4294967294 & 1 ---
+int(0)
+--- testing: 4294967294 & -1 ---
+int(4294967294)
+--- testing: 4294967294 & 7 ---
+int(6)
+--- testing: 4294967294 & 9 ---
+int(8)
+--- testing: 4294967294 & 65 ---
+int(64)
+--- testing: 4294967294 & -44 ---
+int(4294967252)
+--- testing: 4294967294 & 2147483647 ---
+int(2147483646)
+--- testing: 4294967294 & 9223372036854775807 ---
+int(4294967294)
+--- testing: 4294967295 & 0 ---
+int(0)
+--- testing: 4294967295 & 1 ---
+int(1)
+--- testing: 4294967295 & -1 ---
+int(4294967295)
+--- testing: 4294967295 & 7 ---
+int(7)
+--- testing: 4294967295 & 9 ---
+int(9)
+--- testing: 4294967295 & 65 ---
+int(65)
+--- testing: 4294967295 & -44 ---
+int(4294967252)
+--- testing: 4294967295 & 2147483647 ---
+int(2147483647)
+--- testing: 4294967295 & 9223372036854775807 ---
+int(4294967295)
+--- testing: 4294967293 & 0 ---
+int(0)
+--- testing: 4294967293 & 1 ---
+int(1)
+--- testing: 4294967293 & -1 ---
+int(4294967293)
+--- testing: 4294967293 & 7 ---
+int(5)
+--- testing: 4294967293 & 9 ---
+int(9)
+--- testing: 4294967293 & 65 ---
+int(65)
+--- testing: 4294967293 & -44 ---
+int(4294967252)
+--- testing: 4294967293 & 2147483647 ---
+int(2147483645)
+--- testing: 4294967293 & 9223372036854775807 ---
+int(4294967293)
+--- testing: 9223372036854775806 & 0 ---
+int(0)
+--- testing: 9223372036854775806 & 1 ---
+int(0)
+--- testing: 9223372036854775806 & -1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 & 7 ---
+int(6)
+--- testing: 9223372036854775806 & 9 ---
+int(8)
+--- testing: 9223372036854775806 & 65 ---
+int(64)
+--- testing: 9223372036854775806 & -44 ---
+int(9223372036854775764)
+--- testing: 9223372036854775806 & 2147483647 ---
+int(2147483646)
+--- testing: 9223372036854775806 & 9223372036854775807 ---
+int(9223372036854775806)
+--- testing: 9.2233720368548E+18 & 0 ---
+int(0)
+--- testing: 9.2233720368548E+18 & 1 ---
+int(0)
+--- testing: 9.2233720368548E+18 & -1 ---
+int(-9223372036854775808)
+--- testing: 9.2233720368548E+18 & 7 ---
+int(0)
+--- testing: 9.2233720368548E+18 & 9 ---
+int(0)
+--- testing: 9.2233720368548E+18 & 65 ---
+int(0)
+--- testing: 9.2233720368548E+18 & -44 ---
+int(-9223372036854775808)
+--- testing: 9.2233720368548E+18 & 2147483647 ---
+int(0)
+--- testing: 9.2233720368548E+18 & 9223372036854775807 ---
+int(0)
+--- testing: -9223372036854775807 & 0 ---
+int(0)
+--- testing: -9223372036854775807 & 1 ---
+int(1)
+--- testing: -9223372036854775807 & -1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 & 7 ---
+int(1)
+--- testing: -9223372036854775807 & 9 ---
+int(1)
+--- testing: -9223372036854775807 & 65 ---
+int(1)
+--- testing: -9223372036854775807 & -44 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775807 & 2147483647 ---
+int(1)
+--- testing: -9223372036854775807 & 9223372036854775807 ---
+int(1)
+--- testing: -9.2233720368548E+18 & 0 ---
+int(0)
+--- testing: -9.2233720368548E+18 & 1 ---
+int(0)
+--- testing: -9.2233720368548E+18 & -1 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 & 7 ---
+int(0)
+--- testing: -9.2233720368548E+18 & 9 ---
+int(0)
+--- testing: -9.2233720368548E+18 & 65 ---
+int(0)
+--- testing: -9.2233720368548E+18 & -44 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 & 2147483647 ---
+int(0)
+--- testing: -9.2233720368548E+18 & 9223372036854775807 ---
+int(0)
+--- testing: 0 & 9223372036854775807 ---
+int(0)
+--- testing: 0 & -9223372036854775808 ---
+int(0)
+--- testing: 0 & 2147483647 ---
+int(0)
+--- testing: 0 & -2147483648 ---
+int(0)
+--- testing: 0 & 9223372034707292160 ---
+int(0)
+--- testing: 0 & -9223372034707292160 ---
+int(0)
+--- testing: 0 & 2147483648 ---
+int(0)
+--- testing: 0 & -2147483649 ---
+int(0)
+--- testing: 0 & 4294967294 ---
+int(0)
+--- testing: 0 & 4294967295 ---
+int(0)
+--- testing: 0 & 4294967293 ---
+int(0)
+--- testing: 0 & 9223372036854775806 ---
+int(0)
+--- testing: 0 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 0 & -9223372036854775807 ---
+int(0)
+--- testing: 0 & -9.2233720368548E+18 ---
+int(0)
+--- testing: 1 & 9223372036854775807 ---
+int(1)
+--- testing: 1 & -9223372036854775808 ---
+int(0)
+--- testing: 1 & 2147483647 ---
+int(1)
+--- testing: 1 & -2147483648 ---
+int(0)
+--- testing: 1 & 9223372034707292160 ---
+int(0)
+--- testing: 1 & -9223372034707292160 ---
+int(0)
+--- testing: 1 & 2147483648 ---
+int(0)
+--- testing: 1 & -2147483649 ---
+int(1)
+--- testing: 1 & 4294967294 ---
+int(0)
+--- testing: 1 & 4294967295 ---
+int(1)
+--- testing: 1 & 4294967293 ---
+int(1)
+--- testing: 1 & 9223372036854775806 ---
+int(0)
+--- testing: 1 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 1 & -9223372036854775807 ---
+int(1)
+--- testing: 1 & -9.2233720368548E+18 ---
+int(0)
+--- testing: -1 & 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -1 & -9223372036854775808 ---
+int(-9223372036854775808)
+--- testing: -1 & 2147483647 ---
+int(2147483647)
+--- testing: -1 & -2147483648 ---
+int(-2147483648)
+--- testing: -1 & 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: -1 & -9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: -1 & 2147483648 ---
+int(2147483648)
+--- testing: -1 & -2147483649 ---
+int(-2147483649)
+--- testing: -1 & 4294967294 ---
+int(4294967294)
+--- testing: -1 & 4294967295 ---
+int(4294967295)
+--- testing: -1 & 4294967293 ---
+int(4294967293)
+--- testing: -1 & 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: -1 & 9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: -1 & -9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: -1 & -9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: 7 & 9223372036854775807 ---
+int(7)
+--- testing: 7 & -9223372036854775808 ---
+int(0)
+--- testing: 7 & 2147483647 ---
+int(7)
+--- testing: 7 & -2147483648 ---
+int(0)
+--- testing: 7 & 9223372034707292160 ---
+int(0)
+--- testing: 7 & -9223372034707292160 ---
+int(0)
+--- testing: 7 & 2147483648 ---
+int(0)
+--- testing: 7 & -2147483649 ---
+int(7)
+--- testing: 7 & 4294967294 ---
+int(6)
+--- testing: 7 & 4294967295 ---
+int(7)
+--- testing: 7 & 4294967293 ---
+int(5)
+--- testing: 7 & 9223372036854775806 ---
+int(6)
+--- testing: 7 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 7 & -9223372036854775807 ---
+int(1)
+--- testing: 7 & -9.2233720368548E+18 ---
+int(0)
+--- testing: 9 & 9223372036854775807 ---
+int(9)
+--- testing: 9 & -9223372036854775808 ---
+int(0)
+--- testing: 9 & 2147483647 ---
+int(9)
+--- testing: 9 & -2147483648 ---
+int(0)
+--- testing: 9 & 9223372034707292160 ---
+int(0)
+--- testing: 9 & -9223372034707292160 ---
+int(0)
+--- testing: 9 & 2147483648 ---
+int(0)
+--- testing: 9 & -2147483649 ---
+int(9)
+--- testing: 9 & 4294967294 ---
+int(8)
+--- testing: 9 & 4294967295 ---
+int(9)
+--- testing: 9 & 4294967293 ---
+int(9)
+--- testing: 9 & 9223372036854775806 ---
+int(8)
+--- testing: 9 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 9 & -9223372036854775807 ---
+int(1)
+--- testing: 9 & -9.2233720368548E+18 ---
+int(0)
+--- testing: 65 & 9223372036854775807 ---
+int(65)
+--- testing: 65 & -9223372036854775808 ---
+int(0)
+--- testing: 65 & 2147483647 ---
+int(65)
+--- testing: 65 & -2147483648 ---
+int(0)
+--- testing: 65 & 9223372034707292160 ---
+int(0)
+--- testing: 65 & -9223372034707292160 ---
+int(0)
+--- testing: 65 & 2147483648 ---
+int(0)
+--- testing: 65 & -2147483649 ---
+int(65)
+--- testing: 65 & 4294967294 ---
+int(64)
+--- testing: 65 & 4294967295 ---
+int(65)
+--- testing: 65 & 4294967293 ---
+int(65)
+--- testing: 65 & 9223372036854775806 ---
+int(64)
+--- testing: 65 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 65 & -9223372036854775807 ---
+int(1)
+--- testing: 65 & -9.2233720368548E+18 ---
+int(0)
+--- testing: -44 & 9223372036854775807 ---
+int(9223372036854775764)
+--- testing: -44 & -9223372036854775808 ---
+int(-9223372036854775808)
+--- testing: -44 & 2147483647 ---
+int(2147483604)
+--- testing: -44 & -2147483648 ---
+int(-2147483648)
+--- testing: -44 & 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: -44 & -9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: -44 & 2147483648 ---
+int(2147483648)
+--- testing: -44 & -2147483649 ---
+int(-2147483692)
+--- testing: -44 & 4294967294 ---
+int(4294967252)
+--- testing: -44 & 4294967295 ---
+int(4294967252)
+--- testing: -44 & 4294967293 ---
+int(4294967252)
+--- testing: -44 & 9223372036854775806 ---
+int(9223372036854775764)
+--- testing: -44 & 9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: -44 & -9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -44 & -9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: 2147483647 & 9223372036854775807 ---
+int(2147483647)
+--- testing: 2147483647 & -9223372036854775808 ---
+int(0)
+--- testing: 2147483647 & 2147483647 ---
+int(2147483647)
+--- testing: 2147483647 & -2147483648 ---
+int(0)
+--- testing: 2147483647 & 9223372034707292160 ---
+int(0)
+--- testing: 2147483647 & -9223372034707292160 ---
+int(0)
+--- testing: 2147483647 & 2147483648 ---
+int(0)
+--- testing: 2147483647 & -2147483649 ---
+int(2147483647)
+--- testing: 2147483647 & 4294967294 ---
+int(2147483646)
+--- testing: 2147483647 & 4294967295 ---
+int(2147483647)
+--- testing: 2147483647 & 4294967293 ---
+int(2147483645)
+--- testing: 2147483647 & 9223372036854775806 ---
+int(2147483646)
+--- testing: 2147483647 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 2147483647 & -9223372036854775807 ---
+int(1)
+--- testing: 2147483647 & -9.2233720368548E+18 ---
+int(0)
+--- testing: 9223372036854775807 & 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 & -9223372036854775808 ---
+int(0)
+--- testing: 9223372036854775807 & 2147483647 ---
+int(2147483647)
+--- testing: 9223372036854775807 & -2147483648 ---
+int(9223372034707292160)
+--- testing: 9223372036854775807 & 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 9223372036854775807 & -9223372034707292160 ---
+int(2147483648)
+--- testing: 9223372036854775807 & 2147483648 ---
+int(2147483648)
+--- testing: 9223372036854775807 & -2147483649 ---
+int(9223372034707292159)
+--- testing: 9223372036854775807 & 4294967294 ---
+int(4294967294)
+--- testing: 9223372036854775807 & 4294967295 ---
+int(4294967295)
+--- testing: 9223372036854775807 & 4294967293 ---
+int(4294967293)
+--- testing: 9223372036854775807 & 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: 9223372036854775807 & 9.2233720368548E+18 ---
+int(0)
+--- testing: 9223372036854775807 & -9223372036854775807 ---
+int(1)
+--- testing: 9223372036854775807 & -9.2233720368548E+18 ---
+int(0)
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/bitwiseAnd_variationStr.phpt b/tests/lang/operators/bitwiseAnd_variationStr.phpt
new file mode 100644
index 0000000..2602270
--- /dev/null
+++ b/tests/lang/operators/bitwiseAnd_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test & operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' & '$otherVal' ---\n";   
+      var_dump(bin2hex($strVal&$otherVal));
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' & '0' ---
+string(2) "30"
+--- testing: '0' & '65' ---
+string(2) "30"
+--- testing: '0' & '-44' ---
+string(2) "20"
+--- testing: '0' & '1.2' ---
+string(2) "30"
+--- testing: '0' & '-7.7' ---
+string(2) "20"
+--- testing: '0' & 'abc' ---
+string(2) "20"
+--- testing: '0' & '123abc' ---
+string(2) "30"
+--- testing: '0' & '123e5' ---
+string(2) "30"
+--- testing: '0' & '123e5xyz' ---
+string(2) "30"
+--- testing: '0' & ' 123abc' ---
+string(2) "20"
+--- testing: '0' & '123 abc' ---
+string(2) "30"
+--- testing: '0' & '123abc ' ---
+string(2) "30"
+--- testing: '0' & '3.4a' ---
+string(2) "30"
+--- testing: '0' & 'a5.9' ---
+string(2) "20"
+--- testing: '65' & '0' ---
+string(2) "30"
+--- testing: '65' & '65' ---
+string(4) "3635"
+--- testing: '65' & '-44' ---
+string(4) "2434"
+--- testing: '65' & '1.2' ---
+string(4) "3024"
+--- testing: '65' & '-7.7' ---
+string(4) "2435"
+--- testing: '65' & 'abc' ---
+string(4) "2020"
+--- testing: '65' & '123abc' ---
+string(4) "3030"
+--- testing: '65' & '123e5' ---
+string(4) "3030"
+--- testing: '65' & '123e5xyz' ---
+string(4) "3030"
+--- testing: '65' & ' 123abc' ---
+string(4) "2031"
+--- testing: '65' & '123 abc' ---
+string(4) "3030"
+--- testing: '65' & '123abc ' ---
+string(4) "3030"
+--- testing: '65' & '3.4a' ---
+string(4) "3224"
+--- testing: '65' & 'a5.9' ---
+string(4) "2035"
+--- testing: '-44' & '0' ---
+string(2) "20"
+--- testing: '-44' & '65' ---
+string(4) "2434"
+--- testing: '-44' & '-44' ---
+string(6) "2d3434"
+--- testing: '-44' & '1.2' ---
+string(6) "212430"
+--- testing: '-44' & '-7.7' ---
+string(6) "2d3424"
+--- testing: '-44' & 'abc' ---
+string(6) "212020"
+--- testing: '-44' & '123abc' ---
+string(6) "213030"
+--- testing: '-44' & '123e5' ---
+string(6) "213030"
+--- testing: '-44' & '123e5xyz' ---
+string(6) "213030"
+--- testing: '-44' & ' 123abc' ---
+string(6) "203030"
+--- testing: '-44' & '123 abc' ---
+string(6) "213030"
+--- testing: '-44' & '123abc ' ---
+string(6) "213030"
+--- testing: '-44' & '3.4a' ---
+string(6) "212434"
+--- testing: '-44' & 'a5.9' ---
+string(6) "213424"
+--- testing: '1.2' & '0' ---
+string(2) "30"
+--- testing: '1.2' & '65' ---
+string(4) "3024"
+--- testing: '1.2' & '-44' ---
+string(6) "212430"
+--- testing: '1.2' & '1.2' ---
+string(6) "312e32"
+--- testing: '1.2' & '-7.7' ---
+string(6) "212622"
+--- testing: '1.2' & 'abc' ---
+string(6) "212222"
+--- testing: '1.2' & '123abc' ---
+string(6) "312232"
+--- testing: '1.2' & '123e5' ---
+string(6) "312232"
+--- testing: '1.2' & '123e5xyz' ---
+string(6) "312232"
+--- testing: '1.2' & ' 123abc' ---
+string(6) "202032"
+--- testing: '1.2' & '123 abc' ---
+string(6) "312232"
+--- testing: '1.2' & '123abc ' ---
+string(6) "312232"
+--- testing: '1.2' & '3.4a' ---
+string(6) "312e30"
+--- testing: '1.2' & 'a5.9' ---
+string(6) "212422"
+--- testing: '-7.7' & '0' ---
+string(2) "20"
+--- testing: '-7.7' & '65' ---
+string(4) "2435"
+--- testing: '-7.7' & '-44' ---
+string(6) "2d3424"
+--- testing: '-7.7' & '1.2' ---
+string(6) "212622"
+--- testing: '-7.7' & '-7.7' ---
+string(8) "2d372e37"
+--- testing: '-7.7' & 'abc' ---
+string(6) "212222"
+--- testing: '-7.7' & '123abc' ---
+string(8) "21322221"
+--- testing: '-7.7' & '123e5' ---
+string(8) "21322225"
+--- testing: '-7.7' & '123e5xyz' ---
+string(8) "21322225"
+--- testing: '-7.7' & ' 123abc' ---
+string(8) "20312233"
+--- testing: '-7.7' & '123 abc' ---
+string(8) "21322220"
+--- testing: '-7.7' & '123abc ' ---
+string(8) "21322221"
+--- testing: '-7.7' & '3.4a' ---
+string(8) "21262421"
+--- testing: '-7.7' & 'a5.9' ---
+string(8) "21352e31"
+--- testing: 'abc' & '0' ---
+string(2) "20"
+--- testing: 'abc' & '65' ---
+string(4) "2020"
+--- testing: 'abc' & '-44' ---
+string(6) "212020"
+--- testing: 'abc' & '1.2' ---
+string(6) "212222"
+--- testing: 'abc' & '-7.7' ---
+string(6) "212222"
+--- testing: 'abc' & 'abc' ---
+string(6) "616263"
+--- testing: 'abc' & '123abc' ---
+string(6) "212223"
+--- testing: 'abc' & '123e5' ---
+string(6) "212223"
+--- testing: 'abc' & '123e5xyz' ---
+string(6) "212223"
+--- testing: 'abc' & ' 123abc' ---
+string(6) "202022"
+--- testing: 'abc' & '123 abc' ---
+string(6) "212223"
+--- testing: 'abc' & '123abc ' ---
+string(6) "212223"
+--- testing: 'abc' & '3.4a' ---
+string(6) "212220"
+--- testing: 'abc' & 'a5.9' ---
+string(6) "612022"
+--- testing: '123abc' & '0' ---
+string(2) "30"
+--- testing: '123abc' & '65' ---
+string(4) "3030"
+--- testing: '123abc' & '-44' ---
+string(6) "213030"
+--- testing: '123abc' & '1.2' ---
+string(6) "312232"
+--- testing: '123abc' & '-7.7' ---
+string(8) "21322221"
+--- testing: '123abc' & 'abc' ---
+string(6) "212223"
+--- testing: '123abc' & '123abc' ---
+string(12) "313233616263"
+--- testing: '123abc' & '123e5' ---
+string(10) "3132336120"
+--- testing: '123abc' & '123e5xyz' ---
+string(12) "313233612060"
+--- testing: '123abc' & ' 123abc' ---
+string(12) "203032216062"
+--- testing: '123abc' & '123 abc' ---
+string(12) "313233206062"
+--- testing: '123abc' & '123abc ' ---
+string(12) "313233616263"
+--- testing: '123abc' & '3.4a' ---
+string(8) "31223061"
+--- testing: '123abc' & 'a5.9' ---
+string(8) "21302221"
+--- testing: '123e5' & '0' ---
+string(2) "30"
+--- testing: '123e5' & '65' ---
+string(4) "3030"
+--- testing: '123e5' & '-44' ---
+string(6) "213030"
+--- testing: '123e5' & '1.2' ---
+string(6) "312232"
+--- testing: '123e5' & '-7.7' ---
+string(8) "21322225"
+--- testing: '123e5' & 'abc' ---
+string(6) "212223"
+--- testing: '123e5' & '123abc' ---
+string(10) "3132336120"
+--- testing: '123e5' & '123e5' ---
+string(10) "3132336535"
+--- testing: '123e5' & '123e5xyz' ---
+string(10) "3132336535"
+--- testing: '123e5' & ' 123abc' ---
+string(10) "2030322121"
+--- testing: '123e5' & '123 abc' ---
+string(10) "3132332021"
+--- testing: '123e5' & '123abc ' ---
+string(10) "3132336120"
+--- testing: '123e5' & '3.4a' ---
+string(8) "31223061"
+--- testing: '123e5' & 'a5.9' ---
+string(8) "21302221"
+--- testing: '123e5xyz' & '0' ---
+string(2) "30"
+--- testing: '123e5xyz' & '65' ---
+string(4) "3030"
+--- testing: '123e5xyz' & '-44' ---
+string(6) "213030"
+--- testing: '123e5xyz' & '1.2' ---
+string(6) "312232"
+--- testing: '123e5xyz' & '-7.7' ---
+string(8) "21322225"
+--- testing: '123e5xyz' & 'abc' ---
+string(6) "212223"
+--- testing: '123e5xyz' & '123abc' ---
+string(12) "313233612060"
+--- testing: '123e5xyz' & '123e5' ---
+string(10) "3132336535"
+--- testing: '123e5xyz' & '123e5xyz' ---
+string(16) "313233653578797a"
+--- testing: '123e5xyz' & ' 123abc' ---
+string(14) "20303221216061"
+--- testing: '123e5xyz' & '123 abc' ---
+string(14) "31323320216061"
+--- testing: '123e5xyz' & '123abc ' ---
+string(14) "31323361206020"
+--- testing: '123e5xyz' & '3.4a' ---
+string(8) "31223061"
+--- testing: '123e5xyz' & 'a5.9' ---
+string(8) "21302221"
+--- testing: ' 123abc' & '0' ---
+string(2) "20"
+--- testing: ' 123abc' & '65' ---
+string(4) "2031"
+--- testing: ' 123abc' & '-44' ---
+string(6) "203030"
+--- testing: ' 123abc' & '1.2' ---
+string(6) "202032"
+--- testing: ' 123abc' & '-7.7' ---
+string(8) "20312233"
+--- testing: ' 123abc' & 'abc' ---
+string(6) "202022"
+--- testing: ' 123abc' & '123abc' ---
+string(12) "203032216062"
+--- testing: ' 123abc' & '123e5' ---
+string(10) "2030322121"
+--- testing: ' 123abc' & '123e5xyz' ---
+string(14) "20303221216061"
+--- testing: ' 123abc' & ' 123abc' ---
+string(14) "20313233616263"
+--- testing: ' 123abc' & '123 abc' ---
+string(14) "20303220616263"
+--- testing: ' 123abc' & '123abc ' ---
+string(14) "20303221606220"
+--- testing: ' 123abc' & '3.4a' ---
+string(8) "20203021"
+--- testing: ' 123abc' & 'a5.9' ---
+string(8) "20312231"
+--- testing: '123 abc' & '0' ---
+string(2) "30"
+--- testing: '123 abc' & '65' ---
+string(4) "3030"
+--- testing: '123 abc' & '-44' ---
+string(6) "213030"
+--- testing: '123 abc' & '1.2' ---
+string(6) "312232"
+--- testing: '123 abc' & '-7.7' ---
+string(8) "21322220"
+--- testing: '123 abc' & 'abc' ---
+string(6) "212223"
+--- testing: '123 abc' & '123abc' ---
+string(12) "313233206062"
+--- testing: '123 abc' & '123e5' ---
+string(10) "3132332021"
+--- testing: '123 abc' & '123e5xyz' ---
+string(14) "31323320216061"
+--- testing: '123 abc' & ' 123abc' ---
+string(14) "20303220616263"
+--- testing: '123 abc' & '123 abc' ---
+string(14) "31323320616263"
+--- testing: '123 abc' & '123abc ' ---
+string(14) "31323320606220"
+--- testing: '123 abc' & '3.4a' ---
+string(8) "31223020"
+--- testing: '123 abc' & 'a5.9' ---
+string(8) "21302220"
+--- testing: '123abc ' & '0' ---
+string(2) "30"
+--- testing: '123abc ' & '65' ---
+string(4) "3030"
+--- testing: '123abc ' & '-44' ---
+string(6) "213030"
+--- testing: '123abc ' & '1.2' ---
+string(6) "312232"
+--- testing: '123abc ' & '-7.7' ---
+string(8) "21322221"
+--- testing: '123abc ' & 'abc' ---
+string(6) "212223"
+--- testing: '123abc ' & '123abc' ---
+string(12) "313233616263"
+--- testing: '123abc ' & '123e5' ---
+string(10) "3132336120"
+--- testing: '123abc ' & '123e5xyz' ---
+string(14) "31323361206020"
+--- testing: '123abc ' & ' 123abc' ---
+string(14) "20303221606220"
+--- testing: '123abc ' & '123 abc' ---
+string(14) "31323320606220"
+--- testing: '123abc ' & '123abc ' ---
+string(14) "31323361626320"
+--- testing: '123abc ' & '3.4a' ---
+string(8) "31223061"
+--- testing: '123abc ' & 'a5.9' ---
+string(8) "21302221"
+--- testing: '3.4a' & '0' ---
+string(2) "30"
+--- testing: '3.4a' & '65' ---
+string(4) "3224"
+--- testing: '3.4a' & '-44' ---
+string(6) "212434"
+--- testing: '3.4a' & '1.2' ---
+string(6) "312e30"
+--- testing: '3.4a' & '-7.7' ---
+string(8) "21262421"
+--- testing: '3.4a' & 'abc' ---
+string(6) "212220"
+--- testing: '3.4a' & '123abc' ---
+string(8) "31223061"
+--- testing: '3.4a' & '123e5' ---
+string(8) "31223061"
+--- testing: '3.4a' & '123e5xyz' ---
+string(8) "31223061"
+--- testing: '3.4a' & ' 123abc' ---
+string(8) "20203021"
+--- testing: '3.4a' & '123 abc' ---
+string(8) "31223020"
+--- testing: '3.4a' & '123abc ' ---
+string(8) "31223061"
+--- testing: '3.4a' & '3.4a' ---
+string(8) "332e3461"
+--- testing: '3.4a' & 'a5.9' ---
+string(8) "21242421"
+--- testing: 'a5.9' & '0' ---
+string(2) "20"
+--- testing: 'a5.9' & '65' ---
+string(4) "2035"
+--- testing: 'a5.9' & '-44' ---
+string(6) "213424"
+--- testing: 'a5.9' & '1.2' ---
+string(6) "212422"
+--- testing: 'a5.9' & '-7.7' ---
+string(8) "21352e31"
+--- testing: 'a5.9' & 'abc' ---
+string(6) "612022"
+--- testing: 'a5.9' & '123abc' ---
+string(8) "21302221"
+--- testing: 'a5.9' & '123e5' ---
+string(8) "21302221"
+--- testing: 'a5.9' & '123e5xyz' ---
+string(8) "21302221"
+--- testing: 'a5.9' & ' 123abc' ---
+string(8) "20312231"
+--- testing: 'a5.9' & '123 abc' ---
+string(8) "21302220"
+--- testing: 'a5.9' & '123abc ' ---
+string(8) "21302221"
+--- testing: 'a5.9' & '3.4a' ---
+string(8) "21242421"
+--- testing: 'a5.9' & 'a5.9' ---
+string(8) "61352e39"
+===DONE===
diff --git a/tests/lang/operators/bitwiseNot_basiclong_64bit.phpt b/tests/lang/operators/bitwiseNot_basiclong_64bit.phpt
new file mode 100644
index 0000000..227b734
--- /dev/null
+++ b/tests/lang/operators/bitwiseNot_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test ~N operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(~$longVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 ---
+int(9223372036854775807)
+--- testing: 2147483647 ---
+int(-2147483648)
+--- testing: -2147483648 ---
+int(2147483647)
+--- testing: 9223372034707292160 ---
+int(-9223372034707292161)
+--- testing: -9223372034707292160 ---
+int(9223372034707292159)
+--- testing: 2147483648 ---
+int(-2147483649)
+--- testing: -2147483649 ---
+int(2147483648)
+--- testing: 4294967294 ---
+int(-4294967295)
+--- testing: 4294967295 ---
+int(-4294967296)
+--- testing: 4294967293 ---
+int(-4294967294)
+--- testing: 9223372036854775806 ---
+int(-9223372036854775807)
+--- testing: 9.2233720368548E+18 ---
+int(9223372036854775807)
+--- testing: -9223372036854775807 ---
+int(9223372036854775806)
+--- testing: -9.2233720368548E+18 ---
+int(9223372036854775807)
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/bitwiseNot_variationStr.phpt b/tests/lang/operators/bitwiseNot_variationStr.phpt
new file mode 100644
index 0000000..3e7b698
--- /dev/null
+++ b/tests/lang/operators/bitwiseNot_variationStr.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test ~N operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+
+foreach ($strVals as $strVal) {
+   echo "--- testing: '$strVal' ---\n";
+   var_dump(bin2hex(~$strVal));
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ---
+string(2) "cf"
+--- testing: '65' ---
+string(4) "c9ca"
+--- testing: '-44' ---
+string(6) "d2cbcb"
+--- testing: '1.2' ---
+string(6) "ced1cd"
+--- testing: '-7.7' ---
+string(8) "d2c8d1c8"
+--- testing: 'abc' ---
+string(6) "9e9d9c"
+--- testing: '123abc' ---
+string(12) "cecdcc9e9d9c"
+--- testing: '123e5' ---
+string(10) "cecdcc9aca"
+--- testing: '123e5xyz' ---
+string(16) "cecdcc9aca878685"
+--- testing: ' 123abc' ---
+string(14) "dfcecdcc9e9d9c"
+--- testing: '123 abc' ---
+string(14) "cecdccdf9e9d9c"
+--- testing: '123abc ' ---
+string(14) "cecdcc9e9d9cdf"
+--- testing: '3.4a' ---
+string(8) "ccd1cb9e"
+--- testing: 'a5.9' ---
+string(8) "9ecad1c6"
+===DONE===
diff --git a/tests/lang/operators/bitwiseOr_basiclong_64bit.phpt b/tests/lang/operators/bitwiseOr_basiclong_64bit.phpt
new file mode 100644
index 0000000..e26d46a
--- /dev/null
+++ b/tests/lang/operators/bitwiseOr_basiclong_64bit.phpt
@@ -0,0 +1,583 @@
+--TEST--
+Test | operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal | $otherVal ---\n";   
+      var_dump($longVal|$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal | $longVal ---\n";   
+      var_dump($otherVal|$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 | 0 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | -1 ---
+int(-1)
+--- testing: 9223372036854775807 | 7 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 9 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 65 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | -44 ---
+int(-1)
+--- testing: 9223372036854775807 | 2147483647 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -9223372036854775808 | 0 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 | 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775808 | -1 ---
+int(-1)
+--- testing: -9223372036854775808 | 7 ---
+int(-9223372036854775801)
+--- testing: -9223372036854775808 | 9 ---
+int(-9223372036854775799)
+--- testing: -9223372036854775808 | 65 ---
+int(-9223372036854775743)
+--- testing: -9223372036854775808 | -44 ---
+int(-44)
+--- testing: -9223372036854775808 | 2147483647 ---
+int(-9223372034707292161)
+--- testing: -9223372036854775808 | 9223372036854775807 ---
+int(-1)
+--- testing: 2147483647 | 0 ---
+int(2147483647)
+--- testing: 2147483647 | 1 ---
+int(2147483647)
+--- testing: 2147483647 | -1 ---
+int(-1)
+--- testing: 2147483647 | 7 ---
+int(2147483647)
+--- testing: 2147483647 | 9 ---
+int(2147483647)
+--- testing: 2147483647 | 65 ---
+int(2147483647)
+--- testing: 2147483647 | -44 ---
+int(-1)
+--- testing: 2147483647 | 2147483647 ---
+int(2147483647)
+--- testing: 2147483647 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -2147483648 | 0 ---
+int(-2147483648)
+--- testing: -2147483648 | 1 ---
+int(-2147483647)
+--- testing: -2147483648 | -1 ---
+int(-1)
+--- testing: -2147483648 | 7 ---
+int(-2147483641)
+--- testing: -2147483648 | 9 ---
+int(-2147483639)
+--- testing: -2147483648 | 65 ---
+int(-2147483583)
+--- testing: -2147483648 | -44 ---
+int(-44)
+--- testing: -2147483648 | 2147483647 ---
+int(-1)
+--- testing: -2147483648 | 9223372036854775807 ---
+int(-1)
+--- testing: 9223372034707292160 | 0 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 | 1 ---
+int(9223372034707292161)
+--- testing: 9223372034707292160 | -1 ---
+int(-1)
+--- testing: 9223372034707292160 | 7 ---
+int(9223372034707292167)
+--- testing: 9223372034707292160 | 9 ---
+int(9223372034707292169)
+--- testing: 9223372034707292160 | 65 ---
+int(9223372034707292225)
+--- testing: 9223372034707292160 | -44 ---
+int(-44)
+--- testing: 9223372034707292160 | 2147483647 ---
+int(9223372036854775807)
+--- testing: 9223372034707292160 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -9223372034707292160 | 0 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 | 1 ---
+int(-9223372034707292159)
+--- testing: -9223372034707292160 | -1 ---
+int(-1)
+--- testing: -9223372034707292160 | 7 ---
+int(-9223372034707292153)
+--- testing: -9223372034707292160 | 9 ---
+int(-9223372034707292151)
+--- testing: -9223372034707292160 | 65 ---
+int(-9223372034707292095)
+--- testing: -9223372034707292160 | -44 ---
+int(-44)
+--- testing: -9223372034707292160 | 2147483647 ---
+int(-9223372032559808513)
+--- testing: -9223372034707292160 | 9223372036854775807 ---
+int(-1)
+--- testing: 2147483648 | 0 ---
+int(2147483648)
+--- testing: 2147483648 | 1 ---
+int(2147483649)
+--- testing: 2147483648 | -1 ---
+int(-1)
+--- testing: 2147483648 | 7 ---
+int(2147483655)
+--- testing: 2147483648 | 9 ---
+int(2147483657)
+--- testing: 2147483648 | 65 ---
+int(2147483713)
+--- testing: 2147483648 | -44 ---
+int(-44)
+--- testing: 2147483648 | 2147483647 ---
+int(4294967295)
+--- testing: 2147483648 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -2147483649 | 0 ---
+int(-2147483649)
+--- testing: -2147483649 | 1 ---
+int(-2147483649)
+--- testing: -2147483649 | -1 ---
+int(-1)
+--- testing: -2147483649 | 7 ---
+int(-2147483649)
+--- testing: -2147483649 | 9 ---
+int(-2147483649)
+--- testing: -2147483649 | 65 ---
+int(-2147483649)
+--- testing: -2147483649 | -44 ---
+int(-1)
+--- testing: -2147483649 | 2147483647 ---
+int(-2147483649)
+--- testing: -2147483649 | 9223372036854775807 ---
+int(-1)
+--- testing: 4294967294 | 0 ---
+int(4294967294)
+--- testing: 4294967294 | 1 ---
+int(4294967295)
+--- testing: 4294967294 | -1 ---
+int(-1)
+--- testing: 4294967294 | 7 ---
+int(4294967295)
+--- testing: 4294967294 | 9 ---
+int(4294967295)
+--- testing: 4294967294 | 65 ---
+int(4294967295)
+--- testing: 4294967294 | -44 ---
+int(-2)
+--- testing: 4294967294 | 2147483647 ---
+int(4294967295)
+--- testing: 4294967294 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 4294967295 | 0 ---
+int(4294967295)
+--- testing: 4294967295 | 1 ---
+int(4294967295)
+--- testing: 4294967295 | -1 ---
+int(-1)
+--- testing: 4294967295 | 7 ---
+int(4294967295)
+--- testing: 4294967295 | 9 ---
+int(4294967295)
+--- testing: 4294967295 | 65 ---
+int(4294967295)
+--- testing: 4294967295 | -44 ---
+int(-1)
+--- testing: 4294967295 | 2147483647 ---
+int(4294967295)
+--- testing: 4294967295 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 4294967293 | 0 ---
+int(4294967293)
+--- testing: 4294967293 | 1 ---
+int(4294967293)
+--- testing: 4294967293 | -1 ---
+int(-1)
+--- testing: 4294967293 | 7 ---
+int(4294967295)
+--- testing: 4294967293 | 9 ---
+int(4294967293)
+--- testing: 4294967293 | 65 ---
+int(4294967293)
+--- testing: 4294967293 | -44 ---
+int(-3)
+--- testing: 4294967293 | 2147483647 ---
+int(4294967295)
+--- testing: 4294967293 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 | 0 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 | 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 | -1 ---
+int(-1)
+--- testing: 9223372036854775806 | 7 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 | 9 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 | 65 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 | -44 ---
+int(-2)
+--- testing: 9223372036854775806 | 2147483647 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 9.2233720368548E+18 | 0 ---
+int(-9223372036854775808)
+--- testing: 9.2233720368548E+18 | 1 ---
+int(-9223372036854775807)
+--- testing: 9.2233720368548E+18 | -1 ---
+int(-1)
+--- testing: 9.2233720368548E+18 | 7 ---
+int(-9223372036854775801)
+--- testing: 9.2233720368548E+18 | 9 ---
+int(-9223372036854775799)
+--- testing: 9.2233720368548E+18 | 65 ---
+int(-9223372036854775743)
+--- testing: 9.2233720368548E+18 | -44 ---
+int(-44)
+--- testing: 9.2233720368548E+18 | 2147483647 ---
+int(-9223372034707292161)
+--- testing: 9.2233720368548E+18 | 9223372036854775807 ---
+int(-1)
+--- testing: -9223372036854775807 | 0 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 | 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 | -1 ---
+int(-1)
+--- testing: -9223372036854775807 | 7 ---
+int(-9223372036854775801)
+--- testing: -9223372036854775807 | 9 ---
+int(-9223372036854775799)
+--- testing: -9223372036854775807 | 65 ---
+int(-9223372036854775743)
+--- testing: -9223372036854775807 | -44 ---
+int(-43)
+--- testing: -9223372036854775807 | 2147483647 ---
+int(-9223372034707292161)
+--- testing: -9223372036854775807 | 9223372036854775807 ---
+int(-1)
+--- testing: -9.2233720368548E+18 | 0 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 | 1 ---
+int(-9223372036854775807)
+--- testing: -9.2233720368548E+18 | -1 ---
+int(-1)
+--- testing: -9.2233720368548E+18 | 7 ---
+int(-9223372036854775801)
+--- testing: -9.2233720368548E+18 | 9 ---
+int(-9223372036854775799)
+--- testing: -9.2233720368548E+18 | 65 ---
+int(-9223372036854775743)
+--- testing: -9.2233720368548E+18 | -44 ---
+int(-44)
+--- testing: -9.2233720368548E+18 | 2147483647 ---
+int(-9223372034707292161)
+--- testing: -9.2233720368548E+18 | 9223372036854775807 ---
+int(-1)
+--- testing: 0 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 0 | -9223372036854775808 ---
+int(-9223372036854775808)
+--- testing: 0 | 2147483647 ---
+int(2147483647)
+--- testing: 0 | -2147483648 ---
+int(-2147483648)
+--- testing: 0 | 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 0 | -9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: 0 | 2147483648 ---
+int(2147483648)
+--- testing: 0 | -2147483649 ---
+int(-2147483649)
+--- testing: 0 | 4294967294 ---
+int(4294967294)
+--- testing: 0 | 4294967295 ---
+int(4294967295)
+--- testing: 0 | 4294967293 ---
+int(4294967293)
+--- testing: 0 | 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: 0 | 9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: 0 | -9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: 0 | -9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: 1 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 1 | -9223372036854775808 ---
+int(-9223372036854775807)
+--- testing: 1 | 2147483647 ---
+int(2147483647)
+--- testing: 1 | -2147483648 ---
+int(-2147483647)
+--- testing: 1 | 9223372034707292160 ---
+int(9223372034707292161)
+--- testing: 1 | -9223372034707292160 ---
+int(-9223372034707292159)
+--- testing: 1 | 2147483648 ---
+int(2147483649)
+--- testing: 1 | -2147483649 ---
+int(-2147483649)
+--- testing: 1 | 4294967294 ---
+int(4294967295)
+--- testing: 1 | 4294967295 ---
+int(4294967295)
+--- testing: 1 | 4294967293 ---
+int(4294967293)
+--- testing: 1 | 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 1 | 9.2233720368548E+18 ---
+int(-9223372036854775807)
+--- testing: 1 | -9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: 1 | -9.2233720368548E+18 ---
+int(-9223372036854775807)
+--- testing: -1 | 9223372036854775807 ---
+int(-1)
+--- testing: -1 | -9223372036854775808 ---
+int(-1)
+--- testing: -1 | 2147483647 ---
+int(-1)
+--- testing: -1 | -2147483648 ---
+int(-1)
+--- testing: -1 | 9223372034707292160 ---
+int(-1)
+--- testing: -1 | -9223372034707292160 ---
+int(-1)
+--- testing: -1 | 2147483648 ---
+int(-1)
+--- testing: -1 | -2147483649 ---
+int(-1)
+--- testing: -1 | 4294967294 ---
+int(-1)
+--- testing: -1 | 4294967295 ---
+int(-1)
+--- testing: -1 | 4294967293 ---
+int(-1)
+--- testing: -1 | 9223372036854775806 ---
+int(-1)
+--- testing: -1 | 9.2233720368548E+18 ---
+int(-1)
+--- testing: -1 | -9223372036854775807 ---
+int(-1)
+--- testing: -1 | -9.2233720368548E+18 ---
+int(-1)
+--- testing: 7 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 7 | -9223372036854775808 ---
+int(-9223372036854775801)
+--- testing: 7 | 2147483647 ---
+int(2147483647)
+--- testing: 7 | -2147483648 ---
+int(-2147483641)
+--- testing: 7 | 9223372034707292160 ---
+int(9223372034707292167)
+--- testing: 7 | -9223372034707292160 ---
+int(-9223372034707292153)
+--- testing: 7 | 2147483648 ---
+int(2147483655)
+--- testing: 7 | -2147483649 ---
+int(-2147483649)
+--- testing: 7 | 4294967294 ---
+int(4294967295)
+--- testing: 7 | 4294967295 ---
+int(4294967295)
+--- testing: 7 | 4294967293 ---
+int(4294967295)
+--- testing: 7 | 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 7 | 9.2233720368548E+18 ---
+int(-9223372036854775801)
+--- testing: 7 | -9223372036854775807 ---
+int(-9223372036854775801)
+--- testing: 7 | -9.2233720368548E+18 ---
+int(-9223372036854775801)
+--- testing: 9 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 9 | -9223372036854775808 ---
+int(-9223372036854775799)
+--- testing: 9 | 2147483647 ---
+int(2147483647)
+--- testing: 9 | -2147483648 ---
+int(-2147483639)
+--- testing: 9 | 9223372034707292160 ---
+int(9223372034707292169)
+--- testing: 9 | -9223372034707292160 ---
+int(-9223372034707292151)
+--- testing: 9 | 2147483648 ---
+int(2147483657)
+--- testing: 9 | -2147483649 ---
+int(-2147483649)
+--- testing: 9 | 4294967294 ---
+int(4294967295)
+--- testing: 9 | 4294967295 ---
+int(4294967295)
+--- testing: 9 | 4294967293 ---
+int(4294967293)
+--- testing: 9 | 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 9 | 9.2233720368548E+18 ---
+int(-9223372036854775799)
+--- testing: 9 | -9223372036854775807 ---
+int(-9223372036854775799)
+--- testing: 9 | -9.2233720368548E+18 ---
+int(-9223372036854775799)
+--- testing: 65 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 65 | -9223372036854775808 ---
+int(-9223372036854775743)
+--- testing: 65 | 2147483647 ---
+int(2147483647)
+--- testing: 65 | -2147483648 ---
+int(-2147483583)
+--- testing: 65 | 9223372034707292160 ---
+int(9223372034707292225)
+--- testing: 65 | -9223372034707292160 ---
+int(-9223372034707292095)
+--- testing: 65 | 2147483648 ---
+int(2147483713)
+--- testing: 65 | -2147483649 ---
+int(-2147483649)
+--- testing: 65 | 4294967294 ---
+int(4294967295)
+--- testing: 65 | 4294967295 ---
+int(4294967295)
+--- testing: 65 | 4294967293 ---
+int(4294967293)
+--- testing: 65 | 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 65 | 9.2233720368548E+18 ---
+int(-9223372036854775743)
+--- testing: 65 | -9223372036854775807 ---
+int(-9223372036854775743)
+--- testing: 65 | -9.2233720368548E+18 ---
+int(-9223372036854775743)
+--- testing: -44 | 9223372036854775807 ---
+int(-1)
+--- testing: -44 | -9223372036854775808 ---
+int(-44)
+--- testing: -44 | 2147483647 ---
+int(-1)
+--- testing: -44 | -2147483648 ---
+int(-44)
+--- testing: -44 | 9223372034707292160 ---
+int(-44)
+--- testing: -44 | -9223372034707292160 ---
+int(-44)
+--- testing: -44 | 2147483648 ---
+int(-44)
+--- testing: -44 | -2147483649 ---
+int(-1)
+--- testing: -44 | 4294967294 ---
+int(-2)
+--- testing: -44 | 4294967295 ---
+int(-1)
+--- testing: -44 | 4294967293 ---
+int(-3)
+--- testing: -44 | 9223372036854775806 ---
+int(-2)
+--- testing: -44 | 9.2233720368548E+18 ---
+int(-44)
+--- testing: -44 | -9223372036854775807 ---
+int(-43)
+--- testing: -44 | -9.2233720368548E+18 ---
+int(-44)
+--- testing: 2147483647 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 2147483647 | -9223372036854775808 ---
+int(-9223372034707292161)
+--- testing: 2147483647 | 2147483647 ---
+int(2147483647)
+--- testing: 2147483647 | -2147483648 ---
+int(-1)
+--- testing: 2147483647 | 9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 2147483647 | -9223372034707292160 ---
+int(-9223372032559808513)
+--- testing: 2147483647 | 2147483648 ---
+int(4294967295)
+--- testing: 2147483647 | -2147483649 ---
+int(-2147483649)
+--- testing: 2147483647 | 4294967294 ---
+int(4294967295)
+--- testing: 2147483647 | 4294967295 ---
+int(4294967295)
+--- testing: 2147483647 | 4294967293 ---
+int(4294967295)
+--- testing: 2147483647 | 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 2147483647 | 9.2233720368548E+18 ---
+int(-9223372034707292161)
+--- testing: 2147483647 | -9223372036854775807 ---
+int(-9223372034707292161)
+--- testing: 2147483647 | -9.2233720368548E+18 ---
+int(-9223372034707292161)
+--- testing: 9223372036854775807 | 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | -9223372036854775808 ---
+int(-1)
+--- testing: 9223372036854775807 | 2147483647 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | -2147483648 ---
+int(-1)
+--- testing: 9223372036854775807 | 9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | -9223372034707292160 ---
+int(-1)
+--- testing: 9223372036854775807 | 2147483648 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | -2147483649 ---
+int(-1)
+--- testing: 9223372036854775807 | 4294967294 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 4294967295 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 4294967293 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 | 9.2233720368548E+18 ---
+int(-1)
+--- testing: 9223372036854775807 | -9223372036854775807 ---
+int(-1)
+--- testing: 9223372036854775807 | -9.2233720368548E+18 ---
+int(-1)
+===DONE===
+	
\ No newline at end of file
diff --git a/tests/lang/operators/bitwiseOr_variationStr.phpt b/tests/lang/operators/bitwiseOr_variationStr.phpt
new file mode 100644
index 0000000..6c31477
--- /dev/null
+++ b/tests/lang/operators/bitwiseOr_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test | operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' | '$otherVal' ---\n";   
+      var_dump(bin2hex($strVal|$otherVal));
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' | '0' ---
+string(2) "30"
+--- testing: '0' | '65' ---
+string(4) "3635"
+--- testing: '0' | '-44' ---
+string(6) "3d3434"
+--- testing: '0' | '1.2' ---
+string(6) "312e32"
+--- testing: '0' | '-7.7' ---
+string(8) "3d372e37"
+--- testing: '0' | 'abc' ---
+string(6) "716263"
+--- testing: '0' | '123abc' ---
+string(12) "313233616263"
+--- testing: '0' | '123e5' ---
+string(10) "3132336535"
+--- testing: '0' | '123e5xyz' ---
+string(16) "313233653578797a"
+--- testing: '0' | ' 123abc' ---
+string(14) "30313233616263"
+--- testing: '0' | '123 abc' ---
+string(14) "31323320616263"
+--- testing: '0' | '123abc ' ---
+string(14) "31323361626320"
+--- testing: '0' | '3.4a' ---
+string(8) "332e3461"
+--- testing: '0' | 'a5.9' ---
+string(8) "71352e39"
+--- testing: '65' | '0' ---
+string(4) "3635"
+--- testing: '65' | '65' ---
+string(4) "3635"
+--- testing: '65' | '-44' ---
+string(6) "3f3534"
+--- testing: '65' | '1.2' ---
+string(6) "373f32"
+--- testing: '65' | '-7.7' ---
+string(8) "3f372e37"
+--- testing: '65' | 'abc' ---
+string(6) "777763"
+--- testing: '65' | '123abc' ---
+string(12) "373733616263"
+--- testing: '65' | '123e5' ---
+string(10) "3737336535"
+--- testing: '65' | '123e5xyz' ---
+string(16) "373733653578797a"
+--- testing: '65' | ' 123abc' ---
+string(14) "36353233616263"
+--- testing: '65' | '123 abc' ---
+string(14) "37373320616263"
+--- testing: '65' | '123abc ' ---
+string(14) "37373361626320"
+--- testing: '65' | '3.4a' ---
+string(8) "373f3461"
+--- testing: '65' | 'a5.9' ---
+string(8) "77352e39"
+--- testing: '-44' | '0' ---
+string(6) "3d3434"
+--- testing: '-44' | '65' ---
+string(6) "3f3534"
+--- testing: '-44' | '-44' ---
+string(6) "2d3434"
+--- testing: '-44' | '1.2' ---
+string(6) "3d3e36"
+--- testing: '-44' | '-7.7' ---
+string(8) "2d373e37"
+--- testing: '-44' | 'abc' ---
+string(6) "6d7677"
+--- testing: '-44' | '123abc' ---
+string(12) "3d3637616263"
+--- testing: '-44' | '123e5' ---
+string(10) "3d36376535"
+--- testing: '-44' | '123e5xyz' ---
+string(16) "3d3637653578797a"
+--- testing: '-44' | ' 123abc' ---
+string(14) "2d353633616263"
+--- testing: '-44' | '123 abc' ---
+string(14) "3d363720616263"
+--- testing: '-44' | '123abc ' ---
+string(14) "3d363761626320"
+--- testing: '-44' | '3.4a' ---
+string(8) "3f3e3461"
+--- testing: '-44' | 'a5.9' ---
+string(8) "6d353e39"
+--- testing: '1.2' | '0' ---
+string(6) "312e32"
+--- testing: '1.2' | '65' ---
+string(6) "373f32"
+--- testing: '1.2' | '-44' ---
+string(6) "3d3e36"
+--- testing: '1.2' | '1.2' ---
+string(6) "312e32"
+--- testing: '1.2' | '-7.7' ---
+string(8) "3d3f3e37"
+--- testing: '1.2' | 'abc' ---
+string(6) "716e73"
+--- testing: '1.2' | '123abc' ---
+string(12) "313e33616263"
+--- testing: '1.2' | '123e5' ---
+string(10) "313e336535"
+--- testing: '1.2' | '123e5xyz' ---
+string(16) "313e33653578797a"
+--- testing: '1.2' | ' 123abc' ---
+string(14) "313f3233616263"
+--- testing: '1.2' | '123 abc' ---
+string(14) "313e3320616263"
+--- testing: '1.2' | '123abc ' ---
+string(14) "313e3361626320"
+--- testing: '1.2' | '3.4a' ---
+string(8) "332e3661"
+--- testing: '1.2' | 'a5.9' ---
+string(8) "713f3e39"
+--- testing: '-7.7' | '0' ---
+string(8) "3d372e37"
+--- testing: '-7.7' | '65' ---
+string(8) "3f372e37"
+--- testing: '-7.7' | '-44' ---
+string(8) "2d373e37"
+--- testing: '-7.7' | '1.2' ---
+string(8) "3d3f3e37"
+--- testing: '-7.7' | '-7.7' ---
+string(8) "2d372e37"
+--- testing: '-7.7' | 'abc' ---
+string(8) "6d776f37"
+--- testing: '-7.7' | '123abc' ---
+string(12) "3d373f776263"
+--- testing: '-7.7' | '123e5' ---
+string(10) "3d373f7735"
+--- testing: '-7.7' | '123e5xyz' ---
+string(16) "3d373f773578797a"
+--- testing: '-7.7' | ' 123abc' ---
+string(14) "2d373e37616263"
+--- testing: '-7.7' | '123 abc' ---
+string(14) "3d373f37616263"
+--- testing: '-7.7' | '123abc ' ---
+string(14) "3d373f77626320"
+--- testing: '-7.7' | '3.4a' ---
+string(8) "3f3f3e77"
+--- testing: '-7.7' | 'a5.9' ---
+string(8) "6d372e3f"
+--- testing: 'abc' | '0' ---
+string(6) "716263"
+--- testing: 'abc' | '65' ---
+string(6) "777763"
+--- testing: 'abc' | '-44' ---
+string(6) "6d7677"
+--- testing: 'abc' | '1.2' ---
+string(6) "716e73"
+--- testing: 'abc' | '-7.7' ---
+string(8) "6d776f37"
+--- testing: 'abc' | 'abc' ---
+string(6) "616263"
+--- testing: 'abc' | '123abc' ---
+string(12) "717273616263"
+--- testing: 'abc' | '123e5' ---
+string(10) "7172736535"
+--- testing: 'abc' | '123e5xyz' ---
+string(16) "717273653578797a"
+--- testing: 'abc' | ' 123abc' ---
+string(14) "61737333616263"
+--- testing: 'abc' | '123 abc' ---
+string(14) "71727320616263"
+--- testing: 'abc' | '123abc ' ---
+string(14) "71727361626320"
+--- testing: 'abc' | '3.4a' ---
+string(8) "736e7761"
+--- testing: 'abc' | 'a5.9' ---
+string(8) "61776f39"
+--- testing: '123abc' | '0' ---
+string(12) "313233616263"
+--- testing: '123abc' | '65' ---
+string(12) "373733616263"
+--- testing: '123abc' | '-44' ---
+string(12) "3d3637616263"
+--- testing: '123abc' | '1.2' ---
+string(12) "313e33616263"
+--- testing: '123abc' | '-7.7' ---
+string(12) "3d373f776263"
+--- testing: '123abc' | 'abc' ---
+string(12) "717273616263"
+--- testing: '123abc' | '123abc' ---
+string(12) "313233616263"
+--- testing: '123abc' | '123e5' ---
+string(12) "313233657763"
+--- testing: '123abc' | '123e5xyz' ---
+string(16) "31323365777b797a"
+--- testing: '123abc' | ' 123abc' ---
+string(14) "31333373636363"
+--- testing: '123abc' | '123 abc' ---
+string(14) "31323361636363"
+--- testing: '123abc' | '123abc ' ---
+string(14) "31323361626320"
+--- testing: '123abc' | '3.4a' ---
+string(12) "333e37616263"
+--- testing: '123abc' | 'a5.9' ---
+string(12) "71373f796263"
+--- testing: '123e5' | '0' ---
+string(10) "3132336535"
+--- testing: '123e5' | '65' ---
+string(10) "3737336535"
+--- testing: '123e5' | '-44' ---
+string(10) "3d36376535"
+--- testing: '123e5' | '1.2' ---
+string(10) "313e336535"
+--- testing: '123e5' | '-7.7' ---
+string(10) "3d373f7735"
+--- testing: '123e5' | 'abc' ---
+string(10) "7172736535"
+--- testing: '123e5' | '123abc' ---
+string(12) "313233657763"
+--- testing: '123e5' | '123e5' ---
+string(10) "3132336535"
+--- testing: '123e5' | '123e5xyz' ---
+string(16) "313233653578797a"
+--- testing: '123e5' | ' 123abc' ---
+string(14) "31333377756263"
+--- testing: '123e5' | '123 abc' ---
+string(14) "31323365756263"
+--- testing: '123e5' | '123abc ' ---
+string(14) "31323365776320"
+--- testing: '123e5' | '3.4a' ---
+string(10) "333e376535"
+--- testing: '123e5' | 'a5.9' ---
+string(10) "71373f7d35"
+--- testing: '123e5xyz' | '0' ---
+string(16) "313233653578797a"
+--- testing: '123e5xyz' | '65' ---
+string(16) "373733653578797a"
+--- testing: '123e5xyz' | '-44' ---
+string(16) "3d3637653578797a"
+--- testing: '123e5xyz' | '1.2' ---
+string(16) "313e33653578797a"
+--- testing: '123e5xyz' | '-7.7' ---
+string(16) "3d373f773578797a"
+--- testing: '123e5xyz' | 'abc' ---
+string(16) "717273653578797a"
+--- testing: '123e5xyz' | '123abc' ---
+string(16) "31323365777b797a"
+--- testing: '123e5xyz' | '123e5' ---
+string(16) "313233653578797a"
+--- testing: '123e5xyz' | '123e5xyz' ---
+string(16) "313233653578797a"
+--- testing: '123e5xyz' | ' 123abc' ---
+string(16) "31333377757a7b7a"
+--- testing: '123e5xyz' | '123 abc' ---
+string(16) "31323365757a7b7a"
+--- testing: '123e5xyz' | '123abc ' ---
+string(16) "31323365777b797a"
+--- testing: '123e5xyz' | '3.4a' ---
+string(16) "333e37653578797a"
+--- testing: '123e5xyz' | 'a5.9' ---
+string(16) "71373f7d3578797a"
+--- testing: ' 123abc' | '0' ---
+string(14) "30313233616263"
+--- testing: ' 123abc' | '65' ---
+string(14) "36353233616263"
+--- testing: ' 123abc' | '-44' ---
+string(14) "2d353633616263"
+--- testing: ' 123abc' | '1.2' ---
+string(14) "313f3233616263"
+--- testing: ' 123abc' | '-7.7' ---
+string(14) "2d373e37616263"
+--- testing: ' 123abc' | 'abc' ---
+string(14) "61737333616263"
+--- testing: ' 123abc' | '123abc' ---
+string(14) "31333373636363"
+--- testing: ' 123abc' | '123e5' ---
+string(14) "31333377756263"
+--- testing: ' 123abc' | '123e5xyz' ---
+string(16) "31333377757a7b7a"
+--- testing: ' 123abc' | ' 123abc' ---
+string(14) "20313233616263"
+--- testing: ' 123abc' | '123 abc' ---
+string(14) "31333333616263"
+--- testing: ' 123abc' | '123abc ' ---
+string(14) "31333373636363"
+--- testing: ' 123abc' | '3.4a' ---
+string(14) "333f3673616263"
+--- testing: ' 123abc' | 'a5.9' ---
+string(14) "61353e3b616263"
+--- testing: '123 abc' | '0' ---
+string(14) "31323320616263"
+--- testing: '123 abc' | '65' ---
+string(14) "37373320616263"
+--- testing: '123 abc' | '-44' ---
+string(14) "3d363720616263"
+--- testing: '123 abc' | '1.2' ---
+string(14) "313e3320616263"
+--- testing: '123 abc' | '-7.7' ---
+string(14) "3d373f37616263"
+--- testing: '123 abc' | 'abc' ---
+string(14) "71727320616263"
+--- testing: '123 abc' | '123abc' ---
+string(14) "31323361636363"
+--- testing: '123 abc' | '123e5' ---
+string(14) "31323365756263"
+--- testing: '123 abc' | '123e5xyz' ---
+string(16) "31323365757a7b7a"
+--- testing: '123 abc' | ' 123abc' ---
+string(14) "31333333616263"
+--- testing: '123 abc' | '123 abc' ---
+string(14) "31323320616263"
+--- testing: '123 abc' | '123abc ' ---
+string(14) "31323361636363"
+--- testing: '123 abc' | '3.4a' ---
+string(14) "333e3761616263"
+--- testing: '123 abc' | 'a5.9' ---
+string(14) "71373f39616263"
+--- testing: '123abc ' | '0' ---
+string(14) "31323361626320"
+--- testing: '123abc ' | '65' ---
+string(14) "37373361626320"
+--- testing: '123abc ' | '-44' ---
+string(14) "3d363761626320"
+--- testing: '123abc ' | '1.2' ---
+string(14) "313e3361626320"
+--- testing: '123abc ' | '-7.7' ---
+string(14) "3d373f77626320"
+--- testing: '123abc ' | 'abc' ---
+string(14) "71727361626320"
+--- testing: '123abc ' | '123abc' ---
+string(14) "31323361626320"
+--- testing: '123abc ' | '123e5' ---
+string(14) "31323365776320"
+--- testing: '123abc ' | '123e5xyz' ---
+string(16) "31323365777b797a"
+--- testing: '123abc ' | ' 123abc' ---
+string(14) "31333373636363"
+--- testing: '123abc ' | '123 abc' ---
+string(14) "31323361636363"
+--- testing: '123abc ' | '123abc ' ---
+string(14) "31323361626320"
+--- testing: '123abc ' | '3.4a' ---
+string(14) "333e3761626320"
+--- testing: '123abc ' | 'a5.9' ---
+string(14) "71373f79626320"
+--- testing: '3.4a' | '0' ---
+string(8) "332e3461"
+--- testing: '3.4a' | '65' ---
+string(8) "373f3461"
+--- testing: '3.4a' | '-44' ---
+string(8) "3f3e3461"
+--- testing: '3.4a' | '1.2' ---
+string(8) "332e3661"
+--- testing: '3.4a' | '-7.7' ---
+string(8) "3f3f3e77"
+--- testing: '3.4a' | 'abc' ---
+string(8) "736e7761"
+--- testing: '3.4a' | '123abc' ---
+string(12) "333e37616263"
+--- testing: '3.4a' | '123e5' ---
+string(10) "333e376535"
+--- testing: '3.4a' | '123e5xyz' ---
+string(16) "333e37653578797a"
+--- testing: '3.4a' | ' 123abc' ---
+string(14) "333f3673616263"
+--- testing: '3.4a' | '123 abc' ---
+string(14) "333e3761616263"
+--- testing: '3.4a' | '123abc ' ---
+string(14) "333e3761626320"
+--- testing: '3.4a' | '3.4a' ---
+string(8) "332e3461"
+--- testing: '3.4a' | 'a5.9' ---
+string(8) "733f3e79"
+--- testing: 'a5.9' | '0' ---
+string(8) "71352e39"
+--- testing: 'a5.9' | '65' ---
+string(8) "77352e39"
+--- testing: 'a5.9' | '-44' ---
+string(8) "6d353e39"
+--- testing: 'a5.9' | '1.2' ---
+string(8) "713f3e39"
+--- testing: 'a5.9' | '-7.7' ---
+string(8) "6d372e3f"
+--- testing: 'a5.9' | 'abc' ---
+string(8) "61776f39"
+--- testing: 'a5.9' | '123abc' ---
+string(12) "71373f796263"
+--- testing: 'a5.9' | '123e5' ---
+string(10) "71373f7d35"
+--- testing: 'a5.9' | '123e5xyz' ---
+string(16) "71373f7d3578797a"
+--- testing: 'a5.9' | ' 123abc' ---
+string(14) "61353e3b616263"
+--- testing: 'a5.9' | '123 abc' ---
+string(14) "71373f39616263"
+--- testing: 'a5.9' | '123abc ' ---
+string(14) "71373f79626320"
+--- testing: 'a5.9' | '3.4a' ---
+string(8) "733f3e79"
+--- testing: 'a5.9' | 'a5.9' ---
+string(8) "61352e39"
+===DONE===
diff --git a/tests/lang/operators/bitwiseShiftLeft_basiclong_64bit.phpt b/tests/lang/operators/bitwiseShiftLeft_basiclong_64bit.phpt
new file mode 100644
index 0000000..24da2d0
--- /dev/null
+++ b/tests/lang/operators/bitwiseShiftLeft_basiclong_64bit.phpt
@@ -0,0 +1,583 @@
+--TEST--
+Test << operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal << $otherVal ---\n";   
+      var_dump($longVal<<$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal << $longVal ---\n";   
+      var_dump($otherVal<<$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 << 0 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << 1 ---
+int(-2)
+--- testing: 9223372036854775807 << -1 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 << 7 ---
+int(-128)
+--- testing: 9223372036854775807 << 9 ---
+int(-512)
+--- testing: 9223372036854775807 << 65 ---
+int(-2)
+--- testing: 9223372036854775807 << -44 ---
+int(-1048576)
+--- testing: 9223372036854775807 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 << 0 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 << 1 ---
+int(0)
+--- testing: -9223372036854775808 << -1 ---
+int(0)
+--- testing: -9223372036854775808 << 7 ---
+int(0)
+--- testing: -9223372036854775808 << 9 ---
+int(0)
+--- testing: -9223372036854775808 << 65 ---
+int(0)
+--- testing: -9223372036854775808 << -44 ---
+int(0)
+--- testing: -9223372036854775808 << 2147483647 ---
+int(0)
+--- testing: -9223372036854775808 << 9223372036854775807 ---
+int(0)
+--- testing: 2147483647 << 0 ---
+int(2147483647)
+--- testing: 2147483647 << 1 ---
+int(4294967294)
+--- testing: 2147483647 << -1 ---
+int(-9223372036854775808)
+--- testing: 2147483647 << 7 ---
+int(274877906816)
+--- testing: 2147483647 << 9 ---
+int(1099511627264)
+--- testing: 2147483647 << 65 ---
+int(4294967294)
+--- testing: 2147483647 << -44 ---
+int(2251799812636672)
+--- testing: 2147483647 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 2147483647 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -2147483648 << 0 ---
+int(-2147483648)
+--- testing: -2147483648 << 1 ---
+int(-4294967296)
+--- testing: -2147483648 << -1 ---
+int(0)
+--- testing: -2147483648 << 7 ---
+int(-274877906944)
+--- testing: -2147483648 << 9 ---
+int(-1099511627776)
+--- testing: -2147483648 << 65 ---
+int(-4294967296)
+--- testing: -2147483648 << -44 ---
+int(-2251799813685248)
+--- testing: -2147483648 << 2147483647 ---
+int(0)
+--- testing: -2147483648 << 9223372036854775807 ---
+int(0)
+--- testing: 9223372034707292160 << 0 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 << 1 ---
+int(-4294967296)
+--- testing: 9223372034707292160 << -1 ---
+int(0)
+--- testing: 9223372034707292160 << 7 ---
+int(-274877906944)
+--- testing: 9223372034707292160 << 9 ---
+int(-1099511627776)
+--- testing: 9223372034707292160 << 65 ---
+int(-4294967296)
+--- testing: 9223372034707292160 << -44 ---
+int(-2251799813685248)
+--- testing: 9223372034707292160 << 2147483647 ---
+int(0)
+--- testing: 9223372034707292160 << 9223372036854775807 ---
+int(0)
+--- testing: -9223372034707292160 << 0 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 << 1 ---
+int(4294967296)
+--- testing: -9223372034707292160 << -1 ---
+int(0)
+--- testing: -9223372034707292160 << 7 ---
+int(274877906944)
+--- testing: -9223372034707292160 << 9 ---
+int(1099511627776)
+--- testing: -9223372034707292160 << 65 ---
+int(4294967296)
+--- testing: -9223372034707292160 << -44 ---
+int(2251799813685248)
+--- testing: -9223372034707292160 << 2147483647 ---
+int(0)
+--- testing: -9223372034707292160 << 9223372036854775807 ---
+int(0)
+--- testing: 2147483648 << 0 ---
+int(2147483648)
+--- testing: 2147483648 << 1 ---
+int(4294967296)
+--- testing: 2147483648 << -1 ---
+int(0)
+--- testing: 2147483648 << 7 ---
+int(274877906944)
+--- testing: 2147483648 << 9 ---
+int(1099511627776)
+--- testing: 2147483648 << 65 ---
+int(4294967296)
+--- testing: 2147483648 << -44 ---
+int(2251799813685248)
+--- testing: 2147483648 << 2147483647 ---
+int(0)
+--- testing: 2147483648 << 9223372036854775807 ---
+int(0)
+--- testing: -2147483649 << 0 ---
+int(-2147483649)
+--- testing: -2147483649 << 1 ---
+int(-4294967298)
+--- testing: -2147483649 << -1 ---
+int(-9223372036854775808)
+--- testing: -2147483649 << 7 ---
+int(-274877907072)
+--- testing: -2147483649 << 9 ---
+int(-1099511628288)
+--- testing: -2147483649 << 65 ---
+int(-4294967298)
+--- testing: -2147483649 << -44 ---
+int(-2251799814733824)
+--- testing: -2147483649 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: -2147483649 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 4294967294 << 0 ---
+int(4294967294)
+--- testing: 4294967294 << 1 ---
+int(8589934588)
+--- testing: 4294967294 << -1 ---
+int(0)
+--- testing: 4294967294 << 7 ---
+int(549755813632)
+--- testing: 4294967294 << 9 ---
+int(2199023254528)
+--- testing: 4294967294 << 65 ---
+int(8589934588)
+--- testing: 4294967294 << -44 ---
+int(4503599625273344)
+--- testing: 4294967294 << 2147483647 ---
+int(0)
+--- testing: 4294967294 << 9223372036854775807 ---
+int(0)
+--- testing: 4294967295 << 0 ---
+int(4294967295)
+--- testing: 4294967295 << 1 ---
+int(8589934590)
+--- testing: 4294967295 << -1 ---
+int(-9223372036854775808)
+--- testing: 4294967295 << 7 ---
+int(549755813760)
+--- testing: 4294967295 << 9 ---
+int(2199023255040)
+--- testing: 4294967295 << 65 ---
+int(8589934590)
+--- testing: 4294967295 << -44 ---
+int(4503599626321920)
+--- testing: 4294967295 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 4294967295 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 4294967293 << 0 ---
+int(4294967293)
+--- testing: 4294967293 << 1 ---
+int(8589934586)
+--- testing: 4294967293 << -1 ---
+int(-9223372036854775808)
+--- testing: 4294967293 << 7 ---
+int(549755813504)
+--- testing: 4294967293 << 9 ---
+int(2199023254016)
+--- testing: 4294967293 << 65 ---
+int(8589934586)
+--- testing: 4294967293 << -44 ---
+int(4503599624224768)
+--- testing: 4294967293 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 4294967293 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775806 << 0 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 << 1 ---
+int(-4)
+--- testing: 9223372036854775806 << -1 ---
+int(0)
+--- testing: 9223372036854775806 << 7 ---
+int(-256)
+--- testing: 9223372036854775806 << 9 ---
+int(-1024)
+--- testing: 9223372036854775806 << 65 ---
+int(-4)
+--- testing: 9223372036854775806 << -44 ---
+int(-2097152)
+--- testing: 9223372036854775806 << 2147483647 ---
+int(0)
+--- testing: 9223372036854775806 << 9223372036854775807 ---
+int(0)
+--- testing: 9.2233720368548E+18 << 0 ---
+int(-9223372036854775808)
+--- testing: 9.2233720368548E+18 << 1 ---
+int(0)
+--- testing: 9.2233720368548E+18 << -1 ---
+int(0)
+--- testing: 9.2233720368548E+18 << 7 ---
+int(0)
+--- testing: 9.2233720368548E+18 << 9 ---
+int(0)
+--- testing: 9.2233720368548E+18 << 65 ---
+int(0)
+--- testing: 9.2233720368548E+18 << -44 ---
+int(0)
+--- testing: 9.2233720368548E+18 << 2147483647 ---
+int(0)
+--- testing: 9.2233720368548E+18 << 9223372036854775807 ---
+int(0)
+--- testing: -9223372036854775807 << 0 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 << 1 ---
+int(2)
+--- testing: -9223372036854775807 << -1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775807 << 7 ---
+int(128)
+--- testing: -9223372036854775807 << 9 ---
+int(512)
+--- testing: -9223372036854775807 << 65 ---
+int(2)
+--- testing: -9223372036854775807 << -44 ---
+int(1048576)
+--- testing: -9223372036854775807 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775807 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 << 0 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 << 1 ---
+int(0)
+--- testing: -9.2233720368548E+18 << -1 ---
+int(0)
+--- testing: -9.2233720368548E+18 << 7 ---
+int(0)
+--- testing: -9.2233720368548E+18 << 9 ---
+int(0)
+--- testing: -9.2233720368548E+18 << 65 ---
+int(0)
+--- testing: -9.2233720368548E+18 << -44 ---
+int(0)
+--- testing: -9.2233720368548E+18 << 2147483647 ---
+int(0)
+--- testing: -9.2233720368548E+18 << 9223372036854775807 ---
+int(0)
+--- testing: 0 << 9223372036854775807 ---
+int(0)
+--- testing: 0 << -9223372036854775808 ---
+int(0)
+--- testing: 0 << 2147483647 ---
+int(0)
+--- testing: 0 << -2147483648 ---
+int(0)
+--- testing: 0 << 9223372034707292160 ---
+int(0)
+--- testing: 0 << -9223372034707292160 ---
+int(0)
+--- testing: 0 << 2147483648 ---
+int(0)
+--- testing: 0 << -2147483649 ---
+int(0)
+--- testing: 0 << 4294967294 ---
+int(0)
+--- testing: 0 << 4294967295 ---
+int(0)
+--- testing: 0 << 4294967293 ---
+int(0)
+--- testing: 0 << 9223372036854775806 ---
+int(0)
+--- testing: 0 << 9.2233720368548E+18 ---
+int(0)
+--- testing: 0 << -9223372036854775807 ---
+int(0)
+--- testing: 0 << -9.2233720368548E+18 ---
+int(0)
+--- testing: 1 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 1 << -9223372036854775808 ---
+int(1)
+--- testing: 1 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 1 << -2147483648 ---
+int(1)
+--- testing: 1 << 9223372034707292160 ---
+int(1)
+--- testing: 1 << -9223372034707292160 ---
+int(1)
+--- testing: 1 << 2147483648 ---
+int(1)
+--- testing: 1 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: 1 << 4294967294 ---
+int(4611686018427387904)
+--- testing: 1 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: 1 << 4294967293 ---
+int(2305843009213693952)
+--- testing: 1 << 9223372036854775806 ---
+int(4611686018427387904)
+--- testing: 1 << 9.2233720368548E+18 ---
+int(1)
+--- testing: 1 << -9223372036854775807 ---
+int(2)
+--- testing: 1 << -9.2233720368548E+18 ---
+int(1)
+--- testing: -1 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -1 << -9223372036854775808 ---
+int(-1)
+--- testing: -1 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: -1 << -2147483648 ---
+int(-1)
+--- testing: -1 << 9223372034707292160 ---
+int(-1)
+--- testing: -1 << -9223372034707292160 ---
+int(-1)
+--- testing: -1 << 2147483648 ---
+int(-1)
+--- testing: -1 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: -1 << 4294967294 ---
+int(-4611686018427387904)
+--- testing: -1 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: -1 << 4294967293 ---
+int(-2305843009213693952)
+--- testing: -1 << 9223372036854775806 ---
+int(-4611686018427387904)
+--- testing: -1 << 9.2233720368548E+18 ---
+int(-1)
+--- testing: -1 << -9223372036854775807 ---
+int(-2)
+--- testing: -1 << -9.2233720368548E+18 ---
+int(-1)
+--- testing: 7 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 7 << -9223372036854775808 ---
+int(7)
+--- testing: 7 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 7 << -2147483648 ---
+int(7)
+--- testing: 7 << 9223372034707292160 ---
+int(7)
+--- testing: 7 << -9223372034707292160 ---
+int(7)
+--- testing: 7 << 2147483648 ---
+int(7)
+--- testing: 7 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: 7 << 4294967294 ---
+int(-4611686018427387904)
+--- testing: 7 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: 7 << 4294967293 ---
+int(-2305843009213693952)
+--- testing: 7 << 9223372036854775806 ---
+int(-4611686018427387904)
+--- testing: 7 << 9.2233720368548E+18 ---
+int(7)
+--- testing: 7 << -9223372036854775807 ---
+int(14)
+--- testing: 7 << -9.2233720368548E+18 ---
+int(7)
+--- testing: 9 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 9 << -9223372036854775808 ---
+int(9)
+--- testing: 9 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 9 << -2147483648 ---
+int(9)
+--- testing: 9 << 9223372034707292160 ---
+int(9)
+--- testing: 9 << -9223372034707292160 ---
+int(9)
+--- testing: 9 << 2147483648 ---
+int(9)
+--- testing: 9 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: 9 << 4294967294 ---
+int(4611686018427387904)
+--- testing: 9 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: 9 << 4294967293 ---
+int(2305843009213693952)
+--- testing: 9 << 9223372036854775806 ---
+int(4611686018427387904)
+--- testing: 9 << 9.2233720368548E+18 ---
+int(9)
+--- testing: 9 << -9223372036854775807 ---
+int(18)
+--- testing: 9 << -9.2233720368548E+18 ---
+int(9)
+--- testing: 65 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 65 << -9223372036854775808 ---
+int(65)
+--- testing: 65 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 65 << -2147483648 ---
+int(65)
+--- testing: 65 << 9223372034707292160 ---
+int(65)
+--- testing: 65 << -9223372034707292160 ---
+int(65)
+--- testing: 65 << 2147483648 ---
+int(65)
+--- testing: 65 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: 65 << 4294967294 ---
+int(4611686018427387904)
+--- testing: 65 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: 65 << 4294967293 ---
+int(2305843009213693952)
+--- testing: 65 << 9223372036854775806 ---
+int(4611686018427387904)
+--- testing: 65 << 9.2233720368548E+18 ---
+int(65)
+--- testing: 65 << -9223372036854775807 ---
+int(130)
+--- testing: 65 << -9.2233720368548E+18 ---
+int(65)
+--- testing: -44 << 9223372036854775807 ---
+int(0)
+--- testing: -44 << -9223372036854775808 ---
+int(-44)
+--- testing: -44 << 2147483647 ---
+int(0)
+--- testing: -44 << -2147483648 ---
+int(-44)
+--- testing: -44 << 9223372034707292160 ---
+int(-44)
+--- testing: -44 << -9223372034707292160 ---
+int(-44)
+--- testing: -44 << 2147483648 ---
+int(-44)
+--- testing: -44 << -2147483649 ---
+int(0)
+--- testing: -44 << 4294967294 ---
+int(0)
+--- testing: -44 << 4294967295 ---
+int(0)
+--- testing: -44 << 4294967293 ---
+int(-9223372036854775808)
+--- testing: -44 << 9223372036854775806 ---
+int(0)
+--- testing: -44 << 9.2233720368548E+18 ---
+int(-44)
+--- testing: -44 << -9223372036854775807 ---
+int(-88)
+--- testing: -44 << -9.2233720368548E+18 ---
+int(-44)
+--- testing: 2147483647 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 2147483647 << -9223372036854775808 ---
+int(2147483647)
+--- testing: 2147483647 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 2147483647 << -2147483648 ---
+int(2147483647)
+--- testing: 2147483647 << 9223372034707292160 ---
+int(2147483647)
+--- testing: 2147483647 << -9223372034707292160 ---
+int(2147483647)
+--- testing: 2147483647 << 2147483648 ---
+int(2147483647)
+--- testing: 2147483647 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: 2147483647 << 4294967294 ---
+int(-4611686018427387904)
+--- testing: 2147483647 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: 2147483647 << 4294967293 ---
+int(-2305843009213693952)
+--- testing: 2147483647 << 9223372036854775806 ---
+int(-4611686018427387904)
+--- testing: 2147483647 << 9.2233720368548E+18 ---
+int(2147483647)
+--- testing: 2147483647 << -9223372036854775807 ---
+int(4294967294)
+--- testing: 2147483647 << -9.2233720368548E+18 ---
+int(2147483647)
+--- testing: 9223372036854775807 << 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 << -9223372036854775808 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << 2147483647 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 << -2147483648 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << 9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << -9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << 2147483648 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << -2147483649 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 << 4294967294 ---
+int(-4611686018427387904)
+--- testing: 9223372036854775807 << 4294967295 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 << 4294967293 ---
+int(-2305843009213693952)
+--- testing: 9223372036854775807 << 9223372036854775806 ---
+int(-4611686018427387904)
+--- testing: 9223372036854775807 << 9.2233720368548E+18 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 << -9223372036854775807 ---
+int(-2)
+--- testing: 9223372036854775807 << -9.2233720368548E+18 ---
+int(9223372036854775807)
+===DONE===
+	
\ No newline at end of file
diff --git a/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt b/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt
new file mode 100644
index 0000000..b1bc437
--- /dev/null
+++ b/tests/lang/operators/bitwiseShiftLeft_variationStr.phpt
@@ -0,0 +1,421 @@
+--TEST--
+Test << operator : various numbers as strings
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' << '$otherVal' ---\n";   
+      var_dump(bin2hex($strVal<<$otherVal));
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' << '0' ---
+string(2) "30"
+--- testing: '0' << '65' ---
+string(2) "30"
+--- testing: '0' << '-44' ---
+string(2) "30"
+--- testing: '0' << '1.2' ---
+string(2) "30"
+--- testing: '0' << '-7.7' ---
+string(2) "30"
+--- testing: '0' << 'abc' ---
+string(2) "30"
+--- testing: '0' << '123abc' ---
+string(2) "30"
+--- testing: '0' << '123e5' ---
+string(2) "30"
+--- testing: '0' << '123e5xyz' ---
+string(2) "30"
+--- testing: '0' << ' 123abc' ---
+string(2) "30"
+--- testing: '0' << '123 abc' ---
+string(2) "30"
+--- testing: '0' << '123abc ' ---
+string(2) "30"
+--- testing: '0' << '3.4a' ---
+string(2) "30"
+--- testing: '0' << 'a5.9' ---
+string(2) "30"
+--- testing: '65' << '0' ---
+string(4) "3635"
+--- testing: '65' << '65' ---
+string(6) "313330"
+--- testing: '65' << '-44' ---
+string(16) "3638313537343430"
+--- testing: '65' << '1.2' ---
+string(6) "313330"
+--- testing: '65' << '-7.7' ---
+string(22) "2d32313133393239323136"
+--- testing: '65' << 'abc' ---
+string(4) "3635"
+--- testing: '65' << '123abc' ---
+string(18) "313334323137373238"
+--- testing: '65' << '123e5' ---
+string(18) "313334323137373238"
+--- testing: '65' << '123e5xyz' ---
+string(18) "313334323137373238"
+--- testing: '65' << ' 123abc' ---
+string(18) "313334323137373238"
+--- testing: '65' << '123 abc' ---
+string(18) "313334323137373238"
+--- testing: '65' << '123abc ' ---
+string(18) "313334323137373238"
+--- testing: '65' << '3.4a' ---
+string(6) "353230"
+--- testing: '65' << 'a5.9' ---
+string(4) "3635"
+--- testing: '-44' << '0' ---
+string(6) "2d3434"
+--- testing: '-44' << '65' ---
+string(6) "2d3838"
+--- testing: '-44' << '-44' ---
+string(18) "2d3436313337333434"
+--- testing: '-44' << '1.2' ---
+string(6) "2d3838"
+--- testing: '-44' << '-7.7' ---
+string(22) "2d31343736333935303038"
+--- testing: '-44' << 'abc' ---
+string(6) "2d3434"
+--- testing: '-44' << '123abc' ---
+string(22) "2d31363130363132373336"
+--- testing: '-44' << '123e5' ---
+string(22) "2d31363130363132373336"
+--- testing: '-44' << '123e5xyz' ---
+string(22) "2d31363130363132373336"
+--- testing: '-44' << ' 123abc' ---
+string(22) "2d31363130363132373336"
+--- testing: '-44' << '123 abc' ---
+string(22) "2d31363130363132373336"
+--- testing: '-44' << '123abc ' ---
+string(22) "2d31363130363132373336"
+--- testing: '-44' << '3.4a' ---
+string(8) "2d333532"
+--- testing: '-44' << 'a5.9' ---
+string(6) "2d3434"
+--- testing: '1.2' << '0' ---
+string(2) "31"
+--- testing: '1.2' << '65' ---
+string(2) "32"
+--- testing: '1.2' << '-44' ---
+string(14) "31303438353736"
+--- testing: '1.2' << '1.2' ---
+string(2) "32"
+--- testing: '1.2' << '-7.7' ---
+string(16) "3333353534343332"
+--- testing: '1.2' << 'abc' ---
+string(2) "31"
+--- testing: '1.2' << '123abc' ---
+string(18) "313334323137373238"
+--- testing: '1.2' << '123e5' ---
+string(18) "313334323137373238"
+--- testing: '1.2' << '123e5xyz' ---
+string(18) "313334323137373238"
+--- testing: '1.2' << ' 123abc' ---
+string(18) "313334323137373238"
+--- testing: '1.2' << '123 abc' ---
+string(18) "313334323137373238"
+--- testing: '1.2' << '123abc ' ---
+string(18) "313334323137373238"
+--- testing: '1.2' << '3.4a' ---
+string(2) "38"
+--- testing: '1.2' << 'a5.9' ---
+string(2) "31"
+--- testing: '-7.7' << '0' ---
+string(4) "2d37"
+--- testing: '-7.7' << '65' ---
+string(6) "2d3134"
+--- testing: '-7.7' << '-44' ---
+string(16) "2d37333430303332"
+--- testing: '-7.7' << '1.2' ---
+string(6) "2d3134"
+--- testing: '-7.7' << '-7.7' ---
+string(20) "2d323334383831303234"
+--- testing: '-7.7' << 'abc' ---
+string(4) "2d37"
+--- testing: '-7.7' << '123abc' ---
+string(20) "2d393339353234303936"
+--- testing: '-7.7' << '123e5' ---
+string(20) "2d393339353234303936"
+--- testing: '-7.7' << '123e5xyz' ---
+string(20) "2d393339353234303936"
+--- testing: '-7.7' << ' 123abc' ---
+string(20) "2d393339353234303936"
+--- testing: '-7.7' << '123 abc' ---
+string(20) "2d393339353234303936"
+--- testing: '-7.7' << '123abc ' ---
+string(20) "2d393339353234303936"
+--- testing: '-7.7' << '3.4a' ---
+string(6) "2d3536"
+--- testing: '-7.7' << 'a5.9' ---
+string(4) "2d37"
+--- testing: 'abc' << '0' ---
+string(2) "30"
+--- testing: 'abc' << '65' ---
+string(2) "30"
+--- testing: 'abc' << '-44' ---
+string(2) "30"
+--- testing: 'abc' << '1.2' ---
+string(2) "30"
+--- testing: 'abc' << '-7.7' ---
+string(2) "30"
+--- testing: 'abc' << 'abc' ---
+string(2) "30"
+--- testing: 'abc' << '123abc' ---
+string(2) "30"
+--- testing: 'abc' << '123e5' ---
+string(2) "30"
+--- testing: 'abc' << '123e5xyz' ---
+string(2) "30"
+--- testing: 'abc' << ' 123abc' ---
+string(2) "30"
+--- testing: 'abc' << '123 abc' ---
+string(2) "30"
+--- testing: 'abc' << '123abc ' ---
+string(2) "30"
+--- testing: 'abc' << '3.4a' ---
+string(2) "30"
+--- testing: 'abc' << 'a5.9' ---
+string(2) "30"
+--- testing: '123abc' << '0' ---
+string(6) "313233"
+--- testing: '123abc' << '65' ---
+string(6) "323436"
+--- testing: '123abc' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123abc' << '1.2' ---
+string(6) "323436"
+--- testing: '123abc' << '-7.7' ---
+string(20) "2d313637373732313630"
+--- testing: '123abc' << 'abc' ---
+string(6) "313233"
+--- testing: '123abc' << '123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc' << '123e5' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc' << '123e5xyz' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc' << ' 123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc' << '123 abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc' << '123abc ' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc' << '3.4a' ---
+string(6) "393834"
+--- testing: '123abc' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123e5' << '0' ---
+string(6) "313233"
+--- testing: '123e5' << '65' ---
+string(6) "323436"
+--- testing: '123e5' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123e5' << '1.2' ---
+string(6) "323436"
+--- testing: '123e5' << '-7.7' ---
+string(20) "2d313637373732313630"
+--- testing: '123e5' << 'abc' ---
+string(6) "313233"
+--- testing: '123e5' << '123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5' << '123e5' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5' << '123e5xyz' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5' << ' 123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5' << '123 abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5' << '123abc ' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5' << '3.4a' ---
+string(6) "393834"
+--- testing: '123e5' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123e5xyz' << '0' ---
+string(6) "313233"
+--- testing: '123e5xyz' << '65' ---
+string(6) "323436"
+--- testing: '123e5xyz' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123e5xyz' << '1.2' ---
+string(6) "323436"
+--- testing: '123e5xyz' << '-7.7' ---
+string(20) "2d313637373732313630"
+--- testing: '123e5xyz' << 'abc' ---
+string(6) "313233"
+--- testing: '123e5xyz' << '123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5xyz' << '123e5' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5xyz' << '123e5xyz' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5xyz' << ' 123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5xyz' << '123 abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5xyz' << '123abc ' ---
+string(20) "2d363731303838363430"
+--- testing: '123e5xyz' << '3.4a' ---
+string(6) "393834"
+--- testing: '123e5xyz' << 'a5.9' ---
+string(6) "313233"
+--- testing: ' 123abc' << '0' ---
+string(6) "313233"
+--- testing: ' 123abc' << '65' ---
+string(6) "323436"
+--- testing: ' 123abc' << '-44' ---
+string(18) "313238393734383438"
+--- testing: ' 123abc' << '1.2' ---
+string(6) "323436"
+--- testing: ' 123abc' << '-7.7' ---
+string(20) "2d313637373732313630"
+--- testing: ' 123abc' << 'abc' ---
+string(6) "313233"
+--- testing: ' 123abc' << '123abc' ---
+string(20) "2d363731303838363430"
+--- testing: ' 123abc' << '123e5' ---
+string(20) "2d363731303838363430"
+--- testing: ' 123abc' << '123e5xyz' ---
+string(20) "2d363731303838363430"
+--- testing: ' 123abc' << ' 123abc' ---
+string(20) "2d363731303838363430"
+--- testing: ' 123abc' << '123 abc' ---
+string(20) "2d363731303838363430"
+--- testing: ' 123abc' << '123abc ' ---
+string(20) "2d363731303838363430"
+--- testing: ' 123abc' << '3.4a' ---
+string(6) "393834"
+--- testing: ' 123abc' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123 abc' << '0' ---
+string(6) "313233"
+--- testing: '123 abc' << '65' ---
+string(6) "323436"
+--- testing: '123 abc' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123 abc' << '1.2' ---
+string(6) "323436"
+--- testing: '123 abc' << '-7.7' ---
+string(20) "2d313637373732313630"
+--- testing: '123 abc' << 'abc' ---
+string(6) "313233"
+--- testing: '123 abc' << '123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123 abc' << '123e5' ---
+string(20) "2d363731303838363430"
+--- testing: '123 abc' << '123e5xyz' ---
+string(20) "2d363731303838363430"
+--- testing: '123 abc' << ' 123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123 abc' << '123 abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123 abc' << '123abc ' ---
+string(20) "2d363731303838363430"
+--- testing: '123 abc' << '3.4a' ---
+string(6) "393834"
+--- testing: '123 abc' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123abc ' << '0' ---
+string(6) "313233"
+--- testing: '123abc ' << '65' ---
+string(6) "323436"
+--- testing: '123abc ' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123abc ' << '1.2' ---
+string(6) "323436"
+--- testing: '123abc ' << '-7.7' ---
+string(20) "2d313637373732313630"
+--- testing: '123abc ' << 'abc' ---
+string(6) "313233"
+--- testing: '123abc ' << '123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc ' << '123e5' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc ' << '123e5xyz' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc ' << ' 123abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc ' << '123 abc' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc ' << '123abc ' ---
+string(20) "2d363731303838363430"
+--- testing: '123abc ' << '3.4a' ---
+string(6) "393834"
+--- testing: '123abc ' << 'a5.9' ---
+string(6) "313233"
+--- testing: '3.4a' << '0' ---
+string(2) "33"
+--- testing: '3.4a' << '65' ---
+string(2) "36"
+--- testing: '3.4a' << '-44' ---
+string(14) "33313435373238"
+--- testing: '3.4a' << '1.2' ---
+string(2) "36"
+--- testing: '3.4a' << '-7.7' ---
+string(18) "313030363633323936"
+--- testing: '3.4a' << 'abc' ---
+string(2) "33"
+--- testing: '3.4a' << '123abc' ---
+string(18) "343032363533313834"
+--- testing: '3.4a' << '123e5' ---
+string(18) "343032363533313834"
+--- testing: '3.4a' << '123e5xyz' ---
+string(18) "343032363533313834"
+--- testing: '3.4a' << ' 123abc' ---
+string(18) "343032363533313834"
+--- testing: '3.4a' << '123 abc' ---
+string(18) "343032363533313834"
+--- testing: '3.4a' << '123abc ' ---
+string(18) "343032363533313834"
+--- testing: '3.4a' << '3.4a' ---
+string(4) "3234"
+--- testing: '3.4a' << 'a5.9' ---
+string(2) "33"
+--- testing: 'a5.9' << '0' ---
+string(2) "30"
+--- testing: 'a5.9' << '65' ---
+string(2) "30"
+--- testing: 'a5.9' << '-44' ---
+string(2) "30"
+--- testing: 'a5.9' << '1.2' ---
+string(2) "30"
+--- testing: 'a5.9' << '-7.7' ---
+string(2) "30"
+--- testing: 'a5.9' << 'abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123e5' ---
+string(2) "30"
+--- testing: 'a5.9' << '123e5xyz' ---
+string(2) "30"
+--- testing: 'a5.9' << ' 123abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123 abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123abc ' ---
+string(2) "30"
+--- testing: 'a5.9' << '3.4a' ---
+string(2) "30"
+--- testing: 'a5.9' << 'a5.9' ---
+string(2) "30"
+===DONE===
+
diff --git a/tests/lang/operators/bitwiseShiftLeft_variationStr_64bit.phpt b/tests/lang/operators/bitwiseShiftLeft_variationStr_64bit.phpt
new file mode 100644
index 0000000..0b697c8
--- /dev/null
+++ b/tests/lang/operators/bitwiseShiftLeft_variationStr_64bit.phpt
@@ -0,0 +1,420 @@
+--TEST--
+Test << operator : various numbers as strings
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' << '$otherVal' ---\n";   
+      var_dump(bin2hex($strVal<<$otherVal));
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' << '0' ---
+string(2) "30"
+--- testing: '0' << '65' ---
+string(2) "30"
+--- testing: '0' << '-44' ---
+string(2) "30"
+--- testing: '0' << '1.2' ---
+string(2) "30"
+--- testing: '0' << '-7.7' ---
+string(2) "30"
+--- testing: '0' << 'abc' ---
+string(2) "30"
+--- testing: '0' << '123abc' ---
+string(2) "30"
+--- testing: '0' << '123e5' ---
+string(2) "30"
+--- testing: '0' << '123e5xyz' ---
+string(2) "30"
+--- testing: '0' << ' 123abc' ---
+string(2) "30"
+--- testing: '0' << '123 abc' ---
+string(2) "30"
+--- testing: '0' << '123abc ' ---
+string(2) "30"
+--- testing: '0' << '3.4a' ---
+string(2) "30"
+--- testing: '0' << 'a5.9' ---
+string(2) "30"
+--- testing: '65' << '0' ---
+string(4) "3635"
+--- testing: '65' << '65' ---
+string(6) "313330"
+--- testing: '65' << '-44' ---
+string(16) "3638313537343430"
+--- testing: '65' << '1.2' ---
+string(6) "313330"
+--- testing: '65' << '-7.7' ---
+string(40) "2d39303739323536383438373738393139393336"
+--- testing: '65' << 'abc' ---
+string(4) "3635"
+--- testing: '65' << '123abc' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '65' << '123e5' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '65' << '123e5xyz' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '65' << ' 123abc' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '65' << '123 abc' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '65' << '123abc ' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '65' << '3.4a' ---
+string(6) "353230"
+--- testing: '65' << 'a5.9' ---
+string(4) "3635"
+--- testing: '-44' << '0' ---
+string(6) "2d3434"
+--- testing: '-44' << '65' ---
+string(6) "2d3838"
+--- testing: '-44' << '-44' ---
+string(18) "2d3436313337333434"
+--- testing: '-44' << '1.2' ---
+string(6) "2d3838"
+--- testing: '-44' << '-7.7' ---
+string(40) "2d36333431303638323735333337363538333638"
+--- testing: '-44' << 'abc' ---
+string(6) "2d3434"
+--- testing: '-44' << '123abc' ---
+string(40) "2d36393137353239303237363431303831383536"
+--- testing: '-44' << '123e5' ---
+string(40) "2d36393137353239303237363431303831383536"
+--- testing: '-44' << '123e5xyz' ---
+string(40) "2d36393137353239303237363431303831383536"
+--- testing: '-44' << ' 123abc' ---
+string(40) "2d36393137353239303237363431303831383536"
+--- testing: '-44' << '123 abc' ---
+string(40) "2d36393137353239303237363431303831383536"
+--- testing: '-44' << '123abc ' ---
+string(40) "2d36393137353239303237363431303831383536"
+--- testing: '-44' << '3.4a' ---
+string(8) "2d333532"
+--- testing: '-44' << 'a5.9' ---
+string(6) "2d3434"
+--- testing: '1.2' << '0' ---
+string(2) "31"
+--- testing: '1.2' << '65' ---
+string(2) "32"
+--- testing: '1.2' << '-44' ---
+string(14) "31303438353736"
+--- testing: '1.2' << '1.2' ---
+string(2) "32"
+--- testing: '1.2' << '-7.7' ---
+string(36) "313434313135313838303735383535383732"
+--- testing: '1.2' << 'abc' ---
+string(2) "31"
+--- testing: '1.2' << '123abc' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '1.2' << '123e5' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '1.2' << '123e5xyz' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '1.2' << ' 123abc' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '1.2' << '123 abc' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '1.2' << '123abc ' ---
+string(36) "353736343630373532333033343233343838"
+--- testing: '1.2' << '3.4a' ---
+string(2) "38"
+--- testing: '1.2' << 'a5.9' ---
+string(2) "31"
+--- testing: '-7.7' << '0' ---
+string(4) "2d37"
+--- testing: '-7.7' << '65' ---
+string(6) "2d3134"
+--- testing: '-7.7' << '-44' ---
+string(16) "2d37333430303332"
+--- testing: '-7.7' << '1.2' ---
+string(6) "2d3134"
+--- testing: '-7.7' << '-7.7' ---
+string(40) "2d31303038383036333136353330393931313034"
+--- testing: '-7.7' << 'abc' ---
+string(4) "2d37"
+--- testing: '-7.7' << '123abc' ---
+string(40) "2d34303335323235323636313233393634343136"
+--- testing: '-7.7' << '123e5' ---
+string(40) "2d34303335323235323636313233393634343136"
+--- testing: '-7.7' << '123e5xyz' ---
+string(40) "2d34303335323235323636313233393634343136"
+--- testing: '-7.7' << ' 123abc' ---
+string(40) "2d34303335323235323636313233393634343136"
+--- testing: '-7.7' << '123 abc' ---
+string(40) "2d34303335323235323636313233393634343136"
+--- testing: '-7.7' << '123abc ' ---
+string(40) "2d34303335323235323636313233393634343136"
+--- testing: '-7.7' << '3.4a' ---
+string(6) "2d3536"
+--- testing: '-7.7' << 'a5.9' ---
+string(4) "2d37"
+--- testing: 'abc' << '0' ---
+string(2) "30"
+--- testing: 'abc' << '65' ---
+string(2) "30"
+--- testing: 'abc' << '-44' ---
+string(2) "30"
+--- testing: 'abc' << '1.2' ---
+string(2) "30"
+--- testing: 'abc' << '-7.7' ---
+string(2) "30"
+--- testing: 'abc' << 'abc' ---
+string(2) "30"
+--- testing: 'abc' << '123abc' ---
+string(2) "30"
+--- testing: 'abc' << '123e5' ---
+string(2) "30"
+--- testing: 'abc' << '123e5xyz' ---
+string(2) "30"
+--- testing: 'abc' << ' 123abc' ---
+string(2) "30"
+--- testing: 'abc' << '123 abc' ---
+string(2) "30"
+--- testing: 'abc' << '123abc ' ---
+string(2) "30"
+--- testing: 'abc' << '3.4a' ---
+string(2) "30"
+--- testing: 'abc' << 'a5.9' ---
+string(2) "30"
+--- testing: '123abc' << '0' ---
+string(6) "313233"
+--- testing: '123abc' << '65' ---
+string(6) "323436"
+--- testing: '123abc' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123abc' << '1.2' ---
+string(6) "323436"
+--- testing: '123abc' << '-7.7' ---
+string(38) "2d373230353735393430333739323739333630"
+--- testing: '123abc' << 'abc' ---
+string(6) "313233"
+--- testing: '123abc' << '123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc' << '123e5' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc' << '123e5xyz' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc' << ' 123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc' << '123 abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc' << '123abc ' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc' << '3.4a' ---
+string(6) "393834"
+--- testing: '123abc' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123e5' << '0' ---
+string(6) "313233"
+--- testing: '123e5' << '65' ---
+string(6) "323436"
+--- testing: '123e5' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123e5' << '1.2' ---
+string(6) "323436"
+--- testing: '123e5' << '-7.7' ---
+string(38) "2d373230353735393430333739323739333630"
+--- testing: '123e5' << 'abc' ---
+string(6) "313233"
+--- testing: '123e5' << '123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5' << '123e5' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5' << '123e5xyz' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5' << ' 123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5' << '123 abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5' << '123abc ' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5' << '3.4a' ---
+string(6) "393834"
+--- testing: '123e5' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123e5xyz' << '0' ---
+string(6) "313233"
+--- testing: '123e5xyz' << '65' ---
+string(6) "323436"
+--- testing: '123e5xyz' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123e5xyz' << '1.2' ---
+string(6) "323436"
+--- testing: '123e5xyz' << '-7.7' ---
+string(38) "2d373230353735393430333739323739333630"
+--- testing: '123e5xyz' << 'abc' ---
+string(6) "313233"
+--- testing: '123e5xyz' << '123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5xyz' << '123e5' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5xyz' << '123e5xyz' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5xyz' << ' 123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5xyz' << '123 abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5xyz' << '123abc ' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123e5xyz' << '3.4a' ---
+string(6) "393834"
+--- testing: '123e5xyz' << 'a5.9' ---
+string(6) "313233"
+--- testing: ' 123abc' << '0' ---
+string(6) "313233"
+--- testing: ' 123abc' << '65' ---
+string(6) "323436"
+--- testing: ' 123abc' << '-44' ---
+string(18) "313238393734383438"
+--- testing: ' 123abc' << '1.2' ---
+string(6) "323436"
+--- testing: ' 123abc' << '-7.7' ---
+string(38) "2d373230353735393430333739323739333630"
+--- testing: ' 123abc' << 'abc' ---
+string(6) "313233"
+--- testing: ' 123abc' << '123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: ' 123abc' << '123e5' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: ' 123abc' << '123e5xyz' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: ' 123abc' << ' 123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: ' 123abc' << '123 abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: ' 123abc' << '123abc ' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: ' 123abc' << '3.4a' ---
+string(6) "393834"
+--- testing: ' 123abc' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123 abc' << '0' ---
+string(6) "313233"
+--- testing: '123 abc' << '65' ---
+string(6) "323436"
+--- testing: '123 abc' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123 abc' << '1.2' ---
+string(6) "323436"
+--- testing: '123 abc' << '-7.7' ---
+string(38) "2d373230353735393430333739323739333630"
+--- testing: '123 abc' << 'abc' ---
+string(6) "313233"
+--- testing: '123 abc' << '123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123 abc' << '123e5' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123 abc' << '123e5xyz' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123 abc' << ' 123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123 abc' << '123 abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123 abc' << '123abc ' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123 abc' << '3.4a' ---
+string(6) "393834"
+--- testing: '123 abc' << 'a5.9' ---
+string(6) "313233"
+--- testing: '123abc ' << '0' ---
+string(6) "313233"
+--- testing: '123abc ' << '65' ---
+string(6) "323436"
+--- testing: '123abc ' << '-44' ---
+string(18) "313238393734383438"
+--- testing: '123abc ' << '1.2' ---
+string(6) "323436"
+--- testing: '123abc ' << '-7.7' ---
+string(38) "2d373230353735393430333739323739333630"
+--- testing: '123abc ' << 'abc' ---
+string(6) "313233"
+--- testing: '123abc ' << '123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc ' << '123e5' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc ' << '123e5xyz' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc ' << ' 123abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc ' << '123 abc' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc ' << '123abc ' ---
+string(40) "2d32383832333033373631353137313137343430"
+--- testing: '123abc ' << '3.4a' ---
+string(6) "393834"
+--- testing: '123abc ' << 'a5.9' ---
+string(6) "313233"
+--- testing: '3.4a' << '0' ---
+string(2) "33"
+--- testing: '3.4a' << '65' ---
+string(2) "36"
+--- testing: '3.4a' << '-44' ---
+string(14) "33313435373238"
+--- testing: '3.4a' << '1.2' ---
+string(2) "36"
+--- testing: '3.4a' << '-7.7' ---
+string(36) "343332333435353634323237353637363136"
+--- testing: '3.4a' << 'abc' ---
+string(2) "33"
+--- testing: '3.4a' << '123abc' ---
+string(38) "31373239333832323536393130323730343634"
+--- testing: '3.4a' << '123e5' ---
+string(38) "31373239333832323536393130323730343634"
+--- testing: '3.4a' << '123e5xyz' ---
+string(38) "31373239333832323536393130323730343634"
+--- testing: '3.4a' << ' 123abc' ---
+string(38) "31373239333832323536393130323730343634"
+--- testing: '3.4a' << '123 abc' ---
+string(38) "31373239333832323536393130323730343634"
+--- testing: '3.4a' << '123abc ' ---
+string(38) "31373239333832323536393130323730343634"
+--- testing: '3.4a' << '3.4a' ---
+string(4) "3234"
+--- testing: '3.4a' << 'a5.9' ---
+string(2) "33"
+--- testing: 'a5.9' << '0' ---
+string(2) "30"
+--- testing: 'a5.9' << '65' ---
+string(2) "30"
+--- testing: 'a5.9' << '-44' ---
+string(2) "30"
+--- testing: 'a5.9' << '1.2' ---
+string(2) "30"
+--- testing: 'a5.9' << '-7.7' ---
+string(2) "30"
+--- testing: 'a5.9' << 'abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123e5' ---
+string(2) "30"
+--- testing: 'a5.9' << '123e5xyz' ---
+string(2) "30"
+--- testing: 'a5.9' << ' 123abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123 abc' ---
+string(2) "30"
+--- testing: 'a5.9' << '123abc ' ---
+string(2) "30"
+--- testing: 'a5.9' << '3.4a' ---
+string(2) "30"
+--- testing: 'a5.9' << 'a5.9' ---
+string(2) "30"
+===DONE===
diff --git a/tests/lang/operators/bitwiseShiftRight_basiclong_64bit.phpt b/tests/lang/operators/bitwiseShiftRight_basiclong_64bit.phpt
new file mode 100644
index 0000000..1029d19
--- /dev/null
+++ b/tests/lang/operators/bitwiseShiftRight_basiclong_64bit.phpt
@@ -0,0 +1,583 @@
+--TEST--
+Test >> operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal >> $otherVal ---\n";   
+      var_dump($longVal>>$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal >> $longVal ---\n";   
+      var_dump($otherVal>>$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 >> 0 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> 1 ---
+int(4611686018427387903)
+--- testing: 9223372036854775807 >> -1 ---
+int(0)
+--- testing: 9223372036854775807 >> 7 ---
+int(72057594037927935)
+--- testing: 9223372036854775807 >> 9 ---
+int(18014398509481983)
+--- testing: 9223372036854775807 >> 65 ---
+int(4611686018427387903)
+--- testing: 9223372036854775807 >> -44 ---
+int(8796093022207)
+--- testing: 9223372036854775807 >> 2147483647 ---
+int(0)
+--- testing: 9223372036854775807 >> 9223372036854775807 ---
+int(0)
+--- testing: -9223372036854775808 >> 0 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 >> 1 ---
+int(-4611686018427387904)
+--- testing: -9223372036854775808 >> -1 ---
+int(-1)
+--- testing: -9223372036854775808 >> 7 ---
+int(-72057594037927936)
+--- testing: -9223372036854775808 >> 9 ---
+int(-18014398509481984)
+--- testing: -9223372036854775808 >> 65 ---
+int(-4611686018427387904)
+--- testing: -9223372036854775808 >> -44 ---
+int(-8796093022208)
+--- testing: -9223372036854775808 >> 2147483647 ---
+int(-1)
+--- testing: -9223372036854775808 >> 9223372036854775807 ---
+int(-1)
+--- testing: 2147483647 >> 0 ---
+int(2147483647)
+--- testing: 2147483647 >> 1 ---
+int(1073741823)
+--- testing: 2147483647 >> -1 ---
+int(0)
+--- testing: 2147483647 >> 7 ---
+int(16777215)
+--- testing: 2147483647 >> 9 ---
+int(4194303)
+--- testing: 2147483647 >> 65 ---
+int(1073741823)
+--- testing: 2147483647 >> -44 ---
+int(2047)
+--- testing: 2147483647 >> 2147483647 ---
+int(0)
+--- testing: 2147483647 >> 9223372036854775807 ---
+int(0)
+--- testing: -2147483648 >> 0 ---
+int(-2147483648)
+--- testing: -2147483648 >> 1 ---
+int(-1073741824)
+--- testing: -2147483648 >> -1 ---
+int(-1)
+--- testing: -2147483648 >> 7 ---
+int(-16777216)
+--- testing: -2147483648 >> 9 ---
+int(-4194304)
+--- testing: -2147483648 >> 65 ---
+int(-1073741824)
+--- testing: -2147483648 >> -44 ---
+int(-2048)
+--- testing: -2147483648 >> 2147483647 ---
+int(-1)
+--- testing: -2147483648 >> 9223372036854775807 ---
+int(-1)
+--- testing: 9223372034707292160 >> 0 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 >> 1 ---
+int(4611686017353646080)
+--- testing: 9223372034707292160 >> -1 ---
+int(0)
+--- testing: 9223372034707292160 >> 7 ---
+int(72057594021150720)
+--- testing: 9223372034707292160 >> 9 ---
+int(18014398505287680)
+--- testing: 9223372034707292160 >> 65 ---
+int(4611686017353646080)
+--- testing: 9223372034707292160 >> -44 ---
+int(8796093020160)
+--- testing: 9223372034707292160 >> 2147483647 ---
+int(0)
+--- testing: 9223372034707292160 >> 9223372036854775807 ---
+int(0)
+--- testing: -9223372034707292160 >> 0 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 >> 1 ---
+int(-4611686017353646080)
+--- testing: -9223372034707292160 >> -1 ---
+int(-1)
+--- testing: -9223372034707292160 >> 7 ---
+int(-72057594021150720)
+--- testing: -9223372034707292160 >> 9 ---
+int(-18014398505287680)
+--- testing: -9223372034707292160 >> 65 ---
+int(-4611686017353646080)
+--- testing: -9223372034707292160 >> -44 ---
+int(-8796093020160)
+--- testing: -9223372034707292160 >> 2147483647 ---
+int(-1)
+--- testing: -9223372034707292160 >> 9223372036854775807 ---
+int(-1)
+--- testing: 2147483648 >> 0 ---
+int(2147483648)
+--- testing: 2147483648 >> 1 ---
+int(1073741824)
+--- testing: 2147483648 >> -1 ---
+int(0)
+--- testing: 2147483648 >> 7 ---
+int(16777216)
+--- testing: 2147483648 >> 9 ---
+int(4194304)
+--- testing: 2147483648 >> 65 ---
+int(1073741824)
+--- testing: 2147483648 >> -44 ---
+int(2048)
+--- testing: 2147483648 >> 2147483647 ---
+int(0)
+--- testing: 2147483648 >> 9223372036854775807 ---
+int(0)
+--- testing: -2147483649 >> 0 ---
+int(-2147483649)
+--- testing: -2147483649 >> 1 ---
+int(-1073741825)
+--- testing: -2147483649 >> -1 ---
+int(-1)
+--- testing: -2147483649 >> 7 ---
+int(-16777217)
+--- testing: -2147483649 >> 9 ---
+int(-4194305)
+--- testing: -2147483649 >> 65 ---
+int(-1073741825)
+--- testing: -2147483649 >> -44 ---
+int(-2049)
+--- testing: -2147483649 >> 2147483647 ---
+int(-1)
+--- testing: -2147483649 >> 9223372036854775807 ---
+int(-1)
+--- testing: 4294967294 >> 0 ---
+int(4294967294)
+--- testing: 4294967294 >> 1 ---
+int(2147483647)
+--- testing: 4294967294 >> -1 ---
+int(0)
+--- testing: 4294967294 >> 7 ---
+int(33554431)
+--- testing: 4294967294 >> 9 ---
+int(8388607)
+--- testing: 4294967294 >> 65 ---
+int(2147483647)
+--- testing: 4294967294 >> -44 ---
+int(4095)
+--- testing: 4294967294 >> 2147483647 ---
+int(0)
+--- testing: 4294967294 >> 9223372036854775807 ---
+int(0)
+--- testing: 4294967295 >> 0 ---
+int(4294967295)
+--- testing: 4294967295 >> 1 ---
+int(2147483647)
+--- testing: 4294967295 >> -1 ---
+int(0)
+--- testing: 4294967295 >> 7 ---
+int(33554431)
+--- testing: 4294967295 >> 9 ---
+int(8388607)
+--- testing: 4294967295 >> 65 ---
+int(2147483647)
+--- testing: 4294967295 >> -44 ---
+int(4095)
+--- testing: 4294967295 >> 2147483647 ---
+int(0)
+--- testing: 4294967295 >> 9223372036854775807 ---
+int(0)
+--- testing: 4294967293 >> 0 ---
+int(4294967293)
+--- testing: 4294967293 >> 1 ---
+int(2147483646)
+--- testing: 4294967293 >> -1 ---
+int(0)
+--- testing: 4294967293 >> 7 ---
+int(33554431)
+--- testing: 4294967293 >> 9 ---
+int(8388607)
+--- testing: 4294967293 >> 65 ---
+int(2147483646)
+--- testing: 4294967293 >> -44 ---
+int(4095)
+--- testing: 4294967293 >> 2147483647 ---
+int(0)
+--- testing: 4294967293 >> 9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775806 >> 0 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 >> 1 ---
+int(4611686018427387903)
+--- testing: 9223372036854775806 >> -1 ---
+int(0)
+--- testing: 9223372036854775806 >> 7 ---
+int(72057594037927935)
+--- testing: 9223372036854775806 >> 9 ---
+int(18014398509481983)
+--- testing: 9223372036854775806 >> 65 ---
+int(4611686018427387903)
+--- testing: 9223372036854775806 >> -44 ---
+int(8796093022207)
+--- testing: 9223372036854775806 >> 2147483647 ---
+int(0)
+--- testing: 9223372036854775806 >> 9223372036854775807 ---
+int(0)
+--- testing: 9.2233720368548E+18 >> 0 ---
+int(-9223372036854775808)
+--- testing: 9.2233720368548E+18 >> 1 ---
+int(-4611686018427387904)
+--- testing: 9.2233720368548E+18 >> -1 ---
+int(-1)
+--- testing: 9.2233720368548E+18 >> 7 ---
+int(-72057594037927936)
+--- testing: 9.2233720368548E+18 >> 9 ---
+int(-18014398509481984)
+--- testing: 9.2233720368548E+18 >> 65 ---
+int(-4611686018427387904)
+--- testing: 9.2233720368548E+18 >> -44 ---
+int(-8796093022208)
+--- testing: 9.2233720368548E+18 >> 2147483647 ---
+int(-1)
+--- testing: 9.2233720368548E+18 >> 9223372036854775807 ---
+int(-1)
+--- testing: -9223372036854775807 >> 0 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 >> 1 ---
+int(-4611686018427387904)
+--- testing: -9223372036854775807 >> -1 ---
+int(-1)
+--- testing: -9223372036854775807 >> 7 ---
+int(-72057594037927936)
+--- testing: -9223372036854775807 >> 9 ---
+int(-18014398509481984)
+--- testing: -9223372036854775807 >> 65 ---
+int(-4611686018427387904)
+--- testing: -9223372036854775807 >> -44 ---
+int(-8796093022208)
+--- testing: -9223372036854775807 >> 2147483647 ---
+int(-1)
+--- testing: -9223372036854775807 >> 9223372036854775807 ---
+int(-1)
+--- testing: -9.2233720368548E+18 >> 0 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 >> 1 ---
+int(-4611686018427387904)
+--- testing: -9.2233720368548E+18 >> -1 ---
+int(-1)
+--- testing: -9.2233720368548E+18 >> 7 ---
+int(-72057594037927936)
+--- testing: -9.2233720368548E+18 >> 9 ---
+int(-18014398509481984)
+--- testing: -9.2233720368548E+18 >> 65 ---
+int(-4611686018427387904)
+--- testing: -9.2233720368548E+18 >> -44 ---
+int(-8796093022208)
+--- testing: -9.2233720368548E+18 >> 2147483647 ---
+int(-1)
+--- testing: -9.2233720368548E+18 >> 9223372036854775807 ---
+int(-1)
+--- testing: 0 >> 9223372036854775807 ---
+int(0)
+--- testing: 0 >> -9223372036854775808 ---
+int(0)
+--- testing: 0 >> 2147483647 ---
+int(0)
+--- testing: 0 >> -2147483648 ---
+int(0)
+--- testing: 0 >> 9223372034707292160 ---
+int(0)
+--- testing: 0 >> -9223372034707292160 ---
+int(0)
+--- testing: 0 >> 2147483648 ---
+int(0)
+--- testing: 0 >> -2147483649 ---
+int(0)
+--- testing: 0 >> 4294967294 ---
+int(0)
+--- testing: 0 >> 4294967295 ---
+int(0)
+--- testing: 0 >> 4294967293 ---
+int(0)
+--- testing: 0 >> 9223372036854775806 ---
+int(0)
+--- testing: 0 >> 9.2233720368548E+18 ---
+int(0)
+--- testing: 0 >> -9223372036854775807 ---
+int(0)
+--- testing: 0 >> -9.2233720368548E+18 ---
+int(0)
+--- testing: 1 >> 9223372036854775807 ---
+int(0)
+--- testing: 1 >> -9223372036854775808 ---
+int(1)
+--- testing: 1 >> 2147483647 ---
+int(0)
+--- testing: 1 >> -2147483648 ---
+int(1)
+--- testing: 1 >> 9223372034707292160 ---
+int(1)
+--- testing: 1 >> -9223372034707292160 ---
+int(1)
+--- testing: 1 >> 2147483648 ---
+int(1)
+--- testing: 1 >> -2147483649 ---
+int(0)
+--- testing: 1 >> 4294967294 ---
+int(0)
+--- testing: 1 >> 4294967295 ---
+int(0)
+--- testing: 1 >> 4294967293 ---
+int(0)
+--- testing: 1 >> 9223372036854775806 ---
+int(0)
+--- testing: 1 >> 9.2233720368548E+18 ---
+int(1)
+--- testing: 1 >> -9223372036854775807 ---
+int(0)
+--- testing: 1 >> -9.2233720368548E+18 ---
+int(1)
+--- testing: -1 >> 9223372036854775807 ---
+int(-1)
+--- testing: -1 >> -9223372036854775808 ---
+int(-1)
+--- testing: -1 >> 2147483647 ---
+int(-1)
+--- testing: -1 >> -2147483648 ---
+int(-1)
+--- testing: -1 >> 9223372034707292160 ---
+int(-1)
+--- testing: -1 >> -9223372034707292160 ---
+int(-1)
+--- testing: -1 >> 2147483648 ---
+int(-1)
+--- testing: -1 >> -2147483649 ---
+int(-1)
+--- testing: -1 >> 4294967294 ---
+int(-1)
+--- testing: -1 >> 4294967295 ---
+int(-1)
+--- testing: -1 >> 4294967293 ---
+int(-1)
+--- testing: -1 >> 9223372036854775806 ---
+int(-1)
+--- testing: -1 >> 9.2233720368548E+18 ---
+int(-1)
+--- testing: -1 >> -9223372036854775807 ---
+int(-1)
+--- testing: -1 >> -9.2233720368548E+18 ---
+int(-1)
+--- testing: 7 >> 9223372036854775807 ---
+int(0)
+--- testing: 7 >> -9223372036854775808 ---
+int(7)
+--- testing: 7 >> 2147483647 ---
+int(0)
+--- testing: 7 >> -2147483648 ---
+int(7)
+--- testing: 7 >> 9223372034707292160 ---
+int(7)
+--- testing: 7 >> -9223372034707292160 ---
+int(7)
+--- testing: 7 >> 2147483648 ---
+int(7)
+--- testing: 7 >> -2147483649 ---
+int(0)
+--- testing: 7 >> 4294967294 ---
+int(0)
+--- testing: 7 >> 4294967295 ---
+int(0)
+--- testing: 7 >> 4294967293 ---
+int(0)
+--- testing: 7 >> 9223372036854775806 ---
+int(0)
+--- testing: 7 >> 9.2233720368548E+18 ---
+int(7)
+--- testing: 7 >> -9223372036854775807 ---
+int(3)
+--- testing: 7 >> -9.2233720368548E+18 ---
+int(7)
+--- testing: 9 >> 9223372036854775807 ---
+int(0)
+--- testing: 9 >> -9223372036854775808 ---
+int(9)
+--- testing: 9 >> 2147483647 ---
+int(0)
+--- testing: 9 >> -2147483648 ---
+int(9)
+--- testing: 9 >> 9223372034707292160 ---
+int(9)
+--- testing: 9 >> -9223372034707292160 ---
+int(9)
+--- testing: 9 >> 2147483648 ---
+int(9)
+--- testing: 9 >> -2147483649 ---
+int(0)
+--- testing: 9 >> 4294967294 ---
+int(0)
+--- testing: 9 >> 4294967295 ---
+int(0)
+--- testing: 9 >> 4294967293 ---
+int(0)
+--- testing: 9 >> 9223372036854775806 ---
+int(0)
+--- testing: 9 >> 9.2233720368548E+18 ---
+int(9)
+--- testing: 9 >> -9223372036854775807 ---
+int(4)
+--- testing: 9 >> -9.2233720368548E+18 ---
+int(9)
+--- testing: 65 >> 9223372036854775807 ---
+int(0)
+--- testing: 65 >> -9223372036854775808 ---
+int(65)
+--- testing: 65 >> 2147483647 ---
+int(0)
+--- testing: 65 >> -2147483648 ---
+int(65)
+--- testing: 65 >> 9223372034707292160 ---
+int(65)
+--- testing: 65 >> -9223372034707292160 ---
+int(65)
+--- testing: 65 >> 2147483648 ---
+int(65)
+--- testing: 65 >> -2147483649 ---
+int(0)
+--- testing: 65 >> 4294967294 ---
+int(0)
+--- testing: 65 >> 4294967295 ---
+int(0)
+--- testing: 65 >> 4294967293 ---
+int(0)
+--- testing: 65 >> 9223372036854775806 ---
+int(0)
+--- testing: 65 >> 9.2233720368548E+18 ---
+int(65)
+--- testing: 65 >> -9223372036854775807 ---
+int(32)
+--- testing: 65 >> -9.2233720368548E+18 ---
+int(65)
+--- testing: -44 >> 9223372036854775807 ---
+int(-1)
+--- testing: -44 >> -9223372036854775808 ---
+int(-44)
+--- testing: -44 >> 2147483647 ---
+int(-1)
+--- testing: -44 >> -2147483648 ---
+int(-44)
+--- testing: -44 >> 9223372034707292160 ---
+int(-44)
+--- testing: -44 >> -9223372034707292160 ---
+int(-44)
+--- testing: -44 >> 2147483648 ---
+int(-44)
+--- testing: -44 >> -2147483649 ---
+int(-1)
+--- testing: -44 >> 4294967294 ---
+int(-1)
+--- testing: -44 >> 4294967295 ---
+int(-1)
+--- testing: -44 >> 4294967293 ---
+int(-1)
+--- testing: -44 >> 9223372036854775806 ---
+int(-1)
+--- testing: -44 >> 9.2233720368548E+18 ---
+int(-44)
+--- testing: -44 >> -9223372036854775807 ---
+int(-22)
+--- testing: -44 >> -9.2233720368548E+18 ---
+int(-44)
+--- testing: 2147483647 >> 9223372036854775807 ---
+int(0)
+--- testing: 2147483647 >> -9223372036854775808 ---
+int(2147483647)
+--- testing: 2147483647 >> 2147483647 ---
+int(0)
+--- testing: 2147483647 >> -2147483648 ---
+int(2147483647)
+--- testing: 2147483647 >> 9223372034707292160 ---
+int(2147483647)
+--- testing: 2147483647 >> -9223372034707292160 ---
+int(2147483647)
+--- testing: 2147483647 >> 2147483648 ---
+int(2147483647)
+--- testing: 2147483647 >> -2147483649 ---
+int(0)
+--- testing: 2147483647 >> 4294967294 ---
+int(0)
+--- testing: 2147483647 >> 4294967295 ---
+int(0)
+--- testing: 2147483647 >> 4294967293 ---
+int(0)
+--- testing: 2147483647 >> 9223372036854775806 ---
+int(0)
+--- testing: 2147483647 >> 9.2233720368548E+18 ---
+int(2147483647)
+--- testing: 2147483647 >> -9223372036854775807 ---
+int(1073741823)
+--- testing: 2147483647 >> -9.2233720368548E+18 ---
+int(2147483647)
+--- testing: 9223372036854775807 >> 9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775807 >> -9223372036854775808 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> 2147483647 ---
+int(0)
+--- testing: 9223372036854775807 >> -2147483648 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> 9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> -9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> 2147483648 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> -2147483649 ---
+int(0)
+--- testing: 9223372036854775807 >> 4294967294 ---
+int(1)
+--- testing: 9223372036854775807 >> 4294967295 ---
+int(0)
+--- testing: 9223372036854775807 >> 4294967293 ---
+int(3)
+--- testing: 9223372036854775807 >> 9223372036854775806 ---
+int(1)
+--- testing: 9223372036854775807 >> 9.2233720368548E+18 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 >> -9223372036854775807 ---
+int(4611686018427387903)
+--- testing: 9223372036854775807 >> -9.2233720368548E+18 ---
+int(9223372036854775807)
+===DONE===
+	
\ No newline at end of file
diff --git a/tests/lang/operators/bitwiseShiftRight_variationStr.phpt b/tests/lang/operators/bitwiseShiftRight_variationStr.phpt
new file mode 100644
index 0000000..9518d42
--- /dev/null
+++ b/tests/lang/operators/bitwiseShiftRight_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test >> operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' >> '$otherVal' ---\n";   
+      var_dump(bin2hex($strVal>>$otherVal));
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' >> '0' ---
+string(2) "30"
+--- testing: '0' >> '65' ---
+string(2) "30"
+--- testing: '0' >> '-44' ---
+string(2) "30"
+--- testing: '0' >> '1.2' ---
+string(2) "30"
+--- testing: '0' >> '-7.7' ---
+string(2) "30"
+--- testing: '0' >> 'abc' ---
+string(2) "30"
+--- testing: '0' >> '123abc' ---
+string(2) "30"
+--- testing: '0' >> '123e5' ---
+string(2) "30"
+--- testing: '0' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '0' >> ' 123abc' ---
+string(2) "30"
+--- testing: '0' >> '123 abc' ---
+string(2) "30"
+--- testing: '0' >> '123abc ' ---
+string(2) "30"
+--- testing: '0' >> '3.4a' ---
+string(2) "30"
+--- testing: '0' >> 'a5.9' ---
+string(2) "30"
+--- testing: '65' >> '0' ---
+string(4) "3635"
+--- testing: '65' >> '65' ---
+string(4) "3332"
+--- testing: '65' >> '-44' ---
+string(2) "30"
+--- testing: '65' >> '1.2' ---
+string(4) "3332"
+--- testing: '65' >> '-7.7' ---
+string(2) "30"
+--- testing: '65' >> 'abc' ---
+string(4) "3635"
+--- testing: '65' >> '123abc' ---
+string(2) "30"
+--- testing: '65' >> '123e5' ---
+string(2) "30"
+--- testing: '65' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '65' >> ' 123abc' ---
+string(2) "30"
+--- testing: '65' >> '123 abc' ---
+string(2) "30"
+--- testing: '65' >> '123abc ' ---
+string(2) "30"
+--- testing: '65' >> '3.4a' ---
+string(2) "38"
+--- testing: '65' >> 'a5.9' ---
+string(4) "3635"
+--- testing: '-44' >> '0' ---
+string(6) "2d3434"
+--- testing: '-44' >> '65' ---
+string(6) "2d3232"
+--- testing: '-44' >> '-44' ---
+string(4) "2d31"
+--- testing: '-44' >> '1.2' ---
+string(6) "2d3232"
+--- testing: '-44' >> '-7.7' ---
+string(4) "2d31"
+--- testing: '-44' >> 'abc' ---
+string(6) "2d3434"
+--- testing: '-44' >> '123abc' ---
+string(4) "2d31"
+--- testing: '-44' >> '123e5' ---
+string(4) "2d31"
+--- testing: '-44' >> '123e5xyz' ---
+string(4) "2d31"
+--- testing: '-44' >> ' 123abc' ---
+string(4) "2d31"
+--- testing: '-44' >> '123 abc' ---
+string(4) "2d31"
+--- testing: '-44' >> '123abc ' ---
+string(4) "2d31"
+--- testing: '-44' >> '3.4a' ---
+string(4) "2d36"
+--- testing: '-44' >> 'a5.9' ---
+string(6) "2d3434"
+--- testing: '1.2' >> '0' ---
+string(2) "31"
+--- testing: '1.2' >> '65' ---
+string(2) "30"
+--- testing: '1.2' >> '-44' ---
+string(2) "30"
+--- testing: '1.2' >> '1.2' ---
+string(2) "30"
+--- testing: '1.2' >> '-7.7' ---
+string(2) "30"
+--- testing: '1.2' >> 'abc' ---
+string(2) "31"
+--- testing: '1.2' >> '123abc' ---
+string(2) "30"
+--- testing: '1.2' >> '123e5' ---
+string(2) "30"
+--- testing: '1.2' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '1.2' >> ' 123abc' ---
+string(2) "30"
+--- testing: '1.2' >> '123 abc' ---
+string(2) "30"
+--- testing: '1.2' >> '123abc ' ---
+string(2) "30"
+--- testing: '1.2' >> '3.4a' ---
+string(2) "30"
+--- testing: '1.2' >> 'a5.9' ---
+string(2) "31"
+--- testing: '-7.7' >> '0' ---
+string(4) "2d37"
+--- testing: '-7.7' >> '65' ---
+string(4) "2d34"
+--- testing: '-7.7' >> '-44' ---
+string(4) "2d31"
+--- testing: '-7.7' >> '1.2' ---
+string(4) "2d34"
+--- testing: '-7.7' >> '-7.7' ---
+string(4) "2d31"
+--- testing: '-7.7' >> 'abc' ---
+string(4) "2d37"
+--- testing: '-7.7' >> '123abc' ---
+string(4) "2d31"
+--- testing: '-7.7' >> '123e5' ---
+string(4) "2d31"
+--- testing: '-7.7' >> '123e5xyz' ---
+string(4) "2d31"
+--- testing: '-7.7' >> ' 123abc' ---
+string(4) "2d31"
+--- testing: '-7.7' >> '123 abc' ---
+string(4) "2d31"
+--- testing: '-7.7' >> '123abc ' ---
+string(4) "2d31"
+--- testing: '-7.7' >> '3.4a' ---
+string(4) "2d31"
+--- testing: '-7.7' >> 'a5.9' ---
+string(4) "2d37"
+--- testing: 'abc' >> '0' ---
+string(2) "30"
+--- testing: 'abc' >> '65' ---
+string(2) "30"
+--- testing: 'abc' >> '-44' ---
+string(2) "30"
+--- testing: 'abc' >> '1.2' ---
+string(2) "30"
+--- testing: 'abc' >> '-7.7' ---
+string(2) "30"
+--- testing: 'abc' >> 'abc' ---
+string(2) "30"
+--- testing: 'abc' >> '123abc' ---
+string(2) "30"
+--- testing: 'abc' >> '123e5' ---
+string(2) "30"
+--- testing: 'abc' >> '123e5xyz' ---
+string(2) "30"
+--- testing: 'abc' >> ' 123abc' ---
+string(2) "30"
+--- testing: 'abc' >> '123 abc' ---
+string(2) "30"
+--- testing: 'abc' >> '123abc ' ---
+string(2) "30"
+--- testing: 'abc' >> '3.4a' ---
+string(2) "30"
+--- testing: 'abc' >> 'a5.9' ---
+string(2) "30"
+--- testing: '123abc' >> '0' ---
+string(6) "313233"
+--- testing: '123abc' >> '65' ---
+string(4) "3631"
+--- testing: '123abc' >> '-44' ---
+string(2) "30"
+--- testing: '123abc' >> '1.2' ---
+string(4) "3631"
+--- testing: '123abc' >> '-7.7' ---
+string(2) "30"
+--- testing: '123abc' >> 'abc' ---
+string(6) "313233"
+--- testing: '123abc' >> '123abc' ---
+string(2) "30"
+--- testing: '123abc' >> '123e5' ---
+string(2) "30"
+--- testing: '123abc' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '123abc' >> ' 123abc' ---
+string(2) "30"
+--- testing: '123abc' >> '123 abc' ---
+string(2) "30"
+--- testing: '123abc' >> '123abc ' ---
+string(2) "30"
+--- testing: '123abc' >> '3.4a' ---
+string(4) "3135"
+--- testing: '123abc' >> 'a5.9' ---
+string(6) "313233"
+--- testing: '123e5' >> '0' ---
+string(6) "313233"
+--- testing: '123e5' >> '65' ---
+string(4) "3631"
+--- testing: '123e5' >> '-44' ---
+string(2) "30"
+--- testing: '123e5' >> '1.2' ---
+string(4) "3631"
+--- testing: '123e5' >> '-7.7' ---
+string(2) "30"
+--- testing: '123e5' >> 'abc' ---
+string(6) "313233"
+--- testing: '123e5' >> '123abc' ---
+string(2) "30"
+--- testing: '123e5' >> '123e5' ---
+string(2) "30"
+--- testing: '123e5' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '123e5' >> ' 123abc' ---
+string(2) "30"
+--- testing: '123e5' >> '123 abc' ---
+string(2) "30"
+--- testing: '123e5' >> '123abc ' ---
+string(2) "30"
+--- testing: '123e5' >> '3.4a' ---
+string(4) "3135"
+--- testing: '123e5' >> 'a5.9' ---
+string(6) "313233"
+--- testing: '123e5xyz' >> '0' ---
+string(6) "313233"
+--- testing: '123e5xyz' >> '65' ---
+string(4) "3631"
+--- testing: '123e5xyz' >> '-44' ---
+string(2) "30"
+--- testing: '123e5xyz' >> '1.2' ---
+string(4) "3631"
+--- testing: '123e5xyz' >> '-7.7' ---
+string(2) "30"
+--- testing: '123e5xyz' >> 'abc' ---
+string(6) "313233"
+--- testing: '123e5xyz' >> '123abc' ---
+string(2) "30"
+--- testing: '123e5xyz' >> '123e5' ---
+string(2) "30"
+--- testing: '123e5xyz' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '123e5xyz' >> ' 123abc' ---
+string(2) "30"
+--- testing: '123e5xyz' >> '123 abc' ---
+string(2) "30"
+--- testing: '123e5xyz' >> '123abc ' ---
+string(2) "30"
+--- testing: '123e5xyz' >> '3.4a' ---
+string(4) "3135"
+--- testing: '123e5xyz' >> 'a5.9' ---
+string(6) "313233"
+--- testing: ' 123abc' >> '0' ---
+string(6) "313233"
+--- testing: ' 123abc' >> '65' ---
+string(4) "3631"
+--- testing: ' 123abc' >> '-44' ---
+string(2) "30"
+--- testing: ' 123abc' >> '1.2' ---
+string(4) "3631"
+--- testing: ' 123abc' >> '-7.7' ---
+string(2) "30"
+--- testing: ' 123abc' >> 'abc' ---
+string(6) "313233"
+--- testing: ' 123abc' >> '123abc' ---
+string(2) "30"
+--- testing: ' 123abc' >> '123e5' ---
+string(2) "30"
+--- testing: ' 123abc' >> '123e5xyz' ---
+string(2) "30"
+--- testing: ' 123abc' >> ' 123abc' ---
+string(2) "30"
+--- testing: ' 123abc' >> '123 abc' ---
+string(2) "30"
+--- testing: ' 123abc' >> '123abc ' ---
+string(2) "30"
+--- testing: ' 123abc' >> '3.4a' ---
+string(4) "3135"
+--- testing: ' 123abc' >> 'a5.9' ---
+string(6) "313233"
+--- testing: '123 abc' >> '0' ---
+string(6) "313233"
+--- testing: '123 abc' >> '65' ---
+string(4) "3631"
+--- testing: '123 abc' >> '-44' ---
+string(2) "30"
+--- testing: '123 abc' >> '1.2' ---
+string(4) "3631"
+--- testing: '123 abc' >> '-7.7' ---
+string(2) "30"
+--- testing: '123 abc' >> 'abc' ---
+string(6) "313233"
+--- testing: '123 abc' >> '123abc' ---
+string(2) "30"
+--- testing: '123 abc' >> '123e5' ---
+string(2) "30"
+--- testing: '123 abc' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '123 abc' >> ' 123abc' ---
+string(2) "30"
+--- testing: '123 abc' >> '123 abc' ---
+string(2) "30"
+--- testing: '123 abc' >> '123abc ' ---
+string(2) "30"
+--- testing: '123 abc' >> '3.4a' ---
+string(4) "3135"
+--- testing: '123 abc' >> 'a5.9' ---
+string(6) "313233"
+--- testing: '123abc ' >> '0' ---
+string(6) "313233"
+--- testing: '123abc ' >> '65' ---
+string(4) "3631"
+--- testing: '123abc ' >> '-44' ---
+string(2) "30"
+--- testing: '123abc ' >> '1.2' ---
+string(4) "3631"
+--- testing: '123abc ' >> '-7.7' ---
+string(2) "30"
+--- testing: '123abc ' >> 'abc' ---
+string(6) "313233"
+--- testing: '123abc ' >> '123abc' ---
+string(2) "30"
+--- testing: '123abc ' >> '123e5' ---
+string(2) "30"
+--- testing: '123abc ' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '123abc ' >> ' 123abc' ---
+string(2) "30"
+--- testing: '123abc ' >> '123 abc' ---
+string(2) "30"
+--- testing: '123abc ' >> '123abc ' ---
+string(2) "30"
+--- testing: '123abc ' >> '3.4a' ---
+string(4) "3135"
+--- testing: '123abc ' >> 'a5.9' ---
+string(6) "313233"
+--- testing: '3.4a' >> '0' ---
+string(2) "33"
+--- testing: '3.4a' >> '65' ---
+string(2) "31"
+--- testing: '3.4a' >> '-44' ---
+string(2) "30"
+--- testing: '3.4a' >> '1.2' ---
+string(2) "31"
+--- testing: '3.4a' >> '-7.7' ---
+string(2) "30"
+--- testing: '3.4a' >> 'abc' ---
+string(2) "33"
+--- testing: '3.4a' >> '123abc' ---
+string(2) "30"
+--- testing: '3.4a' >> '123e5' ---
+string(2) "30"
+--- testing: '3.4a' >> '123e5xyz' ---
+string(2) "30"
+--- testing: '3.4a' >> ' 123abc' ---
+string(2) "30"
+--- testing: '3.4a' >> '123 abc' ---
+string(2) "30"
+--- testing: '3.4a' >> '123abc ' ---
+string(2) "30"
+--- testing: '3.4a' >> '3.4a' ---
+string(2) "30"
+--- testing: '3.4a' >> 'a5.9' ---
+string(2) "33"
+--- testing: 'a5.9' >> '0' ---
+string(2) "30"
+--- testing: 'a5.9' >> '65' ---
+string(2) "30"
+--- testing: 'a5.9' >> '-44' ---
+string(2) "30"
+--- testing: 'a5.9' >> '1.2' ---
+string(2) "30"
+--- testing: 'a5.9' >> '-7.7' ---
+string(2) "30"
+--- testing: 'a5.9' >> 'abc' ---
+string(2) "30"
+--- testing: 'a5.9' >> '123abc' ---
+string(2) "30"
+--- testing: 'a5.9' >> '123e5' ---
+string(2) "30"
+--- testing: 'a5.9' >> '123e5xyz' ---
+string(2) "30"
+--- testing: 'a5.9' >> ' 123abc' ---
+string(2) "30"
+--- testing: 'a5.9' >> '123 abc' ---
+string(2) "30"
+--- testing: 'a5.9' >> '123abc ' ---
+string(2) "30"
+--- testing: 'a5.9' >> '3.4a' ---
+string(2) "30"
+--- testing: 'a5.9' >> 'a5.9' ---
+string(2) "30"
+===DONE===
diff --git a/tests/lang/operators/bitwiseXor_basiclong_64bit.phpt b/tests/lang/operators/bitwiseXor_basiclong_64bit.phpt
new file mode 100644
index 0000000..2764be6
--- /dev/null
+++ b/tests/lang/operators/bitwiseXor_basiclong_64bit.phpt
@@ -0,0 +1,583 @@
+--TEST--
+Test ^ operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal ^ $otherVal ---\n";   
+      var_dump($longVal^$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal ^ $longVal ---\n";   
+      var_dump($otherVal^$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ^ 0 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 ^ 1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775807 ^ -1 ---
+int(-9223372036854775808)
+--- testing: 9223372036854775807 ^ 7 ---
+int(9223372036854775800)
+--- testing: 9223372036854775807 ^ 9 ---
+int(9223372036854775798)
+--- testing: 9223372036854775807 ^ 65 ---
+int(9223372036854775742)
+--- testing: 9223372036854775807 ^ -44 ---
+int(-9223372036854775765)
+--- testing: 9223372036854775807 ^ 2147483647 ---
+int(9223372034707292160)
+--- testing: 9223372036854775807 ^ 9223372036854775807 ---
+int(0)
+--- testing: -9223372036854775808 ^ 0 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 ^ 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775808 ^ -1 ---
+int(9223372036854775807)
+--- testing: -9223372036854775808 ^ 7 ---
+int(-9223372036854775801)
+--- testing: -9223372036854775808 ^ 9 ---
+int(-9223372036854775799)
+--- testing: -9223372036854775808 ^ 65 ---
+int(-9223372036854775743)
+--- testing: -9223372036854775808 ^ -44 ---
+int(9223372036854775764)
+--- testing: -9223372036854775808 ^ 2147483647 ---
+int(-9223372034707292161)
+--- testing: -9223372036854775808 ^ 9223372036854775807 ---
+int(-1)
+--- testing: 2147483647 ^ 0 ---
+int(2147483647)
+--- testing: 2147483647 ^ 1 ---
+int(2147483646)
+--- testing: 2147483647 ^ -1 ---
+int(-2147483648)
+--- testing: 2147483647 ^ 7 ---
+int(2147483640)
+--- testing: 2147483647 ^ 9 ---
+int(2147483638)
+--- testing: 2147483647 ^ 65 ---
+int(2147483582)
+--- testing: 2147483647 ^ -44 ---
+int(-2147483605)
+--- testing: 2147483647 ^ 2147483647 ---
+int(0)
+--- testing: 2147483647 ^ 9223372036854775807 ---
+int(9223372034707292160)
+--- testing: -2147483648 ^ 0 ---
+int(-2147483648)
+--- testing: -2147483648 ^ 1 ---
+int(-2147483647)
+--- testing: -2147483648 ^ -1 ---
+int(2147483647)
+--- testing: -2147483648 ^ 7 ---
+int(-2147483641)
+--- testing: -2147483648 ^ 9 ---
+int(-2147483639)
+--- testing: -2147483648 ^ 65 ---
+int(-2147483583)
+--- testing: -2147483648 ^ -44 ---
+int(2147483604)
+--- testing: -2147483648 ^ 2147483647 ---
+int(-1)
+--- testing: -2147483648 ^ 9223372036854775807 ---
+int(-9223372034707292161)
+--- testing: 9223372034707292160 ^ 0 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 ^ 1 ---
+int(9223372034707292161)
+--- testing: 9223372034707292160 ^ -1 ---
+int(-9223372034707292161)
+--- testing: 9223372034707292160 ^ 7 ---
+int(9223372034707292167)
+--- testing: 9223372034707292160 ^ 9 ---
+int(9223372034707292169)
+--- testing: 9223372034707292160 ^ 65 ---
+int(9223372034707292225)
+--- testing: 9223372034707292160 ^ -44 ---
+int(-9223372034707292204)
+--- testing: 9223372034707292160 ^ 2147483647 ---
+int(9223372036854775807)
+--- testing: 9223372034707292160 ^ 9223372036854775807 ---
+int(2147483647)
+--- testing: -9223372034707292160 ^ 0 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 ^ 1 ---
+int(-9223372034707292159)
+--- testing: -9223372034707292160 ^ -1 ---
+int(9223372034707292159)
+--- testing: -9223372034707292160 ^ 7 ---
+int(-9223372034707292153)
+--- testing: -9223372034707292160 ^ 9 ---
+int(-9223372034707292151)
+--- testing: -9223372034707292160 ^ 65 ---
+int(-9223372034707292095)
+--- testing: -9223372034707292160 ^ -44 ---
+int(9223372034707292116)
+--- testing: -9223372034707292160 ^ 2147483647 ---
+int(-9223372032559808513)
+--- testing: -9223372034707292160 ^ 9223372036854775807 ---
+int(-2147483649)
+--- testing: 2147483648 ^ 0 ---
+int(2147483648)
+--- testing: 2147483648 ^ 1 ---
+int(2147483649)
+--- testing: 2147483648 ^ -1 ---
+int(-2147483649)
+--- testing: 2147483648 ^ 7 ---
+int(2147483655)
+--- testing: 2147483648 ^ 9 ---
+int(2147483657)
+--- testing: 2147483648 ^ 65 ---
+int(2147483713)
+--- testing: 2147483648 ^ -44 ---
+int(-2147483692)
+--- testing: 2147483648 ^ 2147483647 ---
+int(4294967295)
+--- testing: 2147483648 ^ 9223372036854775807 ---
+int(9223372034707292159)
+--- testing: -2147483649 ^ 0 ---
+int(-2147483649)
+--- testing: -2147483649 ^ 1 ---
+int(-2147483650)
+--- testing: -2147483649 ^ -1 ---
+int(2147483648)
+--- testing: -2147483649 ^ 7 ---
+int(-2147483656)
+--- testing: -2147483649 ^ 9 ---
+int(-2147483658)
+--- testing: -2147483649 ^ 65 ---
+int(-2147483714)
+--- testing: -2147483649 ^ -44 ---
+int(2147483691)
+--- testing: -2147483649 ^ 2147483647 ---
+int(-4294967296)
+--- testing: -2147483649 ^ 9223372036854775807 ---
+int(-9223372034707292160)
+--- testing: 4294967294 ^ 0 ---
+int(4294967294)
+--- testing: 4294967294 ^ 1 ---
+int(4294967295)
+--- testing: 4294967294 ^ -1 ---
+int(-4294967295)
+--- testing: 4294967294 ^ 7 ---
+int(4294967289)
+--- testing: 4294967294 ^ 9 ---
+int(4294967287)
+--- testing: 4294967294 ^ 65 ---
+int(4294967231)
+--- testing: 4294967294 ^ -44 ---
+int(-4294967254)
+--- testing: 4294967294 ^ 2147483647 ---
+int(2147483649)
+--- testing: 4294967294 ^ 9223372036854775807 ---
+int(9223372032559808513)
+--- testing: 4294967295 ^ 0 ---
+int(4294967295)
+--- testing: 4294967295 ^ 1 ---
+int(4294967294)
+--- testing: 4294967295 ^ -1 ---
+int(-4294967296)
+--- testing: 4294967295 ^ 7 ---
+int(4294967288)
+--- testing: 4294967295 ^ 9 ---
+int(4294967286)
+--- testing: 4294967295 ^ 65 ---
+int(4294967230)
+--- testing: 4294967295 ^ -44 ---
+int(-4294967253)
+--- testing: 4294967295 ^ 2147483647 ---
+int(2147483648)
+--- testing: 4294967295 ^ 9223372036854775807 ---
+int(9223372032559808512)
+--- testing: 4294967293 ^ 0 ---
+int(4294967293)
+--- testing: 4294967293 ^ 1 ---
+int(4294967292)
+--- testing: 4294967293 ^ -1 ---
+int(-4294967294)
+--- testing: 4294967293 ^ 7 ---
+int(4294967290)
+--- testing: 4294967293 ^ 9 ---
+int(4294967284)
+--- testing: 4294967293 ^ 65 ---
+int(4294967228)
+--- testing: 4294967293 ^ -44 ---
+int(-4294967255)
+--- testing: 4294967293 ^ 2147483647 ---
+int(2147483650)
+--- testing: 4294967293 ^ 9223372036854775807 ---
+int(9223372032559808514)
+--- testing: 9223372036854775806 ^ 0 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 ^ 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 ^ -1 ---
+int(-9223372036854775807)
+--- testing: 9223372036854775806 ^ 7 ---
+int(9223372036854775801)
+--- testing: 9223372036854775806 ^ 9 ---
+int(9223372036854775799)
+--- testing: 9223372036854775806 ^ 65 ---
+int(9223372036854775743)
+--- testing: 9223372036854775806 ^ -44 ---
+int(-9223372036854775766)
+--- testing: 9223372036854775806 ^ 2147483647 ---
+int(9223372034707292161)
+--- testing: 9223372036854775806 ^ 9223372036854775807 ---
+int(1)
+--- testing: 9.2233720368548E+18 ^ 0 ---
+int(-9223372036854775808)
+--- testing: 9.2233720368548E+18 ^ 1 ---
+int(-9223372036854775807)
+--- testing: 9.2233720368548E+18 ^ -1 ---
+int(9223372036854775807)
+--- testing: 9.2233720368548E+18 ^ 7 ---
+int(-9223372036854775801)
+--- testing: 9.2233720368548E+18 ^ 9 ---
+int(-9223372036854775799)
+--- testing: 9.2233720368548E+18 ^ 65 ---
+int(-9223372036854775743)
+--- testing: 9.2233720368548E+18 ^ -44 ---
+int(9223372036854775764)
+--- testing: 9.2233720368548E+18 ^ 2147483647 ---
+int(-9223372034707292161)
+--- testing: 9.2233720368548E+18 ^ 9223372036854775807 ---
+int(-1)
+--- testing: -9223372036854775807 ^ 0 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 ^ 1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775807 ^ -1 ---
+int(9223372036854775806)
+--- testing: -9223372036854775807 ^ 7 ---
+int(-9223372036854775802)
+--- testing: -9223372036854775807 ^ 9 ---
+int(-9223372036854775800)
+--- testing: -9223372036854775807 ^ 65 ---
+int(-9223372036854775744)
+--- testing: -9223372036854775807 ^ -44 ---
+int(9223372036854775765)
+--- testing: -9223372036854775807 ^ 2147483647 ---
+int(-9223372034707292162)
+--- testing: -9223372036854775807 ^ 9223372036854775807 ---
+int(-2)
+--- testing: -9.2233720368548E+18 ^ 0 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 ^ 1 ---
+int(-9223372036854775807)
+--- testing: -9.2233720368548E+18 ^ -1 ---
+int(9223372036854775807)
+--- testing: -9.2233720368548E+18 ^ 7 ---
+int(-9223372036854775801)
+--- testing: -9.2233720368548E+18 ^ 9 ---
+int(-9223372036854775799)
+--- testing: -9.2233720368548E+18 ^ 65 ---
+int(-9223372036854775743)
+--- testing: -9.2233720368548E+18 ^ -44 ---
+int(9223372036854775764)
+--- testing: -9.2233720368548E+18 ^ 2147483647 ---
+int(-9223372034707292161)
+--- testing: -9.2233720368548E+18 ^ 9223372036854775807 ---
+int(-1)
+--- testing: 0 ^ 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 0 ^ -9223372036854775808 ---
+int(-9223372036854775808)
+--- testing: 0 ^ 2147483647 ---
+int(2147483647)
+--- testing: 0 ^ -2147483648 ---
+int(-2147483648)
+--- testing: 0 ^ 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 0 ^ -9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: 0 ^ 2147483648 ---
+int(2147483648)
+--- testing: 0 ^ -2147483649 ---
+int(-2147483649)
+--- testing: 0 ^ 4294967294 ---
+int(4294967294)
+--- testing: 0 ^ 4294967295 ---
+int(4294967295)
+--- testing: 0 ^ 4294967293 ---
+int(4294967293)
+--- testing: 0 ^ 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: 0 ^ 9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: 0 ^ -9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: 0 ^ -9.2233720368548E+18 ---
+int(-9223372036854775808)
+--- testing: 1 ^ 9223372036854775807 ---
+int(9223372036854775806)
+--- testing: 1 ^ -9223372036854775808 ---
+int(-9223372036854775807)
+--- testing: 1 ^ 2147483647 ---
+int(2147483646)
+--- testing: 1 ^ -2147483648 ---
+int(-2147483647)
+--- testing: 1 ^ 9223372034707292160 ---
+int(9223372034707292161)
+--- testing: 1 ^ -9223372034707292160 ---
+int(-9223372034707292159)
+--- testing: 1 ^ 2147483648 ---
+int(2147483649)
+--- testing: 1 ^ -2147483649 ---
+int(-2147483650)
+--- testing: 1 ^ 4294967294 ---
+int(4294967295)
+--- testing: 1 ^ 4294967295 ---
+int(4294967294)
+--- testing: 1 ^ 4294967293 ---
+int(4294967292)
+--- testing: 1 ^ 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 1 ^ 9.2233720368548E+18 ---
+int(-9223372036854775807)
+--- testing: 1 ^ -9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: 1 ^ -9.2233720368548E+18 ---
+int(-9223372036854775807)
+--- testing: -1 ^ 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -1 ^ -9223372036854775808 ---
+int(9223372036854775807)
+--- testing: -1 ^ 2147483647 ---
+int(-2147483648)
+--- testing: -1 ^ -2147483648 ---
+int(2147483647)
+--- testing: -1 ^ 9223372034707292160 ---
+int(-9223372034707292161)
+--- testing: -1 ^ -9223372034707292160 ---
+int(9223372034707292159)
+--- testing: -1 ^ 2147483648 ---
+int(-2147483649)
+--- testing: -1 ^ -2147483649 ---
+int(2147483648)
+--- testing: -1 ^ 4294967294 ---
+int(-4294967295)
+--- testing: -1 ^ 4294967295 ---
+int(-4294967296)
+--- testing: -1 ^ 4294967293 ---
+int(-4294967294)
+--- testing: -1 ^ 9223372036854775806 ---
+int(-9223372036854775807)
+--- testing: -1 ^ 9.2233720368548E+18 ---
+int(9223372036854775807)
+--- testing: -1 ^ -9223372036854775807 ---
+int(9223372036854775806)
+--- testing: -1 ^ -9.2233720368548E+18 ---
+int(9223372036854775807)
+--- testing: 7 ^ 9223372036854775807 ---
+int(9223372036854775800)
+--- testing: 7 ^ -9223372036854775808 ---
+int(-9223372036854775801)
+--- testing: 7 ^ 2147483647 ---
+int(2147483640)
+--- testing: 7 ^ -2147483648 ---
+int(-2147483641)
+--- testing: 7 ^ 9223372034707292160 ---
+int(9223372034707292167)
+--- testing: 7 ^ -9223372034707292160 ---
+int(-9223372034707292153)
+--- testing: 7 ^ 2147483648 ---
+int(2147483655)
+--- testing: 7 ^ -2147483649 ---
+int(-2147483656)
+--- testing: 7 ^ 4294967294 ---
+int(4294967289)
+--- testing: 7 ^ 4294967295 ---
+int(4294967288)
+--- testing: 7 ^ 4294967293 ---
+int(4294967290)
+--- testing: 7 ^ 9223372036854775806 ---
+int(9223372036854775801)
+--- testing: 7 ^ 9.2233720368548E+18 ---
+int(-9223372036854775801)
+--- testing: 7 ^ -9223372036854775807 ---
+int(-9223372036854775802)
+--- testing: 7 ^ -9.2233720368548E+18 ---
+int(-9223372036854775801)
+--- testing: 9 ^ 9223372036854775807 ---
+int(9223372036854775798)
+--- testing: 9 ^ -9223372036854775808 ---
+int(-9223372036854775799)
+--- testing: 9 ^ 2147483647 ---
+int(2147483638)
+--- testing: 9 ^ -2147483648 ---
+int(-2147483639)
+--- testing: 9 ^ 9223372034707292160 ---
+int(9223372034707292169)
+--- testing: 9 ^ -9223372034707292160 ---
+int(-9223372034707292151)
+--- testing: 9 ^ 2147483648 ---
+int(2147483657)
+--- testing: 9 ^ -2147483649 ---
+int(-2147483658)
+--- testing: 9 ^ 4294967294 ---
+int(4294967287)
+--- testing: 9 ^ 4294967295 ---
+int(4294967286)
+--- testing: 9 ^ 4294967293 ---
+int(4294967284)
+--- testing: 9 ^ 9223372036854775806 ---
+int(9223372036854775799)
+--- testing: 9 ^ 9.2233720368548E+18 ---
+int(-9223372036854775799)
+--- testing: 9 ^ -9223372036854775807 ---
+int(-9223372036854775800)
+--- testing: 9 ^ -9.2233720368548E+18 ---
+int(-9223372036854775799)
+--- testing: 65 ^ 9223372036854775807 ---
+int(9223372036854775742)
+--- testing: 65 ^ -9223372036854775808 ---
+int(-9223372036854775743)
+--- testing: 65 ^ 2147483647 ---
+int(2147483582)
+--- testing: 65 ^ -2147483648 ---
+int(-2147483583)
+--- testing: 65 ^ 9223372034707292160 ---
+int(9223372034707292225)
+--- testing: 65 ^ -9223372034707292160 ---
+int(-9223372034707292095)
+--- testing: 65 ^ 2147483648 ---
+int(2147483713)
+--- testing: 65 ^ -2147483649 ---
+int(-2147483714)
+--- testing: 65 ^ 4294967294 ---
+int(4294967231)
+--- testing: 65 ^ 4294967295 ---
+int(4294967230)
+--- testing: 65 ^ 4294967293 ---
+int(4294967228)
+--- testing: 65 ^ 9223372036854775806 ---
+int(9223372036854775743)
+--- testing: 65 ^ 9.2233720368548E+18 ---
+int(-9223372036854775743)
+--- testing: 65 ^ -9223372036854775807 ---
+int(-9223372036854775744)
+--- testing: 65 ^ -9.2233720368548E+18 ---
+int(-9223372036854775743)
+--- testing: -44 ^ 9223372036854775807 ---
+int(-9223372036854775765)
+--- testing: -44 ^ -9223372036854775808 ---
+int(9223372036854775764)
+--- testing: -44 ^ 2147483647 ---
+int(-2147483605)
+--- testing: -44 ^ -2147483648 ---
+int(2147483604)
+--- testing: -44 ^ 9223372034707292160 ---
+int(-9223372034707292204)
+--- testing: -44 ^ -9223372034707292160 ---
+int(9223372034707292116)
+--- testing: -44 ^ 2147483648 ---
+int(-2147483692)
+--- testing: -44 ^ -2147483649 ---
+int(2147483691)
+--- testing: -44 ^ 4294967294 ---
+int(-4294967254)
+--- testing: -44 ^ 4294967295 ---
+int(-4294967253)
+--- testing: -44 ^ 4294967293 ---
+int(-4294967255)
+--- testing: -44 ^ 9223372036854775806 ---
+int(-9223372036854775766)
+--- testing: -44 ^ 9.2233720368548E+18 ---
+int(9223372036854775764)
+--- testing: -44 ^ -9223372036854775807 ---
+int(9223372036854775765)
+--- testing: -44 ^ -9.2233720368548E+18 ---
+int(9223372036854775764)
+--- testing: 2147483647 ^ 9223372036854775807 ---
+int(9223372034707292160)
+--- testing: 2147483647 ^ -9223372036854775808 ---
+int(-9223372034707292161)
+--- testing: 2147483647 ^ 2147483647 ---
+int(0)
+--- testing: 2147483647 ^ -2147483648 ---
+int(-1)
+--- testing: 2147483647 ^ 9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 2147483647 ^ -9223372034707292160 ---
+int(-9223372032559808513)
+--- testing: 2147483647 ^ 2147483648 ---
+int(4294967295)
+--- testing: 2147483647 ^ -2147483649 ---
+int(-4294967296)
+--- testing: 2147483647 ^ 4294967294 ---
+int(2147483649)
+--- testing: 2147483647 ^ 4294967295 ---
+int(2147483648)
+--- testing: 2147483647 ^ 4294967293 ---
+int(2147483650)
+--- testing: 2147483647 ^ 9223372036854775806 ---
+int(9223372034707292161)
+--- testing: 2147483647 ^ 9.2233720368548E+18 ---
+int(-9223372034707292161)
+--- testing: 2147483647 ^ -9223372036854775807 ---
+int(-9223372034707292162)
+--- testing: 2147483647 ^ -9.2233720368548E+18 ---
+int(-9223372034707292161)
+--- testing: 9223372036854775807 ^ 9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775807 ^ -9223372036854775808 ---
+int(-1)
+--- testing: 9223372036854775807 ^ 2147483647 ---
+int(9223372034707292160)
+--- testing: 9223372036854775807 ^ -2147483648 ---
+int(-9223372034707292161)
+--- testing: 9223372036854775807 ^ 9223372034707292160 ---
+int(2147483647)
+--- testing: 9223372036854775807 ^ -9223372034707292160 ---
+int(-2147483649)
+--- testing: 9223372036854775807 ^ 2147483648 ---
+int(9223372034707292159)
+--- testing: 9223372036854775807 ^ -2147483649 ---
+int(-9223372034707292160)
+--- testing: 9223372036854775807 ^ 4294967294 ---
+int(9223372032559808513)
+--- testing: 9223372036854775807 ^ 4294967295 ---
+int(9223372032559808512)
+--- testing: 9223372036854775807 ^ 4294967293 ---
+int(9223372032559808514)
+--- testing: 9223372036854775807 ^ 9223372036854775806 ---
+int(1)
+--- testing: 9223372036854775807 ^ 9.2233720368548E+18 ---
+int(-1)
+--- testing: 9223372036854775807 ^ -9223372036854775807 ---
+int(-2)
+--- testing: 9223372036854775807 ^ -9.2233720368548E+18 ---
+int(-1)
+===DONE===
+	
\ No newline at end of file
diff --git a/tests/lang/operators/bitwiseXor_variationStr.phpt b/tests/lang/operators/bitwiseXor_variationStr.phpt
new file mode 100644
index 0000000..7dda659
--- /dev/null
+++ b/tests/lang/operators/bitwiseXor_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test ^ operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' ^ '$otherVal' ---\n";   
+      var_dump(bin2hex($strVal^$otherVal));
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ^ '0' ---
+string(2) "00"
+--- testing: '0' ^ '65' ---
+string(2) "06"
+--- testing: '0' ^ '-44' ---
+string(2) "1d"
+--- testing: '0' ^ '1.2' ---
+string(2) "01"
+--- testing: '0' ^ '-7.7' ---
+string(2) "1d"
+--- testing: '0' ^ 'abc' ---
+string(2) "51"
+--- testing: '0' ^ '123abc' ---
+string(2) "01"
+--- testing: '0' ^ '123e5' ---
+string(2) "01"
+--- testing: '0' ^ '123e5xyz' ---
+string(2) "01"
+--- testing: '0' ^ ' 123abc' ---
+string(2) "10"
+--- testing: '0' ^ '123 abc' ---
+string(2) "01"
+--- testing: '0' ^ '123abc ' ---
+string(2) "01"
+--- testing: '0' ^ '3.4a' ---
+string(2) "03"
+--- testing: '0' ^ 'a5.9' ---
+string(2) "51"
+--- testing: '65' ^ '0' ---
+string(2) "06"
+--- testing: '65' ^ '65' ---
+string(4) "0000"
+--- testing: '65' ^ '-44' ---
+string(4) "1b01"
+--- testing: '65' ^ '1.2' ---
+string(4) "071b"
+--- testing: '65' ^ '-7.7' ---
+string(4) "1b02"
+--- testing: '65' ^ 'abc' ---
+string(4) "5757"
+--- testing: '65' ^ '123abc' ---
+string(4) "0707"
+--- testing: '65' ^ '123e5' ---
+string(4) "0707"
+--- testing: '65' ^ '123e5xyz' ---
+string(4) "0707"
+--- testing: '65' ^ ' 123abc' ---
+string(4) "1604"
+--- testing: '65' ^ '123 abc' ---
+string(4) "0707"
+--- testing: '65' ^ '123abc ' ---
+string(4) "0707"
+--- testing: '65' ^ '3.4a' ---
+string(4) "051b"
+--- testing: '65' ^ 'a5.9' ---
+string(4) "5700"
+--- testing: '-44' ^ '0' ---
+string(2) "1d"
+--- testing: '-44' ^ '65' ---
+string(4) "1b01"
+--- testing: '-44' ^ '-44' ---
+string(6) "000000"
+--- testing: '-44' ^ '1.2' ---
+string(6) "1c1a06"
+--- testing: '-44' ^ '-7.7' ---
+string(6) "00031a"
+--- testing: '-44' ^ 'abc' ---
+string(6) "4c5657"
+--- testing: '-44' ^ '123abc' ---
+string(6) "1c0607"
+--- testing: '-44' ^ '123e5' ---
+string(6) "1c0607"
+--- testing: '-44' ^ '123e5xyz' ---
+string(6) "1c0607"
+--- testing: '-44' ^ ' 123abc' ---
+string(6) "0d0506"
+--- testing: '-44' ^ '123 abc' ---
+string(6) "1c0607"
+--- testing: '-44' ^ '123abc ' ---
+string(6) "1c0607"
+--- testing: '-44' ^ '3.4a' ---
+string(6) "1e1a00"
+--- testing: '-44' ^ 'a5.9' ---
+string(6) "4c011a"
+--- testing: '1.2' ^ '0' ---
+string(2) "01"
+--- testing: '1.2' ^ '65' ---
+string(4) "071b"
+--- testing: '1.2' ^ '-44' ---
+string(6) "1c1a06"
+--- testing: '1.2' ^ '1.2' ---
+string(6) "000000"
+--- testing: '1.2' ^ '-7.7' ---
+string(6) "1c191c"
+--- testing: '1.2' ^ 'abc' ---
+string(6) "504c51"
+--- testing: '1.2' ^ '123abc' ---
+string(6) "001c01"
+--- testing: '1.2' ^ '123e5' ---
+string(6) "001c01"
+--- testing: '1.2' ^ '123e5xyz' ---
+string(6) "001c01"
+--- testing: '1.2' ^ ' 123abc' ---
+string(6) "111f00"
+--- testing: '1.2' ^ '123 abc' ---
+string(6) "001c01"
+--- testing: '1.2' ^ '123abc ' ---
+string(6) "001c01"
+--- testing: '1.2' ^ '3.4a' ---
+string(6) "020006"
+--- testing: '1.2' ^ 'a5.9' ---
+string(6) "501b1c"
+--- testing: '-7.7' ^ '0' ---
+string(2) "1d"
+--- testing: '-7.7' ^ '65' ---
+string(4) "1b02"
+--- testing: '-7.7' ^ '-44' ---
+string(6) "00031a"
+--- testing: '-7.7' ^ '1.2' ---
+string(6) "1c191c"
+--- testing: '-7.7' ^ '-7.7' ---
+string(8) "00000000"
+--- testing: '-7.7' ^ 'abc' ---
+string(6) "4c554d"
+--- testing: '-7.7' ^ '123abc' ---
+string(8) "1c051d56"
+--- testing: '-7.7' ^ '123e5' ---
+string(8) "1c051d52"
+--- testing: '-7.7' ^ '123e5xyz' ---
+string(8) "1c051d52"
+--- testing: '-7.7' ^ ' 123abc' ---
+string(8) "0d061c04"
+--- testing: '-7.7' ^ '123 abc' ---
+string(8) "1c051d17"
+--- testing: '-7.7' ^ '123abc ' ---
+string(8) "1c051d56"
+--- testing: '-7.7' ^ '3.4a' ---
+string(8) "1e191a56"
+--- testing: '-7.7' ^ 'a5.9' ---
+string(8) "4c02000e"
+--- testing: 'abc' ^ '0' ---
+string(2) "51"
+--- testing: 'abc' ^ '65' ---
+string(4) "5757"
+--- testing: 'abc' ^ '-44' ---
+string(6) "4c5657"
+--- testing: 'abc' ^ '1.2' ---
+string(6) "504c51"
+--- testing: 'abc' ^ '-7.7' ---
+string(6) "4c554d"
+--- testing: 'abc' ^ 'abc' ---
+string(6) "000000"
+--- testing: 'abc' ^ '123abc' ---
+string(6) "505050"
+--- testing: 'abc' ^ '123e5' ---
+string(6) "505050"
+--- testing: 'abc' ^ '123e5xyz' ---
+string(6) "505050"
+--- testing: 'abc' ^ ' 123abc' ---
+string(6) "415351"
+--- testing: 'abc' ^ '123 abc' ---
+string(6) "505050"
+--- testing: 'abc' ^ '123abc ' ---
+string(6) "505050"
+--- testing: 'abc' ^ '3.4a' ---
+string(6) "524c57"
+--- testing: 'abc' ^ 'a5.9' ---
+string(6) "00574d"
+--- testing: '123abc' ^ '0' ---
+string(2) "01"
+--- testing: '123abc' ^ '65' ---
+string(4) "0707"
+--- testing: '123abc' ^ '-44' ---
+string(6) "1c0607"
+--- testing: '123abc' ^ '1.2' ---
+string(6) "001c01"
+--- testing: '123abc' ^ '-7.7' ---
+string(8) "1c051d56"
+--- testing: '123abc' ^ 'abc' ---
+string(6) "505050"
+--- testing: '123abc' ^ '123abc' ---
+string(12) "000000000000"
+--- testing: '123abc' ^ '123e5' ---
+string(10) "0000000457"
+--- testing: '123abc' ^ '123e5xyz' ---
+string(12) "00000004571b"
+--- testing: '123abc' ^ ' 123abc' ---
+string(12) "110301520301"
+--- testing: '123abc' ^ '123 abc' ---
+string(12) "000000410301"
+--- testing: '123abc' ^ '123abc ' ---
+string(12) "000000000000"
+--- testing: '123abc' ^ '3.4a' ---
+string(8) "021c0700"
+--- testing: '123abc' ^ 'a5.9' ---
+string(8) "50071d58"
+--- testing: '123e5' ^ '0' ---
+string(2) "01"
+--- testing: '123e5' ^ '65' ---
+string(4) "0707"
+--- testing: '123e5' ^ '-44' ---
+string(6) "1c0607"
+--- testing: '123e5' ^ '1.2' ---
+string(6) "001c01"
+--- testing: '123e5' ^ '-7.7' ---
+string(8) "1c051d52"
+--- testing: '123e5' ^ 'abc' ---
+string(6) "505050"
+--- testing: '123e5' ^ '123abc' ---
+string(10) "0000000457"
+--- testing: '123e5' ^ '123e5' ---
+string(10) "0000000000"
+--- testing: '123e5' ^ '123e5xyz' ---
+string(10) "0000000000"
+--- testing: '123e5' ^ ' 123abc' ---
+string(10) "1103015654"
+--- testing: '123e5' ^ '123 abc' ---
+string(10) "0000004554"
+--- testing: '123e5' ^ '123abc ' ---
+string(10) "0000000457"
+--- testing: '123e5' ^ '3.4a' ---
+string(8) "021c0704"
+--- testing: '123e5' ^ 'a5.9' ---
+string(8) "50071d5c"
+--- testing: '123e5xyz' ^ '0' ---
+string(2) "01"
+--- testing: '123e5xyz' ^ '65' ---
+string(4) "0707"
+--- testing: '123e5xyz' ^ '-44' ---
+string(6) "1c0607"
+--- testing: '123e5xyz' ^ '1.2' ---
+string(6) "001c01"
+--- testing: '123e5xyz' ^ '-7.7' ---
+string(8) "1c051d52"
+--- testing: '123e5xyz' ^ 'abc' ---
+string(6) "505050"
+--- testing: '123e5xyz' ^ '123abc' ---
+string(12) "00000004571b"
+--- testing: '123e5xyz' ^ '123e5' ---
+string(10) "0000000000"
+--- testing: '123e5xyz' ^ '123e5xyz' ---
+string(16) "0000000000000000"
+--- testing: '123e5xyz' ^ ' 123abc' ---
+string(14) "11030156541a1a"
+--- testing: '123e5xyz' ^ '123 abc' ---
+string(14) "00000045541a1a"
+--- testing: '123e5xyz' ^ '123abc ' ---
+string(14) "00000004571b59"
+--- testing: '123e5xyz' ^ '3.4a' ---
+string(8) "021c0704"
+--- testing: '123e5xyz' ^ 'a5.9' ---
+string(8) "50071d5c"
+--- testing: ' 123abc' ^ '0' ---
+string(2) "10"
+--- testing: ' 123abc' ^ '65' ---
+string(4) "1604"
+--- testing: ' 123abc' ^ '-44' ---
+string(6) "0d0506"
+--- testing: ' 123abc' ^ '1.2' ---
+string(6) "111f00"
+--- testing: ' 123abc' ^ '-7.7' ---
+string(8) "0d061c04"
+--- testing: ' 123abc' ^ 'abc' ---
+string(6) "415351"
+--- testing: ' 123abc' ^ '123abc' ---
+string(12) "110301520301"
+--- testing: ' 123abc' ^ '123e5' ---
+string(10) "1103015654"
+--- testing: ' 123abc' ^ '123e5xyz' ---
+string(14) "11030156541a1a"
+--- testing: ' 123abc' ^ ' 123abc' ---
+string(14) "00000000000000"
+--- testing: ' 123abc' ^ '123 abc' ---
+string(14) "11030113000000"
+--- testing: ' 123abc' ^ '123abc ' ---
+string(14) "11030152030143"
+--- testing: ' 123abc' ^ '3.4a' ---
+string(8) "131f0652"
+--- testing: ' 123abc' ^ 'a5.9' ---
+string(8) "41041c0a"
+--- testing: '123 abc' ^ '0' ---
+string(2) "01"
+--- testing: '123 abc' ^ '65' ---
+string(4) "0707"
+--- testing: '123 abc' ^ '-44' ---
+string(6) "1c0607"
+--- testing: '123 abc' ^ '1.2' ---
+string(6) "001c01"
+--- testing: '123 abc' ^ '-7.7' ---
+string(8) "1c051d17"
+--- testing: '123 abc' ^ 'abc' ---
+string(6) "505050"
+--- testing: '123 abc' ^ '123abc' ---
+string(12) "000000410301"
+--- testing: '123 abc' ^ '123e5' ---
+string(10) "0000004554"
+--- testing: '123 abc' ^ '123e5xyz' ---
+string(14) "00000045541a1a"
+--- testing: '123 abc' ^ ' 123abc' ---
+string(14) "11030113000000"
+--- testing: '123 abc' ^ '123 abc' ---
+string(14) "00000000000000"
+--- testing: '123 abc' ^ '123abc ' ---
+string(14) "00000041030143"
+--- testing: '123 abc' ^ '3.4a' ---
+string(8) "021c0741"
+--- testing: '123 abc' ^ 'a5.9' ---
+string(8) "50071d19"
+--- testing: '123abc ' ^ '0' ---
+string(2) "01"
+--- testing: '123abc ' ^ '65' ---
+string(4) "0707"
+--- testing: '123abc ' ^ '-44' ---
+string(6) "1c0607"
+--- testing: '123abc ' ^ '1.2' ---
+string(6) "001c01"
+--- testing: '123abc ' ^ '-7.7' ---
+string(8) "1c051d56"
+--- testing: '123abc ' ^ 'abc' ---
+string(6) "505050"
+--- testing: '123abc ' ^ '123abc' ---
+string(12) "000000000000"
+--- testing: '123abc ' ^ '123e5' ---
+string(10) "0000000457"
+--- testing: '123abc ' ^ '123e5xyz' ---
+string(14) "00000004571b59"
+--- testing: '123abc ' ^ ' 123abc' ---
+string(14) "11030152030143"
+--- testing: '123abc ' ^ '123 abc' ---
+string(14) "00000041030143"
+--- testing: '123abc ' ^ '123abc ' ---
+string(14) "00000000000000"
+--- testing: '123abc ' ^ '3.4a' ---
+string(8) "021c0700"
+--- testing: '123abc ' ^ 'a5.9' ---
+string(8) "50071d58"
+--- testing: '3.4a' ^ '0' ---
+string(2) "03"
+--- testing: '3.4a' ^ '65' ---
+string(4) "051b"
+--- testing: '3.4a' ^ '-44' ---
+string(6) "1e1a00"
+--- testing: '3.4a' ^ '1.2' ---
+string(6) "020006"
+--- testing: '3.4a' ^ '-7.7' ---
+string(8) "1e191a56"
+--- testing: '3.4a' ^ 'abc' ---
+string(6) "524c57"
+--- testing: '3.4a' ^ '123abc' ---
+string(8) "021c0700"
+--- testing: '3.4a' ^ '123e5' ---
+string(8) "021c0704"
+--- testing: '3.4a' ^ '123e5xyz' ---
+string(8) "021c0704"
+--- testing: '3.4a' ^ ' 123abc' ---
+string(8) "131f0652"
+--- testing: '3.4a' ^ '123 abc' ---
+string(8) "021c0741"
+--- testing: '3.4a' ^ '123abc ' ---
+string(8) "021c0700"
+--- testing: '3.4a' ^ '3.4a' ---
+string(8) "00000000"
+--- testing: '3.4a' ^ 'a5.9' ---
+string(8) "521b1a58"
+--- testing: 'a5.9' ^ '0' ---
+string(2) "51"
+--- testing: 'a5.9' ^ '65' ---
+string(4) "5700"
+--- testing: 'a5.9' ^ '-44' ---
+string(6) "4c011a"
+--- testing: 'a5.9' ^ '1.2' ---
+string(6) "501b1c"
+--- testing: 'a5.9' ^ '-7.7' ---
+string(8) "4c02000e"
+--- testing: 'a5.9' ^ 'abc' ---
+string(6) "00574d"
+--- testing: 'a5.9' ^ '123abc' ---
+string(8) "50071d58"
+--- testing: 'a5.9' ^ '123e5' ---
+string(8) "50071d5c"
+--- testing: 'a5.9' ^ '123e5xyz' ---
+string(8) "50071d5c"
+--- testing: 'a5.9' ^ ' 123abc' ---
+string(8) "41041c0a"
+--- testing: 'a5.9' ^ '123 abc' ---
+string(8) "50071d19"
+--- testing: 'a5.9' ^ '123abc ' ---
+string(8) "50071d58"
+--- testing: 'a5.9' ^ '3.4a' ---
+string(8) "521b1a58"
+--- testing: 'a5.9' ^ 'a5.9' ---
+string(8) "00000000"
+===DONE===
diff --git a/tests/lang/operators/divide_basiclong_64bit.phpt b/tests/lang/operators/divide_basiclong_64bit.phpt
new file mode 100644
index 0000000..b5d6df9
--- /dev/null
+++ b/tests/lang/operators/divide_basiclong_64bit.phpt
@@ -0,0 +1,582 @@
+--TEST--
+Test / operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal / $otherVal ---\n";   
+      var_dump($longVal/$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal / $longVal ---\n";   
+      var_dump($otherVal/$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 / 0 ---
+bool(false)
+--- testing: 9223372036854775807 / 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 / -1 ---
+int(-9223372036854775807)
+--- testing: 9223372036854775807 / 7 ---
+int(1317624576693539401)
+--- testing: 9223372036854775807 / 9 ---
+float(1.0248191152061E+18)
+--- testing: 9223372036854775807 / 65 ---
+float(1.4189803133623E+17)
+--- testing: 9223372036854775807 / -44 ---
+float(-2.096220917467E+17)
+--- testing: 9223372036854775807 / 2147483647 ---
+float(4294967298)
+--- testing: 9223372036854775807 / 9223372036854775807 ---
+int(1)
+--- testing: -9223372036854775808 / 0 ---
+bool(false)
+--- testing: -9223372036854775808 / 1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 / -1 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 / 7 ---
+float(-1.3176245766935E+18)
+--- testing: -9223372036854775808 / 9 ---
+float(-1.0248191152061E+18)
+--- testing: -9223372036854775808 / 65 ---
+float(-1.4189803133623E+17)
+--- testing: -9223372036854775808 / -44 ---
+float(2.096220917467E+17)
+--- testing: -9223372036854775808 / 2147483647 ---
+float(-4294967298)
+--- testing: -9223372036854775808 / 9223372036854775807 ---
+float(-1)
+--- testing: 2147483647 / 0 ---
+bool(false)
+--- testing: 2147483647 / 1 ---
+int(2147483647)
+--- testing: 2147483647 / -1 ---
+int(-2147483647)
+--- testing: 2147483647 / 7 ---
+float(306783378.14286)
+--- testing: 2147483647 / 9 ---
+float(238609294.11111)
+--- testing: 2147483647 / 65 ---
+float(33038209.953846)
+--- testing: 2147483647 / -44 ---
+float(-48806446.522727)
+--- testing: 2147483647 / 2147483647 ---
+int(1)
+--- testing: 2147483647 / 9223372036854775807 ---
+float(2.3283064354545E-10)
+--- testing: -2147483648 / 0 ---
+bool(false)
+--- testing: -2147483648 / 1 ---
+int(-2147483648)
+--- testing: -2147483648 / -1 ---
+int(2147483648)
+--- testing: -2147483648 / 7 ---
+float(-306783378.28571)
+--- testing: -2147483648 / 9 ---
+float(-238609294.22222)
+--- testing: -2147483648 / 65 ---
+float(-33038209.969231)
+--- testing: -2147483648 / -44 ---
+float(48806446.545455)
+--- testing: -2147483648 / 2147483647 ---
+float(-1.0000000004657)
+--- testing: -2147483648 / 9223372036854775807 ---
+float(-2.3283064365387E-10)
+--- testing: 9223372034707292160 / 0 ---
+bool(false)
+--- testing: 9223372034707292160 / 1 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 / -1 ---
+int(-9223372034707292160)
+--- testing: 9223372034707292160 / 7 ---
+float(1.3176245763868E+18)
+--- testing: 9223372034707292160 / 9 ---
+float(1.0248191149675E+18)
+--- testing: 9223372034707292160 / 65 ---
+float(1.4189803130319E+17)
+--- testing: 9223372034707292160 / -44 ---
+float(-2.0962209169789E+17)
+--- testing: 9223372034707292160 / 2147483647 ---
+float(4294967297)
+--- testing: 9223372034707292160 / 9223372036854775807 ---
+float(0.99999999976717)
+--- testing: -9223372034707292160 / 0 ---
+bool(false)
+--- testing: -9223372034707292160 / 1 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 / -1 ---
+int(9223372034707292160)
+--- testing: -9223372034707292160 / 7 ---
+float(-1.3176245763868E+18)
+--- testing: -9223372034707292160 / 9 ---
+float(-1.0248191149675E+18)
+--- testing: -9223372034707292160 / 65 ---
+float(-1.4189803130319E+17)
+--- testing: -9223372034707292160 / -44 ---
+float(2.0962209169789E+17)
+--- testing: -9223372034707292160 / 2147483647 ---
+float(-4294967297)
+--- testing: -9223372034707292160 / 9223372036854775807 ---
+float(-0.99999999976717)
+--- testing: 2147483648 / 0 ---
+bool(false)
+--- testing: 2147483648 / 1 ---
+int(2147483648)
+--- testing: 2147483648 / -1 ---
+int(-2147483648)
+--- testing: 2147483648 / 7 ---
+float(306783378.28571)
+--- testing: 2147483648 / 9 ---
+float(238609294.22222)
+--- testing: 2147483648 / 65 ---
+float(33038209.969231)
+--- testing: 2147483648 / -44 ---
+float(-48806446.545455)
+--- testing: 2147483648 / 2147483647 ---
+float(1.0000000004657)
+--- testing: 2147483648 / 9223372036854775807 ---
+float(2.3283064365387E-10)
+--- testing: -2147483649 / 0 ---
+bool(false)
+--- testing: -2147483649 / 1 ---
+int(-2147483649)
+--- testing: -2147483649 / -1 ---
+int(2147483649)
+--- testing: -2147483649 / 7 ---
+float(-306783378.42857)
+--- testing: -2147483649 / 9 ---
+float(-238609294.33333)
+--- testing: -2147483649 / 65 ---
+float(-33038209.984615)
+--- testing: -2147483649 / -44 ---
+float(48806446.568182)
+--- testing: -2147483649 / 2147483647 ---
+float(-1.0000000009313)
+--- testing: -2147483649 / 9223372036854775807 ---
+float(-2.3283064376229E-10)
+--- testing: 4294967294 / 0 ---
+bool(false)
+--- testing: 4294967294 / 1 ---
+int(4294967294)
+--- testing: 4294967294 / -1 ---
+int(-4294967294)
+--- testing: 4294967294 / 7 ---
+float(613566756.28571)
+--- testing: 4294967294 / 9 ---
+float(477218588.22222)
+--- testing: 4294967294 / 65 ---
+float(66076419.907692)
+--- testing: 4294967294 / -44 ---
+float(-97612893.045455)
+--- testing: 4294967294 / 2147483647 ---
+int(2)
+--- testing: 4294967294 / 9223372036854775807 ---
+float(4.656612870909E-10)
+--- testing: 4294967295 / 0 ---
+bool(false)
+--- testing: 4294967295 / 1 ---
+int(4294967295)
+--- testing: 4294967295 / -1 ---
+int(-4294967295)
+--- testing: 4294967295 / 7 ---
+float(613566756.42857)
+--- testing: 4294967295 / 9 ---
+float(477218588.33333)
+--- testing: 4294967295 / 65 ---
+float(66076419.923077)
+--- testing: 4294967295 / -44 ---
+float(-97612893.068182)
+--- testing: 4294967295 / 2147483647 ---
+float(2.0000000004657)
+--- testing: 4294967295 / 9223372036854775807 ---
+float(4.6566128719932E-10)
+--- testing: 4294967293 / 0 ---
+bool(false)
+--- testing: 4294967293 / 1 ---
+int(4294967293)
+--- testing: 4294967293 / -1 ---
+int(-4294967293)
+--- testing: 4294967293 / 7 ---
+float(613566756.14286)
+--- testing: 4294967293 / 9 ---
+float(477218588.11111)
+--- testing: 4294967293 / 65 ---
+float(66076419.892308)
+--- testing: 4294967293 / -44 ---
+float(-97612893.022727)
+--- testing: 4294967293 / 2147483647 ---
+float(1.9999999995343)
+--- testing: 4294967293 / 9223372036854775807 ---
+float(4.6566128698248E-10)
+--- testing: 9223372036854775806 / 0 ---
+bool(false)
+--- testing: 9223372036854775806 / 1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 / -1 ---
+int(-9223372036854775806)
+--- testing: 9223372036854775806 / 7 ---
+float(1.3176245766935E+18)
+--- testing: 9223372036854775806 / 9 ---
+float(1.0248191152061E+18)
+--- testing: 9223372036854775806 / 65 ---
+float(1.4189803133623E+17)
+--- testing: 9223372036854775806 / -44 ---
+float(-2.096220917467E+17)
+--- testing: 9223372036854775806 / 2147483647 ---
+int(4294967298)
+--- testing: 9223372036854775806 / 9223372036854775807 ---
+float(1)
+--- testing: 9.2233720368548E+18 / 0 ---
+bool(false)
+--- testing: 9.2233720368548E+18 / 1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 / -1 ---
+float(-9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 / 7 ---
+float(1.3176245766935E+18)
+--- testing: 9.2233720368548E+18 / 9 ---
+float(1.0248191152061E+18)
+--- testing: 9.2233720368548E+18 / 65 ---
+float(1.4189803133623E+17)
+--- testing: 9.2233720368548E+18 / -44 ---
+float(-2.096220917467E+17)
+--- testing: 9.2233720368548E+18 / 2147483647 ---
+float(4294967298)
+--- testing: 9.2233720368548E+18 / 9223372036854775807 ---
+float(1)
+--- testing: -9223372036854775807 / 0 ---
+bool(false)
+--- testing: -9223372036854775807 / 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 / -1 ---
+int(9223372036854775807)
+--- testing: -9223372036854775807 / 7 ---
+int(-1317624576693539401)
+--- testing: -9223372036854775807 / 9 ---
+float(-1.0248191152061E+18)
+--- testing: -9223372036854775807 / 65 ---
+float(-1.4189803133623E+17)
+--- testing: -9223372036854775807 / -44 ---
+float(2.096220917467E+17)
+--- testing: -9223372036854775807 / 2147483647 ---
+float(-4294967298)
+--- testing: -9223372036854775807 / 9223372036854775807 ---
+int(-1)
+--- testing: -9.2233720368548E+18 / 0 ---
+bool(false)
+--- testing: -9.2233720368548E+18 / 1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 / -1 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 / 7 ---
+float(-1.3176245766935E+18)
+--- testing: -9.2233720368548E+18 / 9 ---
+float(-1.0248191152061E+18)
+--- testing: -9.2233720368548E+18 / 65 ---
+float(-1.4189803133623E+17)
+--- testing: -9.2233720368548E+18 / -44 ---
+float(2.096220917467E+17)
+--- testing: -9.2233720368548E+18 / 2147483647 ---
+float(-4294967298)
+--- testing: -9.2233720368548E+18 / 9223372036854775807 ---
+float(-1)
+--- testing: 0 / 9223372036854775807 ---
+int(0)
+--- testing: 0 / -9223372036854775808 ---
+int(0)
+--- testing: 0 / 2147483647 ---
+int(0)
+--- testing: 0 / -2147483648 ---
+int(0)
+--- testing: 0 / 9223372034707292160 ---
+int(0)
+--- testing: 0 / -9223372034707292160 ---
+int(0)
+--- testing: 0 / 2147483648 ---
+int(0)
+--- testing: 0 / -2147483649 ---
+int(0)
+--- testing: 0 / 4294967294 ---
+int(0)
+--- testing: 0 / 4294967295 ---
+int(0)
+--- testing: 0 / 4294967293 ---
+int(0)
+--- testing: 0 / 9223372036854775806 ---
+int(0)
+--- testing: 0 / 9.2233720368548E+18 ---
+float(0)
+--- testing: 0 / -9223372036854775807 ---
+int(0)
+--- testing: 0 / -9.2233720368548E+18 ---
+float(-0)
+--- testing: 1 / 9223372036854775807 ---
+float(1.0842021724855E-19)
+--- testing: 1 / -9223372036854775808 ---
+float(-1.0842021724855E-19)
+--- testing: 1 / 2147483647 ---
+float(4.6566128752458E-10)
+--- testing: 1 / -2147483648 ---
+float(-4.6566128730774E-10)
+--- testing: 1 / 9223372034707292160 ---
+float(1.0842021727379E-19)
+--- testing: 1 / -9223372034707292160 ---
+float(-1.0842021727379E-19)
+--- testing: 1 / 2147483648 ---
+float(4.6566128730774E-10)
+--- testing: 1 / -2147483649 ---
+float(-4.656612870909E-10)
+--- testing: 1 / 4294967294 ---
+float(2.3283064376229E-10)
+--- testing: 1 / 4294967295 ---
+float(2.3283064370808E-10)
+--- testing: 1 / 4294967293 ---
+float(2.328306438165E-10)
+--- testing: 1 / 9223372036854775806 ---
+float(1.0842021724855E-19)
+--- testing: 1 / 9.2233720368548E+18 ---
+float(1.0842021724855E-19)
+--- testing: 1 / -9223372036854775807 ---
+float(-1.0842021724855E-19)
+--- testing: 1 / -9.2233720368548E+18 ---
+float(-1.0842021724855E-19)
+--- testing: -1 / 9223372036854775807 ---
+float(-1.0842021724855E-19)
+--- testing: -1 / -9223372036854775808 ---
+float(1.0842021724855E-19)
+--- testing: -1 / 2147483647 ---
+float(-4.6566128752458E-10)
+--- testing: -1 / -2147483648 ---
+float(4.6566128730774E-10)
+--- testing: -1 / 9223372034707292160 ---
+float(-1.0842021727379E-19)
+--- testing: -1 / -9223372034707292160 ---
+float(1.0842021727379E-19)
+--- testing: -1 / 2147483648 ---
+float(-4.6566128730774E-10)
+--- testing: -1 / -2147483649 ---
+float(4.656612870909E-10)
+--- testing: -1 / 4294967294 ---
+float(-2.3283064376229E-10)
+--- testing: -1 / 4294967295 ---
+float(-2.3283064370808E-10)
+--- testing: -1 / 4294967293 ---
+float(-2.328306438165E-10)
+--- testing: -1 / 9223372036854775806 ---
+float(-1.0842021724855E-19)
+--- testing: -1 / 9.2233720368548E+18 ---
+float(-1.0842021724855E-19)
+--- testing: -1 / -9223372036854775807 ---
+float(1.0842021724855E-19)
+--- testing: -1 / -9.2233720368548E+18 ---
+float(1.0842021724855E-19)
+--- testing: 7 / 9223372036854775807 ---
+float(7.5894152073985E-19)
+--- testing: 7 / -9223372036854775808 ---
+float(-7.5894152073985E-19)
+--- testing: 7 / 2147483647 ---
+float(3.2596290126721E-9)
+--- testing: 7 / -2147483648 ---
+float(-3.2596290111542E-9)
+--- testing: 7 / 9223372034707292160 ---
+float(7.5894152091656E-19)
+--- testing: 7 / -9223372034707292160 ---
+float(-7.5894152091656E-19)
+--- testing: 7 / 2147483648 ---
+float(3.2596290111542E-9)
+--- testing: 7 / -2147483649 ---
+float(-3.2596290096363E-9)
+--- testing: 7 / 4294967294 ---
+float(1.629814506336E-9)
+--- testing: 7 / 4294967295 ---
+float(1.6298145059566E-9)
+--- testing: 7 / 4294967293 ---
+float(1.6298145067155E-9)
+--- testing: 7 / 9223372036854775806 ---
+float(7.5894152073985E-19)
+--- testing: 7 / 9.2233720368548E+18 ---
+float(7.5894152073985E-19)
+--- testing: 7 / -9223372036854775807 ---
+float(-7.5894152073985E-19)
+--- testing: 7 / -9.2233720368548E+18 ---
+float(-7.5894152073985E-19)
+--- testing: 9 / 9223372036854775807 ---
+float(9.7578195523695E-19)
+--- testing: 9 / -9223372036854775808 ---
+float(-9.7578195523695E-19)
+--- testing: 9 / 2147483647 ---
+float(4.1909515877212E-9)
+--- testing: 9 / -2147483648 ---
+float(-4.1909515857697E-9)
+--- testing: 9 / 9223372034707292160 ---
+float(9.7578195546415E-19)
+--- testing: 9 / -9223372034707292160 ---
+float(-9.7578195546415E-19)
+--- testing: 9 / 2147483648 ---
+float(4.1909515857697E-9)
+--- testing: 9 / -2147483649 ---
+float(-4.1909515838181E-9)
+--- testing: 9 / 4294967294 ---
+float(2.0954757938606E-9)
+--- testing: 9 / 4294967295 ---
+float(2.0954757933727E-9)
+--- testing: 9 / 4294967293 ---
+float(2.0954757943485E-9)
+--- testing: 9 / 9223372036854775806 ---
+float(9.7578195523695E-19)
+--- testing: 9 / 9.2233720368548E+18 ---
+float(9.7578195523695E-19)
+--- testing: 9 / -9223372036854775807 ---
+float(-9.7578195523695E-19)
+--- testing: 9 / -9.2233720368548E+18 ---
+float(-9.7578195523695E-19)
+--- testing: 65 / 9223372036854775807 ---
+float(7.0473141211558E-18)
+--- testing: 65 / -9223372036854775808 ---
+float(-7.0473141211558E-18)
+--- testing: 65 / 2147483647 ---
+float(3.0267983689098E-8)
+--- testing: 65 / -2147483648 ---
+float(-3.0267983675003E-8)
+--- testing: 65 / 9223372034707292160 ---
+float(7.0473141227966E-18)
+--- testing: 65 / -9223372034707292160 ---
+float(-7.0473141227966E-18)
+--- testing: 65 / 2147483648 ---
+float(3.0267983675003E-8)
+--- testing: 65 / -2147483649 ---
+float(-3.0267983660908E-8)
+--- testing: 65 / 4294967294 ---
+float(1.5133991844549E-8)
+--- testing: 65 / 4294967295 ---
+float(1.5133991841025E-8)
+--- testing: 65 / 4294967293 ---
+float(1.5133991848072E-8)
+--- testing: 65 / 9223372036854775806 ---
+float(7.0473141211558E-18)
+--- testing: 65 / 9.2233720368548E+18 ---
+float(7.0473141211558E-18)
+--- testing: 65 / -9223372036854775807 ---
+float(-7.0473141211558E-18)
+--- testing: 65 / -9.2233720368548E+18 ---
+float(-7.0473141211558E-18)
+--- testing: -44 / 9223372036854775807 ---
+float(-4.7704895589362E-18)
+--- testing: -44 / -9223372036854775808 ---
+float(4.7704895589362E-18)
+--- testing: -44 / 2147483647 ---
+float(-2.0489096651082E-8)
+--- testing: -44 / -2147483648 ---
+float(2.0489096641541E-8)
+--- testing: -44 / 9223372034707292160 ---
+float(-4.7704895600469E-18)
+--- testing: -44 / -9223372034707292160 ---
+float(4.7704895600469E-18)
+--- testing: -44 / 2147483648 ---
+float(-2.0489096641541E-8)
+--- testing: -44 / -2147483649 ---
+float(2.0489096632E-8)
+--- testing: -44 / 4294967294 ---
+float(-1.0244548325541E-8)
+--- testing: -44 / 4294967295 ---
+float(-1.0244548323156E-8)
+--- testing: -44 / 4294967293 ---
+float(-1.0244548327926E-8)
+--- testing: -44 / 9223372036854775806 ---
+float(-4.7704895589362E-18)
+--- testing: -44 / 9.2233720368548E+18 ---
+float(-4.7704895589362E-18)
+--- testing: -44 / -9223372036854775807 ---
+float(4.7704895589362E-18)
+--- testing: -44 / -9.2233720368548E+18 ---
+float(4.7704895589362E-18)
+--- testing: 2147483647 / 9223372036854775807 ---
+float(2.3283064354545E-10)
+--- testing: 2147483647 / -9223372036854775808 ---
+float(-2.3283064354545E-10)
+--- testing: 2147483647 / 2147483647 ---
+int(1)
+--- testing: 2147483647 / -2147483648 ---
+float(-0.99999999953434)
+--- testing: 2147483647 / 9223372034707292160 ---
+float(2.3283064359966E-10)
+--- testing: 2147483647 / -9223372034707292160 ---
+float(-2.3283064359966E-10)
+--- testing: 2147483647 / 2147483648 ---
+float(0.99999999953434)
+--- testing: 2147483647 / -2147483649 ---
+float(-0.99999999906868)
+--- testing: 2147483647 / 4294967294 ---
+float(0.5)
+--- testing: 2147483647 / 4294967295 ---
+float(0.49999999988358)
+--- testing: 2147483647 / 4294967293 ---
+float(0.50000000011642)
+--- testing: 2147483647 / 9223372036854775806 ---
+float(2.3283064354545E-10)
+--- testing: 2147483647 / 9.2233720368548E+18 ---
+float(2.3283064354545E-10)
+--- testing: 2147483647 / -9223372036854775807 ---
+float(-2.3283064354545E-10)
+--- testing: 2147483647 / -9.2233720368548E+18 ---
+float(-2.3283064354545E-10)
+--- testing: 9223372036854775807 / 9223372036854775807 ---
+int(1)
+--- testing: 9223372036854775807 / -9223372036854775808 ---
+float(-1)
+--- testing: 9223372036854775807 / 2147483647 ---
+float(4294967298)
+--- testing: 9223372036854775807 / -2147483648 ---
+float(-4294967296)
+--- testing: 9223372036854775807 / 9223372034707292160 ---
+float(1.0000000002328)
+--- testing: 9223372036854775807 / -9223372034707292160 ---
+float(-1.0000000002328)
+--- testing: 9223372036854775807 / 2147483648 ---
+float(4294967296)
+--- testing: 9223372036854775807 / -2147483649 ---
+float(-4294967294)
+--- testing: 9223372036854775807 / 4294967294 ---
+float(2147483649)
+--- testing: 9223372036854775807 / 4294967295 ---
+float(2147483648.5)
+--- testing: 9223372036854775807 / 4294967293 ---
+float(2147483649.5)
+--- testing: 9223372036854775807 / 9223372036854775806 ---
+float(1)
+--- testing: 9223372036854775807 / 9.2233720368548E+18 ---
+float(1)
+--- testing: 9223372036854775807 / -9223372036854775807 ---
+int(-1)
+--- testing: 9223372036854775807 / -9.2233720368548E+18 ---
+float(-1)
+===DONE===
diff --git a/tests/lang/operators/divide_variationStr.phpt b/tests/lang/operators/divide_variationStr.phpt
new file mode 100644
index 0000000..e48e9e1
--- /dev/null
+++ b/tests/lang/operators/divide_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test / operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' / '$otherVal' ---\n";   
+      var_dump($strVal/$otherVal);
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' / '0' ---
+bool(false)
+--- testing: '0' / '65' ---
+int(0)
+--- testing: '0' / '-44' ---
+int(0)
+--- testing: '0' / '1.2' ---
+float(0)
+--- testing: '0' / '-7.7' ---
+float(-0)
+--- testing: '0' / 'abc' ---
+bool(false)
+--- testing: '0' / '123abc' ---
+int(0)
+--- testing: '0' / '123e5' ---
+float(0)
+--- testing: '0' / '123e5xyz' ---
+float(0)
+--- testing: '0' / ' 123abc' ---
+int(0)
+--- testing: '0' / '123 abc' ---
+int(0)
+--- testing: '0' / '123abc ' ---
+int(0)
+--- testing: '0' / '3.4a' ---
+float(0)
+--- testing: '0' / 'a5.9' ---
+bool(false)
+--- testing: '65' / '0' ---
+bool(false)
+--- testing: '65' / '65' ---
+int(1)
+--- testing: '65' / '-44' ---
+float(-1.4772727272727)
+--- testing: '65' / '1.2' ---
+float(54.166666666667)
+--- testing: '65' / '-7.7' ---
+float(-8.4415584415584)
+--- testing: '65' / 'abc' ---
+bool(false)
+--- testing: '65' / '123abc' ---
+float(0.52845528455285)
+--- testing: '65' / '123e5' ---
+float(5.2845528455285E-6)
+--- testing: '65' / '123e5xyz' ---
+float(5.2845528455285E-6)
+--- testing: '65' / ' 123abc' ---
+float(0.52845528455285)
+--- testing: '65' / '123 abc' ---
+float(0.52845528455285)
+--- testing: '65' / '123abc ' ---
+float(0.52845528455285)
+--- testing: '65' / '3.4a' ---
+float(19.117647058824)
+--- testing: '65' / 'a5.9' ---
+bool(false)
+--- testing: '-44' / '0' ---
+bool(false)
+--- testing: '-44' / '65' ---
+float(-0.67692307692308)
+--- testing: '-44' / '-44' ---
+int(1)
+--- testing: '-44' / '1.2' ---
+float(-36.666666666667)
+--- testing: '-44' / '-7.7' ---
+float(5.7142857142857)
+--- testing: '-44' / 'abc' ---
+bool(false)
+--- testing: '-44' / '123abc' ---
+float(-0.35772357723577)
+--- testing: '-44' / '123e5' ---
+float(-3.5772357723577E-6)
+--- testing: '-44' / '123e5xyz' ---
+float(-3.5772357723577E-6)
+--- testing: '-44' / ' 123abc' ---
+float(-0.35772357723577)
+--- testing: '-44' / '123 abc' ---
+float(-0.35772357723577)
+--- testing: '-44' / '123abc ' ---
+float(-0.35772357723577)
+--- testing: '-44' / '3.4a' ---
+float(-12.941176470588)
+--- testing: '-44' / 'a5.9' ---
+bool(false)
+--- testing: '1.2' / '0' ---
+bool(false)
+--- testing: '1.2' / '65' ---
+float(0.018461538461538)
+--- testing: '1.2' / '-44' ---
+float(-0.027272727272727)
+--- testing: '1.2' / '1.2' ---
+float(1)
+--- testing: '1.2' / '-7.7' ---
+float(-0.15584415584416)
+--- testing: '1.2' / 'abc' ---
+bool(false)
+--- testing: '1.2' / '123abc' ---
+float(0.0097560975609756)
+--- testing: '1.2' / '123e5' ---
+float(9.7560975609756E-8)
+--- testing: '1.2' / '123e5xyz' ---
+float(9.7560975609756E-8)
+--- testing: '1.2' / ' 123abc' ---
+float(0.0097560975609756)
+--- testing: '1.2' / '123 abc' ---
+float(0.0097560975609756)
+--- testing: '1.2' / '123abc ' ---
+float(0.0097560975609756)
+--- testing: '1.2' / '3.4a' ---
+float(0.35294117647059)
+--- testing: '1.2' / 'a5.9' ---
+bool(false)
+--- testing: '-7.7' / '0' ---
+bool(false)
+--- testing: '-7.7' / '65' ---
+float(-0.11846153846154)
+--- testing: '-7.7' / '-44' ---
+float(0.175)
+--- testing: '-7.7' / '1.2' ---
+float(-6.4166666666667)
+--- testing: '-7.7' / '-7.7' ---
+float(1)
+--- testing: '-7.7' / 'abc' ---
+bool(false)
+--- testing: '-7.7' / '123abc' ---
+float(-0.06260162601626)
+--- testing: '-7.7' / '123e5' ---
+float(-6.260162601626E-7)
+--- testing: '-7.7' / '123e5xyz' ---
+float(-6.260162601626E-7)
+--- testing: '-7.7' / ' 123abc' ---
+float(-0.06260162601626)
+--- testing: '-7.7' / '123 abc' ---
+float(-0.06260162601626)
+--- testing: '-7.7' / '123abc ' ---
+float(-0.06260162601626)
+--- testing: '-7.7' / '3.4a' ---
+float(-2.2647058823529)
+--- testing: '-7.7' / 'a5.9' ---
+bool(false)
+--- testing: 'abc' / '0' ---
+bool(false)
+--- testing: 'abc' / '65' ---
+int(0)
+--- testing: 'abc' / '-44' ---
+int(0)
+--- testing: 'abc' / '1.2' ---
+float(0)
+--- testing: 'abc' / '-7.7' ---
+float(-0)
+--- testing: 'abc' / 'abc' ---
+bool(false)
+--- testing: 'abc' / '123abc' ---
+int(0)
+--- testing: 'abc' / '123e5' ---
+float(0)
+--- testing: 'abc' / '123e5xyz' ---
+float(0)
+--- testing: 'abc' / ' 123abc' ---
+int(0)
+--- testing: 'abc' / '123 abc' ---
+int(0)
+--- testing: 'abc' / '123abc ' ---
+int(0)
+--- testing: 'abc' / '3.4a' ---
+float(0)
+--- testing: 'abc' / 'a5.9' ---
+bool(false)
+--- testing: '123abc' / '0' ---
+bool(false)
+--- testing: '123abc' / '65' ---
+float(1.8923076923077)
+--- testing: '123abc' / '-44' ---
+float(-2.7954545454545)
+--- testing: '123abc' / '1.2' ---
+float(102.5)
+--- testing: '123abc' / '-7.7' ---
+float(-15.974025974026)
+--- testing: '123abc' / 'abc' ---
+bool(false)
+--- testing: '123abc' / '123abc' ---
+int(1)
+--- testing: '123abc' / '123e5' ---
+float(1.0E-5)
+--- testing: '123abc' / '123e5xyz' ---
+float(1.0E-5)
+--- testing: '123abc' / ' 123abc' ---
+int(1)
+--- testing: '123abc' / '123 abc' ---
+int(1)
+--- testing: '123abc' / '123abc ' ---
+int(1)
+--- testing: '123abc' / '3.4a' ---
+float(36.176470588235)
+--- testing: '123abc' / 'a5.9' ---
+bool(false)
+--- testing: '123e5' / '0' ---
+bool(false)
+--- testing: '123e5' / '65' ---
+float(189230.76923077)
+--- testing: '123e5' / '-44' ---
+float(-279545.45454545)
+--- testing: '123e5' / '1.2' ---
+float(10250000)
+--- testing: '123e5' / '-7.7' ---
+float(-1597402.5974026)
+--- testing: '123e5' / 'abc' ---
+bool(false)
+--- testing: '123e5' / '123abc' ---
+float(100000)
+--- testing: '123e5' / '123e5' ---
+float(1)
+--- testing: '123e5' / '123e5xyz' ---
+float(1)
+--- testing: '123e5' / ' 123abc' ---
+float(100000)
+--- testing: '123e5' / '123 abc' ---
+float(100000)
+--- testing: '123e5' / '123abc ' ---
+float(100000)
+--- testing: '123e5' / '3.4a' ---
+float(3617647.0588235)
+--- testing: '123e5' / 'a5.9' ---
+bool(false)
+--- testing: '123e5xyz' / '0' ---
+bool(false)
+--- testing: '123e5xyz' / '65' ---
+float(189230.76923077)
+--- testing: '123e5xyz' / '-44' ---
+float(-279545.45454545)
+--- testing: '123e5xyz' / '1.2' ---
+float(10250000)
+--- testing: '123e5xyz' / '-7.7' ---
+float(-1597402.5974026)
+--- testing: '123e5xyz' / 'abc' ---
+bool(false)
+--- testing: '123e5xyz' / '123abc' ---
+float(100000)
+--- testing: '123e5xyz' / '123e5' ---
+float(1)
+--- testing: '123e5xyz' / '123e5xyz' ---
+float(1)
+--- testing: '123e5xyz' / ' 123abc' ---
+float(100000)
+--- testing: '123e5xyz' / '123 abc' ---
+float(100000)
+--- testing: '123e5xyz' / '123abc ' ---
+float(100000)
+--- testing: '123e5xyz' / '3.4a' ---
+float(3617647.0588235)
+--- testing: '123e5xyz' / 'a5.9' ---
+bool(false)
+--- testing: ' 123abc' / '0' ---
+bool(false)
+--- testing: ' 123abc' / '65' ---
+float(1.8923076923077)
+--- testing: ' 123abc' / '-44' ---
+float(-2.7954545454545)
+--- testing: ' 123abc' / '1.2' ---
+float(102.5)
+--- testing: ' 123abc' / '-7.7' ---
+float(-15.974025974026)
+--- testing: ' 123abc' / 'abc' ---
+bool(false)
+--- testing: ' 123abc' / '123abc' ---
+int(1)
+--- testing: ' 123abc' / '123e5' ---
+float(1.0E-5)
+--- testing: ' 123abc' / '123e5xyz' ---
+float(1.0E-5)
+--- testing: ' 123abc' / ' 123abc' ---
+int(1)
+--- testing: ' 123abc' / '123 abc' ---
+int(1)
+--- testing: ' 123abc' / '123abc ' ---
+int(1)
+--- testing: ' 123abc' / '3.4a' ---
+float(36.176470588235)
+--- testing: ' 123abc' / 'a5.9' ---
+bool(false)
+--- testing: '123 abc' / '0' ---
+bool(false)
+--- testing: '123 abc' / '65' ---
+float(1.8923076923077)
+--- testing: '123 abc' / '-44' ---
+float(-2.7954545454545)
+--- testing: '123 abc' / '1.2' ---
+float(102.5)
+--- testing: '123 abc' / '-7.7' ---
+float(-15.974025974026)
+--- testing: '123 abc' / 'abc' ---
+bool(false)
+--- testing: '123 abc' / '123abc' ---
+int(1)
+--- testing: '123 abc' / '123e5' ---
+float(1.0E-5)
+--- testing: '123 abc' / '123e5xyz' ---
+float(1.0E-5)
+--- testing: '123 abc' / ' 123abc' ---
+int(1)
+--- testing: '123 abc' / '123 abc' ---
+int(1)
+--- testing: '123 abc' / '123abc ' ---
+int(1)
+--- testing: '123 abc' / '3.4a' ---
+float(36.176470588235)
+--- testing: '123 abc' / 'a5.9' ---
+bool(false)
+--- testing: '123abc ' / '0' ---
+bool(false)
+--- testing: '123abc ' / '65' ---
+float(1.8923076923077)
+--- testing: '123abc ' / '-44' ---
+float(-2.7954545454545)
+--- testing: '123abc ' / '1.2' ---
+float(102.5)
+--- testing: '123abc ' / '-7.7' ---
+float(-15.974025974026)
+--- testing: '123abc ' / 'abc' ---
+bool(false)
+--- testing: '123abc ' / '123abc' ---
+int(1)
+--- testing: '123abc ' / '123e5' ---
+float(1.0E-5)
+--- testing: '123abc ' / '123e5xyz' ---
+float(1.0E-5)
+--- testing: '123abc ' / ' 123abc' ---
+int(1)
+--- testing: '123abc ' / '123 abc' ---
+int(1)
+--- testing: '123abc ' / '123abc ' ---
+int(1)
+--- testing: '123abc ' / '3.4a' ---
+float(36.176470588235)
+--- testing: '123abc ' / 'a5.9' ---
+bool(false)
+--- testing: '3.4a' / '0' ---
+bool(false)
+--- testing: '3.4a' / '65' ---
+float(0.052307692307692)
+--- testing: '3.4a' / '-44' ---
+float(-0.077272727272727)
+--- testing: '3.4a' / '1.2' ---
+float(2.8333333333333)
+--- testing: '3.4a' / '-7.7' ---
+float(-0.44155844155844)
+--- testing: '3.4a' / 'abc' ---
+bool(false)
+--- testing: '3.4a' / '123abc' ---
+float(0.027642276422764)
+--- testing: '3.4a' / '123e5' ---
+float(2.7642276422764E-7)
+--- testing: '3.4a' / '123e5xyz' ---
+float(2.7642276422764E-7)
+--- testing: '3.4a' / ' 123abc' ---
+float(0.027642276422764)
+--- testing: '3.4a' / '123 abc' ---
+float(0.027642276422764)
+--- testing: '3.4a' / '123abc ' ---
+float(0.027642276422764)
+--- testing: '3.4a' / '3.4a' ---
+float(1)
+--- testing: '3.4a' / 'a5.9' ---
+bool(false)
+--- testing: 'a5.9' / '0' ---
+bool(false)
+--- testing: 'a5.9' / '65' ---
+int(0)
+--- testing: 'a5.9' / '-44' ---
+int(0)
+--- testing: 'a5.9' / '1.2' ---
+float(0)
+--- testing: 'a5.9' / '-7.7' ---
+float(-0)
+--- testing: 'a5.9' / 'abc' ---
+bool(false)
+--- testing: 'a5.9' / '123abc' ---
+int(0)
+--- testing: 'a5.9' / '123e5' ---
+float(0)
+--- testing: 'a5.9' / '123e5xyz' ---
+float(0)
+--- testing: 'a5.9' / ' 123abc' ---
+int(0)
+--- testing: 'a5.9' / '123 abc' ---
+int(0)
+--- testing: 'a5.9' / '123abc ' ---
+int(0)
+--- testing: 'a5.9' / '3.4a' ---
+float(0)
+--- testing: 'a5.9' / 'a5.9' ---
+bool(false)
+===DONE===
diff --git a/tests/lang/operators/modulus_basiclong_64bit.phpt b/tests/lang/operators/modulus_basiclong_64bit.phpt
new file mode 100644
index 0000000..d75ff1e
--- /dev/null
+++ b/tests/lang/operators/modulus_basiclong_64bit.phpt
@@ -0,0 +1,582 @@
+--TEST--
+Test % operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal % $otherVal ---\n";   
+      var_dump($longVal%$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal % $longVal ---\n";   
+      var_dump($otherVal%$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 % 0 ---
+bool(false)
+--- testing: 9223372036854775807 % 1 ---
+int(0)
+--- testing: 9223372036854775807 % -1 ---
+int(0)
+--- testing: 9223372036854775807 % 7 ---
+int(0)
+--- testing: 9223372036854775807 % 9 ---
+int(7)
+--- testing: 9223372036854775807 % 65 ---
+int(7)
+--- testing: 9223372036854775807 % -44 ---
+int(7)
+--- testing: 9223372036854775807 % 2147483647 ---
+int(1)
+--- testing: 9223372036854775807 % 9223372036854775807 ---
+int(0)
+--- testing: -9223372036854775808 % 0 ---
+bool(false)
+--- testing: -9223372036854775808 % 1 ---
+int(0)
+--- testing: -9223372036854775808 % -1 ---
+int(0)
+--- testing: -9223372036854775808 % 7 ---
+int(-1)
+--- testing: -9223372036854775808 % 9 ---
+int(-8)
+--- testing: -9223372036854775808 % 65 ---
+int(-8)
+--- testing: -9223372036854775808 % -44 ---
+int(-8)
+--- testing: -9223372036854775808 % 2147483647 ---
+int(-2)
+--- testing: -9223372036854775808 % 9223372036854775807 ---
+int(-1)
+--- testing: 2147483647 % 0 ---
+bool(false)
+--- testing: 2147483647 % 1 ---
+int(0)
+--- testing: 2147483647 % -1 ---
+int(0)
+--- testing: 2147483647 % 7 ---
+int(1)
+--- testing: 2147483647 % 9 ---
+int(1)
+--- testing: 2147483647 % 65 ---
+int(62)
+--- testing: 2147483647 % -44 ---
+int(23)
+--- testing: 2147483647 % 2147483647 ---
+int(0)
+--- testing: 2147483647 % 9223372036854775807 ---
+int(2147483647)
+--- testing: -2147483648 % 0 ---
+bool(false)
+--- testing: -2147483648 % 1 ---
+int(0)
+--- testing: -2147483648 % -1 ---
+int(0)
+--- testing: -2147483648 % 7 ---
+int(-2)
+--- testing: -2147483648 % 9 ---
+int(-2)
+--- testing: -2147483648 % 65 ---
+int(-63)
+--- testing: -2147483648 % -44 ---
+int(-24)
+--- testing: -2147483648 % 2147483647 ---
+int(-1)
+--- testing: -2147483648 % 9223372036854775807 ---
+int(-2147483648)
+--- testing: 9223372034707292160 % 0 ---
+bool(false)
+--- testing: 9223372034707292160 % 1 ---
+int(0)
+--- testing: 9223372034707292160 % -1 ---
+int(0)
+--- testing: 9223372034707292160 % 7 ---
+int(6)
+--- testing: 9223372034707292160 % 9 ---
+int(6)
+--- testing: 9223372034707292160 % 65 ---
+int(10)
+--- testing: 9223372034707292160 % -44 ---
+int(28)
+--- testing: 9223372034707292160 % 2147483647 ---
+int(1)
+--- testing: 9223372034707292160 % 9223372036854775807 ---
+int(9223372034707292160)
+--- testing: -9223372034707292160 % 0 ---
+bool(false)
+--- testing: -9223372034707292160 % 1 ---
+int(0)
+--- testing: -9223372034707292160 % -1 ---
+int(0)
+--- testing: -9223372034707292160 % 7 ---
+int(-6)
+--- testing: -9223372034707292160 % 9 ---
+int(-6)
+--- testing: -9223372034707292160 % 65 ---
+int(-10)
+--- testing: -9223372034707292160 % -44 ---
+int(-28)
+--- testing: -9223372034707292160 % 2147483647 ---
+int(-1)
+--- testing: -9223372034707292160 % 9223372036854775807 ---
+int(-9223372034707292160)
+--- testing: 2147483648 % 0 ---
+bool(false)
+--- testing: 2147483648 % 1 ---
+int(0)
+--- testing: 2147483648 % -1 ---
+int(0)
+--- testing: 2147483648 % 7 ---
+int(2)
+--- testing: 2147483648 % 9 ---
+int(2)
+--- testing: 2147483648 % 65 ---
+int(63)
+--- testing: 2147483648 % -44 ---
+int(24)
+--- testing: 2147483648 % 2147483647 ---
+int(1)
+--- testing: 2147483648 % 9223372036854775807 ---
+int(2147483648)
+--- testing: -2147483649 % 0 ---
+bool(false)
+--- testing: -2147483649 % 1 ---
+int(0)
+--- testing: -2147483649 % -1 ---
+int(0)
+--- testing: -2147483649 % 7 ---
+int(-3)
+--- testing: -2147483649 % 9 ---
+int(-3)
+--- testing: -2147483649 % 65 ---
+int(-64)
+--- testing: -2147483649 % -44 ---
+int(-25)
+--- testing: -2147483649 % 2147483647 ---
+int(-2)
+--- testing: -2147483649 % 9223372036854775807 ---
+int(-2147483649)
+--- testing: 4294967294 % 0 ---
+bool(false)
+--- testing: 4294967294 % 1 ---
+int(0)
+--- testing: 4294967294 % -1 ---
+int(0)
+--- testing: 4294967294 % 7 ---
+int(2)
+--- testing: 4294967294 % 9 ---
+int(2)
+--- testing: 4294967294 % 65 ---
+int(59)
+--- testing: 4294967294 % -44 ---
+int(2)
+--- testing: 4294967294 % 2147483647 ---
+int(0)
+--- testing: 4294967294 % 9223372036854775807 ---
+int(4294967294)
+--- testing: 4294967295 % 0 ---
+bool(false)
+--- testing: 4294967295 % 1 ---
+int(0)
+--- testing: 4294967295 % -1 ---
+int(0)
+--- testing: 4294967295 % 7 ---
+int(3)
+--- testing: 4294967295 % 9 ---
+int(3)
+--- testing: 4294967295 % 65 ---
+int(60)
+--- testing: 4294967295 % -44 ---
+int(3)
+--- testing: 4294967295 % 2147483647 ---
+int(1)
+--- testing: 4294967295 % 9223372036854775807 ---
+int(4294967295)
+--- testing: 4294967293 % 0 ---
+bool(false)
+--- testing: 4294967293 % 1 ---
+int(0)
+--- testing: 4294967293 % -1 ---
+int(0)
+--- testing: 4294967293 % 7 ---
+int(1)
+--- testing: 4294967293 % 9 ---
+int(1)
+--- testing: 4294967293 % 65 ---
+int(58)
+--- testing: 4294967293 % -44 ---
+int(1)
+--- testing: 4294967293 % 2147483647 ---
+int(2147483646)
+--- testing: 4294967293 % 9223372036854775807 ---
+int(4294967293)
+--- testing: 9223372036854775806 % 0 ---
+bool(false)
+--- testing: 9223372036854775806 % 1 ---
+int(0)
+--- testing: 9223372036854775806 % -1 ---
+int(0)
+--- testing: 9223372036854775806 % 7 ---
+int(6)
+--- testing: 9223372036854775806 % 9 ---
+int(6)
+--- testing: 9223372036854775806 % 65 ---
+int(6)
+--- testing: 9223372036854775806 % -44 ---
+int(6)
+--- testing: 9223372036854775806 % 2147483647 ---
+int(0)
+--- testing: 9223372036854775806 % 9223372036854775807 ---
+int(9223372036854775806)
+--- testing: 9.2233720368548E+18 % 0 ---
+bool(false)
+--- testing: 9.2233720368548E+18 % 1 ---
+int(0)
+--- testing: 9.2233720368548E+18 % -1 ---
+int(0)
+--- testing: 9.2233720368548E+18 % 7 ---
+int(-1)
+--- testing: 9.2233720368548E+18 % 9 ---
+int(-8)
+--- testing: 9.2233720368548E+18 % 65 ---
+int(-8)
+--- testing: 9.2233720368548E+18 % -44 ---
+int(-8)
+--- testing: 9.2233720368548E+18 % 2147483647 ---
+int(-2)
+--- testing: 9.2233720368548E+18 % 9223372036854775807 ---
+int(-1)
+--- testing: -9223372036854775807 % 0 ---
+bool(false)
+--- testing: -9223372036854775807 % 1 ---
+int(0)
+--- testing: -9223372036854775807 % -1 ---
+int(0)
+--- testing: -9223372036854775807 % 7 ---
+int(0)
+--- testing: -9223372036854775807 % 9 ---
+int(-7)
+--- testing: -9223372036854775807 % 65 ---
+int(-7)
+--- testing: -9223372036854775807 % -44 ---
+int(-7)
+--- testing: -9223372036854775807 % 2147483647 ---
+int(-1)
+--- testing: -9223372036854775807 % 9223372036854775807 ---
+int(0)
+--- testing: -9.2233720368548E+18 % 0 ---
+bool(false)
+--- testing: -9.2233720368548E+18 % 1 ---
+int(0)
+--- testing: -9.2233720368548E+18 % -1 ---
+int(0)
+--- testing: -9.2233720368548E+18 % 7 ---
+int(-1)
+--- testing: -9.2233720368548E+18 % 9 ---
+int(-8)
+--- testing: -9.2233720368548E+18 % 65 ---
+int(-8)
+--- testing: -9.2233720368548E+18 % -44 ---
+int(-8)
+--- testing: -9.2233720368548E+18 % 2147483647 ---
+int(-2)
+--- testing: -9.2233720368548E+18 % 9223372036854775807 ---
+int(-1)
+--- testing: 0 % 9223372036854775807 ---
+int(0)
+--- testing: 0 % -9223372036854775808 ---
+int(0)
+--- testing: 0 % 2147483647 ---
+int(0)
+--- testing: 0 % -2147483648 ---
+int(0)
+--- testing: 0 % 9223372034707292160 ---
+int(0)
+--- testing: 0 % -9223372034707292160 ---
+int(0)
+--- testing: 0 % 2147483648 ---
+int(0)
+--- testing: 0 % -2147483649 ---
+int(0)
+--- testing: 0 % 4294967294 ---
+int(0)
+--- testing: 0 % 4294967295 ---
+int(0)
+--- testing: 0 % 4294967293 ---
+int(0)
+--- testing: 0 % 9223372036854775806 ---
+int(0)
+--- testing: 0 % 9.2233720368548E+18 ---
+int(0)
+--- testing: 0 % -9223372036854775807 ---
+int(0)
+--- testing: 0 % -9.2233720368548E+18 ---
+int(0)
+--- testing: 1 % 9223372036854775807 ---
+int(1)
+--- testing: 1 % -9223372036854775808 ---
+int(1)
+--- testing: 1 % 2147483647 ---
+int(1)
+--- testing: 1 % -2147483648 ---
+int(1)
+--- testing: 1 % 9223372034707292160 ---
+int(1)
+--- testing: 1 % -9223372034707292160 ---
+int(1)
+--- testing: 1 % 2147483648 ---
+int(1)
+--- testing: 1 % -2147483649 ---
+int(1)
+--- testing: 1 % 4294967294 ---
+int(1)
+--- testing: 1 % 4294967295 ---
+int(1)
+--- testing: 1 % 4294967293 ---
+int(1)
+--- testing: 1 % 9223372036854775806 ---
+int(1)
+--- testing: 1 % 9.2233720368548E+18 ---
+int(1)
+--- testing: 1 % -9223372036854775807 ---
+int(1)
+--- testing: 1 % -9.2233720368548E+18 ---
+int(1)
+--- testing: -1 % 9223372036854775807 ---
+int(-1)
+--- testing: -1 % -9223372036854775808 ---
+int(-1)
+--- testing: -1 % 2147483647 ---
+int(-1)
+--- testing: -1 % -2147483648 ---
+int(-1)
+--- testing: -1 % 9223372034707292160 ---
+int(-1)
+--- testing: -1 % -9223372034707292160 ---
+int(-1)
+--- testing: -1 % 2147483648 ---
+int(-1)
+--- testing: -1 % -2147483649 ---
+int(-1)
+--- testing: -1 % 4294967294 ---
+int(-1)
+--- testing: -1 % 4294967295 ---
+int(-1)
+--- testing: -1 % 4294967293 ---
+int(-1)
+--- testing: -1 % 9223372036854775806 ---
+int(-1)
+--- testing: -1 % 9.2233720368548E+18 ---
+int(-1)
+--- testing: -1 % -9223372036854775807 ---
+int(-1)
+--- testing: -1 % -9.2233720368548E+18 ---
+int(-1)
+--- testing: 7 % 9223372036854775807 ---
+int(7)
+--- testing: 7 % -9223372036854775808 ---
+int(7)
+--- testing: 7 % 2147483647 ---
+int(7)
+--- testing: 7 % -2147483648 ---
+int(7)
+--- testing: 7 % 9223372034707292160 ---
+int(7)
+--- testing: 7 % -9223372034707292160 ---
+int(7)
+--- testing: 7 % 2147483648 ---
+int(7)
+--- testing: 7 % -2147483649 ---
+int(7)
+--- testing: 7 % 4294967294 ---
+int(7)
+--- testing: 7 % 4294967295 ---
+int(7)
+--- testing: 7 % 4294967293 ---
+int(7)
+--- testing: 7 % 9223372036854775806 ---
+int(7)
+--- testing: 7 % 9.2233720368548E+18 ---
+int(7)
+--- testing: 7 % -9223372036854775807 ---
+int(7)
+--- testing: 7 % -9.2233720368548E+18 ---
+int(7)
+--- testing: 9 % 9223372036854775807 ---
+int(9)
+--- testing: 9 % -9223372036854775808 ---
+int(9)
+--- testing: 9 % 2147483647 ---
+int(9)
+--- testing: 9 % -2147483648 ---
+int(9)
+--- testing: 9 % 9223372034707292160 ---
+int(9)
+--- testing: 9 % -9223372034707292160 ---
+int(9)
+--- testing: 9 % 2147483648 ---
+int(9)
+--- testing: 9 % -2147483649 ---
+int(9)
+--- testing: 9 % 4294967294 ---
+int(9)
+--- testing: 9 % 4294967295 ---
+int(9)
+--- testing: 9 % 4294967293 ---
+int(9)
+--- testing: 9 % 9223372036854775806 ---
+int(9)
+--- testing: 9 % 9.2233720368548E+18 ---
+int(9)
+--- testing: 9 % -9223372036854775807 ---
+int(9)
+--- testing: 9 % -9.2233720368548E+18 ---
+int(9)
+--- testing: 65 % 9223372036854775807 ---
+int(65)
+--- testing: 65 % -9223372036854775808 ---
+int(65)
+--- testing: 65 % 2147483647 ---
+int(65)
+--- testing: 65 % -2147483648 ---
+int(65)
+--- testing: 65 % 9223372034707292160 ---
+int(65)
+--- testing: 65 % -9223372034707292160 ---
+int(65)
+--- testing: 65 % 2147483648 ---
+int(65)
+--- testing: 65 % -2147483649 ---
+int(65)
+--- testing: 65 % 4294967294 ---
+int(65)
+--- testing: 65 % 4294967295 ---
+int(65)
+--- testing: 65 % 4294967293 ---
+int(65)
+--- testing: 65 % 9223372036854775806 ---
+int(65)
+--- testing: 65 % 9.2233720368548E+18 ---
+int(65)
+--- testing: 65 % -9223372036854775807 ---
+int(65)
+--- testing: 65 % -9.2233720368548E+18 ---
+int(65)
+--- testing: -44 % 9223372036854775807 ---
+int(-44)
+--- testing: -44 % -9223372036854775808 ---
+int(-44)
+--- testing: -44 % 2147483647 ---
+int(-44)
+--- testing: -44 % -2147483648 ---
+int(-44)
+--- testing: -44 % 9223372034707292160 ---
+int(-44)
+--- testing: -44 % -9223372034707292160 ---
+int(-44)
+--- testing: -44 % 2147483648 ---
+int(-44)
+--- testing: -44 % -2147483649 ---
+int(-44)
+--- testing: -44 % 4294967294 ---
+int(-44)
+--- testing: -44 % 4294967295 ---
+int(-44)
+--- testing: -44 % 4294967293 ---
+int(-44)
+--- testing: -44 % 9223372036854775806 ---
+int(-44)
+--- testing: -44 % 9.2233720368548E+18 ---
+int(-44)
+--- testing: -44 % -9223372036854775807 ---
+int(-44)
+--- testing: -44 % -9.2233720368548E+18 ---
+int(-44)
+--- testing: 2147483647 % 9223372036854775807 ---
+int(2147483647)
+--- testing: 2147483647 % -9223372036854775808 ---
+int(2147483647)
+--- testing: 2147483647 % 2147483647 ---
+int(0)
+--- testing: 2147483647 % -2147483648 ---
+int(2147483647)
+--- testing: 2147483647 % 9223372034707292160 ---
+int(2147483647)
+--- testing: 2147483647 % -9223372034707292160 ---
+int(2147483647)
+--- testing: 2147483647 % 2147483648 ---
+int(2147483647)
+--- testing: 2147483647 % -2147483649 ---
+int(2147483647)
+--- testing: 2147483647 % 4294967294 ---
+int(2147483647)
+--- testing: 2147483647 % 4294967295 ---
+int(2147483647)
+--- testing: 2147483647 % 4294967293 ---
+int(2147483647)
+--- testing: 2147483647 % 9223372036854775806 ---
+int(2147483647)
+--- testing: 2147483647 % 9.2233720368548E+18 ---
+int(2147483647)
+--- testing: 2147483647 % -9223372036854775807 ---
+int(2147483647)
+--- testing: 2147483647 % -9.2233720368548E+18 ---
+int(2147483647)
+--- testing: 9223372036854775807 % 9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775807 % -9223372036854775808 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 % 2147483647 ---
+int(1)
+--- testing: 9223372036854775807 % -2147483648 ---
+int(2147483647)
+--- testing: 9223372036854775807 % 9223372034707292160 ---
+int(2147483647)
+--- testing: 9223372036854775807 % -9223372034707292160 ---
+int(2147483647)
+--- testing: 9223372036854775807 % 2147483648 ---
+int(2147483647)
+--- testing: 9223372036854775807 % -2147483649 ---
+int(1)
+--- testing: 9223372036854775807 % 4294967294 ---
+int(1)
+--- testing: 9223372036854775807 % 4294967295 ---
+int(2147483647)
+--- testing: 9223372036854775807 % 4294967293 ---
+int(2147483650)
+--- testing: 9223372036854775807 % 9223372036854775806 ---
+int(1)
+--- testing: 9223372036854775807 % 9.2233720368548E+18 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 % -9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775807 % -9.2233720368548E+18 ---
+int(9223372036854775807)
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/modulus_variationStr.phpt b/tests/lang/operators/modulus_variationStr.phpt
new file mode 100644
index 0000000..7b3ce76
--- /dev/null
+++ b/tests/lang/operators/modulus_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test % operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' % '$otherVal' ---\n";   
+      var_dump($strVal%$otherVal);
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' % '0' ---
+bool(false)
+--- testing: '0' % '65' ---
+int(0)
+--- testing: '0' % '-44' ---
+int(0)
+--- testing: '0' % '1.2' ---
+int(0)
+--- testing: '0' % '-7.7' ---
+int(0)
+--- testing: '0' % 'abc' ---
+bool(false)
+--- testing: '0' % '123abc' ---
+int(0)
+--- testing: '0' % '123e5' ---
+int(0)
+--- testing: '0' % '123e5xyz' ---
+int(0)
+--- testing: '0' % ' 123abc' ---
+int(0)
+--- testing: '0' % '123 abc' ---
+int(0)
+--- testing: '0' % '123abc ' ---
+int(0)
+--- testing: '0' % '3.4a' ---
+int(0)
+--- testing: '0' % 'a5.9' ---
+bool(false)
+--- testing: '65' % '0' ---
+bool(false)
+--- testing: '65' % '65' ---
+int(0)
+--- testing: '65' % '-44' ---
+int(21)
+--- testing: '65' % '1.2' ---
+int(0)
+--- testing: '65' % '-7.7' ---
+int(2)
+--- testing: '65' % 'abc' ---
+bool(false)
+--- testing: '65' % '123abc' ---
+int(65)
+--- testing: '65' % '123e5' ---
+int(65)
+--- testing: '65' % '123e5xyz' ---
+int(65)
+--- testing: '65' % ' 123abc' ---
+int(65)
+--- testing: '65' % '123 abc' ---
+int(65)
+--- testing: '65' % '123abc ' ---
+int(65)
+--- testing: '65' % '3.4a' ---
+int(2)
+--- testing: '65' % 'a5.9' ---
+bool(false)
+--- testing: '-44' % '0' ---
+bool(false)
+--- testing: '-44' % '65' ---
+int(-44)
+--- testing: '-44' % '-44' ---
+int(0)
+--- testing: '-44' % '1.2' ---
+int(0)
+--- testing: '-44' % '-7.7' ---
+int(-2)
+--- testing: '-44' % 'abc' ---
+bool(false)
+--- testing: '-44' % '123abc' ---
+int(-44)
+--- testing: '-44' % '123e5' ---
+int(-44)
+--- testing: '-44' % '123e5xyz' ---
+int(-44)
+--- testing: '-44' % ' 123abc' ---
+int(-44)
+--- testing: '-44' % '123 abc' ---
+int(-44)
+--- testing: '-44' % '123abc ' ---
+int(-44)
+--- testing: '-44' % '3.4a' ---
+int(-2)
+--- testing: '-44' % 'a5.9' ---
+bool(false)
+--- testing: '1.2' % '0' ---
+bool(false)
+--- testing: '1.2' % '65' ---
+int(1)
+--- testing: '1.2' % '-44' ---
+int(1)
+--- testing: '1.2' % '1.2' ---
+int(0)
+--- testing: '1.2' % '-7.7' ---
+int(1)
+--- testing: '1.2' % 'abc' ---
+bool(false)
+--- testing: '1.2' % '123abc' ---
+int(1)
+--- testing: '1.2' % '123e5' ---
+int(1)
+--- testing: '1.2' % '123e5xyz' ---
+int(1)
+--- testing: '1.2' % ' 123abc' ---
+int(1)
+--- testing: '1.2' % '123 abc' ---
+int(1)
+--- testing: '1.2' % '123abc ' ---
+int(1)
+--- testing: '1.2' % '3.4a' ---
+int(1)
+--- testing: '1.2' % 'a5.9' ---
+bool(false)
+--- testing: '-7.7' % '0' ---
+bool(false)
+--- testing: '-7.7' % '65' ---
+int(-7)
+--- testing: '-7.7' % '-44' ---
+int(-7)
+--- testing: '-7.7' % '1.2' ---
+int(0)
+--- testing: '-7.7' % '-7.7' ---
+int(0)
+--- testing: '-7.7' % 'abc' ---
+bool(false)
+--- testing: '-7.7' % '123abc' ---
+int(-7)
+--- testing: '-7.7' % '123e5' ---
+int(-7)
+--- testing: '-7.7' % '123e5xyz' ---
+int(-7)
+--- testing: '-7.7' % ' 123abc' ---
+int(-7)
+--- testing: '-7.7' % '123 abc' ---
+int(-7)
+--- testing: '-7.7' % '123abc ' ---
+int(-7)
+--- testing: '-7.7' % '3.4a' ---
+int(-1)
+--- testing: '-7.7' % 'a5.9' ---
+bool(false)
+--- testing: 'abc' % '0' ---
+bool(false)
+--- testing: 'abc' % '65' ---
+int(0)
+--- testing: 'abc' % '-44' ---
+int(0)
+--- testing: 'abc' % '1.2' ---
+int(0)
+--- testing: 'abc' % '-7.7' ---
+int(0)
+--- testing: 'abc' % 'abc' ---
+bool(false)
+--- testing: 'abc' % '123abc' ---
+int(0)
+--- testing: 'abc' % '123e5' ---
+int(0)
+--- testing: 'abc' % '123e5xyz' ---
+int(0)
+--- testing: 'abc' % ' 123abc' ---
+int(0)
+--- testing: 'abc' % '123 abc' ---
+int(0)
+--- testing: 'abc' % '123abc ' ---
+int(0)
+--- testing: 'abc' % '3.4a' ---
+int(0)
+--- testing: 'abc' % 'a5.9' ---
+bool(false)
+--- testing: '123abc' % '0' ---
+bool(false)
+--- testing: '123abc' % '65' ---
+int(58)
+--- testing: '123abc' % '-44' ---
+int(35)
+--- testing: '123abc' % '1.2' ---
+int(0)
+--- testing: '123abc' % '-7.7' ---
+int(4)
+--- testing: '123abc' % 'abc' ---
+bool(false)
+--- testing: '123abc' % '123abc' ---
+int(0)
+--- testing: '123abc' % '123e5' ---
+int(0)
+--- testing: '123abc' % '123e5xyz' ---
+int(0)
+--- testing: '123abc' % ' 123abc' ---
+int(0)
+--- testing: '123abc' % '123 abc' ---
+int(0)
+--- testing: '123abc' % '123abc ' ---
+int(0)
+--- testing: '123abc' % '3.4a' ---
+int(0)
+--- testing: '123abc' % 'a5.9' ---
+bool(false)
+--- testing: '123e5' % '0' ---
+bool(false)
+--- testing: '123e5' % '65' ---
+int(58)
+--- testing: '123e5' % '-44' ---
+int(35)
+--- testing: '123e5' % '1.2' ---
+int(0)
+--- testing: '123e5' % '-7.7' ---
+int(4)
+--- testing: '123e5' % 'abc' ---
+bool(false)
+--- testing: '123e5' % '123abc' ---
+int(0)
+--- testing: '123e5' % '123e5' ---
+int(0)
+--- testing: '123e5' % '123e5xyz' ---
+int(0)
+--- testing: '123e5' % ' 123abc' ---
+int(0)
+--- testing: '123e5' % '123 abc' ---
+int(0)
+--- testing: '123e5' % '123abc ' ---
+int(0)
+--- testing: '123e5' % '3.4a' ---
+int(0)
+--- testing: '123e5' % 'a5.9' ---
+bool(false)
+--- testing: '123e5xyz' % '0' ---
+bool(false)
+--- testing: '123e5xyz' % '65' ---
+int(58)
+--- testing: '123e5xyz' % '-44' ---
+int(35)
+--- testing: '123e5xyz' % '1.2' ---
+int(0)
+--- testing: '123e5xyz' % '-7.7' ---
+int(4)
+--- testing: '123e5xyz' % 'abc' ---
+bool(false)
+--- testing: '123e5xyz' % '123abc' ---
+int(0)
+--- testing: '123e5xyz' % '123e5' ---
+int(0)
+--- testing: '123e5xyz' % '123e5xyz' ---
+int(0)
+--- testing: '123e5xyz' % ' 123abc' ---
+int(0)
+--- testing: '123e5xyz' % '123 abc' ---
+int(0)
+--- testing: '123e5xyz' % '123abc ' ---
+int(0)
+--- testing: '123e5xyz' % '3.4a' ---
+int(0)
+--- testing: '123e5xyz' % 'a5.9' ---
+bool(false)
+--- testing: ' 123abc' % '0' ---
+bool(false)
+--- testing: ' 123abc' % '65' ---
+int(58)
+--- testing: ' 123abc' % '-44' ---
+int(35)
+--- testing: ' 123abc' % '1.2' ---
+int(0)
+--- testing: ' 123abc' % '-7.7' ---
+int(4)
+--- testing: ' 123abc' % 'abc' ---
+bool(false)
+--- testing: ' 123abc' % '123abc' ---
+int(0)
+--- testing: ' 123abc' % '123e5' ---
+int(0)
+--- testing: ' 123abc' % '123e5xyz' ---
+int(0)
+--- testing: ' 123abc' % ' 123abc' ---
+int(0)
+--- testing: ' 123abc' % '123 abc' ---
+int(0)
+--- testing: ' 123abc' % '123abc ' ---
+int(0)
+--- testing: ' 123abc' % '3.4a' ---
+int(0)
+--- testing: ' 123abc' % 'a5.9' ---
+bool(false)
+--- testing: '123 abc' % '0' ---
+bool(false)
+--- testing: '123 abc' % '65' ---
+int(58)
+--- testing: '123 abc' % '-44' ---
+int(35)
+--- testing: '123 abc' % '1.2' ---
+int(0)
+--- testing: '123 abc' % '-7.7' ---
+int(4)
+--- testing: '123 abc' % 'abc' ---
+bool(false)
+--- testing: '123 abc' % '123abc' ---
+int(0)
+--- testing: '123 abc' % '123e5' ---
+int(0)
+--- testing: '123 abc' % '123e5xyz' ---
+int(0)
+--- testing: '123 abc' % ' 123abc' ---
+int(0)
+--- testing: '123 abc' % '123 abc' ---
+int(0)
+--- testing: '123 abc' % '123abc ' ---
+int(0)
+--- testing: '123 abc' % '3.4a' ---
+int(0)
+--- testing: '123 abc' % 'a5.9' ---
+bool(false)
+--- testing: '123abc ' % '0' ---
+bool(false)
+--- testing: '123abc ' % '65' ---
+int(58)
+--- testing: '123abc ' % '-44' ---
+int(35)
+--- testing: '123abc ' % '1.2' ---
+int(0)
+--- testing: '123abc ' % '-7.7' ---
+int(4)
+--- testing: '123abc ' % 'abc' ---
+bool(false)
+--- testing: '123abc ' % '123abc' ---
+int(0)
+--- testing: '123abc ' % '123e5' ---
+int(0)
+--- testing: '123abc ' % '123e5xyz' ---
+int(0)
+--- testing: '123abc ' % ' 123abc' ---
+int(0)
+--- testing: '123abc ' % '123 abc' ---
+int(0)
+--- testing: '123abc ' % '123abc ' ---
+int(0)
+--- testing: '123abc ' % '3.4a' ---
+int(0)
+--- testing: '123abc ' % 'a5.9' ---
+bool(false)
+--- testing: '3.4a' % '0' ---
+bool(false)
+--- testing: '3.4a' % '65' ---
+int(3)
+--- testing: '3.4a' % '-44' ---
+int(3)
+--- testing: '3.4a' % '1.2' ---
+int(0)
+--- testing: '3.4a' % '-7.7' ---
+int(3)
+--- testing: '3.4a' % 'abc' ---
+bool(false)
+--- testing: '3.4a' % '123abc' ---
+int(3)
+--- testing: '3.4a' % '123e5' ---
+int(3)
+--- testing: '3.4a' % '123e5xyz' ---
+int(3)
+--- testing: '3.4a' % ' 123abc' ---
+int(3)
+--- testing: '3.4a' % '123 abc' ---
+int(3)
+--- testing: '3.4a' % '123abc ' ---
+int(3)
+--- testing: '3.4a' % '3.4a' ---
+int(0)
+--- testing: '3.4a' % 'a5.9' ---
+bool(false)
+--- testing: 'a5.9' % '0' ---
+bool(false)
+--- testing: 'a5.9' % '65' ---
+int(0)
+--- testing: 'a5.9' % '-44' ---
+int(0)
+--- testing: 'a5.9' % '1.2' ---
+int(0)
+--- testing: 'a5.9' % '-7.7' ---
+int(0)
+--- testing: 'a5.9' % 'abc' ---
+bool(false)
+--- testing: 'a5.9' % '123abc' ---
+int(0)
+--- testing: 'a5.9' % '123e5' ---
+int(0)
+--- testing: 'a5.9' % '123e5xyz' ---
+int(0)
+--- testing: 'a5.9' % ' 123abc' ---
+int(0)
+--- testing: 'a5.9' % '123 abc' ---
+int(0)
+--- testing: 'a5.9' % '123abc ' ---
+int(0)
+--- testing: 'a5.9' % '3.4a' ---
+int(0)
+--- testing: 'a5.9' % 'a5.9' ---
+bool(false)
+===DONE===
diff --git a/tests/lang/operators/multiply_basiclong_64bit.phpt b/tests/lang/operators/multiply_basiclong_64bit.phpt
new file mode 100644
index 0000000..4c7077b
--- /dev/null
+++ b/tests/lang/operators/multiply_basiclong_64bit.phpt
@@ -0,0 +1,582 @@
+--TEST--
+Test * operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal * $otherVal ---\n";   
+      var_dump($longVal*$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal * $longVal ---\n";   
+      var_dump($otherVal*$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 * 0 ---
+int(0)
+--- testing: 9223372036854775807 * 1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 * -1 ---
+int(-9223372036854775807)
+--- testing: 9223372036854775807 * 7 ---
+float(6.4563604257983E+19)
+--- testing: 9223372036854775807 * 9 ---
+float(8.3010348331693E+19)
+--- testing: 9223372036854775807 * 65 ---
+float(5.9951918239556E+20)
+--- testing: 9223372036854775807 * -44 ---
+float(-4.0582836962161E+20)
+--- testing: 9223372036854775807 * 2147483647 ---
+float(1.9807040619343E+28)
+--- testing: 9223372036854775807 * 9223372036854775807 ---
+float(8.5070591730235E+37)
+--- testing: -9223372036854775808 * 0 ---
+int(0)
+--- testing: -9223372036854775808 * 1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 * -1 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 * 7 ---
+float(-6.4563604257983E+19)
+--- testing: -9223372036854775808 * 9 ---
+float(-8.3010348331693E+19)
+--- testing: -9223372036854775808 * 65 ---
+float(-5.9951918239556E+20)
+--- testing: -9223372036854775808 * -44 ---
+float(4.0582836962161E+20)
+--- testing: -9223372036854775808 * 2147483647 ---
+float(-1.9807040619343E+28)
+--- testing: -9223372036854775808 * 9223372036854775807 ---
+float(-8.5070591730235E+37)
+--- testing: 2147483647 * 0 ---
+int(0)
+--- testing: 2147483647 * 1 ---
+int(2147483647)
+--- testing: 2147483647 * -1 ---
+int(-2147483647)
+--- testing: 2147483647 * 7 ---
+int(15032385529)
+--- testing: 2147483647 * 9 ---
+int(19327352823)
+--- testing: 2147483647 * 65 ---
+int(139586437055)
+--- testing: 2147483647 * -44 ---
+int(-94489280468)
+--- testing: 2147483647 * 2147483647 ---
+int(4611686014132420609)
+--- testing: 2147483647 * 9223372036854775807 ---
+float(1.9807040619343E+28)
+--- testing: -2147483648 * 0 ---
+int(0)
+--- testing: -2147483648 * 1 ---
+int(-2147483648)
+--- testing: -2147483648 * -1 ---
+int(2147483648)
+--- testing: -2147483648 * 7 ---
+int(-15032385536)
+--- testing: -2147483648 * 9 ---
+int(-19327352832)
+--- testing: -2147483648 * 65 ---
+int(-139586437120)
+--- testing: -2147483648 * -44 ---
+int(94489280512)
+--- testing: -2147483648 * 2147483647 ---
+int(-4611686016279904256)
+--- testing: -2147483648 * 9223372036854775807 ---
+float(-1.9807040628566E+28)
+--- testing: 9223372034707292160 * 0 ---
+int(0)
+--- testing: 9223372034707292160 * 1 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 * -1 ---
+int(-9223372034707292160)
+--- testing: 9223372034707292160 * 7 ---
+float(6.4563604242951E+19)
+--- testing: 9223372034707292160 * 9 ---
+float(8.3010348312366E+19)
+--- testing: 9223372034707292160 * 65 ---
+float(5.9951918225597E+20)
+--- testing: 9223372034707292160 * -44 ---
+float(-4.0582836952712E+20)
+--- testing: 9223372034707292160 * 2147483647 ---
+float(1.9807040614731E+28)
+--- testing: 9223372034707292160 * 9223372036854775807 ---
+float(8.5070591710428E+37)
+--- testing: -9223372034707292160 * 0 ---
+int(0)
+--- testing: -9223372034707292160 * 1 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 * -1 ---
+int(9223372034707292160)
+--- testing: -9223372034707292160 * 7 ---
+float(-6.4563604242951E+19)
+--- testing: -9223372034707292160 * 9 ---
+float(-8.3010348312366E+19)
+--- testing: -9223372034707292160 * 65 ---
+float(-5.9951918225597E+20)
+--- testing: -9223372034707292160 * -44 ---
+float(4.0582836952712E+20)
+--- testing: -9223372034707292160 * 2147483647 ---
+float(-1.9807040614731E+28)
+--- testing: -9223372034707292160 * 9223372036854775807 ---
+float(-8.5070591710428E+37)
+--- testing: 2147483648 * 0 ---
+int(0)
+--- testing: 2147483648 * 1 ---
+int(2147483648)
+--- testing: 2147483648 * -1 ---
+int(-2147483648)
+--- testing: 2147483648 * 7 ---
+int(15032385536)
+--- testing: 2147483648 * 9 ---
+int(19327352832)
+--- testing: 2147483648 * 65 ---
+int(139586437120)
+--- testing: 2147483648 * -44 ---
+int(-94489280512)
+--- testing: 2147483648 * 2147483647 ---
+int(4611686016279904256)
+--- testing: 2147483648 * 9223372036854775807 ---
+float(1.9807040628566E+28)
+--- testing: -2147483649 * 0 ---
+int(0)
+--- testing: -2147483649 * 1 ---
+int(-2147483649)
+--- testing: -2147483649 * -1 ---
+int(2147483649)
+--- testing: -2147483649 * 7 ---
+int(-15032385543)
+--- testing: -2147483649 * 9 ---
+int(-19327352841)
+--- testing: -2147483649 * 65 ---
+int(-139586437185)
+--- testing: -2147483649 * -44 ---
+int(94489280556)
+--- testing: -2147483649 * 2147483647 ---
+int(-4611686018427387903)
+--- testing: -2147483649 * 9223372036854775807 ---
+float(-1.9807040637789E+28)
+--- testing: 4294967294 * 0 ---
+int(0)
+--- testing: 4294967294 * 1 ---
+int(4294967294)
+--- testing: 4294967294 * -1 ---
+int(-4294967294)
+--- testing: 4294967294 * 7 ---
+int(30064771058)
+--- testing: 4294967294 * 9 ---
+int(38654705646)
+--- testing: 4294967294 * 65 ---
+int(279172874110)
+--- testing: 4294967294 * -44 ---
+int(-188978560936)
+--- testing: 4294967294 * 2147483647 ---
+int(9223372028264841218)
+--- testing: 4294967294 * 9223372036854775807 ---
+float(3.9614081238685E+28)
+--- testing: 4294967295 * 0 ---
+int(0)
+--- testing: 4294967295 * 1 ---
+int(4294967295)
+--- testing: 4294967295 * -1 ---
+int(-4294967295)
+--- testing: 4294967295 * 7 ---
+int(30064771065)
+--- testing: 4294967295 * 9 ---
+int(38654705655)
+--- testing: 4294967295 * 65 ---
+int(279172874175)
+--- testing: 4294967295 * -44 ---
+int(-188978560980)
+--- testing: 4294967295 * 2147483647 ---
+int(9223372030412324865)
+--- testing: 4294967295 * 9223372036854775807 ---
+float(3.9614081247909E+28)
+--- testing: 4294967293 * 0 ---
+int(0)
+--- testing: 4294967293 * 1 ---
+int(4294967293)
+--- testing: 4294967293 * -1 ---
+int(-4294967293)
+--- testing: 4294967293 * 7 ---
+int(30064771051)
+--- testing: 4294967293 * 9 ---
+int(38654705637)
+--- testing: 4294967293 * 65 ---
+int(279172874045)
+--- testing: 4294967293 * -44 ---
+int(-188978560892)
+--- testing: 4294967293 * 2147483647 ---
+int(9223372026117357571)
+--- testing: 4294967293 * 9223372036854775807 ---
+float(3.9614081229462E+28)
+--- testing: 9223372036854775806 * 0 ---
+int(0)
+--- testing: 9223372036854775806 * 1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 * -1 ---
+int(-9223372036854775806)
+--- testing: 9223372036854775806 * 7 ---
+float(6.4563604257983E+19)
+--- testing: 9223372036854775806 * 9 ---
+float(8.3010348331693E+19)
+--- testing: 9223372036854775806 * 65 ---
+float(5.9951918239556E+20)
+--- testing: 9223372036854775806 * -44 ---
+float(-4.0582836962161E+20)
+--- testing: 9223372036854775806 * 2147483647 ---
+float(1.9807040619343E+28)
+--- testing: 9223372036854775806 * 9223372036854775807 ---
+float(8.5070591730235E+37)
+--- testing: 9.2233720368548E+18 * 0 ---
+float(0)
+--- testing: 9.2233720368548E+18 * 1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 * -1 ---
+float(-9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 * 7 ---
+float(6.4563604257983E+19)
+--- testing: 9.2233720368548E+18 * 9 ---
+float(8.3010348331693E+19)
+--- testing: 9.2233720368548E+18 * 65 ---
+float(5.9951918239556E+20)
+--- testing: 9.2233720368548E+18 * -44 ---
+float(-4.0582836962161E+20)
+--- testing: 9.2233720368548E+18 * 2147483647 ---
+float(1.9807040619343E+28)
+--- testing: 9.2233720368548E+18 * 9223372036854775807 ---
+float(8.5070591730235E+37)
+--- testing: -9223372036854775807 * 0 ---
+int(0)
+--- testing: -9223372036854775807 * 1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 * -1 ---
+int(9223372036854775807)
+--- testing: -9223372036854775807 * 7 ---
+float(-6.4563604257983E+19)
+--- testing: -9223372036854775807 * 9 ---
+float(-8.3010348331693E+19)
+--- testing: -9223372036854775807 * 65 ---
+float(-5.9951918239556E+20)
+--- testing: -9223372036854775807 * -44 ---
+float(4.0582836962161E+20)
+--- testing: -9223372036854775807 * 2147483647 ---
+float(-1.9807040619343E+28)
+--- testing: -9223372036854775807 * 9223372036854775807 ---
+float(-8.5070591730235E+37)
+--- testing: -9.2233720368548E+18 * 0 ---
+float(-0)
+--- testing: -9.2233720368548E+18 * 1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 * -1 ---
+float(9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 * 7 ---
+float(-6.4563604257983E+19)
+--- testing: -9.2233720368548E+18 * 9 ---
+float(-8.3010348331693E+19)
+--- testing: -9.2233720368548E+18 * 65 ---
+float(-5.9951918239556E+20)
+--- testing: -9.2233720368548E+18 * -44 ---
+float(4.0582836962161E+20)
+--- testing: -9.2233720368548E+18 * 2147483647 ---
+float(-1.9807040619343E+28)
+--- testing: -9.2233720368548E+18 * 9223372036854775807 ---
+float(-8.5070591730235E+37)
+--- testing: 0 * 9223372036854775807 ---
+int(0)
+--- testing: 0 * -9223372036854775808 ---
+int(0)
+--- testing: 0 * 2147483647 ---
+int(0)
+--- testing: 0 * -2147483648 ---
+int(0)
+--- testing: 0 * 9223372034707292160 ---
+int(0)
+--- testing: 0 * -9223372034707292160 ---
+int(0)
+--- testing: 0 * 2147483648 ---
+int(0)
+--- testing: 0 * -2147483649 ---
+int(0)
+--- testing: 0 * 4294967294 ---
+int(0)
+--- testing: 0 * 4294967295 ---
+int(0)
+--- testing: 0 * 4294967293 ---
+int(0)
+--- testing: 0 * 9223372036854775806 ---
+int(0)
+--- testing: 0 * 9.2233720368548E+18 ---
+float(0)
+--- testing: 0 * -9223372036854775807 ---
+int(0)
+--- testing: 0 * -9.2233720368548E+18 ---
+float(-0)
+--- testing: 1 * 9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 1 * -9223372036854775808 ---
+int(-9223372036854775808)
+--- testing: 1 * 2147483647 ---
+int(2147483647)
+--- testing: 1 * -2147483648 ---
+int(-2147483648)
+--- testing: 1 * 9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 1 * -9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: 1 * 2147483648 ---
+int(2147483648)
+--- testing: 1 * -2147483649 ---
+int(-2147483649)
+--- testing: 1 * 4294967294 ---
+int(4294967294)
+--- testing: 1 * 4294967295 ---
+int(4294967295)
+--- testing: 1 * 4294967293 ---
+int(4294967293)
+--- testing: 1 * 9223372036854775806 ---
+int(9223372036854775806)
+--- testing: 1 * 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 1 * -9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: 1 * -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -1 * 9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: -1 * -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: -1 * 2147483647 ---
+int(-2147483647)
+--- testing: -1 * -2147483648 ---
+int(2147483648)
+--- testing: -1 * 9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: -1 * -9223372034707292160 ---
+int(9223372034707292160)
+--- testing: -1 * 2147483648 ---
+int(-2147483648)
+--- testing: -1 * -2147483649 ---
+int(2147483649)
+--- testing: -1 * 4294967294 ---
+int(-4294967294)
+--- testing: -1 * 4294967295 ---
+int(-4294967295)
+--- testing: -1 * 4294967293 ---
+int(-4294967293)
+--- testing: -1 * 9223372036854775806 ---
+int(-9223372036854775806)
+--- testing: -1 * 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -1 * -9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -1 * -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 7 * 9223372036854775807 ---
+float(6.4563604257983E+19)
+--- testing: 7 * -9223372036854775808 ---
+float(-6.4563604257983E+19)
+--- testing: 7 * 2147483647 ---
+int(15032385529)
+--- testing: 7 * -2147483648 ---
+int(-15032385536)
+--- testing: 7 * 9223372034707292160 ---
+float(6.4563604242951E+19)
+--- testing: 7 * -9223372034707292160 ---
+float(-6.4563604242951E+19)
+--- testing: 7 * 2147483648 ---
+int(15032385536)
+--- testing: 7 * -2147483649 ---
+int(-15032385543)
+--- testing: 7 * 4294967294 ---
+int(30064771058)
+--- testing: 7 * 4294967295 ---
+int(30064771065)
+--- testing: 7 * 4294967293 ---
+int(30064771051)
+--- testing: 7 * 9223372036854775806 ---
+float(6.4563604257983E+19)
+--- testing: 7 * 9.2233720368548E+18 ---
+float(6.4563604257983E+19)
+--- testing: 7 * -9223372036854775807 ---
+float(-6.4563604257983E+19)
+--- testing: 7 * -9.2233720368548E+18 ---
+float(-6.4563604257983E+19)
+--- testing: 9 * 9223372036854775807 ---
+float(8.3010348331693E+19)
+--- testing: 9 * -9223372036854775808 ---
+float(-8.3010348331693E+19)
+--- testing: 9 * 2147483647 ---
+int(19327352823)
+--- testing: 9 * -2147483648 ---
+int(-19327352832)
+--- testing: 9 * 9223372034707292160 ---
+float(8.3010348312366E+19)
+--- testing: 9 * -9223372034707292160 ---
+float(-8.3010348312366E+19)
+--- testing: 9 * 2147483648 ---
+int(19327352832)
+--- testing: 9 * -2147483649 ---
+int(-19327352841)
+--- testing: 9 * 4294967294 ---
+int(38654705646)
+--- testing: 9 * 4294967295 ---
+int(38654705655)
+--- testing: 9 * 4294967293 ---
+int(38654705637)
+--- testing: 9 * 9223372036854775806 ---
+float(8.3010348331693E+19)
+--- testing: 9 * 9.2233720368548E+18 ---
+float(8.3010348331693E+19)
+--- testing: 9 * -9223372036854775807 ---
+float(-8.3010348331693E+19)
+--- testing: 9 * -9.2233720368548E+18 ---
+float(-8.3010348331693E+19)
+--- testing: 65 * 9223372036854775807 ---
+float(5.9951918239556E+20)
+--- testing: 65 * -9223372036854775808 ---
+float(-5.9951918239556E+20)
+--- testing: 65 * 2147483647 ---
+int(139586437055)
+--- testing: 65 * -2147483648 ---
+int(-139586437120)
+--- testing: 65 * 9223372034707292160 ---
+float(5.9951918225597E+20)
+--- testing: 65 * -9223372034707292160 ---
+float(-5.9951918225597E+20)
+--- testing: 65 * 2147483648 ---
+int(139586437120)
+--- testing: 65 * -2147483649 ---
+int(-139586437185)
+--- testing: 65 * 4294967294 ---
+int(279172874110)
+--- testing: 65 * 4294967295 ---
+int(279172874175)
+--- testing: 65 * 4294967293 ---
+int(279172874045)
+--- testing: 65 * 9223372036854775806 ---
+float(5.9951918239556E+20)
+--- testing: 65 * 9.2233720368548E+18 ---
+float(5.9951918239556E+20)
+--- testing: 65 * -9223372036854775807 ---
+float(-5.9951918239556E+20)
+--- testing: 65 * -9.2233720368548E+18 ---
+float(-5.9951918239556E+20)
+--- testing: -44 * 9223372036854775807 ---
+float(-4.0582836962161E+20)
+--- testing: -44 * -9223372036854775808 ---
+float(4.0582836962161E+20)
+--- testing: -44 * 2147483647 ---
+int(-94489280468)
+--- testing: -44 * -2147483648 ---
+int(94489280512)
+--- testing: -44 * 9223372034707292160 ---
+float(-4.0582836952712E+20)
+--- testing: -44 * -9223372034707292160 ---
+float(4.0582836952712E+20)
+--- testing: -44 * 2147483648 ---
+int(-94489280512)
+--- testing: -44 * -2147483649 ---
+int(94489280556)
+--- testing: -44 * 4294967294 ---
+int(-188978560936)
+--- testing: -44 * 4294967295 ---
+int(-188978560980)
+--- testing: -44 * 4294967293 ---
+int(-188978560892)
+--- testing: -44 * 9223372036854775806 ---
+float(-4.0582836962161E+20)
+--- testing: -44 * 9.2233720368548E+18 ---
+float(-4.0582836962161E+20)
+--- testing: -44 * -9223372036854775807 ---
+float(4.0582836962161E+20)
+--- testing: -44 * -9.2233720368548E+18 ---
+float(4.0582836962161E+20)
+--- testing: 2147483647 * 9223372036854775807 ---
+float(1.9807040619343E+28)
+--- testing: 2147483647 * -9223372036854775808 ---
+float(-1.9807040619343E+28)
+--- testing: 2147483647 * 2147483647 ---
+int(4611686014132420609)
+--- testing: 2147483647 * -2147483648 ---
+int(-4611686016279904256)
+--- testing: 2147483647 * 9223372034707292160 ---
+float(1.9807040614731E+28)
+--- testing: 2147483647 * -9223372034707292160 ---
+float(-1.9807040614731E+28)
+--- testing: 2147483647 * 2147483648 ---
+int(4611686016279904256)
+--- testing: 2147483647 * -2147483649 ---
+int(-4611686018427387903)
+--- testing: 2147483647 * 4294967294 ---
+int(9223372028264841218)
+--- testing: 2147483647 * 4294967295 ---
+int(9223372030412324865)
+--- testing: 2147483647 * 4294967293 ---
+int(9223372026117357571)
+--- testing: 2147483647 * 9223372036854775806 ---
+float(1.9807040619343E+28)
+--- testing: 2147483647 * 9.2233720368548E+18 ---
+float(1.9807040619343E+28)
+--- testing: 2147483647 * -9223372036854775807 ---
+float(-1.9807040619343E+28)
+--- testing: 2147483647 * -9.2233720368548E+18 ---
+float(-1.9807040619343E+28)
+--- testing: 9223372036854775807 * 9223372036854775807 ---
+float(8.5070591730235E+37)
+--- testing: 9223372036854775807 * -9223372036854775808 ---
+float(-8.5070591730235E+37)
+--- testing: 9223372036854775807 * 2147483647 ---
+float(1.9807040619343E+28)
+--- testing: 9223372036854775807 * -2147483648 ---
+float(-1.9807040628566E+28)
+--- testing: 9223372036854775807 * 9223372034707292160 ---
+float(8.5070591710428E+37)
+--- testing: 9223372036854775807 * -9223372034707292160 ---
+float(-8.5070591710428E+37)
+--- testing: 9223372036854775807 * 2147483648 ---
+float(1.9807040628566E+28)
+--- testing: 9223372036854775807 * -2147483649 ---
+float(-1.9807040637789E+28)
+--- testing: 9223372036854775807 * 4294967294 ---
+float(3.9614081238685E+28)
+--- testing: 9223372036854775807 * 4294967295 ---
+float(3.9614081247909E+28)
+--- testing: 9223372036854775807 * 4294967293 ---
+float(3.9614081229462E+28)
+--- testing: 9223372036854775807 * 9223372036854775806 ---
+float(8.5070591730235E+37)
+--- testing: 9223372036854775807 * 9.2233720368548E+18 ---
+float(8.5070591730235E+37)
+--- testing: 9223372036854775807 * -9223372036854775807 ---
+float(-8.5070591730235E+37)
+--- testing: 9223372036854775807 * -9.2233720368548E+18 ---
+float(-8.5070591730235E+37)
+===DONE===
diff --git a/tests/lang/operators/multiply_variationStr.phpt b/tests/lang/operators/multiply_variationStr.phpt
new file mode 100644
index 0000000..30d5f79
--- /dev/null
+++ b/tests/lang/operators/multiply_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test * operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' * '$otherVal' ---\n";   
+      var_dump($strVal*$otherVal);
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' * '0' ---
+int(0)
+--- testing: '0' * '65' ---
+int(0)
+--- testing: '0' * '-44' ---
+int(0)
+--- testing: '0' * '1.2' ---
+float(0)
+--- testing: '0' * '-7.7' ---
+float(-0)
+--- testing: '0' * 'abc' ---
+int(0)
+--- testing: '0' * '123abc' ---
+int(0)
+--- testing: '0' * '123e5' ---
+float(0)
+--- testing: '0' * '123e5xyz' ---
+float(0)
+--- testing: '0' * ' 123abc' ---
+int(0)
+--- testing: '0' * '123 abc' ---
+int(0)
+--- testing: '0' * '123abc ' ---
+int(0)
+--- testing: '0' * '3.4a' ---
+float(0)
+--- testing: '0' * 'a5.9' ---
+int(0)
+--- testing: '65' * '0' ---
+int(0)
+--- testing: '65' * '65' ---
+int(4225)
+--- testing: '65' * '-44' ---
+int(-2860)
+--- testing: '65' * '1.2' ---
+float(78)
+--- testing: '65' * '-7.7' ---
+float(-500.5)
+--- testing: '65' * 'abc' ---
+int(0)
+--- testing: '65' * '123abc' ---
+int(7995)
+--- testing: '65' * '123e5' ---
+float(799500000)
+--- testing: '65' * '123e5xyz' ---
+float(799500000)
+--- testing: '65' * ' 123abc' ---
+int(7995)
+--- testing: '65' * '123 abc' ---
+int(7995)
+--- testing: '65' * '123abc ' ---
+int(7995)
+--- testing: '65' * '3.4a' ---
+float(221)
+--- testing: '65' * 'a5.9' ---
+int(0)
+--- testing: '-44' * '0' ---
+int(0)
+--- testing: '-44' * '65' ---
+int(-2860)
+--- testing: '-44' * '-44' ---
+int(1936)
+--- testing: '-44' * '1.2' ---
+float(-52.8)
+--- testing: '-44' * '-7.7' ---
+float(338.8)
+--- testing: '-44' * 'abc' ---
+int(0)
+--- testing: '-44' * '123abc' ---
+int(-5412)
+--- testing: '-44' * '123e5' ---
+float(-541200000)
+--- testing: '-44' * '123e5xyz' ---
+float(-541200000)
+--- testing: '-44' * ' 123abc' ---
+int(-5412)
+--- testing: '-44' * '123 abc' ---
+int(-5412)
+--- testing: '-44' * '123abc ' ---
+int(-5412)
+--- testing: '-44' * '3.4a' ---
+float(-149.6)
+--- testing: '-44' * 'a5.9' ---
+int(0)
+--- testing: '1.2' * '0' ---
+float(0)
+--- testing: '1.2' * '65' ---
+float(78)
+--- testing: '1.2' * '-44' ---
+float(-52.8)
+--- testing: '1.2' * '1.2' ---
+float(1.44)
+--- testing: '1.2' * '-7.7' ---
+float(-9.24)
+--- testing: '1.2' * 'abc' ---
+float(0)
+--- testing: '1.2' * '123abc' ---
+float(147.6)
+--- testing: '1.2' * '123e5' ---
+float(14760000)
+--- testing: '1.2' * '123e5xyz' ---
+float(14760000)
+--- testing: '1.2' * ' 123abc' ---
+float(147.6)
+--- testing: '1.2' * '123 abc' ---
+float(147.6)
+--- testing: '1.2' * '123abc ' ---
+float(147.6)
+--- testing: '1.2' * '3.4a' ---
+float(4.08)
+--- testing: '1.2' * 'a5.9' ---
+float(0)
+--- testing: '-7.7' * '0' ---
+float(-0)
+--- testing: '-7.7' * '65' ---
+float(-500.5)
+--- testing: '-7.7' * '-44' ---
+float(338.8)
+--- testing: '-7.7' * '1.2' ---
+float(-9.24)
+--- testing: '-7.7' * '-7.7' ---
+float(59.29)
+--- testing: '-7.7' * 'abc' ---
+float(-0)
+--- testing: '-7.7' * '123abc' ---
+float(-947.1)
+--- testing: '-7.7' * '123e5' ---
+float(-94710000)
+--- testing: '-7.7' * '123e5xyz' ---
+float(-94710000)
+--- testing: '-7.7' * ' 123abc' ---
+float(-947.1)
+--- testing: '-7.7' * '123 abc' ---
+float(-947.1)
+--- testing: '-7.7' * '123abc ' ---
+float(-947.1)
+--- testing: '-7.7' * '3.4a' ---
+float(-26.18)
+--- testing: '-7.7' * 'a5.9' ---
+float(-0)
+--- testing: 'abc' * '0' ---
+int(0)
+--- testing: 'abc' * '65' ---
+int(0)
+--- testing: 'abc' * '-44' ---
+int(0)
+--- testing: 'abc' * '1.2' ---
+float(0)
+--- testing: 'abc' * '-7.7' ---
+float(-0)
+--- testing: 'abc' * 'abc' ---
+int(0)
+--- testing: 'abc' * '123abc' ---
+int(0)
+--- testing: 'abc' * '123e5' ---
+float(0)
+--- testing: 'abc' * '123e5xyz' ---
+float(0)
+--- testing: 'abc' * ' 123abc' ---
+int(0)
+--- testing: 'abc' * '123 abc' ---
+int(0)
+--- testing: 'abc' * '123abc ' ---
+int(0)
+--- testing: 'abc' * '3.4a' ---
+float(0)
+--- testing: 'abc' * 'a5.9' ---
+int(0)
+--- testing: '123abc' * '0' ---
+int(0)
+--- testing: '123abc' * '65' ---
+int(7995)
+--- testing: '123abc' * '-44' ---
+int(-5412)
+--- testing: '123abc' * '1.2' ---
+float(147.6)
+--- testing: '123abc' * '-7.7' ---
+float(-947.1)
+--- testing: '123abc' * 'abc' ---
+int(0)
+--- testing: '123abc' * '123abc' ---
+int(15129)
+--- testing: '123abc' * '123e5' ---
+float(1512900000)
+--- testing: '123abc' * '123e5xyz' ---
+float(1512900000)
+--- testing: '123abc' * ' 123abc' ---
+int(15129)
+--- testing: '123abc' * '123 abc' ---
+int(15129)
+--- testing: '123abc' * '123abc ' ---
+int(15129)
+--- testing: '123abc' * '3.4a' ---
+float(418.2)
+--- testing: '123abc' * 'a5.9' ---
+int(0)
+--- testing: '123e5' * '0' ---
+float(0)
+--- testing: '123e5' * '65' ---
+float(799500000)
+--- testing: '123e5' * '-44' ---
+float(-541200000)
+--- testing: '123e5' * '1.2' ---
+float(14760000)
+--- testing: '123e5' * '-7.7' ---
+float(-94710000)
+--- testing: '123e5' * 'abc' ---
+float(0)
+--- testing: '123e5' * '123abc' ---
+float(1512900000)
+--- testing: '123e5' * '123e5' ---
+float(1.5129E+14)
+--- testing: '123e5' * '123e5xyz' ---
+float(1.5129E+14)
+--- testing: '123e5' * ' 123abc' ---
+float(1512900000)
+--- testing: '123e5' * '123 abc' ---
+float(1512900000)
+--- testing: '123e5' * '123abc ' ---
+float(1512900000)
+--- testing: '123e5' * '3.4a' ---
+float(41820000)
+--- testing: '123e5' * 'a5.9' ---
+float(0)
+--- testing: '123e5xyz' * '0' ---
+float(0)
+--- testing: '123e5xyz' * '65' ---
+float(799500000)
+--- testing: '123e5xyz' * '-44' ---
+float(-541200000)
+--- testing: '123e5xyz' * '1.2' ---
+float(14760000)
+--- testing: '123e5xyz' * '-7.7' ---
+float(-94710000)
+--- testing: '123e5xyz' * 'abc' ---
+float(0)
+--- testing: '123e5xyz' * '123abc' ---
+float(1512900000)
+--- testing: '123e5xyz' * '123e5' ---
+float(1.5129E+14)
+--- testing: '123e5xyz' * '123e5xyz' ---
+float(1.5129E+14)
+--- testing: '123e5xyz' * ' 123abc' ---
+float(1512900000)
+--- testing: '123e5xyz' * '123 abc' ---
+float(1512900000)
+--- testing: '123e5xyz' * '123abc ' ---
+float(1512900000)
+--- testing: '123e5xyz' * '3.4a' ---
+float(41820000)
+--- testing: '123e5xyz' * 'a5.9' ---
+float(0)
+--- testing: ' 123abc' * '0' ---
+int(0)
+--- testing: ' 123abc' * '65' ---
+int(7995)
+--- testing: ' 123abc' * '-44' ---
+int(-5412)
+--- testing: ' 123abc' * '1.2' ---
+float(147.6)
+--- testing: ' 123abc' * '-7.7' ---
+float(-947.1)
+--- testing: ' 123abc' * 'abc' ---
+int(0)
+--- testing: ' 123abc' * '123abc' ---
+int(15129)
+--- testing: ' 123abc' * '123e5' ---
+float(1512900000)
+--- testing: ' 123abc' * '123e5xyz' ---
+float(1512900000)
+--- testing: ' 123abc' * ' 123abc' ---
+int(15129)
+--- testing: ' 123abc' * '123 abc' ---
+int(15129)
+--- testing: ' 123abc' * '123abc ' ---
+int(15129)
+--- testing: ' 123abc' * '3.4a' ---
+float(418.2)
+--- testing: ' 123abc' * 'a5.9' ---
+int(0)
+--- testing: '123 abc' * '0' ---
+int(0)
+--- testing: '123 abc' * '65' ---
+int(7995)
+--- testing: '123 abc' * '-44' ---
+int(-5412)
+--- testing: '123 abc' * '1.2' ---
+float(147.6)
+--- testing: '123 abc' * '-7.7' ---
+float(-947.1)
+--- testing: '123 abc' * 'abc' ---
+int(0)
+--- testing: '123 abc' * '123abc' ---
+int(15129)
+--- testing: '123 abc' * '123e5' ---
+float(1512900000)
+--- testing: '123 abc' * '123e5xyz' ---
+float(1512900000)
+--- testing: '123 abc' * ' 123abc' ---
+int(15129)
+--- testing: '123 abc' * '123 abc' ---
+int(15129)
+--- testing: '123 abc' * '123abc ' ---
+int(15129)
+--- testing: '123 abc' * '3.4a' ---
+float(418.2)
+--- testing: '123 abc' * 'a5.9' ---
+int(0)
+--- testing: '123abc ' * '0' ---
+int(0)
+--- testing: '123abc ' * '65' ---
+int(7995)
+--- testing: '123abc ' * '-44' ---
+int(-5412)
+--- testing: '123abc ' * '1.2' ---
+float(147.6)
+--- testing: '123abc ' * '-7.7' ---
+float(-947.1)
+--- testing: '123abc ' * 'abc' ---
+int(0)
+--- testing: '123abc ' * '123abc' ---
+int(15129)
+--- testing: '123abc ' * '123e5' ---
+float(1512900000)
+--- testing: '123abc ' * '123e5xyz' ---
+float(1512900000)
+--- testing: '123abc ' * ' 123abc' ---
+int(15129)
+--- testing: '123abc ' * '123 abc' ---
+int(15129)
+--- testing: '123abc ' * '123abc ' ---
+int(15129)
+--- testing: '123abc ' * '3.4a' ---
+float(418.2)
+--- testing: '123abc ' * 'a5.9' ---
+int(0)
+--- testing: '3.4a' * '0' ---
+float(0)
+--- testing: '3.4a' * '65' ---
+float(221)
+--- testing: '3.4a' * '-44' ---
+float(-149.6)
+--- testing: '3.4a' * '1.2' ---
+float(4.08)
+--- testing: '3.4a' * '-7.7' ---
+float(-26.18)
+--- testing: '3.4a' * 'abc' ---
+float(0)
+--- testing: '3.4a' * '123abc' ---
+float(418.2)
+--- testing: '3.4a' * '123e5' ---
+float(41820000)
+--- testing: '3.4a' * '123e5xyz' ---
+float(41820000)
+--- testing: '3.4a' * ' 123abc' ---
+float(418.2)
+--- testing: '3.4a' * '123 abc' ---
+float(418.2)
+--- testing: '3.4a' * '123abc ' ---
+float(418.2)
+--- testing: '3.4a' * '3.4a' ---
+float(11.56)
+--- testing: '3.4a' * 'a5.9' ---
+float(0)
+--- testing: 'a5.9' * '0' ---
+int(0)
+--- testing: 'a5.9' * '65' ---
+int(0)
+--- testing: 'a5.9' * '-44' ---
+int(0)
+--- testing: 'a5.9' * '1.2' ---
+float(0)
+--- testing: 'a5.9' * '-7.7' ---
+float(-0)
+--- testing: 'a5.9' * 'abc' ---
+int(0)
+--- testing: 'a5.9' * '123abc' ---
+int(0)
+--- testing: 'a5.9' * '123e5' ---
+float(0)
+--- testing: 'a5.9' * '123e5xyz' ---
+float(0)
+--- testing: 'a5.9' * ' 123abc' ---
+int(0)
+--- testing: 'a5.9' * '123 abc' ---
+int(0)
+--- testing: 'a5.9' * '123abc ' ---
+int(0)
+--- testing: 'a5.9' * '3.4a' ---
+float(0)
+--- testing: 'a5.9' * 'a5.9' ---
+int(0)
+===DONE===
diff --git a/tests/lang/operators/negate_basiclong_64bit.phpt b/tests/lang/operators/negate_basiclong_64bit.phpt
new file mode 100644
index 0000000..e0cf10d
--- /dev/null
+++ b/tests/lang/operators/negate_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test -N operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(-$longVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 2147483647 ---
+int(-2147483647)
+--- testing: -2147483648 ---
+int(2147483648)
+--- testing: 9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 2147483648 ---
+int(-2147483648)
+--- testing: -2147483649 ---
+int(2147483649)
+--- testing: 4294967294 ---
+int(-4294967294)
+--- testing: 4294967295 ---
+int(-4294967295)
+--- testing: 4294967293 ---
+int(-4294967293)
+--- testing: 9223372036854775806 ---
+int(-9223372036854775806)
+--- testing: 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+int(9223372036854775807)
+--- testing: -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+===DONE===
diff --git a/tests/lang/operators/negate_variationStr.phpt b/tests/lang/operators/negate_variationStr.phpt
new file mode 100644
index 0000000..a25bdda
--- /dev/null
+++ b/tests/lang/operators/negate_variationStr.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test -N operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+
+foreach ($strVals as $strVal) {
+   echo "--- testing: '$strVal' ---\n";
+   var_dump(-$strVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ---
+int(0)
+--- testing: '65' ---
+int(-65)
+--- testing: '-44' ---
+int(44)
+--- testing: '1.2' ---
+float(-1.2)
+--- testing: '-7.7' ---
+float(7.7)
+--- testing: 'abc' ---
+int(0)
+--- testing: '123abc' ---
+int(-123)
+--- testing: '123e5' ---
+float(-12300000)
+--- testing: '123e5xyz' ---
+float(-12300000)
+--- testing: ' 123abc' ---
+int(-123)
+--- testing: '123 abc' ---
+int(-123)
+--- testing: '123abc ' ---
+int(-123)
+--- testing: '3.4a' ---
+float(-3.4)
+--- testing: 'a5.9' ---
+int(0)
+===DONE===
diff --git a/tests/lang/operators/operator_equals_basic.phpt b/tests/lang/operators/operator_equals_basic.phpt
new file mode 100644
index 0000000..1b42fc3
--- /dev/null
+++ b/tests/lang/operators/operator_equals_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test == operator : different types
+--FILE--
+<?php
+
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 679;
+$int2 = -67835;
+$valid_int1 = array("679", "679abc", " 679", "679  ", 679.0, 6.79E2, "+679", +679);
+$valid_int2 = array("-67835", "-67835abc", " -67835", "-67835  ", -67835.000, -6.7835E4);
+$invalid_int1 = array("6 7 9", "6y79", 678);
+$invalid_int2 = array("- 67835", "-67,835", "-67 835", "-678y35", -76834);
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array("57385.45835",  "57385.45835aaa", "  57385.45835", 5.738545835e4);
+$valid_float2 = array("-67345.76567", "-67345.76567aaa", "  -67345.76567", -6.734576567E4);
+$invalid_float1 = array("57385. 45835",  "57,385.45835", 57385.45834, 5.738545834e4);
+$invalid_float2 = array("- 67345.76567", "-67,345.76567", -67345.76566, -6.734576566E4);
+
+
+$toCompare = array(
+  true, $valid_true, $valid_false, 
+  false, $valid_false, $valid_true,
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest == $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   foreach($invalid_compares as $compareVal) {
+      if ($typeToTest == $compareVal) {
+         echo "FAILED: '$typeToTest' == '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_equals_variation.phpt b/tests/lang/operators/operator_equals_variation.phpt
new file mode 100644
index 0000000..60e6abb
--- /dev/null
+++ b/tests/lang/operators/operator_equals_variation.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test == operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validEqual = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$invalidEqual = array (
+MAX_32Bit, array("2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validEqual); $i +=2) {
+   $typeToTestVal = $validEqual[$i];
+   $compares = $validEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal == $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test invalid values
+for ($i = 0; $i < count($invalidEqual); $i +=2) {
+   $typeToTestVal = $invalidEqual[$i];
+   $compares = $invalidEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal == $compareVal) {
+         echo "FAILED: '$typeToTestVal' == '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_equals_variation_64bit.phpt b/tests/lang/operators/operator_equals_variation_64bit.phpt
new file mode 100644
index 0000000..b521735
--- /dev/null
+++ b/tests/lang/operators/operator_equals_variation_64bit.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test == operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validEqual = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1),
+);
+
+$invalidEqual = array (
+MAX_32Bit, array("2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+MAX_64Bit, array(MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit + 1),
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validEqual); $i +=2) {
+   $typeToTestVal = $validEqual[$i];
+   $compares = $validEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal == $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test invalid values
+for ($i = 0; $i < count($invalidEqual); $i +=2) {
+   $typeToTestVal = $invalidEqual[$i];
+   $compares = $invalidEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal == $compareVal) {
+         echo "FAILED: '$typeToTestVal' == '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_gt_basic.phpt b/tests/lang/operators/operator_gt_basic.phpt
new file mode 100644
index 0000000..06fbcee
--- /dev/null
+++ b/tests/lang/operators/operator_gt_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test > operator : different types
+--FILE--
+<?php
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 679;
+$int2 = -67835;
+$valid_int1 = array("678", "678abc", " 678", "678  ", 678.0, 6.789E2, "+678", +678);
+$valid_int2 = array("-67836", "-67836abc", " -67836", "-67836  ", -67835.0001, -6.78351E4);
+$invalid_int1 = array(679, "679");
+$invalid_int2 = array(-67835, "-67835");
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array("57385.45834",  "57385.45834aaa", "  57385.45834", 5.738545834e4);
+$valid_float2 = array("-67345.76568", "-67345.76568aaa", "  -67345.76568", -6.734576568E4);
+$invalid_float1 = array(57385.45835, 5.738545835e4);
+$invalid_float2 = array(-67345.76567, -6.734576567E4);
+
+
+$toCompare = array(
+// boolean test will result in both sides being converted to boolean so !0 = true and true is not > true for example
+// also note that a string of "0" is converted to false but a string of "0.0" is converted to true
+// false cannot be tested as 0 can never be > 0 or 1
+  true, $valid_false, $valid_true, 
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest > $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' <= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   foreach($invalid_compares as $compareVal) {
+      if ($typeToTest > $compareVal) {
+         echo "FAILED: '$typeToTest' > '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_gt_or_equal_basic.phpt b/tests/lang/operators/operator_gt_or_equal_basic.phpt
new file mode 100644
index 0000000..02a561c
--- /dev/null
+++ b/tests/lang/operators/operator_gt_or_equal_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test >= operator : different types
+--FILE--
+<?php
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 679;
+$int2 = -67835;
+$valid_int1 = array("679", "679abc", " 679", 679.0, 6.79E2, "678", "678abc", " 678", 678.0, 6.78E2, 6.789E2, "+678", +678);
+$valid_int2 = array("-67835", "-67835abc", " -67835", -67835.000, -6.7835E4, "-67836", "-67836abc". " -67836", -67835.0001, -6.78351E4, "-67836", -67835.0001, -6.78351E4);
+$invalid_int1 = array(680, "680");
+$invalid_int2 = array(-67834, "-67834");
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array("57385.45835",  "57385.45835aaa", "  57385.45835", 5.738545835e4, "57385.45834",  "57385.45834aaa", "  57385.45834", 5.738545834e4);
+$valid_float2 = array("-67345.76567", "-67345.76567aaa", "  -67345.76567", -6.734576567E4, "-67345.76568", "-67345.76568aaa", "  -67345.76568", -6.734576568E4);
+$invalid_float1 = array(57385.45836, 5.738545836e4);
+$invalid_float2 = array(-67345.76564, -6.734576564E4);
+
+$toCompare = array(
+
+  true, array_merge($valid_false, $valid_true), NULL,
+  false, $valid_false, $valid_true, 
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest >= $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' < '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   if ($invalid_compares != NULL) {
+	   foreach($invalid_compares as $compareVal) {
+	      if ($typeToTest >= $compareVal) {
+	         echo "FAILED: '$typeToTest' >= '$compareVal'\n";
+	         $failed = true;
+	      }
+	   }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_gt_or_equal_variation.phpt b/tests/lang/operators/operator_gt_or_equal_variation.phpt
new file mode 100644
index 0000000..c4253b5
--- /dev/null
+++ b/tests/lang/operators/operator_gt_or_equal_variation.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test >= operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validGtOrEqual = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, MAX_32Bit - 1),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, MIN_32Bit - 1),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$invalidGtOrEqual = array (
+MAX_32Bit, array("2147483648", 2.1474836470001e9, MAX_32Bit + 1),
+MIN_32Bit, array(MIN_32Bit + 1,"-2147483646", -2.1474836460001e9)
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validGtOrEqual); $i +=2) {
+   $typeToTestVal = $validGtOrEqual[$i];
+   $compares = $validGtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal >= $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' < '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidGtOrEqual); $i +=2) {
+   $typeToTestVal = $invalidGtOrEqual[$i];
+   $compares = $invalidGtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal >= $compareVal) {
+         echo "FAILED: '$typeToTestVal' >= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_gt_or_equal_variation_64bit.phpt b/tests/lang/operators/operator_gt_or_equal_variation_64bit.phpt
new file mode 100644
index 0000000..a2f7aa4
--- /dev/null
+++ b/tests/lang/operators/operator_gt_or_equal_variation_64bit.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test >= operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validGtOrEqual = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, MAX_32Bit - 1),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, MIN_32Bit - 1),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1),
+);
+
+$invalidGtOrEqual = array (
+MAX_32Bit, array("2147483648", 2.1474836470001e9, MAX_32Bit + 1),
+MIN_32Bit, array(MIN_32Bit + 1,"-2147483646", -2.1474836460001e9)
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validGtOrEqual); $i +=2) {
+   $typeToTestVal = $validGtOrEqual[$i];
+   $compares = $validGtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal >= $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' < '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidGtOrEqual); $i +=2) {
+   $typeToTestVal = $invalidGtOrEqual[$i];
+   $compares = $invalidGtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal >= $compareVal) {
+         echo "FAILED: '$typeToTestVal' >= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_gt_variation.phpt b/tests/lang/operators/operator_gt_variation.phpt
new file mode 100644
index 0000000..a158824
--- /dev/null
+++ b/tests/lang/operators/operator_gt_variation.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test > operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validGreaterThan = array (
+MAX_32Bit, array(MAX_32Bit - 1, "2147483646", "2147483646.999", 2.147483646e9, 2147483646.9, MIN_32Bit),
+-2147483647, array(MIN_32Bit, "-2147483648", "-2147483647.001", -2.1474836471e9, -2147483647.9),
+);
+
+$invalidGreaterThan = array (
+MAX_32Bit, array(2e33, MAX_32Bit + 1),
+MIN_32Bit, array(MIN_32Bit + 1, MAX_32Bit)
+);
+
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validGreaterThan); $i +=2) {
+   $typeToTestVal = $validGreaterThan[$i];
+   $compares = $validGreaterThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal > $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' <= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidGreaterThan); $i +=2) {
+   $typeToTestVal = $invalidGreaterThan[$i];
+   $compares = $invalidGreaterThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal > $compareVal) {
+         echo "FAILED: '$typeToTestVal' > '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_gt_variation_64bit.phpt b/tests/lang/operators/operator_gt_variation_64bit.phpt
new file mode 100644
index 0000000..6223e07
--- /dev/null
+++ b/tests/lang/operators/operator_gt_variation_64bit.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test > operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validGreaterThan = array (
+MAX_32Bit, array(MAX_32Bit - 1, "2147483646", "2147483646.999", 2.147483646e9, 2147483646.9, MIN_32Bit),
+-2147483647, array(MIN_32Bit, "-2147483648", "-2147483647.001", -2.1474836471e9, -2147483647.9),
+);
+
+$invalidGreaterThan = array (
+MAX_32Bit, array(2e33, MAX_32Bit + 1),
+MIN_32Bit, array(MIN_32Bit + 1, MAX_32Bit)
+);
+
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validGreaterThan); $i +=2) {
+   $typeToTestVal = $validGreaterThan[$i];
+   $compares = $validGreaterThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal > $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' <= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidGreaterThan); $i +=2) {
+   $typeToTestVal = $invalidGreaterThan[$i];
+   $compares = $invalidGreaterThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal > $compareVal) {
+         echo "FAILED: '$typeToTestVal' > '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_identical_basic.phpt b/tests/lang/operators/operator_identical_basic.phpt
new file mode 100644
index 0000000..a4cd8a0
--- /dev/null
+++ b/tests/lang/operators/operator_identical_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test === operator : different types
+--FILE--
+<?php
+
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 679;
+$int2 = -67835;
+$valid_int1 = array(679, +679);
+$valid_int2 = array(-67835);
+$invalid_int1 = array("679", "679abc", " 679", "679  ", 679.0, 6.79E2, "+679", "6 7 9", "6y79", 678);
+$invalid_int2 = array("-67835", "-67835abc", " -67835", "-67835  ", -67835.000, -6.7835E4, "- 67835", "-67,835", "-67 835", "-678y35", -76834);
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array(57385.45835, 5.738545835e4); 
+$valid_float2 = array(-67345.76567, -6.734576567E4);
+$invalid_float1 = array("57385.45835",  "57385.45835aaa", "  57385.45835", "57385. 45835",  "57,385.45835", 57385.45834, 5.738545834e4);
+$invalid_float2 = array("-67345.76567", "-67345.76567aaa", "  -67345.76567", "- 67345.76567", "-67,345.76567", -67345.76566, -6.734576566E4);
+
+
+$toCompare = array(
+  true, array(true), array_merge($valid_true, $valid_false), 
+  false, array(false), array_merge($valid_true, $valid_false),
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest === $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   foreach($invalid_compares as $compareVal) {
+      if ($typeToTest === $compareVal) {
+         echo "FAILED: '$typeToTest' == '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_identical_variation.phpt b/tests/lang/operators/operator_identical_variation.phpt
new file mode 100644
index 0000000..76639c7
--- /dev/null
+++ b/tests/lang/operators/operator_identical_variation.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test === operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validIdentical = array (
+MAX_32Bit, array(MAX_32Bit),
+MIN_32Bit, array(MIN_32Bit),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$invalidIdentical = array (
+MAX_32Bit, array("2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, "2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, "-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+);
+
+
+$failed = false;
+// test for valid values
+for ($i = 0; $i < count($validIdentical); $i +=2) {
+   $typeToTestVal = $validIdentical[$i];
+   $compares = $validIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal === $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' !== '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidIdentical); $i +=2) {
+   $typeToTestVal = $invalidIdentical[$i];
+   $compares = $invalidIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal === $compareVal) {
+         echo "FAILED: '$typeToTestVal' === '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_identical_variation_64bit.phpt b/tests/lang/operators/operator_identical_variation_64bit.phpt
new file mode 100644
index 0000000..0909c44
--- /dev/null
+++ b/tests/lang/operators/operator_identical_variation_64bit.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test === operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validIdentical = array (
+MAX_32Bit, array(MAX_32Bit),
+MIN_32Bit, array(MIN_32Bit),
+MAX_64Bit, array(MAX_64Bit),
+MIN_64Bit, array(MIN_64Bit),
+);
+
+$invalidIdentical = array (
+MAX_32Bit, array("2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, "2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, "-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+MAX_64Bit, array(MAX_64Bit - 1, MAX_64Bit + 1),
+MIN_64Bit, array(MIN_64Bit + 1, MIN_64Bit - 1),
+);
+
+
+$failed = false;
+// test for valid values
+for ($i = 0; $i < count($validIdentical); $i +=2) {
+   $typeToTestVal = $validIdentical[$i];
+   $compares = $validIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal === $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' !== '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidIdentical); $i +=2) {
+   $typeToTestVal = $invalidIdentical[$i];
+   $compares = $invalidIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal === $compareVal) {
+         echo "FAILED: '$typeToTestVal' === '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_lt_basic.phpt b/tests/lang/operators/operator_lt_basic.phpt
new file mode 100644
index 0000000..137adf2
--- /dev/null
+++ b/tests/lang/operators/operator_lt_basic.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test < operator : different types
+--FILE--
+<?php
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 677;
+$int2 = -67837;
+$valid_int1 = array("678", "678abc", " 678", "678  ", 678.0, 6.789E2, "+678", +678);
+$valid_int2 = array("-67836", "-67836abc", " -67836", "-67836  ", -67835.0001, -6.78351E4);
+$invalid_int1 = array(676, "676");
+$invalid_int2 = array(-67837, "-67837");
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array("57385.45836",  "57385.45836aaa", "  57385.45836", 5.738545836e4);
+$valid_float2 = array("-67345.76566", "-67345.76566aaa", "  -67345.76566", -6.734576566E4);
+$invalid_float1 = array(57385.45835, 5.738545835e4);
+$invalid_float2 = array(-67345.76567, -6.734576567E4);
+
+
+$toCompare = array(
+  false, $valid_true, $valid_false, 
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest < $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' >= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   foreach($invalid_compares as $compareVal) {
+      if ($typeToTest < $compareVal) {
+         echo "FAILED: '$typeToTest' < '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_lt_or_equal_basic.phpt b/tests/lang/operators/operator_lt_or_equal_basic.phpt
new file mode 100644
index 0000000..381b813
--- /dev/null
+++ b/tests/lang/operators/operator_lt_or_equal_basic.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test <= operator : different types
+--FILE--
+<?php
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 678;
+$int2 = -67836;
+$valid_int1 = array("679", "679abc", " 679", 679.0, 6.79E2, "678", "678abc", " 678", 678.0, 6.78E2, 6.789E2, "+678", +678);
+$valid_int2 = array("-67835", "-67835abc", " -67835", -67835.000, -6.7835E4, "-67836", "-67836abc". " -67836", -67835.0001, -6.78351E4, "-67836", -67835.0001, -6.78351E4);
+$invalid_int1 = array(677, "677");
+$invalid_int2 = array(-67874, "-67837");
+
+$float1 = 57385.45834;
+$float2 = -67345.76568;
+$valid_float1 = array("57385.45835",  "57385.45835aaa", "  57385.45835", 5.738545835e4, "57385.45834",  "57385.45834aaa", "  57385.45834", 5.738545834e4);
+$valid_float2 = array("-67345.76567", "-67345.76567aaa", "  -67345.76567", -6.734576567E4, "-67345.76568", "-67345.76568aaa", "  -67345.76568", -6.734576568E4);
+$invalid_float1 = array(57385.45833, 5.738545833e4);
+$invalid_float2 = array(-67345.76569, -6.734576569E4);
+
+$toCompare = array(
+  true, $valid_true, $valid_false,
+  false, array_merge($valid_false, $valid_true), NULL, 
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest <= $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' > '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   if ($invalid_compares != NULL) {
+	   foreach($invalid_compares as $compareVal) {
+	      if ($typeToTest <= $compareVal) {
+	         echo "FAILED: '$typeToTest' <= '$compareVal'\n";
+	         $failed = true;
+	      }
+	   }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_lt_or_equal_variation.phpt b/tests/lang/operators/operator_lt_or_equal_variation.phpt
new file mode 100644
index 0000000..8f5f945
--- /dev/null
+++ b/tests/lang/operators/operator_lt_or_equal_variation.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test <= operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validLtOrEqual = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, MAX_32Bit + 1),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, MIN_32Bit + 1),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$invalidLtOrEqual = array (
+MAX_32Bit, array("2147483646", 2.1474836460001e9, MAX_32Bit - 1),
+MIN_32Bit, array(MIN_32Bit - 1, "-2147483649", -2.1474836480001e9)
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validLtOrEqual); $i +=2) {
+   $typeToTestVal = $validLtOrEqual[$i];
+   $compares = $validLtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal <= $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' > '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test invalid values
+for ($i = 0; $i < count($invalidLtOrEqual); $i +=2) {
+   $typeToTestVal = $invalidLtOrEqual[$i];
+   $compares = $invalidLtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal <= $compareVal) {
+         echo "FAILED: '$typeToTestVal' <= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_lt_or_equal_variation_64bit.phpt b/tests/lang/operators/operator_lt_or_equal_variation_64bit.phpt
new file mode 100644
index 0000000..03c974f
--- /dev/null
+++ b/tests/lang/operators/operator_lt_or_equal_variation_64bit.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test <= operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validLtOrEqual = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, MAX_32Bit + 1),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, MIN_32Bit + 1),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$invalidLtOrEqual = array (
+MAX_32Bit, array("2147483646", 2.1474836460001e9, MAX_32Bit - 1),
+MIN_32Bit, array(MIN_32Bit - 1, "-2147483649", -2.1474836480001e9)
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validLtOrEqual); $i +=2) {
+   $typeToTestVal = $validLtOrEqual[$i];
+   $compares = $validLtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal <= $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' > '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test invalid values
+for ($i = 0; $i < count($invalidLtOrEqual); $i +=2) {
+   $typeToTestVal = $invalidLtOrEqual[$i];
+   $compares = $invalidLtOrEqual[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal <= $compareVal) {
+         echo "FAILED: '$typeToTestVal' <= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_lt_variation.phpt b/tests/lang/operators/operator_lt_variation.phpt
new file mode 100644
index 0000000..a2a8f6a
--- /dev/null
+++ b/tests/lang/operators/operator_lt_variation.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test < operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validLessThan = array (
+2147483646, array(MAX_32Bit, "2147483647", "2147483647.001", 2.147483647e9, 2147483647.9),
+MIN_32Bit, array(MIN_32Bit + 1, "-2147483647", "-2147483646.001", -2.1474836461e9, -2147483646.9),
+);
+
+$invalidLessThan = array (
+MAX_32Bit, array("2147483646", 2.1474836460001e9, MAX_32Bit - 1),
+MIN_32Bit, array(MIN_32Bit - 1, "-2147483649", -2.1474836480001e9)
+);
+
+$failed = false;
+// test for equality
+for ($i = 0; $i < count($validLessThan); $i +=2) {
+   $typeToTestVal = $validLessThan[$i];
+   $compares = $validLessThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal < $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' >= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidLessThan); $i +=2) {
+   $typeToTestVal = $invalidLessThan[$i];
+   $compares = $invalidLessThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal < $compareVal) {
+         echo "FAILED: '$typeToTestVal' < '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_lt_variation_64bit.phpt b/tests/lang/operators/operator_lt_variation_64bit.phpt
new file mode 100644
index 0000000..172ef39
--- /dev/null
+++ b/tests/lang/operators/operator_lt_variation_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test < operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$validLessThan = array (
+2147483646, array(MAX_32Bit, "2147483647", "2147483647.001", 2.147483647e9, 2147483647.9),
+MIN_32Bit, array(MIN_32Bit + 1, "-2147483647", "-2147483646.001", -2.1474836461e9, -2147483646.9),
+);
+
+$invalidLessThan = array (
+MAX_32Bit, array("2147483646", 2.1474836460001e9, MAX_32Bit - 1),
+MIN_32Bit, array(MIN_32Bit - 1, "-2147483649", -2.1474836480001e9)
+);
+
+$failed = false;
+// test for equality
+for ($i = 0; $i < count($validLessThan); $i +=2) {
+   $typeToTestVal = $validLessThan[$i];
+   $compares = $validLessThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal < $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' >= '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidLessThan); $i +=2) {
+   $typeToTestVal = $invalidLessThan[$i];
+   $compares = $invalidLessThan[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal < $compareVal) {
+         echo "FAILED: '$typeToTestVal' < '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_notequals_basic.phpt b/tests/lang/operators/operator_notequals_basic.phpt
new file mode 100644
index 0000000..059c99d
--- /dev/null
+++ b/tests/lang/operators/operator_notequals_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test != operator : different types
+--FILE--
+<?php
+
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 679;
+$int2 = -67835;
+$valid_int1 = array("6 7 9", "6y79", 678);
+$valid_int2 = array("- 67835", "-67,835", "-67 835", "-678y35", -76834);
+$invalid_int1 = array("679", "679abc", " 679", "679  ", 679.0, 6.79E2, "+679", +679);
+$invalid_int2 = array("-67835", "-67835abc", " -67835", "-67835  ", -67835.000, -6.7835E4);
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array("57385. 45835",  "57,385.45835", 57385.45834, 5.738545834e4);
+$valid_float2 = array("- 67345.76567", "-67,345.76567", -67345.76566, -6.734576566E4);
+$invalid_float1 = array("57385.45835",  "57385.45835aaa", "  57385.45835", 5.738545835e4);
+$invalid_float2 = array("-67345.76567", "-67345.76567aaa", "  -67345.76567", -6.734576567E4);
+
+
+$toCompare = array(
+  true, $valid_false, $valid_true, 
+  false, $valid_true, $valid_false,
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest != $compareVal && $typeToTest <> $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' == '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   foreach($invalid_compares as $compareVal) {
+      if ($typeToTest != $compareVal || $typeToTest <> $compareVal) {
+         echo "FAILED: '$typeToTest' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_notequals_variation.phpt b/tests/lang/operators/operator_notequals_variation.phpt
new file mode 100644
index 0000000..a7827b4
--- /dev/null
+++ b/tests/lang/operators/operator_notequals_variation.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test != operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$invalidNotEquals = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$validNotEquals = array (
+MAX_32Bit, array("2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validNotEquals); $i +=2) {
+   $typeToTestVal = $validNotEquals[$i];
+   $compares = $validNotEquals[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal != $compareVal && $typeToTestVal != $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' == '$compareVal'\n";
+         $failed = true;
+      }   
+   }
+}
+// test invalid values
+for ($i = 0; $i < count($invalidNotEquals); $i +=2) {
+   $typeToTestVal = $invalidNotEquals[$i];
+   $compares = $invalidNotEquals[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal != $compareVal || $typeToTestVal != $compareVal) {
+         echo "FAILED: '$typeToTestVal' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_notequals_variation_64bit.phpt b/tests/lang/operators/operator_notequals_variation_64bit.phpt
new file mode 100644
index 0000000..ed26b52
--- /dev/null
+++ b/tests/lang/operators/operator_notequals_variation_64bit.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test == operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$invalidNotEquals = array (
+MAX_32Bit, array(MAX_32Bit, "2147483647", "2147483647.0000000", 2.147483647e9),
+MIN_32Bit, array(MIN_32Bit, "-2147483648", "-2147483648.000", -2.147483648e9),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1),
+);
+
+$validNotEquals = array (
+MAX_32Bit, array("2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+MAX_64Bit, array(MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit + 1),
+);
+
+
+$failed = false;
+// test valid values
+for ($i = 0; $i < count($validNotEquals); $i +=2) {
+   $typeToTestVal = $validNotEquals[$i];
+   $compares = $validNotEquals[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal != $compareVal && $typeToTestVal <> $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' == '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test invalid values
+for ($i = 0; $i < count($invalidNotEquals); $i +=2) {
+   $typeToTestVal = $invalidNotEquals[$i];
+   $compares = $invalidNotEquals[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal != $compareVal || $typeToTestVal <> $compareVal) {
+         echo "FAILED: '$typeToTestVal' != '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_notidentical_basic.phpt b/tests/lang/operators/operator_notidentical_basic.phpt
new file mode 100644
index 0000000..d433289
--- /dev/null
+++ b/tests/lang/operators/operator_notidentical_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test !== operator : different types
+--FILE--
+<?php
+
+$valid_true = array(1, "1", "true", 1.0, array(1));
+$valid_false = array(0, "", 0.0, array(), NULL);
+
+$int1 = 679;
+$int2 = -67835;
+$valid_int1 = array("679", "679abc", " 679", "679  ", 679.0, 6.79E2, "+679", "6 7 9", "6y79", 678);
+$valid_int2 = array("-67835", "-67835abc", " -67835", "-67835  ", -67835.000, -6.7835E4, "- 67835", "-67,835", "-67 835", "-678y35", -76834);
+$invalid_int1 = array(679, +679);
+$invalid_int2 = array(-67835);
+
+$float1 = 57385.45835;
+$float2 = -67345.76567;
+$valid_float1 = array("57385.45835",  "57385.45835aaa", "  57385.45835", "57385. 45835",  "57,385.45835", 57385.45834, 5.738545834e4);
+$valid_float2 = array("-67345.76567", "-67345.76567aaa", "  -67345.76567", "- 67345.76567", "-67,345.76567", -67345.76566, -6.734576566E4);
+$invalid_float1 = array(57385.45835, 5.738545835e4); 
+$invalid_float2 = array(-67345.76567, -6.734576567E4);
+
+
+$toCompare = array(
+  true, array_merge($valid_true, $valid_false), array(true), 
+  false, array_merge($valid_true, $valid_false), array(false),
+  $int1, $valid_int1, $invalid_int1,
+  $int2, $valid_int2, $invalid_int2,
+  $float1, $valid_float1, $invalid_float1,
+  $float2, $valid_float2, $invalid_float2
+);
+  
+$failed = false;
+for ($i = 0; $i < count($toCompare); $i +=3) {
+   $typeToTest = $toCompare[$i];
+   $valid_compares = $toCompare[$i + 1];
+   $invalid_compares = $toCompare[$i + 2];
+   
+   foreach($valid_compares as $compareVal) {
+      if ($typeToTest !== $compareVal) {
+         // do nothing
+      }
+      else {
+         echo "FAILED: '$typeToTest' === '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+   foreach($invalid_compares as $compareVal) {
+      if ($typeToTest !== $compareVal) {
+         echo "FAILED: '$typeToTest' !== '$compareVal'\n";
+         $failed = true;
+      }
+   }
+   
+}
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_notidentical_variation.phpt b/tests/lang/operators/operator_notidentical_variation.phpt
new file mode 100644
index 0000000..9af6f8d
--- /dev/null
+++ b/tests/lang/operators/operator_notidentical_variation.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test !== operator : max int 32bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$invalidNotIdentical = array (
+MAX_32Bit, array(MAX_32Bit),
+MIN_32Bit, array(MIN_32Bit),
+MAX_64Bit, array(MAX_64Bit, MAX_64Bit + 1, MAX_64Bit - 1),
+MIN_64Bit, array(MIN_64Bit, MIN_64Bit - 1, MIN_64Bit + 1),
+);
+
+$validNotIdentical = array (
+MAX_32Bit, array("2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, "2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, "-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+);
+
+
+$failed = false;
+// test for valid values
+for ($i = 0; $i < count($validNotIdentical); $i +=2) {
+   $typeToTestVal = $validNotIdentical[$i];
+   $compares = $validNotIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal !== $compareVal) {
+         //Do Nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' === '$compareVal'\n";
+         $failed = true;      
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidNotIdentical); $i +=2) {
+   $typeToTestVal = $invalidNotIdentical[$i];
+   $compares = $invalidNotIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal !== $compareVal) {
+         echo "FAILED: '$typeToTestVal' !== '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/operator_notidentical_variation_64bit.phpt b/tests/lang/operators/operator_notidentical_variation_64bit.phpt
new file mode 100644
index 0000000..e8f2c7e
--- /dev/null
+++ b/tests/lang/operators/operator_notidentical_variation_64bit.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test !== operator : max int 64bit range
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$invalidNotIdentical = array (
+MAX_32Bit, array(MAX_32Bit),
+MIN_32Bit, array(MIN_32Bit),
+MAX_64Bit, array(MAX_64Bit),
+MIN_64Bit, array(MIN_64Bit),
+);
+
+$validNotIdentical = array (
+MAX_32Bit, array("2147483647", "2147483647.0000000", 2.147483647e9, 2147483647.0, "2147483648", 2.1474836470001e9, MAX_32Bit - 1, MAX_32Bit + 1),
+MIN_32Bit, array("-2147483648", "-2147483648.000", -2.147483648e9, -2147483648.0, "-2147483649", -2.1474836480001e9, MIN_32Bit -1, MIN_32Bit + 1),
+MAX_64Bit, array(MAX_64Bit - 1, MAX_64Bit + 1),
+MIN_64Bit, array(MIN_64Bit + 1, MIN_64Bit - 1),
+);
+
+
+$failed = false;
+// test for valid values
+for ($i = 0; $i < count($validNotIdentical); $i +=2) {
+   $typeToTestVal = $validNotIdentical[$i];
+   $compares = $validNotIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal !== $compareVal) {
+         //Do Nothing
+      }
+      else {
+         echo "FAILED: '$typeToTestVal' === '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+// test for invalid values
+for ($i = 0; $i < count($invalidNotIdentical); $i +=2) {
+   $typeToTestVal = $invalidNotIdentical[$i];
+   $compares = $invalidNotIdentical[$i + 1];
+   foreach($compares as $compareVal) {
+      if ($typeToTestVal !== $compareVal) {
+         echo "FAILED: '$typeToTestVal' !== '$compareVal'\n";
+         $failed = true;
+      }
+   }
+}
+
+if ($failed == false) {
+   echo "Test Passed\n";
+}
+   
+?>
+===DONE===
+--EXPECT--
+Test Passed
+===DONE===
\ No newline at end of file
diff --git a/tests/lang/operators/postdec_basiclong_64bit.phpt b/tests/lang/operators/postdec_basiclong_64bit.phpt
new file mode 100644
index 0000000..9875df8
--- /dev/null
+++ b/tests/lang/operators/postdec_basiclong_64bit.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test N-- operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   $longVal--;
+   var_dump($longVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+int(9223372036854775806)
+--- testing: -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: 2147483647 ---
+int(2147483646)
+--- testing: -2147483648 ---
+int(-2147483649)
+--- testing: 9223372034707292160 ---
+int(9223372034707292159)
+--- testing: -9223372034707292160 ---
+int(-9223372034707292161)
+--- testing: 2147483648 ---
+int(2147483647)
+--- testing: -2147483649 ---
+int(-2147483650)
+--- testing: 4294967294 ---
+int(4294967293)
+--- testing: 4294967295 ---
+int(4294967294)
+--- testing: 4294967293 ---
+int(4294967292)
+--- testing: 9223372036854775806 ---
+int(9223372036854775805)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/tests/lang/operators/postdec_variationStr.phpt b/tests/lang/operators/postdec_variationStr.phpt
new file mode 100644
index 0000000..ee5a8cd
--- /dev/null
+++ b/tests/lang/operators/postdec_variationStr.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test N-- operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+
+foreach ($strVals as $strVal) {
+   echo "--- testing: '$strVal' ---\n";
+   $strVal--;
+   var_dump($strVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ---
+int(-1)
+--- testing: '65' ---
+int(64)
+--- testing: '-44' ---
+int(-45)
+--- testing: '1.2' ---
+float(0.2)
+--- testing: '-7.7' ---
+float(-8.7)
+--- testing: 'abc' ---
+string(3) "abc"
+--- testing: '123abc' ---
+string(6) "123abc"
+--- testing: '123e5' ---
+float(12299999)
+--- testing: '123e5xyz' ---
+string(8) "123e5xyz"
+--- testing: ' 123abc' ---
+string(7) " 123abc"
+--- testing: '123 abc' ---
+string(7) "123 abc"
+--- testing: '123abc ' ---
+string(7) "123abc "
+--- testing: '3.4a' ---
+string(4) "3.4a"
+--- testing: 'a5.9' ---
+string(4) "a5.9"
+===DONE===
diff --git a/tests/lang/operators/postinc_basiclong_64bit.phpt b/tests/lang/operators/postinc_basiclong_64bit.phpt
new file mode 100644
index 0000000..494259a
--- /dev/null
+++ b/tests/lang/operators/postinc_basiclong_64bit.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test N++ operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   $longVal++;
+   var_dump($longVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 ---
+int(-9223372036854775807)
+--- testing: 2147483647 ---
+int(2147483648)
+--- testing: -2147483648 ---
+int(-2147483647)
+--- testing: 9223372034707292160 ---
+int(9223372034707292161)
+--- testing: -9223372034707292160 ---
+int(-9223372034707292159)
+--- testing: 2147483648 ---
+int(2147483649)
+--- testing: -2147483649 ---
+int(-2147483648)
+--- testing: 4294967294 ---
+int(4294967295)
+--- testing: 4294967295 ---
+int(4294967296)
+--- testing: 4294967293 ---
+int(4294967294)
+--- testing: 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+int(-9223372036854775806)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/tests/lang/operators/postinc_variationStr.phpt b/tests/lang/operators/postinc_variationStr.phpt
new file mode 100644
index 0000000..6fbe804
--- /dev/null
+++ b/tests/lang/operators/postinc_variationStr.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test N++ operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+
+foreach ($strVals as $strVal) {
+   echo "--- testing: '$strVal' ---\n";
+   $strVal++;
+   var_dump($strVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ---
+int(1)
+--- testing: '65' ---
+int(66)
+--- testing: '-44' ---
+int(-43)
+--- testing: '1.2' ---
+float(2.2)
+--- testing: '-7.7' ---
+float(-6.7)
+--- testing: 'abc' ---
+string(3) "abd"
+--- testing: '123abc' ---
+string(6) "123abd"
+--- testing: '123e5' ---
+float(12300001)
+--- testing: '123e5xyz' ---
+string(8) "123e5xza"
+--- testing: ' 123abc' ---
+string(7) " 123abd"
+--- testing: '123 abc' ---
+string(7) "123 abd"
+--- testing: '123abc ' ---
+string(7) "123abc "
+--- testing: '3.4a' ---
+string(4) "3.4b"
+--- testing: 'a5.9' ---
+string(4) "a5.0"
+===DONE===
diff --git a/tests/lang/operators/predec_basiclong_64bit.phpt b/tests/lang/operators/predec_basiclong_64bit.phpt
new file mode 100644
index 0000000..c1b15fd
--- /dev/null
+++ b/tests/lang/operators/predec_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test --N operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(--$longVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+int(9223372036854775806)
+--- testing: -9223372036854775808 ---
+float(-9.2233720368548E+18)
+--- testing: 2147483647 ---
+int(2147483646)
+--- testing: -2147483648 ---
+int(-2147483649)
+--- testing: 9223372034707292160 ---
+int(9223372034707292159)
+--- testing: -9223372034707292160 ---
+int(-9223372034707292161)
+--- testing: 2147483648 ---
+int(2147483647)
+--- testing: -2147483649 ---
+int(-2147483650)
+--- testing: 4294967294 ---
+int(4294967293)
+--- testing: 4294967295 ---
+int(4294967294)
+--- testing: 4294967293 ---
+int(4294967292)
+--- testing: 9223372036854775806 ---
+int(9223372036854775805)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/tests/lang/operators/predec_variationStr.phpt b/tests/lang/operators/predec_variationStr.phpt
new file mode 100644
index 0000000..c7fb574
--- /dev/null
+++ b/tests/lang/operators/predec_variationStr.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test --N operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+
+foreach ($strVals as $strVal) {
+   echo "--- testing: '$strVal' ---\n";
+   var_dump(--$strVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ---
+int(-1)
+--- testing: '65' ---
+int(64)
+--- testing: '-44' ---
+int(-45)
+--- testing: '1.2' ---
+float(0.2)
+--- testing: '-7.7' ---
+float(-8.7)
+--- testing: 'abc' ---
+string(3) "abc"
+--- testing: '123abc' ---
+string(6) "123abc"
+--- testing: '123e5' ---
+float(12299999)
+--- testing: '123e5xyz' ---
+string(8) "123e5xyz"
+--- testing: ' 123abc' ---
+string(7) " 123abc"
+--- testing: '123 abc' ---
+string(7) "123 abc"
+--- testing: '123abc ' ---
+string(7) "123abc "
+--- testing: '3.4a' ---
+string(4) "3.4a"
+--- testing: 'a5.9' ---
+string(4) "a5.9"
+===DONE===
diff --git a/tests/lang/operators/preinc_basiclong_64bit.phpt b/tests/lang/operators/preinc_basiclong_64bit.phpt
new file mode 100644
index 0000000..599aa4e
--- /dev/null
+++ b/tests/lang/operators/preinc_basiclong_64bit.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test ++N operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+
+foreach ($longVals as $longVal) {
+   echo "--- testing: $longVal ---\n";
+   var_dump(++$longVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775808 ---
+int(-9223372036854775807)
+--- testing: 2147483647 ---
+int(2147483648)
+--- testing: -2147483648 ---
+int(-2147483647)
+--- testing: 9223372034707292160 ---
+int(9223372034707292161)
+--- testing: -9223372034707292160 ---
+int(-9223372034707292159)
+--- testing: 2147483648 ---
+int(2147483649)
+--- testing: -2147483649 ---
+int(-2147483648)
+--- testing: 4294967294 ---
+int(4294967295)
+--- testing: 4294967295 ---
+int(4294967296)
+--- testing: 4294967293 ---
+int(4294967294)
+--- testing: 9223372036854775806 ---
+int(9223372036854775807)
+--- testing: 9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -9223372036854775807 ---
+int(-9223372036854775806)
+--- testing: -9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+===DONE===
diff --git a/tests/lang/operators/preinc_variationStr.phpt b/tests/lang/operators/preinc_variationStr.phpt
new file mode 100644
index 0000000..010a237
--- /dev/null
+++ b/tests/lang/operators/preinc_variationStr.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test ++N operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+
+foreach ($strVals as $strVal) {
+   echo "--- testing: '$strVal' ---\n";
+   var_dump(++$strVal);
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' ---
+int(1)
+--- testing: '65' ---
+int(66)
+--- testing: '-44' ---
+int(-43)
+--- testing: '1.2' ---
+float(2.2)
+--- testing: '-7.7' ---
+float(-6.7)
+--- testing: 'abc' ---
+string(3) "abd"
+--- testing: '123abc' ---
+string(6) "123abd"
+--- testing: '123e5' ---
+float(12300001)
+--- testing: '123e5xyz' ---
+string(8) "123e5xza"
+--- testing: ' 123abc' ---
+string(7) " 123abd"
+--- testing: '123 abc' ---
+string(7) "123 abd"
+--- testing: '123abc ' ---
+string(7) "123abc "
+--- testing: '3.4a' ---
+string(4) "3.4b"
+--- testing: 'a5.9' ---
+string(4) "a5.0"
+===DONE===
diff --git a/tests/lang/operators/subtract_basiclong_64bit.phpt b/tests/lang/operators/subtract_basiclong_64bit.phpt
new file mode 100644
index 0000000..f52b951
--- /dev/null
+++ b/tests/lang/operators/subtract_basiclong_64bit.phpt
@@ -0,0 +1,582 @@
+--TEST--
+Test - operator : 64bit long tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+ 
+define("MAX_64Bit", 9223372036854775807);
+define("MAX_32Bit", 2147483647);
+define("MIN_64Bit", -9223372036854775807 - 1);
+define("MIN_32Bit", -2147483647 - 1);
+
+$longVals = array(
+    MAX_64Bit, MIN_64Bit, MAX_32Bit, MIN_32Bit, MAX_64Bit - MAX_32Bit, MIN_64Bit - MIN_32Bit,
+    MAX_32Bit + 1, MIN_32Bit - 1, MAX_32Bit * 2, (MAX_32Bit * 2) + 1, (MAX_32Bit * 2) - 1, 
+    MAX_64Bit -1, MAX_64Bit + 1, MIN_64Bit + 1, MIN_64Bit - 1
+);
+
+$otherVals = array(0, 1, -1, 7, 9, 65, -44, MAX_32Bit, MAX_64Bit);
+
+error_reporting(E_ERROR);
+
+foreach ($longVals as $longVal) {
+   foreach($otherVals as $otherVal) {
+	   echo "--- testing: $longVal - $otherVal ---\n";   
+      var_dump($longVal-$otherVal);
+   }
+}
+
+foreach ($otherVals as $otherVal) {
+   foreach($longVals as $longVal) {
+	   echo "--- testing: $otherVal - $longVal ---\n";   
+      var_dump($otherVal-$longVal);
+   }
+}
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: 9223372036854775807 - 0 ---
+int(9223372036854775807)
+--- testing: 9223372036854775807 - 1 ---
+int(9223372036854775806)
+--- testing: 9223372036854775807 - -1 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807 - 7 ---
+int(9223372036854775800)
+--- testing: 9223372036854775807 - 9 ---
+int(9223372036854775798)
+--- testing: 9223372036854775807 - 65 ---
+int(9223372036854775742)
+--- testing: 9223372036854775807 - -44 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775807 - 2147483647 ---
+int(9223372034707292160)
+--- testing: 9223372036854775807 - 9223372036854775807 ---
+int(0)
+--- testing: -9223372036854775808 - 0 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775808 - 1 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775808 - -1 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775808 - 7 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775808 - 9 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775808 - 65 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775808 - -44 ---
+int(-9223372036854775764)
+--- testing: -9223372036854775808 - 2147483647 ---
+float(-9.2233720390023E+18)
+--- testing: -9223372036854775808 - 9223372036854775807 ---
+float(-1.844674407371E+19)
+--- testing: 2147483647 - 0 ---
+int(2147483647)
+--- testing: 2147483647 - 1 ---
+int(2147483646)
+--- testing: 2147483647 - -1 ---
+int(2147483648)
+--- testing: 2147483647 - 7 ---
+int(2147483640)
+--- testing: 2147483647 - 9 ---
+int(2147483638)
+--- testing: 2147483647 - 65 ---
+int(2147483582)
+--- testing: 2147483647 - -44 ---
+int(2147483691)
+--- testing: 2147483647 - 2147483647 ---
+int(0)
+--- testing: 2147483647 - 9223372036854775807 ---
+int(-9223372034707292160)
+--- testing: -2147483648 - 0 ---
+int(-2147483648)
+--- testing: -2147483648 - 1 ---
+int(-2147483649)
+--- testing: -2147483648 - -1 ---
+int(-2147483647)
+--- testing: -2147483648 - 7 ---
+int(-2147483655)
+--- testing: -2147483648 - 9 ---
+int(-2147483657)
+--- testing: -2147483648 - 65 ---
+int(-2147483713)
+--- testing: -2147483648 - -44 ---
+int(-2147483604)
+--- testing: -2147483648 - 2147483647 ---
+int(-4294967295)
+--- testing: -2147483648 - 9223372036854775807 ---
+float(-9.2233720390023E+18)
+--- testing: 9223372034707292160 - 0 ---
+int(9223372034707292160)
+--- testing: 9223372034707292160 - 1 ---
+int(9223372034707292159)
+--- testing: 9223372034707292160 - -1 ---
+int(9223372034707292161)
+--- testing: 9223372034707292160 - 7 ---
+int(9223372034707292153)
+--- testing: 9223372034707292160 - 9 ---
+int(9223372034707292151)
+--- testing: 9223372034707292160 - 65 ---
+int(9223372034707292095)
+--- testing: 9223372034707292160 - -44 ---
+int(9223372034707292204)
+--- testing: 9223372034707292160 - 2147483647 ---
+int(9223372032559808513)
+--- testing: 9223372034707292160 - 9223372036854775807 ---
+int(-2147483647)
+--- testing: -9223372034707292160 - 0 ---
+int(-9223372034707292160)
+--- testing: -9223372034707292160 - 1 ---
+int(-9223372034707292161)
+--- testing: -9223372034707292160 - -1 ---
+int(-9223372034707292159)
+--- testing: -9223372034707292160 - 7 ---
+int(-9223372034707292167)
+--- testing: -9223372034707292160 - 9 ---
+int(-9223372034707292169)
+--- testing: -9223372034707292160 - 65 ---
+int(-9223372034707292225)
+--- testing: -9223372034707292160 - -44 ---
+int(-9223372034707292116)
+--- testing: -9223372034707292160 - 2147483647 ---
+int(-9223372036854775807)
+--- testing: -9223372034707292160 - 9223372036854775807 ---
+float(-1.8446744071562E+19)
+--- testing: 2147483648 - 0 ---
+int(2147483648)
+--- testing: 2147483648 - 1 ---
+int(2147483647)
+--- testing: 2147483648 - -1 ---
+int(2147483649)
+--- testing: 2147483648 - 7 ---
+int(2147483641)
+--- testing: 2147483648 - 9 ---
+int(2147483639)
+--- testing: 2147483648 - 65 ---
+int(2147483583)
+--- testing: 2147483648 - -44 ---
+int(2147483692)
+--- testing: 2147483648 - 2147483647 ---
+int(1)
+--- testing: 2147483648 - 9223372036854775807 ---
+int(-9223372034707292159)
+--- testing: -2147483649 - 0 ---
+int(-2147483649)
+--- testing: -2147483649 - 1 ---
+int(-2147483650)
+--- testing: -2147483649 - -1 ---
+int(-2147483648)
+--- testing: -2147483649 - 7 ---
+int(-2147483656)
+--- testing: -2147483649 - 9 ---
+int(-2147483658)
+--- testing: -2147483649 - 65 ---
+int(-2147483714)
+--- testing: -2147483649 - -44 ---
+int(-2147483605)
+--- testing: -2147483649 - 2147483647 ---
+int(-4294967296)
+--- testing: -2147483649 - 9223372036854775807 ---
+float(-9.2233720390023E+18)
+--- testing: 4294967294 - 0 ---
+int(4294967294)
+--- testing: 4294967294 - 1 ---
+int(4294967293)
+--- testing: 4294967294 - -1 ---
+int(4294967295)
+--- testing: 4294967294 - 7 ---
+int(4294967287)
+--- testing: 4294967294 - 9 ---
+int(4294967285)
+--- testing: 4294967294 - 65 ---
+int(4294967229)
+--- testing: 4294967294 - -44 ---
+int(4294967338)
+--- testing: 4294967294 - 2147483647 ---
+int(2147483647)
+--- testing: 4294967294 - 9223372036854775807 ---
+int(-9223372032559808513)
+--- testing: 4294967295 - 0 ---
+int(4294967295)
+--- testing: 4294967295 - 1 ---
+int(4294967294)
+--- testing: 4294967295 - -1 ---
+int(4294967296)
+--- testing: 4294967295 - 7 ---
+int(4294967288)
+--- testing: 4294967295 - 9 ---
+int(4294967286)
+--- testing: 4294967295 - 65 ---
+int(4294967230)
+--- testing: 4294967295 - -44 ---
+int(4294967339)
+--- testing: 4294967295 - 2147483647 ---
+int(2147483648)
+--- testing: 4294967295 - 9223372036854775807 ---
+int(-9223372032559808512)
+--- testing: 4294967293 - 0 ---
+int(4294967293)
+--- testing: 4294967293 - 1 ---
+int(4294967292)
+--- testing: 4294967293 - -1 ---
+int(4294967294)
+--- testing: 4294967293 - 7 ---
+int(4294967286)
+--- testing: 4294967293 - 9 ---
+int(4294967284)
+--- testing: 4294967293 - 65 ---
+int(4294967228)
+--- testing: 4294967293 - -44 ---
+int(4294967337)
+--- testing: 4294967293 - 2147483647 ---
+int(2147483646)
+--- testing: 4294967293 - 9223372036854775807 ---
+int(-9223372032559808514)
+--- testing: 9223372036854775806 - 0 ---
+int(9223372036854775806)
+--- testing: 9223372036854775806 - 1 ---
+int(9223372036854775805)
+--- testing: 9223372036854775806 - -1 ---
+int(9223372036854775807)
+--- testing: 9223372036854775806 - 7 ---
+int(9223372036854775799)
+--- testing: 9223372036854775806 - 9 ---
+int(9223372036854775797)
+--- testing: 9223372036854775806 - 65 ---
+int(9223372036854775741)
+--- testing: 9223372036854775806 - -44 ---
+float(9.2233720368548E+18)
+--- testing: 9223372036854775806 - 2147483647 ---
+int(9223372034707292159)
+--- testing: 9223372036854775806 - 9223372036854775807 ---
+int(-1)
+--- testing: 9.2233720368548E+18 - 0 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - 1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - -1 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - 7 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - 9 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - 65 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - -44 ---
+float(9.2233720368548E+18)
+--- testing: 9.2233720368548E+18 - 2147483647 ---
+float(9.2233720347073E+18)
+--- testing: 9.2233720368548E+18 - 9223372036854775807 ---
+float(0)
+--- testing: -9223372036854775807 - 0 ---
+int(-9223372036854775807)
+--- testing: -9223372036854775807 - 1 ---
+int(-9223372036854775808)
+--- testing: -9223372036854775807 - -1 ---
+int(-9223372036854775806)
+--- testing: -9223372036854775807 - 7 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775807 - 9 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775807 - 65 ---
+float(-9.2233720368548E+18)
+--- testing: -9223372036854775807 - -44 ---
+int(-9223372036854775763)
+--- testing: -9223372036854775807 - 2147483647 ---
+float(-9.2233720390023E+18)
+--- testing: -9223372036854775807 - 9223372036854775807 ---
+float(-1.844674407371E+19)
+--- testing: -9.2233720368548E+18 - 0 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - 1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - -1 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - 7 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - 9 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - 65 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - -44 ---
+float(-9.2233720368548E+18)
+--- testing: -9.2233720368548E+18 - 2147483647 ---
+float(-9.2233720390023E+18)
+--- testing: -9.2233720368548E+18 - 9223372036854775807 ---
+float(-1.844674407371E+19)
+--- testing: 0 - 9223372036854775807 ---
+int(-9223372036854775807)
+--- testing: 0 - -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 0 - 2147483647 ---
+int(-2147483647)
+--- testing: 0 - -2147483648 ---
+int(2147483648)
+--- testing: 0 - 9223372034707292160 ---
+int(-9223372034707292160)
+--- testing: 0 - -9223372034707292160 ---
+int(9223372034707292160)
+--- testing: 0 - 2147483648 ---
+int(-2147483648)
+--- testing: 0 - -2147483649 ---
+int(2147483649)
+--- testing: 0 - 4294967294 ---
+int(-4294967294)
+--- testing: 0 - 4294967295 ---
+int(-4294967295)
+--- testing: 0 - 4294967293 ---
+int(-4294967293)
+--- testing: 0 - 9223372036854775806 ---
+int(-9223372036854775806)
+--- testing: 0 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 0 - -9223372036854775807 ---
+int(9223372036854775807)
+--- testing: 0 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 1 - 9223372036854775807 ---
+int(-9223372036854775806)
+--- testing: 1 - -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 1 - 2147483647 ---
+int(-2147483646)
+--- testing: 1 - -2147483648 ---
+int(2147483649)
+--- testing: 1 - 9223372034707292160 ---
+int(-9223372034707292159)
+--- testing: 1 - -9223372034707292160 ---
+int(9223372034707292161)
+--- testing: 1 - 2147483648 ---
+int(-2147483647)
+--- testing: 1 - -2147483649 ---
+int(2147483650)
+--- testing: 1 - 4294967294 ---
+int(-4294967293)
+--- testing: 1 - 4294967295 ---
+int(-4294967294)
+--- testing: 1 - 4294967293 ---
+int(-4294967292)
+--- testing: 1 - 9223372036854775806 ---
+int(-9223372036854775805)
+--- testing: 1 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 1 - -9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 1 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -1 - 9223372036854775807 ---
+int(-9223372036854775808)
+--- testing: -1 - -9223372036854775808 ---
+int(9223372036854775807)
+--- testing: -1 - 2147483647 ---
+int(-2147483648)
+--- testing: -1 - -2147483648 ---
+int(2147483647)
+--- testing: -1 - 9223372034707292160 ---
+int(-9223372034707292161)
+--- testing: -1 - -9223372034707292160 ---
+int(9223372034707292159)
+--- testing: -1 - 2147483648 ---
+int(-2147483649)
+--- testing: -1 - -2147483649 ---
+int(2147483648)
+--- testing: -1 - 4294967294 ---
+int(-4294967295)
+--- testing: -1 - 4294967295 ---
+int(-4294967296)
+--- testing: -1 - 4294967293 ---
+int(-4294967294)
+--- testing: -1 - 9223372036854775806 ---
+int(-9223372036854775807)
+--- testing: -1 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -1 - -9223372036854775807 ---
+int(9223372036854775806)
+--- testing: -1 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 7 - 9223372036854775807 ---
+int(-9223372036854775800)
+--- testing: 7 - -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 7 - 2147483647 ---
+int(-2147483640)
+--- testing: 7 - -2147483648 ---
+int(2147483655)
+--- testing: 7 - 9223372034707292160 ---
+int(-9223372034707292153)
+--- testing: 7 - -9223372034707292160 ---
+int(9223372034707292167)
+--- testing: 7 - 2147483648 ---
+int(-2147483641)
+--- testing: 7 - -2147483649 ---
+int(2147483656)
+--- testing: 7 - 4294967294 ---
+int(-4294967287)
+--- testing: 7 - 4294967295 ---
+int(-4294967288)
+--- testing: 7 - 4294967293 ---
+int(-4294967286)
+--- testing: 7 - 9223372036854775806 ---
+int(-9223372036854775799)
+--- testing: 7 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 7 - -9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 7 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 9 - 9223372036854775807 ---
+int(-9223372036854775798)
+--- testing: 9 - -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 9 - 2147483647 ---
+int(-2147483638)
+--- testing: 9 - -2147483648 ---
+int(2147483657)
+--- testing: 9 - 9223372034707292160 ---
+int(-9223372034707292151)
+--- testing: 9 - -9223372034707292160 ---
+int(9223372034707292169)
+--- testing: 9 - 2147483648 ---
+int(-2147483639)
+--- testing: 9 - -2147483649 ---
+int(2147483658)
+--- testing: 9 - 4294967294 ---
+int(-4294967285)
+--- testing: 9 - 4294967295 ---
+int(-4294967286)
+--- testing: 9 - 4294967293 ---
+int(-4294967284)
+--- testing: 9 - 9223372036854775806 ---
+int(-9223372036854775797)
+--- testing: 9 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 9 - -9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 9 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 65 - 9223372036854775807 ---
+int(-9223372036854775742)
+--- testing: 65 - -9223372036854775808 ---
+float(9.2233720368548E+18)
+--- testing: 65 - 2147483647 ---
+int(-2147483582)
+--- testing: 65 - -2147483648 ---
+int(2147483713)
+--- testing: 65 - 9223372034707292160 ---
+int(-9223372034707292095)
+--- testing: 65 - -9223372034707292160 ---
+int(9223372034707292225)
+--- testing: 65 - 2147483648 ---
+int(-2147483583)
+--- testing: 65 - -2147483649 ---
+int(2147483714)
+--- testing: 65 - 4294967294 ---
+int(-4294967229)
+--- testing: 65 - 4294967295 ---
+int(-4294967230)
+--- testing: 65 - 4294967293 ---
+int(-4294967228)
+--- testing: 65 - 9223372036854775806 ---
+int(-9223372036854775741)
+--- testing: 65 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: 65 - -9223372036854775807 ---
+float(9.2233720368548E+18)
+--- testing: 65 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: -44 - 9223372036854775807 ---
+float(-9.2233720368548E+18)
+--- testing: -44 - -9223372036854775808 ---
+int(9223372036854775764)
+--- testing: -44 - 2147483647 ---
+int(-2147483691)
+--- testing: -44 - -2147483648 ---
+int(2147483604)
+--- testing: -44 - 9223372034707292160 ---
+int(-9223372034707292204)
+--- testing: -44 - -9223372034707292160 ---
+int(9223372034707292116)
+--- testing: -44 - 2147483648 ---
+int(-2147483692)
+--- testing: -44 - -2147483649 ---
+int(2147483605)
+--- testing: -44 - 4294967294 ---
+int(-4294967338)
+--- testing: -44 - 4294967295 ---
+int(-4294967339)
+--- testing: -44 - 4294967293 ---
+int(-4294967337)
+--- testing: -44 - 9223372036854775806 ---
+float(-9.2233720368548E+18)
+--- testing: -44 - 9.2233720368548E+18 ---
+float(-9.2233720368548E+18)
+--- testing: -44 - -9223372036854775807 ---
+int(9223372036854775763)
+--- testing: -44 - -9.2233720368548E+18 ---
+float(9.2233720368548E+18)
+--- testing: 2147483647 - 9223372036854775807 ---
+int(-9223372034707292160)
+--- testing: 2147483647 - -9223372036854775808 ---
+float(9.2233720390023E+18)
+--- testing: 2147483647 - 2147483647 ---
+int(0)
+--- testing: 2147483647 - -2147483648 ---
+int(4294967295)
+--- testing: 2147483647 - 9223372034707292160 ---
+int(-9223372032559808513)
+--- testing: 2147483647 - -9223372034707292160 ---
+int(9223372036854775807)
+--- testing: 2147483647 - 2147483648 ---
+int(-1)
+--- testing: 2147483647 - -2147483649 ---
+int(4294967296)
+--- testing: 2147483647 - 4294967294 ---
+int(-2147483647)
+--- testing: 2147483647 - 4294967295 ---
+int(-2147483648)
+--- testing: 2147483647 - 4294967293 ---
+int(-2147483646)
+--- testing: 2147483647 - 9223372036854775806 ---
+int(-9223372034707292159)
+--- testing: 2147483647 - 9.2233720368548E+18 ---
+float(-9.2233720347073E+18)
+--- testing: 2147483647 - -9223372036854775807 ---
+float(9.2233720390023E+18)
+--- testing: 2147483647 - -9.2233720368548E+18 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775807 - 9223372036854775807 ---
+int(0)
+--- testing: 9223372036854775807 - -9223372036854775808 ---
+float(1.844674407371E+19)
+--- testing: 9223372036854775807 - 2147483647 ---
+int(9223372034707292160)
+--- testing: 9223372036854775807 - -2147483648 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775807 - 9223372034707292160 ---
+int(2147483647)
+--- testing: 9223372036854775807 - -9223372034707292160 ---
+float(1.8446744071562E+19)
+--- testing: 9223372036854775807 - 2147483648 ---
+int(9223372034707292159)
+--- testing: 9223372036854775807 - -2147483649 ---
+float(9.2233720390023E+18)
+--- testing: 9223372036854775807 - 4294967294 ---
+int(9223372032559808513)
+--- testing: 9223372036854775807 - 4294967295 ---
+int(9223372032559808512)
+--- testing: 9223372036854775807 - 4294967293 ---
+int(9223372032559808514)
+--- testing: 9223372036854775807 - 9223372036854775806 ---
+int(1)
+--- testing: 9223372036854775807 - 9.2233720368548E+18 ---
+float(0)
+--- testing: 9223372036854775807 - -9223372036854775807 ---
+float(1.844674407371E+19)
+--- testing: 9223372036854775807 - -9.2233720368548E+18 ---
+float(1.844674407371E+19)
+===DONE===
diff --git a/tests/lang/operators/subtract_variationStr.phpt b/tests/lang/operators/subtract_variationStr.phpt
new file mode 100644
index 0000000..5b5bae2
--- /dev/null
+++ b/tests/lang/operators/subtract_variationStr.phpt
@@ -0,0 +1,416 @@
+--TEST--
+Test - operator : various numbers as strings
+--FILE--
+<?php
+
+$strVals = array(
+   "0","65","-44", "1.2", "-7.7", "abc", "123abc", "123e5", "123e5xyz", " 123abc", "123 abc", "123abc ", "3.4a",
+   "a5.9"
+);
+
+error_reporting(E_ERROR);
+
+foreach ($strVals as $strVal) {
+   foreach($strVals as $otherVal) {
+	   echo "--- testing: '$strVal' - '$otherVal' ---\n";   
+      var_dump($strVal-$otherVal);
+   }
+}
+
+   
+?>
+===DONE===
+--EXPECT--
+--- testing: '0' - '0' ---
+int(0)
+--- testing: '0' - '65' ---
+int(-65)
+--- testing: '0' - '-44' ---
+int(44)
+--- testing: '0' - '1.2' ---
+float(-1.2)
+--- testing: '0' - '-7.7' ---
+float(7.7)
+--- testing: '0' - 'abc' ---
+int(0)
+--- testing: '0' - '123abc' ---
+int(-123)
+--- testing: '0' - '123e5' ---
+float(-12300000)
+--- testing: '0' - '123e5xyz' ---
+float(-12300000)
+--- testing: '0' - ' 123abc' ---
+int(-123)
+--- testing: '0' - '123 abc' ---
+int(-123)
+--- testing: '0' - '123abc ' ---
+int(-123)
+--- testing: '0' - '3.4a' ---
+float(-3.4)
+--- testing: '0' - 'a5.9' ---
+int(0)
+--- testing: '65' - '0' ---
+int(65)
+--- testing: '65' - '65' ---
+int(0)
+--- testing: '65' - '-44' ---
+int(109)
+--- testing: '65' - '1.2' ---
+float(63.8)
+--- testing: '65' - '-7.7' ---
+float(72.7)
+--- testing: '65' - 'abc' ---
+int(65)
+--- testing: '65' - '123abc' ---
+int(-58)
+--- testing: '65' - '123e5' ---
+float(-12299935)
+--- testing: '65' - '123e5xyz' ---
+float(-12299935)
+--- testing: '65' - ' 123abc' ---
+int(-58)
+--- testing: '65' - '123 abc' ---
+int(-58)
+--- testing: '65' - '123abc ' ---
+int(-58)
+--- testing: '65' - '3.4a' ---
+float(61.6)
+--- testing: '65' - 'a5.9' ---
+int(65)
+--- testing: '-44' - '0' ---
+int(-44)
+--- testing: '-44' - '65' ---
+int(-109)
+--- testing: '-44' - '-44' ---
+int(0)
+--- testing: '-44' - '1.2' ---
+float(-45.2)
+--- testing: '-44' - '-7.7' ---
+float(-36.3)
+--- testing: '-44' - 'abc' ---
+int(-44)
+--- testing: '-44' - '123abc' ---
+int(-167)
+--- testing: '-44' - '123e5' ---
+float(-12300044)
+--- testing: '-44' - '123e5xyz' ---
+float(-12300044)
+--- testing: '-44' - ' 123abc' ---
+int(-167)
+--- testing: '-44' - '123 abc' ---
+int(-167)
+--- testing: '-44' - '123abc ' ---
+int(-167)
+--- testing: '-44' - '3.4a' ---
+float(-47.4)
+--- testing: '-44' - 'a5.9' ---
+int(-44)
+--- testing: '1.2' - '0' ---
+float(1.2)
+--- testing: '1.2' - '65' ---
+float(-63.8)
+--- testing: '1.2' - '-44' ---
+float(45.2)
+--- testing: '1.2' - '1.2' ---
+float(0)
+--- testing: '1.2' - '-7.7' ---
+float(8.9)
+--- testing: '1.2' - 'abc' ---
+float(1.2)
+--- testing: '1.2' - '123abc' ---
+float(-121.8)
+--- testing: '1.2' - '123e5' ---
+float(-12299998.8)
+--- testing: '1.2' - '123e5xyz' ---
+float(-12299998.8)
+--- testing: '1.2' - ' 123abc' ---
+float(-121.8)
+--- testing: '1.2' - '123 abc' ---
+float(-121.8)
+--- testing: '1.2' - '123abc ' ---
+float(-121.8)
+--- testing: '1.2' - '3.4a' ---
+float(-2.2)
+--- testing: '1.2' - 'a5.9' ---
+float(1.2)
+--- testing: '-7.7' - '0' ---
+float(-7.7)
+--- testing: '-7.7' - '65' ---
+float(-72.7)
+--- testing: '-7.7' - '-44' ---
+float(36.3)
+--- testing: '-7.7' - '1.2' ---
+float(-8.9)
+--- testing: '-7.7' - '-7.7' ---
+float(0)
+--- testing: '-7.7' - 'abc' ---
+float(-7.7)
+--- testing: '-7.7' - '123abc' ---
+float(-130.7)
+--- testing: '-7.7' - '123e5' ---
+float(-12300007.7)
+--- testing: '-7.7' - '123e5xyz' ---
+float(-12300007.7)
+--- testing: '-7.7' - ' 123abc' ---
+float(-130.7)
+--- testing: '-7.7' - '123 abc' ---
+float(-130.7)
+--- testing: '-7.7' - '123abc ' ---
+float(-130.7)
+--- testing: '-7.7' - '3.4a' ---
+float(-11.1)
+--- testing: '-7.7' - 'a5.9' ---
+float(-7.7)
+--- testing: 'abc' - '0' ---
+int(0)
+--- testing: 'abc' - '65' ---
+int(-65)
+--- testing: 'abc' - '-44' ---
+int(44)
+--- testing: 'abc' - '1.2' ---
+float(-1.2)
+--- testing: 'abc' - '-7.7' ---
+float(7.7)
+--- testing: 'abc' - 'abc' ---
+int(0)
+--- testing: 'abc' - '123abc' ---
+int(-123)
+--- testing: 'abc' - '123e5' ---
+float(-12300000)
+--- testing: 'abc' - '123e5xyz' ---
+float(-12300000)
+--- testing: 'abc' - ' 123abc' ---
+int(-123)
+--- testing: 'abc' - '123 abc' ---
+int(-123)
+--- testing: 'abc' - '123abc ' ---
+int(-123)
+--- testing: 'abc' - '3.4a' ---
+float(-3.4)
+--- testing: 'abc' - 'a5.9' ---
+int(0)
+--- testing: '123abc' - '0' ---
+int(123)
+--- testing: '123abc' - '65' ---
+int(58)
+--- testing: '123abc' - '-44' ---
+int(167)
+--- testing: '123abc' - '1.2' ---
+float(121.8)
+--- testing: '123abc' - '-7.7' ---
+float(130.7)
+--- testing: '123abc' - 'abc' ---
+int(123)
+--- testing: '123abc' - '123abc' ---
+int(0)
+--- testing: '123abc' - '123e5' ---
+float(-12299877)
+--- testing: '123abc' - '123e5xyz' ---
+float(-12299877)
+--- testing: '123abc' - ' 123abc' ---
+int(0)
+--- testing: '123abc' - '123 abc' ---
+int(0)
+--- testing: '123abc' - '123abc ' ---
+int(0)
+--- testing: '123abc' - '3.4a' ---
+float(119.6)
+--- testing: '123abc' - 'a5.9' ---
+int(123)
+--- testing: '123e5' - '0' ---
+float(12300000)
+--- testing: '123e5' - '65' ---
+float(12299935)
+--- testing: '123e5' - '-44' ---
+float(12300044)
+--- testing: '123e5' - '1.2' ---
+float(12299998.8)
+--- testing: '123e5' - '-7.7' ---
+float(12300007.7)
+--- testing: '123e5' - 'abc' ---
+float(12300000)
+--- testing: '123e5' - '123abc' ---
+float(12299877)
+--- testing: '123e5' - '123e5' ---
+float(0)
+--- testing: '123e5' - '123e5xyz' ---
+float(0)
+--- testing: '123e5' - ' 123abc' ---
+float(12299877)
+--- testing: '123e5' - '123 abc' ---
+float(12299877)
+--- testing: '123e5' - '123abc ' ---
+float(12299877)
+--- testing: '123e5' - '3.4a' ---
+float(12299996.6)
+--- testing: '123e5' - 'a5.9' ---
+float(12300000)
+--- testing: '123e5xyz' - '0' ---
+float(12300000)
+--- testing: '123e5xyz' - '65' ---
+float(12299935)
+--- testing: '123e5xyz' - '-44' ---
+float(12300044)
+--- testing: '123e5xyz' - '1.2' ---
+float(12299998.8)
+--- testing: '123e5xyz' - '-7.7' ---
+float(12300007.7)
+--- testing: '123e5xyz' - 'abc' ---
+float(12300000)
+--- testing: '123e5xyz' - '123abc' ---
+float(12299877)
+--- testing: '123e5xyz' - '123e5' ---
+float(0)
+--- testing: '123e5xyz' - '123e5xyz' ---
+float(0)
+--- testing: '123e5xyz' - ' 123abc' ---
+float(12299877)
+--- testing: '123e5xyz' - '123 abc' ---
+float(12299877)
+--- testing: '123e5xyz' - '123abc ' ---
+float(12299877)
+--- testing: '123e5xyz' - '3.4a' ---
+float(12299996.6)
+--- testing: '123e5xyz' - 'a5.9' ---
+float(12300000)
+--- testing: ' 123abc' - '0' ---
+int(123)
+--- testing: ' 123abc' - '65' ---
+int(58)
+--- testing: ' 123abc' - '-44' ---
+int(167)
+--- testing: ' 123abc' - '1.2' ---
+float(121.8)
+--- testing: ' 123abc' - '-7.7' ---
+float(130.7)
+--- testing: ' 123abc' - 'abc' ---
+int(123)
+--- testing: ' 123abc' - '123abc' ---
+int(0)
+--- testing: ' 123abc' - '123e5' ---
+float(-12299877)
+--- testing: ' 123abc' - '123e5xyz' ---
+float(-12299877)
+--- testing: ' 123abc' - ' 123abc' ---
+int(0)
+--- testing: ' 123abc' - '123 abc' ---
+int(0)
+--- testing: ' 123abc' - '123abc ' ---
+int(0)
+--- testing: ' 123abc' - '3.4a' ---
+float(119.6)
+--- testing: ' 123abc' - 'a5.9' ---
+int(123)
+--- testing: '123 abc' - '0' ---
+int(123)
+--- testing: '123 abc' - '65' ---
+int(58)
+--- testing: '123 abc' - '-44' ---
+int(167)
+--- testing: '123 abc' - '1.2' ---
+float(121.8)
+--- testing: '123 abc' - '-7.7' ---
+float(130.7)
+--- testing: '123 abc' - 'abc' ---
+int(123)
+--- testing: '123 abc' - '123abc' ---
+int(0)
+--- testing: '123 abc' - '123e5' ---
+float(-12299877)
+--- testing: '123 abc' - '123e5xyz' ---
+float(-12299877)
+--- testing: '123 abc' - ' 123abc' ---
+int(0)
+--- testing: '123 abc' - '123 abc' ---
+int(0)
+--- testing: '123 abc' - '123abc ' ---
+int(0)
+--- testing: '123 abc' - '3.4a' ---
+float(119.6)
+--- testing: '123 abc' - 'a5.9' ---
+int(123)
+--- testing: '123abc ' - '0' ---
+int(123)
+--- testing: '123abc ' - '65' ---
+int(58)
+--- testing: '123abc ' - '-44' ---
+int(167)
+--- testing: '123abc ' - '1.2' ---
+float(121.8)
+--- testing: '123abc ' - '-7.7' ---
+float(130.7)
+--- testing: '123abc ' - 'abc' ---
+int(123)
+--- testing: '123abc ' - '123abc' ---
+int(0)
+--- testing: '123abc ' - '123e5' ---
+float(-12299877)
+--- testing: '123abc ' - '123e5xyz' ---
+float(-12299877)
+--- testing: '123abc ' - ' 123abc' ---
+int(0)
+--- testing: '123abc ' - '123 abc' ---
+int(0)
+--- testing: '123abc ' - '123abc ' ---
+int(0)
+--- testing: '123abc ' - '3.4a' ---
+float(119.6)
+--- testing: '123abc ' - 'a5.9' ---
+int(123)
+--- testing: '3.4a' - '0' ---
+float(3.4)
+--- testing: '3.4a' - '65' ---
+float(-61.6)
+--- testing: '3.4a' - '-44' ---
+float(47.4)
+--- testing: '3.4a' - '1.2' ---
+float(2.2)
+--- testing: '3.4a' - '-7.7' ---
+float(11.1)
+--- testing: '3.4a' - 'abc' ---
+float(3.4)
+--- testing: '3.4a' - '123abc' ---
+float(-119.6)
+--- testing: '3.4a' - '123e5' ---
+float(-12299996.6)
+--- testing: '3.4a' - '123e5xyz' ---
+float(-12299996.6)
+--- testing: '3.4a' - ' 123abc' ---
+float(-119.6)
+--- testing: '3.4a' - '123 abc' ---
+float(-119.6)
+--- testing: '3.4a' - '123abc ' ---
+float(-119.6)
+--- testing: '3.4a' - '3.4a' ---
+float(0)
+--- testing: '3.4a' - 'a5.9' ---
+float(3.4)
+--- testing: 'a5.9' - '0' ---
+int(0)
+--- testing: 'a5.9' - '65' ---
+int(-65)
+--- testing: 'a5.9' - '-44' ---
+int(44)
+--- testing: 'a5.9' - '1.2' ---
+float(-1.2)
+--- testing: 'a5.9' - '-7.7' ---
+float(7.7)
+--- testing: 'a5.9' - 'abc' ---
+int(0)
+--- testing: 'a5.9' - '123abc' ---
+int(-123)
+--- testing: 'a5.9' - '123e5' ---
+float(-12300000)
+--- testing: 'a5.9' - '123e5xyz' ---
+float(-12300000)
+--- testing: 'a5.9' - ' 123abc' ---
+int(-123)
+--- testing: 'a5.9' - '123 abc' ---
+int(-123)
+--- testing: 'a5.9' - '123abc ' ---
+int(-123)
+--- testing: 'a5.9' - '3.4a' ---
+float(-3.4)
+--- testing: 'a5.9' - 'a5.9' ---
+int(0)
+===DONE===
diff --git a/tests/lang/returnByReference.001.phpt b/tests/lang/returnByReference.001.phpt
new file mode 100644
index 0000000..4abc3c7
--- /dev/null
+++ b/tests/lang/returnByReference.001.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Returning a reference from a function
+--FILE--
+<?php
+
+function &returnByRef(&$arg1)
+{
+	return $arg1;
+}
+
+$a = 7;
+$b =& returnByRef($a);
+var_dump($b);
+$a++;
+var_dump($b);
+
+?>
+--EXPECT--
+int(7)
+int(8)
\ No newline at end of file
diff --git a/tests/lang/returnByReference.002.phpt b/tests/lang/returnByReference.002.phpt
new file mode 100644
index 0000000..3494eb5
--- /dev/null
+++ b/tests/lang/returnByReference.002.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Returning a reference from a function.
+--FILE--
+<?php
+function &returnRef() {
+		global $a;
+		return $a;
+}
+
+function returnVal() {
+		global $a;
+		return $a;
+}
+
+$a = "original";
+$b =& returnVal();
+$b = "changed";
+var_dump($a); //expecting warning + "original" 
+
+$a = "original";
+$b =& returnRef();
+$b = "changed";
+var_dump($a); //expecting "changed" 
+?>
+--EXPECTF--
+
+Strict Standards: Only variables should be assigned by reference in %s on line 13
+string(8) "original"
+string(7) "changed"
diff --git a/tests/lang/returnByReference.003.phpt b/tests/lang/returnByReference.003.phpt
new file mode 100644
index 0000000..04a6338
--- /dev/null
+++ b/tests/lang/returnByReference.003.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Returning a reference from a function
+--FILE--
+<?php
+function returnConstantByValue() {
+	return 100;
+}
+
+function &returnConstantByRef() {
+	return 100;
+}
+
+function &returnVariableByRef() {
+	return $GLOBALS['a'];
+}
+
+echo "\n---> 1. Trying to assign by reference the return value of a function that returns by value:\n";
+unset($a, $b);
+$a = 4;
+$b = &returnConstantByValue();
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 2. Trying to assign by reference the return value of a function that returns a constant by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &returnConstantByRef();
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 3. Trying to assign by reference the return value of a function that returns by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &returnVariableByRef();
+$a++;
+var_dump($a, $b);
+
+?>
+--EXPECTF--
+
+---> 1. Trying to assign by reference the return value of a function that returns by value:
+
+Strict Standards: Only variables should be assigned by reference in %s on line 17
+int(5)
+int(100)
+
+---> 2. Trying to assign by reference the return value of a function that returns a constant by ref:
+
+Notice: Only variable references should be returned by reference in %s on line 7
+int(5)
+int(100)
+
+---> 3. Trying to assign by reference the return value of a function that returns by ref:
+int(5)
+int(5)
diff --git a/tests/lang/returnByReference.004.phpt b/tests/lang/returnByReference.004.phpt
new file mode 100644
index 0000000..f185c12
--- /dev/null
+++ b/tests/lang/returnByReference.004.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Returning a reference from a static method
+--FILE--
+<?php
+Class C {
+	static function returnConstantByValue() {
+		return 100;
+	}
+
+	static function &returnConstantByRef() {
+		return 100;
+	}
+	
+	static function &returnVariableByRef() {
+		return $GLOBALS['a'];
+	}
+}
+
+echo "\n---> 1. Trying to assign by reference the return value of a function that returns by value:\n";
+unset($a, $b);
+$a = 4;
+$b = &C::returnConstantByValue();
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 2. Trying to assign by reference the return value of a function that returns a constant by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &C::returnConstantByRef();
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 3. Trying to assign by reference the return value of a function that returns by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &C::returnVariableByRef();
+$a++;
+var_dump($a, $b);
+
+?>
+--EXPECTF--
+
+---> 1. Trying to assign by reference the return value of a function that returns by value:
+
+Strict Standards: Only variables should be assigned by reference in %s on line 19
+int(5)
+int(100)
+
+---> 2. Trying to assign by reference the return value of a function that returns a constant by ref:
+
+Notice: Only variable references should be returned by reference in %s on line 8
+int(5)
+int(100)
+
+---> 3. Trying to assign by reference the return value of a function that returns by ref:
+int(5)
+int(5)
diff --git a/tests/lang/returnByReference.005.phpt b/tests/lang/returnByReference.005.phpt
new file mode 100644
index 0000000..a7b6da2
--- /dev/null
+++ b/tests/lang/returnByReference.005.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Returning a reference from a method
+--FILE--
+<?php
+Class C {
+	function returnConstantByValue() {
+		return 100;
+	}
+	
+	function &returnConstantByRef() {
+		return 100;
+	}
+	
+	static function &returnVariableByRef() {
+		return $GLOBALS['a'];
+	}
+}
+$c = new C;
+
+echo "\n---> 1. Trying to assign by reference the return value of a function that returns by value:\n";
+unset($a, $b);
+$a = 4;
+$b = &$c->returnConstantByValue();
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 2. Trying to assign by reference the return value of a function that returns a constant by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &$c->returnConstantByRef();
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 3. Trying to assign by reference the return value of a function that returns by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &$c->returnVariableByRef();
+$a++;
+var_dump($a, $b);
+
+?>
+--EXPECTF--
+
+---> 1. Trying to assign by reference the return value of a function that returns by value:
+
+Strict Standards: Only variables should be assigned by reference in %s on line 20
+int(5)
+int(100)
+
+---> 2. Trying to assign by reference the return value of a function that returns a constant by ref:
+
+Notice: Only variable references should be returned by reference in %s on line 8
+int(5)
+int(100)
+
+---> 3. Trying to assign by reference the return value of a function that returns by ref:
+int(5)
+int(5)
diff --git a/tests/lang/returnByReference.006.phpt b/tests/lang/returnByReference.006.phpt
new file mode 100644
index 0000000..4019f3a
--- /dev/null
+++ b/tests/lang/returnByReference.006.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Returning a reference from a function via another function
+--INI--
+error_reporting = E_ALL & ~E_STRICT
+--FILE--
+<?php
+function returnConstantByValue() {
+	return 100;
+}
+
+function &returnConstantByRef() {
+	return 100;
+}
+
+function &returnVariableByRef() {
+	return $GLOBALS['a'];
+}
+
+function &returnFunctionCallByRef($functionToCall) {
+	return $functionToCall();
+}
+
+echo "\n---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:\n";
+unset($a, $b);
+$a = 4;
+$b = &returnFunctionCallByRef('returnConstantByValue');
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &returnFunctionCallByRef('returnConstantByRef');
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &returnFunctionCallByRef('returnVariableByRef');
+$a++;
+var_dump($a, $b);
+
+?>
+--EXPECTF--
+---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:
+
+Notice: Only variable references should be returned by reference in %s on line 15
+int(5)
+int(100)
+
+---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:
+
+Notice: Only variable references should be returned by reference in %s on line 7
+int(5)
+int(100)
+
+---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:
+int(5)
+int(5)
diff --git a/tests/lang/returnByReference.007.phpt b/tests/lang/returnByReference.007.phpt
new file mode 100644
index 0000000..1247e55
--- /dev/null
+++ b/tests/lang/returnByReference.007.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Returning a reference from a static method via another static method
+--INI--
+error_reporting = E_ALL & ~E_STRICT
+--FILE--
+<?php
+class C {
+	static function returnConstantByValue() {
+		return 100;
+	}
+	
+	static function &returnConstantByRef() {
+		return 100;
+	}
+	
+	static function &returnVariableByRef() {
+		return $GLOBALS['a'];
+	}
+	
+	static function &returnFunctionCallByRef($functionToCall) {
+		return C::$functionToCall();
+	}
+}
+
+echo "\n---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:\n";
+unset($a, $b);
+$a = 4;
+$b = &C::returnFunctionCallByRef('returnConstantByValue');
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &C::returnFunctionCallByRef('returnConstantByRef');
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &C::returnFunctionCallByRef('returnVariableByRef');
+$a++;
+var_dump($a, $b);
+
+?>
+--EXPECTF--
+
+---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:
+
+Notice: Only variable references should be returned by reference in %s on line 16
+int(5)
+int(100)
+
+---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:
+
+Notice: Only variable references should be returned by reference in %s on line 8
+int(5)
+int(100)
+
+---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:
+int(5)
+int(5)
\ No newline at end of file
diff --git a/tests/lang/returnByReference.008.phpt b/tests/lang/returnByReference.008.phpt
new file mode 100644
index 0000000..d595de2
--- /dev/null
+++ b/tests/lang/returnByReference.008.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Returning a reference from a non-static method via another non-static method
+--INI--
+error_reporting = E_ALL & ~E_STRICT
+--FILE--
+<?php
+class C {
+	function returnConstantByValue() {
+		return 100;
+	}
+	
+	function &returnConstantByRef() {
+		return 100;
+	}
+	
+	function &returnVariableByRef() {
+		return $GLOBALS['a'];
+	}
+	
+	function &returnFunctionCallByRef($functionToCall) {
+		return $this->$functionToCall();
+	}
+}
+$c = new C;
+
+echo "\n---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:\n";
+unset($a, $b);
+$a = 4;
+$b = &$c->returnFunctionCallByRef('returnConstantByValue');
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &$c->returnFunctionCallByRef('returnConstantByRef');
+$a++;
+var_dump($a, $b);
+
+echo "\n---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:\n";
+unset($a, $b);
+$a = 4;
+$b = &$c->returnFunctionCallByRef('returnVariableByRef');
+$a++;
+var_dump($a, $b);
+
+?>
+--EXPECTF--
+
+---> 1. Via a return by ref function call, assign by reference the return value of a function that returns by value:
+
+Notice: Only variable references should be returned by reference in %s on line 16
+int(5)
+int(100)
+
+---> 2. Via a return by ref function call, assign by reference the return value of a function that returns a constant by ref:
+
+Notice: Only variable references should be returned by reference in %s on line 8
+int(5)
+int(100)
+
+---> 3. Via a return by ref function call, assign by reference the return value of a function that returns by ref:
+int(5)
+int(5)
\ No newline at end of file
diff --git a/tests/lang/returnByReference.009.phpt b/tests/lang/returnByReference.009.phpt
new file mode 100644
index 0000000..6320375
--- /dev/null
+++ b/tests/lang/returnByReference.009.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Returning a references returned by another function
+--FILE--
+<?php
+
+
+function &returnVarByRef () {
+    $b=1;
+	return $b; 
+}
+
+function &testReturnVarByRef() {
+	return returnVarByRef();
+}
+
+function returnVal () {
+return 1; 
+}
+
+function &testReturnValByRef() {
+	return returnVal();
+}
+
+echo "\n---> 1. Return a variable by reference -> No warning:\n";
+
+var_dump (testReturnVarByRef());
+
+echo "\n---> 2. Return a value by reference -> Warning:\n";
+
+var_dump (testReturnValByRef());
+
+--EXPECTF--
+---> 1. Return a variable by reference -> No warning:
+int(1)
+
+---> 2. Return a value by reference -> Warning:
+
+Notice: Only variable references should be returned by reference in %s on line %d
+int(1)
diff --git a/tests/output/ob_001.phpt b/tests/output/ob_001.phpt
new file mode 100644
index 0000000..ecacf02
--- /dev/null
+++ b/tests/output/ob_001.phpt
@@ -0,0 +1,8 @@
+--TEST--
+output buffering - nothing
+--FILE--
+<?php
+echo "foo\n";
+?>
+--EXPECT--
+foo
diff --git a/tests/output/ob_002.phpt b/tests/output/ob_002.phpt
new file mode 100644
index 0000000..94f515b
--- /dev/null
+++ b/tests/output/ob_002.phpt
@@ -0,0 +1,9 @@
+--TEST--
+output buffering - ob_start
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+?>
+--EXPECT--
+foo
diff --git a/tests/output/ob_003.phpt b/tests/output/ob_003.phpt
new file mode 100644
index 0000000..988d197
--- /dev/null
+++ b/tests/output/ob_003.phpt
@@ -0,0 +1,13 @@
+--TEST--
+output buffering - ob_flush
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+ob_flush();
+echo "bar\n";
+ob_flush();
+?>
+--EXPECT--
+foo
+bar
diff --git a/tests/output/ob_004.phpt b/tests/output/ob_004.phpt
new file mode 100644
index 0000000..a089a8c
--- /dev/null
+++ b/tests/output/ob_004.phpt
@@ -0,0 +1,11 @@
+--TEST--
+output buffering - ob_clean
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+ob_clean();
+echo "bar\n";
+?>
+--EXPECT--
+bar
diff --git a/tests/output/ob_005.phpt b/tests/output/ob_005.phpt
new file mode 100644
index 0000000..bbe807d
--- /dev/null
+++ b/tests/output/ob_005.phpt
@@ -0,0 +1,14 @@
+--TEST--
+output buffering - ob_end_clean
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+ob_start();
+echo "bar\n";
+ob_end_clean();
+echo "baz\n";
+?>
+--EXPECT--
+foo
+baz
diff --git a/tests/output/ob_006.phpt b/tests/output/ob_006.phpt
new file mode 100644
index 0000000..aec3cfc
--- /dev/null
+++ b/tests/output/ob_006.phpt
@@ -0,0 +1,12 @@
+--TEST--
+output buffering - ob_end_flush
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+ob_end_flush();
+var_dump(ob_get_level());
+?>
+--EXPECT--
+foo
+int(0)
diff --git a/tests/output/ob_007.phpt b/tests/output/ob_007.phpt
new file mode 100644
index 0000000..059925c
--- /dev/null
+++ b/tests/output/ob_007.phpt
@@ -0,0 +1,11 @@
+--TEST--
+output buffering - ob_get_clean
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+var_dump(ob_get_clean());
+?>
+--EXPECT--
+string(4) "foo
+"
diff --git a/tests/output/ob_008.phpt b/tests/output/ob_008.phpt
new file mode 100644
index 0000000..17a8081
--- /dev/null
+++ b/tests/output/ob_008.phpt
@@ -0,0 +1,11 @@
+--TEST--
+output buffering - ob_get_contents
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+echo ob_get_contents();
+?>
+--EXPECT--
+foo
+foo
diff --git a/tests/output/ob_009.phpt b/tests/output/ob_009.phpt
new file mode 100644
index 0000000..80edb46
--- /dev/null
+++ b/tests/output/ob_009.phpt
@@ -0,0 +1,12 @@
+--TEST--
+output buffering - ob_get_flush
+--FILE--
+<?php
+ob_start();
+echo "foo\n";
+var_dump(ob_get_flush());
+?>
+--EXPECT--
+foo
+string(4) "foo
+"
diff --git a/tests/output/ob_010.phpt b/tests/output/ob_010.phpt
new file mode 100644
index 0000000..24d650c
--- /dev/null
+++ b/tests/output/ob_010.phpt
@@ -0,0 +1,13 @@
+--TEST--
+output buffering - fatalism
+--FILE--
+<?php
+function obh($s)
+{
+	print_r($s, 1);
+}
+ob_start("obh");
+echo "foo\n";
+?>
+--EXPECTF--
+Fatal error: print_r(): Cannot use output buffering in output buffering display handlers in %sob_010.php on line %d
diff --git a/tests/output/ob_get_status.phpt b/tests/output/ob_get_status.phpt
new file mode 100644
index 0000000..a6a3498
--- /dev/null
+++ b/tests/output/ob_get_status.phpt
@@ -0,0 +1,34 @@
+--TEST--
+ob_get_status() function basic test
+--CREDITS--
+Sebastian Schürmann
+sebs at php.net
+Testfest 2009 Munich
+--FILE--
+<?php
+ob_start();
+$status = ob_get_status(true);
+ob_end_clean();
+var_dump($status);
+?>
+--EXPECT--
+array(1) {
+  [0]=>
+  array(7) {
+    ["chunk_size"]=>
+    int(0)
+    ["size"]=>
+    int(40960)
+    ["block_size"]=>
+    int(10240)
+    ["type"]=>
+    int(1)
+    ["status"]=>
+    int(0)
+    ["name"]=>
+    string(22) "default output handler"
+    ["del"]=>
+    bool(true)
+  }
+}
+
diff --git a/win32/build/config.w32 b/win32/build/config.w32
index a50c335..eab0e2a 100644
--- a/win32/build/config.w32
+++ b/win32/build/config.w32
@@ -1,5 +1,5 @@
 // vim:ft=javascript
-// $Id: config.w32,v 1.40.2.8.2.11 2008/10/10 23:38:14 pajoye Exp $
+// $Id: config.w32,v 1.40.2.8.2.12 2009/03/13 14:39:08 rrichards Exp $
 // "Master" config file; think of it as a configure.in
 // equivalent.
 
@@ -312,6 +312,10 @@ ADD_SOURCES("main", "main.c snprintf.c spprintf.c safe_mode.c fopen_wrappers.c \
 	strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c network.c \
 	php_open_temporary_file.c php_logos.c output.c internal_functions.c php_sprintf.c");
 
+if (VCVERS >= 14) {
+	AC_DEFINE('HAVE_STRNLEN', 1);
+}
+
 ADD_SOURCES("main/streams", "streams.c cast.c memory.c filter.c plain_wrapper.c \
 	userspace.c transports.c xp_socket.c mmap.c");
 
diff --git a/win32/build/config.w32.h.in b/win32/build/config.w32.h.in
index ca37f22..6e9f271 100644
--- a/win32/build/config.w32.h.in
+++ b/win32/build/config.w32.h.in
@@ -1,6 +1,6 @@
 /*
 	Build Configuration Template for Win32.
-	$Id: config.w32.h.in,v 1.7.2.4.2.3 2007/07/11 17:36:56 johannes Exp $
+	$Id: config.w32.h.in,v 1.7.2.4.2.4 2009/05/29 07:29:20 pajoye Exp $
 */
 
 /* Default PHP / PEAR directories */
@@ -145,7 +145,7 @@
 
 #undef HAVE_ATOF_ACCEPTS_NAN
 #undef HAVE_ATOF_ACCEPTS_INF
-#define HAVE_HUGE_VAL_NAN 1
+#define HAVE_HUGE_VAL_NAN 0
 
 /* vs.net 2005 has a 64-bit time_t.  This will likely break
  * 3rdParty libs that were built with older compilers; switch
-- 
1.5.6.5




More information about the Pkg-php-commits mailing list